{"version":3,"file":"accordion-5a73a399.js","sources":["../../../../src/scripts/modules/accordion.ts"],"sourcesContent":["import { Component } from '@verndale/core';\nimport '../../scss/modules/accordion.scss';\nimport { isTablet } from '../helpers/breakpoints';\nimport { debounce } from '../helpers/debounce';\nimport { ExtendedWindowType } from '../helpers/global-types';\n\nclass Accordion extends Component {\n  private lastWindowWidth: number;\n  private tablet: boolean;\n\n  constructor(el: HTMLElement) {\n    super(el);\n    this.tablet = isTablet;\n    this.lastWindowWidth = window.innerWidth;\n  }\n\n  setupDefaults() {\n    this.dom = {\n      triggers: this.el.querySelectorAll('.accordion__item-trigger'),\n      panels: this.el.querySelectorAll('.accordion__item-panel')\n    };\n\n    this.initAccordion();\n  }\n\n  addListeners() {\n    (this.dom.triggers as NodeList).forEach(trigger =>\n      trigger.addEventListener('click', this.handleClick.bind(this))\n    );\n    window.addEventListener(\n      'resize',\n      debounce(this.handleResize.bind(this), 260)\n    );\n  }\n\n  initAccordion() {\n    (this.dom.triggers as NodeListOf<HTMLButtonElement>).forEach(trigger => {\n      if (isTablet) {\n        this.closeItem(trigger); // Collapse all items on mobile\n      } else if (trigger.getAttribute('aria-expanded') === 'true') {\n        this.openItem(trigger);\n      }\n    });\n  }\n\n  handleClick(e: Event) {\n    const trigger = e.currentTarget as HTMLButtonElement;\n\n    if (trigger.getAttribute('aria-expanded') === 'true') {\n      (window as ExtendedWindowType).dataLayer.push({\n        event_attributes: {},\n        event: 'accordion_interaction',\n        event_category: 'accordion usage',\n        event_action: 'collapse accordion'\n      });\n\n      this.closeItem(trigger);\n    } else {\n      (window as ExtendedWindowType).dataLayer.push({\n        event_attributes: {},\n        event: 'accordion_interaction',\n        event_category: 'accordion usage',\n        event_action: 'expand accordion'\n      });\n      this.openItem(trigger);\n    }\n  }\n\n  handleResize() {\n    if (this.lastWindowWidth === window.innerWidth) return;\n    this.lastWindowWidth = window.innerWidth;\n    if (this.tablet !== isTablet) {\n      (this.dom.triggers as NodeListOf<HTMLButtonElement>).forEach(trigger => {\n        if (!isTablet) {\n          if (trigger.getAttribute('aria-expanded') === 'false') {\n            this.openItem(trigger);\n          }\n        } else {\n          if (trigger.getAttribute('aria-expanded') === 'true') {\n            this.closeItem(trigger);\n          }\n        }\n      });\n      this.tablet = isTablet;\n    }\n  }\n\n  openItem(trigger: HTMLButtonElement) {\n    trigger.setAttribute('aria-expanded', 'true');\n\n    const panel = document.getElementById(\n      trigger.getAttribute('aria-controls') as string\n    );\n\n    if (panel) {\n      panel.classList.add('accordion__item-panel--open');\n      const pannelContent = panel.querySelector<HTMLElement>(\n        '.accordion__item-content'\n      );\n\n      panel.style.height = `${pannelContent?.offsetHeight}px`;\n\n      setTimeout(() => (panel.style.height = 'auto'), 250);\n    }\n  }\n\n  closeItem(trigger: HTMLButtonElement) {\n    trigger.setAttribute('aria-expanded', 'false');\n\n    const panel = document.getElementById(\n      trigger.getAttribute('aria-controls') as string\n    );\n\n    if (panel) {\n      panel.classList.remove('accordion__item-panel--open');\n      const pannelContent = panel.querySelector<HTMLElement>(\n        '.accordion__item-content'\n      );\n      panel.style.height = `${pannelContent?.offsetHeight}px`;\n      setTimeout(() => (panel.style.height = '0px'));\n    }\n  }\n}\n\nexport default Accordion;\n"],"names":["Accordion","Component","el","__publicField","isTablet","trigger","debounce","e","panel","pannelContent"],"mappings":"yYAMA,MAAMA,UAAkBC,CAAU,CAIhC,YAAYC,EAAiB,CAC3B,MAAMA,CAAE,EAJFC,EAAA,wBACAA,EAAA,eAIN,KAAK,OAASC,EACd,KAAK,gBAAkB,OAAO,UAChC,CAEA,eAAgB,CACd,KAAK,IAAM,CACT,SAAU,KAAK,GAAG,iBAAiB,0BAA0B,EAC7D,OAAQ,KAAK,GAAG,iBAAiB,wBAAwB,CAAA,EAG3D,KAAK,cAAc,CACrB,CAEA,cAAe,CACZ,KAAK,IAAI,SAAsB,QAAQC,GACtCA,EAAQ,iBAAiB,QAAS,KAAK,YAAY,KAAK,IAAI,CAAC,CAAA,EAExD,OAAA,iBACL,SACAC,EAAS,KAAK,aAAa,KAAK,IAAI,EAAG,GAAG,CAAA,CAE9C,CAEA,eAAgB,CACb,KAAK,IAAI,SAA2C,QAAmBD,GAAA,CAClED,EACF,KAAK,UAAUC,CAAO,EACbA,EAAQ,aAAa,eAAe,IAAM,QACnD,KAAK,SAASA,CAAO,CACvB,CACD,CACH,CAEA,YAAYE,EAAU,CACpB,MAAMF,EAAUE,EAAE,cAEdF,EAAQ,aAAa,eAAe,IAAM,QAC3C,OAA8B,UAAU,KAAK,CAC5C,iBAAkB,CAAC,EACnB,MAAO,wBACP,eAAgB,kBAChB,aAAc,oBAAA,CACf,EAED,KAAK,UAAUA,CAAO,IAErB,OAA8B,UAAU,KAAK,CAC5C,iBAAkB,CAAC,EACnB,MAAO,wBACP,eAAgB,kBAChB,aAAc,kBAAA,CACf,EACD,KAAK,SAASA,CAAO,EAEzB,CAEA,cAAe,CACT,KAAK,kBAAoB,OAAO,aACpC,KAAK,gBAAkB,OAAO,WAC1B,KAAK,SAAWD,IACjB,KAAK,IAAI,SAA2C,QAAmBC,GAAA,CACjED,EAKCC,EAAQ,aAAa,eAAe,IAAM,QAC5C,KAAK,UAAUA,CAAO,EALpBA,EAAQ,aAAa,eAAe,IAAM,SAC5C,KAAK,SAASA,CAAO,CAMzB,CACD,EACD,KAAK,OAASD,GAElB,CAEA,SAASC,EAA4B,CAC3BA,EAAA,aAAa,gBAAiB,MAAM,EAE5C,MAAMG,EAAQ,SAAS,eACrBH,EAAQ,aAAa,eAAe,CAAA,EAGtC,GAAIG,EAAO,CACHA,EAAA,UAAU,IAAI,6BAA6B,EACjD,MAAMC,EAAgBD,EAAM,cAC1B,0BAAA,EAGIA,EAAA,MAAM,OAAS,GAAGC,GAAA,YAAAA,EAAe,iBAEvC,WAAW,IAAOD,EAAM,MAAM,OAAS,OAAS,GAAG,EAEvD,CAEA,UAAUH,EAA4B,CAC5BA,EAAA,aAAa,gBAAiB,OAAO,EAE7C,MAAMG,EAAQ,SAAS,eACrBH,EAAQ,aAAa,eAAe,CAAA,EAGtC,GAAIG,EAAO,CACHA,EAAA,UAAU,OAAO,6BAA6B,EACpD,MAAMC,EAAgBD,EAAM,cAC1B,0BAAA,EAEIA,EAAA,MAAM,OAAS,GAAGC,GAAA,YAAAA,EAAe,iBACvC,WAAW,IAAOD,EAAM,MAAM,OAAS,KAAM,EAEjD,CACF"}