/* KA Tabbar v1 — canonique ka-ui.git/nav/ka-tabbar.js Version vanilla (sites sans React : sorti-ka, api-ka, ka-stats…). Requiert ka-tabbar.css dans la page. Usage : const bar = KaTabbar.mount({ theme: "light" | "dark", accent: "#d6336c", // couleur signature tabs: [ { key: "decouvrir", label: "Découvrir", icon: "compass", href: "/" }, { key: "recherche", label: "Recherche", icon: "search", onPress: () => {…} }, ], }); bar.setActive("decouvrir"); // pilotage par le routeur du site Les reçoivent data-nav pour être interceptés par les routeurs SPA maison qui délèguent sur [data-nav]. */ (function () { "use strict"; var ICONS = { compass: '', search: '', heart: '', user: '', map: '', pin: '', tag: '', home: '', grid: '', store: '', basket: '', target: '', trendup: '', receipt: '', book: '', chart: '', calendar: '', }; function svg(name) { return ( '" ); } window.KaTabbar = { mount: function (cfg) { var nav = document.createElement("nav"); nav.className = "ka-tabbar" + (cfg.theme === "dark" ? " ka-tabbar--dark" : ""); nav.setAttribute("aria-label", "Navigation mobile"); if (cfg.accent) nav.style.setProperty("--ktb-accent", cfg.accent); (cfg.tabs || []).forEach(function (t) { var el; if (t.onPress) { el = document.createElement("button"); el.type = "button"; el.addEventListener("click", t.onPress); } else { el = document.createElement("a"); el.href = t.href || "#"; el.setAttribute("data-nav", ""); } el.dataset.tab = t.key || t.label; el.innerHTML = svg(t.icon) + t.label; nav.appendChild(el); }); document.body.appendChild(nav); return { el: nav, setActive: function (key) { nav.querySelectorAll("a,button").forEach(function (b) { b.classList.toggle("active", b.dataset.tab === key); }); }, }; }, }; })();