import type { ComponentType } from "react"; import React from "react"; import { Button, ICON_SIZE_MAP } from "@sparkle/components/Button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuTrigger, } from "@sparkle/components/Dropdown"; import { Icon } from "@sparkle/components/Icon"; import { ChevronRightIcon } from "@sparkle/icons/app"; import { cn } from "@sparkle/lib"; const LABEL_TRUNCATE_LENGTH_MIDDLE = 15; const LABEL_TRUNCATE_LENGTH_END = 30; const ELLIPSIS_STRING = "..."; type BaseBreadcrumbItem = { icon?: ComponentType<{ className?: string }>; label: string; }; type LinkBreadcrumbItem = BaseBreadcrumbItem & { href: string; onClick?: never; }; type ButtonBreadcrumbItem = BaseBreadcrumbItem & { href?: never; onClick: () => void; }; type LabelBreadcrumbItem = BaseBreadcrumbItem & { href?: never; onClick?: never; }; export type BreadcrumbItem = | LinkBreadcrumbItem | ButtonBreadcrumbItem | LabelBreadcrumbItem; const isLinkItem = ( item: BreadcrumbItem | { label: string } ): item is LinkBreadcrumbItem => "href" in item && typeof item.href === "string"; const isButtonItem = ( item: BreadcrumbItem | { label: string } ): item is ButtonBreadcrumbItem => "onClick" in item && typeof item.onClick === "function"; interface BreadcrumbItemProps { item: BreadcrumbItem; isLast: boolean; itemsHidden?: BreadcrumbItem[]; size?: "xs" | "sm"; } function BreadcrumbItem({ item, isLast, itemsHidden, size = "sm", }: BreadcrumbItemProps) { if (item.label === ELLIPSIS_STRING) { return (