'use client'; import { AnimatedNumber } from '@/components/ui/AnimatedNumber'; import { Bar, Delta } from '@/components/ui/primitives'; import { fmt, fmtDelta } from '@/lib/format'; import { useDegraded, useLive } from '@/lib/live'; import { pressureColor } from '@/lib/pressure'; import type { Component, GlobalPressure } from '@/lib/types'; /** Component rows (desktop: dense table · phone: swipeable scroll-snap chips). */ export function ComponentRows({ initial }: { initial: GlobalPressure | null }) { const live = useLive((s) => s.global); const updates = useLive((s) => s.updates); const { degraded } = useDegraded(); const comps: Component[] = (live ?? initial)?.components ?? []; if (!comps.length) return

Components unavailable.

; const dim = degraded ? 'opacity-50 saturate-50' : ''; return (
{/* phone: chips */} {/* desktop: table */} {comps.map((c) => ( ))}
Component · main driver Score Δ1h Contrib.
{c.label} w {fmt(c.weight, 2)} · conf {Math.round(c.confidence * 100)} %
{c.drivers[0] && (
`${fmtDelta(d.points)} ${d.label}`).join('\n')}> {fmtDelta(c.drivers[0].points)} {c.drivers[0].label}
)}
{fmtDelta(c.contribution)}
); }