// components/ui.jsx — shared reusable UI primitives export function StatusBadge({ status }) { const map = { SAFE: 'bg-emerald-500/20 text-emerald-400 border-emerald-500/30', LOW: 'bg-emerald-500/20 text-emerald-400 border-emerald-500/30', MEDIUM: 'bg-yellow-500/20 text-yellow-400 border-yellow-500/30', HIGH: 'bg-orange-500/20 text-orange-400 border-orange-500/30', CRITICAL: 'bg-red-500/20 text-red-400 border-red-500/30', CONNECTED: 'bg-emerald-500/20 text-emerald-400 border-emerald-500/30', DISCONNECTED: 'bg-red-500/20 text-red-400 border-red-500/30', CONNECTING: 'bg-yellow-500/20 text-yellow-400 border-yellow-500/30', ACTIVE: 'bg-blue-500/20 text-blue-400 border-blue-500/30', INACTIVE: 'bg-slate-500/20 text-slate-400 border-slate-500/30', EXECUTED: 'bg-emerald-500/20 text-emerald-400 border-emerald-500/30', REJECTED: 'bg-red-500/20 text-red-400 border-red-500/30', UNAVAILABLE: 'bg-slate-500/20 text-slate-400 border-slate-500/30', APPROVED: 'bg-emerald-500/20 text-emerald-400 border-emerald-500/30', running: 'bg-emerald-500/20 text-emerald-400 border-emerald-500/30', stopped: 'bg-slate-500/20 text-slate-400 border-slate-500/30', error: 'bg-red-500/20 text-red-400 border-red-500/30', } const cls = map[status] ?? 'bg-slate-500/20 text-slate-400 border-slate-500/30' return ( {status} ) } export function MetricCard({ label, value, sub, icon: Icon, accent = 'blue' }) { const accents = { blue: 'border-cyan-400/25 bg-cyan-400/8 text-cyan-300', green: 'border-emerald-400/25 bg-emerald-400/8 text-emerald-300', yellow: 'border-amber-400/25 bg-amber-400/8 text-amber-300', red: 'border-rose-400/25 bg-rose-400/8 text-rose-300', purple: 'border-violet-400/25 bg-violet-400/8 text-violet-300', } return (
{label}
{value ?? '—'}
{sub &&{sub}
}Connection Error
{message}