class CustomSidebar extends HTMLElement { constructor() { super(); this.darkMode = false; } connectedCallback() { this.attachShadow({ mode: 'open' }); this.render(); this.setupEventListeners(); } render() { this.shadowRoot.innerHTML = ` `; } setupEventListeners() { const toggleBtn = this.shadowRoot.querySelector('.toggle-btn'); const menuToggle = this.shadowRoot.querySelector('.menu-toggle'); const sidebar = this.shadowRoot.querySelector('.sidebar'); const dropdown = this.shadowRoot.querySelector('.dropdown'); // Toggle sidebar collapse menuToggle.addEventListener('click', () => { this.collapsed = !this.collapsed; sidebar.classList.toggle('collapsed', this.collapsed); this.saveState(); }); // Toggle dark mode toggleBtn.addEventListener('click', () => { this.darkMode = !this.darkMode; document.documentElement.classList.toggle('dark', this.darkMode); this.saveState(); // Dispatch custom event for other components this.dispatchEvent(new CustomEvent('darkModeToggle', { detail: { darkMode: this.darkMode }, bubbles: true })); }); // Toggle dropdown dropdown.addEventListener('click', () => { dropdown.classList.toggle('active'); }); // Initialize from localStorage this.loadState(); feather.replace(); } saveState() { localStorage.setItem('sidebarCollapsed', this.collapsed); localStorage.setItem('darkMode', this.darkMode); } loadState() { const collapsed = localStorage.getItem('sidebarCollapsed') === 'true'; const darkMode = localStorage.getItem('darkMode') === 'true'; if (collapsed) { this.collapsed = true; this.shadowRoot.querySelector('.sidebar').classList.add('collapsed'); } if (darkMode) { this.darkMode = true; document.documentElement.classList.add('dark'); } } } customElements.define('custom-sidebar', CustomSidebar); // Initialize dark mode if set document.addEventListener('DOMContentLoaded', () => { if (localStorage.getItem('darkMode') === 'true') { document.documentElement.classList.add('dark'); } });