{"version":3,"file":"358.min.js?t=1743173738202","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 actionOnClickOutside,\n limitKeyboardAccessibility\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 static SELECTORS = {\n FORM_DESKTOP: '[data-cmp-hook=\"header-search-form\"]',\n INPUT_DESKTOP: '[data-cmp-hook=\"header-search\"]',\n FORM_MOBILE_CONTAINER: '[data-cmp-hook=\"header-form-mobile-container\"]',\n FORM_MOBILE: '[data-cmp-hook=\"header-nav-search-form\"]',\n INPUT_MOBILE: '[data-cmp-hook=\"header-nav-search\"]'\n }\n\n static CLASSES = {\n MOBILE_FORM_ERROR: 'module-header-nav-search__form--error',\n FORM_ERROR: 'fdn-input__error',\n INPUT_ERROR: 'fdn-input__error-container',\n FORM_DESKTOP: 'module-header-search__form',\n INPUT_CONTAINER_DESKTOP: 'module-header-search__input',\n FORM_MOBILE: 'module-header-nav-search__form',\n INPUT_CONTAINER_MOBILE: 'module-header-nav-search__form-group'\n }\n\n static NAMES = {\n DESKTOP_SEARCH: 'searchinput',\n MOBILE_SEARCH: 'search'\n }\n\n /**\n * @param {*} element - the element to attach the component to\n * @param {Object} config - configuration object\n * @param {HTMLElement} config.headerElement - the header element\n * @param {Function} config.onOpenSearch - callback function to run when search is opened\n */\n constructor(element, { headerElement, onOpenSearch }) {\n this.element = element\n this.analyticsService = Analytics.getInstance()\n this.header = headerElement\n this.onOpenSearch = onOpenSearch\n\n this.init()\n }\n\n init() {\n this.cacheDom()\n this.attachEvents()\n this.setupSearch()\n }\n\n /**\n * Cache the dom refs needed for the component\n */\n cacheDom() {\n this.desktopForm = this.header.querySelector(\n SiteSearch.SELECTORS.FORM_DESKTOP\n )\n this.inputDesktop = this.header.querySelector(\n SiteSearch.SELECTORS.INPUT_DESKTOP\n )\n this.mobileFormContainer = this.header.querySelector(\n SiteSearch.SELECTORS.FORM_MOBILE_CONTAINER\n )\n this.mobileForm = this.header.querySelector(\n SiteSearch.SELECTORS.FORM_MOBILE\n )\n this.inputMobile = this.header.querySelector(\n SiteSearch.SELECTORS.INPUT_MOBILE\n )\n this.clearButton = this.header.querySelector(\n SiteSearch.SELECTORS.CLEAR_BUTTON\n )\n }\n\n /**\n * Attach event listeners for the component\n */\n attachEvents() {\n if (this.desktopForm) {\n this.desktopForm.addEventListener('submit', this.addValidation)\n }\n if (this.mobileForm) {\n this.mobileForm.addEventListener('submit', this.addValidation)\n this.mobileForm.addEventListener('search', this.addMobileError)\n this.inputMobile.addEventListener('input', this.clearMobileError)\n }\n }\n\n /**\n * Detach event listeners for the component\n */\n detachEvents() {\n if (this.desktopForm) {\n this.desktopForm.removeEventListener('submit', this.addValidation)\n }\n if (this.mobileForm) {\n this.mobileForm.removeEventListener('submit', this.addValidation)\n this.mobileForm.removeEventListener('search', this.addMobileError)\n this.inputMobile.removeEventListener('input', this.clearMobileError)\n }\n }\n\n /**\n * Destroy the component\n */\n destroy() {\n this.detachEvents()\n this.pristine.destroy()\n }\n\n // open search\n openSearch() {\n // special actions for desktop\n if (this.search.triggerEnv === 'desktop') {\n // because we are not passing on mouse click we need to manually make sure any open nav menu is closed\n if (typeof this.onOpenSearch === 'function') {\n this.onOpenSearch()\n }\n // no body scrolling\n document.body.classList.add('no-scroll')\n // handle outside clicks\n actionOnClickOutside(this.search.obj, () => {\n this.closeSearch({\n ignoreClickListener: true\n })\n })\n }\n // common actions\n this.search.obj.classList.add('active')\n this.search.obj.setAttribute('aria-hidden', false)\n this.search.trigger.setAttribute('aria-expanded', true)\n // keyboard accessibility\n limitKeyboardAccessibility(this.search.obj, () => {\n this.closeSearch({\n ignoreKeyboardHandler: true\n })\n })\n // disable keyhandling on open header in mobile\n if (this.search.triggerEnv === 'mobile')\n this.header.disableKeyHandler = true\n // add class to header\n this.header.classList.add('search-active')\n // make active\n this.search.active = true\n // add focus to input on desktop\n if (this.search.triggerEnv === 'desktop') this.search.input.focus()\n }\n\n // close search\n closeSearch(params) {\n // special actions for desktop\n if (this.search.triggerEnv === 'desktop') {\n this.search.top.style.minHeight = null\n // enable body scrolling\n document.body.classList.remove('no-scroll')\n // remove click detection\n if (!params || !params.ignoreClickListener) {\n this.search.obj.clearListener()\n }\n }\n // common actions\n this.search.obj.classList.remove('active')\n this.search.obj.setAttribute('aria-hidden', true)\n this.search.trigger.setAttribute('aria-expanded', false)\n // this.closeSearchSuggestions()\n this.search.input.value = null\n this.search.input.blur()\n // remove keyboard accessibility\n if (!params || !params.ignoreKeyboardHandler) {\n this.search.obj.clearKeyHandler()\n }\n // disable keyhandling on open header in mobile\n if (this.search.triggerEnv === 'mobile') {\n this.header.disableKeyHandler = false\n }\n // remove class from header\n this.header.classList.remove('search-active')\n // make not active\n this.search.active = false\n // restore focus to trigger on desktop\n if (this.search.triggerEnv === 'desktop') this.search.trigger.focus()\n\n // Clear validation errors\n this.clearErrors()\n }\n\n // set up searching\n setupSearch() {\n // build up search object\n this.search = {}\n this.search.obj = this.header.querySelector('.module-header-search')\n this.search.active = false\n this.search.trigger = this.header.querySelector(\n '.module-header-search__trigger'\n )\n this.search.top = this.search.obj.querySelector(\n '.module-header-search__top'\n )\n this.search.form = this.search.obj.querySelector(\n '.module-header-search__form'\n )\n this.search.input = this.search.form.querySelector(\n '.module-header-search__input'\n )\n this.search.submit = this.search.form.querySelector(\n '.module-header-search__btn'\n )\n this.search.suggestionsTitle = this.search.obj.querySelector(\n '.module-header-search__results .title'\n )\n // setup search trigger for desktop\n this.search.trigger.addEventListener('click', (e) => {\n if (!this.search.active) {\n e.stopPropagation()\n this.search.triggerEnv = 'desktop'\n this.openSearch()\n } else if (this.search.active) {\n this.closeSearch()\n this.search.triggerEnv = null\n }\n })\n // setup close button\n const closeBtn = this.search.obj.querySelector(\n '.module-header-search__close'\n )\n closeBtn.addEventListener('click', () => {\n if (this.search.active) {\n this.closeSearch()\n this.search.triggerEnv = null\n }\n })\n }\n\n /**\n * Add validation to the form\n * @param {Event} event - the event object\n */\n addValidation = (event) => {\n event.preventDefault()\n const form = event.target\n const targetForm = form.dataset.breakpoint\n\n // PristineJS configuration\n const config = {\n live: false,\n classTo:\n targetForm === 'desktop'\n ? SiteSearch.CLASSES.INPUT_CONTAINER_DESKTOP\n : SiteSearch.CLASSES.INPUT_CONTAINER_MOBILE,\n errorTextParent:\n targetForm === 'desktop'\n ? SiteSearch.CLASSES.INPUT_CONTAINER_DESKTOP\n : SiteSearch.CLASSES.INPUT_CONTAINER_MOBILE,\n errorClass: SiteSearch.CLASSES.FORM_ERROR,\n errorTextClass: SiteSearch.CLASSES.INPUT_ERROR,\n errorTextTag: 'div'\n }\n\n // Validate search query\n this.pristine = new Pristine(\n targetForm === 'desktop' ? this.desktopForm : this.mobileForm,\n config\n )\n const valid = this.pristine.validate()\n\n if (valid) {\n this.trackInteraction()\n form.submit()\n } else {\n // Add error class to mobile form\n if (targetForm === 'mobile') {\n this.addMobileError()\n }\n }\n }\n\n /**\n * Clear error styles and validation messages\n */\n clearErrors = () => {\n if (this.pristine) {\n this.pristine.reset()\n }\n this.mobileFormContainer.classList.remove(\n SiteSearch.CLASSES.MOBILE_FORM_ERROR\n )\n }\n\n /**\n * Add error styles\n */\n addMobileError = () => {\n if (this.pristine) {\n this.mobileFormContainer.classList.add(\n SiteSearch.CLASSES.MOBILE_FORM_ERROR\n )\n }\n }\n\n /**\n * Track interaction\n */\n trackInteraction = () => {\n let searchTerm = null\n\n if (this.inputMobile.value !== '') {\n searchTerm = this.inputMobile.value\n } else {\n searchTerm = this.inputDesktop.value\n }\n\n this.analyticsService.trackInteraction('search', {\n search_term: searchTerm\n })\n }\n}\n","import { enableBodyScroll } from 'body-scroll-lock'\nimport Services from 'services'\nimport { AccordionWidget } from 'utilities/accordion'\nimport {\n actionOnClickOutside,\n limitKeyboardAccessibility\n} from 'utilities/utilities'\nimport SiteSearch from './SiteSearch'\nimport { tokenReplace } from 'utilities/tokenReplace'\n\nclass Header {\n static SELECTORS = {\n COMPONENT: '[data-cmp-is=\"header\"]',\n STICKY_WRAPPER: '[data-sticky-wrapper=\"\"]',\n SITE_SEARCH: '[data-site-search=\"\"]',\n FAVORITES: '[data-cmp-hook=\"favorites-count\"]',\n FAVORITES_LABEL: '[data-cmp-hook=\"favorites-a11ty\"]',\n FAVORITES_ICON: '[data-cmp-hook=\"favorites-icon\"]'\n }\n\n static CLASSES = {\n HIDDEN: 'module-header--hidden',\n ACTIVE: 'module-header-favorites-svg-heart--active'\n }\n\n static EVENTS = {\n SAVE_FAVORITE: 'saveFavorite',\n REMOVE_FAVORITE: 'removeFavorite'\n }\n\n constructor(element) {\n\t\tthis.setupAlertBannerObservation();\n this.header = element\n this.services = Services.getInstance()\n this.config = {\n match: false,\n myObserver: null\n }\n\n this.ScrollService = this.services.ScrollService\n this.ResizeService = this.services.ResizeService\n this.EventEmitterService = this.services.EventEmitterService\n\n this.cacheDom()\n\n this.mqContext()\n this.createSiteSearch()\n this.updateFavorites()\n this.makeSticky()\n this.attachEvents()\n }\n\n cacheDom() {\n this.toggle = this.header.querySelector('.js-nav-toggle')\n this.mainNav = this.header.querySelector('.js-main-nav')\n\t this.alertBanners = this.header.querySelectorAll('.mod-alert-banner');\n\t\tthis.menuContainer = this.mainNav.querySelector('.container');\n\t\tthis.tertiaryNavs = this.mainNav.querySelectorAll('.module-header-nav-tertiary');\n this.stickyWrapper = this.header.querySelector(\n Header.SELECTORS.STICKY_WRAPPER\n )\n this.mobileActiveClass = 'mobile-active'\n this.mobileScrollEl = this.header.querySelector(\n '.module-header__scroll-wrapper'\n )\n this.siteSearchEl = this.header.querySelector(Header.SELECTORS.SITE_SEARCH)\n this.favoritesCountEl = this.header.querySelector(\n Header.SELECTORS.FAVORITES\n )\n this.favoritesCountLabel = this.header.querySelector(\n Header.SELECTORS.FAVORITES_LABEL\n )\n this.favoritesIcon = this.header.querySelector(\n Header.SELECTORS.FAVORITES_ICON\n )\n }\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 (mutation.type === 'attributes' && (mutation.attributeName === 'aria-expanded' || mutation.attributeName === 'aria-hidden')) {\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(Header.SELECTORS.COMPONENT);\n\t\t\t\t\tif (mutation.target === headerElement || headerElement.contains(mutation.target)) {\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(document.querySelector(Header.SELECTORS.COMPONENT), {\n\t\t\tattributes: true,\n\t\t\tchildList: true,\n\t\t\tsubtree: true\n\t\t});\n\t}\n\n attachEvents() {\n // set up toggle\n this.toggle.addEventListener('click', this.toggleState)\n\n // Listen to Favorite changes\n this.EventEmitterService.on(\n Header.EVENTS.SAVE_FAVORITE,\n this.updateFavorites\n )\n this.EventEmitterService.on(\n Header.EVENTS.REMOVE_FAVORITE,\n this.updateFavorites\n )\n\n\t // Add window orientation change event to call calculateMenuHeight\n\t window.addEventListener('orientationchange', () => {\n\t\t this.closeoutNav();\n\t });\n }\n\n removeEvents() {\n this.toggle.removeEventListener('click', this.toggleState)\n this.EventEmitterService.off(\n Header.EVENTS.SAVE_FAVORITE,\n this.updateFavorites\n )\n this.EventEmitterService.off(\n Header.EVENTS.REMOVE_FAVORITE,\n this.updateFavorites\n )\n }\n\n destroy() {\n this.removeEvents()\n\t this.observer.disconnect();\n }\n\n mqContext() {\n const _ = this\n const mediaQuery = window.matchMedia('(min-width: 996px)')\n\n function mediaQueryChange(mediaQuery) {\n // Desktop\n if (mediaQuery.matches) {\n _.config.match = true\n _.mainNav.setAttribute('aria-hidden', false)\n _.addSubNavFunctionality()\n // Mobile / Tablet\n } else {\n _.config.match = false\n\n // if resizing from desktop down to mobile\n // and myObserver is active\n if (_.config.myObserver !== null) {\n // disconnect myObserver\n _.config.myObserver.disconnect()\n\n // set exising panel heights to 'auto'\n const panels = _.mainNav.querySelectorAll('.module-header-nav__panel')\n panels.forEach((panel) => {\n panel.style.height = 'auto'\n })\n }\n\n _.addSubNavFunctionality()\n }\n }\n\n // add a listener event\n if (mediaQuery?.addEventListener) {\n mediaQuery.addEventListener('change', mediaQueryChange)\n } else {\n mediaQuery.addListener(mediaQueryChange)\n }\n\n // on page load\n mediaQueryChange(mediaQuery)\n }\n\n createSiteSearch() {\n if (this.siteSearchEl) {\n this.siteSearch = new SiteSearch(this.siteSearchEl, {\n headerElement: this.header,\n onOpenSearch: this.collapsePrimary.bind(this, true)\n })\n }\n }\n\n updateFavorites = () => {\n if (this.favoritesCountEl && this.favoritesCountLabel) {\n // Reset a11ty label\n this.favoritesCountLabel.innerText =\n this.favoritesCountLabel.dataset.label\n\n // Get all favorite types from localsotrage\n const doorFavorites = localStorage.getItem('doorFavorites')\n ? JSON.parse(localStorage.getItem('doorFavorites'))\n : []\n // Merge all favorite types from localsotrage\n const favorites = [...doorFavorites]\n\n // Update count and icon if there are favorites\n if (favorites.length > 0) {\n this.favoritesCountLabel.textContent = tokenReplace(\n this.favoritesCountLabel.textContent,\n {\n favoritesCount: favorites.length\n }\n )\n this.favoritesCountEl.innerText = favorites.length || ''\n this.favoritesCountEl.classList.remove(Header.CLASSES.HIDDEN)\n this.favoritesIcon.classList.add(Header.CLASSES.ACTIVE)\n this.favoritesIcon.src = '/dist/assets/icons/save-active.svg'\n } else {\n this.favoritesCountLabel.textContent = tokenReplace(\n this.favoritesCountLabel.textContent,\n {\n favoritesCount: 0\n }\n )\n this.favoritesCountEl.innerText = ''\n this.favoritesCountEl.classList.add(Header.CLASSES.HIDDEN)\n this.favoritesIcon.classList.remove(Header.CLASSES.ACTIVE)\n this.favoritesIcon.src = '/dist/assets/icons/save.svg'\n }\n }\n }\n\n collapsePrimary(openInit) {\n const primary = this.navRef.primary.obj\n primary && primary.close()\n if (openInit) primary.openInit()\n }\n\n collapseAllSections() {\n this.collapseExpandedSubsections()\n this.collapseExpandedSections()\n }\n\n collapseExpandedSections() {\n const sections = this.navRef.primary.sections\n for (const node in sections) {\n const section = sections[node].obj\n if (section.hasExpanded) {\n section.close()\n }\n }\n }\n\n collapseExpandedSubsections() {\n const sections = this.navRef.primary.sections\n for (const node in sections) {\n if (sections[node].obj.hasExpanded) {\n const subsections = sections[node].subsections\n for (const subnode in subsections) {\n const subsection = subsections[subnode].obj\n if (subsection.hasExpanded) {\n subsection.close()\n }\n }\n }\n }\n }\n\n clearDesktopKeyHandler() {\n if (typeof this.header.clearKeyHandler === 'function') {\n this.header.clearKeyHandler()\n }\n }\n\n openDesktopMenu(node) {\n this.header.classList.add('has-expanded-menu')\n this.menuExpanded = true\n // this.togglePrimaryNavPointer()\n // window resizing\n this.removeDesktopMenuResizeAction = this.ResizeService.addCallback((event) => {\n if (event.isWidthChanged) {\n this.closeoutNav()\n }\n })\n }\n\n openDesktopFirstSecondaryMenu(node) {\n const trigger = node.parentElement.querySelector(\n '.module-header-nav-secondary__link'\n )\n\n trigger.click()\n }\n\n // call this function to close down nav from other areas outside of nav\n closeoutNav() {\n if (this.menuExpanded) {\n this.closeDesktopMenu()\n this.collapsePrimary()\n this.collapseAllSections()\n }\n }\n\n closeDesktopMenu(params) {\n this.header.classList.remove('has-expanded-menu')\n if (!params || !params.ignoreClickListener) this.mainNav.clearListener()\n this.menuExpanded = false\n // remove keyboard accessibility\n if (!params || !params.ignoreKeyboardHandler) this.clearDesktopKeyHandler()\n // remove window resizing\n this.removeDesktopMenuResizeAction()\n }\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('style', `height: calc(100vh - (224px + ${totalHeight}px)); height: calc(100dvh - (224px + ${totalHeight}px))`);\n\t\t\tthis.tertiaryNavs.forEach((nav) => {\n\t\t\t\tnav.setAttribute('style', `height: calc(100vh - (224px + ${totalHeight}px)); height: calc(100dvh - (224px + ${totalHeight}px)); top: calc(224px + ${totalHeight}px)`);\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 // initalize the mobile menu\n mobileMenuInit() {\n const levelArr = ['section', 'subsection']\n this.mobileMenu = {\n panels: {},\n activeAccordionTriggers: {},\n levelHeights: {}\n }\n for (const level of levelArr) {\n // create the element to add to mobile panels\n const backBtn = document.createElement('button')\n backBtn.innerHTML = 'Back to'\n backBtn.classList.add('module-header-nav-back')\n // add click listener to back button\n backBtn.addEventListener('click', () => {\n this.mobileMenuBack(level)\n })\n\n // create title element\n const title = document.createElement('div')\n title.classList.add('panel-title')\n backBtn.append(title)\n // add to global\n this.mobileMenu.panels[level] = backBtn\n }\n // set the flag\n this.mobileMenuInitialized = true\n }\n\n // open navigation menu on mobile\n openMobileMenu() {\n // check if mobile setup has been initiated\n if (!this.mobileMenuInitialized) this.mobileMenuInit()\n // prevent page content from scrolling beneath the nav\n document.body.classList.add('no-scroll')\n this.header.classList.add(this.mobileActiveClass)\n this.toggle.setAttribute('aria-expanded', true)\n this.mainNav.setAttribute('aria-hidden', false)\n this.mainNav.dataset.menulevel = 'primary'\n // set the scroll top\n this.mobileScrollEl.scrollTop = 0\n this.mobileMenuActive = true\n\t this.calculateMenuHeight()\n // keyboard accessibility\n limitKeyboardAccessibility(this.header, () => {\n this.closeMobileMenu({\n ignoreKeyboardHandler: true\n })\n })\n // window resizing\n this.removeMobileMenuResizeAction = this.ResizeService.addCallback((event) => {\n if (event.isWidthChanged) {\n this.closeMobileMenu()\n\t this.calculateMenuHeight();\n }\n })\n }\n\n // close navigation menu on mobile\n closeMobileMenu(params) {\n document.body.classList.remove('no-scroll')\n enableBodyScroll(this.mobileScrollEl)\n this.header.classList.remove(this.mobileActiveClass)\n this.collapseAllSections()\n this.toggle.setAttribute('aria-expanded', false)\n this.mainNav.setAttribute('aria-hidden', true)\n this.mobileMenuActive = false\n // reset height of nav container\n this.mainNav.style.height = 'auto'\n // remove keyboard accessibility\n if (!params || !params.ignoreKeyboardHandler) this.header.clearKeyHandler()\n // remove window resizing\n this.removeMobileMenuResizeAction()\n // Reset form validation\n if (this.siteSearch) {\n this.siteSearch.clearErrors()\n }\n\t this.setHeaderHeight()\n }\n\n // activate hamburger toggle for mobile\n toggleState = () => {\n const isActive = !this.mobileMenuActive\n if (isActive) this.openMobileMenu()\n else this.closeMobileMenu()\n }\n\n // click handler for mobile menu back button\n mobileMenuBack(level) {\n let group\n if (level === 'subsection') group = 'section'\n else group = 'primary'\n\n this.animateMobileMenu(group, true)\n\n const trigger = this.mobileMenu.activeAccordionTriggers[level]\n\n // function for resetting menu\n const resetMenu = () => {\n // remove this event listener so it only gets triggered once\n this.mainNav.removeEventListener('transitionend', resetMenu)\n // trigger a click to reset the menu\n trigger.click()\n }\n\n // when the next css transition finishes (which should be the one we just triggered)\n this.mainNav.addEventListener('transitionend', resetMenu)\n }\n\n // logic for expanding and collapsing sections when they are clicked\n animateMobileMenu(group, isBack) {\n // function for resetting menu\n const resetSize = () => {\n // remove this event listener so it only gets triggered once\n this.mainNav.removeEventListener('transitionend', resetSize)\n // remove \"height\" from the element's inline styles, so it can return to its initial value\n let height\n if (group === 'primary') return\n // height = 'auto'\n else if (isBack) {\n height = this.mobileMenu[group]\n } else {\n height = this.mobileMenu.subPages.offsetHeight + 'px'\n this.mobileMenu[group] = height\n }\n this.mainNav.style.height = height\n }\n // when the next css transition finishes (which should be the one we just triggered)\n this.mainNav.addEventListener('transitionend', resetSize)\n // change data attribute to trigger transition\n this.mainNav.setAttribute('data-menulevel', group)\n }\n\n // logic for expanding and collapsing sections when they are clicked\n prepMobileMenu(group, node) {\n // set up panel\n const panel = this.mobileMenu.panels[group]\n const title = panel.querySelector('.panel-title')\n title.innerHTML = node.innerHTML\n // isolate nav elements\n const parent = node.parentElement\n const subPages = parent.querySelector('ul')\n subPages.prepend(panel)\n // add accordion trigger to mobile menu object\n this.mobileMenu.activeAccordionTriggers[group] = node\n this.mobileMenu.subPages = subPages\n\n const tertiaryNav = parent.querySelector('.module-header-nav-tertiary')\n const elem = tertiaryNav.querySelector('.module-header-nav-back')\n elem.parentNode.removeChild(elem)\n\n tertiaryNav.prepend(elem)\n\n // animate the menu\n this.animateMobileMenu(group)\n }\n\n // behavior for clicking on a nav item\n accordionClick(node, group) {\n node.addEventListener(\n 'click',\n (e) => {\n e.preventDefault()\n // see if this click is expanding element or not\n const thisExpanded = !e.target.classList.contains('is-expanded')\n // scenarios for different levels of nav\n switch (group) {\n case 'primary':\n case 'section':\n // MOBILE\n if (this.mobileMenuActive && thisExpanded) {\n this.prepMobileMenu(group, node)\n this.collapseExpandedSubsections()\n }\n // DESKTOP\n else {\n const _ = this\n // collapse subsections\n this.collapseExpandedSubsections()\n // SECTION HAS BEEN CLICKED ACTIVE, THE DESKTOP NAV MENU MAY OR MAY NOT ALREADY BE OPEN\n if (thisExpanded) {\n if (\n node.classList.contains('module-header-nav-primary__link')\n ) {\n this.openDesktopFirstSecondaryMenu(node)\n }\n\n const secondaryActiveEl = e.target.classList.contains(\n 'module-header-nav-secondary__link',\n 'is-expanded'\n )\n const variant = e.target.parentElement.classList.contains(\n 'module-header-nav-primary__item--variant'\n )\n\n if (secondaryActiveEl) {\n const tertiaryNav = e.target.parentElement.querySelector(\n '.module-header-nav-tertiary'\n )\n const panel = e.target.closest('.module-header-nav__panel')\n\n _.config.myObserver = new ResizeObserver((entries) => {\n if (_.config.match === true) {\n for (const entry of entries) {\n const tertiaryHeight = entry.contentRect.height\n panel.style.height = tertiaryHeight + 'px'\n }\n }\n })\n\n _.config.myObserver.observe(tertiaryNav)\n } else if (variant) {\n // variant\n const tertiaryNav = e.target.parentElement.querySelector(\n '.module-header-nav-secondary--large .module-header-nav-tertiary'\n )\n const panel = e.target.parentElement.querySelector(\n '.module-header-nav__panel'\n )\n\n _.config.myObserver = new ResizeObserver((entries) => {\n if (_.config.match === true) {\n for (const entry of entries) {\n const tertiaryHeight = entry.contentRect.height\n panel.style.height = tertiaryHeight + 'px'\n }\n }\n })\n\n _.config.myObserver.observe(tertiaryNav)\n }\n }\n // OPEN THE DESKTOP NAV MENU FROM CLOSED STATE\n if (thisExpanded && !this.menuExpanded) {\n this.openDesktopMenu(node)\n this.openDesktopFirstSecondaryMenu(node)\n // detect outside pointer events\n actionOnClickOutside(this.mainNav, () => {\n this.closeDesktopMenu({\n ignoreClickListener: true\n })\n this.collapsePrimary(true)\n this.collapseAllSections()\n })\n }\n // CLOSE THE DESKTOP NAV MENU\n else if (!thisExpanded && this.menuExpanded) {\n this.closeDesktopMenu()\n }\n // restrict keyboard (has to be done on animation end)\n // and add special classes for animation\n this.clearDesktopKeyHandler()\n const desktopEl = this.header.querySelector('.module-header-nav')\n\n desktopEl.classList.add('animating-menu')\n }\n break\n\n case 'subsection':\n if (this.mobileMenuActive && thisExpanded) {\n this.prepMobileMenu(group, node)\n }\n break\n }\n },\n false\n )\n }\n\n buildAccordion(panels, triggers, wrapper, type, id, selectedIndex = false) {\n let node\n id = '-' + id\n for (node of panels) {\n node.classList.add('js-accordion-panel' + id)\n }\n for (node of triggers) {\n node.classList.add('js-accordion-trigger' + id)\n this.accordionClick(node, type)\n // set up for analytics\n let value = node.innerText || node.textContent\n value = value.replace(/\\s+/g, ' ').trim()\n node.analyticsValue = value\n }\n wrapper.classList.add('js-accordion-interface' + id)\n\n return new AccordionWidget(wrapper, {\n id,\n selectedIndex\n })\n }\n\n // build out accordion functionality on primary, sections and subsections\n addSubNavFunctionality() {\n // create holder object for accordions\n this.navRef = {}\n const nav = this.header.querySelector('nav')\n let i, id, type, node, panels, triggers, wrappers, wrapper, selectedIndex\n\n // add accordion to first level\n wrapper = nav.querySelector('.module-header-nav-primary')\n triggers = nav.querySelectorAll('.module-header-nav-primary > li > button')\n panels = nav.querySelectorAll('.module-header-nav__panel')\n\n // add to master array\n type = id = 'primary'\n\n this.navRef.primary = {}\n\n if (this.config.match) {\n this.navRef.primary = {\n obj: this.buildAccordion(\n panels,\n triggers,\n wrapper,\n type,\n id,\n selectedIndex\n )\n }\n } else if (\n !this.config.match &&\n document\n .querySelector('.module-header-nav-primary')\n .classList.contains('is-accordion')\n ) {\n id = '-primary'\n\n return new AccordionWidget(wrapper, {\n id,\n selectedIndex\n }).destroy()\n }\n\n if (\n !document\n .querySelector('.module-header-nav-secondary')\n .classList.contains('is-accordion')\n ) {\n // add accordions to second level\n const sectionObj = {}\n wrappers = nav.querySelectorAll(\n '.module-header-nav-primary > .module-header-nav-primary__item'\n )\n\n i = 0\n for (node of wrappers) {\n wrapper = node.querySelector('.module-header-nav-secondary')\n triggers = node.querySelectorAll(\n '.module-header-nav-secondary > li:not([class*=\"external-link\"]) > a'\n )\n panels = node.querySelectorAll('.module-header-nav-tertiary')\n type = 'section'\n id = type + i\n const section = this.buildAccordion(panels, triggers, wrapper, type, id)\n\n // now add to master section object\n sectionObj[id] = {\n obj: section\n }\n i++\n }\n this.navRef.primary.sections = sectionObj\n }\n }\n\n // used to add overview links to top level sections\n buildSectionElements() {\n // isolate anchor elements followed by a subnav\n const topAnchors = this.mainNav.querySelectorAll('a + ul, a + div > ul') // a + .module-header-nav-tertiary\n // iterate through all top level anchors\n for (const node of topAnchors) {\n let parent = node.parentElement\n if (parent.nodeName === 'DIV') parent = parent.parentElement\n const isActive = parent.classList.contains('active')\n // get attributes of the Primary landing page\n const landing = parent.querySelector('a')\n const landingHtml = landing.innerHTML\n const landingHref = landing.href\n // get the list of sub-pages\n const subPages = parent.querySelector('ul')\n\n // inject link to top of list\n const landingOverview = document.createElement('a')\n landingOverview.innerHTML =\n landingHtml + this.config.landingPageLinkAddText\n landingOverview.href = landingHref\n const landingOverviewListItem = document.createElement('li')\n landingOverviewListItem.classList.add('overview')\n if (isActive) landingOverviewListItem.classList.add('active')\n landingOverviewListItem.append(landingOverview)\n subPages.prepend(landingOverviewListItem)\n\n // now see if this an element that contains an active element\n if (subPages.querySelector('.active')) {\n parent.classList.add('contains-active-page')\n }\n }\n }\n\n stickyScroll(header, mobileSticky, desktopSticky) {\n if (window.pageYOffset > desktopSticky) header.classList.add('large-sticky')\n else header.classList.remove('large-sticky')\n if (window.pageYOffset > mobileSticky) header.classList.add('mobile-sticky')\n else header.classList.remove('mobile-sticky')\n }\n\n // sets up sticky behavior on scrolling\n setStickyScrolling() {\n // first let's remove the current scroll behavior if there is one\n if (this.activeScrollRemove) this.activeScrollRemove()\n // get the header and set minimum height\n const header = this.header\n // Mobile: get the offset position of the primary\n const mobileSticky =\n this.header.getBoundingClientRect().top + window.scrollY\n // Desktop: get the offset position of the primary\n const desktopEl = header.querySelector('.module-header-nav')\n const desktopSticky = desktopEl.getBoundingClientRect().top + 86;\n // Add to ScrollSerive callbacks\n this.activeScrollRemove = this.ScrollService.addCallback(() =>\n this.stickyScroll(header, mobileSticky, desktopSticky)\n )\n }\n\n // adds a set height to header, needed for sticky (position: fixed)\n setHeaderHeight() {\n this.header.style.setProperty(\n '--height',\n `${this.stickyWrapper.getBoundingClientRect().height}px`\n )\n }\n\n // make header sticky\n makeSticky() {\n // get the header and set minimum height\n this.setHeaderHeight()\n // set up listener for header height\n this.ResizeService.addCallback(this.calculateMenuHeight.bind(this))\n // set up scrolling\n this.setStickyScrolling()\n }\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 if (!el) return\n this.el = el\n this.services = Services.getInstance()\n this.EventEmitterService = this.services.EventEmitterService\n\n let triggerClass = 'js-accordion-trigger'\n let panelClass = 'js-accordion-panel'\n if (props.id) {\n triggerClass += props.id\n panelClass += props.id\n }\n const expandFirst = el.dataset.firstexpanded === 'true'\n this.multiSelectable = this.el.hasAttribute('aria-multiselectable')\n\n let selectedIndex\n if (Number.isInteger(props.selectedIndex)) selectedIndex = props.selectedIndex\n else if (expandFirst) selectedIndex = 0\n\n this.accordionTriggers = this.el.getElementsByClassName(triggerClass)\n this.accordionPanels = this.el.getElementsByClassName(panelClass)\n\n this.observer = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n if (!entry.borderBoxSize) return\n const { blockSize: height } = entry.borderBoxSize[0]\n entry.target\n .closest('.js-accordion-panel')\n .style.setProperty('--height', `${height}px`)\n })\n })\n\n if (\n this.accordionTriggers.length === 0 ||\n this.accordionTriggers.length !== this.accordionPanels.length\n ) {\n return\n }\n\n // if we do not already have a selected index see if we have the open panels attribute\n if (selectedIndex === undefined && el.dataset.openPanels) {\n let openPanels = el.dataset.openPanels\n openPanels = openPanels.split(',')\n const panelArr = []\n for (const panel of openPanels) {\n const n = parseInt(panel)\n // quick test to make sure we have a positive value\n if ((n | 0) > 0 && n % 1 === 0 && n <= this.accordionTriggers.length) {\n panelArr.push(n - 1)\n // if this is not multiselectable then stop after first validated value\n if (!this.multiSelectable) break\n }\n }\n if (panelArr.length) selectedIndex = panelArr\n }\n\n this._init(selectedIndex)\n}\n\nAccordionWidget.prototype._init = function (selectedIndex) {\n this.accordionTriggersLength = this.accordionTriggers.length\n this.expandedAccordions = new Array(this.accordionTriggersLength)\n this.clickListener = this._clickEvent.bind(this)\n this.keydownListener = this._keydownEvent.bind(this)\n this.focusListener = this._focusEvent.bind(this)\n this.keys = {\n prev: 38,\n next: 40,\n space: 32\n }\n\n let initialSelectedIndex\n\n for (let i = 0; i < this.accordionTriggersLength; i++) {\n this.accordionTriggers[i].index = i\n this.accordionTriggers[i].addEventListener(\n 'click',\n this.clickListener,\n false\n )\n this.accordionTriggers[i].addEventListener(\n 'keydown',\n this.keydownListener,\n false\n )\n this.accordionTriggers[i].addEventListener(\n 'focus',\n this.focusListener,\n false\n )\n this.accordionTriggers[i].classList.add('is-accordion-trigger')\n\n if (this.accordionTriggers[i].classList.contains('is-selected')) {\n this.expandedAccordions[i] = true\n }\n }\n\n for (let i = 0; i < this.accordionPanels.length; i++) {\n this.accordionPanels[i].classList.add('is-accordion-panel')\n\n if (\n this.accordionPanels[i].querySelector('.accordion-panel__inner') !== null\n ) {\n const el = this.accordionPanels[i].querySelector(\n '.accordion-panel__inner'\n )\n this.observer.observe(el)\n }\n }\n\n // determine which panels need to be open\n if (!isNaN(selectedIndex)) {\n initialSelectedIndex = selectedIndex\n this.expandedAccordions = new Array(this.accordionTriggersLength)\n this.expandedAccordions[initialSelectedIndex] = true\n } else if (Array.isArray(selectedIndex)) {\n initialSelectedIndex = selectedIndex\n this.expandedAccordions = new Array(this.accordionTriggersLength)\n for (let i = 0; i < this.accordionTriggersLength; i++) {\n if (selectedIndex.includes(i)) this.expandedAccordions[i] = true\n }\n } else {\n initialSelectedIndex = this.expandedAccordions.lastIndexOf(true)\n\n if (!this.multiSelectable) {\n this.expandedAccordions = new Array(this.accordionTriggersLength)\n this.expandedAccordions[initialSelectedIndex] = true\n }\n }\n\n this.initialSetIndex = selectedIndex\n this.setSelected(initialSelectedIndex)\n this.setExpanded()\n this.setAPI()\n this.el.classList.add('is-accordion')\n this.el.classList.add('is-initialized')\n}\n\nAccordionWidget.prototype._clickEvent = function (e) {\n e.preventDefault()\n this.setSelected(e.target.index, true)\n this.setExpanded(e.target.index, true)\n}\n\nAccordionWidget.prototype._keydownEvent = function (e) {\n let targetIndex\n\n switch (e.keyCode) {\n case this.keys.space:\n case this.keys.prev:\n case this.keys.next:\n e.preventDefault()\n break\n default:\n return\n }\n\n if (e.keyCode === this.keys.space) {\n // this.setExpanded(e.target.index, true);\n e.target.click()\n\n return\n } else if (e.keyCode === this.keys.prev && e.target.index > 0) {\n targetIndex = e.target.index - 1\n } else if (\n e.keyCode === this.keys.next &&\n e.target.index < this.accordionTriggersLength - 1\n ) {\n targetIndex = e.target.index + 1\n } else {\n return\n }\n\n this.setSelected(targetIndex, true)\n}\n\nAccordionWidget.prototype._focusEvent = function () {\n if (this.accordionTriggersLength === 1) {\n this.setSelected(0)\n }\n}\n\nAccordionWidget.prototype.setSelected = function (index, userInvoked) {\n if (index === -1) {\n this.accordionTriggers[0].setAttribute('tabindex', 0)\n\n return\n }\n\n if (Array.isArray(index)) index = index[0]\n for (let i = 0; i < this.accordionTriggersLength; i++) {\n if (i === index) {\n this.accordionTriggers[i].classList.add('is-selected')\n this.accordionTriggers[i].setAttribute('aria-selected', true)\n // this.accordionTriggers[i].setAttribute('tabindex', 0);\n\n if (userInvoked) {\n this.accordionTriggers[i].focus()\n }\n } else {\n this.accordionTriggers[i].classList.remove('is-selected')\n this.accordionTriggers[i].setAttribute('aria-selected', false)\n\n // this.accordionTriggers[i].setAttribute('tabindex', -1);\n }\n }\n}\n\nAccordionWidget.prototype.setExpanded = function (index, userInvoked) {\n let i\n\n // special case to close all\n if (index === -1) this.expandedAccordions = []\n\n if (userInvoked) {\n if (this.multiSelectable) {\n this.expandedAccordions[index] = !this.expandedAccordions[index]\n } else {\n for (i = 0; i < this.accordionTriggersLength; i++) {\n if (i === index) {\n this.expandedAccordions[i] = !this.expandedAccordions[i]\n } else {\n this.expandedAccordions[i] = false\n }\n }\n }\n\n // Emit event for the clicked accordion panel\n const accordionTitle = this.accordionTriggers[index]?.innerText\n const status = this.expandedAccordions[index] ? 'open' : 'close'\n\n this.EventEmitterService.emit('accordion', {\n accordionElement: this.el,\n accordionTitle,\n status\n })\n }\n\n let hasExpanded = false\n for (i = 0; i < this.accordionTriggersLength; i++) {\n if (this.expandedAccordions[i]) {\n this.accordionTriggers[i].setAttribute('aria-expanded', true)\n this.accordionTriggers[i].classList.add('is-expanded')\n\n this.accordionPanels[i].setAttribute('aria-hidden', false)\n this.accordionPanels[i].classList.add('is-open')\n\n this.accordionTriggers[i].parentElement.classList.add('is-active')\n // this.accordionPanels[i].setAttribute('tabindex', 0);\n\n hasExpanded = true\n } else {\n this.accordionTriggers[i].setAttribute('aria-expanded', false)\n this.accordionTriggers[i].classList.remove('is-expanded')\n\n this.accordionPanels[i].setAttribute('aria-hidden', true)\n this.accordionPanels[i].classList.remove('is-open')\n\n this.accordionTriggers[i].parentElement.classList.remove('is-active')\n // this.accordionPanels[i].setAttribute('tabindex', -1);\n }\n }\n\n // add close to parent to indicate there is an open element\n if (hasExpanded) this.el.classList.add('has-expanded-el')\n else this.el.classList.remove('has-expanded-el')\n this.hasExpanded = hasExpanded\n}\n\nAccordionWidget.prototype.setAPI = function () {\n // add API functionality here\n this.close = function () {\n this.setSelected(-1)\n this.setExpanded(-1)\n }\n // open initial index\n this.openInit = function () {\n const index = this.initialSetIndex\n if (Number.isInteger(index)) {\n this.setSelected(index, true)\n this.setExpanded(index, true)\n }\n }\n}\n\nAccordionWidget.prototype.destroy = function () {\n this.el.classList.remove('is-initialized')\n\n for (let i = 0; i < this.accordionTriggersLength; i++) {\n this.accordionTriggers[i].removeAttribute('aria-expanded')\n this.accordionTriggers[i].removeAttribute('aria-selected')\n this.accordionTriggers[i].classList.remove('is-expanded')\n\n this.accordionPanels[i].removeAttribute('aria-hidden')\n this.accordionPanels[i].classList.remove('is-open')\n this.accordionPanels[i].removeAttribute('tabindex')\n\n this.accordionTriggers[i].removeEventListener(\n 'click',\n this.clickListener,\n false\n )\n this.accordionTriggers[i].removeEventListener(\n 'keydown',\n this.keydownListener,\n false\n )\n this.accordionTriggers[i].removeEventListener(\n 'focus',\n this.focusListener,\n false\n )\n\n if (\n this.accordionPanels[i].querySelector('.accordion-panel__inner') !== null\n ) {\n const el = this.accordionPanels[i].querySelector(\n '.accordion-panel__inner'\n )\n this.observer.unobserve(el)\n }\n\n delete this.accordionTriggers[i].index\n }\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 if (typeof str !== 'string') {\n throw TypeError('Input is not of type string')\n }\n if (str.match(regex) && replacements.length !== str.match(regex).length) {\n throw Error('Not enough replacement values')\n }\n\n const replacerFn = () => replacements.shift()\n return 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 if (Array.isArray(replacements)) {\n return replacements.reduce(\n (prev, replacement, index) =>\n stringReplace(prev, new RegExp(`\\\\{${index}\\\\}`, 'g'), [replacement]),\n str\n )\n } else if (typeof replacements === 'object') {\n return Object.keys(replacements).reduce(\n (prev, replacementKey) =>\n stringReplace(prev, new RegExp(`\\\\{${replacementKey}\\\\}`, 'g'), [\n replacements[replacementKey]\n ]),\n str\n )\n }\n\n return 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","addListener","siteSearch","collapsePrimary","bind","innerText","label","favorites","localStorage","getItem","JSON","parse","length","textContent","tokenReplace","favoritesCount","src","openInit","primary","navRef","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","pageYOffset","setStickyScrolling","activeScrollRemove","getBoundingClientRect","scrollY","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":""}