{"version":3,"sources":["nav.js"],"names":["Nav","[object Object]","el","this","scope","isInline","closest","Header","trigger","querySelector","backLink","navOpen","isClosing","desktopViewport","handleOutsideClick","e","contains","target","closeNav","document","removeEventListener","handleOutsideKey","key","bindEvents","addEventListener","focus","openNav","dispatchEvent","Event","bubbles","classList","add","remove","setTimeout","viewport","querySelectorAll","forEach"],"mappings":"AAAA,MAAMA,IACJC,YAAYC,GACVC,KAAKC,MAAQF,EACbC,KAAKE,WAAWH,EAAGI,QAAQ,WAAYJ,EAAGI,QAAQ,UAAUC,OAAOF,SACnEF,KAAKC,MAAMJ,IAAMG,KACjBA,KAAKK,QAAUN,EAAGO,cAAc,qBAChCN,KAAKO,SAAWR,EAAGO,cAAc,eACjCN,KAAKQ,SAAU,EACfR,KAAKS,WAAY,EACjBT,KAAKU,gBAAkB,EAEvBV,KAAKW,mBAAqBC,CAAAA,IACnBZ,KAAKC,MAAMY,SAASD,EAAEE,SAAYd,KAAKK,QAAQQ,SAASD,EAAEE,UAC7Dd,KAAKe,WACLC,SAASC,oBAAoB,QAASjB,KAAKkB,kBAC3CF,SAASC,oBAAoB,QAASjB,KAAKW,uBAI/CX,KAAKkB,iBAAmBN,CAAAA,KACjBZ,KAAKC,MAAMY,SAASD,EAAEE,SAAYd,KAAKK,QAAQQ,SAASD,EAAEE,UAAqB,WAAVF,EAAEO,MAC1EnB,KAAKe,WACLC,SAASC,oBAAoB,QAASjB,KAAKkB,kBAC3CF,SAASC,oBAAoB,QAASjB,KAAKW,uBAI/CX,KAAKoB,aAGPtB,aACME,KAAKO,UACPP,KAAKO,SAASc,iBAAiB,QAAS,KACtCrB,KAAKQ,SAAU,EACfR,KAAKe,WACLf,KAAKK,QAAQiB,UAIbtB,KAAKK,SACPL,KAAKK,QAAQgB,iBAAiB,QAAS,KACjCrB,KAAKQ,QACPR,KAAKe,YAEDC,SAASV,cAAc,iBAEzBN,KAAKuB,aASfzB,YACME,KAAKS,WAAcT,KAAKQ,UAC5BR,KAAKS,WAAY,EACjBT,KAAKC,MAAMuB,cAAc,IAAIC,MAAM,QAAS,CAC1CC,SAAS,KAEX1B,KAAKC,MAAM0B,UAAUC,IAAI,gBACzB5B,KAAKC,MAAM0B,UAAUE,OAAO,aAC5B7B,KAAKQ,SAAU,EACfR,KAAKS,WAAY,EACjBqB,WAAW,KACT9B,KAAKC,MAAM0B,UAAUE,OAAO,iBAC3B,MAGL/B,UACME,KAAKQ,UACTR,KAAKC,MAAMuB,cAAc,IAAIC,MAAM,OAAQ,CACzCC,SAAS,KAEX1B,KAAKC,MAAM0B,UAAUC,IAAI,aACzB5B,KAAKQ,SAAU,EAEXuB,WAAa/B,KAAKU,kBAAoBV,KAAKE,SAC7CF,KAAKO,SAASe,QACLtB,KAAKC,MAAM0B,UAAUd,SAAS,YACvCiB,WAAW,KACT9B,KAAKC,MAAMK,cAAc,4BAA4BgB,UAE9CtB,KAAKC,MAAMK,cAAc,0BAClCN,KAAKC,MAAM+B,iBAAiB,oEAAoE,GAAGV,QAGrGQ,WAAW,KACTd,SAASK,iBAAiB,QAASrB,KAAKW,oBACxCK,SAASK,iBAAiB,QAASrB,KAAKkB,mBACvC,OAKPF,SAASgB,iBAAiB,cAAcC,QAAQlC,IAC9C,IAAIF,IAAIE","sourcesContent":["class Nav {\r\n constructor(el) {\r\n this.scope = el;\r\n this.isInline = el.closest(\"header\") ? el.closest(\"header\").Header.isInline : false;\r\n this.scope.Nav = this;\r\n this.trigger = el.querySelector(\"[data-toggle-nav]\");\r\n this.backLink = el.querySelector(\"[data-back]\");\r\n this.navOpen = false;\r\n this.isClosing = false;\r\n this.desktopViewport = 3;\r\n this.handleOutsideClick = (e) => {\r\n if (!this.scope.contains(e.target) && !this.trigger.contains(e.target)) {\r\n this.closeNav();\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.scope.contains(e.target) && !this.trigger.contains(e.target)) || (e.key === \"Escape\")) {\r\n this.closeNav();\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 if (this.backLink) {\r\n this.backLink.addEventListener(\"click\", () => {\r\n this.navOpen = true;\r\n this.closeNav();\r\n this.trigger.focus();\r\n });\r\n }\r\n\r\n if (this.trigger) {\r\n this.trigger.addEventListener(\"click\", () => {\r\n if (this.navOpen) {\r\n this.closeNav();\r\n } else {\r\n if(document.querySelector(\".header--open\") !== null){\r\n //close open nav first\r\n this.openNav();\r\n }else{\r\n this.openNav();\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n closeNav() {\r\n if (this.isClosing || !this.navOpen) return;\r\n this.isClosing = true;\r\n this.scope.dispatchEvent(\r\n new Event(\"close\", {bubbles: false})\r\n );\r\n this.scope.classList.add(\"nav--closing\");\r\n this.scope.classList.remove(\"nav--open\");\r\n this.navOpen = false;\r\n this.isClosing = false;\r\n setTimeout(()=>{\r\n this.scope.classList.remove(\"nav--closing\");\r\n }, 400)\r\n }\r\n\r\n openNav() {\r\n if (this.navOpen) return;\r\n this.scope.dispatchEvent(\r\n new Event(\"open\", {bubbles: false})\r\n );\r\n this.scope.classList.add(\"nav--open\");\r\n this.navOpen = true;\r\n if (viewport() < this.desktopViewport || !this.isInline) {\r\n this.backLink.focus()\r\n }else if(this.scope.classList.contains(\"nav__sub\")){\r\n setTimeout(()=> {\r\n this.scope.querySelector(\".nav--open .nav__items a\").focus();\r\n })\r\n } else if(this.scope.querySelector(\"[data-nav] [data-nav]\")){\r\n this.scope.querySelectorAll(\"[data-nav] [data-nav] a, [data-nav] [data-nav] [data-toggle-nav]\")[0].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}\r\n\r\ndocument.querySelectorAll('[data-nav]').forEach((el) => {\r\n new Nav(el);\r\n});\r\n"],"file":"nav-min.js"}