sentinel-env / ui /app /components /TrustTimeline.tsx
XcodeAddy's picture
Merge remote main with local project
e2f4da8
"use client";
import { motion } from "framer-motion";
import { trustColor } from "../lib/theme";
import type { Observation } from "../lib/types";
export default function TrustTimeline({
observation,
trustDeltas,
}: {
observation: Observation | null;
trustDeltas: Record<string, number>;
}) {
const ids = observation?.available_specialists ?? observation?.available_workers ?? ["S0", "S1", "S2", "S3", "S4"];
return (
<div className="tl">
{ids.map((id) => {
const trust = observation?.trust_snapshot[id] ?? 0.5;
const delta = trustDeltas[id] ?? 0;
return (
<div className="tl-row" key={id}>
<span className="tl-id">{id}</span>
<div className="tl-track">
<motion.div
className="tl-fill"
style={{ background: trustColor(trust) }}
animate={{ width: `${Math.max(2, trust * 100)}%` }}
transition={{ type: "spring", stiffness: 260, damping: 24 }}
/>
</div>
<span className="tl-val" style={{ color: trustColor(trust) }}>
{trust.toFixed(2)}
</span>
<span className={`tl-delta ${delta > 0 ? "delta-up" : delta < 0 ? "delta-down" : ""}`}>
{delta !== 0 ? `${delta > 0 ? "+" : ""}${delta.toFixed(2)}` : ""}
</span>
</div>
);
})}
</div>
);
}