@flexilla/utilities
Version:
Utilities package for flexilla library
41 lines (40 loc) • 1.84 kB
JavaScript
import { setAttributes as v } from "./dom-utilities.js";
import { $getEl as f, $ as u } from "./selector.js";
const b = (r) => {
const { trigger: s, targets: i, onToggle: n } = r, e = f(s);
let t = !1;
(() => {
for (const a of i) {
const d = f(a.element);
v(d, a.attributes.initial), t = !0;
}
})(), e.addEventListener("click", () => {
for (const a of i) {
const d = f(a.element), o = t ? a.attributes.to : a.attributes.initial;
v(d, o);
}
t = !t, n == null || n({ isExpanded: !t }), e.ariaExpanded = t ? "false" : "true";
});
}, m = ({ navbarElement: r, onToggle: s }) => {
const i = typeof r == "string" ? u(r) : r;
if (!(i instanceof HTMLElement)) return;
const n = i.getAttribute("id"), e = u(`[data-nav-trigger][data-toggle-nav=${n}]`), t = u(`[data-nav-overlay][data-navbar-id=${n}]`), c = () => {
const o = i.dataset.state || "close", l = o === "open" ? "close" : "open";
i.setAttribute("data-state", l), e && (e.ariaExpanded = o === "open" ? "false" : "true"), t && (t.ariaHidden = "true", t.setAttribute("data-state", l)), s == null || s({ isExpanded: l === "open" });
};
e && e.addEventListener("click", c);
const a = () => {
i.setAttribute("data-state", "close"), e == null || e.setAttribute("aria-expanded", "false"), t && t.setAttribute("data-state", "close"), s == null || s({ isExpanded: !1 });
};
return i.addEventListener("click", a), t instanceof HTMLElement && !t.hasAttribute("data-static-overlay") && t.addEventListener("click", a), {
cleanup: () => {
t instanceof HTMLElement && !t.hasAttribute("data-static-overlay") && (i.removeEventListener("click", a), e && e.removeEventListener("click", c), t.removeEventListener("click", a));
},
close: a,
toggle: c
};
};
export {
b as actionToggler,
m as toggleNavbar
};