@jxsuite/studio 4.1.0 → 5.1.0

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 (612) hide show
  1. package/README.md +1 -1
  2. package/data/elements-meta.json +5 -15
  3. package/data/html-meta.json +51 -6
  4. package/dist/chunks/{2020-n6tfwnda.js → 2020-g79n01v9.js} +14 -14
  5. package/dist/chunks/action-group-sp6tna8v.js +118 -0
  6. package/dist/chunks/adapter-nj7tnjfn.js +13 -0
  7. package/dist/chunks/cf-account-picker-qwkm9zrf.js +495 -0
  8. package/dist/chunks/cf-settings-71bv5zn9.js +20 -0
  9. package/dist/chunks/color-area-v17df7b8.js +154 -0
  10. package/dist/chunks/color-field-anwybnkn.js +208 -0
  11. package/dist/chunks/color-slider-44ez96fc.js +79 -0
  12. package/dist/chunks/color-xgg3kfw7.js +35 -0
  13. package/dist/chunks/combobox-5e7jev23.js +236 -0
  14. package/dist/chunks/components-vj72gqtq.js +20 -0
  15. package/dist/chunks/content-source-5mex4x1h.js +46 -0
  16. package/dist/chunks/convert-to-repeater-n64h8znc.js +639 -0
  17. package/dist/chunks/dialog-s890b918.js +85 -0
  18. package/dist/chunks/editor-3qhbg51x.js +35 -0
  19. package/dist/chunks/entry-commands-234hjnqw.js +42 -0
  20. package/dist/chunks/extension-sections-3hpcambp.js +651 -0
  21. package/dist/chunks/file-ops-8yhd83xr.js +47 -0
  22. package/dist/chunks/files-hnxqxtsg.js +72 -0
  23. package/dist/chunks/format-host-779sfp2n.js +40 -0
  24. package/dist/chunks/fs-events-b88z7g4h.js +18 -0
  25. package/dist/chunks/git-panel-xwj8fpab.js +49 -0
  26. package/dist/chunks/icons-yy10wk9r.js +402 -0
  27. package/dist/chunks/iframe-entry-15g3n6xv.js +114 -0
  28. package/dist/chunks/iframe-entry-b27vq81n.js +203 -0
  29. package/dist/chunks/iframe-entry-nbyxee1y.js +154 -0
  30. package/dist/chunks/iframe-host-syr0f9sb.js +115 -0
  31. package/dist/chunks/{index-wcnt3r9g.js → index-mdmyx6s2.js} +11 -11
  32. package/dist/chunks/index-n4j7qxyr.js +109 -0
  33. package/dist/chunks/{javascript-q8kpmfah.js → javascript-xvrfrpkb.js} +8 -9
  34. package/dist/chunks/{jsonMode-dkr040ga.js → jsonMode-tyx2kj6p.js} +526 -527
  35. package/dist/chunks/jx-validate-j0wxk72w.js +15 -0
  36. package/dist/chunks/layers-ff81wthn.js +30 -0
  37. package/dist/chunks/layers-panel-pnnghw12.js +40 -0
  38. package/dist/chunks/listbox-6v2ac08j.js +44 -0
  39. package/dist/chunks/lit-html-m244w9nh.js +17 -0
  40. package/dist/chunks/media-picker-cqhhxhhe.js +33 -0
  41. package/dist/chunks/menu-9p2w46gj.js +15 -0
  42. package/dist/chunks/menu-q99sy9rf.js +285 -0
  43. package/dist/chunks/{monaco-binding-rj6xpx9y.js → monaco-binding-sw6en4dw.js} +12 -15
  44. package/dist/chunks/monaco-buffer-bhy3hb6m.js +24 -0
  45. package/dist/chunks/{monaco-setup-vx9bhp1d.js → monaco-setup-8r62fj6y.js} +27 -37
  46. package/dist/chunks/notify-628t0anh.js +21 -0
  47. package/dist/chunks/number-field-5cndyft8.js +72 -0
  48. package/dist/chunks/parse-0zx14y15.js +10 -0
  49. package/dist/chunks/platform-ts9cg1a4.js +15 -0
  50. package/dist/chunks/popover-47z3ytva.js +25 -0
  51. package/dist/chunks/publish-panel-5zt840sy.js +27 -0
  52. package/dist/chunks/quick-search-3748564r.js +45 -0
  53. package/dist/chunks/references-qvvxej7h.js +26 -0
  54. package/dist/chunks/right-panel-eccz92qt.js +45 -0
  55. package/dist/chunks/section-registry-5pq32t0q.js +25 -0
  56. package/dist/chunks/select-2r16ez41.js +49 -0
  57. package/dist/chunks/split-g7nm1rgb.js +191 -0
  58. package/dist/chunks/studio-0hqbpbd0.js +62 -0
  59. package/dist/chunks/{studio-kryvsw6j.js → studio-1k325pwf.js} +48 -48
  60. package/dist/chunks/{studio-b55y6ewx.js → studio-1knfqgy7.js} +58 -58
  61. package/dist/chunks/{studio-2b946z26.js → studio-1z1kcjv4.js} +3628 -6095
  62. package/dist/chunks/studio-3773086z.js +111 -0
  63. package/dist/chunks/{studio-4r1pv6zf.js → studio-38emantv.js} +22 -5
  64. package/dist/chunks/{studio-x813zp48.js → studio-3rz5md06.js} +30 -30
  65. package/dist/chunks/{studio-ynxwkrzd.js → studio-4wbb9ct0.js} +1953 -1785
  66. package/dist/chunks/studio-5te5tqng.js +81 -0
  67. package/dist/chunks/studio-5wt9nvhd.js +4763 -0
  68. package/dist/chunks/{studio-p4ngc046.js → studio-6ewqv390.js} +9 -9
  69. package/dist/chunks/{studio-9ab8gqsm.js → studio-6nzaktvy.js} +7 -7
  70. package/dist/chunks/studio-6xa21ej9.js +28 -0
  71. package/dist/chunks/{studio-5ehhackm.js → studio-727xh0e3.js} +19 -19
  72. package/dist/chunks/{studio-gcye7qka.js → studio-7e11jpa9.js} +21 -21
  73. package/dist/chunks/{studio-q7v10cg2.js → studio-7r42c6ca.js} +17 -7
  74. package/dist/chunks/studio-7xnmgv66.js +13615 -0
  75. package/dist/chunks/studio-8scdew0e.js +258 -0
  76. package/dist/chunks/{studio-fbf92ckf.js → studio-93zafjcm.js} +275 -163
  77. package/dist/chunks/{studio-dg7zyt5x.js → studio-98b3z07n.js} +1 -1
  78. package/dist/chunks/studio-a79k90n9.js +1162 -0
  79. package/dist/chunks/studio-aj37eer3.js +422 -0
  80. package/dist/chunks/studio-b0k5tqgp.js +2432 -0
  81. package/dist/chunks/studio-b4s9eykd.js +2811 -0
  82. package/dist/chunks/{studio-f3wqjtk5.js → studio-d0300636.js} +5076 -18
  83. package/dist/chunks/{studio-b9b6t1dg.js → studio-e1f24eff.js} +5664 -5666
  84. package/dist/chunks/studio-e1pgga3k.js +839 -0
  85. package/dist/chunks/{studio-g1wdche0.js → studio-esrxgwh6.js} +80 -80
  86. package/dist/chunks/{studio-q43a5y9h.js → studio-g3jevyjt.js} +16 -16
  87. package/dist/chunks/studio-gb13095a.js +2806 -0
  88. package/dist/chunks/{studio-3n4ndrzh.js → studio-h4nvnjvz.js} +303 -303
  89. package/dist/chunks/{studio-dm19q43r.js → studio-hhvs4sdg.js} +10 -10
  90. package/dist/chunks/{studio-x4qkdat5.js → studio-js8nv53n.js} +1749 -2481
  91. package/dist/chunks/{studio-qjy2z9bv.js → studio-jxp12rnj.js} +32 -137
  92. package/dist/chunks/{studio-trxrabqf.js → studio-k75n7vhp.js} +527 -283
  93. package/dist/chunks/{studio-q9jd1a60.js → studio-kcgff4r0.js} +15 -18
  94. package/dist/chunks/studio-kkqkcp3d.js +17668 -0
  95. package/dist/chunks/studio-mhhyamxf.js +763 -0
  96. package/dist/chunks/{studio-cft9r4r7.js → studio-nq5yf5mp.js} +22 -22
  97. package/dist/chunks/{studio-685s0ytq.js → studio-nqgawfks.js} +572 -572
  98. package/dist/chunks/studio-nzzpvzx9.js +185 -0
  99. package/dist/chunks/{studio-xrapxwwc.js → studio-p1dw8wfw.js} +55 -29
  100. package/dist/chunks/{studio-3bqpr0zh.js → studio-pxbgypmg.js} +299 -110
  101. package/dist/chunks/studio-q0a3yk4n.js +33 -0
  102. package/dist/chunks/{studio-wcy8trfx.js → studio-q3x06vmj.js} +23 -22
  103. package/dist/chunks/{studio-6yw4y3my.js → studio-qhhm6hbt.js} +8 -8
  104. package/dist/chunks/studio-qk4bfsq2.js +362 -0
  105. package/dist/chunks/{studio-msd847zn.js → studio-qk90fgqm.js} +361 -90
  106. package/dist/chunks/{studio-jkftxyvz.js → studio-r6nvacqs.js} +5861 -2154
  107. package/dist/chunks/{studio-53n8bp04.js → studio-r6xmmtfh.js} +1 -1
  108. package/dist/chunks/{studio-tvgyw9xw.js → studio-rnyf3f8e.js} +83 -250
  109. package/dist/chunks/studio-rs76k67r.js +12 -0
  110. package/dist/chunks/studio-sbjyc8bt.js +954 -0
  111. package/dist/chunks/{studio-1wagb550.js → studio-syg2tadj.js} +11 -11
  112. package/dist/chunks/{studio-t5wqwzdh.js → studio-tjjk7jvk.js} +1 -1
  113. package/dist/chunks/studio-tqgryxwg.js +1171 -0
  114. package/dist/chunks/studio-try13h8c.js +8448 -0
  115. package/dist/chunks/studio-vfq8qpjt.js +1219 -0
  116. package/dist/chunks/studio-vhv5tgxm.js +51 -0
  117. package/dist/chunks/{studio-ahn3pdgx.js → studio-vw7mzp6z.js} +52 -38
  118. package/dist/chunks/studio-wqpngpsk.js +174 -0
  119. package/dist/chunks/studio-wqz6dggm.js +1356 -0
  120. package/dist/chunks/{studio-92ab2jqe.js → studio-y9zedyjn.js} +14 -14
  121. package/dist/chunks/studio-yxa81f45.js +12 -0
  122. package/dist/chunks/studio-zdn2g6dt.js +148 -0
  123. package/dist/chunks/swatch-group-t0n6h2rn.js +139 -0
  124. package/dist/chunks/tabs-wbp1cdws.js +156 -0
  125. package/dist/chunks/textfield-abk6qyee.js +73 -0
  126. package/dist/chunks/toast-780pvfbv.js +27 -0
  127. package/dist/chunks/toast-host-3sqv46sn.js +116 -0
  128. package/dist/chunks/toolbar-xbh5bhtr.js +194 -0
  129. package/dist/chunks/tooltip-eptb614w.js +369 -0
  130. package/dist/chunks/tree-a73p0pqm.js +367 -0
  131. package/dist/chunks/{tsMode-76kr53q0.js → tsMode-jy4m86rv.js} +83 -85
  132. package/dist/chunks/workspace-t55jdjbx.js +69 -0
  133. package/dist/chunks/{ws-client-6shc5rze.js → ws-client-ny4zc51r.js} +20 -22
  134. package/dist/iframe-entry.js +1873 -673
  135. package/dist/studio.js +52757 -36535
  136. package/dist/workers/editor.worker.js +1040 -1085
  137. package/dist/workers/json.worker.js +1946 -1991
  138. package/dist/workers/ts.worker.js +4960 -5005
  139. package/index.html +1 -0
  140. package/package.json +18 -52
  141. package/src/about/about-modal.ts +72 -123
  142. package/src/browse/library-commands.ts +20 -49
  143. package/src/browse/library-layouts.ts +87 -218
  144. package/src/browse/library-pane.ts +406 -438
  145. package/src/canvas/canvas-helpers.ts +0 -49
  146. package/src/canvas/canvas-live-render.ts +25 -2
  147. package/src/canvas/canvas-render.ts +666 -231
  148. package/src/canvas/canvas-surface.ts +0 -1
  149. package/src/canvas/canvas-utils.ts +333 -113
  150. package/src/canvas/dialog-path.ts +76 -0
  151. package/src/canvas/dialog-state.ts +67 -0
  152. package/src/canvas/diff-marks.ts +252 -0
  153. package/src/canvas/diff-toolbar.ts +349 -0
  154. package/src/canvas/diff-view.ts +123 -0
  155. package/src/canvas/edit-width-drag.ts +187 -0
  156. package/src/canvas/edit-width.ts +150 -0
  157. package/src/canvas/iframe-entry.ts +125 -8
  158. package/src/canvas/iframe-host.ts +271 -15
  159. package/src/canvas/iframe-interaction.ts +133 -13
  160. package/src/canvas/iframe-patch.ts +7 -1
  161. package/src/canvas/iframe-position.ts +5 -6
  162. package/src/canvas/iframe-protocol.ts +106 -5
  163. package/src/canvas/iframe-render.ts +373 -5
  164. package/src/canvas/iframe-slash.ts +2 -2
  165. package/src/canvas/iframe-subtree.ts +5 -8
  166. package/src/canvas/path-mapping.ts +25 -3
  167. package/src/canvas/popover-path.ts +106 -0
  168. package/src/canvas/popover-state.ts +155 -0
  169. package/src/canvas/surface-registry.ts +21 -10
  170. package/src/collab/presence-chips.ts +51 -73
  171. package/src/commands/app-commands.ts +10 -0
  172. package/src/commands/budget.ts +12 -0
  173. package/src/commands/command-args.ts +404 -6
  174. package/src/commands/defaults.ts +44 -14
  175. package/src/commands/live-context.ts +11 -5
  176. package/src/commands/reference.ts +12 -2
  177. package/src/commands/registry.ts +177 -10
  178. package/src/commands/run-reported.ts +120 -0
  179. package/src/content/entry-commands.ts +16 -23
  180. package/src/content/entry-editor.ts +144 -101
  181. package/src/editor/canvas-slash-bridge.ts +2 -2
  182. package/src/editor/context-menu.ts +49 -200
  183. package/src/editor/convert-to-component.ts +42 -82
  184. package/src/editor/convert-to-repeater.ts +132 -173
  185. package/src/editor/inline-edit.ts +11 -0
  186. package/src/editor/shortcuts.ts +76 -49
  187. package/src/editor/slash-menu.ts +150 -157
  188. package/src/files/components.ts +39 -0
  189. package/src/files/file-ops.ts +117 -11
  190. package/src/files/files.ts +944 -660
  191. package/src/files/json-layout.ts +474 -0
  192. package/src/files/serialize-document.ts +8 -1
  193. package/src/format/convert-file.ts +16 -10
  194. package/src/format/format-host.ts +50 -1
  195. package/src/github/github-auth.ts +71 -29
  196. package/src/github/github-publish.ts +57 -65
  197. package/src/grid/cell-editors.ts +46 -4
  198. package/src/grid/cell-popovers.ts +65 -62
  199. package/src/grid/grid-open.ts +86 -64
  200. package/src/grid/grid-panel.ts +390 -469
  201. package/src/grid/redirects-grid.ts +40 -44
  202. package/src/hosting/layout.ts +2 -0
  203. package/src/i18n/i18n-commands.ts +137 -62
  204. package/src/media/media-pane.ts +83 -133
  205. package/src/new-project/add-repo-modal.ts +125 -176
  206. package/src/new-project/import-tab.ts +181 -252
  207. package/src/new-project/location-fields.ts +93 -160
  208. package/src/new-project/new-project-modal.ts +376 -367
  209. package/src/packages/jxsuite-update.ts +76 -18
  210. package/src/packages/pull-package-sync.ts +5 -1
  211. package/src/panels/activity-panel.ts +137 -104
  212. package/src/panels/ai-chat/chat-markdown.ts +15 -13
  213. package/src/panels/ai-chat/chat-view.ts +307 -472
  214. package/src/panels/ai-chat/composer.ts +175 -163
  215. package/src/panels/ai-chat/sessions-view.ts +31 -62
  216. package/src/panels/ai-panel.ts +213 -185
  217. package/src/panels/block-action-bar.ts +444 -645
  218. package/src/panels/bottom-dock.ts +112 -47
  219. package/src/panels/chat-panel.ts +19 -14
  220. package/src/panels/data-explorer.ts +141 -102
  221. package/src/panels/data-grid.ts +183 -150
  222. package/src/panels/dnd.ts +75 -20
  223. package/src/panels/editors.ts +26 -19
  224. package/src/panels/elements-panel.ts +243 -186
  225. package/src/panels/empty-state.ts +26 -42
  226. package/src/panels/events-panel.ts +950 -729
  227. package/src/panels/formula-workspace.ts +434 -207
  228. package/src/panels/frontmatter-fields.ts +185 -153
  229. package/src/panels/frontmatter-panel.ts +411 -187
  230. package/src/panels/git-diff-open.ts +148 -0
  231. package/src/panels/git-panel.ts +679 -605
  232. package/src/panels/head-panel.ts +617 -435
  233. package/src/panels/i18n-panel.ts +148 -135
  234. package/src/panels/imports-panel.ts +388 -414
  235. package/src/panels/jump-bar.ts +175 -147
  236. package/src/panels/layers-panel.ts +785 -671
  237. package/src/panels/left-panel.ts +166 -94
  238. package/src/panels/navigator-panels.ts +1 -1
  239. package/src/panels/pane-context.ts +529 -677
  240. package/src/panels/pane-grid.ts +265 -241
  241. package/src/panels/panel-registry.ts +15 -4
  242. package/src/panels/problems-panel.ts +181 -99
  243. package/src/panels/properties-panel.ts +1525 -966
  244. package/src/panels/provenance.ts +31 -113
  245. package/src/panels/quick-search.ts +223 -184
  246. package/src/panels/right-panel.ts +135 -169
  247. package/src/panels/seo-modal.ts +346 -167
  248. package/src/panels/settings-menu.ts +114 -661
  249. package/src/panels/settings-pane.ts +102 -86
  250. package/src/panels/signals-panel.ts +1318 -1172
  251. package/src/panels/statement-editor.ts +556 -428
  252. package/src/panels/style-panel.ts +1367 -630
  253. package/src/panels/style-utils.ts +36 -32
  254. package/src/panels/stylebook-doc.ts +30 -73
  255. package/src/panels/stylebook-layers-panel.ts +202 -109
  256. package/src/panels/stylebook-panel.ts +124 -88
  257. package/src/panels/tab-strip.ts +386 -288
  258. package/src/platforms/cloud.ts +106 -16
  259. package/src/platforms/devserver.ts +13 -0
  260. package/src/publish/deploy-checklist.ts +124 -78
  261. package/src/publish/publish-commands.ts +4 -12
  262. package/src/publish/publish-panel.ts +134 -328
  263. package/src/services/a11y-report.ts +100 -43
  264. package/src/services/ai-command-tools.ts +538 -0
  265. package/src/services/ai-project-tools.ts +8 -2
  266. package/src/services/ai-session-store.ts +6 -0
  267. package/src/services/ai-system-prompt.ts +112 -24
  268. package/src/services/ai-tools.ts +36 -212
  269. package/src/services/ai-write-report.ts +174 -0
  270. package/src/services/document-assistant.ts +59 -8
  271. package/src/services/idle.ts +16 -14
  272. package/src/services/live-surfaces.ts +237 -0
  273. package/src/services/model-uri.ts +75 -0
  274. package/src/services/notify.ts +63 -6
  275. package/src/services/popover-report.ts +325 -0
  276. package/src/services/surface-registry.ts +56 -0
  277. package/src/services/tool-executor.ts +6 -0
  278. package/src/settings/contexts-section.ts +301 -299
  279. package/src/settings/contributed-section.ts +361 -222
  280. package/src/settings/css-vars-editor.ts +320 -325
  281. package/src/settings/defs-editor.ts +572 -535
  282. package/src/settings/dependencies-editor.ts +79 -107
  283. package/src/settings/extension-commands.ts +379 -0
  284. package/src/settings/extension-rows.ts +113 -0
  285. package/src/settings/extensions-section.ts +287 -0
  286. package/src/settings/general-settings.ts +130 -181
  287. package/src/settings/head-editor.ts +10 -305
  288. package/src/settings/locales-section.ts +146 -196
  289. package/src/settings/preferences-accounts.ts +1 -1
  290. package/src/settings/preferences-dialog.ts +350 -330
  291. package/src/settings/project-sections.ts +108 -181
  292. package/src/settings/schema-field-ui.ts +11 -399
  293. package/src/settings/section-registry.ts +8 -1
  294. package/src/settings/settings-document.ts +31 -29
  295. package/src/shell/tree.ts +42 -87
  296. package/src/shell.ts +48 -36
  297. package/src/studio.ts +104 -69
  298. package/src/style/token-ref.ts +0 -39
  299. package/src/surfaces/about.json +263 -0
  300. package/src/surfaces/about.ts +163 -0
  301. package/src/surfaces/add-repo.json +486 -0
  302. package/src/surfaces/add-repo.ts +236 -0
  303. package/src/surfaces/ai-chat.json +2185 -0
  304. package/src/surfaces/ai-chat.ts +549 -0
  305. package/src/surfaces/ai-credentials-form.json +332 -0
  306. package/src/surfaces/ai-credentials-form.ts +151 -0
  307. package/src/surfaces/ai-managed-connect.json +108 -0
  308. package/src/surfaces/ai-managed-connect.ts +123 -0
  309. package/src/surfaces/ai-model-picker.json +114 -0
  310. package/src/surfaces/ai-model-picker.ts +139 -0
  311. package/src/surfaces/block-action-bar.json +640 -0
  312. package/src/surfaces/block-action-bar.ts +368 -0
  313. package/src/surfaces/bottom-dock.json +154 -0
  314. package/src/surfaces/bottom-dock.ts +125 -0
  315. package/src/surfaces/canvas-stage.json +444 -0
  316. package/src/surfaces/canvas-stage.ts +253 -0
  317. package/src/surfaces/cf-account-picker.json +300 -0
  318. package/src/surfaces/cf-account-picker.ts +214 -0
  319. package/src/surfaces/commandbar.json +985 -0
  320. package/src/{panels/toolbar.ts → surfaces/commandbar.ts} +417 -391
  321. package/src/surfaces/convert-repeater.json +309 -0
  322. package/src/surfaces/convert-repeater.ts +276 -0
  323. package/src/surfaces/data-actions.json +157 -0
  324. package/src/surfaces/data-actions.ts +115 -0
  325. package/src/surfaces/dialog.json +289 -0
  326. package/src/surfaces/dialog.ts +343 -0
  327. package/src/surfaces/diff-toolbar.json +266 -0
  328. package/src/surfaces/diff-toolbar.ts +139 -0
  329. package/src/surfaces/doc-header.json +739 -0
  330. package/src/surfaces/doc-header.ts +223 -0
  331. package/src/surfaces/empty-state.json +152 -0
  332. package/src/surfaces/empty-state.ts +173 -0
  333. package/src/surfaces/entry-editor.json +281 -0
  334. package/src/surfaces/entry-editor.ts +191 -0
  335. package/src/surfaces/expression-editor.json +977 -0
  336. package/src/surfaces/expression-editor.ts +266 -0
  337. package/src/surfaces/files-panel.json +592 -0
  338. package/src/surfaces/files-panel.ts +301 -0
  339. package/src/surfaces/formula-palette.json +364 -0
  340. package/src/surfaces/formula-palette.ts +340 -0
  341. package/src/surfaces/git-panel.json +1822 -0
  342. package/src/surfaces/git-panel.ts +272 -0
  343. package/src/surfaces/github-auth.json +112 -0
  344. package/src/surfaces/github-auth.ts +139 -0
  345. package/src/surfaces/github-publish.json +206 -0
  346. package/src/surfaces/github-publish.ts +169 -0
  347. package/src/surfaces/grid-cell.json +218 -0
  348. package/src/surfaces/grid-cell.ts +120 -0
  349. package/src/surfaces/grid-open.json +147 -0
  350. package/src/surfaces/grid-open.ts +87 -0
  351. package/src/surfaces/grid-panel.json +706 -0
  352. package/src/surfaces/grid-panel.ts +206 -0
  353. package/src/surfaces/grid-replace.json +179 -0
  354. package/src/surfaces/grid-replace.ts +89 -0
  355. package/src/surfaces/grid-views.json +446 -0
  356. package/src/surfaces/grid-views.ts +172 -0
  357. package/src/surfaces/inspector-dock.json +187 -0
  358. package/src/surfaces/inspector-dock.ts +161 -0
  359. package/src/surfaces/jump-bar.json +243 -0
  360. package/src/surfaces/jump-bar.ts +129 -0
  361. package/src/surfaces/jxsuite-update.json +146 -0
  362. package/src/surfaces/jxsuite-update.ts +149 -0
  363. package/src/surfaces/library-pane.json +1509 -0
  364. package/src/surfaces/library-pane.ts +363 -0
  365. package/src/surfaces/logic-panel.json +1949 -0
  366. package/src/surfaces/logic-panel.ts +369 -0
  367. package/src/surfaces/logic-workspace.json +685 -0
  368. package/src/surfaces/logic-workspace.ts +238 -0
  369. package/src/surfaces/media-browser.json +303 -0
  370. package/src/surfaces/media-browser.ts +145 -0
  371. package/src/surfaces/media-field.json +163 -0
  372. package/src/surfaces/media-field.ts +116 -0
  373. package/src/surfaces/media-pane.json +513 -0
  374. package/src/surfaces/media-pane.ts +197 -0
  375. package/src/surfaces/menu.json +232 -0
  376. package/src/surfaces/menu.ts +375 -0
  377. package/src/surfaces/navigator-dock.json +113 -0
  378. package/src/surfaces/navigator-dock.ts +130 -0
  379. package/src/surfaces/new-project.json +1654 -0
  380. package/src/surfaces/new-project.ts +411 -0
  381. package/src/surfaces/palette.json +535 -0
  382. package/src/surfaces/pane-context.json +1497 -0
  383. package/src/surfaces/pane-context.ts +513 -0
  384. package/src/surfaces/pane-grid.json +188 -0
  385. package/src/surfaces/pane-grid.ts +250 -0
  386. package/src/surfaces/panel-activity.json +563 -0
  387. package/src/surfaces/panel-activity.ts +187 -0
  388. package/src/surfaces/panel-data.json +141 -0
  389. package/src/surfaces/panel-data.ts +156 -0
  390. package/src/surfaces/panel-deploy-checklist.json +283 -0
  391. package/src/surfaces/panel-deploy-checklist.ts +175 -0
  392. package/src/surfaces/panel-elements.json +367 -0
  393. package/src/surfaces/panel-elements.ts +175 -0
  394. package/src/surfaces/panel-i18n.json +569 -0
  395. package/src/surfaces/panel-i18n.ts +212 -0
  396. package/src/surfaces/panel-imports.json +780 -0
  397. package/src/surfaces/panel-imports.ts +209 -0
  398. package/src/surfaces/panel-outline.json +734 -0
  399. package/src/surfaces/panel-outline.ts +326 -0
  400. package/src/surfaces/panel-page.json +1017 -0
  401. package/src/surfaces/panel-page.ts +240 -0
  402. package/src/surfaces/panel-problems.json +497 -0
  403. package/src/surfaces/panel-problems.ts +157 -0
  404. package/src/surfaces/panel-signals.json +1973 -0
  405. package/src/surfaces/panel-signals.ts +436 -0
  406. package/src/surfaces/panel-stylebook-layers.json +317 -0
  407. package/src/surfaces/panel-stylebook-layers.ts +155 -0
  408. package/src/surfaces/preferences.json +850 -0
  409. package/src/surfaces/preferences.ts +332 -0
  410. package/src/surfaces/progress-modal.json +110 -0
  411. package/src/surfaces/progress-modal.ts +150 -0
  412. package/src/surfaces/properties-panel.json +1578 -0
  413. package/src/surfaces/properties-panel.ts +337 -0
  414. package/src/surfaces/publish.json +945 -0
  415. package/src/surfaces/publish.ts +392 -0
  416. package/src/surfaces/push-plan.json +110 -0
  417. package/src/surfaces/push-plan.ts +87 -0
  418. package/src/surfaces/rail.json +255 -0
  419. package/src/surfaces/rail.ts +206 -0
  420. package/src/surfaces/reference-field.json +191 -0
  421. package/src/surfaces/reference-field.ts +168 -0
  422. package/src/surfaces/schema-builder.json +1011 -0
  423. package/src/surfaces/schema-builder.ts +181 -0
  424. package/src/surfaces/schema-form.json +1013 -0
  425. package/src/surfaces/schema-form.ts +287 -0
  426. package/src/surfaces/secret-field.json +60 -0
  427. package/src/surfaces/secret-field.ts +146 -0
  428. package/src/surfaces/seo.json +932 -0
  429. package/src/surfaces/seo.ts +334 -0
  430. package/src/surfaces/settings-contexts.json +538 -0
  431. package/src/surfaces/settings-contexts.ts +196 -0
  432. package/src/surfaces/settings-contributed.json +489 -0
  433. package/src/surfaces/settings-contributed.ts +199 -0
  434. package/src/surfaces/settings-css-vars.json +820 -0
  435. package/src/surfaces/settings-css-vars.ts +199 -0
  436. package/src/surfaces/settings-defs.json +1363 -0
  437. package/src/surfaces/settings-defs.ts +232 -0
  438. package/src/surfaces/settings-deploy.json +108 -0
  439. package/src/surfaces/settings-deploy.ts +135 -0
  440. package/src/surfaces/settings-extensions.json +486 -0
  441. package/src/surfaces/settings-extensions.ts +201 -0
  442. package/src/surfaces/settings-head.json +779 -0
  443. package/src/surfaces/settings-head.ts +397 -0
  444. package/src/surfaces/settings-locales.json +420 -0
  445. package/src/surfaces/settings-locales.ts +137 -0
  446. package/src/surfaces/settings-overview.json +423 -0
  447. package/src/surfaces/settings-overview.ts +218 -0
  448. package/src/surfaces/settings-packages.json +549 -0
  449. package/src/surfaces/settings-packages.ts +158 -0
  450. package/src/surfaces/settings-pane.json +147 -0
  451. package/src/surfaces/settings-pane.ts +150 -0
  452. package/src/surfaces/settings-rawjson.json +104 -0
  453. package/src/surfaces/settings-rawjson.ts +107 -0
  454. package/src/surfaces/shell.json +99 -0
  455. package/src/surfaces/shell.ts +30 -0
  456. package/src/surfaces/slash-menu.json +180 -0
  457. package/src/surfaces/slash-menu.ts +272 -0
  458. package/src/surfaces/statements.json +607 -0
  459. package/src/surfaces/statements.ts +238 -0
  460. package/src/surfaces/statusbar.json +94 -0
  461. package/src/{panels → surfaces}/statusbar.ts +164 -90
  462. package/src/surfaces/style-panel.json +1643 -0
  463. package/src/surfaces/style-panel.ts +338 -0
  464. package/src/surfaces/stylebook-chrome.json +122 -0
  465. package/src/surfaces/stylebook-chrome.ts +122 -0
  466. package/src/surfaces/tab-strip.json +448 -0
  467. package/src/surfaces/tab-strip.ts +200 -0
  468. package/src/surfaces/target-line.json +419 -0
  469. package/src/surfaces/target-line.ts +349 -0
  470. package/src/surfaces/toasts.json +189 -0
  471. package/src/surfaces/welcome.json +571 -0
  472. package/src/surfaces/welcome.ts +338 -0
  473. package/src/tabs/project-config.ts +111 -21
  474. package/src/tabs/tab.ts +52 -1
  475. package/src/types.ts +22 -0
  476. package/src/ui/ai-credentials-form.ts +104 -100
  477. package/src/ui/ai-managed-connect.ts +54 -36
  478. package/src/ui/ai-model-picker.ts +75 -47
  479. package/src/ui/cf-account-picker.ts +76 -141
  480. package/src/ui/color-selector.ts +80 -301
  481. package/src/ui/dynamic-slot.ts +43 -283
  482. package/src/ui/expression-editor.ts +797 -576
  483. package/src/ui/field-input.ts +8 -181
  484. package/src/ui/form-controls.ts +838 -366
  485. package/src/ui/formula-chips.ts +80 -85
  486. package/src/ui/kit.ts +33 -0
  487. package/src/ui/layers.ts +296 -593
  488. package/src/ui/media-picker.ts +203 -284
  489. package/src/ui/panel-resize.ts +251 -64
  490. package/src/ui/popover-surface.ts +153 -0
  491. package/src/ui/progress-modal.ts +22 -60
  492. package/src/ui/regions.ts +13 -7
  493. package/src/ui/schema-form.ts +906 -440
  494. package/src/ui/surface.ts +122 -0
  495. package/src/ui/unit-selector.ts +15 -131
  496. package/src/ui/value-source.ts +14 -0
  497. package/src/ui/virtual-window.ts +88 -9
  498. package/src/utils/canvas-media.ts +72 -0
  499. package/src/utils/edit-display.ts +7 -2
  500. package/src/utils/element-selectors.ts +69 -0
  501. package/src/utils/link-target.ts +2 -2
  502. package/src/utils/studio-utils.ts +0 -10
  503. package/src/view.ts +15 -0
  504. package/src/workspace/pane-derive.ts +36 -14
  505. package/src/workspace/workspace.ts +75 -6
  506. package/styles/canvas.css +72 -467
  507. package/styles/forced-colors.css +48 -82
  508. package/styles/forced-colors.json +41 -0
  509. package/styles/inspector.css +2 -1301
  510. package/styles/overlays.css +96 -2823
  511. package/styles/panels.css +6 -1423
  512. package/styles/shell-frame.css +272 -0
  513. package/styles/shell-frame.json +227 -0
  514. package/styles/shell.css +0 -1568
  515. package/styles/tokens.css +65 -136
  516. package/styles/tokens.json +84 -0
  517. package/dist/chunks/Overlay.dev-etqjwyf9.js +0 -23
  518. package/dist/chunks/adapter-jkcyhgtr.js +0 -14
  519. package/dist/chunks/cf-account-picker-en86v7x7.js +0 -163
  520. package/dist/chunks/cf-settings-45fgyx8y.js +0 -21
  521. package/dist/chunks/components-zmx10t62.js +0 -21
  522. package/dist/chunks/content-source-48xg86wj.js +0 -49
  523. package/dist/chunks/convert-to-repeater-43tfn7cs.js +0 -268
  524. package/dist/chunks/editor-cptq5jp1.js +0 -37
  525. package/dist/chunks/entry-commands-e63f1xc0.js +0 -46
  526. package/dist/chunks/extension-sections-txv08xxg.js +0 -311
  527. package/dist/chunks/file-ops-wbh4hhsx.js +0 -48
  528. package/dist/chunks/files-3kfkwhk4.js +0 -93
  529. package/dist/chunks/flow-qbfgrpeh.js +0 -634
  530. package/dist/chunks/focus-trap.esm-9t2drp0g.js +0 -1025
  531. package/dist/chunks/focus-visible-6eg70z18.js +0 -167
  532. package/dist/chunks/format-host-w16q81tf.js +0 -43
  533. package/dist/chunks/fs-events-hrrg328g.js +0 -21
  534. package/dist/chunks/git-panel-532whr1y.js +0 -59
  535. package/dist/chunks/index-zqxmqxmh.js +0 -109
  536. package/dist/chunks/jx-validate-8er6gbxy.js +0 -19
  537. package/dist/chunks/layers-panel-07hm7g5j.js +0 -67
  538. package/dist/chunks/layers-q75tj2mf.js +0 -45
  539. package/dist/chunks/lit-html-j055mkh8.js +0 -22
  540. package/dist/chunks/monaco-buffer-dqw0xxpx.js +0 -25
  541. package/dist/chunks/notify-yjm79n4s.js +0 -30
  542. package/dist/chunks/parse-24d0gay3.js +0 -19
  543. package/dist/chunks/platform-ba1j1gbh.js +0 -16
  544. package/dist/chunks/publish-panel-v9st96ja.js +0 -29
  545. package/dist/chunks/quick-search-zccjp6gv.js +0 -66
  546. package/dist/chunks/references-3qx8fkyp.js +0 -29
  547. package/dist/chunks/right-panel-vm3b6kwy.js +0 -46
  548. package/dist/chunks/section-registry-sx1ykvkw.js +0 -30
  549. package/dist/chunks/sp-overlay.dev-qgvhnxf4.js +0 -18
  550. package/dist/chunks/sp-popover.dev-n2etmqdp.js +0 -9
  551. package/dist/chunks/sp-progress-circle.dev-hryhj0es.js +0 -15
  552. package/dist/chunks/sp-tooltip.dev-4sastdnw.js +0 -15
  553. package/dist/chunks/sp-tray.dev-tkbscm06.js +0 -199
  554. package/dist/chunks/studio-0a5qrh01.js +0 -3
  555. package/dist/chunks/studio-0bq6eh7v.js +0 -12
  556. package/dist/chunks/studio-18j3bmcz.js +0 -14
  557. package/dist/chunks/studio-1ngbejft.js +0 -181
  558. package/dist/chunks/studio-4b5z1x43.js +0 -424
  559. package/dist/chunks/studio-4n2b5gzb.js +0 -357
  560. package/dist/chunks/studio-4rzyrtjz.js +0 -426
  561. package/dist/chunks/studio-5fx3g9jg.js +0 -4325
  562. package/dist/chunks/studio-5myknm0a.js +0 -1903
  563. package/dist/chunks/studio-7afd21nw.js +0 -67
  564. package/dist/chunks/studio-7nte2hj4.js +0 -613
  565. package/dist/chunks/studio-8jpzqk5s.js +0 -128
  566. package/dist/chunks/studio-8q517dfr.js +0 -24
  567. package/dist/chunks/studio-950k0dx6.js +0 -6939
  568. package/dist/chunks/studio-9n4mrmnb.js +0 -184
  569. package/dist/chunks/studio-a0tswy0w.js +0 -58
  570. package/dist/chunks/studio-ahnzd9rg.js +0 -23
  571. package/dist/chunks/studio-bgxt93ga.js +0 -62
  572. package/dist/chunks/studio-cmb03bg5.js +0 -13890
  573. package/dist/chunks/studio-d1ks410h.js +0 -175
  574. package/dist/chunks/studio-ef49pnzx.js +0 -387
  575. package/dist/chunks/studio-eqq1w638.js +0 -113
  576. package/dist/chunks/studio-ew0djmhg.js +0 -341
  577. package/dist/chunks/studio-gfgb8pe6.js +0 -1652
  578. package/dist/chunks/studio-h4rxscfc.js +0 -10
  579. package/dist/chunks/studio-jc994dnr.js +0 -1066
  580. package/dist/chunks/studio-kyh9avvv.js +0 -28
  581. package/dist/chunks/studio-m3hwn7y1.js +0 -120
  582. package/dist/chunks/studio-mtfnaqs9.js +0 -659
  583. package/dist/chunks/studio-n6j9t10q.js +0 -318
  584. package/dist/chunks/studio-n8b9wqwy.js +0 -291
  585. package/dist/chunks/studio-qcy05dp8.js +0 -1743
  586. package/dist/chunks/studio-qq6jym04.js +0 -53
  587. package/dist/chunks/studio-rdx8jcxy.js +0 -83
  588. package/dist/chunks/studio-rn9ta2mz.js +0 -111
  589. package/dist/chunks/studio-t7qb9db8.js +0 -665
  590. package/dist/chunks/studio-tmc5emrw.js +0 -8
  591. package/dist/chunks/studio-z6nw2ek2.js +0 -18
  592. package/dist/chunks/studio-zczps70q.js +0 -378
  593. package/dist/chunks/studio-zqazsct2.js +0 -1823
  594. package/dist/chunks/workspace-fjx52ryv.js +0 -89
  595. package/src/panels/activity-bar.ts +0 -251
  596. package/src/panels/panel-scheduler.ts +0 -219
  597. package/src/panels/style-inputs.ts +0 -237
  598. package/src/panels/target-line.ts +0 -274
  599. package/src/panels/welcome-screen.ts +0 -346
  600. package/src/ui/button-group.ts +0 -102
  601. package/src/ui/choice-field.ts +0 -72
  602. package/src/ui/field-row.ts +0 -249
  603. package/src/ui/formula-palette.ts +0 -213
  604. package/src/ui/icons.ts +0 -52
  605. package/src/ui/jx-theme.ts +0 -130
  606. package/src/ui/spectrum.ts +0 -340
  607. package/src/ui/value-selector.ts +0 -174
  608. package/src/ui/widgets.ts +0 -172
  609. /package/dist/chunks/{javascript-s56a8dpk.css → javascript-4abzjcy9.css} +0 -0
  610. /package/dist/chunks/{jsonMode-zr9sw0c7.css → jsonMode-vvmpmk34.css} +0 -0
  611. /package/dist/chunks/{monaco-setup-pav68602.css → monaco-setup-8vbyqnhr.css} +0 -0
  612. /package/dist/chunks/{tsMode-ef187txx.css → tsMode-hnxxb73h.css} +0 -0
@@ -0,0 +1,1654 @@
1
+ {
2
+ "$schema": "https://jxsuite.com/schema/v1",
3
+ "$id": "StudioNewProject",
4
+ "$description": "The New Project wizard: two steps in one dialog. Step 1 asks where the site comes from — a starter gallery that ends with one Start from scratch card, an Import of a site that already exists, or an Agent brief — and step 2 asks what it is called and where it is written. A `jx-dialog`, so the platform owns modality, Escape, focus restoration and the backdrop, which is what retired the fixed `.new-project-modal` card, the `<sp-underlay>` beside it, the `z-index: 1000` that card needed to climb back out from under its own scrim, and the hand-drawn header with its own close button. The footer is the dialog's too: Cancel, Back and the primary are `cancelLabel`, `secondaryLabel` and `confirmLabel`, so the wizard says which answers exist by naming them rather than by drawing three buttons per step. Nothing here knows what a starter is, which platform writes to a repository rather than a folder, what makes an AI gate open, or how a breakpoint policy is spelled — `new-project/new-project-modal.ts` keeps the flow, `new-project/import-tab.ts` the brief and `new-project/location-fields.ts` the destination, and all three hand over strings, flags and one discriminant per branch. The three AI controllers are islands: their own mounted documents, placed by the adapter into boxes this document renders empty (§9.4).",
5
+ "tagName": "jx-dialog",
6
+ "$props": {
7
+ "headline": {
8
+ "$ref": "#/state/headline"
9
+ },
10
+ "confirmLabel": {
11
+ "$ref": "#/state/confirmLabel"
12
+ },
13
+ "secondaryLabel": {
14
+ "$ref": "#/state/secondaryLabel"
15
+ },
16
+ "cancelLabel": "Cancel",
17
+ "dismissible": true,
18
+ "size": "lg"
19
+ },
20
+ "attributes": {
21
+ "part": "new-project"
22
+ },
23
+ "oncancel": {
24
+ "$prototype": "Function",
25
+ "body": [
26
+ {
27
+ "operator": "call",
28
+ "target": {
29
+ "$ref": "#/state/closed"
30
+ },
31
+ "value": []
32
+ }
33
+ ]
34
+ },
35
+ "onclose": {
36
+ "$prototype": "Function",
37
+ "body": [
38
+ {
39
+ "operator": "call",
40
+ "target": {
41
+ "$ref": "#/state/closed"
42
+ },
43
+ "value": []
44
+ }
45
+ ]
46
+ },
47
+ "onconfirm": {
48
+ "$prototype": "Function",
49
+ "body": [
50
+ {
51
+ "operator": "call",
52
+ "target": {
53
+ "$ref": "#/state/confirm"
54
+ },
55
+ "value": []
56
+ }
57
+ ]
58
+ },
59
+ "onsecondary": {
60
+ "$prototype": "Function",
61
+ "body": [
62
+ {
63
+ "operator": "call",
64
+ "target": {
65
+ "$ref": "#/state/secondary"
66
+ },
67
+ "value": []
68
+ }
69
+ ]
70
+ },
71
+ "style": {
72
+ "$description": "Forty-three `.new-project-*` rules in `styles/overlays.css` become the parts below, and eight of them do not travel. `.new-project-modal` was a fixed, centred, bordered, shadowed card with its own width and `z-index: 1000`, and a modal `<dialog>` is every one of those; `.new-project-modal-header`, `.new-project-modal-title`, `.new-project-modal-body` and `.new-project-modal-footer` are the header, headline, scroll body and button row `jx-dialog` already draws; `.new-project-tabs` drew a rule under the strip that `jx-tabs` draws itself; `.new-project-error--global` pinned the backend error outside the scroll body, which a dialog that scrolls as one has nowhere to put; and `.new-project-field` / `.new-project-label` drew a label above a control, which is `jx-field` with `span` — with the label actually NAMING the control, which a bare `<span>` beside a textfield never did. Three repairs travel with the rest. Every `--spectrum-font-size-*` reference is gone: those names resolve only inside `<sp-theme>` and a document mounted in the dialog layer is outside it, so all eleven would silently have taken their hard-coded fallback. `var(--accent, #3b82f6)` on the selected card loses the hex, which was the same bug written the other way round. And the two thumbnail wells read `var(--bg-elevated, #1a1a1a)` for a token no stylesheet in this package defines, so the fallback was not a fallback — it was the value; they take `--bg-input`, which is the recessed surface the rest of the chrome uses.",
73
+ "& [part=\"wizard\"]": {
74
+ "display": "flex",
75
+ "flexDirection": "column",
76
+ "gap": "var(--jx-space-4)",
77
+ "fontFamily": "var(--jx-font-sans)",
78
+ "color": "var(--fg)"
79
+ },
80
+ "& [part=\"blurb\"]": {
81
+ "$description": "The sentence at the top of a source tab: what this path does, before any field asks for anything. `blurb` rather than `intro`, and the footnote below is `footnote` rather than `note`, because the three AI controllers mount their own documents INSIDE this one: `surfaces/ai-managed-connect.json` draws a `[part=\"intro\"]` and `surfaces/ai-credentials-form.json` a `[part=\"note\"]`, and a scoped rule on either name would restyle a surface this document does not own.",
82
+ "margin": "0",
83
+ "fontSize": "var(--jx-text-md)",
84
+ "lineHeight": "var(--jx-leading-lg)",
85
+ "color": "var(--fg-dim)"
86
+ },
87
+ "& [part=\"gallery\"]": {
88
+ "display": "grid",
89
+ "gridTemplateColumns": "1fr 1fr 1fr",
90
+ "gap": "var(--jx-space-3)"
91
+ },
92
+ "& [part=\"card\"]": {
93
+ "$description": "A whole card is the button, because the answer is the starter rather than a control inside it. `font: inherit` because a `<button>` does not inherit type, and what it inherits here is the dialog's own body size rather than a number this surface picked.",
94
+ "display": "flex",
95
+ "flexDirection": "column",
96
+ "overflow": "hidden",
97
+ "padding": "0",
98
+ "border": "1px solid var(--border)",
99
+ "borderRadius": "var(--jx-radius-md)",
100
+ "background": "var(--bg-panel)",
101
+ "font": "inherit",
102
+ "color": "var(--fg)",
103
+ "textAlign": "left",
104
+ "cursor": "pointer",
105
+ "&:hover": {
106
+ "borderColor": "var(--fg-dim)"
107
+ },
108
+ "&[data-selected]": {
109
+ "borderColor": "var(--accent)",
110
+ "boxShadow": "0 0 0 1px var(--accent)"
111
+ },
112
+ "&[data-art=\"blank\"]": {
113
+ "$description": "The one non-starter card, last in the gallery and spanning it, so the sites lead.",
114
+ "gridColumn": "1 / -1",
115
+ "flexDirection": "row",
116
+ "alignItems": "center",
117
+ "& [part=\"blank\"]": {
118
+ "width": "96px",
119
+ "flexShrink": "0"
120
+ }
121
+ }
122
+ },
123
+ "& [part=\"thumb\"]": {
124
+ "display": "block",
125
+ "width": "100%",
126
+ "aspectRatio": "16 / 10",
127
+ "objectFit": "cover",
128
+ "background": "var(--bg-input)"
129
+ },
130
+ "& [part=\"blank\"]": {
131
+ "display": "flex",
132
+ "alignItems": "center",
133
+ "justifyContent": "center",
134
+ "aspectRatio": "16 / 10",
135
+ "background": "var(--bg-input)",
136
+ "fontSize": "28px",
137
+ "color": "var(--fg-dim)"
138
+ },
139
+ "& [part=\"card-body\"]": {
140
+ "display": "flex",
141
+ "flexDirection": "column",
142
+ "gap": "var(--jx-space-1)",
143
+ "padding": "var(--jx-space-2) var(--jx-space-3) var(--jx-space-3)"
144
+ },
145
+ "& [part=\"card-name\"]": {
146
+ "fontSize": "var(--jx-text-md)",
147
+ "fontWeight": "600"
148
+ },
149
+ "& [part=\"card-tag\"]": {
150
+ "fontSize": "var(--jx-text-sm)",
151
+ "lineHeight": "var(--jx-leading-sm)",
152
+ "color": "var(--fg-dim)"
153
+ },
154
+ "& [part=\"creds\"]": {
155
+ "$description": "The gate's column: the keyless offer above the key form, both of them mounted documents of their own. `max-width` so three text fields do not stretch to the width of a large dialog.",
156
+ "display": "flex",
157
+ "flexDirection": "column",
158
+ "maxWidth": "480px"
159
+ },
160
+ "& [part=\"managed-island\"], & [part=\"creds-island\"], & [part=\"model-island\"]": {
161
+ "$description": "An island's box lays nothing out: each controller's own host is `display: contents`, so what the column above sees is the mounted document's own root and not a wrapper that would become the flex item in its place.",
162
+ "display": "contents"
163
+ },
164
+ "& [part=\"grid\"]": {
165
+ "display": "grid",
166
+ "gridTemplateColumns": "1fr 1fr",
167
+ "gap": "var(--jx-space-4)"
168
+ },
169
+ "& [part=\"breakpoints\"]": {
170
+ "$description": "A mode picker, whichever value control that mode takes, and the rounding rule. It wraps rather than scrolls — the widths field is the one that needs room, and it should get it.",
171
+ "display": "flex",
172
+ "flexWrap": "wrap",
173
+ "alignItems": "center",
174
+ "gap": "var(--jx-space-3)"
175
+ },
176
+ "& [part=\"bp-mode\"], & [part=\"bp-rounding\"]": {
177
+ "minWidth": "132px"
178
+ },
179
+ "& [part=\"bp-count\"], & [part=\"min-fidelity\"]": {
180
+ "width": "96px"
181
+ },
182
+ "& [part=\"bp-widths\"]": {
183
+ "flex": "1",
184
+ "minWidth": "160px"
185
+ },
186
+ "& [part=\"location-row-controls\"]": {
187
+ "$description": "The Location field takes the slack; Browse… stays its natural width.",
188
+ "display": "flex",
189
+ "alignItems": "center",
190
+ "gap": "var(--jx-space-3)"
191
+ },
192
+ "& [part=\"url\"], & [part=\"prompt\"], & [part=\"import-prompt\"], & [part=\"name\"], & [part=\"slug\"], & [part=\"location\"], & [part=\"owner\"], & [part=\"visibility\"]": {
193
+ "$description": "The kit's fields are `inline-flex`, which is right in a row of controls and wrong for the one control of a `span` row. Named one by one rather than as `& jx-textfield`, because the credentials island below is three more text fields in the same tree and none of them is this document's to size.",
194
+ "display": "flex",
195
+ "width": "100%"
196
+ },
197
+ "& [part=\"context\"]": {
198
+ "$description": "WHICH source this project is being made from, said on the step that no longer shows the tab strip.",
199
+ "margin": "0",
200
+ "fontSize": "var(--jx-text-md)",
201
+ "color": "var(--fg-dim)"
202
+ },
203
+ "& [part=\"destination-preview\"]": {
204
+ "$description": "Live preview of where the project will land — the answer to “where did that go?”.",
205
+ "margin": "0",
206
+ "fontSize": "var(--jx-text-md)",
207
+ "color": "var(--fg-dim)",
208
+ "overflowWrap": "anywhere"
209
+ },
210
+ "& [part=\"destination-target\"]": {
211
+ "fontFamily": "var(--font-mono)",
212
+ "color": "var(--fg)"
213
+ },
214
+ "& [part=\"footnote\"]": {
215
+ "margin": "0",
216
+ "fontSize": "var(--jx-text-md)",
217
+ "lineHeight": "var(--jx-leading-lg)",
218
+ "color": "var(--fg-dim)"
219
+ },
220
+ "& [part=\"name-failure\"], & [part=\"destination-failure\"], & [part=\"import-failure\"], & [part=\"failure\"]": {
221
+ "$description": "Four refusals, one look, and none of them called `error`: `jx-textfield` and `jx-field` both draw a `[part=\"error\"]` of their own inside this same tree, and the kit is light DOM, so a scoped rule on that name would restyle every field's own error line.",
222
+ "margin": "0",
223
+ "fontSize": "var(--jx-text-md)",
224
+ "color": "var(--danger)"
225
+ },
226
+ "& [part=\"failure\"]": {
227
+ "$description": "The backend's refusal, said at the end of the body so it sits directly above the footer the reader is about to press again. It used to be pinned outside the scroll box; a dialog scrolls as one, so what replaces the pin is being last.",
228
+ "display": "flex",
229
+ "flexWrap": "wrap",
230
+ "gap": "var(--jx-space-2)",
231
+ "paddingTop": "var(--jx-space-3)",
232
+ "borderTop": "1px solid var(--border)"
233
+ },
234
+ "& [part=\"install\"]": {
235
+ "color": "var(--accent)",
236
+ "textDecoration": "underline"
237
+ }
238
+ },
239
+ "children": [
240
+ {
241
+ "tagName": "div",
242
+ "attributes": {
243
+ "part": "wizard"
244
+ },
245
+ "children": [
246
+ {
247
+ "tagName": "div",
248
+ "attributes": {
249
+ "part": "tabs-slot",
250
+ "role": "none"
251
+ },
252
+ "style": {
253
+ "display": "contents"
254
+ },
255
+ "$switch": {
256
+ "$ref": "#/state/showTabs"
257
+ },
258
+ "cases": {
259
+ "true": {
260
+ "tagName": "jx-tabs",
261
+ "attributes": {
262
+ "part": "tabs"
263
+ },
264
+ "$props": {
265
+ "label": "Where the project comes from",
266
+ "selected": {
267
+ "$ref": "#/state/tab"
268
+ }
269
+ },
270
+ "onchange": {
271
+ "$prototype": "Function",
272
+ "body": [
273
+ {
274
+ "operator": "call",
275
+ "target": {
276
+ "$ref": "#/state/pickTab"
277
+ },
278
+ "value": [
279
+ {
280
+ "$ref": "event#/detail"
281
+ }
282
+ ]
283
+ }
284
+ ]
285
+ },
286
+ "children": [
287
+ {
288
+ "$prototype": "Array",
289
+ "items": {
290
+ "$ref": "#/state/tabs"
291
+ },
292
+ "key": {
293
+ "$ref": "$map/item/value"
294
+ },
295
+ "map": {
296
+ "tagName": "jx-tab",
297
+ "attributes": {
298
+ "part": "tab",
299
+ "value": "${$map.item.value}",
300
+ "label": "${$map.item.label}"
301
+ }
302
+ }
303
+ }
304
+ ]
305
+ }
306
+ }
307
+ },
308
+ {
309
+ "tagName": "div",
310
+ "attributes": {
311
+ "part": "body-slot",
312
+ "role": "none"
313
+ },
314
+ "style": {
315
+ "display": "contents"
316
+ },
317
+ "$switch": {
318
+ "$ref": "#/state/body"
319
+ },
320
+ "cases": {
321
+ "starter": {
322
+ "tagName": "div",
323
+ "attributes": {
324
+ "part": "starter",
325
+ "role": "none"
326
+ },
327
+ "style": {
328
+ "display": "contents"
329
+ },
330
+ "children": [
331
+ {
332
+ "tagName": "p",
333
+ "attributes": {
334
+ "part": "blurb"
335
+ },
336
+ "textContent": "Every starter is a complete site copied in as plain files you own — open it, look at it, then make it yours."
337
+ },
338
+ {
339
+ "tagName": "div",
340
+ "attributes": {
341
+ "part": "gallery"
342
+ },
343
+ "children": [
344
+ {
345
+ "$prototype": "Array",
346
+ "items": {
347
+ "$ref": "#/state/cards"
348
+ },
349
+ "key": {
350
+ "$ref": "$map/item/id"
351
+ },
352
+ "map": {
353
+ "tagName": "button",
354
+ "attributes": {
355
+ "part": "card",
356
+ "type": "button",
357
+ "data-starter": "${$map.item.id}",
358
+ "data-art": "${$map.item.art}",
359
+ "data-selected": "${$map.item.selected ? '' : null}",
360
+ "aria-pressed": "${$map.item.selected ? 'true' : 'false'}",
361
+ "title": "${$map.item.title || null}"
362
+ },
363
+ "onclick": {
364
+ "$prototype": "Function",
365
+ "body": [
366
+ {
367
+ "operator": "call",
368
+ "target": {
369
+ "$ref": "#/state/pickCard"
370
+ },
371
+ "value": [
372
+ {
373
+ "$ref": "$map/item/id"
374
+ }
375
+ ]
376
+ }
377
+ ]
378
+ },
379
+ "children": [
380
+ {
381
+ "tagName": "div",
382
+ "attributes": {
383
+ "part": "art-slot",
384
+ "role": "none"
385
+ },
386
+ "style": {
387
+ "display": "contents"
388
+ },
389
+ "$switch": {
390
+ "$ref": "$map/item/art"
391
+ },
392
+ "cases": {
393
+ "thumb": {
394
+ "tagName": "img",
395
+ "attributes": {
396
+ "part": "thumb",
397
+ "src": "${$map.item.thumbnail}",
398
+ "alt": ""
399
+ }
400
+ },
401
+ "blank": {
402
+ "tagName": "span",
403
+ "attributes": {
404
+ "part": "blank",
405
+ "aria-hidden": "true"
406
+ },
407
+ "textContent": "+"
408
+ }
409
+ }
410
+ },
411
+ {
412
+ "tagName": "span",
413
+ "attributes": {
414
+ "part": "card-body"
415
+ },
416
+ "children": [
417
+ {
418
+ "tagName": "span",
419
+ "attributes": {
420
+ "part": "card-name"
421
+ },
422
+ "textContent": "${$map.item.name}"
423
+ },
424
+ {
425
+ "tagName": "span",
426
+ "attributes": {
427
+ "part": "card-tag"
428
+ },
429
+ "textContent": "${$map.item.tagline}"
430
+ }
431
+ ]
432
+ }
433
+ ]
434
+ }
435
+ }
436
+ ]
437
+ }
438
+ ]
439
+ },
440
+ "gate": {
441
+ "tagName": "div",
442
+ "attributes": {
443
+ "part": "gate",
444
+ "role": "none"
445
+ },
446
+ "style": {
447
+ "display": "contents"
448
+ },
449
+ "children": [
450
+ {
451
+ "tagName": "p",
452
+ "attributes": {
453
+ "part": "blurb"
454
+ },
455
+ "textContent": "${state.gateIntro}"
456
+ },
457
+ {
458
+ "tagName": "div",
459
+ "attributes": {
460
+ "part": "creds"
461
+ },
462
+ "children": [
463
+ {
464
+ "tagName": "div",
465
+ "$description": "Where `ui/ai-managed-connect.ts`'s own mounted document goes. The node is rendered EMPTY and the adapter puts the controller's host inside it — the one seam a foreign mount may arrive through (specs/studio-ui-guidelines.md §9.4). It is drawn even when the platform brokers nothing, because the controller answers that question itself and hands back nothing to place.",
466
+ "attributes": {
467
+ "part": "managed-island",
468
+ "role": "none"
469
+ }
470
+ },
471
+ {
472
+ "tagName": "div",
473
+ "$description": "Where `ui/ai-credentials-form.ts`'s own mounted document goes. Three fields a reader is typing into, so it must survive every repaint of the wizard around it: the document renders this box and never its contents, and the adapter places the same host node back into it rather than rebuilding one.",
474
+ "attributes": {
475
+ "part": "creds-island",
476
+ "role": "none"
477
+ }
478
+ }
479
+ ]
480
+ }
481
+ ]
482
+ },
483
+ "agent": {
484
+ "tagName": "div",
485
+ "attributes": {
486
+ "part": "agent",
487
+ "role": "none"
488
+ },
489
+ "style": {
490
+ "display": "contents"
491
+ },
492
+ "children": [
493
+ {
494
+ "tagName": "p",
495
+ "attributes": {
496
+ "part": "blurb"
497
+ },
498
+ "textContent": "Describe the site you want; the assistant builds it in the editor while you watch."
499
+ },
500
+ {
501
+ "tagName": "jx-field",
502
+ "attributes": {
503
+ "part": "agent-row"
504
+ },
505
+ "$props": {
506
+ "span": true,
507
+ "label": "Prompt",
508
+ "required": true
509
+ },
510
+ "children": [
511
+ {
512
+ "tagName": "jx-textfield",
513
+ "attributes": {
514
+ "part": "prompt"
515
+ },
516
+ "$props": {
517
+ "size": "sm",
518
+ "value": {
519
+ "$ref": "#/state/agentPrompt"
520
+ },
521
+ "placeholder": "A landing page for a small coffee roastery with a menu and contact form…",
522
+ "multiline": true,
523
+ "rows": "6"
524
+ },
525
+ "oninput": {
526
+ "$prototype": "Function",
527
+ "body": [
528
+ {
529
+ "operator": "call",
530
+ "target": {
531
+ "$ref": "#/state/setAgentPrompt"
532
+ },
533
+ "value": [
534
+ {
535
+ "$ref": "event#/target/value"
536
+ }
537
+ ]
538
+ }
539
+ ]
540
+ }
541
+ }
542
+ ]
543
+ }
544
+ ]
545
+ },
546
+ "import": {
547
+ "tagName": "div",
548
+ "attributes": {
549
+ "part": "import",
550
+ "role": "none"
551
+ },
552
+ "style": {
553
+ "display": "contents"
554
+ },
555
+ "children": [
556
+ {
557
+ "tagName": "p",
558
+ "attributes": {
559
+ "part": "blurb"
560
+ },
561
+ "textContent": "Clone an existing site into an editable Jx project: pages, styles, assets, and components."
562
+ },
563
+ {
564
+ "tagName": "jx-field",
565
+ "attributes": {
566
+ "part": "url-row"
567
+ },
568
+ "$props": {
569
+ "span": true,
570
+ "label": "Site URL",
571
+ "required": true
572
+ },
573
+ "children": [
574
+ {
575
+ "tagName": "jx-textfield",
576
+ "attributes": {
577
+ "part": "url"
578
+ },
579
+ "$props": {
580
+ "size": "sm",
581
+ "value": {
582
+ "$ref": "#/state/url"
583
+ },
584
+ "placeholder": "https://example.com",
585
+ "type": "url"
586
+ },
587
+ "oninput": {
588
+ "$prototype": "Function",
589
+ "body": [
590
+ {
591
+ "operator": "call",
592
+ "target": {
593
+ "$ref": "#/state/setUrl"
594
+ },
595
+ "value": [
596
+ {
597
+ "$ref": "event#/target/value"
598
+ }
599
+ ]
600
+ }
601
+ ]
602
+ }
603
+ }
604
+ ]
605
+ },
606
+ {
607
+ "tagName": "div",
608
+ "attributes": {
609
+ "part": "grid"
610
+ },
611
+ "children": [
612
+ {
613
+ "tagName": "jx-field",
614
+ "attributes": {
615
+ "part": "depth-row"
616
+ },
617
+ "$props": {
618
+ "span": true,
619
+ "label": "Crawl Depth"
620
+ },
621
+ "children": [
622
+ {
623
+ "tagName": "jx-number-field",
624
+ "attributes": {
625
+ "part": "depth"
626
+ },
627
+ "$props": {
628
+ "size": "sm",
629
+ "label": "Crawl Depth",
630
+ "min": "0",
631
+ "max": {
632
+ "$ref": "#/state/maxDepth"
633
+ },
634
+ "value": {
635
+ "$ref": "#/state/depth"
636
+ }
637
+ },
638
+ "onchange": {
639
+ "$prototype": "Function",
640
+ "body": [
641
+ {
642
+ "operator": "call",
643
+ "target": {
644
+ "$ref": "#/state/setDepth"
645
+ },
646
+ "value": [
647
+ {
648
+ "$ref": "event#/target/value"
649
+ }
650
+ ]
651
+ }
652
+ ]
653
+ }
654
+ }
655
+ ]
656
+ },
657
+ {
658
+ "tagName": "jx-field",
659
+ "attributes": {
660
+ "part": "pages-row"
661
+ },
662
+ "$props": {
663
+ "span": true,
664
+ "label": "Max Pages"
665
+ },
666
+ "children": [
667
+ {
668
+ "tagName": "jx-number-field",
669
+ "attributes": {
670
+ "part": "max-pages"
671
+ },
672
+ "$props": {
673
+ "size": "sm",
674
+ "label": "Max Pages",
675
+ "min": "1",
676
+ "max": "100",
677
+ "value": {
678
+ "$ref": "#/state/maxPages"
679
+ }
680
+ },
681
+ "onchange": {
682
+ "$prototype": "Function",
683
+ "body": [
684
+ {
685
+ "operator": "call",
686
+ "target": {
687
+ "$ref": "#/state/setMaxPages"
688
+ },
689
+ "value": [
690
+ {
691
+ "$ref": "event#/target/value"
692
+ }
693
+ ]
694
+ }
695
+ ]
696
+ }
697
+ }
698
+ ]
699
+ }
700
+ ]
701
+ },
702
+ {
703
+ "tagName": "jx-field",
704
+ "attributes": {
705
+ "part": "breakpoints-row"
706
+ },
707
+ "$props": {
708
+ "span": true,
709
+ "label": "Breakpoints",
710
+ "description": "${state.breakpointHint}"
711
+ },
712
+ "children": [
713
+ {
714
+ "tagName": "div",
715
+ "attributes": {
716
+ "part": "breakpoints"
717
+ },
718
+ "children": [
719
+ {
720
+ "tagName": "jx-select",
721
+ "attributes": {
722
+ "part": "bp-mode"
723
+ },
724
+ "$props": {
725
+ "size": "sm",
726
+ "label": "Breakpoints",
727
+ "value": {
728
+ "$ref": "#/state/breakpointMode"
729
+ },
730
+ "options": {
731
+ "$ref": "#/state/breakpointModes"
732
+ }
733
+ },
734
+ "onchange": {
735
+ "$prototype": "Function",
736
+ "body": [
737
+ {
738
+ "operator": "call",
739
+ "target": {
740
+ "$ref": "#/state/setBreakpointMode"
741
+ },
742
+ "value": [
743
+ {
744
+ "$ref": "event#/target/value"
745
+ }
746
+ ]
747
+ }
748
+ ]
749
+ }
750
+ },
751
+ {
752
+ "tagName": "div",
753
+ "attributes": {
754
+ "part": "bp-value-slot",
755
+ "role": "none"
756
+ },
757
+ "style": {
758
+ "display": "contents"
759
+ },
760
+ "$switch": {
761
+ "$ref": "#/state/breakpointValue"
762
+ },
763
+ "cases": {
764
+ "count": {
765
+ "tagName": "jx-number-field",
766
+ "attributes": {
767
+ "part": "bp-count"
768
+ },
769
+ "$props": {
770
+ "size": "sm",
771
+ "label": "How many breakpoints to keep",
772
+ "min": "1",
773
+ "max": {
774
+ "$ref": "#/state/maxBreakpoints"
775
+ },
776
+ "value": {
777
+ "$ref": "#/state/breakpointCount"
778
+ }
779
+ },
780
+ "onchange": {
781
+ "$prototype": "Function",
782
+ "body": [
783
+ {
784
+ "operator": "call",
785
+ "target": {
786
+ "$ref": "#/state/setBreakpointCount"
787
+ },
788
+ "value": [
789
+ {
790
+ "$ref": "event#/target/value"
791
+ }
792
+ ]
793
+ }
794
+ ]
795
+ }
796
+ },
797
+ "widths": {
798
+ "tagName": "jx-textfield",
799
+ "attributes": {
800
+ "part": "bp-widths"
801
+ },
802
+ "$props": {
803
+ "size": "sm",
804
+ "value": {
805
+ "$ref": "#/state/breakpointWidths"
806
+ },
807
+ "label": "Breakpoint widths",
808
+ "placeholder": "640, 1024, 1440"
809
+ },
810
+ "oninput": {
811
+ "$prototype": "Function",
812
+ "body": [
813
+ {
814
+ "operator": "call",
815
+ "target": {
816
+ "$ref": "#/state/setBreakpointWidths"
817
+ },
818
+ "value": [
819
+ {
820
+ "$ref": "event#/target/value"
821
+ }
822
+ ]
823
+ }
824
+ ]
825
+ }
826
+ }
827
+ }
828
+ },
829
+ {
830
+ "tagName": "div",
831
+ "attributes": {
832
+ "part": "bp-rounding-slot",
833
+ "role": "none"
834
+ },
835
+ "style": {
836
+ "display": "contents"
837
+ },
838
+ "$switch": {
839
+ "$ref": "#/state/showRounding"
840
+ },
841
+ "cases": {
842
+ "true": {
843
+ "tagName": "jx-select",
844
+ "attributes": {
845
+ "part": "bp-rounding"
846
+ },
847
+ "$props": {
848
+ "size": "sm",
849
+ "label": "Rounding",
850
+ "value": {
851
+ "$ref": "#/state/breakpointRounding"
852
+ },
853
+ "options": {
854
+ "$ref": "#/state/roundings"
855
+ }
856
+ },
857
+ "onchange": {
858
+ "$prototype": "Function",
859
+ "body": [
860
+ {
861
+ "operator": "call",
862
+ "target": {
863
+ "$ref": "#/state/setBreakpointRounding"
864
+ },
865
+ "value": [
866
+ {
867
+ "$ref": "event#/target/value"
868
+ }
869
+ ]
870
+ }
871
+ ]
872
+ }
873
+ }
874
+ }
875
+ }
876
+ ]
877
+ }
878
+ ]
879
+ },
880
+ {
881
+ "tagName": "jx-switch",
882
+ "attributes": {
883
+ "part": "ai-naming"
884
+ },
885
+ "$props": {
886
+ "size": "sm",
887
+ "checked": {
888
+ "$ref": "#/state/aiNaming"
889
+ }
890
+ },
891
+ "onchange": {
892
+ "$prototype": "Function",
893
+ "body": [
894
+ {
895
+ "operator": "call",
896
+ "target": {
897
+ "$ref": "#/state/setAiNaming"
898
+ },
899
+ "value": [
900
+ {
901
+ "$ref": "event#/target/checked"
902
+ }
903
+ ]
904
+ }
905
+ ]
906
+ },
907
+ "children": [
908
+ {
909
+ "tagName": "span",
910
+ "textContent": "AI component naming"
911
+ }
912
+ ]
913
+ },
914
+ {
915
+ "tagName": "div",
916
+ "attributes": {
917
+ "part": "verify-slot",
918
+ "role": "none"
919
+ },
920
+ "style": {
921
+ "display": "contents"
922
+ },
923
+ "$switch": {
924
+ "$ref": "#/state/canVerify"
925
+ },
926
+ "cases": {
927
+ "true": {
928
+ "tagName": "jx-switch",
929
+ "attributes": {
930
+ "part": "verify"
931
+ },
932
+ "$props": {
933
+ "size": "sm",
934
+ "checked": {
935
+ "$ref": "#/state/verify"
936
+ }
937
+ },
938
+ "onchange": {
939
+ "$prototype": "Function",
940
+ "body": [
941
+ {
942
+ "operator": "call",
943
+ "target": {
944
+ "$ref": "#/state/setVerify"
945
+ },
946
+ "value": [
947
+ {
948
+ "$ref": "event#/target/checked"
949
+ }
950
+ ]
951
+ }
952
+ ]
953
+ },
954
+ "children": [
955
+ {
956
+ "tagName": "span",
957
+ "textContent": "Check fidelity against the original (slower)"
958
+ }
959
+ ]
960
+ }
961
+ }
962
+ },
963
+ {
964
+ "tagName": "div",
965
+ "attributes": {
966
+ "part": "fidelity-slot",
967
+ "role": "none"
968
+ },
969
+ "style": {
970
+ "display": "contents"
971
+ },
972
+ "$switch": {
973
+ "$ref": "#/state/showFidelity"
974
+ },
975
+ "cases": {
976
+ "true": {
977
+ "tagName": "jx-field",
978
+ "attributes": {
979
+ "part": "fidelity-row"
980
+ },
981
+ "$props": {
982
+ "span": true,
983
+ "label": "Minimum fidelity",
984
+ "description": "Below this average, the assistant reports that the clone did not match the original. A floor rather than a target: a faithful import of a complicated site still lands well under 100. Set 0 to report the score without judging it."
985
+ },
986
+ "children": [
987
+ {
988
+ "tagName": "jx-number-field",
989
+ "attributes": {
990
+ "part": "min-fidelity"
991
+ },
992
+ "$props": {
993
+ "size": "sm",
994
+ "label": "Minimum fidelity",
995
+ "min": "0",
996
+ "max": "100",
997
+ "value": {
998
+ "$ref": "#/state/minFidelity"
999
+ }
1000
+ },
1001
+ "onchange": {
1002
+ "$prototype": "Function",
1003
+ "body": [
1004
+ {
1005
+ "operator": "call",
1006
+ "target": {
1007
+ "$ref": "#/state/setMinFidelity"
1008
+ },
1009
+ "value": [
1010
+ {
1011
+ "$ref": "event#/target/value"
1012
+ }
1013
+ ]
1014
+ }
1015
+ ]
1016
+ }
1017
+ }
1018
+ ]
1019
+ }
1020
+ }
1021
+ },
1022
+ {
1023
+ "tagName": "jx-field",
1024
+ "attributes": {
1025
+ "part": "model-row"
1026
+ },
1027
+ "$props": {
1028
+ "span": true,
1029
+ "label": "Model"
1030
+ },
1031
+ "children": [
1032
+ {
1033
+ "tagName": "div",
1034
+ "$description": "Where `ui/ai-model-picker.ts`'s own mounted document goes. The picker holds the in-flight catalogue fetch and the credentials the last failure belonged to, so it is one controller for the life of the wizard and this box is only ever where its host is put.",
1035
+ "attributes": {
1036
+ "part": "model-island",
1037
+ "role": "none"
1038
+ }
1039
+ }
1040
+ ]
1041
+ },
1042
+ {
1043
+ "tagName": "jx-field",
1044
+ "attributes": {
1045
+ "part": "brief-row"
1046
+ },
1047
+ "$props": {
1048
+ "span": true,
1049
+ "label": "What should the assistant do with it?"
1050
+ },
1051
+ "children": [
1052
+ {
1053
+ "tagName": "jx-textfield",
1054
+ "attributes": {
1055
+ "part": "import-prompt"
1056
+ },
1057
+ "$props": {
1058
+ "size": "sm",
1059
+ "value": {
1060
+ "$ref": "#/state/importPrompt"
1061
+ },
1062
+ "placeholder": "Keep the layout but modernise the typography, and turn the news list into a content collection…",
1063
+ "multiline": true,
1064
+ "rows": "4"
1065
+ },
1066
+ "oninput": {
1067
+ "$prototype": "Function",
1068
+ "body": [
1069
+ {
1070
+ "operator": "call",
1071
+ "target": {
1072
+ "$ref": "#/state/setImportPrompt"
1073
+ },
1074
+ "value": [
1075
+ {
1076
+ "$ref": "event#/target/value"
1077
+ }
1078
+ ]
1079
+ }
1080
+ ]
1081
+ }
1082
+ }
1083
+ ]
1084
+ },
1085
+ {
1086
+ "tagName": "div",
1087
+ "attributes": {
1088
+ "part": "import-failure-slot",
1089
+ "role": "none"
1090
+ },
1091
+ "style": {
1092
+ "display": "contents"
1093
+ },
1094
+ "$switch": {
1095
+ "$ref": "#/state/hasImportError"
1096
+ },
1097
+ "cases": {
1098
+ "true": {
1099
+ "tagName": "p",
1100
+ "attributes": {
1101
+ "part": "import-failure",
1102
+ "role": "alert"
1103
+ },
1104
+ "textContent": "${state.importError}"
1105
+ }
1106
+ }
1107
+ }
1108
+ ]
1109
+ },
1110
+ "params": {
1111
+ "tagName": "div",
1112
+ "attributes": {
1113
+ "part": "params",
1114
+ "role": "none"
1115
+ },
1116
+ "style": {
1117
+ "display": "contents"
1118
+ },
1119
+ "children": [
1120
+ {
1121
+ "tagName": "p",
1122
+ "attributes": {
1123
+ "part": "context"
1124
+ },
1125
+ "textContent": "${state.contextLabel}"
1126
+ },
1127
+ {
1128
+ "tagName": "jx-field",
1129
+ "attributes": {
1130
+ "part": "name-row",
1131
+ "data-invalid": "${state.hasNameError ? '' : null}"
1132
+ },
1133
+ "$props": {
1134
+ "span": true,
1135
+ "label": "Project Name",
1136
+ "required": true
1137
+ },
1138
+ "children": [
1139
+ {
1140
+ "tagName": "jx-textfield",
1141
+ "attributes": {
1142
+ "part": "name"
1143
+ },
1144
+ "$props": {
1145
+ "size": "sm",
1146
+ "value": {
1147
+ "$ref": "#/state/name"
1148
+ },
1149
+ "label": "Project Name",
1150
+ "placeholder": "My Site",
1151
+ "invalid": {
1152
+ "$ref": "#/state/hasNameError"
1153
+ }
1154
+ },
1155
+ "oninput": {
1156
+ "$prototype": "Function",
1157
+ "body": [
1158
+ {
1159
+ "operator": "call",
1160
+ "target": {
1161
+ "$ref": "#/state/setName"
1162
+ },
1163
+ "value": [
1164
+ {
1165
+ "$ref": "event#/target/value"
1166
+ }
1167
+ ]
1168
+ }
1169
+ ]
1170
+ }
1171
+ }
1172
+ ]
1173
+ },
1174
+ {
1175
+ "tagName": "div",
1176
+ "attributes": {
1177
+ "part": "name-failure-slot",
1178
+ "role": "none"
1179
+ },
1180
+ "style": {
1181
+ "display": "contents"
1182
+ },
1183
+ "$switch": {
1184
+ "$ref": "#/state/hasNameError"
1185
+ },
1186
+ "cases": {
1187
+ "true": {
1188
+ "tagName": "p",
1189
+ "attributes": {
1190
+ "part": "name-failure",
1191
+ "role": "alert"
1192
+ },
1193
+ "textContent": "${state.nameError}"
1194
+ }
1195
+ }
1196
+ },
1197
+ {
1198
+ "tagName": "div",
1199
+ "attributes": {
1200
+ "part": "destination-slot",
1201
+ "role": "none"
1202
+ },
1203
+ "style": {
1204
+ "display": "contents"
1205
+ },
1206
+ "$switch": {
1207
+ "$ref": "#/state/destination"
1208
+ },
1209
+ "cases": {
1210
+ "path": {
1211
+ "tagName": "div",
1212
+ "attributes": {
1213
+ "part": "path-fields",
1214
+ "role": "none"
1215
+ },
1216
+ "style": {
1217
+ "display": "contents"
1218
+ },
1219
+ "children": [
1220
+ {
1221
+ "tagName": "jx-field",
1222
+ "attributes": {
1223
+ "part": "location-row"
1224
+ },
1225
+ "$props": {
1226
+ "span": true,
1227
+ "label": "Location",
1228
+ "required": true
1229
+ },
1230
+ "children": [
1231
+ {
1232
+ "tagName": "div",
1233
+ "attributes": {
1234
+ "part": "location-row-controls"
1235
+ },
1236
+ "children": [
1237
+ {
1238
+ "tagName": "jx-textfield",
1239
+ "attributes": {
1240
+ "part": "location"
1241
+ },
1242
+ "$props": {
1243
+ "size": "sm",
1244
+ "value": {
1245
+ "$ref": "#/state/parent"
1246
+ },
1247
+ "label": "Location",
1248
+ "placeholder": "${state.parentPlaceholder}"
1249
+ },
1250
+ "oninput": {
1251
+ "$prototype": "Function",
1252
+ "body": [
1253
+ {
1254
+ "operator": "call",
1255
+ "target": {
1256
+ "$ref": "#/state/setParent"
1257
+ },
1258
+ "value": [
1259
+ {
1260
+ "$ref": "event#/target/value"
1261
+ }
1262
+ ]
1263
+ }
1264
+ ]
1265
+ }
1266
+ },
1267
+ {
1268
+ "tagName": "div",
1269
+ "attributes": {
1270
+ "part": "browse-slot",
1271
+ "role": "none"
1272
+ },
1273
+ "style": {
1274
+ "display": "contents"
1275
+ },
1276
+ "$switch": {
1277
+ "$ref": "#/state/canBrowse"
1278
+ },
1279
+ "cases": {
1280
+ "true": {
1281
+ "tagName": "jx-button",
1282
+ "attributes": {
1283
+ "part": "browse"
1284
+ },
1285
+ "$props": {
1286
+ "size": "sm",
1287
+ "disabled": {
1288
+ "$ref": "#/state/browsing"
1289
+ }
1290
+ },
1291
+ "onclick": {
1292
+ "$prototype": "Function",
1293
+ "body": [
1294
+ {
1295
+ "operator": "call",
1296
+ "target": {
1297
+ "$ref": "#/state/browse"
1298
+ },
1299
+ "value": []
1300
+ }
1301
+ ]
1302
+ },
1303
+ "children": [
1304
+ {
1305
+ "tagName": "span",
1306
+ "textContent": "${state.browseLabel}"
1307
+ }
1308
+ ]
1309
+ }
1310
+ }
1311
+ }
1312
+ ]
1313
+ }
1314
+ ]
1315
+ }
1316
+ ]
1317
+ },
1318
+ "repo": {
1319
+ "tagName": "div",
1320
+ "attributes": {
1321
+ "part": "repo-fields",
1322
+ "role": "none"
1323
+ },
1324
+ "style": {
1325
+ "display": "contents"
1326
+ },
1327
+ "children": [
1328
+ {
1329
+ "tagName": "jx-field",
1330
+ "attributes": {
1331
+ "part": "owner-row"
1332
+ },
1333
+ "$props": {
1334
+ "span": true,
1335
+ "label": "Owner",
1336
+ "required": true
1337
+ },
1338
+ "children": [
1339
+ {
1340
+ "tagName": "div",
1341
+ "attributes": {
1342
+ "part": "owner-slot",
1343
+ "role": "none"
1344
+ },
1345
+ "style": {
1346
+ "display": "contents"
1347
+ },
1348
+ "$switch": {
1349
+ "$ref": "#/state/hasOwners"
1350
+ },
1351
+ "cases": {
1352
+ "true": {
1353
+ "tagName": "jx-select",
1354
+ "attributes": {
1355
+ "part": "owner"
1356
+ },
1357
+ "$props": {
1358
+ "size": "sm",
1359
+ "label": "Owner",
1360
+ "value": {
1361
+ "$ref": "#/state/owner"
1362
+ },
1363
+ "options": {
1364
+ "$ref": "#/state/owners"
1365
+ }
1366
+ },
1367
+ "onchange": {
1368
+ "$prototype": "Function",
1369
+ "body": [
1370
+ {
1371
+ "operator": "call",
1372
+ "target": {
1373
+ "$ref": "#/state/setOwner"
1374
+ },
1375
+ "value": [
1376
+ {
1377
+ "$ref": "event#/target/value"
1378
+ }
1379
+ ]
1380
+ }
1381
+ ]
1382
+ }
1383
+ },
1384
+ "false": {
1385
+ "tagName": "jx-textfield",
1386
+ "attributes": {
1387
+ "part": "owner"
1388
+ },
1389
+ "$props": {
1390
+ "size": "sm",
1391
+ "value": {
1392
+ "$ref": "#/state/owner"
1393
+ },
1394
+ "label": "Owner",
1395
+ "placeholder": "your-account-or-org"
1396
+ },
1397
+ "oninput": {
1398
+ "$prototype": "Function",
1399
+ "body": [
1400
+ {
1401
+ "operator": "call",
1402
+ "target": {
1403
+ "$ref": "#/state/setOwner"
1404
+ },
1405
+ "value": [
1406
+ {
1407
+ "$ref": "event#/target/value"
1408
+ }
1409
+ ]
1410
+ }
1411
+ ]
1412
+ }
1413
+ }
1414
+ }
1415
+ }
1416
+ ]
1417
+ }
1418
+ ]
1419
+ }
1420
+ }
1421
+ },
1422
+ {
1423
+ "tagName": "jx-field",
1424
+ "attributes": {
1425
+ "part": "slug-row"
1426
+ },
1427
+ "$props": {
1428
+ "span": true,
1429
+ "label": "${state.slugLabel}"
1430
+ },
1431
+ "children": [
1432
+ {
1433
+ "tagName": "jx-textfield",
1434
+ "attributes": {
1435
+ "part": "slug"
1436
+ },
1437
+ "$props": {
1438
+ "size": "sm",
1439
+ "value": {
1440
+ "$ref": "#/state/slug"
1441
+ },
1442
+ "label": "${state.slugLabel}",
1443
+ "placeholder": "my-site"
1444
+ },
1445
+ "oninput": {
1446
+ "$prototype": "Function",
1447
+ "body": [
1448
+ {
1449
+ "operator": "call",
1450
+ "target": {
1451
+ "$ref": "#/state/setSlug"
1452
+ },
1453
+ "value": [
1454
+ {
1455
+ "$ref": "event#/target/value"
1456
+ }
1457
+ ]
1458
+ }
1459
+ ]
1460
+ }
1461
+ }
1462
+ ]
1463
+ },
1464
+ {
1465
+ "tagName": "div",
1466
+ "attributes": {
1467
+ "part": "taken-slot",
1468
+ "role": "none"
1469
+ },
1470
+ "style": {
1471
+ "display": "contents"
1472
+ },
1473
+ "$switch": {
1474
+ "$ref": "#/state/hasRepoTaken"
1475
+ },
1476
+ "cases": {
1477
+ "true": {
1478
+ "tagName": "p",
1479
+ "attributes": {
1480
+ "part": "destination-failure"
1481
+ },
1482
+ "textContent": "${state.repoTaken}"
1483
+ }
1484
+ }
1485
+ },
1486
+ {
1487
+ "tagName": "div",
1488
+ "attributes": {
1489
+ "part": "visibility-slot",
1490
+ "role": "none"
1491
+ },
1492
+ "style": {
1493
+ "display": "contents"
1494
+ },
1495
+ "$switch": {
1496
+ "$ref": "#/state/destination"
1497
+ },
1498
+ "cases": {
1499
+ "repo": {
1500
+ "tagName": "jx-field",
1501
+ "attributes": {
1502
+ "part": "visibility-row"
1503
+ },
1504
+ "$props": {
1505
+ "span": true,
1506
+ "label": "Visibility"
1507
+ },
1508
+ "children": [
1509
+ {
1510
+ "tagName": "jx-select",
1511
+ "attributes": {
1512
+ "part": "visibility"
1513
+ },
1514
+ "$props": {
1515
+ "size": "sm",
1516
+ "label": "Visibility",
1517
+ "value": {
1518
+ "$ref": "#/state/visibility"
1519
+ },
1520
+ "options": {
1521
+ "$ref": "#/state/visibilities"
1522
+ }
1523
+ },
1524
+ "onchange": {
1525
+ "$prototype": "Function",
1526
+ "body": [
1527
+ {
1528
+ "operator": "call",
1529
+ "target": {
1530
+ "$ref": "#/state/setVisibility"
1531
+ },
1532
+ "value": [
1533
+ {
1534
+ "$ref": "event#/target/value"
1535
+ }
1536
+ ]
1537
+ }
1538
+ ]
1539
+ }
1540
+ }
1541
+ ]
1542
+ }
1543
+ }
1544
+ },
1545
+ {
1546
+ "tagName": "p",
1547
+ "attributes": {
1548
+ "part": "destination-preview"
1549
+ },
1550
+ "children": [
1551
+ {
1552
+ "tagName": "span",
1553
+ "textContent": "${state.previewLabel}: "
1554
+ },
1555
+ {
1556
+ "tagName": "code",
1557
+ "attributes": {
1558
+ "part": "destination-target"
1559
+ },
1560
+ "textContent": "${state.preview}"
1561
+ }
1562
+ ]
1563
+ },
1564
+ {
1565
+ "tagName": "div",
1566
+ "attributes": {
1567
+ "part": "destination-failure-slot",
1568
+ "role": "none"
1569
+ },
1570
+ "style": {
1571
+ "display": "contents"
1572
+ },
1573
+ "$switch": {
1574
+ "$ref": "#/state/hasDestinationError"
1575
+ },
1576
+ "cases": {
1577
+ "true": {
1578
+ "tagName": "p",
1579
+ "attributes": {
1580
+ "part": "destination-failure",
1581
+ "role": "alert"
1582
+ },
1583
+ "textContent": "${state.destinationError}"
1584
+ }
1585
+ }
1586
+ },
1587
+ {
1588
+ "tagName": "p",
1589
+ "attributes": {
1590
+ "part": "footnote"
1591
+ },
1592
+ "textContent": "${state.note}"
1593
+ }
1594
+ ]
1595
+ }
1596
+ }
1597
+ },
1598
+ {
1599
+ "tagName": "div",
1600
+ "attributes": {
1601
+ "part": "failure-slot",
1602
+ "role": "none"
1603
+ },
1604
+ "style": {
1605
+ "display": "contents"
1606
+ },
1607
+ "$switch": {
1608
+ "$ref": "#/state/hasError"
1609
+ },
1610
+ "cases": {
1611
+ "true": {
1612
+ "tagName": "p",
1613
+ "attributes": {
1614
+ "part": "failure",
1615
+ "role": "alert"
1616
+ },
1617
+ "children": [
1618
+ {
1619
+ "tagName": "span",
1620
+ "textContent": "${state.error}"
1621
+ },
1622
+ {
1623
+ "tagName": "span",
1624
+ "attributes": {
1625
+ "part": "install-slot",
1626
+ "role": "none"
1627
+ },
1628
+ "style": {
1629
+ "display": "contents"
1630
+ },
1631
+ "$switch": {
1632
+ "$ref": "#/state/hasInstallUrl"
1633
+ },
1634
+ "cases": {
1635
+ "true": {
1636
+ "tagName": "a",
1637
+ "attributes": {
1638
+ "part": "install",
1639
+ "href": "${state.errorInstallUrl}",
1640
+ "target": "_blank",
1641
+ "rel": "noreferrer"
1642
+ },
1643
+ "textContent": "Install the Jx Suite GitHub App →"
1644
+ }
1645
+ }
1646
+ }
1647
+ ]
1648
+ }
1649
+ }
1650
+ }
1651
+ ]
1652
+ }
1653
+ ]
1654
+ }