update ui and add new audio components

This commit is contained in:
2026-03-14 00:45:15 -07:00
parent aa3f23c92c
commit 843c2fe96f
13 changed files with 2458 additions and 155 deletions

View File

@@ -140,6 +140,28 @@
return Boolean(target.closest(AUTO_COLLAPSE_ENTRY_SELECTOR));
}
function getAutoCollapseLayoutFromTarget(target) {
if (!(target instanceof Element)) {
return null;
}
if (target.closest(AUTO_COLLAPSE_IGNORE_SELECTOR)) {
return null;
}
const entry = target.closest(AUTO_COLLAPSE_ENTRY_SELECTOR);
if (!(entry instanceof Element)) {
return null;
}
const panel = entry.closest("aside.planet-list-panel, aside.tarot-list-panel, aside.kab-tree-panel");
if (!(panel instanceof HTMLElement)) {
return null;
}
return resolveLayoutTarget(panel);
}
function scheduleAutoCollapse(layout) {
if (!(layout instanceof HTMLElement)) {
return;
@@ -151,46 +173,35 @@
}
function initializeSidebarAutoCollapse() {
const layouts = document.querySelectorAll(".planet-layout, .tarot-layout, .kab-layout");
if (!document.body || document.body.dataset.sidebarAutoCollapseReady === "1") {
return;
}
layouts.forEach((layout) => {
document.body.dataset.sidebarAutoCollapseReady = "1";
document.addEventListener("click", (event) => {
const target = event.target instanceof Element ? event.target : null;
const layout = getAutoCollapseLayoutFromTarget(target);
if (!(layout instanceof HTMLElement)) {
return;
}
const panel = Array.from(layout.children).find((child) => (
child instanceof HTMLElement
&& child.matches("aside.planet-list-panel, aside.tarot-list-panel, aside.kab-tree-panel")
));
scheduleAutoCollapse(layout);
}, true);
if (!(panel instanceof HTMLElement) || panel.dataset.sidebarAutoCollapseReady === "1") {
document.addEventListener("keydown", (event) => {
if (event.key !== "Enter" && event.key !== " ") {
return;
}
panel.dataset.sidebarAutoCollapseReady = "1";
const target = event.target instanceof Element ? event.target : null;
const layout = getAutoCollapseLayoutFromTarget(target);
if (!(layout instanceof HTMLElement)) {
return;
}
panel.addEventListener("click", (event) => {
const target = event.target instanceof Element ? event.target : null;
if (!shouldAutoCollapseFromEvent(panel, target)) {
return;
}
scheduleAutoCollapse(layout);
});
panel.addEventListener("keydown", (event) => {
if (event.key !== "Enter" && event.key !== " ") {
return;
}
const target = event.target instanceof Element ? event.target : null;
if (!shouldAutoCollapseFromEvent(panel, target)) {
return;
}
scheduleAutoCollapse(layout);
});
});
scheduleAutoCollapse(layout);
}, true);
}
function initializeSidebarPopouts() {
@@ -361,6 +372,7 @@
const nextOpen = Boolean(isOpen);
topbarEl.classList.toggle("is-menu-open", nextOpen);
document.body.classList.toggle("topbar-menu-open", nextOpen);
menuToggleEl.setAttribute("aria-expanded", nextOpen ? "true" : "false");
menuToggleEl.textContent = nextOpen ? "Close" : "Menu";
menuToggleEl.setAttribute("aria-label", nextOpen ? "Close navigation menu" : "Open navigation menu");