fix(pwa)+feat(investor): SW dev 등록 + 투자자별 누적 순매수

PwaRegister:
- production 게이트 제거. sw.js 는 fetch handler 가 없어 HMR/네트워크 응답을
  가로채지 않음 → dev 에서 등록해도 안전. Docker 가 next dev 로 도는 실제
  배포에서도 install 자격이 잡힘.
- 등록 실패는 그대로 silently 무시 (secure context 아님 등).

InvestorCumulative:
- chart.trading_value 를 재사용해 외국인/기관/개인 N일 누적 순매수를 미니
  SVG 라인으로 표시. 백엔드 호출 0.
- 윈도우 토글: 20일/60일/120일. 데이터 부족하면 가용분으로 자동 축소.
- 라인 색은 주체별 고정 (외국인=amber/기관=cyan/개인=violet) — 비교 가능.
- 끝값 라벨은 한국 컬러 (양수=rose-300, 음수=sky-300), 억원 단위.
- 단위는 원 → 1e8 환산. 시작 0 기준 누적 + 점선 기준선.
- TradingValuePanel (최근 5일 표) 옆 그리드 자리에 배치, MetricsPanel 은
  아래줄로 이동.
This commit is contained in:
claude-owner
2026-05-28 23:44:24 +09:00
parent 89f3a865af
commit 759ea20daa
3 changed files with 185 additions and 5 deletions

View File

@@ -5,6 +5,7 @@ import { useEffect, useMemo, useState } from "react";
import { AlertsPanel } from "../../components/AlertsPanel";
import { CompositeScoreCard } from "../../components/CompositeScoreCard";
import { DisclosuresPanel } from "../../components/DisclosuresPanel";
import { InvestorCumulative } from "../../components/InvestorCumulative";
import { MetricsPanel } from "../../components/MetricsPanel";
import { PeerComparePanel } from "../../components/PeerComparePanel";
import { NewsList } from "../../components/NewsList";
@@ -170,6 +171,9 @@ export default function CodePage({ params }: { params: { code: string } }) {
</div>
<div className="mt-6 grid gap-6 md:grid-cols-2">
<TradingValuePanel data={chart.trading_value} />
<InvestorCumulative data={chart.trading_value} />
</div>
<div className="mt-6">
<MetricsPanel code={code} />
</div>
<div className="mt-6 grid gap-6 md:grid-cols-2">