diff --git a/components/PromptHero.tsx b/components/PromptHero.tsx index 2c1ab85..c2f71ee 100644 --- a/components/PromptHero.tsx +++ b/components/PromptHero.tsx @@ -11,7 +11,7 @@ export function PromptHero() { const { prompt, setPrompt, addToGallery, settings, setSettings, - references, setReference, addReference, clearReferences, + references, setReference, addReference, removeReference, clearReferences, setSelectionMode, setCurrentView, history, setHistory } = useStore(); @@ -280,11 +280,16 @@ export function PromptHero() { } }; - // Handle file input change for click-to-upload + // Handle file input change for click-to-upload (supports multiple files) const handleFileInputChange = (e: React.ChangeEvent, category: ReferenceCategory) => { - const file = e.target.files?.[0]; - if (file && file.type.startsWith('image/')) { - uploadReference(file, category); + const files = e.target.files; + if (files && files.length > 0) { + // Upload each selected file + Array.from(files).forEach(file => { + if (file.type.startsWith('image/')) { + uploadReference(file, category); + } + }); } // Reset input value so same file can be selected again e.target.value = ''; @@ -299,14 +304,9 @@ export function PromptHero() { }; const toggleReference = (category: ReferenceCategory) => { - const hasRefs = references[category] && references[category]!.length > 0; - if (hasRefs) { - // If already has references, clear them - clearReferences(category); - } else { - // If no references, open file picker for upload - openFilePicker(category); - } + // Always open file picker to add more references + // Users can remove individual refs or clear all via the X button + openFilePicker(category); }; const nextAspectRatio = () => { @@ -473,46 +473,59 @@ export function PromptHero() { {(['subject', 'scene', 'style'] as ReferenceCategory[]).map((cat) => { const refs = references[cat] || []; const hasRefs = refs.length > 0; - const firstRef = refs[0]; const isUploading = uploadingRefs[cat]; return ( - + {/* Clear all button */} {hasRefs && !isUploading && ( -
{ e.stopPropagation(); clearReferences(cat); }} + title={`Clear all ${cat} references`} > - -
+ + )} - + ); })} @@ -522,6 +535,7 @@ export function PromptHero() { type="file" ref={fileInputRefs.subject} accept="image/*" + multiple className="hidden" onChange={(e) => handleFileInputChange(e, 'subject')} /> @@ -529,6 +543,7 @@ export function PromptHero() { type="file" ref={fileInputRefs.scene} accept="image/*" + multiple className="hidden" onChange={(e) => handleFileInputChange(e, 'scene')} /> @@ -536,6 +551,7 @@ export function PromptHero() { type="file" ref={fileInputRefs.style} accept="image/*" + multiple className="hidden" onChange={(e) => handleFileInputChange(e, 'style')} /> @@ -604,6 +620,52 @@ export function PromptHero() { + + {/* Reference Preview Panel - shows when any references exist */} + {(references.subject?.length || references.scene?.length || references.style?.length) ? ( +
+
+ {(['subject', 'scene', 'style'] as ReferenceCategory[]).map((cat) => { + const refs = references[cat] || []; + if (refs.length === 0) return null; + return ( +
+
+ {cat} + {refs.length} +
+
+ {refs.map((ref) => ( +
+ + +
+ ))} + {/* Add more button */} + +
+
+ ); + })} +
+
+ ) : null} );