{"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":""}