@forgeax/interface 0.4.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/LICENSE +202 -0
- package/NOTICE +9 -0
- package/README.md +111 -0
- package/dist/package/browser/App.css +192 -0
- package/dist/package/browser/App.d.ts +11 -0
- package/dist/package/browser/App.js +11 -0
- package/dist/package/browser/ApplicationDetachedShell.d.ts +13 -0
- package/dist/package/browser/ApplicationDetachedShell.js +10 -0
- package/dist/package/browser/ApplicationShell.d.ts +19 -0
- package/dist/package/browser/ApplicationShell.js +62 -0
- package/dist/package/browser/app-kit.d.ts +1 -0
- package/dist/package/browser/app-kit.js +4 -0
- package/dist/package/browser/appHostBootstrap.d.ts +16 -0
- package/dist/package/browser/appHostBootstrap.js +145 -0
- package/dist/package/browser/application.d.ts +35 -0
- package/dist/package/browser/application.js +64 -0
- package/dist/package/browser/assets/icons/agent-icon.png +0 -0
- package/dist/package/browser/assets/icons/at.svg +3 -0
- package/dist/package/browser/assets/icons/chevron-collapse.svg +3 -0
- package/dist/package/browser/assets/icons/chevron-expand.svg +3 -0
- package/dist/package/browser/assets/icons/chevron-up.svg +3 -0
- package/dist/package/browser/assets/icons/close-x.svg +3 -0
- package/dist/package/browser/assets/icons/close.svg +3 -0
- package/dist/package/browser/assets/icons/copy.svg +4 -0
- package/dist/package/browser/assets/icons/edit.svg +3 -0
- package/dist/package/browser/assets/icons/fullscreen.svg +3 -0
- package/dist/package/browser/assets/icons/pause.svg +4 -0
- package/dist/package/browser/assets/icons/play.svg +3 -0
- package/dist/package/browser/assets/icons/select.svg +3 -0
- package/dist/package/browser/assets/icons/sendMessage-enable.svg +4 -0
- package/dist/package/browser/assets/icons/sendMessage.svg +4 -0
- package/dist/package/browser/assets/icons/status-done.svg +11 -0
- package/dist/package/browser/assets/icons/status-running.svg +10 -0
- package/dist/package/browser/assets/icons/status-waiting.svg +10 -0
- package/dist/package/browser/assets/icons/tool-execute-script.svg +3 -0
- package/dist/package/browser/assets/icons/tool-other.svg +10 -0
- package/dist/package/browser/assets/icons/tool-read-file.svg +3 -0
- package/dist/package/browser/assets/icons/tool-resource-search.svg +3 -0
- package/dist/package/browser/assets/icons/tool-task-todo.svg +4 -0
- package/dist/package/browser/assets/icons/tool-write-file.svg +3 -0
- package/dist/package/browser/boot/SettingsSection.d.ts +14 -0
- package/dist/package/browser/boot/SettingsSection.js +82 -0
- package/dist/package/browser/boot/broadcast.d.ts +2 -0
- package/dist/package/browser/boot/broadcast.js +32 -0
- package/dist/package/browser/boot/driver.d.ts +22 -0
- package/dist/package/browser/boot/driver.js +47 -0
- package/dist/package/browser/boot/store.d.ts +29 -0
- package/dist/package/browser/boot/store.js +114 -0
- package/dist/package/browser/boot/themes.d.ts +19 -0
- package/dist/package/browser/boot/themes.js +21 -0
- package/dist/package/browser/boot/types.d.ts +22 -0
- package/dist/package/browser/boot/types.js +30 -0
- package/dist/package/browser/brand/BrandProvider.d.ts +19 -0
- package/dist/package/browser/brand/BrandProvider.js +35 -0
- package/dist/package/browser/brand/index.d.ts +4 -0
- package/dist/package/browser/brand/index.js +3 -0
- package/dist/package/browser/brand/runtime.d.ts +17 -0
- package/dist/package/browser/brand/runtime.js +71 -0
- package/dist/package/browser/brand/types.d.ts +77 -0
- package/dist/package/browser/brand/types.js +9 -0
- package/dist/package/browser/components/ActivityRail/ActivityRail.css +294 -0
- package/dist/package/browser/components/ActivityRail/ActivityRail.d.ts +2 -0
- package/dist/package/browser/components/ActivityRail/ActivityRail.js +164 -0
- package/dist/package/browser/components/ActivityRail/activity-rail-model.d.ts +18 -0
- package/dist/package/browser/components/ActivityRail/activity-rail-model.js +144 -0
- package/dist/package/browser/components/AgentAvatar/AgentAvatar.d.ts +17 -0
- package/dist/package/browser/components/AgentAvatar/AgentAvatar.js +50 -0
- package/dist/package/browser/components/BuildBadge/BuildBadge.d.ts +1 -0
- package/dist/package/browser/components/BuildBadge/BuildBadge.js +279 -0
- package/dist/package/browser/components/Bus/BusAdminPanel.css +2425 -0
- package/dist/package/browser/components/Bus/BusAdminPanel.d.ts +2 -0
- package/dist/package/browser/components/Bus/BusAdminPanel.js +1385 -0
- package/dist/package/browser/components/Bus/CapabilityOverview.d.ts +3 -0
- package/dist/package/browser/components/Bus/CapabilityOverview.js +50 -0
- package/dist/package/browser/components/ChatColumn/ChatColumn.d.ts +2 -0
- package/dist/package/browser/components/ChatColumn/ChatColumn.js +18 -0
- package/dist/package/browser/components/ChatColumn/SessionTabStrip.d.ts +1 -0
- package/dist/package/browser/components/ChatColumn/SessionTabStrip.js +103 -0
- package/dist/package/browser/components/ChatColumn/useChatWidth.d.ts +5 -0
- package/dist/package/browser/components/ChatColumn/useChatWidth.js +13 -0
- package/dist/package/browser/components/CommandPalette/CommandPalette.css +199 -0
- package/dist/package/browser/components/CommandPalette/CommandPalette.d.ts +2 -0
- package/dist/package/browser/components/CommandPalette/CommandPalette.js +242 -0
- package/dist/package/browser/components/Confirm/ConfirmDialog.d.ts +2 -0
- package/dist/package/browser/components/Confirm/ConfirmDialog.js +113 -0
- package/dist/package/browser/components/ContextMenu/ContextMenu.d.ts +10 -0
- package/dist/package/browser/components/ContextMenu/ContextMenu.js +218 -0
- package/dist/package/browser/components/ContextMenu/menuRegistry.d.ts +18 -0
- package/dist/package/browser/components/ContextMenu/menuRegistry.js +152 -0
- package/dist/package/browser/components/DetachedSurface.d.ts +20 -0
- package/dist/package/browser/components/DetachedSurface.js +102 -0
- package/dist/package/browser/components/DockShell/DockPanelHost.d.ts +4 -0
- package/dist/package/browser/components/DockShell/DockPanelHost.js +7 -0
- package/dist/package/browser/components/DockShell/DockRegion.d.ts +7 -0
- package/dist/package/browser/components/DockShell/DockRegion.js +315 -0
- package/dist/package/browser/components/DockShell/DockShell.css +1018 -0
- package/dist/package/browser/components/DockShell/DockTab.d.ts +3 -0
- package/dist/package/browser/components/DockShell/DockTab.js +139 -0
- package/dist/package/browser/components/DockShell/ExtensionHostPanel.d.ts +9 -0
- package/dist/package/browser/components/DockShell/ExtensionHostPanel.js +68 -0
- package/dist/package/browser/components/DockShell/ExtensionRuntimeFrame.d.ts +14 -0
- package/dist/package/browser/components/DockShell/ExtensionRuntimeFrame.js +56 -0
- package/dist/package/browser/components/DockShell/PanelWindowingBoundary.d.ts +6 -0
- package/dist/package/browser/components/DockShell/PanelWindowingBoundary.js +9 -0
- package/dist/package/browser/components/DockShell/chatDockAnimation.d.ts +45 -0
- package/dist/package/browser/components/DockShell/chatDockAnimation.js +101 -0
- package/dist/package/browser/components/DockShell/chatDockFullscreen.d.ts +17 -0
- package/dist/package/browser/components/DockShell/chatDockFullscreen.js +22 -0
- package/dist/package/browser/components/DockShell/chatDockLayout.d.ts +10 -0
- package/dist/package/browser/components/DockShell/chatDockLayout.js +11 -0
- package/dist/package/browser/components/DockShell/compact-empty-dock-groups.d.ts +16 -0
- package/dist/package/browser/components/DockShell/compact-empty-dock-groups.js +28 -0
- package/dist/package/browser/components/DockShell/crossInstanceDrop.d.ts +1 -0
- package/dist/package/browser/components/DockShell/crossInstanceDrop.js +1 -0
- package/dist/package/browser/components/DockShell/dockResetEpoch.d.ts +2 -0
- package/dist/package/browser/components/DockShell/dockResetEpoch.js +13 -0
- package/dist/package/browser/components/DockShell/dockTitle.d.ts +12 -0
- package/dist/package/browser/components/DockShell/dockTitle.js +36 -0
- package/dist/package/browser/components/DockShell/dockviewRegistry.d.ts +1 -0
- package/dist/package/browser/components/DockShell/dockviewRegistry.js +1 -0
- package/dist/package/browser/components/DockShell/edgeDrawer.d.ts +24 -0
- package/dist/package/browser/components/DockShell/edgeDrawer.js +1144 -0
- package/dist/package/browser/components/DockShell/edgePinStore.d.ts +12 -0
- package/dist/package/browser/components/DockShell/edgePinStore.js +37 -0
- package/dist/package/browser/components/DockShell/extension-editor-bridge.d.ts +13 -0
- package/dist/package/browser/components/DockShell/extension-editor-bridge.js +100 -0
- package/dist/package/browser/components/DockShell/extension-runtime-selection.d.ts +8 -0
- package/dist/package/browser/components/DockShell/extension-runtime-selection.js +6 -0
- package/dist/package/browser/components/DockShell/extensionRuntime.d.ts +17 -0
- package/dist/package/browser/components/DockShell/extensionRuntime.js +84 -0
- package/dist/package/browser/components/DockShell/footer-panel-visibility.d.ts +7 -0
- package/dist/package/browser/components/DockShell/footer-panel-visibility.js +43 -0
- package/dist/package/browser/components/DockShell/footer-panels.d.ts +2 -0
- package/dist/package/browser/components/DockShell/footer-panels.js +7 -0
- package/dist/package/browser/components/DockShell/panelRegistry.d.ts +37 -0
- package/dist/package/browser/components/DockShell/panelRegistry.js +126 -0
- package/dist/package/browser/components/DockShell/panelRenderers.d.ts +325 -0
- package/dist/package/browser/components/DockShell/panelRenderers.js +25 -0
- package/dist/package/browser/components/DockShell/panelTabCommands.d.ts +18 -0
- package/dist/package/browser/components/DockShell/panelTabCommands.js +133 -0
- package/dist/package/browser/components/DockShell/panelWindowing.d.ts +32 -0
- package/dist/package/browser/components/DockShell/panelWindowing.js +42 -0
- package/dist/package/browser/components/DockShell/regions.d.ts +1 -0
- package/dist/package/browser/components/DockShell/regions.js +1 -0
- package/dist/package/browser/components/DockShell/resolveRegion.d.ts +1 -0
- package/dist/package/browser/components/DockShell/resolveRegion.js +1 -0
- package/dist/package/browser/components/DockShell/sanitizeDockLayout.d.ts +3 -0
- package/dist/package/browser/components/DockShell/sanitizeDockLayout.js +46 -0
- package/dist/package/browser/components/DockShell/sideEdgeMove.d.ts +1 -0
- package/dist/package/browser/components/DockShell/sideEdgeMove.js +1 -0
- package/dist/package/browser/components/DockShell/studioTabMenuProvider.d.ts +13 -0
- package/dist/package/browser/components/DockShell/studioTabMenuProvider.js +39 -0
- package/dist/package/browser/components/DockShell/tabContextMenu.d.ts +29 -0
- package/dist/package/browser/components/DockShell/tabContextMenu.js +68 -0
- package/dist/package/browser/components/DockShell/ueDrag/controller.d.ts +80 -0
- package/dist/package/browser/components/DockShell/ueDrag/controller.js +785 -0
- package/dist/package/browser/components/DockShell/ueDrag/geometry.d.ts +94 -0
- package/dist/package/browser/components/DockShell/ueDrag/geometry.js +217 -0
- package/dist/package/browser/components/DockShell/ueDrag/overlay.d.ts +32 -0
- package/dist/package/browser/components/DockShell/ueDrag/overlay.js +206 -0
- package/dist/package/browser/components/DockShell/ueDrag/ueDrag.css +199 -0
- package/dist/package/browser/components/DockShell/useAuxBarWidth.d.ts +5 -0
- package/dist/package/browser/components/DockShell/useAuxBarWidth.js +13 -0
- package/dist/package/browser/components/Drawer/DrawerHostView.css +143 -0
- package/dist/package/browser/components/Drawer/DrawerHostView.d.ts +19 -0
- package/dist/package/browser/components/Drawer/DrawerHostView.js +93 -0
- package/dist/package/browser/components/Drawer/DrawerLauncher.d.ts +12 -0
- package/dist/package/browser/components/Drawer/DrawerLauncher.js +22 -0
- package/dist/package/browser/components/Drawer/useDrawerStore.d.ts +15 -0
- package/dist/package/browser/components/Drawer/useDrawerStore.js +80 -0
- package/dist/package/browser/components/ErrorBoundary.d.ts +55 -0
- package/dist/package/browser/components/ErrorBoundary.js +131 -0
- package/dist/package/browser/components/ExtensionHost/ExtensionIframeHost.d.ts +28 -0
- package/dist/package/browser/components/ExtensionHost/ExtensionIframeHost.js +179 -0
- package/dist/package/browser/components/ExtensionHost/NativeExtensionHost.d.ts +14 -0
- package/dist/package/browser/components/ExtensionHost/NativeExtensionHost.js +152 -0
- package/dist/package/browser/components/Feedback/FeedbackPanel.css +640 -0
- package/dist/package/browser/components/Feedback/FeedbackPanel.d.ts +8 -0
- package/dist/package/browser/components/Feedback/FeedbackPanel.js +118 -0
- package/dist/package/browser/components/Feedback/PassiveFeedback.css +179 -0
- package/dist/package/browser/components/Feedback/PassiveFeedback.d.ts +2 -0
- package/dist/package/browser/components/Feedback/PassiveFeedback.js +218 -0
- package/dist/package/browser/components/Feedback/collect.d.ts +15 -0
- package/dist/package/browser/components/Feedback/collect.js +80 -0
- package/dist/package/browser/components/Feedback/store.d.ts +61 -0
- package/dist/package/browser/components/Feedback/store.js +174 -0
- package/dist/package/browser/components/LangSwitcher/LangSwitcher.css +78 -0
- package/dist/package/browser/components/LangSwitcher/LangSwitcher.d.ts +14 -0
- package/dist/package/browser/components/LangSwitcher/LangSwitcher.js +44 -0
- package/dist/package/browser/components/MainArea/ConsolePanel.d.ts +1 -0
- package/dist/package/browser/components/MainArea/ConsolePanel.js +16 -0
- package/dist/package/browser/components/MainArea/MainArea.css +2130 -0
- package/dist/package/browser/components/MainArea/MainArea.d.ts +2 -0
- package/dist/package/browser/components/MainArea/MainArea.js +20 -0
- package/dist/package/browser/components/MainArea/StandaloneExtensionIframe.d.ts +25 -0
- package/dist/package/browser/components/MainArea/StandaloneExtensionIframe.js +155 -0
- package/dist/package/browser/components/MainArea/SurfacePanels.d.ts +3 -0
- package/dist/package/browser/components/MainArea/SurfacePanels.js +27 -0
- package/dist/package/browser/components/MainArea/TelemetryViewer.css +122 -0
- package/dist/package/browser/components/MainArea/TelemetryViewer.d.ts +36 -0
- package/dist/package/browser/components/MainArea/TelemetryViewer.js +116 -0
- package/dist/package/browser/components/MenuBar/MenuBar.css +186 -0
- package/dist/package/browser/components/MenuBar/MenuBar.d.ts +27 -0
- package/dist/package/browser/components/MenuBar/MenuBar.js +286 -0
- package/dist/package/browser/components/MenuBar/index.d.ts +1 -0
- package/dist/package/browser/components/MenuBar/index.js +1 -0
- package/dist/package/browser/components/MenuBar/menubar-open-state.d.ts +8 -0
- package/dist/package/browser/components/MenuBar/menubar-open-state.js +11 -0
- package/dist/package/browser/components/MenuBar/menubar-surface.d.ts +30 -0
- package/dist/package/browser/components/MenuBar/menubar-surface.js +201 -0
- package/dist/package/browser/components/ModelPicker/index.d.ts +1 -0
- package/dist/package/browser/components/ModelPicker/index.js +1 -0
- package/dist/package/browser/components/ModelPicker/useModelCatalog.d.ts +22 -0
- package/dist/package/browser/components/ModelPicker/useModelCatalog.js +100 -0
- package/dist/package/browser/components/Onboarding/ConnectModelPrompt.d.ts +2 -0
- package/dist/package/browser/components/Onboarding/ConnectModelPrompt.js +40 -0
- package/dist/package/browser/components/Onboarding/Onboarding.css +232 -0
- package/dist/package/browser/components/Onboarding/OnboardingController.d.ts +10 -0
- package/dist/package/browser/components/Onboarding/OnboardingController.js +549 -0
- package/dist/package/browser/components/Onboarding/connect-selection.d.ts +17 -0
- package/dist/package/browser/components/Onboarding/connect-selection.js +18 -0
- package/dist/package/browser/components/Onboarding/home-transition.d.ts +9 -0
- package/dist/package/browser/components/Onboarding/home-transition.js +20 -0
- package/dist/package/browser/components/Onboarding/index.d.ts +4 -0
- package/dist/package/browser/components/Onboarding/index.js +3 -0
- package/dist/package/browser/components/Onboarding/prepareTourShell.d.ts +5 -0
- package/dist/package/browser/components/Onboarding/prepareTourShell.js +11 -0
- package/dist/package/browser/components/Onboarding/project-name.d.ts +17 -0
- package/dist/package/browser/components/Onboarding/project-name.js +29 -0
- package/dist/package/browser/components/Onboarding/types.d.ts +31 -0
- package/dist/package/browser/components/Onboarding/types.js +77 -0
- package/dist/package/browser/components/PageTabs/PageTabStrip.css +221 -0
- package/dist/package/browser/components/PageTabs/PageTabStrip.d.ts +3 -0
- package/dist/package/browser/components/PageTabs/PageTabStrip.js +214 -0
- package/dist/package/browser/components/PageTabs/openablePageTypes.d.ts +9 -0
- package/dist/package/browser/components/PageTabs/openablePageTypes.js +13 -0
- package/dist/package/browser/components/PanelShell/PanelShell.css +517 -0
- package/dist/package/browser/components/PanelShell/PanelShell.d.ts +7 -0
- package/dist/package/browser/components/PanelShell/PanelShell.js +459 -0
- package/dist/package/browser/components/Resize/ResizeHandle.d.ts +1 -0
- package/dist/package/browser/components/Resize/ResizeHandle.js +1 -0
- package/dist/package/browser/components/SceneBackground/SceneBackground.d.ts +2 -0
- package/dist/package/browser/components/SceneBackground/SceneBackground.js +5 -0
- package/dist/package/browser/components/SchemaForm/SchemaForm.css +138 -0
- package/dist/package/browser/components/SchemaForm/SchemaForm.d.ts +17 -0
- package/dist/package/browser/components/SchemaForm/SchemaForm.js +86 -0
- package/dist/package/browser/components/SchemaForm/schema-form-utils.d.ts +30 -0
- package/dist/package/browser/components/SchemaForm/schema-form-utils.js +51 -0
- package/dist/package/browser/components/SettingsPrimitives.d.ts +24 -0
- package/dist/package/browser/components/SettingsPrimitives.js +145 -0
- package/dist/package/browser/components/Sidebar/BusHealthLamp.d.ts +1 -0
- package/dist/package/browser/components/Sidebar/BusHealthLamp.js +72 -0
- package/dist/package/browser/components/Sidebar/FilesPanel.d.ts +1 -0
- package/dist/package/browser/components/Sidebar/FilesPanel.js +234 -0
- package/dist/package/browser/components/Sidebar/Sidebar.css +1393 -0
- package/dist/package/browser/components/Sidebar/Sidebar.d.ts +3 -0
- package/dist/package/browser/components/Sidebar/Sidebar.js +8 -0
- package/dist/package/browser/components/Sidebar/sidebar-types.d.ts +18 -0
- package/dist/package/browser/components/Sidebar/sidebar-types.js +1 -0
- package/dist/package/browser/components/SlotDebugOverlay/SlotDebugOverlay.d.ts +1 -0
- package/dist/package/browser/components/SlotDebugOverlay/SlotDebugOverlay.js +1 -0
- package/dist/package/browser/components/SlotDebugOverlay/hashHue.d.ts +1 -0
- package/dist/package/browser/components/SlotDebugOverlay/hashHue.js +1 -0
- package/dist/package/browser/components/SlotDebugOverlay/index.d.ts +1 -0
- package/dist/package/browser/components/SlotDebugOverlay/index.js +1 -0
- package/dist/package/browser/components/SlotDebugOverlay/isSlotDebugEnabled.d.ts +1 -0
- package/dist/package/browser/components/SlotDebugOverlay/isSlotDebugEnabled.js +1 -0
- package/dist/package/browser/components/StatusBar/FatalBanner.d.ts +25 -0
- package/dist/package/browser/components/StatusBar/FatalBanner.js +52 -0
- package/dist/package/browser/components/StatusBar/GlobalStatusBar.css +304 -0
- package/dist/package/browser/components/StatusBar/InfoPanel.css +174 -0
- package/dist/package/browser/components/StatusBar/InfoPanel.d.ts +19 -0
- package/dist/package/browser/components/StatusBar/InfoPanel.js +128 -0
- package/dist/package/browser/components/StatusBar/StatusChip.css +52 -0
- package/dist/package/browser/components/StatusBar/StatusChip.d.ts +40 -0
- package/dist/package/browser/components/StatusBar/StatusChip.js +13 -0
- package/dist/package/browser/components/StatusBar/StripHostView.d.ts +2 -0
- package/dist/package/browser/components/StatusBar/StripHostView.js +91 -0
- package/dist/package/browser/components/StatusBar/StripPopover.css +58 -0
- package/dist/package/browser/components/StatusBar/StripPopover.d.ts +16 -0
- package/dist/package/browser/components/StatusBar/StripPopover.js +15 -0
- package/dist/package/browser/components/StatusBar/feeds/PulseFeeds.d.ts +16 -0
- package/dist/package/browser/components/StatusBar/feeds/PulseFeeds.js +88 -0
- package/dist/package/browser/components/StatusBar/footer/CheckpointsDrawer.d.ts +4 -0
- package/dist/package/browser/components/StatusBar/footer/CheckpointsDrawer.js +77 -0
- package/dist/package/browser/components/StatusBar/footer/DiagnosticsPopover.d.ts +4 -0
- package/dist/package/browser/components/StatusBar/footer/DiagnosticsPopover.js +108 -0
- package/dist/package/browser/components/StatusBar/footer/EventsDrawer.d.ts +14 -0
- package/dist/package/browser/components/StatusBar/footer/EventsDrawer.js +25 -0
- package/dist/package/browser/components/StatusBar/footer/ForgeaxBuildPopover.d.ts +4 -0
- package/dist/package/browser/components/StatusBar/footer/ForgeaxBuildPopover.js +62 -0
- package/dist/package/browser/components/StatusBar/footer/footer.css +178 -0
- package/dist/package/browser/components/StatusBar/healthBridge.d.ts +38 -0
- package/dist/package/browser/components/StatusBar/healthBridge.js +245 -0
- package/dist/package/browser/components/StatusBar/healthStore.d.ts +80 -0
- package/dist/package/browser/components/StatusBar/healthStore.js +129 -0
- package/dist/package/browser/components/StatusBar/useStatusItem.d.ts +10 -0
- package/dist/package/browser/components/StatusBar/useStatusItem.js +35 -0
- package/dist/package/browser/components/Surfaces/SurfaceKeepAlive.css +34 -0
- package/dist/package/browser/components/Surfaces/SurfaceKeepAliveLayer.d.ts +3 -0
- package/dist/package/browser/components/Surfaces/SurfaceKeepAliveLayer.js +218 -0
- package/dist/package/browser/components/Surfaces/SurfaceOverlay.css +160 -0
- package/dist/package/browser/components/Surfaces/SurfaceOverlay.d.ts +9 -0
- package/dist/package/browser/components/Surfaces/SurfaceOverlay.js +144 -0
- package/dist/package/browser/components/TopBar/AndroidPackageDialog.d.ts +23 -0
- package/dist/package/browser/components/TopBar/AndroidPackageDialog.js +115 -0
- package/dist/package/browser/components/TopBar/FsBrowser.css +156 -0
- package/dist/package/browser/components/TopBar/FsBrowser.d.ts +8 -0
- package/dist/package/browser/components/TopBar/FsBrowser.js +93 -0
- package/dist/package/browser/components/TopBar/GameSwitcher.d.ts +29 -0
- package/dist/package/browser/components/TopBar/GameSwitcher.js +157 -0
- package/dist/package/browser/components/TopBar/IosPackageDialog.d.ts +23 -0
- package/dist/package/browser/components/TopBar/IosPackageDialog.js +115 -0
- package/dist/package/browser/components/TopBar/ProjectSwitcher.d.ts +3 -0
- package/dist/package/browser/components/TopBar/ProjectSwitcher.js +41 -0
- package/dist/package/browser/components/TopBar/PublishOnboarding.css +133 -0
- package/dist/package/browser/components/TopBar/PublishOnboarding.d.ts +10 -0
- package/dist/package/browser/components/TopBar/PublishOnboarding.js +144 -0
- package/dist/package/browser/components/TopBar/SessionSwitcher.d.ts +2 -0
- package/dist/package/browser/components/TopBar/SessionSwitcher.js +124 -0
- package/dist/package/browser/components/TopBar/TopBar.css +1672 -0
- package/dist/package/browser/components/TopBar/TopBar.d.ts +2 -0
- package/dist/package/browser/components/TopBar/TopBar.js +606 -0
- package/dist/package/browser/components/TopBar/publish-options.d.ts +20 -0
- package/dist/package/browser/components/TopBar/publish-options.js +28 -0
- package/dist/package/browser/components/TourOverlay/TourOverlay.css +122 -0
- package/dist/package/browser/components/TourOverlay/TourOverlay.d.ts +26 -0
- package/dist/package/browser/components/TourOverlay/TourOverlay.js +233 -0
- package/dist/package/browser/components/TourOverlay/index.d.ts +2 -0
- package/dist/package/browser/components/TourOverlay/index.js +1 -0
- package/dist/package/browser/components/ownership.d.ts +7 -0
- package/dist/package/browser/components/ownership.js +7 -0
- package/dist/package/browser/components/ui/SearchableMenu.css +143 -0
- package/dist/package/browser/components/ui/SearchableMenu.d.ts +30 -0
- package/dist/package/browser/components/ui/SearchableMenu.js +40 -0
- package/dist/package/browser/components/ui/alert-dialog.d.ts +20 -0
- package/dist/package/browser/components/ui/alert-dialog.js +38 -0
- package/dist/package/browser/components/ui/button.d.ts +11 -0
- package/dist/package/browser/components/ui/button.js +33 -0
- package/dist/package/browser/components/ui/checkbox.d.ts +4 -0
- package/dist/package/browser/components/ui/checkbox.js +8 -0
- package/dist/package/browser/components/ui/command.d.ts +74 -0
- package/dist/package/browser/components/ui/command.js +20 -0
- package/dist/package/browser/components/ui/dialog.d.ts +21 -0
- package/dist/package/browser/components/ui/dialog.js +34 -0
- package/dist/package/browser/components/ui/dropdown-menu.d.ts +18 -0
- package/dist/package/browser/components/ui/dropdown-menu.js +30 -0
- package/dist/package/browser/components/ui/input.d.ts +3 -0
- package/dist/package/browser/components/ui/input.js +8 -0
- package/dist/package/browser/components/ui/label.d.ts +4 -0
- package/dist/package/browser/components/ui/label.js +7 -0
- package/dist/package/browser/components/ui/popover.d.ts +7 -0
- package/dist/package/browser/components/ui/popover.js +10 -0
- package/dist/package/browser/components/ui/select.d.ts +11 -0
- package/dist/package/browser/components/ui/select.js +31 -0
- package/dist/package/browser/components/ui/tabs.d.ts +7 -0
- package/dist/package/browser/components/ui/tabs.js +12 -0
- package/dist/package/browser/components/ui/textarea.d.ts +3 -0
- package/dist/package/browser/components/ui/textarea.js +8 -0
- package/dist/package/browser/components/ui/tooltip.d.ts +7 -0
- package/dist/package/browser/components/ui/tooltip.js +10 -0
- package/dist/package/browser/core/app-shell/catalog-page-extensions.d.ts +28 -0
- package/dist/package/browser/core/app-shell/catalog-page-extensions.js +234 -0
- package/dist/package/browser/core/app-shell/derive-panel-renderers.d.ts +2 -0
- package/dist/package/browser/core/app-shell/derive-panel-renderers.js +17 -0
- package/dist/package/browser/core/app-shell/host.d.ts +31 -0
- package/dist/package/browser/core/app-shell/host.js +188 -0
- package/dist/package/browser/core/app-shell/index.d.ts +7 -0
- package/dist/package/browser/core/app-shell/index.js +8 -0
- package/dist/package/browser/core/app-shell/logger.d.ts +2 -0
- package/dist/package/browser/core/app-shell/logger.js +6 -0
- package/dist/package/browser/core/app-shell/ownership.d.ts +7 -0
- package/dist/package/browser/core/app-shell/ownership.js +7 -0
- package/dist/package/browser/core/app-shell/react/HostProvider.d.ts +10 -0
- package/dist/package/browser/core/app-shell/react/HostProvider.js +35 -0
- package/dist/package/browser/core/app-shell/surface-extension.d.ts +17 -0
- package/dist/package/browser/core/app-shell/surface-extension.js +33 -0
- package/dist/package/browser/core/app-shell/types.d.ts +176 -0
- package/dist/package/browser/core/app-shell/types.js +1 -0
- package/dist/package/browser/core/contextual-keybindings.d.ts +71 -0
- package/dist/package/browser/core/contextual-keybindings.js +198 -0
- package/dist/package/browser/core/extension-foundation/bus.d.ts +2 -0
- package/dist/package/browser/core/extension-foundation/bus.js +3 -0
- package/dist/package/browser/core/extension-foundation/capabilities.d.ts +2 -0
- package/dist/package/browser/core/extension-foundation/capabilities.js +3 -0
- package/dist/package/browser/core/extension-foundation/commands.d.ts +2 -0
- package/dist/package/browser/core/extension-foundation/commands.js +3 -0
- package/dist/package/browser/core/extension-foundation/context-keys.d.ts +2 -0
- package/dist/package/browser/core/extension-foundation/context-keys.js +3 -0
- package/dist/package/browser/core/extension-foundation/contribution-registry.d.ts +2 -0
- package/dist/package/browser/core/extension-foundation/contribution-registry.js +3 -0
- package/dist/package/browser/core/extension-foundation/errors.d.ts +2 -0
- package/dist/package/browser/core/extension-foundation/errors.js +3 -0
- package/dist/package/browser/core/extension-foundation/index.d.ts +8 -0
- package/dist/package/browser/core/extension-foundation/index.js +9 -0
- package/dist/package/browser/core/extension-foundation/loader.d.ts +2 -0
- package/dist/package/browser/core/extension-foundation/loader.js +3 -0
- package/dist/package/browser/core/extension-foundation/storage.d.ts +2 -0
- package/dist/package/browser/core/extension-foundation/storage.js +3 -0
- package/dist/package/browser/core/extension-foundation/types.d.ts +2 -0
- package/dist/package/browser/core/extension-foundation/types.js +1 -0
- package/dist/package/browser/core/extensions/builtin-commands.d.ts +2 -0
- package/dist/package/browser/core/extensions/builtin-commands.js +256 -0
- package/dist/package/browser/core/extensions/builtin-menus.d.ts +2 -0
- package/dist/package/browser/core/extensions/builtin-menus.js +252 -0
- package/dist/package/browser/core/extensions/chrome-drawer.d.ts +3 -0
- package/dist/package/browser/core/extensions/chrome-drawer.js +45 -0
- package/dist/package/browser/core/extensions/chrome-statusbar.d.ts +6 -0
- package/dist/package/browser/core/extensions/chrome-statusbar.js +26 -0
- package/dist/package/browser/core/extensions/detached-agents-browser.d.ts +3 -0
- package/dist/package/browser/core/extensions/detached-agents-browser.js +9 -0
- package/dist/package/browser/core/extensions/detached-files-browser.d.ts +3 -0
- package/dist/package/browser/core/extensions/detached-files-browser.js +6 -0
- package/dist/package/browser/core/extensions/editor-commands.d.ts +2 -0
- package/dist/package/browser/core/extensions/editor-commands.js +182 -0
- package/dist/package/browser/core/extensions/foundation-bus.d.ts +2 -0
- package/dist/package/browser/core/extensions/foundation-bus.js +3 -0
- package/dist/package/browser/core/extensions/foundation-commands.d.ts +2 -0
- package/dist/package/browser/core/extensions/foundation-commands.js +6 -0
- package/dist/package/browser/core/extensions/foundation-storage.d.ts +2 -0
- package/dist/package/browser/core/extensions/foundation-storage.js +3 -0
- package/dist/package/browser/core/extensions/host-commands.d.ts +18 -0
- package/dist/package/browser/core/extensions/host-commands.js +52 -0
- package/dist/package/browser/core/extensions/observability.d.ts +14 -0
- package/dist/package/browser/core/extensions/observability.js +18 -0
- package/dist/package/browser/core/extensions/panels-chat.d.ts +2 -0
- package/dist/package/browser/core/extensions/panels-chat.js +41 -0
- package/dist/package/browser/core/extensions/panels-editor.d.ts +8 -0
- package/dist/package/browser/core/extensions/panels-editor.js +26 -0
- package/dist/package/browser/core/extensions/panels-viewport.d.ts +2 -0
- package/dist/package/browser/core/extensions/panels-viewport.js +20 -0
- package/dist/package/browser/core/extensions/session-client.d.ts +29 -0
- package/dist/package/browser/core/extensions/session-client.js +42 -0
- package/dist/package/browser/core/extensions/slots-corner-agent-picker.d.ts +5 -0
- package/dist/package/browser/core/extensions/slots-corner-agent-picker.js +6 -0
- package/dist/package/browser/core/extensions/slots-main-area-body.d.ts +3 -0
- package/dist/package/browser/core/extensions/slots-main-area-body.js +6 -0
- package/dist/package/browser/core/extensions/slots-sidebar-agents.d.ts +3 -0
- package/dist/package/browser/core/extensions/slots-sidebar-agents.js +6 -0
- package/dist/package/browser/core/extensions/studio-domain-clients.d.ts +12 -0
- package/dist/package/browser/core/extensions/studio-domain-clients.js +15 -0
- package/dist/package/browser/core/extensions/surfaces-scene-editor.d.ts +3 -0
- package/dist/package/browser/core/extensions/surfaces-scene-editor.js +6 -0
- package/dist/package/browser/core/extensions/trajectory.d.ts +2 -0
- package/dist/package/browser/core/extensions/trajectory.js +50 -0
- package/dist/package/browser/core/page-navigation.d.ts +1 -0
- package/dist/package/browser/core/page-navigation.js +1 -0
- package/dist/package/browser/core/page-platform/activity.d.ts +4 -0
- package/dist/package/browser/core/page-platform/activity.js +46 -0
- package/dist/package/browser/core/page-platform/dockview-layout.d.ts +7 -0
- package/dist/package/browser/core/page-platform/dockview-layout.js +63 -0
- package/dist/package/browser/core/page-platform/index.d.ts +8 -0
- package/dist/package/browser/core/page-platform/index.js +8 -0
- package/dist/package/browser/core/page-platform/layout-store.d.ts +18 -0
- package/dist/package/browser/core/page-platform/layout-store.js +54 -0
- package/dist/package/browser/core/page-platform/page-dirty-probe.d.ts +1 -0
- package/dist/package/browser/core/page-platform/page-dirty-probe.js +4 -0
- package/dist/package/browser/core/page-platform/registry.d.ts +3 -0
- package/dist/package/browser/core/page-platform/registry.js +194 -0
- package/dist/package/browser/core/page-platform/resource-editor.d.ts +3 -0
- package/dist/package/browser/core/page-platform/resource-editor.js +74 -0
- package/dist/package/browser/core/page-platform/session.d.ts +10 -0
- package/dist/package/browser/core/page-platform/session.js +327 -0
- package/dist/package/browser/core/page-platform/types.d.ts +242 -0
- package/dist/package/browser/core/page-platform/types.js +10 -0
- package/dist/package/browser/core/panels/context-expression.d.ts +1 -0
- package/dist/package/browser/core/panels/context-expression.js +1 -0
- package/dist/package/browser/core/panels/drawer.d.ts +23 -0
- package/dist/package/browser/core/panels/drawer.js +1 -0
- package/dist/package/browser/core/panels/index.d.ts +7 -0
- package/dist/package/browser/core/panels/index.js +7 -0
- package/dist/package/browser/core/panels/panel-action-registry.d.ts +6 -0
- package/dist/package/browser/core/panels/panel-action-registry.js +62 -0
- package/dist/package/browser/core/panels/panel-control-registry.d.ts +6 -0
- package/dist/package/browser/core/panels/panel-control-registry.js +54 -0
- package/dist/package/browser/core/panels/resolve-panel-action-state.d.ts +10 -0
- package/dist/package/browser/core/panels/resolve-panel-action-state.js +9 -0
- package/dist/package/browser/core/panels/strip.d.ts +40 -0
- package/dist/package/browser/core/panels/strip.js +1 -0
- package/dist/package/browser/core/panels/types.d.ts +143 -0
- package/dist/package/browser/core/panels/types.js +1 -0
- package/dist/package/browser/i18n/index.d.ts +50 -0
- package/dist/package/browser/i18n/index.js +207 -0
- package/dist/package/browser/i18n/locales/en.json +1959 -0
- package/dist/package/browser/i18n/locales/zh.json +1959 -0
- package/dist/package/browser/index.d.ts +2 -0
- package/dist/package/browser/index.js +2 -0
- package/dist/package/browser/lib/a11y-summary.d.ts +17 -0
- package/dist/package/browser/lib/a11y-summary.js +66 -0
- package/dist/package/browser/lib/action-dom-discovery.d.ts +2 -0
- package/dist/package/browser/lib/action-dom-discovery.js +84 -0
- package/dist/package/browser/lib/action-registry.d.ts +94 -0
- package/dist/package/browser/lib/action-registry.js +210 -0
- package/dist/package/browser/lib/aegis.d.ts +40 -0
- package/dist/package/browser/lib/aegis.js +230 -0
- package/dist/package/browser/lib/agent-catalog-url.d.ts +9 -0
- package/dist/package/browser/lib/agent-catalog-url.js +24 -0
- package/dist/package/browser/lib/agent-cli-provider.d.ts +10 -0
- package/dist/package/browser/lib/agent-cli-provider.js +81 -0
- package/dist/package/browser/lib/ai-intents.d.ts +30 -0
- package/dist/package/browser/lib/ai-intents.js +52 -0
- package/dist/package/browser/lib/broadcast-stream.d.ts +17 -0
- package/dist/package/browser/lib/broadcast-stream.js +163 -0
- package/dist/package/browser/lib/browser-prefs-sync.d.ts +16 -0
- package/dist/package/browser/lib/browser-prefs-sync.js +151 -0
- package/dist/package/browser/lib/builtin-actions.d.ts +2 -0
- package/dist/package/browser/lib/builtin-actions.js +558 -0
- package/dist/package/browser/lib/bus.d.ts +25 -0
- package/dist/package/browser/lib/bus.js +71 -0
- package/dist/package/browser/lib/checkpoint-api.d.ts +54 -0
- package/dist/package/browser/lib/checkpoint-api.js +41 -0
- package/dist/package/browser/lib/cli-providers.d.ts +33 -0
- package/dist/package/browser/lib/cli-providers.js +61 -0
- package/dist/package/browser/lib/command-palette-store.d.ts +5 -0
- package/dist/package/browser/lib/command-palette-store.js +22 -0
- package/dist/package/browser/lib/composer-bridge.d.ts +103 -0
- package/dist/package/browser/lib/composer-bridge.js +448 -0
- package/dist/package/browser/lib/dashboard-api.d.ts +104 -0
- package/dist/package/browser/lib/dashboard-api.js +125 -0
- package/dist/package/browser/lib/deep-link-bus.d.ts +10 -0
- package/dist/package/browser/lib/deep-link-bus.js +35 -0
- package/dist/package/browser/lib/dialog.d.ts +40 -0
- package/dist/package/browser/lib/dialog.js +103 -0
- package/dist/package/browser/lib/editor-facts-bus.d.ts +27 -0
- package/dist/package/browser/lib/editor-facts-bus.js +25 -0
- package/dist/package/browser/lib/extension-api.d.ts +140 -0
- package/dist/package/browser/lib/extension-api.js +90 -0
- package/dist/package/browser/lib/file-activity-stream.d.ts +54 -0
- package/dist/package/browser/lib/file-activity-stream.js +123 -0
- package/dist/package/browser/lib/file-family.d.ts +15 -0
- package/dist/package/browser/lib/file-family.js +25 -0
- package/dist/package/browser/lib/game-templates.d.ts +7 -0
- package/dist/package/browser/lib/game-templates.js +15 -0
- package/dist/package/browser/lib/global-shortcuts.d.ts +121 -0
- package/dist/package/browser/lib/global-shortcuts.js +551 -0
- package/dist/package/browser/lib/logSink.d.ts +16 -0
- package/dist/package/browser/lib/logSink.js +128 -0
- package/dist/package/browser/lib/lucide-icon.d.ts +5 -0
- package/dist/package/browser/lib/lucide-icon.js +20 -0
- package/dist/package/browser/lib/menu-registry.d.ts +113 -0
- package/dist/package/browser/lib/menu-registry.js +197 -0
- package/dist/package/browser/lib/model-config.d.ts +89 -0
- package/dist/package/browser/lib/model-config.js +72 -0
- package/dist/package/browser/lib/model-prefs.d.ts +5 -0
- package/dist/package/browser/lib/model-prefs.js +53 -0
- package/dist/package/browser/lib/model-route/index.d.ts +81 -0
- package/dist/package/browser/lib/model-route/index.js +175 -0
- package/dist/package/browser/lib/narrative-copilot.d.ts +20 -0
- package/dist/package/browser/lib/narrative-copilot.js +105 -0
- package/dist/package/browser/lib/native-menu-bridge.d.ts +37 -0
- package/dist/package/browser/lib/native-menu-bridge.js +151 -0
- package/dist/package/browser/lib/page-tab-icons.d.ts +21 -0
- package/dist/package/browser/lib/page-tab-icons.js +64 -0
- package/dist/package/browser/lib/panel-tab-icons.d.ts +21 -0
- package/dist/package/browser/lib/panel-tab-icons.js +49 -0
- package/dist/package/browser/lib/passive-feedback.d.ts +50 -0
- package/dist/package/browser/lib/passive-feedback.js +171 -0
- package/dist/package/browser/lib/perception-stream.d.ts +27 -0
- package/dist/package/browser/lib/perception-stream.js +42 -0
- package/dist/package/browser/lib/platform/index.d.ts +14 -0
- package/dist/package/browser/lib/platform/index.js +13 -0
- package/dist/package/browser/lib/platform/runtime.d.ts +22 -0
- package/dist/package/browser/lib/platform/runtime.js +42 -0
- package/dist/package/browser/lib/platform/shell-adapter.d.ts +24 -0
- package/dist/package/browser/lib/platform/shell-adapter.js +74 -0
- package/dist/package/browser/lib/platform/surface-windowing.d.ts +4 -0
- package/dist/package/browser/lib/platform/surface-windowing.js +16 -0
- package/dist/package/browser/lib/platform/surface.d.ts +13 -0
- package/dist/package/browser/lib/platform/surface.js +27 -0
- package/dist/package/browser/lib/platform/use-surface-windowing.d.ts +1 -0
- package/dist/package/browser/lib/platform/use-surface-windowing.js +6 -0
- package/dist/package/browser/lib/platform/window-manager.d.ts +2 -0
- package/dist/package/browser/lib/platform/window-manager.js +82 -0
- package/dist/package/browser/lib/project-context.d.ts +4 -0
- package/dist/package/browser/lib/project-context.js +42 -0
- package/dist/package/browser/lib/project.d.ts +5 -0
- package/dist/package/browser/lib/project.js +8 -0
- package/dist/package/browser/lib/recent-games.d.ts +24 -0
- package/dist/package/browser/lib/recent-games.js +50 -0
- package/dist/package/browser/lib/repair-builtin-menus.d.ts +6 -0
- package/dist/package/browser/lib/repair-builtin-menus.js +18 -0
- package/dist/package/browser/lib/reply-language.d.ts +9 -0
- package/dist/package/browser/lib/reply-language.js +11 -0
- package/dist/package/browser/lib/resilient-polling.d.ts +9 -0
- package/dist/package/browser/lib/resilient-polling.js +16 -0
- package/dist/package/browser/lib/session-time.d.ts +8 -0
- package/dist/package/browser/lib/session-time.js +40 -0
- package/dist/package/browser/lib/shell-live-data.d.ts +12 -0
- package/dist/package/browser/lib/shell-live-data.js +66 -0
- package/dist/package/browser/lib/sse.d.ts +5 -0
- package/dist/package/browser/lib/sse.js +42 -0
- package/dist/package/browser/lib/storageKeys.d.ts +70 -0
- package/dist/package/browser/lib/storageKeys.js +89 -0
- package/dist/package/browser/lib/surface-store.d.ts +38 -0
- package/dist/package/browser/lib/surface-store.js +62 -0
- package/dist/package/browser/lib/surface.d.ts +56 -0
- package/dist/package/browser/lib/surface.js +225 -0
- package/dist/package/browser/lib/surfaceAnchors.d.ts +16 -0
- package/dist/package/browser/lib/surfaceAnchors.js +76 -0
- package/dist/package/browser/lib/surfaceKeepAliveLayout.d.ts +7 -0
- package/dist/package/browser/lib/surfaceKeepAliveLayout.js +12 -0
- package/dist/package/browser/lib/telemetry-test-prelude.d.ts +0 -0
- package/dist/package/browser/lib/telemetry-test-prelude.js +14 -0
- package/dist/package/browser/lib/text-edit-actions.d.ts +14 -0
- package/dist/package/browser/lib/text-edit-actions.js +184 -0
- package/dist/package/browser/lib/trace.d.ts +34 -0
- package/dist/package/browser/lib/trace.js +273 -0
- package/dist/package/browser/lib/trustedOrigins.d.ts +4 -0
- package/dist/package/browser/lib/trustedOrigins.js +36 -0
- package/dist/package/browser/lib/ui-action-highlight.d.ts +2 -0
- package/dist/package/browser/lib/ui-action-highlight.js +93 -0
- package/dist/package/browser/lib/ui-bridge.d.ts +2 -0
- package/dist/package/browser/lib/ui-bridge.js +224 -0
- package/dist/package/browser/lib/ui-screenshot.d.ts +31 -0
- package/dist/package/browser/lib/ui-screenshot.js +155 -0
- package/dist/package/browser/lib/ui-trajectory.d.ts +47 -0
- package/dist/package/browser/lib/ui-trajectory.js +99 -0
- package/dist/package/browser/lib/use-bus-snapshot.d.ts +3 -0
- package/dist/package/browser/lib/use-bus-snapshot.js +13 -0
- package/dist/package/browser/lib/use-extension-manifest.d.ts +19 -0
- package/dist/package/browser/lib/use-extension-manifest.js +67 -0
- package/dist/package/browser/lib/useConfirmToast.d.ts +26 -0
- package/dist/package/browser/lib/useConfirmToast.js +120 -0
- package/dist/package/browser/lib/utils.d.ts +2 -0
- package/dist/package/browser/lib/utils.js +5 -0
- package/dist/package/browser/lib/vag-action-bridge.d.ts +2 -0
- package/dist/package/browser/lib/vag-action-bridge.js +130 -0
- package/dist/package/browser/main.d.ts +1 -0
- package/dist/package/browser/main.js +157 -0
- package/dist/package/browser/store-parts/domain-clients.d.ts +149 -0
- package/dist/package/browser/store-parts/domain-clients.js +17 -0
- package/dist/package/browser/store-parts/observability.d.ts +4 -0
- package/dist/package/browser/store-parts/observability.js +35 -0
- package/dist/package/browser/store-parts/persistence.d.ts +40 -0
- package/dist/package/browser/store-parts/persistence.js +245 -0
- package/dist/package/browser/store-parts/session-client.d.ts +73 -0
- package/dist/package/browser/store-parts/session-client.js +17 -0
- package/dist/package/browser/store-parts/session-pick.d.ts +8 -0
- package/dist/package/browser/store-parts/session-pick.js +21 -0
- package/dist/package/browser/store-parts/shell.d.ts +5 -0
- package/dist/package/browser/store-parts/shell.js +37 -0
- package/dist/package/browser/store.d.ts +455 -0
- package/dist/package/browser/store.js +890 -0
- package/dist/package/browser/styles/forgeax-preview/agent-avatar.css +69 -0
- package/dist/package/browser/styles/forgeax-preview/aliases.css +21 -0
- package/dist/package/browser/styles/forgeax-preview/chat-popover.css +141 -0
- package/dist/package/browser/styles/forgeax-preview/chat-session.css +896 -0
- package/dist/package/browser/styles/forgeax-preview/composer-port.css +531 -0
- package/dist/package/browser/styles/forgeax-preview/design-tokens.css +25 -0
- package/dist/package/browser/styles/forgeax-preview/index.css +9 -0
- package/dist/package/browser/styles/forgeax-preview/scene-fx.css +117 -0
- package/dist/package/browser/styles/forgeax-preview/shell-layout.css +280 -0
- package/dist/package/browser/styles/forgeax-preview/shell-skin.css +128 -0
- package/dist/package/browser/styles/foundation.tokens.json +2755 -0
- package/dist/package/browser/styles/global.css +196 -0
- package/dist/package/browser/styles/motion.css +558 -0
- package/dist/package/browser/styles/plugin-token-bridge.css +19 -0
- package/dist/package/browser/styles/primitive.css +197 -0
- package/dist/package/browser/styles/semantic.tokens.json +1524 -0
- package/dist/package/browser/styles/tokens.css +304 -0
- package/dist/package/node/App.js +11 -0
- package/dist/package/node/ApplicationDetachedShell.js +10 -0
- package/dist/package/node/ApplicationShell.js +62 -0
- package/dist/package/node/app-kit.js +4 -0
- package/dist/package/node/appHostBootstrap.js +145 -0
- package/dist/package/node/application.js +64 -0
- package/dist/package/node/boot/SettingsSection.js +82 -0
- package/dist/package/node/boot/broadcast.js +32 -0
- package/dist/package/node/boot/driver.js +47 -0
- package/dist/package/node/boot/store.js +114 -0
- package/dist/package/node/boot/themes.js +21 -0
- package/dist/package/node/boot/types.js +30 -0
- package/dist/package/node/brand/BrandProvider.js +35 -0
- package/dist/package/node/brand/index.js +3 -0
- package/dist/package/node/brand/runtime.js +71 -0
- package/dist/package/node/brand/types.js +9 -0
- package/dist/package/node/components/ActivityRail/ActivityRail.js +164 -0
- package/dist/package/node/components/ActivityRail/activity-rail-model.js +144 -0
- package/dist/package/node/components/AgentAvatar/AgentAvatar.js +50 -0
- package/dist/package/node/components/BuildBadge/BuildBadge.js +279 -0
- package/dist/package/node/components/Bus/BusAdminPanel.js +1385 -0
- package/dist/package/node/components/Bus/CapabilityOverview.js +50 -0
- package/dist/package/node/components/ChatColumn/ChatColumn.js +18 -0
- package/dist/package/node/components/ChatColumn/SessionTabStrip.js +103 -0
- package/dist/package/node/components/ChatColumn/useChatWidth.js +13 -0
- package/dist/package/node/components/CommandPalette/CommandPalette.js +242 -0
- package/dist/package/node/components/Confirm/ConfirmDialog.js +113 -0
- package/dist/package/node/components/ContextMenu/ContextMenu.js +218 -0
- package/dist/package/node/components/ContextMenu/menuRegistry.js +152 -0
- package/dist/package/node/components/DetachedSurface.js +102 -0
- package/dist/package/node/components/DockShell/DockPanelHost.js +7 -0
- package/dist/package/node/components/DockShell/DockRegion.js +315 -0
- package/dist/package/node/components/DockShell/DockTab.js +139 -0
- package/dist/package/node/components/DockShell/ExtensionHostPanel.js +68 -0
- package/dist/package/node/components/DockShell/ExtensionRuntimeFrame.js +56 -0
- package/dist/package/node/components/DockShell/PanelWindowingBoundary.js +9 -0
- package/dist/package/node/components/DockShell/chatDockAnimation.js +101 -0
- package/dist/package/node/components/DockShell/chatDockFullscreen.js +22 -0
- package/dist/package/node/components/DockShell/chatDockLayout.js +11 -0
- package/dist/package/node/components/DockShell/compact-empty-dock-groups.js +28 -0
- package/dist/package/node/components/DockShell/crossInstanceDrop.js +1 -0
- package/dist/package/node/components/DockShell/dockResetEpoch.js +13 -0
- package/dist/package/node/components/DockShell/dockTitle.js +36 -0
- package/dist/package/node/components/DockShell/dockviewRegistry.js +1 -0
- package/dist/package/node/components/DockShell/edgeDrawer.js +1144 -0
- package/dist/package/node/components/DockShell/edgePinStore.js +37 -0
- package/dist/package/node/components/DockShell/extension-editor-bridge.js +100 -0
- package/dist/package/node/components/DockShell/extension-runtime-selection.js +6 -0
- package/dist/package/node/components/DockShell/extensionRuntime.js +84 -0
- package/dist/package/node/components/DockShell/footer-panel-visibility.js +43 -0
- package/dist/package/node/components/DockShell/footer-panels.js +7 -0
- package/dist/package/node/components/DockShell/panelRegistry.js +126 -0
- package/dist/package/node/components/DockShell/panelRenderers.js +25 -0
- package/dist/package/node/components/DockShell/panelTabCommands.js +133 -0
- package/dist/package/node/components/DockShell/panelWindowing.js +42 -0
- package/dist/package/node/components/DockShell/regions.js +1 -0
- package/dist/package/node/components/DockShell/resolveRegion.js +1 -0
- package/dist/package/node/components/DockShell/sanitizeDockLayout.js +46 -0
- package/dist/package/node/components/DockShell/sideEdgeMove.js +1 -0
- package/dist/package/node/components/DockShell/studioTabMenuProvider.js +39 -0
- package/dist/package/node/components/DockShell/tabContextMenu.js +68 -0
- package/dist/package/node/components/DockShell/ueDrag/controller.js +785 -0
- package/dist/package/node/components/DockShell/ueDrag/geometry.js +217 -0
- package/dist/package/node/components/DockShell/ueDrag/overlay.js +206 -0
- package/dist/package/node/components/DockShell/useAuxBarWidth.js +13 -0
- package/dist/package/node/components/Drawer/DrawerHostView.js +93 -0
- package/dist/package/node/components/Drawer/DrawerLauncher.js +22 -0
- package/dist/package/node/components/Drawer/useDrawerStore.js +80 -0
- package/dist/package/node/components/ErrorBoundary.js +131 -0
- package/dist/package/node/components/ExtensionHost/ExtensionIframeHost.js +179 -0
- package/dist/package/node/components/ExtensionHost/NativeExtensionHost.js +152 -0
- package/dist/package/node/components/Feedback/FeedbackPanel.js +118 -0
- package/dist/package/node/components/Feedback/PassiveFeedback.js +218 -0
- package/dist/package/node/components/Feedback/collect.js +80 -0
- package/dist/package/node/components/Feedback/store.js +174 -0
- package/dist/package/node/components/LangSwitcher/LangSwitcher.js +44 -0
- package/dist/package/node/components/MainArea/ConsolePanel.js +16 -0
- package/dist/package/node/components/MainArea/MainArea.js +20 -0
- package/dist/package/node/components/MainArea/StandaloneExtensionIframe.js +155 -0
- package/dist/package/node/components/MainArea/SurfacePanels.js +27 -0
- package/dist/package/node/components/MainArea/TelemetryViewer.js +116 -0
- package/dist/package/node/components/MenuBar/MenuBar.js +286 -0
- package/dist/package/node/components/MenuBar/index.js +1 -0
- package/dist/package/node/components/MenuBar/menubar-open-state.js +11 -0
- package/dist/package/node/components/MenuBar/menubar-surface.js +201 -0
- package/dist/package/node/components/ModelPicker/index.js +1 -0
- package/dist/package/node/components/ModelPicker/useModelCatalog.js +100 -0
- package/dist/package/node/components/Onboarding/ConnectModelPrompt.js +40 -0
- package/dist/package/node/components/Onboarding/OnboardingController.js +549 -0
- package/dist/package/node/components/Onboarding/connect-selection.js +18 -0
- package/dist/package/node/components/Onboarding/home-transition.js +20 -0
- package/dist/package/node/components/Onboarding/index.js +3 -0
- package/dist/package/node/components/Onboarding/prepareTourShell.js +11 -0
- package/dist/package/node/components/Onboarding/project-name.js +29 -0
- package/dist/package/node/components/Onboarding/types.js +77 -0
- package/dist/package/node/components/PageTabs/PageTabStrip.js +214 -0
- package/dist/package/node/components/PageTabs/openablePageTypes.js +13 -0
- package/dist/package/node/components/PanelShell/PanelShell.js +459 -0
- package/dist/package/node/components/Resize/ResizeHandle.js +1 -0
- package/dist/package/node/components/SceneBackground/SceneBackground.js +5 -0
- package/dist/package/node/components/SchemaForm/SchemaForm.js +86 -0
- package/dist/package/node/components/SchemaForm/schema-form-utils.js +51 -0
- package/dist/package/node/components/SettingsPrimitives.js +145 -0
- package/dist/package/node/components/Sidebar/BusHealthLamp.js +72 -0
- package/dist/package/node/components/Sidebar/FilesPanel.js +234 -0
- package/dist/package/node/components/Sidebar/Sidebar.js +8 -0
- package/dist/package/node/components/Sidebar/sidebar-types.js +1 -0
- package/dist/package/node/components/SlotDebugOverlay/SlotDebugOverlay.js +1 -0
- package/dist/package/node/components/SlotDebugOverlay/hashHue.js +1 -0
- package/dist/package/node/components/SlotDebugOverlay/index.js +1 -0
- package/dist/package/node/components/SlotDebugOverlay/isSlotDebugEnabled.js +1 -0
- package/dist/package/node/components/StatusBar/FatalBanner.js +52 -0
- package/dist/package/node/components/StatusBar/InfoPanel.js +128 -0
- package/dist/package/node/components/StatusBar/StatusChip.js +13 -0
- package/dist/package/node/components/StatusBar/StripHostView.js +91 -0
- package/dist/package/node/components/StatusBar/StripPopover.js +15 -0
- package/dist/package/node/components/StatusBar/feeds/PulseFeeds.js +88 -0
- package/dist/package/node/components/StatusBar/footer/CheckpointsDrawer.js +77 -0
- package/dist/package/node/components/StatusBar/footer/DiagnosticsPopover.js +108 -0
- package/dist/package/node/components/StatusBar/footer/EventsDrawer.js +25 -0
- package/dist/package/node/components/StatusBar/footer/ForgeaxBuildPopover.js +62 -0
- package/dist/package/node/components/StatusBar/healthBridge.js +245 -0
- package/dist/package/node/components/StatusBar/healthStore.js +129 -0
- package/dist/package/node/components/StatusBar/useStatusItem.js +35 -0
- package/dist/package/node/components/Surfaces/SurfaceKeepAliveLayer.js +218 -0
- package/dist/package/node/components/Surfaces/SurfaceOverlay.js +144 -0
- package/dist/package/node/components/TopBar/AndroidPackageDialog.js +115 -0
- package/dist/package/node/components/TopBar/FsBrowser.js +93 -0
- package/dist/package/node/components/TopBar/GameSwitcher.js +157 -0
- package/dist/package/node/components/TopBar/IosPackageDialog.js +115 -0
- package/dist/package/node/components/TopBar/ProjectSwitcher.js +41 -0
- package/dist/package/node/components/TopBar/PublishOnboarding.js +144 -0
- package/dist/package/node/components/TopBar/SessionSwitcher.js +124 -0
- package/dist/package/node/components/TopBar/TopBar.js +606 -0
- package/dist/package/node/components/TopBar/publish-options.js +28 -0
- package/dist/package/node/components/TourOverlay/TourOverlay.js +233 -0
- package/dist/package/node/components/TourOverlay/index.js +1 -0
- package/dist/package/node/components/ownership.js +7 -0
- package/dist/package/node/components/ui/SearchableMenu.js +40 -0
- package/dist/package/node/components/ui/alert-dialog.js +38 -0
- package/dist/package/node/components/ui/button.js +33 -0
- package/dist/package/node/components/ui/checkbox.js +8 -0
- package/dist/package/node/components/ui/command.js +20 -0
- package/dist/package/node/components/ui/dialog.js +34 -0
- package/dist/package/node/components/ui/dropdown-menu.js +30 -0
- package/dist/package/node/components/ui/input.js +8 -0
- package/dist/package/node/components/ui/label.js +7 -0
- package/dist/package/node/components/ui/popover.js +10 -0
- package/dist/package/node/components/ui/select.js +31 -0
- package/dist/package/node/components/ui/tabs.js +12 -0
- package/dist/package/node/components/ui/textarea.js +8 -0
- package/dist/package/node/components/ui/tooltip.js +10 -0
- package/dist/package/node/core/app-shell/catalog-page-extensions.js +234 -0
- package/dist/package/node/core/app-shell/derive-panel-renderers.js +17 -0
- package/dist/package/node/core/app-shell/host.js +188 -0
- package/dist/package/node/core/app-shell/index.js +8 -0
- package/dist/package/node/core/app-shell/logger.js +6 -0
- package/dist/package/node/core/app-shell/ownership.js +7 -0
- package/dist/package/node/core/app-shell/react/HostProvider.js +35 -0
- package/dist/package/node/core/app-shell/surface-extension.js +33 -0
- package/dist/package/node/core/app-shell/types.js +1 -0
- package/dist/package/node/core/contextual-keybindings.js +198 -0
- package/dist/package/node/core/extension-foundation/bus.js +3 -0
- package/dist/package/node/core/extension-foundation/capabilities.js +3 -0
- package/dist/package/node/core/extension-foundation/commands.js +3 -0
- package/dist/package/node/core/extension-foundation/context-keys.js +3 -0
- package/dist/package/node/core/extension-foundation/contribution-registry.js +3 -0
- package/dist/package/node/core/extension-foundation/errors.js +3 -0
- package/dist/package/node/core/extension-foundation/index.js +9 -0
- package/dist/package/node/core/extension-foundation/loader.js +3 -0
- package/dist/package/node/core/extension-foundation/storage.js +3 -0
- package/dist/package/node/core/extension-foundation/types.js +1 -0
- package/dist/package/node/core/extensions/builtin-commands.js +256 -0
- package/dist/package/node/core/extensions/builtin-menus.js +252 -0
- package/dist/package/node/core/extensions/chrome-drawer.js +45 -0
- package/dist/package/node/core/extensions/chrome-statusbar.js +26 -0
- package/dist/package/node/core/extensions/detached-agents-browser.js +9 -0
- package/dist/package/node/core/extensions/detached-files-browser.js +6 -0
- package/dist/package/node/core/extensions/editor-commands.js +182 -0
- package/dist/package/node/core/extensions/foundation-bus.js +3 -0
- package/dist/package/node/core/extensions/foundation-commands.js +6 -0
- package/dist/package/node/core/extensions/foundation-storage.js +3 -0
- package/dist/package/node/core/extensions/host-commands.js +52 -0
- package/dist/package/node/core/extensions/observability.js +18 -0
- package/dist/package/node/core/extensions/panels-chat.js +41 -0
- package/dist/package/node/core/extensions/panels-editor.js +26 -0
- package/dist/package/node/core/extensions/panels-viewport.js +20 -0
- package/dist/package/node/core/extensions/session-client.js +42 -0
- package/dist/package/node/core/extensions/slots-corner-agent-picker.js +6 -0
- package/dist/package/node/core/extensions/slots-main-area-body.js +6 -0
- package/dist/package/node/core/extensions/slots-sidebar-agents.js +6 -0
- package/dist/package/node/core/extensions/studio-domain-clients.js +15 -0
- package/dist/package/node/core/extensions/surfaces-scene-editor.js +6 -0
- package/dist/package/node/core/extensions/trajectory.js +50 -0
- package/dist/package/node/core/page-navigation.js +1 -0
- package/dist/package/node/core/page-platform/activity.js +46 -0
- package/dist/package/node/core/page-platform/dockview-layout.js +63 -0
- package/dist/package/node/core/page-platform/index.js +8 -0
- package/dist/package/node/core/page-platform/layout-store.js +54 -0
- package/dist/package/node/core/page-platform/page-dirty-probe.js +4 -0
- package/dist/package/node/core/page-platform/registry.js +194 -0
- package/dist/package/node/core/page-platform/resource-editor.js +74 -0
- package/dist/package/node/core/page-platform/session.js +327 -0
- package/dist/package/node/core/page-platform/types.js +10 -0
- package/dist/package/node/core/panels/context-expression.js +1 -0
- package/dist/package/node/core/panels/drawer.js +1 -0
- package/dist/package/node/core/panels/index.js +7 -0
- package/dist/package/node/core/panels/panel-action-registry.js +62 -0
- package/dist/package/node/core/panels/panel-control-registry.js +54 -0
- package/dist/package/node/core/panels/resolve-panel-action-state.js +9 -0
- package/dist/package/node/core/panels/strip.js +1 -0
- package/dist/package/node/core/panels/types.js +1 -0
- package/dist/package/node/i18n/index.js +207 -0
- package/dist/package/node/i18n/locales/en.json +1959 -0
- package/dist/package/node/i18n/locales/zh.json +1959 -0
- package/dist/package/node/index.js +2 -0
- package/dist/package/node/lib/a11y-summary.js +66 -0
- package/dist/package/node/lib/action-dom-discovery.js +84 -0
- package/dist/package/node/lib/action-registry.js +210 -0
- package/dist/package/node/lib/aegis.js +230 -0
- package/dist/package/node/lib/agent-catalog-url.js +24 -0
- package/dist/package/node/lib/agent-cli-provider.js +81 -0
- package/dist/package/node/lib/ai-intents.js +52 -0
- package/dist/package/node/lib/broadcast-stream.js +163 -0
- package/dist/package/node/lib/browser-prefs-sync.js +151 -0
- package/dist/package/node/lib/builtin-actions.js +558 -0
- package/dist/package/node/lib/bus.js +71 -0
- package/dist/package/node/lib/checkpoint-api.js +41 -0
- package/dist/package/node/lib/cli-providers.js +61 -0
- package/dist/package/node/lib/command-palette-store.js +22 -0
- package/dist/package/node/lib/composer-bridge.js +448 -0
- package/dist/package/node/lib/dashboard-api.js +125 -0
- package/dist/package/node/lib/deep-link-bus.js +35 -0
- package/dist/package/node/lib/dialog.js +103 -0
- package/dist/package/node/lib/editor-facts-bus.js +25 -0
- package/dist/package/node/lib/extension-api.js +90 -0
- package/dist/package/node/lib/file-activity-stream.js +123 -0
- package/dist/package/node/lib/file-family.js +25 -0
- package/dist/package/node/lib/game-templates.js +15 -0
- package/dist/package/node/lib/global-shortcuts.js +551 -0
- package/dist/package/node/lib/logSink.js +128 -0
- package/dist/package/node/lib/lucide-icon.js +20 -0
- package/dist/package/node/lib/menu-registry.js +197 -0
- package/dist/package/node/lib/model-config.js +72 -0
- package/dist/package/node/lib/model-prefs.js +53 -0
- package/dist/package/node/lib/model-route/index.js +175 -0
- package/dist/package/node/lib/narrative-copilot.js +105 -0
- package/dist/package/node/lib/native-menu-bridge.js +151 -0
- package/dist/package/node/lib/page-tab-icons.js +64 -0
- package/dist/package/node/lib/panel-tab-icons.js +49 -0
- package/dist/package/node/lib/passive-feedback.js +171 -0
- package/dist/package/node/lib/perception-stream.js +42 -0
- package/dist/package/node/lib/platform/index.js +13 -0
- package/dist/package/node/lib/platform/runtime.js +42 -0
- package/dist/package/node/lib/platform/shell-adapter.js +74 -0
- package/dist/package/node/lib/platform/surface-windowing.js +16 -0
- package/dist/package/node/lib/platform/surface.js +27 -0
- package/dist/package/node/lib/platform/use-surface-windowing.js +6 -0
- package/dist/package/node/lib/platform/window-manager.js +82 -0
- package/dist/package/node/lib/project-context.js +42 -0
- package/dist/package/node/lib/project.js +8 -0
- package/dist/package/node/lib/recent-games.js +50 -0
- package/dist/package/node/lib/repair-builtin-menus.js +18 -0
- package/dist/package/node/lib/reply-language.js +11 -0
- package/dist/package/node/lib/resilient-polling.js +16 -0
- package/dist/package/node/lib/session-time.js +40 -0
- package/dist/package/node/lib/shell-live-data.js +66 -0
- package/dist/package/node/lib/sse.js +42 -0
- package/dist/package/node/lib/storageKeys.js +89 -0
- package/dist/package/node/lib/surface-store.js +62 -0
- package/dist/package/node/lib/surface.js +225 -0
- package/dist/package/node/lib/surfaceAnchors.js +76 -0
- package/dist/package/node/lib/surfaceKeepAliveLayout.js +12 -0
- package/dist/package/node/lib/telemetry-test-prelude.js +14 -0
- package/dist/package/node/lib/text-edit-actions.js +184 -0
- package/dist/package/node/lib/trace.js +273 -0
- package/dist/package/node/lib/trustedOrigins.js +36 -0
- package/dist/package/node/lib/ui-action-highlight.js +93 -0
- package/dist/package/node/lib/ui-bridge.js +224 -0
- package/dist/package/node/lib/ui-screenshot.js +155 -0
- package/dist/package/node/lib/ui-trajectory.js +99 -0
- package/dist/package/node/lib/use-bus-snapshot.js +13 -0
- package/dist/package/node/lib/use-extension-manifest.js +67 -0
- package/dist/package/node/lib/useConfirmToast.js +120 -0
- package/dist/package/node/lib/utils.js +5 -0
- package/dist/package/node/lib/vag-action-bridge.js +130 -0
- package/dist/package/node/main.js +157 -0
- package/dist/package/node/store-parts/domain-clients.js +17 -0
- package/dist/package/node/store-parts/observability.js +35 -0
- package/dist/package/node/store-parts/persistence.js +245 -0
- package/dist/package/node/store-parts/session-client.js +17 -0
- package/dist/package/node/store-parts/session-pick.js +21 -0
- package/dist/package/node/store-parts/shell.js +37 -0
- package/dist/package/node/store.js +890 -0
- package/dist/package/node/styles/foundation.tokens.json +2755 -0
- package/dist/package/node/styles/semantic.tokens.json +1524 -0
- package/dist/package/packages/design/styles/fx-bridge.css +25 -0
- package/dist/package/packages/design/styles/primitive.css +199 -0
- package/dist/package/packages/design/styles/semantic.css +262 -0
- package/dist/package/packages/design/theme.d.ts +15 -0
- package/dist/package/packages/design/theme.js +31 -0
- package/dist/package/packages/design/tokens.css +14 -0
- package/package.json +145 -0
|
@@ -0,0 +1,1144 @@
|
|
|
1
|
+
import { OWNED_INTERACTION_SURFACE_SELECTOR, createCoalescedFrameTaskLifecycle, createReplaceableObservationSetLifecycle, isDismissExemptInteractionTarget, installActivePanelObservation, installBoundedFrameRetryLifecycle, installCaptureInteractionObservation, installCustomEventObservation, installDragPresenceLifecycle, installLayoutFromJsonObservation, installOutsideDismissLifecycle, installPanelMembershipObservation, installPointerDragSession, installViewportResizeObservation, installWillDropObservation, } from '@forgeax/app-shell/react';
|
|
2
|
+
import { installDockLayoutObservation } from '@forgeax/app-shell/dock';
|
|
3
|
+
import { FOOTER_PANEL_ID_LIST } from './footer-panels';
|
|
4
|
+
import { isFooterPanelUserVisible, registerFooterPanelEnsure } from './footer-panel-visibility';
|
|
5
|
+
import { clearEdgePins, EDGE_PIN_CLASS, pinnedPanelIdIn, setEdgePin } from './edgePinStore';
|
|
6
|
+
const OPEN_CLASS = 'fx-edge-drawer-open';
|
|
7
|
+
export const EDGE_DRAWER_SURFACE_BLOCK_CLASS = 'fx-edge-drawer-visible';
|
|
8
|
+
/** Toggled to (re)start the wipe-in animation — on first open AND on same-strip tab switch. */
|
|
9
|
+
const ANIM_CLASS = 'fx-edge-drawer-animating';
|
|
10
|
+
const EDGE_POSITIONS = ['left', 'right', 'top', 'bottom'];
|
|
11
|
+
const EDGE_DRAWER_DISMISS_EXEMPT_SELECTORS = [
|
|
12
|
+
'.forgeax-ctx-menu-panel',
|
|
13
|
+
'.dv-context-menu',
|
|
14
|
+
];
|
|
15
|
+
/**
|
|
16
|
+
* Publish foreground drawer ownership to portal-mounted surfaces. The live
|
|
17
|
+
* viewport sits outside Dockview's stacking tree, so z-index alone cannot make
|
|
18
|
+
* every relocated edge drawer win hit testing consistently.
|
|
19
|
+
*/
|
|
20
|
+
export function setEdgeDrawerSurfaceInteractionBlocked(root, blocked) {
|
|
21
|
+
root.classList.toggle(EDGE_DRAWER_SURFACE_BLOCK_CLASS, blocked);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Portalled controls do not participate in the drawer element's DOM subtree.
|
|
25
|
+
* They must opt into this interaction-surface contract when they belong to the
|
|
26
|
+
* active drawer; the app context menu keeps its legacy class for the same
|
|
27
|
+
* reason, and dockview's own tab menu (`.dv-context-menu`, mounted into the
|
|
28
|
+
* shell's popover anchor) is the same case one layer down — it acts ON the
|
|
29
|
+
* drawer's tab, so picking an item must not first collapse the drawer.
|
|
30
|
+
*/
|
|
31
|
+
export function isEdgeDrawerDismissExemptTarget(target) {
|
|
32
|
+
return isDismissExemptInteractionTarget(target, EDGE_DRAWER_DISMISS_EXEMPT_SELECTORS);
|
|
33
|
+
}
|
|
34
|
+
/** Slots always registered so root-edge drop / "Move to Side" work even when
|
|
35
|
+
* the default layout keeps panels in the grid (no edgeGroups in JSON). */
|
|
36
|
+
const ENSURED_EDGE_SLOTS = ['left', 'right', 'bottom'];
|
|
37
|
+
/** All edge groups, including EMPTY ones (zero panels). Must walk `api.groups`
|
|
38
|
+
* — collecting via panels misses strips whose last tab was closed, which is
|
|
39
|
+
* exactly when we need to hide them. */
|
|
40
|
+
function edgeGroups(api) {
|
|
41
|
+
return api.groups.filter((group) => group.api.location.type === 'edge');
|
|
42
|
+
}
|
|
43
|
+
/** The edge group whose element contains `el`, if any. */
|
|
44
|
+
function edgeGroupFromElement(api, el) {
|
|
45
|
+
return edgeGroups(api).find((group) => group.element.contains(el));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Install the drawer behaviour for every edge group under `root`. Returns a
|
|
49
|
+
* disposer that removes all listeners and closes any open drawer. Idempotent to
|
|
50
|
+
* call once per DockviewApi (wire it from DockRegion.onReady, push the disposer
|
|
51
|
+
* into onReadyCleanupsRef).
|
|
52
|
+
*/
|
|
53
|
+
export function installEdgeDrawer(api, root) {
|
|
54
|
+
let openGroup = null;
|
|
55
|
+
let preserveNextActiveTabClick = false;
|
|
56
|
+
const syncSurfaceInteractionBlock = () => {
|
|
57
|
+
if (typeof document === 'undefined')
|
|
58
|
+
return;
|
|
59
|
+
setEdgeDrawerSurfaceInteractionBlocked(document.documentElement, openGroup !== null);
|
|
60
|
+
};
|
|
61
|
+
const hasOwnedInteractionSurface = () => typeof document !== 'undefined'
|
|
62
|
+
&& document.querySelector(OWNED_INTERACTION_SURFACE_SELECTOR) !== null;
|
|
63
|
+
// UE: pin is per-TAB, and at most ONE pin per edge group (mutual exclusion).
|
|
64
|
+
// State lives in edgePinStore so DockTab can RENDER the toggle; this module
|
|
65
|
+
// owns the rules and the click that flips it.
|
|
66
|
+
const pinnedPanelId = (group) => pinnedPanelIdIn(group.id);
|
|
67
|
+
const findPanel = (group, id) => group.panels.find((p) => p.id === id);
|
|
68
|
+
const activeIsPinned = (group) => {
|
|
69
|
+
const active = group.activePanel;
|
|
70
|
+
return !!active && pinnedPanelId(group) === active.id;
|
|
71
|
+
};
|
|
72
|
+
const edgeOf = (group) => {
|
|
73
|
+
const cl = group.element.classList;
|
|
74
|
+
if (cl.contains('dv-groupview-header-right'))
|
|
75
|
+
return 'right';
|
|
76
|
+
if (cl.contains('dv-groupview-header-top'))
|
|
77
|
+
return 'top';
|
|
78
|
+
if (cl.contains('dv-groupview-header-bottom'))
|
|
79
|
+
return 'bottom';
|
|
80
|
+
return 'left';
|
|
81
|
+
};
|
|
82
|
+
const isHoriz = (e) => e === 'left' || e === 'right';
|
|
83
|
+
// The var that carries the user-dragged drawer size for a given edge.
|
|
84
|
+
const sizeVar = (e) => isHoriz(e) ? '--fx-edge-drawer-width' : '--fx-edge-drawer-height';
|
|
85
|
+
const readSize = (group, e) => {
|
|
86
|
+
const n = parseFloat(group.element.style.getPropertyValue(sizeVar(e)));
|
|
87
|
+
return Number.isFinite(n) ? n : 300;
|
|
88
|
+
};
|
|
89
|
+
// ── Bottom edge ↔ footer merge ──────────────────────────────────────────
|
|
90
|
+
// The bottom edge strip is RELOCATED (DOM move) into the StatusBar footer
|
|
91
|
+
// host so its tabs share the footer row with the status items. The move keeps
|
|
92
|
+
// the real dockview tab element (native drag in/out, native drop targets),
|
|
93
|
+
// so we only re-anchor the drawer + re-scope our own listeners. Left/right
|
|
94
|
+
// strips stay in place under `root`.
|
|
95
|
+
let bottomStripEl = null;
|
|
96
|
+
// Identity of the group whose strip is currently relocated. fromJSON /
|
|
97
|
+
// rebuilds DISPOSE the bottom group and create a fresh one; the tracked
|
|
98
|
+
// bottomStripEl then points at a detached (empty) strip. Comparing group ids
|
|
99
|
+
// lets relocate tell "same group, already moved" (reuse bottomStripEl) from
|
|
100
|
+
// "new group" (must grab the new group's live strip, never the stale one).
|
|
101
|
+
let bottomGroupId = null;
|
|
102
|
+
const footerHost = () => document.querySelector('[data-fx-dock-bottom-host]');
|
|
103
|
+
// When a fresh bottom group exists but its header isn't built yet, relocate
|
|
104
|
+
// bails; this bounded next-frame nudge re-tries until the strip is ready
|
|
105
|
+
// (reset on any successful relocate) so we never stall on the stale strip.
|
|
106
|
+
let bailFrames = 0;
|
|
107
|
+
const footerRelocationFrame = createCoalescedFrameTaskLifecycle({
|
|
108
|
+
task: () => relocateBottomStrip(),
|
|
109
|
+
});
|
|
110
|
+
const scheduleRelocate = footerRelocationFrame.schedule;
|
|
111
|
+
// The element that actually holds a group's `.dv-tab`s: the relocated footer
|
|
112
|
+
// container for the bottom edge, else the group element itself.
|
|
113
|
+
const tabsRootOf = (group) => edgeOf(group) === 'bottom' && bottomStripEl ? bottomStripEl : group.element;
|
|
114
|
+
// ── Footer-anchored drop overlays for the relocated bottom strip ─────────
|
|
115
|
+
// Each tab's Droptarget paints its receive-highlight / reorder line into
|
|
116
|
+
// `group.model.dropTargetContainer` — by default `rootDropTargetContainer`,
|
|
117
|
+
// anchored to the dockview shell element. Our bottom strip is relocated into
|
|
118
|
+
// the footer (OUTSIDE the shell), so that anchor can't cover it: drags over
|
|
119
|
+
// the footer tabs showed no highlight and reorder had no indicator. dockview
|
|
120
|
+
// supports a PER-GROUP drop-target container (the same pattern it uses for
|
|
121
|
+
// popout windows). Its `DropTargetAnchorContainer` class is internal /
|
|
122
|
+
// unexported, so we hand the bottom group a shim with the exact
|
|
123
|
+
// `{ disabled, model }` shape droptarget.ts consumes, mounting overlays into
|
|
124
|
+
// a viewport-fixed host so `renderAnchoredOverlay` positions them at the
|
|
125
|
+
// footer tabs' real coordinates.
|
|
126
|
+
let dropAnchorHost = null;
|
|
127
|
+
let dropAnchorModel;
|
|
128
|
+
const ensureDropAnchorHost = () => {
|
|
129
|
+
if (dropAnchorHost)
|
|
130
|
+
return dropAnchorHost;
|
|
131
|
+
const host = document.createElement('div');
|
|
132
|
+
host.className = 'fx-edge-drop-anchor-host';
|
|
133
|
+
document.body.appendChild(host);
|
|
134
|
+
dropAnchorHost = host;
|
|
135
|
+
return host;
|
|
136
|
+
};
|
|
137
|
+
// Force-remove any live footer drop overlay. dockview only calls the shim's
|
|
138
|
+
// clear() when the bottom group is the ACTUAL drop target; dragging a bottom
|
|
139
|
+
// tab OUT to another group drops elsewhere, so the bottom tab's droptarget
|
|
140
|
+
// only sees dragleave (which, with an override target, intentionally does NOT
|
|
141
|
+
// clear) — leaving a stale lime rectangle in the footer. Driven by the global
|
|
142
|
+
// dragover watcher below (during the drag) and the dragend/drop backstop.
|
|
143
|
+
const clearDropAnchor = () => {
|
|
144
|
+
if (!dropAnchorModel)
|
|
145
|
+
return;
|
|
146
|
+
try {
|
|
147
|
+
dropAnchorModel.root.parentElement?.removeChild(dropAnchorModel.root);
|
|
148
|
+
}
|
|
149
|
+
catch { /* noop */ }
|
|
150
|
+
dropAnchorModel = undefined;
|
|
151
|
+
};
|
|
152
|
+
const bottomDropContainer = {
|
|
153
|
+
get disabled() { return false; },
|
|
154
|
+
set disabled(_v) { },
|
|
155
|
+
get model() {
|
|
156
|
+
const host = ensureDropAnchorHost();
|
|
157
|
+
return {
|
|
158
|
+
clear: () => {
|
|
159
|
+
dropAnchorModel?.root.parentElement?.removeChild(dropAnchorModel.root);
|
|
160
|
+
dropAnchorModel = undefined;
|
|
161
|
+
},
|
|
162
|
+
exists: () => !!dropAnchorModel,
|
|
163
|
+
getElements: () => {
|
|
164
|
+
if (dropAnchorModel) {
|
|
165
|
+
dropAnchorModel.changed = false;
|
|
166
|
+
return dropAnchorModel;
|
|
167
|
+
}
|
|
168
|
+
const root = document.createElement('div');
|
|
169
|
+
root.className = 'dv-drop-target-container';
|
|
170
|
+
const overlay = document.createElement('div');
|
|
171
|
+
overlay.className = 'dv-drop-target-anchor';
|
|
172
|
+
overlay.style.visibility = 'hidden';
|
|
173
|
+
root.appendChild(overlay);
|
|
174
|
+
host.appendChild(root);
|
|
175
|
+
dropAnchorModel = { root, overlay, changed: true };
|
|
176
|
+
return dropAnchorModel;
|
|
177
|
+
},
|
|
178
|
+
};
|
|
179
|
+
},
|
|
180
|
+
dispose: () => {
|
|
181
|
+
dropAnchorHost?.remove();
|
|
182
|
+
dropAnchorHost = null;
|
|
183
|
+
dropAnchorModel = undefined;
|
|
184
|
+
},
|
|
185
|
+
};
|
|
186
|
+
const attachBottomDropContainer = (group) => {
|
|
187
|
+
try {
|
|
188
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
189
|
+
const model = group.model;
|
|
190
|
+
if (model && model.dropTargetContainer !== bottomDropContainer) {
|
|
191
|
+
model.dropTargetContainer = bottomDropContainer;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
catch { /* dockview internals moved — footer drop keeps working sans overlay */ }
|
|
195
|
+
};
|
|
196
|
+
let drawerPortalHost = null;
|
|
197
|
+
let portaledFlyout = null;
|
|
198
|
+
const FLYOUT_CLASS = 'fx-edge-drawer-flyout';
|
|
199
|
+
const PORTAL_HOST_CLASS = 'fx-edge-drawer-portal-host';
|
|
200
|
+
const DRAWER_VAR_NAMES = [
|
|
201
|
+
'--fx-edge-drawer-width',
|
|
202
|
+
'--fx-edge-drawer-height',
|
|
203
|
+
'--fx-edge-drawer-left',
|
|
204
|
+
'--fx-edge-drawer-right',
|
|
205
|
+
'--fx-edge-drawer-top',
|
|
206
|
+
'--fx-edge-drawer-bottom',
|
|
207
|
+
'--fx-edge-strip-top',
|
|
208
|
+
'--fx-edge-strip-left',
|
|
209
|
+
'--fx-edge-strip-height',
|
|
210
|
+
'--fx-edge-strip-width',
|
|
211
|
+
];
|
|
212
|
+
const EDGE_HEADER_CLASSES = [
|
|
213
|
+
'dv-groupview-header-left',
|
|
214
|
+
'dv-groupview-header-right',
|
|
215
|
+
'dv-groupview-header-top',
|
|
216
|
+
'dv-groupview-header-bottom',
|
|
217
|
+
];
|
|
218
|
+
const ensureDrawerPortalHost = () => {
|
|
219
|
+
if (drawerPortalHost)
|
|
220
|
+
return drawerPortalHost;
|
|
221
|
+
const host = document.createElement('div');
|
|
222
|
+
host.className = PORTAL_HOST_CLASS;
|
|
223
|
+
document.body.appendChild(host);
|
|
224
|
+
drawerPortalHost = host;
|
|
225
|
+
return host;
|
|
226
|
+
};
|
|
227
|
+
const disposeDrawerPortalHost = () => {
|
|
228
|
+
drawerPortalHost?.remove();
|
|
229
|
+
drawerPortalHost = null;
|
|
230
|
+
portaledFlyout = null;
|
|
231
|
+
};
|
|
232
|
+
const contentContainerOf = (group) => group.element.querySelector(':scope > .dv-content-container');
|
|
233
|
+
const copyDrawerVars = (from, to) => {
|
|
234
|
+
for (const name of DRAWER_VAR_NAMES) {
|
|
235
|
+
const val = from.getPropertyValue(name);
|
|
236
|
+
if (val)
|
|
237
|
+
to.style.setProperty(name, val);
|
|
238
|
+
else
|
|
239
|
+
to.style.removeProperty(name);
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
const syncFlyoutDirectionClasses = (group, flyout) => {
|
|
243
|
+
for (const cls of EDGE_HEADER_CLASSES) {
|
|
244
|
+
flyout.classList.toggle(cls, group.element.classList.contains(cls));
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
const restoreDrawerFlyout = (group) => {
|
|
248
|
+
const flyout = portaledFlyout ?? contentContainerOf(group);
|
|
249
|
+
if (flyout) {
|
|
250
|
+
flyout.classList.remove(FLYOUT_CLASS, ANIM_CLASS);
|
|
251
|
+
for (const cls of EDGE_HEADER_CLASSES)
|
|
252
|
+
flyout.classList.remove(cls);
|
|
253
|
+
group.element.appendChild(flyout);
|
|
254
|
+
}
|
|
255
|
+
if (grip.parentElement !== group.element)
|
|
256
|
+
group.element.appendChild(grip);
|
|
257
|
+
portaledFlyout = null;
|
|
258
|
+
if (drawerPortalHost) {
|
|
259
|
+
for (const name of DRAWER_VAR_NAMES)
|
|
260
|
+
drawerPortalHost.style.removeProperty(name);
|
|
261
|
+
drawerPortalHost.replaceChildren();
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
const portalDrawerFlyout = (group) => {
|
|
265
|
+
const flyout = contentContainerOf(group);
|
|
266
|
+
if (!flyout)
|
|
267
|
+
return;
|
|
268
|
+
const host = ensureDrawerPortalHost();
|
|
269
|
+
flyout.classList.add(FLYOUT_CLASS);
|
|
270
|
+
syncFlyoutDirectionClasses(group, flyout);
|
|
271
|
+
copyDrawerVars(group.element.style, host);
|
|
272
|
+
portaledFlyout = flyout;
|
|
273
|
+
host.appendChild(flyout);
|
|
274
|
+
host.appendChild(grip);
|
|
275
|
+
};
|
|
276
|
+
const isInsideOpenDrawer = (target) => {
|
|
277
|
+
if (!target || !openGroup)
|
|
278
|
+
return false;
|
|
279
|
+
if (openGroup.element.contains(target))
|
|
280
|
+
return true;
|
|
281
|
+
// The bottom strip is relocated to the footer, outside the group and flyout.
|
|
282
|
+
if (bottomStripEl?.contains(target))
|
|
283
|
+
return true;
|
|
284
|
+
if (portaledFlyout?.contains(target))
|
|
285
|
+
return true;
|
|
286
|
+
if (grip.contains(target))
|
|
287
|
+
return true;
|
|
288
|
+
return false;
|
|
289
|
+
};
|
|
290
|
+
// Our own resize handle — a thin fixed bar riding the drawer's far edge. Native
|
|
291
|
+
// dockview resize is a splitview sash that would push the grid, which we forbid;
|
|
292
|
+
// dragging this grip only rewrites the CSS size var, so the overlay grows/shrinks
|
|
293
|
+
// without ever touching the collapsed splitview cell. One grip is reused for the
|
|
294
|
+
// single drawer that can be open at a time; while open it is portalled to
|
|
295
|
+
// `.fx-edge-drawer-portal-host` so the flyout paints above the keep-alive viewport.
|
|
296
|
+
const grip = document.createElement('div');
|
|
297
|
+
grip.className = 'fx-edge-drawer-grip';
|
|
298
|
+
// Anchor the fixed flyout to the strip's inner edge. Left/right strips grow
|
|
299
|
+
// horizontally (drawer to the strip's right/left); top/bottom grow vertically.
|
|
300
|
+
const position = (group) => {
|
|
301
|
+
const s = group.element.style;
|
|
302
|
+
// Bottom edge is footer-merged: the strip lives in the StatusBar, so anchor
|
|
303
|
+
// the drawer to span the content column (group.element still reports that
|
|
304
|
+
// width) and rise UP from the footer's top edge — not from the collapsed
|
|
305
|
+
// splitview cell.
|
|
306
|
+
if (edgeOf(group) === 'bottom') {
|
|
307
|
+
const gr = group.element.getBoundingClientRect();
|
|
308
|
+
const footer = footerHost()?.closest('.global-status-bar');
|
|
309
|
+
const footerTop = footer ? footer.getBoundingClientRect().top : window.innerHeight;
|
|
310
|
+
s.setProperty('--fx-edge-strip-left', `${gr.left}px`);
|
|
311
|
+
s.setProperty('--fx-edge-strip-width', `${gr.width}px`);
|
|
312
|
+
s.setProperty('--fx-edge-drawer-bottom', `${window.innerHeight - footerTop}px`);
|
|
313
|
+
if (openGroup === group && drawerPortalHost)
|
|
314
|
+
copyDrawerVars(s, drawerPortalHost);
|
|
315
|
+
positionGrip(group);
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
const r = group.element.getBoundingClientRect();
|
|
319
|
+
s.setProperty('--fx-edge-drawer-left', `${r.right}px`);
|
|
320
|
+
s.setProperty('--fx-edge-drawer-right', `${window.innerWidth - r.left}px`);
|
|
321
|
+
s.setProperty('--fx-edge-drawer-top', `${r.bottom}px`);
|
|
322
|
+
s.setProperty('--fx-edge-drawer-bottom', `${window.innerHeight - r.top}px`);
|
|
323
|
+
s.setProperty('--fx-edge-strip-top', `${r.top}px`);
|
|
324
|
+
s.setProperty('--fx-edge-strip-left', `${r.left}px`);
|
|
325
|
+
s.setProperty('--fx-edge-strip-height', `${r.height}px`);
|
|
326
|
+
s.setProperty('--fx-edge-strip-width', `${r.width}px`);
|
|
327
|
+
if (openGroup === group && drawerPortalHost)
|
|
328
|
+
copyDrawerVars(s, drawerPortalHost);
|
|
329
|
+
positionGrip(group);
|
|
330
|
+
};
|
|
331
|
+
// Park the grip on the drawer's outer edge (the edge away from the strip),
|
|
332
|
+
// spanning the drawer's cross axis. Tracks the live strip rect + size var.
|
|
333
|
+
const positionGrip = (group) => {
|
|
334
|
+
const e = edgeOf(group);
|
|
335
|
+
const r = group.element.getBoundingClientRect();
|
|
336
|
+
const size = readSize(group, e);
|
|
337
|
+
const g = grip.style;
|
|
338
|
+
g.position = 'fixed';
|
|
339
|
+
// Match the drawer's cross-axis inset (DockShell.css --fx-edge-drawer-inset)
|
|
340
|
+
// so the resize grip rides the flyout's edge, not the full strip span.
|
|
341
|
+
const INSET = 6;
|
|
342
|
+
if (e === 'left') {
|
|
343
|
+
g.top = `${r.top + INSET}px`;
|
|
344
|
+
g.height = `${r.height - 2 * INSET}px`;
|
|
345
|
+
g.left = `${r.right + size - 3}px`;
|
|
346
|
+
g.width = '6px';
|
|
347
|
+
g.cursor = 'ew-resize';
|
|
348
|
+
}
|
|
349
|
+
else if (e === 'right') {
|
|
350
|
+
g.top = `${r.top + INSET}px`;
|
|
351
|
+
g.height = `${r.height - 2 * INSET}px`;
|
|
352
|
+
g.left = `${r.left - size - 3}px`;
|
|
353
|
+
g.width = '6px';
|
|
354
|
+
g.cursor = 'ew-resize';
|
|
355
|
+
}
|
|
356
|
+
else if (e === 'top') {
|
|
357
|
+
g.left = `${r.left + INSET}px`;
|
|
358
|
+
g.width = `${r.width - 2 * INSET}px`;
|
|
359
|
+
g.top = `${r.bottom + size - 3}px`;
|
|
360
|
+
g.height = '6px';
|
|
361
|
+
g.cursor = 'ns-resize';
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
g.left = `${r.left + INSET}px`;
|
|
365
|
+
g.width = `${r.width - 2 * INSET}px`;
|
|
366
|
+
g.top = `${r.top - size - 3}px`;
|
|
367
|
+
g.height = '6px';
|
|
368
|
+
g.cursor = 'ns-resize';
|
|
369
|
+
}
|
|
370
|
+
};
|
|
371
|
+
// Restart the wipe-in keyframes. CSS `animation` only fires when the animating
|
|
372
|
+
// class is (re)applied — keeping OPEN_CLASS alone on a same-strip tab switch
|
|
373
|
+
// would leave the drawer static (UE re-animates the panel on every mode click).
|
|
374
|
+
const kickAnim = (group) => {
|
|
375
|
+
const el = group.element;
|
|
376
|
+
el.classList.remove(ANIM_CLASS);
|
|
377
|
+
// Force a style recalc so the next add is treated as a fresh animation start.
|
|
378
|
+
void el.offsetWidth;
|
|
379
|
+
el.classList.add(ANIM_CLASS);
|
|
380
|
+
const flyout = portaledFlyout ?? contentContainerOf(group);
|
|
381
|
+
if (flyout) {
|
|
382
|
+
flyout.classList.remove(ANIM_CLASS);
|
|
383
|
+
void flyout.offsetWidth;
|
|
384
|
+
flyout.classList.add(ANIM_CLASS);
|
|
385
|
+
}
|
|
386
|
+
};
|
|
387
|
+
// The bottom strip is relocated into the footer, OUTSIDE its group element, so
|
|
388
|
+
// the OPEN_CLASS we add to group.element never reaches it. Mirror the open
|
|
389
|
+
// state onto the footer strip so the active-tab highlight (dv-active-tab) only
|
|
390
|
+
// shows WHILE the drawer is open — otherwise the group's always-present active
|
|
391
|
+
// panel would paint a persistent highlight in the footer with no click.
|
|
392
|
+
// The relocated footer strip is OUTSIDE its group element, so the
|
|
393
|
+
// `dv-active-group` focus class dockview toggles never reaches it. Mirror it
|
|
394
|
+
// as `fx-bottom-edge-focused` so the lime focus accent (::before) lights ONLY
|
|
395
|
+
// while the bottom drawer is BOTH open AND focused — not merely open (an open
|
|
396
|
+
// but unfocused drawer keeps its selected tab, minus the accent bar).
|
|
397
|
+
const syncBottomFocusMarker = () => {
|
|
398
|
+
if (!bottomStripEl)
|
|
399
|
+
return;
|
|
400
|
+
const focused = !!openGroup
|
|
401
|
+
&& edgeOf(openGroup) === 'bottom'
|
|
402
|
+
&& openGroup.element.classList.contains('dv-active-group');
|
|
403
|
+
bottomStripEl.classList.toggle('fx-bottom-edge-focused', focused);
|
|
404
|
+
};
|
|
405
|
+
const syncBottomOpenMarker = () => {
|
|
406
|
+
if (!bottomStripEl)
|
|
407
|
+
return;
|
|
408
|
+
const isBottomOpen = !!openGroup && edgeOf(openGroup) === 'bottom';
|
|
409
|
+
bottomStripEl.classList.toggle('fx-bottom-edge-open', isBottomOpen);
|
|
410
|
+
syncBottomFocusMarker();
|
|
411
|
+
};
|
|
412
|
+
// Hard close — dispose / switching to another edge group.
|
|
413
|
+
const forceClose = () => {
|
|
414
|
+
if (openGroup) {
|
|
415
|
+
restoreDrawerFlyout(openGroup);
|
|
416
|
+
openGroup.element.classList.remove(OPEN_CLASS, ANIM_CLASS);
|
|
417
|
+
openGroup = null;
|
|
418
|
+
}
|
|
419
|
+
syncSurfaceInteractionBlock();
|
|
420
|
+
syncBottomOpenMarker();
|
|
421
|
+
};
|
|
422
|
+
const open = (group) => {
|
|
423
|
+
if (openGroup && openGroup !== group) {
|
|
424
|
+
restoreDrawerFlyout(openGroup);
|
|
425
|
+
openGroup.element.classList.remove(OPEN_CLASS, ANIM_CLASS);
|
|
426
|
+
openGroup = null;
|
|
427
|
+
}
|
|
428
|
+
openGroup = group;
|
|
429
|
+
group.element.classList.add(OPEN_CLASS);
|
|
430
|
+
syncSurfaceInteractionBlock();
|
|
431
|
+
position(group);
|
|
432
|
+
portalDrawerFlyout(group);
|
|
433
|
+
kickAnim(group);
|
|
434
|
+
syncBottomOpenMarker();
|
|
435
|
+
};
|
|
436
|
+
// Soft dismiss (outside-click / re-click active tab), UE rules:
|
|
437
|
+
// • active tab is pinned → keep open (no-op)
|
|
438
|
+
// • active is non-pin, group has pin → snap back to the pinned tab
|
|
439
|
+
// • no pin in group → close the drawer
|
|
440
|
+
const close = () => {
|
|
441
|
+
if (!openGroup)
|
|
442
|
+
return;
|
|
443
|
+
const group = openGroup;
|
|
444
|
+
if (activeIsPinned(group))
|
|
445
|
+
return;
|
|
446
|
+
const pinnedId = pinnedPanelId(group);
|
|
447
|
+
if (pinnedId) {
|
|
448
|
+
const pinned = findPanel(group, pinnedId);
|
|
449
|
+
if (pinned) {
|
|
450
|
+
try {
|
|
451
|
+
pinned.api.setActive();
|
|
452
|
+
}
|
|
453
|
+
catch { /* noop */ }
|
|
454
|
+
kickAnim(group);
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
forceClose();
|
|
459
|
+
};
|
|
460
|
+
// Per-TAB pin toggle. Same-group pins are mutually exclusive: pinning B
|
|
461
|
+
// clears A's pin. Pinning activates that tab; opens the drawer only if it
|
|
462
|
+
// was closed — never kickAnim (pin is a state toggle, not an open).
|
|
463
|
+
const togglePin = (group, panel) => {
|
|
464
|
+
const cur = pinnedPanelId(group);
|
|
465
|
+
if (cur === panel.id) {
|
|
466
|
+
setEdgePin(group.id, undefined);
|
|
467
|
+
}
|
|
468
|
+
else {
|
|
469
|
+
setEdgePin(group.id, panel.id);
|
|
470
|
+
try {
|
|
471
|
+
panel.api.setActive();
|
|
472
|
+
}
|
|
473
|
+
catch { /* noop */ }
|
|
474
|
+
if (openGroup !== group)
|
|
475
|
+
open(group);
|
|
476
|
+
}
|
|
477
|
+
};
|
|
478
|
+
// Drag the grip → rewrite the size var (clamped). Pointer capture keeps the drag
|
|
479
|
+
// alive even when the cursor leaves the 6px bar.
|
|
480
|
+
const disposeGripResize = installPointerDragSession({
|
|
481
|
+
element: grip,
|
|
482
|
+
begin: () => {
|
|
483
|
+
if (!openGroup)
|
|
484
|
+
return null;
|
|
485
|
+
const group = openGroup;
|
|
486
|
+
const edge = edgeOf(group);
|
|
487
|
+
return { group, edge, rect: group.element.getBoundingClientRect() };
|
|
488
|
+
},
|
|
489
|
+
move: ({ group, edge, rect: r }, ev) => {
|
|
490
|
+
let size;
|
|
491
|
+
if (edge === 'left')
|
|
492
|
+
size = ev.clientX - r.right;
|
|
493
|
+
else if (edge === 'right')
|
|
494
|
+
size = r.left - ev.clientX;
|
|
495
|
+
else if (edge === 'top')
|
|
496
|
+
size = ev.clientY - r.bottom;
|
|
497
|
+
else
|
|
498
|
+
size = r.top - ev.clientY;
|
|
499
|
+
size = Math.max(160, Math.min(size, 900));
|
|
500
|
+
group.element.style.setProperty(sizeVar(edge), `${size}px`);
|
|
501
|
+
if (drawerPortalHost)
|
|
502
|
+
copyDrawerVars(group.element.style, drawerPortalHost);
|
|
503
|
+
positionGrip(group);
|
|
504
|
+
},
|
|
505
|
+
preventDefault: true,
|
|
506
|
+
stopPropagation: true,
|
|
507
|
+
draggingClassName: 'fx-edge-drawer-grip--dragging',
|
|
508
|
+
});
|
|
509
|
+
// Resolve the edge group owning a strip element (tab / chrome). Handles both
|
|
510
|
+
// the in-place left/right strips (under `root`) and the relocated bottom strip
|
|
511
|
+
// (in the footer, outside `root`).
|
|
512
|
+
const edgeGroupForStripEl = (el) => {
|
|
513
|
+
if (bottomStripEl && bottomStripEl.contains(el))
|
|
514
|
+
return edgeGroupAt('bottom');
|
|
515
|
+
const groupEl = el.closest('.dv-groupview-edge');
|
|
516
|
+
if (groupEl && root.contains(groupEl))
|
|
517
|
+
return edgeGroupFromElement(api, groupEl);
|
|
518
|
+
return undefined;
|
|
519
|
+
};
|
|
520
|
+
// Void / strip chrome (not a tab) calls dockview doSetGroupActive on
|
|
521
|
+
// pointerdown — that lights the last active tab via our UE accent without
|
|
522
|
+
// opening the drawer. Swallow those activations; real tab clicks handle
|
|
523
|
+
// setActive themselves below.
|
|
524
|
+
const onStripChromePointerDown = (e) => {
|
|
525
|
+
// This listener is registered before the generic outside-dismiss listener,
|
|
526
|
+
// preserving the product rule that every dismissible pointer interaction
|
|
527
|
+
// clears a possibly cancelled footer re-click lease before the bottom strip
|
|
528
|
+
// may acquire it again for the current interaction.
|
|
529
|
+
if (openGroup && !activeIsPinned(openGroup))
|
|
530
|
+
preserveNextActiveTabClick = false;
|
|
531
|
+
const target = e.target;
|
|
532
|
+
if (!target)
|
|
533
|
+
return;
|
|
534
|
+
const inBottom = !!bottomStripEl && bottomStripEl.contains(target);
|
|
535
|
+
const groupEl = target.closest('.dv-groupview-edge');
|
|
536
|
+
if (!inBottom && (!groupEl || !root.contains(groupEl)))
|
|
537
|
+
return;
|
|
538
|
+
if (target.closest('.dv-tab'))
|
|
539
|
+
return;
|
|
540
|
+
if (target.closest('.fx-edge-drawer-grip'))
|
|
541
|
+
return;
|
|
542
|
+
if (target.closest('.dv-content-container'))
|
|
543
|
+
return;
|
|
544
|
+
e.stopPropagation();
|
|
545
|
+
};
|
|
546
|
+
const onClickCapture = (e) => {
|
|
547
|
+
const target = e.target;
|
|
548
|
+
const tabEl = target?.closest('.dv-tab');
|
|
549
|
+
if (!tabEl)
|
|
550
|
+
return;
|
|
551
|
+
const group = edgeGroupForStripEl(tabEl);
|
|
552
|
+
if (!group)
|
|
553
|
+
return;
|
|
554
|
+
// Edge-group tab: block dockview's native expand/resize entirely.
|
|
555
|
+
e.preventDefault();
|
|
556
|
+
// If a portalled control is open, let its own outside-click handler see
|
|
557
|
+
// this footer click and dismiss the control. Dockview already bails on a
|
|
558
|
+
// default-prevented tab event, so stopping propagation is unnecessary.
|
|
559
|
+
if (!hasOwnedInteractionSurface())
|
|
560
|
+
e.stopPropagation();
|
|
561
|
+
// Pin toggle (rendered by DockTab in place of close): flip THIS tab's pin.
|
|
562
|
+
const pinBtn = target?.closest(`.${EDGE_PIN_CLASS}`);
|
|
563
|
+
if (pinBtn) {
|
|
564
|
+
const panelId = pinBtn.dataset.fxEdgePinPanel;
|
|
565
|
+
const panel = panelId ? findPanel(group, panelId) : undefined;
|
|
566
|
+
if (panel)
|
|
567
|
+
togglePin(group, panel);
|
|
568
|
+
return;
|
|
569
|
+
}
|
|
570
|
+
// Map the clicked tab → its panel by DOM order within the tabs container.
|
|
571
|
+
const container = tabEl.closest('.dv-tabs-container');
|
|
572
|
+
const tabs = container
|
|
573
|
+
? Array.from(container.querySelectorAll(':scope > .dv-tab'))
|
|
574
|
+
: [];
|
|
575
|
+
const index = tabs.indexOf(tabEl);
|
|
576
|
+
const panel = index >= 0 ? group.panels[index] : undefined;
|
|
577
|
+
// Always setActive — even when this panel is already the group's active
|
|
578
|
+
// panel. Otherwise clicking a strip tab while focus is on another group
|
|
579
|
+
// never promotes this edge group to `dv-active-group`, so the UE focus
|
|
580
|
+
// tab accent never lights up.
|
|
581
|
+
const wasActive = panel != null && group.activePanel === panel;
|
|
582
|
+
if (panel) {
|
|
583
|
+
try {
|
|
584
|
+
panel.api.setActive();
|
|
585
|
+
}
|
|
586
|
+
catch { /* noop */ }
|
|
587
|
+
}
|
|
588
|
+
// Re-click active tab → soft dismiss (pin rules inside close()).
|
|
589
|
+
// Same-strip switch → re-kick wipe-in. Else open the drawer.
|
|
590
|
+
if (openGroup === group && wasActive) {
|
|
591
|
+
const preserveOpen = preserveNextActiveTabClick;
|
|
592
|
+
preserveNextActiveTabClick = false;
|
|
593
|
+
if (preserveOpen)
|
|
594
|
+
kickAnim(group);
|
|
595
|
+
else
|
|
596
|
+
close();
|
|
597
|
+
}
|
|
598
|
+
else if (openGroup === group && !wasActive) {
|
|
599
|
+
preserveNextActiveTabClick = false;
|
|
600
|
+
kickAnim(group);
|
|
601
|
+
}
|
|
602
|
+
else {
|
|
603
|
+
preserveNextActiveTabClick = false;
|
|
604
|
+
open(group);
|
|
605
|
+
}
|
|
606
|
+
};
|
|
607
|
+
const reposition = () => { if (openGroup)
|
|
608
|
+
position(openGroup); };
|
|
609
|
+
// Hide edge strips with zero tabs. Dropping back uses the root's narrow
|
|
610
|
+
// edge overlay (kind:'edge') — see willDropSub — which routes into the
|
|
611
|
+
// registered edge group and re-shows it. No need to flash empty strips
|
|
612
|
+
// during drag.
|
|
613
|
+
const syncEmptyEdges = () => {
|
|
614
|
+
for (const pos of EDGE_POSITIONS) {
|
|
615
|
+
if (!api.getEdgeGroup(pos))
|
|
616
|
+
continue;
|
|
617
|
+
const group = edgeGroups(api).find((g) => {
|
|
618
|
+
const loc = g.api.location;
|
|
619
|
+
return loc.type === 'edge' && loc.position === pos;
|
|
620
|
+
});
|
|
621
|
+
const hasItems = (group?.panels.length ?? 0) > 0;
|
|
622
|
+
try {
|
|
623
|
+
api.setEdgeGroupVisible(pos, hasItems);
|
|
624
|
+
}
|
|
625
|
+
catch { /* noop */ }
|
|
626
|
+
if (group) {
|
|
627
|
+
group.element.classList.toggle('fx-edge-empty', !hasItems);
|
|
628
|
+
}
|
|
629
|
+
if (!hasItems && group) {
|
|
630
|
+
setEdgePin(group.id, undefined);
|
|
631
|
+
if (openGroup === group)
|
|
632
|
+
forceClose();
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
// Keep the footer strip parented + its host empty-state in sync.
|
|
636
|
+
relocateBottomStrip();
|
|
637
|
+
};
|
|
638
|
+
const edgeGroupAt = (pos) => edgeGroups(api).find((g) => {
|
|
639
|
+
const loc = g.api.location;
|
|
640
|
+
return loc.type === 'edge' && loc.position === pos;
|
|
641
|
+
});
|
|
642
|
+
// Move dockview's bottom-edge `.dv-tabs-and-actions-container` out of the
|
|
643
|
+
// (collapsed, hidden) splitview cell and into the StatusBar footer host, so
|
|
644
|
+
// the dock tabs share the footer row with the status items. The relocated
|
|
645
|
+
// element is the REAL dockview tab strip → native drag in/out, native drop
|
|
646
|
+
// targets and our click interceptor all keep working. Idempotent; re-run on
|
|
647
|
+
// every layout change (reset/fromJSON disposes the group → new container).
|
|
648
|
+
const relocateBottomStrip = () => {
|
|
649
|
+
const host = footerHost();
|
|
650
|
+
if (!host)
|
|
651
|
+
return;
|
|
652
|
+
const group = edgeGroupAt('bottom');
|
|
653
|
+
// Resolve THIS group's live strip. Order matters:
|
|
654
|
+
// 1. If the strip is still under the group (not yet relocated) → use it.
|
|
655
|
+
// 2. Else if it's the SAME group we already relocated → reuse bottomStripEl.
|
|
656
|
+
// 3. Else it's a NEW group whose header isn't built yet → BAIL. Never fall
|
|
657
|
+
// back to a previous group's detached strip; that's exactly what made
|
|
658
|
+
// the footer flash correct then blank on the 2nd hydration pass.
|
|
659
|
+
let container = null;
|
|
660
|
+
if (group) {
|
|
661
|
+
container = group.element.querySelector(':scope > .dv-tabs-and-actions-container');
|
|
662
|
+
if (!container && bottomGroupId === group.id)
|
|
663
|
+
container = bottomStripEl;
|
|
664
|
+
if (!container) {
|
|
665
|
+
if (bailFrames++ < 180)
|
|
666
|
+
scheduleRelocate();
|
|
667
|
+
return;
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
else {
|
|
671
|
+
container = bottomStripEl;
|
|
672
|
+
}
|
|
673
|
+
bailFrames = 0;
|
|
674
|
+
// Drop any stale strip a disposed group left behind in the host.
|
|
675
|
+
for (const child of Array.from(host.children)) {
|
|
676
|
+
if (child !== container)
|
|
677
|
+
child.remove();
|
|
678
|
+
}
|
|
679
|
+
if (container && container.parentElement !== host) {
|
|
680
|
+
host.appendChild(container);
|
|
681
|
+
container.classList.add('fx-bottom-edge-strip');
|
|
682
|
+
}
|
|
683
|
+
if (container) {
|
|
684
|
+
// dockview lays the collapsed (height-0) bottom group out in the shell and
|
|
685
|
+
// can stamp inline height/width/display on the tabs container + its tab
|
|
686
|
+
// strip; carried into the footer those inline values win over our CSS and
|
|
687
|
+
// render the relocated strip at 0 size (invisible until a later reflow —
|
|
688
|
+
// the "refresh shows nothing until you click" bug). Strip them so our
|
|
689
|
+
// footer CSS controls sizing, then force a reflow to paint immediately.
|
|
690
|
+
for (const prop of ['height', 'width', 'display']) {
|
|
691
|
+
container.style.removeProperty(prop);
|
|
692
|
+
(container.querySelector(':scope > .dv-tabs-container'))?.style.removeProperty(prop);
|
|
693
|
+
}
|
|
694
|
+
void container.offsetHeight;
|
|
695
|
+
}
|
|
696
|
+
bottomStripEl = container ?? null;
|
|
697
|
+
if (group)
|
|
698
|
+
bottomGroupId = group.id;
|
|
699
|
+
syncBottomOpenMarker();
|
|
700
|
+
// Redirect this group's drop overlays to the footer-anchored host so tab
|
|
701
|
+
// reorder / receive highlights render over the footer, not the shell.
|
|
702
|
+
if (group)
|
|
703
|
+
attachBottomDropContainer(group);
|
|
704
|
+
host.classList.toggle('is-empty', (group?.panels.length ?? 0) === 0);
|
|
705
|
+
};
|
|
706
|
+
// Default editor layout may put panels only in the grid. Still register the
|
|
707
|
+
// left/right/bottom edge slots (hidden while empty) so outermost drop and
|
|
708
|
+
// "Move to Side" have a destination without flashing empty strips.
|
|
709
|
+
const ensureEdgeSlots = () => {
|
|
710
|
+
for (const pos of ENSURED_EDGE_SLOTS) {
|
|
711
|
+
if (api.getEdgeGroup(pos))
|
|
712
|
+
continue;
|
|
713
|
+
try {
|
|
714
|
+
api.addEdgeGroup(pos, {
|
|
715
|
+
id: `edge-${pos}`,
|
|
716
|
+
initialSize: pos === 'bottom' ? 280 : 260,
|
|
717
|
+
// Bottom is footer-merged: its collapsed splitview cell must take ZERO
|
|
718
|
+
// height (the strip is relocated into the StatusBar), otherwise a blank
|
|
719
|
+
// 35px bar would sit above the footer. Left/right keep the strip in the
|
|
720
|
+
// grid so use the theme default collapsed width.
|
|
721
|
+
...(pos === 'bottom' ? { collapsedSize: 0 } : {}),
|
|
722
|
+
collapsed: true,
|
|
723
|
+
});
|
|
724
|
+
api.setEdgeGroupVisible(pos, false);
|
|
725
|
+
}
|
|
726
|
+
catch { /* noop */ }
|
|
727
|
+
}
|
|
728
|
+
forceBottomCollapsedZero();
|
|
729
|
+
forceVerticalShellGapZero();
|
|
730
|
+
};
|
|
731
|
+
// Force the bottom edge's collapsed cell to ZERO height. dockview's
|
|
732
|
+
// `fromJSON` auto-creates edge groups from serialized `edgeGroups` using the
|
|
733
|
+
// theme default collapsedSize (35) and ignores the collapsedSize we pass to
|
|
734
|
+
// addEdgeGroup — so a persisted / default layout leaves a blank 35px band
|
|
735
|
+
// above the footer (the strip itself is relocated into the StatusBar) and
|
|
736
|
+
// parks the bottom drop overlay there. There is no public collapsedSize
|
|
737
|
+
// setter, so reach the ShellManager's EdgeGroupView and shrink it in place.
|
|
738
|
+
// Guarded: if dockview's internals move this becomes a no-op (empty band is
|
|
739
|
+
// cosmetic, never functional). Left/right keep the theme default.
|
|
740
|
+
const forceBottomCollapsedZero = () => {
|
|
741
|
+
try {
|
|
742
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
743
|
+
const shell = api.component?._shellManager;
|
|
744
|
+
const view = shell?._bottomView;
|
|
745
|
+
if (!view || view.collapsedSize === 0)
|
|
746
|
+
return;
|
|
747
|
+
// (collapsedSize, expandedMinimumSize) — keep expanded-min sane (>0).
|
|
748
|
+
view.updateCollapsedSize(0, 50);
|
|
749
|
+
if (view.isCollapsed)
|
|
750
|
+
shell._middleColumn.resizeView('bottom', 0);
|
|
751
|
+
}
|
|
752
|
+
catch { /* dockview internals moved — empty band is cosmetic */ }
|
|
753
|
+
};
|
|
754
|
+
// The theme's 6px gap should separate core grid groups and side edge strips,
|
|
755
|
+
// but the footer-merged bottom group has no visible shell cell: its real tab
|
|
756
|
+
// strip lives in GlobalStatusBar. Dockview applies one margin to the whole
|
|
757
|
+
// vertical shell split, leaving a stray 6px band above the footer. There is no
|
|
758
|
+
// public per-axis/per-edge gap option, so zero only the shell's vertical
|
|
759
|
+
// splitview margin; the core grid and left/right shell gaps stay at 6px.
|
|
760
|
+
const forceVerticalShellGapZero = () => {
|
|
761
|
+
try {
|
|
762
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
763
|
+
const shell = api.component?._shellManager;
|
|
764
|
+
shell?._middleColumn?.updateMargin(0);
|
|
765
|
+
}
|
|
766
|
+
catch { /* dockview internals moved — footer gap is cosmetic */ }
|
|
767
|
+
};
|
|
768
|
+
// ── Global footer-chrome owner ───────────────────────────────────────────
|
|
769
|
+
// The footer panels (Info / Checkpoints / Events) are interface-level chrome
|
|
770
|
+
// that must exist under EVERY layout — every page AND every Page — not be
|
|
771
|
+
// re-seeded into each layout's JSON. This reconciler is that single owner:
|
|
772
|
+
// installEdgeDrawer runs once per DockShell region and persists across every
|
|
773
|
+
// page / Page switch, so after each layout change we ensure any missing
|
|
774
|
+
// footer panel is (re)added into the bottom edge group. Panels are inserted
|
|
775
|
+
// straight into the edge group (position.referenceGroup) so they never detour
|
|
776
|
+
// through the grid.
|
|
777
|
+
//
|
|
778
|
+
// `ensuringFooter` does double duty: reentrancy guard AND a "batch in progress"
|
|
779
|
+
// flag the layout/panel event handlers below check to STAY QUIET. Adding a panel
|
|
780
|
+
// (and the moveTo fallback) each fire onDidAddPanel / onDidActivePanelChange /
|
|
781
|
+
// onDidLayoutChange, so without suppression every insert would re-run relocate
|
|
782
|
+
// and each new panel would momentarily steal the active tab — the "tabs randomly
|
|
783
|
+
// focus" churn seen on page switch. Instead we do all inserts silently, restore
|
|
784
|
+
// the pre-existing active panel so the footer never steals focus from the page
|
|
785
|
+
// content, and let the SINGLE post-ensure reconcile relocate the strip once.
|
|
786
|
+
let ensuringFooter = false;
|
|
787
|
+
const ensureFooterPanels = () => {
|
|
788
|
+
if (ensuringFooter)
|
|
789
|
+
return;
|
|
790
|
+
const bottom = edgeGroupAt('bottom');
|
|
791
|
+
if (!bottom)
|
|
792
|
+
return; // ensureEdgeSlots creates it; a later tick retries
|
|
793
|
+
for (const id of FOOTER_PANEL_ID_LIST) {
|
|
794
|
+
if (isFooterPanelUserVisible(id))
|
|
795
|
+
continue;
|
|
796
|
+
const hidden = api.getPanel(id);
|
|
797
|
+
if (!hidden)
|
|
798
|
+
continue;
|
|
799
|
+
try {
|
|
800
|
+
hidden.api.close();
|
|
801
|
+
}
|
|
802
|
+
catch { /* noop */ }
|
|
803
|
+
}
|
|
804
|
+
// Steady state (footer already complete): do nothing — onDidLayoutChange fires
|
|
805
|
+
// on every resize/drag, so a no-op fast-path keeps those churn-free.
|
|
806
|
+
if (FOOTER_PANEL_ID_LIST.every((id) => !isFooterPanelUserVisible(id) || api.getPanel(id)))
|
|
807
|
+
return;
|
|
808
|
+
ensuringFooter = true;
|
|
809
|
+
// Preserve whatever the page had focused so a freshly-added footer tab (an
|
|
810
|
+
// empty group's first panel is force-active; moveTo also activates) can't grab
|
|
811
|
+
// the active group.
|
|
812
|
+
const prevActive = api.activePanel;
|
|
813
|
+
try {
|
|
814
|
+
FOOTER_PANEL_ID_LIST.forEach((id, index) => {
|
|
815
|
+
// Only ADD a fully-absent footer panel — never relocate one the user has
|
|
816
|
+
// dragged elsewhere (respecting a user who moved Info into the grid).
|
|
817
|
+
if (!isFooterPanelUserVisible(id) || api.getPanel(id))
|
|
818
|
+
return;
|
|
819
|
+
try {
|
|
820
|
+
api.addPanel({
|
|
821
|
+
id,
|
|
822
|
+
component: id,
|
|
823
|
+
title: id,
|
|
824
|
+
position: { referenceGroup: bottom, direction: 'within', index },
|
|
825
|
+
inactive: true,
|
|
826
|
+
});
|
|
827
|
+
// Guarantee it landed in the bottom edge group: referenceGroup targeting
|
|
828
|
+
// can fall back to a fresh grid group on some dockview builds. Moving it
|
|
829
|
+
// in the SAME tick (before paint) keeps the add flash-free. moveTo-into-
|
|
830
|
+
// edge is the proven path (see willDropSub).
|
|
831
|
+
const panel = api.getPanel(id);
|
|
832
|
+
if (panel && panel.group !== bottom) {
|
|
833
|
+
try {
|
|
834
|
+
panel.api.moveTo({ group: bottom, position: 'center' });
|
|
835
|
+
}
|
|
836
|
+
catch { /* noop */ }
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
catch { /* component not registered in this host — skip */ }
|
|
840
|
+
});
|
|
841
|
+
try {
|
|
842
|
+
prevActive?.api.setActive();
|
|
843
|
+
}
|
|
844
|
+
catch { /* prevActive was closed — noop */ }
|
|
845
|
+
}
|
|
846
|
+
finally {
|
|
847
|
+
ensuringFooter = false;
|
|
848
|
+
}
|
|
849
|
+
};
|
|
850
|
+
// Normalize to collapsed on install. In our model an edge group is ALWAYS
|
|
851
|
+
// collapsed (a narrow strip); "expansion" is the fixed drawer overlay, never a
|
|
852
|
+
// splitview resize. A previously-persisted expanded state (collapsed:false)
|
|
853
|
+
// would otherwise restore as a full-width column that can't be closed — the
|
|
854
|
+
// native tab-click collapse is intercepted below. collapse() is a no-op when
|
|
855
|
+
// already collapsed.
|
|
856
|
+
const normalize = () => {
|
|
857
|
+
for (const group of edgeGroups(api)) {
|
|
858
|
+
try {
|
|
859
|
+
group.api.collapse();
|
|
860
|
+
}
|
|
861
|
+
catch { /* noop */ }
|
|
862
|
+
}
|
|
863
|
+
};
|
|
864
|
+
// Safety net: the drawer is a pure overlay and must never become a splitview
|
|
865
|
+
// resize. If anything (a missed click, a future dockview code path) expands an
|
|
866
|
+
// edge group, snap it straight back to collapsed so the grid never shifts.
|
|
867
|
+
const collapseObservation = createReplaceableObservationSetLifecycle({
|
|
868
|
+
subscribe: (group, listener) => group.api.onDidCollapsedChange(listener),
|
|
869
|
+
onObservation: (group, event) => {
|
|
870
|
+
if (!event.isCollapsed) {
|
|
871
|
+
try {
|
|
872
|
+
group.api.collapse();
|
|
873
|
+
}
|
|
874
|
+
catch { /* noop */ }
|
|
875
|
+
}
|
|
876
|
+
},
|
|
877
|
+
});
|
|
878
|
+
const rebindCollapseGuards = () => {
|
|
879
|
+
collapseObservation.replace(edgeGroups(api));
|
|
880
|
+
};
|
|
881
|
+
ensureEdgeSlots();
|
|
882
|
+
ensureFooterPanels();
|
|
883
|
+
const disposeFooterEnsure = registerFooterPanelEnsure(ensureFooterPanels);
|
|
884
|
+
normalize();
|
|
885
|
+
rebindCollapseGuards();
|
|
886
|
+
relocateBottomStrip();
|
|
887
|
+
syncEmptyEdges();
|
|
888
|
+
// The StatusBar footer host may mount well after the dock, and the layout is
|
|
889
|
+
// hydrated by SEVERAL async paths (onReady restore, applyPageScope, and the
|
|
890
|
+
// project-id resolve round-trip to /api/projects). Any of these can
|
|
891
|
+
// create the real bottom group AFTER our first relocate. Keep re-running the
|
|
892
|
+
// (idempotent) relocate until the strip is actually parented into the footer
|
|
893
|
+
// host, with a generous frame cap so a late-mounting footer or late hydration
|
|
894
|
+
// still lands without waiting for a user click. syncEmptyEdges is re-run too
|
|
895
|
+
// so the just-parented strip's empty-state / visibility is correct.
|
|
896
|
+
const disposeFooterRelocationRetry = installBoundedFrameRetryLifecycle({
|
|
897
|
+
attempt: () => {
|
|
898
|
+
relocateBottomStrip();
|
|
899
|
+
const host = footerHost();
|
|
900
|
+
return !!host && !!bottomStripEl && bottomStripEl.parentElement === host;
|
|
901
|
+
},
|
|
902
|
+
onSuccess: syncEmptyEdges,
|
|
903
|
+
maxFrames: 242,
|
|
904
|
+
});
|
|
905
|
+
// Listeners live on `document` (capture): the bottom strip is relocated into
|
|
906
|
+
// the footer, OUTSIDE `root`, so a root-scoped listener would miss its tabs.
|
|
907
|
+
// edgeGroupForStripEl / the bottom-strip containment checks re-gate to our
|
|
908
|
+
// edge groups only.
|
|
909
|
+
const disposeCaptureInteraction = installCaptureInteractionObservation({
|
|
910
|
+
onPointerDown: onStripChromePointerDown,
|
|
911
|
+
onClick: onClickCapture,
|
|
912
|
+
});
|
|
913
|
+
const disposeOutsideDismiss = installOutsideDismissLifecycle({
|
|
914
|
+
isOpen: () => openGroup !== null,
|
|
915
|
+
isPinned: () => !!openGroup && activeIsPinned(openGroup),
|
|
916
|
+
containsTarget: (target) => isInsideOpenDrawer(target),
|
|
917
|
+
isDismissExempt: isEdgeDrawerDismissExemptTarget,
|
|
918
|
+
onContainedPointerDown: (target) => {
|
|
919
|
+
if (bottomStripEl?.contains(target)) {
|
|
920
|
+
// A footer re-click used to dismiss the drawer even when it was only
|
|
921
|
+
// the user's way back from a Content Browser popup. Let the popup
|
|
922
|
+
// consume the interaction first, then preserve this active tab click.
|
|
923
|
+
preserveNextActiveTabClick = hasOwnedInteractionSurface();
|
|
924
|
+
}
|
|
925
|
+
},
|
|
926
|
+
dismiss: () => {
|
|
927
|
+
preserveNextActiveTabClick = false;
|
|
928
|
+
close();
|
|
929
|
+
},
|
|
930
|
+
});
|
|
931
|
+
const disposeViewportResize = installViewportResizeObservation({
|
|
932
|
+
onResize: reposition,
|
|
933
|
+
});
|
|
934
|
+
// Reveal the footer drop zone ONLY during a real HTML5 tab drag. We can't
|
|
935
|
+
// reuse DockRegion's `fx-dock-dragging` flag: that also flips on a plain
|
|
936
|
+
// pointerdown on a tab strip (to catch floating-group pointer drags), so a
|
|
937
|
+
// mere CLICK on a footer tab would flash the drop affordance. `dragstart` /
|
|
938
|
+
// `dragend` only fire for an actual drag, so gate the footer zone on our own
|
|
939
|
+
// `fx-edge-drag` class instead.
|
|
940
|
+
const DRAG_CLASS = 'fx-edge-drag';
|
|
941
|
+
// Keep the "exactly one live drop overlay" invariant. dockview can rely on
|
|
942
|
+
// `onDragLeave` doing NOTHING for an override target because its own anchor
|
|
943
|
+
// container is SHARED by every droptarget in the instance: whoever becomes the
|
|
944
|
+
// target next repositions that single overlay. Our footer shim is a SECOND,
|
|
945
|
+
// group-exclusive container, so nothing ever took the footer's overlay down —
|
|
946
|
+
// dragging a footer tab up into the grid painted the grid's zone while the
|
|
947
|
+
// footer's lime rectangle stayed, two live drop zones at once. Wipe ours as
|
|
948
|
+
// soon as the drag is over anything outside the strip; coming back fires a
|
|
949
|
+
// real `dragenter`, which rebuilds it through `getElements()`.
|
|
950
|
+
const overBottomStrip = (node) => {
|
|
951
|
+
if (!node)
|
|
952
|
+
return false;
|
|
953
|
+
if (bottomStripEl?.contains(node))
|
|
954
|
+
return true;
|
|
955
|
+
// Before the footer relocation lands, the strip is still inside its group.
|
|
956
|
+
const bottom = edgeGroupAt('bottom');
|
|
957
|
+
return !!bottom && bottom.element.contains(node);
|
|
958
|
+
};
|
|
959
|
+
const disposeDragPresence = installDragPresenceLifecycle({
|
|
960
|
+
isStartTarget: (eventTarget) => {
|
|
961
|
+
const target = eventTarget;
|
|
962
|
+
return !!(target?.closest?.('.dv-tab')
|
|
963
|
+
|| target?.closest?.('.dv-tabs-and-actions-container'));
|
|
964
|
+
},
|
|
965
|
+
onActiveChange: (active) => {
|
|
966
|
+
document.documentElement.classList.toggle(DRAG_CLASS, active);
|
|
967
|
+
// Backstop: wipe any footer drop overlay dockview left behind when the drag
|
|
968
|
+
// ended on a group other than the bottom edge.
|
|
969
|
+
if (!active)
|
|
970
|
+
clearDropAnchor();
|
|
971
|
+
},
|
|
972
|
+
onDragOver: (eventTarget) => {
|
|
973
|
+
if (!dropAnchorModel)
|
|
974
|
+
return;
|
|
975
|
+
if (overBottomStrip(eventTarget))
|
|
976
|
+
return;
|
|
977
|
+
clearDropAnchor();
|
|
978
|
+
},
|
|
979
|
+
});
|
|
980
|
+
// Programmatic drawer control (chrome-drawer's `app.drawer.*` commands).
|
|
981
|
+
// Event name kept as a bare literal
|
|
982
|
+
// to avoid an interface→extensions import; chrome-drawer emits the same string.
|
|
983
|
+
const onEdgeDrawerCmd = (e) => {
|
|
984
|
+
const detail = e.detail;
|
|
985
|
+
if (!detail)
|
|
986
|
+
return;
|
|
987
|
+
if (detail.action === 'close') {
|
|
988
|
+
close();
|
|
989
|
+
return;
|
|
990
|
+
}
|
|
991
|
+
const id = detail.id;
|
|
992
|
+
if (!id)
|
|
993
|
+
return;
|
|
994
|
+
const panel = api.getPanel(id);
|
|
995
|
+
if (!panel)
|
|
996
|
+
return;
|
|
997
|
+
const group = edgeGroups(api).find((g) => g.panels.some((p) => p.id === id));
|
|
998
|
+
if (!group)
|
|
999
|
+
return;
|
|
1000
|
+
// toggle: re-hitting the already-open active panel closes it.
|
|
1001
|
+
if (detail.action === 'toggle' && openGroup === group && group.activePanel?.id === id) {
|
|
1002
|
+
close();
|
|
1003
|
+
return;
|
|
1004
|
+
}
|
|
1005
|
+
try {
|
|
1006
|
+
panel.api.setActive();
|
|
1007
|
+
}
|
|
1008
|
+
catch { /* noop */ }
|
|
1009
|
+
open(group);
|
|
1010
|
+
};
|
|
1011
|
+
const disposeCommandObservation = installCustomEventObservation({
|
|
1012
|
+
eventType: 'forgeax:edge-drawer',
|
|
1013
|
+
onEvent: onEdgeDrawerCmd,
|
|
1014
|
+
});
|
|
1015
|
+
const disposeLayoutChangeObservation = installDockLayoutObservation({
|
|
1016
|
+
onDidLayoutChange: (listener) => api.onDidLayoutChange(listener),
|
|
1017
|
+
}, {
|
|
1018
|
+
getCurrentScope: () => null,
|
|
1019
|
+
onCommitted: () => {
|
|
1020
|
+
// Silent while ensureFooterPanels is batching — its addPanel/moveTo calls fire
|
|
1021
|
+
// this; the caller does the single reconcile once the batch completes.
|
|
1022
|
+
if (ensuringFooter)
|
|
1023
|
+
return;
|
|
1024
|
+
reposition();
|
|
1025
|
+
// fromJSON / reset may drop edge slots — re-create empty ones for drop.
|
|
1026
|
+
ensureEdgeSlots();
|
|
1027
|
+
// …then re-assert the global footer chrome for the new layout.
|
|
1028
|
+
ensureFooterPanels();
|
|
1029
|
+
normalize();
|
|
1030
|
+
rebindCollapseGuards();
|
|
1031
|
+
// Reset/fromJSON disposes+recreates the bottom group → re-relocate its strip.
|
|
1032
|
+
relocateBottomStrip();
|
|
1033
|
+
syncEmptyEdges();
|
|
1034
|
+
},
|
|
1035
|
+
});
|
|
1036
|
+
// Panel add/remove is the precise moment an edge can become empty / non-empty;
|
|
1037
|
+
// layout-change alone can miss it depending on dockview's event ordering.
|
|
1038
|
+
const disposePanelMembershipObservation = installPanelMembershipObservation({
|
|
1039
|
+
subscribeAdd: (listener) => api.onDidAddPanel(listener),
|
|
1040
|
+
subscribeRemove: (listener) => api.onDidRemovePanel(listener),
|
|
1041
|
+
onAdd: () => { if (ensuringFooter)
|
|
1042
|
+
return; relocateBottomStrip(); syncEmptyEdges(); },
|
|
1043
|
+
onRemove: () => { syncEmptyEdges(); },
|
|
1044
|
+
});
|
|
1045
|
+
// fromJSON hydration fires ONLY `onDidLayoutFromJSON` — NOT `onDidLayoutChange`
|
|
1046
|
+
// (a gridview AsapEvent that ignores edge groups, which live in the shell
|
|
1047
|
+
// splitview) and NOT per-panel `onDidAddPanel` for edge groups (addEdgeGroup
|
|
1048
|
+
// never forwards it). So a refresh that restores a bottom panel left the strip
|
|
1049
|
+
// un-relocated until an unrelated grid click finally fired onDidLayoutChange —
|
|
1050
|
+
// the "shows only after clicking dockview" bug. Reconcile here explicitly.
|
|
1051
|
+
const disposeLayoutFromJsonObservation = installLayoutFromJsonObservation({
|
|
1052
|
+
subscribe: (listener) => api.onDidLayoutFromJSON(listener),
|
|
1053
|
+
onHydrated: () => {
|
|
1054
|
+
ensureEdgeSlots();
|
|
1055
|
+
ensureFooterPanels();
|
|
1056
|
+
normalize();
|
|
1057
|
+
rebindCollapseGuards();
|
|
1058
|
+
relocateBottomStrip();
|
|
1059
|
+
syncEmptyEdges();
|
|
1060
|
+
},
|
|
1061
|
+
});
|
|
1062
|
+
// Active-panel changes fire during hydration once a restored bottom panel is
|
|
1063
|
+
// made active — a cheap extra beat to catch strips the layout-change path may
|
|
1064
|
+
// have relocated before their tabs were fully populated.
|
|
1065
|
+
const disposeActivePanelObservation = installActivePanelObservation({
|
|
1066
|
+
subscribe: (listener) => api.onDidActivePanelChange(listener),
|
|
1067
|
+
onChange: () => { if (ensuringFooter)
|
|
1068
|
+
return; relocateBottomStrip(); syncBottomFocusMarker(); },
|
|
1069
|
+
});
|
|
1070
|
+
// Root edge drop (the thin outermost overlay) normally orthogonalizes into a
|
|
1071
|
+
// NEW grid group. When we already own an edge-group slot at that position,
|
|
1072
|
+
// steal the drop: preventDefault → show the slot → move the panel into it.
|
|
1073
|
+
// Empty sidebars stay hidden until this lands — no drag-time flash.
|
|
1074
|
+
const disposeWillDropObservation = installWillDropObservation({
|
|
1075
|
+
subscribe: (listener) => api.onWillDrop(listener),
|
|
1076
|
+
onWillDrop: (e) => {
|
|
1077
|
+
if (e.kind !== 'edge')
|
|
1078
|
+
return;
|
|
1079
|
+
const pos = e.position;
|
|
1080
|
+
if (!EDGE_POSITIONS.includes(pos))
|
|
1081
|
+
return;
|
|
1082
|
+
if (!api.getEdgeGroup(pos))
|
|
1083
|
+
return;
|
|
1084
|
+
const edgeGroup = edgeGroupAt(pos);
|
|
1085
|
+
if (!edgeGroup)
|
|
1086
|
+
return;
|
|
1087
|
+
const data = e.getData?.();
|
|
1088
|
+
const panelId = data?.panelId;
|
|
1089
|
+
if (!panelId)
|
|
1090
|
+
return;
|
|
1091
|
+
const panel = api.getPanel(panelId);
|
|
1092
|
+
if (!panel)
|
|
1093
|
+
return;
|
|
1094
|
+
e.preventDefault();
|
|
1095
|
+
try {
|
|
1096
|
+
api.setEdgeGroupVisible(pos, true);
|
|
1097
|
+
}
|
|
1098
|
+
catch { /* noop */ }
|
|
1099
|
+
edgeGroup.element.classList.remove('fx-edge-empty');
|
|
1100
|
+
try {
|
|
1101
|
+
panel.api.moveTo({ group: edgeGroup, position: 'center' });
|
|
1102
|
+
}
|
|
1103
|
+
catch { /* noop */ }
|
|
1104
|
+
try {
|
|
1105
|
+
edgeGroup.api.collapse();
|
|
1106
|
+
}
|
|
1107
|
+
catch { /* noop */ }
|
|
1108
|
+
open(edgeGroup);
|
|
1109
|
+
syncEmptyEdges();
|
|
1110
|
+
},
|
|
1111
|
+
});
|
|
1112
|
+
return () => {
|
|
1113
|
+
disposeFooterEnsure();
|
|
1114
|
+
disposeFooterRelocationRetry();
|
|
1115
|
+
footerRelocationFrame.dispose();
|
|
1116
|
+
disposeGripResize();
|
|
1117
|
+
forceClose();
|
|
1118
|
+
clearEdgePins();
|
|
1119
|
+
// Return the relocated strip to nowhere-in-particular; dockview disposes it
|
|
1120
|
+
// with the group. Just drop our footer marker so a stale strip can't linger.
|
|
1121
|
+
try {
|
|
1122
|
+
bottomStripEl?.remove();
|
|
1123
|
+
}
|
|
1124
|
+
catch { /* noop */ }
|
|
1125
|
+
bottomStripEl = null;
|
|
1126
|
+
bottomGroupId = null;
|
|
1127
|
+
try {
|
|
1128
|
+
bottomDropContainer.dispose();
|
|
1129
|
+
}
|
|
1130
|
+
catch { /* noop */ }
|
|
1131
|
+
disposeDrawerPortalHost();
|
|
1132
|
+
disposeOutsideDismiss();
|
|
1133
|
+
disposeCaptureInteraction();
|
|
1134
|
+
disposeViewportResize();
|
|
1135
|
+
disposeDragPresence();
|
|
1136
|
+
disposeCommandObservation();
|
|
1137
|
+
disposeLayoutChangeObservation();
|
|
1138
|
+
disposePanelMembershipObservation();
|
|
1139
|
+
disposeActivePanelObservation();
|
|
1140
|
+
disposeLayoutFromJsonObservation();
|
|
1141
|
+
disposeWillDropObservation();
|
|
1142
|
+
collapseObservation.dispose();
|
|
1143
|
+
};
|
|
1144
|
+
}
|