123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- import * as React from "react"
- import { Slot } from "@radix-ui/react-slot"
- import { ChevronRight, MoreHorizontal } from "lucide-react"
- import { cn } from "@/lib/utils"
- const Breadcrumb = React.forwardRef<
- HTMLElement,
- React.ComponentPropsWithoutRef<"nav"> & {
- separator?: React.ReactNode
- }
- >(({ ...props }, ref) => <nav ref={ref} aria-label="breadcrumb" {...props} />)
- Breadcrumb.displayName = "Breadcrumb"
- const BreadcrumbList = React.forwardRef<
- HTMLOListElement,
- React.ComponentPropsWithoutRef<"ol">
- >(({ className, ...props }, ref) => (
- <ol
- ref={ref}
- className={cn(
- "flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5",
- className
- )}
- {...props}
- />
- ))
- BreadcrumbList.displayName = "BreadcrumbList"
- const BreadcrumbItem = React.forwardRef<
- HTMLLIElement,
- React.ComponentPropsWithoutRef<"li">
- >(({ className, ...props }, ref) => (
- <li
- ref={ref}
- className={cn("inline-flex items-center gap-1.5", className)}
- {...props}
- />
- ))
- BreadcrumbItem.displayName = "BreadcrumbItem"
- const BreadcrumbLink = React.forwardRef<
- HTMLAnchorElement,
- React.ComponentPropsWithoutRef<"a"> & {
- asChild?: boolean
- }
- >(({ asChild, className, ...props }, ref) => {
- const Comp = asChild ? Slot : "a"
- return (
- <Comp
- ref={ref}
- className={cn("transition-colors hover:text-foreground", className)}
- {...props}
- />
- )
- })
- BreadcrumbLink.displayName = "BreadcrumbLink"
- const BreadcrumbPage = React.forwardRef<
- HTMLSpanElement,
- React.ComponentPropsWithoutRef<"span">
- >(({ className, ...props }, ref) => (
- <span
- ref={ref}
- role="link"
- aria-disabled="true"
- aria-current="page"
- className={cn("font-normal text-foreground", className)}
- {...props}
- />
- ))
- BreadcrumbPage.displayName = "BreadcrumbPage"
- const BreadcrumbSeparator = ({
- children,
- className,
- ...props
- }: React.ComponentProps<"li">) => (
- <li
- role="presentation"
- aria-hidden="true"
- className={cn("[&>svg]:w-3.5 [&>svg]:h-3.5", className)}
- {...props}
- >
- {children ?? <ChevronRight />}
- </li>
- )
- BreadcrumbSeparator.displayName = "BreadcrumbSeparator"
- const BreadcrumbEllipsis = ({
- className,
- ...props
- }: React.ComponentProps<"span">) => (
- <span
- role="presentation"
- aria-hidden="true"
- className={cn("flex h-9 w-9 items-center justify-center", className)}
- {...props}
- >
- <MoreHorizontal className="h-4 w-4" />
- <span className="sr-only">More</span>
- </span>
- )
- BreadcrumbEllipsis.displayName = "BreadcrumbElipssis"
- export {
- Breadcrumb,
- BreadcrumbList,
- BreadcrumbItem,
- BreadcrumbLink,
- BreadcrumbPage,
- BreadcrumbSeparator,
- BreadcrumbEllipsis,
- }
|