{"version":3,"file":"header-38dbca9e.js","sources":["../../../../src/scripts/modules/header.ts"],"sourcesContent":["import { Component } from '@verndale/core';\nimport { disableBodyScroll, clearAllBodyScrollLocks } from 'body-scroll-lock';\nimport { BodyScrollOptions } from 'body-scroll-lock';\nimport { rovingIndex } from 'roving-ux';\nimport { debounce } from '../helpers/debounce';\nimport { isTabletLandscape } from '../helpers/breakpoints';\nimport { FocusTrap, createFocusTrap } from 'focus-trap';\nimport Cookies from 'cookies-ts';\nimport { COOKIE_NAMES } from '../helpers/global-storage';\nimport { ExtendedWindowType } from '../helpers/global-types';\nimport { handleChangePersona } from '../helpers/personalize';\n\nexport const HEADER_EVENTS = Object.freeze({\n HEADER_RESIZE: 'header:resize'\n});\n\nclass Header extends Component {\n private dropdowns: Array;\n private dropdownParents: Array;\n private focusTrap: FocusTrap | null;\n private originalWidth: number;\n private animateHeader: NodeJS.Timer | null = null;\n private personaMapping: { [key: string]: string };\n\n constructor(el: HTMLElement) {\n super(el);\n this.dropdownParents = [];\n this.dropdowns = [];\n this.focusTrap = this.createFocusTrap();\n this.originalWidth = window.innerWidth;\n this.personaMapping = (\n document.querySelector('[data-persona-mapping]') as HTMLElement\n )?.dataset?.personaMapping\n ? JSON.parse(\n (document.querySelector('[data-persona-mapping]') as HTMLElement)\n ?.dataset.personaMapping as string\n )\n : null;\n\n this.updatePersona();\n }\n\n setupDefaults() {\n this.dom = {\n primaryNav: this.el.querySelector('.header__primary-nav'),\n primaryButtons: this.el.querySelectorAll('.header__primary-btn'),\n submenus: this.el.querySelectorAll('.header__primary-submenu'),\n backButton: this.el.querySelectorAll('.header__primary-back-btn'),\n hamburger: this.el.querySelector(\n '.header__mobile-hamburger'\n ),\n utilityNav: this.el.querySelector('.header__utility-nav'),\n utilityMobile: this.el.querySelectorAll('.header__utility-menu--mobile'),\n utilityLinks: this.el.querySelectorAll('.header__utility-persona-links'),\n\n utilityData: this.el.querySelector(\n '.header__utility-persona-data'\n ),\n utilityDefault: this.el.querySelectorAll(\n '.header__utility-default'\n ),\n headerCta: this.el.querySelector('.header__cta'),\n headerPersonaPicker: this.el.querySelector(\n '.header__utility-persona'\n ),\n headerPersonaPickerList: this.el.querySelector(\n '.header__utility-persona .header__utility-dropdown-list'\n ),\n headerPersonaSelect: this.el.querySelectorAll(\n '.header__utility-audience-text'\n ),\n headerPersonaPickerOptions:\n this.el.querySelectorAll('[data-persona]'),\n headerSearch: this.el.querySelectorAll('.header__search')\n };\n\n document.documentElement.style.setProperty(\n '--header-block-size',\n `${this.el.offsetHeight}px`\n );\n\n document.documentElement.style.setProperty(\n '--header-top-offset',\n `${this.el.getBoundingClientRect().top}px`\n );\n\n this.setRightOffsetForPersonaDropdown();\n }\n\n addListeners() {\n window.addEventListener('click', this.handleClickOutside.bind(this));\n window.addEventListener('keydown', this.handleEsc.bind(this));\n window.addEventListener(\n 'resize',\n debounce(this.handleResize.bind(this), 250)\n );\n\n (this.dom.utilityNav as HTMLElement)?.addEventListener(\n 'animationstart',\n e => {\n this.handleAnimateHeader(e);\n }\n );\n (this.dom.utilityNav as HTMLElement)?.addEventListener(\n 'animationend',\n e => {\n if (e.animationName == 'hideUtils') {\n if (this.animateHeader) {\n clearInterval(this.animateHeader);\n }\n }\n }\n );\n\n if (!this.el.classList.contains('campaign-header'))\n window.addEventListener(\n 'scroll',\n debounce(this.handleScroll.bind(this), 100)\n );\n\n (this.dom.primaryButtons as NodeList).forEach(trigger =>\n trigger.addEventListener('click', this.handlePrimaryClick.bind(this))\n );\n\n (this.dom.backButton as NodeList).forEach(trigger =>\n trigger.addEventListener('click', this.handleSubmenuBackButton.bind(this))\n );\n\n (this.dom.hamburger as HTMLElement)?.addEventListener(\n 'click',\n this.handleHamburgerClick.bind(this)\n );\n\n (this.dom.headerPersonaPickerOptions as NodeList).forEach(btn => {\n btn.addEventListener('click', this.handlePersonaPickerClick.bind(this));\n });\n }\n\n createFocusTrap() {\n const options = {\n reserveScrollBarGap: true,\n allowTouchMove: (el: HTMLElement) => {\n return el.closest('.header') !== null;\n }\n } as BodyScrollOptions;\n\n const trap = createFocusTrap(this.el, {\n clickOutsideDeactivates: false,\n returnFocusOnDeactivate: true,\n onActivate: () => {\n this.dropdownParents?.forEach(dropdown => {\n const list: HTMLElement = (dropdown as HTMLElement).querySelector(\n '.header__utility-dropdown-list'\n ) as HTMLElement;\n\n if (list) list.style.opacity = '0';\n });\n this.el.classList.add('open');\n (this.dom.hamburger as HTMLElement).setAttribute(\n 'aria-expanded',\n 'true'\n );\n\n disableBodyScroll(this.el, options);\n },\n onDeactivate: () => {\n this.el.classList.remove('open');\n\n (this.dom.hamburger as HTMLElement).setAttribute(\n 'aria-expanded',\n 'false'\n );\n\n clearAllBodyScrollLocks();\n this.closeSubmenu();\n }\n });\n\n return trap;\n }\n\n setRightOffsetForPersonaDropdown() {\n const personaDropdownRect = (\n this.dom.headerPersonaPickerList as HTMLElement\n )?.getBoundingClientRect();\n\n if (personaDropdownRect) {\n const translate = window.innerWidth - personaDropdownRect.right;\n if (translate < 0) {\n (this.dom.headerPersonaPickerList as HTMLElement)?.setAttribute(\n 'style',\n `transform: translateX(calc(${translate}px - var(--container-padding)))`\n );\n } else {\n (this.dom.headerPersonaPickerList as HTMLElement)?.setAttribute(\n 'style',\n `transform: translateX(0)`\n );\n }\n }\n }\n\n updatePersona() {\n const cookies = new Cookies();\n let personaCookie = cookies.get(COOKIE_NAMES.persona);\n const persona = document.querySelector('#persona') as HTMLDivElement;\n\n if (persona?.dataset?.personalize && !personaCookie) {\n personaCookie = persona?.dataset?.personalize;\n }\n\n if (personaCookie) {\n this.updatePersonaPicker(personaCookie);\n this.updatePersonaButton(personaCookie);\n this.updatePersonaNavigation(personaCookie);\n } else {\n this.updatePersonaButton('');\n this.updatePersonaNavigation('');\n }\n\n this.dropdownParents = Array.from(\n this.el.querySelectorAll('.header__utility-dropdown')\n );\n\n this.dropdowns = Array.from(\n this.el.querySelectorAll('.header__utility-dropdown-btn')\n );\n this.dropdowns.forEach(trigger =>\n trigger.addEventListener('click', this.handleDropdownClick.bind(this))\n );\n\n this.addRovingIndex();\n }\n\n addRovingIndex() {\n rovingIndex({\n element: this.dom.primaryNav,\n target: '.header__primary-btn'\n });\n\n this.dropdownParents?.forEach(dropdown => {\n const list: HTMLElement = (dropdown as HTMLElement).querySelector(\n '.header__utility-dropdown-list'\n ) as HTMLElement;\n\n if (list) {\n rovingIndex({\n element: list,\n target: '.header__utility-dropdown-link'\n });\n }\n });\n }\n\n updatePersonaPicker(persona: string) {\n const personaLinks = this.dom\n .headerPersonaSelect as NodeListOf;\n if (personaLinks?.length > 0) {\n const selectOptionsArray = Array.from(\n this.dom.headerPersonaPickerOptions as NodeListOf\n );\n const button = selectOptionsArray.find(\n el => el.dataset.persona === persona\n );\n const label = button?.innerHTML.trim();\n personaLinks.forEach(persona => (persona.innerText = label ? label : ''));\n }\n }\n\n async updatePersonaButton(persona: string) {\n if (!this.personaMapping) return;\n const personalizationData = {\n channel: 'WEB',\n currency: 'USD',\n pointOfSale: (window as ExtendedWindowType).Engage?.settings?.pointOfSale,\n friendlyId: this.personaMapping?.personaCta,\n // optional attributes:\n params: {\n person_type: persona\n }\n };\n\n const response = await (window as ExtendedWindowType).engage?.personalize(\n personalizationData\n );\n\n if (response?.cta?.url) {\n const headerCTA = this.dom.headerCta as HTMLElement;\n headerCTA.setAttribute('href', response.cta.url);\n headerCTA.setAttribute('target', response.cta.target);\n headerCTA.innerText = response.cta.label;\n }\n }\n\n async updatePersonaNavigation(persona: string) {\n if (!this.personaMapping) return;\n const refPosition = (this.dom.utilityLinks as NodeList)[0];\n const refPositionMobile = (this.dom.utilityLinks as NodeList)[2];\n\n if (persona === '') {\n (this.dom.utilityDefault as NodeList)?.forEach(element => {\n (element as HTMLElement).removeAttribute('hidden');\n });\n (refPosition as HTMLElement).setAttribute('hidden', 'true');\n (refPositionMobile as HTMLElement).setAttribute('hidden', 'true');\n return;\n }\n const personalizationData = {\n channel: 'WEB',\n currency: 'USD',\n pointOfSale: (window as ExtendedWindowType).Engage?.settings?.pointOfSale,\n friendlyId: this.personaMapping?.navigationLinks,\n // optional attributes:\n params: {\n person_type: persona\n }\n };\n\n const response = await (window as ExtendedWindowType).engage?.personalize(\n personalizationData\n );\n\n const responseNavigationLinks = response?.navigationLinks;\n\n if (responseNavigationLinks) {\n const previousAdded = document.querySelectorAll('[data-added]');\n previousAdded.forEach(element => {\n (element.closest('li') as HTMLElement)?.remove();\n });\n\n (this.dom.utilityDefault as NodeList)?.forEach(element => {\n (element as HTMLElement).setAttribute('hidden', 'true');\n });\n\n responseNavigationLinks.forEach((link, index) => {\n const li = document.createElement('li');\n if (\n link?.navigationLinks?.length &&\n link?.navigationLinks?.length > 0\n ) {\n li.classList.add('header__utility-dropdown');\n const button = document.createElement('button');\n button.classList.add('header__utility-dropdown-btn');\n button.setAttribute('aria-expanded', 'false');\n button.setAttribute(\n 'aria-controls',\n `dropdown-${index}-${link.label}`\n );\n button.setAttribute('data-added', 'true');\n button.addEventListener('click', this.handleDropdownClick.bind(this));\n button.innerText = link.label;\n const ul = document.createElement('ul');\n ul.classList.add('header__utility-dropdown-list');\n ul.setAttribute('id', `dropdown-${index}-${link.label}`);\n link.navigationLinks?.forEach(subLinkObj => {\n const subList = document.createElement('li');\n const subLink = document.createElement('a');\n subLink.classList.add('header__utility-dropdown-link');\n subLink.setAttribute('href', subLinkObj.url);\n subLink.setAttribute('target', subLinkObj.target);\n subLink.innerText = subLinkObj.label;\n subList.appendChild(subLink);\n ul.appendChild(subList);\n });\n this.dropdownParents.push(li);\n li.appendChild(button);\n li.appendChild(ul);\n } else {\n const a = document.createElement('a');\n a.setAttribute('href', link.url);\n a.setAttribute('target', link.target);\n a.setAttribute('data-added', 'true');\n a.classList.add('header__utility-link');\n a.innerText = link.label;\n li.appendChild(a);\n }\n const liMobile = li.cloneNode(true);\n refPosition.parentNode?.insertBefore(li, refPosition);\n refPositionMobile.parentNode?.insertBefore(liMobile, refPositionMobile);\n });\n }\n\n (refPosition as HTMLElement).setAttribute('hidden', 'true');\n (refPositionMobile as HTMLElement).setAttribute('hidden', 'true');\n }\n\n closeDropdowns() {\n this.dropdownParents.forEach((dropdown, index) => {\n (dropdown as HTMLElement).classList.remove(\n 'header__utility-dropdown--open'\n );\n (this.dropdowns[index] as HTMLElement)?.setAttribute(\n 'aria-expanded',\n 'false'\n );\n });\n }\n\n handleDropdownClick(e: Event) {\n const target = (e.target as HTMLElement).closest('button') as HTMLElement;\n const parent = target.parentElement;\n\n if (parent && target) {\n const parentList = target.parentNode;\n const parentDimensions = parent.getBoundingClientRect();\n const dropdownList = parentList?.querySelector(\n '.header__utility-dropdown-list'\n ) as HTMLElement;\n dropdownList.style.opacity = '1';\n if (isTabletLandscape) {\n if (\n dropdownList?.offsetHeight >=\n window.innerHeight - parentDimensions.top - parentDimensions.height\n ) {\n dropdownList.classList.add('header__utility-dropdown-list--top');\n } else {\n dropdownList.classList.remove('header__utility-dropdown-list--top');\n }\n } else {\n if (\n dropdownList.classList.contains('header__utility-dropdown-list--top')\n ) {\n dropdownList.classList.remove('header__utility-dropdown-list--top');\n }\n }\n }\n if (!parent?.classList.contains('header__utility-dropdown--open')) {\n this.closeDropdowns();\n parent?.classList.add('header__utility-dropdown--open');\n target.setAttribute('aria-expanded', 'true');\n const firstLink = parent?.querySelector(\n '.header__utility-dropdown-link'\n ) as HTMLElement;\n firstLink.focus();\n } else {\n parent.classList.remove('header__utility-dropdown--open');\n target.setAttribute('aria-expanded', 'false');\n }\n }\n\n closeSubmenu() {\n (this.dom.submenus as NodeList).forEach(submenu => {\n (submenu as HTMLElement).classList.remove(\n 'header__primary-submenu--open'\n );\n (submenu as HTMLElement).style.opacity = '0';\n });\n (this.dom.primaryButtons as NodeList).forEach(submenu =>\n (submenu as HTMLElement).setAttribute('aria-expanded', 'false')\n );\n\n if (isTabletLandscape) {\n (this.dom.primaryButtons as NodeList).forEach(button =>\n (button as HTMLElement).setAttribute('style', '')\n );\n (this.dom.utilityMobile as NodeList).forEach(mobile =>\n (mobile as HTMLElement).setAttribute('style', '')\n );\n (this.dom.headerSearch as NodeList).forEach(search =>\n (search as HTMLElement).setAttribute('style', '')\n );\n }\n }\n\n handlePrimaryClick(e: Event) {\n const target = (e.currentTarget as HTMLElement).closest(\n 'button'\n ) as HTMLElement;\n const submenu = target.nextElementSibling as HTMLElement;\n\n target.focus();\n\n if (!submenu?.classList.contains('header__primary-submenu--open')) {\n this.closeSubmenu();\n submenu.style.opacity = '1';\n submenu?.classList.add('header__primary-submenu--open');\n if (isTabletLandscape) {\n setTimeout(() => {\n (this.dom.primaryButtons as NodeList).forEach(button =>\n (button as HTMLElement).setAttribute('style', 'visibility: hidden;')\n );\n (this.dom.utilityMobile as NodeList).forEach(mobile =>\n (mobile as HTMLElement).setAttribute('style', 'visibility: hidden')\n );\n (this.dom.headerSearch as NodeList).forEach(search =>\n (search as HTMLElement).setAttribute('style', 'visibility: hidden')\n );\n }, 400);\n }\n target?.setAttribute('aria-expanded', 'true');\n } else {\n submenu?.classList.remove('header__primary-submenu--open');\n target?.setAttribute('aria-expanded', 'false');\n }\n }\n\n handleSubmenuBackButton(e: Event) {\n const target = e.currentTarget as HTMLElement;\n const submenu = target.closest('.header__primary-submenu');\n\n submenu?.classList.remove('header__primary-submenu--open');\n\n if (isTabletLandscape) {\n (this.dom.primaryButtons as NodeList).forEach(button =>\n (button as HTMLElement).setAttribute('style', '')\n );\n (this.dom.utilityMobile as NodeList).forEach(mobile =>\n (mobile as HTMLElement).setAttribute('style', '')\n );\n (this.dom.headerSearch as NodeList).forEach(search =>\n (search as HTMLElement).setAttribute('style', '')\n );\n }\n }\n\n handleHamburgerClick() {\n if (!this.el.classList.contains('open')) {\n this.focusTrap?.activate();\n } else {\n this.focusTrap?.deactivate();\n }\n }\n\n handleEsc(e: KeyboardEvent) {\n if (e.code === 'Escape') {\n this.closeDropdowns();\n this.closeSubmenu();\n }\n }\n\n handleClickOutside(e: Event) {\n if (!(e.target as HTMLElement)?.closest('.header__utility-dropdown')) {\n this.closeDropdowns();\n }\n\n if (!(e.target as HTMLElement)?.closest('.header__primary-nav')) {\n if (!isTabletLandscape) {\n this.closeSubmenu();\n }\n }\n\n if ((e.target as HTMLElement)?.classList.contains('header__primary-btn')) {\n (window as ExtendedWindowType).dataLayer.push({\n event_attributes: {},\n event: 'nav_click',\n event_category: 'navigation',\n event_action: 'top nav',\n event_label: (e.target as HTMLElement).innerHTML.toString().trim()\n });\n }\n\n if (\n (e.target as HTMLElement)?.closest('.header__primary-nav-link-heading')\n ) {\n (window as ExtendedWindowType).dataLayer.push({\n event_attributes: {\n primary_menu_item: (e.target as HTMLElement)\n .closest('.header__primary-list')\n ?.querySelector('.header__primary-btn')\n ?.innerHTML.toString()\n .trim(),\n secondary_menu_item: ''\n },\n event: 'nav_click',\n event_category: 'navigation',\n event_action: 'mega menu',\n event_label: (e.target as HTMLElement).innerHTML.toString().trim()\n });\n }\n if (\n (e.target as HTMLElement)?.classList.contains('header__primary-nav-link')\n ) {\n (window as ExtendedWindowType).dataLayer.push({\n event_attributes: {\n primary_menu_item: (e.target as HTMLElement)\n .closest('.header__primary-list')\n ?.querySelector('.header__primary-btn')\n ?.innerHTML.toString()\n .trim(),\n secondary_menu_item: (e.target as HTMLElement)\n .closest('.header__primary-nav-list')\n ?.querySelector('.header__primary-nav-link-heading span')\n ?.innerHTML.toString()\n .trim()\n },\n event: 'nav_click',\n event_category: 'navigation',\n event_action: 'mega menu',\n event_label: (e.target as HTMLElement).innerHTML.toString().trim()\n });\n }\n }\n\n handlePersonaPickerClick(e: Event) {\n const target = e.currentTarget as HTMLElement;\n const persona = target.dataset.persona;\n if (!persona) return;\n\n handleChangePersona(persona);\n this.updatePersonaButton(persona);\n this.updatePersonaPicker(persona);\n this.updatePersonaNavigation(persona);\n this.closeDropdowns();\n }\n\n handleResize() {\n this.setRightOffsetForPersonaDropdown();\n document.documentElement.style.setProperty(\n '--header-block-size',\n `${this.el.offsetHeight}px`\n );\n window.dispatchEvent(new Event(HEADER_EVENTS.HEADER_RESIZE));\n\n if (window.innerWidth !== this.originalWidth) {\n this.originalWidth = innerWidth;\n\n (this.dom.submenus as NodeList).forEach(\n submenu => ((submenu as HTMLElement).style.opacity = '0')\n );\n this.dropdownParents?.forEach(dropdown => {\n const list: HTMLElement = (dropdown as HTMLElement).querySelector(\n '.header__utility-dropdown-list'\n ) as HTMLElement;\n\n list.style.opacity = '0';\n });\n\n if (!isTabletLandscape && this.el.classList.contains('open')) {\n clearAllBodyScrollLocks();\n this.el.classList.remove('open');\n\n (this.dom.hamburger as HTMLElement).setAttribute(\n 'aria-expanded',\n 'false'\n );\n }\n }\n }\n\n handleScroll() {\n if (!this.el.classList.contains('header--scrolled')) {\n if (window.scrollY > 0) {\n this.el.classList.add('header--scrolled');\n }\n } else {\n if (window.scrollY === 0) {\n this.el.classList.remove('header--scrolled');\n document.documentElement.style.setProperty(\n '--header-block-size',\n `${this.el.offsetHeight}px`\n );\n\n window.dispatchEvent(new Event(HEADER_EVENTS.HEADER_RESIZE));\n }\n }\n\n document.documentElement.style.setProperty(\n '--header-top-offset',\n `${this.el.getBoundingClientRect().top}px`\n );\n }\n\n handleAnimateHeader(e: AnimationEvent) {\n if (e.animationName == 'hideUtils') {\n this.animateHeader = setInterval(() => {\n document.documentElement.style.setProperty(\n '--header-block-size',\n `${this.el.offsetHeight}px`\n );\n window.dispatchEvent(new Event(HEADER_EVENTS.HEADER_RESIZE));\n }, 1);\n }\n }\n}\n\nexport default Header;\n"],"names":["HEADER_EVENTS","Header","Component","el","__publicField","_b","_a","_c","debounce","e","trigger","btn","options","createFocusTrap","dropdown","list","disableBodyScroll","clearAllBodyScrollLocks","personaDropdownRect","translate","personaCookie","Cookies","COOKIE_NAMES","persona","rovingIndex","personaLinks","button","label","personalizationData","response","_d","_e","headerCTA","refPosition","refPositionMobile","element","responseNavigationLinks","_f","link","index","li","ul","subLinkObj","subList","subLink","a","liMobile","target","parent","parentList","parentDimensions","dropdownList","isTabletLandscape","submenu","mobile","search","_g","_i","_h","_k","_j","handleChangePersona"],"mappings":"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"}