import React, { useEffect, useRef, useState } from 'react'; import { Check, Copy } from 'lucide-react'; import { copyTextToClipboard } from '@/utils/clipboard'; import { cn } from '@/lib/utils'; import { buttonVariants, type ButtonProps } from '@/components/ui/button'; import { toast } from 'sonner'; import { useTranslation } from 'react-i18next'; interface CopyButtonProps extends Omit { text: string; tooltip?: string; } export const CopyButton: React.FC = ({ text, tooltip, variant = 'ghost', size = 'icon', className, ...props }) => { const { t } = useTranslation('common'); const [copied, setCopied] = useState(false); const timerRef = useRef | null>(null); useEffect(() => { return () => { if (timerRef.current) clearTimeout(timerRef.current); }; }, []); const handleCopy = async (e: React.MouseEvent) => { e.stopPropagation(); if (!text) { toast.error(t('messages.copyEmpty')); return; } const success = await copyTextToClipboard(text); if (success) { toast.success(t('messages.copySuccess')); setCopied(true); if (timerRef.current) clearTimeout(timerRef.current); timerRef.current = setTimeout(() => setCopied(false), 1500); } else { toast.error(t('messages.copyError')); } }; return ( ); }; export default CopyButton;