import { type ClassValue, clsx } from "clsx"; import { twMerge } from "tailwind-merge"; export { clsx }; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } export function formatTime(seconds: number): string { const s = Math.max(0, Math.floor(seconds)); const h = Math.floor(s / 3600); const m = Math.floor((s % 3600) / 60); const sec = s % 60; const mm = String(m).padStart(2, "0"); const ss = String(sec).padStart(2, "0"); return h > 0 ? `${h}:${mm}:${ss}` : `${mm}:${ss}`; } export function copyToClipboard(text: string): Promise { if (navigator.clipboard && window.isSecureContext) { return navigator.clipboard.writeText(text).then(() => true).catch(() => false); } else { const textArea = document.createElement("textarea"); textArea.value = text; textArea.style.position = "fixed"; textArea.style.left = "-999999px"; textArea.style.top = "-999999px"; document.body.appendChild(textArea); textArea.focus(); textArea.select(); return new Promise((resolve) => { const successful = document.execCommand('copy'); textArea.remove(); resolve(successful); }); } } export function scrollToTop(behavior: ScrollBehavior = 'instant') { if (typeof window === 'undefined') return; window.scrollTo({ top: 0, left: 0, behavior }); document.documentElement.scrollTop = 0; document.body.scrollTop = 0; }