@jxsuite/studio 4.1.0 → 5.0.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 (607) hide show
  1. package/README.md +1 -1
  2. package/data/elements-meta.json +5 -15
  3. package/data/html-meta.json +51 -6
  4. package/dist/chunks/{2020-n6tfwnda.js → 2020-g79n01v9.js} +14 -14
  5. package/dist/chunks/action-group-sp6tna8v.js +118 -0
  6. package/dist/chunks/adapter-nj7tnjfn.js +13 -0
  7. package/dist/chunks/cf-account-picker-fyf63pmy.js +495 -0
  8. package/dist/chunks/cf-settings-71bv5zn9.js +20 -0
  9. package/dist/chunks/color-area-v17df7b8.js +154 -0
  10. package/dist/chunks/color-field-anwybnkn.js +208 -0
  11. package/dist/chunks/color-slider-44ez96fc.js +79 -0
  12. package/dist/chunks/color-xgg3kfw7.js +35 -0
  13. package/dist/chunks/combobox-5e7jev23.js +236 -0
  14. package/dist/chunks/components-2w1f35qs.js +18 -0
  15. package/dist/chunks/content-source-3wqeas45.js +46 -0
  16. package/dist/chunks/convert-to-repeater-d0cgnb6d.js +639 -0
  17. package/dist/chunks/dialog-s890b918.js +85 -0
  18. package/dist/chunks/editor-3qhbg51x.js +35 -0
  19. package/dist/chunks/entry-commands-d6g50j7s.js +42 -0
  20. package/dist/chunks/extension-sections-fy7q4fe9.js +651 -0
  21. package/dist/chunks/file-ops-3btj6st0.js +47 -0
  22. package/dist/chunks/files-ef8fgs3w.js +72 -0
  23. package/dist/chunks/format-host-3c33nwr8.js +40 -0
  24. package/dist/chunks/fs-events-13tj6sex.js +18 -0
  25. package/dist/chunks/git-panel-4wp2rn9b.js +49 -0
  26. package/dist/chunks/icons-yy10wk9r.js +402 -0
  27. package/dist/chunks/iframe-entry-15g3n6xv.js +114 -0
  28. package/dist/chunks/iframe-entry-b27vq81n.js +203 -0
  29. package/dist/chunks/iframe-entry-nbyxee1y.js +154 -0
  30. package/dist/chunks/iframe-host-jgesd924.js +115 -0
  31. package/dist/chunks/{index-wcnt3r9g.js → index-mdmyx6s2.js} +11 -11
  32. package/dist/chunks/index-n4j7qxyr.js +109 -0
  33. package/dist/chunks/{javascript-q8kpmfah.js → javascript-xvrfrpkb.js} +8 -9
  34. package/dist/chunks/{jsonMode-dkr040ga.js → jsonMode-tyx2kj6p.js} +526 -527
  35. package/dist/chunks/jx-validate-j0wxk72w.js +15 -0
  36. package/dist/chunks/layers-1nq5evsh.js +29 -0
  37. package/dist/chunks/layers-panel-ar2gh90g.js +40 -0
  38. package/dist/chunks/listbox-6v2ac08j.js +44 -0
  39. package/dist/chunks/lit-html-m244w9nh.js +17 -0
  40. package/dist/chunks/media-picker-2qbetq73.js +33 -0
  41. package/dist/chunks/menu-q99sy9rf.js +285 -0
  42. package/dist/chunks/menu-rf7n72mf.js +14 -0
  43. package/dist/chunks/{monaco-binding-rj6xpx9y.js → monaco-binding-sw6en4dw.js} +12 -15
  44. package/dist/chunks/monaco-buffer-bhy3hb6m.js +24 -0
  45. package/dist/chunks/{monaco-setup-vx9bhp1d.js → monaco-setup-8r62fj6y.js} +27 -37
  46. package/dist/chunks/notify-628t0anh.js +21 -0
  47. package/dist/chunks/number-field-5cndyft8.js +72 -0
  48. package/dist/chunks/parse-0zx14y15.js +10 -0
  49. package/dist/chunks/platform-ts9cg1a4.js +15 -0
  50. package/dist/chunks/popover-47z3ytva.js +25 -0
  51. package/dist/chunks/publish-panel-98f7sr3g.js +27 -0
  52. package/dist/chunks/quick-search-srzz83k2.js +45 -0
  53. package/dist/chunks/references-n553f0e1.js +26 -0
  54. package/dist/chunks/right-panel-rrgx2dn3.js +45 -0
  55. package/dist/chunks/section-registry-5pq32t0q.js +25 -0
  56. package/dist/chunks/select-2r16ez41.js +49 -0
  57. package/dist/chunks/split-g7nm1rgb.js +191 -0
  58. package/dist/chunks/studio-0hqbpbd0.js +62 -0
  59. package/dist/chunks/studio-18avnhjp.js +2430 -0
  60. package/dist/chunks/{studio-kryvsw6j.js → studio-1k325pwf.js} +48 -48
  61. package/dist/chunks/{studio-msd847zn.js → studio-25hkdrkw.js} +357 -86
  62. package/dist/chunks/studio-26d7myd1.js +258 -0
  63. package/dist/chunks/{studio-4r1pv6zf.js → studio-38emantv.js} +22 -5
  64. package/dist/chunks/studio-3gxv60tn.js +422 -0
  65. package/dist/chunks/{studio-fbf92ckf.js → studio-3hxkd92t.js} +275 -163
  66. package/dist/chunks/studio-4m0haseg.js +185 -0
  67. package/dist/chunks/{studio-ynxwkrzd.js → studio-4wbb9ct0.js} +1953 -1785
  68. package/dist/chunks/{studio-1wagb550.js → studio-5523bpzt.js} +11 -11
  69. package/dist/chunks/{studio-x4qkdat5.js → studio-57mf66w2.js} +1749 -2481
  70. package/dist/chunks/studio-5jy81t3s.js +17463 -0
  71. package/dist/chunks/studio-5rt7sqa0.js +1168 -0
  72. package/dist/chunks/studio-5te5tqng.js +81 -0
  73. package/dist/chunks/{studio-p4ngc046.js → studio-6ewqv390.js} +9 -9
  74. package/dist/chunks/{studio-9ab8gqsm.js → studio-6nzaktvy.js} +7 -7
  75. package/dist/chunks/studio-6xa21ej9.js +28 -0
  76. package/dist/chunks/{studio-5ehhackm.js → studio-727xh0e3.js} +19 -19
  77. package/dist/chunks/{studio-ahn3pdgx.js → studio-79y5sz51.js} +52 -38
  78. package/dist/chunks/{studio-gcye7qka.js → studio-7e11jpa9.js} +21 -21
  79. package/dist/chunks/{studio-q7v10cg2.js → studio-7r42c6ca.js} +17 -7
  80. package/dist/chunks/studio-7xptrg0j.js +954 -0
  81. package/dist/chunks/{studio-cft9r4r7.js → studio-81390n6f.js} +22 -22
  82. package/dist/chunks/{studio-q43a5y9h.js → studio-8jn5yhyn.js} +16 -16
  83. package/dist/chunks/studio-8qtrpzr3.js +839 -0
  84. package/dist/chunks/{studio-dg7zyt5x.js → studio-98b3z07n.js} +1 -1
  85. package/dist/chunks/studio-9xxz1q69.js +1356 -0
  86. package/dist/chunks/studio-akbww0j5.js +13615 -0
  87. package/dist/chunks/{studio-x813zp48.js → studio-arfpe389.js} +30 -30
  88. package/dist/chunks/{studio-trxrabqf.js → studio-az3zd49t.js} +475 -283
  89. package/dist/chunks/studio-cpvb2ed1.js +1171 -0
  90. package/dist/chunks/{studio-f3wqjtk5.js → studio-d0300636.js} +5076 -18
  91. package/dist/chunks/{studio-bgxt93ga.js → studio-d055c37e.js} +13 -13
  92. package/dist/chunks/studio-d1ja2x9r.js +362 -0
  93. package/dist/chunks/{studio-b9b6t1dg.js → studio-e1f24eff.js} +5664 -5666
  94. package/dist/chunks/{studio-3bqpr0zh.js → studio-em9nw8eh.js} +299 -110
  95. package/dist/chunks/studio-erdatzvp.js +1190 -0
  96. package/dist/chunks/{studio-g1wdche0.js → studio-esrxgwh6.js} +80 -80
  97. package/dist/chunks/studio-fabxk6r9.js +2811 -0
  98. package/dist/chunks/{studio-3n4ndrzh.js → studio-h4nvnjvz.js} +303 -303
  99. package/dist/chunks/{studio-dm19q43r.js → studio-hhvs4sdg.js} +10 -10
  100. package/dist/chunks/{studio-q9jd1a60.js → studio-kcgff4r0.js} +15 -18
  101. package/dist/chunks/{studio-685s0ytq.js → studio-nqgawfks.js} +572 -572
  102. package/dist/chunks/{studio-xrapxwwc.js → studio-p1dw8wfw.js} +55 -29
  103. package/dist/chunks/studio-pm6hgy7r.js +4763 -0
  104. package/dist/chunks/studio-q0a3yk4n.js +33 -0
  105. package/dist/chunks/{studio-wcy8trfx.js → studio-q3x06vmj.js} +23 -22
  106. package/dist/chunks/studio-qahxvnan.js +111 -0
  107. package/dist/chunks/{studio-53n8bp04.js → studio-r6xmmtfh.js} +1 -1
  108. package/dist/chunks/{studio-2b946z26.js → studio-rkstz940.js} +3658 -6134
  109. package/dist/chunks/{studio-tvgyw9xw.js → studio-rnyf3f8e.js} +83 -250
  110. package/dist/chunks/studio-rpyah2ew.js +2805 -0
  111. package/dist/chunks/studio-rs76k67r.js +12 -0
  112. package/dist/chunks/{studio-jkftxyvz.js → studio-s6z853aq.js} +5858 -2152
  113. package/dist/chunks/{studio-6yw4y3my.js → studio-sgdc5pfc.js} +8 -8
  114. package/dist/chunks/studio-tb3ev01j.js +763 -0
  115. package/dist/chunks/{studio-t5wqwzdh.js → studio-tjjk7jvk.js} +1 -1
  116. package/dist/chunks/studio-vhv5tgxm.js +51 -0
  117. package/dist/chunks/{studio-qjy2z9bv.js → studio-vz68yn9e.js} +32 -137
  118. package/dist/chunks/studio-wqpngpsk.js +174 -0
  119. package/dist/chunks/{studio-b55y6ewx.js → studio-x3rty6tr.js} +58 -58
  120. package/dist/chunks/studio-xsykpvsh.js +8448 -0
  121. package/dist/chunks/{studio-92ab2jqe.js → studio-y9zedyjn.js} +14 -14
  122. package/dist/chunks/studio-yxa81f45.js +12 -0
  123. package/dist/chunks/swatch-group-t0n6h2rn.js +139 -0
  124. package/dist/chunks/tabs-wbp1cdws.js +156 -0
  125. package/dist/chunks/textfield-abk6qyee.js +73 -0
  126. package/dist/chunks/toast-780pvfbv.js +27 -0
  127. package/dist/chunks/toast-host-3sqv46sn.js +116 -0
  128. package/dist/chunks/toolbar-xbh5bhtr.js +194 -0
  129. package/dist/chunks/tooltip-eptb614w.js +369 -0
  130. package/dist/chunks/tree-a73p0pqm.js +367 -0
  131. package/dist/chunks/{tsMode-76kr53q0.js → tsMode-jy4m86rv.js} +83 -85
  132. package/dist/chunks/workspace-wrew8zk4.js +69 -0
  133. package/dist/chunks/{ws-client-6shc5rze.js → ws-client-ny4zc51r.js} +20 -22
  134. package/dist/iframe-entry.js +1780 -667
  135. package/dist/studio.js +52819 -36480
  136. package/dist/workers/editor.worker.js +1040 -1085
  137. package/dist/workers/json.worker.js +1946 -1991
  138. package/dist/workers/ts.worker.js +4960 -5005
  139. package/index.html +1 -0
  140. package/package.json +18 -52
  141. package/src/about/about-modal.ts +72 -123
  142. package/src/browse/library-commands.ts +20 -49
  143. package/src/browse/library-layouts.ts +87 -218
  144. package/src/browse/library-pane.ts +406 -438
  145. package/src/canvas/canvas-helpers.ts +0 -49
  146. package/src/canvas/canvas-live-render.ts +25 -2
  147. package/src/canvas/canvas-render.ts +666 -231
  148. package/src/canvas/canvas-surface.ts +0 -1
  149. package/src/canvas/canvas-utils.ts +310 -117
  150. package/src/canvas/dialog-path.ts +76 -0
  151. package/src/canvas/dialog-state.ts +67 -0
  152. package/src/canvas/diff-marks.ts +252 -0
  153. package/src/canvas/diff-toolbar.ts +349 -0
  154. package/src/canvas/diff-view.ts +123 -0
  155. package/src/canvas/edit-width-drag.ts +187 -0
  156. package/src/canvas/edit-width.ts +150 -0
  157. package/src/canvas/iframe-entry.ts +125 -8
  158. package/src/canvas/iframe-host.ts +271 -15
  159. package/src/canvas/iframe-interaction.ts +133 -13
  160. package/src/canvas/iframe-patch.ts +7 -1
  161. package/src/canvas/iframe-position.ts +5 -6
  162. package/src/canvas/iframe-protocol.ts +106 -5
  163. package/src/canvas/iframe-render.ts +373 -5
  164. package/src/canvas/iframe-slash.ts +2 -2
  165. package/src/canvas/iframe-subtree.ts +5 -8
  166. package/src/canvas/path-mapping.ts +25 -3
  167. package/src/canvas/popover-path.ts +106 -0
  168. package/src/canvas/popover-state.ts +155 -0
  169. package/src/canvas/surface-registry.ts +21 -10
  170. package/src/collab/presence-chips.ts +51 -73
  171. package/src/commands/app-commands.ts +10 -0
  172. package/src/commands/budget.ts +12 -0
  173. package/src/commands/command-args.ts +369 -6
  174. package/src/commands/defaults.ts +44 -14
  175. package/src/commands/live-context.ts +11 -5
  176. package/src/commands/reference.ts +12 -2
  177. package/src/commands/registry.ts +165 -8
  178. package/src/content/entry-commands.ts +16 -23
  179. package/src/content/entry-editor.ts +144 -101
  180. package/src/editor/canvas-slash-bridge.ts +2 -2
  181. package/src/editor/context-menu.ts +49 -200
  182. package/src/editor/convert-to-component.ts +42 -82
  183. package/src/editor/convert-to-repeater.ts +132 -173
  184. package/src/editor/inline-edit.ts +11 -0
  185. package/src/editor/shortcuts.ts +65 -26
  186. package/src/editor/slash-menu.ts +150 -157
  187. package/src/files/file-ops.ts +117 -11
  188. package/src/files/files.ts +943 -660
  189. package/src/files/json-layout.ts +474 -0
  190. package/src/files/serialize-document.ts +8 -1
  191. package/src/format/convert-file.ts +16 -10
  192. package/src/format/format-host.ts +50 -1
  193. package/src/github/github-auth.ts +71 -29
  194. package/src/github/github-publish.ts +57 -65
  195. package/src/grid/cell-editors.ts +46 -4
  196. package/src/grid/cell-popovers.ts +65 -62
  197. package/src/grid/grid-open.ts +86 -64
  198. package/src/grid/grid-panel.ts +390 -469
  199. package/src/grid/redirects-grid.ts +40 -44
  200. package/src/hosting/layout.ts +2 -0
  201. package/src/i18n/i18n-commands.ts +127 -62
  202. package/src/media/media-pane.ts +83 -133
  203. package/src/new-project/add-repo-modal.ts +125 -176
  204. package/src/new-project/import-tab.ts +181 -252
  205. package/src/new-project/location-fields.ts +93 -160
  206. package/src/new-project/new-project-modal.ts +376 -367
  207. package/src/packages/jxsuite-update.ts +76 -18
  208. package/src/panels/activity-panel.ts +137 -104
  209. package/src/panels/ai-chat/chat-markdown.ts +15 -13
  210. package/src/panels/ai-chat/chat-view.ts +307 -472
  211. package/src/panels/ai-chat/composer.ts +175 -163
  212. package/src/panels/ai-chat/sessions-view.ts +31 -62
  213. package/src/panels/ai-panel.ts +210 -185
  214. package/src/panels/block-action-bar.ts +437 -643
  215. package/src/panels/bottom-dock.ts +112 -47
  216. package/src/panels/chat-panel.ts +19 -14
  217. package/src/panels/data-explorer.ts +141 -102
  218. package/src/panels/data-grid.ts +183 -150
  219. package/src/panels/dnd.ts +75 -20
  220. package/src/panels/editors.ts +26 -19
  221. package/src/panels/elements-panel.ts +243 -186
  222. package/src/panels/empty-state.ts +26 -42
  223. package/src/panels/events-panel.ts +950 -729
  224. package/src/panels/formula-workspace.ts +434 -207
  225. package/src/panels/frontmatter-fields.ts +185 -153
  226. package/src/panels/frontmatter-panel.ts +411 -187
  227. package/src/panels/git-diff-open.ts +148 -0
  228. package/src/panels/git-panel.ts +679 -605
  229. package/src/panels/head-panel.ts +617 -435
  230. package/src/panels/i18n-panel.ts +153 -133
  231. package/src/panels/imports-panel.ts +388 -414
  232. package/src/panels/jump-bar.ts +174 -147
  233. package/src/panels/layers-panel.ts +785 -671
  234. package/src/panels/left-panel.ts +166 -94
  235. package/src/panels/navigator-panels.ts +1 -1
  236. package/src/panels/pane-context.ts +529 -677
  237. package/src/panels/pane-grid.ts +265 -241
  238. package/src/panels/panel-registry.ts +15 -4
  239. package/src/panels/problems-panel.ts +177 -99
  240. package/src/panels/properties-panel.ts +1525 -966
  241. package/src/panels/provenance.ts +31 -113
  242. package/src/panels/quick-search.ts +217 -172
  243. package/src/panels/right-panel.ts +135 -169
  244. package/src/panels/seo-modal.ts +346 -167
  245. package/src/panels/settings-menu.ts +109 -646
  246. package/src/panels/settings-pane.ts +102 -86
  247. package/src/panels/signals-panel.ts +1318 -1172
  248. package/src/panels/statement-editor.ts +556 -428
  249. package/src/panels/style-panel.ts +1367 -630
  250. package/src/panels/style-utils.ts +36 -32
  251. package/src/panels/stylebook-doc.ts +30 -73
  252. package/src/panels/stylebook-layers-panel.ts +202 -109
  253. package/src/panels/stylebook-panel.ts +124 -88
  254. package/src/panels/tab-strip.ts +385 -287
  255. package/src/platforms/cloud.ts +106 -16
  256. package/src/platforms/devserver.ts +13 -0
  257. package/src/publish/deploy-checklist.ts +124 -78
  258. package/src/publish/publish-commands.ts +4 -12
  259. package/src/publish/publish-panel.ts +134 -328
  260. package/src/services/a11y-report.ts +100 -43
  261. package/src/services/ai-command-tools.ts +468 -0
  262. package/src/services/ai-session-store.ts +6 -0
  263. package/src/services/ai-system-prompt.ts +110 -18
  264. package/src/services/ai-tools.ts +28 -143
  265. package/src/services/ai-write-report.ts +174 -0
  266. package/src/services/document-assistant.ts +50 -2
  267. package/src/services/idle.ts +16 -14
  268. package/src/services/live-surfaces.ts +237 -0
  269. package/src/services/model-uri.ts +75 -0
  270. package/src/services/notify.ts +63 -6
  271. package/src/services/popover-report.ts +325 -0
  272. package/src/services/surface-registry.ts +56 -0
  273. package/src/services/tool-executor.ts +6 -0
  274. package/src/settings/contexts-section.ts +301 -299
  275. package/src/settings/contributed-section.ts +361 -222
  276. package/src/settings/css-vars-editor.ts +320 -325
  277. package/src/settings/defs-editor.ts +572 -535
  278. package/src/settings/dependencies-editor.ts +79 -107
  279. package/src/settings/extension-commands.ts +379 -0
  280. package/src/settings/extension-rows.ts +113 -0
  281. package/src/settings/extensions-section.ts +287 -0
  282. package/src/settings/general-settings.ts +130 -181
  283. package/src/settings/head-editor.ts +10 -305
  284. package/src/settings/locales-section.ts +146 -196
  285. package/src/settings/preferences-accounts.ts +1 -1
  286. package/src/settings/preferences-dialog.ts +350 -330
  287. package/src/settings/project-sections.ts +108 -181
  288. package/src/settings/schema-field-ui.ts +11 -399
  289. package/src/settings/section-registry.ts +8 -1
  290. package/src/settings/settings-document.ts +31 -29
  291. package/src/shell/tree.ts +42 -87
  292. package/src/shell.ts +48 -36
  293. package/src/studio.ts +90 -67
  294. package/src/style/token-ref.ts +0 -39
  295. package/src/surfaces/about.json +263 -0
  296. package/src/surfaces/about.ts +163 -0
  297. package/src/surfaces/add-repo.json +486 -0
  298. package/src/surfaces/add-repo.ts +236 -0
  299. package/src/surfaces/ai-chat.json +2185 -0
  300. package/src/surfaces/ai-chat.ts +549 -0
  301. package/src/surfaces/ai-credentials-form.json +332 -0
  302. package/src/surfaces/ai-credentials-form.ts +151 -0
  303. package/src/surfaces/ai-managed-connect.json +108 -0
  304. package/src/surfaces/ai-managed-connect.ts +123 -0
  305. package/src/surfaces/ai-model-picker.json +114 -0
  306. package/src/surfaces/ai-model-picker.ts +139 -0
  307. package/src/surfaces/block-action-bar.json +640 -0
  308. package/src/surfaces/block-action-bar.ts +368 -0
  309. package/src/surfaces/bottom-dock.json +154 -0
  310. package/src/surfaces/bottom-dock.ts +125 -0
  311. package/src/surfaces/canvas-stage.json +444 -0
  312. package/src/surfaces/canvas-stage.ts +253 -0
  313. package/src/surfaces/cf-account-picker.json +300 -0
  314. package/src/surfaces/cf-account-picker.ts +214 -0
  315. package/src/surfaces/commandbar.json +984 -0
  316. package/src/{panels/toolbar.ts → surfaces/commandbar.ts} +414 -389
  317. package/src/surfaces/convert-repeater.json +309 -0
  318. package/src/surfaces/convert-repeater.ts +276 -0
  319. package/src/surfaces/data-actions.json +157 -0
  320. package/src/surfaces/data-actions.ts +115 -0
  321. package/src/surfaces/dialog.json +289 -0
  322. package/src/surfaces/dialog.ts +343 -0
  323. package/src/surfaces/diff-toolbar.json +266 -0
  324. package/src/surfaces/diff-toolbar.ts +139 -0
  325. package/src/surfaces/doc-header.json +739 -0
  326. package/src/surfaces/doc-header.ts +223 -0
  327. package/src/surfaces/empty-state.json +152 -0
  328. package/src/surfaces/empty-state.ts +173 -0
  329. package/src/surfaces/entry-editor.json +281 -0
  330. package/src/surfaces/entry-editor.ts +191 -0
  331. package/src/surfaces/expression-editor.json +977 -0
  332. package/src/surfaces/expression-editor.ts +266 -0
  333. package/src/surfaces/files-panel.json +592 -0
  334. package/src/surfaces/files-panel.ts +301 -0
  335. package/src/surfaces/formula-palette.json +364 -0
  336. package/src/surfaces/formula-palette.ts +340 -0
  337. package/src/surfaces/git-panel.json +1822 -0
  338. package/src/surfaces/git-panel.ts +272 -0
  339. package/src/surfaces/github-auth.json +112 -0
  340. package/src/surfaces/github-auth.ts +139 -0
  341. package/src/surfaces/github-publish.json +206 -0
  342. package/src/surfaces/github-publish.ts +169 -0
  343. package/src/surfaces/grid-cell.json +218 -0
  344. package/src/surfaces/grid-cell.ts +120 -0
  345. package/src/surfaces/grid-open.json +147 -0
  346. package/src/surfaces/grid-open.ts +87 -0
  347. package/src/surfaces/grid-panel.json +706 -0
  348. package/src/surfaces/grid-panel.ts +206 -0
  349. package/src/surfaces/grid-replace.json +179 -0
  350. package/src/surfaces/grid-replace.ts +89 -0
  351. package/src/surfaces/grid-views.json +446 -0
  352. package/src/surfaces/grid-views.ts +172 -0
  353. package/src/surfaces/inspector-dock.json +187 -0
  354. package/src/surfaces/inspector-dock.ts +161 -0
  355. package/src/surfaces/jump-bar.json +243 -0
  356. package/src/surfaces/jump-bar.ts +129 -0
  357. package/src/surfaces/jxsuite-update.json +146 -0
  358. package/src/surfaces/jxsuite-update.ts +149 -0
  359. package/src/surfaces/library-pane.json +1509 -0
  360. package/src/surfaces/library-pane.ts +363 -0
  361. package/src/surfaces/logic-panel.json +1949 -0
  362. package/src/surfaces/logic-panel.ts +369 -0
  363. package/src/surfaces/logic-workspace.json +685 -0
  364. package/src/surfaces/logic-workspace.ts +238 -0
  365. package/src/surfaces/media-browser.json +303 -0
  366. package/src/surfaces/media-browser.ts +145 -0
  367. package/src/surfaces/media-field.json +163 -0
  368. package/src/surfaces/media-field.ts +116 -0
  369. package/src/surfaces/media-pane.json +513 -0
  370. package/src/surfaces/media-pane.ts +197 -0
  371. package/src/surfaces/menu.json +232 -0
  372. package/src/surfaces/menu.ts +375 -0
  373. package/src/surfaces/navigator-dock.json +113 -0
  374. package/src/surfaces/navigator-dock.ts +130 -0
  375. package/src/surfaces/new-project.json +1654 -0
  376. package/src/surfaces/new-project.ts +411 -0
  377. package/src/surfaces/palette.json +535 -0
  378. package/src/surfaces/pane-context.json +1497 -0
  379. package/src/surfaces/pane-context.ts +513 -0
  380. package/src/surfaces/pane-grid.json +188 -0
  381. package/src/surfaces/pane-grid.ts +250 -0
  382. package/src/surfaces/panel-activity.json +563 -0
  383. package/src/surfaces/panel-activity.ts +187 -0
  384. package/src/surfaces/panel-data.json +141 -0
  385. package/src/surfaces/panel-data.ts +156 -0
  386. package/src/surfaces/panel-deploy-checklist.json +283 -0
  387. package/src/surfaces/panel-deploy-checklist.ts +175 -0
  388. package/src/surfaces/panel-elements.json +367 -0
  389. package/src/surfaces/panel-elements.ts +175 -0
  390. package/src/surfaces/panel-i18n.json +569 -0
  391. package/src/surfaces/panel-i18n.ts +212 -0
  392. package/src/surfaces/panel-imports.json +780 -0
  393. package/src/surfaces/panel-imports.ts +209 -0
  394. package/src/surfaces/panel-outline.json +734 -0
  395. package/src/surfaces/panel-outline.ts +326 -0
  396. package/src/surfaces/panel-page.json +1017 -0
  397. package/src/surfaces/panel-page.ts +240 -0
  398. package/src/surfaces/panel-problems.json +497 -0
  399. package/src/surfaces/panel-problems.ts +157 -0
  400. package/src/surfaces/panel-signals.json +1973 -0
  401. package/src/surfaces/panel-signals.ts +436 -0
  402. package/src/surfaces/panel-stylebook-layers.json +317 -0
  403. package/src/surfaces/panel-stylebook-layers.ts +155 -0
  404. package/src/surfaces/preferences.json +850 -0
  405. package/src/surfaces/preferences.ts +332 -0
  406. package/src/surfaces/progress-modal.json +110 -0
  407. package/src/surfaces/progress-modal.ts +150 -0
  408. package/src/surfaces/properties-panel.json +1578 -0
  409. package/src/surfaces/properties-panel.ts +337 -0
  410. package/src/surfaces/publish.json +945 -0
  411. package/src/surfaces/publish.ts +392 -0
  412. package/src/surfaces/push-plan.json +110 -0
  413. package/src/surfaces/push-plan.ts +87 -0
  414. package/src/surfaces/rail.json +255 -0
  415. package/src/surfaces/rail.ts +206 -0
  416. package/src/surfaces/reference-field.json +191 -0
  417. package/src/surfaces/reference-field.ts +168 -0
  418. package/src/surfaces/schema-builder.json +1011 -0
  419. package/src/surfaces/schema-builder.ts +181 -0
  420. package/src/surfaces/schema-form.json +1013 -0
  421. package/src/surfaces/schema-form.ts +287 -0
  422. package/src/surfaces/secret-field.json +60 -0
  423. package/src/surfaces/secret-field.ts +146 -0
  424. package/src/surfaces/seo.json +932 -0
  425. package/src/surfaces/seo.ts +334 -0
  426. package/src/surfaces/settings-contexts.json +538 -0
  427. package/src/surfaces/settings-contexts.ts +196 -0
  428. package/src/surfaces/settings-contributed.json +489 -0
  429. package/src/surfaces/settings-contributed.ts +199 -0
  430. package/src/surfaces/settings-css-vars.json +820 -0
  431. package/src/surfaces/settings-css-vars.ts +199 -0
  432. package/src/surfaces/settings-defs.json +1363 -0
  433. package/src/surfaces/settings-defs.ts +232 -0
  434. package/src/surfaces/settings-deploy.json +108 -0
  435. package/src/surfaces/settings-deploy.ts +135 -0
  436. package/src/surfaces/settings-extensions.json +486 -0
  437. package/src/surfaces/settings-extensions.ts +201 -0
  438. package/src/surfaces/settings-head.json +779 -0
  439. package/src/surfaces/settings-head.ts +397 -0
  440. package/src/surfaces/settings-locales.json +420 -0
  441. package/src/surfaces/settings-locales.ts +137 -0
  442. package/src/surfaces/settings-overview.json +423 -0
  443. package/src/surfaces/settings-overview.ts +218 -0
  444. package/src/surfaces/settings-packages.json +549 -0
  445. package/src/surfaces/settings-packages.ts +158 -0
  446. package/src/surfaces/settings-pane.json +147 -0
  447. package/src/surfaces/settings-pane.ts +150 -0
  448. package/src/surfaces/settings-rawjson.json +104 -0
  449. package/src/surfaces/settings-rawjson.ts +107 -0
  450. package/src/surfaces/shell.json +99 -0
  451. package/src/surfaces/shell.ts +30 -0
  452. package/src/surfaces/slash-menu.json +180 -0
  453. package/src/surfaces/slash-menu.ts +272 -0
  454. package/src/surfaces/statements.json +607 -0
  455. package/src/surfaces/statements.ts +238 -0
  456. package/src/surfaces/statusbar.json +94 -0
  457. package/src/{panels → surfaces}/statusbar.ts +163 -90
  458. package/src/surfaces/style-panel.json +1643 -0
  459. package/src/surfaces/style-panel.ts +338 -0
  460. package/src/surfaces/stylebook-chrome.json +122 -0
  461. package/src/surfaces/stylebook-chrome.ts +122 -0
  462. package/src/surfaces/tab-strip.json +448 -0
  463. package/src/surfaces/tab-strip.ts +200 -0
  464. package/src/surfaces/target-line.json +419 -0
  465. package/src/surfaces/target-line.ts +349 -0
  466. package/src/surfaces/toasts.json +189 -0
  467. package/src/surfaces/welcome.json +571 -0
  468. package/src/surfaces/welcome.ts +338 -0
  469. package/src/tabs/project-config.ts +71 -15
  470. package/src/tabs/tab.ts +52 -1
  471. package/src/types.ts +22 -0
  472. package/src/ui/ai-credentials-form.ts +104 -100
  473. package/src/ui/ai-managed-connect.ts +54 -36
  474. package/src/ui/ai-model-picker.ts +75 -47
  475. package/src/ui/cf-account-picker.ts +76 -141
  476. package/src/ui/color-selector.ts +80 -301
  477. package/src/ui/dynamic-slot.ts +43 -283
  478. package/src/ui/expression-editor.ts +797 -576
  479. package/src/ui/field-input.ts +8 -181
  480. package/src/ui/form-controls.ts +838 -366
  481. package/src/ui/formula-chips.ts +80 -85
  482. package/src/ui/kit.ts +33 -0
  483. package/src/ui/layers.ts +293 -593
  484. package/src/ui/media-picker.ts +203 -284
  485. package/src/ui/panel-resize.ts +251 -64
  486. package/src/ui/popover-surface.ts +153 -0
  487. package/src/ui/progress-modal.ts +22 -60
  488. package/src/ui/regions.ts +13 -7
  489. package/src/ui/schema-form.ts +906 -440
  490. package/src/ui/surface.ts +122 -0
  491. package/src/ui/unit-selector.ts +15 -131
  492. package/src/ui/value-source.ts +14 -0
  493. package/src/ui/virtual-window.ts +88 -9
  494. package/src/utils/canvas-media.ts +72 -0
  495. package/src/utils/edit-display.ts +7 -2
  496. package/src/utils/element-selectors.ts +69 -0
  497. package/src/utils/link-target.ts +2 -2
  498. package/src/utils/studio-utils.ts +0 -10
  499. package/src/view.ts +15 -0
  500. package/src/workspace/pane-derive.ts +36 -14
  501. package/src/workspace/workspace.ts +15 -6
  502. package/styles/canvas.css +72 -467
  503. package/styles/forced-colors.css +48 -82
  504. package/styles/forced-colors.json +41 -0
  505. package/styles/inspector.css +2 -1301
  506. package/styles/overlays.css +96 -2823
  507. package/styles/panels.css +6 -1423
  508. package/styles/shell-frame.css +272 -0
  509. package/styles/shell-frame.json +227 -0
  510. package/styles/shell.css +0 -1568
  511. package/styles/tokens.css +65 -136
  512. package/styles/tokens.json +84 -0
  513. package/dist/chunks/Overlay.dev-etqjwyf9.js +0 -23
  514. package/dist/chunks/adapter-jkcyhgtr.js +0 -14
  515. package/dist/chunks/cf-account-picker-en86v7x7.js +0 -163
  516. package/dist/chunks/cf-settings-45fgyx8y.js +0 -21
  517. package/dist/chunks/components-zmx10t62.js +0 -21
  518. package/dist/chunks/content-source-48xg86wj.js +0 -49
  519. package/dist/chunks/convert-to-repeater-43tfn7cs.js +0 -268
  520. package/dist/chunks/editor-cptq5jp1.js +0 -37
  521. package/dist/chunks/entry-commands-e63f1xc0.js +0 -46
  522. package/dist/chunks/extension-sections-txv08xxg.js +0 -311
  523. package/dist/chunks/file-ops-wbh4hhsx.js +0 -48
  524. package/dist/chunks/files-3kfkwhk4.js +0 -93
  525. package/dist/chunks/flow-qbfgrpeh.js +0 -634
  526. package/dist/chunks/focus-trap.esm-9t2drp0g.js +0 -1025
  527. package/dist/chunks/focus-visible-6eg70z18.js +0 -167
  528. package/dist/chunks/format-host-w16q81tf.js +0 -43
  529. package/dist/chunks/fs-events-hrrg328g.js +0 -21
  530. package/dist/chunks/git-panel-532whr1y.js +0 -59
  531. package/dist/chunks/index-zqxmqxmh.js +0 -109
  532. package/dist/chunks/jx-validate-8er6gbxy.js +0 -19
  533. package/dist/chunks/layers-panel-07hm7g5j.js +0 -67
  534. package/dist/chunks/layers-q75tj2mf.js +0 -45
  535. package/dist/chunks/lit-html-j055mkh8.js +0 -22
  536. package/dist/chunks/monaco-buffer-dqw0xxpx.js +0 -25
  537. package/dist/chunks/notify-yjm79n4s.js +0 -30
  538. package/dist/chunks/parse-24d0gay3.js +0 -19
  539. package/dist/chunks/platform-ba1j1gbh.js +0 -16
  540. package/dist/chunks/publish-panel-v9st96ja.js +0 -29
  541. package/dist/chunks/quick-search-zccjp6gv.js +0 -66
  542. package/dist/chunks/references-3qx8fkyp.js +0 -29
  543. package/dist/chunks/right-panel-vm3b6kwy.js +0 -46
  544. package/dist/chunks/section-registry-sx1ykvkw.js +0 -30
  545. package/dist/chunks/sp-overlay.dev-qgvhnxf4.js +0 -18
  546. package/dist/chunks/sp-popover.dev-n2etmqdp.js +0 -9
  547. package/dist/chunks/sp-progress-circle.dev-hryhj0es.js +0 -15
  548. package/dist/chunks/sp-tooltip.dev-4sastdnw.js +0 -15
  549. package/dist/chunks/sp-tray.dev-tkbscm06.js +0 -199
  550. package/dist/chunks/studio-0a5qrh01.js +0 -3
  551. package/dist/chunks/studio-0bq6eh7v.js +0 -12
  552. package/dist/chunks/studio-18j3bmcz.js +0 -14
  553. package/dist/chunks/studio-1ngbejft.js +0 -181
  554. package/dist/chunks/studio-4b5z1x43.js +0 -424
  555. package/dist/chunks/studio-4n2b5gzb.js +0 -357
  556. package/dist/chunks/studio-4rzyrtjz.js +0 -426
  557. package/dist/chunks/studio-5fx3g9jg.js +0 -4325
  558. package/dist/chunks/studio-5myknm0a.js +0 -1903
  559. package/dist/chunks/studio-7afd21nw.js +0 -67
  560. package/dist/chunks/studio-7nte2hj4.js +0 -613
  561. package/dist/chunks/studio-8jpzqk5s.js +0 -128
  562. package/dist/chunks/studio-8q517dfr.js +0 -24
  563. package/dist/chunks/studio-950k0dx6.js +0 -6939
  564. package/dist/chunks/studio-9n4mrmnb.js +0 -184
  565. package/dist/chunks/studio-a0tswy0w.js +0 -58
  566. package/dist/chunks/studio-ahnzd9rg.js +0 -23
  567. package/dist/chunks/studio-cmb03bg5.js +0 -13890
  568. package/dist/chunks/studio-d1ks410h.js +0 -175
  569. package/dist/chunks/studio-ef49pnzx.js +0 -387
  570. package/dist/chunks/studio-eqq1w638.js +0 -113
  571. package/dist/chunks/studio-ew0djmhg.js +0 -341
  572. package/dist/chunks/studio-gfgb8pe6.js +0 -1652
  573. package/dist/chunks/studio-h4rxscfc.js +0 -10
  574. package/dist/chunks/studio-jc994dnr.js +0 -1066
  575. package/dist/chunks/studio-kyh9avvv.js +0 -28
  576. package/dist/chunks/studio-m3hwn7y1.js +0 -120
  577. package/dist/chunks/studio-mtfnaqs9.js +0 -659
  578. package/dist/chunks/studio-n6j9t10q.js +0 -318
  579. package/dist/chunks/studio-n8b9wqwy.js +0 -291
  580. package/dist/chunks/studio-qcy05dp8.js +0 -1743
  581. package/dist/chunks/studio-qq6jym04.js +0 -53
  582. package/dist/chunks/studio-rdx8jcxy.js +0 -83
  583. package/dist/chunks/studio-rn9ta2mz.js +0 -111
  584. package/dist/chunks/studio-t7qb9db8.js +0 -665
  585. package/dist/chunks/studio-tmc5emrw.js +0 -8
  586. package/dist/chunks/studio-z6nw2ek2.js +0 -18
  587. package/dist/chunks/studio-zczps70q.js +0 -378
  588. package/dist/chunks/studio-zqazsct2.js +0 -1823
  589. package/dist/chunks/workspace-fjx52ryv.js +0 -89
  590. package/src/panels/activity-bar.ts +0 -251
  591. package/src/panels/panel-scheduler.ts +0 -219
  592. package/src/panels/style-inputs.ts +0 -237
  593. package/src/panels/target-line.ts +0 -274
  594. package/src/panels/welcome-screen.ts +0 -346
  595. package/src/ui/button-group.ts +0 -102
  596. package/src/ui/choice-field.ts +0 -72
  597. package/src/ui/field-row.ts +0 -249
  598. package/src/ui/formula-palette.ts +0 -213
  599. package/src/ui/icons.ts +0 -52
  600. package/src/ui/jx-theme.ts +0 -130
  601. package/src/ui/spectrum.ts +0 -340
  602. package/src/ui/value-selector.ts +0 -174
  603. package/src/ui/widgets.ts +0 -172
  604. /package/dist/chunks/{javascript-s56a8dpk.css → javascript-4abzjcy9.css} +0 -0
  605. /package/dist/chunks/{jsonMode-zr9sw0c7.css → jsonMode-vvmpmk34.css} +0 -0
  606. /package/dist/chunks/{monaco-setup-pav68602.css → monaco-setup-8vbyqnhr.css} +0 -0
  607. /package/dist/chunks/{tsMode-ef187txx.css → tsMode-hnxxb73h.css} +0 -0
@@ -1,46 +1,42 @@
1
1
  import {
2
- parseMediaEntries,
3
- schemeOfQuery
4
- } from "./studio-950k0dx6.js";
5
- import {
6
- mediaDisplayName,
7
- mountStylebookCanvas,
8
- panToStylebookTag,
9
- serializeJxPath,
10
- tabOfPane
11
- } from "./studio-2b946z26.js";
2
+ projectState,
3
+ updateSession
4
+ } from "./studio-6ewqv390.js";
12
5
  import {
13
- getEffectiveMedia,
14
- getEffectiveStyle,
15
- shell
16
- } from "./studio-msd847zn.js";
6
+ isKeyframesAtRule
7
+ } from "./studio-5jy81t3s.js";
17
8
  import {
18
- activeTab,
19
- isSpliceablePath,
20
- varDisplayName
21
- } from "./studio-trxrabqf.js";
9
+ registerSurface,
10
+ mountSurface
11
+ } from "./studio-erdatzvp.js";
22
12
  import {
23
- classMap
24
- } from "./studio-m3hwn7y1.js";
13
+ reactive
14
+ } from "./studio-p1dw8wfw.js";
25
15
  import {
26
- componentRegistry
27
- } from "./studio-bgxt93ga.js";
16
+ isSpliceablePath,
17
+ varDisplayName,
18
+ activeTab2
19
+ } from "./studio-az3zd49t.js";
28
20
  import {
29
- projectState,
30
- updateSession
31
- } from "./studio-p4ngc046.js";
21
+ getEffectiveMedia,
22
+ getEffectiveStyle,
23
+ shell
24
+ } from "./studio-25hkdrkw.js";
32
25
  import {
33
- live,
34
- ref,
35
- repeat
36
- } from "./studio-4rzyrtjz.js";
26
+ componentRegistry2
27
+ } from "./studio-d055c37e.js";
37
28
  import {
38
- html,
39
- render
40
- } from "./studio-kryvsw6j.js";
29
+ tabOfPane,
30
+ mediaDisplayName,
31
+ serializeJxPath,
32
+ schemeOfQuery,
33
+ parseMediaEntries,
34
+ mountStylebookCanvas2,
35
+ panToStylebookTag2
36
+ } from "./studio-rkstz940.js";
41
37
  import {
42
- __require
43
- } from "./studio-a0tswy0w.js";
38
+ __preload
39
+ } from "./studio-5te5tqng.js";
44
40
  // data/stylebook-meta.json
45
41
  var stylebook_meta_default = {
46
42
  $sections: [
@@ -246,6 +242,160 @@ registerBlockType( name, settings );`
246
242
  other: { label: "Other", prefix: "--", placeholder: "value" }
247
243
  }
248
244
  };
245
+ // src/surfaces/stylebook-chrome.json
246
+ var stylebook_chrome_default = {
247
+ $schema: "https://jxsuite.com/schema/v1",
248
+ $id: "StudioStylebookChrome",
249
+ $description: "The bar across the top of the Project Styles canvas: the filter that narrows the specimen catalogue, and the toggle that reduces it to the elements this file has already styled. Both are shell state rather than document state — the adapter owns which — and the two names come in as values, because the surface is called Project Styles and the canvas view it draws is the wire word `stylebook`; nothing a reader sees here may be spelled from that. **The bar IS the kit's toolbar now.** It used to write `role=\"toolbar\"` and its own `aria-label` on a `<div>`, which is a role with none of the behaviour under it: two controls, two tab stops, and no arrow key between them. `jx-action-group` is not the element for it — that one roves `jx-action-button` and this bar's first control is a `jx-textfield` — so `jx-toolbar` is, and the field keeps its own arrows while its caret still has text to walk (ui.md §5.5).",
250
+ tagName: "jx-toolbar",
251
+ attributes: {
252
+ part: "chrome"
253
+ },
254
+ $props: {
255
+ label: {
256
+ $ref: "#/state/title"
257
+ }
258
+ },
259
+ style: {
260
+ $description: 'What `.sb-chrome` said in `styles/overlays.css`, plus the six inline declarations the template carried beside it, plus `.tb-toggle` — all three go dead with this conversion, and none of them is shared with another surface. Three repairs on the way. The bar is one element rather than a positioned box wrapping a `role="toolbar"` row that declared the same flex layout again. The flex layout is not declared here EITHER any more: `display: flex`, `align-items: center`, the `--jx-space-2` gap, the sans face and the foreground colour are all `jx-toolbar`\'s own, so what is left below is only what a positioned BAND is. And `.tb-toggle` read `var(--spectrum-font-size-50, 11px)`, which the kit spells `--jx-text-sm` at the same value; the rest of its drawing is a `jx-action-button` reaching in through `part="control"`, because what it has to look like is a small bordered chip and every fill and control height the kit draws would otherwise have to be taken back off.',
261
+ position: "absolute",
262
+ top: "0",
263
+ left: "0",
264
+ right: "0",
265
+ zIndex: "15",
266
+ flexShrink: "0",
267
+ padding: "var(--jx-space-2) var(--jx-space-3)",
268
+ background: "var(--bg-panel)",
269
+ borderBottom: "1px solid var(--border)",
270
+ '& [part="filter"]': {
271
+ flex: "1",
272
+ maxWidth: "200px"
273
+ },
274
+ '& [part="customized"] > [part="control"]': {
275
+ $description: "Bordered, unfilled and dimmed until it is on, which is what says it is a filter rather than an action: the catalogue it narrows is the thing the reader is looking at, so the control has to be quieter than its subject.",
276
+ padding: "3px var(--jx-space-3)",
277
+ border: "1px solid var(--border)",
278
+ borderRadius: "var(--radius)",
279
+ background: "transparent",
280
+ color: "var(--fg-dim)",
281
+ fontSize: "var(--jx-text-sm)",
282
+ ":hover": {
283
+ background: "var(--hover-bg)"
284
+ }
285
+ },
286
+ '& [part="customized"][data-selected] > [part="control"]': {
287
+ $description: "`data-selected` and not `selected`: the kit reflects the pressed state as a data attribute (`jx-action-button.json`), and the property this document binds never reaches the attribute of the same name.",
288
+ borderColor: "var(--accent)",
289
+ background: "var(--accent-15)",
290
+ color: "var(--accent)"
291
+ }
292
+ },
293
+ children: [
294
+ {
295
+ tagName: "jx-textfield",
296
+ attributes: {
297
+ part: "filter"
298
+ },
299
+ $props: {
300
+ size: "sm",
301
+ type: "search",
302
+ clearable: true,
303
+ label: {
304
+ $ref: "#/state/filterLabel"
305
+ },
306
+ placeholder: "Filter…",
307
+ value: {
308
+ $ref: "#/state/filter"
309
+ }
310
+ },
311
+ oninput: {
312
+ $prototype: "Function",
313
+ body: [
314
+ {
315
+ operator: "call",
316
+ target: {
317
+ $ref: "#/state/setFilter"
318
+ },
319
+ value: [
320
+ {
321
+ $ref: "event#/target/value"
322
+ }
323
+ ]
324
+ }
325
+ ]
326
+ }
327
+ },
328
+ {
329
+ tagName: "jx-action-button",
330
+ $description: "`onchange` and not `onclick`: a `toggles` button owns its own pressed state and says so with `change` (`jx-action-button.json`), and an `onclick` written here would replace the element's own click handler on the same property — the toggle would stop flipping and stop announcing `aria-pressed`.",
331
+ attributes: {
332
+ part: "customized"
333
+ },
334
+ $props: {
335
+ size: "sm",
336
+ toggles: true,
337
+ selected: {
338
+ $ref: "#/state/customizedOnly"
339
+ },
340
+ label: {
341
+ $ref: "#/state/customizedLabel"
342
+ },
343
+ hint: {
344
+ $ref: "#/state/customizedHint"
345
+ }
346
+ },
347
+ onchange: {
348
+ $prototype: "Function",
349
+ body: [
350
+ {
351
+ operator: "call",
352
+ target: {
353
+ $ref: "#/state/toggleCustomized"
354
+ },
355
+ value: []
356
+ }
357
+ ]
358
+ },
359
+ children: [
360
+ {
361
+ tagName: "span",
362
+ textContent: "${state.customizedLabel}"
363
+ }
364
+ ]
365
+ }
366
+ ]
367
+ };
368
+
369
+ // src/surfaces/stylebook-chrome.ts
370
+ registerSurface("stylebook-chrome", stylebook_chrome_default);
371
+ function createStylebookChromeSurface(view, actions) {
372
+ const host = document.createElement("div");
373
+ host.style.display = "contents";
374
+ const scope = reactive({ ...view, ...actions });
375
+ let handle = null;
376
+ let mounting = false;
377
+ function mount() {
378
+ mounting = true;
379
+ mountSurface("stylebook-chrome", scope, host).then((mounted) => {
380
+ mounting = false;
381
+ handle = mounted;
382
+ });
383
+ }
384
+ mount();
385
+ return {
386
+ host,
387
+ update(next) {
388
+ Object.assign(scope, next);
389
+ if (mounting || handle !== null && host.contains(handle.root)) {
390
+ return;
391
+ }
392
+ handle?.dispose();
393
+ handle = null;
394
+ host.textContent = "";
395
+ mount();
396
+ }
397
+ };
398
+ }
249
399
 
250
400
  // src/panels/stylebook-doc.ts
251
401
  function isTagPath(key) {
@@ -255,49 +405,15 @@ function isPlainObject(v) {
255
405
  return v !== null && typeof v === "object" && !Array.isArray(v);
256
406
  }
257
407
  var SPECIMEN_SCOPE = "& .element-card-preview";
258
- function mergeRules(base, add) {
259
- const out = { ...base };
260
- for (const [k, v] of Object.entries(add)) {
261
- out[k] = isPlainObject(v) && isPlainObject(out[k]) ? mergeRules(out[k], v) : v;
262
- }
263
- return out;
264
- }
265
- function stripAtKeys(rule) {
266
- const out = {};
267
- for (const [k, v] of Object.entries(rule)) {
268
- if (isPlainObject(v) && k.startsWith("@")) {
269
- continue;
270
- }
271
- out[k] = isPlainObject(v) ? stripAtKeys(v) : v;
272
- }
273
- return out;
274
- }
275
408
  function transposeStylebookStyle(effectiveStyle) {
276
409
  const style = effectiveStyle;
277
410
  const out = {};
278
- const mediaOut = {};
279
- const processTagRule = (rule, tagPath) => {
411
+ const withoutBaseWidth = (rule) => {
280
412
  const cleaned = {};
281
413
  for (const [k, v] of Object.entries(rule)) {
282
- if (!isPlainObject(v)) {
414
+ if (k !== "@--") {
283
415
  cleaned[k] = v;
284
- continue;
285
- }
286
- if (k.startsWith("@")) {
287
- if (k === "@--") {
288
- continue;
289
- }
290
- mediaOut[k] ??= {};
291
- const bucket = mediaOut[k];
292
- const sel = `${SPECIMEN_SCOPE} ${tagPath}`;
293
- bucket[sel] = mergeRules(bucket[sel], stripAtKeys(v));
294
- continue;
295
416
  }
296
- if (isTagPath(k)) {
297
- cleaned[k] = processTagRule(v, `${tagPath} ${k}`);
298
- continue;
299
- }
300
- cleaned[k] = v;
301
417
  }
302
418
  return cleaned;
303
419
  };
@@ -306,31 +422,31 @@ function transposeStylebookStyle(effectiveStyle) {
306
422
  out[k] = v;
307
423
  continue;
308
424
  }
425
+ if (k === "@--") {
426
+ continue;
427
+ }
428
+ if (isKeyframesAtRule(k)) {
429
+ out[k] = v;
430
+ continue;
431
+ }
309
432
  if (k.startsWith("@")) {
310
- if (k === "@--") {
311
- continue;
312
- }
313
- mediaOut[k] ??= {};
314
- const bucket = mediaOut[k];
433
+ const bucket = {};
315
434
  for (const [mk, mv] of Object.entries(v)) {
316
435
  if (isPlainObject(mv) && isTagPath(mk)) {
317
- const sel = `${SPECIMEN_SCOPE} ${mk}`;
318
- bucket[sel] = mergeRules(bucket[sel], mv);
436
+ bucket[`${SPECIMEN_SCOPE} ${mk}`] = withoutBaseWidth(mv);
319
437
  } else {
320
438
  bucket[mk] = mv;
321
439
  }
322
440
  }
441
+ out[k] = bucket;
323
442
  continue;
324
443
  }
325
444
  if (isTagPath(k)) {
326
- out[`${SPECIMEN_SCOPE} ${k}`] = processTagRule(v, k);
445
+ out[`${SPECIMEN_SCOPE} ${k}`] = withoutBaseWidth(v);
327
446
  continue;
328
447
  }
329
448
  out[k] = v;
330
449
  }
331
- for (const [mk, mv] of Object.entries(mediaOut)) {
332
- out[mk] = isPlainObject(out[mk]) ? mergeRules(out[mk], mv) : mv;
333
- }
334
450
  return out;
335
451
  }
336
452
  function resolveNestedStyle(style, tagPath) {
@@ -580,8 +696,8 @@ function readTokenOverride(style, context, token) {
580
696
  }
581
697
  function writeTokenOverride(style, context, token, value) {
582
698
  if (value) {
583
- const block2 = style[context.key] ??= {};
584
- block2[token] = value;
699
+ const block = style[context.key] ??= {};
700
+ block[token] = value;
585
701
  return;
586
702
  }
587
703
  const block = overrideBlock(style, context);
@@ -599,7 +715,33 @@ function addableContexts(style, contexts, token, alreadyShown = []) {
599
715
  }
600
716
 
601
717
  // src/panels/stylebook-panel.ts
602
- function renderStylebookMode(surface, ctx) {
718
+ var chromeBars = new WeakMap;
719
+ function chromeBar(surface) {
720
+ const view = {
721
+ customizedHint: "Show only the elements this file has already styled",
722
+ customizedLabel: "Customized",
723
+ customizedOnly: shell.stylebook.customizedOnly,
724
+ filter: shell.stylebook.filter,
725
+ filterLabel: `Filter the ${PROJECT_STYLES_TITLE} catalogue`,
726
+ title: PROJECT_STYLES_TITLE
727
+ };
728
+ const standing = chromeBars.get(surface);
729
+ if (standing) {
730
+ standing.update(view);
731
+ return standing.host;
732
+ }
733
+ const created = createStylebookChromeSurface(view, {
734
+ setFilter: (value) => {
735
+ shell.stylebook.filter = value;
736
+ },
737
+ toggleCustomized: () => {
738
+ shell.stylebook.customizedOnly = !shell.stylebook.customizedOnly;
739
+ }
740
+ });
741
+ chromeBars.set(surface, created);
742
+ return created.host;
743
+ }
744
+ async function renderStylebookMode(surface, ctx) {
603
745
  const canvasWrap = surface.wrap;
604
746
  const tab = tabOfPane(surface.paneId);
605
747
  const filter = shell.stylebook.filter.toLowerCase();
@@ -607,44 +749,7 @@ function renderStylebookMode(surface, ctx) {
607
749
  const effectiveMedia = getEffectiveMedia(tab?.doc.document?.$media);
608
750
  const { sizeBreakpoints, baseWidth } = parseMediaEntries(effectiveMedia);
609
751
  const hasMedia = sizeBreakpoints.length > 0;
610
- const onFilterInput = (e) => {
611
- shell.stylebook.filter = e.target.value;
612
- };
613
- const onCustomizedToggle = () => {
614
- shell.stylebook.customizedOnly = !shell.stylebook.customizedOnly;
615
- };
616
- const chromeBarTpl = html`
617
- <div
618
- class="sb-chrome"
619
- style="position:absolute;top:0;left:0;right:0;z-index:15;background:var(--bg-panel);border-bottom:1px solid var(--border)"
620
- >
621
- <div
622
- style="display:flex;align-items:center;padding:4px 8px;gap:4px"
623
- role="toolbar"
624
- aria-label=${PROJECT_STYLES_TITLE}
625
- >
626
- <input
627
- class="field-input"
628
- style="flex:1;max-width:200px"
629
- placeholder="Filter…"
630
- aria-label="Filter the ${PROJECT_STYLES_TITLE} catalogue"
631
- .value=${live(shell.stylebook.filter)}
632
- @input=${onFilterInput}
633
- />
634
- <button
635
- class=${classMap({
636
- active: shell.stylebook.customizedOnly,
637
- "tb-toggle": true
638
- })}
639
- aria-pressed=${String(shell.stylebook.customizedOnly)}
640
- title="Show only the elements this file has already styled"
641
- @click=${onCustomizedToggle}
642
- >
643
- Customized
644
- </button>
645
- </div>
646
- </div>
647
- `;
752
+ const chromeBarNode = chromeBar(surface);
648
753
  canvasWrap.style.overflow = "hidden";
649
754
  const allPanelDefs = [];
650
755
  if (hasMedia) {
@@ -665,31 +770,32 @@ function renderStylebookMode(surface, ctx) {
665
770
  if (!hasMedia) {
666
771
  const hasBaseWidth = effectiveMedia && effectiveMedia["--"];
667
772
  const label = hasBaseWidth ? `${mediaDisplayName("--")} (${baseWidth}px)` : null;
668
- const entry = ctx.canvasPanelTemplate(hasBaseWidth ? "base" : null, label, !hasBaseWidth, hasBaseWidth ? baseWidth : undefined);
669
- panelEntries = [{ panel: entry.panel, tpl: entry.tpl }];
773
+ panelEntries = [
774
+ ctx.canvasPanelEntry(hasBaseWidth ? "base" : null, label, !hasBaseWidth, hasBaseWidth ? baseWidth : undefined)
775
+ ];
670
776
  } else {
671
- panelEntries = allPanelDefs.map((def) => {
672
- const label = `${def.displayName} (${def.width}px)`;
673
- const { tpl, panel } = ctx.canvasPanelTemplate(def.name, label, false, def.width);
674
- return { panel, tpl };
675
- });
777
+ panelEntries = allPanelDefs.map((def) => ctx.canvasPanelEntry(def.name, `${def.displayName} (${def.width}px)`, false, def.width));
778
+ }
779
+ const stage = await ctx.drawStage(surface, {
780
+ columnHeader: "hidden",
781
+ frame: "boards",
782
+ framePart: "panzoom",
783
+ frameVars: "--boards-inset:40px",
784
+ handles: "hidden",
785
+ hug: false,
786
+ innerPart: "boards",
787
+ lead: "chrome",
788
+ panels: panelEntries.map((entry) => entry.item)
789
+ }, panelEntries);
790
+ if (!stage) {
791
+ return;
792
+ }
793
+ const chromeHost = ctx.stageHost(surface, "chrome-host");
794
+ if (chromeHost && chromeHost.firstChild !== chromeBarNode) {
795
+ chromeHost.replaceChildren(chromeBarNode);
676
796
  }
677
- render(html`
678
- ${chromeBarTpl}
679
- <div
680
- class="panzoom-wrap"
681
- style="transform-origin:0 0;padding-top:40px"
682
- ${ref((el) => {
683
- if (el) {
684
- surface.panzoomWrap = el;
685
- }
686
- })}
687
- >
688
- ${repeat(panelEntries, (e) => e.panel.mediaName, (e) => e.tpl)}
689
- </div>
690
- `, canvasWrap);
691
797
  const generated = buildStylebookDoc({
692
- components: componentRegistry,
798
+ components: componentRegistry2,
693
799
  customizedOnly: Boolean(customizedOnly),
694
800
  effectiveMedia: effectiveMedia ?? {},
695
801
  effectiveStyle: getEffectiveStyle(tab?.doc.document?.style),
@@ -700,7 +806,7 @@ function renderStylebookMode(surface, ctx) {
700
806
  const { panels } = surface;
701
807
  for (const { panel } of panelEntries) {
702
808
  panels.push(panel);
703
- mountStylebookCanvas(surface.renderGeneration, generated, panel.canvas, panel._width);
809
+ mountStylebookCanvas2(surface.renderGeneration, generated, panel.canvas, panel._width);
704
810
  }
705
811
  if (hasMedia) {
706
812
  ctx.updateActivePanelHeaders(surface);
@@ -710,7 +816,7 @@ function renderStylebookMode(surface, ctx) {
710
816
  }
711
817
  function selectStylebookTag(tag, media, { panCanvas = false } = {}) {
712
818
  shell.stylebook.selection = tag;
713
- updateSession(activeTab.value, {
819
+ updateSession(activeTab2.value, {
714
820
  selection: [[]],
715
821
  ui: {
716
822
  activeSelector: tag,
@@ -719,7 +825,7 @@ function selectStylebookTag(tag, media, { panCanvas = false } = {}) {
719
825
  }
720
826
  });
721
827
  if (tag && panCanvas) {
722
- panToStylebookTag(tag);
828
+ panToStylebookTag2(tag);
723
829
  }
724
830
  }
725
831
 
@@ -756,6 +862,8 @@ function noopCommandDeps() {
756
862
  var documentOpen = (ctx) => ctx.document.open;
757
863
  var hasSelection = (ctx) => ctx.selection.count > 0 && ctx.editor.kind === "canvas";
758
864
  var structurallyEditable = (ctx) => !ctx.selection.isRoot && ctx.selection.paths.every((path) => isSpliceablePath(path));
865
+ var SPLICEABLE_SELECTION = "an element selected on the canvas that has a sibling position: not the document root, a " + "repeater's template or a switch case";
866
+ var describePaths = (paths) => paths.map((path) => `[${path.join(", ")}]`).join(" and ");
759
867
  function defaultCommands(deps) {
760
868
  const commands = [
761
869
  {
@@ -763,7 +871,7 @@ function defaultCommands(deps) {
763
871
  title: "Save",
764
872
  category: "File",
765
873
  level: "document",
766
- icon: "save",
874
+ icon: "floppy-disk",
767
875
  keybinding: "mod+s",
768
876
  menus: ["commandbar/primary", "statusbar/document", "palette"],
769
877
  group: "1_file",
@@ -789,7 +897,7 @@ function defaultCommands(deps) {
789
897
  title: "Open in Browser",
790
898
  category: "View",
791
899
  level: "document",
792
- icon: "browser",
900
+ icon: "arrow-square-out",
793
901
  keybinding: "mod+shift+o",
794
902
  menus: ["commandbar/primary", "statusbar/document", "palette"],
795
903
  group: "2_output",
@@ -814,7 +922,7 @@ function defaultCommands(deps) {
814
922
  title: "Undo",
815
923
  category: "Edit",
816
924
  level: "document",
817
- icon: "undo",
925
+ icon: "arrow-u-up-left",
818
926
  keybinding: "mod+z",
819
927
  menus: ["commandbar/primary", "palette"],
820
928
  group: "1_history",
@@ -828,7 +936,7 @@ function defaultCommands(deps) {
828
936
  title: "Redo",
829
937
  category: "Edit",
830
938
  level: "document",
831
- icon: "redo",
939
+ icon: "arrow-u-up-right",
832
940
  keybinding: ["mod+shift+z", "mod+y"],
833
941
  menus: ["commandbar/primary", "palette"],
834
942
  group: "1_history",
@@ -849,10 +957,14 @@ function defaultCommands(deps) {
849
957
  undo: "document",
850
958
  when: hasSelection,
851
959
  enablement: structurallyEditable,
852
- requires: "an element that has a sibling position",
960
+ requires: SPLICEABLE_SELECTION,
853
961
  aiTool: {
854
962
  name: "duplicate_node",
855
- description: "Duplicate the currently selected element, inserting the copy after it."
963
+ description: "Duplicate elements in the document, inserting each copy after its original, as one " + "undoable step. The copies become the selection.",
964
+ report: ({ after }) => {
965
+ const n = after.selection.paths.length;
966
+ return `Duplicated ${n} element${n === 1 ? "" : "s"}; the ${n === 1 ? "copy is" : "copies are"} selected at ${describePaths(after.selection.paths)}.`;
967
+ }
856
968
  },
857
969
  run: () => deps.duplicateSelection()
858
970
  },
@@ -868,12 +980,8 @@ function defaultCommands(deps) {
868
980
  when: hasSelection,
869
981
  enablement: (ctx) => structurallyEditable(ctx) && !ctx.selection.isRepeater,
870
982
  requires: "an element with a sibling position that is not already a repeater",
871
- aiTool: {
872
- name: "repeat_node",
873
- description: "Turn the selected element into a repeater template, rendering it once per item of a " + "data collection the author picks in the dialog this opens."
874
- },
875
983
  run: () => {
876
- import("./convert-to-repeater-43tfn7cs.js").then(({ convertToRepeater }) => convertToRepeater());
984
+ (__preload("d0cgnb6d"), import("./convert-to-repeater-d0cgnb6d.js")).then(({ convertToRepeater }) => convertToRepeater());
877
985
  }
878
986
  },
879
987
  {
@@ -889,10 +997,14 @@ function defaultCommands(deps) {
889
997
  undo: "document",
890
998
  when: hasSelection,
891
999
  enablement: structurallyEditable,
892
- requires: "an element selection that is not the document root",
1000
+ requires: SPLICEABLE_SELECTION,
893
1001
  aiTool: {
894
1002
  name: "delete_node",
895
- description: "Delete the currently selected element from the document."
1003
+ description: "Delete elements from the document as one undoable step.",
1004
+ report: ({ before, after }) => {
1005
+ const n = before.selection.paths.length;
1006
+ return `Deleted ${n} element${n === 1 ? "" : "s"} at ${describePaths(before.selection.paths)} in one undo step; the selection is now ${after.selection.count === 0 ? "empty" : "elsewhere"}.`;
1007
+ }
896
1008
  },
897
1009
  run: () => deps.deleteSelection()
898
1010
  },
@@ -1075,7 +1187,7 @@ function inspectorFocusCommands(deps) {
1075
1187
  });
1076
1188
  }
1077
1189
 
1078
- export { transposeStylebookStyle, PROJECT_STYLES_TITLE, PROJECT_STYLES_VIEW, tokenLabel, groupTokens, listTokenContexts, readTokenOverride, writeTokenOverride, addableContexts, stylebook_meta_default, renderStylebookMode, selectStylebookTag, INSPECTOR_TABS, noopCommandDeps, defaultCommands };
1190
+ export { transposeStylebookStyle, PROJECT_STYLES_TITLE, PROJECT_STYLES_VIEW, TOKEN_GROUPS, tokenLabel, groupTokens, listTokenContexts, readTokenOverride, writeTokenOverride, addableContexts, stylebook_meta_default, renderStylebookMode, selectStylebookTag, INSPECTOR_TABS, noopCommandDeps, defaultCommands };
1079
1191
 
1080
- //# debugId=3813E2C630DE133B64756E2164756E21
1081
- //# sourceMappingURL=studio-fbf92ckf.js.map
1192
+ //# debugId=10489CF10762040B64756E2164756E21
1193
+ //# sourceMappingURL=studio-3hxkd92t.js.map