@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
@@ -0,0 +1,1190 @@
1
+ import {
2
+ nothing2,
3
+ render4
4
+ } from "./studio-1k325pwf.js";
5
+ import {
6
+ mount3,
7
+ preloadDocument,
8
+ showModal,
9
+ close2,
10
+ selectValue,
11
+ registerUi,
12
+ activeRegistry
13
+ } from "./studio-5jy81t3s.js";
14
+ import {
15
+ effectScope,
16
+ effect,
17
+ reactive,
18
+ toasts2,
19
+ dismiss2
20
+ } from "./studio-p1dw8wfw.js";
21
+
22
+ // src/ui/regions.ts
23
+ var REGION_ATTR = "data-jx-region";
24
+ var REGION_SURFACES = [
25
+ "rail",
26
+ "navigator",
27
+ "inspector",
28
+ "pane",
29
+ "dock.bottom",
30
+ "statusbar",
31
+ "commandbar",
32
+ "overlay"
33
+ ];
34
+ var DOTTED_SURFACES = new Set(["dock.bottom"]);
35
+ function parseRegionId(id) {
36
+ const slash = id.indexOf("/");
37
+ const head = slash === -1 ? id : id.slice(0, slash);
38
+ const part = slash === -1 ? undefined : id.slice(slash + 1);
39
+ if (part === "" || head === "") {
40
+ return null;
41
+ }
42
+ let surface = head;
43
+ let instance;
44
+ if (!DOTTED_SURFACES.has(head)) {
45
+ const dot = head.indexOf(".");
46
+ if (dot !== -1) {
47
+ surface = head.slice(0, dot);
48
+ instance = head.slice(dot + 1);
49
+ if (instance === "") {
50
+ return null;
51
+ }
52
+ }
53
+ }
54
+ if (!REGION_SURFACES.includes(surface)) {
55
+ return null;
56
+ }
57
+ return instance === undefined ? part === undefined ? { surface } : { part, surface } : part === undefined ? { instance, surface } : { instance, part, surface };
58
+ }
59
+ function isRegionId(id) {
60
+ return parseRegionId(id) !== null;
61
+ }
62
+ function canonicalRegionId(id) {
63
+ if (id === "pane") {
64
+ return "pane.primary";
65
+ }
66
+ return id.startsWith("pane/") ? `pane.primary/${id.slice(5)}` : id;
67
+ }
68
+ function regionRoot(root) {
69
+ return root ?? document;
70
+ }
71
+ var DERIVED_RESOLVERS = [
72
+ {
73
+ locate: ([, prop], root) => {
74
+ const row = resolveRegion(`inspector/field:${prop}`, root);
75
+ const browse = row?.querySelector('[part="browse"]');
76
+ return browse ? [browse] : [];
77
+ },
78
+ pattern: /^inspector\/field:(.+)\/browse$/
79
+ },
80
+ {
81
+ locate: ([, prop], root) => {
82
+ const inspector = resolveRegion("inspector", root);
83
+ return inspector ? [...inspector.querySelectorAll(`[data-prop="${CSS.escape(prop)}"]`)] : [];
84
+ },
85
+ pattern: /^inspector\/field:(.+)$/
86
+ }
87
+ ];
88
+ function resolveAllRegions(id, root) {
89
+ const canonical = canonicalRegionId(id);
90
+ if (!isRegionId(canonical)) {
91
+ return [];
92
+ }
93
+ const stamped = [
94
+ ...regionRoot(root).querySelectorAll(`[${REGION_ATTR}="${CSS.escape(canonical)}"]`)
95
+ ];
96
+ if (stamped.length > 0) {
97
+ return stamped;
98
+ }
99
+ for (const resolver of DERIVED_RESOLVERS) {
100
+ const match = canonical.match(resolver.pattern);
101
+ if (match) {
102
+ return resolver.locate(match, regionRoot(root));
103
+ }
104
+ }
105
+ return [];
106
+ }
107
+ function resolveRegion(id, root) {
108
+ const all = resolveAllRegions(id, root);
109
+ return all.at(-1) ?? null;
110
+ }
111
+ var REGION_FOR_FOCUS = {
112
+ dock: "dock.bottom",
113
+ inspector: "inspector",
114
+ navigator: "navigator",
115
+ pane: "pane.primary",
116
+ rail: "rail",
117
+ status: "statusbar"
118
+ };
119
+ function paneRegion(paneId, part) {
120
+ return part ? `pane.${paneId}/${part}` : `pane.${paneId}`;
121
+ }
122
+ function paneStripRegion(paneId) {
123
+ return paneRegion(paneId, "tabs");
124
+ }
125
+ function navigatorPanelRegion(panelId) {
126
+ return `navigator/panel:${panelId}`;
127
+ }
128
+ function inspectorTabRegion(tabId) {
129
+ return `inspector/tab:${tabId}`;
130
+ }
131
+ var NAVIGATOR_STATEMENTS_REGION = "navigator/statements";
132
+ function inspectorStatementsRegion(eventKey) {
133
+ return `inspector/statements:${eventKey}`;
134
+ }
135
+ function bottomPanelRegion(panelId) {
136
+ return `dock.bottom/panel:${panelId}`;
137
+ }
138
+ var OVERLAY_INSTANCE = {
139
+ dialog: "dialog",
140
+ modal: "dialog",
141
+ popover: "menu",
142
+ toast: "toasts"
143
+ };
144
+ function overlayRegion(layer, id) {
145
+ const instance = OVERLAY_INSTANCE[layer];
146
+ return id ? `overlay.${instance}:${id}` : `overlay.${instance}`;
147
+ }
148
+
149
+ // src/services/surface-registry.ts
150
+ var mounts = new Map;
151
+ var nextId = 1;
152
+ function registerMount(entry) {
153
+ const id = nextId;
154
+ nextId += 1;
155
+ mounts.set(id, { ...entry, id });
156
+ return id;
157
+ }
158
+ function unregisterMount(id) {
159
+ mounts.delete(id);
160
+ }
161
+ function surfaceMounts() {
162
+ return [...mounts.values()];
163
+ }
164
+ function mountsUsing(tag) {
165
+ const lower = tag.toLowerCase();
166
+ return surfaceMounts().filter((m) => m.elements.has(lower));
167
+ }
168
+ function mountsOf(name) {
169
+ return surfaceMounts().filter((m) => m.name === name);
170
+ }
171
+
172
+ // src/ui/kit.ts
173
+ var ready = null;
174
+ function registerKit(doc = document) {
175
+ ready ??= registerUi({ document: doc });
176
+ return ready;
177
+ }
178
+ function kitReady() {
179
+ return ready ?? registerKit();
180
+ }
181
+
182
+ // src/ui/surface.ts
183
+ var SURFACES_BASE = "jx-studio:/surfaces/";
184
+ var surfaces = new Map;
185
+ function registerSurface(name, doc) {
186
+ surfaces.set(name, doc);
187
+ preloadDocument(surfaceUrl(name), doc);
188
+ }
189
+ function surfaceUrl(name) {
190
+ return `${SURFACES_BASE}${name}.json`;
191
+ }
192
+ function surfaceDocument(name) {
193
+ return surfaces.get(name);
194
+ }
195
+ function surfaceResolver(url) {
196
+ if (!url.startsWith(SURFACES_BASE) || !url.endsWith(".json")) {
197
+ return;
198
+ }
199
+ return surfaces.get(url.slice(SURFACES_BASE.length, -".json".length));
200
+ }
201
+ async function mountSurface(name, hostScope, host, options = {}) {
202
+ const doc = surfaces.get(name);
203
+ if (!doc) {
204
+ throw new Error(`Studio surface "${name}" is not registered`);
205
+ }
206
+ await kitReady();
207
+ if (options.region) {
208
+ host.setAttribute(REGION_ATTR, options.region);
209
+ }
210
+ const handle = await mount3(doc, host, {
211
+ scope: hostScope,
212
+ base: SURFACES_BASE,
213
+ resolver: surfaceResolver,
214
+ ...options.onNodeCreated ? { onNodeCreated: options.onNodeCreated } : {},
215
+ ...options.onNodeMoved ? { onNodeMoved: options.onNodeMoved } : {},
216
+ ...options.signal ? { signal: options.signal } : {}
217
+ });
218
+ const surfaceHandle = (dispose) => ({
219
+ dispose,
220
+ elements: handle.elements,
221
+ root: handle.root,
222
+ scope: handle.scope
223
+ });
224
+ if (options.signal?.aborted) {
225
+ return surfaceHandle(handle.dispose);
226
+ }
227
+ let id = 0;
228
+ const dispose = () => {
229
+ handle.dispose();
230
+ unregisterMount(id);
231
+ };
232
+ id = registerMount({
233
+ elements: handle.elements,
234
+ host,
235
+ name,
236
+ remount: async () => {
237
+ dispose();
238
+ await mountSurface(name, hostScope, host, options);
239
+ }
240
+ });
241
+ options.signal?.addEventListener("abort", () => unregisterMount(id), { once: true });
242
+ return surfaceHandle(dispose);
243
+ }
244
+ // src/surfaces/dialog.json
245
+ var dialog_default = {
246
+ $schema: "https://jxsuite.com/schema/v1",
247
+ $id: "StudioDialog",
248
+ $description: "Studio's confirm, save-or-discard and prompt dialogs: one jx-dialog whose body is projected from the adapter's scope. `message` is a sentence; `choice` is a `jx-select` over the options; `field` is the prompt's jx-textfield with its refusal. The four answers call the host's functions, and the host decides when the dialog closes.",
249
+ tagName: "jx-dialog",
250
+ $props: {
251
+ headline: {
252
+ $ref: "#/state/headline"
253
+ },
254
+ confirmLabel: {
255
+ $ref: "#/state/confirmLabel"
256
+ },
257
+ secondaryLabel: {
258
+ $ref: "#/state/secondaryLabel"
259
+ },
260
+ cancelLabel: {
261
+ $ref: "#/state/cancelLabel"
262
+ },
263
+ destructive: {
264
+ $ref: "#/state/destructive"
265
+ },
266
+ size: {
267
+ $ref: "#/state/size"
268
+ }
269
+ },
270
+ attributes: {
271
+ headline: "${state.headline}",
272
+ "confirm-label": "${state.confirmLabel || null}",
273
+ "secondary-label": "${state.secondaryLabel || null}",
274
+ "cancel-label": "${state.cancelLabel || null}",
275
+ part: "dialog-host"
276
+ },
277
+ onconfirm: {
278
+ $prototype: "Function",
279
+ body: [
280
+ {
281
+ operator: "call",
282
+ target: {
283
+ $ref: "#/state/confirm"
284
+ },
285
+ value: []
286
+ }
287
+ ]
288
+ },
289
+ onsecondary: {
290
+ $prototype: "Function",
291
+ body: [
292
+ {
293
+ operator: "call",
294
+ target: {
295
+ $ref: "#/state/secondary"
296
+ },
297
+ value: []
298
+ }
299
+ ]
300
+ },
301
+ oncancel: {
302
+ $prototype: "Function",
303
+ body: [
304
+ {
305
+ operator: "call",
306
+ target: {
307
+ $ref: "#/state/cancel"
308
+ },
309
+ value: []
310
+ }
311
+ ]
312
+ },
313
+ onclose: {
314
+ $prototype: "Function",
315
+ body: [
316
+ {
317
+ operator: "call",
318
+ target: {
319
+ $ref: "#/state/closed"
320
+ },
321
+ value: []
322
+ }
323
+ ]
324
+ },
325
+ style: {
326
+ '& [part="message"]': {
327
+ margin: "0 0 var(--jx-space-3)"
328
+ },
329
+ '& [part="message"]:last-child': {
330
+ margin: "0"
331
+ },
332
+ '& [part="island"]:empty': {
333
+ display: "none"
334
+ },
335
+ '& [part="message-slot"], & [part="choice-slot"], & [part="field-slot"]': {
336
+ display: "contents"
337
+ },
338
+ '& [part="choice-row"]': {
339
+ display: "flex",
340
+ flexDirection: "column",
341
+ gap: "var(--jx-space-1)",
342
+ margin: "0 0 var(--jx-space-3)"
343
+ },
344
+ '& [part="choice-label"]': {
345
+ fontSize: "var(--jx-text-sm)",
346
+ color: "var(--jx-fg-dim)"
347
+ },
348
+ "& jx-textfield": {
349
+ width: "100%"
350
+ }
351
+ },
352
+ children: [
353
+ {
354
+ tagName: "div",
355
+ attributes: {
356
+ part: "message-slot",
357
+ role: "none"
358
+ },
359
+ $switch: {
360
+ $ref: "#/state/hasMessage"
361
+ },
362
+ cases: {
363
+ true: {
364
+ tagName: "p",
365
+ attributes: {
366
+ part: "message"
367
+ },
368
+ textContent: "${state.message}"
369
+ }
370
+ }
371
+ },
372
+ {
373
+ tagName: "div",
374
+ attributes: {
375
+ part: "island"
376
+ }
377
+ },
378
+ {
379
+ tagName: "div",
380
+ attributes: {
381
+ part: "choice-slot",
382
+ role: "none"
383
+ },
384
+ $switch: {
385
+ $ref: "#/state/hasChoice"
386
+ },
387
+ cases: {
388
+ true: {
389
+ tagName: "div",
390
+ attributes: {
391
+ part: "choice-row"
392
+ },
393
+ children: [
394
+ {
395
+ tagName: "span",
396
+ attributes: {
397
+ part: "choice-label"
398
+ },
399
+ textContent: "${state.choiceLabel}"
400
+ },
401
+ {
402
+ tagName: "jx-select",
403
+ $props: {
404
+ label: {
405
+ $ref: "#/state/choiceLabel"
406
+ },
407
+ options: {
408
+ $ref: "#/state/options"
409
+ },
410
+ value: {
411
+ $ref: "#/state/chosen"
412
+ }
413
+ },
414
+ attributes: {
415
+ part: "choice"
416
+ },
417
+ onchange: {
418
+ $prototype: "Function",
419
+ body: [
420
+ {
421
+ operator: "call",
422
+ target: {
423
+ $ref: "#/state/pick"
424
+ },
425
+ value: [
426
+ {
427
+ $ref: "event#/target/value"
428
+ }
429
+ ]
430
+ }
431
+ ]
432
+ }
433
+ }
434
+ ]
435
+ }
436
+ }
437
+ },
438
+ {
439
+ tagName: "div",
440
+ attributes: {
441
+ part: "field-slot",
442
+ role: "none"
443
+ },
444
+ $switch: {
445
+ $ref: "#/state/hasField"
446
+ },
447
+ cases: {
448
+ true: {
449
+ tagName: "jx-textfield",
450
+ $props: {
451
+ label: {
452
+ $ref: "#/state/headline"
453
+ },
454
+ value: {
455
+ $ref: "#/state/value"
456
+ },
457
+ placeholder: {
458
+ $ref: "#/state/placeholder"
459
+ },
460
+ invalid: {
461
+ $ref: "#/state/invalid"
462
+ },
463
+ error: {
464
+ $ref: "#/state/error"
465
+ },
466
+ multiline: {
467
+ $ref: "#/state/multiline"
468
+ },
469
+ rows: {
470
+ $ref: "#/state/rows"
471
+ },
472
+ mono: {
473
+ $ref: "#/state/mono"
474
+ }
475
+ },
476
+ attributes: {
477
+ part: "field"
478
+ },
479
+ oninput: {
480
+ $prototype: "Function",
481
+ body: [
482
+ {
483
+ operator: "call",
484
+ target: {
485
+ $ref: "#/state/input"
486
+ },
487
+ value: [
488
+ {
489
+ $ref: "event#/target/value"
490
+ }
491
+ ]
492
+ }
493
+ ]
494
+ },
495
+ onkeydown: {
496
+ $prototype: "Function",
497
+ body: [
498
+ {
499
+ $switch: {
500
+ $ref: "#/state/singleLine"
501
+ },
502
+ cases: {
503
+ true: [
504
+ {
505
+ $switch: {
506
+ $ref: "event#/key"
507
+ },
508
+ cases: {
509
+ Enter: [
510
+ {
511
+ preventDefault: true
512
+ },
513
+ {
514
+ operator: "call",
515
+ target: {
516
+ $ref: "#/state/confirm"
517
+ },
518
+ value: []
519
+ }
520
+ ]
521
+ }
522
+ }
523
+ ]
524
+ }
525
+ }
526
+ ]
527
+ },
528
+ $description: "The prompt's one field. `multiline` is what makes it a paste box rather than a line: an import the author copied out of a `_redirects` file is column-aligned, so it also asks for `mono`. A multiline field takes Enter as a newline, which is why the Enter-confirms handler below is guarded on it — a paste box whose second line submits the dialog cannot be typed into."
529
+ }
530
+ }
531
+ }
532
+ ]
533
+ };
534
+
535
+ // src/surfaces/dialog.ts
536
+ registerSurface("dialog", dialog_default);
537
+ function whenReady(element) {
538
+ if (element.querySelector('[part="dialog"]')) {
539
+ return Promise.resolve(element);
540
+ }
541
+ return new Promise((resolve) => {
542
+ element.addEventListener("jx-ready", function ready(event) {
543
+ if (event.target !== element && !element.querySelector('[part="dialog"]')) {
544
+ return;
545
+ }
546
+ element.removeEventListener("jx-ready", ready);
547
+ resolve(element);
548
+ });
549
+ });
550
+ }
551
+ function openDialogSurface(options) {
552
+ const slot = document.createElement("div");
553
+ slot.style.pointerEvents = "auto";
554
+ slot.setAttribute(REGION_ATTR, overlayRegion("dialog", options.region));
555
+ options.layer.append(slot);
556
+ const scope = reactive({
557
+ cancel: () => {
558
+ options.onCancel();
559
+ },
560
+ cancelLabel: options.cancelLabel,
561
+ choiceLabel: options.choice?.label ?? "",
562
+ chosen: options.choice?.chosen ?? "",
563
+ closed: () => {
564
+ options.onClosed();
565
+ },
566
+ confirm: () => {
567
+ options.onConfirm();
568
+ },
569
+ confirmLabel: options.confirmLabel,
570
+ destructive: options.destructive === true,
571
+ error: "",
572
+ hasChoice: options.choice !== undefined,
573
+ hasField: options.field !== undefined,
574
+ mono: options.field?.mono === true,
575
+ multiline: options.field?.multiline === true,
576
+ rows: options.field?.rows ?? "3",
577
+ singleLine: options.field !== undefined && options.field.multiline !== true ? "true" : "false",
578
+ hasMessage: options.message !== undefined && options.message !== "",
579
+ headline: options.headline,
580
+ input: (value) => {
581
+ scope.value = value;
582
+ options.onInput?.(value);
583
+ },
584
+ invalid: false,
585
+ message: options.message ?? "",
586
+ options: options.choice?.options ?? [],
587
+ pick: (value) => {
588
+ options.onPick?.(value);
589
+ },
590
+ placeholder: options.field?.placeholder ?? "",
591
+ secondary: () => {
592
+ options.onSecondary?.();
593
+ },
594
+ secondaryLabel: options.secondaryLabel ?? "",
595
+ size: options.size ?? "sm",
596
+ value: options.field?.value ?? ""
597
+ });
598
+ let handle = null;
599
+ let closed = false;
600
+ let abort = () => {};
601
+ const aborted = new Promise((resolve) => {
602
+ abort = resolve;
603
+ });
604
+ const mounted = mountSurface("dialog", scope, slot);
605
+ const ready = mounted.then(async (surface) => {
606
+ const element = surface.root;
607
+ if (closed) {
608
+ surface.dispose();
609
+ return element;
610
+ }
611
+ handle = surface;
612
+ await Promise.race([whenReady(element), aborted]);
613
+ if (closed) {
614
+ return element;
615
+ }
616
+ options.island?.(element.querySelector('[part="island"]') ?? element);
617
+ showModal(element);
618
+ if (options.field) {
619
+ const field = element.querySelector("jx-textfield");
620
+ if (field) {
621
+ setTimeout(() => {
622
+ if (!closed) {
623
+ selectValue(field, options.field?.select ?? "all");
624
+ }
625
+ }, 0);
626
+ }
627
+ }
628
+ return element;
629
+ });
630
+ return {
631
+ close() {
632
+ if (closed) {
633
+ return;
634
+ }
635
+ closed = true;
636
+ abort();
637
+ const element = handle?.root;
638
+ if (element instanceof HTMLElement) {
639
+ close2(element);
640
+ }
641
+ handle?.dispose();
642
+ handle = null;
643
+ slot.remove();
644
+ },
645
+ host: slot,
646
+ ready,
647
+ update(patch) {
648
+ if (patch.confirmLabel !== undefined) {
649
+ scope.confirmLabel = patch.confirmLabel;
650
+ }
651
+ if (patch.cancelLabel !== undefined) {
652
+ scope.cancelLabel = patch.cancelLabel;
653
+ }
654
+ if (patch.message !== undefined) {
655
+ scope.message = patch.message;
656
+ scope.hasMessage = patch.message !== "";
657
+ }
658
+ if (patch.value !== undefined) {
659
+ scope.value = patch.value;
660
+ }
661
+ if (patch.placeholder !== undefined) {
662
+ scope.placeholder = patch.placeholder;
663
+ }
664
+ if (patch.invalid !== undefined) {
665
+ scope.invalid = patch.invalid;
666
+ }
667
+ if (patch.error !== undefined) {
668
+ if (patch.error !== "" && patch.error === scope.error) {
669
+ scope.error = "";
670
+ const repeated = patch.error;
671
+ queueMicrotask(() => {
672
+ scope.error = repeated;
673
+ });
674
+ } else {
675
+ scope.error = patch.error;
676
+ }
677
+ }
678
+ if (patch.options !== undefined) {
679
+ scope.options = patch.options;
680
+ }
681
+ if (patch.chosen !== undefined) {
682
+ scope.chosen = patch.chosen;
683
+ }
684
+ }
685
+ };
686
+ }
687
+ // src/surfaces/toasts.json
688
+ var toasts_default = {
689
+ $schema: "https://jxsuite.com/schema/v1",
690
+ $id: "StudioToasts",
691
+ $description: "The toast stack: a rendering of the notification service's toasts, newest last. Each row is projected by ui/layers.ts with its severity glyph and, where a recovery command exists, that command's title and gate; the two buttons call back into the host, which owns the records and their timers.",
692
+ tagName: "div",
693
+ attributes: {
694
+ part: "stack"
695
+ },
696
+ style: {
697
+ position: "absolute",
698
+ right: "var(--jx-space-4)",
699
+ bottom: "36px",
700
+ display: "flex",
701
+ flexDirection: "column",
702
+ gap: "var(--jx-space-3)",
703
+ alignItems: "flex-end",
704
+ maxWidth: "min(420px, calc(100vw - 24px))",
705
+ '& [part="toast"]': {
706
+ display: "flex",
707
+ alignItems: "center",
708
+ gap: "var(--jx-space-3)",
709
+ pointerEvents: "auto",
710
+ padding: "var(--jx-space-3)",
711
+ border: "1px solid var(--jx-border)",
712
+ borderLeft: "3px solid var(--jx-fg-dim)",
713
+ borderRadius: "var(--jx-radius-md)",
714
+ background: "var(--jx-bg-panel)",
715
+ color: "var(--jx-fg)",
716
+ fontSize: "var(--jx-text-sm)",
717
+ lineHeight: "var(--jx-leading-sm)",
718
+ boxShadow: "var(--jx-shadow-popover)"
719
+ },
720
+ '& [part="toast"][data-severity="success"]': {
721
+ borderLeftColor: "var(--jx-success)"
722
+ },
723
+ '& [part="toast"][data-severity="info"]': {
724
+ borderLeftColor: "var(--jx-accent)"
725
+ },
726
+ '& [part="toast"][data-severity="warn"]': {
727
+ borderLeftColor: "var(--jx-warning)"
728
+ },
729
+ '& [part="toast"][data-severity="error"]': {
730
+ borderLeftColor: "var(--jx-danger)"
731
+ },
732
+ '& [part="icon"]': {
733
+ flex: "none",
734
+ width: "14px",
735
+ textAlign: "center",
736
+ fontWeight: "700"
737
+ },
738
+ '& [data-severity="success"] [part="icon"]': {
739
+ color: "var(--jx-success)"
740
+ },
741
+ '& [data-severity="info"] [part="icon"]': {
742
+ color: "var(--jx-accent)"
743
+ },
744
+ '& [data-severity="warn"] [part="icon"]': {
745
+ color: "var(--jx-warning)"
746
+ },
747
+ '& [data-severity="error"] [part="icon"]': {
748
+ color: "var(--jx-danger)"
749
+ },
750
+ '& [part="message"]': {
751
+ flex: "1",
752
+ minWidth: "0",
753
+ overflow: "hidden",
754
+ display: "-webkit-box",
755
+ WebkitBoxOrient: "vertical",
756
+ WebkitLineClamp: "3"
757
+ },
758
+ '& [part="action-slot"]': {
759
+ display: "contents"
760
+ },
761
+ '& [part="action"] > [part="control"]': {
762
+ color: "var(--jx-accent)"
763
+ }
764
+ },
765
+ children: [
766
+ {
767
+ $prototype: "Array",
768
+ items: {
769
+ $ref: "#/state/toasts"
770
+ },
771
+ key: {
772
+ $ref: "$map/item/id"
773
+ },
774
+ map: {
775
+ tagName: "div",
776
+ attributes: {
777
+ part: "toast",
778
+ "data-severity": "${$map.item.severity}"
779
+ },
780
+ children: [
781
+ {
782
+ tagName: "span",
783
+ attributes: {
784
+ part: "icon",
785
+ "aria-hidden": "true"
786
+ },
787
+ textContent: "${$map.item.icon}"
788
+ },
789
+ {
790
+ tagName: "span",
791
+ attributes: {
792
+ part: "message"
793
+ },
794
+ textContent: "${$map.item.message}"
795
+ },
796
+ {
797
+ tagName: "span",
798
+ attributes: {
799
+ part: "action-slot",
800
+ role: "none"
801
+ },
802
+ $switch: {
803
+ $ref: "$map/item/hasAction"
804
+ },
805
+ cases: {
806
+ true: {
807
+ tagName: "jx-button",
808
+ $props: {
809
+ size: "sm",
810
+ quiet: true,
811
+ disabled: {
812
+ $ref: "$map/item/actionDisabled"
813
+ }
814
+ },
815
+ attributes: {
816
+ part: "action",
817
+ title: "${$map.item.actionTitle}"
818
+ },
819
+ onclick: {
820
+ $prototype: "Function",
821
+ body: [
822
+ {
823
+ operator: "call",
824
+ target: {
825
+ $ref: "#/state/runAction"
826
+ },
827
+ value: [
828
+ {
829
+ $ref: "$map/item/id"
830
+ }
831
+ ]
832
+ }
833
+ ]
834
+ },
835
+ children: [
836
+ {
837
+ tagName: "span",
838
+ textContent: "${$map.item.actionLabel}"
839
+ }
840
+ ]
841
+ }
842
+ }
843
+ },
844
+ {
845
+ tagName: "jx-action-button",
846
+ $props: {
847
+ label: "Dismiss notification",
848
+ hint: "Dismiss notification",
849
+ icon: "x",
850
+ size: "sm"
851
+ },
852
+ attributes: {
853
+ part: "dismiss"
854
+ },
855
+ onclick: {
856
+ $prototype: "Function",
857
+ body: [
858
+ {
859
+ operator: "call",
860
+ target: {
861
+ $ref: "#/state/dismissToast"
862
+ },
863
+ value: [
864
+ {
865
+ $ref: "$map/item/id"
866
+ }
867
+ ]
868
+ }
869
+ ]
870
+ }
871
+ }
872
+ ]
873
+ }
874
+ }
875
+ ]
876
+ };
877
+
878
+ // src/ui/layers.ts
879
+ var _popoverLayer;
880
+ var _modalLayer;
881
+ var _dialogLayer;
882
+ var _toastLayer;
883
+ function layerHost2(kind) {
884
+ const host = kind === "popover" ? _popoverLayer : kind === "modal" ? _modalLayer : kind === "toast" ? _toastLayer : _dialogLayer;
885
+ return host || document.body;
886
+ }
887
+ function initLayers2() {
888
+ _popoverLayer = document.querySelector("#layer-popover");
889
+ _modalLayer = document.querySelector("#layer-modal");
890
+ _dialogLayer = document.querySelector("#layer-dialog");
891
+ _toastLayer = document.querySelector("#layer-toast");
892
+ mountToastHost();
893
+ }
894
+ var UNDERLAID = "jx-dialog[data-open], dialog[open]";
895
+ function isModalOpen2() {
896
+ return Boolean(_dialogLayer?.querySelector(UNDERLAID) || _modalLayer?.querySelector(UNDERLAID));
897
+ }
898
+ function showConfirmDialog2(headline, message, opts = {}) {
899
+ const { confirmLabel = "Confirm", cancelLabel = "Cancel", destructive = false } = opts;
900
+ return new Promise((resolve) => {
901
+ let settled = false;
902
+ const done = (value) => {
903
+ if (settled) {
904
+ return;
905
+ }
906
+ settled = true;
907
+ handle.close();
908
+ resolve(value);
909
+ };
910
+ const handle = openDialogSurface({
911
+ cancelLabel,
912
+ confirmLabel,
913
+ destructive,
914
+ headline,
915
+ layer: layerHost2("dialog"),
916
+ ...messageOptions(message),
917
+ onCancel: () => done(false),
918
+ onClosed: () => done(false),
919
+ onConfirm: () => done(true)
920
+ });
921
+ });
922
+ }
923
+ function showSaveDiscardDialog2(headline, message, opts = {}) {
924
+ const { saveLabel = "Save", discardLabel = "Discard", cancelLabel = "Cancel" } = opts;
925
+ return new Promise((resolve) => {
926
+ let settled = false;
927
+ const done = (value) => {
928
+ if (settled) {
929
+ return;
930
+ }
931
+ settled = true;
932
+ handle.close();
933
+ resolve(value);
934
+ };
935
+ const handle = openDialogSurface({
936
+ cancelLabel,
937
+ confirmLabel: saveLabel,
938
+ headline,
939
+ layer: layerHost2("dialog"),
940
+ ...messageOptions(message),
941
+ onCancel: () => done("cancel"),
942
+ onClosed: () => done("cancel"),
943
+ onConfirm: () => done("save"),
944
+ onSecondary: () => done("discard"),
945
+ secondaryLabel: discardLabel
946
+ });
947
+ });
948
+ }
949
+ function messageOptions(message) {
950
+ if (typeof message === "string") {
951
+ return { message };
952
+ }
953
+ return {
954
+ island: (host) => {
955
+ render4(message, host);
956
+ }
957
+ };
958
+ }
959
+ function showPromptDialog2(headline, opts = {}) {
960
+ const {
961
+ cancelLabel = "Cancel",
962
+ choice,
963
+ confirmLabel = "OK",
964
+ message,
965
+ mono = false,
966
+ multiline = false,
967
+ placeholder = "",
968
+ rows = "3",
969
+ select = "all",
970
+ size,
971
+ validate,
972
+ value: initialValue = ""
973
+ } = opts;
974
+ const check = (candidate) => validate ? validate(candidate, chosen) : candidate.trim() ? "" : "Enter a value.";
975
+ let value = initialValue;
976
+ let chosen = choice?.initial ?? "";
977
+ let error = "";
978
+ let touched = false;
979
+ const placeholderNow = () => typeof placeholder === "function" ? placeholder() : placeholder;
980
+ const optionsNow = () => choice ? choice.options().map((option) => ({ label: option.label, value: option.value })) : [];
981
+ return new Promise((resolve) => {
982
+ let settled = false;
983
+ const done = (result) => {
984
+ if (settled) {
985
+ return;
986
+ }
987
+ settled = true;
988
+ handle.close();
989
+ resolve(result);
990
+ };
991
+ const showError = (next) => {
992
+ error = next;
993
+ handle.update({ error, invalid: error !== "" });
994
+ };
995
+ const handle = openDialogSurface({
996
+ cancelLabel,
997
+ confirmLabel,
998
+ headline,
999
+ layer: layerHost2("dialog"),
1000
+ ...message === undefined ? {} : messageOptions(message),
1001
+ ...choice ? { choice: { chosen, label: choice.label, options: optionsNow() } } : {},
1002
+ field: { mono, multiline, placeholder: placeholderNow(), rows, select, value },
1003
+ ...size === undefined ? {} : { size },
1004
+ onCancel: () => done(null),
1005
+ onClosed: () => done(null),
1006
+ onConfirm: () => {
1007
+ const refused = check(value);
1008
+ if (refused) {
1009
+ showError(refused);
1010
+ return;
1011
+ }
1012
+ done(value.trim());
1013
+ },
1014
+ onInput: (next) => {
1015
+ touched = true;
1016
+ value = next;
1017
+ const candidate = check(value);
1018
+ if (candidate !== error) {
1019
+ showError(candidate);
1020
+ }
1021
+ },
1022
+ onPick: (next) => {
1023
+ chosen = next;
1024
+ choice?.onChange?.(next);
1025
+ const candidate = check(value);
1026
+ error = touched || error ? candidate : "";
1027
+ handle.update({
1028
+ chosen,
1029
+ error,
1030
+ invalid: error !== "",
1031
+ options: optionsNow(),
1032
+ placeholder: placeholderNow()
1033
+ });
1034
+ }
1035
+ });
1036
+ });
1037
+ }
1038
+ var _namedSlots = new Map;
1039
+ function getLayerSlot2(layer, id) {
1040
+ const key = `${layer}:${id}`;
1041
+ let slot = _namedSlots.get(key);
1042
+ if (slot && slot.parentElement) {
1043
+ return slot;
1044
+ }
1045
+ slot = document.createElement("div");
1046
+ slot.style.pointerEvents = "auto";
1047
+ slot.setAttribute(REGION_ATTR, overlayRegion(layer, id));
1048
+ layerHost2(layer).append(slot);
1049
+ _namedSlots.set(key, slot);
1050
+ return slot;
1051
+ }
1052
+ function clearLayerSlot2(layer, id) {
1053
+ const key = `${layer}:${id}`;
1054
+ const slot = _namedSlots.get(key);
1055
+ if (slot) {
1056
+ render4(nothing2, slot);
1057
+ slot.remove();
1058
+ _namedSlots.delete(key);
1059
+ }
1060
+ }
1061
+ var TOAST_ENTER_MS = 180;
1062
+ var TOAST_ICON = {
1063
+ error: "✕",
1064
+ info: "ℹ",
1065
+ success: "✓",
1066
+ warn: "!"
1067
+ };
1068
+ var _toastScope = null;
1069
+ var _toastTimers = new Map;
1070
+ var _toastEntering = new Set;
1071
+ function reducedMotion() {
1072
+ return globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches === true;
1073
+ }
1074
+ function toastsAreHeld() {
1075
+ try {
1076
+ return new URLSearchParams(globalThis.location?.search ?? "").get("automation") === "1";
1077
+ } catch {
1078
+ return false;
1079
+ }
1080
+ }
1081
+ function overlayIdleBlockers2() {
1082
+ return [..._toastEntering].map((id) => `overlay: toast ${id} settling in`);
1083
+ }
1084
+ function retireToast(id) {
1085
+ const timer = _toastTimers.get(id);
1086
+ if (timer !== undefined) {
1087
+ clearTimeout(timer);
1088
+ _toastTimers.delete(id);
1089
+ }
1090
+ _toastEntering.delete(id);
1091
+ dismiss2(id);
1092
+ }
1093
+ function scheduleToast(record) {
1094
+ if (_toastTimers.has(record.id) || _toastEntering.has(record.id)) {
1095
+ return;
1096
+ }
1097
+ const settle = reducedMotion() ? 0 : TOAST_ENTER_MS;
1098
+ if (settle > 0) {
1099
+ _toastEntering.add(record.id);
1100
+ setTimeout(() => _toastEntering.delete(record.id), settle);
1101
+ }
1102
+ const rest = record.timeoutMs ?? 0;
1103
+ if (rest <= 0 || toastsAreHeld()) {
1104
+ return;
1105
+ }
1106
+ _toastTimers.set(record.id, setTimeout(() => retireToast(record.id), rest));
1107
+ }
1108
+ registerSurface("toasts", toasts_default);
1109
+ var _toastState = null;
1110
+ var _toastMount = null;
1111
+ var _toastHandle = null;
1112
+ function toastScope() {
1113
+ _toastState ??= reactive({
1114
+ dismissToast: (id) => {
1115
+ retireToast(id);
1116
+ },
1117
+ runAction: (id) => {
1118
+ const record = toasts2.find((candidate) => candidate.id === id);
1119
+ const registry = activeRegistry();
1120
+ if (!record?.action || !registry) {
1121
+ return;
1122
+ }
1123
+ retireToast(id);
1124
+ registry.run(record.action, record.actionArgs);
1125
+ },
1126
+ toasts: []
1127
+ });
1128
+ return _toastState;
1129
+ }
1130
+ function projectToast(record) {
1131
+ const registry = record.action === undefined ? null : activeRegistry();
1132
+ const id = record.action;
1133
+ const known = registry && id !== undefined ? registry.get(id) : undefined;
1134
+ const command = known && id !== undefined && registry.isVisible(id) ? known : null;
1135
+ const reason = command && id !== undefined ? registry.disabledReason(id) : undefined;
1136
+ return {
1137
+ actionDisabled: reason !== undefined,
1138
+ actionLabel: command?.title ?? "",
1139
+ actionTitle: command === null || command === undefined ? "" : reason === undefined ? command.title : `${command.title} — requires ${reason}`,
1140
+ hasAction: command !== null && command !== undefined,
1141
+ icon: TOAST_ICON[record.severity],
1142
+ id: record.id,
1143
+ message: record.message,
1144
+ severity: record.severity
1145
+ };
1146
+ }
1147
+ function mountToastHost() {
1148
+ unmountToastHost();
1149
+ if (!_toastLayer) {
1150
+ return;
1151
+ }
1152
+ _toastScope = effectScope();
1153
+ _toastScope.run(() => {
1154
+ effect(() => {
1155
+ toasts2.length;
1156
+ activeRegistry();
1157
+ for (const record of toasts2) {
1158
+ scheduleToast(record);
1159
+ }
1160
+ toastScope().toasts = toasts2.map((record) => projectToast(record));
1161
+ });
1162
+ });
1163
+ _toastMount = mountSurface("toasts", toastScope(), _toastLayer);
1164
+ _toastMount.then((handle) => {
1165
+ _toastHandle = handle;
1166
+ });
1167
+ }
1168
+ function unmountToastHost() {
1169
+ _toastScope?.stop();
1170
+ _toastScope = null;
1171
+ for (const timer of _toastTimers.values()) {
1172
+ clearTimeout(timer);
1173
+ }
1174
+ _toastTimers.clear();
1175
+ _toastEntering.clear();
1176
+ const pending = _toastMount;
1177
+ _toastMount = null;
1178
+ if (_toastHandle) {
1179
+ _toastHandle.dispose();
1180
+ _toastHandle = null;
1181
+ } else if (pending) {
1182
+ pending.then((handle) => handle.dispose());
1183
+ }
1184
+ _toastState = null;
1185
+ }
1186
+
1187
+ export { mountsUsing, mountsOf, registerKit, REGION_ATTR, resolveRegion, REGION_FOR_FOCUS, paneRegion, paneStripRegion, navigatorPanelRegion, inspectorTabRegion, NAVIGATOR_STATEMENTS_REGION, inspectorStatementsRegion, bottomPanelRegion, overlayRegion, registerSurface, surfaceDocument, mountSurface, whenReady, openDialogSurface, layerHost2, initLayers2, isModalOpen2, showConfirmDialog2, showSaveDiscardDialog2, showPromptDialog2, getLayerSlot2, clearLayerSlot2, overlayIdleBlockers2 };
1188
+
1189
+ //# debugId=A8CBC6598506FDAE64756E2164756E21
1190
+ //# sourceMappingURL=studio-erdatzvp.js.map