From 55abd1822c7d9a8b6f42aaf86b7020ab36ce0d9a Mon Sep 17 00:00:00 2001 From: Tan Kimzeg <70314151+TanKimzeg@users.noreply.github.com> Date: Tue, 23 Jun 2026 23:30:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(ui):=20=E4=B8=BA=E5=A4=9A=E5=A4=84=20JsonE?= =?UTF-8?q?ditor=20=E7=BB=84=E4=BB=B6=E6=8E=A5=E5=85=A5=E6=9A=97=E8=89=B2?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=20(#4556)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在为 UsageScriptModal、ProviderForm、UniversalProviderFormModal 中 的 JsonEditor CodeMirror 编辑器添加 darkMode 支持,使用 useDarkMode() hook 监听 App 主题,自动切换 oneDark 编辑器主题。 --- src/components/UsageScriptModal.tsx | 3 +++ src/components/providers/forms/ProviderForm.tsx | 5 +++++ src/components/universal/UniversalProviderFormModal.tsx | 5 +++++ 3 files changed, 13 insertions(+) diff --git a/src/components/UsageScriptModal.tsx b/src/components/UsageScriptModal.tsx index 44818e347..1d30a2091 100644 --- a/src/components/UsageScriptModal.tsx +++ b/src/components/UsageScriptModal.tsx @@ -8,6 +8,7 @@ import { usageApi, settingsApi, type AppId } from "@/lib/api"; import { copilotGetUsage, copilotGetUsageForAccount } from "@/lib/api/copilot"; import { useSettingsQuery } from "@/lib/query"; import { resolveManagedAccountId } from "@/lib/authBinding"; +import { useDarkMode } from "@/hooks/useDarkMode"; import { extractCodexBaseUrl, extractCodexExperimentalBearerToken, @@ -196,6 +197,7 @@ const UsageScriptModal: React.FC = ({ const queryClient = useQueryClient(); const { data: settingsData } = useSettingsQuery(); const [showUsageConfirm, setShowUsageConfirm] = useState(false); + const isDarkMode = useDarkMode(); // 生成带国际化的预设模板 const PRESET_TEMPLATES = generatePresetTemplates(t); @@ -1420,6 +1422,7 @@ const UsageScriptModal: React.FC = ({ height={480} language="javascript" showMinimap={false} + darkMode={isDarkMode} /> )} diff --git a/src/components/providers/forms/ProviderForm.tsx b/src/components/providers/forms/ProviderForm.tsx index 95240a4a2..19da6a152 100644 --- a/src/components/providers/forms/ProviderForm.tsx +++ b/src/components/providers/forms/ProviderForm.tsx @@ -9,6 +9,7 @@ import { Form, FormField, FormItem, FormMessage } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { providerSchema, type ProviderFormData } from "@/lib/schemas/provider"; import { providersApi, settingsApi, type AppId } from "@/lib/api"; +import { useDarkMode } from "@/hooks/useDarkMode"; import type { ProviderCategory, ProviderMeta, @@ -264,6 +265,7 @@ function ProviderFormFull({ const { data: settingsData } = useSettingsQuery(); const showCommonConfigNotice = settingsData != null && settingsData.commonConfigConfirmed !== true; + const isDarkMode = useDarkMode(); const handleCommonConfigConfirm = async () => { try { @@ -2233,6 +2235,7 @@ function ProviderFormFull({ rows={14} showValidation={false} language="json" + darkMode={isDarkMode} /> ) : appId === "opencode" && @@ -2257,6 +2260,7 @@ function ProviderFormFull({ rows={14} showValidation={true} language="json" + darkMode={isDarkMode} /> {settingsConfigErrorField} @@ -2287,6 +2291,7 @@ function ProviderFormFull({ rows={14} showValidation={true} language="json" + darkMode={isDarkMode} /> {}} height={180} + darkMode={isDarkMode} /> )} @@ -673,6 +676,7 @@ requires_openai_auth = true`; value={JSON.stringify(codexConfigJson, null, 2)} onChange={() => {}} height={280} + darkMode={isDarkMode} /> )} @@ -688,6 +692,7 @@ requires_openai_auth = true`; value={JSON.stringify(geminiConfigJson, null, 2)} onChange={() => {}} height={140} + darkMode={isDarkMode} /> )}