@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,9 @@
7
7
  * boundary.
8
8
  */
9
9
 
10
- import { childIndex, getNodeAtPath, parentElementPath } from "../store";
10
+ import { getNodeAtPath } from "@jxsuite/schema/doc-ops";
11
+ import { isNonNullObject, isNumber, isString } from "@jxsuite/schema/guards";
12
+ import { childIndex, parentElementPath } from "../store";
11
13
  import { isAncestor } from "../state";
12
14
  import { isTabActive } from "../workspace/workspace";
13
15
  import {
@@ -18,12 +20,14 @@ import {
18
20
  transactDoc,
19
21
  } from "../tabs/transact";
20
22
  import { defaultDef } from "../panels/shared";
23
+ import { componentInstance, mutateImportComponent } from "./insert-component";
21
24
 
22
25
  import { contentLength, contentOf, spliceAcross, toStored } from "./content-slice";
23
26
  import type { JxContentResult, SlashCommand } from "./inline-edit";
24
27
  import type { JxPath } from "../state";
25
28
  import type { Tab } from "../tabs/tab";
26
29
  import type { JxMutableNode } from "@jxsuite/schema/types";
30
+ import type { SpliceCoordinate } from "../tabs/selection";
27
31
 
28
32
  /**
29
33
  * Whether a committed inline-edit result is effectively empty (blank text / lone whitespace /
@@ -43,10 +47,21 @@ export function isEmptyContent(commitData?: JxContentResult): boolean {
43
47
  if (kids.length === 0) {
44
48
  return true;
45
49
  }
46
- if (kids.length === 1 && typeof kids[0] === "string" && kids[0].trim() === "") {
50
+ const [only] = kids;
51
+ if (kids.length === 1 && isString(only) && only.trim() === "") {
47
52
  return true;
48
53
  }
49
- return kids.length === 1 && typeof kids[0] === "object" && kids[0]?.tagName === "br";
54
+ // The result crossed the frame boundary as JSON, so a `null` child is excluded here explicitly.
55
+ return kids.length === 1 && isNonNullObject(only) && only.tagName === "br";
56
+ }
57
+
58
+ /** The slot of the block at `path`. */
59
+ function blockSlot(path: JxPath): SpliceCoordinate {
60
+ /* SAFETY: a block with a sibling position has an element path ending in `"children", <index>`, so
61
+ it has a parent element path and its last segment is the numeric child index. A repeater's
62
+ template root (`…, "map"`) is editable too; callers do not exclude that case yet, so it reaches
63
+ here with a string segment exactly as before this cast. */
64
+ return { index: childIndex(path) as number, parentPath: parentElementPath(path) as JxPath };
50
65
  }
51
66
 
52
67
  /**
@@ -126,7 +141,7 @@ export function applyInlinePropCommit(
126
141
  if (!node) {
127
142
  return false;
128
143
  }
129
- const current = (node.$props as Record<string, unknown> | undefined)?.[prop];
144
+ const current = node.$props?.[prop];
130
145
  if (`${current ?? ""}` === value) {
131
146
  return false;
132
147
  }
@@ -155,8 +170,8 @@ export function applyBlockMerge(
155
170
  if (!tab) {
156
171
  return null;
157
172
  }
158
- const from = getNodeAtPath(tab.doc.document, fromPath) as JxMutableNode | undefined;
159
- const into = getNodeAtPath(tab.doc.document, intoPath) as JxMutableNode | undefined;
173
+ const from = getNodeAtPath(tab.doc.document, fromPath);
174
+ const into = getNodeAtPath(tab.doc.document, intoPath);
160
175
  if (!from || !into) {
161
176
  return null;
162
177
  }
@@ -184,8 +199,11 @@ export function applyBlockMerge(
184
199
  mutateUpdateProperty(t, intoPath, "textContent", merged.textContent ?? "");
185
200
  }
186
201
  mutateRemoveNode(t, fromPath);
187
- // A container emptied by the removal (the `<ul>` behind a list's last item) would otherwise
188
- // Linger as invisible structure that still occupies layout and shows up in the layers panel.
202
+ /* A container emptied by the removal (the `<ul>` behind a list's last item) would otherwise
203
+ linger as invisible structure that still occupies layout and shows up in the layers panel.
204
+ SAFETY: `fromPath` is not the root (the ancestor check above refuses `[]`), and any node below
205
+ the root is addressed by at least two segments (`"children", <index>`, `"cases", <name>`, or
206
+ `"map"` under its repeater), so parentElementPath returns a path. */
189
207
  pruneEmptyAncestors(t, parentElementPath(fromPath) as JxPath);
190
208
  if (isTabActive(tab)) {
191
209
  t.session.selection = [intoPath];
@@ -202,12 +220,12 @@ export function applyBlockMerge(
202
220
  function pruneEmptyAncestors(tab: Tab, path: JxPath): void {
203
221
  let cur = path;
204
222
  while (cur.length > 0) {
205
- const node = getNodeAtPath(tab.doc.document, cur) as JxMutableNode | undefined;
223
+ const node = getNodeAtPath(tab.doc.document, cur);
206
224
  const kids = node?.children;
207
225
  if (!node || !Array.isArray(kids) || kids.length > 0) {
208
226
  return;
209
227
  }
210
- const parent = parentElementPath(cur) as JxPath | null;
228
+ const parent = parentElementPath(cur);
211
229
  mutateRemoveNode(tab, cur);
212
230
  if (!parent) {
213
231
  return;
@@ -227,8 +245,7 @@ export function applyInlineSplit(
227
245
  before: JxContentResult,
228
246
  after: JxContentResult,
229
247
  ): JxPath {
230
- const parentPath = parentElementPath(path) as JxPath;
231
- const idx = childIndex(path) as number;
248
+ const { parentPath, index: idx } = blockSlot(path);
232
249
  const newPath = [...parentPath, "children", idx + 1];
233
250
  if (!tab) {
234
251
  return newPath;
@@ -260,6 +277,45 @@ export function applyInlineSplit(
260
277
  return newPath;
261
278
  }
262
279
 
280
+ /**
281
+ * A slash pick from the Components group (§5.7): the empty block the "/" was typed in is REPLACED
282
+ * by an instance of the component, and a block with content keeps it and gets the instance after
283
+ * it. Either way the component is imported, as a drop of the same component would import it. An
284
+ * instance is a whole element with its own `$props` and slot content, so swapping a tag in place —
285
+ * what an HTML pick does — would leave a paragraph's leftovers inside a component.
286
+ */
287
+ function insertComponentBlock(
288
+ tab: Tab | null,
289
+ path: JxPath,
290
+ instance: JxMutableNode,
291
+ commitData: JxContentResult | undefined,
292
+ ): JxPath {
293
+ const { parentPath, index: idx } = blockSlot(path);
294
+ const replace = isEmptyContent(commitData);
295
+ const at = replace ? idx : idx + 1;
296
+ const newPath = [...parentPath, "children", at];
297
+ if (!tab) {
298
+ return newPath;
299
+ }
300
+ transactDoc(tab, (t) => {
301
+ if (replace) {
302
+ mutateRemoveNode(t, path);
303
+ } else if (commitData?.children) {
304
+ mutateUpdateProperty(t, path, "textContent");
305
+ mutateUpdateProperty(t, path, "children", commitData.children);
306
+ } else if (commitData?.textContent != null) {
307
+ mutateUpdateProperty(t, path, "children");
308
+ mutateUpdateProperty(t, path, "textContent", commitData.textContent);
309
+ }
310
+ mutateInsertNode(t, parentPath, at, instance);
311
+ mutateImportComponent(t, instance.tagName);
312
+ if (isTabActive(tab)) {
313
+ t.session.selection = [newPath];
314
+ }
315
+ });
316
+ return newPath;
317
+ }
318
+
263
319
  /**
264
320
  * Apply a slash-insert at `path` of `tab`'s document: swap the (empty) node's tag in place, or
265
321
  * commit pending content and insert a new element after it. Returns the path to edit next (the
@@ -271,6 +327,10 @@ export function applyInlineInsert(
271
327
  cmd: SlashCommand,
272
328
  commitData: JxContentResult | undefined,
273
329
  ): JxPath {
330
+ const instance = cmd.component === true ? componentInstance(cmd.tag) : null;
331
+ if (instance) {
332
+ return insertComponentBlock(tab, path, instance, commitData);
333
+ }
274
334
  if (isEmptyContent(commitData)) {
275
335
  if (!tab) {
276
336
  return path;
@@ -291,8 +351,7 @@ export function applyInlineInsert(
291
351
  return path;
292
352
  }
293
353
 
294
- const parentPath = parentElementPath(path) as JxPath;
295
- const idx = childIndex(path) as number;
354
+ const { parentPath, index: idx } = blockSlot(path);
296
355
  const newPath = [...parentPath, "children", idx + 1];
297
356
  if (!tab) {
298
357
  return newPath;
@@ -336,8 +395,8 @@ export function applyRangeReplace(
336
395
  if (!tab) {
337
396
  return null;
338
397
  }
339
- const head = getNodeAtPath(tab.doc.document, from.path) as JxMutableNode | undefined;
340
- const tail = getNodeAtPath(tab.doc.document, to.path) as JxMutableNode | undefined;
398
+ const head = getNodeAtPath(tab.doc.document, from.path);
399
+ const tail = getNodeAtPath(tab.doc.document, to.path);
341
400
  if (!head || !tail) {
342
401
  return null;
343
402
  }
@@ -366,6 +425,9 @@ export function applyRangeReplace(
366
425
  for (const path of removals) {
367
426
  if (getNodeAtPath(t.doc.document, path)) {
368
427
  mutateRemoveNode(t, path);
428
+ /* SAFETY: every removal is the range's tail or a rendered block the iframe named between its
429
+ ends; none is the root, which contains both ends, and any node below the root is
430
+ addressed by at least two segments, so parentElementPath returns a path. */
369
431
  pruneEmptyAncestors(t, parentElementPath(path) as JxPath);
370
432
  }
371
433
  }
@@ -389,7 +451,7 @@ function comparePathsDescending(a: JxPath, b: JxPath): number {
389
451
  if (av === bv) {
390
452
  continue;
391
453
  }
392
- if (typeof av === "number" && typeof bv === "number") {
454
+ if (isNumber(av) && isNumber(bv)) {
393
455
  return bv - av;
394
456
  }
395
457
  return String(bv).localeCompare(String(av));
@@ -7,13 +7,13 @@
7
7
  * text formatting, Enter for new paragraphs, and slash commands for inserting elements.
8
8
  */
9
9
 
10
- import elementsMeta from "../../data/elements-meta.json";
11
- import { displayTagName } from "@jxsuite/schema/guards";
10
+ import { displayTagName, isNonNullObject, isString } from "@jxsuite/schema/guards";
12
11
  import { normalizeInlineContent } from "./inline-format";
13
- import { isEditableTag } from "./editable-tags";
12
+ import { execEditingCommand } from "./inline-link";
13
+ import { ELEMENT_DEFS, isEditableTag } from "./editable-tags";
14
14
  import type { EditableVerdicts } from "./editable-tags";
15
15
  import type { JxPath } from "../state";
16
- import type { JxMutableNode } from "@jxsuite/schema/types";
16
+ import type { JsonPrimitive, JxMutableNode } from "@jxsuite/schema/types";
17
17
 
18
18
  /**
19
19
  * The slash-menu surface inline editing drives. Injected (rather than imported) so this module
@@ -21,12 +21,15 @@ import type { JxMutableNode } from "@jxsuite/schema/types";
21
21
  * real menu, the canvas iframe supplies its own (or a no-op) without bloating the slim iframe
22
22
  * bundle.
23
23
  */
24
+ /** What a slash menu is opened with: the pick handler, and how the list is filtered and sourced. */
25
+ export interface SlashMenuOptions {
26
+ onSelect: (cmd: SlashCommand) => void;
27
+ showFilter?: boolean;
28
+ commands?: SlashCommand[];
29
+ }
30
+
24
31
  export interface SlashController {
25
- show: (
26
- anchorEl: HTMLElement,
27
- filter: string,
28
- cbs: { onSelect: (cmd: SlashCommand) => void; showFilter?: boolean; commands?: SlashCommand[] },
29
- ) => void;
32
+ show: (anchorEl: HTMLElement, filter: string, cbs: SlashMenuOptions) => void;
30
33
  dismiss: () => void;
31
34
  isOpen: () => boolean;
32
35
  }
@@ -74,15 +77,20 @@ export interface InlineAction {
74
77
  shortcut?: string;
75
78
  }
76
79
 
77
- interface ElementDef {
78
- $inlineChildren?: string[];
79
- $inlineActions?: InlineAction[] | string;
80
- }
81
-
82
80
  export interface SlashCommand {
83
81
  label: string;
84
82
  tag: string;
85
83
  description: string;
84
+ /**
85
+ * The heading the offer is listed under. Absent for the HTML elements, which are the menu's
86
+ * first, unheaded group; `"Components"` for the project's components (§5.7).
87
+ */
88
+ group?: string;
89
+ /**
90
+ * Whether `tag` names a project component: the pick inserts `buildComponentInstance` and imports
91
+ * the component (`editor/insert-component.ts`) rather than an element's default definition.
92
+ */
93
+ component?: boolean;
86
94
  }
87
95
 
88
96
  export interface JxContentResult {
@@ -124,7 +132,7 @@ export function isInlineInContext(childTag: string, parentTag: string) {
124
132
  if (!parentTag) {
125
133
  return INLINE_TAGS.has(childTag);
126
134
  }
127
- const parentDef = (elementsMeta.$defs as Record<string, ElementDef>)[parentTag];
135
+ const parentDef = ELEMENT_DEFS[parentTag];
128
136
  if (!parentDef || !parentDef.$inlineChildren) {
129
137
  return false;
130
138
  }
@@ -139,13 +147,13 @@ export function isInlineInContext(childTag: string, parentTag: string) {
139
147
  * @returns {InlineAction[] | null}
140
148
  */
141
149
  export function getInlineActions(tag: string) {
142
- const def = (elementsMeta.$defs as Record<string, ElementDef>)[tag];
150
+ const def = ELEMENT_DEFS[tag];
143
151
  if (!def) {
144
152
  return null;
145
153
  }
146
154
  let actions = def.$inlineActions;
147
- if (typeof actions === "string") {
148
- const refDef = (elementsMeta.$defs as Record<string, ElementDef>)[actions];
155
+ if (isString(actions)) {
156
+ const refDef = ELEMENT_DEFS[actions];
149
157
  actions = refDef?.$inlineActions ?? undefined;
150
158
  }
151
159
  if (!Array.isArray(actions)) {
@@ -233,12 +241,13 @@ export function isEditableBlock(el: HTMLElement) {
233
241
  * Check if a node is an inline child. When parentNode is provided, uses context-aware scoping from
234
242
  * metadata. Without parent, uses the fallback INLINE_TAGS set.
235
243
  *
236
- * @param {JxMutableNode} node
244
+ * @param {JxMutableNode | JsonPrimitive} node A document child entry; a text or other scalar child
245
+ * is never an inline element.
237
246
  * @param {JxMutableNode} [parentNode]
238
247
  * @returns {boolean}
239
248
  */
240
- export function isInlineElement(node: JxMutableNode, parentNode?: JxMutableNode) {
241
- if (!node || typeof node !== "object") {
249
+ export function isInlineElement(node: JxMutableNode | JsonPrimitive, parentNode?: JxMutableNode) {
250
+ if (!isNonNullObject(node)) {
242
251
  return false;
243
252
  }
244
253
  const childTag = (displayTagName(node.tagName) || "div").toLowerCase();
@@ -304,7 +313,7 @@ export function startEditing(
304
313
  insertFn = callbacks.onInsert;
305
314
  endFn = callbacks.onEnd;
306
315
  _plainMode = opts?.plainText === true;
307
- _plainOriginal = _plainMode ? (el.textContent ?? "") : "";
316
+ _plainOriginal = _plainMode ? el.textContent : "";
308
317
  _plainPosted = false;
309
318
 
310
319
  // Mark the caret's block so the empty-block slash hint can target it. The editing host itself is
@@ -495,7 +504,7 @@ function handlePaste(e: ClipboardEvent) {
495
504
  e.preventDefault();
496
505
  // Paste as plain text to avoid foreign HTML
497
506
  const text = e.clipboardData?.getData("text/plain") ?? "";
498
- document.execCommand("insertText", false, text);
507
+ execEditingCommand("insertText", text);
499
508
  }
500
509
 
501
510
  // ─── Enter: split the active block ─────────────────────────────────────────
@@ -594,7 +603,7 @@ function commitChanges(inPlace: boolean) {
594
603
  if (_plainMode) {
595
604
  // A prop value is a plain single-line string (a directive attribute) — flatten any newline
596
605
  // That survived plaintext editing and skip the rich DOM→Jx serialization entirely.
597
- const text = (activeEl.textContent ?? "").replaceAll("\n", " ");
606
+ const text = activeEl.textContent.replaceAll("\n", " ");
598
607
  /*
599
608
  * A SESSION THAT CHANGED NOTHING MUST WRITE NOTHING.
600
609
  *
@@ -635,17 +644,18 @@ export function normalizeChildren(node: { children?: (JxMutableNode | string)[]
635
644
  }
636
645
 
637
646
  // Step 1: Merge adjacent text nodes
638
- const merged = [];
647
+ const merged: (JxMutableNode | string)[] = [];
639
648
  for (const child of node.children) {
640
- if (typeof child === "string" && merged.length > 0 && typeof merged.at(-1) === "string") {
641
- merged[merged.length - 1] += child;
649
+ const last = merged.at(-1);
650
+ if (isString(child) && isString(last)) {
651
+ merged[merged.length - 1] = last + child;
642
652
  } else {
643
653
  merged.push(child);
644
654
  }
645
655
  }
646
656
 
647
657
  // Step 2: If all children are text, fold into textContent
648
- if (merged.every((c: JxMutableNode | string) => typeof c === "string")) {
658
+ if (merged.every((c) => isString(c))) {
649
659
  return { textContent: merged.join("") };
650
660
  }
651
661
 
@@ -674,7 +684,7 @@ function elementToJx(el: HTMLElement): JxContentResult {
674
684
  const children: (JxMutableNode | string)[] = [];
675
685
  for (const child of nodes) {
676
686
  const jsx = domNodeToJx(child);
677
- if (jsx !== null && jsx !== undefined) {
687
+ if (jsx !== null) {
678
688
  children.push(jsx);
679
689
  }
680
690
  }
@@ -683,6 +693,23 @@ function elementToJx(el: HTMLElement): JxContentResult {
683
693
  return normalizeChildren({ children });
684
694
  }
685
695
 
696
+ /**
697
+ * Whether `node` is an element carrying `dataset` — an HTML, SVG or MathML element, which is every
698
+ * element an HTML editing host can hold. Decided by node type and feature, not `instanceof`, so it
699
+ * holds for a node of any realm.
700
+ */
701
+ function isDatasetElementNode(node: Node): node is Element & HTMLOrSVGElement {
702
+ return node.nodeType === Node.ELEMENT_NODE && "dataset" in node;
703
+ }
704
+
705
+ /** Browser execCommand output tags, mapped to the tags Jx documents use for the same formatting. */
706
+ const BROWSER_TAG_CONVENTIONS = new Map([
707
+ ["b", "strong"],
708
+ ["i", "em"],
709
+ ["s", "del"],
710
+ ["strike", "del"],
711
+ ]);
712
+
686
713
  /**
687
714
  * Convert a DOM node to a Jx element definition.
688
715
  *
@@ -698,23 +725,17 @@ function domNodeToJx(node: Node) {
698
725
  return text; // Bare string — text node child
699
726
  }
700
727
 
701
- if (node.nodeType !== Node.ELEMENT_NODE) {
728
+ if (!isDatasetElementNode(node)) {
702
729
  return null;
703
730
  }
704
731
 
705
- const el = node as HTMLElement;
732
+ const el = node;
706
733
  const tag = el.tagName.toLowerCase();
707
734
  const result: JxMutableNode = { tagName: tag };
708
735
 
709
- // Map browser execCommand output to our tag conventions
710
- const tagMap: Record<string, string> = {
711
- b: "strong",
712
- i: "em",
713
- s: "del",
714
- strike: "del",
715
- };
716
- if (tagMap[tag]) {
717
- result.tagName = tagMap[tag];
736
+ const conventional = BROWSER_TAG_CONVENTIONS.get(tag);
737
+ if (conventional) {
738
+ result.tagName = conventional;
718
739
  }
719
740
 
720
741
  // Attributes
@@ -725,8 +746,9 @@ function domNodeToJx(node: Node) {
725
746
  const href = el.dataset.jxHref ?? el.getAttribute("href");
726
747
  if (tag === "a" && href != null) {
727
748
  result.attributes = { href };
728
- if ((el as HTMLAnchorElement).title) {
729
- result.attributes.title = (el as HTMLAnchorElement).title;
749
+ // `title` is an HTMLElement property: an HTML `<a>` reflects the attribute, an SVG `<a>` has none.
750
+ if ("title" in el && isString(el.title) && el.title) {
751
+ result.attributes.title = el.title;
730
752
  }
731
753
  }
732
754
  if (tag === "code") {
@@ -776,13 +798,15 @@ function fragmentToJx(frag: DocumentFragment) {
776
798
  }
777
799
  }
778
800
 
801
+ const [only] = children;
779
802
  if (
780
803
  children.length === 1 &&
781
- typeof children[0] !== "string" &&
782
- children[0]!.tagName === "span" &&
783
- typeof children[0]!.textContent === "string"
804
+ only !== undefined &&
805
+ !isString(only) &&
806
+ only.tagName === "span" &&
807
+ isString(only.textContent)
784
808
  ) {
785
- return { textContent: children[0]!.textContent };
809
+ return { textContent: only.textContent };
786
810
  }
787
811
 
788
812
  return children.length > 0 ? { children } : { textContent: "" };
@@ -855,10 +879,11 @@ export function openSlashMenu(opts?: { anchored?: boolean }): void {
855
879
 
856
880
  // An unanchored menu carries its own filter field: there is no "/…" run in the document for the
857
881
  // Author to type into, so without one the list could only ever be filtered by scrolling it.
858
- slash.show(activeEl, "", {
859
- onSelect: handleSlashSelect,
860
- ...(_slashAnchored ? {} : { showFilter: true }),
861
- });
882
+ const menu: SlashMenuOptions = { onSelect: handleSlashSelect };
883
+ if (!_slashAnchored) {
884
+ menu.showFilter = true;
885
+ }
886
+ slash.show(activeEl, "", menu);
862
887
  }
863
888
 
864
889
  /**
@@ -935,6 +960,7 @@ function handleSlashSelect(cmd: SlashCommand) {
935
960
  let slashNode: Text | null = null;
936
961
  let slashOffset = 0;
937
962
  while (walker.nextNode()) {
963
+ // SAFETY: the walker shows only text nodes (SHOW_TEXT), and nextNode() just landed on one.
938
964
  const node = walker.currentNode as Text;
939
965
  if (charCount + node.length > slashIdx) {
940
966
  slashNode = node;