@ethlete/cli 3.0.0-next.21 → 3.0.0-next.23

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 (340) hide show
  1. package/CHANGELOG.md +198 -0
  2. package/design/assets.d.ts +9 -0
  3. package/design/define-call.ts +20 -11
  4. package/design/define-part.ts +102 -0
  5. package/design/embed-page.ts +70 -0
  6. package/design/interaction-rows.ts +32 -0
  7. package/design/mark-part.ts +66 -0
  8. package/design/svg-asset.ts +36 -0
  9. package/design/systems/config.json +10 -0
  10. package/design/systems/ethlete-components/components/button/button.ts +18 -0
  11. package/design/web/env.d.ts +20 -0
  12. package/design/web/frame.ts +173 -41
  13. package/design/wireframe-kit.ts +386 -0
  14. package/package.json +4 -2
  15. package/playwright/failure-reporter.d.ts +2 -0
  16. package/playwright/failure-reporter.js +1 -0
  17. package/src/index.js.map +1 -1
  18. package/src/lib/api/api-command.js.map +1 -1
  19. package/src/lib/api/api-context.js.map +1 -1
  20. package/src/lib/api/api-state.js.map +1 -1
  21. package/src/lib/api/auth-hint.js.map +1 -1
  22. package/src/lib/api/clear.js.map +1 -1
  23. package/src/lib/api/clone.js.map +1 -1
  24. package/src/lib/api/compose.js.map +1 -1
  25. package/src/lib/api/definition.js.map +1 -1
  26. package/src/lib/api/doctor.js.map +1 -1
  27. package/src/lib/api/fingerprint.js.map +1 -1
  28. package/src/lib/api/git.js.map +1 -1
  29. package/src/lib/api/help.js.map +1 -1
  30. package/src/lib/api/index.js.map +1 -1
  31. package/src/lib/api/load-definitions.js.map +1 -1
  32. package/src/lib/api/lock.js.map +1 -1
  33. package/src/lib/api/parse-argv.js.map +1 -1
  34. package/src/lib/api/ports.js.map +1 -1
  35. package/src/lib/api/resolve-checkout.js.map +1 -1
  36. package/src/lib/api/run-locked.js.map +1 -1
  37. package/src/lib/api/run-ready.js.map +1 -1
  38. package/src/lib/api/run-snapshot.js.map +1 -1
  39. package/src/lib/api/run-status.js.map +1 -1
  40. package/src/lib/api/run.js.map +1 -1
  41. package/src/lib/api/seeds.js.map +1 -1
  42. package/src/lib/api/setup.js.map +1 -1
  43. package/src/lib/api/snapshot.js.map +1 -1
  44. package/src/lib/api/state.js.map +1 -1
  45. package/src/lib/api/suggest.js.map +1 -1
  46. package/src/lib/api/validate-definition.js.map +1 -1
  47. package/src/lib/auth/auth-command.js.map +1 -1
  48. package/src/lib/auth/composer-auth.js.map +1 -1
  49. package/src/lib/auth/composer-repositories.js.map +1 -1
  50. package/src/lib/auth/gitlab-token.js.map +1 -1
  51. package/src/lib/auth/index.js.map +1 -1
  52. package/src/lib/config/diagnose.js.map +1 -1
  53. package/src/lib/config/index.js.map +1 -1
  54. package/src/lib/config/local-config.js.map +1 -1
  55. package/src/lib/design/asset-shot.d.ts +26 -0
  56. package/src/lib/design/asset-shot.js +191 -0
  57. package/src/lib/design/asset-shot.js.map +1 -0
  58. package/src/lib/design/browser.js.map +1 -1
  59. package/src/lib/design/calls-tsconfig.d.ts +14 -1
  60. package/src/lib/design/calls-tsconfig.js +23 -18
  61. package/src/lib/design/calls-tsconfig.js.map +1 -1
  62. package/src/lib/design/calls.d.ts +28 -0
  63. package/src/lib/design/calls.js +58 -0
  64. package/src/lib/design/calls.js.map +1 -0
  65. package/src/lib/design/changed-parts.d.ts +51 -0
  66. package/src/lib/design/changed-parts.js +103 -0
  67. package/src/lib/design/changed-parts.js.map +1 -0
  68. package/src/lib/design/check.js +53 -54
  69. package/src/lib/design/check.js.map +1 -1
  70. package/src/lib/design/contact-sheet.d.ts +86 -0
  71. package/src/lib/design/contact-sheet.js +197 -0
  72. package/src/lib/design/contact-sheet.js.map +1 -0
  73. package/src/lib/design/design-command.js +167 -6
  74. package/src/lib/design/design-command.js.map +1 -1
  75. package/src/lib/design/force-interactions.d.ts +13 -0
  76. package/src/lib/design/force-interactions.js +75 -0
  77. package/src/lib/design/force-interactions.js.map +1 -0
  78. package/src/lib/design/inbox-command.d.ts +21 -0
  79. package/src/lib/design/inbox-command.js +156 -0
  80. package/src/lib/design/inbox-command.js.map +1 -0
  81. package/src/lib/design/index.js.map +1 -1
  82. package/src/lib/design/json-layout.d.ts +5 -0
  83. package/src/lib/design/json-layout.js +41 -0
  84. package/src/lib/design/json-layout.js.map +1 -0
  85. package/src/lib/design/legacy.d.ts +7 -0
  86. package/src/lib/design/legacy.js +23 -8
  87. package/src/lib/design/legacy.js.map +1 -1
  88. package/src/lib/design/merge-compare.d.ts +57 -0
  89. package/src/lib/design/merge-compare.js +80 -0
  90. package/src/lib/design/merge-compare.js.map +1 -0
  91. package/src/lib/design/missing-package.js.map +1 -1
  92. package/src/lib/design/new-call.js.map +1 -1
  93. package/src/lib/design/part-marks.d.ts +12 -0
  94. package/src/lib/design/part-marks.js +38 -0
  95. package/src/lib/design/part-marks.js.map +1 -0
  96. package/src/lib/design/paths.d.ts +35 -2
  97. package/src/lib/design/paths.js +62 -4
  98. package/src/lib/design/paths.js.map +1 -1
  99. package/src/lib/design/product-command.d.ts +38 -0
  100. package/src/lib/design/product-command.js +158 -0
  101. package/src/lib/design/product-command.js.map +1 -0
  102. package/src/lib/design/ready-shots.d.ts +13 -0
  103. package/src/lib/design/ready-shots.js +55 -0
  104. package/src/lib/design/ready-shots.js.map +1 -0
  105. package/src/lib/design/render-fields.js.map +1 -1
  106. package/src/lib/design/render-packages.js.map +1 -1
  107. package/src/lib/design/render-worker.js.map +1 -1
  108. package/src/lib/design/render.d.ts +11 -2
  109. package/src/lib/design/render.js +60 -15
  110. package/src/lib/design/render.js.map +1 -1
  111. package/src/lib/design/serve.d.ts +17 -0
  112. package/src/lib/design/serve.js +487 -103
  113. package/src/lib/design/serve.js.map +1 -1
  114. package/src/lib/design/shot-command.d.ts +100 -0
  115. package/src/lib/design/shot-command.js +453 -0
  116. package/src/lib/design/shot-command.js.map +1 -0
  117. package/src/lib/design/shot.d.ts +97 -0
  118. package/src/lib/design/shot.js +346 -0
  119. package/src/lib/design/shot.js.map +1 -0
  120. package/src/lib/design/sketch-at.d.ts +16 -0
  121. package/src/lib/design/sketch-at.js +34 -0
  122. package/src/lib/design/sketch-at.js.map +1 -0
  123. package/src/lib/design/sketch-command.d.ts +15 -0
  124. package/src/lib/design/sketch-command.js +618 -0
  125. package/src/lib/design/sketch-command.js.map +1 -0
  126. package/src/lib/design/ssr-shims.js.map +1 -1
  127. package/src/lib/design/stamp.js.map +1 -1
  128. package/src/lib/design/status.d.ts +2 -2
  129. package/src/lib/design/status.js +2 -2
  130. package/src/lib/design/status.js.map +1 -1
  131. package/src/lib/design/studio-api.d.ts +112 -0
  132. package/src/lib/design/studio-api.js +489 -0
  133. package/src/lib/design/studio-api.js.map +1 -0
  134. package/src/lib/design/system/accept-command.d.ts +7 -0
  135. package/src/lib/design/system/accept-command.js +55 -0
  136. package/src/lib/design/system/accept-command.js.map +1 -0
  137. package/src/lib/design/system/assets.d.ts +34 -0
  138. package/src/lib/design/system/assets.js +64 -0
  139. package/src/lib/design/system/assets.js.map +1 -0
  140. package/src/lib/design/system/base.d.ts +33 -0
  141. package/src/lib/design/system/base.js +49 -0
  142. package/src/lib/design/system/base.js.map +1 -0
  143. package/src/lib/design/system/check-system.d.ts +23 -0
  144. package/src/lib/design/system/check-system.js +151 -0
  145. package/src/lib/design/system/check-system.js.map +1 -0
  146. package/src/lib/design/system/colour.d.ts +2 -0
  147. package/src/lib/design/system/colour.js +9 -0
  148. package/src/lib/design/system/colour.js.map +1 -0
  149. package/src/lib/design/system/comments/comment.d.ts +196 -0
  150. package/src/lib/design/system/comments/comment.js +332 -0
  151. package/src/lib/design/system/comments/comment.js.map +1 -0
  152. package/src/lib/design/system/comments/complete.d.ts +15 -0
  153. package/src/lib/design/system/comments/complete.js +63 -0
  154. package/src/lib/design/system/comments/complete.js.map +1 -0
  155. package/src/lib/design/system/comments/inbox.d.ts +49 -0
  156. package/src/lib/design/system/comments/inbox.js +100 -0
  157. package/src/lib/design/system/comments/inbox.js.map +1 -0
  158. package/src/lib/design/system/css-source.d.ts +12 -0
  159. package/src/lib/design/system/css-source.js +39 -0
  160. package/src/lib/design/system/css-source.js.map +1 -0
  161. package/src/lib/design/system/flows/flow.d.ts +66 -0
  162. package/src/lib/design/system/flows/flow.js +157 -0
  163. package/src/lib/design/system/flows/flow.js.map +1 -0
  164. package/src/lib/design/system/imports.d.ts +70 -0
  165. package/src/lib/design/system/imports.js +159 -0
  166. package/src/lib/design/system/imports.js.map +1 -0
  167. package/src/lib/design/system/kit.d.ts +4 -0
  168. package/src/lib/design/system/kit.js +51 -0
  169. package/src/lib/design/system/kit.js.map +1 -0
  170. package/src/lib/design/system/layers.d.ts +9 -0
  171. package/src/lib/design/system/layers.js +16 -0
  172. package/src/lib/design/system/layers.js.map +1 -0
  173. package/src/lib/design/system/list-system.d.ts +104 -0
  174. package/src/lib/design/system/list-system.js +212 -0
  175. package/src/lib/design/system/list-system.js.map +1 -0
  176. package/src/lib/design/system/notes/note.d.ts +53 -0
  177. package/src/lib/design/system/notes/note.js +116 -0
  178. package/src/lib/design/system/notes/note.js.map +1 -0
  179. package/src/lib/design/system/part-command.d.ts +7 -0
  180. package/src/lib/design/system/part-command.js +134 -0
  181. package/src/lib/design/system/part-command.js.map +1 -0
  182. package/src/lib/design/system/problem.d.ts +5 -0
  183. package/src/lib/design/system/problem.js +3 -0
  184. package/src/lib/design/system/problem.js.map +1 -0
  185. package/src/lib/design/system/product.d.ts +18 -0
  186. package/src/lib/design/system/product.js +35 -0
  187. package/src/lib/design/system/product.js.map +1 -0
  188. package/src/lib/design/system/render-check.d.ts +45 -0
  189. package/src/lib/design/system/render-check.js +427 -0
  190. package/src/lib/design/system/render-check.js.map +1 -0
  191. package/src/lib/design/system/resolve-product.d.ts +32 -0
  192. package/src/lib/design/system/resolve-product.js +62 -0
  193. package/src/lib/design/system/resolve-product.js.map +1 -0
  194. package/src/lib/design/system/rules/component-copy.d.ts +7 -0
  195. package/src/lib/design/system/rules/component-copy.js +53 -0
  196. package/src/lib/design/system/rules/component-copy.js.map +1 -0
  197. package/src/lib/design/system/rules/flow.d.ts +8 -0
  198. package/src/lib/design/system/rules/flow.js +60 -0
  199. package/src/lib/design/system/rules/flow.js.map +1 -0
  200. package/src/lib/design/system/rules/hard-coded-colour.d.ts +7 -0
  201. package/src/lib/design/system/rules/hard-coded-colour.js +27 -0
  202. package/src/lib/design/system/rules/hard-coded-colour.js.map +1 -0
  203. package/src/lib/design/system/rules/interactions.d.ts +4 -0
  204. package/src/lib/design/system/rules/interactions.js +16 -0
  205. package/src/lib/design/system/rules/interactions.js.map +1 -0
  206. package/src/lib/design/system/rules/kit-outside-pages.d.ts +4 -0
  207. package/src/lib/design/system/rules/kit-outside-pages.js +14 -0
  208. package/src/lib/design/system/rules/kit-outside-pages.js.map +1 -0
  209. package/src/lib/design/system/rules/motion.d.ts +4 -0
  210. package/src/lib/design/system/rules/motion.js +13 -0
  211. package/src/lib/design/system/rules/motion.js.map +1 -0
  212. package/src/lib/design/system/rules/stale-comment.d.ts +8 -0
  213. package/src/lib/design/system/rules/stale-comment.js +51 -0
  214. package/src/lib/design/system/rules/stale-comment.js.map +1 -0
  215. package/src/lib/design/system/rules/stale-replace.d.ts +4 -0
  216. package/src/lib/design/system/rules/stale-replace.js +65 -0
  217. package/src/lib/design/system/rules/stale-replace.js.map +1 -0
  218. package/src/lib/design/system/rules/svg-asset.d.ts +6 -0
  219. package/src/lib/design/system/rules/svg-asset.js +30 -0
  220. package/src/lib/design/system/rules/svg-asset.js.map +1 -0
  221. package/src/lib/design/system/rules/token-selectors.d.ts +3 -0
  222. package/src/lib/design/system/rules/token-selectors.js +87 -0
  223. package/src/lib/design/system/rules/token-selectors.js.map +1 -0
  224. package/src/lib/design/system/rules/undefined-token.d.ts +8 -0
  225. package/src/lib/design/system/rules/undefined-token.js +103 -0
  226. package/src/lib/design/system/rules/undefined-token.js.map +1 -0
  227. package/src/lib/design/system/rules/unused-shared-export.d.ts +18 -0
  228. package/src/lib/design/system/rules/unused-shared-export.js +60 -0
  229. package/src/lib/design/system/rules/unused-shared-export.js.map +1 -0
  230. package/src/lib/design/system/rules/upward-dependency.d.ts +4 -0
  231. package/src/lib/design/system/rules/upward-dependency.js +17 -0
  232. package/src/lib/design/system/rules/upward-dependency.js.map +1 -0
  233. package/src/lib/design/system/rules/widths.d.ts +4 -0
  234. package/src/lib/design/system/rules/widths.js +14 -0
  235. package/src/lib/design/system/rules/widths.js.map +1 -0
  236. package/src/lib/design/system/sketch/baseline.d.ts +38 -0
  237. package/src/lib/design/system/sketch/baseline.js +66 -0
  238. package/src/lib/design/system/sketch/baseline.js.map +1 -0
  239. package/src/lib/design/system/sketch/check-format.d.ts +17 -0
  240. package/src/lib/design/system/sketch/check-format.js +56 -0
  241. package/src/lib/design/system/sketch/check-format.js.map +1 -0
  242. package/src/lib/design/system/sketch/check-sketches.d.ts +38 -0
  243. package/src/lib/design/system/sketch/check-sketches.js +104 -0
  244. package/src/lib/design/system/sketch/check-sketches.js.map +1 -0
  245. package/src/lib/design/system/sketch/cli-args.d.ts +26 -0
  246. package/src/lib/design/system/sketch/cli-args.js +63 -0
  247. package/src/lib/design/system/sketch/cli-args.js.map +1 -0
  248. package/src/lib/design/system/sketch/duplicate-class.d.ts +14 -0
  249. package/src/lib/design/system/sketch/duplicate-class.js +57 -0
  250. package/src/lib/design/system/sketch/duplicate-class.js.map +1 -0
  251. package/src/lib/design/system/sketch/merge-preview.d.ts +15 -0
  252. package/src/lib/design/system/sketch/merge-preview.js +43 -0
  253. package/src/lib/design/system/sketch/merge-preview.js.map +1 -0
  254. package/src/lib/design/system/sketch/merge-shared.d.ts +25 -0
  255. package/src/lib/design/system/sketch/merge-shared.js +53 -0
  256. package/src/lib/design/system/sketch/merge-shared.js.map +1 -0
  257. package/src/lib/design/system/sketch/merge.d.ts +31 -0
  258. package/src/lib/design/system/sketch/merge.js +148 -0
  259. package/src/lib/design/system/sketch/merge.js.map +1 -0
  260. package/src/lib/design/system/sketch/merged-parts.d.ts +59 -0
  261. package/src/lib/design/system/sketch/merged-parts.js +134 -0
  262. package/src/lib/design/system/sketch/merged-parts.js.map +1 -0
  263. package/src/lib/design/system/sketch/no-visible-change.d.ts +15 -0
  264. package/src/lib/design/system/sketch/no-visible-change.js +70 -0
  265. package/src/lib/design/system/sketch/no-visible-change.js.map +1 -0
  266. package/src/lib/design/system/sketch/overlay.d.ts +20 -0
  267. package/src/lib/design/system/sketch/overlay.js +38 -0
  268. package/src/lib/design/system/sketch/overlay.js.map +1 -0
  269. package/src/lib/design/system/sketch/part-definition.d.ts +31 -0
  270. package/src/lib/design/system/sketch/part-definition.js +157 -0
  271. package/src/lib/design/system/sketch/part-definition.js.map +1 -0
  272. package/src/lib/design/system/sketch/shared-class.d.ts +9 -0
  273. package/src/lib/design/system/sketch/shared-class.js +65 -0
  274. package/src/lib/design/system/sketch/shared-class.js.map +1 -0
  275. package/src/lib/design/system/sketch/sketch.d.ts +267 -0
  276. package/src/lib/design/system/sketch/sketch.js +568 -0
  277. package/src/lib/design/system/sketch/sketch.js.map +1 -0
  278. package/src/lib/design/system/sketch/unchanged-states.d.ts +23 -0
  279. package/src/lib/design/system/sketch/unchanged-states.js +144 -0
  280. package/src/lib/design/system/sketch/unchanged-states.js.map +1 -0
  281. package/src/lib/design/system/sketch/unused-files.d.ts +10 -0
  282. package/src/lib/design/system/sketch/unused-files.js +56 -0
  283. package/src/lib/design/system/sketch/unused-files.js.map +1 -0
  284. package/src/lib/design/system/system-command.d.ts +9 -0
  285. package/src/lib/design/system/system-command.js +56 -0
  286. package/src/lib/design/system/system-command.js.map +1 -0
  287. package/src/lib/design/system/system-modules.d.ts +58 -0
  288. package/src/lib/design/system/system-modules.js +189 -0
  289. package/src/lib/design/system/system-modules.js.map +1 -0
  290. package/src/lib/design/system/system-tsconfig.d.ts +26 -0
  291. package/src/lib/design/system/system-tsconfig.js +68 -0
  292. package/src/lib/design/system/system-tsconfig.js.map +1 -0
  293. package/src/lib/design/system/ts-source.d.ts +13 -0
  294. package/src/lib/design/system/ts-source.js +108 -0
  295. package/src/lib/design/system/ts-source.js.map +1 -0
  296. package/src/lib/design/system-use.js.map +1 -1
  297. package/src/lib/design/thumb.d.ts +48 -4
  298. package/src/lib/design/thumb.js +127 -37
  299. package/src/lib/design/thumb.js.map +1 -1
  300. package/src/lib/design/typecheck.d.ts +29 -0
  301. package/src/lib/design/typecheck.js +77 -0
  302. package/src/lib/design/typecheck.js.map +1 -0
  303. package/src/lib/design/variant-diff.d.ts +64 -0
  304. package/src/lib/design/variant-diff.js +92 -0
  305. package/src/lib/design/variant-diff.js.map +1 -0
  306. package/src/lib/design/vite-paths.d.ts +2 -0
  307. package/src/lib/design/vite-paths.js +10 -1
  308. package/src/lib/design/vite-paths.js.map +1 -1
  309. package/src/lib/doctor/doctor-command.js.map +1 -1
  310. package/src/lib/doctor/index.js.map +1 -1
  311. package/src/lib/index.js.map +1 -1
  312. package/src/lib/invocation.js +6 -2
  313. package/src/lib/invocation.js.map +1 -1
  314. package/src/lib/playwright/failure-reporter.d.ts +35 -0
  315. package/src/lib/playwright/failure-reporter.js +66 -0
  316. package/src/lib/playwright/failure-reporter.js.map +1 -0
  317. package/src/lib/release.js.map +1 -1
  318. package/src/lib/update/agent-rules-sync.js.map +1 -1
  319. package/src/lib/update/agent-setup.js.map +1 -1
  320. package/src/lib/update/ai.js.map +1 -1
  321. package/src/lib/update/args.js.map +1 -1
  322. package/src/lib/update/available-migrations.js.map +1 -1
  323. package/src/lib/update/commits.js.map +1 -1
  324. package/src/lib/update/gitignore.js.map +1 -1
  325. package/src/lib/update/index.js.map +1 -1
  326. package/src/lib/update/migration-manifest.js.map +1 -1
  327. package/src/lib/update/migration-record.js.map +1 -1
  328. package/src/lib/update/migrations-command.js.map +1 -1
  329. package/src/lib/update/package-manager.d.ts +1 -1
  330. package/src/lib/update/package-manager.js.map +1 -1
  331. package/src/lib/update/packages.js.map +1 -1
  332. package/src/lib/update/pending.js.map +1 -1
  333. package/src/lib/update/plan.js.map +1 -1
  334. package/src/lib/update/registry.js.map +1 -1
  335. package/src/lib/update/run-migrations.js.map +1 -1
  336. package/src/lib/update/scan.js.map +1 -1
  337. package/src/lib/update/semver.js.map +1 -1
  338. package/src/lib/update/tasks.js.map +1 -1
  339. package/src/lib/update/update-command.js.map +1 -1
  340. package/src/lib/utils.js.map +1 -1
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.importedAssetsOf = exports.filesBelow = exports.assetImportsOf = exports.cssAssetPathsOf = exports.ASSET_URL = exports.assetFileOf = exports.assetDirsOf = exports.assetPathOf = exports.ASSETS_FOLDER = exports.ASSETS_PREFIX = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const ts_source_1 = require("./ts-source");
7
+ exports.ASSETS_PREFIX = '@assets/';
8
+ exports.ASSETS_FOLDER = 'assets';
9
+ /** The `@assets/` path of a specifier without its query, or `null` for any other import. */
10
+ const assetPathOf = (specifier) => { var _a; return specifier.startsWith(exports.ASSETS_PREFIX) ? ((_a = specifier.slice(exports.ASSETS_PREFIX.length).split('?')[0]) !== null && _a !== void 0 ? _a : '') : null; };
11
+ exports.assetPathOf = assetPathOf;
12
+ /** The folders `@assets/` looks in, first match wins: a sketch variant's own, the product's, its base product's. */
13
+ const assetDirsOf = (product) => [
14
+ ...(product.assetsDir ? [product.assetsDir] : []),
15
+ (0, path_1.resolve)(product.dir, exports.ASSETS_FOLDER),
16
+ ...(product.base ? [(0, path_1.resolve)(product.base.dir, exports.ASSETS_FOLDER)] : []),
17
+ ];
18
+ exports.assetDirsOf = assetDirsOf;
19
+ const assetFileOf = (options) => {
20
+ for (const dir of (0, exports.assetDirsOf)(options.product)) {
21
+ const file = (0, path_1.resolve)(dir, options.path);
22
+ if (file.startsWith(`${dir}${path_1.sep}`) && (0, fs_1.existsSync)(file) && (0, fs_1.statSync)(file).isFile())
23
+ return file;
24
+ }
25
+ return null;
26
+ };
27
+ exports.assetFileOf = assetFileOf;
28
+ /** A `url(@assets/<file>)` in a stylesheet; the second group is the file's path, without a query or fragment. */
29
+ exports.ASSET_URL = /url\(\s*(['"]?)@assets\/([^'")?#]+)[^'")]*\1\s*\)/gu;
30
+ const cssAssetPathsOf = (css) => [...css.matchAll(exports.ASSET_URL)].flatMap((match) => { var _a; return (_a = match[2]) !== null && _a !== void 0 ? _a : []; });
31
+ exports.cssAssetPathsOf = cssAssetPathsOf;
32
+ /** The `@assets/` paths a source file imports. */
33
+ const assetImportsOf = (source) => (0, ts_source_1.importsOf)(source).flatMap((specifier) => {
34
+ const path = (0, exports.assetPathOf)(specifier);
35
+ return path === null ? [] : [path];
36
+ });
37
+ exports.assetImportsOf = assetImportsOf;
38
+ /** Every file in a folder and below it, sorted by path, `[]` when it does not exist. */
39
+ const filesBelow = (dir) => (0, fs_1.existsSync)(dir)
40
+ ? (0, fs_1.readdirSync)(dir)
41
+ .sort()
42
+ .flatMap((name) => {
43
+ const path = (0, path_1.resolve)(dir, name);
44
+ return (0, fs_1.statSync)(path).isDirectory() ? (0, exports.filesBelow)(path) : [path];
45
+ })
46
+ : [];
47
+ exports.filesBelow = filesBelow;
48
+ /**
49
+ * The asset files the files of a part folder use, as the product resolves them, sorted by path: the `@assets/`
50
+ * imports of its source files and the `url(@assets/...)` of its stylesheets.
51
+ */
52
+ const importedAssetsOf = (options) => {
53
+ const paths = options.files.flatMap((file) => /\.(?:ts|js|mjs)$/u.test(file)
54
+ ? (0, exports.assetImportsOf)((0, fs_1.readFileSync)(file, 'utf8'))
55
+ : file.endsWith('.css')
56
+ ? (0, exports.cssAssetPathsOf)((0, fs_1.readFileSync)(file, 'utf8'))
57
+ : []);
58
+ return [...new Set(paths)].sort().flatMap((path) => {
59
+ const file = (0, exports.assetFileOf)({ product: options.product, path });
60
+ return file ? [{ path, file }] : [];
61
+ });
62
+ };
63
+ exports.importedAssetsOf = importedAssetsOf;
64
+ //# sourceMappingURL=assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/assets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { DesignProduct } from '../paths';
2
+ import { Problem } from './problem';
3
+ /** A product folder together with its entry in the `config.json` that declares it. */
4
+ export type ProductSource = {
5
+ name: string;
6
+ dir: string;
7
+ config: DesignProduct;
8
+ configFile: string;
9
+ };
10
+ export declare const isBuiltInBase: (base: string) => boolean;
11
+ export declare const baseDirOf: (options: {
12
+ target: string;
13
+ base: string;
14
+ }) => string;
15
+ /**
16
+ * The base a product extends. Its settings come from the `config.json` of the workspace that
17
+ * holds the base folder, under the folder's own name.
18
+ */
19
+ export declare const loadBase: (options: {
20
+ target: string;
21
+ base: string;
22
+ configFile: string;
23
+ }) => {
24
+ base: null;
25
+ problems: {
26
+ rule: string;
27
+ file: string;
28
+ message: string;
29
+ }[];
30
+ } | {
31
+ base: ProductSource;
32
+ problems: Problem[];
33
+ };
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadBase = exports.baseDirOf = exports.isBuiltInBase = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const paths_1 = require("../paths");
7
+ const BUILT_IN_BASES = {
8
+ '@ethlete/components': 'systems/ethlete-components',
9
+ };
10
+ const isBuiltInBase = (base) => base in BUILT_IN_BASES;
11
+ exports.isBuiltInBase = isBuiltInBase;
12
+ const baseDirOf = (options) => {
13
+ const builtIn = BUILT_IN_BASES[options.base];
14
+ return builtIn ? (0, path_1.resolve)((0, paths_1.assetRoot)(), builtIn) : (0, path_1.resolve)(options.target, options.base);
15
+ };
16
+ exports.baseDirOf = baseDirOf;
17
+ const configFileAbove = (dir) => {
18
+ const file = (0, path_1.resolve)(dir, 'config.json');
19
+ if ((0, fs_1.existsSync)(file))
20
+ return file;
21
+ const parent = (0, path_1.dirname)(dir);
22
+ return parent === dir ? null : configFileAbove(parent);
23
+ };
24
+ /**
25
+ * The base a product extends. Its settings come from the `config.json` of the workspace that
26
+ * holds the base folder, under the folder's own name.
27
+ */
28
+ const loadBase = (options) => {
29
+ var _a;
30
+ const { target, base, configFile } = options;
31
+ const dir = (0, exports.baseDirOf)({ target, base });
32
+ const problem = (message) => ({ base: null, problems: [{ rule: 'BASE', file: configFile, message }] });
33
+ if (!(0, fs_1.existsSync)(dir))
34
+ return problem(`base "${base}" is no folder (${dir})`);
35
+ const baseConfigFile = configFileAbove((0, path_1.dirname)(dir));
36
+ if (!baseConfigFile)
37
+ return problem(`base "${base}" lies in no folder with a config.json`);
38
+ const name = (0, path_1.basename)(dir);
39
+ const config = (_a = JSON.parse((0, fs_1.readFileSync)(baseConfigFile, 'utf8')).products) === null || _a === void 0 ? void 0 : _a[name];
40
+ if (!config)
41
+ return problem(`base "${base}": ${baseConfigFile} declares no product "${name}"`);
42
+ if (config.base)
43
+ return problem(`base "${base}" extends "${config.base}", but a base has no base of its own`);
44
+ const source = { name, dir, config, configFile: baseConfigFile };
45
+ const problems = [];
46
+ return { base: source, problems };
47
+ };
48
+ exports.loadBase = loadBase;
49
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/base.ts"],"names":[],"mappings":";;;AAAA,2BAA8C;AAC9C,+BAAkD;AAClD,oCAAkE;AAMlE,MAAM,cAAc,GAA2B;IAC7C,qBAAqB,EAAE,4BAA4B;CACpD,CAAC;AAEK,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,IAAI,cAAc,CAAC;AAAzD,QAAA,aAAa,iBAA4C;AAE/D,MAAM,SAAS,GAAG,CAAC,OAAyC,EAAE,EAAE;IACrE,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C,OAAO,OAAO,CAAC,CAAC,CAAC,IAAA,cAAO,EAAC,IAAA,iBAAS,GAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAA,cAAO,EAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;AACzF,CAAC,CAAC;AAJW,QAAA,SAAS,aAIpB;AAEF,MAAM,eAAe,GAAG,CAAC,GAAW,EAAiB,EAAE;IACrD,MAAM,IAAI,GAAG,IAAA,cAAO,EAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAEzC,IAAI,IAAA,eAAU,EAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAElC,MAAM,MAAM,GAAG,IAAA,cAAO,EAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF;;;GAGG;AACI,MAAM,QAAQ,GAAG,CAAC,OAA6D,EAAE,EAAE;;IACxF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAA,iBAAS,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAE/G,IAAI,CAAC,IAAA,eAAU,EAAC,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC,SAAS,IAAI,mBAAmB,GAAG,GAAG,CAAC,CAAC;IAE7E,MAAM,cAAc,GAAG,eAAe,CAAC,IAAA,cAAO,EAAC,GAAG,CAAC,CAAC,CAAC;IAErD,IAAI,CAAC,cAAc;QAAE,OAAO,OAAO,CAAC,SAAS,IAAI,wCAAwC,CAAC,CAAC;IAE3F,MAAM,IAAI,GAAG,IAAA,eAAQ,EAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAC,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,cAAc,EAAE,MAAM,CAAC,CAAkB,CAAC,QAAQ,0CAAG,IAAI,CAAC,CAAC;IAEnG,IAAI,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC,SAAS,IAAI,MAAM,cAAc,yBAAyB,IAAI,GAAG,CAAC,CAAC;IAC/F,IAAI,MAAM,CAAC,IAAI;QAAE,OAAO,OAAO,CAAC,SAAS,IAAI,cAAc,MAAM,CAAC,IAAI,sCAAsC,CAAC,CAAC;IAE9G,MAAM,MAAM,GAAkB,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;IAChF,MAAM,QAAQ,GAAc,EAAE,CAAC;IAE/B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AACpC,CAAC,CAAC;AArBW,QAAA,QAAQ,YAqBnB"}
@@ -0,0 +1,23 @@
1
+ import { DesignConfig } from '../paths';
2
+ import { Problem } from './problem';
3
+ import { ResolvedProduct } from './resolve-product';
4
+ export declare const ruleLinesOf: (target: string, product: ResolvedProduct) => string[];
5
+ /** Every problem the rules find in a resolved product, its resolution problems first. */
6
+ export declare const ruleProblemsOf: (product: ResolvedProduct) => Problem[];
7
+ type CheckOptions = {
8
+ target: string;
9
+ config: DesignConfig;
10
+ products: string[];
11
+ known?: string[];
12
+ };
13
+ /**
14
+ * Checks the design system of each named product: the rules, then `tsc --noEmit` over its
15
+ * generated tsconfig. Prints one line per problem and `ok` when there is none.
16
+ */
17
+ export declare const checkSystem: (options: CheckOptions) => 0 | 1;
18
+ /**
19
+ * Checks as `checkSystem` does, then draws every state in a headless browser and prints one line per
20
+ * render rule a drawing breaks, and warns of each merged part that changed outside a sketch. Without a browser it prints one skip line and passes on the other checks.
21
+ */
22
+ export declare const checkSystemRendered: (options: CheckOptions) => Promise<0 | 1>;
23
+ export {};
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.checkSystemRendered = exports.checkSystem = exports.ruleProblemsOf = exports.ruleLinesOf = void 0;
13
+ const path_1 = require("path");
14
+ const imports_1 = require("./imports");
15
+ const resolve_product_1 = require("./resolve-product");
16
+ const component_copy_1 = require("./rules/component-copy");
17
+ const render_check_1 = require("./render-check");
18
+ const flow_1 = require("./rules/flow");
19
+ const hard_coded_colour_1 = require("./rules/hard-coded-colour");
20
+ const interactions_1 = require("./rules/interactions");
21
+ const kit_outside_pages_1 = require("./rules/kit-outside-pages");
22
+ const motion_1 = require("./rules/motion");
23
+ const stale_comment_1 = require("./rules/stale-comment");
24
+ const undefined_token_1 = require("./rules/undefined-token");
25
+ const token_selectors_1 = require("./rules/token-selectors");
26
+ const upward_dependency_1 = require("./rules/upward-dependency");
27
+ const svg_asset_1 = require("./rules/svg-asset");
28
+ const stale_replace_1 = require("./rules/stale-replace");
29
+ const unused_shared_export_1 = require("./rules/unused-shared-export");
30
+ const widths_1 = require("./rules/widths");
31
+ const check_sketches_1 = require("./sketch/check-sketches");
32
+ const merged_parts_1 = require("./sketch/merged-parts");
33
+ const sketch_1 = require("./sketch/sketch");
34
+ const system_tsconfig_1 = require("./system-tsconfig");
35
+ const RULES = [
36
+ imports_1.importProblemsOf,
37
+ upward_dependency_1.upwardDependenciesOf,
38
+ hard_coded_colour_1.hardCodedColoursOf,
39
+ undefined_token_1.undefinedTokensOf,
40
+ component_copy_1.componentCopiesOf,
41
+ motion_1.scriptedMotionOf,
42
+ stale_comment_1.staleCommentsOf,
43
+ stale_comment_1.staleNotesOf,
44
+ widths_1.badWidthsOf,
45
+ interactions_1.unknownInteractionsOf,
46
+ kit_outside_pages_1.kitOutsidePagesOf,
47
+ flow_1.flowProblemsOf,
48
+ svg_asset_1.badSvgAssetsOf,
49
+ ];
50
+ const ruleLinesOf = (target, product) => (0, exports.ruleProblemsOf)(product).map((problem) => lineOf(target, problem));
51
+ exports.ruleLinesOf = ruleLinesOf;
52
+ /** Every problem the rules find in a resolved product, its resolution problems first. */
53
+ const ruleProblemsOf = (product) => [
54
+ ...product.problems,
55
+ ...RULES.flatMap((rule) => rule(product)),
56
+ ];
57
+ exports.ruleProblemsOf = ruleProblemsOf;
58
+ const lineOf = (target, problem) => `${problem.rule} ${(0, path_1.relative)(target, problem.file)}: ${problem.message}`;
59
+ const typecheckOpenSketches = (options) => (0, sketch_1.listSketches)({ productDir: options.product.dir, product: options.product.name }).flatMap((sketch) => typeof sketch === 'string'
60
+ ? []
61
+ : sketch.variants.flatMap((variant) => {
62
+ const result = (0, check_sketches_1.typecheckVariant)(Object.assign(Object.assign({}, options), { sketch, variant }));
63
+ return result.kind === 'ok'
64
+ ? []
65
+ : [
66
+ {
67
+ rule: 'TYPE-ERROR',
68
+ file: (0, sketch_1.variantDirOf)(sketch, variant),
69
+ message: `\n${result.kind === 'failed' ? result.output : result.message}`,
70
+ },
71
+ ];
72
+ }));
73
+ const warnChangedOutsideSketch = (product) => {
74
+ for (const part of (0, merged_parts_1.changedOutsideSketchOf)(product))
75
+ console.warn(`WARNING ${product.name} ${part} changed outside a sketch - every change to a merged part goes through a sketch, with one variant when there is no choice`);
76
+ };
77
+ const reportSystem = (options) => {
78
+ var _a;
79
+ const { target, config, products } = options;
80
+ const declared = (_a = config.products) !== null && _a !== void 0 ? _a : {};
81
+ let failed = false;
82
+ const report = (problem) => {
83
+ var _a;
84
+ const line = lineOf(target, problem);
85
+ if ((_a = options.known) === null || _a === void 0 ? void 0 : _a.includes(line)) {
86
+ console.warn(`NOTE (was there before) ${line}`);
87
+ return;
88
+ }
89
+ console.error(line);
90
+ failed = true;
91
+ };
92
+ for (const name of products) {
93
+ const entry = declared[name];
94
+ if (!entry) {
95
+ console.error(`NO PRODUCT "${name}" - config.json declares ${Object.keys(declared).join(', ') || 'none'}.`);
96
+ return 1;
97
+ }
98
+ const product = (0, resolve_product_1.resolveProduct)({ target, name, config: entry });
99
+ if (options.warn)
100
+ warnChangedOutsideSketch(product);
101
+ (0, stale_comment_1.goneSketchCommentWarningsOf)(product).forEach((warning) => console.warn(warning));
102
+ (0, unused_shared_export_1.unusedSharedExportsOf)(product).forEach((problem) => console.warn(`WARNING ${lineOf(target, problem)}`));
103
+ (0, stale_replace_1.staleReplacesOf)(product).forEach((problem) => console.warn(`WARNING ${lineOf(target, problem)}`));
104
+ (0, token_selectors_1.tokenSelectorsOf)(product).forEach((problem) => console.warn(`WARNING ${lineOf(target, problem)}`));
105
+ (0, exports.ruleProblemsOf)(product).forEach(report);
106
+ (0, system_tsconfig_1.writeEditorTsconfig)({ target, product });
107
+ const result = (0, system_tsconfig_1.typecheckProduct)({ target, product });
108
+ if (result.kind === 'unavailable') {
109
+ console.error(result.message);
110
+ return 1;
111
+ }
112
+ if (result.kind === 'failed')
113
+ report({ rule: 'TYPE-ERROR', file: product.dir, message: `\n${result.output}` });
114
+ if (options.warn)
115
+ typecheckOpenSketches({ target, product }).forEach(report);
116
+ }
117
+ return failed ? 1 : 0;
118
+ };
119
+ /**
120
+ * Checks the design system of each named product: the rules, then `tsc --noEmit` over its
121
+ * generated tsconfig. Prints one line per problem and `ok` when there is none.
122
+ */
123
+ const checkSystem = (options) => {
124
+ const code = reportSystem(options);
125
+ if (code === 0)
126
+ console.log('ok');
127
+ return code;
128
+ };
129
+ exports.checkSystem = checkSystem;
130
+ /**
131
+ * Checks as `checkSystem` does, then draws every state in a headless browser and prints one line per
132
+ * render rule a drawing breaks, and warns of each merged part that changed outside a sketch. Without a browser it prints one skip line and passes on the other checks.
133
+ */
134
+ const checkSystemRendered = (options) => __awaiter(void 0, void 0, void 0, function* () {
135
+ const code = reportSystem(Object.assign(Object.assign({}, options), { warn: true }));
136
+ if (code !== 0)
137
+ return code;
138
+ const rendered = yield (0, render_check_1.renderIssuesOf)(Object.assign(Object.assign({}, options), { jobs: options.products.map((product) => ({ product, sketch: null, parts: null })) }));
139
+ if ('unavailable' in rendered)
140
+ console.log(`RENDER CHECK SKIPPED - ${rendered.unavailable}`);
141
+ else {
142
+ rendered.warnings.forEach((issue) => console.warn(`WARNING ${(0, render_check_1.renderIssueLineOf)(issue)}`));
143
+ rendered.issues.forEach((issue) => console.error((0, render_check_1.renderIssueLineOf)(issue)));
144
+ }
145
+ if ('issues' in rendered && rendered.issues.length > 0)
146
+ return 1;
147
+ console.log('ok');
148
+ return 0;
149
+ });
150
+ exports.checkSystemRendered = checkSystemRendered;
151
+ //# sourceMappingURL=check-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-system.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/check-system.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ /** The hex colours and colour functions written in a piece of text. */
2
+ export declare const coloursIn: (text: string) => string[];
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.coloursIn = void 0;
4
+ const HEX = /(?<![&\w/])#(?:[0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{3,4})(?![\w-])/gi;
5
+ const FUNCTION = /(?<![\w-])(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\(/gi;
6
+ /** The hex colours and colour functions written in a piece of text. */
7
+ const coloursIn = (text) => [...text.matchAll(HEX), ...text.matchAll(FUNCTION)].map((match) => match[0]);
8
+ exports.coloursIn = coloursIn;
9
+ //# sourceMappingURL=colour.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colour.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/colour.ts"],"names":[],"mappings":";;;AAAA,MAAM,GAAG,GAAG,kEAAkE,CAAC;AAC/E,MAAM,QAAQ,GAAG,6DAA6D,CAAC;AAE/E,uEAAuE;AAChE,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAA3G,QAAA,SAAS,aAAkG"}
@@ -0,0 +1,196 @@
1
+ import { ResolvedProduct } from '../resolve-product';
2
+ import { Sketch } from '../sketch/sketch';
3
+ /** A point on a frame, in CSS pixels from its top left corner, at the comment's size. */
4
+ export type CommentPoint = {
5
+ x: number;
6
+ y: number;
7
+ };
8
+ /** The size of the frame a comment was made on: a preset name, a width in CSS pixels, or `fitted` to its content. */
9
+ export type CommentSize = string | number;
10
+ export declare const FITTED = "fitted";
11
+ export declare const REST = "rest";
12
+ /**
13
+ * One answer in a comment thread, by the user (from Studio) or by the agent (`et design comment reply`).
14
+ * `author` is the model id of the agent; a reply written before it was recorded has none.
15
+ * `question` marks an agent reply that waits for the user's answer (`--question`).
16
+ */
17
+ export type CommentReply = {
18
+ by: 'user' | 'agent';
19
+ author?: string;
20
+ text: string;
21
+ createdAt: string;
22
+ question?: true;
23
+ };
24
+ /**
25
+ * Who a thread waits on: `agent` when the user spoke last, `question` when the agent's last reply asks the user,
26
+ * `answered` when the agent's last reply asks nothing. An answered thread stays open until the user withdraws it or replies.
27
+ */
28
+ export type ThreadState = 'agent' | 'question' | 'answered';
29
+ /** What answered a thread: `inbox done`, a new sketch round from its variant, or the merge or discard of its sketch. */
30
+ export type CommentAddressReason = 'done' | 'round' | 'merge' | 'discard';
31
+ /**
32
+ * How a thread was answered. It stays open until the user resolves it in Studio, and a reply by the user opens it again.
33
+ * `author` is the model id of the agent; `round` is the key of the round a `round` answer started.
34
+ */
35
+ export type CommentAddressed = {
36
+ by: 'user' | 'agent';
37
+ author?: string;
38
+ reason: CommentAddressReason;
39
+ addressedAt: string;
40
+ note?: string;
41
+ round?: string;
42
+ };
43
+ /** How the user closed a thread in Studio. A comment file without it is open or addressed. */
44
+ export type CommentResolution = {
45
+ by: 'user';
46
+ resolvedAt: string;
47
+ note?: string;
48
+ };
49
+ export type CommentFile = {
50
+ part: string;
51
+ state: string;
52
+ size: CommentSize;
53
+ /** `rest` or one of the part's interactions; a file without it is on `rest`. */
54
+ interaction?: string;
55
+ point?: CommentPoint;
56
+ /** `createdAt` is the sketch's own, so a later sketch on the same target shows none of its comments. */
57
+ sketch?: {
58
+ target: string;
59
+ variant: string;
60
+ createdAt?: string;
61
+ };
62
+ text: string;
63
+ createdAt: string;
64
+ replies?: CommentReply[];
65
+ addressed?: CommentAddressed;
66
+ resolved?: CommentResolution;
67
+ };
68
+ export type DesignComment = CommentFile & {
69
+ id: string;
70
+ product: string;
71
+ file: string;
72
+ interaction: string;
73
+ replies: CommentReply[];
74
+ };
75
+ export declare const commentsDirOf: (productDir: string) => string;
76
+ export declare const isPoint: (value: unknown) => value is CommentPoint;
77
+ export declare const isSize: (value: unknown) => value is CommentSize;
78
+ export declare const isOpenComment: (comment: Pick<CommentFile, "addressed" | "resolved">) => boolean;
79
+ /**
80
+ * The open comment files of a product, oldest first, or every one with `all` (addressed and resolved too); a file
81
+ * that cannot be read answers with its problem.
82
+ */
83
+ export declare const listComments: (options: {
84
+ productDir: string;
85
+ product: string;
86
+ all?: boolean;
87
+ }) => {
88
+ comments: DesignComment[];
89
+ unreadable: {
90
+ file: string;
91
+ problem: string;
92
+ }[];
93
+ };
94
+ /** Why a part key and state name point at nothing in a product, or `null`. A part whose states are not an object literal keeps any state. */
95
+ export declare const goneStateOf: (options: {
96
+ product: ResolvedProduct;
97
+ part: string;
98
+ state: string;
99
+ }) => string | null;
100
+ /** Why a size points at nothing: a preset the product lacks, or a width a part with readable `widths` lacks. */
101
+ export declare const goneSizeOf: (options: {
102
+ product: ResolvedProduct;
103
+ part: string;
104
+ size: CommentSize;
105
+ }) => string | null;
106
+ /** Whether the sketch a comment was made on was merged, discarded or replaced by a later one on the same target. */
107
+ export declare const sketchGoneOf: (options: {
108
+ product: ResolvedProduct;
109
+ comment: Pick<CommentFile, "sketch">;
110
+ }) => boolean;
111
+ /**
112
+ * Why a comment no longer points at anything: its sketch variant, part, state, size or interaction is gone.
113
+ * `null` when it still does. A part whose states are not an object literal keeps any state.
114
+ */
115
+ export declare const staleReasonOf: (options: {
116
+ product: ResolvedProduct;
117
+ comment: Omit<CommentFile, "text" | "createdAt">;
118
+ }) => string | null;
119
+ /** Writes a comment on a state of a part, or answers with why it points at nothing. */
120
+ export declare const createComment: (options: {
121
+ product: ResolvedProduct;
122
+ comment: Omit<CommentFile, "createdAt">;
123
+ }) => DesignComment | string;
124
+ /** Who spoke last in a comment thread: the user wrote the comment, so a thread without replies is the user's. */
125
+ export declare const lastWordOf: (comment: Pick<DesignComment, "replies">) => "agent" | "user";
126
+ export declare const threadStateOf: (comment: Pick<DesignComment, "replies">) => ThreadState;
127
+ export declare const findComment: (options: {
128
+ products: {
129
+ name: string;
130
+ dir: string;
131
+ }[];
132
+ id: string;
133
+ }) => string | DesignComment;
134
+ /**
135
+ * Adds a reply to the thread of an open or addressed comment, searching the named products. A reply by the user
136
+ * opens an addressed thread again. Answers with the updated comment.
137
+ */
138
+ export declare const replyToComment: (options: {
139
+ products: {
140
+ name: string;
141
+ dir: string;
142
+ }[];
143
+ id: string;
144
+ by: CommentReply["by"];
145
+ author?: string;
146
+ text: string;
147
+ question?: boolean;
148
+ }) => DesignComment | string;
149
+ /** Deletes a withdrawn comment thread by its id, searching the named products. Answers with the deleted comment. */
150
+ export declare const deleteComment: (options: {
151
+ products: {
152
+ name: string;
153
+ dir: string;
154
+ }[];
155
+ id: string;
156
+ }) => DesignComment | string;
157
+ /**
158
+ * Marks an open or addressed comment thread as addressed by `inbox done`, searching the named products. Without
159
+ * `author` the user addressed it. Answers with the addressed comment.
160
+ */
161
+ export declare const addressComment: (options: {
162
+ products: {
163
+ name: string;
164
+ dir: string;
165
+ }[];
166
+ id: string;
167
+ author?: string;
168
+ note?: string;
169
+ }) => DesignComment | string;
170
+ /** Resolves an open or addressed comment thread for the user, searching the named products: the file stays, marked `resolved`. */
171
+ export declare const resolveComment: (options: {
172
+ products: {
173
+ name: string;
174
+ dir: string;
175
+ }[];
176
+ id: string;
177
+ note?: string;
178
+ }) => DesignComment | string;
179
+ /** The open comments made on any variant of a sketch, matched by its target and its `createdAt`. */
180
+ export declare const commentsOnSketch: (options: {
181
+ productDir: string;
182
+ product: string;
183
+ sketch: Pick<Sketch, "target" | "createdAt">;
184
+ }) => DesignComment[];
185
+ /**
186
+ * Marks the open comments on the variants of a sketch, or only those on `variant`, as addressed for `reason`. `round`
187
+ * is the key of the round a `round` answer started; without `author` the user addressed them. Answers with the addressed comments.
188
+ */
189
+ export declare const addressSketchComments: (options: {
190
+ sketch: Sketch;
191
+ variant?: string;
192
+ reason: Exclude<CommentAddressReason, "done">;
193
+ author?: string;
194
+ note?: string;
195
+ round?: string;
196
+ }) => DesignComment[];