{"version":3,"sources":["webpack:///./src/js/modules/modal.js"],"names":["Modal","Component","setupDefaults","this","dom","$trigger","document","querySelector","el","id","$closeButton","$backdrop","focusableModalElements","querySelectorAll","focusableElements","focusTrap","createFocusTrap","checkForVideo","classList","contains","openModal","addListeners","addEventListener","closeModal","bind","e","handleKeydown","handleBackdropClick","iframe","iframeSrc","src","lastFocusedElement","activeElement","forEach","element","setAttribute","activate","length","focus","deactivate","setTimeout","keyCode","KEYCODE","ESCAPE","target"],"mappings":"2FAAA,kCAIA,MAAMA,UAAcC,YAClBC,gBACEC,KAAKC,IAAM,CACTC,SAAUC,SAASC,cAAe,wBAAuBJ,KAAKK,GAAGC,QACjEC,aAAcP,KAAKK,GAAGD,cAAc,wBACpCI,UAAWR,KAAKK,GAAGD,cAAc,qBAGnCJ,KAAKS,uBAAyBT,KAAKK,GAAGK,iBAAiBC,KACvDX,KAAKY,UAAYC,YAAgBb,KAAKK,IACtCL,KAAKc,gBAEDd,KAAKK,GAAGU,UAAUC,SAAS,qBAAqBhB,KAAKiB,YAG3DC,eAAe,QACblB,KAAKC,IAAIM,aAAaY,iBAAiB,QAASnB,KAAKoB,WAAWC,KAAKrB,OACrE,UAAAA,KAAKC,IAAIC,gBAAT,SAAmBiB,iBAAiB,QAASnB,KAAKiB,UAAUI,KAAKrB,OACjEA,KAAKK,GAAGc,iBAAiB,UAAYG,GAAMtB,KAAKuB,cAAcD,IAC9D,UAAAtB,KAAKC,IAAIO,iBAAT,SAAoBW,iBAAiB,QAAUG,GAAMtB,KAAKwB,oBAAoBF,IAGhFR,gBACE,MAAMW,EAASzB,KAAKK,GAAGD,cAAc,UACjCqB,IACFzB,KAAKyB,OAASA,EACdzB,KAAK0B,UAAYD,EAAOE,KAI5BV,YAAY,QACVjB,KAAK4B,mBAAqBzB,SAAS0B,cACnC,UAAA7B,KAAKS,8BAAL,SAA6BqB,QAASC,GAAYA,EAAQC,aAAa,WAAY,MACnFhC,KAAKK,GAAG2B,aAAa,cAAe,SACpChC,KAAKY,UAAUqB,WAEf,UAAIjC,KAAKS,8BAAT,OAAI,EAA6ByB,QAC/BlC,KAAKS,uBAAuB,GAAG0B,QAInCf,aACEpB,KAAKY,UAAUwB,aACfpC,KAAKK,GAAG2B,aAAa,cAAe,QAEhChC,KAAKyB,SACPzB,KAAKyB,OAAOE,IAAM,GAClBU,WAAW,IAAOrC,KAAKyB,OAAOE,IAAM3B,KAAK0B,UAAY,MAEnD1B,KAAK4B,oBAAoB5B,KAAK4B,mBAAmBO,QAGvDZ,cAAcD,GACRA,EAAEgB,UAAYC,IAAQC,QACxBxC,KAAKoB,aAITI,oBAAoBF,GACdA,EAAEmB,SAAWzC,KAAKC,IAAIO,WACxBR,KAAKoB,cAKIvB","file":"97.bundle.js","sourcesContent":["import { Component } from '@verndale/core'\nimport { createFocusTrap } from 'focus-trap'\nimport { focusableElements, KEYCODE } from '../utils'\n\nclass Modal extends Component {\n setupDefaults() {\n this.dom = {\n $trigger: document.querySelector(`[data-trigger-modal=\"${this.el.id}\"]`),\n $closeButton: this.el.querySelector('.modal__close-button'),\n $backdrop: this.el.querySelector('.modal__backdrop')\n }\n\n this.focusableModalElements = this.el.querySelectorAll(focusableElements)\n this.focusTrap = createFocusTrap(this.el)\n this.checkForVideo()\n\n if (this.el.classList.contains('modal--auto-open')) this.openModal()\n }\n\n addListeners() {\n this.dom.$closeButton.addEventListener('click', this.closeModal.bind(this))\n this.dom.$trigger?.addEventListener('click', this.openModal.bind(this))\n this.el.addEventListener('keydown', (e) => this.handleKeydown(e))\n this.dom.$backdrop?.addEventListener('click', (e) => this.handleBackdropClick(e))\n }\n\n checkForVideo() {\n const iframe = this.el.querySelector('iframe')\n if (iframe) {\n this.iframe = iframe\n this.iframeSrc = iframe.src\n }\n }\n\n openModal() {\n this.lastFocusedElement = document.activeElement\n this.focusableModalElements?.forEach((element) => element.setAttribute('tabindex', '1'))\n this.el.setAttribute('aria-hidden', 'false')\n this.focusTrap.activate()\n\n if (this.focusableModalElements?.length) {\n this.focusableModalElements[0].focus()\n }\n }\n\n closeModal() {\n this.focusTrap.deactivate()\n this.el.setAttribute('aria-hidden', 'true')\n\n if (this.iframe) {\n this.iframe.src = ''\n setTimeout(() => (this.iframe.src = this.iframeSrc), 300)\n }\n if (this.lastFocusedElement) this.lastFocusedElement.focus()\n }\n\n handleKeydown(e) {\n if (e.keyCode === KEYCODE.ESCAPE) {\n this.closeModal()\n }\n }\n\n handleBackdropClick(e) {\n if (e.target === this.dom.$backdrop) {\n this.closeModal()\n }\n }\n}\n\nexport default Modal\n"],"sourceRoot":""}