+
+
{t.name}
+
+ {t.code} · {t.market}
+
+
+ {t.current != null
+ ? t.current.toLocaleString(undefined, { maximumFractionDigits: 0 })
+ : "—"}
+
+
+ {change == null
+ ? " "
+ : `${change > 0 ? "+" : ""}${change.toLocaleString(undefined, {
+ maximumFractionDigits: 0,
+ })}${pct != null ? ` (${pct > 0 ? "+" : ""}${pct.toFixed(2)}%)` : ""}`}
+
+
+
+
+ );
+}
diff --git a/web/components/DisclosuresPanel.tsx b/web/components/DisclosuresPanel.tsx
new file mode 100644
index 0000000..304f74d
--- /dev/null
+++ b/web/components/DisclosuresPanel.tsx
@@ -0,0 +1,92 @@
+"use client";
+
+// 공시(DART) 패널 — news 테이블의 source='dart' 만 골라서 카드 리스트로.
+// 별도 백엔드 엔드포인트는 안 만들고 기존 /api/news/{code}?source=dart 재사용.
+
+import { useEffect, useState } from "react";
+import { api, type NewsResponse } from "../lib/api";
+
+export function DisclosuresPanel({ code }: { code: string }) {
+ const [data, setData] = useState