@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
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Which tabs hold typing in a source buffer that no save has kept yet.
3
+ *
4
+ * A Monaco buffer reaches its document on a debounce, and a buffer whose text does not parse never
5
+ * reaches it at all. `tab.doc.dirty` deliberately says nothing about either: it is the DOCUMENT's
6
+ * flag, and the close and quit gates ask the buffers themselves (`tabBufferUnsaved`). Save's
7
+ * enablement needs the union, and needs it REACTIVELY, so the Command Bar's Save lights up on the
8
+ * first keystroke rather than when the commit lands. The buffers' own flag is a closure variable no
9
+ * effect can track, so the keystroke handlers note the tab here as well.
10
+ *
11
+ * Kept out of `services/monaco-buffer.ts` because `commands/live-context.ts` reads it, and
12
+ * everything that module reaches has to load in a bare Bun process with no DOM.
13
+ */
14
+ import { reactive } from "../reactivity";
15
+
16
+ const typing = reactive(new Set<string>());
17
+
18
+ /** A keystroke in one of `tabId`'s source buffers. */
19
+ export function noteTyping(tabId: string): void {
20
+ typing.add(tabId);
21
+ }
22
+
23
+ /** A save kept everything the buffers held, or the tab is gone. */
24
+ export function clearTyping(tabId: string): void {
25
+ typing.delete(tabId);
26
+ }
27
+
28
+ /** Whether `tabId` holds typing no save has kept. Tracked by effects. */
29
+ export function hasTyping(tabId: string): boolean {
30
+ return typing.has(tabId);
31
+ }
package/src/types.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  import type { CollabHandle } from "@jxsuite/collab/provider";
3
3
  import type {
4
4
  ContentTypeSchema,
5
+ JsonObject,
5
6
  JxMutableNode,
6
7
  JxPath,
7
8
  ProjectConfig,
@@ -39,6 +40,7 @@ import type {
39
40
  ImportReadyEvent,
40
41
  ImportSiteOptions,
41
42
  ImportSiteSummary,
43
+ JsonValue,
42
44
  PackageInfo,
43
45
  PackageOpResult,
44
46
  PackageVersionInfo,
@@ -47,9 +49,8 @@ import type {
47
49
  RecentProjectEntry,
48
50
  ReferencesResult,
49
51
  RenameResult,
50
- SecretsSetRequest,
52
+ KeyValuePatch,
51
53
  SecretsSetResponse,
52
- SettingsPatch,
53
54
  StarterInfo,
54
55
  UploadResult,
55
56
  } from "@jxsuite/protocol";
@@ -80,7 +81,6 @@ export type {
80
81
  DataRowsResult,
81
82
  DataRowUpdate,
82
83
  DirEntry,
83
- ErrorBody,
84
84
  ExtensionCatalogEntry,
85
85
  ExtensionContributionInfo,
86
86
  ExtensionProjectBlock,
@@ -109,9 +109,8 @@ export type {
109
109
  ReferencesResult,
110
110
  RenameResult,
111
111
  SecretsListResponse,
112
- SecretsSetRequest,
112
+ KeyValuePatch,
113
113
  SecretsSetResponse,
114
- SettingsPatch,
115
114
  StarterInfo,
116
115
  } from "@jxsuite/protocol";
117
116
 
@@ -291,6 +290,21 @@ export interface SitePreviewResult extends SiteBuildResult {
291
290
  */
292
291
  export type FsResyncReason = "reconnect" | "commit" | "open";
293
292
 
293
+ /**
294
+ * One request to a format class's capability (`POST /__studio/format`, or the desktop RPC of the
295
+ * same name): `parse` reads `source` into a Jx document, `serialize` writes `doc` back out as text,
296
+ * and the answer is that document or that text. The backend refuses an action the format does not
297
+ * declare, so `action` stays an open name.
298
+ */
299
+ export interface FormatActionRequest {
300
+ action: string;
301
+ format: string;
302
+ source?: string | undefined;
303
+ /** The document to serialize, merged with its frontmatter. */
304
+ doc?: JxMutableNode | undefined;
305
+ options?: { mode?: string | undefined; frontmatter?: boolean | undefined } | undefined;
306
+ }
307
+
294
308
  export interface StudioPlatform {
295
309
  id: string;
296
310
  projectRoot: string;
@@ -464,8 +478,10 @@ export interface StudioPlatform {
464
478
  options?: { onResync?: (reason: FsResyncReason) => void },
465
479
  ) => () => void;
466
480
  discoverComponents: (dir?: string) => Promise<ComponentMeta[]>;
467
- addPackage: (name: string) => Promise<unknown>;
468
- removePackage: (name: string) => Promise<unknown>;
481
+ /* Resolves once the dependency is added (or removed) and rejects when it could not be. No caller
482
+ reads an answer, and the desktop RPC carries none. */
483
+ addPackage: (name: string) => Promise<void>;
484
+ removePackage: (name: string) => Promise<void>;
469
485
  listPackages: () => Promise<PackageInfo[]>;
470
486
  /**
471
487
  * Run `bun install` in the project root. Optional: platforms without a Bun-capable backend omit
@@ -493,7 +509,7 @@ export interface StudioPlatform {
493
509
  * section.
494
510
  */
495
511
  getAppInfo?: () => Promise<AppInfo>;
496
- codeService: (action: string, payload: unknown) => Promise<CodeServiceResult | null>;
512
+ codeService: (action: string, payload: JsonValue) => Promise<CodeServiceResult | null>;
497
513
  resolveSiteContext: (filePath: string) => Promise<{
498
514
  sitePath: string | null;
499
515
  projectConfig?: ProjectConfig;
@@ -535,7 +551,7 @@ export interface StudioPlatform {
535
551
  */
536
552
  fetchProjectSchemas?: () => Promise<ProjectSchemasResponse>;
537
553
  /** Invoke a format capability (parse/serialize) — { format, action, source?, doc?, options? }. */
538
- formatAction?: (payload: Record<string, unknown>) => Promise<unknown>;
554
+ formatAction?: (payload: FormatActionRequest) => Promise<JxMutableNode | string>;
539
555
  // ─── Data surface + secrets (owner console; specs/extensions.md §13) ────────
540
556
  // Optional as a family: backends without the connector data routes omit them all, and Studio
541
557
  // Hides the data grid and connection/push/test actions. Row CRUD is the ADMIN path — it
@@ -548,21 +564,21 @@ export interface StudioPlatform {
548
564
  dataPush?: (opts?: { connection?: string; dryRun?: boolean }) => Promise<DataPushResult>;
549
565
  /** Page a table's rows with introspected column metadata. */
550
566
  dataRows?: (query: DataRowsQuery) => Promise<DataRowsResult>;
551
- dataInsertRow?: (req: DataRowInsert) => Promise<{ row: Record<string, unknown> }>;
552
- dataUpdateRow?: (req: DataRowUpdate) => Promise<{ row: Record<string, unknown> }>;
567
+ dataInsertRow?: (req: DataRowInsert) => Promise<{ row: JsonObject }>;
568
+ dataUpdateRow?: (req: DataRowUpdate) => Promise<{ row: JsonObject }>;
553
569
  dataDeleteRow?: (req: DataRowDelete) => Promise<{ ok: boolean }>;
554
570
  /** Configured secret env-var NAMES — never values. */
555
571
  listSecrets?: () => Promise<string[]>;
556
572
  /** Write/remove secrets in the backend store (.dev.vars locally); names-only response. */
557
- setSecrets?: (req: SecretsSetRequest) => Promise<SecretsSetResponse>;
558
- fetchPluginSchema: (src: string, prototype?: string, base?: string) => Promise<unknown>;
573
+ setSecrets?: (req: KeyValuePatch) => Promise<SecretsSetResponse>;
574
+ fetchPluginSchema: (src: string, prototype?: string, base?: string) => Promise<JsonValue>;
559
575
  /**
560
576
  * Resolve a class-prototype config through the backend's `/__jx_resolve__` pipeline (with the
561
577
  * project's content types loaded) and return the parsed result. Used by the tab-bar's dynamic
562
578
  * route-param picker to enumerate ContentCollection entries. Optional: platforms without a
563
579
  * resolve backend omit it and the picker falls back to a plain fetch.
564
580
  */
565
- resolveClass?: (body: Record<string, unknown>) => Promise<unknown>;
581
+ resolveClass?: (body: JsonObject) => Promise<JsonValue>;
566
582
  gitStatus: () => Promise<GitStatusResult>;
567
583
  gitBranches: () => Promise<GitBranchesResult>;
568
584
  gitLog: (limit?: number) => Promise<GitLogEntry[]>;
@@ -816,7 +832,7 @@ export interface StudioPlatform {
816
832
  * injects credentials — an OAuth token on the cloud platform, the user's pasted API token locally
817
833
  * — so no secret ever rides in the request body.
818
834
  */
819
- cfApi?: (path: string, init?: { method?: string; body?: unknown }) => Promise<unknown>;
835
+ cfApi?: (path: string, init?: { method?: string; body?: unknown }) => Promise<JsonValue>;
820
836
  // ─── User settings (backend-persisted; undefined on dev-server) ─────────────
821
837
  /**
822
838
  * Read the user-level settings map (e.g. the AI connection parameters) from a backend store
@@ -834,7 +850,7 @@ export interface StudioPlatform {
834
850
  * held no settings could, and did, clear the credentials another window had just stored. It also
835
851
  * preserves keys this build does not know: one written by a newer version, or by hand.
836
852
  */
837
- patchSettings?: (patch: SettingsPatch) => Promise<Record<string, string>>;
853
+ patchSettings?: (patch: KeyValuePatch) => Promise<Record<string, string>>;
838
854
  /**
839
855
  * Be told when the backend store changes — by another window, or by hand. Returns the
840
856
  * unsubscribe.
@@ -937,5 +953,4 @@ export interface ProjectState {
937
953
  selectedPath: string | null;
938
954
  searchQuery: string;
939
955
  projectDirs?: string[];
940
- [key: string]: unknown;
941
956
  }
@@ -2,14 +2,14 @@
2
2
  /**
3
3
  * Ai-credentials-form.ts — reusable AI provider credentials form (key / model / endpoint).
4
4
  *
5
- * Embedded by every host that needs a provider configured — **Preferences › Assistant** (⌘,) and the
6
- * New Project modal's Import/Agent gates. All draft/model-list state lives inside the closure, so
7
- * multiple instances never share state. Persists via src/services/ai-settings.ts on Save.
5
+ * Embedded by every host that needs a provider configured — **Preferences › Assistant** (⌘,) and
6
+ * the New Project modal's Import/Agent gates. All draft/model-list state lives inside the closure,
7
+ * so multiple instances never share state. Persists via src/services/ai-settings.ts on Save.
8
8
  *
9
9
  * The interim `Assistant: Settings…` dialog that used to host it is deleted: a provider key is an
10
10
  * application setting, and the surface that owns application settings is also the one that can list
11
- * it and revoke it (§15). Nothing about this form changed for the move, which is the argument
12
- * for it having been a reusable form rather than a section of a dialog.
11
+ * it and revoke it (§15). Nothing about this form changed for the move, which is the argument for
12
+ * it having been a reusable form rather than a section of a dialog.
13
13
  *
14
14
  * This module is the FLOW; `surfaces/ai-credentials-form.json` is what it draws. It keeps the three
15
15
  * drafts, decides which credentials a listing is sent with, what Save persists and re-reads, and
@@ -19,8 +19,8 @@
19
19
  * `surfaces/ai-credentials-form.ts` for why that element is the mount point and why re-rendering
20
20
  * the gate cannot disturb it.
21
21
  *
22
- * @docs studio/ai
23
22
  * @license MIT
23
+ * @docs studio/ai
24
24
  */
25
25
 
26
26
  import { fetchAvailableModels, proxyModelsErrorMessage } from "../services/ai-models";
@@ -35,11 +35,8 @@ import {
35
35
  import { SETTINGS } from "../services/settings/definitions";
36
36
  import type { AiProvider } from "../services/ai-settings";
37
37
  import { createAiCredentialsSurface } from "../surfaces/ai-credentials-form";
38
- import type {
39
- AiCredentialsSurface,
40
- AiCredentialsView,
41
- CredentialsModelRow,
42
- } from "../surfaces/ai-credentials-form";
38
+ import type { AiCredentialsSurface, AiCredentialsView } from "../surfaces/ai-credentials-form";
39
+ import type { SurfaceOption } from "./surface";
43
40
 
44
41
  /** The blurb a host that says nothing gets. */
45
42
  const DEFAULT_INTRO =
@@ -231,7 +228,7 @@ export function createAiCredentialsForm(opts: AiCredentialsFormOptions): AiCrede
231
228
  modelsError = `${upstreamMessage} — type the model ID directly instead.`;
232
229
  }
233
230
  } catch (error: unknown) {
234
- modelsError = (error as Error).message || "Failed to fetch models";
231
+ modelsError = (error instanceof Error && error.message) || "Failed to fetch models";
235
232
  } finally {
236
233
  modelsLoading = false;
237
234
  opts.requestRender();
@@ -242,7 +239,7 @@ export function createAiCredentialsForm(opts: AiCredentialsFormOptions): AiCrede
242
239
  * The catalogue as rows — the list the combobox will draw, never a corpus it matches against. A
243
240
  * model with no name of its own is called by its id.
244
241
  */
245
- function rows(): CredentialsModelRow[] {
242
+ function rows(): SurfaceOption[] {
246
243
  return availableModels.map((model) => ({ label: model.name, value: model.id }));
247
244
  }
248
245
 
@@ -22,8 +22,8 @@
22
22
  * A closure factory (precedent: `createComposer`, `createAiCredentialsForm`) so two hosts never
23
23
  * share a loading flag or a failed-fetch record.
24
24
  *
25
- * @docs studio/ai
26
25
  * @license MIT
26
+ * @docs studio/ai
27
27
  */
28
28
 
29
29
  import {
@@ -146,8 +146,8 @@ export function createModelPicker(opts: ModelPickerOptions): ModelPicker {
146
146
  failure = "";
147
147
  attempted = credentials;
148
148
  fetchAvailableModels({ credentials, force })
149
- .catch((error: unknown) => {
150
- failure = (error as Error).message || "Failed to fetch models";
149
+ .catch((error) => {
150
+ failure = (error instanceof Error && error.message) || "Failed to fetch models";
151
151
  })
152
152
  .finally(() => {
153
153
  loading = false;
@@ -19,12 +19,15 @@
19
19
  * The dialog itself is `src/surfaces/cf-account-picker.json`, a `jx-dialog`; this module is the
20
20
  * flow around it. It used to be a lit template rendered through `showDialog`, with its own
21
21
  * `repaint()` re-rendering the whole body into the slot's parent whenever anything landed — the
22
- * surface is reactive now, so a listing that arrives late, or a refusal, changes only what it names.
22
+ * surface is reactive now, so a listing that arrives late, or a refusal, changes only what it
23
+ * names.
23
24
  *
24
- * @docs studio/ai
25
25
  * @license MIT
26
+ * @docs studio/ai
26
27
  */
27
28
 
29
+ import { errorMessage } from "@jxsuite/schema/parse";
30
+
28
31
  import { getPlatform, hasPlatform } from "../platform";
29
32
  import { notifyCredentialsChanged } from "../settings/preferences-accounts";
30
33
  import { openCfAccountPickerSurface } from "../surfaces/cf-account-picker";
@@ -40,11 +43,6 @@ function canPick(): boolean {
40
43
  return Boolean(platform.cfAccounts && platform.cfSelectAccount);
41
44
  }
42
45
 
43
- /** What a thrown thing says, for a line the reader has to act on. */
44
- function reasonOf(error: unknown): string {
45
- return error instanceof Error ? error.message : String(error);
46
- }
47
-
48
46
  /**
49
47
  * Ask which Cloudflare account this connection should use, and store the answer.
50
48
  *
@@ -83,7 +81,7 @@ export function openCfAccountPicker(): Promise<CfAccountSummary | null> {
83
81
  accounts = (await getPlatform().cfAccounts?.()) ?? [];
84
82
  } catch (error) {
85
83
  accounts = [];
86
- failure = reasonOf(error);
84
+ failure = errorMessage(error);
87
85
  }
88
86
  /* `done` released the slot, so a late listing landing after a dismissal would otherwise be a
89
87
  write into a disposed surface. The lit version guarded the same moment by resolving its
@@ -108,7 +106,7 @@ export function openCfAccountPicker(): Promise<CfAccountSummary | null> {
108
106
  if (!settled) {
109
107
  /* The list survives a refusal, and the reason sits above it: listing again is not what
110
108
  would fix an account the broker will not accept, so this state offers no retry. */
111
- handle.update({ choosing: "", failure: reasonOf(error) });
109
+ handle.update({ choosing: "", failure: errorMessage(error) });
112
110
  }
113
111
  return;
114
112
  }
@@ -25,18 +25,22 @@
25
25
  * @docs studio/design/style-inspector
26
26
  */
27
27
 
28
+ import { isNumber, isString } from "@jxsuite/schema/guards";
29
+
28
30
  import { activeTab } from "../workspace/workspace";
29
31
  import { getEffectiveStyle } from "../site-context";
30
32
  import { resolveTokenValue, tokenRefName } from "../style/token-ref";
31
33
  import { kebabToLabel } from "../utils/studio-utils";
32
34
 
33
35
  /**
34
- * One colour the project has named, as a swatch reads it.
36
+ * One colour the project has named, as a swatch reads it — the palette a Style or Content `color`
37
+ * row offers inside its picker.
35
38
  *
36
- * `Record<string, unknown>` because it is a `$map` item: a repeater's scope is a record, and a
37
- * shape that is not one cannot be read through `$map/item/...`.
39
+ * `value` and `color` are two fields because they are two things: choosing a swatch commits
40
+ * `var(--color-accent)`, while the chip is only how that reads on screen. A swatch is a `$map`
41
+ * item, read through `$map/item/...` by member name, so every member is a value a scope can hold.
38
42
  */
39
- export interface ColorTokenView extends Record<string, unknown> {
43
+ export interface ColorTokenView {
40
44
  /** What choosing this swatch commits — the reference, never the literal behind it. */
41
45
  value: string;
42
46
  /** The chip's colour: how the token looks, which is not what it means. */
@@ -76,7 +80,7 @@ export function colorTokens(): ColorTokenView[] {
76
80
  const style = getEffectiveStyle(activeTab.value?.doc.document?.style);
77
81
  const tokens: ColorTokenView[] = [];
78
82
  for (const [name, value] of Object.entries(style)) {
79
- if (name.startsWith("--color") && (typeof value === "string" || typeof value === "number")) {
83
+ if (name.startsWith("--color") && (isString(value) || isNumber(value))) {
80
84
  tokens.push({ color: String(value), label: varToLabel(name), value: `var(${name})` });
81
85
  }
82
86
  }
@@ -23,8 +23,10 @@ import { cloneValue } from "../tabs/doc-op-apply";
23
23
  import { activeTab } from "../workspace/workspace";
24
24
  import { slotMode } from "./value-source";
25
25
 
26
+ import type { JxDocumentValue } from "@jxsuite/schema/types";
26
27
  import type { JsonValue } from "../types";
27
28
  import type { SlotMode } from "./value-source";
29
+ import type { SurfaceOption } from "./surface";
28
30
 
29
31
  export type { SlotCapsSource, SlotMode, SlotPosition } from "./value-source";
30
32
  export { slotCaps, slotMode } from "./value-source";
@@ -96,7 +98,10 @@ function isTextEditRung(mode: SlotMode): boolean {
96
98
  * The rung to render this field at: the one it is already being edited at when a text edit could
97
99
  * explain the difference, otherwise whatever the document value says. Records its answer.
98
100
  */
99
- export function effectiveSlotMode(fieldKey: string, value: unknown): SlotMode {
101
+ export function effectiveSlotMode(
102
+ fieldKey: string,
103
+ value: JxDocumentValue | JsonValue | undefined,
104
+ ): SlotMode {
100
105
  const key = fieldScopeKey(fieldKey);
101
106
  const sniffed = slotMode(value);
102
107
  const previous = slotModeRendered.get(key);
@@ -108,18 +113,12 @@ export function effectiveSlotMode(fieldKey: string, value: unknown): SlotMode {
108
113
  return mode;
109
114
  }
110
115
 
111
- /** One pointer the From data… rung may offer, as a picker option. */
112
- export interface SignalOption {
113
- value: string;
114
- label: string;
115
- }
116
-
117
116
  /** Where a rung's seed value comes from — the subset of a slot's options that decides one. */
118
117
  export interface SlotSeedSources {
119
118
  /** State keys the position may point at; the first is what a fresh binding lands on. */
120
119
  stateDefs: readonly string[];
121
120
  /** Extra pointers beyond `#/state/*` — route params, `$map/item`. */
122
- extraSignals?: readonly SignalOption[] | null;
121
+ extraSignals?: readonly SurfaceOption[] | null;
123
122
  /** What Fixed value restores to. */
124
123
  literalDefault?: JsonValue | undefined;
125
124
  }