Files
fusion/packages/dashboard/app/components/TerminalLauncher.css
gsxdsm 7034b55288 FN-6887: add footer terminal launcher
Move terminal access from the header into a footer launcher and resizable bottom panel.

- Add a TerminalLauncher footer control with dock, resize, collapse, and pop-out affordances.
- Extend TerminalModal to support bottom-panel layout, drag resizing, and persistent panel state.
- Remove terminal/script controls from header overflow while preserving compact Mailbox and tool ordering.
- Update executor footer spacing, dashboard docs, changeset, and focused terminal/header tests.

Files changed:
 .changeset/fn-6887-terminal-footer-panel.md        |   5 +
 docs/dashboard-guide.md                            |   2 +
 packages/dashboard/app/App.tsx                     |   6 +-
 .../app/__tests__/tablet-header-controls.test.tsx  |  95 +---
 .../dashboard/app/components/ExecutorStatusBar.css |   8 +
 .../dashboard/app/components/ExecutorStatusBar.tsx |  27 +-
 packages/dashboard/app/components/Header.css       |  27 -
 packages/dashboard/app/components/Header.tsx       | 549 +--------------------
 .../dashboard/app/components/TerminalLauncher.css  | 180 +++++++
 .../dashboard/app/components/TerminalLauncher.tsx  | 306 ++++++++++++
 .../dashboard/app/components/TerminalModal.css     | 117 +++++
 .../dashboard/app/components/TerminalModal.tsx     | 360 +++++++++++++-
 .../__tests__/ExecutorStatusBar.test.tsx           |  52 +-
 .../app/components/__tests__/Header.test.tsx       | 304 ++----------
 .../components/__tests__/TerminalLauncher.test.tsx |  57 +++
 .../components/__tests__/TerminalModal.test.tsx    | 111 +++++
 16 files changed, 1282 insertions(+), 924 deletions(-)

Fusion-Task-Id: FN-6887

Fusion-Task-Lineage: 755f28b1-1ba5-43f8-b13c-264e31507658
2026-06-21 22:43:34 -07:00

181 lines
3.8 KiB
CSS

:root {
--terminal-launcher-menu-min-width: calc(var(--space-xl) * 5);
--terminal-launcher-menu-width: calc(var(--space-xl) * 8.125);
--terminal-launcher-menu-height: calc(var(--space-xl) * 8.75);
}
.terminal-launcher {
position: relative;
display: inline-flex;
align-items: center;
gap: 0;
border: 1px solid var(--border);
border-radius: var(--radius-md);
background: var(--bg);
}
.terminal-launcher--footer {
background: transparent;
border-color: transparent;
}
.terminal-launcher__main {
min-height: var(--control-height-sm);
gap: var(--space-xs);
border-top-right-radius: 0;
border-bottom-right-radius: 0;
color: var(--text-muted);
}
.terminal-launcher__main:hover,
.terminal-launcher__chevron:hover {
color: var(--text);
}
.terminal-launcher__label {
font-size: var(--font-size-xs);
font-weight: var(--font-weight-medium);
}
.terminal-launcher__chevron {
min-height: var(--control-height-sm);
width: var(--control-height-sm);
border-top-left-radius: 0;
border-bottom-left-radius: 0;
color: var(--text-muted);
}
.terminal-launcher__divider {
width: var(--border-width, 1px);
height: var(--space-md);
background: var(--border);
}
.quick-scripts-dropdown__trigger-chevron {
color: currentColor;
transition: transform var(--transition-fast);
}
.quick-scripts-dropdown__trigger-chevron.rotate {
transform: rotate(180deg);
}
.quick-scripts-dropdown__menu {
position: absolute;
top: calc(100% + var(--space-xs));
right: 0;
min-width: var(--terminal-launcher-menu-width);
max-height: min(70vh, calc(var(--space-xl) * 11.25));
overflow-y: auto;
background: var(--surface);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-lg);
z-index: var(--z-popover);
padding: var(--space-sm);
}
.quick-scripts-dropdown__loading,
.quick-scripts-dropdown__empty {
display: flex;
flex-direction: column;
align-items: center;
gap: var(--space-sm);
padding: var(--space-lg);
color: var(--text-muted);
text-align: center;
}
.quick-scripts-dropdown__empty-icon {
display: flex;
align-items: center;
justify-content: center;
color: var(--text-muted);
}
.quick-scripts-dropdown__empty p {
margin: 0;
color: var(--text);
font-size: var(--font-size-sm);
}
.quick-scripts-dropdown__empty-action {
min-height: var(--control-height-sm);
}
.quick-scripts-dropdown__list {
display: flex;
flex-direction: column;
gap: var(--space-xs);
}
.quick-scripts-dropdown__item,
.quick-scripts-dropdown__manage {
display: flex;
align-items: center;
gap: var(--space-sm);
width: 100%;
padding: var(--space-sm);
border: none;
border-radius: var(--radius-md);
background: transparent;
color: var(--text);
text-align: left;
cursor: pointer;
}
.quick-scripts-dropdown__item:hover,
.quick-scripts-dropdown__item.highlighted,
.quick-scripts-dropdown__manage:hover,
.quick-scripts-dropdown__manage.highlighted {
background: var(--card);
}
.quick-scripts-dropdown__item-icon,
.quick-scripts-dropdown__manage svg {
flex-shrink: 0;
color: var(--text-muted);
}
.quick-scripts-dropdown__item-info {
display: flex;
flex-direction: column;
gap: var(--space-xxs);
min-width: 0;
}
.quick-scripts-dropdown__item-name {
color: var(--text);
font-size: var(--font-size-sm);
font-weight: var(--font-weight-medium);
}
.quick-scripts-dropdown__item-command {
color: var(--text-muted);
font-size: var(--font-size-xs);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.quick-scripts-dropdown__footer {
padding-top: var(--space-xs);
margin-top: var(--space-xs);
border-top: 1px solid var(--border);
}
.quick-scripts-dropdown__manage {
color: var(--text-muted);
font-size: var(--font-size-sm);
}
.quick-scripts-dropdown__manage span {
flex: 1;
}
@media (max-width: 768px) {
.terminal-launcher {
display: none;
}
}