export function mountAppBar({ onManageAccess } = {}) { const header = document.querySelector('#site-header'); if (!header) throw new Error('Global app bar mount point is missing.'); header.innerHTML = ` Our Recipe Atlas
`; header.insertAdjacentHTML('afterend', ` `); const elements = { menuButton: document.querySelector('#access-menu-button'), profileImage: document.querySelector('#profile-image'), profileName: document.querySelector('#profile-name'), drawer: document.querySelector('#access-drawer'), closeButton: document.querySelector('#close-access-drawer'), backdrop: document.querySelector('#drawer-backdrop'), manageAccessButton: document.querySelector('#open-access-overlay'), drawerUserName: document.querySelector('#drawer-user-name'), drawerUserEmail: document.querySelector('#drawer-user-email'), }; function setOpen(open) { elements.menuButton.setAttribute('aria-expanded', String(open)); elements.drawer.setAttribute('aria-hidden', String(!open)); elements.drawer.hidden = !open; elements.backdrop.hidden = !open; document.body.classList.toggle('drawer-open', open); if (open) elements.closeButton.focus(); else elements.menuButton.focus(); } elements.menuButton.addEventListener('click', () => setOpen(true)); elements.closeButton.addEventListener('click', () => setOpen(false)); elements.backdrop.addEventListener('click', () => setOpen(false)); elements.manageAccessButton.addEventListener('click', () => { setOpen(false); if (onManageAccess) onManageAccess(); else window.location.assign('/?manage-access=1'); }); document.addEventListener('keydown', (event) => { if (event.key === 'Escape' && !elements.drawer.hidden) setOpen(false); }); return { focusMenuButton() { elements.menuButton.focus(); }, setUser(user) { elements.profileName.textContent = user.name || user.email; if (user.picture) { elements.profileImage.src = user.picture; elements.profileImage.alt = `${user.name || user.email} 프로필`; elements.profileImage.hidden = false; } elements.drawerUserName.textContent = user.name || user.email; elements.drawerUserEmail.textContent = user.email; elements.manageAccessButton.hidden = !user.canManageAccess; }, }; }