import React, { useState, useCallback } from 'react'; import { UploadedImage } from '../types'; import { UploadIcon } from './icons/UploadIcon'; import { ArrowRightIcon } from './icons/ArrowRightIcon'; interface ImageUploaderProps { onImagesUploaded: (images: UploadedImage[]) => void; } const ImageUploader: React.FC = ({ onImagesUploaded }) => { const [images, setImages] = useState([]); const [error, setError] = useState(null); const handleFileChange = (event: React.ChangeEvent) => { setError(null); if (event.target.files) { const files = Array.from(event.target.files); if (files.length + images.length > 5) { setError("You can upload a maximum of 5 images."); return; } // Fix: Explicitly type `file` as `File` to resolve type inference issues. const newImages: UploadedImage[] = files.map((file: File) => ({ file, previewUrl: URL.createObjectURL(file), subjectDescription: '', })); setImages(prev => [...prev, ...newImages]); } }; const handleDescriptionChange = (index: number, value: string) => { setImages(prev => { const updated = [...prev]; updated[index].subjectDescription = value; return updated; }); }; const removeImage = (indexToRemove: number) => { setImages(prev => prev.filter((_, index) => index !== indexToRemove)); }; const handleSubmit = () => { if (images.length < 2) { setError('Please upload at least 2 images.'); return; } if (images.some(img => img.subjectDescription.trim() === '')) { setError('Please describe the main subject in each image.'); return; } onImagesUploaded(images); }; return (

Upload Your Source Images

Upload 2 or more images. Then, briefly describe the person you want to feature from each.

{images.length > 0 && (
{images.map((image, index) => (
{`preview