Watch
0
0
Fork
You've already forked hyperhive
0
hyperhive/frontend/packages/swarm-ui/src/pages/agents/AgentTermPreview.css
iris 66df552f68 swarm-ui: terminal tab fills the viewport below the header
The agent terminal tab now takes the whole window except the header bar,
full width and height, instead of sitting in the padded content column.
The connection badge floats inside the terminal's top-left corner and the
toolbar row above it is gone on this route.
2026-10-04 16:15:06 +02:00

120 lines
4.9 KiB
CSS

/* <AgentTermPreview> — a *preview*, not the full terminal: a much
shorter cap than @hive/shared/terminal.css's own 32em default so it
reads as "peek at what's happening" inside the detail panel rather
than competing with the panel's own fields for vertical space. */
@import "@hive/shared/terminal.css";
.ui-agent-term-preview {
margin-block-start: 1rem;
}
/* Holds the connection-status badge and the expand-to-fullscreen
trigger (absent from the `fullHeight` mount, which floats the status
badge inside the terminal instead). `margin-left: auto` targets the
expand trigger by its own class rather than `:last-child`, same
split-row intent `Shell.css`'s `.shell-header-actions` uses. */
.ui-agent-term-preview-toolbar {
display: flex;
align-items: center;
margin-block-end: 0.5rem;
}
.ui-agent-term-preview-expand {
margin-left: auto;
}
.ui-agent-term-preview-wrap.terminal-wrap {
max-height: 12em;
}
/* `AgentTerminalPage`'s full-tab mount (`fullHeight` prop → the
`-full` modifier on the OUTER `.ui-agent-term-preview` root, not the
wrap) — self-contained flex chain, not dependent on the page around
it doing anything beyond giving this root a real height to fill (see
AgentTerminalPage.css). Column flex so the toolbar keeps its natural
height and the terminal-wrap below it takes the rest; `flex: 1` +
`min-height: 0` on the wrap (not `height: 100%`) is deliberate — a
flex item's `height` percentage doesn't account for a sibling
(the toolbar) already consuming space the way `flex: 1` does, and
`min-height: 0` is what actually lets the item shrink below its
content's natural height so `.live.terminal`'s own `overflow-y: auto`
(terminal.css) scrolls instead of the whole column growing past its
container. `!important`-free — the `max-height: none` overrides
below already carry one more class in the selector than the
un-modified rules above (`.ui-agent-term-preview-full` prefixing
each), so they're strictly more specific and win regardless of
source order. */
.ui-agent-term-preview-full {
display: flex;
flex-direction: column;
margin-block-start: 0;
}
.ui-agent-term-preview-full .ui-agent-term-preview-wrap.terminal-wrap {
max-height: none;
flex: 1;
min-height: 0;
}
.ui-agent-term-preview-full .ui-agent-term-preview-wrap .live.terminal {
max-height: none;
height: 100%;
}
/* Flush to the header bar and the viewport sides; the input row below
gets its own padding so it doesn't touch the screen edge. */
.ui-agent-term-preview-full .ui-agent-term-preview-wrap.terminal-wrap {
margin: 0;
}
.ui-agent-term-preview-full .ui-agent-input {
padding: 0.4em 0.75em 0.6em;
}
/* `box-sizing: border-box`, not the browser's default `content-box` —
`.live.terminal`'s own `padding: 0.8em 1em 0.4em` (terminal.css) is
otherwise added ON TOP of this `max-height`, so the box renders
~1.2em taller than intended and spills past `.terminal-wrap`'s own
`max-height` above (which has no padding of its own to inflate it)
since `.terminal-wrap` has no `overflow: hidden` to catch the excess
— mara: "the terminal text bleeds out at the bottom of the terminal".
Confirmed via measured `clientHeight` (194px vs the wrap's 177px, a
~17px gap matching 1.2em at this font size) before this fix, not
just reasoning about the CSS. */
.ui-agent-term-preview-wrap .live.terminal {
max-height: 12em;
box-sizing: border-box;
/* Extra top padding (base `.live.terminal` rule: `0.8em 1em 0.4em`) so
the floating badge cluster below has room to sit above the first
row's text instead of overlapping it — found by actually rendering
this: with the base padding, "thinking"/"model sonnet" sat directly
on top of the terminal's first line whenever content started right
at the top (a running preview scrolled to the newest rows almost
always does). */
padding-block-start: 2.4em;
}
/* Floating turn_state/agent_state/model/ctx/cost badge cluster —
positioned by `.terminal-wrap`'s own `position: relative`, same
anchor `@hive/shared/terminal.css`'s `.tail-pill` already uses, rather
than a second positioned ancestor of our own. Top-right corner: the
scroll-to-bottom `.tail-pill` (that same stylesheet) anchors
bottom-right, so the two overlays never compete for the same corner.
`flex-wrap` rather than a fixed width — a badge cluster this narrow
can still overflow the box at small viewport widths, and wrapping
beats clipping or shrinking the terminal underneath. */
.ui-agent-term-preview-header-badges {
position: absolute;
top: 0.4em;
right: 0.4em;
z-index: 1;
display: flex;
flex-wrap: wrap;
justify-content: flex-end;
gap: 0.25em;
max-width: calc(100% - 0.8em);
}
/* Full-tab mount's connection badge — top-left floating twin of
`.ui-agent-term-preview-header-badges` (top-right), same anchor. */
.ui-agent-term-preview-live {
position: absolute;
top: 0.4em;
left: 0.4em;
z-index: 1;
}