Accessibility

Every component is keyboard-operable and exposes the right ARIA semantics. This is enforced by the test suite, which audits every enumerated combination of every component's options, not just the default.

What is guaranteed

  • Every interactive element has an accessible name. Label-less fields accept ariaLabel.
  • ARIA references (aria-labelledby, aria-describedby, aria-activedescendant) resolve; ids are unique; there is no positive tabindex.
  • Nothing focusable is hidden inside aria-hidden; no interactive control is nested in another.
  • Required state attributes are present: aria-valuenow on sliders, aria-checked on custom radios, aria-sort on sortable headers, aria-expanded on disclosures.
  • Errors are tied to their field with aria-invalid and aria-describedby; toasts use role="status" (alert for danger).
  • Focus is always visible (a 3px glow ring) and returns to the trigger when a popover or menu closes.
  • Motion respects prefers-reduced-motion. Native <dialog> provides modal focus handling.
  • Charts offer a Table view of every value, legend items that are real buttons, and keyboard readouts, so nothing depends on hover or colour alone.

Keyboard reference

ComponentKeys
Select, Combobox, MultiSelect↓ ↑ move · Enter choose · Esc close (and revert typed text) · Home End · typing filters · Backspace removes the last tag
Menu, MenuButton, ContextMenu↓ ↑ Home End move · → open submenu · ← close it · Esc close · Shift+F10 or the Menu key opens a context menu
Calendar, DatePicker← → day · ↑ ↓ week · Home End week ends · PgUp PgDn month · Shift+PgUp/PgDn year · Enter select
TimePickerType 2:30 pm or 1430 · ↑ ↓ in the hour and minute lists
Tabs← → move and activate (skipping disabled, wrapping) · Home End · document tabs: Ctrl+Shift+← → Home End reorder (announced) · Delete or Ctrl+W close · Shift+F10 tab menu
ToolbarOne tab stop · ← → (↑ ↓ when vertical) move between controls · Home End · text fields keep their own caret keys
Accordion↑ ↓ Home End between headers · Enter/Space toggle
Tree↑ ↓ Home End · → expand, then enter the first child · ← collapse, then go to the parent · Enter select · Space toggle the checkbox
Slider← → step · PgUp PgDn 10% · Home End
SplitPane, Shell asideFocus the divider: ← → (or ↑ ↓) resize · Shift larger steps · Home End · Enter reset
DataTable↑ ↓ PgUp PgDn Home End across rows, including virtual ones · → ← expand/collapse tree rows · Enter activate · Shift+F10 on a heading opens its column menu
Graph←↑→↓ nudge selected nodes · Shift larger · Delete remove · + − zoom · 0 fit · Esc clear selection
ChartsFocus the plot, then ← → read each point; histogram bins: Enter select, Shift+Enter extend, Esc clear
ColorPickerArrow keys move the saturation/brightness square (Shift for 10×) and nudge the hue and opacity rails
ShellA “Skip to content” link is the first focusable element

Notes for authors

  • Give the group a label when using InputGroup; don't label the individual controls inside it.
  • Icon-only buttons need aria-label. Icon-only SegmentedControl options fall back to their value, or take an ariaLabel.
  • Don't rely on colour alone: intents pair colour with an icon or text (toasts, callouts, badges).
/docs/accessibility Truss UI · MIT