import React, { useState, useCallback, useRef } from 'react'; import { UploadCloudIcon } from './Icons'; interface FileUploaderProps { onFilesAdded: (files: File[]) => void; } const FileUploader: React.FC = ({ onFilesAdded }) => { const [isDragging, setIsDragging] = useState(false); const fileInputRef = useRef(null); const handleDragEnter = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); setIsDragging(true); }, []); const handleDragLeave = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); setIsDragging(false); }, []); const handleDragOver = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); }, []); const handleDrop = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); setIsDragging(false); const files = Array.from(e.dataTransfer.files); if (files && files.length > 0) { onFilesAdded(files); } }, [onFilesAdded]); const handleFileSelect = (e: React.ChangeEvent) => { const files = Array.from(e.target.files || []); if (files && files.length > 0) { onFilesAdded(files); } }; const openFileDialog = () => { fileInputRef.current?.click(); }; return (

Click to upload or drag and drop

Upload media and optional .txt captions (must have matching filenames)

); }; export default FileUploader;