import { useState } from "react"; import { Link, NavLink, useLocation } from "react-router"; import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger, } from "~/components/ui/sheet"; import { Button } from "~/components/ui/button"; import { authClient } from "~/lib/auth-client"; import { UserMenu } from "~/components/UserMenu"; import type { RawFlagConfig } from "~/lib/flag-types"; import { HelpCircle, MenuIcon, Settings } from "lucide-react"; const NAV_LINK_CLASS = "relative text-sm font-semibold uppercase tracking-wide text-muted-foreground px-3 py-2 transition-colors " + "after:content-[''] after:absolute after:bottom-0 after:left-3 after:right-3 after:h-[3px] " + "after:scale-x-0 hover:after:scale-x-100 after:transition-transform after:[background:var(--brackt-gradient)]"; function navLinkClass({ isActive }: { isActive: boolean }) { return `${NAV_LINK_CLASS}${isActive ? " !text-emerald-400" : ""}`; } function mobileNavLinkClass({ isActive }: { isActive: boolean }) { return `block px-4 py-2 text-lg font-medium rounded-md transition-colors${isActive ? " text-emerald-400" : " text-muted-foreground"}`; } interface NavbarProps { isAdmin: boolean; currentUser: { id: string; email: string; username: string | null; displayName: string | null; customAvatarUrl: string | null; flagConfig: RawFlagConfig | null; avatarType: string | null; } | null; } export function Navbar({ isAdmin, currentUser }: NavbarProps) { const [open, setOpen] = useState(false); const location = useLocation(); const { data: session } = authClient.useSession(); const signInHref = `/login?redirectTo=${encodeURIComponent(location.pathname)}`; const menuUser = currentUser ?? (session ? { id: session.user.id, email: session.user.email, username: null, displayName: session.user.name ?? null, customAvatarUrl: null, flagConfig: null, avatarType: null, } : null); const authSection = menuUser ? ( ) : ( ); return (
{/* Left: Logo + Nav links */}
Brackt
{/* Desktop Right: Support + Admin icons + Auth */}
{isAdmin && ( )} {authSection}
{/* Mobile: icons + Auth + Hamburger */}
{isAdmin && ( )} {authSection} Menu
); }