import { createRawSnippet } from "svelte"; import { describe, expect, it } from "vitest"; import CardHeading from "../src/composites/CardHeading.svelte"; import { cardHeading } from "../src/composites/card-heading.variants"; import TitlingSurfacesConsumer from "./fixtures/TitlingSurfacesConsumer.svelte"; import { expectLayoutReadiness } from "./layout-readiness"; import { classes, classesOf, render, rendered } from "./mount"; describe("CardHeading", () => { it("composes the canonical section-heading contract at the caller's outline level", () => { const element = rendered( render(CardHeading, { title: "Environment", description: "Production settings", level: 4, }), ); expect(element.matches("[data-section-heading][data-card-heading]")).toBe(true); expect(element.querySelector("h4")?.textContent).toBe("Environment"); expect(element.querySelector("p")?.textContent).toBe("Production settings"); for (const className of classesOf(cardHeading())) { expect(classes(element).has(className)).toBe(true); } }); it("leaves its action cluster's native keyboard behavior intact", () => { const actions = createRawSnippet(() => ({ render: () => '', })); const element = rendered(render(CardHeading, { title: "Environment", actions })); const button = element.querySelector("button")!; button.focus(); expect(document.activeElement).toBe(button); }); it("uses Density roles and inherits nested appearance", () => { const root = render(TitlingSurfacesConsumer); const element = root.querySelector("[data-card-heading]")!; expect(classes(element).has("gap-[var(--reddb-spatial-gap-lg)]")).toBe(true); expect(element.closest('[data-theme="base"][data-color-scheme="dark"][data-density="compact"]')) .not.toBeNull(); expect(element.hasAttribute("data-theme")).toBe(false); expect(element.hasAttribute("data-color-scheme")).toBe(false); expect(element.hasAttribute("data-density")).toBe(false); }); it("ships showcase, consumer, distributed export, and readiness evidence", () => { expectLayoutReadiness("card-heading", "CardHeading"); }); });