@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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://jxsuite.com/schema/v1",
3
3
  "$id": "StudioRail",
4
- "$description": "The Navigator rail: a rendering of the panel registry. The adapter hands in `groups`, every rail-able panel grouped by level with its selected state and badge, and `settingsVisible`/`settingsOpen` for the foot's gear. Nothing here is a list of panels. Each button prints its record's short `railLabel` under the glyph, falling back to `title`, and carries the full `title` as its accessible name and tooltip: the visible words lead the name a reader hears (WCAG 2.5.3), and the tooltip restores what a short label leaves out.",
4
+ "$description": "The Navigator rail: a rendering of the panel registry. The adapter hands in `groups`, every rail-able panel grouped by level with its selected state and badge, and, for the foot, `libraryVisible`/`libraryOpen` for the Library button and `settingsVisible`/`settingsOpen` for the gear. Nothing here is a list of panels. Each button prints its record's short `railLabel` under the glyph, falling back to `title`, and carries the full `title` as its accessible name and tooltip: the visible words lead the name a reader hears (WCAG 2.5.3), and the tooltip restores what a short label leaves out.",
5
5
  "tagName": "div",
6
6
  "attributes": {
7
7
  "part": "rail"
@@ -162,94 +162,147 @@
162
162
  "attributes": {
163
163
  "part": "foot"
164
164
  },
165
- "$switch": {
166
- "$ref": "#/state/settingsVisible"
167
- },
168
- "cases": {
169
- "true": {
170
- "tagName": "jx-action-button",
171
- "$props": {
172
- "label": "Settings",
173
- "hint": "Settings",
174
- "icon": "gear",
175
- "stacked": true,
176
- "haspopup": "menu",
177
- "expanded": {
178
- "$ref": "#/state/settingsOpen"
179
- }
165
+ "children": [
166
+ {
167
+ "$switch": {
168
+ "$ref": "#/state/libraryVisible"
180
169
  },
170
+ "tagName": "div",
181
171
  "attributes": {
182
- "data-rail-menu": "settings",
183
- "data-expanded": "${state.settingsOpen ? '' : null}"
172
+ "part": "foot-library"
184
173
  },
185
- "onclick": {
186
- "$prototype": "Function",
187
- "body": [
188
- {
189
- "operator": "call",
190
- "target": {
191
- "$ref": "#/state/openSettings"
192
- },
193
- "value": [
174
+ "cases": {
175
+ "true": {
176
+ "tagName": "jx-action-button",
177
+ "$props": {
178
+ "label": "Library",
179
+ "hint": "Library",
180
+ "icon": "books",
181
+ "stacked": true,
182
+ "selected": {
183
+ "$ref": "#/state/libraryOpen"
184
+ }
185
+ },
186
+ "attributes": {
187
+ "data-rail-action": "library.open"
188
+ },
189
+ "onclick": {
190
+ "$prototype": "Function",
191
+ "body": [
194
192
  {
195
- "$ref": "event#/currentTarget"
193
+ "operator": "call",
194
+ "target": {
195
+ "$ref": "#/state/openLibrary"
196
+ },
197
+ "value": []
196
198
  }
197
199
  ]
198
- }
199
- ]
200
+ },
201
+ "children": [
202
+ {
203
+ "tagName": "span",
204
+ "textContent": "Library"
205
+ }
206
+ ]
207
+ }
208
+ }
209
+ },
210
+ {
211
+ "tagName": "div",
212
+ "attributes": {
213
+ "part": "foot-settings"
200
214
  },
201
- "onkeydown": {
202
- "$prototype": "Function",
203
- "body": [
204
- {
205
- "$switch": {
206
- "$ref": "event#/key"
207
- },
208
- "cases": {
209
- "ArrowUp": [
210
- {
211
- "operator": "call",
212
- "target": {
213
- "$ref": "#/state/openSettings"
214
- },
215
- "value": [
215
+ "$switch": {
216
+ "$ref": "#/state/settingsVisible"
217
+ },
218
+ "cases": {
219
+ "true": {
220
+ "tagName": "jx-action-button",
221
+ "$props": {
222
+ "label": "Settings",
223
+ "hint": "Settings",
224
+ "icon": "gear",
225
+ "stacked": true,
226
+ "haspopup": "menu",
227
+ "expanded": {
228
+ "$ref": "#/state/settingsOpen"
229
+ }
230
+ },
231
+ "attributes": {
232
+ "data-rail-menu": "settings",
233
+ "data-expanded": "${state.settingsOpen ? '' : null}"
234
+ },
235
+ "onclick": {
236
+ "$prototype": "Function",
237
+ "body": [
238
+ {
239
+ "operator": "call",
240
+ "target": {
241
+ "$ref": "#/state/openSettings"
242
+ },
243
+ "value": [
244
+ {
245
+ "$ref": "event#/currentTarget"
246
+ }
247
+ ]
248
+ }
249
+ ]
250
+ },
251
+ "onkeydown": {
252
+ "$prototype": "Function",
253
+ "body": [
254
+ {
255
+ "$switch": {
256
+ "$ref": "event#/key"
257
+ },
258
+ "cases": {
259
+ "ArrowUp": [
260
+ {
261
+ "operator": "call",
262
+ "target": {
263
+ "$ref": "#/state/openSettings"
264
+ },
265
+ "value": [
266
+ {
267
+ "$ref": "event#/currentTarget"
268
+ }
269
+ ]
270
+ },
216
271
  {
217
- "$ref": "event#/currentTarget"
272
+ "preventDefault": true
218
273
  }
219
- ]
220
- },
221
- {
222
- "preventDefault": true
223
- }
224
- ],
225
- "ArrowDown": [
226
- {
227
- "operator": "call",
228
- "target": {
229
- "$ref": "#/state/openSettings"
230
- },
231
- "value": [
274
+ ],
275
+ "ArrowDown": [
276
+ {
277
+ "operator": "call",
278
+ "target": {
279
+ "$ref": "#/state/openSettings"
280
+ },
281
+ "value": [
282
+ {
283
+ "$ref": "event#/currentTarget"
284
+ }
285
+ ]
286
+ },
232
287
  {
233
- "$ref": "event#/currentTarget"
288
+ "preventDefault": true
234
289
  }
235
290
  ]
236
- },
237
- {
238
- "preventDefault": true
239
291
  }
240
- ]
292
+ }
293
+ ]
294
+ },
295
+ "children": [
296
+ {
297
+ "tagName": "span",
298
+ "textContent": "Settings"
241
299
  }
242
- }
243
- ]
244
- },
245
- "children": [
246
- {
247
- "tagName": "span",
248
- "textContent": "Settings"
300
+ ]
249
301
  }
250
- ]
302
+ }
251
303
  }
252
- }
304
+ ],
305
+ "$description": "The two rail buttons that open no Navigator panel: the Library, which is a canvas tab rather than a panel and so sits with the other exception, above the gear."
253
306
  }
254
307
  ]
255
308
  }
@@ -14,9 +14,11 @@
14
14
  * record's `railLabel` when it declares one (Source Control's is "Source", because the full title
15
15
  * ellipsed in the 48px label box), and the full `title` stays the accessible name and the tooltip.
16
16
  *
17
- * The foot is the ⚙ **Settings** menu, a menu button rendered from the `settings/menu` placement: a
18
- * record joins the gear by declaring the placement and there is nothing here to update in step.
19
- * With no registry, or one that declares nothing for it, there is no foot.
17
+ * The foot holds the two buttons that open no Navigator panel. **Library** runs `library.open`: the
18
+ * Library is a canvas tab, not a panel, and its button is pressed while that tab is the focused
19
+ * one. Below it is the ⚙ **Settings** menu, a menu button rendered from the `settings/menu`
20
+ * placement: a record joins the gear by declaring the placement and there is nothing here to update
21
+ * in step. With no registry, or one that declares nothing for either, the foot is empty.
20
22
  *
21
23
  * What this adapter owns is the projection and the two decisions: which panel a button toggles, and
22
24
  * where the gear's menu opens. The scope is reactive, so the surface follows `shell` through one
@@ -31,6 +33,7 @@ import { refreshGitStatus } from "../panels/git-panel";
31
33
  import { panelContext, railGroups } from "../panels/panel-registry";
32
34
  import { registerNavigatorPanels } from "../panels/navigator-panels";
33
35
  import { activeRegistry } from "../commands/active-registry";
36
+ import { runActiveReported } from "../commands/run-reported";
34
37
  import {
35
38
  dismissSettingsMenu,
36
39
  isSettingsMenuOpen,
@@ -38,14 +41,15 @@ import {
38
41
  SETTINGS_MENU_PLACEMENT,
39
42
  } from "../panels/settings-menu";
40
43
  import { mountSurface, registerSurface } from "../ui/surface";
44
+ import { libraryTabId } from "../browse/library-source";
45
+ import { activeTab } from "../workspace/workspace";
41
46
  import railDoc from "./rail.json";
42
47
 
43
48
  import type { EffectScope } from "@vue/reactivity";
44
- import type { JxDocument } from "@jxsuite/schema/types";
45
49
  import type { PanelRecord } from "../panels/panel-registry";
46
50
  import type { SurfaceHandle } from "../ui/surface";
47
51
 
48
- registerSurface("rail", railDoc as unknown as JxDocument);
52
+ registerSurface("rail", railDoc);
49
53
 
50
54
  /** One rail button, as the surface reads it. */
51
55
  interface RailButton {
@@ -67,12 +71,21 @@ interface RailGroupProjection {
67
71
  panels: RailButton[];
68
72
  }
69
73
 
70
- interface RailScope extends Record<string, unknown> {
74
+ /** The parts of the rail's scope recomputed from the registry and the shell on every render. */
75
+ type RailProjection = Pick<
76
+ RailScope,
77
+ "groups" | "libraryOpen" | "libraryVisible" | "settingsVisible"
78
+ >;
79
+
80
+ interface RailScope {
71
81
  groups: RailGroupProjection[];
72
82
  settingsVisible: boolean;
73
83
  settingsOpen: boolean;
84
+ libraryVisible: boolean;
85
+ libraryOpen: boolean;
86
+ openLibrary: () => void;
74
87
  toggle: (id: string) => void;
75
- openSettings: (anchor: unknown) => void;
88
+ openSettings: (anchor: EventTarget | null) => void;
76
89
  }
77
90
 
78
91
  let _scope: EffectScope | null = null;
@@ -104,7 +117,7 @@ export function toggleRailPanel(panel: PanelRecord): void {
104
117
  }
105
118
 
106
119
  /** The rail, as the surface reads it, from the registry and the shell as they stand now. */
107
- function project(): { groups: RailGroupProjection[]; settingsVisible: boolean } {
120
+ function project(): RailProjection {
108
121
  const ctx = panelContext();
109
122
  const groups = railGroups(ctx).map((group, index) => ({
110
123
  dividerAbove: index > 0,
@@ -122,14 +135,25 @@ function project(): { groups: RailGroupProjection[]; settingsVisible: boolean }
122
135
  const registry = activeRegistry();
123
136
  const settingsVisible =
124
137
  registry !== null && registry.forPlacement(SETTINGS_MENU_PLACEMENT).length > 0;
125
- return { groups, settingsVisible };
138
+ const libraryVisible =
139
+ registry?.get(LIBRARY_COMMAND) !== undefined && registry.isVisible(LIBRARY_COMMAND);
140
+ const libraryOpen = activeTab.value?.id === libraryTabId();
141
+ return { groups, libraryOpen, libraryVisible, settingsVisible };
126
142
  }
127
143
 
144
+ /** The command the Library button runs: the record decides when it can, and what opening means. */
145
+ const LIBRARY_COMMAND = "library.open";
146
+
128
147
  /** The reactive scope the surface reads, made once. */
129
148
  function state(): RailScope {
130
- _state ??= reactive({
149
+ _state ??= reactive<RailScope>({
131
150
  groups: [],
132
- openSettings: (anchor: unknown) => {
151
+ libraryOpen: false,
152
+ libraryVisible: false,
153
+ openLibrary: () => {
154
+ void runActiveReported(LIBRARY_COMMAND, undefined, "Navigator rail");
155
+ },
156
+ openSettings: (anchor: EventTarget | null) => {
133
157
  if (!(anchor instanceof HTMLElement)) {
134
158
  return;
135
159
  }
@@ -151,7 +175,7 @@ function state(): RailScope {
151
175
  toggleRailPanel(panel);
152
176
  }
153
177
  },
154
- }) as RailScope;
178
+ });
155
179
  return _state;
156
180
  }
157
181
 
@@ -161,6 +185,8 @@ export function renderActivityBar(): void {
161
185
  const next = project();
162
186
  scope.groups = next.groups;
163
187
  scope.settingsVisible = next.settingsVisible;
188
+ scope.libraryVisible = next.libraryVisible;
189
+ scope.libraryOpen = next.libraryOpen;
164
190
  scope.settingsOpen = isSettingsMenuOpen();
165
191
  ensureMounted();
166
192
  }
@@ -25,16 +25,9 @@ import { reactive } from "../reactivity";
25
25
  import { mountSurface, registerSurface } from "../ui/surface";
26
26
  import referenceDoc from "./reference-field.json";
27
27
 
28
- import type { JxDocument } from "@jxsuite/schema/types";
29
- import type { SurfaceHandle } from "../ui/surface";
28
+ import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
30
29
 
31
- registerSurface("reference-field", referenceDoc as unknown as JxDocument);
32
-
33
- /** One row of the picker: an entry id, the empty row, or the value that is not on disk. */
34
- export interface ReferenceChoice {
35
- value: string;
36
- label: string;
37
- }
30
+ registerSurface("reference-field", referenceDoc);
38
31
 
39
32
  /** What the field says right now. Every field is the flow's, never a state it derives. */
40
33
  export interface ReferenceFieldView {
@@ -50,7 +43,7 @@ export interface ReferenceFieldView {
50
43
  /** The entry id the field holds, as a string. */
51
44
  value: string;
52
45
  /** The picker's rows, in the order they are offered. Empty on a text field. */
53
- options: ReferenceChoice[];
46
+ options: SurfaceOption[];
54
47
  /** True while the read is in flight: the picker is inert and says so in its one row. */
55
48
  disabled: boolean;
56
49
  /** A sentence under the control. Empty draws none. */
@@ -82,8 +75,7 @@ export interface ReferenceFieldSurfaceHandle {
82
75
  dispose: () => void;
83
76
  }
84
77
 
85
- interface ReferenceScope
86
- extends Record<string, unknown>, ReferenceFieldView, ReferenceFieldActions {}
78
+ interface ReferenceScope extends ReferenceFieldView, ReferenceFieldActions {}
87
79
 
88
80
  /** The view a freshly mounted surface starts on: a picker that has not been told anything. */
89
81
  function emptyView(): ReferenceFieldView {
@@ -112,7 +104,7 @@ export function mountReferenceFieldSurface(
112
104
  actions: ReferenceFieldActions,
113
105
  ): ReferenceFieldSurfaceHandle {
114
106
  host.textContent = "";
115
- const scope = reactive<ReferenceScope>({ ...emptyView(), ...actions }) as ReferenceScope;
107
+ const scope: ReferenceScope = reactive<ReferenceScope>({ ...emptyView(), ...actions });
116
108
 
117
109
  /** `null` while a mount is in flight — which is a standing surface, not a missing one. */
118
110
  let handle: SurfaceHandle | null = null;
@@ -121,13 +113,17 @@ export function mountReferenceFieldSurface(
121
113
 
122
114
  const mount = (): Promise<HTMLElement> =>
123
115
  mountSurface("reference-field", scope, host).then((mounted) => {
116
+ /* SAFETY: `reference-field.json`'s root definition carries `tagName: "div"`, so the runtime
117
+ mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare
118
+ string. */
119
+ const root = mounted.root as HTMLElement;
124
120
  mounting = false;
125
121
  if (disposed) {
126
122
  mounted.dispose();
127
- return mounted.root as HTMLElement;
123
+ return root;
128
124
  }
129
125
  handle = mounted;
130
- return mounted.root as HTMLElement;
126
+ return root;
131
127
  });
132
128
 
133
129
  const ready = mount();
@@ -19,7 +19,7 @@
19
19
  * Settings › Data Shapes edits the project's `$defs` and this edits a content type's `schema`, and
20
20
  * they are the same object drawn with the same six controls per row — so the two documents are the
21
21
  * same card inside a different shell, and the views are one set of types. A second declaration of
22
- * {@link SchemaFieldView} would be the point at which the two cards start to drift, one field at a
22
+ * {@link DefsFieldView} would be the point at which the two cards start to drift, one field at a
23
23
  * time, with nothing failing.
24
24
  *
25
25
  * @docs studio/data/tables
@@ -29,28 +29,18 @@ import { reactive } from "../reactivity";
29
29
  import { mountSurface, registerSurface } from "../ui/surface";
30
30
  import builderDoc from "./schema-builder.json";
31
31
 
32
- import type { JxDocument } from "@jxsuite/schema/types";
33
- import type { SurfaceHandle } from "../ui/surface";
34
- import type { DefsChoice, DefsFieldView, NestedFieldView } from "./settings-defs";
32
+ import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
33
+ import type { DefsFieldView } from "./settings-defs";
35
34
 
36
- registerSurface("schema-builder", builderDoc as unknown as JxDocument);
37
-
38
- /** One row of a picker: a field type, a format, or a reference target. */
39
- export type SchemaFieldChoice = DefsChoice;
40
-
41
- /** One field of the object being edited, as the document draws it. */
42
- export type SchemaFieldView = DefsFieldView;
43
-
44
- /** One child of an `object` field. It carries its parent — a nested `$map` shadows `$map.item`. */
45
- export type NestedSchemaFieldView = NestedFieldView;
35
+ registerSurface("schema-builder", builderDoc);
46
36
 
47
37
  /** Everything the document draws, as one value. */
48
38
  export interface SchemaBuilderView {
49
- fields: SchemaFieldView[];
50
- typeOptions: SchemaFieldChoice[];
51
- formatOptions: SchemaFieldChoice[];
39
+ fields: DefsFieldView[];
40
+ typeOptions: SurfaceOption[];
41
+ formatOptions: SurfaceOption[];
52
42
  /** The content types a reference field can point at. Empty draws no target picker. */
53
- targets: SchemaFieldChoice[];
43
+ targets: SurfaceOption[];
54
44
  /** Whether the foot of the list is offering the add button or the add form. */
55
45
  addState: "closed" | "open";
56
46
  addName: string;
@@ -94,7 +84,7 @@ export interface SchemaBuilderSurfaceHandle {
94
84
  dispose: () => void;
95
85
  }
96
86
 
97
- interface BuilderScope extends Record<string, unknown>, SchemaBuilderView, SchemaBuilderActions {}
87
+ interface BuilderScope extends SchemaBuilderView, SchemaBuilderActions {}
98
88
 
99
89
  /** The view a freshly mounted surface starts on: no fields, and no add form. */
100
90
  function emptyView(): SchemaBuilderView {
@@ -124,7 +114,7 @@ export function mountSchemaBuilderSurface(
124
114
  actions: SchemaBuilderActions,
125
115
  ): SchemaBuilderSurfaceHandle {
126
116
  host.textContent = "";
127
- const scope = reactive<BuilderScope>({ ...emptyView(), ...actions }) as BuilderScope;
117
+ const scope: BuilderScope = reactive<BuilderScope>({ ...emptyView(), ...actions });
128
118
 
129
119
  /** `null` while a mount is in flight — which is a standing surface, not a missing one. */
130
120
  let handle: SurfaceHandle | null = null;
@@ -133,13 +123,17 @@ export function mountSchemaBuilderSurface(
133
123
 
134
124
  const mount = (): Promise<HTMLElement> =>
135
125
  mountSurface("schema-builder", scope, host).then((mounted) => {
126
+ /* SAFETY: `schema-builder.json`'s root definition carries `tagName: "div"`, so the runtime
127
+ mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare
128
+ string. */
129
+ const root = mounted.root as HTMLElement;
136
130
  mounting = false;
137
131
  if (disposed) {
138
132
  mounted.dispose();
139
- return mounted.root as HTMLElement;
133
+ return root;
140
134
  }
141
135
  handle = mounted;
142
- return mounted.root as HTMLElement;
136
+ return root;
143
137
  });
144
138
 
145
139
  const ready = mount();
@@ -29,14 +29,15 @@
29
29
  * @docs extending/ui-kit
30
30
  */
31
31
 
32
+ import { isJsonObject, isString } from "@jxsuite/schema/guards";
32
33
  import { reactive } from "../reactivity";
33
34
  import { mountSurface, registerSurface } from "../ui/surface";
34
35
  import schemaFormDoc from "./schema-form.json";
35
- import type { SurfaceHandle } from "../ui/surface";
36
+ import type { KeyedLabel, SurfaceHandle, SurfaceOption } from "../ui/surface";
36
37
  import type { JxScope } from "@jxsuite/runtime/types";
37
- import type { JxDocument, JxElement } from "@jxsuite/schema/types";
38
+ import type { JxElement } from "@jxsuite/schema/types";
38
39
 
39
- registerSurface("schema-form", schemaFormDoc as unknown as JxDocument);
40
+ registerSurface("schema-form", schemaFormDoc);
40
41
 
41
42
  /** Which of the nine controls a row draws. The flow picks it; the document switches on it. */
42
43
  export type SchemaFormFieldKind =
@@ -50,12 +51,6 @@ export type SchemaFormFieldKind =
50
51
  | "rows"
51
52
  | "control";
52
53
 
53
- /** A control a row offers as a closed list, in the shape the kit's select reads. */
54
- export interface SchemaFormOption {
55
- value: string;
56
- label: string;
57
- }
58
-
59
54
  /** One cell of an array-of-objects row: a single declared property of one item. */
60
55
  export interface SchemaFormCellView {
61
56
  /** `${field}/${row}/${key}` — the cell's reconcile identity, and a control host's id. */
@@ -70,7 +65,7 @@ export interface SchemaFormCellView {
70
65
  kind: "text" | "select" | "checkbox" | "number" | "control";
71
66
  value: string;
72
67
  checked: boolean;
73
- options: SchemaFormOption[];
68
+ options: SurfaceOption[];
74
69
  }
75
70
 
76
71
  /** One item of an array-of-objects field. */
@@ -84,12 +79,6 @@ export interface SchemaFormRowView {
84
79
  cells: SchemaFormCellView[];
85
80
  }
86
81
 
87
- /** A read of the shape a JSON field currently holds: `title: string`. */
88
- export interface SchemaFormChipView {
89
- key: string;
90
- label: string;
91
- }
92
-
93
82
  /** One property of the schema, as the document draws it. Every field is already decided. */
94
83
  export interface SchemaFormFieldView {
95
84
  /** The schema property key: this row's reconcile identity, and what every callback names. */
@@ -106,7 +95,7 @@ export interface SchemaFormFieldView {
106
95
  checked: boolean;
107
96
  placeholder: string;
108
97
  /** Choices for `select`, suggestions for `pointer`. */
109
- options: SchemaFormOption[];
98
+ options: SurfaceOption[];
110
99
  /** Whether the pointer rung has anything to suggest; with none it is a field alone. */
111
100
  hasOptions: boolean;
112
101
  /** Bounds off the property schema, so the control refuses out-of-range input itself. */
@@ -138,7 +127,7 @@ export interface SchemaFormFieldView {
138
127
  /** The position permits exactly one rung, so the chip states it and refuses to open. */
139
128
  sourceLocked: boolean;
140
129
  /** The chips above a JSON field, naming the shape it holds. */
141
- chips: SchemaFormChipView[];
130
+ chips: KeyedLabel[];
142
131
  hasChips: boolean;
143
132
  rows: SchemaFormRowView[];
144
133
  /** The add button's accessible name on an array-of-objects field. */
@@ -179,7 +168,7 @@ export interface SchemaFormSurface {
179
168
  /** A control host the document drew, reported as the runtime created it. */
180
169
  export type ControlHostSink = (id: string, host: HTMLElement) => void;
181
170
 
182
- interface SchemaFormScope extends Record<string, unknown>, SchemaFormView, SchemaFormActions {
171
+ interface SchemaFormScope extends SchemaFormView, SchemaFormActions {
183
172
  /** The Mixed text placeholder, held in state because the literal is itself a template. */
184
173
  templatePlaceholder: string;
185
174
  }
@@ -194,20 +183,21 @@ interface SchemaFormScope extends Record<string, unknown>, SchemaFormView, Schem
194
183
  * node that needs filling.
195
184
  */
196
185
  function controlIdOf(part: string, state: JxScope | undefined): string {
197
- const item = (state?.["$map"] as { item?: Record<string, unknown> } | undefined)?.item;
186
+ const map = state?.["$map"];
187
+ const item = isJsonObject(map) && isJsonObject(map["item"]) ? map["item"] : undefined;
198
188
  const id =
199
189
  part === "control-host"
200
190
  ? item?.["key"]
201
191
  : part === "cell-control-host"
202
192
  ? item?.["id"]
203
193
  : undefined;
204
- return typeof id === "string" ? id : "";
194
+ return isString(id) ? id : "";
205
195
  }
206
196
 
207
197
  /** A node definition's `part`, as written in the document. */
208
198
  function partOf(def: JxElement | string): string {
209
- const part = typeof def === "string" ? undefined : def.attributes?.["part"];
210
- return typeof part === "string" ? part : "";
199
+ const part = isString(def) ? undefined : def.attributes?.["part"];
200
+ return isString(part) ? part : "";
211
201
  }
212
202
 
213
203
  /**
@@ -226,11 +216,11 @@ export function createSchemaFormSurface(
226
216
  ): SchemaFormSurface {
227
217
  const host = document.createElement("div");
228
218
  host.style.display = "contents";
229
- const scope = reactive({
219
+ const scope: SchemaFormScope = reactive<SchemaFormScope>({
230
220
  ...view,
231
221
  ...actions,
232
222
  templatePlaceholder: "${state.…}",
233
- }) as SchemaFormScope;
223
+ });
234
224
 
235
225
  /** `null` while a mount is in flight — which is a standing surface, not a missing one. */
236
226
  let handle: SurfaceHandle | null = null;
@@ -28,10 +28,9 @@ import { reactive } from "../reactivity";
28
28
  import { mountSurface, registerSurface } from "../ui/surface";
29
29
  import secretDoc from "./secret-field.json";
30
30
 
31
- import type { JxDocument } from "@jxsuite/schema/types";
32
31
  import type { SurfaceHandle } from "../ui/surface";
33
32
 
34
- registerSurface("secret-field", secretDoc as unknown as JxDocument);
33
+ registerSurface("secret-field", secretDoc);
35
34
 
36
35
  /** What the field says right now. Every field is the flow's, never a state it derives. */
37
36
  export interface SecretFieldView {
@@ -65,7 +64,7 @@ export interface SecretFieldSurfaceHandle {
65
64
  dispose: () => void;
66
65
  }
67
66
 
68
- interface SecretScope extends Record<string, unknown>, SecretFieldView, SecretFieldActions {
67
+ interface SecretScope extends SecretFieldView, SecretFieldActions {
69
68
  /**
70
69
  * What the field's value is bound to, and the whole of the "never render a secret back" rule.
71
70
  *
@@ -92,7 +91,7 @@ export function mountSecretFieldSurface(
92
91
  actions: SecretFieldActions,
93
92
  ): SecretFieldSurfaceHandle {
94
93
  host.textContent = "";
95
- const scope = reactive<SecretScope>({ ...emptyView(), ...actions, shown: "" }) as SecretScope;
94
+ const scope: SecretScope = reactive<SecretScope>({ ...emptyView(), ...actions, shown: "" });
96
95
 
97
96
  /** `null` while a mount is in flight — which is a standing surface, not a missing one. */
98
97
  let handle: SurfaceHandle | null = null;
@@ -101,13 +100,17 @@ export function mountSecretFieldSurface(
101
100
 
102
101
  const mount = (): Promise<HTMLElement> =>
103
102
  mountSurface("secret-field", scope, host).then((mounted) => {
103
+ /* SAFETY: `secret-field.json`'s root definition carries `tagName: "div"`, so the runtime
104
+ mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare
105
+ string. */
106
+ const root = mounted.root as HTMLElement;
104
107
  mounting = false;
105
108
  if (disposed) {
106
109
  mounted.dispose();
107
- return mounted.root as HTMLElement;
110
+ return root;
108
111
  }
109
112
  handle = mounted;
110
- return mounted.root as HTMLElement;
113
+ return root;
111
114
  });
112
115
 
113
116
  const ready = mount();