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 ? themeToggleDarkIcon : themeToggleLightIcon const hide = dark ? themeToggleLightIcon : themeToggleDarkIcon 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;