summaryrefslogtreecommitdiff
path: root/frontend/src/lib/theme.ts
blob: ad949a4c3027881d2aa686400a7c24adf050c329 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 主题切换(round3):默认 mint;.theme-amber 类挂 <html> 切到 amber 变量组。
// 两套 token 都是 app.css 里的 CSS 变量组,本模块只负责持久化与挂类。

export type BrandTheme = 'mint' | 'amber';
const KEY = 'sl-brand-theme';

export function currentTheme(): BrandTheme {
  if (typeof document === 'undefined' || typeof localStorage === 'undefined') return 'mint';
  const stored = localStorage.getItem(KEY);
  return stored === 'amber' ? 'amber' : 'mint';
}

export function applyTheme(t: BrandTheme): void {
  if (typeof document === 'undefined') return;
  if (t === 'amber') document.documentElement.classList.add('theme-amber');
  else document.documentElement.classList.remove('theme-amber');
  if (typeof localStorage !== 'undefined') localStorage.setItem(KEY, t);
}

export function toggleTheme(): BrandTheme {
  const next: BrandTheme = currentTheme() === 'mint' ? 'amber' : 'mint';
  applyTheme(next);
  return next;
}

if (typeof document !== 'undefined') {
  applyTheme(currentTheme());
}