@motion-proto/live-tokens 0.74.0 → 0.76.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/live-tokens-check-compliance/SKILL.md +33 -38
- package/.claude/skills/live-tokens-create-component/SKILL copy.md +196 -0
- package/.claude/skills/live-tokens-create-component/SKILL.md +198 -146
- package/.claude/skills/live-tokens-create-component/references/contract-tests.md +95 -52
- package/.claude/skills/live-tokens-create-component/references/intrinsics.md +2 -2
- package/.claude/skills/live-tokens-create-component/references/linked-siblings.md +2 -2
- package/.claude/skills/live-tokens-create-component/references/sketch-mode.md +12 -12
- package/.claude/skills/live-tokens-create-component/references/token-naming.md +2 -1
- package/.claude/skills/live-tokens-create-page/SKILL.md +187 -0
- package/.claude/skills/live-tokens-create-page/references/interaction-sources.md +66 -0
- package/.claude/skills/live-tokens-create-page/references/layout-sources.md +87 -0
- package/.claude/skills/live-tokens-create-theme/SKILL.md +52 -48
- package/.claude/skills/live-tokens-create-theme/references/design-directions.md +1 -1
- package/.claude/skills/live-tokens-fix-findings/SKILL.md +69 -60
- package/.claude/skills/live-tokens-pick-component/SKILL.md +64 -79
- package/.claude/skills/live-tokens-set-colors/SKILL.md +47 -38
- package/.claude/skills/live-tokens-set-geometry/SKILL.md +58 -35
- package/.claude/skills/live-tokens-set-geometry/references/geometry-anchors.md +5 -3
- package/.claude/skills/live-tokens-set-type/SKILL.md +30 -30
- package/CHANGELOG.md +138 -0
- package/README.md +17 -7
- package/bin/check-component.mjs +91 -19
- package/bin/check-page.mjs +102 -21
- package/bin/cli.mjs +87 -113
- package/bin/contractRunner.mjs +945 -0
- package/bin/create.mjs +1 -1
- package/bin/lib/catalogue.mjs +37 -30
- package/bin/lib/findings.mjs +46 -15
- package/bin/lib/report.mjs +3 -3
- package/bin/lib/tokenVocabulary.mjs +4 -4
- package/bin/migrate-routes.mjs +5 -5
- package/bin/migrate.mjs +4 -4
- package/bin/save-theme.mjs +8 -9
- package/bin/set-colors.mjs +9 -11
- package/bin/set-geometry.mjs +7 -7
- package/bin/set-type.mjs +5 -7
- package/bin/setup-claude.mjs +110 -0
- package/dist-plugin/{chunk-W6Y4BWFB.js → chunk-6WGFOJXO.js} +22 -0
- package/dist-plugin/{chunk-7VRTBGJT.js → chunk-PDNL4NC5.js} +9 -2
- package/dist-plugin/{chunk-V3YF6CGT.js → chunk-SWXRVZKT.js} +43 -1
- package/dist-plugin/{dataPaths-BhWzd5cL.d.cts → dataPaths-BpIK_Obx.d.cts} +1 -0
- package/dist-plugin/{dataPaths-BhWzd5cL.d.ts → dataPaths-BpIK_Obx.d.ts} +1 -0
- package/dist-plugin/index.cjs +310 -147
- package/dist-plugin/index.d.cts +1 -1
- package/dist-plugin/index.d.ts +1 -1
- package/dist-plugin/index.js +218 -122
- package/dist-plugin/migrateData/index.cjs +66 -2
- package/dist-plugin/migrateData/index.d.cts +1 -1
- package/dist-plugin/migrateData/index.d.ts +1 -1
- package/dist-plugin/migrateData/index.js +3 -3
- package/dist-plugin/setColors/index.cjs +61 -4
- package/dist-plugin/setColors/index.d.cts +1 -1
- package/dist-plugin/setColors/index.d.ts +1 -1
- package/dist-plugin/setColors/index.js +5 -5
- package/dist-plugin/setGeometry/index.cjs +107 -44
- package/dist-plugin/setGeometry/index.d.cts +5 -5
- package/dist-plugin/setGeometry/index.d.ts +5 -5
- package/dist-plugin/setGeometry/index.js +51 -45
- package/dist-plugin/setType/index.cjs +15 -0
- package/dist-plugin/setType/index.d.cts +1 -1
- package/dist-plugin/setType/index.d.ts +1 -1
- package/dist-plugin/setType/index.js +1 -1
- package/dist-plugin/tokensCssMigrations/index.d.cts +1 -1
- package/dist-plugin/tokensCssMigrations/index.d.ts +1 -1
- package/dist-plugin/tokensCssMigrations/index.js +1 -1
- package/package.json +35 -8
- package/src/app/site.css +19 -9
- package/src/editor/bootstrap.ts +2 -0
- package/src/editor/component-editor/CollapsibleSectionEditor.svelte +4 -4
- package/src/editor/component-editor/DialogEditor.svelte +4 -4
- package/src/editor/component-editor/MenuSelectEditor.svelte +4 -1
- package/src/editor/component-editor/SegmentedControlEditor.svelte +6 -1
- package/src/editor/component-editor/TabBarEditor.svelte +1 -1
- package/src/editor/component-editor/TableEditor.svelte +2 -2
- package/src/editor/component-editor/scaffolding/TokenLayout.svelte +6 -3
- package/src/editor/component-editor/scaffolding/VariantGroup.svelte +41 -20
- package/src/editor/core/components/adjustAliases.ts +59 -45
- package/src/editor/core/components/aliasKinds.ts +9 -5
- package/src/editor/core/preview/themePreview.ts +9 -2
- package/src/editor/core/sketch/sketchLayer.ts +22 -0
- package/src/editor/core/store/editorStore.ts +10 -1
- package/src/editor/core/themes/buildColors.ts +3 -3
- package/src/editor/core/themes/liveStateStream.ts +26 -0
- package/src/editor/core/themes/migrations/2026-09-07-stroke-role-renames.ts +52 -0
- package/src/editor/core/themes/migrations/index.ts +2 -0
- package/src/editor/core/themes/themeDocumentSync.ts +22 -11
- package/src/editor/core/themes/themeService.ts +9 -2
- package/src/editor/pages/ComponentEditorPage.svelte +17 -1
- package/src/editor/pages/liveTokensEditorHandle.ts +23 -0
- package/src/editor/skill-atlas/SkillAtlas.svelte +75 -573
- package/src/editor/skill-atlas/TreeCanvas.svelte +263 -0
- package/src/editor/skill-atlas/TreeNodeCard.svelte +136 -53
- package/src/editor/skill-atlas/edges.ts +31 -0
- package/src/editor/skill-atlas/skillSources.generated.ts +20 -19
- package/src/editor/skill-atlas/skillTrees.ts +19 -3840
- package/src/editor/skill-atlas/trees/check-compliance.ts +183 -0
- package/src/editor/skill-atlas/trees/create-component.ts +275 -0
- package/src/editor/skill-atlas/trees/create-page.ts +320 -0
- package/src/editor/skill-atlas/trees/create-theme.ts +255 -0
- package/src/editor/skill-atlas/trees/fix-findings.ts +469 -0
- package/src/editor/skill-atlas/trees/pick-component.ts +300 -0
- package/src/editor/skill-atlas/trees/set-colors.ts +148 -0
- package/src/editor/skill-atlas/trees/set-geometry.ts +136 -0
- package/src/editor/skill-atlas/trees/set-type.ts +142 -0
- package/src/editor/skill-atlas/types.ts +3 -4
- package/src/editor/skill-atlas/wireLayout.ts +287 -0
- package/src/live-tokens/data/themes/autumn.json +15 -15
- package/src/live-tokens/data/themes/halloween.json +15 -15
- package/src/live-tokens/data/themes/midnight-study.json +15 -15
- package/src/live-tokens/data/themes/ocean.json +15 -15
- package/src/live-tokens/data/themes/royal-velvet.json +15 -15
- package/src/live-tokens/data/themes/sketchy.json +15 -15
- package/src/live-tokens/data/themes/spring-meadow.json +15 -15
- package/src/live-tokens/data/themes/sunset.json +15 -15
- package/src/system/components/Badge.svelte +7 -0
- package/src/system/components/Button.svelte +7 -0
- package/src/system/components/Callout.svelte +10 -6
- package/src/system/components/Card.svelte +23 -4
- package/src/system/components/CodeSnippet.svelte +4 -3
- package/src/system/components/CollapsibleSection.svelte +23 -8
- package/src/system/components/CornerBadge.svelte +6 -0
- package/src/system/components/Dialog.svelte +13 -6
- package/src/system/components/IconButton.svelte +9 -0
- package/src/system/components/Image.svelte +8 -0
- package/src/system/components/ImageLightbox.svelte +6 -0
- package/src/system/components/InlineEditActions.svelte +7 -0
- package/src/system/components/Input.svelte +7 -0
- package/src/system/components/MenuSelect.svelte +7 -0
- package/src/system/components/Notification.svelte +7 -0
- package/src/system/components/Panel.svelte +6 -0
- package/src/system/components/ProgressBar.svelte +5 -0
- package/src/system/components/RadioButton.svelte +11 -5
- package/src/system/components/SectionDivider.svelte +8 -0
- package/src/system/components/SegmentedControl.svelte +6 -0
- package/src/system/components/SideNavigation.svelte +6 -0
- package/src/system/components/Slider.svelte +7 -4
- package/src/system/components/TabBar.svelte +15 -9
- package/src/system/components/Table.svelte +8 -3
- package/src/system/components/Toggle.svelte +4 -4
- package/src/system/components/Tooltip.svelte +6 -0
- package/src/testing-js/chunk-AO7EZHYV.js +776 -0
- package/src/testing-js/chunk-AO7EZHYV.js.map +1 -0
- package/src/testing-js/chunk-FAFOAWYL.js +39 -0
- package/src/testing-js/chunk-FAFOAWYL.js.map +1 -0
- package/src/testing-js/chunk-L73N4NSO.js +23 -0
- package/src/testing-js/chunk-L73N4NSO.js.map +1 -0
- package/src/testing-js/chunk-LXR3MN6N.js +3063 -0
- package/src/testing-js/chunk-LXR3MN6N.js.map +1 -0
- package/src/testing-js/chunk-ZMSX6CXR.js +53 -0
- package/src/testing-js/chunk-ZMSX6CXR.js.map +1 -0
- package/src/testing-js/component-alias.contract.js +81 -0
- package/src/testing-js/component-alias.contract.js.map +1 -0
- package/src/testing-js/component-editor.contract.js +62 -0
- package/src/testing-js/component-editor.contract.js.map +1 -0
- package/src/testing-js/component-render.contract.js +568 -0
- package/src/testing-js/component-render.contract.js.map +1 -0
- package/src/testing-js/index.d.ts +293 -0
- package/src/testing-js/index.js +222 -0
- package/src/testing-js/index.js.map +1 -0
- package/src/testing-js/registry.contract.js +39 -0
- package/src/testing-js/registry.contract.js.map +1 -0
- package/src/testing-js/vitest-BE6uGF31.d.ts +73 -0
- package/src/testing-js/vitest.d.ts +3 -0
- package/src/testing-js/vitest.js +13 -0
- package/src/testing-js/vitest.js.map +1 -0
- package/template/README.md +13 -0
- package/template/_gitignore +6 -0
- package/template/package.json +3 -1
- package/template/src/pages/Home.svelte +4 -18
- package/.claude/skills/live-tokens-build-page/SKILL.md +0 -103
- package/.claude/skills/live-tokens-build-page/references/layout-sources.md +0 -48
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import {
|
|
2
|
+
openComponentsEditor
|
|
3
|
+
} from "./chunk-L73N4NSO.js";
|
|
4
|
+
import "./chunk-ZMSX6CXR.js";
|
|
5
|
+
|
|
6
|
+
// src/testing/component-alias.contract.ts
|
|
7
|
+
import fs from "fs";
|
|
8
|
+
import path from "path";
|
|
9
|
+
import { expect, test } from "@playwright/test";
|
|
10
|
+
function discoverDefaultAliases() {
|
|
11
|
+
const root = path.resolve(process.env.LIVE_TOKENS_DATA_DIR ?? "src/live-tokens/data", "component-configs");
|
|
12
|
+
const cases = [];
|
|
13
|
+
for (const directory of fs.readdirSync(root).sort()) {
|
|
14
|
+
const file = path.join(root, directory, "default.json");
|
|
15
|
+
if (!fs.existsSync(file)) continue;
|
|
16
|
+
const data = JSON.parse(fs.readFileSync(file, "utf8"));
|
|
17
|
+
const component = data.component ?? directory;
|
|
18
|
+
for (const variable of Object.keys(data.aliases ?? {}).sort()) {
|
|
19
|
+
cases.push({ component, variable });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return cases;
|
|
23
|
+
}
|
|
24
|
+
var aliasCases = discoverDefaultAliases();
|
|
25
|
+
test("every shipped component alias fans out set, update, and remove to the document root", async ({ page }) => {
|
|
26
|
+
test.setTimeout(6e4);
|
|
27
|
+
await openComponentsEditor(page);
|
|
28
|
+
const result = await page.evaluate(async (cases) => {
|
|
29
|
+
const editor = window.__liveTokensEditor;
|
|
30
|
+
if (!editor) throw new Error("window.__liveTokensEditor is not present on the components route");
|
|
31
|
+
let originalComponents;
|
|
32
|
+
const unsubscribe = editor.editorState.subscribe((state) => {
|
|
33
|
+
if (originalComponents === void 0) {
|
|
34
|
+
originalComponents = structuredClone(state.components);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
unsubscribe();
|
|
38
|
+
const rootStyle = document.documentElement.style;
|
|
39
|
+
const failures = [];
|
|
40
|
+
const check = (expected, phase) => {
|
|
41
|
+
for (const { variable } of cases) {
|
|
42
|
+
const actual = rootStyle.getPropertyValue(variable).trim();
|
|
43
|
+
if (actual !== expected) {
|
|
44
|
+
failures.push(`${phase} ${variable}: ${actual}`);
|
|
45
|
+
if (failures.length >= 20) return;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
editor.mutate("Playwright: set every component alias", (state) => {
|
|
50
|
+
for (const { component, variable } of cases) {
|
|
51
|
+
const slice = state.components[component] ?? (state.components[component] = { aliases: {}, config: {} });
|
|
52
|
+
slice.aliases[variable] = { kind: "literal", value: "__playwright_set__" };
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
check("__playwright_set__", "set");
|
|
56
|
+
editor.mutate("Playwright: update every component alias", (state) => {
|
|
57
|
+
for (const { component, variable } of cases) {
|
|
58
|
+
state.components[component].aliases[variable] = {
|
|
59
|
+
kind: "literal",
|
|
60
|
+
value: "__playwright_update__"
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
check("__playwright_update__", "update");
|
|
65
|
+
editor.mutate("Playwright: remove every component alias", (state) => {
|
|
66
|
+
for (const { component, variable } of cases) {
|
|
67
|
+
delete state.components[component]?.aliases[variable];
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
check("", "remove");
|
|
71
|
+
editor.mutate("Playwright: restore component aliases", (state) => {
|
|
72
|
+
state.components = originalComponents;
|
|
73
|
+
});
|
|
74
|
+
return { checked: cases.length, failures };
|
|
75
|
+
}, aliasCases);
|
|
76
|
+
expect(aliasCases.length).toBeGreaterThan(1e3);
|
|
77
|
+
expect(new Set(aliasCases.map(({ variable }) => variable)).size).toBe(aliasCases.length);
|
|
78
|
+
expect(result.checked).toBe(aliasCases.length);
|
|
79
|
+
expect(result.failures).toEqual([]);
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=component-alias.contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../testing/component-alias.contract.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { expect, test } from '@playwright/test';\nimport { openComponentsEditor } from './support/editor';\n\ninterface AliasCase {\n component: string;\n variable: string;\n}\n\nfunction discoverDefaultAliases(): AliasCase[] {\n const root = path.resolve(process.env.LIVE_TOKENS_DATA_DIR ?? 'src/live-tokens/data', 'component-configs');\n const cases: AliasCase[] = [];\n for (const directory of fs.readdirSync(root).sort()) {\n const file = path.join(root, directory, 'default.json');\n if (!fs.existsSync(file)) continue;\n const data = JSON.parse(fs.readFileSync(file, 'utf8')) as {\n component?: string;\n aliases?: Record<string, unknown>;\n };\n const component = data.component ?? directory;\n for (const variable of Object.keys(data.aliases ?? {}).sort()) {\n cases.push({ component, variable });\n }\n }\n return cases;\n}\n\nconst aliasCases = discoverDefaultAliases();\n\ntest('every shipped component alias fans out set, update, and remove to the document root', async ({ page }) => {\n test.setTimeout(60_000);\n await openComponentsEditor(page);\n\n const result = await page.evaluate(async (cases: AliasCase[]) => {\n const editor = window.__liveTokensEditor;\n if (!editor) throw new Error('window.__liveTokensEditor is not present on the components route');\n\n let originalComponents: unknown;\n const unsubscribe = editor.editorState.subscribe((state) => {\n if (originalComponents === undefined) {\n originalComponents = structuredClone(state.components);\n }\n });\n unsubscribe();\n\n const rootStyle = document.documentElement.style;\n const failures: string[] = [];\n const check = (expected: string, phase: string) => {\n for (const { variable } of cases) {\n const actual = rootStyle.getPropertyValue(variable).trim();\n if (actual !== expected) {\n failures.push(`${phase} ${variable}: ${actual}`);\n if (failures.length >= 20) return;\n }\n }\n };\n\n editor.mutate('Playwright: set every component alias', (state: any) => {\n for (const { component, variable } of cases) {\n const slice = state.components[component]\n ?? (state.components[component] = { aliases: {}, config: {} });\n slice.aliases[variable] = { kind: 'literal', value: '__playwright_set__' };\n }\n });\n check('__playwright_set__', 'set');\n\n editor.mutate('Playwright: update every component alias', (state: any) => {\n for (const { component, variable } of cases) {\n state.components[component].aliases[variable] = {\n kind: 'literal',\n value: '__playwright_update__',\n };\n }\n });\n check('__playwright_update__', 'update');\n\n editor.mutate('Playwright: remove every component alias', (state: any) => {\n for (const { component, variable } of cases) {\n delete state.components[component]?.aliases[variable];\n }\n });\n check('', 'remove');\n\n editor.mutate('Playwright: restore component aliases', (state: any) => {\n state.components = originalComponents;\n });\n\n return { checked: cases.length, failures };\n }, aliasCases);\n\n expect(aliasCases.length).toBeGreaterThan(1_000);\n expect(new Set(aliasCases.map(({ variable }) => variable)).size).toBe(aliasCases.length);\n expect(result.checked).toBe(aliasCases.length);\n expect(result.failures).toEqual([]);\n});\n"],"mappings":";;;;;;AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AACjB,SAAS,QAAQ,YAAY;AAQ7B,SAAS,yBAAsC;AAC7C,QAAM,OAAO,KAAK,QAAQ,QAAQ,IAAI,wBAAwB,wBAAwB,mBAAmB;AACzG,QAAM,QAAqB,CAAC;AAC5B,aAAW,aAAa,GAAG,YAAY,IAAI,EAAE,KAAK,GAAG;AACnD,UAAM,OAAO,KAAK,KAAK,MAAM,WAAW,cAAc;AACtD,QAAI,CAAC,GAAG,WAAW,IAAI,EAAG;AAC1B,UAAM,OAAO,KAAK,MAAM,GAAG,aAAa,MAAM,MAAM,CAAC;AAIrD,UAAM,YAAY,KAAK,aAAa;AACpC,eAAW,YAAY,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG;AAC7D,YAAM,KAAK,EAAE,WAAW,SAAS,CAAC;AAAA,IACpC;AAAA,EACF;AACA,SAAO;AACT;AAEA,IAAM,aAAa,uBAAuB;AAE1C,KAAK,uFAAuF,OAAO,EAAE,KAAK,MAAM;AAC9G,OAAK,WAAW,GAAM;AACtB,QAAM,qBAAqB,IAAI;AAE/B,QAAM,SAAS,MAAM,KAAK,SAAS,OAAO,UAAuB;AAC/D,UAAM,SAAS,OAAO;AACtB,QAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,kEAAkE;AAE/F,QAAI;AACJ,UAAM,cAAc,OAAO,YAAY,UAAU,CAAC,UAAU;AAC1D,UAAI,uBAAuB,QAAW;AACpC,6BAAqB,gBAAgB,MAAM,UAAU;AAAA,MACvD;AAAA,IACF,CAAC;AACD,gBAAY;AAEZ,UAAM,YAAY,SAAS,gBAAgB;AAC3C,UAAM,WAAqB,CAAC;AAC5B,UAAM,QAAQ,CAAC,UAAkB,UAAkB;AACjD,iBAAW,EAAE,SAAS,KAAK,OAAO;AAChC,cAAM,SAAS,UAAU,iBAAiB,QAAQ,EAAE,KAAK;AACzD,YAAI,WAAW,UAAU;AACvB,mBAAS,KAAK,GAAG,KAAK,IAAI,QAAQ,KAAK,MAAM,EAAE;AAC/C,cAAI,SAAS,UAAU,GAAI;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAEA,WAAO,OAAO,yCAAyC,CAAC,UAAe;AACrE,iBAAW,EAAE,WAAW,SAAS,KAAK,OAAO;AAC3C,cAAM,QAAQ,MAAM,WAAW,SAAS,MAClC,MAAM,WAAW,SAAS,IAAI,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE;AAC9D,cAAM,QAAQ,QAAQ,IAAI,EAAE,MAAM,WAAW,OAAO,qBAAqB;AAAA,MAC3E;AAAA,IACF,CAAC;AACD,UAAM,sBAAsB,KAAK;AAEjC,WAAO,OAAO,4CAA4C,CAAC,UAAe;AACxE,iBAAW,EAAE,WAAW,SAAS,KAAK,OAAO;AAC3C,cAAM,WAAW,SAAS,EAAE,QAAQ,QAAQ,IAAI;AAAA,UAC9C,MAAM;AAAA,UACN,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF,CAAC;AACD,UAAM,yBAAyB,QAAQ;AAEvC,WAAO,OAAO,4CAA4C,CAAC,UAAe;AACxE,iBAAW,EAAE,WAAW,SAAS,KAAK,OAAO;AAC3C,eAAO,MAAM,WAAW,SAAS,GAAG,QAAQ,QAAQ;AAAA,MACtD;AAAA,IACF,CAAC;AACD,UAAM,IAAI,QAAQ;AAElB,WAAO,OAAO,yCAAyC,CAAC,UAAe;AACrE,YAAM,aAAa;AAAA,IACrB,CAAC;AAED,WAAO,EAAE,SAAS,MAAM,QAAQ,SAAS;AAAA,EAC3C,GAAG,UAAU;AAEb,SAAO,WAAW,MAAM,EAAE,gBAAgB,GAAK;AAC/C,SAAO,IAAI,IAAI,WAAW,IAAI,CAAC,EAAE,SAAS,MAAM,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,WAAW,MAAM;AACvF,SAAO,OAAO,OAAO,EAAE,KAAK,WAAW,MAAM;AAC7C,SAAO,OAAO,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACpC,CAAC;","names":[]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ContractHarness
|
|
3
|
+
} from "./chunk-AO7EZHYV.js";
|
|
4
|
+
import "./chunk-L73N4NSO.js";
|
|
5
|
+
import {
|
|
6
|
+
isInapplicable,
|
|
7
|
+
selectedContracts
|
|
8
|
+
} from "./chunk-LXR3MN6N.js";
|
|
9
|
+
import "./chunk-ZMSX6CXR.js";
|
|
10
|
+
|
|
11
|
+
// src/testing/component-editor.contract.ts
|
|
12
|
+
import { test } from "@playwright/test";
|
|
13
|
+
for (const contract of await selectedContracts()) {
|
|
14
|
+
test.describe.serial(contract.id, () => {
|
|
15
|
+
test(`${contract.id} is listed in its registry group`, async ({ page }) => {
|
|
16
|
+
const harness = await ContractHarness.attach(page, contract);
|
|
17
|
+
await harness.assertListed();
|
|
18
|
+
});
|
|
19
|
+
test(`${contract.id} declares every part and every shipped alias`, async ({ page }) => {
|
|
20
|
+
const harness = await ContractHarness.open(page, contract);
|
|
21
|
+
await harness.assertInventory();
|
|
22
|
+
});
|
|
23
|
+
test(`${contract.id} resolves every alias it paints with`, async ({ page }) => {
|
|
24
|
+
const harness = await ContractHarness.open(page, contract);
|
|
25
|
+
await harness.assertAliasesResolve();
|
|
26
|
+
});
|
|
27
|
+
test(`${contract.id} previews the state being edited`, async ({ page }) => {
|
|
28
|
+
const harness = await ContractHarness.open(page, contract);
|
|
29
|
+
if (isInapplicable(contract.states)) {
|
|
30
|
+
test.info().annotations.push({ type: "inapplicable", description: contract.states.reason });
|
|
31
|
+
}
|
|
32
|
+
await harness.assertStates();
|
|
33
|
+
});
|
|
34
|
+
test(`${contract.id} answers the pointer and the keyboard`, async ({ page }) => {
|
|
35
|
+
const harness = await ContractHarness.open(page, contract);
|
|
36
|
+
if (isInapplicable(contract.interaction)) {
|
|
37
|
+
test.info().annotations.push({ type: "inapplicable", description: contract.interaction.reason });
|
|
38
|
+
}
|
|
39
|
+
await harness.assertInteraction();
|
|
40
|
+
});
|
|
41
|
+
test(`${contract.id} persists an edit and resets to the saved config`, async ({ page }) => {
|
|
42
|
+
test.setTimeout(18e4);
|
|
43
|
+
const harness = await ContractHarness.open(page, contract);
|
|
44
|
+
await harness.assertPersistence();
|
|
45
|
+
});
|
|
46
|
+
test(`${contract.id} takes the theme's values and gives them back`, async ({ page }) => {
|
|
47
|
+
const harness = await ContractHarness.open(page, contract);
|
|
48
|
+
await harness.assertThemeProjection(contract.theme);
|
|
49
|
+
});
|
|
50
|
+
test(`${contract.id} draws every painted part in Sketch mode`, async ({ page }) => {
|
|
51
|
+
const harness = await ContractHarness.open(page, contract);
|
|
52
|
+
const sketch = contract.sketch;
|
|
53
|
+
if (isInapplicable(sketch)) {
|
|
54
|
+
test.info().annotations.push({ type: "inapplicable", description: sketch.reason });
|
|
55
|
+
await harness.assertNoSketchPaint("pencil");
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
await harness.assertSketchPaint(sketch);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=component-editor.contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../testing/component-editor.contract.ts"],"sourcesContent":["import { test } from '@playwright/test';\nimport { isInapplicable } from './componentContract';\nimport { selectedContracts } from './contracts';\nimport { ContractHarness } from './support/contractHarness';\n\nfor (const contract of await selectedContracts()) {\n // Serial, so a component that is not registered reports that and stops rather\n // than reporting six preview failures caused by the missing entry.\n test.describe.serial(contract.id, () => {\n test(`${contract.id} is listed in its registry group`, async ({ page }) => {\n const harness = await ContractHarness.attach(page, contract);\n await harness.assertListed();\n });\n\n test(`${contract.id} declares every part and every shipped alias`, async ({ page }) => {\n const harness = await ContractHarness.open(page, contract);\n await harness.assertInventory();\n });\n\n test(`${contract.id} resolves every alias it paints with`, async ({ page }) => {\n const harness = await ContractHarness.open(page, contract);\n await harness.assertAliasesResolve();\n });\n\n test(`${contract.id} previews the state being edited`, async ({ page }) => {\n const harness = await ContractHarness.open(page, contract);\n if (isInapplicable(contract.states)) {\n test.info().annotations.push({ type: 'inapplicable', description: contract.states.reason });\n }\n await harness.assertStates();\n });\n\n test(`${contract.id} answers the pointer and the keyboard`, async ({ page }) => {\n const harness = await ContractHarness.open(page, contract);\n if (isInapplicable(contract.interaction)) {\n test.info().annotations.push({ type: 'inapplicable', description: contract.interaction.reason });\n }\n await harness.assertInteraction();\n });\n\n test(`${contract.id} persists an edit and resets to the saved config`, async ({ page }) => {\n test.setTimeout(180_000);\n const harness = await ContractHarness.open(page, contract);\n await harness.assertPersistence();\n });\n\n test(`${contract.id} takes the theme's values and gives them back`, async ({ page }) => {\n const harness = await ContractHarness.open(page, contract);\n await harness.assertThemeProjection(contract.theme);\n });\n\n test(`${contract.id} draws every painted part in Sketch mode`, async ({ page }) => {\n const harness = await ContractHarness.open(page, contract);\n const sketch = contract.sketch;\n if (isInapplicable(sketch)) {\n test.info().annotations.push({ type: 'inapplicable', description: sketch.reason });\n await harness.assertNoSketchPaint('pencil');\n return;\n }\n await harness.assertSketchPaint(sketch);\n });\n });\n}\n"],"mappings":";;;;;;;;;;;AAAA,SAAS,YAAY;AAKrB,WAAW,YAAY,MAAM,kBAAkB,GAAG;AAGhD,OAAK,SAAS,OAAO,SAAS,IAAI,MAAM;AACtC,SAAK,GAAG,SAAS,EAAE,oCAAoC,OAAO,EAAE,KAAK,MAAM;AACzE,YAAM,UAAU,MAAM,gBAAgB,OAAO,MAAM,QAAQ;AAC3D,YAAM,QAAQ,aAAa;AAAA,IAC7B,CAAC;AAED,SAAK,GAAG,SAAS,EAAE,gDAAgD,OAAO,EAAE,KAAK,MAAM;AACrF,YAAM,UAAU,MAAM,gBAAgB,KAAK,MAAM,QAAQ;AACzD,YAAM,QAAQ,gBAAgB;AAAA,IAChC,CAAC;AAED,SAAK,GAAG,SAAS,EAAE,wCAAwC,OAAO,EAAE,KAAK,MAAM;AAC7E,YAAM,UAAU,MAAM,gBAAgB,KAAK,MAAM,QAAQ;AACzD,YAAM,QAAQ,qBAAqB;AAAA,IACrC,CAAC;AAED,SAAK,GAAG,SAAS,EAAE,oCAAoC,OAAO,EAAE,KAAK,MAAM;AACzE,YAAM,UAAU,MAAM,gBAAgB,KAAK,MAAM,QAAQ;AACzD,UAAI,eAAe,SAAS,MAAM,GAAG;AACnC,aAAK,KAAK,EAAE,YAAY,KAAK,EAAE,MAAM,gBAAgB,aAAa,SAAS,OAAO,OAAO,CAAC;AAAA,MAC5F;AACA,YAAM,QAAQ,aAAa;AAAA,IAC7B,CAAC;AAED,SAAK,GAAG,SAAS,EAAE,yCAAyC,OAAO,EAAE,KAAK,MAAM;AAC9E,YAAM,UAAU,MAAM,gBAAgB,KAAK,MAAM,QAAQ;AACzD,UAAI,eAAe,SAAS,WAAW,GAAG;AACxC,aAAK,KAAK,EAAE,YAAY,KAAK,EAAE,MAAM,gBAAgB,aAAa,SAAS,YAAY,OAAO,CAAC;AAAA,MACjG;AACA,YAAM,QAAQ,kBAAkB;AAAA,IAClC,CAAC;AAED,SAAK,GAAG,SAAS,EAAE,oDAAoD,OAAO,EAAE,KAAK,MAAM;AACzF,WAAK,WAAW,IAAO;AACvB,YAAM,UAAU,MAAM,gBAAgB,KAAK,MAAM,QAAQ;AACzD,YAAM,QAAQ,kBAAkB;AAAA,IAClC,CAAC;AAED,SAAK,GAAG,SAAS,EAAE,iDAAiD,OAAO,EAAE,KAAK,MAAM;AACtF,YAAM,UAAU,MAAM,gBAAgB,KAAK,MAAM,QAAQ;AACzD,YAAM,QAAQ,sBAAsB,SAAS,KAAK;AAAA,IACpD,CAAC;AAED,SAAK,GAAG,SAAS,EAAE,4CAA4C,OAAO,EAAE,KAAK,MAAM;AACjF,YAAM,UAAU,MAAM,gBAAgB,KAAK,MAAM,QAAQ;AACzD,YAAM,SAAS,SAAS;AACxB,UAAI,eAAe,MAAM,GAAG;AAC1B,aAAK,KAAK,EAAE,YAAY,KAAK,EAAE,MAAM,gBAAgB,aAAa,OAAO,OAAO,CAAC;AACjF,cAAM,QAAQ,oBAAoB,QAAQ;AAC1C;AAAA,MACF;AACA,YAAM,QAAQ,kBAAkB,MAAM;AAAA,IACxC,CAAC;AAAA,EACH,CAAC;AACH;","names":[]}
|