@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,13 +1,14 @@
|
|
|
1
1
|
/// <reference lib="dom" />
|
|
2
2
|
/**
|
|
3
|
-
* The
|
|
3
|
+
* The Content home surface: one collection, browsed, as a Jx document over the kit (studio.md
|
|
4
|
+
* §22.5).
|
|
4
5
|
*
|
|
5
|
-
* This is the adapter. `browse/library-pane.ts` keeps the
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* This is the adapter. `browse/library-pane.ts` keeps the home — the scan, the collection and its
|
|
7
|
+
* filter, the window, the header line, the per-file menu — and hands this module one projection: a
|
|
8
|
+
* word saying which of eight things to draw, the toolbar's chips already marked, and rows whose
|
|
8
9
|
* every field is already a string. The document renders that and decides nothing.
|
|
9
10
|
*
|
|
10
|
-
* **
|
|
11
|
+
* **Eight cases, one discriminant.** `$switch` over a value is the only conditional a document has,
|
|
11
12
|
* and "is the scan running, did it finish, did the project have anything in it, did the filter keep
|
|
12
13
|
* any of it, and which layout is on" is five questions. The pane answers them once and the surface
|
|
13
14
|
* reads a word — which is also what keeps the four honest empty states from collapsing back into
|
|
@@ -22,8 +23,8 @@
|
|
|
22
23
|
* **The container is CLEARED, because this is a pane and not a panel.** A panel is handed
|
|
23
24
|
* `.panel-content`, a node lit renders `nothing` into, whose comment markers must survive; the
|
|
24
25
|
* canvas stage is handed to whichever mode owns it whole, and `canvas/canvas-render.ts` hands it
|
|
25
|
-
* over by emptying it. So the mount empties it too, which is what stops two
|
|
26
|
-
*
|
|
26
|
+
* over by emptying it. So the mount empties it too, which is what stops two homes stacking when a
|
|
27
|
+
* repaint lands before the first mount has settled.
|
|
27
28
|
*
|
|
28
29
|
* @docs studio/projects/browse
|
|
29
30
|
*/
|
|
@@ -40,11 +41,11 @@ import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
|
40
41
|
registerSurface("library-pane", libraryDoc);
|
|
41
42
|
|
|
42
43
|
/**
|
|
43
|
-
* Which of
|
|
44
|
+
* Which of eight things the body draws.
|
|
44
45
|
*
|
|
45
46
|
* The first four are the states the Manage view called "No files found" — a scan still running, a
|
|
46
|
-
* scan that could not finish, a
|
|
47
|
-
*
|
|
47
|
+
* scan that could not finish, a collection with nothing in it, and a filter that matched none of it
|
|
48
|
+
* — and the last four are the views. One word, so no two of them can be true at once.
|
|
48
49
|
*/
|
|
49
50
|
export type LibraryViewKind =
|
|
50
51
|
| "loading"
|
|
@@ -52,7 +53,6 @@ export type LibraryViewKind =
|
|
|
52
53
|
| "empty"
|
|
53
54
|
| "nomatch"
|
|
54
55
|
| "cards"
|
|
55
|
-
| "media"
|
|
56
56
|
| "table"
|
|
57
57
|
| "calendar"
|
|
58
58
|
| "board";
|
|
@@ -69,9 +69,7 @@ export interface LibraryRow {
|
|
|
69
69
|
* Which of three things stands in the art box.
|
|
70
70
|
*
|
|
71
71
|
* `image` is the file itself, `doc` is the live-preview island the host fills, and `glyph` is the
|
|
72
|
-
* honest answer for a file nothing here can draw.
|
|
73
|
-
* thumbnail of an asset, and a live document render inside one is the cost the Media layout
|
|
74
|
-
* exists to avoid.
|
|
72
|
+
* honest answer for a file nothing here can draw.
|
|
75
73
|
*/
|
|
76
74
|
art: "image" | "doc" | "glyph";
|
|
77
75
|
/** The URL an `image` loads. Empty for the other two. */
|
|
@@ -99,10 +97,10 @@ export interface LibraryColumn {
|
|
|
99
97
|
* note; only Board prints a count, and only the Calendar's undated section is dimmed.
|
|
100
98
|
*/
|
|
101
99
|
export interface LibraryGroup {
|
|
102
|
-
/** The group's identity across repaints — the date, or the
|
|
100
|
+
/** The group's identity across repaints — the date, or the folder. */
|
|
103
101
|
id: string;
|
|
104
102
|
title: string;
|
|
105
|
-
/** Board's honest total for the
|
|
103
|
+
/** Board's honest total for the folder, already a string. Empty for a Calendar day. */
|
|
106
104
|
count: string;
|
|
107
105
|
/** What this group left out, or the undated section's count. */
|
|
108
106
|
note: string;
|
|
@@ -112,21 +110,53 @@ export interface LibraryGroup {
|
|
|
112
110
|
files: LibraryRow[];
|
|
113
111
|
}
|
|
114
112
|
|
|
115
|
-
/** A toolbar chip: a
|
|
113
|
+
/** A toolbar chip: a view, and whether it is the one in force. */
|
|
116
114
|
export interface LibraryChip {
|
|
117
115
|
key: string;
|
|
118
116
|
label: string;
|
|
119
117
|
checked: "true" | "false";
|
|
120
118
|
}
|
|
121
119
|
|
|
120
|
+
/**
|
|
121
|
+
* The header line: where a collection's entries are published (§22.5).
|
|
122
|
+
*
|
|
123
|
+
* `page` reads "Each post has a page at `/blog/:slug` using Post" with **Design the post page**;
|
|
124
|
+
* `none` reads "Entries have no page of their own" with **Add one**; `loading` is the sentence
|
|
125
|
+
* shown while the pages are being read; `hidden` draws nothing (Pages, a file-backed collection).
|
|
126
|
+
*/
|
|
127
|
+
export interface LibraryPageLine {
|
|
128
|
+
state: "hidden" | "loading" | "page" | "none";
|
|
129
|
+
/** The sentence before the pattern, or the whole sentence for `loading` and `none`. */
|
|
130
|
+
text: string;
|
|
131
|
+
/** The URL pattern, drawn as code. */
|
|
132
|
+
pattern: string;
|
|
133
|
+
/** "using Post", or "with no template". */
|
|
134
|
+
template: string;
|
|
135
|
+
/** The button that opens the page in Design. */
|
|
136
|
+
designLabel: string;
|
|
137
|
+
}
|
|
138
|
+
|
|
122
139
|
/** Everything the document draws, as one value. */
|
|
123
140
|
export interface LibraryView {
|
|
124
|
-
/** The region id stamped on the root, so the screenshot pipeline can address the
|
|
141
|
+
/** The region id stamped on the root, so the screenshot pipeline can address the home. */
|
|
125
142
|
region: string;
|
|
126
|
-
/** The region id on the scroller, which is also the drop zone. */
|
|
127
|
-
dropRegion: string;
|
|
128
143
|
view: LibraryViewKind;
|
|
129
|
-
|
|
144
|
+
/** The collection's title: "Pages", "Posts". */
|
|
145
|
+
title: string;
|
|
146
|
+
/** The line under the title, or "" for none. */
|
|
147
|
+
subtitle: string;
|
|
148
|
+
/** The search field's label: "Search posts". */
|
|
149
|
+
searchLabel: string;
|
|
150
|
+
/** The create button's label: "New post". */
|
|
151
|
+
newLabel: string;
|
|
152
|
+
/** Whether **New <item>** is drawn: a file-backed collection (one CSV) gains rows in its file. */
|
|
153
|
+
newState: "hidden" | "shown";
|
|
154
|
+
/**
|
|
155
|
+
* Whether **Fields** and **Edit in grid** are drawn: a declared collection has fields and a grid
|
|
156
|
+
* of its own, Pages does not.
|
|
157
|
+
*/
|
|
158
|
+
fieldsState: "hidden" | "shown";
|
|
159
|
+
page: LibraryPageLine;
|
|
130
160
|
layouts: LibraryChip[];
|
|
131
161
|
/**
|
|
132
162
|
* Whether the language facet is drawn at all.
|
|
@@ -137,15 +167,13 @@ export interface LibraryView {
|
|
|
137
167
|
localeState: "hidden" | "shown";
|
|
138
168
|
localeOptions: SurfaceOption[];
|
|
139
169
|
localeValue: string;
|
|
170
|
+
/** The Filter: drawn when something groups the entries (their status, or the Board's field). */
|
|
171
|
+
filterState: "hidden" | "shown";
|
|
172
|
+
filterOptions: SurfaceOption[];
|
|
173
|
+
filterValue: string;
|
|
140
174
|
query: string;
|
|
141
|
-
/** Where an upload lands, as the label's tooltip says it — before the files are chosen. */
|
|
142
|
-
uploadHint: string;
|
|
143
|
-
/** The picker's `accept`, from the media registry. */
|
|
144
|
-
uploadAccept: string;
|
|
145
175
|
bannerState: "hidden" | "shown";
|
|
146
176
|
bannerText: string;
|
|
147
|
-
/** `"true"` while a drag is over the body. A state the host holds, not a class a handler adds. */
|
|
148
|
-
dropActive: "true" | "false";
|
|
149
177
|
/** The `nomatch` sentence, naming the filters that produced it. */
|
|
150
178
|
emptyMessage: string;
|
|
151
179
|
/** The second line of `incomplete` and `nomatch`. */
|
|
@@ -162,28 +190,25 @@ export interface LibraryView {
|
|
|
162
190
|
truncatedState: "hidden" | "shown";
|
|
163
191
|
}
|
|
164
192
|
|
|
165
|
-
/** What a control can ask the
|
|
193
|
+
/** What a control can ask the home to do. Every one of them is a decision the pane owns. */
|
|
166
194
|
export interface LibraryActions {
|
|
167
|
-
setCategory: (key: string) => void;
|
|
168
195
|
setLayout: (key: string) => void;
|
|
169
196
|
setLocale: (value: string) => void;
|
|
197
|
+
setFilter: (value: string) => void;
|
|
170
198
|
search: (value: string) => void;
|
|
171
199
|
openFile: (path: string) => void;
|
|
172
200
|
/** Right-click on a row, at the pointer. */
|
|
173
201
|
contextMenu: (path: string, x: number, y: number) => void;
|
|
174
|
-
/**
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
dragOver: () => void;
|
|
185
|
-
dragOut: () => void;
|
|
186
|
-
drop: (files: FileList | null) => void;
|
|
202
|
+
/** **New <item>** opens Add new on the collection's kind. */
|
|
203
|
+
openNew: () => void;
|
|
204
|
+
/** **Fields** opens Project Settings › Content types on this collection. */
|
|
205
|
+
openFields: () => void;
|
|
206
|
+
/** **Edit in grid** opens the collection's grid (`collection.editInGrid`). */
|
|
207
|
+
openGrid: () => void;
|
|
208
|
+
/** **Design the <item> page** opens the collection's page in Design. */
|
|
209
|
+
designPage: () => void;
|
|
210
|
+
/** **Add one** writes the collection's page. */
|
|
211
|
+
addPage: () => void;
|
|
187
212
|
scrolled: () => void;
|
|
188
213
|
retry: () => void;
|
|
189
214
|
reset: () => void;
|
|
@@ -211,19 +236,24 @@ interface LibraryScope extends LibraryView, LibraryActions {}
|
|
|
211
236
|
/** Write a projection into the scope. */
|
|
212
237
|
function project(scope: LibraryScope, view: LibraryView): void {
|
|
213
238
|
scope.region = view.region;
|
|
214
|
-
scope.dropRegion = view.dropRegion;
|
|
215
239
|
scope.view = view.view;
|
|
216
|
-
scope.
|
|
240
|
+
scope.title = view.title;
|
|
241
|
+
scope.subtitle = view.subtitle;
|
|
242
|
+
scope.searchLabel = view.searchLabel;
|
|
243
|
+
scope.newLabel = view.newLabel;
|
|
244
|
+
scope.newState = view.newState;
|
|
245
|
+
scope.fieldsState = view.fieldsState;
|
|
246
|
+
scope.page = view.page;
|
|
217
247
|
scope.layouts = view.layouts;
|
|
248
|
+
scope.filterState = view.filterState;
|
|
249
|
+
scope.filterOptions = view.filterOptions;
|
|
250
|
+
scope.filterValue = view.filterValue;
|
|
218
251
|
scope.localeState = view.localeState;
|
|
219
252
|
scope.localeOptions = view.localeOptions;
|
|
220
253
|
scope.localeValue = view.localeValue;
|
|
221
254
|
scope.query = view.query;
|
|
222
|
-
scope.uploadHint = view.uploadHint;
|
|
223
|
-
scope.uploadAccept = view.uploadAccept;
|
|
224
255
|
scope.bannerState = view.bannerState;
|
|
225
256
|
scope.bannerText = view.bannerText;
|
|
226
|
-
scope.dropActive = view.dropActive;
|
|
227
257
|
scope.emptyMessage = view.emptyMessage;
|
|
228
258
|
scope.emptyDetail = view.emptyDetail;
|
|
229
259
|
scope.pad = view.pad;
|
|
@@ -251,7 +281,7 @@ function rowPath(state: JxScope | undefined): string {
|
|
|
251
281
|
}
|
|
252
282
|
|
|
253
283
|
/**
|
|
254
|
-
* Mount the
|
|
284
|
+
* Mount the Content home document into `host`, wired to `actions`.
|
|
255
285
|
*
|
|
256
286
|
* @param {HTMLElement} host - The pane's canvas stage
|
|
257
287
|
* @param {LibraryView} view - What to draw right now
|
|
@@ -269,25 +299,29 @@ export function mountLibrarySurface(
|
|
|
269
299
|
const listening = new AbortController();
|
|
270
300
|
placeholderBrokenImages(host, listening.signal);
|
|
271
301
|
const scope: LibraryScope = reactive<LibraryScope>({
|
|
302
|
+
addPage: actions.addPage,
|
|
272
303
|
bannerState: "hidden",
|
|
273
304
|
bannerText: "",
|
|
274
|
-
categories: [],
|
|
275
305
|
columns: [],
|
|
276
306
|
contextMenu: actions.contextMenu,
|
|
277
|
-
|
|
278
|
-
dragOver: actions.dragOver,
|
|
279
|
-
drop: actions.drop,
|
|
280
|
-
dropActive: "false",
|
|
281
|
-
dropRegion: "",
|
|
307
|
+
designPage: actions.designPage,
|
|
282
308
|
emptyDetail: "",
|
|
283
309
|
emptyMessage: "",
|
|
310
|
+
fieldsState: "hidden",
|
|
284
311
|
groups: [],
|
|
285
312
|
layouts: [],
|
|
313
|
+
filterOptions: [],
|
|
314
|
+
filterState: "hidden",
|
|
315
|
+
filterValue: "",
|
|
286
316
|
localeOptions: [],
|
|
287
317
|
localeState: "hidden",
|
|
288
318
|
localeValue: "",
|
|
319
|
+
newLabel: "",
|
|
320
|
+
newState: "hidden",
|
|
321
|
+
openFields: actions.openFields,
|
|
322
|
+
openGrid: actions.openGrid,
|
|
289
323
|
openFile: actions.openFile,
|
|
290
|
-
|
|
324
|
+
openNew: actions.openNew,
|
|
291
325
|
pad: "",
|
|
292
326
|
padBottom: "",
|
|
293
327
|
padTop: "",
|
|
@@ -296,18 +330,19 @@ export function mountLibrarySurface(
|
|
|
296
330
|
region: "",
|
|
297
331
|
reset: actions.reset,
|
|
298
332
|
retry: actions.retry,
|
|
333
|
+
page: { designLabel: "", pattern: "", state: "hidden", template: "", text: "" },
|
|
299
334
|
rows: [],
|
|
300
335
|
scrolled: actions.scrolled,
|
|
301
336
|
scroller: actions.scroller,
|
|
302
337
|
search: actions.search,
|
|
303
|
-
|
|
338
|
+
searchLabel: "",
|
|
304
339
|
setLayout: actions.setLayout,
|
|
340
|
+
setFilter: actions.setFilter,
|
|
305
341
|
setLocale: actions.setLocale,
|
|
342
|
+
subtitle: "",
|
|
343
|
+
title: "",
|
|
306
344
|
truncated: "",
|
|
307
345
|
truncatedState: "hidden",
|
|
308
|
-
upload: actions.upload,
|
|
309
|
-
uploadAccept: "",
|
|
310
|
-
uploadHint: "",
|
|
311
346
|
view: "loading",
|
|
312
347
|
});
|
|
313
348
|
project(scope, view);
|
|
@@ -87,9 +87,14 @@
|
|
|
87
87
|
"fontSize": "var(--jx-text-xs)"
|
|
88
88
|
},
|
|
89
89
|
"& [part=\"more\"]": {
|
|
90
|
-
"
|
|
91
|
-
|
|
92
|
-
|
|
90
|
+
"justifyContent": "flex-start"
|
|
91
|
+
},
|
|
92
|
+
"& [part=\"browse-all\"]": {
|
|
93
|
+
"$description": "The last row, set apart by a rule: it does not pick a file, it opens the picker that shows all of them.",
|
|
94
|
+
"marginTop": "var(--jx-space-1)",
|
|
95
|
+
"paddingTop": "var(--jx-space-2)",
|
|
96
|
+
"borderTop": "1px solid var(--border)",
|
|
97
|
+
"justifyContent": "flex-start"
|
|
93
98
|
}
|
|
94
99
|
},
|
|
95
100
|
"children": [
|
|
@@ -288,14 +293,65 @@
|
|
|
288
293
|
},
|
|
289
294
|
"cases": {
|
|
290
295
|
"shown": {
|
|
291
|
-
"$description": "A truncated list says so
|
|
292
|
-
"tagName": "
|
|
296
|
+
"$description": "A truncated list says so, and the marker is a control (the rule studio.md §5.6 states for every truncation marker): it raises the cap by fifty, so every file the Media workspace lists can be reached from here without a search. Inert \"…21 more\" text was the panel holding the answer and not showing it.",
|
|
297
|
+
"tagName": "jx-button",
|
|
293
298
|
"attributes": {
|
|
294
299
|
"part": "more"
|
|
295
300
|
},
|
|
296
|
-
"
|
|
301
|
+
"$props": {
|
|
302
|
+
"variant": "secondary",
|
|
303
|
+
"size": "sm",
|
|
304
|
+
"quiet": true
|
|
305
|
+
},
|
|
306
|
+
"onclick": {
|
|
307
|
+
"$prototype": "Function",
|
|
308
|
+
"body": [
|
|
309
|
+
{
|
|
310
|
+
"operator": "call",
|
|
311
|
+
"target": {
|
|
312
|
+
"$ref": "#/state/showMore"
|
|
313
|
+
},
|
|
314
|
+
"value": []
|
|
315
|
+
}
|
|
316
|
+
]
|
|
317
|
+
},
|
|
318
|
+
"children": [
|
|
319
|
+
{
|
|
320
|
+
"tagName": "span",
|
|
321
|
+
"textContent": "${state.moreLabel}"
|
|
322
|
+
}
|
|
323
|
+
]
|
|
297
324
|
}
|
|
298
325
|
}
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
"tagName": "jx-button",
|
|
329
|
+
"attributes": {
|
|
330
|
+
"part": "browse-all"
|
|
331
|
+
},
|
|
332
|
+
"$props": {
|
|
333
|
+
"variant": "secondary",
|
|
334
|
+
"size": "sm",
|
|
335
|
+
"quiet": true
|
|
336
|
+
},
|
|
337
|
+
"onclick": {
|
|
338
|
+
"$prototype": "Function",
|
|
339
|
+
"body": [
|
|
340
|
+
{
|
|
341
|
+
"operator": "call",
|
|
342
|
+
"target": {
|
|
343
|
+
"$ref": "#/state/browseAll"
|
|
344
|
+
},
|
|
345
|
+
"value": []
|
|
346
|
+
}
|
|
347
|
+
]
|
|
348
|
+
},
|
|
349
|
+
"children": [
|
|
350
|
+
{
|
|
351
|
+
"tagName": "span",
|
|
352
|
+
"textContent": "${state.browseAllLabel}"
|
|
353
|
+
}
|
|
354
|
+
]
|
|
299
355
|
}
|
|
300
356
|
]
|
|
301
357
|
}
|
|
@@ -14,6 +14,10 @@
|
|
|
14
14
|
* which is the whole reason `panels/seo-modal.ts` had to fork its own Browse onto the kit menu, and
|
|
15
15
|
* a top-layer popover has no such problem.
|
|
16
16
|
*
|
|
17
|
+
* **The last row opens the big picker.** **Browse all media…** hands the same commit to the Media
|
|
18
|
+
* workspace's own surface in a dialog (`media/media-library.ts`), so the compact list and the full
|
|
19
|
+
* one are two sizes of one picker rather than two pickers.
|
|
20
|
+
*
|
|
17
21
|
* **The filter takes the caret, and the adapter is what puts it there.** A `jx-popover` moves focus
|
|
18
22
|
* into itself but has no opinion about which control; the panel is a search box over a list, so the
|
|
19
23
|
* box is where typing should land. The node is reached through the mounted root rather than a
|
|
@@ -60,8 +64,10 @@ export interface MediaBrowserView {
|
|
|
60
64
|
/** What stands in for the list when nothing matches. */
|
|
61
65
|
emptyLabel: string;
|
|
62
66
|
moreState: "hidden" | "shown";
|
|
63
|
-
/** "
|
|
67
|
+
/** "Show 10 more": a truncated list says so, and the marker raises the cap. */
|
|
64
68
|
moreLabel: string;
|
|
69
|
+
/** The last row: "Browse all media…", or "Browse all images…" for a field that holds a picture. */
|
|
70
|
+
browseAllLabel: string;
|
|
65
71
|
}
|
|
66
72
|
|
|
67
73
|
/** What a control asks the flow to do. */
|
|
@@ -70,6 +76,10 @@ export interface MediaBrowserActions {
|
|
|
70
76
|
pick: (path: string) => void;
|
|
71
77
|
/** A thumbnail finished decoding at that size. The flow decides whether it is news. */
|
|
72
78
|
measure: (file: string, width: number, height: number) => void;
|
|
79
|
+
/** Raise the cap on listed rows: the truncation marker is a control, not a sentence. */
|
|
80
|
+
showMore: () => void;
|
|
81
|
+
/** Open the full-size picker: the Media workspace's surface, in a dialog (studio.md §9.3). */
|
|
82
|
+
browseAll: () => void;
|
|
73
83
|
/** The platform closed the panel: clicked outside, Escape, or a second press on the invoker. */
|
|
74
84
|
dismissed?: () => void;
|
|
75
85
|
}
|
|
@@ -90,6 +100,7 @@ function project(scope: MediaBrowserScope, view: MediaBrowserView): void {
|
|
|
90
100
|
scope.emptyLabel = view.emptyLabel;
|
|
91
101
|
scope.moreState = view.moreState;
|
|
92
102
|
scope.moreLabel = view.moreLabel;
|
|
103
|
+
scope.browseAllLabel = view.browseAllLabel;
|
|
93
104
|
}
|
|
94
105
|
|
|
95
106
|
/**
|
|
@@ -106,6 +117,8 @@ export function openMediaBrowserSurface(
|
|
|
106
117
|
anchor: HTMLElement | null,
|
|
107
118
|
): MediaBrowserSurfaceHandle {
|
|
108
119
|
const scope: MediaBrowserScope = reactive<MediaBrowserScope>({
|
|
120
|
+
browseAll: actions.browseAll,
|
|
121
|
+
browseAllLabel: view.browseAllLabel,
|
|
109
122
|
emptyLabel: view.emptyLabel,
|
|
110
123
|
filter: view.filter,
|
|
111
124
|
measure: actions.measure,
|
|
@@ -115,6 +128,7 @@ export function openMediaBrowserSurface(
|
|
|
115
128
|
rows: view.rows,
|
|
116
129
|
rowsState: view.rowsState,
|
|
117
130
|
setFilter: actions.setFilter,
|
|
131
|
+
showMore: actions.showMore,
|
|
118
132
|
x: view.x,
|
|
119
133
|
y: view.y,
|
|
120
134
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://jxsuite.com/schema/v1",
|
|
3
3
|
"$id": "StudioMediaField",
|
|
4
|
-
"$description": "The media field: a thumbnail of what the value names, the value itself, and the two doors to a different one. It is a LEAF a caller interpolates \u2014 the Inspector's Content tab, the Signals panel and the grid's image-cell panel each draw an empty host and `ui/media-picker.ts` mounts this into it \u2014 so it has no chrome of its own and takes its width from whatever row it lands in. **Browse is addressed through its `part`, not through a class.** `ui/regions.ts` derives `inspector/field:<prop>/browse` by finding the Browse control inside the Inspector's own `[data-prop]` row; the handle used to be `.media-picker-browse`, and a document emits no class, so `[part=\"browse\"]` is the handle now. The four `.media-picker*` rules from `styles/overlays.css` are TRANSCRIBED here rather than shared,
|
|
4
|
+
"$description": "The media field: a thumbnail of what the value names, the value itself, and the two doors to a different one. It is a LEAF a caller interpolates \u2014 the Inspector's Content tab, the Signals panel and the grid's image-cell panel each draw an empty host and `ui/media-picker.ts` mounts this into it \u2014 so it has no chrome of its own and takes its width from whatever row it lands in. **Browse is addressed through its `part`, not through a class.** `ui/regions.ts` derives `inspector/field:<prop>/browse` by finding the Browse control inside the Inspector's own `[data-prop]` row; the handle used to be `.media-picker-browse`, and a document emits no class, so `[part=\"browse\"]` is the handle now. The four `.media-picker*` rules from `styles/overlays.css` are TRANSCRIBED here rather than shared, because a class a document does not emit cannot style it. `--radius` becomes `--jx-radius-sm` on the way, because a document mounted in a pane's stage is outside `<sp-theme>` and would otherwise take a fallback rather than follow the theme.",
|
|
5
5
|
"tagName": "div",
|
|
6
6
|
"attributes": {
|
|
7
7
|
"part": "media-field"
|