@jxsuite/studio 6.1.0 → 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-f2gkpy8d.js +4 -0
- 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-gybvv7a6.js → index-zpjmzqfk.js} +3 -3
- package/dist/chunks/{javascript-rnvdp3k4.js → javascript-m54mnwp6.js} +3 -3
- package/dist/chunks/jsonMode-w15cmrcm.js +13 -0
- 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-5g0ag7c0.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-pxg4ap1e.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-qbj760tx.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-anyrgzvb.js → studio-90pq9km1.js} +4 -4
- package/dist/chunks/studio-924p1tm1.js +6 -0
- package/dist/chunks/{studio-v2bvmbjj.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-txjjzrsm.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-0x3jyb8r.js → studio-tq0rtfwj.js} +4 -4
- package/dist/chunks/{studio-cpxkgjrj.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-y64hrt8p.js +12 -0
- 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-sf49ee9x.js +14 -0
- 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 +98 -98
- package/dist/workers/ts.worker.js +3 -3
- package/package.json +11 -11
- 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 +66 -42
- package/src/canvas/canvas-surface.ts +5 -3
- package/src/canvas/canvas-utils.ts +163 -64
- 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 +203 -118
- package/src/canvas/iframe-inline-edit.ts +69 -32
- package/src/canvas/iframe-insert.ts +5 -4
- package/src/canvas/iframe-interaction.ts +37 -26
- 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 +15 -16
- package/src/canvas/iframe-render.ts +41 -36
- 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/defaults.ts +4 -1
- package/src/commands/keymap.ts +47 -43
- package/src/commands/levels.ts +3 -3
- package/src/commands/live-context.ts +10 -8
- 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 +87 -47
- 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 +6 -1
- 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 +55 -22
- 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 +254 -216
- 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 +174 -127
- 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 +39 -77
- 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 +25 -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.json +126 -73
- package/src/surfaces/rail.ts +38 -12
- 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/tabs/typing.ts +31 -0
- 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 +103 -74
- 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 +47 -36
- package/dist/chunks/2020-nkxms0ay.js +0 -4
- package/dist/chunks/adapter-m948ab5f.js +0 -4
- package/dist/chunks/cf-account-picker-n8hr38v7.js +0 -4
- package/dist/chunks/cf-settings-356xdtne.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-yk3t844e.js +0 -4
- package/dist/chunks/content-source-bawmyc09.js +0 -4
- package/dist/chunks/convert-to-repeater-7wns8kf1.js +0 -4
- package/dist/chunks/dialog-mtm9fq5t.js +0 -4
- package/dist/chunks/editor-6sc8nacq.js +0 -4
- package/dist/chunks/entry-commands-8ay9fh81.js +0 -4
- package/dist/chunks/extension-sections-na7rj3nr.js +0 -4
- package/dist/chunks/file-ops-gye0qw56.js +0 -4
- package/dist/chunks/files-dmc2xvcq.js +0 -4
- package/dist/chunks/format-host-t76b53f8.js +0 -4
- package/dist/chunks/fs-events-cg4tpz06.js +0 -4
- package/dist/chunks/git-panel-yef7bshy.js +0 -4
- package/dist/chunks/grid-view-7tt4bxw1.js +0 -51
- package/dist/chunks/icons-qbh8akb1.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-tmz30gfp.js +0 -4
- package/dist/chunks/index-nag78a9h.js +0 -4
- package/dist/chunks/jsonMode-zhwsprqk.js +0 -13
- package/dist/chunks/jx-validate-3gbp5nkn.js +0 -4
- package/dist/chunks/layers-fvz99859.js +0 -4
- package/dist/chunks/layers-panel-gchmbf9p.js +0 -4
- package/dist/chunks/listbox-s8fkmnq8.js +0 -4
- package/dist/chunks/lit-html-9agdspkt.js +0 -4
- package/dist/chunks/media-picker-rhjvyy00.js +0 -4
- package/dist/chunks/menu-2e4y9j7b.js +0 -4
- package/dist/chunks/menu-37d07z9m.js +0 -4
- package/dist/chunks/monaco-binding-2jnhjjvr.js +0 -4
- package/dist/chunks/monaco-buffer-rp21359g.js +0 -4
- package/dist/chunks/monaco-setup-vhh7gayr.js +0 -4
- package/dist/chunks/notify-h3www560.js +0 -4
- package/dist/chunks/number-field-gw7sq8rn.js +0 -4
- package/dist/chunks/parse-897fvqah.js +0 -4
- package/dist/chunks/platform-hz34wcd7.js +0 -4
- package/dist/chunks/popover-8htra4er.js +0 -4
- package/dist/chunks/publish-panel-exsmjzyj.js +0 -4
- package/dist/chunks/quick-search-pgaqeh0m.js +0 -4
- package/dist/chunks/references-2cgdxnb8.js +0 -4
- package/dist/chunks/right-panel-jf856w5w.js +0 -4
- package/dist/chunks/section-registry-jnf8r5gy.js +0 -4
- package/dist/chunks/select-n3v7gwas.js +0 -4
- package/dist/chunks/split-pff8f3ze.js +0 -4
- package/dist/chunks/studio-0f55h9ye.js +0 -5
- package/dist/chunks/studio-0sqdhnew.js +0 -12
- package/dist/chunks/studio-19x1c75w.js +0 -5
- package/dist/chunks/studio-2sqcndak.js +0 -5
- package/dist/chunks/studio-3aey7dd3.js +0 -5
- package/dist/chunks/studio-3bpdkq2s.js +0 -5
- package/dist/chunks/studio-47y6fbpf.js +0 -5
- package/dist/chunks/studio-4m3826v2.js +0 -5
- package/dist/chunks/studio-4nx2dj1g.js +0 -4
- package/dist/chunks/studio-4xv5s47r.js +0 -9
- package/dist/chunks/studio-5g4t8v6w.js +0 -5
- package/dist/chunks/studio-5py436sf.js +0 -5
- package/dist/chunks/studio-77kt594t.js +0 -5
- package/dist/chunks/studio-8f87n763.js +0 -10
- package/dist/chunks/studio-8mb00b84.js +0 -5
- package/dist/chunks/studio-8p51gq2h.js +0 -6
- package/dist/chunks/studio-954ds834.js +0 -5
- package/dist/chunks/studio-9ft45c83.js +0 -9
- package/dist/chunks/studio-a2138x5k.js +0 -7
- package/dist/chunks/studio-a9yzstqj.js +0 -5
- package/dist/chunks/studio-acdksxx6.js +0 -5
- package/dist/chunks/studio-ar8jcf2y.js +0 -5
- package/dist/chunks/studio-bmn4mn9j.js +0 -7
- package/dist/chunks/studio-e7xxa0sj.js +0 -5
- package/dist/chunks/studio-ecaz25vk.js +0 -5
- package/dist/chunks/studio-ery42sqr.js +0 -4
- package/dist/chunks/studio-fzdywr6p.js +0 -9
- package/dist/chunks/studio-g5fmf0c1.js +0 -5
- package/dist/chunks/studio-g7nse7zb.js +0 -5
- package/dist/chunks/studio-geq1ea6k.js +0 -14
- package/dist/chunks/studio-ghkb32r8.js +0 -5
- package/dist/chunks/studio-ghrhy2y7.js +0 -5
- package/dist/chunks/studio-grawhey1.js +0 -5
- package/dist/chunks/studio-h0xgswew.js +0 -5
- package/dist/chunks/studio-h9c4p2tx.js +0 -5
- package/dist/chunks/studio-jyzj5cxs.js +0 -5
- package/dist/chunks/studio-mgx8yhnz.js +0 -64
- package/dist/chunks/studio-mpb04y1d.js +0 -6
- package/dist/chunks/studio-n17mty64.js +0 -5
- package/dist/chunks/studio-nwh2eqsk.js +0 -6
- package/dist/chunks/studio-q1h883bt.js +0 -16
- package/dist/chunks/studio-q4tv82h7.js +0 -9
- package/dist/chunks/studio-qpqa7vk3.js +0 -5
- package/dist/chunks/studio-qqz8e5gk.js +0 -5
- package/dist/chunks/studio-qvasen3f.js +0 -5
- package/dist/chunks/studio-rggdb3hm.js +0 -5
- package/dist/chunks/studio-sghy936h.js +0 -4
- package/dist/chunks/studio-skprc6ef.js +0 -5
- package/dist/chunks/studio-tt2nactf.js +0 -5
- package/dist/chunks/studio-tyasmc39.js +0 -5
- package/dist/chunks/studio-vk9ezads.js +0 -5
- package/dist/chunks/studio-vzacdfsc.js +0 -4
- package/dist/chunks/studio-w4c0xmrw.js +0 -5
- package/dist/chunks/studio-wfjqhhbk.js +0 -5
- package/dist/chunks/studio-wgh5kxpj.js +0 -5
- package/dist/chunks/studio-xasj0796.js +0 -5
- package/dist/chunks/studio-y78s8r2n.js +0 -5
- package/dist/chunks/studio-z8w183sh.js +0 -5
- package/dist/chunks/studio-zscd9ty4.js +0 -928
- package/dist/chunks/studio-zxp13sss.js +0 -7
- package/dist/chunks/studio-zygnmm01.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-gr0m4dzr.js +0 -14
- package/dist/chunks/workspace-m15qtcqp.js +0 -4
- package/dist/chunks/ws-client-nf61frr1.js +0 -4
package/src/surfaces/dialog.ts
CHANGED
|
@@ -25,27 +25,12 @@
|
|
|
25
25
|
import { reactive } from "../reactivity";
|
|
26
26
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
27
27
|
import { overlayRegion, REGION_ATTR } from "../ui/regions";
|
|
28
|
-
import { close
|
|
28
|
+
import { close, showModal } from "@jxsuite/ui/behaviors/dialog";
|
|
29
29
|
import { selectValue } from "@jxsuite/ui/behaviors/textfield";
|
|
30
30
|
import dialogDoc from "./dialog.json";
|
|
31
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
32
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
31
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
33
32
|
|
|
34
|
-
registerSurface("dialog", dialogDoc
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* One option of a prompt's choice.
|
|
38
|
-
*
|
|
39
|
-
* There is no `selected` here, and its absence is the contract rather than an omission: `jx-select`
|
|
40
|
-
* is a native `<select>`, and the reader's first pick sets an option's dirtiness flag, after which
|
|
41
|
-
* the `selected` content attribute stops moving selectedness (`ui.md` §5.1). A projection that
|
|
42
|
-
* marked a row would be right until the first pick and wrong after it. The chosen row is named by
|
|
43
|
-
* `chosen`, once, beside the list.
|
|
44
|
-
*/
|
|
45
|
-
export interface DialogChoiceOption {
|
|
46
|
-
value: string;
|
|
47
|
-
label: string;
|
|
48
|
-
}
|
|
33
|
+
registerSurface("dialog", dialogDoc);
|
|
49
34
|
|
|
50
35
|
/** What a flow hands the surface. Everything is a projection; the flow keeps the state machine. */
|
|
51
36
|
export interface DialogSurfaceOptions {
|
|
@@ -61,8 +46,15 @@ export interface DialogSurfaceOptions {
|
|
|
61
46
|
message?: string;
|
|
62
47
|
/** Render a richer body into the document's island, once the element is ready. */
|
|
63
48
|
island?: (host: HTMLElement) => void;
|
|
64
|
-
/**
|
|
65
|
-
|
|
49
|
+
/**
|
|
50
|
+
* A `jx-select` above the field, and which of its rows is chosen. The rows carry no `selected`,
|
|
51
|
+
* and that absence is the contract rather than an omission: `jx-select` is a native `<select>`,
|
|
52
|
+
* and the reader's first pick sets an option's dirtiness flag, after which the `selected` content
|
|
53
|
+
* attribute stops moving selectedness (`ui.md` §5.1). A projection that marked a row would be
|
|
54
|
+
* right until the first pick and wrong after it. The chosen row is named by `chosen`, once,
|
|
55
|
+
* beside the list.
|
|
56
|
+
*/
|
|
57
|
+
choice?: { label: string; options: SurfaceOption[]; chosen: string };
|
|
66
58
|
/** The prompt's field. */
|
|
67
59
|
field?: {
|
|
68
60
|
value: string;
|
|
@@ -104,7 +96,7 @@ export interface DialogSurfacePatch {
|
|
|
104
96
|
placeholder?: string;
|
|
105
97
|
invalid?: boolean;
|
|
106
98
|
error?: string;
|
|
107
|
-
options?:
|
|
99
|
+
options?: SurfaceOption[];
|
|
108
100
|
chosen?: string;
|
|
109
101
|
}
|
|
110
102
|
|
|
@@ -118,7 +110,7 @@ export interface DialogSurfaceHandle {
|
|
|
118
110
|
close: () => void;
|
|
119
111
|
}
|
|
120
112
|
|
|
121
|
-
interface DialogScope
|
|
113
|
+
interface DialogScope {
|
|
122
114
|
headline: string;
|
|
123
115
|
confirmLabel: string;
|
|
124
116
|
secondaryLabel: string;
|
|
@@ -129,7 +121,7 @@ interface DialogScope extends Record<string, unknown> {
|
|
|
129
121
|
hasMessage: boolean;
|
|
130
122
|
hasChoice: boolean;
|
|
131
123
|
choiceLabel: string;
|
|
132
|
-
options:
|
|
124
|
+
options: SurfaceOption[];
|
|
133
125
|
hasField: boolean;
|
|
134
126
|
multiline: boolean;
|
|
135
127
|
rows: string;
|
|
@@ -195,7 +187,7 @@ export function openDialogSurface(options: DialogSurfaceOptions): DialogSurfaceH
|
|
|
195
187
|
slot.setAttribute(REGION_ATTR, overlayRegion("dialog", options.region));
|
|
196
188
|
options.layer.append(slot);
|
|
197
189
|
|
|
198
|
-
const scope = reactive<DialogScope>({
|
|
190
|
+
const scope: DialogScope = reactive<DialogScope>({
|
|
199
191
|
cancel: () => {
|
|
200
192
|
options.onCancel();
|
|
201
193
|
},
|
|
@@ -236,10 +228,14 @@ export function openDialogSurface(options: DialogSurfaceOptions): DialogSurfaceH
|
|
|
236
228
|
secondaryLabel: options.secondaryLabel ?? "",
|
|
237
229
|
size: options.size ?? "sm",
|
|
238
230
|
value: options.field?.value ?? "",
|
|
239
|
-
})
|
|
231
|
+
});
|
|
240
232
|
|
|
241
233
|
let handle: SurfaceHandle | null = null;
|
|
242
234
|
let closed = false;
|
|
235
|
+
/* Read through a call, not the bare binding: `close()` can run while the mount is awaiting the
|
|
236
|
+
element, and a direct `closed` test after that `await` would be narrowed to the value the test
|
|
237
|
+
before it saw. */
|
|
238
|
+
const isClosed = (): boolean => closed;
|
|
243
239
|
/* Closing while the element is still rendering must not leave `ready` waiting on a `jx-ready`
|
|
244
240
|
a disposed element will never send, so the wait races against the close. */
|
|
245
241
|
let abort: () => void = () => {};
|
|
@@ -248,14 +244,16 @@ export function openDialogSurface(options: DialogSurfaceOptions): DialogSurfaceH
|
|
|
248
244
|
});
|
|
249
245
|
const mounted = mountSurface("dialog", scope, slot);
|
|
250
246
|
const ready = mounted.then(async (surface) => {
|
|
247
|
+
/* SAFETY: `dialog.json`'s root definition is a `jx-dialog` element, so the runtime
|
|
248
|
+
mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
251
249
|
const element = surface.root as HTMLElement;
|
|
252
|
-
if (
|
|
250
|
+
if (isClosed()) {
|
|
253
251
|
surface.dispose();
|
|
254
252
|
return element;
|
|
255
253
|
}
|
|
256
254
|
handle = surface;
|
|
257
255
|
await Promise.race([whenReady(element), aborted]);
|
|
258
|
-
if (
|
|
256
|
+
if (isClosed()) {
|
|
259
257
|
return element;
|
|
260
258
|
}
|
|
261
259
|
options.island?.(element.querySelector<HTMLElement>('[part="island"]') ?? element);
|
|
@@ -284,7 +282,7 @@ export function openDialogSurface(options: DialogSurfaceOptions): DialogSurfaceH
|
|
|
284
282
|
const element = handle?.root;
|
|
285
283
|
if (element instanceof HTMLElement) {
|
|
286
284
|
// The platform's close first, so focus goes back where it was; then the document goes.
|
|
287
|
-
|
|
285
|
+
close(element);
|
|
288
286
|
}
|
|
289
287
|
// A mount that has not landed yet is disposed by `ready` when it does.
|
|
290
288
|
handle?.dispose();
|
|
@@ -18,10 +18,9 @@
|
|
|
18
18
|
import { reactive } from "../reactivity";
|
|
19
19
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
20
20
|
import diffToolbarDoc from "./diff-toolbar.json";
|
|
21
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
22
21
|
import type { SurfaceHandle } from "../ui/surface";
|
|
23
22
|
|
|
24
|
-
registerSurface("diff-toolbar", diffToolbarDoc
|
|
23
|
+
registerSurface("diff-toolbar", diffToolbarDoc);
|
|
25
24
|
|
|
26
25
|
/** Everything the bar draws, as one value. Every field is already a string or a boolean. */
|
|
27
26
|
export interface DiffToolbarView {
|
|
@@ -66,7 +65,7 @@ export interface DiffToolbarSurfaceHandle {
|
|
|
66
65
|
}
|
|
67
66
|
|
|
68
67
|
/** The scope the document reads: {@link DiffToolbarView} plus the actions its controls call. */
|
|
69
|
-
interface DiffToolbarScope extends
|
|
68
|
+
interface DiffToolbarScope extends DiffToolbarView, DiffToolbarActions {}
|
|
70
69
|
|
|
71
70
|
/** Write a projection into the scope. */
|
|
72
71
|
function project(scope: DiffToolbarScope, view: DiffToolbarView): void {
|
|
@@ -98,7 +97,7 @@ export function mountDiffToolbarSurface(
|
|
|
98
97
|
actions: DiffToolbarActions,
|
|
99
98
|
): DiffToolbarSurfaceHandle {
|
|
100
99
|
host.replaceChildren();
|
|
101
|
-
const scope = reactive<DiffToolbarScope>({
|
|
100
|
+
const scope: DiffToolbarScope = reactive<DiffToolbarScope>({
|
|
102
101
|
codeChecked: "false",
|
|
103
102
|
countLabel: "",
|
|
104
103
|
degraded: "hidden",
|
|
@@ -113,18 +112,21 @@ export function mountDiffToolbarSurface(
|
|
|
113
112
|
stepper: "hidden",
|
|
114
113
|
viewMode: "choice",
|
|
115
114
|
visualChecked: "true",
|
|
116
|
-
})
|
|
115
|
+
});
|
|
117
116
|
project(scope, view);
|
|
118
117
|
|
|
119
118
|
let mounted: SurfaceHandle | null = null;
|
|
120
119
|
let disposed = false;
|
|
121
120
|
const ready = mountSurface("diff-toolbar", scope, host).then((surface) => {
|
|
121
|
+
/* SAFETY: `diff-toolbar.json`'s root definition is a `div` element, so the runtime mounts an
|
|
122
|
+
HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
123
|
+
const root = surface.root as HTMLElement;
|
|
122
124
|
if (disposed) {
|
|
123
125
|
surface.dispose();
|
|
124
|
-
return
|
|
126
|
+
return root;
|
|
125
127
|
}
|
|
126
128
|
mounted = surface;
|
|
127
|
-
return
|
|
129
|
+
return root;
|
|
128
130
|
});
|
|
129
131
|
|
|
130
132
|
return {
|
|
@@ -27,16 +27,9 @@
|
|
|
27
27
|
import { reactive } from "../reactivity";
|
|
28
28
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
29
29
|
import docHeaderDoc from "./doc-header.json";
|
|
30
|
-
import type {
|
|
31
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
30
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
32
31
|
|
|
33
|
-
registerSurface("doc-header", docHeaderDoc
|
|
34
|
-
|
|
35
|
-
/** One choice in a row's picker. The shape `jx-select` reads. */
|
|
36
|
-
export interface DocHeaderChoice {
|
|
37
|
-
value: string;
|
|
38
|
-
label: string;
|
|
39
|
-
}
|
|
32
|
+
registerSurface("doc-header", docHeaderDoc);
|
|
40
33
|
|
|
41
34
|
/**
|
|
42
35
|
* One row of the card, as the document reads it.
|
|
@@ -45,7 +38,7 @@ export interface DocHeaderChoice {
|
|
|
45
38
|
* `$switch` chooses on one: a row that omitted `options` would leave the picker case reading an
|
|
46
39
|
* absent path.
|
|
47
40
|
*/
|
|
48
|
-
export interface DocHeaderRow
|
|
41
|
+
export interface DocHeaderRow {
|
|
49
42
|
/** The row's identity: the repeater's key, and the argument every action is given. */
|
|
50
43
|
key: string;
|
|
51
44
|
/** The name on `data-prop` — what a reader, a screenshot region and the inspector call it. */
|
|
@@ -68,7 +61,7 @@ export interface DocHeaderRow extends Record<string, unknown> {
|
|
|
68
61
|
/** A text row's placeholder. Empty draws none. */
|
|
69
62
|
placeholder: string;
|
|
70
63
|
/** A picker's rows, in the order they are offered. Empty on every other kind. */
|
|
71
|
-
options:
|
|
64
|
+
options: SurfaceOption[];
|
|
72
65
|
/** A sentence under the control — an empty collection, or a listing that failed. */
|
|
73
66
|
note: string;
|
|
74
67
|
/** Whether {@link DocHeaderRow.note} has anything in it; `$switch` is the document's conditional. */
|
|
@@ -80,7 +73,7 @@ export interface DocHeaderRow extends Record<string, unknown> {
|
|
|
80
73
|
}
|
|
81
74
|
|
|
82
75
|
/** One `$head` entry the disclosure lists, read-only. */
|
|
83
|
-
export interface DocHeaderRawEntry
|
|
76
|
+
export interface DocHeaderRawEntry {
|
|
84
77
|
/** Unique within one document — the repeater's key. */
|
|
85
78
|
key: string;
|
|
86
79
|
/** The entry as markup, e.g. `<meta name="author">`. */
|
|
@@ -134,7 +127,7 @@ export interface DocHeaderActions {
|
|
|
134
127
|
/** Open the OS file picker for a media row and assign what comes back. */
|
|
135
128
|
upload: (key: string) => void;
|
|
136
129
|
/** Open the media browser under the button that was pressed. */
|
|
137
|
-
browse: (key: string, anchor:
|
|
130
|
+
browse: (key: string, anchor: EventTarget | null) => void;
|
|
138
131
|
/** Run the `document.openSeo` command — the door to Search appearance. */
|
|
139
132
|
openSeo: () => void;
|
|
140
133
|
/** Remember that the Raw head tags disclosure was opened or closed. */
|
|
@@ -153,7 +146,7 @@ export interface DocHeaderSurface {
|
|
|
153
146
|
}
|
|
154
147
|
|
|
155
148
|
/** The scope the document reads: the view plus the actions, flat. */
|
|
156
|
-
interface DocHeaderScope extends
|
|
149
|
+
interface DocHeaderScope extends DocHeaderView, DocHeaderActions {}
|
|
157
150
|
|
|
158
151
|
/** Write a whole view into the scope. Assignment only — the mount is never rebuilt for a repaint. */
|
|
159
152
|
function project(scope: DocHeaderScope, view: DocHeaderView): void {
|
|
@@ -184,7 +177,7 @@ export function mountDocHeaderSurface(
|
|
|
184
177
|
view: DocHeaderView,
|
|
185
178
|
actions: DocHeaderActions,
|
|
186
179
|
): DocHeaderSurface {
|
|
187
|
-
const scope = reactive<DocHeaderScope>({
|
|
180
|
+
const scope: DocHeaderScope = reactive<DocHeaderScope>({
|
|
188
181
|
...actions,
|
|
189
182
|
collection: "Document",
|
|
190
183
|
expanded: true,
|
|
@@ -195,7 +188,7 @@ export function mountDocHeaderSurface(
|
|
|
195
188
|
region: "",
|
|
196
189
|
route: "",
|
|
197
190
|
rows: [],
|
|
198
|
-
})
|
|
191
|
+
});
|
|
199
192
|
project(scope, view);
|
|
200
193
|
|
|
201
194
|
host.replaceChildren();
|
|
@@ -218,9 +211,7 @@ export function mountDocHeaderSurface(
|
|
|
218
211
|
stage that redrew took the card's root away without telling anyone. */
|
|
219
212
|
connected: () =>
|
|
220
213
|
!disposed &&
|
|
221
|
-
(mounted === null
|
|
222
|
-
? host.childNodes.length === 0
|
|
223
|
-
: (mounted.root as Node).parentNode === host),
|
|
214
|
+
(mounted === null ? host.childNodes.length === 0 : mounted.root.parentNode === host),
|
|
224
215
|
dispose() {
|
|
225
216
|
disposed = true;
|
|
226
217
|
mounted?.dispose();
|
|
@@ -28,13 +28,12 @@ import { reactive } from "../reactivity";
|
|
|
28
28
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
29
29
|
import emptyStateDoc from "./empty-state.json";
|
|
30
30
|
import type { EmptyStateSpec } from "../panels/empty-state";
|
|
31
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
32
31
|
import type { SurfaceHandle } from "../ui/surface";
|
|
33
32
|
|
|
34
|
-
registerSurface("empty-state", emptyStateDoc
|
|
33
|
+
registerSurface("empty-state", emptyStateDoc);
|
|
35
34
|
|
|
36
35
|
/** One button, as the document draws it: a key, a word, and whether it can act. */
|
|
37
|
-
interface EmptyStateActionRow
|
|
36
|
+
interface EmptyStateActionRow {
|
|
38
37
|
/** The repeater's key and what a press is addressed with — this action's slot in the list. */
|
|
39
38
|
id: string;
|
|
40
39
|
label: string;
|
|
@@ -44,10 +43,8 @@ interface EmptyStateActionRow extends Record<string, unknown> {
|
|
|
44
43
|
/**
|
|
45
44
|
* What the document draws, with every branch already decided.
|
|
46
45
|
*
|
|
47
|
-
* Named apart from the scope
|
|
48
|
-
*
|
|
49
|
-
* and drops every named property — so the projection below would have type-checked against
|
|
50
|
-
* anything.
|
|
46
|
+
* Named apart from the scope, which adds the one callback, so the projection below is checked
|
|
47
|
+
* against exactly the fields the document draws.
|
|
51
48
|
*/
|
|
52
49
|
interface EmptyStateView {
|
|
53
50
|
message: string;
|
|
@@ -59,7 +56,7 @@ interface EmptyStateView {
|
|
|
59
56
|
}
|
|
60
57
|
|
|
61
58
|
/** The scope `empty-state.json` reads. Every field is a value; the document asks no question. */
|
|
62
|
-
interface EmptyStateScope extends
|
|
59
|
+
interface EmptyStateScope extends EmptyStateView {
|
|
63
60
|
runAction: (id: string) => void;
|
|
64
61
|
}
|
|
65
62
|
|
|
@@ -89,12 +86,12 @@ export function createEmptyStateSurface(spec: EmptyStateSpec): EmptyStateSurface
|
|
|
89
86
|
|
|
90
87
|
/** The handlers, held apart from the scope so `runAction` never has to be reassigned. */
|
|
91
88
|
let handlers: (() => void)[] = [];
|
|
92
|
-
const scope = reactive<EmptyStateScope>({
|
|
89
|
+
const scope: EmptyStateScope = reactive<EmptyStateScope>({
|
|
93
90
|
...project(spec),
|
|
94
91
|
runAction: (id: string) => {
|
|
95
92
|
handlers[Number(id)]?.();
|
|
96
93
|
},
|
|
97
|
-
})
|
|
94
|
+
});
|
|
98
95
|
handlers = handlersOf(spec);
|
|
99
96
|
|
|
100
97
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -27,13 +27,14 @@
|
|
|
27
27
|
* @docs studio/projects/content-types
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
|
+
import { isString } from "@jxsuite/schema/guards";
|
|
30
31
|
import { reactive } from "../reactivity";
|
|
31
32
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
32
33
|
import entryEditorDoc from "./entry-editor.json";
|
|
33
|
-
import type {
|
|
34
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
34
35
|
import type { SurfaceHandle } from "../ui/surface";
|
|
35
36
|
|
|
36
|
-
registerSurface("entry-editor", entryEditorDoc
|
|
37
|
+
registerSurface("entry-editor", entryEditorDoc);
|
|
37
38
|
|
|
38
39
|
/** Everything the document draws, as one value. */
|
|
39
40
|
export interface EntryEditorView {
|
|
@@ -89,7 +90,7 @@ export interface EntryEditorSurfaceHandle {
|
|
|
89
90
|
}
|
|
90
91
|
|
|
91
92
|
/** The scope the document reads: the view plus the actions, flat. */
|
|
92
|
-
interface EntryEditorScope extends
|
|
93
|
+
interface EntryEditorScope extends EntryEditorView, EntryEditorActions {}
|
|
93
94
|
|
|
94
95
|
/** Write a whole view into the scope. Assignment only — the mount is never rebuilt for a repaint. */
|
|
95
96
|
function project(scope: EntryEditorScope, view: EntryEditorView): void {
|
|
@@ -107,10 +108,9 @@ function project(scope: EntryEditorScope, view: EntryEditorView): void {
|
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
/** The `part` a node was authored with, or `""` — the only thing this adapter asks about a node. */
|
|
110
|
-
function partOf(def:
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
return typeof part === "string" ? part : "";
|
|
111
|
+
function partOf(def: JxElement | string): string {
|
|
112
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
113
|
+
return isString(part) ? part : "";
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
/**
|
|
@@ -133,7 +133,7 @@ export function mountEntryEditorSurface(
|
|
|
133
133
|
islands: EntryEditorIslands,
|
|
134
134
|
): EntryEditorSurfaceHandle {
|
|
135
135
|
host.replaceChildren();
|
|
136
|
-
const scope = reactive<EntryEditorScope>({
|
|
136
|
+
const scope: EntryEditorScope = reactive<EntryEditorScope>({
|
|
137
137
|
collection: "",
|
|
138
138
|
draft: false,
|
|
139
139
|
draftAxis: "hidden",
|
|
@@ -147,7 +147,7 @@ export function mountEntryEditorSurface(
|
|
|
147
147
|
region: "",
|
|
148
148
|
setDraft: actions.setDraft,
|
|
149
149
|
stage: "empty",
|
|
150
|
-
})
|
|
150
|
+
});
|
|
151
151
|
project(scope, view);
|
|
152
152
|
|
|
153
153
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -163,12 +163,15 @@ export function mountEntryEditorSurface(
|
|
|
163
163
|
}
|
|
164
164
|
},
|
|
165
165
|
}).then((surface) => {
|
|
166
|
+
/* SAFETY: `entry-editor.json`'s root definition is a `div` element, so the runtime mounts an
|
|
167
|
+
HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
168
|
+
const root = surface.root as HTMLElement;
|
|
166
169
|
if (disposed) {
|
|
167
170
|
surface.dispose();
|
|
168
|
-
return
|
|
171
|
+
return root;
|
|
169
172
|
}
|
|
170
173
|
mounted = surface;
|
|
171
|
-
return
|
|
174
|
+
return root;
|
|
172
175
|
});
|
|
173
176
|
|
|
174
177
|
return {
|
|
@@ -31,26 +31,12 @@
|
|
|
31
31
|
import { reactive } from "../reactivity";
|
|
32
32
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
33
33
|
import expressionEditorDoc from "./expression-editor.json";
|
|
34
|
-
import type {
|
|
35
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
34
|
+
import type { SurfaceHandle, SurfaceOption, SurfaceOptionGroup } from "../ui/surface";
|
|
36
35
|
|
|
37
|
-
registerSurface("expression-editor", expressionEditorDoc
|
|
38
|
-
|
|
39
|
-
/** A closed list of choices, in the shape the kit's select reads. */
|
|
40
|
-
export interface ExprOption {
|
|
41
|
-
value: string;
|
|
42
|
-
label: string;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/** A delimited run of choices — the kit's own `optgroup`, which draws both halves of the rule. */
|
|
46
|
-
export interface ExprSelectGroup {
|
|
47
|
-
id: string;
|
|
48
|
-
label: string;
|
|
49
|
-
rows: ExprOption[];
|
|
50
|
-
}
|
|
36
|
+
registerSurface("expression-editor", expressionEditorDoc);
|
|
51
37
|
|
|
52
38
|
/** One chip of the pipeline, as the document draws it. */
|
|
53
|
-
export interface ExprChipView
|
|
39
|
+
export interface ExprChipView {
|
|
54
40
|
/** The joined node path: the repeater's key, and what a click reports back to the flow. */
|
|
55
41
|
key: string;
|
|
56
42
|
label: string;
|
|
@@ -83,7 +69,7 @@ export type ExprLead = "none" | "arg" | "case" | "default";
|
|
|
83
69
|
* Every field is a string, a flag or a list: the document asks no question about an expression, and
|
|
84
70
|
* there is no branch in it that the walk has not already taken.
|
|
85
71
|
*/
|
|
86
|
-
export interface ExprRowView
|
|
72
|
+
export interface ExprRowView {
|
|
87
73
|
/**
|
|
88
74
|
* Unique within one editor, and the repeater's key. It is the node's own path plus the slot it
|
|
89
75
|
* fills, so a row that survives an edit keeps its node — which is what stops a keystroke in one
|
|
@@ -111,19 +97,19 @@ export interface ExprRowView extends Record<string, unknown> {
|
|
|
111
97
|
/** The accessible name of the row's icon-only control. */
|
|
112
98
|
title: string;
|
|
113
99
|
/** An `operator` row's grouped operator list. */
|
|
114
|
-
groups:
|
|
100
|
+
groups: SurfaceOptionGroup[];
|
|
115
101
|
/** An `operator` row offers the catalog beside its picker; a nested one does not. */
|
|
116
102
|
catalog: boolean;
|
|
117
103
|
/** Which rung an `operand` row shows. */
|
|
118
104
|
source: ExprSource;
|
|
119
105
|
/** The rungs on offer. Empty means the slot admits one shape, so there is nothing to choose. */
|
|
120
|
-
sourceOptions:
|
|
106
|
+
sourceOptions: SurfaceOption[];
|
|
121
107
|
/** Whether the rung picker is drawn at all — `sourceOptions` non-empty, said as a flag. */
|
|
122
108
|
chooser: boolean;
|
|
123
109
|
/** `string`, `number`, `boolean` or `null` — what the literal type picker holds. */
|
|
124
110
|
literalType: string;
|
|
125
111
|
/** The literal types on offer. A separate list from {@link sourceOptions}: two questions. */
|
|
126
|
-
typeOptions:
|
|
112
|
+
typeOptions: SurfaceOption[];
|
|
127
113
|
/** Which literal control follows the type picker: `text`, `number`, `bool` or `null`. */
|
|
128
114
|
literal: string;
|
|
129
115
|
/** What a text literal, a number literal or a ref picker holds. */
|
|
@@ -131,9 +117,9 @@ export interface ExprRowView extends Record<string, unknown> {
|
|
|
131
117
|
/** What a boolean literal holds. */
|
|
132
118
|
checked: boolean;
|
|
133
119
|
/** The signals this slot may bind to. */
|
|
134
|
-
refOptions:
|
|
120
|
+
refOptions: SurfaceOption[];
|
|
135
121
|
/** The event refs, as their own named run. Empty where the position admits none. */
|
|
136
|
-
refGroups:
|
|
122
|
+
refGroups: SurfaceOptionGroup[];
|
|
137
123
|
/** Which leading cell the row carries. */
|
|
138
124
|
lead: ExprLead;
|
|
139
125
|
/** An arg's positional name, or the `default` case's word. */
|
|
@@ -181,7 +167,7 @@ export interface ExpressionActions {
|
|
|
181
167
|
pickChip: (key: string) => void;
|
|
182
168
|
}
|
|
183
169
|
|
|
184
|
-
interface ExpressionScope extends
|
|
170
|
+
interface ExpressionScope extends ExpressionActions {
|
|
185
171
|
rows: ExprRowView[];
|
|
186
172
|
}
|
|
187
173
|
|
|
@@ -225,7 +211,7 @@ export function renderExpressionEditorSurface(
|
|
|
225
211
|
}
|
|
226
212
|
takeDown(host, existing);
|
|
227
213
|
host.textContent = "";
|
|
228
|
-
const scope = reactive({ ...actions, rows })
|
|
214
|
+
const scope: ExpressionScope = reactive<ExpressionScope>({ ...actions, rows });
|
|
229
215
|
const record: Mounted = { disposed: false, handle: null, scope };
|
|
230
216
|
mounts.set(host, record);
|
|
231
217
|
/* No race to arbitrate: a repaint arriving while this is in flight takes the branch above — a
|
|
@@ -37,14 +37,15 @@
|
|
|
37
37
|
* @docs studio/interface
|
|
38
38
|
*/
|
|
39
39
|
|
|
40
|
+
import { isNonNullObject, isString } from "@jxsuite/schema/guards";
|
|
40
41
|
import { reactive } from "../reactivity";
|
|
41
42
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
42
43
|
import filesPanelDoc from "./files-panel.json";
|
|
43
|
-
import type {
|
|
44
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
44
45
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
45
46
|
import type { SurfaceHandle } from "../ui/surface";
|
|
46
47
|
|
|
47
|
-
registerSurface("files-panel", filesPanelDoc
|
|
48
|
+
registerSurface("files-panel", filesPanelDoc);
|
|
48
49
|
|
|
49
50
|
/**
|
|
50
51
|
* One row the tree draws, with every field already a string.
|
|
@@ -170,7 +171,7 @@ export interface FilesPanelSurfaceHandle {
|
|
|
170
171
|
}
|
|
171
172
|
|
|
172
173
|
/** The scope the document reads: the projection, plus everything a control can ask for. */
|
|
173
|
-
interface FilesPanelScope extends
|
|
174
|
+
interface FilesPanelScope extends FilesPanelValues, FilesPanelActions {}
|
|
174
175
|
|
|
175
176
|
/** Write a projection into the scope. Assignment by assignment, so an unchanged field is inert. */
|
|
176
177
|
function project(scope: FilesPanelScope, values: FilesPanelValues): void {
|
|
@@ -214,15 +215,28 @@ export function emptyFilesPanelValues(): FilesPanelValues {
|
|
|
214
215
|
|
|
215
216
|
/** The `part` a node's definition carries, or `""` for a text node or an unmarked element. */
|
|
216
217
|
function partOf(def: JxElement | string): string {
|
|
217
|
-
const part =
|
|
218
|
-
return
|
|
218
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
219
|
+
return isString(part) ? part : "";
|
|
219
220
|
}
|
|
220
221
|
|
|
221
|
-
/**
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
222
|
+
/**
|
|
223
|
+
* The path and type of the mapped row a node was rendered inside, or null when it was not in one.
|
|
224
|
+
* The only mapped array in `files-panel.json` is `#/state/rows`, which `project()` fills from
|
|
225
|
+
* `FilesPanelValues.rows: FileRowView[]`, so a row's item carries both as strings.
|
|
226
|
+
*/
|
|
227
|
+
function mappedRow(state: JxScope | undefined): Pick<FileRowView, "path" | "type"> | null {
|
|
228
|
+
const map = state?.["$map"];
|
|
229
|
+
const item = isNonNullObject(map) && "item" in map ? map.item : undefined;
|
|
230
|
+
if (
|
|
231
|
+
!isNonNullObject(item) ||
|
|
232
|
+
!("path" in item) ||
|
|
233
|
+
!isString(item.path) ||
|
|
234
|
+
!("type" in item) ||
|
|
235
|
+
!isString(item.type)
|
|
236
|
+
) {
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
return { path: item.path, type: item.type };
|
|
226
240
|
}
|
|
227
241
|
|
|
228
242
|
/**
|
|
@@ -237,10 +251,10 @@ export function mountFilesPanelSurface(
|
|
|
237
251
|
values: FilesPanelValues,
|
|
238
252
|
actions: FilesPanelActions,
|
|
239
253
|
): FilesPanelSurfaceHandle {
|
|
240
|
-
const scope = reactive<FilesPanelScope>({
|
|
254
|
+
const scope: FilesPanelScope = reactive<FilesPanelScope>({
|
|
241
255
|
...emptyFilesPanelValues(),
|
|
242
256
|
...actions,
|
|
243
|
-
})
|
|
257
|
+
});
|
|
244
258
|
project(scope, values);
|
|
245
259
|
|
|
246
260
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -286,8 +300,7 @@ export function mountFilesPanelSurface(
|
|
|
286
300
|
answer is simply whether this handle is still wanted — answering no would start a second
|
|
287
301
|
mount racing the first. Once mounted, the question is whether the root is still where it was
|
|
288
302
|
put: a Navigator that painted another panel cleared this document out from under it. */
|
|
289
|
-
connected: () =>
|
|
290
|
-
!disposed && (mounted === null || (mounted.root as Node).parentNode === container),
|
|
303
|
+
connected: () => !disposed && (mounted === null || mounted.root.parentNode === container),
|
|
291
304
|
dispose() {
|
|
292
305
|
disposed = true;
|
|
293
306
|
mounted?.dispose();
|
|
@@ -39,9 +39,8 @@ import formulaPaletteDoc from "./formula-palette.json";
|
|
|
39
39
|
|
|
40
40
|
import type { FormulaCatalogEntry } from "../ui/formula-catalog";
|
|
41
41
|
import type { SurfaceHandle } from "../ui/surface";
|
|
42
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
43
42
|
|
|
44
|
-
registerSurface("formula-palette", formulaPaletteDoc
|
|
43
|
+
registerSurface("formula-palette", formulaPaletteDoc);
|
|
45
44
|
|
|
46
45
|
/** The popover slot id, and so the `overlay.popover:formula-palette` region the shots address. */
|
|
47
46
|
const SLOT = "formula-palette";
|
|
@@ -81,7 +80,7 @@ interface GroupProjection {
|
|
|
81
80
|
}
|
|
82
81
|
|
|
83
82
|
/** The scope `formula-palette.json` reads, and the six things a gesture asks of this module. */
|
|
84
|
-
interface FormulaPaletteScope
|
|
83
|
+
interface FormulaPaletteScope {
|
|
85
84
|
open: boolean;
|
|
86
85
|
query: string;
|
|
87
86
|
groups: GroupProjection[];
|
|
@@ -106,7 +105,7 @@ interface FormulaPaletteScope extends Record<string, unknown> {
|
|
|
106
105
|
move: (delta: number) => void;
|
|
107
106
|
activate: () => void;
|
|
108
107
|
hover: (index: number) => void;
|
|
109
|
-
activateRow: (value:
|
|
108
|
+
activateRow: (value: string) => void;
|
|
110
109
|
}
|
|
111
110
|
|
|
112
111
|
let _open = false;
|
|
@@ -228,7 +227,7 @@ function scope(): FormulaPaletteScope {
|
|
|
228
227
|
},
|
|
229
228
|
open: false,
|
|
230
229
|
query: "",
|
|
231
|
-
})
|
|
230
|
+
});
|
|
232
231
|
return _scope;
|
|
233
232
|
}
|
|
234
233
|
|