This calendar component is designed to comply with WCAG 2.1 AA guidelines.
- Tab: Navigate between focusable elements
- Arrow Keys: Navigate between dates
←→: Left/right movement↑↓: Up/down movement (7-day intervals)
- Home/End: Move to first/last date
- Enter/Space: Select date
- Tab: Navigate between buttons
- Enter/Space: Navigate to previous/next month
- Enter/Space: Navigate to today's date
role="application": Calendar containerrole="grid": Date gridrole="button": Date and navigation buttonsrole="heading": Month/year displayrole="status": Selected date display
aria-live="polite": Automatic announcement when date is selectedaria-atomic="true": Read entire message
aria-selected="true": Selected datearia-current="date": Today's datearia-disabled="true": Disabled date
- Clear focus outline (2px solid #2383e2)
- Enhanced visibility with focus offset
@media (prefers-contrast: high) {
/* Enhanced borders and backgrounds in high contrast mode */
}@media (prefers-reduced-motion: reduce) {
/* Disable animations */
}- Minimum 44px × 44px on mobile
- Ensures sufficient touch area
import { Calendar } from 'react-simple-datepicker-calendar';
function App() {
const [selectedDate, setSelectedDate] = useState(new Date());
return (
<Calendar
value={selectedDate}
onChange={setSelectedDate}
// Accessibility attributes are automatically applied
/>
);
}import { useAccessibility } from './hooks/useAccessibility';
function CalendarComponent() {
const { calendarRef, announce, validateAccessibility } = useAccessibility({
onDateSelect: (date) => {
console.log('Date selected:', date);
announce(`Date selected: ${date.toLocaleDateString()}`);
},
});
return <div ref={calendarRef}>{/* Calendar component */}</div>;
}import { testCalendarAccessibility } from './utils/accessibilityTest';
// Run test after component mounts
useEffect(() => {
const calendarElement = document.querySelector('[role="application"]');
if (calendarElement) {
const result = testCalendarAccessibility(calendarElement as HTMLElement);
console.log('Accessibility test result:', result);
}
}, []);# Run accessibility tests
npm run test:accessibility
# Color contrast tests
npm run test:contrast
# Keyboard navigation tests
npm run test:keyboard- Can access all interactive elements with Tab
- Can navigate between dates with arrow keys
- Can select dates with Enter/Space
- Focus indicators are clear
- All buttons have appropriate aria-label
- Announcement message when date is selected
- Current selected date status is displayed
- Today's date is identifiable
- Readability ensured in high contrast mode
- Information is not conveyed by color alone
- Sufficient color contrast (4.5:1 or higher)
- Appropriate touch target size (44px or larger)
- Touch gesture support
- Responsive design
- ✅ Added aria-label to date buttons
- ✅ Implemented keyboard navigation
- ✅ Screen reader announcement system
- ✅ Improved focus management
- 🔄 Voice control support
- 🔄 Quadriplegia support
- 🔄 Advanced keyboard shortcuts
If you'd like to contribute to accessibility improvements:
- Create an issue report
- Run accessibility tests
- Suggest improvements
- Participate in code reviews
All contributions aim for WCAG 2.1 AA compliance.
Note: This document is continuously updated. Please check the project repository for the latest information.