diff --git a/packages/dashboard/app/components/TerminalModal.css b/packages/dashboard/app/components/TerminalModal.css index 2f62a06ec2..1b8ac66d26 100644 --- a/packages/dashboard/app/components/TerminalModal.css +++ b/packages/dashboard/app/components/TerminalModal.css @@ -434,6 +434,12 @@ The floating-mode header is the move grip. `touch-action: none` is required so a margin-left: var(--space-xs); } +/* FNXC:Terminal 2026-06-23-00:15: Icon-only pop-out/dock toggle — no visible text label, so render as a square icon button while keeping the same hover/border treatment as the other header controls. */ +.terminal-clear-btn--icon { + padding: 6px; + justify-content: center; +} + .terminal-log-container { flex: 1; overflow: hidden; @@ -930,10 +936,15 @@ The shortcut bar (modifier keys + arrow keys) must sit on ONE line, not stack in justify-self: start; } +/* +FNXC:Terminal 2026-06-23-00:15: +Footer reads left-to-right: text-size control, then the relocated Clear/Shortcuts/Preferences action cluster, then connection status / exit code / zoom-hint pushed to the right edge (margin-left:auto on the connection status). flex-wrap keeps the action cluster from clipping when the docked/floating panel is narrow; gap replaces the old space-between distribution. +*/ .terminal-status-bar { display: flex; align-items: center; - justify-content: space-between; + flex-wrap: wrap; + gap: var(--space-sm); padding: var(--space-sm) var(--space-lg); background: var(--surface); border-top: 1px solid var(--border); @@ -941,8 +952,19 @@ The shortcut bar (modifier keys + arrow keys) must sit on ONE line, not stack in color: var(--text-muted); } +/* FNXC:Terminal 2026-06-23-00:15: Grouped cluster of the relocated Clear/Shortcuts/Preferences buttons; scrolls horizontally as a unit on very narrow footers so the buttons stay reachable instead of clipping. */ +.terminal-footer-actions { + display: flex; + align-items: center; + gap: var(--space-xs); + min-width: 0; + overflow-x: auto; +} + +/* FNXC:Terminal 2026-06-23-00:15: Connection status starts the right-aligned trailing group (status + exit code + zoom hint) so the left edge holds the text-size and action controls. */ .terminal-connection-status { font-weight: 500; + margin-left: auto; } .terminal-connection-status.connected { diff --git a/packages/dashboard/app/components/TerminalModal.tsx b/packages/dashboard/app/components/TerminalModal.tsx index 74f9b68c38..f00533a962 100644 --- a/packages/dashboard/app/components/TerminalModal.tsx +++ b/packages/dashboard/app/components/TerminalModal.tsx @@ -1935,45 +1935,21 @@ export function TerminalModal({ isOpen, onClose, initialCommand, initialCommandG {t("terminal.newSession", "New Session")} )} - - - + {/* + FNXC:Terminal 2026-06-23-00:15: + Clear / Shortcuts / Preferences moved OUT of the header actions and DOWN into the bottom status bar (footer) next to the text-size control, so the header keeps only contextual reconnect/restart, the icon-only pop-out toggle, and close. + The pop-out/dock toggle is now ICON-ONLY (no visible "Pop out"/"Dock" text); the icon flips and the title/aria-label still announce the toggle target for accessibility. + */} {!isMobileTerminal && ( )} + {/* FNXC:Terminal 2026-06-23-00:15: Clear / Shortcuts / Preferences relocated here from the header actions; same handlers, testids, and labels preserved. */} + + + + + + + {connectionStatus === "connected" && t("terminal.statusConnected", "Connected")} + {connectionStatus === "connecting" && t("terminal.statusConnecting", "Connecting...")} + {connectionStatus === "reconnecting" && t("terminal.statusReconnecting", "Reconnecting...")} + {connectionStatus === "disconnected" && t("terminal.statusDisconnected", "Disconnected")} + + {exitCode !== null && ( + + {t("terminal.exitLabel", "Exit: {{code}}", { code: exitCode })} + + )} {t("terminal.helpText", "Ctrl++/- zoom • ⌨ Shortcuts panel • Esc close")}