{"version":3,"sources":["webpack:///./src/js/modules/accordion.js"],"names":["Module","this","dom","container","el","querySelector","items","querySelectorAll","triggers","initAccordion","addEventListener","handleKeyDown","bind","forEach","trigger","handleClick","item","index","guid","uuidv4","content","getAttribute","style","height","visibility","setAttribute","e","button","currentTarget","closeItem","openItem","target","key","which","keyCode","ctrlModifier","ctrlKey","PAGEUP","PAGEDOWN","classList","contains","UP","DOWN","indexOf","direction","length","newIndex","focus","preventDefault","END","HOME","SPACE","document","getElementById","parentNode","add","open","element","ease","onComplete","remove","close","Component"],"mappings":"wlDAIMA,E,sWACJ,WACEC,KAAKC,IAAM,CACTC,UAAWF,KAAKG,GAAGC,cAAc,qBACjCC,MAAOL,KAAKG,GAAGG,iBAAiB,oBAChCC,SAAUP,KAAKG,GAAGG,iBAAiB,6BAGrCN,KAAKQ,kB,0BAGP,WAAe,WACbR,KAAKC,IAAIC,UAAUO,iBACjB,UACAT,KAAKU,cAAcC,KAAKX,OAE1BA,KAAKC,IAAIM,SAASK,SAAQ,SAAAC,GAAO,OAC/BA,EAAQJ,iBAAiB,QAAS,EAAKK,YAAYH,KAAK,S,2BAI5D,WACEX,KAAKC,IAAII,MAAMO,SAAQ,SAACG,EAAMC,GAC5B,IAAMC,EAAOC,cAEPL,EAAUE,EAAKX,cAAc,4BAC7Be,EAAUJ,EAAKX,cAAc,4BAEW,SAA1CS,EAAQO,aAAa,mBACvBD,EAAQE,MAAMC,OAAS,OACvBH,EAAQE,MAAME,WAAa,WAG7BV,EAAQW,aAAa,gBAArB,qBAAoDP,IACpDJ,EAAQW,aAAa,KAArB,cAAkCP,IAClCE,EAAQK,aAAa,kBAArB,cAA+CP,IAC/CE,EAAQK,aAAa,KAArB,qBAAyCP,IAEzCE,EAAQK,aACN,cAC0C,SAA1CX,EAAQO,aAAa,uB,yBAK3B,SAAYK,GACV,IAAMC,EAASD,EAAEE,cAE4B,SAAzCD,EAAON,aAAa,iBACtBpB,KAAK4B,UAAUF,GAEf1B,KAAK6B,SAASH,K,2BAIlB,SAAcD,GACZ,IAAMK,EAASL,EAAEK,OACXC,EAAMN,EAAEO,OAASP,EAAEQ,QAEnBC,EACJT,EAAEU,UAAYJ,IAAQE,IAAQG,QAAUL,IAAQE,IAAQI,UAE1D,GAAIP,EAAOQ,UAAUC,SAAS,2BAC5B,GAAIR,IAAQE,IAAQO,IAAMT,IAAQE,IAAQQ,MAAQP,EAAc,CAC9D,IAAMlB,EAAQhB,KAAKC,IAAIM,SAASmC,QAAQZ,GAClCa,EACJZ,IAAQE,IAAQI,UAAYN,IAAQE,IAAQQ,KAAO,GAAK,EACpDG,EAAS5C,KAAKC,IAAIM,SAASqC,OAC3BC,GAAY7B,EAAQ4B,EAASD,GAAaC,EAEhD5C,KAAKC,IAAIM,SAASsC,GAAUC,QAE5BrB,EAAEsB,sBACG,GAAIhB,IAAQE,IAAQe,KAAOjB,IAAQE,IAAQgB,KAAM,CACtD,OAAQlB,GACN,KAAKE,IAAQgB,KACXjD,KAAKC,IAAIM,SAAS,GAAGuC,QACrB,MACF,KAAKb,IAAQe,IACXhD,KAAKC,IAAIM,SAASP,KAAKC,IAAIM,SAASqC,OAAS,GAAGE,QAGpDrB,EAAEsB,sBACOhB,IAAQE,IAAQiB,OACzBzB,EAAEsB,mB,sBAKR,SAASlC,GACP,IAAMM,EAAUgC,SAASC,eACvBvC,EAAQO,aAAa,kBAGvBP,EAAQwC,WAAWf,UAAUgB,IAAI,6BACjCzC,EAAQW,aAAa,iBAAiB,GACtCL,EAAQE,MAAME,WAAa,UAC3BgC,YAAK,CACHC,QAASrC,EACTsC,KAAM,YACNC,WAAY,WACVvC,EAAQK,aAAa,eAAe,GACpCL,EAAQE,MAAMC,OAAS,Y,uBAK7B,SAAUT,GACR,IAAMM,EAAUgC,SAASC,eACvBvC,EAAQO,aAAa,kBAGvBP,EAAQW,aAAa,iBAAiB,GACtCX,EAAQwC,WAAWf,UAAUqB,OAAO,6BACpCC,YAAM,CACJJ,QAASrC,EACTsC,KAAM,YACNC,WAAY,WACVvC,EAAQK,aAAa,eAAe,GACpCL,EAAQE,MAAME,WAAa,iB,8BAvHdsC,aA6HN9D","file":"54.40c320bf859a81e109ef.js","sourcesContent":["import { Component } from '@verndale/core';\nimport { v4 as uuidv4 } from 'uuid';\nimport { keyCode, open, close } from '../helpers';\n\nclass Module extends Component {\n setupDefaults() {\n this.dom = {\n container: this.el.querySelector('.accordion__items'),\n items: this.el.querySelectorAll('.accordion__item'),\n triggers: this.el.querySelectorAll('.accordion__item-trigger')\n };\n\n this.initAccordion();\n }\n\n addListeners() {\n this.dom.container.addEventListener(\n 'keydown',\n this.handleKeyDown.bind(this)\n );\n this.dom.triggers.forEach(trigger =>\n trigger.addEventListener('click', this.handleClick.bind(this))\n );\n }\n\n initAccordion() {\n this.dom.items.forEach((item, index) => {\n const guid = uuidv4();\n\n const trigger = item.querySelector('.accordion__item-trigger');\n const content = item.querySelector('.accordion__item-content');\n\n if (trigger.getAttribute('aria-expanded') === 'true') {\n content.style.height = 'auto';\n content.style.visibility = 'visible';\n }\n\n trigger.setAttribute('aria-controls', `tabcontent-${guid}`);\n trigger.setAttribute('id', `tab-${guid}`);\n content.setAttribute('aria-labelledby', `tab-${guid}`);\n content.setAttribute('id', `tabcontent-${guid}`);\n\n content.setAttribute(\n 'aria-hidden',\n trigger.getAttribute('aria-expanded') !== 'true'\n );\n });\n }\n\n handleClick(e) {\n const button = e.currentTarget;\n\n if (button.getAttribute('aria-expanded') === 'true') {\n this.closeItem(button);\n } else {\n this.openItem(button);\n }\n }\n\n handleKeyDown(e) {\n const target = e.target;\n const key = e.which || e.keyCode;\n\n const ctrlModifier =\n e.ctrlKey && (key === keyCode.PAGEUP || key === keyCode.PAGEDOWN);\n\n if (target.classList.contains('accordion__item-trigger')) {\n if (key === keyCode.UP || key === keyCode.DOWN || ctrlModifier) {\n const index = this.dom.triggers.indexOf(target);\n const direction =\n key === keyCode.PAGEDOWN || key === keyCode.DOWN ? 1 : -1;\n const length = this.dom.triggers.length;\n const newIndex = (index + length + direction) % length;\n\n this.dom.triggers[newIndex].focus();\n\n e.preventDefault();\n } else if (key === keyCode.END || key === keyCode.HOME) {\n switch (key) {\n case keyCode.HOME:\n this.dom.triggers[0].focus();\n break;\n case keyCode.END:\n this.dom.triggers[this.dom.triggers.length - 1].focus();\n break;\n }\n e.preventDefault();\n } else if (key === keyCode.SPACE) {\n e.preventDefault();\n }\n }\n }\n\n openItem(trigger) {\n const content = document.getElementById(\n trigger.getAttribute('aria-controls')\n );\n\n trigger.parentNode.classList.add('accordion__item--expanded');\n trigger.setAttribute('aria-expanded', true);\n content.style.visibility = 'visible';\n open({\n element: content,\n ease: 'easeInOut',\n onComplete: () => {\n content.setAttribute('aria-hidden', false);\n content.style.height = 'auto';\n }\n });\n }\n\n closeItem(trigger) {\n const content = document.getElementById(\n trigger.getAttribute('aria-controls')\n );\n\n trigger.setAttribute('aria-expanded', false);\n trigger.parentNode.classList.remove('accordion__item--expanded');\n close({\n element: content,\n ease: 'easeInOut',\n onComplete: () => {\n content.setAttribute('aria-hidden', true);\n content.style.visibility = 'hidden';\n }\n });\n }\n}\n\nexport default Module;\n"],"sourceRoot":""}