Skip to content

Keyboard gaps: panel resize, zoom rebinding, global :focus-visible, unreachable click targets #210

Description

@johannesjo

Problem

The keyboard model is one of the app's strongest features (customizable registry, conflict detection, live help dialog, spatial nav) — these are the remaining gaps that break the "mouse optional" promise:

Panel resizing is mouse-only. ResizablePanel.tsx:316-321 — divider has only onMouseDown/onDblClick; no role="separator", no tabIndex, no arrow-key resize. A keyboard-first user can never adjust the AI-terminal/diff/notes split.

Zoom in/out are invisible and non-rebindable. src/lib/shortcuts.ts:49-98 registers them imperatively outside the keybinding registry, so unlike everything else they don't appear in the Keyboard Shortcuts dialog and can't be customized; only app.reset-zoom is registered (defaults.ts:350-357). The AZERTY-variant rationale justifies hiding duplicate bindings, not the canonical zoom rows.

No visible focus indicator outside dialogs. The comprehensive :focus-visible rule is scoped to .dialog-panel (styles.css:73-95 — the comment says so explicitly). .icon-btn (:920-931) has hover/active but no focus-visible; .new-task-placeholder:focus-visible { outline: none } (:1506-1508) while its accent border is driven by store focus, which DOM-Tab focus doesn't set — tabbing to it shows nothing.

Keyboard-unreachable click targets: diff hunk expanders (ScrollingDiffView.tsx:489-501, clickable div), review-comment editing (ReviewSidebar.tsx:142-151, ReviewCommentCard.tsx:130), overall-comment card (ReviewSidebar.tsx:44-45).

Proposed fix

  • role="separator" + tabIndex={0} + arrow keys on dividers (reuse setPanelUserSize).
  • Add app.zoom-in / app.zoom-out registry entries; keep layout variants hidden as today.
  • Promote the dialog-scoped :focus-visible selector list to a global rule; delete the outline: none at styles.css:1506.
  • Make the diff expander a <button>; add Enter-to-edit on review comments.

From a full design/UX audit (2026-07-07); adversarially verified. Line numbers as of b342bbd (v1.12.0).

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestuxUX / design improvements

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions