Skip to content
Aback UI

Accessibility

Accessibility is part of correctness. This page states the contract and separates what has been tested from what has not.

The contract

  • Semantic HTML first. A button for an action, an anchor for navigation.
  • Every interactive control is reachable and operable by keyboard.
  • Focus is visible with at least 3:1 contrast, using focus-visible.
  • Icon-only controls have an accessible name; decorative icons are hidden.
  • State is never communicated by color alone.
  • Readable text meets WCAG AA contrast and is never faded with opacity.
  • Motion respects prefers-reduced-motion and never delays an essential action.
  • Status messages use role status or alert; errors are tied to their control.

What is verified

The component package runs behavior tests for buttons, dialogs, tabs, accordions, checkboxes, switches, dropdown menus, tooltips, and form fields. Axe runs on representative renders for structural checks. The docs site is checked for landmarks, a skip link, one H1 per page, and keyboard-operable navigation.

The automated suite cannot evaluate color contrast in jsdom. Contrast was checked against the measured token pairs in the design system: ink on canvas 19.8:1, mute on canvas 4.7:1, link 700 on white 7.0:1, and primary-400 on dark surfaces 8.0:1 or better.

What is not verified

  • Manual screen-reader sessions across NVDA, JAWS, and VoiceOver.
  • Every browser and assistive-technology combination.
  • Automated visual regression.

Do not describe Aback UI as WCAG conformant until those reviews are complete. Report a gap with the component, the environment, and the steps to reproduce.

Keyboard behavior by component

The table lists the documented keys. Native controls keep native behavior, and complex widgets follow the WAI-ARIA Authoring Practices through Radix primitives.

ComponentKeyAction
AccordionEnter / SpaceToggle the focused panel.
AccordionArrowDown / ArrowUpMove focus to the next or previous header.
AccordionHome / EndMove focus to the first or last header.
Alert DialogEscapeClose without running the action.
Alert DialogTab / Shift+TabMove between Cancel and the action.
Alert DialogEnter / SpaceActivate the focused action.
CalendarArrow keysMove focus by one day or one week.
CalendarHome / EndMove to the first or last day of the focused week.
CalendarPage Up / Page DownMove to the previous or next month.
CalendarShift + Page Up / Page DownMove to the previous or next year.
CalendarEnter / SpaceSelect the focused day.
CheckboxSpaceToggle the checkbox.
CheckboxTabMove focus into or out of the control.
Code BlockTabFocus the code region, then the copy button.
Code BlockArrow keysScroll the focused code region.
ComboboxEnter / SpaceOpen the list from the trigger.
ComboboxArrow Down / Arrow UpMove through the filtered options.
ComboboxHome / EndJump to the first or last option.
ComboboxEnterSelect the active option and close the list.
ComboboxEscapeClose the list and return focus to the trigger.
CommandArrowUp / ArrowDownMove the active option.
CommandEnterRun the active option.
CommandEscapeClose the dialog and return focus to the trigger.
Copy ButtonEnter / SpaceCopy the value.
Date PickerEnter / SpaceOpen the calendar from the field.
Date PickerArrow keys / Home / EndMove through days in the open calendar.
Date PickerPage Up / Page DownChange month; add Shift to change year.
Date PickerEnter / SpaceChoose the focused day.
Date PickerEscapeClose without changing the value and return focus to the field.
DialogEscapeClose the dialog and return focus to the trigger.
DialogTab / Shift+TabCycle focus inside the dialog.
DialogEnterActivate the focused control.
Dropdown MenuEnter / Space / ArrowDownOpen the menu and focus the first item.
Dropdown MenuArrowUp / ArrowDownMove focus between items.
Dropdown MenuHome / EndJump to the first or last item.
Dropdown MenuEscapeClose the menu and return focus to the trigger.
DropzoneTabFocus the file input.
DropzoneEnter / SpaceOpen the system file picker.
PopoverEnter / SpaceOpen the popover from the trigger.
PopoverTab / Shift+TabMove through the controls inside the panel.
PopoverEscapeClose and return focus to the trigger.
Radio GroupTabEnter or leave the group.
Radio GroupArrowUp / ArrowDownMove and select in a vertical group.
Radio GroupArrowLeft / ArrowRightMove and select in a horizontal group.
Radio GroupSpaceSelect the focused option without moving.
RatingTabEnter or leave the rating.
RatingArrowRight / ArrowUpSelect one more star.
RatingArrowLeft / ArrowDownSelect one fewer star.
RatingSpaceSelect the focused star, or clear it when clearable.
SelectSpace / EnterOpen the native picker.
SelectArrowUp / ArrowDownChange the selected option.
SelectEscapeClose the picker without changing the value.
SheetEscapeClose and return focus to the trigger.
SheetTab / Shift+TabCycle focus inside the panel.
SheetEnter / SpaceActivate the focused control.
Skip LinkTabReveal the link from the top of the page.
Skip LinkEnterMove focus to the main content.
SliderArrowLeft / ArrowRightChange the value by one step.
SliderHome / EndJump to the minimum or maximum.
SliderPageUp / PageDownMove in a larger increment.
SwitchEnter / SpaceToggle the switch.
SwitchTabMove focus into or out of the control.
TabsArrowLeft / ArrowRightMove between horizontal tabs.
TabsArrowUp / ArrowDownMove between vertical tabs.
TabsHome / EndMove to the first or last tab.
Theme ToggleEnter / SpaceSwitch between light and dark.
ToastTabMove focus to the action and close buttons while the toast is visible.
ToastEnter / SpaceRun the focused action or dismiss the toast.
ToastAlt + TMove focus into the toast region (sonner's default hotkey).
ToastEscapeDismiss the focused toast.
Toggle GroupTabEnter or leave the group.
Toggle GroupArrowLeft / ArrowRightMove focus between items.
Toggle GroupSpace / EnterToggle the focused item.
TooltipTabFocus the trigger and reveal the tooltip.
TooltipEscapeDismiss the tooltip while focus stays on the trigger.
Automated behavior testsAxe structural checksManual screen reader pendingThe full policy lives in the repository at docs/accessibility.md.