import { createRawSnippet } from "svelte"; import { describe, expect, it } from "vitest"; import MultiColumnLayout from "../src/composites/MultiColumnLayout.svelte"; import { multiColumnLayout } from "../src/composites/multi-column-layout.variants"; import ApplicationLayoutsConsumer from "./fixtures/ApplicationLayoutsConsumer.svelte"; import { expectLayoutReadiness } from "./layout-readiness"; import { classes, classesOf, render, rendered } from "./mount"; const snippet = (html: string) => createRawSnippet(() => ({ render: () => html })); describe("MultiColumnLayout", () => { it("arranges two named columns without taking ownership of their content", () => { const layout = rendered( render(MultiColumnLayout, { start: snippet("
Filters
"), children: snippet("Navigation
"), children: snippet("Workspace
"), end: snippet("Inspector
"), }), ); expect(layout.dataset.columns).toBe("three"); expect([...layout.children].map((column) => column.getAttribute("data-column"))).toEqual([ "start", "main", "end", ]); expect(classes(layout)).toEqual(classesOf(multiColumnLayout({ columns: "three" }).root())); }); it("preserves document and keyboard order across the visual columns", () => { const layout = rendered( render(MultiColumnLayout, { start: snippet(''), children: snippet(''), end: snippet(''), }), ); expect([...layout.querySelectorAll("button")].map((button) => button.textContent)).toEqual([ "First", "Second", "Third", ]); expect([...layout.querySelectorAll("button")].every((button) => button.tabIndex === 0)).toBe( true, ); }); it("composes canonical Stacks and leaves Density live in every column", () => { const layout = rendered( render(MultiColumnLayout, { gap: "sm", start: snippet("One
"), children: snippet("Two
"), end: snippet("Three
"), }), ); expect(classes(layout).has("gap-[var(--reddb-spatial-layout-gap-md)]")).toBe(true); for (const column of layout.querySelectorAll