Make the Orbit UI work with a keyboard and a screen reader

What does this MR do and why?

An accessibility pass for the GitLab Orbit GA checklist found 3 blockers and 4 top should-fix items. This MR fixes them, so keyboard and screen reader users can use each Orbit page.

Area Change
Group settings, GitLab Orbit toggle Turning Orbit on or off asks for confirmation first, with the same dialogs as the Status tab. Turning off shows that indexed data is deleted after 30 days.
Overview map The map has a name and instructions, and Tab reaches it. The arrow keys select a node and open its details, Enter loads its connections, and Esc clears the selection. A screen reader reads the selected node.
Code navigation panel Each symbol is a button, so keyboard users can open it.
Query editor results A screen reader reads each result, "No rows match this query" too, also when the same result comes again.
Query reference drawer The button tells if the drawer is open. The drawer is a named dialog that takes focus, and focus goes back to the button when it closes.
Query editor, no access The card has a Contact sales button when its text says to contact sales.

The report also listed an auto-rotating globe. The globe does not rotate by itself, because nothing calls the rotate method, so this MR does not change motion.

References

None. The findings come from an accessibility pass (axe-core and keyboard checks) for the GitLab Orbit GA Go/No-Go checklist.

Screenshots or screen recordings

E2E run on a full local stack: GDK in SaaS mode, Siphon, NATS, ClickHouse, and the GitLab Orbit indexer, dispatcher, and web server. A headless browser uses only real key presses. The box at the bottom left shows the check result, the focused element, and what a screen reader hears. Before: master. After: this branch.

Before After
Settings: press Space on the toggle before-settings-turn-on-confirm after-settings-turn-on-confirm
Settings: turn off after-settings-turn-off-confirm
Overview: Tab walk, then arrow keys before-globe-tab-walk after-globe-selected
Query reference open before-query-drawer-open after-query-drawer-open
Query editor, no access before-query-403 after-query-403
Code navigation, Tab into the symbols before-code-symbol-focused after-code-symbol-focused
Check Before After
Settings: nothing changes until you confirm (UI and database) no, one key press turns Orbit on yes, both ways, and Cancel keeps the state
Overview: Tab reaches the map no yes
Overview: arrow keys select and announce nodes, Enter loads connections no yes, the map grows from 4 to 7 nodes
Query editor: first result, a repeated result, and "No rows" are read no yes
Query reference: focus moves in and comes back no yes
Query editor, no access: link to sales no yes, reachable with Tab
Code navigation: Tab and Enter open a symbol no yes
axe-core 4.11, WCAG 2.2 AA, on each page and dialog 0 new violations
Total 9 of 29 pass 43 of 43 pass

The only axe finding is on master too: color contrast of the grey example query in an empty editor.

Videos before (master)

Settings

Overview map

Query editor

Code navigation

Videos after (this branch)

Settings

Overview map

Query editor

Code navigation

Not covered: GitLab Self-Managed (the turn-on dialog shows the instance trial end date there, which the specs cover), dark mode, and a real screen reader.

How to set up and validate locally

  1. As the Owner of a group with GitLab Orbit off, go to Settings > GitLab Orbit. Press Tab to the toggle, then Space. A dialog asks you to confirm. Do the same to turn it off.
  2. Go to Your work > GitLab Orbit. Press Tab until the map has focus, then use the arrow keys, Enter, and Esc.
  3. On the Query editor tab, open Query reference with the keyboard, then run a query with a screen reader on.
  4. With the orbit_code_intelligence flag, open a code file on the default branch, select Code navigation, and press Tab into the symbols.

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Merge request reports

Loading
Loading