ValuationOS
ValuationOS — initial commit (Phases 1–5)
d31acaa
import type { NegativeSignal } from "@/types/api";
export function SignalsPanel({ rows }: { rows: NegativeSignal[] }) {
return (
<div className="panel">
<div className="px-4 py-3 border-b border-border flex items-center justify-between">
<div className="heading">Negative issuer signals</div>
<div className="text-xs text-muted">{rows.length}</div>
</div>
<ul>
{rows.length === 0 && (
<li className="px-4 py-6 text-sm text-muted">No negative issuer signals.</li>
)}
{rows.map((r) => (
<li
key={r.issuer_id}
className="px-4 py-3 border-t border-border first:border-t-0 flex items-center gap-3"
>
<div className="h-8 w-8 rounded-md bg-panel2 border border-border grid place-items-center text-[11px] num text-muted">
{r.ticker ?? "·"}
</div>
<div className="flex-1 min-w-0">
<div className="text-sm truncate">{r.issuer_name}</div>
<div className="mt-0.5 flex flex-wrap gap-1">
{r.tags.slice(0, 3).map((t) => (
<span key={t} className="chip !text-[10px]">
{t}
</span>
))}
</div>
</div>
<div className="text-right">
<div className="num text-negative text-sm">{r.score.toFixed(2)}</div>
<div className="text-[10px] text-muted">signal</div>
</div>
</li>
))}
</ul>
</div>
);
}