Skip to content

Fix UI/UX audit findings: keyboard access, dialog focus, labels, contrast, safety guards - #21

Merged
erwin-wee merged 3 commits into
mainfrom
fix/ui-audit
Sep 19, 2026
Merged

erwin-wee merged 3 commits into
mainfrom
fix/ui-audit

Conversation

@erwin-wee

Copy link
Copy Markdown
Owner

Summary

Fixes the 10 findings from a UI/UX audit of the built app (Linux, 1280x760 and the 960x620 minimum window). No visual redesign; targeted interaction/a11y/safety fixes.

Accessibility

  • Dialog: aria-labelledby from the heading, Tab/Shift+Tab trapped inside the topmost dialog, focus restored to the opener on close (also when the dialog was opened from a context menu).
  • List rows (commits, commit files, working files, stashes, reviewed files): role=option, focusable, ArrowUp/Down/Home/End, Enter/Space select, Shift+F10/ContextMenu opens the row menu. Context menu now takes focus, ArrowUp/Down cycle items, Escape returns to the row.
  • Labels: TextField associates label/hint/error (htmlFor, aria-describedby, aria-invalid); every settings select/number input gets a <label for>; FilterInput gets an aria-label.
  • Contrast: light --fg-subtle 3.04→4.55:1, dark 3.77→5.14:1; dark --success-hover (white text) 3.37→5.33:1.
  • Reduced motion: dialog/toast/diff-flash animations and progress transitions off under prefers-reduced-motion; spinner slowed, not stopped.

Layout

  • Commit summary input gets its own row (was 139 px next to the AI buttons); AI actions move to the actions row.
  • History/stash file pane width: min(280px, 32%) so the diff keeps ~450 px at the 960 px minimum.

Workflow safety / recovery

  • Use ours / Use theirs shows a toast with Undo (git.conflict.unresolve).
  • Abort merge/rebase/cherry-pick/revert asks for confirmation first.
  • History list / commit details / Welcome health / large-file scan show an inline error with Retry (or "Scan cancelled") instead of empty-state copy.

Verification

  • npm run typecheck, npm run test:unit (750 pass).
  • Rebuilt and exercised in Electron on an isolated GITGOOD_USER_DATA profile with a temp repo: dialog name/trap/restore, keyboard row navigation + Shift+F10 menu, Space on include checkbox still toggles, Use-ours → Undo restores conflict markers, Abort confirm cancel/confirm, reduced-motion emulation, contrast tokens.
  • Independent reviewer pass; its 7 findings are addressed in the second commit.

erwin-wee and others added 3 commits September 19, 2026 03:26
…t, safety guards

- Dialog: aria-labelledby, focus trap, restore opener on close
- List rows (commits, files, stashes): role=option, tabIndex, arrow/Enter/Shift+F10 navigation
- TextField/FilterInput/Settings: associate labels, aria-describedby, aria-invalid
- Contrast: --fg-subtle both themes, dark --success-hover now >=4.5:1
- prefers-reduced-motion: drop dialog/toast/flash animations, slow spinner
- Commit form: summary input gets its own row; AI actions move to the actions row
- History/stash file pane: width min(280px, 32%) so the diff gets room at 960px
- Use ours/theirs: success toast with Undo (git.conflict.unresolve)
- Abort merge/rebase/cherry-pick/revert: confirm first
- History list/details, Welcome health, large-file scan: inline error + Retry instead of empty-state copy
…, cover ReviewView list

- listKeys: Enter/Space only activate when the row itself is focused
- Dialog: capture opener before autoFocus, prefer live outside-dialog focus, restore even from context-menu-opened dialogs; Tab with no focusables stays put
- ContextMenuHost: focus first item on open, ArrowUp/Down cycle, restore opener on close
- ReviewView file list gets role=listbox + key handler
- selectCommit clears detailsError; LargeFilesCard resets blobs per repository
@erwin-wee
erwin-wee merged commit 4b52438 into main Sep 19, 2026
2 checks passed
@erwin-wee
erwin-wee deleted the fix/ui-audit branch September 19, 2026 15:36
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