WCAG 2.1 AA — release blocker
Calendar must satisfy these on every render before it ships.
Web (React DOM)
- Renders a
<table>grid withrole="grid". Each day is a focusable cell. - Navigation buttons (
</>) are real<button>elements witharia-label(e.g. "Go to previous month"). - Selected date receives
aria-selected="true". - Disabled dates receive
aria-disabled="true"and cannot be focused. aria-current="date"marks today's date.
Keyboard
| Key | Action |
|---|---|
Arrow Left/Right | Move focus by one day. |
Arrow Up/Down | Move focus by one week. |
Home / End | Jump to start / end of the week. |
Page Up/Down | Go to previous / next month. |
Enter / Space | Select the focused date. |
React Native
- Calendar is a stub on native (not yet interactive).
Reduced motion
Animations are CSS-based and respect prefers-reduced-motion.
Audit checklist
- Every day cell is keyboard-reachable
- Selected date announced with
aria-selected - Today marked with
aria-current="date" - Nav buttons have
aria-label - Disabled dates not focusable
- 4.5:1 contrast on selected / today backgrounds