document.addEventListener("DOMContentLoaded", () => { const input = document.getElementById("app-search-input"); if (!input) return; const searchEmpty = document.getElementById("search-empty"); const navSections = Array.from(document.querySelectorAll(".sidebar [data-section]")); const navGroups = navSections.filter((section) => section.classList.contains("nav-group")); // Guarda quais grupos já estavam abertos manualmente antes da busca começar, pra // restaurar esse estado exato quando o campo for limpo — sem isso, um grupo que a // busca abre pra mostrar o resultado ficava aberto pra sempre, mesmo sem busca ativa. let gruposAbertosAntesDaBusca = null; input.addEventListener("input", () => { const term = input.value.trim().toLowerCase(); const cards = Array.from(document.querySelectorAll("#app-card-grid .app-card")); let visibleCards = 0; cards.forEach((card) => { const label = card.querySelector(".app-card__label").textContent.toLowerCase(); const match = !term || label.includes(term); card.hidden = !match; if (match) visibleCards += 1; }); if (searchEmpty) searchEmpty.hidden = !term || visibleCards !== 0 || cards.length === 0; if (term && !gruposAbertosAntesDaBusca) { gruposAbertosAntesDaBusca = new Set(navGroups.filter((group) => group.classList.contains("is-open"))); } navSections.forEach((section) => { if (section.hidden) return; // respeita a visibilidade por persona const text = section.textContent.toLowerCase(); const match = !term || text.includes(term); section.classList.toggle("is-search-hidden", !match); section.style.display = match ? "" : "none"; if (term && section.classList.contains("nav-group")) { section.classList.toggle("is-open", match); } }); if (!term && gruposAbertosAntesDaBusca) { navGroups.forEach((group) => { group.classList.toggle("is-open", gruposAbertosAntesDaBusca.has(group)); }); gruposAbertosAntesDaBusca = null; } }); });