@jxsuite/studio 2.0.0 → 2.1.0
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/canvas.html +21 -0
- package/dist/chunks/Overlay.dev-qfjzkms8.js +23 -0
- package/dist/chunks/{Overlay.dev-cszx7yn5.js.map → Overlay.dev-qfjzkms8.js.map} +1 -1
- package/dist/chunks/{adapter-z8fkmbmv.js → adapter-qfnesn5v.js} +2 -2
- package/dist/chunks/{cf-settings-mmyv436d.js → cf-settings-73sh5z4p.js} +3 -3
- package/dist/chunks/{components-0hzentwq.js → components-2bpqp4mq.js} +5 -7
- package/dist/chunks/{components-0hzentwq.js.map → components-2bpqp4mq.js.map} +1 -1
- package/dist/chunks/content-source-34gnkbnn.js +38 -0
- package/dist/chunks/content-source-34gnkbnn.js.map +9 -0
- package/dist/chunks/convert-to-repeater-t8kxre5s.js +258 -0
- package/dist/chunks/convert-to-repeater-t8kxre5s.js.map +10 -0
- package/dist/chunks/extension-sections-6mqydz35.js +301 -0
- package/dist/chunks/extension-sections-6mqydz35.js.map +11 -0
- package/dist/chunks/files-8kn321h1.js +70 -0
- package/dist/chunks/files-8kn321h1.js.map +9 -0
- package/dist/chunks/{format-host-2c188n41.js → format-host-mkwsmt8d.js} +3 -3
- package/dist/chunks/git-panel-tjbr191d.js +51 -0
- package/dist/chunks/git-panel-tjbr191d.js.map +9 -0
- package/dist/chunks/{index-baeg2x3y.js → index-7pxchcce.js} +4 -3
- package/dist/chunks/{index-baeg2x3y.js.map → index-7pxchcce.js.map} +3 -3
- package/dist/chunks/{jx-validate-qx8degj7.js → jx-validate-v6qgknrs.js} +3 -3
- package/dist/chunks/layers-panel-87pb25km.js +58 -0
- package/dist/chunks/layers-panel-87pb25km.js.map +9 -0
- package/dist/chunks/{monaco-setup-zjdp9zdw.js → monaco-setup-e0yh25j4.js} +4 -75
- package/dist/chunks/{monaco-setup-zjdp9zdw.js.map → monaco-setup-e0yh25j4.js.map} +3 -4
- package/dist/chunks/publish-panel-m0fcgdrt.js +21 -0
- package/dist/chunks/publish-panel-m0fcgdrt.js.map +9 -0
- package/dist/chunks/quick-search-rhs6cbsb.js +53 -0
- package/dist/chunks/quick-search-rhs6cbsb.js.map +9 -0
- package/dist/chunks/right-panel-zpdxd98t.js +37 -0
- package/dist/chunks/right-panel-zpdxd98t.js.map +9 -0
- package/dist/chunks/section-registry-zmckaxf4.js +30 -0
- package/dist/chunks/section-registry-zmckaxf4.js.map +9 -0
- package/dist/chunks/sp-overlay.dev-9ran0sfq.js +18 -0
- package/dist/chunks/sp-overlay.dev-9ran0sfq.js.map +9 -0
- package/dist/chunks/sp-popover.dev-rebmdncr.js +9 -0
- package/dist/chunks/sp-popover.dev-rebmdncr.js.map +9 -0
- package/dist/chunks/sp-progress-circle.dev-5vkppfkt.js +15 -0
- package/dist/chunks/sp-progress-circle.dev-5vkppfkt.js.map +9 -0
- package/dist/chunks/sp-tooltip.dev-ykqrg8h5.js +15 -0
- package/dist/chunks/sp-tooltip.dev-ykqrg8h5.js.map +9 -0
- package/dist/chunks/{sp-tray.dev-pb2fsd65.js → sp-tray.dev-ey59vfh7.js} +10 -8
- package/dist/chunks/{sp-tray.dev-pb2fsd65.js.map → sp-tray.dev-ey59vfh7.js.map} +2 -2
- package/dist/chunks/{studio-9qr6fq7p.js → studio-0rqqhrdy.js} +10 -378
- package/dist/chunks/{studio-9qr6fq7p.js.map → studio-0rqqhrdy.js.map} +4 -14
- package/dist/chunks/{studio-5x6tqqec.js → studio-2sj1jj3v.js} +10 -8
- package/dist/chunks/{studio-5x6tqqec.js.map → studio-2sj1jj3v.js.map} +2 -2
- package/dist/chunks/{studio-h3fw0wn8.js → studio-3fk1ac9z.js} +6 -4
- package/dist/chunks/{studio-h3fw0wn8.js.map → studio-3fk1ac9z.js.map} +2 -2
- package/dist/chunks/studio-41exgzhq.js +6690 -0
- package/dist/chunks/studio-41exgzhq.js.map +38 -0
- package/dist/chunks/{studio-7v2bpweq.js → studio-4mqb9a0j.js} +6 -4
- package/dist/chunks/{studio-7v2bpweq.js.map → studio-4mqb9a0j.js.map} +2 -2
- package/dist/chunks/studio-50k77cca.js +1787 -0
- package/dist/chunks/studio-50k77cca.js.map +18 -0
- package/dist/chunks/{studio-56v3zwk6.js → studio-6a0h7sne.js} +10 -8
- package/dist/chunks/{studio-56v3zwk6.js.map → studio-6a0h7sne.js.map} +2 -2
- package/dist/chunks/studio-6f0am8f2.js +53 -0
- package/dist/chunks/studio-6f0am8f2.js.map +10 -0
- package/dist/chunks/studio-6nmjc5qk.js +7002 -0
- package/dist/chunks/studio-6nmjc5qk.js.map +32 -0
- package/dist/chunks/studio-7afd21nw.js +67 -0
- package/dist/chunks/studio-7afd21nw.js.map +10 -0
- package/dist/chunks/{studio-xze4zrs1.js → studio-7bmdvzne.js} +2 -2
- package/dist/chunks/studio-7bmdvzne.js.map +10 -0
- package/dist/chunks/studio-8jpzqk5s.js +128 -0
- package/dist/chunks/studio-8jpzqk5s.js.map +10 -0
- package/dist/chunks/studio-94m77tgk.js +1482 -0
- package/dist/chunks/studio-94m77tgk.js.map +13 -0
- package/dist/chunks/studio-9je6w5sq.js +1000 -0
- package/dist/chunks/studio-9je6w5sq.js.map +16 -0
- package/dist/chunks/{studio-w7c6kvk7.js → studio-a7pzveq1.js} +2 -2
- package/dist/chunks/{studio-97qcgvdn.js → studio-adn0z1k3.js} +14 -8
- package/dist/chunks/{studio-97qcgvdn.js.map → studio-adn0z1k3.js.map} +3 -3
- package/dist/chunks/{studio-kr88ryr7.js → studio-bsxxx3x2.js} +17 -15
- package/dist/chunks/{studio-kr88ryr7.js.map → studio-bsxxx3x2.js.map} +7 -6
- package/dist/chunks/studio-bw5dz6km.js +608 -0
- package/dist/chunks/studio-bw5dz6km.js.map +21 -0
- package/dist/chunks/studio-c6s5getc.js +4232 -0
- package/dist/chunks/studio-c6s5getc.js.map +39 -0
- package/dist/chunks/studio-cjm7fdjf.js +451 -0
- package/dist/chunks/studio-cjm7fdjf.js.map +14 -0
- package/dist/chunks/{studio-cx91mnh8.js → studio-ckwz4d3x.js} +53 -53
- package/dist/chunks/{studio-cx91mnh8.js.map → studio-ckwz4d3x.js.map} +5 -5
- package/dist/chunks/studio-dg7zyt5x.js +28 -0
- package/dist/chunks/studio-dg7zyt5x.js.map +10 -0
- package/dist/chunks/studio-dzcyvvvz.js +166 -0
- package/dist/chunks/studio-dzcyvvvz.js.map +10 -0
- package/dist/chunks/{studio-7kqe41sa.js → studio-evkr5d3b.js} +15 -7
- package/dist/chunks/{studio-7kqe41sa.js.map → studio-evkr5d3b.js.map} +5 -4
- package/dist/chunks/studio-f12h6177.js +411 -0
- package/dist/chunks/studio-f12h6177.js.map +13 -0
- package/dist/chunks/studio-hbp1s8m9.js +1817 -0
- package/dist/chunks/studio-hbp1s8m9.js.map +14 -0
- package/dist/chunks/studio-k2sxjph5.js +15295 -0
- package/dist/chunks/studio-k2sxjph5.js.map +235 -0
- package/dist/chunks/studio-myje51t3.js +385 -0
- package/dist/chunks/studio-myje51t3.js.map +12 -0
- package/dist/chunks/studio-na6rwzhw.js +353 -0
- package/dist/chunks/studio-na6rwzhw.js.map +11 -0
- package/dist/chunks/{studio-4k0m4fmp.js → studio-p471gg5n.js} +126 -3
- package/dist/chunks/studio-p471gg5n.js.map +14 -0
- package/dist/chunks/{studio-9bjwf0d4.js → studio-rgwcpast.js} +5 -46
- package/dist/chunks/{studio-9bjwf0d4.js.map → studio-rgwcpast.js.map} +4 -5
- package/dist/chunks/{studio-hhj92gcr.js → studio-s519zc99.js} +3 -3
- package/dist/chunks/studio-sas7mt3k.js +75 -0
- package/dist/chunks/studio-sas7mt3k.js.map +10 -0
- package/dist/chunks/studio-t5wqwzdh.js +74 -0
- package/dist/chunks/studio-t5wqwzdh.js.map +10 -0
- package/dist/chunks/{studio-9qpspwfn.js → studio-temv5bw4.js} +5 -5
- package/dist/chunks/{studio-9qpspwfn.js.map → studio-temv5bw4.js.map} +1 -1
- package/dist/chunks/{studio-qkvt37c0.js → studio-tr20m8g8.js} +669 -18
- package/dist/chunks/studio-tr20m8g8.js.map +9 -0
- package/dist/chunks/{studio-ygzav7z5.js → studio-v96qfnww.js} +5514 -4291
- package/dist/chunks/studio-v96qfnww.js.map +54 -0
- package/dist/chunks/studio-vcetc91k.js +659 -0
- package/dist/chunks/studio-vcetc91k.js.map +10 -0
- package/dist/chunks/{studio-n9zmpxjg.js → studio-vmymjefp.js} +2972 -4937
- package/dist/chunks/studio-vmymjefp.js.map +98 -0
- package/dist/chunks/{studio-bghqfmea.js → studio-wwseqyw0.js} +2 -2
- package/dist/chunks/studio-x9hmy5kr.js +390 -0
- package/dist/chunks/studio-x9hmy5kr.js.map +10 -0
- package/dist/chunks/studio-xa0ce0n7.js +335 -0
- package/dist/chunks/studio-xa0ce0n7.js.map +10 -0
- package/dist/chunks/studio-xm3dbxvn.js +378 -0
- package/dist/chunks/studio-xm3dbxvn.js.map +19 -0
- package/dist/chunks/{studio-nqw433kv.js → studio-xmvbhg31.js} +2 -2
- package/dist/chunks/studio-zv37yrfa.js +1054 -0
- package/dist/chunks/studio-zv37yrfa.js.map +13 -0
- package/dist/chunks/{ws-client-q7hkz3j9.js → ws-client-654ts66j.js} +6 -4
- package/dist/chunks/ws-client-654ts66j.js.map +11 -0
- package/dist/iframe-entry.js +668 -230
- package/dist/studio.js +23711 -35185
- package/index.html +35 -4685
- package/package.json +17 -15
- package/src/about/about-modal.ts +42 -11
- package/src/browse/library-commands.ts +240 -0
- package/src/browse/library-layouts.ts +369 -0
- package/src/browse/library-model.ts +396 -0
- package/src/browse/library-pane.ts +1049 -0
- package/src/browse/library-preview.ts +252 -0
- package/src/browse/library-source.ts +150 -0
- package/src/canvas/canvas-helpers.ts +33 -9
- package/src/canvas/canvas-live-render.ts +45 -29
- package/src/canvas/canvas-patcher.ts +151 -31
- package/src/canvas/canvas-perf.ts +46 -7
- package/src/canvas/canvas-render.ts +1092 -220
- package/src/canvas/canvas-surface.ts +240 -0
- package/src/canvas/canvas-utils.ts +1166 -124
- package/src/canvas/iframe-drop.ts +2 -1
- package/src/canvas/iframe-entry.ts +241 -4
- package/src/canvas/iframe-host.ts +1226 -143
- package/src/canvas/iframe-inline-edit.ts +31 -0
- package/src/canvas/iframe-interaction.ts +76 -16
- package/src/canvas/iframe-keys.ts +107 -45
- package/src/canvas/iframe-overlay.ts +38 -1
- package/src/canvas/iframe-protocol.ts +137 -2
- package/src/canvas/iframe-render.ts +70 -2
- package/src/canvas/iframe-slash.ts +6 -0
- package/src/canvas/path-mapping.ts +56 -6
- package/src/canvas/surface-registry.ts +292 -0
- package/src/collab/collab-commands.ts +244 -0
- package/src/collab/collab-session.ts +198 -32
- package/src/collab/collab-state.ts +28 -2
- package/src/collab/presence-chips.ts +100 -9
- package/src/commands/active-registry.ts +42 -0
- package/src/commands/app-commands.ts +176 -0
- package/src/commands/budget.ts +158 -0
- package/src/commands/command-args.ts +253 -0
- package/src/commands/context.ts +387 -0
- package/src/commands/defaults.ts +580 -0
- package/src/commands/keymap.ts +571 -0
- package/src/commands/levels.ts +345 -0
- package/src/commands/live-context.ts +193 -0
- package/src/commands/reference.ts +227 -0
- package/src/commands/registry.ts +293 -0
- package/src/component-props.ts +3 -2
- package/src/content/draft-state.ts +106 -0
- package/src/content/entry-commands.ts +282 -0
- package/src/content/entry-editor.ts +327 -0
- package/src/content/entry-fields.ts +116 -0
- package/src/content/entry-model.ts +175 -0
- package/src/editor/canvas-context-menu.ts +17 -11
- package/src/editor/canvas-slash-bridge.ts +11 -4
- package/src/editor/context-menu.ts +804 -204
- package/src/editor/convert-to-component.ts +31 -10
- package/src/editor/convert-to-repeater.ts +3 -2
- package/src/editor/inline-edit-apply.ts +5 -5
- package/src/editor/inline-edit.ts +86 -50
- package/src/editor/insert-zone-action.ts +1 -1
- package/src/editor/shortcuts.ts +1043 -329
- package/src/editor/slash-menu.ts +1 -0
- package/src/files/elements.ts +166 -0
- package/src/files/file-ops.ts +178 -31
- package/src/files/files.ts +898 -268
- package/src/files/fs-events.ts +21 -0
- package/src/files/media-meta.ts +203 -0
- package/src/files/media-paths.ts +141 -0
- package/src/files/media-upload.ts +7 -3
- package/src/files/media-usage.ts +189 -0
- package/src/github/github-auth.ts +235 -33
- package/src/github/github-publish.ts +80 -21
- package/src/grid/grid-controller.ts +152 -12
- package/src/grid/grid-layout.ts +225 -20
- package/src/grid/grid-open.ts +120 -0
- package/src/grid/grid-panel.ts +554 -39
- package/src/grid/grid-source.ts +27 -1
- package/src/grid/redirects-grid.ts +599 -0
- package/src/grid/redirects.ts +398 -0
- package/src/grid/sources/content-source.ts +108 -2
- package/src/i18n/i18n-commands.ts +322 -0
- package/src/new-project/add-repo-modal.ts +8 -10
- package/src/new-project/import-tab.ts +34 -9
- package/src/new-project/location-fields.ts +9 -1
- package/src/new-project/new-project-modal.ts +270 -262
- package/src/packages/jxsuite-update.ts +97 -48
- package/src/packages/pull-package-sync.ts +18 -9
- package/src/page-params.ts +2 -1
- package/src/panels/activity-bar.ts +152 -91
- package/src/panels/activity-panel.ts +481 -0
- package/src/panels/ai-chat/chat-markdown.ts +8 -3
- package/src/panels/ai-chat/chat-view.ts +245 -18
- package/src/panels/ai-chat/composer.ts +31 -5
- package/src/panels/ai-chat/sessions-view.ts +17 -10
- package/src/panels/ai-panel.ts +279 -120
- package/src/panels/block-action-bar.ts +1115 -224
- package/src/panels/bottom-dock.ts +337 -0
- package/src/panels/canvas-dnd-bridge.ts +37 -8
- package/src/panels/chat-panel.ts +29 -12
- package/src/panels/data-explorer.ts +254 -112
- package/src/panels/data-grid.ts +10 -4
- package/src/panels/dnd.ts +28 -51
- package/src/panels/editors.ts +434 -107
- package/src/panels/elements-panel.ts +66 -2
- package/src/panels/empty-state.ts +112 -0
- package/src/panels/events-panel.ts +596 -82
- package/src/panels/formula-workspace.ts +408 -218
- package/src/panels/frontmatter-fields.ts +51 -10
- package/src/panels/frontmatter-panel.ts +357 -79
- package/src/panels/git-panel.ts +375 -164
- package/src/panels/head-panel.ts +791 -85
- package/src/panels/i18n-panel.ts +592 -0
- package/src/panels/imports-panel.ts +95 -85
- package/src/panels/jump-bar.ts +584 -0
- package/src/panels/layers-panel.ts +1106 -328
- package/src/panels/left-panel.ts +109 -204
- package/src/panels/navigator-panels.ts +131 -0
- package/src/panels/overlays.ts +7 -2
- package/src/panels/pane-context.ts +1477 -0
- package/src/panels/pane-grid.ts +406 -0
- package/src/panels/panel-registry.ts +340 -0
- package/src/panels/panel-scheduler.ts +75 -0
- package/src/panels/problems-panel.ts +234 -0
- package/src/panels/properties-panel.ts +946 -1139
- package/src/panels/provenance.ts +258 -0
- package/src/panels/quick-search.ts +791 -122
- package/src/panels/right-panel.ts +228 -102
- package/src/panels/seo-modal.ts +395 -0
- package/src/panels/settings-pane.ts +203 -0
- package/src/panels/signals-panel.ts +354 -137
- package/src/panels/statement-editor.ts +41 -25
- package/src/panels/statusbar.ts +342 -106
- package/src/panels/style-panel.ts +974 -463
- package/src/panels/style-utils.ts +3 -3
- package/src/panels/stylebook-doc.ts +4 -2
- package/src/panels/stylebook-layers-panel.ts +3 -2
- package/src/panels/stylebook-panel.ts +51 -26
- package/src/panels/tab-strip.ts +1058 -78
- package/src/panels/target-line.ts +274 -0
- package/src/panels/toolbar.ts +631 -484
- package/src/panels/welcome-screen.ts +301 -198
- package/src/platform-errors.ts +26 -3
- package/src/platform.ts +96 -2
- package/src/platforms/cloud.ts +71 -8
- package/src/platforms/devserver.ts +92 -29
- package/src/publish/deploy-checklist.ts +383 -0
- package/src/publish/pages-service.ts +10 -1
- package/src/publish/publish-commands.ts +218 -0
- package/src/publish/publish-panel.ts +110 -16
- package/src/recent-projects.ts +3 -2
- package/src/services/a11y-report.ts +505 -0
- package/src/services/ai-models.ts +75 -2
- package/src/services/ai-project-tools.ts +29 -10
- package/src/services/ai-system-prompt.ts +53 -14
- package/src/services/ai-tools.ts +39 -3
- package/src/services/ai-writes.ts +154 -0
- package/src/services/announce.ts +97 -0
- package/src/services/automation.ts +424 -175
- package/src/services/cem-export.ts +9 -4
- package/src/services/clock.ts +61 -0
- package/src/services/document-assistant.ts +36 -8
- package/src/services/idle.ts +179 -0
- package/src/services/import-client.ts +26 -0
- package/src/services/monaco-buffer.ts +627 -0
- package/src/services/monaco-lazy.ts +36 -0
- package/src/services/notify.ts +271 -0
- package/src/services/profile.ts +155 -0
- package/src/services/references.ts +0 -0
- package/src/services/token-lint.ts +3 -2
- package/src/services/tool-executor.ts +53 -7
- package/src/services/trusted-types.ts +123 -0
- package/src/settings/contexts-section.ts +427 -0
- package/src/settings/contributed-section.ts +149 -11
- package/src/settings/css-vars-editor.ts +306 -349
- package/src/settings/defs-editor.ts +93 -34
- package/src/settings/dependencies-editor.ts +7 -7
- package/src/settings/extension-sections.ts +37 -5
- package/src/settings/general-settings.ts +204 -121
- package/src/settings/locales-section.ts +347 -0
- package/src/settings/preferences-accounts.ts +140 -0
- package/src/settings/preferences-dialog.ts +620 -0
- package/src/settings/preferences-keymap.ts +270 -0
- package/src/settings/project-sections.ts +260 -0
- package/src/settings/section-registry.ts +169 -0
- package/src/settings/settings-document.ts +385 -0
- package/src/shell.ts +1549 -0
- package/src/site-context.ts +45 -20
- package/src/state.ts +14 -275
- package/src/store.ts +88 -43
- package/src/studio.ts +790 -346
- package/src/style/live-preview.ts +36 -0
- package/src/style/project-styles.ts +349 -0
- package/src/style/token-ref.ts +123 -0
- package/src/tabs/patch-ops.ts +16 -4
- package/src/tabs/project-config.ts +416 -0
- package/src/tabs/selection.ts +323 -0
- package/src/tabs/tab.ts +182 -47
- package/src/tabs/transact.ts +209 -28
- package/src/types.ts +68 -13
- package/src/ui/ai-credentials-form.ts +39 -35
- package/src/ui/ai-managed-connect.ts +113 -0
- package/src/ui/dynamic-slot.ts +224 -81
- package/src/ui/expression-editor.ts +71 -63
- package/src/ui/field-input.ts +4 -6
- package/src/ui/field-row.ts +215 -38
- package/src/ui/form-controls.ts +194 -7
- package/src/ui/layers.ts +492 -69
- package/src/ui/media-picker.ts +115 -25
- package/src/ui/panel-resize.ts +109 -91
- package/src/ui/progress-modal.ts +131 -50
- package/src/ui/regions.ts +462 -0
- package/src/ui/schema-form.ts +229 -45
- package/src/ui/spectrum.ts +24 -8
- package/src/ui/timing.ts +49 -0
- package/src/ui/value-selector.ts +20 -0
- package/src/ui/value-source.ts +348 -0
- package/src/ui/virtual-window.ts +400 -0
- package/src/utils/edit-display.ts +3 -2
- package/src/utils/inherited-style.ts +67 -37
- package/src/view.ts +64 -78
- package/src/workspace/pane-derive.ts +1258 -0
- package/src/workspace/session.ts +317 -0
- package/src/workspace/workspace.ts +1345 -23
- package/styles/canvas.css +653 -0
- package/styles/forced-colors.css +106 -0
- package/styles/inspector.css +1454 -0
- package/styles/overlays.css +2704 -0
- package/styles/panels.css +1701 -0
- package/styles/shell.css +1423 -0
- package/styles/tokens.css +151 -0
- package/dist/chunks/Overlay.dev-cszx7yn5.js +0 -22
- package/dist/chunks/extension-sections-qct0gt8f.js +0 -531
- package/dist/chunks/extension-sections-qct0gt8f.js.map +0 -12
- package/dist/chunks/files-02zn5y24.js +0 -50
- package/dist/chunks/files-02zn5y24.js.map +0 -9
- package/dist/chunks/git-panel-mbb0y0hz.js +0 -28
- package/dist/chunks/git-panel-mbb0y0hz.js.map +0 -9
- package/dist/chunks/layers-panel-9qekmqk1.js +0 -26
- package/dist/chunks/layers-panel-9qekmqk1.js.map +0 -9
- package/dist/chunks/settings-modal-gj0hrah4.js +0 -29
- package/dist/chunks/settings-modal-gj0hrah4.js.map +0 -9
- package/dist/chunks/sp-overlay.dev-earn5as8.js +0 -17
- package/dist/chunks/sp-overlay.dev-earn5as8.js.map +0 -9
- package/dist/chunks/sp-popover.dev-frxtfejn.js +0 -8
- package/dist/chunks/sp-popover.dev-frxtfejn.js.map +0 -9
- package/dist/chunks/sp-progress-circle.dev-7tvw34h8.js +0 -14
- package/dist/chunks/sp-progress-circle.dev-7tvw34h8.js.map +0 -9
- package/dist/chunks/sp-tooltip.dev-a9fywesm.js +0 -21
- package/dist/chunks/sp-tooltip.dev-a9fywesm.js.map +0 -10
- package/dist/chunks/studio-4k0m4fmp.js.map +0 -13
- package/dist/chunks/studio-568nx4t5.js +0 -469
- package/dist/chunks/studio-568nx4t5.js.map +0 -14
- package/dist/chunks/studio-9smfzqhc.js +0 -19
- package/dist/chunks/studio-9smfzqhc.js.map +0 -10
- package/dist/chunks/studio-asvf0j9e.js +0 -429
- package/dist/chunks/studio-asvf0j9e.js.map +0 -13
- package/dist/chunks/studio-d77qm3pk.js +0 -3427
- package/dist/chunks/studio-d77qm3pk.js.map +0 -26
- package/dist/chunks/studio-j6gqyjf4.js +0 -1854
- package/dist/chunks/studio-j6gqyjf4.js.map +0 -18
- package/dist/chunks/studio-n9zmpxjg.js.map +0 -115
- package/dist/chunks/studio-qkvt37c0.js.map +0 -9
- package/dist/chunks/studio-rq0vxb19.js +0 -3744
- package/dist/chunks/studio-rq0vxb19.js.map +0 -22
- package/dist/chunks/studio-wd6ewdvd.js +0 -853
- package/dist/chunks/studio-wd6ewdvd.js.map +0 -12
- package/dist/chunks/studio-xq0t7n5t.js +0 -140
- package/dist/chunks/studio-xq0t7n5t.js.map +0 -10
- package/dist/chunks/studio-xze4zrs1.js.map +0 -10
- package/dist/chunks/studio-ygzav7z5.js.map +0 -46
- package/dist/chunks/studio-zmy7241e.js +0 -399
- package/dist/chunks/studio-zmy7241e.js.map +0 -12
- package/dist/chunks/ws-client-q7hkz3j9.js.map +0 -11
- package/src/browse/browse-modal.ts +0 -69
- package/src/browse/browse.ts +0 -904
- package/src/canvas/canvas-diff.ts +0 -216
- package/src/canvas/nested-site-style.ts +0 -58
- package/src/new-project/design-fields.ts +0 -264
- package/src/new-project/templates.ts +0 -61
- package/src/panels/tab-bar.ts +0 -548
- package/src/settings/settings-modal.ts +0 -203
- /package/dist/chunks/{adapter-z8fkmbmv.js.map → adapter-qfnesn5v.js.map} +0 -0
- /package/dist/chunks/{cf-settings-mmyv436d.js.map → cf-settings-73sh5z4p.js.map} +0 -0
- /package/dist/chunks/{format-host-2c188n41.js.map → format-host-mkwsmt8d.js.map} +0 -0
- /package/dist/chunks/{jx-validate-qx8degj7.js.map → jx-validate-v6qgknrs.js.map} +0 -0
- /package/dist/chunks/{studio-w7c6kvk7.js.map → studio-a7pzveq1.js.map} +0 -0
- /package/dist/chunks/{studio-hhj92gcr.js.map → studio-s519zc99.js.map} +0 -0
- /package/dist/chunks/{studio-bghqfmea.js.map → studio-wwseqyw0.js.map} +0 -0
- /package/dist/chunks/{studio-nqw433kv.js.map → studio-xmvbhg31.js.map} +0 -0
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
/**
|
|
3
|
+
* Project Settings — a **document**, not a modal.
|
|
4
|
+
*
|
|
5
|
+
* Its predecessor (`settings-modal.ts`) was an `inset: 40px` overlay with a scrim, which meant that
|
|
6
|
+
* while you tuned a design token that pushes live to the canvas, the canvas was behind the thing
|
|
7
|
+
* you were tuning it in, ⌘S/⌘Z/⌘P were suspended, and "Open Data Grid" opened a tab you could not
|
|
8
|
+
* see. Plan §9.3 replaces it with a document in the pane whose sections are INNER NAV: Overview ·
|
|
9
|
+
* Contexts · Site head · CSS Variables · Definitions · Content types · Packages · Extensions ·
|
|
10
|
+
* Deploy · Raw JSON.
|
|
11
|
+
*
|
|
12
|
+
* **The document is the `project.json` tab.** P6.1 made `project.json` a real Tab under the
|
|
13
|
+
* transaction log with one write chokepoint (`tabs/project-config.ts`); this module opens that same
|
|
14
|
+
* tab — same id, same document object — in the `settings` canvas mode. So the settings form, the
|
|
15
|
+
* Project Styles catalogue and the raw JSON are three editors over ONE document, and undo, the
|
|
16
|
+
* dirty flag and ⌘S are the ordinary document verbs rather than three bespoke ones. That is the
|
|
17
|
+
* whole of P6.1's disclosed residual ("⌘Z reaches config history only when the `project.json` tab
|
|
18
|
+
* is focused"): the settings surface now IS that tab.
|
|
19
|
+
*
|
|
20
|
+
* **`settings.open` did not change what it means.** §13.7 makes this phase's deliverable a
|
|
21
|
+
* near-zero manifest diff: the command still means "reach project settings, optionally at a named
|
|
22
|
+
* section", its args schema still declares `section`, and every shot step that names it is
|
|
23
|
+
* untouched. What changed is the `run` — a Tab instead of a modal — and the frame the seven region
|
|
24
|
+
* crops are taken in.
|
|
25
|
+
*
|
|
26
|
+
* @docs studio/projects/settings
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
import { errorMessage } from "@jxsuite/schema/parse";
|
|
30
|
+
import { optionalStringArg, stringProperty } from "../commands/command-args";
|
|
31
|
+
import { notify } from "../services/notify";
|
|
32
|
+
import { requireProjectState } from "../state";
|
|
33
|
+
import { PROJECT_CONFIG_PATH } from "../tabs/tab";
|
|
34
|
+
import { activeTab, focusPane, openTab, workspace } from "../workspace/workspace";
|
|
35
|
+
import {
|
|
36
|
+
notifySettingsDocument,
|
|
37
|
+
registerSettingsSection,
|
|
38
|
+
settingsDocumentSection,
|
|
39
|
+
setSettingsSection,
|
|
40
|
+
settingsSectionKeys,
|
|
41
|
+
} from "./section-registry";
|
|
42
|
+
import { renderContextsSection } from "./contexts-section";
|
|
43
|
+
import { renderCssVarsEditor } from "./css-vars-editor";
|
|
44
|
+
import { renderDefsEditor } from "./defs-editor";
|
|
45
|
+
import { renderDependenciesEditor } from "./dependencies-editor";
|
|
46
|
+
import {
|
|
47
|
+
renderDeploySection,
|
|
48
|
+
renderExtensionsSection,
|
|
49
|
+
renderRawJsonSection,
|
|
50
|
+
} from "./project-sections";
|
|
51
|
+
import { renderGeneralSettings } from "./general-settings";
|
|
52
|
+
import { renderHeadEditor } from "./head-editor";
|
|
53
|
+
import { renderLocalesSection } from "./locales-section";
|
|
54
|
+
import { selectContributedEntry } from "./contributed-section";
|
|
55
|
+
import type { Tab } from "../tabs/tab";
|
|
56
|
+
import type { AnyCommand, CommandRegistry } from "../commands/registry";
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* The canvas mode the settings editor draws under.
|
|
60
|
+
*
|
|
61
|
+
* `project.json` already declared `["stylebook", "source"]` (`tabs/tab.ts`'s `inferModes`); this is
|
|
62
|
+
* the third editor over the same document and it leads, because reaching configuration through a
|
|
63
|
+
* form is what "Settings" means to everyone who is not reading the file.
|
|
64
|
+
*/
|
|
65
|
+
export const SETTINGS_MODE = "settings";
|
|
66
|
+
|
|
67
|
+
/** The tab's mode list when Project Settings opens it. Settings first, so it is the initial mode. */
|
|
68
|
+
const SETTINGS_TAB_MODES = [SETTINGS_MODE, "stylebook", "source"];
|
|
69
|
+
|
|
70
|
+
// ─── Built-in sections ────────────────────────────────────────────────────────
|
|
71
|
+
/* Orders leave gaps so a contribution can land between two built-ins. Content Types is NOT here —
|
|
72
|
+
the parser extension contributes it (order 50) through its Content class descriptor's
|
|
73
|
+
`$studio.settings` block, registered via ./extension-sections, which is the same path any
|
|
74
|
+
extension's section takes. */
|
|
75
|
+
|
|
76
|
+
registerSettingsSection({
|
|
77
|
+
icon: "sp-icon-properties",
|
|
78
|
+
key: "overview",
|
|
79
|
+
label: "Overview",
|
|
80
|
+
order: 10,
|
|
81
|
+
render: renderGeneralSettings,
|
|
82
|
+
});
|
|
83
|
+
/*
|
|
84
|
+
* Contexts sits directly under Overview because it is the project's second identity: Overview says
|
|
85
|
+
* what the site IS, Contexts says what it is rendered UNDER. It is a definition site only — the
|
|
86
|
+
* pane context bar selects among what is defined here, and its "Manage contexts…" footer names this
|
|
87
|
+
* key (plan §4.2, §2 principle 5). P6.3 is a RE-HOST: the section shipped in P4 through this same
|
|
88
|
+
* registry and moves into the document's inner nav without its renderer being touched.
|
|
89
|
+
*/
|
|
90
|
+
registerSettingsSection({
|
|
91
|
+
icon: "sp-icon-device-desktop",
|
|
92
|
+
key: "contexts",
|
|
93
|
+
label: "Contexts",
|
|
94
|
+
order: 15,
|
|
95
|
+
render: renderContextsSection,
|
|
96
|
+
});
|
|
97
|
+
registerSettingsSection({
|
|
98
|
+
icon: "sp-icon-file-single-web-page",
|
|
99
|
+
key: "head",
|
|
100
|
+
label: "Site head",
|
|
101
|
+
order: 20,
|
|
102
|
+
render: renderHeadEditor,
|
|
103
|
+
});
|
|
104
|
+
/*
|
|
105
|
+
* Locales sits under Site head because both are facts about the whole site's HEAD rather than about
|
|
106
|
+
* one page: `<html lang>` and `<html dir>` are what a locale decides, and the routing choice below
|
|
107
|
+
* them decides what a page's URL looks like. It is also the definition site the pane's language
|
|
108
|
+
* control, the Languages panel and `i18n.addLocale` all read — there is one `i18n.locales` and this
|
|
109
|
+
* is the form over it.
|
|
110
|
+
*/
|
|
111
|
+
registerSettingsSection({
|
|
112
|
+
icon: "sp-icon-globe",
|
|
113
|
+
key: "locales",
|
|
114
|
+
label: "Locales",
|
|
115
|
+
order: 25,
|
|
116
|
+
render: renderLocalesSection,
|
|
117
|
+
});
|
|
118
|
+
/*
|
|
119
|
+
* CSS Variables is the one section §12 P6.2 does not list, and it stays until P6.4 lands the
|
|
120
|
+
* Project Styles document that is to absorb it. Deleting it here would take the project's design
|
|
121
|
+
* tokens off every surface for the length of one phase — and `css-variables-shot` addresses this
|
|
122
|
+
* key by name.
|
|
123
|
+
*/
|
|
124
|
+
registerSettingsSection({
|
|
125
|
+
icon: "sp-icon-brush",
|
|
126
|
+
key: "cssVars",
|
|
127
|
+
label: "CSS Variables",
|
|
128
|
+
order: 30,
|
|
129
|
+
render: renderCssVarsEditor,
|
|
130
|
+
});
|
|
131
|
+
registerSettingsSection({
|
|
132
|
+
icon: "sp-icon-data",
|
|
133
|
+
key: "definitions",
|
|
134
|
+
label: "Data Shapes",
|
|
135
|
+
order: 40,
|
|
136
|
+
render: renderDefsEditor,
|
|
137
|
+
});
|
|
138
|
+
registerSettingsSection({
|
|
139
|
+
icon: "sp-icon-box",
|
|
140
|
+
key: "dependencies",
|
|
141
|
+
label: "Packages",
|
|
142
|
+
order: 60,
|
|
143
|
+
render: renderDependenciesEditor,
|
|
144
|
+
});
|
|
145
|
+
registerSettingsSection({
|
|
146
|
+
icon: "sp-icon-plug",
|
|
147
|
+
key: "extensions",
|
|
148
|
+
label: "Extensions",
|
|
149
|
+
order: 70,
|
|
150
|
+
render: renderExtensionsSection,
|
|
151
|
+
});
|
|
152
|
+
registerSettingsSection({
|
|
153
|
+
icon: "sp-icon-publish-check",
|
|
154
|
+
key: "deploy",
|
|
155
|
+
label: "Deploy",
|
|
156
|
+
order: 80,
|
|
157
|
+
render: renderDeploySection,
|
|
158
|
+
});
|
|
159
|
+
registerSettingsSection({
|
|
160
|
+
icon: "sp-icon-code",
|
|
161
|
+
key: "rawJson",
|
|
162
|
+
label: "Raw JSON",
|
|
163
|
+
order: 900,
|
|
164
|
+
render: renderRawJsonSection,
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
// ─── Where the settings editor is ────────────────────────────────────────────
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Which section the settings document is showing, or `null` when it is not the active editor.
|
|
171
|
+
*
|
|
172
|
+
* @returns {string | null}
|
|
173
|
+
*/
|
|
174
|
+
export function activeSettingsSection(): string | null {
|
|
175
|
+
return settingsDocumentOpen() ? settingsDocumentSection() : null;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/** Whether the active tab is the configuration document in its settings editor. */
|
|
179
|
+
export function settingsDocumentOpen(): boolean {
|
|
180
|
+
const tab = activeTab.value as Tab | null;
|
|
181
|
+
return tab?.documentPath === PROJECT_CONFIG_PATH && tab.session.ui.canvasMode === SETTINGS_MODE;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// ─── The document ─────────────────────────────────────────────────────────────
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Open (or reveal) the configuration document in its settings editor.
|
|
188
|
+
*
|
|
189
|
+
* The tab is keyed by `project.json` on purpose: opening the file from the Files tree and opening
|
|
190
|
+
* Settings reach the same tab, the same history and the same dirty flag. When it is already open
|
|
191
|
+
* this only switches the editor, so an author who was reading the raw JSON keeps their undo stack.
|
|
192
|
+
*
|
|
193
|
+
* @returns {Tab | null} The tab, or null when no project is open
|
|
194
|
+
*/
|
|
195
|
+
export function showSettingsDocument(): Tab | null {
|
|
196
|
+
const state = requireProjectState();
|
|
197
|
+
if (!state) {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
const existing = workspace.tabs.get(PROJECT_CONFIG_PATH);
|
|
201
|
+
if (existing) {
|
|
202
|
+
for (const mode of SETTINGS_TAB_MODES) {
|
|
203
|
+
if (!existing.capabilities.modes.includes(mode)) {
|
|
204
|
+
existing.capabilities.modes.unshift(mode);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
existing.session.ui.canvasMode = SETTINGS_MODE;
|
|
208
|
+
existing.session.ui.preview = false;
|
|
209
|
+
return revealTab(existing as unknown as Tab);
|
|
210
|
+
}
|
|
211
|
+
return openTab({
|
|
212
|
+
capabilities: { modes: [...SETTINGS_TAB_MODES] },
|
|
213
|
+
document: (state.projectConfig ?? {}) as unknown as Record<string, unknown>,
|
|
214
|
+
documentPath: PROJECT_CONFIG_PATH,
|
|
215
|
+
id: PROJECT_CONFIG_PATH,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Make an already-open tab the active one without rebuilding it.
|
|
221
|
+
*
|
|
222
|
+
* `openTab` recreates the tab from scratch, which would discard the configuration document's
|
|
223
|
+
* history — the one thing this phase exists to give it.
|
|
224
|
+
*
|
|
225
|
+
* @param {Tab} tab
|
|
226
|
+
* @returns {Tab}
|
|
227
|
+
*/
|
|
228
|
+
function revealTab(tab: Tab): Tab {
|
|
229
|
+
for (const pane of workspace.panes) {
|
|
230
|
+
if (pane.tabOrder.includes(tab.id)) {
|
|
231
|
+
pane.activeTabId = tab.id;
|
|
232
|
+
/* `focusPane`, not `workspace.activePaneId = pane.id`. Moving the keyboard is four
|
|
233
|
+
operations, and the assignment is one of them: the other three are `resetTabCycle` (so
|
|
234
|
+
Ctrl-Tab cycles from where you now are, not from the pane you left), `promoteMru` (so the
|
|
235
|
+
MRU order agrees with what is on screen) and `syncTreeSelection` (so the file tree points
|
|
236
|
+
at the document you are looking at). Reopening Project Settings into the side pane left
|
|
237
|
+
all three describing the pane it had come from. */
|
|
238
|
+
focusPane(pane.id);
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return tab;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Reach Project Settings, optionally at a named section.
|
|
247
|
+
*
|
|
248
|
+
* Awaits the contributed-section sync before returning, so a caller that then asks whether a
|
|
249
|
+
* section exists is asking the complete registry. The sync is COALESCED (`extension-sections.ts`),
|
|
250
|
+
* which is the second half of the deep-link fix: `refreshExtensionUi` fires the same function on
|
|
251
|
+
* project activation and after every `project.json` write, and the modal started a second,
|
|
252
|
+
* interleaved run whose unregister pass could take the caller's section down between the promise
|
|
253
|
+
* resolving and the frame being drawn.
|
|
254
|
+
*
|
|
255
|
+
* @param {string} [section]
|
|
256
|
+
*/
|
|
257
|
+
export async function openProjectSettings(section?: string): Promise<void> {
|
|
258
|
+
if (section !== undefined) {
|
|
259
|
+
setSettingsSection(section);
|
|
260
|
+
}
|
|
261
|
+
showSettingsDocument();
|
|
262
|
+
notifySettingsDocument();
|
|
263
|
+
try {
|
|
264
|
+
const { syncExtensionSettingsSections } = await import("./extension-sections");
|
|
265
|
+
await syncExtensionSettingsSections();
|
|
266
|
+
} catch (error) {
|
|
267
|
+
/* Contributed sections are optional — the built-ins render regardless — but a contribution that
|
|
268
|
+
will not load is a broken extension, and §7.2 says a thing that must be fixed and is about a
|
|
269
|
+
named file is a Problem rather than a toast that erases itself. */
|
|
270
|
+
notify.warn(`Could not load extension settings sections — ${errorMessage(error)}`, {
|
|
271
|
+
key: "settings:sections",
|
|
272
|
+
path: PROJECT_CONFIG_PATH,
|
|
273
|
+
source: "Settings",
|
|
274
|
+
tier: "problem",
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
notifySettingsDocument();
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/** Await the contributed-section sync — the readiness `probe.idle()` and the command both need. */
|
|
281
|
+
export async function settingsSectionsReady(): Promise<void> {
|
|
282
|
+
const { extensionSectionsReady } = await import("./extension-sections");
|
|
283
|
+
await extensionSectionsReady();
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// ─── Commands ─────────────────────────────────────────────────────────────────
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* Open Project Settings — optionally on a named section, optionally at a named entry.
|
|
290
|
+
*
|
|
291
|
+
* **This one record replaces four manifest verbs**: `openSettings`, `openSettings {section}`,
|
|
292
|
+
* `settings.setSection` and the five `input: type` steps that clicked an entry row by region id.
|
|
293
|
+
* The third was refused outright by plan §13.3 because its press-shim mirrored the section
|
|
294
|
+
* registry's LABELS in a hand-kept map; the fourth was raw input standing in for a verb that did
|
|
295
|
+
* not exist ("`settings.selectEntry` has no command record", `until: "P6.2"`). Sections have KEYS
|
|
296
|
+
* and map-layout sections have ENTRY keys; this names both, so the manifest's input-step budget
|
|
297
|
+
* falls by five and its unstable budget by five without one `settings.open` step changing.
|
|
298
|
+
*
|
|
299
|
+
* The validation is deliberately asynchronous. Extension-contributed sections (`connections`,
|
|
300
|
+
* `data`, `content`) register a tick after the document opens, so refusing synchronously would
|
|
301
|
+
* reject three legitimate section ids; the command opens, awaits the sync, and only then decides
|
|
302
|
+
* whether the caller named something real. A wrong key therefore fails the step instead of
|
|
303
|
+
* rendering an empty content pane — which is exactly what `css-variables` (the key is `cssVars`)
|
|
304
|
+
* has been doing.
|
|
305
|
+
*
|
|
306
|
+
* @returns {AnyCommand[]}
|
|
307
|
+
*/
|
|
308
|
+
export function settingsCommands(): AnyCommand[] {
|
|
309
|
+
return [
|
|
310
|
+
{
|
|
311
|
+
args: {
|
|
312
|
+
additionalProperties: false,
|
|
313
|
+
properties: {
|
|
314
|
+
entry: stringProperty(
|
|
315
|
+
"An entry key inside the named section (map-layout sections only), e.g. a content " +
|
|
316
|
+
"type or a data connection.",
|
|
317
|
+
),
|
|
318
|
+
section: stringProperty(
|
|
319
|
+
"The settings section key to show. Defaults to Overview on a fresh open.",
|
|
320
|
+
),
|
|
321
|
+
},
|
|
322
|
+
required: [],
|
|
323
|
+
type: "object",
|
|
324
|
+
},
|
|
325
|
+
category: "Project",
|
|
326
|
+
id: "settings.open",
|
|
327
|
+
level: "project",
|
|
328
|
+
// ⌘⇧, — the other half of §5.3's `⌘, / ⌘⇧,` pair. `app.preferences` shipped with its chord
|
|
329
|
+
// And this one did not, so the two halves of "settings" were a keystroke and a palette search.
|
|
330
|
+
keybinding: "mod+shift+,",
|
|
331
|
+
menus: ["commandbar/overflow", "palette"],
|
|
332
|
+
group: "7_settings",
|
|
333
|
+
requires: "an open project",
|
|
334
|
+
when: (ctx) => ctx.project.open,
|
|
335
|
+
aiTool: {
|
|
336
|
+
description:
|
|
337
|
+
"Open the project's Settings, optionally on a named section (overview, contexts, head, " +
|
|
338
|
+
"locales, cssVars, definitions, dependencies, extensions, deploy, rawJson, or a section " +
|
|
339
|
+
"an extension contributes) and optionally at a named entry within it.",
|
|
340
|
+
name: "open_settings",
|
|
341
|
+
},
|
|
342
|
+
run: async (_commandCtx, args) => {
|
|
343
|
+
const section = optionalStringArg("settings.open", args, "section");
|
|
344
|
+
const entry = optionalStringArg("settings.open", args, "entry");
|
|
345
|
+
await openProjectSettings(section);
|
|
346
|
+
if (section === undefined) {
|
|
347
|
+
if (entry !== undefined) {
|
|
348
|
+
throw new RangeError(
|
|
349
|
+
'command "settings.open" argument "entry" needs a "section" to name an entry of',
|
|
350
|
+
);
|
|
351
|
+
}
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
const keys = settingsSectionKeys();
|
|
355
|
+
if (!keys.includes(section)) {
|
|
356
|
+
throw new RangeError(
|
|
357
|
+
`command "settings.open" argument "section": "${section}" is not a registered ` +
|
|
358
|
+
`settings section — registered: ${keys.join(", ")}`,
|
|
359
|
+
);
|
|
360
|
+
}
|
|
361
|
+
if (entry === undefined) {
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
const entries = selectContributedEntry(section, entry);
|
|
365
|
+
if (entries !== null) {
|
|
366
|
+
throw new RangeError(
|
|
367
|
+
`command "settings.open" argument "entry": "${entry}" is not an entry of settings ` +
|
|
368
|
+
`section "${section}" — entries: ${entries.join(", ") || "none"}`,
|
|
369
|
+
);
|
|
370
|
+
}
|
|
371
|
+
notifySettingsDocument();
|
|
372
|
+
},
|
|
373
|
+
title: "Open Settings",
|
|
374
|
+
},
|
|
375
|
+
];
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* Register the settings verb.
|
|
380
|
+
*
|
|
381
|
+
* @param {CommandRegistry} registry
|
|
382
|
+
*/
|
|
383
|
+
export function registerSettingsCommands(registry: CommandRegistry): void {
|
|
384
|
+
registry.registerAll(settingsCommands());
|
|
385
|
+
}
|