/** * CurrencyDisplay * * Deterministic currency formatting for display. * Avoids Intl and toLocaleString to prevent SSR/hydration mismatches. */ export class CurrencyDisplay { /** * Formats an amount as currency (e.g., "$10.00"). * Default currency is USD. */ static format(amount: number, currency: string = 'USD'): string { const symbol = currency === 'USD' ? '$' : currency + ' '; const formattedAmount = amount.toFixed(2); // Add thousands separators const parts = formattedAmount.split('.'); parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ','); return `${symbol}${parts.join('.')}`; } /** * Formats an amount as a compact currency (e.g., "$10"). */ static formatCompact(amount: number, currency: string = 'USD'): string { const symbol = currency === 'USD' ? '$' : currency + ' '; const roundedAmount = Math.round(amount); // Add thousands separators const formattedAmount = roundedAmount.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); return `${symbol}${formattedAmount}`; } }