import { ReactNode, useEffect, useState } from 'react'; interface ImageResultCardProps { title: string; description?: string; icon?: ReactNode; generatedImage?: { url: string; revised_prompt?: string; model?: string; provider?: string; size?: string; format?: string; cost?: string; } | null; error?: string | null; } /** * Image Result Display Card Component * Displays the generated image with details */ export default function ImageResultCard({ title, description, icon, generatedImage, error, }: ImageResultCardProps) { const [imageData, setImageData] = useState(generatedImage); const [errorState, setErrorState] = useState(error); // Listen for image generation events from ImageGenerationCard useEffect(() => { const handleImageGenerated = (event: CustomEvent) => { setImageData(event.detail); setErrorState(null); }; const handleImageError = (event: CustomEvent) => { setErrorState(event.detail); setImageData(null); }; window.addEventListener('imageGenerated', handleImageGenerated as EventListener); window.addEventListener('imageGenerationError', handleImageError as EventListener); return () => { window.removeEventListener('imageGenerated', handleImageGenerated as EventListener); window.removeEventListener('imageGenerationError', handleImageError as EventListener); }; }, []); useEffect(() => { setImageData(generatedImage); }, [generatedImage]); useEffect(() => { setErrorState(error); }, [error]); return (
{icon && (
{icon}
)}

{title}

{description && (

{description}

)}
{errorState ? (

Generation Failed

{errorState}

) : imageData?.url ? (
{/* Generated Image */}
Generated image
{/* Image Details */}

Image Details

Size: {imageData.size || '1024x1024'} pixels
Format: {imageData.format || 'WEBP'}
Model: {imageData.model || 'DALLĀ·E 3'}
{imageData.cost && (
Cost: {imageData.cost}
)}
{/* Revised Prompt */} {imageData.revised_prompt && (

Revised Prompt:

{imageData.revised_prompt}

)} {/* Negative Prompt (if available) */} {imageData.negative_prompt && (

Negative Prompt:

{imageData.negative_prompt}

)}
{/* Actions */}
View Original
) : (

No image generated yet. Fill out the form and click "Generate Image" to create your first AI image.

)}
); }