{modes.map((mode) => (
{
size="sm"
className="capitalize px-3 text-xs"
>
- {/* Ключевое исправление: мы используем ключи `theme.light`, `theme.dark` и т.д.
- Это стандартный подход в i18next для корректной локализации.
- */}
{t(`theme.${mode}`)}
))}
diff --git a/src/index.css b/src/index.css
index a63722b9..4a1fa7c0 100644
--- a/src/index.css
+++ b/src/index.css
@@ -1,7 +1,7 @@
@import "tailwindcss";
@import "tw-animate-css";
-@custom-variant dark (&:is(.dark *));
+@variant dark .dark &;
@theme inline {
--radius-sm: calc(var(--radius) - 4px);
diff --git a/src/pages/_layout.tsx b/src/pages/_layout.tsx
index ef635375..84c065fa 100644
--- a/src/pages/_layout.tsx
+++ b/src/pages/_layout.tsx
@@ -150,7 +150,7 @@ const Layout = () => {
const mode = useThemeMode();
const isDark = mode === "light" ? false : true;
const { t } = useTranslation();
- const { theme } = useCustomTheme();
+ useCustomTheme();
const { verge } = useVerge();
const { clashInfo } = useClashInfo();
const [enableLog] = useEnableLog();
@@ -160,11 +160,6 @@ const Layout = () => {
const routersEles = useRoutes(routers);
const { addListener, setupCloseListener } = useListen();
const initRef = useRef(false);
- const [themeReady, setThemeReady] = useState(false);
-
- useEffect(() => {
- setThemeReady(true);
- }, [theme]);
const handleNotice = useCallback(
(payload: [string, string]) => {
@@ -445,116 +440,18 @@ const Layout = () => {
}
}, [start_page]);
- if (!themeReady) {
- return (
-
- );
- }
-
if (!routersEles) {
- return (
-
- );
+ return
;
}
return (
-
-
-
-
-
- {/* --- НАЧАЛО ИЗМЕНЕНИЙ --- */}
-
- {/* 1. Убрали класс "layout" с компонента Paper */}
- {
- if (
- OS === "windows" &&
- !["input", "textarea"].includes(
- e.currentTarget.tagName.toLowerCase(),
- ) &&
- !e.currentTarget.isContentEditable
- ) {
- e.preventDefault();
- }
- }}
- sx={[
- ({ palette }) => ({ bgcolor: palette.background.paper }),
- OS === "linux"
- ? {
- borderRadius: "8px",
- border: "1px solid var(--divider-color)",
- }
- : {},
- ]}
- >
- {/* 2. Левая колонка ...
ПОЛНОСТЬЮ УДАЛЕНА */}
-
- {/* 3. Оставляем только "правую" часть, которая теперь станет основной */}
- {/* и заставляем ее занять все доступное место */}
-
- {/* 4. Бар-разделитель
тоже удален, он больше не нужен */}
-
-
- {React.cloneElement(routersEles, { key: location.pathname })}
-
-
-
-
- {/* --- КОНЕЦ ИЗМЕНЕНИЙ --- */}
-
+
+
+
+ {React.cloneElement(routersEles, { key: location.pathname })}
+
+
);
};
diff --git a/src/services/states.ts b/src/services/states.ts
index 7bd63ef9..3c7b2ed3 100644
--- a/src/services/states.ts
+++ b/src/services/states.ts
@@ -2,8 +2,8 @@ import { createContextState } from "foxact/create-context-state";
import { useLocalStorage } from "foxact/use-local-storage";
const [ThemeModeProvider, useThemeMode, useSetThemeMode] = createContextState<
- "light" | "dark"
->("light");
+ "light" | "dark" | "system"
+>("system");
export const useEnableLog = () => useLocalStorage("enable-log", false);