Accessible component showcase
A refined, production-grade reference for WAI-ARIA Authoring Practices. Each widget is genuinely keyboard- and screen-reader-accessible — not just styled to look like it.
1 Modal Dialog
Tab trap · Esc close · Click backdropFocus moves into the dialog on open, cycles only within it, and returns to the trigger on close. The page behind is inert while open.
role="dialog" aria-modal="true" aria-labelledby focus trap + inert background3 Tabs
← → switch · Tab enters panelExactly one tab in the tab order. Arrow keys move focus and activate. Hidden panels use the hidden attribute.
Project overview
Prism is a design-system reference that proves accessibility and aesthetics aren't at odds. Every interaction is keyboard-tested and screen-reader-verified.
Technical specifications
Built to WAI-ARIA 1.2 authoring practices. All ARIA relationships resolve to real elements; hidden panels are truly hidden.
- Focus management with reusable trap utility
- Respects
prefers-reduced-motion - Visible focus rings on every interactive element
Recent activity
Changelog and contributions. Tab panels are reachable by Tab after activation — try tabbing into this content.
role="tablist" aria-selected hidden on inactive panels4 Combobox
Type to filter · ↑↓ highlight · Enter select · Esc revertUses the aria-activedescendant pattern — the listbox itself is never focusable. Typing filters ~20 options; highlight scrolls into view.
Start typing to see suggestions.
role="combobox" aria-activedescendant aria-controls → listbox5 Accordion
Enter / Space toggle · Multiple openEach button controls its region via aria-controls and aria-expanded. Regions animate height, then toggle hidden.
focusTrap utility keeps Tab cycling inside modals. On close, focus returns to the trigger. While a modal is open, the page behind is made inert via aria-hidden and focusability removal — so screen readers and keyboards can't escape.
prefers-reduced-motion. When reduced motion is requested, animations collapse to instant state changes — no motion, no delay, same semantics.
aria-expanded aria-controls animate height → toggle hidden