@jxsuite/studio 6.1.1 → 8.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 (785) hide show
  1. package/README.md +5 -5
  2. package/dist/chunks/2020-5wtzce5g.js +4 -0
  3. package/dist/chunks/{action-group-2mqby73c.js → action-group-4aan7g6g.js} +3 -3
  4. package/dist/chunks/adapter-5tphg7xe.js +4 -0
  5. package/dist/chunks/add-new-flow-psym14sn.js +4 -0
  6. package/dist/chunks/cf-account-picker-haqazq5r.js +4 -0
  7. package/dist/chunks/cf-settings-h2wrh6hq.js +4 -0
  8. package/dist/chunks/color-area-6rbra5dy.js +4 -0
  9. package/dist/chunks/color-field-gy56c94g.js +4 -0
  10. package/dist/chunks/color-m7r1vk54.js +4 -0
  11. package/dist/chunks/color-slider-sqqdyf6c.js +4 -0
  12. package/dist/chunks/combobox-72h32ejk.js +4 -0
  13. package/dist/chunks/components-r22xca09.js +4 -0
  14. package/dist/chunks/content-source-mmppmcyg.js +4 -0
  15. package/dist/chunks/convert-to-repeater-he70fc2b.js +4 -0
  16. package/dist/chunks/dialog-c4x05vyx.js +4 -0
  17. package/dist/chunks/editor-ccd9jwsa.js +4 -0
  18. package/dist/chunks/entry-commands-6qxz9e8p.js +4 -0
  19. package/dist/chunks/extension-sections-0egb88dm.js +4 -0
  20. package/dist/chunks/file-ops-qnab36ek.js +4 -0
  21. package/dist/chunks/files-rcn56qvm.js +4 -0
  22. package/dist/chunks/format-host-yxz0kjjs.js +4 -0
  23. package/dist/chunks/fs-events-d1qxq4z4.js +4 -0
  24. package/dist/chunks/grid-open-4z1g062t.js +4 -0
  25. package/dist/chunks/grid-view-qg1b5eqx.js +51 -0
  26. package/dist/chunks/icons-63bjtbs7.js +4 -0
  27. package/dist/chunks/iframe-entry-2zggzajv.js +5 -0
  28. package/dist/chunks/iframe-entry-76j8vwwx.js +5 -0
  29. package/dist/chunks/iframe-entry-99nr5zfb.js +5 -0
  30. package/dist/chunks/iframe-entry-pkgmcgp0.js +5 -0
  31. package/dist/chunks/iframe-host-ssv7kyj0.js +4 -0
  32. package/dist/chunks/{index-2veqmnhr.js → index-32eqzv1k.js} +3 -3
  33. package/dist/chunks/index-f0jn7nnp.js +4 -0
  34. package/dist/chunks/{javascript-8nbvs12s.js → javascript-pjp734q4.js} +3 -3
  35. package/dist/chunks/jsonMode-njkvsa02.js +13 -0
  36. package/dist/chunks/jx-validate-ttasrbh7.js +4 -0
  37. package/dist/chunks/layers-bgyr11tr.js +4 -0
  38. package/dist/chunks/layers-panel-7ez66zeq.js +4 -0
  39. package/dist/chunks/listbox-c421cf8c.js +4 -0
  40. package/dist/chunks/lit-html-v9gh687x.js +4 -0
  41. package/dist/chunks/media-library-sq468wts.js +4 -0
  42. package/dist/chunks/media-picker-shfe59pt.js +4 -0
  43. package/dist/chunks/menu-bdpzbfvs.js +4 -0
  44. package/dist/chunks/monaco-binding-vq1hgnn0.js +4 -0
  45. package/dist/chunks/monaco-buffer-3afgwvbp.js +4 -0
  46. package/dist/chunks/monaco-setup-xrd2cbkp.js +4 -0
  47. package/dist/chunks/notify-kzrjr3fv.js +4 -0
  48. package/dist/chunks/number-field-y62xq0ty.js +4 -0
  49. package/dist/chunks/parse-v77xtwv7.js +4 -0
  50. package/dist/chunks/platform-7v4rtd7m.js +4 -0
  51. package/dist/chunks/popover-b89sfej7.js +4 -0
  52. package/dist/chunks/publish-panel-2z9gw8ee.js +4 -0
  53. package/dist/chunks/publish-quick-qx2455cj.js +4 -0
  54. package/dist/chunks/publish-workspace-wrc1dgwx.js +4 -0
  55. package/dist/chunks/quick-search-n0t0eqxb.js +4 -0
  56. package/dist/chunks/references-9547rg5s.js +4 -0
  57. package/dist/chunks/right-panel-wsgnr9pn.js +4 -0
  58. package/dist/chunks/select-rzds841e.js +4 -0
  59. package/dist/chunks/source-control-kwktr9y6.js +4 -0
  60. package/dist/chunks/split-c9zfdgxf.js +4 -0
  61. package/dist/chunks/studio-03ct6yfv.js +9 -0
  62. package/dist/chunks/studio-07rcfje3.js +5 -0
  63. package/dist/chunks/studio-3e54qh39.js +7 -0
  64. package/dist/chunks/studio-3exxhz5g.js +5 -0
  65. package/dist/chunks/studio-3q40e3rj.js +5 -0
  66. package/dist/chunks/studio-3qeh9t0h.js +6 -0
  67. package/dist/chunks/studio-3qqjeep5.js +6 -0
  68. package/dist/chunks/studio-43sd2mam.js +4 -0
  69. package/dist/chunks/studio-4hp8pkyt.js +5 -0
  70. package/dist/chunks/studio-58xg6j2q.js +9 -0
  71. package/dist/chunks/studio-5g0rprdt.js +7 -0
  72. package/dist/chunks/studio-6m380wp7.js +5 -0
  73. package/dist/chunks/studio-80jyh1xh.js +4 -0
  74. package/dist/chunks/studio-83mk4bgg.js +9 -0
  75. package/dist/chunks/{studio-kggey1jt.js → studio-881z1xrx.js} +4 -4
  76. package/dist/chunks/studio-8m0y2qe7.js +5 -0
  77. package/dist/chunks/studio-8tr6cfrc.js +5 -0
  78. package/dist/chunks/studio-8vcvfs7r.js +6 -0
  79. package/dist/chunks/studio-9tmebf0s.js +5 -0
  80. package/dist/chunks/studio-a2bvaptz.js +5 -0
  81. package/dist/chunks/studio-b7y5mr30.js +5 -0
  82. package/dist/chunks/studio-bavb31r0.js +5 -0
  83. package/dist/chunks/studio-bbe4c90a.js +5 -0
  84. package/dist/chunks/studio-c05wdnt3.js +5 -0
  85. package/dist/chunks/studio-ccv2svc6.js +5 -0
  86. package/dist/chunks/studio-d5grtb9e.js +16 -0
  87. package/dist/chunks/studio-df0baea9.js +5 -0
  88. package/dist/chunks/studio-dgk4dqtx.js +7 -0
  89. package/dist/chunks/studio-e1g64q43.js +5 -0
  90. package/dist/chunks/studio-ed1hp6zf.js +6 -0
  91. package/dist/chunks/studio-ed3xx40h.js +7 -0
  92. package/dist/chunks/studio-f14e1zdj.js +5 -0
  93. package/dist/chunks/studio-fbhxxc5f.js +5 -0
  94. package/dist/chunks/studio-fyh0jc96.js +5 -0
  95. package/dist/chunks/studio-gcxk20n7.js +5 -0
  96. package/dist/chunks/studio-jaaz8ce9.js +5 -0
  97. package/dist/chunks/{studio-8grwxtqk.js → studio-jcnsdaep.js} +4 -4
  98. package/dist/chunks/studio-jsgf2q5k.js +7 -0
  99. package/dist/chunks/{studio-1q1sh2ax.js → studio-k3xxbagr.js} +3 -3
  100. package/dist/chunks/studio-k7evxqh4.js +5 -0
  101. package/dist/chunks/studio-kt3pjkwd.js +5 -0
  102. package/dist/chunks/studio-m8g16bgz.js +5 -0
  103. package/dist/chunks/studio-mn0476ag.js +5 -0
  104. package/dist/chunks/studio-mx1smyq0.js +5 -0
  105. package/dist/chunks/studio-n0c5h6mf.js +5 -0
  106. package/dist/chunks/{studio-rv11kfwa.js → studio-nh6d342n.js} +7 -7
  107. package/dist/chunks/studio-nqxqf8p2.js +4 -0
  108. package/dist/chunks/studio-p4nrkvqr.js +5 -0
  109. package/dist/chunks/{studio-h46vtzk8.js → studio-pbxa5fpc.js} +4 -4
  110. package/dist/chunks/studio-pgmvdv7z.js +7 -0
  111. package/dist/chunks/studio-ph84avkf.js +5 -0
  112. package/dist/chunks/{studio-wszjyh0j.js → studio-q0mvbaq6.js} +4 -4
  113. package/dist/chunks/studio-q0tccd43.js +5 -0
  114. package/dist/chunks/studio-q7rtx6zq.js +14 -0
  115. package/dist/chunks/{studio-pre0skq6.js → studio-qgh13jtz.js} +4 -4
  116. package/dist/chunks/studio-qmn1xc24.js +5 -0
  117. package/dist/chunks/studio-qwdqwkj0.js +5 -0
  118. package/dist/chunks/{studio-t6b6qe31.js → studio-r5qy30vx.js} +4 -4
  119. package/dist/chunks/studio-rj9eamf8.js +5 -0
  120. package/dist/chunks/studio-rptgsk96.js +5 -0
  121. package/dist/chunks/studio-rthyg42z.js +928 -0
  122. package/dist/chunks/studio-s19tp1xr.js +5 -0
  123. package/dist/chunks/studio-s32578pn.js +5 -0
  124. package/dist/chunks/studio-svb7yyve.js +5 -0
  125. package/dist/chunks/studio-syreb644.js +5 -0
  126. package/dist/chunks/studio-tf9jryb1.js +10 -0
  127. package/dist/chunks/studio-tfkznv39.js +5 -0
  128. package/dist/chunks/studio-tft6r105.js +5 -0
  129. package/dist/chunks/studio-txf2kysx.js +5 -0
  130. package/dist/chunks/studio-v8867ddv.js +12 -0
  131. package/dist/chunks/studio-vxq7fcvv.js +5 -0
  132. package/dist/chunks/studio-w4rz9hdk.js +5 -0
  133. package/dist/chunks/studio-wbcjbhy1.js +9 -0
  134. package/dist/chunks/studio-wc649wss.js +5 -0
  135. package/dist/chunks/studio-wys23mxz.js +5 -0
  136. package/dist/chunks/studio-x1x167jh.js +5 -0
  137. package/dist/chunks/studio-x9hsze61.js +5 -0
  138. package/dist/chunks/studio-y0n7yxea.js +9 -0
  139. package/dist/chunks/studio-y3ahhdpx.js +5 -0
  140. package/dist/chunks/studio-z97c48fk.js +5 -0
  141. package/dist/chunks/studio-zat62m0c.js +5 -0
  142. package/dist/chunks/studio-zcd2e7yz.js +5 -0
  143. package/dist/chunks/studio-zz9qe3rw.js +64 -0
  144. package/dist/chunks/swatch-group-ewh24n1f.js +4 -0
  145. package/dist/chunks/tabs-f5cw3tgp.js +4 -0
  146. package/dist/chunks/textfield-wewc8rq2.js +4 -0
  147. package/dist/chunks/toast-1gv0h53h.js +4 -0
  148. package/dist/chunks/toast-host-1yg5ar8d.js +4 -0
  149. package/dist/chunks/{toolbar-2nnzqhrj.js → toolbar-44cm5cta.js} +3 -3
  150. package/dist/chunks/tooltip-yypz28gq.js +4 -0
  151. package/dist/chunks/tree-9xa4hm7n.js +4 -0
  152. package/dist/chunks/tsMode-epyfz1hv.js +14 -0
  153. package/dist/chunks/workspace-dz7nxfhv.js +4 -0
  154. package/dist/chunks/workspace-home-xsd7hkjw.js +4 -0
  155. package/dist/chunks/ws-client-bv552sfx.js +4 -0
  156. package/dist/iframe-entry.js +20 -16
  157. package/dist/manifest.json +77 -63
  158. package/dist/studio.js +106 -107
  159. package/dist/workers/ts.worker.js +3 -3
  160. package/package.json +17 -16
  161. package/src/about/about-modal.ts +4 -3
  162. package/src/account/action-flow.ts +45 -38
  163. package/src/account-status.ts +7 -2
  164. package/src/browse/component-examples.ts +272 -0
  165. package/src/browse/library-commands.ts +64 -104
  166. package/src/browse/library-layouts.ts +270 -53
  167. package/src/browse/library-model.ts +194 -134
  168. package/src/browse/library-pane.ts +748 -440
  169. package/src/browse/library-preview.ts +161 -26
  170. package/src/browse/library-source.ts +308 -41
  171. package/src/browse/preview-root.ts +78 -0
  172. package/src/browse/preview-style.ts +155 -0
  173. package/src/canvas/asset-refs.ts +40 -10
  174. package/src/canvas/asset-resolve.ts +19 -23
  175. package/src/canvas/canvas-helpers.ts +7 -6
  176. package/src/canvas/canvas-live-render.ts +260 -77
  177. package/src/canvas/canvas-origin.ts +37 -12
  178. package/src/canvas/canvas-page-context.ts +112 -0
  179. package/src/canvas/canvas-patcher.ts +30 -30
  180. package/src/canvas/canvas-perf.ts +11 -5
  181. package/src/canvas/canvas-render.ts +175 -148
  182. package/src/canvas/canvas-surface.ts +5 -3
  183. package/src/canvas/canvas-utils.ts +147 -61
  184. package/src/canvas/dialog-path.ts +9 -4
  185. package/src/canvas/dialog-state.ts +1 -2
  186. package/src/canvas/diff-marks.ts +9 -16
  187. package/src/canvas/diff-toolbar.ts +8 -7
  188. package/src/canvas/edit-width-drag.ts +4 -1
  189. package/src/canvas/edit-width.ts +1 -3
  190. package/src/canvas/iframe-channel.ts +27 -13
  191. package/src/canvas/iframe-drop.ts +120 -12
  192. package/src/canvas/iframe-editable-root.ts +29 -16
  193. package/src/canvas/iframe-entry.ts +104 -75
  194. package/src/canvas/iframe-eval.ts +73 -49
  195. package/src/canvas/iframe-host.ts +269 -158
  196. package/src/canvas/iframe-inline-edit.ts +49 -30
  197. package/src/canvas/iframe-insert.ts +5 -4
  198. package/src/canvas/iframe-interaction.ts +30 -25
  199. package/src/canvas/iframe-keys.ts +11 -0
  200. package/src/canvas/iframe-overlay.ts +1 -1
  201. package/src/canvas/iframe-patch.ts +25 -21
  202. package/src/canvas/iframe-position.ts +12 -6
  203. package/src/canvas/iframe-protocol.ts +36 -21
  204. package/src/canvas/iframe-render.ts +84 -35
  205. package/src/canvas/iframe-slash.ts +24 -11
  206. package/src/canvas/iframe-subtree.ts +10 -3
  207. package/src/canvas/npm-modules.ts +22 -0
  208. package/src/canvas/path-mapping.ts +19 -12
  209. package/src/canvas/popover-path.ts +7 -3
  210. package/src/canvas/popover-state.ts +1 -2
  211. package/src/canvas/preview-navigate.ts +16 -0
  212. package/src/canvas/repeater-sources.ts +200 -0
  213. package/src/canvas/serialize-scope.ts +13 -5
  214. package/src/canvas/stage-scrollbar.ts +7 -2
  215. package/src/canvas/surface-registry.ts +27 -3
  216. package/src/collab/collab-commands.ts +7 -2
  217. package/src/collab/collab-session.ts +84 -45
  218. package/src/collab/collab-state.ts +4 -3
  219. package/src/collab/monaco-binding.ts +16 -13
  220. package/src/collab/monaco-cursors.ts +5 -2
  221. package/src/commands/app-commands.ts +16 -6
  222. package/src/commands/budget.ts +13 -11
  223. package/src/commands/command-args.ts +103 -71
  224. package/src/commands/context.ts +55 -28
  225. package/src/commands/defaults.ts +69 -45
  226. package/src/commands/keymap.ts +56 -43
  227. package/src/commands/levels.ts +14 -8
  228. package/src/commands/live-context.ts +9 -7
  229. package/src/commands/reference.ts +2 -1
  230. package/src/commands/registry.ts +22 -11
  231. package/src/commands/run-reported.ts +15 -10
  232. package/src/component-props.ts +46 -30
  233. package/src/content/collection-match.ts +11 -9
  234. package/src/content/collection-pages.ts +412 -0
  235. package/src/content/content-collections.ts +270 -0
  236. package/src/content/draft-state.ts +4 -3
  237. package/src/content/entry-commands.ts +54 -62
  238. package/src/content/entry-editor.ts +137 -32
  239. package/src/content/entry-fields.ts +25 -8
  240. package/src/content/entry-inspector.ts +225 -0
  241. package/src/content/entry-model.ts +38 -15
  242. package/src/content/entry-open.ts +80 -0
  243. package/src/content/entry-summaries.ts +440 -0
  244. package/src/content/file-record-ids.ts +80 -0
  245. package/src/content/file-records.ts +125 -0
  246. package/src/content/page-summaries.ts +129 -0
  247. package/src/content/record-entry.ts +201 -0
  248. package/src/content/writing-banner.ts +177 -0
  249. package/src/create/add-new-commands.ts +185 -0
  250. package/src/create/add-new-flow.ts +1116 -0
  251. package/src/create/add-new.ts +1014 -0
  252. package/src/create/element-name.ts +121 -0
  253. package/src/editor/canvas-context-menu.ts +1 -2
  254. package/src/editor/canvas-slash-bridge.ts +3 -6
  255. package/src/editor/content-slice.ts +16 -14
  256. package/src/editor/context-menu.ts +35 -22
  257. package/src/editor/convert-targets.ts +30 -35
  258. package/src/editor/convert-to-component.ts +78 -48
  259. package/src/editor/convert-to-repeater.ts +34 -22
  260. package/src/editor/editable-tags.ts +17 -2
  261. package/src/editor/file-drop-action.ts +29 -22
  262. package/src/editor/inline-edit-apply.ts +79 -17
  263. package/src/editor/inline-edit.ts +76 -50
  264. package/src/editor/inline-format.ts +59 -56
  265. package/src/editor/inline-link.ts +40 -15
  266. package/src/editor/insert-component.ts +91 -0
  267. package/src/editor/insert-zone-action.ts +14 -5
  268. package/src/editor/merge-tags.ts +58 -19
  269. package/src/editor/repeater-scope.ts +39 -28
  270. package/src/editor/shortcuts.ts +76 -42
  271. package/src/editor/slash-menu.ts +52 -14
  272. package/src/files/asset-versions.ts +4 -4
  273. package/src/files/components.ts +89 -20
  274. package/src/files/elements.ts +5 -6
  275. package/src/files/file-ops.ts +92 -41
  276. package/src/files/files.ts +248 -239
  277. package/src/files/fs-events.ts +18 -7
  278. package/src/files/media-meta.ts +97 -2
  279. package/src/files/media-paths.ts +3 -0
  280. package/src/files/media-types.ts +55 -0
  281. package/src/files/media-upload.ts +209 -52
  282. package/src/files/new-file-name.ts +156 -0
  283. package/src/files/serialize-document.ts +15 -5
  284. package/src/format/constraints.ts +1 -1
  285. package/src/format/convert-file.ts +27 -13
  286. package/src/format/format-choices.ts +2 -1
  287. package/src/format/format-host.ts +91 -50
  288. package/src/github/github-auth-status.ts +27 -3
  289. package/src/github/github-auth.ts +21 -11
  290. package/src/github/github-publish.ts +28 -23
  291. package/src/grid/cell-editors.ts +46 -31
  292. package/src/grid/cell-popovers.ts +5 -3
  293. package/src/grid/edit-buffer.ts +10 -9
  294. package/src/grid/grid-controller.ts +25 -23
  295. package/src/grid/grid-layout.ts +21 -5
  296. package/src/grid/grid-open.ts +3 -33
  297. package/src/grid/grid-panel.ts +65 -6
  298. package/src/grid/grid-reveal.ts +34 -0
  299. package/src/grid/grid-source.ts +9 -31
  300. package/src/grid/grid-view.ts +45 -23
  301. package/src/grid/redirects-grid.ts +14 -5
  302. package/src/grid/redirects.ts +16 -14
  303. package/src/grid/schema-columns.ts +25 -19
  304. package/src/grid/sources/connector-source.ts +47 -20
  305. package/src/grid/sources/content-source.ts +100 -31
  306. package/src/grid/sources/csv-file-source.ts +2 -2
  307. package/src/grid/tabulator-tables.d.ts +61 -34
  308. package/src/hosting/document.ts +2 -2
  309. package/src/hosting/stage.ts +7 -7
  310. package/src/i18n/i18n-commands.ts +3 -3
  311. package/src/media/media-commands.ts +181 -0
  312. package/src/media/media-library-model.ts +232 -0
  313. package/src/media/media-library.ts +1283 -0
  314. package/src/media/media-pane.ts +51 -20
  315. package/src/new-project/add-repo-modal.ts +20 -19
  316. package/src/new-project/import-tab.ts +10 -14
  317. package/src/new-project/location-fields.ts +2 -1
  318. package/src/new-project/new-project-modal.ts +12 -9
  319. package/src/packages/jxsuite-update.ts +4 -3
  320. package/src/packages/pull-package-sync.ts +26 -25
  321. package/src/page-params.ts +97 -68
  322. package/src/panels/activity-panel.ts +38 -14
  323. package/src/panels/ai-chat/attached-context.ts +13 -7
  324. package/src/panels/ai-chat/chat-markdown.ts +8 -8
  325. package/src/panels/ai-chat/chat-view.ts +80 -73
  326. package/src/panels/ai-chat/composer.ts +30 -33
  327. package/src/panels/ai-chat/sessions-view.ts +1 -2
  328. package/src/panels/ai-panel.ts +23 -20
  329. package/src/panels/block-action-bar.ts +57 -46
  330. package/src/panels/bottom-dock.ts +5 -3
  331. package/src/panels/canvas-dnd-bridge.ts +36 -26
  332. package/src/panels/chat-panel.ts +6 -6
  333. package/src/panels/collections-panel.ts +306 -0
  334. package/src/panels/component-preview.ts +35 -13
  335. package/src/panels/data-explorer.ts +63 -26
  336. package/src/panels/data-grid.ts +18 -11
  337. package/src/panels/dnd.ts +115 -138
  338. package/src/panels/editors.ts +52 -21
  339. package/src/panels/elements-panel.ts +19 -5
  340. package/src/panels/empty-state.ts +2 -2
  341. package/src/panels/events-panel.ts +84 -69
  342. package/src/panels/formula-workspace.ts +78 -54
  343. package/src/panels/frontmatter-fields.ts +33 -28
  344. package/src/panels/git-diff-open.ts +10 -6
  345. package/src/panels/head-panel.ts +488 -202
  346. package/src/panels/i18n-panel.ts +20 -12
  347. package/src/panels/imports-panel.ts +25 -47
  348. package/src/panels/jump-bar.ts +75 -31
  349. package/src/panels/layers-panel.ts +130 -101
  350. package/src/panels/left-panel.ts +25 -11
  351. package/src/panels/navigator-panels.ts +23 -11
  352. package/src/panels/pane-context.ts +140 -49
  353. package/src/panels/pane-grid.ts +55 -26
  354. package/src/panels/panel-registry.ts +36 -46
  355. package/src/panels/properties-panel.ts +182 -124
  356. package/src/panels/quick-search.ts +53 -31
  357. package/src/panels/right-panel.ts +201 -45
  358. package/src/panels/seo-modal.ts +54 -125
  359. package/src/panels/settings-menu.ts +63 -61
  360. package/src/panels/settings-pane.ts +268 -162
  361. package/src/panels/signals-panel.ts +156 -135
  362. package/src/panels/site-model.ts +367 -0
  363. package/src/panels/site-panel.ts +638 -0
  364. package/src/panels/statement-editor.ts +230 -140
  365. package/src/panels/style-panel.ts +253 -206
  366. package/src/panels/style-utils.ts +114 -51
  367. package/src/panels/stylebook-doc.ts +195 -60
  368. package/src/panels/stylebook-layers-panel.ts +48 -89
  369. package/src/panels/stylebook-panel.ts +60 -27
  370. package/src/panels/styles-panel.ts +327 -0
  371. package/src/panels/tab-drop.ts +27 -11
  372. package/src/panels/tab-strip.ts +143 -49
  373. package/src/platform-errors.ts +57 -43
  374. package/src/platform.ts +59 -31
  375. package/src/platforms/cloud.ts +373 -176
  376. package/src/platforms/default-platform.ts +14 -8
  377. package/src/platforms/devserver.ts +180 -142
  378. package/src/platforms/read-batcher.ts +16 -8
  379. package/src/project-list.ts +2 -1
  380. package/src/publish/deploy-checklist.ts +20 -9
  381. package/src/publish/pages-service.ts +66 -27
  382. package/src/publish/publish-changes.ts +491 -0
  383. package/src/publish/publish-commands.ts +88 -22
  384. package/src/publish/publish-ids.ts +49 -0
  385. package/src/publish/publish-panel.ts +10 -6
  386. package/src/publish/publish-quick.ts +148 -0
  387. package/src/publish/publish-workspace.ts +926 -0
  388. package/src/publish/source-control.ts +907 -0
  389. package/src/recent-projects.ts +15 -8
  390. package/src/resize-edges.ts +26 -36
  391. package/src/services/a11y-report.ts +26 -19
  392. package/src/services/agent-seed.ts +23 -11
  393. package/src/services/ai-ask.ts +9 -12
  394. package/src/services/ai-command-tools.ts +68 -62
  395. package/src/services/ai-import-tools.ts +80 -67
  396. package/src/services/ai-models.ts +17 -13
  397. package/src/services/ai-project-tools.ts +68 -32
  398. package/src/services/ai-session-store.ts +19 -10
  399. package/src/services/ai-system-prompt.ts +46 -20
  400. package/src/services/ai-tools.ts +71 -27
  401. package/src/services/ai-write-report.ts +20 -12
  402. package/src/services/ai-writes.ts +4 -4
  403. package/src/services/automation.ts +74 -51
  404. package/src/services/cem-export.ts +149 -58
  405. package/src/services/cf-settings.ts +4 -4
  406. package/src/services/clock.ts +6 -1
  407. package/src/services/code-services.ts +37 -31
  408. package/src/services/connection.ts +2 -2
  409. package/src/services/context-manager.ts +14 -10
  410. package/src/services/context-resolver.ts +20 -8
  411. package/src/services/data-service.ts +19 -15
  412. package/src/services/directory-picker.ts +20 -14
  413. package/src/services/document-assistant.ts +39 -19
  414. package/src/services/gated-registry.ts +10 -6
  415. package/src/services/harness/chat-reducer.ts +23 -1
  416. package/src/services/import-client.ts +91 -38
  417. package/src/services/import-seed.ts +8 -2
  418. package/src/services/jx-validate.ts +28 -31
  419. package/src/services/live-preview.ts +0 -0
  420. package/src/services/live-surfaces.ts +6 -3
  421. package/src/services/model-uri.ts +10 -2
  422. package/src/services/module-preloads.ts +12 -8
  423. package/src/services/monaco-buffer.ts +43 -24
  424. package/src/services/monaco-lazy.ts +7 -8
  425. package/src/services/monaco-setup.ts +23 -16
  426. package/src/services/notify.ts +44 -17
  427. package/src/services/popover-report.ts +25 -10
  428. package/src/services/preview-eval.ts +20 -8
  429. package/src/services/profile.ts +13 -6
  430. package/src/services/project-path.ts +13 -10
  431. package/src/services/references.ts +0 -0
  432. package/src/services/render-critic.ts +29 -9
  433. package/src/services/settings/definitions.ts +25 -14
  434. package/src/services/settings/kernel.ts +13 -4
  435. package/src/services/settings/write-queue.ts +9 -9
  436. package/src/services/token-lint.ts +12 -10
  437. package/src/services/tool-executor.ts +17 -5
  438. package/src/services/tool-outcomes.ts +44 -24
  439. package/src/services/trusted-types.ts +24 -7
  440. package/src/settings/contexts-section.ts +11 -8
  441. package/src/settings/contributed-section.ts +128 -70
  442. package/src/settings/css-vars-editor.ts +119 -32
  443. package/src/settings/defs-editor.ts +38 -35
  444. package/src/settings/developer-panels.ts +43 -0
  445. package/src/settings/extension-rows.ts +16 -8
  446. package/src/settings/extension-sections.ts +42 -14
  447. package/src/settings/extensions-section.ts +4 -1
  448. package/src/settings/general-settings.ts +101 -28
  449. package/src/settings/locales-section.ts +20 -12
  450. package/src/settings/preferences-dialog.ts +17 -7
  451. package/src/settings/preferences-keymap.ts +7 -5
  452. package/src/settings/preferences-sections.ts +11 -5
  453. package/src/settings/project-sections.ts +28 -11
  454. package/src/settings/schema-field-ui.ts +12 -1
  455. package/src/settings/section-registry.ts +116 -11
  456. package/src/settings/settings-dialog.ts +192 -0
  457. package/src/settings/settings-document.ts +186 -166
  458. package/src/shell/tree.ts +6 -5
  459. package/src/shell.ts +536 -477
  460. package/src/site-context.ts +101 -32
  461. package/src/state.ts +68 -57
  462. package/src/store.ts +54 -34
  463. package/src/studio.ts +219 -116
  464. package/src/style/live-preview.ts +1 -1
  465. package/src/style/project-styles.ts +40 -7
  466. package/src/style/stylebook-specimens.ts +89 -0
  467. package/src/style/stylebook-target.ts +26 -0
  468. package/src/style/tag-inheritance.ts +105 -0
  469. package/src/style/token-ref.ts +5 -4
  470. package/src/style/variables-focus.ts +61 -0
  471. package/src/style/variables-view.ts +235 -0
  472. package/src/surfaces/about.ts +18 -19
  473. package/src/surfaces/add-new.json +1482 -0
  474. package/src/surfaces/add-new.ts +325 -0
  475. package/src/surfaces/add-repo.ts +17 -19
  476. package/src/surfaces/ai-chat.ts +33 -38
  477. package/src/surfaces/ai-credentials-form.ts +6 -16
  478. package/src/surfaces/ai-managed-connect.ts +3 -4
  479. package/src/surfaces/ai-model-picker.ts +3 -5
  480. package/src/surfaces/block-action-bar.ts +22 -11
  481. package/src/surfaces/boot-failure.json +4 -3
  482. package/src/surfaces/boot-failure.ts +4 -5
  483. package/src/surfaces/bottom-dock.json +1 -1
  484. package/src/surfaces/bottom-dock.ts +9 -18
  485. package/src/surfaces/canvas-stage.json +30 -19
  486. package/src/surfaces/canvas-stage.ts +17 -16
  487. package/src/surfaces/cf-account-picker.ts +17 -18
  488. package/src/surfaces/collections-panel.json +615 -0
  489. package/src/surfaces/collections-panel.ts +168 -0
  490. package/src/surfaces/commandbar.json +241 -96
  491. package/src/surfaces/commandbar.ts +145 -105
  492. package/src/surfaces/convert-repeater.ts +17 -19
  493. package/src/surfaces/data-actions.ts +9 -7
  494. package/src/surfaces/dialog.ts +26 -28
  495. package/src/surfaces/diff-toolbar.ts +9 -7
  496. package/src/surfaces/empty-state.json +1 -1
  497. package/src/surfaces/empty-state.ts +7 -10
  498. package/src/surfaces/entry-editor.json +136 -0
  499. package/src/surfaces/entry-editor.ts +35 -11
  500. package/src/surfaces/entry-inspector.json +371 -0
  501. package/src/surfaces/entry-inspector.ts +143 -0
  502. package/src/surfaces/expression-editor.ts +11 -25
  503. package/src/surfaces/files-panel.ts +27 -14
  504. package/src/surfaces/formula-palette.ts +4 -5
  505. package/src/surfaces/github-auth.ts +16 -20
  506. package/src/surfaces/github-publish.ts +17 -22
  507. package/src/surfaces/grid-cell.ts +30 -31
  508. package/src/surfaces/grid-open.ts +10 -14
  509. package/src/surfaces/grid-panel.ts +13 -9
  510. package/src/surfaces/grid-replace.ts +13 -13
  511. package/src/surfaces/grid-views.ts +15 -18
  512. package/src/surfaces/inspector-dock.json +162 -14
  513. package/src/surfaces/inspector-dock.ts +59 -31
  514. package/src/surfaces/jump-bar.ts +5 -6
  515. package/src/surfaces/jxsuite-update.ts +16 -22
  516. package/src/surfaces/library-pane.json +670 -437
  517. package/src/surfaces/library-pane.ts +111 -77
  518. package/src/surfaces/logic-panel.ts +17 -30
  519. package/src/surfaces/logic-workspace.ts +13 -15
  520. package/src/surfaces/media-browser.json +62 -6
  521. package/src/surfaces/media-browser.ts +26 -11
  522. package/src/surfaces/media-field.json +1 -1
  523. package/src/surfaces/media-field.ts +4 -5
  524. package/src/surfaces/media-library.json +1586 -0
  525. package/src/surfaces/media-library.ts +282 -0
  526. package/src/surfaces/media-pane.ts +8 -7
  527. package/src/surfaces/media-pick-dialog.json +71 -0
  528. package/src/surfaces/media-pick-dialog.ts +132 -0
  529. package/src/surfaces/menu.ts +47 -23
  530. package/src/surfaces/navigator-dock.ts +11 -12
  531. package/src/surfaces/new-project.ts +27 -26
  532. package/src/surfaces/pane-context.json +144 -77
  533. package/src/surfaces/pane-context.ts +44 -25
  534. package/src/surfaces/pane-grid.ts +15 -10
  535. package/src/surfaces/panel-activity.ts +5 -6
  536. package/src/surfaces/panel-data.ts +3 -4
  537. package/src/surfaces/panel-deploy-checklist.json +12 -6
  538. package/src/surfaces/panel-deploy-checklist.ts +8 -7
  539. package/src/surfaces/panel-elements.ts +5 -7
  540. package/src/surfaces/panel-i18n.ts +5 -7
  541. package/src/surfaces/panel-imports.ts +6 -13
  542. package/src/surfaces/panel-outline.ts +25 -19
  543. package/src/surfaces/panel-page.json +72 -2
  544. package/src/surfaces/panel-page.ts +49 -25
  545. package/src/surfaces/panel-problems.ts +5 -7
  546. package/src/surfaces/panel-signals.json +1 -1
  547. package/src/surfaces/panel-signals.ts +25 -39
  548. package/src/surfaces/panel-stylebook-layers.json +71 -204
  549. package/src/surfaces/panel-stylebook-layers.ts +5 -29
  550. package/src/surfaces/preferences.json +120 -48
  551. package/src/surfaces/preferences.ts +29 -11
  552. package/src/surfaces/progress-modal.ts +15 -9
  553. package/src/surfaces/properties-panel.json +1 -1
  554. package/src/surfaces/properties-panel.ts +20 -42
  555. package/src/surfaces/publish-quick.json +428 -0
  556. package/src/surfaces/publish-quick.ts +165 -0
  557. package/src/surfaces/publish-workspace.json +2892 -0
  558. package/src/surfaces/publish-workspace.ts +391 -0
  559. package/src/surfaces/publish.ts +18 -18
  560. package/src/surfaces/push-plan.ts +7 -8
  561. package/src/surfaces/rail.json +1 -159
  562. package/src/surfaces/rail.ts +22 -79
  563. package/src/surfaces/reference-field.ts +11 -15
  564. package/src/surfaces/schema-builder.ts +16 -22
  565. package/src/surfaces/schema-form.json +10 -2
  566. package/src/surfaces/schema-form.ts +17 -25
  567. package/src/surfaces/secret-field.ts +9 -6
  568. package/src/surfaces/seo.json +1 -1
  569. package/src/surfaces/seo.ts +21 -15
  570. package/src/surfaces/settings-contexts.ts +9 -7
  571. package/src/surfaces/settings-contributed.json +5 -5
  572. package/src/surfaces/settings-contributed.ts +32 -12
  573. package/src/surfaces/settings-css-vars.json +44 -36
  574. package/src/surfaces/settings-css-vars.ts +82 -16
  575. package/src/surfaces/settings-defs.json +2 -2
  576. package/src/surfaces/settings-defs.ts +17 -21
  577. package/src/surfaces/settings-deploy.json +2 -15
  578. package/src/surfaces/settings-deploy.ts +9 -16
  579. package/src/surfaces/settings-dialog.json +51 -0
  580. package/src/surfaces/settings-dialog.ts +169 -0
  581. package/src/surfaces/settings-extensions.ts +5 -6
  582. package/src/surfaces/settings-head.ts +33 -39
  583. package/src/surfaces/settings-locales.ts +8 -20
  584. package/src/surfaces/settings-overview.json +3 -3
  585. package/src/surfaces/settings-overview.ts +14 -8
  586. package/src/surfaces/settings-packages.ts +8 -7
  587. package/src/surfaces/settings-pane.json +269 -46
  588. package/src/surfaces/settings-pane.ts +88 -36
  589. package/src/surfaces/settings-rawjson.ts +5 -6
  590. package/src/surfaces/shell.json +2 -1
  591. package/src/surfaces/shell.ts +1 -2
  592. package/src/surfaces/site-panel.json +1029 -0
  593. package/src/surfaces/site-panel.ts +233 -0
  594. package/src/surfaces/slash-menu.json +63 -21
  595. package/src/surfaces/slash-menu.ts +42 -9
  596. package/src/surfaces/statements.ts +13 -18
  597. package/src/surfaces/statusbar.ts +56 -29
  598. package/src/surfaces/style-panel.ts +18 -31
  599. package/src/surfaces/stylebook-chrome.ts +3 -5
  600. package/src/surfaces/styles-panel.json +735 -0
  601. package/src/surfaces/styles-panel.ts +195 -0
  602. package/src/surfaces/styles-variables.json +149 -0
  603. package/src/surfaces/styles-variables.ts +145 -0
  604. package/src/surfaces/tab-strip.json +4 -4
  605. package/src/surfaces/tab-strip.ts +14 -13
  606. package/src/surfaces/target-line.ts +6 -7
  607. package/src/surfaces/welcome.ts +6 -8
  608. package/src/surfaces/writing-banner.json +94 -0
  609. package/src/surfaces/writing-banner.ts +80 -0
  610. package/src/tabs/bare-repeaters.ts +101 -0
  611. package/src/tabs/patch-ops.ts +4 -3
  612. package/src/tabs/project-config.ts +32 -21
  613. package/src/tabs/selection.ts +36 -8
  614. package/src/tabs/tab.ts +99 -48
  615. package/src/tabs/transact.ts +98 -53
  616. package/src/types.ts +53 -43
  617. package/src/ui/ai-credentials-form.ts +10 -13
  618. package/src/ui/ai-model-picker.ts +3 -3
  619. package/src/ui/cf-account-picker.ts +7 -9
  620. package/src/ui/color-selector.ts +9 -5
  621. package/src/ui/dynamic-slot.ts +7 -8
  622. package/src/ui/expression-editor.ts +112 -105
  623. package/src/ui/form-controls.ts +104 -56
  624. package/src/ui/formula-catalog.ts +239 -230
  625. package/src/ui/formula-chips.ts +33 -18
  626. package/src/ui/layers.ts +57 -31
  627. package/src/ui/media-picker.ts +300 -47
  628. package/src/ui/popover-surface.ts +20 -12
  629. package/src/ui/progress-modal.ts +13 -8
  630. package/src/ui/regions.ts +14 -12
  631. package/src/ui/schema-form.ts +372 -97
  632. package/src/ui/surface.ts +71 -8
  633. package/src/ui/timing.ts +9 -0
  634. package/src/ui/value-source.ts +44 -31
  635. package/src/ui/virtual-window.ts +29 -3
  636. package/src/utils/base64.ts +6 -4
  637. package/src/utils/edit-display.ts +366 -111
  638. package/src/utils/element-selectors.ts +3 -2
  639. package/src/utils/google-fonts.ts +15 -14
  640. package/src/utils/inherited-style.ts +18 -20
  641. package/src/utils/link-target.ts +1 -1
  642. package/src/utils/local-day.ts +18 -0
  643. package/src/utils/preview-format.ts +25 -3
  644. package/src/utils/strip-events.ts +49 -22
  645. package/src/utils/studio-utils.ts +29 -14
  646. package/src/view.ts +2 -3
  647. package/src/workspace/pane-derive.ts +14 -16
  648. package/src/workspace/session.ts +81 -50
  649. package/src/workspace/tab-workspace.ts +137 -0
  650. package/src/workspace/workspace-back.ts +189 -0
  651. package/src/workspace/workspace-home.ts +133 -0
  652. package/src/workspace/workspace-ids.ts +129 -0
  653. package/src/workspace/workspace-switch.ts +372 -0
  654. package/src/workspace/workspace.ts +165 -47
  655. package/styles/shell-frame.css +30 -7
  656. package/styles/shell-frame.json +15 -3
  657. package/dist/chunks/2020-va2wwra4.js +0 -4
  658. package/dist/chunks/adapter-f93pafd7.js +0 -4
  659. package/dist/chunks/cf-account-picker-af1h381v.js +0 -4
  660. package/dist/chunks/cf-settings-125tdm0w.js +0 -4
  661. package/dist/chunks/color-area-jqhna8zy.js +0 -4
  662. package/dist/chunks/color-field-embq5ctg.js +0 -4
  663. package/dist/chunks/color-fpezvnkt.js +0 -4
  664. package/dist/chunks/color-slider-1qmw7wqy.js +0 -4
  665. package/dist/chunks/combobox-773hdzyj.js +0 -4
  666. package/dist/chunks/components-ax2f1fnn.js +0 -4
  667. package/dist/chunks/content-source-108aqtk1.js +0 -4
  668. package/dist/chunks/convert-to-repeater-ry5rmppr.js +0 -4
  669. package/dist/chunks/dialog-mtm9fq5t.js +0 -4
  670. package/dist/chunks/editor-pfgdmkb0.js +0 -4
  671. package/dist/chunks/entry-commands-t0k1q0kx.js +0 -4
  672. package/dist/chunks/extension-sections-6mwh2hf8.js +0 -4
  673. package/dist/chunks/file-ops-meej5mqf.js +0 -4
  674. package/dist/chunks/files-44vp8a2s.js +0 -4
  675. package/dist/chunks/format-host-7q1petb9.js +0 -4
  676. package/dist/chunks/fs-events-h2mwnxaz.js +0 -4
  677. package/dist/chunks/git-panel-zngbymvd.js +0 -4
  678. package/dist/chunks/grid-view-sx9vynsp.js +0 -51
  679. package/dist/chunks/icons-p44xhjf0.js +0 -4
  680. package/dist/chunks/iframe-entry-f7mqjwpm.js +0 -5
  681. package/dist/chunks/iframe-entry-haw7jkvz.js +0 -5
  682. package/dist/chunks/iframe-entry-z6qrytv3.js +0 -5
  683. package/dist/chunks/iframe-host-qk3ycq87.js +0 -4
  684. package/dist/chunks/index-wkyfjeqz.js +0 -4
  685. package/dist/chunks/jsonMode-s8kt9dsj.js +0 -13
  686. package/dist/chunks/jx-validate-psgd7vsx.js +0 -4
  687. package/dist/chunks/layers-panel-1kq2jyfk.js +0 -4
  688. package/dist/chunks/layers-xd92fg8d.js +0 -4
  689. package/dist/chunks/listbox-s8fkmnq8.js +0 -4
  690. package/dist/chunks/lit-html-ac4cwwr4.js +0 -4
  691. package/dist/chunks/media-picker-0svzkdyb.js +0 -4
  692. package/dist/chunks/menu-37d07z9m.js +0 -4
  693. package/dist/chunks/menu-5c55ea3d.js +0 -4
  694. package/dist/chunks/monaco-binding-z6r70pdt.js +0 -4
  695. package/dist/chunks/monaco-buffer-fz6gq5y7.js +0 -4
  696. package/dist/chunks/monaco-setup-q4axkgj7.js +0 -4
  697. package/dist/chunks/notify-0xgtn8q1.js +0 -4
  698. package/dist/chunks/number-field-gw7sq8rn.js +0 -4
  699. package/dist/chunks/parse-897fvqah.js +0 -4
  700. package/dist/chunks/platform-v1qctbe6.js +0 -4
  701. package/dist/chunks/popover-8htra4er.js +0 -4
  702. package/dist/chunks/publish-panel-ym1fmgq5.js +0 -4
  703. package/dist/chunks/quick-search-a54e6t5n.js +0 -4
  704. package/dist/chunks/references-gmqp82fs.js +0 -4
  705. package/dist/chunks/right-panel-v7t9awbk.js +0 -4
  706. package/dist/chunks/section-registry-vhyf3zsr.js +0 -4
  707. package/dist/chunks/select-n3v7gwas.js +0 -4
  708. package/dist/chunks/split-pff8f3ze.js +0 -4
  709. package/dist/chunks/studio-0bhx5hz6.js +0 -5
  710. package/dist/chunks/studio-0k1ddnyy.js +0 -6
  711. package/dist/chunks/studio-1b04pd0j.js +0 -64
  712. package/dist/chunks/studio-4dwbj6gb.js +0 -5
  713. package/dist/chunks/studio-4tanh828.js +0 -5
  714. package/dist/chunks/studio-55h4mstj.js +0 -4
  715. package/dist/chunks/studio-5tnvjkz4.js +0 -5
  716. package/dist/chunks/studio-60dqgb0c.js +0 -5
  717. package/dist/chunks/studio-61dp09qg.js +0 -9
  718. package/dist/chunks/studio-63epcrj2.js +0 -5
  719. package/dist/chunks/studio-74k29dy9.js +0 -5
  720. package/dist/chunks/studio-7vg6jcd3.js +0 -5
  721. package/dist/chunks/studio-7zx31knw.js +0 -9
  722. package/dist/chunks/studio-8bxk97km.js +0 -5
  723. package/dist/chunks/studio-933e30n4.js +0 -5
  724. package/dist/chunks/studio-98wnwhbg.js +0 -5
  725. package/dist/chunks/studio-9mccjwjh.js +0 -14
  726. package/dist/chunks/studio-a2ke1e4t.js +0 -5
  727. package/dist/chunks/studio-e3a2a6v3.js +0 -4
  728. package/dist/chunks/studio-e81q1vb9.js +0 -5
  729. package/dist/chunks/studio-epgrmqqm.js +0 -5
  730. package/dist/chunks/studio-ery42sqr.js +0 -4
  731. package/dist/chunks/studio-g1shz58g.js +0 -5
  732. package/dist/chunks/studio-gf0fz03c.js +0 -5
  733. package/dist/chunks/studio-gjtpe62q.js +0 -6
  734. package/dist/chunks/studio-gkskhg7m.js +0 -5
  735. package/dist/chunks/studio-gx4dnjzd.js +0 -5
  736. package/dist/chunks/studio-j03zga3y.js +0 -9
  737. package/dist/chunks/studio-jhpxeckz.js +0 -5
  738. package/dist/chunks/studio-k01r7ykp.js +0 -5
  739. package/dist/chunks/studio-kk7h30ne.js +0 -7
  740. package/dist/chunks/studio-kt1zqney.js +0 -5
  741. package/dist/chunks/studio-m3cwhvye.js +0 -5
  742. package/dist/chunks/studio-mcayt6hz.js +0 -5
  743. package/dist/chunks/studio-myjcghv3.js +0 -5
  744. package/dist/chunks/studio-n8bxwc3y.js +0 -4
  745. package/dist/chunks/studio-ngm8gvpb.js +0 -5
  746. package/dist/chunks/studio-nj5a01jy.js +0 -928
  747. package/dist/chunks/studio-pcgz8heb.js +0 -5
  748. package/dist/chunks/studio-qcsq0t15.js +0 -5
  749. package/dist/chunks/studio-qkstvve9.js +0 -5
  750. package/dist/chunks/studio-qv1pwd3c.js +0 -5
  751. package/dist/chunks/studio-rc6dvxjb.js +0 -7
  752. package/dist/chunks/studio-s8dmmz66.js +0 -5
  753. package/dist/chunks/studio-sp5xzbj4.js +0 -6
  754. package/dist/chunks/studio-szsjbj0g.js +0 -5
  755. package/dist/chunks/studio-t1xzawhr.js +0 -16
  756. package/dist/chunks/studio-tdcprbqb.js +0 -5
  757. package/dist/chunks/studio-vrmcjf9g.js +0 -7
  758. package/dist/chunks/studio-vyc0b4he.js +0 -10
  759. package/dist/chunks/studio-w0cgf6jg.js +0 -5
  760. package/dist/chunks/studio-w3hskzqk.js +0 -5
  761. package/dist/chunks/studio-xgrgcdyh.js +0 -9
  762. package/dist/chunks/studio-xz2yxfcb.js +0 -5
  763. package/dist/chunks/studio-y6n42tgs.js +0 -5
  764. package/dist/chunks/studio-yb560vxr.js +0 -5
  765. package/dist/chunks/studio-yn9f8vtx.js +0 -5
  766. package/dist/chunks/studio-yw05w8f0.js +0 -7
  767. package/dist/chunks/studio-z16sgavc.js +0 -5
  768. package/dist/chunks/studio-zey7zsdw.js +0 -12
  769. package/dist/chunks/studio-zyqn40w4.js +0 -5
  770. package/dist/chunks/swatch-group-8qh9a3bm.js +0 -4
  771. package/dist/chunks/tabs-jwthg40w.js +0 -4
  772. package/dist/chunks/textfield-spy3hc77.js +0 -4
  773. package/dist/chunks/toast-4d35zd64.js +0 -4
  774. package/dist/chunks/toast-host-8sjmfed3.js +0 -4
  775. package/dist/chunks/tooltip-fd6g9xy3.js +0 -4
  776. package/dist/chunks/tree-h19v1jfz.js +0 -4
  777. package/dist/chunks/tsMode-2frah6h1.js +0 -14
  778. package/dist/chunks/workspace-zt81g1ms.js +0 -4
  779. package/dist/chunks/ws-client-n2bh4hkf.js +0 -4
  780. package/src/panels/frontmatter-panel.ts +0 -701
  781. package/src/panels/git-panel.ts +0 -1120
  782. package/src/surfaces/doc-header.json +0 -776
  783. package/src/surfaces/doc-header.ts +0 -231
  784. package/src/surfaces/git-panel.json +0 -1880
  785. package/src/surfaces/git-panel.ts +0 -272
@@ -19,7 +19,8 @@ import type { JsonLayout } from "@jxsuite/schema/json-layout";
19
19
  import type { ComponentEntry } from "../files/components";
20
20
  import type { AnyCommand, CommandRegistry } from "../commands/registry";
21
21
  import type { GitDiffState } from "../types";
22
- import type { JxMutableNode, JxStyle } from "@jxsuite/schema/types";
22
+ import type { JxMutableNode, JxStyle, ProjectConfig } from "@jxsuite/schema/types";
23
+ import type { FormatFrontmatter } from "../format/format-host";
23
24
  import type { ComputedRef } from "@vue/reactivity";
24
25
 
25
26
  interface FileEntry {
@@ -169,7 +170,7 @@ export const MAX_PANES = 2;
169
170
 
170
171
  export interface Workspace {
171
172
  projectRoot: string | null;
172
- projectConfig: object | null;
173
+ projectConfig: ProjectConfig | null;
173
174
  componentRegistry: ComponentEntry[];
174
175
  clipboard: JxMutableNode | null;
175
176
  styleClipboard: JxStyle | null;
@@ -205,31 +206,36 @@ export interface Workspace {
205
206
  readonly activeTabId: string | null;
206
207
  }
207
208
 
208
- // Annotated as Workspace: Vue's UnwrapNestedRefs cannot terminate on the
209
- // Recursive document types, and reactive() does not unwrap refs we never use.
210
- export const workspace: Workspace = reactive({
209
+ /*
210
+ * SAFETY: `reactive()` returns a deep proxy carrying its target's own members (the two getters
211
+ * included, read through the proxy as receiver), and the literal is checked against Workspace by
212
+ * `satisfies` and holds no refs for `UnwrapNestedRefs` to unwrap, so the proxy IS a Workspace. The
213
+ * type argument is pinned to `object` because `UnwrapNestedRefs<Workspace>` recurses through the
214
+ * document types deeply enough for tsc to give up (TS2589); the proxy is deep either way.
215
+ */
216
+ export const workspace = reactive<object>({
211
217
  activePaneId: PRIMARY_PANE,
212
- clipboard: null as JxMutableNode | null,
213
- closedTabs: [] as ClosedTabRecord[],
214
- componentRegistry: [] as ComponentEntry[],
215
- mruOrder: [] as string[],
218
+ clipboard: null,
219
+ closedTabs: [],
220
+ componentRegistry: [],
221
+ mruOrder: [],
216
222
  fileTree: {
217
223
  dirs: new Map<string, FileEntry[]>(),
218
224
  expanded: new Set<string>(),
219
225
  searchQuery: "",
220
- selectedPath: null as string | null,
226
+ selectedPath: null,
221
227
  },
222
228
  panes: [
223
229
  {
224
- activeTabId: null as string | null,
225
- derived: null as PaneDerivation | null,
230
+ activeTabId: null,
231
+ derived: null,
226
232
  id: PRIMARY_PANE,
227
- tabOrder: [] as string[],
233
+ tabOrder: [],
228
234
  },
229
235
  ],
230
- projectConfig: null as object | null,
231
- projectRoot: null as string | null,
232
- styleClipboard: null as JxStyle | null,
236
+ projectConfig: null,
237
+ projectRoot: null,
238
+ styleClipboard: null,
233
239
  tabs: new Map<string, Tab>(),
234
240
  ui: {
235
241
  activityBar: "files",
@@ -255,11 +261,11 @@ export const workspace: Workspace = reactive({
255
261
  get tabOrder(): readonly string[] {
256
262
  return activePane().tabOrder;
257
263
  },
258
- }) as unknown as Workspace;
264
+ } satisfies Workspace) as Workspace;
259
265
 
260
- export const activeTab = computed(() =>
266
+ export const activeTab: ComputedRef<Tab | null> = computed(() =>
261
267
  workspace.activeTabId ? (workspace.tabs.get(workspace.activeTabId) ?? null) : null,
262
- ) as unknown as ComputedRef<Tab | null>;
268
+ );
263
269
 
264
270
  // ─── Panes ────────────────────────────────────────────────────────────────────
265
271
 
@@ -514,10 +520,10 @@ function addPane(paneId: string): Pane {
514
520
  workspace.panes = [
515
521
  ...workspace.panes,
516
522
  {
517
- activeTabId: null as string | null,
518
- derived: null as PaneDerivation | null,
523
+ activeTabId: null,
524
+ derived: null,
519
525
  id: paneId,
520
- tabOrder: [] as string[],
526
+ tabOrder: [],
521
527
  },
522
528
  ];
523
529
  return paneById(paneId)!;
@@ -572,9 +578,15 @@ export function closePane(paneId: string) {
572
578
  for the side pane's: focused=primary showing=a became focused=primary showing=b, and the only
573
579
  way back was the tab strip. Nothing is lost either way, because the closing pane's tabs have
574
580
  just been moved into the survivor above; this only decides which of them is on screen. */
581
+ /* …unless it belongs to another workspace than the one on screen. A derived pane follows the
582
+ author into every workspace, still showing its source's document, so Close Side Pane run from
583
+ its own menu in Media would hand the survivor a Design document and carry the author off to
584
+ Design. The survivor's own tab of the workspace stays in front instead. */
585
+ const closingShows =
586
+ pane.activeTabId !== null && _tabScope(pane.activeTabId) ? pane.activeTabId : null;
575
587
  survivor.activeTabId =
576
588
  workspace.activePaneId === pane.id
577
- ? (pane.activeTabId ?? survivor.activeTabId)
589
+ ? (closingShows ?? survivor.activeTabId ?? pane.activeTabId)
578
590
  : (survivor.activeTabId ?? pane.activeTabId);
579
591
  workspace.activePaneId = survivor.id;
580
592
  /* Invariant D4, and it goes HERE — after the survivor has inherited the tabs and the focus, and
@@ -615,6 +627,72 @@ export function paneIsEmpty(pane: Pane): boolean {
615
627
  live panes now (§18.3), so a zoom is buildable, but no section of studio.md asks for one; it
616
628
  comes back with the section that does, and not one release earlier. */
617
629
 
630
+ /**
631
+ * Which tabs a fallback may land on: the tabs of the workspace on screen.
632
+ *
633
+ * When the active tab leaves a pane (closed, or moved), the pane falls back to another of its tabs.
634
+ * A fallback onto a tab of a DIFFERENT workspace would switch the workspace under the author, who
635
+ * closed a tab and did not ask to go anywhere — so the fallback is scoped, and a pane with no tab
636
+ * of the workspace left shows none. The predicate is INJECTED by `workspace/workspace-switch.ts`,
637
+ * because the rule that says which workspace a tab is in reads the project's collections, and this
638
+ * module sits below all of that. Unset, every tab qualifies, which is the model before workspaces.
639
+ */
640
+ let _tabScope: (tabId: string) => boolean = () => true;
641
+
642
+ /** Install the fallback scope. `workspace/workspace-switch.ts` calls it once at boot. */
643
+ export function setTabScope(scope: ((tabId: string) => boolean) | null): void {
644
+ _tabScope = scope ?? (() => true);
645
+ }
646
+
647
+ /**
648
+ * What a pane shows when a close leaves it no tab in scope, or nothing (the stage stays empty).
649
+ *
650
+ * Injected by `workspace/workspace-switch.ts` for the same reason {@link setTabScope} is: the answer
651
+ * (a Navigator-less workspace falls back to its home) is a workspace rule, and this module sits
652
+ * below the workspaces. Only {@link closeTab} asks, because only a close is the author emptying a
653
+ * pane; a project switch's {@link closeAllTabs} empties every pane on its way to a new project and
654
+ * must not plant a home in it.
655
+ */
656
+ let _emptyFallback: ((paneId: string) => void) | null = null;
657
+
658
+ /** Install the empty-pane fallback. `workspace/workspace-switch.ts` calls it once at boot. */
659
+ export function setEmptyPaneFallback(fallback: ((paneId: string) => void) | null): void {
660
+ _emptyFallback = fallback;
661
+ }
662
+
663
+ /**
664
+ * Where a close of the ACTIVE tab lands in a pane, ahead of the most recently used tab: a tab id,
665
+ * or `null` for no preference.
666
+ *
667
+ * Injected by `workspace/workspace-switch.ts`, for the reason {@link setTabScope} is. A workspace
668
+ * that draws no tab strip (Media, Publish) shows its home and one view opened beside it, and
669
+ * closing that view is the author going back to the home: the most recently used tab could be
670
+ * another view the strip-less pane is not drawing, which would put the author somewhere they did
671
+ * not ask to go and cannot see the way out of.
672
+ */
673
+ let _closeLanding: ((paneId: string) => string | null) | null = null;
674
+
675
+ /** Install the close landing. `workspace/workspace-switch.ts` calls it once at boot. */
676
+ export function setCloseLanding(landing: ((paneId: string) => string | null) | null): void {
677
+ _closeLanding = landing;
678
+ }
679
+
680
+ /** How many open tabs are in scope: the workspace on screen's, which is what ⌃Tab walks. */
681
+ export function scopedTabCount(): number {
682
+ let count = 0;
683
+ for (const id of workspace.tabs.keys()) {
684
+ if (_tabScope(id)) {
685
+ count += 1;
686
+ }
687
+ }
688
+ return count;
689
+ }
690
+
691
+ /** The rightmost tab of a pane that is in scope: the safe default when its active tab leaves. */
692
+ function rightmostInScope(pane: Pane): string | null {
693
+ return pane.tabOrder.findLast((id) => _tabScope(id)) ?? null;
694
+ }
695
+
618
696
  /**
619
697
  * Remove a tab id from whichever pane holds it, without touching the tab itself.
620
698
  *
@@ -630,7 +708,7 @@ export function detachTab(tabId: string) {
630
708
  }
631
709
  pane.tabOrder = pane.tabOrder.filter((id) => id !== tabId);
632
710
  if (pane.activeTabId === tabId) {
633
- pane.activeTabId = pane.tabOrder.at(-1) ?? null;
711
+ pane.activeTabId = rightmostInScope(pane);
634
712
  }
635
713
  /* The PRIMARY is exempt HERE and only here. `splitRight` moves the tab out of the source pane
636
714
  through this function, so a lone document split from the primary empties it — and that state
@@ -695,9 +773,9 @@ function defaultSlot(pane: Pane, tabId: string): number {
695
773
  * project context, and the chat panel's pending-prompt effect.
696
774
  *
697
775
  * @param {string | null} root
698
- * @param {object | null} [config]
776
+ * @param {ProjectConfig | null} [config]
699
777
  */
700
- export function setWorkspaceProject(root: string | null, config: object | null = null) {
778
+ export function setWorkspaceProject(root: string | null, config: ProjectConfig | null = null) {
701
779
  /* Leaving a project drops the assistant's record of what each turn changed (ai.md §3.2). It
702
780
  names project-relative paths, and its Restore undoes the active tab, so carried into another
703
781
  project it would list files that are not there and undo a document the turn never touched.
@@ -717,9 +795,7 @@ export function setWorkspaceProject(root: string | null, config: object | null =
717
795
  */
718
796
  export function isTabActive(tab: Tab | null): boolean {
719
797
  const active = activeTab.value;
720
- return (
721
- tab !== null && active !== null && toRaw(active as object) === toRaw(tab as unknown as object)
722
- );
798
+ return tab !== null && active !== null && toRaw(active) === toRaw(tab);
723
799
  }
724
800
 
725
801
  /**
@@ -741,7 +817,7 @@ export function tabIsLive(tab: Tab | null | undefined): boolean {
741
817
  return false;
742
818
  }
743
819
  const held = workspace.tabs.get(tab.id);
744
- return held !== undefined && toRaw(held as object) === toRaw(tab as unknown as object);
820
+ return held !== undefined && toRaw(held) === toRaw(tab);
745
821
  }
746
822
 
747
823
  /**
@@ -785,6 +861,22 @@ function syncTreeSelection(tab: Tab) {
785
861
  }
786
862
  }
787
863
 
864
+ /**
865
+ * Show no tab in a pane, leaving its strip exactly as it is.
866
+ *
867
+ * What a pane shows when the workspace on screen has no tab in it: its other tabs are another
868
+ * workspace's, and they come back when that workspace does. Written only by
869
+ * `workspace/workspace-switch.ts`; nothing about the tabs, the MRU order or the focus changes.
870
+ *
871
+ * @param {string} paneId
872
+ */
873
+ export function clearPaneActiveTab(paneId: string) {
874
+ const pane = paneById(paneId);
875
+ if (pane) {
876
+ pane.activeTabId = null;
877
+ }
878
+ }
879
+
788
880
  /**
789
881
  * Make `tabId` the active tab OF ITS OWN PANE. The one place activation happens.
790
882
  *
@@ -849,8 +941,8 @@ function setActiveTab(tabId: string, opts: { cycling?: boolean; focus?: boolean
849
941
  * id: string;
850
942
  * documentPath?: string | null;
851
943
  * fileHandle?: FileSystemFileHandle | null;
852
- * document: Record<string, unknown>;
853
- * frontmatter?: Record<string, unknown>;
944
+ * document: JxMutableNode;
945
+ * frontmatter?: FormatFrontmatter;
854
946
  * sourceFormat?: string | null;
855
947
  * capabilities?: { modes?: string[] };
856
948
  * openedFrom?: TabOrigin | null;
@@ -865,8 +957,8 @@ export function openTab(opts: {
865
957
  id: string;
866
958
  documentPath?: string | null;
867
959
  fileHandle?: FileSystemFileHandle | null;
868
- document: Record<string, unknown>;
869
- frontmatter?: Record<string, unknown>;
960
+ document: JxMutableNode;
961
+ frontmatter?: FormatFrontmatter;
870
962
  sourceFormat?: string | null;
871
963
  capabilities?: { modes?: string[] };
872
964
  openedFrom?: TabOrigin | null;
@@ -874,7 +966,28 @@ export function openTab(opts: {
874
966
  paneId?: string;
875
967
  focus?: boolean;
876
968
  layout?: JsonLayout | null;
969
+ /** The text a format-class file was read as (`createTab`'s `source`). */
970
+ source?: string | null;
971
+ /** The mode it opens in, when not its first declared one (`createTab`). */
972
+ canvasMode?: string;
973
+ /**
974
+ * Put a NEW tab in the pane's strip without activating it; a tab already open is left exactly as
975
+ * it is. For a tab that belongs beside the one on screen rather than in front of it: a
976
+ * workspace's home kept within reach of a document of that workspace.
977
+ */
978
+ background?: boolean;
877
979
  }) {
980
+ if (opts.background === true) {
981
+ const open = workspace.tabs.get(opts.id);
982
+ if (open) {
983
+ return open;
984
+ }
985
+ const tab = createTab({ ...opts, preview: false });
986
+ const pane = (opts.paneId === undefined ? undefined : paneById(opts.paneId)) ?? activePane();
987
+ insertIntoPane(pane, tab.id);
988
+ workspace.tabs.set(tab.id, tab);
989
+ return tab;
990
+ }
878
991
  const previous = workspace.tabs.get(opts.id);
879
992
  const preview = opts.preview === true && previous?.pinned !== true;
880
993
  const tab = createTab({ ...opts, preview });
@@ -1054,12 +1167,15 @@ export function closeTab(tabId: string) {
1054
1167
  // It, which is almost never the rightmost tab in the strip. `detachTab` has already put the
1055
1168
  // Rightmost there as the safe default, so this only ever improves on it.
1056
1169
  const survivor = activePane();
1170
+ const landing = _closeLanding?.(survivor.id) ?? null;
1057
1171
  const next =
1058
- workspace.mruOrder.find((id) => survivor.tabOrder.includes(id)) ??
1059
- survivor.tabOrder.at(-1) ??
1060
- null;
1172
+ (landing !== null && survivor.tabOrder.includes(landing) ? landing : null) ??
1173
+ workspace.mruOrder.find((id) => survivor.tabOrder.includes(id) && _tabScope(id)) ??
1174
+ rightmostInScope(survivor);
1061
1175
  if (next) {
1062
1176
  setActiveTab(next);
1177
+ } else {
1178
+ _emptyFallback?.(survivor.id);
1063
1179
  }
1064
1180
  }
1065
1181
 
@@ -1140,7 +1256,8 @@ export function takeClosedTabPath(): string | undefined {
1140
1256
  */
1141
1257
  export function cycleTab(step: number): string | undefined {
1142
1258
  if (!_cycleList) {
1143
- _cycleList = workspace.mruOrder.filter((id) => workspace.tabs.has(id));
1259
+ // The workspace on screen's tabs: ⌃Tab walks what the strips draw, never into another workspace.
1260
+ _cycleList = workspace.mruOrder.filter((id) => workspace.tabs.has(id) && _tabScope(id));
1144
1261
  _cycleIndex = 0;
1145
1262
  }
1146
1263
  const list = _cycleList;
@@ -1169,8 +1286,8 @@ export function endTabCycle() {
1169
1286
  * @param {{
1170
1287
  * id: string;
1171
1288
  * documentPath?: string | null;
1172
- * document: Record<string, unknown>;
1173
- * frontmatter?: Record<string, unknown>;
1289
+ * document: JxMutableNode;
1290
+ * frontmatter?: FormatFrontmatter;
1174
1291
  * sourceFormat?: string | null;
1175
1292
  * }} newTabOpts
1176
1293
  * @returns {import("../tabs/tab.js").Tab}
@@ -1178,8 +1295,8 @@ export function endTabCycle() {
1178
1295
  export function replaceAllTabs(newTabOpts: {
1179
1296
  id: string;
1180
1297
  documentPath?: string | null;
1181
- document: Record<string, unknown>;
1182
- frontmatter?: Record<string, unknown>;
1298
+ document: JxMutableNode;
1299
+ frontmatter?: FormatFrontmatter;
1183
1300
  sourceFormat?: string | null;
1184
1301
  }) {
1185
1302
  const oldIds = [...workspace.tabs.keys()];
@@ -1340,9 +1457,10 @@ export function registerTabCommands(registry: CommandRegistry, deps: TabCommandD
1340
1457
  * @returns {AnyCommand[]}
1341
1458
  */
1342
1459
  export function tabCommands(deps: TabCommandDeps): AnyCommand[] {
1343
- // The MRU list is workspace-wide, so cycling is available whenever a second document is open —
1344
- // In either pane, not just the focused one's strip.
1345
- const twoOrMoreTabs = () => workspace.tabs.size > 1;
1460
+ /* Cycling walks the workspace on screen's tabs, in either pane, not just the focused one's strip
1461
+ (`cycleTab`), so it is available when that workspace has a second tab open. In a workspace
1462
+ with no strip that is its home and a view opened beside it: ⌃Tab moves between the two. */
1463
+ const twoOrMoreTabs = () => scopedTabCount() > 1;
1346
1464
  return [
1347
1465
  {
1348
1466
  id: "document.nextTab",
@@ -1354,7 +1472,7 @@ export function tabCommands(deps: TabCommandDeps): AnyCommand[] {
1354
1472
  group: "2_navigate",
1355
1473
  when: (ctx) => ctx.document.open,
1356
1474
  enablement: twoOrMoreTabs,
1357
- requires: "a second open document",
1475
+ requires: "a second open document in this workspace",
1358
1476
  run: () => {
1359
1477
  cycleTab(1);
1360
1478
  },
@@ -1369,7 +1487,7 @@ export function tabCommands(deps: TabCommandDeps): AnyCommand[] {
1369
1487
  group: "2_navigate",
1370
1488
  when: (ctx) => ctx.document.open,
1371
1489
  enablement: twoOrMoreTabs,
1372
- requires: "a second open document",
1490
+ requires: "a second open document in this workspace",
1373
1491
  run: () => {
1374
1492
  cycleTab(-1);
1375
1493
  },
@@ -51,15 +51,17 @@
51
51
  container-type: inline-size;
52
52
  container-name: toolbar;
53
53
  }
54
- #toolbar.electrobun-webkit-app-region-drag {
54
+ /* A window handle under the frameless desktop window: the Command Bar (#toolbar) and the
55
+ boot-failure strip carry it, and the Electron shell drags the window by any area it covers.
56
+ Unscoped because the class name is self-describing. A no-op in a browser tab. */
57
+ .app-region-drag {
55
58
  -webkit-app-region: drag;
56
59
  }
57
- /* The mirror of #toolbar's own drag class above: every interactive control inside the Command Bar
58
- carries this (commandbar.json) so Electrobun's ancestry walk finds a working no-drag signal on
59
- the button itself instead of falling through to the toolbar's drag region. Unscoped, like
60
- .resize-edge below, because the class name is self-describing and used nowhere else. A no-op
61
- outside Electrobun. */
62
- .electrobun-webkit-app-region-no-drag {
60
+ /* The mirror of the drag class above: it marks an interactive control inside a drag region
61
+ (commandbar.json) so a press on the button reaches the button instead of dragging the window.
62
+ Unscoped, like .resize-edge below, because the class name is self-describing. A no-op outside a
63
+ frameless desktop window. */
64
+ .app-region-no-drag {
63
65
  -webkit-app-region: no-drag;
64
66
  }
65
67
  /* Resize edge zones */
@@ -201,6 +203,27 @@
201
203
  #app.bottom-collapsed #resize-bottom {
202
204
  display: none;
203
205
  }
206
+ /* The rail column, out of the grid. `src/shell.ts`'s applyDockLayout() stamps the class from the
207
+ active workspace's preset: the rail is Design's, and every other workspace gives its 56px to the
208
+ pane. The column is zero rather than removed so every named line below keeps its place. */
209
+ #app.rail-hidden {
210
+ grid-template-columns: [rail] 0px [nav] var(--panel-w-left) [pane] 1fr [insp] var(--panel-w-right);
211
+ }
212
+ #app.rail-hidden #activity-bar {
213
+ display: none;
214
+ }
215
+ /* Every pane's document tab strip, out of the cell. `src/shell.ts`'s applyDockLayout() stamps the
216
+ class from the active workspace's preset (`tabStrip`): Design and Content draw strips, and
217
+ Media, Styles and Publish draw their home surface alone, with the pane context bar's Back
218
+ control leading out of anything opened beside it. The strip stays mounted underneath, so
219
+ returning to a workspace with strips repaints nothing. A DERIVED pane's strip is the exception,
220
+ whenever it draws the derivation chip: the chip says what the side pane is a projection of, and
221
+ its trailing ✕ (Close Side Pane) is a lens's only visible exit, since a lens's context bar draws
222
+ neither the preset menu nor a Back control. Derived panes follow the author into every
223
+ workspace, so hiding that row would leave a pane nobody can name or close. */
224
+ #app.tabs-hidden #pane-grid [data-pane-id] > [part="strip"]:not(:has([part="derivation"])) {
225
+ display: none;
226
+ }
204
227
  /* ⑫ Status bar Three fields in the shell's own level order, separated by a rule rather than by a
205
228
  run of "|" characters: the boundary between PROJECT, DOCUMENT and SELECTION is structural, and
206
229
  the eye should be able to find it without reading. */
@@ -32,11 +32,12 @@
32
32
  "container-type": "inline-size",
33
33
  "container-name": "toolbar"
34
34
  },
35
- "#toolbar.electrobun-webkit-app-region-drag": {
35
+ ".app-region-drag": {
36
+ "$description": "A window handle under the frameless desktop window: the Command Bar (#toolbar) and the boot-failure strip carry it, and the Electron shell drags the window by any area it covers. Unscoped because the class name is self-describing. A no-op in a browser tab.",
36
37
  "-webkit-app-region": "drag"
37
38
  },
38
- ".electrobun-webkit-app-region-no-drag": {
39
- "$description": "The mirror of #toolbar's own drag class above: every interactive control inside the Command Bar carries this (commandbar.json) so Electrobun's ancestry walk finds a working no-drag signal on the button itself instead of falling through to the toolbar's drag region. Unscoped, like .resize-edge below, because the class name is self-describing and used nowhere else. A no-op outside Electrobun.",
39
+ ".app-region-no-drag": {
40
+ "$description": "The mirror of the drag class above: it marks an interactive control inside a drag region (commandbar.json) so a press on the button reaches the button instead of dragging the window. Unscoped, like .resize-edge below, because the class name is self-describing. A no-op outside a frameless desktop window.",
40
41
  "-webkit-app-region": "no-drag"
41
42
  },
42
43
  ".resize-edge": {
@@ -169,6 +170,17 @@
169
170
  "#app.bottom-collapsed #bottom-dock, #app.bottom-collapsed #resize-bottom": {
170
171
  "display": "none"
171
172
  },
173
+ "#app.rail-hidden": {
174
+ "$description": "The rail column, out of the grid. `src/shell.ts`'s applyDockLayout() stamps the class from the active workspace's preset: the rail is Design's, and every other workspace gives its 56px to the pane. The column is zero rather than removed so every named line below keeps its place.",
175
+ "grid-template-columns": "[rail] 0px [nav] var(--panel-w-left) [pane] 1fr [insp] var(--panel-w-right)"
176
+ },
177
+ "#app.rail-hidden #activity-bar": {
178
+ "display": "none"
179
+ },
180
+ "#app.tabs-hidden #pane-grid [data-pane-id] > [part=\"strip\"]:not(:has([part=\"derivation\"]))": {
181
+ "$description": "Every pane's document tab strip, out of the cell. `src/shell.ts`'s applyDockLayout() stamps the class from the active workspace's preset (`tabStrip`): Design and Content draw strips, and Media, Styles and Publish draw their home surface alone, with the pane context bar's Back control leading out of anything opened beside it. The strip stays mounted underneath, so returning to a workspace with strips repaints nothing. A DERIVED pane's strip is the exception, whenever it draws the derivation chip: the chip says what the side pane is a projection of, and its trailing ✕ (Close Side Pane) is a lens's only visible exit, since a lens's context bar draws neither the preset menu nor a Back control. Derived panes follow the author into every workspace, so hiding that row would leave a pane nobody can name or close.",
182
+ "display": "none"
183
+ },
172
184
  "#statusbar": {
173
185
  "$description": "\u246b Status bar Three fields in the shell's own level order, separated by a rule rather than by a run of \"|\" characters: the boundary between PROJECT, DOCUMENT and SELECTION is structural, and the eye should be able to find it without reading.",
174
186
  "grid-row": "4",
@@ -1,4 +0,0 @@
1
- import{Dt,on,Pl,Mf,Yg,Ff,iw,_0,S0,C0,k0,E0,T0,L0,R0,$0}from"./studio-zey7zsdw.js";import{ae}from"./studio-pre0skq6.js";var O=ae(function(k){Object.defineProperty(k,"__esModule",{value:!0});k.dynamicAnchor=void 0;var y=Dt(),Pe=Pl(),g=iw(),N=S0(),Re={keyword:"$dynamicAnchor",schemaType:"string",code:(e)=>T(e,e.schema)};function T(e,t){let{gen:r,it:o}=e;o.schemaEnv.root.dynamicAnchors[t]=!0;let n=y._`${Pe.default.dynamicAnchors}${y.getProperty(t)}`,s=o.errSchemaPath==="#"?o.validateName:Ae(e);r.if(y._`!${n}`,()=>r.assign(n,s))}k.dynamicAnchor=T;function Ae(e){let{schemaEnv:t,schema:r,self:o}=e.it,{root:n,baseId:s,localRefs:l,meta:d}=t.root,{schemaId:a}=o.opts,f=new g.SchemaEnv({schema:r,schemaId:a,root:n,baseId:s,localRefs:l,meta:d});return g.compileSchema.call(o,f),N.getValidate(e,f)}k.default=Re});var M=ae(function(V){Object.defineProperty(V,"__esModule",{value:!0});V.dynamicRef=void 0;var v=Dt(),Me=Pl(),_=S0(),Se={keyword:"$dynamicRef",schemaType:"string",code:(e)=>C(e,e.schema)};function C(e,t){let{gen:r,keyword:o,it:n}=e;if(t[0]!=="#")throw Error(`"${o}" only supports hash fragment reference`);let s=t.slice(1);if(n.allErrors)l();else{let a=r.let("valid",!1);l(a),e.ok(a)}function l(a){if(n.schemaEnv.root.dynamicAnchors[s]){let f=r.let("_v",v._`${Me.default.dynamicAnchors}${v.getProperty(s)}`);r.if(f,d(f,a),d(n.validateName,a))}else d(n.validateName,a)()}function d(a,f){return f?()=>r.block(()=>{_.callRef(e,a),r.let(f,!0)}):()=>_.callRef(e,a)}}V.dynamicRef=C;V.default=Se});var L=ae(function(z){Object.defineProperty(z,"__esModule",{value:!0});var K=O(),G=on(),Ie={keyword:"$recursiveAnchor",schemaType:"boolean",code(e){if(e.schema)K.dynamicAnchor(e,"");else G.checkStrictMode(e.it,"$recursiveAnchor: false is ignored")}};z.default=Ie});var F=ae(function(Z){Object.defineProperty(Z,"__esModule",{value:!0});var U=M(),Ne={keyword:"$recursiveRef",schemaType:"string",code:(e)=>U.dynamicRef(e,e.schema)};Z.default=Ne});var B=ae(function(H){Object.defineProperty(H,"__esModule",{value:!0});var ke=O(),Ee=M(),Ce=L(),Ve=F(),De=[ke.default,Ee.default,Ce.default,Ve.default];H.default=De});var Q=ae(function(J){Object.defineProperty(J,"__esModule",{value:!0});var j=E0(),Ge={keyword:"dependentRequired",type:"object",schemaType:"object",error:j.error,code:(e)=>j.validatePropertyDeps(e)};J.default=Ge});var Y=ae(function(X){Object.defineProperty(X,"__esModule",{value:!0});var W=E0(),Le={keyword:"dependentSchemas",type:"object",schemaType:"object",code:(e)=>W.validateSchemaDeps(e)};X.default=Le});var re=ae(function(te){Object.defineProperty(te,"__esModule",{value:!0});var ee=on(),Ze={keyword:["maxContains","minContains"],type:"array",schemaType:"number",code({keyword:e,parentSchema:t,it:r}){if(t.contains===void 0)ee.checkStrictMode(r,`"${e}" without "contains" is ignored`)}};te.default=Ze});var oe=ae(function(ne){Object.defineProperty(ne,"__esModule",{value:!0});var He=Q(),Be=Y(),Je=re(),Qe=[He.default,Be.default,Je.default];ne.default=Qe});var ie=ae(function(se){Object.defineProperty(se,"__esModule",{value:!0});var i=Dt(),q=on(),Xe=Pl(),Ye={message:"must NOT have unevaluated properties",params:({params:e})=>i._`{unevaluatedProperty: ${e.unevaluatedProperty}}`},et={keyword:"unevaluatedProperties",type:"object",schemaType:["boolean","object"],trackErrors:!0,error:Ye,code(e){let{gen:t,schema:r,data:o,errsCount:n,it:s}=e;if(!n)throw Error("ajv implementation error");let{allErrors:l,props:d}=s;if(d instanceof i.Name)t.if(i._`${d} !== true`,()=>t.forIn("key",o,(c)=>t.if(f(d,c),()=>a(c))));else if(d!==!0)t.forIn("key",o,(c)=>d===void 0?a(c):t.if(A(d,c),()=>a(c)));s.props=!0,e.ok(i._`${n} === ${Xe.default.errors}`);function a(c){if(r===!1){if(e.setParams({unevaluatedProperty:c}),e.error(),!l)t.break();return}if(!q.alwaysValidSchema(s,r)){let p=t.name("valid");if(e.subschema({keyword:"unevaluatedProperties",dataProp:c,dataPropType:q.Type.Str},p),!l)t.if(i.not(p),()=>t.break())}}function f(c,p){return i._`!${c} || !${c}[${p}]`}function A(c,p){let I=[];for(let w in c)if(c[w]===!0)I.push(i._`${p} !== ${w}`);return i.and(...I)}}};se.default=et});var de=ae(function(ce){Object.defineProperty(ce,"__esModule",{value:!0});var u=Dt(),P=on(),rt={message:({params:{len:e}})=>u.str`must NOT have more than ${e} items`,params:({params:{len:e}})=>u._`{limit: ${e}}`},at={keyword:"unevaluatedItems",type:"array",schemaType:["boolean","object"],error:rt,code(e){let{gen:t,schema:r,data:o,it:n}=e,s=n.items||0;if(s===!0)return;let l=t.const("len",u._`${o}.length`);if(r===!1)e.setParams({len:s}),e.fail(u._`${l} > ${s}`);else if(typeof r=="object"&&!P.alwaysValidSchema(n,r)){let a=t.var("valid",u._`${l} <= ${s}`);t.if(u.not(a),()=>d(a,s)),e.ok(a)}n.items=!0;function d(a,f){t.forRange("i",f,l,(A)=>{if(e.subschema({keyword:"unevaluatedItems",dataProp:A,dataPropType:P.Type.Num},a),!n.allErrors)t.if(u.not(a),()=>t.break())})}}};ce.default=at});var me=ae(function(ue){Object.defineProperty(ue,"__esModule",{value:!0});var ot=ie(),st=de(),it=[ot.default,st.default];ue.default=it});var le=ae(function(fe){Object.defineProperty(fe,"__esModule",{value:!0});var dt=C0(),ut=k0(),mt=T0(),ft=B(),lt=oe(),pt=me(),yt=L0(),R=R0(),ht=[ft.default,dt.default,ut.default,(0,mt.default)(!0),yt.default,R.metadataVocabulary,R.contentVocabulary,lt.default,pt.default];fe.default=ht});var pe=ae(function(ir,bt){bt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/schema",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/core":!0,"https://json-schema.org/draft/2020-12/vocab/applicator":!0,"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0,"https://json-schema.org/draft/2020-12/vocab/validation":!0,"https://json-schema.org/draft/2020-12/vocab/meta-data":!0,"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0,"https://json-schema.org/draft/2020-12/vocab/content":!0},$dynamicAnchor:"meta",title:"Core and Validation specifications meta-schema",allOf:[{$ref:"meta/core"},{$ref:"meta/applicator"},{$ref:"meta/unevaluated"},{$ref:"meta/validation"},{$ref:"meta/meta-data"},{$ref:"meta/format-annotation"},{$ref:"meta/content"}],type:["object","boolean"],$comment:"This meta-schema also defines keywords that have appeared in previous drafts in order to prevent incompatible extensions as they remain in common use.",properties:{definitions:{$comment:'"definitions" has been replaced by "$defs".',type:"object",additionalProperties:{$dynamicRef:"#meta"},deprecated:!0,default:{}},dependencies:{$comment:'"dependencies" has been split and replaced by "dependentSchemas" and "dependentRequired" in order to serve their differing semantics.',type:"object",additionalProperties:{anyOf:[{$dynamicRef:"#meta"},{$ref:"meta/validation#/$defs/stringArray"}]},deprecated:!0,default:{}},$recursiveAnchor:{$comment:'"$recursiveAnchor" has been replaced by "$dynamicAnchor".',$ref:"meta/core#/$defs/anchorString",deprecated:!0},$recursiveRef:{$comment:'"$recursiveRef" has been replaced by "$dynamicRef".',$ref:"meta/core#/$defs/uriReferenceString",deprecated:!0}}}});var ye=ae(function(cr,gt){gt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/applicator",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/applicator":!0},$dynamicAnchor:"meta",title:"Applicator vocabulary meta-schema",type:["object","boolean"],properties:{prefixItems:{$ref:"#/$defs/schemaArray"},items:{$dynamicRef:"#meta"},contains:{$dynamicRef:"#meta"},additionalProperties:{$dynamicRef:"#meta"},properties:{type:"object",additionalProperties:{$dynamicRef:"#meta"},default:{}},patternProperties:{type:"object",additionalProperties:{$dynamicRef:"#meta"},propertyNames:{format:"regex"},default:{}},dependentSchemas:{type:"object",additionalProperties:{$dynamicRef:"#meta"},default:{}},propertyNames:{$dynamicRef:"#meta"},if:{$dynamicRef:"#meta"},then:{$dynamicRef:"#meta"},else:{$dynamicRef:"#meta"},allOf:{$ref:"#/$defs/schemaArray"},anyOf:{$ref:"#/$defs/schemaArray"},oneOf:{$ref:"#/$defs/schemaArray"},not:{$dynamicRef:"#meta"}},$defs:{schemaArray:{type:"array",minItems:1,items:{$dynamicRef:"#meta"}}}}});var he=ae(function(dr,vt){vt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/unevaluated",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/unevaluated":!0},$dynamicAnchor:"meta",title:"Unevaluated applicator vocabulary meta-schema",type:["object","boolean"],properties:{unevaluatedItems:{$dynamicRef:"#meta"},unevaluatedProperties:{$dynamicRef:"#meta"}}}});var $e=ae(function(ur,_t){_t.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/content",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/content":!0},$dynamicAnchor:"meta",title:"Content vocabulary meta-schema",type:["object","boolean"],properties:{contentEncoding:{type:"string"},contentMediaType:{type:"string"},contentSchema:{$dynamicRef:"#meta"}}}});var be=ae(function(mr,jt){jt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/core",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/core":!0},$dynamicAnchor:"meta",title:"Core vocabulary meta-schema",type:["object","boolean"],properties:{$id:{$ref:"#/$defs/uriReferenceString",$comment:"Non-empty fragments not allowed.",pattern:"^[^#]*#?$"},$schema:{$ref:"#/$defs/uriString"},$ref:{$ref:"#/$defs/uriReferenceString"},$anchor:{$ref:"#/$defs/anchorString"},$dynamicRef:{$ref:"#/$defs/uriReferenceString"},$dynamicAnchor:{$ref:"#/$defs/anchorString"},$vocabulary:{type:"object",propertyNames:{$ref:"#/$defs/uriString"},additionalProperties:{type:"boolean"}},$comment:{type:"string"},$defs:{type:"object",additionalProperties:{$dynamicRef:"#meta"}}},$defs:{anchorString:{type:"string",pattern:"^[A-Za-z_][-A-Za-z0-9._]*$"},uriString:{type:"string",format:"uri"},uriReferenceString:{type:"string",format:"uri-reference"}}}});var ge=ae(function(fr,qt){qt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/format-annotation",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/format-annotation":!0},$dynamicAnchor:"meta",title:"Format vocabulary meta-schema for annotation results",type:["object","boolean"],properties:{format:{type:"string"}}}});var ve=ae(function(lr,Pt){Pt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/meta-data",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/meta-data":!0},$dynamicAnchor:"meta",title:"Meta-data vocabulary meta-schema",type:["object","boolean"],properties:{title:{type:"string"},description:{type:"string"},default:!0,deprecated:{type:"boolean",default:!1},readOnly:{type:"boolean",default:!1},writeOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0}}}});var _e=ae(function(pr,Rt){Rt.exports={$schema:"https://json-schema.org/draft/2020-12/schema",$id:"https://json-schema.org/draft/2020-12/meta/validation",$vocabulary:{"https://json-schema.org/draft/2020-12/vocab/validation":!0},$dynamicAnchor:"meta",title:"Validation vocabulary meta-schema",type:["object","boolean"],properties:{type:{anyOf:[{$ref:"#/$defs/simpleTypes"},{type:"array",items:{$ref:"#/$defs/simpleTypes"},minItems:1,uniqueItems:!0}]},const:!0,enum:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/$defs/nonNegativeInteger"},minLength:{$ref:"#/$defs/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},maxItems:{$ref:"#/$defs/nonNegativeInteger"},minItems:{$ref:"#/$defs/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},maxContains:{$ref:"#/$defs/nonNegativeInteger"},minContains:{$ref:"#/$defs/nonNegativeInteger",default:1},maxProperties:{$ref:"#/$defs/nonNegativeInteger"},minProperties:{$ref:"#/$defs/nonNegativeIntegerDefault0"},required:{$ref:"#/$defs/stringArray"},dependentRequired:{type:"object",additionalProperties:{$ref:"#/$defs/stringArray"}}},$defs:{nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{$ref:"#/$defs/nonNegativeInteger",default:0},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}}}});var qe=ae(function(je){Object.defineProperty(je,"__esModule",{value:!0});var At=pe(),Ot=ye(),Mt=he(),St=$e(),xt=be(),It=ge(),wt=ve(),Nt=_e(),Tt=["/properties"];function kt(e){return[At,Ot,Mt,St,xt,t(this,It),wt,t(this,Nt)].forEach((r)=>this.addMetaSchema(r,void 0,!1)),this;function t(r,o){return e?r.$dataMetaSchema(o,Tt):o}}je.default=kt});var Ht=ae(function(m,x){Object.defineProperty(m,"__esModule",{value:!0});m.MissingRefError=m.ValidationError=m.CodeGen=m.Name=m.nil=m.stringify=m.str=m._=m.KeywordCxt=m.Ajv2020=void 0;var Ct=_0(),Vt=le(),Kt=$0(),Gt=qe(),S="https://json-schema.org/draft/2020-12/schema";class b extends Ct.default{constructor(e={}){super({...e,dynamicRef:!0,next:!0,unevaluated:!0})}_addVocabularies(){if(super._addVocabularies(),Vt.default.forEach((e)=>this.addVocabulary(e)),this.opts.discriminator)this.addKeyword(Kt.default)}_addDefaultMetaSchema(){super._addDefaultMetaSchema();let{$data:e,meta:t}=this.opts;if(!t)return;Gt.default.call(this,e),this.refs["http://json-schema.org/schema"]=S}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(S)?S:void 0)}}m.Ajv2020=b;x.exports=m=b;x.exports.Ajv2020=b;Object.defineProperty(m,"__esModule",{value:!0});m.default=b;var zt=Mf();Object.defineProperty(m,"KeywordCxt",{enumerable:!0,get:function(){return zt.KeywordCxt}});var h=Dt();Object.defineProperty(m,"_",{enumerable:!0,get:function(){return h._}});Object.defineProperty(m,"str",{enumerable:!0,get:function(){return h.str}});Object.defineProperty(m,"stringify",{enumerable:!0,get:function(){return h.stringify}});Object.defineProperty(m,"nil",{enumerable:!0,get:function(){return h.nil}});Object.defineProperty(m,"Name",{enumerable:!0,get:function(){return h.Name}});Object.defineProperty(m,"CodeGen",{enumerable:!0,get:function(){return h.CodeGen}});var Lt=Yg();Object.defineProperty(m,"ValidationError",{enumerable:!0,get:function(){return Lt.default}});var Ut=Ff();Object.defineProperty(m,"MissingRefError",{enumerable:!0,get:function(){return Ut.default}})});export default Ht();
2
-
3
- //# debugId=2587383F203A979264756E2164756E21
4
- //# sourceMappingURL=2020-va2wwra4.js.map
@@ -1,4 +0,0 @@
1
- import{Ks,Js,_s}from"./studio-rv11kfwa.js";export{_s as draggable,Ks as dropTargetForElements,Js as monitorForElements};
2
-
3
- //# debugId=84A692D36413686264756E2164756E21
4
- //# sourceMappingURL=adapter-f93pafd7.js.map
@@ -1,4 +0,0 @@
1
- import{p,Ve}from"./studio-xz2yxfcb.js";import"./studio-ery42sqr.js";import{y}from"./studio-55h4mstj.js";import"./studio-1q1sh2ax.js";import{pn,an}from"./studio-9mccjwjh.js";import"./studio-zyqn40w4.js";import{ot,zt,T,I,An,Ct}from"./studio-g1shz58g.js";import"./studio-vrmcjf9g.js";import"./studio-w0cgf6jg.js";import"./studio-933e30n4.js";import"./studio-tdcprbqb.js";import{sp}from"./studio-8bxk97km.js";var d={$schema:"https://jxsuite.com/schema/v1",$id:"StudioCfAccountPicker",$description:"The Cloudflare account picker: which of the accounts this grant reaches should publishing and the assistant run against. A `jx-dialog`, so the platform owns modality, Escape, focus restoration and the backdrop — which is what retired the `sp-dialog-wrapper` this surface used to open by hand, along with the focus trap and the `aria-modal` slot `showDialog` wrapped around it. There is no confirming button: each row commits itself, because a picker whose answer is one of N rows has N answers rather than one. The adapter (`surfaces/cf-account-picker.ts`) hands in rows that are already strings and booleans — nothing here knows what `cf_account_required` is, which call refused, or whether the list came back empty because the grant reaches nothing or because Cloudflare could not be reached.",tagName:"jx-dialog",$props:{headline:"Choose a Cloudflare account",confirmLabel:"",cancelLabel:"Cancel",size:"sm"},attributes:{part:"cf-accounts"},oncancel:{$prototype:"Function",body:[{operator:"call",target:{$ref:"#/state/closed"},value:[]}]},onclose:{$prototype:"Function",body:[{operator:"call",target:{$ref:"#/state/closed"},value:[]}]},style:{$description:"The picker's own look. Four `.cf-account-picker*` rules in `styles/shell.css` become the parts below and one of them does not come with them: `min-width: 320px` was this surface sizing its own box, and `jx-dialog` is what sizes a dialog now — `sm` is `min(90vw, 24rem)`, which is wider than the 320px it asked for. The row shape came from `.prefs-account`, which the lit template BORROWED from Preferences › Accounts; it is copied here rather than shared, because a class in a stylesheet is a thing two surfaces can drift apart on and `preferences-dialog.ts` still draws its own rows from it. Three token repairs travel with them: `--spectrum-font-size-75` and `--spectrum-font-size-50` resolve only inside `<sp-theme>`, and a document mounted in the dialog layer is outside it, so every one of them would silently have taken its hard-coded fallback.",'& [part="picker"]':{display:"flex",flexDirection:"column",gap:"var(--jx-space-4)"},'& [part="intro"], & [part="empty"]':{$description:"The lede and the two absences read as the same secondary line, so they are one rule: the sentence over the list and the sentence drawn instead of it are the same voice.",margin:"0",fontSize:"var(--jx-text-md)",color:"var(--fg-dim)"},'& [part="failure"]':{$description:'A commit the broker refused, said above the list the reader is still looking at. It is not an announcement of the same thing twice: the list survives a refusal, because listing again is not what would fix an account Cloudflare will not accept, so the reason has to sit beside the rows that are still on offer. It is `failure` rather than `error` because every kit field draws a permanent, empty `[part="error"]` of its own, and the kit is light DOM: a rule on that name here would reach any field this dialog ever holds.',margin:"0",fontSize:"var(--jx-text-md)",color:"var(--danger)"},'& [part="fail"]':{$description:"The one state that offers a verb of its own. Retrying is right for a listing that never landed and wrong for a grant that genuinely reaches nothing, so the button lives in this branch rather than under both.",display:"flex",flexDirection:"column",alignItems:"flex-start",gap:"var(--jx-space-3)"},'& [part="list"]':{display:"flex",flexDirection:"column",gap:"var(--jx-space-2)"},'& [part="row"]':{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"var(--jx-space-4)",padding:"var(--jx-space-3)",border:"1px solid var(--border)",borderRadius:"var(--radius)"},'& [part="text"]':{$description:"`min-width: 0` lets the column shrink below its content, so the name and id reflow inside the row instead of pushing its own button off the end of it; what lets them reflow is their own `overflow-wrap`. Nothing here ellipsizes. Unlike Preferences › Accounts, the row does not wrap its button onto a line of its own: in an `sm` dialog the arithmetic (a 120px basis, the gap and a 105px button against a 236px row) would wrap every row at rest.",display:"flex",flexDirection:"column",gap:"var(--jx-space-1)",minWidth:"0"},'& [part="name"]':{$description:"`overflow-wrap: anywhere` because Cloudflare names a new account after the email that opened it (`name@example.com's Account`), and an address has no break opportunity in it.",color:"var(--fg)",overflowWrap:"anywhere"},'& [part="detail"]':{$description:"The account id under the name. Two Cloudflare accounts may carry the same name and the id is what is stored, so the row shows both rather than the half a reader would have to guess from. `overflow-wrap: anywhere` because the id is 32 hex digits with no break opportunity: it measured 203px in a 119px column and ran under the row's own button. It reflows rather than ellipsizing, because the id is the half that tells two same-named accounts apart.",fontSize:"var(--jx-text-sm)",color:"var(--fg-dim)",overflowWrap:"anywhere"}},children:[{tagName:"div",attributes:{part:"picker"},children:[{tagName:"p",attributes:{part:"intro"},textContent:"Your Cloudflare login reaches more than one account. Publishing and the assistant both run against the one you pick; you can change it in Preferences › Accounts."},{tagName:"div",attributes:{part:"body-slot",role:"none"},style:{display:"contents"},$switch:{$ref:"#/state/listState"},cases:{loading:{tagName:"p",attributes:{part:"empty"},textContent:"Reading your Cloudflare accounts…"},empty:{tagName:"p",attributes:{part:"empty"},textContent:"This Cloudflare login reaches no accounts. Create one at dash.cloudflare.com, then try again."},failed:{tagName:"div",attributes:{part:"fail"},children:[{tagName:"p",attributes:{part:"empty"},textContent:"${state.failureMessage}"},{tagName:"jx-button",attributes:{part:"retry"},$props:{size:"sm"},onclick:{$prototype:"Function",body:[{operator:"call",target:{$ref:"#/state/retry"},value:[]}]},children:[{tagName:"span",textContent:"Try again"}]}]},listed:{tagName:"div",attributes:{part:"listed",role:"none"},style:{display:"contents"},children:[{tagName:"div",attributes:{part:"failure-slot",role:"none"},style:{display:"contents"},$switch:{$ref:"#/state/hasFailure"},cases:{true:{tagName:"p",attributes:{part:"failure"},textContent:"${state.failure}"}}},{tagName:"div",attributes:{part:"list"},children:[{$prototype:"Array",items:{$ref:"#/state/rows"},key:{$ref:"$map/item/id"},map:{tagName:"div",attributes:{part:"row","data-account":"${$map.item.id}"},children:[{tagName:"div",attributes:{part:"text"},children:[{tagName:"span",attributes:{part:"name"},textContent:"${$map.item.name}"},{tagName:"span",attributes:{part:"detail"},textContent:"${$map.item.id}"}]},{tagName:"jx-button",attributes:{part:"choose"},$props:{size:"sm",variant:"accent",disabled:{$ref:"$map/item/busy"}},onclick:{$prototype:"Function",body:[{operator:"call",target:{$ref:"#/state/choose"},value:[{$ref:"$map/item/id"}]}]},children:[{tagName:"span",textContent:"${$map.item.label}"}]}]}}]}]}}}]}]};T("cf-account-picker",d);function h(t){let a=t.choosing!=="";return{...t,failureMessage:`Cloudflare could not be reached: ${t.failure}`,hasFailure:t.failure!=="",listState:t.loading?"loading":t.accounts.length>0?"listed":t.failure!==""?"failed":"empty",rows:t.accounts.map((o)=>({busy:a,id:o.id,label:t.choosing===o.id?"Selecting…":"Use this account",name:o.name}))}}function f(t){let a=document.createElement("div");a.style.pointerEvents="auto",a.setAttribute(ot,zt("dialog","cf-accounts")),t.layer.append(a);let o=!1,i=()=>{if(o)return;o=!0,t.onClosed()},n=y({...h({accounts:[],choosing:"",failure:"",loading:!0}),choose:(e)=>{t.onChoose(e)},closed:i,retry:()=>{t.onRetry()}}),s=null,l=I("cf-account-picker",n,a).then(async(e)=>{s=e;let r=e.root;if(o)return e.dispose(),r;if(await An(r),o)return r;return pn(r),r});return{close(){if(o)return;let e=s?.root;if(e instanceof HTMLElement)an(e);s?.dispose(),s=null,a.remove(),i()},host:a,ready:l,update(e){Object.assign(n,h({accounts:e.accounts??n.accounts,choosing:e.choosing??n.choosing,failure:e.failure??n.failure,loading:e.loading??n.loading}))}}}function w(){if(!Ve())return!1;let t=p();return Boolean(t.cfAccounts&&t.cfSelectAccount)}function m(t){return t instanceof Error?t.message:String(t)}function D(){if(!w())return Promise.resolve(null);return new Promise((t)=>{let a=[],o="",i=!1,n=(e)=>{if(i)return;i=!0,c.close(),t(e)};async function s(){c.update({failure:"",loading:!0});let e="";try{a=await p().cfAccounts?.()??[]}catch(r){a=[],e=m(r)}if(i)return;c.update({accounts:a,failure:e,loading:!1})}async function l(e){let r=a.find((u)=>u.id===e);if(!r||o!=="")return;o=e,c.update({choosing:e,failure:""});try{await p().cfSelectAccount?.({id:r.id,name:r.name})}catch(u){if(o="",!i)c.update({choosing:"",failure:m(u)});return}sp(),n(r)}let c=f({layer:Ct("dialog"),onChoose:(e)=>{l(e)},onClosed:()=>{n(null)},onRetry:()=>{s()}});s()})}export{D as openCfAccountPicker};
2
-
3
- //# debugId=1DE7924CC26B33BE64756E2164756E21
4
- //# sourceMappingURL=cf-account-picker-af1h381v.js.map
@@ -1,4 +0,0 @@
1
- import{Uf,K0,J0,RI,Y0}from"./studio-933e30n4.js";import"./studio-w0cgf6jg.js";import"./studio-xz2yxfcb.js";import"./studio-55h4mstj.js";export{Y0 as clearCfConnection,J0 as getCfAccountId,Uf as getCfToken,RI as setCfAccountId,K0 as setCfToken};
2
-
3
- //# debugId=9C1935A9C04FF1C964756E2164756E21
4
- //# sourceMappingURL=cf-settings-125tdm0w.js.map
@@ -1,4 +0,0 @@
1
- import{i}from"./iframe-entry-z6qrytv3.js";var h="jx-color-area",d={x:"saturation",y:"brightness"},x={ArrowDown:"y",ArrowLeft:"x",ArrowRight:"x",ArrowUp:"y"},b={ArrowDown:-1,ArrowLeft:-1,ArrowRight:1,ArrowUp:1},l=new WeakSet;function a(e){let t=e.currentTarget;return t instanceof HTMLElement&&t.localName===h?t:null}function f(e){return e.querySelector('[part="track"]')}function p(e){if(!(e instanceof Element))return null;let t=e.getAttribute("part");return t==="x"||t==="y"?t:null}function g(e){let t=Number(e.step);return Number.isFinite(t)&&t>0?t:1}function u(e,...t){for(let r of t)e.dispatchEvent(new Event(r,{bubbles:!0}))}function s(e,t,r){let n=d[t],o=i(r,g(e),0,100);if(e[n]===o)return!1;return e[n]=o,!0}function y(e,t){let r=a(t),n=p(t.target);if(!r||!n)return;t.stopPropagation(),s(e,n,Number(t.target.value)),u(r,"input")}function w(e,t){let r=a(t),n=p(t.target);if(!r||!n)return;t.stopPropagation(),s(e,n,Number(t.target.value)),u(r,"change")}function S(e,t){let r=a(t),n=p(t.target);if(!r||!n||e.disabled===!0)return;let o=x[t.key];if(!o)return;if(o===n&&!t.shiftKey)return;t.preventDefault(),t.stopPropagation();let c=g(e)*(t.shiftKey?10:1)*(b[t.key]??0);if(s(e,o,Number(e[d[o]])+c))u(r,"input","change")}function A(e,t,r){let n=f(t);if(!n)return!1;let o=n.getBoundingClientRect();if(o.width<=0||o.height<=0)return!1;let c=s(e,"x",(r.clientX-o.left)/o.width*100),m=s(e,"y",(1-(r.clientY-o.top)/o.height)*100);return c||m}function C(e,t){let r=a(t);if(!r||e.disabled===!0)return;t.preventDefault(),l.add(r);let n=f(r);if(n&&typeof n.setPointerCapture==="function")try{n.setPointerCapture(t.pointerId)}catch{}if(r.querySelector('[part="x"]')?.focus(),A(e,r,t))u(r,"input")}function P(e,t){let r=a(t);if(!r||!l.has(r))return;if(A(e,r,t))u(r,"input")}function T(e,t){let r=a(t);if(!r||!l.delete(r))return;let n=f(r);if(n&&typeof n.releasePointerCapture==="function"&&n.hasPointerCapture?.(t.pointerId))n.releasePointerCapture(t.pointerId);u(r,"change")}export{w as onAreaAxisChange,y as onAreaAxisInput,S as onAreaKeydown,C as onAreaPointerDown,P as onAreaPointerMove,T as onAreaPointerUp};
2
-
3
- //# debugId=D348F4E0A5F6C62464756E2164756E21
4
- //# sourceMappingURL=color-area-jqhna8zy.js.map
@@ -1,4 +0,0 @@
1
- import{r,s,u,h,g,b,f}from"./iframe-entry-z6qrytv3.js";import{t,n}from"./iframe-entry-f7mqjwpm.js";var F="jx-color-field",x=0,L=new WeakMap;function T(e){let o=e.currentTarget;return o instanceof HTMLElement&&o.localName===F?o:null}function S(e){let o=e.currentTarget??e.target;return o instanceof Element?o.closest(F):null}function H(e){return e.querySelector('[part="picker"]')}function M(e){return h({a:e.alpha===!0?Number(e.opacity)/100:1,h:Number(e.hue),s:Number(e.saturation),v:Number(e.brightness)})}function d(e,...o){for(let i of o)e.dispatchEvent(new Event(i,{bubbles:!0}))}function N(e,o){let i={...o,a:1};e.solid=s(i),e.ink=f(i)}function m(e){let o=M(e);e.value=e.format==="oklch"?b(g(o)):s(o),e.text=e.value,e.invalid=!1,N(e,o)}function y(e){let o=r(String(e.value??""))??r(String(e.resolved??""));if(e.invalid=!1,e.text=String(e.value??""),!o)return;if(N(e,o),s(o)===s(M(e)))return;let i=u(o);if(e.saturation=Number(i.s.toFixed(2)),e.brightness=Number(i.v.toFixed(2)),e.opacity=Number((i.a*100).toFixed(2)),i.s>0&&i.v>0)e.hue=Number(i.h.toFixed(2))}var k="[data-jx-channel]";function w(e){let{target:o}=e;return o instanceof Element?o.closest(k):null}function C(e,o,i){let l=T(o);if(!l||o.target===l)return;let a=w(o),c=a?.dataset.jxChannel;if(!a||!c)return;if(o.stopPropagation(),c==="text"){let p=String(o.target.value??"");e.text=p;let E=r(p);if(i==="input"){e.invalid=!1;return}if(!E){e.invalid=p!=="";return}v(e,E),m(e),d(l,"input","change");return}if(c==="system"||c==="palette"){let p=r(String(o.target.value??""));if(!p)return;v(e,{...p,a:e.alpha===!0?Number(e.opacity)/100:1})}else if(c==="area")e.saturation=Number(a.saturation),e.brightness=Number(a.brightness);else if(c==="hue")e.hue=Number(a.value);else if(c==="opacity")e.opacity=Number(a.value);else return;m(e),d(l,i)}function v(e,o){let i=u(o);if(e.saturation=Number(i.s.toFixed(2)),e.brightness=Number(i.v.toFixed(2)),e.alpha===!0)e.opacity=Number((i.a*100).toFixed(2));if(i.s>0&&i.v>0)e.hue=Number(i.h.toFixed(2))}function D(e,o){C(e,o,"input")}function A(e,o){C(e,o,"change")}function j(e,o){let i=S(o),l=i?H(i):null;if(!i||!l||e.disabled===!0)return;if(e.expanded===!0){n(l);return}let a=i.getBoundingClientRect();l.x=Math.round(a.left),l.y=Math.round(a.bottom),t(l,o.currentTarget instanceof Element?o.currentTarget:i)}function P(e){return e===!0&&typeof globalThis.EyeDropper==="function"}function I(e,o){let i=S(o),l=globalThis.EyeDropper;if(!i||!l||e.disabled===!0)return Promise.resolve();return new l().open().then((a)=>{let c=r(String(a?.sRGBHex??""));if(!c)return;v(e,c),m(e),d(i,"input","change")}).catch(()=>{})}function B(e,o){let i=T(o);if(!i)return;L.set(e,i),x+=1,e.uid=`jx-color-field-${x}`,y(e),new MutationObserver(()=>{y(e)}).observe(i,{attributeFilter:["data-resolved","data-value"],attributes:!0});let a=H(i);if(a)a.addEventListener("toggle",(c)=>{e.expanded=c.newState==="open"})}export{P as eyeDropperAvailable,I as onEyeDropper,A as onFieldChange,D as onFieldInput,B as onFieldMount,j as onOpenPicker,y as syncFromValue};
2
-
3
- //# debugId=9CC9B36A50642F1464756E2164756E21
4
- //# sourceMappingURL=color-field-embq5ctg.js.map
@@ -1,4 +0,0 @@
1
- import{e,i,E,r,s,u,h,g,v,b,x,y,f,C}from"./iframe-entry-z6qrytv3.js";export{e as clamp,y as contrastRatio,s as formatHex,b as formatOklch,h as hsvToRgb,C as inkOn,v as oklchToSrgb,r as parseColor,E as parseHex,f as preferredInk,x as relativeLuminance,u as rgbToHsv,i as snapToStep,g as srgbToOklch};
2
-
3
- //# debugId=47ECE90DEF1147ED64756E2164756E21
4
- //# sourceMappingURL=color-fpezvnkt.js.map
@@ -1,4 +0,0 @@
1
- import{i}from"./iframe-entry-z6qrytv3.js";var p="jx-color-slider",b={ArrowDown:-1,ArrowLeft:-1,ArrowRight:1,ArrowUp:1};function u(e){let n=e.currentTarget;return n instanceof HTMLElement&&n.localName===p?n:null}function d(e){return e.querySelector('input[part="input"]')}function l(e,...n){for(let t of n)e.dispatchEvent(new Event(t,{bubbles:!0}))}function f(e){let n=Number.isFinite(Number(e.min))?Number(e.min):0,t=Number(e.maxValue),r=Number(e.step);return{max:Number.isFinite(t)&&t>n?t:360,min:n,step:Number.isFinite(r)&&r>0?r:1}}function g(e,n){let t=u(n);if(!t||n.target===t)return;n.stopPropagation(),e.value=Number(n.target.value),l(t,"input")}function E(e,n){let t=u(n);if(!t||n.target===t)return;n.stopPropagation(),e.value=Number(n.target.value),l(t,"change")}function N(e,n){let t=u(n),r=b[n.key];if(!t||!r||!n.shiftKey||e.disabled===!0)return;n.preventDefault();let{max:s,min:c,step:a}=f(e),o=i(Number(e.value)+r*a*10,a,c,s);if(o===Number(e.value))return;e.value=o;let m=d(t);if(m)m.value=String(o);l(t,"input","change")}export{E as onSliderChange,g as onSliderInput,N as onSliderKeydown};
2
-
3
- //# debugId=628A064C8111904B64756E2164756E21
4
- //# sourceMappingURL=color-slider-1qmw7wqy.js.map
@@ -1,4 +0,0 @@
1
- import{t,n}from"./iframe-entry-f7mqjwpm.js";var E="jx-combobox",p=0;function b(o){let e=o.currentTarget;return e instanceof Element?e.closest(E):null}function g(o){return o.querySelector('input[part="input"]')}function v(o){return o.querySelector('[part="popup"]')}function a(o){return Array.isArray(o.options)?o.options:[]}function C(o,...e){for(let r of e)o.dispatchEvent(new Event(r,{bubbles:!0}))}function f(o){return o.disabled!==!0&&o.readonly!==!0}function S(o){let e=v(o);if(!e)return;let r=o.getBoundingClientRect(),i=e;i.x=Math.round(r.left),i.y=Math.round(r.bottom),t(e,o)}function c(o){let e=v(o);if(e)n(e)}function x(o,e){if(!f(o)||a(o).length===0)return!1;return S(e),!0}function w(o){let e=a(o),r=s(e,String(o.value??""));return r&&r.disabled!==!0?e.indexOf(r):-1}function m(o,e,r){let i=e<0?r>0?-1:0:e;for(let u of o.keys()){let l=((i+r*(u+1))%o.length+o.length)%o.length;if(o[l]?.disabled!==!0)return l}return-1}function s(o,e){let r=e.toLowerCase();return o.find((i)=>String(i.value).toLowerCase()===r)??null}function d(o,e,r){let i=String(r.value);o.value=i,o.committed=i,o.activeIndex=-1,c(e),g(e)?.focus(),C(e,"input","change")}function T(o,e){p+=1,o.uid=`jx-combobox-${p}`,o.committed=String(o.value??"")}function M(o,e){let r=b(e),i=e.target;if(!r||!(i instanceof HTMLInputElement))return;o.value=i.value,o.activeIndex=-1,x(o,r)}function y(o,e){let r=e.newState==="open";if(o.open=r,!r)o.activeIndex=-1}function H(o,e){let r=b(e);if(!r||!f(o))return;if(o.open===!0){c(r);return}if(x(o,r))o.activeIndex=w(o);g(r)?.focus()}function I(o,e){let r=b(e),i=String(e.detail??""),u=s(a(o),i);if(!r||!u)return;d(o,r,u)}function h(o,e){let r=b(e);if(!r)return;let i=e.target instanceof HTMLInputElement?e.target:null,u=i?i.value:String(o.value??""),l=s(a(o),u);if(o.allowsCustomValue===!0||u===""||l){o.value=l?String(l.value):u,o.committed=String(o.value),c(r);return}e.stopPropagation(),o.value=String(o.committed??""),C(r,"change")}function k(o,e){let r=b(e);if(!r||e.ctrlKey||e.metaKey)return;let i=a(o),u=Number(o.activeIndex??-1);switch(e.key){case"ArrowDown":{if(!f(o))return;if(o.open!==!0){if(!x(o,r))return;o.activeIndex=e.altKey?w(o):m(i,-1,1)}else if(!e.altKey)o.activeIndex=m(i,u,1);break}case"ArrowUp":{if(!f(o))return;if(e.altKey){c(r);break}if(o.open!==!0){if(!x(o,r))return;o.activeIndex=m(i,-1,-1)}else o.activeIndex=m(i,u,-1);break}case"Enter":{let l=o.open===!0&&u>=0?i[u]:void 0;if(!l){if(o.open===!0)c(r);return}d(o,r,l);break}case"Tab":{let l=o.open===!0&&u>=0?i[u]:void 0;if(l)d(o,r,l);else c(r);return}case"Escape":{if(o.open!==!0)return;c(r),e.stopPropagation();break}default:return}e.preventDefault()}export{c as closeList,g as inputOf,w as landingIndex,T as mountCombobox,m as nextIndex,H as onComboboxButton,h as onComboboxCommit,M as onComboboxInput,k as onComboboxKeydown,I as onComboboxPick,y as onComboboxToggle,S as openList,s as rowFor};
2
-
3
- //# debugId=207D4B954005839664756E2164756E21
4
- //# sourceMappingURL=combobox-773hdzyj.js.map
@@ -1,4 +0,0 @@
1
- import{st,zl,QC,Em,Nc}from"./studio-e81q1vb9.js";import"./studio-xz2yxfcb.js";export{Em as buildComponentInstance,st as componentRegistry,Nc as computeRelativePath,zl as loadComponentRegistry,QC as noteComponentSaved};
2
-
3
- //# debugId=D267E1B337DA9C3964756E2164756E21
4
- //# sourceMappingURL=components-ax2f1fnn.js.map
@@ -1,4 +0,0 @@
1
- import{Db,ex,US,qS,GS,KS}from"./studio-qkstvve9.js";import"./studio-7vg6jcd3.js";import"./studio-t6b6qe31.js";import"./studio-gjtpe62q.js";import"./studio-7zx31knw.js";import"./studio-yw05w8f0.js";import"./studio-tdcprbqb.js";import"./studio-rc6dvxjb.js";import"./studio-yb560vxr.js";import"./studio-gf0fz03c.js";import"./studio-t1xzawhr.js";import"./studio-e81q1vb9.js";import"./studio-w0cgf6jg.js";import"./studio-gx4dnjzd.js";import"./studio-74k29dy9.js";import"./studio-pcgz8heb.js";import"./studio-a2ke1e4t.js";import"./studio-epgrmqqm.js";import"./studio-rv11kfwa.js";import"./studio-5tnvjkz4.js";import"./studio-xz2yxfcb.js";import"./studio-g1shz58g.js";import"./studio-1q1sh2ax.js";import"./studio-9mccjwjh.js";import"./studio-zyqn40w4.js";import"./studio-ery42sqr.js";import"./studio-55h4mstj.js";export{ex as collectionDirs,Db as collectionInfo,GS as createCollectionSource,KS as createPagesSource,US as listCollectionEntryIds,qS as reloadDraftAwareGrids};
2
-
3
- //# debugId=18170DCAAFA17CE364756E2164756E21
4
- //# sourceMappingURL=content-source-108aqtk1.js.map