!isInfinite && currentSlide === slides.length - 1}\n />\n )\n };\n\n return (\n \n
\n
\n
\n {children} }\n >\n \n \n {slides.map((slide, index) => (\n // We have no stable ID to use for this array.\n // More information: https://reactjs.org/docs/lists-and-keys.html#keys\n // eslint-disable-next-line react/no-array-index-key\n \n \n \n \n \n \n \n
\n ))}\n \n \n \n
\n
\n
\n );\n};\n\nFullWidthImageCarouselComponent.defaultProps = {\n isInfinite: false,\n slides: [],\n ...globalComponentDefaults\n};\n\nFullWidthImageCarouselComponent.propTypes = {\n isInfinite: PropTypes.bool,\n slides: PropTypes.arrayOf(fullWidthImageCarouselSlideShape),\n ...globalComponentProperties\n};\n\nexport default FullWidthImageCarouselComponent;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport DateFormat from 'dateformat';\nimport { FacebookShareButton, LinkedinShareButton } from 'react-share';\n\nimport { authorShape } from '../../../types';\nimport { AUTHOR_TITLE, SHARE_TITLE, TOPICS_TITLE } from '../../../constants/newsroom';\n\nconst NewsroomDetailContent = ({\n author,\n mainContent,\n name,\n path,\n publicationDate,\n topics,\n globalNewsroomPath\n}) => {\n const date = new Date(publicationDate);\n const newDate = DateFormat(date, 'mmmm dS, yyyy');\n\n return (\n \n \n
\n
\n
{name} \n {author && (\n
{`Published by ${author.name} on ${newDate}`}
\n )}\n
\n
\n
\n
\n {author && (\n
\n
{AUTHOR_TITLE}
\n
\n \n {`Written by ${author.name}`}
\n
\n \n
\n )}\n {topics && (\n
\n )}\n
\n
\n
\n \n );\n};\n\nNewsroomDetailContent.defaultProps = {\n globalNewsroomPath: '',\n topics: []\n};\n\nNewsroomDetailContent.propTypes = {\n author: authorShape.isRequired,\n globalNewsroomPath: PropTypes.string,\n mainContent: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n path: PropTypes.string.isRequired,\n publicationDate: PropTypes.string.isRequired,\n topics: PropTypes.arrayOf(PropTypes.object)\n};\n\nexport default NewsroomDetailContent;\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport DateFormat from 'dateformat';\nimport { FacebookShareButton, LinkedinShareButton } from 'react-share';\n\nimport { sizedImageShape } from '../../../types';\nimport { PODCAST_EPISODES, SHARE_TITLE } from '../../../constants/newsroom';\nimport VideoComponent from '../../widgets/featuredContent/VideoComponent';\nimport CtaButton from '../../widgets/shared/CtaButton';\n\nconst NewsroomPodcastContent = ({\n headline,\n publicationDate,\n introText,\n thumbnailImage,\n thumbnailImageAltText,\n videoUrl,\n ctaText,\n ctaMedia,\n podcastThumbnailImage,\n podcastThumbnailImageAltText,\n podcastHost,\n recentPodcasts,\n path\n}) => {\n const date = new Date(publicationDate);\n const podcastDate = DateFormat(date, 'mmmm dS, yyyy');\n const videoItem = [\n {\n guid: 'single-video',\n videoUrl,\n image: thumbnailImage.url,\n imageHalf: thumbnailImage.url,\n imageAltText: thumbnailImageAltText,\n playIconColor: '#fff'\n }\n ];\n\n return (\n \n \n
\n
\n
{headline} \n
{podcastDate}
\n {introText && (\n
\n )}\n
\n {ctaText && ctaMedia && (\n
\n )}\n
\n
\n {podcastThumbnailImage && (\n
\n )}\n\n
\n {podcastHost.podcastHostIntro && (\n
\n )}\n {recentPodcasts.length > 0 && (\n
\n
{PODCAST_EPISODES}
\n
\n
\n )}\n
\n
\n
\n \n );\n};\n\nNewsroomPodcastContent.defaultProps = {\n introText: '',\n ctaText: '',\n ctaMedia: '',\n podcastThumbnailImage: {},\n podcastThumbnailImageAltText: '',\n recentPodcasts: []\n};\n\nNewsroomPodcastContent.propTypes = {\n headline: PropTypes.string.isRequired,\n publicationDate: PropTypes.string.isRequired,\n introText: PropTypes.string,\n thumbnailImage: sizedImageShape.isRequired,\n thumbnailImageAltText: PropTypes.string.isRequired,\n videoUrl: PropTypes.string.isRequired,\n ctaText: PropTypes.string,\n ctaMedia: PropTypes.string,\n podcastThumbnailImage: sizedImageShape,\n podcastThumbnailImageAltText: PropTypes.string,\n podcastHost: PropTypes.arrayOf(PropTypes.object).isRequired,\n recentPodcasts: PropTypes.arrayOf(PropTypes.object),\n path: PropTypes.string.isRequired\n};\n\nexport default NewsroomPodcastContent;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst ContactUsLanding = ({ consentText }) => {\n return (\n \n );\n};\n\nContactUsLanding.defaultProps = {\n consentText: ''\n};\n\nContactUsLanding.propTypes = {\n consentText: PropTypes.string\n};\n\nexport default ContactUsLanding;\n","import React from 'react';\nimport ReactDOMServer from 'react-dom/server';\nimport PropTypes from 'prop-types';\n\nimport arrowLeft from '../../../images/icons/layout/Arrow-Left-Blue.svg';\n\nconst BreadCrumb = ({ breadCrumbs }) => {\n const desktopBreadCrumb = breadCrumbs\n .map(breadCrumb => {\n if (breadCrumb.url) {\n return ReactDOMServer.renderToStaticMarkup(\n {`${breadCrumb.name}`} \n );\n }\n\n return `${breadCrumb.name}`;\n })\n .join(' / ');\n\n const mobileBreadCrumb = breadCrumbs.reverse().find(breadCrumb => breadCrumb.url);\n\n return (\n \n );\n};\n\nBreadCrumb.defaultProps = {\n breadCrumbs: []\n};\n\nBreadCrumb.propTypes = {\n breadCrumbs: PropTypes.arrayOf(PropTypes.object)\n};\n\nexport default BreadCrumb;\n","import React, { useEffect, useState } from 'react';\nimport { isIE } from 'react-device-detect';\nimport { Dialog } from '@headlessui/react';\nimport closeIcon from 'images/icons/layout/Close-Turquoise.svg';\n\nconst InternetExplorerWarningModal = () => {\n const [isOpen, setIsOpen] = useState(true);\n const [isInternetExplorer, setIsInternetExplorer] = useState(false);\n\n useEffect(() => {\n setIsInternetExplorer(isIE);\n }, []);\n\n if (isInternetExplorer && isOpen) {\n return (\n setIsOpen(false)}\n >\n \n \n
setIsOpen(false)}>\n \n \n
Notice \n
\n This website will offer limited functionality in this browser.\n \n We only support the recent versions of major browsers like:\n \n \n Chrome\n \n {', '}\n \n Firefox\n \n {', '}\n \n Safari\n \n {', and '}\n \n Edge\n \n .\n \n
\n \n );\n }\n\n return null;\n};\n\nexport default InternetExplorerWarningModal;\n","module.exports = __webpack_public_path__ + \"assets/99eaddceeb91da8e34adfa6710729b27.svg\";","import React from 'react';\nimport PropTypes from 'prop-types';\nimport LazyLoadImg from '../../widgets/shared/LazyLoadImg';\n\nimport { sizedImageShape } from '../../../types';\n\nconst Card = ({\n altText,\n contentType,\n link,\n rank,\n searchItemId,\n submit,\n title,\n thumbnailImage\n}) => {\n const hasImage = thumbnailImage && thumbnailImage.url;\n\n return (\n \n
\n
\n submit({\n link,\n rank,\n searchItemId\n })\n }\n title={`Link to ${title}`}\n >\n \n {hasImage && (\n \n )}\n
\n \n
{contentType} \n
{title}
\n
\n \n
\n
\n );\n};\n\nCard.defaultProps = {\n altText: '',\n contentType: '',\n submit: item => {\n window.location.href = item.link;\n },\n thumbnailImage: ''\n};\n\nCard.propTypes = {\n altText: PropTypes.string,\n contentType: PropTypes.string,\n link: PropTypes.string.isRequired,\n rank: PropTypes.number.isRequired,\n searchItemId: PropTypes.string.isRequired,\n submit: PropTypes.func,\n title: PropTypes.string.isRequired,\n thumbnailImage: sizedImageShape\n};\n\nexport default Card;\n","import React from 'react';\nimport LoaderIcon from 'react-loaders';\n\nconst Loader = () => {\n return ;\n};\n\nexport default Loader;\n","import { apiGetService, apiPostService } from './baseApi.service';\n\nexport function newsroomSearch(filters, itemsPerPage, page) {\n return (async () => {\n let url = `/api/newsroom/search?page=${page}&itemsPerPage=${itemsPerPage}`;\n let filtersList = '';\n\n if (filters) {\n filtersList = filters.map(filter => `&${filter.type}=${filter.values.join()}`).join('');\n url += `${filtersList}`;\n }\n\n return apiGetService(url);\n })();\n}\n\nexport function submitClick(item) {\n return (async () => {\n return apiPostService('/api/search/submitClick', item);\n })();\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst Checkbox = ({\n getNewsroomData,\n isSelected,\n label,\n modifyFilters,\n setFilters,\n type,\n value\n}) => {\n return (\n \n {\n const filters = modifyFilters(type, value, false);\n setFilters(filters);\n getNewsroomData(1, filters, false);\n }}\n />\n \n {label}\n \n
\n );\n};\n\nCheckbox.defaultProps = {\n getNewsroomData: () => {},\n label: '',\n modifyFilters: () => {},\n setFilters: () => {},\n type: ''\n};\n\nCheckbox.propTypes = {\n getNewsroomData: PropTypes.func,\n isSelected: PropTypes.bool.isRequired,\n label: PropTypes.string,\n modifyFilters: PropTypes.func,\n setFilters: PropTypes.func,\n type: PropTypes.string,\n value: PropTypes.string.isRequired\n};\n\nexport default Checkbox;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { valuesShape } from '../../../types';\n\nimport Checkbox from './Checkbox';\n\nconst FilterSection = ({ getNewsroomData, modifyFilters, setFilters, title, type, values }) => {\n return (\n \n {title} \n {values.map(item => (\n \n ))}\n
\n );\n};\n\nFilterSection.defaultProps = {\n getNewsroomData: () => {},\n modifyFilters: () => {},\n setFilters: () => {},\n title: '',\n type: '',\n values: []\n};\n\nFilterSection.propTypes = {\n getNewsroomData: PropTypes.func,\n modifyFilters: PropTypes.func,\n setFilters: PropTypes.func,\n title: PropTypes.string,\n type: PropTypes.string,\n values: PropTypes.arrayOf(valuesShape)\n};\n\nexport default FilterSection;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport arrowUp from 'images/icons/layout/Arrow-Up-Lagoon-Blue.svg';\nimport arrowDown from 'images/icons/layout/Arrow-Down-Teal.svg';\n\nimport AnimateHeight from 'react-animate-height';\nimport FilterSection from './FilterSection';\n\nimport { filtersShape } from '../../../types';\n\nimport { ALL_ITEMS } from '../../../constants/newsroom';\n\nconst SearchFilters = ({\n allItems,\n clearFilters,\n filterCount,\n getData,\n isLoaded,\n modifyFilters,\n response,\n setFilters\n}) => {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const list = allItems;\n const filtersListing = response.filters;\n\n let filterItems = [];\n const toggleFilters = () => {\n setIsExpanded(!isExpanded);\n };\n\n if (isLoaded && list.length > 0) {\n filterItems = filtersListing.map(filter => ({\n title: filter.label,\n type: filter.key,\n values: filter.items.map(item => ({\n isSelected: item.isSelected,\n label: item.label,\n value: item.value\n }))\n }));\n }\n\n return (\n <>\n \n
\n
\n {isLoaded && (\n
\n
\n \n \n \n {filterCount > 0 ? `${filterCount} Filters` : ALL_ITEMS}\n \n \n \n \n \n
\n )}\n
\n
\n
\n \n \n
\n {filterItems.map(filter => (\n
\n ))}\n
\n {\n getData(1, clearFilters(), false);\n }}\n type=\"button\"\n >\n Reset Filters\n \n
\n
\n
\n \n >\n );\n};\n\nSearchFilters.defaultProps = {\n allItems: [],\n isLoaded: false,\n response: {}\n};\n\nSearchFilters.propTypes = {\n allItems: PropTypes.arrayOf(PropTypes.object),\n clearFilters: PropTypes.func.isRequired,\n filterCount: PropTypes.number.isRequired,\n getData: PropTypes.func.isRequired,\n isLoaded: PropTypes.bool,\n modifyFilters: PropTypes.func.isRequired,\n response: filtersShape,\n setFilters: PropTypes.func.isRequired\n};\n\nexport default SearchFilters;\n","import React, { useState } from 'react';\n\nimport Card from '../../shared/card/Card';\nimport Loader from '../../shared/loader/Loader';\nimport { newsroomSearch, submitClick } from '../../../services/newsroomSearch.service';\nimport getQueryStringParameters from '../../../services/queryString.service';\n\nimport SearchFilters from '../../shared/searchFilters/SearchFilters';\nimport DesktopContainer from '../../shared/DesktopContainer';\nimport TabletAndMobileContainer from '../../shared/TabletAndMobileContainer';\n\nimport { SHOW_MORE, FEATURED_TITLE } from '../../../constants/newsroom';\n\nconst NewsroomLanding = () => {\n const [allItems, setAllItems] = useState([]);\n const [apiResponse, setApiResponse] = useState();\n const [filters, setFilters] = useState([]);\n const [isLoading, setIsLoading] = useState(true);\n const [page, setPage] = useState(1);\n const [pageLoaded, setPageLoaded] = useState(false);\n const [searchId, setSearchId] = useState();\n\n let itemsPerPage = 20;\n\n const totalItems = apiResponse && apiResponse.listing.pager.totalItems;\n const featuredItems = allItems && allItems.filter(item => item.isFeatured);\n const items = allItems && allItems.filter(item => !item.isFeatured);\n const showFeaturedSection = featuredItems && !!featuredItems.length;\n let filterCount = 0;\n\n if (apiResponse) {\n const filterResponse = apiResponse.filters;\n filterCount = filterResponse\n .map(section => section.items.filter(filter => filter.isSelected === true).length)\n .reduce((a, b) => a + b, 0);\n }\n\n const getNewsroomData = (pageNumber, filterList, pageChanged) => {\n const fetchData = async () => {\n setIsLoading(true);\n if (!pageChanged) {\n setPage(1);\n }\n const response = await newsroomSearch(filterList, itemsPerPage, pageNumber);\n setApiResponse(response);\n setAllItems(existingItems =>\n existingItems && pageChanged\n ? existingItems.concat(response.listing.items)\n : response.listing.items\n );\n setSearchId(response.searchId);\n setIsLoading(false);\n };\n fetchData();\n };\n\n const isShowMoreVisible = () => {\n return items && totalItems > items.length;\n };\n\n const setUrl = filtersList => {\n let currentUrl = window.location.href;\n const currentFilters = filtersList;\n\n if (currentUrl.includes('?')) {\n currentUrl = currentUrl.substring(0, currentUrl.indexOf('?'));\n }\n\n if (currentFilters) {\n const props = currentFilters\n .filter(filter => filter.values.length > 0)\n .map(filter => `&${filter.type}=${filter.values.join()}`)\n .join('')\n .slice(1);\n\n if (!props) {\n // eslint-disable-next-line no-restricted-globals\n history.pushState({}, 'Filter Update', `${currentUrl}`);\n } else {\n // eslint-disable-next-line no-restricted-globals\n history.pushState({}, 'Filter Update', `${currentUrl}?${props}`);\n }\n }\n };\n\n const modifyFilters = (originalFilters, type, value, removeOthers) => {\n const filtersList = [...originalFilters];\n if (type === '' || value === '') {\n return originalFilters;\n }\n\n if (filtersList && filtersList.some(item => item.type === type)) {\n const item = filtersList.filter(filter => filter.type === type)[0];\n const itemIndex = item.values.indexOf(value);\n if (itemIndex === -1) {\n if (removeOthers) {\n item.values = [value];\n } else {\n item.values.push(value);\n }\n } else if (!removeOthers) {\n item.values.splice(itemIndex, 1);\n }\n } else {\n filtersList.push({ type, values: [value] });\n }\n\n setUrl(filtersList);\n\n return filtersList;\n };\n\n const modifyFiltersOnClick = (type, value, removeOthers) => {\n let filtersList = [...filters];\n\n filtersList = modifyFilters(filtersList, type, value, removeOthers);\n\n return filtersList;\n };\n\n const clearFilters = () => {\n const newFilters = [];\n setFilters(newFilters);\n setUrl(newFilters);\n return newFilters;\n };\n\n const submitClickAndNavigate = item => {\n const newItem = item;\n newItem.searchId = searchId;\n\n submitClick(newItem);\n\n window.location.href = item.link;\n };\n\n if (!pageLoaded) {\n setPageLoaded(true);\n\n getQueryStringParameters().then(queryStringParameters => {\n let filterList = [];\n\n Object.keys(queryStringParameters).forEach(key => {\n const values = queryStringParameters[key];\n values.split(',').forEach(value => {\n filterList = modifyFilters(filterList, key, value, false);\n });\n });\n\n setFilters(filterList);\n\n getNewsroomData(1, filterList, false);\n });\n }\n\n return (\n <>\n \n {isLoading &&
}\n
\n\n {items && totalItems ? (\n
\n
\n {`1-${items.length} of ${totalItems} Items`} \n
\n
\n ) : (\n ''\n )}\n\n {showFeaturedSection && (\n
\n \n
{FEATURED_TITLE} \n
\n {featuredItems &&\n featuredItems.map((item, index) => (\n \n ))}\n
\n
\n \n )}\n {items && totalItems ? (\n
\n \n
\n {items &&\n items.map((item, index) => (\n \n ))}\n
\n {isShowMoreVisible() && (\n <>\n
\n {\n setPage(page + 1);\n itemsPerPage = 20;\n getNewsroomData(page + 1, filters, true);\n }}\n >\n {SHOW_MORE}\n \n \n
\n {\n setPage(page === 1 ? page + 2 : page + 1);\n itemsPerPage = 10;\n getNewsroomData(page === 1 ? page + 2 : page + 1, filters, true);\n }}\n >\n {SHOW_MORE}\n \n \n >\n )}\n
\n \n ) : (\n ''\n )}\n
\n >\n );\n};\n\nexport default NewsroomLanding;\n","import React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport DateFormat from 'dateformat';\nimport cookie from 'react-cookies';\nimport classNames from 'classnames';\nimport { useCssVariables } from '../../../utilities';\n\nconst Alert = ({\n allowDismissal,\n color,\n count,\n dismissTiming,\n endDate,\n fullDetailsUrl,\n fullDetailsUrlTarget,\n hasDate,\n hasMultipleAlerts,\n icon,\n index,\n message,\n filterAlertsList,\n startDate,\n textColor,\n title\n}) => {\n const string = message;\n const lengthMobile = 100;\n const length = 180;\n\n const trimmedStringMobile =\n string.length > lengthMobile\n ? `${string.substring(0, lengthMobile - 3)}...`\n : string.substring(0, lengthMobile);\n const trimmedString =\n string.length > length ? `${string.substring(0, length - 3)}...` : string.substring(0, length);\n\n const newStartDate = new Date(startDate);\n const formattedStartDate = DateFormat(newStartDate, 'm/d/yyyy');\n const newEndDate = new Date(endDate);\n const formattedEndDate = DateFormat(newEndDate, 'm/d/yyyy');\n\n const onDismiss = cookieName => {\n cookie.save(cookieName, null, { path: '/', maxAge: dismissTiming * 3600 });\n };\n\n const alertRef = useRef(null);\n\n useCssVariables(alertRef, {\n '--text-color': `#${textColor}`,\n '--background-color': `#${color}`\n });\n\n return (\n \n
\n
\n
\n
\n {hasMultipleAlerts &&
{`Alert ${index + 1}/${count}: `} }\n
: `\n : ''\n }${fullDetailsUrl && `
View Full Details `}`\n }}\n />\n
\n {trimmedString} \n {trimmedStringMobile} \n {fullDetailsUrl && (\n View Full Details`\n }}\n />\n )}\n \n \n {allowDismissal && (\n
{\n filterAlertsList(index);\n onDismiss(title);\n }}\n className=\"btn-no-style\"\n >\n Dismiss\n \n )}\n
\n
\n
\n );\n};\n\nAlert.defaultProps = {\n filterAlertsList: () => {},\n fullDetailsUrlTarget: '_self'\n};\n\nAlert.propTypes = {\n allowDismissal: PropTypes.bool.isRequired,\n color: PropTypes.string.isRequired,\n count: PropTypes.number.isRequired,\n dismissTiming: PropTypes.number.isRequired,\n endDate: PropTypes.string.isRequired,\n fullDetailsUrl: PropTypes.string.isRequired,\n fullDetailsUrlTarget: PropTypes.string,\n hasDate: PropTypes.bool.isRequired,\n hasMultipleAlerts: PropTypes.bool.isRequired,\n icon: PropTypes.string.isRequired,\n index: PropTypes.number.isRequired,\n message: PropTypes.string.isRequired,\n filterAlertsList: PropTypes.func,\n startDate: PropTypes.string.isRequired,\n textColor: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired\n};\n\nexport default Alert;\n","import React, { useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport Slider from 'react-slick';\nimport ArrowLeft from 'images/icons/layout/Arrow-Left-White.png';\nimport ArrowRight from 'images/icons/layout/Arrow-Right-White.png';\nimport { useCssVariables } from '../../../utilities';\nimport Alert from './Alert';\n\nconst Alerts = ({ alerts }) => {\n const sliderSettings = {\n adaptiveHeight: true,\n arrows: true,\n autoplay: false,\n dots: false\n };\n const [alertsList, setAlertsList] = useState(alerts);\n\n const hasMultipleAlerts = alertsList.length > 1;\n const alertsCount = alertsList.length;\n\n const filterAlertsList = index => {\n const array = [...alertsList];\n\n if (index > -1) {\n array.splice(index, 1);\n }\n\n setAlertsList(array);\n };\n\n const alertsRef = useRef(null);\n\n useCssVariables(alertsRef, {\n '--arrow-left': `url('${ArrowLeft}')`,\n '--arrow-right': `url('${ArrowRight}')`\n });\n\n return (\n \n
\n {alertsList &&\n alertsList.map((alert, index) => (\n \n ))}\n \n
\n );\n};\n\nAlerts.defaultProps = {\n alerts: []\n};\n\nAlerts.propTypes = {\n alerts: PropTypes.arrayOf(PropTypes.object)\n};\n\nexport default Alerts;\n","import React, { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport arrowUpIcon from 'images/icons/layout/Arrow-Up.svg';\nimport arrowDownIcon from 'images/icons/layout/Arrow-Down.svg';\nimport closeIcon from 'images/icons/layout/Close-White.svg';\nimport hamburgerIcon from 'images/icons/layout/Hamburger.svg';\nimport search from 'images/icons/layout/Search.svg';\nimport classNames from 'classnames';\nimport Alerts from '../shared/alerts/Alerts';\nimport { useCssVariables } from '../../utilities';\nimport { globalImage } from '../../types';\nimport ConditionalWrapper from '../shared/conditionalWrapper/ConditionalWrapper';\n\nconst NavigationMenu = ({\n alerts,\n globalImages,\n mainMenuItems,\n searchUrl,\n isGlobalNavigationHidden,\n hideLogoLink,\n isSecure\n}) => {\n const hasAlerts = () => alerts && !!alerts.length;\n const [isNavigationOpen, setIsNavigationOpen] = useState(false);\n const toggleNavigationOpenState = () => setIsNavigationOpen(!isNavigationOpen);\n const menuIcon = () => (isNavigationOpen ? closeIcon : hamburgerIcon);\n const [openedSubMenu, setOpenedSubMenu] = useState(-1);\n const caretIcon = index => (openedSubMenu === index ? arrowUpIcon : arrowDownIcon);\n const navRef = useRef(null);\n const navWrapper = useRef(null);\n const subMenuRef = useRef([]);\n const [wrapperHeight, setWrapperHeight] = useState(null);\n\n useEffect(() => {\n const handleClickOutside = event => {\n if (navRef.current && !navRef.current.contains(event.target)) {\n setOpenedSubMenu(-1);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [navRef.current]);\n\n useEffect(() => {\n setWrapperHeight(navWrapper.current.offsetHeight);\n }, [isNavigationOpen]);\n\n useCssVariables(subMenuRef, {\n '--sub-menu-top': `${wrapperHeight}px`\n });\n\n return (\n \n {hasAlerts && }\n \n
\n {!isGlobalNavigationHidden && (\n <>\n
\n
\n {mainMenuItems.map((menuItem, index) => (\n \n {menuItem.children.length > 0 ? (\n <>\n setOpenedSubMenu(openedSubMenu !== index ? index : -1)}\n >\n {menuItem.name}\n \n \n subMenuRef.current.push(ref)}\n >\n {menuItem.children.map(child => (\n \n \n {child.name}\n \n \n ))}\n \n >\n ) : (\n {menuItem.name} \n )}\n \n ))}\n \n
\n
\n >\n )}\n {isGlobalNavigationHidden && isSecure && (\n
\n )}\n
\n \n );\n};\n\nNavigationMenu.defaultProps = {\n alerts: [],\n mainMenuItems: [],\n isGlobalNavigationHidden: false,\n searchUrl: '',\n hideLogoLink: false,\n isSecure: false\n};\n\nNavigationMenu.propTypes = {\n alerts: PropTypes.arrayOf(PropTypes.object),\n globalImages: globalImage.isRequired,\n mainMenuItems: PropTypes.arrayOf(PropTypes.object),\n isGlobalNavigationHidden: PropTypes.bool,\n searchUrl: PropTypes.string,\n hideLogoLink: PropTypes.bool,\n isSecure: PropTypes.bool\n};\n\nexport default NavigationMenu;\n","import React, { useState } from 'react';\nimport { Element } from 'react-scroll';\n\nimport PropTypes from 'prop-types';\nimport AnimateHeight from 'react-animate-height';\nimport chevronDown from 'images/icons/layout/Arrow-Down-Blue.svg';\nimport chevronUp from 'images/icons/layout/Arrow-Up-Purple.svg';\nimport ConditionalWrapper from '../../shared/conditionalWrapper/ConditionalWrapper';\n\nconst FaqSecondary = ({ answer, prettyUrlTitle, question }) => {\n const [isFaqVisible, setIsFaqVisible] = useState(false);\n\n const toggleFaq = () => {\n setIsFaqVisible(!isFaqVisible);\n };\n return (\n \n
(\n \n {children}\n \n )}\n >\n \n \n {question}\n \n \n
\n {answer &&
}\n \n
\n );\n};\n\nFaqSecondary.defaultProps = {\n answer: '',\n prettyUrlTitle: ''\n};\n\nFaqSecondary.propTypes = {\n answer: PropTypes.string,\n prettyUrlTitle: PropTypes.string,\n question: PropTypes.string.isRequired\n};\n\nexport default FaqSecondary;\n","import React, { useState } from 'react';\nimport { Element } from 'react-scroll';\n\nimport PropTypes from 'prop-types';\nimport AnimateHeight from 'react-animate-height';\nimport chevronDown from 'images/icons/layout/Arrow-Down-Teal.svg';\nimport chevronUp from 'images/icons/layout/Arrow-Up-Lagoon-Blue.svg';\nimport ConditionalWrapper from '../../shared/conditionalWrapper/ConditionalWrapper';\n\nimport FaqSecondary from './FaqSecondary';\n\nconst Faq = ({ answer, faqs, prettyUrlTitle, question }) => {\n const [isFaqVisible, setIsFaqVisible] = useState(false);\n\n const toggleFaq = () => {\n setIsFaqVisible(!isFaqVisible);\n };\n return (\n \n
(\n \n {children}\n \n )}\n >\n \n {question}\n \n \n \n
\n {answer &&
}\n {!!faqs &&\n faqs.map(faq => (\n \n ))}\n \n
\n );\n};\n\nFaq.defaultProps = {\n answer: '',\n faqs: [],\n prettyUrlTitle: ''\n};\n\nFaq.propTypes = {\n answer: PropTypes.string,\n faqs: PropTypes.arrayOf(PropTypes.object),\n prettyUrlTitle: PropTypes.string,\n question: PropTypes.string.isRequired\n};\n\nexport default Faq;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Element } from 'react-scroll';\n\nimport GlobalComponentContainer from '../GlobalComponentContainer';\nimport ContentDivider from '../shared/ContentDivider';\nimport Faq from './Faq';\nimport ConditionalWrapper from '../../shared/conditionalWrapper/ConditionalWrapper';\n\nconst FaqComponent = ({\n faqs,\n hasContentDivider,\n parentPageTitle,\n parentPageUrl,\n prettyUrlTitle,\n shortDescription,\n title\n}) => {\n return (\n \n \n
\n
{children} }\n >\n {title && (\n \n )}\n \n {faqs.map(faq => (\n \n ))}\n
\n \n
\n {hasContentDivider &&
}\n
\n \n );\n};\n\nFaqComponent.defaultProps = {\n faqs: [],\n hasContentDivider: false,\n parentPageTitle: null,\n parentPageUrl: null,\n prettyUrlTitle: '',\n shortDescription: null,\n title: null\n};\n\nFaqComponent.propTypes = {\n faqs: PropTypes.arrayOf(PropTypes.object),\n hasContentDivider: PropTypes.bool,\n parentPageTitle: PropTypes.string,\n parentPageUrl: PropTypes.string,\n prettyUrlTitle: PropTypes.string,\n shortDescription: PropTypes.string,\n title: PropTypes.string\n};\n\nexport default FaqComponent;\n","import React from 'react';\nimport { Provider } from 'react-redux';\nimport getStore from '../../state/store';\n\nconst store = getStore();\n\nconst storeProvider = Component => props => (\n \n \n \n);\n\nexport default storeProvider;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst PrivacyPolicy = ({ description, id, title }) => {\n return (\n \n );\n};\n\nPrivacyPolicy.propTypes = {\n description: PropTypes.string.isRequired,\n id: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired\n};\n\nexport default PrivacyPolicy;\n","import React, { useState } from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { scroller, Element } from 'react-scroll';\nimport storeProvider from '../../shared/StoreProvider';\n\nimport ConditionalWrapper from '../../shared/conditionalWrapper/ConditionalWrapper';\nimport GlobalComponentContainer from '../GlobalComponentContainer';\nimport PrivacyPolicy from './PrivacyPolicy';\nimport ContentDivider from '../shared/ContentDivider';\n\nconst PrivacyPolicyComponent = ({\n hasAlerts,\n isScrollPastFooter,\n isScrollPastNav,\n parentPageTitle,\n parentPageUrl,\n prettyUrlTitle,\n privacyPolicies,\n queryStringValue,\n shortDescription,\n title\n}) => {\n const [selectValue, setSelectValue] = useState('Jump To');\n const [pageLoaded, setPageLoaded] = useState(false);\n const anchorSettings = {\n duration: 500,\n delay: 150,\n smooth: true,\n offset: hasAlerts ? -220 : -140\n };\n\n const handleOnChange = value => {\n setSelectValue(value);\n scroller.scrollTo(value, anchorSettings);\n };\n\n const scrollToTop = () => {\n scroller.scrollTo('wrapper', anchorSettings);\n };\n\n const handleOnLoad = async value => {\n await setSelectValue(value);\n await handleOnChange(value);\n };\n\n if (!pageLoaded) {\n setPageLoaded(true);\n handleOnLoad(queryStringValue);\n }\n\n return (\n \n \n
\n
{children} }\n >\n \n {title && (\n \n )}\n
\n \n
\n
\n
\n
\n
\n {\n handleOnChange(event.target.value);\n }}\n value={selectValue}\n >\n \n Jump To\n \n {privacyPolicies.map(privacyPolicy => (\n \n {privacyPolicy.prettyUrlTitle || privacyPolicy.title}\n \n ))}\n \n
\n\n
\n {privacyPolicies.map(privacyPolicy => (\n
\n \n \n ))}\n
{\n scrollToTop();\n }}\n >\n Back To Top\n \n
\n
\n
\n
\n \n );\n};\n\nPrivacyPolicyComponent.defaultProps = {\n parentPageTitle: null,\n parentPageUrl: null,\n prettyUrlTitle: '',\n privacyPolicies: '',\n queryStringValue: '',\n shortDescription: null,\n title: null\n};\n\nPrivacyPolicyComponent.propTypes = {\n hasAlerts: PropTypes.bool.isRequired,\n isScrollPastNav: PropTypes.bool.isRequired,\n isScrollPastFooter: PropTypes.bool.isRequired,\n parentPageTitle: PropTypes.string,\n parentPageUrl: PropTypes.string,\n prettyUrlTitle: PropTypes.string,\n privacyPolicies: PropTypes.arrayOf(PropTypes.object),\n queryStringValue: PropTypes.string,\n shortDescription: PropTypes.string,\n title: PropTypes.string\n};\n\nfunction mapStateToProps(state) {\n return {\n isScrollPastNav: !!(state.general && state.general.isScrollPastNav),\n isScrollPastFooter: !!(state.general && state.general.isScrollPastFooter)\n };\n}\n\nexport default storeProvider(connect(mapStateToProps)(PrivacyPolicyComponent));\n","import React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport ConditionalWrapper from '../../shared/conditionalWrapper/ConditionalWrapper';\nimport { useCssVariables } from '../../../utilities';\n\nconst ToolkitContentItem = ({ contentItem, style }) => {\n const imageRef = useRef(null);\n useCssVariables(imageRef, {\n '--image-border-color': contentItem.imageBorderColor\n });\n\n return (\n \n );\n};\n\nToolkitContentItem.defaultProps = {\n contentItem: {},\n style: {}\n};\n\nToolkitContentItem.propTypes = {\n contentItem: PropTypes.shape({\n title: PropTypes.string.isRequired,\n image: PropTypes.string,\n altText: PropTypes.string,\n imageBorderColor: PropTypes.string,\n description: PropTypes.string,\n link: PropTypes.string,\n target: PropTypes.string\n }),\n style: PropTypes.shape({})\n};\n\nexport default ToolkitContentItem;\n","import React, { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useCssVariables } from '../../../utilities';\nimport ToolkitContentItem from './ToolkitContentItem';\n\nconst ToolkitContentSection = ({ section }) => {\n const introComponentRef = useRef(null);\n const [lastRowIndices, setLastRowIndices] = useState([]);\n const numColumns = 4;\n\n useEffect(() => {\n const totalItems = section.contentItems.length;\n const startOfLastRow = totalItems - (totalItems % numColumns || numColumns);\n\n setLastRowIndices(section.contentItems.map((_, index) => index >= startOfLastRow));\n }, [section.contentItems]);\n\n useCssVariables(introComponentRef, {\n '--background-color': section.backgroundColor,\n '--heading-text-color': section.textColor\n });\n\n return (\n <>\n
\n \n {section.contentItems.map((contentItem, index) => (\n \n ))}\n
\n >\n );\n};\n\nToolkitContentSection.defaultProps = {\n section: {}\n};\n\nToolkitContentSection.propTypes = {\n section: PropTypes.shape({\n headline: PropTypes.string.isRequired,\n textColor: PropTypes.string,\n backgroundColor: PropTypes.string,\n contentItems: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n image: PropTypes.string,\n altText: PropTypes.string,\n imageBorderColor: PropTypes.string,\n description: PropTypes.string,\n link: PropTypes.string,\n target: PropTypes.string\n })\n )\n })\n};\n\nexport default ToolkitContentSection;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { globalComponentDefaults, globalComponentProperties } from '../../../types';\nimport ToolkitContentSection from './ToolkitContentSection';\n\nconst ToolkitContentSectionComponent = ({ sections }) => (\n \n \n {sections.map(section => (\n \n ))}\n
\n \n);\n\nToolkitContentSectionComponent.defaultProps = {\n ...globalComponentDefaults,\n textColor: '',\n backgroundColor: '',\n contentItems: []\n};\n\nToolkitContentSectionComponent.propTypes = {\n ...globalComponentProperties,\n sections: PropTypes.arrayOf(\n PropTypes.shape({\n headline: PropTypes.string.isRequired,\n textColor: PropTypes.string,\n backgroundColor: PropTypes.string,\n contentItems: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n image: PropTypes.string,\n description: PropTypes.string,\n link: PropTypes.string,\n target: PropTypes.string\n })\n )\n })\n )\n};\n\nexport default ToolkitContentSectionComponent;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport { pagerShape } from '../../../types';\n\nconst Pager = ({ search, searchText, currentPage, pagerInfo }) => {\n const showPrevious = currentPage !== 1;\n const showNext = currentPage !== pagerInfo.totalPages;\n const activePages = [];\n const hide = pagerInfo.totalPages === 1;\n\n for (let i = pagerInfo.startPage; i <= pagerInfo.endPage; i += 1) {\n if (i > 1 && i < pagerInfo.totalPages) {\n activePages.push(i);\n }\n }\n\n return (\n <>\n {!hide && (\n \n {showPrevious && (\n search(searchText, currentPage - 1)}\n >\n Prev\n \n )}\n search(searchText, 1)}\n >\n 1\n \n {pagerInfo.startPage > 2 && . . . }\n {activePages.map(page => (\n search(searchText, page)}\n >\n {page}\n \n ))}\n {pagerInfo.endPage < pagerInfo.totalPages - 1 && . . . }\n search(searchText, pagerInfo.totalPages)}\n >\n {pagerInfo.totalPages}\n \n {showNext && (\n search(searchText, currentPage + 1)}\n >\n Next\n \n )}\n
\n )}\n >\n );\n};\n\nPager.defaultProps = {\n currentPage: 0,\n searchText: '',\n pagerInfo: {}\n};\n\nPager.propTypes = {\n currentPage: PropTypes.number,\n search: PropTypes.func.isRequired,\n searchText: PropTypes.string,\n pagerInfo: pagerShape\n};\n\nexport default Pager;\n","import React, { useState } from 'react';\nimport AnimateHeight from 'react-animate-height';\nimport PropTypes from 'prop-types';\nimport { Element, scroller } from 'react-scroll';\nimport localStorage from 'local-storage';\n\nimport arrowUp from 'images/icons/layout/Arrow-Up-Purple.svg';\nimport arrowDown from 'images/icons/layout/Arrow-Down-Blue.svg';\n\nimport SearchBarComponent from '../widgets/searchBar/SearchBarComponent';\nimport AnchorWrapper from '../layout/shared/AnchorWrapper';\nimport PageWasLoadedFromBackOrForwardOperation from '../../services/browser.service';\n\nimport TabletAndMobileContainer from '../shared/TabletAndMobileContainer';\nimport Pager from '../shared/pager/Pager';\n\nimport { getSearch, submitClick } from '../../services/search.service';\n\nconst SearchLanding = ({\n alerts,\n initialSearchText,\n miscFilters,\n noResultsText,\n searchLinks,\n isSecured\n}) => {\n const STOREDSEARCHPARAMETERS = 'storedSearchParameters';\n const ALLRESULTS = { displayValue: 'All Results', key: null, value: null };\n const itemsPerPage = 10;\n const [searchItems, setSearchItems] = useState();\n const [searchText, setSearchText] = useState();\n const [searchId, setSearchId] = useState();\n const [pagerInfo, setPagerInfo] = useState();\n const [currentPage, setCurrentPage] = useState(1);\n const [isFilterExpanded, setIsFilterExpanded] = useState(false);\n const [currentFilter, setCurrentFilter] = useState(ALLRESULTS);\n const [isPageLoaded, setIsPageLoaded] = useState(false);\n\n const showResults = searchItems && searchItems.length > 0;\n const hasAlerts = !!alerts && !!alerts.length;\n\n const search = async (query, page, filter) => {\n const searchFilter = filter == null ? currentFilter : filter;\n\n localStorage.set(STOREDSEARCHPARAMETERS, {\n query,\n page,\n searchFilter\n });\n\n setCurrentPage(page);\n setSearchText(query);\n setCurrentFilter(searchFilter);\n\n const response = await getSearch(\n query,\n page,\n itemsPerPage,\n searchFilter.key === null ? null : searchFilter,\n isSecured\n );\n\n if (response) {\n setSearchItems(response.listing.items);\n setPagerInfo(response.listing.pager);\n setSearchId(response.searchId);\n\n scroller.scrollTo('scroll', {\n smooth: true,\n duration: 500,\n delay: 150,\n offset: hasAlerts ? -200 : -150\n });\n }\n };\n\n const toggleFilters = () => {\n setIsFilterExpanded(!isFilterExpanded);\n };\n\n const getItemCountRange = () => {\n const start = (pagerInfo.currentPage - 1) * itemsPerPage + 1;\n const end =\n pagerInfo.currentPage * pagerInfo.pageSize < pagerInfo.totalItems\n ? pagerInfo.currentPage * pagerInfo.pageSize\n : pagerInfo.totalItems;\n\n return `${start}-${end}`;\n };\n\n const onSearch = async (query, page) => {\n await search(query, page, currentFilter);\n };\n\n const modifyFilter = async filter => {\n setCurrentFilter(filter);\n await search(searchText, 1, filter);\n };\n\n const submitClickAndNavigate = item => {\n const newItem = item;\n newItem.searchId = searchId;\n\n submitClick(newItem);\n\n window.location.href = item.url;\n };\n\n if (!isPageLoaded) {\n setIsPageLoaded(true);\n\n const storedSearchParameters = localStorage.get(STOREDSEARCHPARAMETERS);\n localStorage.remove(STOREDSEARCHPARAMETERS);\n\n if (storedSearchParameters != null && PageWasLoadedFromBackOrForwardOperation()) {\n search(\n storedSearchParameters.query,\n storedSearchParameters.page,\n storedSearchParameters.searchFilter\n );\n } else if (initialSearchText) {\n search(initialSearchText, currentPage);\n }\n }\n\n return (\n <>\n \n
\n {!isSecured && (\n <>\n
\n
\n \n
\n
\n
\n
\n \n \n {currentFilter.displayValue} \n \n \n \n \n \n \n {\n toggleFilters();\n modifyFilter(ALLRESULTS);\n }}\n >\n All Results\n \n \n {miscFilters.map(value => (\n \n {\n toggleFilters();\n modifyFilter(value);\n }}\n >\n {value.displayValue}\n \n \n ))}\n \n \n \n
\n
\n
\n
\n \n \n \n \n {\n toggleFilters();\n modifyFilter(ALLRESULTS);\n }}\n >\n {ALLRESULTS.displayValue}\n \n \n {miscFilters.map(value => (\n \n {\n toggleFilters();\n modifyFilter(value);\n }}\n >\n {value.displayValue}\n \n \n ))}\n \n \n \n \n >\n )}\n\n {showResults && pagerInfo && (\n
\n
\n \n {`${getItemCountRange()} of\n ${pagerInfo.totalItems}\n Items Matching your Search Criteria`}\n \n
\n
\n )}\n\n
\n \n
\n {showResults ? (\n searchItems.map((item, index) => (\n
\n
\n submitClickAndNavigate({\n rank: index + (currentPage - 1) * itemsPerPage,\n searchItemId: item.searchItemId,\n url: item.url\n })\n }\n >\n \n {item.url} \n
\n \n
\n ))\n ) : (\n <>\n
\n {searchLinks && (\n
\n {searchLinks.map(link => (\n \n <>{link.name}>\n \n ))}\n \n )}\n >\n )}\n
\n {showResults && pagerInfo && (\n
\n )}\n
\n \n
\n >\n );\n};\n\nSearchLanding.defaultProps = {\n alerts: [],\n initialSearchText: '',\n miscFilters: [],\n searchLinks: [],\n isSecured: false\n};\n\nSearchLanding.propTypes = {\n alerts: PropTypes.arrayOf(PropTypes.object),\n initialSearchText: PropTypes.string,\n miscFilters: PropTypes.arrayOf(PropTypes.object),\n noResultsText: PropTypes.string.isRequired,\n searchLinks: PropTypes.arrayOf(PropTypes.object),\n isSecured: PropTypes.bool\n};\n\nexport default SearchLanding;\n","export default function PageWasLoadedFromBackOrForwardOperation() {\n if (window.performance) {\n const navEntries = window.performance.getEntriesByType('navigation');\n\n if (navEntries.length > 0 && navEntries[0].type === 'back_forward') {\n // As per API lv2, this page was loaded from a back/forward operation\n return true;\n }\n\n if (\n window.performance.navigation &&\n window.performance.navigation.type === window.performance.navigation.TYPE_BACK_FORWARD\n ) {\n // As per API lv1, this page was loaded from a back/forward operation\n return true;\n }\n }\n\n return false;\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport AnchorWrapper from './AnchorWrapper';\n\nconst FooterMenuItem = ({\n children,\n icon,\n isMenuHeader,\n name,\n showIconOnly,\n target,\n url,\n isVisible\n}) => {\n const hasChildren = !!(children && children.length);\n\n return (\n <>\n {(!isMenuHeader || (isVisible && isMenuHeader)) && (\n \n \n {icon ? (\n <>\n \n {!showIconOnly && {name} }\n >\n ) : (\n {name} \n )}\n \n \n )}\n {hasChildren &&\n children.map(childItem => )}\n >\n );\n};\n\nFooterMenuItem.defaultProps = {\n children: [],\n icon: '',\n isMenuHeader: false,\n isVisible: false,\n name: '',\n showIconOnly: false,\n target: '',\n url: ''\n};\n\nFooterMenuItem.propTypes = {\n children: PropTypes.arrayOf(PropTypes.object),\n icon: PropTypes.string,\n isMenuHeader: PropTypes.bool,\n isVisible: PropTypes.bool,\n name: PropTypes.string,\n showIconOnly: PropTypes.bool,\n target: PropTypes.string,\n url: PropTypes.string\n};\n\nexport default FooterMenuItem;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport AnchorWrapper from './AnchorWrapper';\n\nconst LegalMenuItem = ({ name, target, url }) => {\n return (\n \n <>{name}>\n \n );\n};\n\nLegalMenuItem.defaultProps = {\n name: '',\n target: '',\n url: ''\n};\n\nLegalMenuItem.propTypes = {\n name: PropTypes.string,\n target: PropTypes.string,\n url: PropTypes.string\n};\n\nexport default LegalMenuItem;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport { newLineToBreak } from '../../utilities';\nimport FooterMenuItem from './shared/FooterMenuItem';\nimport LegalMenuItem from './shared/LegalMenuItem';\nimport { globalImage, ccpaBannerShape } from '../../types';\n\nimport CCPABanner from '../shared/ccpaBanner/CCPABanner';\n\nconst Footer = ({\n brightEdgeBody,\n brightEdgeClose,\n ccpaBanner,\n corporateAddress,\n corporatePhoneNumber,\n footerLegalText,\n footerMenuItems,\n globalImages,\n hideFooterMenu,\n legalMenuItems,\n footerSubsidiaryImageAltText,\n hideLogoLink,\n hideCookieBanner,\n isSecure\n}) => {\n const [hasCCPABanner, setHasCCPABanner] = useState(ccpaBanner);\n\n const CCPAColumn = () =>\n !hideCookieBanner &&\n hasCCPABanner && ;\n\n const LogoColumn = () => (\n \n );\n\n const SubsidiaryImage = () => (\n \n {globalImages.footerSubsidiaryImage && (\n
\n \n \n )}\n
\n );\n\n const Copyright = () => (\n
\n );\n\n const socialIcons =\n footerMenuItems && footerMenuItems.length\n ? footerMenuItems[footerMenuItems.length - 1]\n : undefined;\n\n return (\n <>\n {hideFooterMenu || isSecure ? (\n \n ) : (\n \n
\n {footerMenuItems &&\n footerMenuItems.slice(0, -1).map(item => (\n
\n ))}\n
\n
\n {newLineToBreak(corporateAddress)}\n {corporatePhoneNumber !== '' && (\n {corporatePhoneNumber} \n )}\n
\n
\n
\n
\n {socialIcons && (\n
\n )}\n
\n
\n
\n
\n {legalMenuItems &&\n legalMenuItems.map(item => )}\n
\n
\n
\n
\n
\n
\n
\n
\n )}\n \n >\n );\n};\n\nFooter.defaultProps = {\n brightEdgeBody: '',\n brightEdgeClose: '',\n ccpaBanner: {},\n footerLegalText: '',\n footerMenuItems: [],\n hideFooterMenu: false,\n corporatePhoneNumber: '',\n hideLogoLink: false,\n hideCookieBanner: false,\n isSecure: false\n};\n\nFooter.propTypes = {\n brightEdgeBody: PropTypes.string,\n brightEdgeClose: PropTypes.string,\n ccpaBanner: ccpaBannerShape,\n corporateAddress: PropTypes.string.isRequired,\n corporatePhoneNumber: PropTypes.string,\n footerLegalText: PropTypes.string,\n footerMenuItems: PropTypes.arrayOf(PropTypes.object),\n globalImages: globalImage.isRequired,\n hideFooterMenu: PropTypes.bool,\n legalMenuItems: PropTypes.arrayOf(PropTypes.object).isRequired,\n footerSubsidiaryImageAltText: PropTypes.string.isRequired,\n hideCookieBanner: PropTypes.bool,\n hideLogoLink: PropTypes.bool,\n isSecure: PropTypes.bool\n};\n\nexport default Footer;\n","import React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useCssVariables } from '../../../utilities';\n\nconst Statistic = ({ statistic }) => {\n const statisticRef = useRef(null);\n\n useCssVariables(statisticRef, {\n '--divider-color': statistic.dividerColor,\n '--statistic-main-text-color': statistic.mainTextColor,\n '--statistic-subheading-color': statistic.subheadingTextColor\n });\n\n return (\n \n
{statistic.mainText} \n
\n
{statistic.subheading}
\n
\n );\n};\n\nStatistic.defaultProps = {\n statistic: {\n subheading: ''\n }\n};\n\nStatistic.propTypes = {\n statistic: PropTypes.shape({\n mainText: PropTypes.string.isRequired,\n mainTextColor: PropTypes.string.isRequired,\n subheading: PropTypes.string,\n subheadingTextColor: PropTypes.string.isRequired,\n dividerColor: PropTypes.string.isRequired\n })\n};\n\nexport default Statistic;\n","import React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { Element } from 'react-scroll';\nimport { useCssVariables } from '../../../utilities';\nimport { globalComponentDefaults, globalComponentProperties } from '../../../types';\n\nimport GlobalComponentContainer from '../GlobalComponentContainer';\nimport ContentDivider from '../shared/ContentDivider';\nimport ConditionalWrapper from '../../shared/conditionalWrapper/ConditionalWrapper';\nimport Statistic from './Statistic';\n\nconst StatisticsComponent = ({\n parentPageTitle,\n parentPageUrl,\n prettyUrlTitle,\n shortDescription,\n title,\n hasContentDivider,\n statistics,\n backgroundColor,\n headingTextColor\n}) => {\n const statisticsComponentRef = useRef(null);\n\n useCssVariables(statisticsComponentRef, {\n '--background-color': backgroundColor,\n '--heading-text-color': headingTextColor\n });\n\n return (\n \n \n
\n
{children} }\n >\n {title && (\n \n )}\n \n {statistics.map(statistic => (\n \n ))}\n
\n {hasContentDivider && }\n \n
\n
\n \n );\n};\n\nStatisticsComponent.defaultProps = {\n ...globalComponentDefaults,\n prettyUrlTitle: '',\n title: '',\n statistics: []\n};\n\nStatisticsComponent.propTypes = {\n ...globalComponentProperties,\n backgroundColor: PropTypes.string.isRequired,\n headingTextColor: PropTypes.string.isRequired,\n prettyUrlTitle: PropTypes.string,\n statistics: PropTypes.arrayOf(\n PropTypes.shape({\n mainText: PropTypes.string.isRequired,\n mainTextColor: PropTypes.string.isRequired,\n subheading: PropTypes.string,\n dividerColor: PropTypes.string.isRequired\n })\n )\n};\n\nexport default StatisticsComponent;\n","// eslint-disable-next-line import/prefer-default-export\nexport const BUTTON_ALIGNMENTS = {\n left: 'flex-start',\n center: 'center',\n right: 'flex-end'\n};\n","import React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { Element } from 'react-scroll';\nimport { ctaButtonShape } from '../../../types';\nimport { useCssVariables } from '../../../utilities';\nimport { BUTTON_ALIGNMENTS } from '../../../constants/quick-cta';\nimport CtaButton from '../shared/CtaButton';\n\nconst QuickCtaComponent = ({ alignment, ctaButton, prettyUrlTitle }) => {\n const quickCtaRef = useRef();\n useCssVariables(quickCtaRef, {\n '--button-alignment': BUTTON_ALIGNMENTS[alignment]\n });\n\n return (\n \n \n \n );\n};\n\nQuickCtaComponent.defaultProps = {\n prettyUrlTitle: ''\n};\n\nQuickCtaComponent.propTypes = {\n alignment: PropTypes.string.isRequired,\n ctaButton: ctaButtonShape.isRequired,\n prettyUrlTitle: PropTypes.string\n};\n\nexport default QuickCtaComponent;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Player } from '@lottiefiles/react-lottie-player';\nimport LazyLoadImg from '../shared/LazyLoadImg';\nimport ConditionalWrapper from '../../shared/conditionalWrapper/ConditionalWrapper';\nimport DesktopContainer from '../../shared/DesktopContainer';\nimport TabletAndMobileContainer from '../../shared/TabletAndMobileContainer';\n\nimport { sizedImageShape, animationShape } from '../../../types';\n\nconst Item = ({ altText, description, image, link, target, animation }) => {\n const safeDescription = description\n ? description.replaceAll('<\\\\script', '')\n : '';\n const hasAnimation = animation && animation.animationUrl;\n const hasImage = image && image.url;\n const hasMedia = hasAnimation || hasImage;\n\n return (\n \n
\n {hasMedia && (\n
(\n \n {children}\n \n )}\n >\n {hasImage ? (\n \n ) : (\n <>\n \n \n \n \n \n \n >\n )}\n \n )}\n {safeDescription && (\n
\n )}\n
\n
\n );\n};\n\nItem.defaultProps = {\n altText: null,\n description: null,\n image: {},\n link: null,\n target: null,\n animation: {}\n};\n\nItem.propTypes = {\n altText: PropTypes.string,\n description: PropTypes.string,\n image: sizedImageShape,\n link: PropTypes.string,\n target: PropTypes.string,\n animation: animationShape\n};\n\nexport default Item;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Element } from 'react-scroll';\n\nimport ConditionalWrapper from '../../shared/conditionalWrapper/ConditionalWrapper';\nimport GlobalComponentContainer from '../GlobalComponentContainer';\nimport ContentDivider from '../shared/ContentDivider';\n\nimport Item from './Item';\n\nconst MultipleItemComponent = ({\n hasContentDivider,\n parentPageTitle,\n parentPageUrl,\n prettyUrlTitle,\n shortDescription,\n thirdsGrid,\n title,\n items\n}) => {\n return (\n \n \n
\n
{children} }\n >\n \n \n {items.map(item => (\n \n ))}\n
\n \n
\n {hasContentDivider &&
}\n
\n \n );\n};\n\nMultipleItemComponent.defaultProps = {\n hasContentDivider: false,\n parentPageTitle: null,\n parentPageUrl: null,\n prettyUrlTitle: '',\n shortDescription: null,\n thirdsGrid: false,\n title: null,\n items: []\n};\n\nMultipleItemComponent.propTypes = {\n hasContentDivider: PropTypes.bool,\n parentPageTitle: PropTypes.string,\n parentPageUrl: PropTypes.string,\n prettyUrlTitle: PropTypes.string,\n shortDescription: PropTypes.string,\n thirdsGrid: PropTypes.bool,\n title: PropTypes.string,\n items: PropTypes.arrayOf(PropTypes.object)\n};\n\nexport default MultipleItemComponent;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Element } from 'react-scroll';\n\nimport { productNavigationItem } from '../../../types';\nimport ContentDivider from '../shared/ContentDivider';\nimport ConditionalWrapper from '../../shared/conditionalWrapper/ConditionalWrapper';\n\nimport arrowLeft from '../../../images/icons/layout/Arrow-Left-Blue.svg';\nimport arrowRight from '../../../images/icons/layout/Arrow-Right-Blue.svg';\nimport { PREVIOUS, NEXT } from '../../../constants/expansion-titles';\n\nconst ProductNavigationComponent = ({\n hasContentDivider,\n nextProduct,\n prettyUrlTitle,\n previousProduct\n}) => {\n return (\n \n \n
{children} }\n >\n \n {previousProduct && (\n
\n )}\n {nextProduct && (\n
\n )}\n
\n {hasContentDivider && }\n \n
\n \n );\n};\n\nProductNavigationComponent.defaultProps = {\n hasContentDivider: false,\n nextProduct: {},\n prettyUrlTitle: '',\n previousProduct: {}\n};\n\nProductNavigationComponent.propTypes = {\n hasContentDivider: PropTypes.bool,\n nextProduct: PropTypes.shape(productNavigationItem),\n prettyUrlTitle: PropTypes.string,\n previousProduct: PropTypes.shape(productNavigationItem)\n};\n\nexport default ProductNavigationComponent;\n","export const OVERVIEW = 'Overview';\nexport const LEARN_MORE_LINK = 'Learn More';\nexport const NEWSROOM_READ_MORE = 'Read More';\nexport const BACK_BUTTON = 'Back to homepage';\nexport const PREVIOUS = 'Prev';\nexport const NEXT = 'Next';\n","import { apiPostService } from './baseApi.service';\n\nexport default function logConversion(conversionIdentifier) {\n return (async () => {\n return apiPostService('/api/conversion/logconversion', conversionIdentifier);\n })();\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Element } from 'react-scroll';\nimport ConditionalWrapper from '../../shared/conditionalWrapper/ConditionalWrapper';\nimport LazyLoadImg from '../shared/LazyLoadImg';\nimport logConversion from '../../../services/conversion.service';\n\nimport { sizedImageShape } from '../../../types';\n\nconst ConversionLinkComponent = ({\n alignment,\n altText,\n backgroundColor,\n contentTitle,\n conversionIdentifier,\n ctaButtonBackgroundColor,\n ctaButtonTarget,\n ctaButtonText,\n ctaButtonTextColor,\n ctaButtonUrl,\n description,\n image,\n imagePosition,\n imageUrl,\n imageUrlTarget,\n prettyUrlTitle,\n title,\n titleTextColor\n}) => {\n const logConversionAndRoute = () => {\n logConversion(conversionIdentifier);\n\n if (ctaButtonTarget === '_self' || ctaButtonTarget === '') {\n window.location.href = ctaButtonUrl;\n } else {\n window.open(ctaButtonUrl, '_blank');\n }\n };\n const hasImage = image && image.url;\n\n return (\n \n \n \n
\n {contentTitle &&
{contentTitle} }\n
\n {description && (\n
\n )}\n {hasImage && (\n
\n )}\n
\n
\n
\n \n \n
\n
\n {title && (\n
\n )}\n\n
\n
\n logConversionAndRoute()}\n type=\"button\"\n style={{\n color: ctaButtonTextColor\n }}\n >\n {ctaButtonText}\n \n
\n
\n
\n
\n
\n \n \n );\n};\n\nConversionLinkComponent.defaultProps = {\n altText: null,\n contentTitle: '',\n ctaButtonTarget: '',\n description: '',\n image: {},\n imageUrl: '',\n imageUrlTarget: '',\n prettyUrlTitle: ''\n};\n\nConversionLinkComponent.propTypes = {\n altText: PropTypes.string,\n alignment: PropTypes.string.isRequired,\n backgroundColor: PropTypes.string.isRequired,\n contentTitle: PropTypes.string,\n conversionIdentifier: PropTypes.string.isRequired,\n ctaButtonBackgroundColor: PropTypes.string.isRequired,\n ctaButtonTarget: PropTypes.string,\n ctaButtonText: PropTypes.string.isRequired,\n ctaButtonTextColor: PropTypes.string.isRequired,\n ctaButtonUrl: PropTypes.string.isRequired,\n description: PropTypes.string,\n image: sizedImageShape,\n imagePosition: PropTypes.string.isRequired,\n imageUrl: PropTypes.string,\n imageUrlTarget: PropTypes.string,\n prettyUrlTitle: PropTypes.string,\n title: PropTypes.string.isRequired,\n titleTextColor: PropTypes.string.isRequired\n};\n\nexport default ConversionLinkComponent;\n","export const BANNER_TYPES = {\n image: 'image',\n color: 'color'\n};\n\nexport const BANNER_ALIGNMENTS = {\n left: {\n textAlign: 'left',\n justifyItems: 'flex-start'\n },\n center: {\n textAlign: 'center',\n justifyItems: 'center'\n },\n right: {\n textAlign: 'right',\n justifyItems: 'flex-end'\n }\n};\n","import React, { useRef } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { BANNER_TYPES, BANNER_ALIGNMENTS } from '../../../constants/banner';\nimport { useCssVariables } from '../../../utilities';\nimport { ctaButtonShape, sizedImageShape } from '../../../types';\nimport DesktopAndTabletContainer from '../../shared/DesktopAndTabletContainer';\nimport MobileContainer from '../../shared/MobileContainer';\nimport LazyLoadImg from '../shared/LazyLoadImg';\nimport CtaButton from '../shared/CtaButton';\n\nconst BannerComponent = ({\n bannerTitle,\n bannerText,\n bannerTextColor,\n isTopLevelHeading,\n bannerAlignment,\n bannerType,\n desktopImage,\n desktopImageAlt,\n mobileImage,\n mobileImageAlt,\n backgroundColor,\n preButtonText,\n ctaButtons\n}) => {\n const bannerComponentRef = useRef(null);\n\n useCssVariables(bannerComponentRef, {\n '--grid-columns': Math.min(3, ctaButtons.length)\n });\n\n const headingLevel = () => (isTopLevelHeading ? 1 : 2);\n const HeadingLevelTag = `h${headingLevel()}`;\n\n const bannerTextColorStyle = {\n color: bannerTextColor ?? '#FFF'\n };\n\n const bannerColorStyle = {\n backgroundColor: bannerType === BANNER_TYPES.color ? backgroundColor : 'transparent'\n };\n\n return (\n \n
\n \n {desktopImage && (\n \n )}\n \n \n {mobileImage && (\n \n )}\n \n
\n\n
\n
\n {bannerTitle}\n \n {bannerText &&
{bannerText}
}\n {preButtonText &&
{preButtonText}
}\n {!!ctaButtons.length && (\n
\n {ctaButtons.map((ctaButton, index) => (\n // eslint-disable-next-line react/no-array-index-key\n \n ))}\n
\n )}\n
\n
\n );\n};\n\nBannerComponent.defaultProps = {\n backgroundColor: '',\n preButtonText: '',\n ctaButtons: []\n};\n\nBannerComponent.propTypes = {\n bannerTitle: PropTypes.string.isRequired,\n bannerText: PropTypes.string.isRequired,\n bannerTextColor: PropTypes.string.isRequired,\n isTopLevelHeading: PropTypes.bool.isRequired,\n bannerAlignment: PropTypes.oneOf(Object.keys(BANNER_ALIGNMENTS)).isRequired,\n bannerType: PropTypes.oneOf(Object.keys(BANNER_TYPES)).isRequired,\n desktopImage: sizedImageShape.isRequired,\n desktopImageAlt: PropTypes.string.isRequired,\n mobileImage: sizedImageShape.isRequired,\n mobileImageAlt: PropTypes.string.isRequired,\n backgroundColor: PropTypes.string,\n preButtonText: PropTypes.string,\n ctaButtons: PropTypes.arrayOf(ctaButtonShape)\n};\n\nexport default BannerComponent;\n","import React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport LazyLoadImg from '../shared/LazyLoadImg';\nimport { useCssVariables } from '../../../utilities';\nimport { sizedImageShape } from '../../../types';\n\nconst CalloutComponent = ({\n text,\n url,\n urlTarget,\n backgroundImage,\n backgroundImageAlt,\n hoverBackgroundColor\n}) => {\n const calloutComponentRef = useRef();\n\n useCssVariables(calloutComponentRef, {\n '--hover-background-color': hoverBackgroundColor\n });\n\n return (\n \n );\n};\n\nCalloutComponent.defaultProps = {\n backgroundImageAlt: ''\n};\n\nCalloutComponent.propTypes = {\n text: PropTypes.string.isRequired,\n url: PropTypes.string.isRequired,\n urlTarget: PropTypes.string.isRequired,\n backgroundImage: sizedImageShape.isRequired,\n backgroundImageAlt: PropTypes.string,\n hoverBackgroundColor: PropTypes.string.isRequired\n};\n\nexport default CalloutComponent;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Element } from 'react-scroll';\n\nimport {\n sizedImageShape,\n globalComponentDefaults,\n globalComponentProperties\n} from '../../../types';\nimport ConditionalWrapper from '../../shared/conditionalWrapper/ConditionalWrapper';\nimport GlobalComponentContainer from '../GlobalComponentContainer';\nimport CalloutComponent from './CalloutComponent';\n\nconst TwoColumnCalloutComponent = ({\n prettyUrlTitle,\n parentPageTitle,\n parentPageUrl,\n shortDescription,\n title,\n leftCalloutText,\n leftCalloutUrl,\n leftCalloutUrlTarget,\n leftCalloutBackgroundImage,\n leftCalloutHoverBackgroundColor,\n rightCalloutText,\n rightCalloutUrl,\n rightCalloutUrlTarget,\n rightCalloutBackgroundImage,\n rightCalloutHoverBackgroundColor\n}) => (\n \n
\n
{children} }\n >\n {title && (\n \n )}\n \n \n \n
\n \n
\n
\n);\n\nTwoColumnCalloutComponent.defaultProps = {\n ...globalComponentDefaults\n};\n\nTwoColumnCalloutComponent.propTypes = {\n ...globalComponentProperties,\n leftCalloutText: PropTypes.string.isRequired,\n leftCalloutUrl: PropTypes.string.isRequired,\n leftCalloutUrlTarget: PropTypes.string.isRequired,\n leftCalloutBackgroundImage: sizedImageShape.isRequired,\n leftCalloutHoverBackgroundColor: PropTypes.string.isRequired,\n rightCalloutText: PropTypes.string.isRequired,\n rightCalloutUrl: PropTypes.string.isRequired,\n rightCalloutUrlTarget: PropTypes.string.isRequired,\n rightCalloutBackgroundImage: sizedImageShape.isRequired,\n rightCalloutHoverBackgroundColor: PropTypes.string.isRequired\n};\n\nexport default TwoColumnCalloutComponent;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport LazyLoadImg from '../shared/LazyLoadImg';\n\nimport { sizedImageShape } from '../../../types';\n\nconst Item = ({ altText, description, image, link, target, borderColor }) => {\n const safeDescription = description\n ? description.replaceAll('<\\\\script', '')\n : '';\n const hasImage = image && image.url;\n const borderStyle = {\n border: '2px solid ',\n color: borderColor\n };\n\n return (\n \n );\n};\n\nItem.defaultProps = {\n altText: null,\n description: null,\n image: {},\n link: null,\n target: null,\n borderColor: null\n};\n\nItem.propTypes = {\n altText: PropTypes.string,\n description: PropTypes.string,\n image: sizedImageShape,\n link: PropTypes.string,\n target: PropTypes.string,\n borderColor: PropTypes.string\n};\n\nexport default Item;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Element } from 'react-scroll';\n\nimport ConditionalWrapper from '../../shared/conditionalWrapper/ConditionalWrapper';\nimport GlobalComponentContainer from '../GlobalComponentContainer';\nimport ContentDivider from '../shared/ContentDivider';\n\nimport Item from './Item';\n\nconst MaterialItemsComponent = ({\n hasContentDivider,\n parentPageTitle,\n parentPageUrl,\n prettyUrlTitle,\n shortDescription,\n thirdsGrid,\n title,\n items\n}) => {\n return (\n \n \n
\n
{children} }\n >\n \n \n {items.map(item => (\n \n ))}\n
\n \n
\n {hasContentDivider &&
}\n
\n \n );\n};\n\nMaterialItemsComponent.defaultProps = {\n hasContentDivider: false,\n parentPageTitle: null,\n parentPageUrl: null,\n prettyUrlTitle: '',\n shortDescription: null,\n thirdsGrid: false,\n title: null,\n items: []\n};\n\nMaterialItemsComponent.propTypes = {\n hasContentDivider: PropTypes.bool,\n parentPageTitle: PropTypes.string,\n parentPageUrl: PropTypes.string,\n prettyUrlTitle: PropTypes.string,\n shortDescription: PropTypes.string,\n thirdsGrid: PropTypes.bool,\n title: PropTypes.string,\n items: PropTypes.arrayOf(PropTypes.object)\n};\n\nexport default MaterialItemsComponent;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport LazyLoadImg from '../shared/LazyLoadImg';\n\nimport { sizedImageShape } from '../../../types';\n\nconst Item = ({ altText, description, image, link, target, borderColor }) => {\n const hasImage = image && image.url;\n const borderStyle = {\n border: '2px solid ',\n color: borderColor\n };\n\n return (\n \n
\n
\n {description &&
}\n
\n
\n );\n};\n\nItem.defaultProps = {\n altText: null,\n description: null,\n image: {},\n link: null,\n target: null,\n borderColor: null\n};\n\nItem.propTypes = {\n altText: PropTypes.string,\n description: PropTypes.string,\n image: sizedImageShape,\n link: PropTypes.string,\n target: PropTypes.string,\n borderColor: PropTypes.string\n};\n\nexport default Item;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Element } from 'react-scroll';\n\nimport ConditionalWrapper from '../../shared/conditionalWrapper/ConditionalWrapper';\nimport GlobalComponentContainer from '../GlobalComponentContainer';\nimport ContentDivider from '../shared/ContentDivider';\n\nimport Item from './ItemWithDescription';\n\nconst MaterialItemsWithDescriptionComponent = ({\n hasContentDivider,\n parentPageTitle,\n parentPageUrl,\n prettyUrlTitle,\n shortDescription,\n thirdsGrid,\n title,\n items\n}) => {\n return (\n \n \n
\n
{children} }\n >\n \n \n {items.map(item => (\n \n ))}\n
\n \n
\n {hasContentDivider &&
}\n
\n \n );\n};\n\nMaterialItemsWithDescriptionComponent.defaultProps = {\n hasContentDivider: false,\n parentPageTitle: null,\n parentPageUrl: null,\n prettyUrlTitle: '',\n shortDescription: null,\n thirdsGrid: false,\n title: null,\n items: []\n};\n\nMaterialItemsWithDescriptionComponent.propTypes = {\n hasContentDivider: PropTypes.bool,\n parentPageTitle: PropTypes.string,\n parentPageUrl: PropTypes.string,\n prettyUrlTitle: PropTypes.string,\n shortDescription: PropTypes.string,\n thirdsGrid: PropTypes.bool,\n title: PropTypes.string,\n items: PropTypes.arrayOf(PropTypes.object)\n};\n\nexport default MaterialItemsWithDescriptionComponent;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst SitemapListItem = ({ url, name }) => (\n \n {name} \n \n);\n\nSitemapListItem.propTypes = {\n url: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired\n};\n\nexport default SitemapListItem;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport SitemapListItem from './SitemapListItem';\nimport { menuItemShape } from '../../types';\n\nconst SitemapLanding = ({ footerMenu, legalMenu, searchUrl }) => (\n \n
\n
\n {footerMenu\n .map(menuItem => ({\n ...menuItem,\n children: menuItem.children.filter(item => item.icon === null)\n }))\n .filter(menuItem => menuItem.children.length)\n .map(menuItem => (\n
\n \n {menuItem.children && menuItem.children.length ? (\n menuItem.children.map(subItem => (\n \n ))\n ) : (\n \n )}\n \n \n ))}\n
\n \n {legalMenu\n .filter(\n // Probably not the best solution. However, this is not a page that will be changed much, if at all.\n menuItem =>\n !(\n menuItem.name.toLowerCase().includes('sitemap') ||\n menuItem.url.toLowerCase().includes('sitemap')\n )\n )\n .map(menuItem => (\n \n ))}\n \n \n \n
\n
\n
\n);\n\nSitemapLanding.defaultProps = {\n legalMenu: [],\n searchUrl: ''\n};\n\nSitemapLanding.propTypes = {\n footerMenu: PropTypes.arrayOf(menuItemShape).isRequired,\n legalMenu: PropTypes.arrayOf(menuItemShape),\n searchUrl: PropTypes.string\n};\n\nexport default SitemapLanding;\n","import { scroller } from 'react-scroll';\n\nexport function scrollToParameter(value, hasAlerts, key) {\n return (async () => {\n const anchorSettings = {\n duration: 500,\n delay: 250,\n smooth: true,\n offset: hasAlerts ? -220 : -140\n };\n const parameter = value;\n\n // Logic for global component anchor link\n if (key.toLowerCase() === 'section') {\n // Check if element exists\n scroller.scrollTo(parameter, anchorSettings);\n }\n // Logic for faq item anchor link\n if (key.toLowerCase() === 'faq') {\n const faqItem = document.getElementById(parameter);\n\n // Check if element exists\n if (faqItem !== null) {\n // If faq item anchor is nested then trigger click of primary faq container\n if (faqItem.parentElement.classList.contains('secondary')) {\n const primaryContainer = faqItem.closest('.primary');\n primaryContainer.childNodes[0].click();\n }\n // Scroll to selected faq\n scroller.scrollTo(parameter, anchorSettings);\n // Trigger click of selected faq button to expand\n document.getElementById(parameter).childNodes[0].click();\n }\n }\n })();\n}\n\nexport function getAllFAQButtons(hasAlerts) {\n return (async () => {\n const list = document.getElementsByClassName('anchor-link');\n for (let i = 0; i < list.length; i += 1) {\n list[i].onclick = () => {\n const value = list[i].getAttribute('faq');\n scrollToParameter(value, hasAlerts, 'faq');\n };\n }\n })();\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport getQueryStringParameters from '../../../services/queryString.service';\nimport { scrollToParameter, getAllFAQButtons } from '../../../services/scroller.service';\n\nconst Scroller = ({ hasAlerts }) => {\n getQueryStringParameters().then(queryStringParameters => {\n Object.keys(queryStringParameters).forEach(key => {\n scrollToParameter(queryStringParameters[key], hasAlerts, key);\n });\n });\n getAllFAQButtons(hasAlerts);\n\n return ;\n};\n\nScroller.defaultProps = {\n hasAlerts: []\n};\n\nScroller.propTypes = {\n hasAlerts: PropTypes.bool\n};\n\nexport default Scroller;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport ReactDOMServer from 'react-dom/server';\nimport Helmet from 'react-helmet';\n\nimport getStore from './state/store';\nimport initializeSite from './services/initialization.service';\n\nimport ContactInfoBar from './components/contactUs/ContactInfoBar';\n\nimport NavigationMenu from './components/layout/NavigationMenu';\nimport SecureNavigation from './components/layout/SecureNavigation';\n\nimport TestimonialComponent from './components/widgets/testimonials/TestimonialComponent';\nimport IntroComponent from './components/widgets/intro/IntroComponent';\nimport TwoColumnIntroComponent from './components/widgets/twoColumnIntro/TwoColumnIntroComponent';\nimport HighlightsComponent from './components/widgets/highlights/HighlightsComponent';\nimport StatisticsComponent from './components/widgets/statistics/StatisticsComponent';\nimport FeaturedContentImageComponent from './components/widgets/featuredContent/ImageComponent';\nimport FeaturedContentNewsroomComponent from './components/widgets/featuredContent/NewsroomComponent';\nimport CaseStudiesComponent from './components/widgets/caseStudies/CaseStudiesComponent';\nimport BusinessUnitSocialFooterComponent from './components/widgets/businessUnits/SocialFooterComponent';\nimport DetailedContentComponent from './components/widgets/detailedContent/DetailedContentComponent';\nimport FeaturedContentVideoComponent from './components/widgets/featuredContent/VideoComponent';\nimport ProductsServicesComponent from './components/widgets/productsServices/ProductsServicesComponent';\nimport LegalDisclaimerComponent from './components/widgets/legalDisclaimer/legalDisclaimerComponent';\nimport TextComponent from './components/widgets/text/TextComponent';\nimport SearchBarComponent from './components/widgets/searchBar/SearchBarComponent';\nimport HtmlSnippetComponent from './components/widgets/htmlSnippet/HtmlSnippetComponent';\nimport QuickCtaComponent from './components/widgets/quickCta/QuickCtaComponent';\nimport FaqComponent from './components/widgets/faq/FaqComponent';\nimport MultipleItemComponent from './components/widgets/multipleItem/MultipleItemComponent';\nimport GeneralTextComponent from './components/widgets/generalText/GeneralTextComponent';\nimport PrivacyPolicyComponent from './components/widgets/privacyPolicy/PrivacyPolicyComponent';\nimport ProductNavigationComponent from './components/widgets/productNavigation/ProductNavigationComponent';\nimport ConversionLinkComponent from './components/widgets/conversionLink/ConversionLinkComponent';\nimport BannerComponent from './components/widgets/banner/BannerComponent';\nimport TwoColumnWithMediaComponent from './components/widgets/twoColumnWithMedia/TwoColumnWithMediaComponent';\nimport FeaturedDetailedContentComponent from './components/widgets/featuredDetailedContent/FeaturedDetailedContentComponent';\nimport FeaturedImageTwoColumnComponent from './components/widgets/featuredImageTwoColumn/FeaturedImageTwoColumnComponent';\nimport TwoColumnCalloutComponent from './components/widgets/twoColumnCallout/TwoColumnCalloutComponent';\nimport FullWidthImageCarouselComponent from './components/widgets/fullWidthImageCarousel/FullWidthImageCarouselComponent';\nimport MaterialItemsComponent from './components/widgets/materialItems/MaterialItemsComponent';\nimport MaterialItemsWithDescriptionComponent from './components/widgets/materialItems/MaterialItemsWithDescriptionComponent';\nimport ToolkitContentSectionComponent from './components/widgets/toolkitContent/ToolkitContentSectionComponent';\n\n// Landing Pages\nimport NewsroomDetailContent from './components/newsroom/newsroomDetail/NewsroomDetailContent';\nimport NewsroomLanding from './components/newsroom/newsroomLanding/NewsroomLanding';\nimport NewsroomPodcastContent from './components/newsroom/newsroomPodcast/NewsroomPodcastContent';\nimport ContactUsLanding from './components/contactUs/ContactUsLanding';\nimport SearchLanding from './components/searchLanding/SearchLanding';\nimport SitemapLanding from './components/sitemap/SitemapLanding';\n\n// Layout Components\nimport Footer from './components/layout/Footer';\n\n// Shared Components\nimport BreadCrumb from './components/shared/breadCrumb/BreadCrumb';\nimport Scroller from './components/shared/scroller/Scroller';\nimport CCPABanner from './components/shared/ccpaBanner/CCPABanner';\nimport InternetExplorerWarningModal from './components/shared/InternetExplorerWarningModal';\n\nconst store = getStore();\n\ninitializeSite(store.dispatch);\n\n// All JavaScript in here will be loaded server-side\n// Expose components globally so ReactJS.NET can use them\nglobal.React = React;\nglobal.ReactDOM = ReactDOM;\nglobal.ReactDOMServer = ReactDOMServer;\nglobal.Helmet = Helmet;\n\n// Global components\nglobal.NavigationMenu = NavigationMenu;\nglobal.SecureNavigation = SecureNavigation;\n\n// Widget components\nglobal.ProductsServicesComponent = ProductsServicesComponent;\nglobal.TestimonialComponent = TestimonialComponent;\nglobal.IntroComponent = IntroComponent;\nglobal.TwoColumnIntroComponent = TwoColumnIntroComponent;\nglobal.HighlightsComponent = HighlightsComponent;\nglobal.StatisticsComponent = StatisticsComponent;\nglobal.FeaturedContentImageComponent = FeaturedContentImageComponent;\nglobal.FeaturedContentVideoComponent = FeaturedContentVideoComponent;\nglobal.FeaturedContentNewsroomComponent = FeaturedContentNewsroomComponent;\nglobal.BusinessUnitSocialFooterComponent = BusinessUnitSocialFooterComponent;\nglobal.DetailedContentComponent = DetailedContentComponent;\nglobal.ProductsServicesComponent = ProductsServicesComponent;\nglobal.LegalDisclaimerComponent = LegalDisclaimerComponent;\nglobal.TextComponent = TextComponent;\nglobal.SearchBarComponent = SearchBarComponent;\nglobal.HtmlSnippetComponent = HtmlSnippetComponent;\nglobal.QuickCtaComponent = QuickCtaComponent;\nglobal.FaqComponent = FaqComponent;\nglobal.MultipleItemComponent = MultipleItemComponent;\nglobal.GeneralTextComponent = GeneralTextComponent;\nglobal.PrivacyPolicyComponent = PrivacyPolicyComponent;\nglobal.ProductNavigationComponent = ProductNavigationComponent;\nglobal.ConversionLinkComponent = ConversionLinkComponent;\nglobal.BannerComponent = BannerComponent;\nglobal.TwoColumnWithMediaComponent = TwoColumnWithMediaComponent;\nglobal.FeaturedDetailedContentComponent = FeaturedDetailedContentComponent;\nglobal.FeaturedImageTwoColumnComponent = FeaturedImageTwoColumnComponent;\nglobal.TwoColumnCalloutComponent = TwoColumnCalloutComponent;\nglobal.CaseStudiesComponent = CaseStudiesComponent;\nglobal.FullWidthImageCarouselComponent = FullWidthImageCarouselComponent;\nglobal.MaterialItemsComponent = MaterialItemsComponent;\nglobal.MaterialItemsWithDescriptionComponent = MaterialItemsWithDescriptionComponent;\nglobal.ToolkitContentSectionComponent = ToolkitContentSectionComponent;\n\n// Content components\nglobal.NewsroomDetailContent = NewsroomDetailContent;\nglobal.NewsroomLanding = NewsroomLanding;\nglobal.NewsroomPodcastContent = NewsroomPodcastContent;\nglobal.ContactUsLanding = ContactUsLanding;\nglobal.ContactInfoBar = ContactInfoBar;\nglobal.SearchLanding = SearchLanding;\nglobal.SitemapLanding = SitemapLanding;\n\n// Layout Components\nglobal.Footer = Footer;\n\n// Shared Components\nglobal.BreadCrumb = BreadCrumb;\nglobal.Scroller = Scroller;\nglobal.CCPABanner = CCPABanner;\nglobal.InternetExplorerWarningModal = InternetExplorerWarningModal;\n"],"sourceRoot":""}