@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
|
@@ -9,28 +9,25 @@
|
|
|
9
9
|
import { defineElement, setSkipServerFunctions } from "@jxsuite/runtime";
|
|
10
10
|
import { projectState } from "../store";
|
|
11
11
|
import type { ComponentEntry } from "../files/components";
|
|
12
|
+
import type { JsonValue } from "@jxsuite/schema/types";
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
15
|
* Render a live component preview by registering its custom element and instantiating it.
|
|
15
16
|
*
|
|
16
17
|
* @param {ComponentEntry} comp
|
|
18
|
+
* @param {ReadonlyMap<string, JsonValue>} [props] - Sample props (`browse/component-examples.ts`),
|
|
19
|
+
* set as properties before the instance connects, the way a parent's `$props` reach it (spec.md
|
|
20
|
+
* §16.2)
|
|
17
21
|
* @returns {Promise<HTMLElement>}
|
|
18
22
|
*/
|
|
19
|
-
export async function renderComponentPreview(
|
|
23
|
+
export async function renderComponentPreview(
|
|
24
|
+
comp: ComponentEntry,
|
|
25
|
+
props: ReadonlyMap<string, JsonValue> = new Map(),
|
|
26
|
+
) {
|
|
20
27
|
setSkipServerFunctions(true);
|
|
21
28
|
try {
|
|
22
|
-
if (comp
|
|
23
|
-
|
|
24
|
-
return _componentFallback(comp.tagName);
|
|
25
|
-
}
|
|
26
|
-
} else {
|
|
27
|
-
if (comp.path && !comp.path.endsWith(".json")) {
|
|
28
|
-
// Format-class component sources (e.g. markdown) can't be imported as modules
|
|
29
|
-
return _componentFallback(comp.tagName);
|
|
30
|
-
}
|
|
31
|
-
const root = projectState?.projectRoot;
|
|
32
|
-
const url = `${location.origin}/${root ? `${root}/` : ""}${comp.path}`;
|
|
33
|
-
await defineElement(url);
|
|
29
|
+
if (!(await defineComponent(comp))) {
|
|
30
|
+
return _componentFallback(comp.tagName);
|
|
34
31
|
}
|
|
35
32
|
const el = document.createElement(comp.tagName);
|
|
36
33
|
for (const p of comp.props || []) {
|
|
@@ -39,6 +36,13 @@ export async function renderComponentPreview(comp: ComponentEntry) {
|
|
|
39
36
|
el.setAttribute(p.name, val);
|
|
40
37
|
}
|
|
41
38
|
}
|
|
39
|
+
// Read at connection as the instance's own props, ahead of the attribute defaults above.
|
|
40
|
+
/* SAFETY: an element is an ordinary extensible object, so any string key can be written; the
|
|
41
|
+
instance reads each declared prop back off itself when it connects. */
|
|
42
|
+
const properties = el as HTMLElement & Record<string, JsonValue>;
|
|
43
|
+
for (const [name, value] of props) {
|
|
44
|
+
properties[name] = value;
|
|
45
|
+
}
|
|
42
46
|
return el;
|
|
43
47
|
} catch (error) {
|
|
44
48
|
console.warn("Component preview failed:", comp.tagName, error);
|
|
@@ -46,6 +50,24 @@ export async function renderComponentPreview(comp: ComponentEntry) {
|
|
|
46
50
|
}
|
|
47
51
|
}
|
|
48
52
|
|
|
53
|
+
/**
|
|
54
|
+
* Make sure a component's element is defined in this window, registering a project definition from
|
|
55
|
+
* its file. Answers whether the tag can now be instantiated: a package's element only when its
|
|
56
|
+
* package already defined it, and a format-class source (Markdown) never, since it cannot be
|
|
57
|
+
* imported as a module.
|
|
58
|
+
*/
|
|
59
|
+
export async function defineComponent(comp: ComponentEntry): Promise<boolean> {
|
|
60
|
+
if (comp.source === "npm") {
|
|
61
|
+
return Boolean(customElements.get(comp.tagName));
|
|
62
|
+
}
|
|
63
|
+
if (comp.path && !comp.path.endsWith(".json")) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
const root = projectState?.projectRoot;
|
|
67
|
+
await defineElement(`${location.origin}/${root ? `${root}/` : ""}${comp.path}`);
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
|
|
49
71
|
/** @param {string} tagName */
|
|
50
72
|
function _componentFallback(tagName: string) {
|
|
51
73
|
const fallback = document.createElement("div");
|
|
@@ -419,7 +419,7 @@ export function registerDataExplorerCommands(
|
|
|
419
419
|
* **Both halves are documents now** — `surfaces/panel-signals.{json,ts}` for the entry list and its
|
|
420
420
|
* editors, `surfaces/panel-data.{json,ts}` for the value tree under an open row. So lit draws
|
|
421
421
|
* nothing at all here: `render` returns `nothing` and `afterRender` mounts against the painted DOM,
|
|
422
|
-
* which is the seam
|
|
422
|
+
* which is the seam every document-bodied Navigator panel uses. The mount comes through `deps`
|
|
423
423
|
* rather than an import — this module owns the expansion store that one reads, so importing it back
|
|
424
424
|
* would close a cycle — and it is idempotent, so running on every repaint is what keeps the
|
|
425
425
|
* projection current.
|
package/src/panels/data-grid.ts
CHANGED
|
@@ -23,6 +23,7 @@ import { mountDataActionsSurface } from "../surfaces/data-actions";
|
|
|
23
23
|
import { mountPushPlanSurface } from "../surfaces/push-plan";
|
|
24
24
|
import { dataSurfaceAvailable, pushSchema, testConnection } from "../services/data-service";
|
|
25
25
|
import { openGridSourcePicker } from "../grid/grid-open";
|
|
26
|
+
import { closeSettingsDialog } from "../settings/settings-dialog";
|
|
26
27
|
import type { DataActionsSurfaceHandle, DataActionsView } from "../surfaces/data-actions";
|
|
27
28
|
import type { DialogSurfaceHandle } from "../surfaces/dialog";
|
|
28
29
|
import type { PushPlanSurfaceHandle, PushPlanView } from "../surfaces/push-plan";
|
|
@@ -277,6 +278,9 @@ function paintSectionActions(
|
|
|
277
278
|
host,
|
|
278
279
|
mountDataActionsSurface(host, projectActions(sectionKey, selected), {
|
|
279
280
|
openGrid: () => {
|
|
281
|
+
/* The actions row is drawn in the settings dialog, and a grid opens as a TAB: left up, the
|
|
282
|
+
dialog would cover the very tab the reader asked for (§17.1). */
|
|
283
|
+
closeSettingsDialog();
|
|
280
284
|
void openGridSourcePicker();
|
|
281
285
|
},
|
|
282
286
|
push: () => {
|
package/src/panels/dnd.ts
CHANGED
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
monitorForElements,
|
|
11
11
|
} from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
|
|
12
12
|
import { combine } from "@atlaskit/pragmatic-drag-and-drop/combine";
|
|
13
|
-
import {
|
|
13
|
+
import { isNumber } from "@jxsuite/schema/guards";
|
|
14
14
|
import { disableNativeDragPreview } from "@atlaskit/pragmatic-drag-and-drop/element/disable-native-drag-preview";
|
|
15
15
|
import {
|
|
16
16
|
attachInstruction,
|
|
@@ -26,13 +26,12 @@ import {
|
|
|
26
26
|
parentElementPath,
|
|
27
27
|
renderOnly,
|
|
28
28
|
} from "../store";
|
|
29
|
-
import { mutateInsertNode, mutateMoveNode,
|
|
29
|
+
import { mutateInsertNode, mutateMoveNode, transactDoc } from "../tabs/transact";
|
|
30
30
|
import { primarySelection } from "../tabs/selection";
|
|
31
31
|
import { activeTab } from "../workspace/workspace";
|
|
32
32
|
import { view } from "../view";
|
|
33
33
|
import { buildComponentInstance, componentRegistry } from "../files/components";
|
|
34
|
-
import {
|
|
35
|
-
import type { ElementsEntry } from "../files/elements";
|
|
34
|
+
import { mutateImportComponent } from "../editor/insert-component";
|
|
36
35
|
import { renderComponentPreview } from "./component-preview";
|
|
37
36
|
import { defaultDef, unsafeTags } from "./shared";
|
|
38
37
|
import { elementAtPoint } from "../utils/geometry";
|
|
@@ -487,33 +486,21 @@ export function applyDropInstruction(
|
|
|
487
486
|
/* SAFETY: every minter of a "block" payload — the Insert palette's element and component cards
|
|
488
487
|
and the file drop (`file-drop-action.ts`) — sets `fragment` to the JxMutableNode it inserts. */
|
|
489
488
|
const fragment = srcData.fragment as JxMutableNode;
|
|
489
|
+
/* Auto-import to `$elements` if the dropped block is a custom component, through the rule
|
|
490
|
+
every insertion door shares (`editor/insert-component.ts`, over the one `$elements` service):
|
|
491
|
+
this call site once had its own duplicate rule and matched a local component by
|
|
492
|
+
`ref.endsWith(basename)`, so dropping `./components/card.json` into a page that already
|
|
493
|
+
imported `./vendor/card.json` counted as already imported. The import is part of the same
|
|
494
|
+
transaction as the insert, so one ⌘Z takes back both. */
|
|
490
495
|
if (slot) {
|
|
491
|
-
transactDoc(tab, (t) =>
|
|
492
|
-
mutateInsertNode(t, slot.parent, slot.index, structuredClone(fragment))
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
dropping `./components/card.json` into a page that already imported `./vendor/card.json`
|
|
500
|
-
counted as already imported and produced an element the page could not resolve. */
|
|
501
|
-
const tag = fragment.tagName;
|
|
502
|
-
if (displayTagName(tag).includes("-")) {
|
|
503
|
-
const comp = componentRegistry.find((c: ComponentEntry) => c.tagName === tag);
|
|
504
|
-
/* SAFETY: `$elements` holds module specifiers and `{ $ref }` imports; the document type and
|
|
505
|
-
files/elements.ts spell an inline entry as JxMutableNode and JxElement respectively, two
|
|
506
|
-
editor views of the same JSON object that enableElement only compares by `$ref`. */
|
|
507
|
-
const before = (tab.doc.document.$elements ?? []) as ElementsEntry[];
|
|
508
|
-
const after = comp ? enableElement(before, comp, tab.documentPath ?? null) : before;
|
|
509
|
-
// Only when the list actually GREW. A component the registry cannot name — an npm entry with
|
|
510
|
-
// No package, a local one with no path — returns the list unchanged, and writing that back
|
|
511
|
-
// Would put an empty `$elements: []` on a document that had none.
|
|
512
|
-
if (after.length !== before.length) {
|
|
513
|
-
transact(tab, (d: JxMutableNode) => {
|
|
514
|
-
d.$elements = after;
|
|
515
|
-
});
|
|
516
|
-
}
|
|
496
|
+
transactDoc(tab, (t) => {
|
|
497
|
+
mutateInsertNode(t, slot.parent, slot.index, structuredClone(fragment));
|
|
498
|
+
mutateImportComponent(t, fragment.tagName);
|
|
499
|
+
/* The inserted node is the selection, as every other insert leaves it (the slash menu, Enter,
|
|
500
|
+
paste): the Inspector is then on the thing just placed, which is where a dropped image's
|
|
501
|
+
missing alt text or a component's props are filled in. */
|
|
502
|
+
t.session.selection = [[...slot.parent, "children", slot.index]];
|
|
503
|
+
});
|
|
517
504
|
}
|
|
518
505
|
}
|
|
519
506
|
}
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
import { isString } from "@jxsuite/schema/guards";
|
|
24
24
|
import { nothing } from "lit-html";
|
|
25
25
|
import { buildComponentInstance, componentRegistry } from "../files/components";
|
|
26
|
+
import { mutateImportComponent } from "../editor/insert-component";
|
|
26
27
|
import { childList, getNodeAtPath } from "../store";
|
|
27
28
|
import { getEffectiveElements } from "../site-context";
|
|
28
29
|
import { mountElementsSurface } from "../surfaces/panel-elements";
|
|
@@ -164,7 +165,10 @@ function panelValues(source: NavigatorPanelDeps): ElementsValues {
|
|
|
164
165
|
};
|
|
165
166
|
}
|
|
166
167
|
|
|
167
|
-
/**
|
|
168
|
+
/**
|
|
169
|
+
* Insert a node as the last child of the selected element — what both kinds of card do — and import
|
|
170
|
+
* it when it is a component, as a drag of the same card does (§5.7: insertion has one meaning).
|
|
171
|
+
*/
|
|
168
172
|
function insertAtSelection(def: JxMutableNode): void {
|
|
169
173
|
const tab = activeTab.value;
|
|
170
174
|
if (!tab) {
|
|
@@ -173,7 +177,10 @@ function insertAtSelection(def: JxMutableNode): void {
|
|
|
173
177
|
const parentPath = primarySelection(tab.session.selection) ?? [];
|
|
174
178
|
const parent = getNodeAtPath(tab.doc.document, parentPath);
|
|
175
179
|
const index = childList(parent).length;
|
|
176
|
-
transactDoc(tab, (tr) =>
|
|
180
|
+
transactDoc(tab, (tr) => {
|
|
181
|
+
mutateInsertNode(tr, parentPath, index, structuredClone(def));
|
|
182
|
+
mutateImportComponent(tr, def.tagName);
|
|
183
|
+
});
|
|
177
184
|
}
|
|
178
185
|
|
|
179
186
|
/**
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
* There is no `icon` here any more, and its absence is the point rather than an omission: it was
|
|
25
25
|
* typed `TemplateResult` and every value passed to it was an `sp-icon-*`, which is a Spectrum
|
|
26
26
|
* element smuggled through a shared vocabulary into surfaces that have no other Spectrum in them.
|
|
27
|
-
*
|
|
28
|
-
* `surfaces/empty-state.json` draws a word, and a region that needs a glyph beside one is asking
|
|
27
|
+
* The Source Control panel was the last caller and it became a document, so the field went with it
|
|
28
|
+
* — `surfaces/empty-state.json` draws a word, and a region that needs a glyph beside one is asking
|
|
29
29
|
* for a control the kit declares rather than for a hole in this type.
|
|
30
30
|
*/
|
|
31
31
|
export interface EmptyStateAction {
|
|
@@ -302,9 +302,8 @@ function selectionKey(editing: FormulaEditDef): string {
|
|
|
302
302
|
*
|
|
303
303
|
* The document reports a chip by its key and a button by nothing at all, so the objects behind them
|
|
304
304
|
* — the tab, the target, the root node, the sub-node a commit replaces — live here, rewritten by
|
|
305
|
-
* every projection. Held rather than recomputed at click time
|
|
306
|
-
*
|
|
307
|
-
* document for the rest of the window.
|
|
305
|
+
* every projection. Held rather than recomputed at click time because a callback captured at mount
|
|
306
|
+
* would reach the FIRST projection's document for the rest of the window.
|
|
308
307
|
*/
|
|
309
308
|
interface Resolved {
|
|
310
309
|
tab: Tab;
|
|
@@ -9,12 +9,12 @@
|
|
|
9
9
|
*
|
|
10
10
|
* {@link projectFmField} is the half that says WHAT ONE OF THEM LOOKS LIKE — which control it draws,
|
|
11
11
|
* what that control currently holds, and how to read the control's answer back into a frontmatter
|
|
12
|
-
* value. It is a projection rather than a renderer, and that is the whole of why it lives here:
|
|
13
|
-
*
|
|
14
|
-
* `src/surfaces/
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
12
|
+
* value. It is a projection rather than a renderer, and that is the whole of why it lives here: the
|
|
13
|
+
* surface that edits frontmatter is a Jx document (the Inspector's Page tab,
|
|
14
|
+
* `src/surfaces/panel-page.json`), and a document draws its own markup. What it must not decide for
|
|
15
|
+
* itself is that a `$ref` field is a picker, that `"uri-reference"` is a media format, or that an
|
|
16
|
+
* array is a comma-separated line — so it does not: it asks here and draws the answer. (The
|
|
17
|
+
* Document Header card that once drew the same rows above the canvas is gone, studio.md §4.2.)
|
|
18
18
|
*
|
|
19
19
|
* It replaces `renderFmField`, which was a lit template and could therefore only ever have ONE of
|
|
20
20
|
* the two hosts. The Page panel was the last one, and the renderer went with it.
|
|
@@ -66,13 +66,13 @@ export interface FmFieldSet {
|
|
|
66
66
|
*
|
|
67
67
|
* @param {Tab} tab
|
|
68
68
|
* @param {ProjectConfig | null | undefined} projectConfig
|
|
69
|
-
* @param {
|
|
69
|
+
* @param {ReadonlySet<string>} reserved — keys managed by dedicated controls elsewhere
|
|
70
70
|
* @returns {FmFieldSet}
|
|
71
71
|
*/
|
|
72
72
|
export function collectFmFields(
|
|
73
73
|
tab: Tab,
|
|
74
74
|
projectConfig: ProjectConfig | null | undefined,
|
|
75
|
-
reserved:
|
|
75
|
+
reserved: ReadonlySet<string>,
|
|
76
76
|
): FmFieldSet {
|
|
77
77
|
/* SAFETY: `FormatFrontmatter` holds `JxDocumentValue`, which is the JSON value space seen through
|
|
78
78
|
the typed interfaces a document's declared keys use (JxRef, JxStatement, CemEvent, ...). Every
|
|
@@ -299,7 +299,7 @@ export function projectFmField(
|
|
|
299
299
|
return {
|
|
300
300
|
parse: (raw) => {
|
|
301
301
|
/* NaN is deleted rather than written. The two surfaces this replaced disagreed here: the
|
|
302
|
-
Page panel's `spNumberField` refused a non-number and the Document Header card wrote
|
|
302
|
+
Page panel's `spNumberField` refused a non-number and the old Document Header card wrote
|
|
303
303
|
`NaN` into the frontmatter, where it round-trips to `null`. One answer, and it is the
|
|
304
304
|
one that cannot corrupt the document. */
|
|
305
305
|
const trimmed = String(raw).trim();
|
|
@@ -130,10 +130,14 @@ export function openDiffTab(path: string): Tab {
|
|
|
130
130
|
* leave the comparison for Design without reopening anything; a file it cannot gets the stub tab
|
|
131
131
|
* above. Both are keyed by the path, so §14.1 holds either way — one path, one tab.
|
|
132
132
|
*
|
|
133
|
-
* `
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
133
|
+
* The document tab opens IN `git-diff`, and an already-open one is moved into it before it is
|
|
134
|
+
* revealed: a comparison belongs to Publish (studio.md §22.1), and a tab activated in its edit mode
|
|
135
|
+
* would enter Design, frame and all, for the moment before the mode followed.
|
|
136
|
+
*
|
|
137
|
+
* `files/files.ts` is imported dynamically because it imports `cleanupSourceControl` from
|
|
138
|
+
* `publish/source-control.ts`, which imports this module: a static edge back would close that
|
|
139
|
+
* cycle. `openFileInTab` answers `void` whether it opens a new tab or reveals one that was already
|
|
140
|
+
* open, so the tab is resolved from the workspace by its path.
|
|
137
141
|
*
|
|
138
142
|
* Answers null when the file could not be opened at all, which the caller states rather than
|
|
139
143
|
* silently leaving the stage on someone else's document.
|
|
@@ -143,6 +147,6 @@ export async function openComparisonTab(path: string): Promise<Tab | null> {
|
|
|
143
147
|
return openDiffTab(path);
|
|
144
148
|
}
|
|
145
149
|
const files = await import("../files/files");
|
|
146
|
-
await files.openFileInTab(path, {});
|
|
150
|
+
await files.openFileInTab(path, { canvasMode: "git-diff" });
|
|
147
151
|
return [...workspace.tabs.values()].find((tab) => tab.documentPath === path) ?? null;
|
|
148
152
|
}
|