Accessibility (framework 1.x)¶
This document defines accessibility expectations for LessonKit authors and implementers.
WCAG targets vs verification¶
Area |
Target |
Status |
|---|---|---|
Keyboard operation |
WCAG 2.1 AA patterns for shipped blocks |
Implemented per component; see block catalog a11y notes |
Focus management |
Visible focus, trap/roving helpers in |
Utilities documented below |
Reduced motion |
Respect |
|
Formal VPAT / third-party audit |
— |
Not published; evaluate with your QA process before enterprise rollout |
Shipped components use semantic regions, quiz aria-live feedback, and keyboard alternatives for drag/drop where applicable. Custom UI must follow the same patterns—see Theming and accessibility guide.
Reduced motion¶
If the OS/browser requests reduced motion (prefers-reduced-motion: reduce), animations should be minimized or disabled.
LessonKit provides:
prefersReducedMotion()— boolean helpergetReducedMotionPreference()—"reduce" | "no-preference" | "unknown"shouldAnimate({ default })— returns false when preference isreduce
Quiz screen-reader announcements¶
Recommended pattern (status region)¶
For correctness feedback, use a status region that is updated when the user answers:
role="status"aria-live="polite"
LessonKit’s Quiz component follows this pattern and displays feedback in a live region.
Avoid duplicate announcements¶
Keep the live region small and stable; update only the text content that must be announced.
Avoid placing an
aria-liveregion inside anotheraria-liveregion.Do not shift focus to the status message; let screen readers announce it naturally.
When to use aria-describedby¶
If feedback should be associated with a specific form control (rather than announced globally), consider aria-describedby on the control pointing at a static feedback element. Use aria-live when the feedback must be announced immediately.