"use client"; import React, { memo } from "react"; import TextAnimation from "@/components/text/TextAnimation"; import { cls, shouldUseInvertedText } from "@/lib/utils"; import { useTheme } from "@/providers/themeProvider/ThemeProvider"; import type { LucideIcon } from "lucide-react"; interface Metric { icon: LucideIcon; label: string; value: string; } interface AboutMetricProps { title: string; metrics: Metric[]; useInvertedBackground: "noInvert" | "invertDefault" | "invertCard"; ariaLabel?: string; className?: string; containerClassName?: string; titleClassName?: string; metricsContainerClassName?: string; metricCardClassName?: string; metricIconClassName?: string; metricLabelClassName?: string; metricValueClassName?: string; } const AboutMetric = ({ title, metrics, useInvertedBackground, ariaLabel = "About metrics section", className = "", containerClassName = "", titleClassName = "", metricsContainerClassName = "", metricCardClassName = "", metricIconClassName = "", metricLabelClassName = "", metricValueClassName = "", }: AboutMetricProps) => { const theme = useTheme(); const shouldUseLightText = shouldUseInvertedText(useInvertedBackground, theme.cardStyle); const gridColsMap = { 2: "md:grid-cols-2", 3: "md:grid-cols-3", 4: "md:grid-cols-4", }; const gridCols = gridColsMap[metrics.length as keyof typeof gridColsMap] || "md:grid-cols-4"; return (
{metrics.map((metric, index) => { const Icon = metric.icon; return (

{metric.label}

{metric.value}

); })}
); }; AboutMetric.displayName = "AboutMetric"; export default memo(AboutMetric);