redesign the homepage
Build & Deploy / Build & Push Docker Image (push) Failing after 47s
Build & Deploy / Deploy to VPS (push) Has been skipped
Test / API Unit Tests (push) Failing after 5m4s
Test / Marketplace Unit Tests (push) Failing after 4m55s
Test / Admin Unit Tests (push) Successful in 9m37s
Test / Dashboard Unit Tests (push) Successful in 9m37s
Test / API Integration Tests (push) Successful in 9m54s
Build & Deploy / Build & Push Docker Image (push) Failing after 47s
Build & Deploy / Deploy to VPS (push) Has been skipped
Test / API Unit Tests (push) Failing after 5m4s
Test / Marketplace Unit Tests (push) Failing after 4m55s
Test / Admin Unit Tests (push) Successful in 9m37s
Test / Dashboard Unit Tests (push) Successful in 9m37s
Test / API Integration Tests (push) Successful in 9m54s
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
import {
|
||||
isThemePreference,
|
||||
resolveTheme,
|
||||
themeCookie,
|
||||
themeCookieMaxAgeSeconds,
|
||||
themeStorageKey,
|
||||
type ThemePreference,
|
||||
} from './config';
|
||||
|
||||
export const themePreferenceEvent = 'rentaldrivego:theme-preference';
|
||||
|
||||
export function applyTheme(preference: ThemePreference): void {
|
||||
const systemDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
|
||||
const resolved = resolveTheme(preference, systemDark);
|
||||
const root = document.documentElement;
|
||||
root.dataset.themePreference = preference;
|
||||
root.dataset.theme = resolved;
|
||||
}
|
||||
|
||||
export function persistTheme(preference: ThemePreference): void {
|
||||
try {
|
||||
window.localStorage.setItem(themeStorageKey, preference);
|
||||
} catch {
|
||||
// Storage can be unavailable; the first-party cookie remains canonical.
|
||||
}
|
||||
|
||||
const secure = window.location.protocol === 'https:' ? '; Secure' : '';
|
||||
document.cookie =
|
||||
[
|
||||
`${themeCookie}=${encodeURIComponent(preference)}`,
|
||||
'Path=/',
|
||||
`Max-Age=${themeCookieMaxAgeSeconds}`,
|
||||
'SameSite=Lax',
|
||||
].join('; ') + secure;
|
||||
applyTheme(preference);
|
||||
window.dispatchEvent(
|
||||
new CustomEvent<ThemePreference>(themePreferenceEvent, { detail: preference }),
|
||||
);
|
||||
}
|
||||
|
||||
export function currentThemePreference(): ThemePreference {
|
||||
const value = document.documentElement.dataset.themePreference;
|
||||
return isThemePreference(value) ? value : 'system';
|
||||
}
|
||||
Reference in New Issue
Block a user