Skip to content

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

Open

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).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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