import React, { useState, useEffect } from "react"; import { useGemini } from "../../../hooks/useGemini"; import { useGenerator } from "../../../context/GeneratorContext"; import { getAssetsUrl } from "../../../utils/api"; import { ImageCard, ImageGrid, LoadingSpinner, ErrorMessage, } from "../../shared"; const GEMINI_AVATAR = "imgs/gemini-logo.png"; const PROVIDER_ID = "gemini"; export default function GeminiGenerator() { const [query, setQuery] = useState(""); const [imageCount, setImageCount] = useState(2); const [imageSize, setImageSize] = useState("medium"); const { setPreviewImageList, setIsGenerating } = useGenerator(); const { generatedImages, loading, error, generateImage, clearImages, } = useGemini(); const handleSubmit = (e) => { e.preventDefault(); if (query.trim()) { generateImage(query, imageCount, imageSize); } }; const assetsUrl = getAssetsUrl(); // Register images for modal navigation useEffect(() => { if (generatedImages.length > 0) { const list = generatedImages.map((image, idx) => ({ imageSrc: image.url, imageAlt: image.revised_prompt || query || "Generated image", previewUrl: image.url, author: { url: "https://ai.google.dev/", avatar: `${assetsUrl}${GEMINI_AVATAR}`, name: "Google Gemini", }, importUrl: image.url, downloadOptions: [ { label: "Original", type: "original", url: image.url }, ], providerId: PROVIDER_ID, imageId: image.id || `gemini-${idx}`, providerBadge: "Gemini", index: idx, })); setPreviewImageList(list); } }, [generatedImages, query, assetsUrl, setPreviewImageList]); // Update generating state useEffect(() => { setIsGenerating(loading); }, [loading, setIsGenerating]); return (

Google Gemini

Imagen 4.0 – describe your image and generate