import { useState, useCallback, useRef } from "react"; import GlassButton from "./GlassButton"; import GlassContainer from "./GlassContainer"; import { GLASS_EFFECTS } from "../constants"; interface ImageUploadProps { onImagesUploaded: (files: File[]) => void; isAnalyzing: boolean; } export default function ImageUpload({ onImagesUploaded, isAnalyzing }: ImageUploadProps) { const [dragActive, setDragActive] = useState(false); const fileInputRef = useRef(null); const handleFiles = useCallback( (files: FileList | null) => { if (!files) return; const imageFiles = Array.from(files).filter(file => file.type.startsWith("image/") ); if (imageFiles.length > 0) { onImagesUploaded(imageFiles); } }, [onImagesUploaded] ); const handleDrag = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); }, []); const handleDragIn = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); if (e.dataTransfer?.items && e.dataTransfer.items.length > 0) { setDragActive(true); } }, []); const handleDragOut = useCallback((e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); setDragActive(false); }, []); const handleDrop = useCallback( (e: React.DragEvent) => { e.preventDefault(); e.stopPropagation(); setDragActive(false); if (e.dataTransfer?.files && e.dataTransfer.files.length > 0) { handleFiles(e.dataTransfer.files); } }, [handleFiles] ); const handleFileInputChange = useCallback( (e: React.ChangeEvent) => { handleFiles(e.target.files); }, [handleFiles] ); const handleClick = useCallback(() => { if (!isAnalyzing) { fileInputRef.current?.click(); } }, [isAnalyzing]); return (

Upload Images

Drag and drop images here, or click to select files

Supports JPG, PNG, GIF, WebP formats. Multiple files allowed.

{isAnalyzing ? "Analyzing..." : "Choose Files"}
); }