web: server-screen, footer, monitoring-sidebar, and responsive-header polish#1683
web: server-screen, footer, monitoring-sidebar, and responsive-header polish#1683cliffhall wants to merge 10 commits into
Conversation
#1682) Server-screen and chrome polish, all under #1682: - Connected server card: on a successful connect the card draws the green highlight border and scrolls itself into view once the monitoring sidebar has opened — the success mirror of the errored-card path (#1621). Threaded via a new `connectedServerId` (App → InspectorView → ServerListScreen → ServerCard `justConnected`), reusing the shared post-animation scroll delay (renamed `CARD_SCROLL_DELAY_MS`). - Connection status: ServerStatusIndicator gains a `failed` flag so a failed connection reads as a red dot + "Failed" instead of the settled grey "Disconnected", distinguishing it from a deliberate disconnect. - Footer: the version + copyright move from fixed bottom-corner badges into a real full-width AppShell.Footer row (header-matching background + top border). Because it reserves its own height, the primary screen and the monitoring sidebar now stop above it instead of the badges overlapping the sidebar. All screen height calcs subtract `--app-shell-footer-height` alongside the header. - Header: an "MCP Documentation" tooltip on the MCP logo link. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Wrap the Servers screen in a bordered, container-filling `panel`-variant Paper matching the Messages/Protocol panel: a header row with a "Servers" title on the left and the Export / Add Servers / collapse controls on the right, over the server-card grid which now scrolls inside the box (the page itself no longer scrolls, so the footer stays put). The screen fills the viewport minus the header and footer via the shared `ScreenLayout` pattern, dropping the old viewport-`mah` calc. The title is a semantic h3 (visually h4) so it doesn't skip a level under the disconnected header's h2 (heading-order a11y). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Set the Servers panel background explicitly to `--mantine-color-body` — the same white surface the header and footer use — so the box reads as white against the grey app background rather than relying on Paper's implicit default. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… code (#1682) A light-mode card-surface refresh so the content cards read as soft, layered surfaces on their white panels instead of blending into them: - Server cards take a faint `gray-0` fill (a hair lighter than the `gray-1` app background), scoped to the Servers grid via an `--inspector-surface-card` override so every card state (default/highlighted/errored/disabled) picks it up without touching the shared token. - The server card's command/URL ContentViewer Code block is raised to the white on-card surface, mirroring the Protocol/Network message cards. - The Protocol / Network / Task entry cards (the `inset` variant) move from `gray-1` to the same `gray-0`, so all the monitoring/entry cards share one faint-grey tone with white code blocks. Structural white cards (sidebar containers, previews) are intentionally left white — a grey card on the grey body would nearly vanish. Full gate green, including the 409-test axe a11y suite (still AA-clean). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
@claude review |
|
Claude finished @cliffhall's task in 3m 51s —— View job Review — connected-card treatment, footer row, MCP-docs tooltip
Overall this is a clean, well-structured PR. The I traced the one thing I was worried about — whether the deferred Scroll-into-view trace (why it works)My concern was that on connect the Minor nits (non-blocking)
One design confirmation (not a bug)
Standards / a11y
|
…omment (#1682) - Hoist the SimpleGrid card-surface `styles` override to a module-level `GRID_SURFACE_STYLES` const, matching the `CARD_STYLES` pattern in ServerCard. - Reword the Servers `Title` comment so it no longer reads as if h4 is used in this file; clarifies the other panels use h4 only because they render while connected (no h2 header to skip under). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Thanks for the thorough review! Addressed both nits in 0fa4cb5:
On the design confirmation: the persistent green border on the connected card is intentional — it mirrors how the Full gate green after the changes, including the 409-test axe a11y suite (still AA-clean). @claude review |
|
Claude finished @cliffhall's task in 38s —— View job Re-review — nit fixes (0fa4cb5)
Both nits are addressed correctly, and the design confirmation makes sense. LGTM. 👍 1. Hoisted 2. Reworded Design confirmation — noted, and it holds together: the persistent green border mirroring the persistent No new issues introduced by the fix commit — it's a one-file, comment-and-refactor change with no behavioral delta, so the earlier trace (deferred |
…drop divider (#1682) Make the pinned monitoring sidebar read as a cohesive column: - Drop the horizontal Divider between the tab/search controls and the content. - Align the controls to the content panel's width: `MonitoringControls` gets the same `xl` horizontal inset (`px: xl`) the embedded screen gives its panel, so the tabs + search span exactly the panel width and line up with its edges (previously the controls were full-width, 64px wider than the panel). - Give the controls a little breathing room below the header (`ColumnLayout pt: md`) instead of sitting flush against it. - Halve the gap between the controls and the content: each embedded monitor screen uses `pt: md` (half the `xl` default) so the panel sits closer to the controls (32px → 16px), keeping the `xl` horizontal inset the controls align to. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
@claude review |
|
Claude finished @cliffhall's task in 1m 37s —— View job Review — connected-card status, footer row, MCP-docs tooltip (fresh pass)
Re-reviewed the full diff against Correctness — the two new stateful paths hold up
Layout — footer-height subtraction is uniformThe new Standards / a11y
Nothing blocking and no new issues from me — the design choice (persistent green border mirroring the persistent |
…1682) At the tight end of the layout the header ran out of room (with every tab shown, the connection status text wrapped and the Disconnect label clipped). Fix it by flooring the app and unifying the header's collapse breakpoints at that floor: - Add a 1280px min-width on the app mount (`#root`, so it doesn't leak into Storybook, which shares App.css). Below it the page scrolls horizontally rather than reflowing into a broken header. - Collapse the Disconnect control to its icon at the 1280 floor (was 768px) and drop the connection status text to a dot-only indicator there (was 1200px), so the two now compact together at the app's minimum width. - Swap the Disconnect icon to `VscDebugDisconnect` (react-icons/vsc). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ect icon (#1682) - Move the connection status text's collapse to 1500px (was tied to the 1280px floor). It's the header's widest optional element, so shedding it first — while the Disconnect control still collapses at the 1280px floor — keeps the tab row from crowding across the 1280–1500 range. - Make the collapsed Disconnect a plain grey icon like the other header icons (drop the red tint) and give it a "Disconnect from server" tooltip, matching the Client-settings / theme toggles (Tooltip-wrapped, subtle grey). The aria-label now reads "Disconnect from server" too. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… rules (#1682) Follow-through on the 1280px minimum so the whole app — header included — behaves as one floored, horizontally-scrolling unit, and drop the now-redundant sub-1280 breakpoints: - Header respects the 1280px floor: make `#root` a containing block (a `transform`) so the AppShell's position:fixed header + footer span the full 1280 and scroll horizontally with the content below the floor, instead of staying pinned to a narrower viewport. Body-portalled overlays are unaffected. - Disconnect is always the (grey, tooltip'd) icon — drop the label-button variant and its breakpoint. - Tabs are always a SegmentedControl — drop the narrow-viewport Select fallback. - Remove the 1040px media-query gate on the monitoring sidebar: with the 1280px floor there's always room, so the column/toggle are available whenever a server is connected (or a connect attempt failed) and a monitor tab exists. Tests updated to the always-icon / always-SegmentedControl / always-available behavior. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
@claude review |
|
Claude finished @cliffhall's task in 3m 42s —— View job Review — responsive-header / 1280px-floor pass (fresh)
Re-reviewed the full diff against The 1280px-floor mechanism is correct
Observations (both non-blocking)1. Raising <ServerStatusIndicator status={connection.status} retryCount={connection.retryCount} failed={errored} />So on common laptop widths in the 1280–1500px band (1366, 1440), the server cards now render a dot only (label moved to the 2. Dead test scaffolding + stale comment in
The mock is still doing real work via its Standards / a11y
Nothing blocking. Item 1 is the one I'd want a quick confirm on (it changes card rendering on common screen widths); item 2 is optional cleanup. Nice, well-tested PR. |
…ing (#1682) Address the round-4 review: - ServerCard passes `showLabel` to its ServerStatusIndicator so the card always shows the status text, decoupled from the header-motivated 1500px viewport breakpoint. Fixes cards going dot-only at 1280–1500px widths (1366/1440), where the card has ample room and isn't subject to the header's tab-row crowding. - Remove the now-dead `monitorWide` scaffolding from InspectorView.test (the 1040px sidebar gate it drove was deleted with the 1280px floor): the mock collapses to `useMediaQuery: () => true`, and the hoisted object, its `beforeEach` reset, ~23 assignments, and the stale gate comment are gone. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Thanks — both addressed in 63ec370:
Full gate green (a flaky remote-transport integration test failed once on a transient SSE 404, passed clean on re-run). Still fully AA. @claude review |
|
Claude finished @cliffhall's task in 43s —— View job Re-review — item fixes (63ec370)
Both items from the previous pass are addressed correctly. LGTM. 👍 1. Card status label ( 2. Dead test scaffolding ( No new issues from the fix commit — it's a one-prop addition plus pure test cleanup, no behavioral delta, so the earlier traces (deferred |
Closes #1682
Server-screen, footer, monitoring-sidebar, and responsive-header polish, all under #1682. Grew over several visual-iteration passes; each area is its own commit.
Connected-card status treatment
connectedServerIdand reusing the sharedCARD_SCROLL_DELAY_MS.ServerStatusIndicatorgains afailedflag → a red dot + "Failed" instead of the grey "Disconnected" it settles back to, so a failed connect reads distinctly from a deliberate disconnect.erroredpersists), doubling as an at-a-glance "this is the connected server" cue.Footer row + header tooltip
AppShell.Footer(header-matching background + top border). Because it reserves height, the primary screen and the monitoring sidebar now stop above it. Every screen height calc subtracts--app-shell-footer-height.Servers box
panel-variant Paper (like the Messages panel): a "Servers" title on the left and the Export / Add Servers / collapse controls on the right, over the card grid which scrolls inside the box. White surface (--mantine-color-body, matching the header/footer). Title is a semantic h3 (visual h4) to avoid a heading-order skip under the disconnected h2.Card-surface refresh (light mode)
insetvariant) take a faintgray-0fill (a hair lighter than thegray-1app background), with their code blocks raised to white — so the content cards read as soft, layered surfaces on their white panels. Structural white cards (sidebars, previews) are intentionally left white.Monitoring-sidebar layout
px: xl, matching the embedded screen's inset), give them a small top margin, and halve the controls→content gap (32px → 16px) viapt: mdon the embedded screens.Responsive layout (1280px floor)
#rootis made a containing block (atransform) so the AppShell's fixed header + footer span the full 1280 and scroll horizontally with the content below the floor, rather than staying pinned to a narrower viewport. Body-portalled overlays (modals, tooltips) are unaffected.VscDebugDisconnect) with a "Disconnect from server" tooltip, matching the other header icons (dropped the red label-button variant).Testing
validate→test:storybook→test:coverage), including the 409-test axe a11y suite → still fully AA.justConnected+ deferred scroll, thefailedstatus, the footer row, the logo + Disconnect tooltips, the Servers box heading, and the always-icon / always-SegmentedControl / always-available header behavior. No raw hex/rgba introduced — all surfaces go through--inspector-*tokens.🤖 Generated with Claude Code