Accessibility
Last updated on 2026-02-25
The SaaS Starter Kit inherits all accessibility features from the AI UX Kit and adds accessible patterns for authentication forms, data tables, and settings pages.
Foundation: Radix UI
All interactive components are built on Radix UI — a headless library implementing WAI-ARIA design patterns. This gives you proper ARIA attributes, keyboard navigation, and focus management out of the box.
Keyboard Navigation
| Key | Action |
|---|---|
Tab |
Move focus to next focusable element |
Shift+Tab |
Move focus to previous element |
Enter / Space |
Activate buttons, links, toggles |
Escape |
Close dialogs, menus, popovers |
Arrow Keys |
Navigate menu items, tabs, table rows |
Home / End |
Jump to first/last item |
Authentication Forms
Auth recipe components include accessibility features:
- Labels for every input field (visible, not placeholder-only)
- Error messages linked to inputs via
aria-describedby - Password visibility toggle with
aria-label - OTP input with
aria-labelper digit and auto-advance - Social login buttons with clear
aria-labeltext - Form validation errors announced via
aria-live="polite"
Data Tables
The Data Table component uses semantic HTML:
<table>,<thead>,<tbody>,<th>,<td>- Sortable columns announce sort direction via
aria-sort - Pagination controls labeled with
aria-label - Row selection uses checkboxes with proper labels
Focus Management
- Focus trap in all modal dialogs and drawers
- Focus restoration — focus returns to trigger when overlays close
- Visible focus ring on all interactive elements during keyboard navigation
- Skip navigation can be added for page-level jumping
Color Contrast
Design tokens meet WCAG 2.1 AA contrast ratios:
- Body text: minimum 4.5:1
- Large text: minimum 3:1
- Interactive elements: minimum 3:1
Best Practices
- Use the
Fieldcomponent to wrap form inputs with labels and error messages - Add
aria-live="polite"regions for dynamic content updates - Use semantic HTML —
<nav>,<main>,<aside>,<section> - Test authentication flows with a screen reader
- Ensure all actions are reachable via keyboard (no mouse-only interactions)