function initTabs(container, { initialTab = null, onSelect = (name) => {}, }) { const buttons = Array.from(container.querySelectorAll("[data-tab-button]")); const tabs = Array.from(container.querySelectorAll("[data-tab]")); const firstTab = tabs[0].getAttribute("data-tab"); function selectTab(name, { sendEvent = true } = {}) { if (!document.querySelector(`[data-tab="${name}"]`)) { console.warn("no tab found with name", name); return selectTab(firstTab, initial); } for (const tab of tabs) { tab.hidden = tab.getAttribute("data-tab") !== name; } for (const button of buttons) { button.classList.toggle("tab-button-active", button.getAttribute("data-tab-button") === name); } if (sendEvent) { onSelect(name); } } selectTab(initialTab || firstTab, { sendEvent: false }); for (const button of buttons) { button.addEventListener("click", () => { selectTab(button.getAttribute("data-tab-button")); }); } return { selectTab, }; }