Accessibility
Keyboard, focus and semantics
Preserve native control behavior while documenting incomplete custom-control semantics.
On this page
Control findings
| Family | Implemented | Gap / next check |
|---|---|---|
| Buttons/selects/checkboxes | Native keyboard interaction and labels in many contexts | Validate all phone-only icon names. |
| Dialog | showModal, Escape and close button | No title/description association; tall forms can clip header/footer at constrained height. |
| EmailAddressField | Arrow keys, Enter, Escape and listbox | No aria-activedescendant; active index is visual. |
| MultiEmailAddressField | Enter first option, Backspace last chip, Escape | No arrow navigation; options do not express active choice. |
| Queue/subnav | Native disclosure and links | No roving menu model; Escape return focus absent. |
| Conversation filter | Escape restores summary focus | Mobile summary hides Filter text without accessible name. |
| Participant/merge selection | Buttons with visible checks | No aria-pressed/radio semantics. |
| Composer shortcut | Visible ⌘ + Enter hint | No matching keydown handler. |
Release verification
- Tab through header, open menu and selection without pointer use.
- Open/close each dialog from its actual entry point and inspect return focus.
- Ensure popup focus is not hidden behind stacked messages or internal scrollers.
- Test recipient choice with a screen reader, including selected and active options.
- Verify a short viewport and 200% zoom retain all essential controls.
Source references
| File | Responsibility |
|---|---|
| components/ui/dialog.tsx | Modal behavior |
| components/ui/email-address-field.tsx | Combobox handlers |
| components/ui/multi-email-address-field.tsx | Recipient keys |
| components/inbox/thread-participants.tsx | Selection controls |
Examples from the app
Actual Sonarist components with fictional conversations, people, example.com addresses and simulated operational states. Captured at 2× resolution or higher. Select an image to inspect it full size.
Related topics
Source audit: 2026-10-08 · Revision 10f45d1377b5 · Documentation v1.0.0