Skip to main content

Accessibility

Accessible UI is easy to get subtly wrong and costly to retrofit. Vortex builds it into each component, so your team starts from working behavior.

What Vortex handles

  • No key handlers to write: arrow keys, Enter, Space, and Escape work the way each pattern expects.
  • No ARIA state to sync: roles and states update with the component, such as aria-selected on tabs.
  • No focus logic to maintain: focus rings appear for keyboard users, and menus return focus to their trigger.
  • No announcements to wire up: Actionbar announces its summary when it changes.

What you provide

Name controls that have no visible text. Use ariaLabel on an icon-only Button:

<Button onlyIcon={Trash} ariaLabel="Delete project" />

Name dialogs with Modal.Title or ariaLabel, and radio groups with Radio.GroupLabel. Each component's Accessibility section lists what it needs.

Components can't check that your labels, content, and page structure make sense, so test key flows with a keyboard and a screen reader.

Keyboard behavior

These examples show the range. Each component page lists its full behavior.

Key
Description
Left arrowRight arrow
Moves focus between tabs without selecting them.
EnterSpace
Selects the focused tab and shows its panel.
Up arrowDown arrow
Selects the previous or next radio option.
Escape
Closes the menu and refocuses the trigger.
TabShiftTab
Moves focus between controls inside the modal.

Custom controls

Use these hooks to give your own interactions the same behavior:

Right-to-left

Set dir="rtl" on <html> or any wrapper. Components inside mirror their layout, animations, popover positions, and arrow-key navigation. Use useRTL to read or change the direction.