{"version":3,"file":"358.min.js?t=1744984834426","mappings":"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","sources":["webpack://@hero-digital/masonite/./src/components/modules/Header/SiteSearch.js","webpack://@hero-digital/masonite/./src/components/modules/Header/Header.js","webpack://@hero-digital/masonite/./src/js/utilities/accordion.js","webpack://@hero-digital/masonite/./src/js/utilities/tokenReplace.js"],"sourcesContent":["import {\n\tactionOnClickOutside,\n\tlimitKeyboardAccessibility\n} from '../../../js/utilities/utilities'\nimport Pristine from 'pristinejs'\nimport Analytics from 'services/Analytics/Analytics'\n\n/**\n * Site Search Component that handles the search functionality\n */\nexport default class SiteSearch {\n\tstatic SELECTORS = {\n\t\tFORM_DESKTOP: '[data-cmp-hook=\"header-search-form\"]',\n\t\tINPUT_DESKTOP: '[data-cmp-hook=\"header-search\"]',\n\t\tFORM_MOBILE_CONTAINER: '[data-cmp-hook=\"header-form-mobile-container\"]',\n\t\tFORM_MOBILE: '[data-cmp-hook=\"header-nav-search-form\"]',\n\t\tINPUT_MOBILE: '[data-cmp-hook=\"header-nav-search\"]'\n\t}\n\n\tstatic CLASSES = {\n\t\tMOBILE_FORM_ERROR: 'module-header-nav-search__form--error',\n\t\tFORM_ERROR: 'fdn-input__error',\n\t\tINPUT_ERROR: 'fdn-input__error-container',\n\t\tFORM_DESKTOP: 'module-header-search__form',\n\t\tINPUT_CONTAINER_DESKTOP: 'module-header-search__input',\n\t\tFORM_MOBILE: 'module-header-nav-search__form',\n\t\tINPUT_CONTAINER_MOBILE: 'module-header-nav-search__form-group'\n\t}\n\n\tstatic NAMES = {\n\t\tDESKTOP_SEARCH: 'searchinput',\n\t\tMOBILE_SEARCH: 'search'\n\t}\n\n\t/**\n\t * @param {*} element - the element to attach the component to\n\t * @param {Object} config - configuration object\n\t * @param {HTMLElement} config.headerElement - the header element\n\t * @param {Function} config.onOpenSearch - callback function to run when search is opened\n\t */\n\tconstructor(element, { headerElement, onOpenSearch }) {\n\t\tthis.element = element\n\t\tthis.analyticsService = Analytics.getInstance()\n\t\tthis.header = headerElement\n\t\tthis.onOpenSearch = onOpenSearch\n\n\t\tthis.init()\n\t}\n\n\tinit() {\n\t\tthis.cacheDom()\n\t\tthis.attachEvents()\n\t\tthis.setupSearch()\n\t}\n\n\t/**\n\t * Cache the dom refs needed for the component\n\t */\n\tcacheDom() {\n\t\tthis.desktopForm = this.header.querySelector(\n\t\t\tSiteSearch.SELECTORS.FORM_DESKTOP\n\t\t)\n\t\tthis.inputDesktop = this.header.querySelector(\n\t\t\tSiteSearch.SELECTORS.INPUT_DESKTOP\n\t\t)\n\t\tthis.mobileFormContainer = this.header.querySelector(\n\t\t\tSiteSearch.SELECTORS.FORM_MOBILE_CONTAINER\n\t\t)\n\t\tthis.mobileForm = this.header.querySelector(\n\t\t\tSiteSearch.SELECTORS.FORM_MOBILE\n\t\t)\n\t\tthis.inputMobile = this.header.querySelector(\n\t\t\tSiteSearch.SELECTORS.INPUT_MOBILE\n\t\t)\n\t\tthis.clearButton = this.header.querySelector(\n\t\t\tSiteSearch.SELECTORS.CLEAR_BUTTON\n\t\t)\n\t}\n\n\t/**\n\t * Attach event listeners for the component\n\t */\n\tattachEvents() {\n\t\tif (this.desktopForm) {\n\t\t\tthis.desktopForm.addEventListener('submit', this.addValidation)\n\t\t}\n\t\tif (this.mobileForm) {\n\t\t\tthis.mobileForm.addEventListener('submit', this.addValidation)\n\t\t\tthis.mobileForm.addEventListener('search', this.addMobileError)\n\t\t\tthis.inputMobile.addEventListener('input', this.clearMobileError)\n\t\t}\n\t}\n\n\t/**\n\t * Detach event listeners for the component\n\t */\n\tdetachEvents() {\n\t\tif (this.desktopForm) {\n\t\t\tthis.desktopForm.removeEventListener('submit', this.addValidation)\n\t\t}\n\t\tif (this.mobileForm) {\n\t\t\tthis.mobileForm.removeEventListener('submit', this.addValidation)\n\t\t\tthis.mobileForm.removeEventListener('search', this.addMobileError)\n\t\t\tthis.inputMobile.removeEventListener('input', this.clearMobileError)\n\t\t}\n\t}\n\n\t/**\n\t * Destroy the component\n\t */\n\tdestroy() {\n\t\tthis.detachEvents()\n\t\tthis.pristine.destroy()\n\t}\n\n\t// open search\n\topenSearch() {\n\t\t// special actions for desktop\n\t\tif (this.search.triggerEnv === 'desktop') {\n\t\t\t// because we are not passing on mouse click we need to manually make sure any open nav menu is closed\n\t\t\tif (typeof this.onOpenSearch === 'function') {\n\t\t\t\tthis.onOpenSearch()\n\t\t\t}\n\t\t\t// no body scrolling\n\t\t\tdocument.body.classList.add('no-scroll')\n\t\t\t// handle outside clicks\n\t\t\tactionOnClickOutside(this.search.obj, () => {\n\t\t\t\tthis.closeSearch({\n\t\t\t\t\tignoreClickListener: true\n\t\t\t\t})\n\t\t\t})\n\t\t}\n\t\t// common actions\n\t\tthis.search.obj.classList.add('active')\n\t\tthis.search.obj.setAttribute('aria-hidden', false)\n\t\tthis.search.trigger.setAttribute('aria-expanded', true)\n\t\t// keyboard accessibility\n\t\tlimitKeyboardAccessibility(this.search.obj, () => {\n\t\t\tthis.closeSearch({\n\t\t\t\tignoreKeyboardHandler: true\n\t\t\t})\n\t\t})\n\t\t// disable keyhandling on open header in mobile\n\t\tif (this.search.triggerEnv === 'mobile')\n\t\t\tthis.header.disableKeyHandler = true\n\t\t// add class to header\n\t\tthis.header.classList.add('search-active')\n\t\t// make active\n\t\tthis.search.active = true\n\t\t// add focus to input on desktop\n\t\tif (this.search.triggerEnv === 'desktop') this.search.input.focus()\n\t}\n\n\t// close search\n\tcloseSearch(params) {\n\t\t// special actions for desktop\n\t\tif (this.search.triggerEnv === 'desktop') {\n\t\t\tthis.search.top.style.minHeight = null\n\t\t\t// enable body scrolling\n\t\t\tdocument.body.classList.remove('no-scroll')\n\t\t\t// remove click detection\n\t\t\tif (!params || !params.ignoreClickListener) {\n\t\t\t\tthis.search.obj.clearListener()\n\t\t\t}\n\t\t}\n\t\t// common actions\n\t\tthis.search.obj.classList.remove('active')\n\t\tthis.search.obj.setAttribute('aria-hidden', true)\n\t\tthis.search.trigger.setAttribute('aria-expanded', false)\n\t\t// this.closeSearchSuggestions()\n\t\tthis.search.input.value = null\n\t\tthis.search.input.blur()\n\t\t// remove keyboard accessibility\n\t\tif (!params || !params.ignoreKeyboardHandler) {\n\t\t\tthis.search.obj.clearKeyHandler()\n\t\t}\n\t\t// disable keyhandling on open header in mobile\n\t\tif (this.search.triggerEnv === 'mobile') {\n\t\t\tthis.header.disableKeyHandler = false\n\t\t}\n\t\t// remove class from header\n\t\tthis.header.classList.remove('search-active')\n\t\t// make not active\n\t\tthis.search.active = false\n\t\t// restore focus to trigger on desktop\n\t\tif (this.search.triggerEnv === 'desktop') this.search.trigger.focus()\n\n\t\t// Clear validation errors\n\t\tthis.clearErrors()\n\t}\n\n\t// set up searching\n\tsetupSearch() {\n\t\t// build up search object\n\t\tthis.search = {}\n\t\tthis.search.obj = this.header.querySelector('.module-header-search')\n\t\tthis.search.active = false\n\t\tthis.search.trigger = this.header.querySelector(\n\t\t\t'.module-header-search__trigger'\n\t\t)\n\t\tthis.search.top = this.search.obj.querySelector(\n\t\t\t'.module-header-search__top'\n\t\t)\n\t\tthis.search.form = this.search.obj.querySelector(\n\t\t\t'.module-header-search__form'\n\t\t)\n\t\tthis.search.input = this.search.form.querySelector(\n\t\t\t'.module-header-search__input'\n\t\t)\n\t\tthis.search.submit = this.search.form.querySelector(\n\t\t\t'.module-header-search__btn'\n\t\t)\n\t\tthis.search.suggestionsTitle = this.search.obj.querySelector(\n\t\t\t'.module-header-search__results .title'\n\t\t)\n\t\t// setup search trigger for desktop\n\t\tthis.search.trigger.addEventListener('click', (e) => {\n\t\t\tif (!this.search.active) {\n\t\t\t\te.stopPropagation()\n\t\t\t\tthis.search.triggerEnv = 'desktop'\n\t\t\t\tthis.openSearch()\n\t\t\t} else if (this.search.active) {\n\t\t\t\tthis.closeSearch()\n\t\t\t\tthis.search.triggerEnv = null\n\t\t\t}\n\t\t})\n\t\t// setup close button\n\t\tconst closeBtn = this.search.obj.querySelector(\n\t\t\t'.module-header-search__close'\n\t\t)\n\t\tcloseBtn.addEventListener('click', () => {\n\t\t\tif (this.search.active) {\n\t\t\t\tthis.closeSearch()\n\t\t\t\tthis.search.triggerEnv = null\n\t\t\t}\n\t\t})\n\t}\n\n\t/**\n\t * Add validation to the form\n\t * @param {Event} event - the event object\n\t */\n\taddValidation = (event) => {\n\t\tevent.preventDefault()\n\t\tconst form = event.target\n\t\tconst targetForm = form.dataset.breakpoint\n\n\t\t// PristineJS configuration\n\t\tconst config = {\n\t\t\tlive: false,\n\t\t\tclassTo:\n\t\t\t\ttargetForm === 'desktop'\n\t\t\t\t\t? SiteSearch.CLASSES.INPUT_CONTAINER_DESKTOP\n\t\t\t\t\t: SiteSearch.CLASSES.INPUT_CONTAINER_MOBILE,\n\t\t\terrorTextParent:\n\t\t\t\ttargetForm === 'desktop'\n\t\t\t\t\t? SiteSearch.CLASSES.INPUT_CONTAINER_DESKTOP\n\t\t\t\t\t: SiteSearch.CLASSES.INPUT_CONTAINER_MOBILE,\n\t\t\terrorClass: SiteSearch.CLASSES.FORM_ERROR,\n\t\t\terrorTextClass: SiteSearch.CLASSES.INPUT_ERROR,\n\t\t\terrorTextTag: 'div'\n\t\t}\n\n\t\t// Validate search query\n\t\tthis.pristine = new Pristine(\n\t\t\ttargetForm === 'desktop' ? this.desktopForm : this.mobileForm,\n\t\t\tconfig\n\t\t)\n\t\tconst valid = this.pristine.validate()\n\n\t\tif (valid) {\n\t\t\tthis.trackInteraction()\n\t\t\tform.submit()\n\t\t} else {\n\t\t\t// Add error class to mobile form\n\t\t\tif (targetForm === 'mobile') {\n\t\t\t\tthis.addMobileError()\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Clear error styles and validation messages\n\t */\n\tclearErrors = () => {\n\t\tif (this.pristine) {\n\t\t\tthis.pristine.reset()\n\t\t}\n\t\tthis.mobileFormContainer.classList.remove(\n\t\t\tSiteSearch.CLASSES.MOBILE_FORM_ERROR\n\t\t)\n\t}\n\n\t/**\n\t * Add error styles\n\t */\n\taddMobileError = () => {\n\t\tif (this.pristine) {\n\t\t\tthis.mobileFormContainer.classList.add(\n\t\t\t\tSiteSearch.CLASSES.MOBILE_FORM_ERROR\n\t\t\t)\n\t\t}\n\t}\n\n\t/**\n\t * Track interaction\n\t */\n\ttrackInteraction = () => {\n\t\tlet searchTerm = null\n\n\t\tif (this.inputMobile.value !== '') {\n\t\t\tsearchTerm = this.inputMobile.value\n\t\t} else {\n\t\t\tsearchTerm = this.inputDesktop.value\n\t\t}\n\n\t\tthis.analyticsService.trackInteraction('search', {\n\t\t\tsearch_term: searchTerm\n\t\t})\n\t}\n}\n","import { enableBodyScroll } from 'body-scroll-lock'\nimport Services from 'services'\nimport { AccordionWidget } from 'utilities/accordion'\nimport {\n\tactionOnClickOutside,\n\tlimitKeyboardAccessibility\n} from 'utilities/utilities'\nimport SiteSearch from './SiteSearch'\nimport { tokenReplace } from 'utilities/tokenReplace'\n\nclass Header {\n\tstatic SELECTORS = {\n\t\tCOMPONENT: '[data-cmp-is=\"header\"]',\n\t\tSTICKY_WRAPPER: '[data-sticky-wrapper=\"\"]',\n\t\tSITE_SEARCH: '[data-site-search=\"\"]',\n\t\tFAVORITES: '[data-cmp-hook=\"favorites-count\"]',\n\t\tFAVORITES_LABEL: '[data-cmp-hook=\"favorites-a11ty\"]',\n\t\tFAVORITES_ICON: '[data-cmp-hook=\"favorites-icon\"]'\n\t}\n\n\tstatic CLASSES = {\n\t\tHIDDEN: 'module-header--hidden',\n\t\tACTIVE: 'module-header-favorites-svg-heart--active'\n\t}\n\n\tstatic EVENTS = {\n\t\tSAVE_FAVORITE: 'saveFavorite',\n\t\tREMOVE_FAVORITE: 'removeFavorite'\n\t}\n\n\tconstructor(element) {\n\t\tthis.setupAlertBannerObservation()\n\t\tthis.header = element\n\t\tthis.services = Services.getInstance()\n\t\tthis.config = {\n\t\t\tmatch: false,\n\t\t\tmyObserver: null\n\t\t}\n\n\t\tthis.ScrollService = this.services.ScrollService\n\t\tthis.ResizeService = this.services.ResizeService\n\t\tthis.EventEmitterService = this.services.EventEmitterService\n\n\t\tthis.cacheDom()\n\n\t\tthis.mqContext()\n\t\tthis.createSiteSearch()\n\t\tthis.updateFavorites()\n\t\tthis.makeSticky()\n\t\tthis.attachEvents()\n\t}\n\n\tcacheDom() {\n\t\tthis.toggle = this.header.querySelector('.js-nav-toggle')\n\t\tthis.mainNav = this.header.querySelector('.js-main-nav')\n\t\tthis.alertBanners = this.header.querySelectorAll('.mod-alert-banner')\n\t\tthis.menuContainer = this.mainNav.querySelector('.container')\n\t\tthis.tertiaryNavs = this.mainNav.querySelectorAll(\n\t\t\t'.module-header-nav-tertiary'\n\t\t)\n\t\tthis.stickyWrapper = this.header.querySelector(\n\t\t\tHeader.SELECTORS.STICKY_WRAPPER\n\t\t)\n\t\tthis.mobileActiveClass = 'mobile-active'\n\t\tthis.mobileScrollEl = this.header.querySelector(\n\t\t\t'.module-header__scroll-wrapper'\n\t\t)\n\t\tthis.siteSearchEl = this.header.querySelector(\n\t\t\tHeader.SELECTORS.SITE_SEARCH\n\t\t)\n\t\tthis.favoritesCountEl = this.header.querySelector(\n\t\t\tHeader.SELECTORS.FAVORITES\n\t\t)\n\t\tthis.favoritesCountLabel = this.header.querySelector(\n\t\t\tHeader.SELECTORS.FAVORITES_LABEL\n\t\t)\n\t\tthis.favoritesIcon = this.header.querySelector(\n\t\t\tHeader.SELECTORS.FAVORITES_ICON\n\t\t)\n\t}\n\n\tsetupAlertBannerObservation() {\n\t\tthis.observer = new MutationObserver((mutationsList) => {\n\t\t\tfor (const mutation of mutationsList) {\n\t\t\t\t// If the mutation was an attribute change\n\t\t\t\tif (\n\t\t\t\t\tmutation.type === 'attributes' &&\n\t\t\t\t\t(mutation.attributeName === 'aria-expanded' ||\n\t\t\t\t\t\tmutation.attributeName === 'aria-hidden')\n\t\t\t\t) {\n\t\t\t\t\t// If the observed element has the class \"mod-alert-banner\" run your function.\n\t\t\t\t\tif (mutation.target.classList.contains('mod-alert-banner')) {\n\t\t\t\t\t\tthis.calculateMenuHeight()\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Handle added or removed child nodes\n\t\t\t\tif (mutation.type === 'childList') {\n\t\t\t\t\tconst headerElement = document.querySelector(\n\t\t\t\t\t\tHeader.SELECTORS.COMPONENT\n\t\t\t\t\t)\n\t\t\t\t\tif (\n\t\t\t\t\t\tmutation.target === headerElement ||\n\t\t\t\t\t\theaderElement.contains(mutation.target)\n\t\t\t\t\t) {\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis.calculateMenuHeight()\n\t\t\t\t\t\t}, 1000)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\t// Observe attribute changes and subtree (including child list changes)\n\t\tthis.observer.observe(\n\t\t\tdocument.querySelector(Header.SELECTORS.COMPONENT),\n\t\t\t{\n\t\t\t\tattributes: true,\n\t\t\t\tchildList: true,\n\t\t\t\tsubtree: true\n\t\t\t}\n\t\t)\n\t}\n\n\tattachEvents() {\n\t\t// set up toggle\n\t\tthis.toggle.addEventListener('click', this.toggleState)\n\n\t\t// Listen to Favorite changes\n\t\tthis.EventEmitterService.on(\n\t\t\tHeader.EVENTS.SAVE_FAVORITE,\n\t\t\tthis.updateFavorites\n\t\t)\n\t\tthis.EventEmitterService.on(\n\t\t\tHeader.EVENTS.REMOVE_FAVORITE,\n\t\t\tthis.updateFavorites\n\t\t)\n\n\t\t// Add window orientation change event to call calculateMenuHeight\n\t\twindow.addEventListener('orientationchange', () => {\n\t\t\tthis.closeoutNav()\n\t\t})\n\t}\n\n\tremoveEvents() {\n\t\tthis.toggle.removeEventListener('click', this.toggleState)\n\t\tthis.EventEmitterService.off(\n\t\t\tHeader.EVENTS.SAVE_FAVORITE,\n\t\t\tthis.updateFavorites\n\t\t)\n\t\tthis.EventEmitterService.off(\n\t\t\tHeader.EVENTS.REMOVE_FAVORITE,\n\t\t\tthis.updateFavorites\n\t\t)\n\t}\n\n\tdestroy() {\n\t\tthis.removeEvents()\n\t\tthis.observer.disconnect()\n\t}\n\n\tmqContext() {\n\t\tconst _ = this\n\t\tconst mediaQuery = window.matchMedia('(min-width: 996px)')\n\n\t\tfunction mediaQueryChange(mediaQuery) {\n\t\t\t// Desktop\n\t\t\tif (mediaQuery.matches) {\n\t\t\t\t_.config.match = true\n\t\t\t\t_.mainNav.setAttribute('aria-hidden', false)\n\t\t\t\t_.addSubNavFunctionality()\n\t\t\t\t// Mobile / Tablet\n\t\t\t} else {\n\t\t\t\t_.config.match = false\n\n\t\t\t\t// if resizing from desktop down to mobile\n\t\t\t\t// and myObserver is active\n\t\t\t\tif (_.config.myObserver !== null) {\n\t\t\t\t\t// disconnect myObserver\n\t\t\t\t\t_.config.myObserver.disconnect()\n\n\t\t\t\t\t// set exising panel heights to 'auto'\n\t\t\t\t\tconst panels = _.mainNav.querySelectorAll(\n\t\t\t\t\t\t'.module-header-nav__panel'\n\t\t\t\t\t)\n\t\t\t\t\tpanels.forEach((panel) => {\n\t\t\t\t\t\tpanel.style.height = 'auto'\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t_.addSubNavFunctionality()\n\t\t\t}\n\t\t}\n\n\t\tmediaQuery.addEventListener('change', mediaQueryChange);\n\n\t\t// on page load\n\t\tmediaQueryChange(mediaQuery)\n\t}\n\n\tcreateSiteSearch() {\n\t\tif (this.siteSearchEl) {\n\t\t\tthis.siteSearch = new SiteSearch(this.siteSearchEl, {\n\t\t\t\theaderElement: this.header,\n\t\t\t\tonOpenSearch: this.collapsePrimary.bind(this, true)\n\t\t\t})\n\t\t}\n\t}\n\n\tupdateFavorites = () => {\n\t\tif (this.favoritesCountEl && this.favoritesCountLabel) {\n\t\t\t// Reset a11ty label\n\t\t\tthis.favoritesCountLabel.innerText =\n\t\t\t\tthis.favoritesCountLabel.dataset.label\n\n\t\t\t// Get all favorite types from localsotrage\n\t\t\tconst doorFavorites = localStorage.getItem('doorFavorites')\n\t\t\t\t? JSON.parse(localStorage.getItem('doorFavorites'))\n\t\t\t\t: []\n\t\t\t// Merge all favorite types from localsotrage\n\t\t\tconst favorites = [...doorFavorites]\n\n\t\t\t// Update count and icon if there are favorites\n\t\t\tif (favorites.length > 0) {\n\t\t\t\tthis.favoritesCountLabel.textContent = tokenReplace(\n\t\t\t\t\tthis.favoritesCountLabel.textContent,\n\t\t\t\t\t{\n\t\t\t\t\t\tfavoritesCount: favorites.length\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\tthis.favoritesCountEl.innerText = favorites.length || ''\n\t\t\t\tthis.favoritesCountEl.classList.remove(Header.CLASSES.HIDDEN)\n\t\t\t\tthis.favoritesIcon.classList.add(Header.CLASSES.ACTIVE)\n\t\t\t\tthis.favoritesIcon.src = '/dist/assets/icons/save-active.svg'\n\t\t\t} else {\n\t\t\t\tthis.favoritesCountLabel.textContent = tokenReplace(\n\t\t\t\t\tthis.favoritesCountLabel.textContent,\n\t\t\t\t\t{\n\t\t\t\t\t\tfavoritesCount: 0\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\tthis.favoritesCountEl.innerText = ''\n\t\t\t\tthis.favoritesCountEl.classList.add(Header.CLASSES.HIDDEN)\n\t\t\t\tthis.favoritesIcon.classList.remove(Header.CLASSES.ACTIVE)\n\t\t\t\tthis.favoritesIcon.src = '/dist/assets/icons/save.svg'\n\t\t\t}\n\t\t}\n\t}\n\n\tcollapsePrimary(openInit) {\n\t\tthis.navRef?.primary?.obj?.close()\n\t\tif (openInit) {\n\t\t\tthis.navRef?.primary?.obj?.openInit()\n\t\t}\n\t}\n\n\tcollapseAllSections() {\n\t\tthis.collapseExpandedSubsections()\n\t\tthis.collapseExpandedSections()\n\t}\n\n\tcollapseExpandedSections() {\n\t\tconst sections = this.navRef.primary.sections\n\t\tfor (const node in sections) {\n\t\t\tconst section = sections[node].obj\n\t\t\tif (section.hasExpanded) {\n\t\t\t\tsection.close()\n\t\t\t}\n\t\t}\n\t}\n\n\tcollapseExpandedSubsections() {\n\t\tconst sections = this.navRef.primary.sections\n\t\tfor (const node in sections) {\n\t\t\tif (sections[node].obj.hasExpanded) {\n\t\t\t\tconst subsections = sections[node].subsections\n\t\t\t\tfor (const subnode in subsections) {\n\t\t\t\t\tconst subsection = subsections[subnode].obj\n\t\t\t\t\tif (subsection.hasExpanded) {\n\t\t\t\t\t\tsubsection.close()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tclearDesktopKeyHandler() {\n\t\tif (typeof this.header.clearKeyHandler === 'function') {\n\t\t\tthis.header.clearKeyHandler()\n\t\t}\n\t}\n\n\topenDesktopMenu(node) {\n\t\tthis.header.classList.add('has-expanded-menu')\n\t\tthis.menuExpanded = true\n\t\t// this.togglePrimaryNavPointer()\n\t\t// window resizing\n\t\tthis.removeDesktopMenuResizeAction = this.ResizeService.addCallback(\n\t\t\t(event) => {\n\t\t\t\tif (event.isWidthChanged) {\n\t\t\t\t\tthis.closeoutNav()\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\t}\n\n\topenDesktopFirstSecondaryMenu(node) {\n\t\tconst trigger = node.parentElement.querySelector(\n\t\t\t'.module-header-nav-secondary__link'\n\t\t)\n\n\t\ttrigger.click()\n\t}\n\n\t// call this function to close down nav from other areas outside of nav\n\tcloseoutNav() {\n\t\tif (this.menuExpanded) {\n\t\t\tthis.closeDesktopMenu()\n\t\t\tthis.collapsePrimary()\n\t\t\tthis.collapseAllSections()\n\t\t}\n\t}\n\n\tcloseDesktopMenu(params) {\n\t\tthis.header.classList.remove('has-expanded-menu')\n\n\t\tif (!params?.ignoreClickListener) {\n\t\t\tthis.mainNav?.clearListener()\n\t\t}\n\n\t\tthis.menuExpanded = false\n\n\t\t// remove keyboard accessibility\n\t\tif (!params?.ignoreKeyboardHandler) {\n\t\t\tthis.clearDesktopKeyHandler()\n\t\t}\n\n\t\t// remove window resizing\n\t\tthis.removeDesktopMenuResizeAction()\n\t}\n\n\tcalculateMenuHeight() {\n\t\tlet totalHeight = 0\n\t\tif (this.alertBanners?.length) {\n\t\t\tthis.alertBanners.forEach((banner) => {\n\t\t\t\ttotalHeight += banner.offsetHeight || 0\n\t\t\t})\n\t\t}\n\n\t\tif (window.matchMedia('(max-width: 995px)').matches) {\n\t\t\tthis.menuContainer.setAttribute(\n\t\t\t\t'style',\n\t\t\t\t`height: calc(100vh - (224px + ${totalHeight}px)); height: calc(100dvh - (224px + ${totalHeight}px))`\n\t\t\t)\n\t\t\tthis.tertiaryNavs.forEach((nav) => {\n\t\t\t\tnav.setAttribute(\n\t\t\t\t\t'style',\n\t\t\t\t\t`height: calc(100vh - (224px + ${totalHeight}px)); height: calc(100dvh - (224px + ${totalHeight}px)); top: calc(224px + ${totalHeight}px)`\n\t\t\t\t)\n\t\t\t})\n\t\t} else {\n\t\t\tthis.menuContainer.removeAttribute('style')\n\t\t\tthis.tertiaryNavs.forEach((nav) => {\n\t\t\t\tnav.removeAttribute('style')\n\t\t\t})\n\t\t}\n\n\t\tthis.setHeaderHeight()\n\t}\n\n\t// initalize the mobile menu\n\tmobileMenuInit() {\n\t\tconst levelArr = ['section', 'subsection']\n\t\tthis.mobileMenu = {\n\t\t\tpanels: {},\n\t\t\tactiveAccordionTriggers: {},\n\t\t\tlevelHeights: {}\n\t\t}\n\t\tfor (const level of levelArr) {\n\t\t\t// create the element to add to mobile panels\n\t\t\tconst backBtn = document.createElement('button')\n\t\t\tbackBtn.innerHTML = 'Back to'\n\t\t\tbackBtn.classList.add('module-header-nav-back')\n\t\t\t// add click listener to back button\n\t\t\tbackBtn.addEventListener('click', () => {\n\t\t\t\tthis.mobileMenuBack(level)\n\t\t\t})\n\n\t\t\t// create title element\n\t\t\tconst title = document.createElement('div')\n\t\t\ttitle.classList.add('panel-title')\n\t\t\tbackBtn.append(title)\n\t\t\t// add to global\n\t\t\tthis.mobileMenu.panels[level] = backBtn\n\t\t}\n\t\t// set the flag\n\t\tthis.mobileMenuInitialized = true\n\t}\n\n\t// open navigation menu on mobile\n\topenMobileMenu() {\n\t\t// check if mobile setup has been initiated\n\t\tif (!this.mobileMenuInitialized) this.mobileMenuInit()\n\t\t// prevent page content from scrolling beneath the nav\n\t\tdocument.body.classList.add('no-scroll')\n\t\tthis.header.classList.add(this.mobileActiveClass)\n\t\tthis.toggle.setAttribute('aria-expanded', true)\n\t\tthis.mainNav.setAttribute('aria-hidden', false)\n\t\tthis.mainNav.dataset.menulevel = 'primary'\n\t\t// set the scroll top\n\t\tthis.mobileScrollEl.scrollTop = 0\n\t\tthis.mobileMenuActive = true\n\t\tthis.calculateMenuHeight()\n\t\t// keyboard accessibility\n\t\tlimitKeyboardAccessibility(this.header, () => {\n\t\t\tthis.closeMobileMenu({\n\t\t\t\tignoreKeyboardHandler: true\n\t\t\t})\n\t\t})\n\t\t// window resizing\n\t\tthis.removeMobileMenuResizeAction = this.ResizeService.addCallback(\n\t\t\t(event) => {\n\t\t\t\tif (event.isWidthChanged) {\n\t\t\t\t\tthis.closeMobileMenu()\n\t\t\t\t\tthis.calculateMenuHeight()\n\t\t\t\t}\n\t\t\t}\n\t\t)\n\t}\n\n\t// close navigation menu on mobile\n\tcloseMobileMenu(params) {\n\t\tdocument.body.classList.remove('no-scroll')\n\t\tenableBodyScroll(this.mobileScrollEl)\n\t\tthis.header.classList.remove(this.mobileActiveClass)\n\t\tthis.collapseAllSections()\n\t\tthis.toggle.setAttribute('aria-expanded', false)\n\t\tthis.mainNav.setAttribute('aria-hidden', true)\n\t\tthis.mobileMenuActive = false\n\t\t// reset height of nav container\n\t\tthis.mainNav.style.height = 'auto'\n\t\t// remove keyboard accessibility\n\t\tif (!params?.ignoreKeyboardHandler) this.header.clearKeyHandler()\n\t\t// remove window resizing\n\t\tthis.removeMobileMenuResizeAction()\n\t\t// Reset form validation\n\t\tif (this.siteSearch) {\n\t\t\tthis.siteSearch.clearErrors()\n\t\t}\n\t\tthis.setHeaderHeight()\n\t}\n\n\t// activate hamburger toggle for mobile\n\ttoggleState = () => {\n\t\tconst isActive = !this.mobileMenuActive\n\t\tif (isActive) this.openMobileMenu()\n\t\telse this.closeMobileMenu()\n\t}\n\n\t// click handler for mobile menu back button\n\tmobileMenuBack(level) {\n\t\tlet group\n\t\tif (level === 'subsection') group = 'section'\n\t\telse group = 'primary'\n\n\t\tthis.animateMobileMenu(group, true)\n\n\t\tconst trigger = this.mobileMenu.activeAccordionTriggers[level]\n\n\t\t// function for resetting menu\n\t\tconst resetMenu = () => {\n\t\t\t// remove this event listener so it only gets triggered once\n\t\t\tthis.mainNav.removeEventListener('transitionend', resetMenu)\n\t\t\t// trigger a click to reset the menu\n\t\t\ttrigger.click()\n\t\t}\n\n\t\t// when the next css transition finishes (which should be the one we just triggered)\n\t\tthis.mainNav.addEventListener('transitionend', resetMenu)\n\t}\n\n\t// logic for expanding and collapsing sections when they are clicked\n\tanimateMobileMenu(group, isBack) {\n\t\t// function for resetting menu\n\t\tconst resetSize = () => {\n\t\t\t// remove this event listener so it only gets triggered once\n\t\t\tthis.mainNav.removeEventListener('transitionend', resetSize)\n\t\t\t// remove \"height\" from the element's inline styles, so it can return to its initial value\n\t\t\tlet height\n\t\t\tif (group === 'primary') return\n\t\t\t// height = 'auto'\n\t\t\telse if (isBack) {\n\t\t\t\theight = this.mobileMenu[group]\n\t\t\t} else {\n\t\t\t\theight = this.mobileMenu.subPages.offsetHeight + 'px'\n\t\t\t\tthis.mobileMenu[group] = height\n\t\t\t}\n\t\t\tthis.mainNav.style.height = height\n\t\t}\n\t\t// when the next css transition finishes (which should be the one we just triggered)\n\t\tthis.mainNav.addEventListener('transitionend', resetSize)\n\t\t// change data attribute to trigger transition\n\t\tthis.mainNav.setAttribute('data-menulevel', group)\n\t}\n\n\t// logic for expanding and collapsing sections when they are clicked\n\tprepMobileMenu(group, node) {\n\t\t// set up panel\n\t\tconst panel = this.mobileMenu.panels[group]\n\t\tconst title = panel.querySelector('.panel-title')\n\t\ttitle.innerHTML = node.innerHTML\n\t\t// isolate nav elements\n\t\tconst parent = node.parentElement\n\t\tconst subPages = parent.querySelector('ul')\n\t\tsubPages.prepend(panel)\n\t\t// add accordion trigger to mobile menu object\n\t\tthis.mobileMenu.activeAccordionTriggers[group] = node\n\t\tthis.mobileMenu.subPages = subPages\n\n\t\tconst tertiaryNav = parent.querySelector('.module-header-nav-tertiary')\n\t\tconst elem = tertiaryNav.querySelector('.module-header-nav-back')\n\t\telem.parentNode.removeChild(elem)\n\n\t\ttertiaryNav.prepend(elem)\n\n\t\t// animate the menu\n\t\tthis.animateMobileMenu(group)\n\t}\n\n\t// behavior for clicking on a nav item\n\taccordionClick(node, group) {\n\t\tnode.addEventListener(\n\t\t\t'click',\n\t\t\t(e) => {\n\t\t\t\te.preventDefault()\n\t\t\t\t// see if this click is expanding element or not\n\t\t\t\tconst thisExpanded = !e.target.classList.contains('is-expanded')\n\t\t\t\t// scenarios for different levels of nav\n\t\t\t\tswitch (group) {\n\t\t\t\t\tcase 'primary':\n\t\t\t\t\tcase 'section':\n\t\t\t\t\t\t// MOBILE\n\t\t\t\t\t\tif (this.mobileMenuActive && thisExpanded) {\n\t\t\t\t\t\t\tthis.prepMobileMenu(group, node)\n\t\t\t\t\t\t\tthis.collapseExpandedSubsections()\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// DESKTOP\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconst _ = this\n\t\t\t\t\t\t\t// collapse subsections\n\t\t\t\t\t\t\tthis.collapseExpandedSubsections()\n\t\t\t\t\t\t\t// SECTION HAS BEEN CLICKED ACTIVE, THE DESKTOP NAV MENU MAY OR MAY NOT ALREADY BE OPEN\n\t\t\t\t\t\t\tif (thisExpanded) {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tnode.classList.contains(\n\t\t\t\t\t\t\t\t\t\t'module-header-nav-primary__link'\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tthis.openDesktopFirstSecondaryMenu(node)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst secondaryActiveEl = e.target.classList.contains(\n\t\t\t\t\t\t\t\t\t'module-header-nav-secondary__link',\n\t\t\t\t\t\t\t\t\t'is-expanded'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tconst variant =\n\t\t\t\t\t\t\t\t\te.target.parentElement.classList.contains(\n\t\t\t\t\t\t\t\t\t\t'module-header-nav-primary__item--variant'\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\tif (secondaryActiveEl) {\n\t\t\t\t\t\t\t\t\tconst tertiaryNav =\n\t\t\t\t\t\t\t\t\t\te.target.parentElement.querySelector(\n\t\t\t\t\t\t\t\t\t\t\t'.module-header-nav-tertiary'\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tconst panel = e.target.closest(\n\t\t\t\t\t\t\t\t\t\t'.module-header-nav__panel'\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t_.config.myObserver = new ResizeObserver(\n\t\t\t\t\t\t\t\t\t\t(entries) => {\n\t\t\t\t\t\t\t\t\t\t\tif (_.config.match === true) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor (const entry of entries) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst tertiaryHeight =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tentry.contentRect.height\n\t\t\t\t\t\t\t\t\t\t\t\t\tpanel.style.height =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttertiaryHeight + 'px'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t_.config.myObserver.observe(tertiaryNav)\n\t\t\t\t\t\t\t\t} else if (variant) {\n\t\t\t\t\t\t\t\t\t// variant\n\t\t\t\t\t\t\t\t\tconst tertiaryNav =\n\t\t\t\t\t\t\t\t\t\te.target.parentElement.querySelector(\n\t\t\t\t\t\t\t\t\t\t\t'.module-header-nav-secondary--large .module-header-nav-tertiary'\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tconst panel = e.target.parentElement.querySelector(\n\t\t\t\t\t\t\t\t\t\t'.module-header-nav__panel'\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t_.config.myObserver = new ResizeObserver(\n\t\t\t\t\t\t\t\t\t\t(entries) => {\n\t\t\t\t\t\t\t\t\t\t\tif (_.config.match === true) {\n\t\t\t\t\t\t\t\t\t\t\t\tfor (const entry of entries) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tconst tertiaryHeight =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tentry.contentRect.height\n\t\t\t\t\t\t\t\t\t\t\t\t\tpanel.style.height =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttertiaryHeight + 'px'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t\t\t_.config.myObserver.observe(tertiaryNav)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// OPEN THE DESKTOP NAV MENU FROM CLOSED STATE\n\t\t\t\t\t\t\tif (thisExpanded && !this.menuExpanded) {\n\t\t\t\t\t\t\t\tthis.openDesktopMenu(node)\n\t\t\t\t\t\t\t\tthis.openDesktopFirstSecondaryMenu(node)\n\t\t\t\t\t\t\t\t// detect outside pointer events\n\t\t\t\t\t\t\t\tactionOnClickOutside(this.mainNav, () => {\n\t\t\t\t\t\t\t\t\tthis.closeDesktopMenu({\n\t\t\t\t\t\t\t\t\t\tignoreClickListener: true\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\tthis.collapsePrimary(true)\n\t\t\t\t\t\t\t\t\tthis.collapseAllSections()\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// CLOSE THE DESKTOP NAV MENU\n\t\t\t\t\t\t\telse if (!thisExpanded && this.menuExpanded) {\n\t\t\t\t\t\t\t\tthis.closeDesktopMenu()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// restrict keyboard (has to be done on animation end)\n\t\t\t\t\t\t\t// and add special classes for animation\n\t\t\t\t\t\t\tthis.clearDesktopKeyHandler()\n\t\t\t\t\t\t\tconst desktopEl =\n\t\t\t\t\t\t\t\tthis.header.querySelector('.module-header-nav')\n\n\t\t\t\t\t\t\tdesktopEl.classList.add('animating-menu')\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\n\t\t\t\t\tcase 'subsection':\n\t\t\t\t\t\tif (this.mobileMenuActive && thisExpanded) {\n\t\t\t\t\t\t\tthis.prepMobileMenu(group, node)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t},\n\t\t\tfalse\n\t\t)\n\t}\n\n\tbuildAccordion(panels, triggers, wrapper, type, id, selectedIndex = false) {\n\t\tlet node\n\t\tid = '-' + id\n\t\tfor (node of panels) {\n\t\t\tnode.classList.add('js-accordion-panel' + id)\n\t\t}\n\t\tfor (node of triggers) {\n\t\t\tnode.classList.add('js-accordion-trigger' + id)\n\t\t\tthis.accordionClick(node, type)\n\t\t\t// set up for analytics\n\t\t\tlet value = node.innerText || node.textContent\n\t\t\tvalue = value.replace(/\\s+/g, ' ').trim()\n\t\t\tnode.analyticsValue = value\n\t\t}\n\t\twrapper.classList.add('js-accordion-interface' + id)\n\n\t\treturn new AccordionWidget(wrapper, {\n\t\t\tid,\n\t\t\tselectedIndex\n\t\t})\n\t}\n\n\t// build out accordion functionality on primary, sections and subsections\n\taddSubNavFunctionality() {\n\t\t// create holder object for accordions\n\t\tthis.navRef = {}\n\t\tconst nav = this.header.querySelector('nav')\n\t\tlet i, id, type, node, panels, triggers, wrappers, wrapper, selectedIndex\n\n\t\t// add accordion to first level\n\t\twrapper = nav.querySelector('.module-header-nav-primary')\n\t\ttriggers = nav.querySelectorAll(\n\t\t\t'.module-header-nav-primary > li > button'\n\t\t)\n\t\tpanels = nav.querySelectorAll('.module-header-nav__panel')\n\n\t\t// add to master array\n\t\ttype = id = 'primary'\n\n\t\tthis.navRef.primary = {}\n\n\t\tif (this.config.match) {\n\t\t\tthis.navRef.primary = {\n\t\t\t\tobj: this.buildAccordion(\n\t\t\t\t\tpanels,\n\t\t\t\t\ttriggers,\n\t\t\t\t\twrapper,\n\t\t\t\t\ttype,\n\t\t\t\t\tid,\n\t\t\t\t\tselectedIndex\n\t\t\t\t)\n\t\t\t}\n\t\t} else if (\n\t\t\t!this.config.match &&\n\t\t\tdocument\n\t\t\t\t.querySelector('.module-header-nav-primary')\n\t\t\t\t.classList.contains('is-accordion')\n\t\t) {\n\t\t\tid = '-primary'\n\n\t\t\treturn new AccordionWidget(wrapper, {\n\t\t\t\tid,\n\t\t\t\tselectedIndex\n\t\t\t}).destroy()\n\t\t}\n\n\t\tif (\n\t\t\t!document\n\t\t\t\t.querySelector('.module-header-nav-secondary')\n\t\t\t\t.classList.contains('is-accordion')\n\t\t) {\n\t\t\t// add accordions to second level\n\t\t\tconst sectionObj = {}\n\t\t\twrappers = nav.querySelectorAll(\n\t\t\t\t'.module-header-nav-primary > .module-header-nav-primary__item'\n\t\t\t)\n\n\t\t\ti = 0\n\t\t\tfor (node of wrappers) {\n\t\t\t\twrapper = node.querySelector('.module-header-nav-secondary')\n\t\t\t\ttriggers = node.querySelectorAll(\n\t\t\t\t\t'.module-header-nav-secondary > li:not([class*=\"external-link\"]) > a'\n\t\t\t\t)\n\t\t\t\tpanels = node.querySelectorAll('.module-header-nav-tertiary')\n\t\t\t\ttype = 'section'\n\t\t\t\tid = type + i\n\t\t\t\tconst section = this.buildAccordion(\n\t\t\t\t\tpanels,\n\t\t\t\t\ttriggers,\n\t\t\t\t\twrapper,\n\t\t\t\t\ttype,\n\t\t\t\t\tid\n\t\t\t\t)\n\n\t\t\t\t// now add to master section object\n\t\t\t\tsectionObj[id] = {\n\t\t\t\t\tobj: section\n\t\t\t\t}\n\t\t\t\ti++\n\t\t\t}\n\t\t\tthis.navRef.primary.sections = sectionObj\n\t\t}\n\t}\n\n\t// used to add overview links to top level sections\n\tbuildSectionElements() {\n\t\t// isolate anchor elements followed by a subnav\n\t\tconst topAnchors = this.mainNav.querySelectorAll('a + ul, a + div > ul') // a + .module-header-nav-tertiary\n\t\t// iterate through all top level anchors\n\t\tfor (const node of topAnchors) {\n\t\t\tlet parent = node.parentElement\n\t\t\tif (parent.nodeName === 'DIV') parent = parent.parentElement\n\t\t\tconst isActive = parent.classList.contains('active')\n\t\t\t// get attributes of the Primary landing page\n\t\t\tconst landing = parent.querySelector('a')\n\t\t\tconst landingHtml = landing.innerHTML\n\t\t\tconst landingHref = landing.href\n\t\t\t// get the list of sub-pages\n\t\t\tconst subPages = parent.querySelector('ul')\n\n\t\t\t// inject link to top of list\n\t\t\tconst landingOverview = document.createElement('a')\n\t\t\tlandingOverview.innerHTML =\n\t\t\t\tlandingHtml + this.config.landingPageLinkAddText\n\t\t\tlandingOverview.href = landingHref\n\t\t\tconst landingOverviewListItem = document.createElement('li')\n\t\t\tlandingOverviewListItem.classList.add('overview')\n\t\t\tif (isActive) landingOverviewListItem.classList.add('active')\n\t\t\tlandingOverviewListItem.append(landingOverview)\n\t\t\tsubPages.prepend(landingOverviewListItem)\n\n\t\t\t// now see if this an element that contains an active element\n\t\t\tif (subPages.querySelector('.active')) {\n\t\t\t\tparent.classList.add('contains-active-page')\n\t\t\t}\n\t\t}\n\t}\n\n\tstickyScroll(header, mobileSticky, desktopSticky) {\n\t\tif (window.scrollY > desktopSticky) header.classList.add('large-sticky')\n\t\telse header.classList.remove('large-sticky')\n\t\tif (window.scrollY > mobileSticky) header.classList.add('mobile-sticky')\n\t\telse header.classList.remove('mobile-sticky')\n\t}\n\n\t// sets up sticky behavior on scrolling\n\tsetStickyScrolling() {\n\t\t// first let's remove the current scroll behavior if there is one\n\t\tif (this.activeScrollRemove) this.activeScrollRemove()\n\t\t// get the header and set minimum height\n\t\tconst header = this.header\n\t\t// Mobile: get the offset position of the primary\n\t\tconst mobileSticky =\n\t\t\tthis.header.getBoundingClientRect().top + window.scrollY\n\t\t// Desktop: get the offset position of the primary\n\t\tconst desktopEl = header.querySelector('.module-header-nav')\n\t\tconst desktopSticky = desktopEl.getBoundingClientRect().top + 86\n\t\t// Add to ScrollSerive callbacks\n\t\tthis.activeScrollRemove = this.ScrollService.addCallback(() =>\n\t\t\tthis.stickyScroll(header, mobileSticky, desktopSticky)\n\t\t)\n\t}\n\n\t// adds a set height to header, needed for sticky (position: fixed)\n\tsetHeaderHeight() {\n\t\tthis.header.style.setProperty(\n\t\t\t'--height',\n\t\t\t`${this.stickyWrapper.getBoundingClientRect().height}px`\n\t\t)\n\t}\n\n\t// make header sticky\n\tmakeSticky() {\n\t\t// get the header and set minimum height\n\t\tthis.setHeaderHeight()\n\t\t// set up listener for header height\n\t\tthis.ResizeService.addCallback(this.calculateMenuHeight.bind(this))\n\t\t// set up scrolling\n\t\tthis.setStickyScrolling()\n\t}\n}\n\nexport default Header\n","import Services from 'services'\n\n/* ACCESSIBLE ACCORDION COMPONENT\n Code modified taken from here: https://codepen.io/stowball/pen/eZKwRv\n Options (add to parent element that has class \"accordion-interface\"):\n Multiselect: aria-multiselectable=\"true\"\n Always expand first item: data-firstexpanded=\"true\"\n To have selected panel(s) expanded at start use data-open-panels attribute with panel numbers separated by commas.\n Example: data-open-panels=\"1,2\"\n To keep panels always open at tablet breakpoints and above add to class list: accordion-interface__open-panels__md\n and for desktop only: accordion-interface__open-panels__lg\n*/\n\nfunction AccordionWidget(el, props = {}) {\n\tif (!el) return\n\tthis.el = el\n\tthis.services = Services.getInstance()\n\tthis.EventEmitterService = this.services.EventEmitterService\n\n\tlet triggerClass = 'js-accordion-trigger'\n\tlet panelClass = 'js-accordion-panel'\n\tif (props.id) {\n\t\ttriggerClass += props.id\n\t\tpanelClass += props.id\n\t}\n\tconst expandFirst = el.dataset.firstexpanded === 'true'\n\tthis.multiSelectable = this.el.hasAttribute('aria-multiselectable')\n\n\tlet selectedIndex\n\tif (Number.isInteger(props.selectedIndex))\n\t\tselectedIndex = props.selectedIndex\n\telse if (expandFirst) selectedIndex = 0\n\n\tthis.accordionTriggers = this.el.getElementsByClassName(triggerClass)\n\tthis.accordionPanels = this.el.getElementsByClassName(panelClass)\n\n\tthis.observer = new ResizeObserver((entries) => {\n\t\tentries.forEach((entry) => {\n\t\t\tif (!entry.borderBoxSize) return\n\t\t\tconst { blockSize: height } = entry.borderBoxSize[0]\n\t\t\tentry.target\n\t\t\t\t.closest('.js-accordion-panel')\n\t\t\t\t.style.setProperty('--height', `${height}px`)\n\t\t})\n\t})\n\n\tif (\n\t\tthis.accordionTriggers.length === 0 ||\n\t\tthis.accordionTriggers.length !== this.accordionPanels.length\n\t) {\n\t\treturn\n\t}\n\n\t// if we do not already have a selected index see if we have the open panels attribute\n\tif (selectedIndex === undefined && el.dataset.openPanels) {\n\t\tlet openPanels = el.dataset.openPanels\n\t\topenPanels = openPanels.split(',')\n\t\tconst panelArr = []\n\t\tfor (const panel of openPanels) {\n\t\t\tconst n = parseInt(panel)\n\t\t\t// quick test to make sure we have a positive value\n\t\t\tif ((n | 0) > 0 && n % 1 === 0 && n <= this.accordionTriggers.length) {\n\t\t\t\tpanelArr.push(n - 1)\n\t\t\t\t// if this is not multiselectable then stop after first validated value\n\t\t\t\tif (!this.multiSelectable) break\n\t\t\t}\n\t\t}\n\t\tif (panelArr.length) selectedIndex = panelArr\n\t}\n\n\tthis._init(selectedIndex)\n}\n\nAccordionWidget.prototype._init = function (selectedIndex) {\n\tthis.accordionTriggersLength = this.accordionTriggers.length\n\tthis.expandedAccordions = new Array(this.accordionTriggersLength)\n\tthis.clickListener = this._clickEvent.bind(this)\n\tthis.keydownListener = this._keydownEvent.bind(this)\n\tthis.focusListener = this._focusEvent.bind(this)\n\tthis.keys = {\n\t\tprev: 38,\n\t\tnext: 40,\n\t\tspace: 32\n\t}\n\n\tlet initialSelectedIndex\n\n\tfor (let i = 0; i < this.accordionTriggersLength; i++) {\n\t\tthis.accordionTriggers[i].index = i\n\t\tthis.accordionTriggers[i].addEventListener(\n\t\t\t'click',\n\t\t\tthis.clickListener,\n\t\t\tfalse\n\t\t)\n\t\tthis.accordionTriggers[i].addEventListener(\n\t\t\t'keydown',\n\t\t\tthis.keydownListener,\n\t\t\tfalse\n\t\t)\n\t\tthis.accordionTriggers[i].addEventListener(\n\t\t\t'focus',\n\t\t\tthis.focusListener,\n\t\t\tfalse\n\t\t)\n\t\tthis.accordionTriggers[i].classList.add('is-accordion-trigger')\n\n\t\tif (this.accordionTriggers[i].classList.contains('is-selected')) {\n\t\t\tthis.expandedAccordions[i] = true\n\t\t}\n\t}\n\n\tfor (let i = 0; i < this.accordionPanels.length; i++) {\n\t\tthis.accordionPanels[i].classList.add('is-accordion-panel')\n\n\t\tif (\n\t\t\tthis.accordionPanels[i].querySelector('.accordion-panel__inner') !==\n\t\t\tnull\n\t\t) {\n\t\t\tconst el = this.accordionPanels[i].querySelector(\n\t\t\t\t'.accordion-panel__inner'\n\t\t\t)\n\t\t\tthis.observer.observe(el)\n\t\t}\n\t}\n\n\t// determine which panels need to be open\n\tif (!isNaN(selectedIndex)) {\n\t\tinitialSelectedIndex = selectedIndex\n\t\tthis.expandedAccordions = new Array(this.accordionTriggersLength)\n\t\tthis.expandedAccordions[initialSelectedIndex] = true\n\t} else if (Array.isArray(selectedIndex)) {\n\t\tinitialSelectedIndex = selectedIndex\n\t\tthis.expandedAccordions = new Array(this.accordionTriggersLength)\n\t\tfor (let i = 0; i < this.accordionTriggersLength; i++) {\n\t\t\tif (selectedIndex.includes(i)) this.expandedAccordions[i] = true\n\t\t}\n\t} else {\n\t\tinitialSelectedIndex = this.expandedAccordions.lastIndexOf(true)\n\n\t\tif (!this.multiSelectable) {\n\t\t\tthis.expandedAccordions = new Array(this.accordionTriggersLength)\n\t\t\tthis.expandedAccordions[initialSelectedIndex] = true\n\t\t}\n\t}\n\n\tthis.initialSetIndex = selectedIndex\n\tthis.setSelected(initialSelectedIndex)\n\tthis.setExpanded()\n\tthis.setAPI()\n\tthis.el.classList.add('is-accordion')\n\tthis.el.classList.add('is-initialized')\n}\n\nAccordionWidget.prototype._clickEvent = function (e) {\n\te.preventDefault()\n\tthis.setSelected(e.target.index, true)\n\tthis.setExpanded(e.target.index, true)\n}\n\nAccordionWidget.prototype._keydownEvent = function (e) {\n\tlet targetIndex\n\n\tswitch (e.keyCode) {\n\t\tcase this.keys.space:\n\t\tcase this.keys.prev:\n\t\tcase this.keys.next:\n\t\t\te.preventDefault()\n\t\t\tbreak\n\t\tdefault:\n\t\t\treturn\n\t}\n\n\tif (e.keyCode === this.keys.space) {\n\t\t// this.setExpanded(e.target.index, true);\n\t\te.target.click()\n\n\t\treturn\n\t} else if (e.keyCode === this.keys.prev && e.target.index > 0) {\n\t\ttargetIndex = e.target.index - 1\n\t} else if (\n\t\te.keyCode === this.keys.next &&\n\t\te.target.index < this.accordionTriggersLength - 1\n\t) {\n\t\ttargetIndex = e.target.index + 1\n\t} else {\n\t\treturn\n\t}\n\n\tthis.setSelected(targetIndex, true)\n}\n\nAccordionWidget.prototype._focusEvent = function () {\n\tif (this.accordionTriggersLength === 1) {\n\t\tthis.setSelected(0)\n\t}\n}\n\nAccordionWidget.prototype.setSelected = function (index, userInvoked) {\n\tif (index === -1) {\n\t\tthis.accordionTriggers[0].setAttribute('tabindex', 0)\n\n\t\treturn\n\t}\n\n\tif (Array.isArray(index)) index = index[0]\n\tfor (let i = 0; i < this.accordionTriggersLength; i++) {\n\t\tif (i === index) {\n\t\t\tthis.accordionTriggers[i].classList.add('is-selected')\n\t\t\tthis.accordionTriggers[i].setAttribute('aria-selected', true)\n\t\t\t// this.accordionTriggers[i].setAttribute('tabindex', 0);\n\n\t\t\tif (userInvoked) {\n\t\t\t\tthis.accordionTriggers[i].focus()\n\t\t\t}\n\t\t} else {\n\t\t\tthis.accordionTriggers[i].classList.remove('is-selected')\n\t\t\tthis.accordionTriggers[i].setAttribute('aria-selected', false)\n\n\t\t\t// this.accordionTriggers[i].setAttribute('tabindex', -1);\n\t\t}\n\t}\n}\n\nAccordionWidget.prototype.setExpanded = function (index, userInvoked) {\n\tlet i\n\n\t// special case to close all\n\tif (index === -1) this.expandedAccordions = []\n\n\tif (userInvoked) {\n\t\tif (this.multiSelectable) {\n\t\t\tthis.expandedAccordions[index] = !this.expandedAccordions[index]\n\t\t} else {\n\t\t\tfor (i = 0; i < this.accordionTriggersLength; i++) {\n\t\t\t\tif (i === index) {\n\t\t\t\t\tthis.expandedAccordions[i] = !this.expandedAccordions[i]\n\t\t\t\t} else {\n\t\t\t\t\tthis.expandedAccordions[i] = false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Emit event for the clicked accordion panel\n\t\tconst accordionTitle = this.accordionTriggers[index]?.innerText\n\t\tconst status = this.expandedAccordions[index] ? 'open' : 'close'\n\n\t\tthis.EventEmitterService.emit('accordion', {\n\t\t\taccordionElement: this.el,\n\t\t\taccordionTitle,\n\t\t\tstatus\n\t\t})\n\t}\n\n\tlet hasExpanded = false\n\tfor (i = 0; i < this.accordionTriggersLength; i++) {\n\t\tif (this.expandedAccordions[i]) {\n\t\t\tthis.accordionTriggers[i].setAttribute('aria-expanded', true)\n\t\t\tthis.accordionTriggers[i].classList.add('is-expanded')\n\n\t\t\tthis.accordionPanels[i].setAttribute('aria-hidden', false)\n\t\t\tthis.accordionPanels[i].classList.add('is-open')\n\n\t\t\tthis.accordionTriggers[i].parentElement.classList.add('is-active')\n\t\t\t// this.accordionPanels[i].setAttribute('tabindex', 0);\n\n\t\t\thasExpanded = true\n\t\t} else {\n\t\t\tthis.accordionTriggers[i].setAttribute('aria-expanded', false)\n\t\t\tthis.accordionTriggers[i].classList.remove('is-expanded')\n\n\t\t\tthis.accordionPanels[i].setAttribute('aria-hidden', true)\n\t\t\tthis.accordionPanels[i].classList.remove('is-open')\n\n\t\t\tthis.accordionTriggers[i].parentElement.classList.remove('is-active')\n\t\t\t// this.accordionPanels[i].setAttribute('tabindex', -1);\n\t\t}\n\t}\n\n\t// add close to parent to indicate there is an open element\n\tif (hasExpanded) this.el.classList.add('has-expanded-el')\n\telse this.el.classList.remove('has-expanded-el')\n\tthis.hasExpanded = hasExpanded\n}\n\nAccordionWidget.prototype.setAPI = function () {\n\t// add API functionality here\n\tthis.close = function () {\n\t\tthis.setSelected(-1)\n\t\tthis.setExpanded(-1)\n\t}\n\t// open initial index\n\tthis.openInit = function () {\n\t\tconst index = this.initialSetIndex\n\t\tif (Number.isInteger(index)) {\n\t\t\tthis.setSelected(index, true)\n\t\t\tthis.setExpanded(index, true)\n\t\t}\n\t}\n}\n\nAccordionWidget.prototype.destroy = function () {\n\tthis.el.classList.remove('is-initialized')\n\n\tfor (let i = 0; i < this.accordionTriggersLength; i++) {\n\t\tthis.accordionTriggers[i].removeAttribute('aria-expanded')\n\t\tthis.accordionTriggers[i].removeAttribute('aria-selected')\n\t\tthis.accordionTriggers[i].classList.remove('is-expanded')\n\n\t\tthis.accordionPanels[i].removeAttribute('aria-hidden')\n\t\tthis.accordionPanels[i].classList.remove('is-open')\n\t\tthis.accordionPanels[i].removeAttribute('tabindex')\n\n\t\tthis.accordionTriggers[i].removeEventListener(\n\t\t\t'click',\n\t\t\tthis.clickListener,\n\t\t\tfalse\n\t\t)\n\t\tthis.accordionTriggers[i].removeEventListener(\n\t\t\t'keydown',\n\t\t\tthis.keydownListener,\n\t\t\tfalse\n\t\t)\n\t\tthis.accordionTriggers[i].removeEventListener(\n\t\t\t'focus',\n\t\t\tthis.focusListener,\n\t\t\tfalse\n\t\t)\n\n\t\tif (\n\t\t\tthis.accordionPanels[i].querySelector('.accordion-panel__inner') !==\n\t\t\tnull\n\t\t) {\n\t\t\tconst el = this.accordionPanels[i].querySelector(\n\t\t\t\t'.accordion-panel__inner'\n\t\t\t)\n\t\t\tthis.observer.unobserve(el)\n\t\t}\n\n\t\tdelete this.accordionTriggers[i].index\n\t}\n}\n\nexport { AccordionWidget }\n","/**\n * @method stringReplace\n * @memberof replace\n * @description Replace string with replacements using regex to match. String.prototype.replace\n * accepts a recursive function as second parameter. In this case, the replacer function performs\n * an Array.prototype.shift on the replacements that are passed in.\n * @param {String} str - Input string to perform replace operation on\n * @param {RegExp} regex - Regex to use for search\n * @param {Array} replacements - Array of values that will be used to replace, for each instance\n * of regex match found\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter\n * @return {string} A string with replaced values\n * @example stringReplace('Directions to {0}, {1}, {2}', /\\{\\d\\}/ig, ['123 Main St', 'New York, NY', '10001'])\n */\nexport function stringReplace(str, regex, replacements) {\n\tif (typeof str !== 'string') {\n\t\tthrow TypeError('Input is not of type string')\n\t}\n\tif (str.match(regex) && replacements.length !== str.match(regex).length) {\n\t\tthrow Error('Not enough replacement values')\n\t}\n\n\tconst replacerFn = () => replacements.shift()\n\treturn str.replace(regex, replacerFn)\n}\n\n/**\n * Replace tokens in a string with the given replacements.\n * Tokens are in the format of {0}, {1}, etc.\n * - If replacements is an array, the tokens will be replaced in order\n * - If replacements is an object, the tokens will be replaced by key\n * - If replacements is not an array or object, the string will be returned as is\n * @param {String} str The string to replace tokens in\n * @param {Object|Array} replacements The replacements to use\n * @returns\n */\nexport function tokenReplace(str, replacements) {\n\tif (Array.isArray(replacements)) {\n\t\treturn replacements.reduce(\n\t\t\t(prev, replacement, index) =>\n\t\t\t\tstringReplace(prev, new RegExp(`\\\\{${index}\\\\}`, 'g'), [\n\t\t\t\t\treplacement\n\t\t\t\t]),\n\t\t\tstr\n\t\t)\n\t} else if (typeof replacements === 'object') {\n\t\treturn Object.keys(replacements).reduce(\n\t\t\t(prev, replacementKey) =>\n\t\t\t\tstringReplace(prev, new RegExp(`\\\\{${replacementKey}\\\\}`, 'g'), [\n\t\t\t\t\treplacements[replacementKey]\n\t\t\t\t]),\n\t\t\tstr\n\t\t)\n\t}\n\n\treturn str\n}\n"],"names":["SiteSearch","static","FORM_DESKTOP","INPUT_DESKTOP","FORM_MOBILE_CONTAINER","FORM_MOBILE","INPUT_MOBILE","MOBILE_FORM_ERROR","FORM_ERROR","INPUT_ERROR","INPUT_CONTAINER_DESKTOP","INPUT_CONTAINER_MOBILE","DESKTOP_SEARCH","MOBILE_SEARCH","constructor","element","_ref","headerElement","onOpenSearch","this","analyticsService","Analytics","getInstance","header","init","cacheDom","attachEvents","setupSearch","desktopForm","querySelector","SELECTORS","inputDesktop","mobileFormContainer","mobileForm","inputMobile","clearButton","CLEAR_BUTTON","addEventListener","addValidation","addMobileError","clearMobileError","detachEvents","removeEventListener","destroy","pristine","openSearch","search","triggerEnv","document","body","classList","add","actionOnClickOutside","obj","closeSearch","ignoreClickListener","setAttribute","trigger","limitKeyboardAccessibility","ignoreKeyboardHandler","disableKeyHandler","active","input","focus","params","top","style","minHeight","remove","clearListener","value","blur","clearKeyHandler","clearErrors","form","submit","suggestionsTitle","e","stopPropagation","event","preventDefault","target","targetForm","dataset","breakpoint","config","live","classTo","CLASSES","errorTextParent","errorClass","errorTextClass","errorTextTag","Pristine","validate","trackInteraction","reset","searchTerm","search_term","Header","COMPONENT","STICKY_WRAPPER","SITE_SEARCH","FAVORITES","FAVORITES_LABEL","FAVORITES_ICON","HIDDEN","ACTIVE","SAVE_FAVORITE","REMOVE_FAVORITE","setupAlertBannerObservation","services","Services","match","myObserver","ScrollService","ResizeService","EventEmitterService","mqContext","createSiteSearch","updateFavorites","makeSticky","toggle","mainNav","alertBanners","querySelectorAll","menuContainer","tertiaryNavs","stickyWrapper","mobileActiveClass","mobileScrollEl","siteSearchEl","favoritesCountEl","favoritesCountLabel","favoritesIcon","observer","MutationObserver","mutationsList","mutation","type","attributeName","contains","calculateMenuHeight","setTimeout","observe","attributes","childList","subtree","toggleState","on","EVENTS","window","closeoutNav","removeEvents","off","disconnect","_","mediaQuery","matchMedia","mediaQueryChange","matches","addSubNavFunctionality","forEach","panel","height","siteSearch","collapsePrimary","bind","innerText","label","favorites","localStorage","getItem","JSON","parse","length","textContent","tokenReplace","favoritesCount","src","openInit","navRef","primary","close","collapseAllSections","collapseExpandedSubsections","collapseExpandedSections","sections","node","section","hasExpanded","subsections","subnode","subsection","clearDesktopKeyHandler","openDesktopMenu","menuExpanded","removeDesktopMenuResizeAction","addCallback","isWidthChanged","openDesktopFirstSecondaryMenu","parentElement","click","closeDesktopMenu","totalHeight","banner","offsetHeight","nav","removeAttribute","setHeaderHeight","mobileMenuInit","levelArr","mobileMenu","panels","activeAccordionTriggers","levelHeights","level","backBtn","createElement","innerHTML","mobileMenuBack","title","append","mobileMenuInitialized","openMobileMenu","menulevel","scrollTop","mobileMenuActive","closeMobileMenu","removeMobileMenuResizeAction","enableBodyScroll","group","animateMobileMenu","resetMenu","isBack","resetSize","subPages","prepMobileMenu","parent","prepend","tertiaryNav","elem","parentNode","removeChild","accordionClick","thisExpanded","secondaryActiveEl","variant","closest","ResizeObserver","entries","entry","tertiaryHeight","contentRect","buildAccordion","triggers","wrapper","id","selectedIndex","arguments","undefined","replace","trim","analyticsValue","AccordionWidget","i","wrappers","sectionObj","buildSectionElements","topAnchors","nodeName","isActive","landing","landingHtml","landingHref","href","landingOverview","landingPageLinkAddText","landingOverviewListItem","stickyScroll","mobileSticky","desktopSticky","scrollY","setStickyScrolling","activeScrollRemove","getBoundingClientRect","setProperty","el","props","triggerClass","panelClass","expandFirst","firstexpanded","multiSelectable","hasAttribute","Number","isInteger","accordionTriggers","getElementsByClassName","accordionPanels","borderBoxSize","blockSize","openPanels","split","panelArr","n","parseInt","push","_init","prototype","initialSelectedIndex","accordionTriggersLength","expandedAccordions","Array","clickListener","_clickEvent","keydownListener","_keydownEvent","focusListener","_focusEvent","keys","prev","next","space","index","isNaN","isArray","includes","lastIndexOf","initialSetIndex","setSelected","setExpanded","setAPI","targetIndex","keyCode","userInvoked","accordionTitle","status","emit","accordionElement","unobserve","stringReplace","str","regex","replacements","TypeError","Error","replacerFn","shift","reduce","replacement","RegExp","Object","replacementKey"],"sourceRoot":""}