{"version":3,"sources":["webpack:///./src/js/modules/tabbed-content.js"],"names":["KEYS","DIRECTION","38","40","TabbedContent","this","dom","tabList","el","querySelector","inlineTabs","Array","from","querySelectorAll","externalTabs","sections","panels","rifCtas","rifModule","document","externalTabsIds","map","tab","id","activeIndex","setSelectedPanel","hidePanelFirstTime","showPanel","forEach","inlineTab","index","addEventListener","handleInlineTabClick","bind","handleInlineTabKeydown","externalTab","handleExternalTabClick","handleExternalTabKeydown","rifCta","onRifCtaClick","isMobile","window","innerWidth","hidePanel","activeId","hash","location","isHashOnExternalTab","includes","replace","activeTab","find","panel","indexOf","setTimeout","scrollIntoView","behavior","newUrl","setAttribute","removeAttribute","open","URL","href","history","pushState","toString","close","e","tabs","key","keyCode","preventDefault","length","focus","target","currentTarget","setActivePanel","setActivePanelByKey","rifTop","offsetTop","documentElement","style","scrollTo","top","left","Component"],"mappings":"qoDAIA,IAAMA,EACC,GADDA,EAEE,GAFFA,EAGA,GAHAA,EAIE,GAIFC,EAAY,CAChBC,IAAK,EACLC,GAAI,GAGAC,E,sWACJ,WACEC,KAAKC,IAAM,CACTC,QAASF,KAAKG,GAAGC,cAAc,aAC/BC,WAAYC,MAAMC,KAAKP,KAAKG,GAAGK,iBAAiB,iBAChDC,aAAcH,MAAMC,KAAKP,KAAKG,GAAGK,iBAAiB,mBAClDE,SAAUV,KAAKG,GAAGC,cAAc,iBAChCO,OAAQL,MAAMC,KAAKP,KAAKG,GAAGK,iBAAiB,wBAC5CI,QAASN,MAAMC,KAAKP,KAAKG,GAAGK,iBAAiB,2BAC7CK,UAAWC,SAASV,cAAc,SAGpCJ,KAAKe,gBAAkBf,KAAKC,IAAIQ,aAAaO,KAAI,SAAAC,GAAG,OAAIA,EAAIC,MAE5DlB,KAAKmB,YAAcnB,KAAKoB,mBAEC,IAArBpB,KAAKmB,aACPnB,KAAKqB,qBAEPrB,KAAKsB,UAAUtB,KAAKmB,e,0BAItB,WAAe,WACbnB,KAAKC,IAAII,WAAWkB,SAAQ,SAACC,EAAWC,GACtCD,EAAUC,MAAQA,EAClBD,EAAUE,iBAAiB,QAAS,EAAKC,qBAAqBC,KAAK,IACnEJ,EAAUE,iBAAiB,UAAW,EAAKG,uBAAuBD,KAAK,OAGzE5B,KAAKC,IAAIQ,aAAac,SAAQ,SAACO,EAAaL,GAC1CK,EAAYL,MAAQA,EACpBK,EAAYJ,iBAAiB,QAAS,EAAKK,uBAAuBH,KAAK,IACvEE,EAAYJ,iBAAiB,UAAW,EAAKM,yBAAyBJ,KAAK,OAEzE5B,KAAKC,IAAIY,WACXb,KAAKC,IAAIW,QAAQW,SAAQ,SAAAU,GACvBA,EAAOP,iBAAiB,QAAS,EAAKQ,cAAcN,KAAK,S,4BAK/D,SAAeH,GACb,IAEMU,EADaC,OAAOC,WADD,IAIzB,OAAIrC,KAAKmB,cAAgBM,GAASU,GAChCnC,KAAKsC,UAAUtC,KAAKmB,kBACpBnB,KAAKmB,YAAc,OAII,OAArBnB,KAAKmB,aAAwBgB,GAC/BnC,KAAKmB,YAAcM,OACnBzB,KAAKsB,UAAUtB,KAAKmB,aAAa,SAI/BnB,KAAKmB,cAAgBM,IACvBzB,KAAKsC,UAAUtC,KAAKmB,aACpBnB,KAAKmB,YAAcM,EACnBzB,KAAKsB,UAAUtB,KAAKmB,aAAa,O,8BAIrC,WAAmB,IAGboB,EAHa,OACXC,EAAOJ,OAAOK,SAASD,KACvBE,EAAsB1C,KAAKe,gBAAgB4B,SAASH,EAAKI,QAAQ,IAAK,KAE5E,GAAIJ,GAAQE,EAAqB,CAC/B,IAAMG,EAAY7C,KAAKC,IAAIQ,aAAaqC,MAAK,SAAAC,GAAK,OAAIA,EAAM7B,KAAOsB,EAAKI,QAAQ,IAAK,OACrFL,EAAWvC,KAAKC,IAAIQ,aAAauC,QAAQH,GACzCI,YAAW,kBAAM,EAAK9C,GAAG+C,eAAe,CAAEC,SAAU,aAAa,UAEjEZ,EAAW,EAGb,OAAOA,I,uBAIT,SAAUd,EAAO2B,GACf,IAAMtB,EAAc9B,KAAKC,IAAIQ,aAAagB,GACpCD,EAAYxB,KAAKC,IAAII,WAAWoB,GAChCsB,EAAQ/C,KAAKC,IAAIU,OAAOc,GAU9B,GARAD,EAAU6B,aAAa,gBAAiB,QACxC7B,EAAU6B,aAAa,gBAAiB,QACxCvB,EAAYuB,aAAa,gBAAiB,QAC1CvB,EAAYwB,gBAAgB,YAE5BP,EAAMO,gBAAgB,UACtBC,YAAKR,EAAO,GAAK,WAEbK,EAAQ,CAGV,IAAMA,EAAS,IAAII,IAAIpB,OAAOK,SAASgB,MACvCL,EAAOZ,KAAOV,EAAYZ,GAC1BkB,OAAOsB,QAAQC,UAAU,GAAI,GAAIP,EAAOQ,e,uBAI5C,SAAUnC,GACR,IAAMK,EAAc9B,KAAKC,IAAIQ,aAAagB,GACpCD,EAAYxB,KAAKC,IAAII,WAAWoB,GAChCsB,EAAQ/C,KAAKC,IAAIU,OAAOc,GAE9BD,EAAU8B,gBAAgB,iBAC1B9B,EAAU6B,aAAa,gBAAiB,SACxCvB,EAAYuB,aAAa,gBAAiB,SAC1CvB,EAAYuB,aAAa,WAAY,MAErCN,EAAMM,aAAa,SAAU,UAC7BQ,YAAMd,EAAO,GAAK,a,gCAGpB,WACE,IAAMjB,EAAc9B,KAAKC,IAAIQ,aAAa,GACpCe,EAAYxB,KAAKC,IAAII,WAAW,GAChC0C,EAAQ/C,KAAKC,IAAIU,OAAO,GAE9Ba,EAAU8B,gBAAgB,iBAC1B9B,EAAU6B,aAAa,gBAAiB,SACxCvB,EAAYuB,aAAa,gBAAiB,SAC1CvB,EAAYuB,aAAa,WAAY,MAErCN,EAAMM,aAAa,SAAU,UAC7BQ,YAAMd,EAAO,GAAK,a,iCAGpB,SAAoBe,EAAGC,GACrB,IAAMC,EAAMF,EAAEG,QAEd,OAAQD,GACR,KAAKrE,EACHmE,EAAEI,iBAGFH,EADkBA,EAAKI,OAAS,GAChBC,QAChB,MAEF,KAAKzE,EACHmE,EAAEI,iBAEFH,EAAK,GAAGK,QACR,MAEF,KAAKzE,EACL,KAAKA,EACHmE,EAAEI,iBAGF,IACIzC,EADgBqC,EAAEO,OACE5C,MAAQ7B,EAAUoE,GACrCD,EAAKtC,KACJuC,IAAQrE,EACV8B,EAAQsC,EAAKI,OAAS,EACbH,IAAQrE,IACjB8B,EAAQ,IAGZsC,EAAKtC,GAAO2C,W,kCAKhB,SAAqBN,GACnB,IAAMrC,EAAQzB,KAAKC,IAAII,WAAW2C,QAAQc,EAAEQ,eAC5CtE,KAAKuE,eAAe9C,K,oCAGtB,SAAuBqC,GACrB,IAAMrC,EAAQzB,KAAKC,IAAIQ,aAAauC,QAAQc,EAAEQ,eAC9CtE,KAAKuE,eAAe9C,K,oCAGtB,SAAuBqC,GACrB9D,KAAKwE,oBAAoBV,EAAG9D,KAAKC,IAAII,c,sCAGvC,SAAyByD,GACvB9D,KAAKwE,oBAAoBV,EAAG9D,KAAKC,IAAIQ,gB,2BAGvC,SAAcqD,GACZA,EAAEI,iBACF,IAAMO,EAASzE,KAAKC,IAAIY,UAAU6D,UAAY,IAE9C,KADmC,mBAAoB5D,SAAS6D,gBAAgBC,OAE9E,OAAOxC,OAAOyC,SAAS,EAAGJ,GAE5BrC,OAAOyC,SAAS,CACdC,IAAKL,EACLM,KAAM,EACN5B,SAAU,gB,8BApMY6B,aAyMbjF","file":"45.0fad93ba71f14ab0aa28.js","sourcesContent":["import { Component } from '@verndale/core';\nimport { open, close } from '../helpers';\n\n// tabbed-content module suports vertical orientation only.\nconst KEYS = {\n end: 35,\n home: 36,\n up: 38,\n down: 40\n};\n\n// Add or substract depending on key pressed\nconst DIRECTION = {\n 38: -1,\n 40: 1\n};\n\nclass TabbedContent extends Component {\n setupDefaults() {\n this.dom = {\n tabList: this.el.querySelector('.tab-list'),\n inlineTabs: Array.from(this.el.querySelectorAll('.tab--inline')),\n externalTabs: Array.from(this.el.querySelectorAll('.tab--external')),\n sections: this.el.querySelector('.tab-sections'),\n panels: Array.from(this.el.querySelectorAll('.tab-section__panel')),\n rifCtas: Array.from(this.el.querySelectorAll('.tab-section__rif .btn')),\n rifModule: document.querySelector('.rif')\n };\n\n this.externalTabsIds = this.dom.externalTabs.map(tab => tab.id);\n\n this.activeIndex = this.setSelectedPanel();\n\n if (this.activeIndex !== 0) {\n this.hidePanelFirstTime()\n }\n this.showPanel(this.activeIndex);\n\n }\n\n addListeners() {\n this.dom.inlineTabs.forEach((inlineTab, index) => {\n inlineTab.index = index;\n inlineTab.addEventListener('click', this.handleInlineTabClick.bind(this));\n inlineTab.addEventListener('keydown', this.handleInlineTabKeydown.bind(this));\n });\n\n this.dom.externalTabs.forEach((externalTab, index) => {\n externalTab.index = index;\n externalTab.addEventListener('click', this.handleExternalTabClick.bind(this));\n externalTab.addEventListener('keydown', this.handleExternalTabKeydown.bind(this));\n });\n if (this.dom.rifModule) {\n this.dom.rifCtas.forEach(rifCta => {\n rifCta.addEventListener('click', this.onRifCtaClick.bind(this));\n })\n }\n }\n\n setActivePanel(index) {\n const mobileBreakpoint = 740;\n const windowSize = window.innerWidth;\n const isMobile = windowSize < mobileBreakpoint;\n\n if (this.activeIndex === index && isMobile) {\n this.hidePanel(this.activeIndex);\n this.activeIndex = null;\n return;\n }\n\n if (this.activeIndex === null && isMobile) {\n this.activeIndex = index;\n this.showPanel(this.activeIndex, true);\n return;\n }\n\n if (this.activeIndex !== index) {\n this.hidePanel(this.activeIndex);\n this.activeIndex = index;\n this.showPanel(this.activeIndex, true);\n }\n }\n\n setSelectedPanel() {\n const hash = window.location.hash;\n const isHashOnExternalTab = this.externalTabsIds.includes(hash.replace('#', ''))\n let activeId;\n if (hash && isHashOnExternalTab) {\n const activeTab = this.dom.externalTabs.find(panel => panel.id === hash.replace('#', ''));\n activeId = this.dom.externalTabs.indexOf(activeTab);\n setTimeout(() => this.el.scrollIntoView({ behavior: 'smooth' }), 1000);\n } else {\n activeId = 0;\n }\n\n return activeId;\n }\n\n\n showPanel(index, newUrl) {\n const externalTab = this.dom.externalTabs[index];\n const inlineTab = this.dom.inlineTabs[index];\n const panel = this.dom.panels[index];\n\n inlineTab.setAttribute('aria-disabled', 'true');\n inlineTab.setAttribute('aria-expanded', 'true');\n externalTab.setAttribute('aria-selected', 'true');\n externalTab.removeAttribute('tabindex');\n\n panel.removeAttribute('hidden');\n open(panel, 0.4, 'easeOut');\n\n if (newUrl) {\n // Update the url with the fata-anchor value\n // eslint-disable-next-line no-undef\n const newUrl = new URL(window.location.href);\n newUrl.hash = externalTab.id;\n window.history.pushState({}, '', newUrl.toString());\n }\n }\n\n hidePanel(index) {\n const externalTab = this.dom.externalTabs[index];\n const inlineTab = this.dom.inlineTabs[index];\n const panel = this.dom.panels[index];\n\n inlineTab.removeAttribute('aria-disabled');\n inlineTab.setAttribute('aria-expanded', 'false');\n externalTab.setAttribute('aria-selected', 'false');\n externalTab.setAttribute('tabindex', '-1');\n\n panel.setAttribute('hidden', 'hidden');\n close(panel, 0.4, 'easeOut');\n }\n\n hidePanelFirstTime() {\n const externalTab = this.dom.externalTabs[0];\n const inlineTab = this.dom.inlineTabs[0];\n const panel = this.dom.panels[0];\n\n inlineTab.removeAttribute('aria-disabled');\n inlineTab.setAttribute('aria-expanded', 'false');\n externalTab.setAttribute('aria-selected', 'false');\n externalTab.setAttribute('tabindex', '-1');\n\n panel.setAttribute('hidden', 'hidden');\n close(panel, 0.4, 'easeOut');\n }\n\n setActivePanelByKey(e, tabs) {\n const key = e.keyCode;\n\n switch (key) {\n case KEYS.end:\n e.preventDefault();\n // Activate last tab\n const lastIndex = tabs.length - 1;\n tabs[lastIndex].focus();\n break;\n\n case KEYS.home:\n e.preventDefault();\n // Activate first tab\n tabs[0].focus();\n break;\n\n case KEYS.up:\n case KEYS.down:\n e.preventDefault();\n // Up and down are in keydown\n // because we need to prevent page scroll\n const externalTab = e.target;\n let index = externalTab.index + DIRECTION[key];\n if (!tabs[index]) {\n if (key === KEYS.up) {\n index = tabs.length - 1;\n } else if (key === KEYS.down) {\n index = 0;\n }\n }\n tabs[index].focus();\n break;\n }\n }\n\n handleInlineTabClick(e) {\n const index = this.dom.inlineTabs.indexOf(e.currentTarget);\n this.setActivePanel(index);\n }\n\n handleExternalTabClick(e) {\n const index = this.dom.externalTabs.indexOf(e.currentTarget);\n this.setActivePanel(index);\n }\n\n handleInlineTabKeydown(e) {\n this.setActivePanelByKey(e, this.dom.inlineTabs);\n }\n\n handleExternalTabKeydown(e) {\n this.setActivePanelByKey(e, this.dom.externalTabs);\n }\n\n onRifCtaClick(e) {\n e.preventDefault();\n const rifTop = this.dom.rifModule.offsetTop - 100;\n const supportsNativeSmoothScroll = 'scrollBehavior' in document.documentElement.style;\n if (!supportsNativeSmoothScroll) {\n return window.scrollTo(0, rifTop);\n }\n window.scrollTo({\n top: rifTop,\n left: 0,\n behavior: 'smooth'\n });\n }\n}\n\nexport default TabbedContent;\n"],"sourceRoot":""}