-
-
{t("qq.allowedUsers")}
-
- {t("qq.allowedUsersDesc")}
-
-
-
+
{saving ? t("common.loading") : t("common.save")}
-
+
{/* Image Settings */}
-
-
-
{t("qq.imageSettings")}
-
- {t("qq.imageSettingsDesc")}
-
-
-
+
-
-
-
{t("qq.imageEnabled")}
-
- {t("qq.imageEnabledDesc")}
-
-
+
-
+
{imageEnabled && (
@@ -284,11 +268,10 @@ export function QqBridgeSection() {
-
+
{/* Setup Guide */}
-
-
{t("qq.setupGuide")}
+
- {t("qq.step1")}
- {t("qq.step2")}
@@ -296,7 +279,7 @@ export function QqBridgeSection() {
- {t("qq.step4")}
- {t("qq.step5")}
-
+
);
}
diff --git a/src/components/bridge/TelegramBridgeSection.tsx b/src/components/bridge/TelegramBridgeSection.tsx
index bbf59ee..60205f7 100644
--- a/src/components/bridge/TelegramBridgeSection.tsx
+++ b/src/components/bridge/TelegramBridgeSection.tsx
@@ -5,6 +5,8 @@ import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { SpinnerGap, CheckCircle, Warning } from "@phosphor-icons/react";
import { useTranslation } from "@/hooks/useTranslation";
+import { SettingsCard } from "@/components/patterns/SettingsCard";
+import { StatusBanner } from "@/components/patterns/StatusBanner";
interface TelegramBridgeSettings {
telegram_bot_token: string;
@@ -172,14 +174,10 @@ export function TelegramBridgeSection() {
return (
{/* Bot Credentials */}
-
-
-
{t("telegram.credentials")}
-
- {t("telegram.credentialsDesc")}
-
-
-
+
{verifyResult && (
-
:
}
>
- {verifyResult.ok ?
:
}
{verifyResult.message}
-
+
)}
-
+
{/* Allowed Users */}
-
-
-
{t("bridge.allowedUsers")}
-
- {t("bridge.allowedUsersDesc")}
-
-
-
+
-
+
{/* Setup Guide */}
-
-
- {t("telegram.setupGuide")}
-
+
- {t("telegram.step1")}
- {t("telegram.step2")}
@@ -300,7 +287,7 @@ export function TelegramBridgeSection() {
- {t("telegram.step5")}
- {t("telegram.step6")}
-
+
);
}
diff --git a/src/components/settings/AppearanceSection.tsx b/src/components/settings/AppearanceSection.tsx
index 84b5df4..7a15094 100644
--- a/src/components/settings/AppearanceSection.tsx
+++ b/src/components/settings/AppearanceSection.tsx
@@ -17,7 +17,10 @@ import {
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
+import { Button } from "@/components/ui/button";
import { cn } from "@/lib/utils";
+import { SettingsCard } from "@/components/patterns/SettingsCard";
+import { FieldRow } from "@/components/patterns/FieldRow";
// ── Theme Mode Pill Selector ────────────────────────────────────────
@@ -40,22 +43,23 @@ function ThemeModePills({
{MODE_OPTIONS.map((opt) => {
const selected = value === opt.value;
return (
-
+
);
})}
@@ -113,15 +117,9 @@ function ShikiCodePreview({ isDark }: { isDark: boolean }) {
function UIPreview() {
return (
-
-
-
+
+
+
Badge
@@ -159,15 +157,14 @@ export function AppearanceSection() {
{t("settings.appearanceDesc")}
-
+
{/* Mode */}
-
-
-
{t("settings.themeMode")}
-
{t("settings.themeModeDesc")}
-
+
-
+
{theme === "system" && resolvedTheme && (
@@ -175,14 +172,12 @@ export function AppearanceSection() {
)}
-
-
{/* Family */}
-
-
-
{t("settings.themeFamily")}
-
{t("settings.themeFamilyDesc")}
-
+
-
-
-
+
{/* Preview */}
-
+
);
}
diff --git a/src/components/settings/GeneralSection.tsx b/src/components/settings/GeneralSection.tsx
index a7e96a0..f75470f 100644
--- a/src/components/settings/GeneralSection.tsx
+++ b/src/components/settings/GeneralSection.tsx
@@ -19,6 +19,9 @@ import { useTranslation } from "@/hooks/useTranslation";
import { SUPPORTED_LOCALES, type Locale } from "@/i18n";
import type { TranslationKey } from "@/i18n";
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
+import { SettingsCard } from "@/components/patterns/SettingsCard";
+import { FieldRow } from "@/components/patterns/FieldRow";
+import { StatusBanner } from "@/components/patterns/StatusBanner";
import { AppearanceSection } from "./AppearanceSection";
function UpdateCard() {
@@ -30,7 +33,7 @@ function UpdateCard() {
&& updateInfo.downloadProgress != null;
return (
-
+
{t('settings.codepilot')}
@@ -114,7 +117,7 @@ function UpdateCard() {
)}
)}
-
+
);
}
@@ -210,36 +213,31 @@ export function GeneralSection() {
{/* General settings card */}
-
+
{/* Auto-approve toggle */}
-
-
-
{t('settings.autoApproveTitle')}
-
- {t('settings.autoApproveDesc')}
-
-
+
-
+
{skipPermissions && (
-
-
+
+
{t('settings.autoApproveWarning')}
-
+
)}
-
-
{/* Language picker */}
-
-
-
{t('settings.language')}
-
{t('settings.languageDesc')}
-
+
-
-
-
+
{/* Thinking mode */}
-
-
-
{t('settings.thinkingMode' as TranslationKey)}
-
{t('settings.thinkingModeDesc' as TranslationKey)}
-
+
-
-
+
+
{/* Appearance */}
{/* Account info */}
{accountInfo && (
-
-
{t('settings.accountInfo' as TranslationKey)}
+
{accountInfo.email && (
@@ -297,7 +292,7 @@ export function GeneralSection() {
)}
-
+
)}
{/* Skip-permissions warning dialog */}