Independent fixed offsets caused the timeline, map dock, tool panel, and zoom controls to overlap. Derive them from one layout function and scope collapse to the expanded timeline state.
109 lines
3.2 KiB
TypeScript
109 lines
3.2 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
clampAgentPanelWidth,
|
|
getAgentPanelDefaultWidth,
|
|
getAgentPanelMaxWidth,
|
|
getWorkbenchBasemapTone,
|
|
getWorkbenchCameraPadding,
|
|
getWorkbenchViewportLayout,
|
|
resolveMobileWorkbenchOverlayLayout
|
|
} from "./workbench-layout";
|
|
|
|
describe("workbench basemap surface tone", () => {
|
|
it.each([
|
|
["mapbox-light", "light"],
|
|
["mapbox-satellite", "satellite"],
|
|
["none", "none"],
|
|
["unknown", "none"]
|
|
])("maps %s to %s", (baseLayerId, expectedTone) => {
|
|
expect(getWorkbenchBasemapTone(baseLayerId)).toBe(expectedTone);
|
|
});
|
|
});
|
|
|
|
describe("workbench floating panels", () => {
|
|
it("derives mobile dock and map control offsets from one overlay stack", () => {
|
|
expect(resolveMobileWorkbenchOverlayLayout(true)).toEqual({
|
|
timelineBottom: 12,
|
|
dockBottom: 68,
|
|
mapControlBottom: 120
|
|
});
|
|
expect(resolveMobileWorkbenchOverlayLayout(false)).toEqual({
|
|
timelineBottom: 12,
|
|
dockBottom: 12,
|
|
mapControlBottom: 64
|
|
});
|
|
});
|
|
|
|
it("uses bounded desktop and wide panel widths", () => {
|
|
expect(getWorkbenchViewportLayout(1440)).toMatchObject({
|
|
agentWidth: 500,
|
|
conditionWidth: 432,
|
|
conditionExpandedWidth: 880,
|
|
toolbarWidth: 48
|
|
});
|
|
expect(getWorkbenchViewportLayout(1536)).toMatchObject({
|
|
agentWidth: 540,
|
|
conditionExpandedWidth: 960
|
|
});
|
|
});
|
|
|
|
it("tracks the expanded condition panel in camera padding", () => {
|
|
expect(
|
|
getWorkbenchCameraPadding(1440, {
|
|
agentOpen: true,
|
|
conditionOpen: true,
|
|
conditionExpanded: false
|
|
})
|
|
).toEqual({ top: 72, right: 504, bottom: 32, left: 524 });
|
|
|
|
expect(
|
|
getWorkbenchCameraPadding(1440, {
|
|
agentOpen: true,
|
|
conditionOpen: true,
|
|
conditionExpanded: true
|
|
})
|
|
).toEqual({ top: 72, right: 952, bottom: 32, left: 476 });
|
|
});
|
|
|
|
it("does not reserve map width for the collapsed Agent launcher", () => {
|
|
expect(
|
|
getWorkbenchCameraPadding(1440, {
|
|
agentOpen: false,
|
|
conditionOpen: false
|
|
}).left
|
|
).toBe(24);
|
|
});
|
|
|
|
it("uses the committed Agent width without exceeding the hard limit", () => {
|
|
expect(
|
|
getWorkbenchCameraPadding(1920, {
|
|
agentOpen: true,
|
|
agentWidth: 620,
|
|
conditionOpen: true
|
|
})
|
|
).toEqual({ top: 72, right: 504, bottom: 32, left: 644 });
|
|
|
|
expect(
|
|
getWorkbenchCameraPadding(1920, {
|
|
agentOpen: true,
|
|
agentWidth: 900,
|
|
conditionOpen: false
|
|
}).left
|
|
).toBe(744);
|
|
});
|
|
|
|
it("uses responsive defaults and preserves the map corridor at maximum width", () => {
|
|
expect(getAgentPanelDefaultWidth(390)).toBe(500);
|
|
expect(getAgentPanelDefaultWidth(1024)).toBe(484);
|
|
expect(getAgentPanelDefaultWidth(1440)).toBe(500);
|
|
expect(getAgentPanelDefaultWidth(1536)).toBe(540);
|
|
expect(getAgentPanelMaxWidth(1024)).toBe(484);
|
|
expect(clampAgentPanelWidth(620, 1024)).toBe(484);
|
|
expect(getAgentPanelMaxWidth(1280)).toBe(516);
|
|
expect(getAgentPanelMaxWidth(1440)).toBe(676);
|
|
expect(getAgentPanelMaxWidth(1536)).toBe(720);
|
|
expect(getAgentPanelMaxWidth(1920)).toBe(720);
|
|
expect(getAgentPanelMaxWidth(1920, true)).toBe(628);
|
|
});
|
|
});
|