@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
@@ -9,15 +9,15 @@ import {
9
9
  } from "./studio-d8z5bajd.js";
10
10
  import {
11
11
  commitTabBuffers2
12
- } from "./studio-wnsyffg1.js";
12
+ } from "./studio-6vg0x5fz.js";
13
13
  import {
14
14
  getPlatform2
15
- } from "./studio-6nzaktvy.js";
15
+ } from "./studio-6pwn9j8c.js";
16
16
  import {
17
17
  formatByName2,
18
18
  formatForPath2,
19
19
  defaultContentFormat2
20
- } from "./studio-6gryj0sg.js";
20
+ } from "./studio-9vsvz7w7.js";
21
21
  import {
22
22
  getNestedStyle,
23
23
  ensureNestedStyle,
@@ -35,12 +35,251 @@ import {
35
35
  import {
36
36
  cloneValue2,
37
37
  childArray2,
38
- applyDocOpToDoc2
39
- } from "./studio-727xh0e3.js";
38
+ applyDocOpToDoc2,
39
+ inverseOf
40
+ } from "./studio-aj9drheq.js";
40
41
  import {
41
42
  __preload
42
43
  } from "./studio-5te5tqng.js";
43
44
 
45
+ // ../ai/src/tools.ts
46
+ function toolSuccess(data, summary) {
47
+ return { success: true, data, summary };
48
+ }
49
+ function toolError(error) {
50
+ return { success: false, error };
51
+ }
52
+ function createToolDefinition({
53
+ name,
54
+ description,
55
+ parameters,
56
+ strict = true,
57
+ llmStrict = false,
58
+ interactive,
59
+ execute
60
+ }) {
61
+ return {
62
+ name,
63
+ description,
64
+ parameters,
65
+ strict,
66
+ llmStrict,
67
+ ...interactive === undefined ? {} : { interactive },
68
+ execute
69
+ };
70
+ }
71
+ function createLedger(onRecord) {
72
+ const writes = [];
73
+ return {
74
+ record(write) {
75
+ writes.push(write);
76
+ onRecord?.(write);
77
+ },
78
+ writes
79
+ };
80
+ }
81
+ function createSessionFacts(sessionId = null, initial = {}) {
82
+ const facts = new Map(Object.entries(initial));
83
+ return {
84
+ sessionId,
85
+ get: (key) => facts.get(key),
86
+ set: (key, value) => {
87
+ facts.set(key, value);
88
+ },
89
+ toJSON: () => Object.fromEntries(facts)
90
+ };
91
+ }
92
+ var NEVER = new AbortController().signal;
93
+ function createToolContext(init = {}) {
94
+ const session = init.session ?? createSessionFacts();
95
+ return {
96
+ actor: init.actor ?? {
97
+ id: `assistant:${session.sessionId ?? "local"}:`,
98
+ kind: "assistant",
99
+ sessionId: session.sessionId,
100
+ turnId: ""
101
+ },
102
+ callId: init.callId ?? "",
103
+ ledger: init.ledger ?? createLedger(),
104
+ progress: init.progress ?? (() => {}),
105
+ session,
106
+ signal: init.signal ?? NEVER
107
+ };
108
+ }
109
+ function linkCallSignal(turn) {
110
+ const call = new AbortController;
111
+ if (turn.aborted) {
112
+ call.abort(turn.reason);
113
+ return { release: () => {}, signal: call.signal };
114
+ }
115
+ const onAbort = () => {
116
+ call.abort(turn.reason);
117
+ };
118
+ turn.addEventListener("abort", onAbort, { once: true });
119
+ return {
120
+ release: () => {
121
+ turn.removeEventListener("abort", onAbort);
122
+ },
123
+ signal: call.signal
124
+ };
125
+ }
126
+ function createToolRegistry() {
127
+ const _tools = new Map;
128
+ return {
129
+ register(tool) {
130
+ if (_tools.has(tool.name)) {
131
+ console.warn(`Tool "${tool.name}" is being re-registered.`);
132
+ }
133
+ _tools.set(tool.name, tool);
134
+ },
135
+ list() {
136
+ return [..._tools.values()];
137
+ },
138
+ listForLLM() {
139
+ return [..._tools.values()].map((t) => ({
140
+ type: "function",
141
+ function: {
142
+ name: t.name,
143
+ description: t.description,
144
+ parameters: t.parameters,
145
+ ...t.llmStrict === true ? { strict: true } : {}
146
+ }
147
+ }));
148
+ },
149
+ getDefinition(toolName) {
150
+ return _tools.get(toolName);
151
+ },
152
+ validate(toolName, args) {
153
+ const tool = _tools.get(toolName);
154
+ if (!tool) {
155
+ return { valid: false, errors: [`Unknown tool: "${toolName}"`] };
156
+ }
157
+ if (!tool.strict) {
158
+ return { valid: true };
159
+ }
160
+ const schema = tool.parameters;
161
+ if (!schema || !schema.properties) {
162
+ return { valid: true };
163
+ }
164
+ const errors = [];
165
+ const props = schema.properties;
166
+ const required = schema.required || [];
167
+ const argRecord = args;
168
+ for (const key of required) {
169
+ if (!(key in args) || argRecord[key] === undefined || argRecord[key] === null) {
170
+ errors.push(`Missing required argument: "${key}"`);
171
+ }
172
+ }
173
+ for (const [key, value] of Object.entries(argRecord)) {
174
+ const propSchema = props[key];
175
+ if (!propSchema) {
176
+ continue;
177
+ }
178
+ const expectedType = propSchema.type;
179
+ if (!expectedType) {
180
+ continue;
181
+ }
182
+ const actualType = Array.isArray(value) ? "array" : typeof value;
183
+ if (expectedType === "number" || expectedType === "integer") {
184
+ if (actualType === "number") {
185
+ continue;
186
+ }
187
+ if (actualType === "string") {
188
+ if (!Number.isNaN(Number(value))) {
189
+ continue;
190
+ }
191
+ errors.push(`Argument "${key}" should be a number, got non-numeric string "${value}"`);
192
+ continue;
193
+ }
194
+ errors.push(`Argument "${key}" should be a number, got ${actualType}`);
195
+ continue;
196
+ }
197
+ if (expectedType === "string" && actualType !== "string") {
198
+ errors.push(`Argument "${key}" should be a string, got ${actualType}`);
199
+ } else if (expectedType === "boolean" && actualType !== "boolean") {
200
+ errors.push(`Argument "${key}" should be a boolean, got ${actualType}`);
201
+ } else if (expectedType === "array" && actualType !== "array") {
202
+ errors.push(`Argument "${key}" should be an array, got ${actualType}`);
203
+ } else if (expectedType === "object" && actualType !== "object") {
204
+ errors.push(`Argument "${key}" should be an object, got ${actualType}`);
205
+ }
206
+ }
207
+ return errors.length > 0 ? { valid: false, errors } : { valid: true };
208
+ },
209
+ async execute(toolName, args, ctx = createToolContext()) {
210
+ const tool = _tools.get(toolName);
211
+ if (!tool) {
212
+ return toolError(`Unknown tool: "${toolName}"`);
213
+ }
214
+ const validation = this.validate(toolName, args);
215
+ if (!validation.valid) {
216
+ return toolError(`Validation failed: ${(validation.errors || []).join("; ")}`);
217
+ }
218
+ try {
219
+ return await tool.execute(args, ctx);
220
+ } catch (error) {
221
+ return toolError(`Tool "${toolName}" execution error: ${error.message}`);
222
+ }
223
+ }
224
+ };
225
+ }
226
+
227
+ // src/services/ai-writes.ts
228
+ var turns = [];
229
+ var MAX_TURNS = 50;
230
+ function openTurnLedger(turnId) {
231
+ return Object.assign(createLedger(), { turnId });
232
+ }
233
+ function fileTurn(anchor, writes) {
234
+ if (writes.length === 0) {
235
+ return [];
236
+ }
237
+ const turn = { id: anchor, writes: [...writes] };
238
+ turns.push(turn);
239
+ while (turns.length > MAX_TURNS) {
240
+ turns.shift();
241
+ }
242
+ return turn.writes;
243
+ }
244
+ function writesForTurn(id) {
245
+ return turns.find((turn) => turn.id === id)?.writes ?? [];
246
+ }
247
+ function summarizeWrites(writes) {
248
+ const applied = writes.filter((w) => w.ok);
249
+ const paths = new Set(applied.map((w) => w.path));
250
+ const failed = writes.length - applied.length;
251
+ if (paths.size === 0) {
252
+ return failed > 0 ? `${failed} change${failed === 1 ? "" : "s"} failed` : "";
253
+ }
254
+ const files = `Changed ${paths.size} file${paths.size === 1 ? "" : "s"}`;
255
+ const diskPaths = new Set(applied.filter((w) => w.disk).map((w) => w.path));
256
+ const parts = [files];
257
+ if (diskPaths.size > 0) {
258
+ parts.push(`${diskPaths.size} written to disk — undo cannot reach ${diskPaths.size === 1 ? "it" : "them"}`);
259
+ }
260
+ if (failed > 0) {
261
+ parts.push(`${failed} failed`);
262
+ }
263
+ return parts.join(" · ");
264
+ }
265
+ function resetAiWrites() {
266
+ turns.splice(0);
267
+ }
268
+ function turnAnchor(messages, userId) {
269
+ let anchor = null;
270
+ for (let index = messages.length - 1;index >= 0; index--) {
271
+ const message = messages[index];
272
+ if (message.id === userId) {
273
+ return anchor;
274
+ }
275
+ const drawn = message.role === "assistant" && (message.content || (message.toolCalls?.length ?? 0) > 0);
276
+ if (anchor === null && drawn) {
277
+ anchor = message.id;
278
+ }
279
+ }
280
+ return userId === undefined ? anchor : null;
281
+ }
282
+
44
283
  // ../schema/src/locale.ts
45
284
  var RTL_SCRIPTS = new Set([
46
285
  "Adlm",
@@ -340,30 +579,6 @@ function attrLabel(entry, attr) {
340
579
  }
341
580
  return camelToLabel(attr);
342
581
  }
343
- function abbreviateValue(val) {
344
- const map = {
345
- baseline: "base",
346
- column: "col",
347
- "column-reverse": "col-r",
348
- contents: "cnt",
349
- "flex-end": "end",
350
- "flex-start": "start",
351
- "flow-root": "flow",
352
- inline: "inl",
353
- "inline-block": "i-blk",
354
- "inline-flex": "i-flx",
355
- "inline-grid": "i-grd",
356
- normal: "norm",
357
- nowrap: "no-wr",
358
- "row-reverse": "row-r",
359
- "space-around": "arnd",
360
- "space-between": "betw",
361
- "space-evenly": "even",
362
- stretch: "str",
363
- "wrap-reverse": "wr-rev"
364
- };
365
- return map[val] || val;
366
- }
367
582
  function isMediaFormat(format) {
368
583
  return format === "image" || format === "uri-reference";
369
584
  }
@@ -1037,32 +1252,25 @@ function mutateMoveNode(tab, fromPath, toParentPath, toIndex) {
1037
1252
  if (!fromParent || !Array.isArray(fromParent.children) || !toParent) {
1038
1253
  return;
1039
1254
  }
1040
- const [node] = fromParent.children.splice(fromIdx, 1);
1041
- if (node === undefined) {
1255
+ if (fromParent.children[fromIdx] === undefined) {
1042
1256
  return;
1043
1257
  }
1044
1258
  let adjustedIndex = toIndex;
1045
1259
  if (fromParent === toParent && fromIdx < toIndex) {
1046
1260
  adjustedIndex -= 1;
1047
1261
  }
1262
+ const forward = {
1263
+ fromIndex: fromIdx,
1264
+ fromParentPath,
1265
+ op: "move-child",
1266
+ toIndex: adjustedIndex,
1267
+ toParentPath
1268
+ };
1269
+ const inverse = inverseOf(doc, forward);
1270
+ const [node] = fromParent.children.splice(fromIdx, 1);
1048
1271
  childArray2(toParent).splice(adjustedIndex, 0, node);
1049
1272
  recordPatch({ fromPath, op: "move", toIndex: adjustedIndex, toParentPath });
1050
- recordDocOp({
1051
- forward: {
1052
- fromIndex: fromIdx,
1053
- fromParentPath,
1054
- op: "move-child",
1055
- toIndex: adjustedIndex,
1056
- toParentPath
1057
- },
1058
- inverse: {
1059
- fromIndex: adjustedIndex,
1060
- fromParentPath: shiftPrefixedIndex(fromParentPath, toParentPath, fromIdx, -1, false),
1061
- op: "move-child",
1062
- toIndex: fromIdx,
1063
- toParentPath: shiftPrefixedIndex(toParentPath, fromParentPath, adjustedIndex, 1, true)
1064
- }
1065
- });
1273
+ recordDocOp({ forward, inverse });
1066
1274
  if (pathsEqual(primarySelection(tab.session.selection), fromPath)) {
1067
1275
  let idx = toIndex;
1068
1276
  if (fromParentPath.length === toParentPath.length && fromParentPath.every((v, i) => v === toParentPath[i]) && fromIdx < toIndex) {
@@ -1464,7 +1672,8 @@ function emptyContext() {
1464
1672
  openProjectInNewWindow: false,
1465
1673
  dataRows: false,
1466
1674
  windowControls: false,
1467
- findReferences: false
1675
+ findReferences: false,
1676
+ readFileBytes: false
1468
1677
  }
1469
1678
  };
1470
1679
  }
@@ -1678,7 +1887,7 @@ var MIRROR_DEBOUNCE_MS = 800;
1678
1887
  var MIRROR_MAX_LAG_MS = 2500;
1679
1888
  var collabModulePromise = null;
1680
1889
  function loadCollab() {
1681
- collabModulePromise ??= (__preload("n4j7qxyr"), import("./index-n4j7qxyr.js"));
1890
+ collabModulePromise ??= (__preload("9yjae3hz"), import("./index-9yjae3hz.js"));
1682
1891
  return collabModulePromise;
1683
1892
  }
1684
1893
  function maybePlatform() {
@@ -2917,6 +3126,9 @@ function defaultSlot(pane, tabId) {
2917
3126
  return workspace2.tabs.get(tabId)?.pinned === true ? pinnedCount(pane) : pane.tabOrder.length;
2918
3127
  }
2919
3128
  function setWorkspaceProject2(root, config = null) {
3129
+ if (workspace2.projectRoot && root !== workspace2.projectRoot) {
3130
+ resetAiWrites();
3131
+ }
2920
3132
  workspace2.projectRoot = root;
2921
3133
  workspace2.projectConfig = config;
2922
3134
  }
@@ -3439,7 +3651,7 @@ function runUnsplit() {
3439
3651
  closePane2(derived?.id ?? SECONDARY_PANE2);
3440
3652
  }
3441
3653
 
3442
- export { LANGUAGE_TAG_PATTERN, canonicalizeLocale, isWellFormedLocale, localeDirection, localeLabel, resolveI18n, localeOfPath, servedLocaleOfPath, translationKeyOfPath, translationPathFor, EDITOR_KIND_LABELS, editorKindForMode, canvasViewForMode, inCanvas, hasSelection, hasElementSelection, emptyContext, makeContext, keyScopeStack, PROJECT_CONFIG_PATH, createTab, editorKindOf, editorKindsOf, modeForEditorKind, disposeTab, primarySelection, selectionAnchor, isSelected, cloneSelection, toggleSelected, rangeSelection, isSpliceablePath, structuralBatch, uniquePaths, unifyValues, setPatchConsumer, recordDocOp, transactDoc, transact, beginBatch, endBatch, isBatching, batchTab, setHistoryDelegate, canUndo, canRedo, undo, redo, mutateInsertNode, mutateRemoveNode, mutateDuplicateNode, mutateRemoveNodes, mutateDuplicateNodes, mutateWrapNode, mutateMoveNode, mutateUpdateProperty, mutateUpdateStyle, mutateUpdateAttribute, mutateUpdateMediaStyle, mutateUpdateNestedStyle, mutateUpdateMediaNestedStyle, mutateUpdateNestedStylePath, mutateUpdateMediaNestedStylePath, mutateReplaceStyle, mutateAddDef, mutateRemoveDef, mutateUpdateDef, mutateRenameDef, mutateUpdateProp, mutateAddSwitchCase, mutateRemoveSwitchCase, mutateRenameSwitchCase, mutateUpdateFrontmatter, collabState, isCollabPath, stringArg, optionalStringArg, boundedNumberArg, booleanArg, enumArg, pathArg, nullablePathArg, pathListArg, argsSchema, enumProperty, derivedEnumProperty, numberProperty, booleanProperty, pathProperty, pathListProperty, stringProperty, coerceArgs, LOCALE_PLACEHOLDER, collectionForDirectory, collectionForFile, camelToLabel, toCamelCase, kebabToLabel, propLabel, attrLabel, abbreviateValue, isMediaFormat, inferInputType, findContentTypeSchema, friendlyNameToVar, varDisplayName, parseCemType, jsonClone, configureCollabSerializer, configureCollabParser, configureCollabNotifier, collabSourceContext, collabReadOnly, collabSave, flushAllCollab, setCollabEnabled, isCollabEnabled, PRIMARY_PANE2, SECONDARY_PANE2, MAX_PANES2, workspace2, activeTab2, activePane2, paneById2, paneOfTab2, focusPane2, isPaneFocused2, splitRight2, paneBeside2, receivingPane2, closePane2, paneIsEmpty2, detachTab2, insertIntoPane2, setWorkspaceProject2, isTabActive2, tabIsLive2, openTab2, promoteTab2, promoteDirtyPreviewTabs2, setTabPinned2, moveTab2, closeTab2, closeAllTabs2, replaceAllTabs2, activateTab2, moveTabToPane2, renameTab2, registerTabCommands2 };
3654
+ export { LANGUAGE_TAG_PATTERN, canonicalizeLocale, isWellFormedLocale, localeDirection, localeLabel, resolveI18n, localeOfPath, servedLocaleOfPath, translationKeyOfPath, translationPathFor, EDITOR_KIND_LABELS, editorKindForMode, canvasViewForMode, inCanvas, hasSelection, hasElementSelection, emptyContext, makeContext, keyScopeStack, toolSuccess, toolError, createToolDefinition, createSessionFacts, createToolContext, linkCallSignal, createToolRegistry, openTurnLedger, fileTurn, writesForTurn, summarizeWrites, resetAiWrites, turnAnchor, PROJECT_CONFIG_PATH, createTab, editorKindOf, editorKindsOf, modeForEditorKind, disposeTab, primarySelection, selectionAnchor, isSelected, cloneSelection, toggleSelected, rangeSelection, isSpliceablePath, structuralBatch, uniquePaths, unifyValues, setPatchConsumer, recordDocOp, transactDoc, transact, beginBatch, endBatch, isBatching, batchTab, setHistoryDelegate, canUndo, canRedo, undo, redo, mutateInsertNode, mutateRemoveNode, mutateDuplicateNode, mutateRemoveNodes, mutateDuplicateNodes, mutateWrapNode, mutateMoveNode, mutateUpdateProperty, mutateUpdateStyle, mutateUpdateAttribute, mutateUpdateMediaStyle, mutateUpdateNestedStyle, mutateUpdateMediaNestedStyle, mutateUpdateNestedStylePath, mutateUpdateMediaNestedStylePath, mutateReplaceStyle, mutateAddDef, mutateRemoveDef, mutateUpdateDef, mutateRenameDef, mutateUpdateProp, mutateAddSwitchCase, mutateRemoveSwitchCase, mutateRenameSwitchCase, mutateUpdateFrontmatter, collabState, isCollabPath, stringArg, optionalStringArg, boundedNumberArg, booleanArg, enumArg, pathArg, nullablePathArg, pathListArg, argsSchema, enumProperty, derivedEnumProperty, numberProperty, booleanProperty, pathProperty, pathListProperty, stringProperty, coerceArgs, LOCALE_PLACEHOLDER, collectionForDirectory, collectionForFile, camelToLabel, toCamelCase, kebabToLabel, propLabel, attrLabel, isMediaFormat, inferInputType, findContentTypeSchema, friendlyNameToVar, varDisplayName, parseCemType, jsonClone, configureCollabSerializer, configureCollabParser, configureCollabNotifier, collabSourceContext, collabReadOnly, collabSave, flushAllCollab, setCollabEnabled, isCollabEnabled, PRIMARY_PANE2, SECONDARY_PANE2, MAX_PANES2, workspace2, activeTab2, activePane2, paneById2, paneOfTab2, focusPane2, isPaneFocused2, splitRight2, paneBeside2, receivingPane2, closePane2, paneIsEmpty2, detachTab2, insertIntoPane2, setWorkspaceProject2, isTabActive2, tabIsLive2, openTab2, promoteTab2, promoteDirtyPreviewTabs2, setTabPinned2, moveTab2, closeTab2, closeAllTabs2, replaceAllTabs2, activateTab2, moveTabToPane2, renameTab2, registerTabCommands2 };
3443
3655
 
3444
- //# debugId=CC161DFB5A8EC33464756E2164756E21
3445
- //# sourceMappingURL=studio-gk2twyh4.js.map
3656
+ //# debugId=C120E00BDB78927E64756E2164756E21
3657
+ //# sourceMappingURL=studio-dgdm6vvt.js.map
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  getPlatform2
3
- } from "./studio-6nzaktvy.js";
3
+ } from "./studio-6pwn9j8c.js";
4
4
  import {
5
5
  normalizeProjectPath
6
- } from "./studio-d1n2bykn.js";
6
+ } from "./studio-3nprwbd9.js";
7
7
  import {
8
8
  extensionOf,
9
9
  mediaKind,
10
10
  baseName,
11
11
  dirName
12
- } from "./studio-b7xacrwe.js";
12
+ } from "./studio-sceg8ws0.js";
13
13
 
14
14
  // src/files/media-meta.ts
15
15
  var settled = new Map;
@@ -115,4 +115,4 @@ function mediaMetaSummary(meta) {
115
115
  export { peekMediaMeta, seedMediaMeta, loadMediaMeta, recordImageSize, invalidateMediaMeta, formatBytes, mediaMetaSummary };
116
116
 
117
117
  //# debugId=23AD97ADF0A22AE164756E2164756E21
118
- //# sourceMappingURL=studio-gtfq1dkz.js.map
118
+ //# sourceMappingURL=studio-dwdcr2e8.js.map