@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
@@ -0,0 +1,233 @@
1
+ /// <reference lib="dom" />
2
+ /**
3
+ * The Site panel, as a mounted document (`specs/studio.md` §5.7).
4
+ *
5
+ * `panels/site-panel.ts` is the flow — which files are pages and in what order, how a collection
6
+ * nests its pages, what a click opens and what a drag inserts — and this is the surface it draws
7
+ * into: the reactive scope `site-panel.json` reads, and the mount that stays put while the
8
+ * Navigator repaints around it.
9
+ *
10
+ * **Three islands, all through `onNodeCreated`.** A component card's preview box is filled with the
11
+ * component rendered live, a component card is a drag source, and a media thumbnail is a drag
12
+ * source. Each is announced to the flow as its node is CREATED, with the mapped row it was drawn
13
+ * for, which is the compliant seam for registering behaviour on a node a document created
14
+ * (studio-ui-guidelines.md §9.4) — never a query over the mounted DOM. The `disposed` guard comes
15
+ * first for the reason `surfaces/files-panel.ts` gives: a panel taken down inside the same turn
16
+ * still walks this callback for every row, and a registration made then would outlive it.
17
+ *
18
+ * @docs studio/interface
19
+ */
20
+
21
+ import { isJsonObject, isString } from "@jxsuite/schema/guards";
22
+ import { reactive } from "../reactivity";
23
+ import { mountSurface, registerSurface } from "../ui/surface";
24
+ import sitePanelDoc from "./site-panel.json";
25
+ import type { JsonObject, JxElement } from "@jxsuite/schema/types";
26
+ import type { JxScope } from "@jxsuite/runtime/types";
27
+ import type { SurfaceHandle } from "../ui/surface";
28
+ import type {
29
+ SiteComponentRow,
30
+ SiteMediaRow,
31
+ SitePageRow,
32
+ SiteTemplateRow,
33
+ } from "../panels/site-model";
34
+
35
+ registerSurface("site-panel", sitePanelDoc);
36
+
37
+ /** What a section draws: a sentence while reading, one when empty or filtered out, or its rows. */
38
+ export type SiteSectionState = "loading" | "empty" | "nomatch" | "listed";
39
+
40
+ /** Everything the document reads. Every field is a value. */
41
+ export interface SitePanelValues {
42
+ /** `none` draws one sentence asking for a project; `project` draws the four sections. */
43
+ body: "none" | "project";
44
+ filter: string;
45
+ pages: SitePageRow[];
46
+ pagesState: SiteSectionState;
47
+ pagesCount: string;
48
+ templates: SiteTemplateRow[];
49
+ templatesState: SiteSectionState;
50
+ templatesCount: string;
51
+ components: SiteComponentRow[];
52
+ componentsState: SiteSectionState;
53
+ componentsCount: string;
54
+ media: SiteMediaRow[];
55
+ mediaState: SiteSectionState;
56
+ mediaCount: string;
57
+ /**
58
+ * The line under a strip that does not show every thumbnail the filter admits ("Show all 766 in
59
+ * Media"), or `""` when it shows them all.
60
+ */
61
+ mediaMore: string;
62
+ }
63
+
64
+ /** What a control can ask the panel to do. Read once, when the scope is made. */
65
+ export interface SitePanelActions {
66
+ /** The filter field now holds `value`. */
67
+ setFilter: (value: string) => void;
68
+ /** Open a page, a template or a media file by its project path. */
69
+ open: (path: string) => void;
70
+ /** Open a component's definition by its tag. */
71
+ openComponent: (tagName: string) => void;
72
+ /** The `+` was pressed: open Add new. */
73
+ add: () => void;
74
+ /** Switch to the Media workspace. */
75
+ openMedia: () => void;
76
+ }
77
+
78
+ /** The islands the flow attaches behaviour to, each announced as it is created. */
79
+ export interface SitePanelIslands {
80
+ /** A component card's empty preview box, for the component with this tag. */
81
+ preview: (element: HTMLElement, tagName: string) => void;
82
+ /** A component card, which drags an instance of the component with this tag. */
83
+ componentSource: (element: HTMLElement, tagName: string) => void;
84
+ /** A media thumbnail, which drags an element referencing the file at this path. */
85
+ mediaSource: (element: HTMLElement, path: string) => void;
86
+ }
87
+
88
+ export interface SitePanelSurfaceHandle {
89
+ /** Settles once the document is mounted. */
90
+ readonly ready: Promise<unknown>;
91
+ /** Whether the mounted root is still where it was put. */
92
+ connected: () => boolean;
93
+ update: (values: SitePanelValues) => void;
94
+ dispose: () => void;
95
+ }
96
+
97
+ interface SitePanelScope extends SitePanelValues, SitePanelActions {}
98
+
99
+ /** The scope's shape before the first projection lands on it. */
100
+ export function emptySitePanelValues(): SitePanelValues {
101
+ return {
102
+ body: "none",
103
+ components: [],
104
+ componentsCount: "",
105
+ componentsState: "loading",
106
+ filter: "",
107
+ media: [],
108
+ mediaCount: "",
109
+ mediaMore: "",
110
+ mediaState: "loading",
111
+ pages: [],
112
+ pagesCount: "",
113
+ pagesState: "loading",
114
+ templates: [],
115
+ templatesCount: "",
116
+ templatesState: "loading",
117
+ };
118
+ }
119
+
120
+ /** Write a projection in, field by field, so an unchanged field is inert. */
121
+ function project(scope: SitePanelScope, values: SitePanelValues): void {
122
+ scope.body = values.body;
123
+ scope.filter = values.filter;
124
+ scope.pages = values.pages;
125
+ scope.pagesState = values.pagesState;
126
+ scope.pagesCount = values.pagesCount;
127
+ scope.templates = values.templates;
128
+ scope.templatesState = values.templatesState;
129
+ scope.templatesCount = values.templatesCount;
130
+ scope.components = values.components;
131
+ scope.componentsState = values.componentsState;
132
+ scope.componentsCount = values.componentsCount;
133
+ scope.media = values.media;
134
+ scope.mediaState = values.mediaState;
135
+ scope.mediaCount = values.mediaCount;
136
+ scope.mediaMore = values.mediaMore;
137
+ }
138
+
139
+ /** The `part` a node was declared with, or the empty string. */
140
+ function partOf(def: JxElement | string): string {
141
+ const part = isString(def) ? undefined : def.attributes?.["part"];
142
+ return isString(part) ? part : "";
143
+ }
144
+
145
+ /** The `$map` item a node was rendered inside, if it was rendered inside one. */
146
+ function mapItem(state: JxScope | undefined): JsonObject | null {
147
+ const map = state?.["$map"];
148
+ const item = isJsonObject(map) ? map["item"] : undefined;
149
+ return isJsonObject(item) ? item : null;
150
+ }
151
+
152
+ /** One string field of the mapped row, or the empty string. */
153
+ function itemField(state: JxScope | undefined, field: string): string {
154
+ const value = mapItem(state)?.[field];
155
+ return isString(value) ? value : "";
156
+ }
157
+
158
+ /**
159
+ * Mount the Site panel into `container`, the content box the Navigator painted.
160
+ *
161
+ * @param container Where the document goes.
162
+ * @param values What it shows to begin with.
163
+ * @param actions What its controls do.
164
+ * @param islands Where the flow attaches previews and drag sources.
165
+ */
166
+ export function mountSitePanelSurface(
167
+ container: HTMLElement,
168
+ values: SitePanelValues,
169
+ actions: SitePanelActions,
170
+ islands: SitePanelIslands,
171
+ ): SitePanelSurfaceHandle {
172
+ const scope: SitePanelScope = reactive<SitePanelScope>({
173
+ ...emptySitePanelValues(),
174
+ ...actions,
175
+ });
176
+ project(scope, values);
177
+
178
+ let mounted: SurfaceHandle | null = null;
179
+ let disposed = false;
180
+ const ready = mountSurface("site-panel", scope, container, {
181
+ onNodeCreated: (element, _path, def, state) => {
182
+ if (disposed || !(element instanceof HTMLElement)) {
183
+ return;
184
+ }
185
+ switch (partOf(def)) {
186
+ case "card-preview": {
187
+ const tag = itemField(state, "tagName");
188
+ if (tag !== "") {
189
+ islands.preview(element, tag);
190
+ }
191
+ break;
192
+ }
193
+ case "component-card": {
194
+ const tag = itemField(state, "tagName");
195
+ if (tag !== "") {
196
+ islands.componentSource(element, tag);
197
+ }
198
+ break;
199
+ }
200
+ case "media-thumb": {
201
+ const path = itemField(state, "path");
202
+ if (path !== "") {
203
+ islands.mediaSource(element, path);
204
+ }
205
+ break;
206
+ }
207
+ default: {
208
+ break;
209
+ }
210
+ }
211
+ },
212
+ }).then((surface) => {
213
+ if (disposed) {
214
+ surface.dispose();
215
+ return surface;
216
+ }
217
+ mounted = surface;
218
+ return surface;
219
+ });
220
+
221
+ return {
222
+ connected: () => !disposed && (mounted === null || mounted.root.parentNode === container),
223
+ dispose() {
224
+ disposed = true;
225
+ mounted?.dispose();
226
+ mounted = null;
227
+ },
228
+ ready,
229
+ update: (next) => {
230
+ project(scope, next);
231
+ },
232
+ };
233
+ }
@@ -140,36 +140,78 @@
140
140
  {
141
141
  "$prototype": "Array",
142
142
  "items": {
143
- "$ref": "#/state/rows"
143
+ "$ref": "#/state/groups"
144
144
  },
145
145
  "key": {
146
146
  "$ref": "$map/item/key"
147
147
  },
148
148
  "map": {
149
- "tagName": "jx-option",
149
+ "tagName": "div",
150
150
  "attributes": {
151
- "part": "option",
152
- "id": "slash-menu-option-${$map.index}",
153
- "value": "${$map.item.key}",
154
- "label": "${$map.item.label}",
155
- "description": "${$map.item.description}"
151
+ "part": "group",
152
+ "role": "group",
153
+ "aria-label": "${$map.item.name}"
156
154
  },
157
- "onmouseenter": {
158
- "$prototype": "Function",
159
- "body": [
160
- {
161
- "operator": "call",
162
- "target": {
163
- "$ref": "#/state/hover"
155
+ "children": [
156
+ {
157
+ "tagName": "div",
158
+ "attributes": {
159
+ "part": "group-label-slot",
160
+ "role": "none"
161
+ },
162
+ "style": {
163
+ "display": "contents"
164
+ },
165
+ "$switch": {
166
+ "$ref": "$map/item/hasLabel"
167
+ },
168
+ "cases": {
169
+ "true": {
170
+ "tagName": "div",
171
+ "attributes": {
172
+ "part": "group-heading",
173
+ "aria-hidden": "true"
174
+ },
175
+ "textContent": "${$map.item.label}"
176
+ }
177
+ }
178
+ },
179
+ {
180
+ "$prototype": "Array",
181
+ "items": {
182
+ "$ref": "$map/item/rows"
183
+ },
184
+ "key": {
185
+ "$ref": "$map/item/key"
186
+ },
187
+ "map": {
188
+ "tagName": "jx-option",
189
+ "attributes": {
190
+ "part": "option",
191
+ "id": "slash-menu-option-${$map.item.index}",
192
+ "value": "${$map.item.key}",
193
+ "label": "${$map.item.label}",
194
+ "description": "${$map.item.description}"
164
195
  },
165
- "value": [
166
- {
167
- "$ref": "$map/index"
168
- }
169
- ]
196
+ "onmouseenter": {
197
+ "$prototype": "Function",
198
+ "body": [
199
+ {
200
+ "operator": "call",
201
+ "target": {
202
+ "$ref": "#/state/hover"
203
+ },
204
+ "value": [
205
+ {
206
+ "$ref": "$map/item/index"
207
+ }
208
+ ]
209
+ }
210
+ ]
211
+ }
170
212
  }
171
- ]
172
- }
213
+ }
214
+ ]
173
215
  }
174
216
  }
175
217
  ]
@@ -41,17 +41,16 @@ import { clearLayerSlot, getLayerSlot } from "../ui/layers";
41
41
  import { mountSurface, registerSurface } from "../ui/surface";
42
42
  import { overlayRegion, REGION_ATTR } from "../ui/regions";
43
43
  import slashMenuDoc from "./slash-menu.json";
44
- import type { JxDocument } from "@jxsuite/schema/types";
45
44
  import type { JxScope } from "@jxsuite/runtime/types";
46
45
  import type { SurfaceHandle } from "../ui/surface";
47
46
 
48
- registerSurface("slash-menu", slashMenuDoc as unknown as JxDocument);
47
+ registerSurface("slash-menu", slashMenuDoc);
49
48
 
50
49
  /** The popover slot id; the region is `overlay.menu:slash-menu`, which is what the shots crop. */
51
50
  const SLOT = "slash-menu";
52
51
 
53
52
  /** One offer, as the document reads it. */
54
- export interface SlashMenuRow extends Record<string, unknown> {
53
+ export interface SlashMenuRow {
55
54
  /**
56
55
  * The element's tag — unique in the list, so it is the repeater's key AND the row's `value`,
57
56
  * which is what a picked row names in its `select` event.
@@ -60,6 +59,23 @@ export interface SlashMenuRow extends Record<string, unknown> {
60
59
  label: string;
61
60
  /** A muted note at the end of the row. Empty draws no box: `jx-option` hides its own part. */
62
61
  description: string;
62
+ /** The row's position in the FLAT list — its id, and what a hover reports. */
63
+ index: number;
64
+ }
65
+
66
+ /**
67
+ * One headed run of rows: the HTML elements (no heading), then the project's components under
68
+ * "Components" (§5.7). A `role="group"` wrapper is what `jx-listbox` reads headings from, and its
69
+ * rows stay its own (`optionsOf` keeps every descendant option whose nearest listbox is this one).
70
+ */
71
+ export interface SlashMenuGroup {
72
+ key: string;
73
+ /** The visible heading; empty for the unheaded first group. */
74
+ label: string;
75
+ /** The group's accessible name, which the unheaded group needs too. */
76
+ name: string;
77
+ hasLabel: boolean;
78
+ rows: SlashMenuRow[];
63
79
  }
64
80
 
65
81
  /** What the panel is showing right now. */
@@ -72,7 +88,10 @@ export interface SlashMenuView {
72
88
  showFilter: boolean;
73
89
  /** What that field contains. */
74
90
  filter: string;
91
+ /** Every row, flat, in the order the keyboard walks them. */
75
92
  rows: SlashMenuRow[];
93
+ /** The same rows as the panel draws them, headed. */
94
+ groups: SlashMenuGroup[];
76
95
  /** The highlighted row, as an index into {@link SlashMenuView.rows}. */
77
96
  activeIndex: number;
78
97
  }
@@ -103,12 +122,13 @@ export interface SlashMenuSurface {
103
122
  }
104
123
 
105
124
  /** The scope `slash-menu.json` reads. */
106
- interface SlashMenuScope extends Record<string, unknown> {
125
+ interface SlashMenuScope {
107
126
  x: number;
108
127
  y: number;
109
128
  showFilter: boolean;
110
129
  filter: string;
111
130
  rows: SlashMenuRow[];
131
+ groups: SlashMenuGroup[];
112
132
  /**
113
133
  * The active row's id — the ONE string the highlight is written as. The listbox turns it into a
114
134
  * row's `selected`, and the filter field, when there is one, puts the same string in its
@@ -168,7 +188,7 @@ export function openSlashMenuSurface(
168
188
  let mounted: SurfaceHandle | null = null;
169
189
  let closed = false;
170
190
 
171
- const scope = reactive<SlashMenuScope>({
191
+ const scope: SlashMenuScope = reactive<SlashMenuScope>({
172
192
  activeId: activeIdOf(view),
173
193
  expanded: view.rows.length > 0,
174
194
  filter: view.filter,
@@ -184,6 +204,9 @@ export function openSlashMenuSurface(
184
204
  one bubbling handler on the listbox replaces a closure per row, and the position the flow
185
205
  wants is resolved here against the list the panel is showing rather than baked into the
186
206
  row when it was drawn. */
207
+ /* SAFETY: `slash-menu.json` binds this handler to the listbox's `onselect` alone, and `select`
208
+ is raised by the `dispatchEvent` statement in `jx-option.json`, which the runtime always
209
+ constructs as a `CustomEvent` whose `detail` is the row's value. */
187
210
  const tag = String((event as CustomEvent<unknown>).detail);
188
211
  const index = scope.rows.findIndex((row) => row.key === tag);
189
212
  if (index !== -1) {
@@ -191,10 +214,11 @@ export function openSlashMenuSurface(
191
214
  }
192
215
  },
193
216
  rows: [...view.rows],
217
+ groups: [...view.groups],
194
218
  showFilter: view.showFilter,
195
219
  x: view.x,
196
220
  y: view.y,
197
- }) as SlashMenuScope;
221
+ });
198
222
 
199
223
  const finish = (fromPlatform: boolean): void => {
200
224
  if (closed) {
@@ -210,12 +234,20 @@ export function openSlashMenuSurface(
210
234
  }
211
235
  };
212
236
 
237
+ /* Read through a call, not the property path: `close()` can abort the controller while the panel
238
+ is awaiting `jx-ready`, and a direct test after that `await` would be narrowed to the value the
239
+ test before it saw. */
240
+ const aborted = (): boolean => controller.signal.aborted;
241
+
213
242
  const ready = (async () => {
214
243
  const surface = await mountSurface("slash-menu", scope, slot, { signal: controller.signal });
215
- if (controller.signal.aborted) {
244
+ if (aborted()) {
216
245
  return;
217
246
  }
218
247
  mounted = surface;
248
+ /* SAFETY: `slash-menu.json`'s root definition carries `tagName: "jx-popover"`, so the mounted
249
+ root is the kit's popover element, which reflects `open` and inherits `showPopover` and
250
+ `hidePopover` from HTMLElement. */
219
251
  panel = surface.root as PopoverElement;
220
252
  /* The region rides on the PANEL as well as on the slot `getLayerSlot` stamped: a popover is
221
253
  `position: fixed` in the top layer, so the slot around it has a zero-height box and the
@@ -223,7 +255,7 @@ export function openSlashMenuSurface(
223
255
  takes the last match in document order, which is the panel. */
224
256
  panel.setAttribute(REGION_ATTR, overlayRegion("popover", SLOT));
225
257
  panel.addEventListener("toggle", (event) => {
226
- if ((event as { newState?: string }).newState === "closed") {
258
+ if (event.newState === "closed") {
227
259
  finish(true);
228
260
  }
229
261
  });
@@ -234,7 +266,7 @@ export function openSlashMenuSurface(
234
266
  panel!.addEventListener("jx-ready", () => resolve(), { once: true });
235
267
  });
236
268
  }
237
- if (controller.signal.aborted) {
269
+ if (aborted()) {
238
270
  return;
239
271
  }
240
272
  panel.showPopover(anchor instanceof HTMLElement ? { source: anchor } : undefined);
@@ -264,6 +296,7 @@ export function openSlashMenuSurface(
264
296
  scope.showFilter = next.showFilter;
265
297
  scope.filter = next.filter;
266
298
  scope.rows = [...next.rows];
299
+ scope.groups = [...next.groups];
267
300
  scope.activeId = activeIdOf(next);
268
301
  scope.isEmpty = next.rows.length === 0;
269
302
  scope.expanded = next.rows.length > 0;
@@ -26,25 +26,20 @@
26
26
  * @docs studio/logic/statements
27
27
  */
28
28
 
29
+ import { isJsonObject, isString } from "@jxsuite/schema/guards";
29
30
  import { reactive } from "../reactivity";
30
31
  import { REGION_ATTR } from "../ui/regions";
31
32
  import { mountSurface, registerSurface } from "../ui/surface";
32
33
  import statementsDoc from "./statements.json";
33
- import type { JxDocument, JxElement } from "@jxsuite/schema/types";
34
+ import type { JxElement } from "@jxsuite/schema/types";
34
35
  import type { JxScope } from "@jxsuite/runtime/types";
35
- import type { SurfaceHandle } from "../ui/surface";
36
+ import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
36
37
 
37
- registerSurface("statements", statementsDoc as unknown as JxDocument);
38
+ registerSurface("statements", statementsDoc);
38
39
 
39
40
  /** Which control one operand of a statement draws. The flow picks it; the document switches on it. */
40
41
  export type StatementFieldKind = "control" | "text" | "select" | "flags";
41
42
 
42
- /** A closed list of choices, in the shape the kit's select reads. */
43
- export interface StatementOption {
44
- value: string;
45
- label: string;
46
- }
47
-
48
43
  /** One `eventInit` flag of a `dispatchEvent` statement. */
49
44
  export interface StatementFlagView {
50
45
  /** `<row>::<prop>::<flag>` — self-contained, because a third `$map` shadows both above it. */
@@ -64,7 +59,7 @@ export interface StatementFieldView {
64
59
  /** What a `text` or `select` control holds. Empty for the other two kinds. */
65
60
  value: string;
66
61
  placeholder: string;
67
- options: StatementOption[];
62
+ options: SurfaceOption[];
68
63
  flags: StatementFlagView[];
69
64
  }
70
65
 
@@ -119,7 +114,7 @@ export interface StatementIslands {
119
114
  controlSlot: (id: string, host: HTMLElement) => void;
120
115
  }
121
116
 
122
- interface StatementScope extends Record<string, unknown>, StatementActions {
117
+ interface StatementScope extends StatementActions {
123
118
  rows: StatementRowView[];
124
119
  }
125
120
 
@@ -171,7 +166,7 @@ export function renderStatementsSurface(
171
166
  region is a fact about the HOST — who is drawing this editor — not about the document inside
172
167
  it, so it should be true the moment the host is claimed rather than a frame later. */
173
168
  host.setAttribute(REGION_ATTR, region);
174
- const scope = reactive({ ...actions, rows }) as StatementScope;
169
+ const scope: StatementScope = reactive<StatementScope>({ ...actions, rows });
175
170
  const record: Mounted = { disposed: false, handle: null, scope };
176
171
  mounts.set(host, record);
177
172
  /* No race to arbitrate: a repaint arriving while this is in flight takes the branch above — a
@@ -200,16 +195,16 @@ export function renderStatementsSurface(
200
195
 
201
196
  /** The `part` a node was rendered with, or "". */
202
197
  function partOf(def: JxElement | string): string {
203
- const part = typeof def === "string" ? undefined : def.attributes?.["part"];
204
- return typeof part === "string" ? part : "";
198
+ const part = isString(def) ? undefined : def.attributes?.["part"];
199
+ return isString(part) ? part : "";
205
200
  }
206
201
 
207
202
  /** The `key` of the `$map` item a node was rendered inside, or "". */
208
203
  function itemKey(state: JxScope | undefined): string {
209
- const item = (state?.["$map"] as { item?: unknown } | undefined)?.item;
210
- const key =
211
- item !== null && typeof item === "object" ? (item as Record<string, unknown>).key : "";
212
- return typeof key === "string" ? key : "";
204
+ const map = state?.["$map"];
205
+ const item = isJsonObject(map) ? map["item"] : undefined;
206
+ const key = isJsonObject(item) ? item["key"] : "";
207
+ return isString(key) ? key : "";
213
208
  }
214
209
 
215
210
  /**