Spaces:
Running
Running
import { useState } from "react"; | |
import { Button } from "./ui/button"; | |
import LogoIcon from "../assets/logo.png"; | |
import { buttonVariants } from "./ui/button"; | |
import { | |
NavigationMenu, | |
NavigationMenuItem, | |
NavigationMenuList, | |
} from "@/components/ui/navigation-menu"; | |
import { | |
Sheet, | |
SheetContent, | |
SheetHeader, | |
SheetTitle, | |
SheetTrigger, | |
} from "@/components/ui/sheet"; | |
import { Menu } from "lucide-react"; | |
import { ModeToggle } from "./mode-toggle"; | |
interface RouteProps { | |
href: string; | |
label: string; | |
} | |
interface FeatureProps { | |
image: string; | |
} | |
const features: FeatureProps[] = [ | |
{ | |
image: LogoIcon, | |
}, | |
]; | |
const routeList: RouteProps[] = [ | |
{ | |
href: "#features", | |
label: "Features", | |
}, | |
{ | |
href: "#upload", | |
label: "Upload", | |
}, | |
]; | |
export const Navbar = () => { | |
const [isOpen, setIsOpen] = useState<boolean>(false); | |
return ( | |
<header className="sticky border-b-[1px] top-0 z-40 w-full bg-white dark:border-b-slate-700 dark:bg-background"> | |
<NavigationMenu className="mx-auto"> | |
<NavigationMenuList className="container h-14 px-4 w-screen flex justify-between "> | |
<NavigationMenuItem className="font-bold flex"> | |
<a | |
href="/" | |
className="ml-2 font-bold text-xl flex" | |
> | |
{features.map(({ image }: FeatureProps) => ( | |
<img | |
src={image} | |
alt="About feature" | |
className="w-[18px] lg:w-[28px] mx-2" | |
/> | |
))}DocVerifyRAG</a> | |
</NavigationMenuItem> | |
{/* mobile */} | |
<span className="flex md:hidden"> | |
<ModeToggle /> | |
<Sheet | |
open={isOpen} | |
onOpenChange={setIsOpen} | |
> | |
<SheetTrigger className="px-2"> | |
<Menu | |
className="flex md:hidden h-5 w-5" | |
onClick={() => setIsOpen(true)} | |
> | |
<span className="sr-only">Menu Icon</span> | |
</Menu> | |
</SheetTrigger> | |
<SheetContent side={"left"}> | |
<SheetHeader> | |
<SheetTitle className="font-bold text-xl"> | |
DocVerifyRAG | |
</SheetTitle> | |
</SheetHeader> | |
<nav className="flex flex-col justify-center items-center gap-2 mt-4"> | |
<a> | |
<Button className="w-full md:w-2/3">Join Waitlist</Button> | |
</a> | |
</nav> | |
</SheetContent> | |
</Sheet> | |
</span> | |
{/* desktop */} | |
<nav className="hidden md:flex gap-2"> | |
{routeList.map((route: RouteProps, i) => ( | |
<a | |
href={route.href} | |
key={i} | |
className={`text-[17px] ${buttonVariants({ | |
variant: "ghost", | |
})}`} | |
> | |
{route.label} | |
</a> | |
))} | |
</nav> | |
<div className="hidden md:flex gap-2"> | |
<a> | |
<Button className="w-full ">Join Waitlist | |
</Button> | |
</a> | |
<ModeToggle /> | |
</div> | |
</NavigationMenuList> | |
</NavigationMenu> | |
</header> | |
); | |
}; | |