| import { clsx, type ClassValue } from 'clsx' | |
| import { twMerge } from 'tailwind-merge' | |
| export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)) } | |
| export function fmtNum(n: number): string { | |
| if (n >= 1e9) return (n / 1e9).toFixed(2) + 'B' | |
| if (n >= 1e6) return (n / 1e6).toFixed(2) + 'M' | |
| if (n >= 1e3) return (n / 1e3).toFixed(1) + 'K' | |
| return n.toFixed(0) | |
| } | |
| export function fmtUsd(n: number): string { | |
| return '$' + n.toLocaleString('en-US') | |
| } | |
| export function shortAddr(a: string): string { | |
| return a.length < 10 ? a : a.slice(0, 4) + '...' + a.slice(-4) | |
| } | |
| export function timeAgo(d: Date): string { | |
| const s = Math.floor((Date.now() - d.getTime()) / 1000) | |
| if (s < 60) return s + 's ago' | |
| if (s < 3600) return Math.floor(s / 60) + 'm ago' | |
| if (s < 86400) return Math.floor(s / 3600) + 'h ago' | |
| return Math.floor(s / 86400) + 'd ago' | |
| } | |