@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,151 @@
|
|
|
1
|
+
/* Jx Studio — design tokens and global base.
|
|
2
|
+
MUST load first: every other styles/*.css file resolves var(--bg),
|
|
3
|
+
var(--fg), var(--accent), var(--font-mono), var(--radius) and the
|
|
4
|
+
--canvas-* ramp declared here.
|
|
5
|
+
|
|
6
|
+
Owns: the vendored @font-face declarations, the box-sizing reset,
|
|
7
|
+
html/body, the :root panel-width variables and the sp-theme semantic
|
|
8
|
+
token layer. */
|
|
9
|
+
|
|
10
|
+
/* Jx brand mono font, vendored in ./fonts (SIL OFL 1.1, see fonts/OFL.txt).
|
|
11
|
+
Latin subset only; the stack falls back to SF Mono / Fira Code for
|
|
12
|
+
other scripts. Monaco remeasures after load (src/services/monaco-setup.ts). */
|
|
13
|
+
@font-face {
|
|
14
|
+
font-family: "JetBrains Mono";
|
|
15
|
+
font-style: normal;
|
|
16
|
+
font-weight: 400;
|
|
17
|
+
font-display: swap;
|
|
18
|
+
src: url("../fonts/jetbrains-mono-400.woff2") format("woff2");
|
|
19
|
+
}
|
|
20
|
+
@font-face {
|
|
21
|
+
font-family: "JetBrains Mono";
|
|
22
|
+
font-style: normal;
|
|
23
|
+
font-weight: 500;
|
|
24
|
+
font-display: swap;
|
|
25
|
+
src: url("../fonts/jetbrains-mono-500.woff2") format("woff2");
|
|
26
|
+
}
|
|
27
|
+
@font-face {
|
|
28
|
+
font-family: "JetBrains Mono";
|
|
29
|
+
font-style: normal;
|
|
30
|
+
font-weight: 700;
|
|
31
|
+
font-display: swap;
|
|
32
|
+
src: url("../fonts/jetbrains-mono-700.woff2") format("woff2");
|
|
33
|
+
}
|
|
34
|
+
*,
|
|
35
|
+
*::before,
|
|
36
|
+
*::after {
|
|
37
|
+
box-sizing: border-box;
|
|
38
|
+
margin: 0;
|
|
39
|
+
}
|
|
40
|
+
sp-tab:not(:first-of-type) {
|
|
41
|
+
margin-inline-start: var(--mod-tabs-item-horizontal-spacing, 8px);
|
|
42
|
+
}
|
|
43
|
+
html,
|
|
44
|
+
body {
|
|
45
|
+
height: 100%;
|
|
46
|
+
overflow: hidden;
|
|
47
|
+
/* html/body sit outside <sp-theme>, so the --spectrum-* tokens are not
|
|
48
|
+
in scope here; the hex fallback is the intentional pre-theme backdrop
|
|
49
|
+
shown behind the app before sp-theme fills the viewport. */
|
|
50
|
+
background: var(--spectrum-background-layer-1-color, #111111);
|
|
51
|
+
}
|
|
52
|
+
/* Panel layout widths. These must live on :root (the <html> element),
|
|
53
|
+
not on sp-theme or #app, because the resize logic in
|
|
54
|
+
src/ui/panel-resize.ts reads and writes them as inline styles on
|
|
55
|
+
document.documentElement. A definition on any closer ancestor of #app
|
|
56
|
+
(sp-theme or body) would shadow that inline override and freeze the
|
|
57
|
+
sidebars. The #app.left/right-collapsed rules override per instance. */
|
|
58
|
+
:root {
|
|
59
|
+
--panel-w-left: 240px;
|
|
60
|
+
--panel-w-right: 280px;
|
|
61
|
+
}
|
|
62
|
+
/* Studio semantic token layer.
|
|
63
|
+
Declared on sp-theme — not :root — so each var(--spectrum-*) reference
|
|
64
|
+
resolves against the tokens sp-theme exposes via its :host rules. At
|
|
65
|
+
:root (the <html> ancestor of sp-theme) every --spectrum-* is undefined,
|
|
66
|
+
so these would silently collapse to the hex fallback and the app would
|
|
67
|
+
never respond to the Spectrum theme. All studio chrome, including the
|
|
68
|
+
#layer-* overlay hosts, lives inside <sp-theme>. */
|
|
69
|
+
sp-theme {
|
|
70
|
+
display: block;
|
|
71
|
+
height: 100%;
|
|
72
|
+
/* Surfaces. The hex fallbacks mirror the Jx brand ramp installed by
|
|
73
|
+
the 'app' theme fragment (src/ui/jx-theme.ts). */
|
|
74
|
+
--bg: var(--spectrum-background-layer-1-color, #111111);
|
|
75
|
+
--bg-panel: var(--spectrum-background-layer-2-color, #1a1a1a);
|
|
76
|
+
--bg-input: var(--spectrum-gray-100, #1a1a1a);
|
|
77
|
+
--border: var(--spectrum-gray-200, #222222);
|
|
78
|
+
/* Text */
|
|
79
|
+
--fg: var(--spectrum-neutral-content-color-default, #e4e4e7);
|
|
80
|
+
--fg-dim: var(--spectrum-gray-600, #a1a1aa);
|
|
81
|
+
/* Accent and status. Under the brand ramp (src/ui/jx-theme.ts),
|
|
82
|
+
accent-color-700 is the exact Jx brand blue and 900 is the soft
|
|
83
|
+
on-dark tint. */
|
|
84
|
+
--accent: var(--spectrum-accent-color-700, #3b82f6);
|
|
85
|
+
--accent-fg: var(--spectrum-white, #ffffff);
|
|
86
|
+
--danger: var(--spectrum-negative-color-900, #f44747);
|
|
87
|
+
--success: var(--spectrum-positive-color-900, #89d185);
|
|
88
|
+
--tag: var(--spectrum-informative-color-900, #93c5fd);
|
|
89
|
+
--signal: var(--spectrum-notice-color-900, #dcdcaa);
|
|
90
|
+
--handler: var(--spectrum-purple-900, #c586c0);
|
|
91
|
+
--warning: var(--spectrum-orange-900, #c5a332);
|
|
92
|
+
--map: var(--spectrum-indigo-900, #5b4fc7);
|
|
93
|
+
--slot-c: var(--spectrum-seafoam-900, #1a8a7a);
|
|
94
|
+
--switch-c: var(--danger);
|
|
95
|
+
--case-c: var(--spectrum-informative-color-800, #60a5fa);
|
|
96
|
+
/* Corner radius */
|
|
97
|
+
--radius: var(--spectrum-corner-radius-100, 3px);
|
|
98
|
+
/* Monospace stack for code/source chrome. JetBrains Mono is the Jx
|
|
99
|
+
brand mono (vendored in ./fonts); SF Mono / Fira Code remain as
|
|
100
|
+
system fallbacks ahead of the Spectrum stack (Source Code Pro /
|
|
101
|
+
Monaco). The brand fragment sets the same order on
|
|
102
|
+
--spectrum-code-font-family-stack for SWC components. */
|
|
103
|
+
--font-mono:
|
|
104
|
+
"JetBrains Mono", "SF Mono", "Fira Code", var(--spectrum-code-font-family-stack, monospace);
|
|
105
|
+
/* Hover wash and accent tints */
|
|
106
|
+
--hover-bg: rgba(255, 255, 255, 0.04);
|
|
107
|
+
--accent-8: color-mix(in srgb, var(--accent) 8%, transparent);
|
|
108
|
+
--accent-10: color-mix(in srgb, var(--accent) 10%, transparent);
|
|
109
|
+
--accent-15: color-mix(in srgb, var(--accent) 15%, transparent);
|
|
110
|
+
--accent-20: color-mix(in srgb, var(--accent) 20%, transparent);
|
|
111
|
+
--accent-50: color-mix(in srgb, var(--accent) 50%, transparent);
|
|
112
|
+
/* Light canvas palette (stylebook, block/element previews, content
|
|
113
|
+
mode). These surfaces always render as a light "document" regardless
|
|
114
|
+
of the app chrome, so the ramp is derived from the theme-independent
|
|
115
|
+
Spectrum white/black tokens via color-mix rather than hard-coded hex.
|
|
116
|
+
The percentage is the black (foreground) or white (background) blend
|
|
117
|
+
of each step; this keeps the canvas light even in the dark chrome
|
|
118
|
+
while still being Spectrum-sourced. */
|
|
119
|
+
--canvas-fg: color-mix(in srgb, var(--spectrum-black, #000) 90%, var(--spectrum-white, #fff));
|
|
120
|
+
--canvas-fg-2: color-mix(in srgb, var(--spectrum-black, #000) 80%, var(--spectrum-white, #fff));
|
|
121
|
+
--canvas-fg-3: color-mix(in srgb, var(--spectrum-black, #000) 67%, var(--spectrum-white, #fff));
|
|
122
|
+
--canvas-dim: color-mix(in srgb, var(--spectrum-black, #000) 47%, var(--spectrum-white, #fff));
|
|
123
|
+
--canvas-muted: color-mix(in srgb, var(--spectrum-black, #000) 40%, var(--spectrum-white, #fff));
|
|
124
|
+
--canvas-light: color-mix(in srgb, var(--spectrum-black, #000) 27%, var(--spectrum-white, #fff));
|
|
125
|
+
--canvas-border: color-mix(in srgb, var(--spectrum-black, #000) 13%, var(--spectrum-white, #fff));
|
|
126
|
+
--canvas-rule: color-mix(in srgb, var(--spectrum-black, #000) 7%, var(--spectrum-white, #fff));
|
|
127
|
+
--canvas-bg-1: color-mix(in srgb, var(--spectrum-white, #fff) 96%, var(--spectrum-black, #000));
|
|
128
|
+
--canvas-bg-2: color-mix(in srgb, var(--spectrum-white, #fff) 94%, var(--spectrum-black, #000));
|
|
129
|
+
--canvas-track: color-mix(in srgb, var(--spectrum-white, #fff) 88%, var(--spectrum-black, #000));
|
|
130
|
+
/* Data explorer syntax colors (mapped to nearest Spectrum hues) */
|
|
131
|
+
--data-key: var(--spectrum-blue-700, #3b82f6);
|
|
132
|
+
--data-string: var(--spectrum-orange-700, #ce9178);
|
|
133
|
+
--data-number: var(--spectrum-celery-700, #b5cea8);
|
|
134
|
+
--data-boolean: var(--tag);
|
|
135
|
+
/* Typography — align the chrome with the Spectrum sans stack used by
|
|
136
|
+
the SWC components; 12px maps exactly to font-size-75. line-height
|
|
137
|
+
stays 1.5 (a deliberate reading height; the Spectrum body token is
|
|
138
|
+
1.3, which would tighten the whole UI). */
|
|
139
|
+
color: var(--fg);
|
|
140
|
+
background: var(--bg);
|
|
141
|
+
font-family: var(
|
|
142
|
+
--spectrum-sans-font-family-stack,
|
|
143
|
+
-apple-system,
|
|
144
|
+
BlinkMacSystemFont,
|
|
145
|
+
"Segoe UI",
|
|
146
|
+
system-ui,
|
|
147
|
+
sans-serif
|
|
148
|
+
);
|
|
149
|
+
font-size: var(--spectrum-font-size-75, 12px);
|
|
150
|
+
line-height: 1.5;
|
|
151
|
+
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
LONGPRESS_INSTRUCTIONS,
|
|
3
|
-
Overlay
|
|
4
|
-
} from "./studio-5x6tqqec.js";
|
|
5
|
-
import"./studio-ahnzd9rg.js";
|
|
6
|
-
import"./studio-9bjwf0d4.js";
|
|
7
|
-
import"./studio-z6nw2ek2.js";
|
|
8
|
-
import"./studio-8q517dfr.js";
|
|
9
|
-
import"./studio-9qr6fq7p.js";
|
|
10
|
-
import"./studio-cx91mnh8.js";
|
|
11
|
-
import"./studio-xq0t7n5t.js";
|
|
12
|
-
import"./studio-nqw433kv.js";
|
|
13
|
-
import"./studio-4k0m4fmp.js";
|
|
14
|
-
import"./studio-5x5774ak.js";
|
|
15
|
-
import"./studio-md4gps17.js";
|
|
16
|
-
export {
|
|
17
|
-
Overlay,
|
|
18
|
-
LONGPRESS_INSTRUCTIONS
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
//# debugId=65A7EC2EC619393664756E2164756E21
|
|
22
|
-
//# sourceMappingURL=Overlay.dev-cszx7yn5.js.map
|
|
@@ -1,531 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
renderForm,
|
|
3
|
-
resolveContextPointer
|
|
4
|
-
} from "./studio-zmy7241e.js";
|
|
5
|
-
import {
|
|
6
|
-
registerSettingsSection,
|
|
7
|
-
unregisterSettingsSection
|
|
8
|
-
} from "./studio-j6gqyjf4.js";
|
|
9
|
-
import {
|
|
10
|
-
dataSurfaceAvailable,
|
|
11
|
-
deriveSecretEnvName,
|
|
12
|
-
openGridSourcePicker,
|
|
13
|
-
pushSchema,
|
|
14
|
-
testConnection
|
|
15
|
-
} from "./studio-d77qm3pk.js";
|
|
16
|
-
import"./studio-ygzav7z5.js";
|
|
17
|
-
import"./studio-hhj92gcr.js";
|
|
18
|
-
import"./studio-cx91mnh8.js";
|
|
19
|
-
import"./studio-nqw433kv.js";
|
|
20
|
-
import"./studio-568nx4t5.js";
|
|
21
|
-
import {
|
|
22
|
-
openModal
|
|
23
|
-
} from "./studio-asvf0j9e.js";
|
|
24
|
-
import {
|
|
25
|
-
projectState
|
|
26
|
-
} from "./studio-rq0vxb19.js";
|
|
27
|
-
import"./studio-4k0m4fmp.js";
|
|
28
|
-
import {
|
|
29
|
-
html,
|
|
30
|
-
nothing,
|
|
31
|
-
render
|
|
32
|
-
} from "./studio-5x5774ak.js";
|
|
33
|
-
import {
|
|
34
|
-
getFormats,
|
|
35
|
-
loadExtensions,
|
|
36
|
-
loadFormats
|
|
37
|
-
} from "./studio-97qcgvdn.js";
|
|
38
|
-
import {
|
|
39
|
-
getPlatform
|
|
40
|
-
} from "./studio-9smfzqhc.js";
|
|
41
|
-
import"./studio-5ehhackm.js";
|
|
42
|
-
import"./studio-kr88ryr7.js";
|
|
43
|
-
import"./studio-md4gps17.js";
|
|
44
|
-
|
|
45
|
-
// src/settings/contributed-section.ts
|
|
46
|
-
var selectedEntries = new Map;
|
|
47
|
-
var newEntryOpen = new Set;
|
|
48
|
-
var newEntryNames = new Map;
|
|
49
|
-
async function saveProjectConfig() {
|
|
50
|
-
const platform = getPlatform();
|
|
51
|
-
const config = projectState.projectConfig;
|
|
52
|
-
await platform.writeFile("project.json", JSON.stringify(config, null, "\t"));
|
|
53
|
-
}
|
|
54
|
-
function applyPatch(target, patch) {
|
|
55
|
-
for (const [key, value] of Object.entries(patch)) {
|
|
56
|
-
if (value === undefined) {
|
|
57
|
-
delete target[key];
|
|
58
|
-
} else {
|
|
59
|
-
target[key] = value;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
function slugify(name) {
|
|
64
|
-
return name.toLowerCase().replaceAll(/\s+/g, "-").replaceAll(/[^a-z0-9-]/g, "");
|
|
65
|
-
}
|
|
66
|
-
function instantiateNewEntry(template, key) {
|
|
67
|
-
if (!template) {
|
|
68
|
-
return {};
|
|
69
|
-
}
|
|
70
|
-
const substitute = (value) => {
|
|
71
|
-
if (typeof value === "string") {
|
|
72
|
-
return value.replaceAll("${key}", key);
|
|
73
|
-
}
|
|
74
|
-
if (Array.isArray(value)) {
|
|
75
|
-
return value.map((item) => substitute(item));
|
|
76
|
-
}
|
|
77
|
-
if (value && typeof value === "object") {
|
|
78
|
-
const out = {};
|
|
79
|
-
for (const [k, v] of Object.entries(value)) {
|
|
80
|
-
out[k] = substitute(v);
|
|
81
|
-
}
|
|
82
|
-
return out;
|
|
83
|
-
}
|
|
84
|
-
return value;
|
|
85
|
-
};
|
|
86
|
-
return substitute(template);
|
|
87
|
-
}
|
|
88
|
-
function buildContext(sectionKey, opts, entryKey = null) {
|
|
89
|
-
const platform = getPlatform();
|
|
90
|
-
return {
|
|
91
|
-
fieldKeyPrefix: `$settings.${sectionKey}`,
|
|
92
|
-
resolvePointer: (pointer, scope) => resolveContextPointer(pointer, {
|
|
93
|
-
projectConfig: projectState?.projectConfig ?? {},
|
|
94
|
-
...scope !== undefined && { scope },
|
|
95
|
-
...opts.formats !== undefined && { formats: opts.formats }
|
|
96
|
-
}),
|
|
97
|
-
...typeof platform.setSecrets === "function" ? {
|
|
98
|
-
commitSecret: async (key, value) => {
|
|
99
|
-
const envName = deriveSecretEnvName(sectionKey, entryKey, key);
|
|
100
|
-
await platform.setSecrets({ set: { [envName]: value } });
|
|
101
|
-
return envName;
|
|
102
|
-
}
|
|
103
|
-
} : {}
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
function sectionValue(key) {
|
|
107
|
-
const config = projectState?.projectConfig;
|
|
108
|
-
if (!config) {
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
const existing = config[key];
|
|
112
|
-
if (existing && typeof existing === "object" && !Array.isArray(existing)) {
|
|
113
|
-
return existing;
|
|
114
|
-
}
|
|
115
|
-
const fresh = {};
|
|
116
|
-
config[key] = fresh;
|
|
117
|
-
return fresh;
|
|
118
|
-
}
|
|
119
|
-
function renderContributedSection(container, contribution, opts = {}) {
|
|
120
|
-
const rerender = () => renderContributedSection(container, contribution, opts);
|
|
121
|
-
const title = contribution.title ?? contribution.key;
|
|
122
|
-
const layout = contribution.settings.layout ?? "form";
|
|
123
|
-
const body = layout === "map" ? renderMapLayout(contribution, opts, rerender) : renderFormLayout(contribution, opts, rerender);
|
|
124
|
-
const selected = layout === "map" ? selectedEntries.get(contribution.key) ?? null : null;
|
|
125
|
-
const actions = opts.actions ? opts.actions({ rerender, sectionKey: contribution.key, selected }) : nothing;
|
|
126
|
-
const tpl = html`
|
|
127
|
-
<div class="settings-section contributed-section">
|
|
128
|
-
<h3 class="settings-section-title">${title}</h3>
|
|
129
|
-
${actions}${body}
|
|
130
|
-
</div>
|
|
131
|
-
`;
|
|
132
|
-
render(tpl, container);
|
|
133
|
-
}
|
|
134
|
-
function renderFormLayout(contribution, opts, rerender) {
|
|
135
|
-
const value = sectionValue(contribution.key) ?? {};
|
|
136
|
-
const ui = contribution.settings.entry?.ui;
|
|
137
|
-
return html`
|
|
138
|
-
<div class="settings-form-panel">
|
|
139
|
-
${renderForm(contribution.entrySchema, value, {
|
|
140
|
-
context: buildContext(contribution.key, opts, null),
|
|
141
|
-
onChange: (patch) => {
|
|
142
|
-
const target = sectionValue(contribution.key);
|
|
143
|
-
if (!target) {
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
applyPatch(target, patch);
|
|
147
|
-
rerender();
|
|
148
|
-
saveProjectConfig();
|
|
149
|
-
},
|
|
150
|
-
rerender,
|
|
151
|
-
...ui !== undefined && { ui }
|
|
152
|
-
})}
|
|
153
|
-
</div>
|
|
154
|
-
`;
|
|
155
|
-
}
|
|
156
|
-
function renderMapLayout(contribution, opts, rerender) {
|
|
157
|
-
const { key: sectionKey } = contribution;
|
|
158
|
-
const entries = sectionValue(sectionKey) ?? {};
|
|
159
|
-
const entryKeys = Object.keys(entries);
|
|
160
|
-
const selected = selectedEntries.get(sectionKey) ?? null;
|
|
161
|
-
const ui = contribution.settings.entry?.ui;
|
|
162
|
-
const handleCreate = () => {
|
|
163
|
-
const slug = slugify(newEntryNames.get(sectionKey) ?? "");
|
|
164
|
-
const target = sectionValue(sectionKey);
|
|
165
|
-
if (!slug || !target || target[slug]) {
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
target[slug] = instantiateNewEntry(contribution.settings.entry?.newEntry, slug);
|
|
169
|
-
selectedEntries.set(sectionKey, slug);
|
|
170
|
-
newEntryOpen.delete(sectionKey);
|
|
171
|
-
newEntryNames.delete(sectionKey);
|
|
172
|
-
rerender();
|
|
173
|
-
saveProjectConfig();
|
|
174
|
-
};
|
|
175
|
-
const handleDelete = () => {
|
|
176
|
-
const target = sectionValue(sectionKey);
|
|
177
|
-
if (!selected || !target?.[selected]) {
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
delete target[selected];
|
|
181
|
-
selectedEntries.set(sectionKey, null);
|
|
182
|
-
rerender();
|
|
183
|
-
saveProjectConfig();
|
|
184
|
-
};
|
|
185
|
-
const handleRename = (newName) => {
|
|
186
|
-
const target = sectionValue(sectionKey);
|
|
187
|
-
const slug = slugify(newName);
|
|
188
|
-
if (!selected || !target || !slug || slug === selected || target[slug]) {
|
|
189
|
-
return;
|
|
190
|
-
}
|
|
191
|
-
const next = {};
|
|
192
|
-
for (const [k, v] of Object.entries(target)) {
|
|
193
|
-
next[k === selected ? slug : k] = v;
|
|
194
|
-
delete target[k];
|
|
195
|
-
}
|
|
196
|
-
Object.assign(target, next);
|
|
197
|
-
selectedEntries.set(sectionKey, slug);
|
|
198
|
-
rerender();
|
|
199
|
-
saveProjectConfig();
|
|
200
|
-
};
|
|
201
|
-
const listTpl = html`
|
|
202
|
-
<div class="settings-list-panel">
|
|
203
|
-
${entryKeys.map((name) => html`
|
|
204
|
-
<sp-action-button
|
|
205
|
-
size="s"
|
|
206
|
-
?selected=${selected === name}
|
|
207
|
-
@click=${() => {
|
|
208
|
-
selectedEntries.set(sectionKey, name);
|
|
209
|
-
rerender();
|
|
210
|
-
}}
|
|
211
|
-
>
|
|
212
|
-
${name}
|
|
213
|
-
</sp-action-button>
|
|
214
|
-
`)}
|
|
215
|
-
${newEntryOpen.has(sectionKey) ? html`
|
|
216
|
-
<div class="settings-inline-form">
|
|
217
|
-
<sp-textfield
|
|
218
|
-
size="s"
|
|
219
|
-
placeholder="entry-name"
|
|
220
|
-
.value=${newEntryNames.get(sectionKey) ?? ""}
|
|
221
|
-
@input=${(e) => {
|
|
222
|
-
newEntryNames.set(sectionKey, e.target.value);
|
|
223
|
-
}}
|
|
224
|
-
@keydown=${(e) => {
|
|
225
|
-
if (e.key === "Enter") {
|
|
226
|
-
handleCreate();
|
|
227
|
-
}
|
|
228
|
-
if (e.key === "Escape") {
|
|
229
|
-
newEntryOpen.delete(sectionKey);
|
|
230
|
-
rerender();
|
|
231
|
-
}
|
|
232
|
-
}}
|
|
233
|
-
></sp-textfield>
|
|
234
|
-
<sp-action-button size="s" @click=${handleCreate}>Create</sp-action-button>
|
|
235
|
-
</div>
|
|
236
|
-
` : html`
|
|
237
|
-
<sp-action-button
|
|
238
|
-
size="s"
|
|
239
|
-
quiet
|
|
240
|
-
@click=${() => {
|
|
241
|
-
newEntryOpen.add(sectionKey);
|
|
242
|
-
rerender();
|
|
243
|
-
}}
|
|
244
|
-
>
|
|
245
|
-
<sp-icon-add slot="icon"></sp-icon-add> New Entry
|
|
246
|
-
</sp-action-button>
|
|
247
|
-
`}
|
|
248
|
-
</div>
|
|
249
|
-
`;
|
|
250
|
-
const selectedEntry = selected ? entries[selected] : undefined;
|
|
251
|
-
const editorTpl = selected && selectedEntry && typeof selectedEntry === "object" ? html`
|
|
252
|
-
<div class="settings-editor-panel">
|
|
253
|
-
<div class="settings-editor-header">
|
|
254
|
-
<sp-textfield
|
|
255
|
-
size="s"
|
|
256
|
-
quiet
|
|
257
|
-
class="entry-name-input"
|
|
258
|
-
value=${selected}
|
|
259
|
-
@change=${(e) => {
|
|
260
|
-
const target = e.target;
|
|
261
|
-
handleRename(target.value.trim());
|
|
262
|
-
target.value = selectedEntries.get(sectionKey) ?? selected;
|
|
263
|
-
}}
|
|
264
|
-
@keydown=${(e) => {
|
|
265
|
-
const target = e.target;
|
|
266
|
-
if (e.key === "Enter") {
|
|
267
|
-
target.blur();
|
|
268
|
-
}
|
|
269
|
-
if (e.key === "Escape") {
|
|
270
|
-
target.value = selected;
|
|
271
|
-
target.blur();
|
|
272
|
-
}
|
|
273
|
-
}}
|
|
274
|
-
></sp-textfield>
|
|
275
|
-
<sp-action-button size="xs" quiet title="Delete entry" @click=${handleDelete}>
|
|
276
|
-
<sp-icon-delete slot="icon"></sp-icon-delete>
|
|
277
|
-
</sp-action-button>
|
|
278
|
-
</div>
|
|
279
|
-
${renderForm(contribution.entrySchema, selectedEntry, {
|
|
280
|
-
context: buildContext(sectionKey, opts, selected),
|
|
281
|
-
onChange: (patch) => {
|
|
282
|
-
applyPatch(selectedEntry, patch);
|
|
283
|
-
rerender();
|
|
284
|
-
saveProjectConfig();
|
|
285
|
-
},
|
|
286
|
-
rerender,
|
|
287
|
-
...ui !== undefined && { ui }
|
|
288
|
-
})}
|
|
289
|
-
</div>
|
|
290
|
-
` : html`<div class="settings-empty-state">Select or create an entry</div>`;
|
|
291
|
-
return html` <div class="settings-two-col">${listTpl} ${editorTpl}</div> `;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
// src/panels/data-grid.ts
|
|
295
|
-
var pushDialog = null;
|
|
296
|
-
function closePushDialog() {
|
|
297
|
-
pushDialog?.handle.close();
|
|
298
|
-
pushDialog = null;
|
|
299
|
-
}
|
|
300
|
-
async function startPush(connection, onDone) {
|
|
301
|
-
if (pushDialog) {
|
|
302
|
-
return;
|
|
303
|
-
}
|
|
304
|
-
const handle = openModal(html``);
|
|
305
|
-
pushDialog = { connection, handle, onDone, phase: "loading", plan: null, result: null };
|
|
306
|
-
renderPushDialog();
|
|
307
|
-
const plan = await pushSchema({
|
|
308
|
-
dryRun: true,
|
|
309
|
-
...connection === undefined ? {} : { connection }
|
|
310
|
-
});
|
|
311
|
-
if (!pushDialog) {
|
|
312
|
-
return;
|
|
313
|
-
}
|
|
314
|
-
pushDialog.plan = plan;
|
|
315
|
-
pushDialog.phase = "confirm";
|
|
316
|
-
renderPushDialog();
|
|
317
|
-
}
|
|
318
|
-
async function applyPush() {
|
|
319
|
-
if (!pushDialog) {
|
|
320
|
-
return;
|
|
321
|
-
}
|
|
322
|
-
pushDialog.phase = "applying";
|
|
323
|
-
renderPushDialog();
|
|
324
|
-
const result = await pushSchema(pushDialog.connection === undefined ? {} : { connection: pushDialog.connection });
|
|
325
|
-
if (!pushDialog) {
|
|
326
|
-
return;
|
|
327
|
-
}
|
|
328
|
-
pushDialog.result = result;
|
|
329
|
-
pushDialog.phase = "done";
|
|
330
|
-
renderPushDialog();
|
|
331
|
-
pushDialog.onDone();
|
|
332
|
-
}
|
|
333
|
-
function pushDialogBody(state) {
|
|
334
|
-
if (state.phase === "loading" || state.phase === "applying") {
|
|
335
|
-
return html`<div class="push-dialog-status">
|
|
336
|
-
${state.phase === "loading" ? "Compiling plan…" : "Applying…"}
|
|
337
|
-
</div>`;
|
|
338
|
-
}
|
|
339
|
-
const shown = state.phase === "done" ? state.result : state.plan;
|
|
340
|
-
const steps = shown?.plan ?? [];
|
|
341
|
-
const warnings = shown?.warnings ?? [];
|
|
342
|
-
const errors = shown?.errors ?? [];
|
|
343
|
-
return html`
|
|
344
|
-
<div class="push-dialog-plan">
|
|
345
|
-
${state.phase === "done" ? html`<div class="push-dialog-status">
|
|
346
|
-
${shown?.applied ? "Schema applied." : "Push failed."}
|
|
347
|
-
</div>` : steps.length === 0 && errors.length === 0 ? html`<div class="push-dialog-status">
|
|
348
|
-
Nothing to push — the schema is up to date.
|
|
349
|
-
</div>` : nothing}
|
|
350
|
-
<ul class="push-dialog-steps">
|
|
351
|
-
${steps.map((step) => html`<li class="push-step push-step-${step.kind}">${step.summary}</li>`)}
|
|
352
|
-
</ul>
|
|
353
|
-
${warnings.map((w) => html`<div class="push-dialog-warning">${w}</div>`)}
|
|
354
|
-
${errors.map((e) => html`<div class="push-dialog-error">${e}</div>`)}
|
|
355
|
-
</div>
|
|
356
|
-
`;
|
|
357
|
-
}
|
|
358
|
-
function renderPushDialog() {
|
|
359
|
-
if (!pushDialog) {
|
|
360
|
-
return;
|
|
361
|
-
}
|
|
362
|
-
const state = pushDialog;
|
|
363
|
-
const confirmable = state.phase === "confirm" && (state.plan?.plan.length ?? 0) > 0;
|
|
364
|
-
const tpl = html`
|
|
365
|
-
<sp-underlay open @close=${closePushDialog}></sp-underlay>
|
|
366
|
-
<div class="settings-modal push-dialog">
|
|
367
|
-
<div class="settings-modal-header">
|
|
368
|
-
<h2 class="settings-modal-title">
|
|
369
|
-
Push Schema${state.connection ? html` — ${state.connection}` : nothing}
|
|
370
|
-
</h2>
|
|
371
|
-
</div>
|
|
372
|
-
<div class="settings-modal-body">${pushDialogBody(state)}</div>
|
|
373
|
-
<div class="push-dialog-actions">
|
|
374
|
-
<sp-action-button size="s" class="push-cancel" @click=${closePushDialog}>
|
|
375
|
-
${state.phase === "done" ? "Close" : "Cancel"}
|
|
376
|
-
</sp-action-button>
|
|
377
|
-
${confirmable ? html`<sp-action-button
|
|
378
|
-
size="s"
|
|
379
|
-
emphasized
|
|
380
|
-
class="push-apply"
|
|
381
|
-
@click=${() => void applyPush()}
|
|
382
|
-
>Apply</sp-action-button
|
|
383
|
-
>` : nothing}
|
|
384
|
-
</div>
|
|
385
|
-
</div>
|
|
386
|
-
`;
|
|
387
|
-
state.handle.update(tpl);
|
|
388
|
-
}
|
|
389
|
-
var actionsState = { pushing: false, testResult: null, testing: null };
|
|
390
|
-
function dataSectionActions(sectionKey) {
|
|
391
|
-
if (sectionKey !== "connections" && sectionKey !== "data" || !dataSurfaceAvailable()) {
|
|
392
|
-
return null;
|
|
393
|
-
}
|
|
394
|
-
return (ctx) => renderSectionActions(sectionKey, ctx);
|
|
395
|
-
}
|
|
396
|
-
async function runTest(connection, rerender) {
|
|
397
|
-
actionsState.testing = connection;
|
|
398
|
-
actionsState.testResult = null;
|
|
399
|
-
rerender();
|
|
400
|
-
const result = await testConnection(connection);
|
|
401
|
-
actionsState.testing = null;
|
|
402
|
-
actionsState.testResult = { ...result, connection };
|
|
403
|
-
rerender();
|
|
404
|
-
}
|
|
405
|
-
function renderSectionActions(sectionKey, ctx) {
|
|
406
|
-
const { selected, rerender } = ctx;
|
|
407
|
-
const { testResult } = actionsState;
|
|
408
|
-
const pushTarget = sectionKey === "connections" && selected ? selected : undefined;
|
|
409
|
-
return html`
|
|
410
|
-
<div class="data-section-actions">
|
|
411
|
-
${sectionKey === "connections" ? html`<sp-action-button
|
|
412
|
-
size="s"
|
|
413
|
-
class="data-action-test"
|
|
414
|
-
?disabled=${!selected || actionsState.testing !== null}
|
|
415
|
-
@click=${() => {
|
|
416
|
-
if (selected) {
|
|
417
|
-
runTest(selected, rerender);
|
|
418
|
-
}
|
|
419
|
-
}}
|
|
420
|
-
>
|
|
421
|
-
${actionsState.testing ? "Testing…" : "Test Connection"}
|
|
422
|
-
</sp-action-button>` : nothing}
|
|
423
|
-
<sp-action-button
|
|
424
|
-
size="s"
|
|
425
|
-
class="data-action-push"
|
|
426
|
-
@click=${() => void startPush(pushTarget, rerender)}
|
|
427
|
-
>
|
|
428
|
-
Push Schema
|
|
429
|
-
</sp-action-button>
|
|
430
|
-
<sp-action-button
|
|
431
|
-
size="s"
|
|
432
|
-
class="data-action-grid"
|
|
433
|
-
@click=${() => void openGridSourcePicker()}
|
|
434
|
-
>
|
|
435
|
-
Open Data Grid
|
|
436
|
-
</sp-action-button>
|
|
437
|
-
${testResult ? html`<span
|
|
438
|
-
class="data-test-result ${testResult.ok ? "ok" : "failed"}"
|
|
439
|
-
title=${testResult.error ?? ""}
|
|
440
|
-
>
|
|
441
|
-
${testResult.connection}:
|
|
442
|
-
${testResult.ok ? "connected" : testResult.error ?? "failed"}
|
|
443
|
-
</span>` : nothing}
|
|
444
|
-
</div>
|
|
445
|
-
`;
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
// src/settings/extension-sections.ts
|
|
449
|
-
var DEFAULT_SECTION_ORDER = 100;
|
|
450
|
-
function deriveSettingsSection(info) {
|
|
451
|
-
const studio = info.studio;
|
|
452
|
-
const settings = studio?.settings;
|
|
453
|
-
if (!settings) {
|
|
454
|
-
return null;
|
|
455
|
-
}
|
|
456
|
-
const { key } = info.project;
|
|
457
|
-
const layout = settings.layout ?? "form";
|
|
458
|
-
const sectionSchema = info.entrySchema ?? {};
|
|
459
|
-
const entrySchema = layout === "map" ? typeof sectionSchema.additionalProperties === "object" ? sectionSchema.additionalProperties : {} : sectionSchema;
|
|
460
|
-
const label = settings.label ?? info.project.title ?? key;
|
|
461
|
-
return {
|
|
462
|
-
contribution: {
|
|
463
|
-
entrySchema,
|
|
464
|
-
key,
|
|
465
|
-
settings: {
|
|
466
|
-
...settings.entry === undefined ? {} : { entry: settings.entry },
|
|
467
|
-
...settings.layout === undefined ? {} : { layout: settings.layout }
|
|
468
|
-
},
|
|
469
|
-
title: label
|
|
470
|
-
},
|
|
471
|
-
icon: settings.icon,
|
|
472
|
-
key,
|
|
473
|
-
label,
|
|
474
|
-
order: settings.order ?? DEFAULT_SECTION_ORDER
|
|
475
|
-
};
|
|
476
|
-
}
|
|
477
|
-
var registeredKeys = new Set;
|
|
478
|
-
async function syncExtensionSettingsSections() {
|
|
479
|
-
const [extensions] = await Promise.all([loadExtensions(), loadFormats()]);
|
|
480
|
-
const next = new Set;
|
|
481
|
-
for (const ext of extensions) {
|
|
482
|
-
for (const info of ext.contributions) {
|
|
483
|
-
const derived = deriveSettingsSection(info);
|
|
484
|
-
if (!derived) {
|
|
485
|
-
continue;
|
|
486
|
-
}
|
|
487
|
-
const { contribution } = derived;
|
|
488
|
-
registerSettingsSection({
|
|
489
|
-
icon: derived.icon,
|
|
490
|
-
key: derived.key,
|
|
491
|
-
label: derived.label,
|
|
492
|
-
order: derived.order,
|
|
493
|
-
render: (container) => {
|
|
494
|
-
const actions = dataSectionActions(derived.key);
|
|
495
|
-
renderContributedSection(container, contribution, {
|
|
496
|
-
formats: getFormats(),
|
|
497
|
-
...actions === null ? {} : { actions }
|
|
498
|
-
});
|
|
499
|
-
}
|
|
500
|
-
});
|
|
501
|
-
next.add(derived.key);
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
for (const key of registeredKeys) {
|
|
505
|
-
if (!next.has(key)) {
|
|
506
|
-
unregisterSettingsSection(key);
|
|
507
|
-
}
|
|
508
|
-
}
|
|
509
|
-
registeredKeys.clear();
|
|
510
|
-
for (const key of next) {
|
|
511
|
-
registeredKeys.add(key);
|
|
512
|
-
}
|
|
513
|
-
}
|
|
514
|
-
function resetExtensionSettingsSections() {
|
|
515
|
-
for (const key of registeredKeys) {
|
|
516
|
-
unregisterSettingsSection(key);
|
|
517
|
-
}
|
|
518
|
-
registeredKeys.clear();
|
|
519
|
-
}
|
|
520
|
-
function extensionSectionKeys() {
|
|
521
|
-
return [...registeredKeys];
|
|
522
|
-
}
|
|
523
|
-
export {
|
|
524
|
-
syncExtensionSettingsSections,
|
|
525
|
-
resetExtensionSettingsSections,
|
|
526
|
-
extensionSectionKeys,
|
|
527
|
-
deriveSettingsSection
|
|
528
|
-
};
|
|
529
|
-
|
|
530
|
-
//# debugId=B810C054A80BCC0264756E2164756E21
|
|
531
|
-
//# sourceMappingURL=extension-sections-qct0gt8f.js.map
|