Accessibility
Verification matrix
Each component implements its WAI-ARIA APG pattern and the related WCAG 2.2 AA criteria. The status below separates each verification layer. Automated checks run in CI, with coverage that differs by component. Keyboard is marked verified only when all required keys from the key tables and explicit contracts have been verified in a real browser. Unverified components remain pending. Real-SR (VoiceOver / NVDA) is signed off per component by hand. SR speech order uses a virtual screen reader and includes cursor navigation through static text; it does not verify automatic announcements of updates.
| Component | APG pattern | axe-core | Keyboard | SR speech order | Real SR |
|---|---|---|---|---|---|
| Dialog | Dialog (Modal) | ✅ | ✅ | ✅ | ✅ |
| Alert Dialog | Alert & Message Dialog | ✅ | ✅ | ✅ | ✅ |
| Confirm Bridge | Alert & Message Dialog | ✅ | ✅ | ✅ | ⏳ |
| Drawer | Dialog (Modal) | ✅ | ✅ | ✅ | ⏳ |
| Command Palette | Dialog (Modal), Combobox | ✅ | ✅ | ✅ | ⏳ |
| Dropdown | Disclosure | ✅ | ✅ | ✅ | ✅ |
| Popover | — | ✅ | ✅ | ✅ | ⏳ |
| Tooltip | Tooltip | ✅ | ✅ | ✅ | ✅ |
| Hover Card | — | ✅ | ✅ | ✅ | ⏳ |
| Menu Button | Menu Button | ✅ | ✅ | ✅ | ⏳ |
| Context Menu | Menu | ✅ | ✅ | ✅ | ⏳ |
| Menubar | Menubar | ✅ | ✅ | ✅ | ✅ |
| Navigation Menu | Disclosure | ✅ | ✅ | ✅ | ⏳ |
| Overflow Menu | Menu Button | ✅ | ✅ | ✅ | ⏳ |
| Toolbar | Toolbar | ✅ | ✅ | ✅ | ⏳ |
| Collapsible | Disclosure | ✅ | ✅ | ✅ | ✅ |
| Accordion | Accordion | ✅ | ✅ | ✅ | ✅ |
| Read More | Disclosure | ✅ | ✅ | ✅ | ✅ |
| Tabs | Tabs | ✅ | ✅ | ✅ | ✅ |
| Breadcrumb | Breadcrumb | ✅ | ✅ | ✅ | ⏳ |
| Pagination | — | ✅ | ✅ | ✅ | ✅ |
| Scrollspy | — | ✅ | — | ✅ | ✅ |
| Tree View | Tree View | ✅ | ✅ | ✅ | ✅ |
| Stepper | — | ✅ | ✅ | ✅ | ✅ |
| Step Indicator | — | ✅ | — | ✅ | ⏳ |
| Checkbox | Checkbox | ✅ | ✅ | ✅ | ⏳ |
| Radio Group | Radio Group | ✅ | ✅ | ✅ | ✅ |
| Switch | Switch | ✅ | ✅ | ✅ | ✅ |
| Toggle Group | Toolbar | ✅ | ✅ | ✅ | ✅ |
| Rating | Radio Group | ✅ | ✅ | ✅ | ✅ |
| Listbox | Listbox | ✅ | ✅ | ✅ | ⏳ |
| Combobox | Combobox | ✅ | ✅ | ✅ | ✅ |
| Multi Select | Combobox | ✅ | ✅ | ✅ | ⏳ |
| OTP Input | — | ✅ | ✅ | ✅ | ✅ |
| Input Mask | — | ✅ | ✅ | ✅ | ⏳ |
| Number Input | Spinbutton | ✅ | ✅ | ✅ | ⏳ |
| Currency Input | — | ✅ | — | ✅ | ✅ |
| Color Picker | — | ✅ | ✅ | ✅ | ✅ |
| Slider | Slider | ✅ | ✅ | ✅ | ⏳ |
| Range Slider | Slider (Multi-Thumb) | ✅ | ✅ | ✅ | ⏳ |
| Textarea Autosize | — | ✅ | — | — | — |
| Tags Input | — | ✅ | ✅ | ✅ | ✅ |
| Calendar | Date Picker Dialog | ✅ | ✅ | ✅ | ✅ |
| Date Range Picker | Date Picker Dialog | ✅ | ✅ | ✅ | ✅ |
| Time Picker | Spinbutton | ✅ | ✅ | ✅ | ⏳ |
| Relative Time | — | ✅ | — | ✅ | ⏳ |
| Local Time | — | ✅ | — | ✅ | ⏳ |
| Timer / Countdown | — | ✅ | — | ✅ | ⏳ |
| Count Up | — | ✅ | — | ✅ | ⏳ |
| Form Field | — | ✅ | — | ✅ | ✅ |
| Form Validation | — | ✅ | — | ✅ | ✅ |
| Character Counter | — | ✅ | — | ✅ | ⏳ |
| Password Reveal | — | ✅ | ✅ | ✅ | ✅ |
| Password Strength Meter | Meter | ✅ | — | ✅ | ⏳ |
| Editable | — | ✅ | ✅ | ✅ | ⏳ |
| Conditional Fields | — | ✅ | — | — | — |
| Nested Form | — | ✅ | ✅ | ✅ | ⏳ |
| File Dropzone | — | ✅ | ✅ | ✅ | ⏳ |
| Direct Upload Progress | — | ✅ | — | ✅ | ⏳ |
| Auto Submit Form | — | ✅ | — | ✅ | ⏳ |
| Submit Once | — | ✅ | ✅ | ✅ | ⏳ |
| Unsaved Changes Guard | — | — | — | — | — |
| Persist | — | ✅ | — | — | — |
| Optimistic | — | ✅ | — | ✅ | ⏳ |
| Aspect Ratio | — | — | — | — | — |
| Separator | — | ✅ | ✅ | ✅ | ⏳ |
| Avatar | — | ✅ | — | ✅ | ⏳ |
| Resizable | Window Splitter | ✅ | ✅ | ✅ | ⏳ |
| Masonry | — | — | — | — | — |
| Sidebar | Dialog (Modal) | ✅ | ✅ | ✅ | ⏳ |
| Scroll Area | — | ✅ | ✅ | ✅ | ⏳ |
| Carousel | Carousel | ✅ | ✅ | ✅ | ✅ |
| Data Grid | Grid | ✅ | ✅ | ✅ | ✅ |
| Bulk Select | — | ✅ | — | ✅ | ⏳ |
| Filter | — | — | — | — | — |
| Sortable | — | ✅ | ✅ | ✅ | ⏳ |
| Overflow Indicator | — | ✅ | ✅ | ✅ | ⏳ |
| Scroll Visibility | — | ✅ | ✅ | ✅ | ⏳ |
| Sticky State Observer | — | — | — | — | — |
| Stick to Bottom | — | — | — | — | — |
| Scroll Restore | — | — | — | — | — |
| Reading Progress | — | — | — | — | — |
| Smart Sticky Header | — | — | — | — | — |
| Spinner | — | ✅ | — | ✅ | ⏳ |
| Skeleton Manager | — | ✅ | — | ✅ | ⏳ |
| Progress | — | ✅ | — | ✅ | ⏳ |
| Meter | Meter | ✅ | — | ✅ | ⏳ |
| Frame Loading State | — | ✅ | — | ✅ | ⏳ |
| Empty State Observer | — | ✅ | — | ✅ | ⏳ |
| Announcer | — | ✅ | — | ✅ | ⏳ |
| Toast | — | ✅ | ✅ | ✅ | ⏳ |
| Flash Bridge | — | ✅ | ✅ | ✅ | ⏳ |
| Network Status | — | ✅ | — | ✅ | ⏳ |
| Dismissible | — | ✅ | ✅ | ✅ | ⏳ |
| Clipboard | — | ✅ | ✅ | ✅ | ⏳ |
| Theme Toggle | — | ✅ | ✅ | ✅ | ✅ |
| Highlight on Insert | — | — | — | — | — |
| Idle Detector | — | ✅ | — | ✅ | ⏳ |
| Lazy Frame | — | — | — | — | — |
| Preview Guard | — | ✅ | — | ✅ | ⏳ |
| Reset on Restore | — | ✅ | — | — | — |
| Anchored Positioning | — | — | — | — | — |
| Roving Tabindex | — | ✅ | ✅ | — | — |
| Pointer Drag | — | ✅ | ✅ | — | — |
| Intersection | — | — | — | — | — |
| Focus Scope | — | ✅ | ✅ | — | — |
| Portal | — | — | — | — | — |
| Transition | — | — | — | — | — |
| Typing Indicator | — | ✅ | — | ✅ | ⏳ |
| Presence | — | ✅ | — | ✅ | ⏳ |
| Live Counter | — | ✅ | — | ✅ | ⏳ |
Accessibility is the product's core value. Each column describes its own verification scope. Keyboard "not applicable" follows the existing classification of component-specific key contracts; it does not exempt a component from focus verification. Real-SR (VoiceOver / NVDA) is the top-level sign-off: the golden set is regression-locked automatically while the rest are signed off per component by hand. The real-SR column is marked verified once the component is signed off on both engines (VoiceOver and NVDA); unsigned components with readable output remain in progress.