@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,311 @@
1
+ /**
2
+ * LayerDoc matching ported from the measured improve pilot.
3
+ *
4
+ * Caveat: extractionIndex is meaningful only inside one conversion lineage.
5
+ * Independent conversions usually reuse the same numeric range, so raw key
6
+ * overlap is actively misleading. Identity coverage is therefore weighted by
7
+ * pair plausibility and falls back to content then spatial matching below 50%.
8
+ */
9
+ export const IDENTITY_COVERAGE_MIN = 0.5;
10
+ export const SPATIAL_IOU_MIN = 0.1;
11
+ const PLAUSIBLE_IOU_MIN = 0.3;
12
+ export const TEXT_BEARING_KINDS = new Set([
13
+ 'text', 'heading', 'button', 'badge', 'input', 'textarea', 'icon', 'link', 'label', 'logo',
14
+ ]);
15
+ const KIND_FAMILY = new Map([
16
+ ['text', 'copy'], ['heading', 'copy'], ['label', 'copy'], ['link', 'copy'],
17
+ ['badge', 'copy'], ['button', 'copy'], ['input', 'copy'], ['textarea', 'copy'],
18
+ ['logo', 'copy'], ['icon', 'icon'],
19
+ ]);
20
+ export const isRecord = (value) => (Boolean(value) && typeof value === 'object' && !Array.isArray(value));
21
+ export const flattenLayerDoc = (doc) => {
22
+ if (!isRecord(doc) || !Array.isArray(doc.layers))
23
+ return [];
24
+ const output = [];
25
+ const visit = (nodes) => {
26
+ for (const node of nodes) {
27
+ if (!isRecord(node))
28
+ continue;
29
+ if (node.kind === 'group' && Array.isArray(node.children))
30
+ visit(node.children);
31
+ else
32
+ output.push(node);
33
+ }
34
+ };
35
+ visit(doc.layers);
36
+ return output;
37
+ };
38
+ export const boxOf = (leaf) => {
39
+ const box = leaf?.box;
40
+ return Array.isArray(box) && box.length === 4
41
+ && box.every((value) => typeof value === 'number' && Number.isFinite(value))
42
+ ? box
43
+ : undefined;
44
+ };
45
+ export const concise = (value, maxLength = 120) => {
46
+ if (typeof value !== 'string')
47
+ return undefined;
48
+ const compact = value.replace(/\s+/gu, ' ').trim();
49
+ if (!compact)
50
+ return undefined;
51
+ return compact.length <= maxLength ? compact : `${compact.slice(0, maxLength - 1)}…`;
52
+ };
53
+ export const normalizeContent = (value) => (typeof value === 'string' ? value.replace(/\s+/gu, ' ').trim().toLowerCase() : '');
54
+ export const boxIou = (left, right) => {
55
+ const [leftX, leftY, leftWidth, leftHeight] = left;
56
+ const [rightX, rightY, rightWidth, rightHeight] = right;
57
+ const intersectionWidth = Math.max(0, Math.min(leftX + leftWidth, rightX + rightWidth) - Math.max(leftX, rightX));
58
+ const intersectionHeight = Math.max(0, Math.min(leftY + leftHeight, rightY + rightHeight) - Math.max(leftY, rightY));
59
+ const intersection = intersectionWidth * intersectionHeight;
60
+ const union = leftWidth * leftHeight + rightWidth * rightHeight - intersection;
61
+ return union > 0 ? intersection / union : 0;
62
+ };
63
+ export const isPlausiblePair = (before, after) => {
64
+ if (before.kind !== after.kind)
65
+ return false;
66
+ const beforeContent = normalizeContent(before.content);
67
+ const afterContent = normalizeContent(after.content);
68
+ if (beforeContent && afterContent && beforeContent === afterContent)
69
+ return true;
70
+ const beforeBox = boxOf(before);
71
+ const afterBox = boxOf(after);
72
+ if (beforeBox && afterBox && boxIou(beforeBox, afterBox) >= PLAUSIBLE_IOU_MIN)
73
+ return true;
74
+ return !beforeContent && !afterContent && !beforeBox && !afterBox;
75
+ };
76
+ const identityKey = (leaf, index) => {
77
+ if (typeof leaf.extractionIndex === 'number')
78
+ return `extraction:${leaf.extractionIndex}`;
79
+ if (typeof leaf.z === 'number')
80
+ return `z:${leaf.z}`;
81
+ return `ordinal:${index}`;
82
+ };
83
+ const matchByIdentity = (beforeLeaves, afterLeaves) => {
84
+ const before = new Map(beforeLeaves.map((leaf, index) => [identityKey(leaf, index), { leaf, index }]));
85
+ const after = new Map(afterLeaves.map((leaf, index) => [identityKey(leaf, index), { leaf, index }]));
86
+ const matched = [];
87
+ const removed = [];
88
+ const added = [];
89
+ let plausible = 0;
90
+ for (const key of new Set([...before.keys(), ...after.keys()])) {
91
+ const left = before.get(key);
92
+ const right = after.get(key);
93
+ if (left && right) {
94
+ matched.push({
95
+ before: left.leaf,
96
+ after: right.leaf,
97
+ beforeIndex: left.index,
98
+ afterIndex: right.index,
99
+ matchStrategy: 'extractionIndex',
100
+ matchKey: key,
101
+ });
102
+ if (isPlausiblePair(left.leaf, right.leaf))
103
+ plausible += 1;
104
+ }
105
+ else if (left)
106
+ removed.push(left.leaf);
107
+ else if (right)
108
+ added.push(right.leaf);
109
+ }
110
+ return {
111
+ matched,
112
+ removed,
113
+ added,
114
+ coverage: plausible / Math.max(beforeLeaves.length, afterLeaves.length, 1),
115
+ };
116
+ };
117
+ const center = (leaf) => {
118
+ const box = boxOf(leaf);
119
+ return box ? [box[0] + box[2] / 2, box[1] + box[3] / 2] : undefined;
120
+ };
121
+ const takeNearest = (bucket, targetLeaf) => {
122
+ if (bucket.length <= 1)
123
+ return bucket.shift();
124
+ const target = center(targetLeaf);
125
+ if (!target)
126
+ return bucket.shift();
127
+ let bestIndex = 0;
128
+ let bestDistance = Number.POSITIVE_INFINITY;
129
+ bucket.forEach((candidate, index) => {
130
+ const candidateCenter = center(candidate.leaf);
131
+ if (!candidateCenter)
132
+ return;
133
+ const distance = (candidateCenter[0] - target[0]) ** 2 + (candidateCenter[1] - target[1]) ** 2;
134
+ if (distance < bestDistance) {
135
+ bestDistance = distance;
136
+ bestIndex = index;
137
+ }
138
+ });
139
+ return bucket.splice(bestIndex, 1)[0];
140
+ };
141
+ const matchByContentAndSpatial = (beforeLeaves, afterLeaves, contentKeyMode) => {
142
+ const beforeItems = beforeLeaves.map((leaf, index) => ({ leaf, index }));
143
+ const afterItems = afterLeaves.map((leaf, index) => ({ leaf, index }));
144
+ const usedBefore = new Set();
145
+ const usedAfter = new Set();
146
+ const matched = [];
147
+ const buckets = new Map();
148
+ const keyFor = (leaf) => {
149
+ if (!leaf.kind || !TEXT_BEARING_KINDS.has(leaf.kind))
150
+ return undefined;
151
+ const content = normalizeContent(leaf.content);
152
+ if (!content)
153
+ return undefined;
154
+ const kind = contentKeyMode === 'family' ? KIND_FAMILY.get(leaf.kind) ?? leaf.kind : leaf.kind;
155
+ return `${kind}::${content}`;
156
+ };
157
+ for (const item of beforeItems) {
158
+ const key = keyFor(item.leaf);
159
+ if (!key)
160
+ continue;
161
+ const bucket = buckets.get(key) ?? [];
162
+ bucket.push(item);
163
+ buckets.set(key, bucket);
164
+ }
165
+ for (const item of afterItems) {
166
+ const key = keyFor(item.leaf);
167
+ if (!key)
168
+ continue;
169
+ const left = takeNearest(buckets.get(key) ?? [], item.leaf);
170
+ if (!left)
171
+ continue;
172
+ matched.push({
173
+ before: left.leaf,
174
+ after: item.leaf,
175
+ beforeIndex: left.index,
176
+ afterIndex: item.index,
177
+ matchStrategy: 'content',
178
+ matchKey: key,
179
+ });
180
+ usedBefore.add(left.index);
181
+ usedAfter.add(item.index);
182
+ }
183
+ const spatial = [];
184
+ for (const left of beforeItems.filter((item) => !usedBefore.has(item.index))) {
185
+ const leftBox = boxOf(left.leaf);
186
+ if (!leftBox)
187
+ continue;
188
+ for (const right of afterItems.filter((item) => !usedAfter.has(item.index))) {
189
+ const rightBox = boxOf(right.leaf);
190
+ if (!rightBox)
191
+ continue;
192
+ const score = boxIou(leftBox, rightBox);
193
+ if (score >= SPATIAL_IOU_MIN)
194
+ spatial.push({ left, right, score });
195
+ }
196
+ }
197
+ spatial.sort((left, right) => right.score - left.score);
198
+ for (const candidate of spatial) {
199
+ if (usedBefore.has(candidate.left.index) || usedAfter.has(candidate.right.index))
200
+ continue;
201
+ usedBefore.add(candidate.left.index);
202
+ usedAfter.add(candidate.right.index);
203
+ matched.push({
204
+ before: candidate.left.leaf,
205
+ after: candidate.right.leaf,
206
+ beforeIndex: candidate.left.index,
207
+ afterIndex: candidate.right.index,
208
+ matchStrategy: 'spatial',
209
+ matchKey: `iou:${candidate.score.toFixed(3)}`,
210
+ });
211
+ }
212
+ return {
213
+ matched,
214
+ removed: beforeItems.filter((item) => !usedBefore.has(item.index)).map((item) => item.leaf),
215
+ added: afterItems.filter((item) => !usedAfter.has(item.index)).map((item) => item.leaf),
216
+ };
217
+ };
218
+ export const MEANINGFUL_FIELDS = [
219
+ 'kind', 'content', 'box', 'hidden', 'fontSizePx', 'fittedFontSizePx', 'fontWeight',
220
+ 'googleFontFamily', 'color', 'align', 'opacity', 'rotationDeg', 'textRotationDeg',
221
+ 'textSlantDeg', 'style',
222
+ ];
223
+ const same = (left, right) => JSON.stringify(left) === JSON.stringify(right);
224
+ export const computeLayerDeltas = (before, after) => {
225
+ const deltas = [];
226
+ for (const field of MEANINGFUL_FIELDS) {
227
+ const beforeValue = before[field];
228
+ const afterValue = after[field];
229
+ if (same(beforeValue, afterValue))
230
+ continue;
231
+ if (field !== 'style') {
232
+ deltas.push({ field, before: beforeValue, after: afterValue });
233
+ continue;
234
+ }
235
+ const beforeStyle = isRecord(beforeValue) ? beforeValue : {};
236
+ const afterStyle = isRecord(afterValue) ? afterValue : {};
237
+ for (const key of [...new Set([...Object.keys(beforeStyle), ...Object.keys(afterStyle)])].sort()) {
238
+ if (!same(beforeStyle[key], afterStyle[key])) {
239
+ deltas.push({ field: `style.${key}`, before: beforeStyle[key], after: afterStyle[key] });
240
+ }
241
+ }
242
+ }
243
+ return deltas;
244
+ };
245
+ export const diffLayerDocs = (beforeDoc, afterDoc, options = {}) => {
246
+ const beforeLeaves = flattenLayerDoc(beforeDoc);
247
+ const afterLeaves = flattenLayerDoc(afterDoc);
248
+ const identity = options.strategy === 'fallback' ? undefined : matchByIdentity(beforeLeaves, afterLeaves);
249
+ const useFallback = options.strategy === 'fallback'
250
+ || (identity?.coverage ?? 0) < IDENTITY_COVERAGE_MIN;
251
+ const raw = useFallback
252
+ ? matchByContentAndSpatial(beforeLeaves, afterLeaves, options.contentKeyMode ?? 'kind')
253
+ : identity;
254
+ const matched = raw.matched.map((entry) => {
255
+ const deltas = computeLayerDeltas(entry.before, entry.after);
256
+ return {
257
+ beforeIndex: entry.beforeIndex,
258
+ afterIndex: entry.afterIndex,
259
+ matchStrategy: entry.matchStrategy,
260
+ matchKey: entry.matchKey,
261
+ plausible: isPlausiblePair(entry.before, entry.after),
262
+ changed: deltas.length > 0,
263
+ kind: entry.after.kind ?? entry.before.kind ?? 'layer',
264
+ ...(boxOf(entry.after) ?? boxOf(entry.before)
265
+ ? { box: boxOf(entry.after) ?? boxOf(entry.before) }
266
+ : {}),
267
+ before: { ...(concise(entry.before.content) ? { content: concise(entry.before.content) } : {}) },
268
+ after: { ...(concise(entry.after.content) ? { content: concise(entry.after.content) } : {}) },
269
+ deltas,
270
+ };
271
+ });
272
+ const summarize = (leaf) => ({
273
+ kind: leaf.kind ?? 'layer',
274
+ ...(concise(leaf.content) ? { content: concise(leaf.content) } : {}),
275
+ ...(boxOf(leaf) ? { box: boxOf(leaf) } : {}),
276
+ });
277
+ const plausibleCount = matched.filter((entry) => entry.plausible).length;
278
+ const changedCount = matched.filter((entry) => entry.changed).length;
279
+ const added = raw.added.map(summarize);
280
+ const removed = raw.removed.map(summarize);
281
+ return {
282
+ meta: {
283
+ beforeLeafCount: beforeLeaves.length,
284
+ afterLeafCount: afterLeaves.length,
285
+ identityCoverage: identity?.coverage ?? 0,
286
+ matchCoverage: plausibleCount / Math.max(beforeLeaves.length, afterLeaves.length, 1),
287
+ matchStrategy: useFallback ? 'content+spatial-fallback' : 'extractionIndex',
288
+ matchedCount: matched.length,
289
+ plausibleMatchedCount: plausibleCount,
290
+ changedCount,
291
+ unchangedCount: matched.length - changedCount,
292
+ addedCount: added.length,
293
+ removedCount: removed.length,
294
+ },
295
+ matched,
296
+ added,
297
+ removed,
298
+ };
299
+ };
300
+ export const canvasOfDoc = (doc) => {
301
+ if (!isRecord(doc) || !isRecord(doc.canvas))
302
+ throw new Error('document has no usable canvas');
303
+ const width = doc.canvas.width;
304
+ const height = doc.canvas.height;
305
+ if (typeof width !== 'number' || !Number.isFinite(width) || width <= 0
306
+ || typeof height !== 'number' || !Number.isFinite(height) || height <= 0) {
307
+ throw new Error('document has no usable canvas {width,height}');
308
+ }
309
+ return { width, height };
310
+ };
311
+ //# sourceMappingURL=improve-layerdoc-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improve-layerdoc-diff.js","sourceRoot":"","sources":["../src/improve-layerdoc-diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ export type LayerBox = [number, number, number, number];
2
+ export type LayerLeaf = Record<string, unknown> & {
3
+ kind?: string;
4
+ content?: string;
5
+ box?: LayerBox;
6
+ layoutBox?: LayerBox;
7
+ extractionIndex?: number;
8
+ z?: number;
9
+ style?: Record<string, unknown>;
10
+ viewportAnchored?: boolean;
11
+ verticalFrame?: number;
12
+ dom?: DomLeafIdentity;
13
+ };
14
+ export type DomLeafIdentity = {
15
+ selector: string;
16
+ selectorKind: 'id' | 'testid' | 'class' | 'path';
17
+ classSelector?: string;
18
+ classSelectorMatches?: number;
19
+ classSelectorIndex?: number;
20
+ tag?: string;
21
+ id?: string;
22
+ testId?: string;
23
+ classList?: string[];
24
+ path?: string;
25
+ parentIndex?: number;
26
+ };
27
+ export type LayerDocLike = {
28
+ version?: number;
29
+ canvas: {
30
+ width: number;
31
+ height: number;
32
+ };
33
+ source?: Record<string, unknown>;
34
+ viewport?: Record<string, unknown>;
35
+ layers: unknown[];
36
+ };
37
+ export type LayerDelta = {
38
+ field: string;
39
+ before: unknown;
40
+ after: unknown;
41
+ };
42
+ export type LayerMatchStrategy = 'extractionIndex' | 'content' | 'spatial' | 'neighbour';
43
+ export type RawLayerMatch = {
44
+ before: LayerLeaf;
45
+ after: LayerLeaf;
46
+ beforeIndex: number;
47
+ afterIndex: number;
48
+ matchStrategy: LayerMatchStrategy;
49
+ matchKey: string;
50
+ };
51
+ export type LayerDiffMatch = {
52
+ beforeIndex: number;
53
+ afterIndex: number;
54
+ matchStrategy: LayerMatchStrategy;
55
+ matchKey: string;
56
+ plausible: boolean;
57
+ changed: boolean;
58
+ kind: string;
59
+ box?: LayerBox;
60
+ before: {
61
+ content?: string;
62
+ };
63
+ after: {
64
+ content?: string;
65
+ };
66
+ deltas: LayerDelta[];
67
+ selector?: string;
68
+ confident?: boolean;
69
+ impliedPadding?: ImpliedPaddingDelta[];
70
+ };
71
+ export type LayerSummary = {
72
+ kind: string;
73
+ content?: string;
74
+ box?: LayerBox;
75
+ };
76
+ export type LayerDiffResult = {
77
+ meta: {
78
+ beforeLeafCount: number;
79
+ afterLeafCount: number;
80
+ identityCoverage: number;
81
+ matchCoverage: number;
82
+ matchStrategy: 'extractionIndex' | 'content+spatial-fallback';
83
+ matchedCount: number;
84
+ plausibleMatchedCount: number;
85
+ changedCount: number;
86
+ unchangedCount: number;
87
+ addedCount: number;
88
+ removedCount: number;
89
+ neighbourRepaired?: number;
90
+ neighbourReleased?: number;
91
+ };
92
+ matched: LayerDiffMatch[];
93
+ added: LayerSummary[];
94
+ removed: LayerSummary[];
95
+ };
96
+ export type ImpliedPaddingDelta = {
97
+ field: string;
98
+ before: number;
99
+ after: number;
100
+ driftPx: number;
101
+ basis: string;
102
+ };
103
+ export type ImproveGate = {
104
+ passed: boolean;
105
+ coverage: number;
106
+ coveragePct: number;
107
+ thresholdPct: number;
108
+ };
109
+ //# sourceMappingURL=improve-layerdoc-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improve-layerdoc-types.d.ts","sourceRoot":"","sources":["../src/improve-layerdoc-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=improve-layerdoc-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improve-layerdoc-types.js","sourceRoot":"","sources":["../src/improve-layerdoc-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ import type { CreateRetainPolicy } from './branch-client.js';
2
+ import { type CliFlags } from './cli-arguments.js';
3
+ import { type ConversionModel } from './conversion-models.js';
4
+ import { type ResponsiveConversionQuality } from './responsive-quality.js';
5
+ import { type ImproveBootstrapAction } from './redesign-capture.js';
6
+ import { type ImprovePaths, type ImproveStage } from './improve-workspace.js';
7
+ export type ImproveOptions = {
8
+ input: {
9
+ kind: 'url' | 'image';
10
+ value: string;
11
+ };
12
+ target?: {
13
+ kind: 'image' | 'layerdoc';
14
+ value: string;
15
+ };
16
+ direction?: string;
17
+ concept: string;
18
+ candidates: number;
19
+ retain: CreateRetainPolicy;
20
+ retainFlag: string;
21
+ pick: string;
22
+ conversionModel: ConversionModel;
23
+ responsiveQuality: ResponsiveConversionQuality;
24
+ viewport: {
25
+ width: number;
26
+ height: number;
27
+ };
28
+ fullPage: boolean;
29
+ bootstrapValues: string[];
30
+ bootstrap: ImproveBootstrapAction[];
31
+ paths: ImprovePaths;
32
+ from: ImproveStage;
33
+ to: ImproveStage;
34
+ repo?: string;
35
+ planSourceConvert: boolean;
36
+ dryRun: boolean;
37
+ fresh: boolean;
38
+ };
39
+ export declare const parseImproveOptions: (args: {
40
+ command: readonly string[];
41
+ flags: CliFlags;
42
+ workspaceRoot?: string;
43
+ }) => ImproveOptions;
44
+ //# sourceMappingURL=improve-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improve-options.d.ts","sourceRoot":"","sources":["../src/improve-options.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAIL,KAAK,QAAQ,EACd,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,yBAAyB,CAAC;AAOjC,OAAO,EAAyB,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAKL,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE;QAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,eAAe,CAAC;IACjC,iBAAiB,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,YAAY,CAAC;IACnB,EAAE,EAAE,YAAY,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAoEF,eAAO,MAAM,mBAAmB,GAAI,MAAM;IACxC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,QAAQ,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,KAAG,cAkGH,CAAC"}