@jxsuite/studio 6.1.1 → 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/{action-group-2mqby73c.js → action-group-4aan7g6g.js} +3 -3
- 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-6rbra5dy.js +4 -0
- package/dist/chunks/color-field-gy56c94g.js +4 -0
- package/dist/chunks/color-m7r1vk54.js +4 -0
- package/dist/chunks/color-slider-sqqdyf6c.js +4 -0
- package/dist/chunks/combobox-72h32ejk.js +4 -0
- 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/dialog-c4x05vyx.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-qg1b5eqx.js +51 -0
- package/dist/chunks/icons-63bjtbs7.js +4 -0
- package/dist/chunks/iframe-entry-2zggzajv.js +5 -0
- package/dist/chunks/iframe-entry-76j8vwwx.js +5 -0
- package/dist/chunks/iframe-entry-99nr5zfb.js +5 -0
- package/dist/chunks/iframe-entry-pkgmcgp0.js +5 -0
- package/dist/chunks/iframe-host-ssv7kyj0.js +4 -0
- package/dist/chunks/{index-2veqmnhr.js → index-32eqzv1k.js} +3 -3
- package/dist/chunks/index-f0jn7nnp.js +4 -0
- package/dist/chunks/{javascript-8nbvs12s.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-c421cf8c.js +4 -0
- 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-bdpzbfvs.js +4 -0
- package/dist/chunks/monaco-binding-vq1hgnn0.js +4 -0
- 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/number-field-y62xq0ty.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/select-rzds841e.js +4 -0
- package/dist/chunks/source-control-kwktr9y6.js +4 -0
- package/dist/chunks/split-c9zfdgxf.js +4 -0
- 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-6m380wp7.js +5 -0
- package/dist/chunks/studio-80jyh1xh.js +4 -0
- package/dist/chunks/studio-83mk4bgg.js +9 -0
- package/dist/chunks/{studio-kggey1jt.js → studio-881z1xrx.js} +4 -4
- package/dist/chunks/studio-8m0y2qe7.js +5 -0
- package/dist/chunks/studio-8tr6cfrc.js +5 -0
- 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-bbe4c90a.js +5 -0
- 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-8grwxtqk.js → studio-jcnsdaep.js} +4 -4
- package/dist/chunks/studio-jsgf2q5k.js +7 -0
- package/dist/chunks/{studio-1q1sh2ax.js → studio-k3xxbagr.js} +3 -3
- package/dist/chunks/studio-k7evxqh4.js +5 -0
- 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-rv11kfwa.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-h46vtzk8.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-wszjyh0j.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-pre0skq6.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-t6b6qe31.js → studio-r5qy30vx.js} +4 -4
- 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/swatch-group-ewh24n1f.js +4 -0
- package/dist/chunks/tabs-f5cw3tgp.js +4 -0
- package/dist/chunks/textfield-wewc8rq2.js +4 -0
- package/dist/chunks/toast-1gv0h53h.js +4 -0
- package/dist/chunks/toast-host-1yg5ar8d.js +4 -0
- package/dist/chunks/{toolbar-2nnzqhrj.js → toolbar-44cm5cta.js} +3 -3
- package/dist/chunks/tooltip-yypz28gq.js +4 -0
- package/dist/chunks/tree-9xa4hm7n.js +4 -0
- 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-bv552sfx.js +4 -0
- package/dist/iframe-entry.js +20 -16
- package/dist/manifest.json +77 -63
- package/dist/studio.js +106 -107
- package/dist/workers/ts.worker.js +3 -3
- package/package.json +17 -16
- package/src/about/about-modal.ts +4 -3
- package/src/account/action-flow.ts +45 -38
- package/src/account-status.ts +7 -2
- package/src/browse/component-examples.ts +272 -0
- package/src/browse/library-commands.ts +64 -104
- package/src/browse/library-layouts.ts +270 -53
- package/src/browse/library-model.ts +194 -134
- package/src/browse/library-pane.ts +748 -440
- package/src/browse/library-preview.ts +161 -26
- 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 +40 -10
- package/src/canvas/asset-resolve.ts +19 -23
- package/src/canvas/canvas-helpers.ts +7 -6
- package/src/canvas/canvas-live-render.ts +260 -77
- package/src/canvas/canvas-origin.ts +37 -12
- package/src/canvas/canvas-page-context.ts +112 -0
- package/src/canvas/canvas-patcher.ts +30 -30
- package/src/canvas/canvas-perf.ts +11 -5
- package/src/canvas/canvas-render.ts +175 -148
- package/src/canvas/canvas-surface.ts +5 -3
- package/src/canvas/canvas-utils.ts +147 -61
- package/src/canvas/dialog-path.ts +9 -4
- package/src/canvas/dialog-state.ts +1 -2
- package/src/canvas/diff-marks.ts +9 -16
- package/src/canvas/diff-toolbar.ts +8 -7
- package/src/canvas/edit-width-drag.ts +4 -1
- package/src/canvas/edit-width.ts +1 -3
- package/src/canvas/iframe-channel.ts +27 -13
- package/src/canvas/iframe-drop.ts +120 -12
- package/src/canvas/iframe-editable-root.ts +29 -16
- package/src/canvas/iframe-entry.ts +104 -75
- package/src/canvas/iframe-eval.ts +73 -49
- package/src/canvas/iframe-host.ts +269 -158
- package/src/canvas/iframe-inline-edit.ts +49 -30
- package/src/canvas/iframe-insert.ts +5 -4
- package/src/canvas/iframe-interaction.ts +30 -25
- package/src/canvas/iframe-keys.ts +11 -0
- package/src/canvas/iframe-overlay.ts +1 -1
- package/src/canvas/iframe-patch.ts +25 -21
- package/src/canvas/iframe-position.ts +12 -6
- package/src/canvas/iframe-protocol.ts +36 -21
- package/src/canvas/iframe-render.ts +84 -35
- package/src/canvas/iframe-slash.ts +24 -11
- package/src/canvas/iframe-subtree.ts +10 -3
- package/src/canvas/npm-modules.ts +22 -0
- package/src/canvas/path-mapping.ts +19 -12
- package/src/canvas/popover-path.ts +7 -3
- package/src/canvas/popover-state.ts +1 -2
- package/src/canvas/preview-navigate.ts +16 -0
- package/src/canvas/repeater-sources.ts +200 -0
- package/src/canvas/serialize-scope.ts +13 -5
- package/src/canvas/stage-scrollbar.ts +7 -2
- package/src/canvas/surface-registry.ts +27 -3
- package/src/collab/collab-commands.ts +7 -2
- package/src/collab/collab-session.ts +84 -45
- package/src/collab/collab-state.ts +4 -3
- package/src/collab/monaco-binding.ts +16 -13
- package/src/collab/monaco-cursors.ts +5 -2
- package/src/commands/app-commands.ts +16 -6
- package/src/commands/budget.ts +13 -11
- package/src/commands/command-args.ts +103 -71
- package/src/commands/context.ts +55 -28
- package/src/commands/defaults.ts +69 -45
- package/src/commands/keymap.ts +56 -43
- package/src/commands/levels.ts +14 -8
- package/src/commands/live-context.ts +9 -7
- package/src/commands/reference.ts +2 -1
- package/src/commands/registry.ts +22 -11
- package/src/commands/run-reported.ts +15 -10
- package/src/component-props.ts +46 -30
- package/src/content/collection-match.ts +11 -9
- package/src/content/collection-pages.ts +412 -0
- package/src/content/content-collections.ts +270 -0
- package/src/content/draft-state.ts +4 -3
- package/src/content/entry-commands.ts +54 -62
- package/src/content/entry-editor.ts +137 -32
- package/src/content/entry-fields.ts +25 -8
- package/src/content/entry-inspector.ts +225 -0
- package/src/content/entry-model.ts +38 -15
- 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/canvas-context-menu.ts +1 -2
- package/src/editor/canvas-slash-bridge.ts +3 -6
- package/src/editor/content-slice.ts +16 -14
- package/src/editor/context-menu.ts +35 -22
- package/src/editor/convert-targets.ts +30 -35
- package/src/editor/convert-to-component.ts +78 -48
- package/src/editor/convert-to-repeater.ts +34 -22
- package/src/editor/editable-tags.ts +17 -2
- package/src/editor/file-drop-action.ts +29 -22
- package/src/editor/inline-edit-apply.ts +79 -17
- package/src/editor/inline-edit.ts +76 -50
- package/src/editor/inline-format.ts +59 -56
- package/src/editor/inline-link.ts +40 -15
- package/src/editor/insert-component.ts +91 -0
- package/src/editor/insert-zone-action.ts +14 -5
- package/src/editor/merge-tags.ts +58 -19
- package/src/editor/repeater-scope.ts +39 -28
- package/src/editor/shortcuts.ts +76 -42
- package/src/editor/slash-menu.ts +52 -14
- package/src/files/asset-versions.ts +4 -4
- package/src/files/components.ts +89 -20
- package/src/files/elements.ts +5 -6
- package/src/files/file-ops.ts +92 -41
- package/src/files/files.ts +248 -239
- package/src/files/fs-events.ts +18 -7
- package/src/files/media-meta.ts +97 -2
- package/src/files/media-paths.ts +3 -0
- 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 +15 -5
- package/src/format/constraints.ts +1 -1
- package/src/format/convert-file.ts +27 -13
- package/src/format/format-choices.ts +2 -1
- package/src/format/format-host.ts +91 -50
- package/src/github/github-auth-status.ts +27 -3
- package/src/github/github-auth.ts +21 -11
- package/src/github/github-publish.ts +28 -23
- package/src/grid/cell-editors.ts +46 -31
- package/src/grid/cell-popovers.ts +5 -3
- package/src/grid/edit-buffer.ts +10 -9
- package/src/grid/grid-controller.ts +25 -23
- package/src/grid/grid-layout.ts +21 -5
- package/src/grid/grid-open.ts +3 -33
- package/src/grid/grid-panel.ts +65 -6
- package/src/grid/grid-reveal.ts +34 -0
- package/src/grid/grid-source.ts +9 -31
- package/src/grid/grid-view.ts +45 -23
- package/src/grid/redirects-grid.ts +14 -5
- package/src/grid/redirects.ts +16 -14
- package/src/grid/schema-columns.ts +25 -19
- package/src/grid/sources/connector-source.ts +47 -20
- package/src/grid/sources/content-source.ts +100 -31
- package/src/grid/sources/csv-file-source.ts +2 -2
- package/src/grid/tabulator-tables.d.ts +61 -34
- package/src/hosting/document.ts +2 -2
- package/src/hosting/stage.ts +7 -7
- package/src/i18n/i18n-commands.ts +3 -3
- 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 +51 -20
- package/src/new-project/add-repo-modal.ts +20 -19
- package/src/new-project/import-tab.ts +10 -14
- package/src/new-project/location-fields.ts +2 -1
- package/src/new-project/new-project-modal.ts +12 -9
- package/src/packages/jxsuite-update.ts +4 -3
- package/src/packages/pull-package-sync.ts +26 -25
- package/src/page-params.ts +97 -68
- package/src/panels/activity-panel.ts +38 -14
- package/src/panels/ai-chat/attached-context.ts +13 -7
- package/src/panels/ai-chat/chat-markdown.ts +8 -8
- package/src/panels/ai-chat/chat-view.ts +80 -73
- package/src/panels/ai-chat/composer.ts +30 -33
- package/src/panels/ai-chat/sessions-view.ts +1 -2
- package/src/panels/ai-panel.ts +23 -20
- package/src/panels/block-action-bar.ts +57 -46
- package/src/panels/bottom-dock.ts +5 -3
- package/src/panels/canvas-dnd-bridge.ts +36 -26
- 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 +63 -26
- package/src/panels/data-grid.ts +18 -11
- package/src/panels/dnd.ts +115 -138
- package/src/panels/editors.ts +52 -21
- package/src/panels/elements-panel.ts +19 -5
- package/src/panels/empty-state.ts +2 -2
- package/src/panels/events-panel.ts +84 -69
- package/src/panels/formula-workspace.ts +78 -54
- package/src/panels/frontmatter-fields.ts +33 -28
- package/src/panels/git-diff-open.ts +10 -6
- package/src/panels/head-panel.ts +488 -202
- package/src/panels/i18n-panel.ts +20 -12
- package/src/panels/imports-panel.ts +25 -47
- package/src/panels/jump-bar.ts +75 -31
- package/src/panels/layers-panel.ts +130 -101
- package/src/panels/left-panel.ts +25 -11
- package/src/panels/navigator-panels.ts +23 -11
- package/src/panels/pane-context.ts +140 -49
- package/src/panels/pane-grid.ts +55 -26
- package/src/panels/panel-registry.ts +36 -46
- package/src/panels/properties-panel.ts +182 -124
- package/src/panels/quick-search.ts +53 -31
- package/src/panels/right-panel.ts +201 -45
- package/src/panels/seo-modal.ts +54 -125
- package/src/panels/settings-menu.ts +63 -61
- package/src/panels/settings-pane.ts +268 -162
- package/src/panels/signals-panel.ts +156 -135
- package/src/panels/site-model.ts +367 -0
- package/src/panels/site-panel.ts +638 -0
- package/src/panels/statement-editor.ts +230 -140
- package/src/panels/style-panel.ts +253 -206
- package/src/panels/style-utils.ts +114 -51
- package/src/panels/stylebook-doc.ts +195 -60
- package/src/panels/stylebook-layers-panel.ts +48 -89
- package/src/panels/stylebook-panel.ts +60 -27
- package/src/panels/styles-panel.ts +327 -0
- package/src/panels/tab-drop.ts +27 -11
- package/src/panels/tab-strip.ts +143 -49
- package/src/platform-errors.ts +57 -43
- package/src/platform.ts +59 -31
- package/src/platforms/cloud.ts +373 -176
- package/src/platforms/default-platform.ts +14 -8
- package/src/platforms/devserver.ts +180 -142
- package/src/platforms/read-batcher.ts +16 -8
- package/src/project-list.ts +2 -1
- package/src/publish/deploy-checklist.ts +20 -9
- package/src/publish/pages-service.ts +66 -27
- package/src/publish/publish-changes.ts +491 -0
- package/src/publish/publish-commands.ts +88 -22
- package/src/publish/publish-ids.ts +49 -0
- package/src/publish/publish-panel.ts +10 -6
- 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/recent-projects.ts +15 -8
- package/src/resize-edges.ts +26 -36
- package/src/services/a11y-report.ts +26 -19
- package/src/services/agent-seed.ts +23 -11
- package/src/services/ai-ask.ts +9 -12
- package/src/services/ai-command-tools.ts +68 -62
- package/src/services/ai-import-tools.ts +80 -67
- package/src/services/ai-models.ts +17 -13
- package/src/services/ai-project-tools.ts +68 -32
- package/src/services/ai-session-store.ts +19 -10
- package/src/services/ai-system-prompt.ts +46 -20
- package/src/services/ai-tools.ts +71 -27
- package/src/services/ai-write-report.ts +20 -12
- package/src/services/ai-writes.ts +4 -4
- package/src/services/automation.ts +74 -51
- package/src/services/cem-export.ts +149 -58
- package/src/services/cf-settings.ts +4 -4
- package/src/services/clock.ts +6 -1
- package/src/services/code-services.ts +37 -31
- package/src/services/connection.ts +2 -2
- package/src/services/context-manager.ts +14 -10
- package/src/services/context-resolver.ts +20 -8
- package/src/services/data-service.ts +19 -15
- package/src/services/directory-picker.ts +20 -14
- package/src/services/document-assistant.ts +39 -19
- package/src/services/gated-registry.ts +10 -6
- package/src/services/harness/chat-reducer.ts +23 -1
- package/src/services/import-client.ts +91 -38
- package/src/services/import-seed.ts +8 -2
- package/src/services/jx-validate.ts +28 -31
- package/src/services/live-preview.ts +0 -0
- package/src/services/live-surfaces.ts +6 -3
- package/src/services/model-uri.ts +10 -2
- package/src/services/module-preloads.ts +12 -8
- package/src/services/monaco-buffer.ts +43 -24
- package/src/services/monaco-lazy.ts +7 -8
- package/src/services/monaco-setup.ts +23 -16
- package/src/services/notify.ts +44 -17
- package/src/services/popover-report.ts +25 -10
- package/src/services/preview-eval.ts +20 -8
- package/src/services/profile.ts +13 -6
- package/src/services/project-path.ts +13 -10
- package/src/services/references.ts +0 -0
- package/src/services/render-critic.ts +29 -9
- package/src/services/settings/definitions.ts +25 -14
- package/src/services/settings/kernel.ts +13 -4
- package/src/services/settings/write-queue.ts +9 -9
- package/src/services/token-lint.ts +12 -10
- package/src/services/tool-executor.ts +17 -5
- package/src/services/tool-outcomes.ts +44 -24
- package/src/services/trusted-types.ts +24 -7
- package/src/settings/contexts-section.ts +11 -8
- package/src/settings/contributed-section.ts +128 -70
- package/src/settings/css-vars-editor.ts +119 -32
- package/src/settings/defs-editor.ts +38 -35
- package/src/settings/developer-panels.ts +43 -0
- package/src/settings/extension-rows.ts +16 -8
- package/src/settings/extension-sections.ts +42 -14
- package/src/settings/extensions-section.ts +4 -1
- package/src/settings/general-settings.ts +101 -28
- package/src/settings/locales-section.ts +20 -12
- package/src/settings/preferences-dialog.ts +17 -7
- package/src/settings/preferences-keymap.ts +7 -5
- package/src/settings/preferences-sections.ts +11 -5
- package/src/settings/project-sections.ts +28 -11
- package/src/settings/schema-field-ui.ts +12 -1
- package/src/settings/section-registry.ts +116 -11
- package/src/settings/settings-dialog.ts +192 -0
- package/src/settings/settings-document.ts +186 -166
- package/src/shell/tree.ts +6 -5
- package/src/shell.ts +536 -477
- package/src/site-context.ts +101 -32
- package/src/state.ts +68 -57
- package/src/store.ts +54 -34
- package/src/studio.ts +219 -116
- package/src/style/live-preview.ts +1 -1
- package/src/style/project-styles.ts +40 -7
- 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/token-ref.ts +5 -4
- package/src/style/variables-focus.ts +61 -0
- package/src/style/variables-view.ts +235 -0
- package/src/surfaces/about.ts +18 -19
- package/src/surfaces/add-new.json +1482 -0
- package/src/surfaces/add-new.ts +325 -0
- package/src/surfaces/add-repo.ts +17 -19
- package/src/surfaces/ai-chat.ts +33 -38
- package/src/surfaces/ai-credentials-form.ts +6 -16
- package/src/surfaces/ai-managed-connect.ts +3 -4
- package/src/surfaces/ai-model-picker.ts +3 -5
- package/src/surfaces/block-action-bar.ts +22 -11
- package/src/surfaces/boot-failure.json +4 -3
- package/src/surfaces/boot-failure.ts +4 -5
- package/src/surfaces/bottom-dock.json +1 -1
- package/src/surfaces/bottom-dock.ts +9 -18
- package/src/surfaces/canvas-stage.json +30 -19
- package/src/surfaces/canvas-stage.ts +17 -16
- package/src/surfaces/cf-account-picker.ts +17 -18
- 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 +145 -105
- package/src/surfaces/convert-repeater.ts +17 -19
- package/src/surfaces/data-actions.ts +9 -7
- package/src/surfaces/dialog.ts +26 -28
- package/src/surfaces/diff-toolbar.ts +9 -7
- package/src/surfaces/empty-state.json +1 -1
- package/src/surfaces/empty-state.ts +7 -10
- package/src/surfaces/entry-editor.json +136 -0
- package/src/surfaces/entry-editor.ts +35 -11
- package/src/surfaces/entry-inspector.json +371 -0
- package/src/surfaces/entry-inspector.ts +143 -0
- package/src/surfaces/expression-editor.ts +11 -25
- package/src/surfaces/files-panel.ts +27 -14
- package/src/surfaces/formula-palette.ts +4 -5
- package/src/surfaces/github-auth.ts +16 -20
- package/src/surfaces/github-publish.ts +17 -22
- package/src/surfaces/grid-cell.ts +30 -31
- package/src/surfaces/grid-open.ts +10 -14
- package/src/surfaces/grid-panel.ts +13 -9
- package/src/surfaces/grid-replace.ts +13 -13
- package/src/surfaces/grid-views.ts +15 -18
- package/src/surfaces/inspector-dock.json +162 -14
- package/src/surfaces/inspector-dock.ts +59 -31
- package/src/surfaces/jump-bar.ts +5 -6
- package/src/surfaces/jxsuite-update.ts +16 -22
- package/src/surfaces/library-pane.json +670 -437
- package/src/surfaces/library-pane.ts +111 -77
- package/src/surfaces/logic-panel.ts +17 -30
- package/src/surfaces/logic-workspace.ts +13 -15
- package/src/surfaces/media-browser.json +62 -6
- package/src/surfaces/media-browser.ts +26 -11
- package/src/surfaces/media-field.json +1 -1
- package/src/surfaces/media-field.ts +4 -5
- package/src/surfaces/media-library.json +1586 -0
- package/src/surfaces/media-library.ts +282 -0
- package/src/surfaces/media-pane.ts +8 -7
- package/src/surfaces/media-pick-dialog.json +71 -0
- package/src/surfaces/media-pick-dialog.ts +132 -0
- package/src/surfaces/menu.ts +47 -23
- package/src/surfaces/navigator-dock.ts +11 -12
- package/src/surfaces/new-project.ts +27 -26
- package/src/surfaces/pane-context.json +144 -77
- package/src/surfaces/pane-context.ts +44 -25
- package/src/surfaces/pane-grid.ts +15 -10
- package/src/surfaces/panel-activity.ts +5 -6
- package/src/surfaces/panel-data.ts +3 -4
- package/src/surfaces/panel-deploy-checklist.json +12 -6
- package/src/surfaces/panel-deploy-checklist.ts +8 -7
- package/src/surfaces/panel-elements.ts +5 -7
- package/src/surfaces/panel-i18n.ts +5 -7
- package/src/surfaces/panel-imports.ts +6 -13
- package/src/surfaces/panel-outline.ts +25 -19
- package/src/surfaces/panel-page.json +72 -2
- package/src/surfaces/panel-page.ts +49 -25
- package/src/surfaces/panel-problems.ts +5 -7
- package/src/surfaces/panel-signals.json +1 -1
- package/src/surfaces/panel-signals.ts +25 -39
- package/src/surfaces/panel-stylebook-layers.json +71 -204
- package/src/surfaces/panel-stylebook-layers.ts +5 -29
- package/src/surfaces/preferences.json +120 -48
- package/src/surfaces/preferences.ts +29 -11
- package/src/surfaces/progress-modal.ts +15 -9
- package/src/surfaces/properties-panel.json +1 -1
- package/src/surfaces/properties-panel.ts +20 -42
- 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/publish.ts +18 -18
- package/src/surfaces/push-plan.ts +7 -8
- package/src/surfaces/rail.json +1 -159
- package/src/surfaces/rail.ts +22 -79
- package/src/surfaces/reference-field.ts +11 -15
- package/src/surfaces/schema-builder.ts +16 -22
- package/src/surfaces/schema-form.json +10 -2
- package/src/surfaces/schema-form.ts +17 -25
- package/src/surfaces/secret-field.ts +9 -6
- package/src/surfaces/seo.json +1 -1
- package/src/surfaces/seo.ts +21 -15
- package/src/surfaces/settings-contexts.ts +9 -7
- package/src/surfaces/settings-contributed.json +5 -5
- package/src/surfaces/settings-contributed.ts +32 -12
- package/src/surfaces/settings-css-vars.json +44 -36
- package/src/surfaces/settings-css-vars.ts +82 -16
- package/src/surfaces/settings-defs.json +2 -2
- package/src/surfaces/settings-defs.ts +17 -21
- package/src/surfaces/settings-deploy.json +2 -15
- package/src/surfaces/settings-deploy.ts +9 -16
- package/src/surfaces/settings-dialog.json +51 -0
- package/src/surfaces/settings-dialog.ts +169 -0
- package/src/surfaces/settings-extensions.ts +5 -6
- package/src/surfaces/settings-head.ts +33 -39
- package/src/surfaces/settings-locales.ts +8 -20
- package/src/surfaces/settings-overview.json +3 -3
- package/src/surfaces/settings-overview.ts +14 -8
- package/src/surfaces/settings-packages.ts +8 -7
- package/src/surfaces/settings-pane.json +269 -46
- package/src/surfaces/settings-pane.ts +88 -36
- package/src/surfaces/settings-rawjson.ts +5 -6
- package/src/surfaces/shell.json +2 -1
- package/src/surfaces/shell.ts +1 -2
- 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 +42 -9
- package/src/surfaces/statements.ts +13 -18
- package/src/surfaces/statusbar.ts +56 -29
- package/src/surfaces/style-panel.ts +18 -31
- package/src/surfaces/stylebook-chrome.ts +3 -5
- 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/tab-strip.ts +14 -13
- package/src/surfaces/target-line.ts +6 -7
- package/src/surfaces/welcome.ts +6 -8
- 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/patch-ops.ts +4 -3
- package/src/tabs/project-config.ts +32 -21
- package/src/tabs/selection.ts +36 -8
- package/src/tabs/tab.ts +99 -48
- package/src/tabs/transact.ts +98 -53
- package/src/types.ts +53 -43
- package/src/ui/ai-credentials-form.ts +10 -13
- package/src/ui/ai-model-picker.ts +3 -3
- package/src/ui/cf-account-picker.ts +7 -9
- package/src/ui/color-selector.ts +9 -5
- package/src/ui/dynamic-slot.ts +7 -8
- package/src/ui/expression-editor.ts +112 -105
- package/src/ui/form-controls.ts +104 -56
- package/src/ui/formula-catalog.ts +239 -230
- package/src/ui/formula-chips.ts +33 -18
- package/src/ui/layers.ts +57 -31
- package/src/ui/media-picker.ts +300 -47
- package/src/ui/popover-surface.ts +20 -12
- package/src/ui/progress-modal.ts +13 -8
- package/src/ui/regions.ts +14 -12
- package/src/ui/schema-form.ts +372 -97
- package/src/ui/surface.ts +71 -8
- package/src/ui/timing.ts +9 -0
- package/src/ui/value-source.ts +44 -31
- package/src/ui/virtual-window.ts +29 -3
- package/src/utils/base64.ts +6 -4
- package/src/utils/edit-display.ts +366 -111
- package/src/utils/element-selectors.ts +3 -2
- package/src/utils/google-fonts.ts +15 -14
- package/src/utils/inherited-style.ts +18 -20
- package/src/utils/link-target.ts +1 -1
- package/src/utils/local-day.ts +18 -0
- package/src/utils/preview-format.ts +25 -3
- package/src/utils/strip-events.ts +49 -22
- package/src/utils/studio-utils.ts +29 -14
- package/src/view.ts +2 -3
- package/src/workspace/pane-derive.ts +14 -16
- package/src/workspace/session.ts +81 -50
- 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 +165 -47
- package/styles/shell-frame.css +30 -7
- package/styles/shell-frame.json +15 -3
- package/dist/chunks/2020-va2wwra4.js +0 -4
- package/dist/chunks/adapter-f93pafd7.js +0 -4
- package/dist/chunks/cf-account-picker-af1h381v.js +0 -4
- package/dist/chunks/cf-settings-125tdm0w.js +0 -4
- package/dist/chunks/color-area-jqhna8zy.js +0 -4
- package/dist/chunks/color-field-embq5ctg.js +0 -4
- package/dist/chunks/color-fpezvnkt.js +0 -4
- package/dist/chunks/color-slider-1qmw7wqy.js +0 -4
- package/dist/chunks/combobox-773hdzyj.js +0 -4
- package/dist/chunks/components-ax2f1fnn.js +0 -4
- package/dist/chunks/content-source-108aqtk1.js +0 -4
- package/dist/chunks/convert-to-repeater-ry5rmppr.js +0 -4
- package/dist/chunks/dialog-mtm9fq5t.js +0 -4
- package/dist/chunks/editor-pfgdmkb0.js +0 -4
- package/dist/chunks/entry-commands-t0k1q0kx.js +0 -4
- package/dist/chunks/extension-sections-6mwh2hf8.js +0 -4
- package/dist/chunks/file-ops-meej5mqf.js +0 -4
- package/dist/chunks/files-44vp8a2s.js +0 -4
- package/dist/chunks/format-host-7q1petb9.js +0 -4
- package/dist/chunks/fs-events-h2mwnxaz.js +0 -4
- package/dist/chunks/git-panel-zngbymvd.js +0 -4
- package/dist/chunks/grid-view-sx9vynsp.js +0 -51
- package/dist/chunks/icons-p44xhjf0.js +0 -4
- package/dist/chunks/iframe-entry-f7mqjwpm.js +0 -5
- package/dist/chunks/iframe-entry-haw7jkvz.js +0 -5
- package/dist/chunks/iframe-entry-z6qrytv3.js +0 -5
- package/dist/chunks/iframe-host-qk3ycq87.js +0 -4
- package/dist/chunks/index-wkyfjeqz.js +0 -4
- package/dist/chunks/jsonMode-s8kt9dsj.js +0 -13
- package/dist/chunks/jx-validate-psgd7vsx.js +0 -4
- package/dist/chunks/layers-panel-1kq2jyfk.js +0 -4
- package/dist/chunks/layers-xd92fg8d.js +0 -4
- package/dist/chunks/listbox-s8fkmnq8.js +0 -4
- package/dist/chunks/lit-html-ac4cwwr4.js +0 -4
- package/dist/chunks/media-picker-0svzkdyb.js +0 -4
- package/dist/chunks/menu-37d07z9m.js +0 -4
- package/dist/chunks/menu-5c55ea3d.js +0 -4
- package/dist/chunks/monaco-binding-z6r70pdt.js +0 -4
- package/dist/chunks/monaco-buffer-fz6gq5y7.js +0 -4
- package/dist/chunks/monaco-setup-q4axkgj7.js +0 -4
- package/dist/chunks/notify-0xgtn8q1.js +0 -4
- package/dist/chunks/number-field-gw7sq8rn.js +0 -4
- package/dist/chunks/parse-897fvqah.js +0 -4
- package/dist/chunks/platform-v1qctbe6.js +0 -4
- package/dist/chunks/popover-8htra4er.js +0 -4
- package/dist/chunks/publish-panel-ym1fmgq5.js +0 -4
- package/dist/chunks/quick-search-a54e6t5n.js +0 -4
- package/dist/chunks/references-gmqp82fs.js +0 -4
- package/dist/chunks/right-panel-v7t9awbk.js +0 -4
- package/dist/chunks/section-registry-vhyf3zsr.js +0 -4
- package/dist/chunks/select-n3v7gwas.js +0 -4
- package/dist/chunks/split-pff8f3ze.js +0 -4
- package/dist/chunks/studio-0bhx5hz6.js +0 -5
- package/dist/chunks/studio-0k1ddnyy.js +0 -6
- package/dist/chunks/studio-1b04pd0j.js +0 -64
- package/dist/chunks/studio-4dwbj6gb.js +0 -5
- package/dist/chunks/studio-4tanh828.js +0 -5
- package/dist/chunks/studio-55h4mstj.js +0 -4
- package/dist/chunks/studio-5tnvjkz4.js +0 -5
- package/dist/chunks/studio-60dqgb0c.js +0 -5
- package/dist/chunks/studio-61dp09qg.js +0 -9
- package/dist/chunks/studio-63epcrj2.js +0 -5
- package/dist/chunks/studio-74k29dy9.js +0 -5
- package/dist/chunks/studio-7vg6jcd3.js +0 -5
- package/dist/chunks/studio-7zx31knw.js +0 -9
- package/dist/chunks/studio-8bxk97km.js +0 -5
- package/dist/chunks/studio-933e30n4.js +0 -5
- package/dist/chunks/studio-98wnwhbg.js +0 -5
- package/dist/chunks/studio-9mccjwjh.js +0 -14
- package/dist/chunks/studio-a2ke1e4t.js +0 -5
- package/dist/chunks/studio-e3a2a6v3.js +0 -4
- package/dist/chunks/studio-e81q1vb9.js +0 -5
- package/dist/chunks/studio-epgrmqqm.js +0 -5
- package/dist/chunks/studio-ery42sqr.js +0 -4
- package/dist/chunks/studio-g1shz58g.js +0 -5
- package/dist/chunks/studio-gf0fz03c.js +0 -5
- package/dist/chunks/studio-gjtpe62q.js +0 -6
- package/dist/chunks/studio-gkskhg7m.js +0 -5
- package/dist/chunks/studio-gx4dnjzd.js +0 -5
- package/dist/chunks/studio-j03zga3y.js +0 -9
- package/dist/chunks/studio-jhpxeckz.js +0 -5
- package/dist/chunks/studio-k01r7ykp.js +0 -5
- package/dist/chunks/studio-kk7h30ne.js +0 -7
- package/dist/chunks/studio-kt1zqney.js +0 -5
- package/dist/chunks/studio-m3cwhvye.js +0 -5
- package/dist/chunks/studio-mcayt6hz.js +0 -5
- package/dist/chunks/studio-myjcghv3.js +0 -5
- package/dist/chunks/studio-n8bxwc3y.js +0 -4
- package/dist/chunks/studio-ngm8gvpb.js +0 -5
- package/dist/chunks/studio-nj5a01jy.js +0 -928
- package/dist/chunks/studio-pcgz8heb.js +0 -5
- package/dist/chunks/studio-qcsq0t15.js +0 -5
- package/dist/chunks/studio-qkstvve9.js +0 -5
- package/dist/chunks/studio-qv1pwd3c.js +0 -5
- package/dist/chunks/studio-rc6dvxjb.js +0 -7
- package/dist/chunks/studio-s8dmmz66.js +0 -5
- package/dist/chunks/studio-sp5xzbj4.js +0 -6
- package/dist/chunks/studio-szsjbj0g.js +0 -5
- package/dist/chunks/studio-t1xzawhr.js +0 -16
- package/dist/chunks/studio-tdcprbqb.js +0 -5
- package/dist/chunks/studio-vrmcjf9g.js +0 -7
- package/dist/chunks/studio-vyc0b4he.js +0 -10
- package/dist/chunks/studio-w0cgf6jg.js +0 -5
- package/dist/chunks/studio-w3hskzqk.js +0 -5
- package/dist/chunks/studio-xgrgcdyh.js +0 -9
- package/dist/chunks/studio-xz2yxfcb.js +0 -5
- package/dist/chunks/studio-y6n42tgs.js +0 -5
- package/dist/chunks/studio-yb560vxr.js +0 -5
- package/dist/chunks/studio-yn9f8vtx.js +0 -5
- package/dist/chunks/studio-yw05w8f0.js +0 -7
- package/dist/chunks/studio-z16sgavc.js +0 -5
- package/dist/chunks/studio-zey7zsdw.js +0 -12
- package/dist/chunks/studio-zyqn40w4.js +0 -5
- package/dist/chunks/swatch-group-8qh9a3bm.js +0 -4
- package/dist/chunks/tabs-jwthg40w.js +0 -4
- package/dist/chunks/textfield-spy3hc77.js +0 -4
- package/dist/chunks/toast-4d35zd64.js +0 -4
- package/dist/chunks/toast-host-8sjmfed3.js +0 -4
- package/dist/chunks/tooltip-fd6g9xy3.js +0 -4
- package/dist/chunks/tree-h19v1jfz.js +0 -4
- package/dist/chunks/tsMode-2frah6h1.js +0 -14
- package/dist/chunks/workspace-zt81g1ms.js +0 -4
- package/dist/chunks/ws-client-n2bh4hkf.js +0 -4
- package/src/panels/frontmatter-panel.ts +0 -701
- package/src/panels/git-panel.ts +0 -1120
- package/src/surfaces/doc-header.json +0 -776
- package/src/surfaces/doc-header.ts +0 -231
- package/src/surfaces/git-panel.json +0 -1880
- package/src/surfaces/git-panel.ts +0 -272
|
@@ -105,8 +105,8 @@
|
|
|
105
105
|
},
|
|
106
106
|
"& [part=\"step-icon\"]": {
|
|
107
107
|
"flex": "none",
|
|
108
|
-
"
|
|
109
|
-
"
|
|
108
|
+
"--jx-icon-size": "1em",
|
|
109
|
+
"marginBlockEnd": "-0.15em"
|
|
110
110
|
},
|
|
111
111
|
"& [part=\"action\"]": {
|
|
112
112
|
"marginTop": "var(--jx-space-1)"
|
|
@@ -205,12 +205,18 @@
|
|
|
205
205
|
},
|
|
206
206
|
"children": [
|
|
207
207
|
{
|
|
208
|
-
"tagName": "
|
|
208
|
+
"tagName": "jx-icon",
|
|
209
209
|
"attributes": {
|
|
210
|
-
"part": "step-icon"
|
|
211
|
-
"aria-hidden": "true"
|
|
210
|
+
"part": "step-icon"
|
|
212
211
|
},
|
|
213
|
-
"
|
|
212
|
+
"$props": {
|
|
213
|
+
"name": {
|
|
214
|
+
"$ref": "$map/item/icon"
|
|
215
|
+
},
|
|
216
|
+
"label": {
|
|
217
|
+
"$ref": "$map/item/iconLabel"
|
|
218
|
+
}
|
|
219
|
+
}
|
|
214
220
|
},
|
|
215
221
|
{
|
|
216
222
|
"tagName": "span",
|
|
@@ -31,10 +31,9 @@ import { effect, effectScope, reactive } from "../reactivity";
|
|
|
31
31
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
32
32
|
import checklistDoc from "./panel-deploy-checklist.json";
|
|
33
33
|
import type { EffectScope } from "@vue/reactivity";
|
|
34
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
35
34
|
import type { SurfaceHandle } from "../ui/surface";
|
|
36
35
|
|
|
37
|
-
registerSurface("panel-deploy-checklist", checklistDoc
|
|
36
|
+
registerSurface("panel-deploy-checklist", checklistDoc);
|
|
38
37
|
|
|
39
38
|
/** One prerequisite, as the document draws it. Every field is a value: no records, no closures. */
|
|
40
39
|
export interface DeployStepRowView {
|
|
@@ -42,8 +41,10 @@ export interface DeployStepRowView {
|
|
|
42
41
|
id: string;
|
|
43
42
|
/** `done` | `todo` | `unknown`, as `data-state`. `unknown` is not a third kind of "no". */
|
|
44
43
|
state: string;
|
|
45
|
-
/** The
|
|
44
|
+
/** The kit icon the checklist chose for that state (`check`, `warning-circle`, `question`). */
|
|
46
45
|
icon: string;
|
|
46
|
+
/** The state in words, the icon's accessible name: "Done", "To do", "Not checked yet". */
|
|
47
|
+
iconLabel: string;
|
|
47
48
|
/** The label, and — unless the link is forged — the sentence that says what is missing. */
|
|
48
49
|
text: string;
|
|
49
50
|
}
|
|
@@ -81,7 +82,7 @@ export interface DeployChecklistDeps {
|
|
|
81
82
|
}
|
|
82
83
|
|
|
83
84
|
/** The scope the document reads: the projection, flattened, beside the one callback. */
|
|
84
|
-
interface DeployChecklistScope extends
|
|
85
|
+
interface DeployChecklistScope extends DeployChecklistView {
|
|
85
86
|
runAction: () => void;
|
|
86
87
|
}
|
|
87
88
|
|
|
@@ -109,7 +110,7 @@ function standingIn(container: HTMLElement): boolean {
|
|
|
109
110
|
return false;
|
|
110
111
|
}
|
|
111
112
|
// Still mounting into this very container: a second call must not start a second mount.
|
|
112
|
-
return _handle === null ? _mount !== null :
|
|
113
|
+
return _handle === null ? _mount !== null : _handle.root.parentNode === container;
|
|
113
114
|
}
|
|
114
115
|
|
|
115
116
|
/**
|
|
@@ -127,7 +128,7 @@ export function mountDeployChecklistSurface(
|
|
|
127
128
|
}
|
|
128
129
|
disposeDeployChecklistSurface();
|
|
129
130
|
_container = container;
|
|
130
|
-
const scope = reactive<DeployChecklistScope>({
|
|
131
|
+
const scope: DeployChecklistScope = reactive<DeployChecklistScope>({
|
|
131
132
|
actionDisabled: false,
|
|
132
133
|
actionLabel: "",
|
|
133
134
|
actionTitle: "",
|
|
@@ -138,7 +139,7 @@ export function mountDeployChecklistSurface(
|
|
|
138
139
|
runAction: deps.runAction,
|
|
139
140
|
steps: [],
|
|
140
141
|
summary: "",
|
|
141
|
-
})
|
|
142
|
+
});
|
|
142
143
|
_scope = effectScope();
|
|
143
144
|
_scope.run(() => {
|
|
144
145
|
effect(() => {
|
|
@@ -32,10 +32,9 @@
|
|
|
32
32
|
import { reactive } from "../reactivity";
|
|
33
33
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
34
34
|
import elementsDoc from "./panel-elements.json";
|
|
35
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
36
35
|
import type { SurfaceHandle } from "../ui/surface";
|
|
37
36
|
|
|
38
|
-
registerSurface("panel-elements", elementsDoc
|
|
37
|
+
registerSurface("panel-elements", elementsDoc);
|
|
39
38
|
|
|
40
39
|
/** One insertable HTML element: the tag is its identity, its caption and what a click inserts. */
|
|
41
40
|
export interface ElementCardView {
|
|
@@ -103,7 +102,7 @@ export interface ElementsSurfaceHandle {
|
|
|
103
102
|
}
|
|
104
103
|
|
|
105
104
|
/** The scope the document reads: {@link ElementsValues} plus the actions its controls call. */
|
|
106
|
-
interface ElementsScope extends
|
|
105
|
+
interface ElementsScope extends ElementsValues, ElementsActions {}
|
|
107
106
|
|
|
108
107
|
/** Write a projection into the scope. */
|
|
109
108
|
function project(scope: ElementsScope, values: ElementsValues): void {
|
|
@@ -128,7 +127,7 @@ export function mountElementsSurface(
|
|
|
128
127
|
values: ElementsValues,
|
|
129
128
|
actions: ElementsActions,
|
|
130
129
|
): ElementsSurfaceHandle {
|
|
131
|
-
const scope = reactive<ElementsScope>({
|
|
130
|
+
const scope: ElementsScope = reactive<ElementsScope>({
|
|
132
131
|
categories: [],
|
|
133
132
|
clearFilter: actions.clearFilter,
|
|
134
133
|
components: [],
|
|
@@ -141,7 +140,7 @@ export function mountElementsSurface(
|
|
|
141
140
|
setComponentsOpen: actions.setComponentsOpen,
|
|
142
141
|
setFilter: actions.setFilter,
|
|
143
142
|
setSectionOpen: actions.setSectionOpen,
|
|
144
|
-
})
|
|
143
|
+
});
|
|
145
144
|
project(scope, values);
|
|
146
145
|
|
|
147
146
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -163,8 +162,7 @@ export function mountElementsSurface(
|
|
|
163
162
|
taken away, and answering no would start a second mount racing the first. Once mounted the
|
|
164
163
|
question is whether the root is still in the container — a panel that was switched away from
|
|
165
164
|
had its document cleared out from under it by lit. */
|
|
166
|
-
connected: () =>
|
|
167
|
-
!disposed && (mounted === null || (mounted.root as Node).parentNode === container),
|
|
165
|
+
connected: () => !disposed && (mounted === null || mounted.root.parentNode === container),
|
|
168
166
|
dispose() {
|
|
169
167
|
disposed = true;
|
|
170
168
|
mounted?.dispose();
|
|
@@ -24,10 +24,9 @@
|
|
|
24
24
|
import { reactive } from "../reactivity";
|
|
25
25
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
26
26
|
import i18nDoc from "./panel-i18n.json";
|
|
27
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
28
27
|
import type { SurfaceHandle } from "../ui/surface";
|
|
29
28
|
|
|
30
|
-
registerSurface("panel-i18n", i18nDoc
|
|
29
|
+
registerSurface("panel-i18n", i18nDoc);
|
|
31
30
|
|
|
32
31
|
/** Which of the three bodies the panel is showing. */
|
|
33
32
|
export type I18nMode =
|
|
@@ -105,7 +104,7 @@ export interface I18nSurfaceHandle {
|
|
|
105
104
|
* Each `has*` is the flattening of a presence test: a document switches on a VALUE, so "is there a
|
|
106
105
|
* failure to report" has to arrive as a boolean rather than as a string the markup could measure.
|
|
107
106
|
*/
|
|
108
|
-
interface I18nScope
|
|
107
|
+
interface I18nScope {
|
|
109
108
|
mode: I18nMode;
|
|
110
109
|
settingsDisabled: boolean;
|
|
111
110
|
summary: string;
|
|
@@ -166,7 +165,7 @@ export function mountI18nSurface(
|
|
|
166
165
|
values: I18nValues,
|
|
167
166
|
actions: I18nActions,
|
|
168
167
|
): I18nSurfaceHandle {
|
|
169
|
-
const scope = reactive<I18nScope>({
|
|
168
|
+
const scope: I18nScope = reactive<I18nScope>({
|
|
170
169
|
hasIncomplete: false,
|
|
171
170
|
hasRows: false,
|
|
172
171
|
hasTruncated: false,
|
|
@@ -180,7 +179,7 @@ export function mountI18nSurface(
|
|
|
180
179
|
settingsDisabled: false,
|
|
181
180
|
summary: "",
|
|
182
181
|
truncated: "",
|
|
183
|
-
})
|
|
182
|
+
});
|
|
184
183
|
project(scope, values);
|
|
185
184
|
|
|
186
185
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -201,8 +200,7 @@ export function mountI18nSurface(
|
|
|
201
200
|
/* In flight the answer is yes: nothing has landed yet, so there is nothing that could have been
|
|
202
201
|
taken away. Once mounted the question is simply whether the root is still in the container —
|
|
203
202
|
a panel that was switched away from had its document cleared out from under it by lit. */
|
|
204
|
-
connected: () =>
|
|
205
|
-
!disposed && (mounted === null || (mounted.root as Node).parentNode === container),
|
|
203
|
+
connected: () => !disposed && (mounted === null || mounted.root.parentNode === container),
|
|
206
204
|
dispose() {
|
|
207
205
|
disposed = true;
|
|
208
206
|
mounted?.dispose();
|
|
@@ -33,10 +33,9 @@
|
|
|
33
33
|
import { reactive } from "../reactivity";
|
|
34
34
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
35
35
|
import importsDoc from "./panel-imports.json";
|
|
36
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
37
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
36
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
38
37
|
|
|
39
|
-
registerSurface("panel-imports", importsDoc
|
|
38
|
+
registerSurface("panel-imports", importsDoc);
|
|
40
39
|
|
|
41
40
|
/** One imported module: the name a document refers to it by, and the path it is loaded from. */
|
|
42
41
|
export interface ModuleRow {
|
|
@@ -70,12 +69,6 @@ export interface PackageRow {
|
|
|
70
69
|
components: ComponentRow[];
|
|
71
70
|
}
|
|
72
71
|
|
|
73
|
-
/** One row of the component picker: a project component this document has not imported yet. */
|
|
74
|
-
export interface PickerOption {
|
|
75
|
-
value: string;
|
|
76
|
-
label: string;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
72
|
/** What the panel shows — the flow's projection of the project and the open document. */
|
|
80
73
|
export interface ImportsView {
|
|
81
74
|
/**
|
|
@@ -94,7 +87,7 @@ export interface ImportsView {
|
|
|
94
87
|
/** What the component picker currently shows. `""` is its own empty row, never a component. */
|
|
95
88
|
pickerValue: string;
|
|
96
89
|
/** The components this document could still import. Empty when there are none to offer. */
|
|
97
|
-
pickerOptions:
|
|
90
|
+
pickerOptions: SurfaceOption[];
|
|
98
91
|
/**
|
|
99
92
|
* The sentence drawn where the `$ref` list would be. The flow chooses it: "pick one below" and
|
|
100
93
|
* "this project has none yet" are two different absences, and only the flow knows which it is
|
|
@@ -135,7 +128,7 @@ interface ImportsFlags {
|
|
|
135
128
|
hasOptions: boolean;
|
|
136
129
|
}
|
|
137
130
|
|
|
138
|
-
interface ImportsScope extends
|
|
131
|
+
interface ImportsScope extends ImportsView, ImportsActions, ImportsFlags {}
|
|
139
132
|
|
|
140
133
|
interface Mounted {
|
|
141
134
|
scope: ImportsScope;
|
|
@@ -152,7 +145,7 @@ const mounts = new WeakMap<HTMLElement, Mounted>();
|
|
|
152
145
|
* control lies about what it holds — and the row is what the closed control reads as, which is why
|
|
153
146
|
* it is worded as the invitation rather than as a blank.
|
|
154
147
|
*/
|
|
155
|
-
const PICK_NOTHING:
|
|
148
|
+
const PICK_NOTHING: SurfaceOption = { label: "Add component…", value: "" };
|
|
156
149
|
|
|
157
150
|
/** The view plus the flags the document switches on. */
|
|
158
151
|
function derive(view: ImportsView): ImportsView & ImportsFlags {
|
|
@@ -191,7 +184,7 @@ export function renderImportsSurface(
|
|
|
191
184
|
}
|
|
192
185
|
existing?.handle?.dispose();
|
|
193
186
|
host.textContent = "";
|
|
194
|
-
const scope = reactive({ ...derive(view), ...actions })
|
|
187
|
+
const scope: ImportsScope = reactive<ImportsScope>({ ...derive(view), ...actions });
|
|
195
188
|
const record: Mounted = { handle: null, scope };
|
|
196
189
|
mounts.set(host, record);
|
|
197
190
|
/* No race to arbitrate: a redraw arriving while this is in flight takes the branch above — a
|
|
@@ -40,14 +40,15 @@
|
|
|
40
40
|
* @docs studio/design/layers
|
|
41
41
|
*/
|
|
42
42
|
|
|
43
|
+
import { isString } from "@jxsuite/schema/guards";
|
|
43
44
|
import { reactive } from "../reactivity";
|
|
44
45
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
45
46
|
import outlineDoc from "./panel-outline.json";
|
|
46
|
-
import type {
|
|
47
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
47
48
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
48
49
|
import type { SurfaceHandle } from "../ui/surface";
|
|
49
50
|
|
|
50
|
-
registerSurface("panel-outline", outlineDoc
|
|
51
|
+
registerSurface("panel-outline", outlineDoc);
|
|
51
52
|
|
|
52
53
|
/**
|
|
53
54
|
* One verb on a row, already resolved against THAT ROW'S node.
|
|
@@ -193,10 +194,13 @@ export interface OutlineActions {
|
|
|
193
194
|
* `data-jx-path` is for.
|
|
194
195
|
*/
|
|
195
196
|
contextMenu: (scope: JxScope, event: Event) => void;
|
|
196
|
-
/**
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
197
|
+
/**
|
|
198
|
+
* Run one of the row's verbs, against the row rather than against the selection. `control` is the
|
|
199
|
+
* pressed button's `event.currentTarget`.
|
|
200
|
+
*/
|
|
201
|
+
runRow: (id: string, row: string, control: EventTarget | null) => void;
|
|
202
|
+
/** Open the `⋮` menu under its own button, which arrives as the press's `event.currentTarget`. */
|
|
203
|
+
overflowRow: (key: string, opener: EventTarget | null) => void;
|
|
200
204
|
/** The rename input's three moments. */
|
|
201
205
|
editInput: (value: string) => void;
|
|
202
206
|
editCommit: () => void;
|
|
@@ -221,7 +225,7 @@ export interface OutlineSurfaceHandle {
|
|
|
221
225
|
}
|
|
222
226
|
|
|
223
227
|
/** The scope the document reads: the projection, plus everything its controls can call. */
|
|
224
|
-
interface OutlineScope extends
|
|
228
|
+
interface OutlineScope extends OutlineValues, OutlineActions {}
|
|
225
229
|
|
|
226
230
|
/** Write a projection into the scope. */
|
|
227
231
|
function project(scope: OutlineScope, values: OutlineValues): void {
|
|
@@ -236,8 +240,8 @@ function project(scope: OutlineScope, values: OutlineValues): void {
|
|
|
236
240
|
|
|
237
241
|
/** The `part` a node's definition carries, or "" for a text node or an unmarked element. */
|
|
238
242
|
function partOf(def: JxElement | string): string {
|
|
239
|
-
const part =
|
|
240
|
-
return
|
|
243
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
244
|
+
return isString(part) ? part : "";
|
|
241
245
|
}
|
|
242
246
|
|
|
243
247
|
/**
|
|
@@ -253,7 +257,7 @@ export function mountOutlineSurface(
|
|
|
253
257
|
values: OutlineValues,
|
|
254
258
|
actions: OutlineActions,
|
|
255
259
|
): OutlineSurfaceHandle {
|
|
256
|
-
const scope = reactive<OutlineScope>({
|
|
260
|
+
const scope: OutlineScope = reactive<OutlineScope>({
|
|
257
261
|
contextMenu: actions.contextMenu,
|
|
258
262
|
current: "",
|
|
259
263
|
editCancel: actions.editCancel,
|
|
@@ -278,7 +282,7 @@ export function mountOutlineSurface(
|
|
|
278
282
|
treeReady: actions.treeReady,
|
|
279
283
|
typeahead: actions.typeahead,
|
|
280
284
|
view: "empty",
|
|
281
|
-
})
|
|
285
|
+
});
|
|
282
286
|
project(scope, values);
|
|
283
287
|
|
|
284
288
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -290,12 +294,15 @@ export function mountOutlineSurface(
|
|
|
290
294
|
const ready = mountSurface("panel-outline", scope, container, {
|
|
291
295
|
onNodeCreated: (element, _path, def) => {
|
|
292
296
|
/* A text node carries no `part`, so narrowing and asking are the same question — asked once,
|
|
293
|
-
rather than as a guard clause whose only reachable
|
|
294
|
-
|
|
295
|
-
if (
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
297
|
+
as the condition around the lookup rather than as a guard clause whose only reachable
|
|
298
|
+
answer is the one below. */
|
|
299
|
+
if (element instanceof HTMLElement) {
|
|
300
|
+
const part = partOf(def);
|
|
301
|
+
if (part === "tree") {
|
|
302
|
+
actions.treeReady(element);
|
|
303
|
+
} else if (part === "title-input") {
|
|
304
|
+
actions.editReady(element);
|
|
305
|
+
}
|
|
299
306
|
}
|
|
300
307
|
},
|
|
301
308
|
}).then((surface) => {
|
|
@@ -312,8 +319,7 @@ export function mountOutlineSurface(
|
|
|
312
319
|
mount racing the first. Once mounted, the question is whether the root is still where it was
|
|
313
320
|
put: a Navigator that painted another panel, or the stylebook's own catalogue, cleared this
|
|
314
321
|
document out from under it. */
|
|
315
|
-
connected: () =>
|
|
316
|
-
!disposed && (mounted === null || (mounted.root as Node).parentNode === container),
|
|
322
|
+
connected: () => !disposed && (mounted === null || mounted.root.parentNode === container),
|
|
317
323
|
dispose() {
|
|
318
324
|
disposed = true;
|
|
319
325
|
mounted?.dispose();
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://jxsuite.com/schema/v1",
|
|
3
3
|
"$id": "StudioPanelPage",
|
|
4
|
-
"$description": "The
|
|
4
|
+
"$description": "The Inspector's Page tab (specs/studio.md §6), the former Navigator Page panel: everything the open document says about itself before anybody reads its body — its frontmatter, the layout it is poured into, its title, description, viewport and icon, its OpenGraph card, and the raw `$head` tags no structured control owns. ONE row vocabulary across the first four sections, told apart by `kind`, because a Title, a Layout picker and a schema-driven frontmatter field differ in what they COMMIT rather than in what they look like — and what they commit is `panels/head-panel.ts`'s decision, reached by the row's `key`. Nothing here knows what a `$head` entry is, which of them are managed, what a content collection is or that a page has a layout: the flow hands over sections whose every field is already a string and this draws them. The Custom Tags section is the one different shape — a read-only list plus the form that adds to it — because those rows are markup a reader is being SHOWN rather than a value they are editing.",
|
|
5
5
|
"tagName": "div",
|
|
6
6
|
"attributes": {
|
|
7
7
|
"part": "page"
|
|
8
8
|
},
|
|
9
9
|
"style": {
|
|
10
|
-
"$description": "The eleven `.imports-*` and four `.head-*` rules in `styles/panels.css` plus the row vocabulary the panel used to borrow from `styles/inspector.css` (`.style-row`, `.style-row-label`, `.set-dot`) and `styles/overlays.css` (`.media-picker`, `.media-picker-thumb`). The borrowed ones are TRANSCRIBED rather than shared,
|
|
10
|
+
"$description": "The eleven `.imports-*` and four `.head-*` rules in `styles/panels.css` plus the row vocabulary the panel used to borrow from `styles/inspector.css` (`.style-row`, `.style-row-label`, `.set-dot`) and `styles/overlays.css` (`.media-picker`, `.media-picker-thumb`). The borrowed ones are TRANSCRIBED rather than shared, because a document emits no class, so a class cannot style it, and the lit panels that still draw a `.style-row` go on owning those rules until they convert. Four token repairs travel with them. `--spectrum-font-size-50` resolved only inside `<sp-theme>` and a document is mounted outside it, so every rule that read it would silently have taken its 11px fallback and stopped following the theme; each is `--jx-text-sm` here, and the two bare `10px` literals are `--jx-text-xs`. `.imports-count` read `--text-hint`, a name NO stylesheet in this package defines — an unresolvable custom property makes the whole declaration invalid at computed-value time, so the count has been inheriting its colour rather than taking the one written for it, and it says `--fg-dim`, which is what it was drawing anyway. And `.head-section-body .style-row > sp-textfield` reached INSIDE another component to widen it, which a part cannot do and no longer has to: `[part=\"widget\"]` is the field itself. Two things changed on purpose. THE CLEAR DOT IS A BUTTON — it was a `<span>` with a click handler and no role, so a row's only route to clearing its value could not be reached from the keyboard at all. AND THE ADD FORM IS STATE, not three `ref()` handles read at submit time: a document binding writes only when the scope moves, so the flow states what each field holds and clearing one after a successful add is a real change the runtime carries back.",
|
|
11
11
|
"display": "block",
|
|
12
12
|
"overflowY": "auto",
|
|
13
13
|
"padding": "var(--jx-space-2)",
|
|
@@ -85,6 +85,19 @@
|
|
|
85
85
|
"width": "100%",
|
|
86
86
|
"minWidth": "0"
|
|
87
87
|
},
|
|
88
|
+
"& [part=\"readout\"]": {
|
|
89
|
+
"$description": "A derived value set as text in the field's place, monospaced because a URL is read character by character.",
|
|
90
|
+
"display": "block",
|
|
91
|
+
"padding": "2px 0",
|
|
92
|
+
"overflow": "hidden",
|
|
93
|
+
"textOverflow": "ellipsis",
|
|
94
|
+
"whiteSpace": "nowrap",
|
|
95
|
+
"fontFamily": "var(--font-mono, monospace)",
|
|
96
|
+
"fontSize": "var(--jx-text-sm)"
|
|
97
|
+
},
|
|
98
|
+
"& [part=\"row-action\"]": {
|
|
99
|
+
"alignSelf": "flex-start"
|
|
100
|
+
},
|
|
88
101
|
"& [part=\"note\"]": {
|
|
89
102
|
"$description": "What the row could not find out — the entries of a referenced collection that is empty, or the reason listing it failed. A sentence under the control, in the row's own label size, so it reads as part of the field rather than as an error banner.",
|
|
90
103
|
"margin": "0",
|
|
@@ -501,6 +514,15 @@
|
|
|
501
514
|
]
|
|
502
515
|
}
|
|
503
516
|
},
|
|
517
|
+
"readout": {
|
|
518
|
+
"$description": "A value the document derives rather than stores, such as a page's URL, which is its file's place under `pages/`. Shown, never edited here: an editable URL would be a rename, and a rename is the file tree's.",
|
|
519
|
+
"tagName": "output",
|
|
520
|
+
"attributes": {
|
|
521
|
+
"part": "readout",
|
|
522
|
+
"aria-label": "${$map.item.label}"
|
|
523
|
+
},
|
|
524
|
+
"textContent": "${$map.item.value}"
|
|
525
|
+
},
|
|
504
526
|
"select": {
|
|
505
527
|
"tagName": "jx-select",
|
|
506
528
|
"attributes": {
|
|
@@ -682,6 +704,54 @@
|
|
|
682
704
|
}
|
|
683
705
|
}
|
|
684
706
|
},
|
|
707
|
+
{
|
|
708
|
+
"tagName": "div",
|
|
709
|
+
"attributes": {
|
|
710
|
+
"part": "action-slot",
|
|
711
|
+
"role": "none"
|
|
712
|
+
},
|
|
713
|
+
"style": {
|
|
714
|
+
"display": "contents"
|
|
715
|
+
},
|
|
716
|
+
"$switch": {
|
|
717
|
+
"$ref": "$map/item/hasAction"
|
|
718
|
+
},
|
|
719
|
+
"cases": {
|
|
720
|
+
"true": {
|
|
721
|
+
"$description": "The row's one door elsewhere, named for what it opens: the Layout row's Edit template opens the layout in Design.",
|
|
722
|
+
"tagName": "jx-button",
|
|
723
|
+
"attributes": {
|
|
724
|
+
"part": "row-action"
|
|
725
|
+
},
|
|
726
|
+
"$props": {
|
|
727
|
+
"size": "sm",
|
|
728
|
+
"variant": "secondary"
|
|
729
|
+
},
|
|
730
|
+
"onclick": {
|
|
731
|
+
"$prototype": "Function",
|
|
732
|
+
"body": [
|
|
733
|
+
{
|
|
734
|
+
"operator": "call",
|
|
735
|
+
"target": {
|
|
736
|
+
"$ref": "#/state/runRowAction"
|
|
737
|
+
},
|
|
738
|
+
"value": [
|
|
739
|
+
{
|
|
740
|
+
"$ref": "$map/item/key"
|
|
741
|
+
}
|
|
742
|
+
]
|
|
743
|
+
}
|
|
744
|
+
]
|
|
745
|
+
},
|
|
746
|
+
"children": [
|
|
747
|
+
{
|
|
748
|
+
"tagName": "span",
|
|
749
|
+
"textContent": "${$map.item.action}"
|
|
750
|
+
}
|
|
751
|
+
]
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
},
|
|
685
755
|
{
|
|
686
756
|
"tagName": "div",
|
|
687
757
|
"attributes": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference lib="dom" />
|
|
2
2
|
/**
|
|
3
|
-
* The
|
|
3
|
+
* The Page panel — the Inspector's Page tab (§6) — as a mounted document.
|
|
4
4
|
*
|
|
5
5
|
* `panels/head-panel.ts` is the flow — what a `$head` entry means, which of them a structured
|
|
6
6
|
* control already owns, what the layout cascade resolves to, which realm a title lives in and what
|
|
@@ -26,16 +26,9 @@
|
|
|
26
26
|
import { reactive } from "../reactivity";
|
|
27
27
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
28
28
|
import pagePanelDoc from "./panel-page.json";
|
|
29
|
-
import type {
|
|
30
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
29
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
31
30
|
|
|
32
|
-
registerSurface("panel-page", pagePanelDoc
|
|
33
|
-
|
|
34
|
-
/** One choice in a row's picker, or in the add form's tag picker. */
|
|
35
|
-
export interface PageChoice {
|
|
36
|
-
value: string;
|
|
37
|
-
label: string;
|
|
38
|
-
}
|
|
31
|
+
registerSurface("panel-page", pagePanelDoc);
|
|
39
32
|
|
|
40
33
|
/**
|
|
41
34
|
* One row of one section, as the document reads it.
|
|
@@ -44,20 +37,27 @@ export interface PageChoice {
|
|
|
44
37
|
* `$switch` chooses on one: a row that omitted `options` would leave the picker case reading an
|
|
45
38
|
* absent path.
|
|
46
39
|
*
|
|
47
|
-
* {@link PageRow.key} and {@link PageRow.prop} are two fields
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
40
|
+
* {@link PageRow.key} and {@link PageRow.prop} are two fields: `key` is the identity the repeater
|
|
41
|
+
* and every action use, `prop` is the name a reader, a screenshot region and `ui/regions.ts`'s
|
|
42
|
+
* `field:<prop>` grammar see. A collection whose schema declares a `layout` property would
|
|
43
|
+
* otherwise share an identity with the Layout picker.
|
|
51
44
|
*/
|
|
52
|
-
export interface PageRow
|
|
45
|
+
export interface PageRow {
|
|
53
46
|
/** The row's identity: the repeater's key, and the argument every action is given. */
|
|
54
47
|
key: string;
|
|
55
48
|
/** The name on `data-prop`. */
|
|
56
49
|
prop: string;
|
|
57
50
|
/** The visible label, already carrying the required marker where a schema asks for one. */
|
|
58
51
|
label: string;
|
|
59
|
-
/**
|
|
60
|
-
|
|
52
|
+
/**
|
|
53
|
+
* Which control the row draws. `textarea` is a multiline text field, not a second element;
|
|
54
|
+
* `readout` is no control at all, a value the document derives (a page's URL) shown as text.
|
|
55
|
+
*/
|
|
56
|
+
kind: "text" | "textarea" | "number" | "boolean" | "select" | "media" | "readout";
|
|
57
|
+
/** The row's one button, named for what it opens. Empty draws none. */
|
|
58
|
+
action: string;
|
|
59
|
+
/** Whether {@link PageRow.action} has anything in it; `$switch` is the document's conditional. */
|
|
60
|
+
hasAction: boolean;
|
|
61
61
|
/**
|
|
62
62
|
* Whether the value is set on this document — studio-ui-guidelines.md §4.2's dot, and the row's
|
|
63
63
|
* only clear affordance.
|
|
@@ -72,7 +72,7 @@ export interface PageRow extends Record<string, unknown> {
|
|
|
72
72
|
/** A text row's placeholder. Empty draws none. */
|
|
73
73
|
placeholder: string;
|
|
74
74
|
/** A picker's rows, in the order they are offered. Empty on every other kind. */
|
|
75
|
-
options:
|
|
75
|
+
options: SurfaceOption[];
|
|
76
76
|
/** A sentence under the control — an empty collection, or a listing that failed. */
|
|
77
77
|
note: string;
|
|
78
78
|
/** Whether {@link PageRow.note} has anything in it; `$switch` is the document's conditional. */
|
|
@@ -84,7 +84,7 @@ export interface PageRow extends Record<string, unknown> {
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
/** One band of the panel: a heading, and the rows under it. */
|
|
87
|
-
export interface PageSection
|
|
87
|
+
export interface PageSection {
|
|
88
88
|
/** The repeater's key, and the `data-section` a test or a shot addresses the band by. */
|
|
89
89
|
key: string;
|
|
90
90
|
/** The heading, already carrying the collection's name where there is one. */
|
|
@@ -95,7 +95,7 @@ export interface PageSection extends Record<string, unknown> {
|
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
/** One `$head` entry no structured control owns, as the list draws it. */
|
|
98
|
-
export interface PageTagRow
|
|
98
|
+
export interface PageTagRow {
|
|
99
99
|
/** Unique within one projection — the repeater's key, and what Remove hands back. */
|
|
100
100
|
key: string;
|
|
101
101
|
/** The entry as markup, e.g. `<meta name="author">`. */
|
|
@@ -120,7 +120,7 @@ export interface PagePanelView {
|
|
|
120
120
|
addAttr: string;
|
|
121
121
|
addValue: string;
|
|
122
122
|
/** The element names the add form offers. */
|
|
123
|
-
tagOptions:
|
|
123
|
+
tagOptions: SurfaceOption[];
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
/**
|
|
@@ -142,10 +142,12 @@ export interface PagePanelActions {
|
|
|
142
142
|
setChoice: (key: string, value: string) => void;
|
|
143
143
|
/** Open the OS file picker for a media row and assign what comes back. */
|
|
144
144
|
upload: (key: string) => void;
|
|
145
|
-
/** Open the media browser under the button that was pressed. */
|
|
146
|
-
browse: (key: string, anchor:
|
|
145
|
+
/** Open the media browser under the button that was pressed — the press's `event.currentTarget`. */
|
|
146
|
+
browse: (key: string, anchor: EventTarget | null) => void;
|
|
147
147
|
/** Run the `document.openSeo` command — the door to Search appearance. */
|
|
148
148
|
openSeo: () => void;
|
|
149
|
+
/** Press the row's own button ({@link PageRow.action}). */
|
|
150
|
+
runRowAction: (key: string) => void;
|
|
149
151
|
/** Take one custom `$head` entry away. */
|
|
150
152
|
removeEntry: (key: string) => void;
|
|
151
153
|
/** State what the add form's tag picker now holds, before anything is decided about it. */
|
|
@@ -159,7 +161,7 @@ export interface PagePanelActions {
|
|
|
159
161
|
}
|
|
160
162
|
|
|
161
163
|
/** The scope the document reads: the projection, plus everything a control can ask for. */
|
|
162
|
-
interface PagePanelScope extends
|
|
164
|
+
interface PagePanelScope extends PagePanelView, PagePanelActions {}
|
|
163
165
|
|
|
164
166
|
/** Write a projection into the scope. Assignment by assignment, so an unchanged field is inert. */
|
|
165
167
|
function project(scope: PagePanelScope, view: PagePanelView): void {
|
|
@@ -223,7 +225,7 @@ export function renderPagePanelSurface(
|
|
|
223
225
|
}
|
|
224
226
|
existing?.handle?.dispose();
|
|
225
227
|
host.textContent = "";
|
|
226
|
-
const scope = reactive({ ...emptyView(), ...actions })
|
|
228
|
+
const scope: PagePanelScope = reactive<PagePanelScope>({ ...emptyView(), ...actions });
|
|
227
229
|
project(scope, view);
|
|
228
230
|
const record: Mounted = { handle: null, scope };
|
|
229
231
|
mounts.set(host, record);
|
|
@@ -238,6 +240,28 @@ export function renderPagePanelSurface(
|
|
|
238
240
|
the next `afterRender` sees a disconnected handle and remakes the surface through the branch
|
|
239
241
|
above. */
|
|
240
242
|
void mountSurface("panel-page", scope, host).then((handle) => {
|
|
243
|
+
/* Unmounted while in flight (the Inspector's Page tab lost its document in the same turn): the
|
|
244
|
+
record is no longer the host's, so the surface that just landed is taken straight back out. */
|
|
245
|
+
if (mounts.get(host) !== record) {
|
|
246
|
+
handle.dispose();
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
241
249
|
record.handle = handle;
|
|
242
250
|
});
|
|
243
251
|
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Take the panel out of `host`, if it is there — the Inspector's Page tab with no document open.
|
|
255
|
+
* Idempotent: a host with no mount is left as it is.
|
|
256
|
+
*
|
|
257
|
+
* @param {HTMLElement} host The panel's content area.
|
|
258
|
+
*/
|
|
259
|
+
export function unmountPagePanelSurface(host: HTMLElement): void {
|
|
260
|
+
const existing = mounts.get(host);
|
|
261
|
+
if (!existing) {
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
mounts.delete(host);
|
|
265
|
+
existing.handle?.dispose();
|
|
266
|
+
host.textContent = "";
|
|
267
|
+
}
|