import React, { useCallback, useState } from 'react'; import { Upload, FileText, AlertCircle } from 'lucide-react'; interface FileUploadProps { onFileLoaded: (content: string) => void; } export const FileUpload: React.FC = ({ onFileLoaded }) => { const [dragActive, setDragActive] = useState(false); const [error, setError] = useState(null); const handleFile = (file: File) => { setError(null); if (!file.name.endsWith('.md') && !file.name.endsWith('.txt') && !file.name.endsWith('.markdown')) { setError('Please upload a Markdown (.md) or Text (.txt) file.'); return; } const reader = new FileReader(); reader.onload = (e) => { const text = e.target?.result; if (typeof text === 'string') { onFileLoaded(text); } }; reader.onerror = () => setError('Error reading file.'); reader.readAsText(file); }; 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); if (e.dataTransfer.files && e.dataTransfer.files[0]) { handleFile(e.dataTransfer.files[0]); } }, []); const handleChange = (e: React.ChangeEvent) => { e.preventDefault(); if (e.target.files && e.target.files[0]) { handleFile(e.target.files[0]); } }; return (

Click to upload or drag and drop

Markdown or Plain Text files

{error && (
{error}
)}
); };