@jxsuite/studio 6.1.2 → 8.0.1
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.
- package/README.md +5 -5
- package/dist/chunks/2020-5wtzce5g.js +4 -0
- package/dist/chunks/adapter-5tphg7xe.js +4 -0
- package/dist/chunks/add-new-flow-psym14sn.js +4 -0
- package/dist/chunks/cf-account-picker-haqazq5r.js +4 -0
- package/dist/chunks/cf-settings-h2wrh6hq.js +4 -0
- package/dist/chunks/{color-area-0fj8a4ga.js → color-area-6rbra5dy.js} +2 -2
- package/dist/chunks/{color-field-xch8kx2g.js → color-field-gy56c94g.js} +3 -3
- package/dist/chunks/color-m7r1vk54.js +4 -0
- package/dist/chunks/{color-slider-jxd8v350.js → color-slider-sqqdyf6c.js} +2 -2
- package/dist/chunks/{combobox-p0efwjke.js → combobox-72h32ejk.js} +3 -3
- package/dist/chunks/components-r22xca09.js +4 -0
- package/dist/chunks/content-source-mmppmcyg.js +4 -0
- package/dist/chunks/convert-to-repeater-he70fc2b.js +4 -0
- package/dist/chunks/editor-ccd9jwsa.js +4 -0
- package/dist/chunks/entry-commands-6qxz9e8p.js +4 -0
- package/dist/chunks/extension-sections-0egb88dm.js +4 -0
- package/dist/chunks/file-ops-qnab36ek.js +4 -0
- package/dist/chunks/files-rcn56qvm.js +4 -0
- package/dist/chunks/format-host-yxz0kjjs.js +4 -0
- package/dist/chunks/fs-events-d1qxq4z4.js +4 -0
- package/dist/chunks/grid-open-4z1g062t.js +4 -0
- package/dist/chunks/{grid-view-d2wq9ezg.js → grid-view-qg1b5eqx.js} +25 -25
- package/dist/chunks/{icons-pnfz478q.js → icons-63bjtbs7.js} +2 -2
- package/dist/chunks/{iframe-entry-jdcktez8.js → iframe-entry-2zggzajv.js} +4 -4
- package/dist/chunks/{iframe-entry-zap785cw.js → iframe-entry-76j8vwwx.js} +4 -4
- package/dist/chunks/iframe-entry-99nr5zfb.js +5 -0
- package/dist/chunks/{iframe-entry-x0ygf2yr.js → iframe-entry-pkgmcgp0.js} +4 -4
- package/dist/chunks/iframe-host-ssv7kyj0.js +4 -0
- package/dist/chunks/{index-zpjmzqfk.js → index-32eqzv1k.js} +3 -3
- package/dist/chunks/index-f0jn7nnp.js +4 -0
- package/dist/chunks/{javascript-m54mnwp6.js → javascript-pjp734q4.js} +3 -3
- package/dist/chunks/jsonMode-njkvsa02.js +13 -0
- package/dist/chunks/jx-validate-ttasrbh7.js +4 -0
- package/dist/chunks/layers-bgyr11tr.js +4 -0
- package/dist/chunks/layers-panel-7ez66zeq.js +4 -0
- package/dist/chunks/{listbox-e74qjyq6.js → listbox-c421cf8c.js} +2 -2
- package/dist/chunks/lit-html-v9gh687x.js +4 -0
- package/dist/chunks/media-library-sq468wts.js +4 -0
- package/dist/chunks/media-picker-shfe59pt.js +4 -0
- package/dist/chunks/{menu-n6yzswmy.js → menu-bdpzbfvs.js} +2 -2
- package/dist/chunks/{monaco-binding-7gx83x3r.js → monaco-binding-vq1hgnn0.js} +3 -3
- package/dist/chunks/monaco-buffer-3afgwvbp.js +4 -0
- package/dist/chunks/monaco-setup-xrd2cbkp.js +4 -0
- package/dist/chunks/notify-kzrjr3fv.js +4 -0
- package/dist/chunks/parse-v77xtwv7.js +4 -0
- package/dist/chunks/platform-7v4rtd7m.js +4 -0
- package/dist/chunks/popover-b89sfej7.js +4 -0
- package/dist/chunks/publish-panel-2z9gw8ee.js +4 -0
- package/dist/chunks/publish-quick-qx2455cj.js +4 -0
- package/dist/chunks/publish-workspace-wrc1dgwx.js +4 -0
- package/dist/chunks/quick-search-n0t0eqxb.js +4 -0
- package/dist/chunks/references-9547rg5s.js +4 -0
- package/dist/chunks/right-panel-wsgnr9pn.js +4 -0
- package/dist/chunks/source-control-kwktr9y6.js +4 -0
- package/dist/chunks/{split-n2gfpm5m.js → split-c9zfdgxf.js} +2 -2
- package/dist/chunks/studio-03ct6yfv.js +9 -0
- package/dist/chunks/studio-07rcfje3.js +5 -0
- package/dist/chunks/studio-3e54qh39.js +7 -0
- package/dist/chunks/studio-3exxhz5g.js +5 -0
- package/dist/chunks/studio-3q40e3rj.js +5 -0
- package/dist/chunks/studio-3qeh9t0h.js +6 -0
- package/dist/chunks/studio-3qqjeep5.js +6 -0
- package/dist/chunks/studio-43sd2mam.js +4 -0
- package/dist/chunks/studio-4hp8pkyt.js +5 -0
- package/dist/chunks/studio-58xg6j2q.js +9 -0
- package/dist/chunks/studio-5g0rprdt.js +7 -0
- package/dist/chunks/{studio-2j1cb95x.js → studio-6m380wp7.js} +4 -4
- package/dist/chunks/studio-80jyh1xh.js +4 -0
- package/dist/chunks/studio-83mk4bgg.js +9 -0
- package/dist/chunks/{studio-v0jzqdjm.js → studio-881z1xrx.js} +4 -4
- package/dist/chunks/studio-8m0y2qe7.js +5 -0
- package/dist/chunks/{studio-d81xfh1g.js → studio-8tr6cfrc.js} +4 -4
- package/dist/chunks/studio-8vcvfs7r.js +6 -0
- package/dist/chunks/studio-9tmebf0s.js +5 -0
- package/dist/chunks/studio-a2bvaptz.js +5 -0
- package/dist/chunks/studio-b7y5mr30.js +5 -0
- package/dist/chunks/studio-bavb31r0.js +5 -0
- package/dist/chunks/{studio-dgz8d0c1.js → studio-bbe4c90a.js} +4 -4
- package/dist/chunks/studio-c05wdnt3.js +5 -0
- package/dist/chunks/studio-ccv2svc6.js +5 -0
- package/dist/chunks/studio-d5grtb9e.js +16 -0
- package/dist/chunks/studio-df0baea9.js +5 -0
- package/dist/chunks/studio-dgk4dqtx.js +7 -0
- package/dist/chunks/studio-e1g64q43.js +5 -0
- package/dist/chunks/studio-ed1hp6zf.js +6 -0
- package/dist/chunks/studio-ed3xx40h.js +7 -0
- package/dist/chunks/studio-f14e1zdj.js +5 -0
- package/dist/chunks/studio-fbhxxc5f.js +5 -0
- package/dist/chunks/studio-fyh0jc96.js +5 -0
- package/dist/chunks/studio-gcxk20n7.js +5 -0
- package/dist/chunks/studio-jaaz8ce9.js +5 -0
- package/dist/chunks/{studio-90pq9km1.js → studio-jcnsdaep.js} +4 -4
- package/dist/chunks/studio-jsgf2q5k.js +7 -0
- package/dist/chunks/{studio-0q988f9w.js → studio-k3xxbagr.js} +3 -3
- package/dist/chunks/{studio-5ve6bbep.js → studio-k7evxqh4.js} +4 -4
- package/dist/chunks/studio-kt3pjkwd.js +5 -0
- package/dist/chunks/studio-m8g16bgz.js +5 -0
- package/dist/chunks/studio-mn0476ag.js +5 -0
- package/dist/chunks/studio-mx1smyq0.js +5 -0
- package/dist/chunks/studio-n0c5h6mf.js +5 -0
- package/dist/chunks/{studio-485046te.js → studio-nh6d342n.js} +7 -7
- package/dist/chunks/studio-nqxqf8p2.js +4 -0
- package/dist/chunks/studio-p4nrkvqr.js +5 -0
- package/dist/chunks/{studio-1fxkaaea.js → studio-pbxa5fpc.js} +4 -4
- package/dist/chunks/studio-pgmvdv7z.js +7 -0
- package/dist/chunks/studio-ph84avkf.js +5 -0
- package/dist/chunks/{studio-tq0rtfwj.js → studio-q0mvbaq6.js} +4 -4
- package/dist/chunks/studio-q0tccd43.js +5 -0
- package/dist/chunks/studio-q7rtx6zq.js +14 -0
- package/dist/chunks/{studio-a3g98wjr.js → studio-qgh13jtz.js} +4 -4
- package/dist/chunks/studio-qmn1xc24.js +5 -0
- package/dist/chunks/studio-qwdqwkj0.js +5 -0
- package/dist/chunks/studio-r5qy30vx.js +5 -0
- package/dist/chunks/studio-rj9eamf8.js +5 -0
- package/dist/chunks/studio-rptgsk96.js +5 -0
- package/dist/chunks/studio-rthyg42z.js +928 -0
- package/dist/chunks/studio-s19tp1xr.js +5 -0
- package/dist/chunks/studio-s32578pn.js +5 -0
- package/dist/chunks/studio-svb7yyve.js +5 -0
- package/dist/chunks/studio-syreb644.js +5 -0
- package/dist/chunks/studio-tf9jryb1.js +10 -0
- package/dist/chunks/studio-tfkznv39.js +5 -0
- package/dist/chunks/studio-tft6r105.js +5 -0
- package/dist/chunks/studio-txf2kysx.js +5 -0
- package/dist/chunks/studio-v8867ddv.js +12 -0
- package/dist/chunks/studio-vxq7fcvv.js +5 -0
- package/dist/chunks/studio-w4rz9hdk.js +5 -0
- package/dist/chunks/studio-wbcjbhy1.js +9 -0
- package/dist/chunks/studio-wc649wss.js +5 -0
- package/dist/chunks/studio-wys23mxz.js +5 -0
- package/dist/chunks/studio-x1x167jh.js +5 -0
- package/dist/chunks/studio-x9hsze61.js +5 -0
- package/dist/chunks/studio-y0n7yxea.js +9 -0
- package/dist/chunks/studio-y3ahhdpx.js +5 -0
- package/dist/chunks/studio-z97c48fk.js +5 -0
- package/dist/chunks/studio-zat62m0c.js +5 -0
- package/dist/chunks/studio-zcd2e7yz.js +5 -0
- package/dist/chunks/studio-zz9qe3rw.js +64 -0
- package/dist/chunks/toast-1gv0h53h.js +4 -0
- package/dist/chunks/{toast-host-ke5z4ng7.js → toast-host-1yg5ar8d.js} +3 -3
- package/dist/chunks/{tooltip-5v8ngwj2.js → tooltip-yypz28gq.js} +3 -3
- package/dist/chunks/{tree-mdq3v5cw.js → tree-9xa4hm7n.js} +2 -2
- package/dist/chunks/tsMode-epyfz1hv.js +14 -0
- package/dist/chunks/workspace-dz7nxfhv.js +4 -0
- package/dist/chunks/workspace-home-xsd7hkjw.js +4 -0
- package/dist/chunks/{ws-client-nze0k6mv.js → ws-client-bv552sfx.js} +3 -3
- package/dist/iframe-entry.js +20 -16
- package/dist/manifest.json +77 -63
- package/dist/studio.js +103 -104
- package/dist/workers/ts.worker.js +3 -3
- package/package.json +12 -11
- package/src/browse/component-examples.ts +272 -0
- package/src/browse/library-commands.ts +64 -104
- package/src/browse/library-layouts.ts +263 -49
- package/src/browse/library-model.ts +181 -133
- package/src/browse/library-pane.ts +738 -446
- package/src/browse/library-preview.ts +149 -19
- package/src/browse/library-source.ts +308 -41
- package/src/browse/preview-root.ts +78 -0
- package/src/browse/preview-style.ts +155 -0
- package/src/canvas/asset-refs.ts +16 -1
- package/src/canvas/canvas-live-render.ts +222 -30
- package/src/canvas/canvas-origin.ts +37 -12
- package/src/canvas/canvas-page-context.ts +112 -0
- package/src/canvas/canvas-render.ts +113 -107
- package/src/canvas/canvas-utils.ts +57 -12
- package/src/canvas/iframe-drop.ts +107 -0
- package/src/canvas/iframe-entry.ts +24 -12
- package/src/canvas/iframe-host.ts +134 -62
- package/src/canvas/iframe-keys.ts +11 -0
- package/src/canvas/iframe-patch.ts +8 -7
- package/src/canvas/iframe-protocol.ts +24 -5
- package/src/canvas/iframe-render.ts +48 -1
- package/src/canvas/iframe-subtree.ts +5 -2
- package/src/canvas/npm-modules.ts +22 -0
- package/src/canvas/preview-navigate.ts +16 -0
- package/src/canvas/repeater-sources.ts +200 -0
- package/src/canvas/stage-scrollbar.ts +5 -1
- package/src/canvas/surface-registry.ts +6 -0
- package/src/commands/app-commands.ts +16 -6
- package/src/commands/budget.ts +10 -8
- package/src/commands/context.ts +35 -10
- package/src/commands/defaults.ts +69 -45
- package/src/commands/keymap.ts +9 -0
- package/src/commands/levels.ts +11 -5
- package/src/commands/live-context.ts +2 -0
- package/src/commands/registry.ts +10 -1
- package/src/content/collection-match.ts +6 -5
- package/src/content/collection-pages.ts +412 -0
- package/src/content/content-collections.ts +270 -0
- package/src/content/entry-commands.ts +51 -60
- package/src/content/entry-editor.ts +111 -18
- package/src/content/entry-fields.ts +13 -1
- package/src/content/entry-inspector.ts +225 -0
- package/src/content/entry-model.ts +17 -3
- package/src/content/entry-open.ts +80 -0
- package/src/content/entry-summaries.ts +440 -0
- package/src/content/file-record-ids.ts +80 -0
- package/src/content/file-records.ts +125 -0
- package/src/content/page-summaries.ts +129 -0
- package/src/content/record-entry.ts +201 -0
- package/src/content/writing-banner.ts +177 -0
- package/src/create/add-new-commands.ts +185 -0
- package/src/create/add-new-flow.ts +1116 -0
- package/src/create/add-new.ts +1014 -0
- package/src/create/element-name.ts +121 -0
- package/src/editor/convert-to-component.ts +67 -43
- package/src/editor/file-drop-action.ts +9 -1
- package/src/editor/inline-edit-apply.ts +44 -0
- package/src/editor/inline-edit.ts +10 -0
- package/src/editor/insert-component.ts +91 -0
- package/src/editor/insert-zone-action.ts +13 -4
- package/src/editor/shortcuts.ts +44 -22
- package/src/editor/slash-menu.ts +51 -8
- package/src/files/components.ts +74 -10
- package/src/files/file-ops.ts +15 -5
- package/src/files/files.ts +164 -150
- package/src/files/fs-events.ts +18 -7
- package/src/files/media-meta.ts +95 -1
- package/src/files/media-types.ts +55 -0
- package/src/files/media-upload.ts +209 -52
- package/src/files/new-file-name.ts +156 -0
- package/src/files/serialize-document.ts +13 -3
- package/src/format/format-host.ts +15 -0
- package/src/github/github-auth.ts +2 -2
- package/src/github/github-publish.ts +4 -3
- package/src/grid/grid-controller.ts +5 -1
- package/src/grid/grid-open.ts +0 -27
- package/src/grid/grid-panel.ts +54 -2
- package/src/grid/grid-reveal.ts +34 -0
- package/src/grid/grid-source.ts +3 -25
- package/src/grid/grid-view.ts +31 -6
- package/src/grid/sources/content-source.ts +75 -7
- package/src/grid/tabulator-tables.d.ts +6 -0
- package/src/hosting/document.ts +2 -2
- package/src/i18n/i18n-commands.ts +2 -1
- package/src/media/media-commands.ts +181 -0
- package/src/media/media-library-model.ts +232 -0
- package/src/media/media-library.ts +1283 -0
- package/src/media/media-pane.ts +47 -19
- package/src/packages/pull-package-sync.ts +1 -1
- package/src/panels/activity-panel.ts +21 -5
- package/src/panels/ai-chat/chat-markdown.ts +8 -8
- package/src/panels/block-action-bar.ts +11 -11
- package/src/panels/canvas-dnd-bridge.ts +5 -2
- package/src/panels/chat-panel.ts +6 -6
- package/src/panels/collections-panel.ts +306 -0
- package/src/panels/component-preview.ts +35 -13
- package/src/panels/data-explorer.ts +1 -1
- package/src/panels/data-grid.ts +4 -0
- package/src/panels/dnd.ts +17 -30
- package/src/panels/elements-panel.ts +9 -2
- package/src/panels/empty-state.ts +2 -2
- package/src/panels/formula-workspace.ts +2 -3
- package/src/panels/frontmatter-fields.ts +9 -9
- package/src/panels/git-diff-open.ts +9 -5
- package/src/panels/head-panel.ts +369 -103
- package/src/panels/i18n-panel.ts +11 -10
- package/src/panels/imports-panel.ts +2 -0
- package/src/panels/jump-bar.ts +27 -2
- package/src/panels/layers-panel.ts +36 -30
- package/src/panels/left-panel.ts +22 -8
- package/src/panels/navigator-panels.ts +23 -11
- package/src/panels/pane-context.ts +111 -29
- package/src/panels/pane-grid.ts +6 -6
- package/src/panels/panel-registry.ts +14 -9
- package/src/panels/properties-panel.ts +7 -3
- package/src/panels/right-panel.ts +199 -43
- package/src/panels/seo-modal.ts +41 -108
- package/src/panels/settings-menu.ts +52 -50
- package/src/panels/settings-pane.ts +268 -162
- package/src/panels/signals-panel.ts +3 -4
- package/src/panels/site-model.ts +367 -0
- package/src/panels/site-panel.ts +638 -0
- package/src/panels/style-panel.ts +37 -3
- package/src/panels/stylebook-doc.ts +142 -10
- package/src/panels/stylebook-layers-panel.ts +39 -80
- package/src/panels/stylebook-panel.ts +47 -10
- package/src/panels/styles-panel.ts +327 -0
- package/src/panels/tab-strip.ts +109 -25
- package/src/platform.ts +1 -1
- package/src/platforms/cloud.ts +28 -1
- package/src/platforms/default-platform.ts +4 -4
- package/src/platforms/devserver.ts +51 -25
- package/src/publish/deploy-checklist.ts +12 -7
- package/src/publish/pages-service.ts +38 -14
- package/src/publish/publish-changes.ts +491 -0
- package/src/publish/publish-commands.ts +83 -18
- package/src/publish/publish-ids.ts +49 -0
- package/src/publish/publish-quick.ts +148 -0
- package/src/publish/publish-workspace.ts +926 -0
- package/src/publish/source-control.ts +907 -0
- package/src/services/automation.ts +16 -20
- package/src/services/cf-settings.ts +4 -4
- package/src/services/connection.ts +2 -2
- package/src/services/directory-picker.ts +2 -2
- package/src/services/references.ts +0 -0
- package/src/services/render-critic.ts +21 -2
- package/src/services/settings/definitions.ts +25 -14
- package/src/settings/contributed-section.ts +49 -10
- package/src/settings/css-vars-editor.ts +93 -27
- package/src/settings/developer-panels.ts +43 -0
- package/src/settings/extension-sections.ts +20 -2
- package/src/settings/general-settings.ts +91 -21
- package/src/settings/preferences-dialog.ts +8 -1
- package/src/settings/project-sections.ts +27 -10
- package/src/settings/schema-field-ui.ts +3 -1
- package/src/settings/section-registry.ts +116 -11
- package/src/settings/settings-dialog.ts +192 -0
- package/src/settings/settings-document.ts +182 -162
- package/src/shell.ts +467 -431
- package/src/site-context.ts +64 -10
- package/src/state.ts +28 -9
- package/src/studio.ts +194 -41
- package/src/style/project-styles.ts +34 -0
- package/src/style/stylebook-specimens.ts +89 -0
- package/src/style/stylebook-target.ts +26 -0
- package/src/style/tag-inheritance.ts +105 -0
- package/src/style/variables-focus.ts +61 -0
- package/src/style/variables-view.ts +235 -0
- package/src/surfaces/add-new.json +1482 -0
- package/src/surfaces/add-new.ts +325 -0
- package/src/surfaces/ai-chat.ts +2 -2
- package/src/surfaces/boot-failure.json +4 -3
- package/src/surfaces/bottom-dock.json +1 -1
- package/src/surfaces/canvas-stage.json +30 -19
- package/src/surfaces/canvas-stage.ts +5 -5
- package/src/surfaces/collections-panel.json +615 -0
- package/src/surfaces/collections-panel.ts +168 -0
- package/src/surfaces/commandbar.json +241 -96
- package/src/surfaces/commandbar.ts +134 -99
- package/src/surfaces/empty-state.json +1 -1
- package/src/surfaces/entry-editor.json +136 -0
- package/src/surfaces/entry-editor.ts +21 -0
- package/src/surfaces/entry-inspector.json +371 -0
- package/src/surfaces/entry-inspector.ts +143 -0
- package/src/surfaces/inspector-dock.json +162 -14
- package/src/surfaces/inspector-dock.ts +46 -19
- package/src/surfaces/library-pane.json +670 -437
- package/src/surfaces/library-pane.ts +94 -59
- package/src/surfaces/media-browser.json +62 -6
- package/src/surfaces/media-browser.ts +15 -1
- package/src/surfaces/media-field.json +1 -1
- package/src/surfaces/media-library.json +1586 -0
- package/src/surfaces/media-library.ts +282 -0
- package/src/surfaces/media-pick-dialog.json +71 -0
- package/src/surfaces/media-pick-dialog.ts +132 -0
- package/src/surfaces/menu.ts +18 -0
- package/src/surfaces/pane-context.json +144 -77
- package/src/surfaces/pane-context.ts +24 -0
- package/src/surfaces/panel-deploy-checklist.json +12 -6
- package/src/surfaces/panel-deploy-checklist.ts +3 -1
- package/src/surfaces/panel-page.json +72 -2
- package/src/surfaces/panel-page.ts +38 -7
- package/src/surfaces/panel-signals.json +1 -1
- package/src/surfaces/panel-signals.ts +5 -5
- package/src/surfaces/panel-stylebook-layers.json +71 -204
- package/src/surfaces/panel-stylebook-layers.ts +0 -21
- package/src/surfaces/preferences.json +120 -48
- package/src/surfaces/preferences.ts +8 -0
- package/src/surfaces/publish-quick.json +428 -0
- package/src/surfaces/publish-quick.ts +165 -0
- package/src/surfaces/publish-workspace.json +2892 -0
- package/src/surfaces/publish-workspace.ts +391 -0
- package/src/surfaces/rail.json +1 -159
- package/src/surfaces/rail.ts +18 -75
- package/src/surfaces/schema-form.json +10 -2
- package/src/surfaces/schema-form.ts +2 -0
- package/src/surfaces/seo.json +1 -1
- package/src/surfaces/settings-contributed.json +5 -5
- package/src/surfaces/settings-contributed.ts +18 -2
- package/src/surfaces/settings-css-vars.json +44 -36
- package/src/surfaces/settings-css-vars.ts +77 -4
- package/src/surfaces/settings-deploy.json +2 -15
- package/src/surfaces/settings-deploy.ts +1 -1
- package/src/surfaces/settings-dialog.json +51 -0
- package/src/surfaces/settings-dialog.ts +169 -0
- package/src/surfaces/settings-overview.json +3 -3
- package/src/surfaces/settings-overview.ts +9 -2
- package/src/surfaces/settings-pane.json +269 -46
- package/src/surfaces/settings-pane.ts +85 -24
- package/src/surfaces/shell.json +2 -1
- package/src/surfaces/site-panel.json +1029 -0
- package/src/surfaces/site-panel.ts +233 -0
- package/src/surfaces/slash-menu.json +63 -21
- package/src/surfaces/slash-menu.ts +23 -0
- package/src/surfaces/statusbar.ts +39 -15
- package/src/surfaces/styles-panel.json +735 -0
- package/src/surfaces/styles-panel.ts +195 -0
- package/src/surfaces/styles-variables.json +149 -0
- package/src/surfaces/styles-variables.ts +145 -0
- package/src/surfaces/tab-strip.json +4 -4
- package/src/surfaces/welcome.ts +1 -1
- package/src/surfaces/writing-banner.json +94 -0
- package/src/surfaces/writing-banner.ts +80 -0
- package/src/tabs/bare-repeaters.ts +101 -0
- package/src/tabs/tab.ts +47 -7
- package/src/types.ts +21 -26
- package/src/ui/form-controls.ts +47 -8
- package/src/ui/layers.ts +13 -0
- package/src/ui/media-picker.ts +284 -40
- package/src/ui/regions.ts +7 -6
- package/src/ui/schema-form.ts +259 -27
- package/src/ui/virtual-window.ts +26 -1
- package/src/utils/base64.ts +3 -3
- package/src/utils/edit-display.ts +322 -67
- package/src/utils/local-day.ts +18 -0
- package/src/workspace/pane-derive.ts +4 -4
- package/src/workspace/session.ts +28 -7
- package/src/workspace/tab-workspace.ts +137 -0
- package/src/workspace/workspace-back.ts +189 -0
- package/src/workspace/workspace-home.ts +133 -0
- package/src/workspace/workspace-ids.ts +129 -0
- package/src/workspace/workspace-switch.ts +372 -0
- package/src/workspace/workspace.ts +125 -11
- package/styles/shell-frame.css +30 -7
- package/styles/shell-frame.json +15 -3
- package/dist/chunks/2020-f2gkpy8d.js +0 -4
- package/dist/chunks/adapter-4912g339.js +0 -4
- package/dist/chunks/cf-account-picker-wccaenh6.js +0 -4
- package/dist/chunks/cf-settings-br6105tr.js +0 -4
- package/dist/chunks/color-28ksk2qm.js +0 -4
- package/dist/chunks/components-db68vsn7.js +0 -4
- package/dist/chunks/content-source-1449qesq.js +0 -4
- package/dist/chunks/convert-to-repeater-5h457egj.js +0 -4
- package/dist/chunks/editor-x9jn86a7.js +0 -4
- package/dist/chunks/entry-commands-may24cpt.js +0 -4
- package/dist/chunks/extension-sections-pvr14vxr.js +0 -4
- package/dist/chunks/file-ops-x9v54pcj.js +0 -4
- package/dist/chunks/files-j3knqf0s.js +0 -4
- package/dist/chunks/format-host-tyre2trb.js +0 -4
- package/dist/chunks/fs-events-64ma9htc.js +0 -4
- package/dist/chunks/git-panel-84ps5dex.js +0 -4
- package/dist/chunks/iframe-entry-fvbk89gm.js +0 -5
- package/dist/chunks/iframe-host-ck6vejt5.js +0 -4
- package/dist/chunks/index-b8xw3vy9.js +0 -4
- package/dist/chunks/jsonMode-w15cmrcm.js +0 -13
- package/dist/chunks/jx-validate-at3zn8wa.js +0 -4
- package/dist/chunks/layers-h4xp1pss.js +0 -4
- package/dist/chunks/layers-panel-m5hw1d7g.js +0 -4
- package/dist/chunks/lit-html-8t8t3dnr.js +0 -4
- package/dist/chunks/media-picker-2cweexc5.js +0 -4
- package/dist/chunks/menu-ynw13y0s.js +0 -4
- package/dist/chunks/monaco-buffer-qzxn567r.js +0 -4
- package/dist/chunks/monaco-setup-gxf6656g.js +0 -4
- package/dist/chunks/notify-cj5zbrs2.js +0 -4
- package/dist/chunks/parse-b7ddhr8m.js +0 -4
- package/dist/chunks/platform-3dfws9js.js +0 -4
- package/dist/chunks/popover-jt2gxmzs.js +0 -4
- package/dist/chunks/publish-panel-1gvxbj21.js +0 -4
- package/dist/chunks/quick-search-0dajrwqg.js +0 -4
- package/dist/chunks/references-49qgt404.js +0 -4
- package/dist/chunks/right-panel-jm1bwe53.js +0 -4
- package/dist/chunks/section-registry-6kwc4fky.js +0 -4
- package/dist/chunks/studio-0rt52vpq.js +0 -5
- package/dist/chunks/studio-18vgbhs5.js +0 -5
- package/dist/chunks/studio-24mccdrj.js +0 -5
- package/dist/chunks/studio-2eh507zk.js +0 -9
- package/dist/chunks/studio-2hcbccfv.js +0 -5
- package/dist/chunks/studio-2jbs3rxv.js +0 -5
- package/dist/chunks/studio-4h8k4dw9.js +0 -5
- package/dist/chunks/studio-5f6n18kx.js +0 -5
- package/dist/chunks/studio-5gthpky6.js +0 -5
- package/dist/chunks/studio-6ep3js6b.js +0 -9
- package/dist/chunks/studio-6wkmf3wz.js +0 -9
- package/dist/chunks/studio-841rf3cg.js +0 -5
- package/dist/chunks/studio-8gmwgheg.js +0 -5
- package/dist/chunks/studio-8qm0ep50.js +0 -5
- package/dist/chunks/studio-924p1tm1.js +0 -6
- package/dist/chunks/studio-a3shpz9y.js +0 -5
- package/dist/chunks/studio-amsbaaar.js +0 -6
- package/dist/chunks/studio-at5spjbc.js +0 -7
- package/dist/chunks/studio-b2xv945e.js +0 -5
- package/dist/chunks/studio-bn5nkafw.js +0 -5
- package/dist/chunks/studio-bw6q5xjf.js +0 -9
- package/dist/chunks/studio-c7q0t9x1.js +0 -5
- package/dist/chunks/studio-camnhc96.js +0 -6
- package/dist/chunks/studio-cffqvnzd.js +0 -5
- package/dist/chunks/studio-efvfrsf8.js +0 -5
- package/dist/chunks/studio-er30bpcx.js +0 -5
- package/dist/chunks/studio-ezscgr64.js +0 -5
- package/dist/chunks/studio-ffrrncvz.js +0 -5
- package/dist/chunks/studio-fpphgn8y.js +0 -10
- package/dist/chunks/studio-j1kvhdjk.js +0 -4
- package/dist/chunks/studio-j430n16g.js +0 -7
- package/dist/chunks/studio-jjkg84nj.js +0 -5
- package/dist/chunks/studio-m0q32ars.js +0 -4
- package/dist/chunks/studio-m6bdst11.js +0 -5
- package/dist/chunks/studio-nv2cptd4.js +0 -64
- package/dist/chunks/studio-nwfrc98n.js +0 -5
- package/dist/chunks/studio-p1wgvp7r.js +0 -5
- package/dist/chunks/studio-pag2wncm.js +0 -5
- package/dist/chunks/studio-qvanvzfd.js +0 -5
- package/dist/chunks/studio-qwa64kt7.js +0 -5
- package/dist/chunks/studio-rk1zc4x3.js +0 -928
- package/dist/chunks/studio-se2r3ptc.js +0 -5
- package/dist/chunks/studio-sg2a0dh0.js +0 -5
- package/dist/chunks/studio-tjzjhe68.js +0 -5
- package/dist/chunks/studio-v2w7q8r1.js +0 -7
- package/dist/chunks/studio-v5vjq1h0.js +0 -4
- package/dist/chunks/studio-v8aga3vp.js +0 -14
- package/dist/chunks/studio-vfcdrfmv.js +0 -5
- package/dist/chunks/studio-vmfkgdjf.js +0 -5
- package/dist/chunks/studio-wt1816jj.js +0 -5
- package/dist/chunks/studio-wz73q5kq.js +0 -4
- package/dist/chunks/studio-y04qtxvp.js +0 -7
- package/dist/chunks/studio-y21g8zzg.js +0 -5
- package/dist/chunks/studio-y64hrt8p.js +0 -12
- package/dist/chunks/studio-ynn90f58.js +0 -16
- package/dist/chunks/studio-yxz682sx.js +0 -5
- package/dist/chunks/studio-zp7snvkq.js +0 -5
- package/dist/chunks/studio-zq4z6tm6.js +0 -5
- package/dist/chunks/toast-c9fn075p.js +0 -4
- package/dist/chunks/tsMode-sf49ee9x.js +0 -14
- package/dist/chunks/workspace-jtfahpee.js +0 -4
- package/src/panels/frontmatter-panel.ts +0 -711
- package/src/panels/git-panel.ts +0 -1108
- package/src/surfaces/doc-header.json +0 -776
- package/src/surfaces/doc-header.ts +0 -222
- package/src/surfaces/git-panel.json +0 -1880
- package/src/surfaces/git-panel.ts +0 -264
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/**
|
|
3
|
+
* The Publish workspace, as a mounted document (studio.md §22.8).
|
|
4
|
+
*
|
|
5
|
+
* This is the adapter. `publish/publish-workspace.ts` is the flow: which sub-tab is showing, what
|
|
6
|
+
* the change list, the checks, the destinations, the deployments, the branches and the hosting rows
|
|
7
|
+
* say, and what every control does. It hands this module one projection, and this module hands the
|
|
8
|
+
* document a scope and reports the one node the flow needs to hold.
|
|
9
|
+
*
|
|
10
|
+
* **One island, through `onNodeCreated`.** Hosting's build adapter is the Deploy section that moved
|
|
11
|
+
* here from Project Settings (§17.1), mounted by `settings/project-sections.ts` into a box this
|
|
12
|
+
* document draws and never fills (`adapter-island`). The node is announced as it is created, which
|
|
13
|
+
* is the one seam for a node a document made (`studio-ui-guidelines.md` §9.4); a node found by
|
|
14
|
+
* selector once would be detached DOM the moment the Hosting case was switched away and back.
|
|
15
|
+
*
|
|
16
|
+
* **The host is cleared**, for the reason `surfaces/media-library.ts` gives: the pane's stage is
|
|
17
|
+
* handed to whichever mode owns it whole.
|
|
18
|
+
*
|
|
19
|
+
* @docs studio/publish
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import { isJsonObject, isString } from "@jxsuite/schema/guards";
|
|
23
|
+
import { reactive } from "../reactivity";
|
|
24
|
+
import { mountSurface, registerSurface } from "../ui/surface";
|
|
25
|
+
import publishWorkspaceDoc from "./publish-workspace.json";
|
|
26
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
27
|
+
import type { JxScope } from "@jxsuite/runtime/types";
|
|
28
|
+
import type { SurfaceHandle } from "../ui/surface";
|
|
29
|
+
import type { ChangeRow, CommitRow } from "../publish/source-control";
|
|
30
|
+
import type { DestinationChoice } from "../publish/publish-changes";
|
|
31
|
+
import type { PublishDestination, PublishTab } from "../publish/publish-ids";
|
|
32
|
+
import type { DeployStepRowView } from "./panel-deploy-checklist";
|
|
33
|
+
import type { ActivityRowView } from "./panel-activity";
|
|
34
|
+
|
|
35
|
+
registerSurface("publish-workspace", publishWorkspaceDoc);
|
|
36
|
+
|
|
37
|
+
/** One sub-tab in the strip. */
|
|
38
|
+
export interface PublishTabRow {
|
|
39
|
+
value: PublishTab;
|
|
40
|
+
label: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** One changed file in Review changes: the shared row, plus what its three controls are called. */
|
|
44
|
+
export interface ReviewFileRow extends ChangeRow {
|
|
45
|
+
includeLabel: string;
|
|
46
|
+
compareLabel: string;
|
|
47
|
+
discardLabel: string;
|
|
48
|
+
discardHint: string;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** One component's changed files. */
|
|
52
|
+
export interface ReviewGroupRow {
|
|
53
|
+
key: string;
|
|
54
|
+
name: string;
|
|
55
|
+
files: ReviewFileRow[];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** One check, with its glyph and the one button that resolves it. */
|
|
59
|
+
export interface PublishCheckRow {
|
|
60
|
+
key: string;
|
|
61
|
+
state: string;
|
|
62
|
+
/** A kit icon name (`check`, `x`, `spinner`, `warning-circle`, `question`). */
|
|
63
|
+
icon: string;
|
|
64
|
+
/** The state in words, the icon's accessible name: "Passed", "To do", "Not checked yet". */
|
|
65
|
+
iconLabel: string;
|
|
66
|
+
text: string;
|
|
67
|
+
hasAction: boolean;
|
|
68
|
+
actionLabel: string;
|
|
69
|
+
actionTitle: string;
|
|
70
|
+
actionDisabled: boolean;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** A command, drawn as a button: its id, its own title, and whether it may run now. */
|
|
74
|
+
export interface CommandButtonRow {
|
|
75
|
+
id: string;
|
|
76
|
+
label: string;
|
|
77
|
+
/** The tooltip: the title, or the title and the reason it is refused. */
|
|
78
|
+
title: string;
|
|
79
|
+
disabled: boolean;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** One deployment, in History or under Branch previews. */
|
|
83
|
+
export interface DeploymentRow {
|
|
84
|
+
key: string;
|
|
85
|
+
/** "2h ago". */
|
|
86
|
+
when: string;
|
|
87
|
+
/** "Production", or the preview's branch. */
|
|
88
|
+
label: string;
|
|
89
|
+
environment: string;
|
|
90
|
+
/** The state in words: "Live", "Replaced", "Ready", "Building…", "Failed" or "Canceled". */
|
|
91
|
+
status: string;
|
|
92
|
+
/** What the host reported, as its stage and status ("deploy: success"): the status's tooltip. */
|
|
93
|
+
statusDetail: string;
|
|
94
|
+
/** The stage's status alone, for its colour: `success`, `failure`, `active`… */
|
|
95
|
+
statusKey: string;
|
|
96
|
+
url: string;
|
|
97
|
+
openLabel: string;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/** One local branch. */
|
|
101
|
+
export interface BranchRow {
|
|
102
|
+
key: string;
|
|
103
|
+
name: string;
|
|
104
|
+
current: boolean;
|
|
105
|
+
/** For the current branch: "2 ahead, 1 behind" or "Up to date". */
|
|
106
|
+
note: string;
|
|
107
|
+
/** For any other: "Switch", or "Switch and reload" where a branch is a session. */
|
|
108
|
+
switchLabel: string;
|
|
109
|
+
/** The switch button's accessible name, which names the branch: "Switch to feature". */
|
|
110
|
+
switchName: string;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** Everything the document draws, as one value. */
|
|
114
|
+
export interface PublishWorkspaceView {
|
|
115
|
+
region: string;
|
|
116
|
+
titleId: string;
|
|
117
|
+
panelId: string;
|
|
118
|
+
/** The region of the destination card, which is the part a screenshot crops to. */
|
|
119
|
+
commitRegion: string;
|
|
120
|
+
destinationId: string;
|
|
121
|
+
tab: PublishTab;
|
|
122
|
+
tabTitle: string;
|
|
123
|
+
tabs: PublishTabRow[];
|
|
124
|
+
headline: string;
|
|
125
|
+
mood: "no-project" | "loading" | "no-repo" | "repo";
|
|
126
|
+
busy: boolean;
|
|
127
|
+
hasError: boolean;
|
|
128
|
+
error: string;
|
|
129
|
+
canClone: boolean;
|
|
130
|
+
// Review changes
|
|
131
|
+
syncLabel: string;
|
|
132
|
+
lastUpdated: string;
|
|
133
|
+
hasLastUpdated: boolean;
|
|
134
|
+
remoteState: "remote" | "local";
|
|
135
|
+
pullLabel: string;
|
|
136
|
+
pushLabel: string;
|
|
137
|
+
filesState: "listed" | "empty";
|
|
138
|
+
includedLabel: string;
|
|
139
|
+
allIncluded: boolean;
|
|
140
|
+
someIncluded: boolean;
|
|
141
|
+
groups: ReviewGroupRow[];
|
|
142
|
+
commitsState: "listed" | "empty";
|
|
143
|
+
commits: CommitRow[];
|
|
144
|
+
checks: PublishCheckRow[];
|
|
145
|
+
destination: PublishDestination;
|
|
146
|
+
destinations: DestinationChoice[];
|
|
147
|
+
hasRefusal: boolean;
|
|
148
|
+
refusal: string;
|
|
149
|
+
summary: string;
|
|
150
|
+
primaryLabel: string;
|
|
151
|
+
primaryDisabled: boolean;
|
|
152
|
+
hasBlocker: boolean;
|
|
153
|
+
blocker: string;
|
|
154
|
+
reviewState: "none" | "opened";
|
|
155
|
+
reviewLine: string;
|
|
156
|
+
reviewUrl: string;
|
|
157
|
+
// Deploys
|
|
158
|
+
hasLiveUrl: boolean;
|
|
159
|
+
liveUrl: string;
|
|
160
|
+
liveNone: string;
|
|
161
|
+
liveSummary: string;
|
|
162
|
+
deployCommands: CommandButtonRow[];
|
|
163
|
+
runningState: "none" | "running";
|
|
164
|
+
/** Each deploy in progress: the Activity record (§16.4), as the Activity feed draws it. */
|
|
165
|
+
running: ActivityRowView[];
|
|
166
|
+
deploysState: "listed" | "loading" | "note";
|
|
167
|
+
deploysNote: string;
|
|
168
|
+
deploysBusy: boolean;
|
|
169
|
+
historyState: "listed" | "empty";
|
|
170
|
+
history: DeploymentRow[];
|
|
171
|
+
previewsState: "listed" | "empty";
|
|
172
|
+
previews: DeploymentRow[];
|
|
173
|
+
// Branches
|
|
174
|
+
branchSummary: string;
|
|
175
|
+
newBranchDisabled: boolean;
|
|
176
|
+
hasBranchNote: boolean;
|
|
177
|
+
branchNote: string;
|
|
178
|
+
branchesState: "listed" | "empty";
|
|
179
|
+
branchesEmpty: string;
|
|
180
|
+
branches: BranchRow[];
|
|
181
|
+
// Hosting
|
|
182
|
+
sourceSummary: string;
|
|
183
|
+
sourceCommands: CommandButtonRow[];
|
|
184
|
+
hostTitle: string;
|
|
185
|
+
hostSummary: string;
|
|
186
|
+
hostCommands: CommandButtonRow[];
|
|
187
|
+
domainState: "set" | "none";
|
|
188
|
+
domain: string;
|
|
189
|
+
domainNote: string;
|
|
190
|
+
checklistSummary: string;
|
|
191
|
+
checklistSteps: DeployStepRowView[];
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/** What a control asks the flow to do. */
|
|
195
|
+
export interface PublishWorkspaceActions {
|
|
196
|
+
selectTab: (tab: string) => void;
|
|
197
|
+
refresh: () => void;
|
|
198
|
+
fetch: () => void;
|
|
199
|
+
pull: () => void;
|
|
200
|
+
push: () => void;
|
|
201
|
+
clone: () => void;
|
|
202
|
+
initRepository: () => void;
|
|
203
|
+
createRepository: () => void;
|
|
204
|
+
include: (path: string, included: boolean) => void;
|
|
205
|
+
includeAll: (included: boolean) => void;
|
|
206
|
+
compare: (path: string) => void;
|
|
207
|
+
discard: (path: string) => void;
|
|
208
|
+
runCheck: (key: string) => void;
|
|
209
|
+
pickDestination: (value: string) => void;
|
|
210
|
+
editSummary: (value: string) => void;
|
|
211
|
+
publish: () => void;
|
|
212
|
+
openUrl: (url: string) => void;
|
|
213
|
+
run: (commandId: string) => void;
|
|
214
|
+
reloadDeployments: () => void;
|
|
215
|
+
checkout: (name: string) => void;
|
|
216
|
+
newBranch: () => void;
|
|
217
|
+
/** The build adapter's mount box was created. */
|
|
218
|
+
adapterHost: (element: HTMLElement) => void;
|
|
219
|
+
/**
|
|
220
|
+
* A change row's Compare button was created, for the file at `path`: the control the keyboard
|
|
221
|
+
* goes back to when the comparison it opened is left.
|
|
222
|
+
*/
|
|
223
|
+
compareHost: (element: HTMLElement, path: string) => void;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
export interface PublishWorkspaceSurfaceHandle {
|
|
227
|
+
ready: Promise<HTMLElement>;
|
|
228
|
+
/** Whether what was mounted is still inside the host (a mount still in flight counts). */
|
|
229
|
+
attached: () => boolean;
|
|
230
|
+
update: (view: PublishWorkspaceView) => void;
|
|
231
|
+
dispose: () => void;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/** The scope the document reads: the view, and every action but the node callback. */
|
|
235
|
+
type PublishWorkspaceScope = PublishWorkspaceView &
|
|
236
|
+
Omit<PublishWorkspaceActions, "adapterHost" | "compareHost">;
|
|
237
|
+
|
|
238
|
+
/** An empty view: what a scope holds before the first projection. */
|
|
239
|
+
export function emptyPublishWorkspaceView(): PublishWorkspaceView {
|
|
240
|
+
return {
|
|
241
|
+
allIncluded: false,
|
|
242
|
+
blocker: "",
|
|
243
|
+
branchNote: "",
|
|
244
|
+
branchSummary: "",
|
|
245
|
+
branches: [],
|
|
246
|
+
branchesEmpty: "",
|
|
247
|
+
branchesState: "empty",
|
|
248
|
+
busy: false,
|
|
249
|
+
canClone: false,
|
|
250
|
+
checklistSteps: [],
|
|
251
|
+
checklistSummary: "",
|
|
252
|
+
checks: [],
|
|
253
|
+
commitRegion: "",
|
|
254
|
+
commits: [],
|
|
255
|
+
commitsState: "empty",
|
|
256
|
+
deployCommands: [],
|
|
257
|
+
deploysBusy: false,
|
|
258
|
+
deploysNote: "",
|
|
259
|
+
deploysState: "note",
|
|
260
|
+
destination: "live",
|
|
261
|
+
destinationId: "",
|
|
262
|
+
destinations: [],
|
|
263
|
+
domain: "",
|
|
264
|
+
domainNote: "",
|
|
265
|
+
domainState: "none",
|
|
266
|
+
error: "",
|
|
267
|
+
filesState: "empty",
|
|
268
|
+
groups: [],
|
|
269
|
+
hasBlocker: false,
|
|
270
|
+
hasBranchNote: false,
|
|
271
|
+
hasError: false,
|
|
272
|
+
hasLastUpdated: false,
|
|
273
|
+
hasLiveUrl: false,
|
|
274
|
+
hasRefusal: false,
|
|
275
|
+
headline: "",
|
|
276
|
+
history: [],
|
|
277
|
+
historyState: "empty",
|
|
278
|
+
hostCommands: [],
|
|
279
|
+
hostSummary: "",
|
|
280
|
+
hostTitle: "",
|
|
281
|
+
includedLabel: "",
|
|
282
|
+
lastUpdated: "",
|
|
283
|
+
liveNone: "",
|
|
284
|
+
liveSummary: "",
|
|
285
|
+
liveUrl: "",
|
|
286
|
+
mood: "loading",
|
|
287
|
+
newBranchDisabled: false,
|
|
288
|
+
panelId: "",
|
|
289
|
+
previews: [],
|
|
290
|
+
previewsState: "empty",
|
|
291
|
+
primaryDisabled: true,
|
|
292
|
+
primaryLabel: "",
|
|
293
|
+
pullLabel: "Pull",
|
|
294
|
+
pushLabel: "Push",
|
|
295
|
+
refusal: "",
|
|
296
|
+
region: "",
|
|
297
|
+
remoteState: "local",
|
|
298
|
+
reviewLine: "",
|
|
299
|
+
reviewState: "none",
|
|
300
|
+
reviewUrl: "",
|
|
301
|
+
running: [],
|
|
302
|
+
runningState: "none",
|
|
303
|
+
someIncluded: false,
|
|
304
|
+
sourceCommands: [],
|
|
305
|
+
sourceSummary: "",
|
|
306
|
+
summary: "",
|
|
307
|
+
syncLabel: "",
|
|
308
|
+
tab: "review",
|
|
309
|
+
tabTitle: "",
|
|
310
|
+
tabs: [],
|
|
311
|
+
titleId: "",
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/** The file a change row stands for, read from the row scope the runtime renders it with. */
|
|
316
|
+
function rowPathOf(state: JxScope | undefined): string {
|
|
317
|
+
const map = state?.["$map"];
|
|
318
|
+
const row = isJsonObject(map) ? map["item"] : undefined;
|
|
319
|
+
const path = isJsonObject(row) ? row["path"] : undefined;
|
|
320
|
+
return isString(path) ? path : "";
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/** The `part` a definition declares, or `""`. */
|
|
324
|
+
function partOf(def: JxElement | string): string {
|
|
325
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
326
|
+
return isString(part) ? part : "";
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* Mount the Publish workspace into a pane's stage.
|
|
331
|
+
*
|
|
332
|
+
* @param {HTMLElement} host - The pane's stage, emptied first
|
|
333
|
+
* @param {PublishWorkspaceView} view - What to draw right now
|
|
334
|
+
* @param {PublishWorkspaceActions} actions - What each control does
|
|
335
|
+
* @returns {PublishWorkspaceSurfaceHandle}
|
|
336
|
+
*/
|
|
337
|
+
export function mountPublishWorkspaceSurface(
|
|
338
|
+
host: HTMLElement,
|
|
339
|
+
view: PublishWorkspaceView,
|
|
340
|
+
actions: PublishWorkspaceActions,
|
|
341
|
+
): PublishWorkspaceSurfaceHandle {
|
|
342
|
+
host.replaceChildren();
|
|
343
|
+
const { adapterHost, compareHost, ...controls } = actions;
|
|
344
|
+
const scope = reactive<PublishWorkspaceScope>({ ...emptyPublishWorkspaceView(), ...controls });
|
|
345
|
+
Object.assign(scope, view);
|
|
346
|
+
|
|
347
|
+
let mounted: SurfaceHandle | null = null;
|
|
348
|
+
let disposed = false;
|
|
349
|
+
const ready = mountSurface("publish-workspace", scope, host, {
|
|
350
|
+
onNodeCreated: (element, _path, def, state) => {
|
|
351
|
+
// `disposed` first: nodes are still created while a mount that was taken down runs out.
|
|
352
|
+
if (disposed || !(element instanceof HTMLElement)) {
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
const part = partOf(def);
|
|
356
|
+
if (part === "adapter-island") {
|
|
357
|
+
adapterHost(element);
|
|
358
|
+
} else if (part === "compare") {
|
|
359
|
+
compareHost(element, rowPathOf(state));
|
|
360
|
+
}
|
|
361
|
+
},
|
|
362
|
+
}).then((surface) => {
|
|
363
|
+
if (disposed) {
|
|
364
|
+
surface.dispose();
|
|
365
|
+
} else {
|
|
366
|
+
mounted = surface;
|
|
367
|
+
}
|
|
368
|
+
/* SAFETY: `publish-workspace.json`'s root definition is a `div` element, so the runtime mounts
|
|
369
|
+
an HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
370
|
+
return surface.root as HTMLElement;
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
return {
|
|
374
|
+
attached: () => {
|
|
375
|
+
if (disposed) {
|
|
376
|
+
return false;
|
|
377
|
+
}
|
|
378
|
+
const root = mounted?.root;
|
|
379
|
+
return root === undefined ? true : root instanceof HTMLElement && host.contains(root);
|
|
380
|
+
},
|
|
381
|
+
dispose() {
|
|
382
|
+
disposed = true;
|
|
383
|
+
mounted?.dispose();
|
|
384
|
+
mounted = null;
|
|
385
|
+
},
|
|
386
|
+
ready,
|
|
387
|
+
update: (next) => {
|
|
388
|
+
Object.assign(scope, next);
|
|
389
|
+
},
|
|
390
|
+
};
|
|
391
|
+
}
|
package/src/surfaces/rail.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://jxsuite.com/schema/v1",
|
|
3
3
|
"$id": "StudioRail",
|
|
4
|
-
"$description": "The Navigator rail: a rendering of the panel registry. The adapter hands in `groups`, every rail-able panel grouped by level with its selected state and badge
|
|
4
|
+
"$description": "The Navigator rail: a rendering of the panel registry. The adapter hands in `groups`, every rail-able panel grouped by level with its selected state and badge. Nothing here is a list of panels. Each button prints its record's short `railLabel` under the glyph, falling back to `title`, and carries the full `title` as its accessible name and tooltip: the visible words lead the name a reader hears (WCAG 2.5.3), and the tooltip restores what a short label leaves out. The rail has no foot: the gear lives in the top bar, because the rail is drawn only in the Design workspace, and the Library button left with the Content workspace that replaces it.",
|
|
5
5
|
"tagName": "div",
|
|
6
6
|
"attributes": {
|
|
7
7
|
"part": "rail"
|
|
@@ -23,12 +23,6 @@
|
|
|
23
23
|
"$description": "The element draws the hairline and announces it; what the rail owns is where it sits. The rule outranks `jx-divider`'s own margin by one element in the selector, which is the sanctioned way a host retunes a kit element (ui.md §3.2) and the reason the divider's spacing is on its HOST rather than on the rule inside it.",
|
|
24
24
|
"margin": "var(--jx-space-3) var(--jx-space-4)"
|
|
25
25
|
},
|
|
26
|
-
"& > [part=\"foot\"]": {
|
|
27
|
-
"marginTop": "auto",
|
|
28
|
-
"display": "flex",
|
|
29
|
-
"flexDirection": "column",
|
|
30
|
-
"padding": "var(--jx-space-3) 0"
|
|
31
|
-
},
|
|
32
26
|
"& jx-action-button": {
|
|
33
27
|
"width": "100%"
|
|
34
28
|
},
|
|
@@ -44,11 +38,6 @@
|
|
|
44
38
|
"background": "transparent",
|
|
45
39
|
"color": "var(--jx-fg)",
|
|
46
40
|
"opacity": "1"
|
|
47
|
-
},
|
|
48
|
-
"& jx-action-button[data-expanded] > [part=\"control\"]": {
|
|
49
|
-
"background": "var(--jx-hover-bg)",
|
|
50
|
-
"color": "var(--jx-fg)",
|
|
51
|
-
"opacity": "1"
|
|
52
41
|
}
|
|
53
42
|
},
|
|
54
43
|
"children": [
|
|
@@ -156,153 +145,6 @@
|
|
|
156
145
|
}
|
|
157
146
|
}
|
|
158
147
|
]
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
"tagName": "div",
|
|
162
|
-
"attributes": {
|
|
163
|
-
"part": "foot"
|
|
164
|
-
},
|
|
165
|
-
"children": [
|
|
166
|
-
{
|
|
167
|
-
"$switch": {
|
|
168
|
-
"$ref": "#/state/libraryVisible"
|
|
169
|
-
},
|
|
170
|
-
"tagName": "div",
|
|
171
|
-
"attributes": {
|
|
172
|
-
"part": "foot-library"
|
|
173
|
-
},
|
|
174
|
-
"cases": {
|
|
175
|
-
"true": {
|
|
176
|
-
"tagName": "jx-action-button",
|
|
177
|
-
"$props": {
|
|
178
|
-
"label": "Library",
|
|
179
|
-
"hint": "Library",
|
|
180
|
-
"icon": "books",
|
|
181
|
-
"stacked": true,
|
|
182
|
-
"selected": {
|
|
183
|
-
"$ref": "#/state/libraryOpen"
|
|
184
|
-
}
|
|
185
|
-
},
|
|
186
|
-
"attributes": {
|
|
187
|
-
"data-rail-action": "library.open"
|
|
188
|
-
},
|
|
189
|
-
"onclick": {
|
|
190
|
-
"$prototype": "Function",
|
|
191
|
-
"body": [
|
|
192
|
-
{
|
|
193
|
-
"operator": "call",
|
|
194
|
-
"target": {
|
|
195
|
-
"$ref": "#/state/openLibrary"
|
|
196
|
-
},
|
|
197
|
-
"value": []
|
|
198
|
-
}
|
|
199
|
-
]
|
|
200
|
-
},
|
|
201
|
-
"children": [
|
|
202
|
-
{
|
|
203
|
-
"tagName": "span",
|
|
204
|
-
"textContent": "Library"
|
|
205
|
-
}
|
|
206
|
-
]
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
},
|
|
210
|
-
{
|
|
211
|
-
"tagName": "div",
|
|
212
|
-
"attributes": {
|
|
213
|
-
"part": "foot-settings"
|
|
214
|
-
},
|
|
215
|
-
"$switch": {
|
|
216
|
-
"$ref": "#/state/settingsVisible"
|
|
217
|
-
},
|
|
218
|
-
"cases": {
|
|
219
|
-
"true": {
|
|
220
|
-
"tagName": "jx-action-button",
|
|
221
|
-
"$props": {
|
|
222
|
-
"label": "Settings",
|
|
223
|
-
"hint": "Settings",
|
|
224
|
-
"icon": "gear",
|
|
225
|
-
"stacked": true,
|
|
226
|
-
"haspopup": "menu",
|
|
227
|
-
"expanded": {
|
|
228
|
-
"$ref": "#/state/settingsOpen"
|
|
229
|
-
}
|
|
230
|
-
},
|
|
231
|
-
"attributes": {
|
|
232
|
-
"data-rail-menu": "settings",
|
|
233
|
-
"data-expanded": "${state.settingsOpen ? '' : null}"
|
|
234
|
-
},
|
|
235
|
-
"onclick": {
|
|
236
|
-
"$prototype": "Function",
|
|
237
|
-
"body": [
|
|
238
|
-
{
|
|
239
|
-
"operator": "call",
|
|
240
|
-
"target": {
|
|
241
|
-
"$ref": "#/state/openSettings"
|
|
242
|
-
},
|
|
243
|
-
"value": [
|
|
244
|
-
{
|
|
245
|
-
"$ref": "event#/currentTarget"
|
|
246
|
-
}
|
|
247
|
-
]
|
|
248
|
-
}
|
|
249
|
-
]
|
|
250
|
-
},
|
|
251
|
-
"onkeydown": {
|
|
252
|
-
"$prototype": "Function",
|
|
253
|
-
"body": [
|
|
254
|
-
{
|
|
255
|
-
"$switch": {
|
|
256
|
-
"$ref": "event#/key"
|
|
257
|
-
},
|
|
258
|
-
"cases": {
|
|
259
|
-
"ArrowUp": [
|
|
260
|
-
{
|
|
261
|
-
"operator": "call",
|
|
262
|
-
"target": {
|
|
263
|
-
"$ref": "#/state/openSettings"
|
|
264
|
-
},
|
|
265
|
-
"value": [
|
|
266
|
-
{
|
|
267
|
-
"$ref": "event#/currentTarget"
|
|
268
|
-
}
|
|
269
|
-
]
|
|
270
|
-
},
|
|
271
|
-
{
|
|
272
|
-
"preventDefault": true
|
|
273
|
-
}
|
|
274
|
-
],
|
|
275
|
-
"ArrowDown": [
|
|
276
|
-
{
|
|
277
|
-
"operator": "call",
|
|
278
|
-
"target": {
|
|
279
|
-
"$ref": "#/state/openSettings"
|
|
280
|
-
},
|
|
281
|
-
"value": [
|
|
282
|
-
{
|
|
283
|
-
"$ref": "event#/currentTarget"
|
|
284
|
-
}
|
|
285
|
-
]
|
|
286
|
-
},
|
|
287
|
-
{
|
|
288
|
-
"preventDefault": true
|
|
289
|
-
}
|
|
290
|
-
]
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
]
|
|
294
|
-
},
|
|
295
|
-
"children": [
|
|
296
|
-
{
|
|
297
|
-
"tagName": "span",
|
|
298
|
-
"textContent": "Settings"
|
|
299
|
-
}
|
|
300
|
-
]
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
],
|
|
305
|
-
"$description": "The two rail buttons that open no Navigator panel: the Library, which is a canvas tab rather than a panel and so sits with the other exception, above the gear."
|
|
306
148
|
}
|
|
307
149
|
]
|
|
308
150
|
}
|