import { Avatar, Card, Grid, GridCol, Group, Stack, Text, useMantineColorScheme, } from "@mantine/core"; import { IconCategory, IconCurrencyDollar, IconTrendingUp, IconUsers, } from "@tabler/icons-react"; interface KpiCardProps { title: string; value: string | number; subtitle?: string; icon: React.ReactNode; color: string; backgroundColor: string; } const KpiCard = ({ title, value, subtitle, icon, color, backgroundColor, }: KpiCardProps) => { const { colorScheme } = useMantineColorScheme(); const dark = colorScheme === "dark"; const formatValue = (val: string | number) => { if (typeof val === "number") { if (val >= 1000000) { return `${(val / 1000000).toFixed(1)}M`; } if (val >= 1000) { return `${(val / 1000).toFixed(1)}K`; } return val.toLocaleString(); } return val; }; return ( {title} {formatValue(value)} {subtitle && ( {subtitle} )} {icon} ); }; interface SummaryCardsProps { data?: { umkmAktif: number; umkmTerdaftar: number; omzet: number; kategoriTerbanyak: { count: number; name: string }; }; } export const SummaryCards = ({ data }: SummaryCardsProps) => { const defaultData = { umkmAktif: 45, umkmTerdaftar: 68, omzet: 48000000, kategoriTerbanyak: { count: 34, name: "Kuliner" }, }; const displayData = data || defaultData; const kpiData: KpiCardProps[] = [ { title: "UMKM Aktif", value: displayData.umkmAktif, subtitle: "Beroperasi", icon: , color: "white", backgroundColor: "#1E3A5F", }, { title: "UMKM Terdaftar", value: displayData.umkmTerdaftar, subtitle: "Total registrasi", icon: , color: "white", backgroundColor: "#1E3A5F", }, { title: "Omzet", value: displayData.omzet, subtitle: "Omzet BUMDes per bulan", icon: , color: "white", backgroundColor: "#1E3A5F", }, { title: "UMKM Terbanyak", value: displayData.kategoriTerbanyak.count, subtitle: `Kategori ${displayData.kategoriTerbanyak.name}`, icon: , color: "white", backgroundColor: "#1E3A5F", }, ]; return ( {kpiData.map((kpi, index) => ( ))} ); };