import { clsx, type ClassValue } from 'clsx'; import { twMerge } from 'tailwind-merge'; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } /** Format µT amount to human-readable string */ export function formatAmount(microTokens: number | undefined | null): string { if (microTokens == null) return '—'; if (microTokens >= 1_000_000) return `${(microTokens / 1_000_000).toFixed(2)} T`; if (microTokens >= 1_000) return `${(microTokens / 1_000).toFixed(1)} mT`; return `${microTokens} µT`; } /** Format unix seconds to relative time */ export function relativeTime(unixSeconds: number | undefined | null): string { if (!unixSeconds) return ''; const diff = Date.now() / 1000 - unixSeconds; if (diff < 60) return 'just now'; if (diff < 3600) return `${Math.floor(diff / 60)}m ago`; if (diff < 86400) return `${Math.floor(diff / 3600)}h ago`; return new Date(unixSeconds * 1000).toLocaleDateString(); } /** Format unix seconds to HH:MM */ export function formatTime(unixSeconds: number | undefined | null): string { if (!unixSeconds) return ''; return new Date(unixSeconds * 1000).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); } /** Generate a random nonce string */ export function randomId(): string { return Math.random().toString(36).slice(2) + Date.now().toString(36); }