palimpseste-max / web /src /components /MetricCard.tsx
thefinalboss's picture
Upload folder using huggingface_hub
6e62ad1 verified
Raw
History Blame Contribute Delete
1.17 kB
interface MetricCardProps {
label: string
value: string | number
sublabel?: string
icon?: string
accent?: string
trend?: number
}
export function MetricCard({ label, value, sublabel, icon, accent = '#7c3aed', trend }: MetricCardProps) {
return (
<div className="glass-card p-3.5 transition-all hover:scale-[1.02] hover:glow-accent group">
<div className="flex items-start justify-between mb-1.5">
<span className="text-[11px] text-pal-muted font-medium uppercase tracking-wide">{label}</span>
{icon && <span className="text-base opacity-60 group-hover:opacity-100 transition-opacity">{icon}</span>}
</div>
<div className="flex items-baseline gap-2">
<span
className="text-xl font-bold"
style={{ color: accent }}
>
{value}
</span>
{trend !== undefined && (
<span className={`text-xs ${trend >= 0 ? 'text-pal-green' : 'text-pal-red'}`}>
{trend >= 0 ? '↑' : '↓'} {Math.abs(trend)}
</span>
)}
</div>
{sublabel && <span className="text-[10px] text-pal-muted mt-0.5 block">{sublabel}</span>}
</div>
)
}