{"version":3,"file":"primary-nav.js","mappings":"gzBAAA,IAKMA,EAAU,WACd,SAAAA,K,4FAAcC,CAAA,KAAAD,GACZE,KAAKC,WAAaC,SAASC,cAAc,eACzCH,KAAKI,SAAWF,SAASG,iBAAiB,cAC1CL,KAAKM,eAAiB,KAEtBN,KAAKO,YACP,C,QA2DC,O,EA3DAT,E,EAAA,EAAAU,IAAA,aAAAC,MAED,WAAa,IAAAC,EAAA,KACXV,KAAKI,SAASO,SAAQ,SAAAC,GAEhBA,EAAKT,cAAc,mBACrBS,EAAKT,cAAc,yBAAyBU,iBAAiB,SAAS,WACpEH,EAAKI,eAAeF,EACtB,GAEJ,GACF,GAAC,CAAAJ,IAAA,iBAAAC,MAED,SAAeM,GACTA,EAAOC,UAAUC,SAAS,mBAC5BjB,KAAKkB,mBAAmBH,GAExBf,KAAKmB,iBAAiBJ,EAE1B,GAAC,CAAAP,IAAA,mBAAAC,MAED,SAAiBM,GAAuB,IAAAK,EAAA,KAAfC,EAAKC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,IAAAA,UAAA,GACtBG,EAAWV,EAAOZ,cAAc,8BAIpCH,KAAKM,gBACLN,KAAKM,iBAAmBS,EAAOZ,cAAc,+BAE7CH,KAAKkB,mBAAmBlB,KAAKM,eAAeoB,eAI9C1B,KAAKM,eAAiBmB,EAEtBzB,KAAKC,WAAWe,UAAUW,IAAI,mBAC9BZ,EAAOC,UAAUW,IAAI,mBACrBZ,EAAOZ,cAAc,yBAAyByB,aAAa,gBAAiB,QAIxEP,GACFQ,YAAW,WAAM,IAAAC,EACfL,SAA4B,QAApBK,EAARL,EAAUtB,cAAc,YAAI,IAAA2B,GAA5BA,EAA8BT,OAChC,GAAG,KAILN,SAAAA,EAAQF,iBAAiB,YAAY,SAAAkB,GAC9BN,EAASR,SAASc,EAAEC,gBACvBZ,EAAKF,mBAAmBH,EAE5B,GACF,GAAC,CAAAP,IAAA,qBAAAC,MAED,SAAmBM,GACjBf,KAAKC,WAAWe,UAAUiB,OAAO,mBACjClB,EAAOC,UAAUiB,OAAO,mBACxBlB,EAAOZ,cAAc,yBAAyByB,aAAa,gBAAiB,QAC9E,I,uEAAC9B,CAAA,CAlEa,GAqEhB,W","sources":["webpack://cornell-engineering/./static/js/components/primary-nav.js"],"sourcesContent":["/**\n * PrimaryNav\n *\n * Add behaviors to toggle the primary navigation dropdowns\n */\nclass PrimaryNav {\n constructor() {\n this.primaryNav = document.querySelector('.nav__inner');\n this.navItems = document.querySelectorAll('.nav__item');\n this.activeDropdown = null;\n\n this.bindEvents();\n }\n\n bindEvents() {\n this.navItems.forEach(item => {\n // Add event listeners if nav item has submenu dropdown\n if (item.querySelector('.nav__dropdown')) {\n item.querySelector('.nav__item-expand-btn').addEventListener('click', () => {\n this.toggleDropdown(item);\n });\n }\n });\n }\n\n toggleDropdown(target) {\n if (target.classList.contains('dropdown-active')) {\n this.onDropdownCollapse(target);\n } else {\n this.onDropdownExpand(target);\n }\n }\n\n onDropdownExpand(target, focus = false) {\n const dropdown = target.querySelector('.js--primary-nav__dropdown');\n\n // Collapse active dropdown\n if (\n this.activeDropdown &&\n this.activeDropdown !== target.querySelector('.js--primary-nav__dropdown')\n ) {\n this.onDropdownCollapse(this.activeDropdown.parentElement);\n }\n\n // Set new active dropdown\n this.activeDropdown = dropdown;\n\n this.primaryNav.classList.add('dropdown-active');\n target.classList.add('dropdown-active');\n target.querySelector('.nav__item-expand-btn').setAttribute('aria-expanded', 'true');\n\n // Focus on first link in dropdown\n // Delay focus to account for enter animation\n if (focus) {\n setTimeout(() => {\n dropdown?.querySelector('a')?.focus();\n }, 300);\n }\n\n // Close dropdown when focus leaves the dropdown\n target?.addEventListener('focusout', e => {\n if (!dropdown.contains(e.relatedTarget)) {\n this.onDropdownCollapse(target);\n }\n });\n }\n\n onDropdownCollapse(target) {\n this.primaryNav.classList.remove('dropdown-active');\n target.classList.remove('dropdown-active');\n target.querySelector('.nav__item-expand-btn').setAttribute('aria-expanded', 'false');\n }\n}\n\nexport default PrimaryNav;\n"],"names":["PrimaryNav","_classCallCheck","this","primaryNav","document","querySelector","navItems","querySelectorAll","activeDropdown","bindEvents","key","value","_this","forEach","item","addEventListener","toggleDropdown","target","classList","contains","onDropdownCollapse","onDropdownExpand","_this2","focus","arguments","length","undefined","dropdown","parentElement","add","setAttribute","setTimeout","_dropdown$querySelect","e","relatedTarget","remove"],"sourceRoot":""}