(function () { "use strict"; function qs(sel, root) { return (root || document).querySelector(sel); } function qsa(sel, root) { return Array.prototype.slice.call((root || document).querySelectorAll(sel)); } /* Inject clean stroke icon sprite once */ if (!qs("#admin-icon-sprite")) { var sprite = document.createElementNS("http://www.w3.org/2000/svg", "svg"); sprite.id = "admin-icon-sprite"; sprite.setAttribute("aria-hidden", "true"); sprite.style.cssText = "position:absolute;width:0;height:0;overflow:hidden"; sprite.innerHTML = [ '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ].join(""); document.body.insertBefore(sprite, document.body.firstChild); } /* Mobile nav */ var menuBtn = qs("[data-menu-toggle]"); var closeBtns = qsa("[data-menu-close]"); function openNav() { document.body.classList.add("nav-open"); } function closeNav() { document.body.classList.remove("nav-open"); } if (menuBtn) { menuBtn.addEventListener("click", openNav); } closeBtns.forEach(function (btn) { btn.addEventListener("click", closeNav); }); /* Tabs */ qsa("[data-tabs]").forEach(function (root) { var tabs = qsa(".tab", root); var host = root.closest("[data-tabs-host]") || root.parentElement; var panels = qsa(".tab-panel", host); tabs.forEach(function (tab) { tab.addEventListener("click", function () { var id = tab.getAttribute("data-tab"); tabs.forEach(function (t) { t.classList.toggle("is-active", t === tab); }); panels.forEach(function (p) { p.classList.toggle("is-active", p.getAttribute("data-panel") === id); }); }); }); }); /* Locale switcher */ qsa(".locale").forEach(function (group) { qsa("button", group).forEach(function (btn) { btn.addEventListener("click", function () { qsa("button", group).forEach(function (b) { b.classList.remove("is-active"); }); btn.classList.add("is-active"); }); }); }); /* Row select + bulk bar */ function updateBulkBar(scope) { var root = scope || document; var bars = qsa("[data-bulk-bar]", root); bars.forEach(function (bar) { var card = bar.closest(".card") || document; var checked = qsa( 'tbody input[type="checkbox"]:checked', card ).length; bar.classList.toggle("is-visible", checked > 0); var countEl = qs("[data-bulk-count]", bar); if (countEl) { countEl.textContent = checked + (checked === 1 ? " selected" : " selected"); } }); } qsa("[data-select-all]").forEach(function (master) { master.addEventListener("change", function () { var table = master.closest("table") || master.closest(".card"); qsa('tbody input[type="checkbox"]', table).forEach(function (cb) { cb.checked = master.checked; var tr = cb.closest("tr"); if (tr) tr.classList.toggle("is-selected", master.checked); }); updateBulkBar(master.closest(".card")); }); }); qsa('table.data tbody input[type="checkbox"]').forEach(function (cb) { cb.addEventListener("change", function () { var tr = cb.closest("tr"); if (tr) tr.classList.toggle("is-selected", cb.checked); updateBulkBar(cb.closest(".card")); }); }); updateBulkBar(); /* Settings section nav */ function activateSettings(href) { if (!href || href.charAt(0) !== "#") return; qsa("[data-settings-nav] a").forEach(function (a) { a.classList.toggle("is-active", a.getAttribute("href") === href); }); qsa("[data-settings-section]").forEach(function (sec) { sec.classList.toggle("hidden", "#" + sec.id !== href); }); } qsa("[data-settings-nav] a").forEach(function (link) { link.addEventListener("click", function (e) { var href = link.getAttribute("href"); if (!href || href.charAt(0) !== "#") return; e.preventDefault(); activateSettings(href); if (history.replaceState) { history.replaceState(null, "", href); } }); }); if (qsa("[data-settings-nav]").length && location.hash) { activateSettings(location.hash); } /* Stagger reveal on page load */ qsa(".content > *").forEach(function (el, i) { if (el.classList.contains("reveal")) return; el.classList.add("reveal"); if (i > 0 && i < 6) { el.classList.add("reveal-delay-" + Math.min(i, 5)); } }); /* Chart.js dashboard chart */ var chartCanvas = qs("#ordersChart"); if (chartCanvas && typeof Chart !== "undefined") { new Chart(chartCanvas, { type: "bar", data: { labels: [ "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", ], datasets: [ { label: "Orders", data: [4, 6, 5, 8, 7, 10, 9, 5, 7, 11, 9, 13, 10, 14], backgroundColor: "rgba(255, 188, 57, 0.85)", hoverBackgroundColor: "rgba(240, 168, 32, 1)", borderRadius: 6, borderSkipped: false, maxBarThickness: 28, }, ], }, options: { responsive: true, maintainAspectRatio: false, animation: { duration: 900, easing: "easeOutQuart" }, plugins: { legend: { display: false }, tooltip: { backgroundColor: "#111827", padding: 10, cornerRadius: 8, displayColors: false, }, }, scales: { x: { grid: { display: false }, ticks: { color: "#9ca3af", font: { size: 10, family: "Inter" }, }, border: { display: false }, }, y: { beginAtZero: true, grid: { color: "#f3f4f6" }, ticks: { color: "#9ca3af", font: { size: 11, family: "Inter" }, precision: 0, }, border: { display: false }, }, }, }, }); } /* Dashboard state demos */ if (location.search.indexOf("empty=1") !== -1) { qsa("[data-demo-content]").forEach(function (el) { el.classList.add("hidden"); }); qsa("[data-demo-empty]").forEach(function (el) { el.classList.remove("hidden"); }); } if (location.search.indexOf("loading=1") !== -1) { qsa("[data-demo-content]").forEach(function (el) { el.classList.add("hidden"); }); qsa("[data-demo-loading]").forEach(function (el) { el.classList.remove("hidden"); }); } })();