{"version":3,"file":"812.min.js?t=1757401264672","mappings":"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","sources":["webpack://@hero-digital/masonite/./src/js/utilities/tokenReplace.js","webpack://@hero-digital/masonite/./src/js/utilities/accordion.js","webpack://@hero-digital/masonite/./src/components/modules/Header/SiteSearch.js","webpack://@hero-digital/masonite/./src/js/react-apps/apps/searchAsYouType/components/Cards.jsx","webpack://@hero-digital/masonite/./src/js/react-apps/apps/searchAsYouType/components/SearchAsYouType.jsx","webpack://@hero-digital/masonite/./src/components/modules/Header/Header.js"],"sourcesContent":["/**\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","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","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\n\t\t\trequestAnimationFrame(() => { // this is intential\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tconst inputEl = document.getElementById('searchinput-input');\n\t\t\t\t\t\tif (inputEl) inputEl.focus();\n\t\t\t\t\t}, 50);\n\t\t\t\t});\n\t\t\t});\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\t// if (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\tdocument.body.classList.remove('no-scroll')\n\t\t\tif (!params || !params.ignoreClickListener) {\n\t\t\t\tthis.search.obj.clearListener()\n\t\t\t}\n\t\t}\n\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\n\t\t// only clear / blur if the input still exists\n\t\tif (this.search.input) {\n\t\t\tthis.search.input.value = ''\n\t\t\tthis.search.input.blur()\n\t\t}\n\n\t\tif (!params || !params.ignoreKeyboardHandler) {\n\t\t\tthis.search.obj.clearKeyHandler()\n\t\t}\n\n\t\tif (this.search.triggerEnv === 'mobile') {\n\t\t\tthis.header.disableKeyHandler = false\n\t\t}\n\n\t\tthis.header.classList.remove('search-active')\n\t\tthis.search.active = false\n\n\t\tif (this.search.triggerEnv === 'desktop') {\n\t\t\tthis.search.trigger.blur()\n\t\t}\n\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.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 PropTypes from 'prop-types';\n\nDoorCard.propTypes = {\n\ttitle: PropTypes.string.isRequired,\n\texcerpt: PropTypes.string,\n\timageUrl: PropTypes.string,\n\turl: PropTypes.string.isRequired,\n\timageAlt: PropTypes.string,\n\teyebrows: PropTypes.arrayOf(PropTypes.string)\n};\n\nDocumentCard.propTypes = {\n\ttitle: PropTypes.string.isRequired,\n\turl: PropTypes.string.isRequired,\n\texcerpt: PropTypes.string\n};\n\nArticleCard.propTypes = {\n\ttitle: PropTypes.string.isRequired,\n\texcerpt: PropTypes.string,\n\timageUrl: PropTypes.string,\n\turl: PropTypes.string.isRequired,\n\timageAlt: PropTypes.string,\n\tcategory: PropTypes.string\n};\n\nGeneralCard.propTypes = {\n\ttitle: PropTypes.string.isRequired,\n\texcerpt: PropTypes.string,\n\timageUrl: PropTypes.string,\n\turl: PropTypes.string.isRequired,\n\timageAlt: PropTypes.string\n};\n\nfunction decodeHtml(htmlString) {\n\tconst parser = new DOMParser();\n\treturn parser.parseFromString(htmlString, 'text/html').documentElement.textContent;\n}\n\n/**\n * DoorCard\n */\nexport function DoorCard({ title, excerpt, imageUrl, url, imageAlt, eyebrows }) {\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{decodeHtml(title)}
\n\t\t\t\t

{decodeHtml(excerpt)}

\n\t\t\t
\n\t\t
\n\t);\n}\n\n/**\n * DocumentCard\n */\nexport function DocumentCard({ title, url, excerpt }) {\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\"document\"\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{decodeHtml(title)}
\n\t\t\t\t{excerpt && (\n\t\t\t\t\t

\n\t\t\t\t\t\t{decodeHtml(excerpt)}\n\t\t\t\t\t

\n\t\t\t\t)}\n\t\t\t
\n\t\t
\n\t);\n}\n\n/**\n * ArticleCard\n */\nexport function ArticleCard({ title, excerpt, imageUrl, url, imageAlt, category }) {\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{decodeHtml(title)}
\n\t\t\t\t

{decodeHtml(excerpt)}

\n\t\t\t
\n\t\t
\n\t);\n}\n\n/**\n * GeneralCard\n */\nexport function GeneralCard({ title, excerpt, imageUrl, url, imageAlt }) {\n\treturn (\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{decodeHtml(title)}
\n\t\t\t\t{excerpt &&

{decodeHtml(excerpt)}

}\n\t\t\t
\n\t\t
\n\t);\n}\n","import { useState, useEffect, useLayoutEffect, useRef } from 'react';\nimport {\n\tDoorCard,\n\tDocumentCard,\n\tArticleCard,\n\tGeneralCard\n} from './Cards';\nimport '@lottiefiles/lottie-player';\nimport PropTypes from 'prop-types';\n\nSearchAsYouType.propTypes = {\n\tapiEndpoint: PropTypes.string.isRequired,\n};\n\nfunction useDebounce(value, delay) {\n\tconst [debouncedValue, setDebouncedValue] = useState(value);\n\tuseEffect(() => {\n\t\tconst handler = setTimeout(() => setDebouncedValue(value), delay);\n\t\treturn () => clearTimeout(handler);\n\t}, [value, delay]);\n\treturn debouncedValue;\n}\n\nexport default function SearchAsYouType({ apiEndpoint }) {\n\tconst [query, setQuery] = useState('');\n\tconst debouncedQuery = useDebounce(query, 500);\n\tconst [sections, setSections] = useState([]);\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [error, setError] = useState(null);\n\tconst sectionsRef = useRef(null);\n\n\t// new: track current breakpoint\n\tconst [breakpoint, setBreakpoint] = useState(\n\t\twindow.innerWidth > 995 ? 'desktop' : 'mobile'\n\t);\n\n\tuseEffect(() => {\n\t\t// update breakpoint on resize\n\t\tconst onResizeBp = () => {\n\t\t\tsetBreakpoint(window.innerWidth > 995 ? 'desktop' : 'mobile');\n\t\t};\n\t\twindow.addEventListener('resize', onResizeBp);\n\t\treturn () => {\n\t\t\twindow.removeEventListener('resize', onResizeBp);\n\t\t};\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!debouncedQuery) {\n\t\t\tsetSections([]);\n\t\t\treturn;\n\t\t}\n\n\t\tasync function fetchResults() {\n\t\t\tsetIsLoading(true);\n\t\t\tsetError(null);\n\t\t\ttry {\n\t\t\t\tconst resp = await fetch(\n\t\t\t\t\t`${apiEndpoint}?query=${encodeURIComponent(debouncedQuery)}`\n\t\t\t\t);\n\t\t\t\tif (!resp.ok) throw new Error(`Error ${resp.status}`);\n\t\t\t\tconst data = await resp.json();\n\t\t\t\tsetSections(\n\t\t\t\t\tArray.isArray(data)\n\t\t\t\t\t\t? data.map(s => ({ ...s, __uuid: crypto.randomUUID() }))\n\t\t\t\t\t\t: []\n\t\t\t\t);\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(err);\n\t\t\t\tsetError(err.message);\n\t\t\t} finally {\n\t\t\t\tsetIsLoading(false);\n\t\t\t}\n\t\t}\n\t\tfetchResults();\n\t}, [debouncedQuery, apiEndpoint]);\n\n\t// Debounced window resize listener for height recalculation\n\tuseEffect(() => {\n\t\tlet tid = null;\n\t\tconst onResize = () => {\n\t\t\tclearTimeout(tid);\n\t\t\ttid = setTimeout(recalcMaxHeight, 50);\n\t\t};\n\t\twindow.addEventListener('resize', onResize);\n\t\treturn () => {\n\t\t\tclearTimeout(tid);\n\t\t\twindow.removeEventListener('resize', onResize);\n\t\t};\n\t}, []);\n\n\t// Recalc after first paint of new sections\n\tuseLayoutEffect(() => {\n\t\trecalcMaxHeight();\n\t}, [sections]);\n\n\t// Observe container size changes (e.g. images or fonts loading)\n\tuseEffect(() => {\n\t\tconst el = sectionsRef.current;\n\t\tif (!el) return;\n\t\tconst ro = new ResizeObserver(() => recalcMaxHeight());\n\t\tro.observe(el);\n\t\treturn () => ro.disconnect();\n\t}, [sectionsRef.current]);\n\n\tfunction recalcMaxHeight() {\n\t\tconst container = sectionsRef.current;\n\t\tif (!container) return;\n\n\t\tif (window.innerWidth > 995) {\n\t\t\tcontainer.style.height = '';\n\t\t\tcontainer.style.overflowY = '';\n\t\t\treturn;\n\t\t}\n\n\t\tlet total = 0;\n\t\tdocument.querySelectorAll('.mod-alert-banner').forEach(el => {\n\t\t\ttotal += el.offsetHeight;\n\t\t});\n\t\tconst hdr = document.querySelector('.module-header__container');\n\t\tif (hdr) total += hdr.offsetHeight;\n\t\tconst saytWrapper = document.querySelector(\n\t\t\t'.module-header-search__search-as-you-type'\n\t\t);\n\t\tif (saytWrapper) total += saytWrapper.offsetHeight;\n\n\t\tcontainer.style.height = `calc(100dvh - ${total}px)`;\n\t\tcontainer.style.overflowY = 'auto';\n\t}\n\n\tconst handleInputChange = e => setQuery(e.target.value);\n\n\tconst renderItem = (item, idx) => {\n\t\tconst key = `${item.searchResultType}-${item.title || item.name}-${idx}`;\n\t\tswitch (item.searchResultType) {\n\t\t\tcase 'Doors':\n\t\t\tcase 'Door':\n\t\t\t\treturn (\n\t\t\t\t\t
  • \n\t\t\t\t\t\t\n\t\t\t\t\t
  • \n\t\t\t\t);\n\t\t\tcase 'Documents':\n\t\t\tcase 'Document':\n\t\t\t\treturn (\n\t\t\t\t\t
  • \n\t\t\t\t\t\t\n\t\t\t\t\t
  • \n\t\t\t\t);\n\t\t\tcase 'Articles':\n\t\t\tcase 'Article':\n\t\t\t\treturn (\n\t\t\t\t\t
  • \n\t\t\t\t\t\t\n\t\t\t\t\t
  • \n\t\t\t\t);\n\t\t\tdefault:\n\t\t\t\treturn (\n\t\t\t\t\t
  • \n\t\t\t\t\t\t\n\t\t\t\t\t
  • \n\t\t\t\t);\n\t\t}\n\t};\n\n\treturn (\n\t\t
    \n\t\t\t
    \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t\t\tSearch\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
    \n\n\t\t\t{isLoading && (\n\t\t\t\t
    \n\t\t\t\t\t\n\t\t\t\t
    \n\t\t\t)}\n\n\t\t\t{error &&
    {error}
    }\n\n\t\t\t{!isLoading && !error && sections.length > 0 && (\n\t\t\t\t
    \n\t\t\t\t\t{sections.map(sec => {\n\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\tcaption,\n\t\t\t\t\t\t\tresults = [],\n\t\t\t\t\t\t\tviewAllText,\n\t\t\t\t\t\t\tallResultsUrl,\n\t\t\t\t\t\t\tnoResultsFound\n\t\t\t\t\t\t} = sec;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t

    {caption}

    \n\t\t\t\t\t\t\t\t{results.length > 0 ? (\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\t
    {noResultsFound}
    \n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{results.length > 0 && allResultsUrl && viewAllText && (\n\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\t\t{viewAllText}\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\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t
    \n\t\t\t)}\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'\nimport ReactDOM from 'react-dom/client'\nimport SearchAsYouType from 'reactDir/searchAsYouType/components/SearchAsYouType'\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.setupFullWidthSections()\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\n\t\t// ─── grab our three “move-around” containers ────────────────────────────────\n\t\t// 1) the single React mount-point element:\n\t\tthis.saytContainer = document.getElementById('searchAsYouType')\n\n\t\t// 2) the empty div inside the mobile nav where we will place #searchAsYouType\n\t\tthis.mobilePlaceholder = this.header.querySelector('.module-header-nav-search')\n\n\t\t// 3) the overlay wrapper (desktop) where #searchAsYouType originally lives\n\t\tthis.overlayContainer = this.header.querySelector('#header-search')\n\n\t\t// 4) the search trigger button to toggle aria attributes\n\t\tthis.searchTrigger = this.header.querySelector('.module-header-search__trigger')\n\t\t// ────────────────────────────────────────────────────────────────────────────\n\n\t\tconst saytContainer = document.getElementById('searchAsYouType')\n\t\tif (saytContainer) {\n\t\t\tconst root = ReactDOM.createRoot(saytContainer)\n\t\t\troot.render()\n\t\t}\n\t}\n\n\tsetupFullWidthSections() {\n\t\tconst el = document.createElement('div');\n\t\tel.style.width = '100%';\n\t\tdocument.body.appendChild(el);\n\n\t\t// Measure the “constrained” width (i.e., width excluding scrollbar)\n\t\tconst constrainedWidth = el.getBoundingClientRect().width;\n\n\t\t// Switch the element to 100vw and measure again\n\t\tel.style.width = '100vw';\n\t\tconst fullWidth = el.getBoundingClientRect().width;\n\n\t\t// Compute scrollbar width and store it in a CSS custom property\n\t\tconst scrollbarWidth = Math.ceil(fullWidth - constrainedWidth);\n\t\tdocument.documentElement.style.setProperty('--scrollbar-width', `${scrollbarWidth}px`);\n\n\t\t// Clean up\n\t\tdocument.body.removeChild(el);\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\twindow.dispatchEvent(new Event('resize'))\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\t// ─── Helpers ────────────────────────────────────────────────────────────────\n\n\t\tconst cleanupObserver = () => {\n\t\t\tconst obs = _.config.myObserver;\n\t\t\tif (!obs) return;\n\n\t\t\tobs.disconnect();\n\n\t\t\t_.mainNav\n\t\t\t\t.querySelectorAll('.module-header-nav__panel')\n\t\t\t\t.forEach(panel => {\n\t\t\t\t\tpanel.style.height = 'auto';\n\t\t\t\t});\n\t\t};\n\n\t\tconst closeSearchOverlay = () => {\n\t\t\tconst oc = _.overlayContainer;\n\t\t\tif (!oc?.classList.contains('active')) return;\n\t\t\toc.classList.remove('active');\n\t\t\toc.setAttribute('aria-hidden', 'true');\n\t\t\t_.searchTrigger?.setAttribute('aria-expanded', 'false');\n\t\t\tdocument.body.classList.remove('no-scroll');\n\t\t\t_.header.classList.remove('search-active');\n\t\t};\n\n\t\tconst moveSayt = container => {\n\t\t\tif (_.saytContainer && container && !container.contains(_.saytContainer)) {\n\t\t\t\tcontainer.appendChild(_.saytContainer);\n\t\t\t}\n\t\t};\n\n\t\tconst handleDesktop = () => {\n\t\t\t_.config.match = true;\n\t\t\t_.mainNav.setAttribute('aria-hidden', false);\n\t\t\t_.addSubNavFunctionality();\n\t\t\tmoveSayt(_.overlayContainer);\n\t\t};\n\n\t\tconst handleMobile = () => {\n\t\t\t_.config.match = false;\n\t\t\tcleanupObserver();\n\t\t\t_.addSubNavFunctionality();\n\t\t\tcloseSearchOverlay();\n\t\t\tmoveSayt(_.mobilePlaceholder);\n\t\t};\n\n\t\t// ─── Media-query listener ────────────────────────────────────────────────────\n\n\t\tfunction mediaQueryChange(mq) {\n\t\t\tif (mq.matches) {\n\t\t\t\thandleDesktop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\thandleMobile();\n\t\t}\n\n\t\tmediaQuery.addEventListener('change', mediaQueryChange);\n\t\tmediaQueryChange(mediaQuery);\n\t}\n\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 - (280px + ${totalHeight}px)); height: calc(100dvh - (280px + ${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 - (280px + ${totalHeight}px)); height: calc(100dvh - (280px + ${totalHeight}px)); top: calc(280px + ${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\tthis.header.style.removeProperty('--height')\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\n\t\twindow.dispatchEvent(new Event('resize'))\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"],"names":["stringReplace","str","regex","replacements","TypeError","match","length","Error","replace","replacerFn","shift","tokenReplace","Array","isArray","reduce","prev","replacement","index","RegExp","concat","Object","keys","replacementKey","AccordionWidget","el","props","arguments","undefined","this","services","Services","getInstance","EventEmitterService","triggerClass","panelClass","id","expandFirst","dataset","firstexpanded","selectedIndex","multiSelectable","hasAttribute","Number","isInteger","accordionTriggers","getElementsByClassName","accordionPanels","observer","ResizeObserver","entries","forEach","entry","borderBoxSize","blockSize","height","target","closest","style","setProperty","openPanels","split","panelArr","panel","n","parseInt","push","_init","prototype","initialSelectedIndex","accordionTriggersLength","expandedAccordions","clickListener","_clickEvent","bind","keydownListener","_keydownEvent","focusListener","_focusEvent","next","space","i","addEventListener","classList","add","contains","querySelector","observe","isNaN","includes","lastIndexOf","initialSetIndex","setSelected","setExpanded","setAPI","e","preventDefault","targetIndex","keyCode","click","userInvoked","setAttribute","focus","remove","_this$accordionTrigge","accordionTitle","innerText","status","emit","accordionElement","hasExpanded","parentElement","close","openInit","destroy","removeAttribute","removeEventListener","unobserve","SiteSearch","constructor","element","_ref","headerElement","onOpenSearch","_defineProperty","event","form","targetForm","breakpoint","config","live","classTo","CLASSES","INPUT_CONTAINER_DESKTOP","INPUT_CONTAINER_MOBILE","errorTextParent","errorClass","FORM_ERROR","errorTextClass","INPUT_ERROR","errorTextTag","pristine","Pristine","desktopForm","mobileForm","validate","trackInteraction","submit","addMobileError","reset","mobileFormContainer","MOBILE_FORM_ERROR","searchTerm","inputMobile","value","inputDesktop","analyticsService","search_term","Analytics","header","init","cacheDom","attachEvents","setupSearch","SELECTORS","FORM_DESKTOP","INPUT_DESKTOP","FORM_MOBILE_CONTAINER","FORM_MOBILE","INPUT_MOBILE","clearButton","CLEAR_BUTTON","addValidation","clearMobileError","detachEvents","openSearch","search","triggerEnv","document","body","requestAnimationFrame","setTimeout","inputEl","getElementById","actionOnClickOutside","obj","closeSearch","ignoreClickListener","trigger","limitKeyboardAccessibility","ignoreKeyboardHandler","disableKeyHandler","active","params","top","minHeight","clearListener","input","blur","clearKeyHandler","clearErrors","suggestionsTitle","stopPropagation","DESKTOP_SEARCH","MOBILE_SEARCH","decodeHtml","htmlString","DOMParser","parseFromString","documentElement","textContent","DoorCard","title","excerpt","imageUrl","url","imageAlt","eyebrows","React","createElement","href","className","src","alt","DocumentCard","_ref2","rel","ArticleCard","_ref3","category","GeneralCard","_ref4","SearchAsYouType","apiEndpoint","query","setQuery","useState","debouncedQuery","debouncedValue","setDebouncedValue","useEffect","handler","clearTimeout","useDebounce","sections","setSections","isLoading","setIsLoading","error","setError","sectionsRef","useRef","setBreakpoint","window","innerWidth","recalcMaxHeight","container","current","overflowY","total","querySelectorAll","offsetHeight","hdr","saytWrapper","onResizeBp","async","resp","fetch","encodeURIComponent","ok","data","json","map","s","_objectSpread","__uuid","crypto","randomUUID","err","console","message","fetchResults","tid","onResize","useLayoutEffect","ro","disconnect","renderItem","item","idx","key","searchResultType","name","action","method","htmlFor","type","placeholder","onChange","background","speed","loop","autoplay","color","ref","sec","caption","results","viewAllText","allResultsUrl","noResultsFound","propTypes","PropTypes","isRequired","Header","favoritesCountEl","favoritesCountLabel","label","favorites","localStorage","getItem","JSON","parse","favoritesCount","HIDDEN","favoritesIcon","ACTIVE","mobileMenuActive","closeMobileMenu","openMobileMenu","dispatchEvent","Event","setupFullWidthSections","setupAlertBannerObservation","myObserver","ScrollService","ResizeService","mqContext","createSiteSearch","updateFavorites","makeSticky","toggle","mainNav","alertBanners","menuContainer","tertiaryNavs","stickyWrapper","STICKY_WRAPPER","mobileActiveClass","mobileScrollEl","siteSearchEl","SITE_SEARCH","FAVORITES","FAVORITES_LABEL","FAVORITES_ICON","saytContainer","mobilePlaceholder","overlayContainer","searchTrigger","ReactDOM","render","width","appendChild","constrainedWidth","getBoundingClientRect","fullWidth","scrollbarWidth","Math","ceil","removeChild","MutationObserver","mutationsList","mutation","attributeName","calculateMenuHeight","COMPONENT","attributes","childList","subtree","toggleState","on","EVENTS","SAVE_FAVORITE","REMOVE_FAVORITE","closeoutNav","removeEvents","off","_","mediaQuery","matchMedia","moveSayt","mediaQueryChange","mq","matches","addSubNavFunctionality","cleanupObserver","obs","closeSearchOverlay","_$searchTrigger","oc","siteSearch","collapsePrimary","_this$navRef","_this$navRef2","navRef","primary","collapseAllSections","collapseExpandedSubsections","collapseExpandedSections","node","section","subsections","subnode","subsection","clearDesktopKeyHandler","openDesktopMenu","menuExpanded","removeDesktopMenuResizeAction","addCallback","isWidthChanged","openDesktopFirstSecondaryMenu","closeDesktopMenu","_this$mainNav","_this$alertBanners","totalHeight","banner","nav","setHeaderHeight","mobileMenuInit","levelArr","mobileMenu","panels","activeAccordionTriggers","levelHeights","level","backBtn","innerHTML","mobileMenuBack","append","mobileMenuInitialized","menulevel","scrollTop","removeMobileMenuResizeAction","enableBodyScroll","removeProperty","group","animateMobileMenu","resetMenu","isBack","resetSize","subPages","prepMobileMenu","parent","prepend","tertiaryNav","elem","parentNode","accordionClick","thisExpanded","secondaryActiveEl","variant","tertiaryHeight","contentRect","buildAccordion","triggers","wrapper","trim","analyticsValue","wrappers","sectionObj","buildSectionElements","topAnchors","nodeName","isActive","landing","landingHtml","landingHref","landingOverview","landingPageLinkAddText","landingOverviewListItem","stickyScroll","mobileSticky","desktopSticky","scrollY","setStickyScrolling","activeScrollRemove"],"sourceRoot":""}