Skip to content

Getting started

Accessibility

What Junco handles for you, and what's still on you.

Built in#

Keyboard
Every interactive component works with the keyboard and follows the matching WAI-ARIA pattern (listbox, tabs, radio group, switch).
Focus
Focus rings use --ring and only show for keyboard focus, so mouse users don't see them and keyboard users always do.
Contrast
Every text and background pair is tested at 4.5:1 in light and dark. A token change that breaks a pair fails the build.
Not color alone
Status always carries words or a shape: badges have text and an optional dot, checkboxes a check, invalid fields an error message.
Forms
Field links label, help text and error to its control with htmlFor and aria-describedby, and marks it invalid and required.
Motion
All motion follows prefers-reduced-motion and the data-motion switch. Loading indicators slow down instead of stopping.
Testing
Components are tested with Testing Library and run through axe in the test suite.

Still up to you#

  • Label every control. Placeholder text isn't a label.
  • Give icon-only buttons an aria-label.
  • Name groups (radio groups, tab lists) with aria-label or aria-labelledby.
  • Don't put the only copy of important information in a tooltip.
  • Write error messages that say how to fix the problem.
  • Check contrast if you add your own colors; the theming page shows how.

Per component#

Every component page has a keyboard map and notes under Accessibility.