"use client"
import * as React from "react"
import { ChevronRightIcon } from "lucide-react"
import { cn } from "@/lib/utils"
export type BreadcrumbItem = {
key: string
label: React.ReactNode
icon?: React.ReactNode
href?: string
current?: boolean
currentLabel?: React.AriaAttributes["aria-current"]
onSelect?: () => void
}
export type BreadcrumbsProps = React.ComponentProps<"nav"> & {
items: BreadcrumbItem[]
maxItems?: number
collapseLabel?: React.ReactNode
separator?: React.ReactNode
wrap?: boolean
currentItemLabel?: React.AriaAttributes["aria-current"]
renderLink?: (props: React.ComponentProps<"a"> & { item: BreadcrumbItem; [key: `data-${string}`]: string | boolean | undefined }) => React.ReactNode
}
function collapseBreadcrumbItems(items: BreadcrumbItem[], maxItems: number, collapseLabel: React.ReactNode): BreadcrumbItem[] {
if (items.length <= maxItems || maxItems < 3) return items
const firstItem = items[0]
const trailingCount = Math.max(maxItems - 2, 1)
const trailingItems = items.slice(-trailingCount)
return [
firstItem,
{
key: "__collapsed__",
label: collapseLabel,
},
...trailingItems,
]
}
function Breadcrumbs({
className,
items,
maxItems,
collapseLabel = "…",
separator = ,
wrap = false,
currentItemLabel,
renderLink,
...props
}: BreadcrumbsProps) {
const resolvedItems = React.useMemo(
() => (typeof maxItems === "number" ? collapseBreadcrumbItems(items, maxItems, collapseLabel) : items),
[collapseLabel, items, maxItems]
)
return (
)
}
export { Breadcrumbs }