1
0
Files
AstralRinth/apps/frontend/src/plugins/theme/theme-settings.ts
Cal H. 2aabcf36ee refactor: migrate to common eslint+prettier configs (#4168)
* 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
2025-08-14 20:48:38 +00:00

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),
}),
})
}