@ethlete/cli 3.0.0-next.26 → 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 (557) hide show
  1. package/CHANGELOG.md +328 -0
  2. package/build-info.json +1 -0
  3. package/design/define-call.ts +72 -30
  4. package/design/define-part.ts +37 -4
  5. package/design/icon-sheet.ts +1 -1
  6. package/design/interaction-rows.ts +13 -6
  7. package/design/mark-part.ts +51 -1
  8. package/design/token-sheet.ts +1 -1
  9. package/design/web/frame-fit.ts +7 -0
  10. package/design/web/frame-surfaces.ts +294 -0
  11. package/design/web/frame.ts +41 -15
  12. package/design/web/surface-interactive.css +42 -0
  13. package/design/with-action.ts +29 -0
  14. package/package.json +3 -1
  15. package/src/index.js +9 -1
  16. package/src/index.js.map +1 -1
  17. package/src/lib/design/asset-shot.js +2 -2
  18. package/src/lib/design/asset-shot.js.map +1 -1
  19. package/src/lib/design/build-watch.d.ts +26 -0
  20. package/src/lib/design/build-watch.js +138 -0
  21. package/src/lib/design/build-watch.js.map +1 -0
  22. package/src/lib/design/check.js +142 -16
  23. package/src/lib/design/check.js.map +1 -1
  24. package/src/lib/design/commit-hunks.d.ts +22 -0
  25. package/src/lib/design/commit-hunks.js +173 -0
  26. package/src/lib/design/commit-hunks.js.map +1 -0
  27. package/src/lib/design/design-command.d.ts +2 -0
  28. package/src/lib/design/design-command.js +160 -11
  29. package/src/lib/design/design-command.js.map +1 -1
  30. package/src/lib/design/force-interactions.d.ts +1 -1
  31. package/src/lib/design/force-interactions.js +4 -2
  32. package/src/lib/design/force-interactions.js.map +1 -1
  33. package/src/lib/design/inbox-command.js +9 -5
  34. package/src/lib/design/inbox-command.js.map +1 -1
  35. package/src/lib/design/mcp-command.d.ts +5 -1
  36. package/src/lib/design/mcp-command.js +29 -11
  37. package/src/lib/design/mcp-command.js.map +1 -1
  38. package/src/lib/design/merge-compare.d.ts +10 -2
  39. package/src/lib/design/merge-compare.js +63 -11
  40. package/src/lib/design/merge-compare.js.map +1 -1
  41. package/src/lib/design/motion-command.js +1 -1
  42. package/src/lib/design/motion-command.js.map +1 -1
  43. package/src/lib/design/motion-shot.js +3 -2
  44. package/src/lib/design/motion-shot.js.map +1 -1
  45. package/src/lib/design/new-call.js +19 -10
  46. package/src/lib/design/new-call.js.map +1 -1
  47. package/src/lib/design/part-marks.d.ts +3 -2
  48. package/src/lib/design/part-marks.js +13 -5
  49. package/src/lib/design/part-marks.js.map +1 -1
  50. package/src/lib/design/paths.d.ts +28 -0
  51. package/src/lib/design/paths.js.map +1 -1
  52. package/src/lib/design/product-command.d.ts +1 -1
  53. package/src/lib/design/product-command.js +12 -14
  54. package/src/lib/design/product-command.js.map +1 -1
  55. package/src/lib/design/ready-shots.d.ts +29 -3
  56. package/src/lib/design/ready-shots.js +105 -5
  57. package/src/lib/design/ready-shots.js.map +1 -1
  58. package/src/lib/design/render-packages.d.ts +4 -17
  59. package/src/lib/design/render-packages.js +20 -63
  60. package/src/lib/design/render-packages.js.map +1 -1
  61. package/src/lib/design/render-worker.js +1 -3
  62. package/src/lib/design/render-worker.js.map +1 -1
  63. package/src/lib/design/render.d.ts +2 -0
  64. package/src/lib/design/render.js +32 -7
  65. package/src/lib/design/render.js.map +1 -1
  66. package/src/lib/design/serve.d.ts +21 -1
  67. package/src/lib/design/serve.js +133 -19
  68. package/src/lib/design/serve.js.map +1 -1
  69. package/src/lib/design/server-identity.d.ts +36 -0
  70. package/src/lib/design/server-identity.js +68 -0
  71. package/src/lib/design/server-identity.js.map +1 -0
  72. package/src/lib/design/settle-frames.d.ts +4 -0
  73. package/src/lib/design/settle-frames.js +22 -0
  74. package/src/lib/design/settle-frames.js.map +1 -0
  75. package/src/lib/design/shot-command.d.ts +25 -4
  76. package/src/lib/design/shot-command.js +132 -46
  77. package/src/lib/design/shot-command.js.map +1 -1
  78. package/src/lib/design/shot.d.ts +50 -0
  79. package/src/lib/design/shot.js +143 -17
  80. package/src/lib/design/shot.js.map +1 -1
  81. package/src/lib/design/sketch-command.d.ts +6 -1
  82. package/src/lib/design/sketch-command.js +358 -126
  83. package/src/lib/design/sketch-command.js.map +1 -1
  84. package/src/lib/design/stale-cli-dist.d.ts +11 -0
  85. package/src/lib/design/stale-cli-dist.js +56 -0
  86. package/src/lib/design/stale-cli-dist.js.map +1 -0
  87. package/src/lib/design/stamp.d.ts +18 -1
  88. package/src/lib/design/stamp.js +53 -7
  89. package/src/lib/design/stamp.js.map +1 -1
  90. package/src/lib/design/started-by-studio.d.ts +1 -0
  91. package/src/lib/design/started-by-studio.js +6 -0
  92. package/src/lib/design/started-by-studio.js.map +1 -0
  93. package/src/lib/design/studio-api.d.ts +27 -8
  94. package/src/lib/design/studio-api.js +263 -58
  95. package/src/lib/design/studio-api.js.map +1 -1
  96. package/src/lib/design/system/accept-command.d.ts +39 -5
  97. package/src/lib/design/system/accept-command.js +109 -25
  98. package/src/lib/design/system/accept-command.js.map +1 -1
  99. package/src/lib/design/system/accepted-pictures.d.ts +83 -0
  100. package/src/lib/design/system/accepted-pictures.js +324 -0
  101. package/src/lib/design/system/accepted-pictures.js.map +1 -0
  102. package/src/lib/design/system/action-lost.d.ts +59 -0
  103. package/src/lib/design/system/action-lost.js +120 -0
  104. package/src/lib/design/system/action-lost.js.map +1 -0
  105. package/src/lib/design/system/action-press.d.ts +23 -0
  106. package/src/lib/design/system/action-press.js +76 -0
  107. package/src/lib/design/system/action-press.js.map +1 -0
  108. package/src/lib/design/system/action-undeclared.d.ts +34 -0
  109. package/src/lib/design/system/action-undeclared.js +81 -0
  110. package/src/lib/design/system/action-undeclared.js.map +1 -0
  111. package/src/lib/design/system/actions-command.d.ts +101 -0
  112. package/src/lib/design/system/actions-command.js +695 -0
  113. package/src/lib/design/system/actions-command.js.map +1 -0
  114. package/src/lib/design/system/actions.d.ts +158 -0
  115. package/src/lib/design/system/actions.js +295 -0
  116. package/src/lib/design/system/actions.js.map +1 -0
  117. package/src/lib/design/system/app-files.d.ts +10 -0
  118. package/src/lib/design/system/app-files.js +159 -0
  119. package/src/lib/design/system/app-files.js.map +1 -0
  120. package/src/lib/design/system/bespoke-controls.d.ts +30 -0
  121. package/src/lib/design/system/bespoke-controls.js +147 -0
  122. package/src/lib/design/system/bespoke-controls.js.map +1 -0
  123. package/src/lib/design/system/build-ready-contract.d.ts +27 -0
  124. package/src/lib/design/system/build-ready-contract.js +12 -0
  125. package/src/lib/design/system/build-ready-contract.js.map +1 -0
  126. package/src/lib/design/system/check-rules.d.ts +1 -0
  127. package/src/lib/design/system/check-rules.js +82 -0
  128. package/src/lib/design/system/check-rules.js.map +1 -0
  129. package/src/lib/design/system/check-system.d.ts +61 -6
  130. package/src/lib/design/system/check-system.js +479 -68
  131. package/src/lib/design/system/check-system.js.map +1 -1
  132. package/src/lib/design/system/comments/comment.d.ts +4 -1
  133. package/src/lib/design/system/comments/comment.js +13 -4
  134. package/src/lib/design/system/comments/comment.js.map +1 -1
  135. package/src/lib/design/system/comments/inbox.js +2 -2
  136. package/src/lib/design/system/comments/inbox.js.map +1 -1
  137. package/src/lib/design/system/compare-command.d.ts +119 -0
  138. package/src/lib/design/system/compare-command.js +558 -0
  139. package/src/lib/design/system/compare-command.js.map +1 -0
  140. package/src/lib/design/system/complete-command.js +1 -1
  141. package/src/lib/design/system/complete-command.js.map +1 -1
  142. package/src/lib/design/system/complete.d.ts +32 -1
  143. package/src/lib/design/system/complete.js +144 -48
  144. package/src/lib/design/system/complete.js.map +1 -1
  145. package/src/lib/design/system/component-outputs.d.ts +20 -0
  146. package/src/lib/design/system/component-outputs.js +86 -0
  147. package/src/lib/design/system/component-outputs.js.map +1 -0
  148. package/src/lib/design/system/contrast-check.d.ts +1 -1
  149. package/src/lib/design/system/contrast-check.js +14 -3
  150. package/src/lib/design/system/contrast-check.js.map +1 -1
  151. package/src/lib/design/system/demo-backdrop.d.ts +11 -0
  152. package/src/lib/design/system/demo-backdrop.js +41 -0
  153. package/src/lib/design/system/demo-backdrop.js.map +1 -0
  154. package/src/lib/design/system/design-hash.d.ts +31 -0
  155. package/src/lib/design/system/design-hash.js +73 -0
  156. package/src/lib/design/system/design-hash.js.map +1 -0
  157. package/src/lib/design/system/disabled-interaction.d.ts +8 -0
  158. package/src/lib/design/system/disabled-interaction.js +37 -0
  159. package/src/lib/design/system/disabled-interaction.js.map +1 -0
  160. package/src/lib/design/system/dom-command.d.ts +36 -0
  161. package/src/lib/design/system/dom-command.js +175 -0
  162. package/src/lib/design/system/dom-command.js.map +1 -0
  163. package/src/lib/design/system/drawn-open-points.d.ts +25 -3
  164. package/src/lib/design/system/drawn-open-points.js +65 -14
  165. package/src/lib/design/system/drawn-open-points.js.map +1 -1
  166. package/src/lib/design/system/dropped-props.d.ts +25 -0
  167. package/src/lib/design/system/dropped-props.js +159 -0
  168. package/src/lib/design/system/dropped-props.js.map +1 -0
  169. package/src/lib/design/system/embedded-actions.d.ts +21 -0
  170. package/src/lib/design/system/embedded-actions.js +37 -0
  171. package/src/lib/design/system/embedded-actions.js.map +1 -0
  172. package/src/lib/design/system/exceptions.js +2 -1
  173. package/src/lib/design/system/exceptions.js.map +1 -1
  174. package/src/lib/design/system/flows/flow.js +2 -1
  175. package/src/lib/design/system/flows/flow.js.map +1 -1
  176. package/src/lib/design/system/frozen-animations.d.ts +13 -0
  177. package/src/lib/design/system/frozen-animations.js +51 -0
  178. package/src/lib/design/system/frozen-animations.js.map +1 -0
  179. package/src/lib/design/system/go-batch.d.ts +24 -0
  180. package/src/lib/design/system/go-batch.js +110 -0
  181. package/src/lib/design/system/go-batch.js.map +1 -0
  182. package/src/lib/design/system/go-command.d.ts +4 -0
  183. package/src/lib/design/system/go-command.js +64 -0
  184. package/src/lib/design/system/go-command.js.map +1 -0
  185. package/src/lib/design/system/go-guard.d.ts +26 -0
  186. package/src/lib/design/system/go-guard.js +70 -0
  187. package/src/lib/design/system/go-guard.js.map +1 -0
  188. package/src/lib/design/system/go-step.d.ts +13 -0
  189. package/src/lib/design/system/go-step.js +84 -0
  190. package/src/lib/design/system/go-step.js.map +1 -0
  191. package/src/lib/design/system/handoff.js +2 -1
  192. package/src/lib/design/system/handoff.js.map +1 -1
  193. package/src/lib/design/system/harness-build-cache.d.ts +35 -0
  194. package/src/lib/design/system/harness-build-cache.js +175 -0
  195. package/src/lib/design/system/harness-build-cache.js.map +1 -0
  196. package/src/lib/design/system/harness-command.d.ts +7 -0
  197. package/src/lib/design/system/harness-command.js +51 -0
  198. package/src/lib/design/system/harness-command.js.map +1 -0
  199. package/src/lib/design/system/harness-config.d.ts +9 -0
  200. package/src/lib/design/system/harness-config.js +65 -0
  201. package/src/lib/design/system/harness-config.js.map +1 -0
  202. package/src/lib/design/system/harness-map.d.ts +44 -0
  203. package/src/lib/design/system/harness-map.js +126 -0
  204. package/src/lib/design/system/harness-map.js.map +1 -0
  205. package/src/lib/design/system/harness-samples.d.ts +20 -0
  206. package/src/lib/design/system/harness-samples.js +92 -0
  207. package/src/lib/design/system/harness-samples.js.map +1 -0
  208. package/src/lib/design/system/harness-server.d.ts +40 -0
  209. package/src/lib/design/system/harness-server.js +296 -0
  210. package/src/lib/design/system/harness-server.js.map +1 -0
  211. package/src/lib/design/system/imports.js +14 -1
  212. package/src/lib/design/system/imports.js.map +1 -1
  213. package/src/lib/design/system/in-order-at-once.d.ts +6 -0
  214. package/src/lib/design/system/in-order-at-once.js +28 -0
  215. package/src/lib/design/system/in-order-at-once.js.map +1 -0
  216. package/src/lib/design/system/inventory-approval.js +2 -1
  217. package/src/lib/design/system/inventory-approval.js.map +1 -1
  218. package/src/lib/design/system/inventory.d.ts +13 -4
  219. package/src/lib/design/system/inventory.js +36 -7
  220. package/src/lib/design/system/inventory.js.map +1 -1
  221. package/src/lib/design/system/list-system.d.ts +4 -0
  222. package/src/lib/design/system/list-system.js +12 -3
  223. package/src/lib/design/system/list-system.js.map +1 -1
  224. package/src/lib/design/system/live-actions.d.ts +121 -0
  225. package/src/lib/design/system/live-actions.js +665 -0
  226. package/src/lib/design/system/live-actions.js.map +1 -0
  227. package/src/lib/design/system/live-compare.d.ts +136 -0
  228. package/src/lib/design/system/live-compare.js +441 -0
  229. package/src/lib/design/system/live-compare.js.map +1 -0
  230. package/src/lib/design/system/live-uncovered.d.ts +40 -0
  231. package/src/lib/design/system/live-uncovered.js +123 -0
  232. package/src/lib/design/system/live-uncovered.js.map +1 -0
  233. package/src/lib/design/system/nested-scroll.d.ts +7 -0
  234. package/src/lib/design/system/nested-scroll.js +25 -0
  235. package/src/lib/design/system/nested-scroll.js.map +1 -0
  236. package/src/lib/design/system/notes/note.js +2 -1
  237. package/src/lib/design/system/notes/note.js.map +1 -1
  238. package/src/lib/design/system/occluded.d.ts +13 -0
  239. package/src/lib/design/system/occluded.js +111 -0
  240. package/src/lib/design/system/occluded.js.map +1 -0
  241. package/src/lib/design/system/open-points.d.ts +24 -6
  242. package/src/lib/design/system/open-points.js +59 -30
  243. package/src/lib/design/system/open-points.js.map +1 -1
  244. package/src/lib/design/system/part-build-ready.d.ts +39 -0
  245. package/src/lib/design/system/part-build-ready.js +107 -0
  246. package/src/lib/design/system/part-build-ready.js.map +1 -0
  247. package/src/lib/design/system/part-command.js +2 -9
  248. package/src/lib/design/system/part-command.js.map +1 -1
  249. package/src/lib/design/system/part-compare.d.ts +123 -0
  250. package/src/lib/design/system/part-compare.js +396 -0
  251. package/src/lib/design/system/part-compare.js.map +1 -0
  252. package/src/lib/design/system/part-go.d.ts +70 -0
  253. package/src/lib/design/system/part-go.js +94 -0
  254. package/src/lib/design/system/part-go.js.map +1 -0
  255. package/src/lib/design/system/part-ready.d.ts +44 -6
  256. package/src/lib/design/system/part-ready.js +88 -17
  257. package/src/lib/design/system/part-ready.js.map +1 -1
  258. package/src/lib/design/system/part-task.d.ts +147 -0
  259. package/src/lib/design/system/part-task.js +285 -0
  260. package/src/lib/design/system/part-task.js.map +1 -0
  261. package/src/lib/design/system/pointer-focus.d.ts +81 -0
  262. package/src/lib/design/system/pointer-focus.js +152 -0
  263. package/src/lib/design/system/pointer-focus.js.map +1 -0
  264. package/src/lib/design/system/prettier.d.ts +10 -0
  265. package/src/lib/design/system/prettier.js +36 -0
  266. package/src/lib/design/system/prettier.js.map +1 -0
  267. package/src/lib/design/system/reach.d.ts +12 -0
  268. package/src/lib/design/system/reach.js +186 -0
  269. package/src/lib/design/system/reach.js.map +1 -0
  270. package/src/lib/design/system/reachable-controls.d.ts +6 -0
  271. package/src/lib/design/system/reachable-controls.js +19 -0
  272. package/src/lib/design/system/reachable-controls.js.map +1 -0
  273. package/src/lib/design/system/reachable-files.d.ts +14 -0
  274. package/src/lib/design/system/reachable-files.js +101 -0
  275. package/src/lib/design/system/reachable-files.js.map +1 -0
  276. package/src/lib/design/system/reached-state.d.ts +23 -0
  277. package/src/lib/design/system/reached-state.js +53 -0
  278. package/src/lib/design/system/reached-state.js.map +1 -0
  279. package/src/lib/design/system/read-open-points.d.ts +9 -3
  280. package/src/lib/design/system/read-open-points.js +38 -9
  281. package/src/lib/design/system/read-open-points.js.map +1 -1
  282. package/src/lib/design/system/ready-command.d.ts +6 -2
  283. package/src/lib/design/system/ready-command.js +32 -15
  284. package/src/lib/design/system/ready-command.js.map +1 -1
  285. package/src/lib/design/system/render-check.d.ts +50 -0
  286. package/src/lib/design/system/render-check.js +341 -88
  287. package/src/lib/design/system/render-check.js.map +1 -1
  288. package/src/lib/design/system/resolve-product.js +5 -0
  289. package/src/lib/design/system/resolve-product.js.map +1 -1
  290. package/src/lib/design/system/rules/app-spec.d.ts +30 -0
  291. package/src/lib/design/system/rules/app-spec.js +87 -0
  292. package/src/lib/design/system/rules/app-spec.js.map +1 -0
  293. package/src/lib/design/system/rules/canonical-class.d.ts +2 -0
  294. package/src/lib/design/system/rules/canonical-class.js +36 -110
  295. package/src/lib/design/system/rules/canonical-class.js.map +1 -1
  296. package/src/lib/design/system/rules/capability-place.d.ts +44 -0
  297. package/src/lib/design/system/rules/capability-place.js +116 -0
  298. package/src/lib/design/system/rules/capability-place.js.map +1 -0
  299. package/src/lib/design/system/rules/denied-class.d.ts +9 -0
  300. package/src/lib/design/system/rules/denied-class.js +121 -0
  301. package/src/lib/design/system/rules/denied-class.js.map +1 -0
  302. package/src/lib/design/system/rules/exemptions.d.ts +18 -0
  303. package/src/lib/design/system/rules/exemptions.js +18 -0
  304. package/src/lib/design/system/rules/exemptions.js.map +1 -0
  305. package/src/lib/design/system/rules/flow.js +1 -1
  306. package/src/lib/design/system/rules/flow.js.map +1 -1
  307. package/src/lib/design/system/rules/glued-interpolation.d.ts +8 -0
  308. package/src/lib/design/system/rules/glued-interpolation.js +61 -0
  309. package/src/lib/design/system/rules/glued-interpolation.js.map +1 -0
  310. package/src/lib/design/system/rules/hard-coded-colour.js +2 -1
  311. package/src/lib/design/system/rules/hard-coded-colour.js.map +1 -1
  312. package/src/lib/design/system/rules/implemented-components.d.ts +22 -0
  313. package/src/lib/design/system/rules/implemented-components.js +45 -0
  314. package/src/lib/design/system/rules/implemented-components.js.map +1 -0
  315. package/src/lib/design/system/rules/implements.d.ts +2 -1
  316. package/src/lib/design/system/rules/implements.js +26 -21
  317. package/src/lib/design/system/rules/implements.js.map +1 -1
  318. package/src/lib/design/system/rules/inline-svg.js +4 -1
  319. package/src/lib/design/system/rules/inline-svg.js.map +1 -1
  320. package/src/lib/design/system/rules/inline-ui-in-page-open.d.ts +13 -0
  321. package/src/lib/design/system/rules/inline-ui-in-page-open.js +5 -0
  322. package/src/lib/design/system/rules/inline-ui-in-page-open.js.map +1 -0
  323. package/src/lib/design/system/rules/inline-ui-in-page.d.ts +18 -0
  324. package/src/lib/design/system/rules/inline-ui-in-page.js +123 -0
  325. package/src/lib/design/system/rules/inline-ui-in-page.js.map +1 -0
  326. package/src/lib/design/system/rules/inline-ui.d.ts +16 -0
  327. package/src/lib/design/system/rules/inline-ui.js +100 -0
  328. package/src/lib/design/system/rules/inline-ui.js.map +1 -0
  329. package/src/lib/design/system/rules/motion.d.ts +1 -1
  330. package/src/lib/design/system/rules/motion.js +25 -17
  331. package/src/lib/design/system/rules/motion.js.map +1 -1
  332. package/src/lib/design/system/rules/native-title.d.ts +7 -0
  333. package/src/lib/design/system/rules/native-title.js +64 -0
  334. package/src/lib/design/system/rules/native-title.js.map +1 -0
  335. package/src/lib/design/system/rules/orphan-endpoint-known.d.ts +12 -0
  336. package/src/lib/design/system/rules/orphan-endpoint-known.js +20 -0
  337. package/src/lib/design/system/rules/orphan-endpoint-known.js.map +1 -0
  338. package/src/lib/design/system/rules/orphan-endpoint.d.ts +23 -0
  339. package/src/lib/design/system/rules/orphan-endpoint.js +166 -0
  340. package/src/lib/design/system/rules/orphan-endpoint.js.map +1 -0
  341. package/src/lib/design/system/rules/part-rewrite.d.ts +13 -0
  342. package/src/lib/design/system/rules/part-rewrite.js +125 -0
  343. package/src/lib/design/system/rules/part-rewrite.js.map +1 -0
  344. package/src/lib/design/system/rules/sample-default-known.d.ts +5 -0
  345. package/src/lib/design/system/rules/sample-default-known.js +17 -0
  346. package/src/lib/design/system/rules/sample-default-known.js.map +1 -0
  347. package/src/lib/design/system/rules/sample-default.d.ts +22 -0
  348. package/src/lib/design/system/rules/sample-default.js +92 -0
  349. package/src/lib/design/system/rules/sample-default.js.map +1 -0
  350. package/src/lib/design/system/rules/stale-replace.js +4 -0
  351. package/src/lib/design/system/rules/stale-replace.js.map +1 -1
  352. package/src/lib/design/system/rules/state-in-component.d.ts +16 -0
  353. package/src/lib/design/system/rules/state-in-component.js +101 -0
  354. package/src/lib/design/system/rules/state-in-component.js.map +1 -0
  355. package/src/lib/design/system/rules/tailwind-classes.d.ts +51 -0
  356. package/src/lib/design/system/rules/tailwind-classes.js +232 -0
  357. package/src/lib/design/system/rules/tailwind-classes.js.map +1 -0
  358. package/src/lib/design/system/rules/top-level-await.d.ts +9 -0
  359. package/src/lib/design/system/rules/top-level-await.js +62 -0
  360. package/src/lib/design/system/rules/top-level-await.js.map +1 -0
  361. package/src/lib/design/system/rules/unbound-input-known.d.ts +5 -0
  362. package/src/lib/design/system/rules/unbound-input-known.js +47 -0
  363. package/src/lib/design/system/rules/unbound-input-known.js.map +1 -0
  364. package/src/lib/design/system/rules/unbound-input.d.ts +22 -0
  365. package/src/lib/design/system/rules/unbound-input.js +61 -0
  366. package/src/lib/design/system/rules/unbound-input.js.map +1 -0
  367. package/src/lib/design/system/rules/uncovered-region.d.ts +13 -0
  368. package/src/lib/design/system/rules/uncovered-region.js +36 -0
  369. package/src/lib/design/system/rules/uncovered-region.js.map +1 -0
  370. package/src/lib/design/system/rules/undefined-class.d.ts +9 -0
  371. package/src/lib/design/system/rules/undefined-class.js +32 -0
  372. package/src/lib/design/system/rules/undefined-class.js.map +1 -0
  373. package/src/lib/design/system/rules/undefined-token.d.ts +1 -1
  374. package/src/lib/design/system/rules/undefined-token.js +7 -61
  375. package/src/lib/design/system/rules/undefined-token.js.map +1 -1
  376. package/src/lib/design/system/rules/utility-css.d.ts +2 -1
  377. package/src/lib/design/system/rules/utility-css.js +29 -14
  378. package/src/lib/design/system/rules/utility-css.js.map +1 -1
  379. package/src/lib/design/system/rules/view-coverage.d.ts +8 -0
  380. package/src/lib/design/system/rules/view-coverage.js +51 -0
  381. package/src/lib/design/system/rules/view-coverage.js.map +1 -0
  382. package/src/lib/design/system/rules/visible-change.d.ts +20 -0
  383. package/src/lib/design/system/rules/visible-change.js +48 -0
  384. package/src/lib/design/system/rules/visible-change.js.map +1 -0
  385. package/src/lib/design/system/sdk-errors.d.ts +14 -0
  386. package/src/lib/design/system/sdk-errors.js +38 -0
  387. package/src/lib/design/system/sdk-errors.js.map +1 -0
  388. package/src/lib/design/system/see-through.d.ts +12 -0
  389. package/src/lib/design/system/see-through.js +112 -0
  390. package/src/lib/design/system/see-through.js.map +1 -0
  391. package/src/lib/design/system/settled-panes.d.ts +18 -0
  392. package/src/lib/design/system/settled-panes.js +70 -0
  393. package/src/lib/design/system/settled-panes.js.map +1 -0
  394. package/src/lib/design/system/sketch/after-merge.d.ts +11 -0
  395. package/src/lib/design/system/sketch/after-merge.js +51 -0
  396. package/src/lib/design/system/sketch/after-merge.js.map +1 -0
  397. package/src/lib/design/system/sketch/aktuell-placeholders.d.ts +30 -0
  398. package/src/lib/design/system/sketch/aktuell-placeholders.js +87 -0
  399. package/src/lib/design/system/sketch/aktuell-placeholders.js.map +1 -0
  400. package/src/lib/design/system/sketch/baseline.d.ts +19 -1
  401. package/src/lib/design/system/sketch/baseline.js +29 -7
  402. package/src/lib/design/system/sketch/baseline.js.map +1 -1
  403. package/src/lib/design/system/sketch/check-sketches.d.ts +10 -0
  404. package/src/lib/design/system/sketch/check-sketches.js +50 -4
  405. package/src/lib/design/system/sketch/check-sketches.js.map +1 -1
  406. package/src/lib/design/system/sketch/cli-args.d.ts +12 -2
  407. package/src/lib/design/system/sketch/cli-args.js +18 -3
  408. package/src/lib/design/system/sketch/cli-args.js.map +1 -1
  409. package/src/lib/design/system/sketch/edit-sketch.d.ts +21 -0
  410. package/src/lib/design/system/sketch/edit-sketch.js +117 -0
  411. package/src/lib/design/system/sketch/edit-sketch.js.map +1 -0
  412. package/src/lib/design/system/sketch/frame-budget.d.ts +24 -0
  413. package/src/lib/design/system/sketch/frame-budget.js +23 -0
  414. package/src/lib/design/system/sketch/frame-budget.js.map +1 -0
  415. package/src/lib/design/system/sketch/identical-renders.d.ts +31 -0
  416. package/src/lib/design/system/sketch/identical-renders.js +137 -0
  417. package/src/lib/design/system/sketch/identical-renders.js.map +1 -0
  418. package/src/lib/design/system/sketch/merge-shared.d.ts +2 -0
  419. package/src/lib/design/system/sketch/merge-shared.js +7 -10
  420. package/src/lib/design/system/sketch/merge-shared.js.map +1 -1
  421. package/src/lib/design/system/sketch/merge-step.d.ts +35 -0
  422. package/src/lib/design/system/sketch/merge-step.js +98 -0
  423. package/src/lib/design/system/sketch/merge-step.js.map +1 -0
  424. package/src/lib/design/system/sketch/merge.d.ts +10 -3
  425. package/src/lib/design/system/sketch/merge.js +103 -30
  426. package/src/lib/design/system/sketch/merge.js.map +1 -1
  427. package/src/lib/design/system/sketch/merged-layout.d.ts +17 -0
  428. package/src/lib/design/system/sketch/merged-layout.js +57 -0
  429. package/src/lib/design/system/sketch/merged-layout.js.map +1 -0
  430. package/src/lib/design/system/sketch/merged-parts.d.ts +40 -10
  431. package/src/lib/design/system/sketch/merged-parts.js +112 -49
  432. package/src/lib/design/system/sketch/merged-parts.js.map +1 -1
  433. package/src/lib/design/system/sketch/no-visible-change.d.ts +10 -0
  434. package/src/lib/design/system/sketch/no-visible-change.js +16 -6
  435. package/src/lib/design/system/sketch/no-visible-change.js.map +1 -1
  436. package/src/lib/design/system/sketch/part-definition.d.ts +21 -1
  437. package/src/lib/design/system/sketch/part-definition.js +79 -17
  438. package/src/lib/design/system/sketch/part-definition.js.map +1 -1
  439. package/src/lib/design/system/sketch/rebase-port.d.ts +24 -0
  440. package/src/lib/design/system/sketch/rebase-port.js +170 -0
  441. package/src/lib/design/system/sketch/rebase-port.js.map +1 -0
  442. package/src/lib/design/system/sketch/sample-mark-drift.d.ts +33 -0
  443. package/src/lib/design/system/sketch/sample-mark-drift.js +88 -0
  444. package/src/lib/design/system/sketch/sample-mark-drift.js.map +1 -0
  445. package/src/lib/design/system/sketch/sketch-check-worker.d.ts +1 -0
  446. package/src/lib/design/system/sketch/sketch-check-worker.js +27 -0
  447. package/src/lib/design/system/sketch/sketch-check-worker.js.map +1 -0
  448. package/src/lib/design/system/sketch/sketch-checker.d.ts +27 -0
  449. package/src/lib/design/system/sketch/sketch-checker.js +99 -0
  450. package/src/lib/design/system/sketch/sketch-checker.js.map +1 -0
  451. package/src/lib/design/system/sketch/sketch.d.ts +63 -2
  452. package/src/lib/design/system/sketch/sketch.js +185 -30
  453. package/src/lib/design/system/sketch/sketch.js.map +1 -1
  454. package/src/lib/design/system/sketch/stale-base.d.ts +22 -0
  455. package/src/lib/design/system/sketch/stale-base.js +56 -0
  456. package/src/lib/design/system/sketch/stale-base.js.map +1 -0
  457. package/src/lib/design/system/sketch/unchanged-states.d.ts +32 -0
  458. package/src/lib/design/system/sketch/unchanged-states.js +52 -13
  459. package/src/lib/design/system/sketch/unchanged-states.js.map +1 -1
  460. package/src/lib/design/system/sketch/unused-closure.js +16 -4
  461. package/src/lib/design/system/sketch/unused-closure.js.map +1 -1
  462. package/src/lib/design/system/sketch/viewed-shots.d.ts +24 -0
  463. package/src/lib/design/system/sketch/viewed-shots.js +61 -0
  464. package/src/lib/design/system/sketch/viewed-shots.js.map +1 -0
  465. package/src/lib/design/system/slow-checks.d.ts +40 -0
  466. package/src/lib/design/system/slow-checks.js +197 -0
  467. package/src/lib/design/system/slow-checks.js.map +1 -0
  468. package/src/lib/design/system/slow-run.d.ts +57 -0
  469. package/src/lib/design/system/slow-run.js +253 -0
  470. package/src/lib/design/system/slow-run.js.map +1 -0
  471. package/src/lib/design/system/stale-design-mocks.d.ts +20 -0
  472. package/src/lib/design/system/stale-design-mocks.js +59 -0
  473. package/src/lib/design/system/stale-design-mocks.js.map +1 -0
  474. package/src/lib/design/system/stale-dist.d.ts +25 -0
  475. package/src/lib/design/system/stale-dist.js +91 -0
  476. package/src/lib/design/system/stale-dist.js.map +1 -0
  477. package/src/lib/design/system/stale-parts.d.ts +30 -0
  478. package/src/lib/design/system/stale-parts.js +106 -0
  479. package/src/lib/design/system/stale-parts.js.map +1 -0
  480. package/src/lib/design/system/surface-nesting.d.ts +11 -0
  481. package/src/lib/design/system/surface-nesting.js +86 -0
  482. package/src/lib/design/system/surface-nesting.js.map +1 -0
  483. package/src/lib/design/system/system-command.js +8 -6
  484. package/src/lib/design/system/system-command.js.map +1 -1
  485. package/src/lib/design/system/system-modules.d.ts +16 -1
  486. package/src/lib/design/system/system-modules.js +18 -2
  487. package/src/lib/design/system/system-modules.js.map +1 -1
  488. package/src/lib/design/system/task-command.d.ts +51 -0
  489. package/src/lib/design/system/task-command.js +233 -0
  490. package/src/lib/design/system/task-command.js.map +1 -0
  491. package/src/lib/design/system/theming-text.d.ts +2 -0
  492. package/src/lib/design/system/theming-text.js +6 -0
  493. package/src/lib/design/system/theming-text.js.map +1 -0
  494. package/src/lib/design/system/tom-confirm.d.ts +40 -0
  495. package/src/lib/design/system/tom-confirm.js +55 -0
  496. package/src/lib/design/system/tom-confirm.js.map +1 -0
  497. package/src/lib/design/system/touched-parts.d.ts +16 -0
  498. package/src/lib/design/system/touched-parts.js +122 -0
  499. package/src/lib/design/system/touched-parts.js.map +1 -0
  500. package/src/lib/design/system/ts-source.d.ts +2 -0
  501. package/src/lib/design/system/ts-source.js +15 -1
  502. package/src/lib/design/system/ts-source.js.map +1 -1
  503. package/src/lib/design/system/unchanged-rows.d.ts +15 -0
  504. package/src/lib/design/system/unchanged-rows.js +134 -0
  505. package/src/lib/design/system/unchanged-rows.js.map +1 -0
  506. package/src/lib/design/system/uncommitted-decisions.d.ts +6 -0
  507. package/src/lib/design/system/uncommitted-decisions.js +38 -0
  508. package/src/lib/design/system/uncommitted-decisions.js.map +1 -0
  509. package/src/lib/design/system/uncovered-regions.d.ts +61 -0
  510. package/src/lib/design/system/uncovered-regions.js +171 -0
  511. package/src/lib/design/system/uncovered-regions.js.map +1 -0
  512. package/src/lib/design/system/unused-base-parts.d.ts +7 -0
  513. package/src/lib/design/system/unused-base-parts.js +76 -0
  514. package/src/lib/design/system/unused-base-parts.js.map +1 -0
  515. package/src/lib/design/system/visible-change-command.d.ts +48 -0
  516. package/src/lib/design/system/visible-change-command.js +308 -0
  517. package/src/lib/design/system/visible-change-command.js.map +1 -0
  518. package/src/lib/design/system/visible-change-parts.d.ts +28 -0
  519. package/src/lib/design/system/visible-change-parts.js +96 -0
  520. package/src/lib/design/system/visible-change-parts.js.map +1 -0
  521. package/src/lib/design/system/visible-change.d.ts +82 -0
  522. package/src/lib/design/system/visible-change.js +149 -0
  523. package/src/lib/design/system/visible-change.js.map +1 -0
  524. package/src/lib/design/thumb.d.ts +19 -2
  525. package/src/lib/design/thumb.js +50 -15
  526. package/src/lib/design/thumb.js.map +1 -1
  527. package/src/lib/design/typecheck.d.ts +1 -1
  528. package/src/lib/design/typecheck.js +3 -3
  529. package/src/lib/design/typecheck.js.map +1 -1
  530. package/src/lib/design/unstable-cells.d.ts +23 -0
  531. package/src/lib/design/unstable-cells.js +40 -0
  532. package/src/lib/design/unstable-cells.js.map +1 -0
  533. package/src/lib/design/variant-diff.js +1 -1
  534. package/src/lib/design/variant-diff.js.map +1 -1
  535. package/src/lib/design/wait.d.ts +15 -0
  536. package/src/lib/design/wait.js +30 -0
  537. package/src/lib/design/wait.js.map +1 -0
  538. package/src/lib/json-file.d.ts +11 -0
  539. package/src/lib/json-file.js +21 -0
  540. package/src/lib/json-file.js.map +1 -0
  541. package/src/lib/source-hash.d.ts +7 -0
  542. package/src/lib/source-hash.js +62 -0
  543. package/src/lib/source-hash.js.map +1 -0
  544. package/src/lib/update/agent-setup.js +2 -1
  545. package/src/lib/update/agent-setup.js.map +1 -1
  546. package/src/lib/update/migration-manifest.d.ts +12 -0
  547. package/src/lib/update/migration-manifest.js +13 -0
  548. package/src/lib/update/migration-manifest.js.map +1 -1
  549. package/src/lib/update/migration-record.js +2 -1
  550. package/src/lib/update/migration-record.js.map +1 -1
  551. package/src/lib/update/pending.js +2 -1
  552. package/src/lib/update/pending.js.map +1 -1
  553. package/src/lib/update/run-migrations.d.ts +3 -2
  554. package/src/lib/update/run-migrations.js +38 -5
  555. package/src/lib/update/run-migrations.js.map +1 -1
  556. package/src/lib/update/tasks.js +2 -1
  557. package/src/lib/update/tasks.js.map +1 -1
@@ -0,0 +1,285 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.doneParts = exports.changedAppFilesOf = exports.linkedComponentOf = exports.themingDirectivesOf = exports.gitDiffFilesOf = exports.verifyRangeOf = exports.gitDiffPatchOf = exports.changesOnlySourceLines = exports.gitFileAtOf = exports.gitTreeFilesOf = exports.wiringFilesOf = exports.designFilesOf = exports.importersOf = exports.filesOutsideOf = exports.allowedFilesOf = exports.taskStatesOf = exports.verifiedTaskPartOf = exports.taskPartOf = exports.linkedTaskPartOf = exports.markImplemented = exports.readImplemented = exports.stateHashOf = exports.IMPLEMENTED_FILE = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const json_file_1 = require("../../json-file");
6
+ const crypto_1 = require("crypto");
7
+ const fs_1 = require("fs");
8
+ const path_1 = require("path");
9
+ const app_files_1 = require("./app-files");
10
+ const design_hash_1 = require("./design-hash");
11
+ const paths_1 = require("../paths");
12
+ const harness_config_1 = require("./harness-config");
13
+ const part_build_ready_1 = require("./part-build-ready");
14
+ const part_ready_1 = require("./part-ready");
15
+ const reachable_files_1 = require("./reachable-files");
16
+ const resolve_product_1 = require("./resolve-product");
17
+ const part_definition_1 = require("./sketch/part-definition");
18
+ exports.IMPLEMENTED_FILE = 'implemented.json';
19
+ const implementedFileOf = (dir) => (0, path_1.resolve)(dir, exports.IMPLEMENTED_FILE);
20
+ const isRecord = (value) => !!value && typeof value === 'object' && !Array.isArray(value);
21
+ const isImplemented = (value) => isRecord(value) &&
22
+ typeof value['hash'] === 'string' &&
23
+ typeof value['at'] === 'string' &&
24
+ isRecord(value['states']) &&
25
+ Object.values(value['states']).every((hash) => typeof hash === 'string') &&
26
+ (0, design_hash_1.isOptionalFileHashes)(value['app']);
27
+ const sortedKeys = (_key, value) => isRecord(value) ? Object.fromEntries(Object.entries(value).sort(([a], [b]) => a.localeCompare(b))) : value;
28
+ /** The hash of a state's props as JSON with sorted keys, so reordering keys is no change. */
29
+ const stateHashOf = (props) => {
30
+ var _a;
31
+ return (0, crypto_1.createHash)('sha256')
32
+ .update((_a = JSON.stringify(props, sortedKeys)) !== null && _a !== void 0 ? _a : 'undefined')
33
+ .digest('hex')
34
+ .slice(0, 16);
35
+ };
36
+ exports.stateHashOf = stateHashOf;
37
+ const readImplemented = (dir) => {
38
+ const file = implementedFileOf(dir);
39
+ if (!(0, fs_1.existsSync)(file))
40
+ return {};
41
+ try {
42
+ const parsed = JSON.parse((0, fs_1.readFileSync)(file, 'utf8'));
43
+ return isRecord(parsed)
44
+ ? Object.fromEntries(Object.entries(parsed).filter((entry) => isImplemented(entry[1])))
45
+ : {};
46
+ }
47
+ catch (_a) {
48
+ return {};
49
+ }
50
+ };
51
+ exports.readImplemented = readImplemented;
52
+ /**
53
+ * Records a part as implemented at its current hash with the props hash of each of its `states` and the `app` file
54
+ * hashes, or says why not.
55
+ */
56
+ const markImplemented = (options) => {
57
+ var _a;
58
+ const found = (0, part_ready_1.readyPartOf)({ product: options.product, part: options.part });
59
+ if (typeof found === 'string')
60
+ return found;
61
+ const implemented = Object.assign({ hash: found.hash, at: (_a = options.at) !== null && _a !== void 0 ? _a : new Date().toISOString(), states: Object.fromEntries(Object.entries(options.states)
62
+ .sort(([a], [b]) => a.localeCompare(b))
63
+ .map(([state, props]) => [state, (0, exports.stateHashOf)(props)])) }, (options.app ? { app: options.app } : {}));
64
+ const entries = Object.entries(Object.assign(Object.assign({}, (0, exports.readImplemented)(found.dir)), { [options.part]: implemented })).sort(([a], [b]) => a.localeCompare(b));
65
+ (0, json_file_1.writeJsonFile)({ file: implementedFileOf(found.dir), value: Object.fromEntries(entries) });
66
+ return implemented;
67
+ };
68
+ exports.markImplemented = markImplemented;
69
+ /** The part an `implements` link names at its current design hash, or why a task cannot build it: unknown part, no or a route-only link. */
70
+ const linkedTaskPartOf = (options) => {
71
+ const { product, part } = options;
72
+ const found = (0, part_ready_1.readyPartOf)({ product, part });
73
+ if (typeof found === 'string')
74
+ return found;
75
+ const link = (0, part_definition_1.partLinkOf)(found.resolved.source);
76
+ if (link.kind === 'none')
77
+ return `${part} has no implements link - a task needs the component it builds`;
78
+ if (link.kind === 'unreadable')
79
+ return `${part} has an implements link the task cannot read - make it a literal`;
80
+ const component = link.kind === 'route' ? link.component : link.path;
81
+ if (component === null)
82
+ return `${part} links only its route - add the presentational component it renders for compare (Q195): implements: { route: '/…', component: '<repo path>.component.ts' }`;
83
+ return { part, hash: found.hash, dir: found.dir, component };
84
+ };
85
+ exports.linkedTaskPartOf = linkedTaskPartOf;
86
+ /** The part a task builds, or why not: what `linkedTaskPartOf` refuses, or each blocker while the part is not build-ready. */
87
+ const taskPartOf = (options) => {
88
+ const linked = (0, exports.linkedTaskPartOf)(options);
89
+ if (typeof linked === 'string')
90
+ return linked;
91
+ const ready = (0, part_build_ready_1.buildReadyOf)(options);
92
+ return ready.ready
93
+ ? linked
94
+ : [
95
+ `${options.part} is not build-ready:`,
96
+ ...ready.blockers.map((blocker) => ` ${blocker.kind}: ${blocker.text}`),
97
+ ].join('\n');
98
+ };
99
+ exports.taskPartOf = taskPartOf;
100
+ /** The part `task --verify` checks, or why not: what `linkedTaskPartOf` refuses, or a check record that does not hold. */
101
+ const verifiedTaskPartOf = (options) => {
102
+ const linked = (0, exports.linkedTaskPartOf)(options);
103
+ if (typeof linked === 'string')
104
+ return linked;
105
+ return (0, part_ready_1.readyMarkOf)(options) === null
106
+ ? `${options.part} has no check record at its current design - run design check first`
107
+ : linked;
108
+ };
109
+ exports.verifiedTaskPartOf = verifiedTaskPartOf;
110
+ /** The states added or changed since the implemented record; without a record every state is added. */
111
+ const taskStatesOf = (options) => {
112
+ const { states, hash, record } = options;
113
+ const names = Object.keys(states);
114
+ if (!record)
115
+ return { added: names, changed: [], all: false };
116
+ const added = names.filter((name) => record.states[name] === undefined);
117
+ const changed = names.filter((name) => record.states[name] !== undefined && record.states[name] !== (0, exports.stateHashOf)(states[name]));
118
+ return { added, changed, all: added.length === 0 && changed.length === 0 && record.hash !== hash };
119
+ };
120
+ exports.taskStatesOf = taskStatesOf;
121
+ /**
122
+ * The repo paths a task may change: the component folder, a changeset, the harness map, the app files the harness
123
+ * shares with the design, and for `sdk` a docs guide.
124
+ */
125
+ const allowedFilesOf = (options) => {
126
+ var _a;
127
+ return [
128
+ `${path_1.posix.dirname(options.component)}/**`,
129
+ '.changeset/*.md',
130
+ ...(options.harnessMap === null ? [] : [options.harnessMap]),
131
+ ...((_a = options.shared) !== null && _a !== void 0 ? _a : []),
132
+ ...(options.product === 'sdk' ? ['apps/docs/components/**'] : []),
133
+ ];
134
+ };
135
+ exports.allowedFilesOf = allowedFilesOf;
136
+ /** The files of a diff outside the allowed patterns of `allowedFilesOf`. */
137
+ const filesOutsideOf = (options) => options.files.filter((file) => !options.allowed.some((pattern) => (0, harness_config_1.matchesPattern)(file, pattern)));
138
+ exports.filesOutsideOf = filesOutsideOf;
139
+ /**
140
+ * The files of a diff that import the part - a relative import of its component file, folder or a sibling in it - and
141
+ * the spec next to each importer.
142
+ */
143
+ const importersOf = (options) => {
144
+ const dir = path_1.posix.dirname(options.component);
145
+ const importers = options.files.filter((file) => {
146
+ const source = options.read(file);
147
+ if (source === null || !/\.ts$/u.test(file) || file.endsWith('.spec.ts'))
148
+ return false;
149
+ return Array.from(source.matchAll(/(?:from|import)\s*\(?\s*['"](\.{1,2}\/[^'"]*)['"]/gu), ([, specifier]) => path_1.posix.join(path_1.posix.dirname(file), specifier !== null && specifier !== void 0 ? specifier : '')).some((target) => target === dir || target.startsWith(`${dir}/`));
150
+ });
151
+ return options.files.filter((file) => importers.includes(file) || importers.includes(file.replace(/\.spec\.ts$/u, '.ts')));
152
+ };
153
+ exports.importersOf = importersOf;
154
+ /** The files of a diff under the design folder, which never count as implementation. */
155
+ const designFilesOf = (files) => files.filter((file) => file.startsWith(`${paths_1.DESIGN_DIR}/`));
156
+ exports.designFilesOf = designFilesOf;
157
+ const relativeImportsOf = (file, source) => Array.from(source.matchAll(/(?:from|import)\s*\(?\s*['"](\.{1,2}\/[^'"]*)['"]/gu), ([, specifier]) => path_1.posix.join(path_1.posix.dirname(file), specifier !== null && specifier !== void 0 ? specifier : ''));
158
+ /**
159
+ * The app files that wire the part in: each non-spec file under the app's `src` folder that imports the part's component
160
+ * folder, directly or through other such files, the part's own spec, and the non-spec app files its direct importers
161
+ * import.
162
+ */
163
+ const wiringFilesOf = (options) => {
164
+ const dir = path_1.posix.dirname(options.component);
165
+ const src = `${options.component.split('/').slice(0, 3).join('/')}/`;
166
+ const existing = new Set(options.files);
167
+ const resolved = (target) => { var _a; return (_a = [`${target}.ts`, target, `${target}/index.ts`].find((candidate) => existing.has(candidate))) !== null && _a !== void 0 ? _a : null; };
168
+ const candidates = options.files
169
+ .filter((file) => file.startsWith(src) && !file.startsWith(`${dir}/`))
170
+ .filter((file) => file.endsWith('.ts') && !file.endsWith('.spec.ts'))
171
+ .map((file) => {
172
+ const source = options.read(file);
173
+ return { file, imports: source === null ? [] : relativeImportsOf(file, source) };
174
+ });
175
+ const wiring = new Set([options.component.replace(/\.ts$/u, '.spec.ts')]);
176
+ const importsWiring = (target) => { var _a; return target === dir || target.startsWith(`${dir}/`) || wiring.has((_a = resolved(target)) !== null && _a !== void 0 ? _a : ''); };
177
+ for (let grown = true; grown;) {
178
+ grown = false;
179
+ for (const { file, imports } of candidates) {
180
+ if (!wiring.has(file) && imports.some(importsWiring)) {
181
+ wiring.add(file);
182
+ grown = true;
183
+ }
184
+ }
185
+ }
186
+ const direct = candidates.filter(({ imports }) => imports.some((target) => target === dir || target.startsWith(`${dir}/`)));
187
+ for (const { imports } of direct) {
188
+ for (const target of imports) {
189
+ const file = resolved(target);
190
+ if (file !== null && candidates.some((candidate) => candidate.file === file))
191
+ wiring.add(file);
192
+ }
193
+ }
194
+ return options.files.filter((file) => wiring.has(file));
195
+ };
196
+ exports.wiringFilesOf = wiringFilesOf;
197
+ /** The files git tracks under a folder at a revision. */
198
+ const gitTreeFilesOf = (options) => (0, child_process_1.execFileSync)('git', ['ls-tree', '-r', '--name-only', options.rev, '--', options.dir], {
199
+ cwd: options.root,
200
+ encoding: 'utf8',
201
+ stdio: 'pipe',
202
+ maxBuffer: 64 * 1024 * 1024,
203
+ })
204
+ .split('\n')
205
+ .filter((line) => line !== '');
206
+ exports.gitTreeFilesOf = gitTreeFilesOf;
207
+ /** The content of a file at the end of a git range, or null when it is gone. */
208
+ const gitFileAtOf = (options) => {
209
+ const end = options.range.includes('..') ? options.range.split('..').pop() : options.range;
210
+ try {
211
+ return (0, child_process_1.execFileSync)('git', ['show', `${end}:${options.file}`], {
212
+ cwd: options.root,
213
+ encoding: 'utf8',
214
+ stdio: 'pipe',
215
+ });
216
+ }
217
+ catch (_a) {
218
+ return null;
219
+ }
220
+ };
221
+ exports.gitFileAtOf = gitFileAtOf;
222
+ /** Whether a `git diff -U0` patch adds or removes only Tailwind `@source` lines. */
223
+ const changesOnlySourceLines = (patch) => patch
224
+ .split('\n')
225
+ .filter((line) => /^[+-]/.test(line) && !/^(\+\+\+|---) /.test(line))
226
+ .every((line) => /^@source\b/.test(line.slice(1).trim()));
227
+ exports.changesOnlySourceLines = changesOnlySourceLines;
228
+ /** The `git diff -U0` patch of one file in a range. */
229
+ const gitDiffPatchOf = (options) => (0, child_process_1.execFileSync)('git', ['diff', '-U0', options.range, '--', options.file], {
230
+ cwd: options.root,
231
+ encoding: 'utf8',
232
+ stdio: 'pipe',
233
+ });
234
+ exports.gitDiffPatchOf = gitDiffPatchOf;
235
+ /** The git range `--verify` checks: a range as given, a single commit `x` as `x^..x`. */
236
+ const verifyRangeOf = (rev) => (rev.includes('..') ? rev : `${rev}^..${rev}`);
237
+ exports.verifyRangeOf = verifyRangeOf;
238
+ /** The files `git diff --name-only` names for a range, from the repository root. */
239
+ const gitDiffFilesOf = (options) => (0, child_process_1.execFileSync)('git', ['diff', '--name-only', options.range], { cwd: options.root, encoding: 'utf8', stdio: 'pipe' })
240
+ .split('\n')
241
+ .filter((line) => line !== '');
242
+ exports.gitDiffFilesOf = gitDiffFilesOf;
243
+ const SURFACE_DIRECTIVES = [
244
+ ['data-et-auto-surface', 'etAutoSurface'],
245
+ ['data-et-surface-interactive', 'etSurfaceInteractive'],
246
+ ];
247
+ /**
248
+ * Each theming attribute a part's source uses, mapped to the `@ethlete/core` API the implementation puts there: the
249
+ * surface directives, and per semantic colour type `[etProvideColor]` bound to `injectSemanticColorTheme(<type>)`.
250
+ */
251
+ const themingDirectivesOf = (source) => [
252
+ ...SURFACE_DIRECTIVES.filter(([attribute]) => new RegExp(`${attribute}(?![\\w-])`, 'u').test(source)).map(([attribute, directive]) => `${attribute} -> ${directive}`),
253
+ ...[...new Set(Array.from(source.matchAll(/data-et-semantic-color=["']?([\w-]+)/gu), ([, type]) => type))].map((type) => `data-et-semantic-color="${type}" -> [etProvideColor] bound to injectSemanticColorTheme('${type}')`),
254
+ ];
255
+ exports.themingDirectivesOf = themingDirectivesOf;
256
+ /** The component an `implements` link names for compare, or `null` for none, an unreadable or a route-only link. */
257
+ const linkedComponentOf = (source) => {
258
+ const link = (0, part_definition_1.partLinkOf)(source);
259
+ return link.kind === 'component' ? link.path : link.kind === 'route' ? link.component : null;
260
+ };
261
+ exports.linkedComponentOf = linkedComponentOf;
262
+ /** The repository files of a part's app component that changed since its implemented record, `[]` without app hashes. */
263
+ const changedAppFilesOf = (options) => {
264
+ var _a, _b;
265
+ const { product, part, record } = options;
266
+ const component = (0, exports.linkedComponentOf)((_b = (_a = product.parts.find((candidate) => (0, resolve_product_1.partKeyOf)(candidate) === part)) === null || _a === void 0 ? void 0 : _a.source) !== null && _b !== void 0 ? _b : '');
267
+ if (!record.app || component === null)
268
+ return [];
269
+ return (0, design_hash_1.changedFilesOf)(record.app, (0, app_files_1.appFilesOf)({ root: (0, reachable_files_1.repoRootOf)(product), component }));
270
+ };
271
+ exports.changedAppFilesOf = changedAppFilesOf;
272
+ /**
273
+ * The parts of a product whose implemented record is at the hash of their holding check record, and whose app files did
274
+ * not change since.
275
+ */
276
+ const doneParts = (options) => options.parts.filter((part) => {
277
+ const found = (0, part_ready_1.readyPartOf)({ product: options.product, part });
278
+ const mark = (0, part_ready_1.readyMarkOf)({ product: options.product, part });
279
+ if (typeof found === 'string' || mark === null)
280
+ return false;
281
+ const record = (0, exports.readImplemented)(found.dir)[part];
282
+ return (record === null || record === void 0 ? void 0 : record.hash) === mark.hash && (0, exports.changedAppFilesOf)({ product: options.product, part, record }).length === 0;
283
+ });
284
+ exports.doneParts = doneParts;
285
+ //# sourceMappingURL=part-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"part-task.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/part-task.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import { Browser } from '../thumb';
2
+ type Page = Awaited<ReturnType<Awaited<ReturnType<Browser['newContext']>>['newPage']>>;
3
+ type Locator = ReturnType<Page['locator']>;
4
+ /** The computed style of an element that draws a focus ring. */
5
+ export type RingStyle = {
6
+ outlineStyle: string;
7
+ outlineWidth: string;
8
+ outlineColor: string;
9
+ boxShadow: string;
10
+ };
11
+ /**
12
+ * What a probe reads from an element: its ring style, whether it holds focus, whether it takes text input, and whether
13
+ * it is a control (a native interactive element or one with an ARIA widget role).
14
+ */
15
+ export type RingProbe = {
16
+ style: RingStyle;
17
+ focused: boolean;
18
+ textEntry: boolean;
19
+ control: boolean;
20
+ };
21
+ /** Whether a computed outline draws a visible ring: a style other than none, a width above 0 and an opaque-enough colour. */
22
+ export declare const ringVisibleOf: (style: RingStyle) => boolean;
23
+ /** Whether focusing moved a ring onto the element: a visible outline, or a box-shadow that differs from the unfocused one. */
24
+ export declare const focusMarkedOf: (options: {
25
+ before: RingStyle;
26
+ after: RingStyle;
27
+ }) => boolean;
28
+ /**
29
+ * The verdict of a pointer-focus check. A pointer click must leave no ring (text entry is exempt: browsers always match
30
+ * `:focus-visible` there). A focus target that is no control - neither a `control` probe nor `activatable`, an element
31
+ * the design declares an action for - must also stay without ring after a following key press that moves no focus;
32
+ * on a control, browsers match `:focus-visible` after any key. Keyboard focus without a ring is a warning, not a
33
+ * failure: another indicator, such as a focus-within wrapper, may draw it.
34
+ */
35
+ export declare const pointerFocusVerdictOf: (options: {
36
+ click: RingProbe | null;
37
+ clickThenKey?: RingProbe | null;
38
+ keyboard: {
39
+ before: RingStyle;
40
+ probe: RingProbe;
41
+ } | null;
42
+ activatable?: boolean;
43
+ }) => {
44
+ failure: string | null;
45
+ warning: string | null;
46
+ };
47
+ /** The elements the pointer-focus check visits. */
48
+ export declare const POINTER_FOCUS_SELECTOR = "[tabindex]:not([tabindex=\"-1\"]), button, a[href], input:not([type=\"hidden\"]), select, textarea, [contenteditable]";
49
+ /** Reads the ring probe of the element a locator names; `null` when it is not one the check visits. */
50
+ export declare const readRingProbe: (locator: Locator) => Promise<RingProbe | null>;
51
+ /** Presses Tab so the last input is a key and the element itself does not hold focus. */
52
+ export declare const tabAwayFrom: (page: Page, locator: Locator) => Promise<void>;
53
+ /** Presses Shift, which moves no focus but makes the browser treat the last input as a key, and reads the probe again. */
54
+ export declare const readRingAfterKey: (options: {
55
+ page: Page;
56
+ locator: Locator;
57
+ settle: (page: Page) => Promise<void>;
58
+ }) => Promise<RingProbe | null>;
59
+ /** The ring probes of one element: after a pointer click, after a Shift press that follows it, and after keyboard focus. */
60
+ export type PointerFocusProbes = {
61
+ click: RingProbe | null;
62
+ clickThenKey?: RingProbe | null;
63
+ keyboard: {
64
+ before: RingStyle;
65
+ probe: RingProbe;
66
+ } | null;
67
+ };
68
+ /**
69
+ * Probes an element in two fresh pages: `open` returns the locator of the element on a freshly loaded page. The click
70
+ * is a real mouse click at its centre after Tab presses that leave focus elsewhere, because a script focus after a pointer press paints the ring only when the last input was a key; keyboard focus follows a Shift press so the browser treats it as keyboard
71
+ * focus.
72
+ */
73
+ export declare const probePointerFocus: (options: {
74
+ open: () => Promise<{
75
+ page: Page;
76
+ locator: Locator;
77
+ close: () => Promise<void>;
78
+ }>;
79
+ settle: (page: Page) => Promise<void>;
80
+ }) => Promise<PointerFocusProbes | null>;
81
+ export {};
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.probePointerFocus = exports.readRingAfterKey = exports.tabAwayFrom = exports.readRingProbe = exports.POINTER_FOCUS_SELECTOR = exports.pointerFocusVerdictOf = exports.focusMarkedOf = exports.ringVisibleOf = void 0;
13
+ const TRANSPARENT = /^transparent$|\/\s*0(\.0+)?\s*\)$|,\s*0(\.0+)?\s*\)$/;
14
+ /** Whether a computed outline draws a visible ring: a style other than none, a width above 0 and an opaque-enough colour. */
15
+ const ringVisibleOf = (style) => style.outlineStyle !== 'none' &&
16
+ style.outlineStyle !== 'hidden' &&
17
+ Number.parseFloat(style.outlineWidth) > 0 &&
18
+ !TRANSPARENT.test(style.outlineColor.trim());
19
+ exports.ringVisibleOf = ringVisibleOf;
20
+ /** Whether focusing moved a ring onto the element: a visible outline, or a box-shadow that differs from the unfocused one. */
21
+ const focusMarkedOf = (options) => (0, exports.ringVisibleOf)(options.after) ||
22
+ (options.after.boxShadow !== 'none' && options.after.boxShadow !== options.before.boxShadow);
23
+ exports.focusMarkedOf = focusMarkedOf;
24
+ const ringAfter = (probe) => !!probe && !probe.textEntry && probe.focused && (0, exports.ringVisibleOf)(probe.style);
25
+ const outlineOf = (style) => `outline ${style.outlineStyle} ${style.outlineWidth} ${style.outlineColor}`;
26
+ /**
27
+ * The verdict of a pointer-focus check. A pointer click must leave no ring (text entry is exempt: browsers always match
28
+ * `:focus-visible` there). A focus target that is no control - neither a `control` probe nor `activatable`, an element
29
+ * the design declares an action for - must also stay without ring after a following key press that moves no focus;
30
+ * on a control, browsers match `:focus-visible` after any key. Keyboard focus without a ring is a warning, not a
31
+ * failure: another indicator, such as a focus-within wrapper, may draw it.
32
+ */
33
+ const pointerFocusVerdictOf = (options) => {
34
+ const { click, clickThenKey, keyboard } = options;
35
+ const failure = ringAfter(click)
36
+ ? `shows a focus ring after a pointer click (${outlineOf(click.style)})`
37
+ : !options.activatable && !(clickThenKey === null || clickThenKey === void 0 ? void 0 : clickThenKey.control) && ringAfter(clickThenKey)
38
+ ? `shows a focus ring after a pointer click and a Shift press (${outlineOf(clickThenKey.style)})`
39
+ : null;
40
+ const warning = keyboard && (!keyboard.probe.focused || !(0, exports.focusMarkedOf)({ before: keyboard.before, after: keyboard.probe.style }))
41
+ ? keyboard.probe.focused
42
+ ? 'shows no focus ring on keyboard focus, so the click check proves nothing about it'
43
+ : 'could not take keyboard focus'
44
+ : null;
45
+ return { failure, warning };
46
+ };
47
+ exports.pointerFocusVerdictOf = pointerFocusVerdictOf;
48
+ /** The elements the pointer-focus check visits. */
49
+ exports.POINTER_FOCUS_SELECTOR = '[tabindex]:not([tabindex="-1"]), button, a[href], input:not([type="hidden"]), select, textarea, [contenteditable]';
50
+ const TEXT_FREE_INPUTS = ['button', 'submit', 'reset', 'checkbox', 'radio', 'range', 'color', 'file', 'image'];
51
+ const CONTROL_SELECTOR = [
52
+ 'button',
53
+ 'a[href]',
54
+ 'input',
55
+ 'select',
56
+ 'textarea',
57
+ 'summary',
58
+ ...[
59
+ 'button',
60
+ 'link',
61
+ 'checkbox',
62
+ 'radio',
63
+ 'switch',
64
+ 'tab',
65
+ 'option',
66
+ 'menuitem',
67
+ 'menuitemcheckbox',
68
+ 'menuitemradio',
69
+ 'treeitem',
70
+ 'gridcell',
71
+ 'combobox',
72
+ 'textbox',
73
+ 'searchbox',
74
+ 'slider',
75
+ 'spinbutton',
76
+ ].map((role) => `[role="${role}"]`),
77
+ ].join(', ');
78
+ /** Reads the ring probe of the element a locator names; `null` when it is not one the check visits. */
79
+ const readRingProbe = (locator) => __awaiter(void 0, void 0, void 0, function* () {
80
+ return locator.evaluate((element, { selector, textFree, control }) => {
81
+ if (!element.matches(selector))
82
+ return null;
83
+ const style = getComputedStyle(element);
84
+ const type = element instanceof HTMLInputElement ? element.type : '';
85
+ return {
86
+ style: {
87
+ outlineStyle: style.outlineStyle,
88
+ outlineWidth: style.outlineWidth,
89
+ outlineColor: style.outlineColor,
90
+ boxShadow: style.boxShadow,
91
+ },
92
+ focused: element.ownerDocument.activeElement === element,
93
+ textEntry: element instanceof HTMLTextAreaElement ||
94
+ (element instanceof HTMLElement && element.isContentEditable) ||
95
+ (element instanceof HTMLInputElement && !textFree.includes(type)),
96
+ control: element.matches(control),
97
+ };
98
+ }, { selector: exports.POINTER_FOCUS_SELECTOR, textFree: TEXT_FREE_INPUTS, control: CONTROL_SELECTOR });
99
+ });
100
+ exports.readRingProbe = readRingProbe;
101
+ /** Presses Tab so the last input is a key and the element itself does not hold focus. */
102
+ const tabAwayFrom = (page, locator) => __awaiter(void 0, void 0, void 0, function* () {
103
+ yield page.keyboard.press('Tab');
104
+ if (yield locator.evaluate((element) => element.ownerDocument.activeElement === element))
105
+ yield page.keyboard.press('Tab');
106
+ });
107
+ exports.tabAwayFrom = tabAwayFrom;
108
+ /** Presses Shift, which moves no focus but makes the browser treat the last input as a key, and reads the probe again. */
109
+ const readRingAfterKey = (options) => __awaiter(void 0, void 0, void 0, function* () {
110
+ yield options.page.keyboard.press('Shift');
111
+ yield options.settle(options.page);
112
+ return (0, exports.readRingProbe)(options.locator).catch(() => null);
113
+ });
114
+ exports.readRingAfterKey = readRingAfterKey;
115
+ /**
116
+ * Probes an element in two fresh pages: `open` returns the locator of the element on a freshly loaded page. The click
117
+ * is a real mouse click at its centre after Tab presses that leave focus elsewhere, because a script focus after a pointer press paints the ring only when the last input was a key; keyboard focus follows a Shift press so the browser treats it as keyboard
118
+ * focus.
119
+ */
120
+ const probePointerFocus = (options) => __awaiter(void 0, void 0, void 0, function* () {
121
+ var _a;
122
+ const clicked = yield options.open();
123
+ let click;
124
+ let clickThenKey = null;
125
+ try {
126
+ yield (0, exports.tabAwayFrom)(clicked.page, clicked.locator);
127
+ yield clicked.locator.click();
128
+ yield options.settle(clicked.page);
129
+ click = yield (0, exports.readRingProbe)(clicked.locator).catch(() => null);
130
+ if (click)
131
+ clickThenKey = yield (0, exports.readRingAfterKey)(Object.assign(Object.assign({}, clicked), { settle: options.settle }));
132
+ }
133
+ finally {
134
+ yield clicked.close();
135
+ }
136
+ if (click === null)
137
+ return null;
138
+ const focused = yield options.open();
139
+ try {
140
+ const before = (_a = (yield (0, exports.readRingProbe)(focused.locator))) === null || _a === void 0 ? void 0 : _a.style;
141
+ yield focused.page.keyboard.press('Shift');
142
+ yield focused.locator.focus();
143
+ yield options.settle(focused.page);
144
+ const probe = yield (0, exports.readRingProbe)(focused.locator);
145
+ return { click, clickThenKey, keyboard: before && probe ? { before, probe } : null };
146
+ }
147
+ finally {
148
+ yield focused.close();
149
+ }
150
+ });
151
+ exports.probePointerFocus = probePointerFocus;
152
+ //# sourceMappingURL=pointer-focus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pointer-focus.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/pointer-focus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /** The Prettier CLI of the target checkout, else the one this package resolves, else `null`. */
2
+ export declare const prettierBinOf: (target: string) => string | null;
3
+ /** `text` formatted with the target's Prettier config as if it were `file`; the text as is when Prettier is missing. */
4
+ export declare const formattedTextOf: (options: {
5
+ target: string;
6
+ file: string;
7
+ text: string;
8
+ }) => string | {
9
+ error: string;
10
+ };
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formattedTextOf = exports.prettierBinOf = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const module_1 = require("module");
6
+ const path_1 = require("path");
7
+ /** The Prettier CLI of the target checkout, else the one this package resolves, else `null`. */
8
+ const prettierBinOf = (target) => {
9
+ const from = [(0, path_1.join)(target, 'package.json'), __filename].find((file) => {
10
+ try {
11
+ return !!(0, module_1.createRequire)(file).resolve('prettier/package.json');
12
+ }
13
+ catch (_a) {
14
+ return false;
15
+ }
16
+ });
17
+ return from ? (0, path_1.resolve)((0, path_1.dirname)((0, module_1.createRequire)(from).resolve('prettier/package.json')), 'bin/prettier.cjs') : null;
18
+ };
19
+ exports.prettierBinOf = prettierBinOf;
20
+ /** `text` formatted with the target's Prettier config as if it were `file`; the text as is when Prettier is missing. */
21
+ const formattedTextOf = (options) => {
22
+ var _a;
23
+ const bin = (0, exports.prettierBinOf)(options.target);
24
+ if (!bin)
25
+ return options.text;
26
+ const formatted = (0, child_process_1.spawnSync)(process.execPath, [bin, '--stdin-filepath', options.file, '--log-level', 'warn'], {
27
+ cwd: options.target,
28
+ input: options.text,
29
+ encoding: 'utf8',
30
+ });
31
+ if (formatted.error || formatted.status !== 0)
32
+ return { error: (formatted.stderr || ((_a = formatted.error) === null || _a === void 0 ? void 0 : _a.message) || 'prettier failed').trim() };
33
+ return formatted.stdout;
34
+ };
35
+ exports.formattedTextOf = formattedTextOf;
36
+ //# sourceMappingURL=prettier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prettier.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/prettier.ts"],"names":[],"mappings":";;;AAAA,iDAA0C;AAC1C,mCAAuC;AACvC,+BAA8C;AAE9C,gGAAgG;AACzF,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,EAAE;IAC9C,MAAM,IAAI,GAAG,CAAC,IAAA,WAAI,EAAC,MAAM,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACpE,IAAI,CAAC;YACH,OAAO,CAAC,CAAC,IAAA,sBAAa,EAAC,IAAI,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;QAChE,CAAC;QAAC,WAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC,CAAC,CAAC,IAAA,cAAO,EAAC,IAAA,cAAO,EAAC,IAAA,sBAAa,EAAC,IAAI,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClH,CAAC,CAAC;AAVW,QAAA,aAAa,iBAUxB;AAEF,wHAAwH;AACjH,MAAM,eAAe,GAAG,CAAC,OAI/B,EAA8B,EAAE;;IAC/B,MAAM,GAAG,GAAG,IAAA,qBAAa,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE1C,IAAI,CAAC,GAAG;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC;IAE9B,MAAM,SAAS,GAAG,IAAA,yBAAS,EAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,kBAAkB,EAAE,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE;QAC5G,GAAG,EAAE,OAAO,CAAC,MAAM;QACnB,KAAK,EAAE,OAAO,CAAC,IAAI;QACnB,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IAEH,IAAI,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAC3C,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,MAAM,KAAI,MAAA,SAAS,CAAC,KAAK,0CAAE,OAAO,CAAA,IAAI,iBAAiB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IAE/F,OAAO,SAAS,CAAC,MAAM,CAAC;AAC1B,CAAC,CAAC;AAnBW,QAAA,eAAe,mBAmB1B"}
@@ -0,0 +1,12 @@
1
+ /** The rule a declared action or a projected region breaks when an opaque element of another subtree paints above it. */
2
+ export declare const COVERED_RULE = "COVERED";
3
+ /** The rule a declared action breaks when the state that draws it hides it, fades it out, shrinks it to nothing or buries it. */
4
+ export declare const UNREACHABLE_RULE = "UNREACHABLE";
5
+ /**
6
+ * The statements of the reach check inside the frame script of `render-check`. They use `root`, `report` and
7
+ * `pathOf` of that script. Each `data-et-action` element must be shown, sized and hit by a click at some point of its
8
+ * unclipped box; each point where an opaque element of another subtree paints above an action, or above a projected
9
+ * region nested in another projected region from inside that outer region, is a cover. An action inside such a nested
10
+ * region is preview content and is not judged. The click pass runs before `pointer-events` is forced on for the paint pass, and the force is removed.
11
+ */
12
+ export declare const REACH_STATEMENTS: string;