{"version":3,"file":"8263-03af4a0f6a90d25d4236.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/./components/atoms/PriceDisplayText/PriceDisplayText.tsx","webpack://nikon-client/./components/atoms/ReturnLink/ReturnLink.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/./utility/hooks/useVerticalGrabScroll.ts","webpack://nikon-client/./utility/hooks/useVerticalScrollShadows.ts","webpack://nikon-client/./components/atoms/ShadowContainerVertical/ShadowContainerVertical.tsx","webpack://nikon-client/./utility/hooks/useDebounce.ts","webpack://nikon-client/./components/molecules/StickyNavigation/StickyNavigation.tsx","webpack://nikon-client/./models/enums/BreakpointEnum.ts","webpack://nikon-client/./models/enums/IBackgroundColourEnum.ts","webpack://nikon-client/./models/enums/ScrollProgressEnum.ts","webpack://nikon-client/./models/enums/StickyNavPositionEnum.ts","webpack://nikon-client/./state-management/AriaLabelsStore.ts","webpack://nikon-client/./state-management/StickyNavStore.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/useMediaQuery.ts","webpack://nikon-client/./utility/hooks/useResizeObserver.ts","webpack://nikon-client/./node_modules/.pnpm/react-icomoon@2.6.0_react@18.3.1/node_modules/react-icomoon/dist/index.js","webpack://nikon-client/./node_modules/.pnpm/zustand@3.7.2_react@18.3.1/node_modules/zustand/esm/index.js"],"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 { IPricingData } from '@models/IPricingData';\nimport classNames from 'classnames';\n\ninterface Props {\n readonly centerText?: boolean;\n readonly fromPriceLabel?: string;\n readonly pricingData: IPricingData;\n readonly vatLabel?: string;\n readonly shippingLabel?: string;\n readonly rrpLabel?: string;\n readonly smallText?: boolean;\n readonly containerClassName?: string;\n readonly taxesTopMarginClassName?: string;\n readonly taxesClassName?: string;\n readonly priceClassName?: string;\n readonly dataTestId?: string;\n readonly isLightMode?: boolean;\n}\n\nconst PriceDisplayText = ({\n fromPriceLabel,\n pricingData,\n vatLabel,\n shippingLabel,\n rrpLabel,\n centerText = false,\n smallText = false,\n containerClassName,\n taxesTopMarginClassName = 'mt-2',\n taxesClassName,\n priceClassName,\n dataTestId,\n isLightMode,\n}: Props) => {\n const {\n amountSaved,\n formattedPrice,\n formattedCalculatedPrice,\n shippingCost,\n price,\n } = pricingData;\n\n if (typeof price !== 'number') {\n return null;\n }\n\n return (\n \n {(centerText ||\n (amountSaved > 0 && formattedPrice) ||\n formattedCalculatedPrice) && (\n \n {fromPriceLabel && {fromPriceLabel}}\n\n {amountSaved > 0 && formattedPrice && (\n <>\n {rrpLabel && {rrpLabel}}\n \n {formattedPrice}\n \n \n )}\n\n {formattedCalculatedPrice && (\n 0,\n 'dark:text-yellow': amountSaved > 0 && !isLightMode,\n },\n priceClassName\n )}\n data-testid=\"Price-Display-Text-Price\"\n >\n {formattedCalculatedPrice}\n \n )}\n \n )}\n\n {(vatLabel || (!shippingCost && shippingLabel)) && (\n \n {vatLabel && vatLabel}\n {vatLabel && !shippingCost && shippingLabel && ' + '}\n {!shippingCost && shippingLabel && shippingLabel}\n

\n )}\n \n );\n};\n\nexport default PriceDisplayText;\n","import Icon from '@atoms/Icon/Icon';\nimport { ILink } from '@models/ILink';\nimport classNames from 'classnames';\n\ninterface Props {\n readonly className?: string;\n readonly editHint?: string;\n readonly link: ILink;\n readonly dataTestId?: string;\n}\n\nconst ReturnLink = ({\n className,\n editHint,\n link,\n dataTestId = 'Return-Link',\n}: Props) => (\n \n \n {link.name}\n \n);\n\nexport default ReturnLink;\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 { RefObject, useEffect, useRef, useState } from 'react';\n\nconst useVerticalGrabScroll = (\n containerRef: RefObject,\n containerHeight: number,\n contentHeight: number,\n disabled = false\n) => {\n const [isMouseDown, setIsMouseDown] = useState(false);\n const mouseScrollPosition = useRef<{ top: number; y: number }>({\n top: 0,\n y: 0,\n });\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container?.clientWidth) return;\n\n if (containerHeight >= contentHeight || 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 }, [containerHeight, contentHeight, isMouseDown, disabled]);\n\n useEffect(() => {\n mouseScrollPosition.current = { top: 0, y: 0 };\n const container = containerRef.current;\n\n if (!container) return () => ({});\n if (disabled) {\n container.scrollTop = 0;\n\n return () => ({});\n }\n\n const mouseMoveHandler = (e: MouseEvent) => {\n const dy = e.clientY - mouseScrollPosition.current.y;\n\n container.scrollTop = mouseScrollPosition.current.top - dy;\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 y: e.clientY,\n };\n setIsMouseDown(true);\n\n document.addEventListener('mousemove', mouseMoveHandler);\n document.addEventListener('mouseup', mouseUpHandler);\n };\n\n container.addEventListener('mousedown', mouseDownHandler);\n\n return () => {\n container.removeEventListener('mousedown', mouseDownHandler);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [disabled]);\n};\n\nexport default useVerticalGrabScroll;\n","import ScrollProgressEnum from '@models/enums/ScrollProgressEnum';\nimport { useMotionValueEvent, useScroll } from 'framer-motion';\nimport { RefObject, useEffect, useState } from 'react';\n\nconst useVerticalScrollShadows = (\n containerRef: RefObject,\n containerHeight: number,\n contentHeight: number,\n disabled = false\n) => {\n const { scrollYProgress } = useScroll({\n container: containerRef,\n });\n const [isStart, setIsStart] = useState(true);\n const [isEnd, setIsEnd] = useState(false);\n const [scrollProgress, setScrollProgress] = useState(\n ScrollProgressEnum.Start\n );\n const threshold = 0.05;\n\n useMotionValueEvent(scrollYProgress, '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 if (!containerHeight || disabled) return;\n\n if (containerHeight >= contentHeight) {\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 }, [disabled, scrollProgress, containerHeight, contentHeight]);\n\n return { isStart, isEnd };\n};\n\nexport default useVerticalScrollShadows;\n","import useResizeObserver from '@utils/hooks/useResizeObserver';\nimport useVerticalGrabScroll from '@utils/hooks/useVerticalGrabScroll';\nimport useVerticalScrollShadows from '@utils/hooks/useVerticalScrollShadows';\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 IShadowContainerVerticalRef {\n readonly scrollTo: (offset: number, behavior?: ScrollBehavior) => void;\n}\n\ninterface Props {\n readonly className?: string;\n readonly customScrollbarTheme?: 'light' | 'dark';\n readonly hideScrollbar?: boolean;\n readonly shadowColour?: string;\n readonly disableScroll?: boolean;\n readonly shadowHeight?: string;\n}\n\nconst ShadowContainerVertical = forwardRef<\n IShadowContainerVerticalRef,\n PropsWithChildren\n>(\n (\n {\n children,\n className,\n customScrollbarTheme,\n disableScroll = false,\n shadowColour = 'from-white dark:from-black-100',\n hideScrollbar = true,\n shadowHeight = 'h-10',\n },\n ref\n ) => {\n const containerRef = useRef(null);\n const [containerRefCallback, { height: containerHeight }] =\n useResizeObserver();\n const [contentRefCallback, { height: contentHeight }] = useResizeObserver();\n const { isStart, isEnd } = useVerticalScrollShadows(\n containerRef,\n containerHeight,\n contentHeight,\n disableScroll\n );\n useVerticalGrabScroll(\n containerRef,\n containerHeight,\n contentHeight,\n disableScroll\n );\n\n useImperativeHandle(ref, () => ({\n scrollTo: (topOffset: number, behavior: ScrollBehavior = 'smooth') => {\n containerRef.current?.scrollTo({ top: topOffset, behavior });\n },\n }));\n\n return (\n
\n \n {!isStart && !disableScroll && (\n \n )}\n \n\n {\n containerRef.current = node;\n containerRefCallback(node);\n }}\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n tabIndex={0}\n className={classNames(\n {\n 'scrollbar-hide': hideScrollbar,\n 'overflow-y-hidden': disableScroll,\n 'overflow-y-auto': !disableScroll,\n 'custom-scrollbar': !disableScroll && customScrollbarTheme,\n 'custom-scrollbar--light': customScrollbarTheme === 'light',\n 'custom-scrollbar--dark': customScrollbarTheme === 'dark',\n },\n 'relative h-full select-none'\n )}\n >\n
{children}
\n
\n\n \n {!isEnd && !disableScroll && (\n \n )}\n \n \n );\n }\n);\n\nexport default ShadowContainerVertical;\n","import { useEffect, useState } from 'react';\n\nfunction useDebounce(value: T, delay?: number): T {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebouncedValue(value), delay || 500);\n\n return () => {\n clearTimeout(timer);\n };\n }, [value, delay]);\n\n return debouncedValue;\n}\n\nexport default useDebounce;\n","import Button from '@atoms/Button/Button';\nimport Icon from '@atoms/Icon/Icon';\nimport Image from '@atoms/Image/Image';\nimport PriceDisplayText from '@atoms/PriceDisplayText/PriceDisplayText';\nimport ReturnLink from '@atoms/ReturnLink/ReturnLink';\nimport ShadowContainerHorizontal, {\n IShadowContainerHorizontalRef,\n} from '@atoms/ShadowContainerHorizontal/ShadowContainerHorizontal';\nimport ShadowContainerVertical from '@atoms/ShadowContainerVertical/ShadowContainerVertical';\nimport BackgroundColourEnum from '@models/enums/IBackgroundColourEnum';\nimport StickyNavPosition from '@models/enums/StickyNavPositionEnum';\nimport { IAnchorLink } from '@models/IAnchorLink';\nimport { ICTALinks } from '@models/ICTALinks';\nimport { IImage } from '@models/IImage';\nimport { ILink } from '@models/ILink';\nimport { IPricingData } from '@models/IPricingData';\nimport useStickyNavPositionStore from '@state/StickyNavStore';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport useAriaLabels from '@utils/hooks/useAriaLabels';\nimport useDebounce from '@utils/hooks/useDebounce';\nimport useMediaQuery from '@utils/hooks/useMediaQuery';\nimport useResizeObserver from '@utils/hooks/useResizeObserver';\nimport classNames from 'classnames';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\ninterface INavItem extends IAnchorLink {\n readonly name?: string;\n readonly url?: string;\n readonly isActive?: boolean;\n}\n\ninterface Props {\n readonly title?: string;\n readonly subTitle?: string;\n readonly vatLabel?: string;\n readonly shippingLabel?: string;\n readonly thumbnail?: IImage;\n readonly icon?: IImage;\n readonly buyNowLink?: ILink;\n readonly anchorNavigationItems: IAnchorLink[] | undefined;\n readonly ctaLinks?: ICTALinks;\n readonly pricingData?: IPricingData;\n readonly fromPriceLabel?: string;\n readonly navPosition?: StickyNavPosition.Top | StickyNavPosition.Bottom;\n readonly returnLink?: ILink;\n readonly backgroundColour?:\n | BackgroundColourEnum.Black\n | BackgroundColourEnum.Grey;\n readonly showReturnLinkMobileOnly?: boolean;\n readonly tabbedNavigation?: ILink[];\n readonly shouldHavePadding?: boolean;\n}\n\nconst StickyNavigation = ({\n title,\n subTitle,\n vatLabel,\n shippingLabel,\n thumbnail,\n icon,\n buyNowLink,\n anchorNavigationItems,\n ctaLinks,\n pricingData,\n fromPriceLabel,\n navPosition = StickyNavPosition.Top,\n returnLink,\n backgroundColour = BackgroundColourEnum.Black,\n showReturnLinkMobileOnly,\n tabbedNavigation = [],\n shouldHavePadding,\n}: Props) => {\n const [isNavItemsDropdownDisplayed, setIsNavItemsDropdownDisplayed] =\n useState(false);\n const [activeElement, setActiveElement] = useState('');\n const [stickToBottom, setStickToBottom] = useState(false);\n const debouncedValue = useDebounce(activeElement, 250);\n const isMobile = useMediaQuery(1024);\n const isBelowLargeDesktop = useMediaQuery(1440);\n const isTabbed = tabbedNavigation.length > 0;\n const [productNavRefCallback, { clientHeight: productNavHeight }] =\n useResizeObserver();\n const navRef = useRef(null);\n const tabbedNavRef = useRef(null);\n const containerRef = useRef(null);\n const [currentBackgroundColour, setCurrentBackgroundColour] =\n useState(backgroundColour);\n const { setStickyNavPosition } = useStickyNavPositionStore((state) => ({\n setStickyNavPosition: state.setStickyNavPosition,\n }));\n const { closeModalAriaLabel, openMenuAriaLabel } = useAriaLabels();\n const colourCodesMapper = {\n [BackgroundColourEnum.Grey]: '#1F191A',\n [BackgroundColourEnum.Black]: '#0A0203',\n };\n const navPadding = (tabbedNavRef.current?.offsetHeight ?? 40) + 15;\n\n useEffect(() => {\n if (!isBelowLargeDesktop) {\n setIsNavItemsDropdownDisplayed(false);\n }\n }, [isBelowLargeDesktop]);\n\n const navItems: INavItem[] = anchorNavigationItems\n ? anchorNavigationItems.map((item) => ({\n title: item.title,\n primary: item.primary,\n secondary: item.secondary,\n anchor: item.anchor,\n }))\n : tabbedNavigation.map((item) => ({\n name: item.name,\n url: item.url,\n primary: false,\n secondary: false,\n isActive: item.isActive,\n }));\n\n const ctaNavItems = ctaLinks\n ? []\n : navItems.filter((item) => item.primary || item.secondary).slice(0, 2);\n\n const nonCtaNavItems = ctaLinks\n ? navItems.map((item) => ({\n ...item,\n primary: false,\n secondary: false,\n }))\n : navItems.filter((item) => !item.primary && !item.secondary);\n\n const mobileDropdownNavItems = [\n ...nonCtaNavItems,\n ...(ctaNavItems.length === 2 ? ctaNavItems : []),\n ];\n const displayedCTALinks =\n ctaLinks?.links\n .filter((ctaLink) => ctaLink.link.url && ctaLink.link.name)\n .slice(0, 2) ?? [];\n\n const getScrollTopOffset = () => {\n const anchorMenu = document.getElementById('AnchorMenu');\n const productNavigation = document.getElementById('ProductNavigation');\n const siteNotifications = document.getElementById('SiteNotifications');\n let yOffset = -20;\n\n if (anchorMenu) yOffset -= anchorMenu.clientHeight;\n if (productNavigation && !stickToBottom)\n yOffset -= productNavigation.clientHeight;\n if (siteNotifications) yOffset -= siteNotifications.clientHeight;\n\n return yOffset;\n };\n\n const scrollTo = (id: string) => {\n const element = document.getElementById(id);\n if (!element) return;\n\n const lazyLoadedImages = Array.from(\n document.querySelectorAll('img[loading=\"lazy\"]')\n ) as HTMLImageElement[];\n const imagesBeforeElement = lazyLoadedImages.filter(\n (image) =>\n element.compareDocumentPosition(image) ===\n Node.DOCUMENT_POSITION_PRECEDING\n );\n imagesBeforeElement.forEach((image) => {\n image.setAttribute('loading', 'eager');\n });\n\n // Need some timeout to allow for the images to load and adjust the page scrolling\n const scrollTimeout = (() => {\n if (imagesBeforeElement.length === 0) return 0;\n return isMobile ? 400 : 300;\n })();\n setTimeout(() => {\n const scrollTopPosition =\n (element?.getBoundingClientRect().top || 0) +\n window.scrollY +\n getScrollTopOffset();\n\n window.scrollTo({ top: scrollTopPosition, behavior: 'smooth' });\n }, scrollTimeout);\n };\n\n const closeMobileNavDropdown = () => {\n setTimeout(() => setIsNavItemsDropdownDisplayed(false), 750);\n };\n\n const filteredIds = useCallback(\n () => navItems.map((item) => `#a-${item.anchor}`),\n [navItems]\n );\n\n const updateActiveSection = useCallback(() => {\n const elements = document.querySelectorAll(filteredIds().toString());\n\n const observer = new IntersectionObserver(\n (entries) => {\n const listOfCurrentlyIntersecting = entries.filter(\n (entry) => entry.isIntersecting\n );\n\n let chosenItem: IntersectionObserverEntry | undefined;\n\n if (listOfCurrentlyIntersecting.length === 1) {\n chosenItem = listOfCurrentlyIntersecting.at(0);\n }\n\n if (listOfCurrentlyIntersecting.length > 1) {\n let found: IntersectionObserverEntry | undefined;\n listOfCurrentlyIntersecting.forEach((el) => {\n if (!found) found = el;\n if (el.intersectionRatio >= found?.intersectionRatio) found = el;\n });\n\n chosenItem = found;\n }\n\n setActiveElement(chosenItem?.target.id.split('-')[1] || '');\n },\n {\n rootMargin: '-30% 0% -30% 0%',\n threshold: [0, 0.25, 0.5, 0.75, 1],\n }\n );\n\n elements.forEach((el) => observer.observe(el));\n }, [filteredIds]);\n\n useEffect(() => {\n window.addEventListener('scroll', updateActiveSection);\n\n return () => window.removeEventListener('scroll', updateActiveSection);\n }, [updateActiveSection]);\n\n useEffect(() => {\n if (!navRef?.current) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n const newBackgroundColour =\n entry?.intersectionRatio === 1\n ? backgroundColour\n : BackgroundColourEnum.Black;\n setCurrentBackgroundColour(newBackgroundColour);\n },\n { threshold: 1 }\n );\n\n observer.observe(navRef.current);\n }, [backgroundColour]);\n\n useEffect(() => {\n const productNav = document.getElementById('ProductNavigation');\n if (!productNav) return;\n\n productNavRefCallback(productNav);\n }, [productNavRefCallback]);\n\n useEffect(() => {\n if (!stickToBottom) return;\n\n const productNav = document.getElementById('ProductNavigation');\n if (!productNav) return;\n\n if (isMobile) {\n document.documentElement.style.setProperty(\n 'padding-bottom',\n `${productNavHeight - 1}px`\n // Used that \"- 1\" to cover the sub-pixel rendering issue noticed in some browsers at certain zoom levels\n );\n productNav.classList.remove('sticky', 'top-0');\n productNav.classList.add('fixed', 'bottom-0', 'w-full');\n productNav.style.top = 'auto';\n } else {\n document.documentElement.style.removeProperty('padding-bottom');\n\n if (productNav.style.top === 'auto') productNav.style.top = '';\n productNav.classList.add('sticky', 'top-0');\n productNav.classList.remove('fixed', 'bottom-0', 'w-full');\n }\n }, [stickToBottom, isMobile, productNavHeight]);\n\n useEffect(() => {\n setStickToBottom(navPosition === StickyNavPosition.Bottom && !!isMobile);\n setStickyNavPosition(navPosition);\n }, [navPosition, setStickyNavPosition, isMobile]);\n\n useEffect(() => {\n if (!containerRef.current || !tabbedNavRef.current) return;\n\n const activeNavigationElement = tabbedNavRef.current?.querySelector(\n 'a[data-nav-active=\"true\"]'\n ) as HTMLElement;\n\n if (activeNavigationElement) {\n const containerWidth = containerRef.current.getOffsetWidth();\n const leftOffset =\n activeNavigationElement.offsetLeft +\n activeNavigationElement.clientWidth / 2 -\n containerWidth / 2;\n\n containerRef.current.scrollTo(leftOffset);\n }\n }, []);\n\n return (\n \n {returnLink?.name && returnLink?.url && (\n \n \n \n \n \n )}\n\n {buyNowLink?.name && (\n
\n {thumbnail && (\n
\n )}\n\n \n \n \n
\n {nonCtaNavItems.map((item, index) => (\n \n {item.title ? (\n {\n scrollTo(`a-${item.anchor}`);\n if (pricingData?.formattedCalculatedPrice) {\n updateDataLayer({\n event: 'menuUsed',\n content_type: 'pdp_menu',\n main_category: item.title,\n });\n } else {\n updateDataLayer({\n event: 'menuUsed',\n content_type: 'anchor_menu',\n main_category: item.title,\n });\n }\n }}\n className={classNames(\n {\n 'border-b border-yellow text-yellow':\n item.anchor === debouncedValue,\n },\n 'body-two ml-7.5 transition-all duration-100 hover:text-grey-500'\n )}\n data-testid={`CT-06-Sticky-Navigation-Non-CTA-Nav-Item-${index}-Button`}\n >\n {item.title}\n \n ) : (\n {\n updateDataLayer({\n event: 'menuUsed',\n content_type: 'pdp_menu',\n main_category: item.name,\n });\n }}\n data-testid={`CT-06-Sticky-Navigation-Non-CTA-Nav-Item-${index}-Link`}\n >\n {item.name}\n \n )}\n
\n ))}\n \n \n \n\n {(mobileDropdownNavItems.length > 0 ||\n displayedCTALinks.length === 2) &&\n !isTabbed && (\n
  • \n
    \n \n setIsNavItemsDropdownDisplayed(!isNavItemsDropdownDisplayed)\n }\n aria-label={\n isNavItemsDropdownDisplayed\n ? closeModalAriaLabel\n : openMenuAriaLabel\n }\n data-testid=\"CT-06-Sticky-Navigation-Dropdown-Button\"\n >\n \n \n
    \n
  • \n )}\n\n {ctaNavItems.map((item, index) => (\n \n scrollTo(`a-${item.anchor}`)}\n secondary={!item.primary && item.secondary}\n linkCallback={() => {\n updateDataLayer({\n event: 'menuUsed',\n content_type: 'anchor_menu',\n main_cta: item.title,\n });\n }}\n dataTestId={`CT-06-Sticky-Navigation-CTA-Nav-Item-${index}-Button`}\n >\n {item.title}\n \n \n ))}\n\n {displayedCTALinks.map((ctaLink, index) => (\n \n {\n updateDataLayer({\n event: 'menuUsed',\n content_type: 'anchor_menu',\n main_cta: ctaLink.link.name,\n });\n }}\n data-testid={`CT-06-Sticky-Navigation-Displayed-CTA-Link-${index}-Button`}\n />\n \n ))}\n\n {buyNowLink?.name && buyNowLink.url && (\n
  • \n {\n updateDataLayer({\n event: 'menuUsed',\n content_type: 'pdp_menu',\n main_cta: buyNowLink.name,\n });\n }}\n dataTestId=\"CT-06-Sticky-Navigation-Buy-Now-Link\"\n className=\"text-center lg:ml-5 xl:ml-7.5\"\n />\n
  • \n )}\n \n\n \n {isNavItemsDropdownDisplayed && (\n \n \n
      \n {mobileDropdownNavItems.map((item, index) => (\n
    • \n {!item.primary && !item.secondary ? (\n (item.title && (\n {\n scrollTo(`a-${item.anchor}`);\n closeMobileNavDropdown();\n\n if (pricingData?.formattedCalculatedPrice) {\n updateDataLayer({\n event: 'menuUsed',\n content_type: 'pdp_menu',\n main_category: item.title,\n });\n } else {\n updateDataLayer({\n event: 'menuUsed',\n content_type: 'anchor_menu',\n main_category: item.title,\n });\n }\n }}\n onKeyDown={() => {\n scrollTo(`a-${item.anchor}`);\n closeMobileNavDropdown();\n }}\n className={classNames(\n {\n 'border-b-2 border-yellow':\n item.anchor === debouncedValue,\n },\n 'body-three font-light text-black-100'\n )}\n data-testid={`CT-06-Sticky-Navigation-Dropdown-Item-${index}`}\n >\n {item.title}\n \n )) ||\n (item.url && (\n \n {item.name}\n \n ))\n ) : (\n \n )}\n
    • \n ))}\n\n {displayedCTALinks.length === 2 &&\n displayedCTALinks.map((ctaLink, index) => (\n
    • \n \n
    • \n ))}\n
    \n \n \n )}\n
    \n\n \n {isTabbed && (\n \n \n {nonCtaNavItems.map(({ name, url, isActive }, index) => (\n \n {name}\n \n ))}\n \n \n )}\n \n \n );\n};\n\nexport default StickyNavigation;\n","const enum BreakpointEnum {\n Small = 'sm',\n Medium = 'md',\n Large = 'lg',\n XLarge = 'xl',\n}\n\nexport default BreakpointEnum;\n","const enum BackgroundColourEnum {\n Black = 'black',\n Grey = 'grey',\n OffWhite = 'off-white',\n ShadowGrey = 'shadow-grey',\n Yellow = 'yellow',\n}\n\nexport default BackgroundColourEnum;\n","enum ScrollProgressEnum {\n Start = 'Start',\n Middle = 'Middle',\n End = 'End',\n}\n\nexport default ScrollProgressEnum;\n","enum StickyNavPosition {\n Top = 'top',\n Bottom = 'bottom',\n}\n\nexport default StickyNavPosition;\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","import StickyNavPosition from '@models/enums/StickyNavPositionEnum';\nimport create from 'zustand';\n\ntype StickyNavPositions = StickyNavPosition.Top | StickyNavPosition.Bottom;\n\ninterface IStickyNavPositionState {\n readonly stickyNavPosition: StickyNavPosition;\n readonly setStickyNavPosition: (navPosition: StickyNavPositions) => void;\n}\n\nconst useStickyNavPositionStore = create((set) => ({\n stickyNavPosition: StickyNavPosition.Top,\n setStickyNavPosition: (navPosition: StickyNavPositions) =>\n set({ stickyNavPosition: navPosition }),\n}));\n\nexport default useStickyNavPositionStore;\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 { 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","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","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.iconList = void 0;\nvar react_1 = require(\"react\");\nvar IcoMoon = function (_a) {\n var iconSet = _a.iconSet, icon = _a.icon, size = _a.size, title = _a.title, disableFill = _a.disableFill, removeInlineStyle = _a.removeInlineStyle, native = _a.native, SvgComponent = _a.SvgComponent, PathComponent = _a.PathComponent, props = __rest(_a, [\"iconSet\", \"icon\", \"size\", \"title\", \"disableFill\", \"removeInlineStyle\", \"native\", \"SvgComponent\", \"PathComponent\"]);\n if (!iconSet || !icon)\n return null;\n var currentIcon = iconSet.icons.find(function (item) { return item.properties.name === icon; });\n if (!currentIcon)\n return null;\n var initialStyle = {\n display: \"inline-block\",\n stroke: \"currentColor\",\n fill: \"currentColor\",\n };\n if (native) {\n initialStyle.display = \"flex\";\n initialStyle.flexDirection = \"row\";\n initialStyle.flexWrap = \"wrap\";\n }\n var comptuedStyle = __assign(__assign(__assign({}, (removeInlineStyle ? {} : initialStyle)), (size ? { width: size, height: size } : {})), (props.style || {}));\n var _b = currentIcon.icon.width, width = _b === void 0 ? \"1024\" : _b;\n var viewBox = \"0 0 \".concat(width, \" 1024\");\n var children = currentIcon.icon.paths.map(function (path, index) {\n var _a;\n var attrs = (_a = currentIcon.icon.attrs) === null || _a === void 0 ? void 0 : _a[index];\n var pathProps = __assign({ d: path, key: icon + index }, (!disableFill && attrs ? attrs : {}));\n return (0, react_1.createElement)(PathComponent || \"path\", pathProps);\n });\n if (title && !native) {\n children.push((0, react_1.createElement)(\"title\", { key: title }, title));\n }\n return (0, react_1.createElement)(SvgComponent || \"svg\", __assign(__assign({}, props), { viewBox: viewBox, style: comptuedStyle }), children);\n};\nvar iconList = function (iconSet) {\n if (!iconSet || !Array.isArray(iconSet.icons))\n return null;\n return iconSet.icons.map(function (icon) { return icon.properties.name; });\n};\nexports.iconList = iconList;\nexports.default = IcoMoon;\n//# sourceMappingURL=index.js.map","import { useReducer, useRef, useDebugValue, useEffect, useLayoutEffect } from 'react';\n\nfunction createStore(createState) {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (nextState !== state) {\n const previousState = state;\n state = replace ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const subscribeWithSelector = (listener, selector = getState, equalityFn = Object.is) => {\n console.warn(\"[DEPRECATED] Please use `subscribeWithSelector` middleware\");\n let currentSlice = selector(state);\n function listenerToAdd() {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n listener(currentSlice = nextSlice, previousSlice);\n }\n }\n listeners.add(listenerToAdd);\n return () => listeners.delete(listenerToAdd);\n };\n const subscribe = (listener, selector, equalityFn) => {\n if (selector || equalityFn) {\n return subscribeWithSelector(listener, selector, equalityFn);\n }\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => listeners.clear();\n const api = { setState, getState, subscribe, destroy };\n state = createState(setState, getState, api);\n return api;\n}\n\nconst isSSR = typeof window === \"undefined\" || !window.navigator || /ServerSideRendering|^Deno\\//.test(window.navigator.userAgent);\nconst useIsomorphicLayoutEffect = isSSR ? useEffect : useLayoutEffect;\nfunction create(createState) {\n const api = typeof createState === \"function\" ? createStore(createState) : createState;\n const useStore = (selector = api.getState, equalityFn = Object.is) => {\n const [, forceUpdate] = useReducer((c) => c + 1, 0);\n const state = api.getState();\n const stateRef = useRef(state);\n const selectorRef = useRef(selector);\n const equalityFnRef = useRef(equalityFn);\n const erroredRef = useRef(false);\n const currentSliceRef = useRef();\n if (currentSliceRef.current === void 0) {\n currentSliceRef.current = selector(state);\n }\n let newStateSlice;\n let hasNewStateSlice = false;\n if (stateRef.current !== state || selectorRef.current !== selector || equalityFnRef.current !== equalityFn || erroredRef.current) {\n newStateSlice = selector(state);\n hasNewStateSlice = !equalityFn(currentSliceRef.current, newStateSlice);\n }\n useIsomorphicLayoutEffect(() => {\n if (hasNewStateSlice) {\n currentSliceRef.current = newStateSlice;\n }\n stateRef.current = state;\n selectorRef.current = selector;\n equalityFnRef.current = equalityFn;\n erroredRef.current = false;\n });\n const stateBeforeSubscriptionRef = useRef(state);\n useIsomorphicLayoutEffect(() => {\n const listener = () => {\n try {\n const nextState = api.getState();\n const nextStateSlice = selectorRef.current(nextState);\n if (!equalityFnRef.current(currentSliceRef.current, nextStateSlice)) {\n stateRef.current = nextState;\n currentSliceRef.current = nextStateSlice;\n forceUpdate();\n }\n } catch (error) {\n erroredRef.current = true;\n forceUpdate();\n }\n };\n const unsubscribe = api.subscribe(listener);\n if (api.getState() !== stateBeforeSubscriptionRef.current) {\n listener();\n }\n return unsubscribe;\n }, []);\n const sliceToReturn = hasNewStateSlice ? newStateSlice : currentSliceRef.current;\n useDebugValue(sliceToReturn);\n return sliceToReturn;\n };\n Object.assign(useStore, api);\n useStore[Symbol.iterator] = function() {\n console.warn(\"[useStore, api] = create() is deprecated and will be removed in v4\");\n const items = [useStore, api];\n return {\n next() {\n const done = items.length <= 0;\n return { value: items.shift(), done };\n }\n };\n };\n return useStore;\n}\n\nexport { create as default };\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","fromPriceLabel","pricingData","vatLabel","shippingLabel","rrpLabel","centerText","smallText","containerClassName","taxesTopMarginClassName","taxesClassName","priceClassName","amountSaved","formattedPrice","formattedCalculatedPrice","shippingCost","price","Fragment","Icon","colorClassName","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","containerHeight","contentHeight","arguments","undefined","scrollYProgress","customScrollbarTheme","hideScrollbar","shadowHeight","containerRefCallback","useResizeObserver","contentRefCallback","useVerticalScrollShadows","useVerticalGrabScroll","topOffset","node","delay","debouncedValue","setDebouncedValue","timer","setTimeout","clearTimeout","title","subTitle","thumbnail","icon","buyNowLink","anchorNavigationItems","ctaLinks","navPosition","StickyNavPosition","Top","returnLink","backgroundColour","BackgroundColourEnum","Black","showReturnLinkMobileOnly","tabbedNavigation","shouldHavePadding","isNavItemsDropdownDisplayed","setIsNavItemsDropdownDisplayed","activeElement","setActiveElement","stickToBottom","setStickToBottom","useDebounce","isMobile","useMediaQuery","isBelowLargeDesktop","isTabbed","productNavRefCallback","clientHeight","productNavHeight","navRef","tabbedNavRef","currentBackgroundColour","setCurrentBackgroundColour","setStickyNavPosition","useStickyNavPositionStore","state","closeModalAriaLabel","openMenuAriaLabel","useAriaLabels","colourCodesMapper","Grey","navPadding","offsetHeight","navItems","map","item","primary","anchor","isActive","ctaNavItems","filter","slice","nonCtaNavItems","mobileDropdownNavItems","displayedCTALinks","links","ctaLink","id","element","getElementById","imagesBeforeElement","Array","from","querySelectorAll","compareDocumentPosition","Node","DOCUMENT_POSITION_PRECEDING","forEach","setAttribute","scrollTimeout","scrollTopPosition","getBoundingClientRect","window","scrollY","getScrollTopOffset","anchorMenu","productNavigation","siteNotifications","yOffset","closeMobileNavDropdown","filteredIds","useCallback","updateActiveSection","elements","toString","observer","IntersectionObserver","entries","listOfCurrentlyIntersecting","entry","isIntersecting","chosenItem","at","found","el","intersectionRatio","split","rootMargin","observe","_ref2","newBackgroundColour","productNav","documentElement","setProperty","classList","remove","add","removeProperty","Bottom","activeNavigationElement","querySelector","containerWidth","offsetLeft","div","backgroundColor","paddingBottom","paddingTop","ReturnLink","Image","PriceDisplayText","li","ShadowContainerHorizontal","index","key","updateDataLayer","event","content_type","main_category","button","rotate","Button","main_cta","translateY","ease","ShadowContainerVertical","onKeyDown","_ref3","initialAriaLabels","backToFirstLevelNavigationAriaLabel","breadcrumbAriaLabel","breadcrumbFooterAriaLabel","clearFiltersAriaLabel","closeMenuAriaLabel","closeAddressListAriaLabel","closeMobileNavigationAriaLabel","closeSignUpFormAriaLabel","closeSiteNotificationAriaLabel","copyToClipboardAriaLabel","editOrDeleteAriaLabel","mainNavigationAriaLabel","moreInformationAriaLabel","nextAriaLabel","openAddressListAriaLabel","openImageInFullScreenAriaLabel","overlayToCloseDesktopNavigationAriaLabel","pauseVideoAriaLabel","playVideoAriaLabel","previousAriaLabel","searchAriaLabel","shareToFacebookAriaLabel","shareToWhatsappAriaLabel","shareToXAriaLabel","siteNotificationsAriaLabel","uspStripAriaLabel","zoomInAriaLabel","zoomOutAriaLabel","create","set","ariaLabels","setAriaLabels","stickyNavPosition","eventPayload","dataLayer","push","ariaLabelsFromStore","useAriaLabelsStore","getCurrentBreakpoint","breakpoints","innerWidth","screen","setScreen","resizeHandler","minWidth","isSmallerThan","setIsSmallerThan","handler","isDesiredWidth","observerRef","resizeParameters","setResizeParameters","scrollHeight","handleResize","isArray","contentRect","disconnect","ResizeObserver","__assign","this","Object","assign","t","s","i","n","p","prototype","hasOwnProperty","call","apply","__rest","indexOf","getOwnPropertySymbols","propertyIsEnumerable","defineProperty","exports","iconList","react_1","iconSet","icons","properties","_a","size","disableFill","removeInlineStyle","native","SvgComponent","PathComponent","props","currentIcon","find","initialStyle","display","stroke","fill","flexDirection","flexWrap","comptuedStyle","_b","viewBox","concat","paths","path","attrs","pathProps","d","createStore","createState","listeners","Set","setState","partial","replace","nextState","previousState","listener","getState","api","subscribe","selector","equalityFn","is","console","warn","currentSlice","listenerToAdd","nextSlice","previousSlice","delete","subscribeWithSelector","destroy","clear","useIsomorphicLayoutEffect","navigator","test","userAgent","useLayoutEffect","useStore","forceUpdate","useReducer","c","stateRef","selectorRef","equalityFnRef","erroredRef","currentSliceRef","newStateSlice","hasNewStateSlice","stateBeforeSubscriptionRef","nextStateSlice","error","unsubscribe","sliceToReturn","useDebugValue","Symbol","iterator","items","next","done","shift"],"sourceRoot":""}