{"version":3,"file":"Footer-Chunk-32c4d5f68f50923fc6c9.js","mappings":"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","sources":["webpack://nikon-client/./components/atoms/Button/Button.tsx","webpack://nikon-client/./components/atoms/Image/Image.tsx","webpack://nikon-client/./utility/hooks/useHorizontalGrabScroll.ts","webpack://nikon-client/./utility/hooks/useHorizontalScrollShadows.ts","webpack://nikon-client/./components/atoms/ShadowContainerHorizontal/ShadowContainerHorizontal.tsx","webpack://nikon-client/./components/molecules/StoreLocatorAutosuggest/StoreLocatorAutosuggest.tsx","webpack://nikon-client/./components/molecules/BreadcrumbLinks/BreadcrumbLinks.tsx","webpack://nikon-client/./components/organisms/Breadcrumb/Breadcrumb.tsx","webpack://nikon-client/./components/atoms/SupportButton/SupportButton.tsx","webpack://nikon-client/./components/organisms/Footer/LinksList.tsx","webpack://nikon-client/./components/organisms/Footer/LinksSection.tsx","webpack://nikon-client/./components/organisms/Footer/Footer.tsx","webpack://nikon-client/./models/enums/BreakpointEnum.ts","webpack://nikon-client/./models/enums/ScrollProgressEnum.ts","webpack://nikon-client/./services/storeLocatorAutocomplete.ts","webpack://nikon-client/./services/storeLocatorSearch.ts","webpack://nikon-client/./utility/helpers/gtm.ts","webpack://nikon-client/./utility/hooks/useBreakpoint.ts","webpack://nikon-client/./utility/hooks/useResizeObserver.ts"],"sourcesContent":["import { ILink } from '@models/ILink';\nimport classNames from 'classnames';\nimport {\n ButtonHTMLAttributes,\n DetailedHTMLProps,\n PropsWithChildren,\n} from 'react';\n\ninterface Props {\n readonly className?: string;\n readonly dataTestId?: string;\n readonly disabled?: boolean;\n readonly editHint?: string;\n readonly link?: ILink;\n readonly linkCallback?: () => void;\n readonly secondary?: boolean;\n readonly secondaryBackgroundClassName?: string;\n readonly isLightMode?: boolean;\n readonly inverted?: boolean;\n}\n\ntype ButtonProps = Props &\n DetailedHTMLProps, HTMLButtonElement>;\n\nconst Button = ({\n children,\n className,\n dataTestId,\n disabled = false,\n editHint,\n link,\n linkCallback,\n secondary = false,\n secondaryBackgroundClassName = 'bg-transparent',\n isLightMode,\n inverted = false,\n ...buttonProps\n}: PropsWithChildren) => {\n const buttonClasses = classNames(\n {\n 'bg-yellow py-1 px-4 text-black-100 hover:bg-yellow-100 focus:bg-yellow-500 active:bg-yellow-500':\n !disabled && !secondary && !inverted,\n //\n [`${secondaryBackgroundClassName} border border-yellow py-[3px] px-[15px] text-black-100 hover:border-yellow-100 hover:bg-yellow-100 hover:text-black-100 focus:border-yellow-500 focus:bg-yellow-500 active:border-yellow-500 active:bg-yellow-500 ${\n isLightMode\n ? ''\n : 'dark:text-white dark:hover:text-black-100 dark:focus:text-black-100 dark:active:text-black-100'\n }`]: !disabled && secondary && !inverted,\n //\n 'bg-grey text-grey-500 py-1 px-4': disabled,\n //\n 'bg-black text-white py-1 px-4 active:bg-grey-600 hover:bg-grey-600 focus:bg-grey-600':\n !disabled && !secondary && inverted,\n },\n 'cta rounded-full inline-block min-h-min select-none',\n className\n );\n\n return link?.url && (link?.name || children) && !disabled ? (\n \n {children || link.name}\n \n ) : (\n \n {children}\n \n );\n};\n\nexport default Button;\n","import BreakpointEnum from '@models/enums/BreakpointEnum';\nimport { IImage } from '@models/IImage';\nimport useBreakpoint from '@utils/hooks/useBreakpoint';\nimport classNames from 'classnames';\nimport { PropsWithChildren, RefObject, useState } from 'react';\n\ninterface Props {\n readonly classes?: string;\n readonly dataTestId?: string;\n readonly epiEdit?: string;\n readonly image?: IImage;\n readonly imageClasses?: string;\n readonly imageRef?:\n | RefObject\n | ((node: HTMLElement | null) => void);\n readonly lazyLoad?: boolean;\n readonly progressiveLoad?: boolean;\n readonly sizes?: string;\n}\n\nconst Image = ({\n children,\n classes,\n dataTestId,\n epiEdit,\n image,\n imageClasses,\n imageRef,\n lazyLoad = true,\n progressiveLoad = true,\n sizes = '',\n}: PropsWithChildren) => {\n const mobileSource = image?.mobile;\n const tabletSource = image?.tablet;\n const desktopSource = image?.desktop;\n const largeDesktopSource = image?.largeDesktop;\n const breakpoint = useBreakpoint() as BreakpointEnum;\n const [isLoaded, setIsLoaded] = useState(false);\n\n if (!desktopSource?.url) return null;\n\n const currentSrc = {\n [BreakpointEnum.Small]: mobileSource,\n [BreakpointEnum.Medium]: tabletSource,\n [BreakpointEnum.Large]: desktopSource,\n [BreakpointEnum.XLarge]: largeDesktopSource,\n };\n\n return (\n \n \n setIsLoaded(true)}\n sizes={sizes}\n src={\n isLoaded && progressiveLoad\n ? currentSrc[breakpoint]?.url\n : mobileSource?.url\n }\n height={currentSrc[breakpoint]?.height}\n width={currentSrc[breakpoint]?.width}\n srcSet={`${mobileSource?.originalUrl} 376w, ${tabletSource?.originalUrl} 768w, ${desktopSource?.originalUrl} 1024w, ${largeDesktopSource?.originalUrl} 1440w`}\n {...(dataTestId && { 'data-testid': dataTestId })}\n />\n {isLoaded && children}\n \n );\n};\n\nexport default Image;\n","import { RefObject, useEffect, useRef, useState } from 'react';\n\nconst useHorizontalGrabScroll = (\n containerRef: RefObject,\n disabled: boolean\n) => {\n const [isMouseDown, setIsMouseDown] = useState(false);\n const mouseScrollPosition = useRef<{\n top: number;\n left: number;\n x: number;\n y: number;\n }>({\n top: 0,\n left: 0,\n x: 0,\n y: 0,\n });\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container?.clientWidth) return;\n\n if (container.clientWidth >= container.scrollWidth || disabled) {\n container.style.cursor = 'inherit';\n return;\n }\n\n if (isMouseDown) {\n container.style.cursor = 'grabbing';\n return;\n }\n\n container.style.cursor = 'grab';\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isMouseDown, disabled]);\n\n useEffect(() => {\n mouseScrollPosition.current = { top: 0, left: 0, x: 0, y: 0 };\n const container = containerRef.current;\n\n if (!container) return () => ({});\n if (disabled) {\n container.scrollTop = 0;\n container.scrollLeft = 0;\n\n return () => ({});\n }\n\n const mouseMoveHandler = (e: MouseEvent) => {\n const dx = e.clientX - mouseScrollPosition.current.x;\n const dy = e.clientY - mouseScrollPosition.current.y;\n\n container.scrollTop = mouseScrollPosition.current.top - dy;\n container.scrollLeft = mouseScrollPosition.current.left - dx;\n };\n\n const mouseUpHandler = () => {\n document.removeEventListener('mousemove', mouseMoveHandler);\n document.removeEventListener('mouseup', mouseUpHandler);\n setIsMouseDown(false);\n };\n\n const mouseDownHandler = (e: MouseEvent) => {\n mouseScrollPosition.current = {\n top: container.scrollTop,\n left: container.scrollLeft,\n x: e.clientX,\n y: e.clientY,\n };\n setIsMouseDown(true);\n\n document.addEventListener('mousemove', mouseMoveHandler);\n document.addEventListener('mouseup', mouseUpHandler);\n };\n\n const onWheel = (e: WheelEvent) => {\n if (e.deltaY === 0) return;\n\n container.scrollTo({\n left: container.scrollLeft + e.deltaY,\n behavior: 'smooth',\n });\n };\n\n container.addEventListener('mousedown', mouseDownHandler);\n container.addEventListener('wheel', onWheel, { passive: true });\n\n return () => {\n container.removeEventListener('mousedown', mouseDownHandler);\n container.removeEventListener('wheel', onWheel);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [disabled]);\n};\n\nexport default useHorizontalGrabScroll;\n","import ScrollProgressEnum from '@models/enums/ScrollProgressEnum';\nimport { useMotionValueEvent, useScroll } from 'framer-motion';\nimport { RefObject, useEffect, useState } from 'react';\n\nconst useHorizontalScrollShadows = (\n containerRef: RefObject,\n threshold: number,\n disabled: boolean\n) => {\n const { scrollXProgress } = useScroll({ container: containerRef });\n const [isStart, setIsStart] = useState(true);\n const [isEnd, setIsEnd] = useState(false);\n const [scrollProgress, setScrollProgress] = useState(\n ScrollProgressEnum.Start\n );\n\n useMotionValueEvent(scrollXProgress, 'change', (value: number) => {\n if (value < threshold) {\n setScrollProgress(ScrollProgressEnum.Start);\n }\n\n if (value >= threshold && value <= 1 - threshold) {\n setScrollProgress(ScrollProgressEnum.Middle);\n }\n\n if (value > 1 - threshold) {\n setScrollProgress(ScrollProgressEnum.End);\n }\n });\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container?.clientWidth || disabled) return;\n\n const { clientWidth, scrollWidth } = container;\n if (clientWidth >= scrollWidth) {\n setIsStart(true);\n setIsEnd(true);\n\n return;\n }\n\n if (scrollProgress === ScrollProgressEnum.Start) {\n setIsStart(true);\n setIsEnd(false);\n }\n\n if (scrollProgress === ScrollProgressEnum.Middle) {\n setIsStart(false);\n setIsEnd(false);\n }\n\n if (scrollProgress === ScrollProgressEnum.End) {\n setIsEnd(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [disabled, scrollProgress]);\n\n return { isStart, isEnd };\n};\n\nexport default useHorizontalScrollShadows;\n","import useHorizontalGrabScroll from '@utils/hooks/useHorizontalGrabScroll';\nimport useHorizontalScrollShadows from '@utils/hooks/useHorizontalScrollShadows';\nimport classNames from 'classnames';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport {\n PropsWithChildren,\n forwardRef,\n useImperativeHandle,\n useRef,\n} from 'react';\n\nexport interface IShadowContainerHorizontalRef {\n readonly scrollTo: (offset: number) => void;\n readonly getOffsetWidth: () => number;\n}\n\ninterface Props {\n readonly className?: string;\n readonly shadowColour?: string;\n readonly threshold?: number;\n readonly showStart?: boolean; // Manually override shadows from a parent component\n readonly showEnd?: boolean;\n readonly disableScroll?: boolean; // Used together with showStart/showEnd to disable scrolling within the container (e.g. when we want to wrap a carousel within some left/right shadows, we want to use the carousel's scrolling/swiping, not the container's one)\n readonly shadowWidth?: string;\n readonly isNoWrapEnabled?: boolean;\n}\n\nconst ShadowContainerHorizontal = forwardRef<\n IShadowContainerHorizontalRef,\n PropsWithChildren\n>(\n (\n {\n children,\n className,\n disableScroll = false,\n shadowColour = 'from-white dark:from-black-100',\n threshold = 0.05,\n showStart = false,\n showEnd = true,\n shadowWidth = 'w-10',\n isNoWrapEnabled = true,\n },\n ref\n ) => {\n const containerRef = useRef(null);\n const { isStart, isEnd } = useHorizontalScrollShadows(\n containerRef,\n threshold,\n disableScroll\n );\n useHorizontalGrabScroll(containerRef, disableScroll);\n\n useImperativeHandle(ref, () => ({\n scrollTo: (leftOffset: number) => {\n containerRef.current?.scrollTo({\n left: leftOffset,\n behavior: 'smooth',\n });\n },\n getOffsetWidth: () => containerRef.current?.offsetWidth ?? 0,\n }));\n\n return (\n
\n \n {(!isStart || showStart) && (\n \n )}\n \n\n \n {children}\n
\n\n {/* isEnd is always false when using showEnd override so !isEnd is always true */}\n \n {!isEnd && showEnd && (\n \n )}\n \n \n );\n }\n);\n\nexport default ShadowContainerHorizontal;\n","import loadable from '@loadable/component';\nimport {\n IStoreLocatorAutocomplete,\n IStoreLocatorPlace,\n} from '@models/IStoreLocatorAutocomplete';\nimport storeLocatorAutocomplete from '@services/storeLocatorAutocomplete';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport classNames from 'classnames';\nimport { useState } from 'react';\nimport { AutosuggestProps } from 'react-autosuggest';\n\nconst Autosuggest = loadable<\n AutosuggestProps\n>(\n () => import(/* webpackChunkName: \"react-autosuggest\" */ 'react-autosuggest')\n);\n\ninterface Props {\n readonly autocompleteEndpoint: string;\n readonly className?: string;\n readonly countryCode: string;\n readonly dataTestId: string;\n readonly queryText: string;\n readonly searchPlaceholderLabel: string;\n readonly type: string;\n readonly onSearch: () => void;\n readonly onSetPlace: (place: IStoreLocatorPlace) => void;\n readonly onSetQueryText: (queryText: string) => void;\n}\n\nconst StoreLocatorAutosuggest = ({\n autocompleteEndpoint,\n className,\n countryCode,\n dataTestId,\n queryText,\n searchPlaceholderLabel,\n type,\n onSearch,\n onSetPlace,\n onSetQueryText,\n}: Props) => {\n const [autoCompleteSuggestions, setAutoCompleteSuggestions] = useState<\n IStoreLocatorAutocomplete[]\n >([]);\n\n const fetchAutoCompleteSuggestions = async ({\n value,\n reason,\n }: {\n value: string;\n reason: string;\n }) => {\n if (reason === 'input-changed') {\n if (value.length < 3) {\n if (autoCompleteSuggestions.length > 0) setAutoCompleteSuggestions([]);\n\n return;\n }\n\n try {\n const autoCompleteResponse = await storeLocatorAutocomplete({\n endpoint: autocompleteEndpoint,\n countryCode,\n searchTerm: value,\n });\n\n setAutoCompleteSuggestions(autoCompleteResponse);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.log({ error });\n }\n }\n };\n\n return (\n \n setAutoCompleteSuggestions([])}\n getSuggestionValue={(suggestion) => suggestion.description}\n renderSuggestion={(suggestion) => {suggestion.description}}\n onSuggestionSelected={(event, { suggestion }) => {\n event.stopPropagation();\n onSetPlace({\n id: suggestion.placeId,\n name: suggestion.description,\n });\n onSetQueryText(suggestion.description);\n }}\n inputProps={{\n value: queryText || '',\n onChange: (_, { newValue }) => {\n onSetQueryText(newValue);\n },\n onKeyUp: (event) => {\n if (event.key === 'Enter' && queryText.length >= 3) {\n onSearch();\n updateDataLayer({\n event: 'searchBar',\n search_term: queryText,\n content_type: `store_listing_${type}`,\n page_type: 'Store Locator',\n });\n }\n },\n placeholder: searchPlaceholderLabel,\n }}\n />\n \n );\n};\n\nexport default StoreLocatorAutosuggest;\n","import Icon from '@atoms/Icon/Icon';\nimport { IBreadcrumbLinks } from '@models/IBreadcrumbLinks';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport useAriaLabels from '@utils/hooks/useAriaLabels';\nimport classNames from 'classnames';\n\nconst BreadcrumbLinks = ({\n activePage,\n links,\n scrollRef,\n isInFooter,\n}: IBreadcrumbLinks) => {\n const { breadcrumbAriaLabel, breadcrumbFooterAriaLabel } = useAriaLabels();\n return (\n \n
    \n {links?.length > 0 &&\n links.map((link, index) => (\n
  • \n {link.name && link.url && (\n <>\n \n updateDataLayer({\n event: 'breadcrumbs',\n content_type: link.name,\n })\n }\n data-testid={`CT-31-Breadcrumbs-Link-Item-${index}`}\n >\n {link.name.length > 15\n ? `${link.name.substring(0, 15)}...`\n : link.name}\n \n\n \n \n )}\n
  • \n ))}\n {activePage && (\n \n {activePage.name && activePage.name.length > 15\n ? `${activePage.name.substring(0, 15)}...`\n : activePage.name}\n \n )}\n
\n \n );\n};\n\nexport default BreadcrumbLinks;\n","import ShadowContainerHorizontal from '@atoms/ShadowContainerHorizontal/ShadowContainerHorizontal';\nimport { IBreadcrumb } from '@models/IBreadcrumb';\nimport BreadcrumbLinks from '@molecules/BreadcrumbLinks/BreadcrumbLinks';\nimport classNames from 'classnames';\nimport { useRef } from 'react';\n\nconst Breadcrumb = ({ links, activePage, isInFooter }: IBreadcrumb) => {\n const scrollRef = useRef(null);\n\n return (\n \n
\n \n \n \n
\n \n );\n};\n\nexport default Breadcrumb;\n","import Icon from '@atoms/Icon/Icon';\nimport { ILink } from '@models/ILink';\nimport useMediaQuery from '@utils/hooks/useMediaQuery';\nimport useWindowScrollPositions from '@utils/hooks/useWindowScrollPosition';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { useEffect, useState } from 'react';\n\ninterface Props {\n readonly link: ILink;\n readonly desktopBottomLimit: number;\n}\n\nconst SupportButton = ({ link, desktopBottomLimit }: Props) => {\n const [bottomPosition, setBottomPosition] = useState(10);\n const { scrollY } = useWindowScrollPositions();\n const isBelowLargeDesktop = useMediaQuery(1440);\n const scrollDistanceForButtonVisibility = isBelowLargeDesktop ? 1000 : 2000;\n\n useEffect(() => {\n const scrollableHeight = document.documentElement.scrollHeight;\n const scrolledPosition = scrollY + window.innerHeight;\n const bottomScrollOffset = scrollableHeight - scrolledPosition;\n\n setBottomPosition(\n bottomScrollOffset <= desktopBottomLimit && !isBelowLargeDesktop\n ? desktopBottomLimit - bottomScrollOffset + 10\n : 10\n );\n }, [desktopBottomLimit, scrollY, isBelowLargeDesktop]);\n\n return (\n
\n \n {scrollY > scrollDistanceForButtonVisibility && (\n \n \n\n {link.name}\n \n )}\n \n
\n );\n};\n\nexport default SupportButton;\n","import { ILink } from '@models/ILink';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport useIsInIFrame from '@utils/hooks/useIsInIFrame';\n\ninterface Props {\n readonly links: ILink[];\n readonly title: string;\n}\n\nconst LinksList = ({ links, title }: Props) => {\n const isInIFrame = useIsInIFrame();\n\n const handleLinkClick = (link: ILink, linkTitle: string) => {\n updateDataLayer({\n event: 'menuUsed',\n content_type: 'footer_menu',\n main_category: linkTitle,\n sub_category: link.name,\n });\n };\n\n return (\n
    \n {links?.map((link) => (\n
  • \n handleLinkClick(link, title)}\n target={isInIFrame ? '_parent' : link.target}\n data-testid=\"CT-02-Footer-Links-List-Link\"\n aria-label={link.name}\n >\n \n \n
  • \n ))}\n
\n );\n};\n\nexport default LinksList;\n","import { ILink } from '@models/ILink';\nimport classNames from 'classnames';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { Dispatch, SetStateAction } from 'react';\nimport LinksList from './LinksList';\n\ninterface Props {\n readonly links: ILink[];\n readonly title: string;\n readonly isOpen: boolean;\n readonly onSetOpenTitle: Dispatch>;\n}\n\nconst LinksSection = ({ links, title, isOpen, onSetOpenTitle }: Props) => (\n
\n {title && (\n onSetOpenTitle(isOpen ? '' : title)}\n data-testid=\"CT-02-Footer-Link-Lists-Title\"\n aria-label={title}\n >\n \n
\n \n \n
\n \n )}\n\n
\n \n
\n\n
\n \n {isOpen && (\n \n \n \n )}\n \n
\n
\n);\n\nexport default LinksSection;\n","import Button from '@atoms/Button/Button';\nimport Icon from '@atoms/Icon/Icon';\nimport Image from '@atoms/Image/Image';\nimport SupportButton from '@atoms/SupportButton/SupportButton';\nimport { IBreadcrumb } from '@models/IBreadcrumb';\nimport { IImage } from '@models/IImage';\nimport ILanguageSelector from '@models/ILanguageSelector';\nimport { ILink } from '@models/ILink';\nimport IListOfLinks from '@models/IListOfLinks';\nimport { IPaymentMethods } from '@models/IPaymentMethods';\nimport { IStoreLocatorPlace } from '@models/IStoreLocatorAutocomplete';\nimport { IStoreLocatorSearch } from '@models/IStoreLocatorSearch';\nimport FooterBanner from '@molecules/FooterBanner/FooterBanner';\nimport StoreLocatorAutosuggest from '@molecules/StoreLocatorAutosuggest/StoreLocatorAutosuggest';\nimport Breadcrumbs from '@organisms/Breadcrumb/Breadcrumb';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport useIsInIFrame from '@utils/hooks/useIsInIFrame';\nimport useResizeObserver from '@utils/hooks/useResizeObserver';\nimport classNames from 'classnames';\nimport qs from 'qs';\nimport { useState } from 'react';\nimport storeLocatorAutocomplete from '../../../services/storeLocatorAutocomplete';\nimport storeLocatorSearch from '../../../services/storeLocatorSearch';\nimport LinksSection from './LinksSection';\n\ninterface Props {\n readonly backToTopButtonText?: string;\n readonly breadcrumb: IBreadcrumb;\n readonly copyrightNotice: string;\n readonly enableFindAStore: boolean;\n readonly enableStickyBackToTopButton: boolean;\n readonly externalSitesLinks: IListOfLinks;\n readonly findAStoreAutocompleteEndpoint: string;\n readonly findAStoreButtonText: string;\n readonly findAStoreCountryCode: string;\n readonly findAStoreHeader: string;\n readonly findAStorePlaceholder: string;\n readonly findAStoreRedirectUrl: string;\n readonly findAStoreSearchEndpoint: string;\n readonly findAStoreSubHeader: string;\n readonly footerLinks?: IListOfLinks[];\n readonly homepageLink?: ILink;\n readonly language: string;\n readonly languageSelector?: ILanguageSelector;\n readonly logo: IImage;\n readonly campaignLogo: IImage;\n readonly secondaryNavigationLinks: ILink[];\n readonly socialLinks: ILink[];\n readonly supportButtonLink: ILink;\n readonly enableSupportButton: boolean;\n readonly paymentMethods?: IPaymentMethods;\n readonly cookieSettingsLabel?: string;\n}\n\nconst Footer = ({\n findAStoreAutocompleteEndpoint,\n findAStoreButtonText,\n findAStoreCountryCode,\n findAStoreHeader,\n findAStorePlaceholder,\n findAStoreRedirectUrl,\n findAStoreSearchEndpoint,\n findAStoreSubHeader,\n backToTopButtonText,\n breadcrumb,\n copyrightNotice,\n enableFindAStore,\n enableStickyBackToTopButton,\n externalSitesLinks,\n footerLinks = [],\n homepageLink,\n language,\n languageSelector,\n logo,\n campaignLogo,\n secondaryNavigationLinks,\n socialLinks,\n supportButtonLink,\n enableSupportButton,\n paymentMethods,\n cookieSettingsLabel,\n}: Props) => {\n const [storeQueryText, setStoreQueryText] = useState('');\n const [place, setPlace] = useState(null);\n const [openLinksSectionTitle, setOpenLinksSectionTitle] = useState('');\n const isInIFrame = useIsInIFrame();\n const [footerBannerRef, { clientHeight: footerBannerHeight }] =\n useResizeObserver();\n const [paymentMethodsRef, { clientHeight: paymentMethodsHeight }] =\n useResizeObserver();\n\n const { url: homepageUrl = '', target: homepageTarget = '_self' } =\n homepageLink || {};\n\n const getFirstAutocompletePlace = async (searchTerm: string) => {\n try {\n const autoCompleteResponse = await storeLocatorAutocomplete({\n endpoint: findAStoreAutocompleteEndpoint,\n countryCode: findAStoreCountryCode,\n searchTerm,\n });\n const firstSuggestion = autoCompleteResponse[0];\n const newPlace = firstSuggestion\n ? {\n id: firstSuggestion.placeId,\n name: firstSuggestion.description,\n }\n : null;\n\n return newPlace;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.log({ error });\n return null;\n }\n };\n\n const getSearchedPlace = async (\n currentPlace: IStoreLocatorPlace | null,\n currentQueryText: string\n ) => {\n if (currentPlace) return currentPlace;\n if (!currentQueryText) return null;\n\n const firstSuggestedPlace = await getFirstAutocompletePlace(\n currentQueryText\n );\n return firstSuggestedPlace;\n };\n\n const handleStoresSearch = async () => {\n try {\n const searchedPlace = await getSearchedPlace(place, storeQueryText);\n const { latitude, longitude } = searchedPlace\n ? await storeLocatorSearch({\n endpoint: findAStoreSearchEndpoint,\n countryCode: findAStoreCountryCode,\n languageCode: language,\n placeId: searchedPlace.id,\n })\n : ({} as IStoreLocatorSearch);\n\n updateDataLayer({\n event: 'storeFinder',\n search_term: storeQueryText,\n });\n\n const newQueryText = searchedPlace?.name || storeQueryText;\n const newQueryParams = {\n distance: 50,\n ...(newQueryText ? { query: newQueryText } : {}),\n ...(parseFloat(latitude) ? { latitude } : {}),\n ...(parseFloat(longitude) ? { longitude } : {}),\n };\n const newQueryString = qs.stringify(newQueryParams, {\n addQueryPrefix: true,\n });\n\n window.location.href = `${findAStoreRedirectUrl}${newQueryString}`;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.log({ error });\n }\n };\n\n const handleSocialClick = (platform: string) => {\n updateDataLayer({\n event: 'socialClick',\n platform,\n });\n };\n\n return (\n
\n
\n
\n
\n {logo?.desktop?.url && (\n \n \n \n )}\n {campaignLogo?.desktop?.url && (\n \n )}\n
\n\n \n
\n\n {breadcrumb && (\n
\n \n
\n )}\n\n \n {footerLinks?.length > 0 &&\n footerLinks.map((links) => (\n \n ))}\n\n {enableFindAStore && (\n
\n {findAStoreHeader && (\n

\n {findAStoreHeader}\n

\n )}\n\n
\n

{findAStoreSubHeader}

\n\n \n
\n\n
\n \n
\n
\n )}\n\n
\n
    \n {socialLinks\n .filter((link) => link.url && link.linkIcon)\n .map(({ name = '', url = '', linkIcon = '' }) => (\n \n \n \n \n \n ))}\n
\n
\n
\n \n\n {!!paymentMethods?.items?.length && (\n \n
\n {paymentMethods.items.map((paymentMethod) => (\n \n \n
\n ))}\n \n \n )}\n\n
\n \n
\n\n {enableSupportButton &&\n supportButtonLink?.url &&\n supportButtonLink?.name &&\n !isInIFrame && (\n \n )}\n
\n );\n};\n\nexport default Footer;\n","const enum BreakpointEnum {\n Small = 'sm',\n Medium = 'md',\n Large = 'lg',\n XLarge = 'xl',\n}\n\nexport default BreakpointEnum;\n","enum ScrollProgressEnum {\n Start = 'Start',\n Middle = 'Middle',\n End = 'End',\n}\n\nexport default ScrollProgressEnum;\n","import axios from 'axios';\nimport qs from 'qs';\nimport { IStoreLocatorAutocomplete } from '../models/IStoreLocatorAutocomplete';\n\nconst storeLocatorAutocomplete = async ({\n endpoint,\n countryCode,\n searchTerm,\n}: {\n endpoint: string;\n countryCode: string;\n searchTerm: string;\n}): Promise => {\n const query = qs.stringify({\n countryCode,\n input: searchTerm,\n });\n\n const { data } = await axios.get<{\n predictions: IStoreLocatorAutocomplete[];\n } | null>(`${endpoint}?${query}`);\n\n return data?.predictions || [];\n};\n\nexport default storeLocatorAutocomplete;\n","import { IStoreLocatorSearch } from '@models/IStoreLocatorSearch';\nimport { IStoreLocatorSearchParams } from '@models/IStoreLocatorSearchParams';\nimport axios from 'axios';\nimport qs from 'qs';\n\nconst storeLocatorSearch = async ({\n endpoint,\n input,\n latitude,\n longitude,\n distance,\n countryCode,\n languageCode,\n placeId,\n}: IStoreLocatorSearchParams): Promise => {\n const query = qs.stringify({\n Input: input || '',\n PlaceId: placeId || '',\n Latitude: latitude || '0',\n Longitude: longitude || '0',\n MarketId: countryCode?.toUpperCase() || '',\n SiteLanguageCode: languageCode,\n Distance: distance || 50,\n SearchByDistance: true,\n IsDealerRequest: true,\n IsPurchaseIntentRequest: false,\n Type: 'physical',\n });\n\n const { data } = await axios.get(`${endpoint}?${query}`);\n\n return data;\n};\n\nexport default storeLocatorSearch;\n","const updateDataLayer = (eventPayload: Record) => {\n if (typeof window !== 'undefined') {\n window.dataLayer = window.dataLayer || [];\n window.dataLayer.push(eventPayload);\n }\n};\n\nexport default updateDataLayer;\n","import BreakpointEnum from '@models/enums/BreakpointEnum';\nimport { useCallback, useEffect, useState } from 'react';\n\nconst getCurrentBreakpoint = () => {\n const breakpoints = { tablet: 768, desktop: 1024, lgDesktop: 1440 };\n const width = window.innerWidth;\n\n if (width < breakpoints.tablet) {\n return BreakpointEnum.Small;\n }\n if (width >= breakpoints.tablet && width < breakpoints.desktop) {\n return BreakpointEnum.Medium;\n }\n if (width >= breakpoints.desktop && width < breakpoints.lgDesktop) {\n return BreakpointEnum.Large;\n }\n return BreakpointEnum.XLarge;\n};\n\nconst useBreakpoint = () => {\n const [screen, setScreen] = useState();\n\n const resizeHandler = useCallback(\n () => setScreen(getCurrentBreakpoint()),\n []\n );\n\n useEffect(() => {\n window.addEventListener('resize', resizeHandler);\n setScreen(getCurrentBreakpoint());\n\n return () => {\n window.removeEventListener('resize', resizeHandler);\n };\n }, [resizeHandler]);\n\n return screen;\n};\n\nexport default useBreakpoint;\n","import { useCallback, useRef, useState } from 'react';\n\nconst useResizeObserver = () => {\n const observerRef = useRef();\n const [resizeParameters, setResizeParameters] = useState({\n width: 0,\n height: 0,\n clientWidth: 0,\n clientHeight: 0,\n scrollWidth: 0,\n scrollHeight: 0,\n });\n\n const handleResize = useCallback((entries: ResizeObserverEntry[]) => {\n if (!Array.isArray(entries)) return;\n\n const entry = entries[0];\n\n setResizeParameters({\n width: entry?.contentRect.width ?? 0,\n height: entry?.contentRect.height ?? 0,\n clientWidth: entry?.target.clientWidth ?? 0,\n clientHeight: entry?.target.clientHeight ?? 0,\n scrollWidth: entry?.target.scrollWidth ?? 0,\n scrollHeight: entry?.target.scrollHeight ?? 0,\n });\n }, []);\n\n const ref = useCallback(\n (node: HTMLElement | null) => {\n if (observerRef.current && !node) {\n observerRef.current.disconnect();\n observerRef.current = undefined;\n }\n\n if (!observerRef.current && node) {\n observerRef.current = new ResizeObserver(handleResize);\n observerRef.current.observe(node);\n }\n },\n [handleResize]\n );\n\n return [ref, resizeParameters] as const;\n};\n\nexport default useResizeObserver;\n"],"names":["_ref","children","className","dataTestId","disabled","editHint","link","linkCallback","secondary","secondaryBackgroundClassName","isLightMode","inverted","buttonProps","buttonClasses","classNames","url","name","React","createElement","href","target","onClick","_extends","classes","epiEdit","image","imageClasses","imageRef","lazyLoad","progressiveLoad","sizes","mobileSource","mobile","tabletSource","tablet","desktopSource","desktop","largeDesktopSource","largeDesktop","breakpoint","useBreakpoint","isLoaded","setIsLoaded","useState","currentSrc","BreakpointEnum","Small","Medium","Large","XLarge","type","srcSet","ref","alt","altText","length","draggable","loading","onLoad","src","height","width","originalUrl","useHorizontalGrabScroll","containerRef","isMouseDown","setIsMouseDown","mouseScrollPosition","useRef","top","left","x","y","useEffect","container","current","clientWidth","scrollWidth","style","cursor","scrollTop","scrollLeft","mouseMoveHandler","e","dx","clientX","dy","clientY","mouseUpHandler","document","removeEventListener","mouseDownHandler","addEventListener","onWheel","deltaY","scrollTo","behavior","passive","useHorizontalScrollShadows","threshold","scrollXProgress","useScroll","isStart","setIsStart","isEnd","setIsEnd","scrollProgress","setScrollProgress","ScrollProgressEnum","Start","useMotionValueEvent","value","Middle","End","forwardRef","disableScroll","shadowColour","showStart","showEnd","shadowWidth","isNoWrapEnabled","useImperativeHandle","leftOffset","getOffsetWidth","offsetWidth","AnimatePresence","motion","span","animate","opacity","exit","initial","transition","duration","tabIndex","Autosuggest","loadable","autocompleteEndpoint","countryCode","queryText","searchPlaceholderLabel","onSearch","onSetPlace","onSetQueryText","autoCompleteSuggestions","setAutoCompleteSuggestions","suggestions","onSuggestionsFetchRequested","async","reason","_ref2","autoCompleteResponse","storeLocatorAutocomplete","endpoint","searchTerm","error","console","log","onSuggestionsClearRequested","getSuggestionValue","suggestion","description","renderSuggestion","onSuggestionSelected","event","_ref3","stopPropagation","id","placeId","inputProps","onChange","_","_ref4","newValue","onKeyUp","key","updateDataLayer","search_term","content_type","page_type","placeholder","activePage","links","scrollRef","isInFooter","breadcrumbAriaLabel","breadcrumbFooterAriaLabel","useAriaLabels","map","index","Fragment","substring","Icon","colorClassName","ShadowContainerHorizontal","BreadcrumbLinks","desktopBottomLimit","bottomPosition","setBottomPosition","scrollY","useWindowScrollPositions","isBelowLargeDesktop","useMediaQuery","scrollDistanceForButtonVisibility","bottomScrollOffset","documentElement","scrollHeight","window","innerHeight","a","bottom","size","title","isInIFrame","useIsInIFrame","handleLinkClick","linkTitle","main_category","sub_category","dangerouslySetInnerHTML","__html","isOpen","onSetOpenTitle","hidden","LinksList","div","findAStoreAutocompleteEndpoint","findAStoreButtonText","findAStoreCountryCode","findAStoreHeader","findAStorePlaceholder","findAStoreRedirectUrl","findAStoreSearchEndpoint","findAStoreSubHeader","backToTopButtonText","breadcrumb","copyrightNotice","enableFindAStore","enableStickyBackToTopButton","externalSitesLinks","footerLinks","homepageLink","language","languageSelector","logo","campaignLogo","secondaryNavigationLinks","socialLinks","supportButtonLink","enableSupportButton","paymentMethods","cookieSettingsLabel","storeQueryText","setStoreQueryText","place","setPlace","openLinksSectionTitle","setOpenLinksSectionTitle","footerBannerRef","clientHeight","footerBannerHeight","useResizeObserver","paymentMethodsRef","paymentMethodsHeight","homepageUrl","homepageTarget","getSearchedPlace","currentPlace","currentQueryText","firstSuggestion","getFirstAutocompletePlace","handleStoresSearch","searchedPlace","latitude","longitude","storeLocatorSearch","languageCode","newQueryText","newQueryParams","distance","query","parseFloat","newQueryString","qs","addQueryPrefix","location","Image","handleSocialClick","platform","rel","linkIcon","Breadcrumbs","LinksSection","StoreLocatorAutosuggest","Button","filter","items","paymentMethod","FooterBanner","SupportButton","input","data","axios","predictions","Input","PlaceId","Latitude","Longitude","MarketId","toUpperCase","SiteLanguageCode","Distance","SearchByDistance","IsDealerRequest","IsPurchaseIntentRequest","Type","eventPayload","dataLayer","push","getCurrentBreakpoint","breakpoints","innerWidth","screen","setScreen","resizeHandler","useCallback","observerRef","resizeParameters","setResizeParameters","handleResize","entries","Array","isArray","entry","contentRect","node","disconnect","undefined","ResizeObserver","observe"],"sourceRoot":""}