// 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}

}
{Icon && (
)}
) } export function Card({ title, children, className = '' }) { return (
{title && (

{title}

)}
{children}
) } export function LoadingState({ message = 'Loading...' }) { return (
{message}
) } export function EmptyState({ message = 'No data available' }) { return (
{message}
) } export function ErrorState({ message = 'Backend unavailable. Trying to reconnect...' }) { return (

Connection Error

{message}

) } export function CheckRow({ label, value }) { const ok = value === true const na = value === undefined || value === null return (
{label} {na ? ( — ) : ok ? ( ✓ PASS ) : ( ✗ FAIL )}
) } export function DataSourceTag({ source }) { return ( Source: {source} ) }