feat: release design system engine, studio and component contracts

This commit is contained in:
Clintchiz committed 2026-10-19 13:09:03 +05:30
1 parent ff1065fb27
commit 3943b946d6
693 files changed
+175546 -3894

No files matched your search

@@ -31,9 +31,12 @@ test("preview input never requests a replacement; settings still do", async () =
test("stored theme updates its stylesheet before the theme runtime loads", async () => {
const window = new Window({ url: "http://localhost/components/alert" });
window.document.cookie = "wrn-ui-mode=light;path=/";
window.document.head.innerHTML = '<link rel="stylesheet" data-wrnexus-theme href="/__wrnexus/theme/dark/violet.css">';
window.document.head.innerHTML =
'<link rel="stylesheet" data-wrnexus-theme href="/__wrnexus/theme/dark/violet.css">';
window.eval(readFileSync(new URL("../public/playground.js", import.meta.url), "utf8"));
expect(window.document.documentElement.dataset.theme).toBe("light");
expect(window.document.querySelector("link")?.getAttribute("href")).toBe("/__wrnexus/theme/light/violet.css");
expect(window.document.querySelector("link")?.getAttribute("href")).toBe(
"/__wrnexus/theme/light/violet.css",
);
await window.happyDOM.close();
});
@@ -22,7 +22,7 @@ const reference = JSON.parse(
};
const manifest = JSON.parse(readFileSync(join(root, "showcase-manifest.json"), "utf8")) as {
removed: string[];
blocks: Array<{name: string; slug: string; path: string}>;
blocks: Array<{ name: string; slug: string; path: string }>;
componentCount: number;
categoryCount: number;
totalDemoCount: number;
@@ -71,17 +71,28 @@ test("showcase configures local Lucide icon generation", () => {
});
test("showcase manifest matches the generated UI reference", () => {
expect(manifest.componentCount + manifest.blocks.length + manifest.removed.length).toBe(reference.count);
expect(manifest.removed).toEqual(["AuthForm", "AuthSplitLayout", "PortalDashboard", "PublicPageShell"]);
expect(manifest.blocks.some(block => block.name === "Hero")).toBe(true);
expect(manifest.blocks.some(block => block.name === "CTASection")).toBe(true);
expect(manifest.componentCount + manifest.blocks.length + manifest.removed.length).toBe(
reference.count,
);
expect(manifest.removed).toEqual([
"AuthForm",
"AuthSplitLayout",
"PortalDashboard",
"PublicPageShell",
]);
expect(manifest.blocks.some((block) => block.name === "Hero")).toBe(true);
expect(manifest.blocks.some((block) => block.name === "CTASection")).toBe(true);
expect(manifest.components).toHaveLength(manifest.componentCount);
expect(manifest.totalDemoCount).toBeGreaterThanOrEqual(manifest.componentCount * 2);
expect(new Set(manifest.components.map((component) => component.slug)).size).toBe(
manifest.componentCount,
);
for (const component of reference.components.filter(entry => !manifest.removed.includes(entry.name) && !manifest.blocks.some(block => block.name === entry.name))) {
for (const component of reference.components.filter(
(entry) =>
!manifest.removed.includes(entry.name) &&
!manifest.blocks.some((block) => block.name === entry.name),
)) {
const documented = manifest.components.find((entry) => entry.name === component.name);
expect(documented).toBeTruthy();
expect(documented?.mount).toBe(component.mount);
@@ -120,12 +131,14 @@ test("category pages preview every UI component exactly once", () => {
.map((file) => readFileSync(join(pagesDir, file), "utf8"))
.join("\n");
const invalidPreviews = reference.components.filter(entry => manifest.components.some(component => component.name === entry.name)).flatMap((component) => {
const count = mountCount(categoryPages, component.mount);
return count === 1
? []
: [{ name: component.name, mount: component.mount, category: component.category, count }];
});
const invalidPreviews = reference.components
.filter((entry) => manifest.components.some((component) => component.name === entry.name))
.flatMap((component) => {
const count = mountCount(categoryPages, component.mount);
return count === 1
? []
: [{ name: component.name, mount: component.mount, category: component.category, count }];
});
expect(invalidPreviews).toEqual([]);
});