@calibrate-ds/core 0.1.41 → 0.1.44
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/dist/docs/generate-component-stories.d.ts.map +1 -1
- package/dist/docs/generate-component-stories.js +32 -1
- package/dist/docs/generate-component-stories.js.map +1 -1
- package/dist/verify/index.d.ts +2 -1
- package/dist/verify/index.d.ts.map +1 -1
- package/dist/verify/index.js +1 -0
- package/dist/verify/index.js.map +1 -1
- package/dist/verify/structure-check.d.ts +22 -0
- package/dist/verify/structure-check.d.ts.map +1 -0
- package/dist/verify/structure-check.js +116 -0
- package/dist/verify/structure-check.js.map +1 -0
- package/dist/verify/types.d.ts +36 -0
- package/dist/verify/types.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-component-stories.d.ts","sourceRoot":"","sources":["../../src/docs/generate-component-stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AA+BnE,wBAAgB,wBAAwB,CACpC,OAAO,EAAE,gBAAgB,EACzB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,GAChB,MAAM,
|
|
1
|
+
{"version":3,"file":"generate-component-stories.d.ts","sourceRoot":"","sources":["../../src/docs/generate-component-stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AA+BnE,wBAAgB,wBAAwB,CACpC,OAAO,EAAE,gBAAgB,EACzB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,GAChB,MAAM,CAoJR"}
|
|
@@ -82,13 +82,44 @@ export function generateComponentStories(context, componentName, fileKey) {
|
|
|
82
82
|
lines.push(`export default meta;`);
|
|
83
83
|
lines.push(`type Story = StoryObj<typeof ${componentName}>;`);
|
|
84
84
|
lines.push("");
|
|
85
|
-
// ── Default story — uses defaultValues from all axes
|
|
85
|
+
// ── Default story — uses defaultValues from all axes + design text content ─
|
|
86
86
|
const defaultArgs = {};
|
|
87
87
|
for (const axis of (context.variantAxes ?? [])) {
|
|
88
88
|
if (axis.defaultValue !== undefined) {
|
|
89
89
|
defaultArgs[toPropName(axis.name)] = String(axis.defaultValue);
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
+
// Populate text props from the Figma design's actual content values so
|
|
93
|
+
// the Default story renders real content instead of placeholder defaults.
|
|
94
|
+
// Source: nodes whose contentContract resolves a propName have a textContent
|
|
95
|
+
// value from the Figma design — use that as the story arg default.
|
|
96
|
+
const contentSourceMap = context.contentSourceMap ?? {};
|
|
97
|
+
const textArgValues = {};
|
|
98
|
+
function collectTextArgs(node) {
|
|
99
|
+
if (!node)
|
|
100
|
+
return;
|
|
101
|
+
const propName = node.contentContract?.propName
|
|
102
|
+
?? (node.name ? contentSourceMap[node.name] : undefined);
|
|
103
|
+
if (propName && node.textContent && typeof node.textContent === "string") {
|
|
104
|
+
if (!textArgValues[propName]) {
|
|
105
|
+
textArgValues[propName] = node.textContent;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
for (const child of (node.children ?? []))
|
|
109
|
+
collectTextArgs(child);
|
|
110
|
+
}
|
|
111
|
+
if (context.renderTree)
|
|
112
|
+
collectTextArgs(context.renderTree);
|
|
113
|
+
if (context.baseRenderTree)
|
|
114
|
+
collectTextArgs(context.baseRenderTree);
|
|
115
|
+
for (const [k, v] of Object.entries(textArgValues)) {
|
|
116
|
+
// Only add if this prop is declared in the component's text properties
|
|
117
|
+
// (don't inject unknown keys into the args object)
|
|
118
|
+
const declared = (context.properties ?? []).some(p => toPropName(p.name) === k || p.name === k);
|
|
119
|
+
if (declared || contentSourceMap[k] || Object.values(contentSourceMap).includes(k)) {
|
|
120
|
+
defaultArgs[k] = v;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
92
123
|
lines.push(`export const Default: Story = {`);
|
|
93
124
|
if (Object.keys(defaultArgs).length > 0) {
|
|
94
125
|
lines.push(` args: {`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-component-stories.js","sourceRoot":"","sources":["../../src/docs/generate-component-stories.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generate-component-stories.js","sourceRoot":"","sources":["../../src/docs/generate-component-stories.ts"],"names":[],"mappings":"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"}
|
package/dist/verify/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export type { VerifyReport, VerifyScreenshots, PixelMatchResult, AIFeedback, AIDifference, } from "./types.js";
|
|
1
|
+
export type { VerifyReport, VerifyScreenshots, PixelMatchResult, AIFeedback, AIDifference, StructureExpectations, StructureFound, } from "./types.js";
|
|
2
2
|
export { fetchFigmaScreenshot } from "./fetch-figma-screenshot.js";
|
|
3
3
|
export { runPixelDiff } from "./pixel-diff.js";
|
|
4
|
+
export { extractStructuralExpectations, computeStructureScore, extractDesignTextTokens } from "./structure-check.js";
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/verify/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACR,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/verify/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACR,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,qBAAqB,EACrB,cAAc,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/verify/index.js
CHANGED
package/dist/verify/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/verify/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/verify/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { StructureExpectations, StructureFound } from "./types.js";
|
|
2
|
+
export declare function extractDesignTextTokens(renderTree: any): string[];
|
|
3
|
+
/**
|
|
4
|
+
* Walks a LayoutTreeNode tree (children only, not childOverrides which are
|
|
5
|
+
* variant branches) and counts structural slot types that must be present
|
|
6
|
+
* in the rendered DOM for a faithful implementation.
|
|
7
|
+
*/
|
|
8
|
+
export declare function extractStructuralExpectations(renderTree: any): StructureExpectations;
|
|
9
|
+
/**
|
|
10
|
+
* Returns a 0–1 structure score — the fraction of expected structural slots
|
|
11
|
+
* that are present and non-empty in the rendered DOM.
|
|
12
|
+
*
|
|
13
|
+
* Returns undefined when there are no trackable slots (e.g. icon components),
|
|
14
|
+
* signalling the caller to fall back to the pixel score.
|
|
15
|
+
*
|
|
16
|
+
* Scoring weights:
|
|
17
|
+
* - text slots: 70% of the total (more numerous and meaningful)
|
|
18
|
+
* - image slots: 30% (binary — either the <img> exists or it doesn't)
|
|
19
|
+
* When only one slot type is present its weight becomes 100%.
|
|
20
|
+
*/
|
|
21
|
+
export declare function computeStructureScore(exp: StructureExpectations, found: StructureFound): number | undefined;
|
|
22
|
+
//# sourceMappingURL=structure-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structure-check.d.ts","sourceRoot":"","sources":["../../src/verify/structure-check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAiBxE,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,GAAG,GAAG,MAAM,EAAE,CAqCjE;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,GAAG,GAAG,qBAAqB,CA8BpF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACjC,GAAG,EAAE,qBAAqB,EAC1B,KAAK,EAAE,cAAc,GACtB,MAAM,GAAG,SAAS,CAqBpB"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Walks the Figma renderTree and collects all unique design text tokens:
|
|
3
|
+
* - Direct text leaf values (`node.textContent`)
|
|
4
|
+
* - String values from `propertyOverrides` on instance nodes
|
|
5
|
+
* (this is where chip labels, badge text, and nested instance text live)
|
|
6
|
+
*
|
|
7
|
+
* These tokens are used by runVerify to assert the rendered DOM contains the
|
|
8
|
+
* design's actual content — independent of which specific prop carries them.
|
|
9
|
+
* Tokens shorter than MIN_TOKEN_LEN are skipped (avoid single letters, icons).
|
|
10
|
+
*/
|
|
11
|
+
// Figma node IDs look like "2:40", "I2:40;3:4", "14:150" — digit:digit with optional prefix.
|
|
12
|
+
// Component/asset paths look like "Icon/Arrow", "Button/Primary" — contain a slash.
|
|
13
|
+
// Neither ever appears as rendered text so we exclude them from token matching.
|
|
14
|
+
const FIGMA_ID_RE = /^[A-Z]?\d+:\d+/;
|
|
15
|
+
export function extractDesignTextTokens(renderTree) {
|
|
16
|
+
const MIN_TOKEN_LEN = 3;
|
|
17
|
+
const seen = new Set();
|
|
18
|
+
const tokens = [];
|
|
19
|
+
function add(value) {
|
|
20
|
+
const v = value.trim();
|
|
21
|
+
if (v.length < MIN_TOKEN_LEN)
|
|
22
|
+
return;
|
|
23
|
+
// Skip Figma node IDs and component path references — these are INSTANCE_SWAP
|
|
24
|
+
// values stored in propertyOverrides that are never rendered as visible text.
|
|
25
|
+
if (FIGMA_ID_RE.test(v) || v.includes("/"))
|
|
26
|
+
return;
|
|
27
|
+
if (seen.has(v.toLowerCase()))
|
|
28
|
+
return;
|
|
29
|
+
seen.add(v.toLowerCase());
|
|
30
|
+
tokens.push(v);
|
|
31
|
+
}
|
|
32
|
+
function walk(node) {
|
|
33
|
+
if (!node)
|
|
34
|
+
return;
|
|
35
|
+
// Direct text content on a leaf node
|
|
36
|
+
if (typeof node.textContent === "string")
|
|
37
|
+
add(node.textContent);
|
|
38
|
+
// Property overrides on instance nodes — TEXT props (chip labels, badge text)
|
|
39
|
+
// are stored here alongside INSTANCE_SWAP refs; the FIGMA_ID_RE/slash guards
|
|
40
|
+
// above filter out the non-text entries.
|
|
41
|
+
if (node.propertyOverrides && typeof node.propertyOverrides === "object") {
|
|
42
|
+
for (const value of Object.values(node.propertyOverrides)) {
|
|
43
|
+
if (typeof value === "string")
|
|
44
|
+
add(value);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
for (const child of node.children ?? [])
|
|
48
|
+
walk(child);
|
|
49
|
+
// intentionally skip childOverrides (variant branches, not distinct slots)
|
|
50
|
+
}
|
|
51
|
+
walk(renderTree);
|
|
52
|
+
return tokens;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Walks a LayoutTreeNode tree (children only, not childOverrides which are
|
|
56
|
+
* variant branches) and counts structural slot types that must be present
|
|
57
|
+
* in the rendered DOM for a faithful implementation.
|
|
58
|
+
*/
|
|
59
|
+
export function extractStructuralExpectations(renderTree) {
|
|
60
|
+
let textSlots = 0;
|
|
61
|
+
let imageSlots = 0;
|
|
62
|
+
const TEXT_ROLES = new Set([
|
|
63
|
+
"text", "title", "label", "description",
|
|
64
|
+
"placeholder-text", "error-text", "helper-text",
|
|
65
|
+
]);
|
|
66
|
+
function walk(node) {
|
|
67
|
+
if (!node)
|
|
68
|
+
return;
|
|
69
|
+
const isTextByRole = TEXT_ROLES.has(node.role ?? "");
|
|
70
|
+
const isTextByType = node.rawStyles?.nodeType === "TEXT";
|
|
71
|
+
const isTextByValue = node.textContent !== undefined && node.type === "leaf";
|
|
72
|
+
if (isTextByRole || isTextByType || isTextByValue) {
|
|
73
|
+
textSlots++;
|
|
74
|
+
}
|
|
75
|
+
if (node.imageAssetPath) {
|
|
76
|
+
imageSlots++;
|
|
77
|
+
}
|
|
78
|
+
for (const child of node.children ?? [])
|
|
79
|
+
walk(child);
|
|
80
|
+
// intentionally skip childOverrides — those are variant branches, not distinct slots
|
|
81
|
+
}
|
|
82
|
+
walk(renderTree);
|
|
83
|
+
return { textSlots, imageSlots };
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Returns a 0–1 structure score — the fraction of expected structural slots
|
|
87
|
+
* that are present and non-empty in the rendered DOM.
|
|
88
|
+
*
|
|
89
|
+
* Returns undefined when there are no trackable slots (e.g. icon components),
|
|
90
|
+
* signalling the caller to fall back to the pixel score.
|
|
91
|
+
*
|
|
92
|
+
* Scoring weights:
|
|
93
|
+
* - text slots: 70% of the total (more numerous and meaningful)
|
|
94
|
+
* - image slots: 30% (binary — either the <img> exists or it doesn't)
|
|
95
|
+
* When only one slot type is present its weight becomes 100%.
|
|
96
|
+
*/
|
|
97
|
+
export function computeStructureScore(exp, found) {
|
|
98
|
+
const hasText = exp.textSlots > 0;
|
|
99
|
+
const hasImage = exp.imageSlots > 0;
|
|
100
|
+
if (!hasText && !hasImage)
|
|
101
|
+
return undefined;
|
|
102
|
+
const parts = [];
|
|
103
|
+
if (hasText) {
|
|
104
|
+
// Partial credit: having MORE text nodes than expected is fine (min cap at 1).
|
|
105
|
+
// A rendered component that has all slots is worth 1; each missing slot reduces.
|
|
106
|
+
parts.push({ value: Math.min(1, found.textNodes / exp.textSlots), weight: 0.7 });
|
|
107
|
+
}
|
|
108
|
+
if (hasImage) {
|
|
109
|
+
// Binary: either the image region is rendered or it isn't.
|
|
110
|
+
parts.push({ value: found.imageElements > 0 ? 1 : 0, weight: 0.3 });
|
|
111
|
+
}
|
|
112
|
+
const totalWeight = parts.reduce((s, p) => s + p.weight, 0);
|
|
113
|
+
const weighted = parts.reduce((s, p) => s + p.value * p.weight, 0);
|
|
114
|
+
return parseFloat((weighted / totalWeight).toFixed(4));
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=structure-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structure-check.js","sourceRoot":"","sources":["../../src/verify/structure-check.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,6FAA6F;AAC7F,oFAAoF;AACpF,gFAAgF;AAChF,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAErC,MAAM,UAAU,uBAAuB,CAAC,UAAe;IACnD,MAAM,aAAa,GAAG,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,SAAS,GAAG,CAAC,KAAa;QACtB,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,MAAM,GAAG,aAAa;YAAE,OAAO;QACrC,8EAA8E;QAC9E,8EAA8E;QAC9E,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO;QACnD,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAAE,OAAO;QACtC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,SAAS,IAAI,CAAC,IAAS;QACnB,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,qCAAqC;QACrC,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;YAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEhE,8EAA8E;QAC9E,6EAA6E;QAC7E,yCAAyC;QACzC,IAAI,IAAI,CAAC,iBAAiB,IAAI,OAAO,IAAI,CAAC,iBAAiB,KAAK,QAAQ,EAAE,CAAC;YACvE,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACxD,IAAI,OAAO,KAAK,KAAK,QAAQ;oBAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9C,CAAC;QACL,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE;YAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,2EAA2E;IAC/E,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,CAAC;IACjB,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,UAAe;IACzD,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;QACvB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa;QACvC,kBAAkB,EAAE,YAAY,EAAE,aAAa;KAClD,CAAC,CAAC;IAEH,SAAS,IAAI,CAAC,IAAS;QACnB,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,YAAY,GAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,YAAY,GAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,KAAK,MAAM,CAAC;QAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;QAE7E,IAAI,YAAY,IAAI,YAAY,IAAI,aAAa,EAAE,CAAC;YAChD,SAAS,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,UAAU,EAAE,CAAC;QACjB,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE;YAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,qFAAqF;IACzF,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,CAAC;IACjB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,qBAAqB,CACjC,GAA0B,EAC1B,KAAqB;IAErB,MAAM,OAAO,GAAI,GAAG,CAAC,SAAS,GAAI,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;IAEpC,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAE5C,MAAM,KAAK,GAA6C,EAAE,CAAC;IAE3D,IAAI,OAAO,EAAE,CAAC;QACV,+EAA+E;QAC/E,iFAAiF;QACjF,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACX,2DAA2D;QAC3D,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAM,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtE,OAAO,UAAU,CAAC,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC"}
|
package/dist/verify/types.d.ts
CHANGED
|
@@ -5,6 +5,18 @@ export type VerifyScreenshots = {
|
|
|
5
5
|
impl: string | null;
|
|
6
6
|
diff: string | null;
|
|
7
7
|
};
|
|
8
|
+
export type StructureExpectations = {
|
|
9
|
+
/** Number of text-type leaf slots detected in the Figma renderTree. */
|
|
10
|
+
textSlots: number;
|
|
11
|
+
/** Number of image-fill slots detected in the Figma renderTree. */
|
|
12
|
+
imageSlots: number;
|
|
13
|
+
};
|
|
14
|
+
export type StructureFound = {
|
|
15
|
+
/** Non-empty leaf text elements in the rendered DOM. */
|
|
16
|
+
textNodes: number;
|
|
17
|
+
/** <img> elements + elements with a background-image CSS value. */
|
|
18
|
+
imageElements: number;
|
|
19
|
+
};
|
|
8
20
|
export type PixelMatchResult = {
|
|
9
21
|
/** Full-frame raw pixel match score (0–1, 1 = identical). */
|
|
10
22
|
score: number;
|
|
@@ -43,5 +55,29 @@ export type VerifyReport = {
|
|
|
43
55
|
resolvedStoryId?: string;
|
|
44
56
|
/** Human-readable error when resolved=false. */
|
|
45
57
|
error?: string;
|
|
58
|
+
/**
|
|
59
|
+
* Structural slot presence score (0–1). Measures whether the expected number
|
|
60
|
+
* of text and image regions from the Figma renderTree are rendered in the DOM —
|
|
61
|
+
* independent of what text is actually shown (props are dynamic).
|
|
62
|
+
* Undefined for components with no trackable slots (e.g. icons).
|
|
63
|
+
*/
|
|
64
|
+
structureScore?: number;
|
|
65
|
+
/** Slot counts extracted from the Figma renderTree. */
|
|
66
|
+
structureExpectations?: StructureExpectations;
|
|
67
|
+
/** Slot counts found in the rendered Storybook DOM. */
|
|
68
|
+
structureFound?: StructureFound;
|
|
69
|
+
/**
|
|
70
|
+
* Design token score (0–1). Fraction of the Figma design's actual text content
|
|
71
|
+
* values (from renderTree textContent + instance propertyOverrides) that appear
|
|
72
|
+
* in the rendered DOM's innerText. This is the primary gate for text-bearing
|
|
73
|
+
* components — it catches implementations that render wrong/placeholder content,
|
|
74
|
+
* and is immune to font rendering and pixel-alignment differences.
|
|
75
|
+
* Undefined when no design text tokens are found (e.g. icons, purely visual).
|
|
76
|
+
*/
|
|
77
|
+
tokenScore?: number;
|
|
78
|
+
/** Number of unique design text tokens extracted from the renderTree. */
|
|
79
|
+
designTokenCount?: number;
|
|
80
|
+
/** Number of design text tokens found in the rendered DOM. */
|
|
81
|
+
foundTokenCount?: number;
|
|
46
82
|
};
|
|
47
83
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/verify/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,yFAAyF;IACzF,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IACzC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,YAAY,EAAE,CAAC;IAC5B,iBAAiB,EAAE,SAAS,GAAG,mBAAmB,GAAG,yBAAyB,CAAC;CAClF,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,iBAAiB,CAAC;IAC/B,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,qFAAqF;IACrF,QAAQ,EAAE,OAAO,CAAC;IAClB,gGAAgG;IAChG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/verify/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,yFAAyF;IACzF,WAAW,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IACzC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAChC,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,UAAU,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IACzB,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,aAAa,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC3B,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,YAAY,EAAE,CAAC;IAC5B,iBAAiB,EAAE,SAAS,GAAG,mBAAmB,GAAG,yBAAyB,CAAC;CAClF,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,iBAAiB,CAAC;IAC/B,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,qFAAqF;IACrF,QAAQ,EAAE,OAAO,CAAC;IAClB,gGAAgG;IAChG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,uDAAuD;IACvD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@calibrate-ds/core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.44",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"pixelmatch": "^6.0.0",
|
|
28
28
|
"pngjs": "^7.0.0",
|
|
29
29
|
"zod": "^4.3.6",
|
|
30
|
-
"@calibrate-ds/shared-types": "^0.1.
|
|
31
|
-
"@calibrate-ds/figma-client": "^0.1.
|
|
30
|
+
"@calibrate-ds/shared-types": "^0.1.44",
|
|
31
|
+
"@calibrate-ds/figma-client": "^0.1.44"
|
|
32
32
|
},
|
|
33
33
|
"scripts": {
|
|
34
34
|
"build": "tsc -p tsconfig.json",
|