Rename the web client's History tab and its supporting code to Protocol so the feature reads as the MCP "Protocol" view. - Tab renders as "Protocol"; INSPECTOR_TAB_IDS, InspectorView tab constants/MonitorTab, TAB_UI_REGISTRY key, and navigation.ts tab id all updated to Protocol. - Rename components + folders: HistoryScreen -> ProtocolScreen, HistoryListPanel -> ProtocolListPanel, HistoryEntry -> ProtocolEntry, HistoryControls -> ProtocolControls, historyUtils -> protocolUtils (plus their tests and stories, and exported types). - Rename App/InspectorView plumbing: historyUi, pinnedHistoryIds, on*History* handlers/props, replayHistoryRequest, isReplayableHistoryMethod, sort/compact scopes, etc. -> Protocol names. - Export filenames use the "protocol" slug (buildExportFilename + ExportKind). Preserved (per issue #1623 decisions): - The in-panel section discriminator keeps its "pinned" | "history" values, and the sub-sections stay labeled Pinned / History. - window.history and core message-log/replay concepts are untouched. npm run ci passes (format, lint, build, unit tests, >=90 per-file coverage gate, smoke, Storybook). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BrihGWcrM9JGRyu41nzZYw
27 lines
1.2 KiB
TypeScript
27 lines
1.2 KiB
TypeScript
import { expect } from "storybook/test";
|
|
|
|
/**
|
|
* Assert a list `ScrollArea.Autosize` reserves a scrollbar gutter
|
|
* (`offsetScrollbars`, so the bar never overlays the cards) and keeps the bar
|
|
* hidden when idle (`type="scroll"`, so it shows only while scrolling rather
|
|
* than on hover). Shared by the Protocol/Network/Logging panel stories (#1474).
|
|
*/
|
|
export function expectScrollbarGutterIdleHidden(canvasElement: HTMLElement) {
|
|
const viewport = canvasElement.querySelector(".mantine-ScrollArea-viewport");
|
|
if (!(viewport instanceof HTMLElement)) {
|
|
throw new Error("scroll viewport not found");
|
|
}
|
|
// offsetScrollbars reserves a non-zero inline-end gutter for the scrollbar.
|
|
const pad = parseFloat(getComputedStyle(viewport).paddingInlineEnd);
|
|
expect(pad).toBeGreaterThan(0);
|
|
// type="scroll" → scrollbars are mounted but hidden until the user scrolls.
|
|
// Assert at least one exists first so the loop isn't trivially-true if a
|
|
// future change stops rendering the scrollbar element.
|
|
const scrollbars = canvasElement.querySelectorAll(
|
|
".mantine-ScrollArea-scrollbar",
|
|
);
|
|
expect(scrollbars.length).toBeGreaterThan(0);
|
|
for (const bar of scrollbars) {
|
|
expect(bar.getAttribute("data-state")).toBe("hidden");
|
|
}
|
|
}
|