WingoUI
Buttons & Actions
ButtonButton GroupCopy ButtonDelete ButtonTheme ToggleToggleToggle Group
Inputs
Avatar UploadCalendarCheckboxColor PickerComboboxCron PickerCurrency InputDate PickerDate Range PickerDate Time PickerDuration PickerEmail InputFile UploadFilter BuilderInputInput GroupListboxMasked InputMention InputMonth PickerMulti SelectNumber InputOTP InputPassword InputPhone InputRadio GroupRatingSearch InputSegmented ControlSelectSignature PadSliderSwitchTag InputTextareaTime Picker
Forms
Address InputCSV ImportFieldForm WizardInline EditInvoice line itemsRich Text EditorSchema Builder
Navigation
Back To TopBounce SidebarBreadcrumbCommand MenuGlobal SearchGooey NavHook SidebarNav MenuNav TabsPaginationProximity SidebarScroll ProgressSidebarStepsTable Of ContentsTabsTopbarUser MenuWorkspace Switcher
Overlays
Alert DialogContext MenuDialogDrawerDropdown MenuFamily DrawerHover CardPopoverSheetShortcuts DialogTooltipTour
Feedback
AlertBannerCookie ConsentEmoji ReactionEmpty StateNotification BellNotification CenterProgressRoute ProgressSkeletonSpinnerToast
Data Display
Approval FlowAvatarBadgeCalendar ViewCode BlockComment ThreadContact cardCountdownDescription ListDiff ViewerFile ListFile managerFolderGanttJSON ViewerKbdLog ViewerMarkdownPresenceSchedulerTagTimelineTree View
Tables & Lists
Audit LogData TableDeal PipelineEditable GridKanbanListMembers tablePermissions MatrixTableTask ListVirtual List
Charts & Stats
Animated CounterArea chartBar chartDonut chartFunnel chartGaugeGitHub ActivityHeatmap calendarLeaderboardLine chartRadial barSparklineStat CardTrackerTrend badge
Layout
AccordionApp ShellCardCollapsibleDetail LayoutEntity HeaderPage HeaderScroll AreaSeparatorSettings LayoutSplit ViewToolbar
Media
Audio PlayerCarouselCSV ViewerDOCX EditorDOCX ViewerExcel ViewerFile SystemImage CropperImage LightboxLocation MapPDF ViewerPowerPoint ViewerQR CodeStep PlayerVideo Player
AI Kit
Agent Status CardChat MessageChat ThreadConversation ListFluid OrbGrid RevealMatrix OrbModel PickerPrompt InputReasoning IndicatorRule BuilderSuggestion ChipsTool Call TimelineUsage MeterVoice InputWorkflow Canvas
Text & Effects
Gravity Letters
Mobile
Action SheetBottom Tab BarFABHaptic ButtonHero HeaderInstall PromptLarge Title HeaderNotification BannerOnboarding CarouselPicker WheelPull To RefreshSlide To ConfirmSticky CTA BarSwipe DeckSwipeable Tabs
Commerce
Cart drawerCategory pickerCheckout stepsCoupon inputFavorite buttonFilter panelListing cardListing gridOrder trackerPricePrice rangePricing tableProduct galleryQuantity stepperReviewsSeller card
Marketing Sections
App Download SectionBlog Cards SectionCTA SectionFAQ SectionFeature GridFeature ShowcaseHero SectionIntegrations SectionLogo CloudMarketing FooterMarketing HeaderMarketing SectionNewsletter SectionPricing SectionStats SectionSteps SectionTeam SectionTestimonials SectionTimeline SectionVideo Section
Blocks
Admin Dashboard PageAdmin ShellAI Chat PageAutomation Builder PageCheckout PageCRM Contact PageCRM Pipeline PageError PagesInbox PageInvoice PageKPI DashboardListing Detail PageLogin PageMarketplace Home PageMarketplace Search PageMarketplace ShellMobile App HomeOnboarding FlowPost Listing WizardPricing PageRegister PageSettings PageUsers Admin Page
Templates
About PageAcademy PageAccessibility PageAffiliate PageAI Product PageBlog PageBlog Post PageCareers PageChangelog PageCommunity PageCompare PageContact PageCustomer Story PageCustomers PageDemo Booking PageDevelopers PageDocs Home PageDownload PageEnterprise PageEvents PageExperts PageFAQ PageFeature PageGlossary PageHelp Article PageHelp Center PageIntegration Detail PageIntegrations PageJob Detail PageLanding PageLaunch PageLegal PageManifesto PagePress PageProduct Tour PageReferral PageRoadmap PageROI Calculator PageSecurity PageSolutions PageStartups PageStatus PageTemplate Gallery PageWaitlist PageYear in Review Page
Hooks & Utilities
AI ChatChart kitCommerceDate utilsFile exportFile typesFiltersForm validationHapticsInvoicingMotion presetsNavigationNumber formatRelative timeRomanian locationsSpreadsheetText matchTonesUIProvideruseClipboarduseConsentuseControllableStateuseCooldownuseDebounceuseKeyboardInsetuseLocaleuseLongPressuseMediaControlsuseMediaQueryuseOverflowItemsusePersistedStateuseScrollEdgesuseScrollStateuseSelectionuseShortcutuseStickToBottom
GalleryTheme

Templates

Accessibility Page

Templates

Accessibility Page

Design
Academy PageAffiliate Page
Design
Live props
Appearance
design
alternate
tone
ctaTone
radius
Layout
heroLayout
showSummary
showJumpLinks
showTry
showConformance
showLimitations
showFeatures
showProcess
showReport
showContact
header
footer
State
defaultContrastTheme
Behavior
animateIn
locale
Code
import { AccessibilityPage } from "@/components/templates/accessibility-page"

<AccessibilityPage />
  1. Home
  2. Templates
  3. Accessibility Page
Pro

Accessibility Page

v1.0.0·Added in 1.8.0

An accessibility statement: live keyboard, contrast, motion and zoom demos, WCAG 2.2 conformance, known limitations and a feedback form.

The hero rises in once beside a drawn Acme board where a focus ring travels from card to card while a caption shows what a screen reader says (still under reduced motion and in thumbnails). Download the VPAT spins while onDownload runs, then confirms and announces it; Report an issue scrolls to the form and focuses its first field. Chips under the commitment summary jump to each section. Try it yourself: Tab into the mini board, arrows move between cards (Home / End too), Space or Enter picks a card up, arrows move it between columns, Space drops and Escape cancels, with every move announced in a live region and echoed in the visible transcript (pointer users get Move left / Move right / Drop / Cancel buttons); the contrast checker switches Light / Dark / High contrast and the text color, updating the WCAG ratio, the APCA Lc score and Pass / Fail badges; the Reduce motion switch (following the system setting) replays the same transition as a spring slide or a plain fade; the Text size slider grows a card to 200% and the Text spacing switch applies WCAG 1.4.12 spacing while it reflows. The conformance table becomes cards below 768px. The feedback form validates on submit, moves focus to a GOV.UK style error summary whose links focus each field, reveals a phone field when Phone is chosen, spins while onReport runs, then shows a reference number. All controls work with the keyboard and have visible focus rings.

Built with

The sections this page is made of. In the full-screen preview, hold Alt to outline each one on the page.

  • Marketing Sectionmarketing-section
  • Marketing Headermarketing-header
  • Marketing Footermarketing-footer
  • Hero Sectionhero-section

Add to a project

npx wingo-ui@latest add accessibility-page

Pro item: the CLI needs a Pro account. See plans

Usage

// app/(marketing)/accessibility/page.tsx
"use client"

import Link from "next/link"
import { AccessibilityPage } from "@/components/templates/accessibility-page"

export default function AccessibilityRoute() {
  return (
    <AccessibilityPage
      linkComponent={Link}
      onDownload={() => {
        window.location.href = "/files/acme-vpat.pdf"
      }}
      onReport={async (values) => {
        const response = await fetch("/api/accessibility-report", { method: "POST", body: JSON.stringify(values) })
        if (!response.ok) throw new Error("Could not send the report")
      }}
    />
  )
}

Props

  • designdefault "classic"
    "classic" | "minimal" | "high-contrast"

    The whole page's look. classic follows the layout props; minimal: a transparent header, a centered hero without the drawn board, outlined panels, flat tiles under hairlines, no gray bands and a simple footer; high-contrast: pure black and white tokens, solid 2px outlines instead of shadows, heavier headings, full-strength secondary text and 3px focus rings. The *Props overrides still win.

  • factsdefault "ACCESSIBILITY_FACTS"
    AccessibilityFact[]

    { value, label } commitment summary under the hero.

  • principlesdefault "ACCESSIBILITY_PRINCIPLES"
    AccessibilityPrinciple[]

    { id, name, summary, levelA, levelAA, supports, partial, notSupported } rows of the conformance table.

  • limitationsdefault "ACCESSIBILITY_LIMITATIONS"
    AccessibilityLimitation[]

    { id, title, criterion, description, workaround, status, target? }; status is in-progress, planned or ongoing, target an ISO day.

  • featuresdefault "ACCESSIBILITY_FEATURES"
    AccessibilityFeature[]

    { id, icon?, title, description, chips?, shortcuts? } product features; shortcuts use mod+k notation.

  • stepsdefault "ACCESSIBILITY_STEPS"
    AccessibilityStep[]

    { id, icon?, title, description, cadence } steps of the process.

  • quotedefault "ACCESSIBILITY_QUOTE"
    AccessibilityQuote | null

    { quote, name, role } under the process; null hides it.

  • boarddefault "ACCESSIBILITY_BOARD"
    AccessibilityBoardColumn[]

    { id, title, cards: { id, title }[] } columns of the keyboard demo.

  • contrastThemesdefault "ACCESSIBILITY_CONTRAST_THEMES"
    AccessibilityContrastTheme[]

    { id, label, background, samples: { id, label, color }[] } for the contrast checker; colors are hex.

  • contactsdefault "ACCESSIBILITY_CONTACTS"
    AccessibilityContact[]

    { id, icon?, title, value, href?, description } other ways to reach the team.

  • formatsdefault "ACCESSIBILITY_FORMATS"
    AccessibilityFormat[]

    { id, title, description, href? } alternate formats of the statement.

  • statementdefault "ACCESSIBILITY_STATEMENT"
    AccessibilityStatement

    { prepared, reviewed, nextReview, standard, method, scope }; dates are ISO days.

  • featureOptionsdefault "ACCESSIBILITY_FEATURE_OPTIONS"
    AccessibilityOption[]

    { value, label } choices of the Page or feature select.

  • assistiveTechOptionsdefault "ACCESSIBILITY_ASSISTIVE_TECH"
    AccessibilityOption[]

    { value, label } choices of the Assistive technology select.

  • scenedefault "ACCESSIBILITY_SCENE"
    AccessibilityScene

    The strings of the drawn hero board: { url, board, columns, captions, zoom, zoomText, highContrast }.

  • labelsdefault "DEFAULT_ACCESSIBILITY_PAGE_LABELS"
    Partial<AccessibilityPageLabels>

    Every visible string: headings, demo copy and announcements, table headers, form fields and errors, success copy.

  • heroLayoutdefault "split"
    "split" | "centered"

    The hero copy beside the drawn board, or centered over it. Applies to the classic design.

  • defaultContrastThemedefault "light"
    string

    The contrast checker's theme on load: an id from contrastThemes.

  • onDownload
    () => (void | Promise<unknown>)

    Download the VPAT. A returned promise keeps the button loading; without it the button waits 900 ms and confirms.

  • onReport
    (values: AccessibilityReportValues) => (void | Promise<unknown>)

    Called with { details, feature, assistiveTech, contactBy, email, phone } once the form is valid. A returned promise keeps the button loading; a rejection shows labels.failed. Without it the form waits 900 ms and shows a reference number.

  • showSummarydefault true
    boolean

    The commitment summary under the hero.

  • showJumpLinksdefault true
    boolean

    The row of section chips.

  • showTrydefault true
    boolean

    The four Try it yourself demos.

  • showConformancedefault true
    boolean

    The conformance section.

  • showLimitationsdefault true
    boolean

    The known limitations inside the conformance section.

  • showFeaturesdefault true
    boolean

    The product features grid.

  • showProcessdefault true
    boolean

    The process steps and the quote.

  • showReportdefault true
    boolean

    The feedback form.

  • showContactdefault true
    boolean

    Other ways to reach us, alternate formats and the statement details.

  • alternatedefault true
    boolean

    Gray bands on every other visible section. Applies to the classic design.

  • tonedefault "neutral"
    "neutral" | "brand" | "success" | "warning" | "danger" | "info"

    Icon tiles, progress bars, step numbers, the hero accents and the demos' switches and slider.

  • ctaTonedefault "neutral"
    "neutral" | "brand" | "success" | "warning" | "danger" | "info"

    Get started, Download the VPAT and Send report; brand is the marketing orange.

  • radiusdefault "md"
    "none" | "sm" | "md" | "lg" | "full"

    The corners of the form fields.

  • headerdefault true
    boolean

    The marketing header; off inside a site layout.

  • footerdefault true
    boolean

    The marketing footer.

  • headerProps
    Partial<MarketingHeaderProps>

    Passed to MarketingHeader.

  • footerProps
    Partial<MarketingFooterProps>

    Passed to MarketingFooter.

  • heroProps
    Partial<HeroSectionProps>

    Overrides for the HeroSection (media, background...).

  • animateIndefault true
    boolean

    The hero rises in once and the focus ring travels the drawn board; false keeps both still (thumbnails). Reduced motion always does.

  • localedefault "en-US"
    string

    Intl locale for the dates, percentages and contrast ratios.

  • linkComponentdefault "<a>"
    (props: LinkComponentProps) => ReactNode

    The router link for every link on the page (next/link in an app).

  • className
    string

    Classes for the root.

  • classNames
    Partial<Record<AccessibilityPageSlot, string>>

    Classes for header, hero, summary, jump, try, demo, conformance, limitations, features, process, report, form, success, contact, statement and footer.

Parts

  • contrastRatio

    function

    contrastRatio(foreground, background): the WCAG 2 contrast ratio of two hex colors.

  • apcaContrast

    function

    apcaContrast(foreground, background): the APCA 0.0.98G lightness contrast (Lc), negative for light text on dark.

  • ACCESSIBILITY_PAGE_SAMPLE

    constant

    All the sample content in one object.

  • ACCESSIBILITY_FACTS

    constant

    The four commitment facts.

  • ACCESSIBILITY_PRINCIPLES

    constant

    Perceivable, Operable, Understandable and Robust with WCAG 2.2 A and AA counts (55 criteria).

  • ACCESSIBILITY_LIMITATIONS

    constant

    Four known limitations with workarounds and target dates.

  • ACCESSIBILITY_FEATURES

    constant

    Eight accessibility features of the product.

  • ACCESSIBILITY_STEPS

    constant

    Design reviews, CI tests, manual audits and research.

  • ACCESSIBILITY_QUOTE

    constant

    A quote from Olivia Bennett, Head of Design.

  • ACCESSIBILITY_BOARD

    constant

    The three columns of the keyboard demo.

  • ACCESSIBILITY_CONTRAST_THEMES

    constant

    Light, dark and high contrast palettes for the checker.

  • ACCESSIBILITY_CONTACTS

    constant

    Email, phone with relay and postal address in New York.

  • ACCESSIBILITY_FORMATS

    constant

    Large print, plain text and easy read.

  • ACCESSIBILITY_STATEMENT

    constant

    Prepared, reviewed and next review dates, standard, method and scope.

  • ACCESSIBILITY_FEATURE_OPTIONS

    constant

    The Page or feature choices.

  • ACCESSIBILITY_ASSISTIVE_TECH

    constant

    The Assistive technology choices.

  • ACCESSIBILITY_SCENE

    constant

    The strings of the drawn hero board.

  • DEFAULT_ACCESSIBILITY_PAGE_LABELS

    constant

    The English strings.

  • ACCESSIBILITY_PAGE_DESIGNS

    constant

    The design names, classic first: ["classic", "minimal", "high-contrast"].

  • AccessibilityPageProps

    type

    Props of AccessibilityPage.

  • AccessibilityPageDesign

    type

    "classic" | "minimal" | "high-contrast".

  • AccessibilityPageLabels

    type

    The strings labels can override.

  • AccessibilityReportValues

    type

    { details, feature, assistiveTech, contactBy, email, phone } passed to onReport.

  • AccessibilityPrinciple

    type

    One row of the conformance table.

  • AccessibilityLimitation

    type

    One known limitation.

  • AccessibilityFeature

    type

    One feature card.

  • AccessibilityContrastTheme

    type

    One theme of the contrast checker.

Examples

Open

High contrast design

design="high-contrast": pure black and white tokens, solid 2px outlines instead of shadows, heavier headings and 3px focus rings.

Open

Minimal design

design="minimal": a transparent header, a centered hero without the drawn board, outlined panels, no gray bands and a simple footer.

Open

Brand orange, centered hero

heroLayout centered with tone and ctaTone brand; the contrast checker opens on the dark theme.

Open

Statement only

Without the demos, the features and the process: the conformance table, the form and the contact details, in en-GB.

Open

When the report fails

onReport rejects: after the spinner the form keeps everything and shows the error above the button.

Dependencies

motionlucide-reactmarketing-sectionmarketing-headermarketing-footerhero-sectionavatarbadgebuttonfieldinputkbdprogressradio-groupsegmented-controlselectsliderswitchtextareanavigationmotiontonesui-config

Files

  • components/templates/accessibility-page.tsx
  • components/templates/accessibility-page-data.ts

See also

Legal PageSecurity PageContact PageKbdProgress
PreviousAcademy PageNext Affiliate Page