@jxsuite/studio 6.1.1 → 6.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{2020-va2wwra4.js → 2020-f2gkpy8d.js} +3 -3
- package/dist/chunks/{action-group-2mqby73c.js → action-group-4aan7g6g.js} +3 -3
- package/dist/chunks/adapter-4912g339.js +4 -0
- package/dist/chunks/cf-account-picker-wccaenh6.js +4 -0
- package/dist/chunks/cf-settings-br6105tr.js +4 -0
- package/dist/chunks/color-28ksk2qm.js +4 -0
- package/dist/chunks/color-area-0fj8a4ga.js +4 -0
- package/dist/chunks/color-field-xch8kx2g.js +4 -0
- package/dist/chunks/color-slider-jxd8v350.js +4 -0
- package/dist/chunks/combobox-p0efwjke.js +4 -0
- package/dist/chunks/components-db68vsn7.js +4 -0
- package/dist/chunks/content-source-1449qesq.js +4 -0
- package/dist/chunks/convert-to-repeater-5h457egj.js +4 -0
- package/dist/chunks/dialog-c4x05vyx.js +4 -0
- package/dist/chunks/editor-x9jn86a7.js +4 -0
- package/dist/chunks/entry-commands-may24cpt.js +4 -0
- package/dist/chunks/extension-sections-pvr14vxr.js +4 -0
- package/dist/chunks/file-ops-x9v54pcj.js +4 -0
- package/dist/chunks/files-j3knqf0s.js +4 -0
- package/dist/chunks/format-host-tyre2trb.js +4 -0
- package/dist/chunks/fs-events-64ma9htc.js +4 -0
- package/dist/chunks/git-panel-84ps5dex.js +4 -0
- package/dist/chunks/grid-view-d2wq9ezg.js +51 -0
- package/dist/chunks/icons-pnfz478q.js +4 -0
- package/dist/chunks/iframe-entry-fvbk89gm.js +5 -0
- package/dist/chunks/iframe-entry-jdcktez8.js +5 -0
- package/dist/chunks/iframe-entry-x0ygf2yr.js +5 -0
- package/dist/chunks/iframe-entry-zap785cw.js +5 -0
- package/dist/chunks/iframe-host-ck6vejt5.js +4 -0
- package/dist/chunks/index-b8xw3vy9.js +4 -0
- package/dist/chunks/{index-2veqmnhr.js → index-zpjmzqfk.js} +3 -3
- package/dist/chunks/{javascript-8nbvs12s.js → javascript-m54mnwp6.js} +3 -3
- package/dist/chunks/{jsonMode-s8kt9dsj.js → jsonMode-w15cmrcm.js} +8 -8
- package/dist/chunks/jx-validate-at3zn8wa.js +4 -0
- package/dist/chunks/layers-h4xp1pss.js +4 -0
- package/dist/chunks/layers-panel-m5hw1d7g.js +4 -0
- package/dist/chunks/listbox-e74qjyq6.js +4 -0
- package/dist/chunks/lit-html-8t8t3dnr.js +4 -0
- package/dist/chunks/media-picker-2cweexc5.js +4 -0
- package/dist/chunks/menu-n6yzswmy.js +4 -0
- package/dist/chunks/menu-ynw13y0s.js +4 -0
- package/dist/chunks/monaco-binding-7gx83x3r.js +4 -0
- package/dist/chunks/monaco-buffer-qzxn567r.js +4 -0
- package/dist/chunks/monaco-setup-gxf6656g.js +4 -0
- package/dist/chunks/notify-cj5zbrs2.js +4 -0
- package/dist/chunks/number-field-y62xq0ty.js +4 -0
- package/dist/chunks/parse-b7ddhr8m.js +4 -0
- package/dist/chunks/platform-3dfws9js.js +4 -0
- package/dist/chunks/popover-jt2gxmzs.js +4 -0
- package/dist/chunks/publish-panel-1gvxbj21.js +4 -0
- package/dist/chunks/quick-search-0dajrwqg.js +4 -0
- package/dist/chunks/references-49qgt404.js +4 -0
- package/dist/chunks/right-panel-jm1bwe53.js +4 -0
- package/dist/chunks/section-registry-6kwc4fky.js +4 -0
- package/dist/chunks/select-rzds841e.js +4 -0
- package/dist/chunks/split-n2gfpm5m.js +4 -0
- package/dist/chunks/{studio-1q1sh2ax.js → studio-0q988f9w.js} +3 -3
- package/dist/chunks/studio-0rt52vpq.js +5 -0
- package/dist/chunks/studio-18vgbhs5.js +5 -0
- package/dist/chunks/{studio-h46vtzk8.js → studio-1fxkaaea.js} +4 -4
- package/dist/chunks/studio-24mccdrj.js +5 -0
- package/dist/chunks/studio-2eh507zk.js +9 -0
- package/dist/chunks/studio-2hcbccfv.js +5 -0
- package/dist/chunks/studio-2j1cb95x.js +5 -0
- package/dist/chunks/studio-2jbs3rxv.js +5 -0
- package/dist/chunks/{studio-rv11kfwa.js → studio-485046te.js} +7 -7
- package/dist/chunks/studio-4h8k4dw9.js +5 -0
- package/dist/chunks/studio-5f6n18kx.js +5 -0
- package/dist/chunks/studio-5gthpky6.js +5 -0
- package/dist/chunks/studio-5ve6bbep.js +5 -0
- package/dist/chunks/studio-6ep3js6b.js +9 -0
- package/dist/chunks/studio-6wkmf3wz.js +9 -0
- package/dist/chunks/studio-841rf3cg.js +5 -0
- package/dist/chunks/studio-8gmwgheg.js +5 -0
- package/dist/chunks/studio-8qm0ep50.js +5 -0
- package/dist/chunks/{studio-8grwxtqk.js → studio-90pq9km1.js} +4 -4
- package/dist/chunks/studio-924p1tm1.js +6 -0
- package/dist/chunks/{studio-pre0skq6.js → studio-a3g98wjr.js} +4 -4
- package/dist/chunks/studio-a3shpz9y.js +5 -0
- package/dist/chunks/studio-amsbaaar.js +6 -0
- package/dist/chunks/studio-at5spjbc.js +7 -0
- package/dist/chunks/studio-b2xv945e.js +5 -0
- package/dist/chunks/studio-bn5nkafw.js +5 -0
- package/dist/chunks/studio-bw6q5xjf.js +9 -0
- package/dist/chunks/studio-c7q0t9x1.js +5 -0
- package/dist/chunks/studio-camnhc96.js +6 -0
- package/dist/chunks/studio-cffqvnzd.js +5 -0
- package/dist/chunks/studio-d81xfh1g.js +5 -0
- package/dist/chunks/studio-dgz8d0c1.js +5 -0
- package/dist/chunks/studio-efvfrsf8.js +5 -0
- package/dist/chunks/studio-er30bpcx.js +5 -0
- package/dist/chunks/studio-ezscgr64.js +5 -0
- package/dist/chunks/studio-ffrrncvz.js +5 -0
- package/dist/chunks/studio-fpphgn8y.js +10 -0
- package/dist/chunks/studio-j1kvhdjk.js +4 -0
- package/dist/chunks/{studio-vrmcjf9g.js → studio-j430n16g.js} +5 -5
- package/dist/chunks/studio-jjkg84nj.js +5 -0
- package/dist/chunks/studio-m0q32ars.js +4 -0
- package/dist/chunks/studio-m6bdst11.js +5 -0
- package/dist/chunks/studio-nv2cptd4.js +64 -0
- package/dist/chunks/studio-nwfrc98n.js +5 -0
- package/dist/chunks/studio-p1wgvp7r.js +5 -0
- package/dist/chunks/studio-pag2wncm.js +5 -0
- package/dist/chunks/studio-qvanvzfd.js +5 -0
- package/dist/chunks/studio-qwa64kt7.js +5 -0
- package/dist/chunks/studio-rk1zc4x3.js +928 -0
- package/dist/chunks/studio-se2r3ptc.js +5 -0
- package/dist/chunks/studio-sg2a0dh0.js +5 -0
- package/dist/chunks/studio-tjzjhe68.js +5 -0
- package/dist/chunks/{studio-wszjyh0j.js → studio-tq0rtfwj.js} +4 -4
- package/dist/chunks/{studio-kggey1jt.js → studio-v0jzqdjm.js} +4 -4
- package/dist/chunks/studio-v2w7q8r1.js +7 -0
- package/dist/chunks/studio-v5vjq1h0.js +4 -0
- package/dist/chunks/studio-v8aga3vp.js +14 -0
- package/dist/chunks/studio-vfcdrfmv.js +5 -0
- package/dist/chunks/studio-vmfkgdjf.js +5 -0
- package/dist/chunks/studio-wt1816jj.js +5 -0
- package/dist/chunks/studio-wz73q5kq.js +4 -0
- package/dist/chunks/studio-y04qtxvp.js +7 -0
- package/dist/chunks/studio-y21g8zzg.js +5 -0
- package/dist/chunks/{studio-zey7zsdw.js → studio-y64hrt8p.js} +7 -7
- package/dist/chunks/studio-ynn90f58.js +16 -0
- package/dist/chunks/studio-yxz682sx.js +5 -0
- package/dist/chunks/studio-zp7snvkq.js +5 -0
- package/dist/chunks/studio-zq4z6tm6.js +5 -0
- package/dist/chunks/swatch-group-ewh24n1f.js +4 -0
- package/dist/chunks/tabs-f5cw3tgp.js +4 -0
- package/dist/chunks/textfield-wewc8rq2.js +4 -0
- package/dist/chunks/toast-c9fn075p.js +4 -0
- package/dist/chunks/toast-host-ke5z4ng7.js +4 -0
- package/dist/chunks/{toolbar-2nnzqhrj.js → toolbar-44cm5cta.js} +3 -3
- package/dist/chunks/tooltip-5v8ngwj2.js +4 -0
- package/dist/chunks/tree-mdq3v5cw.js +4 -0
- package/dist/chunks/{tsMode-2frah6h1.js → tsMode-sf49ee9x.js} +7 -7
- package/dist/chunks/workspace-jtfahpee.js +4 -0
- package/dist/chunks/ws-client-nze0k6mv.js +4 -0
- package/dist/iframe-entry.js +16 -16
- package/dist/manifest.json +63 -63
- package/dist/studio.js +97 -97
- package/package.json +6 -6
- package/src/about/about-modal.ts +4 -3
- package/src/account/action-flow.ts +45 -38
- package/src/account-status.ts +7 -2
- package/src/browse/library-layouts.ts +8 -5
- package/src/browse/library-model.ts +18 -6
- package/src/browse/library-pane.ts +37 -21
- package/src/browse/library-preview.ts +14 -9
- package/src/browse/library-source.ts +1 -1
- package/src/canvas/asset-refs.ts +24 -9
- package/src/canvas/asset-resolve.ts +19 -23
- package/src/canvas/canvas-helpers.ts +7 -6
- package/src/canvas/canvas-live-render.ts +44 -53
- package/src/canvas/canvas-patcher.ts +30 -30
- package/src/canvas/canvas-perf.ts +11 -5
- package/src/canvas/canvas-render.ts +62 -41
- package/src/canvas/canvas-surface.ts +5 -3
- package/src/canvas/canvas-utils.ts +90 -49
- package/src/canvas/dialog-path.ts +9 -4
- package/src/canvas/dialog-state.ts +1 -2
- package/src/canvas/diff-marks.ts +9 -16
- package/src/canvas/diff-toolbar.ts +8 -7
- package/src/canvas/edit-width-drag.ts +4 -1
- package/src/canvas/edit-width.ts +1 -3
- package/src/canvas/iframe-channel.ts +27 -13
- package/src/canvas/iframe-drop.ts +13 -12
- package/src/canvas/iframe-editable-root.ts +29 -16
- package/src/canvas/iframe-entry.ts +80 -63
- package/src/canvas/iframe-eval.ts +73 -49
- package/src/canvas/iframe-host.ts +135 -96
- package/src/canvas/iframe-inline-edit.ts +49 -30
- package/src/canvas/iframe-insert.ts +5 -4
- package/src/canvas/iframe-interaction.ts +30 -25
- package/src/canvas/iframe-overlay.ts +1 -1
- package/src/canvas/iframe-patch.ts +18 -15
- package/src/canvas/iframe-position.ts +12 -6
- package/src/canvas/iframe-protocol.ts +12 -16
- package/src/canvas/iframe-render.ts +36 -34
- package/src/canvas/iframe-slash.ts +24 -11
- package/src/canvas/iframe-subtree.ts +6 -2
- package/src/canvas/path-mapping.ts +19 -12
- package/src/canvas/popover-path.ts +7 -3
- package/src/canvas/popover-state.ts +1 -2
- package/src/canvas/serialize-scope.ts +13 -5
- package/src/canvas/stage-scrollbar.ts +2 -1
- package/src/canvas/surface-registry.ts +21 -3
- package/src/collab/collab-commands.ts +7 -2
- package/src/collab/collab-session.ts +84 -45
- package/src/collab/collab-state.ts +4 -3
- package/src/collab/monaco-binding.ts +16 -13
- package/src/collab/monaco-cursors.ts +5 -2
- package/src/commands/budget.ts +3 -3
- package/src/commands/command-args.ts +103 -71
- package/src/commands/context.ts +22 -20
- package/src/commands/keymap.ts +47 -43
- package/src/commands/levels.ts +3 -3
- package/src/commands/live-context.ts +7 -7
- package/src/commands/reference.ts +2 -1
- package/src/commands/registry.ts +12 -10
- package/src/commands/run-reported.ts +15 -10
- package/src/component-props.ts +46 -30
- package/src/content/collection-match.ts +5 -4
- package/src/content/draft-state.ts +4 -3
- package/src/content/entry-commands.ts +3 -2
- package/src/content/entry-editor.ts +29 -17
- package/src/content/entry-fields.ts +12 -7
- package/src/content/entry-model.ts +21 -12
- package/src/editor/canvas-context-menu.ts +1 -2
- package/src/editor/canvas-slash-bridge.ts +3 -6
- package/src/editor/content-slice.ts +16 -14
- package/src/editor/context-menu.ts +35 -22
- package/src/editor/convert-targets.ts +30 -35
- package/src/editor/convert-to-component.ts +11 -5
- package/src/editor/convert-to-repeater.ts +34 -22
- package/src/editor/editable-tags.ts +17 -2
- package/src/editor/file-drop-action.ts +21 -22
- package/src/editor/inline-edit-apply.ts +35 -17
- package/src/editor/inline-edit.ts +66 -50
- package/src/editor/inline-format.ts +59 -56
- package/src/editor/inline-link.ts +40 -15
- package/src/editor/insert-zone-action.ts +1 -1
- package/src/editor/merge-tags.ts +58 -19
- package/src/editor/repeater-scope.ts +39 -28
- package/src/editor/shortcuts.ts +32 -20
- package/src/editor/slash-menu.ts +1 -6
- package/src/files/asset-versions.ts +4 -4
- package/src/files/components.ts +15 -10
- package/src/files/elements.ts +5 -6
- package/src/files/file-ops.ts +77 -36
- package/src/files/files.ts +90 -95
- package/src/files/media-meta.ts +2 -1
- package/src/files/media-paths.ts +3 -0
- package/src/files/serialize-document.ts +2 -2
- package/src/format/constraints.ts +1 -1
- package/src/format/convert-file.ts +27 -13
- package/src/format/format-choices.ts +2 -1
- package/src/format/format-host.ts +76 -50
- package/src/github/github-auth-status.ts +27 -3
- package/src/github/github-auth.ts +19 -9
- package/src/github/github-publish.ts +24 -20
- package/src/grid/cell-editors.ts +46 -31
- package/src/grid/cell-popovers.ts +5 -3
- package/src/grid/edit-buffer.ts +10 -9
- package/src/grid/grid-controller.ts +20 -22
- package/src/grid/grid-layout.ts +21 -5
- package/src/grid/grid-open.ts +3 -6
- package/src/grid/grid-panel.ts +11 -4
- package/src/grid/grid-source.ts +8 -8
- package/src/grid/grid-view.ts +14 -17
- package/src/grid/redirects-grid.ts +14 -5
- package/src/grid/redirects.ts +16 -14
- package/src/grid/schema-columns.ts +25 -19
- package/src/grid/sources/connector-source.ts +47 -20
- package/src/grid/sources/content-source.ts +25 -24
- package/src/grid/sources/csv-file-source.ts +2 -2
- package/src/grid/tabulator-tables.d.ts +55 -34
- package/src/hosting/stage.ts +7 -7
- package/src/i18n/i18n-commands.ts +1 -2
- package/src/media/media-pane.ts +4 -1
- package/src/new-project/add-repo-modal.ts +20 -19
- package/src/new-project/import-tab.ts +10 -14
- package/src/new-project/location-fields.ts +2 -1
- package/src/new-project/new-project-modal.ts +12 -9
- package/src/packages/jxsuite-update.ts +4 -3
- package/src/packages/pull-package-sync.ts +26 -25
- package/src/page-params.ts +97 -68
- package/src/panels/activity-panel.ts +17 -9
- package/src/panels/ai-chat/attached-context.ts +13 -7
- package/src/panels/ai-chat/chat-view.ts +80 -73
- package/src/panels/ai-chat/composer.ts +30 -33
- package/src/panels/ai-chat/sessions-view.ts +1 -2
- package/src/panels/ai-panel.ts +23 -20
- package/src/panels/block-action-bar.ts +46 -35
- package/src/panels/bottom-dock.ts +5 -3
- package/src/panels/canvas-dnd-bridge.ts +31 -24
- package/src/panels/data-explorer.ts +62 -25
- package/src/panels/data-grid.ts +14 -11
- package/src/panels/dnd.ts +108 -118
- package/src/panels/editors.ts +52 -21
- package/src/panels/elements-panel.ts +10 -3
- package/src/panels/events-panel.ts +84 -69
- package/src/panels/formula-workspace.ts +76 -51
- package/src/panels/frontmatter-fields.ts +24 -19
- package/src/panels/frontmatter-panel.ts +44 -34
- package/src/panels/git-diff-open.ts +4 -4
- package/src/panels/git-panel.ts +49 -61
- package/src/panels/head-panel.ts +131 -111
- package/src/panels/i18n-panel.ts +10 -3
- package/src/panels/imports-panel.ts +23 -47
- package/src/panels/jump-bar.ts +48 -29
- package/src/panels/layers-panel.ts +97 -74
- package/src/panels/left-panel.ts +3 -3
- package/src/panels/pane-context.ts +31 -22
- package/src/panels/pane-grid.ts +49 -20
- package/src/panels/panel-registry.ts +22 -37
- package/src/panels/properties-panel.ts +175 -121
- package/src/panels/quick-search.ts +53 -31
- package/src/panels/right-panel.ts +3 -3
- package/src/panels/seo-modal.ts +13 -17
- package/src/panels/settings-menu.ts +15 -15
- package/src/panels/signals-panel.ts +153 -131
- package/src/panels/statement-editor.ts +230 -140
- package/src/panels/style-panel.ts +218 -205
- package/src/panels/style-utils.ts +114 -51
- package/src/panels/stylebook-doc.ts +57 -54
- package/src/panels/stylebook-layers-panel.ts +9 -9
- package/src/panels/stylebook-panel.ts +13 -17
- package/src/panels/tab-drop.ts +27 -11
- package/src/panels/tab-strip.ts +36 -26
- package/src/platform-errors.ts +57 -43
- package/src/platform.ts +58 -30
- package/src/platforms/cloud.ts +345 -175
- package/src/platforms/default-platform.ts +10 -4
- package/src/platforms/devserver.ts +129 -117
- package/src/platforms/read-batcher.ts +16 -8
- package/src/project-list.ts +2 -1
- package/src/publish/deploy-checklist.ts +8 -2
- package/src/publish/pages-service.ts +28 -13
- package/src/publish/publish-commands.ts +5 -4
- package/src/publish/publish-panel.ts +10 -6
- package/src/recent-projects.ts +15 -8
- package/src/resize-edges.ts +26 -36
- package/src/services/a11y-report.ts +26 -19
- package/src/services/agent-seed.ts +23 -11
- package/src/services/ai-ask.ts +9 -12
- package/src/services/ai-command-tools.ts +68 -62
- package/src/services/ai-import-tools.ts +80 -67
- package/src/services/ai-models.ts +17 -13
- package/src/services/ai-project-tools.ts +68 -32
- package/src/services/ai-session-store.ts +19 -10
- package/src/services/ai-system-prompt.ts +46 -20
- package/src/services/ai-tools.ts +71 -27
- package/src/services/ai-write-report.ts +20 -12
- package/src/services/ai-writes.ts +4 -4
- package/src/services/automation.ts +58 -31
- package/src/services/cem-export.ts +149 -58
- package/src/services/clock.ts +6 -1
- package/src/services/code-services.ts +37 -31
- package/src/services/context-manager.ts +14 -10
- package/src/services/context-resolver.ts +20 -8
- package/src/services/data-service.ts +19 -15
- package/src/services/directory-picker.ts +18 -12
- package/src/services/document-assistant.ts +39 -19
- package/src/services/gated-registry.ts +10 -6
- package/src/services/harness/chat-reducer.ts +23 -1
- package/src/services/import-client.ts +91 -38
- package/src/services/import-seed.ts +8 -2
- package/src/services/jx-validate.ts +28 -31
- package/src/services/live-preview.ts +0 -0
- package/src/services/live-surfaces.ts +6 -3
- package/src/services/model-uri.ts +10 -2
- package/src/services/module-preloads.ts +12 -8
- package/src/services/monaco-buffer.ts +43 -24
- package/src/services/monaco-lazy.ts +7 -8
- package/src/services/monaco-setup.ts +23 -16
- package/src/services/notify.ts +44 -17
- package/src/services/popover-report.ts +25 -10
- package/src/services/preview-eval.ts +20 -8
- package/src/services/profile.ts +13 -6
- package/src/services/project-path.ts +13 -10
- package/src/services/references.ts +0 -0
- package/src/services/render-critic.ts +8 -7
- package/src/services/settings/kernel.ts +13 -4
- package/src/services/settings/write-queue.ts +9 -9
- package/src/services/token-lint.ts +12 -10
- package/src/services/tool-executor.ts +17 -5
- package/src/services/tool-outcomes.ts +44 -24
- package/src/services/trusted-types.ts +24 -7
- package/src/settings/contexts-section.ts +11 -8
- package/src/settings/contributed-section.ts +79 -60
- package/src/settings/css-vars-editor.ts +37 -16
- package/src/settings/defs-editor.ts +38 -35
- package/src/settings/extension-rows.ts +16 -8
- package/src/settings/extension-sections.ts +23 -13
- package/src/settings/extensions-section.ts +4 -1
- package/src/settings/general-settings.ts +11 -8
- package/src/settings/locales-section.ts +20 -12
- package/src/settings/preferences-dialog.ts +9 -6
- package/src/settings/preferences-keymap.ts +7 -5
- package/src/settings/preferences-sections.ts +11 -5
- package/src/settings/project-sections.ts +1 -1
- package/src/settings/schema-field-ui.ts +9 -0
- package/src/settings/settings-document.ts +5 -5
- package/src/shell/tree.ts +6 -5
- package/src/shell.ts +104 -81
- package/src/site-context.ts +37 -22
- package/src/state.ts +41 -49
- package/src/store.ts +54 -34
- package/src/studio.ts +25 -75
- package/src/style/live-preview.ts +1 -1
- package/src/style/project-styles.ts +6 -7
- package/src/style/token-ref.ts +5 -4
- package/src/surfaces/about.ts +18 -19
- package/src/surfaces/add-repo.ts +17 -19
- package/src/surfaces/ai-chat.ts +31 -36
- package/src/surfaces/ai-credentials-form.ts +6 -16
- package/src/surfaces/ai-managed-connect.ts +3 -4
- package/src/surfaces/ai-model-picker.ts +3 -5
- package/src/surfaces/block-action-bar.ts +22 -11
- package/src/surfaces/boot-failure.ts +4 -5
- package/src/surfaces/bottom-dock.ts +9 -18
- package/src/surfaces/canvas-stage.ts +12 -11
- package/src/surfaces/cf-account-picker.ts +17 -18
- package/src/surfaces/commandbar.ts +14 -9
- package/src/surfaces/convert-repeater.ts +17 -19
- package/src/surfaces/data-actions.ts +9 -7
- package/src/surfaces/dialog.ts +26 -28
- package/src/surfaces/diff-toolbar.ts +9 -7
- package/src/surfaces/doc-header.ts +10 -19
- package/src/surfaces/empty-state.ts +7 -10
- package/src/surfaces/entry-editor.ts +14 -11
- package/src/surfaces/expression-editor.ts +11 -25
- package/src/surfaces/files-panel.ts +27 -14
- package/src/surfaces/formula-palette.ts +4 -5
- package/src/surfaces/git-panel.ts +7 -15
- package/src/surfaces/github-auth.ts +16 -20
- package/src/surfaces/github-publish.ts +17 -22
- package/src/surfaces/grid-cell.ts +30 -31
- package/src/surfaces/grid-open.ts +10 -14
- package/src/surfaces/grid-panel.ts +13 -9
- package/src/surfaces/grid-replace.ts +13 -13
- package/src/surfaces/grid-views.ts +15 -18
- package/src/surfaces/inspector-dock.ts +13 -12
- package/src/surfaces/jump-bar.ts +5 -6
- package/src/surfaces/jxsuite-update.ts +16 -22
- package/src/surfaces/library-pane.ts +19 -20
- package/src/surfaces/logic-panel.ts +17 -30
- package/src/surfaces/logic-workspace.ts +13 -15
- package/src/surfaces/media-browser.ts +11 -10
- package/src/surfaces/media-field.ts +4 -5
- package/src/surfaces/media-pane.ts +8 -7
- package/src/surfaces/menu.ts +29 -23
- package/src/surfaces/navigator-dock.ts +11 -12
- package/src/surfaces/new-project.ts +27 -26
- package/src/surfaces/pane-context.ts +20 -25
- package/src/surfaces/pane-grid.ts +15 -10
- package/src/surfaces/panel-activity.ts +5 -6
- package/src/surfaces/panel-data.ts +3 -4
- package/src/surfaces/panel-deploy-checklist.ts +5 -6
- package/src/surfaces/panel-elements.ts +5 -7
- package/src/surfaces/panel-i18n.ts +5 -7
- package/src/surfaces/panel-imports.ts +6 -13
- package/src/surfaces/panel-outline.ts +25 -19
- package/src/surfaces/panel-page.ts +11 -18
- package/src/surfaces/panel-problems.ts +5 -7
- package/src/surfaces/panel-signals.ts +20 -34
- package/src/surfaces/panel-stylebook-layers.ts +5 -8
- package/src/surfaces/preferences.ts +21 -11
- package/src/surfaces/progress-modal.ts +15 -9
- package/src/surfaces/properties-panel.json +1 -1
- package/src/surfaces/properties-panel.ts +20 -42
- package/src/surfaces/publish.ts +18 -18
- package/src/surfaces/push-plan.ts +7 -8
- package/src/surfaces/rail.ts +13 -13
- package/src/surfaces/reference-field.ts +11 -15
- package/src/surfaces/schema-builder.ts +16 -22
- package/src/surfaces/schema-form.ts +15 -25
- package/src/surfaces/secret-field.ts +9 -6
- package/src/surfaces/seo.ts +21 -15
- package/src/surfaces/settings-contexts.ts +9 -7
- package/src/surfaces/settings-contributed.ts +14 -10
- package/src/surfaces/settings-css-vars.ts +5 -12
- package/src/surfaces/settings-defs.json +2 -2
- package/src/surfaces/settings-defs.ts +17 -21
- package/src/surfaces/settings-deploy.ts +8 -15
- package/src/surfaces/settings-extensions.ts +5 -6
- package/src/surfaces/settings-head.ts +33 -39
- package/src/surfaces/settings-locales.ts +8 -20
- package/src/surfaces/settings-overview.ts +5 -6
- package/src/surfaces/settings-packages.ts +8 -7
- package/src/surfaces/settings-pane.ts +9 -18
- package/src/surfaces/settings-rawjson.ts +5 -6
- package/src/surfaces/shell.ts +1 -2
- package/src/surfaces/slash-menu.ts +19 -9
- package/src/surfaces/statements.ts +13 -18
- package/src/surfaces/statusbar.ts +17 -14
- package/src/surfaces/style-panel.ts +18 -31
- package/src/surfaces/stylebook-chrome.ts +3 -5
- package/src/surfaces/tab-strip.ts +14 -13
- package/src/surfaces/target-line.ts +6 -7
- package/src/surfaces/welcome.ts +5 -7
- package/src/tabs/patch-ops.ts +4 -3
- package/src/tabs/project-config.ts +32 -21
- package/src/tabs/selection.ts +36 -8
- package/src/tabs/tab.ts +52 -41
- package/src/tabs/transact.ts +98 -53
- package/src/types.ts +32 -17
- package/src/ui/ai-credentials-form.ts +10 -13
- package/src/ui/ai-model-picker.ts +3 -3
- package/src/ui/cf-account-picker.ts +7 -9
- package/src/ui/color-selector.ts +9 -5
- package/src/ui/dynamic-slot.ts +7 -8
- package/src/ui/expression-editor.ts +112 -105
- package/src/ui/form-controls.ts +57 -48
- package/src/ui/formula-catalog.ts +239 -230
- package/src/ui/formula-chips.ts +33 -18
- package/src/ui/layers.ts +44 -31
- package/src/ui/media-picker.ts +18 -9
- package/src/ui/popover-surface.ts +20 -12
- package/src/ui/progress-modal.ts +13 -8
- package/src/ui/regions.ts +7 -6
- package/src/ui/schema-form.ts +113 -70
- package/src/ui/surface.ts +71 -8
- package/src/ui/timing.ts +9 -0
- package/src/ui/value-source.ts +44 -31
- package/src/ui/virtual-window.ts +3 -2
- package/src/utils/base64.ts +3 -1
- package/src/utils/edit-display.ts +73 -73
- package/src/utils/element-selectors.ts +3 -2
- package/src/utils/google-fonts.ts +15 -14
- package/src/utils/inherited-style.ts +18 -20
- package/src/utils/link-target.ts +1 -1
- package/src/utils/preview-format.ts +25 -3
- package/src/utils/strip-events.ts +49 -22
- package/src/utils/studio-utils.ts +29 -14
- package/src/view.ts +2 -3
- package/src/workspace/pane-derive.ts +10 -12
- package/src/workspace/session.ts +53 -43
- package/src/workspace/workspace.ts +40 -36
- package/dist/chunks/adapter-f93pafd7.js +0 -4
- package/dist/chunks/cf-account-picker-af1h381v.js +0 -4
- package/dist/chunks/cf-settings-125tdm0w.js +0 -4
- package/dist/chunks/color-area-jqhna8zy.js +0 -4
- package/dist/chunks/color-field-embq5ctg.js +0 -4
- package/dist/chunks/color-fpezvnkt.js +0 -4
- package/dist/chunks/color-slider-1qmw7wqy.js +0 -4
- package/dist/chunks/combobox-773hdzyj.js +0 -4
- package/dist/chunks/components-ax2f1fnn.js +0 -4
- package/dist/chunks/content-source-108aqtk1.js +0 -4
- package/dist/chunks/convert-to-repeater-ry5rmppr.js +0 -4
- package/dist/chunks/dialog-mtm9fq5t.js +0 -4
- package/dist/chunks/editor-pfgdmkb0.js +0 -4
- package/dist/chunks/entry-commands-t0k1q0kx.js +0 -4
- package/dist/chunks/extension-sections-6mwh2hf8.js +0 -4
- package/dist/chunks/file-ops-meej5mqf.js +0 -4
- package/dist/chunks/files-44vp8a2s.js +0 -4
- package/dist/chunks/format-host-7q1petb9.js +0 -4
- package/dist/chunks/fs-events-h2mwnxaz.js +0 -4
- package/dist/chunks/git-panel-zngbymvd.js +0 -4
- package/dist/chunks/grid-view-sx9vynsp.js +0 -51
- package/dist/chunks/icons-p44xhjf0.js +0 -4
- package/dist/chunks/iframe-entry-f7mqjwpm.js +0 -5
- package/dist/chunks/iframe-entry-haw7jkvz.js +0 -5
- package/dist/chunks/iframe-entry-z6qrytv3.js +0 -5
- package/dist/chunks/iframe-host-qk3ycq87.js +0 -4
- package/dist/chunks/index-wkyfjeqz.js +0 -4
- package/dist/chunks/jx-validate-psgd7vsx.js +0 -4
- package/dist/chunks/layers-panel-1kq2jyfk.js +0 -4
- package/dist/chunks/layers-xd92fg8d.js +0 -4
- package/dist/chunks/listbox-s8fkmnq8.js +0 -4
- package/dist/chunks/lit-html-ac4cwwr4.js +0 -4
- package/dist/chunks/media-picker-0svzkdyb.js +0 -4
- package/dist/chunks/menu-37d07z9m.js +0 -4
- package/dist/chunks/menu-5c55ea3d.js +0 -4
- package/dist/chunks/monaco-binding-z6r70pdt.js +0 -4
- package/dist/chunks/monaco-buffer-fz6gq5y7.js +0 -4
- package/dist/chunks/monaco-setup-q4axkgj7.js +0 -4
- package/dist/chunks/notify-0xgtn8q1.js +0 -4
- package/dist/chunks/number-field-gw7sq8rn.js +0 -4
- package/dist/chunks/parse-897fvqah.js +0 -4
- package/dist/chunks/platform-v1qctbe6.js +0 -4
- package/dist/chunks/popover-8htra4er.js +0 -4
- package/dist/chunks/publish-panel-ym1fmgq5.js +0 -4
- package/dist/chunks/quick-search-a54e6t5n.js +0 -4
- package/dist/chunks/references-gmqp82fs.js +0 -4
- package/dist/chunks/right-panel-v7t9awbk.js +0 -4
- package/dist/chunks/section-registry-vhyf3zsr.js +0 -4
- package/dist/chunks/select-n3v7gwas.js +0 -4
- package/dist/chunks/split-pff8f3ze.js +0 -4
- package/dist/chunks/studio-0bhx5hz6.js +0 -5
- package/dist/chunks/studio-0k1ddnyy.js +0 -6
- package/dist/chunks/studio-1b04pd0j.js +0 -64
- package/dist/chunks/studio-4dwbj6gb.js +0 -5
- package/dist/chunks/studio-4tanh828.js +0 -5
- package/dist/chunks/studio-55h4mstj.js +0 -4
- package/dist/chunks/studio-5tnvjkz4.js +0 -5
- package/dist/chunks/studio-60dqgb0c.js +0 -5
- package/dist/chunks/studio-61dp09qg.js +0 -9
- package/dist/chunks/studio-63epcrj2.js +0 -5
- package/dist/chunks/studio-74k29dy9.js +0 -5
- package/dist/chunks/studio-7vg6jcd3.js +0 -5
- package/dist/chunks/studio-7zx31knw.js +0 -9
- package/dist/chunks/studio-8bxk97km.js +0 -5
- package/dist/chunks/studio-933e30n4.js +0 -5
- package/dist/chunks/studio-98wnwhbg.js +0 -5
- package/dist/chunks/studio-9mccjwjh.js +0 -14
- package/dist/chunks/studio-a2ke1e4t.js +0 -5
- package/dist/chunks/studio-e3a2a6v3.js +0 -4
- package/dist/chunks/studio-e81q1vb9.js +0 -5
- package/dist/chunks/studio-epgrmqqm.js +0 -5
- package/dist/chunks/studio-ery42sqr.js +0 -4
- package/dist/chunks/studio-g1shz58g.js +0 -5
- package/dist/chunks/studio-gf0fz03c.js +0 -5
- package/dist/chunks/studio-gjtpe62q.js +0 -6
- package/dist/chunks/studio-gkskhg7m.js +0 -5
- package/dist/chunks/studio-gx4dnjzd.js +0 -5
- package/dist/chunks/studio-j03zga3y.js +0 -9
- package/dist/chunks/studio-jhpxeckz.js +0 -5
- package/dist/chunks/studio-k01r7ykp.js +0 -5
- package/dist/chunks/studio-kk7h30ne.js +0 -7
- package/dist/chunks/studio-kt1zqney.js +0 -5
- package/dist/chunks/studio-m3cwhvye.js +0 -5
- package/dist/chunks/studio-mcayt6hz.js +0 -5
- package/dist/chunks/studio-myjcghv3.js +0 -5
- package/dist/chunks/studio-n8bxwc3y.js +0 -4
- package/dist/chunks/studio-ngm8gvpb.js +0 -5
- package/dist/chunks/studio-nj5a01jy.js +0 -928
- package/dist/chunks/studio-pcgz8heb.js +0 -5
- package/dist/chunks/studio-qcsq0t15.js +0 -5
- package/dist/chunks/studio-qkstvve9.js +0 -5
- package/dist/chunks/studio-qv1pwd3c.js +0 -5
- package/dist/chunks/studio-rc6dvxjb.js +0 -7
- package/dist/chunks/studio-s8dmmz66.js +0 -5
- package/dist/chunks/studio-sp5xzbj4.js +0 -6
- package/dist/chunks/studio-szsjbj0g.js +0 -5
- package/dist/chunks/studio-t1xzawhr.js +0 -16
- package/dist/chunks/studio-t6b6qe31.js +0 -5
- package/dist/chunks/studio-tdcprbqb.js +0 -5
- package/dist/chunks/studio-vyc0b4he.js +0 -10
- package/dist/chunks/studio-w0cgf6jg.js +0 -5
- package/dist/chunks/studio-w3hskzqk.js +0 -5
- package/dist/chunks/studio-xgrgcdyh.js +0 -9
- package/dist/chunks/studio-xz2yxfcb.js +0 -5
- package/dist/chunks/studio-y6n42tgs.js +0 -5
- package/dist/chunks/studio-yb560vxr.js +0 -5
- package/dist/chunks/studio-yn9f8vtx.js +0 -5
- package/dist/chunks/studio-yw05w8f0.js +0 -7
- package/dist/chunks/studio-z16sgavc.js +0 -5
- package/dist/chunks/studio-zyqn40w4.js +0 -5
- package/dist/chunks/swatch-group-8qh9a3bm.js +0 -4
- package/dist/chunks/tabs-jwthg40w.js +0 -4
- package/dist/chunks/textfield-spy3hc77.js +0 -4
- package/dist/chunks/toast-4d35zd64.js +0 -4
- package/dist/chunks/toast-host-8sjmfed3.js +0 -4
- package/dist/chunks/tooltip-fd6g9xy3.js +0 -4
- package/dist/chunks/tree-h19v1jfz.js +0 -4
- package/dist/chunks/workspace-zt81g1ms.js +0 -4
- package/dist/chunks/ws-client-n2bh4hkf.js +0 -4
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* Settings › Data Shapes edits the project's `$defs` and this edits a content type's `schema`, and
|
|
20
20
|
* they are the same object drawn with the same six controls per row — so the two documents are the
|
|
21
21
|
* same card inside a different shell, and the views are one set of types. A second declaration of
|
|
22
|
-
* {@link
|
|
22
|
+
* {@link DefsFieldView} would be the point at which the two cards start to drift, one field at a
|
|
23
23
|
* time, with nothing failing.
|
|
24
24
|
*
|
|
25
25
|
* @docs studio/data/tables
|
|
@@ -29,28 +29,18 @@ import { reactive } from "../reactivity";
|
|
|
29
29
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
30
30
|
import builderDoc from "./schema-builder.json";
|
|
31
31
|
|
|
32
|
-
import type {
|
|
33
|
-
import type {
|
|
34
|
-
import type { DefsChoice, DefsFieldView, NestedFieldView } from "./settings-defs";
|
|
32
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
33
|
+
import type { DefsFieldView } from "./settings-defs";
|
|
35
34
|
|
|
36
|
-
registerSurface("schema-builder", builderDoc
|
|
37
|
-
|
|
38
|
-
/** One row of a picker: a field type, a format, or a reference target. */
|
|
39
|
-
export type SchemaFieldChoice = DefsChoice;
|
|
40
|
-
|
|
41
|
-
/** One field of the object being edited, as the document draws it. */
|
|
42
|
-
export type SchemaFieldView = DefsFieldView;
|
|
43
|
-
|
|
44
|
-
/** One child of an `object` field. It carries its parent — a nested `$map` shadows `$map.item`. */
|
|
45
|
-
export type NestedSchemaFieldView = NestedFieldView;
|
|
35
|
+
registerSurface("schema-builder", builderDoc);
|
|
46
36
|
|
|
47
37
|
/** Everything the document draws, as one value. */
|
|
48
38
|
export interface SchemaBuilderView {
|
|
49
|
-
fields:
|
|
50
|
-
typeOptions:
|
|
51
|
-
formatOptions:
|
|
39
|
+
fields: DefsFieldView[];
|
|
40
|
+
typeOptions: SurfaceOption[];
|
|
41
|
+
formatOptions: SurfaceOption[];
|
|
52
42
|
/** The content types a reference field can point at. Empty draws no target picker. */
|
|
53
|
-
targets:
|
|
43
|
+
targets: SurfaceOption[];
|
|
54
44
|
/** Whether the foot of the list is offering the add button or the add form. */
|
|
55
45
|
addState: "closed" | "open";
|
|
56
46
|
addName: string;
|
|
@@ -94,7 +84,7 @@ export interface SchemaBuilderSurfaceHandle {
|
|
|
94
84
|
dispose: () => void;
|
|
95
85
|
}
|
|
96
86
|
|
|
97
|
-
interface BuilderScope extends
|
|
87
|
+
interface BuilderScope extends SchemaBuilderView, SchemaBuilderActions {}
|
|
98
88
|
|
|
99
89
|
/** The view a freshly mounted surface starts on: no fields, and no add form. */
|
|
100
90
|
function emptyView(): SchemaBuilderView {
|
|
@@ -124,7 +114,7 @@ export function mountSchemaBuilderSurface(
|
|
|
124
114
|
actions: SchemaBuilderActions,
|
|
125
115
|
): SchemaBuilderSurfaceHandle {
|
|
126
116
|
host.textContent = "";
|
|
127
|
-
const scope = reactive<BuilderScope>({ ...emptyView(), ...actions })
|
|
117
|
+
const scope: BuilderScope = reactive<BuilderScope>({ ...emptyView(), ...actions });
|
|
128
118
|
|
|
129
119
|
/** `null` while a mount is in flight — which is a standing surface, not a missing one. */
|
|
130
120
|
let handle: SurfaceHandle | null = null;
|
|
@@ -133,13 +123,17 @@ export function mountSchemaBuilderSurface(
|
|
|
133
123
|
|
|
134
124
|
const mount = (): Promise<HTMLElement> =>
|
|
135
125
|
mountSurface("schema-builder", scope, host).then((mounted) => {
|
|
126
|
+
/* SAFETY: `schema-builder.json`'s root definition carries `tagName: "div"`, so the runtime
|
|
127
|
+
mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare
|
|
128
|
+
string. */
|
|
129
|
+
const root = mounted.root as HTMLElement;
|
|
136
130
|
mounting = false;
|
|
137
131
|
if (disposed) {
|
|
138
132
|
mounted.dispose();
|
|
139
|
-
return
|
|
133
|
+
return root;
|
|
140
134
|
}
|
|
141
135
|
handle = mounted;
|
|
142
|
-
return
|
|
136
|
+
return root;
|
|
143
137
|
});
|
|
144
138
|
|
|
145
139
|
const ready = mount();
|
|
@@ -29,14 +29,15 @@
|
|
|
29
29
|
* @docs extending/ui-kit
|
|
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 schemaFormDoc from "./schema-form.json";
|
|
35
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
36
|
+
import type { KeyedLabel, SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
36
37
|
import type { JxScope } from "@jxsuite/runtime/types";
|
|
37
|
-
import type {
|
|
38
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
38
39
|
|
|
39
|
-
registerSurface("schema-form", schemaFormDoc
|
|
40
|
+
registerSurface("schema-form", schemaFormDoc);
|
|
40
41
|
|
|
41
42
|
/** Which of the nine controls a row draws. The flow picks it; the document switches on it. */
|
|
42
43
|
export type SchemaFormFieldKind =
|
|
@@ -50,12 +51,6 @@ export type SchemaFormFieldKind =
|
|
|
50
51
|
| "rows"
|
|
51
52
|
| "control";
|
|
52
53
|
|
|
53
|
-
/** A control a row offers as a closed list, in the shape the kit's select reads. */
|
|
54
|
-
export interface SchemaFormOption {
|
|
55
|
-
value: string;
|
|
56
|
-
label: string;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
54
|
/** One cell of an array-of-objects row: a single declared property of one item. */
|
|
60
55
|
export interface SchemaFormCellView {
|
|
61
56
|
/** `${field}/${row}/${key}` — the cell's reconcile identity, and a control host's id. */
|
|
@@ -70,7 +65,7 @@ export interface SchemaFormCellView {
|
|
|
70
65
|
kind: "text" | "select" | "checkbox" | "number" | "control";
|
|
71
66
|
value: string;
|
|
72
67
|
checked: boolean;
|
|
73
|
-
options:
|
|
68
|
+
options: SurfaceOption[];
|
|
74
69
|
}
|
|
75
70
|
|
|
76
71
|
/** One item of an array-of-objects field. */
|
|
@@ -84,12 +79,6 @@ export interface SchemaFormRowView {
|
|
|
84
79
|
cells: SchemaFormCellView[];
|
|
85
80
|
}
|
|
86
81
|
|
|
87
|
-
/** A read of the shape a JSON field currently holds: `title: string`. */
|
|
88
|
-
export interface SchemaFormChipView {
|
|
89
|
-
key: string;
|
|
90
|
-
label: string;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
82
|
/** One property of the schema, as the document draws it. Every field is already decided. */
|
|
94
83
|
export interface SchemaFormFieldView {
|
|
95
84
|
/** The schema property key: this row's reconcile identity, and what every callback names. */
|
|
@@ -106,7 +95,7 @@ export interface SchemaFormFieldView {
|
|
|
106
95
|
checked: boolean;
|
|
107
96
|
placeholder: string;
|
|
108
97
|
/** Choices for `select`, suggestions for `pointer`. */
|
|
109
|
-
options:
|
|
98
|
+
options: SurfaceOption[];
|
|
110
99
|
/** Whether the pointer rung has anything to suggest; with none it is a field alone. */
|
|
111
100
|
hasOptions: boolean;
|
|
112
101
|
/** Bounds off the property schema, so the control refuses out-of-range input itself. */
|
|
@@ -138,7 +127,7 @@ export interface SchemaFormFieldView {
|
|
|
138
127
|
/** The position permits exactly one rung, so the chip states it and refuses to open. */
|
|
139
128
|
sourceLocked: boolean;
|
|
140
129
|
/** The chips above a JSON field, naming the shape it holds. */
|
|
141
|
-
chips:
|
|
130
|
+
chips: KeyedLabel[];
|
|
142
131
|
hasChips: boolean;
|
|
143
132
|
rows: SchemaFormRowView[];
|
|
144
133
|
/** The add button's accessible name on an array-of-objects field. */
|
|
@@ -179,7 +168,7 @@ export interface SchemaFormSurface {
|
|
|
179
168
|
/** A control host the document drew, reported as the runtime created it. */
|
|
180
169
|
export type ControlHostSink = (id: string, host: HTMLElement) => void;
|
|
181
170
|
|
|
182
|
-
interface SchemaFormScope extends
|
|
171
|
+
interface SchemaFormScope extends SchemaFormView, SchemaFormActions {
|
|
183
172
|
/** The Mixed text placeholder, held in state because the literal is itself a template. */
|
|
184
173
|
templatePlaceholder: string;
|
|
185
174
|
}
|
|
@@ -194,20 +183,21 @@ interface SchemaFormScope extends Record<string, unknown>, SchemaFormView, Schem
|
|
|
194
183
|
* node that needs filling.
|
|
195
184
|
*/
|
|
196
185
|
function controlIdOf(part: string, state: JxScope | undefined): string {
|
|
197
|
-
const
|
|
186
|
+
const map = state?.["$map"];
|
|
187
|
+
const item = isJsonObject(map) && isJsonObject(map["item"]) ? map["item"] : undefined;
|
|
198
188
|
const id =
|
|
199
189
|
part === "control-host"
|
|
200
190
|
? item?.["key"]
|
|
201
191
|
: part === "cell-control-host"
|
|
202
192
|
? item?.["id"]
|
|
203
193
|
: undefined;
|
|
204
|
-
return
|
|
194
|
+
return isString(id) ? id : "";
|
|
205
195
|
}
|
|
206
196
|
|
|
207
197
|
/** A node definition's `part`, as written in the document. */
|
|
208
198
|
function partOf(def: JxElement | string): string {
|
|
209
|
-
const part =
|
|
210
|
-
return
|
|
199
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
200
|
+
return isString(part) ? part : "";
|
|
211
201
|
}
|
|
212
202
|
|
|
213
203
|
/**
|
|
@@ -226,11 +216,11 @@ export function createSchemaFormSurface(
|
|
|
226
216
|
): SchemaFormSurface {
|
|
227
217
|
const host = document.createElement("div");
|
|
228
218
|
host.style.display = "contents";
|
|
229
|
-
const scope = reactive({
|
|
219
|
+
const scope: SchemaFormScope = reactive<SchemaFormScope>({
|
|
230
220
|
...view,
|
|
231
221
|
...actions,
|
|
232
222
|
templatePlaceholder: "${state.…}",
|
|
233
|
-
})
|
|
223
|
+
});
|
|
234
224
|
|
|
235
225
|
/** `null` while a mount is in flight — which is a standing surface, not a missing one. */
|
|
236
226
|
let handle: SurfaceHandle | null = null;
|
|
@@ -28,10 +28,9 @@ import { reactive } from "../reactivity";
|
|
|
28
28
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
29
29
|
import secretDoc from "./secret-field.json";
|
|
30
30
|
|
|
31
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
32
31
|
import type { SurfaceHandle } from "../ui/surface";
|
|
33
32
|
|
|
34
|
-
registerSurface("secret-field", secretDoc
|
|
33
|
+
registerSurface("secret-field", secretDoc);
|
|
35
34
|
|
|
36
35
|
/** What the field says right now. Every field is the flow's, never a state it derives. */
|
|
37
36
|
export interface SecretFieldView {
|
|
@@ -65,7 +64,7 @@ export interface SecretFieldSurfaceHandle {
|
|
|
65
64
|
dispose: () => void;
|
|
66
65
|
}
|
|
67
66
|
|
|
68
|
-
interface SecretScope extends
|
|
67
|
+
interface SecretScope extends SecretFieldView, SecretFieldActions {
|
|
69
68
|
/**
|
|
70
69
|
* What the field's value is bound to, and the whole of the "never render a secret back" rule.
|
|
71
70
|
*
|
|
@@ -92,7 +91,7 @@ export function mountSecretFieldSurface(
|
|
|
92
91
|
actions: SecretFieldActions,
|
|
93
92
|
): SecretFieldSurfaceHandle {
|
|
94
93
|
host.textContent = "";
|
|
95
|
-
const scope = reactive<SecretScope>({ ...emptyView(), ...actions, shown: "" })
|
|
94
|
+
const scope: SecretScope = reactive<SecretScope>({ ...emptyView(), ...actions, shown: "" });
|
|
96
95
|
|
|
97
96
|
/** `null` while a mount is in flight — which is a standing surface, not a missing one. */
|
|
98
97
|
let handle: SurfaceHandle | null = null;
|
|
@@ -101,13 +100,17 @@ export function mountSecretFieldSurface(
|
|
|
101
100
|
|
|
102
101
|
const mount = (): Promise<HTMLElement> =>
|
|
103
102
|
mountSurface("secret-field", scope, host).then((mounted) => {
|
|
103
|
+
/* SAFETY: `secret-field.json`'s root definition carries `tagName: "div"`, so the runtime
|
|
104
|
+
mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare
|
|
105
|
+
string. */
|
|
106
|
+
const root = mounted.root as HTMLElement;
|
|
104
107
|
mounting = false;
|
|
105
108
|
if (disposed) {
|
|
106
109
|
mounted.dispose();
|
|
107
|
-
return
|
|
110
|
+
return root;
|
|
108
111
|
}
|
|
109
112
|
handle = mounted;
|
|
110
|
-
return
|
|
113
|
+
return root;
|
|
111
114
|
});
|
|
112
115
|
|
|
113
116
|
const ready = mount();
|
package/src/surfaces/seo.ts
CHANGED
|
@@ -33,13 +33,12 @@
|
|
|
33
33
|
import { reactive } from "../reactivity";
|
|
34
34
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
35
35
|
import { overlayRegion, REGION_ATTR } from "../ui/regions";
|
|
36
|
-
import { close
|
|
36
|
+
import { close, showModal } from "@jxsuite/ui/behaviors/dialog";
|
|
37
37
|
import { whenReady } from "./dialog";
|
|
38
38
|
import seoDoc from "./seo.json";
|
|
39
39
|
import type { SurfaceHandle } from "../ui/surface";
|
|
40
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
41
40
|
|
|
42
|
-
registerSurface("seo", seoDoc
|
|
41
|
+
registerSurface("seo", seoDoc);
|
|
43
42
|
|
|
44
43
|
/** How a field's provenance is drawn — §6.7's vocabulary, reduced to three shapes and an absence. */
|
|
45
44
|
export type SeoChipKind = "none" | "dot" | "static" | "link";
|
|
@@ -65,8 +64,9 @@ export interface SeoFieldView {
|
|
|
65
64
|
chipTitle: string;
|
|
66
65
|
}
|
|
67
66
|
|
|
68
|
-
/**
|
|
67
|
+
/** A named thing that is wrong, or absent. Never summed: the list IS the report. */
|
|
69
68
|
export interface SeoWarningView {
|
|
69
|
+
/** Stable id, so a test and a shot name the same warning. */
|
|
70
70
|
id: string;
|
|
71
71
|
/** The head key it is about, so the row can carry it as code. */
|
|
72
72
|
field: string;
|
|
@@ -154,17 +154,17 @@ export interface SeoSurfaceHandle {
|
|
|
154
154
|
type LineState = "text" | "unset";
|
|
155
155
|
|
|
156
156
|
/** One field row with the flags the document branches on. */
|
|
157
|
-
interface SeoFieldRow extends SeoFieldView
|
|
157
|
+
interface SeoFieldRow extends SeoFieldView {
|
|
158
158
|
valueState: LineState;
|
|
159
159
|
}
|
|
160
160
|
|
|
161
161
|
/** One editable row with the flags the document branches on. */
|
|
162
|
-
interface SeoEditRow extends SeoEditRowView
|
|
162
|
+
interface SeoEditRow extends SeoEditRowView {
|
|
163
163
|
hasThumb: boolean;
|
|
164
164
|
}
|
|
165
165
|
|
|
166
166
|
/** One group with its rows already flagged. */
|
|
167
|
-
interface SeoGroupRow
|
|
167
|
+
interface SeoGroupRow {
|
|
168
168
|
key: string;
|
|
169
169
|
title: string;
|
|
170
170
|
note: string;
|
|
@@ -196,12 +196,12 @@ interface SeoFlags {
|
|
|
196
196
|
groups: SeoGroupRow[];
|
|
197
197
|
}
|
|
198
198
|
|
|
199
|
-
interface SeoScope extends
|
|
199
|
+
interface SeoScope extends SeoFlags {
|
|
200
200
|
documentLabel: string;
|
|
201
201
|
edit: (key: string, value: string) => void;
|
|
202
202
|
commit: (key: string, value: string) => void;
|
|
203
203
|
upload: (key: string) => void;
|
|
204
|
-
browse: (key: string, anchor:
|
|
204
|
+
browse: (key: string, anchor: EventTarget | null) => void;
|
|
205
205
|
openDonor: (key: string) => void;
|
|
206
206
|
closed: () => void;
|
|
207
207
|
}
|
|
@@ -268,9 +268,9 @@ export function openSeoSurface(options: SeoSurfaceOptions): SeoSurfaceHandle {
|
|
|
268
268
|
options.onClosed();
|
|
269
269
|
};
|
|
270
270
|
|
|
271
|
-
const scope = reactive({
|
|
271
|
+
const scope: SeoScope = reactive<SeoScope>({
|
|
272
272
|
...derive(options.view),
|
|
273
|
-
browse: (key: string, anchor:
|
|
273
|
+
browse: (key: string, anchor: EventTarget | null) => {
|
|
274
274
|
if (anchor instanceof HTMLElement) {
|
|
275
275
|
options.onBrowse(key, anchor);
|
|
276
276
|
}
|
|
@@ -288,18 +288,24 @@ export function openSeoSurface(options: SeoSurfaceOptions): SeoSurfaceHandle {
|
|
|
288
288
|
upload: (key: string) => {
|
|
289
289
|
options.onUpload(key);
|
|
290
290
|
},
|
|
291
|
-
})
|
|
291
|
+
});
|
|
292
292
|
|
|
293
|
+
/* Read through a call, not the bare binding: `close()` can run while the mount is awaiting the
|
|
294
|
+
element, and a direct `closed` test after that `await` would be narrowed to the value the test
|
|
295
|
+
before it saw. */
|
|
296
|
+
const isClosed = (): boolean => closed;
|
|
293
297
|
let mounted: SurfaceHandle | null = null;
|
|
294
298
|
const ready = mountSurface("seo", scope, slot).then(async (surface) => {
|
|
295
299
|
mounted = surface;
|
|
300
|
+
/* SAFETY: `seo.json`'s root definition carries `tagName: "jx-dialog"`, so the runtime mounts an
|
|
301
|
+
HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
296
302
|
const element = surface.root as HTMLElement;
|
|
297
|
-
if (
|
|
303
|
+
if (isClosed()) {
|
|
298
304
|
surface.dispose();
|
|
299
305
|
return element;
|
|
300
306
|
}
|
|
301
307
|
await whenReady(element);
|
|
302
|
-
if (
|
|
308
|
+
if (isClosed()) {
|
|
303
309
|
return element;
|
|
304
310
|
}
|
|
305
311
|
const box = element.querySelector<HTMLElement>('dialog[part="dialog"]') ?? element;
|
|
@@ -317,7 +323,7 @@ export function openSeoSurface(options: SeoSurfaceOptions): SeoSurfaceHandle {
|
|
|
317
323
|
const element = mounted?.root;
|
|
318
324
|
if (element instanceof HTMLElement) {
|
|
319
325
|
// The platform's close first, so focus goes back where it came from; then the document.
|
|
320
|
-
|
|
326
|
+
close(element);
|
|
321
327
|
}
|
|
322
328
|
// A mount that has not landed yet is disposed by `ready` when it does — `finish` tells it so.
|
|
323
329
|
mounted?.dispose();
|
|
@@ -22,10 +22,9 @@ import { reactive } from "../reactivity";
|
|
|
22
22
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
23
23
|
import contextsDoc from "./settings-contexts.json";
|
|
24
24
|
|
|
25
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
26
25
|
import type { SurfaceHandle } from "../ui/surface";
|
|
27
26
|
|
|
28
|
-
registerSurface("settings-contexts", contextsDoc
|
|
27
|
+
registerSurface("settings-contexts", contextsDoc);
|
|
29
28
|
|
|
30
29
|
/** One `$media` row, as the document draws it. */
|
|
31
30
|
export interface ContextRowView {
|
|
@@ -111,7 +110,7 @@ export interface ContextsSurfaceHandle {
|
|
|
111
110
|
* would be a second place to get it wrong. The refusal lines need none — `invalid` already says
|
|
112
111
|
* which control the message belongs to.
|
|
113
112
|
*/
|
|
114
|
-
interface ContextsScope extends
|
|
113
|
+
interface ContextsScope extends ContextsView, ContextsActions {
|
|
115
114
|
hasSectionError: boolean;
|
|
116
115
|
hasNotice: boolean;
|
|
117
116
|
}
|
|
@@ -141,7 +140,7 @@ export function mountContextsSurface(
|
|
|
141
140
|
actions: ContextsActions,
|
|
142
141
|
): ContextsSurfaceHandle {
|
|
143
142
|
host.textContent = "";
|
|
144
|
-
const scope = reactive<ContextsScope>({
|
|
143
|
+
const scope: ContextsScope = reactive<ContextsScope>({
|
|
145
144
|
...emptyView(),
|
|
146
145
|
add: actions.add,
|
|
147
146
|
hasNotice: false,
|
|
@@ -151,17 +150,20 @@ export function mountContextsSurface(
|
|
|
151
150
|
setBase: actions.setBase,
|
|
152
151
|
setQuery: actions.setQuery,
|
|
153
152
|
setScheme: actions.setScheme,
|
|
154
|
-
})
|
|
153
|
+
});
|
|
155
154
|
|
|
156
155
|
let mounted: SurfaceHandle | null = null;
|
|
157
156
|
let disposed = false;
|
|
158
157
|
const ready = mountSurface("settings-contexts", scope, host).then((surface) => {
|
|
158
|
+
/* SAFETY: `settings-contexts.json`'s root definition carries `tagName: "div"`, so the runtime
|
|
159
|
+
mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
160
|
+
const root = surface.root as HTMLElement;
|
|
159
161
|
if (disposed) {
|
|
160
162
|
surface.dispose();
|
|
161
|
-
return
|
|
163
|
+
return root;
|
|
162
164
|
}
|
|
163
165
|
mounted = surface;
|
|
164
|
-
return
|
|
166
|
+
return root;
|
|
165
167
|
});
|
|
166
168
|
|
|
167
169
|
return {
|
|
@@ -26,14 +26,15 @@
|
|
|
26
26
|
* @docs studio/projects/settings
|
|
27
27
|
*/
|
|
28
28
|
|
|
29
|
+
import { isString } from "@jxsuite/schema/guards";
|
|
29
30
|
import { reactive } from "../reactivity";
|
|
30
31
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
31
32
|
import contributedDoc from "./settings-contributed.json";
|
|
32
33
|
|
|
33
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
34
34
|
import type { SurfaceHandle } from "../ui/surface";
|
|
35
|
+
import type { JxElement } from "@jxsuite/schema/types";
|
|
35
36
|
|
|
36
|
-
registerSurface("settings-contributed", contributedDoc
|
|
37
|
+
registerSurface("settings-contributed", contributedDoc);
|
|
37
38
|
|
|
38
39
|
/** One entry key in a map-layout section's left column. */
|
|
39
40
|
export interface ContributedEntryView {
|
|
@@ -101,7 +102,7 @@ export interface ContributedSurfaceHandle {
|
|
|
101
102
|
dispose: () => void;
|
|
102
103
|
}
|
|
103
104
|
|
|
104
|
-
interface ContributedScope extends
|
|
105
|
+
interface ContributedScope extends ContributedView, ContributedActions {}
|
|
105
106
|
|
|
106
107
|
/** The view a freshly mounted surface starts on: a form layout with nothing in it. */
|
|
107
108
|
function emptyView(): ContributedView {
|
|
@@ -119,10 +120,9 @@ function emptyView(): ContributedView {
|
|
|
119
120
|
}
|
|
120
121
|
|
|
121
122
|
/** The `part` a node was authored with, or `""` — the only thing this adapter asks about a node. */
|
|
122
|
-
function partOf(def:
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
return typeof part === "string" ? part : "";
|
|
123
|
+
function partOf(def: JxElement | string): string {
|
|
124
|
+
const part = isString(def) ? undefined : def.attributes?.["part"];
|
|
125
|
+
return isString(part) ? part : "";
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
/**
|
|
@@ -139,7 +139,7 @@ export function mountContributedSurface(
|
|
|
139
139
|
islands: ContributedIslands,
|
|
140
140
|
): ContributedSurfaceHandle {
|
|
141
141
|
host.textContent = "";
|
|
142
|
-
const scope = reactive<ContributedScope>({ ...emptyView(), ...actions })
|
|
142
|
+
const scope: ContributedScope = reactive<ContributedScope>({ ...emptyView(), ...actions });
|
|
143
143
|
|
|
144
144
|
let mounted: SurfaceHandle | null = null;
|
|
145
145
|
let disposed = false;
|
|
@@ -160,12 +160,16 @@ export function mountContributedSurface(
|
|
|
160
160
|
}
|
|
161
161
|
},
|
|
162
162
|
}).then((surface) => {
|
|
163
|
+
/* SAFETY: `settings-contributed.json`'s root definition carries `tagName: "section"`, so the
|
|
164
|
+
runtime mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare
|
|
165
|
+
string. */
|
|
166
|
+
const root = surface.root as HTMLElement;
|
|
163
167
|
if (disposed) {
|
|
164
168
|
surface.dispose();
|
|
165
|
-
return
|
|
169
|
+
return root;
|
|
166
170
|
}
|
|
167
171
|
mounted = surface;
|
|
168
|
-
return
|
|
172
|
+
return root;
|
|
169
173
|
});
|
|
170
174
|
|
|
171
175
|
return {
|
|
@@ -29,16 +29,9 @@
|
|
|
29
29
|
import { reactive } from "../reactivity";
|
|
30
30
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
31
31
|
import cssVarsDoc from "./settings-css-vars.json";
|
|
32
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
33
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
32
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
34
33
|
|
|
35
|
-
registerSurface("settings-css-vars", cssVarsDoc
|
|
36
|
-
|
|
37
|
-
/** One row of the add-an-override picker. */
|
|
38
|
-
export interface OverrideChoice {
|
|
39
|
-
value: string;
|
|
40
|
-
label: string;
|
|
41
|
-
}
|
|
34
|
+
registerSurface("settings-css-vars", cssVarsDoc);
|
|
42
35
|
|
|
43
36
|
/** One of a token's per-context values. */
|
|
44
37
|
export interface OverrideRowView {
|
|
@@ -91,7 +84,7 @@ export interface TokenRowView {
|
|
|
91
84
|
overrides: OverrideRowView[];
|
|
92
85
|
/** Whether the add-an-override picker is offered. */
|
|
93
86
|
addState: "none" | "shown";
|
|
94
|
-
addOptions:
|
|
87
|
+
addOptions: SurfaceOption[];
|
|
95
88
|
/** What the picker currently reads. Always `""` in practice — see {@link renderCssVarsSurface}. */
|
|
96
89
|
addPick: string;
|
|
97
90
|
addLabel: string;
|
|
@@ -141,7 +134,7 @@ interface CssVarsFlags {
|
|
|
141
134
|
hasError: boolean;
|
|
142
135
|
}
|
|
143
136
|
|
|
144
|
-
interface CssVarsScope extends
|
|
137
|
+
interface CssVarsScope extends CssVarsView, CssVarsActions, CssVarsFlags {}
|
|
145
138
|
|
|
146
139
|
interface Mounted {
|
|
147
140
|
scope: CssVarsScope;
|
|
@@ -186,7 +179,7 @@ export function renderCssVarsSurface(
|
|
|
186
179
|
}
|
|
187
180
|
existing?.handle?.dispose();
|
|
188
181
|
host.textContent = "";
|
|
189
|
-
const scope = reactive({ ...derive(view), ...actions })
|
|
182
|
+
const scope: CssVarsScope = reactive<CssVarsScope>({ ...derive(view), ...actions });
|
|
190
183
|
const record: Mounted = { handle: null, scope };
|
|
191
184
|
mounts.set(host, record);
|
|
192
185
|
/* No race to arbitrate: a redraw arriving while this is in flight takes the branch above — a
|
|
@@ -158,7 +158,7 @@
|
|
|
158
158
|
{
|
|
159
159
|
"$prototype": "Array",
|
|
160
160
|
"items": {
|
|
161
|
-
"$ref": "#/state/
|
|
161
|
+
"$ref": "#/state/defs"
|
|
162
162
|
},
|
|
163
163
|
"key": {
|
|
164
164
|
"$ref": "$map/item/name"
|
|
@@ -406,7 +406,7 @@
|
|
|
406
406
|
{
|
|
407
407
|
"operator": "call",
|
|
408
408
|
"target": {
|
|
409
|
-
"$ref": "#/state/
|
|
409
|
+
"$ref": "#/state/removeSelected"
|
|
410
410
|
},
|
|
411
411
|
"value": []
|
|
412
412
|
}
|
|
@@ -26,19 +26,12 @@ import { reactive } from "../reactivity";
|
|
|
26
26
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
27
27
|
import defsDoc from "./settings-defs.json";
|
|
28
28
|
|
|
29
|
-
import type {
|
|
30
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
29
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
31
30
|
|
|
32
|
-
registerSurface("settings-defs", defsDoc
|
|
33
|
-
|
|
34
|
-
/** One row of a picker: a field type, a format, or a reference target. */
|
|
35
|
-
export interface DefsChoice {
|
|
36
|
-
value: string;
|
|
37
|
-
label: string;
|
|
38
|
-
}
|
|
31
|
+
registerSurface("settings-defs", defsDoc);
|
|
39
32
|
|
|
40
33
|
/** One data shape in the left column. */
|
|
41
|
-
export interface
|
|
34
|
+
export interface DefsEntryView {
|
|
42
35
|
name: string;
|
|
43
36
|
selected: boolean;
|
|
44
37
|
}
|
|
@@ -87,7 +80,7 @@ export interface DefsFieldView {
|
|
|
87
80
|
|
|
88
81
|
/** Everything the document draws, as one value. */
|
|
89
82
|
export interface DefsView {
|
|
90
|
-
|
|
83
|
+
defs: DefsEntryView[];
|
|
91
84
|
/** Whether the left column is offering the new-shape button or the form. */
|
|
92
85
|
newState: "closed" | "open";
|
|
93
86
|
newName: string;
|
|
@@ -95,10 +88,10 @@ export interface DefsView {
|
|
|
95
88
|
editorState: "empty" | "editing";
|
|
96
89
|
selected: string;
|
|
97
90
|
fields: DefsFieldView[];
|
|
98
|
-
typeOptions:
|
|
99
|
-
formatOptions:
|
|
91
|
+
typeOptions: SurfaceOption[];
|
|
92
|
+
formatOptions: SurfaceOption[];
|
|
100
93
|
/** The content types a reference field can point at. */
|
|
101
|
-
targets:
|
|
94
|
+
targets: SurfaceOption[];
|
|
102
95
|
addState: "closed" | "open";
|
|
103
96
|
addName: string;
|
|
104
97
|
addType: string;
|
|
@@ -114,7 +107,7 @@ export interface DefsActions {
|
|
|
114
107
|
editNew: (value: string) => void;
|
|
115
108
|
createNew: () => void;
|
|
116
109
|
cancelNew: () => void;
|
|
117
|
-
|
|
110
|
+
removeSelected: () => void;
|
|
118
111
|
renameField: (key: string, value: string) => void;
|
|
119
112
|
setType: (key: string, value: string) => void;
|
|
120
113
|
setFormat: (key: string, value: string) => void;
|
|
@@ -149,7 +142,7 @@ export interface DefsSurfaceHandle {
|
|
|
149
142
|
dispose: () => void;
|
|
150
143
|
}
|
|
151
144
|
|
|
152
|
-
interface DefsScope extends
|
|
145
|
+
interface DefsScope extends DefsView, DefsActions {}
|
|
153
146
|
|
|
154
147
|
/** The view a freshly mounted surface starts on: no shapes, and nothing chosen. */
|
|
155
148
|
function emptyView(): DefsView {
|
|
@@ -160,13 +153,13 @@ function emptyView(): DefsView {
|
|
|
160
153
|
addRequired: false,
|
|
161
154
|
addState: "closed",
|
|
162
155
|
addType: "string",
|
|
156
|
+
defs: [],
|
|
163
157
|
editorState: "empty",
|
|
164
158
|
fields: [],
|
|
165
159
|
formatOptions: [],
|
|
166
160
|
newName: "",
|
|
167
161
|
newState: "closed",
|
|
168
162
|
selected: "",
|
|
169
|
-
shapes: [],
|
|
170
163
|
targets: [],
|
|
171
164
|
typeOptions: [],
|
|
172
165
|
};
|
|
@@ -181,17 +174,20 @@ function emptyView(): DefsView {
|
|
|
181
174
|
*/
|
|
182
175
|
export function mountDefsSurface(host: HTMLElement, actions: DefsActions): DefsSurfaceHandle {
|
|
183
176
|
host.textContent = "";
|
|
184
|
-
const scope = reactive<DefsScope>({ ...emptyView(), ...actions })
|
|
177
|
+
const scope: DefsScope = reactive<DefsScope>({ ...emptyView(), ...actions });
|
|
185
178
|
|
|
186
179
|
let mounted: SurfaceHandle | null = null;
|
|
187
180
|
let disposed = false;
|
|
188
181
|
const ready = mountSurface("settings-defs", scope, host).then((surface) => {
|
|
182
|
+
/* SAFETY: `settings-defs.json`'s root definition carries `tagName: "section"`, so the runtime
|
|
183
|
+
mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare string. */
|
|
184
|
+
const root = surface.root as HTMLElement;
|
|
189
185
|
if (disposed) {
|
|
190
186
|
surface.dispose();
|
|
191
|
-
return
|
|
187
|
+
return root;
|
|
192
188
|
}
|
|
193
189
|
mounted = surface;
|
|
194
|
-
return
|
|
190
|
+
return root;
|
|
195
191
|
});
|
|
196
192
|
|
|
197
193
|
return {
|
|
@@ -218,13 +214,13 @@ export function mountDefsSurface(host: HTMLElement, actions: DefsActions): DefsS
|
|
|
218
214
|
scope.addRequired = view.addRequired;
|
|
219
215
|
scope.addState = view.addState;
|
|
220
216
|
scope.addType = view.addType;
|
|
217
|
+
scope.defs = view.defs;
|
|
221
218
|
scope.editorState = view.editorState;
|
|
222
219
|
scope.fields = view.fields;
|
|
223
220
|
scope.formatOptions = view.formatOptions;
|
|
224
221
|
scope.newName = view.newName;
|
|
225
222
|
scope.newState = view.newState;
|
|
226
223
|
scope.selected = view.selected;
|
|
227
|
-
scope.shapes = view.shapes;
|
|
228
224
|
scope.targets = view.targets;
|
|
229
225
|
scope.typeOptions = view.typeOptions;
|
|
230
226
|
},
|