@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.
Files changed (136) hide show
  1. package/README.md +18 -0
  2. package/SKILL.md +1 -1
  3. package/dist/cli-arguments.d.ts +3 -1
  4. package/dist/cli-arguments.d.ts.map +1 -1
  5. package/dist/cli-arguments.js +19 -2
  6. package/dist/cli-arguments.js.map +1 -1
  7. package/dist/cli-convert-command.d.ts +3 -1
  8. package/dist/cli-convert-command.d.ts.map +1 -1
  9. package/dist/cli-convert-command.js +9 -7
  10. package/dist/cli-convert-command.js.map +1 -1
  11. package/dist/cli-help/design.d.ts +10 -0
  12. package/dist/cli-help/design.d.ts.map +1 -1
  13. package/dist/cli-help/design.js +25 -0
  14. package/dist/cli-help/design.js.map +1 -1
  15. package/dist/cli-help/index.d.ts +10 -0
  16. package/dist/cli-help/index.d.ts.map +1 -1
  17. package/dist/cli-improve-command.d.ts +5 -0
  18. package/dist/cli-improve-command.d.ts.map +1 -0
  19. package/dist/cli-improve-command.js +213 -0
  20. package/dist/cli-improve-command.js.map +1 -0
  21. package/dist/cli-run.d.ts.map +1 -1
  22. package/dist/cli-run.js +8 -0
  23. package/dist/cli-run.js.map +1 -1
  24. package/dist/cli-usage.d.ts.map +1 -1
  25. package/dist/cli-usage.js +2 -0
  26. package/dist/cli-usage.js.map +1 -1
  27. package/dist/improve-added-specs.d.ts +32 -0
  28. package/dist/improve-added-specs.d.ts.map +1 -0
  29. package/dist/improve-added-specs.js +162 -0
  30. package/dist/improve-added-specs.js.map +1 -0
  31. package/dist/improve-concept.d.ts +10 -0
  32. package/dist/improve-concept.d.ts.map +1 -0
  33. package/dist/improve-concept.js +45 -0
  34. package/dist/improve-concept.js.map +1 -0
  35. package/dist/improve-conversion-stage.d.ts +28 -0
  36. package/dist/improve-conversion-stage.d.ts.map +1 -0
  37. package/dist/improve-conversion-stage.js +214 -0
  38. package/dist/improve-conversion-stage.js.map +1 -0
  39. package/dist/improve-convert-resilience.d.ts +23 -0
  40. package/dist/improve-convert-resilience.d.ts.map +1 -0
  41. package/dist/improve-convert-resilience.js +102 -0
  42. package/dist/improve-convert-resilience.js.map +1 -0
  43. package/dist/improve-delivery-stages.d.ts +10 -0
  44. package/dist/improve-delivery-stages.d.ts.map +1 -0
  45. package/dist/improve-delivery-stages.js +160 -0
  46. package/dist/improve-delivery-stages.js.map +1 -0
  47. package/dist/improve-dom-anchor.d.ts +18 -0
  48. package/dist/improve-dom-anchor.d.ts.map +1 -0
  49. package/dist/improve-dom-anchor.js +120 -0
  50. package/dist/improve-dom-anchor.js.map +1 -0
  51. package/dist/improve-dom-diff.d.ts +33 -0
  52. package/dist/improve-dom-diff.d.ts.map +1 -0
  53. package/dist/improve-dom-diff.js +129 -0
  54. package/dist/improve-dom-diff.js.map +1 -0
  55. package/dist/improve-dom-extract.d.ts +15 -0
  56. package/dist/improve-dom-extract.d.ts.map +1 -0
  57. package/dist/improve-dom-extract.js +343 -0
  58. package/dist/improve-dom-extract.js.map +1 -0
  59. package/dist/improve-dom-gate.d.ts +12 -0
  60. package/dist/improve-dom-gate.d.ts.map +1 -0
  61. package/dist/improve-dom-gate.js +34 -0
  62. package/dist/improve-dom-gate.js.map +1 -0
  63. package/dist/improve-dom-neighbour.d.ts +16 -0
  64. package/dist/improve-dom-neighbour.d.ts.map +1 -0
  65. package/dist/improve-dom-neighbour.js +95 -0
  66. package/dist/improve-dom-neighbour.js.map +1 -0
  67. package/dist/improve-dom-scale.d.ts +8 -0
  68. package/dist/improve-dom-scale.d.ts.map +1 -0
  69. package/dist/improve-dom-scale.js +63 -0
  70. package/dist/improve-dom-scale.js.map +1 -0
  71. package/dist/improve-generation-stages.d.ts +23 -0
  72. package/dist/improve-generation-stages.d.ts.map +1 -0
  73. package/dist/improve-generation-stages.js +166 -0
  74. package/dist/improve-generation-stages.js.map +1 -0
  75. package/dist/improve-kit-readme.d.ts +3 -0
  76. package/dist/improve-kit-readme.d.ts.map +1 -0
  77. package/dist/improve-kit-readme.js +32 -0
  78. package/dist/improve-kit-readme.js.map +1 -0
  79. package/dist/improve-layerdoc-diff.d.ts +27 -0
  80. package/dist/improve-layerdoc-diff.d.ts.map +1 -0
  81. package/dist/improve-layerdoc-diff.js +311 -0
  82. package/dist/improve-layerdoc-diff.js.map +1 -0
  83. package/dist/improve-layerdoc-types.d.ts +109 -0
  84. package/dist/improve-layerdoc-types.d.ts.map +1 -0
  85. package/dist/improve-layerdoc-types.js +2 -0
  86. package/dist/improve-layerdoc-types.js.map +1 -0
  87. package/dist/improve-options.d.ts +44 -0
  88. package/dist/improve-options.d.ts.map +1 -0
  89. package/dist/improve-options.js +163 -0
  90. package/dist/improve-options.js.map +1 -0
  91. package/dist/improve-plan-annotator.d.ts +14 -0
  92. package/dist/improve-plan-annotator.d.ts.map +1 -0
  93. package/dist/improve-plan-annotator.js +80 -0
  94. package/dist/improve-plan-annotator.js.map +1 -0
  95. package/dist/improve-plan-render.d.ts +23 -0
  96. package/dist/improve-plan-render.d.ts.map +1 -0
  97. package/dist/improve-plan-render.js +81 -0
  98. package/dist/improve-plan-render.js.map +1 -0
  99. package/dist/improve-pricing-plan.d.ts +20 -0
  100. package/dist/improve-pricing-plan.d.ts.map +1 -0
  101. package/dist/improve-pricing-plan.js +72 -0
  102. package/dist/improve-pricing-plan.js.map +1 -0
  103. package/dist/improve-source-hints.d.ts +31 -0
  104. package/dist/improve-source-hints.d.ts.map +1 -0
  105. package/dist/improve-source-hints.js +131 -0
  106. package/dist/improve-source-hints.js.map +1 -0
  107. package/dist/improve-stage-runners.d.ts +7 -0
  108. package/dist/improve-stage-runners.d.ts.map +1 -0
  109. package/dist/improve-stage-runners.js +6 -0
  110. package/dist/improve-stage-runners.js.map +1 -0
  111. package/dist/improve-stage-shared.d.ts +27 -0
  112. package/dist/improve-stage-shared.d.ts.map +1 -0
  113. package/dist/improve-stage-shared.js +34 -0
  114. package/dist/improve-stage-shared.js.map +1 -0
  115. package/dist/improve-token-patch.d.ts +19 -0
  116. package/dist/improve-token-patch.d.ts.map +1 -0
  117. package/dist/improve-token-patch.js +118 -0
  118. package/dist/improve-token-patch.js.map +1 -0
  119. package/dist/improve-workspace.d.ts +113 -0
  120. package/dist/improve-workspace.d.ts.map +1 -0
  121. package/dist/improve-workspace.js +122 -0
  122. package/dist/improve-workspace.js.map +1 -0
  123. package/dist/legacy-skill-catalog.d.ts.map +1 -1
  124. package/dist/legacy-skill-catalog.js +8 -0
  125. package/dist/legacy-skill-catalog.js.map +1 -1
  126. package/dist/redesign-capture.d.ts +25 -0
  127. package/dist/redesign-capture.d.ts.map +1 -1
  128. package/dist/redesign-capture.js +50 -1
  129. package/dist/redesign-capture.js.map +1 -1
  130. package/dist/run-journal-commands.d.ts.map +1 -1
  131. package/dist/run-journal-commands.js +9 -0
  132. package/dist/run-journal-commands.js.map +1 -1
  133. package/open-design.json +2 -2
  134. package/package.json +1 -1
  135. package/skills/12ui-design/SKILL.md +11 -1
  136. 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":"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"}
@@ -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"}