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