@ussebastian/kitdigital
Version:
Kit Digital de la Universidad San Sebastián
3 lines (2 loc) • 1.6 kB
JavaScript
"use strict";exports.Tabs=class{constructor(t,s){this.key=s,this.element=t,this.tablistNode=null,this.tabs=[],this.tabpanels=[],this.firstTab=null,this.lastTab=null}mount(){this.tablistNode=this.element,this.tabs=Array.from(this.tablistNode.querySelectorAll(".uss-tabs__tab")),this.tabpanels=[];for(let t=0;t<this.tabs.length;t+=1){const s=this.tabs[t],e=document.getElementById(s.getAttribute("aria-controls"));s.tabIndex=-1,s.setAttribute("aria-selected","false"),this.tabpanels.push(e),s.addEventListener("keydown",this.onKeydown.bind(this)),s.addEventListener("click",this.onClick.bind(this)),this.firstTab||(this.firstTab=s),this.lastTab=s}this.setSelectedTab(this.firstTab)}setSelectedTab(t){for(let s=0;s<this.tabs.length;s+=1){const e=this.tabs[s];t===e?(e.setAttribute("aria-selected","true"),e.removeAttribute("tabindex"),this.tabpanels[s].classList.remove("is-hidden")):(e.setAttribute("aria-selected","false"),e.tabIndex=-1,this.tabpanels[s].classList.add("is-hidden"))}}moveFocusToPreviousTab(t){let s;t===this.firstTab?this.lastTab.focus():(s=this.tabs.indexOf(t),this.tabs[s-1].focus())}moveFocusToNextTab(t){let s;t===this.lastTab?this.firstTab.focus():(s=this.tabs.indexOf(t),this.tabs[s+1].focus())}onKeydown(t){const s=t.currentTarget;let e=!1;switch(t.key){case"ArrowLeft":this.moveFocusToPreviousTab(s),e=!0;break;case"ArrowRight":this.moveFocusToNextTab(s),e=!0;break;case"Home":this.firstTab.focus(),e=!0;break;case"End":this.lastTab.focus(),e=!0}e&&(t.stopPropagation(),t.preventDefault())}onClick(t){this.setSelectedTab(t.currentTarget)}};
//# sourceMappingURL=Tabs.js.map