()
| 1375 | // ─── Catalog panel collapse ─── |
| 1376 | |
| 1377 | function wireCatalogToggle() { |
| 1378 | const toggle = document.getElementById("catalogToggle"); |
| 1379 | const collapseBtn = document.getElementById("sidebarCollapseBtn"); |
| 1380 | const app = document.querySelector(".app"); |
| 1381 | if (!app) return; |
| 1382 | |
| 1383 | const collapsed = localStorage.getItem("stemdeck.catalog.collapsed") === "1"; |
| 1384 | if (collapsed) { |
| 1385 | app.classList.add("cat-collapsed"); |
| 1386 | collapseBtn?.setAttribute("aria-expanded", "false"); |
| 1387 | } |
| 1388 | |
| 1389 | function setSidebarCollapsed(isCollapsed) { |
| 1390 | app.classList.toggle("cat-collapsed", isCollapsed); |
| 1391 | collapseBtn?.setAttribute("aria-expanded", String(!isCollapsed)); |
| 1392 | localStorage.setItem("stemdeck.catalog.collapsed", isCollapsed ? "1" : "0"); |
| 1393 | } |
| 1394 | |
| 1395 | collapseBtn?.addEventListener("click", () => { |
| 1396 | setSidebarCollapsed(!app.classList.contains("cat-collapsed")); |
| 1397 | }); |
| 1398 | |
| 1399 | if (toggle) { |
| 1400 | toggle.addEventListener("click", (e) => { |
| 1401 | // Only expand from within the sidebar body. |
| 1402 | if (!app.classList.contains("cat-collapsed")) return; |
| 1403 | setSidebarCollapsed(false); |
| 1404 | toggle.querySelector("input")?.focus(); |
| 1405 | }); |
| 1406 | toggle.addEventListener("keydown", (e) => { |
| 1407 | if (e.code === "Enter" || e.code === "Space") { e.preventDefault(); toggle.click(); } |
| 1408 | }); |
| 1409 | } |
| 1410 | } |
| 1411 | |
| 1412 | function wireCatalogRailViews() { |
| 1413 | document.querySelector(".rail-library")?.addEventListener("click", () => setCatalogView("library")); |
no test coverage detected