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