@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,215 @@
1
+ import { SteppedMotion } from './motion-runtime';
2
+
3
+ /** What the Studio timeline posts into a live frame to drive a motion of its part. */
4
+ export type MotionDriveMessage =
5
+ | { type: 'design-explore:motion-start'; motion: string; reduced: boolean }
6
+ | { type: 'design-explore:motion-seek'; ms: number; rate: number }
7
+ | { type: 'design-explore:motion-play'; ms: number; rate: number }
8
+ | { type: 'design-explore:motion-stop' };
9
+
10
+ /** What a live frame posts back once a motion started, or failed to. */
11
+ export type MotionDriveReply =
12
+ | { type: 'design-explore:motion-ready'; motion: string }
13
+ | { type: 'design-explore:motion-failed'; motion: string; error: string };
14
+
15
+ const TAIL_MS = 30000;
16
+
17
+ const isTime = (value: unknown): value is number => typeof value === 'number' && Number.isFinite(value) && value >= 0;
18
+
19
+ const isRate = (value: unknown): value is number => typeof value === 'number' && Number.isFinite(value) && value > 0;
20
+
21
+ /** The drive message `data` holds, or `null` for any other message. */
22
+ export const motionDriveMessageOf = (data: unknown): MotionDriveMessage | null => {
23
+ if (typeof data !== 'object' || data === null) return null;
24
+
25
+ const message = data as Record<string, unknown>;
26
+
27
+ switch (message['type']) {
28
+ case 'design-explore:motion-start':
29
+ return typeof message['motion'] === 'string'
30
+ ? { type: message['type'], motion: message['motion'], reduced: message['reduced'] === true }
31
+ : null;
32
+ case 'design-explore:motion-seek':
33
+ case 'design-explore:motion-play':
34
+ return isTime(message['ms']) && isRate(message['rate'])
35
+ ? { type: message['type'], ms: message['ms'], rate: message['rate'] }
36
+ : null;
37
+ case 'design-explore:motion-stop':
38
+ return { type: message['type'] };
39
+ default:
40
+ return null;
41
+ }
42
+ };
43
+
44
+ const REDUCED_FEATURE = /\(\s*prefers-reduced-motion\s*(?::\s*(reduce|no-preference)\s*)?\)/g;
45
+ const ALWAYS = '(min-width: 0px)';
46
+ const NEVER = '(max-width: -1px)';
47
+
48
+ type MediaHolder = CSSRule & { media: MediaList };
49
+
50
+ const mediaRulesOf = (rules: CSSRuleList): MediaHolder[] =>
51
+ [...rules].flatMap((rule) =>
52
+ 'cssRules' in rule
53
+ ? [...('media' in rule ? [rule as MediaHolder] : []), ...mediaRulesOf((rule as CSSGroupingRule).cssRules)]
54
+ : [],
55
+ );
56
+
57
+ const sheetRulesOf = (sheet: CSSStyleSheet) => {
58
+ try {
59
+ return mediaRulesOf(sheet.cssRules);
60
+ } catch {
61
+ return [];
62
+ }
63
+ };
64
+
65
+ /**
66
+ * Makes every `prefers-reduced-motion` media rule of `document` match as if the user asked for `reduced` motion, and
67
+ * returns a function that puts the rules back. Scripts that call `matchMedia` still see the real preference.
68
+ */
69
+ export const emulateReducedMotion = (document: Document, reduced: boolean) => {
70
+ const changed = [...document.styleSheets].flatMap(sheetRulesOf).flatMap((rule) => {
71
+ const original = rule.media.mediaText;
72
+ const emulated = original.replace(REDUCED_FEATURE, (_, value?: string) =>
73
+ (value === 'no-preference' ? !reduced : reduced) ? ALWAYS : NEVER,
74
+ );
75
+
76
+ if (emulated === original) return [];
77
+
78
+ rule.media.mediaText = emulated;
79
+
80
+ return [{ rule, original }];
81
+ });
82
+
83
+ return () => {
84
+ for (const { rule, original } of changed) rule.media.mediaText = original;
85
+ };
86
+ };
87
+
88
+ /**
89
+ * Drives a motion in a live frame from drive messages: `start` (re)starts the motion from its `from` state, a seek
90
+ * pauses every animation of the document at that time, play runs the motion's clock and animations at `rate`, and
91
+ * stop resumes every animation at 1x. `released` hears each stop.
92
+ */
93
+ export const createMotionDriver = (options: {
94
+ document: Document;
95
+ start: (motion: string, reduced: boolean) => Promise<SteppedMotion>;
96
+ reply: (reply: MotionDriveReply) => void;
97
+ released?: () => void;
98
+ frame?: (step: (time: number) => void) => unknown;
99
+ }) => {
100
+ const { document, reply } = options;
101
+ const frame = options.frame ?? ((step: (time: number) => void) => requestAnimationFrame(step));
102
+ let started: { motion: string; reduced: boolean } | null = null;
103
+ let stepped: SteppedMotion | null = null;
104
+ let loop = 0;
105
+ let queue: Promise<void> = Promise.resolve();
106
+
107
+ const holdAll = (rate: number) => {
108
+ for (const animation of document.getAnimations()) {
109
+ animation.pause();
110
+ animation.playbackRate = rate;
111
+ }
112
+ };
113
+
114
+ const resumeAll = () => {
115
+ for (const animation of document.getAnimations()) {
116
+ const end = animation.effect?.getComputedTiming().endTime;
117
+
118
+ animation.playbackRate = 1;
119
+
120
+ if (typeof end === 'number' && Number.isFinite(end) && Number(animation.currentTime ?? 0) >= end)
121
+ animation.finish();
122
+ else animation.play();
123
+ }
124
+ };
125
+
126
+ const run = (play: { motion: SteppedMotion; from: number; rate: number; step: () => void }) => {
127
+ const { motion, rate, step } = play;
128
+ const id = ++loop;
129
+ let time = play.from;
130
+ let last: number | null = null;
131
+
132
+ const tick = (now: number) => {
133
+ if (id !== loop) return;
134
+
135
+ time += (now - (last ?? now)) * rate;
136
+ last = now;
137
+ motion.seek(Math.min(time, TAIL_MS));
138
+ step();
139
+
140
+ if (time < TAIL_MS) frame(tick);
141
+ };
142
+
143
+ frame(tick);
144
+ };
145
+
146
+ const moveTo = (ms: number): Promise<SteppedMotion | null> => {
147
+ if (!stepped || !started) return Promise.resolve(null);
148
+ if (ms >= stepped.now()) {
149
+ stepped.seek(ms);
150
+
151
+ return Promise.resolve(stepped);
152
+ }
153
+
154
+ return options.start(started.motion, started.reduced).then((restarted) => {
155
+ stepped = restarted;
156
+ restarted.seek(ms);
157
+
158
+ return restarted;
159
+ });
160
+ };
161
+
162
+ const handled = (message: MotionDriveMessage): Promise<void> => {
163
+ loop++;
164
+
165
+ switch (message.type) {
166
+ case 'design-explore:motion-start':
167
+ started = { motion: message.motion, reduced: message.reduced };
168
+ stepped = null;
169
+
170
+ return options.start(message.motion, message.reduced).then(
171
+ (motion) => {
172
+ stepped = motion;
173
+ reply({ type: 'design-explore:motion-ready', motion: message.motion });
174
+ },
175
+ (error: unknown) =>
176
+ reply({
177
+ type: 'design-explore:motion-failed',
178
+ motion: message.motion,
179
+ error: error instanceof Error ? error.message : String(error),
180
+ }),
181
+ );
182
+ case 'design-explore:motion-seek':
183
+ return moveTo(message.ms).then((motion) => {
184
+ if (motion) holdAll(message.rate);
185
+ });
186
+ case 'design-explore:motion-play':
187
+ return moveTo(message.ms).then((motion) => {
188
+ if (!motion) return;
189
+
190
+ holdAll(message.rate);
191
+ run({ motion, from: message.ms, rate: message.rate, step: () => holdAll(message.rate) });
192
+ });
193
+ case 'design-explore:motion-stop': {
194
+ const motion = stepped;
195
+
196
+ if (!motion) return Promise.resolve();
197
+
198
+ motion.release();
199
+ resumeAll();
200
+ options.released?.();
201
+ run({ motion, from: motion.now(), rate: 1, step: () => undefined });
202
+
203
+ return Promise.resolve();
204
+ }
205
+ }
206
+ };
207
+
208
+ return {
209
+ handle: (message: MotionDriveMessage) => {
210
+ queue = queue.then(() => handled(message)).catch(() => undefined);
211
+
212
+ return queue;
213
+ },
214
+ };
215
+ };
@@ -162,9 +162,14 @@ export type MotionTrack = {
162
162
  end: number | null;
163
163
  };
164
164
 
165
- /** A motion paused at its start: `seek` moves it forward to a time in ms, `tracks` lists what ran so far. */
165
+ /**
166
+ * A motion paused at its start: `seek` moves it forward to a time in ms, `tracks` lists what ran so far. `release`
167
+ * stops pausing and posing its animations, so a later `seek` only runs its `ctx.at` steps.
168
+ */
166
169
  export type SteppedMotion = {
167
170
  seek: (ms: number) => void;
171
+ now: () => number;
172
+ release: () => void;
168
173
  tracks: () => MotionTrack[];
169
174
  end: () => number;
170
175
  bounds: () => MotionBox;
@@ -238,6 +243,7 @@ export const stepMotion = (options: {
238
243
  const cut = new Set<Animation>();
239
244
  const interrupt = motion.interrupt;
240
245
  let interrupted = false;
246
+ let released = false;
241
247
  let lastTask = 0;
242
248
  let ready: Promise<unknown> = Promise.resolve();
243
249
 
@@ -257,12 +263,14 @@ export const stepMotion = (options: {
257
263
  for (const animation of document.getAnimations()) {
258
264
  if (started.has(animation)) continue;
259
265
 
260
- animation.pause();
266
+ if (!released) animation.pause();
261
267
  started.set(animation, trackOf(animation, start));
262
268
  }
263
269
  };
264
270
 
265
271
  const pose = (ms: number) => {
272
+ if (released) return;
273
+
266
274
  for (const [animation, track] of started)
267
275
  if (!cut.has(animation)) animation.currentTime = Math.max(0, ms - track.start);
268
276
  };
@@ -318,6 +326,10 @@ export const stepMotion = (options: {
318
326
 
319
327
  pose(ms);
320
328
  },
329
+ now: () => clock.now(),
330
+ release: () => {
331
+ released = true;
332
+ },
321
333
  tracks: () => [...started.values()],
322
334
  end: () => Math.max(lastTask, ...[...started.values()].map((track) => track.end ?? 0)),
323
335
  bounds: () => {
@@ -0,0 +1,177 @@
1
+ import { MotionTrack } from './motion-runtime';
2
+
3
+ /** A CSS custom property declared on `:root`, with its computed value. */
4
+ export type MotionToken = { name: string; value: string };
5
+
6
+ /** A track with the names of the tokens whose value equals its duration or easing, in declaration order. */
7
+ export type NamedMotionTrack = MotionTrack & { durationTokens?: string[]; easingTokens?: string[] };
8
+
9
+ const KEYWORD_EASINGS: Record<string, string> = {
10
+ ease: 'cubic-bezier(0.25,0.1,0.25,1)',
11
+ 'ease-in': 'cubic-bezier(0.42,0,1,1)',
12
+ 'ease-out': 'cubic-bezier(0,0,0.58,1)',
13
+ 'ease-in-out': 'cubic-bezier(0.42,0,0.58,1)',
14
+ 'step-start': 'steps(1,jump-start)',
15
+ 'step-end': 'steps(1,jump-end)',
16
+ };
17
+
18
+ const TIME = /^(-?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?)(ms|s)$/u;
19
+ const EASING_FUNCTION = /^(cubic-bezier|linear|steps)\((.*)\)$/u;
20
+
21
+ const roundedOf = (value: number) => String(Math.round(value * 10000) / 10000);
22
+
23
+ const msOf = (value: string) => {
24
+ const match = TIME.exec(value.trim().toLowerCase());
25
+
26
+ return match ? Number(match[1]) * (match[2] === 's' ? 1000 : 1) : null;
27
+ };
28
+
29
+ const linearOf = (body: string) => {
30
+ const points: { output: number; input: number | null }[] = [];
31
+
32
+ for (const stop of body.split(',')) {
33
+ const [output = '', ...inputs] = stop.trim().split(/\s+/u);
34
+ const value = Number(output);
35
+
36
+ if (output === '' || !Number.isFinite(value) || inputs.length > 2) return null;
37
+
38
+ const percents = inputs.map((input) => (input.endsWith('%') ? Number(input.slice(0, -1)) : Number.NaN));
39
+
40
+ if (percents.some((percent) => !Number.isFinite(percent))) return null;
41
+
42
+ if (percents.length === 0) points.push({ output: value, input: null });
43
+ for (const percent of percents) points.push({ output: value, input: percent });
44
+ }
45
+
46
+ if (points.length < 2) return null;
47
+
48
+ const first = points[0];
49
+ const last = points[points.length - 1];
50
+
51
+ if (first && first.input === null) first.input = 0;
52
+ if (last && last.input === null) last.input = Math.max(100, ...points.map((point) => point.input ?? 0));
53
+
54
+ let highest = 0;
55
+
56
+ for (const point of points) {
57
+ if (point.input !== null) point.input = Math.max(point.input, highest);
58
+ highest = point.input ?? highest;
59
+ }
60
+
61
+ for (let index = 1; index < points.length; index++) {
62
+ if (points[index]?.input !== null) continue;
63
+
64
+ const before = index - 1;
65
+ let after = index;
66
+
67
+ while (points[after]?.input === null) after++;
68
+
69
+ const from = points[before]?.input ?? 0;
70
+ const to = points[after]?.input ?? 100;
71
+
72
+ for (let gap = index; gap < after; gap++) {
73
+ const point = points[gap];
74
+
75
+ if (point) point.input = from + ((to - from) * (gap - before)) / (after - before);
76
+ }
77
+ }
78
+
79
+ return `linear(${points.map((point) => `${roundedOf(point.output)} ${roundedOf(point.input ?? 0)}%`).join(',')})`;
80
+ };
81
+
82
+ /** An easing in one spelling, so `ease` equals `cubic-bezier(.25, .1, .25, 1)`; `null` when it is not an easing. */
83
+ export const normalisedEasingOf = (value: string): string | null => {
84
+ const easing = value.trim().toLowerCase().replace(/\s+/gu, ' ');
85
+
86
+ if (easing === 'linear') return 'linear';
87
+ if (KEYWORD_EASINGS[easing]) return KEYWORD_EASINGS[easing];
88
+
89
+ const match = EASING_FUNCTION.exec(easing);
90
+
91
+ if (!match) return null;
92
+
93
+ const [, kind = '', body = ''] = match;
94
+
95
+ if (kind === 'linear') return linearOf(body);
96
+
97
+ const args = body.split(',').map((arg) => arg.trim());
98
+
99
+ if (kind === 'steps') return args.length === 1 || args.length === 2 ? `steps(${args[0]},${args[1] ?? 'end'})` : null;
100
+
101
+ const numbers = args.map(Number);
102
+
103
+ return numbers.length === 4 && numbers.every(Number.isFinite)
104
+ ? `cubic-bezier(${numbers.map(roundedOf).join(',')})`
105
+ : null;
106
+ };
107
+
108
+ /** What a token stands for: a time, an easing, or both as a `spring()` token stores them (`<duration>ms linear(...)`). */
109
+ const meaningOf = (value: string) => {
110
+ const trimmed = value.trim();
111
+ const ms = msOf(trimmed);
112
+
113
+ if (ms !== null) return { ms, easing: null };
114
+
115
+ const [head = '', ...rest] = trimmed.split(/\s+/u);
116
+ const leading = msOf(head);
117
+
118
+ if (leading !== null) {
119
+ const easing = normalisedEasingOf(rest.join(' '));
120
+
121
+ return easing ? { ms: leading, easing } : null;
122
+ }
123
+
124
+ const easing = normalisedEasingOf(trimmed);
125
+
126
+ return easing ? { ms: null, easing } : null;
127
+ };
128
+
129
+ /**
130
+ * Adds the names of the `tokens` whose value equals a track's duration (`durationTokens`) or easing (`easingTokens`),
131
+ * in the order of `tokens`; a field without a match is left out.
132
+ */
133
+ export const withTokenNames = (track: MotionTrack, tokens: readonly MotionToken[]): NamedMotionTrack => {
134
+ const easing = normalisedEasingOf(track.easing);
135
+ const durationTokens: string[] = [];
136
+ const easingTokens: string[] = [];
137
+
138
+ for (const token of tokens) {
139
+ const meaning = meaningOf(token.value);
140
+
141
+ if (!meaning) continue;
142
+ if (meaning.ms !== null && Math.abs(meaning.ms - track.duration) < 0.001) durationTokens.push(token.name);
143
+ if (meaning.easing !== null && easing !== null && meaning.easing === easing) easingTokens.push(token.name);
144
+ }
145
+
146
+ return {
147
+ ...track,
148
+ ...(durationTokens.length ? { durationTokens } : {}),
149
+ ...(easingTokens.length ? { easingTokens } : {}),
150
+ };
151
+ };
152
+
153
+ const rootNamesOf = (rules: CSSRuleList, names: Set<string>) => {
154
+ for (const rule of [...rules]) {
155
+ if (rule instanceof CSSStyleRule && /^(:root|html)$/u.test(rule.selectorText.trim()))
156
+ for (const property of [...rule.style]) if (property.startsWith('--')) names.add(property);
157
+
158
+ if ('cssRules' in rule && rule.cssRules instanceof CSSRuleList) rootNamesOf(rule.cssRules, names);
159
+ }
160
+ };
161
+
162
+ /** The custom properties declared on `:root` in the stylesheets of `document`, in declaration order, as computed there. */
163
+ export const rootTokensOf = (document: Document): MotionToken[] => {
164
+ const names = new Set<string>();
165
+
166
+ for (const sheet of [...document.styleSheets]) {
167
+ try {
168
+ rootNamesOf(sheet.cssRules, names);
169
+ } catch {
170
+ continue;
171
+ }
172
+ }
173
+
174
+ const computed = getComputedStyle(document.documentElement);
175
+
176
+ return [...names].map((name) => ({ name, value: computed.getPropertyValue(name).trim() }));
177
+ };
@@ -18,7 +18,7 @@ const SHEET_STYLES = `
18
18
  .ts-root { position: relative; display: flex; flex-direction: column; gap: var(--space-4, 1.6rem); width: 960px; padding: var(--space-6, 2.4rem); box-sizing: border-box; background: var(--surface, oklch(0.17 0 0)); color: var(--text, oklch(0.94 0 0)); font-family: var(--font-ui, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif); font-size: var(--text-md, 1.3rem); line-height: var(--text-md-line, 1.8rem); }
19
19
  .ts-title { margin: 0; font-size: var(--text-xl, 1.7rem); line-height: var(--text-xl-line, 2.2rem); font-weight: var(--weight-strong, 600); }
20
20
  .ts-note { margin: 0; max-width: 64rem; color: var(--text-muted, oklch(0.72 0 0)); }
21
- .ts-panel { margin: 0; padding: var(--space-4, 1.6rem); background: var(--surface, oklch(0.17 0 0)); border: 1px solid var(--surface-border, oklch(0.34 0 0)); border-radius: var(--radius-control-lg, 1rem); }
21
+ .ts-panel { margin: 0; padding: var(--space-4, 1.6rem); border: 1px solid var(--surface-border, oklch(0.34 0 0)); border-radius: var(--radius-control-lg, 1rem); }
22
22
  .ts-list { list-style: none; display: flex; flex-direction: column; gap: var(--space-1, 0.4rem); }
23
23
  .ts-row { display: grid; grid-template-columns: 200px 240px 1fr; align-items: center; gap: var(--space-3, 1.2rem); min-height: var(--row, 2.4rem); }
24
24
  .ts-name { font-family: var(--font-code, ui-monospace, "SF Mono", Menlo, Consolas, monospace); font-size: var(--text-sm, 1.15rem); line-height: var(--text-sm-line, 1.6rem); color: var(--text-muted, oklch(0.72 0 0)); }
@@ -0,0 +1,4 @@
1
+ /** Paints `body` with the token `--<fill>` over the product's page colour, which shows when the product has no such token. */
2
+ export const paintFill = (body: HTMLElement, fill: string) => {
3
+ body.style.backgroundImage = `linear-gradient(var(--${fill}), var(--${fill}))`;
4
+ };
@@ -0,0 +1,7 @@
1
+ /** Sizes the frame root to its content; `padded` keeps a 16 px margin around it, which a bare compare shot leaves out. */
2
+ export const fitRoot = (root: HTMLElement, options: { padded: boolean }) => {
3
+ root.ownerDocument.documentElement.style.overflow = 'hidden';
4
+ root.style.width = 'max-content';
5
+
6
+ if (options.padded) root.style.padding = '16px';
7
+ };
@@ -0,0 +1,44 @@
1
+ export type ColorScheme = 'light' | 'dark';
2
+
3
+ const SCHEME_FEATURE = /\(\s*prefers-color-scheme\s*:\s*(light|dark)\s*\)/giu;
4
+
5
+ /** `media` with each `prefers-color-scheme` feature replaced by one that always or never matches, as `scheme` decides. */
6
+ export const pinnedMediaText = (media: string, scheme: ColorScheme) =>
7
+ media.replace(SCHEME_FEATURE, (_, wanted: string) =>
8
+ wanted.toLowerCase() === scheme ? '(width >= 0)' : '(width < 0)',
9
+ );
10
+
11
+ const pinRules = (rules: CSSRuleList, scheme: ColorScheme) => {
12
+ for (const rule of Array.from(rules)) {
13
+ if (rule instanceof CSSMediaRule) {
14
+ const pinned = pinnedMediaText(rule.media.mediaText, scheme);
15
+
16
+ if (pinned !== rule.media.mediaText) rule.media.mediaText = pinned;
17
+ }
18
+
19
+ if ('cssRules' in rule) pinRules((rule as CSSGroupingRule).cssRules, scheme);
20
+ }
21
+ };
22
+
23
+ const pinSheets = (document: Document, scheme: ColorScheme) => {
24
+ for (const sheet of Array.from(document.styleSheets)) {
25
+ try {
26
+ pinRules(sheet.cssRules, scheme);
27
+ } catch {
28
+ // A cross-origin sheet hides its rules.
29
+ }
30
+ }
31
+ };
32
+
33
+ export const pinScheme = (document: Document, scheme: ColorScheme) => {
34
+ document.documentElement.style.colorScheme = scheme;
35
+ pinSheets(document, scheme);
36
+
37
+ new MutationObserver((records) => {
38
+ pinSheets(document, scheme);
39
+
40
+ for (const record of records)
41
+ for (const node of Array.from(record.addedNodes))
42
+ if (node instanceof HTMLLinkElement) node.addEventListener('load', () => pinSheets(document, scheme));
43
+ }).observe(document.head, { childList: true, subtree: true, characterData: true });
44
+ };