feat(web): 命令面板 combobox+可见入口 + sticky 导航壳 + 焦点环统一 + 抽屉锁滚动/关闭按钮 + 主题首帧修复 + 设置徽标/datalist
This commit is contained in:
@@ -26,6 +26,13 @@ function readStoredThemeMode(): ThemeMode {
|
||||
}
|
||||
}
|
||||
|
||||
// 初始模式直接读 ThemeScript 在水合前写入的 <html data-theme>,避免夜读首帧渲染错误图标。
|
||||
// SSR 守卫:服务端无 document → 回落默认(与 ThemeScript 的默认一致)。
|
||||
function initialThemeMode(): ThemeMode {
|
||||
if (typeof document === "undefined") return DEFAULT_THEME_MODE;
|
||||
return normalizeThemeMode(document.documentElement.dataset.theme);
|
||||
}
|
||||
|
||||
function writeStoredThemeMode(mode: ThemeMode) {
|
||||
try {
|
||||
window.localStorage.setItem(THEME_STORAGE_KEY, mode);
|
||||
@@ -35,9 +42,10 @@ function writeStoredThemeMode(mode: ThemeMode) {
|
||||
}
|
||||
|
||||
export function ThemeToggle() {
|
||||
const [mode, setMode] = useState<ThemeMode>(DEFAULT_THEME_MODE);
|
||||
const [mode, setMode] = useState<ThemeMode>(initialThemeMode);
|
||||
|
||||
useEffect(() => {
|
||||
// 水合后以 localStorage 为权威源校正(dataset 已由 ThemeScript 同样依据写入,通常一致)。
|
||||
const initial = readStoredThemeMode();
|
||||
setMode(initial);
|
||||
applyThemeMode(initial);
|
||||
|
||||
Reference in New Issue
Block a user