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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (592) hide show
  1. package/CHANGELOG.md +417 -0
  2. package/build-info.json +1 -0
  3. package/design/define-call.ts +99 -31
  4. package/design/define-part.ts +50 -3
  5. package/design/icon-sheet.ts +1 -1
  6. package/design/interaction-rows.ts +13 -6
  7. package/design/logo-sheet.ts +52 -0
  8. package/design/mark-part.ts +51 -1
  9. package/design/motion-drive.ts +215 -0
  10. package/design/motion-runtime.ts +14 -2
  11. package/design/motion-tokens.ts +177 -0
  12. package/design/token-sheet.ts +1 -1
  13. package/design/web/frame-fill.ts +4 -0
  14. package/design/web/frame-fit.ts +7 -0
  15. package/design/web/frame-scheme.ts +44 -0
  16. package/design/web/frame-surfaces.ts +294 -0
  17. package/design/web/frame.ts +162 -43
  18. package/design/web/surface-interactive.css +42 -0
  19. package/design/with-action.ts +29 -0
  20. package/package.json +3 -1
  21. package/src/index.js +9 -1
  22. package/src/index.js.map +1 -1
  23. package/src/lib/design/asset-shot.js +2 -2
  24. package/src/lib/design/asset-shot.js.map +1 -1
  25. package/src/lib/design/build-watch.d.ts +26 -0
  26. package/src/lib/design/build-watch.js +138 -0
  27. package/src/lib/design/build-watch.js.map +1 -0
  28. package/src/lib/design/calls-tsconfig.d.ts +2 -0
  29. package/src/lib/design/calls-tsconfig.js +10 -3
  30. package/src/lib/design/calls-tsconfig.js.map +1 -1
  31. package/src/lib/design/check.d.ts +1 -0
  32. package/src/lib/design/check.js +195 -13
  33. package/src/lib/design/check.js.map +1 -1
  34. package/src/lib/design/commit-hunks.d.ts +22 -0
  35. package/src/lib/design/commit-hunks.js +173 -0
  36. package/src/lib/design/commit-hunks.js.map +1 -0
  37. package/src/lib/design/contact-sheet.d.ts +9 -0
  38. package/src/lib/design/contact-sheet.js +38 -4
  39. package/src/lib/design/contact-sheet.js.map +1 -1
  40. package/src/lib/design/design-command.d.ts +2 -0
  41. package/src/lib/design/design-command.js +183 -15
  42. package/src/lib/design/design-command.js.map +1 -1
  43. package/src/lib/design/draw-ledger.d.ts +36 -0
  44. package/src/lib/design/draw-ledger.js +52 -0
  45. package/src/lib/design/draw-ledger.js.map +1 -0
  46. package/src/lib/design/force-interactions.d.ts +1 -1
  47. package/src/lib/design/force-interactions.js +4 -2
  48. package/src/lib/design/force-interactions.js.map +1 -1
  49. package/src/lib/design/inbox-command.js +9 -5
  50. package/src/lib/design/inbox-command.js.map +1 -1
  51. package/src/lib/design/mcp-command.d.ts +28 -3
  52. package/src/lib/design/mcp-command.js +134 -21
  53. package/src/lib/design/mcp-command.js.map +1 -1
  54. package/src/lib/design/merge-compare.d.ts +10 -2
  55. package/src/lib/design/merge-compare.js +63 -11
  56. package/src/lib/design/merge-compare.js.map +1 -1
  57. package/src/lib/design/motion-command.js +10 -16
  58. package/src/lib/design/motion-command.js.map +1 -1
  59. package/src/lib/design/motion-shot.js +3 -2
  60. package/src/lib/design/motion-shot.js.map +1 -1
  61. package/src/lib/design/new-call.js +19 -10
  62. package/src/lib/design/new-call.js.map +1 -1
  63. package/src/lib/design/part-marks.d.ts +3 -2
  64. package/src/lib/design/part-marks.js +13 -5
  65. package/src/lib/design/part-marks.js.map +1 -1
  66. package/src/lib/design/paths.d.ts +42 -0
  67. package/src/lib/design/paths.js +50 -1
  68. package/src/lib/design/paths.js.map +1 -1
  69. package/src/lib/design/product-command.d.ts +1 -1
  70. package/src/lib/design/product-command.js +12 -14
  71. package/src/lib/design/product-command.js.map +1 -1
  72. package/src/lib/design/ready-shots.d.ts +29 -3
  73. package/src/lib/design/ready-shots.js +105 -5
  74. package/src/lib/design/ready-shots.js.map +1 -1
  75. package/src/lib/design/render-packages.d.ts +9 -17
  76. package/src/lib/design/render-packages.js +25 -63
  77. package/src/lib/design/render-packages.js.map +1 -1
  78. package/src/lib/design/render-worker.js +2 -3
  79. package/src/lib/design/render-worker.js.map +1 -1
  80. package/src/lib/design/render.d.ts +2 -0
  81. package/src/lib/design/render.js +32 -7
  82. package/src/lib/design/render.js.map +1 -1
  83. package/src/lib/design/serve.d.ts +23 -3
  84. package/src/lib/design/serve.js +288 -35
  85. package/src/lib/design/serve.js.map +1 -1
  86. package/src/lib/design/server-identity.d.ts +36 -0
  87. package/src/lib/design/server-identity.js +68 -0
  88. package/src/lib/design/server-identity.js.map +1 -0
  89. package/src/lib/design/settle-frames.d.ts +4 -0
  90. package/src/lib/design/settle-frames.js +22 -0
  91. package/src/lib/design/settle-frames.js.map +1 -0
  92. package/src/lib/design/shot-command.d.ts +30 -6
  93. package/src/lib/design/shot-command.js +144 -56
  94. package/src/lib/design/shot-command.js.map +1 -1
  95. package/src/lib/design/shot-store.d.ts +24 -0
  96. package/src/lib/design/shot-store.js +120 -0
  97. package/src/lib/design/shot-store.js.map +1 -0
  98. package/src/lib/design/shot.d.ts +71 -1
  99. package/src/lib/design/shot.js +253 -40
  100. package/src/lib/design/shot.js.map +1 -1
  101. package/src/lib/design/sketch-command.d.ts +6 -1
  102. package/src/lib/design/sketch-command.js +452 -136
  103. package/src/lib/design/sketch-command.js.map +1 -1
  104. package/src/lib/design/ssr-shims.d.ts +2 -0
  105. package/src/lib/design/ssr-shims.js +12 -1
  106. package/src/lib/design/ssr-shims.js.map +1 -1
  107. package/src/lib/design/stale-cli-dist.d.ts +11 -0
  108. package/src/lib/design/stale-cli-dist.js +56 -0
  109. package/src/lib/design/stale-cli-dist.js.map +1 -0
  110. package/src/lib/design/stamp.d.ts +18 -1
  111. package/src/lib/design/stamp.js +53 -7
  112. package/src/lib/design/stamp.js.map +1 -1
  113. package/src/lib/design/started-by-studio.d.ts +1 -0
  114. package/src/lib/design/started-by-studio.js +6 -0
  115. package/src/lib/design/started-by-studio.js.map +1 -0
  116. package/src/lib/design/studio-api.d.ts +35 -4
  117. package/src/lib/design/studio-api.js +312 -41
  118. package/src/lib/design/studio-api.js.map +1 -1
  119. package/src/lib/design/system/accept-command.d.ts +39 -5
  120. package/src/lib/design/system/accept-command.js +109 -25
  121. package/src/lib/design/system/accept-command.js.map +1 -1
  122. package/src/lib/design/system/accepted-pictures.d.ts +83 -0
  123. package/src/lib/design/system/accepted-pictures.js +324 -0
  124. package/src/lib/design/system/accepted-pictures.js.map +1 -0
  125. package/src/lib/design/system/action-lost.d.ts +59 -0
  126. package/src/lib/design/system/action-lost.js +120 -0
  127. package/src/lib/design/system/action-lost.js.map +1 -0
  128. package/src/lib/design/system/action-press.d.ts +23 -0
  129. package/src/lib/design/system/action-press.js +76 -0
  130. package/src/lib/design/system/action-press.js.map +1 -0
  131. package/src/lib/design/system/action-undeclared.d.ts +34 -0
  132. package/src/lib/design/system/action-undeclared.js +81 -0
  133. package/src/lib/design/system/action-undeclared.js.map +1 -0
  134. package/src/lib/design/system/actions-command.d.ts +101 -0
  135. package/src/lib/design/system/actions-command.js +695 -0
  136. package/src/lib/design/system/actions-command.js.map +1 -0
  137. package/src/lib/design/system/actions.d.ts +158 -0
  138. package/src/lib/design/system/actions.js +295 -0
  139. package/src/lib/design/system/actions.js.map +1 -0
  140. package/src/lib/design/system/app-files.d.ts +10 -0
  141. package/src/lib/design/system/app-files.js +159 -0
  142. package/src/lib/design/system/app-files.js.map +1 -0
  143. package/src/lib/design/system/bespoke-controls.d.ts +30 -0
  144. package/src/lib/design/system/bespoke-controls.js +147 -0
  145. package/src/lib/design/system/bespoke-controls.js.map +1 -0
  146. package/src/lib/design/system/build-ready-contract.d.ts +27 -0
  147. package/src/lib/design/system/build-ready-contract.js +12 -0
  148. package/src/lib/design/system/build-ready-contract.js.map +1 -0
  149. package/src/lib/design/system/check-rules.d.ts +1 -0
  150. package/src/lib/design/system/check-rules.js +82 -0
  151. package/src/lib/design/system/check-rules.js.map +1 -0
  152. package/src/lib/design/system/check-system.d.ts +62 -3
  153. package/src/lib/design/system/check-system.js +527 -34
  154. package/src/lib/design/system/check-system.js.map +1 -1
  155. package/src/lib/design/system/colour.d.ts +4 -1
  156. package/src/lib/design/system/colour.js +54 -2
  157. package/src/lib/design/system/colour.js.map +1 -1
  158. package/src/lib/design/system/comments/comment.d.ts +4 -1
  159. package/src/lib/design/system/comments/comment.js +13 -4
  160. package/src/lib/design/system/comments/comment.js.map +1 -1
  161. package/src/lib/design/system/comments/inbox.js +2 -2
  162. package/src/lib/design/system/comments/inbox.js.map +1 -1
  163. package/src/lib/design/system/compare-command.d.ts +119 -0
  164. package/src/lib/design/system/compare-command.js +558 -0
  165. package/src/lib/design/system/compare-command.js.map +1 -0
  166. package/src/lib/design/system/complete-command.js +7 -3
  167. package/src/lib/design/system/complete-command.js.map +1 -1
  168. package/src/lib/design/system/complete.d.ts +99 -3
  169. package/src/lib/design/system/complete.js +358 -88
  170. package/src/lib/design/system/complete.js.map +1 -1
  171. package/src/lib/design/system/component-outputs.d.ts +20 -0
  172. package/src/lib/design/system/component-outputs.js +86 -0
  173. package/src/lib/design/system/component-outputs.js.map +1 -0
  174. package/src/lib/design/system/contrast-check.d.ts +6 -1
  175. package/src/lib/design/system/contrast-check.js +179 -13
  176. package/src/lib/design/system/contrast-check.js.map +1 -1
  177. package/src/lib/design/system/demo-backdrop.d.ts +11 -0
  178. package/src/lib/design/system/demo-backdrop.js +41 -0
  179. package/src/lib/design/system/demo-backdrop.js.map +1 -0
  180. package/src/lib/design/system/design-hash.d.ts +31 -0
  181. package/src/lib/design/system/design-hash.js +73 -0
  182. package/src/lib/design/system/design-hash.js.map +1 -0
  183. package/src/lib/design/system/disabled-interaction.d.ts +8 -0
  184. package/src/lib/design/system/disabled-interaction.js +37 -0
  185. package/src/lib/design/system/disabled-interaction.js.map +1 -0
  186. package/src/lib/design/system/dom-command.d.ts +36 -0
  187. package/src/lib/design/system/dom-command.js +175 -0
  188. package/src/lib/design/system/dom-command.js.map +1 -0
  189. package/src/lib/design/system/drawn-open-points.d.ts +38 -0
  190. package/src/lib/design/system/drawn-open-points.js +94 -0
  191. package/src/lib/design/system/drawn-open-points.js.map +1 -0
  192. package/src/lib/design/system/dropped-props.d.ts +25 -0
  193. package/src/lib/design/system/dropped-props.js +159 -0
  194. package/src/lib/design/system/dropped-props.js.map +1 -0
  195. package/src/lib/design/system/embedded-actions.d.ts +21 -0
  196. package/src/lib/design/system/embedded-actions.js +37 -0
  197. package/src/lib/design/system/embedded-actions.js.map +1 -0
  198. package/src/lib/design/system/exceptions.js +2 -1
  199. package/src/lib/design/system/exceptions.js.map +1 -1
  200. package/src/lib/design/system/flows/flow.js +2 -1
  201. package/src/lib/design/system/flows/flow.js.map +1 -1
  202. package/src/lib/design/system/frozen-animations.d.ts +13 -0
  203. package/src/lib/design/system/frozen-animations.js +51 -0
  204. package/src/lib/design/system/frozen-animations.js.map +1 -0
  205. package/src/lib/design/system/go-batch.d.ts +24 -0
  206. package/src/lib/design/system/go-batch.js +110 -0
  207. package/src/lib/design/system/go-batch.js.map +1 -0
  208. package/src/lib/design/system/go-command.d.ts +4 -0
  209. package/src/lib/design/system/go-command.js +64 -0
  210. package/src/lib/design/system/go-command.js.map +1 -0
  211. package/src/lib/design/system/go-guard.d.ts +26 -0
  212. package/src/lib/design/system/go-guard.js +70 -0
  213. package/src/lib/design/system/go-guard.js.map +1 -0
  214. package/src/lib/design/system/go-step.d.ts +13 -0
  215. package/src/lib/design/system/go-step.js +84 -0
  216. package/src/lib/design/system/go-step.js.map +1 -0
  217. package/src/lib/design/system/handoff.js +2 -1
  218. package/src/lib/design/system/handoff.js.map +1 -1
  219. package/src/lib/design/system/harness-build-cache.d.ts +35 -0
  220. package/src/lib/design/system/harness-build-cache.js +175 -0
  221. package/src/lib/design/system/harness-build-cache.js.map +1 -0
  222. package/src/lib/design/system/harness-command.d.ts +7 -0
  223. package/src/lib/design/system/harness-command.js +51 -0
  224. package/src/lib/design/system/harness-command.js.map +1 -0
  225. package/src/lib/design/system/harness-config.d.ts +9 -0
  226. package/src/lib/design/system/harness-config.js +65 -0
  227. package/src/lib/design/system/harness-config.js.map +1 -0
  228. package/src/lib/design/system/harness-map.d.ts +44 -0
  229. package/src/lib/design/system/harness-map.js +126 -0
  230. package/src/lib/design/system/harness-map.js.map +1 -0
  231. package/src/lib/design/system/harness-samples.d.ts +20 -0
  232. package/src/lib/design/system/harness-samples.js +92 -0
  233. package/src/lib/design/system/harness-samples.js.map +1 -0
  234. package/src/lib/design/system/harness-server.d.ts +40 -0
  235. package/src/lib/design/system/harness-server.js +296 -0
  236. package/src/lib/design/system/harness-server.js.map +1 -0
  237. package/src/lib/design/system/imports.js +14 -1
  238. package/src/lib/design/system/imports.js.map +1 -1
  239. package/src/lib/design/system/in-order-at-once.d.ts +6 -0
  240. package/src/lib/design/system/in-order-at-once.js +28 -0
  241. package/src/lib/design/system/in-order-at-once.js.map +1 -0
  242. package/src/lib/design/system/inventory-approval.js +2 -1
  243. package/src/lib/design/system/inventory-approval.js.map +1 -1
  244. package/src/lib/design/system/inventory.d.ts +13 -4
  245. package/src/lib/design/system/inventory.js +36 -7
  246. package/src/lib/design/system/inventory.js.map +1 -1
  247. package/src/lib/design/system/list-system.d.ts +8 -1
  248. package/src/lib/design/system/list-system.js +13 -3
  249. package/src/lib/design/system/list-system.js.map +1 -1
  250. package/src/lib/design/system/live-actions.d.ts +121 -0
  251. package/src/lib/design/system/live-actions.js +665 -0
  252. package/src/lib/design/system/live-actions.js.map +1 -0
  253. package/src/lib/design/system/live-compare.d.ts +136 -0
  254. package/src/lib/design/system/live-compare.js +441 -0
  255. package/src/lib/design/system/live-compare.js.map +1 -0
  256. package/src/lib/design/system/live-uncovered.d.ts +40 -0
  257. package/src/lib/design/system/live-uncovered.js +123 -0
  258. package/src/lib/design/system/live-uncovered.js.map +1 -0
  259. package/src/lib/design/system/nested-scroll.d.ts +7 -0
  260. package/src/lib/design/system/nested-scroll.js +25 -0
  261. package/src/lib/design/system/nested-scroll.js.map +1 -0
  262. package/src/lib/design/system/notes/note.js +2 -1
  263. package/src/lib/design/system/notes/note.js.map +1 -1
  264. package/src/lib/design/system/occluded.d.ts +13 -0
  265. package/src/lib/design/system/occluded.js +111 -0
  266. package/src/lib/design/system/occluded.js.map +1 -0
  267. package/src/lib/design/system/open-points.d.ts +119 -0
  268. package/src/lib/design/system/open-points.js +185 -0
  269. package/src/lib/design/system/open-points.js.map +1 -0
  270. package/src/lib/design/system/part-build-ready.d.ts +39 -0
  271. package/src/lib/design/system/part-build-ready.js +107 -0
  272. package/src/lib/design/system/part-build-ready.js.map +1 -0
  273. package/src/lib/design/system/part-command.js +2 -9
  274. package/src/lib/design/system/part-command.js.map +1 -1
  275. package/src/lib/design/system/part-compare.d.ts +123 -0
  276. package/src/lib/design/system/part-compare.js +396 -0
  277. package/src/lib/design/system/part-compare.js.map +1 -0
  278. package/src/lib/design/system/part-go.d.ts +70 -0
  279. package/src/lib/design/system/part-go.js +94 -0
  280. package/src/lib/design/system/part-go.js.map +1 -0
  281. package/src/lib/design/system/part-ready.d.ts +90 -0
  282. package/src/lib/design/system/part-ready.js +172 -0
  283. package/src/lib/design/system/part-ready.js.map +1 -0
  284. package/src/lib/design/system/part-task.d.ts +147 -0
  285. package/src/lib/design/system/part-task.js +285 -0
  286. package/src/lib/design/system/part-task.js.map +1 -0
  287. package/src/lib/design/system/pointer-focus.d.ts +81 -0
  288. package/src/lib/design/system/pointer-focus.js +152 -0
  289. package/src/lib/design/system/pointer-focus.js.map +1 -0
  290. package/src/lib/design/system/prettier.d.ts +10 -0
  291. package/src/lib/design/system/prettier.js +36 -0
  292. package/src/lib/design/system/prettier.js.map +1 -0
  293. package/src/lib/design/system/reach.d.ts +12 -0
  294. package/src/lib/design/system/reach.js +186 -0
  295. package/src/lib/design/system/reach.js.map +1 -0
  296. package/src/lib/design/system/reachable-controls.d.ts +6 -0
  297. package/src/lib/design/system/reachable-controls.js +19 -0
  298. package/src/lib/design/system/reachable-controls.js.map +1 -0
  299. package/src/lib/design/system/reachable-files.d.ts +14 -0
  300. package/src/lib/design/system/reachable-files.js +101 -0
  301. package/src/lib/design/system/reachable-files.js.map +1 -0
  302. package/src/lib/design/system/reached-state.d.ts +23 -0
  303. package/src/lib/design/system/reached-state.js +53 -0
  304. package/src/lib/design/system/reached-state.js.map +1 -0
  305. package/src/lib/design/system/read-open-points.d.ts +33 -0
  306. package/src/lib/design/system/read-open-points.js +110 -0
  307. package/src/lib/design/system/read-open-points.js.map +1 -0
  308. package/src/lib/design/system/ready-command.d.ts +11 -0
  309. package/src/lib/design/system/ready-command.js +82 -0
  310. package/src/lib/design/system/ready-command.js.map +1 -0
  311. package/src/lib/design/system/render-check.d.ts +52 -0
  312. package/src/lib/design/system/render-check.js +479 -60
  313. package/src/lib/design/system/render-check.js.map +1 -1
  314. package/src/lib/design/system/resolve-product.d.ts +2 -1
  315. package/src/lib/design/system/resolve-product.js +25 -3
  316. package/src/lib/design/system/resolve-product.js.map +1 -1
  317. package/src/lib/design/system/rules/app-spec.d.ts +30 -0
  318. package/src/lib/design/system/rules/app-spec.js +87 -0
  319. package/src/lib/design/system/rules/app-spec.js.map +1 -0
  320. package/src/lib/design/system/rules/canonical-class.d.ts +2 -0
  321. package/src/lib/design/system/rules/canonical-class.js +36 -110
  322. package/src/lib/design/system/rules/canonical-class.js.map +1 -1
  323. package/src/lib/design/system/rules/capability-place.d.ts +44 -0
  324. package/src/lib/design/system/rules/capability-place.js +116 -0
  325. package/src/lib/design/system/rules/capability-place.js.map +1 -0
  326. package/src/lib/design/system/rules/denied-class.d.ts +9 -0
  327. package/src/lib/design/system/rules/denied-class.js +121 -0
  328. package/src/lib/design/system/rules/denied-class.js.map +1 -0
  329. package/src/lib/design/system/rules/exemptions.d.ts +18 -0
  330. package/src/lib/design/system/rules/exemptions.js +18 -0
  331. package/src/lib/design/system/rules/exemptions.js.map +1 -0
  332. package/src/lib/design/system/rules/flow.js +1 -1
  333. package/src/lib/design/system/rules/flow.js.map +1 -1
  334. package/src/lib/design/system/rules/glued-interpolation.d.ts +8 -0
  335. package/src/lib/design/system/rules/glued-interpolation.js +61 -0
  336. package/src/lib/design/system/rules/glued-interpolation.js.map +1 -0
  337. package/src/lib/design/system/rules/hard-coded-colour.js +2 -1
  338. package/src/lib/design/system/rules/hard-coded-colour.js.map +1 -1
  339. package/src/lib/design/system/rules/implemented-components.d.ts +22 -0
  340. package/src/lib/design/system/rules/implemented-components.js +45 -0
  341. package/src/lib/design/system/rules/implemented-components.js.map +1 -0
  342. package/src/lib/design/system/rules/implements.d.ts +8 -0
  343. package/src/lib/design/system/rules/implements.js +48 -0
  344. package/src/lib/design/system/rules/implements.js.map +1 -0
  345. package/src/lib/design/system/rules/inline-svg.js +4 -1
  346. package/src/lib/design/system/rules/inline-svg.js.map +1 -1
  347. package/src/lib/design/system/rules/inline-ui-in-page-open.d.ts +13 -0
  348. package/src/lib/design/system/rules/inline-ui-in-page-open.js +5 -0
  349. package/src/lib/design/system/rules/inline-ui-in-page-open.js.map +1 -0
  350. package/src/lib/design/system/rules/inline-ui-in-page.d.ts +18 -0
  351. package/src/lib/design/system/rules/inline-ui-in-page.js +123 -0
  352. package/src/lib/design/system/rules/inline-ui-in-page.js.map +1 -0
  353. package/src/lib/design/system/rules/inline-ui.d.ts +16 -0
  354. package/src/lib/design/system/rules/inline-ui.js +100 -0
  355. package/src/lib/design/system/rules/inline-ui.js.map +1 -0
  356. package/src/lib/design/system/rules/motion.d.ts +2 -0
  357. package/src/lib/design/system/rules/motion.js +35 -2
  358. package/src/lib/design/system/rules/motion.js.map +1 -1
  359. package/src/lib/design/system/rules/native-title.d.ts +7 -0
  360. package/src/lib/design/system/rules/native-title.js +64 -0
  361. package/src/lib/design/system/rules/native-title.js.map +1 -0
  362. package/src/lib/design/system/rules/option-values.d.ts +15 -0
  363. package/src/lib/design/system/rules/option-values.js +145 -0
  364. package/src/lib/design/system/rules/option-values.js.map +1 -0
  365. package/src/lib/design/system/rules/orphan-endpoint-known.d.ts +12 -0
  366. package/src/lib/design/system/rules/orphan-endpoint-known.js +20 -0
  367. package/src/lib/design/system/rules/orphan-endpoint-known.js.map +1 -0
  368. package/src/lib/design/system/rules/orphan-endpoint.d.ts +23 -0
  369. package/src/lib/design/system/rules/orphan-endpoint.js +166 -0
  370. package/src/lib/design/system/rules/orphan-endpoint.js.map +1 -0
  371. package/src/lib/design/system/rules/part-rewrite.d.ts +13 -0
  372. package/src/lib/design/system/rules/part-rewrite.js +125 -0
  373. package/src/lib/design/system/rules/part-rewrite.js.map +1 -0
  374. package/src/lib/design/system/rules/sample-default-known.d.ts +5 -0
  375. package/src/lib/design/system/rules/sample-default-known.js +17 -0
  376. package/src/lib/design/system/rules/sample-default-known.js.map +1 -0
  377. package/src/lib/design/system/rules/sample-default.d.ts +22 -0
  378. package/src/lib/design/system/rules/sample-default.js +92 -0
  379. package/src/lib/design/system/rules/sample-default.js.map +1 -0
  380. package/src/lib/design/system/rules/stale-replace.js +45 -3
  381. package/src/lib/design/system/rules/stale-replace.js.map +1 -1
  382. package/src/lib/design/system/rules/state-in-component.d.ts +16 -0
  383. package/src/lib/design/system/rules/state-in-component.js +101 -0
  384. package/src/lib/design/system/rules/state-in-component.js.map +1 -0
  385. package/src/lib/design/system/rules/tailwind-classes.d.ts +51 -0
  386. package/src/lib/design/system/rules/tailwind-classes.js +232 -0
  387. package/src/lib/design/system/rules/tailwind-classes.js.map +1 -0
  388. package/src/lib/design/system/rules/top-level-await.d.ts +9 -0
  389. package/src/lib/design/system/rules/top-level-await.js +62 -0
  390. package/src/lib/design/system/rules/top-level-await.js.map +1 -0
  391. package/src/lib/design/system/rules/unbound-input-known.d.ts +5 -0
  392. package/src/lib/design/system/rules/unbound-input-known.js +47 -0
  393. package/src/lib/design/system/rules/unbound-input-known.js.map +1 -0
  394. package/src/lib/design/system/rules/unbound-input.d.ts +22 -0
  395. package/src/lib/design/system/rules/unbound-input.js +61 -0
  396. package/src/lib/design/system/rules/unbound-input.js.map +1 -0
  397. package/src/lib/design/system/rules/uncovered-region.d.ts +13 -0
  398. package/src/lib/design/system/rules/uncovered-region.js +36 -0
  399. package/src/lib/design/system/rules/uncovered-region.js.map +1 -0
  400. package/src/lib/design/system/rules/undefined-class.d.ts +9 -0
  401. package/src/lib/design/system/rules/undefined-class.js +32 -0
  402. package/src/lib/design/system/rules/undefined-class.js.map +1 -0
  403. package/src/lib/design/system/rules/undefined-token.d.ts +1 -1
  404. package/src/lib/design/system/rules/undefined-token.js +7 -61
  405. package/src/lib/design/system/rules/undefined-token.js.map +1 -1
  406. package/src/lib/design/system/rules/utility-css.d.ts +2 -1
  407. package/src/lib/design/system/rules/utility-css.js +29 -14
  408. package/src/lib/design/system/rules/utility-css.js.map +1 -1
  409. package/src/lib/design/system/rules/view-coverage.d.ts +8 -0
  410. package/src/lib/design/system/rules/view-coverage.js +51 -0
  411. package/src/lib/design/system/rules/view-coverage.js.map +1 -0
  412. package/src/lib/design/system/rules/visible-change.d.ts +20 -0
  413. package/src/lib/design/system/rules/visible-change.js +48 -0
  414. package/src/lib/design/system/rules/visible-change.js.map +1 -0
  415. package/src/lib/design/system/sdk-errors.d.ts +14 -0
  416. package/src/lib/design/system/sdk-errors.js +38 -0
  417. package/src/lib/design/system/sdk-errors.js.map +1 -0
  418. package/src/lib/design/system/see-through.d.ts +12 -0
  419. package/src/lib/design/system/see-through.js +112 -0
  420. package/src/lib/design/system/see-through.js.map +1 -0
  421. package/src/lib/design/system/settled-panes.d.ts +18 -0
  422. package/src/lib/design/system/settled-panes.js +70 -0
  423. package/src/lib/design/system/settled-panes.js.map +1 -0
  424. package/src/lib/design/system/sketch/after-merge.d.ts +11 -0
  425. package/src/lib/design/system/sketch/after-merge.js +51 -0
  426. package/src/lib/design/system/sketch/after-merge.js.map +1 -0
  427. package/src/lib/design/system/sketch/aktuell-placeholders.d.ts +30 -0
  428. package/src/lib/design/system/sketch/aktuell-placeholders.js +87 -0
  429. package/src/lib/design/system/sketch/aktuell-placeholders.js.map +1 -0
  430. package/src/lib/design/system/sketch/baseline.d.ts +29 -2
  431. package/src/lib/design/system/sketch/baseline.js +33 -9
  432. package/src/lib/design/system/sketch/baseline.js.map +1 -1
  433. package/src/lib/design/system/sketch/check-sketches.d.ts +11 -0
  434. package/src/lib/design/system/sketch/check-sketches.js +54 -6
  435. package/src/lib/design/system/sketch/check-sketches.js.map +1 -1
  436. package/src/lib/design/system/sketch/cli-args.d.ts +12 -2
  437. package/src/lib/design/system/sketch/cli-args.js +18 -3
  438. package/src/lib/design/system/sketch/cli-args.js.map +1 -1
  439. package/src/lib/design/system/sketch/edit-sketch.d.ts +21 -0
  440. package/src/lib/design/system/sketch/edit-sketch.js +117 -0
  441. package/src/lib/design/system/sketch/edit-sketch.js.map +1 -0
  442. package/src/lib/design/system/sketch/frame-budget.d.ts +24 -0
  443. package/src/lib/design/system/sketch/frame-budget.js +23 -0
  444. package/src/lib/design/system/sketch/frame-budget.js.map +1 -0
  445. package/src/lib/design/system/sketch/identical-renders.d.ts +31 -0
  446. package/src/lib/design/system/sketch/identical-renders.js +137 -0
  447. package/src/lib/design/system/sketch/identical-renders.js.map +1 -0
  448. package/src/lib/design/system/sketch/merge-shared.d.ts +2 -0
  449. package/src/lib/design/system/sketch/merge-shared.js +7 -10
  450. package/src/lib/design/system/sketch/merge-shared.js.map +1 -1
  451. package/src/lib/design/system/sketch/merge-step.d.ts +35 -0
  452. package/src/lib/design/system/sketch/merge-step.js +98 -0
  453. package/src/lib/design/system/sketch/merge-step.js.map +1 -0
  454. package/src/lib/design/system/sketch/merge.d.ts +10 -3
  455. package/src/lib/design/system/sketch/merge.js +122 -17
  456. package/src/lib/design/system/sketch/merge.js.map +1 -1
  457. package/src/lib/design/system/sketch/merged-layout.d.ts +17 -0
  458. package/src/lib/design/system/sketch/merged-layout.js +57 -0
  459. package/src/lib/design/system/sketch/merged-layout.js.map +1 -0
  460. package/src/lib/design/system/sketch/merged-parts.d.ts +41 -11
  461. package/src/lib/design/system/sketch/merged-parts.js +113 -50
  462. package/src/lib/design/system/sketch/merged-parts.js.map +1 -1
  463. package/src/lib/design/system/sketch/no-visible-change.d.ts +10 -0
  464. package/src/lib/design/system/sketch/no-visible-change.js +16 -6
  465. package/src/lib/design/system/sketch/no-visible-change.js.map +1 -1
  466. package/src/lib/design/system/sketch/part-definition.d.ts +56 -0
  467. package/src/lib/design/system/sketch/part-definition.js +129 -13
  468. package/src/lib/design/system/sketch/part-definition.js.map +1 -1
  469. package/src/lib/design/system/sketch/rebase-port.d.ts +24 -0
  470. package/src/lib/design/system/sketch/rebase-port.js +170 -0
  471. package/src/lib/design/system/sketch/rebase-port.js.map +1 -0
  472. package/src/lib/design/system/sketch/sample-mark-drift.d.ts +33 -0
  473. package/src/lib/design/system/sketch/sample-mark-drift.js +88 -0
  474. package/src/lib/design/system/sketch/sample-mark-drift.js.map +1 -0
  475. package/src/lib/design/system/sketch/sketch-check-worker.d.ts +1 -0
  476. package/src/lib/design/system/sketch/sketch-check-worker.js +27 -0
  477. package/src/lib/design/system/sketch/sketch-check-worker.js.map +1 -0
  478. package/src/lib/design/system/sketch/sketch-checker.d.ts +27 -0
  479. package/src/lib/design/system/sketch/sketch-checker.js +99 -0
  480. package/src/lib/design/system/sketch/sketch-checker.js.map +1 -0
  481. package/src/lib/design/system/sketch/sketch.d.ts +78 -2
  482. package/src/lib/design/system/sketch/sketch.js +247 -54
  483. package/src/lib/design/system/sketch/sketch.js.map +1 -1
  484. package/src/lib/design/system/sketch/stale-base.d.ts +22 -0
  485. package/src/lib/design/system/sketch/stale-base.js +56 -0
  486. package/src/lib/design/system/sketch/stale-base.js.map +1 -0
  487. package/src/lib/design/system/sketch/unchanged-states.d.ts +36 -1
  488. package/src/lib/design/system/sketch/unchanged-states.js +60 -17
  489. package/src/lib/design/system/sketch/unchanged-states.js.map +1 -1
  490. package/src/lib/design/system/sketch/unused-closure.js +26 -4
  491. package/src/lib/design/system/sketch/unused-closure.js.map +1 -1
  492. package/src/lib/design/system/sketch/unused-files.d.ts +1 -1
  493. package/src/lib/design/system/sketch/unused-files.js +6 -3
  494. package/src/lib/design/system/sketch/unused-files.js.map +1 -1
  495. package/src/lib/design/system/sketch/viewed-shots.d.ts +24 -0
  496. package/src/lib/design/system/sketch/viewed-shots.js +61 -0
  497. package/src/lib/design/system/sketch/viewed-shots.js.map +1 -0
  498. package/src/lib/design/system/slow-checks.d.ts +40 -0
  499. package/src/lib/design/system/slow-checks.js +197 -0
  500. package/src/lib/design/system/slow-checks.js.map +1 -0
  501. package/src/lib/design/system/slow-run.d.ts +57 -0
  502. package/src/lib/design/system/slow-run.js +253 -0
  503. package/src/lib/design/system/slow-run.js.map +1 -0
  504. package/src/lib/design/system/stale-design-mocks.d.ts +20 -0
  505. package/src/lib/design/system/stale-design-mocks.js +59 -0
  506. package/src/lib/design/system/stale-design-mocks.js.map +1 -0
  507. package/src/lib/design/system/stale-dist.d.ts +25 -0
  508. package/src/lib/design/system/stale-dist.js +91 -0
  509. package/src/lib/design/system/stale-dist.js.map +1 -0
  510. package/src/lib/design/system/stale-parts.d.ts +30 -0
  511. package/src/lib/design/system/stale-parts.js +106 -0
  512. package/src/lib/design/system/stale-parts.js.map +1 -0
  513. package/src/lib/design/system/surface-nesting.d.ts +11 -0
  514. package/src/lib/design/system/surface-nesting.js +86 -0
  515. package/src/lib/design/system/surface-nesting.js.map +1 -0
  516. package/src/lib/design/system/system-command.js +8 -6
  517. package/src/lib/design/system/system-command.js.map +1 -1
  518. package/src/lib/design/system/system-modules.d.ts +16 -1
  519. package/src/lib/design/system/system-modules.js +18 -2
  520. package/src/lib/design/system/system-modules.js.map +1 -1
  521. package/src/lib/design/system/system-tsconfig.js +2 -2
  522. package/src/lib/design/system/system-tsconfig.js.map +1 -1
  523. package/src/lib/design/system/task-command.d.ts +51 -0
  524. package/src/lib/design/system/task-command.js +233 -0
  525. package/src/lib/design/system/task-command.js.map +1 -0
  526. package/src/lib/design/system/theming-text.d.ts +2 -0
  527. package/src/lib/design/system/theming-text.js +6 -0
  528. package/src/lib/design/system/theming-text.js.map +1 -0
  529. package/src/lib/design/system/tom-confirm.d.ts +40 -0
  530. package/src/lib/design/system/tom-confirm.js +55 -0
  531. package/src/lib/design/system/tom-confirm.js.map +1 -0
  532. package/src/lib/design/system/touched-parts.d.ts +16 -0
  533. package/src/lib/design/system/touched-parts.js +122 -0
  534. package/src/lib/design/system/touched-parts.js.map +1 -0
  535. package/src/lib/design/system/ts-source.d.ts +5 -0
  536. package/src/lib/design/system/ts-source.js +35 -4
  537. package/src/lib/design/system/ts-source.js.map +1 -1
  538. package/src/lib/design/system/unchanged-rows.d.ts +15 -0
  539. package/src/lib/design/system/unchanged-rows.js +134 -0
  540. package/src/lib/design/system/unchanged-rows.js.map +1 -0
  541. package/src/lib/design/system/uncommitted-decisions.d.ts +6 -0
  542. package/src/lib/design/system/uncommitted-decisions.js +38 -0
  543. package/src/lib/design/system/uncommitted-decisions.js.map +1 -0
  544. package/src/lib/design/system/uncovered-regions.d.ts +61 -0
  545. package/src/lib/design/system/uncovered-regions.js +171 -0
  546. package/src/lib/design/system/uncovered-regions.js.map +1 -0
  547. package/src/lib/design/system/unused-base-parts.d.ts +7 -0
  548. package/src/lib/design/system/unused-base-parts.js +76 -0
  549. package/src/lib/design/system/unused-base-parts.js.map +1 -0
  550. package/src/lib/design/system/visible-change-command.d.ts +48 -0
  551. package/src/lib/design/system/visible-change-command.js +308 -0
  552. package/src/lib/design/system/visible-change-command.js.map +1 -0
  553. package/src/lib/design/system/visible-change-parts.d.ts +28 -0
  554. package/src/lib/design/system/visible-change-parts.js +96 -0
  555. package/src/lib/design/system/visible-change-parts.js.map +1 -0
  556. package/src/lib/design/system/visible-change.d.ts +82 -0
  557. package/src/lib/design/system/visible-change.js +149 -0
  558. package/src/lib/design/system/visible-change.js.map +1 -0
  559. package/src/lib/design/thumb.d.ts +50 -6
  560. package/src/lib/design/thumb.js +154 -54
  561. package/src/lib/design/thumb.js.map +1 -1
  562. package/src/lib/design/typecheck.d.ts +1 -1
  563. package/src/lib/design/typecheck.js +3 -3
  564. package/src/lib/design/typecheck.js.map +1 -1
  565. package/src/lib/design/unstable-cells.d.ts +23 -0
  566. package/src/lib/design/unstable-cells.js +40 -0
  567. package/src/lib/design/unstable-cells.js.map +1 -0
  568. package/src/lib/design/variant-diff.js +1 -1
  569. package/src/lib/design/variant-diff.js.map +1 -1
  570. package/src/lib/design/wait.d.ts +15 -0
  571. package/src/lib/design/wait.js +30 -0
  572. package/src/lib/design/wait.js.map +1 -0
  573. package/src/lib/json-file.d.ts +11 -0
  574. package/src/lib/json-file.js +21 -0
  575. package/src/lib/json-file.js.map +1 -0
  576. package/src/lib/source-hash.d.ts +7 -0
  577. package/src/lib/source-hash.js +62 -0
  578. package/src/lib/source-hash.js.map +1 -0
  579. package/src/lib/update/agent-setup.js +2 -1
  580. package/src/lib/update/agent-setup.js.map +1 -1
  581. package/src/lib/update/migration-manifest.d.ts +12 -0
  582. package/src/lib/update/migration-manifest.js +13 -0
  583. package/src/lib/update/migration-manifest.js.map +1 -1
  584. package/src/lib/update/migration-record.js +2 -1
  585. package/src/lib/update/migration-record.js.map +1 -1
  586. package/src/lib/update/pending.js +2 -1
  587. package/src/lib/update/pending.js.map +1 -1
  588. package/src/lib/update/run-migrations.d.ts +3 -2
  589. package/src/lib/update/run-migrations.js +38 -5
  590. package/src/lib/update/run-migrations.js.map +1 -1
  591. package/src/lib/update/tasks.js +2 -1
  592. package/src/lib/update/tasks.js.map +1 -1
@@ -20,56 +20,76 @@ var __rest = (this && this.__rest) || function (s, e) {
20
20
  return t;
21
21
  };
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
- exports.designSketch = exports.verdictLinesOf = exports.sketchFlagHelpOf = exports.SKETCH_USAGE = void 0;
23
+ exports.designSketch = exports.verdictLinesOf = exports.beforeLinesOf = exports.sketchFlagHelpOf = exports.SKETCH_USAGE = void 0;
24
24
  const unused_closure_1 = require("./system/sketch/unused-closure");
25
+ const fs_1 = require("fs");
25
26
  const path_1 = require("path");
26
27
  const assets_1 = require("./system/assets");
27
28
  const comment_1 = require("./system/comments/comment");
28
29
  const product_1 = require("./system/product");
29
30
  const resolve_product_1 = require("./system/resolve-product");
30
31
  const check_format_1 = require("./system/sketch/check-format");
32
+ const frame_budget_1 = require("./system/sketch/frame-budget");
31
33
  const check_sketches_1 = require("./system/sketch/check-sketches");
32
34
  const cli_args_1 = require("./system/sketch/cli-args");
33
35
  const ready_shots_1 = require("./ready-shots");
36
+ const no_visible_change_1 = require("./system/sketch/no-visible-change");
37
+ const viewed_shots_1 = require("./system/sketch/viewed-shots");
34
38
  const merge_1 = require("./system/sketch/merge");
39
+ const merge_step_1 = require("./system/sketch/merge-step");
40
+ const check_system_1 = require("./system/check-system");
41
+ const invocation_1 = require("../invocation");
35
42
  const merged_parts_1 = require("./system/sketch/merged-parts");
36
43
  const render_check_1 = require("./system/render-check");
37
44
  const merge_preview_1 = require("./system/sketch/merge-preview");
45
+ const open_points_1 = require("./system/open-points");
46
+ const read_open_points_1 = require("./system/read-open-points");
47
+ const overlay_1 = require("./system/sketch/overlay");
48
+ const rebase_port_1 = require("./system/sketch/rebase-port");
49
+ const theming_text_1 = require("./system/theming-text");
38
50
  const sketch_1 = require("./system/sketch/sketch");
39
51
  exports.SKETCH_USAGE = [
40
- 'sketch new <layer>/<name> [<layer>/<name>…] --variants a,b --by <model id> [--like <layer>/<name>[:<variant>]] [--round <title>] [--note <text>] [--variant-note <variant>=<text>]… [--override | --into-base] [--product <name>]',
52
+ 'sketch new <layer>/<name> [<layer>/<name>…] --variants a,b --by <model id> [--like <layer>/<name>[:<variant>]] [--name <sketch name>] [--round <title>] [--note <text>] [--variant-note <variant>=<text>]… [--override | --into-base] [--product <name>]',
41
53
  'sketch variant <layer>/<name> <variant>[,<variant>…] --from <variant> --by <model id> [--round <title> --note <why the running round lost> [--round-note <what the new round shows>]] [--product <name>]',
42
54
  'sketch round <layer>/<name> <round> [--title <text>] [--note <text>] [--drops <state,state>] --by <model id> [--product <name>]',
55
+ 'sketch note <layer>/<name> <variant> <text> --by <model id> [--product <name>]',
56
+ 'sketch target add <layer>/<name> <layer>/<name> --by <model id> [--product <name>]',
57
+ 'sketch target remove <layer>/<name> <layer>/<name> --by <model id> [--product <name>]',
43
58
  'sketch list [--product <name>] [--json]',
44
- 'sketch report <layer>/<name> --variant <key> --by <model id> (<text> | --done) [--product <name>]',
59
+ 'sketch report <layer>/<name> --variant <key> --by <model id> (<text> | --done) [--reopen] [--product <name>]',
45
60
  'sketch ready <layer>/<name> --by <model id> [--product <name>]',
46
61
  'sketch hold <layer>/<name> --until <what the change waits on> --by <model id> [--product <name>]',
47
62
  'sketch release <layer>/<name> --by <model id> [--product <name>]',
48
63
  'sketch check [<layer>/<name>] [--fix] [--product <name>]',
49
64
  'sketch preview <layer>/<name> <variant> [--product <name>] [--json]',
50
- 'sketch rebase <layer>/<name> --by <model id> [--product <name>]',
51
- 'sketch merge <layer>/<name> [--note <reason>] [--variant <key> --allowed-by <plan ref>] --by <model id> [--product <name>]',
65
+ 'sketch rebase <layer>/<name> [--ported] --by <model id> [--product <name>]',
66
+ 'sketch merge <layer>/<name> [--note <reason> [--replace-note]] [--variant <key> --allowed-by <plan ref>] --by <model id> [--product <name>]',
52
67
  'sketch discard <layer>/<name> --by <model id> [--product <name>]',
53
68
  'sketch reject <layer>/<name> --variant <key> [--reason <text>] --by <model id | designer> [--product <name>]',
54
69
  'sketch reopen <layer>/<name> --variant <key> [--reason <text>] --by <model id | designer> [--product <name>]',
70
+ 'sketch withdraw <layer>/<name> --variant <key> --by <model id> [--product <name>]',
55
71
  ];
56
72
  const FLAG_HELP = {
57
73
  '--variants': 'the variant folders to open, a comma list: a,b,c',
58
74
  '--variant-note': "the note of one variant, kept in sketch.json apart from the part's merged note; repeat it per variant: a=<text>",
59
75
  '--by': 'the exact model id the coordinator gave you, e.g. claude-opus-5-5',
76
+ '--name': 'a second sketch on a part that has one: it lives in its own folder and is addressed as <layer>/<name>@<sketch name>',
60
77
  '--like': 'start each variant from another part, or from a variant of the open sketch on it',
61
78
  '--override': 'on a base part: merge into a product copy that overrides the base, not into the base; on a product override: sketch that copy',
62
79
  '--into-base': 'on a part the product overrides: start from the product copy, merge into the base and remove the copy',
80
+ '--ported': 'on rebase: the conflicting files hold the product change already, ported by hand - keep them and rebase',
63
81
  '--round': 'the title of a new round',
64
82
  '--round-note': 'what the new round shows',
65
83
  '--from': 'the variant to copy',
66
84
  '--title': 'the new title of the round',
67
85
  '--drops': 'the states the round drops on purpose, a comma list',
68
86
  '--variant': 'the variant the command is about; on merge, the only live variant of a sketch with no pick',
69
- '--allowed-by': 'the plan entry that lets the merge go without a pick in Studio; logged in accepted.json, needs --variant',
87
+ '--allowed-by': 'the plan entry that lets the merge go without a pick in Studio; noted in merged.json, needs --variant',
88
+ '--replace-note': "on merge: also write --note over each target part's note",
70
89
  '--reason': 'why; on reject of a variant that is rejected already it sets the reason of that rejection; stored with who wrote it',
71
90
  '--until': 'what the pending change waits on: an open decision, a helper still to land',
72
91
  '--done': 'end the live report of the variant',
92
+ '--reopen': 'on report: move a ready sketch back to in progress',
73
93
  '--product': 'the product; needed only when config.json declares more than one and no other product has the sketch',
74
94
  '--json': 'print JSON',
75
95
  '--fix': "write the variants in the checkout's Prettier format first",
@@ -79,7 +99,7 @@ const NOTE_HELP = {
79
99
  new: 'what the first round shows',
80
100
  variant: 'why the running round lost; needed with --round',
81
101
  round: 'what the round shows',
82
- merge: 'why this variant',
102
+ merge: "why this variant; noted in merged.json, the part's note stays",
83
103
  };
84
104
  /** One line per flag the usage line names, for `sketch <command> --help`. */
85
105
  const sketchFlagHelpOf = (usage) => {
@@ -89,11 +109,13 @@ const sketchFlagHelpOf = (usage) => {
89
109
  return [...new Set((_b = usage.match(/--[a-z-]+/gu)) !== null && _b !== void 0 ? _b : [])].flatMap((flag) => help[flag] === undefined ? [] : [` ${flag.padEnd(16)}${help[flag]}`]);
90
110
  };
91
111
  exports.sketchFlagHelpOf = sketchFlagHelpOf;
92
- const VERDICTS = new Set(['reject', 'reopen']);
112
+ const VERDICTS = new Set(['reject', 'reopen', 'withdraw']);
93
113
  const WRITES = new Set([
94
114
  'new',
115
+ 'target',
95
116
  'variant',
96
117
  'round',
118
+ 'note',
97
119
  'report',
98
120
  'ready',
99
121
  'hold',
@@ -173,6 +195,10 @@ const created = (context) => {
173
195
  return fail(unknown);
174
196
  if (parsed === undefined || typeof parsed === 'string')
175
197
  return fail((_a = exports.SKETCH_USAGE[0]) !== null && _a !== void 0 ? _a : '');
198
+ const name = args.values['--name'];
199
+ const named = name === undefined ? parsed : (0, sketch_1.parseTarget)(`${parsed.layer}/${parsed.name}@${name}`);
200
+ if (typeof named === 'string')
201
+ return fail(named);
176
202
  const variants = ((_b = args.values['--variants']) !== null && _b !== void 0 ? _b : '').split(',').filter((variant) => variant !== '');
177
203
  const notes = variantNotesOf((_c = args.repeated['--variant-note']) !== null && _c !== void 0 ? _c : [], variants);
178
204
  if (typeof notes === 'string')
@@ -189,7 +215,7 @@ const created = (context) => {
189
215
  return fail('pass --override or --into-base, not both');
190
216
  const sketch = (0, sketch_1.createSketch)({
191
217
  product,
192
- sketch: parsed,
218
+ sketch: named,
193
219
  others: others.filter((entry) => typeof entry !== 'string'),
194
220
  variants,
195
221
  roundTitle: args.values['--round'],
@@ -221,14 +247,17 @@ const nextStepsOf = (sketch, product) => {
221
247
  return [
222
248
  'Next:',
223
249
  ` sketch report ${at} --variant ${first} --by <model id> "<what you draw>" while you draw a variant`,
224
- ` sketch report ${at} --variant ${first} --by <model id> --done when you stop drawing it; no report runs yet, so none is needed now`,
225
250
  ...(running.note.trim() === ''
226
251
  ? [
227
252
  ` sketch round ${sketch.target} ${running.key} --product ${product} --note "<what the round shows>" --by <model id>`,
228
253
  ]
229
254
  : []),
230
255
  ` sketch check ${at}`,
256
+ ` shot ${sketch.targets[0]} --states --variants --product ${product} look at it: ready refuses a pixel diff without a viewed shot`,
231
257
  ` sketch ready ${at} --by <model id>`,
258
+ ` sketch report ${at} --variant ${first} --by <model id> --done after ready, once you stop drawing a variant; no report runs yet, so none is needed now`,
259
+ ` a shared JSON file ready wrote (merged.json, go.json): commit it with \`et design commit-hunks <file> --part ${sketch.targets[0]}\`, never as a whole file another session also edits`,
260
+ theming_text_1.THEMING_TEXT,
232
261
  ];
233
262
  };
234
263
  const variantNotesOf = (pairs, variants) => {
@@ -332,8 +361,10 @@ const listed = (context) => {
332
361
  ? `, picked ${sketch.decision.variant}`
333
362
  : ', discard asked'
334
363
  : '';
335
- const rejected = sketch.variants.filter((variant) => (0, sketch_1.rejectionOf)(sketch, variant));
336
- console.log(`${sketch.product} ${sketch.target} ${sketch.status} ${sketch.variants.join(', ')}${decided}${rejected.length > 0 ? `, rejected ${rejected.join(', ')}` : ''}${sketch.hold ? `, held until: ${sketch.hold.until}` : ''}`);
364
+ const rejected = sketch.variants.filter((variant) => { var _a; return ((_a = (0, sketch_1.rejectionOf)(sketch, variant)) === null || _a === void 0 ? void 0 : _a.status) !== 'withdrawn' && (0, sketch_1.rejectionOf)(sketch, variant); });
365
+ const withdrawnKeys = sketch.variants.filter((variant) => { var _a; return ((_a = (0, sketch_1.rejectionOf)(sketch, variant)) === null || _a === void 0 ? void 0 : _a.status) === 'withdrawn'; });
366
+ const extra = sketch.targets.slice(1);
367
+ console.log(`${sketch.product} ${sketch.target}${extra.length > 0 ? ` (+ ${extra.join(', ')})` : ''} ${sketch.status} ${sketch.variants.join(', ')}${decided}${rejected.length > 0 ? `, rejected ${rejected.join(', ')}` : ''}${withdrawnKeys.length > 0 ? `, withdrawn ${withdrawnKeys.join(', ')}` : ''}${sketch.hold ? `, held until: ${sketch.hold.until}` : ''}`);
337
368
  for (const round of sketch.rounds) {
338
369
  const variants = sketch.variants.filter((variant) => { var _a; return ((_a = sketch.variantInfo[variant]) === null || _a === void 0 ? void 0 : _a.round) === round.key; });
339
370
  console.log(` ${round.key} ${round.title} ${variants.join(', ')}${round.note === '' ? '' : ` - ${round.note}`}${round.lost ? ` - lost: ${round.lost}` : ''}`);
@@ -350,16 +381,26 @@ const reported = (context) => withSketch(context, ({ sketch }) => {
350
381
  const author = (0, cli_args_1.authorOf)(context.args);
351
382
  const done = context.args.flags.has('--done');
352
383
  if ((message === '' && !done) || !variant || !author)
353
- return fail(`usage: sketch report <layer>/<name> --variant <key> --by <model id> (<text> | --done) [--product <name>] - --product is needed when config.json declares more than one product`);
384
+ return fail(`usage: sketch report <layer>/<name> --variant <key> --by <model id> (<text> | --done) [--reopen] [--product <name>] - --product is needed when config.json declares more than one product`);
354
385
  if (done) {
386
+ const notReady = roundNoteRefusalOf(sketch) === null ? roundNotReadyProblemOf(sketch) : null;
387
+ if (notReady !== null)
388
+ return fail(notReady);
355
389
  (0, sketch_1.finishSketchReport)({ checkout: context.target, sketch, variant });
356
390
  console.log(`${sketch.target} variant ${variant} marked done`);
357
391
  return 0;
358
392
  }
359
- const reported = (0, sketch_1.reportSketch)({ checkout: context.target, sketch, variant, author, message });
393
+ const reported = (0, sketch_1.reportSketch)({
394
+ checkout: context.target,
395
+ sketch,
396
+ variant,
397
+ author,
398
+ message,
399
+ reopen: context.args.flags.has('--reopen'),
400
+ });
360
401
  if (typeof reported === 'string')
361
402
  return fail(reported);
362
- console.log(`reported on ${sketch.target} variant ${variant}: ${message}`);
403
+ console.log(`reported on ${sketch.target} variant ${variant}: ${message}${sketch.status === 'ready' ? ' - back in progress, mark it ready again when done' : ''}`);
363
404
  return 0;
364
405
  });
365
406
  const ROUND_USAGE = 'usage: sketch round <layer>/<name> <round> [--title <text>] [--note <text>] [--drops <state,state>] --by <model id>';
@@ -382,6 +423,56 @@ const roundEdited = (context) => withSketch(context, ({ sketch }) => {
382
423
  console.log(`${edited.target} round ${round}: ${(_b = entry === null || entry === void 0 ? void 0 : entry.title) !== null && _b !== void 0 ? _b : ''}${(entry === null || entry === void 0 ? void 0 : entry.note) ? ` - ${entry.note}` : ''}${(entry === null || entry === void 0 ? void 0 : entry.lost) ? ` - lost: ${entry.lost}` : ''}${(entry === null || entry === void 0 ? void 0 : entry.drops) ? ` - drops ${entry.drops.join(', ')}` : ''}`);
383
424
  return 0;
384
425
  });
426
+ const noteEdited = (context) => withSketch(context, ({ sketch }) => {
427
+ const [, variant, ...words] = context.args.positional;
428
+ const note = words.join(' ').trim();
429
+ if (!variant || note === '')
430
+ return fail(`usage: ${exports.SKETCH_USAGE.find((line) => line.startsWith('sketch note '))}`);
431
+ const edited = (0, sketch_1.editVariantNote)({ sketch, variant, note });
432
+ if (typeof edited === 'string')
433
+ return fail(edited);
434
+ console.log(`${edited.target} variant ${variant}: ${note}`);
435
+ return 0;
436
+ });
437
+ const targetRemoved = (context) => {
438
+ const usage = `usage: ${exports.SKETCH_USAGE.find((line) => line.startsWith('sketch target remove'))}`;
439
+ const rest = context.args.positional.slice(1);
440
+ const [, part] = rest;
441
+ if (rest.length !== 2 || !part)
442
+ return fail(usage);
443
+ const parsed = (0, sketch_1.parseTarget)(part);
444
+ if (typeof parsed === 'string')
445
+ return fail(parsed);
446
+ return withSketch(Object.assign(Object.assign({}, context), { args: Object.assign(Object.assign({}, context.args), { positional: rest }) }), ({ sketch }) => {
447
+ const removed = (0, sketch_1.removeTarget)({ sketch, part: parsed });
448
+ if (typeof removed === 'string')
449
+ return fail(removed);
450
+ (0, check_format_1.formatSketch)({ target: context.target, sketch: removed, variants: removed.variants });
451
+ console.log(`${removed.target} now targets ${removed.targets.join(', ')}`);
452
+ return 0;
453
+ });
454
+ };
455
+ const targetAdded = (context) => {
456
+ const [action, ...rest] = context.args.positional;
457
+ const [, part] = rest;
458
+ const usage = `usage: ${exports.SKETCH_USAGE.find((line) => line.startsWith('sketch target '))}`;
459
+ if (action === 'remove')
460
+ return targetRemoved(context);
461
+ if (action !== 'add' || rest.length !== 2 || !part)
462
+ return fail(usage);
463
+ const parsed = (0, sketch_1.parseTarget)(part);
464
+ if (typeof parsed === 'string')
465
+ return fail(parsed);
466
+ return withSketch(Object.assign(Object.assign({}, context), { args: Object.assign(Object.assign({}, context.args), { positional: rest }) }), ({ product, sketch }) => {
467
+ var _a;
468
+ const added = (0, sketch_1.addTarget)({ product, sketch, part: parsed, author: (_a = (0, cli_args_1.authorOf)(context.args)) !== null && _a !== void 0 ? _a : undefined });
469
+ if (typeof added === 'string')
470
+ return fail(added);
471
+ (0, check_format_1.formatSketch)({ target: context.target, sketch: added, variants: added.variants });
472
+ console.log(`${added.target} now targets ${added.targets.join(', ')}`);
473
+ return 0;
474
+ });
475
+ };
385
476
  const readied = (context) => {
386
477
  const found = productAndSketchOf(context);
387
478
  if (typeof found === 'string')
@@ -392,23 +483,64 @@ const readied = (context) => {
392
483
  const refused = readyRefusalOf(context, found);
393
484
  if (refused !== null)
394
485
  return refused;
395
- return loadedAndReady(context, found);
486
+ return renderedAndReady(context, found);
396
487
  };
488
+ const renderedAndReady = (context, found) => __awaiter(void 0, void 0, void 0, function* () {
489
+ var _a;
490
+ const { product, sketch } = found;
491
+ const rendered = yield renderedVariantsOf({
492
+ target: context.target,
493
+ config: context.config,
494
+ product,
495
+ entries: sketch.variants.filter((variant) => !(0, sketch_1.rejectionOf)(sketch, variant)).map((variant) => ({ sketch, variant })),
496
+ drawn: false,
497
+ });
498
+ if ('issues' in rendered && rendered.issues.length > 0)
499
+ return fail(`${sketch.target} has problems - fix them before ready`);
500
+ const busyAdded = 'issues' in rendered ? openPointLinesOf({ product, sketch, busy: (_a = rendered.busy) !== null && _a !== void 0 ? _a : [] }).added : [];
501
+ if (busyAdded.length > 0)
502
+ return fail(`${busyAdded.join('\n')}\n${sketch.target} adds open points - close them before ready`);
503
+ return loadedAndReady(context, found);
504
+ });
397
505
  const loadedAndReady = (context_1, _a) => __awaiter(void 0, [context_1, _a], void 0, function* (context, { product, sketch }) {
398
- var _b;
399
- const unloaded = yield (0, ready_shots_1.variantsThatDoNotLoad)({ target: context.target, config: context.config, product, sketch });
506
+ var _b, _c;
507
+ const unloaded = yield unloadedLinesOf({ target: context.target, config: context.config, product, sketch });
400
508
  if (unloaded.length > 0)
401
- return fail(`${unloaded.map((line) => `${sketch.target} ${line}`).join('\n')}\n${sketch.target} does not load - fix it before ready`);
509
+ return fail(`${unloaded.join('\n')}\n${sketch.target} does not load - fix it before ready`);
510
+ const drifts = yield (0, ready_shots_1.sampleMarkDriftLines)({ target: context.target, config: context.config, product, sketch });
511
+ if (drifts.length > 0)
512
+ return fail(`${drifts.join('\n')}\n${sketch.target} draws one sample with different marks - align them before ready`);
513
+ const identical = yield (0, ready_shots_1.identicalRenderLines)({ target: context.target, config: context.config, product, sketch });
514
+ if (identical.length > 0)
515
+ return fail(`${identical.join('\n')}\n${sketch.target} draws variants alike - fix them before ready`);
516
+ const changes = sketch.targets.every((key) => product.parts.some((part) => (0, resolve_product_1.partKeyOf)(part) === key))
517
+ ? yield (0, ready_shots_1.variantChangesShown)({ target: context.target, config: context.config, product, sketch })
518
+ : null;
519
+ const unviewed = Array.isArray(changes)
520
+ ? (0, viewed_shots_1.unviewedShotLinesOf)({
521
+ target: context.target,
522
+ invocation: (_b = context.invocation) !== null && _b !== void 0 ? _b : (0, invocation_1.repoInvocation)({ root: context.target, subcommand: 'design' }),
523
+ sketch,
524
+ changes,
525
+ })
526
+ : [];
527
+ if (unviewed.length > 0)
528
+ return fail(`${unviewed.join('\n')}\n${sketch.target} draws a pixel diff - view its shot before ready`);
402
529
  const ready = sketch.status === 'ready'
403
530
  ? sketch
404
- : (0, sketch_1.markSketchReady)({ checkout: context.target, sketch, author: (_b = (0, cli_args_1.authorOf)(context.args)) !== null && _b !== void 0 ? _b : undefined });
531
+ : (0, sketch_1.markSketchReady)({ checkout: context.target, sketch, author: (_c = (0, cli_args_1.authorOf)(context.args)) !== null && _c !== void 0 ? _c : undefined });
405
532
  if (typeof ready === 'string')
406
533
  return fail(ready);
407
- return autoMerged({ context, product, sketch: ready, again: sketch.status === 'ready' });
534
+ return autoMerged({ context, product, sketch: ready, again: sketch.status === 'ready', changes });
408
535
  });
409
- const autoMerged = (options) => __awaiter(void 0, void 0, void 0, function* () {
536
+ const stillReady = (options) => {
537
+ if (options.again)
538
+ console.log(`${options.sketch.target} is still ready`);
539
+ return 0;
540
+ };
541
+ const autoMerged = (options) => {
410
542
  var _a, _b;
411
- const { context, product, sketch, again } = options;
543
+ const { context, product, sketch, again, changes } = options;
412
544
  if (!again)
413
545
  console.log(`${sketch.target} is ready`);
414
546
  for (const variant of sketch.variants.filter((candidate) => !(0, sketch_1.rejectionOf)(sketch, candidate))) {
@@ -416,50 +548,120 @@ const autoMerged = (options) => __awaiter(void 0, void 0, void 0, function* () {
416
548
  if (shared.length > 0)
417
549
  console.log(`variant ${variant}: a shared/ edit reaches ${shared.join(', ')}`);
418
550
  }
419
- if (!sketch.targets.every((key) => product.parts.some((part) => (0, resolve_product_1.partKeyOf)(part) === key))) {
551
+ if (changes === null) {
420
552
  console.log('auto-merge skipped: new part, the user merges');
421
- return again ? fail(`${sketch.target} is ready, not in progress`) : 0;
553
+ return stillReady({ sketch, again });
422
554
  }
423
- const noChange = yield (0, ready_shots_1.shotsShowNoChange)({ target: context.target, config: context.config, product, sketch });
555
+ const noChange = typeof changes === 'string' ? changes : (0, no_visible_change_1.noChangeOf)(changes);
424
556
  if (noChange !== true) {
425
557
  console.log(`auto-merge skipped: ${noChange}`);
426
- return again ? fail(`${sketch.target} is ready, not in progress`) : 0;
558
+ return stillReady({ sketch, again });
427
559
  }
428
560
  const author = (_a = (0, cli_args_1.authorOf)(context.args)) !== null && _a !== void 0 ? _a : undefined;
429
561
  const variant = (_b = sketch.variants.find((candidate) => !(0, sketch_1.rejectionOf)(sketch, candidate))) !== null && _b !== void 0 ? _b : '';
562
+ const sketchFile = (0, path_1.resolve)(sketch.dir, sketch_1.SKETCH_FILE);
563
+ const undecided = (0, fs_1.readFileSync)(sketchFile, 'utf8');
430
564
  const decided = (0, sketch_1.decideSketch)({ sketch, decision: { kind: 'pick', variant } });
431
565
  if (typeof decided === 'string')
432
566
  return fail(decided);
433
- const result = (0, merge_1.mergeSketch)({ target: context.target, config: context.config, product, sketch: decided, author });
567
+ const written = sharedFilesOf(product);
568
+ const before = written.map((file) => contentOf(file));
569
+ const result = (0, merge_1.mergeSketch)({
570
+ target: context.target,
571
+ config: context.config,
572
+ product,
573
+ sketch: decided,
574
+ author,
575
+ decidedBy: 'auto: no visible change',
576
+ });
434
577
  if (!Array.isArray(result)) {
578
+ (0, fs_1.writeFileSync)(sketchFile, undecided);
435
579
  console.warn(`${sketch.target} shows no visible change but did not merge: ${result.reason}`);
436
580
  return 0;
437
581
  }
438
- for (const part of sketch.targets)
439
- (0, merged_parts_1.recordAutoMerge)({ product, part, by: author !== null && author !== void 0 ? author : 'user' });
440
582
  console.log(`No visible change in any state: merged ${sketch.targets.join(', ')} automatically.`);
583
+ commitHunksLines({
584
+ target: context.target,
585
+ files: written.filter((file, index) => contentOf(file) !== before[index]),
586
+ parts: sketch.targets,
587
+ }).forEach((line) => console.log(line));
441
588
  return 0;
442
- });
589
+ };
590
+ const contentOf = (file) => ((0, fs_1.existsSync)(file) ? (0, fs_1.readFileSync)(file, 'utf8') : null);
591
+ const sharedFilesOf = (product) => [
592
+ (0, path_1.resolve)(product.dir, merged_parts_1.MERGED_FILE),
593
+ ...(product.base ? [(0, path_1.resolve)(product.base.dir, merged_parts_1.MERGED_FILE)] : []),
594
+ ];
595
+ const commitHunksLines = ({ target, files, parts }) => files.length === 0
596
+ ? []
597
+ : [
598
+ 'Shared files written; commit only the hunks of this sketch, never the whole file another session also edits:',
599
+ ...files.map((file) => ` et design commit-hunks ${(0, path_1.relative)(target, file)} ${parts.map((part) => `--part ${part}`).join(' ')}`),
600
+ ];
601
+ const noteProblemsBefore = ({ target, sketch, variant, before, }) => before.forEach((problem) => console.warn(`NOTE ${sketch.target} ${variant}: ${problem.rule} ${(0, path_1.relative)(target, problem.file)}: ${problem.message} (there before)`));
602
+ const variantGateProblemsOf = (options) => [...options.problems, ...(0, check_format_1.formatProblemsOf)(options), ...(0, unused_closure_1.unusedInVariantOf)(options)];
603
+ const busyOfVariant = (busy, sketch) => busy
604
+ .filter((entry) => { var _a; return ((_a = entry.sketch) === null || _a === void 0 ? void 0 : _a.target) === sketch.target && entry.sketch.variant === sketch.variant; })
605
+ .map(({ part, state }) => ({ part, state }));
606
+ const openPointLinesOf = ({ product, sketch, busy = [], }) => {
607
+ const pointLinesOf = (variant, list) => (0, open_points_1.openPointsText)(product.name, list)
608
+ .slice(1)
609
+ .map((line) => `${sketch.target} ${variant}: ${line.trim()}`);
610
+ const points = sketch.variants
611
+ .filter((variant) => !(0, sketch_1.rejectionOf)(sketch, variant))
612
+ .map((variant) => (Object.assign({ variant }, (0, read_open_points_1.sketchOpenPointsOf)({
613
+ merged: product,
614
+ variant: (0, overlay_1.overlaySketch)({ product, sketch, variant }),
615
+ targets: sketch.targets,
616
+ busy: { merged: [], variant: busyOfVariant(busy, { target: sketch.target, variant }) },
617
+ }))));
618
+ return {
619
+ added: points.flatMap(({ variant, added }) => pointLinesOf(variant, added)),
620
+ inherited: points.flatMap(({ variant, inherited }) => pointLinesOf(variant, inherited)),
621
+ };
622
+ };
623
+ const roundNoteRefusalOf = (sketch) => {
624
+ const running = (0, sketch_1.runningRoundOf)(sketch);
625
+ return running.note.trim() === ''
626
+ ? `${sketch.target} round ${running.key} has no note - set it with: sketch round ${sketch.target} ${running.key} --note "<what the round shows>" --by <model id>`
627
+ : null;
628
+ };
629
+ const roundNotReadyProblemOf = (sketch) => sketch.status === 'ready' || sketch.hold
630
+ ? null
631
+ : `ROUND-NOT-READY ${sketch.target}: round ${(0, sketch_1.runningRoundOf)(sketch).key} is drawn but still in progress - run \`design sketch ready ${sketch.target}\``;
632
+ const unloadedLinesOf = (options) => __awaiter(void 0, void 0, void 0, function* () { return (yield (0, ready_shots_1.variantsThatDoNotLoad)(options)).map((line) => `${options.sketch.target} ${line}`); });
443
633
  const readyRefusalOf = (context, { product, sketch }) => {
444
634
  const lineOf = (variant, problem) => `${sketch.target} ${variant}: ${problem.rule} ${(0, path_1.relative)(context.target, problem.file)}: ${problem.message}`;
445
635
  const found = (0, check_sketches_1.variantProblemsOf)({ product, sketch });
446
- found.forEach(({ variant, before }) => before.forEach((problem) => console.warn(`NOTE (was there before) ${lineOf(variant, problem)}`)));
447
- const problems = found.flatMap(({ variant, problems }) => [
448
- ...problems,
449
- ...(0, check_format_1.formatProblemsOf)({ target: context.target, sketch, variant }),
450
- ...((0, sketch_1.rejectionOf)(sketch, variant) ? [] : (0, unused_closure_1.unusedInVariantOf)({ product, sketch, variant })),
451
- ].map((problem) => lineOf(variant, problem)));
636
+ found.forEach((entry) => noteProblemsBefore(Object.assign({ target: context.target }, entry)));
637
+ const problems = found
638
+ .filter(({ variant }) => !(0, sketch_1.rejectionOf)(sketch, variant))
639
+ .flatMap(({ variant, problems }) => variantGateProblemsOf({ target: context.target, product, sketch, variant, problems }).map((problem) => lineOf(variant, problem)));
452
640
  sketch.variants.forEach((variant) => (0, check_sketches_1.variantWarningsOf)({ target: context.target, product, sketch, variant }).forEach((warning) => console.warn(`${sketch.target} ${variant}: ${warning}`)));
453
641
  if (problems.length > 0)
454
642
  return fail(`${problems.join('\n')}\n${sketch.target} has problems - fix them before ready`);
455
- const running = (0, sketch_1.runningRoundOf)(sketch);
456
- if (running.note.trim() === '')
457
- return fail(`${sketch.target} round ${running.key} has no note - set it with: sketch round ${sketch.target} ${running.key} --note "<what the round shows>" --by <model id>`);
458
- return null;
643
+ const { added, inherited } = openPointLinesOf({ product, sketch });
644
+ inherited.forEach((line) => console.log(`NOTE ${line} (inherited from the merged part)`));
645
+ sketch.variants
646
+ .filter((variant) => !(0, sketch_1.rejectionOf)(sketch, variant))
647
+ .forEach((variant) => (0, read_open_points_1.instantLinesOf)((0, overlay_1.overlaySketch)({ product, sketch, variant }), sketch.targets).forEach((line) => console.log(`NOTE ${sketch.target} ${variant}: ${line}`)));
648
+ if (added.length > 0)
649
+ return fail(`${added.join('\n')}\n${sketch.target} adds open points - close them before ready`);
650
+ const noNote = roundNoteRefusalOf(sketch);
651
+ return noNote === null ? null : fail(noNote);
459
652
  };
460
653
  const rebased = (context) => withSketch(context, ({ product, sketch }) => {
654
+ const kept = context.args.flags.has('--ported');
655
+ const { ported, conflicts } = (0, rebase_port_1.portBaseChanges)({ target: context.target, product, sketch, keepConflicts: kept });
656
+ if (kept)
657
+ conflicts.forEach((line) => console.log(`KEPT ${line} (ported by hand)`));
658
+ else if (conflicts.length > 0)
659
+ return fail(`${conflicts.join('\n')}\n${sketch.target} not rebased - port these by hand, then run sketch rebase again`);
660
+ ported.forEach(({ variant, file, how }) => console.log(`PORTED ${variant}: ${file} (${how})`));
461
661
  (0, sketch_1.rebaseSketch)({ product, sketch });
462
662
  console.log(`${sketch.target} now compares with the product as it is`);
663
+ if (ported.length > 0 && sketch.status === 'ready')
664
+ console.log(`variants changed - run sketch ready ${sketch.target} to check them again`);
463
665
  return 0;
464
666
  });
465
667
  const held = (context) => withSketch(context, ({ sketch }) => {
@@ -481,17 +683,73 @@ const released = (context) => withSketch(context, ({ sketch }) => {
481
683
  console.log(`${freed.target} is no longer held - mark it ready once the change is in`);
482
684
  return 0;
483
685
  });
686
+ const beforeLinesOf = ({ sketches, before }) => [...new Set(sketches)].flatMap((sketch) => (0, render_check_1.groupedIssueLinesOf)(before
687
+ .filter((issue) => sketch.targets.includes(issue.part))
688
+ .map((issue) => (Object.assign(Object.assign({}, issue), { sketch: { target: sketch.target, variant: 'before' } })))));
689
+ exports.beforeLinesOf = beforeLinesOf;
690
+ const renderedVariantsOf = (_a) => __awaiter(void 0, [_a], void 0, function* ({ target, config, product, entries, drawn, }) {
691
+ var _b, _c, _d;
692
+ const rendered = yield (0, render_check_1.renderIssuesOf)({
693
+ target,
694
+ config,
695
+ jobs: entries.map(({ sketch, variant }) => {
696
+ const preview = (0, merge_preview_1.mergePreviewOf)({ product, sketch, variant });
697
+ return {
698
+ product: product.name,
699
+ sketch: { target: sketch.target, variant },
700
+ parts: [...preview.changed, ...preview.affected],
701
+ };
702
+ }),
703
+ before: [...new Set(entries.flatMap(({ sketch }) => sketch.targets))].map((part) => ({
704
+ product: product.name,
705
+ part,
706
+ })),
707
+ });
708
+ if ('unavailable' in rendered)
709
+ console.log(`RENDER CHECK SKIPPED - ${rendered.unavailable}`);
710
+ else {
711
+ for (const { sketch, part, state, size } of drawn ? rendered.drawn : []) {
712
+ const rules = [
713
+ ...new Set(rendered.issues
714
+ .filter((issue) => {
715
+ var _a, _b;
716
+ return ((_a = issue.sketch) === null || _a === void 0 ? void 0 : _a.target) === (sketch === null || sketch === void 0 ? void 0 : sketch.target) &&
717
+ ((_b = issue.sketch) === null || _b === void 0 ? void 0 : _b.variant) === (sketch === null || sketch === void 0 ? void 0 : sketch.variant) &&
718
+ issue.part === part &&
719
+ issue.state === state &&
720
+ issue.size === size;
721
+ })
722
+ .map((issue) => issue.rule)),
723
+ ];
724
+ console.log(`${(_b = sketch === null || sketch === void 0 ? void 0 : sketch.target) !== null && _b !== void 0 ? _b : ''} ${(_c = sketch === null || sketch === void 0 ? void 0 : sketch.variant) !== null && _c !== void 0 ? _c : ''}: ${part} ${state} at ${size} ${rules.join(' ') || 'ok'}`);
725
+ }
726
+ if (drawn)
727
+ rendered.grids.forEach(({ sketch, part, line }) => { var _a, _b; return console.log(`${(_a = sketch === null || sketch === void 0 ? void 0 : sketch.target) !== null && _a !== void 0 ? _a : ''} ${(_b = sketch === null || sketch === void 0 ? void 0 : sketch.variant) !== null && _b !== void 0 ? _b : ''}: ${part} ${line}`); });
728
+ rendered.warnings.forEach((issue) => { var _a, _b, _c, _d; return console.warn(`${(_b = (_a = issue.sketch) === null || _a === void 0 ? void 0 : _a.target) !== null && _b !== void 0 ? _b : ''} ${(_d = (_c = issue.sketch) === null || _c === void 0 ? void 0 : _c.variant) !== null && _d !== void 0 ? _d : ''}: WARNING ${(0, render_check_1.renderIssueLineOf)(issue)}`); });
729
+ (0, render_check_1.groupedIssueLinesOf)(rendered.issues).forEach((line) => console.error(line));
730
+ (0, exports.beforeLinesOf)({ sketches: entries.map((entry) => entry.sketch), before: (_d = rendered.before) !== null && _d !== void 0 ? _d : [] }).forEach((line) => console.log(line));
731
+ }
732
+ return rendered;
733
+ });
484
734
  const checked = (context) => __awaiter(void 0, void 0, void 0, function* () {
485
- var _a, _b;
735
+ var _a, _b, _c;
486
736
  const { target, config, args } = context;
487
737
  const product = sketchProductOf(context);
488
738
  if (typeof product === 'string')
489
739
  return fail(product);
490
740
  const asked = args.positional[0];
491
741
  const { unreadable, variants } = (0, check_sketches_1.openSketchProblemsOf)(product);
492
- const chosen = asked === undefined ? variants : variants.filter((entry) => entry.sketch.target === asked);
493
- if (asked !== undefined && chosen.length === 0)
742
+ const named = asked === undefined ? variants : variants.filter((entry) => entry.sketch.target === asked);
743
+ if (asked !== undefined && named.length === 0)
494
744
  return fail(`NO SKETCH on ${asked} in ${product.name}`);
745
+ const isSkipped = ({ sketch, variant }) => Boolean((0, sketch_1.rejectionOf)(sketch, variant));
746
+ const chosen = named.filter((entry) => !isSkipped(entry));
747
+ named
748
+ .filter(isSkipped)
749
+ .forEach(({ sketch, variant }) => {
750
+ var _a;
751
+ return console.log(`NOTE ${sketch.target} ${variant}: ${((_a = (0, sketch_1.rejectionOf)(sketch, variant)) === null || _a === void 0 ? void 0 : _a.status) === 'withdrawn' ? 'withdrawn' : 'rejected'}, not checked`);
752
+ });
495
753
  if (args.flags.has('--fix'))
496
754
  new Set(chosen.map((entry) => entry.sketch)).forEach((sketch) => (0, check_format_1.formatSketch)({ target, sketch, variants: sketch.variants }));
497
755
  let failed = asked === undefined && unreadable.length > 0;
@@ -501,13 +759,19 @@ const checked = (context) => __awaiter(void 0, void 0, void 0, function* () {
501
759
  if (sketch.hold)
502
760
  console.warn(`HELD ${sketch.target}: until ${sketch.hold.until}`);
503
761
  });
762
+ const stale = (0, check_system_1.staleSketchBasesOf)({
763
+ product,
764
+ invocation: (_a = context.invocation) !== null && _a !== void 0 ? _a : (0, invocation_1.repoInvocation)({ root: target, subcommand: 'design' }),
765
+ targets: new Set(chosen.map((entry) => entry.sketch.target)),
766
+ });
767
+ stale.forEach((problem) => console.error(problem.line));
768
+ failed || (failed = stale.length > 0);
504
769
  for (const { sketch, variant, problems, before } of chosen) {
505
770
  const typed = (0, check_sketches_1.typecheckVariant)({ target, product, sketch, variant });
506
- before.forEach((problem) => console.warn(`NOTE (was there before) ${sketch.target} ${variant}: ${problem.rule} ${(0, path_1.relative)(target, problem.file)}: ${problem.message}`));
771
+ noteProblemsBefore({ target, sketch, variant, before });
507
772
  (0, check_sketches_1.variantWarningsOf)({ target, product, sketch, variant }).forEach((warning) => console.warn(`${sketch.target} ${variant}: ${warning}`));
508
773
  const all = [
509
- ...problems,
510
- ...(0, check_format_1.formatProblemsOf)({ target, sketch, variant }),
774
+ ...variantGateProblemsOf({ target, product, sketch, variant, problems }),
511
775
  ...(typed.kind === 'failed' ? [{ rule: 'TYPE-ERROR', file: sketch.dir, message: `\n${typed.output}` }] : []),
512
776
  ...(typed.kind === 'unavailable' ? [{ rule: 'NO-TYPE-CHECKER', file: sketch.dir, message: typed.message }] : []),
513
777
  ];
@@ -516,45 +780,63 @@ const checked = (context) => __awaiter(void 0, void 0, void 0, function* () {
516
780
  }
517
781
  failed || (failed = all.length > 0);
518
782
  }
519
- if (failed)
520
- return 1;
521
- const rendered = yield (0, render_check_1.renderIssuesOf)({
522
- target,
523
- config,
524
- jobs: chosen.map(({ sketch, variant }) => {
525
- const preview = (0, merge_preview_1.mergePreviewOf)({ product, sketch, variant });
526
- return {
527
- product: product.name,
528
- sketch: { target: sketch.target, variant },
529
- parts: [...preview.changed, ...preview.affected],
530
- };
531
- }),
532
- });
533
- if ('unavailable' in rendered)
534
- console.log(`RENDER CHECK SKIPPED - ${rendered.unavailable}`);
535
- else {
536
- for (const { sketch, part, state, size } of rendered.drawn) {
537
- const rules = [
538
- ...new Set(rendered.issues
539
- .filter((issue) => {
540
- var _a, _b;
541
- return ((_a = issue.sketch) === null || _a === void 0 ? void 0 : _a.target) === (sketch === null || sketch === void 0 ? void 0 : sketch.target) &&
542
- ((_b = issue.sketch) === null || _b === void 0 ? void 0 : _b.variant) === (sketch === null || sketch === void 0 ? void 0 : sketch.variant) &&
543
- issue.part === part &&
544
- issue.state === state &&
545
- issue.size === size;
546
- })
547
- .map((issue) => issue.rule)),
548
- ];
549
- console.log(`${(_a = sketch === null || sketch === void 0 ? void 0 : sketch.target) !== null && _a !== void 0 ? _a : ''} ${(_b = sketch === null || sketch === void 0 ? void 0 : sketch.variant) !== null && _b !== void 0 ? _b : ''}: ${part} ${state} at ${size} ${rules.join(' ') || 'ok'}`);
783
+ if (!failed)
784
+ for (const sketch of new Set(chosen.map((entry) => entry.sketch)))
785
+ (yield (0, ready_shots_1.aktuellPlaceholderWarnings)({ target, config, product, sketch })).forEach((warning) => console.warn(warning));
786
+ const rendered = failed
787
+ ? null
788
+ : yield renderedVariantsOf({
789
+ target,
790
+ config,
791
+ product,
792
+ entries: chosen,
793
+ drawn: true,
794
+ });
795
+ const busy = rendered !== null && 'issues' in rendered ? ((_b = rendered.busy) !== null && _b !== void 0 ? _b : []) : [];
796
+ if (rendered !== null && 'issues' in rendered)
797
+ (0, frame_budget_1.frameBudgetWarningsOf)({
798
+ drawn: rendered.drawn,
799
+ targets: [...new Set(chosen.map((entry) => entry.sketch))].map((sketch) => {
800
+ var _a;
801
+ return ({
802
+ target: sketch.target,
803
+ part: (_a = sketch.targets[0]) !== null && _a !== void 0 ? _a : sketch.target,
804
+ });
805
+ }),
806
+ }).forEach((warning) => console.warn(warning));
807
+ let refused = 0;
808
+ let notReady = false;
809
+ const refuse = (lines) => {
810
+ lines.forEach((line) => console.warn(`ready will refuse: ${line}`));
811
+ refused += lines.length;
812
+ };
813
+ for (const sketch of new Set(chosen.map((entry) => entry.sketch))) {
814
+ const unloaded = yield unloadedLinesOf({ target, config, product, sketch });
815
+ const before = refused;
816
+ refuse([
817
+ ...unloaded,
818
+ ...openPointLinesOf({ product, sketch, busy }).added,
819
+ ...[(_c = roundNoteRefusalOf(sketch)) !== null && _c !== void 0 ? _c : []].flat(),
820
+ ]);
821
+ if (!failed && unloaded.length === 0) {
822
+ refuse(yield (0, ready_shots_1.sampleMarkDriftLines)({ target, config, product, sketch }));
823
+ refuse(yield (0, ready_shots_1.identicalRenderLines)({ target, config, product, sketch }));
824
+ }
825
+ if (!failed && refused === before) {
826
+ const problem = roundNotReadyProblemOf(sketch);
827
+ if (problem !== null) {
828
+ console.error(problem);
829
+ notReady = true;
830
+ }
550
831
  }
551
- rendered.grids.forEach(({ sketch, part, line }) => { var _a, _b; return console.log(`${(_a = sketch === null || sketch === void 0 ? void 0 : sketch.target) !== null && _a !== void 0 ? _a : ''} ${(_b = sketch === null || sketch === void 0 ? void 0 : sketch.variant) !== null && _b !== void 0 ? _b : ''}: ${part} ${line}`); });
552
- rendered.warnings.forEach((issue) => { var _a, _b, _c, _d; return console.warn(`${(_b = (_a = issue.sketch) === null || _a === void 0 ? void 0 : _a.target) !== null && _b !== void 0 ? _b : ''} ${(_d = (_c = issue.sketch) === null || _c === void 0 ? void 0 : _c.variant) !== null && _d !== void 0 ? _d : ''}: WARNING ${(0, render_check_1.renderIssueLineOf)(issue)}`); });
553
- rendered.issues.forEach((issue) => { var _a, _b, _c, _d; return console.error(`${(_b = (_a = issue.sketch) === null || _a === void 0 ? void 0 : _a.target) !== null && _b !== void 0 ? _b : ''} ${(_d = (_c = issue.sketch) === null || _c === void 0 ? void 0 : _c.variant) !== null && _d !== void 0 ? _d : ''}: ${(0, render_check_1.renderIssueLineOf)(issue)}`); });
554
832
  }
555
- if ('issues' in rendered && rendered.issues.length > 0)
833
+ if (failed)
556
834
  return 1;
557
- console.log('ok');
835
+ if (rendered !== null && 'issues' in rendered && rendered.issues.length > 0)
836
+ return 1;
837
+ if (notReady)
838
+ return 1;
839
+ console.log(refused > 0 ? `check ok - ready will refuse ${refused} (see above)` : 'ok');
558
840
  return 0;
559
841
  });
560
842
  const previewed = (context) => withSketch(context, ({ product, sketch }) => {
@@ -573,39 +855,33 @@ const previewed = (context) => withSketch(context, ({ product, sketch }) => {
573
855
  }
574
856
  return 0;
575
857
  });
576
- const allowedMergeOf = (options) => {
577
- const { sketch, variant } = options;
578
- const live = sketch.variants.filter((candidate) => !(0, sketch_1.rejectionOf)(sketch, candidate));
579
- if (live.length !== 1 || live[0] !== variant)
580
- return `${sketch.target} has ${live.length} live variants (${live.join(', ') || 'none'}), not only "${variant}" - the user picks in Studio`;
581
- return (0, sketch_1.decideSketch)({ sketch, decision: { kind: 'pick', variant } });
582
- };
583
858
  const merged = (context) => withSketch(context, ({ product, sketch }) => {
584
- var _a, _b, _c, _d;
859
+ var _a, _b;
585
860
  const { '--note': note, '--variant': flagVariant, '--allowed-by': planRef } = context.args.values;
861
+ const replaceNote = context.args.flags.has('--replace-note');
586
862
  if (context.args.positional.length > 1)
587
863
  return fail(`usage: sketch merge <layer>/<name> [--note <reason>] - it merges the variant the user picked`);
864
+ if (replaceNote && (note !== null && note !== void 0 ? note : '').trim() === '')
865
+ return fail('--replace-note needs --note <the new part note>');
588
866
  if ((flagVariant === undefined) !== (planRef === undefined))
589
867
  return fail('--variant and --allowed-by go together: name the only live variant and the plan that allows the merge');
590
- const allowed = flagVariant !== undefined && planRef !== undefined && ((_a = sketch.decision) === null || _a === void 0 ? void 0 : _a.kind) !== 'pick';
591
- const decidedSketch = allowed ? allowedMergeOf({ sketch, variant: flagVariant }) : sketch;
592
- if (typeof decidedSketch === 'string')
593
- return fail(decidedSketch);
594
- const result = (0, merge_1.mergeSketch)({
868
+ const by = (_a = (0, cli_args_1.authorOf)(context.args)) !== null && _a !== void 0 ? _a : undefined;
869
+ const allowed = flagVariant !== undefined && planRef !== undefined && ((_b = sketch.decision) === null || _b === void 0 ? void 0 : _b.kind) !== 'pick'
870
+ ? { variant: flagVariant, planRef }
871
+ : undefined;
872
+ const result = (0, merge_step_1.mergeAndRecord)({
595
873
  target: context.target,
596
874
  config: context.config,
597
875
  product,
598
- sketch: decidedSketch,
876
+ sketch,
599
877
  note,
600
- author: (_b = (0, cli_args_1.authorOf)(context.args)) !== null && _b !== void 0 ? _b : undefined,
878
+ replaceNote,
879
+ by,
880
+ allowed,
601
881
  });
602
- if (!Array.isArray(result))
603
- return fail(result.reason);
604
- if (allowed)
605
- for (const part of sketch.targets)
606
- (0, merged_parts_1.recordAllowedMerge)({ product, part, by: (_c = (0, cli_args_1.authorOf)(context.args)) !== null && _c !== void 0 ? _c : 'user', planRef: planRef.trim() });
607
- const variant = ((_d = decidedSketch.decision) === null || _d === void 0 ? void 0 : _d.kind) === 'pick' ? decidedSketch.decision.variant : '';
608
- console.log(`merged ${sketch.target} variant ${variant} into ${product.name}: ${result.join(', ')}`);
882
+ if (typeof result === 'string')
883
+ return fail(result);
884
+ console.log(`merged ${sketch.target} variant ${result.variant} into ${product.name}: ${result.parts.join(', ')}`);
609
885
  return 0;
610
886
  });
611
887
  const discarded = (context) => withSketch(context, ({ sketch }) => {
@@ -619,27 +895,37 @@ const discarded = (context) => withSketch(context, ({ sketch }) => {
619
895
  const verdictOriginOf = (by, of) => of && of !== by ? ` (reason by the ${of})` : '';
620
896
  /** The verdicts a variant had, oldest first, and whether it is rejected now. */
621
897
  const verdictLinesOf = (sketch, variant) => {
622
- var _a, _b;
898
+ var _a, _b, _c;
623
899
  const history = (_b = (_a = sketch.rejections) === null || _a === void 0 ? void 0 : _a[variant]) !== null && _b !== void 0 ? _b : [];
624
- const lines = history.flatMap((rejection) => [
625
- ` rejected by the ${rejection.by} at ${rejection.decidedAt}${verdictOriginOf(rejection.by, rejection.reasonBy)}${rejection.reason ? `: ${rejection.reason}` : ''}`,
626
- ...(rejection.reopened
627
- ? [
628
- ` reopened by the ${rejection.reopened.by} at ${rejection.reopened.decidedAt}${rejection.reopened.reason ? `: ${rejection.reopened.reason}` : ''}`,
629
- ]
630
- : []),
631
- ]);
632
- return [`${sketch.target} variant ${variant}: ${(0, sketch_1.rejectionOf)(sketch, variant) ? 'rejected' : 'live'}`, ...lines];
900
+ const lines = history.flatMap((rejection) => {
901
+ var _a;
902
+ return [
903
+ ` ${rejection.status === 'withdrawn' ? `withdrawn by ${(_a = rejection.withdrawnBy) !== null && _a !== void 0 ? _a : 'the agent'}` : `rejected by the ${rejection.by}`} at ${rejection.decidedAt}${verdictOriginOf(rejection.by, rejection.reasonBy)}${rejection.reason ? `: ${rejection.reason}` : ''}`,
904
+ ...(rejection.reopened
905
+ ? [
906
+ ` reopened by the ${rejection.reopened.by} at ${rejection.reopened.decidedAt}${rejection.reopened.reason ? `: ${rejection.reopened.reason}` : ''}`,
907
+ ]
908
+ : []),
909
+ ];
910
+ });
911
+ return [
912
+ `${sketch.target} variant ${variant}: ${(0, sketch_1.rejectionOf)(sketch, variant) ? (((_c = (0, sketch_1.rejectionOf)(sketch, variant)) === null || _c === void 0 ? void 0 : _c.status) === 'withdrawn' ? 'withdrawn' : 'rejected') : 'live'}`,
913
+ ...lines,
914
+ ];
633
915
  };
634
916
  exports.verdictLinesOf = verdictLinesOf;
635
917
  const judged = (kind) => (context) => withSketch(context, ({ sketch }) => {
636
- var _a;
918
+ var _a, _b;
637
919
  const { positional, values } = context.args;
638
920
  const variant = values['--variant'];
639
921
  const reason = ((_a = values['--reason']) === null || _a === void 0 ? void 0 : _a.trim()) || undefined;
640
- const by = (0, cli_args_1.authorOf)(context.args) === 'designer' ? 'designer' : 'agent';
922
+ const author = (_b = (0, cli_args_1.authorOf)(context.args)) !== null && _b !== void 0 ? _b : '';
923
+ const by = author === 'designer' ? 'designer' : 'agent';
641
924
  if (positional.length !== 1 || !variant)
642
925
  return fail(`usage: sketch ${kind} <layer>/<name> --variant <key> [--reason <text>] --by <model id | designer> [--product <name>]`);
926
+ const invalid = (0, cli_args_1.verdictByProblemOf)(author);
927
+ if (invalid)
928
+ return fail(invalid);
643
929
  const decision = kind === 'reject' && reason && (0, sketch_1.rejectionOf)(sketch, variant)
644
930
  ? { kind: 'reason', variant, reason, by }
645
931
  : Object.assign(Object.assign({ kind, variant }, (reason ? { reason } : {})), { by });
@@ -649,10 +935,43 @@ const judged = (kind) => (context) => withSketch(context, ({ sketch }) => {
649
935
  (0, exports.verdictLinesOf)(decided, variant).forEach((line) => console.log(line));
650
936
  return 0;
651
937
  });
938
+ const withdrawn = (context) => {
939
+ const found = productAndSketchOf(context);
940
+ if (typeof found === 'string')
941
+ return fail(found);
942
+ return withdrawnVariant(context, found);
943
+ };
944
+ const withdrawnVariant = (context_1, _a) => __awaiter(void 0, [context_1, _a], void 0, function* (context, { product, sketch }) {
945
+ var _b;
946
+ const { positional, values } = context.args;
947
+ const variant = values['--variant'];
948
+ const by = (_b = (0, cli_args_1.authorOf)(context.args)) !== null && _b !== void 0 ? _b : '';
949
+ if (positional.length !== 1 || !variant)
950
+ return fail('usage: sketch withdraw <layer>/<name> --variant <key> --by <model id> [--product <name>]');
951
+ if (by === 'designer')
952
+ return fail('sketch withdraw is for the agent that drew the variant: --by must be a model id, not designer');
953
+ const invalid = (0, cli_args_1.verdictByProblemOf)(by);
954
+ if (invalid)
955
+ return fail(invalid);
956
+ if (!sketch.variants.includes(variant))
957
+ return fail(`${sketch.target} has no variant "${variant}" - it has ${sketch.variants.join(', ')}`);
958
+ if (!(0, sketch_1.authorsOf)(sketch, variant).includes(by))
959
+ return fail(`${sketch.target} variant ${variant} was not drawn by ${by} - only the agent that drew it withdraws it`);
960
+ const identical = yield (0, ready_shots_1.identicalRenders)({ target: context.target, config: context.config, product, sketch });
961
+ const twin = identical.find((render) => render.variant === variant && render.sibling !== null);
962
+ if (!twin)
963
+ return fail(`${sketch.target} variant ${variant} does not draw the same pixels as a sibling variant in its first changed state - redraw it or ask for a reject`);
964
+ const result = (0, sketch_1.withdrawVariant)({ sketch, variant, by, reason: `identisch mit ${twin.sibling}` });
965
+ if (typeof result === 'string')
966
+ return fail(result);
967
+ console.log(`withdrew ${sketch.target} variant ${variant} (identisch mit ${twin.sibling})`);
968
+ return 0;
969
+ });
652
970
  const COMMANDS = {
653
971
  new: created,
654
972
  variant: varied,
655
973
  round: roundEdited,
974
+ note: noteEdited,
656
975
  list: listed,
657
976
  report: reported,
658
977
  ready: readied,
@@ -663,34 +982,31 @@ const COMMANDS = {
663
982
  rebase: rebased,
664
983
  merge: merged,
665
984
  discard: discarded,
985
+ target: targetAdded,
666
986
  reject: judged('reject'),
667
987
  reopen: judged('reopen'),
988
+ withdraw: withdrawn,
989
+ };
990
+ /** The value flags and switches the usage line of a sketch command names. */
991
+ const flagsOf = (command) => {
992
+ var _a;
993
+ const line = (_a = exports.SKETCH_USAGE.find((usage) => usage.startsWith(`sketch ${command} `))) !== null && _a !== void 0 ? _a : '';
994
+ const named = [...line.matchAll(/(--[a-z-]+)( (?=[<a-z0-9]))?/gu)];
995
+ const unique = (flags) => [...new Set(flags)];
996
+ return {
997
+ values: unique(named.filter(([, , value]) => value).map(([, flag]) => flag !== null && flag !== void 0 ? flag : '')),
998
+ switches: unique(named.filter(([, , value]) => !value).map(([, flag]) => flag !== null && flag !== void 0 ? flag : '')),
999
+ };
668
1000
  };
669
1001
  /**
670
1002
  * `et design sketch <command> …` opens, adds variants to, reports on, readies, checks, previews, rebases, merges and
671
- * discards sketches, and rejects and reopens their variants.
1003
+ * discards sketches, and rejects, reopens and withdraws their variants.
672
1004
  */
673
1005
  const designSketch = (options) => {
674
1006
  const { target, argv, invocation } = options;
675
1007
  const [command = '', ...rest] = argv;
676
1008
  const run = COMMANDS[command];
677
- const args = (0, cli_args_1.argsOf)(rest, [
678
- '--product',
679
- '--variants',
680
- '--note',
681
- '--variant',
682
- '--by',
683
- '--from',
684
- '--round',
685
- '--round-note',
686
- '--title',
687
- '--like',
688
- '--drops',
689
- '--variant-note',
690
- '--reason',
691
- '--allowed-by',
692
- '--until',
693
- ]);
1009
+ const args = (0, cli_args_1.argsOf)(rest, flagsOf(command));
694
1010
  const unauthored = typeof args !== 'string' && WRITES.has(command) && (0, cli_args_1.authorOf)(args) === null;
695
1011
  if (!run || typeof args === 'string' || unauthored) {
696
1012
  if (typeof args === 'string')
@@ -705,7 +1021,7 @@ const designSketch = (options) => {
705
1021
  const config = (0, cli_args_1.configOf)(target);
706
1022
  if (typeof config === 'string')
707
1023
  return fail(config);
708
- return run({ target, config, args });
1024
+ return run({ target, config, args, invocation });
709
1025
  };
710
1026
  exports.designSketch = designSketch;
711
1027
  //# sourceMappingURL=sketch-command.js.map