@jxsuite/studio 6.1.1 → 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 (637) hide show
  1. package/dist/chunks/{2020-va2wwra4.js → 2020-f2gkpy8d.js} +3 -3
  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-2veqmnhr.js → index-zpjmzqfk.js} +3 -3
  32. package/dist/chunks/{javascript-8nbvs12s.js → javascript-m54mnwp6.js} +3 -3
  33. package/dist/chunks/{jsonMode-s8kt9dsj.js → jsonMode-w15cmrcm.js} +8 -8
  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-1q1sh2ax.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-h46vtzk8.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-rv11kfwa.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-8grwxtqk.js → studio-90pq9km1.js} +4 -4
  77. package/dist/chunks/studio-924p1tm1.js +6 -0
  78. package/dist/chunks/{studio-pre0skq6.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-vrmcjf9g.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-wszjyh0j.js → studio-tq0rtfwj.js} +4 -4
  111. package/dist/chunks/{studio-kggey1jt.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-zey7zsdw.js → studio-y64hrt8p.js} +7 -7
  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-2frah6h1.js → tsMode-sf49ee9x.js} +7 -7
  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 +97 -97
  140. package/package.json +6 -6
  141. package/src/about/about-modal.ts +4 -3
  142. package/src/account/action-flow.ts +45 -38
  143. package/src/account-status.ts +7 -2
  144. package/src/browse/library-layouts.ts +8 -5
  145. package/src/browse/library-model.ts +18 -6
  146. package/src/browse/library-pane.ts +37 -21
  147. package/src/browse/library-preview.ts +14 -9
  148. package/src/browse/library-source.ts +1 -1
  149. package/src/canvas/asset-refs.ts +24 -9
  150. package/src/canvas/asset-resolve.ts +19 -23
  151. package/src/canvas/canvas-helpers.ts +7 -6
  152. package/src/canvas/canvas-live-render.ts +44 -53
  153. package/src/canvas/canvas-patcher.ts +30 -30
  154. package/src/canvas/canvas-perf.ts +11 -5
  155. package/src/canvas/canvas-render.ts +62 -41
  156. package/src/canvas/canvas-surface.ts +5 -3
  157. package/src/canvas/canvas-utils.ts +90 -49
  158. package/src/canvas/dialog-path.ts +9 -4
  159. package/src/canvas/dialog-state.ts +1 -2
  160. package/src/canvas/diff-marks.ts +9 -16
  161. package/src/canvas/diff-toolbar.ts +8 -7
  162. package/src/canvas/edit-width-drag.ts +4 -1
  163. package/src/canvas/edit-width.ts +1 -3
  164. package/src/canvas/iframe-channel.ts +27 -13
  165. package/src/canvas/iframe-drop.ts +13 -12
  166. package/src/canvas/iframe-editable-root.ts +29 -16
  167. package/src/canvas/iframe-entry.ts +80 -63
  168. package/src/canvas/iframe-eval.ts +73 -49
  169. package/src/canvas/iframe-host.ts +135 -96
  170. package/src/canvas/iframe-inline-edit.ts +49 -30
  171. package/src/canvas/iframe-insert.ts +5 -4
  172. package/src/canvas/iframe-interaction.ts +30 -25
  173. package/src/canvas/iframe-overlay.ts +1 -1
  174. package/src/canvas/iframe-patch.ts +18 -15
  175. package/src/canvas/iframe-position.ts +12 -6
  176. package/src/canvas/iframe-protocol.ts +12 -16
  177. package/src/canvas/iframe-render.ts +36 -34
  178. package/src/canvas/iframe-slash.ts +24 -11
  179. package/src/canvas/iframe-subtree.ts +6 -2
  180. package/src/canvas/path-mapping.ts +19 -12
  181. package/src/canvas/popover-path.ts +7 -3
  182. package/src/canvas/popover-state.ts +1 -2
  183. package/src/canvas/serialize-scope.ts +13 -5
  184. package/src/canvas/stage-scrollbar.ts +2 -1
  185. package/src/canvas/surface-registry.ts +21 -3
  186. package/src/collab/collab-commands.ts +7 -2
  187. package/src/collab/collab-session.ts +84 -45
  188. package/src/collab/collab-state.ts +4 -3
  189. package/src/collab/monaco-binding.ts +16 -13
  190. package/src/collab/monaco-cursors.ts +5 -2
  191. package/src/commands/budget.ts +3 -3
  192. package/src/commands/command-args.ts +103 -71
  193. package/src/commands/context.ts +22 -20
  194. package/src/commands/keymap.ts +47 -43
  195. package/src/commands/levels.ts +3 -3
  196. package/src/commands/live-context.ts +7 -7
  197. package/src/commands/reference.ts +2 -1
  198. package/src/commands/registry.ts +12 -10
  199. package/src/commands/run-reported.ts +15 -10
  200. package/src/component-props.ts +46 -30
  201. package/src/content/collection-match.ts +5 -4
  202. package/src/content/draft-state.ts +4 -3
  203. package/src/content/entry-commands.ts +3 -2
  204. package/src/content/entry-editor.ts +29 -17
  205. package/src/content/entry-fields.ts +12 -7
  206. package/src/content/entry-model.ts +21 -12
  207. package/src/editor/canvas-context-menu.ts +1 -2
  208. package/src/editor/canvas-slash-bridge.ts +3 -6
  209. package/src/editor/content-slice.ts +16 -14
  210. package/src/editor/context-menu.ts +35 -22
  211. package/src/editor/convert-targets.ts +30 -35
  212. package/src/editor/convert-to-component.ts +11 -5
  213. package/src/editor/convert-to-repeater.ts +34 -22
  214. package/src/editor/editable-tags.ts +17 -2
  215. package/src/editor/file-drop-action.ts +21 -22
  216. package/src/editor/inline-edit-apply.ts +35 -17
  217. package/src/editor/inline-edit.ts +66 -50
  218. package/src/editor/inline-format.ts +59 -56
  219. package/src/editor/inline-link.ts +40 -15
  220. package/src/editor/insert-zone-action.ts +1 -1
  221. package/src/editor/merge-tags.ts +58 -19
  222. package/src/editor/repeater-scope.ts +39 -28
  223. package/src/editor/shortcuts.ts +32 -20
  224. package/src/editor/slash-menu.ts +1 -6
  225. package/src/files/asset-versions.ts +4 -4
  226. package/src/files/components.ts +15 -10
  227. package/src/files/elements.ts +5 -6
  228. package/src/files/file-ops.ts +77 -36
  229. package/src/files/files.ts +90 -95
  230. package/src/files/media-meta.ts +2 -1
  231. package/src/files/media-paths.ts +3 -0
  232. package/src/files/serialize-document.ts +2 -2
  233. package/src/format/constraints.ts +1 -1
  234. package/src/format/convert-file.ts +27 -13
  235. package/src/format/format-choices.ts +2 -1
  236. package/src/format/format-host.ts +76 -50
  237. package/src/github/github-auth-status.ts +27 -3
  238. package/src/github/github-auth.ts +19 -9
  239. package/src/github/github-publish.ts +24 -20
  240. package/src/grid/cell-editors.ts +46 -31
  241. package/src/grid/cell-popovers.ts +5 -3
  242. package/src/grid/edit-buffer.ts +10 -9
  243. package/src/grid/grid-controller.ts +20 -22
  244. package/src/grid/grid-layout.ts +21 -5
  245. package/src/grid/grid-open.ts +3 -6
  246. package/src/grid/grid-panel.ts +11 -4
  247. package/src/grid/grid-source.ts +8 -8
  248. package/src/grid/grid-view.ts +14 -17
  249. package/src/grid/redirects-grid.ts +14 -5
  250. package/src/grid/redirects.ts +16 -14
  251. package/src/grid/schema-columns.ts +25 -19
  252. package/src/grid/sources/connector-source.ts +47 -20
  253. package/src/grid/sources/content-source.ts +25 -24
  254. package/src/grid/sources/csv-file-source.ts +2 -2
  255. package/src/grid/tabulator-tables.d.ts +55 -34
  256. package/src/hosting/stage.ts +7 -7
  257. package/src/i18n/i18n-commands.ts +1 -2
  258. package/src/media/media-pane.ts +4 -1
  259. package/src/new-project/add-repo-modal.ts +20 -19
  260. package/src/new-project/import-tab.ts +10 -14
  261. package/src/new-project/location-fields.ts +2 -1
  262. package/src/new-project/new-project-modal.ts +12 -9
  263. package/src/packages/jxsuite-update.ts +4 -3
  264. package/src/packages/pull-package-sync.ts +26 -25
  265. package/src/page-params.ts +97 -68
  266. package/src/panels/activity-panel.ts +17 -9
  267. package/src/panels/ai-chat/attached-context.ts +13 -7
  268. package/src/panels/ai-chat/chat-view.ts +80 -73
  269. package/src/panels/ai-chat/composer.ts +30 -33
  270. package/src/panels/ai-chat/sessions-view.ts +1 -2
  271. package/src/panels/ai-panel.ts +23 -20
  272. package/src/panels/block-action-bar.ts +46 -35
  273. package/src/panels/bottom-dock.ts +5 -3
  274. package/src/panels/canvas-dnd-bridge.ts +31 -24
  275. package/src/panels/data-explorer.ts +62 -25
  276. package/src/panels/data-grid.ts +14 -11
  277. package/src/panels/dnd.ts +108 -118
  278. package/src/panels/editors.ts +52 -21
  279. package/src/panels/elements-panel.ts +10 -3
  280. package/src/panels/events-panel.ts +84 -69
  281. package/src/panels/formula-workspace.ts +76 -51
  282. package/src/panels/frontmatter-fields.ts +24 -19
  283. package/src/panels/frontmatter-panel.ts +44 -34
  284. package/src/panels/git-diff-open.ts +4 -4
  285. package/src/panels/git-panel.ts +49 -61
  286. package/src/panels/head-panel.ts +131 -111
  287. package/src/panels/i18n-panel.ts +10 -3
  288. package/src/panels/imports-panel.ts +23 -47
  289. package/src/panels/jump-bar.ts +48 -29
  290. package/src/panels/layers-panel.ts +97 -74
  291. package/src/panels/left-panel.ts +3 -3
  292. package/src/panels/pane-context.ts +31 -22
  293. package/src/panels/pane-grid.ts +49 -20
  294. package/src/panels/panel-registry.ts +22 -37
  295. package/src/panels/properties-panel.ts +175 -121
  296. package/src/panels/quick-search.ts +53 -31
  297. package/src/panels/right-panel.ts +3 -3
  298. package/src/panels/seo-modal.ts +13 -17
  299. package/src/panels/settings-menu.ts +15 -15
  300. package/src/panels/signals-panel.ts +153 -131
  301. package/src/panels/statement-editor.ts +230 -140
  302. package/src/panels/style-panel.ts +218 -205
  303. package/src/panels/style-utils.ts +114 -51
  304. package/src/panels/stylebook-doc.ts +57 -54
  305. package/src/panels/stylebook-layers-panel.ts +9 -9
  306. package/src/panels/stylebook-panel.ts +13 -17
  307. package/src/panels/tab-drop.ts +27 -11
  308. package/src/panels/tab-strip.ts +36 -26
  309. package/src/platform-errors.ts +57 -43
  310. package/src/platform.ts +58 -30
  311. package/src/platforms/cloud.ts +345 -175
  312. package/src/platforms/default-platform.ts +10 -4
  313. package/src/platforms/devserver.ts +129 -117
  314. package/src/platforms/read-batcher.ts +16 -8
  315. package/src/project-list.ts +2 -1
  316. package/src/publish/deploy-checklist.ts +8 -2
  317. package/src/publish/pages-service.ts +28 -13
  318. package/src/publish/publish-commands.ts +5 -4
  319. package/src/publish/publish-panel.ts +10 -6
  320. package/src/recent-projects.ts +15 -8
  321. package/src/resize-edges.ts +26 -36
  322. package/src/services/a11y-report.ts +26 -19
  323. package/src/services/agent-seed.ts +23 -11
  324. package/src/services/ai-ask.ts +9 -12
  325. package/src/services/ai-command-tools.ts +68 -62
  326. package/src/services/ai-import-tools.ts +80 -67
  327. package/src/services/ai-models.ts +17 -13
  328. package/src/services/ai-project-tools.ts +68 -32
  329. package/src/services/ai-session-store.ts +19 -10
  330. package/src/services/ai-system-prompt.ts +46 -20
  331. package/src/services/ai-tools.ts +71 -27
  332. package/src/services/ai-write-report.ts +20 -12
  333. package/src/services/ai-writes.ts +4 -4
  334. package/src/services/automation.ts +58 -31
  335. package/src/services/cem-export.ts +149 -58
  336. package/src/services/clock.ts +6 -1
  337. package/src/services/code-services.ts +37 -31
  338. package/src/services/context-manager.ts +14 -10
  339. package/src/services/context-resolver.ts +20 -8
  340. package/src/services/data-service.ts +19 -15
  341. package/src/services/directory-picker.ts +18 -12
  342. package/src/services/document-assistant.ts +39 -19
  343. package/src/services/gated-registry.ts +10 -6
  344. package/src/services/harness/chat-reducer.ts +23 -1
  345. package/src/services/import-client.ts +91 -38
  346. package/src/services/import-seed.ts +8 -2
  347. package/src/services/jx-validate.ts +28 -31
  348. package/src/services/live-preview.ts +0 -0
  349. package/src/services/live-surfaces.ts +6 -3
  350. package/src/services/model-uri.ts +10 -2
  351. package/src/services/module-preloads.ts +12 -8
  352. package/src/services/monaco-buffer.ts +43 -24
  353. package/src/services/monaco-lazy.ts +7 -8
  354. package/src/services/monaco-setup.ts +23 -16
  355. package/src/services/notify.ts +44 -17
  356. package/src/services/popover-report.ts +25 -10
  357. package/src/services/preview-eval.ts +20 -8
  358. package/src/services/profile.ts +13 -6
  359. package/src/services/project-path.ts +13 -10
  360. package/src/services/references.ts +0 -0
  361. package/src/services/render-critic.ts +8 -7
  362. package/src/services/settings/kernel.ts +13 -4
  363. package/src/services/settings/write-queue.ts +9 -9
  364. package/src/services/token-lint.ts +12 -10
  365. package/src/services/tool-executor.ts +17 -5
  366. package/src/services/tool-outcomes.ts +44 -24
  367. package/src/services/trusted-types.ts +24 -7
  368. package/src/settings/contexts-section.ts +11 -8
  369. package/src/settings/contributed-section.ts +79 -60
  370. package/src/settings/css-vars-editor.ts +37 -16
  371. package/src/settings/defs-editor.ts +38 -35
  372. package/src/settings/extension-rows.ts +16 -8
  373. package/src/settings/extension-sections.ts +23 -13
  374. package/src/settings/extensions-section.ts +4 -1
  375. package/src/settings/general-settings.ts +11 -8
  376. package/src/settings/locales-section.ts +20 -12
  377. package/src/settings/preferences-dialog.ts +9 -6
  378. package/src/settings/preferences-keymap.ts +7 -5
  379. package/src/settings/preferences-sections.ts +11 -5
  380. package/src/settings/project-sections.ts +1 -1
  381. package/src/settings/schema-field-ui.ts +9 -0
  382. package/src/settings/settings-document.ts +5 -5
  383. package/src/shell/tree.ts +6 -5
  384. package/src/shell.ts +104 -81
  385. package/src/site-context.ts +37 -22
  386. package/src/state.ts +41 -49
  387. package/src/store.ts +54 -34
  388. package/src/studio.ts +25 -75
  389. package/src/style/live-preview.ts +1 -1
  390. package/src/style/project-styles.ts +6 -7
  391. package/src/style/token-ref.ts +5 -4
  392. package/src/surfaces/about.ts +18 -19
  393. package/src/surfaces/add-repo.ts +17 -19
  394. package/src/surfaces/ai-chat.ts +31 -36
  395. package/src/surfaces/ai-credentials-form.ts +6 -16
  396. package/src/surfaces/ai-managed-connect.ts +3 -4
  397. package/src/surfaces/ai-model-picker.ts +3 -5
  398. package/src/surfaces/block-action-bar.ts +22 -11
  399. package/src/surfaces/boot-failure.ts +4 -5
  400. package/src/surfaces/bottom-dock.ts +9 -18
  401. package/src/surfaces/canvas-stage.ts +12 -11
  402. package/src/surfaces/cf-account-picker.ts +17 -18
  403. package/src/surfaces/commandbar.ts +14 -9
  404. package/src/surfaces/convert-repeater.ts +17 -19
  405. package/src/surfaces/data-actions.ts +9 -7
  406. package/src/surfaces/dialog.ts +26 -28
  407. package/src/surfaces/diff-toolbar.ts +9 -7
  408. package/src/surfaces/doc-header.ts +10 -19
  409. package/src/surfaces/empty-state.ts +7 -10
  410. package/src/surfaces/entry-editor.ts +14 -11
  411. package/src/surfaces/expression-editor.ts +11 -25
  412. package/src/surfaces/files-panel.ts +27 -14
  413. package/src/surfaces/formula-palette.ts +4 -5
  414. package/src/surfaces/git-panel.ts +7 -15
  415. package/src/surfaces/github-auth.ts +16 -20
  416. package/src/surfaces/github-publish.ts +17 -22
  417. package/src/surfaces/grid-cell.ts +30 -31
  418. package/src/surfaces/grid-open.ts +10 -14
  419. package/src/surfaces/grid-panel.ts +13 -9
  420. package/src/surfaces/grid-replace.ts +13 -13
  421. package/src/surfaces/grid-views.ts +15 -18
  422. package/src/surfaces/inspector-dock.ts +13 -12
  423. package/src/surfaces/jump-bar.ts +5 -6
  424. package/src/surfaces/jxsuite-update.ts +16 -22
  425. package/src/surfaces/library-pane.ts +19 -20
  426. package/src/surfaces/logic-panel.ts +17 -30
  427. package/src/surfaces/logic-workspace.ts +13 -15
  428. package/src/surfaces/media-browser.ts +11 -10
  429. package/src/surfaces/media-field.ts +4 -5
  430. package/src/surfaces/media-pane.ts +8 -7
  431. package/src/surfaces/menu.ts +29 -23
  432. package/src/surfaces/navigator-dock.ts +11 -12
  433. package/src/surfaces/new-project.ts +27 -26
  434. package/src/surfaces/pane-context.ts +20 -25
  435. package/src/surfaces/pane-grid.ts +15 -10
  436. package/src/surfaces/panel-activity.ts +5 -6
  437. package/src/surfaces/panel-data.ts +3 -4
  438. package/src/surfaces/panel-deploy-checklist.ts +5 -6
  439. package/src/surfaces/panel-elements.ts +5 -7
  440. package/src/surfaces/panel-i18n.ts +5 -7
  441. package/src/surfaces/panel-imports.ts +6 -13
  442. package/src/surfaces/panel-outline.ts +25 -19
  443. package/src/surfaces/panel-page.ts +11 -18
  444. package/src/surfaces/panel-problems.ts +5 -7
  445. package/src/surfaces/panel-signals.ts +20 -34
  446. package/src/surfaces/panel-stylebook-layers.ts +5 -8
  447. package/src/surfaces/preferences.ts +21 -11
  448. package/src/surfaces/progress-modal.ts +15 -9
  449. package/src/surfaces/properties-panel.json +1 -1
  450. package/src/surfaces/properties-panel.ts +20 -42
  451. package/src/surfaces/publish.ts +18 -18
  452. package/src/surfaces/push-plan.ts +7 -8
  453. package/src/surfaces/rail.ts +13 -13
  454. package/src/surfaces/reference-field.ts +11 -15
  455. package/src/surfaces/schema-builder.ts +16 -22
  456. package/src/surfaces/schema-form.ts +15 -25
  457. package/src/surfaces/secret-field.ts +9 -6
  458. package/src/surfaces/seo.ts +21 -15
  459. package/src/surfaces/settings-contexts.ts +9 -7
  460. package/src/surfaces/settings-contributed.ts +14 -10
  461. package/src/surfaces/settings-css-vars.ts +5 -12
  462. package/src/surfaces/settings-defs.json +2 -2
  463. package/src/surfaces/settings-defs.ts +17 -21
  464. package/src/surfaces/settings-deploy.ts +8 -15
  465. package/src/surfaces/settings-extensions.ts +5 -6
  466. package/src/surfaces/settings-head.ts +33 -39
  467. package/src/surfaces/settings-locales.ts +8 -20
  468. package/src/surfaces/settings-overview.ts +5 -6
  469. package/src/surfaces/settings-packages.ts +8 -7
  470. package/src/surfaces/settings-pane.ts +9 -18
  471. package/src/surfaces/settings-rawjson.ts +5 -6
  472. package/src/surfaces/shell.ts +1 -2
  473. package/src/surfaces/slash-menu.ts +19 -9
  474. package/src/surfaces/statements.ts +13 -18
  475. package/src/surfaces/statusbar.ts +17 -14
  476. package/src/surfaces/style-panel.ts +18 -31
  477. package/src/surfaces/stylebook-chrome.ts +3 -5
  478. package/src/surfaces/tab-strip.ts +14 -13
  479. package/src/surfaces/target-line.ts +6 -7
  480. package/src/surfaces/welcome.ts +5 -7
  481. package/src/tabs/patch-ops.ts +4 -3
  482. package/src/tabs/project-config.ts +32 -21
  483. package/src/tabs/selection.ts +36 -8
  484. package/src/tabs/tab.ts +52 -41
  485. package/src/tabs/transact.ts +98 -53
  486. package/src/types.ts +32 -17
  487. package/src/ui/ai-credentials-form.ts +10 -13
  488. package/src/ui/ai-model-picker.ts +3 -3
  489. package/src/ui/cf-account-picker.ts +7 -9
  490. package/src/ui/color-selector.ts +9 -5
  491. package/src/ui/dynamic-slot.ts +7 -8
  492. package/src/ui/expression-editor.ts +112 -105
  493. package/src/ui/form-controls.ts +57 -48
  494. package/src/ui/formula-catalog.ts +239 -230
  495. package/src/ui/formula-chips.ts +33 -18
  496. package/src/ui/layers.ts +44 -31
  497. package/src/ui/media-picker.ts +18 -9
  498. package/src/ui/popover-surface.ts +20 -12
  499. package/src/ui/progress-modal.ts +13 -8
  500. package/src/ui/regions.ts +7 -6
  501. package/src/ui/schema-form.ts +113 -70
  502. package/src/ui/surface.ts +71 -8
  503. package/src/ui/timing.ts +9 -0
  504. package/src/ui/value-source.ts +44 -31
  505. package/src/ui/virtual-window.ts +3 -2
  506. package/src/utils/base64.ts +3 -1
  507. package/src/utils/edit-display.ts +73 -73
  508. package/src/utils/element-selectors.ts +3 -2
  509. package/src/utils/google-fonts.ts +15 -14
  510. package/src/utils/inherited-style.ts +18 -20
  511. package/src/utils/link-target.ts +1 -1
  512. package/src/utils/preview-format.ts +25 -3
  513. package/src/utils/strip-events.ts +49 -22
  514. package/src/utils/studio-utils.ts +29 -14
  515. package/src/view.ts +2 -3
  516. package/src/workspace/pane-derive.ts +10 -12
  517. package/src/workspace/session.ts +53 -43
  518. package/src/workspace/workspace.ts +40 -36
  519. package/dist/chunks/adapter-f93pafd7.js +0 -4
  520. package/dist/chunks/cf-account-picker-af1h381v.js +0 -4
  521. package/dist/chunks/cf-settings-125tdm0w.js +0 -4
  522. package/dist/chunks/color-area-jqhna8zy.js +0 -4
  523. package/dist/chunks/color-field-embq5ctg.js +0 -4
  524. package/dist/chunks/color-fpezvnkt.js +0 -4
  525. package/dist/chunks/color-slider-1qmw7wqy.js +0 -4
  526. package/dist/chunks/combobox-773hdzyj.js +0 -4
  527. package/dist/chunks/components-ax2f1fnn.js +0 -4
  528. package/dist/chunks/content-source-108aqtk1.js +0 -4
  529. package/dist/chunks/convert-to-repeater-ry5rmppr.js +0 -4
  530. package/dist/chunks/dialog-mtm9fq5t.js +0 -4
  531. package/dist/chunks/editor-pfgdmkb0.js +0 -4
  532. package/dist/chunks/entry-commands-t0k1q0kx.js +0 -4
  533. package/dist/chunks/extension-sections-6mwh2hf8.js +0 -4
  534. package/dist/chunks/file-ops-meej5mqf.js +0 -4
  535. package/dist/chunks/files-44vp8a2s.js +0 -4
  536. package/dist/chunks/format-host-7q1petb9.js +0 -4
  537. package/dist/chunks/fs-events-h2mwnxaz.js +0 -4
  538. package/dist/chunks/git-panel-zngbymvd.js +0 -4
  539. package/dist/chunks/grid-view-sx9vynsp.js +0 -51
  540. package/dist/chunks/icons-p44xhjf0.js +0 -4
  541. package/dist/chunks/iframe-entry-f7mqjwpm.js +0 -5
  542. package/dist/chunks/iframe-entry-haw7jkvz.js +0 -5
  543. package/dist/chunks/iframe-entry-z6qrytv3.js +0 -5
  544. package/dist/chunks/iframe-host-qk3ycq87.js +0 -4
  545. package/dist/chunks/index-wkyfjeqz.js +0 -4
  546. package/dist/chunks/jx-validate-psgd7vsx.js +0 -4
  547. package/dist/chunks/layers-panel-1kq2jyfk.js +0 -4
  548. package/dist/chunks/layers-xd92fg8d.js +0 -4
  549. package/dist/chunks/listbox-s8fkmnq8.js +0 -4
  550. package/dist/chunks/lit-html-ac4cwwr4.js +0 -4
  551. package/dist/chunks/media-picker-0svzkdyb.js +0 -4
  552. package/dist/chunks/menu-37d07z9m.js +0 -4
  553. package/dist/chunks/menu-5c55ea3d.js +0 -4
  554. package/dist/chunks/monaco-binding-z6r70pdt.js +0 -4
  555. package/dist/chunks/monaco-buffer-fz6gq5y7.js +0 -4
  556. package/dist/chunks/monaco-setup-q4axkgj7.js +0 -4
  557. package/dist/chunks/notify-0xgtn8q1.js +0 -4
  558. package/dist/chunks/number-field-gw7sq8rn.js +0 -4
  559. package/dist/chunks/parse-897fvqah.js +0 -4
  560. package/dist/chunks/platform-v1qctbe6.js +0 -4
  561. package/dist/chunks/popover-8htra4er.js +0 -4
  562. package/dist/chunks/publish-panel-ym1fmgq5.js +0 -4
  563. package/dist/chunks/quick-search-a54e6t5n.js +0 -4
  564. package/dist/chunks/references-gmqp82fs.js +0 -4
  565. package/dist/chunks/right-panel-v7t9awbk.js +0 -4
  566. package/dist/chunks/section-registry-vhyf3zsr.js +0 -4
  567. package/dist/chunks/select-n3v7gwas.js +0 -4
  568. package/dist/chunks/split-pff8f3ze.js +0 -4
  569. package/dist/chunks/studio-0bhx5hz6.js +0 -5
  570. package/dist/chunks/studio-0k1ddnyy.js +0 -6
  571. package/dist/chunks/studio-1b04pd0j.js +0 -64
  572. package/dist/chunks/studio-4dwbj6gb.js +0 -5
  573. package/dist/chunks/studio-4tanh828.js +0 -5
  574. package/dist/chunks/studio-55h4mstj.js +0 -4
  575. package/dist/chunks/studio-5tnvjkz4.js +0 -5
  576. package/dist/chunks/studio-60dqgb0c.js +0 -5
  577. package/dist/chunks/studio-61dp09qg.js +0 -9
  578. package/dist/chunks/studio-63epcrj2.js +0 -5
  579. package/dist/chunks/studio-74k29dy9.js +0 -5
  580. package/dist/chunks/studio-7vg6jcd3.js +0 -5
  581. package/dist/chunks/studio-7zx31knw.js +0 -9
  582. package/dist/chunks/studio-8bxk97km.js +0 -5
  583. package/dist/chunks/studio-933e30n4.js +0 -5
  584. package/dist/chunks/studio-98wnwhbg.js +0 -5
  585. package/dist/chunks/studio-9mccjwjh.js +0 -14
  586. package/dist/chunks/studio-a2ke1e4t.js +0 -5
  587. package/dist/chunks/studio-e3a2a6v3.js +0 -4
  588. package/dist/chunks/studio-e81q1vb9.js +0 -5
  589. package/dist/chunks/studio-epgrmqqm.js +0 -5
  590. package/dist/chunks/studio-ery42sqr.js +0 -4
  591. package/dist/chunks/studio-g1shz58g.js +0 -5
  592. package/dist/chunks/studio-gf0fz03c.js +0 -5
  593. package/dist/chunks/studio-gjtpe62q.js +0 -6
  594. package/dist/chunks/studio-gkskhg7m.js +0 -5
  595. package/dist/chunks/studio-gx4dnjzd.js +0 -5
  596. package/dist/chunks/studio-j03zga3y.js +0 -9
  597. package/dist/chunks/studio-jhpxeckz.js +0 -5
  598. package/dist/chunks/studio-k01r7ykp.js +0 -5
  599. package/dist/chunks/studio-kk7h30ne.js +0 -7
  600. package/dist/chunks/studio-kt1zqney.js +0 -5
  601. package/dist/chunks/studio-m3cwhvye.js +0 -5
  602. package/dist/chunks/studio-mcayt6hz.js +0 -5
  603. package/dist/chunks/studio-myjcghv3.js +0 -5
  604. package/dist/chunks/studio-n8bxwc3y.js +0 -4
  605. package/dist/chunks/studio-ngm8gvpb.js +0 -5
  606. package/dist/chunks/studio-nj5a01jy.js +0 -928
  607. package/dist/chunks/studio-pcgz8heb.js +0 -5
  608. package/dist/chunks/studio-qcsq0t15.js +0 -5
  609. package/dist/chunks/studio-qkstvve9.js +0 -5
  610. package/dist/chunks/studio-qv1pwd3c.js +0 -5
  611. package/dist/chunks/studio-rc6dvxjb.js +0 -7
  612. package/dist/chunks/studio-s8dmmz66.js +0 -5
  613. package/dist/chunks/studio-sp5xzbj4.js +0 -6
  614. package/dist/chunks/studio-szsjbj0g.js +0 -5
  615. package/dist/chunks/studio-t1xzawhr.js +0 -16
  616. package/dist/chunks/studio-t6b6qe31.js +0 -5
  617. package/dist/chunks/studio-tdcprbqb.js +0 -5
  618. package/dist/chunks/studio-vyc0b4he.js +0 -10
  619. package/dist/chunks/studio-w0cgf6jg.js +0 -5
  620. package/dist/chunks/studio-w3hskzqk.js +0 -5
  621. package/dist/chunks/studio-xgrgcdyh.js +0 -9
  622. package/dist/chunks/studio-xz2yxfcb.js +0 -5
  623. package/dist/chunks/studio-y6n42tgs.js +0 -5
  624. package/dist/chunks/studio-yb560vxr.js +0 -5
  625. package/dist/chunks/studio-yn9f8vtx.js +0 -5
  626. package/dist/chunks/studio-yw05w8f0.js +0 -7
  627. package/dist/chunks/studio-z16sgavc.js +0 -5
  628. package/dist/chunks/studio-zyqn40w4.js +0 -5
  629. package/dist/chunks/swatch-group-8qh9a3bm.js +0 -4
  630. package/dist/chunks/tabs-jwthg40w.js +0 -4
  631. package/dist/chunks/textfield-spy3hc77.js +0 -4
  632. package/dist/chunks/toast-4d35zd64.js +0 -4
  633. package/dist/chunks/toast-host-8sjmfed3.js +0 -4
  634. package/dist/chunks/tooltip-fd6g9xy3.js +0 -4
  635. package/dist/chunks/tree-h19v1jfz.js +0 -4
  636. package/dist/chunks/workspace-zt81g1ms.js +0 -4
  637. package/dist/chunks/ws-client-n2bh4hkf.js +0 -4
@@ -31,10 +31,9 @@ import { effect, effectScope, reactive } from "../reactivity";
31
31
  import { mountSurface, registerSurface } from "../ui/surface";
32
32
  import checklistDoc from "./panel-deploy-checklist.json";
33
33
  import type { EffectScope } from "@vue/reactivity";
34
- import type { JxDocument } from "@jxsuite/schema/types";
35
34
  import type { SurfaceHandle } from "../ui/surface";
36
35
 
37
- registerSurface("panel-deploy-checklist", checklistDoc as unknown as JxDocument);
36
+ registerSurface("panel-deploy-checklist", checklistDoc);
38
37
 
39
38
  /** One prerequisite, as the document draws it. Every field is a value: no records, no closures. */
40
39
  export interface DeployStepRowView {
@@ -81,7 +80,7 @@ export interface DeployChecklistDeps {
81
80
  }
82
81
 
83
82
  /** The scope the document reads: the projection, flattened, beside the one callback. */
84
- interface DeployChecklistScope extends Record<string, unknown>, DeployChecklistView {
83
+ interface DeployChecklistScope extends DeployChecklistView {
85
84
  runAction: () => void;
86
85
  }
87
86
 
@@ -109,7 +108,7 @@ function standingIn(container: HTMLElement): boolean {
109
108
  return false;
110
109
  }
111
110
  // Still mounting into this very container: a second call must not start a second mount.
112
- return _handle === null ? _mount !== null : (_handle.root as Node).parentNode === container;
111
+ return _handle === null ? _mount !== null : _handle.root.parentNode === container;
113
112
  }
114
113
 
115
114
  /**
@@ -127,7 +126,7 @@ export function mountDeployChecklistSurface(
127
126
  }
128
127
  disposeDeployChecklistSurface();
129
128
  _container = container;
130
- const scope = reactive<DeployChecklistScope>({
129
+ const scope: DeployChecklistScope = reactive<DeployChecklistScope>({
131
130
  actionDisabled: false,
132
131
  actionLabel: "",
133
132
  actionTitle: "",
@@ -138,7 +137,7 @@ export function mountDeployChecklistSurface(
138
137
  runAction: deps.runAction,
139
138
  steps: [],
140
139
  summary: "",
141
- }) as DeployChecklistScope;
140
+ });
142
141
  _scope = effectScope();
143
142
  _scope.run(() => {
144
143
  effect(() => {
@@ -32,10 +32,9 @@
32
32
  import { reactive } from "../reactivity";
33
33
  import { mountSurface, registerSurface } from "../ui/surface";
34
34
  import elementsDoc from "./panel-elements.json";
35
- import type { JxDocument } from "@jxsuite/schema/types";
36
35
  import type { SurfaceHandle } from "../ui/surface";
37
36
 
38
- registerSurface("panel-elements", elementsDoc as unknown as JxDocument);
37
+ registerSurface("panel-elements", elementsDoc);
39
38
 
40
39
  /** One insertable HTML element: the tag is its identity, its caption and what a click inserts. */
41
40
  export interface ElementCardView {
@@ -103,7 +102,7 @@ export interface ElementsSurfaceHandle {
103
102
  }
104
103
 
105
104
  /** The scope the document reads: {@link ElementsValues} plus the actions its controls call. */
106
- interface ElementsScope extends Record<string, unknown>, ElementsValues, ElementsActions {}
105
+ interface ElementsScope extends ElementsValues, ElementsActions {}
107
106
 
108
107
  /** Write a projection into the scope. */
109
108
  function project(scope: ElementsScope, values: ElementsValues): void {
@@ -128,7 +127,7 @@ export function mountElementsSurface(
128
127
  values: ElementsValues,
129
128
  actions: ElementsActions,
130
129
  ): ElementsSurfaceHandle {
131
- const scope = reactive<ElementsScope>({
130
+ const scope: ElementsScope = reactive<ElementsScope>({
132
131
  categories: [],
133
132
  clearFilter: actions.clearFilter,
134
133
  components: [],
@@ -141,7 +140,7 @@ export function mountElementsSurface(
141
140
  setComponentsOpen: actions.setComponentsOpen,
142
141
  setFilter: actions.setFilter,
143
142
  setSectionOpen: actions.setSectionOpen,
144
- }) as ElementsScope;
143
+ });
145
144
  project(scope, values);
146
145
 
147
146
  let mounted: SurfaceHandle | null = null;
@@ -163,8 +162,7 @@ export function mountElementsSurface(
163
162
  taken away, and answering no would start a second mount racing the first. Once mounted the
164
163
  question is whether the root is still in the container — a panel that was switched away from
165
164
  had its document cleared out from under it by lit. */
166
- connected: () =>
167
- !disposed && (mounted === null || (mounted.root as Node).parentNode === container),
165
+ connected: () => !disposed && (mounted === null || mounted.root.parentNode === container),
168
166
  dispose() {
169
167
  disposed = true;
170
168
  mounted?.dispose();
@@ -24,10 +24,9 @@
24
24
  import { reactive } from "../reactivity";
25
25
  import { mountSurface, registerSurface } from "../ui/surface";
26
26
  import i18nDoc from "./panel-i18n.json";
27
- import type { JxDocument } from "@jxsuite/schema/types";
28
27
  import type { SurfaceHandle } from "../ui/surface";
29
28
 
30
- registerSurface("panel-i18n", i18nDoc as unknown as JxDocument);
29
+ registerSurface("panel-i18n", i18nDoc);
31
30
 
32
31
  /** Which of the three bodies the panel is showing. */
33
32
  export type I18nMode =
@@ -105,7 +104,7 @@ export interface I18nSurfaceHandle {
105
104
  * Each `has*` is the flattening of a presence test: a document switches on a VALUE, so "is there a
106
105
  * failure to report" has to arrive as a boolean rather than as a string the markup could measure.
107
106
  */
108
- interface I18nScope extends Record<string, unknown> {
107
+ interface I18nScope {
109
108
  mode: I18nMode;
110
109
  settingsDisabled: boolean;
111
110
  summary: string;
@@ -166,7 +165,7 @@ export function mountI18nSurface(
166
165
  values: I18nValues,
167
166
  actions: I18nActions,
168
167
  ): I18nSurfaceHandle {
169
- const scope = reactive<I18nScope>({
168
+ const scope: I18nScope = reactive<I18nScope>({
170
169
  hasIncomplete: false,
171
170
  hasRows: false,
172
171
  hasTruncated: false,
@@ -180,7 +179,7 @@ export function mountI18nSurface(
180
179
  settingsDisabled: false,
181
180
  summary: "",
182
181
  truncated: "",
183
- }) as I18nScope;
182
+ });
184
183
  project(scope, values);
185
184
 
186
185
  let mounted: SurfaceHandle | null = null;
@@ -201,8 +200,7 @@ export function mountI18nSurface(
201
200
  /* In flight the answer is yes: nothing has landed yet, so there is nothing that could have been
202
201
  taken away. Once mounted the question is simply whether the root is still in the container —
203
202
  a panel that was switched away from had its document cleared out from under it by lit. */
204
- connected: () =>
205
- !disposed && (mounted === null || (mounted.root as Node).parentNode === container),
203
+ connected: () => !disposed && (mounted === null || mounted.root.parentNode === container),
206
204
  dispose() {
207
205
  disposed = true;
208
206
  mounted?.dispose();
@@ -33,10 +33,9 @@
33
33
  import { reactive } from "../reactivity";
34
34
  import { mountSurface, registerSurface } from "../ui/surface";
35
35
  import importsDoc from "./panel-imports.json";
36
- import type { SurfaceHandle } from "../ui/surface";
37
- import type { JxDocument } from "@jxsuite/schema/types";
36
+ import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
38
37
 
39
- registerSurface("panel-imports", importsDoc as unknown as JxDocument);
38
+ registerSurface("panel-imports", importsDoc);
40
39
 
41
40
  /** One imported module: the name a document refers to it by, and the path it is loaded from. */
42
41
  export interface ModuleRow {
@@ -70,12 +69,6 @@ export interface PackageRow {
70
69
  components: ComponentRow[];
71
70
  }
72
71
 
73
- /** One row of the component picker: a project component this document has not imported yet. */
74
- export interface PickerOption {
75
- value: string;
76
- label: string;
77
- }
78
-
79
72
  /** What the panel shows — the flow's projection of the project and the open document. */
80
73
  export interface ImportsView {
81
74
  /**
@@ -94,7 +87,7 @@ export interface ImportsView {
94
87
  /** What the component picker currently shows. `""` is its own empty row, never a component. */
95
88
  pickerValue: string;
96
89
  /** The components this document could still import. Empty when there are none to offer. */
97
- pickerOptions: PickerOption[];
90
+ pickerOptions: SurfaceOption[];
98
91
  /**
99
92
  * The sentence drawn where the `$ref` list would be. The flow chooses it: "pick one below" and
100
93
  * "this project has none yet" are two different absences, and only the flow knows which it is
@@ -135,7 +128,7 @@ interface ImportsFlags {
135
128
  hasOptions: boolean;
136
129
  }
137
130
 
138
- interface ImportsScope extends Record<string, unknown>, ImportsView, ImportsActions, ImportsFlags {}
131
+ interface ImportsScope extends ImportsView, ImportsActions, ImportsFlags {}
139
132
 
140
133
  interface Mounted {
141
134
  scope: ImportsScope;
@@ -152,7 +145,7 @@ const mounts = new WeakMap<HTMLElement, Mounted>();
152
145
  * control lies about what it holds — and the row is what the closed control reads as, which is why
153
146
  * it is worded as the invitation rather than as a blank.
154
147
  */
155
- const PICK_NOTHING: PickerOption = { label: "Add component…", value: "" };
148
+ const PICK_NOTHING: SurfaceOption = { label: "Add component…", value: "" };
156
149
 
157
150
  /** The view plus the flags the document switches on. */
158
151
  function derive(view: ImportsView): ImportsView & ImportsFlags {
@@ -191,7 +184,7 @@ export function renderImportsSurface(
191
184
  }
192
185
  existing?.handle?.dispose();
193
186
  host.textContent = "";
194
- const scope = reactive({ ...derive(view), ...actions }) as ImportsScope;
187
+ const scope: ImportsScope = reactive<ImportsScope>({ ...derive(view), ...actions });
195
188
  const record: Mounted = { handle: null, scope };
196
189
  mounts.set(host, record);
197
190
  /* No race to arbitrate: a redraw arriving while this is in flight takes the branch above — a
@@ -40,14 +40,15 @@
40
40
  * @docs studio/design/layers
41
41
  */
42
42
 
43
+ import { isString } from "@jxsuite/schema/guards";
43
44
  import { reactive } from "../reactivity";
44
45
  import { mountSurface, registerSurface } from "../ui/surface";
45
46
  import outlineDoc from "./panel-outline.json";
46
- import type { JxDocument, JxElement } from "@jxsuite/schema/types";
47
+ import type { JxElement } from "@jxsuite/schema/types";
47
48
  import type { JxScope } from "@jxsuite/runtime/types";
48
49
  import type { SurfaceHandle } from "../ui/surface";
49
50
 
50
- registerSurface("panel-outline", outlineDoc as unknown as JxDocument);
51
+ registerSurface("panel-outline", outlineDoc);
51
52
 
52
53
  /**
53
54
  * One verb on a row, already resolved against THAT ROW'S node.
@@ -193,10 +194,13 @@ export interface OutlineActions {
193
194
  * `data-jx-path` is for.
194
195
  */
195
196
  contextMenu: (scope: JxScope, event: Event) => void;
196
- /** Run one of the row's verbs, against the row rather than against the selection. */
197
- runRow: (id: string, row: string, control: unknown) => void;
198
- /** Open the `⋮` menu under its own button. */
199
- overflowRow: (key: string, opener: unknown) => void;
197
+ /**
198
+ * Run one of the row's verbs, against the row rather than against the selection. `control` is the
199
+ * pressed button's `event.currentTarget`.
200
+ */
201
+ runRow: (id: string, row: string, control: EventTarget | null) => void;
202
+ /** Open the `⋮` menu under its own button, which arrives as the press's `event.currentTarget`. */
203
+ overflowRow: (key: string, opener: EventTarget | null) => void;
200
204
  /** The rename input's three moments. */
201
205
  editInput: (value: string) => void;
202
206
  editCommit: () => void;
@@ -221,7 +225,7 @@ export interface OutlineSurfaceHandle {
221
225
  }
222
226
 
223
227
  /** The scope the document reads: the projection, plus everything its controls can call. */
224
- interface OutlineScope extends Record<string, unknown>, OutlineValues, OutlineActions {}
228
+ interface OutlineScope extends OutlineValues, OutlineActions {}
225
229
 
226
230
  /** Write a projection into the scope. */
227
231
  function project(scope: OutlineScope, values: OutlineValues): void {
@@ -236,8 +240,8 @@ function project(scope: OutlineScope, values: OutlineValues): void {
236
240
 
237
241
  /** The `part` a node's definition carries, or "" for a text node or an unmarked element. */
238
242
  function partOf(def: JxElement | string): string {
239
- const part = typeof def === "string" ? undefined : def.attributes?.["part"];
240
- return typeof part === "string" ? part : "";
243
+ const part = isString(def) ? undefined : def.attributes?.["part"];
244
+ return isString(part) ? part : "";
241
245
  }
242
246
 
243
247
  /**
@@ -253,7 +257,7 @@ export function mountOutlineSurface(
253
257
  values: OutlineValues,
254
258
  actions: OutlineActions,
255
259
  ): OutlineSurfaceHandle {
256
- const scope = reactive<OutlineScope>({
260
+ const scope: OutlineScope = reactive<OutlineScope>({
257
261
  contextMenu: actions.contextMenu,
258
262
  current: "",
259
263
  editCancel: actions.editCancel,
@@ -278,7 +282,7 @@ export function mountOutlineSurface(
278
282
  treeReady: actions.treeReady,
279
283
  typeahead: actions.typeahead,
280
284
  view: "empty",
281
- }) as OutlineScope;
285
+ });
282
286
  project(scope, values);
283
287
 
284
288
  let mounted: SurfaceHandle | null = null;
@@ -290,12 +294,15 @@ export function mountOutlineSurface(
290
294
  const ready = mountSurface("panel-outline", scope, container, {
291
295
  onNodeCreated: (element, _path, def) => {
292
296
  /* A text node carries no `part`, so narrowing and asking are the same question — asked once,
293
- rather than as a guard clause whose only reachable answer is the one below. */
294
- const part = element instanceof HTMLElement ? partOf(def) : "";
295
- if (part === "tree") {
296
- actions.treeReady(element as HTMLElement);
297
- } else if (part === "title-input") {
298
- actions.editReady(element as HTMLElement);
297
+ as the condition around the lookup rather than as a guard clause whose only reachable
298
+ answer is the one below. */
299
+ if (element instanceof HTMLElement) {
300
+ const part = partOf(def);
301
+ if (part === "tree") {
302
+ actions.treeReady(element);
303
+ } else if (part === "title-input") {
304
+ actions.editReady(element);
305
+ }
299
306
  }
300
307
  },
301
308
  }).then((surface) => {
@@ -312,8 +319,7 @@ export function mountOutlineSurface(
312
319
  mount racing the first. Once mounted, the question is whether the root is still where it was
313
320
  put: a Navigator that painted another panel, or the stylebook's own catalogue, cleared this
314
321
  document out from under it. */
315
- connected: () =>
316
- !disposed && (mounted === null || (mounted.root as Node).parentNode === container),
322
+ connected: () => !disposed && (mounted === null || mounted.root.parentNode === container),
317
323
  dispose() {
318
324
  disposed = true;
319
325
  mounted?.dispose();
@@ -26,16 +26,9 @@
26
26
  import { reactive } from "../reactivity";
27
27
  import { mountSurface, registerSurface } from "../ui/surface";
28
28
  import pagePanelDoc from "./panel-page.json";
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("panel-page", pagePanelDoc as unknown as JxDocument);
33
-
34
- /** One choice in a row's picker, or in the add form's tag picker. */
35
- export interface PageChoice {
36
- value: string;
37
- label: string;
38
- }
31
+ registerSurface("panel-page", pagePanelDoc);
39
32
 
40
33
  /**
41
34
  * One row of one section, as the document reads it.
@@ -49,7 +42,7 @@ export interface PageChoice {
49
42
  * a screenshot region and `ui/regions.ts`'s `field:<prop>` grammar see. A collection whose schema
50
43
  * declares a `layout` property would otherwise share an identity with the Layout picker.
51
44
  */
52
- export interface PageRow extends Record<string, unknown> {
45
+ export interface PageRow {
53
46
  /** The row's identity: the repeater's key, and the argument every action is given. */
54
47
  key: string;
55
48
  /** The name on `data-prop`. */
@@ -72,7 +65,7 @@ export interface PageRow extends Record<string, unknown> {
72
65
  /** A text row's placeholder. Empty draws none. */
73
66
  placeholder: string;
74
67
  /** A picker's rows, in the order they are offered. Empty on every other kind. */
75
- options: PageChoice[];
68
+ options: SurfaceOption[];
76
69
  /** A sentence under the control — an empty collection, or a listing that failed. */
77
70
  note: string;
78
71
  /** Whether {@link PageRow.note} has anything in it; `$switch` is the document's conditional. */
@@ -84,7 +77,7 @@ export interface PageRow extends Record<string, unknown> {
84
77
  }
85
78
 
86
79
  /** One band of the panel: a heading, and the rows under it. */
87
- export interface PageSection extends Record<string, unknown> {
80
+ export interface PageSection {
88
81
  /** The repeater's key, and the `data-section` a test or a shot addresses the band by. */
89
82
  key: string;
90
83
  /** The heading, already carrying the collection's name where there is one. */
@@ -95,7 +88,7 @@ export interface PageSection extends Record<string, unknown> {
95
88
  }
96
89
 
97
90
  /** One `$head` entry no structured control owns, as the list draws it. */
98
- export interface PageTagRow extends Record<string, unknown> {
91
+ export interface PageTagRow {
99
92
  /** Unique within one projection — the repeater's key, and what Remove hands back. */
100
93
  key: string;
101
94
  /** The entry as markup, e.g. `<meta name="author">`. */
@@ -120,7 +113,7 @@ export interface PagePanelView {
120
113
  addAttr: string;
121
114
  addValue: string;
122
115
  /** The element names the add form offers. */
123
- tagOptions: PageChoice[];
116
+ tagOptions: SurfaceOption[];
124
117
  }
125
118
 
126
119
  /**
@@ -142,8 +135,8 @@ export interface PagePanelActions {
142
135
  setChoice: (key: string, value: string) => void;
143
136
  /** Open the OS file picker for a media row and assign what comes back. */
144
137
  upload: (key: string) => void;
145
- /** Open the media browser under the button that was pressed. */
146
- browse: (key: string, anchor: unknown) => void;
138
+ /** Open the media browser under the button that was pressed — the press's `event.currentTarget`. */
139
+ browse: (key: string, anchor: EventTarget | null) => void;
147
140
  /** Run the `document.openSeo` command — the door to Search appearance. */
148
141
  openSeo: () => void;
149
142
  /** Take one custom `$head` entry away. */
@@ -159,7 +152,7 @@ export interface PagePanelActions {
159
152
  }
160
153
 
161
154
  /** The scope the document reads: the projection, plus everything a control can ask for. */
162
- interface PagePanelScope extends Record<string, unknown>, PagePanelView, PagePanelActions {}
155
+ interface PagePanelScope extends PagePanelView, PagePanelActions {}
163
156
 
164
157
  /** Write a projection into the scope. Assignment by assignment, so an unchanged field is inert. */
165
158
  function project(scope: PagePanelScope, view: PagePanelView): void {
@@ -223,7 +216,7 @@ export function renderPagePanelSurface(
223
216
  }
224
217
  existing?.handle?.dispose();
225
218
  host.textContent = "";
226
- const scope = reactive({ ...emptyView(), ...actions }) as PagePanelScope;
219
+ const scope: PagePanelScope = reactive<PagePanelScope>({ ...emptyView(), ...actions });
227
220
  project(scope, view);
228
221
  const record: Mounted = { handle: null, scope };
229
222
  mounts.set(host, record);
@@ -25,10 +25,9 @@
25
25
  import { reactive } from "../reactivity";
26
26
  import { mountSurface, registerSurface } from "../ui/surface";
27
27
  import problemsDoc from "./panel-problems.json";
28
- import type { JxDocument } from "@jxsuite/schema/types";
29
28
  import type { SurfaceHandle } from "../ui/surface";
30
29
 
31
- registerSurface("panel-problems", problemsDoc as unknown as JxDocument);
30
+ registerSurface("panel-problems", problemsDoc);
32
31
 
33
32
  /** One problem, as the document draws it. Every field is a value: no records, no closures. */
34
33
  export interface ProblemRowView {
@@ -87,7 +86,7 @@ export interface ProblemsSurfaceHandle {
87
86
  }
88
87
 
89
88
  /** The scope the document reads: the projection, and the four things a row can ask for. */
90
- interface ProblemsScope extends Record<string, unknown> {
89
+ interface ProblemsScope {
91
90
  hasProblems: boolean;
92
91
  clearLabel: string;
93
92
  groups: ProblemGroupView[];
@@ -117,7 +116,7 @@ export function mountProblemsSurface(
117
116
  values: ProblemsValues,
118
117
  actions: ProblemsActions,
119
118
  ): ProblemsSurfaceHandle {
120
- const scope = reactive<ProblemsScope>({
119
+ const scope: ProblemsScope = reactive<ProblemsScope>({
121
120
  clearAll: actions.clearAll,
122
121
  clearLabel: "",
123
122
  dismissRow: actions.dismissRow,
@@ -125,7 +124,7 @@ export function mountProblemsSurface(
125
124
  hasProblems: false,
126
125
  openPath: actions.openPath,
127
126
  runAction: actions.runAction,
128
- }) as ProblemsScope;
127
+ });
129
128
  project(scope, values);
130
129
 
131
130
  let mounted: SurfaceHandle | null = null;
@@ -143,8 +142,7 @@ export function mountProblemsSurface(
143
142
  answer is simply whether this handle is still wanted. Once mounted, the question is whether
144
143
  the root is still where it was put: a dock that repainted with another tab selected, or one
145
144
  that collapsed, had the panel body emptied out from under it. */
146
- connected: () =>
147
- !disposed && (mounted === null || (mounted.root as Node).parentNode === container),
145
+ connected: () => !disposed && (mounted === null || mounted.root.parentNode === container),
148
146
  dispose() {
149
147
  disposed = true;
150
148
  mounted?.dispose();
@@ -32,27 +32,15 @@
32
32
  * @docs studio/logic/data
33
33
  */
34
34
 
35
+ import { isJsonObject, isString } from "@jxsuite/schema/guards";
35
36
  import { reactive } from "../reactivity";
36
37
  import { mountSurface, registerSurface } from "../ui/surface";
37
38
  import signalsDoc from "./panel-signals.json";
38
- import type { JxDocument } from "@jxsuite/schema/types";
39
+ import type { JsonObject, JxElement } from "@jxsuite/schema/types";
39
40
  import type { JxScope } from "@jxsuite/runtime/types";
40
- import type { SurfaceHandle } from "../ui/surface";
41
+ import type { SurfaceHandle, SurfaceOption, SurfaceOptionGroup } from "../ui/surface";
41
42
 
42
- registerSurface("panel-signals", signalsDoc as unknown as JxDocument);
43
-
44
- /** One row of a picker, as `jx-select` reads it. */
45
- export interface SignalOption {
46
- value: string;
47
- label: string;
48
- }
49
-
50
- /** A named run of picker rows. `jx-select` draws both halves of a group's delimiter. */
51
- export interface SignalOptionGroup {
52
- id: string;
53
- label: string;
54
- rows: SignalOption[];
55
- }
43
+ registerSurface("panel-signals", signalsDoc);
56
44
 
57
45
  /** One chip of the basic parameter editor. */
58
46
  export interface SignalChipView {
@@ -158,7 +146,7 @@ export interface SignalFieldView {
158
146
  error: string;
159
147
  hasError: boolean;
160
148
  checked: boolean;
161
- options: SignalOption[];
149
+ options: SurfaceOption[];
162
150
  /** Which island this host is for — `expression`, `statements`, `media` or `schema`. */
163
151
  slot: string;
164
152
  chips: SignalChipView[];
@@ -209,8 +197,8 @@ export interface SignalsView {
209
197
  listState: "listed" | "empty";
210
198
  emptyMessage: string;
211
199
  categories: SignalCategoryView[];
212
- addOptions: SignalOption[];
213
- addGroups: SignalOptionGroup[];
200
+ addOptions: SurfaceOption[];
201
+ addGroups: SurfaceOptionGroup[];
214
202
  /** What the add picker holds. Always `""` at rest — see {@link SignalsActions.addSignal}. */
215
203
  addValue: string;
216
204
  }
@@ -262,7 +250,7 @@ export interface SignalsSurfaceHandle {
262
250
  dispose: () => void;
263
251
  }
264
252
 
265
- interface SignalsScope extends Record<string, unknown>, SignalsView, SignalsActions {}
253
+ interface SignalsScope extends SignalsView, SignalsActions {}
266
254
 
267
255
  /** One island's host, and what it is a host for. */
268
256
  interface IslandRecord {
@@ -272,23 +260,22 @@ interface IslandRecord {
272
260
  }
273
261
 
274
262
  /** The `part` a node was authored with, or `""` — the only thing this adapter asks about a node. */
275
- function partOf(def: unknown): string {
276
- const attributes = (def as { attributes?: Record<string, unknown> } | null)?.attributes;
277
- const part = attributes?.["part"];
278
- return typeof part === "string" ? part : "";
263
+ function partOf(def: JxElement | string): string {
264
+ const part = isString(def) ? undefined : def.attributes?.["part"];
265
+ return isString(part) ? part : "";
279
266
  }
280
267
 
281
268
  /** The `$map` item a node was rendered inside, if it was rendered inside one. */
282
- function mapItem(state: JxScope | undefined): Record<string, unknown> | null {
283
- const map = state?.["$map"] as { item?: unknown } | undefined;
284
- const item = map?.item;
285
- return item !== null && typeof item === "object" ? (item as Record<string, unknown>) : null;
269
+ function mapItem(state: JxScope | undefined): JsonObject | null {
270
+ const map = state?.["$map"];
271
+ const item = isJsonObject(map) ? map["item"] : undefined;
272
+ return isJsonObject(item) ? item : null;
286
273
  }
287
274
 
288
275
  /** A string field off a `$map` item, or `""`. */
289
- function itemString(item: Record<string, unknown> | null, field: string): string {
276
+ function itemString(item: JsonObject | null, field: string): string {
290
277
  const value = item?.[field];
291
- return typeof value === "string" ? value : "";
278
+ return isString(value) ? value : "";
292
279
  }
293
280
 
294
281
  /** The scope's starting shape, before the first projection lands on it. */
@@ -332,7 +319,7 @@ export function mountSignalsSurface(
332
319
  actions: SignalsActions,
333
320
  paint: SignalIslandPainter,
334
321
  ): SignalsSurfaceHandle {
335
- const scope = reactive<SignalsScope>({
322
+ const scope: SignalsScope = reactive<SignalsScope>({
336
323
  ...emptyView(),
337
324
  ...actions,
338
325
  /* The picker never rests on what was picked. A controlled input is authoritative only while
@@ -346,7 +333,7 @@ export function mountSignalsSurface(
346
333
  actions.addSignal(type);
347
334
  scope.addValue = "";
348
335
  },
349
- }) as SignalsScope;
336
+ });
350
337
  project(scope, view);
351
338
 
352
339
  /**
@@ -424,8 +411,7 @@ export function mountSignalsSurface(
424
411
  whether this handle is still wanted — answering no would start a second mount racing the
425
412
  first. Once mounted, the question is whether the root is still where it was put: a Navigator
426
413
  that painted another panel cleared this document out from under it. */
427
- attached: () =>
428
- !disposed && (mounted === null || (mounted.root as Node).parentNode === container),
414
+ attached: () => !disposed && (mounted === null || mounted.root.parentNode === container),
429
415
  dispose() {
430
416
  disposed = true;
431
417
  mounted?.dispose();
@@ -26,10 +26,9 @@
26
26
  import { reactive } from "../reactivity";
27
27
  import { mountSurface, registerSurface } from "../ui/surface";
28
28
  import stylebookLayersDoc from "./panel-stylebook-layers.json";
29
- import type { JxDocument } from "@jxsuite/schema/types";
30
29
  import type { SurfaceHandle } from "../ui/surface";
31
30
 
32
- registerSurface("panel-stylebook-layers", stylebookLayersDoc as unknown as JxDocument);
31
+ registerSurface("panel-stylebook-layers", stylebookLayersDoc);
33
32
 
34
33
  /**
35
34
  * One line of the catalogue, as the document draws it. Every field is a value: no records, no
@@ -91,8 +90,7 @@ export interface StylebookLayersSurfaceHandle {
91
90
  }
92
91
 
93
92
  /** The scope the document reads: the projection, plus the one thing a row can ask for. */
94
- interface StylebookLayersScope
95
- extends Record<string, unknown>, StylebookLayersValues, StylebookLayersActions {}
93
+ interface StylebookLayersScope extends StylebookLayersValues, StylebookLayersActions {}
96
94
 
97
95
  /** Write a projection into the scope. */
98
96
  function project(scope: StylebookLayersScope, values: StylebookLayersValues): void {
@@ -116,13 +114,13 @@ export function mountStylebookLayersSurface(
116
114
  values: StylebookLayersValues,
117
115
  actions: StylebookLayersActions,
118
116
  ): StylebookLayersSurfaceHandle {
119
- const scope = reactive<StylebookLayersScope>({
117
+ const scope: StylebookLayersScope = reactive<StylebookLayersScope>({
120
118
  hasVariables: false,
121
119
  rows: [],
122
120
  selectRow: actions.selectRow,
123
121
  tab: "elements",
124
122
  variables: [],
125
- }) as StylebookLayersScope;
123
+ });
126
124
  project(scope, values);
127
125
 
128
126
  let mounted: SurfaceHandle | null = null;
@@ -141,8 +139,7 @@ export function mountStylebookLayersSurface(
141
139
  mount racing the first. Once mounted, the question is whether the root is still where it was
142
140
  put: a Navigator that painted another panel, or the Outline's own lit branch, cleared this
143
141
  document out from under it. */
144
- connected: () =>
145
- !disposed && (mounted === null || (mounted.root as Node).parentNode === container),
142
+ connected: () => !disposed && (mounted === null || mounted.root.parentNode === container),
146
143
  dispose() {
147
144
  disposed = true;
148
145
  mounted?.dispose();