Skip to content

feat(terminal): add fullscreen mode for terminal sessions - #78

Merged
howdeploy merged 1 commit into
howdeploy:mainfrom
tab11pm:feature/terminal-fullscreen-mode
Sep 26, 2026
Merged

howdeploy merged 1 commit into
howdeploy:mainfrom
tab11pm:feature/terminal-fullscreen-mode

Conversation

@tab11pm

@tab11pm tab11pm commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Adds fullscreen mode for terminal sessions. A session can be expanded to fill the entire viewport via a header button or Escape key to exit.

Changes

  • App.tsx — tracks fullscreenSessionId state, toggleSessionFullscreen callback
  • TerminalCard.tsx — fullscreen prop, exit-fullscreen button, Escape key handler (bubble phase)
  • WorkspaceCanvas.tsx — splits rendering into normal layer and fullscreen overlay layer (outside camera transform)
  • app.css — .terminal-card--fullscreen overrides (position, dimensions, z-index), .workspace__fullscreen-layer container
  • i18n.ts — enterFullscreen / exitFullscreen strings (en/ru)
  • package-lock.json — cleanup of stale esbuild optional platform binaries

Design Decisions

  1. CSS-only, no IPC bounds changes — fullscreen is purely visual. Session bounds are never sent to the main process, so crash/restart always restores the original layout.
  2. Fullscreen layer outside camera transform — the overlay renders in a separate workspace__fullscreen-layer div at z-index: 9999, avoiding conflicts with pan/zoom.
  3. Single-session constraint — entering fullscreen for session B auto-exits session A.
  4. Escape key in bubble phase — avoids stealing Escape from modals, command palette, or dropdowns.

Documentation

Verification

  • Click maximize button on a terminal card → session fills viewport
  • Press Escape → exits fullscreen, session returns to original position
  • Open fullscreen for session A, then open fullscreen for session B → A exits, B enters
  • Close app during fullscreen → restart restores session at original position/size
  • Canvas pan/zoom works normally when no session is fullscreen

Implement CSS-only fullscreen overlay that expands a terminal session
to fill the entire viewport without persisting bounds to the backend.

Key design decisions:
- Fullscreen layer rendered outside the canvas camera transform to avoid
  coordinate-system conflicts with pan/zoom
- No IPC bounds changes: crash-safe, original layout preserved on restart
- Single-session constraint: entering fullscreen for another session
  auto-exits the current one
- Escape key exits fullscreen (bubble phase to avoid stealing from modals)
- Exit button in top-right corner and restore button in header

Includes i18n strings (en/ru) and feature documentation.
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.

2 participants