fix: address PR review feedback

- Use unique ID prefix for clipPath to avoid duplicate ID issues
- Add cleanup function to initializeTheme to prevent memory leak
- Change tooltip to show action description instead of current theme name
This commit is contained in:
XYenon
2025-12-24 00:18:44 +08:00
parent 5f7df33469
commit 961cc802b2
3 changed files with 22 additions and 14 deletions

View File

@@ -15,7 +15,7 @@ interface ThemeState {
resolvedTheme: ResolvedTheme;
setTheme: (theme: Theme) => void;
cycleTheme: () => void;
initializeTheme: () => void;
initializeTheme: () => () => void;
}
const getSystemTheme = (): ResolvedTheme => {
@@ -60,16 +60,23 @@ export const useThemeStore = create<ThemeState>()(
setTheme(theme);
// 监听系统主题变化(仅在 auto 模式下生效)
if (window.matchMedia) {
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
const { theme: currentTheme } = get();
if (currentTheme === 'auto') {
const resolved = getSystemTheme();
applyTheme(resolved);
set({ resolvedTheme: resolved });
}
});
if (!window.matchMedia) {
return () => {};
}
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
const listener = () => {
const { theme: currentTheme } = get();
if (currentTheme === 'auto') {
const resolved = getSystemTheme();
applyTheme(resolved);
set({ resolvedTheme: resolved });
}
};
mediaQuery.addEventListener('change', listener);
return () => mediaQuery.removeEventListener('change', listener);
},
}),
{