diff --git a/packages/ui/src/App.tsx b/packages/ui/src/App.tsx index 8412a882..23ebf108 100644 --- a/packages/ui/src/App.tsx +++ b/packages/ui/src/App.tsx @@ -18,6 +18,7 @@ import { useRouter } from '@/hooks/useRouter'; import { usePushVisibilityBeacon } from '@/hooks/usePushVisibilityBeacon'; import { usePwaManifestSync } from '@/hooks/usePwaManifestSync'; import { usePwaInstallPrompt } from '@/hooks/usePwaInstallPrompt'; +import { useWindowControlsOverlayLayout } from '@/hooks/useWindowControlsOverlayLayout'; import { useWindowTitle } from '@/hooks/useWindowTitle'; import { useConfigStore } from '@/stores/useConfigStore'; import { hasModifier } from '@/lib/utils'; @@ -167,6 +168,7 @@ function SyncAppEffects({ embeddedBackgroundWorkEnabled }: { embeddedBackgroundWorkEnabled: boolean; }) { usePwaManifestSync(); + useWindowControlsOverlayLayout(); useSessionAutoCleanup(embeddedBackgroundWorkEnabled); useQueuedMessageAutoSend(embeddedBackgroundWorkEnabled); useKeyboardShortcuts(); diff --git a/packages/ui/src/components/layout/Header.tsx b/packages/ui/src/components/layout/Header.tsx index 183dc34e..40b16e53 100644 --- a/packages/ui/src/components/layout/Header.tsx +++ b/packages/ui/src/components/layout/Header.tsx @@ -1356,6 +1356,19 @@ export const Header: React.FC = ({ return ''; }, [isDesktopApp, isMacPlatform, macosMajorVersion]); + const webWindowControlsOverlayStyle = React.useMemo(() => { + if (isDesktopApp || isVSCode) { + return undefined; + } + + return { + paddingLeft: 'calc(0.75rem + var(--oc-wco-left-inset, 0px))', + paddingRight: 'calc(0.75rem + var(--oc-wco-right-inset, 0px))', + minHeight: 'max(3rem, var(--oc-wco-titlebar-height, 0px))', + height: 'max(3rem, var(--oc-wco-titlebar-height, 0px))', + }; + }, [isDesktopApp, isVSCode]); + const updateHeaderHeight = React.useCallback(() => { if (typeof document === 'undefined') { return; @@ -1694,6 +1707,7 @@ export const Header: React.FC = ({ desktopPaddingClass, macosHeaderSizeClass )} + style={webWindowControlsOverlayStyle} role="tablist" aria-label="Main navigation" > diff --git a/packages/ui/src/components/layout/RightSidebar.tsx b/packages/ui/src/components/layout/RightSidebar.tsx index 3780c6fe..2ecb4ba5 100644 --- a/packages/ui/src/components/layout/RightSidebar.tsx +++ b/packages/ui/src/components/layout/RightSidebar.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { cn } from '@/lib/utils'; import { useUIStore } from '@/stores/useUIStore'; -import { isDesktopShell, startDesktopWindowDrag } from '@/lib/desktop'; +import { isDesktopShell, isVSCodeRuntime, startDesktopWindowDrag } from '@/lib/desktop'; export const RIGHT_SIDEBAR_CONTENT_WIDTH = 420; const RIGHT_SIDEBAR_MIN_WIDTH = 400; @@ -18,6 +18,7 @@ export const RightSidebar: React.FC = ({ isOpen, children, cl const rightSidebarWidth = useUIStore((state) => state.rightSidebarWidth); const setRightSidebarWidth = useUIStore((state) => state.setRightSidebarWidth); const isDesktopApp = React.useMemo(() => isDesktopShell(), []); + const isVSCode = React.useMemo(() => isVSCodeRuntime(), []); const [isResizing, setIsResizing] = React.useState(false); const startXRef = React.useRef(0); const startWidthRef = React.useRef(rightSidebarWidth || 420); @@ -126,6 +127,17 @@ export const RightSidebar: React.FC = ({ isOpen, children, cl await startDesktopWindowDrag(); }, [isDesktopApp]); + const webWindowControlsOverlayStyle = React.useMemo(() => { + if (isDesktopApp || isVSCode) { + return undefined; + } + + return { + paddingLeft: 'calc(0.75rem + var(--oc-wco-left-inset, 0px))', + paddingRight: 'calc(0.75rem + var(--oc-wco-right-inset, 0px))', + }; + }, [isDesktopApp, isVSCode]); + return (