diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 891f5dd..6fe19cb 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -346,11 +346,14 @@ function App() { {/* Footer */} diff --git a/frontend/src/components/ImageUpload.jsx b/frontend/src/components/ImageUpload.jsx index fdf6918..73f4805 100644 --- a/frontend/src/components/ImageUpload.jsx +++ b/frontend/src/components/ImageUpload.jsx @@ -1,7 +1,7 @@ -import { useCallback } from 'react' +import { useCallback, useEffect } from 'react' import { motion } from 'framer-motion' import { useDropzone } from 'react-dropzone' -import { Upload, Image as ImageIcon, X, FileText } from 'lucide-react' +import { Upload, Image as ImageIcon, X, FileText, Clipboard } from 'lucide-react' export default function ImageUpload({ onImageSelect, preview, fileType = 'image' }) { const onDrop = useCallback((acceptedFiles) => { @@ -12,6 +12,38 @@ export default function ImageUpload({ onImageSelect, preview, fileType = 'image' const isPDF = fileType === 'pdf' + // Handle clipboard paste + useEffect(() => { + // Only enable paste for images, not PDFs + if (isPDF) return + + const handlePaste = async (e) => { + const items = e.clipboardData?.items + if (!items) return + + for (let i = 0; i < items.length; i++) { + const item = items[i] + + if (item.type.indexOf('image') !== -1) { + e.preventDefault() + const blob = item.getAsFile() + + if (blob) { + // Create a File object with a proper name + const file = new File([blob], `pasted-image-${Date.now()}.png`, { + type: blob.type, + }) + onImageSelect(file) + } + break + } + } + } + + document.addEventListener('paste', handlePaste) + return () => document.removeEventListener('paste', handlePaste) + }, [onImageSelect, isPDF]) + const { getRootProps, getInputProps, isDragActive } = useDropzone({ onDrop, accept: isPDF ? { @@ -82,6 +114,12 @@ export default function ImageUpload({ onImageSelect, preview, fileType = 'image' : 'or click to browse • PNG, JPG, WEBP up to 10MB' }

+ {!isPDF && ( +

+ + Press Ctrl+V to paste from clipboard +

+ )}