fix: handle system theme change and set color scheme, closes #571 (#607)

This commit is contained in:
Huang Xin
2025-03-14 23:55:27 +08:00
committed by GitHub
parent cd9290240a
commit f0270eec4e
3 changed files with 8 additions and 7 deletions
@@ -36,7 +36,7 @@ const FoliateViewer: React.FC<{
const { getView, setView: setFoliateView, setProgress } = useReaderStore();
const { getViewSettings, setViewSettings } = useReaderStore();
const { getParallels } = useParallelViewStore();
const { themeCode } = useThemeStore();
const { themeCode, isDarkMode } = useThemeStore();
const viewSettings = getViewSettings(bookKey)!;
const [toastMessage, setToastMessage] = useState('');
@@ -129,7 +129,7 @@ const FoliateViewer: React.FC<{
viewRef.current.renderer.setStyles?.(getStyles(viewSettings));
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [themeCode]);
}, [themeCode, isDarkMode]);
useEffect(() => {
if (isViewCreated.current) return;
+3 -4
View File
@@ -14,9 +14,8 @@ export const useTheme = () => {
}, [settings]);
useEffect(() => {
document.documentElement.setAttribute(
'data-theme',
`${themeColor}-${isDarkMode ? 'dark' : 'light'}`,
);
const colorScheme = isDarkMode ? 'dark' : 'light';
document.documentElement.style.setProperty('color-scheme', colorScheme);
document.documentElement.setAttribute('data-theme', `${themeColor}-${colorScheme}`);
}, [themeColor, isDarkMode]);
};
+3 -1
View File
@@ -47,7 +47,9 @@ export const useThemeStore = create<ThemeState>((set, get) => {
if (typeof window !== 'undefined') {
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
const handleSystemThemeChange = () => {
set({ systemIsDarkMode: mediaQuery.matches });
const mode = get().themeMode;
const isDarkMode = mode === 'dark' || (mode === 'auto' && mediaQuery.matches);
set({ systemIsDarkMode: mediaQuery.matches, isDarkMode });
};
mediaQuery.addEventListener('change', handleSystemThemeChange);