/* Global UI helpers loaded by base.html (not by base_login.html — login pages
have no nav and no toasts, so the helpers aren't reachable there).
Two responsibilities for now:
- wireDropdown: open/close + click-outside + Escape for the user menu and
the Admin nav dropdown. Used by _app_header.html.
- More helpers (window.appToast, etc.) added later as the design system
primitives need JS sidecars. */
(function () {
"use strict";
function wireDropdown(triggerId, panelId) {
var trigger = document.getElementById(triggerId);
var panel = document.getElementById(panelId);
if (!trigger || !panel) return;
function setOpen(open) {
trigger.setAttribute("aria-expanded", open ? "true" : "false");
if (open) {
panel.removeAttribute("hidden");
} else {
panel.setAttribute("hidden", "");
}
}
trigger.addEventListener("click", function () {
// No stopPropagation — let the click bubble to the document
// handler so any OTHER open dropdown's handler can close
// itself ("only one menu open at a time" behaviour).
setOpen(trigger.getAttribute("aria-expanded") !== "true");
});
document.addEventListener("click", function (e) {
// Use trigger.contains(target) instead of strict equality —
// clicking the chevron