{"version":3,"file":"header-b2110d1b.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<HTMLElement>;\n  private dropdownParents: Array<HTMLElement>;\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<HTMLElement>('.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<HTMLElement>(\n        '.header__mobile-hamburger'\n      ),\n      utilityNav: this.el.querySelector<HTMLElement>('.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<HTMLElement>(\n        '.header__utility-persona-data'\n      ),\n      utilityDefault: this.el.querySelectorAll<HTMLElement>(\n        '.header__utility-default'\n      ),\n      headerCta: this.el.querySelector<HTMLElement>('#persona-header-cta'),\n      headerPersonaPicker: this.el.querySelector<HTMLElement>(\n        '.header__utility-persona'\n      ),\n      headerPersonaPickerList: this.el.querySelector<HTMLElement>(\n        '.header__utility-persona .header__utility-dropdown-list'\n      ),\n      headerPersonaSelect: this.el.querySelectorAll<HTMLElement>(\n        '.header__utility-audience-text'\n      ),\n      headerPersonaPickerOptions:\n        this.el.querySelectorAll<HTMLElement>('[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    if (this.dom.primaryNav && (this.dom.primaryNav as HTMLElement).querySelector('.header__primary-btn')) {\n      rovingIndex({\n        element: this.dom.primaryNav,\n        target: '.header__primary-btn'\n    });\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<HTMLElement>;\n    if (personaLinks?.length > 0) {\n      const selectOptionsArray = Array.from(\n        this.dom.headerPersonaPickerOptions as NodeListOf<HTMLButtonElement>\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 || !this.dom.headerCta) 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\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(\n          liMobile,\n          refPositionMobile\n        );\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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"}