feat(dashboard): mobile-first sandbox terminal and VNC#521
Merged
Conversation
Dashboard - Add /sandboxes/:id/terminal and /sandboxes/:id/vnc fullscreen routes behind a shared SandboxSessionProvider pathless layout so activation state survives navigation between details and fullscreen siblings. - Extract SandboxFullscreenShell and SandboxTerminalFrame; add terminalIframeSrc bridge with registered Window+origin paste channel. - Promote viewport budget to --app-content-height CSS var on the Dashboard root and consume it from fullscreen pages and SandboxDetails. - Compact SandboxHeader on mobile (hide UUID line, py-1.5). - Hide PageHeader on mobile sandbox details. - Maximize/Paste action buttons on tab and fullscreen variants. Daemon terminal HTML - viewport meta with interactive-widget=resizes-content; svh/dvh body. - ResizeObserver + visualViewport + orientationchange refit chain with rAF coalesce and double fit() (Coder workaround). - IME-hardened helper textarea (xtermjs/xterm.js#2403); optional ?ime=off password-input fallback. - Soft-keys toolbar (Esc/Tab/Ctrl/Alt/arrows/|//~/Trackpad/Keyboard) using shadcn dark tokens; sticky modifiers (tap=arm, double=lock); pointerup-within-bounds tap activation. - Pinch-to-zoom font size with per-iframe localStorage + parent pref postMessage to the dashboard for stable persistence. - Parent-mediated paste via postMessage; pasteInFlight refcount so bracketed-paste bytes aren't transformed by armed Ctrl/Alt. - Pin xterm to 5.3.0 with comment to avoid the 6.x touch-scroll regression (xtermjs/xterm.js#5489, fixed in v7.0.0 via #5563).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
/sandboxes/:id/terminaland/sandboxes/:id/vncfullscreen routes share a singleSandboxSessionProviderso activation survives navigation; details/header collapse on mobile and a--app-content-heightCSS var carries the banner-aware viewport budget to every page.svh/dvhbody, aResizeObserver+visualViewport+orientationchangerefit chain, IME-hardened helper textarea, and a soft-keys toolbar (Esc/Tab/Ctrl/Alt/arrows/|//~/Trackpad/Keyboard) using shadcn dark tokens, with sticky modifiers and pinch-to-zoom.postMessages to the iframe's registered origin; iframe-originated paste requests are dropped. xterm pinned to 5.3.0 (avoids 6.x touch-scroll regression).Test plan
⛶opens/sandboxes/:id/terminalfullscreen.Ctrlthencon the OS keyboard: SIGINT fires. Double-tapCtrlto lock; verify next two keys are also Ctrl-modified.↕trackpad button: cursor moves; lifting releases without emitting stray arrows.⛶opens fullscreen VNC; fullscreen variant has no extra chrome.