55 lines
1.4 KiB
TypeScript
55 lines
1.4 KiB
TypeScript
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<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)
|
|
}
|