Skip to content

feat: slide-out special key sender panel#90

Merged
billchurch merged 3 commits intomainfrom
feature/special-keys-panel
Feb 9, 2026
Merged

feat: slide-out special key sender panel#90
billchurch merged 3 commits intomainfrom
feature/special-keys-panel

Conversation

@billchurch
Copy link
Owner

@billchurch billchurch commented Feb 9, 2026

Summary

  • Add slide-out special key sender panel for browser-reserved key combinations (Ctrl+W, Ctrl+N, Ctrl+T, etc.)
  • Include Terminal Control, Line Editing, Special Keys, Network Equipment (Cisco Ctrl+Shift+6), and Function Keys (F1-F12) categories
  • Refactor onDisconnect handler to reduce cognitive complexity

Resolves #89
See also: billchurch/webssh2#481

Changes

New files

  • client/src/components/special-keys-data.ts - Key definitions with categories, sequences, and browser-reserved flags
  • client/src/components/SpecialKeysPanel.tsx - Slide-out panel component (absolute overlay, CSS transition, z-40)
  • tests/special-keys.test.js - 22 tests for data integrity, control codes, function keys, and browser-reserved flags

Modified files

  • client/src/stores/terminal.ts - Added isSpecialKeysOpen signal
  • client/src/components/MenuDropdown.tsx - Added "Special Keys" menu item with Keyboard icon
  • client/src/app.tsx - Wired panel into terminal container, extracted handleAuthFailed/showDisconnectError helpers

Test plan

  • npm run check:all passes (lint, typecheck, 180 tests)
  • Open panel via Menu > Special Keys
  • Click Ctrl+C - verify interrupt sent to terminal
  • Click function keys - verify ANSI sequences arrive
  • Verify terminal stays focused after each button click
  • Verify panel slide animation is smooth
  • Verify panel does not cause terminal to resize
  • Verify search overlay and panel can coexist
  • Verify Escape closes the panel
  • Verify Cisco Ctrl+^ abort works on network equipment

Add a collapsible panel for sending browser-reserved key combinations
(Ctrl+W, Ctrl+N, Ctrl+T, etc.) and other terminal sequences to the SSH
session via mouse click.

Categories: Terminal Control, Line Editing, Special Keys, Network
Equipment (Cisco Ctrl+Shift+6), and Function Keys (F1-F12).

Resolves #89
See also: billchurch/webssh2#481
High severity DoS via __proto__ key in mergeConfig. In practice, axios
is a transitive dev dependency only (@axe-core/cli → chromedriver →
axios) and is never included in the production bundle, so runtime risk
to end users is negligible. Updating per SECURITY.md CVE exception to
the 2-week cool-down policy.
Ctrl+B is the default tmux prefix key and also moves the cursor back
one character in readline. Browsers intercept it for the bookmarks bar,
so it is marked as browser-reserved.
@billchurch billchurch merged commit ca81f68 into main Feb 9, 2026
6 checks passed
@billchurch billchurch deleted the feature/special-keys-panel branch February 9, 2026 20:39
billchurch added a commit to billchurch/webssh2 that referenced this pull request Feb 9, 2026
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.

feat: slide-out special key sender panel

1 participant