Accessibility
Raaghu Design System follows accessibility best practices to ensure components work with assistive technologies and meet WCAG 2.1 AA standards.
Color Contrast
Default color choices conform to WCAG 2.0 level AA requirements:
- Normal text: Minimum 4.5:1 contrast ratio
- Large text: Minimum 3:1 contrast ratio
- Interactive elements: Minimum 3:1 contrast ratio
Guidelines:
- Don't rely solely on color to convey information
- Use multiple visual cues (icons, text, patterns)
- Test color combinations with accessibility tools
High Contrast Support
Browser Support:
- Primary: Microsoft Edge and Internet Explorer 11
- Secondary: Mozilla Firefox
Best Practices:
// ✅ Use semantic HTML elements
<button>Click me</button>
// ❌ Avoid non-semantic elements for interactions
<div onClick={handleClick}>Click me</div>
High Contrast CSS:
@media (-ms-high-contrast: active) {
.custom-element {
background-color: ButtonFace;
color: ButtonText;
border: 1px solid ButtonText;
}
}
Screen Reader Support
Primary support: Microsoft Edge with Windows Narrator
ARIA Implementation:
// Descriptive labels
<button aria-label="Close dialog">×</button>
// Progress indicators
<div
role="progressbar"
aria-valuenow={50}
aria-valuemin={0}
aria-valuemax={100}
>
50%
</div>
// Live regions for dynamic content
<div aria-live="polite">{statusMessage}</div>
Screen Reader Only Text:
.sr-only {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
}
Keyboard Navigation
Focus Management:
.interactive-element:focus {
outline: 2px solid #005fcc;
outline-offset: 2px;
}
Key Interactions:
- Tab/Shift+Tab: Navigate between elements
- Enter/Space: Activate buttons and links
- Arrow keys: Navigate within components
- Escape: Close modals or cancel actions
Component Examples
Accessible Button:
<RdsButton
label="Submit form"
aria-describedby={hasError ? "error-message" : undefined}
/>
Accessible Form:
<label htmlFor="email">Email *</label>
<input
id="email"
type="email"
aria-invalid={hasError}
aria-describedby="email-error"
/>
{hasError && (
<div id="email-error" role="alert">
Please enter a valid email
</div>
)}
Accessible Modal:
<div
role="dialog"
aria-labelledby="dialog-title"
aria-modal="true"
>
<h2 id="dialog-title">Confirm Action</h2>
{/* Modal content */}
</div>
Testing Tools
Testing Checklist:
- Keyboard navigation only
- Screen reader testing
- High contrast mode
- Color blind simulation
- Automated accessibility scans