diff --git a/packages/ui/src/components/multirun/MultiRunLauncher.tsx b/packages/ui/src/components/multirun/MultiRunLauncher.tsx index 4e7a9c03..fa5919e3 100644 --- a/packages/ui/src/components/multirun/MultiRunLauncher.tsx +++ b/packages/ui/src/components/multirun/MultiRunLauncher.tsx @@ -22,6 +22,7 @@ import { useConfigStore } from '@/stores/useConfigStore'; import { useDirectoryStore } from '@/stores/useDirectoryStore'; import { useMultiRunStore } from '@/stores/useMultiRunStore'; import { useSessionStore } from '@/stores/useSessionStore'; +import { useUIStore } from '@/stores/useUIStore'; import type { CreateMultiRunParams, MultiRunModelSelection } from '@/types/multirun'; interface MultiRunLauncherProps { @@ -248,6 +249,36 @@ export const MultiRunLauncher: React.FC = ({ const [isSubmitting, setIsSubmitting] = React.useState(false); const currentDirectory = useDirectoryStore((state) => state.currentDirectory ?? null); + const isSidebarOpen = useUIStore((state) => state.isSidebarOpen); + + const [isDesktopApp, setIsDesktopApp] = React.useState(() => { + if (typeof window === 'undefined') { + return false; + } + return typeof (window as typeof window & { opencodeDesktop?: unknown }).opencodeDesktop !== 'undefined'; + }); + + const isMacPlatform = React.useMemo(() => { + if (typeof navigator === 'undefined') { + return false; + } + return /Macintosh|Mac OS X/.test(navigator.userAgent || ''); + }, []); + + React.useEffect(() => { + if (typeof window === 'undefined') { + return; + } + const detected = typeof (window as typeof window & { opencodeDesktop?: unknown }).opencodeDesktop !== 'undefined'; + setIsDesktopApp(detected); + }, []); + + const desktopHeaderPaddingClass = React.useMemo(() => { + if (isDesktopApp && isMacPlatform) { + return isSidebarOpen ? 'pl-0' : 'pl-[8.0rem]'; + } + return 'pl-3'; + }, [isDesktopApp, isMacPlatform, isSidebarOpen]); const [worktreeBaseBranch, setWorktreeBaseBranch] = React.useState('HEAD'); const [availableWorktreeBaseBranches, setAvailableWorktreeBaseBranches] = React.useState([ @@ -392,10 +423,18 @@ export const MultiRunLauncher: React.FC = ({
{/* Header - same height as app header (h-12 = 48px) */}
-
+

New Multi-Run

{onCancel && ( @@ -433,7 +472,7 @@ export const MultiRunLauncher: React.FC = ({ value={name} onChange={(e) => setName(e.target.value)} placeholder="e.g. feature-auth, bugfix-login" - className="typography-body" + className="typography-body max-w-full sm:max-w-xs" required />

@@ -465,19 +504,19 @@ export const MultiRunLauncher: React.FC = ({ - + Default {availableWorktreeBaseBranches .filter((option) => option.group === 'special') .map((option) => ( - + {option.label} ))} @@ -491,7 +530,7 @@ export const MultiRunLauncher: React.FC = ({ {availableWorktreeBaseBranches .filter((option) => option.group === 'local') .map((option) => ( - + {option.label} ))} @@ -507,7 +546,7 @@ export const MultiRunLauncher: React.FC = ({ {availableWorktreeBaseBranches .filter((option) => option.group === 'remote') .map((option) => ( - + {option.label} ))} diff --git a/packages/ui/src/components/ui/select.tsx b/packages/ui/src/components/ui/select.tsx index d5496fd6..ce6a4e14 100644 --- a/packages/ui/src/components/ui/select.tsx +++ b/packages/ui/src/components/ui/select.tsx @@ -55,8 +55,11 @@ function SelectContent({ className, children, position = "popper", + fitContent = false, ...props -}: React.ComponentProps) { +}: React.ComponentProps & { + fitContent?: boolean; +}) { return ( {children}