You've already forked AstralRinth
forked from didirus/AstralRinth
* refactor: migrate to common eslint+prettier configs * fix: prettier frontend * feat: config changes * fix: lint issues * fix: lint * fix: type imports * fix: cyclical import issue * fix: lockfile * fix: missing dep * fix: switch to tabs * fix: continue switch to tabs * fix: rustfmt parity * fix: moderation lint issue * fix: lint issues * fix: ui intl * fix: lint issues * Revert "fix: rustfmt parity" This reverts commit cb99d2376c321d813d4b7fc7e2a213bb30a54711. * feat: revert last rs
39 lines
937 B
TypeScript
39 lines
937 B
TypeScript
import type { Theme } from './themes.ts'
|
|
|
|
interface ThemeSettings {
|
|
preference: Theme | 'system'
|
|
value: Theme
|
|
}
|
|
|
|
export function useThemeSettings(getDefaultTheme?: () => Theme) {
|
|
getDefaultTheme ??= () => 'dark'
|
|
|
|
const $settings = useCookie<ThemeSettings>('color-mode', {
|
|
maxAge: 60 * 60 * 24 * 365 * 10,
|
|
sameSite: 'lax',
|
|
secure: true,
|
|
httpOnly: false,
|
|
path: '/',
|
|
})
|
|
|
|
// reset theme settings to a default value if the cookie is missing or contains invalid value
|
|
if ($settings.value == null || typeof $settings.value !== 'object') {
|
|
$settings.value = {
|
|
preference: 'system',
|
|
value: getDefaultTheme(),
|
|
}
|
|
}
|
|
|
|
return reactive({
|
|
preferred: computed({
|
|
get: () => $settings.value.preference ?? 'system',
|
|
set: (value) => ($settings.value.preference = value),
|
|
}),
|
|
|
|
active: computed({
|
|
get: () => $settings.value.value ?? getDefaultTheme(),
|
|
set: (value) => ($settings.value.value = value),
|
|
}),
|
|
})
|
|
}
|