/** * @file features/dashboard/utils/dashboard-format.ts * @description 대시보드 숫자/색상 표현 유틸 */ const KRW_FORMATTER = new Intl.NumberFormat("ko-KR"); const PERCENT_FORMATTER = new Intl.NumberFormat("ko-KR", { minimumFractionDigits: 2, maximumFractionDigits: 2, }); /** * 원화 금액을 포맷합니다. * @param value 숫자 값 * @returns 쉼표 포맷 문자열 * @see features/dashboard/components/StatusHeader.tsx 자산/손익 금액 표시 */ export function formatCurrency(value: number) { return KRW_FORMATTER.format(value); } /** * 퍼센트 값을 포맷합니다. * @param value 숫자 값 * @returns 소수점 2자리 퍼센트 문자열 * @see features/dashboard/components/StatusHeader.tsx 수익률 표시 */ export function formatPercent(value: number) { return `${PERCENT_FORMATTER.format(value)}%`; } /** * 값의 부호를 포함한 금액 문자열을 만듭니다. * @param value 숫자 값 * @returns + 또는 - 부호가 포함된 금액 문자열 * @see features/dashboard/components/MarketSummary.tsx 전일 대비 수치 표시 */ export function formatSignedCurrency(value: number) { if (value > 0) return `+${formatCurrency(value)}`; if (value < 0) return `-${formatCurrency(Math.abs(value))}`; return "0"; } /** * 값의 부호를 포함한 퍼센트 문자열을 만듭니다. * @param value 숫자 값 * @returns + 또는 - 부호가 포함된 퍼센트 문자열 * @see features/dashboard/components/MarketSummary.tsx 전일 대비율 표시 */ export function formatSignedPercent(value: number) { if (value > 0) return `+${formatPercent(value)}`; if (value < 0) return `-${formatPercent(Math.abs(value))}`; return "0.00%"; } /** * 숫자 값의 상승/하락/보합 텍스트 색상을 반환합니다. * @param value 숫자 값 * @returns Tailwind 텍스트 클래스 * @see features/dashboard/components/HoldingsList.tsx 수익률/손익 색상 적용 */ export function getChangeToneClass(value: number) { if (value > 0) return "text-red-600 dark:text-red-400"; if (value < 0) return "text-blue-600 dark:text-blue-400"; return "text-muted-foreground"; }