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 (