Accessibility and content
Keyboard, state and accessible naming
Document source evidence and explicit gaps instead of assuming that visually finished controls are accessible.
On this page
Source evidence
| Interface | Implemented | Remaining work |
|---|---|---|
| ActionChecklist | Native button and local state | Button name and pressed/checked semantics |
| ToggleField | Headless UI Switch | Complete label/description and disabled verification |
| SidebarNavDropdown | Headless UI Listbox | Keyboard traversal, focus return and routing context |
| CourseCard | Named progressbar and native links | Touch edit discovery, long text and completion announcements |
| CourseInformationTabs | Ordinary buttons and conditional panel | Selection semantics and consistent keyboard model |
| CompletionBar | Visible numeric text | Progressbar semantics and zero-total guard |
| FormField | Native input and focus treatment | Error/descriptions, clipboard rejection and announcements |
| SaveButton | Disabled busy label | Failure recovery and live status |
| Sorting | Pointer sensors and dnd-kit attributes | Keyboard/non-drag equivalent and persistence failure |
| Provider media | Iframe and aspect wrapper | Title, captions, keyboard entry/exit and provider accessibility |
Manual protocol
- Use keyboard only to reach and operate every control, including phone menus and rich editor toolbar.
- Check role, name, current/checked/selected state and focus in the accessibility tree.
- Test 200% zoom and narrow layouts without hiding error or action text.
- Test a screen reader with actual lesson context, progress changes and failure messages.
- Test reduced motion and timing-sensitive copy/feedback states. Record browser and assistive technology; do not infer a pass from static code.
Examples from the app
Actual TeachKit UI with Thomas McGee’s course content. Session, progress and connection specimens are simulated; no student data or live changes. Captured at 2× resolution or higher. Select an image to inspect it full size.
Related topics
Source audit: 2026-10-07 · Revision d8cf23d0a329 · Documentation v0.1