@ethlete/cli 3.0.0-next.25 → 3.0.0-next.27

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 (592) hide show
  1. package/CHANGELOG.md +417 -0
  2. package/build-info.json +1 -0
  3. package/design/define-call.ts +99 -31
  4. package/design/define-part.ts +50 -3
  5. package/design/icon-sheet.ts +1 -1
  6. package/design/interaction-rows.ts +13 -6
  7. package/design/logo-sheet.ts +52 -0
  8. package/design/mark-part.ts +51 -1
  9. package/design/motion-drive.ts +215 -0
  10. package/design/motion-runtime.ts +14 -2
  11. package/design/motion-tokens.ts +177 -0
  12. package/design/token-sheet.ts +1 -1
  13. package/design/web/frame-fill.ts +4 -0
  14. package/design/web/frame-fit.ts +7 -0
  15. package/design/web/frame-scheme.ts +44 -0
  16. package/design/web/frame-surfaces.ts +294 -0
  17. package/design/web/frame.ts +162 -43
  18. package/design/web/surface-interactive.css +42 -0
  19. package/design/with-action.ts +29 -0
  20. package/package.json +3 -1
  21. package/src/index.js +9 -1
  22. package/src/index.js.map +1 -1
  23. package/src/lib/design/asset-shot.js +2 -2
  24. package/src/lib/design/asset-shot.js.map +1 -1
  25. package/src/lib/design/build-watch.d.ts +26 -0
  26. package/src/lib/design/build-watch.js +138 -0
  27. package/src/lib/design/build-watch.js.map +1 -0
  28. package/src/lib/design/calls-tsconfig.d.ts +2 -0
  29. package/src/lib/design/calls-tsconfig.js +10 -3
  30. package/src/lib/design/calls-tsconfig.js.map +1 -1
  31. package/src/lib/design/check.d.ts +1 -0
  32. package/src/lib/design/check.js +195 -13
  33. package/src/lib/design/check.js.map +1 -1
  34. package/src/lib/design/commit-hunks.d.ts +22 -0
  35. package/src/lib/design/commit-hunks.js +173 -0
  36. package/src/lib/design/commit-hunks.js.map +1 -0
  37. package/src/lib/design/contact-sheet.d.ts +9 -0
  38. package/src/lib/design/contact-sheet.js +38 -4
  39. package/src/lib/design/contact-sheet.js.map +1 -1
  40. package/src/lib/design/design-command.d.ts +2 -0
  41. package/src/lib/design/design-command.js +183 -15
  42. package/src/lib/design/design-command.js.map +1 -1
  43. package/src/lib/design/draw-ledger.d.ts +36 -0
  44. package/src/lib/design/draw-ledger.js +52 -0
  45. package/src/lib/design/draw-ledger.js.map +1 -0
  46. package/src/lib/design/force-interactions.d.ts +1 -1
  47. package/src/lib/design/force-interactions.js +4 -2
  48. package/src/lib/design/force-interactions.js.map +1 -1
  49. package/src/lib/design/inbox-command.js +9 -5
  50. package/src/lib/design/inbox-command.js.map +1 -1
  51. package/src/lib/design/mcp-command.d.ts +28 -3
  52. package/src/lib/design/mcp-command.js +134 -21
  53. package/src/lib/design/mcp-command.js.map +1 -1
  54. package/src/lib/design/merge-compare.d.ts +10 -2
  55. package/src/lib/design/merge-compare.js +63 -11
  56. package/src/lib/design/merge-compare.js.map +1 -1
  57. package/src/lib/design/motion-command.js +10 -16
  58. package/src/lib/design/motion-command.js.map +1 -1
  59. package/src/lib/design/motion-shot.js +3 -2
  60. package/src/lib/design/motion-shot.js.map +1 -1
  61. package/src/lib/design/new-call.js +19 -10
  62. package/src/lib/design/new-call.js.map +1 -1
  63. package/src/lib/design/part-marks.d.ts +3 -2
  64. package/src/lib/design/part-marks.js +13 -5
  65. package/src/lib/design/part-marks.js.map +1 -1
  66. package/src/lib/design/paths.d.ts +42 -0
  67. package/src/lib/design/paths.js +50 -1
  68. package/src/lib/design/paths.js.map +1 -1
  69. package/src/lib/design/product-command.d.ts +1 -1
  70. package/src/lib/design/product-command.js +12 -14
  71. package/src/lib/design/product-command.js.map +1 -1
  72. package/src/lib/design/ready-shots.d.ts +29 -3
  73. package/src/lib/design/ready-shots.js +105 -5
  74. package/src/lib/design/ready-shots.js.map +1 -1
  75. package/src/lib/design/render-packages.d.ts +9 -17
  76. package/src/lib/design/render-packages.js +25 -63
  77. package/src/lib/design/render-packages.js.map +1 -1
  78. package/src/lib/design/render-worker.js +2 -3
  79. package/src/lib/design/render-worker.js.map +1 -1
  80. package/src/lib/design/render.d.ts +2 -0
  81. package/src/lib/design/render.js +32 -7
  82. package/src/lib/design/render.js.map +1 -1
  83. package/src/lib/design/serve.d.ts +23 -3
  84. package/src/lib/design/serve.js +288 -35
  85. package/src/lib/design/serve.js.map +1 -1
  86. package/src/lib/design/server-identity.d.ts +36 -0
  87. package/src/lib/design/server-identity.js +68 -0
  88. package/src/lib/design/server-identity.js.map +1 -0
  89. package/src/lib/design/settle-frames.d.ts +4 -0
  90. package/src/lib/design/settle-frames.js +22 -0
  91. package/src/lib/design/settle-frames.js.map +1 -0
  92. package/src/lib/design/shot-command.d.ts +30 -6
  93. package/src/lib/design/shot-command.js +144 -56
  94. package/src/lib/design/shot-command.js.map +1 -1
  95. package/src/lib/design/shot-store.d.ts +24 -0
  96. package/src/lib/design/shot-store.js +120 -0
  97. package/src/lib/design/shot-store.js.map +1 -0
  98. package/src/lib/design/shot.d.ts +71 -1
  99. package/src/lib/design/shot.js +253 -40
  100. package/src/lib/design/shot.js.map +1 -1
  101. package/src/lib/design/sketch-command.d.ts +6 -1
  102. package/src/lib/design/sketch-command.js +452 -136
  103. package/src/lib/design/sketch-command.js.map +1 -1
  104. package/src/lib/design/ssr-shims.d.ts +2 -0
  105. package/src/lib/design/ssr-shims.js +12 -1
  106. package/src/lib/design/ssr-shims.js.map +1 -1
  107. package/src/lib/design/stale-cli-dist.d.ts +11 -0
  108. package/src/lib/design/stale-cli-dist.js +56 -0
  109. package/src/lib/design/stale-cli-dist.js.map +1 -0
  110. package/src/lib/design/stamp.d.ts +18 -1
  111. package/src/lib/design/stamp.js +53 -7
  112. package/src/lib/design/stamp.js.map +1 -1
  113. package/src/lib/design/started-by-studio.d.ts +1 -0
  114. package/src/lib/design/started-by-studio.js +6 -0
  115. package/src/lib/design/started-by-studio.js.map +1 -0
  116. package/src/lib/design/studio-api.d.ts +35 -4
  117. package/src/lib/design/studio-api.js +312 -41
  118. package/src/lib/design/studio-api.js.map +1 -1
  119. package/src/lib/design/system/accept-command.d.ts +39 -5
  120. package/src/lib/design/system/accept-command.js +109 -25
  121. package/src/lib/design/system/accept-command.js.map +1 -1
  122. package/src/lib/design/system/accepted-pictures.d.ts +83 -0
  123. package/src/lib/design/system/accepted-pictures.js +324 -0
  124. package/src/lib/design/system/accepted-pictures.js.map +1 -0
  125. package/src/lib/design/system/action-lost.d.ts +59 -0
  126. package/src/lib/design/system/action-lost.js +120 -0
  127. package/src/lib/design/system/action-lost.js.map +1 -0
  128. package/src/lib/design/system/action-press.d.ts +23 -0
  129. package/src/lib/design/system/action-press.js +76 -0
  130. package/src/lib/design/system/action-press.js.map +1 -0
  131. package/src/lib/design/system/action-undeclared.d.ts +34 -0
  132. package/src/lib/design/system/action-undeclared.js +81 -0
  133. package/src/lib/design/system/action-undeclared.js.map +1 -0
  134. package/src/lib/design/system/actions-command.d.ts +101 -0
  135. package/src/lib/design/system/actions-command.js +695 -0
  136. package/src/lib/design/system/actions-command.js.map +1 -0
  137. package/src/lib/design/system/actions.d.ts +158 -0
  138. package/src/lib/design/system/actions.js +295 -0
  139. package/src/lib/design/system/actions.js.map +1 -0
  140. package/src/lib/design/system/app-files.d.ts +10 -0
  141. package/src/lib/design/system/app-files.js +159 -0
  142. package/src/lib/design/system/app-files.js.map +1 -0
  143. package/src/lib/design/system/bespoke-controls.d.ts +30 -0
  144. package/src/lib/design/system/bespoke-controls.js +147 -0
  145. package/src/lib/design/system/bespoke-controls.js.map +1 -0
  146. package/src/lib/design/system/build-ready-contract.d.ts +27 -0
  147. package/src/lib/design/system/build-ready-contract.js +12 -0
  148. package/src/lib/design/system/build-ready-contract.js.map +1 -0
  149. package/src/lib/design/system/check-rules.d.ts +1 -0
  150. package/src/lib/design/system/check-rules.js +82 -0
  151. package/src/lib/design/system/check-rules.js.map +1 -0
  152. package/src/lib/design/system/check-system.d.ts +62 -3
  153. package/src/lib/design/system/check-system.js +527 -34
  154. package/src/lib/design/system/check-system.js.map +1 -1
  155. package/src/lib/design/system/colour.d.ts +4 -1
  156. package/src/lib/design/system/colour.js +54 -2
  157. package/src/lib/design/system/colour.js.map +1 -1
  158. package/src/lib/design/system/comments/comment.d.ts +4 -1
  159. package/src/lib/design/system/comments/comment.js +13 -4
  160. package/src/lib/design/system/comments/comment.js.map +1 -1
  161. package/src/lib/design/system/comments/inbox.js +2 -2
  162. package/src/lib/design/system/comments/inbox.js.map +1 -1
  163. package/src/lib/design/system/compare-command.d.ts +119 -0
  164. package/src/lib/design/system/compare-command.js +558 -0
  165. package/src/lib/design/system/compare-command.js.map +1 -0
  166. package/src/lib/design/system/complete-command.js +7 -3
  167. package/src/lib/design/system/complete-command.js.map +1 -1
  168. package/src/lib/design/system/complete.d.ts +99 -3
  169. package/src/lib/design/system/complete.js +358 -88
  170. package/src/lib/design/system/complete.js.map +1 -1
  171. package/src/lib/design/system/component-outputs.d.ts +20 -0
  172. package/src/lib/design/system/component-outputs.js +86 -0
  173. package/src/lib/design/system/component-outputs.js.map +1 -0
  174. package/src/lib/design/system/contrast-check.d.ts +6 -1
  175. package/src/lib/design/system/contrast-check.js +179 -13
  176. package/src/lib/design/system/contrast-check.js.map +1 -1
  177. package/src/lib/design/system/demo-backdrop.d.ts +11 -0
  178. package/src/lib/design/system/demo-backdrop.js +41 -0
  179. package/src/lib/design/system/demo-backdrop.js.map +1 -0
  180. package/src/lib/design/system/design-hash.d.ts +31 -0
  181. package/src/lib/design/system/design-hash.js +73 -0
  182. package/src/lib/design/system/design-hash.js.map +1 -0
  183. package/src/lib/design/system/disabled-interaction.d.ts +8 -0
  184. package/src/lib/design/system/disabled-interaction.js +37 -0
  185. package/src/lib/design/system/disabled-interaction.js.map +1 -0
  186. package/src/lib/design/system/dom-command.d.ts +36 -0
  187. package/src/lib/design/system/dom-command.js +175 -0
  188. package/src/lib/design/system/dom-command.js.map +1 -0
  189. package/src/lib/design/system/drawn-open-points.d.ts +38 -0
  190. package/src/lib/design/system/drawn-open-points.js +94 -0
  191. package/src/lib/design/system/drawn-open-points.js.map +1 -0
  192. package/src/lib/design/system/dropped-props.d.ts +25 -0
  193. package/src/lib/design/system/dropped-props.js +159 -0
  194. package/src/lib/design/system/dropped-props.js.map +1 -0
  195. package/src/lib/design/system/embedded-actions.d.ts +21 -0
  196. package/src/lib/design/system/embedded-actions.js +37 -0
  197. package/src/lib/design/system/embedded-actions.js.map +1 -0
  198. package/src/lib/design/system/exceptions.js +2 -1
  199. package/src/lib/design/system/exceptions.js.map +1 -1
  200. package/src/lib/design/system/flows/flow.js +2 -1
  201. package/src/lib/design/system/flows/flow.js.map +1 -1
  202. package/src/lib/design/system/frozen-animations.d.ts +13 -0
  203. package/src/lib/design/system/frozen-animations.js +51 -0
  204. package/src/lib/design/system/frozen-animations.js.map +1 -0
  205. package/src/lib/design/system/go-batch.d.ts +24 -0
  206. package/src/lib/design/system/go-batch.js +110 -0
  207. package/src/lib/design/system/go-batch.js.map +1 -0
  208. package/src/lib/design/system/go-command.d.ts +4 -0
  209. package/src/lib/design/system/go-command.js +64 -0
  210. package/src/lib/design/system/go-command.js.map +1 -0
  211. package/src/lib/design/system/go-guard.d.ts +26 -0
  212. package/src/lib/design/system/go-guard.js +70 -0
  213. package/src/lib/design/system/go-guard.js.map +1 -0
  214. package/src/lib/design/system/go-step.d.ts +13 -0
  215. package/src/lib/design/system/go-step.js +84 -0
  216. package/src/lib/design/system/go-step.js.map +1 -0
  217. package/src/lib/design/system/handoff.js +2 -1
  218. package/src/lib/design/system/handoff.js.map +1 -1
  219. package/src/lib/design/system/harness-build-cache.d.ts +35 -0
  220. package/src/lib/design/system/harness-build-cache.js +175 -0
  221. package/src/lib/design/system/harness-build-cache.js.map +1 -0
  222. package/src/lib/design/system/harness-command.d.ts +7 -0
  223. package/src/lib/design/system/harness-command.js +51 -0
  224. package/src/lib/design/system/harness-command.js.map +1 -0
  225. package/src/lib/design/system/harness-config.d.ts +9 -0
  226. package/src/lib/design/system/harness-config.js +65 -0
  227. package/src/lib/design/system/harness-config.js.map +1 -0
  228. package/src/lib/design/system/harness-map.d.ts +44 -0
  229. package/src/lib/design/system/harness-map.js +126 -0
  230. package/src/lib/design/system/harness-map.js.map +1 -0
  231. package/src/lib/design/system/harness-samples.d.ts +20 -0
  232. package/src/lib/design/system/harness-samples.js +92 -0
  233. package/src/lib/design/system/harness-samples.js.map +1 -0
  234. package/src/lib/design/system/harness-server.d.ts +40 -0
  235. package/src/lib/design/system/harness-server.js +296 -0
  236. package/src/lib/design/system/harness-server.js.map +1 -0
  237. package/src/lib/design/system/imports.js +14 -1
  238. package/src/lib/design/system/imports.js.map +1 -1
  239. package/src/lib/design/system/in-order-at-once.d.ts +6 -0
  240. package/src/lib/design/system/in-order-at-once.js +28 -0
  241. package/src/lib/design/system/in-order-at-once.js.map +1 -0
  242. package/src/lib/design/system/inventory-approval.js +2 -1
  243. package/src/lib/design/system/inventory-approval.js.map +1 -1
  244. package/src/lib/design/system/inventory.d.ts +13 -4
  245. package/src/lib/design/system/inventory.js +36 -7
  246. package/src/lib/design/system/inventory.js.map +1 -1
  247. package/src/lib/design/system/list-system.d.ts +8 -1
  248. package/src/lib/design/system/list-system.js +13 -3
  249. package/src/lib/design/system/list-system.js.map +1 -1
  250. package/src/lib/design/system/live-actions.d.ts +121 -0
  251. package/src/lib/design/system/live-actions.js +665 -0
  252. package/src/lib/design/system/live-actions.js.map +1 -0
  253. package/src/lib/design/system/live-compare.d.ts +136 -0
  254. package/src/lib/design/system/live-compare.js +441 -0
  255. package/src/lib/design/system/live-compare.js.map +1 -0
  256. package/src/lib/design/system/live-uncovered.d.ts +40 -0
  257. package/src/lib/design/system/live-uncovered.js +123 -0
  258. package/src/lib/design/system/live-uncovered.js.map +1 -0
  259. package/src/lib/design/system/nested-scroll.d.ts +7 -0
  260. package/src/lib/design/system/nested-scroll.js +25 -0
  261. package/src/lib/design/system/nested-scroll.js.map +1 -0
  262. package/src/lib/design/system/notes/note.js +2 -1
  263. package/src/lib/design/system/notes/note.js.map +1 -1
  264. package/src/lib/design/system/occluded.d.ts +13 -0
  265. package/src/lib/design/system/occluded.js +111 -0
  266. package/src/lib/design/system/occluded.js.map +1 -0
  267. package/src/lib/design/system/open-points.d.ts +119 -0
  268. package/src/lib/design/system/open-points.js +185 -0
  269. package/src/lib/design/system/open-points.js.map +1 -0
  270. package/src/lib/design/system/part-build-ready.d.ts +39 -0
  271. package/src/lib/design/system/part-build-ready.js +107 -0
  272. package/src/lib/design/system/part-build-ready.js.map +1 -0
  273. package/src/lib/design/system/part-command.js +2 -9
  274. package/src/lib/design/system/part-command.js.map +1 -1
  275. package/src/lib/design/system/part-compare.d.ts +123 -0
  276. package/src/lib/design/system/part-compare.js +396 -0
  277. package/src/lib/design/system/part-compare.js.map +1 -0
  278. package/src/lib/design/system/part-go.d.ts +70 -0
  279. package/src/lib/design/system/part-go.js +94 -0
  280. package/src/lib/design/system/part-go.js.map +1 -0
  281. package/src/lib/design/system/part-ready.d.ts +90 -0
  282. package/src/lib/design/system/part-ready.js +172 -0
  283. package/src/lib/design/system/part-ready.js.map +1 -0
  284. package/src/lib/design/system/part-task.d.ts +147 -0
  285. package/src/lib/design/system/part-task.js +285 -0
  286. package/src/lib/design/system/part-task.js.map +1 -0
  287. package/src/lib/design/system/pointer-focus.d.ts +81 -0
  288. package/src/lib/design/system/pointer-focus.js +152 -0
  289. package/src/lib/design/system/pointer-focus.js.map +1 -0
  290. package/src/lib/design/system/prettier.d.ts +10 -0
  291. package/src/lib/design/system/prettier.js +36 -0
  292. package/src/lib/design/system/prettier.js.map +1 -0
  293. package/src/lib/design/system/reach.d.ts +12 -0
  294. package/src/lib/design/system/reach.js +186 -0
  295. package/src/lib/design/system/reach.js.map +1 -0
  296. package/src/lib/design/system/reachable-controls.d.ts +6 -0
  297. package/src/lib/design/system/reachable-controls.js +19 -0
  298. package/src/lib/design/system/reachable-controls.js.map +1 -0
  299. package/src/lib/design/system/reachable-files.d.ts +14 -0
  300. package/src/lib/design/system/reachable-files.js +101 -0
  301. package/src/lib/design/system/reachable-files.js.map +1 -0
  302. package/src/lib/design/system/reached-state.d.ts +23 -0
  303. package/src/lib/design/system/reached-state.js +53 -0
  304. package/src/lib/design/system/reached-state.js.map +1 -0
  305. package/src/lib/design/system/read-open-points.d.ts +33 -0
  306. package/src/lib/design/system/read-open-points.js +110 -0
  307. package/src/lib/design/system/read-open-points.js.map +1 -0
  308. package/src/lib/design/system/ready-command.d.ts +11 -0
  309. package/src/lib/design/system/ready-command.js +82 -0
  310. package/src/lib/design/system/ready-command.js.map +1 -0
  311. package/src/lib/design/system/render-check.d.ts +52 -0
  312. package/src/lib/design/system/render-check.js +479 -60
  313. package/src/lib/design/system/render-check.js.map +1 -1
  314. package/src/lib/design/system/resolve-product.d.ts +2 -1
  315. package/src/lib/design/system/resolve-product.js +25 -3
  316. package/src/lib/design/system/resolve-product.js.map +1 -1
  317. package/src/lib/design/system/rules/app-spec.d.ts +30 -0
  318. package/src/lib/design/system/rules/app-spec.js +87 -0
  319. package/src/lib/design/system/rules/app-spec.js.map +1 -0
  320. package/src/lib/design/system/rules/canonical-class.d.ts +2 -0
  321. package/src/lib/design/system/rules/canonical-class.js +36 -110
  322. package/src/lib/design/system/rules/canonical-class.js.map +1 -1
  323. package/src/lib/design/system/rules/capability-place.d.ts +44 -0
  324. package/src/lib/design/system/rules/capability-place.js +116 -0
  325. package/src/lib/design/system/rules/capability-place.js.map +1 -0
  326. package/src/lib/design/system/rules/denied-class.d.ts +9 -0
  327. package/src/lib/design/system/rules/denied-class.js +121 -0
  328. package/src/lib/design/system/rules/denied-class.js.map +1 -0
  329. package/src/lib/design/system/rules/exemptions.d.ts +18 -0
  330. package/src/lib/design/system/rules/exemptions.js +18 -0
  331. package/src/lib/design/system/rules/exemptions.js.map +1 -0
  332. package/src/lib/design/system/rules/flow.js +1 -1
  333. package/src/lib/design/system/rules/flow.js.map +1 -1
  334. package/src/lib/design/system/rules/glued-interpolation.d.ts +8 -0
  335. package/src/lib/design/system/rules/glued-interpolation.js +61 -0
  336. package/src/lib/design/system/rules/glued-interpolation.js.map +1 -0
  337. package/src/lib/design/system/rules/hard-coded-colour.js +2 -1
  338. package/src/lib/design/system/rules/hard-coded-colour.js.map +1 -1
  339. package/src/lib/design/system/rules/implemented-components.d.ts +22 -0
  340. package/src/lib/design/system/rules/implemented-components.js +45 -0
  341. package/src/lib/design/system/rules/implemented-components.js.map +1 -0
  342. package/src/lib/design/system/rules/implements.d.ts +8 -0
  343. package/src/lib/design/system/rules/implements.js +48 -0
  344. package/src/lib/design/system/rules/implements.js.map +1 -0
  345. package/src/lib/design/system/rules/inline-svg.js +4 -1
  346. package/src/lib/design/system/rules/inline-svg.js.map +1 -1
  347. package/src/lib/design/system/rules/inline-ui-in-page-open.d.ts +13 -0
  348. package/src/lib/design/system/rules/inline-ui-in-page-open.js +5 -0
  349. package/src/lib/design/system/rules/inline-ui-in-page-open.js.map +1 -0
  350. package/src/lib/design/system/rules/inline-ui-in-page.d.ts +18 -0
  351. package/src/lib/design/system/rules/inline-ui-in-page.js +123 -0
  352. package/src/lib/design/system/rules/inline-ui-in-page.js.map +1 -0
  353. package/src/lib/design/system/rules/inline-ui.d.ts +16 -0
  354. package/src/lib/design/system/rules/inline-ui.js +100 -0
  355. package/src/lib/design/system/rules/inline-ui.js.map +1 -0
  356. package/src/lib/design/system/rules/motion.d.ts +2 -0
  357. package/src/lib/design/system/rules/motion.js +35 -2
  358. package/src/lib/design/system/rules/motion.js.map +1 -1
  359. package/src/lib/design/system/rules/native-title.d.ts +7 -0
  360. package/src/lib/design/system/rules/native-title.js +64 -0
  361. package/src/lib/design/system/rules/native-title.js.map +1 -0
  362. package/src/lib/design/system/rules/option-values.d.ts +15 -0
  363. package/src/lib/design/system/rules/option-values.js +145 -0
  364. package/src/lib/design/system/rules/option-values.js.map +1 -0
  365. package/src/lib/design/system/rules/orphan-endpoint-known.d.ts +12 -0
  366. package/src/lib/design/system/rules/orphan-endpoint-known.js +20 -0
  367. package/src/lib/design/system/rules/orphan-endpoint-known.js.map +1 -0
  368. package/src/lib/design/system/rules/orphan-endpoint.d.ts +23 -0
  369. package/src/lib/design/system/rules/orphan-endpoint.js +166 -0
  370. package/src/lib/design/system/rules/orphan-endpoint.js.map +1 -0
  371. package/src/lib/design/system/rules/part-rewrite.d.ts +13 -0
  372. package/src/lib/design/system/rules/part-rewrite.js +125 -0
  373. package/src/lib/design/system/rules/part-rewrite.js.map +1 -0
  374. package/src/lib/design/system/rules/sample-default-known.d.ts +5 -0
  375. package/src/lib/design/system/rules/sample-default-known.js +17 -0
  376. package/src/lib/design/system/rules/sample-default-known.js.map +1 -0
  377. package/src/lib/design/system/rules/sample-default.d.ts +22 -0
  378. package/src/lib/design/system/rules/sample-default.js +92 -0
  379. package/src/lib/design/system/rules/sample-default.js.map +1 -0
  380. package/src/lib/design/system/rules/stale-replace.js +45 -3
  381. package/src/lib/design/system/rules/stale-replace.js.map +1 -1
  382. package/src/lib/design/system/rules/state-in-component.d.ts +16 -0
  383. package/src/lib/design/system/rules/state-in-component.js +101 -0
  384. package/src/lib/design/system/rules/state-in-component.js.map +1 -0
  385. package/src/lib/design/system/rules/tailwind-classes.d.ts +51 -0
  386. package/src/lib/design/system/rules/tailwind-classes.js +232 -0
  387. package/src/lib/design/system/rules/tailwind-classes.js.map +1 -0
  388. package/src/lib/design/system/rules/top-level-await.d.ts +9 -0
  389. package/src/lib/design/system/rules/top-level-await.js +62 -0
  390. package/src/lib/design/system/rules/top-level-await.js.map +1 -0
  391. package/src/lib/design/system/rules/unbound-input-known.d.ts +5 -0
  392. package/src/lib/design/system/rules/unbound-input-known.js +47 -0
  393. package/src/lib/design/system/rules/unbound-input-known.js.map +1 -0
  394. package/src/lib/design/system/rules/unbound-input.d.ts +22 -0
  395. package/src/lib/design/system/rules/unbound-input.js +61 -0
  396. package/src/lib/design/system/rules/unbound-input.js.map +1 -0
  397. package/src/lib/design/system/rules/uncovered-region.d.ts +13 -0
  398. package/src/lib/design/system/rules/uncovered-region.js +36 -0
  399. package/src/lib/design/system/rules/uncovered-region.js.map +1 -0
  400. package/src/lib/design/system/rules/undefined-class.d.ts +9 -0
  401. package/src/lib/design/system/rules/undefined-class.js +32 -0
  402. package/src/lib/design/system/rules/undefined-class.js.map +1 -0
  403. package/src/lib/design/system/rules/undefined-token.d.ts +1 -1
  404. package/src/lib/design/system/rules/undefined-token.js +7 -61
  405. package/src/lib/design/system/rules/undefined-token.js.map +1 -1
  406. package/src/lib/design/system/rules/utility-css.d.ts +2 -1
  407. package/src/lib/design/system/rules/utility-css.js +29 -14
  408. package/src/lib/design/system/rules/utility-css.js.map +1 -1
  409. package/src/lib/design/system/rules/view-coverage.d.ts +8 -0
  410. package/src/lib/design/system/rules/view-coverage.js +51 -0
  411. package/src/lib/design/system/rules/view-coverage.js.map +1 -0
  412. package/src/lib/design/system/rules/visible-change.d.ts +20 -0
  413. package/src/lib/design/system/rules/visible-change.js +48 -0
  414. package/src/lib/design/system/rules/visible-change.js.map +1 -0
  415. package/src/lib/design/system/sdk-errors.d.ts +14 -0
  416. package/src/lib/design/system/sdk-errors.js +38 -0
  417. package/src/lib/design/system/sdk-errors.js.map +1 -0
  418. package/src/lib/design/system/see-through.d.ts +12 -0
  419. package/src/lib/design/system/see-through.js +112 -0
  420. package/src/lib/design/system/see-through.js.map +1 -0
  421. package/src/lib/design/system/settled-panes.d.ts +18 -0
  422. package/src/lib/design/system/settled-panes.js +70 -0
  423. package/src/lib/design/system/settled-panes.js.map +1 -0
  424. package/src/lib/design/system/sketch/after-merge.d.ts +11 -0
  425. package/src/lib/design/system/sketch/after-merge.js +51 -0
  426. package/src/lib/design/system/sketch/after-merge.js.map +1 -0
  427. package/src/lib/design/system/sketch/aktuell-placeholders.d.ts +30 -0
  428. package/src/lib/design/system/sketch/aktuell-placeholders.js +87 -0
  429. package/src/lib/design/system/sketch/aktuell-placeholders.js.map +1 -0
  430. package/src/lib/design/system/sketch/baseline.d.ts +29 -2
  431. package/src/lib/design/system/sketch/baseline.js +33 -9
  432. package/src/lib/design/system/sketch/baseline.js.map +1 -1
  433. package/src/lib/design/system/sketch/check-sketches.d.ts +11 -0
  434. package/src/lib/design/system/sketch/check-sketches.js +54 -6
  435. package/src/lib/design/system/sketch/check-sketches.js.map +1 -1
  436. package/src/lib/design/system/sketch/cli-args.d.ts +12 -2
  437. package/src/lib/design/system/sketch/cli-args.js +18 -3
  438. package/src/lib/design/system/sketch/cli-args.js.map +1 -1
  439. package/src/lib/design/system/sketch/edit-sketch.d.ts +21 -0
  440. package/src/lib/design/system/sketch/edit-sketch.js +117 -0
  441. package/src/lib/design/system/sketch/edit-sketch.js.map +1 -0
  442. package/src/lib/design/system/sketch/frame-budget.d.ts +24 -0
  443. package/src/lib/design/system/sketch/frame-budget.js +23 -0
  444. package/src/lib/design/system/sketch/frame-budget.js.map +1 -0
  445. package/src/lib/design/system/sketch/identical-renders.d.ts +31 -0
  446. package/src/lib/design/system/sketch/identical-renders.js +137 -0
  447. package/src/lib/design/system/sketch/identical-renders.js.map +1 -0
  448. package/src/lib/design/system/sketch/merge-shared.d.ts +2 -0
  449. package/src/lib/design/system/sketch/merge-shared.js +7 -10
  450. package/src/lib/design/system/sketch/merge-shared.js.map +1 -1
  451. package/src/lib/design/system/sketch/merge-step.d.ts +35 -0
  452. package/src/lib/design/system/sketch/merge-step.js +98 -0
  453. package/src/lib/design/system/sketch/merge-step.js.map +1 -0
  454. package/src/lib/design/system/sketch/merge.d.ts +10 -3
  455. package/src/lib/design/system/sketch/merge.js +122 -17
  456. package/src/lib/design/system/sketch/merge.js.map +1 -1
  457. package/src/lib/design/system/sketch/merged-layout.d.ts +17 -0
  458. package/src/lib/design/system/sketch/merged-layout.js +57 -0
  459. package/src/lib/design/system/sketch/merged-layout.js.map +1 -0
  460. package/src/lib/design/system/sketch/merged-parts.d.ts +41 -11
  461. package/src/lib/design/system/sketch/merged-parts.js +113 -50
  462. package/src/lib/design/system/sketch/merged-parts.js.map +1 -1
  463. package/src/lib/design/system/sketch/no-visible-change.d.ts +10 -0
  464. package/src/lib/design/system/sketch/no-visible-change.js +16 -6
  465. package/src/lib/design/system/sketch/no-visible-change.js.map +1 -1
  466. package/src/lib/design/system/sketch/part-definition.d.ts +56 -0
  467. package/src/lib/design/system/sketch/part-definition.js +129 -13
  468. package/src/lib/design/system/sketch/part-definition.js.map +1 -1
  469. package/src/lib/design/system/sketch/rebase-port.d.ts +24 -0
  470. package/src/lib/design/system/sketch/rebase-port.js +170 -0
  471. package/src/lib/design/system/sketch/rebase-port.js.map +1 -0
  472. package/src/lib/design/system/sketch/sample-mark-drift.d.ts +33 -0
  473. package/src/lib/design/system/sketch/sample-mark-drift.js +88 -0
  474. package/src/lib/design/system/sketch/sample-mark-drift.js.map +1 -0
  475. package/src/lib/design/system/sketch/sketch-check-worker.d.ts +1 -0
  476. package/src/lib/design/system/sketch/sketch-check-worker.js +27 -0
  477. package/src/lib/design/system/sketch/sketch-check-worker.js.map +1 -0
  478. package/src/lib/design/system/sketch/sketch-checker.d.ts +27 -0
  479. package/src/lib/design/system/sketch/sketch-checker.js +99 -0
  480. package/src/lib/design/system/sketch/sketch-checker.js.map +1 -0
  481. package/src/lib/design/system/sketch/sketch.d.ts +78 -2
  482. package/src/lib/design/system/sketch/sketch.js +247 -54
  483. package/src/lib/design/system/sketch/sketch.js.map +1 -1
  484. package/src/lib/design/system/sketch/stale-base.d.ts +22 -0
  485. package/src/lib/design/system/sketch/stale-base.js +56 -0
  486. package/src/lib/design/system/sketch/stale-base.js.map +1 -0
  487. package/src/lib/design/system/sketch/unchanged-states.d.ts +36 -1
  488. package/src/lib/design/system/sketch/unchanged-states.js +60 -17
  489. package/src/lib/design/system/sketch/unchanged-states.js.map +1 -1
  490. package/src/lib/design/system/sketch/unused-closure.js +26 -4
  491. package/src/lib/design/system/sketch/unused-closure.js.map +1 -1
  492. package/src/lib/design/system/sketch/unused-files.d.ts +1 -1
  493. package/src/lib/design/system/sketch/unused-files.js +6 -3
  494. package/src/lib/design/system/sketch/unused-files.js.map +1 -1
  495. package/src/lib/design/system/sketch/viewed-shots.d.ts +24 -0
  496. package/src/lib/design/system/sketch/viewed-shots.js +61 -0
  497. package/src/lib/design/system/sketch/viewed-shots.js.map +1 -0
  498. package/src/lib/design/system/slow-checks.d.ts +40 -0
  499. package/src/lib/design/system/slow-checks.js +197 -0
  500. package/src/lib/design/system/slow-checks.js.map +1 -0
  501. package/src/lib/design/system/slow-run.d.ts +57 -0
  502. package/src/lib/design/system/slow-run.js +253 -0
  503. package/src/lib/design/system/slow-run.js.map +1 -0
  504. package/src/lib/design/system/stale-design-mocks.d.ts +20 -0
  505. package/src/lib/design/system/stale-design-mocks.js +59 -0
  506. package/src/lib/design/system/stale-design-mocks.js.map +1 -0
  507. package/src/lib/design/system/stale-dist.d.ts +25 -0
  508. package/src/lib/design/system/stale-dist.js +91 -0
  509. package/src/lib/design/system/stale-dist.js.map +1 -0
  510. package/src/lib/design/system/stale-parts.d.ts +30 -0
  511. package/src/lib/design/system/stale-parts.js +106 -0
  512. package/src/lib/design/system/stale-parts.js.map +1 -0
  513. package/src/lib/design/system/surface-nesting.d.ts +11 -0
  514. package/src/lib/design/system/surface-nesting.js +86 -0
  515. package/src/lib/design/system/surface-nesting.js.map +1 -0
  516. package/src/lib/design/system/system-command.js +8 -6
  517. package/src/lib/design/system/system-command.js.map +1 -1
  518. package/src/lib/design/system/system-modules.d.ts +16 -1
  519. package/src/lib/design/system/system-modules.js +18 -2
  520. package/src/lib/design/system/system-modules.js.map +1 -1
  521. package/src/lib/design/system/system-tsconfig.js +2 -2
  522. package/src/lib/design/system/system-tsconfig.js.map +1 -1
  523. package/src/lib/design/system/task-command.d.ts +51 -0
  524. package/src/lib/design/system/task-command.js +233 -0
  525. package/src/lib/design/system/task-command.js.map +1 -0
  526. package/src/lib/design/system/theming-text.d.ts +2 -0
  527. package/src/lib/design/system/theming-text.js +6 -0
  528. package/src/lib/design/system/theming-text.js.map +1 -0
  529. package/src/lib/design/system/tom-confirm.d.ts +40 -0
  530. package/src/lib/design/system/tom-confirm.js +55 -0
  531. package/src/lib/design/system/tom-confirm.js.map +1 -0
  532. package/src/lib/design/system/touched-parts.d.ts +16 -0
  533. package/src/lib/design/system/touched-parts.js +122 -0
  534. package/src/lib/design/system/touched-parts.js.map +1 -0
  535. package/src/lib/design/system/ts-source.d.ts +5 -0
  536. package/src/lib/design/system/ts-source.js +35 -4
  537. package/src/lib/design/system/ts-source.js.map +1 -1
  538. package/src/lib/design/system/unchanged-rows.d.ts +15 -0
  539. package/src/lib/design/system/unchanged-rows.js +134 -0
  540. package/src/lib/design/system/unchanged-rows.js.map +1 -0
  541. package/src/lib/design/system/uncommitted-decisions.d.ts +6 -0
  542. package/src/lib/design/system/uncommitted-decisions.js +38 -0
  543. package/src/lib/design/system/uncommitted-decisions.js.map +1 -0
  544. package/src/lib/design/system/uncovered-regions.d.ts +61 -0
  545. package/src/lib/design/system/uncovered-regions.js +171 -0
  546. package/src/lib/design/system/uncovered-regions.js.map +1 -0
  547. package/src/lib/design/system/unused-base-parts.d.ts +7 -0
  548. package/src/lib/design/system/unused-base-parts.js +76 -0
  549. package/src/lib/design/system/unused-base-parts.js.map +1 -0
  550. package/src/lib/design/system/visible-change-command.d.ts +48 -0
  551. package/src/lib/design/system/visible-change-command.js +308 -0
  552. package/src/lib/design/system/visible-change-command.js.map +1 -0
  553. package/src/lib/design/system/visible-change-parts.d.ts +28 -0
  554. package/src/lib/design/system/visible-change-parts.js +96 -0
  555. package/src/lib/design/system/visible-change-parts.js.map +1 -0
  556. package/src/lib/design/system/visible-change.d.ts +82 -0
  557. package/src/lib/design/system/visible-change.js +149 -0
  558. package/src/lib/design/system/visible-change.js.map +1 -0
  559. package/src/lib/design/thumb.d.ts +50 -6
  560. package/src/lib/design/thumb.js +154 -54
  561. package/src/lib/design/thumb.js.map +1 -1
  562. package/src/lib/design/typecheck.d.ts +1 -1
  563. package/src/lib/design/typecheck.js +3 -3
  564. package/src/lib/design/typecheck.js.map +1 -1
  565. package/src/lib/design/unstable-cells.d.ts +23 -0
  566. package/src/lib/design/unstable-cells.js +40 -0
  567. package/src/lib/design/unstable-cells.js.map +1 -0
  568. package/src/lib/design/variant-diff.js +1 -1
  569. package/src/lib/design/variant-diff.js.map +1 -1
  570. package/src/lib/design/wait.d.ts +15 -0
  571. package/src/lib/design/wait.js +30 -0
  572. package/src/lib/design/wait.js.map +1 -0
  573. package/src/lib/json-file.d.ts +11 -0
  574. package/src/lib/json-file.js +21 -0
  575. package/src/lib/json-file.js.map +1 -0
  576. package/src/lib/source-hash.d.ts +7 -0
  577. package/src/lib/source-hash.js +62 -0
  578. package/src/lib/source-hash.js.map +1 -0
  579. package/src/lib/update/agent-setup.js +2 -1
  580. package/src/lib/update/agent-setup.js.map +1 -1
  581. package/src/lib/update/migration-manifest.d.ts +12 -0
  582. package/src/lib/update/migration-manifest.js +13 -0
  583. package/src/lib/update/migration-manifest.js.map +1 -1
  584. package/src/lib/update/migration-record.js +2 -1
  585. package/src/lib/update/migration-record.js.map +1 -1
  586. package/src/lib/update/pending.js +2 -1
  587. package/src/lib/update/pending.js.map +1 -1
  588. package/src/lib/update/run-migrations.d.ts +3 -2
  589. package/src/lib/update/run-migrations.js +38 -5
  590. package/src/lib/update/run-migrations.js.map +1 -1
  591. package/src/lib/update/tasks.js +2 -1
  592. package/src/lib/update/tasks.js.map +1 -1
@@ -0,0 +1,294 @@
1
+ export type FrameSurfaceTheme = {
2
+ name: string;
3
+ type: string;
4
+ elevation: number;
5
+ isDefault: boolean;
6
+ colorThemeVariants: Partial<Record<string, string>>;
7
+ };
8
+ export type FrameColorTheme = { name: string; type: string | null; isDefault: boolean };
9
+ export type FrameThemes = { surfaces: FrameSurfaceTheme[]; colors: FrameColorTheme[] };
10
+
11
+ export const AUTO_SURFACE_ATTRIBUTE = 'data-et-auto-surface';
12
+ export const SURFACE_INTERACTIVE_ATTRIBUTE = 'data-et-surface-interactive';
13
+ export const SEMANTIC_COLOR_ATTRIBUTE = 'data-et-semantic-color';
14
+
15
+ const SURFACE_CLASS_PREFIX = 'et-surface--';
16
+ const COLOR_CLASS_PREFIX = 'et-color--';
17
+ const SURFACE_INTERACTIVE_CLASS = 'et-surface-interactive';
18
+ const SURFACE_CLASS_SELECTOR = /^\.et-surface--([\w-]+)$/u;
19
+ const COLOR_CLASS_SELECTOR = /^\.et-color--([\w-]+)$/u;
20
+ const RESERVED_COLORS = new Set(['default', 'surface']);
21
+
22
+ const surfaceVarsOf = (style: CSSStyleDeclaration) => {
23
+ const type = style.getPropertyValue('--et-surface-type').trim();
24
+ const elevation = Number.parseInt(style.getPropertyValue('--et-surface-elevation'), 10);
25
+
26
+ return type && Number.isFinite(elevation) ? { type, elevation } : null;
27
+ };
28
+
29
+ const colorThemeVariantsOf = (style: CSSStyleDeclaration) =>
30
+ Object.fromEntries(
31
+ style
32
+ .getPropertyValue('--et-surface-color-theme-variants')
33
+ .split(',')
34
+ .map((entry) => entry.trim().split(/\s+/u))
35
+ .filter((pair): pair is [string, string] => pair.length === 2),
36
+ );
37
+
38
+ const scopeNamesOf = (rule: CSSStyleRule, selector: RegExp) =>
39
+ rule.selectorText
40
+ .split(',')
41
+ .map((part) => selector.exec(part.trim())?.[1])
42
+ .filter((name): name is string => name !== undefined);
43
+
44
+ const themesOfRules = (rules: CSSRuleList, themes: FrameThemes) => {
45
+ for (const rule of Array.from(rules)) {
46
+ if (rule instanceof CSSStyleRule) {
47
+ const surface = surfaceVarsOf(rule.style);
48
+
49
+ if (surface) {
50
+ const names = scopeNamesOf(rule, SURFACE_CLASS_SELECTOR);
51
+ const isDefault = names.includes(`default-${surface.type}`);
52
+ const registered = names.length > 1 ? names.filter((name) => name !== `default-${surface.type}`) : names;
53
+ const colorThemeVariants = colorThemeVariantsOf(rule.style);
54
+
55
+ registered.forEach((name) => themes.surfaces.push({ name, ...surface, isDefault, colorThemeVariants }));
56
+ }
57
+
58
+ if (rule.style.getPropertyValue('--et-color-primary')) {
59
+ const names = scopeNamesOf(rule, COLOR_CLASS_SELECTOR);
60
+ const type = rule.style.getPropertyValue('--et-color-theme-type').trim() || null;
61
+ const isDefault = names.includes('default');
62
+
63
+ names
64
+ .filter((name) => !RESERVED_COLORS.has(name))
65
+ .forEach((name) => themes.colors.push({ name, type, isDefault }));
66
+ }
67
+ }
68
+
69
+ if ('cssRules' in rule) themesOfRules((rule as CSSGroupingRule).cssRules, themes);
70
+ }
71
+
72
+ return themes;
73
+ };
74
+
75
+ const sheetThemes = new WeakMap<CSSStyleSheet, FrameThemes>();
76
+
77
+ /**
78
+ * The surface and colour themes the frame's stylesheets register, as the SDK's generated theme CSS writes them: every
79
+ * `.et-surface--<name>` rule that sets `--et-surface-type` and `--et-surface-elevation` (with its
80
+ * `--et-surface-color-theme-variants`), and every `.et-color--<name>` rule that sets `--et-color-primary` (with its
81
+ * `--et-color-theme-type`).
82
+ */
83
+ export const registeredThemesOf = (document: Document): FrameThemes => {
84
+ const all: FrameThemes = { surfaces: [], colors: [] };
85
+
86
+ for (const sheet of Array.from(document.styleSheets)) {
87
+ let themes = sheetThemes.get(sheet);
88
+
89
+ if (!themes) {
90
+ try {
91
+ themes = themesOfRules(sheet.cssRules, { surfaces: [], colors: [] });
92
+ } catch {
93
+ // A cross-origin sheet hides its rules.
94
+ continue;
95
+ }
96
+
97
+ sheetThemes.set(sheet, themes);
98
+ }
99
+
100
+ all.surfaces.push(...themes.surfaces);
101
+ all.colors.push(...themes.colors);
102
+ }
103
+
104
+ return all;
105
+ };
106
+
107
+ const surfaceThemeOf = (element: Element, themes: FrameSurfaceTheme[]): FrameSurfaceTheme | null => {
108
+ for (let current: Element | null = element; current; current = current.parentElement) {
109
+ for (const className of Array.from(current.classList)) {
110
+ if (!className.startsWith(SURFACE_CLASS_PREFIX)) continue;
111
+
112
+ const name = className.slice(SURFACE_CLASS_PREFIX.length);
113
+ const theme = themes.find((candidate) =>
114
+ name.startsWith('default-')
115
+ ? candidate.isDefault && `default-${candidate.type}` === name
116
+ : candidate.name === name,
117
+ );
118
+
119
+ if (theme) return theme;
120
+ }
121
+ }
122
+
123
+ const vars = surfaceVarsOf(getComputedStyle(element));
124
+ const matches = vars ? themes.filter((theme) => theme.type === vars.type && theme.elevation === vars.elevation) : [];
125
+
126
+ return matches.find((theme) => theme.isDefault) ?? matches[0] ?? null;
127
+ };
128
+
129
+ const colorVariantOf = (
130
+ surface: FrameSurfaceTheme | null,
131
+ { chosen, colors }: { chosen: string; colors: FrameColorTheme[] },
132
+ ) => {
133
+ const variant = surface?.colorThemeVariants[chosen];
134
+
135
+ return variant && colors.some((theme) => theme.name === variant) ? variant : chosen;
136
+ };
137
+
138
+ const appliedSurface = new WeakMap<Element, string>();
139
+ const appliedColor = new WeakMap<Element, { chosen: string; variant: string }>();
140
+
141
+ const defaultColorOf = (colors: FrameColorTheme[]) => colors.find((theme) => theme.isDefault)?.name ?? null;
142
+
143
+ const chosenColorOf = (element: Element | null, colors: FrameColorTheme[]) => {
144
+ for (let current = element; current; current = current.parentElement) {
145
+ const applied = appliedColor.get(current);
146
+
147
+ if (applied) return applied.chosen;
148
+
149
+ for (const className of Array.from(current.classList)) {
150
+ if (!className.startsWith(COLOR_CLASS_PREFIX)) continue;
151
+
152
+ const name = className.slice(COLOR_CLASS_PREFIX.length);
153
+
154
+ if (name === 'default') return defaultColorOf(colors);
155
+ if (colors.some((theme) => theme.name === name)) return name;
156
+ }
157
+ }
158
+
159
+ return defaultColorOf(colors);
160
+ };
161
+
162
+ const applyColor = (element: Element, color: { chosen: string; variant: string } | null) => {
163
+ const previous = appliedColor.get(element);
164
+
165
+ if (previous && previous.variant !== color?.variant)
166
+ element.classList.remove(`${COLOR_CLASS_PREFIX}${previous.variant}`);
167
+
168
+ if (!color) {
169
+ appliedColor.delete(element);
170
+
171
+ return;
172
+ }
173
+
174
+ appliedColor.set(element, color);
175
+ if (!element.classList.contains(`${COLOR_CLASS_PREFIX}${color.variant}`))
176
+ element.classList.add(`${COLOR_CLASS_PREFIX}${color.variant}`);
177
+ };
178
+
179
+ const resolveAutoSurface = (element: Element, themes: FrameSurfaceTheme[]) => {
180
+ const parent = element.parentElement ? surfaceVarsOf(getComputedStyle(element.parentElement)) : null;
181
+ const name = parent
182
+ ? (themes.find((theme) => theme.type === parent.type && theme.elevation === parent.elevation + 1)?.name ?? null)
183
+ : null;
184
+ const previous = appliedSurface.get(element);
185
+
186
+ if (previous !== undefined && previous !== name) element.classList.remove(`${SURFACE_CLASS_PREFIX}${previous}`);
187
+
188
+ if (name === null) {
189
+ appliedSurface.delete(element);
190
+
191
+ return;
192
+ }
193
+
194
+ appliedSurface.set(element, name);
195
+ if (!element.classList.contains(`${SURFACE_CLASS_PREFIX}${name}`))
196
+ element.classList.add(`${SURFACE_CLASS_PREFIX}${name}`);
197
+ };
198
+
199
+ const resolveColor = (element: Element, themes: FrameThemes) => {
200
+ const type = element.getAttribute(SEMANTIC_COLOR_ATTRIBUTE);
201
+
202
+ if (type) {
203
+ const chosen = themes.colors.find((theme) => theme.type === type)?.name;
204
+
205
+ applyColor(
206
+ element,
207
+ chosen
208
+ ? {
209
+ chosen,
210
+ variant: colorVariantOf(surfaceThemeOf(element, themes.surfaces), { chosen, colors: themes.colors }),
211
+ }
212
+ : null,
213
+ );
214
+
215
+ return;
216
+ }
217
+
218
+ const chosen = element.hasAttribute(AUTO_SURFACE_ATTRIBUTE)
219
+ ? chosenColorOf(element.parentElement, themes.colors)
220
+ : null;
221
+
222
+ if (!chosen || !element.parentElement) {
223
+ applyColor(element, null);
224
+
225
+ return;
226
+ }
227
+
228
+ const variant = colorVariantOf(surfaceThemeOf(element, themes.surfaces), { chosen, colors: themes.colors });
229
+ const inherited = colorVariantOf(surfaceThemeOf(element.parentElement, themes.surfaces), {
230
+ chosen,
231
+ colors: themes.colors,
232
+ });
233
+
234
+ applyColor(element, variant === inherited ? null : { chosen, variant });
235
+ };
236
+
237
+ /**
238
+ * Resolves the theming attributes under `root` in document order, outer first: `[data-et-auto-surface]` gets the
239
+ * `et-surface--<name>` class of the theme one elevation above the surface it sits on, with the same type, like
240
+ * `etAutoSurface` (without such a theme it keeps the parent surface), plus the class of that surface's
241
+ * `colorThemeVariants` swap of the inherited accent, like `etProvideSurface`. `[data-et-semantic-color="<type>"]`
242
+ * gets the `et-color--<name>` class of the first colour theme of that type, swapped for its surface, like
243
+ * `injectSemanticColorTheme`; without a theme of that type it gets none.
244
+ */
245
+ export const resolveTheming = (root: ParentNode, themes: FrameThemes) => {
246
+ for (const element of Array.from(
247
+ root.querySelectorAll(`[${AUTO_SURFACE_ATTRIBUTE}], [${SEMANTIC_COLOR_ATTRIBUTE}]`),
248
+ )) {
249
+ if (element.hasAttribute(AUTO_SURFACE_ATTRIBUTE)) resolveAutoSurface(element, themes.surfaces);
250
+
251
+ resolveColor(element, themes);
252
+ }
253
+ };
254
+
255
+ /**
256
+ * Resolves the theming attributes under `root` now and again after every change of its markup or of the page's
257
+ * stylesheets: auto surfaces and semantic colours as `resolveTheming`, and `[data-et-surface-interactive]` as `etSurfaceInteractive`, whose CSS
258
+ * (`interactiveCss`) goes into the page once. Returns the resolve function.
259
+ */
260
+ export const watchSurfaces = (root: HTMLElement, interactiveCss: string) => {
261
+ const document = root.ownerDocument;
262
+ let styled = false;
263
+
264
+ const resolve = () => {
265
+ const interactive = Array.from(root.querySelectorAll(`[${SURFACE_INTERACTIVE_ATTRIBUTE}]`));
266
+
267
+ interactive.forEach((element) => {
268
+ if (!element.classList.contains(SURFACE_INTERACTIVE_CLASS)) element.classList.add(SURFACE_INTERACTIVE_CLASS);
269
+ });
270
+
271
+ if (interactive.length > 0 && !styled) {
272
+ const style = document.createElement('style');
273
+
274
+ styled = true;
275
+ style.textContent = interactiveCss;
276
+ document.head.append(style);
277
+ }
278
+
279
+ if (root.querySelector(`[${AUTO_SURFACE_ATTRIBUTE}], [${SEMANTIC_COLOR_ATTRIBUTE}]`))
280
+ resolveTheming(root, registeredThemesOf(document));
281
+ };
282
+
283
+ resolve();
284
+
285
+ new MutationObserver(resolve).observe(root, {
286
+ childList: true,
287
+ subtree: true,
288
+ attributes: true,
289
+ attributeFilter: ['class', AUTO_SURFACE_ATTRIBUTE, SURFACE_INTERACTIVE_ATTRIBUTE, SEMANTIC_COLOR_ATTRIBUTE],
290
+ });
291
+ new MutationObserver(resolve).observe(document.head, { childList: true, subtree: true, characterData: true });
292
+
293
+ return resolve;
294
+ };
@@ -1,7 +1,14 @@
1
- import { CallVariant, Drawing, fitOutOfFlow, mountDrawing, placeOverlays } from '../define-call';
2
- import { Part } from '../define-part';
1
+ import { CallVariant, Drawing, fitOutOfFlow, mountDrawing, placeOverlays, withNgStyles } from '../define-call';
2
+ import { drawState, Motion, Part } from '../define-part';
3
3
  import { applyEmbed, fitEmbed } from '../embed-page';
4
+ import { paintFill } from './frame-fill';
5
+ import { fitRoot } from './frame-fit';
6
+ import { pinScheme } from './frame-scheme';
7
+ import { watchSurfaces } from './frame-surfaces';
8
+ import surfaceInteractiveCss from './surface-interactive.css?inline';
9
+ import { createMotionDriver, emulateReducedMotion, motionDriveMessageOf } from '../motion-drive';
4
10
  import { runRules, stepMotion, SteppedMotion } from '../motion-runtime';
11
+ import { rootTokensOf, withTokenNames } from '../motion-tokens';
5
12
  import { calls } from 'virtual:design-explore';
6
13
  import { loadEnv, loadProductEnv } from 'virtual:design-explore/env';
7
14
  import { parts, sketchParts, sketchTokens, tokens } from 'virtual:design-explore/system';
@@ -40,12 +47,12 @@ const fill = params.get('fill');
40
47
  // On <html> a theme class ties with the `:root` defaults of the theme CSS, which come later and win.
41
48
  if (surface) root.classList.add(`et-surface--${surface}`);
42
49
  if (color) root.classList.add(`et-color--${color}`);
43
- if (fill) document.body.style.background = `var(--${fill})`;
44
- if (fit) {
45
- document.documentElement.style.overflow = 'hidden';
46
- root.style.width = 'max-content';
47
- root.style.padding = '16px';
48
- }
50
+ if (fill) paintFill(document.body, fill);
51
+
52
+ const scheme = params.get('scheme');
53
+
54
+ if (scheme === 'light' || scheme === 'dark') pinScheme(document, scheme);
55
+ if (fit) fitRoot(root, { padded: !params.has('bare') });
49
56
 
50
57
  const markFailed = (message: string) => {
51
58
  errored = true;
@@ -66,6 +73,12 @@ const fail = (message: string) => {
66
73
  return null;
67
74
  };
68
75
 
76
+ const failMissing = (message: string) => {
77
+ document.documentElement.setAttribute('data-et-missing', '');
78
+
79
+ return fail(message);
80
+ };
81
+
69
82
  const showSetupError = (message: string) => {
70
83
  markFailed(message);
71
84
 
@@ -96,21 +109,44 @@ let drawnPart: { part: Part<unknown>; states: Record<string, unknown> } | null =
96
109
 
97
110
  const drawCall = async (): Promise<Drawing | null> => {
98
111
  const call = calls[slug];
99
- if (!call) return fail(`design-explore: no call "${slug}"`);
112
+ if (!call) return failMissing(`design-explore: no call "${slug}"`);
100
113
 
101
114
  const variant: CallVariant | undefined = (await call()).default.variants.find((o) => o.key === key);
102
- if (!variant) return fail(`design-explore: call "${slug}" has no variant "${key}"`);
115
+ if (!variant) return failMissing(`design-explore: call "${slug}" has no variant "${key}"`);
116
+
117
+ return variant
118
+ .load()
119
+ .then((module) => module.default)
120
+ .then(
121
+ (drawn) => withNgStyles(drawn),
122
+ (error: unknown) => fail(`design-explore: variant "${key}" failed\n${messageOf(error)}`),
123
+ );
124
+ };
125
+
126
+ const composeParam = product ? params.get('compose') : null;
127
+
128
+ /** Makes each part named in the `compose` param draw with its props merged over the props its user passes. */
129
+ const composed = async (name: string) => {
130
+ const overrides = composeParam ? (JSON.parse(composeParam) as Record<string, Record<string, unknown>>) : {};
103
131
 
104
- return variant.load().then(
105
- (module) => module.default,
106
- (error: unknown) => fail(`design-explore: variant "${key}" failed\n${messageOf(error)}`),
132
+ await Promise.all(
133
+ Object.entries(overrides).map(async ([used, props]) => {
134
+ const load = parts[name]?.[used];
135
+
136
+ if (!load) throw new Error(`design-explore: product "${name}" has no part "${used}" to compose`);
137
+
138
+ const { default: part } = await retried(load);
139
+ const render = part.render.bind(part);
140
+
141
+ part.render = (given: unknown) => render({ ...(given as Record<string, unknown>), ...props });
142
+ }),
107
143
  );
108
144
  };
109
145
 
110
146
  const drawPart = async (name: string): Promise<Drawing | null> => {
111
147
  const load = sketch ? sketchParts[name]?.[sketch]?.[sketchVariant]?.[partKey] : parts[name]?.[partKey];
112
148
  if (!load)
113
- return fail(
149
+ return failMissing(
114
150
  sketch
115
151
  ? `design-explore: variant "${sketchVariant}" of the sketch on ${sketch} in product "${name}" has no part "${partKey}"`
116
152
  : `design-explore: product "${name}" has no part "${partKey}"`,
@@ -118,18 +154,20 @@ const drawPart = async (name: string): Promise<Drawing | null> => {
118
154
 
119
155
  const loadProps = propsSketch ? sketchParts[name]?.[propsSketch]?.[propsVariant]?.[partKey] : load;
120
156
  if (!loadProps)
121
- return fail(
157
+ return failMissing(
122
158
  `design-explore: variant "${propsVariant}" of the sketch on ${propsSketch} in product "${name}" has no part "${partKey}"`,
123
159
  );
124
160
 
125
161
  try {
162
+ await composed(name);
163
+
126
164
  const [{ default: part }, { default: holder }] = await Promise.all([retried(load), retried(loadProps)]);
127
165
 
128
- if (!(key in holder.states)) return fail(`design-explore: part "${partKey}" has no state "${key}"`);
166
+ if (!(key in holder.states)) return failMissing(`design-explore: part "${partKey}" has no state "${key}"`);
129
167
 
130
168
  drawnPart = { part: part as Part<unknown>, states: holder.states };
131
169
 
132
- return await part.render(holder.states[key]);
170
+ return await drawState(part as Part<unknown>, holder.states[key]);
133
171
  } catch (error) {
134
172
  return fail(`design-explore: state "${key}" of "${partKey}" failed\n${messageOf(error)}`);
135
173
  }
@@ -148,7 +186,7 @@ const force = (element: Element, name: string) => {
148
186
  if (name === 'disabled') {
149
187
  element.setAttribute('disabled', '');
150
188
  element.setAttribute('aria-disabled', 'true');
151
- } else {
189
+ } else if (!element.hasAttribute('disabled') && element.getAttribute('aria-disabled') !== 'true') {
152
190
  element.setAttribute('data-et-force', name);
153
191
  }
154
192
  };
@@ -181,11 +219,16 @@ const report = () => {
181
219
  );
182
220
  };
183
221
 
222
+ const reportPainted = () =>
223
+ requestAnimationFrame(() =>
224
+ requestAnimationFrame(() => parent.postMessage({ type: 'design-explore:painted', variant: key }, '*')),
225
+ );
226
+
184
227
  const stateMarkupOf = ({ part, states }: NonNullable<typeof drawnPart>, styles: string) => {
185
228
  const sheets = new Set([styles]);
186
229
 
187
230
  return (state: string) =>
188
- Promise.resolve(part.render(states[state])).then((drawn) =>
231
+ drawState(part, states[state]).then((drawn) =>
189
232
  sheets.has(drawn.styles)
190
233
  ? drawn.body
191
234
  : forced(drawn.styles).then((css) => {
@@ -218,11 +261,53 @@ const exposeStepped = (options: { start: () => Promise<SteppedMotion>; interrupt
218
261
  }),
219
262
  seek: (ms: number) => steppedOf().seek(ms),
220
263
  bounds: () => steppedOf().bounds(),
221
- timeline: () => ({ end: steppedOf().end(), tracks: steppedOf().tracks(), interrupt: options.interrupt }),
264
+ timeline: () => {
265
+ const tokens = rootTokensOf(document);
266
+
267
+ return {
268
+ end: steppedOf().end(),
269
+ tracks: steppedOf()
270
+ .tracks()
271
+ .map((track) => withTokenNames(track, tokens)),
272
+ interrupt: options.interrupt,
273
+ };
274
+ },
222
275
  },
223
276
  });
224
277
  };
225
278
 
279
+ const motionStartOf = (options: {
280
+ drawn: NonNullable<typeof drawnPart>;
281
+ motion: Motion;
282
+ markupOf: (state: string) => Promise<string>;
283
+ switching?: () => void;
284
+ }) => {
285
+ const { drawn, motion, markupOf } = options;
286
+
287
+ return () =>
288
+ Promise.all([markupOf(motion.to), motion.interrupt === undefined ? null : markupOf(motion.from)]).then(
289
+ ([markup, back]) => {
290
+ options.switching?.();
291
+
292
+ return stepMotion({
293
+ root,
294
+ markup,
295
+ motion,
296
+ ...(back === null
297
+ ? {}
298
+ : {
299
+ reverse: {
300
+ markup: back,
301
+ motion: Object.values(drawn.part.motions ?? {}).find(
302
+ (other) => other.from === motion.to && other.to === motion.from,
303
+ ),
304
+ },
305
+ }),
306
+ });
307
+ },
308
+ );
309
+ };
310
+
226
311
  const exposeMotion = (options: { drawn: NonNullable<typeof drawnPart>; name: string; styles: string }) => {
227
312
  const { drawn, name, styles } = options;
228
313
  const motion = drawn.part.motions?.[name];
@@ -235,29 +320,57 @@ const exposeMotion = (options: { drawn: NonNullable<typeof drawnPart>; name: str
235
320
  return;
236
321
  }
237
322
 
238
- const markupOf = stateMarkupOf(drawn, styles);
239
-
240
323
  exposeStepped({
241
324
  interrupt: motion.interrupt ?? null,
242
- start: () =>
243
- Promise.all([markupOf(motion.to), motion.interrupt === undefined ? null : markupOf(motion.from)]).then(
244
- ([markup, back]) =>
245
- stepMotion({
246
- root,
247
- markup,
248
- motion,
249
- ...(back === null
250
- ? {}
251
- : {
252
- reverse: {
253
- markup: back,
254
- motion: Object.values(drawn.part.motions ?? {}).find(
255
- (other) => other.from === motion.to && other.to === motion.from,
256
- ),
257
- },
258
- }),
259
- }),
260
- ),
325
+ start: motionStartOf({ drawn, motion, markupOf: stateMarkupOf(drawn, styles) }),
326
+ });
327
+ };
328
+
329
+ const settleAnimations = () => {
330
+ for (const animation of document.getAnimations()) {
331
+ if (Number.isFinite(animation.effect?.getComputedTiming().endTime)) animation.finish();
332
+ else animation.cancel();
333
+ }
334
+ };
335
+
336
+ const listenForDrive = (drawn: NonNullable<typeof drawnPart>, styles: string) => {
337
+ const markupOf = stateMarkupOf(drawn, styles);
338
+ const drawnMarkup = root.innerHTML;
339
+ let restore: () => void = () => undefined;
340
+
341
+ const driver = createMotionDriver({
342
+ document,
343
+ reply: (answer) => parent.postMessage({ ...answer, variant: key }, '*'),
344
+ released: () => {
345
+ restore();
346
+ restore = () => undefined;
347
+ },
348
+ start: (name, reduced) => {
349
+ const motion = drawn.part.motions?.[name];
350
+
351
+ if (!motion) return Promise.reject(new Error(`design-explore: part "${partKey}" has no motion "${name}"`));
352
+ if (motion.from !== key)
353
+ return Promise.reject(new Error(`design-explore: motion "${name}" starts at "${motion.from}", not "${key}"`));
354
+
355
+ settleAnimations();
356
+ restore();
357
+ root.innerHTML = drawnMarkup;
358
+
359
+ return motionStartOf({
360
+ drawn,
361
+ motion,
362
+ markupOf,
363
+ switching: () => {
364
+ restore = emulateReducedMotion(document, reduced);
365
+ },
366
+ })();
367
+ },
368
+ });
369
+
370
+ addEventListener('message', (event) => {
371
+ const message = event.source === parent ? motionDriveMessageOf(event.data) : null;
372
+
373
+ if (message) void driver.handle(message);
261
374
  });
262
375
  };
263
376
 
@@ -281,7 +394,7 @@ const exposeFlowLine = (options: { product: string; to: string; styles: string }
281
394
 
282
395
  // The styles of the to page ride in the markup: in <head> they would restyle the from page before the View Transition captures it.
283
396
 
284
- return Promise.resolve((part as Part<unknown>).render(states[toState]))
397
+ return drawState(part as Part<unknown>, states[toState])
285
398
  .then((drawn) =>
286
399
  drawn.styles === options.styles
287
400
  ? drawn.body
@@ -327,6 +440,8 @@ const drawFrame = async () => {
327
440
  style.textContent = await forced(loaded.styles ?? '');
328
441
  document.head.append(style);
329
442
  const error = mountDrawing(root, loaded);
443
+
444
+ watchSurfaces(root, surfaceInteractiveCss);
330
445
  const partRoot = partRootOf(root);
331
446
 
332
447
  if (interaction && partRoot) force(partRoot, interaction);
@@ -337,6 +452,8 @@ const drawFrame = async () => {
337
452
  if (flowTo && product) exposeFlowLine({ product, to: flowTo, styles: loaded.styles ?? '' });
338
453
  else if (motionName && drawnPart) exposeMotion({ drawn: drawnPart, name: motionName, styles: loaded.styles ?? '' });
339
454
  else if (drawnPart?.part.rules?.length) runPartRules(drawnPart, loaded.styles ?? '');
455
+
456
+ if (!flowTo && !motionName && drawnPart) listenForDrive(drawnPart, loaded.styles ?? '');
340
457
  }
341
458
 
342
459
  const place = () => {
@@ -346,7 +463,7 @@ const drawFrame = async () => {
346
463
  };
347
464
 
348
465
  new MutationObserver(place).observe(root, { childList: true, subtree: true });
349
- new ResizeObserver(place).observe(root);
466
+ new ResizeObserver(() => requestAnimationFrame(place)).observe(root);
350
467
  place();
351
468
 
352
469
  const reported = new ResizeObserver(report);
@@ -355,6 +472,7 @@ const drawFrame = async () => {
355
472
  if (fit) reported.observe(root);
356
473
  reporting = true;
357
474
  report();
475
+ reportPainted();
358
476
 
359
477
  addEventListener('keydown', (event) => {
360
478
  if (event.key === 'Escape') parent.postMessage({ type: 'design-explore:escape', variant: key }, '*');
@@ -371,4 +489,5 @@ void drawFrame().catch((error: unknown) => {
371
489
  fail(`design-explore: frame failed\n${messageOf(error)}`);
372
490
  reporting = true;
373
491
  report();
492
+ reportPainted();
374
493
  });
@@ -0,0 +1,42 @@
1
+ @layer components {
2
+ :where(.et-surface-interactive) {
3
+ --et-surface-interaction-rgb: var(--et-surface-interaction);
4
+ --et-surface-interaction-solid: rgb(var(--et-surface-interaction-rgb));
5
+ }
6
+
7
+ /* hover-capable pointers only — on touch, :hover sticks after a tap */
8
+ @media (hover: hover) {
9
+ :where(.et-surface-interactive:hover) {
10
+ --et-surface-interaction-rgb: var(--et-surface-interaction-hover, var(--et-surface-interaction));
11
+ --et-surface-interaction-solid: rgb(var(--et-surface-interaction-rgb));
12
+ }
13
+ }
14
+
15
+ :where(.et-surface-interactive:focus-visible) {
16
+ --et-surface-interaction-rgb: var(
17
+ --et-surface-interaction-focus,
18
+ var(--et-surface-interaction-hover, var(--et-surface-interaction))
19
+ );
20
+ --et-surface-interaction-solid: rgb(var(--et-surface-interaction-rgb));
21
+ }
22
+
23
+ :where(.et-surface-interactive:active) {
24
+ --et-surface-interaction-rgb: var(
25
+ --et-surface-interaction-active,
26
+ var(--et-surface-interaction-focus, var(--et-surface-interaction-hover, var(--et-surface-interaction)))
27
+ );
28
+ --et-surface-interaction-solid: rgb(var(--et-surface-interaction-rgb));
29
+ }
30
+
31
+ :where(.et-surface-interactive[disabled]),
32
+ :where(.et-surface-interactive[aria-disabled='true']) {
33
+ --et-surface-interaction-rgb: var(
34
+ --et-surface-interaction-disabled,
35
+ var(
36
+ --et-surface-interaction-active,
37
+ var(--et-surface-interaction-focus, var(--et-surface-interaction-hover, var(--et-surface-interaction)))
38
+ )
39
+ );
40
+ --et-surface-interaction-solid: rgb(var(--et-surface-interaction-rgb));
41
+ }
42
+ }