@jxsuite/studio 6.1.2 → 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 (522) hide show
  1. package/README.md +5 -5
  2. package/dist/chunks/2020-5wtzce5g.js +4 -0
  3. package/dist/chunks/adapter-5tphg7xe.js +4 -0
  4. package/dist/chunks/add-new-flow-psym14sn.js +4 -0
  5. package/dist/chunks/cf-account-picker-haqazq5r.js +4 -0
  6. package/dist/chunks/cf-settings-h2wrh6hq.js +4 -0
  7. package/dist/chunks/{color-area-0fj8a4ga.js → color-area-6rbra5dy.js} +2 -2
  8. package/dist/chunks/{color-field-xch8kx2g.js → color-field-gy56c94g.js} +3 -3
  9. package/dist/chunks/color-m7r1vk54.js +4 -0
  10. package/dist/chunks/{color-slider-jxd8v350.js → color-slider-sqqdyf6c.js} +2 -2
  11. package/dist/chunks/{combobox-p0efwjke.js → combobox-72h32ejk.js} +3 -3
  12. package/dist/chunks/components-r22xca09.js +4 -0
  13. package/dist/chunks/content-source-mmppmcyg.js +4 -0
  14. package/dist/chunks/convert-to-repeater-he70fc2b.js +4 -0
  15. package/dist/chunks/editor-ccd9jwsa.js +4 -0
  16. package/dist/chunks/entry-commands-6qxz9e8p.js +4 -0
  17. package/dist/chunks/extension-sections-0egb88dm.js +4 -0
  18. package/dist/chunks/file-ops-qnab36ek.js +4 -0
  19. package/dist/chunks/files-rcn56qvm.js +4 -0
  20. package/dist/chunks/format-host-yxz0kjjs.js +4 -0
  21. package/dist/chunks/fs-events-d1qxq4z4.js +4 -0
  22. package/dist/chunks/grid-open-4z1g062t.js +4 -0
  23. package/dist/chunks/{grid-view-d2wq9ezg.js → grid-view-qg1b5eqx.js} +25 -25
  24. package/dist/chunks/{icons-pnfz478q.js → icons-63bjtbs7.js} +2 -2
  25. package/dist/chunks/{iframe-entry-jdcktez8.js → iframe-entry-2zggzajv.js} +4 -4
  26. package/dist/chunks/{iframe-entry-zap785cw.js → iframe-entry-76j8vwwx.js} +4 -4
  27. package/dist/chunks/iframe-entry-99nr5zfb.js +5 -0
  28. package/dist/chunks/{iframe-entry-x0ygf2yr.js → iframe-entry-pkgmcgp0.js} +4 -4
  29. package/dist/chunks/iframe-host-ssv7kyj0.js +4 -0
  30. package/dist/chunks/{index-zpjmzqfk.js → index-32eqzv1k.js} +3 -3
  31. package/dist/chunks/index-f0jn7nnp.js +4 -0
  32. package/dist/chunks/{javascript-m54mnwp6.js → javascript-pjp734q4.js} +3 -3
  33. package/dist/chunks/jsonMode-njkvsa02.js +13 -0
  34. package/dist/chunks/jx-validate-ttasrbh7.js +4 -0
  35. package/dist/chunks/layers-bgyr11tr.js +4 -0
  36. package/dist/chunks/layers-panel-7ez66zeq.js +4 -0
  37. package/dist/chunks/{listbox-e74qjyq6.js → listbox-c421cf8c.js} +2 -2
  38. package/dist/chunks/lit-html-v9gh687x.js +4 -0
  39. package/dist/chunks/media-library-sq468wts.js +4 -0
  40. package/dist/chunks/media-picker-shfe59pt.js +4 -0
  41. package/dist/chunks/{menu-n6yzswmy.js → menu-bdpzbfvs.js} +2 -2
  42. package/dist/chunks/{monaco-binding-7gx83x3r.js → monaco-binding-vq1hgnn0.js} +3 -3
  43. package/dist/chunks/monaco-buffer-3afgwvbp.js +4 -0
  44. package/dist/chunks/monaco-setup-xrd2cbkp.js +4 -0
  45. package/dist/chunks/notify-kzrjr3fv.js +4 -0
  46. package/dist/chunks/parse-v77xtwv7.js +4 -0
  47. package/dist/chunks/platform-7v4rtd7m.js +4 -0
  48. package/dist/chunks/popover-b89sfej7.js +4 -0
  49. package/dist/chunks/publish-panel-2z9gw8ee.js +4 -0
  50. package/dist/chunks/publish-quick-qx2455cj.js +4 -0
  51. package/dist/chunks/publish-workspace-wrc1dgwx.js +4 -0
  52. package/dist/chunks/quick-search-n0t0eqxb.js +4 -0
  53. package/dist/chunks/references-9547rg5s.js +4 -0
  54. package/dist/chunks/right-panel-wsgnr9pn.js +4 -0
  55. package/dist/chunks/source-control-kwktr9y6.js +4 -0
  56. package/dist/chunks/{split-n2gfpm5m.js → split-c9zfdgxf.js} +2 -2
  57. package/dist/chunks/studio-03ct6yfv.js +9 -0
  58. package/dist/chunks/studio-07rcfje3.js +5 -0
  59. package/dist/chunks/studio-3e54qh39.js +7 -0
  60. package/dist/chunks/studio-3exxhz5g.js +5 -0
  61. package/dist/chunks/studio-3q40e3rj.js +5 -0
  62. package/dist/chunks/studio-3qeh9t0h.js +6 -0
  63. package/dist/chunks/studio-3qqjeep5.js +6 -0
  64. package/dist/chunks/studio-43sd2mam.js +4 -0
  65. package/dist/chunks/studio-4hp8pkyt.js +5 -0
  66. package/dist/chunks/studio-58xg6j2q.js +9 -0
  67. package/dist/chunks/studio-5g0rprdt.js +7 -0
  68. package/dist/chunks/{studio-2j1cb95x.js → studio-6m380wp7.js} +4 -4
  69. package/dist/chunks/studio-80jyh1xh.js +4 -0
  70. package/dist/chunks/studio-83mk4bgg.js +9 -0
  71. package/dist/chunks/{studio-v0jzqdjm.js → studio-881z1xrx.js} +4 -4
  72. package/dist/chunks/studio-8m0y2qe7.js +5 -0
  73. package/dist/chunks/{studio-d81xfh1g.js → studio-8tr6cfrc.js} +4 -4
  74. package/dist/chunks/studio-8vcvfs7r.js +6 -0
  75. package/dist/chunks/studio-9tmebf0s.js +5 -0
  76. package/dist/chunks/studio-a2bvaptz.js +5 -0
  77. package/dist/chunks/studio-b7y5mr30.js +5 -0
  78. package/dist/chunks/studio-bavb31r0.js +5 -0
  79. package/dist/chunks/{studio-dgz8d0c1.js → studio-bbe4c90a.js} +4 -4
  80. package/dist/chunks/studio-c05wdnt3.js +5 -0
  81. package/dist/chunks/studio-ccv2svc6.js +5 -0
  82. package/dist/chunks/studio-d5grtb9e.js +16 -0
  83. package/dist/chunks/studio-df0baea9.js +5 -0
  84. package/dist/chunks/studio-dgk4dqtx.js +7 -0
  85. package/dist/chunks/studio-e1g64q43.js +5 -0
  86. package/dist/chunks/studio-ed1hp6zf.js +6 -0
  87. package/dist/chunks/studio-ed3xx40h.js +7 -0
  88. package/dist/chunks/studio-f14e1zdj.js +5 -0
  89. package/dist/chunks/studio-fbhxxc5f.js +5 -0
  90. package/dist/chunks/studio-fyh0jc96.js +5 -0
  91. package/dist/chunks/studio-gcxk20n7.js +5 -0
  92. package/dist/chunks/studio-jaaz8ce9.js +5 -0
  93. package/dist/chunks/{studio-90pq9km1.js → studio-jcnsdaep.js} +4 -4
  94. package/dist/chunks/studio-jsgf2q5k.js +7 -0
  95. package/dist/chunks/{studio-0q988f9w.js → studio-k3xxbagr.js} +3 -3
  96. package/dist/chunks/{studio-5ve6bbep.js → studio-k7evxqh4.js} +4 -4
  97. package/dist/chunks/studio-kt3pjkwd.js +5 -0
  98. package/dist/chunks/studio-m8g16bgz.js +5 -0
  99. package/dist/chunks/studio-mn0476ag.js +5 -0
  100. package/dist/chunks/studio-mx1smyq0.js +5 -0
  101. package/dist/chunks/studio-n0c5h6mf.js +5 -0
  102. package/dist/chunks/{studio-485046te.js → studio-nh6d342n.js} +7 -7
  103. package/dist/chunks/studio-nqxqf8p2.js +4 -0
  104. package/dist/chunks/studio-p4nrkvqr.js +5 -0
  105. package/dist/chunks/{studio-1fxkaaea.js → studio-pbxa5fpc.js} +4 -4
  106. package/dist/chunks/studio-pgmvdv7z.js +7 -0
  107. package/dist/chunks/studio-ph84avkf.js +5 -0
  108. package/dist/chunks/{studio-tq0rtfwj.js → studio-q0mvbaq6.js} +4 -4
  109. package/dist/chunks/studio-q0tccd43.js +5 -0
  110. package/dist/chunks/studio-q7rtx6zq.js +14 -0
  111. package/dist/chunks/{studio-a3g98wjr.js → studio-qgh13jtz.js} +4 -4
  112. package/dist/chunks/studio-qmn1xc24.js +5 -0
  113. package/dist/chunks/studio-qwdqwkj0.js +5 -0
  114. package/dist/chunks/studio-r5qy30vx.js +5 -0
  115. package/dist/chunks/studio-rj9eamf8.js +5 -0
  116. package/dist/chunks/studio-rptgsk96.js +5 -0
  117. package/dist/chunks/studio-rthyg42z.js +928 -0
  118. package/dist/chunks/studio-s19tp1xr.js +5 -0
  119. package/dist/chunks/studio-s32578pn.js +5 -0
  120. package/dist/chunks/studio-svb7yyve.js +5 -0
  121. package/dist/chunks/studio-syreb644.js +5 -0
  122. package/dist/chunks/studio-tf9jryb1.js +10 -0
  123. package/dist/chunks/studio-tfkznv39.js +5 -0
  124. package/dist/chunks/studio-tft6r105.js +5 -0
  125. package/dist/chunks/studio-txf2kysx.js +5 -0
  126. package/dist/chunks/studio-v8867ddv.js +12 -0
  127. package/dist/chunks/studio-vxq7fcvv.js +5 -0
  128. package/dist/chunks/studio-w4rz9hdk.js +5 -0
  129. package/dist/chunks/studio-wbcjbhy1.js +9 -0
  130. package/dist/chunks/studio-wc649wss.js +5 -0
  131. package/dist/chunks/studio-wys23mxz.js +5 -0
  132. package/dist/chunks/studio-x1x167jh.js +5 -0
  133. package/dist/chunks/studio-x9hsze61.js +5 -0
  134. package/dist/chunks/studio-y0n7yxea.js +9 -0
  135. package/dist/chunks/studio-y3ahhdpx.js +5 -0
  136. package/dist/chunks/studio-z97c48fk.js +5 -0
  137. package/dist/chunks/studio-zat62m0c.js +5 -0
  138. package/dist/chunks/studio-zcd2e7yz.js +5 -0
  139. package/dist/chunks/studio-zz9qe3rw.js +64 -0
  140. package/dist/chunks/toast-1gv0h53h.js +4 -0
  141. package/dist/chunks/{toast-host-ke5z4ng7.js → toast-host-1yg5ar8d.js} +3 -3
  142. package/dist/chunks/{tooltip-5v8ngwj2.js → tooltip-yypz28gq.js} +3 -3
  143. package/dist/chunks/{tree-mdq3v5cw.js → tree-9xa4hm7n.js} +2 -2
  144. package/dist/chunks/tsMode-epyfz1hv.js +14 -0
  145. package/dist/chunks/workspace-dz7nxfhv.js +4 -0
  146. package/dist/chunks/workspace-home-xsd7hkjw.js +4 -0
  147. package/dist/chunks/{ws-client-nze0k6mv.js → ws-client-bv552sfx.js} +3 -3
  148. package/dist/iframe-entry.js +20 -16
  149. package/dist/manifest.json +77 -63
  150. package/dist/studio.js +103 -104
  151. package/dist/workers/ts.worker.js +3 -3
  152. package/package.json +12 -11
  153. package/src/browse/component-examples.ts +272 -0
  154. package/src/browse/library-commands.ts +64 -104
  155. package/src/browse/library-layouts.ts +263 -49
  156. package/src/browse/library-model.ts +181 -133
  157. package/src/browse/library-pane.ts +738 -446
  158. package/src/browse/library-preview.ts +149 -19
  159. package/src/browse/library-source.ts +308 -41
  160. package/src/browse/preview-root.ts +78 -0
  161. package/src/browse/preview-style.ts +155 -0
  162. package/src/canvas/asset-refs.ts +16 -1
  163. package/src/canvas/canvas-live-render.ts +222 -30
  164. package/src/canvas/canvas-origin.ts +37 -12
  165. package/src/canvas/canvas-page-context.ts +112 -0
  166. package/src/canvas/canvas-render.ts +113 -107
  167. package/src/canvas/canvas-utils.ts +57 -12
  168. package/src/canvas/iframe-drop.ts +107 -0
  169. package/src/canvas/iframe-entry.ts +24 -12
  170. package/src/canvas/iframe-host.ts +134 -62
  171. package/src/canvas/iframe-keys.ts +11 -0
  172. package/src/canvas/iframe-patch.ts +8 -7
  173. package/src/canvas/iframe-protocol.ts +24 -5
  174. package/src/canvas/iframe-render.ts +48 -1
  175. package/src/canvas/iframe-subtree.ts +5 -2
  176. package/src/canvas/npm-modules.ts +22 -0
  177. package/src/canvas/preview-navigate.ts +16 -0
  178. package/src/canvas/repeater-sources.ts +200 -0
  179. package/src/canvas/stage-scrollbar.ts +5 -1
  180. package/src/canvas/surface-registry.ts +6 -0
  181. package/src/commands/app-commands.ts +16 -6
  182. package/src/commands/budget.ts +10 -8
  183. package/src/commands/context.ts +35 -10
  184. package/src/commands/defaults.ts +69 -45
  185. package/src/commands/keymap.ts +9 -0
  186. package/src/commands/levels.ts +11 -5
  187. package/src/commands/live-context.ts +2 -0
  188. package/src/commands/registry.ts +10 -1
  189. package/src/content/collection-match.ts +6 -5
  190. package/src/content/collection-pages.ts +412 -0
  191. package/src/content/content-collections.ts +270 -0
  192. package/src/content/entry-commands.ts +51 -60
  193. package/src/content/entry-editor.ts +111 -18
  194. package/src/content/entry-fields.ts +13 -1
  195. package/src/content/entry-inspector.ts +225 -0
  196. package/src/content/entry-model.ts +17 -3
  197. package/src/content/entry-open.ts +80 -0
  198. package/src/content/entry-summaries.ts +440 -0
  199. package/src/content/file-record-ids.ts +80 -0
  200. package/src/content/file-records.ts +125 -0
  201. package/src/content/page-summaries.ts +129 -0
  202. package/src/content/record-entry.ts +201 -0
  203. package/src/content/writing-banner.ts +177 -0
  204. package/src/create/add-new-commands.ts +185 -0
  205. package/src/create/add-new-flow.ts +1116 -0
  206. package/src/create/add-new.ts +1014 -0
  207. package/src/create/element-name.ts +121 -0
  208. package/src/editor/convert-to-component.ts +67 -43
  209. package/src/editor/file-drop-action.ts +9 -1
  210. package/src/editor/inline-edit-apply.ts +44 -0
  211. package/src/editor/inline-edit.ts +10 -0
  212. package/src/editor/insert-component.ts +91 -0
  213. package/src/editor/insert-zone-action.ts +13 -4
  214. package/src/editor/shortcuts.ts +44 -22
  215. package/src/editor/slash-menu.ts +51 -8
  216. package/src/files/components.ts +74 -10
  217. package/src/files/file-ops.ts +15 -5
  218. package/src/files/files.ts +164 -150
  219. package/src/files/fs-events.ts +18 -7
  220. package/src/files/media-meta.ts +95 -1
  221. package/src/files/media-types.ts +55 -0
  222. package/src/files/media-upload.ts +209 -52
  223. package/src/files/new-file-name.ts +156 -0
  224. package/src/files/serialize-document.ts +13 -3
  225. package/src/format/format-host.ts +15 -0
  226. package/src/github/github-auth.ts +2 -2
  227. package/src/github/github-publish.ts +4 -3
  228. package/src/grid/grid-controller.ts +5 -1
  229. package/src/grid/grid-open.ts +0 -27
  230. package/src/grid/grid-panel.ts +54 -2
  231. package/src/grid/grid-reveal.ts +34 -0
  232. package/src/grid/grid-source.ts +3 -25
  233. package/src/grid/grid-view.ts +31 -6
  234. package/src/grid/sources/content-source.ts +75 -7
  235. package/src/grid/tabulator-tables.d.ts +6 -0
  236. package/src/hosting/document.ts +2 -2
  237. package/src/i18n/i18n-commands.ts +2 -1
  238. package/src/media/media-commands.ts +181 -0
  239. package/src/media/media-library-model.ts +232 -0
  240. package/src/media/media-library.ts +1283 -0
  241. package/src/media/media-pane.ts +47 -19
  242. package/src/packages/pull-package-sync.ts +1 -1
  243. package/src/panels/activity-panel.ts +21 -5
  244. package/src/panels/ai-chat/chat-markdown.ts +8 -8
  245. package/src/panels/block-action-bar.ts +11 -11
  246. package/src/panels/canvas-dnd-bridge.ts +5 -2
  247. package/src/panels/chat-panel.ts +6 -6
  248. package/src/panels/collections-panel.ts +306 -0
  249. package/src/panels/component-preview.ts +35 -13
  250. package/src/panels/data-explorer.ts +1 -1
  251. package/src/panels/data-grid.ts +4 -0
  252. package/src/panels/dnd.ts +17 -30
  253. package/src/panels/elements-panel.ts +9 -2
  254. package/src/panels/empty-state.ts +2 -2
  255. package/src/panels/formula-workspace.ts +2 -3
  256. package/src/panels/frontmatter-fields.ts +9 -9
  257. package/src/panels/git-diff-open.ts +9 -5
  258. package/src/panels/head-panel.ts +369 -103
  259. package/src/panels/i18n-panel.ts +11 -10
  260. package/src/panels/imports-panel.ts +2 -0
  261. package/src/panels/jump-bar.ts +27 -2
  262. package/src/panels/layers-panel.ts +36 -30
  263. package/src/panels/left-panel.ts +22 -8
  264. package/src/panels/navigator-panels.ts +23 -11
  265. package/src/panels/pane-context.ts +111 -29
  266. package/src/panels/pane-grid.ts +6 -6
  267. package/src/panels/panel-registry.ts +14 -9
  268. package/src/panels/properties-panel.ts +7 -3
  269. package/src/panels/right-panel.ts +199 -43
  270. package/src/panels/seo-modal.ts +41 -108
  271. package/src/panels/settings-menu.ts +52 -50
  272. package/src/panels/settings-pane.ts +268 -162
  273. package/src/panels/signals-panel.ts +3 -4
  274. package/src/panels/site-model.ts +367 -0
  275. package/src/panels/site-panel.ts +638 -0
  276. package/src/panels/style-panel.ts +37 -3
  277. package/src/panels/stylebook-doc.ts +142 -10
  278. package/src/panels/stylebook-layers-panel.ts +39 -80
  279. package/src/panels/stylebook-panel.ts +47 -10
  280. package/src/panels/styles-panel.ts +327 -0
  281. package/src/panels/tab-strip.ts +109 -25
  282. package/src/platform.ts +1 -1
  283. package/src/platforms/cloud.ts +28 -1
  284. package/src/platforms/default-platform.ts +4 -4
  285. package/src/platforms/devserver.ts +51 -25
  286. package/src/publish/deploy-checklist.ts +12 -7
  287. package/src/publish/pages-service.ts +38 -14
  288. package/src/publish/publish-changes.ts +491 -0
  289. package/src/publish/publish-commands.ts +83 -18
  290. package/src/publish/publish-ids.ts +49 -0
  291. package/src/publish/publish-quick.ts +148 -0
  292. package/src/publish/publish-workspace.ts +926 -0
  293. package/src/publish/source-control.ts +907 -0
  294. package/src/services/automation.ts +16 -20
  295. package/src/services/cf-settings.ts +4 -4
  296. package/src/services/connection.ts +2 -2
  297. package/src/services/directory-picker.ts +2 -2
  298. package/src/services/references.ts +0 -0
  299. package/src/services/render-critic.ts +21 -2
  300. package/src/services/settings/definitions.ts +25 -14
  301. package/src/settings/contributed-section.ts +49 -10
  302. package/src/settings/css-vars-editor.ts +93 -27
  303. package/src/settings/developer-panels.ts +43 -0
  304. package/src/settings/extension-sections.ts +20 -2
  305. package/src/settings/general-settings.ts +91 -21
  306. package/src/settings/preferences-dialog.ts +8 -1
  307. package/src/settings/project-sections.ts +27 -10
  308. package/src/settings/schema-field-ui.ts +3 -1
  309. package/src/settings/section-registry.ts +116 -11
  310. package/src/settings/settings-dialog.ts +192 -0
  311. package/src/settings/settings-document.ts +182 -162
  312. package/src/shell.ts +467 -431
  313. package/src/site-context.ts +64 -10
  314. package/src/state.ts +28 -9
  315. package/src/studio.ts +194 -41
  316. package/src/style/project-styles.ts +34 -0
  317. package/src/style/stylebook-specimens.ts +89 -0
  318. package/src/style/stylebook-target.ts +26 -0
  319. package/src/style/tag-inheritance.ts +105 -0
  320. package/src/style/variables-focus.ts +61 -0
  321. package/src/style/variables-view.ts +235 -0
  322. package/src/surfaces/add-new.json +1482 -0
  323. package/src/surfaces/add-new.ts +325 -0
  324. package/src/surfaces/ai-chat.ts +2 -2
  325. package/src/surfaces/boot-failure.json +4 -3
  326. package/src/surfaces/bottom-dock.json +1 -1
  327. package/src/surfaces/canvas-stage.json +30 -19
  328. package/src/surfaces/canvas-stage.ts +5 -5
  329. package/src/surfaces/collections-panel.json +615 -0
  330. package/src/surfaces/collections-panel.ts +168 -0
  331. package/src/surfaces/commandbar.json +241 -96
  332. package/src/surfaces/commandbar.ts +134 -99
  333. package/src/surfaces/empty-state.json +1 -1
  334. package/src/surfaces/entry-editor.json +136 -0
  335. package/src/surfaces/entry-editor.ts +21 -0
  336. package/src/surfaces/entry-inspector.json +371 -0
  337. package/src/surfaces/entry-inspector.ts +143 -0
  338. package/src/surfaces/inspector-dock.json +162 -14
  339. package/src/surfaces/inspector-dock.ts +46 -19
  340. package/src/surfaces/library-pane.json +670 -437
  341. package/src/surfaces/library-pane.ts +94 -59
  342. package/src/surfaces/media-browser.json +62 -6
  343. package/src/surfaces/media-browser.ts +15 -1
  344. package/src/surfaces/media-field.json +1 -1
  345. package/src/surfaces/media-library.json +1586 -0
  346. package/src/surfaces/media-library.ts +282 -0
  347. package/src/surfaces/media-pick-dialog.json +71 -0
  348. package/src/surfaces/media-pick-dialog.ts +132 -0
  349. package/src/surfaces/menu.ts +18 -0
  350. package/src/surfaces/pane-context.json +144 -77
  351. package/src/surfaces/pane-context.ts +24 -0
  352. package/src/surfaces/panel-deploy-checklist.json +12 -6
  353. package/src/surfaces/panel-deploy-checklist.ts +3 -1
  354. package/src/surfaces/panel-page.json +72 -2
  355. package/src/surfaces/panel-page.ts +38 -7
  356. package/src/surfaces/panel-signals.json +1 -1
  357. package/src/surfaces/panel-signals.ts +5 -5
  358. package/src/surfaces/panel-stylebook-layers.json +71 -204
  359. package/src/surfaces/panel-stylebook-layers.ts +0 -21
  360. package/src/surfaces/preferences.json +120 -48
  361. package/src/surfaces/preferences.ts +8 -0
  362. package/src/surfaces/publish-quick.json +428 -0
  363. package/src/surfaces/publish-quick.ts +165 -0
  364. package/src/surfaces/publish-workspace.json +2892 -0
  365. package/src/surfaces/publish-workspace.ts +391 -0
  366. package/src/surfaces/rail.json +1 -159
  367. package/src/surfaces/rail.ts +18 -75
  368. package/src/surfaces/schema-form.json +10 -2
  369. package/src/surfaces/schema-form.ts +2 -0
  370. package/src/surfaces/seo.json +1 -1
  371. package/src/surfaces/settings-contributed.json +5 -5
  372. package/src/surfaces/settings-contributed.ts +18 -2
  373. package/src/surfaces/settings-css-vars.json +44 -36
  374. package/src/surfaces/settings-css-vars.ts +77 -4
  375. package/src/surfaces/settings-deploy.json +2 -15
  376. package/src/surfaces/settings-deploy.ts +1 -1
  377. package/src/surfaces/settings-dialog.json +51 -0
  378. package/src/surfaces/settings-dialog.ts +169 -0
  379. package/src/surfaces/settings-overview.json +3 -3
  380. package/src/surfaces/settings-overview.ts +9 -2
  381. package/src/surfaces/settings-pane.json +269 -46
  382. package/src/surfaces/settings-pane.ts +85 -24
  383. package/src/surfaces/shell.json +2 -1
  384. package/src/surfaces/site-panel.json +1029 -0
  385. package/src/surfaces/site-panel.ts +233 -0
  386. package/src/surfaces/slash-menu.json +63 -21
  387. package/src/surfaces/slash-menu.ts +23 -0
  388. package/src/surfaces/statusbar.ts +39 -15
  389. package/src/surfaces/styles-panel.json +735 -0
  390. package/src/surfaces/styles-panel.ts +195 -0
  391. package/src/surfaces/styles-variables.json +149 -0
  392. package/src/surfaces/styles-variables.ts +145 -0
  393. package/src/surfaces/tab-strip.json +4 -4
  394. package/src/surfaces/welcome.ts +1 -1
  395. package/src/surfaces/writing-banner.json +94 -0
  396. package/src/surfaces/writing-banner.ts +80 -0
  397. package/src/tabs/bare-repeaters.ts +101 -0
  398. package/src/tabs/tab.ts +47 -7
  399. package/src/types.ts +21 -26
  400. package/src/ui/form-controls.ts +47 -8
  401. package/src/ui/layers.ts +13 -0
  402. package/src/ui/media-picker.ts +284 -40
  403. package/src/ui/regions.ts +7 -6
  404. package/src/ui/schema-form.ts +259 -27
  405. package/src/ui/virtual-window.ts +26 -1
  406. package/src/utils/base64.ts +3 -3
  407. package/src/utils/edit-display.ts +322 -67
  408. package/src/utils/local-day.ts +18 -0
  409. package/src/workspace/pane-derive.ts +4 -4
  410. package/src/workspace/session.ts +28 -7
  411. package/src/workspace/tab-workspace.ts +137 -0
  412. package/src/workspace/workspace-back.ts +189 -0
  413. package/src/workspace/workspace-home.ts +133 -0
  414. package/src/workspace/workspace-ids.ts +129 -0
  415. package/src/workspace/workspace-switch.ts +372 -0
  416. package/src/workspace/workspace.ts +125 -11
  417. package/styles/shell-frame.css +30 -7
  418. package/styles/shell-frame.json +15 -3
  419. package/dist/chunks/2020-f2gkpy8d.js +0 -4
  420. package/dist/chunks/adapter-4912g339.js +0 -4
  421. package/dist/chunks/cf-account-picker-wccaenh6.js +0 -4
  422. package/dist/chunks/cf-settings-br6105tr.js +0 -4
  423. package/dist/chunks/color-28ksk2qm.js +0 -4
  424. package/dist/chunks/components-db68vsn7.js +0 -4
  425. package/dist/chunks/content-source-1449qesq.js +0 -4
  426. package/dist/chunks/convert-to-repeater-5h457egj.js +0 -4
  427. package/dist/chunks/editor-x9jn86a7.js +0 -4
  428. package/dist/chunks/entry-commands-may24cpt.js +0 -4
  429. package/dist/chunks/extension-sections-pvr14vxr.js +0 -4
  430. package/dist/chunks/file-ops-x9v54pcj.js +0 -4
  431. package/dist/chunks/files-j3knqf0s.js +0 -4
  432. package/dist/chunks/format-host-tyre2trb.js +0 -4
  433. package/dist/chunks/fs-events-64ma9htc.js +0 -4
  434. package/dist/chunks/git-panel-84ps5dex.js +0 -4
  435. package/dist/chunks/iframe-entry-fvbk89gm.js +0 -5
  436. package/dist/chunks/iframe-host-ck6vejt5.js +0 -4
  437. package/dist/chunks/index-b8xw3vy9.js +0 -4
  438. package/dist/chunks/jsonMode-w15cmrcm.js +0 -13
  439. package/dist/chunks/jx-validate-at3zn8wa.js +0 -4
  440. package/dist/chunks/layers-h4xp1pss.js +0 -4
  441. package/dist/chunks/layers-panel-m5hw1d7g.js +0 -4
  442. package/dist/chunks/lit-html-8t8t3dnr.js +0 -4
  443. package/dist/chunks/media-picker-2cweexc5.js +0 -4
  444. package/dist/chunks/menu-ynw13y0s.js +0 -4
  445. package/dist/chunks/monaco-buffer-qzxn567r.js +0 -4
  446. package/dist/chunks/monaco-setup-gxf6656g.js +0 -4
  447. package/dist/chunks/notify-cj5zbrs2.js +0 -4
  448. package/dist/chunks/parse-b7ddhr8m.js +0 -4
  449. package/dist/chunks/platform-3dfws9js.js +0 -4
  450. package/dist/chunks/popover-jt2gxmzs.js +0 -4
  451. package/dist/chunks/publish-panel-1gvxbj21.js +0 -4
  452. package/dist/chunks/quick-search-0dajrwqg.js +0 -4
  453. package/dist/chunks/references-49qgt404.js +0 -4
  454. package/dist/chunks/right-panel-jm1bwe53.js +0 -4
  455. package/dist/chunks/section-registry-6kwc4fky.js +0 -4
  456. package/dist/chunks/studio-0rt52vpq.js +0 -5
  457. package/dist/chunks/studio-18vgbhs5.js +0 -5
  458. package/dist/chunks/studio-24mccdrj.js +0 -5
  459. package/dist/chunks/studio-2eh507zk.js +0 -9
  460. package/dist/chunks/studio-2hcbccfv.js +0 -5
  461. package/dist/chunks/studio-2jbs3rxv.js +0 -5
  462. package/dist/chunks/studio-4h8k4dw9.js +0 -5
  463. package/dist/chunks/studio-5f6n18kx.js +0 -5
  464. package/dist/chunks/studio-5gthpky6.js +0 -5
  465. package/dist/chunks/studio-6ep3js6b.js +0 -9
  466. package/dist/chunks/studio-6wkmf3wz.js +0 -9
  467. package/dist/chunks/studio-841rf3cg.js +0 -5
  468. package/dist/chunks/studio-8gmwgheg.js +0 -5
  469. package/dist/chunks/studio-8qm0ep50.js +0 -5
  470. package/dist/chunks/studio-924p1tm1.js +0 -6
  471. package/dist/chunks/studio-a3shpz9y.js +0 -5
  472. package/dist/chunks/studio-amsbaaar.js +0 -6
  473. package/dist/chunks/studio-at5spjbc.js +0 -7
  474. package/dist/chunks/studio-b2xv945e.js +0 -5
  475. package/dist/chunks/studio-bn5nkafw.js +0 -5
  476. package/dist/chunks/studio-bw6q5xjf.js +0 -9
  477. package/dist/chunks/studio-c7q0t9x1.js +0 -5
  478. package/dist/chunks/studio-camnhc96.js +0 -6
  479. package/dist/chunks/studio-cffqvnzd.js +0 -5
  480. package/dist/chunks/studio-efvfrsf8.js +0 -5
  481. package/dist/chunks/studio-er30bpcx.js +0 -5
  482. package/dist/chunks/studio-ezscgr64.js +0 -5
  483. package/dist/chunks/studio-ffrrncvz.js +0 -5
  484. package/dist/chunks/studio-fpphgn8y.js +0 -10
  485. package/dist/chunks/studio-j1kvhdjk.js +0 -4
  486. package/dist/chunks/studio-j430n16g.js +0 -7
  487. package/dist/chunks/studio-jjkg84nj.js +0 -5
  488. package/dist/chunks/studio-m0q32ars.js +0 -4
  489. package/dist/chunks/studio-m6bdst11.js +0 -5
  490. package/dist/chunks/studio-nv2cptd4.js +0 -64
  491. package/dist/chunks/studio-nwfrc98n.js +0 -5
  492. package/dist/chunks/studio-p1wgvp7r.js +0 -5
  493. package/dist/chunks/studio-pag2wncm.js +0 -5
  494. package/dist/chunks/studio-qvanvzfd.js +0 -5
  495. package/dist/chunks/studio-qwa64kt7.js +0 -5
  496. package/dist/chunks/studio-rk1zc4x3.js +0 -928
  497. package/dist/chunks/studio-se2r3ptc.js +0 -5
  498. package/dist/chunks/studio-sg2a0dh0.js +0 -5
  499. package/dist/chunks/studio-tjzjhe68.js +0 -5
  500. package/dist/chunks/studio-v2w7q8r1.js +0 -7
  501. package/dist/chunks/studio-v5vjq1h0.js +0 -4
  502. package/dist/chunks/studio-v8aga3vp.js +0 -14
  503. package/dist/chunks/studio-vfcdrfmv.js +0 -5
  504. package/dist/chunks/studio-vmfkgdjf.js +0 -5
  505. package/dist/chunks/studio-wt1816jj.js +0 -5
  506. package/dist/chunks/studio-wz73q5kq.js +0 -4
  507. package/dist/chunks/studio-y04qtxvp.js +0 -7
  508. package/dist/chunks/studio-y21g8zzg.js +0 -5
  509. package/dist/chunks/studio-y64hrt8p.js +0 -12
  510. package/dist/chunks/studio-ynn90f58.js +0 -16
  511. package/dist/chunks/studio-yxz682sx.js +0 -5
  512. package/dist/chunks/studio-zp7snvkq.js +0 -5
  513. package/dist/chunks/studio-zq4z6tm6.js +0 -5
  514. package/dist/chunks/toast-c9fn075p.js +0 -4
  515. package/dist/chunks/tsMode-sf49ee9x.js +0 -14
  516. package/dist/chunks/workspace-jtfahpee.js +0 -4
  517. package/src/panels/frontmatter-panel.ts +0 -711
  518. package/src/panels/git-panel.ts +0 -1108
  519. package/src/surfaces/doc-header.json +0 -776
  520. package/src/surfaces/doc-header.ts +0 -222
  521. package/src/surfaces/git-panel.json +0 -1880
  522. package/src/surfaces/git-panel.ts +0 -264
@@ -0,0 +1,168 @@
1
+ /// <reference lib="dom" />
2
+ /**
3
+ * The Collections panel surface: the Content workspace's Navigator, as a Jx document over the kit
4
+ * (`specs/studio.md` §22.5).
5
+ *
6
+ * This is the adapter. `panels/collections-panel.ts` keeps every decision — which collections the
7
+ * project has and how many entries each holds, which saved grid views sit under them, whether an
8
+ * entry is being written and which collection it is in, what each entry is called and whether it is
9
+ * a draft — and hands this module one projection whose every field is already a string. The
10
+ * document draws one of three bodies (no project, the collection list, one collection's entries),
11
+ * chosen by one word.
12
+ *
13
+ * @docs studio/projects/browse
14
+ */
15
+
16
+ import { reactive } from "../reactivity";
17
+ import { mountSurface, registerSurface } from "../ui/surface";
18
+ import collectionsPanelDoc from "./collections-panel.json";
19
+ import type { SurfaceHandle } from "../ui/surface";
20
+
21
+ registerSurface("collections-panel", collectionsPanelDoc);
22
+
23
+ /** One saved grid view under a collection. */
24
+ export interface CollectionViewRow {
25
+ /** The view's identity across repaints: the collection key and the view's name. */
26
+ key: string;
27
+ name: string;
28
+ }
29
+
30
+ /** One collection in the list. */
31
+ export interface CollectionRow {
32
+ key: string;
33
+ title: string;
34
+ /** Its entry count, already a string ("12"), or "" while the scan runs. */
35
+ count: string;
36
+ /** `"true"` for the collection the Content home is showing. */
37
+ selected: "true" | "false";
38
+ views: CollectionViewRow[];
39
+ }
40
+
41
+ /** One entry in the entries list. */
42
+ export interface CollectionEntryRow {
43
+ path: string;
44
+ title: string;
45
+ /** "Draft", "Published", or "". */
46
+ status: string;
47
+ /** Whether a thumbnail is drawn, or the document glyph. */
48
+ art: "image" | "glyph";
49
+ thumb: string;
50
+ /** `"true"` for the entry being written. */
51
+ selected: "true" | "false";
52
+ /** The language it is written in, by its autonym ("français"), or "" in a one-language collection. */
53
+ locale: string;
54
+ /** That language's tag, for the label's own `lang`; "" with no language. */
55
+ lang: string;
56
+ }
57
+
58
+ /** Everything the document draws. */
59
+ export interface CollectionsPanelValues {
60
+ /** `none` asks for a project; `list` draws the collections; `entries` draws one collection's. */
61
+ body: "none" | "list" | "entries";
62
+ collections: CollectionRow[];
63
+ /** The collection whose entries are listed, for the back row: "Posts". */
64
+ backTitle: string;
65
+ backCount: string;
66
+ entriesState: "loading" | "empty" | "listed";
67
+ entries: CollectionEntryRow[];
68
+ /** The create row under the entries: "New post". */
69
+ newLabel: string;
70
+ }
71
+
72
+ /** What a control can ask the panel to do. Every one is a decision the flow owns. */
73
+ export interface CollectionsPanelActions {
74
+ /** Show a collection in the Content home. */
75
+ showCollection: (key: string) => void;
76
+ /** Open a collection's grid on one of its saved views. */
77
+ applyView: (key: string, name: string) => void;
78
+ /** **+ New collection**: Add new › Collection. */
79
+ newCollection: () => void;
80
+ /** **‹ <Collection>**: back to the collection in the Content home. */
81
+ back: () => void;
82
+ /** Open an entry where it is written. */
83
+ openEntry: (path: string) => void;
84
+ /** **+ New <item>**: Add new › Entry in this collection. */
85
+ newEntry: () => void;
86
+ }
87
+
88
+ export interface CollectionsPanelSurfaceHandle {
89
+ readonly ready: Promise<unknown>;
90
+ /** Whether the mounted root is still where it was put. */
91
+ connected: () => boolean;
92
+ update: (values: CollectionsPanelValues) => void;
93
+ dispose: () => void;
94
+ }
95
+
96
+ interface CollectionsPanelScope extends CollectionsPanelValues, CollectionsPanelActions {}
97
+
98
+ /** The scope's shape before the first projection lands on it. */
99
+ export function emptyCollectionsPanelValues(): CollectionsPanelValues {
100
+ return {
101
+ backTitle: "",
102
+ backCount: "",
103
+ body: "none",
104
+ collections: [],
105
+ entries: [],
106
+ entriesState: "loading",
107
+ newLabel: "",
108
+ };
109
+ }
110
+
111
+ /** Write a projection in, field by field, so an unchanged field is inert. */
112
+ function project(scope: CollectionsPanelScope, values: CollectionsPanelValues): void {
113
+ scope.body = values.body;
114
+ scope.collections = values.collections;
115
+ scope.backTitle = values.backTitle;
116
+ scope.backCount = values.backCount;
117
+ scope.entriesState = values.entriesState;
118
+ scope.entries = values.entries;
119
+ scope.newLabel = values.newLabel;
120
+ }
121
+
122
+ /**
123
+ * Mount the Collections panel into `container`, the content box the Navigator painted.
124
+ *
125
+ * @param container Where the document goes.
126
+ * @param values What it shows to begin with.
127
+ * @param actions What its controls do.
128
+ */
129
+ export function mountCollectionsPanelSurface(
130
+ container: HTMLElement,
131
+ values: CollectionsPanelValues,
132
+ actions: CollectionsPanelActions,
133
+ ): CollectionsPanelSurfaceHandle {
134
+ const scope: CollectionsPanelScope = reactive<CollectionsPanelScope>({
135
+ ...emptyCollectionsPanelValues(),
136
+ ...actions,
137
+ });
138
+ project(scope, values);
139
+
140
+ let mounted: SurfaceHandle | null = null;
141
+ let disposed = false;
142
+ const ready = mountSurface("collections-panel", scope, container).then((surface) => {
143
+ if (disposed) {
144
+ surface.dispose();
145
+ return surface;
146
+ }
147
+ mounted = surface;
148
+ return surface;
149
+ });
150
+
151
+ return {
152
+ connected: () => {
153
+ if (disposed) {
154
+ return false;
155
+ }
156
+ const root = mounted?.root;
157
+ // A mount still in flight is not yet in the container, and is not a reason to remount.
158
+ return root === undefined ? true : container.contains(root);
159
+ },
160
+ dispose() {
161
+ disposed = true;
162
+ mounted?.dispose();
163
+ mounted = null;
164
+ },
165
+ ready,
166
+ update: (next) => project(scope, next),
167
+ };
168
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://jxsuite.com/schema/v1",
3
3
  "$id": "StudioCommandBar",
4
- "$description": "The Command Bar: a rendering of the command registry. The adapter hands in `primary` (what declared commandbar/primary), `docks` (the three dock toggles), `layouts`, the Command Center's `segments`, the collaboration `presence` and `csd` (which window-control layout, if any). Nothing here decides what an action is called.",
4
+ "$description": "The Command Bar: a rendering of the command registry. The adapter hands in `primary` (what declared commandbar/primary), `docks` (the three dock toggles), `workspaces` (the five workspaces, with `workspace` selected), `settingsVisible`/`settingsOpen` for the gear that renders the settings/menu placement, the Command Center's `segments`, the collaboration `presence` and `csd` (which window-control layout, if any). Nothing here decides what an action is called.",
5
5
  "tagName": "div",
6
6
  "attributes": {
7
7
  "part": "bar"
@@ -21,7 +21,7 @@
21
21
  "flex": "1",
22
22
  "flexShrink": "999"
23
23
  },
24
- "& [part=\"csd-lead\"], & [part=\"csd-trail\"], & [part=\"menu-slot\"], & [part=\"layouts-slot\"], & [part=\"presence-slot\"]": {
24
+ "& [part=\"csd-lead\"], & [part=\"csd-trail\"], & [part=\"menu-slot\"], & [part=\"workspaces-slot\"], & [part=\"presence-slot\"], & [part=\"settings-slot\"]": {
25
25
  "display": "contents"
26
26
  },
27
27
  "& [part=\"window-controls\"]": {
@@ -69,35 +69,39 @@
69
69
  "color": "rgba(0, 0, 0, 0.5)",
70
70
  "--jx-icon-size": "8px"
71
71
  },
72
- "& [part=\"layouts\"]": {
73
- "display": "flex",
74
- "alignItems": "center",
72
+ "& [part=\"workspaces\"]": {
73
+ "$description": "The kit's tablist, retuned for a 36px band: no rule under the strip (the band's own border is the floor), and the tabs sit on the band's centre line rather than on a strip edge.",
74
+ "flexShrink": "0",
75
+ "borderBottom": "none",
75
76
  "gap": "2px",
76
- "flexShrink": "0"
77
+ "fontSize": "var(--jx-text-sm)"
77
78
  },
78
- "& [part=\"layout\"]": {
79
+ "& [part=\"workspace\"]": {
79
80
  "padding": "2px var(--jx-space-3)",
80
- "border": "none",
81
81
  "borderRadius": "var(--jx-radius-sm)",
82
- "background": "none",
83
82
  "color": "var(--jx-fg-dim)",
84
- "font": "inherit",
85
- "fontSize": "var(--jx-text-sm)",
86
- "cursor": "pointer",
87
83
  "whiteSpace": "nowrap",
84
+ "--jx-icon-size": "14px",
88
85
  ":hover": {
89
86
  "background": "var(--jx-hover-bg)",
90
87
  "color": "var(--jx-fg)"
91
- },
92
- ":focus-visible": {
93
- "outline": "var(--jx-focus-ring)",
94
- "outlineOffset": "-2px"
95
88
  }
96
89
  },
97
- "& [part=\"layout\"][data-active]": {
90
+ "& [part=\"workspace\"][aria-selected=\"true\"]": {
98
91
  "color": "var(--jx-fg)",
99
92
  "background": "var(--jx-hover-bg)"
100
93
  },
94
+ "& [part=\"workspace-badge\"]": {
95
+ "$description": "The count of unpublished changes on the Publish tab. Decorative: the tab's tooltip says what it counts, and the badge is not drawn at zero.",
96
+ "minWidth": "16px",
97
+ "padding": "0 4px",
98
+ "borderRadius": "8px",
99
+ "background": "var(--jx-accent)",
100
+ "color": "var(--jx-accent-fg)",
101
+ "fontSize": "var(--jx-text-xs)",
102
+ "lineHeight": "16px",
103
+ "textAlign": "center"
104
+ },
101
105
  "& [part=\"center\"]": {
102
106
  "display": "flex",
103
107
  "alignItems": "center",
@@ -229,7 +233,21 @@
229
233
  },
230
234
  "& [part=\"primary\"] jx-button > [part=\"control\"]": {
231
235
  "gap": "0"
236
+ },
237
+ "& [part=\"workspace\"] > [part=\"label\"]": {
238
+ "display": "none"
232
239
  }
240
+ },
241
+ "& [part=\"workspaces-group\"]": {
242
+ "$description": "The tablist and the quick-publish chevron, as one item of the band, so the chevron never wraps away from the Publish tab it belongs to.",
243
+ "display": "flex",
244
+ "alignItems": "center",
245
+ "flexShrink": "0",
246
+ "gap": "2px"
247
+ },
248
+ "& [part=\"quick-publish\"]": {
249
+ "--jx-icon-size": "12px",
250
+ "marginLeft": "-2px"
233
251
  }
234
252
  },
235
253
  "children": [
@@ -262,7 +280,7 @@
262
280
  },
263
281
  "attributes": {
264
282
  "data-control": "close",
265
- "class": "electrobun-webkit-app-region-no-drag"
283
+ "class": "app-region-no-drag"
266
284
  },
267
285
  "onclick": {
268
286
  "$prototype": "Function",
@@ -287,7 +305,7 @@
287
305
  },
288
306
  "attributes": {
289
307
  "data-control": "minimize",
290
- "class": "electrobun-webkit-app-region-no-drag"
308
+ "class": "app-region-no-drag"
291
309
  },
292
310
  "onclick": {
293
311
  "$prototype": "Function",
@@ -312,7 +330,7 @@
312
330
  },
313
331
  "attributes": {
314
332
  "data-control": "maximize",
315
- "class": "electrobun-webkit-app-region-no-drag"
333
+ "class": "app-region-no-drag"
316
334
  },
317
335
  "onclick": {
318
336
  "$prototype": "Function",
@@ -355,7 +373,7 @@
355
373
  },
356
374
  "attributes": {
357
375
  "data-menu": "studio",
358
- "class": "electrobun-webkit-app-region-no-drag"
376
+ "class": "app-region-no-drag"
359
377
  },
360
378
  "onclick": {
361
379
  "$prototype": "Function",
@@ -407,99 +425,153 @@
407
425
  {
408
426
  "tagName": "div",
409
427
  "attributes": {
410
- "part": "layouts-slot",
428
+ "part": "workspaces-slot",
411
429
  "role": "none"
412
430
  },
413
431
  "$switch": {
414
- "$ref": "#/state/layoutsVisible"
432
+ "$ref": "#/state/workspacesVisible"
415
433
  },
416
434
  "cases": {
417
435
  "true": {
418
436
  "tagName": "div",
419
437
  "attributes": {
420
- "part": "layouts",
421
- "role": "tablist",
422
- "aria-label": "Layouts"
438
+ "part": "workspaces-group",
439
+ "role": "none"
423
440
  },
424
441
  "children": [
425
442
  {
426
- "$prototype": "Array",
427
- "items": {
428
- "$ref": "#/state/layouts"
443
+ "tagName": "jx-tabs",
444
+ "attributes": {
445
+ "part": "workspaces",
446
+ "selected": "${state.workspace}",
447
+ "class": "app-region-no-drag"
429
448
  },
430
- "key": {
431
- "$ref": "$map/item/id"
449
+ "$props": {
450
+ "label": "Workspaces",
451
+ "activation": "manual"
432
452
  },
433
- "map": {
434
- "tagName": "button",
435
- "attributes": {
436
- "part": "layout",
437
- "type": "button",
438
- "role": "tab",
439
- "aria-selected": "${$map.item.active ? 'true' : 'false'}",
440
- "data-layout": "${$map.item.id}",
441
- "data-active": "${$map.item.active ? '' : null}",
442
- "title": "${$map.item.title}",
443
- "class": "electrobun-webkit-app-region-no-drag"
444
- },
445
- "textContent": "${$map.item.name}",
446
- "onclick": {
447
- "$prototype": "Function",
448
- "body": [
449
- {
450
- "operator": "call",
451
- "target": {
452
- "$ref": "#/state/setLayout"
453
- },
454
- "value": [
453
+ "children": [
454
+ {
455
+ "$prototype": "Array",
456
+ "items": {
457
+ "$ref": "#/state/workspaces"
458
+ },
459
+ "key": {
460
+ "$ref": "$map/item/id"
461
+ },
462
+ "map": {
463
+ "tagName": "jx-tab",
464
+ "attributes": {
465
+ "part": "workspace",
466
+ "value": "${$map.item.id}",
467
+ "label": "${$map.item.title}",
468
+ "title": "${$map.item.tooltip}",
469
+ "aria-description": "${$map.item.description || null}",
470
+ "data-workspace": "${$map.item.id}"
471
+ },
472
+ "onclick": {
473
+ "$prototype": "Function",
474
+ "body": [
455
475
  {
456
- "$ref": "$map/item/id"
476
+ "operator": "call",
477
+ "target": {
478
+ "$ref": "#/state/setWorkspace"
479
+ },
480
+ "value": [
481
+ {
482
+ "$ref": "$map/item/id"
483
+ }
484
+ ]
457
485
  }
458
486
  ]
459
- }
460
- ]
461
- },
462
- "ondblclick": {
463
- "$prototype": "Function",
464
- "body": [
465
- {
466
- "operator": "call",
467
- "target": {
468
- "$ref": "#/state/renameLayout"
487
+ },
488
+ "children": [
489
+ {
490
+ "tagName": "jx-icon",
491
+ "attributes": {
492
+ "slot": "icon"
493
+ },
494
+ "$props": {
495
+ "name": {
496
+ "$ref": "$map/item/icon"
497
+ }
498
+ }
469
499
  },
470
- "value": [
471
- {
472
- "$ref": "$map/item/id"
500
+ {
501
+ "tagName": "span",
502
+ "attributes": {
503
+ "slot": "status",
504
+ "part": "workspace-badge-slot"
505
+ },
506
+ "style": {
507
+ "display": "contents"
508
+ },
509
+ "$switch": {
510
+ "$ref": "$map/item/hasBadge"
511
+ },
512
+ "cases": {
513
+ "true": {
514
+ "tagName": "span",
515
+ "attributes": {
516
+ "part": "workspace-badge",
517
+ "aria-hidden": "true"
518
+ },
519
+ "textContent": "${$map.item.badge}"
520
+ }
473
521
  }
474
- ]
475
- }
476
- ]
522
+ }
523
+ ]
524
+ }
477
525
  }
478
- }
526
+ ]
479
527
  },
480
528
  {
481
- "tagName": "jx-action-button",
482
- "$props": {
483
- "label": "Save layout",
484
- "hint": "Save the current arrangement as a layout",
485
- "icon": "plus",
486
- "size": "sm"
487
- },
529
+ "tagName": "div",
488
530
  "attributes": {
489
- "part": "layout-add",
490
- "class": "electrobun-webkit-app-region-no-drag"
531
+ "part": "quick-slot",
532
+ "role": "none"
491
533
  },
492
- "onclick": {
493
- "$prototype": "Function",
494
- "body": [
495
- {
496
- "operator": "call",
497
- "target": {
498
- "$ref": "#/state/saveLayout"
534
+ "style": {
535
+ "display": "contents"
536
+ },
537
+ "$switch": {
538
+ "$ref": "#/state/quickVisible"
539
+ },
540
+ "cases": {
541
+ "true": {
542
+ "tagName": "jx-action-button",
543
+ "$description": "`publish.quick`, drawn beside the Publish tab rather than inside it (studio.md §22.2): a tab that sometimes opened a dialog would be a tab whose activation means two things. It sits after the tablist, which ends on Publish, so it is the control beside that tab.",
544
+ "attributes": {
545
+ "part": "quick-publish",
546
+ "class": "app-region-no-drag",
547
+ "data-command": "publish.quick"
548
+ },
549
+ "$props": {
550
+ "icon": "caret-down",
551
+ "size": "sm",
552
+ "quiet": true,
553
+ "label": "Quick publish",
554
+ "hint": {
555
+ "$ref": "#/state/quickTooltip"
499
556
  },
500
- "value": []
557
+ "haspopup": "dialog",
558
+ "disabled": {
559
+ "$ref": "#/state/quickDisabled"
560
+ }
561
+ },
562
+ "onclick": {
563
+ "$prototype": "Function",
564
+ "body": [
565
+ {
566
+ "operator": "call",
567
+ "target": {
568
+ "$ref": "#/state/run"
569
+ },
570
+ "value": ["publish.quick"]
571
+ }
572
+ ]
501
573
  }
502
- ]
574
+ }
503
575
  }
504
576
  }
505
577
  ]
@@ -518,7 +590,7 @@
518
590
  "part": "center",
519
591
  "role": "group",
520
592
  "aria-label": "Command Center",
521
- "class": "electrobun-webkit-app-region-no-drag"
593
+ "class": "app-region-no-drag"
522
594
  },
523
595
  "onclick": {
524
596
  "$prototype": "Function",
@@ -586,7 +658,7 @@
586
658
  "type": "button",
587
659
  "data-segment": "${$map.item.key}",
588
660
  "title": "${$map.item.title}",
589
- "class": "electrobun-webkit-app-region-no-drag"
661
+ "class": "app-region-no-drag"
590
662
  },
591
663
  "textContent": "${$map.item.label}",
592
664
  "onclick": {
@@ -672,7 +744,7 @@
672
744
  },
673
745
  "attributes": {
674
746
  "data-command-id": "${$map.item.id}",
675
- "class": "electrobun-webkit-app-region-no-drag"
747
+ "class": "app-region-no-drag"
676
748
  },
677
749
  "onclick": {
678
750
  "$prototype": "Function",
@@ -830,6 +902,79 @@
830
902
  }
831
903
  }
832
904
  },
905
+ {
906
+ "tagName": "div",
907
+ "attributes": {
908
+ "part": "settings-slot",
909
+ "role": "none"
910
+ },
911
+ "$switch": {
912
+ "$ref": "#/state/settingsVisible"
913
+ },
914
+ "cases": {
915
+ "true": {
916
+ "tagName": "jx-action-button",
917
+ "$props": {
918
+ "label": "Settings",
919
+ "hint": "Settings",
920
+ "icon": "gear",
921
+ "size": "sm",
922
+ "haspopup": "menu",
923
+ "expanded": {
924
+ "$ref": "#/state/settingsOpen"
925
+ }
926
+ },
927
+ "attributes": {
928
+ "data-menu": "settings",
929
+ "class": "app-region-no-drag"
930
+ },
931
+ "onclick": {
932
+ "$prototype": "Function",
933
+ "body": [
934
+ {
935
+ "operator": "call",
936
+ "target": {
937
+ "$ref": "#/state/openSettings"
938
+ },
939
+ "value": [
940
+ {
941
+ "$ref": "event#/currentTarget"
942
+ }
943
+ ]
944
+ }
945
+ ]
946
+ },
947
+ "onkeydown": {
948
+ "$prototype": "Function",
949
+ "body": [
950
+ {
951
+ "$switch": {
952
+ "$ref": "event#/key"
953
+ },
954
+ "cases": {
955
+ "ArrowDown": [
956
+ {
957
+ "operator": "call",
958
+ "target": {
959
+ "$ref": "#/state/openSettings"
960
+ },
961
+ "value": [
962
+ {
963
+ "$ref": "event#/currentTarget"
964
+ }
965
+ ]
966
+ },
967
+ {
968
+ "preventDefault": true
969
+ }
970
+ ]
971
+ }
972
+ }
973
+ ]
974
+ }
975
+ }
976
+ }
977
+ },
833
978
  {
834
979
  "tagName": "div",
835
980
  "attributes": {
@@ -872,7 +1017,7 @@
872
1017
  },
873
1018
  "attributes": {
874
1019
  "data-command-id": "${$map.item.id}",
875
- "class": "electrobun-webkit-app-region-no-drag"
1020
+ "class": "app-region-no-drag"
876
1021
  },
877
1022
  "onchange": {
878
1023
  "$prototype": "Function",
@@ -922,7 +1067,7 @@
922
1067
  },
923
1068
  "attributes": {
924
1069
  "data-control": "minimize",
925
- "class": "electrobun-webkit-app-region-no-drag"
1070
+ "class": "app-region-no-drag"
926
1071
  },
927
1072
  "onclick": {
928
1073
  "$prototype": "Function",
@@ -947,7 +1092,7 @@
947
1092
  },
948
1093
  "attributes": {
949
1094
  "data-control": "maximize",
950
- "class": "electrobun-webkit-app-region-no-drag"
1095
+ "class": "app-region-no-drag"
951
1096
  },
952
1097
  "onclick": {
953
1098
  "$prototype": "Function",
@@ -972,7 +1117,7 @@
972
1117
  },
973
1118
  "attributes": {
974
1119
  "data-control": "close",
975
- "class": "electrobun-webkit-app-region-no-drag"
1120
+ "class": "app-region-no-drag"
976
1121
  },
977
1122
  "onclick": {
978
1123
  "$prototype": "Function",