2026-02-05 15:28:50 +01:00
|
|
|
interface StatCardProps {
|
|
|
|
|
label: string
|
|
|
|
|
value: number
|
2026-02-16 20:39:41 +01:00
|
|
|
total?: number | undefined
|
2026-02-05 15:28:50 +01:00
|
|
|
color: string
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const colorClasses: Record<string, string> = {
|
2026-02-17 20:48:42 +01:00
|
|
|
blue: 'border-status-completed',
|
|
|
|
|
green: 'border-status-alive',
|
|
|
|
|
red: 'border-status-failed',
|
2026-02-05 15:28:50 +01:00
|
|
|
purple: 'border-purple-500',
|
|
|
|
|
amber: 'border-amber-500',
|
2026-02-17 20:48:42 +01:00
|
|
|
gray: 'border-text-tertiary',
|
2026-02-05 15:28:50 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function StatCard({ label, value, total, color }: StatCardProps) {
|
|
|
|
|
return (
|
|
|
|
|
<div
|
2026-02-17 20:48:42 +01:00
|
|
|
className={`bg-surface-1 rounded-lg border border-border-default p-4 border-l-4 ${colorClasses[color] ?? 'border-text-tertiary'}`}
|
2026-02-05 15:28:50 +01:00
|
|
|
>
|
2026-02-17 20:48:42 +01:00
|
|
|
<div className="text-2xl font-bold font-mono text-text-primary">
|
2026-02-05 15:28:50 +01:00
|
|
|
{value}
|
|
|
|
|
{total !== undefined && (
|
2026-02-17 20:48:42 +01:00
|
|
|
<span className="text-sm font-normal font-sans text-text-secondary"> / {total}</span>
|
2026-02-05 15:28:50 +01:00
|
|
|
)}
|
|
|
|
|
</div>
|
2026-02-17 20:48:42 +01:00
|
|
|
<div className="text-sm text-text-secondary">{label}</div>
|
2026-02-05 15:28:50 +01:00
|
|
|
</div>
|
|
|
|
|
)
|
|
|
|
|
}
|