@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
|
@@ -23,14 +23,15 @@
|
|
|
23
23
|
* @docs studio/interface
|
|
24
24
|
*/
|
|
25
25
|
|
|
26
|
+
import { isJsonObject, isString } from "@jxsuite/schema/guards";
|
|
26
27
|
import { reactive } from "../reactivity";
|
|
27
28
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
28
29
|
import inspectorDockDoc from "./inspector-dock.json";
|
|
29
|
-
import type {
|
|
30
|
+
import type { JsonObject, JxElement } from "@jxsuite/schema/types";
|
|
30
31
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
31
32
|
import type { SurfaceHandle } from "../ui/surface";
|
|
32
33
|
|
|
33
|
-
registerSurface("inspector-dock", inspectorDockDoc
|
|
34
|
+
registerSurface("inspector-dock", inspectorDockDoc);
|
|
34
35
|
|
|
35
36
|
/** One tab of the dock, as the document draws it. Every field is a value. */
|
|
36
37
|
export interface InspectorTabView {
|
|
@@ -81,7 +82,7 @@ export interface InspectorDockHandle {
|
|
|
81
82
|
}
|
|
82
83
|
|
|
83
84
|
/** The scope the document reads. */
|
|
84
|
-
interface InspectorDockScope extends
|
|
85
|
+
interface InspectorDockScope extends InspectorDockValues {
|
|
85
86
|
selectTab: (id: string) => void;
|
|
86
87
|
}
|
|
87
88
|
|
|
@@ -95,15 +96,15 @@ function project(scope: InspectorDockScope, values: InspectorDockValues): void {
|
|
|
95
96
|
|
|
96
97
|
/** The `part` a node was declared with, or the empty string. */
|
|
97
98
|
function partOf(def: JxElement | string): string {
|
|
98
|
-
const part =
|
|
99
|
-
return
|
|
99
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
100
|
+
return isString(part) ? part : "";
|
|
100
101
|
}
|
|
101
102
|
|
|
102
103
|
/** The `$map` item a node was rendered inside, if it was rendered inside one. */
|
|
103
|
-
function mapItem(state: JxScope | undefined):
|
|
104
|
-
const map = state?.["$map"]
|
|
105
|
-
const item = map
|
|
106
|
-
return item
|
|
104
|
+
function mapItem(state: JxScope | undefined): JsonObject | null {
|
|
105
|
+
const map = state?.["$map"];
|
|
106
|
+
const item = isJsonObject(map) ? map["item"] : undefined;
|
|
107
|
+
return isJsonObject(item) ? item : null;
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
/**
|
|
@@ -119,10 +120,10 @@ export function mountInspectorDock(
|
|
|
119
120
|
actions: InspectorDockActions,
|
|
120
121
|
options: InspectorDockOptions,
|
|
121
122
|
): InspectorDockHandle {
|
|
122
|
-
const scope = reactive<InspectorDockScope>({
|
|
123
|
+
const scope: InspectorDockScope = reactive<InspectorDockScope>({
|
|
123
124
|
...values,
|
|
124
125
|
selectTab: actions.selectTab,
|
|
125
|
-
})
|
|
126
|
+
});
|
|
126
127
|
|
|
127
128
|
container.textContent = "";
|
|
128
129
|
// @ts-expect-error -- _$litPart$ is lit's private render-part marker, not in the DOM types
|
|
@@ -136,7 +137,7 @@ export function mountInspectorDock(
|
|
|
136
137
|
return;
|
|
137
138
|
}
|
|
138
139
|
const key = mapItem(state)?.["key"];
|
|
139
|
-
if (
|
|
140
|
+
if (isString(key) && key !== "") {
|
|
140
141
|
options.onBody(key, element);
|
|
141
142
|
}
|
|
142
143
|
},
|
package/src/surfaces/jump-bar.ts
CHANGED
|
@@ -23,10 +23,9 @@
|
|
|
23
23
|
import { reactive } from "../reactivity";
|
|
24
24
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
25
25
|
import jumpBarDoc from "./jump-bar.json";
|
|
26
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
27
26
|
import type { SurfaceHandle } from "../ui/surface";
|
|
28
27
|
|
|
29
|
-
registerSurface("jump-bar", jumpBarDoc
|
|
28
|
+
registerSurface("jump-bar", jumpBarDoc);
|
|
30
29
|
|
|
31
30
|
/**
|
|
32
31
|
* One step of the address, as the document reads it.
|
|
@@ -35,7 +34,7 @@ registerSurface("jump-bar", jumpBarDoc as unknown as JxDocument);
|
|
|
35
34
|
* and a `$switch` chooses on one: a step that omitted `title` would leave the readout case reading
|
|
36
35
|
* an absent path.
|
|
37
36
|
*/
|
|
38
|
-
export interface ProjectedStep
|
|
37
|
+
export interface ProjectedStep {
|
|
39
38
|
/** Unique within one bar: the repeater's key, and the argument `run` and `choose` receive. */
|
|
40
39
|
key: string;
|
|
41
40
|
/** `project` | `file` | `editor` | `node` — stamped so a test names a step without its text. */
|
|
@@ -73,7 +72,7 @@ export interface JumpBarSurface {
|
|
|
73
72
|
}
|
|
74
73
|
|
|
75
74
|
/** The scope `jump-bar.json` reads. */
|
|
76
|
-
interface JumpBarScope extends
|
|
75
|
+
interface JumpBarScope extends JumpBarActions {
|
|
77
76
|
region: string;
|
|
78
77
|
segments: ProjectedStep[];
|
|
79
78
|
empty: boolean;
|
|
@@ -95,12 +94,12 @@ export function mountJumpBarSurface(
|
|
|
95
94
|
region: string,
|
|
96
95
|
actions: JumpBarActions,
|
|
97
96
|
): JumpBarSurface {
|
|
98
|
-
const scope = reactive<JumpBarScope>({
|
|
97
|
+
const scope: JumpBarScope = reactive<JumpBarScope>({
|
|
99
98
|
...actions,
|
|
100
99
|
empty: true,
|
|
101
100
|
region,
|
|
102
101
|
segments: [],
|
|
103
|
-
})
|
|
102
|
+
});
|
|
104
103
|
|
|
105
104
|
host.replaceChildren();
|
|
106
105
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -24,13 +24,12 @@
|
|
|
24
24
|
import { reactive } from "../reactivity";
|
|
25
25
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
26
26
|
import { overlayRegion, REGION_ATTR } from "../ui/regions";
|
|
27
|
-
import { close
|
|
27
|
+
import { close, showModal } from "@jxsuite/ui/behaviors/dialog";
|
|
28
28
|
import { whenReady } from "./dialog";
|
|
29
29
|
import jxsuiteUpdateDoc from "./jxsuite-update.json";
|
|
30
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
31
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
30
|
+
import type { DialogLayerHandle, SurfaceHandle } from "../ui/surface";
|
|
32
31
|
|
|
33
|
-
registerSurface("jxsuite-update", jxsuiteUpdateDoc
|
|
32
|
+
registerSurface("jxsuite-update", jxsuiteUpdateDoc);
|
|
34
33
|
|
|
35
34
|
/** One package the offer would move. Every field is already the string the row prints. */
|
|
36
35
|
export interface JxsuiteUpdateRow {
|
|
@@ -55,16 +54,7 @@ export interface JxsuiteUpdateSurfaceOptions {
|
|
|
55
54
|
onClosed: () => void;
|
|
56
55
|
}
|
|
57
56
|
|
|
58
|
-
|
|
59
|
-
/** The slot in the dialog layer that carries the region. */
|
|
60
|
-
host: HTMLElement;
|
|
61
|
-
/** Resolves with the `jx-dialog` element once it has rendered and been opened. */
|
|
62
|
-
ready: Promise<HTMLElement>;
|
|
63
|
-
/** Close the dialog (the platform restores focus) and dispose the document. Idempotent. */
|
|
64
|
-
close: () => void;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
interface JxsuiteUpdateScope extends Record<string, unknown> {
|
|
57
|
+
interface JxsuiteUpdateScope {
|
|
68
58
|
packages: JxsuiteUpdateRow[];
|
|
69
59
|
confirm: () => void;
|
|
70
60
|
cancel: () => void;
|
|
@@ -72,9 +62,7 @@ interface JxsuiteUpdateScope extends Record<string, unknown> {
|
|
|
72
62
|
}
|
|
73
63
|
|
|
74
64
|
/** Open the offer. The handle's `ready` resolves once the dialog is showing. */
|
|
75
|
-
export function openJxsuiteUpdateSurface(
|
|
76
|
-
options: JxsuiteUpdateSurfaceOptions,
|
|
77
|
-
): JxsuiteUpdateSurfaceHandle {
|
|
65
|
+
export function openJxsuiteUpdateSurface(options: JxsuiteUpdateSurfaceOptions): DialogLayerHandle {
|
|
78
66
|
const slot = document.createElement("div");
|
|
79
67
|
/* The layer is `pointer-events: none` so a click passes through it when nothing is up, and every
|
|
80
68
|
slot in it turns them back on for its own content. `pointer-events` INHERITS, and the top layer
|
|
@@ -98,8 +86,12 @@ export function openJxsuiteUpdateSurface(
|
|
|
98
86
|
closed = true;
|
|
99
87
|
options.onClosed();
|
|
100
88
|
};
|
|
89
|
+
/* Read through a call, not the bare binding: `close()` can run while the mount is awaiting the
|
|
90
|
+
element, and a direct `closed` test after that `await` would be narrowed to the value the test
|
|
91
|
+
before it saw. */
|
|
92
|
+
const isClosed = (): boolean => closed;
|
|
101
93
|
|
|
102
|
-
const scope = reactive<JxsuiteUpdateScope>({
|
|
94
|
+
const scope: JxsuiteUpdateScope = reactive<JxsuiteUpdateScope>({
|
|
103
95
|
cancel: () => {
|
|
104
96
|
options.onCancel();
|
|
105
97
|
},
|
|
@@ -108,18 +100,20 @@ export function openJxsuiteUpdateSurface(
|
|
|
108
100
|
options.onConfirm();
|
|
109
101
|
},
|
|
110
102
|
packages: options.packages,
|
|
111
|
-
})
|
|
103
|
+
});
|
|
112
104
|
|
|
113
105
|
let mounted: SurfaceHandle | null = null;
|
|
114
106
|
const ready = mountSurface("jxsuite-update", scope, slot).then(async (surface) => {
|
|
115
107
|
mounted = surface;
|
|
108
|
+
/* SAFETY: `jxsuite-update.json`'s root definition is a `jx-dialog` element, so the runtime
|
|
109
|
+
mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
116
110
|
const element = surface.root as HTMLElement;
|
|
117
|
-
if (
|
|
111
|
+
if (isClosed()) {
|
|
118
112
|
surface.dispose();
|
|
119
113
|
return element;
|
|
120
114
|
}
|
|
121
115
|
await whenReady(element);
|
|
122
|
-
if (
|
|
116
|
+
if (isClosed()) {
|
|
123
117
|
return element;
|
|
124
118
|
}
|
|
125
119
|
showModal(element);
|
|
@@ -135,7 +129,7 @@ export function openJxsuiteUpdateSurface(
|
|
|
135
129
|
const element = mounted?.root;
|
|
136
130
|
if (element instanceof HTMLElement) {
|
|
137
131
|
// The platform's close first, so focus goes back where it came from; then the document.
|
|
138
|
-
|
|
132
|
+
close(element);
|
|
139
133
|
}
|
|
140
134
|
// A mount that has not landed yet is disposed by `ready` when it does — `finish` tells it so.
|
|
141
135
|
mounted?.dispose();
|
|
@@ -28,14 +28,16 @@
|
|
|
28
28
|
* @docs studio/projects/browse
|
|
29
29
|
*/
|
|
30
30
|
|
|
31
|
+
import { isJsonObject, isString } from "@jxsuite/schema/guards";
|
|
31
32
|
import { reactive } from "../reactivity";
|
|
32
33
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
34
|
+
import { placeholderBrokenImages } from "../utils/edit-display";
|
|
33
35
|
import libraryDoc from "./library-pane.json";
|
|
34
|
-
import type {
|
|
36
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
35
37
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
36
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
38
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
37
39
|
|
|
38
|
-
registerSurface("library-pane", libraryDoc
|
|
40
|
+
registerSurface("library-pane", libraryDoc);
|
|
39
41
|
|
|
40
42
|
/**
|
|
41
43
|
* Which of nine things the body draws.
|
|
@@ -117,12 +119,6 @@ export interface LibraryChip {
|
|
|
117
119
|
checked: "true" | "false";
|
|
118
120
|
}
|
|
119
121
|
|
|
120
|
-
/** One row of the language facet. */
|
|
121
|
-
export interface LibraryOption {
|
|
122
|
-
value: string;
|
|
123
|
-
label: string;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
122
|
/** Everything the document draws, as one value. */
|
|
127
123
|
export interface LibraryView {
|
|
128
124
|
/** The region id stamped on the root, so the screenshot pipeline can address the Library. */
|
|
@@ -139,7 +135,7 @@ export interface LibraryView {
|
|
|
139
135
|
* chrome that says nothing.
|
|
140
136
|
*/
|
|
141
137
|
localeState: "hidden" | "shown";
|
|
142
|
-
localeOptions:
|
|
138
|
+
localeOptions: SurfaceOption[];
|
|
143
139
|
localeValue: string;
|
|
144
140
|
query: string;
|
|
145
141
|
/** Where an upload lands, as the label's tooltip says it — before the files are chosen. */
|
|
@@ -210,7 +206,7 @@ export interface LibrarySurfaceHandle {
|
|
|
210
206
|
}
|
|
211
207
|
|
|
212
208
|
/** The scope the document reads: {@link LibraryView} plus the actions its controls call. */
|
|
213
|
-
interface LibraryScope extends
|
|
209
|
+
interface LibraryScope extends LibraryView, LibraryActions {}
|
|
214
210
|
|
|
215
211
|
/** Write a projection into the scope. */
|
|
216
212
|
function project(scope: LibraryScope, view: LibraryView): void {
|
|
@@ -242,15 +238,16 @@ function project(scope: LibraryScope, view: LibraryView): void {
|
|
|
242
238
|
|
|
243
239
|
/** The `part` a node's definition carries, or "" for a text node or an unmarked element. */
|
|
244
240
|
function partOf(def: JxElement | string): string {
|
|
245
|
-
const part =
|
|
246
|
-
return
|
|
241
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
242
|
+
return isString(part) ? part : "";
|
|
247
243
|
}
|
|
248
244
|
|
|
249
245
|
/** The path of the mapped row a node was rendered inside, or "" when it was not in one. */
|
|
250
246
|
function rowPath(state: JxScope | undefined): string {
|
|
251
|
-
const map = state?.["$map"]
|
|
252
|
-
const
|
|
253
|
-
|
|
247
|
+
const map = state?.["$map"];
|
|
248
|
+
const item = isJsonObject(map) ? map["item"] : undefined;
|
|
249
|
+
const path = isJsonObject(item) ? item["path"] : undefined;
|
|
250
|
+
return isString(path) ? path : "";
|
|
254
251
|
}
|
|
255
252
|
|
|
256
253
|
/**
|
|
@@ -267,7 +264,11 @@ export function mountLibrarySurface(
|
|
|
267
264
|
actions: LibraryActions,
|
|
268
265
|
): LibrarySurfaceHandle {
|
|
269
266
|
host.replaceChildren();
|
|
270
|
-
|
|
267
|
+
// A file that will not load, or a preview image with nothing to bind, draws a placeholder rather
|
|
268
|
+
// Than the browser's broken-image glyph.
|
|
269
|
+
const listening = new AbortController();
|
|
270
|
+
placeholderBrokenImages(host, listening.signal);
|
|
271
|
+
const scope: LibraryScope = reactive<LibraryScope>({
|
|
271
272
|
bannerState: "hidden",
|
|
272
273
|
bannerText: "",
|
|
273
274
|
categories: [],
|
|
@@ -308,7 +309,7 @@ export function mountLibrarySurface(
|
|
|
308
309
|
uploadAccept: "",
|
|
309
310
|
uploadHint: "",
|
|
310
311
|
view: "loading",
|
|
311
|
-
})
|
|
312
|
+
});
|
|
312
313
|
project(scope, view);
|
|
313
314
|
|
|
314
315
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -335,12 +336,15 @@ export function mountLibrarySurface(
|
|
|
335
336
|
}
|
|
336
337
|
},
|
|
337
338
|
}).then((surface) => {
|
|
339
|
+
/* SAFETY: `library-pane.json`'s root definition is a `div` element, so the runtime mounts an
|
|
340
|
+
HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
341
|
+
const root = surface.root as HTMLElement;
|
|
338
342
|
if (disposed) {
|
|
339
343
|
surface.dispose();
|
|
340
|
-
return
|
|
344
|
+
return root;
|
|
341
345
|
}
|
|
342
346
|
mounted = surface;
|
|
343
|
-
return
|
|
347
|
+
return root;
|
|
344
348
|
});
|
|
345
349
|
|
|
346
350
|
return {
|
|
@@ -355,6 +359,7 @@ export function mountLibrarySurface(
|
|
|
355
359
|
},
|
|
356
360
|
dispose() {
|
|
357
361
|
disposed = true;
|
|
362
|
+
listening.abort();
|
|
358
363
|
mounted?.dispose();
|
|
359
364
|
mounted = null;
|
|
360
365
|
},
|
|
@@ -21,20 +21,15 @@
|
|
|
21
21
|
* @docs studio/logic/events
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
+
import { isJsonObject, isString } from "@jxsuite/schema/guards";
|
|
24
25
|
import { reactive } from "../reactivity";
|
|
25
26
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
26
27
|
import logicPanelDoc from "./logic-panel.json";
|
|
27
|
-
import type {
|
|
28
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
28
29
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
29
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
30
|
+
import type { SurfaceAction, SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
30
31
|
|
|
31
|
-
registerSurface("logic-panel", logicPanelDoc
|
|
32
|
-
|
|
33
|
-
/** A closed list of choices, in the shape the kit's select reads. */
|
|
34
|
-
export interface LogicOption {
|
|
35
|
-
value: string;
|
|
36
|
-
label: string;
|
|
37
|
-
}
|
|
32
|
+
registerSurface("logic-panel", logicPanelDoc);
|
|
38
33
|
|
|
39
34
|
/** Which control a bindable row draws. The flow picks it; the document switches on it. */
|
|
40
35
|
export type LogicFieldKind = "control" | "text" | "select";
|
|
@@ -55,7 +50,7 @@ export interface LogicFieldView {
|
|
|
55
50
|
/** What a `text` or `select` control holds. Empty for a control host. */
|
|
56
51
|
value: string;
|
|
57
52
|
placeholder: string;
|
|
58
|
-
options:
|
|
53
|
+
options: SurfaceOption[];
|
|
59
54
|
/** Draw the text control monospaced — a pointer or a template string. */
|
|
60
55
|
mono: boolean;
|
|
61
56
|
/** The rung's own id, for `data-source`. */
|
|
@@ -131,7 +126,7 @@ export interface LogicBindingView {
|
|
|
131
126
|
/** The code body's text. Empty for every other body. */
|
|
132
127
|
code: string;
|
|
133
128
|
refValue: string;
|
|
134
|
-
refOptions:
|
|
129
|
+
refOptions: SurfaceOption[];
|
|
135
130
|
/** The escape hatch's accessible name — the code editor, or the formula workspace. */
|
|
136
131
|
openTitle: string;
|
|
137
132
|
}
|
|
@@ -149,12 +144,6 @@ export interface LogicKvView {
|
|
|
149
144
|
tags: string;
|
|
150
145
|
}
|
|
151
146
|
|
|
152
|
-
/** One button of an empty state — an id the flow knows, and the words on it. */
|
|
153
|
-
export interface LogicEmptyAction {
|
|
154
|
-
id: string;
|
|
155
|
-
label: string;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
147
|
/** Everything the Logic tab shows, already decided. */
|
|
159
148
|
export interface LogicView {
|
|
160
149
|
/** `empty` or `ready` — no document, no selection and a stale one are all the first. */
|
|
@@ -164,7 +153,7 @@ export interface LogicView {
|
|
|
164
153
|
* What the reader can do about it. An empty state that teaches nothing offers none
|
|
165
154
|
* (studio-ui-guidelines.md §11.1).
|
|
166
155
|
*/
|
|
167
|
-
emptyActions:
|
|
156
|
+
emptyActions: SurfaceAction[];
|
|
168
157
|
hasEmptyActions: boolean;
|
|
169
158
|
|
|
170
159
|
hasRepeater: boolean;
|
|
@@ -233,7 +222,7 @@ export interface LogicIslands {
|
|
|
233
222
|
statementsSlot: (key: string, host: HTMLElement) => void;
|
|
234
223
|
}
|
|
235
224
|
|
|
236
|
-
interface LogicScope extends
|
|
225
|
+
interface LogicScope extends LogicView, LogicActions {}
|
|
237
226
|
|
|
238
227
|
export interface LogicSurface {
|
|
239
228
|
/** Re-project. The document's bindings skip every value that did not move. */
|
|
@@ -279,23 +268,21 @@ export function emptyLogicView(): LogicView {
|
|
|
279
268
|
|
|
280
269
|
/** Assign the projection field by field: the runtime writes only the bindings that moved. */
|
|
281
270
|
function project(scope: LogicScope, view: LogicView): void {
|
|
282
|
-
|
|
283
|
-
(scope as Record<string, unknown>)[key] = value;
|
|
284
|
-
}
|
|
271
|
+
Object.assign(scope, view);
|
|
285
272
|
}
|
|
286
273
|
|
|
287
274
|
/** The `part` a node was rendered with, or "". */
|
|
288
275
|
function partOf(def: JxElement | string): string {
|
|
289
|
-
const part =
|
|
290
|
-
return
|
|
276
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
277
|
+
return isString(part) ? part : "";
|
|
291
278
|
}
|
|
292
279
|
|
|
293
280
|
/** The `key` of the `$map` item a node was rendered inside, or "". */
|
|
294
281
|
function itemKey(state: JxScope | undefined): string {
|
|
295
|
-
const
|
|
296
|
-
const
|
|
297
|
-
|
|
298
|
-
return
|
|
282
|
+
const map = state?.["$map"];
|
|
283
|
+
const item = isJsonObject(map) ? map["item"] : undefined;
|
|
284
|
+
const key = isJsonObject(item) ? item["key"] : "";
|
|
285
|
+
return isString(key) ? key : "";
|
|
299
286
|
}
|
|
300
287
|
|
|
301
288
|
/**
|
|
@@ -316,10 +303,10 @@ export function mountLogicSurface(
|
|
|
316
303
|
actions: LogicActions,
|
|
317
304
|
islands: LogicIslands,
|
|
318
305
|
): LogicSurface {
|
|
319
|
-
const scope = reactive<LogicScope>({
|
|
306
|
+
const scope: LogicScope = reactive<LogicScope>({
|
|
320
307
|
...emptyLogicView(),
|
|
321
308
|
...actions,
|
|
322
|
-
}
|
|
309
|
+
});
|
|
323
310
|
project(scope, view);
|
|
324
311
|
|
|
325
312
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -29,14 +29,15 @@
|
|
|
29
29
|
* @docs studio/logic/formula-workspace
|
|
30
30
|
*/
|
|
31
31
|
|
|
32
|
+
import { isJsonObject, isString } from "@jxsuite/schema/guards";
|
|
32
33
|
import { reactive } from "../reactivity";
|
|
33
34
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
34
35
|
import logicWorkspaceDoc from "./logic-workspace.json";
|
|
35
|
-
import type {
|
|
36
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
36
37
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
37
38
|
import type { SurfaceHandle } from "../ui/surface";
|
|
38
39
|
|
|
39
|
-
registerSurface("logic-workspace", logicWorkspaceDoc
|
|
40
|
+
registerSurface("logic-workspace", logicWorkspaceDoc);
|
|
40
41
|
|
|
41
42
|
/** One chip of the pipeline, as the document draws it. */
|
|
42
43
|
export interface LogicChipView {
|
|
@@ -112,8 +113,7 @@ export interface LogicWorkspaceIslands {
|
|
|
112
113
|
treeSlot: (key: string, host: HTMLElement) => void;
|
|
113
114
|
}
|
|
114
115
|
|
|
115
|
-
interface LogicWorkspaceScope
|
|
116
|
-
extends Record<string, unknown>, LogicWorkspaceView, LogicWorkspaceActions {}
|
|
116
|
+
interface LogicWorkspaceScope extends LogicWorkspaceView, LogicWorkspaceActions {}
|
|
117
117
|
|
|
118
118
|
export interface LogicWorkspaceSurface {
|
|
119
119
|
/** Re-project. The document's bindings skip every value that did not move. */
|
|
@@ -151,23 +151,21 @@ export function emptyLogicWorkspaceView(): LogicWorkspaceView {
|
|
|
151
151
|
|
|
152
152
|
/** Assign the projection field by field: the runtime writes only the bindings that moved. */
|
|
153
153
|
function project(scope: LogicWorkspaceScope, view: LogicWorkspaceView): void {
|
|
154
|
-
|
|
155
|
-
(scope as Record<string, unknown>)[key] = value;
|
|
156
|
-
}
|
|
154
|
+
Object.assign(scope, view);
|
|
157
155
|
}
|
|
158
156
|
|
|
159
157
|
/** The `part` a node was rendered with, or "". */
|
|
160
158
|
function partOf(def: JxElement | string): string {
|
|
161
|
-
const part =
|
|
162
|
-
return
|
|
159
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
160
|
+
return isString(part) ? part : "";
|
|
163
161
|
}
|
|
164
162
|
|
|
165
163
|
/** The `key` of the `$map` item a node was rendered inside, or "". */
|
|
166
164
|
function itemKey(state: JxScope | undefined): string {
|
|
167
|
-
const
|
|
168
|
-
const
|
|
169
|
-
|
|
170
|
-
return
|
|
165
|
+
const map = state?.["$map"];
|
|
166
|
+
const item = isJsonObject(map) ? map["item"] : undefined;
|
|
167
|
+
const key = isJsonObject(item) ? item["key"] : "";
|
|
168
|
+
return isString(key) ? key : "";
|
|
171
169
|
}
|
|
172
170
|
|
|
173
171
|
/**
|
|
@@ -187,10 +185,10 @@ export function mountLogicWorkspace(
|
|
|
187
185
|
actions: LogicWorkspaceActions,
|
|
188
186
|
islands: LogicWorkspaceIslands,
|
|
189
187
|
): LogicWorkspaceSurface {
|
|
190
|
-
const scope = reactive<LogicWorkspaceScope>({
|
|
188
|
+
const scope: LogicWorkspaceScope = reactive<LogicWorkspaceScope>({
|
|
191
189
|
...emptyLogicWorkspaceView(),
|
|
192
190
|
...actions,
|
|
193
|
-
}
|
|
191
|
+
});
|
|
194
192
|
project(scope, view);
|
|
195
193
|
|
|
196
194
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -26,10 +26,9 @@ import { openPopoverSurface } from "../ui/popover-surface";
|
|
|
26
26
|
import { reactive } from "../reactivity";
|
|
27
27
|
import { registerSurface } from "../ui/surface";
|
|
28
28
|
import mediaBrowserDoc from "./media-browser.json";
|
|
29
|
-
import type {
|
|
30
|
-
import type { PopoverSurfaceHandle } from "../ui/popover-surface";
|
|
29
|
+
import type { OpenPopoverSurfaceOptions, PopoverSurfaceHandle } from "../ui/popover-surface";
|
|
31
30
|
|
|
32
|
-
registerSurface("media-browser", mediaBrowserDoc
|
|
31
|
+
registerSurface("media-browser", mediaBrowserDoc);
|
|
33
32
|
|
|
34
33
|
/** The slot id, and so the panel's region: `overlay.menu:media-picker`. */
|
|
35
34
|
const SLOT = "media-picker";
|
|
@@ -79,8 +78,7 @@ export interface MediaBrowserSurfaceHandle extends PopoverSurfaceHandle {
|
|
|
79
78
|
update: (view: MediaBrowserView) => void;
|
|
80
79
|
}
|
|
81
80
|
|
|
82
|
-
interface MediaBrowserScope
|
|
83
|
-
extends Record<string, unknown>, MediaBrowserView, Omit<MediaBrowserActions, "dismissed"> {}
|
|
81
|
+
interface MediaBrowserScope extends MediaBrowserView, Omit<MediaBrowserActions, "dismissed"> {}
|
|
84
82
|
|
|
85
83
|
/** Write a projection into the scope. */
|
|
86
84
|
function project(scope: MediaBrowserScope, view: MediaBrowserView): void {
|
|
@@ -107,7 +105,7 @@ export function openMediaBrowserSurface(
|
|
|
107
105
|
actions: MediaBrowserActions,
|
|
108
106
|
anchor: HTMLElement | null,
|
|
109
107
|
): MediaBrowserSurfaceHandle {
|
|
110
|
-
const scope = reactive<MediaBrowserScope>({
|
|
108
|
+
const scope: MediaBrowserScope = reactive<MediaBrowserScope>({
|
|
111
109
|
emptyLabel: view.emptyLabel,
|
|
112
110
|
filter: view.filter,
|
|
113
111
|
measure: actions.measure,
|
|
@@ -119,15 +117,18 @@ export function openMediaBrowserSurface(
|
|
|
119
117
|
setFilter: actions.setFilter,
|
|
120
118
|
x: view.x,
|
|
121
119
|
y: view.y,
|
|
122
|
-
})
|
|
120
|
+
});
|
|
123
121
|
|
|
124
|
-
const
|
|
122
|
+
const options: OpenPopoverSurfaceOptions<MediaBrowserScope> = {
|
|
125
123
|
anchor,
|
|
126
124
|
name: "media-browser",
|
|
127
125
|
scope,
|
|
128
126
|
slot: SLOT,
|
|
129
|
-
|
|
130
|
-
|
|
127
|
+
};
|
|
128
|
+
if (actions.dismissed) {
|
|
129
|
+
options.onDismissed = actions.dismissed;
|
|
130
|
+
}
|
|
131
|
+
const handle = openPopoverSurface(options);
|
|
131
132
|
|
|
132
133
|
void handle.ready.then(() => {
|
|
133
134
|
if (handle.isOpen()) {
|
|
@@ -22,10 +22,9 @@
|
|
|
22
22
|
import { reactive } from "../reactivity";
|
|
23
23
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
24
24
|
import mediaFieldDoc from "./media-field.json";
|
|
25
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
26
25
|
import type { SurfaceHandle } from "../ui/surface";
|
|
27
26
|
|
|
28
|
-
registerSurface("media-field", mediaFieldDoc
|
|
27
|
+
registerSurface("media-field", mediaFieldDoc);
|
|
29
28
|
|
|
30
29
|
/** Everything the control draws, as one value. */
|
|
31
30
|
export interface MediaFieldView {
|
|
@@ -58,7 +57,7 @@ export interface MediaFieldHandle {
|
|
|
58
57
|
}
|
|
59
58
|
|
|
60
59
|
/** The scope the document reads. */
|
|
61
|
-
interface MediaFieldScope extends
|
|
60
|
+
interface MediaFieldScope extends MediaFieldView, MediaFieldActions {}
|
|
62
61
|
|
|
63
62
|
/** Write a projection into the scope. */
|
|
64
63
|
function project(scope: MediaFieldScope, view: MediaFieldView): void {
|
|
@@ -81,7 +80,7 @@ export function mountMediaFieldSurface(
|
|
|
81
80
|
view: MediaFieldView,
|
|
82
81
|
actions: MediaFieldActions,
|
|
83
82
|
): MediaFieldHandle {
|
|
84
|
-
const scope = reactive<MediaFieldScope>({
|
|
83
|
+
const scope: MediaFieldScope = reactive<MediaFieldScope>({
|
|
85
84
|
browse: actions.browse,
|
|
86
85
|
edit: actions.edit,
|
|
87
86
|
label: view.label,
|
|
@@ -90,7 +89,7 @@ export function mountMediaFieldSurface(
|
|
|
90
89
|
upload: actions.upload,
|
|
91
90
|
value: view.value,
|
|
92
91
|
warm: actions.warm,
|
|
93
|
-
})
|
|
92
|
+
});
|
|
94
93
|
|
|
95
94
|
let mounted: SurfaceHandle | null = null;
|
|
96
95
|
let disposed = false;
|
|
@@ -24,10 +24,9 @@
|
|
|
24
24
|
import { reactive } from "../reactivity";
|
|
25
25
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
26
26
|
import mediaDoc from "./media-pane.json";
|
|
27
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
28
27
|
import type { SurfaceHandle } from "../ui/surface";
|
|
29
28
|
|
|
30
|
-
registerSurface("media-pane", mediaDoc
|
|
29
|
+
registerSurface("media-pane", mediaDoc);
|
|
31
30
|
|
|
32
31
|
/**
|
|
33
32
|
* Which element the stage draws the file in.
|
|
@@ -105,7 +104,7 @@ export interface MediaSurfaceHandle {
|
|
|
105
104
|
* `$switch` discriminant derived here — "is there a list" is a restatement of the list, and a view
|
|
106
105
|
* that had to keep the two in step would be a second place to get it wrong.
|
|
107
106
|
*/
|
|
108
|
-
interface MediaScope extends
|
|
107
|
+
interface MediaScope extends MediaView, MediaActions {
|
|
109
108
|
hasUsageFiles: boolean;
|
|
110
109
|
}
|
|
111
110
|
|
|
@@ -141,7 +140,7 @@ export function mountMediaSurface(
|
|
|
141
140
|
actions: MediaActions,
|
|
142
141
|
): MediaSurfaceHandle {
|
|
143
142
|
host.replaceChildren();
|
|
144
|
-
const scope = reactive<MediaScope>({
|
|
143
|
+
const scope: MediaScope = reactive<MediaScope>({
|
|
145
144
|
copyRef: actions.copyRef,
|
|
146
145
|
extLabel: "",
|
|
147
146
|
facts: "",
|
|
@@ -159,7 +158,7 @@ export function mountMediaSurface(
|
|
|
159
158
|
usageFiles: [],
|
|
160
159
|
usageHeadline: "",
|
|
161
160
|
usageState: "hidden",
|
|
162
|
-
})
|
|
161
|
+
});
|
|
163
162
|
project(scope, view);
|
|
164
163
|
|
|
165
164
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -171,9 +170,11 @@ export function mountMediaSurface(
|
|
|
171
170
|
const ready = mountSurface("media-pane", scope, host).then((surface) => {
|
|
172
171
|
if (disposed) {
|
|
173
172
|
surface.dispose();
|
|
174
|
-
|
|
173
|
+
} else {
|
|
174
|
+
mounted = surface;
|
|
175
175
|
}
|
|
176
|
-
|
|
176
|
+
/* SAFETY: `media-pane.json`'s root definition is a `div` element, so the runtime mounts an
|
|
177
|
+
HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
177
178
|
return surface.root as HTMLElement;
|
|
178
179
|
});
|
|
179
180
|
|