Skip to content

Share one scan panel layout between keyboard and mouse - #861

Merged
enaboapps merged 2 commits into
mainfrom
claude/860-shared-scan-panel
Sep 23, 2026
Merged

enaboapps merged 2 commits into
mainfrom
claude/860-shared-scan-panel

Conversation

@enaboapps

@enaboapps enaboapps commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Closes #860.

The keyboard's panel layout now lives in a new scan_panel module: panel size, padding, weighted rows with even gaps, the status tile and docking. The keyboard and the Mouse panel only supply their keys and status text.

  • Keyboard: output is unchanged. Before the refactor I recorded its frames with a one-off test across several states (row scan, key select, docked top, word predictions, error) and three screen/scale combinations. The refactored code reproduces them byte for byte (788 KB of frames).
  • Mouse panel: now matches the keyboard's size, padding and gaps, and replaces the floating label with a status tile. The status reads "Movement · Select a row" / "Select ↖", with paused, back-to-rows, failed and moving-pointer messages, and back-to-rows is highlighted like on the keyboard. Direction keys use the keyboard's character colour; More, Movement, Keyboard, Dock and Switch to Point use its toolbar colour.
  • Workflow: the moving-pointer prompt is now passed into the panel instead of being patched onto the frame afterwards.
  • Out of scope: the action menu keeps its current layout.

Validation:

  • Node 24: npm run lint, npm test (218 UI tests, 5 Node tests) and npm run build pass.
  • Rust 1.97.1: cargo fmt --check, cargo clippy --all-targets -- -D warnings and cargo test pass (517 unit tests, 1 ignored, 7 integration tests). New tests cover the shared layout (padding, gaps, weights, status tile, docking, highlighting) and the Mouse panel (keyboard geometry, status wording, moving and failed states).
  • I compared composites of the tile backgrounds before and after (text is drawn natively). The real overlay has not been checked on macOS or Windows yet.
  • Independent review of 4f47d65 found no blocking issues and two minor ones. Both are fixed in fe46f8a: the speed keys now use two-line labels ("Slower / 100%"), so the status reads "More controls · Select Slower 100%" instead of having two separators, and a workflow test now checks the moving prompt with nothing highlighted. Independent review of latest head fe46f8a found no actionable findings. Rust checks re-run on fe46f8a: fmt, clippy and 517 unit tests pass.
  • All PR checks pass on fe46f8a: frontend, dependency audit, macOS native, Windows native/NSIS, CodeQL, and JavaScript/TypeScript analysis.

🤖 Generated with Claude Code

Extract the keyboard's panel geometry into scan_panel so panels only
describe their rows and status. The keyboard renders through it with
unchanged output; the Mouse panel gains the keyboard's size, padding,
gaps, status tile and paused/back-to-rows/select prompts.

Closes #860.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@enaboapps enaboapps added this to the v1.0.0-rc.16 milestone Sep 23, 2026
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@enaboapps
enaboapps marked this pull request as ready for review September 23, 2026 15:48
@enaboapps
enaboapps merged commit 3eb73fd into main Sep 23, 2026
6 checks passed
@enaboapps
enaboapps deleted the claude/860-shared-scan-panel branch September 23, 2026 16:29
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.

Share one scan panel layout between keyboard and mouse

1 participant