{"version":3,"file":"7308-a223784bbad01f671bb2.js","mappings":"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","sources":["webpack://nikon-client/./components/atoms/NavButton/NavButton.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/Carousel/Carousel.tsx","webpack://nikon-client/./utility/hooks/useCarouselScrollAnimation.ts","webpack://nikon-client/./components/molecules/NavigationCarousel/NavigationCarousel.tsx","webpack://nikon-client/./models/enums/BreakpointEnum.ts","webpack://nikon-client/./models/enums/HorizontalDirectionEnum.ts","webpack://nikon-client/./models/enums/ScrollProgressEnum.ts","webpack://nikon-client/./state-management/AriaLabelsStore.ts","webpack://nikon-client/./utility/helpers/duplicateArrayItems.ts","webpack://nikon-client/./utility/helpers/gtm.ts","webpack://nikon-client/./utility/hooks/useAriaLabels.ts","webpack://nikon-client/./utility/hooks/useBreakpoint.ts","webpack://nikon-client/./utility/hooks/useIsTouchDevice.ts","webpack://nikon-client/./utility/hooks/useMediaQuery.ts"],"sourcesContent":["import Icon from '@atoms/Icon/Icon';\nimport HorizontalDirectionEnum from '@models/enums/HorizontalDirectionEnum';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport useAriaLabels from '@utils/hooks/useAriaLabels';\nimport classNames from 'classnames';\nimport { forwardRef, KeyboardEvent, useImperativeHandle, useRef } from 'react';\n\ninterface Props {\n readonly direction:\n | HorizontalDirectionEnum.Left\n | HorizontalDirectionEnum.Right;\n readonly id?: string;\n readonly disabled?: boolean;\n readonly hasBackgroundColor?: boolean;\n readonly sizeClassName?: string;\n readonly iconSize?: string;\n readonly enabledArrowColor?: string;\n readonly onClick?: (e?: KeyboardEvent) => void;\n readonly additionalDataLayerProperties?: Record;\n readonly isLightMode?: boolean;\n}\n\nexport interface NavButtonRef {\n focus: () => void;\n disabled: boolean;\n}\n\nconst NavButton = forwardRef(\n (\n {\n additionalDataLayerProperties,\n direction,\n id,\n disabled = false,\n hasBackgroundColor = true,\n sizeClassName = 'h-10 w-10',\n iconSize,\n enabledArrowColor = 'text-black-100',\n isLightMode,\n onClick,\n },\n ref\n ) => {\n const { nextAriaLabel, previousAriaLabel } = useAriaLabels();\n const buttonRef = useRef(null);\n\n useImperativeHandle(ref, () => ({\n focus: () => buttonRef.current?.focus(),\n disabled: !!buttonRef.current?.disabled,\n }));\n\n return (\n {\n if (e.key === 'Enter') onClick?.(e);\n }}\n onClick={() => {\n onClick?.();\n updateDataLayer({\n event: 'carousel',\n content_type: 'tab_change',\n link_text:\n direction === HorizontalDirectionEnum.Left ? 'Previous' : 'Next',\n ...additionalDataLayerProperties,\n });\n }}\n >\n \n \n );\n }\n);\n\nexport default NavButton;\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 updateDataLayer from '@utils/helpers/gtm';\nimport { PropsWithChildren } from 'react';\nimport { A11y, Keyboard, Navigation } from 'swiper/modules';\nimport { Swiper, SwiperProps } from 'swiper/react';\nimport 'swiper/scss';\nimport 'swiper/scss/a11y';\nimport 'swiper/scss/autoplay';\nimport 'swiper/scss/effect-fade';\nimport 'swiper/scss/keyboard';\nimport { SwiperModule } from 'swiper/types';\n\ninterface Props extends SwiperProps {\n readonly additionalModules?: SwiperModule[];\n readonly className?: string;\n readonly id?: string;\n readonly navId?: string;\n readonly analyticsEnabled?: boolean;\n}\n\nconst Carousel = ({\n additionalModules = [],\n children,\n className,\n id = 'carousel',\n navId = '',\n analyticsEnabled = false,\n ...props\n}: PropsWithChildren) => {\n if (!children) {\n return null;\n }\n\n return (\n {\n if (analyticsEnabled && swiper.realIndex !== 0) {\n updateDataLayer({\n event: 'carousel',\n content_type: `tab_change`,\n link_text:\n swiper.previousIndex < swiper.activeIndex ? 'Next' : 'Previous',\n });\n }\n }}\n a11y={{ enabled: true }}\n className={className}\n navigation={{\n enabled: !!navId,\n prevEl: `#prevBtn-${navId}`,\n nextEl: `#nextBtn-${navId}`,\n }}\n keyboard={{\n enabled: true,\n onlyInViewport: true,\n }}\n modules={[...[A11y, Keyboard, Navigation], ...additionalModules]}\n {...props}\n >\n {children}\n \n );\n};\n\nexport default Carousel;\n","import BreakpointEnum from '@models/enums/BreakpointEnum';\nimport useBreakpoint from '@utils/hooks/useBreakpoint';\nimport { useEffect, useRef } from 'react';\nimport Swiper from 'swiper';\n\ninterface Props {\n readonly swiperInstance?: Swiper | null;\n readonly shouldAnimateCondition: boolean;\n}\n\nconst breakpointAdjustments = {\n [BreakpointEnum.Small]: -1.5,\n [BreakpointEnum.Medium]: -1,\n [BreakpointEnum.Large]: -0.5,\n [BreakpointEnum.XLarge]: 0,\n};\n\nconst useCarouselScrollAnimation = ({\n swiperInstance,\n shouldAnimateCondition,\n}: Props) => {\n const lastScrollPosition = useRef(0);\n const lastSwiperProgress = useRef(0);\n const breakPoint = useBreakpoint();\n\n useEffect(() => {\n if (!swiperInstance || !shouldAnimateCondition) return () => ({});\n\n const updateProgressFromSwiper = () => {\n lastSwiperProgress.current = swiperInstance.progress;\n };\n\n swiperInstance.on('slideChangeTransitionStart', updateProgressFromSwiper);\n\n const handleScroll = () => {\n if (!breakPoint) return;\n\n const slideCount = swiperInstance.slides.length;\n const calculatedVariableRatio = Math.max(\n 0.75,\n Math.min(100, 100 / slideCount) / 3 + breakpointAdjustments[breakPoint]\n );\n\n const carouselRect = swiperInstance.el.getBoundingClientRect();\n const carouselTopOffset = carouselRect.top - window.innerHeight;\n const isCarouselInView = window.scrollY > carouselTopOffset;\n\n if (isCarouselInView) {\n if (lastScrollPosition.current === 0) {\n lastScrollPosition.current = window.scrollY;\n }\n\n const scrollChange = window.scrollY - lastScrollPosition.current;\n const scrollChangePercentage =\n scrollChange /\n (window.innerHeight * (slideCount / calculatedVariableRatio));\n\n const newSwiperProgress =\n lastSwiperProgress.current + scrollChangePercentage;\n\n swiperInstance.setProgress(newSwiperProgress, 150);\n lastScrollPosition.current = window.scrollY;\n lastSwiperProgress.current = newSwiperProgress;\n }\n };\n\n window.addEventListener('scroll', handleScroll);\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n swiperInstance.off(\n 'slideChangeTransitionStart',\n updateProgressFromSwiper\n );\n };\n }, [swiperInstance, shouldAnimateCondition, breakPoint]);\n};\n\nexport default useCarouselScrollAnimation;\n","import NavButton, { NavButtonRef } from '@atoms/NavButton/NavButton';\nimport ShadowContainerHorizontal from '@atoms/ShadowContainerHorizontal/ShadowContainerHorizontal';\nimport HorizontalDirectionEnum from '@models/enums/HorizontalDirectionEnum';\nimport Carousel from '@molecules/Carousel/Carousel';\nimport duplicateArrayItems from '@utils/helpers/duplicateArrayItems';\nimport useBreakpoint from '@utils/hooks/useBreakpoint';\nimport useCarouselScrollAnimation from '@utils/hooks/useCarouselScrollAnimation';\nimport useIsTouchDevice from '@utils/hooks/useIsTouchDevice';\nimport useMediaQuery from '@utils/hooks/useMediaQuery';\nimport classNames from 'classnames';\nimport { motion } from 'framer-motion';\nimport { ReactNode, RefObject, useEffect, useRef, useState } from 'react';\nimport SwiperType from 'swiper';\nimport { FreeMode } from 'swiper/modules';\nimport { Swiper, SwiperOptions } from 'swiper/types';\n\ninterface Props {\n readonly dataTestId?: string;\n readonly id: string;\n readonly loop?: boolean;\n readonly title?: string | JSX.Element;\n readonly titleClassName?: string;\n readonly titleWrapperClassName?: string;\n readonly horizontalSpacingClassName?: string;\n readonly items: T[];\n readonly shadows?: boolean;\n readonly shadowColour?: string;\n readonly slidesToShowDesktop?: number;\n readonly slidesToShowTablet?: number;\n readonly slidesToShowMobile?: number;\n readonly desktopBreakpoint?: 'md' | 'xl';\n readonly hideHeaderOnMobile?: boolean;\n readonly additionalBreakpoints?: { [width: number]: SwiperOptions };\n readonly spaceBetween?: number;\n readonly shouldReinitializeNavigation?: boolean; // for when the carousel is used inside a portal (Modal or Drawer)\n readonly isScrollAnimationEnabled?: boolean;\n readonly isLoadedInView?: boolean;\n readonly isLightMode?: boolean;\n readonly isOverflowHidden?: boolean;\n readonly epiEdit?: string;\n readonly children: (itemsToDisplay: T[]) => ReactNode;\n}\n\nconst NavigationCarousel = ({\n dataTestId = 'Navigation-Carousel',\n id,\n loop = true,\n title,\n titleClassName = 'h2',\n titleWrapperClassName,\n horizontalSpacingClassName = 'container',\n items,\n shadows = false,\n shadowColour,\n slidesToShowDesktop = 3,\n slidesToShowTablet = 2,\n slidesToShowMobile = 1.1,\n desktopBreakpoint = 'xl',\n hideHeaderOnMobile,\n additionalBreakpoints = {},\n spaceBetween = 20,\n shouldReinitializeNavigation,\n isScrollAnimationEnabled,\n isLoadedInView,\n isLightMode,\n isOverflowHidden = true,\n epiEdit,\n children,\n}: Props) => {\n const [swiperInstance, setSwiperInstance] = useState();\n const [isSwiperInitialized, setIsSwiperInitialized] = useState(false);\n const [slideIndex, setSlideIndex] = useState(0);\n const [currentSlidesPerView, setCurrentSlidesPerView] = useState(0);\n const [shouldLoop, setShouldLoop] = useState(false);\n const breakpoint = useBreakpoint();\n const isTouchDevice = useIsTouchDevice();\n const leftButtonRef = useRef(null);\n const rightButtonRef = useRef(null);\n const hasMoreItemsToShow =\n currentSlidesPerView > 0 && items.length > currentSlidesPerView;\n\n const isMobile = useMediaQuery(1024);\n\n const initialTabletSlidesClassname = {\n 2: 'md:[&>.swiper-wrapper>.swiper-slide]:w-1/2',\n 3: 'md:[&>.swiper-wrapper>.swiper-slide]:w-1/3',\n 4: 'md:[&>.swiper-wrapper>.swiper-slide]:w-1/4',\n }[slidesToShowTablet];\n\n const initialDesktopSlidesClassname = {\n 3: 'xl:[&>.swiper-wrapper>.swiper-slide]:w-1/3',\n 4: 'xl:[&>.swiper-wrapper>.swiper-slide]:w-1/4',\n 5: 'xl:[&>.swiper-wrapper>.swiper-slide]:w-1/5',\n 6: 'xl:[&>.swiper-wrapper>.swiper-slide]:w-1/6',\n }[slidesToShowDesktop];\n\n const itemsMultiplier =\n (desktopBreakpoint === 'xl' && breakpoint === 'xl') ||\n (desktopBreakpoint === 'md' && breakpoint !== 'sm')\n ? Math.ceil(currentSlidesPerView) * 2\n : Math.ceil(currentSlidesPerView + 1) * 2;\n const itemsToDisplay = shouldLoop\n ? duplicateArrayItems(items, itemsMultiplier)\n : items;\n const isLeftNavButtonDisabled = !shouldLoop && slideIndex === 0;\n const isRightNavButtonDisabled =\n !shouldLoop && slideIndex >= itemsToDisplay.length - currentSlidesPerView;\n\n const handleSwiperUpdate = (swiper: SwiperType) => {\n const slidesPerView = swiper?.params?.slidesPerView;\n\n setCurrentSlidesPerView(\n slidesPerView && typeof slidesPerView === 'number' ? slidesPerView : 0\n );\n };\n\n const handleNavButtonClick = ({\n activeButtonRef,\n inactiveButtonRef,\n newSlideIndex,\n }: {\n activeButtonRef: RefObject;\n inactiveButtonRef: RefObject;\n newSlideIndex: number;\n }) => {\n setTimeout(() => {\n const isActiveButtonDisabled = activeButtonRef.current?.disabled;\n const isInactiveButtonEnabled = !inactiveButtonRef.current?.disabled;\n\n if (isActiveButtonDisabled && isInactiveButtonEnabled) {\n inactiveButtonRef.current?.focus();\n }\n });\n\n if (isScrollAnimationEnabled) {\n swiperInstance?.slideTo(newSlideIndex);\n }\n };\n\n useEffect(() => {\n const shouldLoopCondition = isScrollAnimationEnabled\n ? items.length <= 4 && breakpoint === 'sm'\n : ((desktopBreakpoint === 'xl' && !isTouchDevice) ||\n (desktopBreakpoint === 'md' &&\n !!breakpoint &&\n breakpoint !== 'sm')) &&\n hasMoreItemsToShow &&\n loop;\n\n setShouldLoop(shouldLoopCondition);\n }, [\n breakpoint,\n desktopBreakpoint,\n isTouchDevice,\n hasMoreItemsToShow,\n loop,\n items.length,\n isScrollAnimationEnabled,\n ]);\n\n useEffect(() => {\n swiperInstance?.slideTo(0, 0);\n if (shouldReinitializeNavigation) swiperInstance?.navigation?.init();\n swiperInstance?.navigation.update();\n }, [swiperInstance, shouldLoop, shouldReinitializeNavigation]);\n\n useCarouselScrollAnimation({\n swiperInstance,\n shouldAnimateCondition: !!(\n isLoadedInView &&\n isScrollAnimationEnabled &&\n !isMobile\n ),\n });\n\n return (\n \n \n \n {title && (\n \n {title}\n \n )}\n\n slidesToShowDesktop,\n 'xl:flex':\n items.length > slidesToShowDesktop &&\n desktopBreakpoint === 'xl',\n 'md:flex':\n items.length > slidesToShowDesktop &&\n desktopBreakpoint === 'md',\n })}\n >\n \n handleNavButtonClick({\n activeButtonRef: leftButtonRef,\n inactiveButtonRef: rightButtonRef,\n newSlideIndex: slideIndex - 1,\n })\n }\n isLightMode={isLightMode}\n />\n\n \n handleNavButtonClick({\n activeButtonRef: rightButtonRef,\n inactiveButtonRef: leftButtonRef,\n newSlideIndex: slideIndex + 1,\n })\n }\n isLightMode={isLightMode}\n />\n \n \n \n\n 0 || shouldLoop) &&\n ((desktopBreakpoint === 'xl' && breakpoint !== 'xl') ||\n (desktopBreakpoint === 'md' && breakpoint === 'sm'))\n }\n showEnd={\n shadows &&\n (slideIndex < itemsToDisplay.length - 1 || shouldLoop) &&\n ((desktopBreakpoint === 'xl' && breakpoint !== 'xl') ||\n (desktopBreakpoint === 'md' && breakpoint === 'sm'))\n }\n shadowColour={shadowColour}\n disableScroll\n >\n \n .swiper-wrapper>.swiper-slide]:pr-5`]:\n !isSwiperInitialized,\n })}\n onResize={handleSwiperUpdate}\n onInit={(swiper) => {\n handleSwiperUpdate(swiper);\n setIsSwiperInitialized(true);\n }}\n onSwiper={setSwiperInstance}\n watchSlidesProgress\n breakpoints={{\n 0: {\n slidesPerView: slidesToShowMobile,\n },\n 768: {\n slidesPerView: slidesToShowTablet,\n },\n 1440: {\n slidesPerView: slidesToShowDesktop,\n },\n ...additionalBreakpoints,\n }}\n onSlideChange={(swiper) => {\n setSlideIndex(swiper?.realIndex || 0);\n }}\n freeMode={isScrollAnimationEnabled}\n additionalModules={isScrollAnimationEnabled ? [FreeMode] : []}\n >\n {children(itemsToDisplay)}\n \n \n \n \n );\n};\n\nexport default NavigationCarousel;\n","const enum BreakpointEnum {\n Small = 'sm',\n Medium = 'md',\n Large = 'lg',\n XLarge = 'xl',\n}\n\nexport default BreakpointEnum;\n","enum HorizontalDirectionEnum {\n Left = 'LEFT',\n Right = 'RIGHT',\n}\n\nexport default HorizontalDirectionEnum;\n","enum ScrollProgressEnum {\n Start = 'Start',\n Middle = 'Middle',\n End = 'End',\n}\n\nexport default ScrollProgressEnum;\n","import { IAriaLabels } from '@models/IAriaLabels';\nimport create from 'zustand';\n\ninterface IAriaLabelsState {\n ariaLabels: IAriaLabels;\n setAriaLabels: (ariaLabels: IAriaLabels) => void;\n}\n\nexport const initialAriaLabels: IAriaLabels = {\n backToFirstLevelNavigationAriaLabel: 'Back to first level of navigation',\n breadcrumbAriaLabel: 'Breadcrumb navigation',\n breadcrumbFooterAriaLabel: 'Breadcrumb footer navigation',\n clearFiltersAriaLabel: 'Clear filters',\n closeMenuAriaLabel: 'Close menu',\n closeAddressListAriaLabel: 'Close address list',\n closeMobileNavigationAriaLabel: 'Close navigation',\n closeModalAriaLabel: 'Close Modal',\n closeSignUpFormAriaLabel: 'Close signup form',\n closeSiteNotificationAriaLabel: 'Close site notification',\n copyToClipboardAriaLabel: 'Copy to clipboard',\n editOrDeleteAriaLabel: 'Edit or delete',\n mainNavigationAriaLabel: 'Main navigation',\n moreInformationAriaLabel: 'More information',\n nextAriaLabel: 'Go to next slide',\n openAddressListAriaLabel: 'Open address list',\n openImageInFullScreenAriaLabel: 'Open image in full screen',\n openMenuAriaLabel: 'Open menu',\n overlayToCloseDesktopNavigationAriaLabel: 'Close overlay',\n pauseVideoAriaLabel: 'Pause video',\n playVideoAriaLabel: 'Play video',\n previousAriaLabel: 'Go to previous slide',\n searchAriaLabel: 'Search',\n shareToFacebookAriaLabel: 'Share to Facebook',\n shareToWhatsappAriaLabel: 'Share to Whatsapp',\n shareToXAriaLabel: 'Share to X',\n siteNotificationsAriaLabel: 'Site notifications banner',\n uspStripAriaLabel: 'Unique Selling Point Strip',\n zoomInAriaLabel: 'Zoom in',\n zoomOutAriaLabel: 'Zoom out',\n};\n\nconst useAriaLabelsStore = create((set) => ({\n ariaLabels: initialAriaLabels,\n setAriaLabels: (ariaLabels: IAriaLabels) => set({ ariaLabels }),\n}));\n\nexport default useAriaLabelsStore;\n","const duplicateArrayItems = (initialArray: T[], minTargetCount: number) => {\n if (!initialArray?.length) return [];\n\n const multiplier = Math.ceil(minTargetCount / initialArray.length);\n const newArray = Array(multiplier).fill(initialArray).flat();\n\n return newArray;\n};\n\nexport default duplicateArrayItems;\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 { IAriaLabels } from '@models/IAriaLabels';\nimport useAriaLabelsStore, { initialAriaLabels } from '@state/AriaLabelsStore';\nimport { useEffect, useState } from 'react';\n\nconst useAriaLabels = () => {\n const [ariaLabels, setAriaLabels] = useState(initialAriaLabels);\n const ariaLabelsFromStore = useAriaLabelsStore((state) => state.ariaLabels);\n\n useEffect(() => {\n setAriaLabels(ariaLabelsFromStore);\n }, [ariaLabelsFromStore]);\n\n return ariaLabels;\n};\n\nexport default useAriaLabels;\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 { useEffect, useState } from 'react';\n\nconst useIsTouchDevice = () => {\n const [isTouchDevice, setIsTouchDevice] = useState();\n\n const handleIsTouchDevice = (): void => {\n setIsTouchDevice('ontouchstart' in window || navigator.maxTouchPoints > 0);\n };\n\n useEffect(() => {\n handleIsTouchDevice();\n\n window.addEventListener('resize', handleIsTouchDevice);\n\n return () => window.removeEventListener('resize', handleIsTouchDevice);\n }, []);\n\n return isTouchDevice;\n};\n\nexport default useIsTouchDevice;\n","import { useCallback, useEffect, useState } from 'react';\n\nconst useMediaQuery = (minWidth: number) => {\n // Set the default value to undefined in order to properly distinguish the falsey values\n // where undefined is the value before computing whether the screen size is smaller than the minWidth\n // i.e. a state where we don't really know whether we're below the threshold or not\n // and false is the value where the computation returns false\n const [isSmallerThan, setIsSmallerThan] = useState();\n\n const handler = useCallback(() => {\n const isDesiredWidth = window.innerWidth < minWidth;\n setIsSmallerThan(isDesiredWidth);\n }, [minWidth]);\n\n useEffect(() => {\n window.addEventListener('resize', handler);\n handler();\n\n return () => {\n window.removeEventListener('resize', handler);\n };\n }, [handler]);\n\n return isSmallerThan;\n};\n\nexport default useMediaQuery;\n"],"names":["forwardRef","_ref","ref","additionalDataLayerProperties","direction","id","disabled","hasBackgroundColor","sizeClassName","iconSize","enabledArrowColor","isLightMode","onClick","nextAriaLabel","previousAriaLabel","useAriaLabels","buttonRef","useRef","useImperativeHandle","focus","current","React","createElement","HorizontalDirectionEnum","Left","className","classNames","Right","tabIndex","onKeyDown","e","key","updateDataLayer","event","content_type","link_text","Icon","name","colorClassName","size","useHorizontalGrabScroll","containerRef","isMouseDown","setIsMouseDown","useState","mouseScrollPosition","top","left","x","y","useEffect","container","clientWidth","scrollWidth","style","cursor","scrollTop","scrollLeft","mouseMoveHandler","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","children","disableScroll","shadowColour","showStart","showEnd","shadowWidth","isNoWrapEnabled","leftOffset","getOffsetWidth","offsetWidth","AnimatePresence","motion","span","animate","opacity","exit","initial","transition","duration","additionalModules","navId","analyticsEnabled","props","Swiper","_extends","onSlideChangeTransitionEnd","swiper","realIndex","previousIndex","activeIndex","a11y","enabled","navigation","prevEl","nextEl","keyboard","onlyInViewport","modules","A11y","Keyboard","Navigation","breakpointAdjustments","BreakpointEnum","Small","Medium","Large","XLarge","swiperInstance","shouldAnimateCondition","lastScrollPosition","lastSwiperProgress","breakPoint","useBreakpoint","updateProgressFromSwiper","progress","on","handleScroll","slideCount","slides","length","calculatedVariableRatio","Math","max","min","carouselTopOffset","el","getBoundingClientRect","window","innerHeight","scrollY","scrollChangePercentage","newSwiperProgress","setProgress","off","dataTestId","loop","title","titleClassName","titleWrapperClassName","horizontalSpacingClassName","items","shadows","slidesToShowDesktop","slidesToShowTablet","slidesToShowMobile","desktopBreakpoint","hideHeaderOnMobile","additionalBreakpoints","spaceBetween","shouldReinitializeNavigation","isScrollAnimationEnabled","isLoadedInView","isOverflowHidden","epiEdit","setSwiperInstance","isSwiperInitialized","setIsSwiperInitialized","slideIndex","setSlideIndex","currentSlidesPerView","setCurrentSlidesPerView","shouldLoop","setShouldLoop","breakpoint","isTouchDevice","useIsTouchDevice","leftButtonRef","rightButtonRef","hasMoreItemsToShow","isMobile","useMediaQuery","initialTabletSlidesClassname","initialDesktopSlidesClassname","itemsMultiplier","ceil","itemsToDisplay","duplicateArrayItems","isLeftNavButtonDisabled","isRightNavButtonDisabled","handleSwiperUpdate","slidesPerView","params","handleNavButtonClick","_ref2","activeButtonRef","inactiveButtonRef","newSlideIndex","setTimeout","isActiveButtonDisabled","isInactiveButtonEnabled","slideTo","shouldLoopCondition","init","update","useCarouselScrollAnimation","h2","ease","div","delay","NavButton","ShadowContainerHorizontal","Carousel","onResize","onInit","onSwiper","watchSlidesProgress","breakpoints","onSlideChange","freeMode","FreeMode","initialAriaLabels","backToFirstLevelNavigationAriaLabel","breadcrumbAriaLabel","breadcrumbFooterAriaLabel","clearFiltersAriaLabel","closeMenuAriaLabel","closeAddressListAriaLabel","closeMobileNavigationAriaLabel","closeModalAriaLabel","closeSignUpFormAriaLabel","closeSiteNotificationAriaLabel","copyToClipboardAriaLabel","editOrDeleteAriaLabel","mainNavigationAriaLabel","moreInformationAriaLabel","openAddressListAriaLabel","openImageInFullScreenAriaLabel","openMenuAriaLabel","overlayToCloseDesktopNavigationAriaLabel","pauseVideoAriaLabel","playVideoAriaLabel","searchAriaLabel","shareToFacebookAriaLabel","shareToWhatsappAriaLabel","shareToXAriaLabel","siteNotificationsAriaLabel","uspStripAriaLabel","zoomInAriaLabel","zoomOutAriaLabel","create","set","ariaLabels","setAriaLabels","initialArray","minTargetCount","multiplier","Array","fill","flat","eventPayload","dataLayer","push","ariaLabelsFromStore","useAriaLabelsStore","state","getCurrentBreakpoint","width","innerWidth","screen","setScreen","resizeHandler","useCallback","setIsTouchDevice","handleIsTouchDevice","navigator","maxTouchPoints","minWidth","isSmallerThan","setIsSmallerThan","handler","isDesiredWidth"],"sourceRoot":""}