import { cn } from "@app/lib/cn"; import { useTranslations } from "next-intl"; import { Button } from "./ui/button"; import { Tooltip, TooltipContent, TooltipTrigger } from "./ui/tooltip"; export type LabelOverflowItem = { color: string; name?: string; }; const labelOverflowBadgeClassName = "inline-flex h-auto shrink-0 items-center gap-1.5 rounded-full border border-input bg-background py-0 pl-1.5 pr-2 text-sm"; export type LabelOverflowBadgeProps = { labels: LabelOverflowItem[]; onClick?: () => void; className?: string; displayOnly?: boolean; }; const MAX_OVERFLOW_COLORS = 3; export function LabelOverflowBadge({ labels, onClick, className, displayOnly = false }: LabelOverflowBadgeProps) { const t = useTranslations(); if (labels.length === 0) { return null; } const displayColors = labels .slice(0, MAX_OVERFLOW_COLORS) .map((label) => label.color); const overflowNames = labels .map((label) => label.name) .filter((name): name is string => Boolean(name)); const tooltipContent = overflowNames.length > 0 ? overflowNames.join(", ") : t("labelOverflowCount", { count: labels.length }); const content = ( <> {displayColors.map((color, index) => ( 0 && "-ml-1" )} style={{ // @ts-expect-error css color "--color": color }} /> ))} {t("labelOverflowCount", { count: labels.length })} ); return ( {displayOnly ? ( {content} ) : ( )} {tooltipContent} ); }