a11y: a skip link, color-blind safe charts

i18n::SkipLink holds a Tab stop in flow at zero size, first where it
sits, and while focused raises a pill over the page; Enter, Space or a
press hands focus to its target. gpui orders stops by tab_index before
paint and registers none for an invisible element, so the stop stays in
flow and only the pill is raised. Theme::set_color_blind_safe swaps Ely's
chart hues for a set fitted to stay apart under Machado's protanopia,
deuteranopia and tritanopia; a test holds every pair 0.10 apart in Oklab
and each hue 3:1 on its page, and red against green shows the measure
bites. KeyboardNavigationHelper points to interaction::RovingFocus. The
announcer, labels and screen-reader text stay blocked: gpui 0.2.2 has no
accessibility tree, and nothing here is trusted to observe VoiceOver.
The i18n tests move under src/i18n/tests.
This commit is contained in:
ZacharyZhang-NY committed 2026-09-27 20:00:26 -04:00
1 parent aa39fba87f
commit 1ac5c04fb0
10 files changed
+463 -7

No files matched your search

+4 -4
View File
@@ -280,13 +280,13 @@
## T40b a11y — `src/i18n`
- [ ] LiveRegion / Announcer — blocked: gpui 0.2.2 has no accessibility tree
- [ ] SkipLink
- [ ] LiveRegion / Announcer — blocked: gpui 0.2.2 has no accessibility tree; AppKit's announcement request needs none, but no process here is trusted to observe VoiceOver take it
- [x] SkipLink → `i18n::SkipLink`: a Tab stop in flow that shows only while focused, raised over the page, and hands focus to its target
- [ ] AccessibleIcon — blocked: no accessibility tree
- [ ] AriaLabel helper — blocked: no accessibility tree
- [ ] KeyboardNavigationHelper
- [x] KeyboardNavigationHelper → `interaction::RovingFocus`
- [ ] ScreenReaderOnly — blocked: no accessibility tree
- [ ] ColorBlindSafe Palette
- [x] ColorBlindSafe Palette → `Theme::set_color_blind_safe`: chart hues fitted to stay apart under Machado's simulated protanopia, deuteranopia and tritanopia, each 3:1 on its page
## T41 Maps — `src/maps`