import * as React from "react" import { useDropzone } from "react-dropzone" import { Cloud, File, X } from "lucide-react" import { Button } from "@/components/ui/button" import { cn } from "@/lib/utils" interface FileUploadProps { onUpload: (files: File[]) => void value?: File[] onChange?: (files: File[]) => void className?: string } export function FileUpload({ onUpload, value = [], onChange, className }: FileUploadProps) { const [files, setFiles] = React.useState(value) const onDrop = React.useCallback((acceptedFiles: File[]) => { setFiles(prev => [...prev, ...acceptedFiles]) onChange?.(acceptedFiles) onUpload(acceptedFiles) }, [onChange, onUpload]) const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop, accept: { 'image/*': [], 'application/pdf': [], 'application/msword': [], 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': [], } }) const removeFile = (fileToRemove: File) => { const newFiles = files.filter(file => file !== fileToRemove) setFiles(newFiles) onChange?.(newFiles) } return (

Drag & drop files here, or click to select files

{files.length > 0 && (
{files.map((file, index) => (
{file.name}
))}
)}
) }