@12ui/design 0.2.76 → 0.2.78

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 (337) hide show
  1. package/SKILL.md +1 -1
  2. package/dist/cli-codex-readiness.d.ts +6 -0
  3. package/dist/cli-codex-readiness.d.ts.map +1 -1
  4. package/dist/cli-codex-readiness.js +12 -12
  5. package/dist/cli-codex-readiness.js.map +1 -1
  6. package/dist/cli-help/design.d.ts +2 -2
  7. package/dist/cli-help/design.d.ts.map +1 -1
  8. package/dist/cli-help/design.js +2 -0
  9. package/dist/cli-help/design.js.map +1 -1
  10. package/dist/cli-help/index.d.ts +2 -2
  11. package/dist/cli-review-command.d.ts.map +1 -1
  12. package/dist/cli-review-command.js +2 -0
  13. package/dist/cli-review-command.js.map +1 -1
  14. package/dist/cli-run.d.ts.map +1 -1
  15. package/dist/cli-run.js +6 -0
  16. package/dist/cli-run.js.map +1 -1
  17. package/dist/cli-workspace-draw.d.ts +1 -11
  18. package/dist/cli-workspace-draw.d.ts.map +1 -1
  19. package/dist/cli-workspace-draw.js +18 -18
  20. package/dist/cli-workspace-draw.js.map +1 -1
  21. package/dist/cli-workspace-runner.d.ts +30 -0
  22. package/dist/cli-workspace-runner.d.ts.map +1 -0
  23. package/dist/cli-workspace-runner.js +105 -0
  24. package/dist/cli-workspace-runner.js.map +1 -0
  25. package/dist/mcp-slate-image.js +1 -1
  26. package/dist/mcp-slate-image.js.map +1 -1
  27. package/dist/mcp-slate-tool-defs.js +1 -1
  28. package/dist/mcp-slate-tool-defs.js.map +1 -1
  29. package/dist/mcp-slate-ui-copy.d.ts +403 -33
  30. package/dist/mcp-slate-ui-copy.d.ts.map +1 -1
  31. package/dist/mcp-slate-ui-copy.js +247 -57
  32. package/dist/mcp-slate-ui-copy.js.map +1 -1
  33. package/dist/mcp-slate-ui-icu.d.ts +47 -0
  34. package/dist/mcp-slate-ui-icu.d.ts.map +1 -0
  35. package/dist/mcp-slate-ui-icu.js +229 -0
  36. package/dist/mcp-slate-ui-icu.js.map +1 -0
  37. package/dist/mcp-slate-ui-locale-match.d.ts +12 -0
  38. package/dist/mcp-slate-ui-locale-match.d.ts.map +1 -0
  39. package/dist/mcp-slate-ui-locale-match.js +34 -0
  40. package/dist/mcp-slate-ui-locale-match.js.map +1 -0
  41. package/dist/mcp-slate-ui-locales/de-DE.d.ts +9 -0
  42. package/dist/mcp-slate-ui-locales/de-DE.d.ts.map +1 -0
  43. package/dist/mcp-slate-ui-locales/de-DE.js +217 -0
  44. package/dist/mcp-slate-ui-locales/de-DE.js.map +1 -0
  45. package/dist/mcp-slate-ui-locales/es-419.d.ts +9 -0
  46. package/dist/mcp-slate-ui-locales/es-419.d.ts.map +1 -0
  47. package/dist/mcp-slate-ui-locales/es-419.js +217 -0
  48. package/dist/mcp-slate-ui-locales/es-419.js.map +1 -0
  49. package/dist/mcp-slate-ui-locales/es-ES.d.ts +9 -0
  50. package/dist/mcp-slate-ui-locales/es-ES.d.ts.map +1 -0
  51. package/dist/mcp-slate-ui-locales/es-ES.js +217 -0
  52. package/dist/mcp-slate-ui-locales/es-ES.js.map +1 -0
  53. package/dist/mcp-slate-ui-locales/fr-FR.d.ts +9 -0
  54. package/dist/mcp-slate-ui-locales/fr-FR.d.ts.map +1 -0
  55. package/dist/mcp-slate-ui-locales/fr-FR.js +217 -0
  56. package/dist/mcp-slate-ui-locales/fr-FR.js.map +1 -0
  57. package/dist/mcp-slate-ui-locales/hi-IN.d.ts +9 -0
  58. package/dist/mcp-slate-ui-locales/hi-IN.d.ts.map +1 -0
  59. package/dist/mcp-slate-ui-locales/hi-IN.js +217 -0
  60. package/dist/mcp-slate-ui-locales/hi-IN.js.map +1 -0
  61. package/dist/mcp-slate-ui-locales/index.d.ts +11 -0
  62. package/dist/mcp-slate-ui-locales/index.d.ts.map +1 -0
  63. package/dist/mcp-slate-ui-locales/index.js +34 -0
  64. package/dist/mcp-slate-ui-locales/index.js.map +1 -0
  65. package/dist/mcp-slate-ui-locales/it-IT.d.ts +9 -0
  66. package/dist/mcp-slate-ui-locales/it-IT.d.ts.map +1 -0
  67. package/dist/mcp-slate-ui-locales/it-IT.js +217 -0
  68. package/dist/mcp-slate-ui-locales/it-IT.js.map +1 -0
  69. package/dist/mcp-slate-ui-locales/ja-JP.d.ts +9 -0
  70. package/dist/mcp-slate-ui-locales/ja-JP.d.ts.map +1 -0
  71. package/dist/mcp-slate-ui-locales/ja-JP.js +217 -0
  72. package/dist/mcp-slate-ui-locales/ja-JP.js.map +1 -0
  73. package/dist/mcp-slate-ui-locales/ko-KR.d.ts +9 -0
  74. package/dist/mcp-slate-ui-locales/ko-KR.d.ts.map +1 -0
  75. package/dist/mcp-slate-ui-locales/ko-KR.js +217 -0
  76. package/dist/mcp-slate-ui-locales/ko-KR.js.map +1 -0
  77. package/dist/mcp-slate-ui-locales/pt-BR.d.ts +9 -0
  78. package/dist/mcp-slate-ui-locales/pt-BR.d.ts.map +1 -0
  79. package/dist/mcp-slate-ui-locales/pt-BR.js +217 -0
  80. package/dist/mcp-slate-ui-locales/pt-BR.js.map +1 -0
  81. package/dist/mcp-slate-ui-locales/zh-CN.d.ts +9 -0
  82. package/dist/mcp-slate-ui-locales/zh-CN.d.ts.map +1 -0
  83. package/dist/mcp-slate-ui-locales/zh-CN.js +217 -0
  84. package/dist/mcp-slate-ui-locales/zh-CN.js.map +1 -0
  85. package/dist/mcp-slate-ui-locales/zh-TW.d.ts +9 -0
  86. package/dist/mcp-slate-ui-locales/zh-TW.d.ts.map +1 -0
  87. package/dist/mcp-slate-ui-locales/zh-TW.js +217 -0
  88. package/dist/mcp-slate-ui-locales/zh-TW.js.map +1 -0
  89. package/dist/mcp-slate-ui-script-bridge.d.ts.map +1 -1
  90. package/dist/mcp-slate-ui-script-bridge.js +8 -9
  91. package/dist/mcp-slate-ui-script-bridge.js.map +1 -1
  92. package/dist/mcp-slate-ui-script-dialog.d.ts.map +1 -1
  93. package/dist/mcp-slate-ui-script-dialog.js +60 -30
  94. package/dist/mcp-slate-ui-script-dialog.js.map +1 -1
  95. package/dist/mcp-slate-ui-script-inline.d.ts +9 -6
  96. package/dist/mcp-slate-ui-script-inline.d.ts.map +1 -1
  97. package/dist/mcp-slate-ui-script-inline.js +91 -46
  98. package/dist/mcp-slate-ui-script-inline.js.map +1 -1
  99. package/dist/mcp-slate-ui-script-inspiration-collage.d.ts +20 -0
  100. package/dist/mcp-slate-ui-script-inspiration-collage.d.ts.map +1 -0
  101. package/dist/mcp-slate-ui-script-inspiration-collage.js +68 -0
  102. package/dist/mcp-slate-ui-script-inspiration-collage.js.map +1 -0
  103. package/dist/mcp-slate-ui-script-inspiration-grid.d.ts +26 -0
  104. package/dist/mcp-slate-ui-script-inspiration-grid.d.ts.map +1 -0
  105. package/dist/mcp-slate-ui-script-inspiration-grid.js +246 -0
  106. package/dist/mcp-slate-ui-script-inspiration-grid.js.map +1 -0
  107. package/dist/mcp-slate-ui-script-inspiration.d.ts +10 -9
  108. package/dist/mcp-slate-ui-script-inspiration.d.ts.map +1 -1
  109. package/dist/mcp-slate-ui-script-inspiration.js +161 -120
  110. package/dist/mcp-slate-ui-script-inspiration.js.map +1 -1
  111. package/dist/mcp-slate-ui-script-l10n.d.ts +29 -0
  112. package/dist/mcp-slate-ui-script-l10n.d.ts.map +1 -0
  113. package/dist/mcp-slate-ui-script-l10n.js +135 -0
  114. package/dist/mcp-slate-ui-script-l10n.js.map +1 -0
  115. package/dist/mcp-slate-ui-script-more.d.ts +3 -2
  116. package/dist/mcp-slate-ui-script-more.d.ts.map +1 -1
  117. package/dist/mcp-slate-ui-script-more.js +19 -18
  118. package/dist/mcp-slate-ui-script-more.js.map +1 -1
  119. package/dist/mcp-slate-ui-script-pause.d.ts +33 -0
  120. package/dist/mcp-slate-ui-script-pause.d.ts.map +1 -0
  121. package/dist/mcp-slate-ui-script-pause.js +217 -0
  122. package/dist/mcp-slate-ui-script-pause.js.map +1 -0
  123. package/dist/mcp-slate-ui-script-remote.d.ts +2 -0
  124. package/dist/mcp-slate-ui-script-remote.d.ts.map +1 -1
  125. package/dist/mcp-slate-ui-script-remote.js +47 -6
  126. package/dist/mcp-slate-ui-script-remote.js.map +1 -1
  127. package/dist/mcp-slate-ui-script-scribble.js +1 -1
  128. package/dist/mcp-slate-ui-script-select.js +6 -6
  129. package/dist/mcp-slate-ui-script-stage.d.ts +3 -2
  130. package/dist/mcp-slate-ui-script-stage.d.ts.map +1 -1
  131. package/dist/mcp-slate-ui-script-stage.js +31 -19
  132. package/dist/mcp-slate-ui-script-stage.js.map +1 -1
  133. package/dist/mcp-slate-ui-script-state.d.ts.map +1 -1
  134. package/dist/mcp-slate-ui-script-state.js +77 -57
  135. package/dist/mcp-slate-ui-script-state.js.map +1 -1
  136. package/dist/mcp-slate-ui-script.d.ts +2 -2
  137. package/dist/mcp-slate-ui-script.d.ts.map +1 -1
  138. package/dist/mcp-slate-ui-script.js +21 -7
  139. package/dist/mcp-slate-ui-script.js.map +1 -1
  140. package/dist/mcp-slate-ui-styles-dialog.d.ts +6 -7
  141. package/dist/mcp-slate-ui-styles-dialog.d.ts.map +1 -1
  142. package/dist/mcp-slate-ui-styles-dialog.js +13 -29
  143. package/dist/mcp-slate-ui-styles-dialog.js.map +1 -1
  144. package/dist/mcp-slate-ui-styles-inspiration.d.ts +18 -0
  145. package/dist/mcp-slate-ui-styles-inspiration.d.ts.map +1 -0
  146. package/dist/mcp-slate-ui-styles-inspiration.js +43 -0
  147. package/dist/mcp-slate-ui-styles-inspiration.js.map +1 -0
  148. package/dist/mcp-slate-ui-styles-pause.d.ts +10 -0
  149. package/dist/mcp-slate-ui-styles-pause.d.ts.map +1 -0
  150. package/dist/mcp-slate-ui-styles-pause.js +25 -0
  151. package/dist/mcp-slate-ui-styles-pause.js.map +1 -0
  152. package/dist/mcp-slate-ui-styles-stage.d.ts +10 -6
  153. package/dist/mcp-slate-ui-styles-stage.d.ts.map +1 -1
  154. package/dist/mcp-slate-ui-styles-stage.js +24 -16
  155. package/dist/mcp-slate-ui-styles-stage.js.map +1 -1
  156. package/dist/mcp-slate-ui-styles.d.ts +12 -5
  157. package/dist/mcp-slate-ui-styles.d.ts.map +1 -1
  158. package/dist/mcp-slate-ui-styles.js +38 -21
  159. package/dist/mcp-slate-ui-styles.js.map +1 -1
  160. package/dist/mcp-slate-ui.d.ts +11 -3
  161. package/dist/mcp-slate-ui.d.ts.map +1 -1
  162. package/dist/mcp-slate-ui.js +24 -16
  163. package/dist/mcp-slate-ui.js.map +1 -1
  164. package/dist/mosaic-bands.d.ts +44 -0
  165. package/dist/mosaic-bands.d.ts.map +1 -0
  166. package/dist/mosaic-bands.js +153 -0
  167. package/dist/mosaic-bands.js.map +1 -0
  168. package/dist/review-discovery.d.ts.map +1 -1
  169. package/dist/review-discovery.js +36 -54
  170. package/dist/review-discovery.js.map +1 -1
  171. package/dist/review-page.d.ts.map +1 -1
  172. package/dist/review-page.js +2 -1
  173. package/dist/review-page.js.map +1 -1
  174. package/dist/review-run-roots.d.ts +40 -0
  175. package/dist/review-run-roots.d.ts.map +1 -0
  176. package/dist/review-run-roots.js +94 -0
  177. package/dist/review-run-roots.js.map +1 -0
  178. package/dist/review-server.d.ts +2 -0
  179. package/dist/review-server.d.ts.map +1 -1
  180. package/dist/review-server.js +2 -0
  181. package/dist/review-server.js.map +1 -1
  182. package/dist/review-types.d.ts +10 -0
  183. package/dist/review-types.d.ts.map +1 -1
  184. package/dist/slate-actions.d.ts +3 -3
  185. package/dist/slate-actions.d.ts.map +1 -1
  186. package/dist/slate-actions.js +9 -8
  187. package/dist/slate-actions.js.map +1 -1
  188. package/dist/slate-browser-host-script.d.ts +4 -0
  189. package/dist/slate-browser-host-script.d.ts.map +1 -1
  190. package/dist/slate-browser-host-script.js +25 -6
  191. package/dist/slate-browser-host-script.js.map +1 -1
  192. package/dist/slate-browser-host.d.ts +2 -1
  193. package/dist/slate-browser-host.d.ts.map +1 -1
  194. package/dist/slate-browser-host.js +18 -5
  195. package/dist/slate-browser-host.js.map +1 -1
  196. package/dist/slate-commit.js +7 -7
  197. package/dist/slate-commit.js.map +1 -1
  198. package/dist/slate-corpus.d.ts.map +1 -1
  199. package/dist/slate-corpus.js +3 -2
  200. package/dist/slate-corpus.js.map +1 -1
  201. package/dist/slate-edit-runner.d.ts.map +1 -1
  202. package/dist/slate-edit-runner.js +5 -4
  203. package/dist/slate-edit-runner.js.map +1 -1
  204. package/dist/slate-editability.d.ts +2 -0
  205. package/dist/slate-editability.d.ts.map +1 -1
  206. package/dist/slate-editability.js +1 -1
  207. package/dist/slate-editability.js.map +1 -1
  208. package/dist/slate-errors.d.ts +7 -1
  209. package/dist/slate-errors.d.ts.map +1 -1
  210. package/dist/slate-errors.js +3 -2
  211. package/dist/slate-errors.js.map +1 -1
  212. package/dist/slate-handoff-options.d.ts +2 -1
  213. package/dist/slate-handoff-options.d.ts.map +1 -1
  214. package/dist/slate-handoff-options.js +2 -2
  215. package/dist/slate-handoff-options.js.map +1 -1
  216. package/dist/slate-handoff.js +1 -1
  217. package/dist/slate-handoff.js.map +1 -1
  218. package/dist/slate-image-executor.d.ts +28 -3
  219. package/dist/slate-image-executor.d.ts.map +1 -1
  220. package/dist/slate-image-executor.js +55 -11
  221. package/dist/slate-image-executor.js.map +1 -1
  222. package/dist/slate-inspiration.js +2 -2
  223. package/dist/slate-inspiration.js.map +1 -1
  224. package/dist/slate-local-image.d.ts.map +1 -1
  225. package/dist/slate-local-image.js +4 -1
  226. package/dist/slate-local-image.js.map +1 -1
  227. package/dist/slate-lock.js +1 -1
  228. package/dist/slate-lock.js.map +1 -1
  229. package/dist/slate-resume.js +6 -6
  230. package/dist/slate-resume.js.map +1 -1
  231. package/dist/slate-round-params.d.ts +3 -0
  232. package/dist/slate-round-params.d.ts.map +1 -1
  233. package/dist/slate-round-params.js +5 -0
  234. package/dist/slate-round-params.js.map +1 -1
  235. package/dist/slate-round-prompt.d.ts +15 -3
  236. package/dist/slate-round-prompt.d.ts.map +1 -1
  237. package/dist/slate-round-prompt.js +14 -5
  238. package/dist/slate-round-prompt.js.map +1 -1
  239. package/dist/slate-round-queries.d.ts +18 -0
  240. package/dist/slate-round-queries.d.ts.map +1 -0
  241. package/dist/slate-round-queries.js +29 -0
  242. package/dist/slate-round-queries.js.map +1 -0
  243. package/dist/slate-round-runner.d.ts.map +1 -1
  244. package/dist/slate-round-runner.js +12 -9
  245. package/dist/slate-round-runner.js.map +1 -1
  246. package/dist/slate-round-search.js +5 -5
  247. package/dist/slate-round-search.js.map +1 -1
  248. package/dist/slate-run-action.d.ts.map +1 -1
  249. package/dist/slate-run-action.js +2 -1
  250. package/dist/slate-run-action.js.map +1 -1
  251. package/dist/slate-runner-context.d.ts +3 -1
  252. package/dist/slate-runner-context.d.ts.map +1 -1
  253. package/dist/slate-runner-context.js +4 -3
  254. package/dist/slate-runner-context.js.map +1 -1
  255. package/dist/slate-runner-failure.d.ts +7 -1
  256. package/dist/slate-runner-failure.d.ts.map +1 -1
  257. package/dist/slate-runner-failure.js +6 -5
  258. package/dist/slate-runner-failure.js.map +1 -1
  259. package/dist/slate-runtime.d.ts.map +1 -1
  260. package/dist/slate-runtime.js +1 -0
  261. package/dist/slate-runtime.js.map +1 -1
  262. package/dist/slate-versions.js +3 -3
  263. package/dist/slate-versions.js.map +1 -1
  264. package/dist/slate-view-contract.d.ts +62 -1
  265. package/dist/slate-view-contract.d.ts.map +1 -1
  266. package/dist/slate-view-contract.js +30 -0
  267. package/dist/slate-view-contract.js.map +1 -1
  268. package/dist/slate-view.d.ts.map +1 -1
  269. package/dist/slate-view.js +19 -3
  270. package/dist/slate-view.js.map +1 -1
  271. package/dist/slate-workspace-parse.d.ts.map +1 -1
  272. package/dist/slate-workspace-parse.js +22 -0
  273. package/dist/slate-workspace-parse.js.map +1 -1
  274. package/dist/slate-workspace-types.d.ts +3 -1
  275. package/dist/slate-workspace-types.d.ts.map +1 -1
  276. package/dist/workspace-draw-client.d.ts +58 -5
  277. package/dist/workspace-draw-client.d.ts.map +1 -1
  278. package/dist/workspace-draw-client.js +82 -9
  279. package/dist/workspace-draw-client.js.map +1 -1
  280. package/dist/workspace-draw-codex.d.ts +9 -4
  281. package/dist/workspace-draw-codex.d.ts.map +1 -1
  282. package/dist/workspace-draw-codex.js +17 -3
  283. package/dist/workspace-draw-codex.js.map +1 -1
  284. package/dist/workspace-draw-messages.d.ts +31 -0
  285. package/dist/workspace-draw-messages.d.ts.map +1 -1
  286. package/dist/workspace-draw-messages.js +30 -0
  287. package/dist/workspace-draw-messages.js.map +1 -1
  288. package/dist/workspace-draw-run.d.ts +19 -1
  289. package/dist/workspace-draw-run.d.ts.map +1 -1
  290. package/dist/workspace-draw-run.js +98 -5
  291. package/dist/workspace-draw-run.js.map +1 -1
  292. package/dist/workspace-draw-store.d.ts +2 -0
  293. package/dist/workspace-draw-store.d.ts.map +1 -1
  294. package/dist/workspace-draw-store.js +3 -1
  295. package/dist/workspace-draw-store.js.map +1 -1
  296. package/dist/workspace-draw-types.d.ts +2 -0
  297. package/dist/workspace-draw-types.d.ts.map +1 -1
  298. package/dist/workspace-draw-types.js +2 -0
  299. package/dist/workspace-draw-types.js.map +1 -1
  300. package/dist/workspace-origin.d.ts +15 -0
  301. package/dist/workspace-origin.d.ts.map +1 -0
  302. package/dist/workspace-origin.js +36 -0
  303. package/dist/workspace-origin.js.map +1 -0
  304. package/dist/workspace-runner-children.d.ts +39 -0
  305. package/dist/workspace-runner-children.d.ts.map +1 -0
  306. package/dist/workspace-runner-children.js +139 -0
  307. package/dist/workspace-runner-children.js.map +1 -0
  308. package/dist/workspace-runner-client.d.ts +43 -0
  309. package/dist/workspace-runner-client.d.ts.map +1 -0
  310. package/dist/workspace-runner-client.js +72 -0
  311. package/dist/workspace-runner-client.js.map +1 -0
  312. package/dist/workspace-runner-main.d.ts +56 -0
  313. package/dist/workspace-runner-main.d.ts.map +1 -0
  314. package/dist/workspace-runner-main.js +378 -0
  315. package/dist/workspace-runner-main.js.map +1 -0
  316. package/dist/workspace-runner-policy.d.ts +40 -0
  317. package/dist/workspace-runner-policy.d.ts.map +1 -0
  318. package/dist/workspace-runner-policy.js +47 -0
  319. package/dist/workspace-runner-policy.js.map +1 -0
  320. package/dist/workspace-runner-spawn.d.ts +42 -0
  321. package/dist/workspace-runner-spawn.d.ts.map +1 -0
  322. package/dist/workspace-runner-spawn.js +60 -0
  323. package/dist/workspace-runner-spawn.js.map +1 -0
  324. package/dist/workspace-runner-stop.d.ts +25 -0
  325. package/dist/workspace-runner-stop.d.ts.map +1 -0
  326. package/dist/workspace-runner-stop.js +44 -0
  327. package/dist/workspace-runner-stop.js.map +1 -0
  328. package/dist/workspace-runner-store.d.ts +26 -0
  329. package/dist/workspace-runner-store.d.ts.map +1 -0
  330. package/dist/workspace-runner-store.js +114 -0
  331. package/dist/workspace-runner-store.js.map +1 -0
  332. package/open-design.json +2 -2
  333. package/package.json +1 -1
  334. package/runtime/codex-conversion/src/images/native-frame.mjs +103 -0
  335. package/runtime/codex-conversion/src/images/native-invoke.mjs +24 -5
  336. package/runtime/codex-conversion/src/images/native.mjs +14 -5
  337. package/runtime/codex-conversion/src/run-store.mjs +21 -1
@@ -1,26 +1,32 @@
1
1
  import { CONVERSION_OUTPUT_FORMATS } from './conversion-outputs.js';
2
2
  /**
3
- * Every visible string of the workspace view, in one place: the script reads
4
- * this object (injected as JSON), and the copy test reads the same object, so
5
- * the sentence-case and bare-verb rules are checked on exactly the words a
6
- * person sees.
3
+ * Every word the Design workspace screen shows, in English, in one place: the source catalogue the translations in
4
+ * `mcp-slate-ui-locales/` follow key for key, and the fallback for any key a locale lacks. The script receives every
5
+ * catalogue (injected as JSON) and words each line through `t(key, values)` in the person's language
6
+ * (`mcp-slate-ui-script-l10n.ts`); the copy tests read this same object, so the sentence-case and bare-verb rules are
7
+ * checked on exactly the words a person sees.
7
8
  *
8
- * Rules (spec v3, section 7): sentence case (no all-caps words except codes),
9
- * action labels are bare verbs, no counts in a label, no explanatory
10
- * paragraphs, and no price or budget wording anywhere: the workspace never
11
- * costs money, so it never shows any. `{n}`, `{m}` and `{label}` are filled in
12
- * by the script; status lines may carry counts, labels may not.
9
+ * Messages are ICU MessageFormat (`mcp-slate-ui-icu.ts`): `{name}` is a value the screen fills in (a code such as B2,
10
+ * a number, a person's own words), `{n, plural, one {...} other {...}}` picks the form for a count and `#` in it is the
11
+ * count. A line is always a whole message: nothing is glued from pieces, so a translation can order its words freely.
12
+ * The comment above each group is the translators' note: where it shows and what each value is.
13
13
  *
14
- * The messages the view sends to the agent are not copy: they are input to a
15
- * model, not words on a screen, and live with the code that sends them.
14
+ * Rules (spec v3, section 7): sentence case (no all-caps words except codes), action labels are bare verbs, no counts in
15
+ * a label, no explanatory paragraphs, and no price or budget wording anywhere: the workspace never costs money, so it
16
+ * never shows any. Status lines may carry counts, labels may not.
17
+ *
18
+ * The messages the view sends to the agent are not copy: they are input to a model, not words on a screen, stay
19
+ * English, and live with the code that sends them.
16
20
  */
17
21
  export const SLATE_UI_COPY = {
22
+ // The screen's name: the document title, the heading for assistive technology, the tab list's name.
18
23
  title: 'Design workspace',
19
24
  empty: 'No finished draft run was found. Start one, then open this again.',
20
25
  // Tabs.
21
26
  tabDesigns: 'Designs',
22
27
  tabInspiration: 'Inspiration',
23
- // Actions: bare verbs. The two chrome controls are icon-only and named for assistive technology.
28
+ // Actions: bare verbs (one word in English; keep them short). The two chrome controls are icon-only and named for
29
+ // assistive technology.
24
30
  openWorkspace: 'Open workspace',
25
31
  closeWorkspace: 'Close workspace',
26
32
  select: 'Select',
@@ -36,8 +42,11 @@ export const SLATE_UI_COPY = {
36
42
  cancel: 'Cancel',
37
43
  clear: 'Clear',
38
44
  undo: 'Undo',
39
- // Generate more: the dashed tile, and the panel it opens under the thumbnails. The counts are a control (SLATE_MORE_COUNTS), not copy.
40
- // {label} is the code of the design that is shown.
45
+ change: 'Change',
46
+ continueRound: 'Continue',
47
+ // Generate more: the dashed tile, and the panel it opens under the thumbnails. The counts are a control
48
+ // (SLATE_MORE_COUNTS), not copy. {label} is the code of the design that is shown (A, B2); {name} a reference's
49
+ // description from the reference collection (English).
41
50
  generateMore: 'Generate more',
42
51
  moreHelpFresh: 'Draws new options from fresh references.',
43
52
  moreHelpSelected: 'Draws new options from your selected inspiration.',
@@ -48,12 +57,26 @@ export const SLATE_UI_COPY = {
48
57
  removeReference: 'Remove {name}',
49
58
  moreNotePlaceholder: 'Describe how they should differ (optional)',
50
59
  moreCountLabel: 'How many',
60
+ // The inspiration pause (the hosted server): a round waits for the person before it is drawn. {n} is seconds left in
61
+ // the countdown, or the round's option count; {m} how many references the person chose; {label} an option's code.
62
+ pauseLabel: 'Before drawing',
63
+ pauseCountdown: 'Starting in {n} s. Change any reference, or press Continue.',
64
+ pauseHeld: 'Paused. Press Continue when ready.',
65
+ pauseStarting: 'Starting.',
66
+ pauseDrawsFrom: 'Option {label} will be drawn from this reference.',
67
+ pauseReferenceFor: 'Reference for {label}',
68
+ pauseNoReference: 'No reference yet. Choose one in Inspiration.',
69
+ pauseNone: 'Choose at least one reference.',
70
+ pauseAtMost: '{n} at most, one per option.',
71
+ pauseFrom: '{m, plural, one {Every option is drawn from # reference.} other {{n} options are drawn from # references, in turn.}}',
51
72
  // Edit dialog: one optional instruction, a drawing, or both. {label} is the code of the design that is edited.
73
+ // {n} in editTooLong is how many characters must go from the end of the instruction for it to fit.
52
74
  scribbleHint: 'Draw on the image to show where. An X or a circle is enough.',
53
75
  editAria: 'Edit instruction',
54
76
  editPlaceholder: 'Optional if you drew on the image. For example, make the headline larger.',
55
77
  editHelp: 'Applies the change to {label} and saves the result as a new version.',
56
78
  editHelpMarks: 'Marks only: the change is inferred from what you drew.',
79
+ editTooLong: 'This instruction is too long. Shorten it by {n, plural, one {# character} other {# characters}}.',
57
80
  // Branch and Convert dialogs.
58
81
  branchAria: 'What to build',
59
82
  branchPlaceholder: 'Optional. Which pages or states to add, for example pricing, sign in and settings.',
@@ -77,20 +100,46 @@ export const SLATE_UI_COPY = {
77
100
  inspirationNoMatches: 'No matches. Try different words.',
78
101
  searching: 'Searching.',
79
102
  eightAtMost: 'Eight at most.',
103
+ // {message} is why the search failed, already a sentence. {n} is seconds.
80
104
  searchFailed: 'Search failed: {message}',
81
- tryAgain: 'Try again in {n} seconds.',
82
- // Names and titles.
83
- roundPrefix: 'Round ',
84
- likePrefix: 'Like ',
105
+ tryAgain: 'Try again in {n, plural, one {# second} other {# seconds}}.',
106
+ // Whose words are in the search box. {rounds} is a list of round numbers ("3", or "1 and 2"); {count} how many.
107
+ queryFrom: 'The words {count, plural, one {round {rounds}} other {rounds {rounds}}} searched.',
108
+ queryNewestOthers: 'The newest words, from {count, plural, one {round {rounds}} other {rounds {rounds}}}. {otherCount, plural, one {Round {others}} other {Rounds {others}}} searched other words.',
109
+ queryLastSearch: 'Your last search.',
110
+ queryCut: 'A search takes the first {n} characters.',
111
+ // How many results the grid shows, and why no more: one search returns at most {n}.
112
+ resultsMax: '{n, plural, one {# result} other {# results}}, the most one search returns.',
113
+ resultsCount: '{n, plural, one {# result.} other {# results.}}',
114
+ // The badge of a reference a round drew from, e.g. "Used in round 1, option B". {places} is one or more places joined
115
+ // by usedSeparator. In a place, {round} is the round's number and {labels} a list of option codes ("B", "A and C").
116
+ // A narrow tile wraps the badge only between its parts: "round" and its number, and "option" and its code, are joined
117
+ // by no-break spaces (U+00A0); keep them where your language has the same pairs.
118
+ usedIn: 'Used in {places}',
119
+ usedPlace: '{options, plural, =0 {round {round}} one {round {round}, option {labels}} other {round {round}, options {labels}}}',
120
+ usedSeparator: '; ',
121
+ // Generate from the selection: {m} references are selected, {n} options (six or more) are drawn from them.
122
+ selectionDraws: '{m, plural, one {# selected. Draws {n} new options from it.} other {# selected. Draws {n} new options from them.}}',
123
+ roundRunning: 'Wait for the running round to finish.',
124
+ // Names and titles. {n} is a round's number, {label} an option or version code (A, B2), {description} a reference's
125
+ // description from the reference collection (English). versionTitle is a version chip's tooltip: {prompt} is the
126
+ // person's own edit instruction; versionTitleMarks is for an edit made from a drawing alone.
127
+ roundHeading: 'Round {n}',
128
+ likeTitle: 'Like {label}',
85
129
  newOptionsTitle: 'New options',
86
- optionPrefix: 'Option ',
87
- versionPrefix: 'Version ',
88
- referencePrefix: 'Reference ',
89
- failedSuffix: ', failed',
130
+ optionName: 'Option {label}',
131
+ optionNameFailed: 'Option {label}, failed',
132
+ versionName: 'Version {label}',
133
+ versionTitle: '{label}: {prompt}',
134
+ versionTitleMarks: '{label}: drawn marks only',
135
+ referenceName: 'Reference {description}',
90
136
  optionsGroup: 'Options',
91
137
  fileMissing: 'File missing on this Mac',
92
138
  fileChanged: 'This file changed on disk',
93
- // Status and band lines.
139
+ // The workspace's status line says what a click did; the card has none, and shows only an error about a click, beside
140
+ // Select. Running work is shown on the thumbnails (a drawing option shimmers) and, on the local plugin, in the
141
+ // workspace's band; work that stopped or failed says so in the band and on the options it left without a picture.
142
+ // {detail} is a reason, already a sentence; {n} of {m} counts options.
94
143
  recording: 'Selecting...',
95
144
  selectedLine: 'Selected {label}. The agent has been told.',
96
145
  selectedRefused: 'Selected {label} and saved it, but the host did not take the message: {detail}',
@@ -100,28 +149,168 @@ export const SLATE_UI_COPY = {
100
149
  sent: 'Sent to the agent.',
101
150
  sentRefused: 'Recorded the request, but the host did not take the message: {detail}',
102
151
  designing: 'Designing.',
103
- // The hosted target: work waits for the person's own agent, which draws locally and uploads.
104
- waitingForAgent: 'Waiting for your agent.',
105
152
  designingProgress: 'Designing. {n} of {m} ready.',
106
153
  editing: 'Editing {label}.',
107
- roundReadyOne: '1 new option is ready.',
108
- roundReadyMany: '{n} new options are ready.',
109
- roundFailed: '{n} failed.',
110
- editReady: '{label} is ready.',
111
154
  interrupted: 'Work stopped before it finished.',
112
- // Errors.
155
+ // Two whole sentences shown on one line, in this order. Change only the space between them.
156
+ sentenceJoin: '{first} {second}',
157
+ // Errors. {detail} is a reason, already a sentence (or the host's own words).
113
158
  markFailed: 'Could not draw the marks on the image: {detail}',
114
- noConnection: 'Could not connect to the host: ',
159
+ markReadFailed: 'the image could not be read',
160
+ markNoCanvas: 'no canvas is available',
161
+ markNoSize: 'the image has no size',
162
+ markNoJpeg: 'the canvas could not export the picture',
163
+ markTooLarge: 'the marked image would be too large',
164
+ noConnection: 'Could not connect to the host: {detail}',
115
165
  needsHost: 'This view needs a host that can show apps. Open it where ui:// resources render.',
116
- toolError: 'The tool returned an error',
166
+ toolError: 'The tool returned an error.',
167
+ toolErrorDetail: 'The tool returned an error: {detail}',
168
+ toolFailed: 'The tool failed.',
169
+ toolCancelled: 'The tool call was cancelled: {detail}',
170
+ toolCancelledNoReason: 'The tool call was cancelled.',
171
+ requestFailed: 'The request failed.',
172
+ pictureNotReturned: 'No picture came back.',
117
173
  noView: 'The tool result has no workspace.',
118
174
  };
175
+ /**
176
+ * The Format choices that carry words and the one line under the Format select that says what the chosen format gives.
177
+ * Apart from SLATE_UI_COPY because they name formats (HTML, PNG): the copy rules' no-all-caps check is about labels,
178
+ * and these are sentences about file formats. The same translators' notes apply.
179
+ */
180
+ export const SLATE_FORMAT_COPY = {
181
+ // The Format choices that carry words (the rest are product and file names: HTML, React, LayerDoc, SVG, PNG, JPG,
182
+ // WebP, PDF, PSD, PowerPoint, Sketch), and the one line under the Format select that says what the chosen format
183
+ // gives. "12ui" is a product name; "this Mac" is the person's own computer.
184
+ formatAssets: 'Assets',
185
+ formatResponsiveHtml: 'Responsive HTML',
186
+ formatFixedHtml: 'Fixed HTML',
187
+ convertHelpLocalHtml: 'Editable HTML and CSS, built on this Mac.',
188
+ convertHelpLocalReact: 'Editable React components and CSS, built on this Mac.',
189
+ convertHelpLocalAssets: "The design's images as separate files, cut out on this Mac.",
190
+ convertHelpServiceHtml: 'Responsive HTML that adapts to screen widths, built by 12ui.',
191
+ convertHelpServiceLayerdoc: 'An editable layered document, built by 12ui.',
192
+ convertHelpServiceHtmlFixed: 'Fixed-width HTML that matches the picture, built by 12ui.',
193
+ convertHelpServiceSvg: 'A vector SVG, built by 12ui.',
194
+ convertHelpServicePng: 'A PNG image at the width you choose, made by 12ui.',
195
+ convertHelpServiceJpg: 'A JPG image at the width you choose, made by 12ui.',
196
+ convertHelpServiceWebp: 'A WebP image at the width you choose, made by 12ui.',
197
+ convertHelpServicePdf: 'A PDF file with editable layers, made by 12ui.',
198
+ convertHelpServicePsd: 'A PSD file with editable layers, made by 12ui.',
199
+ convertHelpServicePptx: 'A PowerPoint file with editable layers, made by 12ui.',
200
+ convertHelpServiceSketch: 'A Sketch file with editable layers, made by 12ui.',
201
+ // The hosted target's lines: the person's agent builds in their own project.
202
+ convertHelpRemoteHtml: 'Your agent builds editable HTML from this image in your project.',
203
+ convertHelpRemoteReact: 'Your agent builds React components from this image in your project.',
204
+ };
205
+ /**
206
+ * The words of the browser page `12ui workspace open` serves around the screen (a tab of the person's own browser):
207
+ * its overlay once the person's choice is sent or the command has ended. Apart from SLATE_UI_COPY because "session"
208
+ * is the page's own subject (the screen itself never speaks of sessions).
209
+ */
210
+ export const SLATE_BROWSER_PAGE_COPY = {
211
+ // The browser page `12ui workspace open` serves around the screen (a tab of the person's own browser). {status} is
212
+ // an HTTP status number.
213
+ browserSessionEnded: 'The session ended',
214
+ browserRunAgain: 'Run the command again to reopen the workspace.',
215
+ browserNotRunning: 'The 12ui session is not running.',
216
+ browserChoiceSent: 'Choice sent',
217
+ browserRequestSent: 'Request sent',
218
+ browserAgentHasIt: 'Your agent has it. You can close this tab.',
219
+ browserSessionAnswered: 'The session answered {status}.',
220
+ };
221
+ /**
222
+ * What the servers say to the person, by the code they send beside their own English (`SlateL10nRef` in the view
223
+ * contract, `server.<code>` here). The screen words a code it has a message for in the person's language, and shows
224
+ * the server's sentence otherwise; SLATE_SERVER_MESSAGE_CODES lists every code and a test holds the two lists equal.
225
+ * These are written for the person, not the operator: no command-line flags, no file paths, no internal names.
226
+ *
227
+ * Values: {label} an option's code (A, B2); {seconds}, {count}, {max}, {over} numbers; {reason} a sentence that is
228
+ * either another of these messages or words the person's agent wrote (any language); {detail} words the operating
229
+ * system or a tool gave (usually English).
230
+ */
231
+ export const SLATE_SERVER_COPY = {
232
+ // The hosted server's workspace (design.12ui.com).
233
+ 'server.unknown_workspace': 'This Design workspace is not available. Ask your agent to open a new one.',
234
+ 'server.unknown_version': 'That option is not in this workspace.',
235
+ 'server.unknown_reference': 'That reference is not part of this workspace.',
236
+ 'server.unknown_op': 'That request is not in this workspace.',
237
+ 'server.intent_conflict': 'This request was already used for something different. Try again.',
238
+ 'server.too_many_open_requests': '{count, plural, one {# request is} other {# requests are}} already waiting for your agent.',
239
+ 'server.op_already_resolved': 'This request was already answered.',
240
+ 'server.workspace_full': 'This workspace is full. Open a new one.',
241
+ 'server.workspace_busy': 'The workspace is busy. Try again in a moment.',
242
+ 'server.payload_too_large': 'The picture is too large to send.',
243
+ 'server.state_invalid': 'The record of this workspace is damaged. Open a new one.',
244
+ 'server.service_unavailable': 'The workspace service is unavailable. Try again shortly.',
245
+ 'server.candidate_busy': '{label} is still busy with earlier work.',
246
+ 'server.rate_limited': 'Too many requests. Try again in {seconds, plural, one {# second} other {# seconds}}.',
247
+ 'server.agent_no_response': 'Your agent did not add the options. Ask it again.',
248
+ 'server.agent_failed': 'Your agent could not draw this: {reason}',
249
+ 'server.corpus_unavailable': 'The reference collection could not be reached. Try again shortly.',
250
+ 'server.result_too_large': 'That picture is too large to show here.',
251
+ 'server.concept_too_long': 'The brief plus your note is too long. Shorten the note.',
252
+ 'server.note_too_long': 'A note can be at most {max, plural, one {# character} other {# characters}}.',
253
+ 'server.explanation_too_long': 'A description can be at most {max, plural, one {# character} other {# characters}}.',
254
+ 'server.edit_prompt_too_long': 'This instruction is too long. Shorten it, then apply it again.',
255
+ 'server.edit_needs_input': 'Draw on the image or say what should change.',
256
+ 'server.search_empty': 'Type something to search for.',
257
+ 'server.selection_max': 'At most {max} references can be selected.',
258
+ // Why the person's Mac could not draw an option (the 12ui command line sends one of these as {reason} above).
259
+ 'server.draw_no_image': 'Codex did not return a picture for this option.',
260
+ 'server.draw_protocol': 'Codex made more than one picture for this option.',
261
+ 'server.draw_timeout': 'Codex took too long to draw this option.',
262
+ 'server.draw_inputs_changed': 'This option was drawn on this Mac with different inputs and cannot be drawn again here.',
263
+ 'server.draw_codex_unavailable': 'Codex cannot draw on this Mac, and drawing on 12ui needs a 12ui sign-in.',
264
+ // The local plugin: whether Codex on this Mac can draw (it is the person's own Codex app or command line).
265
+ 'server.codex_missing': 'Codex is not installed on this Mac. Install Codex, then try again.',
266
+ 'server.codex_broken': 'Codex could not start on this Mac. Reinstall or update Codex, then try again.',
267
+ 'server.codex_signed_out': 'Codex is not signed in on this Mac. Sign in to Codex, then try again.',
268
+ 'server.codex_api_key': 'Codex is signed in with an API key. Sign in with your ChatGPT account instead.',
269
+ 'server.codex_login_unknown': 'Codex could not confirm its sign-in. Sign in to Codex again, then try again.',
270
+ 'server.codex_outdated': 'This version of Codex is too old to draw here. Update Codex, then try again.',
271
+ 'server.codex_model_missing': 'Codex has not loaded the image model for this account. Open Codex once, then try again.',
272
+ 'server.codex_images_off': 'Image generation is turned off in Codex. Turn it on, then try again.',
273
+ 'server.codex_not_ready': 'Codex is not ready to draw on this Mac.',
274
+ // The local plugin: its files, its work and its reference search.
275
+ 'server.file_missing': "This version's file is missing on this Mac.",
276
+ 'server.file_changed': "This version's file changed on disk.",
277
+ 'server.option_not_drawn': 'This option could not be drawn.',
278
+ 'server.image_no_return': 'No picture came back for this option.',
279
+ 'server.image_call_running': 'This picture is already being drawn.',
280
+ 'server.image_inputs_changed': 'This picture was started with different inputs.',
281
+ 'server.inspiration_fetch_failed': 'The inspiration picture could not be fetched.',
282
+ 'server.no_option_drawn': 'No option could be drawn.',
283
+ 'server.source_changed': 'The picture this round started from changed after the click.',
284
+ 'server.source_missing': 'The version this round stays close to is not in the workspace.',
285
+ 'server.reference_too_large': 'The picture is too large for a reference search.',
286
+ 'server.no_fresh_references': 'Most matching references were used in earlier rounds. Select some inspiration or add a note.',
287
+ 'server.search_limit': 'Reference search is at its limit for now. Try again later.',
288
+ 'server.round_limit': 'This workspace has reached its round limit.',
289
+ 'server.concept_over_limit': 'The brief plus your note is {count} characters; at most {max} fit. Shorten the note by {over, plural, one {# character} other {# characters}}.',
290
+ 'server.superseded': 'A newer action on this option replaced this one.',
291
+ 'server.not_resumable': 'This work is not waiting to be resumed.',
292
+ 'server.approval_missing': 'This work cannot resume: what was approved for it is missing on this Mac.',
293
+ 'server.approval_mismatch': 'This work cannot resume: it no longer matches what was approved.',
294
+ 'server.runner_not_started': 'The background worker did not start: {detail}',
295
+ 'server.image_too_large': 'This picture is too large to show here. Open the file instead.',
296
+ };
297
+ /** The whole English catalogue: every key a translation carries. */
298
+ export const SLATE_UI_MESSAGES = { ...SLATE_UI_COPY, ...SLATE_FORMAT_COPY, ...SLATE_BROWSER_PAGE_COPY, ...SLATE_SERVER_COPY };
299
+ /** The catalogue keys the browser page around the screen uses (it carries only these). */
300
+ export const SLATE_BROWSER_PAGE_KEYS = [
301
+ 'title', 'browserSessionEnded', 'browserRunAgain', 'browserNotRunning', 'browserChoiceSent', 'browserRequestSent', 'browserAgentHasIt', 'browserSessionAnswered',
302
+ ];
119
303
  const SERVICE_ORDER = ['html', 'layerdoc', 'html_fixed', 'svg', 'png', 'jpg', 'webp', 'pdf', 'psd', 'pptx', 'sketch'];
304
+ /** The service formats whose catalogue label carries words, and their messages. */
305
+ const SERVICE_LABEL_KEYS = { html: 'formatResponsiveHtml', html_fixed: 'formatFixedHtml' };
120
306
  export const SLATE_CONVERT_CHOICES = [
121
307
  { value: 'local:html', engine: 'local', output: 'html', label: 'HTML' },
122
308
  { value: 'local:react', engine: 'local', output: 'react', label: 'React' },
123
- { value: 'local:assets', engine: 'local', output: 'assets', label: 'Assets' },
124
- ...SERVICE_ORDER.map((output) => ({ value: `service:${output}`, engine: 'service', output, label: CONVERSION_OUTPUT_FORMATS[output].label })),
309
+ { value: 'local:assets', engine: 'local', output: 'assets', label: SLATE_FORMAT_COPY.formatAssets, labelKey: 'formatAssets' },
310
+ ...SERVICE_ORDER.map((output) => {
311
+ const labelKey = SERVICE_LABEL_KEYS[output];
312
+ return { value: `service:${output}`, engine: 'service', output, label: CONVERSION_OUTPUT_FORMATS[output].label, ...(labelKey ? { labelKey } : {}) };
313
+ }),
125
314
  ];
126
315
  /**
127
316
  * The hosted target's Format select: the two outputs an agent can build in the user's own project from the image, both
@@ -132,33 +321,34 @@ export const SLATE_REMOTE_CONVERT_CHOICES = [
132
321
  { value: 'local:html', engine: 'local', output: 'html', label: 'HTML' },
133
322
  { value: 'local:react', engine: 'local', output: 'react', label: 'React' },
134
323
  ];
135
- /**
136
- * The one line under the Format select that says what the chosen format gives, keyed by the choice's value. Not in the
137
- * copy object: it names formats (HTML, PNG), which the copy test's no-all-caps rule is about labels, not sentences.
138
- */
139
- export const SLATE_CONVERT_DESCRIPTIONS = {
140
- 'local:html': 'Editable HTML and CSS, built on this Mac.',
141
- 'local:react': 'Editable React components and CSS, built on this Mac.',
142
- 'local:assets': "The design's images as separate files, cut out on this Mac.",
143
- 'service:html': 'Responsive HTML that adapts to screen widths, built by 12ui.',
144
- 'service:layerdoc': 'An editable layered document, built by 12ui.',
145
- 'service:html_fixed': 'Fixed-width HTML that matches the picture, built by 12ui.',
146
- 'service:svg': 'A vector SVG, built by 12ui.',
147
- 'service:png': 'A PNG image at the width you choose, made by 12ui.',
148
- 'service:jpg': 'A JPG image at the width you choose, made by 12ui.',
149
- 'service:webp': 'A WebP image at the width you choose, made by 12ui.',
150
- 'service:pdf': 'A PDF file with editable layers, made by 12ui.',
151
- 'service:psd': 'A PSD file with editable layers, made by 12ui.',
152
- 'service:pptx': 'A PowerPoint file with editable layers, made by 12ui.',
153
- 'service:sketch': 'A Sketch file with editable layers, made by 12ui.',
324
+ /** The catalogue message of the line under the Format select, keyed by the choice's value. */
325
+ export const SLATE_CONVERT_DESCRIPTION_KEYS = {
326
+ 'local:html': 'convertHelpLocalHtml',
327
+ 'local:react': 'convertHelpLocalReact',
328
+ 'local:assets': 'convertHelpLocalAssets',
329
+ 'service:html': 'convertHelpServiceHtml',
330
+ 'service:layerdoc': 'convertHelpServiceLayerdoc',
331
+ 'service:html_fixed': 'convertHelpServiceHtmlFixed',
332
+ 'service:svg': 'convertHelpServiceSvg',
333
+ 'service:png': 'convertHelpServicePng',
334
+ 'service:jpg': 'convertHelpServiceJpg',
335
+ 'service:webp': 'convertHelpServiceWebp',
336
+ 'service:pdf': 'convertHelpServicePdf',
337
+ 'service:psd': 'convertHelpServicePsd',
338
+ 'service:pptx': 'convertHelpServicePptx',
339
+ 'service:sketch': 'convertHelpServiceSketch',
154
340
  };
155
341
  /** The hosted target's lines: its agent builds in the person's own project, so nothing is built on a Mac or by 12ui. */
156
- export const SLATE_REMOTE_CONVERT_DESCRIPTIONS = {
157
- 'local:html': 'Your agent builds editable HTML from this image in your project.',
158
- 'local:react': 'Your agent builds React components from this image in your project.',
342
+ export const SLATE_REMOTE_CONVERT_DESCRIPTION_KEYS = {
343
+ 'local:html': 'convertHelpRemoteHtml',
344
+ 'local:react': 'convertHelpRemoteReact',
159
345
  };
346
+ const english = (keys) => (Object.fromEntries(Object.entries(keys).map(([value, key]) => [value, SLATE_UI_MESSAGES[key]])));
347
+ /** The English lines, by choice value, for the copy tests and the CLI's own words. */
348
+ export const SLATE_CONVERT_DESCRIPTIONS = english(SLATE_CONVERT_DESCRIPTION_KEYS);
349
+ export const SLATE_REMOTE_CONVERT_DESCRIPTIONS = english(SLATE_REMOTE_CONVERT_DESCRIPTION_KEYS);
160
350
  /** The widest output the CLI accepts (`MAX_IMAGE_OUTPUT_WIDTH`, pinned equal by a test; that module needs sharp). */
161
351
  export const SLATE_CONVERT_MAX_WIDTH = 8_192;
162
352
  /** How many options the Generate more panel offers, and the one it starts on. A control, so it is not in the copy. */
163
- export const SLATE_MORE_COUNTS = { choices: [1, 2, 4, 8, 12], initial: 4 };
353
+ export const SLATE_MORE_COUNTS = { choices: [1, 2, 4, 6, 8, 12], initial: 6 };
164
354
  //# sourceMappingURL=mcp-slate-ui-copy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-slate-ui-copy.js","sourceRoot":"","sources":["../src/mcp-slate-ui-copy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-slate-ui-copy.js","sourceRoot":"","sources":["../src/mcp-slate-ui-copy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * ICU MessageFormat for the Design workspace screen: the subset its catalogue uses, parsed and formatted without a
3
+ * library. A message is text with arguments: `{name}`, `{name, number}`, `{name, plural, =0 {...} one {...} other
4
+ * {...}}` (with `#` for the number inside a branch) and `{name, select, a {...} other {...}}`. An apostrophe quotes
5
+ * only before a brace, a `#` or another apostrophe (ICU's "double optional" mode), so French and Italian text needs no
6
+ * doubling.
7
+ *
8
+ * SELF-CONTAINED ON PURPOSE, like `mosaic-bands.ts`: the screen is one HTML document with an inline script, so it
9
+ * embeds these functions' own source (`parseIcu.toString()`, ...). Each function closes over nothing in this module:
10
+ * every helper is inside its body, the types are erased at compile time, and no body holds a backtick or a
11
+ * dollar-brace (the script is String.raw).
12
+ */
13
+ export type IcuNode = string | {
14
+ pound: true;
15
+ } | {
16
+ arg: string;
17
+ kind: 'simple' | 'number';
18
+ } | {
19
+ arg: string;
20
+ kind: 'plural' | 'select';
21
+ options: Record<string, IcuNode[]>;
22
+ };
23
+ /** How a locale says a number and which plural category a count takes. */
24
+ export type IcuFormatters = {
25
+ plural: (n: number) => string;
26
+ number: (n: number) => string;
27
+ };
28
+ /** Parses one message; throws on a brace that is not closed or a selector without its branch. */
29
+ export declare function parseIcu(source: string): IcuNode[];
30
+ /**
31
+ * Formats parsed nodes with their values. A number value is said in the locale's digits and grouping; a missing value
32
+ * stays `{name}`, so a slip shows rather than vanishes. A plural takes its `=N` branch, else its category, else other.
33
+ */
34
+ export declare function formatIcu(nodes: IcuNode[], values: Record<string, unknown>, formatters: IcuFormatters): string;
35
+ /**
36
+ * The pseudo-locale (en-XA) of a message, for layout tests: every letter accented, the whole wrapped in ⟦ ⟧, and longer
37
+ * by about as much as translations grow: double for 10 characters or fewer, falling to a third more above 50. A short
38
+ * label grows as one unbreakable compound (the German case); a longer one grows by words. A message with no letters of
39
+ * its own (a join of two others) is left as it is, so the pieces it joins carry the markers.
40
+ */
41
+ export declare function pseudoIcu(nodes: IcuNode[]): IcuNode[];
42
+ /** The argument names a message reads, and for each plural or select argument its branch selectors. */
43
+ export declare function icuArguments(nodes: IcuNode[]): {
44
+ names: string[];
45
+ branches: Record<string, string[]>;
46
+ };
47
+ //# sourceMappingURL=mcp-slate-ui-icu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-slate-ui-icu.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-icu.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,OAAO,GACf,MAAM,GACN;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GACf;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAAE,GAC1C;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;CAAE,CAAC;AAEnF,0EAA0E;AAC1E,MAAM,MAAM,aAAa,GAAG;IAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE,CAAC;AAE7F,iGAAiG;AACjG,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,CA+ElD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,aAAa,GAAG,MAAM,CAoB9G;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CA4BrD;AAED,uGAAuG;AACvG,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CAetG"}