"use client";
// 거래주체 패널 — chart.trading_value (외국인/기관/개인 순매수) 를 최근 5일 표로.
// 별도 백엔드 호출 없음. ChartPayload 에 이미 들어있는 시리즈를 재사용.
// 단위: 백엔드는 원(KRW) 단위. UI 는 억원(억원=1e8)으로 환산.
// 색: KR 관행 — 매수 우위(+) 빨강, 매도 우위(-) 파랑.
import type { TradingValuePoint } from "../lib/api";
export function TradingValuePanel({
data,
}: {
data: TradingValuePoint[];
}) {
if (!data || data.length === 0) {
return (
거래주체 데이터 없음
);
}
// 최근 5일만 (입력은 오래된→최신 순), 표시는 최신이 위.
const recent = data.slice(-5).reverse();
return (
거래주체 순매수
최근 {recent.length}일 · 단위: 억원
| 일자 |
외국인 |
기관 |
개인 |
{recent.map((row) => (
|
{shortDate(row.date)}
|
))}
);
}
function NetCell({ value }: { value: number | null }) {
if (value == null) {
return — | ;
}
const eok = value / 1e8;
const tone =
eok === 0
? "text-zinc-400"
: eok > 0
? "text-rose-400"
: "text-sky-400";
const sign = eok > 0 ? "+" : "";
return (
{sign}
{eok.toLocaleString(undefined, { maximumFractionDigits: 0 })}
|
);
}
function shortDate(iso: string): string {
// 'YYYY-MM-DD' → 'MM-DD'
const m = /^\d{4}-(\d{2})-(\d{2})/.exec(iso);
return m ? `${m[1]}-${m[2]}` : iso;
}