@jxsuite/studio 6.1.0 → 6.1.2

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 (645) hide show
  1. package/dist/chunks/2020-f2gkpy8d.js +4 -0
  2. package/dist/chunks/{action-group-2mqby73c.js → action-group-4aan7g6g.js} +3 -3
  3. package/dist/chunks/adapter-4912g339.js +4 -0
  4. package/dist/chunks/cf-account-picker-wccaenh6.js +4 -0
  5. package/dist/chunks/cf-settings-br6105tr.js +4 -0
  6. package/dist/chunks/color-28ksk2qm.js +4 -0
  7. package/dist/chunks/color-area-0fj8a4ga.js +4 -0
  8. package/dist/chunks/color-field-xch8kx2g.js +4 -0
  9. package/dist/chunks/color-slider-jxd8v350.js +4 -0
  10. package/dist/chunks/combobox-p0efwjke.js +4 -0
  11. package/dist/chunks/components-db68vsn7.js +4 -0
  12. package/dist/chunks/content-source-1449qesq.js +4 -0
  13. package/dist/chunks/convert-to-repeater-5h457egj.js +4 -0
  14. package/dist/chunks/dialog-c4x05vyx.js +4 -0
  15. package/dist/chunks/editor-x9jn86a7.js +4 -0
  16. package/dist/chunks/entry-commands-may24cpt.js +4 -0
  17. package/dist/chunks/extension-sections-pvr14vxr.js +4 -0
  18. package/dist/chunks/file-ops-x9v54pcj.js +4 -0
  19. package/dist/chunks/files-j3knqf0s.js +4 -0
  20. package/dist/chunks/format-host-tyre2trb.js +4 -0
  21. package/dist/chunks/fs-events-64ma9htc.js +4 -0
  22. package/dist/chunks/git-panel-84ps5dex.js +4 -0
  23. package/dist/chunks/grid-view-d2wq9ezg.js +51 -0
  24. package/dist/chunks/icons-pnfz478q.js +4 -0
  25. package/dist/chunks/iframe-entry-fvbk89gm.js +5 -0
  26. package/dist/chunks/iframe-entry-jdcktez8.js +5 -0
  27. package/dist/chunks/iframe-entry-x0ygf2yr.js +5 -0
  28. package/dist/chunks/iframe-entry-zap785cw.js +5 -0
  29. package/dist/chunks/iframe-host-ck6vejt5.js +4 -0
  30. package/dist/chunks/index-b8xw3vy9.js +4 -0
  31. package/dist/chunks/{index-gybvv7a6.js → index-zpjmzqfk.js} +3 -3
  32. package/dist/chunks/{javascript-rnvdp3k4.js → javascript-m54mnwp6.js} +3 -3
  33. package/dist/chunks/jsonMode-w15cmrcm.js +13 -0
  34. package/dist/chunks/jx-validate-at3zn8wa.js +4 -0
  35. package/dist/chunks/layers-h4xp1pss.js +4 -0
  36. package/dist/chunks/layers-panel-m5hw1d7g.js +4 -0
  37. package/dist/chunks/listbox-e74qjyq6.js +4 -0
  38. package/dist/chunks/lit-html-8t8t3dnr.js +4 -0
  39. package/dist/chunks/media-picker-2cweexc5.js +4 -0
  40. package/dist/chunks/menu-n6yzswmy.js +4 -0
  41. package/dist/chunks/menu-ynw13y0s.js +4 -0
  42. package/dist/chunks/monaco-binding-7gx83x3r.js +4 -0
  43. package/dist/chunks/monaco-buffer-qzxn567r.js +4 -0
  44. package/dist/chunks/monaco-setup-gxf6656g.js +4 -0
  45. package/dist/chunks/notify-cj5zbrs2.js +4 -0
  46. package/dist/chunks/number-field-y62xq0ty.js +4 -0
  47. package/dist/chunks/parse-b7ddhr8m.js +4 -0
  48. package/dist/chunks/platform-3dfws9js.js +4 -0
  49. package/dist/chunks/popover-jt2gxmzs.js +4 -0
  50. package/dist/chunks/publish-panel-1gvxbj21.js +4 -0
  51. package/dist/chunks/quick-search-0dajrwqg.js +4 -0
  52. package/dist/chunks/references-49qgt404.js +4 -0
  53. package/dist/chunks/right-panel-jm1bwe53.js +4 -0
  54. package/dist/chunks/section-registry-6kwc4fky.js +4 -0
  55. package/dist/chunks/select-rzds841e.js +4 -0
  56. package/dist/chunks/split-n2gfpm5m.js +4 -0
  57. package/dist/chunks/{studio-5g0ag7c0.js → studio-0q988f9w.js} +3 -3
  58. package/dist/chunks/studio-0rt52vpq.js +5 -0
  59. package/dist/chunks/studio-18vgbhs5.js +5 -0
  60. package/dist/chunks/{studio-pxg4ap1e.js → studio-1fxkaaea.js} +4 -4
  61. package/dist/chunks/studio-24mccdrj.js +5 -0
  62. package/dist/chunks/studio-2eh507zk.js +9 -0
  63. package/dist/chunks/studio-2hcbccfv.js +5 -0
  64. package/dist/chunks/studio-2j1cb95x.js +5 -0
  65. package/dist/chunks/studio-2jbs3rxv.js +5 -0
  66. package/dist/chunks/{studio-qbj760tx.js → studio-485046te.js} +7 -7
  67. package/dist/chunks/studio-4h8k4dw9.js +5 -0
  68. package/dist/chunks/studio-5f6n18kx.js +5 -0
  69. package/dist/chunks/studio-5gthpky6.js +5 -0
  70. package/dist/chunks/studio-5ve6bbep.js +5 -0
  71. package/dist/chunks/studio-6ep3js6b.js +9 -0
  72. package/dist/chunks/studio-6wkmf3wz.js +9 -0
  73. package/dist/chunks/studio-841rf3cg.js +5 -0
  74. package/dist/chunks/studio-8gmwgheg.js +5 -0
  75. package/dist/chunks/studio-8qm0ep50.js +5 -0
  76. package/dist/chunks/{studio-anyrgzvb.js → studio-90pq9km1.js} +4 -4
  77. package/dist/chunks/studio-924p1tm1.js +6 -0
  78. package/dist/chunks/{studio-v2bvmbjj.js → studio-a3g98wjr.js} +4 -4
  79. package/dist/chunks/studio-a3shpz9y.js +5 -0
  80. package/dist/chunks/studio-amsbaaar.js +6 -0
  81. package/dist/chunks/studio-at5spjbc.js +7 -0
  82. package/dist/chunks/studio-b2xv945e.js +5 -0
  83. package/dist/chunks/studio-bn5nkafw.js +5 -0
  84. package/dist/chunks/studio-bw6q5xjf.js +9 -0
  85. package/dist/chunks/studio-c7q0t9x1.js +5 -0
  86. package/dist/chunks/studio-camnhc96.js +6 -0
  87. package/dist/chunks/studio-cffqvnzd.js +5 -0
  88. package/dist/chunks/studio-d81xfh1g.js +5 -0
  89. package/dist/chunks/studio-dgz8d0c1.js +5 -0
  90. package/dist/chunks/studio-efvfrsf8.js +5 -0
  91. package/dist/chunks/studio-er30bpcx.js +5 -0
  92. package/dist/chunks/studio-ezscgr64.js +5 -0
  93. package/dist/chunks/studio-ffrrncvz.js +5 -0
  94. package/dist/chunks/studio-fpphgn8y.js +10 -0
  95. package/dist/chunks/studio-j1kvhdjk.js +4 -0
  96. package/dist/chunks/{studio-txjjzrsm.js → studio-j430n16g.js} +5 -5
  97. package/dist/chunks/studio-jjkg84nj.js +5 -0
  98. package/dist/chunks/studio-m0q32ars.js +4 -0
  99. package/dist/chunks/studio-m6bdst11.js +5 -0
  100. package/dist/chunks/studio-nv2cptd4.js +64 -0
  101. package/dist/chunks/studio-nwfrc98n.js +5 -0
  102. package/dist/chunks/studio-p1wgvp7r.js +5 -0
  103. package/dist/chunks/studio-pag2wncm.js +5 -0
  104. package/dist/chunks/studio-qvanvzfd.js +5 -0
  105. package/dist/chunks/studio-qwa64kt7.js +5 -0
  106. package/dist/chunks/studio-rk1zc4x3.js +928 -0
  107. package/dist/chunks/studio-se2r3ptc.js +5 -0
  108. package/dist/chunks/studio-sg2a0dh0.js +5 -0
  109. package/dist/chunks/studio-tjzjhe68.js +5 -0
  110. package/dist/chunks/{studio-0x3jyb8r.js → studio-tq0rtfwj.js} +4 -4
  111. package/dist/chunks/{studio-cpxkgjrj.js → studio-v0jzqdjm.js} +4 -4
  112. package/dist/chunks/studio-v2w7q8r1.js +7 -0
  113. package/dist/chunks/studio-v5vjq1h0.js +4 -0
  114. package/dist/chunks/studio-v8aga3vp.js +14 -0
  115. package/dist/chunks/studio-vfcdrfmv.js +5 -0
  116. package/dist/chunks/studio-vmfkgdjf.js +5 -0
  117. package/dist/chunks/studio-wt1816jj.js +5 -0
  118. package/dist/chunks/studio-wz73q5kq.js +4 -0
  119. package/dist/chunks/studio-y04qtxvp.js +7 -0
  120. package/dist/chunks/studio-y21g8zzg.js +5 -0
  121. package/dist/chunks/studio-y64hrt8p.js +12 -0
  122. package/dist/chunks/studio-ynn90f58.js +16 -0
  123. package/dist/chunks/studio-yxz682sx.js +5 -0
  124. package/dist/chunks/studio-zp7snvkq.js +5 -0
  125. package/dist/chunks/studio-zq4z6tm6.js +5 -0
  126. package/dist/chunks/swatch-group-ewh24n1f.js +4 -0
  127. package/dist/chunks/tabs-f5cw3tgp.js +4 -0
  128. package/dist/chunks/textfield-wewc8rq2.js +4 -0
  129. package/dist/chunks/toast-c9fn075p.js +4 -0
  130. package/dist/chunks/toast-host-ke5z4ng7.js +4 -0
  131. package/dist/chunks/{toolbar-2nnzqhrj.js → toolbar-44cm5cta.js} +3 -3
  132. package/dist/chunks/tooltip-5v8ngwj2.js +4 -0
  133. package/dist/chunks/tree-mdq3v5cw.js +4 -0
  134. package/dist/chunks/tsMode-sf49ee9x.js +14 -0
  135. package/dist/chunks/workspace-jtfahpee.js +4 -0
  136. package/dist/chunks/ws-client-nze0k6mv.js +4 -0
  137. package/dist/iframe-entry.js +16 -16
  138. package/dist/manifest.json +63 -63
  139. package/dist/studio.js +98 -98
  140. package/dist/workers/ts.worker.js +3 -3
  141. package/package.json +11 -11
  142. package/src/about/about-modal.ts +4 -3
  143. package/src/account/action-flow.ts +45 -38
  144. package/src/account-status.ts +7 -2
  145. package/src/browse/library-layouts.ts +8 -5
  146. package/src/browse/library-model.ts +18 -6
  147. package/src/browse/library-pane.ts +37 -21
  148. package/src/browse/library-preview.ts +14 -9
  149. package/src/browse/library-source.ts +1 -1
  150. package/src/canvas/asset-refs.ts +24 -9
  151. package/src/canvas/asset-resolve.ts +19 -23
  152. package/src/canvas/canvas-helpers.ts +7 -6
  153. package/src/canvas/canvas-live-render.ts +44 -53
  154. package/src/canvas/canvas-patcher.ts +30 -30
  155. package/src/canvas/canvas-perf.ts +11 -5
  156. package/src/canvas/canvas-render.ts +66 -42
  157. package/src/canvas/canvas-surface.ts +5 -3
  158. package/src/canvas/canvas-utils.ts +163 -64
  159. package/src/canvas/dialog-path.ts +9 -4
  160. package/src/canvas/dialog-state.ts +1 -2
  161. package/src/canvas/diff-marks.ts +9 -16
  162. package/src/canvas/diff-toolbar.ts +8 -7
  163. package/src/canvas/edit-width-drag.ts +4 -1
  164. package/src/canvas/edit-width.ts +1 -3
  165. package/src/canvas/iframe-channel.ts +27 -13
  166. package/src/canvas/iframe-drop.ts +13 -12
  167. package/src/canvas/iframe-editable-root.ts +29 -16
  168. package/src/canvas/iframe-entry.ts +80 -63
  169. package/src/canvas/iframe-eval.ts +73 -49
  170. package/src/canvas/iframe-host.ts +203 -118
  171. package/src/canvas/iframe-inline-edit.ts +69 -32
  172. package/src/canvas/iframe-insert.ts +5 -4
  173. package/src/canvas/iframe-interaction.ts +37 -26
  174. package/src/canvas/iframe-overlay.ts +1 -1
  175. package/src/canvas/iframe-patch.ts +18 -15
  176. package/src/canvas/iframe-position.ts +12 -6
  177. package/src/canvas/iframe-protocol.ts +15 -16
  178. package/src/canvas/iframe-render.ts +41 -36
  179. package/src/canvas/iframe-slash.ts +24 -11
  180. package/src/canvas/iframe-subtree.ts +6 -2
  181. package/src/canvas/path-mapping.ts +19 -12
  182. package/src/canvas/popover-path.ts +7 -3
  183. package/src/canvas/popover-state.ts +1 -2
  184. package/src/canvas/serialize-scope.ts +13 -5
  185. package/src/canvas/stage-scrollbar.ts +2 -1
  186. package/src/canvas/surface-registry.ts +21 -3
  187. package/src/collab/collab-commands.ts +7 -2
  188. package/src/collab/collab-session.ts +84 -45
  189. package/src/collab/collab-state.ts +4 -3
  190. package/src/collab/monaco-binding.ts +16 -13
  191. package/src/collab/monaco-cursors.ts +5 -2
  192. package/src/commands/budget.ts +3 -3
  193. package/src/commands/command-args.ts +103 -71
  194. package/src/commands/context.ts +22 -20
  195. package/src/commands/defaults.ts +4 -1
  196. package/src/commands/keymap.ts +47 -43
  197. package/src/commands/levels.ts +3 -3
  198. package/src/commands/live-context.ts +10 -8
  199. package/src/commands/reference.ts +2 -1
  200. package/src/commands/registry.ts +12 -10
  201. package/src/commands/run-reported.ts +15 -10
  202. package/src/component-props.ts +46 -30
  203. package/src/content/collection-match.ts +5 -4
  204. package/src/content/draft-state.ts +4 -3
  205. package/src/content/entry-commands.ts +3 -2
  206. package/src/content/entry-editor.ts +29 -17
  207. package/src/content/entry-fields.ts +12 -7
  208. package/src/content/entry-model.ts +21 -12
  209. package/src/editor/canvas-context-menu.ts +1 -2
  210. package/src/editor/canvas-slash-bridge.ts +3 -6
  211. package/src/editor/content-slice.ts +16 -14
  212. package/src/editor/context-menu.ts +35 -22
  213. package/src/editor/convert-targets.ts +30 -35
  214. package/src/editor/convert-to-component.ts +11 -5
  215. package/src/editor/convert-to-repeater.ts +34 -22
  216. package/src/editor/editable-tags.ts +17 -2
  217. package/src/editor/file-drop-action.ts +21 -22
  218. package/src/editor/inline-edit-apply.ts +35 -17
  219. package/src/editor/inline-edit.ts +66 -50
  220. package/src/editor/inline-format.ts +59 -56
  221. package/src/editor/inline-link.ts +40 -15
  222. package/src/editor/insert-zone-action.ts +1 -1
  223. package/src/editor/merge-tags.ts +58 -19
  224. package/src/editor/repeater-scope.ts +39 -28
  225. package/src/editor/shortcuts.ts +87 -47
  226. package/src/editor/slash-menu.ts +1 -6
  227. package/src/files/asset-versions.ts +4 -4
  228. package/src/files/components.ts +15 -10
  229. package/src/files/elements.ts +5 -6
  230. package/src/files/file-ops.ts +77 -36
  231. package/src/files/files.ts +90 -95
  232. package/src/files/media-meta.ts +2 -1
  233. package/src/files/media-paths.ts +6 -1
  234. package/src/files/serialize-document.ts +2 -2
  235. package/src/format/constraints.ts +1 -1
  236. package/src/format/convert-file.ts +27 -13
  237. package/src/format/format-choices.ts +2 -1
  238. package/src/format/format-host.ts +76 -50
  239. package/src/github/github-auth-status.ts +27 -3
  240. package/src/github/github-auth.ts +19 -9
  241. package/src/github/github-publish.ts +24 -20
  242. package/src/grid/cell-editors.ts +46 -31
  243. package/src/grid/cell-popovers.ts +5 -3
  244. package/src/grid/edit-buffer.ts +10 -9
  245. package/src/grid/grid-controller.ts +20 -22
  246. package/src/grid/grid-layout.ts +21 -5
  247. package/src/grid/grid-open.ts +3 -6
  248. package/src/grid/grid-panel.ts +11 -4
  249. package/src/grid/grid-source.ts +8 -8
  250. package/src/grid/grid-view.ts +14 -17
  251. package/src/grid/redirects-grid.ts +14 -5
  252. package/src/grid/redirects.ts +16 -14
  253. package/src/grid/schema-columns.ts +25 -19
  254. package/src/grid/sources/connector-source.ts +47 -20
  255. package/src/grid/sources/content-source.ts +25 -24
  256. package/src/grid/sources/csv-file-source.ts +2 -2
  257. package/src/grid/tabulator-tables.d.ts +55 -34
  258. package/src/hosting/stage.ts +7 -7
  259. package/src/i18n/i18n-commands.ts +1 -2
  260. package/src/media/media-pane.ts +4 -1
  261. package/src/new-project/add-repo-modal.ts +20 -19
  262. package/src/new-project/import-tab.ts +10 -14
  263. package/src/new-project/location-fields.ts +2 -1
  264. package/src/new-project/new-project-modal.ts +12 -9
  265. package/src/packages/jxsuite-update.ts +4 -3
  266. package/src/packages/pull-package-sync.ts +26 -25
  267. package/src/page-params.ts +97 -68
  268. package/src/panels/activity-panel.ts +17 -9
  269. package/src/panels/ai-chat/attached-context.ts +13 -7
  270. package/src/panels/ai-chat/chat-view.ts +80 -73
  271. package/src/panels/ai-chat/composer.ts +30 -33
  272. package/src/panels/ai-chat/sessions-view.ts +1 -2
  273. package/src/panels/ai-panel.ts +23 -20
  274. package/src/panels/block-action-bar.ts +46 -35
  275. package/src/panels/bottom-dock.ts +5 -3
  276. package/src/panels/canvas-dnd-bridge.ts +31 -24
  277. package/src/panels/data-explorer.ts +62 -25
  278. package/src/panels/data-grid.ts +14 -11
  279. package/src/panels/dnd.ts +108 -118
  280. package/src/panels/editors.ts +55 -22
  281. package/src/panels/elements-panel.ts +10 -3
  282. package/src/panels/events-panel.ts +84 -69
  283. package/src/panels/formula-workspace.ts +76 -51
  284. package/src/panels/frontmatter-fields.ts +24 -19
  285. package/src/panels/frontmatter-panel.ts +44 -34
  286. package/src/panels/git-diff-open.ts +4 -4
  287. package/src/panels/git-panel.ts +49 -61
  288. package/src/panels/head-panel.ts +131 -111
  289. package/src/panels/i18n-panel.ts +10 -3
  290. package/src/panels/imports-panel.ts +23 -47
  291. package/src/panels/jump-bar.ts +48 -29
  292. package/src/panels/layers-panel.ts +97 -74
  293. package/src/panels/left-panel.ts +3 -3
  294. package/src/panels/pane-context.ts +31 -22
  295. package/src/panels/pane-grid.ts +49 -20
  296. package/src/panels/panel-registry.ts +22 -37
  297. package/src/panels/properties-panel.ts +175 -121
  298. package/src/panels/quick-search.ts +53 -31
  299. package/src/panels/right-panel.ts +3 -3
  300. package/src/panels/seo-modal.ts +13 -17
  301. package/src/panels/settings-menu.ts +15 -15
  302. package/src/panels/signals-panel.ts +153 -131
  303. package/src/panels/statement-editor.ts +230 -140
  304. package/src/panels/style-panel.ts +254 -216
  305. package/src/panels/style-utils.ts +114 -51
  306. package/src/panels/stylebook-doc.ts +57 -54
  307. package/src/panels/stylebook-layers-panel.ts +9 -9
  308. package/src/panels/stylebook-panel.ts +13 -17
  309. package/src/panels/tab-drop.ts +27 -11
  310. package/src/panels/tab-strip.ts +36 -26
  311. package/src/platform-errors.ts +57 -43
  312. package/src/platform.ts +58 -30
  313. package/src/platforms/cloud.ts +345 -175
  314. package/src/platforms/default-platform.ts +10 -4
  315. package/src/platforms/devserver.ts +174 -127
  316. package/src/platforms/read-batcher.ts +16 -8
  317. package/src/project-list.ts +2 -1
  318. package/src/publish/deploy-checklist.ts +8 -2
  319. package/src/publish/pages-service.ts +28 -13
  320. package/src/publish/publish-commands.ts +5 -4
  321. package/src/publish/publish-panel.ts +10 -6
  322. package/src/recent-projects.ts +15 -8
  323. package/src/resize-edges.ts +26 -36
  324. package/src/services/a11y-report.ts +26 -19
  325. package/src/services/agent-seed.ts +23 -11
  326. package/src/services/ai-ask.ts +9 -12
  327. package/src/services/ai-command-tools.ts +68 -62
  328. package/src/services/ai-import-tools.ts +80 -67
  329. package/src/services/ai-models.ts +17 -13
  330. package/src/services/ai-project-tools.ts +68 -32
  331. package/src/services/ai-session-store.ts +19 -10
  332. package/src/services/ai-system-prompt.ts +46 -20
  333. package/src/services/ai-tools.ts +71 -27
  334. package/src/services/ai-write-report.ts +20 -12
  335. package/src/services/ai-writes.ts +4 -4
  336. package/src/services/automation.ts +58 -31
  337. package/src/services/cem-export.ts +149 -58
  338. package/src/services/clock.ts +6 -1
  339. package/src/services/code-services.ts +37 -31
  340. package/src/services/context-manager.ts +14 -10
  341. package/src/services/context-resolver.ts +20 -8
  342. package/src/services/data-service.ts +19 -15
  343. package/src/services/directory-picker.ts +18 -12
  344. package/src/services/document-assistant.ts +39 -19
  345. package/src/services/gated-registry.ts +10 -6
  346. package/src/services/harness/chat-reducer.ts +23 -1
  347. package/src/services/import-client.ts +91 -38
  348. package/src/services/import-seed.ts +8 -2
  349. package/src/services/jx-validate.ts +28 -31
  350. package/src/services/live-preview.ts +0 -0
  351. package/src/services/live-surfaces.ts +6 -3
  352. package/src/services/model-uri.ts +10 -2
  353. package/src/services/module-preloads.ts +12 -8
  354. package/src/services/monaco-buffer.ts +43 -24
  355. package/src/services/monaco-lazy.ts +7 -8
  356. package/src/services/monaco-setup.ts +23 -16
  357. package/src/services/notify.ts +44 -17
  358. package/src/services/popover-report.ts +25 -10
  359. package/src/services/preview-eval.ts +20 -8
  360. package/src/services/profile.ts +13 -6
  361. package/src/services/project-path.ts +13 -10
  362. package/src/services/references.ts +0 -0
  363. package/src/services/render-critic.ts +8 -7
  364. package/src/services/settings/kernel.ts +13 -4
  365. package/src/services/settings/write-queue.ts +9 -9
  366. package/src/services/token-lint.ts +12 -10
  367. package/src/services/tool-executor.ts +17 -5
  368. package/src/services/tool-outcomes.ts +44 -24
  369. package/src/services/trusted-types.ts +24 -7
  370. package/src/settings/contexts-section.ts +11 -8
  371. package/src/settings/contributed-section.ts +79 -60
  372. package/src/settings/css-vars-editor.ts +37 -16
  373. package/src/settings/defs-editor.ts +38 -35
  374. package/src/settings/extension-rows.ts +16 -8
  375. package/src/settings/extension-sections.ts +23 -13
  376. package/src/settings/extensions-section.ts +4 -1
  377. package/src/settings/general-settings.ts +11 -8
  378. package/src/settings/locales-section.ts +20 -12
  379. package/src/settings/preferences-dialog.ts +9 -6
  380. package/src/settings/preferences-keymap.ts +7 -5
  381. package/src/settings/preferences-sections.ts +11 -5
  382. package/src/settings/project-sections.ts +1 -1
  383. package/src/settings/schema-field-ui.ts +9 -0
  384. package/src/settings/settings-document.ts +5 -5
  385. package/src/shell/tree.ts +6 -5
  386. package/src/shell.ts +104 -81
  387. package/src/site-context.ts +37 -22
  388. package/src/state.ts +41 -49
  389. package/src/store.ts +54 -34
  390. package/src/studio.ts +39 -77
  391. package/src/style/live-preview.ts +1 -1
  392. package/src/style/project-styles.ts +6 -7
  393. package/src/style/token-ref.ts +5 -4
  394. package/src/surfaces/about.ts +18 -19
  395. package/src/surfaces/add-repo.ts +17 -19
  396. package/src/surfaces/ai-chat.ts +31 -36
  397. package/src/surfaces/ai-credentials-form.ts +6 -16
  398. package/src/surfaces/ai-managed-connect.ts +3 -4
  399. package/src/surfaces/ai-model-picker.ts +3 -5
  400. package/src/surfaces/block-action-bar.ts +22 -11
  401. package/src/surfaces/boot-failure.ts +4 -5
  402. package/src/surfaces/bottom-dock.ts +9 -18
  403. package/src/surfaces/canvas-stage.ts +12 -11
  404. package/src/surfaces/cf-account-picker.ts +17 -18
  405. package/src/surfaces/commandbar.ts +14 -9
  406. package/src/surfaces/convert-repeater.ts +17 -19
  407. package/src/surfaces/data-actions.ts +9 -7
  408. package/src/surfaces/dialog.ts +26 -28
  409. package/src/surfaces/diff-toolbar.ts +9 -7
  410. package/src/surfaces/doc-header.ts +10 -19
  411. package/src/surfaces/empty-state.ts +7 -10
  412. package/src/surfaces/entry-editor.ts +14 -11
  413. package/src/surfaces/expression-editor.ts +11 -25
  414. package/src/surfaces/files-panel.ts +27 -14
  415. package/src/surfaces/formula-palette.ts +4 -5
  416. package/src/surfaces/git-panel.ts +7 -15
  417. package/src/surfaces/github-auth.ts +16 -20
  418. package/src/surfaces/github-publish.ts +17 -22
  419. package/src/surfaces/grid-cell.ts +30 -31
  420. package/src/surfaces/grid-open.ts +10 -14
  421. package/src/surfaces/grid-panel.ts +13 -9
  422. package/src/surfaces/grid-replace.ts +13 -13
  423. package/src/surfaces/grid-views.ts +15 -18
  424. package/src/surfaces/inspector-dock.ts +13 -12
  425. package/src/surfaces/jump-bar.ts +5 -6
  426. package/src/surfaces/jxsuite-update.ts +16 -22
  427. package/src/surfaces/library-pane.ts +25 -20
  428. package/src/surfaces/logic-panel.ts +17 -30
  429. package/src/surfaces/logic-workspace.ts +13 -15
  430. package/src/surfaces/media-browser.ts +11 -10
  431. package/src/surfaces/media-field.ts +4 -5
  432. package/src/surfaces/media-pane.ts +8 -7
  433. package/src/surfaces/menu.ts +29 -23
  434. package/src/surfaces/navigator-dock.ts +11 -12
  435. package/src/surfaces/new-project.ts +27 -26
  436. package/src/surfaces/pane-context.ts +20 -25
  437. package/src/surfaces/pane-grid.ts +15 -10
  438. package/src/surfaces/panel-activity.ts +5 -6
  439. package/src/surfaces/panel-data.ts +3 -4
  440. package/src/surfaces/panel-deploy-checklist.ts +5 -6
  441. package/src/surfaces/panel-elements.ts +5 -7
  442. package/src/surfaces/panel-i18n.ts +5 -7
  443. package/src/surfaces/panel-imports.ts +6 -13
  444. package/src/surfaces/panel-outline.ts +25 -19
  445. package/src/surfaces/panel-page.ts +11 -18
  446. package/src/surfaces/panel-problems.ts +5 -7
  447. package/src/surfaces/panel-signals.ts +20 -34
  448. package/src/surfaces/panel-stylebook-layers.ts +5 -8
  449. package/src/surfaces/preferences.ts +21 -11
  450. package/src/surfaces/progress-modal.ts +15 -9
  451. package/src/surfaces/properties-panel.json +1 -1
  452. package/src/surfaces/properties-panel.ts +20 -42
  453. package/src/surfaces/publish.ts +18 -18
  454. package/src/surfaces/push-plan.ts +7 -8
  455. package/src/surfaces/rail.json +126 -73
  456. package/src/surfaces/rail.ts +38 -12
  457. package/src/surfaces/reference-field.ts +11 -15
  458. package/src/surfaces/schema-builder.ts +16 -22
  459. package/src/surfaces/schema-form.ts +15 -25
  460. package/src/surfaces/secret-field.ts +9 -6
  461. package/src/surfaces/seo.ts +21 -15
  462. package/src/surfaces/settings-contexts.ts +9 -7
  463. package/src/surfaces/settings-contributed.ts +14 -10
  464. package/src/surfaces/settings-css-vars.ts +5 -12
  465. package/src/surfaces/settings-defs.json +2 -2
  466. package/src/surfaces/settings-defs.ts +17 -21
  467. package/src/surfaces/settings-deploy.ts +8 -15
  468. package/src/surfaces/settings-extensions.ts +5 -6
  469. package/src/surfaces/settings-head.ts +33 -39
  470. package/src/surfaces/settings-locales.ts +8 -20
  471. package/src/surfaces/settings-overview.ts +5 -6
  472. package/src/surfaces/settings-packages.ts +8 -7
  473. package/src/surfaces/settings-pane.ts +9 -18
  474. package/src/surfaces/settings-rawjson.ts +5 -6
  475. package/src/surfaces/shell.ts +1 -2
  476. package/src/surfaces/slash-menu.ts +19 -9
  477. package/src/surfaces/statements.ts +13 -18
  478. package/src/surfaces/statusbar.ts +17 -14
  479. package/src/surfaces/style-panel.ts +18 -31
  480. package/src/surfaces/stylebook-chrome.ts +3 -5
  481. package/src/surfaces/tab-strip.ts +14 -13
  482. package/src/surfaces/target-line.ts +6 -7
  483. package/src/surfaces/welcome.ts +5 -7
  484. package/src/tabs/patch-ops.ts +4 -3
  485. package/src/tabs/project-config.ts +32 -21
  486. package/src/tabs/selection.ts +36 -8
  487. package/src/tabs/tab.ts +52 -41
  488. package/src/tabs/transact.ts +98 -53
  489. package/src/tabs/typing.ts +31 -0
  490. package/src/types.ts +32 -17
  491. package/src/ui/ai-credentials-form.ts +10 -13
  492. package/src/ui/ai-model-picker.ts +3 -3
  493. package/src/ui/cf-account-picker.ts +7 -9
  494. package/src/ui/color-selector.ts +9 -5
  495. package/src/ui/dynamic-slot.ts +7 -8
  496. package/src/ui/expression-editor.ts +112 -105
  497. package/src/ui/form-controls.ts +57 -48
  498. package/src/ui/formula-catalog.ts +239 -230
  499. package/src/ui/formula-chips.ts +33 -18
  500. package/src/ui/layers.ts +44 -31
  501. package/src/ui/media-picker.ts +18 -9
  502. package/src/ui/popover-surface.ts +20 -12
  503. package/src/ui/progress-modal.ts +13 -8
  504. package/src/ui/regions.ts +7 -6
  505. package/src/ui/schema-form.ts +113 -70
  506. package/src/ui/surface.ts +71 -8
  507. package/src/ui/timing.ts +9 -0
  508. package/src/ui/value-source.ts +44 -31
  509. package/src/ui/virtual-window.ts +3 -2
  510. package/src/utils/base64.ts +3 -1
  511. package/src/utils/edit-display.ts +103 -74
  512. package/src/utils/element-selectors.ts +3 -2
  513. package/src/utils/google-fonts.ts +15 -14
  514. package/src/utils/inherited-style.ts +18 -20
  515. package/src/utils/link-target.ts +1 -1
  516. package/src/utils/preview-format.ts +25 -3
  517. package/src/utils/strip-events.ts +49 -22
  518. package/src/utils/studio-utils.ts +29 -14
  519. package/src/view.ts +2 -3
  520. package/src/workspace/pane-derive.ts +10 -12
  521. package/src/workspace/session.ts +53 -43
  522. package/src/workspace/workspace.ts +47 -36
  523. package/dist/chunks/2020-nkxms0ay.js +0 -4
  524. package/dist/chunks/adapter-m948ab5f.js +0 -4
  525. package/dist/chunks/cf-account-picker-n8hr38v7.js +0 -4
  526. package/dist/chunks/cf-settings-356xdtne.js +0 -4
  527. package/dist/chunks/color-area-jqhna8zy.js +0 -4
  528. package/dist/chunks/color-field-embq5ctg.js +0 -4
  529. package/dist/chunks/color-fpezvnkt.js +0 -4
  530. package/dist/chunks/color-slider-1qmw7wqy.js +0 -4
  531. package/dist/chunks/combobox-773hdzyj.js +0 -4
  532. package/dist/chunks/components-yk3t844e.js +0 -4
  533. package/dist/chunks/content-source-bawmyc09.js +0 -4
  534. package/dist/chunks/convert-to-repeater-7wns8kf1.js +0 -4
  535. package/dist/chunks/dialog-mtm9fq5t.js +0 -4
  536. package/dist/chunks/editor-6sc8nacq.js +0 -4
  537. package/dist/chunks/entry-commands-8ay9fh81.js +0 -4
  538. package/dist/chunks/extension-sections-na7rj3nr.js +0 -4
  539. package/dist/chunks/file-ops-gye0qw56.js +0 -4
  540. package/dist/chunks/files-dmc2xvcq.js +0 -4
  541. package/dist/chunks/format-host-t76b53f8.js +0 -4
  542. package/dist/chunks/fs-events-cg4tpz06.js +0 -4
  543. package/dist/chunks/git-panel-yef7bshy.js +0 -4
  544. package/dist/chunks/grid-view-7tt4bxw1.js +0 -51
  545. package/dist/chunks/icons-qbh8akb1.js +0 -4
  546. package/dist/chunks/iframe-entry-f7mqjwpm.js +0 -5
  547. package/dist/chunks/iframe-entry-haw7jkvz.js +0 -5
  548. package/dist/chunks/iframe-entry-z6qrytv3.js +0 -5
  549. package/dist/chunks/iframe-host-tmz30gfp.js +0 -4
  550. package/dist/chunks/index-nag78a9h.js +0 -4
  551. package/dist/chunks/jsonMode-zhwsprqk.js +0 -13
  552. package/dist/chunks/jx-validate-3gbp5nkn.js +0 -4
  553. package/dist/chunks/layers-fvz99859.js +0 -4
  554. package/dist/chunks/layers-panel-gchmbf9p.js +0 -4
  555. package/dist/chunks/listbox-s8fkmnq8.js +0 -4
  556. package/dist/chunks/lit-html-9agdspkt.js +0 -4
  557. package/dist/chunks/media-picker-rhjvyy00.js +0 -4
  558. package/dist/chunks/menu-2e4y9j7b.js +0 -4
  559. package/dist/chunks/menu-37d07z9m.js +0 -4
  560. package/dist/chunks/monaco-binding-2jnhjjvr.js +0 -4
  561. package/dist/chunks/monaco-buffer-rp21359g.js +0 -4
  562. package/dist/chunks/monaco-setup-vhh7gayr.js +0 -4
  563. package/dist/chunks/notify-h3www560.js +0 -4
  564. package/dist/chunks/number-field-gw7sq8rn.js +0 -4
  565. package/dist/chunks/parse-897fvqah.js +0 -4
  566. package/dist/chunks/platform-hz34wcd7.js +0 -4
  567. package/dist/chunks/popover-8htra4er.js +0 -4
  568. package/dist/chunks/publish-panel-exsmjzyj.js +0 -4
  569. package/dist/chunks/quick-search-pgaqeh0m.js +0 -4
  570. package/dist/chunks/references-2cgdxnb8.js +0 -4
  571. package/dist/chunks/right-panel-jf856w5w.js +0 -4
  572. package/dist/chunks/section-registry-jnf8r5gy.js +0 -4
  573. package/dist/chunks/select-n3v7gwas.js +0 -4
  574. package/dist/chunks/split-pff8f3ze.js +0 -4
  575. package/dist/chunks/studio-0f55h9ye.js +0 -5
  576. package/dist/chunks/studio-0sqdhnew.js +0 -12
  577. package/dist/chunks/studio-19x1c75w.js +0 -5
  578. package/dist/chunks/studio-2sqcndak.js +0 -5
  579. package/dist/chunks/studio-3aey7dd3.js +0 -5
  580. package/dist/chunks/studio-3bpdkq2s.js +0 -5
  581. package/dist/chunks/studio-47y6fbpf.js +0 -5
  582. package/dist/chunks/studio-4m3826v2.js +0 -5
  583. package/dist/chunks/studio-4nx2dj1g.js +0 -4
  584. package/dist/chunks/studio-4xv5s47r.js +0 -9
  585. package/dist/chunks/studio-5g4t8v6w.js +0 -5
  586. package/dist/chunks/studio-5py436sf.js +0 -5
  587. package/dist/chunks/studio-77kt594t.js +0 -5
  588. package/dist/chunks/studio-8f87n763.js +0 -10
  589. package/dist/chunks/studio-8mb00b84.js +0 -5
  590. package/dist/chunks/studio-8p51gq2h.js +0 -6
  591. package/dist/chunks/studio-954ds834.js +0 -5
  592. package/dist/chunks/studio-9ft45c83.js +0 -9
  593. package/dist/chunks/studio-a2138x5k.js +0 -7
  594. package/dist/chunks/studio-a9yzstqj.js +0 -5
  595. package/dist/chunks/studio-acdksxx6.js +0 -5
  596. package/dist/chunks/studio-ar8jcf2y.js +0 -5
  597. package/dist/chunks/studio-bmn4mn9j.js +0 -7
  598. package/dist/chunks/studio-e7xxa0sj.js +0 -5
  599. package/dist/chunks/studio-ecaz25vk.js +0 -5
  600. package/dist/chunks/studio-ery42sqr.js +0 -4
  601. package/dist/chunks/studio-fzdywr6p.js +0 -9
  602. package/dist/chunks/studio-g5fmf0c1.js +0 -5
  603. package/dist/chunks/studio-g7nse7zb.js +0 -5
  604. package/dist/chunks/studio-geq1ea6k.js +0 -14
  605. package/dist/chunks/studio-ghkb32r8.js +0 -5
  606. package/dist/chunks/studio-ghrhy2y7.js +0 -5
  607. package/dist/chunks/studio-grawhey1.js +0 -5
  608. package/dist/chunks/studio-h0xgswew.js +0 -5
  609. package/dist/chunks/studio-h9c4p2tx.js +0 -5
  610. package/dist/chunks/studio-jyzj5cxs.js +0 -5
  611. package/dist/chunks/studio-mgx8yhnz.js +0 -64
  612. package/dist/chunks/studio-mpb04y1d.js +0 -6
  613. package/dist/chunks/studio-n17mty64.js +0 -5
  614. package/dist/chunks/studio-nwh2eqsk.js +0 -6
  615. package/dist/chunks/studio-q1h883bt.js +0 -16
  616. package/dist/chunks/studio-q4tv82h7.js +0 -9
  617. package/dist/chunks/studio-qpqa7vk3.js +0 -5
  618. package/dist/chunks/studio-qqz8e5gk.js +0 -5
  619. package/dist/chunks/studio-qvasen3f.js +0 -5
  620. package/dist/chunks/studio-rggdb3hm.js +0 -5
  621. package/dist/chunks/studio-sghy936h.js +0 -4
  622. package/dist/chunks/studio-skprc6ef.js +0 -5
  623. package/dist/chunks/studio-tt2nactf.js +0 -5
  624. package/dist/chunks/studio-tyasmc39.js +0 -5
  625. package/dist/chunks/studio-vk9ezads.js +0 -5
  626. package/dist/chunks/studio-vzacdfsc.js +0 -4
  627. package/dist/chunks/studio-w4c0xmrw.js +0 -5
  628. package/dist/chunks/studio-wfjqhhbk.js +0 -5
  629. package/dist/chunks/studio-wgh5kxpj.js +0 -5
  630. package/dist/chunks/studio-xasj0796.js +0 -5
  631. package/dist/chunks/studio-y78s8r2n.js +0 -5
  632. package/dist/chunks/studio-z8w183sh.js +0 -5
  633. package/dist/chunks/studio-zscd9ty4.js +0 -928
  634. package/dist/chunks/studio-zxp13sss.js +0 -7
  635. package/dist/chunks/studio-zygnmm01.js +0 -5
  636. package/dist/chunks/swatch-group-8qh9a3bm.js +0 -4
  637. package/dist/chunks/tabs-jwthg40w.js +0 -4
  638. package/dist/chunks/textfield-spy3hc77.js +0 -4
  639. package/dist/chunks/toast-4d35zd64.js +0 -4
  640. package/dist/chunks/toast-host-8sjmfed3.js +0 -4
  641. package/dist/chunks/tooltip-fd6g9xy3.js +0 -4
  642. package/dist/chunks/tree-h19v1jfz.js +0 -4
  643. package/dist/chunks/tsMode-gr0m4dzr.js +0 -14
  644. package/dist/chunks/workspace-m15qtcqp.js +0 -4
  645. package/dist/chunks/ws-client-nf61frr1.js +0 -4
@@ -33,13 +33,12 @@
33
33
  import { reactive } from "../reactivity";
34
34
  import { mountSurface, registerSurface } from "../ui/surface";
35
35
  import { overlayRegion, REGION_ATTR } from "../ui/regions";
36
- import { close as closeDialog, showModal } from "@jxsuite/ui/behaviors/dialog";
36
+ import { close, showModal } from "@jxsuite/ui/behaviors/dialog";
37
37
  import { whenReady } from "./dialog";
38
38
  import seoDoc from "./seo.json";
39
39
  import type { SurfaceHandle } from "../ui/surface";
40
- import type { JxDocument } from "@jxsuite/schema/types";
41
40
 
42
- registerSurface("seo", seoDoc as unknown as JxDocument);
41
+ registerSurface("seo", seoDoc);
43
42
 
44
43
  /** How a field's provenance is drawn — §6.7's vocabulary, reduced to three shapes and an absence. */
45
44
  export type SeoChipKind = "none" | "dot" | "static" | "link";
@@ -65,8 +64,9 @@ export interface SeoFieldView {
65
64
  chipTitle: string;
66
65
  }
67
66
 
68
- /** One named warning. A list, never a total. */
67
+ /** A named thing that is wrong, or absent. Never summed: the list IS the report. */
69
68
  export interface SeoWarningView {
69
+ /** Stable id, so a test and a shot name the same warning. */
70
70
  id: string;
71
71
  /** The head key it is about, so the row can carry it as code. */
72
72
  field: string;
@@ -154,17 +154,17 @@ export interface SeoSurfaceHandle {
154
154
  type LineState = "text" | "unset";
155
155
 
156
156
  /** One field row with the flags the document branches on. */
157
- interface SeoFieldRow extends SeoFieldView, Record<string, unknown> {
157
+ interface SeoFieldRow extends SeoFieldView {
158
158
  valueState: LineState;
159
159
  }
160
160
 
161
161
  /** One editable row with the flags the document branches on. */
162
- interface SeoEditRow extends SeoEditRowView, Record<string, unknown> {
162
+ interface SeoEditRow extends SeoEditRowView {
163
163
  hasThumb: boolean;
164
164
  }
165
165
 
166
166
  /** One group with its rows already flagged. */
167
- interface SeoGroupRow extends Record<string, unknown> {
167
+ interface SeoGroupRow {
168
168
  key: string;
169
169
  title: string;
170
170
  note: string;
@@ -196,12 +196,12 @@ interface SeoFlags {
196
196
  groups: SeoGroupRow[];
197
197
  }
198
198
 
199
- interface SeoScope extends Record<string, unknown>, SeoFlags {
199
+ interface SeoScope extends SeoFlags {
200
200
  documentLabel: string;
201
201
  edit: (key: string, value: string) => void;
202
202
  commit: (key: string, value: string) => void;
203
203
  upload: (key: string) => void;
204
- browse: (key: string, anchor: unknown) => void;
204
+ browse: (key: string, anchor: EventTarget | null) => void;
205
205
  openDonor: (key: string) => void;
206
206
  closed: () => void;
207
207
  }
@@ -268,9 +268,9 @@ export function openSeoSurface(options: SeoSurfaceOptions): SeoSurfaceHandle {
268
268
  options.onClosed();
269
269
  };
270
270
 
271
- const scope = reactive({
271
+ const scope: SeoScope = reactive<SeoScope>({
272
272
  ...derive(options.view),
273
- browse: (key: string, anchor: unknown) => {
273
+ browse: (key: string, anchor: EventTarget | null) => {
274
274
  if (anchor instanceof HTMLElement) {
275
275
  options.onBrowse(key, anchor);
276
276
  }
@@ -288,18 +288,24 @@ export function openSeoSurface(options: SeoSurfaceOptions): SeoSurfaceHandle {
288
288
  upload: (key: string) => {
289
289
  options.onUpload(key);
290
290
  },
291
- }) as SeoScope;
291
+ });
292
292
 
293
+ /* Read through a call, not the bare binding: `close()` can run while the mount is awaiting the
294
+ element, and a direct `closed` test after that `await` would be narrowed to the value the test
295
+ before it saw. */
296
+ const isClosed = (): boolean => closed;
293
297
  let mounted: SurfaceHandle | null = null;
294
298
  const ready = mountSurface("seo", scope, slot).then(async (surface) => {
295
299
  mounted = surface;
300
+ /* SAFETY: `seo.json`'s root definition carries `tagName: "jx-dialog"`, so the runtime mounts an
301
+ HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
296
302
  const element = surface.root as HTMLElement;
297
- if (closed) {
303
+ if (isClosed()) {
298
304
  surface.dispose();
299
305
  return element;
300
306
  }
301
307
  await whenReady(element);
302
- if (closed) {
308
+ if (isClosed()) {
303
309
  return element;
304
310
  }
305
311
  const box = element.querySelector<HTMLElement>('dialog[part="dialog"]') ?? element;
@@ -317,7 +323,7 @@ export function openSeoSurface(options: SeoSurfaceOptions): SeoSurfaceHandle {
317
323
  const element = mounted?.root;
318
324
  if (element instanceof HTMLElement) {
319
325
  // The platform's close first, so focus goes back where it came from; then the document.
320
- closeDialog(element);
326
+ close(element);
321
327
  }
322
328
  // A mount that has not landed yet is disposed by `ready` when it does — `finish` tells it so.
323
329
  mounted?.dispose();
@@ -22,10 +22,9 @@ import { reactive } from "../reactivity";
22
22
  import { mountSurface, registerSurface } from "../ui/surface";
23
23
  import contextsDoc from "./settings-contexts.json";
24
24
 
25
- import type { JxDocument } from "@jxsuite/schema/types";
26
25
  import type { SurfaceHandle } from "../ui/surface";
27
26
 
28
- registerSurface("settings-contexts", contextsDoc as unknown as JxDocument);
27
+ registerSurface("settings-contexts", contextsDoc);
29
28
 
30
29
  /** One `$media` row, as the document draws it. */
31
30
  export interface ContextRowView {
@@ -111,7 +110,7 @@ export interface ContextsSurfaceHandle {
111
110
  * would be a second place to get it wrong. The refusal lines need none — `invalid` already says
112
111
  * which control the message belongs to.
113
112
  */
114
- interface ContextsScope extends Record<string, unknown>, ContextsView, ContextsActions {
113
+ interface ContextsScope extends ContextsView, ContextsActions {
115
114
  hasSectionError: boolean;
116
115
  hasNotice: boolean;
117
116
  }
@@ -141,7 +140,7 @@ export function mountContextsSurface(
141
140
  actions: ContextsActions,
142
141
  ): ContextsSurfaceHandle {
143
142
  host.textContent = "";
144
- const scope = reactive<ContextsScope>({
143
+ const scope: ContextsScope = reactive<ContextsScope>({
145
144
  ...emptyView(),
146
145
  add: actions.add,
147
146
  hasNotice: false,
@@ -151,17 +150,20 @@ export function mountContextsSurface(
151
150
  setBase: actions.setBase,
152
151
  setQuery: actions.setQuery,
153
152
  setScheme: actions.setScheme,
154
- }) as ContextsScope;
153
+ });
155
154
 
156
155
  let mounted: SurfaceHandle | null = null;
157
156
  let disposed = false;
158
157
  const ready = mountSurface("settings-contexts", scope, host).then((surface) => {
158
+ /* SAFETY: `settings-contexts.json`'s root definition carries `tagName: "div"`, so the runtime
159
+ mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
160
+ const root = surface.root as HTMLElement;
159
161
  if (disposed) {
160
162
  surface.dispose();
161
- return surface.root as HTMLElement;
163
+ return root;
162
164
  }
163
165
  mounted = surface;
164
- return surface.root as HTMLElement;
166
+ return root;
165
167
  });
166
168
 
167
169
  return {
@@ -26,14 +26,15 @@
26
26
  * @docs studio/projects/settings
27
27
  */
28
28
 
29
+ import { isString } from "@jxsuite/schema/guards";
29
30
  import { reactive } from "../reactivity";
30
31
  import { mountSurface, registerSurface } from "../ui/surface";
31
32
  import contributedDoc from "./settings-contributed.json";
32
33
 
33
- import type { JxDocument } from "@jxsuite/schema/types";
34
34
  import type { SurfaceHandle } from "../ui/surface";
35
+ import type { JxElement } from "@jxsuite/schema/types";
35
36
 
36
- registerSurface("settings-contributed", contributedDoc as unknown as JxDocument);
37
+ registerSurface("settings-contributed", contributedDoc);
37
38
 
38
39
  /** One entry key in a map-layout section's left column. */
39
40
  export interface ContributedEntryView {
@@ -101,7 +102,7 @@ export interface ContributedSurfaceHandle {
101
102
  dispose: () => void;
102
103
  }
103
104
 
104
- interface ContributedScope extends Record<string, unknown>, ContributedView, ContributedActions {}
105
+ interface ContributedScope extends ContributedView, ContributedActions {}
105
106
 
106
107
  /** The view a freshly mounted surface starts on: a form layout with nothing in it. */
107
108
  function emptyView(): ContributedView {
@@ -119,10 +120,9 @@ function emptyView(): ContributedView {
119
120
  }
120
121
 
121
122
  /** The `part` a node was authored with, or `""` — the only thing this adapter asks about a node. */
122
- function partOf(def: unknown): string {
123
- const attributes = (def as { attributes?: Record<string, unknown> } | null)?.attributes;
124
- const part = attributes?.["part"];
125
- return typeof part === "string" ? part : "";
123
+ function partOf(def: JxElement | string): string {
124
+ const part = isString(def) ? undefined : def.attributes?.["part"];
125
+ return isString(part) ? part : "";
126
126
  }
127
127
 
128
128
  /**
@@ -139,7 +139,7 @@ export function mountContributedSurface(
139
139
  islands: ContributedIslands,
140
140
  ): ContributedSurfaceHandle {
141
141
  host.textContent = "";
142
- const scope = reactive<ContributedScope>({ ...emptyView(), ...actions }) as ContributedScope;
142
+ const scope: ContributedScope = reactive<ContributedScope>({ ...emptyView(), ...actions });
143
143
 
144
144
  let mounted: SurfaceHandle | null = null;
145
145
  let disposed = false;
@@ -160,12 +160,16 @@ export function mountContributedSurface(
160
160
  }
161
161
  },
162
162
  }).then((surface) => {
163
+ /* SAFETY: `settings-contributed.json`'s root definition carries `tagName: "section"`, so the
164
+ runtime mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare
165
+ string. */
166
+ const root = surface.root as HTMLElement;
163
167
  if (disposed) {
164
168
  surface.dispose();
165
- return surface.root as HTMLElement;
169
+ return root;
166
170
  }
167
171
  mounted = surface;
168
- return surface.root as HTMLElement;
172
+ return root;
169
173
  });
170
174
 
171
175
  return {
@@ -29,16 +29,9 @@
29
29
  import { reactive } from "../reactivity";
30
30
  import { mountSurface, registerSurface } from "../ui/surface";
31
31
  import cssVarsDoc from "./settings-css-vars.json";
32
- import type { SurfaceHandle } from "../ui/surface";
33
- import type { JxDocument } from "@jxsuite/schema/types";
32
+ import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
34
33
 
35
- registerSurface("settings-css-vars", cssVarsDoc as unknown as JxDocument);
36
-
37
- /** One row of the add-an-override picker. */
38
- export interface OverrideChoice {
39
- value: string;
40
- label: string;
41
- }
34
+ registerSurface("settings-css-vars", cssVarsDoc);
42
35
 
43
36
  /** One of a token's per-context values. */
44
37
  export interface OverrideRowView {
@@ -91,7 +84,7 @@ export interface TokenRowView {
91
84
  overrides: OverrideRowView[];
92
85
  /** Whether the add-an-override picker is offered. */
93
86
  addState: "none" | "shown";
94
- addOptions: OverrideChoice[];
87
+ addOptions: SurfaceOption[];
95
88
  /** What the picker currently reads. Always `""` in practice — see {@link renderCssVarsSurface}. */
96
89
  addPick: string;
97
90
  addLabel: string;
@@ -141,7 +134,7 @@ interface CssVarsFlags {
141
134
  hasError: boolean;
142
135
  }
143
136
 
144
- interface CssVarsScope extends Record<string, unknown>, CssVarsView, CssVarsActions, CssVarsFlags {}
137
+ interface CssVarsScope extends CssVarsView, CssVarsActions, CssVarsFlags {}
145
138
 
146
139
  interface Mounted {
147
140
  scope: CssVarsScope;
@@ -186,7 +179,7 @@ export function renderCssVarsSurface(
186
179
  }
187
180
  existing?.handle?.dispose();
188
181
  host.textContent = "";
189
- const scope = reactive({ ...derive(view), ...actions }) as CssVarsScope;
182
+ const scope: CssVarsScope = reactive<CssVarsScope>({ ...derive(view), ...actions });
190
183
  const record: Mounted = { handle: null, scope };
191
184
  mounts.set(host, record);
192
185
  /* No race to arbitrate: a redraw arriving while this is in flight takes the branch above — a
@@ -158,7 +158,7 @@
158
158
  {
159
159
  "$prototype": "Array",
160
160
  "items": {
161
- "$ref": "#/state/shapes"
161
+ "$ref": "#/state/defs"
162
162
  },
163
163
  "key": {
164
164
  "$ref": "$map/item/name"
@@ -406,7 +406,7 @@
406
406
  {
407
407
  "operator": "call",
408
408
  "target": {
409
- "$ref": "#/state/removeShape"
409
+ "$ref": "#/state/removeSelected"
410
410
  },
411
411
  "value": []
412
412
  }
@@ -26,19 +26,12 @@ import { reactive } from "../reactivity";
26
26
  import { mountSurface, registerSurface } from "../ui/surface";
27
27
  import defsDoc from "./settings-defs.json";
28
28
 
29
- import type { JxDocument } from "@jxsuite/schema/types";
30
- import type { SurfaceHandle } from "../ui/surface";
29
+ import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
31
30
 
32
- registerSurface("settings-defs", defsDoc as unknown as JxDocument);
33
-
34
- /** One row of a picker: a field type, a format, or a reference target. */
35
- export interface DefsChoice {
36
- value: string;
37
- label: string;
38
- }
31
+ registerSurface("settings-defs", defsDoc);
39
32
 
40
33
  /** One data shape in the left column. */
41
- export interface DefsShapeView {
34
+ export interface DefsEntryView {
42
35
  name: string;
43
36
  selected: boolean;
44
37
  }
@@ -87,7 +80,7 @@ export interface DefsFieldView {
87
80
 
88
81
  /** Everything the document draws, as one value. */
89
82
  export interface DefsView {
90
- shapes: DefsShapeView[];
83
+ defs: DefsEntryView[];
91
84
  /** Whether the left column is offering the new-shape button or the form. */
92
85
  newState: "closed" | "open";
93
86
  newName: string;
@@ -95,10 +88,10 @@ export interface DefsView {
95
88
  editorState: "empty" | "editing";
96
89
  selected: string;
97
90
  fields: DefsFieldView[];
98
- typeOptions: DefsChoice[];
99
- formatOptions: DefsChoice[];
91
+ typeOptions: SurfaceOption[];
92
+ formatOptions: SurfaceOption[];
100
93
  /** The content types a reference field can point at. */
101
- targets: DefsChoice[];
94
+ targets: SurfaceOption[];
102
95
  addState: "closed" | "open";
103
96
  addName: string;
104
97
  addType: string;
@@ -114,7 +107,7 @@ export interface DefsActions {
114
107
  editNew: (value: string) => void;
115
108
  createNew: () => void;
116
109
  cancelNew: () => void;
117
- removeShape: () => void;
110
+ removeSelected: () => void;
118
111
  renameField: (key: string, value: string) => void;
119
112
  setType: (key: string, value: string) => void;
120
113
  setFormat: (key: string, value: string) => void;
@@ -149,7 +142,7 @@ export interface DefsSurfaceHandle {
149
142
  dispose: () => void;
150
143
  }
151
144
 
152
- interface DefsScope extends Record<string, unknown>, DefsView, DefsActions {}
145
+ interface DefsScope extends DefsView, DefsActions {}
153
146
 
154
147
  /** The view a freshly mounted surface starts on: no shapes, and nothing chosen. */
155
148
  function emptyView(): DefsView {
@@ -160,13 +153,13 @@ function emptyView(): DefsView {
160
153
  addRequired: false,
161
154
  addState: "closed",
162
155
  addType: "string",
156
+ defs: [],
163
157
  editorState: "empty",
164
158
  fields: [],
165
159
  formatOptions: [],
166
160
  newName: "",
167
161
  newState: "closed",
168
162
  selected: "",
169
- shapes: [],
170
163
  targets: [],
171
164
  typeOptions: [],
172
165
  };
@@ -181,17 +174,20 @@ function emptyView(): DefsView {
181
174
  */
182
175
  export function mountDefsSurface(host: HTMLElement, actions: DefsActions): DefsSurfaceHandle {
183
176
  host.textContent = "";
184
- const scope = reactive<DefsScope>({ ...emptyView(), ...actions }) as DefsScope;
177
+ const scope: DefsScope = reactive<DefsScope>({ ...emptyView(), ...actions });
185
178
 
186
179
  let mounted: SurfaceHandle | null = null;
187
180
  let disposed = false;
188
181
  const ready = mountSurface("settings-defs", scope, host).then((surface) => {
182
+ /* SAFETY: `settings-defs.json`'s root definition carries `tagName: "section"`, so the runtime
183
+ mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
184
+ const root = surface.root as HTMLElement;
189
185
  if (disposed) {
190
186
  surface.dispose();
191
- return surface.root as HTMLElement;
187
+ return root;
192
188
  }
193
189
  mounted = surface;
194
- return surface.root as HTMLElement;
190
+ return root;
195
191
  });
196
192
 
197
193
  return {
@@ -218,13 +214,13 @@ export function mountDefsSurface(host: HTMLElement, actions: DefsActions): DefsS
218
214
  scope.addRequired = view.addRequired;
219
215
  scope.addState = view.addState;
220
216
  scope.addType = view.addType;
217
+ scope.defs = view.defs;
221
218
  scope.editorState = view.editorState;
222
219
  scope.fields = view.fields;
223
220
  scope.formatOptions = view.formatOptions;
224
221
  scope.newName = view.newName;
225
222
  scope.newState = view.newState;
226
223
  scope.selected = view.selected;
227
- scope.shapes = view.shapes;
228
224
  scope.targets = view.targets;
229
225
  scope.typeOptions = view.typeOptions;
230
226
  },
@@ -19,23 +19,16 @@
19
19
  import { reactive } from "../reactivity";
20
20
  import { mountSurface, registerSurface } from "../ui/surface";
21
21
  import deployDoc from "./settings-deploy.json";
22
- import type { JxDocument } from "@jxsuite/schema/types";
23
- import type { SurfaceHandle } from "../ui/surface";
22
+ import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
24
23
 
25
- registerSurface("settings-deploy", deployDoc as unknown as JxDocument);
26
-
27
- /** One row of the adapter picker. */
28
- export interface DeployChoice {
29
- value: string;
30
- label: string;
31
- }
24
+ registerSurface("settings-deploy", deployDoc);
32
25
 
33
26
  /** What the section says the surface should be showing right now. */
34
27
  export interface DeployValues {
35
28
  /** The adapter the project is built with. */
36
29
  adapter: string;
37
30
  /** Every adapter it may be. */
38
- adapters: DeployChoice[];
31
+ adapters: SurfaceOption[];
39
32
  /** What the last write failed with, or `""`. */
40
33
  error: string;
41
34
  }
@@ -58,9 +51,9 @@ export interface DeploySurfaceHandle {
58
51
  * The scope the document reads. `hasError` is derived here: `$switch` is a document's only
59
52
  * conditional.
60
53
  */
61
- interface DeployScope extends Record<string, unknown> {
54
+ interface DeployScope {
62
55
  adapter: string;
63
- adapters: DeployChoice[];
56
+ adapters: SurfaceOption[];
64
57
  error: string;
65
58
  hasError: boolean;
66
59
  setAdapter: (value: string) => void;
@@ -91,13 +84,13 @@ export function mountDeploySurface(
91
84
  values: DeployValues,
92
85
  actions: DeployActions,
93
86
  ): DeploySurfaceHandle {
94
- const scope = reactive<DeployScope>({
87
+ const scope: DeployScope = reactive<DeployScope>({
95
88
  adapter: "",
96
89
  adapters: [],
97
90
  error: "",
98
91
  hasError: false,
99
92
  setAdapter: actions.setAdapter,
100
- }) as DeployScope;
93
+ });
101
94
  project(scope, values);
102
95
 
103
96
  container.replaceChildren();
@@ -125,7 +118,7 @@ export function mountDeploySurface(
125
118
  !disposed &&
126
119
  (mounted === null
127
120
  ? container.childNodes.length === 0
128
- : (mounted.root as Node).parentNode === container),
121
+ : mounted.root.parentNode === container),
129
122
  dispose() {
130
123
  disposed = true;
131
124
  mounted?.dispose();
@@ -26,10 +26,9 @@
26
26
  import { reactive } from "../reactivity";
27
27
  import { mountSurface, registerSurface } from "../ui/surface";
28
28
  import extensionsDoc from "./settings-extensions.json";
29
- import type { JxDocument } from "@jxsuite/schema/types";
30
29
  import type { SurfaceHandle } from "../ui/surface";
31
30
 
32
- registerSurface("settings-extensions", extensionsDoc as unknown as JxDocument);
31
+ registerSurface("settings-extensions", extensionsDoc);
33
32
 
34
33
  /** One `project.json` key an extension owns, as the chip repeater reads it. */
35
34
  export interface ExtensionSectionView {
@@ -117,7 +116,7 @@ export interface ExtensionsSurfaceHandle {
117
116
  * value already in the view, and a view that had to keep them in step would be a second place to
118
117
  * get it wrong.
119
118
  */
120
- interface ExtensionsScope extends Record<string, unknown>, ExtensionsView, ExtensionsActions {
119
+ interface ExtensionsScope extends ExtensionsView, ExtensionsActions {
121
120
  /** Whether to draw the groups or the sentence that says what this region is for. */
122
121
  listState: "empty" | "groups";
123
122
  hasError: boolean;
@@ -147,14 +146,14 @@ export function mountExtensionsSurface(
147
146
  view: ExtensionsView,
148
147
  actions: ExtensionsActions,
149
148
  ): ExtensionsSurfaceHandle {
150
- const scope = reactive<ExtensionsScope>({
149
+ const scope: ExtensionsScope = reactive<ExtensionsScope>({
151
150
  error: "",
152
151
  groups: [],
153
152
  hasError: false,
154
153
  listState: "empty",
155
154
  remove: actions.remove,
156
155
  toggle: actions.toggle,
157
- }) as ExtensionsScope;
156
+ });
158
157
  project(scope, view);
159
158
 
160
159
  container.replaceChildren();
@@ -182,7 +181,7 @@ export function mountExtensionsSurface(
182
181
  !disposed &&
183
182
  (mounted === null
184
183
  ? container.childNodes.length === 0
185
- : (mounted.root as Node).parentNode === container),
184
+ : mounted.root.parentNode === container),
186
185
  dispose() {
187
186
  disposed = true;
188
187
  mounted?.dispose();