{"version":3,"sources":["a11y-tabs-automatic.js"],"names":["TabsAutomatic","groupNode","_classCallCheck","this","tablistNode","tabs","firstTab","Array","from","querySelectorAll","tabpanels","i","length","lastTab","document","getElementById","tab","getAttribute","setAttribute","push","tabpanel","tabIndex","onClick","bind","addEventListener","setSelectedTab","currentTab","setFocus","classList","remove","focus","removeAttribute","add","index","indexOf","event","currentTarget","flag","key","setSelectedToPreviousTab","tgt","setSelectedToNextTab","stopPropagation","preventDefault","window","tablists"],"mappings":"uZAYMA,c,WACJ,SAAAA,EAAYC,GAAWC,gBAAAC,KAAAH,GACrBG,KAAKC,YAAcH,EAEnBE,KAAKE,KAAO,GAEZF,KAAKG,SAAW,KANdN,KAAAA,QAOa,KANMG,KAAAE,KAAAE,MAAAC,KAAAL,KAAAC,YAAAK,iBAAA,eASrBN,KAAKO,UAAY,GANjB,IAAKL,IAALM,EAAY,EAAZA,EAAAR,KAAAE,KAAAO,OAAAD,GAAA,EAAA,CAEA,IAAKL,EAAAA,KAAWD,KAAhBM,GACKE,EAAUC,SAAfC,eAAAC,EAAAC,aAAA,kBAGAD,EAAKN,UAAY,EAOfM,EAAIE,aAAa,gBAAiB,SALpCf,KAAKO,UAAYS,KAAGC,GAElBJ,EAAII,iBAAWN,UAASC,KAAAA,UAAmBE,KAAAA,OAE3CD,EAAIK,iBAAJ,QAAAlB,KAAAmB,QAAAC,KAAApB,OAEKO,KAAAA,WAELM,KAAIQ,SAAAA,GAMJrB,KAAKU,QAAUG,EADdb,KAAAsB,eAAAtB,KAAAG,UAAA,G,4DAEFoB,EAAAC,GAMuB,kBAAbA,IAJXA,GAAKF,GAOL,IAAK,IAAId,EAAI,EAAGA,EAAIR,KAAKE,KAAKO,OAAQD,GAAK,EAAG,CAC5C,IAAMK,EAAMb,KAAKE,KAAKM,GAElBe,IAAeV,GANrBA,EAAIE,aAAA,gBAA+B,QACjCS,EAAAA,gBAAA,YACDxB,KAAAO,UAAAC,GAAAiB,UAAAC,OAAA,aAQOF,GAPRX,EAAKc,UAGHd,EAAIU,aAAU,gBAAU,SACtBV,EAAAA,UAAIE,EACJF,KAAGN,UAACqB,GAAAA,UAAgBC,IAApB,iB,+CAICN,GAGDV,IAAAb,KAAAG,SACAH,KAAAsB,eAAAtB,KAAkByB,UAErBK,EAAA9B,KAAAE,KAAA6B,QAAAR,GACFvB,KAAAsB,eAAAtB,KAAAE,KAAA4B,EAAA,O,2CAGCP,GAGEA,IAAKD,KAAeZ,QACrBV,KAFDsB,eAEOtB,KAAAG,WAEL2B,EAAKR,KAAAA,KAAAA,QAAeC,GACrBvB,KAAAsB,eAAAtB,KAAAE,KAAA4B,EAAA,O,gCAgBOE,GAVR,IAAIT,EAAAA,EAAUU,cACZC,GAAKZ,EAELQ,OAAAA,EAAQK,KACR,IAAA,YACDnC,KAAAoC,yBAAAC,GACFH,GAAA,EAED,MAYI,IAAK,aACHlC,KAAKsC,qBAAqBD,GAC1BH,GAAO,EAXX,MAcE,IAAK,OAXPlC,KAAAsB,eAAAtB,KAAAG,UACE+B,GAAK,EACH,MAEA,IAAA,MAaAlC,KAAKsB,eAAetB,KAAKU,SAX3BwB,GAAK,EAOHA,IACAF,EAAAO,kBAaFP,EAAMQ,oB,8BARJR,GAaJhC,KAAKsB,eAAeU,EAAMC,mB,KAP1BQ,OAAApB,iBAAU,OAAA,WAGT,IAFCW,IAAAA,EAAMO,SAAAA,iBAAN,8BAED/B,EAAA,EAAAA,EAAAkC,EAAAjC,OAAAD,IACF,IAAAX,cAAA6C,EAAAlC","file":"a11y-tabs-automatic.js","sourcesContent":["/*\n * This software or document includes material copied from or derived from Example of Tabs with Automatic Activation https://www.w3.org/WAI/ARIA/apg/patterns/tabs/examples/tabs-automatic/.\n * Copyright © 2023 World Wide Web Consortium.\n * https://www.w3.org/Consortium/Legal/2023/doc-license\n */\n\n/* eslint class-methods-use-this: \"off\" */\n/* eslint no-new: \"off\" */\n/* eslint no-param-reassign: \"off\" */\n\n'use strict';\n\nclass TabsAutomatic {\n constructor(groupNode) {\n this.tablistNode = groupNode;\n\n this.tabs = [];\n\n this.firstTab = null;\n this.lastTab = null;\n\n this.tabs = Array.from(this.tablistNode.querySelectorAll('[role=tab]'));\n this.tabpanels = [];\n\n for (var i = 0; i < this.tabs.length; i += 1) {\n var tab = this.tabs[i];\n var tabpanel = document.getElementById(tab.getAttribute('aria-controls'));\n\n tab.tabIndex = -1;\n tab.setAttribute('aria-selected', 'false');\n this.tabpanels.push(tabpanel);\n\n tab.addEventListener('keydown', this.onKeydown.bind(this));\n tab.addEventListener('click', this.onClick.bind(this));\n\n if (!this.firstTab) {\n this.firstTab = tab;\n }\n this.lastTab = tab;\n }\n\n this.setSelectedTab(this.firstTab, false);\n }\n\n setSelectedTab(currentTab, setFocus) {\n if (typeof setFocus !== 'boolean') {\n setFocus = true;\n }\n for (let i = 0; i < this.tabs.length; i += 1) {\n const tab = this.tabs[i];\n\n if (currentTab === tab) {\n tab.setAttribute('aria-selected', 'true');\n tab.removeAttribute('tabindex');\n this.tabpanels[i].classList.remove('is-hidden');\n if (setFocus) {\n tab.focus();\n }\n } else {\n tab.setAttribute('aria-selected', 'false');\n tab.tabIndex = -1;\n this.tabpanels[i].classList.add('is-hidden');\n }\n }\n }\n\n setSelectedToPreviousTab(currentTab) {\n let index;\n\n if (currentTab === this.firstTab) {\n this.setSelectedTab(this.lastTab);\n } else {\n index = this.tabs.indexOf(currentTab);\n this.setSelectedTab(this.tabs[index - 1]);\n }\n }\n\n setSelectedToNextTab(currentTab) {\n let index;\n\n if (currentTab === this.lastTab) {\n this.setSelectedTab(this.firstTab);\n } else {\n index = this.tabs.indexOf(currentTab);\n this.setSelectedTab(this.tabs[index + 1]);\n }\n }\n\n /* EVENT HANDLERS */\n\n onKeydown(event) {\n const tgt = event.currentTarget;\n let flag = false;\n\n switch (event.key) {\n case 'ArrowLeft':\n this.setSelectedToPreviousTab(tgt);\n flag = true;\n break;\n\n case 'ArrowRight':\n this.setSelectedToNextTab(tgt);\n flag = true;\n break;\n\n case 'Home':\n this.setSelectedTab(this.firstTab);\n flag = true;\n break;\n\n case 'End':\n this.setSelectedTab(this.lastTab);\n flag = true;\n break;\n\n default:\n break;\n }\n\n if (flag) {\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n onClick(event) {\n this.setSelectedTab(event.currentTarget);\n }\n}\n\n// Initialize tablist\nwindow.addEventListener('load', function () {\n const tablists = document.querySelectorAll('[role=\"tablist\"].automatic');\n\n for (let i = 0; i < tablists.length; i++) {\n new TabsAutomatic(tablists[i]);\n }\n});\n"]}