@vgai/editor 0.2.0 → 0.4.0-canary.20260715.1
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/README.md +24 -0
- package/dist/assets/axe-CyiTVRi6.js +30 -0
- package/dist/assets/browserAll-fGZ_P1P8.js +1 -0
- package/dist/assets/create-runtime-BzSHBTYw.js +1 -0
- package/dist/assets/game-DQ7YHNS8.js +1 -0
- package/dist/assets/game-DX6Obomf.js +1 -0
- package/dist/assets/game-DoUJj8vY.js +1 -0
- package/dist/assets/{game-xsOho_wg.js → game-HqybI_X7.js} +3 -3
- package/dist/assets/game-NUAnyPkS.js +1 -0
- package/dist/assets/game-ck_dNIE6.js +1 -0
- package/dist/assets/{game-pt_1lQLv.js → game-hIf5LD4E.js} +1 -1
- package/dist/assets/game-loop-o2CcBMFY.js +1 -0
- package/dist/assets/{game-source-CvidN7AB.js → game-source-C8HM7gbP.js} +1 -1
- package/dist/assets/{game-BI111o5f.js → game-uR_lv3Mp.js} +3 -3
- package/dist/assets/index-B-HA1uu3.js +15412 -0
- package/dist/assets/{index-Bp5cecD6.js → index-CSBAZwMx.js} +2 -2
- package/dist/assets/{index-DL7RcQ0n.js → index-CoSRCKPS.js} +1 -1
- package/dist/assets/{index-Cs8xwv3e.js → index-D93bBuUl.js} +1 -1
- package/dist/assets/index-bu01fqch.css +1 -0
- package/dist/assets/ingest-siblings-CCkkE2h7.js +1 -0
- package/dist/assets/mount-manifest-B2ECssU2.js +1 -0
- package/dist/assets/react-18-Bmj05S8J.js +1 -0
- package/dist/assets/webworkerAll-BC6gMOLZ.js +1 -0
- package/dist/assets/world-documents-DXPcAEA0.js +1 -0
- package/dist/index.html +15 -13
- package/dist/ingest/racing-game/vgai.game.json +5 -4
- package/dist/ingest/simcity/vgai.game.json +5 -4
- package/dist/ingest/tanks/vgai.game.json +5 -4
- package/dist/project-scripts.bundle.js +3917 -0
- package/dist/scenes/untitled.vscn.json +2 -0
- package/dist-server/packaged.mjs +7718 -3436
- package/package.json +31 -4
- package/scripts/probe-reporter.ts +349 -0
- package/scripts/run-probe.ts +2260 -0
- package/server/asset-catalog-audit.ts +268 -0
- package/server/asset-catalog-v2.ts +146 -0
- package/server/asset-library-routes.ts +276 -58
- package/server/canonical-path.ts +1 -1
- package/server/dev.ts +148 -44
- package/server/editor-server.ts +888 -61
- package/server/editor-sse.ts +115 -4
- package/server/harness-chat-service.ts +796 -0
- package/server/local-asset-catalog.ts +157 -22
- package/server/packaged.ts +71 -21
- package/server/process-shutdown.ts +136 -0
- package/server/prod.ts +9 -6
- package/server/project-hmr-files.ts +41 -0
- package/server/project-operations.ts +343 -0
- package/server/project-optimize-deps-entries.ts +4 -4
- package/server/project-output-writer.ts +156 -0
- package/server/project-validation.ts +140 -0
- package/server/project-view.ts +8 -50
- package/server/server-utils.ts +75 -10
- package/server/session-registry.ts +12 -0
- package/src/EditorContext.tsx +107 -3
- package/src/action-registry.ts +115 -17
- package/src/adapter-resolver.ts +213 -478
- package/src/asset-events.ts +64 -1
- package/src/asset-preview.ts +906 -0
- package/src/asset-selection.ts +121 -0
- package/src/asset-workflow/asset-capabilities.ts +259 -0
- package/src/asset-workflow/asset-editor-errors.ts +46 -0
- package/src/asset-workflow/asset-import-pipeline.ts +176 -0
- package/src/asset-workflow/asset-library-query.ts +107 -0
- package/src/asset-workflow/asset-types.ts +192 -0
- package/src/asset-workflow/asset-workflow-quality.ts +65 -0
- package/src/asset-workflow/import-contract.ts +113 -0
- package/src/asset-workflow/model-conversion.ts +126 -0
- package/src/asset-workflow/model-inspection.ts +185 -0
- package/src/asset-workflow/project-asset-commands.ts +23 -0
- package/src/asset-workflow/project-asset-health.ts +153 -0
- package/src/asset-workflow/project-asset-operations.ts +119 -0
- package/src/asset-workflow/thumbnail-system.ts +172 -0
- package/src/authoring/active-systems.ts +15 -0
- package/src/authoring/boundary-authoring-adapter.ts +16 -5
- package/src/authoring/composite-authoring-adapter.ts +305 -124
- package/src/authoring/design-time-layers.ts +300 -117
- package/src/authoring/edit-mode-authoring.ts +278 -293
- package/src/authoring/embed-only-adapter.ts +4 -2
- package/src/authoring/first-party-hierarchy-menu.ts +7 -2
- package/src/authoring/first-party-inspector/AddSectionMenu.tsx +5 -12
- package/src/authoring/first-party-inspector/EnvironmentSection.tsx +53 -126
- package/src/authoring/first-party-inspector/HeaderSection.tsx +54 -65
- package/src/authoring/first-party-inspector/is-first-party-selection.ts +30 -11
- package/src/authoring/first-party-inspector/register.tsx +13 -2
- package/src/authoring/ingest-authoring-adapter.ts +142 -45
- package/src/authoring/mount-failure-report.ts +5 -5
- package/src/authoring/provenance.ts +41 -0
- package/src/authoring/react-dom-authoring-adapter.ts +92 -92
- package/src/authoring/react-inspector-section.tsx +489 -51
- package/src/authoring/react-world-authoring-adapter.ts +541 -306
- package/src/authoring/story-overlay.ts +1 -1
- package/src/authoring/story-types.ts +11 -0
- package/src/authoring/vgai-scene-authoring-adapter.ts +54 -25
- package/src/authoring/viewport-tool-context.ts +78 -0
- package/src/authoring/world-canvas-viewport-state.ts +35 -0
- package/src/authoring/world-hidden-viewport.ts +186 -0
- package/src/authoring/world-pan-state.ts +33 -17
- package/src/authoring/world-session-state.ts +1 -1
- package/src/authoring/world2d-authoring-adapter.ts +109 -52
- package/src/availability-tick.ts +56 -0
- package/src/browser-play-entry.ts +5 -5
- package/src/browser-project-scripts.ts +1 -0
- package/src/build-identity.ts +15 -0
- package/src/command-listener.ts +893 -19
- package/src/components/AlignToolbar.tsx +74 -63
- package/src/components/AppRoot.tsx +193 -26
- package/src/components/ApplicationMenus.tsx +272 -0
- package/src/components/AssetBrowser.tsx +1236 -296
- package/src/components/AssetEditorShell.tsx +141 -0
- package/src/components/AssetImportDetails.tsx +218 -0
- package/src/components/AssetLibraryPanel.tsx +14 -0
- package/src/components/CameraInfo.tsx +11 -20
- package/src/components/CenterDocuments.tsx +585 -0
- package/src/components/CommandPalette.tsx +75 -30
- package/src/components/ConsolePanel.css +55 -0
- package/src/components/ConsolePanel.tsx +57 -112
- package/src/components/DebugConsolePanel.tsx +461 -0
- package/src/components/DebuggerPanel.tsx +165 -0
- package/src/components/DefaultEditorLayout.tsx +167 -231
- package/src/components/GameHierarchy.tsx +873 -290
- package/src/components/GamePerformanceOverlay.tsx +46 -0
- package/src/components/HarnessChatPanel.tsx +2352 -0
- package/src/components/HistoryPanel.tsx +226 -0
- package/src/components/Inspector.tsx +153 -99
- package/src/components/InspectorToolSection.tsx +6 -4
- package/src/components/MountFailureBanner.tsx +31 -48
- package/src/components/NetworkSection.tsx +25 -14
- package/src/components/OnlineAssetBrowser.tsx +1116 -344
- package/src/components/OverlayReportBanner.tsx +38 -64
- package/src/components/PerformancePanel.tsx +206 -0
- package/src/components/PlayBar.tsx +93 -263
- package/src/components/PrefabSaveDialog.tsx +55 -127
- package/src/components/ProjectHeader.css +60 -0
- package/src/components/ProjectHeader.tsx +170 -105
- package/src/components/ProjectScreen.tsx +246 -184
- package/src/components/ReactCanvasControls.tsx +185 -0
- package/src/components/ResolutionPicker.tsx +85 -0
- package/src/components/RootActivateDialog.tsx +39 -68
- package/src/components/SaveDialog.tsx +55 -127
- package/src/components/SaveStatus.tsx +11 -29
- package/src/components/StartupLoadingScreen.tsx +96 -0
- package/src/components/StateWatchPanel.tsx +302 -0
- package/src/components/StatsOverlay.tsx +12 -5
- package/src/components/StatusBar.tsx +64 -0
- package/src/components/ThemeManagerDialog.css +89 -0
- package/src/components/ThemeManagerDialog.tsx +371 -0
- package/src/components/ToolHost.tsx +26 -15
- package/src/components/Toolbar.tsx +117 -214
- package/src/components/VgaiVoxelLogo.tsx +89 -0
- package/src/components/ViewportOverlay.tsx +97 -172
- package/src/components/ViewportPanel.tsx +130 -31
- package/src/components/WorkspaceDock.tsx +891 -0
- package/src/components/WorldSelectionOverlay.tsx +51 -63
- package/src/components/WorldTextEditor.tsx +9 -5
- package/src/components/asset-documents.tsx +390 -0
- package/src/components/asset-editor-persistence.ts +44 -0
- package/src/components/asset-selection-section.tsx +338 -0
- package/src/components/asset-viewers/AudioViewer.tsx +73 -21
- package/src/components/asset-viewers/GenericJsonViewer.tsx +26 -11
- package/src/components/asset-viewers/ImageViewer.tsx +43 -11
- package/src/components/asset-viewers/InputMapViewer.tsx +512 -134
- package/src/components/asset-viewers/MaterialAssetEditor.tsx +540 -0
- package/src/components/asset-viewers/ModelViewer.tsx +805 -121
- package/src/components/asset-viewers/OnlineAssetDetail.tsx +177 -60
- package/src/components/asset-viewers/SourceAssetViewer.tsx +121 -0
- package/src/components/asset-workflow.css +620 -0
- package/src/components/build-documents.tsx +696 -0
- package/src/components/core-utilities.tsx +75 -0
- package/src/components/data-documents.tsx +364 -0
- package/src/components/{DataPanel.tsx → data-editor.tsx} +138 -288
- package/src/components/debugger-panel-state.ts +57 -0
- package/src/components/inspector-widgets/AlignmentGrid.tsx +8 -14
- package/src/components/inspector-widgets/BorderEditor.tsx +41 -33
- package/src/components/inspector-widgets/ColorPicker.tsx +39 -39
- package/src/components/inspector-widgets/FontPicker.tsx +13 -21
- package/src/components/inspector-widgets/GradientEditor.tsx +11 -19
- package/src/components/inspector-widgets/ScrubbableInput.tsx +6 -3
- package/src/components/inspector-widgets/ShadowEditor.tsx +20 -33
- package/src/components/inspector-widgets/shared.tsx +90 -49
- package/src/components/inspectors/AnimationSection.tsx +39 -40
- package/src/components/inspectors/AudioSection.tsx +28 -39
- package/src/components/inspectors/BoneAttachmentSection.tsx +19 -24
- package/src/components/inspectors/CameraSection.tsx +14 -23
- package/src/components/inspectors/ComponentsSection.tsx +39 -43
- package/src/components/inspectors/JointsSection.tsx +34 -43
- package/src/components/inspectors/LightSection.tsx +90 -35
- package/src/components/inspectors/MaterialSection.tsx +137 -174
- package/src/components/inspectors/MeshSection.tsx +9 -17
- package/src/components/inspectors/NavigationSection.tsx +8 -15
- package/src/components/inspectors/ParticleSection.tsx +91 -76
- package/src/components/inspectors/PhysicsSection.tsx +42 -46
- package/src/components/inspectors/PostProcessingSection.tsx +28 -36
- package/src/components/inspectors/RenderingSection.tsx +12 -20
- package/src/components/inspectors/ShadowSection.tsx +7 -8
- package/src/components/inspectors/SplineSection.tsx +31 -42
- package/src/components/inspectors/TransformSection.tsx +14 -22
- package/src/components/patterns/Dialog.tsx +95 -0
- package/src/components/patterns/Fields.tsx +44 -0
- package/src/components/patterns/List.tsx +25 -0
- package/src/components/patterns/StateSurface.tsx +40 -0
- package/src/components/patterns/Surfaces.tsx +115 -0
- package/src/components/patterns/Tabs.tsx +80 -0
- package/src/components/patterns/Toolbar.tsx +51 -0
- package/src/components/patterns/Tree.tsx +72 -0
- package/src/components/primitives/Button.tsx +46 -0
- package/src/components/primitives/ColorInput.tsx +11 -47
- package/src/components/primitives/EditorIcon.tsx +99 -0
- package/src/components/primitives/FormControls.tsx +71 -0
- package/src/components/primitives/JsonInput.tsx +15 -2
- package/src/components/primitives/Layout.tsx +100 -0
- package/src/components/primitives/Menu.tsx +105 -0
- package/src/components/primitives/NumberInput.tsx +8 -35
- package/src/components/primitives/Panel.tsx +49 -44
- package/src/components/primitives/SectionHeader.tsx +10 -28
- package/src/components/primitives/Text.tsx +46 -0
- package/src/components/primitives/Tooltip.tsx +20 -12
- package/src/components/primitives/Vec3Input.tsx +3 -0
- package/src/components/primitives/banner-tones.ts +33 -0
- package/src/components/primitives/editor-icons.ts +102 -0
- package/src/components/primitives/panel-header-styles.ts +30 -0
- package/src/components/project-operation-documents.tsx +226 -0
- package/src/components/status-contributions.tsx +175 -0
- package/src/components/story-documents-register.ts +15 -0
- package/src/components/story-documents.tsx +1185 -0
- package/src/components/tool-documents.tsx +110 -0
- package/src/components/workspace-dock.css +293 -0
- package/src/components/workspace-history.ts +33 -0
- package/src/components/world-documents.tsx +145 -0
- package/src/components/xstate-documents.tsx +209 -0
- package/src/composite-screenshot.ts +248 -0
- package/src/design-system/index.ts +70 -0
- package/src/design-system-stories/Foundation.stories.tsx +183 -0
- package/src/design-system-stories/Patterns.stories.tsx +251 -0
- package/src/design-system-stories/Workspace.stories.tsx +538 -0
- package/src/doctor/report.ts +57 -13
- package/src/editor-api.ts +295 -31
- package/src/editor-compatibility.ts +200 -0
- package/src/editor-console.ts +35 -17
- package/src/editor-hotkeys.ts +85 -33
- package/src/editor-store.ts +538 -233
- package/src/editor-viewport.ts +160 -34
- package/src/entity-factory.ts +14 -3
- package/src/gizmo-registry.ts +21 -5
- package/src/harness-chat-editor-context.ts +37 -0
- package/src/harness-chat-indicator.ts +68 -0
- package/src/harness-chat-layout.ts +53 -0
- package/src/harness-chat-lifecycle.ts +170 -0
- package/src/harness-chat-reconnect.ts +85 -0
- package/src/harness-chat-types.ts +409 -0
- package/src/hierarchy-drop.ts +50 -0
- package/src/hierarchy-expansion-state.ts +100 -0
- package/src/hierarchy-menu-registry.ts +1 -1
- package/src/hierarchy-projection.ts +76 -0
- package/src/history/editor-session.ts +21 -0
- package/src/history/history-commands.ts +147 -0
- package/src/history/history-service.ts +904 -0
- package/src/history/json-history-resource.ts +165 -0
- package/src/history/persistence-coordinator.ts +35 -0
- package/src/history/project-file-history.ts +266 -0
- package/src/history/project-root-history-backends.ts +53 -0
- package/src/history/resource-registry.ts +209 -0
- package/src/history/snapshot-store.ts +108 -0
- package/src/history/source-history-backend.ts +374 -0
- package/src/history/types.ts +100 -0
- package/src/hmr-registration-group.ts +67 -0
- package/src/hmr-stable-react-context.ts +23 -0
- package/src/hosted-example.ts +12 -2
- package/src/hotkeys.ts +89 -18
- package/src/ingest/discovery-react.ts +9 -10
- package/src/ingest/discovery.ts +4 -4
- package/src/ingest/discovery2d.ts +5 -5
- package/src/ingest/games/bloom-composer/vgai.game.json +3 -3
- package/src/ingest/games/embed-bundle/vgai.game.json +3 -3
- package/src/ingest/games/games-fps/vgai.game.json +3 -3
- package/src/ingest/games/iframe-reachable/vgai.game.json +3 -3
- package/src/ingest/games/interactive-cubes/vgai.game.json +3 -3
- package/src/ingest/games/mismatched-three/vgai.game.json +3 -3
- package/src/ingest/games/own-three-bundled/vgai.game.json +3 -3
- package/src/ingest/games/pointerlock-maze/vgai.game.json +7 -4
- package/src/ingest/games-2d/bubbo-bubbo/vgai.game.json +3 -3
- package/src/ingest/games-2d/bunnymark/vgai.game.json +3 -3
- package/src/ingest/games-2d/flappy/vgai.game.json +3 -3
- package/src/ingest/games-2d/flappy-pixi/vgai.game.json +3 -3
- package/src/ingest/games-2d/puzzling-potions/vgai.game.json +3 -3
- package/src/ingest/games-2d/tilemap-camera/vgai.game.json +3 -3
- package/src/ingest/games-react/react-rpg/vgai.game.json +3 -3
- package/src/ingest/types.ts +1 -1
- package/src/ingest-mode.ts +47 -52
- package/src/ingest-siblings.ts +23 -33
- package/src/initial-scene.ts +1 -2
- package/src/main.tsx +16 -8
- package/src/manifest-project.ts +10 -12
- package/src/model-thumbnail.ts +261 -26
- package/src/module-mode.ts +44 -50
- package/src/play-log-events.ts +26 -0
- package/src/play-mode.ts +495 -401
- package/src/play-scene-adoption.ts +23 -0
- package/src/playground/main.ts +68 -24
- package/src/playwright-shim.ts +473 -0
- package/src/project-manager.ts +90 -10
- package/src/project-operations.ts +112 -0
- package/src/project-story-discovery.ts +25 -0
- package/src/project-tool-discovery.ts +43 -0
- package/src/scene-serializer.ts +0 -6
- package/src/scene-sync.ts +7 -2
- package/src/script-loader.ts +3 -3
- package/src/skeleton-helper.ts +57 -0
- package/src/storage/seed.ts +68 -8
- package/src/stories/StoryPreviewMount.tsx +265 -0
- package/src/stories/action-stories.fixture.tsx +44 -0
- package/src/stories/button-stories.fixture.tsx +50 -0
- package/src/stories/compose-project-stories.ts +182 -0
- package/src/stories/loader-stories.fixture.tsx +53 -0
- package/src/stories/story-discovery.ts +130 -0
- package/src/stories/story-registry.ts +146 -0
- package/src/theme-css.ts +1049 -0
- package/src/theme-library.ts +238 -0
- package/src/theme-preference.ts +130 -0
- package/src/theme.ts +527 -0
- package/src/tool-loader.ts +80 -24
- package/src/ui-source/inspect.ts +27 -4
- package/src/ui-source/source-write-backend.ts +83 -22
- package/src/widgets/index.ts +9 -18
- package/src/workspace-aux-commands.ts +11 -0
- package/src/workspace-dock-controller.ts +64 -0
- package/src/workspace-document-ids.ts +5 -0
- package/src/workspace-document-registry.ts +367 -0
- package/src/workspace-state-persistence.ts +455 -0
- package/src/workspace-status-registry.ts +110 -0
- package/src/workspace-utility-commands.ts +49 -0
- package/src/workspace-utility-registry.ts +161 -0
- package/src/world-document-routing.ts +16 -0
- package/src/xstate-inspect/XStateMachineInspector.tsx +544 -0
- package/src/xstate-inspect/character-animation-machine.fixture.ts +74 -0
- package/src/xstate-inspect/use-live-actor-state.ts +39 -0
- package/src/xstate-inspect/xstate-graph.ts +265 -0
- package/src/xstate-inspect/xstate-layout.ts +76 -0
- package/src/z-index.ts +26 -0
- package/template/.claude/skills/editor/SKILL.md +129 -90
- package/template/AGENTS.md +1110 -0
- package/template/CLAUDE.md +1 -512
- package/template/IDIOMS.md +50 -0
- package/template/check-idioms.ts +706 -0
- package/template/manifest-entry-modules-plugin.ts +53 -0
- package/template/package.json +13 -4
- package/template/public/scenes/default.scn2d.json +6 -0
- package/template/public/scenes/default.vscn.json +7 -1
- package/template/public/scenes/untitled.vscn.json +10 -0
- package/template/scripts/playtest.ts +40 -0
- package/template/server/loopback.ts +75 -0
- package/template/server/rooms/arena-room.ts +69 -1
- package/template/server/rooms/game-room.ts +68 -1
- package/template/src/data/README.md +9 -4
- package/template/src/data/data-ref.ts +35 -0
- package/template/src/data/tuning.schema.ts +1 -1
- package/template/src/main.ts +41 -62
- package/template/src/manifest-entry-modules.d.ts +3 -0
- package/template/src/operations/README.md +88 -0
- package/template/src/runtime/pixi-adapter.ts +24 -0
- package/template/src/scripts/components/data-spinner.ts +43 -2
- package/template/src/scripts/components/spin-lap-math.ts +27 -0
- package/template/src/tools/README.md +5 -3
- package/template/src/tools/example.tool.tsx +13 -7
- package/template/src/ui/Button.stories.tsx +66 -0
- package/template/src/ui/RebindPanel.tsx +2 -6
- package/template/src/ui/game.tsx +17 -0
- package/template/tests/acceptance/example.spec.ts +64 -0
- package/template/tests/logic/example.test.ts +31 -0
- package/template/tests/logic/room.test.ts +100 -0
- package/template/tests/tsconfig.json +30 -0
- package/template/validate-manifest.ts +5 -5
- package/template/validate-scenes.ts +50 -18
- package/template/vgai.game.json +20 -13
- package/template/vite.config.ts +77 -16
- package/vite-plugin-ui-oid.ts +261 -17
- package/dist/assets/CCDIKSolver-Dz-ysxZF.js +0 -1
- package/dist/assets/SelectionBox-BXsv_6aH.js +0 -1
- package/dist/assets/browser-project-scripts-DOru4L1x.js +0 -2
- package/dist/assets/browserAll-CEkWYlFk.js +0 -1
- package/dist/assets/create-runtime-DYIWr3va.js +0 -1
- package/dist/assets/data-asset-Bb9sIM7i.js +0 -5
- package/dist/assets/game-8SDZPPgH.js +0 -1
- package/dist/assets/game-CevorxyV.js +0 -1
- package/dist/assets/game-Di7XlywD.js +0 -1
- package/dist/assets/game-DjnCaw8R.js +0 -1
- package/dist/assets/game-Q9A0aXSV.js +0 -1
- package/dist/assets/index-CPVV6pjw.js +0 -1
- package/dist/assets/index-CpOnYyeD.js +0 -213
- package/dist/assets/index-Dr8H_6Rl.js +0 -1
- package/dist/assets/index-_bCaipUk.js +0 -13650
- package/dist/assets/ingest-siblings-Dz8eEqrV.js +0 -1
- package/dist/assets/mount-manifest-Bhk0ohsl.js +0 -1
- package/dist/assets/scene-query-BivAHhJu.js +0 -1
- package/dist/assets/webworkerAll-BLrH0F6F.js +0 -1
- package/dist/assets/xstate-animation-binding-1NGLmw6y.js +0 -1
- package/dist/assets/xstate.esm-BgUD33nl.js +0 -3
- package/src/authoring/scene-ui-layer.ts +0 -485
- package/src/authoring/ui-authoring-adapter.ts +0 -325
- package/src/authoring/ui-hierarchy-menu.ts +0 -40
- package/src/authoring/ui-inspector-sections.tsx +0 -156
- package/src/authoring/undo-timeline.ts +0 -145
- package/src/components/BottomPanel.tsx +0 -326
- package/src/components/BuildPanel.tsx +0 -455
- package/src/components/FolderTree.tsx +0 -179
- package/src/components/RightPanel.tsx +0 -166
- package/src/components/WorldContextMenu.tsx +0 -257
- package/src/components/asset-viewers/AssetViewer.tsx +0 -38
- package/src/ingest/games-react/react-rpg/src/ui/game-state.tsx +0 -129
- package/src/scene-ui-mode/active-scene-ui.ts +0 -58
- package/src/scene-ui-mode/scene-ui-palette-panel.tsx +0 -152
- package/src/scene-ui-mode/scene-ui-timeline-tab.tsx +0 -29
- package/src/scene-ui-mode/ui-prefab-dialog-host.tsx +0 -74
- package/src/scene-ui-mode/ui-prefab-hierarchy-menu.ts +0 -49
- package/src/scene-ui-mode/ui-prefab-io.ts +0 -76
- package/src/ui-editor/inspector.tsx +0 -563
- package/src/ui-editor/node-ops.ts +0 -266
- package/src/ui-editor/overlay.tsx +0 -380
- package/src/ui-editor/palette.tsx +0 -114
- package/src/ui-editor/react-store.ts +0 -78
- package/src/ui-editor/timeline-panel.tsx +0 -443
- package/src/ui-editor/ui-edit-store.ts +0 -552
- package/src/ui-editor/ui-prefab.ts +0 -95
- package/template/project.json +0 -9
- package/template/src/scripts/main.ts +0 -94
- package/template/src/ui/DefaultHud.tsx +0 -40
- package/template/src/ui/game-state.tsx +0 -37
- package/template/src/ui/mount-default-hud.tsx +0 -19
- package/template/src/ui/mount-ui.ts +0 -15
- package/vite-plugin-react-world-provider.ts +0 -81
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b6 as S,b7 as v,b8 as U,b9 as F,ba as j,bb as H,bc as T,ax as N}from"./index-_bCaipUk.js";let B;function q(s){return B=s,s}function l(){return B}class y{constructor(e,t){this.init(e,t)}init(e,t){this.destination=e,this.source=t||e}connect(e){this.source?.connect(e)}disconnect(){this.source?.disconnect()}destroy(){this.disconnect(),this.destination=null,this.source=null}}class z extends y{constructor(e=0){let t;if(!l().useLegacy){const{audioContext:i}=l().context;t=i.createWaveShaper()}super(t),this._distortion=t,this.amount=e}set amount(e){if(this._amount=e,l().useLegacy)return;const t=e*1e3,i=44100,n=new Float32Array(i),o=Math.PI/180;let r=0,a;for(;r<i;++r)a=r*2/i-1,n[r]=(3+t)*a*20*o/(Math.PI+t*Math.abs(a));this._distortion.curve=n,this._distortion.oversample="4x"}get amount(){return this._amount}destroy(){this._distortion=null,super.destroy()}}class _{static setParamValue(e,t){if(e.setValueAtTime){const i=l().context;e.setValueAtTime(t,i.audioContext.currentTime)}else e.value=t;return t}}const u=class extends y{constructor(s=0,e=0,t=0,i=0,n=0,o=0,r=0,a=0,h=0,d=0){let c=[];const g=[{f:u.F32,type:"lowshelf",gain:s},{f:u.F64,type:"peaking",gain:e},{f:u.F125,type:"peaking",gain:t},{f:u.F250,type:"peaking",gain:i},{f:u.F500,type:"peaking",gain:n},{f:u.F1K,type:"peaking",gain:o},{f:u.F2K,type:"peaking",gain:r},{f:u.F4K,type:"peaking",gain:a},{f:u.F8K,type:"peaking",gain:h},{f:u.F16K,type:"highshelf",gain:d}];l().useLegacy||(c=g.map(f=>{const p=l().context.audioContext.createBiquadFilter();return p.type=f.type,_.setParamValue(p.Q,1),p.frequency.value=f.f,_.setParamValue(p.gain,f.gain),p})),super(c[0],c[c.length-1]),this.bands=c,this.bandsMap={};for(let f=0;f<this.bands.length;f++){const p=this.bands[f];f>0&&this.bands[f-1].connect(p),this.bandsMap[p.frequency.value]=p}}setGain(s,e=0){if(!this.bandsMap[s])throw new Error(`No band found for frequency ${s}`);_.setParamValue(this.bandsMap[s].gain,e)}getGain(s){if(!this.bandsMap[s])throw new Error(`No band found for frequency ${s}`);return this.bandsMap[s].gain.value}set f32(s){this.setGain(u.F32,s)}get f32(){return this.getGain(u.F32)}set f64(s){this.setGain(u.F64,s)}get f64(){return this.getGain(u.F64)}set f125(s){this.setGain(u.F125,s)}get f125(){return this.getGain(u.F125)}set f250(s){this.setGain(u.F250,s)}get f250(){return this.getGain(u.F250)}set f500(s){this.setGain(u.F500,s)}get f500(){return this.getGain(u.F500)}set f1k(s){this.setGain(u.F1K,s)}get f1k(){return this.getGain(u.F1K)}set f2k(s){this.setGain(u.F2K,s)}get f2k(){return this.getGain(u.F2K)}set f4k(s){this.setGain(u.F4K,s)}get f4k(){return this.getGain(u.F4K)}set f8k(s){this.setGain(u.F8K,s)}get f8k(){return this.getGain(u.F8K)}set f16k(s){this.setGain(u.F16K,s)}get f16k(){return this.getGain(u.F16K)}reset(){this.bands.forEach(s=>{_.setParamValue(s.gain,0)})}destroy(){this.bands.forEach(s=>{s.disconnect()}),this.bands=null,this.bandsMap=null}};let m=u;m.F32=32;m.F64=64;m.F125=125;m.F250=250;m.F500=500;m.F1K=1e3;m.F2K=2e3;m.F4K=4e3;m.F8K=8e3;m.F16K=16e3;class Q extends y{constructor(){let e,t;if(!l().useLegacy){const{audioContext:i}=l().context;t=i.createChannelSplitter(),e=i.createChannelMerger(),e.connect(t)}super(e,t),this._merger=e}destroy(){this._merger?.disconnect(),this._merger=null,super.destroy()}}class W extends y{constructor(e=3,t=2,i=!1){super(null),this._seconds=this._clamp(e,1,50),this._decay=this._clamp(t,0,100),this._reverse=i,this._rebuild()}_clamp(e,t,i){return Math.min(i,Math.max(t,e))}get seconds(){return this._seconds}set seconds(e){this._seconds=this._clamp(e,1,50),this._rebuild()}get decay(){return this._decay}set decay(e){this._decay=this._clamp(e,0,100),this._rebuild()}get reverse(){return this._reverse}set reverse(e){this._reverse=e,this._rebuild()}_rebuild(){if(l().useLegacy)return;const{audioContext:e}=l().context,t=e.sampleRate,i=t*this._seconds,n=e.createBuffer(2,i,t),o=n.getChannelData(0),r=n.getChannelData(1);let a;for(let d=0;d<i;d++)a=this._reverse?i-d:d,o[d]=(Math.random()*2-1)*Math.pow(1-a/i,this._decay),r[d]=(Math.random()*2-1)*Math.pow(1-a/i,this._decay);const h=e.createConvolver();h.buffer=n,this.init(h)}}class Y extends y{constructor(e=0){let t,i,n;if(!l().useLegacy){const{audioContext:o}=l().context;o.createStereoPanner?(t=o.createStereoPanner(),n=t):(i=o.createPanner(),i.panningModel="equalpower",n=i)}super(n),this._stereo=t,this._panner=i,this.pan=e}set pan(e){this._pan=e,this._stereo?_.setParamValue(this._stereo.pan,e):this._panner&&this._panner.setPosition(e,0,1-Math.abs(e))}get pan(){return this._pan}destroy(){super.destroy(),this._stereo=null,this._panner=null}}class Z extends y{constructor(){let e,t;if(!l().useLegacy){const{audioContext:i}=l().context;e=i.createMediaStreamDestination(),t=i.createMediaStreamSource(e.stream)}super(e,t),this._stream=e?.stream}get stream(){return this._stream}destroy(){this._stream=null,super.destroy()}}class J extends y{constructor(){let e,t;if(!l().useLegacy){const{audioContext:i}=l().context,n=i.createBiquadFilter(),o=i.createBiquadFilter(),r=i.createBiquadFilter(),a=i.createBiquadFilter();n.type="lowpass",_.setParamValue(n.frequency,2e3),o.type="lowpass",_.setParamValue(o.frequency,2e3),r.type="highpass",_.setParamValue(r.frequency,500),a.type="highpass",_.setParamValue(a.frequency,500),n.connect(o),o.connect(r),r.connect(a),e=n,t=a}super(e,t)}}const ue=Object.freeze(Object.defineProperty({__proto__:null,DistortionFilter:z,EqualizerFilter:m,Filter:y,MonoFilter:Q,ReverbFilter:W,StereoFilter:Y,StreamFilter:Z,TelephoneFilter:J},Symbol.toStringTag,{value:"Module"}));class I extends S{constructor(){super(...arguments),this.speed=1,this.muted=!1,this.volume=1,this.paused=!1}refresh(){this.emit("refresh")}refreshPaused(){this.emit("refreshPaused")}get filters(){return console.warn("HTML Audio does not support filters"),null}set filters(e){console.warn("HTML Audio does not support filters")}get audioContext(){return console.warn("HTML Audio does not support audioContext"),null}toggleMute(){return this.muted=!this.muted,this.refresh(),this.muted}togglePause(){return this.paused=!this.paused,this.refreshPaused(),this.paused}destroy(){this.removeAllListeners()}}let X=0;const C=class extends S{constructor(s){super(),this.id=X++,this.init(s)}set(s,e){if(this[s]===void 0)throw new Error(`Property with name ${s} does not exist.`);switch(s){case"speed":this.speed=e;break;case"volume":this.volume=e;break;case"paused":this.paused=e;break;case"loop":this.loop=e;break;case"muted":this.muted=e;break}return this}get progress(){const{currentTime:s}=this._source;return s/this._duration}get paused(){return this._paused}set paused(s){this._paused=s,this.refreshPaused()}_onPlay(){this._playing=!0}_onPause(){this._playing=!1}init(s){this._playing=!1,this._duration=s.source.duration;const e=this._source=s.source.cloneNode(!1);e.src=s.parent.url,e.onplay=this._onPlay.bind(this),e.onpause=this._onPause.bind(this),s.context.on("refresh",this.refresh,this),s.context.on("refreshPaused",this.refreshPaused,this),this._media=s}_internalStop(){this._source&&this._playing&&(this._source.onended=null,this._source.pause())}stop(){this._internalStop(),this._source&&this.emit("stop")}get speed(){return this._speed}set speed(s){this._speed=s,this.refresh()}get volume(){return this._volume}set volume(s){this._volume=s,this.refresh()}get loop(){return this._loop}set loop(s){this._loop=s,this.refresh()}get muted(){return this._muted}set muted(s){this._muted=s,this.refresh()}get filters(){return console.warn("HTML Audio does not support filters"),null}set filters(s){console.warn("HTML Audio does not support filters")}refresh(){const s=this._media.context,e=this._media.parent;this._source.loop=this._loop||e.loop;const t=s.volume*(s.muted?0:1),i=e.volume*(e.muted?0:1),n=this._volume*(this._muted?0:1);this._source.volume=n*t*i,this._source.playbackRate=this._speed*s.speed*e.speed}refreshPaused(){const s=this._media.context,e=this._media.parent,t=this._paused||e.paused||s.paused;t!==this._pausedReal&&(this._pausedReal=t,t?(this._internalStop(),this.emit("paused")):(this.emit("resumed"),this.play({start:this._source.currentTime,end:this._end,volume:this._volume,speed:this._speed,loop:this._loop})),this.emit("pause",t))}play(s){const{start:e,end:t,speed:i,loop:n,volume:o,muted:r}=s;t&&console.assert(t>e,"End time is before start time"),this._speed=i,this._volume=o,this._loop=!!n,this._muted=r,this.refresh(),this.loop&&t!==null&&(console.warn('Looping not support when specifying an "end" time'),this.loop=!1),this._start=e,this._end=t||this._duration,this._start=Math.max(0,this._start-C.PADDING),this._end=Math.min(this._end+C.PADDING,this._duration),this._source.onloadedmetadata=()=>{this._source&&(this._source.currentTime=e,this._source.onloadedmetadata=null,this.emit("progress",e/this._duration,this._duration),v.shared.add(this._onUpdate,this))},this._source.onended=this._onComplete.bind(this),this._source.play(),this.emit("start")}_onUpdate(){this.emit("progress",this.progress,this._duration),this._source.currentTime>=this._end&&!this._source.loop&&this._onComplete()}_onComplete(){v.shared.remove(this._onUpdate,this),this._internalStop(),this.emit("progress",1,this._duration),this.emit("end",this)}destroy(){v.shared.remove(this._onUpdate,this),this.removeAllListeners();const s=this._source;s&&(s.onended=null,s.onplay=null,s.onpause=null,this._internalStop()),this._source=null,this._speed=1,this._volume=1,this._loop=!1,this._end=null,this._start=0,this._duration=0,this._playing=!1,this._pausedReal=!1,this._paused=!1,this._muted=!1,this._media&&(this._media.context.off("refresh",this.refresh,this),this._media.context.off("refreshPaused",this.refreshPaused,this),this._media=null)}toString(){return`[HTMLAudioInstance id=${this.id}]`}};let E=C;E.PADDING=.1;class G extends S{init(e){this.parent=e,this._source=e.options.source||new Audio,e.url&&(this._source.src=e.url)}create(){return new E(this)}get isPlayable(){return!!this._source&&this._source.readyState===4}get duration(){return this._source.duration}get context(){return this.parent.context}get filters(){return null}set filters(e){console.warn("HTML Audio does not support filters")}destroy(){this.removeAllListeners(),this.parent=null,this._source&&(this._source.src="",this._source.load(),this._source=null)}get source(){return this._source}load(e){const t=this._source,i=this.parent;if(t.readyState===4){i.isLoaded=!0;const h=i.autoPlayStart();e&&setTimeout(()=>{e(null,i,h)},0);return}if(!i.url){e(new Error("sound.url or sound.source must be set"));return}t.src=i.url;const n=()=>{a(),i.isLoaded=!0;const h=i.autoPlayStart();e&&e(null,i,h)},o=()=>{a(),e&&e(new Error("Sound loading has been aborted"))},r=()=>{a();const h=`Failed to load audio element (code: ${t.error.code})`;e?e(new Error(h)):console.error(h)},a=()=>{t.removeEventListener("canplaythrough",n),t.removeEventListener("load",n),t.removeEventListener("abort",o),t.removeEventListener("error",r)};t.addEventListener("canplaythrough",n,!1),t.addEventListener("load",n,!1),t.addEventListener("abort",o,!1),t.addEventListener("error",r,!1),t.load()}}const he=Object.freeze(Object.defineProperty({__proto__:null,HTMLAudioContext:I,HTMLAudioInstance:E,HTMLAudioMedia:G},Symbol.toStringTag,{value:"Module"}));class ee{constructor(e,t){this.parent=e,Object.assign(this,t),this.duration=this.end-this.start,console.assert(this.duration>0,"End time must be after start time")}play(e){return this.parent.play({complete:e,speed:this.speed||this.parent.speed,end:this.end,start:this.start,loop:this.loop})}destroy(){this.parent=null}}const P=["ogg","oga","opus","m4a","mp3","mpeg","wav","aiff","wma","mid","caf"],O=["audio/mpeg","audio/ogg"],A={};function R(s){const e={m4a:"audio/mp4",oga:"audio/ogg",opus:'audio/ogg; codecs="opus"',caf:'audio/x-caf; codecs="opus"',...s||{}},t=document.createElement("audio"),i={},n=/^no$/;P.forEach(o=>{const r=t.canPlayType(`audio/${o}`).replace(n,""),a=e[o]?t.canPlayType(e[o]).replace(n,""):"";i[o]=!!r||!!a}),Object.assign(A,i)}R();let te=0;class V extends S{constructor(e){super(),this.id=te++,this._media=null,this._paused=!1,this._muted=!1,this._elapsed=0,this.init(e)}set(e,t){if(this[e]===void 0)throw new Error(`Property with name ${e} does not exist.`);switch(e){case"speed":this.speed=t;break;case"volume":this.volume=t;break;case"muted":this.muted=t;break;case"loop":this.loop=t;break;case"paused":this.paused=t;break}return this}stop(){this._source&&(this._internalStop(),this.emit("stop"))}get speed(){return this._speed}set speed(e){this._speed=e,this.refresh(),this._update(!0)}get volume(){return this._volume}set volume(e){this._volume=e,this.refresh()}get muted(){return this._muted}set muted(e){this._muted=e,this.refresh()}get loop(){return this._loop}set loop(e){this._loop=e,this.refresh()}get filters(){return this._filters}set filters(e){this._filters&&(this._filters?.filter(t=>t).forEach(t=>t.disconnect()),this._filters=null,this._source.connect(this._gain)),this._filters=e?.length?e.slice(0):null,this.refresh()}refresh(){if(!this._source)return;const e=this._media.context,t=this._media.parent;this._source.loop=this._loop||t.loop;const i=e.volume*(e.muted?0:1),n=t.volume*(t.muted?0:1),o=this._volume*(this._muted?0:1);_.setParamValue(this._gain.gain,o*n*i),_.setParamValue(this._source.playbackRate,this._speed*t.speed*e.speed),this.applyFilters()}applyFilters(){if(this._filters?.length){this._source.disconnect();let e=this._source;this._filters.forEach(t=>{e.connect(t.destination),e=t}),e.connect(this._gain)}}refreshPaused(){const e=this._media.context,t=this._media.parent,i=this._paused||t.paused||e.paused;i!==this._pausedReal&&(this._pausedReal=i,i?(this._internalStop(),this.emit("paused")):(this.emit("resumed"),this.play({start:this._elapsed%this._duration,end:this._end,speed:this._speed,loop:this._loop,volume:this._volume})),this.emit("pause",i))}play(e){const{start:t,end:i,speed:n,loop:o,volume:r,muted:a,filters:h}=e;i&&console.assert(i>t,"End time is before start time"),this._paused=!1;const{source:d,gain:c}=this._media.nodes.cloneBufferSource();this._source=d,this._gain=c,this._speed=n,this._volume=r,this._loop=!!o,this._muted=a,this._filters=h,this.refresh();const g=this._source.buffer.duration;this._duration=g,this._end=i,this._lastUpdate=this._now(),this._elapsed=t,this._source.onended=this._onComplete.bind(this),this._loop?(this._source.loopEnd=i,this._source.loopStart=t,this._source.start(0,t)):i?this._source.start(0,t,i-t):this._source.start(0,t),this.emit("start"),this._update(!0),this.enableTicker(!0)}enableTicker(e){v.shared.remove(this._updateListener,this),e&&v.shared.add(this._updateListener,this)}get progress(){return this._progress}get paused(){return this._paused}set paused(e){this._paused=e,this.refreshPaused()}destroy(){this.removeAllListeners(),this._internalStop(),this._gain&&(this._gain.disconnect(),this._gain=null),this._media&&(this._media.context.events.off("refresh",this.refresh,this),this._media.context.events.off("refreshPaused",this.refreshPaused,this),this._media=null),this._filters?.forEach(e=>e.disconnect()),this._filters=null,this._end=null,this._speed=1,this._volume=1,this._loop=!1,this._elapsed=0,this._duration=0,this._paused=!1,this._muted=!1,this._pausedReal=!1}toString(){return`[WebAudioInstance id=${this.id}]`}_now(){return this._media.context.audioContext.currentTime}_updateListener(){this._update()}_update(e=!1){if(this._source){const t=this._now(),i=t-this._lastUpdate;if(i>0||e){const n=this._source.playbackRate.value;this._elapsed+=i*n,this._lastUpdate=t;const o=this._duration;let r;if(this._source.loopStart){const a=this._source.loopEnd-this._source.loopStart;r=(this._source.loopStart+this._elapsed%a)/o}else r=this._elapsed%o/o;this._progress=r,this.emit("progress",this._progress,o)}}}init(e){this._media=e,e.context.events.on("refresh",this.refresh,this),e.context.events.on("refreshPaused",this.refreshPaused,this)}_internalStop(){if(this._source){this.enableTicker(!1),this._source.onended=null,this._source.stop(0),this._source.disconnect();try{this._source.buffer=null}catch(e){console.warn("Failed to set AudioBufferSourceNode.buffer to null:",e)}this._source=null}}_onComplete(){if(this._source){this.enableTicker(!1),this._source.onended=null,this._source.disconnect();try{this._source.buffer=null}catch(e){console.warn("Failed to set AudioBufferSourceNode.buffer to null:",e)}}this._source=null,this._progress=1,this.emit("progress",1,this._duration),this.emit("end",this)}}class K{constructor(e,t){this._output=t,this._input=e}get destination(){return this._input}get filters(){return this._filters}set filters(e){if(this._filters&&(this._filters.forEach(t=>{t&&t.disconnect()}),this._filters=null,this._input.connect(this._output)),e&&e.length){this._filters=e.slice(0),this._input.disconnect();let t=null;e.forEach(i=>{t===null?this._input.connect(i.destination):t.connect(i.destination),t=i}),t.connect(this._output)}}destroy(){this.filters=null,this._input=null,this._output=null}}const $=class extends K{constructor(s){const e=s.audioContext,t=e.createBufferSource(),i=e.createGain(),n=e.createAnalyser();t.connect(n),n.connect(i),i.connect(s.destination),super(n,i),this.context=s,this.bufferSource=t,this.gain=i,this.analyser=n}get script(){return this._script||(this._script=this.context.audioContext.createScriptProcessor($.BUFFER_SIZE),this._script.connect(this.context.destination)),this._script}destroy(){super.destroy(),this.bufferSource.disconnect(),this._script&&this._script.disconnect(),this.gain.disconnect(),this.analyser.disconnect(),this.bufferSource=null,this._script=null,this.gain=null,this.analyser=null,this.context=null}cloneBufferSource(){const s=this.bufferSource,e=this.context.audioContext.createBufferSource();e.buffer=s.buffer,_.setParamValue(e.playbackRate,s.playbackRate.value),e.loop=s.loop;const t=this.context.audioContext.createGain();return e.connect(t),t.connect(this.destination),{source:e,gain:t}}get bufferSize(){return this.script.bufferSize}};let M=$;M.BUFFER_SIZE=0;class L{init(e){this.parent=e,this._nodes=new M(this.context),this._source=this._nodes.bufferSource,this.source=e.options.source}destroy(){this.parent=null,this._nodes.destroy(),this._nodes=null;try{this._source.buffer=null}catch(e){console.warn("Failed to set AudioBufferSourceNode.buffer to null:",e)}this._source=null,this.source=null}create(){return new V(this)}get context(){return this.parent.context}get isPlayable(){return!!this._source&&!!this._source.buffer}get filters(){return this._nodes.filters}set filters(e){this._nodes.filters=e}get duration(){return console.assert(this.isPlayable,"Sound not yet playable, no duration"),this._source.buffer.duration}get buffer(){return this._source.buffer}set buffer(e){this._source.buffer=e}get nodes(){return this._nodes}load(e){this.source?this._decode(this.source,e):this.parent.url?this._loadUrl(e):e?e(new Error("sound.url or sound.source must be set")):console.error("sound.url or sound.source must be set")}async _loadUrl(e){const t=this.parent.url,i=await U.get().fetch(t);this._decode(await i.arrayBuffer(),e)}_decode(e,t){const i=(n,o)=>{if(n)t&&t(n);else{this.parent.isLoaded=!0,this.buffer=o;const r=this.parent.autoPlayStart();t&&t(null,this.parent,r)}};e instanceof AudioBuffer?i(null,e):this.parent.context.decode(e,i)}}const x=class{static from(s){let e={};typeof s=="string"?e.url=s:s instanceof ArrayBuffer||s instanceof AudioBuffer||s instanceof HTMLAudioElement?e.source=s:Array.isArray(s)?e.url=s:e=s,e={autoPlay:!1,singleInstance:!1,url:null,source:null,preload:!1,volume:1,speed:1,complete:null,loaded:null,loop:!1,...e},Object.freeze(e);const t=l().useLegacy?new G:new L;return new x(t,e)}constructor(s,e){this.media=s,this.options=e,this._instances=[],this._sprites={},this.media.init(this);const t=e.complete;this._autoPlayOptions=t?{complete:t}:null,this.isLoaded=!1,this._preloadQueue=null,this.isPlaying=!1,this.autoPlay=e.autoPlay,this.singleInstance=e.singleInstance,this.preload=e.preload||this.autoPlay,this.url=Array.isArray(e.url)?this.preferUrl(e.url):e.url,this.speed=e.speed,this.volume=e.volume,this.loop=e.loop,e.sprites&&this.addSprites(e.sprites),this.preload&&this._preload(e.loaded)}preferUrl(s){const[e]=s.map(t=>({url:t,ext:F.extname(t).slice(1)})).filter(({ext:t})=>A[t]).sort((t,i)=>P.indexOf(t.ext)-P.indexOf(i.ext));if(!e)throw new Error("No supported file type found");return e.url}get context(){return l().context}pause(){return this.isPlaying=!1,this.paused=!0,this}resume(){return this.isPlaying=this._instances.length>0,this.paused=!1,this}get paused(){return this._paused}set paused(s){this._paused=s,this.refreshPaused()}get speed(){return this._speed}set speed(s){this._speed=s,this.refresh()}get filters(){return this.media.filters}set filters(s){this.media.filters=s}addSprites(s,e){if(typeof s=="object"){const i={};for(const n in s)i[n]=this.addSprites(n,s[n]);return i}console.assert(!this._sprites[s],`Alias ${s} is already taken`);const t=new ee(this,e);return this._sprites[s]=t,t}destroy(){this._removeInstances(),this.removeSprites(),this.media.destroy(),this.media=null,this._sprites=null,this._instances=null}removeSprites(s){if(s){const e=this._sprites[s];e!==void 0&&(e.destroy(),delete this._sprites[s])}else for(const e in this._sprites)this.removeSprites(e);return this}get isPlayable(){return this.isLoaded&&this.media&&this.media.isPlayable}stop(){if(!this.isPlayable)return this.autoPlay=!1,this._autoPlayOptions=null,this;this.isPlaying=!1;for(let s=this._instances.length-1;s>=0;s--)this._instances[s].stop();return this}play(s,e){let t;if(typeof s=="string"?t={sprite:s,loop:this.loop,complete:e}:typeof s=="function"?(t={},t.complete=s):t=s,t={complete:null,loaded:null,sprite:null,end:null,start:0,volume:1,speed:1,muted:!1,loop:!1,...t||{}},t.sprite){const n=t.sprite;console.assert(!!this._sprites[n],`Alias ${n} is not available`);const o=this._sprites[n];t.start=o.start+(t.start||0),t.end=o.end,t.speed=o.speed||1,t.loop=o.loop||t.loop,delete t.sprite}if(t.offset&&(t.start=t.offset),!this.isLoaded)return this._preloadQueue?new Promise(n=>{this._preloadQueue.push(()=>{n(this.play(t))})}):(this._preloadQueue=[],this.autoPlay=!0,this._autoPlayOptions=t,new Promise((n,o)=>{this._preload((r,a,h)=>{this._preloadQueue.forEach(d=>d()),this._preloadQueue=null,r?o(r):(t.loaded&&t.loaded(r,a,h),n(h))})}));(this.singleInstance||t.singleInstance)&&this._removeInstances();const i=this._createInstance();return this._instances.push(i),this.isPlaying=!0,i.once("end",()=>{t.complete&&t.complete(this),this._onComplete(i)}),i.once("stop",()=>{this._onComplete(i)}),i.play(t),i}refresh(){const s=this._instances.length;for(let e=0;e<s;e++)this._instances[e].refresh()}refreshPaused(){const s=this._instances.length;for(let e=0;e<s;e++)this._instances[e].refreshPaused()}get volume(){return this._volume}set volume(s){this._volume=s,this.refresh()}get muted(){return this._muted}set muted(s){this._muted=s,this.refresh()}get loop(){return this._loop}set loop(s){this._loop=s,this.refresh()}_preload(s){this.media.load(s)}get instances(){return this._instances}get sprites(){return this._sprites}get duration(){return this.media.duration}autoPlayStart(){let s;return this.autoPlay&&(s=this.play(this._autoPlayOptions)),s}_removeInstances(){for(let s=this._instances.length-1;s>=0;s--)this._poolInstance(this._instances[s]);this._instances.length=0}_onComplete(s){if(this._instances){const e=this._instances.indexOf(s);e>-1&&this._instances.splice(e,1),this.isPlaying=this._instances.length>0}this._poolInstance(s)}_createInstance(){if(x._pool.length>0){const s=x._pool.pop();return s.init(this.media),s}return this.media.create()}_poolInstance(s){s.destroy(),x._pool.indexOf(s)<0&&x._pool.push(s)}};let w=x;w._pool=[];class b extends K{constructor(){const e=window,t=new b.AudioContext,i=t.createDynamicsCompressor(),n=t.createAnalyser();n.connect(i),i.connect(t.destination),super(n,i),this.autoPause=!0,this._ctx=t,this._offlineCtx=new b.OfflineAudioContext(1,2,e.OfflineAudioContext?Math.max(8e3,Math.min(96e3,t.sampleRate)):44100),this.compressor=i,this.analyser=n,this.events=new S,this.volume=1,this.speed=1,this.muted=!1,this.paused=!1,this._locked=t.state==="suspended"&&("ontouchstart"in globalThis||"onclick"in globalThis),this._locked&&(this._unlock(),this._unlock=this._unlock.bind(this),document.addEventListener("mousedown",this._unlock,!0),document.addEventListener("touchstart",this._unlock,!0),document.addEventListener("touchend",this._unlock,!0)),this.onFocus=this.onFocus.bind(this),this.onBlur=this.onBlur.bind(this),globalThis.addEventListener("focus",this.onFocus),globalThis.addEventListener("blur",this.onBlur)}onFocus(){if(!this.autoPause)return;const e=this._ctx.state;(e==="suspended"||e==="interrupted"||!this._locked)&&(this.paused=this._pausedOnBlur,this.refreshPaused())}onBlur(){this.autoPause&&(this._locked||(this._pausedOnBlur=this._paused,this.paused=!0,this.refreshPaused()))}_unlock(){this._locked&&(this.playEmptySound(),this._ctx.state==="running"&&(document.removeEventListener("mousedown",this._unlock,!0),document.removeEventListener("touchend",this._unlock,!0),document.removeEventListener("touchstart",this._unlock,!0),this._locked=!1))}playEmptySound(){const e=this._ctx.createBufferSource();e.buffer=this._ctx.createBuffer(1,1,22050),e.connect(this._ctx.destination),e.start(0,0,0),e.context.state==="suspended"&&e.context.resume()}static get AudioContext(){const e=window;return e.AudioContext||e.webkitAudioContext||null}static get OfflineAudioContext(){const e=window;return e.OfflineAudioContext||e.webkitOfflineAudioContext||null}destroy(){super.destroy();const e=this._ctx;typeof e.close<"u"&&e.close(),globalThis.removeEventListener("focus",this.onFocus),globalThis.removeEventListener("blur",this.onBlur),this.events.removeAllListeners(),this.analyser.disconnect(),this.compressor.disconnect(),this.analyser=null,this.compressor=null,this.events=null,this._offlineCtx=null,this._ctx=null}get audioContext(){return this._ctx}get offlineContext(){return this._offlineCtx}set paused(e){e&&this._ctx.state==="running"?this._ctx.suspend():!e&&this._ctx.state==="suspended"&&this._ctx.resume(),this._paused=e}get paused(){return this._paused}refresh(){this.events.emit("refresh")}refreshPaused(){this.events.emit("refreshPaused")}toggleMute(){return this.muted=!this.muted,this.refresh(),this.muted}togglePause(){return this.paused=!this.paused,this.refreshPaused(),this._paused}decode(e,t){const i=o=>{t(new Error(o?.message||"Unable to decode file"))},n=this._offlineCtx.decodeAudioData(e,o=>{t(null,o)},i);n&&n.catch(i)}}class se{constructor(){this.init()}init(){return this.supported&&(this._webAudioContext=new b),this._htmlAudioContext=new I,this._sounds={},this.useLegacy=!this.supported,this}get context(){return this._context}get filtersAll(){return this.useLegacy?[]:this._context.filters}set filtersAll(e){this.useLegacy||(this._context.filters=e)}get supported(){return b.AudioContext!==null}add(e,t){if(typeof e=="object"){const o={};for(const r in e){const a=this._getOptions(e[r],t);o[r]=this.add(r,a)}return o}if(console.assert(!this._sounds[e],`Sound with alias ${e} already exists.`),t instanceof w)return this._sounds[e]=t,t;const i=this._getOptions(t),n=w.from(i);return this._sounds[e]=n,n}_getOptions(e,t){let i;return typeof e=="string"?i={url:e}:Array.isArray(e)?i={url:e}:e instanceof ArrayBuffer||e instanceof AudioBuffer||e instanceof HTMLAudioElement?i={source:e}:i=e,i={...i,...t||{}},i}get useLegacy(){return this._useLegacy}set useLegacy(e){this._useLegacy=e,this._context=!e&&this.supported?this._webAudioContext:this._htmlAudioContext}get disableAutoPause(){return!this._webAudioContext.autoPause}set disableAutoPause(e){this._webAudioContext.autoPause=!e}remove(e){return this.exists(e,!0),this._sounds[e].destroy(),delete this._sounds[e],this}get volumeAll(){return this._context.volume}set volumeAll(e){this._context.volume=e,this._context.refresh()}get speedAll(){return this._context.speed}set speedAll(e){this._context.speed=e,this._context.refresh()}togglePauseAll(){return this._context.togglePause()}pauseAll(){return this._context.paused=!0,this._context.refreshPaused(),this}resumeAll(){return this._context.paused=!1,this._context.refreshPaused(),this}toggleMuteAll(){return this._context.toggleMute()}muteAll(){return this._context.muted=!0,this._context.refresh(),this}unmuteAll(){return this._context.muted=!1,this._context.refresh(),this}removeAll(){for(const e in this._sounds)this._sounds[e].destroy(),delete this._sounds[e];return this}stopAll(){for(const e in this._sounds)this._sounds[e].stop();return this}exists(e,t=!1){const i=!!this._sounds[e];return t&&console.assert(i,`No sound matching alias '${e}'.`),i}isPlaying(){for(const e in this._sounds)if(this._sounds[e].isPlaying)return!0;return!1}find(e){return this.exists(e,!0),this._sounds[e]}play(e,t){return this.find(e).play(t)}stop(e){return this.find(e).stop()}pause(e){return this.find(e).pause()}resume(e){return this.find(e).resume()}volume(e,t){const i=this.find(e);return t!==void 0&&(i.volume=t),i.volume}speed(e,t){const i=this.find(e);return t!==void 0&&(i.speed=t),i.speed}duration(e){return this.find(e).duration}close(){return this.removeAll(),this._sounds=null,this._webAudioContext&&(this._webAudioContext.destroy(),this._webAudioContext=null),this._htmlAudioContext&&(this._htmlAudioContext.destroy(),this._htmlAudioContext=null),this._context=null,this}}let D=0;function ie(s,e){const t=`alias${D++}`;return l().add(t,{url:s,preload:!0,autoPlay:!0,loaded:i=>{i&&(console.error(i),l().remove(t),e&&e(i))},complete:()=>{l().remove(t),e&&e(null)}}),t}function ne(s,e){const t=document.createElement("canvas");e={width:512,height:128,fill:"black",...e||{}},t.width=e.width,t.height=e.height;const i=new j({resource:t});if(!(s.media instanceof L))return i;const n=s.media;console.assert(!!n.buffer,"No buffer found, load first");const o=t.getContext("2d");o.fillStyle=e.fill;const r=n.buffer.getChannelData(0),a=Math.ceil(r.length/e.width),h=e.height/2;for(let d=0;d<e.width;d++){let c=1,g=-1;for(let f=0;f<a;f++){const p=r[d*a+f];p<c&&(c=p),p>g&&(g=p)}o.fillRect(d,(1+c)*h,1,Math.max(1,(g-c)*h))}return i}function oe(s=200,e=1){const t=w.from({singleInstance:!0});if(!(t.media instanceof L))return t;const i=t.media,n=t.context,o=1,r=48e3,a=2,h=n.audioContext.createBuffer(o,e*r,r),d=h.getChannelData(0);for(let c=0;c<d.length;c++){const g=c/h.sampleRate,f=s*g*2*Math.PI;d[c]=Math.sin(f)*a}return i.buffer=h,t.isLoaded=!0,t}const le=Object.freeze(Object.defineProperty({__proto__:null,get PLAY_ID(){return D},extensions:P,mimes:O,playOnce:ie,render:ne,sineTone:oe,supported:A,validateFormats:R},Symbol.toStringTag,{value:"Module"})),de=Object.freeze(Object.defineProperty({__proto__:null,WebAudioContext:b,WebAudioInstance:V,WebAudioMedia:L,WebAudioNodes:M,WebAudioUtils:_},Symbol.toStringTag,{value:"Module"})),k=s=>{const e=s.src;let t=s?.alias?.[0];return(!t||s.src===t)&&(t=F.basename(e,F.extname(e))),t},re={extension:T.Asset,detection:{test:async()=>!0,add:async s=>[...s,...P.filter(e=>A[e])],remove:async s=>s.filter(e=>s.includes(e))},loader:{name:"sound",extension:{type:[T.LoadParser],priority:H.High},test(s){const e=F.extname(s).slice(1);return!!A[e]||O.some(t=>s.startsWith(`data:${t}`))},async load(s,e){const t=await new Promise((i,n)=>w.from({...e.data,url:s,preload:!0,loaded(o,r){o?n(o):i(r),e.data?.loaded?.(o,r)}}));return l().add(k(e),t),t},async unload(s,e){l().remove(k(e))}}};N.add(re);const ce=q(new se);export{y as Filter,K as Filterable,w as Sound,se as SoundLibrary,ee as SoundSprite,ue as filters,he as htmlaudio,ce as sound,re as soundAsset,le as utils,de as webaudio};
|
|
1
|
+
import{bl as S,bm as v,bn as U,bo as F,bp as j,bq as q,br as T,ag as H}from"./index-B-HA1uu3.js";let B;function N(s){return B=s,s}function l(){return B}class y{constructor(e,t){this.init(e,t)}init(e,t){this.destination=e,this.source=t||e}connect(e){this.source?.connect(e)}disconnect(){this.source?.disconnect()}destroy(){this.disconnect(),this.destination=null,this.source=null}}class z extends y{constructor(e=0){let t;if(!l().useLegacy){const{audioContext:i}=l().context;t=i.createWaveShaper()}super(t),this._distortion=t,this.amount=e}set amount(e){if(this._amount=e,l().useLegacy)return;const t=e*1e3,i=44100,n=new Float32Array(i),o=Math.PI/180;let r=0,a;for(;r<i;++r)a=r*2/i-1,n[r]=(3+t)*a*20*o/(Math.PI+t*Math.abs(a));this._distortion.curve=n,this._distortion.oversample="4x"}get amount(){return this._amount}destroy(){this._distortion=null,super.destroy()}}class _{static setParamValue(e,t){if(e.setValueAtTime){const i=l().context;e.setValueAtTime(t,i.audioContext.currentTime)}else e.value=t;return t}}const u=class extends y{constructor(s=0,e=0,t=0,i=0,n=0,o=0,r=0,a=0,h=0,d=0){let c=[];const g=[{f:u.F32,type:"lowshelf",gain:s},{f:u.F64,type:"peaking",gain:e},{f:u.F125,type:"peaking",gain:t},{f:u.F250,type:"peaking",gain:i},{f:u.F500,type:"peaking",gain:n},{f:u.F1K,type:"peaking",gain:o},{f:u.F2K,type:"peaking",gain:r},{f:u.F4K,type:"peaking",gain:a},{f:u.F8K,type:"peaking",gain:h},{f:u.F16K,type:"highshelf",gain:d}];l().useLegacy||(c=g.map(f=>{const p=l().context.audioContext.createBiquadFilter();return p.type=f.type,_.setParamValue(p.Q,1),p.frequency.value=f.f,_.setParamValue(p.gain,f.gain),p})),super(c[0],c[c.length-1]),this.bands=c,this.bandsMap={};for(let f=0;f<this.bands.length;f++){const p=this.bands[f];f>0&&this.bands[f-1].connect(p),this.bandsMap[p.frequency.value]=p}}setGain(s,e=0){if(!this.bandsMap[s])throw new Error(`No band found for frequency ${s}`);_.setParamValue(this.bandsMap[s].gain,e)}getGain(s){if(!this.bandsMap[s])throw new Error(`No band found for frequency ${s}`);return this.bandsMap[s].gain.value}set f32(s){this.setGain(u.F32,s)}get f32(){return this.getGain(u.F32)}set f64(s){this.setGain(u.F64,s)}get f64(){return this.getGain(u.F64)}set f125(s){this.setGain(u.F125,s)}get f125(){return this.getGain(u.F125)}set f250(s){this.setGain(u.F250,s)}get f250(){return this.getGain(u.F250)}set f500(s){this.setGain(u.F500,s)}get f500(){return this.getGain(u.F500)}set f1k(s){this.setGain(u.F1K,s)}get f1k(){return this.getGain(u.F1K)}set f2k(s){this.setGain(u.F2K,s)}get f2k(){return this.getGain(u.F2K)}set f4k(s){this.setGain(u.F4K,s)}get f4k(){return this.getGain(u.F4K)}set f8k(s){this.setGain(u.F8K,s)}get f8k(){return this.getGain(u.F8K)}set f16k(s){this.setGain(u.F16K,s)}get f16k(){return this.getGain(u.F16K)}reset(){this.bands.forEach(s=>{_.setParamValue(s.gain,0)})}destroy(){this.bands.forEach(s=>{s.disconnect()}),this.bands=null,this.bandsMap=null}};let m=u;m.F32=32;m.F64=64;m.F125=125;m.F250=250;m.F500=500;m.F1K=1e3;m.F2K=2e3;m.F4K=4e3;m.F8K=8e3;m.F16K=16e3;class Q extends y{constructor(){let e,t;if(!l().useLegacy){const{audioContext:i}=l().context;t=i.createChannelSplitter(),e=i.createChannelMerger(),e.connect(t)}super(e,t),this._merger=e}destroy(){this._merger?.disconnect(),this._merger=null,super.destroy()}}class W extends y{constructor(e=3,t=2,i=!1){super(null),this._seconds=this._clamp(e,1,50),this._decay=this._clamp(t,0,100),this._reverse=i,this._rebuild()}_clamp(e,t,i){return Math.min(i,Math.max(t,e))}get seconds(){return this._seconds}set seconds(e){this._seconds=this._clamp(e,1,50),this._rebuild()}get decay(){return this._decay}set decay(e){this._decay=this._clamp(e,0,100),this._rebuild()}get reverse(){return this._reverse}set reverse(e){this._reverse=e,this._rebuild()}_rebuild(){if(l().useLegacy)return;const{audioContext:e}=l().context,t=e.sampleRate,i=t*this._seconds,n=e.createBuffer(2,i,t),o=n.getChannelData(0),r=n.getChannelData(1);let a;for(let d=0;d<i;d++)a=this._reverse?i-d:d,o[d]=(Math.random()*2-1)*Math.pow(1-a/i,this._decay),r[d]=(Math.random()*2-1)*Math.pow(1-a/i,this._decay);const h=e.createConvolver();h.buffer=n,this.init(h)}}class Y extends y{constructor(e=0){let t,i,n;if(!l().useLegacy){const{audioContext:o}=l().context;o.createStereoPanner?(t=o.createStereoPanner(),n=t):(i=o.createPanner(),i.panningModel="equalpower",n=i)}super(n),this._stereo=t,this._panner=i,this.pan=e}set pan(e){this._pan=e,this._stereo?_.setParamValue(this._stereo.pan,e):this._panner&&this._panner.setPosition(e,0,1-Math.abs(e))}get pan(){return this._pan}destroy(){super.destroy(),this._stereo=null,this._panner=null}}class Z extends y{constructor(){let e,t;if(!l().useLegacy){const{audioContext:i}=l().context;e=i.createMediaStreamDestination(),t=i.createMediaStreamSource(e.stream)}super(e,t),this._stream=e?.stream}get stream(){return this._stream}destroy(){this._stream=null,super.destroy()}}class J extends y{constructor(){let e,t;if(!l().useLegacy){const{audioContext:i}=l().context,n=i.createBiquadFilter(),o=i.createBiquadFilter(),r=i.createBiquadFilter(),a=i.createBiquadFilter();n.type="lowpass",_.setParamValue(n.frequency,2e3),o.type="lowpass",_.setParamValue(o.frequency,2e3),r.type="highpass",_.setParamValue(r.frequency,500),a.type="highpass",_.setParamValue(a.frequency,500),n.connect(o),o.connect(r),r.connect(a),e=n,t=a}super(e,t)}}const ue=Object.freeze(Object.defineProperty({__proto__:null,DistortionFilter:z,EqualizerFilter:m,Filter:y,MonoFilter:Q,ReverbFilter:W,StereoFilter:Y,StreamFilter:Z,TelephoneFilter:J},Symbol.toStringTag,{value:"Module"}));class I extends S{constructor(){super(...arguments),this.speed=1,this.muted=!1,this.volume=1,this.paused=!1}refresh(){this.emit("refresh")}refreshPaused(){this.emit("refreshPaused")}get filters(){return console.warn("HTML Audio does not support filters"),null}set filters(e){console.warn("HTML Audio does not support filters")}get audioContext(){return console.warn("HTML Audio does not support audioContext"),null}toggleMute(){return this.muted=!this.muted,this.refresh(),this.muted}togglePause(){return this.paused=!this.paused,this.refreshPaused(),this.paused}destroy(){this.removeAllListeners()}}let X=0;const C=class extends S{constructor(s){super(),this.id=X++,this.init(s)}set(s,e){if(this[s]===void 0)throw new Error(`Property with name ${s} does not exist.`);switch(s){case"speed":this.speed=e;break;case"volume":this.volume=e;break;case"paused":this.paused=e;break;case"loop":this.loop=e;break;case"muted":this.muted=e;break}return this}get progress(){const{currentTime:s}=this._source;return s/this._duration}get paused(){return this._paused}set paused(s){this._paused=s,this.refreshPaused()}_onPlay(){this._playing=!0}_onPause(){this._playing=!1}init(s){this._playing=!1,this._duration=s.source.duration;const e=this._source=s.source.cloneNode(!1);e.src=s.parent.url,e.onplay=this._onPlay.bind(this),e.onpause=this._onPause.bind(this),s.context.on("refresh",this.refresh,this),s.context.on("refreshPaused",this.refreshPaused,this),this._media=s}_internalStop(){this._source&&this._playing&&(this._source.onended=null,this._source.pause())}stop(){this._internalStop(),this._source&&this.emit("stop")}get speed(){return this._speed}set speed(s){this._speed=s,this.refresh()}get volume(){return this._volume}set volume(s){this._volume=s,this.refresh()}get loop(){return this._loop}set loop(s){this._loop=s,this.refresh()}get muted(){return this._muted}set muted(s){this._muted=s,this.refresh()}get filters(){return console.warn("HTML Audio does not support filters"),null}set filters(s){console.warn("HTML Audio does not support filters")}refresh(){const s=this._media.context,e=this._media.parent;this._source.loop=this._loop||e.loop;const t=s.volume*(s.muted?0:1),i=e.volume*(e.muted?0:1),n=this._volume*(this._muted?0:1);this._source.volume=n*t*i,this._source.playbackRate=this._speed*s.speed*e.speed}refreshPaused(){const s=this._media.context,e=this._media.parent,t=this._paused||e.paused||s.paused;t!==this._pausedReal&&(this._pausedReal=t,t?(this._internalStop(),this.emit("paused")):(this.emit("resumed"),this.play({start:this._source.currentTime,end:this._end,volume:this._volume,speed:this._speed,loop:this._loop})),this.emit("pause",t))}play(s){const{start:e,end:t,speed:i,loop:n,volume:o,muted:r}=s;t&&console.assert(t>e,"End time is before start time"),this._speed=i,this._volume=o,this._loop=!!n,this._muted=r,this.refresh(),this.loop&&t!==null&&(console.warn('Looping not support when specifying an "end" time'),this.loop=!1),this._start=e,this._end=t||this._duration,this._start=Math.max(0,this._start-C.PADDING),this._end=Math.min(this._end+C.PADDING,this._duration),this._source.onloadedmetadata=()=>{this._source&&(this._source.currentTime=e,this._source.onloadedmetadata=null,this.emit("progress",e/this._duration,this._duration),v.shared.add(this._onUpdate,this))},this._source.onended=this._onComplete.bind(this),this._source.play(),this.emit("start")}_onUpdate(){this.emit("progress",this.progress,this._duration),this._source.currentTime>=this._end&&!this._source.loop&&this._onComplete()}_onComplete(){v.shared.remove(this._onUpdate,this),this._internalStop(),this.emit("progress",1,this._duration),this.emit("end",this)}destroy(){v.shared.remove(this._onUpdate,this),this.removeAllListeners();const s=this._source;s&&(s.onended=null,s.onplay=null,s.onpause=null,this._internalStop()),this._source=null,this._speed=1,this._volume=1,this._loop=!1,this._end=null,this._start=0,this._duration=0,this._playing=!1,this._pausedReal=!1,this._paused=!1,this._muted=!1,this._media&&(this._media.context.off("refresh",this.refresh,this),this._media.context.off("refreshPaused",this.refreshPaused,this),this._media=null)}toString(){return`[HTMLAudioInstance id=${this.id}]`}};let E=C;E.PADDING=.1;class G extends S{init(e){this.parent=e,this._source=e.options.source||new Audio,e.url&&(this._source.src=e.url)}create(){return new E(this)}get isPlayable(){return!!this._source&&this._source.readyState===4}get duration(){return this._source.duration}get context(){return this.parent.context}get filters(){return null}set filters(e){console.warn("HTML Audio does not support filters")}destroy(){this.removeAllListeners(),this.parent=null,this._source&&(this._source.src="",this._source.load(),this._source=null)}get source(){return this._source}load(e){const t=this._source,i=this.parent;if(t.readyState===4){i.isLoaded=!0;const h=i.autoPlayStart();e&&setTimeout(()=>{e(null,i,h)},0);return}if(!i.url){e(new Error("sound.url or sound.source must be set"));return}t.src=i.url;const n=()=>{a(),i.isLoaded=!0;const h=i.autoPlayStart();e&&e(null,i,h)},o=()=>{a(),e&&e(new Error("Sound loading has been aborted"))},r=()=>{a();const h=`Failed to load audio element (code: ${t.error.code})`;e?e(new Error(h)):console.error(h)},a=()=>{t.removeEventListener("canplaythrough",n),t.removeEventListener("load",n),t.removeEventListener("abort",o),t.removeEventListener("error",r)};t.addEventListener("canplaythrough",n,!1),t.addEventListener("load",n,!1),t.addEventListener("abort",o,!1),t.addEventListener("error",r,!1),t.load()}}const he=Object.freeze(Object.defineProperty({__proto__:null,HTMLAudioContext:I,HTMLAudioInstance:E,HTMLAudioMedia:G},Symbol.toStringTag,{value:"Module"}));class ee{constructor(e,t){this.parent=e,Object.assign(this,t),this.duration=this.end-this.start,console.assert(this.duration>0,"End time must be after start time")}play(e){return this.parent.play({complete:e,speed:this.speed||this.parent.speed,end:this.end,start:this.start,loop:this.loop})}destroy(){this.parent=null}}const P=["ogg","oga","opus","m4a","mp3","mpeg","wav","aiff","wma","mid","caf"],O=["audio/mpeg","audio/ogg"],A={};function R(s){const e={m4a:"audio/mp4",oga:"audio/ogg",opus:'audio/ogg; codecs="opus"',caf:'audio/x-caf; codecs="opus"',...s||{}},t=document.createElement("audio"),i={},n=/^no$/;P.forEach(o=>{const r=t.canPlayType(`audio/${o}`).replace(n,""),a=e[o]?t.canPlayType(e[o]).replace(n,""):"";i[o]=!!r||!!a}),Object.assign(A,i)}R();let te=0;class V extends S{constructor(e){super(),this.id=te++,this._media=null,this._paused=!1,this._muted=!1,this._elapsed=0,this.init(e)}set(e,t){if(this[e]===void 0)throw new Error(`Property with name ${e} does not exist.`);switch(e){case"speed":this.speed=t;break;case"volume":this.volume=t;break;case"muted":this.muted=t;break;case"loop":this.loop=t;break;case"paused":this.paused=t;break}return this}stop(){this._source&&(this._internalStop(),this.emit("stop"))}get speed(){return this._speed}set speed(e){this._speed=e,this.refresh(),this._update(!0)}get volume(){return this._volume}set volume(e){this._volume=e,this.refresh()}get muted(){return this._muted}set muted(e){this._muted=e,this.refresh()}get loop(){return this._loop}set loop(e){this._loop=e,this.refresh()}get filters(){return this._filters}set filters(e){this._filters&&(this._filters?.filter(t=>t).forEach(t=>t.disconnect()),this._filters=null,this._source.connect(this._gain)),this._filters=e?.length?e.slice(0):null,this.refresh()}refresh(){if(!this._source)return;const e=this._media.context,t=this._media.parent;this._source.loop=this._loop||t.loop;const i=e.volume*(e.muted?0:1),n=t.volume*(t.muted?0:1),o=this._volume*(this._muted?0:1);_.setParamValue(this._gain.gain,o*n*i),_.setParamValue(this._source.playbackRate,this._speed*t.speed*e.speed),this.applyFilters()}applyFilters(){if(this._filters?.length){this._source.disconnect();let e=this._source;this._filters.forEach(t=>{e.connect(t.destination),e=t}),e.connect(this._gain)}}refreshPaused(){const e=this._media.context,t=this._media.parent,i=this._paused||t.paused||e.paused;i!==this._pausedReal&&(this._pausedReal=i,i?(this._internalStop(),this.emit("paused")):(this.emit("resumed"),this.play({start:this._elapsed%this._duration,end:this._end,speed:this._speed,loop:this._loop,volume:this._volume})),this.emit("pause",i))}play(e){const{start:t,end:i,speed:n,loop:o,volume:r,muted:a,filters:h}=e;i&&console.assert(i>t,"End time is before start time"),this._paused=!1;const{source:d,gain:c}=this._media.nodes.cloneBufferSource();this._source=d,this._gain=c,this._speed=n,this._volume=r,this._loop=!!o,this._muted=a,this._filters=h,this.refresh();const g=this._source.buffer.duration;this._duration=g,this._end=i,this._lastUpdate=this._now(),this._elapsed=t,this._source.onended=this._onComplete.bind(this),this._loop?(this._source.loopEnd=i,this._source.loopStart=t,this._source.start(0,t)):i?this._source.start(0,t,i-t):this._source.start(0,t),this.emit("start"),this._update(!0),this.enableTicker(!0)}enableTicker(e){v.shared.remove(this._updateListener,this),e&&v.shared.add(this._updateListener,this)}get progress(){return this._progress}get paused(){return this._paused}set paused(e){this._paused=e,this.refreshPaused()}destroy(){this.removeAllListeners(),this._internalStop(),this._gain&&(this._gain.disconnect(),this._gain=null),this._media&&(this._media.context.events.off("refresh",this.refresh,this),this._media.context.events.off("refreshPaused",this.refreshPaused,this),this._media=null),this._filters?.forEach(e=>e.disconnect()),this._filters=null,this._end=null,this._speed=1,this._volume=1,this._loop=!1,this._elapsed=0,this._duration=0,this._paused=!1,this._muted=!1,this._pausedReal=!1}toString(){return`[WebAudioInstance id=${this.id}]`}_now(){return this._media.context.audioContext.currentTime}_updateListener(){this._update()}_update(e=!1){if(this._source){const t=this._now(),i=t-this._lastUpdate;if(i>0||e){const n=this._source.playbackRate.value;this._elapsed+=i*n,this._lastUpdate=t;const o=this._duration;let r;if(this._source.loopStart){const a=this._source.loopEnd-this._source.loopStart;r=(this._source.loopStart+this._elapsed%a)/o}else r=this._elapsed%o/o;this._progress=r,this.emit("progress",this._progress,o)}}}init(e){this._media=e,e.context.events.on("refresh",this.refresh,this),e.context.events.on("refreshPaused",this.refreshPaused,this)}_internalStop(){if(this._source){this.enableTicker(!1),this._source.onended=null,this._source.stop(0),this._source.disconnect();try{this._source.buffer=null}catch(e){console.warn("Failed to set AudioBufferSourceNode.buffer to null:",e)}this._source=null}}_onComplete(){if(this._source){this.enableTicker(!1),this._source.onended=null,this._source.disconnect();try{this._source.buffer=null}catch(e){console.warn("Failed to set AudioBufferSourceNode.buffer to null:",e)}}this._source=null,this._progress=1,this.emit("progress",1,this._duration),this.emit("end",this)}}class K{constructor(e,t){this._output=t,this._input=e}get destination(){return this._input}get filters(){return this._filters}set filters(e){if(this._filters&&(this._filters.forEach(t=>{t&&t.disconnect()}),this._filters=null,this._input.connect(this._output)),e&&e.length){this._filters=e.slice(0),this._input.disconnect();let t=null;e.forEach(i=>{t===null?this._input.connect(i.destination):t.connect(i.destination),t=i}),t.connect(this._output)}}destroy(){this.filters=null,this._input=null,this._output=null}}const $=class extends K{constructor(s){const e=s.audioContext,t=e.createBufferSource(),i=e.createGain(),n=e.createAnalyser();t.connect(n),n.connect(i),i.connect(s.destination),super(n,i),this.context=s,this.bufferSource=t,this.gain=i,this.analyser=n}get script(){return this._script||(this._script=this.context.audioContext.createScriptProcessor($.BUFFER_SIZE),this._script.connect(this.context.destination)),this._script}destroy(){super.destroy(),this.bufferSource.disconnect(),this._script&&this._script.disconnect(),this.gain.disconnect(),this.analyser.disconnect(),this.bufferSource=null,this._script=null,this.gain=null,this.analyser=null,this.context=null}cloneBufferSource(){const s=this.bufferSource,e=this.context.audioContext.createBufferSource();e.buffer=s.buffer,_.setParamValue(e.playbackRate,s.playbackRate.value),e.loop=s.loop;const t=this.context.audioContext.createGain();return e.connect(t),t.connect(this.destination),{source:e,gain:t}}get bufferSize(){return this.script.bufferSize}};let M=$;M.BUFFER_SIZE=0;class L{init(e){this.parent=e,this._nodes=new M(this.context),this._source=this._nodes.bufferSource,this.source=e.options.source}destroy(){this.parent=null,this._nodes.destroy(),this._nodes=null;try{this._source.buffer=null}catch(e){console.warn("Failed to set AudioBufferSourceNode.buffer to null:",e)}this._source=null,this.source=null}create(){return new V(this)}get context(){return this.parent.context}get isPlayable(){return!!this._source&&!!this._source.buffer}get filters(){return this._nodes.filters}set filters(e){this._nodes.filters=e}get duration(){return console.assert(this.isPlayable,"Sound not yet playable, no duration"),this._source.buffer.duration}get buffer(){return this._source.buffer}set buffer(e){this._source.buffer=e}get nodes(){return this._nodes}load(e){this.source?this._decode(this.source,e):this.parent.url?this._loadUrl(e):e?e(new Error("sound.url or sound.source must be set")):console.error("sound.url or sound.source must be set")}async _loadUrl(e){const t=this.parent.url,i=await U.get().fetch(t);this._decode(await i.arrayBuffer(),e)}_decode(e,t){const i=(n,o)=>{if(n)t&&t(n);else{this.parent.isLoaded=!0,this.buffer=o;const r=this.parent.autoPlayStart();t&&t(null,this.parent,r)}};e instanceof AudioBuffer?i(null,e):this.parent.context.decode(e,i)}}const x=class{static from(s){let e={};typeof s=="string"?e.url=s:s instanceof ArrayBuffer||s instanceof AudioBuffer||s instanceof HTMLAudioElement?e.source=s:Array.isArray(s)?e.url=s:e=s,e={autoPlay:!1,singleInstance:!1,url:null,source:null,preload:!1,volume:1,speed:1,complete:null,loaded:null,loop:!1,...e},Object.freeze(e);const t=l().useLegacy?new G:new L;return new x(t,e)}constructor(s,e){this.media=s,this.options=e,this._instances=[],this._sprites={},this.media.init(this);const t=e.complete;this._autoPlayOptions=t?{complete:t}:null,this.isLoaded=!1,this._preloadQueue=null,this.isPlaying=!1,this.autoPlay=e.autoPlay,this.singleInstance=e.singleInstance,this.preload=e.preload||this.autoPlay,this.url=Array.isArray(e.url)?this.preferUrl(e.url):e.url,this.speed=e.speed,this.volume=e.volume,this.loop=e.loop,e.sprites&&this.addSprites(e.sprites),this.preload&&this._preload(e.loaded)}preferUrl(s){const[e]=s.map(t=>({url:t,ext:F.extname(t).slice(1)})).filter(({ext:t})=>A[t]).sort((t,i)=>P.indexOf(t.ext)-P.indexOf(i.ext));if(!e)throw new Error("No supported file type found");return e.url}get context(){return l().context}pause(){return this.isPlaying=!1,this.paused=!0,this}resume(){return this.isPlaying=this._instances.length>0,this.paused=!1,this}get paused(){return this._paused}set paused(s){this._paused=s,this.refreshPaused()}get speed(){return this._speed}set speed(s){this._speed=s,this.refresh()}get filters(){return this.media.filters}set filters(s){this.media.filters=s}addSprites(s,e){if(typeof s=="object"){const i={};for(const n in s)i[n]=this.addSprites(n,s[n]);return i}console.assert(!this._sprites[s],`Alias ${s} is already taken`);const t=new ee(this,e);return this._sprites[s]=t,t}destroy(){this._removeInstances(),this.removeSprites(),this.media.destroy(),this.media=null,this._sprites=null,this._instances=null}removeSprites(s){if(s){const e=this._sprites[s];e!==void 0&&(e.destroy(),delete this._sprites[s])}else for(const e in this._sprites)this.removeSprites(e);return this}get isPlayable(){return this.isLoaded&&this.media&&this.media.isPlayable}stop(){if(!this.isPlayable)return this.autoPlay=!1,this._autoPlayOptions=null,this;this.isPlaying=!1;for(let s=this._instances.length-1;s>=0;s--)this._instances[s].stop();return this}play(s,e){let t;if(typeof s=="string"?t={sprite:s,loop:this.loop,complete:e}:typeof s=="function"?(t={},t.complete=s):t=s,t={complete:null,loaded:null,sprite:null,end:null,start:0,volume:1,speed:1,muted:!1,loop:!1,...t||{}},t.sprite){const n=t.sprite;console.assert(!!this._sprites[n],`Alias ${n} is not available`);const o=this._sprites[n];t.start=o.start+(t.start||0),t.end=o.end,t.speed=o.speed||1,t.loop=o.loop||t.loop,delete t.sprite}if(t.offset&&(t.start=t.offset),!this.isLoaded)return this._preloadQueue?new Promise(n=>{this._preloadQueue.push(()=>{n(this.play(t))})}):(this._preloadQueue=[],this.autoPlay=!0,this._autoPlayOptions=t,new Promise((n,o)=>{this._preload((r,a,h)=>{this._preloadQueue.forEach(d=>d()),this._preloadQueue=null,r?o(r):(t.loaded&&t.loaded(r,a,h),n(h))})}));(this.singleInstance||t.singleInstance)&&this._removeInstances();const i=this._createInstance();return this._instances.push(i),this.isPlaying=!0,i.once("end",()=>{t.complete&&t.complete(this),this._onComplete(i)}),i.once("stop",()=>{this._onComplete(i)}),i.play(t),i}refresh(){const s=this._instances.length;for(let e=0;e<s;e++)this._instances[e].refresh()}refreshPaused(){const s=this._instances.length;for(let e=0;e<s;e++)this._instances[e].refreshPaused()}get volume(){return this._volume}set volume(s){this._volume=s,this.refresh()}get muted(){return this._muted}set muted(s){this._muted=s,this.refresh()}get loop(){return this._loop}set loop(s){this._loop=s,this.refresh()}_preload(s){this.media.load(s)}get instances(){return this._instances}get sprites(){return this._sprites}get duration(){return this.media.duration}autoPlayStart(){let s;return this.autoPlay&&(s=this.play(this._autoPlayOptions)),s}_removeInstances(){for(let s=this._instances.length-1;s>=0;s--)this._poolInstance(this._instances[s]);this._instances.length=0}_onComplete(s){if(this._instances){const e=this._instances.indexOf(s);e>-1&&this._instances.splice(e,1),this.isPlaying=this._instances.length>0}this._poolInstance(s)}_createInstance(){if(x._pool.length>0){const s=x._pool.pop();return s.init(this.media),s}return this.media.create()}_poolInstance(s){s.destroy(),x._pool.indexOf(s)<0&&x._pool.push(s)}};let w=x;w._pool=[];class b extends K{constructor(){const e=window,t=new b.AudioContext,i=t.createDynamicsCompressor(),n=t.createAnalyser();n.connect(i),i.connect(t.destination),super(n,i),this.autoPause=!0,this._ctx=t,this._offlineCtx=new b.OfflineAudioContext(1,2,e.OfflineAudioContext?Math.max(8e3,Math.min(96e3,t.sampleRate)):44100),this.compressor=i,this.analyser=n,this.events=new S,this.volume=1,this.speed=1,this.muted=!1,this.paused=!1,this._locked=t.state==="suspended"&&("ontouchstart"in globalThis||"onclick"in globalThis),this._locked&&(this._unlock(),this._unlock=this._unlock.bind(this),document.addEventListener("mousedown",this._unlock,!0),document.addEventListener("touchstart",this._unlock,!0),document.addEventListener("touchend",this._unlock,!0)),this.onFocus=this.onFocus.bind(this),this.onBlur=this.onBlur.bind(this),globalThis.addEventListener("focus",this.onFocus),globalThis.addEventListener("blur",this.onBlur)}onFocus(){if(!this.autoPause)return;const e=this._ctx.state;(e==="suspended"||e==="interrupted"||!this._locked)&&(this.paused=this._pausedOnBlur,this.refreshPaused())}onBlur(){this.autoPause&&(this._locked||(this._pausedOnBlur=this._paused,this.paused=!0,this.refreshPaused()))}_unlock(){this._locked&&(this.playEmptySound(),this._ctx.state==="running"&&(document.removeEventListener("mousedown",this._unlock,!0),document.removeEventListener("touchend",this._unlock,!0),document.removeEventListener("touchstart",this._unlock,!0),this._locked=!1))}playEmptySound(){const e=this._ctx.createBufferSource();e.buffer=this._ctx.createBuffer(1,1,22050),e.connect(this._ctx.destination),e.start(0,0,0),e.context.state==="suspended"&&e.context.resume()}static get AudioContext(){const e=window;return e.AudioContext||e.webkitAudioContext||null}static get OfflineAudioContext(){const e=window;return e.OfflineAudioContext||e.webkitOfflineAudioContext||null}destroy(){super.destroy();const e=this._ctx;typeof e.close<"u"&&e.close(),globalThis.removeEventListener("focus",this.onFocus),globalThis.removeEventListener("blur",this.onBlur),this.events.removeAllListeners(),this.analyser.disconnect(),this.compressor.disconnect(),this.analyser=null,this.compressor=null,this.events=null,this._offlineCtx=null,this._ctx=null}get audioContext(){return this._ctx}get offlineContext(){return this._offlineCtx}set paused(e){e&&this._ctx.state==="running"?this._ctx.suspend():!e&&this._ctx.state==="suspended"&&this._ctx.resume(),this._paused=e}get paused(){return this._paused}refresh(){this.events.emit("refresh")}refreshPaused(){this.events.emit("refreshPaused")}toggleMute(){return this.muted=!this.muted,this.refresh(),this.muted}togglePause(){return this.paused=!this.paused,this.refreshPaused(),this._paused}decode(e,t){const i=o=>{t(new Error(o?.message||"Unable to decode file"))},n=this._offlineCtx.decodeAudioData(e,o=>{t(null,o)},i);n&&n.catch(i)}}class se{constructor(){this.init()}init(){return this.supported&&(this._webAudioContext=new b),this._htmlAudioContext=new I,this._sounds={},this.useLegacy=!this.supported,this}get context(){return this._context}get filtersAll(){return this.useLegacy?[]:this._context.filters}set filtersAll(e){this.useLegacy||(this._context.filters=e)}get supported(){return b.AudioContext!==null}add(e,t){if(typeof e=="object"){const o={};for(const r in e){const a=this._getOptions(e[r],t);o[r]=this.add(r,a)}return o}if(console.assert(!this._sounds[e],`Sound with alias ${e} already exists.`),t instanceof w)return this._sounds[e]=t,t;const i=this._getOptions(t),n=w.from(i);return this._sounds[e]=n,n}_getOptions(e,t){let i;return typeof e=="string"?i={url:e}:Array.isArray(e)?i={url:e}:e instanceof ArrayBuffer||e instanceof AudioBuffer||e instanceof HTMLAudioElement?i={source:e}:i=e,i={...i,...t||{}},i}get useLegacy(){return this._useLegacy}set useLegacy(e){this._useLegacy=e,this._context=!e&&this.supported?this._webAudioContext:this._htmlAudioContext}get disableAutoPause(){return!this._webAudioContext.autoPause}set disableAutoPause(e){this._webAudioContext.autoPause=!e}remove(e){return this.exists(e,!0),this._sounds[e].destroy(),delete this._sounds[e],this}get volumeAll(){return this._context.volume}set volumeAll(e){this._context.volume=e,this._context.refresh()}get speedAll(){return this._context.speed}set speedAll(e){this._context.speed=e,this._context.refresh()}togglePauseAll(){return this._context.togglePause()}pauseAll(){return this._context.paused=!0,this._context.refreshPaused(),this}resumeAll(){return this._context.paused=!1,this._context.refreshPaused(),this}toggleMuteAll(){return this._context.toggleMute()}muteAll(){return this._context.muted=!0,this._context.refresh(),this}unmuteAll(){return this._context.muted=!1,this._context.refresh(),this}removeAll(){for(const e in this._sounds)this._sounds[e].destroy(),delete this._sounds[e];return this}stopAll(){for(const e in this._sounds)this._sounds[e].stop();return this}exists(e,t=!1){const i=!!this._sounds[e];return t&&console.assert(i,`No sound matching alias '${e}'.`),i}isPlaying(){for(const e in this._sounds)if(this._sounds[e].isPlaying)return!0;return!1}find(e){return this.exists(e,!0),this._sounds[e]}play(e,t){return this.find(e).play(t)}stop(e){return this.find(e).stop()}pause(e){return this.find(e).pause()}resume(e){return this.find(e).resume()}volume(e,t){const i=this.find(e);return t!==void 0&&(i.volume=t),i.volume}speed(e,t){const i=this.find(e);return t!==void 0&&(i.speed=t),i.speed}duration(e){return this.find(e).duration}close(){return this.removeAll(),this._sounds=null,this._webAudioContext&&(this._webAudioContext.destroy(),this._webAudioContext=null),this._htmlAudioContext&&(this._htmlAudioContext.destroy(),this._htmlAudioContext=null),this._context=null,this}}let D=0;function ie(s,e){const t=`alias${D++}`;return l().add(t,{url:s,preload:!0,autoPlay:!0,loaded:i=>{i&&(console.error(i),l().remove(t),e&&e(i))},complete:()=>{l().remove(t),e&&e(null)}}),t}function ne(s,e){const t=document.createElement("canvas");e={width:512,height:128,fill:"black",...e||{}},t.width=e.width,t.height=e.height;const i=new j({resource:t});if(!(s.media instanceof L))return i;const n=s.media;console.assert(!!n.buffer,"No buffer found, load first");const o=t.getContext("2d");o.fillStyle=e.fill;const r=n.buffer.getChannelData(0),a=Math.ceil(r.length/e.width),h=e.height/2;for(let d=0;d<e.width;d++){let c=1,g=-1;for(let f=0;f<a;f++){const p=r[d*a+f];p<c&&(c=p),p>g&&(g=p)}o.fillRect(d,(1+c)*h,1,Math.max(1,(g-c)*h))}return i}function oe(s=200,e=1){const t=w.from({singleInstance:!0});if(!(t.media instanceof L))return t;const i=t.media,n=t.context,o=1,r=48e3,a=2,h=n.audioContext.createBuffer(o,e*r,r),d=h.getChannelData(0);for(let c=0;c<d.length;c++){const g=c/h.sampleRate,f=s*g*2*Math.PI;d[c]=Math.sin(f)*a}return i.buffer=h,t.isLoaded=!0,t}const le=Object.freeze(Object.defineProperty({__proto__:null,get PLAY_ID(){return D},extensions:P,mimes:O,playOnce:ie,render:ne,sineTone:oe,supported:A,validateFormats:R},Symbol.toStringTag,{value:"Module"})),de=Object.freeze(Object.defineProperty({__proto__:null,WebAudioContext:b,WebAudioInstance:V,WebAudioMedia:L,WebAudioNodes:M,WebAudioUtils:_},Symbol.toStringTag,{value:"Module"})),k=s=>{const e=s.src;let t=s?.alias?.[0];return(!t||s.src===t)&&(t=F.basename(e,F.extname(e))),t},re={extension:T.Asset,detection:{test:async()=>!0,add:async s=>[...s,...P.filter(e=>A[e])],remove:async s=>s.filter(e=>s.includes(e))},loader:{name:"sound",extension:{type:[T.LoadParser],priority:q.High},test(s){const e=F.extname(s).slice(1);return!!A[e]||O.some(t=>s.startsWith(`data:${t}`))},async load(s,e){const t=await new Promise((i,n)=>w.from({...e.data,url:s,preload:!0,loaded(o,r){o?n(o):i(r),e.data?.loaded?.(o,r)}}));return l().add(k(e),t),t},async unload(s,e){l().remove(k(e))}}};H.add(re);const ce=N(new se);export{y as Filter,K as Filterable,w as Sound,se as SoundLibrary,ee as SoundSprite,ue as filters,he as htmlaudio,ce as sound,re as soundAsset,le as utils,de as webaudio};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.vgai-asset-library-panel{width:100%;height:100%;min-width:0;min-height:0;overflow:hidden}.vgai-asset-library-navigator{display:flex;flex-direction:column;width:100%;height:100%;min-width:0;min-height:0;color:var(--vgai-text-1);background:var(--vgai-bg-1)}.vgai-asset-library-navigator__controls{display:flex;flex-direction:column;gap:5px;padding:6px;border-bottom:1px solid var(--vgai-border-1);background:var(--vgai-bg-2)}.vgai-asset-library-navigator__search-row{display:flex;gap:4px}.vgai-asset-library-navigator__search-row>.vgai-input{width:100%;min-width:0;box-sizing:border-box}.vgai-asset-library-navigator__filters{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px}.vgai-asset-library-navigator__filters .vgai-select{width:100%;min-width:0}.vgai-asset-library-navigator__status{color:var(--vgai-text-3);font-size:10px}.vgai-asset-library-navigator__results{flex:1;min-height:0;overflow:auto;padding:4px}.vgai-asset-library-navigator__result-space{position:relative}.vgai-asset-library-navigator__filter-drawer{min-height:0;max-height:58%;overflow:auto;border-bottom:1px solid var(--vgai-border-1);background:var(--vgai-bg-2)}.vgai-asset-library-navigator__filter-heading{position:sticky;z-index:1;top:0;display:flex;align-items:center;justify-content:space-between;padding:5px 7px;border-bottom:1px solid var(--vgai-border-1);background:var(--vgai-bg-2);color:var(--vgai-text-2);font-size:10px;font-weight:650}.vgai-asset-library-navigator__filter-drawer .vgai-asset-library__sources{display:block;overflow:visible;border:0}.vgai-asset-library-navigator__save-search{width:calc(100% - 12px);margin:6px 6px 0}.vgai-asset-library-row{position:absolute;right:0;left:0;width:100%;min-width:0;min-height:52px;display:flex;align-items:center;gap:8px;padding:5px;border:1px solid transparent;border-radius:var(--vgai-radius-sm, 3px);background:transparent;color:var(--vgai-text-1);text-align:left}.vgai-asset-library-row:hover,.vgai-asset-library-row[aria-selected=true]{background:var(--vgai-accent-muted)}.vgai-asset-library-row[aria-selected=true]{border-color:var(--vgai-accent)}.vgai-asset-library-row .vgai-asset-card__preview{width:44px;height:40px;flex:0 0 44px;aspect-ratio:auto}.vgai-asset-library-row__copy{min-width:0;display:flex;flex:1;flex-direction:column;gap:2px}.vgai-asset-library-row__name,.vgai-asset-library-row__meta{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vgai-asset-library-row__name{font-size:11px;font-weight:550}.vgai-asset-library-row__meta{color:var(--vgai-text-3);font-size:10px}.vgai-asset-library-navigator__loading{position:absolute;right:8px;bottom:8px;color:var(--vgai-text-2);font-size:10px}.vgai-project-assets-toolbar{flex:0 0 auto;border-bottom:1px solid var(--vgai-border-1);background:var(--vgai-bg-2)}.vgai-project-assets-toolbar__row{width:100%;min-width:0;min-height:28px;box-sizing:border-box;gap:4px;padding:2px 4px;border:0;background:transparent}.vgai-project-assets-toolbar__row+.vgai-project-assets-toolbar__row{border-top:1px solid var(--vgai-border-1)}.vgai-project-assets-toolbar__select{min-width:0;flex:1 1 64px;width:64px}.vgai-project-assets-toolbar__more{position:relative;flex:0 0 auto}.vgai-project-assets-toolbar__menu{position:absolute;z-index:1000;top:calc(100% + 3px);right:0;min-width:170px}.vgai-asset-library{--asset-hit-target: 28px;--asset-focus-ring: 0 0 0 2px var(--vgai-accent);--asset-pane-gap: 8px;--asset-warning: var(--vgai-accent);--asset-error: var(--vgai-danger);--asset-progress: var(--vgai-accent);--asset-card-width: 168px;--asset-card-height: 214px;display:grid;grid-template-columns:var(--asset-source-width, 210px) minmax(320px,1fr) var( --asset-details-width, 360px );width:100%;height:100%;min-height:0;position:relative;color:var(--vgai-text-1);background:var(--vgai-bg-1)}.vgai-asset-library button:focus-visible,.vgai-asset-editor button:focus-visible,.vgai-asset-browser button:focus-visible,.vgai-asset-library input:focus-visible,.vgai-asset-editor input:focus-visible{outline:0;box-shadow:var(--asset-focus-ring)}.vgai-asset-library[data-density=compact]{--asset-card-width: 136px;--asset-card-height: 178px}.vgai-asset-library[data-density=large]{--asset-card-width: 208px;--asset-card-height: 254px}.vgai-asset-library__sources,.vgai-asset-library__details{min-width:0;min-height:0;overflow:auto;background:var(--vgai-bg-2)}.vgai-asset-library[data-source-collapsed=true] .vgai-asset-library__sources,.vgai-asset-library[data-details-collapsed=true] .vgai-asset-library__details{visibility:hidden;border:0;padding:0}.vgai-asset-source-size{position:absolute;left:8px;bottom:8px;width:min(180px,calc(var(--asset-source-width) - 16px))}.vgai-asset-pane-size{padding:6px 10px 0;color:var(--vgai-text-3);font-size:10px}.vgai-asset-pane-size label{display:flex;align-items:center;gap:8px}.vgai-asset-library__sources{border-right:1px solid var(--vgai-border-1);padding:10px}.vgai-asset-library__details{border-left:1px solid var(--vgai-border-1)}.vgai-asset-library__results{min-width:0;min-height:0;display:flex;flex-direction:column}.vgai-asset-library__toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-height:44px;padding:7px 10px;border-bottom:1px solid var(--vgai-border-1);background:var(--vgai-bg-2)}.vgai-asset-library__grid{position:relative;flex:1;min-height:0;overflow:auto;outline:none}.vgai-asset-card{position:absolute;box-sizing:border-box;width:var(--asset-card-width);height:calc(var(--asset-card-height) - 8px);padding:8px;border:1px solid transparent;border-radius:var(--vgai-radius-md, 5px);background:transparent;color:var(--vgai-text-1);text-align:left;cursor:pointer}.vgai-asset-card:hover{background:var(--vgai-accent-muted)}.vgai-asset-card[aria-selected=true]{border-color:var(--vgai-accent);background:var(--vgai-accent-muted)}.vgai-asset-card:focus-visible{outline:2px solid var(--vgai-focus, var(--vgai-accent));outline-offset:-2px}.vgai-asset-card__preview{position:relative;width:100%;aspect-ratio:4 / 3;display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--vgai-radius-sm, 3px);background:var(--vgai-bg-0)}.vgai-asset-card__fallback{position:absolute;right:4px;bottom:4px;padding:2px 4px;border-radius:3px;background:color-mix(in srgb,var(--vgai-bg-0) 88%,transparent);color:var(--vgai-text-2);font-size:9px}.vgai-asset-card__preview img{width:100%;height:100%;object-fit:contain}.vgai-asset-card__name{margin-top:7px;min-height:34px;display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:12px;line-height:17px;font-weight:550}.vgai-asset-card__meta,.vgai-asset-card__badges{display:flex;gap:5px;align-items:center;margin-top:4px;color:var(--vgai-text-3);font-size:10px}.vgai-asset-badge{padding:1px 5px;border-radius:999px;background:var(--vgai-bg-3);color:var(--vgai-text-2);white-space:nowrap}.vgai-asset-facet-title{margin:12px 0 5px;color:var(--vgai-text-3);font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.vgai-asset-facet-button{width:100%;min-height:28px;padding:4px 7px;border:0;border-radius:4px;background:transparent;color:var(--vgai-text-2);text-align:left;cursor:pointer}.vgai-asset-facet-button:hover,.vgai-asset-facet-button[aria-pressed=true]{background:var(--vgai-accent-muted);color:var(--vgai-text-1)}.vgai-asset-facet-check{display:flex;align-items:center;gap:6px;min-height:28px;color:var(--vgai-text-2);font-size:11px}.vgai-asset-facet-check .vgai-select{min-width:0;flex:1}@media(max-width:1050px){.vgai-asset-library{grid-template-columns:minmax(300px,1fr) minmax(280px,42%)}.vgai-asset-library__sources{display:none}}@media(max-width:720px){.vgai-asset-library{grid-template-columns:1fr}.vgai-asset-library__details{display:none}}.vgai-asset-context-menu{position:fixed;z-index:10000;min-width:190px;padding:4px;border:1px solid var(--vgai-border-2);border-radius:5px;background:var(--vgai-bg-2);box-shadow:0 8px 28px #00000059}.vgai-asset-context-menu button{width:100%;min-height:28px;display:flex;justify-content:space-between;border:0;border-radius:3px;background:transparent;color:var(--vgai-text-1);text-align:left}.vgai-asset-context-menu button:hover:not(:disabled){background:var(--vgai-accent-muted)}.vgai-asset-context-menu kbd{color:var(--vgai-text-3);font:inherit}@media(max-width:900px){.vgai-asset-tree{display:none}}.vgai-asset-editor{width:100%;height:100%;min-width:0;min-height:0;display:grid;grid-template-columns:var(--asset-editor-structure-width, 240px) minmax(280px,1fr) var( --asset-editor-details-width, 300px );grid-template-rows:auto minmax(0,1fr) auto;grid-template-areas:"toolbar toolbar toolbar" "structure viewport details" "status status status";background:var(--vgai-bg-1)}.vgai-asset-editor[data-structure-collapsed=true]{grid-template-columns:0 minmax(280px,1fr) var(--asset-editor-details-width, 300px)}.vgai-asset-editor[data-details-collapsed=true]{grid-template-columns:var(--asset-editor-structure-width, 240px) minmax(280px,1fr) 0}.vgai-asset-editor[data-structure-collapsed=true][data-details-collapsed=true]{grid-template-columns:0 minmax(280px,1fr) 0}.vgai-asset-editor[data-structure-collapsed=true] .vgai-asset-editor__structure,.vgai-asset-editor[data-details-collapsed=true] .vgai-asset-editor__details{visibility:hidden;overflow:hidden;padding:0;border:0}.vgai-asset-editor__toolbar{grid-area:toolbar;min-height:40px;display:flex;align-items:center;gap:7px;padding:6px 10px;border-bottom:1px solid var(--vgai-border-1);background:var(--vgai-bg-2)}.vgai-asset-editor__toolbar strong{min-width:100px;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vgai-asset-editor__commands{flex:1;display:flex;flex-wrap:wrap;align-items:center;gap:5px}.vgai-asset-editor__toolbar button,.vgai-asset-editor__toolbar select{min-height:26px;border:1px solid var(--vgai-border-2);border-radius:3px;background:var(--vgai-bg-3);color:var(--vgai-text-1)}.vgai-asset-editor__structure{grid-area:structure;border-right:1px solid var(--vgai-border-1)}.vgai-asset-editor__details{grid-area:details;border-left:1px solid var(--vgai-border-1)}.vgai-asset-editor__structure,.vgai-asset-editor__details{min-width:0;min-height:0;overflow:auto;padding:8px;background:var(--vgai-bg-2)}.vgai-asset-editor__viewport{grid-area:viewport;min-width:0;min-height:0;overflow:auto;position:relative}.vgai-asset-editor__status{grid-area:status;min-height:28px;padding:5px 10px;border-top:1px solid;background:var(--vgai-bg-2);font-size:11px}.vgai-asset-editor__resize{display:flex;flex-direction:column;gap:3px;margin-top:10px;color:var(--vgai-text-3);font-size:10px}@media(max-width:900px){.vgai-asset-editor{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(260px,1fr) auto auto;grid-template-areas:"toolbar" "viewport" "details" "status"}.vgai-asset-editor__structure{display:none}.vgai-asset-editor__details{max-height:220px;border-left:0;border-top:1px solid var(--vgai-border-1)}}.vgai-console{display:flex;height:100%;flex-direction:column}.vgai-console .vgai-toolbar{flex:0 0 auto}.vgai-console-filter{width:140px;margin-left:auto}.vgai-console-list{min-height:0;flex:1;overflow-y:auto;font-family:var(--vgai-font-mono);font-size:var(--vgai-font-base);line-height:18px}.vgai-console-empty{padding:var(--vgai-space-6) var(--vgai-space-4);color:var(--vgai-content-dim);font-style:italic}.vgai-console-row{display:flex;align-items:flex-start;padding:1px var(--vgai-space-4);border-bottom:var(--vgai-stroke-resting) solid var(--vgai-boundary-default)}.vgai-console-row[data-level=error]{background:var(--vgai-danger-faint)}.vgai-console-row:hover{background:var(--vgai-neutral-hover)}.vgai-console-count{flex:0 0 auto;margin-left:var(--vgai-space-3);padding:0 var(--vgai-space-2);color:var(--vgai-content-muted);background:var(--vgai-surface-raised);border-radius:var(--vgai-radius-lg);font-size:var(--vgai-font-sm)}.vgai-console [data-console-level=info][aria-pressed=true]{color:var(--vgai-content-primary)}.vgai-console [data-console-level=warn][aria-pressed=true]{color:var(--vgai-warn)}.vgai-console [data-console-level=error][aria-pressed=true]{color:var(--vgai-danger)}.vgai-theme-manager-content{min-height:0;flex:1;align-items:stretch}.vgai-theme-list{width:220px;flex:0 0 auto;padding:var(--vgai-space-4);overflow-y:auto;background:var(--vgai-surface-panel);border-right:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);box-sizing:border-box}.vgai-theme-choice{width:100%;height:auto;min-height:var(--vgai-control-comfortable-height);flex-direction:column;align-items:flex-start;margin-bottom:var(--vgai-space-2);text-align:left}.vgai-theme-choice[aria-pressed=true]{color:var(--vgai-content-primary);background:var(--vgai-accent-muted)}.vgai-theme-list-action{width:100%;margin-top:var(--vgai-space-2)}.vgai-theme-tokens{min-width:0;flex:1;padding:var(--vgai-space-8);overflow-y:auto}.vgai-theme-name-row{margin-bottom:var(--vgai-space-8)}.vgai-theme-name-field{min-width:0;flex:1}.vgai-theme-readonly-note{margin-bottom:var(--vgai-space-8)}.vgai-theme-group{margin-bottom:var(--vgai-space-10)}.vgai-theme-field-grid{display:grid;grid-template-columns:repeat(2,minmax(220px,1fr));gap:var(--vgai-space-4) var(--vgai-space-8)}.vgai-theme-value>.vgai-input{min-width:0;flex:1}.vgai-theme-swatch-input,.vgai-theme-swatch-preview{width:24px;height:24px;flex:0 0 auto;padding:1px;border:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);border-radius:var(--vgai-radius-sm);box-sizing:border-box}.vgai-theme-swatch-input{background:transparent;cursor:pointer}.vgai-theme-message{margin-right:auto}@media(max-width:760px){.vgai-theme-list{width:180px}.vgai-theme-field-grid{grid-template-columns:minmax(0,1fr)}}.vgai-project-header{position:relative;display:flex;height:var(--vgai-command-bar-height);flex:0 0 auto;align-items:center;padding:0 var(--vgai-space-4);color:var(--vgai-content-primary);background:var(--vgai-surface-chrome);border-bottom:var(--vgai-stroke-resting) solid var(--vgai-boundary-default);font-size:var(--vgai-font-base);pointer-events:auto;user-select:none;box-sizing:border-box}.vgai-project-header-left{position:relative;display:flex;min-width:0;flex:1}.vgai-project-trigger{display:flex;min-width:0;align-items:center;gap:var(--vgai-space-3);overflow:hidden;white-space:nowrap}.vgai-project-app-menus,.vgai-project-transport{flex:0 0 auto}.vgai-project-menu{position:absolute;top:100%;left:0;min-width:190px;margin-top:var(--vgai-space-1)}.vgai-project-path{display:block;max-width:320px;padding:var(--vgai-space-2) var(--vgai-space-4)}.vgai-project-versions{display:grid;grid-template-columns:1fr auto;gap:var(--vgai-space-2) var(--vgai-space-6);padding:var(--vgai-space-3) var(--vgai-space-4) var(--vgai-space-4);color:var(--vgai-content-dim);font-size:var(--vgai-font-sm)}.vgai-project-header-right{min-width:0;flex:1}.vgai-project-header-right>.vgai-btn{padding-inline:var(--vgai-space-4)}.dv-scrollable{position:relative;overflow:hidden}.dv-scrollable .dv-scrollbar{position:absolute;border-radius:2px;background-color:transparent;will-change:background-color,transform;transform:translateZ(0);backface-visibility:hidden;transition-property:background-color;transition-timing-function:ease-in-out;transition-duration:1s;transition-delay:0s}.dv-scrollable .dv-scrollbar-horizontal{bottom:0;left:0;height:4px}.dv-scrollable .dv-scrollbar-vertical{right:0;top:0;width:4px}.dv-scrollable:hover .dv-scrollbar,.dv-scrollable.dv-scrollable-resizing .dv-scrollbar,.dv-scrollable.dv-scrollable-scrolling .dv-scrollbar{background-color:var(--dv-scrollbar-background-color, rgba(255, 255, 255, .25))}.dv-svg{display:inline-block;fill:currentcolor;line-height:1;stroke:currentcolor;stroke-width:0}.dockview-theme-dark{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .25);--dv-floating-border: 1px solid rgba(255, 255, 255, .1);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-spacing-padding: 0px;--dv-tab-border-radius: 0px;--dv-sash-border-radius: 0px;--dv-dropdown-border-radius: 0px;--dv-tab-close-icon-size: inherit;--dv-floating-group-border: none;--dv-drag-over-border: none;--dv-floating-group-dragging-opacity: .5;--dv-floating-titlebar-height: 22px;--dv-floating-titlebar-background-color: var( --dv-tabs-and-actions-container-background-color );--dv-floating-titlebar-border-bottom: var(--dv-floating-border);--dv-tab-group-color-grey: #5f6368;--dv-tab-group-color-blue: #1a73e8;--dv-tab-group-color-red: #d93025;--dv-tab-group-color-yellow: #f9ab00;--dv-tab-group-color-green: #188038;--dv-tab-group-color-pink: #d01884;--dv-tab-group-color-purple: #a142f4;--dv-tab-group-color-cyan: #007b83;--dv-tab-group-color-orange: #e8710a;--dv-tab-group-chip-padding: 4px 8px;--dv-tab-group-chip-border-radius: 6px;--dv-tab-group-chip-font-size: 11px;--dv-tab-group-line-height: 2px;--dv-tab-group-line-opacity: .6}.dockview-theme-dark .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-dark{--dv-group-view-background-color: #1e1e1e;--dv-tabs-and-actions-container-background-color: #252526;--dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;--dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;--dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;--dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;--dv-tab-divider-color: #1e1e1e;--dv-activegroup-visiblepanel-tab-color: white;--dv-activegroup-hiddenpanel-tab-color: #969696;--dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;--dv-inactivegroup-hiddenpanel-tab-color: #626262;--dv-separator-border: rgb(68, 68, 68);--dv-paneview-header-border-color: rgba(204, 204, 204, .2)}.dockview-theme-light{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .25);--dv-floating-border: 1px solid rgba(255, 255, 255, .1);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-spacing-padding: 0px;--dv-tab-border-radius: 0px;--dv-sash-border-radius: 0px;--dv-dropdown-border-radius: 0px;--dv-tab-close-icon-size: inherit;--dv-floating-group-border: none;--dv-drag-over-border: none;--dv-floating-group-dragging-opacity: .5;--dv-floating-titlebar-height: 22px;--dv-floating-titlebar-background-color: var( --dv-tabs-and-actions-container-background-color );--dv-floating-titlebar-border-bottom: var(--dv-floating-border);--dv-tab-group-color-grey: #5f6368;--dv-tab-group-color-blue: #1a73e8;--dv-tab-group-color-red: #d93025;--dv-tab-group-color-yellow: #f9ab00;--dv-tab-group-color-green: #188038;--dv-tab-group-color-pink: #d01884;--dv-tab-group-color-purple: #a142f4;--dv-tab-group-color-cyan: #007b83;--dv-tab-group-color-orange: #e8710a;--dv-tab-group-chip-padding: 4px 8px;--dv-tab-group-chip-border-radius: 6px;--dv-tab-group-chip-font-size: 11px;--dv-tab-group-line-height: 2px;--dv-tab-group-line-opacity: .6}.dockview-theme-light .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-light{--dv-group-view-background-color: white;--dv-tabs-and-actions-container-background-color: #f3f3f3;--dv-activegroup-visiblepanel-tab-background-color: white;--dv-activegroup-hiddenpanel-tab-background-color: #ececec;--dv-inactivegroup-visiblepanel-tab-background-color: white;--dv-inactivegroup-hiddenpanel-tab-background-color: #ececec;--dv-tab-divider-color: white;--dv-activegroup-visiblepanel-tab-color: rgb(51, 51, 51);--dv-activegroup-hiddenpanel-tab-color: rgba(51, 51, 51, .7);--dv-inactivegroup-visiblepanel-tab-color: rgba(51, 51, 51, .7);--dv-inactivegroup-hiddenpanel-tab-color: rgba(51, 51, 51, .35);--dv-separator-border: rgba(128, 128, 128, .35);--dv-paneview-header-border-color: rgb(51, 51, 51);--dv-scrollbar-background-color: rgba(0, 0, 0, .25);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .08);--dv-floating-border: 1px solid rgba(0, 0, 0, .1)}.dockview-theme-vs{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .25);--dv-floating-border: 1px solid rgba(255, 255, 255, .1);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-spacing-padding: 0px;--dv-tab-border-radius: 0px;--dv-sash-border-radius: 0px;--dv-dropdown-border-radius: 0px;--dv-tab-close-icon-size: inherit;--dv-floating-group-border: none;--dv-drag-over-border: none;--dv-floating-group-dragging-opacity: .5;--dv-floating-titlebar-height: 22px;--dv-floating-titlebar-background-color: var( --dv-tabs-and-actions-container-background-color );--dv-floating-titlebar-border-bottom: var(--dv-floating-border);--dv-tab-group-color-grey: #5f6368;--dv-tab-group-color-blue: #1a73e8;--dv-tab-group-color-red: #d93025;--dv-tab-group-color-yellow: #f9ab00;--dv-tab-group-color-green: #188038;--dv-tab-group-color-pink: #d01884;--dv-tab-group-color-purple: #a142f4;--dv-tab-group-color-cyan: #007b83;--dv-tab-group-color-orange: #e8710a;--dv-tab-group-chip-padding: 4px 8px;--dv-tab-group-chip-border-radius: 6px;--dv-tab-group-chip-font-size: 11px;--dv-tab-group-line-height: 2px;--dv-tab-group-line-opacity: .6}.dockview-theme-vs .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-vs{--dv-group-view-background-color: #1e1e1e;--dv-tabs-and-actions-container-background-color: #252526;--dv-activegroup-visiblepanel-tab-background-color: #1e1e1e;--dv-activegroup-hiddenpanel-tab-background-color: #2d2d2d;--dv-inactivegroup-visiblepanel-tab-background-color: #1e1e1e;--dv-inactivegroup-hiddenpanel-tab-background-color: #2d2d2d;--dv-tab-divider-color: #1e1e1e;--dv-activegroup-hiddenpanel-tab-color: #969696;--dv-inactivegroup-visiblepanel-tab-color: #8f8f8f;--dv-inactivegroup-hiddenpanel-tab-color: #626262;--dv-separator-border: rgb(68, 68, 68);--dv-paneview-header-border-color: rgba(204, 204, 204, .2);--dv-tabs-and-actions-container-background-color: #2d2d30;--dv-tabs-and-actions-container-height: 20px;--dv-tabs-and-actions-container-font-size: 11px;--dv-activegroup-visiblepanel-tab-background-color: #007acc;--dv-inactivegroup-visiblepanel-tab-background-color: #3f3f46;--dv-activegroup-visiblepanel-tab-color: white;--dv-activegroup-hiddenpanel-tab-color: white;--dv-inactivegroup-visiblepanel-tab-color: white;--dv-inactivegroup-hiddenpanel-tab-color: white}.dockview-theme-vs .dv-groupview.dv-active-group>.dv-tabs-and-actions-container{box-sizing:content-box;border-bottom:2px solid var(--dv-activegroup-visiblepanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tab.dv-active-tab{border-top:2px solid var(--dv-activegroup-visiblepanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tab.dv-inactive-tab{border-top:2px solid var(--dv-activegroup-hiddenpanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container{box-sizing:content-box;border-bottom:2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tab.dv-active-tab{border-top:2px solid var(--dv-inactivegroup-visiblepanel-tab-background-color)}.dockview-theme-vs .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tab.dv-inactive-tab{border-top:2px solid var(--dv-inactivegroup-hiddenpanel-tab-background-color)}.dockview-theme-abyss{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .25);--dv-floating-border: 1px solid rgba(255, 255, 255, .1);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-spacing-padding: 0px;--dv-tab-border-radius: 0px;--dv-sash-border-radius: 0px;--dv-dropdown-border-radius: 0px;--dv-tab-close-icon-size: inherit;--dv-floating-group-border: none;--dv-drag-over-border: none;--dv-floating-group-dragging-opacity: .5;--dv-floating-titlebar-height: 22px;--dv-floating-titlebar-background-color: var( --dv-tabs-and-actions-container-background-color );--dv-floating-titlebar-border-bottom: var(--dv-floating-border);--dv-tab-group-color-grey: #5f6368;--dv-tab-group-color-blue: #1a73e8;--dv-tab-group-color-red: #d93025;--dv-tab-group-color-yellow: #f9ab00;--dv-tab-group-color-green: #188038;--dv-tab-group-color-pink: #d01884;--dv-tab-group-color-purple: #a142f4;--dv-tab-group-color-cyan: #007b83;--dv-tab-group-color-orange: #e8710a;--dv-tab-group-chip-padding: 4px 8px;--dv-tab-group-chip-border-radius: 6px;--dv-tab-group-chip-font-size: 11px;--dv-tab-group-line-height: 2px;--dv-tab-group-line-opacity: .6}.dockview-theme-abyss .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-abyss{--dv-color-abyss-dark: #000c18;--dv-color-abyss: #10192c;--dv-color-abyss-light: #1c1c2a;--dv-color-abyss-lighter: #2b2b4a;--dv-color-abyss-accent: rgb(91, 30, 207);--dv-color-abyss-primary-text: white;--dv-color-abyss-secondary-text: rgb(148, 151, 169);--dv-group-view-background-color: var(--dv-color-abyss-dark);--dv-tabs-and-actions-container-background-color: var( --dv-color-abyss-light );--dv-activegroup-visiblepanel-tab-background-color: var( --dv-color-abyss-dark );--dv-activegroup-hiddenpanel-tab-background-color: var(--dv-color-abyss);--dv-inactivegroup-visiblepanel-tab-background-color: var( --dv-color-abyss-dark );--dv-inactivegroup-hiddenpanel-tab-background-color: var(--dv-color-abyss);--dv-tab-divider-color: var(--dv-color-abyss-lighter);--dv-activegroup-visiblepanel-tab-color: white;--dv-activegroup-hiddenpanel-tab-color: rgba(255, 255, 255, .5);--dv-inactivegroup-visiblepanel-tab-color: rgba(255, 255, 255, .5);--dv-inactivegroup-hiddenpanel-tab-color: rgba(255, 255, 255, .25);--dv-separator-border: var(--dv-color-abyss-lighter);--dv-paneview-header-border-color: var(--dv-color-abyss-lighter);--dv-paneview-active-outline-color: #596f99}.dockview-theme-dracula{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .25);--dv-floating-border: 1px solid rgba(255, 255, 255, .1);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-spacing-padding: 0px;--dv-tab-border-radius: 0px;--dv-sash-border-radius: 0px;--dv-dropdown-border-radius: 0px;--dv-tab-close-icon-size: inherit;--dv-floating-group-border: none;--dv-drag-over-border: none;--dv-floating-group-dragging-opacity: .5;--dv-floating-titlebar-height: 22px;--dv-floating-titlebar-background-color: var( --dv-tabs-and-actions-container-background-color );--dv-floating-titlebar-border-bottom: var(--dv-floating-border);--dv-tab-group-color-grey: #5f6368;--dv-tab-group-color-blue: #1a73e8;--dv-tab-group-color-red: #d93025;--dv-tab-group-color-yellow: #f9ab00;--dv-tab-group-color-green: #188038;--dv-tab-group-color-pink: #d01884;--dv-tab-group-color-purple: #a142f4;--dv-tab-group-color-cyan: #007b83;--dv-tab-group-color-orange: #e8710a;--dv-tab-group-chip-padding: 4px 8px;--dv-tab-group-chip-border-radius: 6px;--dv-tab-group-chip-font-size: 11px;--dv-tab-group-line-height: 2px;--dv-tab-group-line-opacity: .6}.dockview-theme-dracula .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-dracula{--dv-group-view-background-color: #282a36;--dv-tabs-and-actions-container-background-color: #191a21;--dv-activegroup-visiblepanel-tab-background-color: #282a36;--dv-activegroup-hiddenpanel-tab-background-color: #21222c;--dv-inactivegroup-visiblepanel-tab-background-color: #282a36;--dv-inactivegroup-hiddenpanel-tab-background-color: #21222c;--dv-tab-divider-color: #191a21;--dv-activegroup-visiblepanel-tab-color: rgb(248, 248, 242);--dv-activegroup-hiddenpanel-tab-color: rgb(98, 114, 164);--dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, .5);--dv-inactivegroup-hiddenpanel-tab-color: rgba(98, 114, 164, .5);--dv-separator-border: #bd93f9;--dv-paneview-header-border-color: #bd93f9;--dv-paneview-active-outline-color: #6272a4}.dockview-theme-dracula .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{position:relative}.dockview-theme-dracula .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab:after{position:absolute;left:0;bottom:0;content:"";width:100%;height:1px;background-color:#94527e;z-index:999}.dockview-theme-dracula .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{position:relative}.dockview-theme-dracula .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab:after{position:absolute;left:0;bottom:0;content:"";width:100%;height:1px;background-color:#5e3d5a;z-index:999}.dockview-theme-nord{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .25);--dv-floating-border: 1px solid rgba(255, 255, 255, .1);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-spacing-padding: 0px;--dv-tab-border-radius: 0px;--dv-sash-border-radius: 0px;--dv-dropdown-border-radius: 0px;--dv-tab-close-icon-size: inherit;--dv-floating-group-border: none;--dv-drag-over-border: none;--dv-floating-group-dragging-opacity: .5;--dv-floating-titlebar-height: 22px;--dv-floating-titlebar-background-color: var( --dv-tabs-and-actions-container-background-color );--dv-floating-titlebar-border-bottom: var(--dv-floating-border);--dv-tab-group-color-grey: #5f6368;--dv-tab-group-color-blue: #1a73e8;--dv-tab-group-color-red: #d93025;--dv-tab-group-color-yellow: #f9ab00;--dv-tab-group-color-green: #188038;--dv-tab-group-color-pink: #d01884;--dv-tab-group-color-purple: #a142f4;--dv-tab-group-color-cyan: #007b83;--dv-tab-group-color-orange: #e8710a;--dv-tab-group-chip-padding: 4px 8px;--dv-tab-group-chip-border-radius: 6px;--dv-tab-group-chip-font-size: 11px;--dv-tab-group-line-height: 2px;--dv-tab-group-line-opacity: .6}.dockview-theme-nord .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-nord{--dv-color-nord-polar-0: #2e3440;--dv-color-nord-polar-1: #3b4252;--dv-color-nord-polar-2: #434c5e;--dv-color-nord-polar-3: #4c566a;--dv-color-nord-frost: #88c0d0;--dv-color-nord-frost-2: #81a1c1;--dv-color-nord-snow-0: #eceff4;--dv-color-nord-snow-1: #d8dee9;--dv-group-view-background-color: var(--dv-color-nord-polar-0);--dv-tabs-and-actions-container-background-color: var( --dv-color-nord-polar-1 );--dv-activegroup-visiblepanel-tab-background-color: var( --dv-color-nord-polar-0 );--dv-activegroup-hiddenpanel-tab-background-color: var( --dv-color-nord-polar-2 );--dv-inactivegroup-visiblepanel-tab-background-color: var( --dv-color-nord-polar-1 );--dv-inactivegroup-hiddenpanel-tab-background-color: var( --dv-color-nord-polar-2 );--dv-activegroup-visiblepanel-tab-color: var(--dv-color-nord-snow-0);--dv-activegroup-hiddenpanel-tab-color: var(--dv-color-nord-snow-1);--dv-inactivegroup-visiblepanel-tab-color: #8a9bbf;--dv-inactivegroup-hiddenpanel-tab-color: #5e6f8e;--dv-separator-border: var(--dv-color-nord-polar-3);--dv-paneview-active-outline-color: var(--dv-color-nord-frost);--dv-active-sash-color: var(--dv-color-nord-frost);--dv-scrollbar-background-color: rgba(76, 86, 106, .5)}.dockview-theme-nord .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{position:relative}.dockview-theme-nord .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab:after{position:absolute;left:0;bottom:0;content:"";width:100%;height:2px;background-color:var(--dv-color-nord-frost);z-index:999}.dockview-theme-nord .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{position:relative}.dockview-theme-nord .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab:after{position:absolute;left:0;bottom:0;content:"";width:100%;height:2px;background-color:var(--dv-color-nord-frost-2);z-index:999}.dockview-theme-nord-spaced{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .25);--dv-floating-border: 1px solid rgba(255, 255, 255, .1);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-spacing-padding: 0px;--dv-tab-border-radius: 0px;--dv-sash-border-radius: 0px;--dv-dropdown-border-radius: 0px;--dv-tab-close-icon-size: inherit;--dv-floating-group-border: none;--dv-drag-over-border: none;--dv-floating-group-dragging-opacity: .5;--dv-floating-titlebar-height: 22px;--dv-floating-titlebar-background-color: var( --dv-tabs-and-actions-container-background-color );--dv-floating-titlebar-border-bottom: var(--dv-floating-border);--dv-tab-group-color-grey: #5f6368;--dv-tab-group-color-blue: #1a73e8;--dv-tab-group-color-red: #d93025;--dv-tab-group-color-yellow: #f9ab00;--dv-tab-group-color-green: #188038;--dv-tab-group-color-pink: #d01884;--dv-tab-group-color-purple: #a142f4;--dv-tab-group-color-cyan: #007b83;--dv-tab-group-color-orange: #e8710a;--dv-tab-group-chip-padding: 4px 8px;--dv-tab-group-chip-border-radius: 6px;--dv-tab-group-chip-font-size: 11px;--dv-tab-group-line-height: 2px;--dv-tab-group-line-opacity: .6;--dv-spacing-padding: 10px;--dv-tab-font-size: 12px;--dv-border-radius: 12px;--dv-tab-margin: .5rem .25rem;--dv-tabs-and-actions-container-height: 44px;--dv-tab-border-radius: 8px;--dv-sash-border-radius: 4px;--dv-dropdown-border-radius: 8px;--dv-tab-close-icon-size: 8px;--dv-floating-group-border: 2px solid var(--dv-group-view-background-color);--dv-floating-titlebar-background-color: var( --dv-group-view-background-color );--dv-floating-titlebar-border-bottom: none;box-sizing:border-box;padding:var(--dv-spacing-padding);background-color:var(--dv-group-view-background-color)}.dv-shell .dockview-theme-nord-spaced{padding:0}.dockview-theme-nord-spaced .dv-resize-container:has(>.dv-groupview){border-radius:8px}.dockview-theme-nord-spaced .dv-sash{border-radius:var(--dv-sash-border-radius)}.dockview-theme-nord-spaced .dv-drop-target-anchor{border-radius:calc(var(--dv-border-radius) / 4)}.dockview-theme-nord-spaced .dv-drop-target-anchor.dv-drop-target-content{border-radius:var(--dv-border-radius)}.dockview-theme-nord-spaced .dv-resize-container{border-radius:var(--dv-border-radius)!important;border:none}.dockview-theme-nord-spaced .dv-resize-container .dv-groupview{border:var(--dv-floating-group-border)}.dockview-theme-nord-spaced .dv-resize-container>.dv-grid-view{box-sizing:border-box;padding:var(--dv-spacing-padding)}.dockview-theme-nord-spaced .dv-resize-container-with-titlebar>.dv-grid-view{padding-top:0}.dockview-theme-nord-spaced .dv-resize-container-with-titlebar>.dv-floating-titlebar{border-top-left-radius:var(--dv-border-radius);border-top-right-radius:var(--dv-border-radius)}.dockview-theme-nord-spaced .dv-tabs-overflow-container,.dockview-theme-nord-spaced .dv-tabs-overflow-dropdown-default{border-radius:var(--dv-dropdown-border-radius);height:unset!important}.dockview-theme-nord-spaced .dv-render-overlay{border-bottom-left-radius:var(--dv-border-radius);border-bottom-right-radius:var(--dv-border-radius)}.dockview-theme-nord-spaced .dv-tab{border-radius:var(--dv-tab-border-radius)}.dockview-theme-nord-spaced .dv-tab .dv-svg{height:var(--dv-tab-close-icon-size);width:var(--dv-tab-close-icon-size)}.dockview-theme-nord-spaced .dv-tabs-container-vertical .dv-tab{margin:.25rem .5rem}.dockview-theme-nord-spaced .dv-groupview{border-radius:var(--dv-border-radius)}.dockview-theme-nord-spaced .dv-groupview .dv-tabs-and-actions-container{padding:0px calc(var(--dv-border-radius) / 2);border-top-left-radius:var(--dv-border-radius);border-top-right-radius:var(--dv-border-radius)}.dockview-theme-nord-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical{padding:calc(var(--dv-border-radius) / 2) 0}.dockview-theme-nord-spaced .dv-groupview .dv-content-container{background-color:var(--dv-tabs-and-actions-container-background-color);border-bottom-left-radius:var(--dv-border-radius);border-bottom-right-radius:var(--dv-border-radius)}.dockview-theme-nord-spaced{--dv-color-nord-polar-0: #2e3440;--dv-color-nord-polar-1: #3b4252;--dv-color-nord-polar-2: #434c5e;--dv-color-nord-polar-3: #4c566a;--dv-color-nord-frost: #88c0d0;--dv-color-nord-frost-2: #81a1c1;--dv-color-nord-snow-0: #eceff4;--dv-color-nord-snow-1: #d8dee9;--dv-group-view-background-color: var(--dv-color-nord-polar-0);--dv-tabs-and-actions-container-background-color: var( --dv-color-nord-polar-1 );--dv-activegroup-visiblepanel-tab-background-color: var( --dv-color-nord-polar-2 );--dv-activegroup-hiddenpanel-tab-background-color: var( --dv-color-nord-polar-1 );--dv-inactivegroup-visiblepanel-tab-background-color: var( --dv-color-nord-polar-2 );--dv-inactivegroup-hiddenpanel-tab-background-color: var( --dv-color-nord-polar-1 );--dv-activegroup-visiblepanel-tab-color: var(--dv-color-nord-snow-0);--dv-activegroup-hiddenpanel-tab-color: var(--dv-color-nord-snow-1);--dv-inactivegroup-visiblepanel-tab-color: #8a9bbf;--dv-inactivegroup-hiddenpanel-tab-color: #5e6f8e;--dv-separator-border: transparent;--dv-paneview-active-outline-color: var(--dv-color-nord-frost);--dv-active-sash-color: var(--dv-color-nord-frost);--dv-scrollbar-background-color: rgba(76, 86, 106, .5);--dv-floating-group-border: 2px solid var(--dv-color-nord-polar-0)}.dockview-theme-catppuccin-mocha{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .25);--dv-floating-border: 1px solid rgba(255, 255, 255, .1);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-spacing-padding: 0px;--dv-tab-border-radius: 0px;--dv-sash-border-radius: 0px;--dv-dropdown-border-radius: 0px;--dv-tab-close-icon-size: inherit;--dv-floating-group-border: none;--dv-drag-over-border: none;--dv-floating-group-dragging-opacity: .5;--dv-floating-titlebar-height: 22px;--dv-floating-titlebar-background-color: var( --dv-tabs-and-actions-container-background-color );--dv-floating-titlebar-border-bottom: var(--dv-floating-border);--dv-tab-group-color-grey: #5f6368;--dv-tab-group-color-blue: #1a73e8;--dv-tab-group-color-red: #d93025;--dv-tab-group-color-yellow: #f9ab00;--dv-tab-group-color-green: #188038;--dv-tab-group-color-pink: #d01884;--dv-tab-group-color-purple: #a142f4;--dv-tab-group-color-cyan: #007b83;--dv-tab-group-color-orange: #e8710a;--dv-tab-group-chip-padding: 4px 8px;--dv-tab-group-chip-border-radius: 6px;--dv-tab-group-chip-font-size: 11px;--dv-tab-group-line-height: 2px;--dv-tab-group-line-opacity: .6}.dockview-theme-catppuccin-mocha .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-catppuccin-mocha{--dv-color-mocha-crust: #11111b;--dv-color-mocha-mantle: #181825;--dv-color-mocha-base: #1e1e2e;--dv-color-mocha-surface0: #313244;--dv-color-mocha-surface1: #45475a;--dv-color-mocha-text: #cdd6f4;--dv-color-mocha-subtext1: #bac2de;--dv-color-mocha-subtext0: #a6adc8;--dv-color-mocha-mauve: #cba6f7;--dv-color-mocha-lavender: #b4befe;--dv-group-view-background-color: var(--dv-color-mocha-base);--dv-tabs-and-actions-container-background-color: var( --dv-color-mocha-mantle );--dv-activegroup-visiblepanel-tab-background-color: var( --dv-color-mocha-base );--dv-activegroup-hiddenpanel-tab-background-color: var( --dv-color-mocha-surface0 );--dv-inactivegroup-visiblepanel-tab-background-color: var( --dv-color-mocha-mantle );--dv-inactivegroup-hiddenpanel-tab-background-color: var( --dv-color-mocha-crust );--dv-activegroup-visiblepanel-tab-color: var(--dv-color-mocha-text);--dv-activegroup-hiddenpanel-tab-color: var(--dv-color-mocha-subtext1);--dv-inactivegroup-visiblepanel-tab-color: var(--dv-color-mocha-subtext0);--dv-inactivegroup-hiddenpanel-tab-color: rgba(166, 173, 200, .5);--dv-separator-border: var(--dv-color-mocha-surface1);--dv-paneview-active-outline-color: var(--dv-color-mocha-mauve);--dv-active-sash-color: var(--dv-color-mocha-mauve);--dv-scrollbar-background-color: rgba(49, 50, 68, .8)}.dockview-theme-catppuccin-mocha .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{position:relative}.dockview-theme-catppuccin-mocha .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab:after{position:absolute;left:0;bottom:0;content:"";width:100%;height:2px;background-color:var(--dv-color-mocha-mauve);z-index:999}.dockview-theme-catppuccin-mocha .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{position:relative}.dockview-theme-catppuccin-mocha .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab:after{position:absolute;left:0;bottom:0;content:"";width:100%;height:2px;background-color:#b4befe66;z-index:999}.dockview-theme-catppuccin-mocha-spaced{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .25);--dv-floating-border: 1px solid rgba(255, 255, 255, .1);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-spacing-padding: 0px;--dv-tab-border-radius: 0px;--dv-sash-border-radius: 0px;--dv-dropdown-border-radius: 0px;--dv-tab-close-icon-size: inherit;--dv-floating-group-border: none;--dv-drag-over-border: none;--dv-floating-group-dragging-opacity: .5;--dv-floating-titlebar-height: 22px;--dv-floating-titlebar-background-color: var( --dv-tabs-and-actions-container-background-color );--dv-floating-titlebar-border-bottom: var(--dv-floating-border);--dv-tab-group-color-grey: #5f6368;--dv-tab-group-color-blue: #1a73e8;--dv-tab-group-color-red: #d93025;--dv-tab-group-color-yellow: #f9ab00;--dv-tab-group-color-green: #188038;--dv-tab-group-color-pink: #d01884;--dv-tab-group-color-purple: #a142f4;--dv-tab-group-color-cyan: #007b83;--dv-tab-group-color-orange: #e8710a;--dv-tab-group-chip-padding: 4px 8px;--dv-tab-group-chip-border-radius: 6px;--dv-tab-group-chip-font-size: 11px;--dv-tab-group-line-height: 2px;--dv-tab-group-line-opacity: .6;--dv-spacing-padding: 10px;--dv-tab-font-size: 12px;--dv-border-radius: 12px;--dv-tab-margin: .5rem .25rem;--dv-tabs-and-actions-container-height: 44px;--dv-tab-border-radius: 8px;--dv-sash-border-radius: 4px;--dv-dropdown-border-radius: 8px;--dv-tab-close-icon-size: 8px;--dv-floating-group-border: 2px solid var(--dv-group-view-background-color);--dv-floating-titlebar-background-color: var( --dv-group-view-background-color );--dv-floating-titlebar-border-bottom: none;box-sizing:border-box;padding:var(--dv-spacing-padding);background-color:var(--dv-group-view-background-color)}.dv-shell .dockview-theme-catppuccin-mocha-spaced{padding:0}.dockview-theme-catppuccin-mocha-spaced .dv-resize-container:has(>.dv-groupview){border-radius:8px}.dockview-theme-catppuccin-mocha-spaced .dv-sash{border-radius:var(--dv-sash-border-radius)}.dockview-theme-catppuccin-mocha-spaced .dv-drop-target-anchor{border-radius:calc(var(--dv-border-radius) / 4)}.dockview-theme-catppuccin-mocha-spaced .dv-drop-target-anchor.dv-drop-target-content{border-radius:var(--dv-border-radius)}.dockview-theme-catppuccin-mocha-spaced .dv-resize-container{border-radius:var(--dv-border-radius)!important;border:none}.dockview-theme-catppuccin-mocha-spaced .dv-resize-container .dv-groupview{border:var(--dv-floating-group-border)}.dockview-theme-catppuccin-mocha-spaced .dv-resize-container>.dv-grid-view{box-sizing:border-box;padding:var(--dv-spacing-padding)}.dockview-theme-catppuccin-mocha-spaced .dv-resize-container-with-titlebar>.dv-grid-view{padding-top:0}.dockview-theme-catppuccin-mocha-spaced .dv-resize-container-with-titlebar>.dv-floating-titlebar{border-top-left-radius:var(--dv-border-radius);border-top-right-radius:var(--dv-border-radius)}.dockview-theme-catppuccin-mocha-spaced .dv-tabs-overflow-container,.dockview-theme-catppuccin-mocha-spaced .dv-tabs-overflow-dropdown-default{border-radius:var(--dv-dropdown-border-radius);height:unset!important}.dockview-theme-catppuccin-mocha-spaced .dv-render-overlay{border-bottom-left-radius:var(--dv-border-radius);border-bottom-right-radius:var(--dv-border-radius)}.dockview-theme-catppuccin-mocha-spaced .dv-tab{border-radius:var(--dv-tab-border-radius)}.dockview-theme-catppuccin-mocha-spaced .dv-tab .dv-svg{height:var(--dv-tab-close-icon-size);width:var(--dv-tab-close-icon-size)}.dockview-theme-catppuccin-mocha-spaced .dv-tabs-container-vertical .dv-tab{margin:.25rem .5rem}.dockview-theme-catppuccin-mocha-spaced .dv-groupview{border-radius:var(--dv-border-radius)}.dockview-theme-catppuccin-mocha-spaced .dv-groupview .dv-tabs-and-actions-container{padding:0px calc(var(--dv-border-radius) / 2);border-top-left-radius:var(--dv-border-radius);border-top-right-radius:var(--dv-border-radius)}.dockview-theme-catppuccin-mocha-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical{padding:calc(var(--dv-border-radius) / 2) 0}.dockview-theme-catppuccin-mocha-spaced .dv-groupview .dv-content-container{background-color:var(--dv-tabs-and-actions-container-background-color);border-bottom-left-radius:var(--dv-border-radius);border-bottom-right-radius:var(--dv-border-radius)}.dockview-theme-catppuccin-mocha-spaced{--dv-color-mocha-crust: #11111b;--dv-color-mocha-mantle: #181825;--dv-color-mocha-base: #1e1e2e;--dv-color-mocha-surface0: #313244;--dv-color-mocha-surface1: #45475a;--dv-color-mocha-text: #cdd6f4;--dv-color-mocha-subtext1: #bac2de;--dv-color-mocha-subtext0: #a6adc8;--dv-color-mocha-mauve: #cba6f7;--dv-color-mocha-lavender: #b4befe;--dv-group-view-background-color: var(--dv-color-mocha-crust);--dv-tabs-and-actions-container-background-color: var( --dv-color-mocha-mantle );--dv-activegroup-visiblepanel-tab-background-color: var( --dv-color-mocha-surface0 );--dv-activegroup-hiddenpanel-tab-background-color: var( --dv-color-mocha-mantle );--dv-inactivegroup-visiblepanel-tab-background-color: var( --dv-color-mocha-surface0 );--dv-inactivegroup-hiddenpanel-tab-background-color: var( --dv-color-mocha-mantle );--dv-activegroup-visiblepanel-tab-color: var(--dv-color-mocha-text);--dv-activegroup-hiddenpanel-tab-color: var(--dv-color-mocha-subtext1);--dv-inactivegroup-visiblepanel-tab-color: var(--dv-color-mocha-subtext0);--dv-inactivegroup-hiddenpanel-tab-color: rgba(166, 173, 200, .5);--dv-separator-border: transparent;--dv-paneview-active-outline-color: var(--dv-color-mocha-mauve);--dv-active-sash-color: var(--dv-color-mocha-mauve);--dv-scrollbar-background-color: rgba(49, 50, 68, .8);--dv-floating-group-border: 2px solid var(--dv-color-mocha-crust)}.dockview-theme-monokai{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .25);--dv-floating-border: 1px solid rgba(255, 255, 255, .1);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-spacing-padding: 0px;--dv-tab-border-radius: 0px;--dv-sash-border-radius: 0px;--dv-dropdown-border-radius: 0px;--dv-tab-close-icon-size: inherit;--dv-floating-group-border: none;--dv-drag-over-border: none;--dv-floating-group-dragging-opacity: .5;--dv-floating-titlebar-height: 22px;--dv-floating-titlebar-background-color: var( --dv-tabs-and-actions-container-background-color );--dv-floating-titlebar-border-bottom: var(--dv-floating-border);--dv-tab-group-color-grey: #5f6368;--dv-tab-group-color-blue: #1a73e8;--dv-tab-group-color-red: #d93025;--dv-tab-group-color-yellow: #f9ab00;--dv-tab-group-color-green: #188038;--dv-tab-group-color-pink: #d01884;--dv-tab-group-color-purple: #a142f4;--dv-tab-group-color-cyan: #007b83;--dv-tab-group-color-orange: #e8710a;--dv-tab-group-chip-padding: 4px 8px;--dv-tab-group-chip-border-radius: 6px;--dv-tab-group-chip-font-size: 11px;--dv-tab-group-line-height: 2px;--dv-tab-group-line-opacity: .6}.dockview-theme-monokai .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-monokai{--dv-color-monokai-bg: #272822;--dv-color-monokai-bg-light: #3e3d32;--dv-color-monokai-comment: #75715e;--dv-color-monokai-fg: #f8f8f2;--dv-color-monokai-green: #a6e22e;--dv-group-view-background-color: var(--dv-color-monokai-bg);--dv-tabs-and-actions-container-background-color: var( --dv-color-monokai-bg-light );--dv-activegroup-visiblepanel-tab-background-color: var( --dv-color-monokai-bg );--dv-activegroup-hiddenpanel-tab-background-color: #2d2c25;--dv-inactivegroup-visiblepanel-tab-background-color: var( --dv-color-monokai-bg );--dv-inactivegroup-hiddenpanel-tab-background-color: #2d2c25;--dv-activegroup-visiblepanel-tab-color: var(--dv-color-monokai-fg);--dv-activegroup-hiddenpanel-tab-color: var(--dv-color-monokai-comment);--dv-inactivegroup-visiblepanel-tab-color: rgba(248, 248, 242, .5);--dv-inactivegroup-hiddenpanel-tab-color: rgba(117, 113, 94, .5);--dv-separator-border: var(--dv-color-monokai-bg-light);--dv-paneview-active-outline-color: var(--dv-color-monokai-green);--dv-active-sash-color: var(--dv-color-monokai-green);--dv-scrollbar-background-color: rgba(117, 113, 94, .5)}.dockview-theme-monokai .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{position:relative}.dockview-theme-monokai .dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab:after{position:absolute;left:0;bottom:0;content:"";width:100%;height:2px;background-color:var(--dv-color-monokai-green);z-index:999}.dockview-theme-monokai .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{position:relative}.dockview-theme-monokai .dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab:after{position:absolute;left:0;bottom:0;content:"";width:100%;height:2px;background-color:#a6e22e59;z-index:999}.dockview-theme-solarized-light{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .25);--dv-floating-border: 1px solid rgba(255, 255, 255, .1);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-spacing-padding: 0px;--dv-tab-border-radius: 0px;--dv-sash-border-radius: 0px;--dv-dropdown-border-radius: 0px;--dv-tab-close-icon-size: inherit;--dv-floating-group-border: none;--dv-drag-over-border: none;--dv-floating-group-dragging-opacity: .5;--dv-floating-titlebar-height: 22px;--dv-floating-titlebar-background-color: var( --dv-tabs-and-actions-container-background-color );--dv-floating-titlebar-border-bottom: var(--dv-floating-border);--dv-tab-group-color-grey: #5f6368;--dv-tab-group-color-blue: #1a73e8;--dv-tab-group-color-red: #d93025;--dv-tab-group-color-yellow: #f9ab00;--dv-tab-group-color-green: #188038;--dv-tab-group-color-pink: #d01884;--dv-tab-group-color-purple: #a142f4;--dv-tab-group-color-cyan: #007b83;--dv-tab-group-color-orange: #e8710a;--dv-tab-group-chip-padding: 4px 8px;--dv-tab-group-chip-border-radius: 6px;--dv-tab-group-chip-font-size: 11px;--dv-tab-group-line-height: 2px;--dv-tab-group-line-opacity: .6}.dockview-theme-solarized-light .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-solarized-light{--dv-color-sol-base3: #fdf6e3;--dv-color-sol-base2: #eee8d5;--dv-color-sol-base1: #93a1a1;--dv-color-sol-base00: #657b83;--dv-color-sol-base01: #586e75;--dv-color-sol-blue: #268bd2;--dv-group-view-background-color: var(--dv-color-sol-base3);--dv-tabs-and-actions-container-background-color: var(--dv-color-sol-base2);--dv-activegroup-visiblepanel-tab-background-color: var( --dv-color-sol-base3 );--dv-activegroup-hiddenpanel-tab-background-color: #e8e2d0;--dv-inactivegroup-visiblepanel-tab-background-color: var( --dv-color-sol-base3 );--dv-inactivegroup-hiddenpanel-tab-background-color: #e8e2d0;--dv-activegroup-visiblepanel-tab-color: var(--dv-color-sol-base01);--dv-activegroup-hiddenpanel-tab-color: var(--dv-color-sol-base00);--dv-inactivegroup-visiblepanel-tab-color: var(--dv-color-sol-base1);--dv-inactivegroup-hiddenpanel-tab-color: rgba(147, 161, 161, .6);--dv-separator-border: var(--dv-color-sol-base2);--dv-paneview-active-outline-color: var(--dv-color-sol-blue);--dv-active-sash-color: var(--dv-color-sol-blue);--dv-scrollbar-background-color: rgba(101, 123, 131, .25);--dv-drag-over-background-color: rgba(38, 139, 210, .15);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .08);--dv-floating-border: 1px solid rgba(0, 0, 0, .1)}.dockview-theme-solarized-light-spaced{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .25);--dv-floating-border: 1px solid rgba(255, 255, 255, .1);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-spacing-padding: 0px;--dv-tab-border-radius: 0px;--dv-sash-border-radius: 0px;--dv-dropdown-border-radius: 0px;--dv-tab-close-icon-size: inherit;--dv-floating-group-border: none;--dv-drag-over-border: none;--dv-floating-group-dragging-opacity: .5;--dv-floating-titlebar-height: 22px;--dv-floating-titlebar-background-color: var( --dv-tabs-and-actions-container-background-color );--dv-floating-titlebar-border-bottom: var(--dv-floating-border);--dv-tab-group-color-grey: #5f6368;--dv-tab-group-color-blue: #1a73e8;--dv-tab-group-color-red: #d93025;--dv-tab-group-color-yellow: #f9ab00;--dv-tab-group-color-green: #188038;--dv-tab-group-color-pink: #d01884;--dv-tab-group-color-purple: #a142f4;--dv-tab-group-color-cyan: #007b83;--dv-tab-group-color-orange: #e8710a;--dv-tab-group-chip-padding: 4px 8px;--dv-tab-group-chip-border-radius: 6px;--dv-tab-group-chip-font-size: 11px;--dv-tab-group-line-height: 2px;--dv-tab-group-line-opacity: .6;--dv-spacing-padding: 10px;--dv-tab-font-size: 12px;--dv-border-radius: 12px;--dv-tab-margin: .5rem .25rem;--dv-tabs-and-actions-container-height: 44px;--dv-tab-border-radius: 8px;--dv-sash-border-radius: 4px;--dv-dropdown-border-radius: 8px;--dv-tab-close-icon-size: 8px;--dv-floating-group-border: 2px solid var(--dv-group-view-background-color);--dv-floating-titlebar-background-color: var( --dv-group-view-background-color );--dv-floating-titlebar-border-bottom: none;box-sizing:border-box;padding:var(--dv-spacing-padding);background-color:var(--dv-group-view-background-color)}.dv-shell .dockview-theme-solarized-light-spaced{padding:0}.dockview-theme-solarized-light-spaced .dv-resize-container:has(>.dv-groupview){border-radius:8px}.dockview-theme-solarized-light-spaced .dv-sash{border-radius:var(--dv-sash-border-radius)}.dockview-theme-solarized-light-spaced .dv-drop-target-anchor{border-radius:calc(var(--dv-border-radius) / 4)}.dockview-theme-solarized-light-spaced .dv-drop-target-anchor.dv-drop-target-content{border-radius:var(--dv-border-radius)}.dockview-theme-solarized-light-spaced .dv-resize-container{border-radius:var(--dv-border-radius)!important;border:none}.dockview-theme-solarized-light-spaced .dv-resize-container .dv-groupview{border:var(--dv-floating-group-border)}.dockview-theme-solarized-light-spaced .dv-resize-container>.dv-grid-view{box-sizing:border-box;padding:var(--dv-spacing-padding)}.dockview-theme-solarized-light-spaced .dv-resize-container-with-titlebar>.dv-grid-view{padding-top:0}.dockview-theme-solarized-light-spaced .dv-resize-container-with-titlebar>.dv-floating-titlebar{border-top-left-radius:var(--dv-border-radius);border-top-right-radius:var(--dv-border-radius)}.dockview-theme-solarized-light-spaced .dv-tabs-overflow-container,.dockview-theme-solarized-light-spaced .dv-tabs-overflow-dropdown-default{border-radius:var(--dv-dropdown-border-radius);height:unset!important}.dockview-theme-solarized-light-spaced .dv-render-overlay{border-bottom-left-radius:var(--dv-border-radius);border-bottom-right-radius:var(--dv-border-radius)}.dockview-theme-solarized-light-spaced .dv-tab{border-radius:var(--dv-tab-border-radius)}.dockview-theme-solarized-light-spaced .dv-tab .dv-svg{height:var(--dv-tab-close-icon-size);width:var(--dv-tab-close-icon-size)}.dockview-theme-solarized-light-spaced .dv-tabs-container-vertical .dv-tab{margin:.25rem .5rem}.dockview-theme-solarized-light-spaced .dv-groupview{border-radius:var(--dv-border-radius)}.dockview-theme-solarized-light-spaced .dv-groupview .dv-tabs-and-actions-container{padding:0px calc(var(--dv-border-radius) / 2);border-top-left-radius:var(--dv-border-radius);border-top-right-radius:var(--dv-border-radius)}.dockview-theme-solarized-light-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical{padding:calc(var(--dv-border-radius) / 2) 0}.dockview-theme-solarized-light-spaced .dv-groupview .dv-content-container{background-color:var(--dv-tabs-and-actions-container-background-color);border-bottom-left-radius:var(--dv-border-radius);border-bottom-right-radius:var(--dv-border-radius)}.dockview-theme-solarized-light-spaced{--dv-color-sol-base3: #fdf6e3;--dv-color-sol-base2: #eee8d5;--dv-color-sol-base1: #93a1a1;--dv-color-sol-base00: #657b83;--dv-color-sol-base01: #586e75;--dv-color-sol-blue: #268bd2;--dv-drag-over-background-color: rgba(38, 139, 210, .1);--dv-group-view-background-color: var(--dv-color-sol-base2);--dv-tabs-and-actions-container-background-color: var(--dv-color-sol-base3);--dv-activegroup-visiblepanel-tab-background-color: #e8e2d0;--dv-activegroup-hiddenpanel-tab-background-color: var( --dv-color-sol-base3 );--dv-inactivegroup-visiblepanel-tab-background-color: #e8e2d0;--dv-inactivegroup-hiddenpanel-tab-background-color: var( --dv-color-sol-base3 );--dv-activegroup-visiblepanel-tab-color: var(--dv-color-sol-base01);--dv-activegroup-hiddenpanel-tab-color: var(--dv-color-sol-base00);--dv-inactivegroup-visiblepanel-tab-color: var(--dv-color-sol-base1);--dv-inactivegroup-hiddenpanel-tab-color: rgba(147, 161, 161, .6);--dv-separator-border: transparent;--dv-paneview-active-outline-color: var(--dv-color-sol-blue);--dv-active-sash-color: var(--dv-color-sol-blue);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .08);--dv-floating-border: 1px solid rgba(0, 0, 0, .1);--dv-scrollbar-background-color: rgba(101, 123, 131, .25);--dv-floating-group-border: 2px solid rgba(238, 232, 213, .5)}.dockview-theme-github-dark{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .25);--dv-floating-border: 1px solid rgba(255, 255, 255, .1);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-spacing-padding: 0px;--dv-tab-border-radius: 0px;--dv-sash-border-radius: 0px;--dv-dropdown-border-radius: 0px;--dv-tab-close-icon-size: inherit;--dv-floating-group-border: none;--dv-drag-over-border: none;--dv-floating-group-dragging-opacity: .5;--dv-floating-titlebar-height: 22px;--dv-floating-titlebar-background-color: var( --dv-tabs-and-actions-container-background-color );--dv-floating-titlebar-border-bottom: var(--dv-floating-border);--dv-tab-group-color-grey: #5f6368;--dv-tab-group-color-blue: #1a73e8;--dv-tab-group-color-red: #d93025;--dv-tab-group-color-yellow: #f9ab00;--dv-tab-group-color-green: #188038;--dv-tab-group-color-pink: #d01884;--dv-tab-group-color-purple: #a142f4;--dv-tab-group-color-cyan: #007b83;--dv-tab-group-color-orange: #e8710a;--dv-tab-group-chip-padding: 4px 8px;--dv-tab-group-chip-border-radius: 6px;--dv-tab-group-chip-font-size: 11px;--dv-tab-group-line-height: 2px;--dv-tab-group-line-opacity: .6}.dockview-theme-github-dark .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-github-dark{--dv-color-gh-canvas-default: #0d1117;--dv-color-gh-canvas-subtle: #161b22;--dv-color-gh-canvas-inset: #010409;--dv-color-gh-border: #30363d;--dv-color-gh-border-muted: #21262d;--dv-color-gh-fg-default: #e6edf3;--dv-color-gh-fg-muted: #8b949e;--dv-color-gh-fg-subtle: #6e7681;--dv-color-gh-accent: #58a6ff;--dv-group-view-background-color: var(--dv-color-gh-canvas-default);--dv-tabs-and-actions-container-background-color: var( --dv-color-gh-canvas-subtle );--dv-activegroup-visiblepanel-tab-background-color: var( --dv-color-gh-canvas-default );--dv-activegroup-hiddenpanel-tab-background-color: var( --dv-color-gh-canvas-subtle );--dv-inactivegroup-visiblepanel-tab-background-color: var( --dv-color-gh-canvas-default );--dv-inactivegroup-hiddenpanel-tab-background-color: var( --dv-color-gh-canvas-subtle );--dv-activegroup-visiblepanel-tab-color: var(--dv-color-gh-fg-default);--dv-activegroup-hiddenpanel-tab-color: var(--dv-color-gh-fg-muted);--dv-inactivegroup-visiblepanel-tab-color: var(--dv-color-gh-fg-subtle);--dv-inactivegroup-hiddenpanel-tab-color: rgba(110, 118, 129, .5);--dv-separator-border: var(--dv-color-gh-border);--dv-paneview-active-outline-color: var(--dv-color-gh-accent);--dv-active-sash-color: var(--dv-color-gh-accent);--dv-scrollbar-background-color: rgba(48, 54, 61, .7);--dv-drag-over-background-color: rgba(88, 166, 255, .15)}.dockview-theme-github-dark-spaced{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .25);--dv-floating-border: 1px solid rgba(255, 255, 255, .1);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-spacing-padding: 0px;--dv-tab-border-radius: 0px;--dv-sash-border-radius: 0px;--dv-dropdown-border-radius: 0px;--dv-tab-close-icon-size: inherit;--dv-floating-group-border: none;--dv-drag-over-border: none;--dv-floating-group-dragging-opacity: .5;--dv-floating-titlebar-height: 22px;--dv-floating-titlebar-background-color: var( --dv-tabs-and-actions-container-background-color );--dv-floating-titlebar-border-bottom: var(--dv-floating-border);--dv-tab-group-color-grey: #5f6368;--dv-tab-group-color-blue: #1a73e8;--dv-tab-group-color-red: #d93025;--dv-tab-group-color-yellow: #f9ab00;--dv-tab-group-color-green: #188038;--dv-tab-group-color-pink: #d01884;--dv-tab-group-color-purple: #a142f4;--dv-tab-group-color-cyan: #007b83;--dv-tab-group-color-orange: #e8710a;--dv-tab-group-chip-padding: 4px 8px;--dv-tab-group-chip-border-radius: 6px;--dv-tab-group-chip-font-size: 11px;--dv-tab-group-line-height: 2px;--dv-tab-group-line-opacity: .6;--dv-spacing-padding: 10px;--dv-tab-font-size: 12px;--dv-border-radius: 12px;--dv-tab-margin: .5rem .25rem;--dv-tabs-and-actions-container-height: 44px;--dv-tab-border-radius: 8px;--dv-sash-border-radius: 4px;--dv-dropdown-border-radius: 8px;--dv-tab-close-icon-size: 8px;--dv-floating-group-border: 2px solid var(--dv-group-view-background-color);--dv-floating-titlebar-background-color: var( --dv-group-view-background-color );--dv-floating-titlebar-border-bottom: none;box-sizing:border-box;padding:var(--dv-spacing-padding);background-color:var(--dv-group-view-background-color)}.dv-shell .dockview-theme-github-dark-spaced{padding:0}.dockview-theme-github-dark-spaced .dv-resize-container:has(>.dv-groupview){border-radius:8px}.dockview-theme-github-dark-spaced .dv-sash{border-radius:var(--dv-sash-border-radius)}.dockview-theme-github-dark-spaced .dv-drop-target-anchor{border-radius:calc(var(--dv-border-radius) / 4)}.dockview-theme-github-dark-spaced .dv-drop-target-anchor.dv-drop-target-content{border-radius:var(--dv-border-radius)}.dockview-theme-github-dark-spaced .dv-resize-container{border-radius:var(--dv-border-radius)!important;border:none}.dockview-theme-github-dark-spaced .dv-resize-container .dv-groupview{border:var(--dv-floating-group-border)}.dockview-theme-github-dark-spaced .dv-resize-container>.dv-grid-view{box-sizing:border-box;padding:var(--dv-spacing-padding)}.dockview-theme-github-dark-spaced .dv-resize-container-with-titlebar>.dv-grid-view{padding-top:0}.dockview-theme-github-dark-spaced .dv-resize-container-with-titlebar>.dv-floating-titlebar{border-top-left-radius:var(--dv-border-radius);border-top-right-radius:var(--dv-border-radius)}.dockview-theme-github-dark-spaced .dv-tabs-overflow-container,.dockview-theme-github-dark-spaced .dv-tabs-overflow-dropdown-default{border-radius:var(--dv-dropdown-border-radius);height:unset!important}.dockview-theme-github-dark-spaced .dv-render-overlay{border-bottom-left-radius:var(--dv-border-radius);border-bottom-right-radius:var(--dv-border-radius)}.dockview-theme-github-dark-spaced .dv-tab{border-radius:var(--dv-tab-border-radius)}.dockview-theme-github-dark-spaced .dv-tab .dv-svg{height:var(--dv-tab-close-icon-size);width:var(--dv-tab-close-icon-size)}.dockview-theme-github-dark-spaced .dv-tabs-container-vertical .dv-tab{margin:.25rem .5rem}.dockview-theme-github-dark-spaced .dv-groupview{border-radius:var(--dv-border-radius)}.dockview-theme-github-dark-spaced .dv-groupview .dv-tabs-and-actions-container{padding:0px calc(var(--dv-border-radius) / 2);border-top-left-radius:var(--dv-border-radius);border-top-right-radius:var(--dv-border-radius)}.dockview-theme-github-dark-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical{padding:calc(var(--dv-border-radius) / 2) 0}.dockview-theme-github-dark-spaced .dv-groupview .dv-content-container{background-color:var(--dv-tabs-and-actions-container-background-color);border-bottom-left-radius:var(--dv-border-radius);border-bottom-right-radius:var(--dv-border-radius)}.dockview-theme-github-dark-spaced{--dv-color-gh-canvas-default: #0d1117;--dv-color-gh-canvas-subtle: #161b22;--dv-color-gh-canvas-inset: #010409;--dv-color-gh-border: #30363d;--dv-color-gh-border-muted: #21262d;--dv-color-gh-fg-default: #e6edf3;--dv-color-gh-fg-muted: #8b949e;--dv-color-gh-fg-subtle: #6e7681;--dv-color-gh-accent: #58a6ff;--dv-drag-over-background-color: rgba(88, 166, 255, .1);--dv-group-view-background-color: var(--dv-color-gh-canvas-inset);--dv-tabs-and-actions-container-background-color: var( --dv-color-gh-canvas-subtle );--dv-activegroup-visiblepanel-tab-background-color: var( --dv-color-gh-border );--dv-activegroup-hiddenpanel-tab-background-color: var( --dv-color-gh-canvas-subtle );--dv-inactivegroup-visiblepanel-tab-background-color: var( --dv-color-gh-border );--dv-inactivegroup-hiddenpanel-tab-background-color: var( --dv-color-gh-canvas-subtle );--dv-activegroup-visiblepanel-tab-color: var(--dv-color-gh-fg-default);--dv-activegroup-hiddenpanel-tab-color: var(--dv-color-gh-fg-muted);--dv-inactivegroup-visiblepanel-tab-color: var(--dv-color-gh-fg-subtle);--dv-inactivegroup-hiddenpanel-tab-color: rgba(110, 118, 129, .5);--dv-separator-border: transparent;--dv-paneview-active-outline-color: var(--dv-color-gh-accent);--dv-active-sash-color: var(--dv-color-gh-accent);--dv-scrollbar-background-color: rgba(48, 54, 61, .7);--dv-floating-group-border: 2px solid var(--dv-color-gh-canvas-inset)}.dockview-theme-github-light{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .25);--dv-floating-border: 1px solid rgba(255, 255, 255, .1);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-spacing-padding: 0px;--dv-tab-border-radius: 0px;--dv-sash-border-radius: 0px;--dv-dropdown-border-radius: 0px;--dv-tab-close-icon-size: inherit;--dv-floating-group-border: none;--dv-drag-over-border: none;--dv-floating-group-dragging-opacity: .5;--dv-floating-titlebar-height: 22px;--dv-floating-titlebar-background-color: var( --dv-tabs-and-actions-container-background-color );--dv-floating-titlebar-border-bottom: var(--dv-floating-border);--dv-tab-group-color-grey: #5f6368;--dv-tab-group-color-blue: #1a73e8;--dv-tab-group-color-red: #d93025;--dv-tab-group-color-yellow: #f9ab00;--dv-tab-group-color-green: #188038;--dv-tab-group-color-pink: #d01884;--dv-tab-group-color-purple: #a142f4;--dv-tab-group-color-cyan: #007b83;--dv-tab-group-color-orange: #e8710a;--dv-tab-group-chip-padding: 4px 8px;--dv-tab-group-chip-border-radius: 6px;--dv-tab-group-chip-font-size: 11px;--dv-tab-group-line-height: 2px;--dv-tab-group-line-opacity: .6}.dockview-theme-github-light .dv-drop-target-container .dv-drop-target-anchor.dv-drop-target-anchor-container-changed{opacity:0;transition:none}.dockview-theme-github-light{--dv-color-gh-light-canvas-default: #ffffff;--dv-color-gh-light-canvas-subtle: #f6f8fa;--dv-color-gh-light-canvas-inset: #f0f6ff;--dv-color-gh-light-border: #d0d7de;--dv-color-gh-light-fg-default: #1f2328;--dv-color-gh-light-fg-muted: #656d76;--dv-color-gh-light-fg-subtle: #6e7781;--dv-color-gh-light-accent: #0969da;--dv-group-view-background-color: var(--dv-color-gh-light-canvas-default);--dv-tabs-and-actions-container-background-color: var( --dv-color-gh-light-canvas-subtle );--dv-activegroup-visiblepanel-tab-background-color: var( --dv-color-gh-light-canvas-default );--dv-activegroup-hiddenpanel-tab-background-color: var( --dv-color-gh-light-canvas-subtle );--dv-inactivegroup-visiblepanel-tab-background-color: var( --dv-color-gh-light-canvas-default );--dv-inactivegroup-hiddenpanel-tab-background-color: var( --dv-color-gh-light-canvas-subtle );--dv-activegroup-visiblepanel-tab-color: var( --dv-color-gh-light-fg-default );--dv-activegroup-hiddenpanel-tab-color: var(--dv-color-gh-light-fg-muted);--dv-inactivegroup-visiblepanel-tab-color: var( --dv-color-gh-light-fg-subtle );--dv-inactivegroup-hiddenpanel-tab-color: rgba(110, 118, 129, .4);--dv-separator-border: var(--dv-color-gh-light-border);--dv-paneview-active-outline-color: var(--dv-color-gh-light-accent);--dv-active-sash-color: var(--dv-color-gh-light-accent);--dv-scrollbar-background-color: rgba(208, 215, 222, .5);--dv-drag-over-background-color: rgba(9, 105, 218, .1);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .08);--dv-floating-border: 1px solid rgba(0, 0, 0, .1)}.dockview-theme-github-light-spaced{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .25);--dv-floating-border: 1px solid rgba(255, 255, 255, .1);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-spacing-padding: 0px;--dv-tab-border-radius: 0px;--dv-sash-border-radius: 0px;--dv-dropdown-border-radius: 0px;--dv-tab-close-icon-size: inherit;--dv-floating-group-border: none;--dv-drag-over-border: none;--dv-floating-group-dragging-opacity: .5;--dv-floating-titlebar-height: 22px;--dv-floating-titlebar-background-color: var( --dv-tabs-and-actions-container-background-color );--dv-floating-titlebar-border-bottom: var(--dv-floating-border);--dv-tab-group-color-grey: #5f6368;--dv-tab-group-color-blue: #1a73e8;--dv-tab-group-color-red: #d93025;--dv-tab-group-color-yellow: #f9ab00;--dv-tab-group-color-green: #188038;--dv-tab-group-color-pink: #d01884;--dv-tab-group-color-purple: #a142f4;--dv-tab-group-color-cyan: #007b83;--dv-tab-group-color-orange: #e8710a;--dv-tab-group-chip-padding: 4px 8px;--dv-tab-group-chip-border-radius: 6px;--dv-tab-group-chip-font-size: 11px;--dv-tab-group-line-height: 2px;--dv-tab-group-line-opacity: .6;--dv-spacing-padding: 10px;--dv-tab-font-size: 12px;--dv-border-radius: 12px;--dv-tab-margin: .5rem .25rem;--dv-tabs-and-actions-container-height: 44px;--dv-tab-border-radius: 8px;--dv-sash-border-radius: 4px;--dv-dropdown-border-radius: 8px;--dv-tab-close-icon-size: 8px;--dv-floating-group-border: 2px solid var(--dv-group-view-background-color);--dv-floating-titlebar-background-color: var( --dv-group-view-background-color );--dv-floating-titlebar-border-bottom: none;box-sizing:border-box;padding:var(--dv-spacing-padding);background-color:var(--dv-group-view-background-color)}.dv-shell .dockview-theme-github-light-spaced{padding:0}.dockview-theme-github-light-spaced .dv-resize-container:has(>.dv-groupview){border-radius:8px}.dockview-theme-github-light-spaced .dv-sash{border-radius:var(--dv-sash-border-radius)}.dockview-theme-github-light-spaced .dv-drop-target-anchor{border-radius:calc(var(--dv-border-radius) / 4)}.dockview-theme-github-light-spaced .dv-drop-target-anchor.dv-drop-target-content{border-radius:var(--dv-border-radius)}.dockview-theme-github-light-spaced .dv-resize-container{border-radius:var(--dv-border-radius)!important;border:none}.dockview-theme-github-light-spaced .dv-resize-container .dv-groupview{border:var(--dv-floating-group-border)}.dockview-theme-github-light-spaced .dv-resize-container>.dv-grid-view{box-sizing:border-box;padding:var(--dv-spacing-padding)}.dockview-theme-github-light-spaced .dv-resize-container-with-titlebar>.dv-grid-view{padding-top:0}.dockview-theme-github-light-spaced .dv-resize-container-with-titlebar>.dv-floating-titlebar{border-top-left-radius:var(--dv-border-radius);border-top-right-radius:var(--dv-border-radius)}.dockview-theme-github-light-spaced .dv-tabs-overflow-container,.dockview-theme-github-light-spaced .dv-tabs-overflow-dropdown-default{border-radius:var(--dv-dropdown-border-radius);height:unset!important}.dockview-theme-github-light-spaced .dv-render-overlay{border-bottom-left-radius:var(--dv-border-radius);border-bottom-right-radius:var(--dv-border-radius)}.dockview-theme-github-light-spaced .dv-tab{border-radius:var(--dv-tab-border-radius)}.dockview-theme-github-light-spaced .dv-tab .dv-svg{height:var(--dv-tab-close-icon-size);width:var(--dv-tab-close-icon-size)}.dockview-theme-github-light-spaced .dv-tabs-container-vertical .dv-tab{margin:.25rem .5rem}.dockview-theme-github-light-spaced .dv-groupview{border-radius:var(--dv-border-radius)}.dockview-theme-github-light-spaced .dv-groupview .dv-tabs-and-actions-container{padding:0px calc(var(--dv-border-radius) / 2);border-top-left-radius:var(--dv-border-radius);border-top-right-radius:var(--dv-border-radius)}.dockview-theme-github-light-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical{padding:calc(var(--dv-border-radius) / 2) 0}.dockview-theme-github-light-spaced .dv-groupview .dv-content-container{background-color:var(--dv-tabs-and-actions-container-background-color);border-bottom-left-radius:var(--dv-border-radius);border-bottom-right-radius:var(--dv-border-radius)}.dockview-theme-github-light-spaced{--dv-color-gh-light-canvas-default: #ffffff;--dv-color-gh-light-canvas-subtle: #f6f8fa;--dv-color-gh-light-border: #d0d7de;--dv-color-gh-light-fg-default: #1f2328;--dv-color-gh-light-fg-muted: #656d76;--dv-color-gh-light-fg-subtle: #6e7781;--dv-color-gh-light-accent: #0969da;--dv-drag-over-background-color: rgba(9, 105, 218, .08);--dv-group-view-background-color: var(--dv-color-gh-light-canvas-subtle);--dv-tabs-and-actions-container-background-color: var( --dv-color-gh-light-canvas-default );--dv-activegroup-visiblepanel-tab-background-color: var( --dv-color-gh-light-border );--dv-activegroup-hiddenpanel-tab-background-color: var( --dv-color-gh-light-canvas-default );--dv-inactivegroup-visiblepanel-tab-background-color: var( --dv-color-gh-light-border );--dv-inactivegroup-hiddenpanel-tab-background-color: var( --dv-color-gh-light-canvas-default );--dv-activegroup-visiblepanel-tab-color: var( --dv-color-gh-light-fg-default );--dv-activegroup-hiddenpanel-tab-color: var(--dv-color-gh-light-fg-muted);--dv-inactivegroup-visiblepanel-tab-color: var( --dv-color-gh-light-fg-subtle );--dv-inactivegroup-hiddenpanel-tab-color: rgba(110, 118, 129, .4);--dv-separator-border: transparent;--dv-paneview-active-outline-color: var(--dv-color-gh-light-accent);--dv-active-sash-color: var(--dv-color-gh-light-accent);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .08);--dv-floating-border: 1px solid rgba(0, 0, 0, .1);--dv-scrollbar-background-color: rgba(208, 215, 222, .5);--dv-floating-group-border: 2px solid rgba(208, 215, 222, .5)}.dockview-theme-abyss-spaced{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .25);--dv-floating-border: 1px solid rgba(255, 255, 255, .1);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-spacing-padding: 0px;--dv-tab-border-radius: 0px;--dv-sash-border-radius: 0px;--dv-dropdown-border-radius: 0px;--dv-tab-close-icon-size: inherit;--dv-floating-group-border: none;--dv-drag-over-border: none;--dv-floating-group-dragging-opacity: .5;--dv-floating-titlebar-height: 22px;--dv-floating-titlebar-background-color: var( --dv-tabs-and-actions-container-background-color );--dv-floating-titlebar-border-bottom: var(--dv-floating-border);--dv-tab-group-color-grey: #5f6368;--dv-tab-group-color-blue: #1a73e8;--dv-tab-group-color-red: #d93025;--dv-tab-group-color-yellow: #f9ab00;--dv-tab-group-color-green: #188038;--dv-tab-group-color-pink: #d01884;--dv-tab-group-color-purple: #a142f4;--dv-tab-group-color-cyan: #007b83;--dv-tab-group-color-orange: #e8710a;--dv-tab-group-chip-padding: 4px 8px;--dv-tab-group-chip-border-radius: 6px;--dv-tab-group-chip-font-size: 11px;--dv-tab-group-line-height: 2px;--dv-tab-group-line-opacity: .6;--dv-spacing-padding: 10px;--dv-tab-font-size: 12px;--dv-border-radius: 12px;--dv-tab-margin: .5rem .25rem;--dv-tabs-and-actions-container-height: 44px;--dv-tab-border-radius: 8px;--dv-sash-border-radius: 4px;--dv-dropdown-border-radius: 8px;--dv-tab-close-icon-size: 8px;--dv-floating-group-border: 2px solid var(--dv-group-view-background-color);--dv-floating-titlebar-background-color: var( --dv-group-view-background-color );--dv-floating-titlebar-border-bottom: none;box-sizing:border-box;padding:var(--dv-spacing-padding);background-color:var(--dv-group-view-background-color)}.dv-shell .dockview-theme-abyss-spaced{padding:0}.dockview-theme-abyss-spaced .dv-resize-container:has(>.dv-groupview){border-radius:8px}.dockview-theme-abyss-spaced .dv-sash{border-radius:var(--dv-sash-border-radius)}.dockview-theme-abyss-spaced .dv-drop-target-anchor{border-radius:calc(var(--dv-border-radius) / 4)}.dockview-theme-abyss-spaced .dv-drop-target-anchor.dv-drop-target-content{border-radius:var(--dv-border-radius)}.dockview-theme-abyss-spaced .dv-resize-container{border-radius:var(--dv-border-radius)!important;border:none}.dockview-theme-abyss-spaced .dv-resize-container .dv-groupview{border:var(--dv-floating-group-border)}.dockview-theme-abyss-spaced .dv-resize-container>.dv-grid-view{box-sizing:border-box;padding:var(--dv-spacing-padding)}.dockview-theme-abyss-spaced .dv-resize-container-with-titlebar>.dv-grid-view{padding-top:0}.dockview-theme-abyss-spaced .dv-resize-container-with-titlebar>.dv-floating-titlebar{border-top-left-radius:var(--dv-border-radius);border-top-right-radius:var(--dv-border-radius)}.dockview-theme-abyss-spaced .dv-tabs-overflow-container,.dockview-theme-abyss-spaced .dv-tabs-overflow-dropdown-default{border-radius:var(--dv-dropdown-border-radius);height:unset!important}.dockview-theme-abyss-spaced .dv-render-overlay{border-bottom-left-radius:var(--dv-border-radius);border-bottom-right-radius:var(--dv-border-radius)}.dockview-theme-abyss-spaced .dv-tab{border-radius:var(--dv-tab-border-radius)}.dockview-theme-abyss-spaced .dv-tab .dv-svg{height:var(--dv-tab-close-icon-size);width:var(--dv-tab-close-icon-size)}.dockview-theme-abyss-spaced .dv-tabs-container-vertical .dv-tab{margin:.25rem .5rem}.dockview-theme-abyss-spaced .dv-groupview{border-radius:var(--dv-border-radius)}.dockview-theme-abyss-spaced .dv-groupview .dv-tabs-and-actions-container{padding:0px calc(var(--dv-border-radius) / 2);border-top-left-radius:var(--dv-border-radius);border-top-right-radius:var(--dv-border-radius)}.dockview-theme-abyss-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical{padding:calc(var(--dv-border-radius) / 2) 0}.dockview-theme-abyss-spaced .dv-groupview .dv-content-container{background-color:var(--dv-tabs-and-actions-container-background-color);border-bottom-left-radius:var(--dv-border-radius);border-bottom-right-radius:var(--dv-border-radius)}.dockview-theme-abyss-spaced{--dv-color-abyss-dark: rgb(11, 6, 17);--dv-color-abyss: #16121f;--dv-color-abyss-light: #201d2b;--dv-color-abyss-lighter: #2a2837;--dv-color-abyss-accent: rgb(91, 30, 207);--dv-color-abyss-primary-text: white;--dv-color-abyss-secondary-text: rgb(148, 151, 169);--dv-drag-over-background-color: "";--dv-group-view-background-color: var(--dv-color-abyss-dark);--dv-tabs-and-actions-container-background-color: var(--dv-color-abyss);--dv-activegroup-visiblepanel-tab-background-color: var( --dv-color-abyss-lighter );--dv-activegroup-hiddenpanel-tab-background-color: var( --dv-color-abyss-light );--dv-inactivegroup-visiblepanel-tab-background-color: var( --dv-color-abyss-lighter );--dv-inactivegroup-hiddenpanel-tab-background-color: var( --dv-color-abyss-light );--dv-tab-divider-color: transparent;--dv-activegroup-visiblepanel-tab-color: var(--dv-color-abyss-primary-text);--dv-activegroup-hiddenpanel-tab-color: var( --dv-color-abyss-secondary-text );--dv-inactivegroup-visiblepanel-tab-color: var( --dv-color-abyss-primary-text );--dv-inactivegroup-hiddenpanel-tab-color: var( --dv-color-abyss-secondary-text );--dv-separator-border: transparent;--dv-paneview-header-border-color: rgb(51, 51, 51);--dv-active-sash-color: var(--dv-color-abyss-accent);--dv-floating-group-border: 2px solid var(--dv-color-abyss-dark)}.dockview-theme-light-spaced{--dv-paneview-active-outline-color: dodgerblue;--dv-tabs-and-actions-container-font-size: 13px;--dv-tabs-and-actions-container-height: 35px;--dv-drag-over-background-color: rgba(83, 89, 93, .5);--dv-drag-over-border-color: transparent;--dv-tabs-container-scrollbar-color: #888;--dv-icon-hover-background-color: rgba(90, 93, 94, .31);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .4), 0 2px 8px rgba(0, 0, 0, .25);--dv-floating-border: 1px solid rgba(255, 255, 255, .1);--dv-overlay-z-index: 999;--dv-tab-font-size: inherit;--dv-border-radius: 0px;--dv-tab-margin: 0;--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-duration: .1s;--dv-active-sash-transition-delay: .5s;--dv-spacing-padding: 0px;--dv-tab-border-radius: 0px;--dv-sash-border-radius: 0px;--dv-dropdown-border-radius: 0px;--dv-tab-close-icon-size: inherit;--dv-floating-group-border: none;--dv-drag-over-border: none;--dv-floating-group-dragging-opacity: .5;--dv-floating-titlebar-height: 22px;--dv-floating-titlebar-background-color: var( --dv-tabs-and-actions-container-background-color );--dv-floating-titlebar-border-bottom: var(--dv-floating-border);--dv-tab-group-color-grey: #5f6368;--dv-tab-group-color-blue: #1a73e8;--dv-tab-group-color-red: #d93025;--dv-tab-group-color-yellow: #f9ab00;--dv-tab-group-color-green: #188038;--dv-tab-group-color-pink: #d01884;--dv-tab-group-color-purple: #a142f4;--dv-tab-group-color-cyan: #007b83;--dv-tab-group-color-orange: #e8710a;--dv-tab-group-chip-padding: 4px 8px;--dv-tab-group-chip-border-radius: 6px;--dv-tab-group-chip-font-size: 11px;--dv-tab-group-line-height: 2px;--dv-tab-group-line-opacity: .6;--dv-spacing-padding: 10px;--dv-tab-font-size: 12px;--dv-border-radius: 12px;--dv-tab-margin: .5rem .25rem;--dv-tabs-and-actions-container-height: 44px;--dv-tab-border-radius: 8px;--dv-sash-border-radius: 4px;--dv-dropdown-border-radius: 8px;--dv-tab-close-icon-size: 8px;--dv-floating-group-border: 2px solid var(--dv-group-view-background-color);--dv-floating-titlebar-background-color: var( --dv-group-view-background-color );--dv-floating-titlebar-border-bottom: none;box-sizing:border-box;padding:var(--dv-spacing-padding);background-color:var(--dv-group-view-background-color)}.dv-shell .dockview-theme-light-spaced{padding:0}.dockview-theme-light-spaced .dv-resize-container:has(>.dv-groupview){border-radius:8px}.dockview-theme-light-spaced .dv-sash{border-radius:var(--dv-sash-border-radius)}.dockview-theme-light-spaced .dv-drop-target-anchor{border-radius:calc(var(--dv-border-radius) / 4)}.dockview-theme-light-spaced .dv-drop-target-anchor.dv-drop-target-content{border-radius:var(--dv-border-radius)}.dockview-theme-light-spaced .dv-resize-container{border-radius:var(--dv-border-radius)!important;border:none}.dockview-theme-light-spaced .dv-resize-container .dv-groupview{border:var(--dv-floating-group-border)}.dockview-theme-light-spaced .dv-resize-container>.dv-grid-view{box-sizing:border-box;padding:var(--dv-spacing-padding)}.dockview-theme-light-spaced .dv-resize-container-with-titlebar>.dv-grid-view{padding-top:0}.dockview-theme-light-spaced .dv-resize-container-with-titlebar>.dv-floating-titlebar{border-top-left-radius:var(--dv-border-radius);border-top-right-radius:var(--dv-border-radius)}.dockview-theme-light-spaced .dv-tabs-overflow-container,.dockview-theme-light-spaced .dv-tabs-overflow-dropdown-default{border-radius:var(--dv-dropdown-border-radius);height:unset!important}.dockview-theme-light-spaced .dv-render-overlay{border-bottom-left-radius:var(--dv-border-radius);border-bottom-right-radius:var(--dv-border-radius)}.dockview-theme-light-spaced .dv-tab{border-radius:var(--dv-tab-border-radius)}.dockview-theme-light-spaced .dv-tab .dv-svg{height:var(--dv-tab-close-icon-size);width:var(--dv-tab-close-icon-size)}.dockview-theme-light-spaced .dv-tabs-container-vertical .dv-tab{margin:.25rem .5rem}.dockview-theme-light-spaced .dv-groupview{border-radius:var(--dv-border-radius)}.dockview-theme-light-spaced .dv-groupview .dv-tabs-and-actions-container{padding:0px calc(var(--dv-border-radius) / 2);border-top-left-radius:var(--dv-border-radius);border-top-right-radius:var(--dv-border-radius)}.dockview-theme-light-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical{padding:calc(var(--dv-border-radius) / 2) 0}.dockview-theme-light-spaced .dv-groupview .dv-content-container{background-color:var(--dv-tabs-and-actions-container-background-color);border-bottom-left-radius:var(--dv-border-radius);border-bottom-right-radius:var(--dv-border-radius)}.dockview-theme-light-spaced{--dv-drag-over-background-color: "";--dv-group-view-background-color: #f6f5f9;--dv-tabs-and-actions-container-background-color: white;--dv-activegroup-visiblepanel-tab-background-color: #ededf0;--dv-activegroup-hiddenpanel-tab-background-color: #f9f9fa;--dv-inactivegroup-visiblepanel-tab-background-color: #ededf0;--dv-inactivegroup-hiddenpanel-tab-background-color: #f9f9fa;--dv-tab-divider-color: transparent;--dv-activegroup-visiblepanel-tab-color: rgb(104, 107, 130);--dv-activegroup-hiddenpanel-tab-color: rgb(148, 151, 169);--dv-inactivegroup-visiblepanel-tab-color: rgb(104, 107, 130);--dv-inactivegroup-hiddenpanel-tab-color: rgb(148, 151, 169);--dv-separator-border: transparent;--dv-paneview-header-border-color: rgb(51, 51, 51);--dv-active-sash-color: rgb(91, 30, 207);--dv-floating-box-shadow: 0 8px 32px rgba(0, 0, 0, .12), 0 2px 8px rgba(0, 0, 0, .08);--dv-floating-border: 1px solid rgba(0, 0, 0, .1);--dv-scrollbar-background-color: rgba(0, 0, 0, .25);--dv-floating-group-border: 2px solid rgba(255, 255, 255, .1)}.dockview-spaced{--dv-spacing-padding: 10px;--dv-tab-font-size: 12px;--dv-border-radius: 12px;--dv-tab-margin: .5rem .25rem;--dv-tabs-and-actions-container-height: 44px;--dv-tab-border-radius: 8px;--dv-sash-border-radius: 4px;--dv-dropdown-border-radius: 8px;--dv-tab-close-icon-size: 8px;--dv-floating-group-border: 2px solid var(--dv-group-view-background-color);--dv-floating-titlebar-background-color: var( --dv-group-view-background-color );--dv-floating-titlebar-border-bottom: none;box-sizing:border-box;padding:var(--dv-spacing-padding);background-color:var(--dv-group-view-background-color)}.dv-shell .dockview-spaced{padding:0}.dockview-spaced .dv-resize-container:has(>.dv-groupview){border-radius:8px}.dockview-spaced .dv-sash{border-radius:var(--dv-sash-border-radius)}.dockview-spaced .dv-drop-target-anchor{border-radius:calc(var(--dv-border-radius) / 4)}.dockview-spaced .dv-drop-target-anchor.dv-drop-target-content{border-radius:var(--dv-border-radius)}.dockview-spaced .dv-resize-container{border-radius:var(--dv-border-radius)!important;border:none}.dockview-spaced .dv-resize-container .dv-groupview{border:var(--dv-floating-group-border)}.dockview-spaced .dv-resize-container>.dv-grid-view{box-sizing:border-box;padding:var(--dv-spacing-padding)}.dockview-spaced .dv-resize-container-with-titlebar>.dv-grid-view{padding-top:0}.dockview-spaced .dv-resize-container-with-titlebar>.dv-floating-titlebar{border-top-left-radius:var(--dv-border-radius);border-top-right-radius:var(--dv-border-radius)}.dockview-spaced .dv-tabs-overflow-container,.dockview-spaced .dv-tabs-overflow-dropdown-default{border-radius:var(--dv-dropdown-border-radius);height:unset!important}.dockview-spaced .dv-render-overlay{border-bottom-left-radius:var(--dv-border-radius);border-bottom-right-radius:var(--dv-border-radius)}.dockview-spaced .dv-tab{border-radius:var(--dv-tab-border-radius)}.dockview-spaced .dv-tab .dv-svg{height:var(--dv-tab-close-icon-size);width:var(--dv-tab-close-icon-size)}.dockview-spaced .dv-tabs-container-vertical .dv-tab{margin:.25rem .5rem}.dockview-spaced .dv-groupview{border-radius:var(--dv-border-radius)}.dockview-spaced .dv-groupview .dv-tabs-and-actions-container{padding:0px calc(var(--dv-border-radius) / 2);border-top-left-radius:var(--dv-border-radius);border-top-right-radius:var(--dv-border-radius)}.dockview-spaced .dv-groupview .dv-tabs-and-actions-container.dv-groupview-header-vertical{padding:calc(var(--dv-border-radius) / 2) 0}.dockview-spaced .dv-groupview .dv-content-container{background-color:var(--dv-tabs-and-actions-container-background-color);border-bottom-left-radius:var(--dv-border-radius);border-bottom-right-radius:var(--dv-border-radius)}.dv-context-menu{min-width:160px;overflow:hidden;background:var(--dv-context-menu-background-color, var(--dv-activegroup-hiddenpanel-tab-background-color));color:var(--dv-context-menu-color, var(--dv-activegroup-hiddenpanel-tab-color));border:1px solid var(--dv-tab-divider-color);border-radius:var(--dv-border-radius);box-shadow:var(--dv-floating-box-shadow);padding:4px 0}.dv-context-menu-item{height:25px;padding:0 12px;display:flex;align-items:center;cursor:pointer;font-size:var(--dv-tabs-and-actions-container-font-size);white-space:nowrap;user-select:none}.dv-context-menu-item:hover{background:var(--dv-icon-hover-background-color)}.dv-context-menu-item.dv-context-menu-item--disabled{opacity:.4;cursor:default;pointer-events:none}.dv-context-menu-separator{height:1px;background:var(--dv-tab-divider-color);margin:4px 0}.dv-context-menu-rename{padding:8px 12px 4px}.dv-context-menu-rename-input{width:100%;box-sizing:border-box;padding:8px 10px;border:1px solid var(--dv-tab-divider-color);border-radius:var(--dv-border-radius);background:inherit;color:var(--dv-activegroup-visiblepanel-tab-color);font-size:var(--dv-tabs-and-actions-container-font-size);outline:none}.dv-context-menu-rename-input:focus{border-color:var(--dv-activegroup-visiblepanel-tab-color)}.dv-context-menu-rename-input::placeholder{color:var(--dv-activegroup-hiddenpanel-tab-color)}.dv-context-menu-color-picker{display:flex;flex-direction:row;gap:6px;padding:8px 12px;align-items:center}.dv-context-menu-color-swatch{width:20px;height:20px;border-radius:50%;cursor:pointer;border:2px solid transparent;flex-shrink:0;background-color:var(--dv-tab-group-color)}.dv-context-menu-color-swatch:hover{opacity:.85}.dv-context-menu-color-swatch.dv-context-menu-color-swatch--selected{outline:2px solid var(--dv-tab-divider-color);outline-offset:2px}.dv-tab-group-indicator-none .dv-groupview-header-bottom .dv-tab-group-underline{top:auto;bottom:0}.dv-groupview.dv-groupview-header-bottom.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab:after,.dv-groupview.dv-groupview-header-bottom.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab:after{top:0;bottom:auto}.dv-drop-target-container{position:absolute;z-index:9999;top:0;left:0;height:100%;width:100%;pointer-events:none;overflow:hidden;--dv-transition-duration: .3s}.dv-drop-target-container .dv-drop-target-anchor{position:relative;border:var(--dv-drag-over-border);background-color:var(--dv-drag-over-background-color);opacity:1;will-change:transform,opacity;transform:translateZ(0);backface-visibility:hidden;contain:layout paint;transition:opacity var(--dv-transition-duration) ease-in,top var(--dv-transition-duration) ease-out,left var(--dv-transition-duration) ease-out,width var(--dv-transition-duration) ease-out,height var(--dv-transition-duration) ease-out}.dv-drop-target{position:relative;--dv-transition-duration: 70ms}.dv-drop-target>.dv-drop-target-dropzone{position:absolute;left:0;top:0;height:100%;width:100%;z-index:1000;pointer-events:none}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection{position:relative;box-sizing:border-box;height:100%;width:100%;border:var(--dv-drag-over-border);background-color:var(--dv-drag-over-background-color);transition:top var(--dv-transition-duration) ease-out,left var(--dv-transition-duration) ease-out,width var(--dv-transition-duration) ease-out,height var(--dv-transition-duration) ease-out,opacity var(--dv-transition-duration) ease-out;will-change:transform;pointer-events:none}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection.dv-drop-target-top.dv-drop-target-small-vertical{border-top:1px solid var(--dv-drag-over-border-color)}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection.dv-drop-target-bottom.dv-drop-target-small-vertical{border-bottom:1px solid var(--dv-drag-over-border-color)}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection.dv-drop-target-left.dv-drop-target-small-horizontal{border-left:1px solid var(--dv-drag-over-border-color)}.dv-drop-target>.dv-drop-target-dropzone>.dv-drop-target-selection.dv-drop-target-right.dv-drop-target-small-horizontal{border-right:1px solid var(--dv-drag-over-border-color)}.dv-dockview{position:relative;background-color:var(--dv-group-view-background-color)}.dv-dockview .dv-watermark-container{position:absolute;top:0;left:0;height:100%;width:100%;z-index:1}.dv-dockview .dv-overlay-render-container{position:relative}.dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{background-color:var(--dv-activegroup-visiblepanel-tab-background-color);color:var(--dv-activegroup-visiblepanel-tab-color)}.dv-groupview.dv-active-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-inactive-tab{background-color:var(--dv-activegroup-hiddenpanel-tab-background-color);color:var(--dv-activegroup-hiddenpanel-tab-color)}.dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-active-tab{background-color:var(--dv-inactivegroup-visiblepanel-tab-background-color);color:var(--dv-inactivegroup-visiblepanel-tab-color)}.dv-groupview.dv-inactive-group>.dv-tabs-and-actions-container .dv-tabs-container>.dv-tab.dv-inactive-tab{background-color:var(--dv-inactivegroup-hiddenpanel-tab-background-color);color:var(--dv-inactivegroup-hiddenpanel-tab-color)}.dv-tab.dv-tab-dragging{background-color:var(--dv-activegroup-visiblepanel-tab-background-color);color:var(--dv-activegroup-visiblepanel-tab-color)}.dv-groupview{display:flex;height:100%;background-color:var(--dv-group-view-background-color);overflow:hidden;flex-direction:column}.dv-groupview:focus{outline:none}.dv-groupview>.dv-content-container{flex-grow:1;min-height:0;outline:none}.dv-groupview.dv-groupview-header-bottom{flex-direction:column-reverse}.dv-groupview.dv-groupview-header-left{flex-direction:row}.dv-groupview.dv-groupview-header-right{flex-direction:row-reverse}.dv-groupview.dv-groupview-edge.dv-edge-collapsed>.dv-content-container{display:none}.dv-root-wrapper,.dv-grid-view,.dv-branch-node{height:100%;width:100%}.dv-debug .dv-resize-container .dv-resize-handle-top{background-color:red}.dv-debug .dv-resize-container .dv-resize-handle-bottom{background-color:green}.dv-debug .dv-resize-container .dv-resize-handle-left{background-color:#ff0}.dv-debug .dv-resize-container .dv-resize-handle-right{background-color:#00f}.dv-debug .dv-resize-container .dv-resize-handle-topleft,.dv-debug .dv-resize-container .dv-resize-handle-topright,.dv-debug .dv-resize-container .dv-resize-handle-bottomleft,.dv-debug .dv-resize-container .dv-resize-handle-bottomright{background-color:#0ff}.dv-floating-overlay-host{position:absolute;pointer-events:none}.dv-floating-overlay-host>.dv-resize-container{pointer-events:auto}.dv-resize-container>.dv-grid-view{width:100%;height:100%}.dv-resize-container-with-titlebar{display:flex;flex-direction:column}.dv-resize-container-with-titlebar>.dv-floating-titlebar{flex:0 0 auto}.dv-resize-container-with-titlebar>.dv-grid-view{height:auto;flex:1 1 0;min-height:0}.dv-floating-titlebar{box-sizing:border-box;flex-shrink:0;height:var(--dv-floating-titlebar-height, 22px);background-color:var(--dv-floating-titlebar-background-color);border-bottom:var(--dv-floating-titlebar-border-bottom, none);user-select:none;touch-action:none}.dv-floating-titlebar.dv-draggable{cursor:grab}.dv-resize-container{--dv-overlay-z-index: var(--dv-overlay-z-index, 999);position:absolute;z-index:calc(var(--dv-overlay-z-index) - 2);background-color:var(--dv-group-view-background-color);border:var(--dv-floating-border);box-shadow:var(--dv-floating-box-shadow);will-change:transform,opacity;transform:translateZ(0);backface-visibility:hidden}.dv-resize-container.dv-hidden{display:none}.dv-resize-container.dv-resize-container-dragging{opacity:var(--dv-floating-group-dragging-opacity);will-change:transform,opacity}.dv-resize-container .dv-resize-handle-top,.dv-resize-container .dv-resize-handle-bottom,.dv-resize-container .dv-resize-handle-left,.dv-resize-container .dv-resize-handle-right,.dv-resize-container .dv-resize-handle-topleft,.dv-resize-container .dv-resize-handle-topright,.dv-resize-container .dv-resize-handle-bottomleft,.dv-resize-container .dv-resize-handle-bottomright{touch-action:none}.dv-resize-container .dv-resize-handle-top{height:4px;width:calc(100% - 8px);left:4px;top:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ns-resize}.dv-resize-container .dv-resize-handle-bottom{height:4px;width:calc(100% - 8px);left:4px;bottom:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ns-resize}.dv-resize-container .dv-resize-handle-left{height:calc(100% - 8px);width:4px;left:-2px;top:4px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ew-resize}.dv-resize-container .dv-resize-handle-right{height:calc(100% - 8px);width:4px;right:-2px;top:4px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ew-resize}.dv-resize-container .dv-resize-handle-topleft{height:4px;width:4px;top:-2px;left:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:nw-resize}.dv-resize-container .dv-resize-handle-topright{height:4px;width:4px;right:-2px;top:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:ne-resize}.dv-resize-container .dv-resize-handle-bottomleft{height:4px;width:4px;left:-2px;bottom:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:sw-resize}.dv-resize-container .dv-resize-handle-bottomright{height:4px;width:4px;right:-2px;bottom:-2px;z-index:var(--dv-overlay-z-index);position:absolute;cursor:se-resize}@media(pointer:coarse){.dv-resize-container .dv-resize-handle-top,.dv-resize-container .dv-resize-handle-bottom{height:16px;width:calc(100% - 48px);left:24px}.dv-resize-container .dv-resize-handle-top{top:-10px}.dv-resize-container .dv-resize-handle-bottom{bottom:-10px}.dv-resize-container .dv-resize-handle-left,.dv-resize-container .dv-resize-handle-right{width:16px;height:calc(100% - 48px);top:24px}.dv-resize-container .dv-resize-handle-left{left:-10px}.dv-resize-container .dv-resize-handle-right{right:-10px}.dv-resize-container .dv-resize-handle-topleft,.dv-resize-container .dv-resize-handle-topright,.dv-resize-container .dv-resize-handle-bottomleft,.dv-resize-container .dv-resize-handle-bottomright{height:24px;width:24px}.dv-resize-container .dv-resize-handle-topleft{top:-12px;left:-12px}.dv-resize-container .dv-resize-handle-topright{top:-12px;right:-12px}.dv-resize-container .dv-resize-handle-bottomleft{bottom:-12px;left:-12px}.dv-resize-container .dv-resize-handle-bottomright{bottom:-12px;right:-12px}}.dv-render-overlay{--dv-overlay-z-index: var(--dv-overlay-z-index, 999);position:absolute;z-index:1;width:100%;height:100%;contain:layout paint;isolation:isolate;will-change:transform;transform:translateZ(0);backface-visibility:hidden}.dv-render-overlay.dv-render-overlay-float{z-index:calc(var(--dv-overlay-z-index) - 1)}.dv-debug .dv-render-overlay{outline:1px solid red;outline-offset:-1}.dv-pane-container{height:100%;width:100%}.dv-pane-container.dv-animated .dv-view{will-change:transform;transform:translateZ(0);backface-visibility:hidden;transition:transform .15s ease-out}.dv-pane-container .dv-view{overflow:hidden;display:flex;flex-direction:column;padding:0!important}.dv-pane-container .dv-view:not(:first-child):before{background-color:transparent!important}.dv-pane-container .dv-view:not(:first-child) .dv-pane>.dv-pane-header{border-top:1px solid var(--dv-paneview-header-border-color)}.dv-pane-container .dv-view .dv-default-header{background-color:var(--dv-group-view-background-color);color:var(--dv-activegroup-visiblepanel-tab-color);display:flex;padding:0 8px;cursor:pointer}.dv-pane-container .dv-view .dv-default-header .dv-pane-header-icon{display:flex;justify-content:center;align-items:center}.dv-pane-container .dv-view .dv-default-header>span{padding-left:8px;flex-grow:1}.dv-pane-container:first-of-type>.dv-pane>.dv-pane-header{border-top:none!important}.dv-pane-container .dv-pane{display:flex;flex-direction:column;overflow:hidden;height:100%}.dv-pane-container .dv-pane .dv-pane-header{box-sizing:border-box;user-select:none;position:relative;outline:none}.dv-pane-container .dv-pane .dv-pane-header.dv-pane-draggable{cursor:pointer}.dv-pane-container .dv-pane .dv-pane-header:focus:before,.dv-pane-container .dv-pane .dv-pane-header:focus-within:before{position:absolute;top:0;left:0;width:100%;height:100%;z-index:5;content:"";pointer-events:none;outline:1px solid;outline-width:-1px;outline-style:solid;outline-offset:-1px;outline-color:var(--dv-paneview-active-outline-color)}.dv-pane-container .dv-pane .dv-pane-body{overflow-y:auto;overflow-x:hidden;flex-grow:1;position:relative;outline:none}.dv-pane-container .dv-pane .dv-pane-body:focus:before,.dv-pane-container .dv-pane .dv-pane-body:focus-within:before{position:absolute;top:0;left:0;width:100%;height:100%;z-index:5;content:"";pointer-events:none;outline:1px solid;outline-width:-1px;outline-style:solid;outline-offset:-1px;outline-color:var(--dv-paneview-active-outline-color)}.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-enabled{background-color:#000}.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-disabled{background-color:orange}.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-maximum{background-color:green}.dv-debug .dv-split-view-container .dv-sash-container .dv-sash.dv-minimum{background-color:red}.dv-split-view-container{position:relative;overflow:hidden;height:100%;width:100%}.dv-split-view-container.dv-splitview-disabled>.dv-sash-container>.dv-sash{pointer-events:none}.dv-split-view-container.dv-animation .dv-view,.dv-split-view-container.dv-animation .dv-sash{will-change:transform;transform:translateZ(0);backface-visibility:hidden;transition:transform .15s ease-out}.dv-split-view-container.dv-horizontal{height:100%}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash{height:100%;width:4px}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash.dv-enabled{cursor:ew-resize}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash.dv-disabled{cursor:default}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash.dv-maximum{cursor:w-resize}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash.dv-minimum{cursor:e-resize}.dv-split-view-container.dv-horizontal>.dv-view-container>.dv-view:not(:first-child):before{height:100%;width:1px}.dv-split-view-container.dv-vertical{width:100%}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash{width:100%;height:4px}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash.dv-enabled{cursor:ns-resize}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash.dv-disabled{cursor:default}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash.dv-maximum{cursor:n-resize}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash.dv-minimum{cursor:s-resize}.dv-split-view-container.dv-vertical>.dv-view-container>.dv-view{width:100%}.dv-split-view-container.dv-vertical>.dv-view-container>.dv-view:not(:first-child):before{height:1px;width:100%}.dv-split-view-container .dv-sash-container{height:100%;width:100%;position:absolute}.dv-split-view-container .dv-sash-container .dv-sash{position:absolute;z-index:99;outline:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;touch-action:none;background-color:var(--dv-sash-color, transparent)}.dv-split-view-container .dv-sash-container .dv-sash:not(.disabled):active,.dv-split-view-container .dv-sash-container .dv-sash:not(.disabled):hover{background-color:var(--dv-active-sash-color, transparent);transition-property:background-color;transition-timing-function:ease-in-out;transition-duration:var(--dv-active-sash-transition-duration, .1s);transition-delay:var(--dv-active-sash-transition-delay, .5s)}@media(pointer:coarse){.dv-split-view-container .dv-sash-container>.dv-sash:not(.dv-disabled):before{content:"";position:absolute;background:transparent}.dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash:not(.dv-disabled):before{inset:0 -10px}.dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash:not(.dv-disabled):before{inset:-10px 0}}.dv-split-view-container .dv-view-container{position:relative;height:100%;width:100%}.dv-split-view-container .dv-view-container .dv-view{height:100%;box-sizing:border-box;overflow:auto;position:absolute}.dv-split-view-container.dv-separator-border .dv-view:not(:first-child):before{content:" ";position:absolute;top:0;left:0;z-index:5;pointer-events:none;background-color:var(--dv-separator-border)}.dv-dragged{transform:translateZ(0)}.dv-tab-ghost-drag{position:relative}.dv-tab-ghost-drag:after{position:absolute;content:"";height:100%;width:100%;top:0;left:0;pointer-events:none;outline:1px solid var(--dv-tab-divider-color)!important;outline-offset:-1px;z-index:5}.dv-tab{flex-shrink:0}.dv-tab:focus-within,.dv-tab:focus{position:relative}.dv-tab:focus-within:after,.dv-tab:focus:after{position:absolute;content:"";height:100%;width:100%;top:0;left:0;pointer-events:none;outline:1px solid var(--dv-tab-divider-color)!important;outline-offset:-1px;z-index:5}.dv-tab.dv-tab-dragging .dv-default-tab-action{background-color:var(--dv-activegroup-visiblepanel-tab-color)}.dv-tab.dv-active-tab .dv-default-tab .dv-default-tab-action{visibility:visible}.dv-tab.dv-inactive-tab .dv-default-tab .dv-default-tab-action{visibility:hidden}.dv-tab.dv-inactive-tab .dv-default-tab:hover .dv-default-tab-action{visibility:visible}@media(hover:none){.dv-tab.dv-inactive-tab .dv-default-tab .dv-default-tab-action{visibility:visible}}.dv-tab .dv-default-tab{position:relative;height:100%;width:100%;display:flex;align-items:center;white-space:nowrap;text-overflow:ellipsis}.dv-tab .dv-default-tab .dv-default-tab-content{flex-grow:1;margin-right:4px}.dv-tab .dv-default-tab .dv-default-tab-action{padding:4px;display:flex;align-items:center;justify-content:center;box-sizing:border-box}.dv-tab .dv-default-tab .dv-default-tab-action:hover{border-radius:2px;background-color:var(--dv-icon-hover-background-color)}@media(pointer:coarse){.dv-tab .dv-default-tab .dv-default-tab-action{padding:8px}}.dv-tabs-overflow-dropdown-default{height:100%;color:var(--dv-activegroup-hiddenpanel-tab-color);margin:var(--dv-tab-margin);display:flex;align-items:center;flex-shrink:0;padding:.25rem .5rem;cursor:pointer}.dv-tabs-overflow-dropdown-default>span{padding-left:.25rem}.dv-tabs-overflow-dropdown-default>svg{transform:rotate(90deg)}.dv-tabs-overflow-dropdown-default:hover{border-radius:2px;background-color:var(--dv-icon-hover-background-color)}.dv-tabs-container{display:flex;position:relative;height:100%;overflow:auto;scrollbar-width:thin;will-change:scroll-position;transform:translateZ(0);overscroll-behavior:contain;touch-action:pan-x}.dv-tabs-container.dv-tabs-container-vertical{width:100%;height:fit-content;max-height:100%;writing-mode:vertical-rl;touch-action:pan-y}.dv-tabs-container.dv-horizontal .dv-tab:not(:first-child):before,.dv-tabs-container.dv-vertical .dv-tab:not(:first-child):before{content:" ";position:absolute;top:0;left:0;z-index:5;pointer-events:none;background-color:var(--dv-tab-divider-color)}.dv-tabs-container.dv-horizontal .dv-tab:not(:first-child):before{width:1px;height:100%}.dv-tabs-container.dv-vertical .dv-tab:not(:first-child):before{width:100%;height:1px}.dv-tabs-container::-webkit-scrollbar{height:3px}.dv-tabs-container::-webkit-scrollbar-track{background:transparent}.dv-tabs-container::-webkit-scrollbar-thumb{background:var(--dv-tabs-container-scrollbar-color)}.dv-scrollable>.dv-tabs-container{overflow:hidden}.dv-tab{user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;outline:none;padding:.25rem .5rem;cursor:pointer;position:relative;box-sizing:border-box;font-size:var(--dv-tab-font-size);margin:var(--dv-tab-margin);touch-action:none}.dv-tab.dv-tab--shifting{will-change:transform,margin-left,margin-right,margin-top,margin-bottom;transition:transform var(--dv-transition-duration, .2s) ease-out,margin-left var(--dv-transition-duration, .2s) ease-out,margin-right var(--dv-transition-duration, .2s) ease-out,margin-top var(--dv-transition-duration, .2s) ease-out,margin-bottom var(--dv-transition-duration, .2s) ease-out}.dv-tab.dv-tab--dragging,.dv-tab.dv-tab--group-collapsed{width:0!important;min-width:0!important;padding:0!important;margin:0!important;overflow:hidden;opacity:0;pointer-events:none;transition:width var(--dv-transition-duration, .2s) ease-out,padding var(--dv-transition-duration, .2s) ease-out,margin var(--dv-transition-duration, .2s) ease-out,opacity var(--dv-transition-duration, .2s) ease-out}.dv-tab.dv-tab--group-expanding{transition:width var(--dv-transition-duration, .2s) ease-out,padding var(--dv-transition-duration, .2s) ease-out,margin var(--dv-transition-duration, .2s) ease-out,opacity var(--dv-transition-duration, .2s) ease-out}@media(prefers-reduced-motion:reduce){.dv-tab,.dv-tab-group-chip{transition:none!important}}.dv-tab-group-chip{display:inline-flex;align-items:center;align-self:center;padding:var(--dv-tab-group-chip-padding);margin:0 8px;border-radius:var(--dv-tab-group-chip-border-radius);font-size:var(--dv-tab-group-chip-font-size);cursor:pointer;user-select:none;white-space:nowrap;box-sizing:border-box;line-height:1;touch-action:none;background-color:var(--dv-tab-group-color);color:#fff}.dv-tab-group-chip.dv-tab-group-chip--accent-off{background-color:transparent;color:inherit}.dv-tab-group-chip.dv-tab-group-chip--shifting{will-change:margin-left;transition:margin-left var(--dv-transition-duration, .2s) ease-out}.dv-tab-group-chip.dv-tab-group-chip--dragging{width:0!important;min-width:0!important;padding:0!important;margin:0!important;overflow:hidden;opacity:0;pointer-events:none;transition:width var(--dv-transition-duration, .2s) ease-out,padding var(--dv-transition-duration, .2s) ease-out,margin var(--dv-transition-duration, .2s) ease-out,opacity var(--dv-transition-duration, .2s) ease-out}.dv-tab-group-chip .dv-tab-group-chip-label--empty{display:none}.dv-tab-group-chip:has(.dv-tab-group-chip-label--empty){position:relative;width:12px;height:12px;padding:0;border-radius:50%}.dv-tab-group-chip:has(.dv-tab-group-chip-label--empty):before{content:"";position:absolute;inset:-8px}.dv-tab-group-underline{position:absolute;bottom:0;opacity:var(--dv-tab-group-line-opacity);pointer-events:none;z-index:10}.dv-groupview-header-bottom .dv-tab-group-underline{bottom:auto;top:0}.dv-tabs-container-vertical .dv-tab-group-underline{bottom:auto;left:0}.dv-tabs-container-vertical .dv-tab-group-chip{margin:8px 0}.dv-tabs-container-vertical .dv-tab{padding:.5rem .25rem}.dv-tabs-container-vertical .dv-tab.dv-tab--group-collapsed{height:0!important;min-height:0!important;width:auto!important;min-width:initial!important;transition:height var(--dv-transition-duration, .2s) ease-out,padding var(--dv-transition-duration, .2s) ease-out,margin var(--dv-transition-duration, .2s) ease-out,opacity var(--dv-transition-duration, .2s) ease-out}.dv-tabs-container-vertical .dv-tab.dv-tab--group-expanding{transition:height var(--dv-transition-duration, .2s) ease-out,padding var(--dv-transition-duration, .2s) ease-out,margin var(--dv-transition-duration, .2s) ease-out,opacity var(--dv-transition-duration, .2s) ease-out}.dv-tabs-container-vertical .dv-tab.dv-tab--dragging{height:0!important;min-height:0!important;width:auto!important;min-width:initial!important;transition:height var(--dv-transition-duration, .2s) ease-out,padding var(--dv-transition-duration, .2s) ease-out,margin var(--dv-transition-duration, .2s) ease-out,opacity var(--dv-transition-duration, .2s) ease-out}.dv-tabs-overflow-container{flex-direction:column;height:unset;font-size:var(--dv-tabs-and-actions-container-font-size);max-height:min(50vh,400px);overflow-y:auto;border:1px solid var(--dv-tab-divider-color);background-color:var(--dv-group-view-background-color)}.dv-tabs-overflow-container::-webkit-scrollbar{width:6px}.dv-tabs-overflow-container::-webkit-scrollbar-track{background:transparent}.dv-tabs-overflow-container::-webkit-scrollbar-thumb{background:var(--dv-tabs-container-scrollbar-color);border-radius:3px}.dv-tabs-overflow-container{scrollbar-width:thin}.dv-tabs-overflow-container .dv-tab:not(:last-child){border-bottom:1px solid var(--dv-tab-divider-color)}.dv-tabs-overflow-container .dv-active-tab{background-color:var(--dv-activegroup-visiblepanel-tab-background-color);color:var(--dv-activegroup-visiblepanel-tab-color)}.dv-tabs-overflow-container .dv-inactive-tab{background-color:var(--dv-activegroup-hiddenpanel-tab-background-color);color:var(--dv-activegroup-hiddenpanel-tab-color)}.dv-tabs-overflow-container .dv-tabs-overflow-group-header{display:flex;align-items:center;gap:6px;padding:4px 8px;font-size:.8em;font-weight:600;color:var(--dv-activegroup-hiddenpanel-tab-color);cursor:pointer;border-bottom:1px solid var(--dv-tab-divider-color)}.dv-tabs-overflow-container .dv-tabs-overflow-group-header:hover{background-color:var(--dv-icon-hover-background-color)}.dv-tabs-overflow-container .dv-tabs-overflow-group-color{display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0;background-color:var(--dv-tab-group-color)}.dv-tabs-overflow-container .dv-tabs-overflow-group-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dv-tabs-overflow-container .dv-tabs-overflow-group-collapsed-badge{font-size:.75em;font-weight:400;opacity:.7;padding:1px 4px;border-radius:3px;background-color:var(--dv-tab-divider-color)}.dv-tabs-overflow-container .dv-tab.dv-tab--grouped{padding-left:16px}.dv-tabs-and-actions-container{display:flex;background-color:var(--dv-tabs-and-actions-container-background-color);flex-shrink:0;box-sizing:border-box;height:var(--dv-tabs-and-actions-container-height);font-size:var(--dv-tabs-and-actions-container-font-size)}.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-scrollable,.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-tabs-container{flex-grow:1}.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-tabs-container .dv-tab{flex-grow:1;padding:0}.dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-void-container{flex-grow:0}.dv-tabs-and-actions-container .dv-void-container{display:flex;flex-grow:1;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;touch-action:none}.dv-tabs-and-actions-container .dv-void-container.dv-draggable{cursor:grab}.dv-tabs-and-actions-container .dv-right-actions-container{display:flex}.dv-tabs-and-actions-container .dv-right-actions-container.dv-right-actions-container-vertical{flex-direction:column}.dv-tabs-and-actions-container.dv-groupview-header-vertical{flex-direction:column;height:auto;width:var(--dv-tabs-and-actions-container-height)}.dv-watermark{display:flex;height:100%}.dockview-theme-vgai{--dv-group-view-background-color: var(--vgai-bg-1);--dv-tabs-and-actions-container-background-color: var(--vgai-bg-2);--dv-activegroup-visiblepanel-tab-background-color: transparent;--dv-activegroup-hiddenpanel-tab-background-color: transparent;--dv-inactivegroup-visiblepanel-tab-background-color: transparent;--dv-inactivegroup-hiddenpanel-tab-background-color: transparent;--dv-activegroup-visiblepanel-tab-color: var(--vgai-text-1);--dv-activegroup-hiddenpanel-tab-color: var(--vgai-text-2);--dv-inactivegroup-visiblepanel-tab-color: var(--vgai-text-2);--dv-inactivegroup-hiddenpanel-tab-color: var(--vgai-text-3);--dv-tab-divider-color: var(--vgai-border-1);--dv-separator-border: transparent;--dv-paneview-header-border-color: var(--vgai-border-1);--dv-paneview-active-outline-color: var(--vgai-accent);--dv-tabs-and-actions-container-height: var(--vgai-panel-header-height);--dv-tabs-and-actions-container-font-size: var(--vgai-font-md);--dv-tab-font-size: var(--vgai-font-md);--dv-icon-hover-background-color: var(--vgai-bg-3);--dv-drag-over-background-color: var(--vgai-accent-muted);--dv-drag-over-border-color: var(--vgai-accent);--dv-sash-color: transparent;--dv-active-sash-color: transparent;--dv-active-sash-transition-delay: 0s;--dv-active-sash-transition-duration: .1s;--dv-floating-border: var(--vgai-stroke-resting) solid var(--vgai-border-2);--dv-floating-box-shadow: var(--vgai-shadow-lg);--dv-floating-titlebar-height: 20px;--dv-border-radius: 0;--dv-tab-border-radius: 0;--dv-tab-margin: 0;--dv-spacing-padding: 0;--dv-scrollbar-background-color: color-mix(in srgb, var(--vgai-content-primary) 28%, transparent);font-family:var(--vgai-font-sans)}.vgai-workspace-dock{position:relative;flex:1;min-width:0;min-height:0;pointer-events:auto;overflow:hidden;background:var(--vgai-bg-1)}.vgai-workspace-dock>.dockview-theme-vgai{width:100%;height:100%}.vgai-dock-panel,.vgai-dock-document,.vgai-dock-document-content{min-width:0;min-height:0;width:100%;height:100%}.vgai-dock-panel,.vgai-dock-document,.vgai-dock-document-content{display:flex;flex-direction:column;overflow:hidden;background:var(--vgai-bg-1);pointer-events:auto}.vgai-dock-document-toolbar{flex:0 0 auto;min-height:var(--vgai-local-toolbar-height);border-bottom:var(--vgai-stroke-resting) solid var(--vgai-border-1);background:var(--vgai-bg-1);pointer-events:auto}.vgai-dock-empty{padding:var(--vgai-space-6);color:var(--vgai-text-3);background:var(--vgai-bg-1)}.vgai-dock-tab{display:flex;align-items:center;height:100%;min-width:0}.vgai-dock-tab>.dv-default-tab{min-width:0}.dockview-theme-vgai .dv-tab:has(.vgai-dock-tab[data-document-family=world])+.dv-tab:has(.vgai-dock-tab[data-document-family=resource]) .vgai-dock-tab{position:relative;margin-left:var(--vgai-space-4)}.dockview-theme-vgai .dv-tab:has(.vgai-dock-tab[data-document-family=world])+.dv-tab:has(.vgai-dock-tab[data-document-family=resource]) .vgai-dock-tab:before{position:absolute;top:50%;left:calc(-1 * var(--vgai-space-3));width:var(--vgai-stroke-resting);height:16px;background:var(--vgai-border-2);content:"";transform:translateY(-50%);pointer-events:none}.dockview-theme-vgai .dv-tab{padding:0 10px;border-radius:0;font-weight:400;transition:background-color 80ms ease,color 80ms ease}.dockview-theme-vgai .dv-tabs-and-actions-container{border-bottom:var(--vgai-stroke-resting) solid var(--vgai-border-1)}.dockview-theme-vgai .dv-tab.dv-inactive-tab:hover{color:var(--vgai-text-1);background:var(--vgai-bg-3)}.dockview-theme-vgai .dv-tabs-and-actions-container:not(.dv-single-tab) .dv-tabs-container{gap:2px;padding:0 3px}.dockview-theme-vgai .dv-tabs-container.dv-horizontal .dv-tab:not(:first-child):before{display:none}.dockview-theme-vgai .dv-tabs-and-actions-container.dv-single-tab.dv-full-width-single-tab .dv-tabs-container .dv-tab{margin:0;padding:0 12px;border-radius:0;font-weight:600;letter-spacing:.01em}.vgai-dock-tab-dirty{width:6px;height:6px;margin-right:6px;flex:0 0 auto;border-radius:50%;background:var(--vgai-warn)}.vgai-dock-tab-unsaved{gap:4px;padding:0 5px 0 8px;color:var(--vgai-text-1);background:var(--vgai-warn-muted)}.vgai-dock-tab-unsaved-label{margin-right:2px;color:var(--vgai-warn);font-weight:600}.vgai-dock-tab-unsaved button{height:20px;padding:0 5px;border:var(--vgai-stroke-resting) solid var(--vgai-border-2);border-radius:3px;color:var(--vgai-text-1);background:var(--vgai-bg-2);font:inherit;cursor:pointer}.vgai-dock-tab-unsaved button:hover:not(:disabled),.vgai-dock-tab-unsaved button:focus-visible{border-color:var(--vgai-accent);color:var(--vgai-content-primary)}.vgai-dock-tab-unsaved button:disabled{opacity:.6;cursor:default}.vgai-dock-tab-badge{min-width:14px;height:14px;margin-right:5px;padding:0 3px;border-radius:7px;font-size:9px;line-height:14px;text-align:center;color:var(--vgai-bg-0);background:var(--vgai-text-2)}.vgai-dock-tab-badge-warn{background:var(--vgai-warn)}.vgai-dock-tab-badge-error{background:var(--vgai-danger)}.dockview-theme-vgai .dv-tabs-container .dv-tab.dv-active-tab{box-shadow:none;font-weight:500}.dockview-theme-vgai .dv-tabs-and-actions-container:not(.dv-single-tab) .dv-tabs-container .dv-tab.dv-active-tab:before{position:absolute;right:10px;bottom:0;left:10px;display:block;width:auto;height:var(--vgai-stroke-active);border-radius:2px 2px 0 0;background:var(--vgai-accent);content:""}.dockview-theme-vgai .dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash{background:linear-gradient(to right,transparent 1.5px,var(--vgai-border-1) 1.5px 2.5px,transparent 2.5px)}.dockview-theme-vgai .dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash{background:linear-gradient(to bottom,transparent 1.5px,var(--vgai-border-1) 1.5px 2.5px,transparent 2.5px)}.dockview-theme-vgai .dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash:hover,.dockview-theme-vgai .dv-split-view-container.dv-horizontal>.dv-sash-container>.dv-sash.dv-active{background:linear-gradient(to right,transparent 1px,var(--vgai-accent) 1px 3px,transparent 3px)}.dockview-theme-vgai .dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash:hover,.dockview-theme-vgai .dv-split-view-container.dv-vertical>.dv-sash-container>.dv-sash.dv-active{background:linear-gradient(to bottom,transparent 1px,var(--vgai-accent) 1px 3px,transparent 3px)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{k as f,n as b,o as S,p as A,w as D,I,q as h,r as m,t as y,u as R,v as w,W as x,x as O,y as W,z as k,A as C,B as g,C as $,D as G,E as M}from"./index-B-HA1uu3.js";class j extends g.Component{constructor(){super(...arguments),this.state={crashed:!1}}static getDerivedStateFromError(){return{crashed:!0}}componentDidCatch(t){this.props.onCaught(t)}render(){return this.state.crashed?null:this.props.children}}function v(e,t,a){e.style.position="absolute",e.style.top="0",e.style.left="0",e.style.width="100%",e.style.height="100%",e.style.zIndex=String(t.zOrder??0),e.style.pointerEvents=a}async function z(e,t,a,o){const r=await W(e,a),n=document.createElement("div");v(n,e,"none"),t.appendChild(n),f.log(`react sibling "${e.id}": no native Game beside an ingest world — useGameState unavailable`,"ingest");const s=k.createRoot(n);let d=null;if(C.flushSync(()=>{s.render(g.createElement(j,{onCaught:i=>{d=i},children:g.createElement(r)}))}),d!==null)throw s.unmount(),n.remove(),d instanceof Error?d:new Error(String(d));let u;return o&&(u=$(n).nodes.size>0?new G(n,o,{}):new M(n,o,{overlay:await y(e.id),persist:p=>m(e.id,p),destination:h(e.id)})),{worldId:e.id,...u?{authoring:u}:{},dispose(){s.unmount(),n.remove()}}}async function P(e,t,a,o,r){const n=document.createElement("div");v(n,t,"auto"),a.appendChild(n);try{const s=a.clientWidth||800,d=a.clientHeight||600,{session:u}=await A(e,t,o,n,s,d),i=u.game.roots[0],p=i.mounted.authoring;let c;if(r)if(p)c=D(p,r);else if(i.kind==="threejs")c=new I(r,i.threeRoot(),{overlay:await y(i.id),persist:l=>m(i.id,l),destination:h(i.id)});else if(i.kind==="pixijs"){const l=R(i.physics2d??w());c=new x(i.pixiRoot(),l,r,{overlay:await y(i.id),persist:E=>m(i.id,E),destination:h(i.id)})}else c=O(r,`${t.id} (no authoring surface)`);return{worldId:t.id,...c?{authoring:c}:{},setPaused(l){l?u.pause():u.resume()},dispose(){u.stop(),n.remove()}}}catch(s){throw n.remove(),s}}function T(e){throw new Error(`sibling world "${e.id}" (kind: ${e.surface}, adapter identity: "${e.adapter.identity}") has no known composite-sibling mount path — every currently-resolvable identity (default-three/default-pixi/default-react/module) is routed above; this is reached only for a genuinely unroutable shape (docs/WAVE5-MULTIWORLD-INGEST-DESIGN.md D-V7, updated by docs/WAVE6-DOCTOR-DESIGN.md D-B3).`)}async function B(e,t,a,o,r){if(t.adapter.type==="module"||t.adapter.identity==="threejs"||t.adapter.identity==="pixijs")return P(e,t,a,o,r);if(t.adapter.identity==="react")return z(t,a,o,r);T(t)}async function L(e,t,a,o,r){const n=[];for(const s of e.roots)if(s.id!==t)try{n.push(await B(e,s,a,o,r))}catch(d){f.error(`Composite sibling "${s.id}" failed to mount: ${d}`,"ingest"),b({worldId:s.id,kind:s.surface,identity:s.adapter.identity,message:S(d)})}return n}export{L as mountIngestSiblings};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as c,m as l,l as f,b as m,R as p,f as h,V as g}from"./index-B-HA1uu3.js";import{createGameRuntime as y}from"./create-runtime-BzSHBTYw.js";import"./game-loop-o2CcBMFY.js";function v(e){if(e.determinism?.seededRandom!==!0)return;const t=e.url?E(e.url):void 0;return e.explicitSeed??t??e.determinism.defaultSeed}function E(e){const t=new URLSearchParams(e.search).get(p);if(t===null||t==="")return;const r=Number(t);return Number.isFinite(r)?r:void 0}function b(){return typeof window<"u"}function R(e){if(typeof e!="object"||e===null)return!1;const t=e.roots;return!Array.isArray(t)||t.length===0?!1:t.every(r=>{if(typeof r!="object"||r===null)return!1;const n=r.adapter;if(typeof n!="object"||n===null)return!1;const i=n.type;return i==="builtin"||i==="module"||i==="ingest"})}function M(e){return R(e)?e:f(e)}function $(e,t){if(t?.adapter)return t.adapter;if(e.adapter.type==="module")throw new Error(`mountManifestWorlds: world "${e.id}" (threejs) declares a { module } adapter ("${e.adapter.module}") — mountManifestWorlds never imports an arbitrary module path itself (no \`/@fs/\`, no dev server). Import the module yourself and supply the constructed adapter via entries["${e.id}"] = { kind: 'threejs', adapter }.`);if(e.adapter.type==="ingest")throw new Error(`mountManifestWorlds: world "${e.id}" (threejs) declares an { ingest } adapter — ingest roots require the editor's dev-server-backed mount machinery (an EditorStore plus iframe/DOM capture, see adapter-resolver.ts's resolveIngestThreeAdapter) and are not supported by mountManifestWorlds (docs/WAVE3-ADAPTER-PLUMBING-DESIGN.md D-Z7 — no porting aids, no hosted ingest routes).`);if(e.entry!==void 0){if(!t?.setup)throw new Error(`mountManifestWorlds: world "${e.id}" (threejs) declares \`entry\` "${e.entry}" — supply entries["${e.id}"] = { kind: 'threejs', setup } (the entry module's exported \`setup\` function) or { kind: 'threejs', adapter } for full control. Got ${t===void 0?"no entry at all":"an entry with neither `setup` nor `adapter`"}.`);return h(e.id,t.setup)}if(e.scene!==void 0)return new g({id:e.id,scenePath:e.scene,componentRegistry:t?.componentRegistry});throw new Error(`mountManifestWorlds: world "${e.id}" is default-three with neither \`scene\` nor \`entry\` — this should have been rejected by manifest validation.`)}function j(e,t){if(t?.adapter)return t.adapter;throw new Error(`mountManifestWorlds: world "${e.id}" (pixijs) has no entries["${e.id}"] — a pixijs world always needs a caller-supplied, already-constructed adapter (entries["${e.id}"] = { kind: 'pixijs', adapter }, e.g. \`new PixiSceneGameAdapter(...)\` built from your own already-imported '@engine/world2d') — mountManifestWorlds never value-imports pixi.js (mirrors create-runtime.ts's own pixi-free-core discipline).`)}function A(e,t){if(t?.adapter)return t.adapter;throw new Error(`mountManifestWorlds: world "${e.id}" (react) has no entries["${e.id}"] — a react world always needs a caller-supplied, already-constructed \`ReactRootAdapter\` (entries["${e.id}"] = { kind: 'react', adapter }, mounting via your own already-imported react-dom \`createRoot\` + your own \`<GameProvider>\`) — mountManifestWorlds never value-imports react/react-dom (mirrors create-runtime.ts's own react-free-core discipline; see docs/REACT-STATE-BRIDGE.md §2-3).`)}function S(e,t){if(t!==void 0&&t.kind!==e.surface)throw new Error(`mountManifestWorlds: entries["${e.id}"] declares kind "${t.kind}" but the manifest's root "${e.id}" uses surface "${e.surface}" — fix the entries key (or the manifest) so the two agree.`);const r={id:e.id,zOrder:e.zOrder,pausable:e.pausable,loop:e.loop};return e.surface==="threejs"?{...r,kind:"threejs",adapter:$(e,t)}:e.surface==="pixijs"?{...r,kind:"pixijs",adapter:j(e,t)}:e.surface==="react"?{...r,kind:"react",adapter:A(e,t)}:m(e.surface,"mountManifestWorlds")}async function D(e){const t=M(e.manifest);if(t.roots.length===0)throw new Error("mountManifestWorlds: manifest declares no roots — nothing to mount.");const r=e.entries??{},n=t.roots.map(s=>S(s,r[s.id])),i=e.seedUrl??(b()?window.location:void 0),d=v({determinism:t.determinism,explicitSeed:e.seed,url:i}),a=await y({container:e.container,roots:n,width:e.width??t.resolution?.width,height:e.height??t.resolution?.height,headless:e.headless,seed:d});t.determinism?.seededRandom;const o=c(a.game);if(o){t.server&&o.setRoomDeclared(!0);const s=l({registry:o,manifest:t,url:e.debugBridge?.url,window:e.debugBridge?.window});if(s){const u=a.stop;a.stop=()=>{s.uninstall(),u()}}}return a}export{D as mountManifestWorlds,v as resolveDeterminismSeed,M as resolveManifest};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{B as s,z as l}from"./index-B-HA1uu3.js";var n=new Map;function a(){return globalThis.IS_REACT_ACT_ENVIRONMENT}var m=({callback:e,children:r})=>{let t=s.useRef();return s.useLayoutEffect(()=>{t.current!==e&&(t.current=e,e())},[e]),r};typeof Promise.withResolvers>"u"&&(Promise.withResolvers=()=>{let e=null,r=null;return{promise:new Promise((t,o)=>{e=t,r=o}),resolve:e,reject:r}});var E=async(e,r,t)=>{let o=await c(r,t);if(a()){o.render(e);return}let{promise:u,resolve:i}=Promise.withResolvers();return o.render(s.createElement(m,{callback:i},e)),u},p=(e,r)=>{let t=n.get(e);t&&(t.unmount(),n.delete(e))},c=async(e,r)=>{let t=n.get(e);return t||(t=l.createRoot(e,r),n.set(e,t)),t};export{E as renderElement,p as unmountElement};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ag as a,bV as s,bW as e,bX as t}from"./index-B-HA1uu3.js";a.add(s,e);a.add(t);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{am as O,an as ie,ao as le,s as de,o as W,k as R,n as ce,ap as J,D as G,aq as ue,ar as pe,as as he,at as fe,y as me,au as we,av as ge,aw as ye,ax as be,ay as ve,az as Ie,aA as ee,aB as te,aC as xe,aD as Se,aE as Ee,c as Ce,B as I,aF as ke,aG as j,aH as h,aI as Pe,aJ as Me,aK as V,aL as F,aM as $e,aN as Re,aO as ze,aP as We,aQ as K,aR as De,aS as q,aT as X,aU as Ae,aV as je,aW as Oe,aX as Te,aY as z,aZ as Be}from"./index-B-HA1uu3.js";import{c as Ve,a as Fe}from"./game-loop-o2CcBMFY.js";const _e={width:null,height:null};let T=_e;const H=new Set;function oe(){return T}function L(e,o){const n=e===null?null:Math.max(1,Math.round(e)),r=o===null?null:Math.max(1,Math.round(o));if(!(T.width===n&&T.height===r)){T={width:n,height:r};for(const a of H)a()}}function Ge(){L(null,null)}function re(e){return H.add(e),()=>H.delete(e)}const U=new Map;function He(e,o){return`${e}\0${o}`}function Le(e){const o=e.title?.split("/").filter(Boolean).at(-1)?.trim();if(o)return o;const n=e.modulePath.split("/").pop()??e.modulePath;return n.replace(/\.stories\.[^.]+$/i,"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[-_]+/g," ").trim()||n}const Ne=1;function ne(e){const o=[];for(const{worldId:n,adapter:r}of e.childAdapters()){if(!(r instanceof O))continue;const a=r.inspector.get(n,"kind");a!=="react"&&a!=="pixijs"||r.inspector.get(n,"reason")!==void 0||o.push({worldId:n,kind:a,path:r.inspector.get(n,"path"),zOrder:Number(r.inspector.get(n,"zOrder")??0),pausable:r.inspector.get(n,"pausable")!==!1})}return o}function Ze(e){return ne(e)}function Ke(){const e=Ve({fixedTimestep:.016666666666666666,maxSubSteps:8,update:()=>{}});return Ce({loop:e,assets:Fe()})}class qe extends I.Component{constructor(){super(...arguments),this.state={crashed:!1}}static getDerivedStateFromError(){return{crashed:!0}}componentDidCatch(o){this.props.onCaught(o)}render(){return this.state.crashed?null:this.props.children}}function Xe(e,o){return{id:e,surface:"react",description:void 0,adapter:{type:"builtin",identity:"react",surface:"react"},scene:void 0,entry:o,zOrder:0,pausable:!0,loop:"gated",capabilities:{local:"first-party",hosted:"first-party"}}}function se(e,o){e.style.display=xe(o)?"none":"block",e.style.pointerEvents=Se(o)?"auto":"none"}function Ue(e,o,n){const r=document.createElement("div");return r.dataset.worldId=o,r.style.position="absolute",r.style.top="0",r.style.left="0",r.style.width="100%",r.style.height="100%",r.style.zIndex=String(n),r.style.contain="layout paint",se(r,o),N(r),e.appendChild(r),r}function N(e){e.style.transform=ee(te())??"",e.style.transformOrigin="0 0";const o=oe();e.style.width=o.width===null?"100%":`${o.width}px`,e.style.height=o.height===null?"100%":`${o.height}px`}async function Ye(e,o,n,r){if(!e.path)throw new Error(`design-time react layer "${e.worldId}": no \`entry\` declared — nothing to mount.`);await pe({rootPath:n});const a=he(e.worldId),s=fe(e.worldId);if(s){const t=He(n,e.worldId),d=U.get(t),u=a.find(c=>c.id===d)??s;let P=!1,y=null;const S=async(c,b=c.args)=>{const E=await Ee(o,c.modulePath,c.name,c.Component,b);if(E){if(P){E.unmount();return}y=E,r.notifyIngestEdit()}};if(await S(u),!y)throw new Error(`design-time react root "${e.worldId}": default CSF story "${u.name}" was superseded before it mounted.`);const A=new Map(a.map(c=>[c.id,c])),B=new Map;for(const c of a){const b=B.get(c.modulePath);b?b.push(c):B.set(c.modulePath,[c])}const Z=new G(o,r,{worldId:e.worldId,portableStories:a.map(c=>({id:c.id,label:c.label,args:c.args})),portableDocuments:[...B.entries()].map(([c,b])=>({id:`portable-document:${c}`,label:Le(b[0]),path:c,storyIds:b.map(E=>E.id)})),activePortableStoryId:u.id,onPortableStoryApplied:c=>{const b=(c?A.get(c):null)??s;U.set(t,b.id),S(b).catch(E=>{R.error(`[design-time-layers] React root "${e.worldId}" failed applying portable story "${b.name}": ${W(E)}`,"authoring")})},onPortableStoryArgsChanged:(c,b)=>{const E=A.get(c);E&&S(E,b).catch(ae=>{R.error(`[design-time-layers] React root "${e.worldId}" failed updating portable story "${E.name}" args: ${W(ae)}`,"authoring")})}});return{adapter:Z,dispose:()=>{P=!0,Z.disposeReactRootAdapter(),y?.unmount()}}}R.warn(`[design-time-layers] React root "${e.worldId}" has no portable CSF preview. Add a *.stories.tsx module with parameters.vgai.root set to this root id. Falling back to the deprecated inert-Game preview for compatibility.`,"authoring");const f=Xe(e.worldId,e.path),v=await me(f,n),C=await we(n,e.worldId),{createElement:l,createRoot:p,flushSync:i}=await ge(),m=Ke(),g=[ye(e.worldId)??{}],w={},x=p(o),M={entryStory:null,isolation:null},$=t=>{const{entryStory:d,isolation:u}=M,P=u?u.story:d,y=u?w?.[u.componentKey]:void 0,S=u?y?l(y,{...P?.props??{}}):null:l(v,{...P?.props??{}});x.render(l(qe,{key:u?`isolate:${u.componentKey}:${u.story?.id??""}`:P?`story:${P.id}`:"__none__",onCaught:t,children:l(C,{game:m},S)}))};let k=null;if(i(()=>{$(t=>{k=t})}),k!==null)throw x.unmount(),k instanceof Error?k:new Error(String(k));const D=new G(o,r,{storySources:g,worldId:e.worldId,onStoryApplied:t=>{M.entryStory=t,$(d=>{R.error(`[design-time-layers] world "${e.worldId}" crashed applying story "${t?.id??"(cleared)"}": ${W(d)}`,"authoring")})},onIsolate:t=>{M.isolation=t,$(d=>{R.error(`[design-time-layers] world "${e.worldId}" crashed isolating "${t?.componentKey??"(cleared)"}": ${W(d)}`,"authoring")})}});return{adapter:D,dispose:()=>{D.disposeReactRootAdapter(),x.unmount()}}}function Qe(e){const o=e.getBoundingClientRect();return{width:Math.max(1,Math.round(o.width)||e.clientWidth||300),height:Math.max(1,Math.round(o.height)||e.clientHeight||200)}}async function Je(e,o,n,r){if(!e.path)throw new Error(`design-time pixi layer "${e.worldId}": no \`scene\` declared — nothing to mount (B1 display-only mount supports scene-based pixi roots only, not \`entry\`).`);const a=await be(e.path),s=await ve(r),f=document.createElement("canvas");f.style.width="100%",f.style.height="100%",f.style.display="block",o.appendChild(f);const{width:v,height:C}=Qe(n),p=await new Ie({id:e.worldId,sceneData:a,registry:s}).mount({canvas:f,width:v,height:C,transparent:!0});return p.update?.(0),{dispose:()=>p.dispose(),pick:(m,g)=>{const w=f.getBoundingClientRect();if(w.width===0||w.height===0)return null;const x=p.ctx.app.renderer.screen,M=(m-w.left)/w.width*x.width,$=(g-w.top)/w.height*x.height;for(const k of p.stage.children)if(k.getBounds().containsPoint(M,$))return e.worldId;return null}}}let _=!1;function Y(){_||(_=!0,queueMicrotask(()=>{_=!1,window.dispatchEvent(new CustomEvent(ue))}))}function et(e,o,n,r){if(ie(),Ge(),n.playState!=="stopped"){let t=!1,d=!1;const u=n.subscribe(()=>{t||d||n.playState!=="stopped"||(d=!0,t||Y())});return()=>{t=!0,u()}}const a=le()?.rootPath,s=r?[...r]:ne(o);if(s.length===0||!a)return()=>{};const v=de(s.map(t=>({id:t.worldId,zOrder:t.zOrder}))).map(t=>s.find(d=>d.worldId===t.id)),C=new Map(v.map(t=>[t.worldId,t])),l=new Map,p=[],i=new Set;let m=!1,g=!1,w=!1;function x(){for(const t of p.splice(0))try{t()}catch(d){R.error(`[design-time-layers] dispose failed: ${d}`,"authoring")}for(const t of l.values())t.remove();l.clear()}function M(){x();for(const t of i){const d=C.get(t);if(!d)continue;const u={id:d.worldId,kind:d.kind,entryOrScenePath:d.path,zOrder:d.zOrder,pausable:d.pausable};o.replaceChild(t,new O(n,u,"Design-time layer suspended by play mode — Stop restores it."))}i.clear(),n.notifyIngestEdit()}v.forEach((t,d)=>{const u=Ue(e,t.worldId,Ne+d);l.set(t.worldId,u),(t.kind==="react"?Ye(t,u,a,n):Je(t,u,e,a)).then(y=>{if(m||g){y.dispose();return}if(y.adapter)o.replaceChild(t.worldId,y.adapter),i.add(t.worldId);else if(y.pick){const S={id:t.worldId,kind:t.kind,entryOrScenePath:t.path,zOrder:t.zOrder,pausable:t.pausable};o.replaceChild(t.worldId,new O(n,S,void 0,y.pick)),i.add(t.worldId)}p.push(y.dispose),n.notifyIngestEdit()}).catch(y=>{if(u.remove(),l.delete(t.worldId),m||g)return;const S=W(y);R.error(`[design-time-layers] world "${t.worldId}" (${t.kind}) failed to mount: ${S}`,"authoring");const A={id:t.worldId,kind:t.kind,entryOrScenePath:t.path,zOrder:t.zOrder,pausable:t.pausable};o.replaceChild(t.worldId,new O(n,A,S)),ce({worldId:t.worldId,kind:t.kind,identity:t.kind==="react"?"default-react":"default-pixi",message:S}),n.notifyIngestEdit()})});const $=J(()=>{for(const t of l.values())N(t)}),k=re(()=>{for(const t of l.values())N(t)}),D=n.subscribe(()=>{if(!g&&n.playState!=="stopped"){g=!0,M();return}if(g&&!w&&n.playState==="stopped"&&!m){w=!0,m||Y();return}if(!g){for(const[t,d]of l)se(d,t);for(const{worldId:t,adapter:d}of o.childAdapters()){if(!i.has(t)||!(d instanceof G))continue;const u=d.isolatedNodeId;u&&!n.selectedEntityIds.has(u)&&d.stories.isolate?.(null)}}});return()=>{m=!0,D(),$(),k(),x()}}const Q={fill:null,desktop:{width:1440,height:900},tablet:{width:768,height:1024},mobile:{width:390,height:844}};function tt({containerRef:e,context:o}){const n=ke();I.useSyncExternalStore(n.subscribe,n.getSnapshot);const r=I.useSyncExternalStore(J,te),a=I.useSyncExternalStore(re,oe),s=I.useCallback(l=>{const p=e.current;if(!p)return;const i=Math.min(4,Math.max(.1,l)),m=p.clientWidth/2,g=p.clientHeight/2,w=(m-r.x)/r.zoom,x=(g-r.y)/r.zoom;j(m-w*i,g-x*i,i)},[e,r]),f=I.useCallback(()=>{const l=e.current,p=[...n.selectedEntityIds].at(-1);if(!l||!p)return;const i=o?.adapter.rects?.rect(p);if(!i||i.width<=0||i.height<=0)return;const m=Math.max(1,l.clientWidth-96),g=Math.max(1,l.clientHeight-96),w=Math.min(4,Math.max(.1,Math.min(m/i.width,g/i.height)));j(l.clientWidth/2-(i.x+i.width/2)*w,l.clientHeight/2-(i.y+i.height/2)*w,w)},[e,o,n]),v=I.useCallback(l=>{const p=e.current,i=Q[l];if(!p||i===null){L(null,null),j(0,0,1);return}L(i.width,i.height);const m=Math.min(1,Math.max(.1,Math.min((p.clientWidth-96)/i.width,(p.clientHeight-96)/i.height)));j((p.clientWidth-i.width*m)/2,(p.clientHeight-i.height*m)/2,m)},[e]);if(o?.kind!=="react"||!o.adapter.rects)return null;const C=Object.entries(Q).find(([,l])=>l===null?a.width===null:l.width===a.width&&l.height===a.height)?.[0]??"fill";return h.jsxs(h.Fragment,{children:[a.width!==null&&a.height!==null&&h.jsx("div",{"data-testid":"react-canvas-device-frame",style:{position:"absolute",left:0,top:0,zIndex:0,width:a.width,height:a.height,transform:ee(r),transformOrigin:"0 0",pointerEvents:"none",background:"#fff",boxShadow:"0 0 0 1px #ffffff40, 0 8px 30px #0009"}}),h.jsxs(Pe,{label:"React canvas view","data-testid":"react-canvas-zoom-controls",className:"vgai-react-canvas-controls",children:[h.jsxs(Me,{"aria-label":"Responsive viewport",title:"Responsive viewport",value:C,onChange:l=>v(l.target.value),className:"vgai-react-viewport-select",children:[h.jsx("option",{value:"fill",children:"Fill"}),h.jsx("option",{value:"desktop",children:"Desktop · 1440×900"}),h.jsx("option",{value:"tablet",children:"Tablet · 768×1024"}),h.jsx("option",{value:"mobile",children:"Mobile · 390×844"})]}),h.jsx(V,{"aria-label":"Zoom out",title:"Zoom out",size:"comfortable",onClick:()=>s(r.zoom/1.2),children:h.jsx(F,{icon:$e,size:"md"})}),h.jsxs(Re,{variant:"ghost","aria-label":"Reset zoom to 100%",title:"Reset zoom to 100%",size:"comfortable",onClick:()=>s(1),children:[Math.round(r.zoom*100),"%"]}),h.jsx(V,{"aria-label":"Zoom in",title:"Zoom in",size:"comfortable",onClick:()=>s(r.zoom*1.2),children:h.jsx(F,{icon:ze,size:"md"})}),h.jsx(V,{"aria-label":"Zoom to selection",title:"Zoom to selection",size:"comfortable",onClick:f,children:h.jsx(F,{icon:We,size:"md"})})]})]})}function ot(e){return`workspace:world:${e}`}function rt({active:e,composite:o,descriptor:n,store:r}){const a=I.useRef(null),s=I.useRef(null);I.useSyncExternalStore(r.subscribe,r.getSnapshot),I.useEffect(()=>{!e||s.current||!a.current||(s.current=et(a.current,o,r,[n]))},[e,o,n,r]),I.useEffect(()=>()=>{s.current?.(),s.current=null},[]);const f=Oe(Te(r),r.selectedEntityIds),v=f?.worldId===n.worldId?f:null;return h.jsxs("div",{ref:a,"data-testid":`world-document:${n.worldId}`,style:{position:"absolute",inset:0,overflow:"hidden",pointerEvents:"auto",backgroundColor:z.surface.raised,backgroundImage:`linear-gradient(45deg, ${z.surface.chrome} 25%, transparent 25%, transparent 75%, ${z.surface.chrome} 75%), linear-gradient(45deg, ${z.surface.chrome} 25%, transparent 25%, transparent 75%, ${z.surface.chrome} 75%)`,backgroundPosition:"0 0, 8px 8px",backgroundSize:"16px 16px"},children:[h.jsx(Be,{}),h.jsx(tt,{containerRef:a,context:v})]})}function at(e,o){const n=je(),r=[],a=[];for(const s of o.childAdapters())s.role==="world"&&s.kind==="threejs"&&a.push(K(s.worldId,X));for(const s of Ze(o)){const f=ot(s.worldId);a.push(K(s.worldId,f)),r.push(f);const v=C=>h.jsx(rt,{...C,composite:o,descriptor:s,store:e});De({id:f,title:s.worldId,kind:"world",provenance:{rootId:s.worldId,...s.path?{sourcePath:s.path}:{}},Content:v,closeable:!1,onActivate:()=>e.setActiveViewportTab("scene")})}return n?q(n):q(X),()=>{for(const s of a)s();for(const s of r)Ae(s,{discardDirty:!0})}}export{at as installWorldDocuments,ot as worldDocumentId};
|
package/dist/index.html
CHANGED
|
@@ -11,27 +11,29 @@
|
|
|
11
11
|
<title>VGAI Scene Editor</title>
|
|
12
12
|
<style>
|
|
13
13
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
14
|
-
html, body { width: 100%; height: 100%; overflow: hidden; background: #1a1a1a;
|
|
14
|
+
html, body { width: 100%; height: 100%; overflow: hidden; background: #1a1a1a; }
|
|
15
|
+
#editor-chrome-root { width: 100%; height: 100%; display: flex; flex-direction: column; min-height: 0; }
|
|
15
16
|
#editor-main { flex: 1; position: relative; min-height: 0; overflow: hidden; }
|
|
16
17
|
#editor-root {
|
|
17
18
|
position: absolute; top: 0; left: 0; width: 100%; height: 100%;
|
|
18
19
|
pointer-events: none; z-index: 10;
|
|
19
20
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
* { scrollbar-width: none; }
|
|
27
|
-
@keyframes editor-spin { to { transform: rotate(360deg); } }
|
|
21
|
+
/* Scrollbar policy, @keyframes editor-spin/blink, and the vgai-* design
|
|
22
|
+
tokens live in the runtime-injected `<style id="vgai-editor-theme">`
|
|
23
|
+
sheet (packages/editor/src/theme-css.ts, installed from main.tsx) —
|
|
24
|
+
single source of truth, see EDITOR-STYLE-AUDIT.md C-12/C-9. This
|
|
25
|
+
static <style> block keeps only the pre-paint shell layout that must
|
|
26
|
+
be present before any script runs. */
|
|
28
27
|
</style>
|
|
29
|
-
<script type="module" crossorigin src="/assets/index-
|
|
28
|
+
<script type="module" crossorigin src="/assets/index-B-HA1uu3.js"></script>
|
|
29
|
+
<link rel="stylesheet" crossorigin href="/assets/index-bu01fqch.css">
|
|
30
30
|
</head>
|
|
31
31
|
<body>
|
|
32
|
-
<div id="editor-
|
|
33
|
-
<div id="editor-
|
|
32
|
+
<div id="editor-chrome-root">
|
|
33
|
+
<div id="editor-main">
|
|
34
|
+
<div id="editor-root"></div>
|
|
35
|
+
</div>
|
|
36
|
+
<div id="editor-bottom"></div>
|
|
34
37
|
</div>
|
|
35
|
-
<div id="editor-bottom"></div>
|
|
36
38
|
</body>
|
|
37
39
|
</html>
|