import { useCallback, useState, useEffect, useRef } from 'react'; import { Upload, X, MousePointerClick, FileUp, ClipboardPaste } from 'lucide-react'; import { useLanguage } from '../contexts/LanguageContext'; interface UploadModalProps { onClose: () => void; onUpload: (files: File[]) => void; } export default function UploadModal({ onClose, onUpload }: UploadModalProps) { const { t } = useLanguage(); const [dragActive, setDragActive] = useState(false); const fileInputRef = useRef(null); useEffect(() => { const handlePaste = (e: ClipboardEvent) => { const items = e.clipboardData?.items; if (!items) return; const files: File[] = []; for (let i = 0; i < items.length; i++) { if (items[i].type.startsWith('image/') || items[i].type === 'application/pdf') { const file = items[i].getAsFile(); if (file) files.push(file); } } if (files.length > 0) { onUpload(files); onClose(); } }; document.addEventListener('paste', handlePaste); return () => document.removeEventListener('paste', handlePaste); }, [onUpload, onClose]); const handleDrag = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); if (e.type === 'dragenter' || e.type === 'dragover') { setDragActive(true); } else if (e.type === 'dragleave') { setDragActive(false); } }, []); const handleDrop = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); setDragActive(false); const files = Array.from(e.dataTransfer.files).filter((file) => file.type.startsWith('image/') || file.type === 'application/pdf' ); if (files.length > 0) { onUpload(files); onClose(); } }, [onUpload, onClose]); const handleFileInput = (e: React.ChangeEvent) => { if (e.target.files) { const files = Array.from(e.target.files).filter((file) => file.type.startsWith('image/') || file.type === 'application/pdf' ); if (files.length > 0) { onUpload(files); onClose(); } } }; return (

{t.uploadModal.title}

fileInputRef.current?.click()} className={`border-2 border-dashed rounded-xl p-12 text-center transition-colors cursor-pointer group ${dragActive ? 'border-blue-500 bg-blue-50' : 'border-gray-300 hover:border-blue-400 hover:bg-gray-50' }`} >

{t.sidebar.uploadInstruction}

{t.uploadModal.supportFormats}

{t.common.click}
{t.common.drop}
{t.common.paste}
); }