55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
export const GUANGHU_THEME_STORAGE_KEY = 'guanghu-theme'
|
|
|
|
export const GUANGHU_THEMES = [
|
|
'native',
|
|
'guanghu-native-galaxy',
|
|
'lake-light',
|
|
'lake-dark',
|
|
'aurora-dark',
|
|
'ice-heart',
|
|
'yaoming-purple',
|
|
'starfield-indigo',
|
|
'dawn-gold',
|
|
'tundra-green',
|
|
'peach-mist',
|
|
] as const
|
|
export type GuanghuTheme = typeof GUANGHU_THEMES[number]
|
|
|
|
export const GUANGHU_THEME_LABELS: Record<GuanghuTheme, string> = {
|
|
native: '跟随原生',
|
|
'guanghu-native-galaxy': '光湖原生星系',
|
|
'lake-light': '湖光浅色(亮)',
|
|
'lake-dark': '湖心深色(暗)',
|
|
'aurora-dark': '极光深海',
|
|
'ice-heart': '冰心蓝',
|
|
'yaoming-purple': '曜冥紫',
|
|
'starfield-indigo': '星野靛青',
|
|
'dawn-gold': '晨曦金',
|
|
'tundra-green': '苔原绿',
|
|
'peach-mist': '桃雾晨光',
|
|
}
|
|
|
|
export function normalizeGuanghuTheme(value: unknown): GuanghuTheme {
|
|
return typeof value === 'string' && (GUANGHU_THEMES as readonly string[]).includes(value)
|
|
? value as GuanghuTheme
|
|
: 'native'
|
|
}
|
|
|
|
export function readGuanghuTheme(storage: Pick<Storage, 'getItem'>): GuanghuTheme {
|
|
try {
|
|
const storedTheme = storage.getItem(GUANGHU_THEME_STORAGE_KEY)
|
|
return storedTheme === null
|
|
? 'guanghu-native-galaxy'
|
|
: normalizeGuanghuTheme(storedTheme)
|
|
} catch {
|
|
return 'guanghu-native-galaxy'
|
|
}
|
|
}
|
|
|
|
export function writeGuanghuTheme(storage: Pick<Storage, 'setItem'>, theme: GuanghuTheme): void {
|
|
try {
|
|
storage.setItem(GUANGHU_THEME_STORAGE_KEY, theme)
|
|
} catch {
|
|
// Storage may be unavailable in restricted browser contexts.
|
|
}
|
|
}
|