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 CodexCommonConfigModalProps { isOpen: boolean; onClose: () => void; value: string; onSave: (value: string) => boolean; error?: string; onExtract?: () => void; isExtracting?: boolean; } /** * CodexCommonConfigModal - Common Codex configuration editor modal * Allows editing of common TOML configuration shared across providers */ export const CodexCommonConfigModal: React.FC = ({ isOpen, onClose, value, onSave, error, onExtract, isExtracting, }) => { const { t } = useTranslation(); const [isDarkMode, setIsDarkMode] = useState(false); const [draftValue, setDraftValue] = useState(value); 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(); }, []); useEffect(() => { if (isOpen) { setDraftValue(value); } }, [isOpen, value]); const handleClose = () => { setDraftValue(value); onClose(); }; const handleSave = () => { if (onSave(draftValue)) { onClose(); } }; return ( {onExtract && ( )} } >

{t("codexConfig.commonConfigHint")}

{error && (

{error}

)}
); };