@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
|
@@ -31,10 +31,9 @@ import { effect, effectScope, reactive } from "../reactivity";
|
|
|
31
31
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
32
32
|
import checklistDoc from "./panel-deploy-checklist.json";
|
|
33
33
|
import type { EffectScope } from "@vue/reactivity";
|
|
34
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
35
34
|
import type { SurfaceHandle } from "../ui/surface";
|
|
36
35
|
|
|
37
|
-
registerSurface("panel-deploy-checklist", checklistDoc
|
|
36
|
+
registerSurface("panel-deploy-checklist", checklistDoc);
|
|
38
37
|
|
|
39
38
|
/** One prerequisite, as the document draws it. Every field is a value: no records, no closures. */
|
|
40
39
|
export interface DeployStepRowView {
|
|
@@ -81,7 +80,7 @@ export interface DeployChecklistDeps {
|
|
|
81
80
|
}
|
|
82
81
|
|
|
83
82
|
/** The scope the document reads: the projection, flattened, beside the one callback. */
|
|
84
|
-
interface DeployChecklistScope extends
|
|
83
|
+
interface DeployChecklistScope extends DeployChecklistView {
|
|
85
84
|
runAction: () => void;
|
|
86
85
|
}
|
|
87
86
|
|
|
@@ -109,7 +108,7 @@ function standingIn(container: HTMLElement): boolean {
|
|
|
109
108
|
return false;
|
|
110
109
|
}
|
|
111
110
|
// Still mounting into this very container: a second call must not start a second mount.
|
|
112
|
-
return _handle === null ? _mount !== null :
|
|
111
|
+
return _handle === null ? _mount !== null : _handle.root.parentNode === container;
|
|
113
112
|
}
|
|
114
113
|
|
|
115
114
|
/**
|
|
@@ -127,7 +126,7 @@ export function mountDeployChecklistSurface(
|
|
|
127
126
|
}
|
|
128
127
|
disposeDeployChecklistSurface();
|
|
129
128
|
_container = container;
|
|
130
|
-
const scope = reactive<DeployChecklistScope>({
|
|
129
|
+
const scope: DeployChecklistScope = reactive<DeployChecklistScope>({
|
|
131
130
|
actionDisabled: false,
|
|
132
131
|
actionLabel: "",
|
|
133
132
|
actionTitle: "",
|
|
@@ -138,7 +137,7 @@ export function mountDeployChecklistSurface(
|
|
|
138
137
|
runAction: deps.runAction,
|
|
139
138
|
steps: [],
|
|
140
139
|
summary: "",
|
|
141
|
-
})
|
|
140
|
+
});
|
|
142
141
|
_scope = effectScope();
|
|
143
142
|
_scope.run(() => {
|
|
144
143
|
effect(() => {
|
|
@@ -32,10 +32,9 @@
|
|
|
32
32
|
import { reactive } from "../reactivity";
|
|
33
33
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
34
34
|
import elementsDoc from "./panel-elements.json";
|
|
35
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
36
35
|
import type { SurfaceHandle } from "../ui/surface";
|
|
37
36
|
|
|
38
|
-
registerSurface("panel-elements", elementsDoc
|
|
37
|
+
registerSurface("panel-elements", elementsDoc);
|
|
39
38
|
|
|
40
39
|
/** One insertable HTML element: the tag is its identity, its caption and what a click inserts. */
|
|
41
40
|
export interface ElementCardView {
|
|
@@ -103,7 +102,7 @@ export interface ElementsSurfaceHandle {
|
|
|
103
102
|
}
|
|
104
103
|
|
|
105
104
|
/** The scope the document reads: {@link ElementsValues} plus the actions its controls call. */
|
|
106
|
-
interface ElementsScope extends
|
|
105
|
+
interface ElementsScope extends ElementsValues, ElementsActions {}
|
|
107
106
|
|
|
108
107
|
/** Write a projection into the scope. */
|
|
109
108
|
function project(scope: ElementsScope, values: ElementsValues): void {
|
|
@@ -128,7 +127,7 @@ export function mountElementsSurface(
|
|
|
128
127
|
values: ElementsValues,
|
|
129
128
|
actions: ElementsActions,
|
|
130
129
|
): ElementsSurfaceHandle {
|
|
131
|
-
const scope = reactive<ElementsScope>({
|
|
130
|
+
const scope: ElementsScope = reactive<ElementsScope>({
|
|
132
131
|
categories: [],
|
|
133
132
|
clearFilter: actions.clearFilter,
|
|
134
133
|
components: [],
|
|
@@ -141,7 +140,7 @@ export function mountElementsSurface(
|
|
|
141
140
|
setComponentsOpen: actions.setComponentsOpen,
|
|
142
141
|
setFilter: actions.setFilter,
|
|
143
142
|
setSectionOpen: actions.setSectionOpen,
|
|
144
|
-
})
|
|
143
|
+
});
|
|
145
144
|
project(scope, values);
|
|
146
145
|
|
|
147
146
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -163,8 +162,7 @@ export function mountElementsSurface(
|
|
|
163
162
|
taken away, and answering no would start a second mount racing the first. Once mounted the
|
|
164
163
|
question is whether the root is still in the container — a panel that was switched away from
|
|
165
164
|
had its document cleared out from under it by lit. */
|
|
166
|
-
connected: () =>
|
|
167
|
-
!disposed && (mounted === null || (mounted.root as Node).parentNode === container),
|
|
165
|
+
connected: () => !disposed && (mounted === null || mounted.root.parentNode === container),
|
|
168
166
|
dispose() {
|
|
169
167
|
disposed = true;
|
|
170
168
|
mounted?.dispose();
|
|
@@ -24,10 +24,9 @@
|
|
|
24
24
|
import { reactive } from "../reactivity";
|
|
25
25
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
26
26
|
import i18nDoc from "./panel-i18n.json";
|
|
27
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
28
27
|
import type { SurfaceHandle } from "../ui/surface";
|
|
29
28
|
|
|
30
|
-
registerSurface("panel-i18n", i18nDoc
|
|
29
|
+
registerSurface("panel-i18n", i18nDoc);
|
|
31
30
|
|
|
32
31
|
/** Which of the three bodies the panel is showing. */
|
|
33
32
|
export type I18nMode =
|
|
@@ -105,7 +104,7 @@ export interface I18nSurfaceHandle {
|
|
|
105
104
|
* Each `has*` is the flattening of a presence test: a document switches on a VALUE, so "is there a
|
|
106
105
|
* failure to report" has to arrive as a boolean rather than as a string the markup could measure.
|
|
107
106
|
*/
|
|
108
|
-
interface I18nScope
|
|
107
|
+
interface I18nScope {
|
|
109
108
|
mode: I18nMode;
|
|
110
109
|
settingsDisabled: boolean;
|
|
111
110
|
summary: string;
|
|
@@ -166,7 +165,7 @@ export function mountI18nSurface(
|
|
|
166
165
|
values: I18nValues,
|
|
167
166
|
actions: I18nActions,
|
|
168
167
|
): I18nSurfaceHandle {
|
|
169
|
-
const scope = reactive<I18nScope>({
|
|
168
|
+
const scope: I18nScope = reactive<I18nScope>({
|
|
170
169
|
hasIncomplete: false,
|
|
171
170
|
hasRows: false,
|
|
172
171
|
hasTruncated: false,
|
|
@@ -180,7 +179,7 @@ export function mountI18nSurface(
|
|
|
180
179
|
settingsDisabled: false,
|
|
181
180
|
summary: "",
|
|
182
181
|
truncated: "",
|
|
183
|
-
})
|
|
182
|
+
});
|
|
184
183
|
project(scope, values);
|
|
185
184
|
|
|
186
185
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -201,8 +200,7 @@ export function mountI18nSurface(
|
|
|
201
200
|
/* In flight the answer is yes: nothing has landed yet, so there is nothing that could have been
|
|
202
201
|
taken away. Once mounted the question is simply whether the root is still in the container —
|
|
203
202
|
a panel that was switched away from had its document cleared out from under it by lit. */
|
|
204
|
-
connected: () =>
|
|
205
|
-
!disposed && (mounted === null || (mounted.root as Node).parentNode === container),
|
|
203
|
+
connected: () => !disposed && (mounted === null || mounted.root.parentNode === container),
|
|
206
204
|
dispose() {
|
|
207
205
|
disposed = true;
|
|
208
206
|
mounted?.dispose();
|
|
@@ -33,10 +33,9 @@
|
|
|
33
33
|
import { reactive } from "../reactivity";
|
|
34
34
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
35
35
|
import importsDoc from "./panel-imports.json";
|
|
36
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
37
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
36
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
38
37
|
|
|
39
|
-
registerSurface("panel-imports", importsDoc
|
|
38
|
+
registerSurface("panel-imports", importsDoc);
|
|
40
39
|
|
|
41
40
|
/** One imported module: the name a document refers to it by, and the path it is loaded from. */
|
|
42
41
|
export interface ModuleRow {
|
|
@@ -70,12 +69,6 @@ export interface PackageRow {
|
|
|
70
69
|
components: ComponentRow[];
|
|
71
70
|
}
|
|
72
71
|
|
|
73
|
-
/** One row of the component picker: a project component this document has not imported yet. */
|
|
74
|
-
export interface PickerOption {
|
|
75
|
-
value: string;
|
|
76
|
-
label: string;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
72
|
/** What the panel shows — the flow's projection of the project and the open document. */
|
|
80
73
|
export interface ImportsView {
|
|
81
74
|
/**
|
|
@@ -94,7 +87,7 @@ export interface ImportsView {
|
|
|
94
87
|
/** What the component picker currently shows. `""` is its own empty row, never a component. */
|
|
95
88
|
pickerValue: string;
|
|
96
89
|
/** The components this document could still import. Empty when there are none to offer. */
|
|
97
|
-
pickerOptions:
|
|
90
|
+
pickerOptions: SurfaceOption[];
|
|
98
91
|
/**
|
|
99
92
|
* The sentence drawn where the `$ref` list would be. The flow chooses it: "pick one below" and
|
|
100
93
|
* "this project has none yet" are two different absences, and only the flow knows which it is
|
|
@@ -135,7 +128,7 @@ interface ImportsFlags {
|
|
|
135
128
|
hasOptions: boolean;
|
|
136
129
|
}
|
|
137
130
|
|
|
138
|
-
interface ImportsScope extends
|
|
131
|
+
interface ImportsScope extends ImportsView, ImportsActions, ImportsFlags {}
|
|
139
132
|
|
|
140
133
|
interface Mounted {
|
|
141
134
|
scope: ImportsScope;
|
|
@@ -152,7 +145,7 @@ const mounts = new WeakMap<HTMLElement, Mounted>();
|
|
|
152
145
|
* control lies about what it holds — and the row is what the closed control reads as, which is why
|
|
153
146
|
* it is worded as the invitation rather than as a blank.
|
|
154
147
|
*/
|
|
155
|
-
const PICK_NOTHING:
|
|
148
|
+
const PICK_NOTHING: SurfaceOption = { label: "Add component…", value: "" };
|
|
156
149
|
|
|
157
150
|
/** The view plus the flags the document switches on. */
|
|
158
151
|
function derive(view: ImportsView): ImportsView & ImportsFlags {
|
|
@@ -191,7 +184,7 @@ export function renderImportsSurface(
|
|
|
191
184
|
}
|
|
192
185
|
existing?.handle?.dispose();
|
|
193
186
|
host.textContent = "";
|
|
194
|
-
const scope = reactive({ ...derive(view), ...actions })
|
|
187
|
+
const scope: ImportsScope = reactive<ImportsScope>({ ...derive(view), ...actions });
|
|
195
188
|
const record: Mounted = { handle: null, scope };
|
|
196
189
|
mounts.set(host, record);
|
|
197
190
|
/* No race to arbitrate: a redraw arriving while this is in flight takes the branch above — a
|
|
@@ -40,14 +40,15 @@
|
|
|
40
40
|
* @docs studio/design/layers
|
|
41
41
|
*/
|
|
42
42
|
|
|
43
|
+
import { isString } from "@jxsuite/schema/guards";
|
|
43
44
|
import { reactive } from "../reactivity";
|
|
44
45
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
45
46
|
import outlineDoc from "./panel-outline.json";
|
|
46
|
-
import type {
|
|
47
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
47
48
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
48
49
|
import type { SurfaceHandle } from "../ui/surface";
|
|
49
50
|
|
|
50
|
-
registerSurface("panel-outline", outlineDoc
|
|
51
|
+
registerSurface("panel-outline", outlineDoc);
|
|
51
52
|
|
|
52
53
|
/**
|
|
53
54
|
* One verb on a row, already resolved against THAT ROW'S node.
|
|
@@ -193,10 +194,13 @@ export interface OutlineActions {
|
|
|
193
194
|
* `data-jx-path` is for.
|
|
194
195
|
*/
|
|
195
196
|
contextMenu: (scope: JxScope, event: Event) => void;
|
|
196
|
-
/**
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
197
|
+
/**
|
|
198
|
+
* Run one of the row's verbs, against the row rather than against the selection. `control` is the
|
|
199
|
+
* pressed button's `event.currentTarget`.
|
|
200
|
+
*/
|
|
201
|
+
runRow: (id: string, row: string, control: EventTarget | null) => void;
|
|
202
|
+
/** Open the `⋮` menu under its own button, which arrives as the press's `event.currentTarget`. */
|
|
203
|
+
overflowRow: (key: string, opener: EventTarget | null) => void;
|
|
200
204
|
/** The rename input's three moments. */
|
|
201
205
|
editInput: (value: string) => void;
|
|
202
206
|
editCommit: () => void;
|
|
@@ -221,7 +225,7 @@ export interface OutlineSurfaceHandle {
|
|
|
221
225
|
}
|
|
222
226
|
|
|
223
227
|
/** The scope the document reads: the projection, plus everything its controls can call. */
|
|
224
|
-
interface OutlineScope extends
|
|
228
|
+
interface OutlineScope extends OutlineValues, OutlineActions {}
|
|
225
229
|
|
|
226
230
|
/** Write a projection into the scope. */
|
|
227
231
|
function project(scope: OutlineScope, values: OutlineValues): void {
|
|
@@ -236,8 +240,8 @@ function project(scope: OutlineScope, values: OutlineValues): void {
|
|
|
236
240
|
|
|
237
241
|
/** The `part` a node's definition carries, or "" for a text node or an unmarked element. */
|
|
238
242
|
function partOf(def: JxElement | string): string {
|
|
239
|
-
const part =
|
|
240
|
-
return
|
|
243
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
244
|
+
return isString(part) ? part : "";
|
|
241
245
|
}
|
|
242
246
|
|
|
243
247
|
/**
|
|
@@ -253,7 +257,7 @@ export function mountOutlineSurface(
|
|
|
253
257
|
values: OutlineValues,
|
|
254
258
|
actions: OutlineActions,
|
|
255
259
|
): OutlineSurfaceHandle {
|
|
256
|
-
const scope = reactive<OutlineScope>({
|
|
260
|
+
const scope: OutlineScope = reactive<OutlineScope>({
|
|
257
261
|
contextMenu: actions.contextMenu,
|
|
258
262
|
current: "",
|
|
259
263
|
editCancel: actions.editCancel,
|
|
@@ -278,7 +282,7 @@ export function mountOutlineSurface(
|
|
|
278
282
|
treeReady: actions.treeReady,
|
|
279
283
|
typeahead: actions.typeahead,
|
|
280
284
|
view: "empty",
|
|
281
|
-
})
|
|
285
|
+
});
|
|
282
286
|
project(scope, values);
|
|
283
287
|
|
|
284
288
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -290,12 +294,15 @@ export function mountOutlineSurface(
|
|
|
290
294
|
const ready = mountSurface("panel-outline", scope, container, {
|
|
291
295
|
onNodeCreated: (element, _path, def) => {
|
|
292
296
|
/* A text node carries no `part`, so narrowing and asking are the same question — asked once,
|
|
293
|
-
rather than as a guard clause whose only reachable
|
|
294
|
-
|
|
295
|
-
if (
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
297
|
+
as the condition around the lookup rather than as a guard clause whose only reachable
|
|
298
|
+
answer is the one below. */
|
|
299
|
+
if (element instanceof HTMLElement) {
|
|
300
|
+
const part = partOf(def);
|
|
301
|
+
if (part === "tree") {
|
|
302
|
+
actions.treeReady(element);
|
|
303
|
+
} else if (part === "title-input") {
|
|
304
|
+
actions.editReady(element);
|
|
305
|
+
}
|
|
299
306
|
}
|
|
300
307
|
},
|
|
301
308
|
}).then((surface) => {
|
|
@@ -312,8 +319,7 @@ export function mountOutlineSurface(
|
|
|
312
319
|
mount racing the first. Once mounted, the question is whether the root is still where it was
|
|
313
320
|
put: a Navigator that painted another panel, or the stylebook's own catalogue, cleared this
|
|
314
321
|
document out from under it. */
|
|
315
|
-
connected: () =>
|
|
316
|
-
!disposed && (mounted === null || (mounted.root as Node).parentNode === container),
|
|
322
|
+
connected: () => !disposed && (mounted === null || mounted.root.parentNode === container),
|
|
317
323
|
dispose() {
|
|
318
324
|
disposed = true;
|
|
319
325
|
mounted?.dispose();
|
|
@@ -26,16 +26,9 @@
|
|
|
26
26
|
import { reactive } from "../reactivity";
|
|
27
27
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
28
28
|
import pagePanelDoc from "./panel-page.json";
|
|
29
|
-
import type {
|
|
30
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
29
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
31
30
|
|
|
32
|
-
registerSurface("panel-page", pagePanelDoc
|
|
33
|
-
|
|
34
|
-
/** One choice in a row's picker, or in the add form's tag picker. */
|
|
35
|
-
export interface PageChoice {
|
|
36
|
-
value: string;
|
|
37
|
-
label: string;
|
|
38
|
-
}
|
|
31
|
+
registerSurface("panel-page", pagePanelDoc);
|
|
39
32
|
|
|
40
33
|
/**
|
|
41
34
|
* One row of one section, as the document reads it.
|
|
@@ -49,7 +42,7 @@ export interface PageChoice {
|
|
|
49
42
|
* a screenshot region and `ui/regions.ts`'s `field:<prop>` grammar see. A collection whose schema
|
|
50
43
|
* declares a `layout` property would otherwise share an identity with the Layout picker.
|
|
51
44
|
*/
|
|
52
|
-
export interface PageRow
|
|
45
|
+
export interface PageRow {
|
|
53
46
|
/** The row's identity: the repeater's key, and the argument every action is given. */
|
|
54
47
|
key: string;
|
|
55
48
|
/** The name on `data-prop`. */
|
|
@@ -72,7 +65,7 @@ export interface PageRow extends Record<string, unknown> {
|
|
|
72
65
|
/** A text row's placeholder. Empty draws none. */
|
|
73
66
|
placeholder: string;
|
|
74
67
|
/** A picker's rows, in the order they are offered. Empty on every other kind. */
|
|
75
|
-
options:
|
|
68
|
+
options: SurfaceOption[];
|
|
76
69
|
/** A sentence under the control — an empty collection, or a listing that failed. */
|
|
77
70
|
note: string;
|
|
78
71
|
/** Whether {@link PageRow.note} has anything in it; `$switch` is the document's conditional. */
|
|
@@ -84,7 +77,7 @@ export interface PageRow extends Record<string, unknown> {
|
|
|
84
77
|
}
|
|
85
78
|
|
|
86
79
|
/** One band of the panel: a heading, and the rows under it. */
|
|
87
|
-
export interface PageSection
|
|
80
|
+
export interface PageSection {
|
|
88
81
|
/** The repeater's key, and the `data-section` a test or a shot addresses the band by. */
|
|
89
82
|
key: string;
|
|
90
83
|
/** The heading, already carrying the collection's name where there is one. */
|
|
@@ -95,7 +88,7 @@ export interface PageSection extends Record<string, unknown> {
|
|
|
95
88
|
}
|
|
96
89
|
|
|
97
90
|
/** One `$head` entry no structured control owns, as the list draws it. */
|
|
98
|
-
export interface PageTagRow
|
|
91
|
+
export interface PageTagRow {
|
|
99
92
|
/** Unique within one projection — the repeater's key, and what Remove hands back. */
|
|
100
93
|
key: string;
|
|
101
94
|
/** The entry as markup, e.g. `<meta name="author">`. */
|
|
@@ -120,7 +113,7 @@ export interface PagePanelView {
|
|
|
120
113
|
addAttr: string;
|
|
121
114
|
addValue: string;
|
|
122
115
|
/** The element names the add form offers. */
|
|
123
|
-
tagOptions:
|
|
116
|
+
tagOptions: SurfaceOption[];
|
|
124
117
|
}
|
|
125
118
|
|
|
126
119
|
/**
|
|
@@ -142,8 +135,8 @@ export interface PagePanelActions {
|
|
|
142
135
|
setChoice: (key: string, value: string) => void;
|
|
143
136
|
/** Open the OS file picker for a media row and assign what comes back. */
|
|
144
137
|
upload: (key: string) => void;
|
|
145
|
-
/** Open the media browser under the button that was pressed. */
|
|
146
|
-
browse: (key: string, anchor:
|
|
138
|
+
/** Open the media browser under the button that was pressed — the press's `event.currentTarget`. */
|
|
139
|
+
browse: (key: string, anchor: EventTarget | null) => void;
|
|
147
140
|
/** Run the `document.openSeo` command — the door to Search appearance. */
|
|
148
141
|
openSeo: () => void;
|
|
149
142
|
/** Take one custom `$head` entry away. */
|
|
@@ -159,7 +152,7 @@ export interface PagePanelActions {
|
|
|
159
152
|
}
|
|
160
153
|
|
|
161
154
|
/** The scope the document reads: the projection, plus everything a control can ask for. */
|
|
162
|
-
interface PagePanelScope extends
|
|
155
|
+
interface PagePanelScope extends PagePanelView, PagePanelActions {}
|
|
163
156
|
|
|
164
157
|
/** Write a projection into the scope. Assignment by assignment, so an unchanged field is inert. */
|
|
165
158
|
function project(scope: PagePanelScope, view: PagePanelView): void {
|
|
@@ -223,7 +216,7 @@ export function renderPagePanelSurface(
|
|
|
223
216
|
}
|
|
224
217
|
existing?.handle?.dispose();
|
|
225
218
|
host.textContent = "";
|
|
226
|
-
const scope = reactive({ ...emptyView(), ...actions })
|
|
219
|
+
const scope: PagePanelScope = reactive<PagePanelScope>({ ...emptyView(), ...actions });
|
|
227
220
|
project(scope, view);
|
|
228
221
|
const record: Mounted = { handle: null, scope };
|
|
229
222
|
mounts.set(host, record);
|
|
@@ -25,10 +25,9 @@
|
|
|
25
25
|
import { reactive } from "../reactivity";
|
|
26
26
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
27
27
|
import problemsDoc from "./panel-problems.json";
|
|
28
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
29
28
|
import type { SurfaceHandle } from "../ui/surface";
|
|
30
29
|
|
|
31
|
-
registerSurface("panel-problems", problemsDoc
|
|
30
|
+
registerSurface("panel-problems", problemsDoc);
|
|
32
31
|
|
|
33
32
|
/** One problem, as the document draws it. Every field is a value: no records, no closures. */
|
|
34
33
|
export interface ProblemRowView {
|
|
@@ -87,7 +86,7 @@ export interface ProblemsSurfaceHandle {
|
|
|
87
86
|
}
|
|
88
87
|
|
|
89
88
|
/** The scope the document reads: the projection, and the four things a row can ask for. */
|
|
90
|
-
interface ProblemsScope
|
|
89
|
+
interface ProblemsScope {
|
|
91
90
|
hasProblems: boolean;
|
|
92
91
|
clearLabel: string;
|
|
93
92
|
groups: ProblemGroupView[];
|
|
@@ -117,7 +116,7 @@ export function mountProblemsSurface(
|
|
|
117
116
|
values: ProblemsValues,
|
|
118
117
|
actions: ProblemsActions,
|
|
119
118
|
): ProblemsSurfaceHandle {
|
|
120
|
-
const scope = reactive<ProblemsScope>({
|
|
119
|
+
const scope: ProblemsScope = reactive<ProblemsScope>({
|
|
121
120
|
clearAll: actions.clearAll,
|
|
122
121
|
clearLabel: "",
|
|
123
122
|
dismissRow: actions.dismissRow,
|
|
@@ -125,7 +124,7 @@ export function mountProblemsSurface(
|
|
|
125
124
|
hasProblems: false,
|
|
126
125
|
openPath: actions.openPath,
|
|
127
126
|
runAction: actions.runAction,
|
|
128
|
-
})
|
|
127
|
+
});
|
|
129
128
|
project(scope, values);
|
|
130
129
|
|
|
131
130
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -143,8 +142,7 @@ export function mountProblemsSurface(
|
|
|
143
142
|
answer is simply whether this handle is still wanted. Once mounted, the question is whether
|
|
144
143
|
the root is still where it was put: a dock that repainted with another tab selected, or one
|
|
145
144
|
that collapsed, had the panel body emptied out from under it. */
|
|
146
|
-
connected: () =>
|
|
147
|
-
!disposed && (mounted === null || (mounted.root as Node).parentNode === container),
|
|
145
|
+
connected: () => !disposed && (mounted === null || mounted.root.parentNode === container),
|
|
148
146
|
dispose() {
|
|
149
147
|
disposed = true;
|
|
150
148
|
mounted?.dispose();
|
|
@@ -32,27 +32,15 @@
|
|
|
32
32
|
* @docs studio/logic/data
|
|
33
33
|
*/
|
|
34
34
|
|
|
35
|
+
import { isJsonObject, isString } from "@jxsuite/schema/guards";
|
|
35
36
|
import { reactive } from "../reactivity";
|
|
36
37
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
37
38
|
import signalsDoc from "./panel-signals.json";
|
|
38
|
-
import type {
|
|
39
|
+
import type { JsonObject, JxElement } from "@jxsuite/schema/types";
|
|
39
40
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
40
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
41
|
+
import type { SurfaceHandle, SurfaceOption, SurfaceOptionGroup } from "../ui/surface";
|
|
41
42
|
|
|
42
|
-
registerSurface("panel-signals", signalsDoc
|
|
43
|
-
|
|
44
|
-
/** One row of a picker, as `jx-select` reads it. */
|
|
45
|
-
export interface SignalOption {
|
|
46
|
-
value: string;
|
|
47
|
-
label: string;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/** A named run of picker rows. `jx-select` draws both halves of a group's delimiter. */
|
|
51
|
-
export interface SignalOptionGroup {
|
|
52
|
-
id: string;
|
|
53
|
-
label: string;
|
|
54
|
-
rows: SignalOption[];
|
|
55
|
-
}
|
|
43
|
+
registerSurface("panel-signals", signalsDoc);
|
|
56
44
|
|
|
57
45
|
/** One chip of the basic parameter editor. */
|
|
58
46
|
export interface SignalChipView {
|
|
@@ -158,7 +146,7 @@ export interface SignalFieldView {
|
|
|
158
146
|
error: string;
|
|
159
147
|
hasError: boolean;
|
|
160
148
|
checked: boolean;
|
|
161
|
-
options:
|
|
149
|
+
options: SurfaceOption[];
|
|
162
150
|
/** Which island this host is for — `expression`, `statements`, `media` or `schema`. */
|
|
163
151
|
slot: string;
|
|
164
152
|
chips: SignalChipView[];
|
|
@@ -209,8 +197,8 @@ export interface SignalsView {
|
|
|
209
197
|
listState: "listed" | "empty";
|
|
210
198
|
emptyMessage: string;
|
|
211
199
|
categories: SignalCategoryView[];
|
|
212
|
-
addOptions:
|
|
213
|
-
addGroups:
|
|
200
|
+
addOptions: SurfaceOption[];
|
|
201
|
+
addGroups: SurfaceOptionGroup[];
|
|
214
202
|
/** What the add picker holds. Always `""` at rest — see {@link SignalsActions.addSignal}. */
|
|
215
203
|
addValue: string;
|
|
216
204
|
}
|
|
@@ -262,7 +250,7 @@ export interface SignalsSurfaceHandle {
|
|
|
262
250
|
dispose: () => void;
|
|
263
251
|
}
|
|
264
252
|
|
|
265
|
-
interface SignalsScope extends
|
|
253
|
+
interface SignalsScope extends SignalsView, SignalsActions {}
|
|
266
254
|
|
|
267
255
|
/** One island's host, and what it is a host for. */
|
|
268
256
|
interface IslandRecord {
|
|
@@ -272,23 +260,22 @@ interface IslandRecord {
|
|
|
272
260
|
}
|
|
273
261
|
|
|
274
262
|
/** The `part` a node was authored with, or `""` — the only thing this adapter asks about a node. */
|
|
275
|
-
function partOf(def:
|
|
276
|
-
const
|
|
277
|
-
|
|
278
|
-
return typeof part === "string" ? part : "";
|
|
263
|
+
function partOf(def: JxElement | string): string {
|
|
264
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
265
|
+
return isString(part) ? part : "";
|
|
279
266
|
}
|
|
280
267
|
|
|
281
268
|
/** The `$map` item a node was rendered inside, if it was rendered inside one. */
|
|
282
|
-
function mapItem(state: JxScope | undefined):
|
|
283
|
-
const map = state?.["$map"]
|
|
284
|
-
const item = map
|
|
285
|
-
return item
|
|
269
|
+
function mapItem(state: JxScope | undefined): JsonObject | null {
|
|
270
|
+
const map = state?.["$map"];
|
|
271
|
+
const item = isJsonObject(map) ? map["item"] : undefined;
|
|
272
|
+
return isJsonObject(item) ? item : null;
|
|
286
273
|
}
|
|
287
274
|
|
|
288
275
|
/** A string field off a `$map` item, or `""`. */
|
|
289
|
-
function itemString(item:
|
|
276
|
+
function itemString(item: JsonObject | null, field: string): string {
|
|
290
277
|
const value = item?.[field];
|
|
291
|
-
return
|
|
278
|
+
return isString(value) ? value : "";
|
|
292
279
|
}
|
|
293
280
|
|
|
294
281
|
/** The scope's starting shape, before the first projection lands on it. */
|
|
@@ -332,7 +319,7 @@ export function mountSignalsSurface(
|
|
|
332
319
|
actions: SignalsActions,
|
|
333
320
|
paint: SignalIslandPainter,
|
|
334
321
|
): SignalsSurfaceHandle {
|
|
335
|
-
const scope = reactive<SignalsScope>({
|
|
322
|
+
const scope: SignalsScope = reactive<SignalsScope>({
|
|
336
323
|
...emptyView(),
|
|
337
324
|
...actions,
|
|
338
325
|
/* The picker never rests on what was picked. A controlled input is authoritative only while
|
|
@@ -346,7 +333,7 @@ export function mountSignalsSurface(
|
|
|
346
333
|
actions.addSignal(type);
|
|
347
334
|
scope.addValue = "";
|
|
348
335
|
},
|
|
349
|
-
})
|
|
336
|
+
});
|
|
350
337
|
project(scope, view);
|
|
351
338
|
|
|
352
339
|
/**
|
|
@@ -424,8 +411,7 @@ export function mountSignalsSurface(
|
|
|
424
411
|
whether this handle is still wanted — answering no would start a second mount racing the
|
|
425
412
|
first. Once mounted, the question is whether the root is still where it was put: a Navigator
|
|
426
413
|
that painted another panel cleared this document out from under it. */
|
|
427
|
-
attached: () =>
|
|
428
|
-
!disposed && (mounted === null || (mounted.root as Node).parentNode === container),
|
|
414
|
+
attached: () => !disposed && (mounted === null || mounted.root.parentNode === container),
|
|
429
415
|
dispose() {
|
|
430
416
|
disposed = true;
|
|
431
417
|
mounted?.dispose();
|
|
@@ -26,10 +26,9 @@
|
|
|
26
26
|
import { reactive } from "../reactivity";
|
|
27
27
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
28
28
|
import stylebookLayersDoc from "./panel-stylebook-layers.json";
|
|
29
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
30
29
|
import type { SurfaceHandle } from "../ui/surface";
|
|
31
30
|
|
|
32
|
-
registerSurface("panel-stylebook-layers", stylebookLayersDoc
|
|
31
|
+
registerSurface("panel-stylebook-layers", stylebookLayersDoc);
|
|
33
32
|
|
|
34
33
|
/**
|
|
35
34
|
* One line of the catalogue, as the document draws it. Every field is a value: no records, no
|
|
@@ -91,8 +90,7 @@ export interface StylebookLayersSurfaceHandle {
|
|
|
91
90
|
}
|
|
92
91
|
|
|
93
92
|
/** The scope the document reads: the projection, plus the one thing a row can ask for. */
|
|
94
|
-
interface StylebookLayersScope
|
|
95
|
-
extends Record<string, unknown>, StylebookLayersValues, StylebookLayersActions {}
|
|
93
|
+
interface StylebookLayersScope extends StylebookLayersValues, StylebookLayersActions {}
|
|
96
94
|
|
|
97
95
|
/** Write a projection into the scope. */
|
|
98
96
|
function project(scope: StylebookLayersScope, values: StylebookLayersValues): void {
|
|
@@ -116,13 +114,13 @@ export function mountStylebookLayersSurface(
|
|
|
116
114
|
values: StylebookLayersValues,
|
|
117
115
|
actions: StylebookLayersActions,
|
|
118
116
|
): StylebookLayersSurfaceHandle {
|
|
119
|
-
const scope = reactive<StylebookLayersScope>({
|
|
117
|
+
const scope: StylebookLayersScope = reactive<StylebookLayersScope>({
|
|
120
118
|
hasVariables: false,
|
|
121
119
|
rows: [],
|
|
122
120
|
selectRow: actions.selectRow,
|
|
123
121
|
tab: "elements",
|
|
124
122
|
variables: [],
|
|
125
|
-
})
|
|
123
|
+
});
|
|
126
124
|
project(scope, values);
|
|
127
125
|
|
|
128
126
|
let mounted: SurfaceHandle | null = null;
|
|
@@ -141,8 +139,7 @@ export function mountStylebookLayersSurface(
|
|
|
141
139
|
mount racing the first. Once mounted, the question is whether the root is still where it was
|
|
142
140
|
put: a Navigator that painted another panel, or the Outline's own lit branch, cleared this
|
|
143
141
|
document out from under it. */
|
|
144
|
-
connected: () =>
|
|
145
|
-
!disposed && (mounted === null || (mounted.root as Node).parentNode === container),
|
|
142
|
+
connected: () => !disposed && (mounted === null || mounted.root.parentNode === container),
|
|
146
143
|
dispose() {
|
|
147
144
|
disposed = true;
|
|
148
145
|
mounted?.dispose();
|