import * as React from "react" import { ChevronRight, MoreHorizontal } from "lucide-react" import { cn } from "../libs/utils" import { Button } from "./button" interface BreadcrumbProps { label: string | React.ReactNode href?: string onClick?: () => void } interface BreadcrumbItemProps { path: BreadcrumbProps[] className?: string maxItems?: number separator?: React.ReactNode } export function Breadcrumbs({ path, maxItems = 3, className, separator }: BreadcrumbItemProps) { const items = path || []; const renderBreadcrumbItem = (item: BreadcrumbProps) => { const shortenedLabel = typeof item.label === "string" && item.label.length > 20 ? item.label.slice(0, 17) + "..." : item.label; if (item.onClick) { return {shortenedLabel}; } else if (item.href) { return {shortenedLabel}; } else { return {shortenedLabel}; } }; if (items.length <= maxItems) { return ( {items.map((item, index) => ( {renderBreadcrumbItem(item)} {index < items.length - 1 && {separator ?? } } ))} ); } const lastThreeItems = items.slice(-(maxItems - 1)); return ( {separator ?? } {lastThreeItems.map((item, index) => ( {renderBreadcrumbItem(item)} {index < lastThreeItems.length - 1 && {separator ?? } } ))} ); } const Breadcrumb = React.forwardRef< HTMLElement, React.ComponentPropsWithoutRef<"nav"> & { separator?: React.ReactNode } >(({ ...props }, ref) =>