import { type ClassValue, clsx } from 'clsx'; import { twMerge } from 'tailwind-merge'; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } export function formatDate(date: string | Date, timeZone?: string): string { const d = typeof date === 'string' ? new Date(date) : date; return d.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric', ...(timeZone && { timeZone }), }); } export function formatDateTime(date: string | Date, timeZone?: string): string { const d = typeof date === 'string' ? new Date(date) : date; return d.toLocaleString('en-US', { year: 'numeric', month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit', ...(timeZone && { timeZone }), }); } export function formatTime(date: string | Date, timeZone?: string): string { const d = typeof date === 'string' ? new Date(date) : date; return d.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', ...(timeZone && { timeZone }), }); } /** * Convert ISO datetime string to datetime-local input format (YYYY-MM-DDTHH:mm) * Used for populating datetime-local inputs in forms */ export function toDatetimeLocal(isoString: string | null | undefined): string { if (!isoString) return ''; const date = new Date(isoString); const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); return `${year}-${month}-${day}T${hours}:${minutes}`; }