FN-6527: add terminal shortcuts and preferences

Adds persistent terminal customization and keyboard-less navigation controls to the dashboard terminal.

- Add arrow shortcut buttons that send ANSI cursor sequences alongside existing Ctrl/Alt helpers.
- Add localStorage-backed terminal preferences for font family, size, cursor style, blink, and renderer with legacy font-size migration.
- Apply font and cursor preferences live, document renderer behavior, and cover preference parsing and modal controls with tests.

Files changed:
 docs/dashboard-guide.md                            |   3 +
 .../dashboard/app/components/TerminalModal.css     |  57 ++++-
 .../dashboard/app/components/TerminalModal.tsx     | 271 ++++++++++++++++-----
 .../components/__tests__/TerminalModal.test.tsx    | 135 +++++++++-
 .../utils/__tests__/terminalPreferences.test.ts    |  90 +++++++
 .../dashboard/app/utils/terminalPreferences.ts     | 197 +++++++++++++++
 6 files changed, 690 insertions(+), 63 deletions(-)

Fusion-Task-Id: FN-6527
Fusion-Task-Lineage: bc863486-9d2c-41d5-84a4-7b697e81a298
This commit is contained in:
gsxdsm
2026-06-17 00:06:24 -07:00
parent 934baa9259
commit e923b5e84d
6 changed files with 690 additions and 63 deletions

View File

@@ -338,6 +338,9 @@ Features:
- PTY-backed shell sessions
- Ctrl/Cmd+C copies the current terminal selection, while plain Ctrl+C with no selection still sends SIGINT
- Ctrl/Cmd+V pastes clipboard text into the active terminal session
- The Shortcuts panel includes Ctrl/Alt helpers, ESC/Tab, common shell shortcuts, and Up/Down/Left/Right arrow buttons that send standard ANSI cursor sequences for keyboard-less shell history and line editing
- The Preferences panel customizes font family, font size, cursor style, cursor blink, and renderer; changes persist in browser `localStorage` under `kb-terminal-preferences`, with the legacy `kb-terminal-font-size` value migrated automatically
- Font and cursor preferences apply live to the active xterm instance; renderer changes apply the next time the terminal opens, and mobile devices keep the WebGL renderer disabled to avoid glyph artifacts
- Mobile-aware virtual keyboard handling and auto-refit behavior
- Reopen/reconnect/session-recovery flows preserve single-keystroke input forwarding (no duplicate characters, no page refresh required)