import { type CSSProperties, memo } from "react"; import { type ProviderDriverKind } from "@t3tools/contracts"; import { PROVIDER_ICON_BY_PROVIDER } from "./providerIconUtils"; import { cn } from "~/lib/utils"; export function providerInstanceInitials(label: string): string { const words = label.replace(/[_-]+/g, " ").split(/\s+/u).filter(Boolean); if (words.length === 0) return ""; if (words.length === 1) return words[0]!.slice(0, 2).toUpperCase(); return words .slice(0, 2) .map((word) => word[0]?.toUpperCase() ?? "") .join(""); } export const ProviderInstanceIcon = memo(function ProviderInstanceIcon(props: { driverKind: ProviderDriverKind; displayName: string; accentColor?: string | undefined; showBadge?: boolean; badgeContent?: "initials" | "none"; className?: string; iconClassName?: string; badgeClassName?: string; statusDotClassName?: string; indicatorBackground?: string; }) { const Icon = PROVIDER_ICON_BY_PROVIDER[props.driverKind] ?? null; const indicatorBackground = props.indicatorBackground ?? "var(--card)"; const accentStyle = props.accentColor ? ({ "--provider-accent": props.accentColor } as CSSProperties) : undefined; const badgeContent = props.badgeContent ?? "initials"; return ( {Icon ? ( ) : ( {providerInstanceInitials(props.displayName)} )} {props.statusDotClassName ? ( ) : null} {props.showBadge ? ( {badgeContent === "initials" ? providerInstanceInitials(props.displayName) : null} ) : null} ); });