Spaces:
Running
Running
| "use client" | |
| import { Button } from "@/components/ui/button" | |
| import { Moon, Sun, Home, ArrowUpDown, Info } from "lucide-react" | |
| import { useTheme } from "next-themes" | |
| import Link from "next/link" | |
| import { usePathname } from "next/navigation" | |
| import { cn } from "@/lib/utils" | |
| export function Navigation() { | |
| const { theme, setTheme } = useTheme() | |
| const pathname = usePathname() | |
| const navItems = [ | |
| { | |
| href: "/", | |
| label: "Home", | |
| icon: Home, | |
| isActive: pathname === "/" | |
| }, | |
| { | |
| href: "/analytics", | |
| label: "Analytics", | |
| icon: ArrowUpDown, | |
| isActive: pathname === "/analytics" | |
| }, | |
| { | |
| href: "/about", | |
| label: "About", | |
| icon: Info, | |
| isActive: pathname === "/about" | |
| } | |
| ] | |
| return ( | |
| <header className="border-b bg-card"> | |
| <div className="container mx-auto px-4 sm:px-6 py-4"> | |
| <div className="flex flex-col sm:flex-row items-start sm:items-center justify-between gap-3"> | |
| {/* Logo and branding */} | |
| <div className="flex items-center gap-4"> | |
| {/* Logo */} | |
| <Link href="/" className="flex-shrink-0"> | |
| <img | |
| src="https://evalevalai.com/assets/img/logo-square.png" | |
| alt="EvalEval Logo" | |
| className="w-10 h-10 rounded-lg hover:scale-105 transition-transform" | |
| /> | |
| </Link> | |
| {/* App title and description */} | |
| <div> | |
| <Link href="/" className="block group"> | |
| <h1 className="text-xl sm:text-2xl font-bold font-heading text-foreground group-hover:text-primary transition-colors"> | |
| AI Eval Dashboard | |
| </h1> | |
| </Link> | |
| <p className="text-sm text-muted-foreground"> | |
| AI evaluation documentation platform | |
| </p> | |
| </div> | |
| </div> | |
| {/* Navigation and actions */} | |
| <div className="flex items-center gap-2 sm:gap-3"> | |
| {/* Navigation links */} | |
| <nav className="flex items-center gap-1"> | |
| {navItems.map((item) => ( | |
| <Link key={item.href} href={item.href}> | |
| <Button | |
| variant={item.isActive ? "default" : "ghost"} | |
| size="sm" | |
| className={cn( | |
| "gap-2", | |
| item.isActive && "bg-primary text-primary-foreground" | |
| )} | |
| > | |
| <item.icon className="h-4 w-4" /> | |
| <span className="hidden sm:inline">{item.label}</span> | |
| </Button> | |
| </Link> | |
| ))} | |
| </nav> | |
| {/* Separator */} | |
| <div className="w-px h-6 bg-border" /> | |
| {/* Theme toggle */} | |
| <Button | |
| variant="ghost" | |
| size="sm" | |
| onClick={() => setTheme(theme === "dark" ? "light" : "dark")} | |
| className="h-9 w-9 p-0" | |
| > | |
| <Sun className="h-4 w-4 rotate-0 scale-100 transition-all dark:-rotate-90 dark:scale-0" /> | |
| <Moon className="absolute h-4 w-4 rotate-90 scale-0 transition-all dark:rotate-0 dark:scale-100" /> | |
| <span className="sr-only">Toggle theme</span> | |
| </Button> | |
| </div> | |
| </div> | |
| </div> | |
| </header> | |
| ) | |
| } | |