@jxsuite/studio 6.1.0 → 6.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/2020-f2gkpy8d.js +4 -0
- package/dist/chunks/{action-group-2mqby73c.js → action-group-4aan7g6g.js} +3 -3
- package/dist/chunks/adapter-4912g339.js +4 -0
- package/dist/chunks/cf-account-picker-wccaenh6.js +4 -0
- package/dist/chunks/cf-settings-br6105tr.js +4 -0
- package/dist/chunks/color-28ksk2qm.js +4 -0
- package/dist/chunks/color-area-0fj8a4ga.js +4 -0
- package/dist/chunks/color-field-xch8kx2g.js +4 -0
- package/dist/chunks/color-slider-jxd8v350.js +4 -0
- package/dist/chunks/combobox-p0efwjke.js +4 -0
- package/dist/chunks/components-db68vsn7.js +4 -0
- package/dist/chunks/content-source-1449qesq.js +4 -0
- package/dist/chunks/convert-to-repeater-5h457egj.js +4 -0
- package/dist/chunks/dialog-c4x05vyx.js +4 -0
- package/dist/chunks/editor-x9jn86a7.js +4 -0
- package/dist/chunks/entry-commands-may24cpt.js +4 -0
- package/dist/chunks/extension-sections-pvr14vxr.js +4 -0
- package/dist/chunks/file-ops-x9v54pcj.js +4 -0
- package/dist/chunks/files-j3knqf0s.js +4 -0
- package/dist/chunks/format-host-tyre2trb.js +4 -0
- package/dist/chunks/fs-events-64ma9htc.js +4 -0
- package/dist/chunks/git-panel-84ps5dex.js +4 -0
- package/dist/chunks/grid-view-d2wq9ezg.js +51 -0
- package/dist/chunks/icons-pnfz478q.js +4 -0
- package/dist/chunks/iframe-entry-fvbk89gm.js +5 -0
- package/dist/chunks/iframe-entry-jdcktez8.js +5 -0
- package/dist/chunks/iframe-entry-x0ygf2yr.js +5 -0
- package/dist/chunks/iframe-entry-zap785cw.js +5 -0
- package/dist/chunks/iframe-host-ck6vejt5.js +4 -0
- package/dist/chunks/index-b8xw3vy9.js +4 -0
- package/dist/chunks/{index-gybvv7a6.js → index-zpjmzqfk.js} +3 -3
- package/dist/chunks/{javascript-rnvdp3k4.js → javascript-m54mnwp6.js} +3 -3
- package/dist/chunks/jsonMode-w15cmrcm.js +13 -0
- package/dist/chunks/jx-validate-at3zn8wa.js +4 -0
- package/dist/chunks/layers-h4xp1pss.js +4 -0
- package/dist/chunks/layers-panel-m5hw1d7g.js +4 -0
- package/dist/chunks/listbox-e74qjyq6.js +4 -0
- package/dist/chunks/lit-html-8t8t3dnr.js +4 -0
- package/dist/chunks/media-picker-2cweexc5.js +4 -0
- package/dist/chunks/menu-n6yzswmy.js +4 -0
- package/dist/chunks/menu-ynw13y0s.js +4 -0
- package/dist/chunks/monaco-binding-7gx83x3r.js +4 -0
- package/dist/chunks/monaco-buffer-qzxn567r.js +4 -0
- package/dist/chunks/monaco-setup-gxf6656g.js +4 -0
- package/dist/chunks/notify-cj5zbrs2.js +4 -0
- package/dist/chunks/number-field-y62xq0ty.js +4 -0
- package/dist/chunks/parse-b7ddhr8m.js +4 -0
- package/dist/chunks/platform-3dfws9js.js +4 -0
- package/dist/chunks/popover-jt2gxmzs.js +4 -0
- package/dist/chunks/publish-panel-1gvxbj21.js +4 -0
- package/dist/chunks/quick-search-0dajrwqg.js +4 -0
- package/dist/chunks/references-49qgt404.js +4 -0
- package/dist/chunks/right-panel-jm1bwe53.js +4 -0
- package/dist/chunks/section-registry-6kwc4fky.js +4 -0
- package/dist/chunks/select-rzds841e.js +4 -0
- package/dist/chunks/split-n2gfpm5m.js +4 -0
- package/dist/chunks/{studio-5g0ag7c0.js → studio-0q988f9w.js} +3 -3
- package/dist/chunks/studio-0rt52vpq.js +5 -0
- package/dist/chunks/studio-18vgbhs5.js +5 -0
- package/dist/chunks/{studio-pxg4ap1e.js → studio-1fxkaaea.js} +4 -4
- package/dist/chunks/studio-24mccdrj.js +5 -0
- package/dist/chunks/studio-2eh507zk.js +9 -0
- package/dist/chunks/studio-2hcbccfv.js +5 -0
- package/dist/chunks/studio-2j1cb95x.js +5 -0
- package/dist/chunks/studio-2jbs3rxv.js +5 -0
- package/dist/chunks/{studio-qbj760tx.js → studio-485046te.js} +7 -7
- package/dist/chunks/studio-4h8k4dw9.js +5 -0
- package/dist/chunks/studio-5f6n18kx.js +5 -0
- package/dist/chunks/studio-5gthpky6.js +5 -0
- package/dist/chunks/studio-5ve6bbep.js +5 -0
- package/dist/chunks/studio-6ep3js6b.js +9 -0
- package/dist/chunks/studio-6wkmf3wz.js +9 -0
- package/dist/chunks/studio-841rf3cg.js +5 -0
- package/dist/chunks/studio-8gmwgheg.js +5 -0
- package/dist/chunks/studio-8qm0ep50.js +5 -0
- package/dist/chunks/{studio-anyrgzvb.js → studio-90pq9km1.js} +4 -4
- package/dist/chunks/studio-924p1tm1.js +6 -0
- package/dist/chunks/{studio-v2bvmbjj.js → studio-a3g98wjr.js} +4 -4
- package/dist/chunks/studio-a3shpz9y.js +5 -0
- package/dist/chunks/studio-amsbaaar.js +6 -0
- package/dist/chunks/studio-at5spjbc.js +7 -0
- package/dist/chunks/studio-b2xv945e.js +5 -0
- package/dist/chunks/studio-bn5nkafw.js +5 -0
- package/dist/chunks/studio-bw6q5xjf.js +9 -0
- package/dist/chunks/studio-c7q0t9x1.js +5 -0
- package/dist/chunks/studio-camnhc96.js +6 -0
- package/dist/chunks/studio-cffqvnzd.js +5 -0
- package/dist/chunks/studio-d81xfh1g.js +5 -0
- package/dist/chunks/studio-dgz8d0c1.js +5 -0
- package/dist/chunks/studio-efvfrsf8.js +5 -0
- package/dist/chunks/studio-er30bpcx.js +5 -0
- package/dist/chunks/studio-ezscgr64.js +5 -0
- package/dist/chunks/studio-ffrrncvz.js +5 -0
- package/dist/chunks/studio-fpphgn8y.js +10 -0
- package/dist/chunks/studio-j1kvhdjk.js +4 -0
- package/dist/chunks/{studio-txjjzrsm.js → studio-j430n16g.js} +5 -5
- package/dist/chunks/studio-jjkg84nj.js +5 -0
- package/dist/chunks/studio-m0q32ars.js +4 -0
- package/dist/chunks/studio-m6bdst11.js +5 -0
- package/dist/chunks/studio-nv2cptd4.js +64 -0
- package/dist/chunks/studio-nwfrc98n.js +5 -0
- package/dist/chunks/studio-p1wgvp7r.js +5 -0
- package/dist/chunks/studio-pag2wncm.js +5 -0
- package/dist/chunks/studio-qvanvzfd.js +5 -0
- package/dist/chunks/studio-qwa64kt7.js +5 -0
- package/dist/chunks/studio-rk1zc4x3.js +928 -0
- package/dist/chunks/studio-se2r3ptc.js +5 -0
- package/dist/chunks/studio-sg2a0dh0.js +5 -0
- package/dist/chunks/studio-tjzjhe68.js +5 -0
- package/dist/chunks/{studio-0x3jyb8r.js → studio-tq0rtfwj.js} +4 -4
- package/dist/chunks/{studio-cpxkgjrj.js → studio-v0jzqdjm.js} +4 -4
- package/dist/chunks/studio-v2w7q8r1.js +7 -0
- package/dist/chunks/studio-v5vjq1h0.js +4 -0
- package/dist/chunks/studio-v8aga3vp.js +14 -0
- package/dist/chunks/studio-vfcdrfmv.js +5 -0
- package/dist/chunks/studio-vmfkgdjf.js +5 -0
- package/dist/chunks/studio-wt1816jj.js +5 -0
- package/dist/chunks/studio-wz73q5kq.js +4 -0
- package/dist/chunks/studio-y04qtxvp.js +7 -0
- package/dist/chunks/studio-y21g8zzg.js +5 -0
- package/dist/chunks/studio-y64hrt8p.js +12 -0
- package/dist/chunks/studio-ynn90f58.js +16 -0
- package/dist/chunks/studio-yxz682sx.js +5 -0
- package/dist/chunks/studio-zp7snvkq.js +5 -0
- package/dist/chunks/studio-zq4z6tm6.js +5 -0
- package/dist/chunks/swatch-group-ewh24n1f.js +4 -0
- package/dist/chunks/tabs-f5cw3tgp.js +4 -0
- package/dist/chunks/textfield-wewc8rq2.js +4 -0
- package/dist/chunks/toast-c9fn075p.js +4 -0
- package/dist/chunks/toast-host-ke5z4ng7.js +4 -0
- package/dist/chunks/{toolbar-2nnzqhrj.js → toolbar-44cm5cta.js} +3 -3
- package/dist/chunks/tooltip-5v8ngwj2.js +4 -0
- package/dist/chunks/tree-mdq3v5cw.js +4 -0
- package/dist/chunks/tsMode-sf49ee9x.js +14 -0
- package/dist/chunks/workspace-jtfahpee.js +4 -0
- package/dist/chunks/ws-client-nze0k6mv.js +4 -0
- package/dist/iframe-entry.js +16 -16
- package/dist/manifest.json +63 -63
- package/dist/studio.js +98 -98
- package/dist/workers/ts.worker.js +3 -3
- package/package.json +11 -11
- package/src/about/about-modal.ts +4 -3
- package/src/account/action-flow.ts +45 -38
- package/src/account-status.ts +7 -2
- package/src/browse/library-layouts.ts +8 -5
- package/src/browse/library-model.ts +18 -6
- package/src/browse/library-pane.ts +37 -21
- package/src/browse/library-preview.ts +14 -9
- package/src/browse/library-source.ts +1 -1
- package/src/canvas/asset-refs.ts +24 -9
- package/src/canvas/asset-resolve.ts +19 -23
- package/src/canvas/canvas-helpers.ts +7 -6
- package/src/canvas/canvas-live-render.ts +44 -53
- package/src/canvas/canvas-patcher.ts +30 -30
- package/src/canvas/canvas-perf.ts +11 -5
- package/src/canvas/canvas-render.ts +66 -42
- package/src/canvas/canvas-surface.ts +5 -3
- package/src/canvas/canvas-utils.ts +163 -64
- package/src/canvas/dialog-path.ts +9 -4
- package/src/canvas/dialog-state.ts +1 -2
- package/src/canvas/diff-marks.ts +9 -16
- package/src/canvas/diff-toolbar.ts +8 -7
- package/src/canvas/edit-width-drag.ts +4 -1
- package/src/canvas/edit-width.ts +1 -3
- package/src/canvas/iframe-channel.ts +27 -13
- package/src/canvas/iframe-drop.ts +13 -12
- package/src/canvas/iframe-editable-root.ts +29 -16
- package/src/canvas/iframe-entry.ts +80 -63
- package/src/canvas/iframe-eval.ts +73 -49
- package/src/canvas/iframe-host.ts +203 -118
- package/src/canvas/iframe-inline-edit.ts +69 -32
- package/src/canvas/iframe-insert.ts +5 -4
- package/src/canvas/iframe-interaction.ts +37 -26
- package/src/canvas/iframe-overlay.ts +1 -1
- package/src/canvas/iframe-patch.ts +18 -15
- package/src/canvas/iframe-position.ts +12 -6
- package/src/canvas/iframe-protocol.ts +15 -16
- package/src/canvas/iframe-render.ts +41 -36
- package/src/canvas/iframe-slash.ts +24 -11
- package/src/canvas/iframe-subtree.ts +6 -2
- package/src/canvas/path-mapping.ts +19 -12
- package/src/canvas/popover-path.ts +7 -3
- package/src/canvas/popover-state.ts +1 -2
- package/src/canvas/serialize-scope.ts +13 -5
- package/src/canvas/stage-scrollbar.ts +2 -1
- package/src/canvas/surface-registry.ts +21 -3
- package/src/collab/collab-commands.ts +7 -2
- package/src/collab/collab-session.ts +84 -45
- package/src/collab/collab-state.ts +4 -3
- package/src/collab/monaco-binding.ts +16 -13
- package/src/collab/monaco-cursors.ts +5 -2
- package/src/commands/budget.ts +3 -3
- package/src/commands/command-args.ts +103 -71
- package/src/commands/context.ts +22 -20
- package/src/commands/defaults.ts +4 -1
- package/src/commands/keymap.ts +47 -43
- package/src/commands/levels.ts +3 -3
- package/src/commands/live-context.ts +10 -8
- package/src/commands/reference.ts +2 -1
- package/src/commands/registry.ts +12 -10
- package/src/commands/run-reported.ts +15 -10
- package/src/component-props.ts +46 -30
- package/src/content/collection-match.ts +5 -4
- package/src/content/draft-state.ts +4 -3
- package/src/content/entry-commands.ts +3 -2
- package/src/content/entry-editor.ts +29 -17
- package/src/content/entry-fields.ts +12 -7
- package/src/content/entry-model.ts +21 -12
- package/src/editor/canvas-context-menu.ts +1 -2
- package/src/editor/canvas-slash-bridge.ts +3 -6
- package/src/editor/content-slice.ts +16 -14
- package/src/editor/context-menu.ts +35 -22
- package/src/editor/convert-targets.ts +30 -35
- package/src/editor/convert-to-component.ts +11 -5
- package/src/editor/convert-to-repeater.ts +34 -22
- package/src/editor/editable-tags.ts +17 -2
- package/src/editor/file-drop-action.ts +21 -22
- package/src/editor/inline-edit-apply.ts +35 -17
- package/src/editor/inline-edit.ts +66 -50
- package/src/editor/inline-format.ts +59 -56
- package/src/editor/inline-link.ts +40 -15
- package/src/editor/insert-zone-action.ts +1 -1
- package/src/editor/merge-tags.ts +58 -19
- package/src/editor/repeater-scope.ts +39 -28
- package/src/editor/shortcuts.ts +87 -47
- package/src/editor/slash-menu.ts +1 -6
- package/src/files/asset-versions.ts +4 -4
- package/src/files/components.ts +15 -10
- package/src/files/elements.ts +5 -6
- package/src/files/file-ops.ts +77 -36
- package/src/files/files.ts +90 -95
- package/src/files/media-meta.ts +2 -1
- package/src/files/media-paths.ts +6 -1
- package/src/files/serialize-document.ts +2 -2
- package/src/format/constraints.ts +1 -1
- package/src/format/convert-file.ts +27 -13
- package/src/format/format-choices.ts +2 -1
- package/src/format/format-host.ts +76 -50
- package/src/github/github-auth-status.ts +27 -3
- package/src/github/github-auth.ts +19 -9
- package/src/github/github-publish.ts +24 -20
- package/src/grid/cell-editors.ts +46 -31
- package/src/grid/cell-popovers.ts +5 -3
- package/src/grid/edit-buffer.ts +10 -9
- package/src/grid/grid-controller.ts +20 -22
- package/src/grid/grid-layout.ts +21 -5
- package/src/grid/grid-open.ts +3 -6
- package/src/grid/grid-panel.ts +11 -4
- package/src/grid/grid-source.ts +8 -8
- package/src/grid/grid-view.ts +14 -17
- package/src/grid/redirects-grid.ts +14 -5
- package/src/grid/redirects.ts +16 -14
- package/src/grid/schema-columns.ts +25 -19
- package/src/grid/sources/connector-source.ts +47 -20
- package/src/grid/sources/content-source.ts +25 -24
- package/src/grid/sources/csv-file-source.ts +2 -2
- package/src/grid/tabulator-tables.d.ts +55 -34
- package/src/hosting/stage.ts +7 -7
- package/src/i18n/i18n-commands.ts +1 -2
- package/src/media/media-pane.ts +4 -1
- package/src/new-project/add-repo-modal.ts +20 -19
- package/src/new-project/import-tab.ts +10 -14
- package/src/new-project/location-fields.ts +2 -1
- package/src/new-project/new-project-modal.ts +12 -9
- package/src/packages/jxsuite-update.ts +4 -3
- package/src/packages/pull-package-sync.ts +26 -25
- package/src/page-params.ts +97 -68
- package/src/panels/activity-panel.ts +17 -9
- package/src/panels/ai-chat/attached-context.ts +13 -7
- package/src/panels/ai-chat/chat-view.ts +80 -73
- package/src/panels/ai-chat/composer.ts +30 -33
- package/src/panels/ai-chat/sessions-view.ts +1 -2
- package/src/panels/ai-panel.ts +23 -20
- package/src/panels/block-action-bar.ts +46 -35
- package/src/panels/bottom-dock.ts +5 -3
- package/src/panels/canvas-dnd-bridge.ts +31 -24
- package/src/panels/data-explorer.ts +62 -25
- package/src/panels/data-grid.ts +14 -11
- package/src/panels/dnd.ts +108 -118
- package/src/panels/editors.ts +55 -22
- package/src/panels/elements-panel.ts +10 -3
- package/src/panels/events-panel.ts +84 -69
- package/src/panels/formula-workspace.ts +76 -51
- package/src/panels/frontmatter-fields.ts +24 -19
- package/src/panels/frontmatter-panel.ts +44 -34
- package/src/panels/git-diff-open.ts +4 -4
- package/src/panels/git-panel.ts +49 -61
- package/src/panels/head-panel.ts +131 -111
- package/src/panels/i18n-panel.ts +10 -3
- package/src/panels/imports-panel.ts +23 -47
- package/src/panels/jump-bar.ts +48 -29
- package/src/panels/layers-panel.ts +97 -74
- package/src/panels/left-panel.ts +3 -3
- package/src/panels/pane-context.ts +31 -22
- package/src/panels/pane-grid.ts +49 -20
- package/src/panels/panel-registry.ts +22 -37
- package/src/panels/properties-panel.ts +175 -121
- package/src/panels/quick-search.ts +53 -31
- package/src/panels/right-panel.ts +3 -3
- package/src/panels/seo-modal.ts +13 -17
- package/src/panels/settings-menu.ts +15 -15
- package/src/panels/signals-panel.ts +153 -131
- package/src/panels/statement-editor.ts +230 -140
- package/src/panels/style-panel.ts +254 -216
- package/src/panels/style-utils.ts +114 -51
- package/src/panels/stylebook-doc.ts +57 -54
- package/src/panels/stylebook-layers-panel.ts +9 -9
- package/src/panels/stylebook-panel.ts +13 -17
- package/src/panels/tab-drop.ts +27 -11
- package/src/panels/tab-strip.ts +36 -26
- package/src/platform-errors.ts +57 -43
- package/src/platform.ts +58 -30
- package/src/platforms/cloud.ts +345 -175
- package/src/platforms/default-platform.ts +10 -4
- package/src/platforms/devserver.ts +174 -127
- package/src/platforms/read-batcher.ts +16 -8
- package/src/project-list.ts +2 -1
- package/src/publish/deploy-checklist.ts +8 -2
- package/src/publish/pages-service.ts +28 -13
- package/src/publish/publish-commands.ts +5 -4
- package/src/publish/publish-panel.ts +10 -6
- package/src/recent-projects.ts +15 -8
- package/src/resize-edges.ts +26 -36
- package/src/services/a11y-report.ts +26 -19
- package/src/services/agent-seed.ts +23 -11
- package/src/services/ai-ask.ts +9 -12
- package/src/services/ai-command-tools.ts +68 -62
- package/src/services/ai-import-tools.ts +80 -67
- package/src/services/ai-models.ts +17 -13
- package/src/services/ai-project-tools.ts +68 -32
- package/src/services/ai-session-store.ts +19 -10
- package/src/services/ai-system-prompt.ts +46 -20
- package/src/services/ai-tools.ts +71 -27
- package/src/services/ai-write-report.ts +20 -12
- package/src/services/ai-writes.ts +4 -4
- package/src/services/automation.ts +58 -31
- package/src/services/cem-export.ts +149 -58
- package/src/services/clock.ts +6 -1
- package/src/services/code-services.ts +37 -31
- package/src/services/context-manager.ts +14 -10
- package/src/services/context-resolver.ts +20 -8
- package/src/services/data-service.ts +19 -15
- package/src/services/directory-picker.ts +18 -12
- package/src/services/document-assistant.ts +39 -19
- package/src/services/gated-registry.ts +10 -6
- package/src/services/harness/chat-reducer.ts +23 -1
- package/src/services/import-client.ts +91 -38
- package/src/services/import-seed.ts +8 -2
- package/src/services/jx-validate.ts +28 -31
- package/src/services/live-preview.ts +0 -0
- package/src/services/live-surfaces.ts +6 -3
- package/src/services/model-uri.ts +10 -2
- package/src/services/module-preloads.ts +12 -8
- package/src/services/monaco-buffer.ts +43 -24
- package/src/services/monaco-lazy.ts +7 -8
- package/src/services/monaco-setup.ts +23 -16
- package/src/services/notify.ts +44 -17
- package/src/services/popover-report.ts +25 -10
- package/src/services/preview-eval.ts +20 -8
- package/src/services/profile.ts +13 -6
- package/src/services/project-path.ts +13 -10
- package/src/services/references.ts +0 -0
- package/src/services/render-critic.ts +8 -7
- package/src/services/settings/kernel.ts +13 -4
- package/src/services/settings/write-queue.ts +9 -9
- package/src/services/token-lint.ts +12 -10
- package/src/services/tool-executor.ts +17 -5
- package/src/services/tool-outcomes.ts +44 -24
- package/src/services/trusted-types.ts +24 -7
- package/src/settings/contexts-section.ts +11 -8
- package/src/settings/contributed-section.ts +79 -60
- package/src/settings/css-vars-editor.ts +37 -16
- package/src/settings/defs-editor.ts +38 -35
- package/src/settings/extension-rows.ts +16 -8
- package/src/settings/extension-sections.ts +23 -13
- package/src/settings/extensions-section.ts +4 -1
- package/src/settings/general-settings.ts +11 -8
- package/src/settings/locales-section.ts +20 -12
- package/src/settings/preferences-dialog.ts +9 -6
- package/src/settings/preferences-keymap.ts +7 -5
- package/src/settings/preferences-sections.ts +11 -5
- package/src/settings/project-sections.ts +1 -1
- package/src/settings/schema-field-ui.ts +9 -0
- package/src/settings/settings-document.ts +5 -5
- package/src/shell/tree.ts +6 -5
- package/src/shell.ts +104 -81
- package/src/site-context.ts +37 -22
- package/src/state.ts +41 -49
- package/src/store.ts +54 -34
- package/src/studio.ts +39 -77
- package/src/style/live-preview.ts +1 -1
- package/src/style/project-styles.ts +6 -7
- package/src/style/token-ref.ts +5 -4
- package/src/surfaces/about.ts +18 -19
- package/src/surfaces/add-repo.ts +17 -19
- package/src/surfaces/ai-chat.ts +31 -36
- package/src/surfaces/ai-credentials-form.ts +6 -16
- package/src/surfaces/ai-managed-connect.ts +3 -4
- package/src/surfaces/ai-model-picker.ts +3 -5
- package/src/surfaces/block-action-bar.ts +22 -11
- package/src/surfaces/boot-failure.ts +4 -5
- package/src/surfaces/bottom-dock.ts +9 -18
- package/src/surfaces/canvas-stage.ts +12 -11
- package/src/surfaces/cf-account-picker.ts +17 -18
- package/src/surfaces/commandbar.ts +14 -9
- package/src/surfaces/convert-repeater.ts +17 -19
- package/src/surfaces/data-actions.ts +9 -7
- package/src/surfaces/dialog.ts +26 -28
- package/src/surfaces/diff-toolbar.ts +9 -7
- package/src/surfaces/doc-header.ts +10 -19
- package/src/surfaces/empty-state.ts +7 -10
- package/src/surfaces/entry-editor.ts +14 -11
- package/src/surfaces/expression-editor.ts +11 -25
- package/src/surfaces/files-panel.ts +27 -14
- package/src/surfaces/formula-palette.ts +4 -5
- package/src/surfaces/git-panel.ts +7 -15
- package/src/surfaces/github-auth.ts +16 -20
- package/src/surfaces/github-publish.ts +17 -22
- package/src/surfaces/grid-cell.ts +30 -31
- package/src/surfaces/grid-open.ts +10 -14
- package/src/surfaces/grid-panel.ts +13 -9
- package/src/surfaces/grid-replace.ts +13 -13
- package/src/surfaces/grid-views.ts +15 -18
- package/src/surfaces/inspector-dock.ts +13 -12
- package/src/surfaces/jump-bar.ts +5 -6
- package/src/surfaces/jxsuite-update.ts +16 -22
- package/src/surfaces/library-pane.ts +25 -20
- package/src/surfaces/logic-panel.ts +17 -30
- package/src/surfaces/logic-workspace.ts +13 -15
- package/src/surfaces/media-browser.ts +11 -10
- package/src/surfaces/media-field.ts +4 -5
- package/src/surfaces/media-pane.ts +8 -7
- package/src/surfaces/menu.ts +29 -23
- package/src/surfaces/navigator-dock.ts +11 -12
- package/src/surfaces/new-project.ts +27 -26
- package/src/surfaces/pane-context.ts +20 -25
- package/src/surfaces/pane-grid.ts +15 -10
- package/src/surfaces/panel-activity.ts +5 -6
- package/src/surfaces/panel-data.ts +3 -4
- package/src/surfaces/panel-deploy-checklist.ts +5 -6
- package/src/surfaces/panel-elements.ts +5 -7
- package/src/surfaces/panel-i18n.ts +5 -7
- package/src/surfaces/panel-imports.ts +6 -13
- package/src/surfaces/panel-outline.ts +25 -19
- package/src/surfaces/panel-page.ts +11 -18
- package/src/surfaces/panel-problems.ts +5 -7
- package/src/surfaces/panel-signals.ts +20 -34
- package/src/surfaces/panel-stylebook-layers.ts +5 -8
- package/src/surfaces/preferences.ts +21 -11
- package/src/surfaces/progress-modal.ts +15 -9
- package/src/surfaces/properties-panel.json +1 -1
- package/src/surfaces/properties-panel.ts +20 -42
- package/src/surfaces/publish.ts +18 -18
- package/src/surfaces/push-plan.ts +7 -8
- package/src/surfaces/rail.json +126 -73
- package/src/surfaces/rail.ts +38 -12
- package/src/surfaces/reference-field.ts +11 -15
- package/src/surfaces/schema-builder.ts +16 -22
- package/src/surfaces/schema-form.ts +15 -25
- package/src/surfaces/secret-field.ts +9 -6
- package/src/surfaces/seo.ts +21 -15
- package/src/surfaces/settings-contexts.ts +9 -7
- package/src/surfaces/settings-contributed.ts +14 -10
- package/src/surfaces/settings-css-vars.ts +5 -12
- package/src/surfaces/settings-defs.json +2 -2
- package/src/surfaces/settings-defs.ts +17 -21
- package/src/surfaces/settings-deploy.ts +8 -15
- package/src/surfaces/settings-extensions.ts +5 -6
- package/src/surfaces/settings-head.ts +33 -39
- package/src/surfaces/settings-locales.ts +8 -20
- package/src/surfaces/settings-overview.ts +5 -6
- package/src/surfaces/settings-packages.ts +8 -7
- package/src/surfaces/settings-pane.ts +9 -18
- package/src/surfaces/settings-rawjson.ts +5 -6
- package/src/surfaces/shell.ts +1 -2
- package/src/surfaces/slash-menu.ts +19 -9
- package/src/surfaces/statements.ts +13 -18
- package/src/surfaces/statusbar.ts +17 -14
- package/src/surfaces/style-panel.ts +18 -31
- package/src/surfaces/stylebook-chrome.ts +3 -5
- package/src/surfaces/tab-strip.ts +14 -13
- package/src/surfaces/target-line.ts +6 -7
- package/src/surfaces/welcome.ts +5 -7
- package/src/tabs/patch-ops.ts +4 -3
- package/src/tabs/project-config.ts +32 -21
- package/src/tabs/selection.ts +36 -8
- package/src/tabs/tab.ts +52 -41
- package/src/tabs/transact.ts +98 -53
- package/src/tabs/typing.ts +31 -0
- package/src/types.ts +32 -17
- package/src/ui/ai-credentials-form.ts +10 -13
- package/src/ui/ai-model-picker.ts +3 -3
- package/src/ui/cf-account-picker.ts +7 -9
- package/src/ui/color-selector.ts +9 -5
- package/src/ui/dynamic-slot.ts +7 -8
- package/src/ui/expression-editor.ts +112 -105
- package/src/ui/form-controls.ts +57 -48
- package/src/ui/formula-catalog.ts +239 -230
- package/src/ui/formula-chips.ts +33 -18
- package/src/ui/layers.ts +44 -31
- package/src/ui/media-picker.ts +18 -9
- package/src/ui/popover-surface.ts +20 -12
- package/src/ui/progress-modal.ts +13 -8
- package/src/ui/regions.ts +7 -6
- package/src/ui/schema-form.ts +113 -70
- package/src/ui/surface.ts +71 -8
- package/src/ui/timing.ts +9 -0
- package/src/ui/value-source.ts +44 -31
- package/src/ui/virtual-window.ts +3 -2
- package/src/utils/base64.ts +3 -1
- package/src/utils/edit-display.ts +103 -74
- package/src/utils/element-selectors.ts +3 -2
- package/src/utils/google-fonts.ts +15 -14
- package/src/utils/inherited-style.ts +18 -20
- package/src/utils/link-target.ts +1 -1
- package/src/utils/preview-format.ts +25 -3
- package/src/utils/strip-events.ts +49 -22
- package/src/utils/studio-utils.ts +29 -14
- package/src/view.ts +2 -3
- package/src/workspace/pane-derive.ts +10 -12
- package/src/workspace/session.ts +53 -43
- package/src/workspace/workspace.ts +47 -36
- package/dist/chunks/2020-nkxms0ay.js +0 -4
- package/dist/chunks/adapter-m948ab5f.js +0 -4
- package/dist/chunks/cf-account-picker-n8hr38v7.js +0 -4
- package/dist/chunks/cf-settings-356xdtne.js +0 -4
- package/dist/chunks/color-area-jqhna8zy.js +0 -4
- package/dist/chunks/color-field-embq5ctg.js +0 -4
- package/dist/chunks/color-fpezvnkt.js +0 -4
- package/dist/chunks/color-slider-1qmw7wqy.js +0 -4
- package/dist/chunks/combobox-773hdzyj.js +0 -4
- package/dist/chunks/components-yk3t844e.js +0 -4
- package/dist/chunks/content-source-bawmyc09.js +0 -4
- package/dist/chunks/convert-to-repeater-7wns8kf1.js +0 -4
- package/dist/chunks/dialog-mtm9fq5t.js +0 -4
- package/dist/chunks/editor-6sc8nacq.js +0 -4
- package/dist/chunks/entry-commands-8ay9fh81.js +0 -4
- package/dist/chunks/extension-sections-na7rj3nr.js +0 -4
- package/dist/chunks/file-ops-gye0qw56.js +0 -4
- package/dist/chunks/files-dmc2xvcq.js +0 -4
- package/dist/chunks/format-host-t76b53f8.js +0 -4
- package/dist/chunks/fs-events-cg4tpz06.js +0 -4
- package/dist/chunks/git-panel-yef7bshy.js +0 -4
- package/dist/chunks/grid-view-7tt4bxw1.js +0 -51
- package/dist/chunks/icons-qbh8akb1.js +0 -4
- package/dist/chunks/iframe-entry-f7mqjwpm.js +0 -5
- package/dist/chunks/iframe-entry-haw7jkvz.js +0 -5
- package/dist/chunks/iframe-entry-z6qrytv3.js +0 -5
- package/dist/chunks/iframe-host-tmz30gfp.js +0 -4
- package/dist/chunks/index-nag78a9h.js +0 -4
- package/dist/chunks/jsonMode-zhwsprqk.js +0 -13
- package/dist/chunks/jx-validate-3gbp5nkn.js +0 -4
- package/dist/chunks/layers-fvz99859.js +0 -4
- package/dist/chunks/layers-panel-gchmbf9p.js +0 -4
- package/dist/chunks/listbox-s8fkmnq8.js +0 -4
- package/dist/chunks/lit-html-9agdspkt.js +0 -4
- package/dist/chunks/media-picker-rhjvyy00.js +0 -4
- package/dist/chunks/menu-2e4y9j7b.js +0 -4
- package/dist/chunks/menu-37d07z9m.js +0 -4
- package/dist/chunks/monaco-binding-2jnhjjvr.js +0 -4
- package/dist/chunks/monaco-buffer-rp21359g.js +0 -4
- package/dist/chunks/monaco-setup-vhh7gayr.js +0 -4
- package/dist/chunks/notify-h3www560.js +0 -4
- package/dist/chunks/number-field-gw7sq8rn.js +0 -4
- package/dist/chunks/parse-897fvqah.js +0 -4
- package/dist/chunks/platform-hz34wcd7.js +0 -4
- package/dist/chunks/popover-8htra4er.js +0 -4
- package/dist/chunks/publish-panel-exsmjzyj.js +0 -4
- package/dist/chunks/quick-search-pgaqeh0m.js +0 -4
- package/dist/chunks/references-2cgdxnb8.js +0 -4
- package/dist/chunks/right-panel-jf856w5w.js +0 -4
- package/dist/chunks/section-registry-jnf8r5gy.js +0 -4
- package/dist/chunks/select-n3v7gwas.js +0 -4
- package/dist/chunks/split-pff8f3ze.js +0 -4
- package/dist/chunks/studio-0f55h9ye.js +0 -5
- package/dist/chunks/studio-0sqdhnew.js +0 -12
- package/dist/chunks/studio-19x1c75w.js +0 -5
- package/dist/chunks/studio-2sqcndak.js +0 -5
- package/dist/chunks/studio-3aey7dd3.js +0 -5
- package/dist/chunks/studio-3bpdkq2s.js +0 -5
- package/dist/chunks/studio-47y6fbpf.js +0 -5
- package/dist/chunks/studio-4m3826v2.js +0 -5
- package/dist/chunks/studio-4nx2dj1g.js +0 -4
- package/dist/chunks/studio-4xv5s47r.js +0 -9
- package/dist/chunks/studio-5g4t8v6w.js +0 -5
- package/dist/chunks/studio-5py436sf.js +0 -5
- package/dist/chunks/studio-77kt594t.js +0 -5
- package/dist/chunks/studio-8f87n763.js +0 -10
- package/dist/chunks/studio-8mb00b84.js +0 -5
- package/dist/chunks/studio-8p51gq2h.js +0 -6
- package/dist/chunks/studio-954ds834.js +0 -5
- package/dist/chunks/studio-9ft45c83.js +0 -9
- package/dist/chunks/studio-a2138x5k.js +0 -7
- package/dist/chunks/studio-a9yzstqj.js +0 -5
- package/dist/chunks/studio-acdksxx6.js +0 -5
- package/dist/chunks/studio-ar8jcf2y.js +0 -5
- package/dist/chunks/studio-bmn4mn9j.js +0 -7
- package/dist/chunks/studio-e7xxa0sj.js +0 -5
- package/dist/chunks/studio-ecaz25vk.js +0 -5
- package/dist/chunks/studio-ery42sqr.js +0 -4
- package/dist/chunks/studio-fzdywr6p.js +0 -9
- package/dist/chunks/studio-g5fmf0c1.js +0 -5
- package/dist/chunks/studio-g7nse7zb.js +0 -5
- package/dist/chunks/studio-geq1ea6k.js +0 -14
- package/dist/chunks/studio-ghkb32r8.js +0 -5
- package/dist/chunks/studio-ghrhy2y7.js +0 -5
- package/dist/chunks/studio-grawhey1.js +0 -5
- package/dist/chunks/studio-h0xgswew.js +0 -5
- package/dist/chunks/studio-h9c4p2tx.js +0 -5
- package/dist/chunks/studio-jyzj5cxs.js +0 -5
- package/dist/chunks/studio-mgx8yhnz.js +0 -64
- package/dist/chunks/studio-mpb04y1d.js +0 -6
- package/dist/chunks/studio-n17mty64.js +0 -5
- package/dist/chunks/studio-nwh2eqsk.js +0 -6
- package/dist/chunks/studio-q1h883bt.js +0 -16
- package/dist/chunks/studio-q4tv82h7.js +0 -9
- package/dist/chunks/studio-qpqa7vk3.js +0 -5
- package/dist/chunks/studio-qqz8e5gk.js +0 -5
- package/dist/chunks/studio-qvasen3f.js +0 -5
- package/dist/chunks/studio-rggdb3hm.js +0 -5
- package/dist/chunks/studio-sghy936h.js +0 -4
- package/dist/chunks/studio-skprc6ef.js +0 -5
- package/dist/chunks/studio-tt2nactf.js +0 -5
- package/dist/chunks/studio-tyasmc39.js +0 -5
- package/dist/chunks/studio-vk9ezads.js +0 -5
- package/dist/chunks/studio-vzacdfsc.js +0 -4
- package/dist/chunks/studio-w4c0xmrw.js +0 -5
- package/dist/chunks/studio-wfjqhhbk.js +0 -5
- package/dist/chunks/studio-wgh5kxpj.js +0 -5
- package/dist/chunks/studio-xasj0796.js +0 -5
- package/dist/chunks/studio-y78s8r2n.js +0 -5
- package/dist/chunks/studio-z8w183sh.js +0 -5
- package/dist/chunks/studio-zscd9ty4.js +0 -928
- package/dist/chunks/studio-zxp13sss.js +0 -7
- package/dist/chunks/studio-zygnmm01.js +0 -5
- package/dist/chunks/swatch-group-8qh9a3bm.js +0 -4
- package/dist/chunks/tabs-jwthg40w.js +0 -4
- package/dist/chunks/textfield-spy3hc77.js +0 -4
- package/dist/chunks/toast-4d35zd64.js +0 -4
- package/dist/chunks/toast-host-8sjmfed3.js +0 -4
- package/dist/chunks/tooltip-fd6g9xy3.js +0 -4
- package/dist/chunks/tree-h19v1jfz.js +0 -4
- package/dist/chunks/tsMode-gr0m4dzr.js +0 -14
- package/dist/chunks/workspace-m15qtcqp.js +0 -4
- package/dist/chunks/ws-client-nf61frr1.js +0 -4
package/src/surfaces/rail.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://jxsuite.com/schema/v1",
|
|
3
3
|
"$id": "StudioRail",
|
|
4
|
-
"$description": "The Navigator rail: a rendering of the panel registry. The adapter hands in `groups`, every rail-able panel grouped by level with its selected state and badge, and `settingsVisible`/`settingsOpen` for the
|
|
4
|
+
"$description": "The Navigator rail: a rendering of the panel registry. The adapter hands in `groups`, every rail-able panel grouped by level with its selected state and badge, and, for the foot, `libraryVisible`/`libraryOpen` for the Library button and `settingsVisible`/`settingsOpen` for the gear. Nothing here is a list of panels. Each button prints its record's short `railLabel` under the glyph, falling back to `title`, and carries the full `title` as its accessible name and tooltip: the visible words lead the name a reader hears (WCAG 2.5.3), and the tooltip restores what a short label leaves out.",
|
|
5
5
|
"tagName": "div",
|
|
6
6
|
"attributes": {
|
|
7
7
|
"part": "rail"
|
|
@@ -162,94 +162,147 @@
|
|
|
162
162
|
"attributes": {
|
|
163
163
|
"part": "foot"
|
|
164
164
|
},
|
|
165
|
-
"
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
"true": {
|
|
170
|
-
"tagName": "jx-action-button",
|
|
171
|
-
"$props": {
|
|
172
|
-
"label": "Settings",
|
|
173
|
-
"hint": "Settings",
|
|
174
|
-
"icon": "gear",
|
|
175
|
-
"stacked": true,
|
|
176
|
-
"haspopup": "menu",
|
|
177
|
-
"expanded": {
|
|
178
|
-
"$ref": "#/state/settingsOpen"
|
|
179
|
-
}
|
|
165
|
+
"children": [
|
|
166
|
+
{
|
|
167
|
+
"$switch": {
|
|
168
|
+
"$ref": "#/state/libraryVisible"
|
|
180
169
|
},
|
|
170
|
+
"tagName": "div",
|
|
181
171
|
"attributes": {
|
|
182
|
-
"
|
|
183
|
-
"data-expanded": "${state.settingsOpen ? '' : null}"
|
|
172
|
+
"part": "foot-library"
|
|
184
173
|
},
|
|
185
|
-
"
|
|
186
|
-
"
|
|
187
|
-
|
|
188
|
-
{
|
|
189
|
-
"
|
|
190
|
-
"
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
"
|
|
174
|
+
"cases": {
|
|
175
|
+
"true": {
|
|
176
|
+
"tagName": "jx-action-button",
|
|
177
|
+
"$props": {
|
|
178
|
+
"label": "Library",
|
|
179
|
+
"hint": "Library",
|
|
180
|
+
"icon": "books",
|
|
181
|
+
"stacked": true,
|
|
182
|
+
"selected": {
|
|
183
|
+
"$ref": "#/state/libraryOpen"
|
|
184
|
+
}
|
|
185
|
+
},
|
|
186
|
+
"attributes": {
|
|
187
|
+
"data-rail-action": "library.open"
|
|
188
|
+
},
|
|
189
|
+
"onclick": {
|
|
190
|
+
"$prototype": "Function",
|
|
191
|
+
"body": [
|
|
194
192
|
{
|
|
195
|
-
"
|
|
193
|
+
"operator": "call",
|
|
194
|
+
"target": {
|
|
195
|
+
"$ref": "#/state/openLibrary"
|
|
196
|
+
},
|
|
197
|
+
"value": []
|
|
196
198
|
}
|
|
197
199
|
]
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
+
},
|
|
201
|
+
"children": [
|
|
202
|
+
{
|
|
203
|
+
"tagName": "span",
|
|
204
|
+
"textContent": "Library"
|
|
205
|
+
}
|
|
206
|
+
]
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"tagName": "div",
|
|
212
|
+
"attributes": {
|
|
213
|
+
"part": "foot-settings"
|
|
200
214
|
},
|
|
201
|
-
"
|
|
202
|
-
"$
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
"
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
215
|
+
"$switch": {
|
|
216
|
+
"$ref": "#/state/settingsVisible"
|
|
217
|
+
},
|
|
218
|
+
"cases": {
|
|
219
|
+
"true": {
|
|
220
|
+
"tagName": "jx-action-button",
|
|
221
|
+
"$props": {
|
|
222
|
+
"label": "Settings",
|
|
223
|
+
"hint": "Settings",
|
|
224
|
+
"icon": "gear",
|
|
225
|
+
"stacked": true,
|
|
226
|
+
"haspopup": "menu",
|
|
227
|
+
"expanded": {
|
|
228
|
+
"$ref": "#/state/settingsOpen"
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
"attributes": {
|
|
232
|
+
"data-rail-menu": "settings",
|
|
233
|
+
"data-expanded": "${state.settingsOpen ? '' : null}"
|
|
234
|
+
},
|
|
235
|
+
"onclick": {
|
|
236
|
+
"$prototype": "Function",
|
|
237
|
+
"body": [
|
|
238
|
+
{
|
|
239
|
+
"operator": "call",
|
|
240
|
+
"target": {
|
|
241
|
+
"$ref": "#/state/openSettings"
|
|
242
|
+
},
|
|
243
|
+
"value": [
|
|
244
|
+
{
|
|
245
|
+
"$ref": "event#/currentTarget"
|
|
246
|
+
}
|
|
247
|
+
]
|
|
248
|
+
}
|
|
249
|
+
]
|
|
250
|
+
},
|
|
251
|
+
"onkeydown": {
|
|
252
|
+
"$prototype": "Function",
|
|
253
|
+
"body": [
|
|
254
|
+
{
|
|
255
|
+
"$switch": {
|
|
256
|
+
"$ref": "event#/key"
|
|
257
|
+
},
|
|
258
|
+
"cases": {
|
|
259
|
+
"ArrowUp": [
|
|
260
|
+
{
|
|
261
|
+
"operator": "call",
|
|
262
|
+
"target": {
|
|
263
|
+
"$ref": "#/state/openSettings"
|
|
264
|
+
},
|
|
265
|
+
"value": [
|
|
266
|
+
{
|
|
267
|
+
"$ref": "event#/currentTarget"
|
|
268
|
+
}
|
|
269
|
+
]
|
|
270
|
+
},
|
|
216
271
|
{
|
|
217
|
-
"
|
|
272
|
+
"preventDefault": true
|
|
218
273
|
}
|
|
219
|
-
]
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
274
|
+
],
|
|
275
|
+
"ArrowDown": [
|
|
276
|
+
{
|
|
277
|
+
"operator": "call",
|
|
278
|
+
"target": {
|
|
279
|
+
"$ref": "#/state/openSettings"
|
|
280
|
+
},
|
|
281
|
+
"value": [
|
|
282
|
+
{
|
|
283
|
+
"$ref": "event#/currentTarget"
|
|
284
|
+
}
|
|
285
|
+
]
|
|
286
|
+
},
|
|
232
287
|
{
|
|
233
|
-
"
|
|
288
|
+
"preventDefault": true
|
|
234
289
|
}
|
|
235
290
|
]
|
|
236
|
-
},
|
|
237
|
-
{
|
|
238
|
-
"preventDefault": true
|
|
239
291
|
}
|
|
240
|
-
|
|
292
|
+
}
|
|
293
|
+
]
|
|
294
|
+
},
|
|
295
|
+
"children": [
|
|
296
|
+
{
|
|
297
|
+
"tagName": "span",
|
|
298
|
+
"textContent": "Settings"
|
|
241
299
|
}
|
|
242
|
-
|
|
243
|
-
]
|
|
244
|
-
},
|
|
245
|
-
"children": [
|
|
246
|
-
{
|
|
247
|
-
"tagName": "span",
|
|
248
|
-
"textContent": "Settings"
|
|
300
|
+
]
|
|
249
301
|
}
|
|
250
|
-
|
|
302
|
+
}
|
|
251
303
|
}
|
|
252
|
-
|
|
304
|
+
],
|
|
305
|
+
"$description": "The two rail buttons that open no Navigator panel: the Library, which is a canvas tab rather than a panel and so sits with the other exception, above the gear."
|
|
253
306
|
}
|
|
254
307
|
]
|
|
255
308
|
}
|
package/src/surfaces/rail.ts
CHANGED
|
@@ -14,9 +14,11 @@
|
|
|
14
14
|
* record's `railLabel` when it declares one (Source Control's is "Source", because the full title
|
|
15
15
|
* ellipsed in the 48px label box), and the full `title` stays the accessible name and the tooltip.
|
|
16
16
|
*
|
|
17
|
-
* The foot
|
|
18
|
-
*
|
|
19
|
-
*
|
|
17
|
+
* The foot holds the two buttons that open no Navigator panel. **Library** runs `library.open`: the
|
|
18
|
+
* Library is a canvas tab, not a panel, and its button is pressed while that tab is the focused
|
|
19
|
+
* one. Below it is the ⚙ **Settings** menu, a menu button rendered from the `settings/menu`
|
|
20
|
+
* placement: a record joins the gear by declaring the placement and there is nothing here to update
|
|
21
|
+
* in step. With no registry, or one that declares nothing for either, the foot is empty.
|
|
20
22
|
*
|
|
21
23
|
* What this adapter owns is the projection and the two decisions: which panel a button toggles, and
|
|
22
24
|
* where the gear's menu opens. The scope is reactive, so the surface follows `shell` through one
|
|
@@ -31,6 +33,7 @@ import { refreshGitStatus } from "../panels/git-panel";
|
|
|
31
33
|
import { panelContext, railGroups } from "../panels/panel-registry";
|
|
32
34
|
import { registerNavigatorPanels } from "../panels/navigator-panels";
|
|
33
35
|
import { activeRegistry } from "../commands/active-registry";
|
|
36
|
+
import { runActiveReported } from "../commands/run-reported";
|
|
34
37
|
import {
|
|
35
38
|
dismissSettingsMenu,
|
|
36
39
|
isSettingsMenuOpen,
|
|
@@ -38,14 +41,15 @@ import {
|
|
|
38
41
|
SETTINGS_MENU_PLACEMENT,
|
|
39
42
|
} from "../panels/settings-menu";
|
|
40
43
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
44
|
+
import { libraryTabId } from "../browse/library-source";
|
|
45
|
+
import { activeTab } from "../workspace/workspace";
|
|
41
46
|
import railDoc from "./rail.json";
|
|
42
47
|
|
|
43
48
|
import type { EffectScope } from "@vue/reactivity";
|
|
44
|
-
import type { JxDocument } from "@jxsuite/schema/types";
|
|
45
49
|
import type { PanelRecord } from "../panels/panel-registry";
|
|
46
50
|
import type { SurfaceHandle } from "../ui/surface";
|
|
47
51
|
|
|
48
|
-
registerSurface("rail", railDoc
|
|
52
|
+
registerSurface("rail", railDoc);
|
|
49
53
|
|
|
50
54
|
/** One rail button, as the surface reads it. */
|
|
51
55
|
interface RailButton {
|
|
@@ -67,12 +71,21 @@ interface RailGroupProjection {
|
|
|
67
71
|
panels: RailButton[];
|
|
68
72
|
}
|
|
69
73
|
|
|
70
|
-
|
|
74
|
+
/** The parts of the rail's scope recomputed from the registry and the shell on every render. */
|
|
75
|
+
type RailProjection = Pick<
|
|
76
|
+
RailScope,
|
|
77
|
+
"groups" | "libraryOpen" | "libraryVisible" | "settingsVisible"
|
|
78
|
+
>;
|
|
79
|
+
|
|
80
|
+
interface RailScope {
|
|
71
81
|
groups: RailGroupProjection[];
|
|
72
82
|
settingsVisible: boolean;
|
|
73
83
|
settingsOpen: boolean;
|
|
84
|
+
libraryVisible: boolean;
|
|
85
|
+
libraryOpen: boolean;
|
|
86
|
+
openLibrary: () => void;
|
|
74
87
|
toggle: (id: string) => void;
|
|
75
|
-
openSettings: (anchor:
|
|
88
|
+
openSettings: (anchor: EventTarget | null) => void;
|
|
76
89
|
}
|
|
77
90
|
|
|
78
91
|
let _scope: EffectScope | null = null;
|
|
@@ -104,7 +117,7 @@ export function toggleRailPanel(panel: PanelRecord): void {
|
|
|
104
117
|
}
|
|
105
118
|
|
|
106
119
|
/** The rail, as the surface reads it, from the registry and the shell as they stand now. */
|
|
107
|
-
function project():
|
|
120
|
+
function project(): RailProjection {
|
|
108
121
|
const ctx = panelContext();
|
|
109
122
|
const groups = railGroups(ctx).map((group, index) => ({
|
|
110
123
|
dividerAbove: index > 0,
|
|
@@ -122,14 +135,25 @@ function project(): { groups: RailGroupProjection[]; settingsVisible: boolean }
|
|
|
122
135
|
const registry = activeRegistry();
|
|
123
136
|
const settingsVisible =
|
|
124
137
|
registry !== null && registry.forPlacement(SETTINGS_MENU_PLACEMENT).length > 0;
|
|
125
|
-
|
|
138
|
+
const libraryVisible =
|
|
139
|
+
registry?.get(LIBRARY_COMMAND) !== undefined && registry.isVisible(LIBRARY_COMMAND);
|
|
140
|
+
const libraryOpen = activeTab.value?.id === libraryTabId();
|
|
141
|
+
return { groups, libraryOpen, libraryVisible, settingsVisible };
|
|
126
142
|
}
|
|
127
143
|
|
|
144
|
+
/** The command the Library button runs: the record decides when it can, and what opening means. */
|
|
145
|
+
const LIBRARY_COMMAND = "library.open";
|
|
146
|
+
|
|
128
147
|
/** The reactive scope the surface reads, made once. */
|
|
129
148
|
function state(): RailScope {
|
|
130
|
-
_state ??= reactive({
|
|
149
|
+
_state ??= reactive<RailScope>({
|
|
131
150
|
groups: [],
|
|
132
|
-
|
|
151
|
+
libraryOpen: false,
|
|
152
|
+
libraryVisible: false,
|
|
153
|
+
openLibrary: () => {
|
|
154
|
+
void runActiveReported(LIBRARY_COMMAND, undefined, "Navigator rail");
|
|
155
|
+
},
|
|
156
|
+
openSettings: (anchor: EventTarget | null) => {
|
|
133
157
|
if (!(anchor instanceof HTMLElement)) {
|
|
134
158
|
return;
|
|
135
159
|
}
|
|
@@ -151,7 +175,7 @@ function state(): RailScope {
|
|
|
151
175
|
toggleRailPanel(panel);
|
|
152
176
|
}
|
|
153
177
|
},
|
|
154
|
-
})
|
|
178
|
+
});
|
|
155
179
|
return _state;
|
|
156
180
|
}
|
|
157
181
|
|
|
@@ -161,6 +185,8 @@ export function renderActivityBar(): void {
|
|
|
161
185
|
const next = project();
|
|
162
186
|
scope.groups = next.groups;
|
|
163
187
|
scope.settingsVisible = next.settingsVisible;
|
|
188
|
+
scope.libraryVisible = next.libraryVisible;
|
|
189
|
+
scope.libraryOpen = next.libraryOpen;
|
|
164
190
|
scope.settingsOpen = isSettingsMenuOpen();
|
|
165
191
|
ensureMounted();
|
|
166
192
|
}
|
|
@@ -25,16 +25,9 @@ import { reactive } from "../reactivity";
|
|
|
25
25
|
import { mountSurface, registerSurface } from "../ui/surface";
|
|
26
26
|
import referenceDoc from "./reference-field.json";
|
|
27
27
|
|
|
28
|
-
import type {
|
|
29
|
-
import type { SurfaceHandle } from "../ui/surface";
|
|
28
|
+
import type { SurfaceHandle, SurfaceOption } from "../ui/surface";
|
|
30
29
|
|
|
31
|
-
registerSurface("reference-field", referenceDoc
|
|
32
|
-
|
|
33
|
-
/** One row of the picker: an entry id, the empty row, or the value that is not on disk. */
|
|
34
|
-
export interface ReferenceChoice {
|
|
35
|
-
value: string;
|
|
36
|
-
label: string;
|
|
37
|
-
}
|
|
30
|
+
registerSurface("reference-field", referenceDoc);
|
|
38
31
|
|
|
39
32
|
/** What the field says right now. Every field is the flow's, never a state it derives. */
|
|
40
33
|
export interface ReferenceFieldView {
|
|
@@ -50,7 +43,7 @@ export interface ReferenceFieldView {
|
|
|
50
43
|
/** The entry id the field holds, as a string. */
|
|
51
44
|
value: string;
|
|
52
45
|
/** The picker's rows, in the order they are offered. Empty on a text field. */
|
|
53
|
-
options:
|
|
46
|
+
options: SurfaceOption[];
|
|
54
47
|
/** True while the read is in flight: the picker is inert and says so in its one row. */
|
|
55
48
|
disabled: boolean;
|
|
56
49
|
/** A sentence under the control. Empty draws none. */
|
|
@@ -82,8 +75,7 @@ export interface ReferenceFieldSurfaceHandle {
|
|
|
82
75
|
dispose: () => void;
|
|
83
76
|
}
|
|
84
77
|
|
|
85
|
-
interface ReferenceScope
|
|
86
|
-
extends Record<string, unknown>, ReferenceFieldView, ReferenceFieldActions {}
|
|
78
|
+
interface ReferenceScope extends ReferenceFieldView, ReferenceFieldActions {}
|
|
87
79
|
|
|
88
80
|
/** The view a freshly mounted surface starts on: a picker that has not been told anything. */
|
|
89
81
|
function emptyView(): ReferenceFieldView {
|
|
@@ -112,7 +104,7 @@ export function mountReferenceFieldSurface(
|
|
|
112
104
|
actions: ReferenceFieldActions,
|
|
113
105
|
): ReferenceFieldSurfaceHandle {
|
|
114
106
|
host.textContent = "";
|
|
115
|
-
const scope = reactive<ReferenceScope>({ ...emptyView(), ...actions })
|
|
107
|
+
const scope: ReferenceScope = reactive<ReferenceScope>({ ...emptyView(), ...actions });
|
|
116
108
|
|
|
117
109
|
/** `null` while a mount is in flight — which is a standing surface, not a missing one. */
|
|
118
110
|
let handle: SurfaceHandle | null = null;
|
|
@@ -121,13 +113,17 @@ export function mountReferenceFieldSurface(
|
|
|
121
113
|
|
|
122
114
|
const mount = (): Promise<HTMLElement> =>
|
|
123
115
|
mountSurface("reference-field", scope, host).then((mounted) => {
|
|
116
|
+
/* SAFETY: `reference-field.json`'s root definition carries `tagName: "div"`, so the runtime
|
|
117
|
+
mounts an HTMLElement; a `Text` root only comes from a document whose root is a bare
|
|
118
|
+
string. */
|
|
119
|
+
const root = mounted.root as HTMLElement;
|
|
124
120
|
mounting = false;
|
|
125
121
|
if (disposed) {
|
|
126
122
|
mounted.dispose();
|
|
127
|
-
return
|
|
123
|
+
return root;
|
|
128
124
|
}
|
|
129
125
|
handle = mounted;
|
|
130
|
-
return
|
|
126
|
+
return root;
|
|
131
127
|
});
|
|
132
128
|
|
|
133
129
|
const ready = mount();
|
|
@@ -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();
|