@jxsuite/studio 5.3.0 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (389) hide show
  1. package/data/css-meta.json +28 -27
  2. package/dist/chunks/{cf-account-picker-nwnwdm6p.js → cf-account-picker-3f08rry6.js} +21 -18
  3. package/dist/chunks/{cf-settings-adg74qsk.js → cf-settings-m79r7p5y.js} +4 -4
  4. package/dist/chunks/{components-5y78e05d.js → components-xm826zjw.js} +3 -3
  5. package/dist/chunks/{content-source-4rzvmp0m.js → content-source-jt7rbcbc.js} +22 -22
  6. package/dist/chunks/{convert-to-repeater-jxsv62v7.js → convert-to-repeater-vg38bq99.js} +22 -22
  7. package/dist/chunks/{editor-3qhbg51x.js → editor-ddy019sn.js} +2 -2
  8. package/dist/chunks/entry-commands-64nb2a9a.js +42 -0
  9. package/dist/chunks/{extension-sections-2mrptyek.js → extension-sections-r73an5s6.js} +30 -29
  10. package/dist/chunks/{file-ops-knfqshrm.js → file-ops-3xan8mnj.js} +21 -21
  11. package/dist/chunks/{files-y6fr4he9.js → files-egsb0ry8.js} +28 -28
  12. package/dist/chunks/{format-host-1k4qrcqd.js → format-host-mym8qnd0.js} +3 -3
  13. package/dist/chunks/{fs-events-3y6y0nrm.js → fs-events-z2gg8qjt.js} +4 -4
  14. package/dist/chunks/{git-panel-2rkrsjva.js → git-panel-a05atk6q.js} +20 -20
  15. package/dist/chunks/{grid-view-1p6hsyjx.css → grid-view-3g1h2re8.css} +956 -139
  16. package/dist/chunks/{grid-view-a7b87n2c.js → grid-view-qaqer9kr.js} +24 -24
  17. package/dist/chunks/{icons-yy10wk9r.js → icons-drxq9q10.js} +8 -2
  18. package/dist/chunks/{iframe-host-scpw01h8.js → iframe-host-psetcv20.js} +11 -11
  19. package/dist/chunks/{index-n4j7qxyr.js → index-9yjae3hz.js} +4 -4
  20. package/dist/chunks/{javascript-4abzjcy9.css → javascript-bc9z461d.css} +688 -54
  21. package/dist/chunks/{javascript-xvrfrpkb.js → javascript-hr5sg57n.js} +2 -2
  22. package/dist/chunks/{jsonMode-vvmpmk34.css → jsonMode-qqd9nm1t.css} +1120 -303
  23. package/dist/chunks/{jsonMode-tyx2kj6p.js → jsonMode-zs88v0wr.js} +4 -4
  24. package/dist/chunks/layers-panel-83a16ytx.js +41 -0
  25. package/dist/chunks/{layers-jnvdbqva.js → layers-s6mc01ry.js} +3 -3
  26. package/dist/chunks/{media-picker-f66nav16.js → media-picker-nhn6rv4w.js} +11 -11
  27. package/dist/chunks/{menu-1dfhry4s.js → menu-8j4qxjrp.js} +4 -4
  28. package/dist/chunks/{monaco-binding-sw6en4dw.js → monaco-binding-e8d9wzyk.js} +3 -3
  29. package/dist/chunks/{monaco-buffer-pykwbm92.js → monaco-buffer-jaq1t9zj.js} +2 -2
  30. package/dist/chunks/{monaco-setup-8vbyqnhr.css → monaco-setup-ey9cjcm3.css} +954 -137
  31. package/dist/chunks/{monaco-setup-km6abc6q.js → monaco-setup-gsjdysze.js} +6 -6
  32. package/dist/chunks/{platform-ts9cg1a4.js → platform-fnchmhy7.js} +5 -3
  33. package/dist/chunks/publish-panel-ak6hxfma.js +27 -0
  34. package/dist/chunks/quick-search-c63mkt3b.js +47 -0
  35. package/dist/chunks/{references-h69xp9zz.js → references-f7bdv3z5.js} +3 -3
  36. package/dist/chunks/right-panel-t5n8wttg.js +45 -0
  37. package/dist/chunks/{studio-ze46gzjh.js → studio-01269reb.js} +7 -7
  38. package/dist/chunks/{studio-rnyf3f8e.js → studio-0a4gncx0.js} +3 -3
  39. package/dist/chunks/{studio-e1f24eff.js → studio-0d4p4wxj.js} +6778 -2993
  40. package/dist/chunks/{studio-4wbb9ct0.js → studio-1tejxvba.js} +3006 -1855
  41. package/dist/chunks/{studio-d1n2bykn.js → studio-3nprwbd9.js} +117 -25
  42. package/dist/chunks/{studio-4c041r8y.js → studio-40z39dme.js} +3 -3
  43. package/dist/chunks/{studio-151w0xnh.js → studio-482eeazk.js} +20 -20
  44. package/dist/chunks/{studio-cgprcdxn.js → studio-4998spet.js} +10 -9
  45. package/dist/chunks/{studio-nq5yf5mp.js → studio-557bmn0x.js} +2 -2
  46. package/dist/chunks/{studio-rtskkm43.js → studio-5w26wza5.js} +3 -3
  47. package/dist/chunks/{studio-6nzaktvy.js → studio-6pwn9j8c.js} +6 -3
  48. package/dist/chunks/{studio-wnsyffg1.js → studio-6vg0x5fz.js} +3 -2
  49. package/dist/chunks/{studio-vn5hske5.js → studio-7d3c1m59.js} +12 -5
  50. package/dist/chunks/{studio-6gryj0sg.js → studio-9vsvz7w7.js} +6 -6
  51. package/dist/chunks/{studio-50wfwy44.js → studio-9wm0xzpf.js} +19 -19
  52. package/dist/chunks/{studio-0j7r7s9g.js → studio-ag3z6shb.js} +10 -4
  53. package/dist/chunks/studio-aj9drheq.js +177 -0
  54. package/dist/chunks/{studio-xajk70w0.js → studio-apv9x70c.js} +189 -130
  55. package/dist/chunks/{studio-c04nzbby.js → studio-b9q3znz8.js} +2 -2
  56. package/dist/chunks/{studio-nfx354t1.js → studio-bh47w0cy.js} +9 -10
  57. package/dist/chunks/{studio-gk2twyh4.js → studio-dgdm6vvt.js} +264 -52
  58. package/dist/chunks/{studio-gtfq1dkz.js → studio-dwdcr2e8.js} +4 -4
  59. package/dist/chunks/{studio-nqgawfks.js → studio-fbcyz234.js} +146 -139
  60. package/dist/chunks/{studio-27q131j3.js → studio-fqpkpq1t.js} +7 -4
  61. package/dist/chunks/{studio-c0qgc3tn.js → studio-fy320dfc.js} +62 -68
  62. package/dist/chunks/{studio-zjjde71a.js → studio-gjj4bbfx.js} +2 -2
  63. package/dist/chunks/{studio-g33v4fe9.js → studio-jfhxy8h3.js} +7 -7
  64. package/dist/chunks/{studio-ab87phj1.js → studio-kwewmhhq.js} +4 -4
  65. package/dist/chunks/{studio-7rrb1esn.js → studio-m58xn8at.js} +25 -24
  66. package/dist/chunks/{studio-fzjx96t2.js → studio-mfkh1q8d.js} +17 -17
  67. package/dist/chunks/{studio-drg8qj9k.js → studio-mrh0a92f.js} +17 -17
  68. package/dist/chunks/{studio-jt27ta6x.js → studio-mt79tn56.js} +3 -3
  69. package/dist/chunks/{studio-b66rsh78.js → studio-ne593z1j.js} +38 -31
  70. package/dist/chunks/{studio-h4nvnjvz.js → studio-ptfcxkz5.js} +418 -232
  71. package/dist/chunks/{studio-dd1qqkry.js → studio-qxye31h7.js} +7 -7
  72. package/dist/chunks/{studio-ye9drbk8.js → studio-rav5bpmp.js} +73 -52
  73. package/dist/chunks/{studio-6kvgrkrp.js → studio-rwmmbrth.js} +6 -6
  74. package/dist/chunks/{studio-b7xacrwe.js → studio-sceg8ws0.js} +8 -8
  75. package/dist/chunks/{studio-msc1ee1m.js → studio-sjas5b3a.js} +19 -13
  76. package/dist/chunks/{studio-a65w20ex.js → studio-vd67b66d.js} +3 -3
  77. package/dist/chunks/{studio-7144epdr.js → studio-w475cbf9.js} +10 -10
  78. package/dist/chunks/{studio-4f3psrk1.js → studio-w7gpcvfj.js} +9 -9
  79. package/dist/chunks/{studio-nsgw7dbk.js → studio-xrbfdxgk.js} +7 -7
  80. package/dist/chunks/{studio-ke09tn9k.js → studio-y49b6mjv.js} +35 -35
  81. package/dist/chunks/{studio-j0w60gft.js → studio-ygvr9e4q.js} +10 -10
  82. package/dist/chunks/{studio-z2smx5ce.js → studio-yxmmjy2a.js} +9 -6
  83. package/dist/chunks/{tsMode-jy4m86rv.js → tsMode-ay4c78ne.js} +4 -4
  84. package/dist/chunks/{tsMode-hnxxb73h.css → tsMode-c72wyz27.css} +954 -137
  85. package/dist/chunks/{workspace-np10mayv.js → workspace-b9k2frks.js} +5 -5
  86. package/dist/chunks/{ws-client-ny4zc51r.js → ws-client-erze4czt.js} +356 -20
  87. package/dist/codicon.ttf +0 -0
  88. package/dist/iframe-entry.js +18 -16
  89. package/dist/studio.css +956 -139
  90. package/dist/studio.js +1453 -830
  91. package/dist/workers/editor.worker.js +196 -107
  92. package/dist/workers/json.worker.js +196 -107
  93. package/dist/workers/ts.worker.js +196 -107
  94. package/package.json +15 -14
  95. package/src/about/about-modal.ts +4 -3
  96. package/src/browse/library-commands.ts +15 -13
  97. package/src/browse/library-pane.ts +2 -2
  98. package/src/canvas/canvas-render.ts +97 -83
  99. package/src/canvas/canvas-surface.ts +2 -2
  100. package/src/canvas/canvas-utils.ts +42 -32
  101. package/src/canvas/diff-toolbar.ts +21 -2
  102. package/src/canvas/diff-view.ts +30 -6
  103. package/src/canvas/iframe-entry.ts +2 -2
  104. package/src/canvas/iframe-host.ts +5 -5
  105. package/src/canvas/iframe-interaction.ts +7 -6
  106. package/src/canvas/iframe-overlay.ts +1 -1
  107. package/src/canvas/iframe-protocol.ts +6 -5
  108. package/src/canvas/iframe-render.ts +3 -3
  109. package/src/canvas/popover-state.ts +1 -1
  110. package/src/canvas/stage-scrollbar.ts +112 -0
  111. package/src/canvas/surface-registry.ts +9 -2
  112. package/src/collab/collab-commands.ts +8 -6
  113. package/src/collab/collab-session.ts +4 -4
  114. package/src/collab/collab-state.ts +4 -4
  115. package/src/collab/presence-chips.ts +3 -3
  116. package/src/commands/app-commands.ts +7 -7
  117. package/src/commands/budget.ts +17 -16
  118. package/src/commands/command-args.ts +10 -9
  119. package/src/commands/context.ts +20 -10
  120. package/src/commands/defaults.ts +30 -29
  121. package/src/commands/levels.ts +8 -6
  122. package/src/commands/live-context.ts +12 -10
  123. package/src/commands/reference.ts +5 -5
  124. package/src/commands/registry.ts +2 -2
  125. package/src/content/draft-state.ts +9 -8
  126. package/src/content/entry-commands.ts +16 -14
  127. package/src/content/entry-editor.ts +2 -2
  128. package/src/content/entry-fields.ts +1 -1
  129. package/src/editor/context-menu.ts +4 -4
  130. package/src/editor/convert-to-component.ts +6 -5
  131. package/src/editor/inline-edit.ts +3 -3
  132. package/src/editor/shortcuts.ts +88 -20
  133. package/src/editor/slash-menu.ts +11 -10
  134. package/src/files/elements.ts +4 -5
  135. package/src/files/file-ops.ts +1 -1
  136. package/src/files/files.ts +21 -17
  137. package/src/files/serialize-document.ts +1 -1
  138. package/src/format/convert-file.ts +5 -5
  139. package/src/github/github-auth-status.ts +107 -0
  140. package/src/github/github-auth.ts +18 -82
  141. package/src/github/github-publish.ts +7 -6
  142. package/src/grid/cell-editors.ts +8 -7
  143. package/src/grid/grid-layout.ts +1 -1
  144. package/src/grid/grid-open.ts +6 -5
  145. package/src/grid/grid-panel.ts +13 -12
  146. package/src/grid/redirects-grid.ts +14 -11
  147. package/src/grid/redirects.ts +10 -5
  148. package/src/grid/sources/content-source.ts +10 -9
  149. package/src/hosting/document.ts +28 -1
  150. package/src/hosting/stage.ts +15 -4
  151. package/src/i18n/i18n-commands.ts +9 -7
  152. package/src/new-project/location-fields.ts +16 -3
  153. package/src/new-project/new-project-modal.ts +23 -7
  154. package/src/page-params.ts +6 -6
  155. package/src/panels/activity-panel.ts +11 -10
  156. package/src/panels/ai-chat/chat-view.ts +27 -14
  157. package/src/panels/ai-chat/composer.ts +10 -3
  158. package/src/panels/ai-panel.ts +87 -29
  159. package/src/panels/block-action-bar.ts +59 -33
  160. package/src/panels/bottom-dock.ts +22 -22
  161. package/src/panels/data-explorer.ts +9 -9
  162. package/src/panels/data-grid.ts +1 -1
  163. package/src/panels/editors.ts +8 -8
  164. package/src/panels/elements-panel.ts +7 -8
  165. package/src/panels/empty-state.ts +1 -1
  166. package/src/panels/events-panel.ts +13 -12
  167. package/src/panels/formula-workspace.ts +8 -5
  168. package/src/panels/frontmatter-fields.ts +4 -1
  169. package/src/panels/frontmatter-panel.ts +18 -18
  170. package/src/panels/git-panel.ts +19 -13
  171. package/src/panels/head-panel.ts +9 -10
  172. package/src/panels/i18n-panel.ts +6 -4
  173. package/src/panels/imports-panel.ts +1 -1
  174. package/src/panels/jump-bar.ts +20 -18
  175. package/src/panels/layers-panel.ts +19 -17
  176. package/src/panels/left-panel.ts +3 -3
  177. package/src/panels/navigator-panels.ts +8 -8
  178. package/src/panels/overlays.ts +1 -1
  179. package/src/panels/pane-context.ts +56 -28
  180. package/src/panels/pane-grid.ts +9 -8
  181. package/src/panels/panel-registry.ts +47 -19
  182. package/src/panels/problems-panel.ts +11 -12
  183. package/src/panels/properties-panel.ts +21 -20
  184. package/src/panels/provenance.ts +3 -3
  185. package/src/panels/quick-search.ts +15 -11
  186. package/src/panels/right-panel.ts +4 -3
  187. package/src/panels/seo-modal.ts +5 -4
  188. package/src/panels/settings-menu.ts +9 -9
  189. package/src/panels/settings-pane.ts +3 -3
  190. package/src/panels/signals-panel.ts +16 -9
  191. package/src/panels/statement-editor.ts +12 -9
  192. package/src/panels/style-panel.ts +45 -41
  193. package/src/panels/stylebook-panel.ts +0 -1
  194. package/src/panels/tab-strip.ts +26 -23
  195. package/src/platform-errors.ts +2 -2
  196. package/src/platform.ts +44 -4
  197. package/src/platforms/cloud.ts +11 -1
  198. package/src/platforms/default-platform.ts +141 -4
  199. package/src/platforms/devserver.ts +23 -3
  200. package/src/publish/deploy-checklist.ts +11 -10
  201. package/src/publish/publish-commands.ts +9 -8
  202. package/src/services/a11y-report.ts +1 -1
  203. package/src/services/ai-ask.ts +39 -16
  204. package/src/services/ai-command-tools.ts +28 -14
  205. package/src/services/ai-import-tools.ts +43 -29
  206. package/src/services/ai-project-tools.ts +20 -38
  207. package/src/services/ai-settings.ts +55 -2
  208. package/src/services/ai-tools.ts +69 -58
  209. package/src/services/ai-write-report.ts +4 -4
  210. package/src/services/ai-writes.ts +74 -55
  211. package/src/services/automation.ts +12 -12
  212. package/src/services/clock.ts +2 -1
  213. package/src/services/connection.ts +2 -2
  214. package/src/services/context-manager.ts +69 -6
  215. package/src/services/directory-picker.ts +93 -27
  216. package/src/services/document-assistant.ts +86 -17
  217. package/src/services/gated-registry.ts +4 -3
  218. package/src/services/idle.ts +5 -4
  219. package/src/services/live-surfaces.ts +2 -1
  220. package/src/services/notify.ts +9 -7
  221. package/src/services/popover-report.ts +3 -3
  222. package/src/services/preview-eval.ts +1 -1
  223. package/src/services/project-adoption.ts +34 -1
  224. package/src/services/project-path.ts +53 -0
  225. package/src/services/settings/kernel.ts +13 -2
  226. package/src/services/tool-executor.ts +135 -30
  227. package/src/services/tool-outcomes.ts +143 -0
  228. package/src/settings/contexts-section.ts +8 -8
  229. package/src/settings/contributed-section.ts +6 -6
  230. package/src/settings/css-vars-editor.ts +6 -5
  231. package/src/settings/extension-commands.ts +19 -18
  232. package/src/settings/extension-sections.ts +7 -7
  233. package/src/settings/extensions-section.ts +3 -3
  234. package/src/settings/general-settings.ts +21 -18
  235. package/src/settings/preferences-accounts.ts +3 -3
  236. package/src/settings/preferences-dialog.ts +9 -8
  237. package/src/settings/preferences-sections.ts +1 -1
  238. package/src/settings/project-sections.ts +2 -2
  239. package/src/settings/section-registry.ts +7 -6
  240. package/src/settings/settings-document.ts +41 -43
  241. package/src/shell/tree.ts +29 -0
  242. package/src/shell.ts +63 -55
  243. package/src/site-context.ts +1 -1
  244. package/src/store.ts +2 -2
  245. package/src/studio.ts +46 -28
  246. package/src/style/live-preview.ts +8 -8
  247. package/src/style/project-styles.ts +8 -9
  248. package/src/style/token-ref.ts +2 -2
  249. package/src/surfaces/about.json +6 -2
  250. package/src/surfaces/add-repo.json +2 -2
  251. package/src/surfaces/add-repo.ts +2 -2
  252. package/src/surfaces/ai-chat.json +14 -6
  253. package/src/surfaces/ai-chat.ts +4 -2
  254. package/src/surfaces/ai-credentials-form.json +53 -49
  255. package/src/surfaces/ai-credentials-form.ts +18 -4
  256. package/src/surfaces/ai-managed-connect.json +4 -4
  257. package/src/surfaces/block-action-bar.json +4 -4
  258. package/src/surfaces/block-action-bar.ts +3 -3
  259. package/src/surfaces/boot-failure.json +228 -0
  260. package/src/surfaces/boot-failure.ts +156 -0
  261. package/src/surfaces/bottom-dock.json +1 -1
  262. package/src/surfaces/canvas-stage.json +9 -40
  263. package/src/surfaces/canvas-stage.ts +9 -9
  264. package/src/surfaces/cf-account-picker.json +11 -8
  265. package/src/surfaces/commandbar.ts +11 -10
  266. package/src/surfaces/convert-repeater.ts +3 -2
  267. package/src/surfaces/dialog.json +7 -1
  268. package/src/surfaces/dialog.ts +2 -2
  269. package/src/surfaces/doc-header.json +6 -13
  270. package/src/surfaces/doc-header.ts +4 -5
  271. package/src/surfaces/entry-editor.json +1 -1
  272. package/src/surfaces/entry-editor.ts +2 -1
  273. package/src/surfaces/expression-editor.json +5 -5
  274. package/src/surfaces/files-panel.json +4 -3
  275. package/src/surfaces/files-panel.ts +1 -1
  276. package/src/surfaces/formula-palette.json +2 -2
  277. package/src/surfaces/formula-palette.ts +1 -1
  278. package/src/surfaces/git-panel.json +167 -109
  279. package/src/surfaces/git-panel.ts +2 -2
  280. package/src/surfaces/github-auth.json +2 -1
  281. package/src/surfaces/github-publish.ts +3 -3
  282. package/src/surfaces/grid-open.json +1 -1
  283. package/src/surfaces/grid-panel.json +2 -2
  284. package/src/surfaces/grid-views.json +1 -1
  285. package/src/surfaces/inspector-dock.json +2 -2
  286. package/src/surfaces/jump-bar.json +1 -1
  287. package/src/surfaces/jump-bar.ts +1 -1
  288. package/src/surfaces/library-pane.ts +2 -1
  289. package/src/surfaces/logic-panel.json +7 -7
  290. package/src/surfaces/logic-panel.ts +6 -4
  291. package/src/surfaces/logic-workspace.json +2 -2
  292. package/src/surfaces/logic-workspace.ts +2 -2
  293. package/src/surfaces/media-browser.ts +3 -3
  294. package/src/surfaces/media-pane.ts +2 -1
  295. package/src/surfaces/menu.ts +5 -5
  296. package/src/surfaces/new-project.json +1 -1
  297. package/src/surfaces/pane-context.json +86 -57
  298. package/src/surfaces/pane-context.ts +2 -1
  299. package/src/surfaces/pane-grid.json +3 -3
  300. package/src/surfaces/panel-activity.json +2 -1
  301. package/src/surfaces/panel-deploy-checklist.json +1 -1
  302. package/src/surfaces/panel-elements.ts +2 -1
  303. package/src/surfaces/panel-i18n.ts +2 -1
  304. package/src/surfaces/panel-outline.json +1 -1
  305. package/src/surfaces/panel-outline.ts +4 -3
  306. package/src/surfaces/panel-page.json +2 -2
  307. package/src/surfaces/panel-page.ts +4 -1
  308. package/src/surfaces/panel-problems.json +4 -3
  309. package/src/surfaces/panel-problems.ts +2 -2
  310. package/src/surfaces/panel-signals.json +23 -8
  311. package/src/surfaces/panel-signals.ts +5 -1
  312. package/src/surfaces/panel-stylebook-layers.json +1 -1
  313. package/src/surfaces/panel-stylebook-layers.ts +2 -2
  314. package/src/surfaces/preferences.json +21 -8
  315. package/src/surfaces/preferences.ts +9 -1
  316. package/src/surfaces/properties-panel.json +4 -4
  317. package/src/surfaces/properties-panel.ts +2 -2
  318. package/src/surfaces/publish.json +1 -1
  319. package/src/surfaces/publish.ts +2 -1
  320. package/src/surfaces/push-plan.json +4 -3
  321. package/src/surfaces/rail.json +2 -2
  322. package/src/surfaces/rail.ts +10 -4
  323. package/src/surfaces/reference-field.json +1 -1
  324. package/src/surfaces/schema-form.json +2 -2
  325. package/src/surfaces/schema-form.ts +1 -1
  326. package/src/surfaces/seo.json +1 -1
  327. package/src/surfaces/seo.ts +2 -2
  328. package/src/surfaces/settings-contributed.ts +2 -1
  329. package/src/surfaces/settings-css-vars.json +4 -4
  330. package/src/surfaces/settings-deploy.json +4 -4
  331. package/src/surfaces/settings-deploy.ts +2 -1
  332. package/src/surfaces/settings-extensions.json +6 -6
  333. package/src/surfaces/settings-extensions.ts +6 -2
  334. package/src/surfaces/settings-locales.json +4 -4
  335. package/src/surfaces/settings-overview.ts +2 -1
  336. package/src/surfaces/settings-pane.ts +3 -2
  337. package/src/surfaces/settings-rawjson.ts +1 -1
  338. package/src/surfaces/slash-menu.ts +4 -4
  339. package/src/surfaces/statements.json +3 -3
  340. package/src/surfaces/statusbar.ts +23 -23
  341. package/src/surfaces/style-panel.json +9 -5
  342. package/src/surfaces/style-panel.ts +3 -3
  343. package/src/surfaces/tab-strip.json +2 -2
  344. package/src/surfaces/target-line.json +1 -1
  345. package/src/surfaces/target-line.ts +12 -10
  346. package/src/surfaces/welcome.json +7 -2
  347. package/src/tabs/doc-op-apply.ts +5 -5
  348. package/src/tabs/patch-ops.ts +3 -3
  349. package/src/tabs/project-config.ts +10 -10
  350. package/src/tabs/selection.ts +1 -1
  351. package/src/tabs/tab.ts +13 -14
  352. package/src/tabs/transact.ts +18 -24
  353. package/src/types.ts +27 -3
  354. package/src/ui/ai-credentials-form.ts +74 -16
  355. package/src/ui/ai-managed-connect.ts +68 -19
  356. package/src/ui/color-selector.ts +1 -1
  357. package/src/ui/expression-editor.ts +3 -3
  358. package/src/ui/form-controls.ts +6 -5
  359. package/src/ui/formula-catalog.ts +4 -4
  360. package/src/ui/formula-chips.ts +2 -2
  361. package/src/ui/layers.ts +20 -18
  362. package/src/ui/panel-resize.ts +5 -5
  363. package/src/ui/popover-surface.ts +2 -2
  364. package/src/ui/progress-modal.ts +3 -3
  365. package/src/ui/regions.ts +14 -9
  366. package/src/ui/schema-form.ts +10 -9
  367. package/src/ui/timing.ts +9 -7
  368. package/src/ui/value-source.ts +4 -4
  369. package/src/ui/virtual-window.ts +1 -1
  370. package/src/utils/base64.ts +20 -1
  371. package/src/utils/canvas-media.ts +1 -1
  372. package/src/utils/studio-utils.ts +0 -31
  373. package/src/view.ts +4 -3
  374. package/src/workspace/pane-derive.ts +14 -13
  375. package/src/workspace/session.ts +7 -6
  376. package/src/workspace/workspace.ts +49 -39
  377. package/styles/canvas.css +1 -27
  378. package/styles/inspector.css +4 -3
  379. package/styles/overlays.css +1 -1
  380. package/styles/tokens.css +17 -1
  381. package/styles/tokens.json +6 -1
  382. package/dist/chunks/entry-commands-1wnsqn5d.js +0 -42
  383. package/dist/chunks/layers-panel-73gfkcga.js +0 -41
  384. package/dist/chunks/publish-panel-z1zd2da1.js +0 -27
  385. package/dist/chunks/quick-search-zdv7h8ht.js +0 -47
  386. package/dist/chunks/right-panel-889vbnm5.js +0 -45
  387. package/dist/chunks/studio-727xh0e3.js +0 -76
  388. package/src/files/json-layout.ts +0 -474
  389. package/src/services/ai-turn-signal.ts +0 -70
@@ -49,6 +49,7 @@ function freshSurface(paneId) {
49
49
  prevStylebookFilter: null,
50
50
  renderGeneration: 0,
51
51
  sourceCollabCleanup: null,
52
+ stageScrollbar: null,
52
53
  wrap: null
53
54
  };
54
55
  }
@@ -260,5 +261,5 @@ function tabBufferUnsaved2(tab) {
260
261
 
261
262
  export { view, nextRenderGeneration, surfaceForPane, allCanvasSurfaces, stageContaining, registerCanvasSurface, createPaneSurface, setSurfaceTeardown, disposePaneSurface, BUFFER_COMMIT2, bufferWrites2, commitBufferWrites2, cancelBufferWrites2, bufferIsLive2, bufferMovedOn2, commitTabBuffers2, tabBufferUnsaved2 };
262
263
 
263
- //# debugId=CEB2BECD922331C964756E2164756E21
264
- //# sourceMappingURL=studio-wnsyffg1.js.map
264
+ //# debugId=6CCD1AF08CFE601764756E2164756E21
265
+ //# sourceMappingURL=studio-6vg0x5fz.js.map
@@ -1,15 +1,16 @@
1
1
  import {
2
2
  getPlatform2
3
- } from "./studio-6nzaktvy.js";
3
+ } from "./studio-6pwn9j8c.js";
4
4
  import {
5
5
  SETTINGS,
6
6
  readStoredSetting,
7
7
  hasSetting,
8
8
  onSettingsChanged,
9
+ normalizeSetting,
9
10
  setSetting,
10
11
  setSettings,
11
12
  clearSettings
12
- } from "./studio-z2smx5ce.js";
13
+ } from "./studio-yxmmjy2a.js";
13
14
 
14
15
  // src/services/ai-settings.ts
15
16
  function getOpenAiKey() {
@@ -37,6 +38,12 @@ function saveAiProvider(provider) {
37
38
  [SETTINGS.aiModel, provider.model]
38
39
  ]);
39
40
  }
41
+ function aiProviderDiffers(provider) {
42
+ return !storedEquals(SETTINGS.aiOpenAiKey, provider.apiKey, getOpenAiKey()) || !storedEquals(SETTINGS.aiBaseUrl, provider.baseUrl, getBaseUrl()) || !storedEquals(SETTINGS.aiModel, provider.model, storedModel());
43
+ }
44
+ function storedEquals(definition, draft, stored) {
45
+ return normalizeSetting(definition, draft) === normalizeSetting(definition, stored);
46
+ }
40
47
  function clearAiProvider() {
41
48
  clearSettings([SETTINGS.aiOpenAiKey, SETTINGS.aiBaseUrl, SETTINGS.aiModel]);
42
49
  }
@@ -195,7 +202,7 @@ async function fetchAvailableModels(opts = {}) {
195
202
  return cache;
196
203
  }
197
204
 
198
- export { getOpenAiKey, setOpenAiKey, hasOpenAiKey, getBaseUrl, storedModel, setModel, saveAiProvider, clearAiProvider, aiConnection, resetModelCache, cachedModels, modelToolSupport, modelContextWindow, ensureProxyProbe, hasAiCredentials, isProxyConfigured, isManagedProxy, proxyStateCode, proxyModelsErrorMessage, preferredModel, fetchAvailableModels };
205
+ export { getOpenAiKey, setOpenAiKey, hasOpenAiKey, getBaseUrl, storedModel, setModel, saveAiProvider, aiProviderDiffers, storedEquals, clearAiProvider, aiConnection, resetModelCache, cachedModels, modelToolSupport, modelContextWindow, ensureProxyProbe, hasAiCredentials, isProxyConfigured, isManagedProxy, proxyStateCode, proxyModelsErrorMessage, preferredModel, fetchAvailableModels };
199
206
 
200
- //# debugId=C5291DD230D7E25064756E2164756E21
201
- //# sourceMappingURL=studio-vn5hske5.js.map
207
+ //# debugId=19AC3998EBEF80C364756E2164756E21
208
+ //# sourceMappingURL=studio-7d3c1m59.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getPlatform2
3
- } from "./studio-6nzaktvy.js";
3
+ } from "./studio-6pwn9j8c.js";
4
4
  import {
5
5
  __preload
6
6
  } from "./studio-5te5tqng.js";
@@ -21,7 +21,7 @@ async function applyPendingSchemas() {
21
21
  }
22
22
  _pendingSchemasDirty = false;
23
23
  try {
24
- const { applyProjectSchemas } = await (__preload("km6abc6q"), import("./monaco-setup-km6abc6q.js"));
24
+ const { applyProjectSchemas } = await (__preload("gsjdysze"), import("./monaco-setup-gsjdysze.js"));
25
25
  applyProjectSchemas(_pendingSchemas);
26
26
  } catch {}
27
27
  }
@@ -31,8 +31,8 @@ function loadMonaco() {
31
31
  }
32
32
  _loading ??= (async () => {
33
33
  const [monaco] = await Promise.all([
34
- (__preload("3qhbg51x"), import("./editor-3qhbg51x.js")),
35
- (__preload("km6abc6q"), import("./monaco-setup-km6abc6q.js"))
34
+ (__preload("ddy019sn"), import("./editor-ddy019sn.js")),
35
+ (__preload("gsjdysze"), import("./monaco-setup-gsjdysze.js"))
36
36
  ]);
37
37
  _monaco = monaco;
38
38
  await applyPendingSchemas();
@@ -124,7 +124,7 @@ async function shareProjectSchemas(platform) {
124
124
  function refreshExtensionUi2(platform) {
125
125
  shareProjectSchemas(platform);
126
126
  loadExtensionCatalog();
127
- (__preload("2mrptyek"), import("./extension-sections-2mrptyek.js")).then(({ syncExtensionSettingsSections }) => syncExtensionSettingsSections()).catch(() => {});
127
+ (__preload("r73an5s6"), import("./extension-sections-r73an5s6.js")).then(({ syncExtensionSettingsSections }) => syncExtensionSettingsSections()).catch(() => {});
128
128
  }
129
129
  function getFormats2() {
130
130
  return _formats;
@@ -239,4 +239,4 @@ function splitFormatDocument2(format, doc) {
239
239
  export { loadMonaco, loadedMonaco, mountStillWanted, loadFormats2, refreshFormats2, loadExtensions2, getExtensions2, getExtensionCatalog2, refreshExtensionUi2, getFormats2, formatByExtension2, formatByName2, noFormatError2, formatForPath2, documentExtensions2, defaultContentFormat2, formatParse2, formatSerialize2, splitFormatDocument2 };
240
240
 
241
241
  //# debugId=DC4D74E6C120403064756E2164756E21
242
- //# sourceMappingURL=studio-6gryj0sg.js.map
242
+ //# sourceMappingURL=studio-9vsvz7w7.js.map
@@ -1,16 +1,6 @@
1
1
  import {
2
2
  reactive
3
3
  } from "./studio-d8z5bajd.js";
4
- import {
5
- getPlatform2
6
- } from "./studio-6nzaktvy.js";
7
- import {
8
- loadFormats2,
9
- formatForPath2
10
- } from "./studio-6gryj0sg.js";
11
- import {
12
- projectState
13
- } from "./studio-m1p9b6c3.js";
14
4
  import {
15
5
  resolveI18n,
16
6
  servedLocaleOfPath,
@@ -22,20 +12,30 @@ import {
22
12
  workspace2,
23
13
  openTab2,
24
14
  activateTab2
25
- } from "./studio-gk2twyh4.js";
15
+ } from "./studio-dgdm6vvt.js";
16
+ import {
17
+ getPlatform2
18
+ } from "./studio-6pwn9j8c.js";
19
+ import {
20
+ loadFormats2,
21
+ formatForPath2
22
+ } from "./studio-9vsvz7w7.js";
23
+ import {
24
+ projectState
25
+ } from "./studio-m1p9b6c3.js";
26
26
  import {
27
27
  registerSurface,
28
28
  mountSurface,
29
29
  openDialogSurface,
30
30
  layerHost2
31
- } from "./studio-0j7r7s9g.js";
31
+ } from "./studio-ag3z6shb.js";
32
32
  import {
33
33
  errorMessage2
34
34
  } from "./studio-yxa81f45.js";
35
35
  import {
36
36
  markLocalMutation2,
37
37
  isRecentLocal2
38
- } from "./studio-4c041r8y.js";
38
+ } from "./studio-40z39dme.js";
39
39
  import {
40
40
  makeGridTabId,
41
41
  parseGridTabId,
@@ -44,21 +44,21 @@ import {
44
44
  coerceCellInput,
45
45
  cellToText,
46
46
  createGridController
47
- } from "./studio-ke09tn9k.js";
47
+ } from "./studio-y49b6mjv.js";
48
48
  import {
49
49
  collectionDirs2,
50
50
  createCollectionSource2,
51
51
  createPagesSource2
52
- } from "./studio-j0w60gft.js";
52
+ } from "./studio-ygvr9e4q.js";
53
53
  import {
54
54
  MEDIA_EXTENSIONS,
55
55
  extensionOf
56
- } from "./studio-b7xacrwe.js";
56
+ } from "./studio-sceg8ws0.js";
57
57
  // src/surfaces/grid-open.json
58
58
  var grid_open_default = {
59
59
  $schema: "https://jxsuite.com/schema/v1",
60
60
  $id: "StudioGridOpen",
61
- $description: "Every grid-able source a project has, grouped by where it comes from: the project's own pages and content collections first, then each connection's tables. It is the ISLAND of a confirm dialog rather than a dialog of its own — `ui/layers.ts`'s dialog owns the headline, the cancel button, modality and focus, and this document is only the list — because a second answer to \"what is a dialog\" is a defect (§12.5). Group headings are why it is not the kit menu: a menu row can carry a divider above it and cannot carry a name for the run it opens.",
61
+ $description: "Every grid-able source a project has, grouped by where it comes from: the project's own pages and content collections first, then each connection's tables. It is the ISLAND of a confirm dialog rather than a dialog of its own — `ui/layers.ts`'s dialog owns the headline, the cancel button, modality and focus, and this document is only the list — because a second answer to \"what is a dialog\" is a defect (studio-ui-guidelines.md §12.5). Group headings are why it is not the kit menu: a menu row can carry a divider above it and cannot carry a name for the run it opens.",
62
62
  tagName: "div",
63
63
  attributes: {
64
64
  part: "sources"
@@ -1196,5 +1196,5 @@ function registerGridCommands(registry) {
1196
1196
 
1197
1197
  export { dataSurfaceAvailable, testConnection, pushSchema, deriveSecretEnvName, parseCsv, createCsvFileSource, LIBRARY_CATEGORIES, LIBRARY_CATEGORY_KEYS, libraryCategory, uploadDirForCategory, scanLibrary, filterLibrary, LIBRARY_LAYOUTS, LIBRARY_LAYOUT_LABELS, PREVIEW_LAYOUTS, projectLocales, libraryLocales, groupByDate, groupByCategory, libraryColumns, createLibrarySource, openCsvGridTab, openLibraryTab, openPagesGrid, openGridSourcePicker, registerGridCommands };
1198
1198
 
1199
- //# debugId=568206775D45105064756E2164756E21
1200
- //# sourceMappingURL=studio-50wfwy44.js.map
1199
+ //# debugId=70A68BB6D43FFCA764756E2164756E21
1200
+ //# sourceMappingURL=studio-9wm0xzpf.js.map
@@ -10,7 +10,7 @@ import {
10
10
  selectValue,
11
11
  registerUi,
12
12
  activeRegistry
13
- } from "./studio-d1n2bykn.js";
13
+ } from "./studio-3nprwbd9.js";
14
14
  import {
15
15
  effectScope,
16
16
  effect,
@@ -328,11 +328,17 @@ var dialog_default = {
328
328
  },
329
329
  style: {
330
330
  '& [part="message"]': {
331
- margin: "0 0 var(--jx-space-3)"
331
+ $description: "The one part of a dialog that is text rather than interface, so it opts back in to selection. The root sets `user-select: none` and `styles/tokens.json` restates it on every `dialog`, so the headline, the labels and the buttons around this sentence stay unselectable; a message is often the thing a reader copies into a search or a bug report.",
332
+ margin: "0 0 var(--jx-space-3)",
333
+ userSelect: "text"
332
334
  },
333
335
  '& [part="message"]:last-child': {
334
336
  margin: "0"
335
337
  },
338
+ '& [part="island"] > p, & [part="island"] > span, & [part="island"] > strong, & [part="island"] > em, & [part="island"] > code': {
339
+ $description: "The island's own prose is the message's other form — a body richer than a sentence, written straight into the island from a lit template (studio-ui-guidelines.md §9.4) — so it is selectable for the same reason `[part=\"message\"]` is. The opt-in stops at those children because the island is ALSO the mount point for a whole document: the Open Grid picker and Push Schema's plan put their surfaces here, and `user-select` inherits, so a rule on the island itself would hand selection to every heading, source row and button they draw, which is the interface the policy exists to keep unselectable. A mounted surface roots a `div`; a message writes paragraphs and text-level spans, so the two forms are told apart by the child that arrives.",
340
+ userSelect: "text"
341
+ },
336
342
  '& [part="island"]:empty': {
337
343
  display: "none"
338
344
  },
@@ -1215,5 +1221,5 @@ function unmountToastHost() {
1215
1221
 
1216
1222
  export { mountsUsing, mountsOf, registerKit, REGION_ATTR, resolveRegion, REGION_FOR_FOCUS, paneRegion, paneStripRegion, navigatorPanelRegion, inspectorTabRegion, NAVIGATOR_STATEMENTS_REGION, inspectorStatementsRegion, bottomPanelRegion, overlayRegion, registerSurface, surfaceDocument, mountSurface, whenReady, openDialogSurface, runReported, runActiveReported, layerHost2, initLayers2, isModalOpen2, showConfirmDialog2, showSaveDiscardDialog2, showPromptDialog2, getLayerSlot2, clearLayerSlot2, overlayIdleBlockers2 };
1217
1223
 
1218
- //# debugId=0892C6B4A7BF4FE464756E2164756E21
1219
- //# sourceMappingURL=studio-0j7r7s9g.js.map
1224
+ //# debugId=DE102B371B9E6DE864756E2164756E21
1225
+ //# sourceMappingURL=studio-ag3z6shb.js.map
@@ -0,0 +1,177 @@
1
+ // ../schema/src/doc-ops.ts
2
+ function jsonClone(value) {
3
+ return JSON.parse(JSON.stringify(value));
4
+ }
5
+ function cloneValue2(v) {
6
+ return v === undefined || v === null ? v : jsonClone(v);
7
+ }
8
+ function getNodeAtPath3(doc, path) {
9
+ let node = doc;
10
+ for (const key of path) {
11
+ if (node == null) {
12
+ return;
13
+ }
14
+ node = node[key];
15
+ }
16
+ return node;
17
+ }
18
+ function childArray2(node) {
19
+ if (Array.isArray(node)) {
20
+ throw new TypeError("Cannot insert into a children array; parentPath must point at a node");
21
+ }
22
+ if (!node.children) {
23
+ node.children = [];
24
+ }
25
+ if (!Array.isArray(node.children)) {
26
+ throw new TypeError("Cannot insert into mapped-array children; edit the map template instead");
27
+ }
28
+ return node.children;
29
+ }
30
+ function applyDocOpToDoc2(doc, op) {
31
+ switch (op.op) {
32
+ case "set-key": {
33
+ const node = getNodeAtPath3(doc, op.path);
34
+ if (!node) {
35
+ throw new Error(`doc-op-node-not-found:${op.path.join("/")}`);
36
+ }
37
+ const target = node;
38
+ if (op.value === undefined) {
39
+ delete target[op.key];
40
+ } else {
41
+ target[op.key] = cloneValue2(op.value);
42
+ }
43
+ return;
44
+ }
45
+ case "insert-child": {
46
+ const parent = getNodeAtPath3(doc, op.parentPath);
47
+ childArray2(parent).splice(op.index, 0, cloneValue2(op.node));
48
+ return;
49
+ }
50
+ case "remove-child": {
51
+ const parent = getNodeAtPath3(doc, op.parentPath);
52
+ childArray2(parent).splice(op.index, 1);
53
+ return;
54
+ }
55
+ case "set-child": {
56
+ const parent = getNodeAtPath3(doc, op.parentPath);
57
+ childArray2(parent).splice(op.index, 1, cloneValue2(op.node));
58
+ return;
59
+ }
60
+ case "move-child": {
61
+ assertNotIntoOwnSubtree(op);
62
+ const fromParent = getNodeAtPath3(doc, op.fromParentPath);
63
+ const toParent = getNodeAtPath3(doc, op.toParentPath);
64
+ const from = childArray2(fromParent);
65
+ const to = childArray2(toParent);
66
+ const [node] = from.splice(op.fromIndex, 1);
67
+ to.splice(op.toIndex, 0, node);
68
+ return;
69
+ }
70
+ default: {
71
+ break;
72
+ }
73
+ }
74
+ throw new Error(`unknown-doc-op:${op.op}`);
75
+ }
76
+ function shiftThroughSplice(parentPath, path, spliceIndex, delta, inclusive) {
77
+ const depth = parentPath.length;
78
+ const isProperPrefix = depth < path.length && parentPath.every((seg, i) => seg === path[i]);
79
+ if (!isProperPrefix || path[depth] !== "children" || typeof path[depth + 1] !== "number") {
80
+ return path;
81
+ }
82
+ const index = path[depth + 1];
83
+ if (inclusive ? index < spliceIndex : index <= spliceIndex) {
84
+ return path;
85
+ }
86
+ const shifted = [...path];
87
+ shifted[depth + 1] = index + delta;
88
+ return shifted;
89
+ }
90
+ function assertNotIntoOwnSubtree(op) {
91
+ const moved = [...op.fromParentPath, "children", op.fromIndex];
92
+ const target = op.toParentPath;
93
+ if (target.length >= moved.length && moved.every((seg, i) => seg === target[i])) {
94
+ throw new Error(`doc-op-move-into-self:${target.join("/")}`);
95
+ }
96
+ }
97
+ function insertionSlot(index, length) {
98
+ return index < 0 ? Math.max(length + index, 0) : Math.min(index, length);
99
+ }
100
+ function inverseOf(doc, op) {
101
+ switch (op.op) {
102
+ case "set-key": {
103
+ const node = getNodeAtPath3(doc, op.path);
104
+ if (!node) {
105
+ throw new Error(`doc-op-node-not-found:${op.path.join("/")}`);
106
+ }
107
+ const before = cloneValue2(node[op.key]);
108
+ return before === undefined ? { key: op.key, op: "set-key", path: op.path } : { key: op.key, op: "set-key", path: op.path, value: before };
109
+ }
110
+ case "insert-child": {
111
+ const { length } = insertableChildren(doc, op.parentPath);
112
+ return {
113
+ index: insertionSlot(op.index, length),
114
+ op: "remove-child",
115
+ parentPath: op.parentPath
116
+ };
117
+ }
118
+ case "remove-child": {
119
+ const removed = existingChild(doc, op.parentPath, op.index);
120
+ return { index: op.index, node: removed, op: "insert-child", parentPath: op.parentPath };
121
+ }
122
+ case "set-child": {
123
+ const replaced = existingChild(doc, op.parentPath, op.index);
124
+ return { index: op.index, node: replaced, op: "set-child", parentPath: op.parentPath };
125
+ }
126
+ case "move-child": {
127
+ assertNotIntoOwnSubtree(op);
128
+ const source = childrenAt(doc, op.fromParentPath);
129
+ assertIndex(source, op.fromParentPath, op.fromIndex);
130
+ const target = insertableChildren(doc, op.toParentPath);
131
+ const toIndex = insertionSlot(op.toIndex, target.length - (target === source ? 1 : 0));
132
+ return {
133
+ fromIndex: toIndex,
134
+ fromParentPath: shiftThroughSplice(op.fromParentPath, op.toParentPath, op.fromIndex, -1, false),
135
+ op: "move-child",
136
+ toIndex: op.fromIndex,
137
+ toParentPath: shiftThroughSplice(op.toParentPath, op.fromParentPath, toIndex, 1, true)
138
+ };
139
+ }
140
+ default: {
141
+ break;
142
+ }
143
+ }
144
+ throw new Error(`unknown-doc-op:${op.op}`);
145
+ }
146
+ function childrenAt(doc, parentPath) {
147
+ const parent = getNodeAtPath3(doc, parentPath);
148
+ return parent && Array.isArray(parent.children) ? parent.children : null;
149
+ }
150
+ function assertIndex(children, parentPath, index) {
151
+ if (!children || index < 0 || index >= children.length) {
152
+ throw new Error(`doc-op-node-not-found:${[...parentPath, "children", index].join("/")}`);
153
+ }
154
+ }
155
+ function existingChild(doc, parentPath, index) {
156
+ const children = childrenAt(doc, parentPath);
157
+ assertIndex(children, parentPath, index);
158
+ return cloneValue2(children[index]);
159
+ }
160
+ function insertableChildren(doc, parentPath) {
161
+ const node = getNodeAtPath3(doc, parentPath);
162
+ if (!node || typeof node !== "object" || Array.isArray(node)) {
163
+ throw new Error(`doc-op-node-not-found:${parentPath.join("/")}`);
164
+ }
165
+ if (node.children === undefined) {
166
+ return [];
167
+ }
168
+ if (!Array.isArray(node.children)) {
169
+ throw new TypeError(`doc-op-mapped-children:${parentPath.join("/")}`);
170
+ }
171
+ return node.children;
172
+ }
173
+
174
+ export { cloneValue2, getNodeAtPath3, childArray2, applyDocOpToDoc2, inverseOf };
175
+
176
+ //# debugId=FEDC5B4E1A6763C764756E2164756E21
177
+ //# sourceMappingURL=studio-aj9drheq.js.map