← back to Omega Watches 2
src/lib/utils.ts
64 lines
import { clsx, type ClassValue } from "clsx";
import { twMerge } from "tailwind-merge";
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}
export function formatCurrency(
amount: number,
currency: string = "USD"
): string {
return new Intl.NumberFormat("en-US", {
style: "currency",
currency,
minimumFractionDigits: 0,
maximumFractionDigits: 0,
}).format(amount);
}
export function formatDate(date: string | Date): string {
return new Intl.DateTimeFormat("en-US", {
year: "numeric",
month: "short",
day: "numeric",
}).format(new Date(date));
}
export function formatDateTime(date: string | Date): string {
return new Intl.DateTimeFormat("en-US", {
year: "numeric",
month: "short",
day: "numeric",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
}).format(new Date(date));
}
export function slugify(text: string): string {
return text
.toLowerCase()
.replace(/[^a-z0-9]+/g, "-")
.replace(/(^-|-$)/g, "");
}
export function truncate(str: string, length: number): string {
if (str.length <= length) return str;
return str.slice(0, length) + "...";
}
export function percentChange(oldVal: number, newVal: number): number {
if (oldVal === 0) return 0;
return ((newVal - oldVal) / oldVal) * 100;
}
export function cagr(
startVal: number,
endVal: number,
years: number
): number {
if (startVal <= 0 || years <= 0) return 0;
return (Math.pow(endVal / startVal, 1 / years) - 1) * 100;
}