"use client"; import { useState } from "react"; import { useRef, useEffect } from "react"; import { Upload, X, Check } from "lucide-react"; import { Button } from "@/components/ui/button"; const COMIC_STYLES = [ { id: "american-modern", name: "American Modern" }, { id: "manga", name: "Manga" }, { id: "noir", name: "Noir" }, { id: "vintage", name: "Vintage" }, ]; interface StoryInputProps { prompt: string; setPrompt: (prompt: string) => void; style: string; setStyle: (style: string) => void; characterFiles: File[]; setCharacterFiles: (files: File[]) => void; } export function StoryInput({ prompt, setPrompt, style, setStyle, characterFiles, setCharacterFiles, }: StoryInputProps) { const [previews, setPreviews] = useState([]); const [showPreview, setShowPreview] = useState(null); const [showStyleDropdown, setShowStyleDropdown] = useState(false); const fileInputRef = useRef(null); const handleFiles = (newFiles: FileList | null) => { if (!newFiles) return; const validFiles = Array.from(newFiles).filter((file) => file.type.startsWith("image/") ); const totalFiles = [...characterFiles, ...validFiles].slice(0, 2); // Max 2 files setCharacterFiles(totalFiles); // Generate previews for all files const newPreviews: string[] = []; totalFiles.forEach((file, index) => { const reader = new FileReader(); reader.onload = (e) => { newPreviews[index] = e.target?.result as string; if (newPreviews.filter(Boolean).length === totalFiles.length) { setPreviews([...newPreviews]); } }; reader.readAsDataURL(file); }); }; const removeFile = (index: number) => { const newFiles = characterFiles.filter((_, i) => i !== index); const newPreviews = previews.filter((_, i) => i !== index); setCharacterFiles(newFiles); setPreviews(newPreviews); setShowPreview(null); if (fileInputRef.current) { fileInputRef.current.value = ""; } }; useEffect(() => { const handleClickOutside = (event: MouseEvent) => { const target = event.target as HTMLElement; if (!target.closest(".dropdown-container")) { setShowStyleDropdown(false); } }; document.addEventListener("mousedown", handleClickOutside); return () => document.removeEventListener("mousedown", handleClickOutside); }, []); return ( <>