{"version":3,"sources":["header.js"],"names":["Header","[object Object]","el","this","scope","isInline","hasAttribute","burger","querySelector","HeaderOpen","primaryLinks","querySelectorAll","navContainer","viewport","desktopViewport","handleOutsideClick","e","parentElement","contains","target","closeHeader","Burger","burgerOpen","closeBurger","document","removeEventListener","handleOutsideKey","key","bindEvents","window","addEventListener","scopeElement","classList","add","console","error","openHeader","forEach","link","remove","setTimeout","nav","Nav","closeNav","focus"],"mappings":"AAAA,MAAMA,OACJC,YAAYC,GACVC,KAAKC,MAAQF,EACbC,KAAKC,MAAMJ,OAASG,KACpBA,KAAKE,SAAWH,EAAGI,aAAa,sBAChCH,KAAKI,OAASL,EAAGM,cAAc,iBAC/BL,KAAKM,YAAa,EAClBN,KAAKO,aAAeR,EAAGS,iBAAiB,uBACxCR,KAAKS,aAAeV,EAAGM,cAAc,sBACrCL,KAAKU,SAAWA,WAChBV,KAAKW,gBAAkB,EAEvBX,KAAKY,mBAAqBC,CAAAA,IACnBb,KAAKS,aAAaK,cAAcC,SAASF,EAAEG,UAC9ChB,KAAKiB,cAEDjB,KAAKI,OAAOc,OAAOC,YACrBnB,KAAKI,OAAOc,OAAOE,cAGrBC,SAASC,oBAAoB,QAAStB,KAAKuB,kBAC3CF,SAASC,oBAAoB,QAAStB,KAAKY,uBAI/CZ,KAAKuB,iBAAmBV,CAAAA,IACjBb,KAAKS,aAAaK,cAAcC,SAASF,EAAEG,SAAqB,WAAVH,EAAEW,MAC3DxB,KAAKiB,cACLI,SAASC,oBAAoB,QAAStB,KAAKuB,kBAC3CF,SAASC,oBAAoB,QAAStB,KAAKY,uBAI/CZ,KAAKyB,aAGP3B,aACE4B,OAAOC,iBAAiB,SAAU,KAChC,MAAMC,EAAe5B,KAAKC,OAASoB,SAAShB,cAAc,gCAEtDuB,EACFA,EAAaC,UAAUC,IAAI,oBAE3BC,QAAQC,MAAM,yDAIZhC,KAAKU,UAAYV,KAAKW,iBAAmBD,WAAaV,KAAKW,iBAAmBX,KAAKU,SAAWV,KAAKW,iBAAmBD,YAAcV,KAAKW,mBACvIX,KAAKM,YACPN,KAAKiB,cAGPjB,KAAKU,SAAWA,cAGpBV,KAAKI,OAAOuB,iBAAiB,QAASd,IAChCb,KAAKM,WACPN,KAAKiB,cAELjB,KAAKiC,eAGTjC,KAAKO,aAAa2B,QAAQC,IACxBA,EAAKrB,cAAca,iBAAiB,OAAQ,MACzC3B,KAAKM,YAAcN,KAAKiC,eAE3BE,EAAKrB,cAAca,iBAAiB,QAAS,KACvCjB,YAAcV,KAAKW,iBAAmBX,KAAKE,UAC7CF,KAAKM,YAAcN,KAAKiB,kBAMhCnB,cACEE,KAAKC,MAAM4B,UAAUC,IAAI,mBACzB9B,KAAKC,MAAM4B,UAAUO,OAAO,gBAC5BC,WAAW,KACTrC,KAAKC,MAAM4B,UAAUO,OAAO,oBAC3B,KACHpC,KAAKC,MAAMO,iBAAiB,cAAc0B,QAAQI,GAAOA,EAAIC,IAAIC,YACjEnB,SAAShB,cAAc,QAAQwB,UAAUO,OAAO,mBAE5CpC,KAAKI,OAAOc,OAAOC,YACrBnB,KAAKI,OAAOc,OAAOE,cAGrBpB,KAAKI,OAAOqC,QACZzC,KAAKM,YAAa,EAGpBR,aACEE,KAAKC,MAAM4B,UAAUC,IAAI,gBACzBT,SAAShB,cAAc,QAAQwB,UAAUC,IAAI,mBAEzC9B,KAAKC,MAAMI,cAAc,yCAC3BL,KAAKC,MAAMI,cAAc,wCAAwCoC,QAGnEJ,WAAW,KACThB,SAASM,iBAAiB,QAAS3B,KAAKY,oBACxCS,SAASM,iBAAiB,QAAS3B,KAAKuB,mBACvC,KACHvB,KAAKM,YAAa,GAKtBe,SAASb,iBAAiB,iBAAiB0B,QAAQnC,IACjD,IAAIF,OAAOE","sourcesContent":["class Header {\r\n constructor(el) {\r\n this.scope = el;\r\n this.scope.Header = this;\r\n this.isInline = el.hasAttribute(\"data-header-inline\");\r\n this.burger = el.querySelector(\"[data-burger]\");\r\n this.HeaderOpen = false;\r\n this.primaryLinks = el.querySelectorAll(\"[data-primary-link]\");\r\n \r\n this.navContainer = el.querySelector(\"[data-primary-nav]\");\r\n this.viewport = viewport();\r\n this.desktopViewport = 3;\r\n\r\n this.handleOutsideClick = (e) => {\r\n if (!this.navContainer.parentElement.contains(e.target)) {\r\n this.closeHeader();\r\n if(this.burger.Burger.burgerOpen){\r\n this.burger.Burger.closeBurger(); \r\n }\r\n document.removeEventListener('keyup', this.handleOutsideKey);\r\n document.removeEventListener('click', this.handleOutsideClick);\r\n }\r\n }\r\n this.handleOutsideKey = (e) => {\r\n if (!this.navContainer.parentElement.contains(e.target) || (e.key === \"Escape\")) {\r\n this.closeHeader();\r\n document.removeEventListener('keyup', this.handleOutsideKey);\r\n document.removeEventListener('click', this.handleOutsideClick);\r\n }\r\n }\r\n this.bindEvents();\r\n }\r\n\r\n bindEvents(){\r\n window.addEventListener(\"resize\", () => {\r\n const scopeElement = this.scope || document.querySelector('.your-scope-element-selector');\r\n\r\n if (scopeElement) {\r\n scopeElement.classList.add(\"header--resizing\");\r\n } else {\r\n console.error(\"scopeElement is not defined or not found in the DOM.\");\r\n }\r\n // close if switch between mobile and desktop or vice versa\r\n if(\r\n (this.viewport >= this.desktopViewport && viewport() < this.desktopViewport) ||\r\n (this.viewport < this.desktopViewport && viewport() >= this.desktopViewport)\r\n ){\r\n if(this.HeaderOpen){\r\n this.closeHeader()\r\n }\r\n this.viewport = viewport();\r\n }\r\n });\r\n \r\n \r\n this.burger.addEventListener(\"click\", e => {\r\n if (this.HeaderOpen) {\r\n this.closeHeader();\r\n } else {\r\n this.openHeader();\r\n }\r\n });\r\n this.primaryLinks.forEach(link =>{\r\n link.parentElement.addEventListener(\"open\", () => {\r\n !this.HeaderOpen && this.openHeader();\r\n });\r\n link.parentElement.addEventListener(\"close\", () => {\r\n if (viewport() >= this.desktopViewport && this.isInline) {\r\n this.HeaderOpen && this.closeHeader();\r\n }\r\n });\r\n })\r\n }\r\n\r\n closeHeader(){\r\n this.scope.classList.add(\"header--closing\");\r\n this.scope.classList.remove(\"header--open\");\r\n setTimeout(() => {\r\n this.scope.classList.remove(\"header--closing\");\r\n }, 400);\r\n this.scope.querySelectorAll(\".nav--open\").forEach(nav => nav.Nav.closeNav());\r\n document.querySelector(\"body\").classList.remove(\"overflow-hidden\");\r\n if(this.burger.Burger.burgerOpen){\r\n this.burger.Burger.closeBurger();\r\n }\r\n this.burger.focus();\r\n this.HeaderOpen = false;\r\n }\r\n\r\n openHeader(){\r\n this.scope.classList.add(\"header--open\");\r\n document.querySelector(\"body\").classList.add(\"overflow-hidden\");\r\n if(this.scope.querySelector(\"[data-primary-nav] [data-toggle-nav]\")){\r\n this.scope.querySelector(\"[data-primary-nav] [data-toggle-nav]\").focus();\r\n }\r\n setTimeout(()=>{\r\n document.addEventListener('click', this.handleOutsideClick);\r\n document.addEventListener('keyup', this.handleOutsideKey);\r\n }, 100)\r\n\r\n this.HeaderOpen = true;\r\n }\r\n}\r\n\r\ndocument.querySelectorAll('[data-header]').forEach((el) => {\r\n new Header(el);\r\n});\r\n"],"file":"header-min.js"}