Modals missing role="dialog"/focus trap; some icon buttons missing aria-label #113

Closed
opened 2026-07-15 19:52:56 +00:00 by claude-bot · 1 comment
Contributor

Severity: Low · Confidence: Medium · Effort: S · Category: ui (accessibility)

Evidence

  • app/src/components/layout/QuickCapture.tsx:246-403, app/src/components/entries/AnnotationModal.tsx:21-58, app/src/components/layout/Shell.tsx:100-135 - overlays with Escape-to-close but no role="dialog"/aria-modal and no Tab focus trap.
  • Missing aria-label on QuickCapture close (:288-295) and ShortcutHelpModal close (Shell.tsx:106-110); AnnotationModal.tsx:35-39 sets one correctly.

Problem
Keyboard/screen-reader users can Tab out of an "open" modal to background content, and two icon-only close buttons are unlabeled.

Impact
Accessibility gaps on the main capture sheet and modals. Not blocking, but systemic.

Fix
Add role="dialog" aria-modal="true", a small focus-trap (or inert on siblings), and the missing aria-labels.

Acceptance criteria

  • Focus stays within an open modal; screen readers announce it as a dialog.
  • All icon-only buttons have aria-labels.

Related: F-31, F-33 (an a11y pass).


Filed from the 2026-07-15 codebase audit. Full report: docs/.internal/report-2026-07-15.md (gitignored).

**Severity:** Low · **Confidence:** Medium · **Effort:** S · Category: ui (accessibility) **Evidence** - `app/src/components/layout/QuickCapture.tsx:246-403`, `app/src/components/entries/AnnotationModal.tsx:21-58`, `app/src/components/layout/Shell.tsx:100-135` - overlays with Escape-to-close but no `role="dialog"`/`aria-modal` and no Tab focus trap. - Missing `aria-label` on QuickCapture close (:288-295) and ShortcutHelpModal close (Shell.tsx:106-110); AnnotationModal.tsx:35-39 sets one correctly. **Problem** Keyboard/screen-reader users can Tab out of an "open" modal to background content, and two icon-only close buttons are unlabeled. **Impact** Accessibility gaps on the main capture sheet and modals. Not blocking, but systemic. **Fix** Add `role="dialog" aria-modal="true"`, a small focus-trap (or `inert` on siblings), and the missing `aria-label`s. **Acceptance criteria** - [ ] Focus stays within an open modal; screen readers announce it as a dialog. - [ ] All icon-only buttons have aria-labels. Related: F-31, F-33 (an a11y pass). --- _Filed from the 2026-07-15 codebase audit. Full report: `docs/.internal/report-2026-07-15.md` (gitignored)._
Author
Contributor

QuickCapture, AnnotationModal, and the shortcut-help modal now have role=dialog / aria-modal, a Tab focus trap (new useFocusTrap hook, restores focus on close), and the previously-missing aria-labels on icon-only close buttons.

Shipped in 59e4fdd (test fix 6561f9a), part of the v7.3.0 milestone. Verified on dev (v7.2.1-3-g6561f9a): app suite 65/65 and api suite 268/268 green on the dev server; the one CI red was the known runner flake (iac#159), not this change.

QuickCapture, AnnotationModal, and the shortcut-help modal now have `role=dialog` / `aria-modal`, a Tab **focus trap** (new `useFocusTrap` hook, restores focus on close), and the previously-missing `aria-label`s on icon-only close buttons. Shipped in `59e4fdd` (test fix `6561f9a`), part of the v7.3.0 milestone. Verified on dev (`v7.2.1-3-g6561f9a`): app suite 65/65 and api suite 268/268 green on the dev server; the one CI red was the known runner flake (iac#159), not this change.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/TeaLeaves#113
No description provided.