diff --git a/apps/sim/app/(auth)/auth-layout-client.tsx b/apps/sim/app/(auth)/auth-layout-client.tsx deleted file mode 100644 index 57c83fa152b..00000000000 --- a/apps/sim/app/(auth)/auth-layout-client.tsx +++ /dev/null @@ -1,16 +0,0 @@ -'use client' - -import { usePathname } from 'next/navigation' -import { DesktopTitleBarController } from '@/app/_shell/desktop-title-bar' -import { AuthShell } from '@/app/(auth)/components' - -export default function AuthLayoutClient({ children }: { children: React.ReactNode }) { - const isLogin = usePathname() === '/login' - - return ( - <> - {isLogin && } - {children} - - ) -} diff --git a/apps/sim/app/(auth)/components/auth-shell.tsx b/apps/sim/app/(auth)/components/auth-shell.tsx index d4dd4f06521..36085dc52ad 100644 --- a/apps/sim/app/(auth)/components/auth-shell.tsx +++ b/apps/sim/app/(auth)/components/auth-shell.tsx @@ -1,6 +1,6 @@ import type { ReactNode } from 'react' -import { cn } from '@sim/emcn' import Link from 'next/link' +import { DesktopTitleBarLane } from '@/app/_shell/desktop-title-bar' import { LogoMark, SimWordmark } from '@/app/(landing)/components/navbar/components' interface AuthShellProps { @@ -8,8 +8,6 @@ interface AuthShellProps { children: ReactNode /** Optional element pinned to the bottom of the shell (e.g. the support footer). */ footer?: ReactNode - /** Reserve the native macOS title-bar lane for the desktop login route. */ - reserveDesktopTitleBar?: boolean } /** @@ -21,18 +19,19 @@ interface AuthShellProps { * the canvas/`--text-primary` surface, and renders a logo-only header that reuses * the landing {@link LogoMark} + {@link SimWordmark} at the same nav gutters. The * single content column is centered and capped for a calm single-form layout. + * + * The shell also owns the macOS traffic-light lane, unconditionally — every surface that + * wears it (the `(auth)` routes, the CLI auth handoff, the invite pages) sits outside + * workspace chrome and draws its logo where the lights are. Gating this per route left + * whichever surface was overlooked drawing underneath them, and a route list could not + * cover a dynamic segment like `/invite/[id]` anyway. Off the desktop shell + * `--desktop-title-bar-height` is `0px`, so the reservation and the drag strip both + * collapse to nothing and `.desktop-title-bar-page` is exactly `min-h-screen`. */ -export function AuthShell({ children, footer, reserveDesktopTitleBar = false }: AuthShellProps) { +export function AuthShell({ children, footer }: AuthShellProps) { return ( -
- {reserveDesktopTitleBar && ( -
- )} +
+
}> + Loading…
} + > ) diff --git a/apps/sim/app/(auth)/signup/signup-form.tsx b/apps/sim/app/(auth)/signup/signup-form.tsx index dfd0428f30b..de337cc5c3e 100644 --- a/apps/sim/app/(auth)/signup/signup-form.tsx +++ b/apps/sim/app/(auth)/signup/signup-form.tsx @@ -490,7 +490,9 @@ export default function SignupPage({ emailSignupEnabled, }: SignupFormProps) { return ( - Loading…
}> + Loading…} + > +
+ {/* Header component */} diff --git a/apps/sim/app/(interfaces)/chat/[identifier]/loading.tsx b/apps/sim/app/(interfaces)/chat/[identifier]/loading.tsx index 8f55e4c5552..a964d796cb0 100644 --- a/apps/sim/app/(interfaces)/chat/[identifier]/loading.tsx +++ b/apps/sim/app/(interfaces)/chat/[identifier]/loading.tsx @@ -1,8 +1,10 @@ import { Skeleton } from '@sim/emcn' +import { DesktopTitleBarLane } from '@/app/_shell/desktop-title-bar' export default function ChatLoading() { return ( -
+
+
diff --git a/apps/sim/app/(interfaces)/chat/components/loading-state/loading-state.tsx b/apps/sim/app/(interfaces)/chat/components/loading-state/loading-state.tsx index 178b20aac59..dc4fb3d9000 100644 --- a/apps/sim/app/(interfaces)/chat/components/loading-state/loading-state.tsx +++ b/apps/sim/app/(interfaces)/chat/components/loading-state/loading-state.tsx @@ -1,8 +1,10 @@ import { Skeleton } from '@sim/emcn' +import { DesktopTitleBarLane } from '@/app/_shell/desktop-title-bar' export function ChatLoadingState() { return ( -
+
+
diff --git a/apps/sim/app/(interfaces)/chat/components/voice-interface/voice-interface.tsx b/apps/sim/app/(interfaces)/chat/components/voice-interface/voice-interface.tsx index eaab45992a2..242ea8bdff1 100644 --- a/apps/sim/app/(interfaces)/chat/components/voice-interface/voice-interface.tsx +++ b/apps/sim/app/(interfaces)/chat/components/voice-interface/voice-interface.tsx @@ -14,6 +14,7 @@ import { MAX_CHAT_SESSION_MS, SAMPLE_RATE, } from '@/lib/speech/config' +import { DesktopTitleBarLane } from '@/app/_shell/desktop-title-bar' const ParticlesVisualization = dynamic( () => @@ -524,10 +525,11 @@ export function VoiceInterface({ return (
+
+
diff --git a/apps/sim/app/(landing)/components/logo-shell/logo-shell.tsx b/apps/sim/app/(landing)/components/logo-shell/logo-shell.tsx index 545d2599da0..64c25cbc09d 100644 --- a/apps/sim/app/(landing)/components/logo-shell/logo-shell.tsx +++ b/apps/sim/app/(landing)/components/logo-shell/logo-shell.tsx @@ -1,6 +1,7 @@ import type { ReactNode } from 'react' import { cn } from '@sim/emcn' import Link from 'next/link' +import { DesktopTitleBarLane } from '@/app/_shell/desktop-title-bar' import { LogoMark, SimWordmark } from '@/app/(landing)/components/navbar/components' /** @@ -26,7 +27,8 @@ interface LogoShellProps { export function LogoShell({ children, center = false, footer }: LogoShellProps) { return ( -
+
+