import { BarChartBig, MousePointerClick } from "lucide-react"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import type { DashboardHoldingItem } from "@/features/dashboard/types/dashboard.types"; import { formatCurrency, formatPercent, getChangeToneClass, } from "@/features/dashboard/utils/dashboard-format"; import { cn } from "@/lib/utils"; interface StockDetailPreviewProps { holding: DashboardHoldingItem | null; totalAmount: number; } /** * @description 선택 종목 상세 요약 카드입니다. * @see features/dashboard/components/DashboardContainer.tsx HoldingsList 선택 결과를 전달받아 렌더링합니다. */ export function StockDetailPreview({ holding, totalAmount, }: StockDetailPreviewProps) { if (!holding) { return ( 선택 종목 정보 보유 종목을 선택하면 자세한 정보가 표시됩니다.

왼쪽 보유 종목 리스트에서 종목을 선택해 주세요.

); } const profitToneClass = getChangeToneClass(holding.profitLoss); const allocationRate = totalAmount > 0 ? Math.min((holding.evaluationAmount / totalAmount) * 100, 100) : 0; return ( {/* ========== TITLE ========== */} 선택 종목 정보 {holding.name} ({holding.symbol}) · {holding.market} {/* ========== PRIMARY METRICS ========== */}
{/* ========== ALLOCATION BAR ========== */}
총 자산 대비 비중 {formatPercent(allocationRate)}
{/* ========== QUICK ORDER PLACEHOLDER ========== */}

빠른 주문(준비 중)

향후 이 영역에서 선택 종목의 빠른 매수/매도 기능을 제공합니다.

); } interface MetricProps { label: string; value: string; valueClassName?: string; } /** * @description 상세 카드에서 공통으로 사용하는 지표 행입니다. * @param label 지표명 * @param value 지표값 * @param valueClassName 값 텍스트 색상 클래스 * @see features/dashboard/components/StockDetailPreview.tsx 종목 상세 지표 표시 */ function Metric({ label, value, valueClassName }: MetricProps) { return (

{label}

{value}

); }