@noodleseed/one 0.89.1 → 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 (257) 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/billing-enforcement-activation-ops.js +1 -11
  7. package/dist/commands/billing-enforcement-activation-ops.js.map +1 -1
  8. package/dist/commands/billing-enforcement-ops.js +1 -11
  9. package/dist/commands/billing-enforcement-ops.js.map +1 -1
  10. package/dist/commands/billing-metering-ops.js +1 -11
  11. package/dist/commands/billing-metering-ops.js.map +1 -1
  12. package/dist/commands/billing-metering-validation-ops.js +1 -11
  13. package/dist/commands/billing-metering-validation-ops.js.map +1 -1
  14. package/dist/commands/billing-read-ops.js +1 -11
  15. package/dist/commands/billing-read-ops.js.map +1 -1
  16. package/dist/commands/billing-stripe-ops.js +1 -11
  17. package/dist/commands/billing-stripe-ops.js.map +1 -1
  18. package/dist/commands/catalog-data-local-authoring.d.ts.map +1 -1
  19. package/dist/commands/catalog-data-local-authoring.js +27 -0
  20. package/dist/commands/catalog-data-local-authoring.js.map +1 -1
  21. package/dist/commands/design.d.ts +7 -0
  22. package/dist/commands/design.d.ts.map +1 -0
  23. package/dist/commands/design.js +95 -0
  24. package/dist/commands/design.js.map +1 -0
  25. package/dist/commands/devtools.d.ts.map +1 -1
  26. package/dist/commands/devtools.js +5 -1
  27. package/dist/commands/devtools.js.map +1 -1
  28. package/dist/commands/org-admin.d.ts +6 -0
  29. package/dist/commands/org-admin.d.ts.map +1 -1
  30. package/dist/commands/org-admin.js +1 -29
  31. package/dist/commands/org-admin.js.map +1 -1
  32. package/dist/commands/org-domains.js +1 -22
  33. package/dist/commands/org-domains.js.map +1 -1
  34. package/dist/commands/org-member-args.d.ts +1 -1
  35. package/dist/commands/org-member-args.d.ts.map +1 -1
  36. package/dist/commands/org-member-args.js +1 -10
  37. package/dist/commands/org-member-args.js.map +1 -1
  38. package/dist/commands/org-openai-challenge.js +1 -22
  39. package/dist/commands/org-openai-challenge.js.map +1 -1
  40. package/dist/commands/platform-account-reset-args.d.ts.map +1 -1
  41. package/dist/commands/platform-account-reset-args.js +1 -6
  42. package/dist/commands/platform-account-reset-args.js.map +1 -1
  43. package/dist/commands/platform-account-reset-ops.js +1 -11
  44. package/dist/commands/platform-account-reset-ops.js.map +1 -1
  45. package/dist/commands/platform-auth-migration-args.d.ts +2 -0
  46. package/dist/commands/platform-auth-migration-args.d.ts.map +1 -1
  47. package/dist/commands/platform-auth-migration-args.js +2 -1
  48. package/dist/commands/platform-auth-migration-args.js.map +1 -1
  49. package/dist/commands/platform-auth-migration-ops.js +1 -11
  50. package/dist/commands/platform-auth-migration-ops.js.map +1 -1
  51. package/dist/commands/shared.d.ts +6 -0
  52. package/dist/commands/shared.d.ts.map +1 -1
  53. package/dist/commands/shared.js +34 -0
  54. package/dist/commands/shared.js.map +1 -1
  55. package/dist/deploy.d.ts +2 -0
  56. package/dist/deploy.d.ts.map +1 -1
  57. package/dist/deploy.js +4 -4
  58. package/dist/deploy.js.map +1 -1
  59. package/dist/dev.d.ts.map +1 -1
  60. package/dist/dev.js +1 -7
  61. package/dist/dev.js.map +1 -1
  62. package/dist/devtools-brand.d.ts +14 -0
  63. package/dist/devtools-brand.d.ts.map +1 -0
  64. package/dist/devtools-brand.js +98 -0
  65. package/dist/devtools-brand.js.map +1 -0
  66. package/dist/devtools-chat-anthropic.d.ts +3 -0
  67. package/dist/devtools-chat-anthropic.d.ts.map +1 -0
  68. package/dist/devtools-chat-anthropic.js +75 -0
  69. package/dist/devtools-chat-anthropic.js.map +1 -0
  70. package/dist/devtools-chat-gemini.d.ts +3 -0
  71. package/dist/devtools-chat-gemini.d.ts.map +1 -0
  72. package/dist/devtools-chat-gemini.js +82 -0
  73. package/dist/devtools-chat-gemini.js.map +1 -0
  74. package/dist/devtools-chat-types.d.ts +64 -0
  75. package/dist/devtools-chat-types.d.ts.map +1 -0
  76. package/dist/devtools-chat-types.js +64 -0
  77. package/dist/devtools-chat-types.js.map +1 -0
  78. package/dist/devtools-chat.d.ts +7 -39
  79. package/dist/devtools-chat.d.ts.map +1 -1
  80. package/dist/devtools-chat.js +33 -48
  81. package/dist/devtools-chat.js.map +1 -1
  82. package/dist/devtools-copy-styles.d.ts +3 -0
  83. package/dist/devtools-copy-styles.d.ts.map +1 -0
  84. package/dist/devtools-copy-styles.js +54 -0
  85. package/dist/devtools-copy-styles.js.map +1 -0
  86. package/dist/devtools-design-brief.d.ts +10 -0
  87. package/dist/devtools-design-brief.d.ts.map +1 -0
  88. package/dist/devtools-design-brief.js +121 -0
  89. package/dist/devtools-design-brief.js.map +1 -0
  90. package/dist/devtools-design-contract.d.ts +74 -0
  91. package/dist/devtools-design-contract.d.ts.map +1 -0
  92. package/dist/devtools-design-contract.js +306 -0
  93. package/dist/devtools-design-contract.js.map +1 -0
  94. package/dist/devtools-design-element.d.ts +6 -0
  95. package/dist/devtools-design-element.d.ts.map +1 -0
  96. package/dist/devtools-design-element.js +233 -0
  97. package/dist/devtools-design-element.js.map +1 -0
  98. package/dist/devtools-design-preview.d.ts +6 -0
  99. package/dist/devtools-design-preview.d.ts.map +1 -0
  100. package/dist/devtools-design-preview.js +438 -0
  101. package/dist/devtools-design-preview.js.map +1 -0
  102. package/dist/devtools-design-routes.d.ts +14 -0
  103. package/dist/devtools-design-routes.d.ts.map +1 -0
  104. package/dist/devtools-design-routes.js +197 -0
  105. package/dist/devtools-design-routes.js.map +1 -0
  106. package/dist/devtools-design-store.d.ts +16 -0
  107. package/dist/devtools-design-store.d.ts.map +1 -0
  108. package/dist/devtools-design-store.js +209 -0
  109. package/dist/devtools-design-store.js.map +1 -0
  110. package/dist/devtools-design-styles.d.ts +3 -0
  111. package/dist/devtools-design-styles.d.ts.map +1 -0
  112. package/dist/devtools-design-styles.js +509 -0
  113. package/dist/devtools-design-styles.js.map +1 -0
  114. package/dist/devtools-design.d.ts +3 -0
  115. package/dist/devtools-design.d.ts.map +1 -0
  116. package/dist/devtools-design.js +455 -0
  117. package/dist/devtools-design.js.map +1 -0
  118. package/dist/devtools-harness.d.ts +2 -2
  119. package/dist/devtools-harness.d.ts.map +1 -1
  120. package/dist/devtools-harness.js +138 -221
  121. package/dist/devtools-harness.js.map +1 -1
  122. package/dist/devtools-json.d.ts +10 -0
  123. package/dist/devtools-json.d.ts.map +1 -0
  124. package/dist/devtools-json.js +23 -0
  125. package/dist/devtools-json.js.map +1 -0
  126. package/dist/devtools-preview-control-styles.d.ts +3 -0
  127. package/dist/devtools-preview-control-styles.d.ts.map +1 -0
  128. package/dist/devtools-preview-control-styles.js +207 -0
  129. package/dist/devtools-preview-control-styles.js.map +1 -0
  130. package/dist/devtools-preview.d.ts +10 -3
  131. package/dist/devtools-preview.d.ts.map +1 -1
  132. package/dist/devtools-preview.js +192 -43
  133. package/dist/devtools-preview.js.map +1 -1
  134. package/dist/devtools-provider-logos.d.ts +5 -0
  135. package/dist/devtools-provider-logos.d.ts.map +1 -0
  136. package/dist/devtools-provider-logos.js +5 -0
  137. package/dist/devtools-provider-logos.js.map +1 -0
  138. package/dist/devtools-responsive-styles.d.ts +3 -0
  139. package/dist/devtools-responsive-styles.d.ts.map +1 -0
  140. package/dist/devtools-responsive-styles.js +90 -0
  141. package/dist/devtools-responsive-styles.js.map +1 -0
  142. package/dist/devtools-styles.d.ts +3 -0
  143. package/dist/devtools-styles.d.ts.map +1 -0
  144. package/dist/devtools-styles.js +694 -0
  145. package/dist/devtools-styles.js.map +1 -0
  146. package/dist/local-target.d.ts.map +1 -1
  147. package/dist/local-target.js +1 -6
  148. package/dist/local-target.js.map +1 -1
  149. package/dist/plugin-mode/build-readiness-server.d.ts +4 -10
  150. package/dist/plugin-mode/build-readiness-server.d.ts.map +1 -1
  151. package/dist/plugin-mode/build-readiness-server.js +68 -67
  152. package/dist/plugin-mode/build-readiness-server.js.map +1 -1
  153. package/dist/plugin-mode/plugin-command-runner.d.ts +41 -0
  154. package/dist/plugin-mode/plugin-command-runner.d.ts.map +1 -0
  155. package/dist/plugin-mode/plugin-command-runner.js +122 -0
  156. package/dist/plugin-mode/plugin-command-runner.js.map +1 -0
  157. package/dist/plugin-mode/plugin-operation-contract.d.ts +237 -0
  158. package/dist/plugin-mode/plugin-operation-contract.d.ts.map +1 -0
  159. package/dist/plugin-mode/plugin-operation-contract.js +164 -0
  160. package/dist/plugin-mode/plugin-operation-contract.js.map +1 -0
  161. package/dist/plugin-mode/plugin-operation-tools.d.ts +20 -0
  162. package/dist/plugin-mode/plugin-operation-tools.d.ts.map +1 -0
  163. package/dist/plugin-mode/plugin-operation-tools.js +289 -0
  164. package/dist/plugin-mode/plugin-operation-tools.js.map +1 -0
  165. package/dist/preview-session.d.ts +5 -0
  166. package/dist/preview-session.d.ts.map +1 -1
  167. package/dist/preview-session.js +23 -5
  168. package/dist/preview-session.js.map +1 -1
  169. package/dist/project.d.ts.map +1 -1
  170. package/dist/project.js +1 -7
  171. package/dist/project.js.map +1 -1
  172. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
  173. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +4 -0
  174. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
  175. package/node_modules/@noodle-borg/agent-kit/dist/curated/hook-notes.js +1 -1
  176. package/node_modules/@noodle-borg/agent-kit/dist/curated/hook-notes.js.map +1 -1
  177. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +5 -5
  178. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
  179. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
  180. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +1 -0
  181. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
  182. package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.d.ts.map +1 -1
  183. package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.js +16 -12
  184. package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.js.map +1 -1
  185. package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.js +9 -9
  186. package/node_modules/@noodle-borg/agent-kit/dist/skill-design-refs.d.ts.map +1 -1
  187. package/node_modules/@noodle-borg/agent-kit/dist/skill-design-refs.js +12 -0
  188. package/node_modules/@noodle-borg/agent-kit/dist/skill-design-refs.js.map +1 -1
  189. package/node_modules/@noodle-borg/agent-kit/dist/skill-feedback-ref.js +4 -4
  190. package/node_modules/@noodle-borg/agent-kit/dist/skill-feedback-ref.js.map +1 -1
  191. package/node_modules/@noodle-borg/agent-kit/dist/skill-router.d.ts.map +1 -1
  192. package/node_modules/@noodle-borg/agent-kit/dist/skill-router.js +6 -3
  193. package/node_modules/@noodle-borg/agent-kit/dist/skill-router.js.map +1 -1
  194. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  195. package/node_modules/@noodle-borg/auth/dist/verify.d.ts +3 -1
  196. package/node_modules/@noodle-borg/auth/dist/verify.d.ts.map +1 -1
  197. package/node_modules/@noodle-borg/auth/dist/verify.js +16 -4
  198. package/node_modules/@noodle-borg/auth/dist/verify.js.map +1 -1
  199. package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.d.ts +0 -2
  200. package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.d.ts.map +1 -1
  201. package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.js +0 -76
  202. package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.js.map +1 -1
  203. package/node_modules/@noodle-borg/connector-defs/dist/index.d.ts +1 -1
  204. package/node_modules/@noodle-borg/connector-defs/dist/index.d.ts.map +1 -1
  205. package/node_modules/@noodle-borg/connector-defs/dist/index.js.map +1 -1
  206. package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts +2 -8
  207. package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts.map +1 -1
  208. package/node_modules/@noodle-borg/connector-http/dist/http-connector.js +8 -237
  209. package/node_modules/@noodle-borg/connector-http/dist/http-connector.js.map +1 -1
  210. package/node_modules/@noodle-borg/connector-http/dist/http-response.d.ts +26 -0
  211. package/node_modules/@noodle-borg/connector-http/dist/http-response.d.ts.map +1 -0
  212. package/node_modules/@noodle-borg/connector-http/dist/http-response.js +249 -0
  213. package/node_modules/@noodle-borg/connector-http/dist/http-response.js.map +1 -0
  214. package/node_modules/@noodle-borg/module-audit/dist/route.d.ts +0 -2
  215. package/node_modules/@noodle-borg/module-audit/dist/route.d.ts.map +1 -1
  216. package/node_modules/@noodle-borg/module-audit/dist/route.js +0 -4
  217. package/node_modules/@noodle-borg/module-audit/dist/route.js.map +1 -1
  218. package/node_modules/@noodle-borg/protocol/dist/input-validation.d.ts +0 -2
  219. package/node_modules/@noodle-borg/protocol/dist/input-validation.d.ts.map +1 -1
  220. package/node_modules/@noodle-borg/protocol/dist/input-validation.js +1 -5
  221. package/node_modules/@noodle-borg/protocol/dist/input-validation.js.map +1 -1
  222. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts +0 -2
  223. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts.map +1 -1
  224. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js +0 -7
  225. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js.map +1 -1
  226. package/node_modules/@noodle-borg/service/dist/credential-binding-index.d.ts +1 -3
  227. package/node_modules/@noodle-borg/service/dist/credential-binding-index.d.ts.map +1 -1
  228. package/node_modules/@noodle-borg/service/dist/credential-binding-index.js +1 -14
  229. package/node_modules/@noodle-borg/service/dist/credential-binding-index.js.map +1 -1
  230. package/node_modules/@noodle-borg/service/dist/customer-verifier.d.ts.map +1 -1
  231. package/node_modules/@noodle-borg/service/dist/customer-verifier.js +8 -5
  232. package/node_modules/@noodle-borg/service/dist/customer-verifier.js.map +1 -1
  233. package/node_modules/@noodle-borg/service/dist/index.d.ts +5 -5
  234. package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
  235. package/node_modules/@noodle-borg/service/dist/index.js +1 -1
  236. package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
  237. package/node_modules/@noodle-borg/service/dist/mcp-public-routing.d.ts +0 -2
  238. package/node_modules/@noodle-borg/service/dist/mcp-public-routing.d.ts.map +1 -1
  239. package/node_modules/@noodle-borg/service/dist/mcp-public-routing.js +0 -6
  240. package/node_modules/@noodle-borg/service/dist/mcp-public-routing.js.map +1 -1
  241. package/node_modules/@noodle-borg/service/dist/oauth/console-url.d.ts +2 -0
  242. package/node_modules/@noodle-borg/service/dist/oauth/console-url.d.ts.map +1 -0
  243. package/node_modules/@noodle-borg/service/dist/oauth/console-url.js +4 -0
  244. package/node_modules/@noodle-borg/service/dist/oauth/console-url.js.map +1 -0
  245. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.d.ts.map +1 -1
  246. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js +2 -1
  247. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js.map +1 -1
  248. package/node_modules/@noodle-borg/service/dist/registry-targets.d.ts +1 -3
  249. package/node_modules/@noodle-borg/service/dist/registry-targets.d.ts.map +1 -1
  250. package/node_modules/@noodle-borg/service/dist/registry-targets.js +0 -17
  251. package/node_modules/@noodle-borg/service/dist/registry-targets.js.map +1 -1
  252. package/node_modules/@noodle-borg/service/package.json +0 -1
  253. package/package.json +1 -1
  254. package/node_modules/@noodle-borg/compiler/dist/widget-tailwind-tokens.d.ts +0 -2
  255. package/node_modules/@noodle-borg/compiler/dist/widget-tailwind-tokens.d.ts.map +0 -1
  256. package/node_modules/@noodle-borg/compiler/dist/widget-tailwind-tokens.js +0 -22
  257. 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"}