/** * Composant carte de statistiques pour le dashboard */ import React from 'react'; import { Card } from 'primereact/card'; import { Badge } from 'primereact/badge'; import { Skeleton } from 'primereact/skeleton'; interface StatsCardProps { title: string; value: number | string; icon: string; color: 'primary' | 'success' | 'info' | 'warning' | 'danger'; loading?: boolean; subtitle?: string; trend?: { value: number; isPositive: boolean; }; } const StatsCard: React.FC = ({ title, value, icon, color, loading = false, subtitle, trend }) => { const getColorClass = (color: string) => { switch (color) { case 'primary': return 'text-blue-500'; case 'success': return 'text-green-500'; case 'info': return 'text-cyan-500'; case 'warning': return 'text-yellow-500'; case 'danger': return 'text-red-500'; default: return 'text-blue-500'; } }; const getBgClass = (color: string) => { switch (color) { case 'primary': return 'bg-blue-100'; case 'success': return 'bg-green-100'; case 'info': return 'bg-cyan-100'; case 'warning': return 'bg-yellow-100'; case 'danger': return 'bg-red-100'; default: return 'bg-blue-100'; } }; if (loading) { return (
); } return (
{title}
{typeof value === 'number' ? value.toLocaleString() : value}
{subtitle && (
{subtitle}
)}
{trend && (
{trend.isPositive ? 'Augmentation' : 'Diminution'} ce mois
)}
); }; export default StatsCard;