"use client"; import type { ComponentType } from "react"; import { buildInitials, getCategoryBgColorFromName, getCategoryColorFromName, } from "@/shared/utils/category-colors"; import { getIconComponent } from "@/shared/utils/icons"; import { cn } from "@/shared/utils/ui"; const sizeVariants = { sm: { container: "size-8", icon: "size-4", text: "text-[10px]", }, md: { container: "size-9", icon: "size-5", text: "text-xs", }, lg: { container: "size-12", icon: "size-6", text: "text-sm", }, } as const; export type CategoryIconBadgeSize = keyof typeof sizeVariants; export interface CategoryIconBadgeProps { /** Nome do ícone Remix (ex: "RiShoppingBag3Line") */ icon?: string | null; /** Nome da categoria — define cor e iniciais de fallback */ name: string; /** Tamanho do badge: sm (32px), md (36px), lg (48px) */ size?: CategoryIconBadgeSize; /** Classes adicionais para o container */ className?: string; } export function CategoryIconBadge({ icon, name, size = "md", className, }: CategoryIconBadgeProps) { const IconComponent = icon ? (getIconComponent(icon) as ComponentType<{ className?: string; style?: React.CSSProperties; }>) : null; const initials = buildInitials(name); const color = getCategoryColorFromName(name); const bgColor = getCategoryBgColorFromName(name); const variant = sizeVariants[size]; return (
{IconComponent ? ( ) : ( {initials} )}
); }