@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
@@ -2,13 +2,13 @@ import {
2
2
  resolveI18n,
3
3
  emptyContext,
4
4
  activeTab2
5
- } from "./studio-gk2twyh4.js";
5
+ } from "./studio-dgdm6vvt.js";
6
6
  import {
7
7
  projectState
8
8
  } from "./studio-m1p9b6c3.js";
9
9
  import {
10
10
  shell
11
- } from "./studio-fzjx96t2.js";
11
+ } from "./studio-mfkh1q8d.js";
12
12
 
13
13
  // src/commands/levels.ts
14
14
  var LEVELS = ["application", "project", "document", "selection"];
@@ -220,6 +220,9 @@ function registerPanel(panel) {
220
220
  throw new Error(`Panel "${panel.id}" violates the level × placement matrix:
221
221
  ${detail}`);
222
222
  }
223
+ if (panel.railLabel !== undefined && (panel.railLabel.trim() === "" || !panel.title.startsWith(panel.railLabel))) {
224
+ throw new Error(`Panel "${panel.id}" declares railLabel "${panel.railLabel}", which is not a leading part ` + `of its title "${panel.title}": the rail button's accessible name is the title, and the ` + `words on screen must be inside it (WCAG 2.5.3, Label in Name).`);
225
+ }
223
226
  panelRegistry.set(panel.id, panel);
224
227
  }
225
228
  function getPanel(id) {
@@ -254,5 +257,5 @@ function railPanelSet() {
254
257
 
255
258
  export { LEVELS, KEY_SCOPES, CATEGORIES, checkRecordPlacements, panelContext, registerPanel, getPanel, listPanels, isPanelVisible, railGroups, railPanelSet };
256
259
 
257
- //# debugId=18BC2C98470D23FD64756E2164756E21
258
- //# sourceMappingURL=studio-27q131j3.js.map
260
+ //# debugId=6E2BE7B96A8BC2F564756E2164756E21
261
+ //# sourceMappingURL=studio-fqpkpq1t.js.map
@@ -41,16 +41,15 @@ import {
41
41
  stringArg,
42
42
  kebabToLabel,
43
43
  propLabel,
44
- abbreviateValue,
45
44
  inferInputType,
46
45
  friendlyNameToVar,
47
46
  varDisplayName,
48
47
  activeTab2
49
- } from "./studio-gk2twyh4.js";
48
+ } from "./studio-dgdm6vvt.js";
50
49
  import {
51
50
  isPopover,
52
51
  activeRegistry
53
- } from "./studio-d1n2bykn.js";
52
+ } from "./studio-3nprwbd9.js";
54
53
  import {
55
54
  mountExpressionEditor,
56
55
  livePreviewExpression,
@@ -76,14 +75,14 @@ import {
76
75
  bindContentHost,
77
76
  isCustomElementDoc,
78
77
  collectCssParts
79
- } from "./studio-ye9drbk8.js";
78
+ } from "./studio-rav5bpmp.js";
80
79
  import {
81
80
  inspectorTabRegion,
82
81
  inspectorStatementsRegion,
83
82
  registerSurface,
84
83
  mountSurface,
85
84
  showPromptDialog2
86
- } from "./studio-0j7r7s9g.js";
85
+ } from "./studio-ag3z6shb.js";
87
86
  import {
88
87
  VALUE_SOURCE_LABELS,
89
88
  VALUE_SOURCE_HINTS,
@@ -95,40 +94,40 @@ import {
95
94
  effectiveSlotMode,
96
95
  slotModeSeed,
97
96
  switchSlotMode
98
- } from "./studio-4f3psrk1.js";
97
+ } from "./studio-w7gpcvfj.js";
99
98
  import {
100
99
  mediaDisplayName,
101
100
  schemeOfQuery,
102
101
  parseMediaEntries,
103
102
  dialogPathFor
104
- } from "./studio-drg8qj9k.js";
103
+ } from "./studio-mrh0a92f.js";
105
104
  import {
106
105
  openMenu2
107
- } from "./studio-jt27ta6x.js";
106
+ } from "./studio-mt79tn56.js";
108
107
  import {
109
108
  getEffectiveMedia,
110
109
  getEffectiveStyle,
111
110
  DEFAULT_INSPECTOR_TAB,
112
111
  isInspectorTabId,
113
112
  shell
114
- } from "./studio-fzjx96t2.js";
113
+ } from "./studio-mfkh1q8d.js";
115
114
  import {
116
115
  peekUsages2,
117
116
  loadUsages2,
118
117
  usageFiles2
119
- } from "./studio-nq5yf5mp.js";
118
+ } from "./studio-557bmn0x.js";
120
119
  import {
121
120
  selectStylebookTag,
122
121
  INSPECTOR_TABS
123
- } from "./studio-nfx354t1.js";
122
+ } from "./studio-bh47w0cy.js";
124
123
  import {
125
124
  cloneValue2
126
- } from "./studio-727xh0e3.js";
125
+ } from "./studio-aj9drheq.js";
127
126
  // src/surfaces/logic-panel.json
128
127
  var logic_panel_default = {
129
128
  $schema: "https://jxsuite.com/schema/v1",
130
129
  $id: "StudioLogicPanel",
131
- $description: "The Inspector's **Logic** tab — everything about how the selected element BEHAVES, as a Jx document over the kit. Plan §6.5 re-split the inspector by task rather than by data type: wiring a `$switch`, wiring a repeater to a collection and wiring a click handler are one job, and they were three, split across two tabs because a `$switch` is stored as a property and a click handler as a property-shaped function. So there are four sections here — Repeating list, Condition, Events, and a custom element's outward contract (Observed Attributes · CSS Properties · CSS Parts) — and each of them is a projection. The adapter (`panels/events-panel.ts`) keeps every decision: what the selection is, which rungs a position permits, what a handler currently holds, which elements of a multi-selection disagree about a key, and what a commit writes. Nothing here reads the document, asks the schema a question or knows what a Value Source is. Two islands, both through `onNodeCreated` (studio-ui-guidelines.md §9.4): `[part=\"control-host\"]` receives the expression editor, which is a lit surface of its own, and `[part=\"statements-host\"]` receives the `statements` surface, which is a mounted document of its own. Every bindable row carries `data-prop`, which is what `inspector/field:<prop>` addresses.",
130
+ $description: "The Inspector's **Logic** tab — everything about how the selected element BEHAVES, as a Jx document over the kit. The Inspector is split by task rather than by data type (§6): wiring a `$switch`, wiring a repeater to a collection and wiring a click handler are one job, and they were three, split across two tabs because a `$switch` is stored as a property and a click handler as a property-shaped function. So there are four sections here — Repeating list, Condition, Events, and a custom element's outward contract (Observed Attributes · CSS Properties · CSS Parts) — and each of them is a projection. The adapter (`panels/events-panel.ts`) keeps every decision: what the selection is, which rungs a position permits, what a handler currently holds, which elements of a multi-selection disagree about a key, and what a commit writes. Nothing here reads the document, asks the schema a question or knows what a Value Source is. Two islands, both through `onNodeCreated` (studio-ui-guidelines.md §9.4): `[part=\"control-host\"]` receives the expression editor, which is a lit surface of its own, and `[part=\"statements-host\"]` receives the `statements` surface, which is a mounted document of its own. Every bindable row carries `data-prop`, which is what `inspector/field:<prop>` addresses.",
132
131
  tagName: "div",
133
132
  attributes: {
134
133
  part: "logic"
@@ -141,7 +140,7 @@ var logic_panel_default = {
141
140
  fontSize: "var(--jx-text-md)",
142
141
  color: "var(--fg)",
143
142
  '& [part="empty"]': {
144
- $description: "The one empty-state pattern (§11.2), drawn here because a document cannot render a lit helper. It is a copy rather than a move — every panel still lit renders through that helper — and it goes when the last of them converts.",
143
+ $description: "The one empty-state pattern (studio-ui-guidelines.md §11.2), drawn here because a document cannot render a lit helper. It is a copy rather than a move — every panel still lit renders through that helper — and it goes when the last of them converts.",
145
144
  display: "flex",
146
145
  flexDirection: "column",
147
146
  alignItems: "center",
@@ -399,7 +398,7 @@ var logic_panel_default = {
399
398
  },
400
399
  children: [
401
400
  {
402
- $description: 'Repeating list. Filter and Sort are always drawn: they used to hide behind `+ Add filter`, which seeded `{ $ref: "#/state/" }` — a binding to the empty pointer, which is not a signal — so the row opened already bound to nothing and the only way to type a literal was to cycle the mode ring twice (§11.4). A repeater has exactly three inputs, and an empty row states that better than a button does.',
401
+ $description: 'Repeating list. Filter and Sort are always drawn: they used to hide behind `+ Add filter`, which seeded `{ $ref: "#/state/" }` — a binding to the empty pointer, which is not a signal — so the row opened already bound to nothing and the only way to type a literal was to cycle the mode ring twice (§6.6). A repeater has exactly three inputs, and an empty row states that better than a button does.',
403
402
  tagName: "div",
404
403
  attributes: {
405
404
  part: "repeater-slot",
@@ -457,7 +456,7 @@ var logic_panel_default = {
457
456
  $ref: "$map/item/key"
458
457
  },
459
458
  map: {
460
- $description: "A bindable value as a first-class field row. Every position it serves is a single-line expression — a collection, a filter, a sort key, a `$switch` — so it draws one widget rather than dispatching over a widget type: the textarea and checkbox arms the lit version carried had no caller in either tab. The set dot clears the position outright and is disabled where the position is mandatory; the source chip opens the rung picker rather than cycling, so any rung the position permits is one action away (§6.3).",
459
+ $description: "A bindable value as a first-class field row. Every position it serves is a single-line expression — a collection, a filter, a sort key, a `$switch` — so it draws one widget rather than dispatching over a widget type: the textarea and checkbox arms the lit version carried had no caller in either tab. The set dot clears the position outright and is disabled where the position is mandatory; the source chip opens the rung picker rather than cycling, so any rung the position permits is one action away (§6.6).",
461
460
  tagName: "jx-field",
462
461
  attributes: {
463
462
  part: "field",
@@ -761,7 +760,7 @@ var logic_panel_default = {
761
760
  $ref: "$map/item/key"
762
761
  },
763
762
  map: {
764
- $description: "A bindable value as a first-class field row. Every position it serves is a single-line expression — a collection, a filter, a sort key, a `$switch` — so it draws one widget rather than dispatching over a widget type: the textarea and checkbox arms the lit version carried had no caller in either tab. The set dot clears the position outright and is disabled where the position is mandatory; the source chip opens the rung picker rather than cycling, so any rung the position permits is one action away (§6.3).",
763
+ $description: "A bindable value as a first-class field row. Every position it serves is a single-line expression — a collection, a filter, a sort key, a `$switch` — so it draws one widget rather than dispatching over a widget type: the textarea and checkbox arms the lit version carried had no caller in either tab. The set dot clears the position outright and is disabled where the position is mandatory; the source chip opens the rung picker rather than cycling, so any rung the position permits is one action away (§6.6).",
765
764
  tagName: "jx-field",
766
765
  attributes: {
767
766
  part: "field",
@@ -1272,7 +1271,7 @@ var logic_panel_default = {
1272
1271
  $ref: "$map/item/key"
1273
1272
  },
1274
1273
  map: {
1275
- $description: "One `on*` key. The Mixed contract (§6.5) splits in two and this row shows both halves: which events exist, how each is produced, and its removal are properties of the BATCH — binding one handler to six buttons is a single decision, so those three controls write to every selected element in one transaction — while what a handler CONTAINS is the PRIMARY's, because six elements do not share one body and broadcasting a keystroke into six of them would destroy five. The dot says `mixed` when the selected elements disagree; the body below it stays the primary's.",
1274
+ $description: "One `on*` key. The Mixed contract (§6.7) splits in two and this row shows both halves: which events exist, how each is produced, and its removal are properties of the BATCH — binding one handler to six buttons is a single decision, so those three controls write to every selected element in one transaction — while what a handler CONTAINS is the PRIMARY's, because six elements do not share one body and broadcasting a keystroke into six of them would destroy five. The dot says `mixed` when the selected elements disagree; the body below it stays the primary's.",
1276
1275
  tagName: "div",
1277
1276
  attributes: {
1278
1277
  part: "binding",
@@ -1286,7 +1285,7 @@ var logic_panel_default = {
1286
1285
  },
1287
1286
  children: [
1288
1287
  {
1289
- $description: "The event NAME, and it is free-form rather than a list of ten. The menu offers what this element already binds plus the ten worth suggesting, and its last row asks for any other name through the one prompt dialog Studio has — so `ondragover`, `onpointerdown` and every custom event a component emits are bindable, which is exactly what §6.5 asks for and what the closed picker refused.",
1288
+ $description: "The event NAME, and it is free-form rather than a list of ten. The menu offers what this element already binds plus the ten worth suggesting, and its last row asks for any other name through the one prompt dialog Studio has — so `ondragover`, `onpointerdown` and every custom event a component emits are bindable, which is exactly what §6.1 asks for and what the closed picker refused.",
1290
1289
  tagName: "jx-action-button",
1291
1290
  attributes: {
1292
1291
  part: "event-name"
@@ -2898,7 +2897,7 @@ function computeInheritedSources(style, mediaNames, activeTab, activeSelector =
2898
2897
  var target_line_default = {
2899
2898
  $schema: "https://jxsuite.com/schema/v1",
2900
2899
  $id: "StudioTargetLine",
2901
- $description: "The Style tab's edit target, as one sentence (plan §6.1): element · breakpoint · scheme variant · selector, then the chip that states how wide the blast radius is. Every word of the sentence is a control, because a sentence you cannot act on is a caption and the panel already had one of those. The breakpoint and scheme segments ROUTE to where those axes are defined rather than offering a third list to pick from — the Style tab owns the selector axis and nothing else — so the selector is the one segment with a menu, and that menu is the kit's. The project-scope warning band is not decoration: entering Stylebook converts every edit from `this element` to `every element of this tag`, and the band states that before the first keystroke.",
2900
+ $description: "The Style tab's edit target, as one sentence (§6.2): element · breakpoint · scheme variant · selector, then the chip that states how wide the blast radius is. Every word of the sentence is a control, because a sentence you cannot act on is a caption and the panel already had one of those. The breakpoint and scheme segments ROUTE to where those axes are defined rather than offering a third list to pick from — the Style tab owns the selector axis and nothing else — so the selector is the one segment with a menu, and that menu is the kit's. The project-scope warning band is not decoration: entering Stylebook converts every edit from `this element` to `every element of this tag`, and the band states that before the first keystroke.",
2902
2901
  tagName: "div",
2903
2902
  attributes: {
2904
2903
  part: "target"
@@ -3511,11 +3510,11 @@ var css_meta_default = {
3511
3510
  $input: "button-group",
3512
3511
  $buttonValues: ["flex", "grid", "block", "inline", "none"],
3513
3512
  $icons: {
3514
- flex: "display-flex",
3515
- grid: "display-grid",
3516
- block: "display-block",
3517
- inline: "display-inline",
3518
- none: "display-none"
3513
+ flex: "columns",
3514
+ grid: "grid-four",
3515
+ block: "rectangle",
3516
+ inline: "text-t",
3517
+ none: "eye-slash"
3519
3518
  },
3520
3519
  enum: [
3521
3520
  "block",
@@ -3636,8 +3635,9 @@ var css_meta_default = {
3636
3635
  $order: 71,
3637
3636
  type: "string",
3638
3637
  $input: "button-group",
3638
+ $buttonValues: ["nowrap", "wrap"],
3639
3639
  $icons: {
3640
- wrap: "wrap-text"
3640
+ wrap: "arrow-u-down-left"
3641
3641
  },
3642
3642
  enum: ["nowrap", "wrap", "wrap-reverse"],
3643
3643
  $show: [
@@ -3661,12 +3661,12 @@ var css_meta_default = {
3661
3661
  "space-evenly"
3662
3662
  ],
3663
3663
  $icons: {
3664
- "flex-start": "justify-start",
3665
- "flex-end": "justify-end",
3666
- center: "justify-center",
3667
- "space-between": "justify-between",
3668
- "space-around": "justify-around",
3669
- "space-evenly": "justify-evenly"
3664
+ "flex-start": "align-left",
3665
+ "flex-end": "align-right",
3666
+ center: "align-center-horizontal",
3667
+ "space-between": "arrows-out-line-horizontal",
3668
+ "space-around": "arrows-in-line-horizontal",
3669
+ "space-evenly": "arrows-horizontal"
3670
3670
  },
3671
3671
  enum: [
3672
3672
  "flex-start",
@@ -3693,11 +3693,11 @@ var css_meta_default = {
3693
3693
  $input: "button-group",
3694
3694
  $buttonValues: ["stretch", "flex-start", "flex-end", "center", "baseline"],
3695
3695
  $icons: {
3696
- stretch: "align-stretch-v",
3697
- "flex-start": "align-start-v",
3698
- "flex-end": "align-end-v",
3699
- center: "align-center-v",
3700
- baseline: "align-baseline"
3696
+ stretch: "arrows-out-line-vertical",
3697
+ "flex-start": "align-top",
3698
+ "flex-end": "align-bottom",
3699
+ center: "align-center-vertical",
3700
+ baseline: "text-a-underline"
3701
3701
  },
3702
3702
  enum: ["stretch", "flex-start", "flex-end", "center", "baseline", "start", "end", "normal"],
3703
3703
  $show: [
@@ -3714,11 +3714,11 @@ var css_meta_default = {
3714
3714
  $input: "button-group",
3715
3715
  $buttonValues: ["normal", "flex-start", "flex-end", "center", "space-between", "stretch"],
3716
3716
  $icons: {
3717
- "flex-start": "justify-start",
3718
- "flex-end": "justify-end",
3719
- center: "justify-center",
3720
- "space-between": "justify-between",
3721
- stretch: "align-stretch-v"
3717
+ "flex-start": "align-top",
3718
+ "flex-end": "align-bottom",
3719
+ center: "align-center-vertical",
3720
+ "space-between": "arrows-vertical",
3721
+ stretch: "arrows-out-line-vertical"
3722
3722
  },
3723
3723
  enum: [
3724
3724
  "normal",
@@ -3818,11 +3818,11 @@ var css_meta_default = {
3818
3818
  $input: "button-group",
3819
3819
  $buttonValues: ["auto", "flex-start", "flex-end", "center", "baseline", "stretch"],
3820
3820
  $icons: {
3821
- stretch: "align-stretch-v",
3822
- "flex-start": "align-start-v",
3823
- "flex-end": "align-end-v",
3824
- center: "align-center-v",
3825
- baseline: "align-baseline"
3821
+ stretch: "arrows-out-line-vertical",
3822
+ "flex-start": "align-top",
3823
+ "flex-end": "align-bottom",
3824
+ center: "align-center-vertical",
3825
+ baseline: "text-a-underline"
3826
3826
  },
3827
3827
  enum: ["auto", "flex-start", "flex-end", "center", "baseline", "stretch", "start", "end"],
3828
3828
  $show: [
@@ -5110,7 +5110,7 @@ var UNIT_RE = /^(-?[\d.]+)(px|rem|em|%|vw|vh|svw|svh|dvh|ms|s|fr|ch|ex|deg)?$/;
5110
5110
  var style_panel_default = {
5111
5111
  $schema: "https://jxsuite.com/schema/v1",
5112
5112
  $id: "StudioStylePanel",
5113
- $description: "The Inspector's Style tab: the Target Line's host, one filter, then the CSS property accordion — every row saying where its value came from (§6.2), every section heading tallying what is set inside it. Nothing here knows what CSS is. `panels/style-panel.ts` resolves the compound coordinate (selection, breakpoint, scheme layer, nested selector), reads css-meta, decides which of seven controls a property gets, works out its provenance and what a commit writes; this document draws the answer and decides nothing. That split is what lets the tab stop going through `panels/panel-scheduler.ts`: the focus guard existed because a lit repaint of the whole panel could take the field a reader was typing into, and a document is one runtime effect per bound property with an equal write skipped.",
5113
+ $description: "The Inspector's Style tab: the Target Line's host, one filter, then the CSS property accordion — every row saying where its value came from (§6.7), every section heading tallying what is set inside it. Nothing here knows what CSS is. `panels/style-panel.ts` resolves the compound coordinate (selection, breakpoint, scheme layer, nested selector), reads css-meta, decides which of seven controls a property gets, works out its provenance and what a commit writes; this document draws the answer and decides nothing. That split is what lets the tab stop going through `panels/panel-scheduler.ts`: the focus guard existed because a lit repaint of the whole panel could take the field a reader was typing into, and a document is one runtime effect per bound property with an equal write skipped.",
5114
5114
  tagName: "div",
5115
5115
  attributes: {
5116
5116
  part: "panel"
@@ -5123,7 +5123,7 @@ var style_panel_default = {
5123
5123
  fontFamily: "var(--jx-font-sans)",
5124
5124
  color: "var(--jx-fg)",
5125
5125
  '& [part="empty"]': {
5126
- $description: "The one empty-state pattern (`panels/empty-state.ts`), drawn here because a document cannot render a lit helper. Its rules are what is kept (§11): one sentence saying what the region is FOR, then the action that fills it.",
5126
+ $description: "The one empty-state pattern (`panels/empty-state.ts`), drawn here because a document cannot render a lit helper. Its rules are what is kept (studio-ui-guidelines.md §11): one sentence saying what the region is FOR, then the action that fills it.",
5127
5127
  display: "flex",
5128
5128
  flexDirection: "column",
5129
5129
  alignItems: "center",
@@ -5215,7 +5215,7 @@ var style_panel_default = {
5215
5215
  minInlineSize: "0"
5216
5216
  },
5217
5217
  '& [part="chip-slot"] > [part="chip"]': {
5218
- $description: "One vocabulary, five states (§6.2). `default` draws nothing at all — absence IS the ghost — which is why there is no rule for it: the document never makes the node. `set` is the 6px accent disc `.set-dot` has always been; the two that carry information wear their donor's name in a bordered pill, and `mixed` is neutral on purpose because it says nothing about WHERE a value came from, only that the selection disagrees.",
5218
+ $description: "One vocabulary, five states (§6.7). `default` draws nothing at all — absence IS the ghost — which is why there is no rule for it: the document never makes the node. `set` is the 6px accent disc `.set-dot` has always been; the two that carry information wear their donor's name in a bordered pill, and `mixed` is neutral on purpose because it says nothing about WHERE a value came from, only that the selection disagrees.",
5219
5219
  display: "inline-flex",
5220
5220
  alignItems: "center",
5221
5221
  flexShrink: "0",
@@ -5299,7 +5299,7 @@ var style_panel_default = {
5299
5299
  background: "var(--jx-handler)"
5300
5300
  },
5301
5301
  '& [part="source"]': {
5302
- $description: "The Value Source chip (§6.3): quiet while the value is a literal, accent-tinted the moment it is produced from something else. A CSS declaration has exactly two rungs — `JxStyle` admits no `$ref` — so the picker it opens is two rows, and that is derived from the schema rather than written here.",
5302
+ $description: "The Value Source chip (§6.6): quiet while the value is a literal, accent-tinted the moment it is produced from something else. A CSS declaration has exactly two rungs — `JxStyle` admits no `$ref` — so the picker it opens is two rows, and that is derived from the schema rather than written here.",
5303
5303
  flex: "none",
5304
5304
  color: "var(--jx-fg-dim)"
5305
5305
  },
@@ -5990,7 +5990,7 @@ var style_panel_default = {
5990
5990
  }
5991
5991
  },
5992
5992
  group: {
5993
- $description: "The dual-mode control: a number beside its unit. Type what you mean, or take a unit from the list — and the list is the kit MENU rather than a second popup of this document's own (§12.5), because every row of it is a verb: a unit re-attaches to the number the field holds. A keyword row, whose list commits a value, is the `keywords` case instead — and so is the font row now, because a font is chosen by looking and a menu row cannot draw itself in its own face.",
5993
+ $description: "The dual-mode control: a number beside its unit. Type what you mean, or take a unit from the list — and the list is the kit MENU rather than a second popup of this document's own (studio-ui-guidelines.md §12.5), because every row of it is a verb: a unit re-attaches to the number the field holds. A keyword row, whose list commits a value, is the `keywords` case instead — and so is the font row now, because a font is chosen by looking and a menu row cannot draw itself in its own face.",
5994
5994
  tagName: "div",
5995
5995
  attributes: {
5996
5996
  part: "group"
@@ -6179,7 +6179,11 @@ var style_panel_default = {
6179
6179
  },
6180
6180
  children: [
6181
6181
  {
6182
+ $description: "The abbreviation, for a value with no glyph, and HIDDEN rather than empty on a button that has one. The kit's `[part=\"label\"]` is `display: contents`, so an empty span is still a flex item in the control, and the control's 4px gap sits between the glyph and nothing: every icon button in the tab drew 26px wide with its glyph pushed 2px off centre, instead of 22px and centred. Hidden, it takes no box, and the button's name and tooltip are the value either way.",
6182
6183
  tagName: "span",
6184
+ attributes: {
6185
+ hidden: "${$map.item.text ? null : ''}"
6186
+ },
6183
6187
  textContent: "${$map.item.text}"
6184
6188
  }
6185
6189
  ]
@@ -7041,16 +7045,6 @@ function rowActions(key) {
7041
7045
  function isNumericValue(value) {
7042
7046
  return /^-?\d*\.?\d*$/.test(value);
7043
7047
  }
7044
- var BUTTON_GLYPHS = {
7045
- "arrow-down": "arrow-down",
7046
- "arrow-left": "arrow-left",
7047
- "arrow-right": "arrow-right",
7048
- "arrow-up": "arrow-up",
7049
- "text-align-center": "text-align-center",
7050
- "text-align-justify": "text-align-justify",
7051
- "text-align-left": "text-align-left",
7052
- "text-align-right": "text-align-right"
7053
- };
7054
7048
  function buttonGroup(entry, rowKey, value) {
7055
7049
  const values = entry.$buttonValues || entry.enum || [];
7056
7050
  const iconMap = entry.$icons || {};
@@ -7058,12 +7052,12 @@ function buttonGroup(entry, rowKey, value) {
7058
7052
  const enumValues = entry.enum;
7059
7053
  const extra = buttonValues && enumValues && enumValues.length > buttonValues.length ? enumValues.filter((v) => !buttonValues.includes(v)) : [];
7060
7054
  const buttons = values.map((v) => {
7061
- const icon = BUTTON_GLYPHS[iconMap[v] ?? ""] ?? "";
7055
+ const icon = iconMap[v] ?? "";
7062
7056
  return {
7063
7057
  icon,
7064
7058
  row: rowKey,
7065
7059
  selected: v === value,
7066
- text: icon === "" ? abbreviateValue(v) : "",
7060
+ text: icon === "" ? v : "",
7067
7061
  title: v,
7068
7062
  value: v
7069
7063
  };
@@ -8079,7 +8073,7 @@ function registerStyleCommands(registry) {
8079
8073
  var inspector_dock_default = {
8080
8074
  $schema: "https://jxsuite.com/schema/v1",
8081
8075
  $id: "StudioInspectorDock",
8082
- $description: "⑨ The Inspector dock's own chrome, as a Jx document over the kit: a header naming what the dock is pointed at, a real `tablist` of four tabs, and four `tabpanel`s. It draws no tab BODY — all four are mounted documents of their own (`surfaces/properties-panel.json`, `surfaces/style-panel.json`, `surfaces/logic-panel.json`, and the assistant's) — so each panel carries one empty `[part=\"panel-body\"]` island the adapter announces through `onNodeCreated` (studio-ui-guidelines.md §9.4). The four panels are keyed on the tab id and the id list never changes, so a body host is created ONCE and lives as long as the dock: that is what the old module's hand-built permanent containers were for, and it is now a property of a keyed `$map` rather than a rule someone has to keep. `panels/right-panel.ts` keeps every decision — which tab is selected, per document or detached; what the target's name is; and which of the four seams a host is handed to.",
8076
+ $description: "The Inspector dock's own chrome, as a Jx document over the kit: a header naming what the dock is pointed at, a real `tablist` of four tabs, and four `tabpanel`s. It draws no tab BODY — all four are mounted documents of their own (`surfaces/properties-panel.json`, `surfaces/style-panel.json`, `surfaces/logic-panel.json`, and the assistant's) — so each panel carries one empty `[part=\"panel-body\"]` island the adapter announces through `onNodeCreated` (studio-ui-guidelines.md §9.4). The four panels are keyed on the tab id and the id list never changes, so a body host is created ONCE and lives as long as the dock: that is what the old module's hand-built permanent containers were for, and it is now a property of a keyed `$map` rather than a rule someone has to keep. `panels/right-panel.ts` keeps every decision — which tab is selected, per document or detached; what the target's name is; and which of the four seams a host is handed to.",
8083
8077
  tagName: "div",
8084
8078
  attributes: {
8085
8079
  part: "inspector-dock"
@@ -8120,7 +8114,7 @@ var inspector_dock_default = {
8120
8114
  }
8121
8115
  },
8122
8116
  '& [part="tabs"]': {
8123
- $description: "Four words in a 280px dock, allowed to compress rather than to become anonymous — which is why the tabs are not icons (§3.2 ⑨). The kit tab's own 220px cap would let one tab push the last off the strip, so each takes an equal quarter.",
8117
+ $description: "Four words in a 280px dock, allowed to compress rather than to become anonymous — which is why the tabs are not icons (§6). The kit tab's own 220px cap would let one tab push the last off the strip, so each takes an equal quarter.",
8124
8118
  flex: "0 0 auto",
8125
8119
  gap: "0",
8126
8120
  fontSize: "var(--jx-text-sm)"
@@ -8444,5 +8438,5 @@ function inspectorTarget() {
8444
8438
 
8445
8439
  export { initCssData, registerStyleCommands, mount2, unmount2, render2, inspectorTab2, setInspectorTab2 };
8446
8440
 
8447
- //# debugId=674E8D1C61241CA264756E2164756E21
8448
- //# sourceMappingURL=studio-c0qgc3tn.js.map
8441
+ //# debugId=0EE0326B4725F96C64756E2164756E21
8442
+ //# sourceMappingURL=studio-fy320dfc.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
  projectState
6
6
  } from "./studio-m1p9b6c3.js";
@@ -145,4 +145,4 @@ function computeRelativePath2(fromDocPath, toCompPath) {
145
145
  export { componentMetaFrom, componentRegistry2, loadComponentRegistry2, noteComponentSaved2, buildComponentInstance2, computeRelativePath2 };
146
146
 
147
147
  //# debugId=466165F8ABAECB0564756E2164756E21
148
- //# sourceMappingURL=studio-zjjde71a.js.map
148
+ //# sourceMappingURL=studio-gjj4bbfx.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
  flattenTree,
6
6
  nodeLabel,
@@ -10,20 +10,20 @@ import {
10
10
  loadFormats2,
11
11
  formatByExtension2,
12
12
  documentExtensions2
13
- } from "./studio-6gryj0sg.js";
13
+ } from "./studio-9vsvz7w7.js";
14
14
  import {
15
15
  activeTab2
16
- } from "./studio-gk2twyh4.js";
16
+ } from "./studio-dgdm6vvt.js";
17
17
  import {
18
18
  registerSurface,
19
19
  mountSurface,
20
20
  runReported,
21
21
  runActiveReported,
22
22
  getLayerSlot2
23
- } from "./studio-0j7r7s9g.js";
23
+ } from "./studio-ag3z6shb.js";
24
24
  import {
25
25
  activeRegistry
26
- } from "./studio-d1n2bykn.js";
26
+ } from "./studio-3nprwbd9.js";
27
27
  import {
28
28
  reactive
29
29
  } from "./studio-d8z5bajd.js";
@@ -32,7 +32,7 @@ import {
32
32
  getRecentFiles,
33
33
  trackRecentFile,
34
34
  openFileInTab2
35
- } from "./studio-7rrb1esn.js";
35
+ } from "./studio-m58xn8at.js";
36
36
  // src/surfaces/palette.json
37
37
  var palette_default = {
38
38
  $schema: "https://jxsuite.com/schema/v1",
@@ -1160,4 +1160,4 @@ function renderOverlay() {
1160
1160
  export { initQuickSearch2, openQuickSearch2 };
1161
1161
 
1162
1162
  //# debugId=501BF2683AE15AEE64756E2164756E21
1163
- //# sourceMappingURL=studio-g33v4fe9.js.map
1163
+ //# sourceMappingURL=studio-jfhxy8h3.js.map
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  getPlatform2,
3
3
  hasPlatform2
4
- } from "./studio-6nzaktvy.js";
4
+ } from "./studio-6pwn9j8c.js";
5
5
  import {
6
6
  resolveI18n,
7
7
  activeTab2
8
- } from "./studio-gk2twyh4.js";
8
+ } from "./studio-dgdm6vvt.js";
9
9
  import {
10
10
  assetUrlFor,
11
11
  BUILD_LANES,
@@ -15,7 +15,7 @@ import {
15
15
  joinProjectPath,
16
16
  projectPathForRef,
17
17
  encodeProjectPath
18
- } from "./studio-d1n2bykn.js";
18
+ } from "./studio-3nprwbd9.js";
19
19
  import {
20
20
  projectState
21
21
  } from "./studio-m1p9b6c3.js";
@@ -182,4 +182,4 @@ function hostAssetDeclarations() {
182
182
  export { contentMountFor, resolveAssetRef, canvasBaseOrigin, documentBase, loopbackAssetSrc, projectLocales2, assetContextFor, previewAssetSrc, hostAssetDeclarations };
183
183
 
184
184
  //# debugId=AC177B7F9545734164756E2164756E21
185
- //# sourceMappingURL=studio-ab87phj1.js.map
185
+ //# sourceMappingURL=studio-kwewmhhq.js.map