Spaces:
Runtime error
Runtime error
| 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="logo.png" | |
| 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> | |
| ); | |
| }; | |