@jxsuite/studio 4.1.0 → 5.1.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 (612) 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-qwkm9zrf.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-vj72gqtq.js +20 -0
  15. package/dist/chunks/content-source-5mex4x1h.js +46 -0
  16. package/dist/chunks/convert-to-repeater-n64h8znc.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-234hjnqw.js +42 -0
  20. package/dist/chunks/extension-sections-3hpcambp.js +651 -0
  21. package/dist/chunks/file-ops-8yhd83xr.js +47 -0
  22. package/dist/chunks/files-hnxqxtsg.js +72 -0
  23. package/dist/chunks/format-host-779sfp2n.js +40 -0
  24. package/dist/chunks/fs-events-b88z7g4h.js +18 -0
  25. package/dist/chunks/git-panel-xwj8fpab.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-syr0f9sb.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-ff81wthn.js +30 -0
  37. package/dist/chunks/layers-panel-pnnghw12.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-cqhhxhhe.js +33 -0
  41. package/dist/chunks/menu-9p2w46gj.js +15 -0
  42. package/dist/chunks/menu-q99sy9rf.js +285 -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-5zt840sy.js +27 -0
  52. package/dist/chunks/quick-search-3748564r.js +45 -0
  53. package/dist/chunks/references-qvvxej7h.js +26 -0
  54. package/dist/chunks/right-panel-eccz92qt.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-kryvsw6j.js → studio-1k325pwf.js} +48 -48
  60. package/dist/chunks/{studio-b55y6ewx.js → studio-1knfqgy7.js} +58 -58
  61. package/dist/chunks/{studio-2b946z26.js → studio-1z1kcjv4.js} +3628 -6095
  62. package/dist/chunks/studio-3773086z.js +111 -0
  63. package/dist/chunks/{studio-4r1pv6zf.js → studio-38emantv.js} +22 -5
  64. package/dist/chunks/{studio-x813zp48.js → studio-3rz5md06.js} +30 -30
  65. package/dist/chunks/{studio-ynxwkrzd.js → studio-4wbb9ct0.js} +1953 -1785
  66. package/dist/chunks/studio-5te5tqng.js +81 -0
  67. package/dist/chunks/studio-5wt9nvhd.js +4763 -0
  68. package/dist/chunks/{studio-p4ngc046.js → studio-6ewqv390.js} +9 -9
  69. package/dist/chunks/{studio-9ab8gqsm.js → studio-6nzaktvy.js} +7 -7
  70. package/dist/chunks/studio-6xa21ej9.js +28 -0
  71. package/dist/chunks/{studio-5ehhackm.js → studio-727xh0e3.js} +19 -19
  72. package/dist/chunks/{studio-gcye7qka.js → studio-7e11jpa9.js} +21 -21
  73. package/dist/chunks/{studio-q7v10cg2.js → studio-7r42c6ca.js} +17 -7
  74. package/dist/chunks/studio-7xnmgv66.js +13615 -0
  75. package/dist/chunks/studio-8scdew0e.js +258 -0
  76. package/dist/chunks/{studio-fbf92ckf.js → studio-93zafjcm.js} +275 -163
  77. package/dist/chunks/{studio-dg7zyt5x.js → studio-98b3z07n.js} +1 -1
  78. package/dist/chunks/studio-a79k90n9.js +1162 -0
  79. package/dist/chunks/studio-aj37eer3.js +422 -0
  80. package/dist/chunks/studio-b0k5tqgp.js +2432 -0
  81. package/dist/chunks/studio-b4s9eykd.js +2811 -0
  82. package/dist/chunks/{studio-f3wqjtk5.js → studio-d0300636.js} +5076 -18
  83. package/dist/chunks/{studio-b9b6t1dg.js → studio-e1f24eff.js} +5664 -5666
  84. package/dist/chunks/studio-e1pgga3k.js +839 -0
  85. package/dist/chunks/{studio-g1wdche0.js → studio-esrxgwh6.js} +80 -80
  86. package/dist/chunks/{studio-q43a5y9h.js → studio-g3jevyjt.js} +16 -16
  87. package/dist/chunks/studio-gb13095a.js +2806 -0
  88. package/dist/chunks/{studio-3n4ndrzh.js → studio-h4nvnjvz.js} +303 -303
  89. package/dist/chunks/{studio-dm19q43r.js → studio-hhvs4sdg.js} +10 -10
  90. package/dist/chunks/{studio-x4qkdat5.js → studio-js8nv53n.js} +1749 -2481
  91. package/dist/chunks/{studio-qjy2z9bv.js → studio-jxp12rnj.js} +32 -137
  92. package/dist/chunks/{studio-trxrabqf.js → studio-k75n7vhp.js} +527 -283
  93. package/dist/chunks/{studio-q9jd1a60.js → studio-kcgff4r0.js} +15 -18
  94. package/dist/chunks/studio-kkqkcp3d.js +17668 -0
  95. package/dist/chunks/studio-mhhyamxf.js +763 -0
  96. package/dist/chunks/{studio-cft9r4r7.js → studio-nq5yf5mp.js} +22 -22
  97. package/dist/chunks/{studio-685s0ytq.js → studio-nqgawfks.js} +572 -572
  98. package/dist/chunks/studio-nzzpvzx9.js +185 -0
  99. package/dist/chunks/{studio-xrapxwwc.js → studio-p1dw8wfw.js} +55 -29
  100. package/dist/chunks/{studio-3bqpr0zh.js → studio-pxbgypmg.js} +299 -110
  101. package/dist/chunks/studio-q0a3yk4n.js +33 -0
  102. package/dist/chunks/{studio-wcy8trfx.js → studio-q3x06vmj.js} +23 -22
  103. package/dist/chunks/{studio-6yw4y3my.js → studio-qhhm6hbt.js} +8 -8
  104. package/dist/chunks/studio-qk4bfsq2.js +362 -0
  105. package/dist/chunks/{studio-msd847zn.js → studio-qk90fgqm.js} +361 -90
  106. package/dist/chunks/{studio-jkftxyvz.js → studio-r6nvacqs.js} +5861 -2154
  107. package/dist/chunks/{studio-53n8bp04.js → studio-r6xmmtfh.js} +1 -1
  108. package/dist/chunks/{studio-tvgyw9xw.js → studio-rnyf3f8e.js} +83 -250
  109. package/dist/chunks/studio-rs76k67r.js +12 -0
  110. package/dist/chunks/studio-sbjyc8bt.js +954 -0
  111. package/dist/chunks/{studio-1wagb550.js → studio-syg2tadj.js} +11 -11
  112. package/dist/chunks/{studio-t5wqwzdh.js → studio-tjjk7jvk.js} +1 -1
  113. package/dist/chunks/studio-tqgryxwg.js +1171 -0
  114. package/dist/chunks/studio-try13h8c.js +8448 -0
  115. package/dist/chunks/studio-vfq8qpjt.js +1219 -0
  116. package/dist/chunks/studio-vhv5tgxm.js +51 -0
  117. package/dist/chunks/{studio-ahn3pdgx.js → studio-vw7mzp6z.js} +52 -38
  118. package/dist/chunks/studio-wqpngpsk.js +174 -0
  119. package/dist/chunks/studio-wqz6dggm.js +1356 -0
  120. package/dist/chunks/{studio-92ab2jqe.js → studio-y9zedyjn.js} +14 -14
  121. package/dist/chunks/studio-yxa81f45.js +12 -0
  122. package/dist/chunks/studio-zdn2g6dt.js +148 -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-t55jdjbx.js +69 -0
  133. package/dist/chunks/{ws-client-6shc5rze.js → ws-client-ny4zc51r.js} +20 -22
  134. package/dist/iframe-entry.js +1873 -673
  135. package/dist/studio.js +52757 -36535
  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 +333 -113
  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 +404 -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 +177 -10
  178. package/src/commands/run-reported.ts +120 -0
  179. package/src/content/entry-commands.ts +16 -23
  180. package/src/content/entry-editor.ts +144 -101
  181. package/src/editor/canvas-slash-bridge.ts +2 -2
  182. package/src/editor/context-menu.ts +49 -200
  183. package/src/editor/convert-to-component.ts +42 -82
  184. package/src/editor/convert-to-repeater.ts +132 -173
  185. package/src/editor/inline-edit.ts +11 -0
  186. package/src/editor/shortcuts.ts +76 -49
  187. package/src/editor/slash-menu.ts +150 -157
  188. package/src/files/components.ts +39 -0
  189. package/src/files/file-ops.ts +117 -11
  190. package/src/files/files.ts +944 -660
  191. package/src/files/json-layout.ts +474 -0
  192. package/src/files/serialize-document.ts +8 -1
  193. package/src/format/convert-file.ts +16 -10
  194. package/src/format/format-host.ts +50 -1
  195. package/src/github/github-auth.ts +71 -29
  196. package/src/github/github-publish.ts +57 -65
  197. package/src/grid/cell-editors.ts +46 -4
  198. package/src/grid/cell-popovers.ts +65 -62
  199. package/src/grid/grid-open.ts +86 -64
  200. package/src/grid/grid-panel.ts +390 -469
  201. package/src/grid/redirects-grid.ts +40 -44
  202. package/src/hosting/layout.ts +2 -0
  203. package/src/i18n/i18n-commands.ts +137 -62
  204. package/src/media/media-pane.ts +83 -133
  205. package/src/new-project/add-repo-modal.ts +125 -176
  206. package/src/new-project/import-tab.ts +181 -252
  207. package/src/new-project/location-fields.ts +93 -160
  208. package/src/new-project/new-project-modal.ts +376 -367
  209. package/src/packages/jxsuite-update.ts +76 -18
  210. package/src/packages/pull-package-sync.ts +5 -1
  211. package/src/panels/activity-panel.ts +137 -104
  212. package/src/panels/ai-chat/chat-markdown.ts +15 -13
  213. package/src/panels/ai-chat/chat-view.ts +307 -472
  214. package/src/panels/ai-chat/composer.ts +175 -163
  215. package/src/panels/ai-chat/sessions-view.ts +31 -62
  216. package/src/panels/ai-panel.ts +213 -185
  217. package/src/panels/block-action-bar.ts +444 -645
  218. package/src/panels/bottom-dock.ts +112 -47
  219. package/src/panels/chat-panel.ts +19 -14
  220. package/src/panels/data-explorer.ts +141 -102
  221. package/src/panels/data-grid.ts +183 -150
  222. package/src/panels/dnd.ts +75 -20
  223. package/src/panels/editors.ts +26 -19
  224. package/src/panels/elements-panel.ts +243 -186
  225. package/src/panels/empty-state.ts +26 -42
  226. package/src/panels/events-panel.ts +950 -729
  227. package/src/panels/formula-workspace.ts +434 -207
  228. package/src/panels/frontmatter-fields.ts +185 -153
  229. package/src/panels/frontmatter-panel.ts +411 -187
  230. package/src/panels/git-diff-open.ts +148 -0
  231. package/src/panels/git-panel.ts +679 -605
  232. package/src/panels/head-panel.ts +617 -435
  233. package/src/panels/i18n-panel.ts +148 -135
  234. package/src/panels/imports-panel.ts +388 -414
  235. package/src/panels/jump-bar.ts +175 -147
  236. package/src/panels/layers-panel.ts +785 -671
  237. package/src/panels/left-panel.ts +166 -94
  238. package/src/panels/navigator-panels.ts +1 -1
  239. package/src/panels/pane-context.ts +529 -677
  240. package/src/panels/pane-grid.ts +265 -241
  241. package/src/panels/panel-registry.ts +15 -4
  242. package/src/panels/problems-panel.ts +181 -99
  243. package/src/panels/properties-panel.ts +1525 -966
  244. package/src/panels/provenance.ts +31 -113
  245. package/src/panels/quick-search.ts +223 -184
  246. package/src/panels/right-panel.ts +135 -169
  247. package/src/panels/seo-modal.ts +346 -167
  248. package/src/panels/settings-menu.ts +114 -661
  249. package/src/panels/settings-pane.ts +102 -86
  250. package/src/panels/signals-panel.ts +1318 -1172
  251. package/src/panels/statement-editor.ts +556 -428
  252. package/src/panels/style-panel.ts +1367 -630
  253. package/src/panels/style-utils.ts +36 -32
  254. package/src/panels/stylebook-doc.ts +30 -73
  255. package/src/panels/stylebook-layers-panel.ts +202 -109
  256. package/src/panels/stylebook-panel.ts +124 -88
  257. package/src/panels/tab-strip.ts +386 -288
  258. package/src/platforms/cloud.ts +106 -16
  259. package/src/platforms/devserver.ts +13 -0
  260. package/src/publish/deploy-checklist.ts +124 -78
  261. package/src/publish/publish-commands.ts +4 -12
  262. package/src/publish/publish-panel.ts +134 -328
  263. package/src/services/a11y-report.ts +100 -43
  264. package/src/services/ai-command-tools.ts +538 -0
  265. package/src/services/ai-project-tools.ts +8 -2
  266. package/src/services/ai-session-store.ts +6 -0
  267. package/src/services/ai-system-prompt.ts +112 -24
  268. package/src/services/ai-tools.ts +36 -212
  269. package/src/services/ai-write-report.ts +174 -0
  270. package/src/services/document-assistant.ts +59 -8
  271. package/src/services/idle.ts +16 -14
  272. package/src/services/live-surfaces.ts +237 -0
  273. package/src/services/model-uri.ts +75 -0
  274. package/src/services/notify.ts +63 -6
  275. package/src/services/popover-report.ts +325 -0
  276. package/src/services/surface-registry.ts +56 -0
  277. package/src/services/tool-executor.ts +6 -0
  278. package/src/settings/contexts-section.ts +301 -299
  279. package/src/settings/contributed-section.ts +361 -222
  280. package/src/settings/css-vars-editor.ts +320 -325
  281. package/src/settings/defs-editor.ts +572 -535
  282. package/src/settings/dependencies-editor.ts +79 -107
  283. package/src/settings/extension-commands.ts +379 -0
  284. package/src/settings/extension-rows.ts +113 -0
  285. package/src/settings/extensions-section.ts +287 -0
  286. package/src/settings/general-settings.ts +130 -181
  287. package/src/settings/head-editor.ts +10 -305
  288. package/src/settings/locales-section.ts +146 -196
  289. package/src/settings/preferences-accounts.ts +1 -1
  290. package/src/settings/preferences-dialog.ts +350 -330
  291. package/src/settings/project-sections.ts +108 -181
  292. package/src/settings/schema-field-ui.ts +11 -399
  293. package/src/settings/section-registry.ts +8 -1
  294. package/src/settings/settings-document.ts +31 -29
  295. package/src/shell/tree.ts +42 -87
  296. package/src/shell.ts +48 -36
  297. package/src/studio.ts +104 -69
  298. package/src/style/token-ref.ts +0 -39
  299. package/src/surfaces/about.json +263 -0
  300. package/src/surfaces/about.ts +163 -0
  301. package/src/surfaces/add-repo.json +486 -0
  302. package/src/surfaces/add-repo.ts +236 -0
  303. package/src/surfaces/ai-chat.json +2185 -0
  304. package/src/surfaces/ai-chat.ts +549 -0
  305. package/src/surfaces/ai-credentials-form.json +332 -0
  306. package/src/surfaces/ai-credentials-form.ts +151 -0
  307. package/src/surfaces/ai-managed-connect.json +108 -0
  308. package/src/surfaces/ai-managed-connect.ts +123 -0
  309. package/src/surfaces/ai-model-picker.json +114 -0
  310. package/src/surfaces/ai-model-picker.ts +139 -0
  311. package/src/surfaces/block-action-bar.json +640 -0
  312. package/src/surfaces/block-action-bar.ts +368 -0
  313. package/src/surfaces/bottom-dock.json +154 -0
  314. package/src/surfaces/bottom-dock.ts +125 -0
  315. package/src/surfaces/canvas-stage.json +444 -0
  316. package/src/surfaces/canvas-stage.ts +253 -0
  317. package/src/surfaces/cf-account-picker.json +300 -0
  318. package/src/surfaces/cf-account-picker.ts +214 -0
  319. package/src/surfaces/commandbar.json +985 -0
  320. package/src/{panels/toolbar.ts → surfaces/commandbar.ts} +417 -391
  321. package/src/surfaces/convert-repeater.json +309 -0
  322. package/src/surfaces/convert-repeater.ts +276 -0
  323. package/src/surfaces/data-actions.json +157 -0
  324. package/src/surfaces/data-actions.ts +115 -0
  325. package/src/surfaces/dialog.json +289 -0
  326. package/src/surfaces/dialog.ts +343 -0
  327. package/src/surfaces/diff-toolbar.json +266 -0
  328. package/src/surfaces/diff-toolbar.ts +139 -0
  329. package/src/surfaces/doc-header.json +739 -0
  330. package/src/surfaces/doc-header.ts +223 -0
  331. package/src/surfaces/empty-state.json +152 -0
  332. package/src/surfaces/empty-state.ts +173 -0
  333. package/src/surfaces/entry-editor.json +281 -0
  334. package/src/surfaces/entry-editor.ts +191 -0
  335. package/src/surfaces/expression-editor.json +977 -0
  336. package/src/surfaces/expression-editor.ts +266 -0
  337. package/src/surfaces/files-panel.json +592 -0
  338. package/src/surfaces/files-panel.ts +301 -0
  339. package/src/surfaces/formula-palette.json +364 -0
  340. package/src/surfaces/formula-palette.ts +340 -0
  341. package/src/surfaces/git-panel.json +1822 -0
  342. package/src/surfaces/git-panel.ts +272 -0
  343. package/src/surfaces/github-auth.json +112 -0
  344. package/src/surfaces/github-auth.ts +139 -0
  345. package/src/surfaces/github-publish.json +206 -0
  346. package/src/surfaces/github-publish.ts +169 -0
  347. package/src/surfaces/grid-cell.json +218 -0
  348. package/src/surfaces/grid-cell.ts +120 -0
  349. package/src/surfaces/grid-open.json +147 -0
  350. package/src/surfaces/grid-open.ts +87 -0
  351. package/src/surfaces/grid-panel.json +706 -0
  352. package/src/surfaces/grid-panel.ts +206 -0
  353. package/src/surfaces/grid-replace.json +179 -0
  354. package/src/surfaces/grid-replace.ts +89 -0
  355. package/src/surfaces/grid-views.json +446 -0
  356. package/src/surfaces/grid-views.ts +172 -0
  357. package/src/surfaces/inspector-dock.json +187 -0
  358. package/src/surfaces/inspector-dock.ts +161 -0
  359. package/src/surfaces/jump-bar.json +243 -0
  360. package/src/surfaces/jump-bar.ts +129 -0
  361. package/src/surfaces/jxsuite-update.json +146 -0
  362. package/src/surfaces/jxsuite-update.ts +149 -0
  363. package/src/surfaces/library-pane.json +1509 -0
  364. package/src/surfaces/library-pane.ts +363 -0
  365. package/src/surfaces/logic-panel.json +1949 -0
  366. package/src/surfaces/logic-panel.ts +369 -0
  367. package/src/surfaces/logic-workspace.json +685 -0
  368. package/src/surfaces/logic-workspace.ts +238 -0
  369. package/src/surfaces/media-browser.json +303 -0
  370. package/src/surfaces/media-browser.ts +145 -0
  371. package/src/surfaces/media-field.json +163 -0
  372. package/src/surfaces/media-field.ts +116 -0
  373. package/src/surfaces/media-pane.json +513 -0
  374. package/src/surfaces/media-pane.ts +197 -0
  375. package/src/surfaces/menu.json +232 -0
  376. package/src/surfaces/menu.ts +375 -0
  377. package/src/surfaces/navigator-dock.json +113 -0
  378. package/src/surfaces/navigator-dock.ts +130 -0
  379. package/src/surfaces/new-project.json +1654 -0
  380. package/src/surfaces/new-project.ts +411 -0
  381. package/src/surfaces/palette.json +535 -0
  382. package/src/surfaces/pane-context.json +1497 -0
  383. package/src/surfaces/pane-context.ts +513 -0
  384. package/src/surfaces/pane-grid.json +188 -0
  385. package/src/surfaces/pane-grid.ts +250 -0
  386. package/src/surfaces/panel-activity.json +563 -0
  387. package/src/surfaces/panel-activity.ts +187 -0
  388. package/src/surfaces/panel-data.json +141 -0
  389. package/src/surfaces/panel-data.ts +156 -0
  390. package/src/surfaces/panel-deploy-checklist.json +283 -0
  391. package/src/surfaces/panel-deploy-checklist.ts +175 -0
  392. package/src/surfaces/panel-elements.json +367 -0
  393. package/src/surfaces/panel-elements.ts +175 -0
  394. package/src/surfaces/panel-i18n.json +569 -0
  395. package/src/surfaces/panel-i18n.ts +212 -0
  396. package/src/surfaces/panel-imports.json +780 -0
  397. package/src/surfaces/panel-imports.ts +209 -0
  398. package/src/surfaces/panel-outline.json +734 -0
  399. package/src/surfaces/panel-outline.ts +326 -0
  400. package/src/surfaces/panel-page.json +1017 -0
  401. package/src/surfaces/panel-page.ts +240 -0
  402. package/src/surfaces/panel-problems.json +497 -0
  403. package/src/surfaces/panel-problems.ts +157 -0
  404. package/src/surfaces/panel-signals.json +1973 -0
  405. package/src/surfaces/panel-signals.ts +436 -0
  406. package/src/surfaces/panel-stylebook-layers.json +317 -0
  407. package/src/surfaces/panel-stylebook-layers.ts +155 -0
  408. package/src/surfaces/preferences.json +850 -0
  409. package/src/surfaces/preferences.ts +332 -0
  410. package/src/surfaces/progress-modal.json +110 -0
  411. package/src/surfaces/progress-modal.ts +150 -0
  412. package/src/surfaces/properties-panel.json +1578 -0
  413. package/src/surfaces/properties-panel.ts +337 -0
  414. package/src/surfaces/publish.json +945 -0
  415. package/src/surfaces/publish.ts +392 -0
  416. package/src/surfaces/push-plan.json +110 -0
  417. package/src/surfaces/push-plan.ts +87 -0
  418. package/src/surfaces/rail.json +255 -0
  419. package/src/surfaces/rail.ts +206 -0
  420. package/src/surfaces/reference-field.json +191 -0
  421. package/src/surfaces/reference-field.ts +168 -0
  422. package/src/surfaces/schema-builder.json +1011 -0
  423. package/src/surfaces/schema-builder.ts +181 -0
  424. package/src/surfaces/schema-form.json +1013 -0
  425. package/src/surfaces/schema-form.ts +287 -0
  426. package/src/surfaces/secret-field.json +60 -0
  427. package/src/surfaces/secret-field.ts +146 -0
  428. package/src/surfaces/seo.json +932 -0
  429. package/src/surfaces/seo.ts +334 -0
  430. package/src/surfaces/settings-contexts.json +538 -0
  431. package/src/surfaces/settings-contexts.ts +196 -0
  432. package/src/surfaces/settings-contributed.json +489 -0
  433. package/src/surfaces/settings-contributed.ts +199 -0
  434. package/src/surfaces/settings-css-vars.json +820 -0
  435. package/src/surfaces/settings-css-vars.ts +199 -0
  436. package/src/surfaces/settings-defs.json +1363 -0
  437. package/src/surfaces/settings-defs.ts +232 -0
  438. package/src/surfaces/settings-deploy.json +108 -0
  439. package/src/surfaces/settings-deploy.ts +135 -0
  440. package/src/surfaces/settings-extensions.json +486 -0
  441. package/src/surfaces/settings-extensions.ts +201 -0
  442. package/src/surfaces/settings-head.json +779 -0
  443. package/src/surfaces/settings-head.ts +397 -0
  444. package/src/surfaces/settings-locales.json +420 -0
  445. package/src/surfaces/settings-locales.ts +137 -0
  446. package/src/surfaces/settings-overview.json +423 -0
  447. package/src/surfaces/settings-overview.ts +218 -0
  448. package/src/surfaces/settings-packages.json +549 -0
  449. package/src/surfaces/settings-packages.ts +158 -0
  450. package/src/surfaces/settings-pane.json +147 -0
  451. package/src/surfaces/settings-pane.ts +150 -0
  452. package/src/surfaces/settings-rawjson.json +104 -0
  453. package/src/surfaces/settings-rawjson.ts +107 -0
  454. package/src/surfaces/shell.json +99 -0
  455. package/src/surfaces/shell.ts +30 -0
  456. package/src/surfaces/slash-menu.json +180 -0
  457. package/src/surfaces/slash-menu.ts +272 -0
  458. package/src/surfaces/statements.json +607 -0
  459. package/src/surfaces/statements.ts +238 -0
  460. package/src/surfaces/statusbar.json +94 -0
  461. package/src/{panels → surfaces}/statusbar.ts +164 -90
  462. package/src/surfaces/style-panel.json +1643 -0
  463. package/src/surfaces/style-panel.ts +338 -0
  464. package/src/surfaces/stylebook-chrome.json +122 -0
  465. package/src/surfaces/stylebook-chrome.ts +122 -0
  466. package/src/surfaces/tab-strip.json +448 -0
  467. package/src/surfaces/tab-strip.ts +200 -0
  468. package/src/surfaces/target-line.json +419 -0
  469. package/src/surfaces/target-line.ts +349 -0
  470. package/src/surfaces/toasts.json +189 -0
  471. package/src/surfaces/welcome.json +571 -0
  472. package/src/surfaces/welcome.ts +338 -0
  473. package/src/tabs/project-config.ts +111 -21
  474. package/src/tabs/tab.ts +52 -1
  475. package/src/types.ts +22 -0
  476. package/src/ui/ai-credentials-form.ts +104 -100
  477. package/src/ui/ai-managed-connect.ts +54 -36
  478. package/src/ui/ai-model-picker.ts +75 -47
  479. package/src/ui/cf-account-picker.ts +76 -141
  480. package/src/ui/color-selector.ts +80 -301
  481. package/src/ui/dynamic-slot.ts +43 -283
  482. package/src/ui/expression-editor.ts +797 -576
  483. package/src/ui/field-input.ts +8 -181
  484. package/src/ui/form-controls.ts +838 -366
  485. package/src/ui/formula-chips.ts +80 -85
  486. package/src/ui/kit.ts +33 -0
  487. package/src/ui/layers.ts +296 -593
  488. package/src/ui/media-picker.ts +203 -284
  489. package/src/ui/panel-resize.ts +251 -64
  490. package/src/ui/popover-surface.ts +153 -0
  491. package/src/ui/progress-modal.ts +22 -60
  492. package/src/ui/regions.ts +13 -7
  493. package/src/ui/schema-form.ts +906 -440
  494. package/src/ui/surface.ts +122 -0
  495. package/src/ui/unit-selector.ts +15 -131
  496. package/src/ui/value-source.ts +14 -0
  497. package/src/ui/virtual-window.ts +88 -9
  498. package/src/utils/canvas-media.ts +72 -0
  499. package/src/utils/edit-display.ts +7 -2
  500. package/src/utils/element-selectors.ts +69 -0
  501. package/src/utils/link-target.ts +2 -2
  502. package/src/utils/studio-utils.ts +0 -10
  503. package/src/view.ts +15 -0
  504. package/src/workspace/pane-derive.ts +36 -14
  505. package/src/workspace/workspace.ts +75 -6
  506. package/styles/canvas.css +72 -467
  507. package/styles/forced-colors.css +48 -82
  508. package/styles/forced-colors.json +41 -0
  509. package/styles/inspector.css +2 -1301
  510. package/styles/overlays.css +96 -2823
  511. package/styles/panels.css +6 -1423
  512. package/styles/shell-frame.css +272 -0
  513. package/styles/shell-frame.json +227 -0
  514. package/styles/shell.css +0 -1568
  515. package/styles/tokens.css +65 -136
  516. package/styles/tokens.json +84 -0
  517. package/dist/chunks/Overlay.dev-etqjwyf9.js +0 -23
  518. package/dist/chunks/adapter-jkcyhgtr.js +0 -14
  519. package/dist/chunks/cf-account-picker-en86v7x7.js +0 -163
  520. package/dist/chunks/cf-settings-45fgyx8y.js +0 -21
  521. package/dist/chunks/components-zmx10t62.js +0 -21
  522. package/dist/chunks/content-source-48xg86wj.js +0 -49
  523. package/dist/chunks/convert-to-repeater-43tfn7cs.js +0 -268
  524. package/dist/chunks/editor-cptq5jp1.js +0 -37
  525. package/dist/chunks/entry-commands-e63f1xc0.js +0 -46
  526. package/dist/chunks/extension-sections-txv08xxg.js +0 -311
  527. package/dist/chunks/file-ops-wbh4hhsx.js +0 -48
  528. package/dist/chunks/files-3kfkwhk4.js +0 -93
  529. package/dist/chunks/flow-qbfgrpeh.js +0 -634
  530. package/dist/chunks/focus-trap.esm-9t2drp0g.js +0 -1025
  531. package/dist/chunks/focus-visible-6eg70z18.js +0 -167
  532. package/dist/chunks/format-host-w16q81tf.js +0 -43
  533. package/dist/chunks/fs-events-hrrg328g.js +0 -21
  534. package/dist/chunks/git-panel-532whr1y.js +0 -59
  535. package/dist/chunks/index-zqxmqxmh.js +0 -109
  536. package/dist/chunks/jx-validate-8er6gbxy.js +0 -19
  537. package/dist/chunks/layers-panel-07hm7g5j.js +0 -67
  538. package/dist/chunks/layers-q75tj2mf.js +0 -45
  539. package/dist/chunks/lit-html-j055mkh8.js +0 -22
  540. package/dist/chunks/monaco-buffer-dqw0xxpx.js +0 -25
  541. package/dist/chunks/notify-yjm79n4s.js +0 -30
  542. package/dist/chunks/parse-24d0gay3.js +0 -19
  543. package/dist/chunks/platform-ba1j1gbh.js +0 -16
  544. package/dist/chunks/publish-panel-v9st96ja.js +0 -29
  545. package/dist/chunks/quick-search-zccjp6gv.js +0 -66
  546. package/dist/chunks/references-3qx8fkyp.js +0 -29
  547. package/dist/chunks/right-panel-vm3b6kwy.js +0 -46
  548. package/dist/chunks/section-registry-sx1ykvkw.js +0 -30
  549. package/dist/chunks/sp-overlay.dev-qgvhnxf4.js +0 -18
  550. package/dist/chunks/sp-popover.dev-n2etmqdp.js +0 -9
  551. package/dist/chunks/sp-progress-circle.dev-hryhj0es.js +0 -15
  552. package/dist/chunks/sp-tooltip.dev-4sastdnw.js +0 -15
  553. package/dist/chunks/sp-tray.dev-tkbscm06.js +0 -199
  554. package/dist/chunks/studio-0a5qrh01.js +0 -3
  555. package/dist/chunks/studio-0bq6eh7v.js +0 -12
  556. package/dist/chunks/studio-18j3bmcz.js +0 -14
  557. package/dist/chunks/studio-1ngbejft.js +0 -181
  558. package/dist/chunks/studio-4b5z1x43.js +0 -424
  559. package/dist/chunks/studio-4n2b5gzb.js +0 -357
  560. package/dist/chunks/studio-4rzyrtjz.js +0 -426
  561. package/dist/chunks/studio-5fx3g9jg.js +0 -4325
  562. package/dist/chunks/studio-5myknm0a.js +0 -1903
  563. package/dist/chunks/studio-7afd21nw.js +0 -67
  564. package/dist/chunks/studio-7nte2hj4.js +0 -613
  565. package/dist/chunks/studio-8jpzqk5s.js +0 -128
  566. package/dist/chunks/studio-8q517dfr.js +0 -24
  567. package/dist/chunks/studio-950k0dx6.js +0 -6939
  568. package/dist/chunks/studio-9n4mrmnb.js +0 -184
  569. package/dist/chunks/studio-a0tswy0w.js +0 -58
  570. package/dist/chunks/studio-ahnzd9rg.js +0 -23
  571. package/dist/chunks/studio-bgxt93ga.js +0 -62
  572. package/dist/chunks/studio-cmb03bg5.js +0 -13890
  573. package/dist/chunks/studio-d1ks410h.js +0 -175
  574. package/dist/chunks/studio-ef49pnzx.js +0 -387
  575. package/dist/chunks/studio-eqq1w638.js +0 -113
  576. package/dist/chunks/studio-ew0djmhg.js +0 -341
  577. package/dist/chunks/studio-gfgb8pe6.js +0 -1652
  578. package/dist/chunks/studio-h4rxscfc.js +0 -10
  579. package/dist/chunks/studio-jc994dnr.js +0 -1066
  580. package/dist/chunks/studio-kyh9avvv.js +0 -28
  581. package/dist/chunks/studio-m3hwn7y1.js +0 -120
  582. package/dist/chunks/studio-mtfnaqs9.js +0 -659
  583. package/dist/chunks/studio-n6j9t10q.js +0 -318
  584. package/dist/chunks/studio-n8b9wqwy.js +0 -291
  585. package/dist/chunks/studio-qcy05dp8.js +0 -1743
  586. package/dist/chunks/studio-qq6jym04.js +0 -53
  587. package/dist/chunks/studio-rdx8jcxy.js +0 -83
  588. package/dist/chunks/studio-rn9ta2mz.js +0 -111
  589. package/dist/chunks/studio-t7qb9db8.js +0 -665
  590. package/dist/chunks/studio-tmc5emrw.js +0 -8
  591. package/dist/chunks/studio-z6nw2ek2.js +0 -18
  592. package/dist/chunks/studio-zczps70q.js +0 -378
  593. package/dist/chunks/studio-zqazsct2.js +0 -1823
  594. package/dist/chunks/workspace-fjx52ryv.js +0 -89
  595. package/src/panels/activity-bar.ts +0 -251
  596. package/src/panels/panel-scheduler.ts +0 -219
  597. package/src/panels/style-inputs.ts +0 -237
  598. package/src/panels/target-line.ts +0 -274
  599. package/src/panels/welcome-screen.ts +0 -346
  600. package/src/ui/button-group.ts +0 -102
  601. package/src/ui/choice-field.ts +0 -72
  602. package/src/ui/field-row.ts +0 -249
  603. package/src/ui/formula-palette.ts +0 -213
  604. package/src/ui/icons.ts +0 -52
  605. package/src/ui/jx-theme.ts +0 -130
  606. package/src/ui/spectrum.ts +0 -340
  607. package/src/ui/value-selector.ts +0 -174
  608. package/src/ui/widgets.ts +0 -172
  609. /package/dist/chunks/{javascript-s56a8dpk.css → javascript-4abzjcy9.css} +0 -0
  610. /package/dist/chunks/{jsonMode-zr9sw0c7.css → jsonMode-vvmpmk34.css} +0 -0
  611. /package/dist/chunks/{monaco-setup-pav68602.css → monaco-setup-8vbyqnhr.css} +0 -0
  612. /package/dist/chunks/{tsMode-ef187txx.css → tsMode-hnxxb73h.css} +0 -0
@@ -0,0 +1,1219 @@
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-kkqkcp3d.js";
14
+ import {
15
+ effectScope,
16
+ effect,
17
+ reactive,
18
+ toasts2,
19
+ notify2,
20
+ dismiss2
21
+ } from "./studio-p1dw8wfw.js";
22
+ import {
23
+ errorMessage2
24
+ } from "./studio-yxa81f45.js";
25
+
26
+ // src/ui/regions.ts
27
+ var REGION_ATTR = "data-jx-region";
28
+ var REGION_SURFACES = [
29
+ "rail",
30
+ "navigator",
31
+ "inspector",
32
+ "pane",
33
+ "dock.bottom",
34
+ "statusbar",
35
+ "commandbar",
36
+ "overlay"
37
+ ];
38
+ var DOTTED_SURFACES = new Set(["dock.bottom"]);
39
+ function parseRegionId(id) {
40
+ const slash = id.indexOf("/");
41
+ const head = slash === -1 ? id : id.slice(0, slash);
42
+ const part = slash === -1 ? undefined : id.slice(slash + 1);
43
+ if (part === "" || head === "") {
44
+ return null;
45
+ }
46
+ let surface = head;
47
+ let instance;
48
+ if (!DOTTED_SURFACES.has(head)) {
49
+ const dot = head.indexOf(".");
50
+ if (dot !== -1) {
51
+ surface = head.slice(0, dot);
52
+ instance = head.slice(dot + 1);
53
+ if (instance === "") {
54
+ return null;
55
+ }
56
+ }
57
+ }
58
+ if (!REGION_SURFACES.includes(surface)) {
59
+ return null;
60
+ }
61
+ return instance === undefined ? part === undefined ? { surface } : { part, surface } : part === undefined ? { instance, surface } : { instance, part, surface };
62
+ }
63
+ function isRegionId(id) {
64
+ return parseRegionId(id) !== null;
65
+ }
66
+ function canonicalRegionId(id) {
67
+ if (id === "pane") {
68
+ return "pane.primary";
69
+ }
70
+ return id.startsWith("pane/") ? `pane.primary/${id.slice(5)}` : id;
71
+ }
72
+ function regionRoot(root) {
73
+ return root ?? document;
74
+ }
75
+ var DERIVED_RESOLVERS = [
76
+ {
77
+ locate: ([, prop], root) => {
78
+ const row = resolveRegion(`inspector/field:${prop}`, root);
79
+ const browse = row?.querySelector('[part="browse"]');
80
+ return browse ? [browse] : [];
81
+ },
82
+ pattern: /^inspector\/field:(.+)\/browse$/
83
+ },
84
+ {
85
+ locate: ([, prop], root) => {
86
+ const inspector = resolveRegion("inspector", root);
87
+ return inspector ? [...inspector.querySelectorAll(`[data-prop="${CSS.escape(prop)}"]`)] : [];
88
+ },
89
+ pattern: /^inspector\/field:(.+)$/
90
+ }
91
+ ];
92
+ function resolveAllRegions(id, root) {
93
+ const canonical = canonicalRegionId(id);
94
+ if (!isRegionId(canonical)) {
95
+ return [];
96
+ }
97
+ const stamped = [
98
+ ...regionRoot(root).querySelectorAll(`[${REGION_ATTR}="${CSS.escape(canonical)}"]`)
99
+ ];
100
+ if (stamped.length > 0) {
101
+ return stamped;
102
+ }
103
+ for (const resolver of DERIVED_RESOLVERS) {
104
+ const match = canonical.match(resolver.pattern);
105
+ if (match) {
106
+ return resolver.locate(match, regionRoot(root));
107
+ }
108
+ }
109
+ return [];
110
+ }
111
+ function resolveRegion(id, root) {
112
+ const all = resolveAllRegions(id, root);
113
+ return all.at(-1) ?? null;
114
+ }
115
+ var REGION_FOR_FOCUS = {
116
+ dock: "dock.bottom",
117
+ inspector: "inspector",
118
+ navigator: "navigator",
119
+ pane: "pane.primary",
120
+ rail: "rail",
121
+ status: "statusbar"
122
+ };
123
+ function paneRegion(paneId, part) {
124
+ return part ? `pane.${paneId}/${part}` : `pane.${paneId}`;
125
+ }
126
+ function paneStripRegion(paneId) {
127
+ return paneRegion(paneId, "tabs");
128
+ }
129
+ function navigatorPanelRegion(panelId) {
130
+ return `navigator/panel:${panelId}`;
131
+ }
132
+ function inspectorTabRegion(tabId) {
133
+ return `inspector/tab:${tabId}`;
134
+ }
135
+ var NAVIGATOR_STATEMENTS_REGION = "navigator/statements";
136
+ function inspectorStatementsRegion(eventKey) {
137
+ return `inspector/statements:${eventKey}`;
138
+ }
139
+ function bottomPanelRegion(panelId) {
140
+ return `dock.bottom/panel:${panelId}`;
141
+ }
142
+ var OVERLAY_INSTANCE = {
143
+ dialog: "dialog",
144
+ modal: "dialog",
145
+ popover: "menu",
146
+ toast: "toasts"
147
+ };
148
+ function overlayRegion(layer, id) {
149
+ const instance = OVERLAY_INSTANCE[layer];
150
+ return id ? `overlay.${instance}:${id}` : `overlay.${instance}`;
151
+ }
152
+
153
+ // src/services/surface-registry.ts
154
+ var mounts = new Map;
155
+ var nextId = 1;
156
+ function registerMount(entry) {
157
+ const id = nextId;
158
+ nextId += 1;
159
+ mounts.set(id, { ...entry, id });
160
+ return id;
161
+ }
162
+ function unregisterMount(id) {
163
+ mounts.delete(id);
164
+ }
165
+ function surfaceMounts() {
166
+ return [...mounts.values()];
167
+ }
168
+ function mountsUsing(tag) {
169
+ const lower = tag.toLowerCase();
170
+ return surfaceMounts().filter((m) => m.elements.has(lower));
171
+ }
172
+ function mountsOf(name) {
173
+ return surfaceMounts().filter((m) => m.name === name);
174
+ }
175
+
176
+ // src/ui/kit.ts
177
+ var ready = null;
178
+ function registerKit(doc = document) {
179
+ ready ??= registerUi({ document: doc });
180
+ return ready;
181
+ }
182
+ function kitReady() {
183
+ return ready ?? registerKit();
184
+ }
185
+
186
+ // src/ui/surface.ts
187
+ var SURFACES_BASE = "jx-studio:/surfaces/";
188
+ var surfaces = new Map;
189
+ function registerSurface(name, doc) {
190
+ surfaces.set(name, doc);
191
+ preloadDocument(surfaceUrl(name), doc);
192
+ }
193
+ function surfaceUrl(name) {
194
+ return `${SURFACES_BASE}${name}.json`;
195
+ }
196
+ function surfaceDocument(name) {
197
+ return surfaces.get(name);
198
+ }
199
+ function surfaceResolver(url) {
200
+ if (!url.startsWith(SURFACES_BASE) || !url.endsWith(".json")) {
201
+ return;
202
+ }
203
+ return surfaces.get(url.slice(SURFACES_BASE.length, -".json".length));
204
+ }
205
+ async function mountSurface(name, hostScope, host, options = {}) {
206
+ const doc = surfaces.get(name);
207
+ if (!doc) {
208
+ throw new Error(`Studio surface "${name}" is not registered`);
209
+ }
210
+ await kitReady();
211
+ if (options.region) {
212
+ host.setAttribute(REGION_ATTR, options.region);
213
+ }
214
+ const handle = await mount3(doc, host, {
215
+ scope: hostScope,
216
+ base: SURFACES_BASE,
217
+ resolver: surfaceResolver,
218
+ ...options.onNodeCreated ? { onNodeCreated: options.onNodeCreated } : {},
219
+ ...options.onNodeMoved ? { onNodeMoved: options.onNodeMoved } : {},
220
+ ...options.signal ? { signal: options.signal } : {}
221
+ });
222
+ const surfaceHandle = (dispose) => ({
223
+ dispose,
224
+ elements: handle.elements,
225
+ root: handle.root,
226
+ scope: handle.scope
227
+ });
228
+ if (options.signal?.aborted) {
229
+ return surfaceHandle(handle.dispose);
230
+ }
231
+ let id = 0;
232
+ const dispose = () => {
233
+ handle.dispose();
234
+ unregisterMount(id);
235
+ };
236
+ id = registerMount({
237
+ elements: handle.elements,
238
+ host,
239
+ name,
240
+ remount: async () => {
241
+ dispose();
242
+ await mountSurface(name, hostScope, host, options);
243
+ }
244
+ });
245
+ options.signal?.addEventListener("abort", () => unregisterMount(id), { once: true });
246
+ return surfaceHandle(dispose);
247
+ }
248
+ // src/surfaces/dialog.json
249
+ var dialog_default = {
250
+ $schema: "https://jxsuite.com/schema/v1",
251
+ $id: "StudioDialog",
252
+ $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.",
253
+ tagName: "jx-dialog",
254
+ $props: {
255
+ headline: {
256
+ $ref: "#/state/headline"
257
+ },
258
+ confirmLabel: {
259
+ $ref: "#/state/confirmLabel"
260
+ },
261
+ secondaryLabel: {
262
+ $ref: "#/state/secondaryLabel"
263
+ },
264
+ cancelLabel: {
265
+ $ref: "#/state/cancelLabel"
266
+ },
267
+ destructive: {
268
+ $ref: "#/state/destructive"
269
+ },
270
+ size: {
271
+ $ref: "#/state/size"
272
+ }
273
+ },
274
+ attributes: {
275
+ headline: "${state.headline}",
276
+ "confirm-label": "${state.confirmLabel || null}",
277
+ "secondary-label": "${state.secondaryLabel || null}",
278
+ "cancel-label": "${state.cancelLabel || null}",
279
+ part: "dialog-host"
280
+ },
281
+ onconfirm: {
282
+ $prototype: "Function",
283
+ body: [
284
+ {
285
+ operator: "call",
286
+ target: {
287
+ $ref: "#/state/confirm"
288
+ },
289
+ value: []
290
+ }
291
+ ]
292
+ },
293
+ onsecondary: {
294
+ $prototype: "Function",
295
+ body: [
296
+ {
297
+ operator: "call",
298
+ target: {
299
+ $ref: "#/state/secondary"
300
+ },
301
+ value: []
302
+ }
303
+ ]
304
+ },
305
+ oncancel: {
306
+ $prototype: "Function",
307
+ body: [
308
+ {
309
+ operator: "call",
310
+ target: {
311
+ $ref: "#/state/cancel"
312
+ },
313
+ value: []
314
+ }
315
+ ]
316
+ },
317
+ onclose: {
318
+ $prototype: "Function",
319
+ body: [
320
+ {
321
+ operator: "call",
322
+ target: {
323
+ $ref: "#/state/closed"
324
+ },
325
+ value: []
326
+ }
327
+ ]
328
+ },
329
+ style: {
330
+ '& [part="message"]': {
331
+ margin: "0 0 var(--jx-space-3)"
332
+ },
333
+ '& [part="message"]:last-child': {
334
+ margin: "0"
335
+ },
336
+ '& [part="island"]:empty': {
337
+ display: "none"
338
+ },
339
+ '& [part="message-slot"], & [part="choice-slot"], & [part="field-slot"]': {
340
+ display: "contents"
341
+ },
342
+ '& [part="choice-row"]': {
343
+ display: "flex",
344
+ flexDirection: "column",
345
+ gap: "var(--jx-space-1)",
346
+ margin: "0 0 var(--jx-space-3)"
347
+ },
348
+ '& [part="choice-label"]': {
349
+ fontSize: "var(--jx-text-sm)",
350
+ color: "var(--jx-fg-dim)"
351
+ },
352
+ "& jx-textfield": {
353
+ width: "100%"
354
+ }
355
+ },
356
+ children: [
357
+ {
358
+ tagName: "div",
359
+ attributes: {
360
+ part: "message-slot",
361
+ role: "none"
362
+ },
363
+ $switch: {
364
+ $ref: "#/state/hasMessage"
365
+ },
366
+ cases: {
367
+ true: {
368
+ tagName: "p",
369
+ attributes: {
370
+ part: "message"
371
+ },
372
+ textContent: "${state.message}"
373
+ }
374
+ }
375
+ },
376
+ {
377
+ tagName: "div",
378
+ attributes: {
379
+ part: "island"
380
+ }
381
+ },
382
+ {
383
+ tagName: "div",
384
+ attributes: {
385
+ part: "choice-slot",
386
+ role: "none"
387
+ },
388
+ $switch: {
389
+ $ref: "#/state/hasChoice"
390
+ },
391
+ cases: {
392
+ true: {
393
+ tagName: "div",
394
+ attributes: {
395
+ part: "choice-row"
396
+ },
397
+ children: [
398
+ {
399
+ tagName: "span",
400
+ attributes: {
401
+ part: "choice-label"
402
+ },
403
+ textContent: "${state.choiceLabel}"
404
+ },
405
+ {
406
+ tagName: "jx-select",
407
+ $props: {
408
+ label: {
409
+ $ref: "#/state/choiceLabel"
410
+ },
411
+ options: {
412
+ $ref: "#/state/options"
413
+ },
414
+ value: {
415
+ $ref: "#/state/chosen"
416
+ }
417
+ },
418
+ attributes: {
419
+ part: "choice"
420
+ },
421
+ onchange: {
422
+ $prototype: "Function",
423
+ body: [
424
+ {
425
+ operator: "call",
426
+ target: {
427
+ $ref: "#/state/pick"
428
+ },
429
+ value: [
430
+ {
431
+ $ref: "event#/target/value"
432
+ }
433
+ ]
434
+ }
435
+ ]
436
+ }
437
+ }
438
+ ]
439
+ }
440
+ }
441
+ },
442
+ {
443
+ tagName: "div",
444
+ attributes: {
445
+ part: "field-slot",
446
+ role: "none"
447
+ },
448
+ $switch: {
449
+ $ref: "#/state/hasField"
450
+ },
451
+ cases: {
452
+ true: {
453
+ tagName: "jx-textfield",
454
+ $props: {
455
+ label: {
456
+ $ref: "#/state/headline"
457
+ },
458
+ value: {
459
+ $ref: "#/state/value"
460
+ },
461
+ placeholder: {
462
+ $ref: "#/state/placeholder"
463
+ },
464
+ invalid: {
465
+ $ref: "#/state/invalid"
466
+ },
467
+ error: {
468
+ $ref: "#/state/error"
469
+ },
470
+ multiline: {
471
+ $ref: "#/state/multiline"
472
+ },
473
+ rows: {
474
+ $ref: "#/state/rows"
475
+ },
476
+ mono: {
477
+ $ref: "#/state/mono"
478
+ }
479
+ },
480
+ attributes: {
481
+ part: "field"
482
+ },
483
+ oninput: {
484
+ $prototype: "Function",
485
+ body: [
486
+ {
487
+ operator: "call",
488
+ target: {
489
+ $ref: "#/state/input"
490
+ },
491
+ value: [
492
+ {
493
+ $ref: "event#/target/value"
494
+ }
495
+ ]
496
+ }
497
+ ]
498
+ },
499
+ onkeydown: {
500
+ $prototype: "Function",
501
+ body: [
502
+ {
503
+ $switch: {
504
+ $ref: "#/state/singleLine"
505
+ },
506
+ cases: {
507
+ true: [
508
+ {
509
+ $switch: {
510
+ $ref: "event#/key"
511
+ },
512
+ cases: {
513
+ Enter: [
514
+ {
515
+ preventDefault: true
516
+ },
517
+ {
518
+ operator: "call",
519
+ target: {
520
+ $ref: "#/state/confirm"
521
+ },
522
+ value: []
523
+ }
524
+ ]
525
+ }
526
+ }
527
+ ]
528
+ }
529
+ }
530
+ ]
531
+ },
532
+ $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."
533
+ }
534
+ }
535
+ }
536
+ ]
537
+ };
538
+
539
+ // src/surfaces/dialog.ts
540
+ registerSurface("dialog", dialog_default);
541
+ function whenReady(element) {
542
+ if (element.querySelector('[part="dialog"]')) {
543
+ return Promise.resolve(element);
544
+ }
545
+ return new Promise((resolve) => {
546
+ element.addEventListener("jx-ready", function ready(event) {
547
+ if (event.target !== element && !element.querySelector('[part="dialog"]')) {
548
+ return;
549
+ }
550
+ element.removeEventListener("jx-ready", ready);
551
+ resolve(element);
552
+ });
553
+ });
554
+ }
555
+ function openDialogSurface(options) {
556
+ const slot = document.createElement("div");
557
+ slot.style.pointerEvents = "auto";
558
+ slot.setAttribute(REGION_ATTR, overlayRegion("dialog", options.region));
559
+ options.layer.append(slot);
560
+ const scope = reactive({
561
+ cancel: () => {
562
+ options.onCancel();
563
+ },
564
+ cancelLabel: options.cancelLabel,
565
+ choiceLabel: options.choice?.label ?? "",
566
+ chosen: options.choice?.chosen ?? "",
567
+ closed: () => {
568
+ options.onClosed();
569
+ },
570
+ confirm: () => {
571
+ options.onConfirm();
572
+ },
573
+ confirmLabel: options.confirmLabel,
574
+ destructive: options.destructive === true,
575
+ error: "",
576
+ hasChoice: options.choice !== undefined,
577
+ hasField: options.field !== undefined,
578
+ mono: options.field?.mono === true,
579
+ multiline: options.field?.multiline === true,
580
+ rows: options.field?.rows ?? "3",
581
+ singleLine: options.field !== undefined && options.field.multiline !== true ? "true" : "false",
582
+ hasMessage: options.message !== undefined && options.message !== "",
583
+ headline: options.headline,
584
+ input: (value) => {
585
+ scope.value = value;
586
+ options.onInput?.(value);
587
+ },
588
+ invalid: false,
589
+ message: options.message ?? "",
590
+ options: options.choice?.options ?? [],
591
+ pick: (value) => {
592
+ options.onPick?.(value);
593
+ },
594
+ placeholder: options.field?.placeholder ?? "",
595
+ secondary: () => {
596
+ options.onSecondary?.();
597
+ },
598
+ secondaryLabel: options.secondaryLabel ?? "",
599
+ size: options.size ?? "sm",
600
+ value: options.field?.value ?? ""
601
+ });
602
+ let handle = null;
603
+ let closed = false;
604
+ let abort = () => {};
605
+ const aborted = new Promise((resolve) => {
606
+ abort = resolve;
607
+ });
608
+ const mounted = mountSurface("dialog", scope, slot);
609
+ const ready = mounted.then(async (surface) => {
610
+ const element = surface.root;
611
+ if (closed) {
612
+ surface.dispose();
613
+ return element;
614
+ }
615
+ handle = surface;
616
+ await Promise.race([whenReady(element), aborted]);
617
+ if (closed) {
618
+ return element;
619
+ }
620
+ options.island?.(element.querySelector('[part="island"]') ?? element);
621
+ showModal(element);
622
+ if (options.field) {
623
+ const field = element.querySelector("jx-textfield");
624
+ if (field) {
625
+ setTimeout(() => {
626
+ if (!closed) {
627
+ selectValue(field, options.field?.select ?? "all");
628
+ }
629
+ }, 0);
630
+ }
631
+ }
632
+ return element;
633
+ });
634
+ return {
635
+ close() {
636
+ if (closed) {
637
+ return;
638
+ }
639
+ closed = true;
640
+ abort();
641
+ const element = handle?.root;
642
+ if (element instanceof HTMLElement) {
643
+ close2(element);
644
+ }
645
+ handle?.dispose();
646
+ handle = null;
647
+ slot.remove();
648
+ },
649
+ host: slot,
650
+ ready,
651
+ update(patch) {
652
+ if (patch.confirmLabel !== undefined) {
653
+ scope.confirmLabel = patch.confirmLabel;
654
+ }
655
+ if (patch.cancelLabel !== undefined) {
656
+ scope.cancelLabel = patch.cancelLabel;
657
+ }
658
+ if (patch.message !== undefined) {
659
+ scope.message = patch.message;
660
+ scope.hasMessage = patch.message !== "";
661
+ }
662
+ if (patch.value !== undefined) {
663
+ scope.value = patch.value;
664
+ }
665
+ if (patch.placeholder !== undefined) {
666
+ scope.placeholder = patch.placeholder;
667
+ }
668
+ if (patch.invalid !== undefined) {
669
+ scope.invalid = patch.invalid;
670
+ }
671
+ if (patch.error !== undefined) {
672
+ if (patch.error !== "" && patch.error === scope.error) {
673
+ scope.error = "";
674
+ const repeated = patch.error;
675
+ queueMicrotask(() => {
676
+ scope.error = repeated;
677
+ });
678
+ } else {
679
+ scope.error = patch.error;
680
+ }
681
+ }
682
+ if (patch.options !== undefined) {
683
+ scope.options = patch.options;
684
+ }
685
+ if (patch.chosen !== undefined) {
686
+ scope.chosen = patch.chosen;
687
+ }
688
+ }
689
+ };
690
+ }
691
+ // src/surfaces/toasts.json
692
+ var toasts_default = {
693
+ $schema: "https://jxsuite.com/schema/v1",
694
+ $id: "StudioToasts",
695
+ $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.",
696
+ tagName: "div",
697
+ attributes: {
698
+ part: "stack"
699
+ },
700
+ style: {
701
+ position: "absolute",
702
+ right: "var(--jx-space-4)",
703
+ bottom: "36px",
704
+ display: "flex",
705
+ flexDirection: "column",
706
+ gap: "var(--jx-space-3)",
707
+ alignItems: "flex-end",
708
+ maxWidth: "min(420px, calc(100vw - 24px))",
709
+ '& [part="toast"]': {
710
+ display: "flex",
711
+ alignItems: "center",
712
+ gap: "var(--jx-space-3)",
713
+ pointerEvents: "auto",
714
+ padding: "var(--jx-space-3)",
715
+ border: "1px solid var(--jx-border)",
716
+ borderLeft: "3px solid var(--jx-fg-dim)",
717
+ borderRadius: "var(--jx-radius-md)",
718
+ background: "var(--jx-bg-panel)",
719
+ color: "var(--jx-fg)",
720
+ fontSize: "var(--jx-text-sm)",
721
+ lineHeight: "var(--jx-leading-sm)",
722
+ boxShadow: "var(--jx-shadow-popover)"
723
+ },
724
+ '& [part="toast"][data-severity="success"]': {
725
+ borderLeftColor: "var(--jx-success)"
726
+ },
727
+ '& [part="toast"][data-severity="info"]': {
728
+ borderLeftColor: "var(--jx-accent)"
729
+ },
730
+ '& [part="toast"][data-severity="warn"]': {
731
+ borderLeftColor: "var(--jx-warning)"
732
+ },
733
+ '& [part="toast"][data-severity="error"]': {
734
+ borderLeftColor: "var(--jx-danger)"
735
+ },
736
+ '& [part="icon"]': {
737
+ flex: "none",
738
+ width: "14px",
739
+ textAlign: "center",
740
+ fontWeight: "700"
741
+ },
742
+ '& [data-severity="success"] [part="icon"]': {
743
+ color: "var(--jx-success)"
744
+ },
745
+ '& [data-severity="info"] [part="icon"]': {
746
+ color: "var(--jx-accent)"
747
+ },
748
+ '& [data-severity="warn"] [part="icon"]': {
749
+ color: "var(--jx-warning)"
750
+ },
751
+ '& [data-severity="error"] [part="icon"]': {
752
+ color: "var(--jx-danger)"
753
+ },
754
+ '& [part="message"]': {
755
+ flex: "1",
756
+ minWidth: "0",
757
+ overflow: "hidden",
758
+ display: "-webkit-box",
759
+ WebkitBoxOrient: "vertical",
760
+ WebkitLineClamp: "3"
761
+ },
762
+ '& [part="action-slot"]': {
763
+ display: "contents"
764
+ },
765
+ '& [part="action"] > [part="control"]': {
766
+ color: "var(--jx-accent)"
767
+ }
768
+ },
769
+ children: [
770
+ {
771
+ $prototype: "Array",
772
+ items: {
773
+ $ref: "#/state/toasts"
774
+ },
775
+ key: {
776
+ $ref: "$map/item/id"
777
+ },
778
+ map: {
779
+ tagName: "div",
780
+ attributes: {
781
+ part: "toast",
782
+ "data-severity": "${$map.item.severity}"
783
+ },
784
+ children: [
785
+ {
786
+ tagName: "span",
787
+ attributes: {
788
+ part: "icon",
789
+ "aria-hidden": "true"
790
+ },
791
+ textContent: "${$map.item.icon}"
792
+ },
793
+ {
794
+ tagName: "span",
795
+ attributes: {
796
+ part: "message"
797
+ },
798
+ textContent: "${$map.item.message}"
799
+ },
800
+ {
801
+ tagName: "span",
802
+ attributes: {
803
+ part: "action-slot",
804
+ role: "none"
805
+ },
806
+ $switch: {
807
+ $ref: "$map/item/hasAction"
808
+ },
809
+ cases: {
810
+ true: {
811
+ tagName: "jx-button",
812
+ $props: {
813
+ size: "sm",
814
+ quiet: true,
815
+ disabled: {
816
+ $ref: "$map/item/actionDisabled"
817
+ }
818
+ },
819
+ attributes: {
820
+ part: "action",
821
+ title: "${$map.item.actionTitle}"
822
+ },
823
+ onclick: {
824
+ $prototype: "Function",
825
+ body: [
826
+ {
827
+ operator: "call",
828
+ target: {
829
+ $ref: "#/state/runAction"
830
+ },
831
+ value: [
832
+ {
833
+ $ref: "$map/item/id"
834
+ }
835
+ ]
836
+ }
837
+ ]
838
+ },
839
+ children: [
840
+ {
841
+ tagName: "span",
842
+ textContent: "${$map.item.actionLabel}"
843
+ }
844
+ ]
845
+ }
846
+ }
847
+ },
848
+ {
849
+ tagName: "jx-action-button",
850
+ $props: {
851
+ label: "Dismiss notification",
852
+ hint: "Dismiss notification",
853
+ icon: "x",
854
+ size: "sm"
855
+ },
856
+ attributes: {
857
+ part: "dismiss"
858
+ },
859
+ onclick: {
860
+ $prototype: "Function",
861
+ body: [
862
+ {
863
+ operator: "call",
864
+ target: {
865
+ $ref: "#/state/dismissToast"
866
+ },
867
+ value: [
868
+ {
869
+ $ref: "$map/item/id"
870
+ }
871
+ ]
872
+ }
873
+ ]
874
+ }
875
+ }
876
+ ]
877
+ }
878
+ }
879
+ ]
880
+ };
881
+
882
+ // src/commands/run-reported.ts
883
+ function isRefusal(error) {
884
+ return error instanceof RangeError || error instanceof Error && error.name === "CommandUnavailableError";
885
+ }
886
+ function runReported(registry, id, args, source = id) {
887
+ const report = (error) => {
888
+ if (!isRefusal(error)) {
889
+ console.error(`${source}: command "${id}" failed`, error);
890
+ }
891
+ notify2.error(errorMessage2(error), { key: `command.run:${id}`, source });
892
+ };
893
+ let result;
894
+ try {
895
+ result = registry.run(id, args);
896
+ } catch (error) {
897
+ report(error);
898
+ return Promise.resolve();
899
+ }
900
+ return Promise.resolve(result).catch(report);
901
+ }
902
+ function runActiveReported(id, args, source) {
903
+ const registry = activeRegistry();
904
+ return registry ? runReported(registry, id, args, source) : Promise.resolve();
905
+ }
906
+
907
+ // src/ui/layers.ts
908
+ var _popoverLayer;
909
+ var _modalLayer;
910
+ var _dialogLayer;
911
+ var _toastLayer;
912
+ function layerHost2(kind) {
913
+ const host = kind === "popover" ? _popoverLayer : kind === "modal" ? _modalLayer : kind === "toast" ? _toastLayer : _dialogLayer;
914
+ return host || document.body;
915
+ }
916
+ function initLayers2() {
917
+ _popoverLayer = document.querySelector("#layer-popover");
918
+ _modalLayer = document.querySelector("#layer-modal");
919
+ _dialogLayer = document.querySelector("#layer-dialog");
920
+ _toastLayer = document.querySelector("#layer-toast");
921
+ mountToastHost();
922
+ }
923
+ var UNDERLAID = "jx-dialog[data-open], dialog[open]";
924
+ function isModalOpen2() {
925
+ return Boolean(_dialogLayer?.querySelector(UNDERLAID) || _modalLayer?.querySelector(UNDERLAID));
926
+ }
927
+ function showConfirmDialog2(headline, message, opts = {}) {
928
+ const { confirmLabel = "Confirm", cancelLabel = "Cancel", destructive = false } = opts;
929
+ return new Promise((resolve) => {
930
+ let settled = false;
931
+ const done = (value) => {
932
+ if (settled) {
933
+ return;
934
+ }
935
+ settled = true;
936
+ handle.close();
937
+ resolve(value);
938
+ };
939
+ const handle = openDialogSurface({
940
+ cancelLabel,
941
+ confirmLabel,
942
+ destructive,
943
+ headline,
944
+ layer: layerHost2("dialog"),
945
+ ...messageOptions(message),
946
+ onCancel: () => done(false),
947
+ onClosed: () => done(false),
948
+ onConfirm: () => done(true)
949
+ });
950
+ });
951
+ }
952
+ function showSaveDiscardDialog2(headline, message, opts = {}) {
953
+ const { saveLabel = "Save", discardLabel = "Discard", cancelLabel = "Cancel" } = opts;
954
+ return new Promise((resolve) => {
955
+ let settled = false;
956
+ const done = (value) => {
957
+ if (settled) {
958
+ return;
959
+ }
960
+ settled = true;
961
+ handle.close();
962
+ resolve(value);
963
+ };
964
+ const handle = openDialogSurface({
965
+ cancelLabel,
966
+ confirmLabel: saveLabel,
967
+ headline,
968
+ layer: layerHost2("dialog"),
969
+ ...messageOptions(message),
970
+ onCancel: () => done("cancel"),
971
+ onClosed: () => done("cancel"),
972
+ onConfirm: () => done("save"),
973
+ onSecondary: () => done("discard"),
974
+ secondaryLabel: discardLabel
975
+ });
976
+ });
977
+ }
978
+ function messageOptions(message) {
979
+ if (typeof message === "string") {
980
+ return { message };
981
+ }
982
+ return {
983
+ island: (host) => {
984
+ render4(message, host);
985
+ }
986
+ };
987
+ }
988
+ function showPromptDialog2(headline, opts = {}) {
989
+ const {
990
+ cancelLabel = "Cancel",
991
+ choice,
992
+ confirmLabel = "OK",
993
+ message,
994
+ mono = false,
995
+ multiline = false,
996
+ placeholder = "",
997
+ rows = "3",
998
+ select = "all",
999
+ size,
1000
+ validate,
1001
+ value: initialValue = ""
1002
+ } = opts;
1003
+ const check = (candidate) => validate ? validate(candidate, chosen) : candidate.trim() ? "" : "Enter a value.";
1004
+ let value = initialValue;
1005
+ let chosen = choice?.initial ?? "";
1006
+ let error = "";
1007
+ let touched = false;
1008
+ const placeholderNow = () => typeof placeholder === "function" ? placeholder() : placeholder;
1009
+ const optionsNow = () => choice ? choice.options().map((option) => ({ label: option.label, value: option.value })) : [];
1010
+ return new Promise((resolve) => {
1011
+ let settled = false;
1012
+ const done = (result) => {
1013
+ if (settled) {
1014
+ return;
1015
+ }
1016
+ settled = true;
1017
+ handle.close();
1018
+ resolve(result);
1019
+ };
1020
+ const showError = (next) => {
1021
+ error = next;
1022
+ handle.update({ error, invalid: error !== "" });
1023
+ };
1024
+ const handle = openDialogSurface({
1025
+ cancelLabel,
1026
+ confirmLabel,
1027
+ headline,
1028
+ layer: layerHost2("dialog"),
1029
+ ...message === undefined ? {} : messageOptions(message),
1030
+ ...choice ? { choice: { chosen, label: choice.label, options: optionsNow() } } : {},
1031
+ field: { mono, multiline, placeholder: placeholderNow(), rows, select, value },
1032
+ ...size === undefined ? {} : { size },
1033
+ onCancel: () => done(null),
1034
+ onClosed: () => done(null),
1035
+ onConfirm: () => {
1036
+ const refused = check(value);
1037
+ if (refused) {
1038
+ showError(refused);
1039
+ return;
1040
+ }
1041
+ done(value.trim());
1042
+ },
1043
+ onInput: (next) => {
1044
+ touched = true;
1045
+ value = next;
1046
+ const candidate = check(value);
1047
+ if (candidate !== error) {
1048
+ showError(candidate);
1049
+ }
1050
+ },
1051
+ onPick: (next) => {
1052
+ chosen = next;
1053
+ choice?.onChange?.(next);
1054
+ const candidate = check(value);
1055
+ error = touched || error ? candidate : "";
1056
+ handle.update({
1057
+ chosen,
1058
+ error,
1059
+ invalid: error !== "",
1060
+ options: optionsNow(),
1061
+ placeholder: placeholderNow()
1062
+ });
1063
+ }
1064
+ });
1065
+ });
1066
+ }
1067
+ var _namedSlots = new Map;
1068
+ function getLayerSlot2(layer, id) {
1069
+ const key = `${layer}:${id}`;
1070
+ let slot = _namedSlots.get(key);
1071
+ if (slot && slot.parentElement) {
1072
+ return slot;
1073
+ }
1074
+ slot = document.createElement("div");
1075
+ slot.style.pointerEvents = "auto";
1076
+ slot.setAttribute(REGION_ATTR, overlayRegion(layer, id));
1077
+ layerHost2(layer).append(slot);
1078
+ _namedSlots.set(key, slot);
1079
+ return slot;
1080
+ }
1081
+ function clearLayerSlot2(layer, id) {
1082
+ const key = `${layer}:${id}`;
1083
+ const slot = _namedSlots.get(key);
1084
+ if (slot) {
1085
+ render4(nothing2, slot);
1086
+ slot.remove();
1087
+ _namedSlots.delete(key);
1088
+ }
1089
+ }
1090
+ var TOAST_ENTER_MS = 180;
1091
+ var TOAST_ICON = {
1092
+ error: "✕",
1093
+ info: "ℹ",
1094
+ success: "✓",
1095
+ warn: "!"
1096
+ };
1097
+ var _toastScope = null;
1098
+ var _toastTimers = new Map;
1099
+ var _toastEntering = new Set;
1100
+ function reducedMotion() {
1101
+ return globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches === true;
1102
+ }
1103
+ function toastsAreHeld() {
1104
+ try {
1105
+ return new URLSearchParams(globalThis.location?.search ?? "").get("automation") === "1";
1106
+ } catch {
1107
+ return false;
1108
+ }
1109
+ }
1110
+ function overlayIdleBlockers2() {
1111
+ return [..._toastEntering].map((id) => `overlay: toast ${id} settling in`);
1112
+ }
1113
+ function retireToast(id) {
1114
+ const timer = _toastTimers.get(id);
1115
+ if (timer !== undefined) {
1116
+ clearTimeout(timer);
1117
+ _toastTimers.delete(id);
1118
+ }
1119
+ _toastEntering.delete(id);
1120
+ dismiss2(id);
1121
+ }
1122
+ function scheduleToast(record) {
1123
+ if (_toastTimers.has(record.id) || _toastEntering.has(record.id)) {
1124
+ return;
1125
+ }
1126
+ const settle = reducedMotion() ? 0 : TOAST_ENTER_MS;
1127
+ if (settle > 0) {
1128
+ _toastEntering.add(record.id);
1129
+ setTimeout(() => _toastEntering.delete(record.id), settle);
1130
+ }
1131
+ const rest = record.timeoutMs ?? 0;
1132
+ if (rest <= 0 || toastsAreHeld()) {
1133
+ return;
1134
+ }
1135
+ _toastTimers.set(record.id, setTimeout(() => retireToast(record.id), rest));
1136
+ }
1137
+ registerSurface("toasts", toasts_default);
1138
+ var _toastState = null;
1139
+ var _toastMount = null;
1140
+ var _toastHandle = null;
1141
+ function toastScope() {
1142
+ _toastState ??= reactive({
1143
+ dismissToast: (id) => {
1144
+ retireToast(id);
1145
+ },
1146
+ runAction: (id) => {
1147
+ const record = toasts2.find((candidate) => candidate.id === id);
1148
+ const registry = activeRegistry();
1149
+ if (!record?.action || !registry) {
1150
+ return;
1151
+ }
1152
+ retireToast(id);
1153
+ runReported(registry, record.action, record.actionArgs, "Notifications");
1154
+ },
1155
+ toasts: []
1156
+ });
1157
+ return _toastState;
1158
+ }
1159
+ function projectToast(record) {
1160
+ const registry = record.action === undefined ? null : activeRegistry();
1161
+ const id = record.action;
1162
+ const known = registry && id !== undefined ? registry.get(id) : undefined;
1163
+ const command = known && id !== undefined && registry.isVisible(id) ? known : null;
1164
+ const reason = command && id !== undefined ? registry.disabledReason(id) : undefined;
1165
+ return {
1166
+ actionDisabled: reason !== undefined,
1167
+ actionLabel: command?.title ?? "",
1168
+ actionTitle: command === null || command === undefined ? "" : reason === undefined ? command.title : `${command.title} — requires ${reason}`,
1169
+ hasAction: command !== null && command !== undefined,
1170
+ icon: TOAST_ICON[record.severity],
1171
+ id: record.id,
1172
+ message: record.message,
1173
+ severity: record.severity
1174
+ };
1175
+ }
1176
+ function mountToastHost() {
1177
+ unmountToastHost();
1178
+ if (!_toastLayer) {
1179
+ return;
1180
+ }
1181
+ _toastScope = effectScope();
1182
+ _toastScope.run(() => {
1183
+ effect(() => {
1184
+ toasts2.length;
1185
+ activeRegistry();
1186
+ for (const record of toasts2) {
1187
+ scheduleToast(record);
1188
+ }
1189
+ toastScope().toasts = toasts2.map((record) => projectToast(record));
1190
+ });
1191
+ });
1192
+ _toastMount = mountSurface("toasts", toastScope(), _toastLayer);
1193
+ _toastMount.then((handle) => {
1194
+ _toastHandle = handle;
1195
+ });
1196
+ }
1197
+ function unmountToastHost() {
1198
+ _toastScope?.stop();
1199
+ _toastScope = null;
1200
+ for (const timer of _toastTimers.values()) {
1201
+ clearTimeout(timer);
1202
+ }
1203
+ _toastTimers.clear();
1204
+ _toastEntering.clear();
1205
+ const pending = _toastMount;
1206
+ _toastMount = null;
1207
+ if (_toastHandle) {
1208
+ _toastHandle.dispose();
1209
+ _toastHandle = null;
1210
+ } else if (pending) {
1211
+ pending.then((handle) => handle.dispose());
1212
+ }
1213
+ _toastState = null;
1214
+ }
1215
+
1216
+ export { mountsUsing, mountsOf, registerKit, REGION_ATTR, resolveRegion, REGION_FOR_FOCUS, paneRegion, paneStripRegion, navigatorPanelRegion, inspectorTabRegion, NAVIGATOR_STATEMENTS_REGION, inspectorStatementsRegion, bottomPanelRegion, overlayRegion, registerSurface, surfaceDocument, mountSurface, whenReady, openDialogSurface, runReported, runActiveReported, layerHost2, initLayers2, isModalOpen2, showConfirmDialog2, showSaveDiscardDialog2, showPromptDialog2, getLayerSlot2, clearLayerSlot2, overlayIdleBlockers2 };
1217
+
1218
+ //# debugId=0892C6B4A7BF4FE464756E2164756E21
1219
+ //# sourceMappingURL=studio-vfq8qpjt.js.map