Add component to project
"use client" import * as React from "react" import Link from "next/link" import { ChevronDown, Slash } from "lucide-react" import { useMediaQuery } from "@/hooks/use-media-query" import { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from "@/components/ui/breadcrumb" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { Button } from "@/components/ui/button" import { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, } from "@/components/ui/drawer" function BreadcrumbDemo() { return ( <Breadcrumb> <BreadcrumbList> <BreadcrumbItem> <BreadcrumbLink href="/">Home</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <DropdownMenu> <DropdownMenuTrigger className="flex items-center gap-1"> <BreadcrumbEllipsis className="h-4 w-4" /> <span className="sr-only">Toggle menu</span> </DropdownMenuTrigger> <DropdownMenuContent align="start"> <DropdownMenuItem>Documentation</DropdownMenuItem> <DropdownMenuItem>Themes</DropdownMenuItem> <DropdownMenuItem>GitHub</DropdownMenuItem> </DropdownMenuContent> </DropdownMenu> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbLink href="/docs/components">Components</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbPage>Breadcrumb</BreadcrumbPage> </BreadcrumbItem> </BreadcrumbList> </Breadcrumb> ) } function BreadcrumbWithCustomSeparator() { return ( <Breadcrumb> <BreadcrumbList> <BreadcrumbItem> <BreadcrumbLink href="/">Home</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator> <Slash /> </BreadcrumbSeparator> <BreadcrumbItem> <BreadcrumbLink href="/components">Components</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator> <Slash /> </BreadcrumbSeparator> <BreadcrumbItem> <BreadcrumbPage>Breadcrumb</BreadcrumbPage> </BreadcrumbItem> </BreadcrumbList> </Breadcrumb> ) } function BreadcrumbWithDropdown() { return ( <Breadcrumb> <BreadcrumbList> <BreadcrumbItem> <BreadcrumbLink href="/">Home</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator> <Slash /> </BreadcrumbSeparator> <BreadcrumbItem> <DropdownMenu> <DropdownMenuTrigger className="flex items-center gap-1"> Components <ChevronDown className="h-4 w-4" /> </DropdownMenuTrigger> <DropdownMenuContent align="start"> <DropdownMenuItem>Documentation</DropdownMenuItem> <DropdownMenuItem>Themes</DropdownMenuItem> <DropdownMenuItem>GitHub</DropdownMenuItem> </DropdownMenuContent> </DropdownMenu> </BreadcrumbItem> <BreadcrumbSeparator> <Slash /> </BreadcrumbSeparator> <BreadcrumbItem> <BreadcrumbPage>Breadcrumb</BreadcrumbPage> </BreadcrumbItem> </BreadcrumbList> </Breadcrumb> ) } function BreadcrumbCollapsed() { return ( <Breadcrumb> <BreadcrumbList> <BreadcrumbItem> <BreadcrumbLink asChild> <Link href="/">Home</Link> </BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbEllipsis /> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbLink asChild> <Link href="/docs/components">Components</Link> </BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbPage>Breadcrumb</BreadcrumbPage> </BreadcrumbItem> </BreadcrumbList> </Breadcrumb> ) } function BreadcrumbWithLink() { return ( <Breadcrumb> <BreadcrumbList> <BreadcrumbItem> <BreadcrumbLink> <Link href="/">Home</Link> </BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbLink> <Link href="/components">Components</Link> </BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> <BreadcrumbItem> <BreadcrumbPage>Breadcrumb</BreadcrumbPage> </BreadcrumbItem> </BreadcrumbList> </Breadcrumb> ) } function BreadcrumbResponsive() { const items = [ { href: "#", label: "Home" }, { href: "#", label: "Documentation" }, { href: "#", label: "Building Your Application" }, { href: "#", label: "Data Fetching" }, { label: "Caching and Revalidating" }, ] const ITEMS_TO_DISPLAY = 3 const [open, setOpen] = React.useState(false) const isDesktop = useMediaQuery("(min-width: 768px)") return ( <Breadcrumb> <BreadcrumbList> <BreadcrumbItem> <BreadcrumbLink href={items[0].href}>{items[0].label}</BreadcrumbLink> </BreadcrumbItem> <BreadcrumbSeparator /> {items.length > ITEMS_TO_DISPLAY ? ( <> <BreadcrumbItem> {isDesktop ? ( <DropdownMenu open={open} onOpenChange={setOpen}> <DropdownMenuTrigger className="flex items-center gap-1" aria-label="Toggle menu" > <BreadcrumbEllipsis className="h-4 w-4" /> </DropdownMenuTrigger> <DropdownMenuContent align="start"> {items.slice(1, -2).map((item, index) => ( <DropdownMenuItem key={index}> <Link href={item.href ? item.href : "#"}> {item.label} </Link> </DropdownMenuItem> ))} </DropdownMenuContent> </DropdownMenu> ) : ( <Drawer open={open} onOpenChange={setOpen}> <DrawerTrigger aria-label="Toggle Menu"> <BreadcrumbEllipsis className="h-4 w-4" /> </DrawerTrigger> <DrawerContent> <DrawerHeader className="text-left"> <DrawerTitle>Navigate to</DrawerTitle> <DrawerDescription> Select a page to navigate to. </DrawerDescription> </DrawerHeader> <div className="grid gap-1 px-4"> {items.slice(1, -2).map((item, index) => ( <Link key={index} href={item.href ? item.href : "#"} className="py-1 text-sm" > {item.label} </Link> ))} </div> <DrawerFooter className="pt-4"> <DrawerClose asChild> <Button variant="outline">Close</Button> </DrawerClose> </DrawerFooter> </DrawerContent> </Drawer> )} </BreadcrumbItem> <BreadcrumbSeparator /> </> ) : null} {items.slice(-ITEMS_TO_DISPLAY + 1).map((item, index) => ( <BreadcrumbItem key={index}> {item.href ? ( <> <BreadcrumbLink asChild className="max-w-20 truncate md:max-w-none" > <Link href={item.href}>{item.label}</Link> </BreadcrumbLink> <BreadcrumbSeparator /> </> ) : ( <BreadcrumbPage className="max-w-20 truncate md:max-w-none"> {item.label} </BreadcrumbPage> )} </BreadcrumbItem> ))} </BreadcrumbList> </Breadcrumb> ) } export default { BreadcrumbDemo, BreadcrumbWithCustomSeparator, BreadcrumbWithDropdown, BreadcrumbCollapsed, BreadcrumbWithLink, BreadcrumbResponsive, }