{"version":3,"file":"Assets/MHC/js/main.min.js","mappings":"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","sources":["webpack://kb-baseline-frontend/./src/assets/js/utility.js","webpack://kb-baseline-frontend/./src/assets/js/main.js","webpack://kb-baseline-frontend/./src/simple/accordion-item/accordion-item.js","webpack://kb-baseline-frontend/./src/base/02-content/content.js","webpack://kb-baseline-frontend/./src/dynamic/facets-list/facets-list.js","webpack://kb-baseline-frontend/./src/section/header/header.js","webpack://kb-baseline-frontend/./src/dynamic/nav/nav.js","webpack://kb-baseline-frontend/./src/base/02-content/responsiveTable.js","webpack://kb-baseline-frontend/./src/simple/searchbox/searchbox.js","webpack://kb-baseline-frontend/./src/dynamic/tabbed-content/tabbed-content.js"],"sourcesContent":["/* CLASS MANIPULATIONS */\r\n\r\n/**\r\n * @param {Element} el\r\n * @param {string} cssClass\r\n * @returns success or failure\r\n */\r\nexport const addClass = (el, cssClass) => {\r\n if (!el.classList.contains(cssClass)) {\r\n el.classList.add(cssClass);\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n * @param {Element} el\r\n * @param {string} cssClass\r\n * @returns success or failure\r\n */\r\nexport const removeClass = (el, cssClass) => {\r\n if (el.classList.contains(cssClass)) {\r\n el.classList.remove(cssClass);\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n * Toggles class for an element node by utilizing other utility functions\r\n * @param {Element} el\r\n * @param {string} cssClass\r\n * @calls addClass || removeClass\r\n */\r\nexport const toggleClass = (el, cssClass) => {\r\n addClass(el, cssClass) || removeClass(el, cssClass);\r\n};\r\n\r\n/**\r\n * Toggles multiple classes for a single element node\r\n * @param {Element} el\r\n * @param {array} classList - list of strings\r\n * @calls addClass || removeClass\r\n */\r\nexport const toggleClasses = (el, classList) => {\r\n for (let c = 0; c < classList.length; c++) {\r\n addClass(el, classList[c]) || removeClass(el, classList[c]);\r\n }\r\n};\r\n\r\n/**\r\n * @param {Element} el - element to be wrapped\r\n * @param {Element} wrapper - wrapper node to be created to wrap around el\r\n * @param {string} wrapperClass - class(es) to add to the wrapper\r\n */\r\nexport const wrapElement = (el, wrapper, wrapperClass) => {\r\n el.parentNode.insertBefore(wrapper, el);\r\n wrapper.appendChild(el);\r\n addClass(wrapper, wrapperClass);\r\n};\r\n\r\n/**\r\n * Toggles a binary attribute of an element node\r\n * @param {Element} el\r\n * @param {string} attr - name of element's attribute to target\r\n * @returns success or failure\r\n */\r\nexport const toggleAttribute = (el, attr) => {\r\n let currentValue = el.getAttribute(attr);\r\n\r\n if (currentValue == 'true') {\r\n el.setAttribute(attr, 'false');\r\n return true;\r\n } else if (currentValue == 'false') {\r\n el.setAttribute(attr, 'true');\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n * Creates a dynamically sized slide up/down effect for toggleable content.\r\n * Does not control open/close class to simplify cases with children focus keeping state open\r\n * @param {event} e - dom event that triggered for scope\r\n * @param {string} parentContainer - identifier for the parent container. (Eg: '.class')\r\n * @param {string} toggleContent - identifier for the content container to animate\r\n * @param {string} cssClass - class to look for whether container is open/closed. Default is 'is-open'\r\n */\r\nexport const slideDownTogglableSection = (\r\n e,\r\n parentContainer,\r\n toggleContent,\r\n cssClass = 'is-open'\r\n) => {\r\n // get parent toggle-section to locate content & apply/remove open class\r\n let sectionContainer = e.target.closest(parentContainer);\r\n if (!sectionContainer) {\r\n return;\r\n }\r\n\r\n let contentContainer = sectionContainer.querySelector(toggleContent);\r\n if (!contentContainer) {\r\n return;\r\n }\r\n\r\n let startHeight = contentContainer.scrollHeight;\r\n\r\n if (sectionContainer.classList.contains(cssClass)) {\r\n // store transition for animation later\r\n var transitions = contentContainer.style.transition;\r\n contentContainer.style.transition = '';\r\n contentContainer.style.maxHeight = startHeight + 'px';\r\n\r\n // on next animation frame explicitly set height to its current pixel height,\r\n // to avoid transitioning out of 'auto'\r\n window.requestAnimationFrame(function () {\r\n contentContainer.style.transition = transitions;\r\n\r\n window.requestAnimationFrame(function () {\r\n contentContainer.style.maxHeight = 0 + 'px';\r\n contentContainer.style.removeProperty('max-height');\r\n });\r\n });\r\n } else {\r\n // expand\r\n contentContainer.style.maxHeight = startHeight + 'px';\r\n }\r\n};\r\n","import AccordionItem from '../../simple/accordion-item/accordion-item';\r\nimport Searchbox from '../../simple/searchbox/searchbox';\r\nimport FacetsList from '../../dynamic/facets-list/facets-list';\r\nimport TabbedContent from '../../dynamic/tabbed-content/tabbed-content';\r\nimport Nav from '../../dynamic/nav/nav';\r\nimport Header from '../../section/header/header';\r\nimport Content from '../../base/02-content/content';\r\nimport ResponsiveTables from '../../base/02-content/responsiveTable';\r\n\r\n//global scope\r\n//used for multiple instances of the same component\r\nvar globalClasses = {};\r\nwindow.classes = globalClasses;\r\n\r\n//used for class to class interactions\r\nvar mainClasses = {\r\n AccordionItem,\r\n Content,\r\n FacetsList,\r\n Header,\r\n Nav,\r\n ResponsiveTables,\r\n Searchbox,\r\n TabbedContent,\r\n};\r\n\r\n//used for class to class interactions\r\nvar mainClassesInstances = {};\r\n\r\nfunction init() {\r\n for (const [key, value] of Object.entries(mainClasses)) {\r\n mainClassesInstances[key] = new value();\r\n }\r\n}\r\n\r\ndocument.addEventListener('DOMContentLoaded', init);\r\n\r\nexport default mainClasses;\r\n","import {\r\n toggleClass,\r\n toggleAttribute,\r\n slideDownTogglableSection,\r\n} from '../../assets/js/utility';\r\n\r\nclass AccordionItem {\r\n constructor() {\r\n this.toggleClass = 'is-open';\r\n this.accordionHeadings = document.querySelectorAll(\r\n '.simple-accordion-item .accordion-item-heading'\r\n );\r\n\r\n if (this.accordionHeadings) {\r\n this.accordionHeadings.forEach((heading) => {\r\n heading.addEventListener('click', (e) => {\r\n let accordionItem = e.target.closest('.simple-accordion-item');\r\n if (!accordionItem) {\r\n return;\r\n }\r\n\r\n slideDownTogglableSection(e, '.simple-accordion-item', '.content');\r\n toggleAttribute(heading, 'aria-expanded');\r\n toggleClass(accordionItem, this.toggleClass);\r\n });\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport default AccordionItem;\r\n","class Content {\r\n constructor() {\r\n this.linkedImages = document.querySelectorAll('a > img');\r\n\r\n if (this.linkedImages) {\r\n this.removeLinkBorder(this.linkedImages);\r\n }\r\n }\r\n\r\n /**\r\n * For all the images nested inside of an anchor tag on the page,\r\n * applies the 'no-decoration' class to the anchor element so that linked images\r\n * do not show any of the plain text link styling\r\n *\r\n * @param {nodeList} elementList\r\n */\r\n removeLinkBorder(elementList) {\r\n elementList.forEach((element) => {\r\n let parentLink = element.parentElement;\r\n\r\n if (!parentLink.classList.contains('no-decoration')) {\r\n parentLink.classList.add('no-decoration');\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default Content;\r\n","import {\r\n slideDownTogglableSection,\r\n toggleClass,\r\n addClass,\r\n removeClass,\r\n} from '../../assets/js/utility';\r\n\r\nclass FacetsList {\r\n constructor() {\r\n this.MOBILE_BREAKPOINT = 870;\r\n this.overflowClass = 'is-overflowing';\r\n\r\n this.groupContainers = document.querySelectorAll('.dynamic-facets-list .groups');\r\n this.toggleTriggers = document.querySelectorAll(\r\n '.dynamic-facets-list .group-heading'\r\n );\r\n this.mobileToggles = document.querySelectorAll(\r\n '.dynamic-facets-list .mobile-label'\r\n );\r\n\r\n if (this.toggleTriggers) {\r\n this.toggleTriggers.forEach((trigger) => {\r\n trigger.addEventListener('click', this.toggleGroup.bind(this));\r\n });\r\n }\r\n\r\n if (this.mobileToggles) {\r\n this.mobileToggles.forEach((toggle) => {\r\n toggle.addEventListener('click', this.toggleGroup.bind(this));\r\n });\r\n }\r\n\r\n if (this.groupContainers) {\r\n // check if tablist is overflowing after a window resize\r\n window.addEventListener('resize', () => {\r\n // apply overflow style if needed\r\n this.groupContainers.forEach((group) => this.checkOverflow(group));\r\n });\r\n }\r\n }\r\n\r\n checkOverflow(el) {\r\n let hasOverflow = el.clientHeight < el.scrollHeight;\r\n\r\n if (hasOverflow && window.innerWidth < this.MOBILE_BREAKPOINT) {\r\n addClass(el, this.overflowClass);\r\n } else {\r\n removeClass(el, this.overflowClass);\r\n }\r\n }\r\n\r\n toggleGroup(e) {\r\n e.preventDefault();\r\n let triggerElement = e.target;\r\n\r\n // on mobile do not want sliding while mimicking dropdown select\r\n if (window.innerWidth >= this.MOBILE_BREAKPOINT) {\r\n let toggledGroup = triggerElement.closest('.facet-group');\r\n\r\n if (triggerElement && toggledGroup) {\r\n slideDownTogglableSection(e, '.facet-group', '.facet-list');\r\n toggleClass(toggledGroup, 'is-open');\r\n }\r\n } else {\r\n let toggledContainer = triggerElement.closest('.dynamic-facets-list');\r\n\r\n // no animation\r\n if (toggledContainer) {\r\n toggleClass(toggledContainer, 'is-open');\r\n\r\n // apply overflow style if needed\r\n let groupContainer = toggledContainer.querySelector('.groups');\r\n\r\n if (groupContainer) {\r\n this.checkOverflow(groupContainer);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default FacetsList;\r\n","import {\r\n addClass,\r\n removeClass,\r\n toggleClass,\r\n toggleAttribute,\r\n} from '../../assets/js/utility';\r\n\r\nclass Header {\r\n constructor() {\r\n this.header = document.querySelector('.site-header');\r\n this.menuIcon = document.querySelector('#mobile-menu-icon');\r\n this.siteSearch = document.querySelector('.site-header .simple-searchbox');\r\n this.activeClass = 'is-active';\r\n\r\n this.cookieName = 'MHC_audience.activeType';\r\n this.cookieDefaultValue = 'GeneralAudience';\r\n this.audienceList = document.querySelector('.site-header .type-list');\r\n this.personalizedMenus = document.querySelectorAll(\r\n '.site-header .personalized-menu'\r\n );\r\n this.audienceOptionButtons = [];\r\n this.audienceOptionIds = []; // ids set by C# view based on cleaned button labels\r\n\r\n if (this.header) {\r\n if (this.siteSearch) {\r\n this.changeSearchboxVariant();\r\n\r\n window.addEventListener('resize', () => this.changeSearchboxVariant());\r\n }\r\n\r\n if (this.audienceList && this.personalizedMenus) {\r\n this.audienceOptionButtons = this.audienceList.querySelectorAll('button');\r\n\r\n if (this.audienceOptionButtons.length > 0) {\r\n this.audienceOptionButtons.forEach((option) => {\r\n // populate for quality checks\r\n this.audienceOptionIds.push(option.id);\r\n\r\n option.addEventListener('click', (e) => {\r\n this.setAudienceCookie(e.target.id);\r\n this.setActiveAudienceFocus(e.target);\r\n });\r\n });\r\n }\r\n\r\n // check if cookie exists already\r\n // if not, set to generic, else init labels\r\n let initCookie = this.readAudienceCookie();\r\n if (!initCookie || !this.audienceOptionIds.includes(initCookie)) {\r\n initCookie = this.cookieDefaultValue;\r\n this.setAudienceCookie(initCookie);\r\n }\r\n\r\n // get initial audience focus\r\n let initAudienceOption = this.audienceList.querySelector(`#${initCookie}`);\r\n this.setActiveAudienceFocus(initAudienceOption, false);\r\n }\r\n }\r\n\r\n if (this.menuIcon) {\r\n this.menuIcon.addEventListener('click', () => {\r\n toggleClass(this.menuIcon, 'is-open');\r\n toggleAttribute(this.menuIcon, 'aria-expanded');\r\n });\r\n\r\n // if a click made outside of the header area & menu open, close it\r\n document.querySelector('body').addEventListener('click', (e) => {\r\n if (\r\n this.menuIcon.classList.contains('is-open') &&\r\n !this.header.contains(e.target)\r\n ) {\r\n removeClass(this.menuIcon, 'is-open');\r\n toggleAttribute(this.menuIcon, 'aria-expanded');\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * adds or removes the compact variant class from the searchbox\r\n * depending on the window size for switching between mobile & not\r\n */\r\n changeSearchboxVariant() {\r\n const MOBILE_BREAKPOINT = 1235; // should match scss breakpoint\r\n\r\n if (window.innerWidth <= MOBILE_BREAKPOINT) {\r\n removeClass(this.siteSearch, 'compact');\r\n } else {\r\n addClass(this.siteSearch, 'compact');\r\n }\r\n }\r\n\r\n /**\r\n * Sets all audience focus labels and states\r\n * @param {event} e - click event on button\r\n * @param {boolean} animate - set false if menu should not open on this call\r\n */\r\n setActiveAudienceFocus(el, animate = true) {\r\n // remove all previously pressed buttons then set new target\r\n this.audienceOptionButtons.forEach((option) => {\r\n let wrapperItem = option.closest('.audience-option');\r\n\r\n if (option === el) {\r\n addClass(wrapperItem, this.activeClass);\r\n option.setAttribute('aria-pressed', 'true');\r\n } else {\r\n removeClass(wrapperItem, this.activeClass);\r\n option.setAttribute('aria-pressed', 'false');\r\n }\r\n });\r\n\r\n // update labels\r\n let audienceNavItem = el.closest('li.focus-audience');\r\n let focusNavLinks = audienceNavItem.querySelectorAll('.drop-row .nav-link');\r\n let activeCookie = this.readAudienceCookie();\r\n\r\n if (audienceNavItem) {\r\n // remove previous active & set new active\r\n focusNavLinks.forEach((link) => {\r\n if (link.id.includes(activeCookie)) {\r\n addClass(link, this.activeClass);\r\n } else {\r\n removeClass(link, this.activeClass);\r\n }\r\n });\r\n\r\n let activePersonalizedLabel = audienceNavItem.querySelector(\r\n '.personalized-audience'\r\n );\r\n\r\n if (activePersonalizedLabel) {\r\n if (el.id === this.cookieDefaultValue) {\r\n activePersonalizedLabel.innerText = el.dataset.defaultPrompt;\r\n addClass(activePersonalizedLabel, 'is-default');\r\n } else {\r\n activePersonalizedLabel.innerText = el.innerText;\r\n removeClass(activePersonalizedLabel, 'is-default');\r\n }\r\n }\r\n\r\n // unset animated max-height for submenu changes\r\n if (animate) {\r\n let submenu = audienceNavItem.querySelector('.submenu');\r\n submenu.style.maxHeight = 'unset';\r\n }\r\n\r\n // open/close appropriate menus\r\n let activeButtonId = el.id;\r\n\r\n if (activeButtonId) {\r\n this.personalizedMenus.forEach((menu) => {\r\n if (`menuFor${activeButtonId}` === menu.id) {\r\n addClass(menu, 'is-open');\r\n menu.setAttribute('aria-hidden', false);\r\n } else {\r\n removeClass(menu, 'is-open');\r\n menu.setAttribute('aria-hidden', true);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sets the value of a cookie\r\n * @param {String} value - Value to set activeAudienceType cookie\r\n */\r\n setAudienceCookie(value) {\r\n const cookiePath = 'path=/;';\r\n const cookieAge = `max-age=${60 * 60 * 24 * 365};`;\r\n const cookieStrict = 'same-site=strict;';\r\n\r\n if (!value) {\r\n // assign non-specified/generic/undisclosed value\r\n value = this.cookieDefaultValue;\r\n }\r\n\r\n // create or update cookie value\r\n document.cookie = `${this.cookieName}=${value};${\r\n cookiePath + cookieAge + cookieStrict\r\n }`;\r\n }\r\n\r\n /**\r\n * Get the value of a cookie\r\n * Source: https://gist.github.com/wpsmith/6cf23551dd140fb72ae7\r\n * @return {String} - The activeAudienceType cookie value\r\n */\r\n readAudienceCookie() {\r\n let value = `; ${document.cookie}`;\r\n let parts = value.split(`; ${this.cookieName}=`);\r\n\r\n if (parts.length === 2) {\r\n return parts.pop().split(';').shift();\r\n }\r\n }\r\n}\r\nexport default Header;\r\n","import {\r\n addClass,\r\n toggleClass,\r\n slideDownTogglableSection,\r\n} from '../../assets/js/utility';\r\n\r\nclass Nav {\r\n constructor() {\r\n this.toggleClass = 'is-open';\r\n this.linksWithDropdown = document.querySelectorAll('.dynamic-nav .has-sublinks');\r\n this.activeLink = document.querySelector('.dynamic-nav .is-active');\r\n\r\n // set dropdown show/hide listener\r\n if (this.linksWithDropdown) {\r\n // for preventing duplicate event triggers\r\n let navActive = false;\r\n let allowArrowDownTrigger = false;\r\n\r\n for (let i = 0; i < this.linksWithDropdown.length; i++) {\r\n // mouse events\r\n this.linksWithDropdown[i].addEventListener('mouseenter', (e) => {\r\n if (navActive == false) {\r\n navActive = true;\r\n\r\n this.changeOpenState(e, this.linksWithDropdown[i], 'true');\r\n\r\n // in case triggered by an arrow down click\r\n // don't allow trigger from same event\r\n setTimeout(function () {\r\n allowArrowDownTrigger = true;\r\n }, 600);\r\n }\r\n });\r\n\r\n this.linksWithDropdown[i].addEventListener('mouseleave', (e) => {\r\n if (navActive == true) {\r\n navActive = false;\r\n this.changeOpenState(e, this.linksWithDropdown[i]);\r\n\r\n // prevent arrow click triggers until next mouseenter\r\n allowArrowDownTrigger = false;\r\n }\r\n });\r\n\r\n // keyboard events\r\n this.linksWithDropdown[i].addEventListener('focusin', (e) => {\r\n // stay open if focusing in submenu\r\n if (\r\n this.linksWithDropdown[i].contains(e.relatedTarget) ||\r\n navActive === true\r\n ) {\r\n return;\r\n }\r\n\r\n navActive = true;\r\n this.changeOpenState(e, this.linksWithDropdown[i], 'true');\r\n });\r\n\r\n this.linksWithDropdown[i].addEventListener('focusout', (e) => {\r\n // stay open if focusing in submenu\r\n if (\r\n this.linksWithDropdown[i].contains(e.relatedTarget) ||\r\n navActive === false\r\n ) {\r\n return;\r\n }\r\n\r\n navActive = false;\r\n this.changeOpenState(e, this.linksWithDropdown[i]);\r\n });\r\n\r\n // for mobile\r\n let downArrow = this.linksWithDropdown[i].querySelector('.arrow-down');\r\n\r\n if (downArrow) {\r\n downArrow.addEventListener('mousedown', (e) => {\r\n if (allowArrowDownTrigger == true) {\r\n // if not open, tell changeState to open it\r\n let openSubmenu =\r\n !this.linksWithDropdown[i].classList.contains('is-open');\r\n\r\n this.changeOpenState(\r\n e,\r\n this.linksWithDropdown[i],\r\n openSubmenu ? 'true' : 'false'\r\n );\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n // if dropdown item active, indicate on 1st level nav\r\n if (this.activeDropLink) {\r\n let parentItem = this.activeDropLink.closest('.has-sublinks');\r\n\r\n if (parentItem) {\r\n addClass(parentItem, 'is-active');\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Checks if submenu needs to be opened or not & sets the state if so\r\n * @param {Event} e - event trigger for animation\r\n * @param {Node Element} group - nav item (li) element\r\n * @param {string} makeExpanded - aria-expanded value to set\r\n * @param {string} toggleClass - class to toggle on the group element\r\n */\r\n changeOpenState(e, group, makeExpanded = 'false') {\r\n let linkElement = group.querySelector('.nav-link');\r\n let currentState = 'false';\r\n\r\n if (linkElement) {\r\n currentState = linkElement.getAttribute('aria-expanded');\r\n\r\n if (currentState != makeExpanded) {\r\n linkElement.setAttribute('aria-expanded', makeExpanded);\r\n\r\n // can't go outside if-statement cause must happen before class change\r\n slideDownTogglableSection(e, '.has-sublinks', '.submenu');\r\n toggleClass(group, this.toggleClass);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Nav;\r\n","import { wrapElement, addClass } from '../../assets/js/utility';\r\n\r\nclass ResponsiveTables {\r\n constructor() {\r\n // May want to tweak if any tables are used for non-data purposes in project\r\n this.tablesList = document.querySelectorAll('table');\r\n this.wrapperClass = 'table-wrapper';\r\n this.stackedClass = 'stacked-table';\r\n this.stickyHorizontalClass = 'sticky-left-col';\r\n this.stackedHeaderClass = 'stacked-table-header';\r\n this.cellHeadingClass = 'cell-heading';\r\n\r\n if (this.tablesList) {\r\n for (let i = 0; i < this.tablesList.length; i++) {\r\n const table = this.tablesList[i];\r\n\r\n // avoid double wrapping if wrapper already exists\r\n if (!table.parentElement.classList.contains(this.wrapperClass)) {\r\n // create & insert the wrapper element\r\n wrapElement(table, document.createElement('div'), this.wrapperClass);\r\n\r\n if (table.classList.contains(this.stickyHorizontalClass)) {\r\n this.setLabelColumn(table);\r\n } else {\r\n // add responsive class for styles if not already there\r\n addClass(table, this.stackedClass);\r\n this.setupStackedTable(table);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Assigns a set width for 1st column to remain visible on horizontal scroll with the wrapper shadow\r\n * properly set at its edge. Based on auto-fit size determined on load, or a hardset width if too big\r\n * @param {Element} el - table element node\r\n * @returns\r\n */\r\n setLabelColumn(el) {\r\n let width = 0;\r\n const largestLabelWidth = 190; // in px, keep small for mobile considerations\r\n const rows = el.querySelectorAll('tr');\r\n\r\n for (let i = 0; i < rows.length; i++) {\r\n const tdFirst = rows[i].querySelector('td'); // first column in row\r\n\r\n if (tdFirst) {\r\n // special case: check if only 2 columns. If so, unset absolute positioning\r\n if (rows[i].cells.length === 2 && tdFirst.getAttribute('colspan') === null) {\r\n for (let c = 0; c < rows.length; c++) {\r\n // unset sticky on all heading & content rows in the table\r\n rows[c].querySelector('th,td').style.position = 'relative';\r\n rows[c].querySelector('th,td').style.backgroundColor = '#fff0'; // adjust as needed for project\r\n }\r\n\r\n return;\r\n }\r\n\r\n // check column isn't spanning to avoid skewing normal columns\r\n if (tdFirst.getAttribute('colspan') == null) {\r\n // set the label column width as is, or cap at declared largest size if too big\r\n width =\r\n tdFirst.clientWidth <= largestLabelWidth\r\n ? tdFirst.clientWidth\r\n : largestLabelWidth;\r\n tdFirst.style.width = `${width + 1}px`; // account for sticky position -1 left\r\n\r\n // set wrapper shadow offset to match width of 1st column\r\n const wrapper = tdFirst.closest('.table-wrapper');\r\n wrapper.style.backgroundPosition = `${width}px center, right center, ${width}px center, right center`;\r\n\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Performs setup for table stacking on the given element\r\n * @param {Element} element Table element node\r\n */\r\n setupStackedTable(element) {\r\n // Don't setup the table when it's already been set up\r\n if (element.dataset.initialized == 'true') {\r\n return;\r\n }\r\n element.dataset.initiated = true;\r\n\r\n // Determine what the header should be\r\n // - thead, if applicable\r\n // - first tr of tbody, if no thead\r\n let header = element.querySelector('thead tr');\r\n if (!header) {\r\n header = element.querySelector('tr:first-child');\r\n\r\n // in cases of bad table markup where there is a 'ghost' still around\r\n // that has the table & tbody markup but nothing inside\r\n if (!header) {\r\n return;\r\n }\r\n\r\n addClass(header, this.stackedHeaderClass);\r\n }\r\n\r\n const headingCells = Array.from(header.querySelectorAll('th, td'));\r\n\r\n const rows = Array.from(\r\n element.querySelectorAll(`tbody tr:not(.${this.stackedHeaderClass}), tfoot tr`)\r\n );\r\n\r\n // Create template label elements for headings\r\n const headingLabels = headingCells.map((cell) => {\r\n const newElement = document.createElement('span');\r\n newElement.innerHTML = cell.innerHTML;\r\n newElement.classList.add(this.cellHeadingClass);\r\n\r\n return newElement;\r\n });\r\n\r\n // Apply new headings\r\n for (const row of rows) {\r\n const cells = Array.from(row.querySelectorAll('td, th'));\r\n\r\n for (let i = 0; i < cells.length; i++) {\r\n const heading = headingLabels[i].cloneNode(true);\r\n const cell = cells[i];\r\n\r\n cell.insertAdjacentElement('afterbegin', heading);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default ResponsiveTables;\r\n","import { removeClass, toggleClass } from '../../assets/js/utility';\r\n\r\nclass Searchbox {\r\n constructor() {\r\n this.activeClass = 'is-active';\r\n this.compactSearchboxes = document.querySelectorAll('.simple-searchbox.compact');\r\n\r\n if (this.compactSearchboxes) {\r\n this.compactSearchboxes.forEach((searchbox) => {\r\n let compactButton = searchbox.querySelector('.compact-button');\r\n let searchForm = searchbox.querySelector('form');\r\n\r\n if (compactButton && searchForm) {\r\n // show/hide form on button click\r\n compactButton.addEventListener('click', (e) => {\r\n let target = e.target.closest('.simple-searchbox');\r\n\r\n if (target) {\r\n toggleClass(target, this.activeClass);\r\n\r\n // automatically set focus on input\r\n window.setTimeout(function () { \r\n target.querySelector('.search-input').focus();\r\n }, 100);\r\n \r\n }\r\n });\r\n\r\n // hide form if out of focus\r\n searchForm.addEventListener('focusout', (e) => {\r\n // do not proceed if bubbled event triggered before\r\n // active element set that is still in the form\r\n // eg: submit button focused or clicked\r\n if (searchForm.contains(e.relatedTarget)) {\r\n return;\r\n }\r\n\r\n let searchContainer = e.target.closest('.simple-searchbox');\r\n\r\n if (searchContainer) {\r\n removeClass(searchContainer, this.activeClass);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport default Searchbox;\r\n","import {\r\n addClass,\r\n removeClass,\r\n slideDownTogglableSection,\r\n} from '../../assets/js/utility';\r\n\r\nclass TabbedContent {\r\n constructor() {\r\n this.tabbedContentContainerClass = '.dynamic-tabbed-content';\r\n this.tabLists = document.querySelectorAll(\r\n `${this.tabbedContentContainerClass} .tablist`\r\n );\r\n\r\n this.activeClass = 'is-active';\r\n this.overflowClass = 'is-overflowing';\r\n this.pageHash = '';\r\n\r\n // all # links on the page to be filtered down by relevant tabs\r\n this.relevantLinkHashes = [];\r\n this.hashAnchorElements = document.querySelectorAll('a[href^=\\\\#]');\r\n this.allLinkHashes = [];\r\n\r\n if (this.tabLists) {\r\n if (this.hashAnchorElements) {\r\n this.allLinkHashes = [...this.hashAnchorElements]\r\n .map(({ hash }) => hash)\r\n .filter((str) => str != ''); // don't want empties\r\n }\r\n\r\n this.InitTabbedContent();\r\n\r\n // check if tablist is overflowing after a window resize\r\n window.addEventListener('resize', () => {\r\n this.tabLists.forEach((list) => {\r\n this.checkOverflow(list);\r\n });\r\n });\r\n }\r\n }\r\n\r\n checkOverflow(el) {\r\n let hasOverflow = el.clientWidth < el.scrollWidth;\r\n\r\n if (hasOverflow) {\r\n addClass(el, this.overflowClass);\r\n } else {\r\n removeClass(el, this.overflowClass);\r\n }\r\n }\r\n\r\n /**\r\n * Sets active states on given tab & panel elements that are not\r\n * animated by the slideToggle script\r\n * @param {Node Element} tabElement\r\n * @param {Node Element} panelElement\r\n */\r\n setNonAnimatedTabAndPanel(tabElement, panelElement) {\r\n if (tabElement && panelElement) {\r\n tabElement.setAttribute('aria-selected', 'true');\r\n addClass(tabElement, this.activeClass);\r\n addClass(panelElement, this.activeClass);\r\n\r\n // set height for smooth slide animation if users click on tab\r\n let startHeight = panelElement.scrollHeight;\r\n panelElement.style.maxHeight = startHeight + 'px';\r\n }\r\n }\r\n\r\n /**\r\n * Sets the provided tab element & its corresponding content panel\r\n * to an active state\r\n * @param {event} e - (optional) if user clicks a tab\r\n * @param {Node Element} tabElement - tab heading element to set active\r\n * calls removeActiveStateOfPrevious\r\n */\r\n setSelectedTab(e = null, tabElement) {\r\n if (tabElement) {\r\n if (e) {\r\n // tab is clicked\r\n let correspondingContentPanel = document.querySelector(\r\n '#tabContent-' + tabElement.id\r\n );\r\n\r\n tabElement.setAttribute('aria-selected', 'true');\r\n addClass(tabElement, this.activeClass);\r\n addClass(correspondingContentPanel, this.activeClass);\r\n\r\n // open panel\r\n slideDownTogglableSection(\r\n e,\r\n this.tabbedContentContainerClass,\r\n `#tabContent-${tabElement.id}`,\r\n this.activeClass\r\n );\r\n } else {\r\n // # anchor clicked directing to tab,\r\n // won't have event context for panel\r\n let correspondingContentPanel = document.querySelector(\r\n '#tabContent-' + tabElement.id\r\n );\r\n\r\n this.setNonAnimatedTabAndPanel(tabElement, correspondingContentPanel);\r\n }\r\n\r\n // find old active tab & remove active state\r\n this.removeActiveStateOfPrevious(tabElement);\r\n }\r\n }\r\n\r\n /**\r\n * Called by SetSelectedTab. Removes active state of tab that does not match\r\n * the current tab element it is given\r\n * @param {Node Element} currentTabElement - tab heading element being set active\r\n */\r\n removeActiveStateOfPrevious(currentTabElement) {\r\n let tabList = currentTabElement ? currentTabElement.closest('.tablist') : null;\r\n let containingElement = currentTabElement\r\n ? currentTabElement.closest(this.tabbedContentContainerClass)\r\n : null;\r\n\r\n if (tabList && containingElement) {\r\n // check each sibling in the tablist for the previously active tab\r\n for (let i = 0; i < tabList.children.length; i++) {\r\n let tab = tabList.children[i];\r\n let tabId = tab.getAttribute('id');\r\n\r\n if (\r\n tabId != currentTabElement.id &&\r\n tab.classList.contains(this.activeClass)\r\n ) {\r\n // found the previously active tab\r\n let previousContentPanel = containingElement.querySelector(\r\n '#tabContent-' + tabId\r\n );\r\n\r\n tab.setAttribute('aria-selected', 'false');\r\n removeClass(tab, this.activeClass);\r\n\r\n // remove active settings from corresponding content panel\r\n if (previousContentPanel) {\r\n removeClass(previousContentPanel, this.activeClass);\r\n previousContentPanel.style.removeProperty('max-height');\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Calls setSelectedTab & scrollToTabContainer when a user clicks a tab\r\n * @param {event} e - user clicked on a tab heading\r\n */\r\n onTabClick(e) {\r\n let clickedTab = e.target.closest('.tab-heading'); // in case clicked on svg in button\r\n\r\n if (clickedTab) {\r\n // get content panels from same container\r\n let tabList = clickedTab.closest('.tablist');\r\n let containingElement = clickedTab.closest(this.tabbedContentContainerClass);\r\n\r\n if (containingElement && tabList) {\r\n let correspondingContentPanel = containingElement.querySelector(\r\n '#tabContent-' + clickedTab.id\r\n );\r\n\r\n if (correspondingContentPanel) {\r\n this.setSelectedTab(e, clickedTab);\r\n }\r\n\r\n // scroll back to top in case user partially scrolled into a content panel\r\n this.scrollToTabContainer(clickedTab);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Given a tab, scrolls to its parent Tabbed Content container\r\n * @param {Node Element} tabElement - clicked/active tab\r\n */\r\n scrollToTabContainer(tabElement) {\r\n if (tabElement) {\r\n const VIEWHEIGHT = document.documentElement.clientHeight;\r\n const OFFSET = VIEWHEIGHT * 0.1;\r\n\r\n let containingElement = tabElement.closest(this.tabbedContentContainerClass);\r\n let elementTop = containingElement.getBoundingClientRect().top;\r\n\r\n // don't jump to if already in ~ top->center view\r\n if (elementTop >= 0 && elementTop <= (window.innerHeight || VIEWHEIGHT) / 2) {\r\n return;\r\n }\r\n\r\n window.scrollTo({\r\n behavior: 'smooth',\r\n top: elementTop - document.body.getBoundingClientRect().top - OFFSET,\r\n });\r\n }\r\n }\r\n\r\n InitTabbedContent() {\r\n let searchForPageHash = false;\r\n\r\n // check url for hash\r\n if (window.location.hash != '') {\r\n this.pageHash = window.location.hash.replace('#', '');\r\n searchForPageHash = true;\r\n }\r\n\r\n // Begin setting all tab list interactions on page\r\n this.tabLists.forEach((tabbedList) => {\r\n // tab headings\r\n let tabs = tabbedList.querySelectorAll('[role=tab]');\r\n let allTabIds = [...tabs].map(({ id }) => id);\r\n\r\n // check if any # links match a tab & add to relevant list\r\n if (this.allLinkHashes.length > 0) {\r\n allTabIds.filter((id) => {\r\n if (this.allLinkHashes.indexOf(`#${id}`) !== -1) {\r\n this.relevantLinkHashes.push(`#${id}`);\r\n }\r\n });\r\n }\r\n\r\n // get content panels from same container\r\n let containingElement = tabbedList.closest(this.tabbedContentContainerClass);\r\n let tabPanels = containingElement\r\n ? containingElement.querySelectorAll('[role=tabpanel]')\r\n : null;\r\n\r\n if (tabPanels) {\r\n // default init\r\n let initialTab = tabs[0];\r\n let initialPanel = tabPanels[0];\r\n\r\n // determine if init should be based on url #\r\n if (this.pageHash.length > 0 && searchForPageHash) {\r\n if (allTabIds.indexOf(this.pageHash) >= 0) {\r\n // found matching tab to direct to\r\n searchForPageHash = false;\r\n let initIndex = allTabIds.indexOf(this.pageHash);\r\n\r\n initialTab = tabs[initIndex];\r\n initialPanel = tabPanels[initIndex];\r\n\r\n // scroll to tabbed content\r\n this.scrollToTabContainer(initialTab);\r\n }\r\n }\r\n\r\n // Init 1st tab & content on load\r\n this.setNonAnimatedTabAndPanel(initialTab, initialPanel);\r\n\r\n // set listeners\r\n tabs.forEach((tab) => {\r\n tab.addEventListener('click', this.onTabClick.bind(this));\r\n });\r\n\r\n // pair down relevant anchor elements for listeners\r\n this.hashAnchorElements = [...this.hashAnchorElements].filter((element) => {\r\n if (this.relevantLinkHashes.indexOf(element.hash) !== -1) {\r\n return element;\r\n }\r\n });\r\n\r\n this.hashAnchorElements.forEach((anchor) => {\r\n anchor.addEventListener('click', (e) => {\r\n let targetHash = e.target.hash;\r\n let currentTabElement = document.querySelector(\r\n `${this.tabbedContentContainerClass} ${targetHash}`\r\n );\r\n\r\n e.preventDefault(); // prevent normal snap to element\r\n\r\n this.setSelectedTab(null, currentTabElement);\r\n\r\n // resume normal behavior but with smooth scroll\r\n window.location.hash = targetHash;\r\n this.scrollToTabContainer(currentTabElement);\r\n });\r\n });\r\n }\r\n\r\n // change glider behavior if there's overflow\r\n this.checkOverflow(tabbedList);\r\n });\r\n }\r\n}\r\n\r\nexport default TabbedContent;\r\n"],"names":["addClass","el","cssClass","classList","contains","add","removeClass","remove","toggleClass","toggleAttribute","attr","currentValue","getAttribute","setAttribute","slideDownTogglableSection","e","parentContainer","toggleContent","sectionContainer","target","closest","contentContainer","querySelector","startHeight","scrollHeight","transitions","style","transition","maxHeight","window","requestAnimationFrame","removeProperty","classes","mainClasses","AccordionItem","constructor","this","accordionHeadings","document","querySelectorAll","forEach","heading","addEventListener","accordionItem","Content","linkedImages","removeLinkBorder","elementList","element","parentLink","parentElement","FacetsList","MOBILE_BREAKPOINT","overflowClass","groupContainers","toggleTriggers","mobileToggles","trigger","toggleGroup","bind","toggle","group","checkOverflow","clientHeight","innerWidth","preventDefault","triggerElement","toggledGroup","toggledContainer","groupContainer","Header","header","menuIcon","siteSearch","activeClass","cookieName","cookieDefaultValue","audienceList","personalizedMenus","audienceOptionButtons","audienceOptionIds","changeSearchboxVariant","length","option","push","id","setAudienceCookie","setActiveAudienceFocus","initCookie","readAudienceCookie","includes","initAudienceOption","animate","wrapperItem","audienceNavItem","focusNavLinks","activeCookie","link","activePersonalizedLabel","innerText","dataset","defaultPrompt","activeButtonId","menu","value","cookie","parts","split","pop","shift","Nav","linksWithDropdown","activeLink","navActive","allowArrowDownTrigger","i","changeOpenState","setTimeout","relatedTarget","downArrow","openSubmenu","activeDropLink","parentItem","makeExpanded","linkElement","currentState","ResponsiveTables","tablesList","wrapperClass","stackedClass","stickyHorizontalClass","stackedHeaderClass","cellHeadingClass","table","wrapper","createElement","parentNode","insertBefore","appendChild","setLabelColumn","setupStackedTable","width","rows","tdFirst","cells","c","position","backgroundColor","clientWidth","backgroundPosition","initialized","initiated","headingCells","Array","from","headingLabels","map","cell","newElement","innerHTML","row","cloneNode","insertAdjacentElement","Searchbox","compactSearchboxes","searchbox","compactButton","searchForm","focus","searchContainer","TabbedContent","tabbedContentContainerClass","tabLists","pageHash","relevantLinkHashes","hashAnchorElements","allLinkHashes","hash","filter","str","InitTabbedContent","list","scrollWidth","setNonAnimatedTabAndPanel","tabElement","panelElement","setSelectedTab","correspondingContentPanel","removeActiveStateOfPrevious","currentTabElement","tabList","containingElement","children","tab","tabId","previousContentPanel","onTabClick","clickedTab","scrollToTabContainer","VIEWHEIGHT","documentElement","OFFSET","elementTop","getBoundingClientRect","top","innerHeight","scrollTo","behavior","body","searchForPageHash","location","replace","tabbedList","tabs","allTabIds","indexOf","tabPanels","initialTab","initialPanel","initIndex","anchor","targetHash","mainClassesInstances","key","Object","entries"],"sourceRoot":""}