hololake-system-architecture/product-source/hololake-platform/src/lib/guanghuTheme.ts

55 lines
1.5 KiB
TypeScript
Raw Normal View History

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.
}
}