import { useCallback, useRef, useState } from "react"; import { toast } from "sonner"; interface UseCopyToClipboardOptions { successMessage?: string; errorMessage?: string; resetDelay?: number; } export function useCopyToClipboard(options: UseCopyToClipboardOptions = {}) { const { successMessage = "Copied to clipboard", errorMessage = "Failed to copy", resetDelay = 2000 } = options; const [copied, setCopied] = useState(false); const timeoutRef = useRef>(undefined); const copy = useCallback( async (text: string) => { try { await navigator.clipboard.writeText(text); setCopied(true); toast.success(successMessage); if (timeoutRef.current) clearTimeout(timeoutRef.current); timeoutRef.current = setTimeout(() => setCopied(false), resetDelay); } catch { toast.error(errorMessage); } }, [successMessage, errorMessage, resetDelay], ); return { copy, copied }; }