@jxsuite/studio 2.0.1 → 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-799jpvhm.js → components-2bpqp4mq.js} +5 -7
- package/dist/chunks/{components-799jpvhm.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-8jxwts2p.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-gs6kqdt1.js → studio-adn0z1k3.js} +14 -8
- package/dist/chunks/{studio-gs6kqdt1.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-esrewxap.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-v7jkjqng.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-jm0z592w.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 +21080 -32585
- 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 +7 -0
- package/src/new-project/location-fields.ts +9 -1
- package/src/new-project/new-project-modal.ts +221 -245
- 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 -53
- 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 +30 -1
- 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 +7 -1
- 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-qr3drkkw.js +0 -531
- package/dist/chunks/extension-sections-qr3drkkw.js.map +0 -12
- package/dist/chunks/files-j8a1t06k.js +0 -50
- package/dist/chunks/files-j8a1t06k.js.map +0 -9
- package/dist/chunks/git-panel-xtq5z81x.js +0 -28
- package/dist/chunks/git-panel-xtq5z81x.js.map +0 -9
- package/dist/chunks/layers-panel-ancn2wpq.js +0 -26
- package/dist/chunks/layers-panel-ancn2wpq.js.map +0 -9
- package/dist/chunks/settings-modal-17ttr96g.js +0 -29
- package/dist/chunks/settings-modal-17ttr96g.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-0xgs7xrs.js +0 -429
- package/dist/chunks/studio-0xgs7xrs.js.map +0 -13
- package/dist/chunks/studio-4d8hzcz5.js +0 -3427
- package/dist/chunks/studio-4d8hzcz5.js.map +0 -26
- package/dist/chunks/studio-4k0m4fmp.js.map +0 -13
- package/dist/chunks/studio-9smfzqhc.js +0 -19
- package/dist/chunks/studio-9smfzqhc.js.map +0 -10
- package/dist/chunks/studio-jm0z592w.js.map +0 -115
- package/dist/chunks/studio-m2t4mdg5.js +0 -1854
- package/dist/chunks/studio-m2t4mdg5.js.map +0 -18
- package/dist/chunks/studio-n4p11dfy.js +0 -853
- package/dist/chunks/studio-n4p11dfy.js.map +0 -12
- package/dist/chunks/studio-qkvt37c0.js.map +0 -9
- package/dist/chunks/studio-sjh1wt1a.js +0 -3744
- package/dist/chunks/studio-sjh1wt1a.js.map +0 -22
- package/dist/chunks/studio-v7jkjqng.js.map +0 -46
- 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-yfcstdzy.js +0 -399
- package/dist/chunks/studio-yfcstdzy.js.map +0 -12
- package/dist/chunks/studio-zp7jncs8.js +0 -469
- package/dist/chunks/studio-zp7jncs8.js.map +0 -14
- 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-8jxwts2p.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-esrewxap.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
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../node_modules/y-protocols/sync.js", "../../collab/src/ws-client.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"/**\n * @module sync-protocol\n */\n\nimport * as encoding from 'lib0/encoding'\nimport * as decoding from 'lib0/decoding'\nimport * as Y from 'yjs'\n\n/**\n * @typedef {Map<number, number>} StateMap\n */\n\n/**\n * Core Yjs defines two message types:\n * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2.\n * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it\n * received all information from the remote client.\n *\n * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection\n * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both\n * SyncStep2 and SyncDone, it is assured that it is synced to the remote client.\n *\n * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1.\n * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies\n * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the\n * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can\n * easily be implemented on top of http and websockets. 2. The server should only reply to requests, and not initiate them.\n * Therefore it is necessary that the client initiates the sync.\n *\n * Construction of a message:\n * [messageType : varUint, message definition..]\n *\n * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol!\n *\n * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer)\n */\n\nexport const messageYjsSyncStep1 = 0\nexport const messageYjsSyncStep2 = 1\nexport const messageYjsUpdate = 2\n\n/**\n * Create a sync step 1 message based on the state of the current shared document.\n *\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n */\nexport const writeSyncStep1 = (encoder, doc) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep1)\n const sv = Y.encodeStateVector(doc)\n encoding.writeVarUint8Array(encoder, sv)\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n * @param {Uint8Array} [encodedStateVector]\n */\nexport const writeSyncStep2 = (encoder, doc, encodedStateVector) => {\n encoding.writeVarUint(encoder, messageYjsSyncStep2)\n encoding.writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector))\n}\n\n/**\n * Read SyncStep1 message and reply with SyncStep2.\n *\n * @param {decoding.Decoder} decoder The reply to the received message\n * @param {encoding.Encoder} encoder The received message\n * @param {Y.Doc} doc\n */\nexport const readSyncStep1 = (decoder, encoder, doc) =>\n writeSyncStep2(encoder, doc, decoding.readVarUint8Array(decoder))\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n * @param {(error:Error)=>any} [errorHandler]\n */\nexport const readSyncStep2 = (decoder, doc, transactionOrigin, errorHandler) => {\n try {\n Y.applyUpdate(doc, decoding.readVarUint8Array(decoder), transactionOrigin)\n } catch (error) {\n if (errorHandler != null) errorHandler(/** @type {Error} */ (error))\n // This catches errors that are thrown by event handlers\n console.error('Caught error while handling a Yjs update', error)\n }\n}\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Uint8Array} update\n */\nexport const writeUpdate = (encoder, update) => {\n encoding.writeVarUint(encoder, messageYjsUpdate)\n encoding.writeVarUint8Array(encoder, update)\n}\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n * @param {(error:Error)=>any} [errorHandler]\n */\nexport const readUpdate = readSyncStep2\n\n/**\n * @param {decoding.Decoder} decoder A message received from another client\n * @param {encoding.Encoder} encoder The reply message. Does not need to be sent if empty.\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n * @param {(error:Error)=>any} [errorHandler] Optional error handler that catches errors when reading Yjs messages.\n */\nexport const readSyncMessage = (decoder, encoder, doc, transactionOrigin, errorHandler) => {\n const messageType = decoding.readVarUint(decoder)\n switch (messageType) {\n case messageYjsSyncStep1:\n readSyncStep1(decoder, encoder, doc)\n break\n case messageYjsSyncStep2:\n readSyncStep2(decoder, doc, transactionOrigin, errorHandler)\n break\n case messageYjsUpdate:\n readUpdate(decoder, doc, transactionOrigin, errorHandler)\n break\n default:\n throw new Error('Unknown message type')\n }\n return messageType\n}\n",
|
|
6
|
-
"/**\n * The browser half of the wire envelope: one WebSocket per project, multiplexing every open\n * document. `createWsCollabConnection` owns the socket (exponential-backoff reconnect, re-open of\n * live docs on reconnect), the shared project-level Awareness, and per-doc sync state;\n * `openDoc(path)` hands out {@link CollabHandle}s for `StudioPlatform.collab`.\n */\n\nimport * as Y from \"yjs\";\nimport * as decoding from \"lib0/decoding\";\nimport * as encoding from \"lib0/encoding\";\nimport {\n applyAwarenessUpdate,\n Awareness,\n encodeAwarenessUpdate,\n removeAwarenessStates,\n} from \"y-protocols/awareness\";\nimport * as syncProtocol from \"y-protocols/sync\";\nimport { decodeFrame, encodeFrame } from \"./envelope.ts\";\nimport type { CollabFrame, ControlMessage } from \"./envelope.ts\";\nimport type { CollabHandle, CollabIdentity, CollabStatus } from \"./provider.ts\";\n\n/** The subset of the WebSocket API the connection uses (injectable for tests). */\nexport interface WsLike {\n binaryType: string;\n readyState: number;\n send: (data: Uint8Array) => void;\n close: () => void;\n onopen: (() => void) | null;\n onclose: (() => void) | null;\n onerror: (() => void) | null;\n onmessage: ((event: { data: unknown }) => void) | null;\n}\n\nexport interface WsCollabConnectionOptions {\n /** The ws(s):// endpoint for this project's collab socket. */\n url: string;\n /** WebSocket constructor override (tests, non-browser runtimes). */\n webSocketImpl?: new (url: string) => WsLike;\n /**\n * Called when the server refuses a doc with content-not-loaded: hydrate the file over HTTP (which\n * caches it server-side) so the retry can seed. One retry per open.\n */\n hydratePath?: (path: string) => Promise<void>;\n /** Give up on an openDoc after this long (falls back to solo editing). */\n openTimeoutMs?: number;\n /** Initial reconnect backoff (doubles to 30s). */\n reconnectDelayMs?: number;\n}\n\nexport interface WsCollabConnection {\n openDoc: (path: string) => Promise<CollabHandle | null>;\n status: () => CollabStatus;\n destroy: () => void;\n}\n\nconst WS_OPEN = 1;\n\ninterface DocEntry {\n doc: Y.Doc;\n epoch: number;\n opened: boolean;\n synced: boolean;\n hydrated: boolean;\n resolveOpen: ((ok: boolean) => void) | null;\n resolveSynced: () => void;\n whenSynced: Promise<void>;\n resetCbs: Set<() => void>;\n pendingFlush: Set<() => void>;\n handleDestroyed: boolean;\n /** Latest room-level dirty state from the server (survives reconnect on the same entry). */\n dirty: boolean;\n dirtyCbs: Set<(dirty: boolean) => void>;\n}\n\nexport function createWsCollabConnection(options: WsCollabConnectionOptions): WsCollabConnection {\n const WebSocketCtor =\n options.webSocketImpl ?? (globalThis.WebSocket as unknown as new (url: string) => WsLike);\n const openTimeoutMs = options.openTimeoutMs ?? 10_000;\n const docs = new Map<string, DocEntry>();\n const statusCbs = new Set<(status: CollabStatus) => void>();\n const awarenessDoc = new Y.Doc();\n const awareness = new Awareness(awarenessDoc);\n /* Clear the constructor's implicit {} state: it sits at clock 0, which applyAwarenessUpdate on\n the receiving side can never apply (currClock 0 < clock 0 is false) — publishing it would\n poison the server's controlled-id tracking. Real state arrives via setLocalState (clock ≥ 2). */\n awareness.setLocalState(null);\n\n let socket: WsLike | null = null;\n let identity: CollabIdentity | null = null;\n let status: CollabStatus = \"connecting\";\n let destroyed = false;\n let retryMs = options.reconnectDelayMs ?? 1000;\n let retryTimer: ReturnType<typeof setTimeout> | null = null;\n\n const setStatus = (next: CollabStatus) => {\n if (status === next) {\n return;\n }\n status = next;\n for (const cb of statusCbs) {\n cb(next);\n }\n };\n\n const sendFrame = (frame: CollabFrame) => {\n if (socket && socket.readyState === WS_OPEN) {\n try {\n socket.send(encodeFrame(frame));\n } catch {\n // The close handler owns recovery.\n }\n }\n };\n\n const sendOpen = (path: string) => {\n sendFrame({ message: { path, type: \"open\" }, type: \"control\" });\n };\n\n // Local awareness changes always go to the wire (queued sends drop; awareness self-heals on\n // Reconnect via the full-state re-publish below).\n awareness.on(\n \"update\",\n (changes: { added: number[]; updated: number[]; removed: number[] }, origin: unknown) => {\n if (origin === \"remote\") {\n return;\n }\n const changed = [...changes.added, ...changes.updated, ...changes.removed];\n sendFrame({ body: encodeAwarenessUpdate(awareness, changed), type: \"awareness\" });\n },\n );\n\n const handleControl = (message: ControlMessage) => {\n switch (message.type) {\n case \"hello\": {\n identity = {\n color: message.color,\n login: message.login,\n permission: message.permission,\n ...(message.name === undefined ? {} : { name: message.name }),\n ...(message.avatarUrl === undefined ? {} : { avatarUrl: message.avatarUrl }),\n };\n return;\n }\n case \"opened\": {\n const entry = docs.get(message.path);\n if (!entry) {\n return;\n }\n if (entry.opened && entry.epoch !== message.epoch) {\n // The doc's history moved while we were away: this handle is dead.\n fireReset(message.path, entry);\n return;\n }\n entry.epoch = message.epoch;\n entry.opened = true;\n entry.resolveOpen?.(true);\n entry.resolveOpen = null;\n // Client-initiated step1 (mirrors y-websocket): fetch the server's state.\n const body = encoding.createEncoder();\n syncProtocol.writeSyncStep1(body, entry.doc);\n sendFrame({\n body: encoding.toUint8Array(body),\n epoch: entry.epoch,\n path: message.path,\n type: \"doc-sync\",\n });\n return;\n }\n case \"doc-reset\": {\n const entry = docs.get(message.path);\n if (entry) {\n fireReset(message.path, entry);\n }\n return;\n }\n case \"flush-ack\": {\n const entry = docs.get(message.path);\n if (entry) {\n for (const resolve of entry.pendingFlush) {\n resolve();\n }\n entry.pendingFlush.clear();\n }\n return;\n }\n case \"doc-dirty\": {\n const entry = docs.get(message.path);\n if (entry) {\n entry.dirty = message.dirty;\n for (const cb of entry.dirtyCbs) {\n cb(message.dirty);\n }\n }\n return;\n }\n case \"error\": {\n if (!message.path) {\n return;\n }\n const entry = docs.get(message.path);\n if (!entry) {\n return;\n }\n if (message.code === \"content-not-loaded\" && options.hydratePath && !entry.hydrated) {\n entry.hydrated = true;\n void options.hydratePath(message.path).then(\n () => sendOpen(message.path!),\n () => {\n entry.resolveOpen?.(false);\n entry.resolveOpen = null;\n },\n );\n return;\n }\n if (!entry.opened) {\n // Fatal refusal (binary-file, too-large, unresolved hydration): fall back to solo.\n entry.resolveOpen?.(false);\n entry.resolveOpen = null;\n }\n break;\n }\n default: {\n break;\n }\n }\n };\n\n const handleDocSync = (path: string, epoch: number, body: Uint8Array) => {\n const entry = docs.get(path);\n if (!entry || !entry.opened || entry.epoch !== epoch) {\n return;\n }\n const decoder = decoding.createDecoder(body);\n const reply = encoding.createEncoder();\n const messageType = syncProtocol.readSyncMessage(decoder, reply, entry.doc, \"remote\");\n if (encoding.length(reply) > 0) {\n sendFrame({ body: encoding.toUint8Array(reply), epoch, path, type: \"doc-sync\" });\n }\n if (messageType === syncProtocol.messageYjsSyncStep2 && !entry.synced) {\n entry.synced = true;\n entry.resolveSynced();\n }\n };\n\n const fireReset = (path: string, entry: DocEntry) => {\n docs.delete(path);\n entry.resolveOpen?.(false);\n entry.resolveOpen = null;\n for (const cb of entry.resetCbs) {\n cb();\n }\n entry.doc.destroy();\n };\n\n const connect = () => {\n if (destroyed) {\n return;\n }\n setStatus(\"connecting\");\n const ws = new WebSocketCtor(options.url);\n socket = ws;\n ws.binaryType = \"arraybuffer\";\n /* Each connect() builds a FRESH socket; single-assignment handlers are the point (and keep\n the injectable WsLike test surface minimal). */\n // oxlint-disable-next-line unicorn/prefer-add-event-listener\n ws.onopen = () => {\n retryMs = options.reconnectDelayMs ?? 1000;\n setStatus(\"connected\");\n // Re-open every live doc and re-publish our awareness state.\n for (const path of docs.keys()) {\n sendOpen(path);\n }\n const local = awareness.getLocalState();\n if (local !== null) {\n sendFrame({\n body: encodeAwarenessUpdate(awareness, [awareness.clientID]),\n type: \"awareness\",\n });\n }\n };\n // oxlint-disable-next-line unicorn/prefer-add-event-listener\n ws.onmessage = (event) => {\n const raw = event.data;\n const data =\n raw instanceof ArrayBuffer ? new Uint8Array(raw) : raw instanceof Uint8Array ? raw : null;\n if (!data) {\n return;\n }\n let frame: CollabFrame;\n try {\n frame = decodeFrame(data);\n } catch {\n return;\n }\n switch (frame.type) {\n case \"control\": {\n handleControl(frame.message);\n return;\n }\n case \"doc-sync\": {\n handleDocSync(frame.path, frame.epoch, frame.body);\n return;\n }\n case \"awareness\": {\n applyAwarenessUpdate(awareness, frame.body, \"remote\");\n break;\n }\n default: {\n break;\n }\n }\n };\n // oxlint-disable-next-line unicorn/prefer-add-event-listener\n ws.onclose = () => {\n if (destroyed) {\n return;\n }\n setStatus(\"offline\");\n for (const entry of docs.values()) {\n entry.opened = false;\n }\n retryTimer = setTimeout(connect, retryMs);\n retryMs = Math.min(retryMs * 2, 30_000);\n };\n // oxlint-disable-next-line unicorn/prefer-add-event-listener\n ws.onerror = () => {\n // The close handler follows and owns retry.\n };\n };\n connect();\n\n return {\n destroy() {\n if (destroyed) {\n return;\n }\n destroyed = true;\n if (retryTimer) {\n clearTimeout(retryTimer);\n }\n removeAwarenessStates(awareness, [awareness.clientID], \"destroy\");\n awareness.destroy();\n awarenessDoc.destroy();\n for (const [path, entry] of docs) {\n entry.resolveOpen?.(false);\n entry.doc.destroy();\n docs.delete(path);\n }\n socket?.close();\n },\n\n async openDoc(path: string): Promise<CollabHandle | null> {\n if (destroyed) {\n return null;\n }\n const existing = docs.get(path);\n if (existing && !existing.handleDestroyed) {\n return null;\n }\n let resolveSynced: () => void = () => {};\n const whenSynced = new Promise<void>((resolve) => {\n resolveSynced = resolve;\n });\n const entry: DocEntry = {\n dirty: false,\n dirtyCbs: new Set(),\n doc: new Y.Doc(),\n epoch: 0,\n handleDestroyed: false,\n hydrated: false,\n opened: false,\n pendingFlush: new Set(),\n resetCbs: new Set(),\n resolveOpen: null,\n resolveSynced,\n synced: false,\n whenSynced,\n };\n docs.set(path, entry);\n\n // Local doc updates go to the wire (unless they came FROM the wire).\n entry.doc.on(\"update\", (update: Uint8Array, origin: unknown) => {\n if (origin === \"remote\" || !entry.opened) {\n return;\n }\n const body = encoding.createEncoder();\n syncProtocol.writeUpdate(body, update);\n sendFrame({\n body: encoding.toUint8Array(body),\n epoch: entry.epoch,\n path,\n type: \"doc-sync\",\n });\n });\n\n const openedOk = await new Promise<boolean>((resolve) => {\n entry.resolveOpen = resolve;\n const timer = setTimeout(() => {\n entry.resolveOpen = null;\n resolve(false);\n }, openTimeoutMs);\n entry.resolveOpen = (ok) => {\n clearTimeout(timer);\n resolve(ok);\n };\n sendOpen(path);\n });\n if (!openedOk) {\n if (docs.get(path) === entry) {\n docs.delete(path);\n }\n entry.doc.destroy();\n return null;\n }\n\n const handle: CollabHandle = {\n awareness,\n destroy: () => {\n if (entry.handleDestroyed) {\n return;\n }\n entry.handleDestroyed = true;\n if (docs.get(path) === entry) {\n docs.delete(path);\n sendFrame({ path, type: \"doc-close\" });\n }\n entry.doc.destroy();\n },\n doc: entry.doc,\n flush: () =>\n new Promise<void>((resolve) => {\n entry.pendingFlush.add(resolve);\n sendFrame({ message: { path, type: \"flush\" }, type: \"control\" });\n }),\n identity: () => identity,\n onDirty: (cb) => {\n entry.dirtyCbs.add(cb);\n // Deliver current state synchronously: the server's open-handshake `doc-dirty` may have\n // Already landed before the caller subscribes, and it must not miss the initial value.\n cb(entry.dirty);\n return () => entry.dirtyCbs.delete(cb);\n },\n onReset: (cb) => {\n entry.resetCbs.add(cb);\n return () => entry.resetCbs.delete(cb);\n },\n onStatus: (cb) => {\n statusCbs.add(cb);\n return () => statusCbs.delete(cb);\n },\n whenSynced: entry.whenSynced,\n };\n return handle;\n },\n\n status: () => status,\n };\n}\n"
|
|
7
|
-
],
|
|
8
|
-
"mappings": "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",
|
|
9
|
-
"debugId": "A5C0E576FD4383EF64756E2164756E21",
|
|
10
|
-
"names": []
|
|
11
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/// <reference lib="dom" />
|
|
2
|
-
/**
|
|
3
|
-
* Browse modal — fullscreen overlay for the project file browser (Manage view). Opens via toolbar
|
|
4
|
-
* button; selecting a file closes the modal and opens it in the editor.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { html } from "lit-html";
|
|
8
|
-
import { ref } from "lit-html/directives/ref.js";
|
|
9
|
-
import { renderBrowse } from "./browse";
|
|
10
|
-
import { openFileInTab } from "../files/files";
|
|
11
|
-
import { openModal } from "../ui/layers";
|
|
12
|
-
|
|
13
|
-
let _handle: ReturnType<typeof openModal> | null = null;
|
|
14
|
-
|
|
15
|
-
let _escHandler: ((e: KeyboardEvent) => void) | null = null;
|
|
16
|
-
|
|
17
|
-
export function openBrowseModal() {
|
|
18
|
-
if (_handle) {
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
_escHandler = (e: KeyboardEvent) => {
|
|
23
|
-
if (e.key === "Escape") {
|
|
24
|
-
closeBrowseModal();
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
document.addEventListener("keydown", _escHandler, true);
|
|
28
|
-
|
|
29
|
-
const tpl = html`
|
|
30
|
-
<sp-underlay open @close=${closeBrowseModal}></sp-underlay>
|
|
31
|
-
<div class="browse-modal">
|
|
32
|
-
<div class="browse-modal-header">
|
|
33
|
-
<h2 class="browse-modal-title">Manage Files</h2>
|
|
34
|
-
<sp-action-button quiet size="s" @click=${closeBrowseModal} title="Close">
|
|
35
|
-
<sp-icon-close slot="icon"></sp-icon-close>
|
|
36
|
-
</sp-action-button>
|
|
37
|
-
</div>
|
|
38
|
-
<div
|
|
39
|
-
class="browse-modal-content"
|
|
40
|
-
${ref((el) => {
|
|
41
|
-
if (el) {
|
|
42
|
-
requestAnimationFrame(() => {
|
|
43
|
-
void renderBrowse(el as HTMLElement, {
|
|
44
|
-
openFile: (path: string) => {
|
|
45
|
-
closeBrowseModal();
|
|
46
|
-
void openFileInTab(path);
|
|
47
|
-
},
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
})}
|
|
52
|
-
></div>
|
|
53
|
-
</div>
|
|
54
|
-
`;
|
|
55
|
-
|
|
56
|
-
_handle = openModal(tpl);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export function closeBrowseModal() {
|
|
60
|
-
if (!_handle) {
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
if (_escHandler) {
|
|
64
|
-
document.removeEventListener("keydown", _escHandler, true);
|
|
65
|
-
_escHandler = null;
|
|
66
|
-
}
|
|
67
|
-
_handle.close();
|
|
68
|
-
_handle = null;
|
|
69
|
-
}
|