import './bootstrap'; const menuButton = document.querySelector('[data-menu-toggle]'); const menuPanel = document.querySelector('[data-menu-panel]'); menuButton?.addEventListener('click', () => { const open = menuPanel?.classList.toggle('open') ?? false; menuButton.setAttribute('aria-expanded', String(open)); menuButton.textContent = open ? '×' : '☰'; }); document.querySelectorAll('[data-menu-panel] a').forEach((link) => { link.addEventListener('click', () => { menuPanel?.classList.remove('open'); menuButton?.setAttribute('aria-expanded', 'false'); if (menuButton) menuButton.textContent = '☰'; }); }); const adminSidebar = document.querySelector('#adminSidebar'); const adminOverlay = document.querySelector('[data-admin-overlay]'); const setAdminMenu = (open) => { adminSidebar?.classList.toggle('open', open); adminOverlay?.classList.toggle('open', open); document.body.classList.toggle('admin-menu-open', open); }; document.querySelector('[data-admin-open]')?.addEventListener('click', () => setAdminMenu(true)); document.querySelector('[data-admin-close]')?.addEventListener('click', () => setAdminMenu(false)); adminOverlay?.addEventListener('click', () => setAdminMenu(false)); const adminThemeButtons = document.querySelectorAll('[data-admin-theme]'); const adminThemeMedia = window.matchMedia('(prefers-color-scheme: dark)'); const applyAdminTheme = (preference, persist = true) => { if (!['light', 'dark', 'system'].includes(preference)) preference = 'system'; const resolved = preference === 'system' ? (adminThemeMedia.matches ? 'dark' : 'light') : preference; document.documentElement.dataset.adminTheme = resolved; document.documentElement.dataset.adminThemePreference = preference; if (persist) localStorage.setItem('beatbook-admin-theme', preference); adminThemeButtons.forEach((button) => { const active = button.dataset.adminTheme === preference; button.classList.toggle('active', active); button.setAttribute('aria-pressed', String(active)); }); }; if (adminThemeButtons.length) { applyAdminTheme(localStorage.getItem('beatbook-admin-theme') || 'system', false); adminThemeButtons.forEach((button) => button.addEventListener('click', () => applyAdminTheme(button.dataset.adminTheme))); adminThemeMedia.addEventListener?.('change', () => { if ((localStorage.getItem('beatbook-admin-theme') || 'system') === 'system') applyAdminTheme('system', false); }); }