Spaces:
Sleeping
Sleeping
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]:size-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, | |
} | |