@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,134 @@
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.drawnStateNamesOf = exports.unchangedRowStatesOf = exports.forcesOnlyUnchangedControls = void 0;
13
+ const force_interactions_1 = require("../force-interactions");
14
+ const TAG = /<(\/?)([a-zA-Z][\w:.-]*)((?:[^>"']|"[^"]*"|'[^']*')*)>/g;
15
+ const ATTRIBUTE = /([^\s=/"'>]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s>]+)))?/g;
16
+ const VOID_ELEMENTS = new Set([
17
+ 'area',
18
+ 'base',
19
+ 'br',
20
+ 'col',
21
+ 'embed',
22
+ 'hr',
23
+ 'img',
24
+ 'input',
25
+ 'link',
26
+ 'meta',
27
+ 'param',
28
+ 'source',
29
+ 'track',
30
+ 'wbr',
31
+ ]);
32
+ const tagsOf = (markup) => [...markup.replace(/<!--[\s\S]*?-->/g, '').matchAll(TAG)].map(([, slash, name = '', rest = '']) => ({
33
+ name: name.toLowerCase(),
34
+ closing: slash === '/',
35
+ selfClosing: rest.trimEnd().endsWith('/') || VOID_ELEMENTS.has(name.toLowerCase()),
36
+ attributes: new Map([...rest.matchAll(ATTRIBUTE)].map(([, attribute = '', double, single, bare]) => {
37
+ var _a, _b;
38
+ return [
39
+ attribute.toLowerCase(),
40
+ (_b = (_a = double !== null && double !== void 0 ? double : single) !== null && _a !== void 0 ? _a : bare) !== null && _b !== void 0 ? _b : '',
41
+ ];
42
+ })),
43
+ }));
44
+ const customClassesOf = (tag) => { var _a; return ((_a = tag.attributes.get('class')) !== null && _a !== void 0 ? _a : '').split(/\s+/u).filter((name) => name !== '' && !name.startsWith('et-')); };
45
+ const isStyled = (tag) => { var _a; return customClassesOf(tag).length > 0 || ((_a = tag.attributes.get('style')) !== null && _a !== void 0 ? _a : '').trim() !== ''; };
46
+ const isSdkComponent = (tag) => tag.attributes.has('data-et-ng') &&
47
+ (tag.name.startsWith('et-') || [...tag.attributes.keys()].some((name) => name.startsWith('et-')));
48
+ /** The open tags inside the element opened at `start`, leaving out `svg` and embedded `data-et-part` subtrees. */
49
+ const contentOf = (tags, start) => {
50
+ const content = [];
51
+ let depth = 0;
52
+ let skippedAt = null;
53
+ for (const tag of tags.slice(start + 1)) {
54
+ if (tag.closing) {
55
+ if (depth === 0)
56
+ break;
57
+ depth--;
58
+ if (skippedAt === depth)
59
+ skippedAt = null;
60
+ continue;
61
+ }
62
+ if (skippedAt === null && (tag.name === 'svg' || tag.attributes.has('data-et-part')))
63
+ skippedAt = depth;
64
+ if (skippedAt === null)
65
+ content.push(tag);
66
+ if (!tag.selfClosing)
67
+ depth++;
68
+ else if (skippedAt === depth)
69
+ skippedAt = null;
70
+ }
71
+ return content;
72
+ };
73
+ /**
74
+ * Whether every element a body forces into an interaction is an SDK component the part renders through `ng()` and does
75
+ * not style: an `et-` element or attribute with no custom class or inline style, and no styled content outside icons and
76
+ * embedded parts. `body` is the markup a part draws outside a browser, where `ng()` marks each element `data-et-ng`.
77
+ * `false` when the body forces nothing.
78
+ */
79
+ const forcesOnlyUnchangedControls = (markup) => {
80
+ const tags = tagsOf(markup);
81
+ const forced = tags.flatMap((tag, index) => (!tag.closing && tag.attributes.has(force_interactions_1.FORCE_ATTRIBUTE) ? [index] : []));
82
+ return (forced.length > 0 &&
83
+ forced.every((index) => {
84
+ const tag = tags[index];
85
+ return isSdkComponent(tag) && !isStyled(tag) && !contentOf(tags, index).some(isStyled);
86
+ }));
87
+ };
88
+ exports.forcesOnlyUnchangedControls = forcesOnlyUnchangedControls;
89
+ const isRecord = (value) => typeof value === 'object' && value !== null;
90
+ const bodyOf = (render, props) => __awaiter(void 0, void 0, void 0, function* () {
91
+ const drawn = yield render(props);
92
+ return isRecord(drawn) && typeof drawn['body'] === 'string' ? drawn['body'] : null;
93
+ });
94
+ /**
95
+ * The interaction states of each grid row whose forced elements are only SDK components the part leaves unchanged, so
96
+ * the row draws nothing the part styles: the grid shows such a row at rest only, and no tool draws or judges its
97
+ * interaction states. Read from the unrendered markup of the row's first interaction state.
98
+ */
99
+ const unchangedRowStatesOf = (definition) => __awaiter(void 0, void 0, void 0, function* () {
100
+ const dropped = new Set();
101
+ if (!isRecord(definition) || typeof definition['render'] !== 'function')
102
+ return dropped;
103
+ const { states, grid } = definition;
104
+ const render = definition['render'];
105
+ if (!isRecord(states) || !isRecord(grid) || !Array.isArray(grid['columns']) || !isRecord(grid['rows']))
106
+ return dropped;
107
+ const interactions = grid['columns'].filter((column) => typeof column === 'string' && column !== 'rest');
108
+ for (const cells of Object.values(grid['rows'])) {
109
+ if (!isRecord(cells))
110
+ continue;
111
+ const forced = interactions
112
+ .map((column) => cells[column])
113
+ .filter((state) => typeof state === 'string' && state in states);
114
+ const first = forced[0];
115
+ if (first === undefined)
116
+ continue;
117
+ const body = yield bodyOf(render, states[first]).catch(() => null);
118
+ if (body !== null && (0, exports.forcesOnlyUnchangedControls)(body))
119
+ for (const state of forced)
120
+ dropped.add(state);
121
+ }
122
+ return dropped;
123
+ });
124
+ exports.unchangedRowStatesOf = unchangedRowStatesOf;
125
+ /** The names of the states of a part definition every tool draws: its `states` without the unchanged row states. */
126
+ const drawnStateNamesOf = (definition) => __awaiter(void 0, void 0, void 0, function* () {
127
+ const states = isRecord(definition) ? definition['states'] : undefined;
128
+ if (!isRecord(states) || Array.isArray(states))
129
+ return [];
130
+ const dropped = yield (0, exports.unchangedRowStatesOf)(definition);
131
+ return Object.keys(states).filter((state) => !dropped.has(state));
132
+ });
133
+ exports.drawnStateNamesOf = drawnStateNamesOf;
134
+ //# sourceMappingURL=unchanged-rows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unchanged-rows.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/unchanged-rows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { ResolvedProduct } from './resolve-product';
2
+ /** The decision files at the root of a product folder; none of them is an input of a drawing. */
3
+ export declare const ROOT_DECISION_FILES: string[];
4
+ /** The decision files of a product, relative to its folder, that differ from HEAD or are untracked; none outside git. */
5
+ export declare const uncommittedDecisionsOf: (product: ResolvedProduct) => string[];
6
+ export declare const uncommittedDecisionsWarningOf: (product: ResolvedProduct) => string | null;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.uncommittedDecisionsWarningOf = exports.uncommittedDecisionsOf = exports.ROOT_DECISION_FILES = void 0;
4
+ const child_process_1 = require("child_process");
5
+ /** The decision files at the root of a product folder; none of them is an input of a drawing. */
6
+ exports.ROOT_DECISION_FILES = ['go.json', 'accepted.json', 'merged.json', 'pictures.json'];
7
+ const DECISION_FILES = [...exports.ROOT_DECISION_FILES, ':(glob)sketches/*/sketch.json'];
8
+ const gitLines = (cwd, args) => (0, child_process_1.execFileSync)('git', [...args, '--', ...DECISION_FILES], {
9
+ cwd,
10
+ encoding: 'utf8',
11
+ stdio: ['ignore', 'pipe', 'ignore'],
12
+ })
13
+ .split('\n')
14
+ .filter(Boolean);
15
+ /** The decision files of a product, relative to its folder, that differ from HEAD or are untracked; none outside git. */
16
+ const uncommittedDecisionsOf = (product) => {
17
+ try {
18
+ return [
19
+ ...new Set([
20
+ ...gitLines(product.dir, ['diff', '--name-only', '--relative', 'HEAD']),
21
+ ...gitLines(product.dir, ['ls-files', '--others', '--exclude-standard']),
22
+ ]),
23
+ ].sort();
24
+ }
25
+ catch (_a) {
26
+ return [];
27
+ }
28
+ };
29
+ exports.uncommittedDecisionsOf = uncommittedDecisionsOf;
30
+ const uncommittedDecisionsWarningOf = (product) => {
31
+ const files = (0, exports.uncommittedDecisionsOf)(product);
32
+ return files.length === 0
33
+ ? null
34
+ : `WARNING UNCOMMITTED-DECISIONS ${product.name}: ${files.join(', ')} differ from HEAD - Studio or Tom commits ` +
35
+ 'them; an agent never commits go.json';
36
+ };
37
+ exports.uncommittedDecisionsWarningOf = uncommittedDecisionsWarningOf;
38
+ //# sourceMappingURL=uncommitted-decisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uncommitted-decisions.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/uncommitted-decisions.ts"],"names":[],"mappings":";;;AAAA,iDAA6C;AAG7C,iGAAiG;AACpF,QAAA,mBAAmB,GAAG,CAAC,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;AAEhG,MAAM,cAAc,GAAG,CAAC,GAAG,2BAAmB,EAAE,+BAA+B,CAAC,CAAC;AAEjF,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,IAAc,EAAE,EAAE,CAC/C,IAAA,4BAAY,EAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,EAAE;IACtD,GAAG;IACH,QAAQ,EAAE,MAAM;IAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;CACpC,CAAC;KACC,KAAK,CAAC,IAAI,CAAC;KACX,MAAM,CAAC,OAAO,CAAC,CAAC;AAErB,yHAAyH;AAClH,MAAM,sBAAsB,GAAG,CAAC,OAAwB,EAAY,EAAE;IAC3E,IAAI,CAAC;QACH,OAAO;YACL,GAAG,IAAI,GAAG,CAAC;gBACT,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;gBACvE,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC;aACzE,CAAC;SACH,CAAC,IAAI,EAAE,CAAC;IACX,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAXW,QAAA,sBAAsB,0BAWjC;AAEK,MAAM,6BAA6B,GAAG,CAAC,OAAwB,EAAiB,EAAE;IACvF,MAAM,KAAK,GAAG,IAAA,8BAAsB,EAAC,OAAO,CAAC,CAAC;IAE9C,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;QACvB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,iCAAiC,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,4CAA4C;YAC5G,sCAAsC,CAAC;AAC/C,CAAC,CAAC;AAPW,QAAA,6BAA6B,iCAOxC"}
@@ -0,0 +1,61 @@
1
+ import { Browser } from '../thumb';
2
+ import { ResolvedProduct } from './resolve-product';
3
+ type Page = Awaited<ReturnType<Awaited<ReturnType<Browser['newContext']>>['newPage']>>;
4
+ export type RegionBox = {
5
+ x: number;
6
+ y: number;
7
+ width: number;
8
+ height: number;
9
+ };
10
+ /** One visible element of the app page as the uncovered-region check reads it. */
11
+ export type RegionNode = {
12
+ tag: string;
13
+ className: string;
14
+ box: RegionBox;
15
+ covered: boolean;
16
+ paints: boolean;
17
+ children: RegionNode[];
18
+ };
19
+ export type UncoveredRegion = {
20
+ element: string;
21
+ component: string | null;
22
+ box: RegionBox;
23
+ };
24
+ /** An app region that is meant to have no part, with the reason the live spec gives. */
25
+ export type Partless = {
26
+ selector: string;
27
+ reason: string;
28
+ };
29
+ export declare const MIN_REGION_SIDE = 4;
30
+ /**
31
+ * The topmost visible regions of `tree` that no covered element holds: an element with no covered element inside that
32
+ * paints something and measures at least `minSide` on both sides. An element that holds a covered one is a layout
33
+ * wrapper, so the check looks at its children instead.
34
+ */
35
+ export declare const uncoveredRegionsOf: (tree: RegionNode, minSide?: number) => UncoveredRegion[];
36
+ /** What covers an app region: part component selectors, and the names of sketched parts no component implements yet. */
37
+ export type PartCover = {
38
+ selectors: string[];
39
+ names: string[];
40
+ };
41
+ /**
42
+ * What covers the app regions of `product`: the selector of each component a part implements, by route or by
43
+ * component, and for each target of an open sketch the selector its variants implement or, without one, its name,
44
+ * which matches an element named `<name>` or `<prefix>-<name>`.
45
+ */
46
+ export declare const partCoverOf: (options: {
47
+ target: string;
48
+ product: ResolvedProduct;
49
+ }) => PartCover;
50
+ /** The element, its component and its box, as a report names one uncovered region. */
51
+ export declare const regionTextOf: (region: UncoveredRegion) => string;
52
+ export declare const UNCOVERED_HINT = "no part covers this visible app region; add a part that implements its component, or list it under \"partless\" in the live spec with a reason if it stays undesigned";
53
+ /** The line that reports one uncovered region of the page at `address`. */
54
+ export declare const uncoveredLineOf: (region: UncoveredRegion, address: string) => string;
55
+ /** The visible regions of the open app page that no part, no open sketch's part and no `partless` selector covers. */
56
+ export declare const uncoveredRegionsOnPage: (options: {
57
+ page: Page;
58
+ parts: PartCover;
59
+ partless: Partless[];
60
+ }) => Promise<UncoveredRegion[]>;
61
+ export {};
@@ -0,0 +1,171 @@
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.uncoveredRegionsOnPage = exports.uncoveredLineOf = exports.UNCOVERED_HINT = exports.regionTextOf = exports.partCoverOf = exports.uncoveredRegionsOf = exports.MIN_REGION_SIDE = void 0;
13
+ const fs_1 = require("fs");
14
+ const path_1 = require("path");
15
+ const actions_1 = require("./actions");
16
+ const part_definition_1 = require("./sketch/part-definition");
17
+ const sketch_1 = require("./sketch/sketch");
18
+ exports.MIN_REGION_SIDE = 4;
19
+ const REGION_TREE_SCRIPT = `(({ covered, named }) => {
20
+ const SKIP = new Set(['script', 'style', 'template', 'link', 'meta', 'noscript']);
21
+ const PAINTED = new Set(['img', 'svg', 'canvas', 'video', 'iframe', 'input', 'textarea', 'select', 'picture']);
22
+ const matches = (element) => named.some((name) => element.localName === name || element.localName.endsWith('-' + name)) ||
23
+ covered.some((selector) => {
24
+ try {
25
+ return element.matches(selector);
26
+ } catch {
27
+ return false;
28
+ }
29
+ });
30
+ const visibleBoxOf = (element) => {
31
+ const box = element.getBoundingClientRect();
32
+ let left = Math.max(box.left, 0);
33
+ let top = Math.max(box.top, 0);
34
+ let right = Math.min(box.right, innerWidth);
35
+ let bottom = Math.min(box.bottom, innerHeight);
36
+
37
+ for (let current = element.parentElement; current; current = current.parentElement) {
38
+ const style = getComputedStyle(current);
39
+
40
+ if (style.overflowX === 'visible' && style.overflowY === 'visible') continue;
41
+
42
+ const clip = current.getBoundingClientRect();
43
+
44
+ left = Math.max(left, clip.left);
45
+ top = Math.max(top, clip.top);
46
+ right = Math.min(right, clip.right);
47
+ bottom = Math.min(bottom, clip.bottom);
48
+ }
49
+
50
+ return { x: left, y: top, width: Math.max(right - left, 0), height: Math.max(bottom - top, 0) };
51
+ };
52
+ const transparent = (color) => color === 'transparent' || /rgba\\([^)]*,\\s*0\\)$/.test(color);
53
+ const paints = (element) => {
54
+ if (PAINTED.has(element.localName)) return true;
55
+
56
+ const style = getComputedStyle(element);
57
+
58
+ if (!transparent(style.backgroundColor) || style.backgroundImage !== 'none' || style.boxShadow !== 'none')
59
+ return true;
60
+ if (['Top', 'Right', 'Bottom', 'Left'].some((side) =>
61
+ parseFloat(style['border' + side + 'Width']) > 0 && style['border' + side + 'Style'] !== 'none' &&
62
+ !transparent(style['border' + side + 'Color'])))
63
+ return true;
64
+
65
+ return [...element.childNodes].some((node) => node.nodeType === Node.TEXT_NODE && node.textContent.trim() !== '');
66
+ };
67
+ const nodeOf = (element) => {
68
+ if (SKIP.has(element.localName)) return null;
69
+ if (!element.checkVisibility({ opacityProperty: true, visibilityProperty: true })) return null;
70
+
71
+ const isCovered = matches(element);
72
+
73
+ return {
74
+ tag: element.localName,
75
+ className: (element.getAttribute('class') ?? '').trim(),
76
+ box: visibleBoxOf(element),
77
+ covered: isCovered,
78
+ paints: !isCovered && paints(element),
79
+ children: isCovered ? [] : [...element.children].map(nodeOf).filter((node) => node !== null),
80
+ };
81
+ };
82
+
83
+ return nodeOf(document.body);
84
+ })`;
85
+ const hasCovered = (node) => node.covered || node.children.some(hasCovered);
86
+ const paintsAny = (node) => node.paints || node.children.some(paintsAny);
87
+ const describe = (node) => `<${node.tag}${node.className ? ` class="${node.className}"` : ''}>`;
88
+ /**
89
+ * The topmost visible regions of `tree` that no covered element holds: an element with no covered element inside that
90
+ * paints something and measures at least `minSide` on both sides. An element that holds a covered one is a layout
91
+ * wrapper, so the check looks at its children instead.
92
+ */
93
+ const uncoveredRegionsOf = (tree, minSide = exports.MIN_REGION_SIDE) => {
94
+ const visit = (node, component) => {
95
+ if (node.covered)
96
+ return [];
97
+ const owner = node.tag.includes('-') ? node.tag : component;
98
+ const big = node.box.width >= minSide && node.box.height >= minSide;
99
+ if (!hasCovered(node) && big)
100
+ return paintsAny(node)
101
+ ? [
102
+ {
103
+ element: describe(node),
104
+ component: owner,
105
+ box: {
106
+ x: Math.round(node.box.x),
107
+ y: Math.round(node.box.y),
108
+ width: Math.round(node.box.width),
109
+ height: Math.round(node.box.height),
110
+ },
111
+ },
112
+ ]
113
+ : [];
114
+ return node.children.flatMap((child) => visit(child, owner));
115
+ };
116
+ return visit(tree, null);
117
+ };
118
+ exports.uncoveredRegionsOf = uncoveredRegionsOf;
119
+ const selectorOfLink = (target, source) => {
120
+ const link = (0, part_definition_1.partLinkOf)(source);
121
+ const path = link.kind === 'component' ? link.path : link.kind === 'route' ? link.component : null;
122
+ const file = path === null ? null : (0, path_1.resolve)(target, path);
123
+ return file && (0, fs_1.existsSync)(file) ? (0, actions_1.componentSelectorOf)((0, fs_1.readFileSync)(file, 'utf8')) : null;
124
+ };
125
+ /**
126
+ * What covers the app regions of `product`: the selector of each component a part implements, by route or by
127
+ * component, and for each target of an open sketch the selector its variants implement or, without one, its name,
128
+ * which matches an element named `<name>` or `<prefix>-<name>`.
129
+ */
130
+ const partCoverOf = (options) => {
131
+ const { target, product } = options;
132
+ const selectors = product.parts.flatMap((part) => { var _a; return (_a = selectorOfLink(target, part.source)) !== null && _a !== void 0 ? _a : []; });
133
+ const names = [];
134
+ for (const sketch of (0, sketch_1.listSketches)({ productDir: product.dir, product: product.name })) {
135
+ if (typeof sketch === 'string')
136
+ continue;
137
+ for (const key of sketch.targets) {
138
+ const parsed = (0, sketch_1.parseTarget)(key);
139
+ if (typeof parsed === 'string')
140
+ continue;
141
+ const linked = sketch.variants.flatMap((variant) => {
142
+ var _a;
143
+ const file = (0, path_1.resolve)((0, sketch_1.variantDirOf)(sketch, variant), parsed.layer, parsed.name, `${parsed.name}.ts`);
144
+ return (0, fs_1.existsSync)(file) ? ((_a = selectorOfLink(target, (0, fs_1.readFileSync)(file, 'utf8'))) !== null && _a !== void 0 ? _a : []) : [];
145
+ });
146
+ if (linked.length > 0)
147
+ selectors.push(...linked);
148
+ else
149
+ names.push(parsed.name);
150
+ }
151
+ }
152
+ return { selectors: [...new Set(selectors)], names: [...new Set(names)] };
153
+ };
154
+ exports.partCoverOf = partCoverOf;
155
+ /** The element, its component and its box, as a report names one uncovered region. */
156
+ const regionTextOf = (region) => `${region.element}${region.component && !region.element.startsWith(`<${region.component}`) ? ` in <${region.component}>` : ''} at ${region.box.x},${region.box.y} ${region.box.width}x${region.box.height}`;
157
+ exports.regionTextOf = regionTextOf;
158
+ exports.UNCOVERED_HINT = 'no part covers this visible app region; add a part that implements its component, or list it under "partless" in the live spec with a reason if it stays undesigned';
159
+ /** The line that reports one uncovered region of the page at `address`. */
160
+ const uncoveredLineOf = (region, address) => `UNCOVERED: ${(0, exports.regionTextOf)(region)} on ${address} - ${exports.UNCOVERED_HINT}`;
161
+ exports.uncoveredLineOf = uncoveredLineOf;
162
+ /** The visible regions of the open app page that no part, no open sketch's part and no `partless` selector covers. */
163
+ const uncoveredRegionsOnPage = (options) => __awaiter(void 0, void 0, void 0, function* () {
164
+ const tree = (yield options.page.evaluate(`${REGION_TREE_SCRIPT}(${JSON.stringify({
165
+ covered: [...options.parts.selectors, ...options.partless.map((entry) => entry.selector)],
166
+ named: options.parts.names,
167
+ })})`));
168
+ return tree ? (0, exports.uncoveredRegionsOf)(tree) : [];
169
+ });
170
+ exports.uncoveredRegionsOnPage = uncoveredRegionsOnPage;
171
+ //# sourceMappingURL=uncovered-regions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uncovered-regions.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/uncovered-regions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { ResolvedProduct } from './resolve-product';
2
+ /**
3
+ * The keys of the base parts that no own part or token part of the product imports, directly or
4
+ * through other parts, and whose same-named `@ethlete/<lib>/design` module none of them reaches either. A
5
+ * `controls[*].part` ref or an `ng(…, { imports: ['X_IMPORTS'] })` name in such a part counts as use too.
6
+ */
7
+ export declare const unusedBasePartsOf: (product: ResolvedProduct) => Set<string>;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.unusedBasePartsOf = void 0;
7
+ const typescript_1 = __importDefault(require("typescript"));
8
+ const reachable_files_1 = require("./reachable-files");
9
+ const resolve_product_1 = require("./resolve-product");
10
+ const ts_source_1 = require("./ts-source");
11
+ const drawsReachedModule = (options) => (0, ts_source_1.importsOf)(options.part.source).some((specifier) => {
12
+ const file = (0, reachable_files_1.sdkDesignFileOf)(options.root, specifier);
13
+ return file !== null && specifier.endsWith(`/${options.part.name}`) && options.reached.has(file);
14
+ });
15
+ const propertyNameOf = (node) => typescript_1.default.isPropertyAssignment(node) && (typescript_1.default.isIdentifier(node.name) || typescript_1.default.isStringLiteral(node.name))
16
+ ? node.name.text
17
+ : null;
18
+ const kebabOf = (name) => name.toLowerCase().replace(/_/gu, '-');
19
+ /** The part keys a source names in a `controls[*].part` and the `X_IMPORTS` names of its `ng(…, { imports })` calls. */
20
+ const namedUsesOf = (source) => {
21
+ const parts = new Set();
22
+ const imports = new Set();
23
+ const visit = (node, inControls) => {
24
+ if (typescript_1.default.isPropertyAssignment(node) && propertyNameOf(node) === 'controls')
25
+ inControls = true;
26
+ if (inControls && typescript_1.default.isPropertyAssignment(node) && propertyNameOf(node) === 'part') {
27
+ if (typescript_1.default.isStringLiteralLike(node.initializer))
28
+ parts.add(node.initializer.text);
29
+ }
30
+ if (typescript_1.default.isCallExpression(node) && typescript_1.default.isIdentifier(node.expression) && node.expression.text === 'ng') {
31
+ for (const argument of node.arguments) {
32
+ if (!typescript_1.default.isObjectLiteralExpression(argument))
33
+ continue;
34
+ for (const property of argument.properties) {
35
+ if (propertyNameOf(property) !== 'imports' || !typescript_1.default.isPropertyAssignment(property))
36
+ continue;
37
+ if (!typescript_1.default.isArrayLiteralExpression(property.initializer))
38
+ continue;
39
+ for (const element of property.initializer.elements) {
40
+ if (typescript_1.default.isStringLiteralLike(element) && element.text.endsWith('_IMPORTS')) {
41
+ imports.add(kebabOf(element.text.slice(0, -'_IMPORTS'.length)));
42
+ }
43
+ }
44
+ }
45
+ }
46
+ }
47
+ typescript_1.default.forEachChild(node, (child) => visit(child, inControls));
48
+ };
49
+ visit((0, ts_source_1.sourceFileOf)(source), false);
50
+ return { parts, imports };
51
+ };
52
+ /**
53
+ * The keys of the base parts that no own part or token part of the product imports, directly or
54
+ * through other parts, and whose same-named `@ethlete/<lib>/design` module none of them reaches either. A
55
+ * `controls[*].part` ref or an `ng(…, { imports: ['X_IMPORTS'] })` name in such a part counts as use too.
56
+ */
57
+ const unusedBasePartsOf = (product) => {
58
+ const base = product.parts.filter((part) => part.origin === 'base');
59
+ if (base.length === 0)
60
+ return new Set();
61
+ const tokens = new Set(product.tokens);
62
+ const roots = product.parts.filter((part) => part.origin !== 'base' || tokens.has((0, resolve_product_1.partKeyOf)(part)));
63
+ const { files, sdkDesign } = (0, reachable_files_1.reachableFilesOf)(product, roots);
64
+ const named = [...files].filter(([file]) => !file.endsWith('.css')).map(([, source]) => namedUsesOf(source));
65
+ const namedKeys = new Set(named.flatMap((uses) => [...uses.parts]));
66
+ const namedImports = new Set(named.flatMap((uses) => [...uses.imports]));
67
+ const root = (0, reachable_files_1.repoRootOf)(product);
68
+ return new Set(base
69
+ .filter((part) => !files.has(part.file) &&
70
+ !drawsReachedModule({ part, root, reached: sdkDesign }) &&
71
+ !namedKeys.has((0, resolve_product_1.partKeyOf)(part)) &&
72
+ !(part.layer === 'components' && namedImports.has(part.name)))
73
+ .map(resolve_product_1.partKeyOf));
74
+ };
75
+ exports.unusedBasePartsOf = unusedBasePartsOf;
76
+ //# sourceMappingURL=unused-base-parts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unused-base-parts.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/unused-base-parts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { DesignConfig } from '../paths';
2
+ import { ShootStates } from './compare-command';
3
+ import { StartHarnessServer } from './harness-server';
4
+ import { SketchEvidence, VisibleChangeVerdict } from './visible-change';
5
+ /**
6
+ * The commit the gate compares HEAD with: `base`, else the merge base of HEAD and `branch` (a product's
7
+ * `harness.baseBranch`), else of HEAD and the branch `origin/HEAD` names.
8
+ */
9
+ export declare const baseCommitOf: (options: {
10
+ root: string;
11
+ base: string | undefined;
12
+ branch?: string;
13
+ }) => string;
14
+ /** Each `sketch.json` of the product a commit in base..HEAD touched, as that commit left it or, if it deleted it, as before. */
15
+ export declare const sketchEvidenceOf: (options: {
16
+ root: string;
17
+ base: string;
18
+ productDir: string;
19
+ }) => SketchEvidence[];
20
+ /** The parts a sketch merge recorded in the product's `merged.json` in base..HEAD, also of a sketch never committed. */
21
+ export declare const mergedInRangeOf: (options: {
22
+ root: string;
23
+ base: string;
24
+ productDir: string;
25
+ }) => Set<string>;
26
+ /**
27
+ * `et design check --product <name>… --visible-change [--base <rev>] [--part <part>…]` draws each harness part's states in the app at
28
+ * the base commit and at HEAD, against HEAD's design, and fails a part that looks different unless a picked or merged
29
+ * sketch of it is in base..HEAD or every changed state moved closer to the design.
30
+ */
31
+ export declare const checkVisibleChange: (options: {
32
+ target: string;
33
+ config: DesignConfig;
34
+ products: string[];
35
+ base: string | undefined;
36
+ parts?: string[];
37
+ shoot?: ShootStates;
38
+ start?: StartHarnessServer;
39
+ onVerdict?: (options: {
40
+ product: string;
41
+ verdict: VisibleChangeVerdict;
42
+ line: string;
43
+ }) => void;
44
+ onProblem?: (options: {
45
+ product: string;
46
+ line: string;
47
+ }) => void;
48
+ }) => Promise<number>;