{"version":3,"file":"812.min.js?t=1752130882922","mappings":"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","sources":["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","webpack://@hero-digital/masonite/./src/js/utilities/accordion.js","webpack://@hero-digital/masonite/./src/js/utilities/tokenReplace.js"],"sourcesContent":["import {\n\tactionOnClickOutside,\n\tlimitKeyboardAccessibility\n} from '../../../js/utilities/utilities'\nimport Pristine from 'pristinejs'\nimport Analytics from 'services/Analytics/Analytics'\n\n/**\n * Site Search Component that handles the search functionality\n */\nexport default class SiteSearch {\n\tstatic SELECTORS = {\n\t\tFORM_DESKTOP: '[data-cmp-hook=\"header-search-form\"]',\n\t\tINPUT_DESKTOP: '[data-cmp-hook=\"header-search\"]',\n\t\tFORM_MOBILE_CONTAINER: '[data-cmp-hook=\"header-form-mobile-container\"]',\n\t\tFORM_MOBILE: '[data-cmp-hook=\"header-nav-search-form\"]',\n\t\tINPUT_MOBILE: '[data-cmp-hook=\"header-nav-search\"]'\n\t}\n\n\tstatic CLASSES = {\n\t\tMOBILE_FORM_ERROR: 'module-header-nav-search__form--error',\n\t\tFORM_ERROR: 'fdn-input__error',\n\t\tINPUT_ERROR: 'fdn-input__error-container',\n\t\tFORM_DESKTOP: 'module-header-search__form',\n\t\tINPUT_CONTAINER_DESKTOP: 'module-header-search__input',\n\t\tFORM_MOBILE: 'module-header-nav-search__form',\n\t\tINPUT_CONTAINER_MOBILE: 'module-header-nav-search__form-group'\n\t}\n\n\tstatic NAMES = {\n\t\tDESKTOP_SEARCH: 'searchinput',\n\t\tMOBILE_SEARCH: 'search'\n\t}\n\n\t/**\n\t * @param {*} element - the element to attach the component to\n\t * @param {Object} config - configuration object\n\t * @param {HTMLElement} config.headerElement - the header element\n\t * @param {Function} config.onOpenSearch - callback function to run when search is opened\n\t */\n\tconstructor(element, { headerElement, onOpenSearch }) {\n\t\tthis.element = element\n\t\tthis.analyticsService = Analytics.getInstance()\n\t\tthis.header = headerElement\n\t\tthis.onOpenSearch = onOpenSearch\n\n\t\tthis.init()\n\t}\n\n\tinit() {\n\t\tthis.cacheDom()\n\t\tthis.attachEvents()\n\t\tthis.setupSearch()\n\t}\n\n\t/**\n\t * Cache the dom refs needed for the component\n\t */\n\tcacheDom() {\n\t\tthis.desktopForm = this.header.querySelector(\n\t\t\tSiteSearch.SELECTORS.FORM_DESKTOP\n\t\t)\n\t\tthis.inputDesktop = this.header.querySelector(\n\t\t\tSiteSearch.SELECTORS.INPUT_DESKTOP\n\t\t)\n\t\tthis.mobileFormContainer = this.header.querySelector(\n\t\t\tSiteSearch.SELECTORS.FORM_MOBILE_CONTAINER\n\t\t)\n\t\tthis.mobileForm = this.header.querySelector(\n\t\t\tSiteSearch.SELECTORS.FORM_MOBILE\n\t\t)\n\t\tthis.inputMobile = this.header.querySelector(\n\t\t\tSiteSearch.SELECTORS.INPUT_MOBILE\n\t\t)\n\t\tthis.clearButton = this.header.querySelector(\n\t\t\tSiteSearch.SELECTORS.CLEAR_BUTTON\n\t\t)\n\t}\n\n\t/**\n\t * Attach event listeners for the component\n\t */\n\tattachEvents() {\n\t\tif (this.desktopForm) {\n\t\t\tthis.desktopForm.addEventListener('submit', this.addValidation)\n\t\t}\n\t\tif (this.mobileForm) {\n\t\t\tthis.mobileForm.addEventListener('submit', this.addValidation)\n\t\t\tthis.mobileForm.addEventListener('search', this.addMobileError)\n\t\t\tthis.inputMobile.addEventListener('input', this.clearMobileError)\n\t\t}\n\t}\n\n\t/**\n\t * Detach event listeners for the component\n\t */\n\tdetachEvents() {\n\t\tif (this.desktopForm) {\n\t\t\tthis.desktopForm.removeEventListener('submit', this.addValidation)\n\t\t}\n\t\tif (this.mobileForm) {\n\t\t\tthis.mobileForm.removeEventListener('submit', this.addValidation)\n\t\t\tthis.mobileForm.removeEventListener('search', this.addMobileError)\n\t\t\tthis.inputMobile.removeEventListener('input', this.clearMobileError)\n\t\t}\n\t}\n\n\t/**\n\t * Destroy the component\n\t */\n\tdestroy() {\n\t\tthis.detachEvents()\n\t\tthis.pristine.destroy()\n\t}\n\n\t// open search\n\topenSearch() {\n\t\t// special actions for desktop\n\t\tif (this.search.triggerEnv === 'desktop') {\n\t\t\t// because we are not passing on mouse click we need to manually make sure any open nav menu is closed\n\t\t\tif (typeof this.onOpenSearch === 'function') {\n\t\t\t\tthis.onOpenSearch()\n\t\t\t}\n\t\t\t// no body scrolling\n\t\t\tdocument.body.classList.add('no-scroll')\n\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","import Services from 'services'\n\n/* ACCESSIBLE ACCORDION COMPONENT\n Code modified taken from here: https://codepen.io/stowball/pen/eZKwRv\n Options (add to parent element that has class \"accordion-interface\"):\n Multiselect: aria-multiselectable=\"true\"\n Always expand first item: data-firstexpanded=\"true\"\n To have selected panel(s) expanded at start use data-open-panels attribute with panel numbers separated by commas.\n Example: data-open-panels=\"1,2\"\n To keep panels always open at tablet breakpoints and above add to class list: accordion-interface__open-panels__md\n and for desktop only: accordion-interface__open-panels__lg\n*/\n\nfunction AccordionWidget(el, props = {}) {\n\tif (!el) return\n\tthis.el = el\n\tthis.services = Services.getInstance()\n\tthis.EventEmitterService = this.services.EventEmitterService\n\n\tlet triggerClass = 'js-accordion-trigger'\n\tlet panelClass = 'js-accordion-panel'\n\tif (props.id) {\n\t\ttriggerClass += props.id\n\t\tpanelClass += props.id\n\t}\n\tconst expandFirst = el.dataset.firstexpanded === 'true'\n\tthis.multiSelectable = this.el.hasAttribute('aria-multiselectable')\n\n\tlet selectedIndex\n\tif (Number.isInteger(props.selectedIndex))\n\t\tselectedIndex = props.selectedIndex\n\telse if (expandFirst) selectedIndex = 0\n\n\tthis.accordionTriggers = this.el.getElementsByClassName(triggerClass)\n\tthis.accordionPanels = this.el.getElementsByClassName(panelClass)\n\n\tthis.observer = new ResizeObserver((entries) => {\n\t\tentries.forEach((entry) => {\n\t\t\tif (!entry.borderBoxSize) return\n\t\t\tconst { blockSize: height } = entry.borderBoxSize[0]\n\t\t\tentry.target\n\t\t\t\t.closest('.js-accordion-panel')\n\t\t\t\t.style.setProperty('--height', `${height}px`)\n\t\t})\n\t})\n\n\tif (\n\t\tthis.accordionTriggers.length === 0 ||\n\t\tthis.accordionTriggers.length !== this.accordionPanels.length\n\t) {\n\t\treturn\n\t}\n\n\t// if we do not already have a selected index see if we have the open panels attribute\n\tif (selectedIndex === undefined && el.dataset.openPanels) {\n\t\tlet openPanels = el.dataset.openPanels\n\t\topenPanels = openPanels.split(',')\n\t\tconst panelArr = []\n\t\tfor (const panel of openPanels) {\n\t\t\tconst n = parseInt(panel)\n\t\t\t// quick test to make sure we have a positive value\n\t\t\tif ((n | 0) > 0 && n % 1 === 0 && n <= this.accordionTriggers.length) {\n\t\t\t\tpanelArr.push(n - 1)\n\t\t\t\t// if this is not multiselectable then stop after first validated value\n\t\t\t\tif (!this.multiSelectable) break\n\t\t\t}\n\t\t}\n\t\tif (panelArr.length) selectedIndex = panelArr\n\t}\n\n\tthis._init(selectedIndex)\n}\n\nAccordionWidget.prototype._init = function (selectedIndex) {\n\tthis.accordionTriggersLength = this.accordionTriggers.length\n\tthis.expandedAccordions = new Array(this.accordionTriggersLength)\n\tthis.clickListener = this._clickEvent.bind(this)\n\tthis.keydownListener = this._keydownEvent.bind(this)\n\tthis.focusListener = this._focusEvent.bind(this)\n\tthis.keys = {\n\t\tprev: 38,\n\t\tnext: 40,\n\t\tspace: 32\n\t}\n\n\tlet initialSelectedIndex\n\n\tfor (let i = 0; i < this.accordionTriggersLength; i++) {\n\t\tthis.accordionTriggers[i].index = i\n\t\tthis.accordionTriggers[i].addEventListener(\n\t\t\t'click',\n\t\t\tthis.clickListener,\n\t\t\tfalse\n\t\t)\n\t\tthis.accordionTriggers[i].addEventListener(\n\t\t\t'keydown',\n\t\t\tthis.keydownListener,\n\t\t\tfalse\n\t\t)\n\t\tthis.accordionTriggers[i].addEventListener(\n\t\t\t'focus',\n\t\t\tthis.focusListener,\n\t\t\tfalse\n\t\t)\n\t\tthis.accordionTriggers[i].classList.add('is-accordion-trigger')\n\n\t\tif (this.accordionTriggers[i].classList.contains('is-selected')) {\n\t\t\tthis.expandedAccordions[i] = true\n\t\t}\n\t}\n\n\tfor (let i = 0; i < this.accordionPanels.length; i++) {\n\t\tthis.accordionPanels[i].classList.add('is-accordion-panel')\n\n\t\tif (\n\t\t\tthis.accordionPanels[i].querySelector('.accordion-panel__inner') !==\n\t\t\tnull\n\t\t) {\n\t\t\tconst el = this.accordionPanels[i].querySelector(\n\t\t\t\t'.accordion-panel__inner'\n\t\t\t)\n\t\t\tthis.observer.observe(el)\n\t\t}\n\t}\n\n\t// determine which panels need to be open\n\tif (!isNaN(selectedIndex)) {\n\t\tinitialSelectedIndex = selectedIndex\n\t\tthis.expandedAccordions = new Array(this.accordionTriggersLength)\n\t\tthis.expandedAccordions[initialSelectedIndex] = true\n\t} else if (Array.isArray(selectedIndex)) {\n\t\tinitialSelectedIndex = selectedIndex\n\t\tthis.expandedAccordions = new Array(this.accordionTriggersLength)\n\t\tfor (let i = 0; i < this.accordionTriggersLength; i++) {\n\t\t\tif (selectedIndex.includes(i)) this.expandedAccordions[i] = true\n\t\t}\n\t} else {\n\t\tinitialSelectedIndex = this.expandedAccordions.lastIndexOf(true)\n\n\t\tif (!this.multiSelectable) {\n\t\t\tthis.expandedAccordions = new Array(this.accordionTriggersLength)\n\t\t\tthis.expandedAccordions[initialSelectedIndex] = true\n\t\t}\n\t}\n\n\tthis.initialSetIndex = selectedIndex\n\tthis.setSelected(initialSelectedIndex)\n\tthis.setExpanded()\n\tthis.setAPI()\n\tthis.el.classList.add('is-accordion')\n\tthis.el.classList.add('is-initialized')\n}\n\nAccordionWidget.prototype._clickEvent = function (e) {\n\te.preventDefault()\n\tthis.setSelected(e.target.index, true)\n\tthis.setExpanded(e.target.index, true)\n}\n\nAccordionWidget.prototype._keydownEvent = function (e) {\n\tlet targetIndex\n\n\tswitch (e.keyCode) {\n\t\tcase this.keys.space:\n\t\tcase this.keys.prev:\n\t\tcase this.keys.next:\n\t\t\te.preventDefault()\n\t\t\tbreak\n\t\tdefault:\n\t\t\treturn\n\t}\n\n\tif (e.keyCode === this.keys.space) {\n\t\t// this.setExpanded(e.target.index, true);\n\t\te.target.click()\n\n\t\treturn\n\t} else if (e.keyCode === this.keys.prev && e.target.index > 0) {\n\t\ttargetIndex = e.target.index - 1\n\t} else if (\n\t\te.keyCode === this.keys.next &&\n\t\te.target.index < this.accordionTriggersLength - 1\n\t) {\n\t\ttargetIndex = e.target.index + 1\n\t} else {\n\t\treturn\n\t}\n\n\tthis.setSelected(targetIndex, true)\n}\n\nAccordionWidget.prototype._focusEvent = function () {\n\tif (this.accordionTriggersLength === 1) {\n\t\tthis.setSelected(0)\n\t}\n}\n\nAccordionWidget.prototype.setSelected = function (index, userInvoked) {\n\tif (index === -1) {\n\t\tthis.accordionTriggers[0].setAttribute('tabindex', 0)\n\n\t\treturn\n\t}\n\n\tif (Array.isArray(index)) index = index[0]\n\tfor (let i = 0; i < this.accordionTriggersLength; i++) {\n\t\tif (i === index) {\n\t\t\tthis.accordionTriggers[i].classList.add('is-selected')\n\t\t\tthis.accordionTriggers[i].setAttribute('aria-selected', true)\n\t\t\t// this.accordionTriggers[i].setAttribute('tabindex', 0);\n\n\t\t\tif (userInvoked) {\n\t\t\t\tthis.accordionTriggers[i].focus()\n\t\t\t}\n\t\t} else {\n\t\t\tthis.accordionTriggers[i].classList.remove('is-selected')\n\t\t\tthis.accordionTriggers[i].setAttribute('aria-selected', false)\n\n\t\t\t// this.accordionTriggers[i].setAttribute('tabindex', -1);\n\t\t}\n\t}\n}\n\nAccordionWidget.prototype.setExpanded = function (index, userInvoked) {\n\tlet i\n\n\t// special case to close all\n\tif (index === -1) this.expandedAccordions = []\n\n\tif (userInvoked) {\n\t\tif (this.multiSelectable) {\n\t\t\tthis.expandedAccordions[index] = !this.expandedAccordions[index]\n\t\t} else {\n\t\t\tfor (i = 0; i < this.accordionTriggersLength; i++) {\n\t\t\t\tif (i === index) {\n\t\t\t\t\tthis.expandedAccordions[i] = !this.expandedAccordions[i]\n\t\t\t\t} else {\n\t\t\t\t\tthis.expandedAccordions[i] = false\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Emit event for the clicked accordion panel\n\t\tconst accordionTitle = this.accordionTriggers[index]?.innerText\n\t\tconst status = this.expandedAccordions[index] ? 'open' : 'close'\n\n\t\tthis.EventEmitterService.emit('accordion', {\n\t\t\taccordionElement: this.el,\n\t\t\taccordionTitle,\n\t\t\tstatus\n\t\t})\n\t}\n\n\tlet hasExpanded = false\n\tfor (i = 0; i < this.accordionTriggersLength; i++) {\n\t\tif (this.expandedAccordions[i]) {\n\t\t\tthis.accordionTriggers[i].setAttribute('aria-expanded', true)\n\t\t\tthis.accordionTriggers[i].classList.add('is-expanded')\n\n\t\t\tthis.accordionPanels[i].setAttribute('aria-hidden', false)\n\t\t\tthis.accordionPanels[i].classList.add('is-open')\n\n\t\t\tthis.accordionTriggers[i].parentElement.classList.add('is-active')\n\t\t\t// this.accordionPanels[i].setAttribute('tabindex', 0);\n\n\t\t\thasExpanded = true\n\t\t} else {\n\t\t\tthis.accordionTriggers[i].setAttribute('aria-expanded', false)\n\t\t\tthis.accordionTriggers[i].classList.remove('is-expanded')\n\n\t\t\tthis.accordionPanels[i].setAttribute('aria-hidden', true)\n\t\t\tthis.accordionPanels[i].classList.remove('is-open')\n\n\t\t\tthis.accordionTriggers[i].parentElement.classList.remove('is-active')\n\t\t\t// this.accordionPanels[i].setAttribute('tabindex', -1);\n\t\t}\n\t}\n\n\t// add close to parent to indicate there is an open element\n\tif (hasExpanded) this.el.classList.add('has-expanded-el')\n\telse this.el.classList.remove('has-expanded-el')\n\tthis.hasExpanded = hasExpanded\n}\n\nAccordionWidget.prototype.setAPI = function () {\n\t// add API functionality here\n\tthis.close = function () {\n\t\tthis.setSelected(-1)\n\t\tthis.setExpanded(-1)\n\t}\n\t// open initial index\n\tthis.openInit = function () {\n\t\tconst index = this.initialSetIndex\n\t\tif (Number.isInteger(index)) {\n\t\t\tthis.setSelected(index, true)\n\t\t\tthis.setExpanded(index, true)\n\t\t}\n\t}\n}\n\nAccordionWidget.prototype.destroy = function () {\n\tthis.el.classList.remove('is-initialized')\n\n\tfor (let i = 0; i < this.accordionTriggersLength; i++) {\n\t\tthis.accordionTriggers[i].removeAttribute('aria-expanded')\n\t\tthis.accordionTriggers[i].removeAttribute('aria-selected')\n\t\tthis.accordionTriggers[i].classList.remove('is-expanded')\n\n\t\tthis.accordionPanels[i].removeAttribute('aria-hidden')\n\t\tthis.accordionPanels[i].classList.remove('is-open')\n\t\tthis.accordionPanels[i].removeAttribute('tabindex')\n\n\t\tthis.accordionTriggers[i].removeEventListener(\n\t\t\t'click',\n\t\t\tthis.clickListener,\n\t\t\tfalse\n\t\t)\n\t\tthis.accordionTriggers[i].removeEventListener(\n\t\t\t'keydown',\n\t\t\tthis.keydownListener,\n\t\t\tfalse\n\t\t)\n\t\tthis.accordionTriggers[i].removeEventListener(\n\t\t\t'focus',\n\t\t\tthis.focusListener,\n\t\t\tfalse\n\t\t)\n\n\t\tif (\n\t\t\tthis.accordionPanels[i].querySelector('.accordion-panel__inner') !==\n\t\t\tnull\n\t\t) {\n\t\t\tconst el = this.accordionPanels[i].querySelector(\n\t\t\t\t'.accordion-panel__inner'\n\t\t\t)\n\t\t\tthis.observer.unobserve(el)\n\t\t}\n\n\t\tdelete this.accordionTriggers[i].index\n\t}\n}\n\nexport { AccordionWidget }\n","/**\n * @method stringReplace\n * @memberof replace\n * @description Replace string with replacements using regex to match. String.prototype.replace\n * accepts a recursive function as second parameter. In this case, the replacer function performs\n * an Array.prototype.shift on the replacements that are passed in.\n * @param {String} str - Input string to perform replace operation on\n * @param {RegExp} regex - Regex to use for search\n * @param {Array} replacements - Array of values that will be used to replace, for each instance\n * of regex match found\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter\n * @return {string} A string with replaced values\n * @example stringReplace('Directions to {0}, {1}, {2}', /\\{\\d\\}/ig, ['123 Main St', 'New York, NY', '10001'])\n */\nexport function stringReplace(str, regex, replacements) {\n\tif (typeof str !== 'string') {\n\t\tthrow TypeError('Input is not of type string')\n\t}\n\tif (str.match(regex) && replacements.length !== str.match(regex).length) {\n\t\tthrow Error('Not enough replacement values')\n\t}\n\n\tconst replacerFn = () => replacements.shift()\n\treturn str.replace(regex, replacerFn)\n}\n\n/**\n * Replace tokens in a string with the given replacements.\n * Tokens are in the format of {0}, {1}, etc.\n * - If replacements is an array, the tokens will be replaced in order\n * - If replacements is an object, the tokens will be replaced by key\n * - If replacements is not an array or object, the string will be returned as is\n * @param {String} str The string to replace tokens in\n * @param {Object|Array} replacements The replacements to use\n * @returns\n */\nexport function tokenReplace(str, replacements) {\n\tif (Array.isArray(replacements)) {\n\t\treturn replacements.reduce(\n\t\t\t(prev, replacement, index) =>\n\t\t\t\tstringReplace(prev, new RegExp(`\\\\{${index}\\\\}`, 'g'), [\n\t\t\t\t\treplacement\n\t\t\t\t]),\n\t\t\tstr\n\t\t)\n\t} else if (typeof replacements === 'object') {\n\t\treturn Object.keys(replacements).reduce(\n\t\t\t(prev, replacementKey) =>\n\t\t\t\tstringReplace(prev, new RegExp(`\\\\{${replacementKey}\\\\}`, 'g'), [\n\t\t\t\t\treplacements[replacementKey]\n\t\t\t\t]),\n\t\t\tstr\n\t\t)\n\t}\n\n\treturn str\n}\n"],"names":["SiteSearch","static","FORM_DESKTOP","INPUT_DESKTOP","FORM_MOBILE_CONTAINER","FORM_MOBILE","INPUT_MOBILE","MOBILE_FORM_ERROR","FORM_ERROR","INPUT_ERROR","INPUT_CONTAINER_DESKTOP","INPUT_CONTAINER_MOBILE","DESKTOP_SEARCH","MOBILE_SEARCH","constructor","element","_ref","headerElement","onOpenSearch","this","analyticsService","Analytics","getInstance","header","init","cacheDom","attachEvents","setupSearch","desktopForm","querySelector","SELECTORS","inputDesktop","mobileFormContainer","mobileForm","inputMobile","clearButton","CLEAR_BUTTON","addEventListener","addValidation","addMobileError","clearMobileError","detachEvents","removeEventListener","destroy","pristine","openSearch","search","triggerEnv","document","body","classList","add","requestAnimationFrame","setTimeout","inputEl","getElementById","focus","actionOnClickOutside","obj","closeSearch","ignoreClickListener","setAttribute","trigger","limitKeyboardAccessibility","ignoreKeyboardHandler","disableKeyHandler","active","params","top","style","minHeight","remove","clearListener","input","value","blur","clearKeyHandler","clearErrors","suggestionsTitle","e","stopPropagation","event","preventDefault","form","target","targetForm","dataset","breakpoint","config","live","classTo","CLASSES","errorTextParent","errorClass","errorTextClass","errorTextTag","Pristine","validate","trackInteraction","submit","reset","searchTerm","search_term","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","height","overflowY","total","querySelectorAll","forEach","el","offsetHeight","hdr","saytWrapper","onResizeBp","async","resp","fetch","encodeURIComponent","ok","Error","status","data","json","Array","isArray","map","s","__uuid","crypto","randomUUID","err","console","message","fetchResults","tid","onResize","useLayoutEffect","ro","ResizeObserver","observe","disconnect","renderItem","item","idx","key","searchResultType","name","action","method","htmlFor","id","type","placeholder","onChange","background","speed","loop","autoplay","color","length","ref","sec","caption","results","viewAllText","allResultsUrl","noResultsFound","propTypes","PropTypes","isRequired","Header","COMPONENT","STICKY_WRAPPER","SITE_SEARCH","FAVORITES","FAVORITES_LABEL","FAVORITES_ICON","HIDDEN","ACTIVE","SAVE_FAVORITE","REMOVE_FAVORITE","setupFullWidthSections","setupAlertBannerObservation","services","Services","match","myObserver","ScrollService","ResizeService","EventEmitterService","mqContext","createSiteSearch","updateFavorites","makeSticky","toggle","mainNav","alertBanners","menuContainer","tertiaryNavs","stickyWrapper","mobileActiveClass","mobileScrollEl","siteSearchEl","favoritesCountEl","favoritesCountLabel","favoritesIcon","saytContainer","mobilePlaceholder","overlayContainer","searchTrigger","ReactDOM","render","width","appendChild","constrainedWidth","getBoundingClientRect","fullWidth","scrollbarWidth","Math","ceil","setProperty","removeChild","observer","MutationObserver","mutationsList","mutation","attributeName","contains","calculateMenuHeight","dispatchEvent","Event","attributes","childList","subtree","toggleState","on","EVENTS","closeoutNav","removeEvents","off","_","mediaQuery","matchMedia","moveSayt","mediaQueryChange","mq","matches","addSubNavFunctionality","cleanupObserver","obs","panel","closeSearchOverlay","oc","siteSearch","collapsePrimary","bind","innerText","label","favorites","localStorage","getItem","JSON","parse","tokenReplace","favoritesCount","openInit","navRef","primary","close","collapseAllSections","collapseExpandedSubsections","collapseExpandedSections","node","section","hasExpanded","subsections","subnode","subsection","clearDesktopKeyHandler","openDesktopMenu","menuExpanded","removeDesktopMenuResizeAction","addCallback","isWidthChanged","openDesktopFirstSecondaryMenu","parentElement","click","closeDesktopMenu","totalHeight","banner","nav","removeAttribute","setHeaderHeight","mobileMenuInit","levelArr","mobileMenu","panels","activeAccordionTriggers","levelHeights","level","backBtn","innerHTML","mobileMenuBack","append","mobileMenuInitialized","openMobileMenu","menulevel","scrollTop","mobileMenuActive","closeMobileMenu","removeMobileMenuResizeAction","enableBodyScroll","removeProperty","group","animateMobileMenu","resetMenu","isBack","resetSize","subPages","prepMobileMenu","parent","prepend","tertiaryNav","elem","parentNode","accordionClick","thisExpanded","secondaryActiveEl","variant","closest","entries","entry","tertiaryHeight","contentRect","buildAccordion","triggers","wrapper","selectedIndex","arguments","undefined","replace","trim","analyticsValue","AccordionWidget","i","wrappers","sectionObj","buildSectionElements","topAnchors","nodeName","isActive","landing","landingHtml","landingHref","landingOverview","landingPageLinkAddText","landingOverviewListItem","stickyScroll","mobileSticky","desktopSticky","scrollY","setStickyScrolling","activeScrollRemove","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","clickListener","_clickEvent","keydownListener","_keydownEvent","focusListener","_focusEvent","keys","prev","next","space","index","isNaN","includes","lastIndexOf","initialSetIndex","setSelected","setExpanded","setAPI","targetIndex","keyCode","userInvoked","accordionTitle","emit","accordionElement","unobserve","stringReplace","str","regex","replacements","TypeError","replacerFn","shift","reduce","replacement","RegExp","Object","replacementKey"],"sourceRoot":""}