class ThemeToggle extends HTMLElement { connectedCallback() { this.attachShadow({ mode: 'open' }); this.shadowRoot.innerHTML = `
`; const toggle = this.shadowRoot.querySelector('.toggle'); const slider = this.shadowRoot.querySelector('.slider'); // Check for saved theme preference or use system preference const savedTheme = localStorage.getItem('darkMode'); const systemDark = window.matchMedia('(prefers-color-scheme: dark)').matches; if (savedTheme === null ? systemDark : savedTheme === 'true') { document.documentElement.classList.add('dark'); toggle.classList.add('dark'); slider.classList.add('dark'); } // Add click event listener this.shadowRoot.querySelector('.toggle-container').addEventListener('click', () => { const isDark = document.documentElement.classList.toggle('dark'); toggle.classList.toggle('dark'); slider.classList.toggle('dark'); localStorage.setItem('darkMode', isDark); // Dispatch event for other components to listen to document.dispatchEvent(new CustomEvent('themeChanged', { detail: { isDark } })); }); // Initialize feather icons feather.replace(); } } customElements.define('theme-toggle', ThemeToggle);