import { getUser, clearToken } from '../../lib/auth.mjs'; import { router } from '../../lib/router.mjs'; const NAV = [ { label: 'Dashboard', href: '/', icon: 'layout-dashboard', section: 'main' }, { label: 'Work Orders', href: '/work-orders', icon: 'clipboard-list', section: 'main' }, { label: 'People', href: '/registry/people', icon: 'users', section: 'resources' }, { label: 'Vehicles', href: '/registry/vehicles', icon: 'truck', section: 'resources' }, { label: 'Equipment', href: '/registry/equipment', icon: 'wrench', section: 'resources' }, { label: 'Materials', href: '/registry/materials', icon: 'package', section: 'resources' }, { label: 'Profiles', href: '/registry/profiles', icon: 'layout-template', section: 'resources' }, { label: 'Reports', href: '/reports', icon: 'bar-chart-2', section: 'operations' }, ]; const ADMIN_NAV = [ { label: 'Users', href: '/users', icon: 'user-cog' }, { label: 'Settings', href: '/settings', icon: 'settings' }, ]; class AppSidebar extends HTMLElement { #collapsed = localStorage.getItem('sidebar-collapsed') === 'true'; connectedCallback() { this.#render(); this.#listenRoute(); } #listenRoute() { window.addEventListener('hashchange', () => this.#updateActive()); } #toggle() { this.#collapsed = !this.#collapsed; localStorage.setItem('sidebar-collapsed', this.#collapsed); const appRoot = document.querySelector('app-root'); if (appRoot) appRoot.classList.toggle('collapsed', this.#collapsed); this.#render(); } #updateActive() { const path = decodeURIComponent(location.hash.slice(1)) || '/'; this.querySelectorAll('.nav-item').forEach(el => { const href = el.dataset.href; const active = href === '/' ? path === '/' : path.startsWith(href); el.classList.toggle('active', active); }); } #navItemHTML(item, currentPath) { const active = item.href === '/' ? currentPath === '/' : currentPath.startsWith(item.href); return ` ${item.label} `; } #render() { const user = getUser(); const path = decodeURIComponent(location.hash.slice(1)) || '/'; const c = this.#collapsed; const appRoot = document.querySelector('app-root'); if (appRoot) appRoot.classList.toggle('collapsed', c); const initials = (user?.displayName || user?.username || 'U') .split(' ').map(w => w[0]).join('').slice(0, 2).toUpperCase(); this.innerHTML = `