You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.3 KiB
40 lines
1.3 KiB
const localStorageKey = 'theme';
|
|
|
|
const isDark = () => {
|
|
if (localStorage.getItem(localStorageKey) === 'dark') return true;
|
|
if (localStorage.getItem(localStorageKey) === 'light') return false;
|
|
return window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
}
|
|
|
|
const setupThemeToggle = () => {
|
|
toggleVisibility = (dark) => {
|
|
const themeToggleDarkIcon = document.getElementById('theme-toggle-dark-icon');
|
|
const themeToggleLightIcon = document.getElementById('theme-toggle-light-icon');
|
|
if (themeToggleDarkIcon == null || themeToggleLightIcon == null) return;
|
|
const show = dark ? themeToggleLightIcon : themeToggleDarkIcon;
|
|
const hide = dark ? themeToggleDarkIcon : themeToggleLightIcon;
|
|
show.classList.remove('hidden', 'text-transparent');
|
|
hide.classList.add('hidden', 'text-transparent');
|
|
if (dark) {
|
|
document.documentElement.classList.add('dark')
|
|
} else {
|
|
document.documentElement.classList.remove('dark')
|
|
}
|
|
try { localStorage.setItem(localStorageKey, dark ? 'dark' : 'light') } catch (_err) { }
|
|
}
|
|
toggleVisibility(isDark())
|
|
document.getElementById('theme-toggle').addEventListener('click', function () {
|
|
toggleVisibility(!isDark())
|
|
});
|
|
}
|
|
|
|
const darkModeHook = {
|
|
mounted() {
|
|
setupThemeToggle();
|
|
},
|
|
updated() {
|
|
},
|
|
}
|
|
|
|
export default darkModeHook;
|