import React, { useEffect, useState } from "react"; import { Save, Download, Loader2 } from "lucide-react"; import { useTranslation } from "react-i18next"; import { FullScreenPanel } from "@/components/common/FullScreenPanel"; import { Button } from "@/components/ui/button"; import JsonEditor from "@/components/JsonEditor"; interface GeminiCommonConfigModalProps { isOpen: boolean; onClose: () => void; value: string; onChange: (value: string) => void; error?: string; onExtract?: () => void; isExtracting?: boolean; } /** * GeminiCommonConfigModal - Common Gemini configuration editor modal * Allows editing of common env snippet shared across Gemini providers */ export const GeminiCommonConfigModal: React.FC< GeminiCommonConfigModalProps > = ({ isOpen, onClose, value, onChange, error, onExtract, isExtracting }) => { const { t } = useTranslation(); const [isDarkMode, setIsDarkMode] = useState(false); useEffect(() => { setIsDarkMode(document.documentElement.classList.contains("dark")); const observer = new MutationObserver(() => { setIsDarkMode(document.documentElement.classList.contains("dark")); }); observer.observe(document.documentElement, { attributes: true, attributeFilter: ["class"], }); return () => observer.disconnect(); }, []); return ( {onExtract && ( )} } >

{t("geminiConfig.commonConfigHint", { defaultValue: "该片段会写入 Gemini 的 .env(不允许包含 GOOGLE_GEMINI_BASE_URL、GEMINI_API_KEY)", })}

{error && (

{error}

)}
); };