Skip to main content
eagami

Accessibility

Every component is built to the leading web accessibility standards: correct semantics, full keyboard support, focus management, and screen-reader announcements work out of the box.

Conformance

The library adheres to WCAG 2.2 Level AA, the standard most organizations are required to meet, and follows the official W3C authoring practices for every kind of control, from dialogs and menus to sliders and date pickers. Screen-reader announcements ship in every supported language, so assistive technology always speaks the language of the user.

Accessibility built in

  • Semantics

    Native elements where possible, explicit ARIA roles, states, and properties where not. States like expanded, selected, checked, invalid, and busy are always exposed programmatically, never through styling alone.

  • Keyboard support

    Complete APG keyboard patterns: roving tabindex, arrow-key navigation, Home and End, Escape to dismiss, and Enter or Space to activate, with RTL-aware arrow handling.

  • Focus management

    Modals and pickers trap focus while open and return it to the trigger on close. Focus indicators are always visible and never suppressed.

  • Screen-reader announcements

    Toasts, alerts, validation errors, and async state changes are announced through live regions with the appropriate politeness level.

  • Reduced motion

    Animations respect the prefers-reduced-motion media query throughout.

  • Contrast

    The default light and dark themes meet WCAG contrast requirements, and the theming tools flag combinations that fall below AA.

Accessible names

Components that render text label themselves. Anything icon-only or graphical exposes an aria-label input (with localized defaults for built-in controls like clear, close, and dismiss buttons), and form fields wire label, hints, and error messages to the control via aria-describedby automatically.

<!-- Icon-only controls need an explicit accessible name -->
<ea-button aria-label="Close" variant="ghost">
  <ea-icon-x />
</ea-button>

<!-- Form fields get their accessible name from the label input -->
<ea-input label="Email address" type="email" />

Provide a label or aria-label for controls without visible text and the component handles the rest: names, hints, and error messages stay wired together automatically.

Verified with every release

Every component is checked against industry accessibility rules whenever it changes, and a release only ships when every check passes, so the accessibility you see here holds as the library evolves.