Skip to content

feat(ui): app-wide keyboard and screen-reader accessibility#89

Merged
Tryanks merged 1 commit into
mainfrom
feat/accessibility
Jul 18, 2026
Merged

feat(ui): app-wide keyboard and screen-reader accessibility#89
Tryanks merged 1 commit into
mainfrom
feat/accessibility

Conversation

@Tryanks

@Tryanks Tryanks commented Jul 18, 2026

Copy link
Copy Markdown
Owner

Accessibility pass built on the pinned GPUI's AccessKit support (roles, aria props, tab_index, focus_visible, automatic Enter/Space activation — verified in vendored source).

  • Shared accessible_clickable treatment in material.rs: tab stop + semantic role + localized accessible name + theme-aware 2px focus outline; applied to all raw clickable surfaces (composer send/steer/stop, chat Git/Open actions, sidebar search/settings/project/thread rows, terminal tabs, diff tabs/rows, settings nav/popovers, toast disclosures, recent-project rows).
  • Hover-hidden row actions (new/archive) now also reveal on keyboard focus.
  • Composite widgets (palette, composer suggestion/model/approval menus): ListBox/Option semantics with aria_selected + active-descendant tracking while focus stays in the input.
  • Settings toggle rows own the Switch role + keyboard activation (upstream Switch is mouse-only at rev 0315556 — rechecked — and is now visual-only inside the row).
  • 22 localized screen-reader names added to both locales; role/focus conventions documented in DESIGN.md.

Verification: fmt / clippy -D warnings / workspace tests green (139 UI tests incl. new regression tests for focus order, Enter/Space activation, palette navigation, toggle inversion). Manual walkthrough in the built app: full Tab/Shift-Tab traversal with no dead ends, real activations (thread switch, settings toggle, composer menu, palette) and native AccessKit tree inspection showing localized names/roles. VoiceOver was not enabled — no auditory claim made. Known remainder: some pre-existing icon-only component buttons are focusable but unnamed; keyboard resizing/scrollbars/terminal-grid SR output deliberately out of scope.

🤖 Generated with Claude Code

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Tryanks
Tryanks merged commit d2d7c07 into main Jul 18, 2026
3 checks passed
@Tryanks
Tryanks deleted the feat/accessibility branch July 18, 2026 23:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant