| 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, |
| } |
|
|