@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,195 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/**
|
|
3
|
+
* The Styles panel surface: the Styles workspace's Navigator, as a Jx document over the kit
|
|
4
|
+
* (`specs/studio.md` §7.1).
|
|
5
|
+
*
|
|
6
|
+
* This is the adapter. `panels/styles-panel.ts` keeps every decision (which custom properties the
|
|
7
|
+
* project declares and how they group, what each colour resolves to, which tags the catalogue holds
|
|
8
|
+
* and which of them project.json already styles, which color schemes `$media` declares, and which
|
|
9
|
+
* row is current) and hands this module one projection whose every field is already a string. The
|
|
10
|
+
* document draws three sections and decides nothing.
|
|
11
|
+
*
|
|
12
|
+
* @docs studio/design/tokens
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { reactive } from "../reactivity";
|
|
16
|
+
import { mountSurface, registerSurface } from "../ui/surface";
|
|
17
|
+
import stylesPanelDoc from "./styles-panel.json";
|
|
18
|
+
import type { SurfaceHandle } from "../ui/surface";
|
|
19
|
+
|
|
20
|
+
registerSurface("styles-panel", stylesPanelDoc);
|
|
21
|
+
|
|
22
|
+
/** One custom property under its group. */
|
|
23
|
+
export interface StylesVariableRow {
|
|
24
|
+
/** The property, by its real name: `--accent`. Also the row's key. */
|
|
25
|
+
name: string;
|
|
26
|
+
/** What it is declared as, as text. */
|
|
27
|
+
value: string;
|
|
28
|
+
/** `swatch` for a colour, whose chip is drawn; `none` for every other group. */
|
|
29
|
+
swatchState: "swatch" | "none";
|
|
30
|
+
/** The colour the chip is painted, already resolved through any `var()` chain; "" for none. */
|
|
31
|
+
swatch: string;
|
|
32
|
+
/** Whether this is the property the Variables view is pointed at. */
|
|
33
|
+
selected: boolean;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/** One group of custom properties: Colors, Fonts, Sizes & Spacing, Other. */
|
|
37
|
+
export interface StylesVariableGroup {
|
|
38
|
+
/** The token group id, `color`; the key, and what a heading click shows. */
|
|
39
|
+
id: string;
|
|
40
|
+
title: string;
|
|
41
|
+
/** How many the group holds, as text: "6". */
|
|
42
|
+
count: string;
|
|
43
|
+
/** The count, said in words for a screen reader: "6 variables". */
|
|
44
|
+
countLabel: string;
|
|
45
|
+
variables: StylesVariableRow[];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** One element default, by tag name. */
|
|
49
|
+
export interface StylesElementRow {
|
|
50
|
+
/** What a click selects: the compound path (`ul li`), or a component's tag. Also the key. */
|
|
51
|
+
key: string;
|
|
52
|
+
/** The tag name the row shows: `h1`, `li`, `site-card`. */
|
|
53
|
+
tag: string;
|
|
54
|
+
/** How deep the row sits, as a CSS length, read through `--row-indent`. */
|
|
55
|
+
indent: string;
|
|
56
|
+
/** Whether project.json already styles this tag: the dot. */
|
|
57
|
+
customized: boolean;
|
|
58
|
+
/** Whether this is the tag the Elements view has selected. */
|
|
59
|
+
selected: boolean;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** One block of the catalogue: Headings, Lists, Components. */
|
|
63
|
+
export interface StylesElementGroup {
|
|
64
|
+
key: string;
|
|
65
|
+
label: string;
|
|
66
|
+
rows: StylesElementRow[];
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** One color scheme the project declares. */
|
|
70
|
+
export interface StylesSchemeRow {
|
|
71
|
+
/** The `$media` entry, `--dark`. */
|
|
72
|
+
key: string;
|
|
73
|
+
/** "Light" or "Dark". */
|
|
74
|
+
label: string;
|
|
75
|
+
/** The media query that selects it: "(prefers-color-scheme: dark)". */
|
|
76
|
+
query: string;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Everything the document draws. */
|
|
80
|
+
export interface StylesPanelValues {
|
|
81
|
+
/** `none` asks for a project; `styles` draws the three sections. */
|
|
82
|
+
body: "none" | "styles";
|
|
83
|
+
/** Every custom property in the root style block, as text. */
|
|
84
|
+
variableCount: string;
|
|
85
|
+
variablesState: "empty" | "listed";
|
|
86
|
+
groups: StylesVariableGroup[];
|
|
87
|
+
elementGroups: StylesElementGroup[];
|
|
88
|
+
/** How many tags project.json styles, as the on-screen count ("3 styled"), and in full words. */
|
|
89
|
+
customizedCount: string;
|
|
90
|
+
customizedLabel: string;
|
|
91
|
+
schemesState: "empty" | "listed";
|
|
92
|
+
schemes: StylesSchemeRow[];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** What a control can ask the panel to do. Every one is a decision the flow owns. */
|
|
96
|
+
export interface StylesPanelActions {
|
|
97
|
+
/** A group heading: the Variables view, at that group. */
|
|
98
|
+
showGroup: (group: string) => void;
|
|
99
|
+
/** A variable row: the Variables view, at that property. */
|
|
100
|
+
selectVariable: (name: string) => void;
|
|
101
|
+
/** **Add variable**: the Variables view's add row. */
|
|
102
|
+
addVariable: () => void;
|
|
103
|
+
/** An element row: the Elements view, with that tag selected. */
|
|
104
|
+
selectElement: (path: string) => void;
|
|
105
|
+
/** **Manage color schemes…**: Project Settings › Contexts. */
|
|
106
|
+
manageSchemes: () => void;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export interface StylesPanelSurfaceHandle {
|
|
110
|
+
readonly ready: Promise<unknown>;
|
|
111
|
+
/** Whether the mounted root is still where it was put. */
|
|
112
|
+
connected: () => boolean;
|
|
113
|
+
update: (values: StylesPanelValues) => void;
|
|
114
|
+
dispose: () => void;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
interface StylesPanelScope extends StylesPanelValues, StylesPanelActions {}
|
|
118
|
+
|
|
119
|
+
/** The scope's shape before the first projection lands on it. */
|
|
120
|
+
export function emptyStylesPanelValues(): StylesPanelValues {
|
|
121
|
+
return {
|
|
122
|
+
body: "none",
|
|
123
|
+
customizedCount: "0",
|
|
124
|
+
customizedLabel: "",
|
|
125
|
+
elementGroups: [],
|
|
126
|
+
groups: [],
|
|
127
|
+
schemes: [],
|
|
128
|
+
schemesState: "empty",
|
|
129
|
+
variableCount: "0",
|
|
130
|
+
variablesState: "empty",
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/** Write a projection in, field by field, so an unchanged field is inert. */
|
|
135
|
+
function project(scope: StylesPanelScope, values: StylesPanelValues): void {
|
|
136
|
+
scope.body = values.body;
|
|
137
|
+
scope.variableCount = values.variableCount;
|
|
138
|
+
scope.variablesState = values.variablesState;
|
|
139
|
+
scope.groups = values.groups;
|
|
140
|
+
scope.elementGroups = values.elementGroups;
|
|
141
|
+
scope.customizedCount = values.customizedCount;
|
|
142
|
+
scope.customizedLabel = values.customizedLabel;
|
|
143
|
+
scope.schemesState = values.schemesState;
|
|
144
|
+
scope.schemes = values.schemes;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Mount the Styles panel into `container`, the content box the Navigator painted.
|
|
149
|
+
*
|
|
150
|
+
* @param container Where the document goes.
|
|
151
|
+
* @param values What it shows to begin with.
|
|
152
|
+
* @param actions What its controls do.
|
|
153
|
+
*/
|
|
154
|
+
export function mountStylesPanelSurface(
|
|
155
|
+
container: HTMLElement,
|
|
156
|
+
values: StylesPanelValues,
|
|
157
|
+
actions: StylesPanelActions,
|
|
158
|
+
): StylesPanelSurfaceHandle {
|
|
159
|
+
const scope: StylesPanelScope = reactive<StylesPanelScope>({
|
|
160
|
+
...emptyStylesPanelValues(),
|
|
161
|
+
...actions,
|
|
162
|
+
});
|
|
163
|
+
project(scope, values);
|
|
164
|
+
|
|
165
|
+
let mounted: SurfaceHandle | null = null;
|
|
166
|
+
let disposed = false;
|
|
167
|
+
const ready = mountSurface("styles-panel", scope, container).then((surface) => {
|
|
168
|
+
if (disposed) {
|
|
169
|
+
surface.dispose();
|
|
170
|
+
return surface;
|
|
171
|
+
}
|
|
172
|
+
mounted = surface;
|
|
173
|
+
return surface;
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
return {
|
|
177
|
+
connected: () => {
|
|
178
|
+
if (disposed) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
const root = mounted?.root;
|
|
182
|
+
// A mount still in flight is not yet in the container, and is not a reason to remount.
|
|
183
|
+
return root === undefined ? true : container.contains(root);
|
|
184
|
+
},
|
|
185
|
+
dispose() {
|
|
186
|
+
disposed = true;
|
|
187
|
+
mounted?.dispose();
|
|
188
|
+
mounted = null;
|
|
189
|
+
},
|
|
190
|
+
ready,
|
|
191
|
+
update: (next) => {
|
|
192
|
+
project(scope, next);
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://jxsuite.com/schema/v1",
|
|
3
|
+
"$id": "StudioStylesVariables",
|
|
4
|
+
"$description": "The Styles workspace's Variables view (studio.md §7.1): the project's CSS custom properties, the `--` keys of `project.json`'s root style block, edited in the pane over the same tab as the Elements view and the Code view. It draws the view's frame and nothing it edits: a heading, one sentence saying what these are, one saying when an edit reaches the file (a variable is written as it is changed, which also writes any element style edit still waiting for Save, because both live in the one file), the door to Project Settings › Contexts where colour schemes and breakpoints are declared, and an empty `editor` island the CSS Variables editor (`settings/css-vars-editor.ts`) is mounted into (studio-ui-guidelines.md §9.4). `style/variables-view.ts` decides every word.",
|
|
5
|
+
"tagName": "section",
|
|
6
|
+
"attributes": {
|
|
7
|
+
"part": "variables-view",
|
|
8
|
+
"aria-labelledby": "${state.headingId}",
|
|
9
|
+
"data-jx-region": "${state.region}"
|
|
10
|
+
},
|
|
11
|
+
"style": {
|
|
12
|
+
"$description": "Fills the pane's stage by its own geometry, as the workspace home does (`workspace-home.json`): the stage is `position: relative`, so the view takes the whole of it and scrolls itself without the stage being restyled for it. The column is capped so a value field never stretches across a wide pane.",
|
|
13
|
+
"position": "absolute",
|
|
14
|
+
"inset": "0",
|
|
15
|
+
"overflowY": "auto",
|
|
16
|
+
"boxSizing": "border-box",
|
|
17
|
+
"padding": "var(--jx-space-6)",
|
|
18
|
+
"fontFamily": "var(--jx-font-sans)",
|
|
19
|
+
"color": "var(--fg)",
|
|
20
|
+
"background": "var(--bg-panel)",
|
|
21
|
+
"& [part=\"column\"]": {
|
|
22
|
+
"maxWidth": "760px",
|
|
23
|
+
"margin": "0 auto"
|
|
24
|
+
},
|
|
25
|
+
"& [part=\"head\"]": {
|
|
26
|
+
"display": "flex",
|
|
27
|
+
"flexDirection": "column",
|
|
28
|
+
"gap": "var(--jx-space-2)",
|
|
29
|
+
"marginBottom": "var(--jx-space-5)"
|
|
30
|
+
},
|
|
31
|
+
"& [part=\"title\"]": {
|
|
32
|
+
"margin": "0",
|
|
33
|
+
"fontSize": "var(--jx-text-lg)",
|
|
34
|
+
"fontWeight": "600"
|
|
35
|
+
},
|
|
36
|
+
"& [part=\"lede\"], & [part=\"saving\"]": {
|
|
37
|
+
"margin": "0",
|
|
38
|
+
"maxWidth": "68ch",
|
|
39
|
+
"lineHeight": "1.5",
|
|
40
|
+
"fontSize": "var(--jx-text-md)",
|
|
41
|
+
"color": "var(--fg-dim)"
|
|
42
|
+
},
|
|
43
|
+
"& [part=\"saving\"]": {
|
|
44
|
+
"fontSize": "var(--jx-text-sm)"
|
|
45
|
+
},
|
|
46
|
+
"& [part=\"schemes\"]": {
|
|
47
|
+
"display": "flex",
|
|
48
|
+
"alignItems": "center",
|
|
49
|
+
"flexWrap": "wrap",
|
|
50
|
+
"gap": "var(--jx-space-2)",
|
|
51
|
+
"fontSize": "var(--jx-text-sm)",
|
|
52
|
+
"color": "var(--fg-dim)"
|
|
53
|
+
},
|
|
54
|
+
"& [part=\"schemes-text\"]": {
|
|
55
|
+
"margin": "0"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"children": [
|
|
59
|
+
{
|
|
60
|
+
"tagName": "div",
|
|
61
|
+
"attributes": {
|
|
62
|
+
"part": "column"
|
|
63
|
+
},
|
|
64
|
+
"children": [
|
|
65
|
+
{
|
|
66
|
+
"tagName": "header",
|
|
67
|
+
"attributes": {
|
|
68
|
+
"part": "head"
|
|
69
|
+
},
|
|
70
|
+
"children": [
|
|
71
|
+
{
|
|
72
|
+
"tagName": "h2",
|
|
73
|
+
"attributes": {
|
|
74
|
+
"part": "title",
|
|
75
|
+
"id": "${state.headingId}"
|
|
76
|
+
},
|
|
77
|
+
"textContent": "${state.title}"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"tagName": "p",
|
|
81
|
+
"attributes": {
|
|
82
|
+
"part": "lede"
|
|
83
|
+
},
|
|
84
|
+
"textContent": "${state.lede}"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"tagName": "p",
|
|
88
|
+
"attributes": {
|
|
89
|
+
"part": "saving"
|
|
90
|
+
},
|
|
91
|
+
"textContent": "${state.saving}"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"tagName": "div",
|
|
95
|
+
"attributes": {
|
|
96
|
+
"part": "schemes"
|
|
97
|
+
},
|
|
98
|
+
"children": [
|
|
99
|
+
{
|
|
100
|
+
"tagName": "p",
|
|
101
|
+
"attributes": {
|
|
102
|
+
"part": "schemes-text"
|
|
103
|
+
},
|
|
104
|
+
"textContent": "${state.schemes}"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"tagName": "jx-action-button",
|
|
108
|
+
"attributes": {
|
|
109
|
+
"part": "manage-contexts"
|
|
110
|
+
},
|
|
111
|
+
"$props": {
|
|
112
|
+
"size": "sm",
|
|
113
|
+
"quiet": true
|
|
114
|
+
},
|
|
115
|
+
"onclick": {
|
|
116
|
+
"$prototype": "Function",
|
|
117
|
+
"body": [
|
|
118
|
+
{
|
|
119
|
+
"operator": "call",
|
|
120
|
+
"target": {
|
|
121
|
+
"$ref": "#/state/manageContexts"
|
|
122
|
+
},
|
|
123
|
+
"value": []
|
|
124
|
+
}
|
|
125
|
+
],
|
|
126
|
+
"description": "Opens Project Settings on Contexts, the one place a colour scheme or a breakpoint is declared (studio.md §17.1)."
|
|
127
|
+
},
|
|
128
|
+
"children": [
|
|
129
|
+
{
|
|
130
|
+
"tagName": "span",
|
|
131
|
+
"textContent": "${state.manageLabel}"
|
|
132
|
+
}
|
|
133
|
+
]
|
|
134
|
+
}
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"tagName": "div",
|
|
141
|
+
"attributes": {
|
|
142
|
+
"part": "editor",
|
|
143
|
+
"role": "none"
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
]
|
|
147
|
+
}
|
|
148
|
+
]
|
|
149
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/**
|
|
3
|
+
* The Variables view surface: the frame the Styles workspace draws around the CSS Variables editor,
|
|
4
|
+
* as a Jx document over the kit.
|
|
5
|
+
*
|
|
6
|
+
* This is the adapter. `style/variables-view.ts` keeps the flow (which pane holds the view, what
|
|
7
|
+
* the editor island is handed, when the view follows an edit made elsewhere) and hands this module
|
|
8
|
+
* one projection: the heading, the sentences and the region. The document renders that and decides
|
|
9
|
+
* nothing.
|
|
10
|
+
*
|
|
11
|
+
* **The editor is an ISLAND.** The CSS Variables editor is a surface of its own
|
|
12
|
+
* (`surfaces/settings-css-vars.json`), mounted into a container it is handed, so this document
|
|
13
|
+
* renders an empty `editor` node and announces it through `onNodeCreated`, the one seam for an
|
|
14
|
+
* island (studio-ui-guidelines.md §9.4). Nothing here knows what a token is.
|
|
15
|
+
*
|
|
16
|
+
* **The container is CLEARED, because this is a pane and not a panel**, for the reason
|
|
17
|
+
* `surfaces/media-pane.ts` gives: the canvas stage is handed to whichever mode owns it whole.
|
|
18
|
+
*
|
|
19
|
+
* @docs studio/design/tokens
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import { isString } from "@jxsuite/schema/guards";
|
|
23
|
+
import { reactive } from "../reactivity";
|
|
24
|
+
import { mountSurface, registerSurface } from "../ui/surface";
|
|
25
|
+
import variablesDoc from "./styles-variables.json";
|
|
26
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
27
|
+
import type { SurfaceHandle } from "../ui/surface";
|
|
28
|
+
|
|
29
|
+
registerSurface("styles-variables", variablesDoc);
|
|
30
|
+
|
|
31
|
+
/** What the view draws, with every word already decided. */
|
|
32
|
+
export interface VariablesView {
|
|
33
|
+
/** The pane region the view answers to (`pane.primary/variables`). */
|
|
34
|
+
region: string;
|
|
35
|
+
title: string;
|
|
36
|
+
/** What these are: the project's CSS custom properties. */
|
|
37
|
+
lede: string;
|
|
38
|
+
/** When an edit reaches the file. */
|
|
39
|
+
saving: string;
|
|
40
|
+
/** Where colour schemes and breakpoints are declared. */
|
|
41
|
+
schemes: string;
|
|
42
|
+
/** The button that goes there. */
|
|
43
|
+
manageLabel: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** What the view's own control does. */
|
|
47
|
+
export interface VariablesActions {
|
|
48
|
+
/** Open Project Settings on Contexts. */
|
|
49
|
+
manageContexts: () => void;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Where the CSS Variables editor lands. */
|
|
53
|
+
export interface VariablesIslands {
|
|
54
|
+
/** Called with the `editor` node every time the document creates one. */
|
|
55
|
+
editorSlot: (host: HTMLElement) => void;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* A mounted view: whether it still stands, and a way to take it down. There is no update: every
|
|
60
|
+
* word the view draws is a constant, and the editor island redraws itself.
|
|
61
|
+
*/
|
|
62
|
+
export interface VariablesSurfaceHandle {
|
|
63
|
+
/** Whether the mount is still in the host it was given (a mount still in flight counts). */
|
|
64
|
+
attached: () => boolean;
|
|
65
|
+
dispose: () => void;
|
|
66
|
+
/** Settles once the document is in the host. */
|
|
67
|
+
ready: Promise<void>;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
interface VariablesScope extends VariablesView, VariablesActions {
|
|
71
|
+
headingId: string;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** The view as the document reads it. */
|
|
75
|
+
function project(scope: VariablesScope, view: VariablesView): void {
|
|
76
|
+
Object.assign(scope, view);
|
|
77
|
+
scope.headingId = `styles-variables-${view.region.replaceAll(/[^\w-]/g, "-")}`;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** The `part` a node was authored with, or `""`: the only thing this adapter asks about a node. */
|
|
81
|
+
function partOf(def: JxElement | string): string {
|
|
82
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
83
|
+
return isString(part) ? part : "";
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Mount the Variables view into `host`, the pane's canvas stage.
|
|
88
|
+
*
|
|
89
|
+
* @param {HTMLElement} host The pane's canvas stage, emptied first.
|
|
90
|
+
* @param {VariablesView} view What to draw right now.
|
|
91
|
+
* @param {VariablesActions} actions What the view's control does.
|
|
92
|
+
* @param {VariablesIslands} islands Where the editor lands.
|
|
93
|
+
* @returns {VariablesSurfaceHandle}
|
|
94
|
+
*/
|
|
95
|
+
export function mountVariablesSurface(
|
|
96
|
+
host: HTMLElement,
|
|
97
|
+
view: VariablesView,
|
|
98
|
+
actions: VariablesActions,
|
|
99
|
+
islands: VariablesIslands,
|
|
100
|
+
): VariablesSurfaceHandle {
|
|
101
|
+
host.replaceChildren();
|
|
102
|
+
const scope: VariablesScope = reactive<VariablesScope>({
|
|
103
|
+
headingId: "",
|
|
104
|
+
lede: "",
|
|
105
|
+
manageContexts: actions.manageContexts,
|
|
106
|
+
manageLabel: "",
|
|
107
|
+
region: "",
|
|
108
|
+
saving: "",
|
|
109
|
+
schemes: "",
|
|
110
|
+
title: "",
|
|
111
|
+
});
|
|
112
|
+
project(scope, view);
|
|
113
|
+
|
|
114
|
+
let mounted: SurfaceHandle | null = null;
|
|
115
|
+
let disposed = false;
|
|
116
|
+
const ready = mountSurface("styles-variables", scope, host, {
|
|
117
|
+
onNodeCreated: (element, _path, def) => {
|
|
118
|
+
if (element instanceof HTMLElement && partOf(def) === "editor") {
|
|
119
|
+
islands.editorSlot(element);
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
}).then((surface) => {
|
|
123
|
+
if (disposed) {
|
|
124
|
+
surface.dispose();
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
mounted = surface;
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
return {
|
|
131
|
+
attached: () => {
|
|
132
|
+
if (disposed) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
const root = mounted?.root;
|
|
136
|
+
return root === undefined ? true : host.contains(root);
|
|
137
|
+
},
|
|
138
|
+
dispose() {
|
|
139
|
+
disposed = true;
|
|
140
|
+
mounted?.dispose();
|
|
141
|
+
mounted = null;
|
|
142
|
+
},
|
|
143
|
+
ready,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
"color": "var(--jx-bg)"
|
|
116
116
|
},
|
|
117
117
|
"& [part=\"pin\"]": {
|
|
118
|
-
"$description": "`.tab-strip-pin`, in `jx-tab`'s actions slot. A click on it never also selects the tab, and that is the KIT's doing now rather than a `stopPropagation` this document has to remember: `jx-tab` stops a click inside its actions slot exactly as it stops one on its own close button.",
|
|
118
|
+
"$description": "`.tab-strip-pin`, in `jx-tab`'s actions slot, on the current chip and on a pinned one (the rule below). A click on it never also selects the tab, and that is the KIT's doing now rather than a `stopPropagation` this document has to remember: `jx-tab` stops a click inside its actions slot exactly as it stops one on its own close button.",
|
|
119
119
|
"display": "flex",
|
|
120
120
|
"alignItems": "center",
|
|
121
121
|
"justifyContent": "center",
|
|
@@ -130,7 +130,6 @@
|
|
|
130
130
|
"lineHeight": "1",
|
|
131
131
|
"borderRadius": "var(--radius)",
|
|
132
132
|
"cursor": "pointer",
|
|
133
|
-
"opacity": "0",
|
|
134
133
|
":hover": {
|
|
135
134
|
"background": "var(--hover-bg)",
|
|
136
135
|
"color": "var(--fg)"
|
|
@@ -140,8 +139,9 @@
|
|
|
140
139
|
"outlineOffset": "-1px"
|
|
141
140
|
}
|
|
142
141
|
},
|
|
143
|
-
"& [part=\"tab\"]:
|
|
144
|
-
"
|
|
142
|
+
"& [part=\"tab\"]:not([aria-selected=\"true\"]):not([data-pinned]) [part=\"pin\"]": {
|
|
143
|
+
"$description": "An inactive, unpinned chip draws no pin and keeps no box for one. It was `opacity: 0` here and revealed on hover, so the invisible button still took 16px of the chip and every click on it: the centre of a short chip (the Media home's, beside its viewer tab) was the pin, so the click toggled a pin nobody could see and the tab did not activate. A box that takes clicks is a control, and a control is either shown or absent. The current chip shows its pin, a pinned chip shows its mark, and any chip pins from its context menu (`document.togglePinned`).",
|
|
144
|
+
"display": "none"
|
|
145
145
|
},
|
|
146
146
|
"& [part=\"tab\"][data-pinned] [part=\"pin\"]": {
|
|
147
147
|
"color": "var(--accent)"
|
package/src/surfaces/welcome.ts
CHANGED
|
@@ -26,7 +26,7 @@ import { getProjectList } from "../project-list";
|
|
|
26
26
|
import { reactive } from "../reactivity";
|
|
27
27
|
import { MINUTE, now } from "../services/clock";
|
|
28
28
|
import { clearRecentProjects, getRecentProjects, removeRecentProject } from "../recent-projects";
|
|
29
|
-
import { platformSupportsClone } from "../
|
|
29
|
+
import { platformSupportsClone } from "../publish/source-control";
|
|
30
30
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
31
31
|
import welcomeDoc from "./welcome.json";
|
|
32
32
|
import type { SurfaceHandle } from "../ui/surface";
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://jxsuite.com/schema/v1",
|
|
3
|
+
"$id": "StudioWritingBanner",
|
|
4
|
+
"$description": "The writing-mode banner (specs/studio.md §22.5): one slim line above the canvas while a collection entry is written inside its template's layout, saying what the arrangement is (the text and media are editable, the layout is locked) with the door to the template, which opens it in Design. `content/writing-banner.ts` decides whether there is a template to open and what it is called; this document draws a sentence and, when there is one, the button.",
|
|
5
|
+
"tagName": "div",
|
|
6
|
+
"attributes": {
|
|
7
|
+
"part": "banner",
|
|
8
|
+
"role": "note",
|
|
9
|
+
"data-jx-region": "${state.region}"
|
|
10
|
+
},
|
|
11
|
+
"style": {
|
|
12
|
+
"$description": "A quiet band, the Content-Entry board's: the canvas is the subject, so the banner is a tinted line rather than a panel, and its action is a quiet button.",
|
|
13
|
+
"display": "flex",
|
|
14
|
+
"alignItems": "center",
|
|
15
|
+
"flexWrap": "wrap",
|
|
16
|
+
"gap": "var(--jx-space-2)",
|
|
17
|
+
"padding": "var(--jx-space-1) var(--jx-space-4)",
|
|
18
|
+
"background": "color-mix(in srgb, var(--accent) 10%, var(--bg-panel))",
|
|
19
|
+
"borderBottom": "1px solid var(--border)",
|
|
20
|
+
"fontFamily": "var(--jx-font-sans)",
|
|
21
|
+
"fontSize": "var(--jx-text-sm)",
|
|
22
|
+
"color": "var(--fg-dim)",
|
|
23
|
+
"& [part=\"glyph\"]": {
|
|
24
|
+
"flexShrink": "0",
|
|
25
|
+
"color": "var(--accent)"
|
|
26
|
+
},
|
|
27
|
+
"& [part=\"text\"]": {
|
|
28
|
+
"flex": "1",
|
|
29
|
+
"minWidth": "0"
|
|
30
|
+
},
|
|
31
|
+
"& [part=\"action-slot\"]": {
|
|
32
|
+
"display": "contents"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"children": [
|
|
36
|
+
{
|
|
37
|
+
"tagName": "jx-icon",
|
|
38
|
+
"attributes": {
|
|
39
|
+
"part": "glyph"
|
|
40
|
+
},
|
|
41
|
+
"$props": {
|
|
42
|
+
"name": "lock-simple"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"tagName": "span",
|
|
47
|
+
"attributes": {
|
|
48
|
+
"part": "text"
|
|
49
|
+
},
|
|
50
|
+
"textContent": "${state.text}"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"tagName": "div",
|
|
54
|
+
"attributes": {
|
|
55
|
+
"part": "action-slot",
|
|
56
|
+
"role": "none"
|
|
57
|
+
},
|
|
58
|
+
"$switch": {
|
|
59
|
+
"$ref": "#/state/actionState"
|
|
60
|
+
},
|
|
61
|
+
"cases": {
|
|
62
|
+
"shown": {
|
|
63
|
+
"tagName": "jx-action-button",
|
|
64
|
+
"attributes": {
|
|
65
|
+
"part": "edit-template"
|
|
66
|
+
},
|
|
67
|
+
"$props": {
|
|
68
|
+
"size": "sm",
|
|
69
|
+
"quiet": true
|
|
70
|
+
},
|
|
71
|
+
"onclick": {
|
|
72
|
+
"$prototype": "Function",
|
|
73
|
+
"body": [
|
|
74
|
+
{
|
|
75
|
+
"operator": "call",
|
|
76
|
+
"target": {
|
|
77
|
+
"$ref": "#/state/openTemplate"
|
|
78
|
+
},
|
|
79
|
+
"value": []
|
|
80
|
+
}
|
|
81
|
+
],
|
|
82
|
+
"description": "Opening the template is activating it, which enters Design (studio.md §22.1)."
|
|
83
|
+
},
|
|
84
|
+
"children": [
|
|
85
|
+
{
|
|
86
|
+
"tagName": "span",
|
|
87
|
+
"textContent": "${state.actionLabel}"
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
]
|
|
94
|
+
}
|