@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.
- 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
|
@@ -1,84 +1,94 @@
|
|
|
1
1
|
/// <reference lib="dom" />
|
|
2
2
|
/**
|
|
3
|
-
* Project Settings
|
|
3
|
+
* Project Settings: the built-in sections, the `project.json` tab's editors, and the two commands
|
|
4
|
+
* that reach them.
|
|
4
5
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* **Settings is a dialog; the configuration DOCUMENT is still a tab.** `project.json` is a real Tab
|
|
7
|
+
* under the transaction log with one write chokepoint (`tabs/project-config.ts`, §17.1), and it has
|
|
8
|
+
* three editors, the Styles workspace's three views: Elements (`stylebook`), Variables (`tokens`,
|
|
9
|
+
* `style/variables-view.ts`) and Code (`source`). Project Settings is neither of them: it is a
|
|
10
|
+
* dialog in the dialog layer (`./settings-dialog.ts`) hosting the section list, reachable from
|
|
11
|
+
* every workspace, and every section in it writes through the same chokepoint the tab's editors do,
|
|
12
|
+
* so the file has one history whichever door changed it.
|
|
9
13
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* dirty flag and ⌘S are the ordinary document verbs rather than three bespoke ones. That is the
|
|
15
|
-
* whole of the residual the shell redesign's configuration phase disclosed ("⌘Z reaches config
|
|
16
|
-
* history only when the `project.json` tab is focused"): the settings surface now IS that tab.
|
|
17
|
-
*
|
|
18
|
-
* **`settings.open` did not change what it means.** The deliverable was a near-zero manifest diff:
|
|
19
|
-
* the command still means "reach project settings, optionally at a named section", its args schema
|
|
20
|
-
* still declares `section`, and every shot step that names it is untouched. What changed is the
|
|
21
|
-
* `run` — a Tab instead of a modal — and the frame the seven region crops are taken in.
|
|
14
|
+
* **`settings.open` did not change what it means.** It still means "reach project settings,
|
|
15
|
+
* optionally at a named section and entry", its args schema still declares `section` and `entry`,
|
|
16
|
+
* and a key nobody registered still fails the call. What changed is the `run`: a dialog instead of
|
|
17
|
+
* a tab mode.
|
|
22
18
|
*
|
|
23
19
|
* @docs studio/projects/settings
|
|
24
20
|
*/
|
|
25
21
|
|
|
26
22
|
import { errorMessage } from "@jxsuite/schema/parse";
|
|
27
|
-
import {
|
|
23
|
+
import {
|
|
24
|
+
argsSchema,
|
|
25
|
+
enumArg,
|
|
26
|
+
enumProperty,
|
|
27
|
+
optionalStringArg,
|
|
28
|
+
stringProperty,
|
|
29
|
+
} from "../commands/command-args";
|
|
28
30
|
import { notify } from "../services/notify";
|
|
29
31
|
import { projectState } from "../state";
|
|
30
32
|
import { PROJECT_CONFIG_PATH } from "../tabs/tab";
|
|
31
33
|
import { lendProjectConfigLayout } from "../tabs/project-config";
|
|
32
|
-
import {
|
|
34
|
+
import { focusPane, openTab, workspace } from "../workspace/workspace";
|
|
33
35
|
import {
|
|
34
36
|
notifySettingsDocument,
|
|
35
37
|
registerSettingsSection,
|
|
36
|
-
settingsDocumentSection,
|
|
37
38
|
setSettingsSection,
|
|
38
39
|
settingsSectionKeys,
|
|
39
40
|
} from "./section-registry";
|
|
40
41
|
import { renderContextsSection } from "./contexts-section";
|
|
41
|
-
import { renderCssVarsEditor } from "./css-vars-editor";
|
|
42
42
|
import { renderDefsEditor } from "./defs-editor";
|
|
43
43
|
import { renderDependenciesEditor } from "./dependencies-editor";
|
|
44
44
|
import { renderExtensionsSection } from "./extensions-section";
|
|
45
|
-
import {
|
|
45
|
+
import { renderRawJsonSection } from "./project-sections";
|
|
46
46
|
import { renderGeneralSettings } from "./general-settings";
|
|
47
47
|
import { renderHeadEditor } from "./head-editor";
|
|
48
48
|
import { renderLocalesSection } from "./locales-section";
|
|
49
49
|
import { selectContributedEntry } from "./contributed-section";
|
|
50
|
+
import { closeSettingsDialog, openSettingsDialog } from "./settings-dialog";
|
|
50
51
|
// The NAME and the wire value, kept apart by that module on purpose — see its docstring.
|
|
51
|
-
import {
|
|
52
|
+
import {
|
|
53
|
+
PROJECT_STYLES_TITLE,
|
|
54
|
+
STYLES_TAB_MODES,
|
|
55
|
+
STYLES_VIEWS,
|
|
56
|
+
STYLES_VIEW_MODES,
|
|
57
|
+
} from "../style/project-styles";
|
|
58
|
+
import { activeRegistry } from "../commands/active-registry";
|
|
59
|
+
import { shell } from "../shell";
|
|
52
60
|
import type { Tab } from "../tabs/tab";
|
|
53
61
|
import type { AnyCommand, CommandRegistry } from "../commands/registry";
|
|
62
|
+
import type { CommandArgValues } from "../commands/command-args";
|
|
63
|
+
|
|
64
|
+
/** The Code editor's mode, `source`, which `commands/context.ts` maps to the `code` kind. */
|
|
65
|
+
const SOURCE_MODE = STYLES_VIEW_MODES.code;
|
|
54
66
|
|
|
55
67
|
/**
|
|
56
|
-
* The
|
|
57
|
-
*
|
|
58
|
-
* `project.json` already declared `["stylebook", "source"]` (`tabs/tab.ts`'s `inferModes`); this is
|
|
59
|
-
* the third editor over the same document and it leads, because reaching configuration through a
|
|
60
|
-
* form is what "Settings" means to everyone who is not reading the file.
|
|
68
|
+
* The `project.json` tab's editors, in the order its Editor control offers them: Elements,
|
|
69
|
+
* Variables and Code, the Styles workspace's three views.
|
|
61
70
|
*/
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
/** The tab's mode list when Project Settings opens it. Settings first, so it is the initial mode. */
|
|
65
|
-
const SETTINGS_TAB_MODES = [SETTINGS_MODE, "stylebook", "source"];
|
|
71
|
+
const PROJECT_TAB_MODES = STYLES_TAB_MODES;
|
|
66
72
|
|
|
67
73
|
// ─── Built-in sections ────────────────────────────────────────────────────────
|
|
68
|
-
/* Orders leave gaps so a contribution can land between two built-ins. Content Types is NOT here
|
|
74
|
+
/* Orders leave gaps so a contribution can land between two built-ins. Content Types is NOT here:
|
|
69
75
|
the parser extension contributes it (order 50) through its Content class descriptor's
|
|
70
76
|
`$studio.settings` block, registered via ./extension-sections, which is the same path any
|
|
71
|
-
extension's section takes
|
|
77
|
+
extension's section takes, and it is listed under Integrations because that is the default
|
|
78
|
+
group for a contribution.
|
|
72
79
|
|
|
73
|
-
|
|
80
|
+
Two sections that used to be here are not, and their renderers are not deleted: CSS Variables
|
|
81
|
+
(`./css-vars-editor.ts`) belongs to the Styles workspace, and Deploy (`renderDeploySection`) to
|
|
82
|
+
the Publish workspace. The dialog's Moved footnote says where each went.
|
|
83
|
+
|
|
84
|
+
`icon` is a KEY into the kit's glyph manifest (`@jxsuite/ui/icons`), not a tag: `studio.md`
|
|
74
85
|
§13.5 is about exactly this distinction, and a key with no row draws nothing and says nothing.
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
held to the kit's manifest by `settings-document.test.ts` so that a name is right when the inner
|
|
79
|
-
nav does draw it, rather than discovered wrong then. */
|
|
86
|
+
The field is still documented as reserved (`section-registry.ts`), so nothing here draws today;
|
|
87
|
+
the names are held to the kit's manifest by `settings-document.test.ts` so that a name is right
|
|
88
|
+
when the nav does draw it, rather than discovered wrong then. */
|
|
80
89
|
|
|
81
90
|
registerSettingsSection({
|
|
91
|
+
group: "general",
|
|
82
92
|
icon: "sliders-horizontal",
|
|
83
93
|
key: "overview",
|
|
84
94
|
label: "Overview",
|
|
@@ -86,13 +96,35 @@ registerSettingsSection({
|
|
|
86
96
|
render: renderGeneralSettings,
|
|
87
97
|
});
|
|
88
98
|
/*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* pane
|
|
92
|
-
*
|
|
93
|
-
* into the document's inner nav without its renderer being touched.
|
|
99
|
+
* Locales sits with Overview because both are what every author decides about the whole site: its
|
|
100
|
+
* name and address, and the languages it is published in. It is also the definition site the
|
|
101
|
+
* pane's language control, the Languages panel and `i18n.addLocale` all read: there is one
|
|
102
|
+
* `i18n.locales` and this is the form over it.
|
|
94
103
|
*/
|
|
95
104
|
registerSettingsSection({
|
|
105
|
+
group: "general",
|
|
106
|
+
icon: "globe",
|
|
107
|
+
key: "locales",
|
|
108
|
+
label: "Locales",
|
|
109
|
+
order: 25,
|
|
110
|
+
render: renderLocalesSection,
|
|
111
|
+
});
|
|
112
|
+
registerSettingsSection({
|
|
113
|
+
group: "integrations",
|
|
114
|
+
icon: "share-network",
|
|
115
|
+
key: "extensions",
|
|
116
|
+
label: "Extensions",
|
|
117
|
+
order: 5,
|
|
118
|
+
render: renderExtensionsSection,
|
|
119
|
+
});
|
|
120
|
+
/*
|
|
121
|
+
* Contexts leads Advanced because it is the project's second identity: Overview says what the site
|
|
122
|
+
* IS, Contexts says what it is rendered UNDER (breakpoints, color schemes, features). It is a
|
|
123
|
+
* definition site only: the pane context bar selects among what is defined here, and its "Manage
|
|
124
|
+
* contexts…" footer names this key (§6.2).
|
|
125
|
+
*/
|
|
126
|
+
registerSettingsSection({
|
|
127
|
+
group: "advanced",
|
|
96
128
|
icon: "browser",
|
|
97
129
|
key: "contexts",
|
|
98
130
|
label: "Contexts",
|
|
@@ -100,39 +132,15 @@ registerSettingsSection({
|
|
|
100
132
|
render: renderContextsSection,
|
|
101
133
|
});
|
|
102
134
|
registerSettingsSection({
|
|
135
|
+
group: "advanced",
|
|
103
136
|
icon: "file-code",
|
|
104
137
|
key: "head",
|
|
105
138
|
label: "Site head",
|
|
106
139
|
order: 20,
|
|
107
140
|
render: renderHeadEditor,
|
|
108
141
|
});
|
|
109
|
-
/*
|
|
110
|
-
* Locales sits under Site head because both are facts about the whole site's HEAD rather than about
|
|
111
|
-
* one page: `<html lang>` and `<html dir>` are what a locale decides, and the routing choice below
|
|
112
|
-
* them decides what a page's URL looks like. It is also the definition site the pane's language
|
|
113
|
-
* control, the Languages panel and `i18n.addLocale` all read — there is one `i18n.locales` and this
|
|
114
|
-
* is the form over it.
|
|
115
|
-
*/
|
|
116
|
-
registerSettingsSection({
|
|
117
|
-
icon: "globe",
|
|
118
|
-
key: "locales",
|
|
119
|
-
label: "Locales",
|
|
120
|
-
order: 25,
|
|
121
|
-
render: renderLocalesSection,
|
|
122
|
-
});
|
|
123
|
-
/*
|
|
124
|
-
* CSS Variables was the one section the shell redesign's configuration phase did not list, and it
|
|
125
|
-
* stayed so that the project's design tokens never left every surface at once; §17.1 lists it now,
|
|
126
|
-
* and `css-variables-shot` addresses this key by name.
|
|
127
|
-
*/
|
|
128
|
-
registerSettingsSection({
|
|
129
|
-
icon: "paint-brush",
|
|
130
|
-
key: "cssVars",
|
|
131
|
-
label: "CSS Variables",
|
|
132
|
-
order: 30,
|
|
133
|
-
render: renderCssVarsEditor,
|
|
134
|
-
});
|
|
135
142
|
registerSettingsSection({
|
|
143
|
+
group: "advanced",
|
|
136
144
|
icon: "brackets-curly",
|
|
137
145
|
key: "definitions",
|
|
138
146
|
label: "Data Shapes",
|
|
@@ -140,70 +148,72 @@ registerSettingsSection({
|
|
|
140
148
|
render: renderDefsEditor,
|
|
141
149
|
});
|
|
142
150
|
registerSettingsSection({
|
|
151
|
+
group: "advanced",
|
|
143
152
|
icon: "cube",
|
|
144
153
|
key: "dependencies",
|
|
145
154
|
label: "Packages",
|
|
146
155
|
order: 60,
|
|
147
156
|
render: renderDependenciesEditor,
|
|
148
157
|
});
|
|
158
|
+
/*
|
|
159
|
+
* Raw JSON's "Edit as code" leaves the dialog: the Code editor is the `project.json` tab's, which is
|
|
160
|
+
* the Styles workspace's, so the dialog closes and the tab opens in its source editor. Activating
|
|
161
|
+
* it is what switches the workspace (`workspace/tab-workspace.ts`).
|
|
162
|
+
*/
|
|
149
163
|
registerSettingsSection({
|
|
150
|
-
|
|
151
|
-
key: "extensions",
|
|
152
|
-
label: "Extensions",
|
|
153
|
-
order: 70,
|
|
154
|
-
render: renderExtensionsSection,
|
|
155
|
-
});
|
|
156
|
-
registerSettingsSection({
|
|
157
|
-
icon: "upload-simple",
|
|
158
|
-
key: "deploy",
|
|
159
|
-
label: "Deploy",
|
|
160
|
-
order: 80,
|
|
161
|
-
render: renderDeploySection,
|
|
162
|
-
});
|
|
163
|
-
registerSettingsSection({
|
|
164
|
+
group: "advanced",
|
|
164
165
|
icon: "code",
|
|
165
166
|
key: "rawJson",
|
|
166
167
|
label: "Raw JSON",
|
|
167
168
|
order: 900,
|
|
168
|
-
render:
|
|
169
|
+
render: (container) => {
|
|
170
|
+
renderRawJsonSection(container, {
|
|
171
|
+
editAsCode: () => {
|
|
172
|
+
closeSettingsDialog();
|
|
173
|
+
showSettingsDocument(SOURCE_MODE);
|
|
174
|
+
},
|
|
175
|
+
});
|
|
176
|
+
},
|
|
169
177
|
});
|
|
170
178
|
|
|
171
|
-
// ───
|
|
179
|
+
// ─── The document ─────────────────────────────────────────────────────────────
|
|
172
180
|
|
|
173
181
|
/**
|
|
174
|
-
*
|
|
182
|
+
* Remember the view the Styles workspace's home is in, when `mode` is one of the two home views
|
|
183
|
+
* (Variables or Elements). Code is a view beside the home, never the home, so it is not remembered:
|
|
184
|
+
* Back from Code and the next visit both return to the view recorded here
|
|
185
|
+
* (`shell.stylebook.view`).
|
|
175
186
|
*
|
|
176
|
-
* @
|
|
187
|
+
* @param {string} mode The canvas mode `project.json` was just shown in
|
|
177
188
|
*/
|
|
178
|
-
export function
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
/** Whether the active tab is the configuration document in its settings editor. */
|
|
183
|
-
export function settingsDocumentOpen(): boolean {
|
|
184
|
-
const tab = activeTab.value;
|
|
185
|
-
return tab?.documentPath === PROJECT_CONFIG_PATH && tab.session.ui.canvasMode === SETTINGS_MODE;
|
|
189
|
+
export function rememberStylesView(mode: string): void {
|
|
190
|
+
if (mode === STYLES_VIEW_MODES.variables || mode === STYLES_VIEW_MODES.elements) {
|
|
191
|
+
shell.stylebook.view = mode;
|
|
192
|
+
}
|
|
186
193
|
}
|
|
187
194
|
|
|
188
|
-
// ─── The document ─────────────────────────────────────────────────────────────
|
|
189
|
-
|
|
190
195
|
/**
|
|
191
|
-
* Open (or reveal) the configuration document in its
|
|
196
|
+
* Open (or reveal) the configuration document in one of its editors.
|
|
192
197
|
*
|
|
193
|
-
* The tab is keyed by `project.json` on purpose: opening the file from the Files tree
|
|
194
|
-
*
|
|
195
|
-
* this only switches the editor, so an author who was reading the raw
|
|
198
|
+
* The tab is keyed by `project.json` on purpose: opening the file from the Files tree, opening
|
|
199
|
+
* Project Styles and "Edit as code" all reach the same tab, the same history and the same dirty
|
|
200
|
+
* flag. When it is already open this only switches the editor, so an author who was reading the raw
|
|
201
|
+
* JSON keeps their undo stack.
|
|
196
202
|
*
|
|
203
|
+
* @param {string} [mode] The editor: Variables (`tokens`), Elements (`stylebook`) or Code
|
|
204
|
+
* (`source`). Defaults to the Styles home view the author was last in, Variables on a first
|
|
205
|
+
* visit.
|
|
197
206
|
* @returns {Tab | null} The tab, or null when no project is open
|
|
198
207
|
*/
|
|
199
|
-
export function showSettingsDocument(mode: string =
|
|
208
|
+
export function showSettingsDocument(mode: string = shell.stylebook.view): Tab | null {
|
|
200
209
|
const state = projectState;
|
|
201
210
|
if (!state) {
|
|
202
211
|
return null;
|
|
203
212
|
}
|
|
213
|
+
rememberStylesView(mode);
|
|
204
214
|
const existing = workspace.tabs.get(PROJECT_CONFIG_PATH);
|
|
205
215
|
if (existing) {
|
|
206
|
-
for (const candidate of
|
|
216
|
+
for (const candidate of PROJECT_TAB_MODES.toReversed()) {
|
|
207
217
|
if (!existing.capabilities.modes.includes(candidate)) {
|
|
208
218
|
existing.capabilities.modes.unshift(candidate);
|
|
209
219
|
}
|
|
@@ -213,20 +223,18 @@ export function showSettingsDocument(mode: string = SETTINGS_MODE): Tab | null {
|
|
|
213
223
|
return revealTab(existing);
|
|
214
224
|
}
|
|
215
225
|
const tab = openTab({
|
|
216
|
-
capabilities: { modes: [...
|
|
226
|
+
capabilities: { modes: [...PROJECT_TAB_MODES] },
|
|
217
227
|
document: state.projectConfig ?? {},
|
|
218
228
|
documentPath: PROJECT_CONFIG_PATH,
|
|
219
229
|
id: PROJECT_CONFIG_PATH,
|
|
220
230
|
});
|
|
221
231
|
/* The mode is written here rather than left to the capability list, because `createTab` seeds
|
|
222
|
-
`session.ui.canvasMode` from
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
capability list stays in its declared order for the same reason it always had one: the tab's
|
|
226
|
-
Editor control offers the modes in that order. */
|
|
232
|
+
`session.ui.canvasMode` from the first non-preview mode, and a door over the same document has
|
|
233
|
+
to SAY which editor it is: "Edit as code" from a cold workspace must open the source, not
|
|
234
|
+
Project Styles. */
|
|
227
235
|
tab.session.ui.canvasMode = mode;
|
|
228
236
|
tab.session.ui.preview = false;
|
|
229
|
-
/* The tab was opened over the configuration OBJECT
|
|
237
|
+
/* The tab was opened over the configuration OBJECT: the platform parsed it, so there is no text
|
|
230
238
|
here to read a layout from, and `doc.layout` is null. A ⌘S on it would then write the
|
|
231
239
|
formatter's layout for fresh output while a settings commit on the same document wrote the
|
|
232
240
|
file's (`tabs/project-config.ts`, issue 308). The chokepoint reads the file once anyway; it
|
|
@@ -239,7 +247,7 @@ export function showSettingsDocument(mode: string = SETTINGS_MODE): Tab | null {
|
|
|
239
247
|
* Make an already-open tab the active one without rebuilding it.
|
|
240
248
|
*
|
|
241
249
|
* `openTab` recreates the tab from scratch, which would discard the configuration document's
|
|
242
|
-
* history
|
|
250
|
+
* history.
|
|
243
251
|
*
|
|
244
252
|
* @param {Tab} tab
|
|
245
253
|
* @returns {Tab}
|
|
@@ -252,8 +260,7 @@ function revealTab(tab: Tab): Tab {
|
|
|
252
260
|
operations, and the assignment is one of them: the other three are `resetTabCycle` (so
|
|
253
261
|
Ctrl-Tab cycles from where you now are, not from the pane you left), `promoteMru` (so the
|
|
254
262
|
MRU order agrees with what is on screen) and `syncTreeSelection` (so the file tree points
|
|
255
|
-
at the document you are looking at).
|
|
256
|
-
all three describing the pane it had come from. */
|
|
263
|
+
at the document you are looking at). */
|
|
257
264
|
focusPane(pane.id);
|
|
258
265
|
break;
|
|
259
266
|
}
|
|
@@ -264,12 +271,12 @@ function revealTab(tab: Tab): Tab {
|
|
|
264
271
|
/**
|
|
265
272
|
* Reach Project Settings, optionally at a named section.
|
|
266
273
|
*
|
|
267
|
-
*
|
|
268
|
-
*
|
|
269
|
-
*
|
|
270
|
-
*
|
|
271
|
-
*
|
|
272
|
-
* resolving and the frame being drawn.
|
|
274
|
+
* Opens the dialog on the requested section (or on the one it last showed, which the registry
|
|
275
|
+
* remembers for the session), then awaits the contributed-section sync before returning, so a
|
|
276
|
+
* caller that then asks whether a section exists is asking the complete registry. The sync is
|
|
277
|
+
* COALESCED (`extension-sections.ts`): `refreshExtensionUi` fires the same function on project
|
|
278
|
+
* activation and after every `project.json` write, and a second, interleaved run could otherwise
|
|
279
|
+
* take the caller's section down between the promise resolving and the frame being drawn.
|
|
273
280
|
*
|
|
274
281
|
* @param {string} [section]
|
|
275
282
|
*/
|
|
@@ -277,13 +284,12 @@ export async function openProjectSettings(section?: string): Promise<void> {
|
|
|
277
284
|
if (section !== undefined) {
|
|
278
285
|
setSettingsSection(section);
|
|
279
286
|
}
|
|
280
|
-
|
|
281
|
-
notifySettingsDocument();
|
|
287
|
+
void openSettingsDialog();
|
|
282
288
|
try {
|
|
283
289
|
const { syncExtensionSettingsSections } = await import("./extension-sections");
|
|
284
290
|
await syncExtensionSettingsSections();
|
|
285
291
|
} catch (error) {
|
|
286
|
-
/* Contributed sections are optional
|
|
292
|
+
/* Contributed sections are optional (the built-ins render regardless) but a contribution that
|
|
287
293
|
will not load is a broken extension, and §17.1 files a section that fails to load as a
|
|
288
294
|
Problem rather than a toast that erases itself. */
|
|
289
295
|
notify.warn(`Could not load extension settings sections — ${errorMessage(error)}`, {
|
|
@@ -305,22 +311,17 @@ export async function settingsSectionsReady(): Promise<void> {
|
|
|
305
311
|
// ─── Commands ─────────────────────────────────────────────────────────────────
|
|
306
312
|
|
|
307
313
|
/**
|
|
308
|
-
* Open Project Settings
|
|
314
|
+
* Open Project Settings: optionally on a named section, optionally at a named entry.
|
|
309
315
|
*
|
|
310
|
-
*
|
|
311
|
-
*
|
|
312
|
-
*
|
|
313
|
-
* LABELS in a hand-kept map; the fourth was raw input standing in for a verb that did not exist
|
|
314
|
-
* ("`settings.selectEntry` has no command record"). Sections have KEYS and map-layout sections have
|
|
315
|
-
* ENTRY keys; this names both, so the manifest's input-step budget falls by five and its unstable
|
|
316
|
-
* budget by five without one `settings.open` step changing.
|
|
316
|
+
* Sections have KEYS and map-layout sections have ENTRY keys; this names both, so a deep link (the
|
|
317
|
+
* entry editor's "Fields", the Languages panel, the pane's "Manage contexts…") and a screenshot
|
|
318
|
+
* step are the same call.
|
|
317
319
|
*
|
|
318
320
|
* The validation is deliberately asynchronous. Extension-contributed sections (`connections`,
|
|
319
|
-
* `data`, `content`) register a tick after the
|
|
320
|
-
*
|
|
321
|
-
*
|
|
322
|
-
*
|
|
323
|
-
* has been doing.
|
|
321
|
+
* `data`, `content`) register a tick after the dialog opens, so refusing synchronously would reject
|
|
322
|
+
* three legitimate section ids; the command opens, awaits the sync, and only then decides whether
|
|
323
|
+
* the caller named something real. A wrong key therefore fails the call instead of rendering an
|
|
324
|
+
* empty body.
|
|
324
325
|
*
|
|
325
326
|
* @returns {AnyCommand[]}
|
|
326
327
|
*/
|
|
@@ -335,7 +336,7 @@ export function settingsCommands(): AnyCommand[] {
|
|
|
335
336
|
"type or a data connection.",
|
|
336
337
|
),
|
|
337
338
|
section: stringProperty(
|
|
338
|
-
"The settings section key to show. Defaults to
|
|
339
|
+
"The settings section key to show. Defaults to the section shown last, or Overview.",
|
|
339
340
|
),
|
|
340
341
|
},
|
|
341
342
|
required: [],
|
|
@@ -344,19 +345,15 @@ export function settingsCommands(): AnyCommand[] {
|
|
|
344
345
|
category: "Project",
|
|
345
346
|
id: "settings.open",
|
|
346
347
|
level: "project",
|
|
347
|
-
// ⌘⇧, — the other half of §15's `⌘, / ⌘⇧,` pair.
|
|
348
|
-
// And this one did not, so the two halves of "settings" were a keystroke and a palette search.
|
|
348
|
+
// ⌘⇧, — the other half of §15's `⌘, / ⌘⇧,` pair.
|
|
349
349
|
keybinding: "mod+shift+,",
|
|
350
350
|
menus: ["commandbar/overflow", "settings/menu", "palette"],
|
|
351
351
|
group: "7_settings",
|
|
352
352
|
requires: "an open project",
|
|
353
353
|
/* `enablement`, not `when`: with no project open this row is DRAWN, greyed, carrying the
|
|
354
|
-
sentence above
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
row on the welcome screen and said nothing about the other two; "why can't I" had no answer
|
|
358
|
-
anywhere. The gate itself is unchanged — `enabledWith` still refuses, so `registry.run` and
|
|
359
|
-
the assistant's tool still throw `CommandUnavailableError` exactly as before. */
|
|
354
|
+
sentence above (`studio-ui-guidelines.md` §12.3: a control which cannot act explains itself
|
|
355
|
+
rather than vanishing). `enabledWith` still refuses, so `registry.run` and the assistant's
|
|
356
|
+
tool throw `CommandUnavailableError`. */
|
|
360
357
|
enablement: (ctx) => ctx.project.open,
|
|
361
358
|
/* No `aiTool`, by `studio-ui-guidelines.md` §12.4's first rule: this opens a surface for a
|
|
362
359
|
person; the model writes `project.json` through `write_file` and the extension verbs. */
|
|
@@ -394,26 +391,40 @@ export function settingsCommands(): AnyCommand[] {
|
|
|
394
391
|
title: "Open Project Settings",
|
|
395
392
|
},
|
|
396
393
|
/*
|
|
397
|
-
*
|
|
398
|
-
*
|
|
399
|
-
*
|
|
400
|
-
*
|
|
401
|
-
*
|
|
402
|
-
*
|
|
394
|
+
* Project Styles by name: an ALIAS of `view.setWorkspace { workspace: "styles" }`, which shows
|
|
395
|
+
* the Styles workspace's last tab or opens its home (`project.json` in its Variables view on a
|
|
396
|
+
* first visit, else in the view it was left in). The id is kept because it is how deep links, the docs and older scripts name the place; the
|
|
397
|
+
* switch itself has one implementation, the workspace's, so the two doors cannot disagree about
|
|
398
|
+
* what "open Project Styles" means. `view` then picks one of the tab's three views, which is
|
|
399
|
+
* how a deep link (Project Settings' Moved footnote, a screenshot) reaches the Variables view
|
|
400
|
+
* from anywhere: `canvas.setMode` cannot stand in for it, being level `document`.
|
|
403
401
|
*
|
|
404
402
|
* It is a peer of `settings.open` and declares the same gate, byte for byte
|
|
405
|
-
* (`studio-ui-guidelines.md` §12.4: two verbs over one document declare ONE availability
|
|
406
|
-
*
|
|
407
|
-
*
|
|
403
|
+
* (`studio-ui-guidelines.md` §12.4: two verbs over one document declare ONE availability rule).
|
|
404
|
+
* It is not in the gear menu: the gear holds Preferences and Project Settings, and Styles is a
|
|
405
|
+
* workspace the top bar already names.
|
|
408
406
|
*/
|
|
409
407
|
{
|
|
408
|
+
args: argsSchema(
|
|
409
|
+
{
|
|
410
|
+
view: enumProperty(
|
|
411
|
+
STYLES_VIEWS,
|
|
412
|
+
"Which view of the project's styles to show: elements (element defaults by tag " +
|
|
413
|
+
"name), variables (the CSS custom properties) or code (project.json as text). " +
|
|
414
|
+
"Defaults to the view the Styles workspace was left in.",
|
|
415
|
+
),
|
|
416
|
+
},
|
|
417
|
+
[],
|
|
418
|
+
),
|
|
410
419
|
category: "Project",
|
|
411
420
|
id: "styles.open",
|
|
412
421
|
level: "project",
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
422
|
+
/* `never`, not `palette`, for the reason `view.setWorkspace` gives: the palette's way into
|
|
423
|
+
Styles is `workspace.focus.styles` ("Go to Styles", ⌘4), and a second row running the same
|
|
424
|
+
switch would be the same action under a second name. This record is the scripted door:
|
|
425
|
+
the Moved footnote, the Overview's Styles row and the screenshot manifest name it, and
|
|
426
|
+
`view` is what they can say that the chord cannot. */
|
|
427
|
+
menus: ["never"],
|
|
417
428
|
group: "7_settings_styles",
|
|
418
429
|
requires: "an open project",
|
|
419
430
|
/* `studio-ui-guidelines.md` §12.4: two verbs over ONE document declare ONE availability rule,
|
|
@@ -421,8 +432,17 @@ export function settingsCommands(): AnyCommand[] {
|
|
|
421
432
|
enablement: (ctx) => ctx.project.open,
|
|
422
433
|
/* No `aiTool`, by `studio-ui-guidelines.md` §12.4's first rule: this opens a surface for a
|
|
423
434
|
person. */
|
|
424
|
-
run: () => {
|
|
425
|
-
|
|
435
|
+
run: async (_commandCtx, args: CommandArgValues) => {
|
|
436
|
+
const view =
|
|
437
|
+
args["view"] === undefined ? null : enumArg("styles.open", args, "view", STYLES_VIEWS);
|
|
438
|
+
const registry = activeRegistry();
|
|
439
|
+
if (!registry) {
|
|
440
|
+
throw new Error('command "styles.open" needs the window\'s command registry');
|
|
441
|
+
}
|
|
442
|
+
await registry.run("view.setWorkspace", { workspace: "styles" });
|
|
443
|
+
if (view !== null) {
|
|
444
|
+
showSettingsDocument(STYLES_VIEW_MODES[view]);
|
|
445
|
+
}
|
|
426
446
|
},
|
|
427
447
|
// Named, never spelled from the wire value: `stylebook` is shared with `dist/iframe-entry.js`
|
|
428
448
|
// And may never be renamed, so nothing a reader sees is derived from it (`style/project-styles`).
|
|
@@ -432,7 +452,7 @@ export function settingsCommands(): AnyCommand[] {
|
|
|
432
452
|
}
|
|
433
453
|
|
|
434
454
|
/**
|
|
435
|
-
* Register the settings
|
|
455
|
+
* Register the settings verbs.
|
|
436
456
|
*
|
|
437
457
|
* @param {CommandRegistry} registry
|
|
438
458
|
*/
|