feat: add utility functions for formatting and animation

This commit is contained in:
张翔
2026-02-21 19:58:50 +08:00
parent a92b6199af
commit 5a93fbb047
+48
View File
@@ -4,3 +4,51 @@ 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<T extends (...args: unknown[]) => unknown>(
func: T,
wait: number
): (...args: Parameters<T>) => void {
let timeout: NodeJS.Timeout | null = null
return (...args: Parameters<T>) => {
if (timeout) clearTimeout(timeout)
timeout = setTimeout(() => func(...args), wait)
}
}
export function throttle<T extends (...args: unknown[]) => unknown>(
func: T,
limit: number
): (...args: Parameters<T>) => void {
let inThrottle: boolean
return (...args: Parameters<T>) => {
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)
}