@12ui/design 0.2.53 → 0.2.55
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 +18 -0
- package/SKILL.md +1 -1
- package/dist/cli-arguments.d.ts +3 -1
- package/dist/cli-arguments.d.ts.map +1 -1
- package/dist/cli-arguments.js +19 -2
- package/dist/cli-arguments.js.map +1 -1
- package/dist/cli-convert-command.d.ts +3 -1
- package/dist/cli-convert-command.d.ts.map +1 -1
- package/dist/cli-convert-command.js +9 -7
- package/dist/cli-convert-command.js.map +1 -1
- package/dist/cli-help/design.d.ts +10 -0
- package/dist/cli-help/design.d.ts.map +1 -1
- package/dist/cli-help/design.js +25 -0
- package/dist/cli-help/design.js.map +1 -1
- package/dist/cli-help/index.d.ts +10 -0
- package/dist/cli-help/index.d.ts.map +1 -1
- package/dist/cli-improve-command.d.ts +5 -0
- package/dist/cli-improve-command.d.ts.map +1 -0
- package/dist/cli-improve-command.js +213 -0
- package/dist/cli-improve-command.js.map +1 -0
- package/dist/cli-run.d.ts.map +1 -1
- package/dist/cli-run.js +8 -0
- package/dist/cli-run.js.map +1 -1
- package/dist/cli-usage.d.ts.map +1 -1
- package/dist/cli-usage.js +2 -0
- package/dist/cli-usage.js.map +1 -1
- package/dist/improve-added-specs.d.ts +32 -0
- package/dist/improve-added-specs.d.ts.map +1 -0
- package/dist/improve-added-specs.js +162 -0
- package/dist/improve-added-specs.js.map +1 -0
- package/dist/improve-concept.d.ts +10 -0
- package/dist/improve-concept.d.ts.map +1 -0
- package/dist/improve-concept.js +45 -0
- package/dist/improve-concept.js.map +1 -0
- package/dist/improve-conversion-stage.d.ts +28 -0
- package/dist/improve-conversion-stage.d.ts.map +1 -0
- package/dist/improve-conversion-stage.js +214 -0
- package/dist/improve-conversion-stage.js.map +1 -0
- package/dist/improve-convert-resilience.d.ts +23 -0
- package/dist/improve-convert-resilience.d.ts.map +1 -0
- package/dist/improve-convert-resilience.js +102 -0
- package/dist/improve-convert-resilience.js.map +1 -0
- package/dist/improve-delivery-stages.d.ts +10 -0
- package/dist/improve-delivery-stages.d.ts.map +1 -0
- package/dist/improve-delivery-stages.js +160 -0
- package/dist/improve-delivery-stages.js.map +1 -0
- package/dist/improve-dom-anchor.d.ts +18 -0
- package/dist/improve-dom-anchor.d.ts.map +1 -0
- package/dist/improve-dom-anchor.js +120 -0
- package/dist/improve-dom-anchor.js.map +1 -0
- package/dist/improve-dom-diff.d.ts +33 -0
- package/dist/improve-dom-diff.d.ts.map +1 -0
- package/dist/improve-dom-diff.js +129 -0
- package/dist/improve-dom-diff.js.map +1 -0
- package/dist/improve-dom-extract.d.ts +15 -0
- package/dist/improve-dom-extract.d.ts.map +1 -0
- package/dist/improve-dom-extract.js +343 -0
- package/dist/improve-dom-extract.js.map +1 -0
- package/dist/improve-dom-gate.d.ts +12 -0
- package/dist/improve-dom-gate.d.ts.map +1 -0
- package/dist/improve-dom-gate.js +34 -0
- package/dist/improve-dom-gate.js.map +1 -0
- package/dist/improve-dom-neighbour.d.ts +16 -0
- package/dist/improve-dom-neighbour.d.ts.map +1 -0
- package/dist/improve-dom-neighbour.js +95 -0
- package/dist/improve-dom-neighbour.js.map +1 -0
- package/dist/improve-dom-scale.d.ts +8 -0
- package/dist/improve-dom-scale.d.ts.map +1 -0
- package/dist/improve-dom-scale.js +63 -0
- package/dist/improve-dom-scale.js.map +1 -0
- package/dist/improve-generation-stages.d.ts +23 -0
- package/dist/improve-generation-stages.d.ts.map +1 -0
- package/dist/improve-generation-stages.js +166 -0
- package/dist/improve-generation-stages.js.map +1 -0
- package/dist/improve-kit-readme.d.ts +3 -0
- package/dist/improve-kit-readme.d.ts.map +1 -0
- package/dist/improve-kit-readme.js +32 -0
- package/dist/improve-kit-readme.js.map +1 -0
- package/dist/improve-layerdoc-diff.d.ts +27 -0
- package/dist/improve-layerdoc-diff.d.ts.map +1 -0
- package/dist/improve-layerdoc-diff.js +311 -0
- package/dist/improve-layerdoc-diff.js.map +1 -0
- package/dist/improve-layerdoc-types.d.ts +109 -0
- package/dist/improve-layerdoc-types.d.ts.map +1 -0
- package/dist/improve-layerdoc-types.js +2 -0
- package/dist/improve-layerdoc-types.js.map +1 -0
- package/dist/improve-options.d.ts +44 -0
- package/dist/improve-options.d.ts.map +1 -0
- package/dist/improve-options.js +163 -0
- package/dist/improve-options.js.map +1 -0
- package/dist/improve-plan-annotator.d.ts +14 -0
- package/dist/improve-plan-annotator.d.ts.map +1 -0
- package/dist/improve-plan-annotator.js +80 -0
- package/dist/improve-plan-annotator.js.map +1 -0
- package/dist/improve-plan-render.d.ts +23 -0
- package/dist/improve-plan-render.d.ts.map +1 -0
- package/dist/improve-plan-render.js +81 -0
- package/dist/improve-plan-render.js.map +1 -0
- package/dist/improve-pricing-plan.d.ts +20 -0
- package/dist/improve-pricing-plan.d.ts.map +1 -0
- package/dist/improve-pricing-plan.js +72 -0
- package/dist/improve-pricing-plan.js.map +1 -0
- package/dist/improve-source-hints.d.ts +31 -0
- package/dist/improve-source-hints.d.ts.map +1 -0
- package/dist/improve-source-hints.js +131 -0
- package/dist/improve-source-hints.js.map +1 -0
- package/dist/improve-stage-runners.d.ts +7 -0
- package/dist/improve-stage-runners.d.ts.map +1 -0
- package/dist/improve-stage-runners.js +6 -0
- package/dist/improve-stage-runners.js.map +1 -0
- package/dist/improve-stage-shared.d.ts +27 -0
- package/dist/improve-stage-shared.d.ts.map +1 -0
- package/dist/improve-stage-shared.js +34 -0
- package/dist/improve-stage-shared.js.map +1 -0
- package/dist/improve-token-patch.d.ts +19 -0
- package/dist/improve-token-patch.d.ts.map +1 -0
- package/dist/improve-token-patch.js +118 -0
- package/dist/improve-token-patch.js.map +1 -0
- package/dist/improve-workspace.d.ts +113 -0
- package/dist/improve-workspace.d.ts.map +1 -0
- package/dist/improve-workspace.js +122 -0
- package/dist/improve-workspace.js.map +1 -0
- package/dist/legacy-skill-catalog.d.ts.map +1 -1
- package/dist/legacy-skill-catalog.js +8 -0
- package/dist/legacy-skill-catalog.js.map +1 -1
- package/dist/redesign-capture.d.ts +25 -0
- package/dist/redesign-capture.d.ts.map +1 -1
- package/dist/redesign-capture.js +50 -1
- package/dist/redesign-capture.js.map +1 -1
- package/dist/run-journal-commands.d.ts.map +1 -1
- package/dist/run-journal-commands.js +9 -0
- package/dist/run-journal-commands.js.map +1 -1
- package/open-design.json +2 -2
- package/package.json +1 -1
- package/skills/12ui-design/SKILL.md +11 -1
- package/skills/12ui-design/improve.md +74 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { boxIou } from './improve-layerdoc-diff.js';
|
|
2
|
+
import { toCanvasFrame } from './improve-dom-scale.js';
|
|
3
|
+
export const selectorLabel = (leaf) => {
|
|
4
|
+
const dom = leaf?.dom;
|
|
5
|
+
if (!dom)
|
|
6
|
+
return '(unanchored)';
|
|
7
|
+
if (dom.selectorKind === 'path' && dom.classSelector) {
|
|
8
|
+
return `\`${dom.classSelector}\`[${dom.classSelectorIndex}/${dom.classSelectorMatches}] (${dom.path})`;
|
|
9
|
+
}
|
|
10
|
+
if (dom.selectorKind === 'path')
|
|
11
|
+
return `\`${dom.path}\``;
|
|
12
|
+
return `\`${dom.selector}\` (${dom.path ?? dom.selector})`;
|
|
13
|
+
};
|
|
14
|
+
const area = (box) => box ? box[2] * box[3] : 0;
|
|
15
|
+
export const containment = (inner, outer) => {
|
|
16
|
+
if (!inner || !outer)
|
|
17
|
+
return 0;
|
|
18
|
+
const width = Math.max(0, Math.min(inner[0] + inner[2], outer[0] + outer[2]) - Math.max(inner[0], outer[0]));
|
|
19
|
+
const height = Math.max(0, Math.min(inner[1] + inner[3], outer[1] + outer[3]) - Math.max(inner[1], outer[1]));
|
|
20
|
+
return area(inner) > 0 ? width * height / area(inner) : 0;
|
|
21
|
+
};
|
|
22
|
+
export const confidentMatches = (matched, before, after, minimumIou = 0.3) => {
|
|
23
|
+
const result = new Set();
|
|
24
|
+
const normalized = (value) => typeof value === 'string'
|
|
25
|
+
? value.replace(/\s+/gu, ' ').trim().toLowerCase()
|
|
26
|
+
: '';
|
|
27
|
+
for (const entry of matched) {
|
|
28
|
+
const left = before[entry.beforeIndex];
|
|
29
|
+
const right = after[entry.afterIndex];
|
|
30
|
+
if (!left || !right)
|
|
31
|
+
continue;
|
|
32
|
+
const leftContent = normalized(left.content);
|
|
33
|
+
if (leftContent && leftContent === normalized(right.content))
|
|
34
|
+
result.add(entry.beforeIndex);
|
|
35
|
+
else if (left.box && right.box && boxIou(left.box, right.box) >= minimumIou)
|
|
36
|
+
result.add(entry.beforeIndex);
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
export const insertionAnchor = (box, before) => {
|
|
41
|
+
let container = -1;
|
|
42
|
+
let containerArea = Number.POSITIVE_INFINITY;
|
|
43
|
+
before.forEach((leaf, index) => {
|
|
44
|
+
if (leaf.kind === 'background' || containment(box, leaf.box) < 0.75)
|
|
45
|
+
return;
|
|
46
|
+
const candidateArea = area(leaf.box);
|
|
47
|
+
if (candidateArea > 0 && candidateArea < containerArea) {
|
|
48
|
+
container = index;
|
|
49
|
+
containerArea = candidateArea;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
if (container < 0)
|
|
53
|
+
return { container };
|
|
54
|
+
const siblings = before.map((_leaf, index) => index)
|
|
55
|
+
.filter((index) => before[index]?.dom?.parentIndex === container);
|
|
56
|
+
const above = siblings.filter((index) => {
|
|
57
|
+
const sibling = before[index]?.box;
|
|
58
|
+
return sibling && sibling[1] + sibling[3] <= box[1] + 0.002;
|
|
59
|
+
}).sort((left, right) => {
|
|
60
|
+
const leftBox = before[left].box;
|
|
61
|
+
const rightBox = before[right].box;
|
|
62
|
+
return (rightBox[1] + rightBox[3]) - (leftBox[1] + leftBox[3]);
|
|
63
|
+
})[0];
|
|
64
|
+
const below = siblings.filter((index) => (before[index]?.box?.[1] ?? -1) >= box[1] + box[3] - 0.002)
|
|
65
|
+
.sort((left, right) => before[left].box[1] - before[right].box[1])[0];
|
|
66
|
+
return {
|
|
67
|
+
container,
|
|
68
|
+
...(above === undefined ? {} : { after: above }),
|
|
69
|
+
...(below === undefined ? {} : { before: below }),
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
export const impliedPaddingDeltas = (matched, before, after, canvas, confident) => {
|
|
73
|
+
const partner = new Map(matched
|
|
74
|
+
.filter((entry) => confident.has(entry.beforeIndex))
|
|
75
|
+
.map((entry) => [entry.beforeIndex, entry.afterIndex]));
|
|
76
|
+
const children = new Map();
|
|
77
|
+
before.forEach((leaf, index) => {
|
|
78
|
+
const parent = leaf.dom?.parentIndex;
|
|
79
|
+
if (parent === undefined || parent < 0)
|
|
80
|
+
return;
|
|
81
|
+
children.set(parent, [...(children.get(parent) ?? []), index]);
|
|
82
|
+
});
|
|
83
|
+
const output = new Map();
|
|
84
|
+
for (const [containerIndex, childIndices] of children) {
|
|
85
|
+
const afterContainerIndex = partner.get(containerIndex);
|
|
86
|
+
const leftBox = before[containerIndex]?.box;
|
|
87
|
+
const rightBox = afterContainerIndex === undefined ? undefined : after[afterContainerIndex]?.box;
|
|
88
|
+
if (!leftBox || !rightBox)
|
|
89
|
+
continue;
|
|
90
|
+
const pairs = childIndices.flatMap((childIndex) => {
|
|
91
|
+
const afterIndex = partner.get(childIndex);
|
|
92
|
+
const left = before[childIndex]?.box;
|
|
93
|
+
const right = afterIndex === undefined ? undefined : after[afterIndex]?.box;
|
|
94
|
+
return left && right && containment(right, rightBox) >= 0.7 ? [[left, right]] : [];
|
|
95
|
+
});
|
|
96
|
+
if (pairs.length < 2)
|
|
97
|
+
continue;
|
|
98
|
+
const specs = [
|
|
99
|
+
{ field: 'style.paddingLeft', scale: canvas.width, inset: (box, parent) => box[0] - parent[0] },
|
|
100
|
+
{ field: 'style.paddingTop', scale: canvas.height, inset: (box, parent) => box[1] - parent[1] },
|
|
101
|
+
];
|
|
102
|
+
const deltas = specs.flatMap((spec) => {
|
|
103
|
+
const prior = Math.min(...pairs.map(([box]) => spec.inset(box, leftBox))) * spec.scale;
|
|
104
|
+
const target = Math.min(...pairs.map(([, box]) => spec.inset(box, rightBox))) * spec.scale;
|
|
105
|
+
const drift = target - prior;
|
|
106
|
+
return Math.abs(drift) >= 3 && target >= 0 ? [{
|
|
107
|
+
field: spec.field,
|
|
108
|
+
before: Math.round(prior * 10) / 10,
|
|
109
|
+
after: Math.round(target * 10) / 10,
|
|
110
|
+
driftPx: Math.round(drift * 10) / 10,
|
|
111
|
+
basis: `implied from ${pairs.length} matched children`,
|
|
112
|
+
}] : [];
|
|
113
|
+
});
|
|
114
|
+
if (deltas.length > 0)
|
|
115
|
+
output.set(containerIndex, deltas);
|
|
116
|
+
}
|
|
117
|
+
return output;
|
|
118
|
+
};
|
|
119
|
+
export const domPx = toCanvasFrame;
|
|
120
|
+
//# sourceMappingURL=improve-dom-anchor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-dom-anchor.js","sourceRoot":"","sources":["../src/improve-dom-anchor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { ImproveGate, LayerDiffResult, LayerLeaf } from './improve-layerdoc-types.js';
|
|
2
|
+
export type ImproveDomDiff = {
|
|
3
|
+
result: LayerDiffResult;
|
|
4
|
+
beforeLeaves: LayerLeaf[];
|
|
5
|
+
targetLeaves: LayerLeaf[];
|
|
6
|
+
beforeCanvas: {
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
};
|
|
10
|
+
targetCanvas: {
|
|
11
|
+
width: number;
|
|
12
|
+
height: number;
|
|
13
|
+
};
|
|
14
|
+
lengthScale: number;
|
|
15
|
+
domCoverage: number;
|
|
16
|
+
designCoverage: number;
|
|
17
|
+
gate: ImproveGate;
|
|
18
|
+
markdown: string;
|
|
19
|
+
};
|
|
20
|
+
export declare const computeImproveDomDiff: (args: {
|
|
21
|
+
beforeDoc: unknown;
|
|
22
|
+
targetDoc: unknown;
|
|
23
|
+
gatePct?: number;
|
|
24
|
+
}) => ImproveDomDiff;
|
|
25
|
+
export declare const writeImproveDomDiff: (args: {
|
|
26
|
+
beforePath: string;
|
|
27
|
+
targetPath: string;
|
|
28
|
+
outDir: string;
|
|
29
|
+
gatePct?: number;
|
|
30
|
+
}) => Promise<ImproveDomDiff & {
|
|
31
|
+
artifacts: string[];
|
|
32
|
+
}>;
|
|
33
|
+
//# sourceMappingURL=improve-dom-diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-dom-diff.d.ts","sourceRoot":"","sources":["../src/improve-dom-diff.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE3F,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,eAAe,CAAC;IACxB,YAAY,EAAE,SAAS,EAAE,CAAC;IAC1B,YAAY,EAAE,SAAS,EAAE,CAAC;IAC1B,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,MAAM;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,KAAG,cA2EH,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAU,MAAM;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,KAAG,OAAO,CAAC,cAAc,GAAG;IAAE,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CA2CnD,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { mkdir, readFile, rm, writeFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { canvasOfDoc, computeLayerDeltas, diffLayerDocs, flattenLayerDoc, } from './improve-layerdoc-diff.js';
|
|
4
|
+
import { confidentMatches, impliedPaddingDeltas } from './improve-dom-anchor.js';
|
|
5
|
+
import { evaluateImproveGate, renderImproveGate } from './improve-dom-gate.js';
|
|
6
|
+
import { repairByNeighbourOffset } from './improve-dom-neighbour.js';
|
|
7
|
+
import { normalizeLayerDoc } from './improve-dom-scale.js';
|
|
8
|
+
import { renderDomChanges } from './improve-plan-render.js';
|
|
9
|
+
export const computeImproveDomDiff = (args) => {
|
|
10
|
+
const beforeCanvas = canvasOfDoc(args.beforeDoc);
|
|
11
|
+
const targetCanvas = canvasOfDoc(args.targetDoc);
|
|
12
|
+
const viewport = args.beforeDoc && typeof args.beforeDoc === 'object' && 'source' in args.beforeDoc
|
|
13
|
+
&& args.beforeDoc.source && typeof args.beforeDoc.source === 'object' && 'viewport' in args.beforeDoc.source
|
|
14
|
+
&& args.beforeDoc.source.viewport && typeof args.beforeDoc.source.viewport === 'object'
|
|
15
|
+
? args.beforeDoc.source.viewport
|
|
16
|
+
: undefined;
|
|
17
|
+
const anchoredHeight = typeof viewport?.height === 'number' && viewport.height !== beforeCanvas.height
|
|
18
|
+
? viewport.height
|
|
19
|
+
: 0;
|
|
20
|
+
const lengthScale = beforeCanvas.width / targetCanvas.width;
|
|
21
|
+
const normalizedBefore = normalizeLayerDoc(args.beforeDoc, 1, anchoredHeight);
|
|
22
|
+
const normalizedTarget = normalizeLayerDoc(args.targetDoc, lengthScale);
|
|
23
|
+
const beforeLeaves = flattenLayerDoc(normalizedBefore);
|
|
24
|
+
const targetLeaves = flattenLayerDoc(normalizedTarget);
|
|
25
|
+
const result = diffLayerDocs(normalizedBefore, normalizedTarget, {
|
|
26
|
+
strategy: 'fallback',
|
|
27
|
+
contentKeyMode: 'family',
|
|
28
|
+
});
|
|
29
|
+
const firstConfidence = confidentMatches(result.matched, beforeLeaves, targetLeaves);
|
|
30
|
+
const neighbour = repairByNeighbourOffset({
|
|
31
|
+
result,
|
|
32
|
+
before: beforeLeaves,
|
|
33
|
+
after: targetLeaves,
|
|
34
|
+
confident: firstConfidence,
|
|
35
|
+
canvas: beforeCanvas,
|
|
36
|
+
});
|
|
37
|
+
for (const entry of result.matched.filter((candidate) => candidate.matchStrategy === 'neighbour')) {
|
|
38
|
+
entry.deltas = computeLayerDeltas(beforeLeaves[entry.beforeIndex], targetLeaves[entry.afterIndex]);
|
|
39
|
+
entry.changed = entry.deltas.length > 0;
|
|
40
|
+
}
|
|
41
|
+
const confident = confidentMatches(result.matched, beforeLeaves, targetLeaves);
|
|
42
|
+
result.matched.filter((entry) => entry.matchStrategy === 'neighbour')
|
|
43
|
+
.forEach((entry) => confident.add(entry.beforeIndex));
|
|
44
|
+
const padding = impliedPaddingDeltas(result.matched, beforeLeaves, targetLeaves, beforeCanvas, confident);
|
|
45
|
+
result.matched.forEach((entry) => {
|
|
46
|
+
entry.selector = beforeLeaves[entry.beforeIndex]?.dom?.selector;
|
|
47
|
+
entry.confident = confident.has(entry.beforeIndex);
|
|
48
|
+
entry.impliedPadding = padding.get(entry.beforeIndex);
|
|
49
|
+
});
|
|
50
|
+
result.meta = {
|
|
51
|
+
...result.meta,
|
|
52
|
+
matchedCount: result.matched.length,
|
|
53
|
+
plausibleMatchedCount: confident.size,
|
|
54
|
+
changedCount: result.matched.filter((entry) => entry.changed).length,
|
|
55
|
+
unchangedCount: result.matched.filter((entry) => !entry.changed).length,
|
|
56
|
+
addedCount: result.added.length,
|
|
57
|
+
removedCount: result.removed.length,
|
|
58
|
+
matchCoverage: confident.size / Math.max(beforeLeaves.length, targetLeaves.length, 1),
|
|
59
|
+
neighbourRepaired: neighbour.repaired,
|
|
60
|
+
neighbourReleased: neighbour.released,
|
|
61
|
+
};
|
|
62
|
+
const domCoverage = confident.size / Math.max(beforeLeaves.length, 1);
|
|
63
|
+
const designCoverage = confident.size / Math.max(targetLeaves.length, 1);
|
|
64
|
+
const gate = evaluateImproveGate(domCoverage, args.gatePct);
|
|
65
|
+
return {
|
|
66
|
+
result,
|
|
67
|
+
beforeLeaves,
|
|
68
|
+
targetLeaves,
|
|
69
|
+
beforeCanvas,
|
|
70
|
+
targetCanvas,
|
|
71
|
+
lengthScale,
|
|
72
|
+
domCoverage,
|
|
73
|
+
designCoverage,
|
|
74
|
+
gate,
|
|
75
|
+
markdown: renderDomChanges({
|
|
76
|
+
result,
|
|
77
|
+
beforeLeaves,
|
|
78
|
+
beforePath: 'current.domdoc.json',
|
|
79
|
+
targetPath: 'target/winner.layerdoc.json',
|
|
80
|
+
domCoverage,
|
|
81
|
+
designCoverage,
|
|
82
|
+
}),
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
export const writeImproveDomDiff = async (args) => {
|
|
86
|
+
const [beforeDoc, targetDoc] = await Promise.all([
|
|
87
|
+
readFile(args.beforePath, 'utf8').then(JSON.parse),
|
|
88
|
+
readFile(args.targetPath, 'utf8').then(JSON.parse),
|
|
89
|
+
]);
|
|
90
|
+
const computed = computeImproveDomDiff({
|
|
91
|
+
beforeDoc,
|
|
92
|
+
targetDoc,
|
|
93
|
+
...(args.gatePct === undefined ? {} : { gatePct: args.gatePct }),
|
|
94
|
+
});
|
|
95
|
+
await mkdir(args.outDir, { recursive: true });
|
|
96
|
+
const gatePath = path.join(args.outDir, 'GATE.md');
|
|
97
|
+
const diffPath = path.join(args.outDir, 'diff.json');
|
|
98
|
+
const changesPath = path.join(args.outDir, 'changes.md');
|
|
99
|
+
if (!computed.gate.passed) {
|
|
100
|
+
await Promise.all([
|
|
101
|
+
rm(diffPath, { force: true }),
|
|
102
|
+
rm(changesPath, { force: true }),
|
|
103
|
+
rm(path.join(args.outDir, 'plan-annotated.md'), { force: true }),
|
|
104
|
+
rm(path.join(args.outDir, 'token-patch.css'), { force: true }),
|
|
105
|
+
]);
|
|
106
|
+
await writeFile(gatePath, renderImproveGate({
|
|
107
|
+
gate: computed.gate,
|
|
108
|
+
result: computed.result,
|
|
109
|
+
beforePath: args.beforePath,
|
|
110
|
+
targetPath: args.targetPath,
|
|
111
|
+
designCoverage: computed.designCoverage,
|
|
112
|
+
}), 'utf8');
|
|
113
|
+
return { ...computed, artifacts: [gatePath] };
|
|
114
|
+
}
|
|
115
|
+
await rm(gatePath, { force: true });
|
|
116
|
+
await writeFile(diffPath, `${JSON.stringify({
|
|
117
|
+
generatedAt: new Date().toISOString(),
|
|
118
|
+
before: args.beforePath,
|
|
119
|
+
after: args.targetPath,
|
|
120
|
+
frames: { lengthScale: computed.lengthScale },
|
|
121
|
+
gate: computed.gate,
|
|
122
|
+
domCoverage: computed.domCoverage,
|
|
123
|
+
designCoverage: computed.designCoverage,
|
|
124
|
+
...computed.result,
|
|
125
|
+
}, null, 2)}\n`, 'utf8');
|
|
126
|
+
await writeFile(changesPath, computed.markdown, 'utf8');
|
|
127
|
+
return { ...computed, artifacts: [diffPath, changesPath] };
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=improve-dom-diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-dom-diff.js","sourceRoot":"","sources":["../src/improve-dom-diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,eAAe,GAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAgB5D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAIrC,EAAkB,EAAE;IACnB,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS;WAC9F,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ,IAAI,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM;WACzG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ;QACvF,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAgC;QACxD,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,cAAc,GAAG,OAAO,QAAQ,EAAE,MAAM,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM;QACpG,CAAC,CAAC,QAAQ,CAAC,MAAM;QACjB,CAAC,CAAC,CAAC,CAAC;IACN,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;IAC5D,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;IACvD,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,aAAa,CAAC,gBAAgB,EAAE,gBAAgB,EAAE;QAC/D,QAAQ,EAAE,UAAU;QACpB,cAAc,EAAE,QAAQ;KACzB,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IACrF,MAAM,SAAS,GAAG,uBAAuB,CAAC;QACxC,MAAM;QACN,MAAM,EAAE,YAAY;QACpB,KAAK,EAAE,YAAY;QACnB,SAAS,EAAE,eAAe;QAC1B,MAAM,EAAE,YAAY;KACrB,CAAC,CAAC;IACH,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,aAAa,KAAK,WAAW,CAAC,EAAE,CAAC;QAClG,KAAK,CAAC,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAE,EAAE,YAAY,CAAC,KAAK,CAAC,UAAU,CAAE,CAAC,CAAC;QACrG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IAC/E,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,KAAK,WAAW,CAAC;SAClE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IAC1G,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/B,KAAK,CAAC,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC;QAChE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACnD,KAAK,CAAC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,GAAG;QACZ,GAAG,MAAM,CAAC,IAAI;QACd,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;QACnC,qBAAqB,EAAE,SAAS,CAAC,IAAI;QACrC,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM;QACpE,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM;QACvE,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM;QAC/B,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;QACnC,aAAa,EAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QACrF,iBAAiB,EAAE,SAAS,CAAC,QAAQ;QACrC,iBAAiB,EAAE,SAAS,CAAC,QAAQ;KACtC,CAAC;IACF,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACtE,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5D,OAAO;QACL,MAAM;QACN,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,WAAW;QACX,WAAW;QACX,cAAc;QACd,IAAI;QACJ,QAAQ,EAAE,gBAAgB,CAAC;YACzB,MAAM;YACN,YAAY;YACZ,UAAU,EAAE,qBAAqB;YACjC,UAAU,EAAE,6BAA6B;YACzC,WAAW;YACX,cAAc;SACf,CAAC;KACH,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,IAKzC,EAAqD,EAAE;IACtD,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAClD,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;KACnD,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,qBAAqB,CAAC;QACrC,SAAS;QACT,SAAS;QACT,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;KACjE,CAAC,CAAC;IACH,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC7B,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAChC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAChE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SAC/D,CAAC,CAAC;QACH,MAAM,SAAS,CAAC,QAAQ,EAAE,iBAAiB,CAAC;YAC1C,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,cAAc,EAAE,QAAQ,CAAC,cAAc;SACxC,CAAC,EAAE,MAAM,CAAC,CAAC;QACZ,OAAO,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;IAChD,CAAC;IACD,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1C,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,MAAM,EAAE,IAAI,CAAC,UAAU;QACvB,KAAK,EAAE,IAAI,CAAC,UAAU;QACtB,MAAM,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE;QAC7C,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,GAAG,QAAQ,CAAC,MAAM;KACnB,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACzB,MAAM,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACxD,OAAO,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;AAC7D,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-side DOM walker. Playwright serializes this function, so it must be
|
|
3
|
+
* self-contained. It emits a LayerDoc-v2-shaped document whose leaves carry
|
|
4
|
+
* selectors verified against the captured page. Text `box` is glyph ink;
|
|
5
|
+
* `layoutBox` preserves the element rectangle. It emits visible painted
|
|
6
|
+
* leaves only, keeps direct text beside block/control children, suppresses a
|
|
7
|
+
* surface identical to its nearest painted ancestor, records rendered rather
|
|
8
|
+
* than declared alignment/text, and gives fixed/sticky leaves the viewport
|
|
9
|
+
* frame. These are the measured pilot caveats; especially, DOM and design
|
|
10
|
+
* extraction indices never share an identity space.
|
|
11
|
+
*/
|
|
12
|
+
export declare const extractImproveDomInPage: (options: {
|
|
13
|
+
fullPage: boolean;
|
|
14
|
+
}) => unknown;
|
|
15
|
+
//# sourceMappingURL=improve-dom-extract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"improve-dom-extract.d.ts","sourceRoot":"","sources":["../src/improve-dom-extract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB,GAAI,SAAS;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,KAAG,OA2UxE,CAAC"}
|