@jxsuite/studio 6.1.1 → 6.1.2
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/dist/chunks/{2020-va2wwra4.js → 2020-f2gkpy8d.js} +3 -3
- package/dist/chunks/{action-group-2mqby73c.js → action-group-4aan7g6g.js} +3 -3
- package/dist/chunks/adapter-4912g339.js +4 -0
- package/dist/chunks/cf-account-picker-wccaenh6.js +4 -0
- package/dist/chunks/cf-settings-br6105tr.js +4 -0
- package/dist/chunks/color-28ksk2qm.js +4 -0
- package/dist/chunks/color-area-0fj8a4ga.js +4 -0
- package/dist/chunks/color-field-xch8kx2g.js +4 -0
- package/dist/chunks/color-slider-jxd8v350.js +4 -0
- package/dist/chunks/combobox-p0efwjke.js +4 -0
- package/dist/chunks/components-db68vsn7.js +4 -0
- package/dist/chunks/content-source-1449qesq.js +4 -0
- package/dist/chunks/convert-to-repeater-5h457egj.js +4 -0
- package/dist/chunks/dialog-c4x05vyx.js +4 -0
- package/dist/chunks/editor-x9jn86a7.js +4 -0
- package/dist/chunks/entry-commands-may24cpt.js +4 -0
- package/dist/chunks/extension-sections-pvr14vxr.js +4 -0
- package/dist/chunks/file-ops-x9v54pcj.js +4 -0
- package/dist/chunks/files-j3knqf0s.js +4 -0
- package/dist/chunks/format-host-tyre2trb.js +4 -0
- package/dist/chunks/fs-events-64ma9htc.js +4 -0
- package/dist/chunks/git-panel-84ps5dex.js +4 -0
- package/dist/chunks/grid-view-d2wq9ezg.js +51 -0
- package/dist/chunks/icons-pnfz478q.js +4 -0
- package/dist/chunks/iframe-entry-fvbk89gm.js +5 -0
- package/dist/chunks/iframe-entry-jdcktez8.js +5 -0
- package/dist/chunks/iframe-entry-x0ygf2yr.js +5 -0
- package/dist/chunks/iframe-entry-zap785cw.js +5 -0
- package/dist/chunks/iframe-host-ck6vejt5.js +4 -0
- package/dist/chunks/index-b8xw3vy9.js +4 -0
- package/dist/chunks/{index-2veqmnhr.js → index-zpjmzqfk.js} +3 -3
- package/dist/chunks/{javascript-8nbvs12s.js → javascript-m54mnwp6.js} +3 -3
- package/dist/chunks/{jsonMode-s8kt9dsj.js → jsonMode-w15cmrcm.js} +8 -8
- package/dist/chunks/jx-validate-at3zn8wa.js +4 -0
- package/dist/chunks/layers-h4xp1pss.js +4 -0
- package/dist/chunks/layers-panel-m5hw1d7g.js +4 -0
- package/dist/chunks/listbox-e74qjyq6.js +4 -0
- package/dist/chunks/lit-html-8t8t3dnr.js +4 -0
- package/dist/chunks/media-picker-2cweexc5.js +4 -0
- package/dist/chunks/menu-n6yzswmy.js +4 -0
- package/dist/chunks/menu-ynw13y0s.js +4 -0
- package/dist/chunks/monaco-binding-7gx83x3r.js +4 -0
- package/dist/chunks/monaco-buffer-qzxn567r.js +4 -0
- package/dist/chunks/monaco-setup-gxf6656g.js +4 -0
- package/dist/chunks/notify-cj5zbrs2.js +4 -0
- package/dist/chunks/number-field-y62xq0ty.js +4 -0
- package/dist/chunks/parse-b7ddhr8m.js +4 -0
- package/dist/chunks/platform-3dfws9js.js +4 -0
- package/dist/chunks/popover-jt2gxmzs.js +4 -0
- package/dist/chunks/publish-panel-1gvxbj21.js +4 -0
- package/dist/chunks/quick-search-0dajrwqg.js +4 -0
- package/dist/chunks/references-49qgt404.js +4 -0
- package/dist/chunks/right-panel-jm1bwe53.js +4 -0
- package/dist/chunks/section-registry-6kwc4fky.js +4 -0
- package/dist/chunks/select-rzds841e.js +4 -0
- package/dist/chunks/split-n2gfpm5m.js +4 -0
- package/dist/chunks/{studio-1q1sh2ax.js → studio-0q988f9w.js} +3 -3
- package/dist/chunks/studio-0rt52vpq.js +5 -0
- package/dist/chunks/studio-18vgbhs5.js +5 -0
- package/dist/chunks/{studio-h46vtzk8.js → studio-1fxkaaea.js} +4 -4
- package/dist/chunks/studio-24mccdrj.js +5 -0
- package/dist/chunks/studio-2eh507zk.js +9 -0
- package/dist/chunks/studio-2hcbccfv.js +5 -0
- package/dist/chunks/studio-2j1cb95x.js +5 -0
- package/dist/chunks/studio-2jbs3rxv.js +5 -0
- package/dist/chunks/{studio-rv11kfwa.js → studio-485046te.js} +7 -7
- package/dist/chunks/studio-4h8k4dw9.js +5 -0
- package/dist/chunks/studio-5f6n18kx.js +5 -0
- package/dist/chunks/studio-5gthpky6.js +5 -0
- package/dist/chunks/studio-5ve6bbep.js +5 -0
- package/dist/chunks/studio-6ep3js6b.js +9 -0
- package/dist/chunks/studio-6wkmf3wz.js +9 -0
- package/dist/chunks/studio-841rf3cg.js +5 -0
- package/dist/chunks/studio-8gmwgheg.js +5 -0
- package/dist/chunks/studio-8qm0ep50.js +5 -0
- package/dist/chunks/{studio-8grwxtqk.js → studio-90pq9km1.js} +4 -4
- package/dist/chunks/studio-924p1tm1.js +6 -0
- package/dist/chunks/{studio-pre0skq6.js → studio-a3g98wjr.js} +4 -4
- package/dist/chunks/studio-a3shpz9y.js +5 -0
- package/dist/chunks/studio-amsbaaar.js +6 -0
- package/dist/chunks/studio-at5spjbc.js +7 -0
- package/dist/chunks/studio-b2xv945e.js +5 -0
- package/dist/chunks/studio-bn5nkafw.js +5 -0
- package/dist/chunks/studio-bw6q5xjf.js +9 -0
- package/dist/chunks/studio-c7q0t9x1.js +5 -0
- package/dist/chunks/studio-camnhc96.js +6 -0
- package/dist/chunks/studio-cffqvnzd.js +5 -0
- package/dist/chunks/studio-d81xfh1g.js +5 -0
- package/dist/chunks/studio-dgz8d0c1.js +5 -0
- package/dist/chunks/studio-efvfrsf8.js +5 -0
- package/dist/chunks/studio-er30bpcx.js +5 -0
- package/dist/chunks/studio-ezscgr64.js +5 -0
- package/dist/chunks/studio-ffrrncvz.js +5 -0
- package/dist/chunks/studio-fpphgn8y.js +10 -0
- package/dist/chunks/studio-j1kvhdjk.js +4 -0
- package/dist/chunks/{studio-vrmcjf9g.js → studio-j430n16g.js} +5 -5
- package/dist/chunks/studio-jjkg84nj.js +5 -0
- package/dist/chunks/studio-m0q32ars.js +4 -0
- package/dist/chunks/studio-m6bdst11.js +5 -0
- package/dist/chunks/studio-nv2cptd4.js +64 -0
- package/dist/chunks/studio-nwfrc98n.js +5 -0
- package/dist/chunks/studio-p1wgvp7r.js +5 -0
- package/dist/chunks/studio-pag2wncm.js +5 -0
- package/dist/chunks/studio-qvanvzfd.js +5 -0
- package/dist/chunks/studio-qwa64kt7.js +5 -0
- package/dist/chunks/studio-rk1zc4x3.js +928 -0
- package/dist/chunks/studio-se2r3ptc.js +5 -0
- package/dist/chunks/studio-sg2a0dh0.js +5 -0
- package/dist/chunks/studio-tjzjhe68.js +5 -0
- package/dist/chunks/{studio-wszjyh0j.js → studio-tq0rtfwj.js} +4 -4
- package/dist/chunks/{studio-kggey1jt.js → studio-v0jzqdjm.js} +4 -4
- package/dist/chunks/studio-v2w7q8r1.js +7 -0
- package/dist/chunks/studio-v5vjq1h0.js +4 -0
- package/dist/chunks/studio-v8aga3vp.js +14 -0
- package/dist/chunks/studio-vfcdrfmv.js +5 -0
- package/dist/chunks/studio-vmfkgdjf.js +5 -0
- package/dist/chunks/studio-wt1816jj.js +5 -0
- package/dist/chunks/studio-wz73q5kq.js +4 -0
- package/dist/chunks/studio-y04qtxvp.js +7 -0
- package/dist/chunks/studio-y21g8zzg.js +5 -0
- package/dist/chunks/{studio-zey7zsdw.js → studio-y64hrt8p.js} +7 -7
- package/dist/chunks/studio-ynn90f58.js +16 -0
- package/dist/chunks/studio-yxz682sx.js +5 -0
- package/dist/chunks/studio-zp7snvkq.js +5 -0
- package/dist/chunks/studio-zq4z6tm6.js +5 -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-c9fn075p.js +4 -0
- package/dist/chunks/toast-host-ke5z4ng7.js +4 -0
- package/dist/chunks/{toolbar-2nnzqhrj.js → toolbar-44cm5cta.js} +3 -3
- package/dist/chunks/tooltip-5v8ngwj2.js +4 -0
- package/dist/chunks/tree-mdq3v5cw.js +4 -0
- package/dist/chunks/{tsMode-2frah6h1.js → tsMode-sf49ee9x.js} +7 -7
- package/dist/chunks/workspace-jtfahpee.js +4 -0
- package/dist/chunks/ws-client-nze0k6mv.js +4 -0
- package/dist/iframe-entry.js +16 -16
- package/dist/manifest.json +63 -63
- package/dist/studio.js +97 -97
- package/package.json +6 -6
- 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/library-layouts.ts +8 -5
- package/src/browse/library-model.ts +18 -6
- package/src/browse/library-pane.ts +37 -21
- package/src/browse/library-preview.ts +14 -9
- package/src/browse/library-source.ts +1 -1
- package/src/canvas/asset-refs.ts +24 -9
- package/src/canvas/asset-resolve.ts +19 -23
- package/src/canvas/canvas-helpers.ts +7 -6
- package/src/canvas/canvas-live-render.ts +44 -53
- package/src/canvas/canvas-patcher.ts +30 -30
- package/src/canvas/canvas-perf.ts +11 -5
- package/src/canvas/canvas-render.ts +62 -41
- package/src/canvas/canvas-surface.ts +5 -3
- package/src/canvas/canvas-utils.ts +90 -49
- 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 +13 -12
- package/src/canvas/iframe-editable-root.ts +29 -16
- package/src/canvas/iframe-entry.ts +80 -63
- package/src/canvas/iframe-eval.ts +73 -49
- package/src/canvas/iframe-host.ts +135 -96
- 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-overlay.ts +1 -1
- package/src/canvas/iframe-patch.ts +18 -15
- package/src/canvas/iframe-position.ts +12 -6
- package/src/canvas/iframe-protocol.ts +12 -16
- package/src/canvas/iframe-render.ts +36 -34
- package/src/canvas/iframe-slash.ts +24 -11
- package/src/canvas/iframe-subtree.ts +6 -2
- 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/serialize-scope.ts +13 -5
- package/src/canvas/stage-scrollbar.ts +2 -1
- package/src/canvas/surface-registry.ts +21 -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/budget.ts +3 -3
- package/src/commands/command-args.ts +103 -71
- package/src/commands/context.ts +22 -20
- package/src/commands/keymap.ts +47 -43
- package/src/commands/levels.ts +3 -3
- package/src/commands/live-context.ts +7 -7
- package/src/commands/reference.ts +2 -1
- package/src/commands/registry.ts +12 -10
- package/src/commands/run-reported.ts +15 -10
- package/src/component-props.ts +46 -30
- package/src/content/collection-match.ts +5 -4
- package/src/content/draft-state.ts +4 -3
- package/src/content/entry-commands.ts +3 -2
- package/src/content/entry-editor.ts +29 -17
- package/src/content/entry-fields.ts +12 -7
- package/src/content/entry-model.ts +21 -12
- 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 +11 -5
- package/src/editor/convert-to-repeater.ts +34 -22
- package/src/editor/editable-tags.ts +17 -2
- package/src/editor/file-drop-action.ts +21 -22
- package/src/editor/inline-edit-apply.ts +35 -17
- package/src/editor/inline-edit.ts +66 -50
- package/src/editor/inline-format.ts +59 -56
- package/src/editor/inline-link.ts +40 -15
- package/src/editor/insert-zone-action.ts +1 -1
- package/src/editor/merge-tags.ts +58 -19
- package/src/editor/repeater-scope.ts +39 -28
- package/src/editor/shortcuts.ts +32 -20
- package/src/editor/slash-menu.ts +1 -6
- package/src/files/asset-versions.ts +4 -4
- package/src/files/components.ts +15 -10
- package/src/files/elements.ts +5 -6
- package/src/files/file-ops.ts +77 -36
- package/src/files/files.ts +90 -95
- package/src/files/media-meta.ts +2 -1
- package/src/files/media-paths.ts +3 -0
- package/src/files/serialize-document.ts +2 -2
- 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 +76 -50
- package/src/github/github-auth-status.ts +27 -3
- package/src/github/github-auth.ts +19 -9
- package/src/github/github-publish.ts +24 -20
- 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 +20 -22
- package/src/grid/grid-layout.ts +21 -5
- package/src/grid/grid-open.ts +3 -6
- package/src/grid/grid-panel.ts +11 -4
- package/src/grid/grid-source.ts +8 -8
- package/src/grid/grid-view.ts +14 -17
- 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 +25 -24
- package/src/grid/sources/csv-file-source.ts +2 -2
- package/src/grid/tabulator-tables.d.ts +55 -34
- package/src/hosting/stage.ts +7 -7
- package/src/i18n/i18n-commands.ts +1 -2
- package/src/media/media-pane.ts +4 -1
- 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 +17 -9
- package/src/panels/ai-chat/attached-context.ts +13 -7
- 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 +46 -35
- package/src/panels/bottom-dock.ts +5 -3
- package/src/panels/canvas-dnd-bridge.ts +31 -24
- package/src/panels/data-explorer.ts +62 -25
- package/src/panels/data-grid.ts +14 -11
- package/src/panels/dnd.ts +108 -118
- package/src/panels/editors.ts +52 -21
- package/src/panels/elements-panel.ts +10 -3
- package/src/panels/events-panel.ts +84 -69
- package/src/panels/formula-workspace.ts +76 -51
- package/src/panels/frontmatter-fields.ts +24 -19
- package/src/panels/frontmatter-panel.ts +44 -34
- package/src/panels/git-diff-open.ts +4 -4
- package/src/panels/git-panel.ts +49 -61
- package/src/panels/head-panel.ts +131 -111
- package/src/panels/i18n-panel.ts +10 -3
- package/src/panels/imports-panel.ts +23 -47
- package/src/panels/jump-bar.ts +48 -29
- package/src/panels/layers-panel.ts +97 -74
- package/src/panels/left-panel.ts +3 -3
- package/src/panels/pane-context.ts +31 -22
- package/src/panels/pane-grid.ts +49 -20
- package/src/panels/panel-registry.ts +22 -37
- package/src/panels/properties-panel.ts +175 -121
- package/src/panels/quick-search.ts +53 -31
- package/src/panels/right-panel.ts +3 -3
- package/src/panels/seo-modal.ts +13 -17
- package/src/panels/settings-menu.ts +15 -15
- package/src/panels/signals-panel.ts +153 -131
- package/src/panels/statement-editor.ts +230 -140
- package/src/panels/style-panel.ts +218 -205
- package/src/panels/style-utils.ts +114 -51
- package/src/panels/stylebook-doc.ts +57 -54
- package/src/panels/stylebook-layers-panel.ts +9 -9
- package/src/panels/stylebook-panel.ts +13 -17
- package/src/panels/tab-drop.ts +27 -11
- package/src/panels/tab-strip.ts +36 -26
- package/src/platform-errors.ts +57 -43
- package/src/platform.ts +58 -30
- package/src/platforms/cloud.ts +345 -175
- package/src/platforms/default-platform.ts +10 -4
- package/src/platforms/devserver.ts +129 -117
- package/src/platforms/read-batcher.ts +16 -8
- package/src/project-list.ts +2 -1
- package/src/publish/deploy-checklist.ts +8 -2
- package/src/publish/pages-service.ts +28 -13
- package/src/publish/publish-commands.ts +5 -4
- package/src/publish/publish-panel.ts +10 -6
- 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 +58 -31
- package/src/services/cem-export.ts +149 -58
- package/src/services/clock.ts +6 -1
- package/src/services/code-services.ts +37 -31
- 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 +18 -12
- 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 +8 -7
- 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 +79 -60
- package/src/settings/css-vars-editor.ts +37 -16
- package/src/settings/defs-editor.ts +38 -35
- package/src/settings/extension-rows.ts +16 -8
- package/src/settings/extension-sections.ts +23 -13
- package/src/settings/extensions-section.ts +4 -1
- package/src/settings/general-settings.ts +11 -8
- package/src/settings/locales-section.ts +20 -12
- package/src/settings/preferences-dialog.ts +9 -6
- package/src/settings/preferences-keymap.ts +7 -5
- package/src/settings/preferences-sections.ts +11 -5
- package/src/settings/project-sections.ts +1 -1
- package/src/settings/schema-field-ui.ts +9 -0
- package/src/settings/settings-document.ts +5 -5
- package/src/shell/tree.ts +6 -5
- package/src/shell.ts +104 -81
- package/src/site-context.ts +37 -22
- package/src/state.ts +41 -49
- package/src/store.ts +54 -34
- package/src/studio.ts +25 -75
- package/src/style/live-preview.ts +1 -1
- package/src/style/project-styles.ts +6 -7
- package/src/style/token-ref.ts +5 -4
- package/src/surfaces/about.ts +18 -19
- package/src/surfaces/add-repo.ts +17 -19
- package/src/surfaces/ai-chat.ts +31 -36
- 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.ts +4 -5
- package/src/surfaces/bottom-dock.ts +9 -18
- package/src/surfaces/canvas-stage.ts +12 -11
- package/src/surfaces/cf-account-picker.ts +17 -18
- package/src/surfaces/commandbar.ts +14 -9
- 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/doc-header.ts +10 -19
- package/src/surfaces/empty-state.ts +7 -10
- package/src/surfaces/entry-editor.ts +14 -11
- 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/git-panel.ts +7 -15
- 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.ts +13 -12
- package/src/surfaces/jump-bar.ts +5 -6
- package/src/surfaces/jxsuite-update.ts +16 -22
- package/src/surfaces/library-pane.ts +19 -20
- package/src/surfaces/logic-panel.ts +17 -30
- package/src/surfaces/logic-workspace.ts +13 -15
- package/src/surfaces/media-browser.ts +11 -10
- package/src/surfaces/media-field.ts +4 -5
- package/src/surfaces/media-pane.ts +8 -7
- package/src/surfaces/menu.ts +29 -23
- package/src/surfaces/navigator-dock.ts +11 -12
- package/src/surfaces/new-project.ts +27 -26
- package/src/surfaces/pane-context.ts +20 -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.ts +5 -6
- 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.ts +11 -18
- package/src/surfaces/panel-problems.ts +5 -7
- package/src/surfaces/panel-signals.ts +20 -34
- package/src/surfaces/panel-stylebook-layers.ts +5 -8
- package/src/surfaces/preferences.ts +21 -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.ts +18 -18
- package/src/surfaces/push-plan.ts +7 -8
- package/src/surfaces/rail.ts +13 -13
- package/src/surfaces/reference-field.ts +11 -15
- package/src/surfaces/schema-builder.ts +16 -22
- package/src/surfaces/schema-form.ts +15 -25
- package/src/surfaces/secret-field.ts +9 -6
- package/src/surfaces/seo.ts +21 -15
- package/src/surfaces/settings-contexts.ts +9 -7
- package/src/surfaces/settings-contributed.ts +14 -10
- package/src/surfaces/settings-css-vars.ts +5 -12
- package/src/surfaces/settings-defs.json +2 -2
- package/src/surfaces/settings-defs.ts +17 -21
- package/src/surfaces/settings-deploy.ts +8 -15
- 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.ts +5 -6
- package/src/surfaces/settings-packages.ts +8 -7
- package/src/surfaces/settings-pane.ts +9 -18
- package/src/surfaces/settings-rawjson.ts +5 -6
- package/src/surfaces/shell.ts +1 -2
- package/src/surfaces/slash-menu.ts +19 -9
- package/src/surfaces/statements.ts +13 -18
- package/src/surfaces/statusbar.ts +17 -14
- package/src/surfaces/style-panel.ts +18 -31
- package/src/surfaces/stylebook-chrome.ts +3 -5
- package/src/surfaces/tab-strip.ts +14 -13
- package/src/surfaces/target-line.ts +6 -7
- package/src/surfaces/welcome.ts +5 -7
- 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 +52 -41
- package/src/tabs/transact.ts +98 -53
- package/src/types.ts +32 -17
- 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 +57 -48
- package/src/ui/formula-catalog.ts +239 -230
- package/src/ui/formula-chips.ts +33 -18
- package/src/ui/layers.ts +44 -31
- package/src/ui/media-picker.ts +18 -9
- package/src/ui/popover-surface.ts +20 -12
- package/src/ui/progress-modal.ts +13 -8
- package/src/ui/regions.ts +7 -6
- package/src/ui/schema-form.ts +113 -70
- 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 +3 -2
- package/src/utils/base64.ts +3 -1
- package/src/utils/edit-display.ts +73 -73
- 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/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 +10 -12
- package/src/workspace/session.ts +53 -43
- package/src/workspace/workspace.ts +40 -36
- 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/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-t6b6qe31.js +0 -5
- package/dist/chunks/studio-tdcprbqb.js +0 -5
- 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-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/workspace-zt81g1ms.js +0 -4
- package/dist/chunks/ws-client-n2bh4hkf.js +0 -4
|
@@ -19,23 +19,16 @@
|
|
|
19
19
|
import { reactive } from "../reactivity";
|
|
20
20
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
21
21
|
import deployDoc from "./settings-deploy.json";
|
|
22
|
-
import type {
|
|
23
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
22
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
24
23
|
|
|
25
|
-
registerSurface("settings-deploy", deployDoc
|
|
26
|
-
|
|
27
|
-
/** One row of the adapter picker. */
|
|
28
|
-
export interface DeployChoice {
|
|
29
|
-
value: string;
|
|
30
|
-
label: string;
|
|
31
|
-
}
|
|
24
|
+
registerSurface("settings-deploy", deployDoc);
|
|
32
25
|
|
|
33
26
|
/** What the section says the surface should be showing right now. */
|
|
34
27
|
export interface DeployValues {
|
|
35
28
|
/** The adapter the project is built with. */
|
|
36
29
|
adapter: string;
|
|
37
30
|
/** Every adapter it may be. */
|
|
38
|
-
adapters:
|
|
31
|
+
adapters: SurfaceOption[];
|
|
39
32
|
/** What the last write failed with, or `""`. */
|
|
40
33
|
error: string;
|
|
41
34
|
}
|
|
@@ -58,9 +51,9 @@ export interface DeploySurfaceHandle {
|
|
|
58
51
|
* The scope the document reads. `hasError` is derived here: `$switch` is a document's only
|
|
59
52
|
* conditional.
|
|
60
53
|
*/
|
|
61
|
-
interface DeployScope
|
|
54
|
+
interface DeployScope {
|
|
62
55
|
adapter: string;
|
|
63
|
-
adapters:
|
|
56
|
+
adapters: SurfaceOption[];
|
|
64
57
|
error: string;
|
|
65
58
|
hasError: boolean;
|
|
66
59
|
setAdapter: (value: string) => void;
|
|
@@ -91,13 +84,13 @@ export function mountDeploySurface(
|
|
|
91
84
|
values: DeployValues,
|
|
92
85
|
actions: DeployActions,
|
|
93
86
|
): DeploySurfaceHandle {
|
|
94
|
-
const scope = reactive<DeployScope>({
|
|
87
|
+
const scope: DeployScope = reactive<DeployScope>({
|
|
95
88
|
adapter: "",
|
|
96
89
|
adapters: [],
|
|
97
90
|
error: "",
|
|
98
91
|
hasError: false,
|
|
99
92
|
setAdapter: actions.setAdapter,
|
|
100
|
-
})
|
|
93
|
+
});
|
|
101
94
|
project(scope, values);
|
|
102
95
|
|
|
103
96
|
container.replaceChildren();
|
|
@@ -125,7 +118,7 @@ export function mountDeploySurface(
|
|
|
125
118
|
!disposed &&
|
|
126
119
|
(mounted === null
|
|
127
120
|
? container.childNodes.length === 0
|
|
128
|
-
:
|
|
121
|
+
: mounted.root.parentNode === container),
|
|
129
122
|
dispose() {
|
|
130
123
|
disposed = true;
|
|
131
124
|
mounted?.dispose();
|
|
@@ -26,10 +26,9 @@
|
|
|
26
26
|
import { reactive } from "../reactivity";
|
|
27
27
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
28
28
|
import extensionsDoc from "./settings-extensions.json";
|
|
29
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
30
29
|
import type { SurfaceHandle } from "../ui/surface";
|
|
31
30
|
|
|
32
|
-
registerSurface("settings-extensions", extensionsDoc
|
|
31
|
+
registerSurface("settings-extensions", extensionsDoc);
|
|
33
32
|
|
|
34
33
|
/** One `project.json` key an extension owns, as the chip repeater reads it. */
|
|
35
34
|
export interface ExtensionSectionView {
|
|
@@ -117,7 +116,7 @@ export interface ExtensionsSurfaceHandle {
|
|
|
117
116
|
* value already in the view, and a view that had to keep them in step would be a second place to
|
|
118
117
|
* get it wrong.
|
|
119
118
|
*/
|
|
120
|
-
interface ExtensionsScope extends
|
|
119
|
+
interface ExtensionsScope extends ExtensionsView, ExtensionsActions {
|
|
121
120
|
/** Whether to draw the groups or the sentence that says what this region is for. */
|
|
122
121
|
listState: "empty" | "groups";
|
|
123
122
|
hasError: boolean;
|
|
@@ -147,14 +146,14 @@ export function mountExtensionsSurface(
|
|
|
147
146
|
view: ExtensionsView,
|
|
148
147
|
actions: ExtensionsActions,
|
|
149
148
|
): ExtensionsSurfaceHandle {
|
|
150
|
-
const scope = reactive<ExtensionsScope>({
|
|
149
|
+
const scope: ExtensionsScope = reactive<ExtensionsScope>({
|
|
151
150
|
error: "",
|
|
152
151
|
groups: [],
|
|
153
152
|
hasError: false,
|
|
154
153
|
listState: "empty",
|
|
155
154
|
remove: actions.remove,
|
|
156
155
|
toggle: actions.toggle,
|
|
157
|
-
})
|
|
156
|
+
});
|
|
158
157
|
project(scope, view);
|
|
159
158
|
|
|
160
159
|
container.replaceChildren();
|
|
@@ -182,7 +181,7 @@ export function mountExtensionsSurface(
|
|
|
182
181
|
!disposed &&
|
|
183
182
|
(mounted === null
|
|
184
183
|
? container.childNodes.length === 0
|
|
185
|
-
:
|
|
184
|
+
: mounted.root.parentNode === container),
|
|
186
185
|
dispose() {
|
|
187
186
|
disposed = true;
|
|
188
187
|
mounted?.dispose();
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* @docs studio/projects/settings
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
+
import { isString } from "@jxsuite/schema/guards";
|
|
21
22
|
import { reactive } from "../reactivity";
|
|
22
23
|
import { projectState } from "../store";
|
|
23
24
|
import { updateSiteConfig } from "../site-context";
|
|
@@ -29,24 +30,15 @@ import {
|
|
|
29
30
|
isGoogleFontEntry,
|
|
30
31
|
} from "../utils/google-fonts";
|
|
31
32
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
33
|
+
import { HEAD_EDIT_DEBOUNCE } from "../ui/timing";
|
|
32
34
|
import headDoc from "./settings-head.json";
|
|
33
|
-
import type {
|
|
34
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
35
|
+
import type { JsonValue, JxHeadEntry, ProjectConfig } from "@jxsuite/schema/types";
|
|
36
|
+
import type { SurfaceHandle, TaggedLabel } from "../ui/surface";
|
|
35
37
|
|
|
36
|
-
registerSurface("settings-head", headDoc
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* How long a keystroke waits before it is written.
|
|
40
|
-
*
|
|
41
|
-
* Every field commit is a `project.json` write, and the two body fields commit on `input` — one
|
|
42
|
-
* write per keystroke without this. The lit editor debounced per ENTRY, with one timer shared by
|
|
43
|
-
* that entry's fields, so editing `rel` and then `href` inside the window cancelled the first write
|
|
44
|
-
* outright; the timers are per field here, which is why each edit lands.
|
|
45
|
-
*/
|
|
46
|
-
const EDIT_DEBOUNCE_MS = 300;
|
|
38
|
+
registerSurface("settings-head", headDoc);
|
|
47
39
|
|
|
48
40
|
/** One `$head` entry as the document draws it: which fields, and what is in them. */
|
|
49
|
-
interface HeadRow
|
|
41
|
+
interface HeadRow {
|
|
50
42
|
id: string;
|
|
51
43
|
/** The tag name, drawn as `<link>` and named in the delete button. */
|
|
52
44
|
tag: string;
|
|
@@ -64,18 +56,12 @@ interface HeadRow extends Record<string, unknown> {
|
|
|
64
56
|
}
|
|
65
57
|
|
|
66
58
|
/** One Google Fonts stylesheet link, by the family it loads. */
|
|
67
|
-
interface FontRow
|
|
59
|
+
interface FontRow {
|
|
68
60
|
id: string;
|
|
69
61
|
family: string;
|
|
70
62
|
}
|
|
71
63
|
|
|
72
|
-
|
|
73
|
-
interface AddTag extends Record<string, unknown> {
|
|
74
|
-
tag: string;
|
|
75
|
-
label: string;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
interface HeadScope extends Record<string, unknown> {
|
|
64
|
+
interface HeadScope {
|
|
79
65
|
rows: HeadRow[];
|
|
80
66
|
fonts: FontRow[];
|
|
81
67
|
/**
|
|
@@ -85,7 +71,8 @@ interface HeadScope extends Record<string, unknown> {
|
|
|
85
71
|
fontsState: "empty" | "listed";
|
|
86
72
|
/** What is in the family field. The document reads it back, so clearing it is an assignment. */
|
|
87
73
|
fontDraft: string;
|
|
88
|
-
tags
|
|
74
|
+
/** The four tags the section can add, each with the words on the button that adds it. */
|
|
75
|
+
tags: TaggedLabel[];
|
|
89
76
|
add: (tag: string) => void;
|
|
90
77
|
remove: (id: string) => void;
|
|
91
78
|
edit: (id: string, key: string, value: string) => void;
|
|
@@ -94,7 +81,7 @@ interface HeadScope extends Record<string, unknown> {
|
|
|
94
81
|
removeFont: (id: string) => void;
|
|
95
82
|
}
|
|
96
83
|
|
|
97
|
-
const ADD_TAGS:
|
|
84
|
+
const ADD_TAGS: TaggedLabel[] = [
|
|
98
85
|
{ label: "+ Link", tag: "link" },
|
|
99
86
|
{ label: "+ Meta", tag: "meta" },
|
|
100
87
|
{ label: "+ Script", tag: "script" },
|
|
@@ -137,7 +124,7 @@ let _entries: JxHeadEntry[] = [];
|
|
|
137
124
|
* between would answer "no entries" and lose the tag that was just added.
|
|
138
125
|
*/
|
|
139
126
|
function entries(): JxHeadEntry[] {
|
|
140
|
-
const config =
|
|
127
|
+
const config = projectState?.projectConfig ?? null;
|
|
141
128
|
if (config !== _config) {
|
|
142
129
|
_config = config;
|
|
143
130
|
_entries = [];
|
|
@@ -150,7 +137,7 @@ function entries(): JxHeadEntry[] {
|
|
|
150
137
|
}
|
|
151
138
|
const declared = config?.$head;
|
|
152
139
|
if (Array.isArray(declared)) {
|
|
153
|
-
_entries = declared
|
|
140
|
+
_entries = declared;
|
|
154
141
|
}
|
|
155
142
|
return _entries;
|
|
156
143
|
}
|
|
@@ -161,8 +148,8 @@ function entryFor(id: string): JxHeadEntry | undefined {
|
|
|
161
148
|
}
|
|
162
149
|
|
|
163
150
|
/** A `$head` attribute as a field's text: anything that is not a string has none to show. */
|
|
164
|
-
function text(value:
|
|
165
|
-
return
|
|
151
|
+
function text(value: JsonValue | undefined): string {
|
|
152
|
+
return isString(value) ? value : "";
|
|
166
153
|
}
|
|
167
154
|
|
|
168
155
|
// ─── The projection ───────────────────────────────────────────────────────────
|
|
@@ -171,19 +158,21 @@ function text(value: unknown): string {
|
|
|
171
158
|
function row(entry: JxHeadEntry): HeadRow {
|
|
172
159
|
const attributes = entry.attributes ?? {};
|
|
173
160
|
const src = text(attributes["src"]);
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
161
|
+
/* `project.json` is read off disk unvalidated, so an entry can arrive without a `tagName`; like
|
|
162
|
+
an attribute, a tag that is not a string has none to show. */
|
|
163
|
+
const tag = text(entry.tagName);
|
|
164
|
+
const kinds = new Map<string, HeadRow["kind"]>([
|
|
165
|
+
["link", "link"],
|
|
166
|
+
["meta", "meta"],
|
|
167
|
+
["script", src === "" ? "script-inline" : "script"],
|
|
168
|
+
["style", "style"],
|
|
169
|
+
]);
|
|
181
170
|
return {
|
|
182
171
|
body: text(entry.textContent),
|
|
183
172
|
content: text(attributes["content"]),
|
|
184
173
|
href: text(attributes["href"]),
|
|
185
174
|
id: idOf(entry),
|
|
186
|
-
kind: kinds
|
|
175
|
+
kind: kinds.get(tag) ?? "none",
|
|
187
176
|
name: text(attributes["name"]),
|
|
188
177
|
rel: text(attributes["rel"]),
|
|
189
178
|
src,
|
|
@@ -212,7 +201,12 @@ function save(): void {
|
|
|
212
201
|
void updateSiteConfig({ $head: entries() });
|
|
213
202
|
}
|
|
214
203
|
|
|
215
|
-
/**
|
|
204
|
+
/**
|
|
205
|
+
* Field edits waiting out {@link HEAD_EDIT_DEBOUNCE}, one per field. The two body fields commit on
|
|
206
|
+
* `input`, so without the wait every keystroke would be a `project.json` write; the lit editor
|
|
207
|
+
* shared one timer per ENTRY, so editing `rel` and then `href` inside the window cancelled the
|
|
208
|
+
* first write outright.
|
|
209
|
+
*/
|
|
216
210
|
const _pending = new Map<string, { commit: () => void; timer: ReturnType<typeof setTimeout> }>();
|
|
217
211
|
|
|
218
212
|
/**
|
|
@@ -302,7 +296,7 @@ function state(): HeadScope {
|
|
|
302
296
|
_pending.delete(token);
|
|
303
297
|
write(id, key, value);
|
|
304
298
|
};
|
|
305
|
-
_pending.set(token, { commit, timer: setTimeout(commit,
|
|
299
|
+
_pending.set(token, { commit, timer: setTimeout(commit, HEAD_EDIT_DEBOUNCE) });
|
|
306
300
|
},
|
|
307
301
|
fonts: [],
|
|
308
302
|
fontDraft: "",
|
|
@@ -339,7 +333,7 @@ function state(): HeadScope {
|
|
|
339
333
|
},
|
|
340
334
|
rows: [],
|
|
341
335
|
tags: ADD_TAGS,
|
|
342
|
-
})
|
|
336
|
+
});
|
|
343
337
|
return _scope;
|
|
344
338
|
}
|
|
345
339
|
|
|
@@ -24,28 +24,16 @@
|
|
|
24
24
|
import { reactive } from "../reactivity";
|
|
25
25
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
26
26
|
import localesDoc from "./settings-locales.json";
|
|
27
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
28
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
27
|
+
import type { SurfaceHandle, SurfaceOption, TaggedLabel } from "../ui/surface";
|
|
29
28
|
|
|
30
|
-
registerSurface("settings-locales", localesDoc
|
|
31
|
-
|
|
32
|
-
/** One declared language: the tag as the author wrote it, and the name that language calls itself. */
|
|
33
|
-
export interface LocaleRow {
|
|
34
|
-
tag: string;
|
|
35
|
-
label: string;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/** One row of a picker. */
|
|
39
|
-
export interface LocaleChoice {
|
|
40
|
-
value: string;
|
|
41
|
-
label: string;
|
|
42
|
-
}
|
|
29
|
+
registerSurface("settings-locales", localesDoc);
|
|
43
30
|
|
|
44
31
|
/** What the section shows — the flow's projection of `project.json` and of the form beside it. */
|
|
45
32
|
export interface LocalesView {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
33
|
+
/** Each declared language: the tag as the author wrote it, and the name it calls itself. */
|
|
34
|
+
locales: TaggedLabel[];
|
|
35
|
+
localeOptions: SurfaceOption[];
|
|
36
|
+
routings: SurfaceOption[];
|
|
49
37
|
defaultLocale: string;
|
|
50
38
|
routing: string;
|
|
51
39
|
/** The tag being typed, kept so an outside redraw does not take it away. */
|
|
@@ -80,7 +68,7 @@ interface LocalesFlags {
|
|
|
80
68
|
hasError: boolean;
|
|
81
69
|
}
|
|
82
70
|
|
|
83
|
-
interface LocalesScope extends
|
|
71
|
+
interface LocalesScope extends LocalesView, LocalesActions, LocalesFlags {}
|
|
84
72
|
|
|
85
73
|
interface Mounted {
|
|
86
74
|
scope: LocalesScope;
|
|
@@ -124,7 +112,7 @@ export function renderLocalesSurface(
|
|
|
124
112
|
}
|
|
125
113
|
existing?.handle?.dispose();
|
|
126
114
|
host.textContent = "";
|
|
127
|
-
const scope = reactive({ ...derive(view), ...actions })
|
|
115
|
+
const scope: LocalesScope = reactive<LocalesScope>({ ...derive(view), ...actions });
|
|
128
116
|
const record: Mounted = { handle: null, scope };
|
|
129
117
|
mounts.set(host, record);
|
|
130
118
|
/* No race to arbitrate: a redraw arriving while this is in flight takes the branch above — a
|
|
@@ -24,10 +24,9 @@
|
|
|
24
24
|
import { reactive } from "../reactivity";
|
|
25
25
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
26
26
|
import overviewDoc from "./settings-overview.json";
|
|
27
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
28
27
|
import type { SurfaceHandle } from "../ui/surface";
|
|
29
28
|
|
|
30
|
-
registerSurface("settings-overview", overviewDoc
|
|
29
|
+
registerSurface("settings-overview", overviewDoc);
|
|
31
30
|
|
|
32
31
|
/** Which control a failure belongs under. `"section"` puts it at the top of the section. */
|
|
33
32
|
export type OverviewErrorField = "name" | "description" | "url" | "favicon" | "section";
|
|
@@ -74,7 +73,7 @@ export interface OverviewSurfaceHandle {
|
|
|
74
73
|
* The scope the document reads: one field per binding, because `$switch` is the only conditional a
|
|
75
74
|
* document has and `error.field === "name"` is not a value it can switch on.
|
|
76
75
|
*/
|
|
77
|
-
interface OverviewScope
|
|
76
|
+
interface OverviewScope {
|
|
78
77
|
nameValue: string;
|
|
79
78
|
nameError: string;
|
|
80
79
|
nameInvalid: boolean;
|
|
@@ -157,7 +156,7 @@ export function mountOverviewSurface(
|
|
|
157
156
|
values: OverviewValues,
|
|
158
157
|
actions: OverviewActions,
|
|
159
158
|
): OverviewSurfaceHandle {
|
|
160
|
-
const scope = reactive<OverviewScope>({
|
|
159
|
+
const scope: OverviewScope = reactive<OverviewScope>({
|
|
161
160
|
descriptionError: "",
|
|
162
161
|
descriptionInvalid: false,
|
|
163
162
|
descriptionValue: "",
|
|
@@ -180,7 +179,7 @@ export function mountOverviewSurface(
|
|
|
180
179
|
urlError: "",
|
|
181
180
|
urlInvalid: false,
|
|
182
181
|
urlValue: "",
|
|
183
|
-
})
|
|
182
|
+
});
|
|
184
183
|
project(scope, values);
|
|
185
184
|
|
|
186
185
|
container.replaceChildren();
|
|
@@ -208,7 +207,7 @@ export function mountOverviewSurface(
|
|
|
208
207
|
!disposed &&
|
|
209
208
|
(mounted === null
|
|
210
209
|
? container.childNodes.length === 0
|
|
211
|
-
:
|
|
210
|
+
: mounted.root.parentNode === container),
|
|
212
211
|
dispose() {
|
|
213
212
|
disposed = true;
|
|
214
213
|
mounted?.dispose();
|
|
@@ -32,9 +32,8 @@ import { reactive } from "../reactivity";
|
|
|
32
32
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
33
33
|
import packagesDoc from "./settings-packages.json";
|
|
34
34
|
import type { SurfaceHandle } from "../ui/surface";
|
|
35
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
36
35
|
|
|
37
|
-
registerSurface("settings-packages", packagesDoc
|
|
36
|
+
registerSurface("settings-packages", packagesDoc);
|
|
38
37
|
|
|
39
38
|
/** One dependency, as the table draws it. Every field is already a string the row can print. */
|
|
40
39
|
export interface PackageRow {
|
|
@@ -79,7 +78,7 @@ export interface PackagesActions {
|
|
|
79
78
|
}
|
|
80
79
|
|
|
81
80
|
/** One row plus the flag its buttons switch on. */
|
|
82
|
-
interface RowScope extends
|
|
81
|
+
interface RowScope extends PackageRow {
|
|
83
82
|
/** Whether to draw the update button — `upgrade` said as something a `$switch` can read. */
|
|
84
83
|
canUpdate: boolean;
|
|
85
84
|
}
|
|
@@ -96,11 +95,13 @@ interface PackagesFlags {
|
|
|
96
95
|
hasUpdates: boolean;
|
|
97
96
|
}
|
|
98
97
|
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
/** Everything {@link derive} computes from a view: the scope minus the reader's actions. */
|
|
99
|
+
interface PackagesDerived extends Omit<PackagesView, "rows">, PackagesFlags {
|
|
101
100
|
rows: RowScope[];
|
|
102
101
|
}
|
|
103
102
|
|
|
103
|
+
interface PackagesScope extends PackagesDerived, PackagesActions {}
|
|
104
|
+
|
|
104
105
|
interface Mounted {
|
|
105
106
|
scope: PackagesScope;
|
|
106
107
|
/** `null` while the mount is still in flight — which is a standing surface, not a missing one. */
|
|
@@ -110,7 +111,7 @@ interface Mounted {
|
|
|
110
111
|
const mounts = new WeakMap<HTMLElement, Mounted>();
|
|
111
112
|
|
|
112
113
|
/** The view plus the flags the document switches on. */
|
|
113
|
-
function derive(view: PackagesView):
|
|
114
|
+
function derive(view: PackagesView): PackagesDerived {
|
|
114
115
|
const rows = view.rows.map((row): RowScope => ({ ...row, canUpdate: row.upgrade !== "" }));
|
|
115
116
|
return {
|
|
116
117
|
addName: view.addName,
|
|
@@ -145,7 +146,7 @@ export function renderPackagesSurface(
|
|
|
145
146
|
}
|
|
146
147
|
existing?.handle?.dispose();
|
|
147
148
|
host.textContent = "";
|
|
148
|
-
const scope = reactive({ ...derive(view), ...actions })
|
|
149
|
+
const scope: PackagesScope = reactive<PackagesScope>({ ...derive(view), ...actions });
|
|
149
150
|
const record: Mounted = { handle: null, scope };
|
|
150
151
|
mounts.set(host, record);
|
|
151
152
|
/* No race to arbitrate: a redraw arriving while this is in flight takes the branch above — a
|
|
@@ -15,22 +15,14 @@
|
|
|
15
15
|
* @docs studio/projects/settings
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
+
import { isString } from "@jxsuite/schema/guards";
|
|
18
19
|
import { reactive } from "../reactivity";
|
|
19
20
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
20
21
|
import settingsPaneDoc from "./settings-pane.json";
|
|
21
|
-
import type {
|
|
22
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
22
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
23
|
+
import type { SurfaceHandle, SurfaceTab } from "../ui/surface";
|
|
23
24
|
|
|
24
|
-
registerSurface("settings-pane", settingsPaneDoc
|
|
25
|
-
|
|
26
|
-
/** One row of the section list, as the document draws it. */
|
|
27
|
-
export interface SettingsNavView {
|
|
28
|
-
/** The section key — the row's identity, its `value`, and what the strip compares `selected` to. */
|
|
29
|
-
key: string;
|
|
30
|
-
label: string;
|
|
31
|
-
/** The row's own element id, which the one panel names as its `aria-labelledby`. */
|
|
32
|
-
tabId: string;
|
|
33
|
-
}
|
|
25
|
+
registerSurface("settings-pane", settingsPaneDoc);
|
|
34
26
|
|
|
35
27
|
/** What the editor says right now. */
|
|
36
28
|
export interface SettingsPaneValues {
|
|
@@ -40,7 +32,7 @@ export interface SettingsPaneValues {
|
|
|
40
32
|
active: string;
|
|
41
33
|
/** The current section's row id, so the body is named by the row that chose it. */
|
|
42
34
|
activeTabId: string;
|
|
43
|
-
sections:
|
|
35
|
+
sections: SurfaceTab[];
|
|
44
36
|
/**
|
|
45
37
|
* Whether a renderer will draw into the island.
|
|
46
38
|
*
|
|
@@ -75,13 +67,12 @@ export interface SettingsPaneHandle {
|
|
|
75
67
|
dispose: () => void;
|
|
76
68
|
}
|
|
77
69
|
|
|
78
|
-
interface SettingsPaneScope
|
|
79
|
-
extends Record<string, unknown>, SettingsPaneValues, SettingsPaneActions {}
|
|
70
|
+
interface SettingsPaneScope extends SettingsPaneValues, SettingsPaneActions {}
|
|
80
71
|
|
|
81
72
|
/** The `part` a node was declared with, or the empty string. */
|
|
82
73
|
function partOf(def: JxElement | string): string {
|
|
83
|
-
const part =
|
|
84
|
-
return
|
|
74
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
75
|
+
return isString(part) ? part : "";
|
|
85
76
|
}
|
|
86
77
|
|
|
87
78
|
/**
|
|
@@ -101,7 +92,7 @@ export function mountSettingsPaneSurface(
|
|
|
101
92
|
values: SettingsPaneValues,
|
|
102
93
|
actions: SettingsPaneActions,
|
|
103
94
|
): SettingsPaneHandle {
|
|
104
|
-
const scope = reactive<SettingsPaneScope>({ ...values, ...actions })
|
|
95
|
+
const scope: SettingsPaneScope = reactive<SettingsPaneScope>({ ...values, ...actions });
|
|
105
96
|
|
|
106
97
|
container.textContent = "";
|
|
107
98
|
// @ts-expect-error -- _$litPart$ is lit's private render-part marker, not in the DOM types
|
|
@@ -16,10 +16,9 @@
|
|
|
16
16
|
import { reactive } from "../reactivity";
|
|
17
17
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
18
18
|
import rawJsonDoc from "./settings-rawjson.json";
|
|
19
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
20
19
|
import type { SurfaceHandle } from "../ui/surface";
|
|
21
20
|
|
|
22
|
-
registerSurface("settings-rawjson", rawJsonDoc
|
|
21
|
+
registerSurface("settings-rawjson", rawJsonDoc);
|
|
23
22
|
|
|
24
23
|
/** What the section says the surface should be showing right now. */
|
|
25
24
|
export interface RawJsonValues {
|
|
@@ -43,7 +42,7 @@ export interface RawJsonSurfaceHandle {
|
|
|
43
42
|
}
|
|
44
43
|
|
|
45
44
|
/** The scope the document reads. */
|
|
46
|
-
interface RawJsonScope
|
|
45
|
+
interface RawJsonScope {
|
|
47
46
|
json: string;
|
|
48
47
|
editAsCode: () => void;
|
|
49
48
|
}
|
|
@@ -66,10 +65,10 @@ export function mountRawJsonSurface(
|
|
|
66
65
|
values: RawJsonValues,
|
|
67
66
|
actions: RawJsonActions,
|
|
68
67
|
): RawJsonSurfaceHandle {
|
|
69
|
-
const scope = reactive<RawJsonScope>({
|
|
68
|
+
const scope: RawJsonScope = reactive<RawJsonScope>({
|
|
70
69
|
editAsCode: actions.editAsCode,
|
|
71
70
|
json: "",
|
|
72
|
-
})
|
|
71
|
+
});
|
|
73
72
|
project(scope, values);
|
|
74
73
|
|
|
75
74
|
container.replaceChildren();
|
|
@@ -96,7 +95,7 @@ export function mountRawJsonSurface(
|
|
|
96
95
|
!disposed &&
|
|
97
96
|
(mounted === null
|
|
98
97
|
? container.childNodes.length === 0
|
|
99
|
-
:
|
|
98
|
+
: mounted.root.parentNode === container),
|
|
100
99
|
dispose() {
|
|
101
100
|
disposed = true;
|
|
102
101
|
mounted?.dispose();
|
package/src/surfaces/shell.ts
CHANGED
|
@@ -16,9 +16,8 @@
|
|
|
16
16
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
17
17
|
import shellDoc from "./shell.json";
|
|
18
18
|
import type { SurfaceHandle } from "../ui/surface";
|
|
19
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
20
19
|
|
|
21
|
-
registerSurface("shell", shellDoc
|
|
20
|
+
registerSurface("shell", shellDoc);
|
|
22
21
|
|
|
23
22
|
/**
|
|
24
23
|
* Render the frame into `host`, and resolve once its cells exist.
|
|
@@ -41,17 +41,16 @@ import { clearLayerSlot, getLayerSlot } from "../ui/layers";
|
|
|
41
41
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
42
42
|
import { overlayRegion, REGION_ATTR } from "../ui/regions";
|
|
43
43
|
import slashMenuDoc from "./slash-menu.json";
|
|
44
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
45
44
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
46
45
|
import type { SurfaceHandle } from "../ui/surface";
|
|
47
46
|
|
|
48
|
-
registerSurface("slash-menu", slashMenuDoc
|
|
47
|
+
registerSurface("slash-menu", slashMenuDoc);
|
|
49
48
|
|
|
50
49
|
/** The popover slot id; the region is `overlay.menu:slash-menu`, which is what the shots crop. */
|
|
51
50
|
const SLOT = "slash-menu";
|
|
52
51
|
|
|
53
52
|
/** One offer, as the document reads it. */
|
|
54
|
-
export interface SlashMenuRow
|
|
53
|
+
export interface SlashMenuRow {
|
|
55
54
|
/**
|
|
56
55
|
* The element's tag — unique in the list, so it is the repeater's key AND the row's `value`,
|
|
57
56
|
* which is what a picked row names in its `select` event.
|
|
@@ -103,7 +102,7 @@ export interface SlashMenuSurface {
|
|
|
103
102
|
}
|
|
104
103
|
|
|
105
104
|
/** The scope `slash-menu.json` reads. */
|
|
106
|
-
interface SlashMenuScope
|
|
105
|
+
interface SlashMenuScope {
|
|
107
106
|
x: number;
|
|
108
107
|
y: number;
|
|
109
108
|
showFilter: boolean;
|
|
@@ -168,7 +167,7 @@ export function openSlashMenuSurface(
|
|
|
168
167
|
let mounted: SurfaceHandle | null = null;
|
|
169
168
|
let closed = false;
|
|
170
169
|
|
|
171
|
-
const scope = reactive<SlashMenuScope>({
|
|
170
|
+
const scope: SlashMenuScope = reactive<SlashMenuScope>({
|
|
172
171
|
activeId: activeIdOf(view),
|
|
173
172
|
expanded: view.rows.length > 0,
|
|
174
173
|
filter: view.filter,
|
|
@@ -184,6 +183,9 @@ export function openSlashMenuSurface(
|
|
|
184
183
|
one bubbling handler on the listbox replaces a closure per row, and the position the flow
|
|
185
184
|
wants is resolved here against the list the panel is showing rather than baked into the
|
|
186
185
|
row when it was drawn. */
|
|
186
|
+
/* SAFETY: `slash-menu.json` binds this handler to the listbox's `onselect` alone, and `select`
|
|
187
|
+
is raised by the `dispatchEvent` statement in `jx-option.json`, which the runtime always
|
|
188
|
+
constructs as a `CustomEvent` whose `detail` is the row's value. */
|
|
187
189
|
const tag = String((event as CustomEvent<unknown>).detail);
|
|
188
190
|
const index = scope.rows.findIndex((row) => row.key === tag);
|
|
189
191
|
if (index !== -1) {
|
|
@@ -194,7 +196,7 @@ export function openSlashMenuSurface(
|
|
|
194
196
|
showFilter: view.showFilter,
|
|
195
197
|
x: view.x,
|
|
196
198
|
y: view.y,
|
|
197
|
-
})
|
|
199
|
+
});
|
|
198
200
|
|
|
199
201
|
const finish = (fromPlatform: boolean): void => {
|
|
200
202
|
if (closed) {
|
|
@@ -210,12 +212,20 @@ export function openSlashMenuSurface(
|
|
|
210
212
|
}
|
|
211
213
|
};
|
|
212
214
|
|
|
215
|
+
/* Read through a call, not the property path: `close()` can abort the controller while the panel
|
|
216
|
+
is awaiting `jx-ready`, and a direct test after that `await` would be narrowed to the value the
|
|
217
|
+
test before it saw. */
|
|
218
|
+
const aborted = (): boolean => controller.signal.aborted;
|
|
219
|
+
|
|
213
220
|
const ready = (async () => {
|
|
214
221
|
const surface = await mountSurface("slash-menu", scope, slot, { signal: controller.signal });
|
|
215
|
-
if (
|
|
222
|
+
if (aborted()) {
|
|
216
223
|
return;
|
|
217
224
|
}
|
|
218
225
|
mounted = surface;
|
|
226
|
+
/* SAFETY: `slash-menu.json`'s root definition carries `tagName: "jx-popover"`, so the mounted
|
|
227
|
+
root is the kit's popover element, which reflects `open` and inherits `showPopover` and
|
|
228
|
+
`hidePopover` from HTMLElement. */
|
|
219
229
|
panel = surface.root as PopoverElement;
|
|
220
230
|
/* The region rides on the PANEL as well as on the slot `getLayerSlot` stamped: a popover is
|
|
221
231
|
`position: fixed` in the top layer, so the slot around it has a zero-height box and the
|
|
@@ -223,7 +233,7 @@ export function openSlashMenuSurface(
|
|
|
223
233
|
takes the last match in document order, which is the panel. */
|
|
224
234
|
panel.setAttribute(REGION_ATTR, overlayRegion("popover", SLOT));
|
|
225
235
|
panel.addEventListener("toggle", (event) => {
|
|
226
|
-
if (
|
|
236
|
+
if (event.newState === "closed") {
|
|
227
237
|
finish(true);
|
|
228
238
|
}
|
|
229
239
|
});
|
|
@@ -234,7 +244,7 @@ export function openSlashMenuSurface(
|
|
|
234
244
|
panel!.addEventListener("jx-ready", () => resolve(), { once: true });
|
|
235
245
|
});
|
|
236
246
|
}
|
|
237
|
-
if (
|
|
247
|
+
if (aborted()) {
|
|
238
248
|
return;
|
|
239
249
|
}
|
|
240
250
|
panel.showPopover(anchor instanceof HTMLElement ? { source: anchor } : undefined);
|