Accessibility
A concise release-wide contract for Vinyaas registry components. This is a checklist, not a runtime framework.
Contract
Apply these requirements when adding or changing installable UI under the registry. Prefer native HTML semantics before ARIA.
- Keyboard navigation. All interactive behavior is reachable with a keyboard. Tab order follows visual order.
- Focus visibility. Focused controls show a visible focus-visible ring (or equivalent).
- Focus management. Overlays move focus into the surface on open and restore it to the trigger on close when appropriate.
- Escape. Dismissible overlays close on Escape without trapping the keyboard.
- Enter / Space. Buttons and button-like controls activate with Enter and Space where native semantics require it.
- ARIA roles and states. Prefer native elements. When custom widgets are required, expose correct roles, states, and properties.
- Accessible name. Every control has an accessible name (label, aria-label, or labelled-by).
- Disabled state. Disabled controls are not operable and communicate the disabled state to assistive technology.
- Loading state. Loading UI exposes polite status text or an equivalent accessible announcement when it matters.
- Touch targets. Primary interactive targets aim for comfortable hit areas (about 44×44 CSS px where practical).
- Reduced motion. Non-essential motion respects prefers-reduced-motion.
- No keyboard trap. Users can always move focus away from a component with standard keys.
Testing convention
- Prefer Testing Library queries by role and accessible name.
- Cover keyboard activation for primary interactions.
- For overlays, assert Escape closes and focus returns when applicable.
- Assert disabled controls cannot be activated.
- Do not require axe or a dedicated a11y runner for every component.