@noodleseed/one 0.90.0 → 0.91.0

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 (101) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +3 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/auth-live-doctor.js +1 -1
  5. package/dist/commands/auth-live-doctor.js.map +1 -1
  6. package/dist/commands/catalog-data-local-authoring.d.ts.map +1 -1
  7. package/dist/commands/catalog-data-local-authoring.js +27 -0
  8. package/dist/commands/catalog-data-local-authoring.js.map +1 -1
  9. package/dist/commands/design.d.ts +7 -0
  10. package/dist/commands/design.d.ts.map +1 -0
  11. package/dist/commands/design.js +95 -0
  12. package/dist/commands/design.js.map +1 -0
  13. package/dist/commands/devtools.d.ts.map +1 -1
  14. package/dist/commands/devtools.js +5 -1
  15. package/dist/commands/devtools.js.map +1 -1
  16. package/dist/devtools-design-brief.d.ts +10 -0
  17. package/dist/devtools-design-brief.d.ts.map +1 -0
  18. package/dist/devtools-design-brief.js +121 -0
  19. package/dist/devtools-design-brief.js.map +1 -0
  20. package/dist/devtools-design-contract.d.ts +74 -0
  21. package/dist/devtools-design-contract.d.ts.map +1 -0
  22. package/dist/devtools-design-contract.js +306 -0
  23. package/dist/devtools-design-contract.js.map +1 -0
  24. package/dist/devtools-design-element.d.ts +6 -0
  25. package/dist/devtools-design-element.d.ts.map +1 -0
  26. package/dist/devtools-design-element.js +233 -0
  27. package/dist/devtools-design-element.js.map +1 -0
  28. package/dist/devtools-design-preview.d.ts +6 -0
  29. package/dist/devtools-design-preview.d.ts.map +1 -0
  30. package/dist/devtools-design-preview.js +438 -0
  31. package/dist/devtools-design-preview.js.map +1 -0
  32. package/dist/devtools-design-routes.d.ts +14 -0
  33. package/dist/devtools-design-routes.d.ts.map +1 -0
  34. package/dist/devtools-design-routes.js +197 -0
  35. package/dist/devtools-design-routes.js.map +1 -0
  36. package/dist/devtools-design-store.d.ts +16 -0
  37. package/dist/devtools-design-store.d.ts.map +1 -0
  38. package/dist/devtools-design-store.js +209 -0
  39. package/dist/devtools-design-store.js.map +1 -0
  40. package/dist/devtools-design-styles.d.ts +3 -0
  41. package/dist/devtools-design-styles.d.ts.map +1 -0
  42. package/dist/devtools-design-styles.js +509 -0
  43. package/dist/devtools-design-styles.js.map +1 -0
  44. package/dist/devtools-design.d.ts +1 -3
  45. package/dist/devtools-design.d.ts.map +1 -1
  46. package/dist/devtools-design.js +449 -56
  47. package/dist/devtools-design.js.map +1 -1
  48. package/dist/devtools-harness.d.ts.map +1 -1
  49. package/dist/devtools-harness.js +13 -10
  50. package/dist/devtools-harness.js.map +1 -1
  51. package/dist/devtools-preview.d.ts +3 -0
  52. package/dist/devtools-preview.d.ts.map +1 -1
  53. package/dist/devtools-preview.js +3 -0
  54. package/dist/devtools-preview.js.map +1 -1
  55. package/dist/devtools-responsive-styles.d.ts.map +1 -1
  56. package/dist/devtools-responsive-styles.js +15 -0
  57. package/dist/devtools-responsive-styles.js.map +1 -1
  58. package/dist/devtools-styles.js +1 -1
  59. package/dist/devtools-styles.js.map +1 -1
  60. package/dist/preview-session.d.ts +5 -0
  61. package/dist/preview-session.d.ts.map +1 -1
  62. package/dist/preview-session.js +1 -0
  63. package/dist/preview-session.js.map +1 -1
  64. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
  65. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +4 -0
  66. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
  67. package/node_modules/@noodle-borg/agent-kit/dist/curated/hook-notes.js +1 -1
  68. package/node_modules/@noodle-borg/agent-kit/dist/curated/hook-notes.js.map +1 -1
  69. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +4 -4
  70. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
  71. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
  72. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +1 -0
  73. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
  74. package/node_modules/@noodle-borg/agent-kit/dist/skill-design-refs.d.ts.map +1 -1
  75. package/node_modules/@noodle-borg/agent-kit/dist/skill-design-refs.js +12 -0
  76. package/node_modules/@noodle-borg/agent-kit/dist/skill-design-refs.js.map +1 -1
  77. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  78. package/node_modules/@noodle-borg/auth/dist/verify.d.ts +3 -1
  79. package/node_modules/@noodle-borg/auth/dist/verify.d.ts.map +1 -1
  80. package/node_modules/@noodle-borg/auth/dist/verify.js +16 -4
  81. package/node_modules/@noodle-borg/auth/dist/verify.js.map +1 -1
  82. package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.d.ts +0 -2
  83. package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.d.ts.map +1 -1
  84. package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.js +0 -76
  85. package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.js.map +1 -1
  86. package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts +2 -8
  87. package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts.map +1 -1
  88. package/node_modules/@noodle-borg/connector-http/dist/http-connector.js +8 -237
  89. package/node_modules/@noodle-borg/connector-http/dist/http-connector.js.map +1 -1
  90. package/node_modules/@noodle-borg/connector-http/dist/http-response.d.ts +26 -0
  91. package/node_modules/@noodle-borg/connector-http/dist/http-response.d.ts.map +1 -0
  92. package/node_modules/@noodle-borg/connector-http/dist/http-response.js +249 -0
  93. package/node_modules/@noodle-borg/connector-http/dist/http-response.js.map +1 -0
  94. package/node_modules/@noodle-borg/service/dist/customer-verifier.d.ts.map +1 -1
  95. package/node_modules/@noodle-borg/service/dist/customer-verifier.js +8 -5
  96. package/node_modules/@noodle-borg/service/dist/customer-verifier.js.map +1 -1
  97. package/package.json +1 -1
  98. package/node_modules/@noodle-borg/compiler/dist/widget-tailwind-tokens.d.ts +0 -2
  99. package/node_modules/@noodle-borg/compiler/dist/widget-tailwind-tokens.d.ts.map +0 -1
  100. package/node_modules/@noodle-borg/compiler/dist/widget-tailwind-tokens.js +0 -22
  101. package/node_modules/@noodle-borg/compiler/dist/widget-tailwind-tokens.js.map +0 -1
@@ -0,0 +1,306 @@
1
+ export const DESIGN_SESSION_VERSION = 1;
2
+ export const DESIGN_MAX_BODY_BYTES = 256 * 1024;
3
+ export const DESIGN_STYLE_PROPERTIES = [
4
+ 'color',
5
+ 'font-family',
6
+ 'font-size',
7
+ 'font-weight',
8
+ 'line-height',
9
+ 'letter-spacing',
10
+ 'text-align',
11
+ 'background-color',
12
+ 'opacity',
13
+ 'padding-top',
14
+ 'padding-right',
15
+ 'padding-bottom',
16
+ 'padding-left',
17
+ 'margin-top',
18
+ 'margin-right',
19
+ 'margin-bottom',
20
+ 'margin-left',
21
+ 'row-gap',
22
+ 'column-gap',
23
+ 'display',
24
+ 'flex-direction',
25
+ 'align-items',
26
+ 'justify-content',
27
+ 'width',
28
+ 'min-width',
29
+ 'max-width',
30
+ 'height',
31
+ 'min-height',
32
+ 'max-height',
33
+ 'border-color',
34
+ 'border-width',
35
+ 'border-style',
36
+ 'border-radius',
37
+ ];
38
+ const STYLE_PROPERTY_SET = new Set(DESIGN_STYLE_PROPERTIES);
39
+ const GENERATED_ID = /^(?::r\d+:|react[-_:]|radix[-_:]|headlessui[-_:]|[a-f0-9]{12,}|[A-Za-z_-]*\d{7,})$/i;
40
+ function object(value, path) {
41
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
42
+ throw new Error(`${path} must be an object`);
43
+ }
44
+ return value;
45
+ }
46
+ function only(value, allowed, path) {
47
+ const allowedSet = new Set(allowed);
48
+ const unknown = Object.keys(value).find((key) => !allowedSet.has(key));
49
+ if (unknown !== undefined)
50
+ throw new Error(`unknown ${path} field: ${unknown}`);
51
+ }
52
+ function text(value, path, max = 4000) {
53
+ if (typeof value !== 'string')
54
+ throw new Error(`${path} must be a string`);
55
+ if (value.length > max)
56
+ throw new Error(`${path} must contain at most ${max} characters`);
57
+ return value;
58
+ }
59
+ function optionalText(value, path, max = 4000) {
60
+ return value === undefined ? undefined : text(value, path, max);
61
+ }
62
+ function projectRelativePath(value, path) {
63
+ const parsed = text(value, path, 500);
64
+ const normalized = parsed.replaceAll('\\', '/');
65
+ if (normalized.length === 0 ||
66
+ normalized.startsWith('/') ||
67
+ /^[A-Za-z]:\//.test(normalized) ||
68
+ normalized.split('/').includes('..')) {
69
+ throw new Error(`${path} must be project-relative`);
70
+ }
71
+ return parsed;
72
+ }
73
+ function finite(value, path) {
74
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
75
+ throw new Error(`${path} must be a finite number`);
76
+ }
77
+ return value;
78
+ }
79
+ function integer(value, path, minimum = 0) {
80
+ const parsed = finite(value, path);
81
+ if (!Number.isInteger(parsed) || parsed < minimum) {
82
+ throw new Error(`${path} must be an integer greater than or equal to ${minimum}`);
83
+ }
84
+ return parsed;
85
+ }
86
+ function list(value, path, max) {
87
+ if (!Array.isArray(value))
88
+ throw new Error(`${path} must be an array`);
89
+ if (value.length > max)
90
+ throw new Error(`${path} must contain at most ${max} items`);
91
+ return value;
92
+ }
93
+ function stringList(value, path, max, itemMax = 500) {
94
+ return list(value, path, max).map((item, index) => text(item, `${path}[${index}]`, itemMax));
95
+ }
96
+ function enumValue(value, choices, path) {
97
+ if (typeof value !== 'string' || !choices.includes(value)) {
98
+ throw new Error(`${path} must be one of ${choices.join(', ')}`);
99
+ }
100
+ return value;
101
+ }
102
+ function timestamp(value, path) {
103
+ const parsed = text(value, path, 64);
104
+ const date = new Date(parsed);
105
+ if (Number.isNaN(date.valueOf()) || date.toISOString() !== parsed) {
106
+ throw new Error(`${path} must be an ISO timestamp`);
107
+ }
108
+ return parsed;
109
+ }
110
+ function stableId(value) {
111
+ if (typeof value !== 'string')
112
+ return undefined;
113
+ const normalized = sanitizeVisibleText(value);
114
+ if (normalized.length === 0 || normalized.length > 120 || GENERATED_ID.test(normalized)) {
115
+ return undefined;
116
+ }
117
+ return normalized;
118
+ }
119
+ function optionalSanitized(value, max = 160) {
120
+ if (typeof value !== 'string')
121
+ return undefined;
122
+ const normalized = sanitizeVisibleText(value).slice(0, max);
123
+ return normalized.length > 0 ? normalized : undefined;
124
+ }
125
+ function sanitizedClasses(value) {
126
+ if (!Array.isArray(value))
127
+ return [];
128
+ return value
129
+ .filter((item) => typeof item === 'string')
130
+ .map((item) => sanitizeVisibleText(item).slice(0, 120))
131
+ .filter(Boolean)
132
+ .sort()
133
+ .slice(0, 20);
134
+ }
135
+ function rect(value, path) {
136
+ const input = object(value, path);
137
+ only(input, ['x', 'y', 'width', 'height'], path);
138
+ return {
139
+ x: finite(input.x, `${path}.x`),
140
+ y: finite(input.y, `${path}.y`),
141
+ width: finite(input.width, `${path}.width`),
142
+ height: finite(input.height, `${path}.height`),
143
+ };
144
+ }
145
+ function computedStyles(value, path) {
146
+ const input = object(value, path);
147
+ const result = {};
148
+ for (const [property, raw] of Object.entries(input)) {
149
+ if (!STYLE_PROPERTY_SET.has(property))
150
+ continue;
151
+ result[property] = text(raw, `${path}.${property}`, 500);
152
+ }
153
+ return result;
154
+ }
155
+ function resolution(value, path) {
156
+ const input = object(value, path);
157
+ only(input, ['confidence', 'evidence', 'status'], path);
158
+ const confidence = finite(input.confidence, `${path}.confidence`);
159
+ if (confidence < 0 || confidence > 100) {
160
+ throw new Error(`${path}.confidence must be between 0 and 100`);
161
+ }
162
+ return {
163
+ confidence,
164
+ evidence: stringList(input.evidence, `${path}.evidence`, 20, 160),
165
+ status: enumValue(input.status, ['resolved', 'ambiguous', 'unresolved'], `${path}.status`),
166
+ };
167
+ }
168
+ function ancestry(value, path, strict) {
169
+ return list(value, path, strict ? 6 : Number.MAX_SAFE_INTEGER)
170
+ .slice(0, 6)
171
+ .map((item, index) => {
172
+ const segmentPath = `${path}[${index}]`;
173
+ const input = object(item, segmentPath);
174
+ if (strict) {
175
+ only(input, ['tagName', 'role', 'stableId', 'classNames', 'nthOfType'], segmentPath);
176
+ }
177
+ const id = stableId(input.stableId ?? input.id);
178
+ const role = optionalSanitized(input.role, 80);
179
+ return {
180
+ tagName: text(input.tagName, `${segmentPath}.tagName`, 40).toLowerCase(),
181
+ ...(role ? { role } : {}),
182
+ ...(id ? { stableId: id } : {}),
183
+ classNames: sanitizedClasses(input.classNames),
184
+ nthOfType: integer(input.nthOfType, `${segmentPath}.nthOfType`, 1),
185
+ };
186
+ });
187
+ }
188
+ export function sanitizeVisibleText(value) {
189
+ return value.replace(/\s+/g, ' ').trim().slice(0, 160);
190
+ }
191
+ function sanitizeElementEvidenceAt(value, path, strict = false) {
192
+ const input = object(value, path);
193
+ const attributes = input.attributes === undefined ? {} : object(input.attributes, `${path}.attributes`);
194
+ const providedHints = input.authorHints === undefined ? {} : object(input.authorHints, `${path}.authorHints`);
195
+ const id = stableId(input.stableId ?? input.id);
196
+ const testId = optionalSanitized(providedHints.testId ?? attributes['data-testid'], 120);
197
+ const test = optionalSanitized(providedHints.test ?? attributes['data-test'], 120);
198
+ const component = optionalSanitized(providedHints.component ?? attributes['data-component'], 120);
199
+ const authorHints = {
200
+ ...(testId ? { testId } : {}),
201
+ ...(test ? { test } : {}),
202
+ ...(component ? { component } : {}),
203
+ };
204
+ const accessibleName = optionalSanitized(input.accessibleName);
205
+ const visibleText = optionalSanitized(input.visibleText);
206
+ const role = optionalSanitized(input.role, 80);
207
+ return {
208
+ tagName: text(input.tagName, `${path}.tagName`, 40).toLowerCase(),
209
+ ...(role ? { role } : {}),
210
+ ...(accessibleName ? { accessibleName } : {}),
211
+ ...(visibleText ? { visibleText } : {}),
212
+ ...(id ? { stableId: id } : {}),
213
+ classNames: sanitizedClasses(input.classNames),
214
+ authorHints,
215
+ ancestry: ancestry(input.ancestry, `${path}.ancestry`, strict),
216
+ siblingIndex: integer(input.siblingIndex, `${path}.siblingIndex`),
217
+ siblingCount: integer(input.siblingCount, `${path}.siblingCount`),
218
+ rect: rect(input.rect, `${path}.rect`),
219
+ computedStyles: computedStyles(input.computedStyles, `${path}.computedStyles`),
220
+ resolution: resolution(input.resolution, `${path}.resolution`),
221
+ };
222
+ }
223
+ export function sanitizeElementEvidence(value) {
224
+ return sanitizeElementEvidenceAt(value, 'element');
225
+ }
226
+ function validateTarget(value, path) {
227
+ const input = object(value, path);
228
+ only(input, [
229
+ 'tagName',
230
+ 'role',
231
+ 'accessibleName',
232
+ 'visibleText',
233
+ 'stableId',
234
+ 'classNames',
235
+ 'authorHints',
236
+ 'ancestry',
237
+ 'siblingIndex',
238
+ 'siblingCount',
239
+ 'rect',
240
+ 'computedStyles',
241
+ 'resolution',
242
+ ], path);
243
+ const hints = object(input.authorHints, `${path}.authorHints`);
244
+ only(hints, ['testId', 'test', 'component'], `${path}.authorHints`);
245
+ const styles = object(input.computedStyles, `${path}.computedStyles`);
246
+ const unsupportedStyle = Object.keys(styles).find((property) => !STYLE_PROPERTY_SET.has(property));
247
+ if (unsupportedStyle)
248
+ throw new Error(`${path}.computedStyles.${unsupportedStyle} is unsupported`);
249
+ return sanitizeElementEvidenceAt(input, path, true);
250
+ }
251
+ function validateChange(value, path) {
252
+ const input = object(value, path);
253
+ only(input, ['property', 'from', 'to'], path);
254
+ if (typeof input.property !== 'string' || !STYLE_PROPERTY_SET.has(input.property)) {
255
+ throw new Error(`${path}.property is unsupported`);
256
+ }
257
+ return {
258
+ property: input.property,
259
+ from: text(input.from, `${path}.from`, 500),
260
+ to: text(input.to, `${path}.to`, 500),
261
+ };
262
+ }
263
+ function validateAnnotation(value, path) {
264
+ const input = object(value, path);
265
+ only(input, ['id', 'intent', 'target', 'changes', 'acceptanceCriteria', 'preserve'], path);
266
+ return {
267
+ id: text(input.id, `${path}.id`, 120),
268
+ intent: text(input.intent, `${path}.intent`, 4000),
269
+ target: validateTarget(input.target, `${path}.target`),
270
+ changes: list(input.changes, `${path}.changes`, 100).map((item, index) => validateChange(item, `${path}.changes[${index}]`)),
271
+ acceptanceCriteria: stringList(input.acceptanceCriteria, `${path}.acceptanceCriteria`, 50),
272
+ preserve: stringList(input.preserve, `${path}.preserve`, 50),
273
+ };
274
+ }
275
+ export function validateDesignSession(value) {
276
+ const input = object(value, 'Design Session');
277
+ only(input, ['version', 'id', 'status', 'project', 'viewport', 'createdAt', 'updatedAt', 'annotations'], 'Design Session');
278
+ if (input.version !== DESIGN_SESSION_VERSION) {
279
+ throw new Error('unsupported Design Session version');
280
+ }
281
+ const project = object(input.project, 'Design Session project');
282
+ only(project, ['entrypoint', 'toolName', 'resourceUri'], 'Design Session project');
283
+ const viewport = object(input.viewport, 'Design Session viewport');
284
+ only(viewport, ['width', 'height', 'device', 'theme'], 'Design Session viewport');
285
+ const resourceUri = optionalText(project.resourceUri, 'project.resourceUri', 500);
286
+ return {
287
+ version: DESIGN_SESSION_VERSION,
288
+ id: text(input.id, 'id', 120),
289
+ status: enumValue(input.status, ['draft', 'ready'], 'status'),
290
+ project: {
291
+ entrypoint: projectRelativePath(project.entrypoint, 'project.entrypoint'),
292
+ toolName: text(project.toolName, 'project.toolName', 200),
293
+ ...(resourceUri ? { resourceUri } : {}),
294
+ },
295
+ viewport: {
296
+ width: finite(viewport.width, 'viewport.width'),
297
+ height: finite(viewport.height, 'viewport.height'),
298
+ device: enumValue(viewport.device, ['desktop', 'mobile'], 'viewport.device'),
299
+ theme: enumValue(viewport.theme, ['light', 'dark'], 'viewport.theme'),
300
+ },
301
+ createdAt: timestamp(input.createdAt, 'createdAt'),
302
+ updatedAt: timestamp(input.updatedAt, 'updatedAt'),
303
+ annotations: list(input.annotations, 'annotations', 100).map((item, index) => validateAnnotation(item, `annotations[${index}]`)),
304
+ };
305
+ }
306
+ //# sourceMappingURL=devtools-design-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-design-contract.js","sourceRoot":"","sources":["../src/devtools-design-contract.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAU,CAAC;AACjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,GAAG,IAAI,CAAC;AAEhD,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,OAAO;IACP,aAAa;IACb,WAAW;IACX,aAAa;IACb,aAAa;IACb,gBAAgB;IAChB,YAAY;IACZ,kBAAkB;IAClB,SAAS;IACT,aAAa;IACb,eAAe;IACf,gBAAgB;IAChB,cAAc;IACd,YAAY;IACZ,cAAc;IACd,eAAe;IACf,aAAa;IACb,SAAS;IACT,YAAY;IACZ,SAAS;IACT,gBAAgB;IAChB,aAAa;IACb,iBAAiB;IACjB,OAAO;IACP,WAAW;IACX,WAAW;IACX,QAAQ;IACR,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,cAAc;IACd,cAAc;IACd,eAAe;CACP,CAAC;AA2EX,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAS,uBAAuB,CAAC,CAAC;AACpE,MAAM,YAAY,GAChB,qFAAqF,CAAC;AAExF,SAAS,MAAM,CAAC,KAAc,EAAE,IAAY;IAC1C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,oBAAoB,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,KAAmB,CAAC;AAC7B,CAAC;AAED,SAAS,IAAI,CAAC,KAAiB,EAAE,OAA0B,EAAE,IAAY;IACvE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,IAAI,OAAO,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,WAAW,OAAO,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,IAAI,CAAC,KAAc,EAAE,IAAY,EAAE,GAAG,GAAG,IAAI;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,mBAAmB,CAAC,CAAC;IAC3E,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,yBAAyB,GAAG,aAAa,CAAC,CAAC;IAC1F,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,KAAc,EAAE,IAAY,EAAE,GAAG,GAAG,IAAI;IAC5D,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc,EAAE,IAAY;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChD,IACE,UAAU,CAAC,MAAM,KAAK,CAAC;QACvB,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;QAC1B,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/B,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EACpC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,2BAA2B,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,MAAM,CAAC,KAAc,EAAE,IAAY;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,OAAO,CAAC,KAAc,EAAE,IAAY,EAAE,OAAO,GAAG,CAAC;IACxD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,OAAO,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,gDAAgD,OAAO,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,IAAI,CAAC,KAAc,EAAE,IAAY,EAAE,GAAW;IACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,mBAAmB,CAAC,CAAC;IACvE,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,yBAAyB,GAAG,QAAQ,CAAC,CAAC;IACrF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,IAAY,EAAE,GAAW,EAAE,OAAO,GAAG,GAAG;IAC1E,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,SAAS,CAChB,KAAc,EACd,OAAU,EACV,IAAY;IAEZ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,mBAAmB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,KAAkB,CAAC;AAC5B,CAAC;AAED,SAAS,SAAS,CAAC,KAAc,EAAE,IAAY;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,2BAA2B,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACxF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc,EAAE,GAAG,GAAG,GAAG;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,UAAU,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5D,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;SAC1D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SACtD,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,EAAE;SACN,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,IAAI,CAAC,KAAc,EAAE,IAAY;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;IACjD,OAAO;QACL,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC;QAC/B,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC;QAC/B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,IAAI,QAAQ,CAAC;QAC3C,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,KAAc,EACd,IAAY;IAEZ,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAClC,MAAM,MAAM,GAAiD,EAAE,CAAC;IAChE,KAAK,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,SAAS;QAChD,MAAM,CAAC,QAA+B,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,IAAY;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC;IAClE,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,uCAAuC,CAAC,CAAC;IAClE,CAAC;IACD,OAAO;QACL,UAAU;QACV,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,WAAW,EAAE,EAAE,EAAE,GAAG,CAAC;QACjE,MAAM,EAAE,SAAS,CACf,KAAK,CAAC,MAAM,EACZ,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,CAAU,EAChD,GAAG,IAAI,SAAS,CACjB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc,EAAE,IAAY,EAAE,MAAe;IAC7D,OAAO,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC;SAC3D,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACnB,MAAM,WAAW,GAAG,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACxC,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC/C,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,WAAW,UAAU,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;YACxE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,UAAU,EAAE,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC;YAC9C,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,WAAW,YAAY,EAAE,CAAC,CAAC;SACnE,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,yBAAyB,CAChC,KAAc,EACd,IAAY,EACZ,MAAM,GAAG,KAAK;IAEd,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAClC,MAAM,UAAU,GACd,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,IAAI,aAAa,CAAC,CAAC;IACvF,MAAM,aAAa,GACjB,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,IAAI,cAAc,CAAC,CAAC;IAC1F,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,iBAAiB,CAAC,aAAa,CAAC,MAAM,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,CAAC;IACzF,MAAM,IAAI,GAAG,iBAAiB,CAAC,aAAa,CAAC,IAAI,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC;IACnF,MAAM,SAAS,GAAG,iBAAiB,CAAC,aAAa,CAAC,SAAS,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE,GAAG,CAAC,CAAC;IAClG,MAAM,WAAW,GAAG;QAClB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpC,CAAC;IACF,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/C,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,UAAU,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE;QACjE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,UAAU,EAAE,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC;QAC9C,WAAW;QACX,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,CAAC;QAC9D,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,IAAI,eAAe,CAAC;QACjE,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,IAAI,eAAe,CAAC;QACjE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,OAAO,CAAC;QACtC,cAAc,EAAE,cAAc,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,IAAI,iBAAiB,CAAC;QAC9E,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,IAAI,aAAa,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,OAAO,yBAAyB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,IAAY;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAClC,IAAI,CACF,KAAK,EACL;QACE,SAAS;QACT,MAAM;QACN,gBAAgB;QAChB,aAAa;QACb,UAAU;QACV,YAAY;QACZ,aAAa;QACb,UAAU;QACV,cAAc;QACd,cAAc;QACd,MAAM;QACN,gBAAgB;QAChB,YAAY;KACb,EACD,IAAI,CACL,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,IAAI,cAAc,CAAC,CAAC;IAC/D,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,GAAG,IAAI,cAAc,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,IAAI,iBAAiB,CAAC,CAAC;IACtE,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAC/C,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAChD,CAAC;IACF,IAAI,gBAAgB;QAClB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,mBAAmB,gBAAgB,iBAAiB,CAAC,CAAC;IAC/E,OAAO,yBAAyB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,IAAY;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9C,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClF,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;IACrD,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,QAA+B;QAC/C,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,IAAI,OAAO,EAAE,GAAG,CAAC;QAC3C,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,IAAI,KAAK,EAAE,GAAG,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc,EAAE,IAAY;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,oBAAoB,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3F,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,IAAI,KAAK,EAAE,GAAG,CAAC;QACrC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,IAAI,CAAC;QAClD,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC;QACtD,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,UAAU,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACvE,cAAc,CAAC,IAAI,EAAE,GAAG,IAAI,YAAY,KAAK,GAAG,CAAC,CAClD;QACD,kBAAkB,EAAE,UAAU,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,IAAI,qBAAqB,EAAE,EAAE,CAAC;QAC1F,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,WAAW,EAAE,EAAE,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAC9C,IAAI,CACF,KAAK,EACL,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,EAC3F,gBAAgB,CACjB,CAAC;IACF,IAAI,KAAK,CAAC,OAAO,KAAK,sBAAsB,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;IAChE,IAAI,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,wBAAwB,CAAC,CAAC;IACnF,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,yBAAyB,CAAC,CAAC;IACnE,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,yBAAyB,CAAC,CAAC;IAClF,MAAM,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAC;IAClF,OAAO;QACL,OAAO,EAAE,sBAAsB;QAC/B,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC;QAC7B,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAU,EAAE,QAAQ,CAAC;QACtE,OAAO,EAAE;YACP,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC,UAAU,EAAE,oBAAoB,CAAC;YACzE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,EAAE,GAAG,CAAC;YACzD,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;YAC/C,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;YAClD,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAU,EAAE,iBAAiB,CAAC;YACrF,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,CAAU,EAAE,gBAAgB,CAAC;SAC/E;QACD,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC;QAClD,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC;QAClD,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC3E,kBAAkB,CAAC,IAAI,EAAE,eAAe,KAAK,GAAG,CAAC,CAClD;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Same-origin browser helper for capturing privacy-safe widget element evidence and resolving it after
3
+ * reload. Kept dependency-free so it can run inside the classic devtools harness and widget iframe.
4
+ */
5
+ export declare const DEVTOOLS_DESIGN_ELEMENT_CLIENT_JS: string;
6
+ //# sourceMappingURL=devtools-design-element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-design-element.d.ts","sourceRoot":"","sources":["../src/devtools-design-element.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,iCAAiC,QAkOxC,CAAC"}
@@ -0,0 +1,233 @@
1
+ import { DESIGN_STYLE_PROPERTIES } from './devtools-design-contract.js';
2
+ /**
3
+ * Same-origin browser helper for capturing privacy-safe widget element evidence and resolving it after
4
+ * reload. Kept dependency-free so it can run inside the classic devtools harness and widget iframe.
5
+ */
6
+ export const DEVTOOLS_DESIGN_ELEMENT_CLIENT_JS = `
7
+ (function(){
8
+ var STYLE_PROPERTIES=${JSON.stringify(DESIGN_STYLE_PROPERTIES)};
9
+ var RESOLVE_THRESHOLD=55;
10
+ var GENERATED_ID=/^(?::r\\d+:|react[-_:]|radix[-_:]|headlessui[-_:]|[a-f0-9]{12,}|[A-Za-z_-]*\\d{7,})$/i;
11
+ var INTERACTIVE_TAGS={button:"button",a:"link",textarea:"textbox",select:"combobox"};
12
+
13
+ function clean(value,max){
14
+ if(typeof value!=="string") return "";
15
+ return value.replace(/\\s+/g," ").trim().slice(0,max||160);
16
+ }
17
+ function stableId(value){
18
+ var id=clean(value,120);
19
+ return id&&!GENERATED_ID.test(id)?id:undefined;
20
+ }
21
+ function visibleText(element){
22
+ var parts=[];
23
+ function visit(node){
24
+ if(node.nodeType===3){ parts.push(node.nodeValue||""); return; }
25
+ if(node.nodeType!==1) return;
26
+ var current=node;
27
+ var tag=(current.tagName||"").toLowerCase();
28
+ if(tag==="script"||tag==="style"||tag==="template"||current.hidden||current.getAttribute("aria-hidden")==="true") return;
29
+ var style=current.ownerDocument&&current.ownerDocument.defaultView
30
+ ? current.ownerDocument.defaultView.getComputedStyle(current)
31
+ : null;
32
+ if(style&&(style.display==="none"||style.visibility==="hidden")) return;
33
+ for(var i=0;i<current.childNodes.length;i++) visit(current.childNodes[i]);
34
+ }
35
+ visit(element);
36
+ return clean(parts.join(" "),160);
37
+ }
38
+ function roleFor(element){
39
+ var explicit=clean(element.getAttribute("role")||"",80);
40
+ if(explicit) return explicit;
41
+ var tag=(element.tagName||"").toLowerCase();
42
+ if(tag==="input"){
43
+ var type=(element.getAttribute("type")||"text").toLowerCase();
44
+ if(type==="button"||type==="submit"||type==="reset") return "button";
45
+ if(type==="checkbox") return "checkbox";
46
+ if(type==="radio") return "radio";
47
+ if(type==="range") return "slider";
48
+ return "textbox";
49
+ }
50
+ return INTERACTIVE_TAGS[tag];
51
+ }
52
+ function accessibleName(element){
53
+ var labelled=clean(element.getAttribute("aria-label")||"",160);
54
+ if(labelled) return labelled;
55
+ var labelledBy=element.getAttribute("aria-labelledby");
56
+ if(labelledBy&&element.ownerDocument){
57
+ var label=element.ownerDocument.getElementById(labelledBy);
58
+ var labelText=label?visibleText(label):"";
59
+ if(labelText) return labelText;
60
+ }
61
+ var text=visibleText(element);
62
+ return text||undefined;
63
+ }
64
+ function classNames(element){
65
+ return Array.prototype.slice.call(element.classList||[])
66
+ .map(function(item){return clean(item,120);})
67
+ .filter(Boolean)
68
+ .sort()
69
+ .slice(0,20);
70
+ }
71
+ function authorHints(element){
72
+ var result={};
73
+ var testId=clean(element.getAttribute("data-testid")||"",160);
74
+ var test=clean(element.getAttribute("data-test")||"",160);
75
+ var component=clean(element.getAttribute("data-component")||"",160);
76
+ if(testId) result.testId=testId;
77
+ if(test) result.test=test;
78
+ if(component) result.component=component;
79
+ return result;
80
+ }
81
+ function nthOfType(element){
82
+ var index=1;
83
+ var sibling=element.previousElementSibling;
84
+ while(sibling){
85
+ if(sibling.tagName===element.tagName) index++;
86
+ sibling=sibling.previousElementSibling;
87
+ }
88
+ return index;
89
+ }
90
+ function segment(element){
91
+ var result={
92
+ tagName:(element.tagName||"").toLowerCase(),
93
+ classNames:classNames(element),
94
+ nthOfType:nthOfType(element)
95
+ };
96
+ var role=roleFor(element);
97
+ var id=stableId(element.id);
98
+ if(role) result.role=role;
99
+ if(id) result.stableId=id;
100
+ return result;
101
+ }
102
+ function ancestry(element){
103
+ var result=[];
104
+ var current=element.parentElement;
105
+ while(current&&result.length<6&&current!==element.ownerDocument.documentElement){
106
+ result.unshift(segment(current));
107
+ current=current.parentElement;
108
+ }
109
+ return result;
110
+ }
111
+ function computedStyles(element){
112
+ var result={};
113
+ var view=element.ownerDocument&&element.ownerDocument.defaultView;
114
+ var style=view?view.getComputedStyle(element):null;
115
+ for(var i=0;i<STYLE_PROPERTIES.length;i++){
116
+ var property=STYLE_PROPERTIES[i];
117
+ var value=style?style.getPropertyValue(property):"";
118
+ if(value) result[property]=clean(value,500);
119
+ }
120
+ return result;
121
+ }
122
+ function siblingIndex(element){
123
+ return element.parentElement
124
+ ? Array.prototype.indexOf.call(element.parentElement.children,element)
125
+ : 0;
126
+ }
127
+ function capture(element){
128
+ var rect=element.getBoundingClientRect();
129
+ var result={
130
+ tagName:(element.tagName||"").toLowerCase(),
131
+ classNames:classNames(element),
132
+ authorHints:authorHints(element),
133
+ ancestry:ancestry(element),
134
+ siblingIndex:siblingIndex(element),
135
+ siblingCount:element.parentElement?element.parentElement.children.length:1,
136
+ rect:{x:rect.x,y:rect.y,width:rect.width,height:rect.height},
137
+ computedStyles:computedStyles(element),
138
+ resolution:{confidence:100,evidence:["captured in current widget"],status:"resolved"}
139
+ };
140
+ var role=roleFor(element);
141
+ var name=accessibleName(element);
142
+ var text=visibleText(element);
143
+ var id=stableId(element.id);
144
+ if(role) result.role=role;
145
+ if(name) result.accessibleName=name;
146
+ if(text) result.visibleText=text;
147
+ if(id) result.stableId=id;
148
+ return result;
149
+ }
150
+ function hintsMatch(element,hints){
151
+ if(!hints) return false;
152
+ return Boolean(
153
+ (hints.testId&&element.getAttribute("data-testid")===hints.testId)||
154
+ (hints.test&&element.getAttribute("data-test")===hints.test)||
155
+ (hints.component&&element.getAttribute("data-component")===hints.component)
156
+ );
157
+ }
158
+ function ancestryScore(element,expected){
159
+ if(!Array.isArray(expected)||expected.length===0) return 0;
160
+ var actual=ancestry(element);
161
+ var matches=0;
162
+ var limit=Math.min(actual.length,expected.length);
163
+ for(var i=1;i<=limit;i++){
164
+ var left=actual[actual.length-i];
165
+ var right=expected[expected.length-i];
166
+ if(!left||!right||left.tagName!==right.tagName) break;
167
+ matches++;
168
+ if(right.stableId&&left.stableId===right.stableId) matches++;
169
+ if(right.role&&left.role===right.role) matches++;
170
+ }
171
+ return Math.min(15,Math.round((matches/Math.max(1,expected.length))*15));
172
+ }
173
+ function scored(element,fingerprint){
174
+ var score=0,evidence=[];
175
+ if(fingerprint.stableId&&stableId(element.id)===fingerprint.stableId){
176
+ score+=40; evidence.push("stable id");
177
+ }
178
+ if(hintsMatch(element,fingerprint.authorHints)){
179
+ score+=30; evidence.push("author hint");
180
+ }
181
+ var role=roleFor(element);
182
+ var name=accessibleName(element);
183
+ if(fingerprint.role&&role===fingerprint.role&&fingerprint.accessibleName&&name===fingerprint.accessibleName){
184
+ score+=20; evidence.push("role and accessible name");
185
+ }else if(fingerprint.role&&role===fingerprint.role){
186
+ score+=8; evidence.push("semantic role");
187
+ }
188
+ var text=visibleText(element);
189
+ if(fingerprint.visibleText&&text===fingerprint.visibleText){
190
+ score+=15; evidence.push("visible text");
191
+ }
192
+ var tree=ancestryScore(element,fingerprint.ancestry);
193
+ if(tree){ score+=tree; evidence.push("ancestry"); }
194
+ if(Number(fingerprint.siblingIndex)===siblingIndex(element)){
195
+ score+=5; evidence.push("sibling position");
196
+ }
197
+ return {element:element,confidence:Math.min(100,score),evidence:evidence};
198
+ }
199
+ function candidates(doc,fingerprint){
200
+ var pool=[];
201
+ if(fingerprint&&fingerprint.stableId){
202
+ var escapeValue=doc.defaultView&&doc.defaultView.CSS&&doc.defaultView.CSS.escape
203
+ ? doc.defaultView.CSS.escape(fingerprint.stableId)
204
+ : fingerprint.stableId.replace(/[^a-zA-Z0-9_-]/g,"\\\\$&");
205
+ try{
206
+ var exact=doc.querySelector("#"+escapeValue);
207
+ if(exact){
208
+ var exactScore=scored(exact,fingerprint||{});
209
+ if(exactScore.confidence>=RESOLVE_THRESHOLD) return [exactScore];
210
+ pool.push(exact);
211
+ }
212
+ }catch(error){}
213
+ }
214
+ var nodes=doc.querySelectorAll(fingerprint&&fingerprint.tagName?fingerprint.tagName:"*");
215
+ for(var i=0;i<nodes.length;i++) if(pool.indexOf(nodes[i])<0) pool.push(nodes[i]);
216
+ return pool.map(function(element){return scored(element,fingerprint||{});})
217
+ .sort(function(a,b){return b.confidence-a.confidence;});
218
+ }
219
+ function resolve(doc,fingerprint){
220
+ var ranked=candidates(doc,fingerprint);
221
+ var best=ranked[0];
222
+ var second=ranked[1];
223
+ if(!best||best.confidence<RESOLVE_THRESHOLD){
224
+ return {element:null,confidence:best?best.confidence:0,evidence:best?best.evidence:[],reason:"not_found"};
225
+ }
226
+ if(second&&best.confidence-second.confidence<10){
227
+ return {element:null,confidence:best.confidence,evidence:best.evidence,reason:"ambiguous"};
228
+ }
229
+ return best;
230
+ }
231
+ window.NoodleDesignElement={capture:capture,candidates:candidates,resolve:resolve};
232
+ })();`;
233
+ //# sourceMappingURL=devtools-design-element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-design-element.js","sourceRoot":"","sources":["../src/devtools-design-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE;;;GAGG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG;;yBAExB,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAgO1D,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Browser state machine for local Design mode. It owns selection interception, reversible annotation
3
+ * history, preview-only CSS, debounced persistence, and ready-brief finalization.
4
+ */
5
+ export declare const DEVTOOLS_DESIGN_PREVIEW_CLIENT_JS: string;
6
+ //# sourceMappingURL=devtools-design-preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devtools-design-preview.d.ts","sourceRoot":"","sources":["../src/devtools-design-preview.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,iCAAiC,QA+axC,CAAC"}