import { clsx, type ClassValue } from "clsx" import { twMerge } from "tailwind-merge" export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)) } export function formatNumber(num: number): string { return new Intl.NumberFormat("zh-CN").format(num) } export function formatCurrency(amount: number): string { return new Intl.NumberFormat("zh-CN", { style: "currency", currency: "CNY", }).format(amount) } export function debounce unknown>( func: T, wait: number ): (...args: Parameters) => void { let timeout: NodeJS.Timeout | null = null return (...args: Parameters) => { if (timeout) clearTimeout(timeout) timeout = setTimeout(() => func(...args), wait) } } export function throttle unknown>( func: T, limit: number ): (...args: Parameters) => void { let inThrottle: boolean return (...args: Parameters) => { if (!inThrottle) { func(...args) inThrottle = true setTimeout(() => (inThrottle = false), limit) } } } export function randomBetween(min: number, max: number): number { return Math.random() * (max - min) + min } export function lerp(start: number, end: number, t: number): number { return start + (end - start) * t } export function clamp(value: number, min: number, max: number): number { return Math.min(Math.max(value, min), max) }