@jxsuite/studio 6.1.1 → 8.0.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 (785) hide show
  1. package/README.md +5 -5
  2. package/dist/chunks/2020-5wtzce5g.js +4 -0
  3. package/dist/chunks/{action-group-2mqby73c.js → action-group-4aan7g6g.js} +3 -3
  4. package/dist/chunks/adapter-5tphg7xe.js +4 -0
  5. package/dist/chunks/add-new-flow-psym14sn.js +4 -0
  6. package/dist/chunks/cf-account-picker-haqazq5r.js +4 -0
  7. package/dist/chunks/cf-settings-h2wrh6hq.js +4 -0
  8. package/dist/chunks/color-area-6rbra5dy.js +4 -0
  9. package/dist/chunks/color-field-gy56c94g.js +4 -0
  10. package/dist/chunks/color-m7r1vk54.js +4 -0
  11. package/dist/chunks/color-slider-sqqdyf6c.js +4 -0
  12. package/dist/chunks/combobox-72h32ejk.js +4 -0
  13. package/dist/chunks/components-r22xca09.js +4 -0
  14. package/dist/chunks/content-source-mmppmcyg.js +4 -0
  15. package/dist/chunks/convert-to-repeater-he70fc2b.js +4 -0
  16. package/dist/chunks/dialog-c4x05vyx.js +4 -0
  17. package/dist/chunks/editor-ccd9jwsa.js +4 -0
  18. package/dist/chunks/entry-commands-6qxz9e8p.js +4 -0
  19. package/dist/chunks/extension-sections-0egb88dm.js +4 -0
  20. package/dist/chunks/file-ops-qnab36ek.js +4 -0
  21. package/dist/chunks/files-rcn56qvm.js +4 -0
  22. package/dist/chunks/format-host-yxz0kjjs.js +4 -0
  23. package/dist/chunks/fs-events-d1qxq4z4.js +4 -0
  24. package/dist/chunks/grid-open-4z1g062t.js +4 -0
  25. package/dist/chunks/grid-view-qg1b5eqx.js +51 -0
  26. package/dist/chunks/icons-63bjtbs7.js +4 -0
  27. package/dist/chunks/iframe-entry-2zggzajv.js +5 -0
  28. package/dist/chunks/iframe-entry-76j8vwwx.js +5 -0
  29. package/dist/chunks/iframe-entry-99nr5zfb.js +5 -0
  30. package/dist/chunks/iframe-entry-pkgmcgp0.js +5 -0
  31. package/dist/chunks/iframe-host-ssv7kyj0.js +4 -0
  32. package/dist/chunks/{index-2veqmnhr.js → index-32eqzv1k.js} +3 -3
  33. package/dist/chunks/index-f0jn7nnp.js +4 -0
  34. package/dist/chunks/{javascript-8nbvs12s.js → javascript-pjp734q4.js} +3 -3
  35. package/dist/chunks/jsonMode-njkvsa02.js +13 -0
  36. package/dist/chunks/jx-validate-ttasrbh7.js +4 -0
  37. package/dist/chunks/layers-bgyr11tr.js +4 -0
  38. package/dist/chunks/layers-panel-7ez66zeq.js +4 -0
  39. package/dist/chunks/listbox-c421cf8c.js +4 -0
  40. package/dist/chunks/lit-html-v9gh687x.js +4 -0
  41. package/dist/chunks/media-library-sq468wts.js +4 -0
  42. package/dist/chunks/media-picker-shfe59pt.js +4 -0
  43. package/dist/chunks/menu-bdpzbfvs.js +4 -0
  44. package/dist/chunks/monaco-binding-vq1hgnn0.js +4 -0
  45. package/dist/chunks/monaco-buffer-3afgwvbp.js +4 -0
  46. package/dist/chunks/monaco-setup-xrd2cbkp.js +4 -0
  47. package/dist/chunks/notify-kzrjr3fv.js +4 -0
  48. package/dist/chunks/number-field-y62xq0ty.js +4 -0
  49. package/dist/chunks/parse-v77xtwv7.js +4 -0
  50. package/dist/chunks/platform-7v4rtd7m.js +4 -0
  51. package/dist/chunks/popover-b89sfej7.js +4 -0
  52. package/dist/chunks/publish-panel-2z9gw8ee.js +4 -0
  53. package/dist/chunks/publish-quick-qx2455cj.js +4 -0
  54. package/dist/chunks/publish-workspace-wrc1dgwx.js +4 -0
  55. package/dist/chunks/quick-search-n0t0eqxb.js +4 -0
  56. package/dist/chunks/references-9547rg5s.js +4 -0
  57. package/dist/chunks/right-panel-wsgnr9pn.js +4 -0
  58. package/dist/chunks/select-rzds841e.js +4 -0
  59. package/dist/chunks/source-control-kwktr9y6.js +4 -0
  60. package/dist/chunks/split-c9zfdgxf.js +4 -0
  61. package/dist/chunks/studio-03ct6yfv.js +9 -0
  62. package/dist/chunks/studio-07rcfje3.js +5 -0
  63. package/dist/chunks/studio-3e54qh39.js +7 -0
  64. package/dist/chunks/studio-3exxhz5g.js +5 -0
  65. package/dist/chunks/studio-3q40e3rj.js +5 -0
  66. package/dist/chunks/studio-3qeh9t0h.js +6 -0
  67. package/dist/chunks/studio-3qqjeep5.js +6 -0
  68. package/dist/chunks/studio-43sd2mam.js +4 -0
  69. package/dist/chunks/studio-4hp8pkyt.js +5 -0
  70. package/dist/chunks/studio-58xg6j2q.js +9 -0
  71. package/dist/chunks/studio-5g0rprdt.js +7 -0
  72. package/dist/chunks/studio-6m380wp7.js +5 -0
  73. package/dist/chunks/studio-80jyh1xh.js +4 -0
  74. package/dist/chunks/studio-83mk4bgg.js +9 -0
  75. package/dist/chunks/{studio-kggey1jt.js → studio-881z1xrx.js} +4 -4
  76. package/dist/chunks/studio-8m0y2qe7.js +5 -0
  77. package/dist/chunks/studio-8tr6cfrc.js +5 -0
  78. package/dist/chunks/studio-8vcvfs7r.js +6 -0
  79. package/dist/chunks/studio-9tmebf0s.js +5 -0
  80. package/dist/chunks/studio-a2bvaptz.js +5 -0
  81. package/dist/chunks/studio-b7y5mr30.js +5 -0
  82. package/dist/chunks/studio-bavb31r0.js +5 -0
  83. package/dist/chunks/studio-bbe4c90a.js +5 -0
  84. package/dist/chunks/studio-c05wdnt3.js +5 -0
  85. package/dist/chunks/studio-ccv2svc6.js +5 -0
  86. package/dist/chunks/studio-d5grtb9e.js +16 -0
  87. package/dist/chunks/studio-df0baea9.js +5 -0
  88. package/dist/chunks/studio-dgk4dqtx.js +7 -0
  89. package/dist/chunks/studio-e1g64q43.js +5 -0
  90. package/dist/chunks/studio-ed1hp6zf.js +6 -0
  91. package/dist/chunks/studio-ed3xx40h.js +7 -0
  92. package/dist/chunks/studio-f14e1zdj.js +5 -0
  93. package/dist/chunks/studio-fbhxxc5f.js +5 -0
  94. package/dist/chunks/studio-fyh0jc96.js +5 -0
  95. package/dist/chunks/studio-gcxk20n7.js +5 -0
  96. package/dist/chunks/studio-jaaz8ce9.js +5 -0
  97. package/dist/chunks/{studio-8grwxtqk.js → studio-jcnsdaep.js} +4 -4
  98. package/dist/chunks/studio-jsgf2q5k.js +7 -0
  99. package/dist/chunks/{studio-1q1sh2ax.js → studio-k3xxbagr.js} +3 -3
  100. package/dist/chunks/studio-k7evxqh4.js +5 -0
  101. package/dist/chunks/studio-kt3pjkwd.js +5 -0
  102. package/dist/chunks/studio-m8g16bgz.js +5 -0
  103. package/dist/chunks/studio-mn0476ag.js +5 -0
  104. package/dist/chunks/studio-mx1smyq0.js +5 -0
  105. package/dist/chunks/studio-n0c5h6mf.js +5 -0
  106. package/dist/chunks/{studio-rv11kfwa.js → studio-nh6d342n.js} +7 -7
  107. package/dist/chunks/studio-nqxqf8p2.js +4 -0
  108. package/dist/chunks/studio-p4nrkvqr.js +5 -0
  109. package/dist/chunks/{studio-h46vtzk8.js → studio-pbxa5fpc.js} +4 -4
  110. package/dist/chunks/studio-pgmvdv7z.js +7 -0
  111. package/dist/chunks/studio-ph84avkf.js +5 -0
  112. package/dist/chunks/{studio-wszjyh0j.js → studio-q0mvbaq6.js} +4 -4
  113. package/dist/chunks/studio-q0tccd43.js +5 -0
  114. package/dist/chunks/studio-q7rtx6zq.js +14 -0
  115. package/dist/chunks/{studio-pre0skq6.js → studio-qgh13jtz.js} +4 -4
  116. package/dist/chunks/studio-qmn1xc24.js +5 -0
  117. package/dist/chunks/studio-qwdqwkj0.js +5 -0
  118. package/dist/chunks/{studio-t6b6qe31.js → studio-r5qy30vx.js} +4 -4
  119. package/dist/chunks/studio-rj9eamf8.js +5 -0
  120. package/dist/chunks/studio-rptgsk96.js +5 -0
  121. package/dist/chunks/studio-rthyg42z.js +928 -0
  122. package/dist/chunks/studio-s19tp1xr.js +5 -0
  123. package/dist/chunks/studio-s32578pn.js +5 -0
  124. package/dist/chunks/studio-svb7yyve.js +5 -0
  125. package/dist/chunks/studio-syreb644.js +5 -0
  126. package/dist/chunks/studio-tf9jryb1.js +10 -0
  127. package/dist/chunks/studio-tfkznv39.js +5 -0
  128. package/dist/chunks/studio-tft6r105.js +5 -0
  129. package/dist/chunks/studio-txf2kysx.js +5 -0
  130. package/dist/chunks/studio-v8867ddv.js +12 -0
  131. package/dist/chunks/studio-vxq7fcvv.js +5 -0
  132. package/dist/chunks/studio-w4rz9hdk.js +5 -0
  133. package/dist/chunks/studio-wbcjbhy1.js +9 -0
  134. package/dist/chunks/studio-wc649wss.js +5 -0
  135. package/dist/chunks/studio-wys23mxz.js +5 -0
  136. package/dist/chunks/studio-x1x167jh.js +5 -0
  137. package/dist/chunks/studio-x9hsze61.js +5 -0
  138. package/dist/chunks/studio-y0n7yxea.js +9 -0
  139. package/dist/chunks/studio-y3ahhdpx.js +5 -0
  140. package/dist/chunks/studio-z97c48fk.js +5 -0
  141. package/dist/chunks/studio-zat62m0c.js +5 -0
  142. package/dist/chunks/studio-zcd2e7yz.js +5 -0
  143. package/dist/chunks/studio-zz9qe3rw.js +64 -0
  144. package/dist/chunks/swatch-group-ewh24n1f.js +4 -0
  145. package/dist/chunks/tabs-f5cw3tgp.js +4 -0
  146. package/dist/chunks/textfield-wewc8rq2.js +4 -0
  147. package/dist/chunks/toast-1gv0h53h.js +4 -0
  148. package/dist/chunks/toast-host-1yg5ar8d.js +4 -0
  149. package/dist/chunks/{toolbar-2nnzqhrj.js → toolbar-44cm5cta.js} +3 -3
  150. package/dist/chunks/tooltip-yypz28gq.js +4 -0
  151. package/dist/chunks/tree-9xa4hm7n.js +4 -0
  152. package/dist/chunks/tsMode-epyfz1hv.js +14 -0
  153. package/dist/chunks/workspace-dz7nxfhv.js +4 -0
  154. package/dist/chunks/workspace-home-xsd7hkjw.js +4 -0
  155. package/dist/chunks/ws-client-bv552sfx.js +4 -0
  156. package/dist/iframe-entry.js +20 -16
  157. package/dist/manifest.json +77 -63
  158. package/dist/studio.js +106 -107
  159. package/dist/workers/ts.worker.js +3 -3
  160. package/package.json +17 -16
  161. package/src/about/about-modal.ts +4 -3
  162. package/src/account/action-flow.ts +45 -38
  163. package/src/account-status.ts +7 -2
  164. package/src/browse/component-examples.ts +272 -0
  165. package/src/browse/library-commands.ts +64 -104
  166. package/src/browse/library-layouts.ts +270 -53
  167. package/src/browse/library-model.ts +194 -134
  168. package/src/browse/library-pane.ts +748 -440
  169. package/src/browse/library-preview.ts +161 -26
  170. package/src/browse/library-source.ts +308 -41
  171. package/src/browse/preview-root.ts +78 -0
  172. package/src/browse/preview-style.ts +155 -0
  173. package/src/canvas/asset-refs.ts +40 -10
  174. package/src/canvas/asset-resolve.ts +19 -23
  175. package/src/canvas/canvas-helpers.ts +7 -6
  176. package/src/canvas/canvas-live-render.ts +260 -77
  177. package/src/canvas/canvas-origin.ts +37 -12
  178. package/src/canvas/canvas-page-context.ts +112 -0
  179. package/src/canvas/canvas-patcher.ts +30 -30
  180. package/src/canvas/canvas-perf.ts +11 -5
  181. package/src/canvas/canvas-render.ts +175 -148
  182. package/src/canvas/canvas-surface.ts +5 -3
  183. package/src/canvas/canvas-utils.ts +147 -61
  184. package/src/canvas/dialog-path.ts +9 -4
  185. package/src/canvas/dialog-state.ts +1 -2
  186. package/src/canvas/diff-marks.ts +9 -16
  187. package/src/canvas/diff-toolbar.ts +8 -7
  188. package/src/canvas/edit-width-drag.ts +4 -1
  189. package/src/canvas/edit-width.ts +1 -3
  190. package/src/canvas/iframe-channel.ts +27 -13
  191. package/src/canvas/iframe-drop.ts +120 -12
  192. package/src/canvas/iframe-editable-root.ts +29 -16
  193. package/src/canvas/iframe-entry.ts +104 -75
  194. package/src/canvas/iframe-eval.ts +73 -49
  195. package/src/canvas/iframe-host.ts +269 -158
  196. package/src/canvas/iframe-inline-edit.ts +49 -30
  197. package/src/canvas/iframe-insert.ts +5 -4
  198. package/src/canvas/iframe-interaction.ts +30 -25
  199. package/src/canvas/iframe-keys.ts +11 -0
  200. package/src/canvas/iframe-overlay.ts +1 -1
  201. package/src/canvas/iframe-patch.ts +25 -21
  202. package/src/canvas/iframe-position.ts +12 -6
  203. package/src/canvas/iframe-protocol.ts +36 -21
  204. package/src/canvas/iframe-render.ts +84 -35
  205. package/src/canvas/iframe-slash.ts +24 -11
  206. package/src/canvas/iframe-subtree.ts +10 -3
  207. package/src/canvas/npm-modules.ts +22 -0
  208. package/src/canvas/path-mapping.ts +19 -12
  209. package/src/canvas/popover-path.ts +7 -3
  210. package/src/canvas/popover-state.ts +1 -2
  211. package/src/canvas/preview-navigate.ts +16 -0
  212. package/src/canvas/repeater-sources.ts +200 -0
  213. package/src/canvas/serialize-scope.ts +13 -5
  214. package/src/canvas/stage-scrollbar.ts +7 -2
  215. package/src/canvas/surface-registry.ts +27 -3
  216. package/src/collab/collab-commands.ts +7 -2
  217. package/src/collab/collab-session.ts +84 -45
  218. package/src/collab/collab-state.ts +4 -3
  219. package/src/collab/monaco-binding.ts +16 -13
  220. package/src/collab/monaco-cursors.ts +5 -2
  221. package/src/commands/app-commands.ts +16 -6
  222. package/src/commands/budget.ts +13 -11
  223. package/src/commands/command-args.ts +103 -71
  224. package/src/commands/context.ts +55 -28
  225. package/src/commands/defaults.ts +69 -45
  226. package/src/commands/keymap.ts +56 -43
  227. package/src/commands/levels.ts +14 -8
  228. package/src/commands/live-context.ts +9 -7
  229. package/src/commands/reference.ts +2 -1
  230. package/src/commands/registry.ts +22 -11
  231. package/src/commands/run-reported.ts +15 -10
  232. package/src/component-props.ts +46 -30
  233. package/src/content/collection-match.ts +11 -9
  234. package/src/content/collection-pages.ts +412 -0
  235. package/src/content/content-collections.ts +270 -0
  236. package/src/content/draft-state.ts +4 -3
  237. package/src/content/entry-commands.ts +54 -62
  238. package/src/content/entry-editor.ts +137 -32
  239. package/src/content/entry-fields.ts +25 -8
  240. package/src/content/entry-inspector.ts +225 -0
  241. package/src/content/entry-model.ts +38 -15
  242. package/src/content/entry-open.ts +80 -0
  243. package/src/content/entry-summaries.ts +440 -0
  244. package/src/content/file-record-ids.ts +80 -0
  245. package/src/content/file-records.ts +125 -0
  246. package/src/content/page-summaries.ts +129 -0
  247. package/src/content/record-entry.ts +201 -0
  248. package/src/content/writing-banner.ts +177 -0
  249. package/src/create/add-new-commands.ts +185 -0
  250. package/src/create/add-new-flow.ts +1116 -0
  251. package/src/create/add-new.ts +1014 -0
  252. package/src/create/element-name.ts +121 -0
  253. package/src/editor/canvas-context-menu.ts +1 -2
  254. package/src/editor/canvas-slash-bridge.ts +3 -6
  255. package/src/editor/content-slice.ts +16 -14
  256. package/src/editor/context-menu.ts +35 -22
  257. package/src/editor/convert-targets.ts +30 -35
  258. package/src/editor/convert-to-component.ts +78 -48
  259. package/src/editor/convert-to-repeater.ts +34 -22
  260. package/src/editor/editable-tags.ts +17 -2
  261. package/src/editor/file-drop-action.ts +29 -22
  262. package/src/editor/inline-edit-apply.ts +79 -17
  263. package/src/editor/inline-edit.ts +76 -50
  264. package/src/editor/inline-format.ts +59 -56
  265. package/src/editor/inline-link.ts +40 -15
  266. package/src/editor/insert-component.ts +91 -0
  267. package/src/editor/insert-zone-action.ts +14 -5
  268. package/src/editor/merge-tags.ts +58 -19
  269. package/src/editor/repeater-scope.ts +39 -28
  270. package/src/editor/shortcuts.ts +76 -42
  271. package/src/editor/slash-menu.ts +52 -14
  272. package/src/files/asset-versions.ts +4 -4
  273. package/src/files/components.ts +89 -20
  274. package/src/files/elements.ts +5 -6
  275. package/src/files/file-ops.ts +92 -41
  276. package/src/files/files.ts +248 -239
  277. package/src/files/fs-events.ts +18 -7
  278. package/src/files/media-meta.ts +97 -2
  279. package/src/files/media-paths.ts +3 -0
  280. package/src/files/media-types.ts +55 -0
  281. package/src/files/media-upload.ts +209 -52
  282. package/src/files/new-file-name.ts +156 -0
  283. package/src/files/serialize-document.ts +15 -5
  284. package/src/format/constraints.ts +1 -1
  285. package/src/format/convert-file.ts +27 -13
  286. package/src/format/format-choices.ts +2 -1
  287. package/src/format/format-host.ts +91 -50
  288. package/src/github/github-auth-status.ts +27 -3
  289. package/src/github/github-auth.ts +21 -11
  290. package/src/github/github-publish.ts +28 -23
  291. package/src/grid/cell-editors.ts +46 -31
  292. package/src/grid/cell-popovers.ts +5 -3
  293. package/src/grid/edit-buffer.ts +10 -9
  294. package/src/grid/grid-controller.ts +25 -23
  295. package/src/grid/grid-layout.ts +21 -5
  296. package/src/grid/grid-open.ts +3 -33
  297. package/src/grid/grid-panel.ts +65 -6
  298. package/src/grid/grid-reveal.ts +34 -0
  299. package/src/grid/grid-source.ts +9 -31
  300. package/src/grid/grid-view.ts +45 -23
  301. package/src/grid/redirects-grid.ts +14 -5
  302. package/src/grid/redirects.ts +16 -14
  303. package/src/grid/schema-columns.ts +25 -19
  304. package/src/grid/sources/connector-source.ts +47 -20
  305. package/src/grid/sources/content-source.ts +100 -31
  306. package/src/grid/sources/csv-file-source.ts +2 -2
  307. package/src/grid/tabulator-tables.d.ts +61 -34
  308. package/src/hosting/document.ts +2 -2
  309. package/src/hosting/stage.ts +7 -7
  310. package/src/i18n/i18n-commands.ts +3 -3
  311. package/src/media/media-commands.ts +181 -0
  312. package/src/media/media-library-model.ts +232 -0
  313. package/src/media/media-library.ts +1283 -0
  314. package/src/media/media-pane.ts +51 -20
  315. package/src/new-project/add-repo-modal.ts +20 -19
  316. package/src/new-project/import-tab.ts +10 -14
  317. package/src/new-project/location-fields.ts +2 -1
  318. package/src/new-project/new-project-modal.ts +12 -9
  319. package/src/packages/jxsuite-update.ts +4 -3
  320. package/src/packages/pull-package-sync.ts +26 -25
  321. package/src/page-params.ts +97 -68
  322. package/src/panels/activity-panel.ts +38 -14
  323. package/src/panels/ai-chat/attached-context.ts +13 -7
  324. package/src/panels/ai-chat/chat-markdown.ts +8 -8
  325. package/src/panels/ai-chat/chat-view.ts +80 -73
  326. package/src/panels/ai-chat/composer.ts +30 -33
  327. package/src/panels/ai-chat/sessions-view.ts +1 -2
  328. package/src/panels/ai-panel.ts +23 -20
  329. package/src/panels/block-action-bar.ts +57 -46
  330. package/src/panels/bottom-dock.ts +5 -3
  331. package/src/panels/canvas-dnd-bridge.ts +36 -26
  332. package/src/panels/chat-panel.ts +6 -6
  333. package/src/panels/collections-panel.ts +306 -0
  334. package/src/panels/component-preview.ts +35 -13
  335. package/src/panels/data-explorer.ts +63 -26
  336. package/src/panels/data-grid.ts +18 -11
  337. package/src/panels/dnd.ts +115 -138
  338. package/src/panels/editors.ts +52 -21
  339. package/src/panels/elements-panel.ts +19 -5
  340. package/src/panels/empty-state.ts +2 -2
  341. package/src/panels/events-panel.ts +84 -69
  342. package/src/panels/formula-workspace.ts +78 -54
  343. package/src/panels/frontmatter-fields.ts +33 -28
  344. package/src/panels/git-diff-open.ts +10 -6
  345. package/src/panels/head-panel.ts +488 -202
  346. package/src/panels/i18n-panel.ts +20 -12
  347. package/src/panels/imports-panel.ts +25 -47
  348. package/src/panels/jump-bar.ts +75 -31
  349. package/src/panels/layers-panel.ts +130 -101
  350. package/src/panels/left-panel.ts +25 -11
  351. package/src/panels/navigator-panels.ts +23 -11
  352. package/src/panels/pane-context.ts +140 -49
  353. package/src/panels/pane-grid.ts +55 -26
  354. package/src/panels/panel-registry.ts +36 -46
  355. package/src/panels/properties-panel.ts +182 -124
  356. package/src/panels/quick-search.ts +53 -31
  357. package/src/panels/right-panel.ts +201 -45
  358. package/src/panels/seo-modal.ts +54 -125
  359. package/src/panels/settings-menu.ts +63 -61
  360. package/src/panels/settings-pane.ts +268 -162
  361. package/src/panels/signals-panel.ts +156 -135
  362. package/src/panels/site-model.ts +367 -0
  363. package/src/panels/site-panel.ts +638 -0
  364. package/src/panels/statement-editor.ts +230 -140
  365. package/src/panels/style-panel.ts +253 -206
  366. package/src/panels/style-utils.ts +114 -51
  367. package/src/panels/stylebook-doc.ts +195 -60
  368. package/src/panels/stylebook-layers-panel.ts +48 -89
  369. package/src/panels/stylebook-panel.ts +60 -27
  370. package/src/panels/styles-panel.ts +327 -0
  371. package/src/panels/tab-drop.ts +27 -11
  372. package/src/panels/tab-strip.ts +143 -49
  373. package/src/platform-errors.ts +57 -43
  374. package/src/platform.ts +59 -31
  375. package/src/platforms/cloud.ts +373 -176
  376. package/src/platforms/default-platform.ts +14 -8
  377. package/src/platforms/devserver.ts +180 -142
  378. package/src/platforms/read-batcher.ts +16 -8
  379. package/src/project-list.ts +2 -1
  380. package/src/publish/deploy-checklist.ts +20 -9
  381. package/src/publish/pages-service.ts +66 -27
  382. package/src/publish/publish-changes.ts +491 -0
  383. package/src/publish/publish-commands.ts +88 -22
  384. package/src/publish/publish-ids.ts +49 -0
  385. package/src/publish/publish-panel.ts +10 -6
  386. package/src/publish/publish-quick.ts +148 -0
  387. package/src/publish/publish-workspace.ts +926 -0
  388. package/src/publish/source-control.ts +907 -0
  389. package/src/recent-projects.ts +15 -8
  390. package/src/resize-edges.ts +26 -36
  391. package/src/services/a11y-report.ts +26 -19
  392. package/src/services/agent-seed.ts +23 -11
  393. package/src/services/ai-ask.ts +9 -12
  394. package/src/services/ai-command-tools.ts +68 -62
  395. package/src/services/ai-import-tools.ts +80 -67
  396. package/src/services/ai-models.ts +17 -13
  397. package/src/services/ai-project-tools.ts +68 -32
  398. package/src/services/ai-session-store.ts +19 -10
  399. package/src/services/ai-system-prompt.ts +46 -20
  400. package/src/services/ai-tools.ts +71 -27
  401. package/src/services/ai-write-report.ts +20 -12
  402. package/src/services/ai-writes.ts +4 -4
  403. package/src/services/automation.ts +74 -51
  404. package/src/services/cem-export.ts +149 -58
  405. package/src/services/cf-settings.ts +4 -4
  406. package/src/services/clock.ts +6 -1
  407. package/src/services/code-services.ts +37 -31
  408. package/src/services/connection.ts +2 -2
  409. package/src/services/context-manager.ts +14 -10
  410. package/src/services/context-resolver.ts +20 -8
  411. package/src/services/data-service.ts +19 -15
  412. package/src/services/directory-picker.ts +20 -14
  413. package/src/services/document-assistant.ts +39 -19
  414. package/src/services/gated-registry.ts +10 -6
  415. package/src/services/harness/chat-reducer.ts +23 -1
  416. package/src/services/import-client.ts +91 -38
  417. package/src/services/import-seed.ts +8 -2
  418. package/src/services/jx-validate.ts +28 -31
  419. package/src/services/live-preview.ts +0 -0
  420. package/src/services/live-surfaces.ts +6 -3
  421. package/src/services/model-uri.ts +10 -2
  422. package/src/services/module-preloads.ts +12 -8
  423. package/src/services/monaco-buffer.ts +43 -24
  424. package/src/services/monaco-lazy.ts +7 -8
  425. package/src/services/monaco-setup.ts +23 -16
  426. package/src/services/notify.ts +44 -17
  427. package/src/services/popover-report.ts +25 -10
  428. package/src/services/preview-eval.ts +20 -8
  429. package/src/services/profile.ts +13 -6
  430. package/src/services/project-path.ts +13 -10
  431. package/src/services/references.ts +0 -0
  432. package/src/services/render-critic.ts +29 -9
  433. package/src/services/settings/definitions.ts +25 -14
  434. package/src/services/settings/kernel.ts +13 -4
  435. package/src/services/settings/write-queue.ts +9 -9
  436. package/src/services/token-lint.ts +12 -10
  437. package/src/services/tool-executor.ts +17 -5
  438. package/src/services/tool-outcomes.ts +44 -24
  439. package/src/services/trusted-types.ts +24 -7
  440. package/src/settings/contexts-section.ts +11 -8
  441. package/src/settings/contributed-section.ts +128 -70
  442. package/src/settings/css-vars-editor.ts +119 -32
  443. package/src/settings/defs-editor.ts +38 -35
  444. package/src/settings/developer-panels.ts +43 -0
  445. package/src/settings/extension-rows.ts +16 -8
  446. package/src/settings/extension-sections.ts +42 -14
  447. package/src/settings/extensions-section.ts +4 -1
  448. package/src/settings/general-settings.ts +101 -28
  449. package/src/settings/locales-section.ts +20 -12
  450. package/src/settings/preferences-dialog.ts +17 -7
  451. package/src/settings/preferences-keymap.ts +7 -5
  452. package/src/settings/preferences-sections.ts +11 -5
  453. package/src/settings/project-sections.ts +28 -11
  454. package/src/settings/schema-field-ui.ts +12 -1
  455. package/src/settings/section-registry.ts +116 -11
  456. package/src/settings/settings-dialog.ts +192 -0
  457. package/src/settings/settings-document.ts +186 -166
  458. package/src/shell/tree.ts +6 -5
  459. package/src/shell.ts +536 -477
  460. package/src/site-context.ts +101 -32
  461. package/src/state.ts +68 -57
  462. package/src/store.ts +54 -34
  463. package/src/studio.ts +219 -116
  464. package/src/style/live-preview.ts +1 -1
  465. package/src/style/project-styles.ts +40 -7
  466. package/src/style/stylebook-specimens.ts +89 -0
  467. package/src/style/stylebook-target.ts +26 -0
  468. package/src/style/tag-inheritance.ts +105 -0
  469. package/src/style/token-ref.ts +5 -4
  470. package/src/style/variables-focus.ts +61 -0
  471. package/src/style/variables-view.ts +235 -0
  472. package/src/surfaces/about.ts +18 -19
  473. package/src/surfaces/add-new.json +1482 -0
  474. package/src/surfaces/add-new.ts +325 -0
  475. package/src/surfaces/add-repo.ts +17 -19
  476. package/src/surfaces/ai-chat.ts +33 -38
  477. package/src/surfaces/ai-credentials-form.ts +6 -16
  478. package/src/surfaces/ai-managed-connect.ts +3 -4
  479. package/src/surfaces/ai-model-picker.ts +3 -5
  480. package/src/surfaces/block-action-bar.ts +22 -11
  481. package/src/surfaces/boot-failure.json +4 -3
  482. package/src/surfaces/boot-failure.ts +4 -5
  483. package/src/surfaces/bottom-dock.json +1 -1
  484. package/src/surfaces/bottom-dock.ts +9 -18
  485. package/src/surfaces/canvas-stage.json +30 -19
  486. package/src/surfaces/canvas-stage.ts +17 -16
  487. package/src/surfaces/cf-account-picker.ts +17 -18
  488. package/src/surfaces/collections-panel.json +615 -0
  489. package/src/surfaces/collections-panel.ts +168 -0
  490. package/src/surfaces/commandbar.json +241 -96
  491. package/src/surfaces/commandbar.ts +145 -105
  492. package/src/surfaces/convert-repeater.ts +17 -19
  493. package/src/surfaces/data-actions.ts +9 -7
  494. package/src/surfaces/dialog.ts +26 -28
  495. package/src/surfaces/diff-toolbar.ts +9 -7
  496. package/src/surfaces/empty-state.json +1 -1
  497. package/src/surfaces/empty-state.ts +7 -10
  498. package/src/surfaces/entry-editor.json +136 -0
  499. package/src/surfaces/entry-editor.ts +35 -11
  500. package/src/surfaces/entry-inspector.json +371 -0
  501. package/src/surfaces/entry-inspector.ts +143 -0
  502. package/src/surfaces/expression-editor.ts +11 -25
  503. package/src/surfaces/files-panel.ts +27 -14
  504. package/src/surfaces/formula-palette.ts +4 -5
  505. package/src/surfaces/github-auth.ts +16 -20
  506. package/src/surfaces/github-publish.ts +17 -22
  507. package/src/surfaces/grid-cell.ts +30 -31
  508. package/src/surfaces/grid-open.ts +10 -14
  509. package/src/surfaces/grid-panel.ts +13 -9
  510. package/src/surfaces/grid-replace.ts +13 -13
  511. package/src/surfaces/grid-views.ts +15 -18
  512. package/src/surfaces/inspector-dock.json +162 -14
  513. package/src/surfaces/inspector-dock.ts +59 -31
  514. package/src/surfaces/jump-bar.ts +5 -6
  515. package/src/surfaces/jxsuite-update.ts +16 -22
  516. package/src/surfaces/library-pane.json +670 -437
  517. package/src/surfaces/library-pane.ts +111 -77
  518. package/src/surfaces/logic-panel.ts +17 -30
  519. package/src/surfaces/logic-workspace.ts +13 -15
  520. package/src/surfaces/media-browser.json +62 -6
  521. package/src/surfaces/media-browser.ts +26 -11
  522. package/src/surfaces/media-field.json +1 -1
  523. package/src/surfaces/media-field.ts +4 -5
  524. package/src/surfaces/media-library.json +1586 -0
  525. package/src/surfaces/media-library.ts +282 -0
  526. package/src/surfaces/media-pane.ts +8 -7
  527. package/src/surfaces/media-pick-dialog.json +71 -0
  528. package/src/surfaces/media-pick-dialog.ts +132 -0
  529. package/src/surfaces/menu.ts +47 -23
  530. package/src/surfaces/navigator-dock.ts +11 -12
  531. package/src/surfaces/new-project.ts +27 -26
  532. package/src/surfaces/pane-context.json +144 -77
  533. package/src/surfaces/pane-context.ts +44 -25
  534. package/src/surfaces/pane-grid.ts +15 -10
  535. package/src/surfaces/panel-activity.ts +5 -6
  536. package/src/surfaces/panel-data.ts +3 -4
  537. package/src/surfaces/panel-deploy-checklist.json +12 -6
  538. package/src/surfaces/panel-deploy-checklist.ts +8 -7
  539. package/src/surfaces/panel-elements.ts +5 -7
  540. package/src/surfaces/panel-i18n.ts +5 -7
  541. package/src/surfaces/panel-imports.ts +6 -13
  542. package/src/surfaces/panel-outline.ts +25 -19
  543. package/src/surfaces/panel-page.json +72 -2
  544. package/src/surfaces/panel-page.ts +49 -25
  545. package/src/surfaces/panel-problems.ts +5 -7
  546. package/src/surfaces/panel-signals.json +1 -1
  547. package/src/surfaces/panel-signals.ts +25 -39
  548. package/src/surfaces/panel-stylebook-layers.json +71 -204
  549. package/src/surfaces/panel-stylebook-layers.ts +5 -29
  550. package/src/surfaces/preferences.json +120 -48
  551. package/src/surfaces/preferences.ts +29 -11
  552. package/src/surfaces/progress-modal.ts +15 -9
  553. package/src/surfaces/properties-panel.json +1 -1
  554. package/src/surfaces/properties-panel.ts +20 -42
  555. package/src/surfaces/publish-quick.json +428 -0
  556. package/src/surfaces/publish-quick.ts +165 -0
  557. package/src/surfaces/publish-workspace.json +2892 -0
  558. package/src/surfaces/publish-workspace.ts +391 -0
  559. package/src/surfaces/publish.ts +18 -18
  560. package/src/surfaces/push-plan.ts +7 -8
  561. package/src/surfaces/rail.json +1 -159
  562. package/src/surfaces/rail.ts +22 -79
  563. package/src/surfaces/reference-field.ts +11 -15
  564. package/src/surfaces/schema-builder.ts +16 -22
  565. package/src/surfaces/schema-form.json +10 -2
  566. package/src/surfaces/schema-form.ts +17 -25
  567. package/src/surfaces/secret-field.ts +9 -6
  568. package/src/surfaces/seo.json +1 -1
  569. package/src/surfaces/seo.ts +21 -15
  570. package/src/surfaces/settings-contexts.ts +9 -7
  571. package/src/surfaces/settings-contributed.json +5 -5
  572. package/src/surfaces/settings-contributed.ts +32 -12
  573. package/src/surfaces/settings-css-vars.json +44 -36
  574. package/src/surfaces/settings-css-vars.ts +82 -16
  575. package/src/surfaces/settings-defs.json +2 -2
  576. package/src/surfaces/settings-defs.ts +17 -21
  577. package/src/surfaces/settings-deploy.json +2 -15
  578. package/src/surfaces/settings-deploy.ts +9 -16
  579. package/src/surfaces/settings-dialog.json +51 -0
  580. package/src/surfaces/settings-dialog.ts +169 -0
  581. package/src/surfaces/settings-extensions.ts +5 -6
  582. package/src/surfaces/settings-head.ts +33 -39
  583. package/src/surfaces/settings-locales.ts +8 -20
  584. package/src/surfaces/settings-overview.json +3 -3
  585. package/src/surfaces/settings-overview.ts +14 -8
  586. package/src/surfaces/settings-packages.ts +8 -7
  587. package/src/surfaces/settings-pane.json +269 -46
  588. package/src/surfaces/settings-pane.ts +88 -36
  589. package/src/surfaces/settings-rawjson.ts +5 -6
  590. package/src/surfaces/shell.json +2 -1
  591. package/src/surfaces/shell.ts +1 -2
  592. package/src/surfaces/site-panel.json +1029 -0
  593. package/src/surfaces/site-panel.ts +233 -0
  594. package/src/surfaces/slash-menu.json +63 -21
  595. package/src/surfaces/slash-menu.ts +42 -9
  596. package/src/surfaces/statements.ts +13 -18
  597. package/src/surfaces/statusbar.ts +56 -29
  598. package/src/surfaces/style-panel.ts +18 -31
  599. package/src/surfaces/stylebook-chrome.ts +3 -5
  600. package/src/surfaces/styles-panel.json +735 -0
  601. package/src/surfaces/styles-panel.ts +195 -0
  602. package/src/surfaces/styles-variables.json +149 -0
  603. package/src/surfaces/styles-variables.ts +145 -0
  604. package/src/surfaces/tab-strip.json +4 -4
  605. package/src/surfaces/tab-strip.ts +14 -13
  606. package/src/surfaces/target-line.ts +6 -7
  607. package/src/surfaces/welcome.ts +6 -8
  608. package/src/surfaces/writing-banner.json +94 -0
  609. package/src/surfaces/writing-banner.ts +80 -0
  610. package/src/tabs/bare-repeaters.ts +101 -0
  611. package/src/tabs/patch-ops.ts +4 -3
  612. package/src/tabs/project-config.ts +32 -21
  613. package/src/tabs/selection.ts +36 -8
  614. package/src/tabs/tab.ts +99 -48
  615. package/src/tabs/transact.ts +98 -53
  616. package/src/types.ts +53 -43
  617. package/src/ui/ai-credentials-form.ts +10 -13
  618. package/src/ui/ai-model-picker.ts +3 -3
  619. package/src/ui/cf-account-picker.ts +7 -9
  620. package/src/ui/color-selector.ts +9 -5
  621. package/src/ui/dynamic-slot.ts +7 -8
  622. package/src/ui/expression-editor.ts +112 -105
  623. package/src/ui/form-controls.ts +104 -56
  624. package/src/ui/formula-catalog.ts +239 -230
  625. package/src/ui/formula-chips.ts +33 -18
  626. package/src/ui/layers.ts +57 -31
  627. package/src/ui/media-picker.ts +300 -47
  628. package/src/ui/popover-surface.ts +20 -12
  629. package/src/ui/progress-modal.ts +13 -8
  630. package/src/ui/regions.ts +14 -12
  631. package/src/ui/schema-form.ts +372 -97
  632. package/src/ui/surface.ts +71 -8
  633. package/src/ui/timing.ts +9 -0
  634. package/src/ui/value-source.ts +44 -31
  635. package/src/ui/virtual-window.ts +29 -3
  636. package/src/utils/base64.ts +6 -4
  637. package/src/utils/edit-display.ts +366 -111
  638. package/src/utils/element-selectors.ts +3 -2
  639. package/src/utils/google-fonts.ts +15 -14
  640. package/src/utils/inherited-style.ts +18 -20
  641. package/src/utils/link-target.ts +1 -1
  642. package/src/utils/local-day.ts +18 -0
  643. package/src/utils/preview-format.ts +25 -3
  644. package/src/utils/strip-events.ts +49 -22
  645. package/src/utils/studio-utils.ts +29 -14
  646. package/src/view.ts +2 -3
  647. package/src/workspace/pane-derive.ts +14 -16
  648. package/src/workspace/session.ts +81 -50
  649. package/src/workspace/tab-workspace.ts +137 -0
  650. package/src/workspace/workspace-back.ts +189 -0
  651. package/src/workspace/workspace-home.ts +133 -0
  652. package/src/workspace/workspace-ids.ts +129 -0
  653. package/src/workspace/workspace-switch.ts +372 -0
  654. package/src/workspace/workspace.ts +165 -47
  655. package/styles/shell-frame.css +30 -7
  656. package/styles/shell-frame.json +15 -3
  657. package/dist/chunks/2020-va2wwra4.js +0 -4
  658. package/dist/chunks/adapter-f93pafd7.js +0 -4
  659. package/dist/chunks/cf-account-picker-af1h381v.js +0 -4
  660. package/dist/chunks/cf-settings-125tdm0w.js +0 -4
  661. package/dist/chunks/color-area-jqhna8zy.js +0 -4
  662. package/dist/chunks/color-field-embq5ctg.js +0 -4
  663. package/dist/chunks/color-fpezvnkt.js +0 -4
  664. package/dist/chunks/color-slider-1qmw7wqy.js +0 -4
  665. package/dist/chunks/combobox-773hdzyj.js +0 -4
  666. package/dist/chunks/components-ax2f1fnn.js +0 -4
  667. package/dist/chunks/content-source-108aqtk1.js +0 -4
  668. package/dist/chunks/convert-to-repeater-ry5rmppr.js +0 -4
  669. package/dist/chunks/dialog-mtm9fq5t.js +0 -4
  670. package/dist/chunks/editor-pfgdmkb0.js +0 -4
  671. package/dist/chunks/entry-commands-t0k1q0kx.js +0 -4
  672. package/dist/chunks/extension-sections-6mwh2hf8.js +0 -4
  673. package/dist/chunks/file-ops-meej5mqf.js +0 -4
  674. package/dist/chunks/files-44vp8a2s.js +0 -4
  675. package/dist/chunks/format-host-7q1petb9.js +0 -4
  676. package/dist/chunks/fs-events-h2mwnxaz.js +0 -4
  677. package/dist/chunks/git-panel-zngbymvd.js +0 -4
  678. package/dist/chunks/grid-view-sx9vynsp.js +0 -51
  679. package/dist/chunks/icons-p44xhjf0.js +0 -4
  680. package/dist/chunks/iframe-entry-f7mqjwpm.js +0 -5
  681. package/dist/chunks/iframe-entry-haw7jkvz.js +0 -5
  682. package/dist/chunks/iframe-entry-z6qrytv3.js +0 -5
  683. package/dist/chunks/iframe-host-qk3ycq87.js +0 -4
  684. package/dist/chunks/index-wkyfjeqz.js +0 -4
  685. package/dist/chunks/jsonMode-s8kt9dsj.js +0 -13
  686. package/dist/chunks/jx-validate-psgd7vsx.js +0 -4
  687. package/dist/chunks/layers-panel-1kq2jyfk.js +0 -4
  688. package/dist/chunks/layers-xd92fg8d.js +0 -4
  689. package/dist/chunks/listbox-s8fkmnq8.js +0 -4
  690. package/dist/chunks/lit-html-ac4cwwr4.js +0 -4
  691. package/dist/chunks/media-picker-0svzkdyb.js +0 -4
  692. package/dist/chunks/menu-37d07z9m.js +0 -4
  693. package/dist/chunks/menu-5c55ea3d.js +0 -4
  694. package/dist/chunks/monaco-binding-z6r70pdt.js +0 -4
  695. package/dist/chunks/monaco-buffer-fz6gq5y7.js +0 -4
  696. package/dist/chunks/monaco-setup-q4axkgj7.js +0 -4
  697. package/dist/chunks/notify-0xgtn8q1.js +0 -4
  698. package/dist/chunks/number-field-gw7sq8rn.js +0 -4
  699. package/dist/chunks/parse-897fvqah.js +0 -4
  700. package/dist/chunks/platform-v1qctbe6.js +0 -4
  701. package/dist/chunks/popover-8htra4er.js +0 -4
  702. package/dist/chunks/publish-panel-ym1fmgq5.js +0 -4
  703. package/dist/chunks/quick-search-a54e6t5n.js +0 -4
  704. package/dist/chunks/references-gmqp82fs.js +0 -4
  705. package/dist/chunks/right-panel-v7t9awbk.js +0 -4
  706. package/dist/chunks/section-registry-vhyf3zsr.js +0 -4
  707. package/dist/chunks/select-n3v7gwas.js +0 -4
  708. package/dist/chunks/split-pff8f3ze.js +0 -4
  709. package/dist/chunks/studio-0bhx5hz6.js +0 -5
  710. package/dist/chunks/studio-0k1ddnyy.js +0 -6
  711. package/dist/chunks/studio-1b04pd0j.js +0 -64
  712. package/dist/chunks/studio-4dwbj6gb.js +0 -5
  713. package/dist/chunks/studio-4tanh828.js +0 -5
  714. package/dist/chunks/studio-55h4mstj.js +0 -4
  715. package/dist/chunks/studio-5tnvjkz4.js +0 -5
  716. package/dist/chunks/studio-60dqgb0c.js +0 -5
  717. package/dist/chunks/studio-61dp09qg.js +0 -9
  718. package/dist/chunks/studio-63epcrj2.js +0 -5
  719. package/dist/chunks/studio-74k29dy9.js +0 -5
  720. package/dist/chunks/studio-7vg6jcd3.js +0 -5
  721. package/dist/chunks/studio-7zx31knw.js +0 -9
  722. package/dist/chunks/studio-8bxk97km.js +0 -5
  723. package/dist/chunks/studio-933e30n4.js +0 -5
  724. package/dist/chunks/studio-98wnwhbg.js +0 -5
  725. package/dist/chunks/studio-9mccjwjh.js +0 -14
  726. package/dist/chunks/studio-a2ke1e4t.js +0 -5
  727. package/dist/chunks/studio-e3a2a6v3.js +0 -4
  728. package/dist/chunks/studio-e81q1vb9.js +0 -5
  729. package/dist/chunks/studio-epgrmqqm.js +0 -5
  730. package/dist/chunks/studio-ery42sqr.js +0 -4
  731. package/dist/chunks/studio-g1shz58g.js +0 -5
  732. package/dist/chunks/studio-gf0fz03c.js +0 -5
  733. package/dist/chunks/studio-gjtpe62q.js +0 -6
  734. package/dist/chunks/studio-gkskhg7m.js +0 -5
  735. package/dist/chunks/studio-gx4dnjzd.js +0 -5
  736. package/dist/chunks/studio-j03zga3y.js +0 -9
  737. package/dist/chunks/studio-jhpxeckz.js +0 -5
  738. package/dist/chunks/studio-k01r7ykp.js +0 -5
  739. package/dist/chunks/studio-kk7h30ne.js +0 -7
  740. package/dist/chunks/studio-kt1zqney.js +0 -5
  741. package/dist/chunks/studio-m3cwhvye.js +0 -5
  742. package/dist/chunks/studio-mcayt6hz.js +0 -5
  743. package/dist/chunks/studio-myjcghv3.js +0 -5
  744. package/dist/chunks/studio-n8bxwc3y.js +0 -4
  745. package/dist/chunks/studio-ngm8gvpb.js +0 -5
  746. package/dist/chunks/studio-nj5a01jy.js +0 -928
  747. package/dist/chunks/studio-pcgz8heb.js +0 -5
  748. package/dist/chunks/studio-qcsq0t15.js +0 -5
  749. package/dist/chunks/studio-qkstvve9.js +0 -5
  750. package/dist/chunks/studio-qv1pwd3c.js +0 -5
  751. package/dist/chunks/studio-rc6dvxjb.js +0 -7
  752. package/dist/chunks/studio-s8dmmz66.js +0 -5
  753. package/dist/chunks/studio-sp5xzbj4.js +0 -6
  754. package/dist/chunks/studio-szsjbj0g.js +0 -5
  755. package/dist/chunks/studio-t1xzawhr.js +0 -16
  756. package/dist/chunks/studio-tdcprbqb.js +0 -5
  757. package/dist/chunks/studio-vrmcjf9g.js +0 -7
  758. package/dist/chunks/studio-vyc0b4he.js +0 -10
  759. package/dist/chunks/studio-w0cgf6jg.js +0 -5
  760. package/dist/chunks/studio-w3hskzqk.js +0 -5
  761. package/dist/chunks/studio-xgrgcdyh.js +0 -9
  762. package/dist/chunks/studio-xz2yxfcb.js +0 -5
  763. package/dist/chunks/studio-y6n42tgs.js +0 -5
  764. package/dist/chunks/studio-yb560vxr.js +0 -5
  765. package/dist/chunks/studio-yn9f8vtx.js +0 -5
  766. package/dist/chunks/studio-yw05w8f0.js +0 -7
  767. package/dist/chunks/studio-z16sgavc.js +0 -5
  768. package/dist/chunks/studio-zey7zsdw.js +0 -12
  769. package/dist/chunks/studio-zyqn40w4.js +0 -5
  770. package/dist/chunks/swatch-group-8qh9a3bm.js +0 -4
  771. package/dist/chunks/tabs-jwthg40w.js +0 -4
  772. package/dist/chunks/textfield-spy3hc77.js +0 -4
  773. package/dist/chunks/toast-4d35zd64.js +0 -4
  774. package/dist/chunks/toast-host-8sjmfed3.js +0 -4
  775. package/dist/chunks/tooltip-fd6g9xy3.js +0 -4
  776. package/dist/chunks/tree-h19v1jfz.js +0 -4
  777. package/dist/chunks/tsMode-2frah6h1.js +0 -14
  778. package/dist/chunks/workspace-zt81g1ms.js +0 -4
  779. package/dist/chunks/ws-client-n2bh4hkf.js +0 -4
  780. package/src/panels/frontmatter-panel.ts +0 -701
  781. package/src/panels/git-panel.ts +0 -1120
  782. package/src/surfaces/doc-header.json +0 -776
  783. package/src/surfaces/doc-header.ts +0 -231
  784. package/src/surfaces/git-panel.json +0 -1880
  785. package/src/surfaces/git-panel.ts +0 -272
@@ -7,7 +7,8 @@
7
7
  * a command, so what the document is handed is a PROJECTION of the registry rather than a list of
8
8
  * buttons: `primary` is `forPlacement("commandbar/primary")` (capped at five by
9
9
  * `scripts/check-chrome-budget.ts`), `docks` is the three dock records with the shell's state
10
- * beside them, `layouts` is the project's own layout record, and the ⬢ Studio menu is
10
+ * beside them, `workspaces` is the five-workspace switcher with `shell.workspace` selected, the ⚙
11
+ * gear is the `settings/menu` placement, and the ⬢ Studio menu is
11
12
  * `forPlacement("commandbar/overflow")` opened on the `menu` surface. With no project open the same
12
13
  * document renders; the records' own `when` clauses empty it (§13.1: enablement is a predicate with
13
14
  * a sentence, never a second template).
@@ -24,22 +25,23 @@
24
25
  * is the platform's.
25
26
  *
26
27
  * **Retired, with a name, a chord and a residue** (`studio-ui-guidelines.md` §12.2): Open Project +
27
- * New Project + recents → the pill and `Project: Open Recent…`; `Manage` → `File: Browse Library`;
28
- * `Publish` → the `Publish:` family; `Sync Project` → Source Control. The five-mode switcher lives
29
- * in the pane context bar and is reachable as `View: Set Canvas Mode` in the palette.
28
+ * New Project + recents → the pill and `Project: Open Recent…`; `Manage` → the Content workspace
29
+ * (`view.setWorkspace { workspace: "content" }`, ⌘2); `Publish` → the `Publish:` family; `Sync
30
+ * Project` → Source Control. The five-mode switcher lives in the pane context bar and is reachable
31
+ * as `View: Set Canvas Mode` in the palette.
30
32
  *
31
33
  * @docs studio/interface
32
34
  */
33
35
 
34
36
  import { presenceProjection } from "../collab/presence-chips";
35
37
  import { effect, effectScope, reactive } from "../reactivity";
36
- import { activeTab } from "../workspace/workspace";
38
+ import { activeTab, workspace } from "../workspace/workspace";
37
39
  import { primarySelection } from "../tabs/selection";
40
+ import { stylebookTarget } from "../style/stylebook-target";
38
41
  import { shell } from "../shell";
39
42
  import { openQuickSearch } from "../panels/quick-search";
40
- import { showPromptDialog } from "../ui/layers";
41
43
  import { getPlatform, hasPlatform } from "../platform";
42
- import { getPreviewNavigateHandler } from "../canvas/preview-navigate";
44
+ import { openUrlExternally } from "../canvas/preview-navigate";
43
45
  import { armPreviewOverlay, flushPreviewOverlay } from "../preview/preview-overlay";
44
46
  import { documentUrlPattern, dynamicRouteParams } from "../page-params";
45
47
  import { getNodeAtPath, nodeLabel, projectState } from "../store";
@@ -49,6 +51,14 @@ import { notify } from "../services/notify";
49
51
  import { mountSurface, registerSurface } from "../ui/surface";
50
52
  import { rectOf } from "../utils/geometry";
51
53
  import { openMenu } from "./menu";
54
+ import {
55
+ dismissSettingsMenu,
56
+ isSettingsMenuOpen,
57
+ openSettingsMenu,
58
+ SETTINGS_MENU_PLACEMENT,
59
+ } from "../panels/settings-menu";
60
+ import { WORKSPACES } from "../workspace/workspace-ids";
61
+ import type { WorkspaceId } from "../workspace/workspace-ids";
52
62
  import commandbarDoc from "./commandbar.json";
53
63
  import type { PresenceProjection } from "../collab/presence-chips";
54
64
  import type { MenuHandle, MenuRowProjection } from "./menu";
@@ -57,9 +67,8 @@ import type { Tab } from "../tabs/tab";
57
67
  import type { SiteBuildResult, SitePreviewResult, StudioPlatform } from "../types";
58
68
  import type { CommandRegistry } from "../commands/registry";
59
69
  import type { EffectScope } from "@vue/reactivity";
60
- import type { JxDocument } from "@jxsuite/schema/types";
61
70
 
62
- registerSurface("commandbar", commandbarDoc as unknown as JxDocument);
71
+ registerSurface("commandbar", commandbarDoc);
63
72
 
64
73
  /**
65
74
  * What the Command Bar is handed at mount.
@@ -122,12 +131,22 @@ export interface DockProjection {
122
131
  disabled: boolean;
123
132
  }
124
133
 
125
- /** One layout tab. */
126
- export interface LayoutTabProjection {
127
- id: string;
128
- name: string;
129
- active: boolean;
134
+ /** One workspace tab. */
135
+ export interface WorkspaceTabProjection {
136
+ id: WorkspaceId;
130
137
  title: string;
138
+ icon: string;
139
+ /** The tab's tooltip: its title and chord, plus what its badge counts. */
140
+ tooltip: string;
141
+ /** The count drawn beside the title; empty for none, which hides the badge. */
142
+ badge: string;
143
+ /**
144
+ * What the badge counts, in words, as the tab's `aria-description`; empty for none. The badge is
145
+ * decorative, so this is how the count reaches a screen reader: the tab's NAME stays its title,
146
+ * which is what the label draws.
147
+ */
148
+ description: string;
149
+ hasBadge: boolean;
131
150
  }
132
151
 
133
152
  /** One segment of the address bar. */
@@ -146,12 +165,20 @@ export interface SegmentProjection {
146
165
  export type WindowControlLayout = "none" | "mac" | "other";
147
166
 
148
167
  /** The document's scope: the projections, and the host functions its handlers `call`. */
149
- interface CommandBarScope extends Record<string, unknown> {
168
+ interface CommandBarScope {
150
169
  csd: WindowControlLayout;
151
170
  menuVisible: boolean;
152
171
  menuOpen: boolean;
153
- layoutsVisible: boolean;
154
- layouts: LayoutTabProjection[];
172
+ workspacesVisible: boolean;
173
+ workspaces: WorkspaceTabProjection[];
174
+ /** The selected workspace tab's value: `shell.workspace`. */
175
+ workspace: string;
176
+ /** The quick-publish chevron beside the Publish tab: `publish.quick`, drawn when registered. */
177
+ quickVisible: boolean;
178
+ quickDisabled: boolean;
179
+ quickTooltip: string;
180
+ settingsVisible: boolean;
181
+ settingsOpen: boolean;
155
182
  segments: SegmentProjection[];
156
183
  chord: string;
157
184
  hasChord: boolean;
@@ -162,9 +189,8 @@ interface CommandBarScope extends Record<string, unknown> {
162
189
  run: (id: string) => void;
163
190
  openSegment: (key: SegmentProjection["key"]) => void;
164
191
  openPicker: () => void;
165
- setLayout: (id: string) => void;
166
- renameLayout: (id: string) => void;
167
- saveLayout: () => void;
192
+ setWorkspace: (id: string) => void;
193
+ openSettings: (anchor: EventTarget | null) => void;
168
194
  openStudioMenu: (opener: HTMLElement) => void;
169
195
  windowControl: (action: keyof WindowControls) => void;
170
196
  }
@@ -194,6 +220,9 @@ const DOCKS = [
194
220
  { dock: "bottom", icon: "rows", id: "view.toggleBottomDock", mirror: false },
195
221
  ] as const;
196
222
 
223
+ /** The record the chevron beside the Publish tab renders. */
224
+ const QUICK_PUBLISH = "publish.quick";
225
+
197
226
  /** The palette mode each segment of the address opens. */
198
227
  const SEGMENT_MODES = { document: "files", project: "projects", selection: "nodes" } as const;
199
228
 
@@ -262,7 +291,7 @@ export function openInBrowserTarget(tab: Tab | null): BrowserTarget {
262
291
  }
263
292
  const params = dynamicRouteParams(documentPath);
264
293
  if (params.length > 0) {
265
- const chosen = (tab?.session.ui.previewParams ?? {}) as Record<string, string>;
294
+ const chosen: Record<string, string> = tab?.session.ui.previewParams ?? {};
266
295
  const missing = params.filter((name) => !chosen[name]);
267
296
  if (missing.length > 0) {
268
297
  const names = missing.map((name) => `:${name}`).join(", ");
@@ -280,22 +309,6 @@ export function openInBrowserTarget(tab: Tab | null): BrowserTarget {
280
309
  return { path: route === "/" ? "/" : trailingSlash === "always" ? `${route}/` : route };
281
310
  }
282
311
 
283
- /**
284
- * Hand a URL to the user's real browser.
285
- *
286
- * Reuses the seam the desktop launchers already register for Preview link clicks
287
- * (`canvas/preview-navigate.ts`), which routes through the OS rather than navigating a webview with
288
- * no address bar; the browser build falls back to a new tab.
289
- */
290
- function openUrlExternally(url: string) {
291
- const override = getPreviewNavigateHandler();
292
- if (override) {
293
- override(url);
294
- return;
295
- }
296
- window.open(url, "_blank", "noopener,noreferrer");
297
- }
298
-
299
312
  /**
300
313
  * Run `View: Open in Browser`, reporting the blocking reason when there is one.
301
314
  *
@@ -482,8 +495,8 @@ const BUILD_SITE = "project.buildSite";
482
495
  const OPEN_IN_BROWSER = "view.openInBrowser";
483
496
 
484
497
  /** The sentence in an unknown thrown value. */
485
- function errorText(error: unknown): string {
486
- return error instanceof Error ? error.message : String(error);
498
+ function errorText(cause: unknown): string {
499
+ return cause instanceof Error ? cause.message : String(cause);
487
500
  }
488
501
 
489
502
  /** The document's label: its path without the project root, which is already segment one. */
@@ -497,11 +510,21 @@ export function documentSegmentLabel(tab: Tab | null): string {
497
510
  return root && trimmed.startsWith(`${root}/`) ? trimmed.slice(root.length + 1) : trimmed;
498
511
  }
499
512
 
500
- /** The selection's label — the Outline's own `nodeLabel`, so the two never disagree. */
513
+ /**
514
+ * The selection's label — the Outline's own `nodeLabel`, so the two never disagree.
515
+ *
516
+ * In the Styles workspace's Elements view the selection is a TAG (`stylebookTarget`), and the
517
+ * segment names it the way the status bar and the Style body do: `project.json › h1`, not the root
518
+ * node of the catalogue's document.
519
+ */
501
520
  export function selectionSegmentLabel(tab: Tab | null): string {
502
521
  if (shell.layoutSelection) {
503
522
  return "layout";
504
523
  }
524
+ const tag = stylebookTarget(tab);
525
+ if (tag) {
526
+ return tag.replaceAll(" ", " › ");
527
+ }
505
528
  const paths = tab?.session.selection ?? [];
506
529
  const selection = primarySelection(paths);
507
530
  if (!tab || !selection) {
@@ -515,30 +538,6 @@ export function selectionSegmentLabel(tab: Tab | null): string {
515
538
  return nodeLabel(getNodeAtPath(tab.doc.document, selection));
516
539
  }
517
540
 
518
- /** Ask for a name, then run the command. Exported for the same reason `runOpenInBrowser` is. */
519
- export async function saveLayoutPrompt(registry: CommandRegistry): Promise<void> {
520
- const name = await showPromptDialog("Save layout", {
521
- confirmLabel: "Save",
522
- message: "Remembers this project's Navigator panel, dock widths and Inspector tab.",
523
- placeholder: "Layout name",
524
- });
525
- if (name) {
526
- await runReported(registry, "view.saveLayout", { name }, "Command Bar");
527
- }
528
- }
529
-
530
- /** The double-click gesture, routed through the command so the rename has one implementation. */
531
- export async function renameLayoutPrompt(
532
- registry: CommandRegistry,
533
- layout: string,
534
- current: string,
535
- ): Promise<void> {
536
- const name = await showPromptDialog("Rename layout", { confirmLabel: "Rename", value: current });
537
- if (name) {
538
- await runReported(registry, "view.renameLayout", { layout, name }, "Command Bar");
539
- }
540
- }
541
-
542
541
  interface WindowControls {
543
542
  minimize: () => void;
544
543
  maximize: () => void;
@@ -546,11 +545,17 @@ interface WindowControls {
546
545
  }
547
546
 
548
547
  function windowControls(): WindowControls | undefined {
549
- return (globalThis as unknown as { __jxPlatform?: { windowControls?: WindowControls } })
550
- .__jxPlatform?.windowControls;
548
+ const platform = globalThis.__jxPlatform;
549
+ if (platform == null || !("windowControls" in platform)) {
550
+ return undefined;
551
+ }
552
+ /* SAFETY: the PAL interface deliberately leaves `windowControls` undeclared; the adapters that add
553
+ it is the desktop launcher's (`chromium/platform.ts` under the Electron shell), whose objects carry the `close`,
554
+ `maximize` and `minimize` functions this bar calls. */
555
+ return platform.windowControls as WindowControls | undefined;
551
556
  }
552
557
 
553
- // ─── The Command Center pill, the layout tabs and the docks, projected ───────
558
+ // ─── The Command Center pill, the workspace tabs and the docks, projected ────
554
559
 
555
560
  /**
556
561
  * `◈ project › document › selection`: four facts about where you are, in non-collapsible chrome
@@ -579,25 +584,35 @@ function projectSegments(tab: Tab | null): SegmentProjection[] {
579
584
  }
580
585
 
581
586
  /**
582
- * `Write · Design · Build · Ship · +` — named arrangements, as plain-text tabs.
587
+ * `Design · Content · Media · Styles · Publish`: the five workspaces, as a tablist.
583
588
  *
584
- * Each tab RUNS `view.setLayout`, so the click, the palette row and an agent all take the same
585
- * path; double-clicking one renames it, and `+` saves whatever is on screen now. **A layout
586
- * reconfigures; it never removes**: every panel stays on the rail, on its chord and in the palette
587
- * after any layout is applied.
589
+ * Each tab RUNS `view.setWorkspace`, so the click, ⌘1–5, the palette row and a script all take the
590
+ * same path, and the selected tab is `shell.workspace` rather than a second record of it. Publish
591
+ * carries the count of uncommitted changes, which is what the workspace is there to deal with; at
592
+ * zero the badge is not drawn, because "0" is a number a reader has to read to learn nothing.
588
593
  */
589
- function projectLayouts(registry: CommandRegistry | null): LayoutTabProjection[] {
594
+ function projectWorkspaces(registry: CommandRegistry | null): WorkspaceTabProjection[] {
590
595
  // `get` first: a registry that has not been handed the shell's records yet (the skeleton the bar
591
596
  // Paints before the bootstrap composes them) has no verb to ask about.
592
- if (!registry?.get("view.setLayout") || !registry.isEnabled("view.setLayout")) {
597
+ if (!registry?.get("view.setWorkspace") || !registry.isEnabled("view.setWorkspace")) {
593
598
  return [];
594
599
  }
595
- return shell.layouts.map((preset) => ({
596
- active: preset.id === shell.layout,
597
- id: preset.id,
598
- name: preset.name,
599
- title: `${preset.name} layout — double-click to rename`,
600
- }));
600
+ const dirty = shell.git.status?.files.length ?? 0;
601
+ return WORKSPACES.map((entry) => {
602
+ const badge = entry.id === "publish" && dirty > 0 ? String(dirty) : "";
603
+ const chord = registry.keymap.formatBinding(`workspace.focus.${entry.id}`);
604
+ const named = chord ? `${entry.title} (${chord})` : entry.title;
605
+ const description = badge ? `${badge} unpublished ${dirty === 1 ? "change" : "changes"}` : "";
606
+ return {
607
+ badge,
608
+ description,
609
+ hasBadge: badge !== "",
610
+ icon: entry.icon,
611
+ id: entry.id,
612
+ title: entry.title,
613
+ tooltip: description ? `${named}, ${description}` : named,
614
+ };
615
+ });
601
616
  }
602
617
 
603
618
  /** The primary verb cluster: exactly what declared `commandbar/primary`, in the registry's order. */
@@ -729,8 +744,6 @@ function state(): CommandBarScope {
729
744
  csd: "none",
730
745
  docks: [],
731
746
  hasChord: false,
732
- layouts: [],
733
- layoutsVisible: false,
734
747
  menuOpen: false,
735
748
  menuVisible: false,
736
749
  openPicker: () => {
@@ -739,37 +752,47 @@ function state(): CommandBarScope {
739
752
  openSegment: (key) => {
740
753
  openQuickSearch(SEGMENT_MODES[key]);
741
754
  },
755
+ openSettings: (anchor: EventTarget | null) => {
756
+ if (!(anchor instanceof HTMLElement)) {
757
+ return;
758
+ }
759
+ openSettingsMenu(anchor, {
760
+ rerender: () => {
761
+ if (_state) {
762
+ _state.settingsOpen = isSettingsMenuOpen();
763
+ }
764
+ },
765
+ });
766
+ },
742
767
  openStudioMenu,
743
768
  presence: NO_PRESENCE,
744
769
  presenceVisible: false,
745
770
  primary: [],
746
- renameLayout: (id) => {
747
- const registry = activeRegistry();
748
- const preset = shell.layouts.find((layout) => layout.id === id);
749
- if (registry && preset) {
750
- void renameLayoutPrompt(registry, id, preset.name);
751
- }
752
- },
753
771
  run: (id) => {
754
772
  const registry = activeRegistry();
755
773
  if (registry?.isEnabled(id)) {
756
774
  void runReported(registry, id, undefined, "Command Bar");
757
775
  }
758
776
  },
759
- saveLayout: () => {
760
- const registry = activeRegistry();
761
- if (registry) {
762
- void saveLayoutPrompt(registry);
763
- }
764
- },
765
777
  segments: [],
766
- setLayout: (id) => {
767
- void runActiveReported("view.setLayout", { layout: id }, "Command Bar");
778
+ /* Run from each tab's CLICK, not from the strip's `change`: `jx-tabs` dispatches no change for
779
+ the tab already selected, and activating the selected workspace again is how an author gets
780
+ its home back after closing it. Enter and Space click the tab too (manual activation). */
781
+ setWorkspace: (id) => {
782
+ void runActiveReported("view.setWorkspace", { workspace: id }, "Command Bar");
768
783
  },
784
+ settingsOpen: false,
785
+ settingsVisible: false,
769
786
  windowControl: (action) => {
770
787
  windowControls()?.[action]();
771
788
  },
772
- }) as CommandBarScope;
789
+ quickDisabled: true,
790
+ quickTooltip: "",
791
+ quickVisible: false,
792
+ workspace: "",
793
+ workspaces: [],
794
+ workspacesVisible: false,
795
+ });
773
796
  return _state;
774
797
  }
775
798
 
@@ -784,8 +807,20 @@ function project(): void {
784
807
  const controls = windowControls();
785
808
  scope.csd = controls ? (isMacPlatform() ? "mac" : "other") : "none";
786
809
  scope.menuVisible = registry !== null;
787
- scope.layouts = projectLayouts(registry);
788
- scope.layoutsVisible = scope.layouts.length > 0;
810
+ scope.workspaces = projectWorkspaces(registry);
811
+ scope.workspacesVisible = scope.workspaces.length > 0;
812
+ scope.workspace = shell.workspace;
813
+ /* The chevron is a rendering of `publish.quick`, beside the tablist that ends on Publish
814
+ (studio.md §22.2): drawn only with the tabs and only while the registry shows the record, and
815
+ disabled with its own reason rather than hidden when the project is not a repository. */
816
+ const quick = QUICK_PUBLISH;
817
+ scope.quickVisible =
818
+ scope.workspacesVisible && registry?.get(quick) !== undefined && registry.isVisible(quick);
819
+ scope.quickDisabled = !scope.quickVisible || !registry?.isEnabled(quick);
820
+ scope.quickTooltip = registry && scope.quickVisible ? commandTooltip(registry, quick) : "";
821
+ scope.settingsVisible =
822
+ registry !== null && registry.forPlacement(SETTINGS_MENU_PLACEMENT).length > 0;
823
+ scope.settingsOpen = isSettingsMenuOpen();
789
824
  scope.segments = projectSegments(tab);
790
825
  scope.chord = registry?.keymap.formatBinding("palette.open") ?? "";
791
826
  scope.hasChord = scope.chord !== "";
@@ -812,7 +847,7 @@ export function mount(rootEl: HTMLElement, _ctx: ToolbarCtx = {}): void {
812
847
  unmount();
813
848
  _rootEl = rootEl;
814
849
  if (windowControls()) {
815
- rootEl.classList.add("electrobun-webkit-app-region-drag");
850
+ rootEl.classList.add("app-region-drag");
816
851
  }
817
852
  _scope = effectScope();
818
853
  _scope.run(() => {
@@ -825,10 +860,14 @@ export function mount(rootEl: HTMLElement, _ctx: ToolbarCtx = {}): void {
825
860
  void shell.docks.bottom.collapsed;
826
861
  void shell.git.status;
827
862
  void shell.layoutSelection;
828
- // The layout tabs are a rendering of the project's own record, so the band repaints when a
829
- // Layout is saved, renamed or deleted from anywhere.
830
- void shell.layout;
831
- void shell.layouts;
863
+ // The pill's selection segment names a Styles specimen's tag (`selectionSegmentLabel`).
864
+ void shell.stylebook.selection;
865
+ // The workspace tabs follow the shell, so a switch made by a chord, a script or a tab's
866
+ // Activation repaints the selected tab.
867
+ void shell.workspace;
868
+ // The project opening is what makes the workspace tabs (and the pill's project name) live:
869
+ // `projectState` is not reactive, and the reactive root it is opened beside is.
870
+ void workspace.projectRoot;
832
871
  // The registry itself is reactive state: it is composed AFTER this mount runs, and reading it
833
872
  // Here is what repaints the band from a skeleton into the real bar.
834
873
  void activeRegistry();
@@ -861,6 +900,7 @@ export function mount(rootEl: HTMLElement, _ctx: ToolbarCtx = {}): void {
861
900
 
862
901
  export function unmount(): void {
863
902
  _menu?.close();
903
+ dismissSettingsMenu();
864
904
  _scope?.stop();
865
905
  _scope = null;
866
906
  const pending = _mount;
@@ -25,14 +25,13 @@
25
25
  import { reactive } from "../reactivity";
26
26
  import { mountSurface, registerSurface } from "../ui/surface";
27
27
  import { overlayRegion, REGION_ATTR } from "../ui/regions";
28
- import { close as closeDialog, showModal } from "@jxsuite/ui/behaviors/dialog";
28
+ import { close, showModal } from "@jxsuite/ui/behaviors/dialog";
29
29
  import { selectValue } from "@jxsuite/ui/behaviors/textfield";
30
30
  import { whenReady } from "./dialog";
31
31
  import convertRepeaterDoc from "./convert-repeater.json";
32
- import type { SurfaceHandle } from "../ui/surface";
33
- import type { JxDocument } from "@jxsuite/schema/types";
32
+ import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
34
33
 
35
- registerSurface("convert-repeater", convertRepeaterDoc as unknown as JxDocument);
34
+ registerSurface("convert-repeater", convertRepeaterDoc);
36
35
 
37
36
  /**
38
37
  * The items-source row that is not a definition: pick it and the dialog asks for a name instead.
@@ -42,12 +41,6 @@ registerSurface("convert-repeater", convertRepeaterDoc as unknown as JxDocument)
42
41
  */
43
42
  export const CREATE_NEW_SOURCE = "__new__";
44
43
 
45
- /** One row of either picker. */
46
- export interface ConvertRepeaterOption {
47
- value: string;
48
- label: string;
49
- }
50
-
51
44
  /** What the flow knows. Every one of these may change while the dialog is up. */
52
45
  export interface ConvertRepeaterView {
53
46
  /** State definitions that hold an array, in the order they were found. */
@@ -97,9 +90,9 @@ export interface ConvertRepeaterSurfaceHandle {
97
90
  /** What the document discriminates on, and the rows it maps. Derived, never handed in. */
98
91
  interface ConvertRepeaterFlags {
99
92
  /** The source picker's rows: every array definition, then `Create new…`. */
100
- sourceOptions: ConvertRepeaterOption[];
93
+ sourceOptions: SurfaceOption[];
101
94
  /** The filter and sort pickers' rows: `None`, then every function definition. */
102
- functionOptions: ConvertRepeaterOption[];
95
+ functionOptions: SurfaceOption[];
103
96
  /** The chosen source is the sentinel, so the name field is drawn. */
104
97
  creating: boolean;
105
98
  /** There is at least one function to offer, so the two optional rows are drawn. */
@@ -108,8 +101,7 @@ interface ConvertRepeaterFlags {
108
101
  invalid: boolean;
109
102
  }
110
103
 
111
- interface ConvertRepeaterScope
112
- extends Record<string, unknown>, ConvertRepeaterView, ConvertRepeaterFlags {
104
+ interface ConvertRepeaterScope extends ConvertRepeaterView, ConvertRepeaterFlags {
113
105
  pickSource: (value: string) => void;
114
106
  setName: (value: string) => void;
115
107
  pickFilter: (value: string) => void;
@@ -163,8 +155,12 @@ export function openConvertRepeaterSurface(
163
155
  closed = true;
164
156
  options.onClosed();
165
157
  };
158
+ /* Read through a call, not the bare binding: `close()` can run while the mount is awaiting the
159
+ element, and a direct `closed` test after that `await` would be narrowed to the value the test
160
+ before it saw. */
161
+ const isClosed = (): boolean => closed;
166
162
 
167
- const scope = reactive({
163
+ const scope: ConvertRepeaterScope = reactive<ConvertRepeaterScope>({
168
164
  ...derive(options.view),
169
165
  closed: finish,
170
166
  confirm: () => {
@@ -191,7 +187,7 @@ export function openConvertRepeaterSurface(
191
187
  scope.newName = value;
192
188
  options.onName(value);
193
189
  },
194
- }) as ConvertRepeaterScope;
190
+ });
195
191
 
196
192
  let mounted: SurfaceHandle | null = null;
197
193
 
@@ -218,13 +214,15 @@ export function openConvertRepeaterSurface(
218
214
 
219
215
  const ready = mountSurface("convert-repeater", scope, slot).then(async (surface) => {
220
216
  mounted = surface;
217
+ /* SAFETY: `convert-repeater.json`'s root definition is a `jx-dialog` element, so the runtime
218
+ mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
221
219
  const element = surface.root as HTMLElement;
222
- if (closed) {
220
+ if (isClosed()) {
223
221
  surface.dispose();
224
222
  return element;
225
223
  }
226
224
  await whenReady(element);
227
- if (closed) {
225
+ if (isClosed()) {
228
226
  return element;
229
227
  }
230
228
  showModal(element);
@@ -243,7 +241,7 @@ export function openConvertRepeaterSurface(
243
241
  const element = mounted?.root;
244
242
  if (element instanceof HTMLElement) {
245
243
  // The platform's close first, so focus goes back where it came from; then the document.
246
- closeDialog(element);
244
+ close(element);
247
245
  }
248
246
  // A mount that has not landed yet is disposed by `ready` when it does — `finish` tells it so.
249
247
  mounted?.dispose();
@@ -18,10 +18,9 @@
18
18
  import { reactive } from "../reactivity";
19
19
  import { mountSurface, registerSurface } from "../ui/surface";
20
20
  import dataActionsDoc from "./data-actions.json";
21
- import type { JxDocument } from "@jxsuite/schema/types";
22
21
  import type { SurfaceHandle } from "../ui/surface";
23
22
 
24
- registerSurface("data-actions", dataActionsDoc as unknown as JxDocument);
23
+ registerSurface("data-actions", dataActionsDoc);
25
24
 
26
25
  /** Everything the row draws. */
27
26
  export interface DataActionsView {
@@ -52,7 +51,7 @@ export interface DataActionsSurfaceHandle {
52
51
  dispose: () => void;
53
52
  }
54
53
 
55
- interface DataActionsScope extends Record<string, unknown>, DataActionsView, DataActionsCallbacks {}
54
+ interface DataActionsScope extends DataActionsView, DataActionsCallbacks {}
56
55
 
57
56
  /** Write a projection into the scope. */
58
57
  function project(scope: DataActionsScope, view: DataActionsView): void {
@@ -78,7 +77,7 @@ export function mountDataActionsSurface(
78
77
  view: DataActionsView,
79
78
  actions: DataActionsCallbacks,
80
79
  ): DataActionsSurfaceHandle {
81
- const scope = reactive<DataActionsScope>({
80
+ const scope: DataActionsScope = reactive<DataActionsScope>({
82
81
  openGrid: actions.openGrid,
83
82
  push: actions.push,
84
83
  resultOk: "false",
@@ -89,18 +88,21 @@ export function mountDataActionsSurface(
89
88
  testDisabled: false,
90
89
  testLabel: "Test Connection",
91
90
  testState: "hidden",
92
- }) as DataActionsScope;
91
+ });
93
92
  project(scope, view);
94
93
 
95
94
  let mounted: SurfaceHandle | null = null;
96
95
  let disposed = false;
97
96
  const ready = mountSurface("data-actions", scope, host).then((surface) => {
97
+ /* SAFETY: `data-actions.json`'s root definition is a `div` element, so the runtime mounts an
98
+ HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
99
+ const root = surface.root as HTMLElement;
98
100
  if (disposed) {
99
101
  surface.dispose();
100
- return surface.root as HTMLElement;
102
+ return root;
101
103
  }
102
104
  mounted = surface;
103
- return surface.root as HTMLElement;
105
+ return root;
104
106
  });
105
107
 
106
108
  return {