@jxsuite/studio 4.1.0 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (612) hide show
  1. package/README.md +1 -1
  2. package/data/elements-meta.json +5 -15
  3. package/data/html-meta.json +51 -6
  4. package/dist/chunks/{2020-n6tfwnda.js → 2020-g79n01v9.js} +14 -14
  5. package/dist/chunks/action-group-sp6tna8v.js +118 -0
  6. package/dist/chunks/adapter-nj7tnjfn.js +13 -0
  7. package/dist/chunks/cf-account-picker-qwkm9zrf.js +495 -0
  8. package/dist/chunks/cf-settings-71bv5zn9.js +20 -0
  9. package/dist/chunks/color-area-v17df7b8.js +154 -0
  10. package/dist/chunks/color-field-anwybnkn.js +208 -0
  11. package/dist/chunks/color-slider-44ez96fc.js +79 -0
  12. package/dist/chunks/color-xgg3kfw7.js +35 -0
  13. package/dist/chunks/combobox-5e7jev23.js +236 -0
  14. package/dist/chunks/components-vj72gqtq.js +20 -0
  15. package/dist/chunks/content-source-5mex4x1h.js +46 -0
  16. package/dist/chunks/convert-to-repeater-n64h8znc.js +639 -0
  17. package/dist/chunks/dialog-s890b918.js +85 -0
  18. package/dist/chunks/editor-3qhbg51x.js +35 -0
  19. package/dist/chunks/entry-commands-234hjnqw.js +42 -0
  20. package/dist/chunks/extension-sections-3hpcambp.js +651 -0
  21. package/dist/chunks/file-ops-8yhd83xr.js +47 -0
  22. package/dist/chunks/files-hnxqxtsg.js +72 -0
  23. package/dist/chunks/format-host-779sfp2n.js +40 -0
  24. package/dist/chunks/fs-events-b88z7g4h.js +18 -0
  25. package/dist/chunks/git-panel-xwj8fpab.js +49 -0
  26. package/dist/chunks/icons-yy10wk9r.js +402 -0
  27. package/dist/chunks/iframe-entry-15g3n6xv.js +114 -0
  28. package/dist/chunks/iframe-entry-b27vq81n.js +203 -0
  29. package/dist/chunks/iframe-entry-nbyxee1y.js +154 -0
  30. package/dist/chunks/iframe-host-syr0f9sb.js +115 -0
  31. package/dist/chunks/{index-wcnt3r9g.js → index-mdmyx6s2.js} +11 -11
  32. package/dist/chunks/index-n4j7qxyr.js +109 -0
  33. package/dist/chunks/{javascript-q8kpmfah.js → javascript-xvrfrpkb.js} +8 -9
  34. package/dist/chunks/{jsonMode-dkr040ga.js → jsonMode-tyx2kj6p.js} +526 -527
  35. package/dist/chunks/jx-validate-j0wxk72w.js +15 -0
  36. package/dist/chunks/layers-ff81wthn.js +30 -0
  37. package/dist/chunks/layers-panel-pnnghw12.js +40 -0
  38. package/dist/chunks/listbox-6v2ac08j.js +44 -0
  39. package/dist/chunks/lit-html-m244w9nh.js +17 -0
  40. package/dist/chunks/media-picker-cqhhxhhe.js +33 -0
  41. package/dist/chunks/menu-9p2w46gj.js +15 -0
  42. package/dist/chunks/menu-q99sy9rf.js +285 -0
  43. package/dist/chunks/{monaco-binding-rj6xpx9y.js → monaco-binding-sw6en4dw.js} +12 -15
  44. package/dist/chunks/monaco-buffer-bhy3hb6m.js +24 -0
  45. package/dist/chunks/{monaco-setup-vx9bhp1d.js → monaco-setup-8r62fj6y.js} +27 -37
  46. package/dist/chunks/notify-628t0anh.js +21 -0
  47. package/dist/chunks/number-field-5cndyft8.js +72 -0
  48. package/dist/chunks/parse-0zx14y15.js +10 -0
  49. package/dist/chunks/platform-ts9cg1a4.js +15 -0
  50. package/dist/chunks/popover-47z3ytva.js +25 -0
  51. package/dist/chunks/publish-panel-5zt840sy.js +27 -0
  52. package/dist/chunks/quick-search-3748564r.js +45 -0
  53. package/dist/chunks/references-qvvxej7h.js +26 -0
  54. package/dist/chunks/right-panel-eccz92qt.js +45 -0
  55. package/dist/chunks/section-registry-5pq32t0q.js +25 -0
  56. package/dist/chunks/select-2r16ez41.js +49 -0
  57. package/dist/chunks/split-g7nm1rgb.js +191 -0
  58. package/dist/chunks/studio-0hqbpbd0.js +62 -0
  59. package/dist/chunks/{studio-kryvsw6j.js → studio-1k325pwf.js} +48 -48
  60. package/dist/chunks/{studio-b55y6ewx.js → studio-1knfqgy7.js} +58 -58
  61. package/dist/chunks/{studio-2b946z26.js → studio-1z1kcjv4.js} +3628 -6095
  62. package/dist/chunks/studio-3773086z.js +111 -0
  63. package/dist/chunks/{studio-4r1pv6zf.js → studio-38emantv.js} +22 -5
  64. package/dist/chunks/{studio-x813zp48.js → studio-3rz5md06.js} +30 -30
  65. package/dist/chunks/{studio-ynxwkrzd.js → studio-4wbb9ct0.js} +1953 -1785
  66. package/dist/chunks/studio-5te5tqng.js +81 -0
  67. package/dist/chunks/studio-5wt9nvhd.js +4763 -0
  68. package/dist/chunks/{studio-p4ngc046.js → studio-6ewqv390.js} +9 -9
  69. package/dist/chunks/{studio-9ab8gqsm.js → studio-6nzaktvy.js} +7 -7
  70. package/dist/chunks/studio-6xa21ej9.js +28 -0
  71. package/dist/chunks/{studio-5ehhackm.js → studio-727xh0e3.js} +19 -19
  72. package/dist/chunks/{studio-gcye7qka.js → studio-7e11jpa9.js} +21 -21
  73. package/dist/chunks/{studio-q7v10cg2.js → studio-7r42c6ca.js} +17 -7
  74. package/dist/chunks/studio-7xnmgv66.js +13615 -0
  75. package/dist/chunks/studio-8scdew0e.js +258 -0
  76. package/dist/chunks/{studio-fbf92ckf.js → studio-93zafjcm.js} +275 -163
  77. package/dist/chunks/{studio-dg7zyt5x.js → studio-98b3z07n.js} +1 -1
  78. package/dist/chunks/studio-a79k90n9.js +1162 -0
  79. package/dist/chunks/studio-aj37eer3.js +422 -0
  80. package/dist/chunks/studio-b0k5tqgp.js +2432 -0
  81. package/dist/chunks/studio-b4s9eykd.js +2811 -0
  82. package/dist/chunks/{studio-f3wqjtk5.js → studio-d0300636.js} +5076 -18
  83. package/dist/chunks/{studio-b9b6t1dg.js → studio-e1f24eff.js} +5664 -5666
  84. package/dist/chunks/studio-e1pgga3k.js +839 -0
  85. package/dist/chunks/{studio-g1wdche0.js → studio-esrxgwh6.js} +80 -80
  86. package/dist/chunks/{studio-q43a5y9h.js → studio-g3jevyjt.js} +16 -16
  87. package/dist/chunks/studio-gb13095a.js +2806 -0
  88. package/dist/chunks/{studio-3n4ndrzh.js → studio-h4nvnjvz.js} +303 -303
  89. package/dist/chunks/{studio-dm19q43r.js → studio-hhvs4sdg.js} +10 -10
  90. package/dist/chunks/{studio-x4qkdat5.js → studio-js8nv53n.js} +1749 -2481
  91. package/dist/chunks/{studio-qjy2z9bv.js → studio-jxp12rnj.js} +32 -137
  92. package/dist/chunks/{studio-trxrabqf.js → studio-k75n7vhp.js} +527 -283
  93. package/dist/chunks/{studio-q9jd1a60.js → studio-kcgff4r0.js} +15 -18
  94. package/dist/chunks/studio-kkqkcp3d.js +17668 -0
  95. package/dist/chunks/studio-mhhyamxf.js +763 -0
  96. package/dist/chunks/{studio-cft9r4r7.js → studio-nq5yf5mp.js} +22 -22
  97. package/dist/chunks/{studio-685s0ytq.js → studio-nqgawfks.js} +572 -572
  98. package/dist/chunks/studio-nzzpvzx9.js +185 -0
  99. package/dist/chunks/{studio-xrapxwwc.js → studio-p1dw8wfw.js} +55 -29
  100. package/dist/chunks/{studio-3bqpr0zh.js → studio-pxbgypmg.js} +299 -110
  101. package/dist/chunks/studio-q0a3yk4n.js +33 -0
  102. package/dist/chunks/{studio-wcy8trfx.js → studio-q3x06vmj.js} +23 -22
  103. package/dist/chunks/{studio-6yw4y3my.js → studio-qhhm6hbt.js} +8 -8
  104. package/dist/chunks/studio-qk4bfsq2.js +362 -0
  105. package/dist/chunks/{studio-msd847zn.js → studio-qk90fgqm.js} +361 -90
  106. package/dist/chunks/{studio-jkftxyvz.js → studio-r6nvacqs.js} +5861 -2154
  107. package/dist/chunks/{studio-53n8bp04.js → studio-r6xmmtfh.js} +1 -1
  108. package/dist/chunks/{studio-tvgyw9xw.js → studio-rnyf3f8e.js} +83 -250
  109. package/dist/chunks/studio-rs76k67r.js +12 -0
  110. package/dist/chunks/studio-sbjyc8bt.js +954 -0
  111. package/dist/chunks/{studio-1wagb550.js → studio-syg2tadj.js} +11 -11
  112. package/dist/chunks/{studio-t5wqwzdh.js → studio-tjjk7jvk.js} +1 -1
  113. package/dist/chunks/studio-tqgryxwg.js +1171 -0
  114. package/dist/chunks/studio-try13h8c.js +8448 -0
  115. package/dist/chunks/studio-vfq8qpjt.js +1219 -0
  116. package/dist/chunks/studio-vhv5tgxm.js +51 -0
  117. package/dist/chunks/{studio-ahn3pdgx.js → studio-vw7mzp6z.js} +52 -38
  118. package/dist/chunks/studio-wqpngpsk.js +174 -0
  119. package/dist/chunks/studio-wqz6dggm.js +1356 -0
  120. package/dist/chunks/{studio-92ab2jqe.js → studio-y9zedyjn.js} +14 -14
  121. package/dist/chunks/studio-yxa81f45.js +12 -0
  122. package/dist/chunks/studio-zdn2g6dt.js +148 -0
  123. package/dist/chunks/swatch-group-t0n6h2rn.js +139 -0
  124. package/dist/chunks/tabs-wbp1cdws.js +156 -0
  125. package/dist/chunks/textfield-abk6qyee.js +73 -0
  126. package/dist/chunks/toast-780pvfbv.js +27 -0
  127. package/dist/chunks/toast-host-3sqv46sn.js +116 -0
  128. package/dist/chunks/toolbar-xbh5bhtr.js +194 -0
  129. package/dist/chunks/tooltip-eptb614w.js +369 -0
  130. package/dist/chunks/tree-a73p0pqm.js +367 -0
  131. package/dist/chunks/{tsMode-76kr53q0.js → tsMode-jy4m86rv.js} +83 -85
  132. package/dist/chunks/workspace-t55jdjbx.js +69 -0
  133. package/dist/chunks/{ws-client-6shc5rze.js → ws-client-ny4zc51r.js} +20 -22
  134. package/dist/iframe-entry.js +1873 -673
  135. package/dist/studio.js +52757 -36535
  136. package/dist/workers/editor.worker.js +1040 -1085
  137. package/dist/workers/json.worker.js +1946 -1991
  138. package/dist/workers/ts.worker.js +4960 -5005
  139. package/index.html +1 -0
  140. package/package.json +18 -52
  141. package/src/about/about-modal.ts +72 -123
  142. package/src/browse/library-commands.ts +20 -49
  143. package/src/browse/library-layouts.ts +87 -218
  144. package/src/browse/library-pane.ts +406 -438
  145. package/src/canvas/canvas-helpers.ts +0 -49
  146. package/src/canvas/canvas-live-render.ts +25 -2
  147. package/src/canvas/canvas-render.ts +666 -231
  148. package/src/canvas/canvas-surface.ts +0 -1
  149. package/src/canvas/canvas-utils.ts +333 -113
  150. package/src/canvas/dialog-path.ts +76 -0
  151. package/src/canvas/dialog-state.ts +67 -0
  152. package/src/canvas/diff-marks.ts +252 -0
  153. package/src/canvas/diff-toolbar.ts +349 -0
  154. package/src/canvas/diff-view.ts +123 -0
  155. package/src/canvas/edit-width-drag.ts +187 -0
  156. package/src/canvas/edit-width.ts +150 -0
  157. package/src/canvas/iframe-entry.ts +125 -8
  158. package/src/canvas/iframe-host.ts +271 -15
  159. package/src/canvas/iframe-interaction.ts +133 -13
  160. package/src/canvas/iframe-patch.ts +7 -1
  161. package/src/canvas/iframe-position.ts +5 -6
  162. package/src/canvas/iframe-protocol.ts +106 -5
  163. package/src/canvas/iframe-render.ts +373 -5
  164. package/src/canvas/iframe-slash.ts +2 -2
  165. package/src/canvas/iframe-subtree.ts +5 -8
  166. package/src/canvas/path-mapping.ts +25 -3
  167. package/src/canvas/popover-path.ts +106 -0
  168. package/src/canvas/popover-state.ts +155 -0
  169. package/src/canvas/surface-registry.ts +21 -10
  170. package/src/collab/presence-chips.ts +51 -73
  171. package/src/commands/app-commands.ts +10 -0
  172. package/src/commands/budget.ts +12 -0
  173. package/src/commands/command-args.ts +404 -6
  174. package/src/commands/defaults.ts +44 -14
  175. package/src/commands/live-context.ts +11 -5
  176. package/src/commands/reference.ts +12 -2
  177. package/src/commands/registry.ts +177 -10
  178. package/src/commands/run-reported.ts +120 -0
  179. package/src/content/entry-commands.ts +16 -23
  180. package/src/content/entry-editor.ts +144 -101
  181. package/src/editor/canvas-slash-bridge.ts +2 -2
  182. package/src/editor/context-menu.ts +49 -200
  183. package/src/editor/convert-to-component.ts +42 -82
  184. package/src/editor/convert-to-repeater.ts +132 -173
  185. package/src/editor/inline-edit.ts +11 -0
  186. package/src/editor/shortcuts.ts +76 -49
  187. package/src/editor/slash-menu.ts +150 -157
  188. package/src/files/components.ts +39 -0
  189. package/src/files/file-ops.ts +117 -11
  190. package/src/files/files.ts +944 -660
  191. package/src/files/json-layout.ts +474 -0
  192. package/src/files/serialize-document.ts +8 -1
  193. package/src/format/convert-file.ts +16 -10
  194. package/src/format/format-host.ts +50 -1
  195. package/src/github/github-auth.ts +71 -29
  196. package/src/github/github-publish.ts +57 -65
  197. package/src/grid/cell-editors.ts +46 -4
  198. package/src/grid/cell-popovers.ts +65 -62
  199. package/src/grid/grid-open.ts +86 -64
  200. package/src/grid/grid-panel.ts +390 -469
  201. package/src/grid/redirects-grid.ts +40 -44
  202. package/src/hosting/layout.ts +2 -0
  203. package/src/i18n/i18n-commands.ts +137 -62
  204. package/src/media/media-pane.ts +83 -133
  205. package/src/new-project/add-repo-modal.ts +125 -176
  206. package/src/new-project/import-tab.ts +181 -252
  207. package/src/new-project/location-fields.ts +93 -160
  208. package/src/new-project/new-project-modal.ts +376 -367
  209. package/src/packages/jxsuite-update.ts +76 -18
  210. package/src/packages/pull-package-sync.ts +5 -1
  211. package/src/panels/activity-panel.ts +137 -104
  212. package/src/panels/ai-chat/chat-markdown.ts +15 -13
  213. package/src/panels/ai-chat/chat-view.ts +307 -472
  214. package/src/panels/ai-chat/composer.ts +175 -163
  215. package/src/panels/ai-chat/sessions-view.ts +31 -62
  216. package/src/panels/ai-panel.ts +213 -185
  217. package/src/panels/block-action-bar.ts +444 -645
  218. package/src/panels/bottom-dock.ts +112 -47
  219. package/src/panels/chat-panel.ts +19 -14
  220. package/src/panels/data-explorer.ts +141 -102
  221. package/src/panels/data-grid.ts +183 -150
  222. package/src/panels/dnd.ts +75 -20
  223. package/src/panels/editors.ts +26 -19
  224. package/src/panels/elements-panel.ts +243 -186
  225. package/src/panels/empty-state.ts +26 -42
  226. package/src/panels/events-panel.ts +950 -729
  227. package/src/panels/formula-workspace.ts +434 -207
  228. package/src/panels/frontmatter-fields.ts +185 -153
  229. package/src/panels/frontmatter-panel.ts +411 -187
  230. package/src/panels/git-diff-open.ts +148 -0
  231. package/src/panels/git-panel.ts +679 -605
  232. package/src/panels/head-panel.ts +617 -435
  233. package/src/panels/i18n-panel.ts +148 -135
  234. package/src/panels/imports-panel.ts +388 -414
  235. package/src/panels/jump-bar.ts +175 -147
  236. package/src/panels/layers-panel.ts +785 -671
  237. package/src/panels/left-panel.ts +166 -94
  238. package/src/panels/navigator-panels.ts +1 -1
  239. package/src/panels/pane-context.ts +529 -677
  240. package/src/panels/pane-grid.ts +265 -241
  241. package/src/panels/panel-registry.ts +15 -4
  242. package/src/panels/problems-panel.ts +181 -99
  243. package/src/panels/properties-panel.ts +1525 -966
  244. package/src/panels/provenance.ts +31 -113
  245. package/src/panels/quick-search.ts +223 -184
  246. package/src/panels/right-panel.ts +135 -169
  247. package/src/panels/seo-modal.ts +346 -167
  248. package/src/panels/settings-menu.ts +114 -661
  249. package/src/panels/settings-pane.ts +102 -86
  250. package/src/panels/signals-panel.ts +1318 -1172
  251. package/src/panels/statement-editor.ts +556 -428
  252. package/src/panels/style-panel.ts +1367 -630
  253. package/src/panels/style-utils.ts +36 -32
  254. package/src/panels/stylebook-doc.ts +30 -73
  255. package/src/panels/stylebook-layers-panel.ts +202 -109
  256. package/src/panels/stylebook-panel.ts +124 -88
  257. package/src/panels/tab-strip.ts +386 -288
  258. package/src/platforms/cloud.ts +106 -16
  259. package/src/platforms/devserver.ts +13 -0
  260. package/src/publish/deploy-checklist.ts +124 -78
  261. package/src/publish/publish-commands.ts +4 -12
  262. package/src/publish/publish-panel.ts +134 -328
  263. package/src/services/a11y-report.ts +100 -43
  264. package/src/services/ai-command-tools.ts +538 -0
  265. package/src/services/ai-project-tools.ts +8 -2
  266. package/src/services/ai-session-store.ts +6 -0
  267. package/src/services/ai-system-prompt.ts +112 -24
  268. package/src/services/ai-tools.ts +36 -212
  269. package/src/services/ai-write-report.ts +174 -0
  270. package/src/services/document-assistant.ts +59 -8
  271. package/src/services/idle.ts +16 -14
  272. package/src/services/live-surfaces.ts +237 -0
  273. package/src/services/model-uri.ts +75 -0
  274. package/src/services/notify.ts +63 -6
  275. package/src/services/popover-report.ts +325 -0
  276. package/src/services/surface-registry.ts +56 -0
  277. package/src/services/tool-executor.ts +6 -0
  278. package/src/settings/contexts-section.ts +301 -299
  279. package/src/settings/contributed-section.ts +361 -222
  280. package/src/settings/css-vars-editor.ts +320 -325
  281. package/src/settings/defs-editor.ts +572 -535
  282. package/src/settings/dependencies-editor.ts +79 -107
  283. package/src/settings/extension-commands.ts +379 -0
  284. package/src/settings/extension-rows.ts +113 -0
  285. package/src/settings/extensions-section.ts +287 -0
  286. package/src/settings/general-settings.ts +130 -181
  287. package/src/settings/head-editor.ts +10 -305
  288. package/src/settings/locales-section.ts +146 -196
  289. package/src/settings/preferences-accounts.ts +1 -1
  290. package/src/settings/preferences-dialog.ts +350 -330
  291. package/src/settings/project-sections.ts +108 -181
  292. package/src/settings/schema-field-ui.ts +11 -399
  293. package/src/settings/section-registry.ts +8 -1
  294. package/src/settings/settings-document.ts +31 -29
  295. package/src/shell/tree.ts +42 -87
  296. package/src/shell.ts +48 -36
  297. package/src/studio.ts +104 -69
  298. package/src/style/token-ref.ts +0 -39
  299. package/src/surfaces/about.json +263 -0
  300. package/src/surfaces/about.ts +163 -0
  301. package/src/surfaces/add-repo.json +486 -0
  302. package/src/surfaces/add-repo.ts +236 -0
  303. package/src/surfaces/ai-chat.json +2185 -0
  304. package/src/surfaces/ai-chat.ts +549 -0
  305. package/src/surfaces/ai-credentials-form.json +332 -0
  306. package/src/surfaces/ai-credentials-form.ts +151 -0
  307. package/src/surfaces/ai-managed-connect.json +108 -0
  308. package/src/surfaces/ai-managed-connect.ts +123 -0
  309. package/src/surfaces/ai-model-picker.json +114 -0
  310. package/src/surfaces/ai-model-picker.ts +139 -0
  311. package/src/surfaces/block-action-bar.json +640 -0
  312. package/src/surfaces/block-action-bar.ts +368 -0
  313. package/src/surfaces/bottom-dock.json +154 -0
  314. package/src/surfaces/bottom-dock.ts +125 -0
  315. package/src/surfaces/canvas-stage.json +444 -0
  316. package/src/surfaces/canvas-stage.ts +253 -0
  317. package/src/surfaces/cf-account-picker.json +300 -0
  318. package/src/surfaces/cf-account-picker.ts +214 -0
  319. package/src/surfaces/commandbar.json +985 -0
  320. package/src/{panels/toolbar.ts → surfaces/commandbar.ts} +417 -391
  321. package/src/surfaces/convert-repeater.json +309 -0
  322. package/src/surfaces/convert-repeater.ts +276 -0
  323. package/src/surfaces/data-actions.json +157 -0
  324. package/src/surfaces/data-actions.ts +115 -0
  325. package/src/surfaces/dialog.json +289 -0
  326. package/src/surfaces/dialog.ts +343 -0
  327. package/src/surfaces/diff-toolbar.json +266 -0
  328. package/src/surfaces/diff-toolbar.ts +139 -0
  329. package/src/surfaces/doc-header.json +739 -0
  330. package/src/surfaces/doc-header.ts +223 -0
  331. package/src/surfaces/empty-state.json +152 -0
  332. package/src/surfaces/empty-state.ts +173 -0
  333. package/src/surfaces/entry-editor.json +281 -0
  334. package/src/surfaces/entry-editor.ts +191 -0
  335. package/src/surfaces/expression-editor.json +977 -0
  336. package/src/surfaces/expression-editor.ts +266 -0
  337. package/src/surfaces/files-panel.json +592 -0
  338. package/src/surfaces/files-panel.ts +301 -0
  339. package/src/surfaces/formula-palette.json +364 -0
  340. package/src/surfaces/formula-palette.ts +340 -0
  341. package/src/surfaces/git-panel.json +1822 -0
  342. package/src/surfaces/git-panel.ts +272 -0
  343. package/src/surfaces/github-auth.json +112 -0
  344. package/src/surfaces/github-auth.ts +139 -0
  345. package/src/surfaces/github-publish.json +206 -0
  346. package/src/surfaces/github-publish.ts +169 -0
  347. package/src/surfaces/grid-cell.json +218 -0
  348. package/src/surfaces/grid-cell.ts +120 -0
  349. package/src/surfaces/grid-open.json +147 -0
  350. package/src/surfaces/grid-open.ts +87 -0
  351. package/src/surfaces/grid-panel.json +706 -0
  352. package/src/surfaces/grid-panel.ts +206 -0
  353. package/src/surfaces/grid-replace.json +179 -0
  354. package/src/surfaces/grid-replace.ts +89 -0
  355. package/src/surfaces/grid-views.json +446 -0
  356. package/src/surfaces/grid-views.ts +172 -0
  357. package/src/surfaces/inspector-dock.json +187 -0
  358. package/src/surfaces/inspector-dock.ts +161 -0
  359. package/src/surfaces/jump-bar.json +243 -0
  360. package/src/surfaces/jump-bar.ts +129 -0
  361. package/src/surfaces/jxsuite-update.json +146 -0
  362. package/src/surfaces/jxsuite-update.ts +149 -0
  363. package/src/surfaces/library-pane.json +1509 -0
  364. package/src/surfaces/library-pane.ts +363 -0
  365. package/src/surfaces/logic-panel.json +1949 -0
  366. package/src/surfaces/logic-panel.ts +369 -0
  367. package/src/surfaces/logic-workspace.json +685 -0
  368. package/src/surfaces/logic-workspace.ts +238 -0
  369. package/src/surfaces/media-browser.json +303 -0
  370. package/src/surfaces/media-browser.ts +145 -0
  371. package/src/surfaces/media-field.json +163 -0
  372. package/src/surfaces/media-field.ts +116 -0
  373. package/src/surfaces/media-pane.json +513 -0
  374. package/src/surfaces/media-pane.ts +197 -0
  375. package/src/surfaces/menu.json +232 -0
  376. package/src/surfaces/menu.ts +375 -0
  377. package/src/surfaces/navigator-dock.json +113 -0
  378. package/src/surfaces/navigator-dock.ts +130 -0
  379. package/src/surfaces/new-project.json +1654 -0
  380. package/src/surfaces/new-project.ts +411 -0
  381. package/src/surfaces/palette.json +535 -0
  382. package/src/surfaces/pane-context.json +1497 -0
  383. package/src/surfaces/pane-context.ts +513 -0
  384. package/src/surfaces/pane-grid.json +188 -0
  385. package/src/surfaces/pane-grid.ts +250 -0
  386. package/src/surfaces/panel-activity.json +563 -0
  387. package/src/surfaces/panel-activity.ts +187 -0
  388. package/src/surfaces/panel-data.json +141 -0
  389. package/src/surfaces/panel-data.ts +156 -0
  390. package/src/surfaces/panel-deploy-checklist.json +283 -0
  391. package/src/surfaces/panel-deploy-checklist.ts +175 -0
  392. package/src/surfaces/panel-elements.json +367 -0
  393. package/src/surfaces/panel-elements.ts +175 -0
  394. package/src/surfaces/panel-i18n.json +569 -0
  395. package/src/surfaces/panel-i18n.ts +212 -0
  396. package/src/surfaces/panel-imports.json +780 -0
  397. package/src/surfaces/panel-imports.ts +209 -0
  398. package/src/surfaces/panel-outline.json +734 -0
  399. package/src/surfaces/panel-outline.ts +326 -0
  400. package/src/surfaces/panel-page.json +1017 -0
  401. package/src/surfaces/panel-page.ts +240 -0
  402. package/src/surfaces/panel-problems.json +497 -0
  403. package/src/surfaces/panel-problems.ts +157 -0
  404. package/src/surfaces/panel-signals.json +1973 -0
  405. package/src/surfaces/panel-signals.ts +436 -0
  406. package/src/surfaces/panel-stylebook-layers.json +317 -0
  407. package/src/surfaces/panel-stylebook-layers.ts +155 -0
  408. package/src/surfaces/preferences.json +850 -0
  409. package/src/surfaces/preferences.ts +332 -0
  410. package/src/surfaces/progress-modal.json +110 -0
  411. package/src/surfaces/progress-modal.ts +150 -0
  412. package/src/surfaces/properties-panel.json +1578 -0
  413. package/src/surfaces/properties-panel.ts +337 -0
  414. package/src/surfaces/publish.json +945 -0
  415. package/src/surfaces/publish.ts +392 -0
  416. package/src/surfaces/push-plan.json +110 -0
  417. package/src/surfaces/push-plan.ts +87 -0
  418. package/src/surfaces/rail.json +255 -0
  419. package/src/surfaces/rail.ts +206 -0
  420. package/src/surfaces/reference-field.json +191 -0
  421. package/src/surfaces/reference-field.ts +168 -0
  422. package/src/surfaces/schema-builder.json +1011 -0
  423. package/src/surfaces/schema-builder.ts +181 -0
  424. package/src/surfaces/schema-form.json +1013 -0
  425. package/src/surfaces/schema-form.ts +287 -0
  426. package/src/surfaces/secret-field.json +60 -0
  427. package/src/surfaces/secret-field.ts +146 -0
  428. package/src/surfaces/seo.json +932 -0
  429. package/src/surfaces/seo.ts +334 -0
  430. package/src/surfaces/settings-contexts.json +538 -0
  431. package/src/surfaces/settings-contexts.ts +196 -0
  432. package/src/surfaces/settings-contributed.json +489 -0
  433. package/src/surfaces/settings-contributed.ts +199 -0
  434. package/src/surfaces/settings-css-vars.json +820 -0
  435. package/src/surfaces/settings-css-vars.ts +199 -0
  436. package/src/surfaces/settings-defs.json +1363 -0
  437. package/src/surfaces/settings-defs.ts +232 -0
  438. package/src/surfaces/settings-deploy.json +108 -0
  439. package/src/surfaces/settings-deploy.ts +135 -0
  440. package/src/surfaces/settings-extensions.json +486 -0
  441. package/src/surfaces/settings-extensions.ts +201 -0
  442. package/src/surfaces/settings-head.json +779 -0
  443. package/src/surfaces/settings-head.ts +397 -0
  444. package/src/surfaces/settings-locales.json +420 -0
  445. package/src/surfaces/settings-locales.ts +137 -0
  446. package/src/surfaces/settings-overview.json +423 -0
  447. package/src/surfaces/settings-overview.ts +218 -0
  448. package/src/surfaces/settings-packages.json +549 -0
  449. package/src/surfaces/settings-packages.ts +158 -0
  450. package/src/surfaces/settings-pane.json +147 -0
  451. package/src/surfaces/settings-pane.ts +150 -0
  452. package/src/surfaces/settings-rawjson.json +104 -0
  453. package/src/surfaces/settings-rawjson.ts +107 -0
  454. package/src/surfaces/shell.json +99 -0
  455. package/src/surfaces/shell.ts +30 -0
  456. package/src/surfaces/slash-menu.json +180 -0
  457. package/src/surfaces/slash-menu.ts +272 -0
  458. package/src/surfaces/statements.json +607 -0
  459. package/src/surfaces/statements.ts +238 -0
  460. package/src/surfaces/statusbar.json +94 -0
  461. package/src/{panels → surfaces}/statusbar.ts +164 -90
  462. package/src/surfaces/style-panel.json +1643 -0
  463. package/src/surfaces/style-panel.ts +338 -0
  464. package/src/surfaces/stylebook-chrome.json +122 -0
  465. package/src/surfaces/stylebook-chrome.ts +122 -0
  466. package/src/surfaces/tab-strip.json +448 -0
  467. package/src/surfaces/tab-strip.ts +200 -0
  468. package/src/surfaces/target-line.json +419 -0
  469. package/src/surfaces/target-line.ts +349 -0
  470. package/src/surfaces/toasts.json +189 -0
  471. package/src/surfaces/welcome.json +571 -0
  472. package/src/surfaces/welcome.ts +338 -0
  473. package/src/tabs/project-config.ts +111 -21
  474. package/src/tabs/tab.ts +52 -1
  475. package/src/types.ts +22 -0
  476. package/src/ui/ai-credentials-form.ts +104 -100
  477. package/src/ui/ai-managed-connect.ts +54 -36
  478. package/src/ui/ai-model-picker.ts +75 -47
  479. package/src/ui/cf-account-picker.ts +76 -141
  480. package/src/ui/color-selector.ts +80 -301
  481. package/src/ui/dynamic-slot.ts +43 -283
  482. package/src/ui/expression-editor.ts +797 -576
  483. package/src/ui/field-input.ts +8 -181
  484. package/src/ui/form-controls.ts +838 -366
  485. package/src/ui/formula-chips.ts +80 -85
  486. package/src/ui/kit.ts +33 -0
  487. package/src/ui/layers.ts +296 -593
  488. package/src/ui/media-picker.ts +203 -284
  489. package/src/ui/panel-resize.ts +251 -64
  490. package/src/ui/popover-surface.ts +153 -0
  491. package/src/ui/progress-modal.ts +22 -60
  492. package/src/ui/regions.ts +13 -7
  493. package/src/ui/schema-form.ts +906 -440
  494. package/src/ui/surface.ts +122 -0
  495. package/src/ui/unit-selector.ts +15 -131
  496. package/src/ui/value-source.ts +14 -0
  497. package/src/ui/virtual-window.ts +88 -9
  498. package/src/utils/canvas-media.ts +72 -0
  499. package/src/utils/edit-display.ts +7 -2
  500. package/src/utils/element-selectors.ts +69 -0
  501. package/src/utils/link-target.ts +2 -2
  502. package/src/utils/studio-utils.ts +0 -10
  503. package/src/view.ts +15 -0
  504. package/src/workspace/pane-derive.ts +36 -14
  505. package/src/workspace/workspace.ts +75 -6
  506. package/styles/canvas.css +72 -467
  507. package/styles/forced-colors.css +48 -82
  508. package/styles/forced-colors.json +41 -0
  509. package/styles/inspector.css +2 -1301
  510. package/styles/overlays.css +96 -2823
  511. package/styles/panels.css +6 -1423
  512. package/styles/shell-frame.css +272 -0
  513. package/styles/shell-frame.json +227 -0
  514. package/styles/shell.css +0 -1568
  515. package/styles/tokens.css +65 -136
  516. package/styles/tokens.json +84 -0
  517. package/dist/chunks/Overlay.dev-etqjwyf9.js +0 -23
  518. package/dist/chunks/adapter-jkcyhgtr.js +0 -14
  519. package/dist/chunks/cf-account-picker-en86v7x7.js +0 -163
  520. package/dist/chunks/cf-settings-45fgyx8y.js +0 -21
  521. package/dist/chunks/components-zmx10t62.js +0 -21
  522. package/dist/chunks/content-source-48xg86wj.js +0 -49
  523. package/dist/chunks/convert-to-repeater-43tfn7cs.js +0 -268
  524. package/dist/chunks/editor-cptq5jp1.js +0 -37
  525. package/dist/chunks/entry-commands-e63f1xc0.js +0 -46
  526. package/dist/chunks/extension-sections-txv08xxg.js +0 -311
  527. package/dist/chunks/file-ops-wbh4hhsx.js +0 -48
  528. package/dist/chunks/files-3kfkwhk4.js +0 -93
  529. package/dist/chunks/flow-qbfgrpeh.js +0 -634
  530. package/dist/chunks/focus-trap.esm-9t2drp0g.js +0 -1025
  531. package/dist/chunks/focus-visible-6eg70z18.js +0 -167
  532. package/dist/chunks/format-host-w16q81tf.js +0 -43
  533. package/dist/chunks/fs-events-hrrg328g.js +0 -21
  534. package/dist/chunks/git-panel-532whr1y.js +0 -59
  535. package/dist/chunks/index-zqxmqxmh.js +0 -109
  536. package/dist/chunks/jx-validate-8er6gbxy.js +0 -19
  537. package/dist/chunks/layers-panel-07hm7g5j.js +0 -67
  538. package/dist/chunks/layers-q75tj2mf.js +0 -45
  539. package/dist/chunks/lit-html-j055mkh8.js +0 -22
  540. package/dist/chunks/monaco-buffer-dqw0xxpx.js +0 -25
  541. package/dist/chunks/notify-yjm79n4s.js +0 -30
  542. package/dist/chunks/parse-24d0gay3.js +0 -19
  543. package/dist/chunks/platform-ba1j1gbh.js +0 -16
  544. package/dist/chunks/publish-panel-v9st96ja.js +0 -29
  545. package/dist/chunks/quick-search-zccjp6gv.js +0 -66
  546. package/dist/chunks/references-3qx8fkyp.js +0 -29
  547. package/dist/chunks/right-panel-vm3b6kwy.js +0 -46
  548. package/dist/chunks/section-registry-sx1ykvkw.js +0 -30
  549. package/dist/chunks/sp-overlay.dev-qgvhnxf4.js +0 -18
  550. package/dist/chunks/sp-popover.dev-n2etmqdp.js +0 -9
  551. package/dist/chunks/sp-progress-circle.dev-hryhj0es.js +0 -15
  552. package/dist/chunks/sp-tooltip.dev-4sastdnw.js +0 -15
  553. package/dist/chunks/sp-tray.dev-tkbscm06.js +0 -199
  554. package/dist/chunks/studio-0a5qrh01.js +0 -3
  555. package/dist/chunks/studio-0bq6eh7v.js +0 -12
  556. package/dist/chunks/studio-18j3bmcz.js +0 -14
  557. package/dist/chunks/studio-1ngbejft.js +0 -181
  558. package/dist/chunks/studio-4b5z1x43.js +0 -424
  559. package/dist/chunks/studio-4n2b5gzb.js +0 -357
  560. package/dist/chunks/studio-4rzyrtjz.js +0 -426
  561. package/dist/chunks/studio-5fx3g9jg.js +0 -4325
  562. package/dist/chunks/studio-5myknm0a.js +0 -1903
  563. package/dist/chunks/studio-7afd21nw.js +0 -67
  564. package/dist/chunks/studio-7nte2hj4.js +0 -613
  565. package/dist/chunks/studio-8jpzqk5s.js +0 -128
  566. package/dist/chunks/studio-8q517dfr.js +0 -24
  567. package/dist/chunks/studio-950k0dx6.js +0 -6939
  568. package/dist/chunks/studio-9n4mrmnb.js +0 -184
  569. package/dist/chunks/studio-a0tswy0w.js +0 -58
  570. package/dist/chunks/studio-ahnzd9rg.js +0 -23
  571. package/dist/chunks/studio-bgxt93ga.js +0 -62
  572. package/dist/chunks/studio-cmb03bg5.js +0 -13890
  573. package/dist/chunks/studio-d1ks410h.js +0 -175
  574. package/dist/chunks/studio-ef49pnzx.js +0 -387
  575. package/dist/chunks/studio-eqq1w638.js +0 -113
  576. package/dist/chunks/studio-ew0djmhg.js +0 -341
  577. package/dist/chunks/studio-gfgb8pe6.js +0 -1652
  578. package/dist/chunks/studio-h4rxscfc.js +0 -10
  579. package/dist/chunks/studio-jc994dnr.js +0 -1066
  580. package/dist/chunks/studio-kyh9avvv.js +0 -28
  581. package/dist/chunks/studio-m3hwn7y1.js +0 -120
  582. package/dist/chunks/studio-mtfnaqs9.js +0 -659
  583. package/dist/chunks/studio-n6j9t10q.js +0 -318
  584. package/dist/chunks/studio-n8b9wqwy.js +0 -291
  585. package/dist/chunks/studio-qcy05dp8.js +0 -1743
  586. package/dist/chunks/studio-qq6jym04.js +0 -53
  587. package/dist/chunks/studio-rdx8jcxy.js +0 -83
  588. package/dist/chunks/studio-rn9ta2mz.js +0 -111
  589. package/dist/chunks/studio-t7qb9db8.js +0 -665
  590. package/dist/chunks/studio-tmc5emrw.js +0 -8
  591. package/dist/chunks/studio-z6nw2ek2.js +0 -18
  592. package/dist/chunks/studio-zczps70q.js +0 -378
  593. package/dist/chunks/studio-zqazsct2.js +0 -1823
  594. package/dist/chunks/workspace-fjx52ryv.js +0 -89
  595. package/src/panels/activity-bar.ts +0 -251
  596. package/src/panels/panel-scheduler.ts +0 -219
  597. package/src/panels/style-inputs.ts +0 -237
  598. package/src/panels/target-line.ts +0 -274
  599. package/src/panels/welcome-screen.ts +0 -346
  600. package/src/ui/button-group.ts +0 -102
  601. package/src/ui/choice-field.ts +0 -72
  602. package/src/ui/field-row.ts +0 -249
  603. package/src/ui/formula-palette.ts +0 -213
  604. package/src/ui/icons.ts +0 -52
  605. package/src/ui/jx-theme.ts +0 -130
  606. package/src/ui/spectrum.ts +0 -340
  607. package/src/ui/value-selector.ts +0 -174
  608. package/src/ui/widgets.ts +0 -172
  609. /package/dist/chunks/{javascript-s56a8dpk.css → javascript-4abzjcy9.css} +0 -0
  610. /package/dist/chunks/{jsonMode-zr9sw0c7.css → jsonMode-vvmpmk34.css} +0 -0
  611. /package/dist/chunks/{monaco-setup-pav68602.css → monaco-setup-8vbyqnhr.css} +0 -0
  612. /package/dist/chunks/{tsMode-ef187txx.css → tsMode-hnxxb73h.css} +0 -0
package/src/studio.ts CHANGED
@@ -53,10 +53,12 @@ import {
53
53
 
54
54
  import { isEditing } from "./editor/inline-edit";
55
55
  import { applyTransform, registerCanvasViewCommands } from "./canvas/canvas-utils";
56
+ import { diffCommands } from "./canvas/diff-toolbar";
56
57
  import type { CanvasSurface } from "./canvas/canvas-surface";
57
58
  import {
58
59
  initCanvasRender,
59
60
  registerSelectionSetCommand,
61
+ redefineElementOnCanvases,
60
62
  renderCanvas,
61
63
  renderOverlays,
62
64
  scheduleCanvasRender,
@@ -89,13 +91,22 @@ import {
89
91
  import { runInsertZoneAction } from "./editor/insert-zone-action";
90
92
  import { canvasSlashHandler } from "./editor/canvas-slash-bridge";
91
93
  import { makeCanvasContextMenuHandler } from "./editor/canvas-context-menu";
92
- import { mountStatusbar, renderStatusbar } from "./panels/statusbar";
94
+ import { mountStatusbar, renderStatusbar } from "./surfaces/statusbar";
93
95
  import { mountJumpBar } from "./panels/jump-bar";
94
- import { cellForPane } from "./panels/pane-grid";
96
+ import { cellForPane, paneGridReady } from "./panels/pane-grid";
95
97
  import { notify } from "./services/notify";
98
+ import { createLiveSurfaceSaver } from "./services/live-surfaces";
96
99
  import { beginActivity } from "./panels/activity-panel";
97
- import { exportFile, parseSourceForPath, saveFile } from "./files/file-ops";
100
+ import {
101
+ exportFile,
102
+ parseCollabSource,
103
+ parseSourceForPath,
104
+ saveFile,
105
+ setDocumentSavedListener,
106
+ } from "./files/file-ops";
98
107
  import { serializeDocument } from "./files/serialize-document";
108
+ import { parseJsonDocument } from "./files/json-layout";
109
+ import type { JsonLayout } from "./files/json-layout";
99
110
  import {
100
111
  formatForPath,
101
112
  loadFormats,
@@ -105,7 +116,7 @@ import {
105
116
  import {
106
117
  loadProject as _loadProject,
107
118
  openProject as _openProject,
108
- renderFilesTemplate as _renderFilesTemplate,
119
+ renderFilesTemplate,
109
120
  findHomePage,
110
121
  loadDirectory,
111
122
  openFileInPane,
@@ -146,16 +157,14 @@ import { mountResizeEdges } from "./resize-edges";
146
157
  import {
147
158
  defBadgeLabel,
148
159
  defCategory,
160
+ mountSignalsPanel,
149
161
  registerSignalsCommands,
150
- renderSignalsTemplate,
151
162
  } from "./panels/signals-panel";
152
- import { loadComponentRegistry } from "./files/components";
163
+ import { loadComponentRegistry, noteComponentSaved } from "./files/components";
153
164
  import { ensureDependenciesInstalled } from "./packages/ensure-deps";
154
165
  import { maybePromptJxsuiteUpdate } from "./packages/jxsuite-update";
155
166
  import { autoSyncProjectOnOpen } from "./packages/pull-package-sync";
156
167
 
157
- import { html, render as litRender } from "lit-html";
158
-
159
168
  import webdata from "../data/webdata.json";
160
169
  import { registerDataExplorerCommands } from "./panels/data-explorer";
161
170
  import {
@@ -164,12 +173,10 @@ import {
164
173
  loadDiffForLens,
165
174
  registerSourceControlCommands,
166
175
  renderGitPanel,
176
+ noteFileSaved,
167
177
  } from "./panels/git-panel";
168
178
 
169
- // ─── Spectrum Web Components ──────────────────────────────────────────────────
170
- // Explicit class imports + registration — bare side-effect imports are tree-shaken
171
- // By Bun's bundler despite sideEffects declarations in Spectrum's package.json.
172
- import { components as _swc } from "./ui/spectrum";
179
+ import { registerKit } from "./ui/kit";
173
180
  import "./ui/panel-resize.js";
174
181
  // Built-in schema-form controls (schema-builder, secret) register on import
175
182
  import "./ui/form-controls.js";
@@ -181,8 +188,8 @@ import { chordsInScopes } from "./commands/keymap";
181
188
  import { FRAME_KEY_SCOPES } from "./canvas/iframe-keys";
182
189
  import { createLiveContext } from "./commands/live-context";
183
190
  import { hasAiCredentials } from "./services/ai-models";
184
- import { mount as mountActivityBar } from "./panels/activity-bar";
185
- import * as toolbarPanel from "./panels/toolbar";
191
+ import { mount as mountActivityBar } from "./surfaces/rail";
192
+ import * as toolbarPanel from "./surfaces/commandbar";
186
193
  import * as overlaysPanel from "./panels/overlays";
187
194
  import * as frontmatterPanelMod from "./panels/frontmatter-panel";
188
195
  import * as rightPanelMod from "./panels/right-panel";
@@ -220,19 +227,27 @@ import {
220
227
  settingsSettled,
221
228
  watchRemoteSettings,
222
229
  } from "./services/settings/kernel";
223
- import { initWelcome } from "./panels/welcome-screen";
230
+ import { initWelcome } from "./surfaces/welcome";
224
231
  import {
225
232
  openAddRepoModal,
226
233
  openProjectPickerModal,
227
234
  platformUsesRepoPicker,
228
235
  } from "./new-project/add-repo-modal";
229
236
  import { openNewProjectModal, registerNewProjectCommands } from "./new-project/new-project-modal";
230
- import { invalidatePageRouteCache, registerInspectorCommands } from "./panels/properties-panel";
237
+ import {
238
+ invalidatePageRouteCache,
239
+ registerInspectorCommands,
240
+ renderPropertiesPanel,
241
+ } from "./panels/properties-panel";
231
242
  import { liveElementCommands, setContextMenuNavigate } from "./editor/context-menu";
232
243
  import { registerSeoCommands, renderSeoModal } from "./panels/seo-modal";
244
+ import { ensurePopoverRevealWatch, setOpenPopover } from "./canvas/popover-state";
245
+ import { setOpenDialog } from "./canvas/dialog-state";
233
246
  import { registerA11yCommands } from "./services/a11y-report";
247
+ import { registerPopoverCommands } from "./services/popover-report";
234
248
  import { registerStyleCommands } from "./panels/style-panel";
235
249
  import { registerGridCommands } from "./grid/grid-open";
250
+ import { registerExtensionCommands } from "./settings/extension-commands";
236
251
  import { registerSettingsCommands } from "./settings/settings-document";
237
252
  import { registerPreferencesCommands } from "./settings/preferences-dialog";
238
253
  import { registerAboutCommands } from "./about/about-modal";
@@ -247,7 +262,7 @@ import { registerI18nCommands } from "./i18n/i18n-commands";
247
262
  import { convertToComponent } from "./editor/convert-to-component";
248
263
  import type { GitDiffState } from "./types";
249
264
  import type { Tab } from "./tabs/tab";
250
- import type { JxMutableNode, ProjectConfig } from "@jxsuite/schema/types";
265
+ import type { JxDocument, JxMutableNode, ProjectConfig } from "@jxsuite/schema/types";
251
266
  import { setBundleBase } from "./services/bundle-base";
252
267
  import { mountShellTree } from "./shell/tree";
253
268
 
@@ -267,8 +282,6 @@ import { mountShellTree } from "./shell/tree";
267
282
  */
268
283
  setBundleBase(import.meta.url);
269
284
 
270
- void _swc;
271
-
272
285
  /**
273
286
  * What the derivation's commands and follows need from the rest of Studio: an opener, and a reader
274
287
  * for the one preset whose subject is not a document at all.
@@ -406,35 +419,21 @@ async function navigateToComponent(componentPath: string) {
406
419
  // A drilled-in component is a real tab now, and `panels/tab-strip.ts` owns the prompt for closing
407
420
  // One. That prompt is two-way where this was three-way — see `showSaveDiscardDialog`'s ledger entry.
408
421
 
409
- // ─── Webdata: datalists for autocomplete ──────────────────────────────────────
410
-
411
- const datalistHost = document.createElement("div");
412
- datalistHost.style.display = "contents";
413
- document.body.append(datalistHost);
414
- litRender(
415
- html`
416
- <datalist id="tag-names">
417
- ${webdata.allTags.map((tag: string) => html`<option value=${tag}></option>`)}
418
- </datalist>
419
- <datalist id="css-props"></datalist>
420
- `,
421
- datalistHost,
422
- );
423
-
424
- requestIdleCallback(() => {
425
- const dl = document.querySelector("#css-props");
426
- if (!dl) {
427
- return;
428
- }
429
- const frag = document.createDocumentFragment();
430
- for (const [name] of webdata.cssProps) {
431
- const opt = document.createElement("option");
432
- opt.value = name!;
433
- frag.append(opt);
434
- }
435
- dl.append(frag);
436
- });
422
+ // ─── Webdata ──────────────────────────────────────────────────────────────────
437
423
 
424
+ /*
425
+ * The two `<datalist>`s that used to be built here — `#tag-names` from `webdata.allTags`, and
426
+ * `#css-props` filled with ~600 options in a `requestIdleCallback` — are GONE, and they were dead
427
+ * rather than convertible. A datalist is reached only through a `list="<id>"` on a control, and
428
+ * nothing in this package has carried one since the Inspector's inputs became documents: `grep -rn
429
+ * "tag-names" packages sites` found this file and the test that asserted this file. So the boot was
430
+ * appending a hidden host to `<body>`, painting six hundred elements into it a frame later, and
431
+ * reaching back for them with `document.querySelector` — for nothing to read.
432
+ *
433
+ * Converting them would have written a surface whose consumer does not exist. What survives is the
434
+ * half that had one: `initCssData` fills the CSS initial-value map the Style tab reads to decide
435
+ * whether a property is set or merely defaulted, and it takes `webdata` directly.
436
+ */
438
437
  initCssData(webdata);
439
438
 
440
439
  // ─── Module-level UI state (must be before render() call) ─────────────────────
@@ -450,11 +449,20 @@ if (!hasPlatform()) {
450
449
 
451
450
  mountResizeEdges();
452
451
 
452
+ // The UI kit: every jx-* element defined from bundled JSON, and its theme adopted, before any
453
+ // Surface can mount. Registration touches no network, so nothing here waits on it.
454
+ void registerKit();
455
+
453
456
  // ─── Render loop ──────────────────────────────────────────────────────────────
454
457
 
455
458
  /* The application frame, before anything adopts a host out of it. index.html carries an empty body
456
- and this is the only definition — see src/shell/tree.ts for what that fixed. */
457
- mountShellTree();
459
+ and this is the only definition — see src/shell/tree.ts for what that fixed.
460
+
461
+ AWAITED, and it has to be: the frame is a Jx document now, so it renders one microtask after
462
+ insertion and only once the kit's elements are defined. `initShellRefs()` on the next line reads
463
+ five of its cells with `querySelector`, and every module that holds one of those would otherwise
464
+ hold a null — silently, because a null host is only noticed by whatever renders into it later. */
465
+ await mountShellTree();
458
466
 
459
467
  initShellRefs();
460
468
  // One effect projects the dock record onto the shell grid — collapse classes and column widths.
@@ -476,9 +484,12 @@ initLayers();
476
484
  initQuickSearch({ openRecentProject: (root: string) => openRecentProject(root) });
477
485
 
478
486
  /* The pane's four surfaces come from its CELL, not from `document.querySelector`.
479
- `panels/pane-grid.ts` mounted through `mountShell()` above, so the primary's cell exists by now;
480
- each of these three modules still holds one host, which is exactly right while the grid draws one
481
- cell and is what `mountForPane` replaces when it draws two. */
487
+ AWAITED, for the reason `mountShellTree()` gives one line up: the grid is a Jx document now, and
488
+ the runtime waits for the kit to be defined before it renders — so `mountShell()` STARTING the
489
+ grid is not the same event as the grid existing, and the three mounts below read the primary
490
+ cell's boxes on the line after it. Each of those modules still holds one host, which is exactly
491
+ right while the grid draws one cell and is what `mountForPane` replaces when it draws two. */
492
+ await paneGridReady();
482
493
  const primaryCell = cellForPane(PRIMARY_PANE);
483
494
 
484
495
  tabStrip.mount(primaryCell?.strip ?? document.createElement("div"));
@@ -517,7 +528,7 @@ setMediaChangedHandler(async (dir) => {
517
528
  await loadDirectory(dir);
518
529
  renderLeftPanel();
519
530
  });
520
- // The in-iframe "/" trigger drives the parent-realm Spectrum slash menu across the bridge.
531
+ // The in-iframe "/" trigger drives the parent-realm slash menu across the bridge.
521
532
  setCanvasSlashHandler(canvasSlashHandler);
522
533
  // Canvas right-clicks show the parent-realm Jx element context menu across the bridge.
523
534
  setCanvasContextMenuHandler(makeCanvasContextMenuHandler());
@@ -852,7 +863,7 @@ leftPanelMod.mount({
852
863
  renderGitPanel,
853
864
  renderHeadTemplate,
854
865
  renderImportsTemplate,
855
- renderSignalsTemplate,
866
+ mountSignalsPanel,
856
867
  setCanvasMode,
857
868
  setGitDiffState: (state: GitDiffState | null) => {
858
869
  shell.git.diffState = state;
@@ -893,13 +904,8 @@ function safeRenderRightPanel() {
893
904
  // Collab sessions serialize/parse through the format host when mirroring between the structure
894
905
  // Tree and the shared source text, and surface freezes via the status bar.
895
906
  configureCollabSerializer(serializeDocument);
896
- configureCollabParser(async (tab, text) => {
897
- if (tab.documentPath && formatForPath(tab.documentPath)) {
898
- const parsed = await parseSourceForPath(tab.documentPath, text);
899
- return { document: parsed.document as JxMutableNode, frontmatter: parsed.frontmatter };
900
- }
901
- return { document: JSON.parse(text) as JxMutableNode };
902
- });
907
+ // `parseCollabSource` also records a JSON text's layout on the tab — see its docstring.
908
+ configureCollabParser(parseCollabSource);
903
909
  // The source-canonical freeze is a STATE the author is being held in, not an error: a toast that
904
910
  // Says so, keyed so a run of freezes is one message rather than a stack of identical ones.
905
911
  configureCollabNotifier((message) => {
@@ -1079,6 +1085,7 @@ if (_projectParam) {
1079
1085
  let frontmatter;
1080
1086
  let parsedDoc;
1081
1087
  let parsedMode;
1088
+ let layout: JsonLayout | null = null;
1082
1089
  await loadFormats();
1083
1090
  const fileFormat = formatForPath(fileRelPath);
1084
1091
  if (fileFormat || !fileRelPath.endsWith(".json")) {
@@ -1089,7 +1096,8 @@ if (_projectParam) {
1089
1096
  ({ frontmatter } = result);
1090
1097
  parsedMode = result.mode;
1091
1098
  } else {
1092
- parsedDoc = JSON.parse(content) as JxMutableNode;
1099
+ // With the file's layout, so a save writes it back as it was laid out (issue 308).
1100
+ ({ document: parsedDoc, layout } = parseJsonDocument(content));
1093
1101
  }
1094
1102
 
1095
1103
  // Open in a tab
@@ -1098,6 +1106,7 @@ if (_projectParam) {
1098
1106
  documentPath: fileRelPath,
1099
1107
  document: parsedDoc as JxMutableNode,
1100
1108
  ...(frontmatter != null && { frontmatter }),
1109
+ layout,
1101
1110
  sourceFormat: fileFormat?.name ?? null,
1102
1111
  });
1103
1112
 
@@ -1379,13 +1388,6 @@ async function openRecentProject(root: string) {
1379
1388
  activity.fail(`Could not open the project at ${root}.`, { path: root });
1380
1389
  }
1381
1390
  }
1382
- function renderFilesTemplate() {
1383
- return _renderFilesTemplate({
1384
- openFileFromTree,
1385
- openProject,
1386
- renderLeftPanel,
1387
- });
1388
- }
1389
1391
  function openFileFromTree(path: string) {
1390
1392
  return openFileInTab(path);
1391
1393
  }
@@ -1484,14 +1486,46 @@ registerCanvasViewCommands(commandRegistry, {
1484
1486
  getCanvasMode,
1485
1487
  renderPane: renderCanvas,
1486
1488
  setCanvasMode,
1489
+ setOpenPopover,
1490
+ setOpenDialog,
1487
1491
  setResolvingOpen: paneContext.setResolvingOpen,
1488
1492
  });
1493
+ /* A save moves the working tree under any comparison of that file, and nothing about a
1494
+ comparison notices on its own — see `noteFileSaved`. Injected rather than imported: `file-ops`
1495
+ must not pull the Source Control panel into its graph. */
1496
+ /* The second listener is the live chrome lane: a saved surface document or kit component re-mounts
1497
+ the roots it draws in THIS shell (studio-ui-guidelines.md §9.3). Inert for every project but the
1498
+ two the chrome comes from, by the saved path alone. */
1499
+ const liveChrome = createLiveSurfaceSaver({
1500
+ notify,
1501
+ redefineOnCanvases: redefineElementOnCanvases,
1502
+ workspace,
1503
+ });
1504
+ /* The third is the component registry: a saved definition rewrites its own entry, so an instance's
1505
+ Component Settings and the Library read the props the file has now rather than the ones the scan
1506
+ saw when the project opened. The Content tab and the Library are told, because neither reads the
1507
+ registry reactively. */
1508
+ setDocumentSavedListener((path, doc) => {
1509
+ void noteFileSaved(path);
1510
+ void liveChrome(path, doc as unknown as JxDocument);
1511
+ if (noteComponentSaved(path, doc)) {
1512
+ renderPropertiesPanel();
1513
+ renderLeftPanel();
1514
+ }
1515
+ });
1516
+ /* Walking a comparison. No deps: the stepper reads the pane-keyed diff store directly and the
1517
+ toolbar redraws itself, so there is nothing for the bootstrap to inject. */
1518
+ commandRegistry.registerAll(diffCommands());
1519
+ /* The one rule that opens a popover when the selection lands in one, from whichever surface made
1520
+ the selection. Started here because it is app-lifetime state, like the canvas's own watches. */
1521
+ ensurePopoverRevealWatch();
1489
1522
  registerSelectionSetCommand(commandRegistry);
1490
1523
  registerInspectorCommands(commandRegistry);
1491
1524
  /* Search appearance, behind one record with two buttons: the Document Header card's and the Page
1492
1525
  panel's. A surface that IS the capability is one the palette cannot reach. */
1493
1526
  registerSeoCommands(commandRegistry);
1494
1527
  registerA11yCommands(commandRegistry);
1528
+ registerPopoverCommands(commandRegistry);
1495
1529
  /* The element menu's eight verbs, in the APP registry rather than only in the popover's own. They
1496
1530
  have always declared `menus: ["context/element", "palette"]`; the palette has never listed one,
1497
1531
  because the only registry holding them was the one `editor/context-menu.ts` builds for itself.
@@ -1507,6 +1541,7 @@ registerSignalsCommands(commandRegistry);
1507
1541
  registerFormulaEditorCommands(commandRegistry);
1508
1542
  registerGridCommands(commandRegistry);
1509
1543
  registerSettingsCommands(commandRegistry);
1544
+ registerExtensionCommands(commandRegistry);
1510
1545
  registerPreferencesCommands(commandRegistry);
1511
1546
  registerLibraryCommands(commandRegistry);
1512
1547
  registerFileFormatCommands(commandRegistry);
@@ -13,11 +13,7 @@
13
13
  * hop would report `var(--color-brand)` as a colour.
14
14
  */
15
15
 
16
- import { html } from "lit-html";
17
- import { tokenLabel } from "./project-styles";
18
-
19
16
  import type { JxStyle } from "@jxsuite/schema/types";
20
- import type { TemplateResult } from "lit-html";
21
17
 
22
18
  /** A value that is EXACTLY one `var()` reference — not `calc(var(--a) * 2)`, which is a value. */
23
19
  const TOKEN_REF_RE = /^var\(\s*(--[\w-]+)\s*\)$/;
@@ -86,38 +82,3 @@ export function resolveTokenValue(
86
82
  }
87
83
  return undefined;
88
84
  }
89
-
90
- /**
91
- * Render a bound value as a chip: the referenced token's name, and — for a colour — the swatch it
92
- * resolves to. The `title` carries the full reference and its resolution, because the chip is
93
- * deliberately short and a reader who needs the literal must still be able to get it.
94
- *
95
- * The chip is not a control. Following it somewhere would be a second navigation contract on a
96
- * surface that already lists every token a scroll away, and a chip that looks clickable and is not
97
- * is the defect §6.2 removed from the collapsed-section dot.
98
- *
99
- * @param {string} name — the referenced token
100
- * @param {string | number | undefined} resolved — {@link resolveTokenValue} of the reference
101
- * @param {{ swatch?: boolean }} [opts] — `swatch` renders the resolved value as a colour chip
102
- * @returns {TemplateResult}
103
- */
104
- export function renderTokenChip(
105
- name: string,
106
- resolved: string | number | undefined,
107
- opts: { swatch?: boolean } = {},
108
- ): TemplateResult {
109
- const shown = resolved === undefined ? "unresolved" : String(resolved);
110
- return html`
111
- <span class="style-token-chip" title="${toTokenRef(name)} → ${shown}">
112
- ${
113
- opts.swatch && resolved !== undefined
114
- ? html`<span
115
- class="style-token-chip-swatch"
116
- style="background:${String(resolved)}"
117
- ></span>`
118
- : ""
119
- }
120
- <span class="style-token-chip-label">${tokenLabel(name)}</span>
121
- </span>
122
- `;
123
- }
@@ -0,0 +1,263 @@
1
+ {
2
+ "$schema": "https://jxsuite.com/schema/v1",
3
+ "$id": "StudioAbout",
4
+ "$description": "The About dialog: the app's version and build metadata, its external links, and the resolved `@jxsuite/*` package versions. A `jx-dialog`, so the platform owns modality, Escape, focus restoration and the backdrop — which is what retired the `sp-underlay` this surface used to render itself, and with it the fixed-position box and scrolling body it drew by hand.",
5
+ "tagName": "jx-dialog",
6
+ "$props": {
7
+ "headline": {
8
+ "$ref": "#/state/headline"
9
+ },
10
+ "confirmLabel": "",
11
+ "cancelLabel": "Close",
12
+ "size": "sm"
13
+ },
14
+ "attributes": {
15
+ "part": "about"
16
+ },
17
+ "oncancel": {
18
+ "$prototype": "Function",
19
+ "body": [
20
+ {
21
+ "operator": "call",
22
+ "target": {
23
+ "$ref": "#/state/close"
24
+ },
25
+ "value": []
26
+ }
27
+ ]
28
+ },
29
+ "onclose": {
30
+ "$prototype": "Function",
31
+ "body": [
32
+ {
33
+ "operator": "call",
34
+ "target": {
35
+ "$ref": "#/state/closed"
36
+ },
37
+ "value": []
38
+ }
39
+ ]
40
+ },
41
+ "style": {
42
+ "$description": "The About dialog's own look. `.about-modal` and `.about-modal-body` are gone rather than moved: they positioned a fixed box, drew its panel and scrolled its body, and `jx-dialog` is all three — so converting this surface deleted two rules instead of transcribing them.",
43
+ "& [part=\"meta\"]": {
44
+ "margin": "0 0 16px",
45
+ "display": "flex",
46
+ "flexDirection": "column",
47
+ "gap": "6px"
48
+ },
49
+ "& [part=\"meta-row\"]": {
50
+ "display": "flex",
51
+ "gap": "12px",
52
+ "fontSize": "13px"
53
+ },
54
+ "& [part=\"meta-label\"]": {
55
+ "$description": "A fixed label column, so the values line up down the list rather than with each row's own text.",
56
+ "width": "96px",
57
+ "minWidth": "96px",
58
+ "margin": "0",
59
+ "color": "var(--fg-dim)"
60
+ },
61
+ "& [part=\"meta-value\"]": {
62
+ "margin": "0",
63
+ "color": "var(--fg)",
64
+ "wordBreak": "break-word"
65
+ },
66
+ "& [part=\"links\"]": {
67
+ "display": "flex",
68
+ "gap": "16px",
69
+ "padding": "12px 0",
70
+ "marginBottom": "12px",
71
+ "borderTop": "1px solid var(--border)",
72
+ "borderBottom": "1px solid var(--border)"
73
+ },
74
+ "& [part=\"links\"] a": {
75
+ "$description": "The accent, from the studio token layer. It read `--spectrum-accent-color-1000` with a hex fallback, which resolved only inside `<sp-theme>`; a document is mounted in the dialog layer, where that name is not in scope and every link would have fallen to the hex.",
76
+ "color": "var(--accent)",
77
+ "textDecoration": "none",
78
+ ":hover": {
79
+ "textDecoration": "underline"
80
+ }
81
+ },
82
+ "& [part=\"section-title\"]": {
83
+ "margin": "0 0 8px",
84
+ "fontSize": "13px",
85
+ "fontWeight": "600",
86
+ "color": "var(--fg)"
87
+ },
88
+ "& [part=\"muted\"]": {
89
+ "margin": "0",
90
+ "fontSize": "13px",
91
+ "color": "var(--fg-dim)"
92
+ },
93
+ "& [part=\"packages\"]": {
94
+ "listStyle": "none",
95
+ "margin": "0",
96
+ "padding": "0",
97
+ "display": "flex",
98
+ "flexDirection": "column",
99
+ "gap": "4px"
100
+ },
101
+ "& [part=\"package-row\"]": {
102
+ "display": "flex",
103
+ "justifyContent": "space-between",
104
+ "gap": "12px",
105
+ "fontSize": "var(--jx-text-md)"
106
+ },
107
+ "& [part=\"package-name\"]": {
108
+ "color": "var(--fg-dim)"
109
+ },
110
+ "& [part=\"package-version\"]": {
111
+ "$description": "Tabular figures, so a column of versions does not jitter as it loads.",
112
+ "color": "var(--fg)",
113
+ "fontVariantNumeric": "tabular-nums"
114
+ }
115
+ },
116
+ "children": [
117
+ {
118
+ "tagName": "dl",
119
+ "attributes": {
120
+ "part": "meta"
121
+ },
122
+ "children": [
123
+ {
124
+ "$prototype": "Array",
125
+ "items": {
126
+ "$ref": "#/state/rows"
127
+ },
128
+ "key": {
129
+ "$ref": "$map/item/label"
130
+ },
131
+ "map": {
132
+ "tagName": "div",
133
+ "attributes": {
134
+ "part": "meta-row"
135
+ },
136
+ "children": [
137
+ {
138
+ "tagName": "dt",
139
+ "attributes": {
140
+ "part": "meta-label"
141
+ },
142
+ "textContent": "${$map.item.label}"
143
+ },
144
+ {
145
+ "tagName": "dd",
146
+ "attributes": {
147
+ "part": "meta-value"
148
+ },
149
+ "textContent": "${$map.item.value}"
150
+ }
151
+ ]
152
+ }
153
+ }
154
+ ]
155
+ },
156
+ {
157
+ "tagName": "div",
158
+ "attributes": {
159
+ "part": "links"
160
+ },
161
+ "children": [
162
+ {
163
+ "$prototype": "Array",
164
+ "items": {
165
+ "$ref": "#/state/links"
166
+ },
167
+ "key": {
168
+ "$ref": "$map/item/href"
169
+ },
170
+ "map": {
171
+ "tagName": "a",
172
+ "attributes": {
173
+ "href": "${$map.item.href}",
174
+ "target": "_blank",
175
+ "rel": "noreferrer noopener"
176
+ },
177
+ "textContent": "${$map.item.label}"
178
+ }
179
+ }
180
+ ]
181
+ },
182
+ {
183
+ "tagName": "section",
184
+ "attributes": {
185
+ "part": "section"
186
+ },
187
+ "children": [
188
+ {
189
+ "tagName": "h3",
190
+ "attributes": {
191
+ "part": "section-title"
192
+ },
193
+ "textContent": "Packages"
194
+ },
195
+ {
196
+ "tagName": "div",
197
+ "attributes": {
198
+ "part": "packages-slot",
199
+ "role": "none"
200
+ },
201
+ "$switch": {
202
+ "$ref": "#/state/packagesState"
203
+ },
204
+ "cases": {
205
+ "loading": {
206
+ "tagName": "p",
207
+ "attributes": {
208
+ "part": "muted"
209
+ },
210
+ "textContent": "Loading packages…"
211
+ },
212
+ "empty": {
213
+ "tagName": "p",
214
+ "attributes": {
215
+ "part": "muted"
216
+ },
217
+ "textContent": "No packages reported."
218
+ },
219
+ "listed": {
220
+ "tagName": "ul",
221
+ "attributes": {
222
+ "part": "packages"
223
+ },
224
+ "children": [
225
+ {
226
+ "$prototype": "Array",
227
+ "items": {
228
+ "$ref": "#/state/packages"
229
+ },
230
+ "key": {
231
+ "$ref": "$map/item/name"
232
+ },
233
+ "map": {
234
+ "tagName": "li",
235
+ "attributes": {
236
+ "part": "package-row"
237
+ },
238
+ "children": [
239
+ {
240
+ "tagName": "span",
241
+ "attributes": {
242
+ "part": "package-name"
243
+ },
244
+ "textContent": "${$map.item.name}"
245
+ },
246
+ {
247
+ "tagName": "span",
248
+ "attributes": {
249
+ "part": "package-version"
250
+ },
251
+ "textContent": "${$map.item.version}"
252
+ }
253
+ ]
254
+ }
255
+ }
256
+ ]
257
+ }
258
+ }
259
+ }
260
+ ]
261
+ }
262
+ ]
263
+ }