import { PUBLIC_B2_BUCKET, PUBLIC_B2_ENDPOINT } from "$env/static/public"; import { clsx, type ClassValue } from "clsx"; import { twMerge } from "tailwind-merge"; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } // eslint-disable-next-line @typescript-eslint/no-explicit-any export type WithoutChild = T extends { child?: any } ? Omit : T; // eslint-disable-next-line @typescript-eslint/no-explicit-any export type WithoutChildren = T extends { children?: any } ? Omit : T; export type WithoutChildrenOrChild = WithoutChildren>; export type WithElementRef = T & { ref?: U | null }; export function getTimeBasedGreeting(name: string): string { const hour = new Date().getHours(); if (hour < 12) { return `Good morning, ${name}`; } else if (hour < 17) { return `Good afternoon, ${name}`; } else if (hour < 22) { return `Good evening, ${name}`; } else { return `Good night, ${name}`; } } export function getPublicUrl(key: string | null): string | null { if (!key) return null; return `${PUBLIC_B2_ENDPOINT}/${PUBLIC_B2_BUCKET}/${key}`; } export function debounce(func: (...args: any[]) => void, wait: number) { let timeout: number | undefined; return function executedFunction(...args: any[]) { const later = () => { clearTimeout(timeout); func(...args); }; clearTimeout(timeout); timeout = setTimeout(later, wait); }; } export function formatPrice(price: number): string { if (price < 0.01) { return price.toFixed(6); } else if (price < 1) { return price.toFixed(4); } else { return price.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 }); } } export function formatValue(value: number): string { if (value >= 1e9) return `$${(value / 1e9).toFixed(2)}B`; if (value >= 1e6) return `$${(value / 1e6).toFixed(2)}M`; if (value >= 1e3) return `$${(value / 1e3).toFixed(2)}K`; return `$${value.toFixed(2)}`; } export function formatQuantity(value: number): string { if (value >= 1e9) return `${(value / 1e9).toFixed(2)}B`; if (value >= 1e6) return `${(value / 1e6).toFixed(2)}M`; if (value >= 1e3) return `${(value / 1e3).toFixed(2)}K`; return value.toLocaleString(); } export function formatDate(timestamp: string): string { const date = new Date(timestamp); return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' }); } export const formatMarketCap = formatValue;