Accessibility
Solidiom is built on the principle that accessible software is not optional. Every primitive, component, and template is designed and tested against WCAG 2.2 Level AA and WAI-ARIA Authoring Practices Guide (APG) patterns.
Our Commitment
- Every interactive primitive implements the corresponding APG keyboard and ARIA pattern
- Every primitive ships with committed accessibility evidence (
evidence.json) - Every theme preset passes AA contrast minimums in both light and dark modes
- Automated axe-core scans run on every build for all 52 primitives
- Keyboard navigation is documented and tested for every interactive element
Evidence
Our accessibility evidence is machine-verified and committed to the repository:
Automated Testing
| Layer | Coverage | Tool | Evidence |
|---|---|---|---|
| Primitives (52) | 100% | axe-core 4.10.2 | docs/axe-scan-results.md |
| Keyboard navigation | 100% | Manual audit | docs/keyboard-audit-results.md |
| Color contrast | All presets | Theme audit | pnpm run audit:preset-themes |
| Focus management | All overlays | Vitest browser | Per-primitive evidence |
Per-Primitive Evidence
Each of the 52 primitives has a committed packages/<name>/docs/accessibility/evidence.json containing:
- axe-core scan results (violations, passes, incomplete)
- Keyboard navigation contract
- ARIA attributes and roles used
- Screen reader behavior expectations
Screen Reader Testing
| Assistive Technology | Status | Platform |
|---|---|---|
| VoiceOver | Documented | macOS/iOS |
| NVDA | Planned (Phase 4) | Windows |
| JAWS | Planned (Phase 4) | Windows |
| TalkBack | Planned (Phase 4) | Android |
WCAG 2.2 AA Compliance
All primitives and components comply with WCAG 2.2 Level AA. Our full audit is documented at docs/qa/wcag-2.2-aa-audit.md and covers:
- Perceivable — semantic HTML, ARIA roles, 4.5:1+ text contrast,
remtypography - Operable — full keyboard navigation, no traps, visible focus, 24px+ targets
- Understandable —
langattributes, no unexpected changes, labeled inputs - Robust — valid ARIA, live regions for dynamic content
APG Pattern Compliance
Interactive primitives implement WAI-ARIA Authoring Practices patterns:
| Pattern | Primitives |
|---|---|
| Accordion | accordion |
| Dialog (Modal) | dialog, alert-dialog |
| Menu/Menubar | menu, context-menu, dropdown-menu |
| Tabs | tabs |
| Combobox | combobox, select |
| Listbox | listbox, select |
| Tooltip | tooltip |
| Switch | switch |
| Slider | slider |
| Tree View | tree |
| Alert | alert, toast |
Reporting Issues
If you encounter an accessibility barrier in Solidiom:
- Open a GitHub issue with the
accessibilitylabel - Include the primitive/component affected
- Describe the barrier and the assistive technology used
- We prioritize accessibility issues as critical bugs
Resources
Evidence Summary
52Primitives scanned
441Checks passed
0Violations
6Incomplete
All 52 scanned primitives passed with zero violations.
Per-Primitive Evidence
| Primitive | Passes | Violations | Incomplete | Outcome |
|---|---|---|---|---|
| accordion | 8 | 0 | 0 | pass |
| alert | 9 | 0 | 1 | pass |
| alert-dialog | 16 | 0 | 0 | pass |
| avatar | 1 | 0 | 0 | pass |
| badge | 1 | 0 | 0 | pass |
| breadcrumb | 12 | 0 | 0 | pass |
| button | 3 | 0 | 0 | pass |
| calendar | 20 | 0 | 1 | pass |
| card | 3 | 0 | 0 | pass |
| carousel | 13 | 0 | 0 | pass |
| checkbox | 12 | 0 | 0 | pass |
| collapsible | 8 | 0 | 0 | pass |
| combobox | 13 | 0 | 0 | pass |
| command-palette | 3 | 0 | 0 | pass |
| context-menu | 1 | 0 | 0 | pass |
| data-table | 5 | 0 | 0 | pass |
| date-picker | 1 | 0 | 0 | pass |
| dialog | 15 | 0 | 0 | pass |
| drawer | 14 | 0 | 1 | pass |
| empty-state | 7 | 0 | 0 | pass |
| field | 9 | 0 | 1 | pass |
| hover-card | 1 | 0 | 0 | pass |
| input | 5 | 0 | 0 | pass |
| input-otp | 10 | 0 | 0 | pass |
| kbd | 1 | 0 | 0 | pass |
| label | 1 | 0 | 0 | pass |
| listbox | 16 | 0 | 0 | pass |
| menu | 8 | 0 | 0 | pass |
| meter | 1 | 0 | 0 | pass |
| navigation-menu | 18 | 0 | 1 | pass |
| pagination | 6 | 0 | 0 | pass |
| popover | 8 | 0 | 0 | pass |
| progress | 11 | 0 | 0 | pass |
| radio-group | 13 | 0 | 0 | pass |
| resizable-panels | 13 | 0 | 0 | pass |
| scroll-area | 2 | 0 | 0 | pass |
| select | 10 | 0 | 1 | pass |
| separator | 10 | 0 | 0 | pass |
| sheet | 16 | 0 | 0 | pass |
| skeleton | 1 | 0 | 0 | pass |
| slider | 9 | 0 | 0 | pass |
| spinner | 9 | 0 | 0 | pass |
| switch | 12 | 0 | 0 | pass |
| tabs | 16 | 0 | 0 | pass |
| toast | 10 | 0 | 0 | pass |
| toggle | 8 | 0 | 0 | pass |
| toggle-group | 12 | 0 | 0 | pass |
| toolbar | 12 | 0 | 0 | pass |
| tooltip | 1 | 0 | 0 | pass |
| tree | 14 | 0 | 0 | pass |
| virtual-list | 9 | 0 | 0 | pass |
| visually-hidden | 4 | 0 | 0 | pass |