@design-parity/diff 0.1.1 → 0.1.3
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/README.md +6 -2
- package/dist/diff.d.ts +7 -1
- package/dist/diff.d.ts.map +1 -1
- package/dist/diff.js +1 -1
- package/dist/diff.js.map +1 -1
- package/dist/tokens.d.ts +11 -4
- package/dist/tokens.d.ts.map +1 -1
- package/dist/tokens.js +120 -9
- package/dist/tokens.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -35,8 +35,12 @@ are ordered a11y → token → semantic → visual; `verdict.visualScores` maps
|
|
|
35
35
|
targets, semantic roles/labels, and i18n risks. `defaultChecks` wires the real
|
|
36
36
|
package; inject a custom provider (or `checksConfig`) to override.
|
|
37
37
|
- **Token compliance** — flatten the candidate's tree tokens and compare against
|
|
38
|
-
the reference spec: numeric tokens honour a committed tolerance,
|
|
39
|
-
|
|
38
|
+
the reference spec: numeric tokens honour a committed tolerance, typography
|
|
39
|
+
matches exactly, colours match modulo a full-alpha suffix (with a same-role
|
|
40
|
+
value fallback). When the design and code token vocabularies differ, a
|
|
41
|
+
`design-map.json` `tokens` alias (code-name → design-name) canonicalises the
|
|
42
|
+
reference to code names first, so e.g. design `color/on-surface` lines up with
|
|
43
|
+
code `onSurface`.
|
|
40
44
|
- **Semantics** — theme-coverage and structural (role/label) deltas.
|
|
41
45
|
- **Visual** — per-pixel diff via `pixelmatch`, plus the triptych.
|
|
42
46
|
|
package/dist/diff.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CandidateRender, DesignReference, Verdict } from "@design-parity/core";
|
|
1
|
+
import type { CandidateRender, DesignReference, TokenAliasMap, Verdict } from "@design-parity/core";
|
|
2
2
|
import { type ChecksConfig, type ChecksProvider } from "./checks.js";
|
|
3
3
|
import { type DiffConfig } from "./config.js";
|
|
4
4
|
export interface DiffOptions {
|
|
@@ -13,6 +13,12 @@ export interface DiffOptions {
|
|
|
13
13
|
checks?: ChecksProvider;
|
|
14
14
|
/** Committed a11y/i18n thresholds passed to the checks provider. */
|
|
15
15
|
checksConfig?: ChecksConfig;
|
|
16
|
+
/**
|
|
17
|
+
* Design-name ↔ code-name token aliases (the repo's `design-map.json`
|
|
18
|
+
* `tokens` section). When set, token-compliance canonicalises the design-named
|
|
19
|
+
* reference spec to code names before comparing (issue #78).
|
|
20
|
+
*/
|
|
21
|
+
tokenAlias?: TokenAliasMap;
|
|
16
22
|
/**
|
|
17
23
|
* If set, triptych PNGs are written here as `triptych-<key>.png` and their
|
|
18
24
|
* paths land in {@link DiffResult.triptychs}. Omit to skip disk writes; the
|
package/dist/diff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EAGf,OAAO,EAER,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAa7D,MAAM,WAAW,WAAW;IAC1B,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7B;;;OAGG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,oEAAoE;IACpE,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,8CAA8C;AAC9C,MAAM,WAAW,QAAQ;IACvB,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAuDD;;;GAGG;AACH,wBAAsB,IAAI,CACxB,SAAS,EAAE,eAAe,EAC1B,SAAS,EAAE,eAAe,EAC1B,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EAGf,aAAa,EACb,OAAO,EAER,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAa7D,MAAM,WAAW,WAAW;IAC1B,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7B;;;OAGG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,oEAAoE;IACpE,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;;OAIG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,8CAA8C;AAC9C,MAAM,WAAW,QAAQ;IACvB,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB;AAuDD;;;GAGG;AACH,wBAAsB,IAAI,CACxB,SAAS,EAAE,eAAe,EAC1B,SAAS,EAAE,eAAe,EAC1B,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,CAAC,CAkFrB"}
|
package/dist/diff.js
CHANGED
|
@@ -73,7 +73,7 @@ export async function diff(reference, candidate, options = {}) {
|
|
|
73
73
|
config: options.checksConfig ?? {},
|
|
74
74
|
});
|
|
75
75
|
// 2. token compliance.
|
|
76
|
-
const tokens = diffTokens(reference.tokens, candidateTokens, config);
|
|
76
|
+
const tokens = diffTokens(reference.tokens, candidateTokens, config, options.tokenAlias);
|
|
77
77
|
// 3. semantics (+ reference variants with no candidate counterpart).
|
|
78
78
|
const semantic = diffSemantics(reference, candidate);
|
|
79
79
|
const { pairs, unmatched } = pairImages(reference, candidate);
|
package/dist/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../src/diff.ts"],"names":[],"mappings":"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"}
|
package/dist/tokens.d.ts
CHANGED
|
@@ -4,10 +4,14 @@
|
|
|
4
4
|
* A {@link DesignReference} carries one flat {@link DesignTokens} bag; a
|
|
5
5
|
* {@link CandidateRender} scatters tokens across its semantic tree. We flatten
|
|
6
6
|
* the candidate's tree into the same shape, then compare key-by-key against the
|
|
7
|
-
* reference spec. Numeric tokens honour a committed tolerance;
|
|
8
|
-
*
|
|
7
|
+
* reference spec. Numeric tokens honour a committed tolerance; typography must
|
|
8
|
+
* match exactly; colours match modulo a full-alpha suffix (`#RRGGBB` ==
|
|
9
|
+
* `#RRGGBBAA`). A spec token the candidate couldn't name falls back to a value
|
|
10
|
+
* match before being reported missing — same-role for colours, within-tolerance
|
|
11
|
+
* for spacing/radius — since the candidate carries resolved values under generic
|
|
12
|
+
* keys rather than the reference's names (compose-ai-tools#1897).
|
|
9
13
|
*/
|
|
10
|
-
import type { DesignTokens, Finding, SemanticNode } from "@design-parity/core";
|
|
14
|
+
import type { DesignTokens, Finding, SemanticNode, TokenAliasMap } from "@design-parity/core";
|
|
11
15
|
import type { DiffConfig } from "./config.js";
|
|
12
16
|
/** Deep-merge every node's tokens into one flat bag (children override parents). */
|
|
13
17
|
export declare function collectTokens(root: SemanticNode): DesignTokens;
|
|
@@ -16,6 +20,9 @@ export declare function collectTokens(root: SemanticNode): DesignTokens;
|
|
|
16
20
|
* a stable order — spacing, radius, colours, typography — so the verdict is
|
|
17
21
|
* reproducible. A reference token absent from the candidate is a `missing`
|
|
18
22
|
* finding; tokens the candidate adds beyond the spec are ignored.
|
|
23
|
+
*
|
|
24
|
+
* When a {@link TokenAliasMap} is supplied, the design-named spec is first
|
|
25
|
+
* canonicalised to code names so differing vocabularies still match.
|
|
19
26
|
*/
|
|
20
|
-
export declare function diffTokens(
|
|
27
|
+
export declare function diffTokens(specInput: DesignTokens | undefined, candidate: DesignTokens, config: DiffConfig, alias?: TokenAliasMap): Finding[];
|
|
21
28
|
//# sourceMappingURL=tokens.d.ts.map
|
package/dist/tokens.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EACV,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,aAAa,EAEd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,CAQ9D;AAiED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,YAAY,GAAG,SAAS,EACnC,SAAS,EAAE,YAAY,EACvB,MAAM,EAAE,UAAU,EAClB,KAAK,CAAC,EAAE,aAAa,GACpB,OAAO,EAAE,CA4CX"}
|
package/dist/tokens.js
CHANGED
|
@@ -28,30 +28,78 @@ function typographyEqual(a, b) {
|
|
|
28
28
|
a.lineHeight === b.lineHeight &&
|
|
29
29
|
a.letterSpacing === b.letterSpacing);
|
|
30
30
|
}
|
|
31
|
+
/** Fold a token name to an alias-lookup key: last `/`-segment, lowercased. */
|
|
32
|
+
function aliasKey(name) {
|
|
33
|
+
return name.slice(name.lastIndexOf("/") + 1).toLowerCase();
|
|
34
|
+
}
|
|
35
|
+
/** Invert a code→design alias group into a design-key → code-name index. */
|
|
36
|
+
function aliasInverse(group) {
|
|
37
|
+
const inv = new Map();
|
|
38
|
+
for (const [code, design] of Object.entries(group ?? {})) {
|
|
39
|
+
const key = aliasKey(design);
|
|
40
|
+
if (!inv.has(key))
|
|
41
|
+
inv.set(key, code); // first declaration wins, deterministically
|
|
42
|
+
}
|
|
43
|
+
return inv;
|
|
44
|
+
}
|
|
45
|
+
/** Rewrite a token group's keys from design names to code names via the alias. */
|
|
46
|
+
function remapKeys(group, alias) {
|
|
47
|
+
if (!group)
|
|
48
|
+
return group;
|
|
49
|
+
const inv = aliasInverse(alias);
|
|
50
|
+
if (inv.size === 0)
|
|
51
|
+
return group;
|
|
52
|
+
const out = {};
|
|
53
|
+
for (const [name, value] of Object.entries(group)) {
|
|
54
|
+
out[inv.get(aliasKey(name)) ?? name] = value;
|
|
55
|
+
}
|
|
56
|
+
return out;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Canonicalise the design-named reference spec to code names via the alias map,
|
|
60
|
+
* so the key-by-key comparison below lines design tokens up with their code
|
|
61
|
+
* counterparts (issue #78). Groups without an alias pass through untouched.
|
|
62
|
+
*/
|
|
63
|
+
function applyAlias(spec, alias) {
|
|
64
|
+
return {
|
|
65
|
+
spacing: remapKeys(spec.spacing, alias.spacing),
|
|
66
|
+
radius: remapKeys(spec.radius, alias.radius),
|
|
67
|
+
colors: remapKeys(spec.colors, alias.colors),
|
|
68
|
+
typography: remapKeys(spec.typography, alias.typography),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
31
71
|
/**
|
|
32
72
|
* Compare candidate tokens against the reference spec. Findings are emitted in
|
|
33
73
|
* a stable order — spacing, radius, colours, typography — so the verdict is
|
|
34
74
|
* reproducible. A reference token absent from the candidate is a `missing`
|
|
35
75
|
* finding; tokens the candidate adds beyond the spec are ignored.
|
|
76
|
+
*
|
|
77
|
+
* When a {@link TokenAliasMap} is supplied, the design-named spec is first
|
|
78
|
+
* canonicalised to code names so differing vocabularies still match.
|
|
36
79
|
*/
|
|
37
|
-
export function diffTokens(
|
|
80
|
+
export function diffTokens(specInput, candidate, config, alias) {
|
|
38
81
|
const findings = [];
|
|
39
|
-
if (!
|
|
82
|
+
if (!specInput)
|
|
40
83
|
return findings;
|
|
84
|
+
const spec = alias ? applyAlias(specInput, alias) : specInput;
|
|
41
85
|
for (const [name, want] of Object.entries(spec.spacing ?? {})) {
|
|
42
|
-
|
|
43
|
-
numericFinding("spacing", name, want, got, config.spacingTolerance, findings);
|
|
86
|
+
numericFinding("spacing", name, want, candidate.spacing, config.spacingTolerance, findings);
|
|
44
87
|
}
|
|
45
88
|
for (const [name, want] of Object.entries(spec.radius ?? {})) {
|
|
46
|
-
|
|
47
|
-
numericFinding("radius", name, want, got, config.radiusTolerance, findings);
|
|
89
|
+
numericFinding("radius", name, want, candidate.radius, config.radiusTolerance, findings);
|
|
48
90
|
}
|
|
49
91
|
for (const [name, want] of Object.entries(spec.colors ?? {})) {
|
|
50
|
-
|
|
92
|
+
// A node carries its colour under the reference's token name only when the
|
|
93
|
+
// candidate's theme could name it; without a resolved theme (compose-ai-tools
|
|
94
|
+
// #1897) the value lands under the generic role key `fg`/`bg`. So when the
|
|
95
|
+
// spec name isn't present, fall back to a value match within the same role
|
|
96
|
+
// before declaring it missing — the candidate already provides the value
|
|
97
|
+
// (issue #74), just not under this name.
|
|
98
|
+
const got = candidate.colors?.[name] ?? roleMatch(name, want, candidate.colors);
|
|
51
99
|
if (got === undefined) {
|
|
52
100
|
findings.push(missing("colors", name, want));
|
|
53
101
|
}
|
|
54
|
-
else if (got
|
|
102
|
+
else if (!colorsEqual(got, want)) {
|
|
55
103
|
findings.push({
|
|
56
104
|
kind: "token",
|
|
57
105
|
severity: "warn",
|
|
@@ -76,7 +124,13 @@ export function diffTokens(spec, candidate, config) {
|
|
|
76
124
|
}
|
|
77
125
|
return findings;
|
|
78
126
|
}
|
|
79
|
-
function numericFinding(group, name, want,
|
|
127
|
+
function numericFinding(group, name, want, candidate, tolerance, findings) {
|
|
128
|
+
// Prefer an exact name match; otherwise fall back to a value match. The
|
|
129
|
+
// candidate carries resolved spacing/radius values under generic keys, not the
|
|
130
|
+
// reference's token names (compose-ai-tools#1897), so a spec token is satisfied
|
|
131
|
+
// by any candidate value within tolerance before it's reported missing — the
|
|
132
|
+
// numeric analogue of the colour role-match (issue #74).
|
|
133
|
+
const got = candidate?.[name] ?? numericValueMatch(want, tolerance, candidate);
|
|
80
134
|
if (got === undefined) {
|
|
81
135
|
findings.push(missing(group, name, String(want)));
|
|
82
136
|
return;
|
|
@@ -91,6 +145,63 @@ function numericFinding(group, name, want, got, tolerance, findings) {
|
|
|
91
145
|
});
|
|
92
146
|
}
|
|
93
147
|
}
|
|
148
|
+
/** The candidate value closest to `want` within `tolerance`, or `undefined`. */
|
|
149
|
+
function numericValueMatch(want, tolerance, candidate) {
|
|
150
|
+
if (!candidate)
|
|
151
|
+
return undefined;
|
|
152
|
+
let best;
|
|
153
|
+
let bestDelta = Infinity;
|
|
154
|
+
for (const value of Object.values(candidate)) {
|
|
155
|
+
const delta = Math.abs(value - want);
|
|
156
|
+
if (delta <= tolerance && delta < bestDelta) {
|
|
157
|
+
best = value;
|
|
158
|
+
bestDelta = delta;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return best;
|
|
162
|
+
}
|
|
163
|
+
/** A token name carries a foreground (text/icon) colour: `onPrimary`, `fg`. */
|
|
164
|
+
function isForegroundToken(name) {
|
|
165
|
+
return name === "fg" || /^on[A-Z]/.test(name);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Find a candidate colour matching `want` under the same role as the spec
|
|
169
|
+
* token `name`. The candidate's per-node colours collapse onto generic role
|
|
170
|
+
* keys (`fg`/`bg`) when its theme can't name them, so a foreground spec token
|
|
171
|
+
* is satisfied by any foreground candidate value of the same colour (and a
|
|
172
|
+
* background token likewise). Returns the matching value, or `undefined`.
|
|
173
|
+
*/
|
|
174
|
+
function roleMatch(name, want, candidate) {
|
|
175
|
+
if (!candidate)
|
|
176
|
+
return undefined;
|
|
177
|
+
const wantForeground = isForegroundToken(name);
|
|
178
|
+
for (const [key, value] of Object.entries(candidate)) {
|
|
179
|
+
if (isForegroundToken(key) === wantForeground && colorsEqual(value, want)) {
|
|
180
|
+
return value;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return undefined;
|
|
184
|
+
}
|
|
185
|
+
/** Split a hex colour into lowercase `rgb` + `alpha`, or `undefined` if not hex. */
|
|
186
|
+
function parseHexColor(value) {
|
|
187
|
+
const hex = value.startsWith("#") ? value.slice(1) : value;
|
|
188
|
+
// Candidate values are `#RRGGBBAA` (alpha last, from `argbToCssHex`); the
|
|
189
|
+
// reference spec is typically `#RRGGBB`. Treat a 6-digit value as opaque.
|
|
190
|
+
if (/^[0-9a-fA-F]{6}$/.test(hex))
|
|
191
|
+
return { rgb: hex.toLowerCase(), alpha: "ff" };
|
|
192
|
+
if (/^[0-9a-fA-F]{8}$/.test(hex)) {
|
|
193
|
+
return { rgb: hex.slice(0, 6).toLowerCase(), alpha: hex.slice(6, 8).toLowerCase() };
|
|
194
|
+
}
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
/** Compare two colours, treating `#RRGGBB` and full-alpha `#RRGGBBAA` as equal. */
|
|
198
|
+
function colorsEqual(a, b) {
|
|
199
|
+
const pa = parseHexColor(a);
|
|
200
|
+
const pb = parseHexColor(b);
|
|
201
|
+
if (!pa || !pb)
|
|
202
|
+
return a.toLowerCase() === b.toLowerCase();
|
|
203
|
+
return pa.rgb === pb.rgb && pa.alpha === pb.alpha;
|
|
204
|
+
}
|
|
94
205
|
function missing(group, name, want) {
|
|
95
206
|
return {
|
|
96
207
|
kind: "token",
|
package/dist/tokens.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@design-parity/diff",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Source-agnostic diff engine: consume a (DesignReference, CandidateRender) pair and emit a deterministic Verdict — a11y + i18n first, then token compliance, then visual diff.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
"test": "vitest run"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@design-parity/checks": "^0.1.
|
|
21
|
-
"@design-parity/core": "^0.1.
|
|
20
|
+
"@design-parity/checks": "^0.1.3",
|
|
21
|
+
"@design-parity/core": "^0.1.3",
|
|
22
22
|
"pixelmatch": "^7.1.0",
|
|
23
23
|
"pngjs": "^7.0.0"
|
|
24
24
|
},
|