import { GitBranch, LogIn, User } from "lucide-react"; import { IslandHost } from "@/client/server/IslandHost"; import { ThemeToggleIsland } from "@/client/islands/theme-toggle"; import type { Viewer } from "@/client/server/viewer"; type HeaderProps = { currentView?: string; viewer?: Viewer | null; }; const navLinkClass = (isActive: boolean): string => [ "flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent-500/50 focus-visible:ring-offset-2 focus-visible:ring-offset-canvas", isActive ? "bg-accent-500/10 text-accent-500 dark:text-accent-400" : "text-zinc-500 hover:bg-zinc-100 hover:text-zinc-800 dark:text-zinc-400 dark:hover:bg-zinc-800 dark:hover:text-zinc-200", ].join(" "); const signOutButtonClass = "flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-sm text-zinc-500 hover:text-zinc-800 dark:text-zinc-500 dark:hover:text-zinc-200 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent-500/50"; function AnonymousNav({ currentView }: { currentView?: string }) { // Single primary call-to-action: the impeccable.md "confident restraint" // principle says avoid extra nav noise on the anonymous header. return ( Sign in ); } function SignedInNav({ currentView, viewer }: { currentView?: string; viewer: Viewer }) { return ( <> {viewer.primaryNamespaceSlug ? `@${viewer.primaryNamespaceSlug}` : "Account"} {/* Sign-out is a same-origin POST; the form preserves Lax cookies. */}
> ); } export function Header({ currentView, viewer }: HeaderProps) { return (