{"version":3,"file":"Header-Chunk-61fbd9b7a12be310f4b1.js","mappings":"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","sources":["webpack://nikon-client/./components/atoms/Backdrop/Backdrop.tsx","webpack://nikon-client/./components/atoms/CloseButton/CloseButton.tsx","webpack://nikon-client/./components/atoms/IconPageLink/IconPageLink.tsx","webpack://nikon-client/./components/atoms/Modal/Modal.tsx","webpack://nikon-client/./components/atoms/Portal/Portal.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/./components/atoms/Tooltip/Tooltip.tsx","webpack://nikon-client/./components/molecules/AccountNavigation/AccountNavigation.tsx","webpack://nikon-client/./components/molecules/Dropdown/Dropdown.tsx","webpack://nikon-client/./components/molecules/AccountDropdown/AccountDropdown.tsx","webpack://nikon-client/./components/molecules/MiniBasketItem/MiniBasketItem.tsx","webpack://nikon-client/./components/molecules/MiniBasket/MiniBasket.tsx","webpack://nikon-client/./components/organisms/Search/PopularSearches.tsx","webpack://nikon-client/./components/organisms/Search/SearchResultsList.tsx","webpack://nikon-client/./components/organisms/Search/Search.tsx","webpack://nikon-client/./components/organisms/Header/subNav/LinksList.tsx","webpack://nikon-client/./components/organisms/Header/subNav/NavigationCard.tsx","webpack://nikon-client/./components/organisms/Header/subNav/SubNavTab.tsx","webpack://nikon-client/./components/organisms/Header/subNav/desktop/DesktopSubNav.tsx","webpack://nikon-client/./components/organisms/Header/subNav/mobile/AccountMenuMobile.tsx","webpack://nikon-client/./components/organisms/Header/subNav/mobile/LanguageSelectorMobile.tsx","webpack://nikon-client/./components/organisms/Header/subNav/mobile/MobileSecondLevelContent.tsx","webpack://nikon-client/./components/organisms/Header/subNav/mobile/MobileSecondLevel.tsx","webpack://nikon-client/./components/organisms/Header/subNav/mobile/MobileTopLevel.tsx","webpack://nikon-client/./components/organisms/Header/subNav/mobile/MobileSubNav.tsx","webpack://nikon-client/./components/organisms/Header/Header.tsx","webpack://nikon-client/./models/enums/ErrorBannerNotificationEnum.ts","webpack://nikon-client/./models/enums/ScrollProgressEnum.ts","webpack://nikon-client/./models/enums/TooltipPositionEnum.ts","webpack://nikon-client/./models/enums/VerticalDirectionEnum.ts","webpack://nikon-client/./services/cart.ts","webpack://nikon-client/./state-management/CartSizeStore.ts","webpack://nikon-client/./state-management/ComponentsHeightsStore.ts","webpack://nikon-client/./state-management/CookieStatusStore.ts","webpack://nikon-client/./state-management/ErrorBannerNotificationDisplayStore.ts","webpack://nikon-client/./utility/helpers/bodyScrollLock.ts","webpack://nikon-client/./utility/hooks/useCookieConsent.ts","webpack://nikon-client/./utility/hooks/useIsInIFrame.ts","webpack://nikon-client/./utility/hooks/useIsTouchDevice.ts","webpack://nikon-client/./node_modules/.pnpm/js-cookie@3.0.5/node_modules/js-cookie/dist/js.cookie.mjs"],"sourcesContent":["import { motion } from 'framer-motion';\nimport { Dispatch, PropsWithChildren, SetStateAction } from 'react';\n\ninterface Props {\n  readonly onCloseCallback?: Dispatch<SetStateAction<boolean>>;\n  readonly className?: string;\n}\n\nconst Backdrop = ({\n  children,\n  className,\n  onCloseCallback,\n}: PropsWithChildren<Props>) => (\n  <motion.div\n    animate={{ opacity: 1 }}\n    exit={{ opacity: 0 }}\n    initial={{ opacity: 0 }}\n    role=\"presentation\"\n    className={className}\n    onClick={() => onCloseCallback?.((oldState: boolean) => !oldState)}\n  >\n    <div className=\"fixed bottom-0 left-0 right-0 top-0 bg-black-100/40\">\n      {children}\n    </div>\n  </motion.div>\n);\n\nexport default Backdrop;\n","import IconSizeEnum from '@models/enums/IconSizeEnum';\nimport useAriaLabels from '@utils/hooks/useAriaLabels';\nimport classNames from 'classnames';\nimport { MouseEventHandler } from 'react';\n\ninterface Props {\n  readonly ariaLabel?: string;\n  readonly className?: string;\n  readonly color?: 'black' | 'white' | 'red';\n  readonly onClick: MouseEventHandler;\n  readonly size?: IconSizeEnum | string;\n  readonly dataTestId?: string;\n}\n\nconst CloseButton = ({\n  ariaLabel,\n  className,\n  color = 'black',\n  onClick,\n  size = IconSizeEnum.lg,\n  dataTestId,\n}: Props) => {\n  const { closeModalAriaLabel } = useAriaLabels();\n\n  const closeColours = {\n    black: 'before:bg-black-100 after:bg-black-100',\n    white: 'before:bg-white after:bg-white',\n    red: 'before:bg-red-100 after:bg-red-100',\n  };\n\n  return (\n    <button\n      type=\"button\"\n      className={classNames('close-button', closeColours[color], className)}\n      aria-label={ariaLabel ?? closeModalAriaLabel}\n      style={{ width: size, height: size }}\n      onClick={onClick}\n      data-testid={dataTestId}\n    />\n  );\n};\n\nexport default CloseButton;\n","import Icon from '@atoms/Icon/Icon';\nimport { IIconPageLink } from '@models/IIconPageLink';\nimport classNames from 'classnames';\nimport {\n  ButtonHTMLAttributes,\n  DetailedHTMLProps,\n  PropsWithChildren,\n} from 'react';\n\ninterface WrapperProps {\n  readonly url: string;\n  readonly label?: string;\n}\n\nconst Wrapper = ({\n  children,\n  label,\n  url,\n  ...buttonProps\n}: PropsWithChildren<WrapperProps>) =>\n  url ? (\n    <a className=\"flex items-center gap-5\" href={url} aria-label={label}>\n      {children}\n    </a>\n  ) : (\n    <button\n      {...buttonProps}\n      className=\"flex items-center gap-5\"\n      aria-label={label}\n    >\n      {children}\n    </button>\n  );\n\ntype IconPageLinkProps = IIconPageLink &\n  DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>;\n\nconst IconPageLink = ({\n  active = false,\n  icon,\n  label,\n  secondaryLabel,\n  url,\n  dataTestId = 'Icon-Page-Link',\n  ...buttonProps\n}: IconPageLinkProps) => {\n  const circleClasses = classNames(\n    {\n      'text-black-100 bg-grey-100 hover:bg-grey active:bg-black-100': !active,\n    },\n    {\n      'text-white bg-black-100 hover:bg-grey hover:text-black-100 active:bg-grey-200':\n        active,\n    },\n    'w-13 h-13 rounded-full flex shrink-0 items-center group justify-center'\n  );\n\n  return (\n    <Wrapper\n      {...buttonProps}\n      label={label}\n      url={`${url}`}\n      data-testid={dataTestId}\n    >\n      <div className={circleClasses} data-testid={`${dataTestId}-Icon`}>\n        <Icon\n          name={icon}\n          colorClassName={\n            active\n              ? 'text-white group-active:text-black-100'\n              : 'text-black-100 group-active:text-white'\n          }\n        />\n      </div>\n      {(label || secondaryLabel) && (\n        <div className=\"flex flex-col\">\n          {label && (\n            <div className=\"body-two\" data-testid={`${dataTestId}-Label`}>\n              {label}\n            </div>\n          )}\n          {secondaryLabel && (\n            <div\n              className={classNames(\n                active ? 'text-black-100' : 'text-grey-600',\n                'body-four'\n              )}\n              data-testid={`${dataTestId}-Secondary-Label`}\n            >\n              {secondaryLabel}\n            </div>\n          )}\n        </div>\n      )}\n    </Wrapper>\n  );\n};\n\nexport default IconPageLink;\n","import CloseButton from '@atoms/CloseButton/CloseButton';\nimport Portal from '@atoms/Portal/Portal';\nimport IconSizeEnum from '@models/enums/IconSizeEnum';\nimport bodyScrollLock from '@utils/helpers/bodyScrollLock';\nimport classNames from 'classnames';\nimport FocusTrap from 'focus-trap-react';\nimport { motion } from 'framer-motion';\nimport { PropsWithChildren, useCallback, useEffect, useRef } from 'react';\n\ninterface Props {\n  readonly onCloseCallback?: () => void;\n  readonly contentClasses?: string;\n  readonly crossMarginsClassName?: string;\n  readonly crossClasses?: string;\n  readonly crossColor?: 'black' | 'white';\n  readonly isOpen: boolean;\n  readonly modalClasses?: string;\n  readonly setIsOpen?: (param: boolean) => void;\n  readonly showCloseButton?: boolean;\n  readonly transparent?: boolean;\n  readonly isCloseButtonFixed?: boolean;\n  readonly closeButtonIconSize?: IconSizeEnum | string;\n  readonly shouldCloseOnClickOutsideContent?: boolean;\n  readonly shouldLockBody?: boolean;\n}\n\nconst Modal = ({\n  onCloseCallback,\n  children,\n  contentClasses,\n  crossColor = 'white',\n  crossMarginsClassName = 'mr-8 mt-8',\n  crossClasses,\n  isOpen,\n  modalClasses,\n  setIsOpen,\n  showCloseButton = true,\n  transparent = false,\n  isCloseButtonFixed = true,\n  closeButtonIconSize = IconSizeEnum.md,\n  shouldCloseOnClickOutsideContent = false,\n  shouldLockBody = true,\n}: PropsWithChildren<Props>) => {\n  const contentRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (isOpen && shouldLockBody) {\n      bodyScrollLock(true);\n    }\n\n    return () => {\n      if (shouldLockBody) bodyScrollLock(false);\n    };\n  }, [isOpen, shouldLockBody]);\n\n  const close = useCallback(() => {\n    setIsOpen?.(false);\n    onCloseCallback?.();\n  }, [onCloseCallback, setIsOpen]);\n\n  useEffect(() => {\n    const keyboardClose = (ev: KeyboardEvent) => {\n      if (ev.key === 'Escape' && isOpen === true) {\n        setIsOpen?.(false);\n      }\n    };\n    window.addEventListener('keydown', keyboardClose);\n\n    return () => {\n      window.removeEventListener('keydown', keyboardClose);\n    };\n  }, [isOpen, setIsOpen]);\n\n  useEffect(() => {\n    const handleClickOutsideContent = (ev: Event) => {\n      if (\n        isOpen &&\n        shouldCloseOnClickOutsideContent &&\n        !contentRef.current?.contains(ev.target as HTMLElement)\n      ) {\n        close();\n      }\n    };\n\n    window.addEventListener('click', handleClickOutsideContent, true);\n\n    return () => {\n      window.removeEventListener('click', handleClickOutsideContent, true);\n    };\n  }, [close, isOpen, shouldCloseOnClickOutsideContent]);\n\n  if (!isOpen) {\n    return null;\n  }\n\n  return (\n    <Portal key=\"portal\" mountId=\"drawer-root\">\n      <FocusTrap\n        focusTrapOptions={{\n          preventScroll: true,\n          escapeDeactivates: false,\n        }}\n      >\n        <motion.div\n          animate={{ opacity: 1 }}\n          className=\"relative z-max h-auto\"\n          exit={{ opacity: 0 }}\n          initial={{ opacity: 0 }}\n          transition={{\n            duration: 0.8,\n            ease: [0.04, 0.62, 0.23, 0.98],\n          }}\n        >\n          <section\n            className={classNames(\n              transparent ? 'bg-black-100/50' : 'bg-black-100',\n              'fixed inset-0 z-100 text-white'\n            )}\n          >\n            <div className=\"flex h-full w-full\">\n              <div\n                className={classNames(\n                  modalClasses,\n                  'container h-full w-full overflow-y-auto'\n                )}\n              >\n                <div\n                  className={classNames(contentClasses, 'relative text-left')}\n                  ref={contentRef}\n                >\n                  {showCloseButton && (\n                    <>\n                      {/* A hidden button that steals the inital focus of the modal preventing the close icon from animating on modal open  */}\n                      {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n                      <button className=\"hidden\" />\n\n                      <CloseButton\n                        color={crossColor}\n                        size={closeButtonIconSize}\n                        onClick={close}\n                        className={classNames(\n                          'right-0 top-0 z-100 flex cursor-pointer flex-col items-center',\n                          isCloseButtonFixed ? 'fixed' : 'absolute',\n                          crossMarginsClassName,\n                          crossClasses\n                        )}\n                      />\n                    </>\n                  )}\n                  {children}\n                </div>\n              </div>\n            </div>\n          </section>\n        </motion.div>\n      </FocusTrap>\n    </Portal>\n  );\n};\n\nexport default Modal;\n","import { PropsWithChildren, useEffect, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\n\ninterface Props {\n  readonly mountId: string;\n}\n\nconst Portal = ({ mountId, children }: PropsWithChildren<Props>) => {\n  const containerElement = useMemo(() => document.createElement('div'), []);\n\n  useEffect(() => {\n    document.getElementById(mountId)?.appendChild(containerElement);\n\n    return () => {\n      document.getElementById(mountId)?.removeChild(containerElement);\n    };\n  }, [mountId, containerElement]);\n\n  return createPortal(children, containerElement);\n};\n\nexport default Portal;\n","import { RefObject, useEffect, useRef, useState } from 'react';\n\nconst useVerticalGrabScroll = (\n  containerRef: RefObject<HTMLElement>,\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<HTMLElement>,\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<Props>\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<HTMLDivElement | null>(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      <div className={classNames(className, 'relative h-full')}>\n        <AnimatePresence>\n          {!isStart && !disableScroll && (\n            <motion.span\n              animate={{ opacity: 1 }}\n              className={classNames(\n                shadowColour,\n                shadowHeight,\n                `pointer-events-none absolute top-0 z-10 w-full bg-gradient-to-b to-transparent`\n              )}\n              exit={{ opacity: 0 }}\n              initial={{ opacity: 0 }}\n              transition={{ duration: 0.25 }}\n            />\n          )}\n        </AnimatePresence>\n\n        <div\n          ref={(node) => {\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          <div ref={contentRefCallback}>{children}</div>\n        </div>\n\n        <AnimatePresence>\n          {!isEnd && !disableScroll && (\n            <motion.span\n              animate={{ opacity: 1 }}\n              className={classNames(\n                shadowColour || 'from-white dark:from-black-100',\n                shadowHeight,\n                `pointer-events-none absolute bottom-0 z-10 w-full bg-gradient-to-t to-transparent`\n              )}\n              exit={{ opacity: 0 }}\n              initial={{ opacity: 0 }}\n              transition={{ duration: 0.25 }}\n            />\n          )}\n        </AnimatePresence>\n      </div>\n    );\n  }\n);\n\nexport default ShadowContainerVertical;\n","import TooltipPositionEnum from '@models/enums/TooltipPositionEnum';\nimport classNames from 'classnames';\nimport { PropsWithChildren } from 'react';\n\ninterface Props {\n  readonly arrowRadiusClassName?: string;\n  readonly backgroundColor?: string;\n  readonly customArrowClassName?: string;\n  readonly customContentClassName?: string;\n  readonly customWrapperClassName?: string;\n  readonly dataTestId?: string;\n  readonly hasArrow?: boolean;\n  readonly hasTooltipClass?: boolean;\n  readonly label?: string;\n  readonly position: TooltipPositionEnum;\n}\n\nconst Tooltip = ({\n  arrowRadiusClassName = 'rounded-sm',\n  backgroundColor = 'bg-white',\n  customArrowClassName,\n  customContentClassName,\n  customWrapperClassName,\n  dataTestId = 'Tooltip',\n  hasArrow,\n  hasTooltipClass = true,\n  label,\n  position,\n  children,\n}: PropsWithChildren<Props>) => {\n  const positionClasses = {\n    [TooltipPositionEnum.Top]: 'bottom-3 left-1/2 -translate-x-1/2',\n    [TooltipPositionEnum.Bottom]: 'left-1/2 -translate-x-1/2 top-3',\n    [TooltipPositionEnum.BottomLeft]:\n      'left-1/2 translate-x-[calc(-100%+20px)] top-3',\n    [TooltipPositionEnum.Custom]: customContentClassName,\n  };\n\n  const isBottomVariant =\n    position === TooltipPositionEnum.Bottom ||\n    position === TooltipPositionEnum.BottomLeft;\n  const isTopVariant = position === TooltipPositionEnum.Top;\n\n  return (\n    <div\n      className={classNames('absolute z-100 w-full', customWrapperClassName, {\n        tooltip: hasTooltipClass,\n        'top-0': isTopVariant,\n        'bottom-0': isBottomVariant,\n      })}\n    >\n      {hasArrow && (\n        <span\n          className={classNames(\n            'absolute left-1/2 h-[17px] w-[17px] -translate-x-1/2 rotate-45',\n            backgroundColor,\n            arrowRadiusClassName,\n            customArrowClassName,\n            {\n              'top-2.5': isBottomVariant,\n              'bottom-2.5': isTopVariant,\n            }\n          )}\n          data-testid={`${dataTestId}-Arrow`}\n        />\n      )}\n\n      {children ? (\n        <div className={classNames('absolute', positionClasses[position])}>\n          {children}\n        </div>\n      ) : (\n        <p\n          className={classNames(\n            'small-text absolute whitespace-nowrap rounded-full p-1 px-3 text-center text-black-100',\n            backgroundColor,\n            positionClasses[position]\n          )}\n          data-testid={dataTestId}\n        >\n          {label}\n        </p>\n      )}\n    </div>\n  );\n};\n\nexport default Tooltip;\n","import Button from '@atoms/Button/Button';\nimport IconPageLink from '@atoms/IconPageLink/IconPageLink';\nimport { IAccountNavigation } from '@models/IAccountNavigation';\n\nconst AccountNavigation = ({\n  items,\n  signOutCta,\n  signOutEndpoint,\n}: IAccountNavigation) => (\n  <aside\n    className=\"flex flex-col items-start gap-7.5\"\n    data-testid=\"CT-97-Account-Navigation\"\n  >\n    {items?.map((item, index) => (\n      <IconPageLink\n        key={`${item.label}--account-page-link`}\n        {...item}\n        dataTestId={`CT-97-Account-Navigation-Page-Link-${index}`}\n      />\n    ))}\n    {signOutCta && signOutEndpoint && (\n      <Button\n        link={{ name: signOutCta, url: signOutEndpoint }}\n        className=\"mt-2.5 dark:text-black-100\"\n        secondary\n        dataTestId=\"CT-97-Account-Navigation-Sign-Out-CTA\"\n      />\n    )}\n  </aside>\n);\n\nexport default AccountNavigation;\n","import Icon from '@atoms/Icon/Icon';\nimport Modal from '@atoms/Modal/Modal';\nimport IconSizeEnum from '@models/enums/IconSizeEnum';\nimport VerticalDirectionEnum from '@models/enums/VerticalDirectionEnum';\nimport { ILink } from '@models/ILink';\nimport useIsInIFrame from '@utils/hooks/useIsInIFrame';\nimport useIsTouchDevice from '@utils/hooks/useIsTouchDevice';\nimport classNames from 'classnames';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { Dispatch, SetStateAction } from 'react';\n\nconst dropdownVariants = {\n  enter: {\n    height: 'auto',\n    opacity: 1,\n    transition: {\n      duration: 0.1,\n      ease: 'easeInOut',\n    },\n  },\n  exit: {\n    height: 0,\n    opacity: 0,\n    transition: {\n      duration: 0.1,\n      ease: 'easeInOut',\n    },\n  },\n};\n\ninterface Props {\n  readonly modalTitle: string;\n  readonly links: ILink[] | string[];\n  readonly active?: boolean;\n  readonly isOpen: boolean;\n  readonly setIsOpen: Dispatch<SetStateAction<boolean>>;\n  readonly activeIndex?: number;\n  readonly itemCallback?: (label: string) => void;\n  readonly titleCallback?: () => void;\n  readonly title?: string;\n  readonly openFromDirection: VerticalDirectionEnum;\n  readonly animateUnderline?: boolean;\n  readonly dataTestId?: string;\n  readonly dataLayerCallback?: (label: string) => void;\n}\n\nconst Dropdown = ({\n  links,\n  active = false,\n  isOpen,\n  setIsOpen,\n  activeIndex = -1,\n  itemCallback,\n  titleCallback,\n  title,\n  openFromDirection,\n  modalTitle,\n  animateUnderline,\n  dataTestId,\n  dataLayerCallback,\n}: Props) => {\n  const isTouchDevice = useIsTouchDevice();\n  const isInIFrame = useIsInIFrame();\n\n  const underlineClasses = animateUnderline\n    ? 'animate-underline'\n    : 'border-b-2 border-yellow';\n\n  return isTouchDevice ? (\n    <div\n      className=\"flex flex-row items-center text-white\"\n      data-testid={dataTestId}\n    >\n      <button\n        onClick={() => setIsOpen(!isOpen)}\n        type=\"button\"\n        className={classNames(\n          {\n            'border-b border-yellow pb-0.5 text-yellow': active,\n          },\n          'body-two shrink-0'\n        )}\n        data-testid=\"Dropdown-Title\"\n      >\n        {title}\n      </button>\n      <Icon\n        name=\"arrow_right\"\n        colorClassName=\"text-yellow\"\n        className={classNames({\n          '-scale-y-100': isOpen,\n        })}\n      />\n\n      <Modal\n        isOpen={isOpen}\n        setIsOpen={setIsOpen}\n        modalClasses=\"flex flex-col justify-start w-full h-full fixed top-0 bottom-0 left-0 right-0 pt-16 text-black-100 bg-white max-w-none\"\n        crossColor=\"black\"\n        contentClasses=\"py-4\"\n      >\n        <div className=\"container h-full w-full list-none text-black-100\">\n          {title && <p className=\"h5 pb-7.5\">{modalTitle}</p>}\n          <ul className=\"flex flex-col items-start gap-y-7.5\">\n            {links?.length > 0 && typeof links[0] === 'object'\n              ? (links as ILink[]).map(\n                  ({ url, target, longName, shortName, name, lang }, index) => (\n                    <li\n                      className=\"body-two shrink-0 cursor-pointer\"\n                      key={`dropdown-list-item-${\n                        longName || shortName || name\n                      }`}\n                    >\n                      <a\n                        href={isInIFrame ? '_parent' : url}\n                        target={target}\n                        className={classNames(\n                          {\n                            [underlineClasses]: activeIndex === index,\n                          },\n                          'cursor-pointer whitespace-nowrap pb-0.5 text-black-100 hover:text-grey-500'\n                        )}\n                        data-testid=\"Dropdown-Item\"\n                        lang={lang}\n                      >\n                        {longName || shortName || name}\n                      </a>\n                    </li>\n                  )\n                )\n              : ((links ?? []) as string[]).map((label, index) => (\n                  <button\n                    key={`dropdown-list-item-${label}`}\n                    onClick={() => {\n                      itemCallback?.(activeIndex !== index ? label : '');\n                      setIsOpen(!isOpen);\n                    }}\n                    className={classNames(\n                      {\n                        'border-b-2 border-yellow': activeIndex === index,\n                      },\n                      'cursor-pointer whitespace-nowrap pb-0.5 text-black-100 hover:text-grey-500'\n                    )}\n                  >\n                    {label}\n                  </button>\n                ))}\n          </ul>\n        </div>\n      </Modal>\n    </div>\n  ) : (\n    <motion.div\n      role=\"button\"\n      tabIndex={0}\n      aria-expanded={isOpen}\n      className=\"relative max-w-max\"\n      onClick={() => {\n        setIsOpen(!isOpen);\n        titleCallback?.();\n      }}\n      onKeyDown={(e) => {\n        if (!isOpen && (e.key === 'Enter' || e.key === 'ArrowDown')) {\n          titleCallback?.();\n          setIsOpen(true);\n        } else if (e.key === 'ArrowUp') {\n          setIsOpen(false);\n        } else if (e.key === 'Tab' && e.shiftKey) {\n          setIsOpen(false);\n        }\n      }}\n      onBlur={(e) => {\n        const { currentTarget } = e;\n        requestAnimationFrame(() => {\n          if (!currentTarget.contains(document.activeElement)) {\n            setIsOpen(false);\n          }\n        });\n      }}\n    >\n      <div className=\"flex flex-row text-white\">\n        <span\n          className={classNames(\n            {\n              'border-b border-yellow pb-0.5 text-yellow': active,\n            },\n            'body-two shrink-0'\n          )}\n          data-testid=\"Dropdown-Title\"\n        >\n          {title}\n        </span>\n        <motion.span\n          animate={{\n            rotate: isOpen ? 180 : 0,\n          }}\n        >\n          <Icon\n            name=\"caret_down\"\n            colorClassName=\"text-yellow\"\n            size={IconSizeEnum.lg}\n            className={classNames({\n              'rotate-180': openFromDirection !== VerticalDirectionEnum.Down,\n            })}\n          />\n        </motion.span>\n      </div>\n      <AnimatePresence>\n        {isOpen && (\n          <motion.ul\n            tabIndex={0}\n            className={classNames(\n              'hide-scrollbar absolute left-1/2 z-80 flex h-auto max-h-[500px] flex-col items-start gap-7.5 overflow-auto rounded-[10px] bg-white p-6 px-[25px] py-[30px] lg:-translate-x-1/2',\n              {\n                'top-10': openFromDirection === VerticalDirectionEnum.Down,\n                'bottom-10': openFromDirection === VerticalDirectionEnum.Up,\n              }\n            )}\n          >\n            {links?.length > 0 && typeof links[0] === 'object'\n              ? (links as ILink[]).map(\n                  (\n                    { url, target, longName, shortName, name, lang }: ILink,\n                    index\n                  ) => (\n                    <motion.li\n                      initial=\"exit\"\n                      animate=\"enter\"\n                      exit=\"exit\"\n                      variants={dropdownVariants}\n                      transition={{\n                        duration: 0.1,\n                        ease: 'easeInOut',\n                      }}\n                      className=\"body-two shrink-0 cursor-pointer\"\n                      key={`dropdown-list-item-${\n                        longName || shortName || name\n                      }`}\n                    >\n                      <a\n                        href={url}\n                        target={target}\n                        className={classNames(\n                          {\n                            [underlineClasses]: activeIndex === index,\n                          },\n                          'cursor-pointer whitespace-nowrap pb-0.5 text-black-100 hover:text-grey-500'\n                        )}\n                        data-testid=\"Dropdown-Item\"\n                        onClick={() => {\n                          dataLayerCallback?.(\n                            longName || shortName || name || ''\n                          );\n                        }}\n                        lang={lang}\n                      >\n                        {longName || shortName || name}\n                      </a>\n                    </motion.li>\n                  )\n                )\n              : ((links ?? []) as string[]).map((label, index) => (\n                  <motion.li\n                    initial=\"exit\"\n                    animate=\"enter\"\n                    exit=\"exit\"\n                    variants={dropdownVariants}\n                    className=\"body-three w-full shrink-0 cursor-pointer leading-6\"\n                    key={`dropdown-list-item-${label}`}\n                  >\n                    <button\n                      onClick={() => {\n                        itemCallback?.(activeIndex !== index ? label : '');\n                        dataLayerCallback?.(label);\n                      }}\n                      className={classNames(\n                        {\n                          'border-b-2 border-yellow': activeIndex === index,\n                        },\n                        'cursor-pointer whitespace-nowrap pb-0.5 text-black-100 hover:text-grey-500'\n                      )}\n                      data-testid=\"Dropdown-Item\"\n                    >\n                      {label}\n                    </button>\n                  </motion.li>\n                ))}\n          </motion.ul>\n        )}\n      </AnimatePresence>\n    </motion.div>\n  );\n};\n\nexport default Dropdown;\n","import Button from '@atoms/Button/Button';\nimport Icon from '@atoms/Icon/Icon';\nimport IconPageLink from '@atoms/IconPageLink/IconPageLink';\nimport { IAccountDropdown } from '@models/IAccountDropdown';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport classNames from 'classnames';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { Dispatch, SetStateAction } from 'react';\n\ninterface Props extends IAccountDropdown {\n  readonly accountLabel: string;\n  readonly callback: () => void;\n  readonly isOpen: boolean;\n  readonly setIsOpen: Dispatch<SetStateAction<boolean>>;\n}\n\nconst dropdownVariants = {\n  enter: {\n    height: 'auto',\n    opacity: 1,\n    transition: {\n      duration: 0.1,\n      ease: 'easeInOut',\n    },\n  },\n  exit: {\n    height: 0,\n    opacity: 0,\n    transition: {\n      duration: 0.1,\n      ease: 'easeInOut',\n    },\n  },\n};\n\nconst AccountDropdown = ({\n  accountIcon,\n  accountLabel,\n  callback,\n  isOpen,\n  loggedInSubtitle,\n  loggedInTitle,\n  loggedOutTitle,\n  loginCta,\n  loginEndpoint,\n  navigationDropdown,\n  setIsOpen,\n  signOutCta,\n  signOutEndpoint,\n  userAuthenticated,\n}: Props) => (\n  <motion.div\n    className=\"relative max-w-max\"\n    data-testid=\"CT-97-Account-Dropdown\"\n  >\n    <button\n      className=\"flex\"\n      onClick={() => {\n        setIsOpen(!isOpen);\n        callback();\n      }}\n      aria-label={accountLabel}\n      data-testid=\"CT-97-Account-Dropdown-Account-Icon\"\n    >\n      <Icon\n        name={accountIcon || 'account'}\n        className=\"transition-colors hover:text-yellow\"\n        colorClassName={classNames(isOpen ? 'text-yellow' : 'text-white')}\n      />\n    </button>\n\n    <AnimatePresence>\n      {isOpen && (\n        <div\n          onBlur={(e) => {\n            const { currentTarget } = e;\n            requestAnimationFrame(() => {\n              if (!currentTarget.contains(document.activeElement)) {\n                setIsOpen(!isOpen);\n              }\n            });\n          }}\n          className=\"absolute top-10 z-80 flex w-[342px] flex-col items-start gap-10 rounded-[10px] bg-white p-10 pb-15 lg:-translate-x-3/4 max-h-[75vh] overflow-y-auto\"\n          data-testid=\"CT-97-Account-Dropdown-Wrapper\"\n        >\n          {userAuthenticated ? (\n            <div className=\"flex flex-col\">\n              {loggedInTitle && (\n                <div\n                  className=\"text-md font-normal leading-26 lg:text-lg lg:leading-31\"\n                  data-testid=\"CT-97-Account-Dropdown-Account-Logged-In-Title\"\n                >\n                  {loggedInTitle}\n                </div>\n              )}\n              {loggedInSubtitle && (\n                <div\n                  className=\"body-four\"\n                  data-testid=\"CT-97-Account-Dropdown-Account-Logged-In-Subtitle\"\n                >\n                  {loggedInSubtitle}\n                </div>\n              )}\n            </div>\n          ) : (\n            <>\n              {loggedOutTitle && (\n                <div\n                  className=\"body-one\"\n                  data-testid=\"CT-97-Account-Dropdown-Account-Logged-Out-Title\"\n                >\n                  {loggedOutTitle}\n                </div>\n              )}\n              {loginCta && loginEndpoint && (\n                <Button\n                  link={{ name: loginCta, url: loginEndpoint }}\n                  className=\"text-center\"\n                  dataTestId=\"CT-97-Account-Dropdown-Account-Login-CTA\"\n                  linkCallback={() => {\n                    updateDataLayer({\n                      event: 'menuUsed',\n                      content_type: 'quick_menu',\n                      main_category: 'account',\n                      sub_category: loginCta,\n                    });\n                  }}\n                />\n              )}\n            </>\n          )}\n          <motion.ul className=\"flex flex-col items-start gap-13\">\n            {navigationDropdown?.map((item, index) => (\n              <motion.li\n                initial=\"exit\"\n                animate=\"enter\"\n                exit=\"exit\"\n                variants={dropdownVariants}\n                className=\"body-two w-full cursor-pointer\"\n                key={`account-dropdown-list-item-${item.label}`}\n                onClick={() => {\n                  updateDataLayer({\n                    event: 'menuUsed',\n                    content_type: 'quick_menu',\n                    main_category: 'account',\n                    sub_category: item.label,\n                  });\n                }}\n              >\n                <IconPageLink\n                  {...item}\n                  active={false}\n                  dataTestId={`CT-97-Account-Dropdown-Account-Icon-Page-Link-${index}`}\n                />\n              </motion.li>\n            ))}\n            {signOutCta && signOutEndpoint && userAuthenticated && (\n              <li>\n                <Button\n                  secondary\n                  isLightMode\n                  link={{ name: signOutCta, url: signOutEndpoint }}\n                  dataTestId=\"CT-97-Account-Dropdown-Account-Logout-CTA\"\n                />\n              </li>\n            )}\n          </motion.ul>\n        </div>\n      )}\n    </AnimatePresence>\n  </motion.div>\n);\n\nexport default AccountDropdown;\n","import CloseButton from '@atoms/CloseButton/CloseButton';\nimport Icon from '@atoms/Icon/Icon';\nimport Image from '@atoms/Image/Image';\nimport IconSizeEnum from '@models/enums/IconSizeEnum';\nimport ProductStockStatusEnum from '@models/enums/ProductStockStatusEnum';\nimport { IBasketNotification } from '@models/IBasketNotification';\nimport { IMiniBasketItem } from '@models/IMiniBasket';\nimport classNames from 'classnames';\nimport { motion } from 'framer-motion';\n\ninterface Props extends IMiniBasketItem {\n  readonly onRemoveItemFromCart: (code: string, isGift?: boolean) => void;\n  readonly giftItemNotification?: IBasketNotification;\n  readonly dataTestId: string;\n}\n\nconst MiniBasketItem = ({\n  amountLabels,\n  code,\n  displayName,\n  dataTestId,\n  discountedPrice,\n  giftItemNotification,\n  isFreeItem,\n  lineItemTag,\n  quantityLabel,\n  stockStatus,\n  stockStatusLabel,\n  selectedQuantity,\n  thumbnail,\n  url,\n  onRemoveItemFromCart,\n}: Props) => (\n  <motion.div\n    className=\"relative rounded-[10px] border border-grey bg-white p-2.5\"\n    layout\n    transition={{\n      type: 'spring',\n      duration: 0.3,\n      layout: { type: 'spring', duration: 0.7 },\n    }}\n    animate={{ scale: 1, opacity: 1 }}\n    exit={{ scale: 0.8, opacity: 0 }}\n    data-testid={dataTestId}\n  >\n    <div className=\"flex gap-5\">\n      <a\n        href={url}\n        target=\"_blank\"\n        className=\"max-h-[142px] max-w-[142px]\"\n        rel=\"noreferrer\"\n      >\n        <Image\n          image={thumbnail}\n          imageClasses=\"object-contain h-full bg-grey-100 rounded-[10px]\"\n          dataTestId={`${dataTestId}-Image`}\n        />\n      </a>\n\n      <div className=\"flex w-full flex-col justify-between gap-y-2.5 py-2.5\">\n        <div>\n          <p\n            className={classNames('body-four mb-[5px] text-grey-600 ', {\n              'text-red-100': stockStatus === ProductStockStatusEnum.OutOfStock,\n            })}\n            data-testid={`${dataTestId}-Stock-Status-Label`}\n          >\n            {stockStatusLabel}\n          </p>\n          <a\n            href={url}\n            target=\"_blank\"\n            rel=\"noreferrer\"\n            className=\"inline-block max-w-[80%]\"\n          >\n            <p\n              className=\"body-two line-clamp-2 w-full break-words\"\n              data-testid={`${dataTestId}-Name`}\n            >\n              {displayName}\n            </p>\n          </a>\n        </div>\n\n        <div className=\"flex w-full justify-between\">\n          <p\n            className=\"body-three mt-auto pb-1.5\"\n            data-testid={`${dataTestId}-Quantity`}\n          >\n            {`${quantityLabel}  ${selectedQuantity}`}\n          </p>\n\n          <div>\n            <p\n              className=\"body-one text-right\"\n              data-testid={`${dataTestId}-Price`}\n            >\n              {discountedPrice}\n            </p>\n\n            {amountLabels\n              ?.filter((amountLabel) => amountLabel)\n              .map((amountLabel, index) => (\n                <p\n                  key={amountLabel}\n                  className=\"body-four text-right text-grey-600 \"\n                  data-testid={`${dataTestId}-Amount-Label-${index}`}\n                >\n                  {amountLabel}\n                </p>\n              ))}\n          </div>\n        </div>\n      </div>\n    </div>\n    {lineItemTag && (\n      <div className=\"w-full pt-2.5\">\n        <div\n          className=\"flex items-center justify-center gap-x-[6px] rounded-[100px] bg-grey-100\"\n          data-testid={`${dataTestId}-Refurbished-Tag`}\n        >\n          <Icon\n            name={lineItemTag.icon}\n            colorClassName=\"text-yellow\"\n            size=\"16px\"\n          />\n\n          <p className=\"body-four\">{lineItemTag.label}</p>\n        </div>\n      </div>\n    )}\n    {isFreeItem && giftItemNotification?.text && (\n      <div className=\"w-full pt-2.5\">\n        <div\n          className=\"flex items-center justify-center gap-x-1.5 rounded-[100px] bg-yellow px-3 py-0.5\"\n          data-testid={`${dataTestId}-Gift-Item-Tag`}\n        >\n          {giftItemNotification.icon && (\n            <Icon\n              name={giftItemNotification.icon}\n              colorClassName=\"text-black\"\n              size=\"16px\"\n            />\n          )}\n\n          <p\n            className=\"body-four\"\n            dangerouslySetInnerHTML={{ __html: giftItemNotification.text }}\n          />\n        </div>\n      </div>\n    )}\n    {/* // TODO: Revert this conditional ONLY when gift items are able to\n      // be removed from the basket which currently Opti does not allow */}\n    {!isFreeItem && (\n      <CloseButton\n        className=\"absolute right-4 top-4\"\n        size={IconSizeEnum.md}\n        onClick={() => {\n          onRemoveItemFromCart(code, isFreeItem);\n        }}\n        dataTestId={`${dataTestId}-Close-Button`}\n      />\n    )}\n  </motion.div>\n);\n\nexport default MiniBasketItem;\n","import Button from '@atoms/Button/Button';\nimport LoadingSpinner from '@atoms/LoadingSpinner/LoadingSpinner';\nimport ErrorBannerNotificationEnum from '@models/enums/ErrorBannerNotificationEnum';\nimport { IMiniBasketResponse } from '@models/IMiniBasket';\nimport MiniBasketItem from '@molecules/MiniBasketItem/MiniBasketItem';\nimport { removeItemFromCart } from '@services/cart';\nimport useCartSizeStore from '@state/CartSizeStore';\nimport useErrorNotificationStore from '@state/ErrorBannerNotificationDisplayStore';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport axios from 'axios';\nimport classNames from 'classnames';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport Cookies from 'js-cookie';\nimport { useEffect, useState } from 'react';\n\ninterface Props {\n  readonly miniBasketEndpoint: string;\n  readonly miniBasketTitle: string;\n}\n\nconst MiniBasket = ({ miniBasketEndpoint, miniBasketTitle }: Props) => {\n  const [isLoading, setIsLoading] = useState(false);\n  const [basketPayload, setBasketPayload] =\n    useState<IMiniBasketResponse | null>(null);\n  const { cartSizeName, setCartSize } = useCartSizeStore((state) => ({\n    cartSizeName: state.cartSizeName,\n    setCartSize: state.setCartSize,\n  }));\n\n  const { setErrorBannerNotification } = useErrorNotificationStore();\n\n  const {\n    basketLink,\n    checkoutLink,\n    cartItems = [],\n    emptyMiniBasketLabel,\n    giftItemNotification,\n    removeItemFromCartEndpoint,\n    subtotal,\n    subtotalLabel,\n    trackingData,\n    total,\n  } = basketPayload ?? {};\n  const hasBasketItems = cartItems.length > 0;\n  const basketItemsCount = cartItems.reduce(\n    (acc, item) => acc + item.selectedQuantity,\n    0\n  );\n  const isDiscounted = total !== subtotal;\n\n  const handleRemoveItemFromCart = async (code: string, isGift?: boolean) => {\n    setIsLoading(true);\n\n    try {\n      const basketResponsePayload = await removeItemFromCart(\n        removeItemFromCartEndpoint!,\n        code,\n        isGift\n      );\n\n      setBasketPayload({\n        ...basketPayload!,\n        cartItems: basketResponsePayload.basket.cartItems,\n        total: basketResponsePayload.basket.orderSummary.total,\n        subtotal: basketResponsePayload.basket.orderSummary.subtotal,\n      });\n      setCartSize(Number(Cookies.get(cartSizeName)) || 0);\n\n      const currentProduct = (trackingData?.products || []).find(\n        (product) => product.item_id === code\n      );\n\n      if (currentProduct)\n        updateDataLayer({\n          event: 'removeFromCart',\n          ecommerce: {\n            currency: basketResponsePayload.basket.trackingData?.currencyCode,\n            items: [{ ...currentProduct, quantity: 0 }],\n            value: basketResponsePayload.basket.orderSummary.totalValue,\n            quantityChange: -currentProduct.quantity,\n          },\n        });\n    } catch (error) {\n      setErrorBannerNotification(ErrorBannerNotificationEnum.CartRemoveItem);\n    } finally {\n      setIsLoading(false);\n    }\n  };\n\n  useEffect(() => {\n    const getMiniBasketDetails = async () => {\n      try {\n        setIsLoading(true);\n\n        const { data } = await axios.get<IMiniBasketResponse>(\n          miniBasketEndpoint\n        );\n        setBasketPayload(data);\n      } catch (error) {\n        setErrorBannerNotification(\n          ErrorBannerNotificationEnum.MiniBasketDetails\n        );\n      } finally {\n        setIsLoading(false);\n      }\n    };\n\n    getMiniBasketDetails();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [miniBasketEndpoint]);\n\n  return (\n    <div\n      className={classNames(\n        'relative w-[488px] overflow-hidden rounded-[10px] bg-grey-100'\n      )}\n      data-testid=\"CT-157-MiniBasket\"\n    >\n      <p\n        className=\"h6 flex w-full items-center p-5\"\n        data-testid=\"CT-157-MiniBasket-Title\"\n      >\n        {miniBasketTitle}\n        {hasBasketItems && (\n          <>\n            &nbsp;\n            <span\n              className=\"body-two text-grey-450\"\n              data-testid=\"CT-157-MiniBasket-Items-Count\"\n            >\n              ({basketItemsCount})\n            </span>\n          </>\n        )}\n      </p>\n\n      {isLoading && (\n        <div\n          className={classNames(\n            'absolute top-0 z-100 flex h-full w-full items-center justify-center',\n            { 'bg-black-100/10': basketPayload }\n          )}\n        >\n          <LoadingSpinner\n            pulseItemClasses=\"bg-black h-5 w-5\"\n            data-testid=\"CT-157-MiniBasket-Loading-Spinner\"\n          />\n        </div>\n      )}\n\n      {!basketPayload && <div className=\"min-h-[245px]\" />}\n\n      <AnimatePresence>\n        {basketPayload && (\n          <motion.div\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            exit={{ opacity: 0 }}\n            className=\"flex max-h-[510px] w-full flex-col\"\n            data-testid=\"CT-157-MiniBasket-Container\"\n          >\n            {hasBasketItems ? (\n              <>\n                <div className=\"flex flex-shrink flex-col gap-5 overflow-auto px-5 pb-5\">\n                  {cartItems.map((item, index) => (\n                    <MiniBasketItem\n                      {...item}\n                      giftItemNotification={giftItemNotification}\n                      key={item.code}\n                      onRemoveItemFromCart={handleRemoveItemFromCart}\n                      dataTestId={`CT-157-MiniBasket-Item-${index}`}\n                    />\n                  ))}\n                </div>\n\n                <div\n                  className={classNames(\n                    'flex w-full items-end justify-between bg-black-100 p-5 dark:bg-white',\n                    {\n                      'flex-col': isDiscounted,\n                    }\n                  )}\n                  data-testid=\"CT-157-MiniBasket-Bottom-Bar\"\n                >\n                  <div className=\"self-start\">\n                    <p\n                      className=\"body-three text-grey dark:text-black-100\"\n                      data-testid=\"CT-157-MiniBasket-Subtotal-Label\"\n                    >\n                      {subtotalLabel}\n                    </p>\n                    {isDiscounted ? (\n                      <p\n                        className=\"body-one body-one--bold text-yellow dark:text-black-100\"\n                        data-testid=\"CT-157-MiniBasket-Subtotal-Value\"\n                      >\n                        {total}{' '}\n                        <span className=\"line-through text-grey-200 dark:text-grey-500 body-two\">\n                          {subtotal}\n                        </span>\n                      </p>\n                    ) : (\n                      <p\n                        className=\"body-one body-one--bold text-white dark:text-black-100\"\n                        data-testid=\"CT-157-MiniBasket-Subtotal-Value\"\n                      >\n                        {total}\n                      </p>\n                    )}\n                  </div>\n\n                  <div\n                    className={classNames(\n                      'flex flex-wrap gap-4',\n                      isDiscounted\n                        ? 'w-full pt-5 justify-between'\n                        : 'justify-end'\n                    )}\n                  >\n                    <Button\n                      link={basketLink}\n                      secondary\n                      isLightMode\n                      className={classNames(\n                        'text-center text-white dark:text-black',\n                        { 'flex-grow': isDiscounted }\n                      )}\n                      dataTestId=\"CT-157-MiniBasket-Basket-Link\"\n                    />\n                    <Button\n                      link={checkoutLink}\n                      className={classNames('text-center', {\n                        'flex-grow': isDiscounted,\n                      })}\n                      dataTestId=\"CT-157-MiniBasket-Checkout-Link\"\n                    />\n                  </div>\n                </div>\n              </>\n            ) : (\n              <div className=\"flex min-h-[245px] w-full items-center justify-center\">\n                <p\n                  className=\"body-one mb-12 text-grey-450\"\n                  data-testid=\"CT-157-MiniBasket-Empty-Basket-Label\"\n                >\n                  {emptyMiniBasketLabel}\n                </p>\n              </div>\n            )}\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n};\n\nexport default MiniBasket;\n","import { ILink } from '@models/ILink';\n\ninterface Props {\n  readonly title: string;\n  readonly links: ILink[];\n}\n\nconst PopularSearches = ({ title, links }: Props) => (\n  <div\n    className=\"col-span-full md:col-span-10 lg:col-span-8\"\n    data-testid=\"CT-48-Search-Popular-Searches-Container\"\n  >\n    <p className=\"body-three pb-1 text-grey-450 lg:pb-3\">{title}</p>\n\n    {links\n      ?.filter((link, index) => link.name && link.url && index < 4)\n      .map(({ name, url, target }, index) => (\n        <a\n          key={`popular-searches-${name}`}\n          href={url}\n          target={target}\n          className=\"max-w-[355px]\"\n          data-testid={`CT-48-Search-Popular-Searches-Link-${index}`}\n        >\n          <p className=\"h6 border-black py-1 text-black-100 decoration-1 last:border-b-0 hover:underline lg:py-2\">\n            {name}\n          </p>\n        </a>\n      ))}\n  </div>\n);\n\nexport default PopularSearches;\n","import { ISearchResult } from '@models/ISearchResult';\nimport { Fragment } from 'react';\n\ninterface Props {\n  readonly results: ISearchResult[];\n  readonly suggestedSearchTitleLabel: string;\n}\n\nconst SearchResultsList = ({ results, suggestedSearchTitleLabel }: Props) => {\n  const displayedResults =\n    results?.filter(\n      (result, index) => result.title && result.url && index < 3\n    ) ?? [];\n\n  return (\n    <div className=\"h-full\" data-testid=\"CT-48-Search-Results-List-Container\">\n      <p\n        className=\"body-three mb-8 pt-5 text-grey-500 md:pt-15\"\n        data-testid=\"CT-48-Search-Results-List-Suggested-Search-Title\"\n      >\n        {suggestedSearchTitleLabel}\n      </p>\n\n      <div className=\"grid w-full max-w-[655px] grid-cols-2 items-center gap-x-10 md:grid-cols-[auto_1fr]\">\n        {displayedResults.map(({ pageTypeLabel, title, url }, index) => (\n          <Fragment key={`search-result-${title}`}>\n            <a\n              href={url}\n              key={`search-results-${title}-tag`}\n              target=\"_self\"\n              data-testid={`CT-48-Search-Results-List-Suggested-Search-Page-Link-${index}`}\n            >\n              <span className=\"body-two md:max-w-auto inline-block max-w-full truncate whitespace-nowrap rounded-[100px] bg-black-100 pb-2 pl-4 pr-4 pt-2 text-white decoration-1 hover:underline md:w-auto\">\n                {pageTypeLabel}\n              </span>\n            </a>\n\n            <a\n              href={url}\n              key={`search-results-${title}-text`}\n              target=\"_self\"\n              data-testid={`CT-48-Search-Results-List-Suggested-Search-Title-${index}`}\n            >\n              <p className=\"h6 py-3 text-black-100 decoration-1 hover:underline\">\n                {title}\n              </p>\n            </a>\n\n            {index < displayedResults.length - 1 && (\n              <div className=\"col-span-full h-[1px] bg-grey-line\" />\n            )}\n          </Fragment>\n        ))}\n      </div>\n    </div>\n  );\n};\n\nexport default SearchResultsList;\n","import LoadingSpinner from '@atoms/LoadingSpinner/LoadingSpinner';\nimport ErrorBannerNotificationEnum from '@models/enums/ErrorBannerNotificationEnum';\nimport { ILink } from '@models/ILink';\nimport { IListingResponse } from '@models/IListingResponse';\nimport { ISearchBlock } from '@models/ISearchBlock';\nimport { ISearchResult } from '@models/ISearchResult';\nimport SearchBar from '@molecules/SearchBar/SearchBar';\nimport SearchSummaryResults from '@molecules/SearchSummaryResults/SearchSummaryResults';\nimport useErrorNotificationStore from '@state/ErrorBannerNotificationDisplayStore';\nimport useResizeObserver from '@utils/hooks/useResizeObserver';\nimport useSearchSummaryResults from '@utils/hooks/useSearchSummaryResults';\nimport axios from 'axios';\nimport classNames from 'classnames';\nimport { useState } from 'react';\nimport PopularSearches from './PopularSearches';\nimport SearchResultsList from './SearchResultsList';\n\ninterface Props {\n  readonly popularSearches?: { title: string; links: ILink[] };\n  readonly listingPage: string;\n  readonly searchSubTitle: string;\n  readonly searchPlaceholder: string;\n  readonly overlaySearchIcon: string;\n  readonly culture: string;\n  readonly endpoint: string;\n  readonly suggestedSearchTitleLabel: string;\n  readonly searchBlock?: ISearchBlock;\n}\n\nconst Search = ({\n  popularSearches,\n  listingPage,\n  searchSubTitle,\n  searchPlaceholder,\n  overlaySearchIcon,\n  culture,\n  endpoint,\n  suggestedSearchTitleLabel,\n  searchBlock,\n}: Props) => {\n  const [value, setValue] = useState('');\n  const [results, setResults] = useState<ISearchResult[]>([]);\n  const [searchBarContainerRef, { clientHeight: searchBarContainerHeight }] =\n    useResizeObserver();\n\n  const { setErrorBannerNotification } = useErrorNotificationStore();\n\n  const fetchResults = async () => {\n    try {\n      const { data } = await axios.get<IListingResponse | undefined>(endpoint, {\n        params: { pageSize: 10, query: value, language: culture },\n      });\n\n      setResults((data?.items ?? []) as ISearchResult[]);\n    } catch (error) {\n      setErrorBannerNotification(ErrorBannerNotificationEnum.SearchResults);\n    }\n  };\n\n  const { isLoading, searchSummaryResults, fetchSearchSummaryResults } =\n    useSearchSummaryResults(searchBlock?.searchSummary ?? []);\n\n  return (\n    <>\n      <div\n        ref={searchBarContainerRef}\n        className=\"flex h-[24%] min-h-[140px] w-full items-center justify-start bg-grey-200 md:h-[48%] md:min-h-[160px] md:pb-7.5\"\n        data-testid=\"CT-48-SearchBar-Container\"\n      >\n        <div className=\"container relative max-md:mt-1\">\n          <SearchBar\n            searchSubTitle={searchSubTitle}\n            searchPlaceholder={searchPlaceholder}\n            overlaySearchIcon={overlaySearchIcon}\n            listingPage={searchBlock?.searchSummaryPageLink ?? listingPage}\n            value={value}\n            setValue={setValue}\n            onTypingDone={() => {\n              if (value.length >= 1) {\n                if (searchBlock) fetchSearchSummaryResults(value);\n                else fetchResults();\n              }\n            }}\n          />\n        </div>\n      </div>\n\n      <div\n        style={\n          searchBlock\n            ? { minHeight: `calc(100% - ${searchBarContainerHeight}px)` }\n            : { height: `calc(100% - ${searchBarContainerHeight}px)` }\n        }\n        className={classNames(\n          'w-full bg-white',\n          searchBlock ? 'flex' : 'overflow-y-auto overscroll-y-none'\n        )}\n      >\n        {!value && popularSearches && (\n          <div className=\"container grid grid-cols-12 pt-5 lg:pt-[70px]\">\n            <PopularSearches\n              title={popularSearches.title}\n              links={popularSearches.links}\n            />\n          </div>\n        )}\n\n        {!!value &&\n          !searchBlock &&\n          results.some((result) => result.title && result.url) && (\n            <div className=\"container\">\n              <SearchResultsList\n                results={results}\n                suggestedSearchTitleLabel={suggestedSearchTitleLabel}\n              />\n            </div>\n          )}\n\n        {value && isLoading && searchBlock && (\n          <div className=\"flex w-full items-center justify-center\">\n            <LoadingSpinner />\n          </div>\n        )}\n\n        {value && !isLoading && searchBlock && (\n          <div className=\"w-full\">\n            <SearchSummaryResults\n              searchSummaryResults={searchSummaryResults}\n              searchValue={value}\n              productsStatusLabels={searchBlock.statusLabels}\n            />\n          </div>\n        )}\n      </div>\n    </>\n  );\n};\n\nexport default Search;\n","import Icon from '@atoms/Icon/Icon';\nimport IconSizeEnum from '@models/enums/IconSizeEnum';\nimport { ILink } from '@models/ILink';\nimport useIsInIFrame from '@utils/hooks/useIsInIFrame';\nimport useIsTouchDevice from '@utils/hooks/useIsTouchDevice';\nimport useResizeObserver from '@utils/hooks/useResizeObserver';\nimport classNames from 'classnames';\nimport { motion } from 'framer-motion';\nimport { useState } from 'react';\n\ninterface Props {\n  readonly links: ILink[];\n  readonly onClick: (params?: string) => void;\n  readonly dataTestId?: string;\n}\n\nconst LinksList = ({ links, onClick, dataTestId }: Props) => {\n  const isInIFrame = useIsInIFrame();\n  const isTouchDevice = useIsTouchDevice();\n  const [hoveredIndex, setHoveredIndex] = useState<number | null>(null);\n  const [defaultListRef, { width: defaultListWidth }] = useResizeObserver();\n\n  return (\n    <div className=\"relative flex h-full justify-start lgm:w-4/12 lgm:justify-center\">\n      <ul\n        className=\"pt-14\"\n        data-testid={dataTestId}\n        style={{ width: defaultListWidth + 10 }}\n      >\n        {links?.length > 0\n          ? links.map(({ name, url, target }, index) => (\n              <motion.li\n                key={`subNav-link-list--${name}`}\n                className=\"mb-6 flex\"\n                onMouseEnter={() => {\n                  if (isTouchDevice) return;\n                  setHoveredIndex(index);\n                }}\n                onMouseLeave={() => {\n                  if (isTouchDevice) return;\n                  setHoveredIndex(null);\n                }}\n                initial={{ x: 0 }}\n                animate={{\n                  x: hoveredIndex === index ? 10 : 0,\n                  transition: {\n                    ease: 'easeOut',\n                  },\n                }}\n              >\n                <motion.div\n                  className=\"mr-4 flex h-7 w-7 items-center justify-center rounded-full bg-yellow\"\n                  data-testid=\"Link-List-Icon\"\n                  initial={{ opacity: 1 }}\n                  animate={{\n                    opacity:\n                      hoveredIndex === index || hoveredIndex === null ? 1 : 0.7,\n                  }}\n                >\n                  <Icon name=\"east\" size={IconSizeEnum.sm} />\n                </motion.div>\n\n                <a\n                  href={url}\n                  target={isInIFrame ? '_parent' : target}\n                  className={classNames(\n                    'body-two transition-colors',\n                    hoveredIndex === index || hoveredIndex === null\n                      ? 'text-black-100'\n                      : 'text-grey-450',\n                    {\n                      'body-two--bold': hoveredIndex === index,\n                    }\n                  )}\n                  onClick={() => onClick(name)}\n                  data-testid=\"Link-List-Link\"\n                >\n                  {name}\n                </a>\n              </motion.li>\n            ))\n          : null}\n      </ul>\n\n      {/* Because we need to change the font weight of the text inside the list and because this change increases the list width, \n      showing a small flicker, we created some sort of a copy of the displayed list, invisible but taking the same amount of space, \n      so we can compute the original width and always add a 10px buffer to this width for the original list \n      so we have all the space needed for when the font weight is changed. */}\n      <ul ref={defaultListRef} className=\"invisible absolute top-0 z-[1] pt-14\">\n        {links?.length > 0\n          ? links.map(({ name }) => (\n              <li key={`subNav-link-list--${name}`} className=\"mb-6 flex\">\n                <div className=\"mr-4 flex h-7 w-7 items-center justify-center rounded-full bg-yellow\">\n                  <Icon name=\"east\" size={IconSizeEnum.sm} />\n                </div>\n\n                <div className=\"body-two\">{name}</div>\n              </li>\n            ))\n          : null}\n      </ul>\n    </div>\n  );\n};\n\nexport default LinksList;\n","import Icon from '@atoms/Icon/Icon';\nimport Image from '@atoms/Image/Image';\nimport IconSizeEnum from '@models/enums/IconSizeEnum';\nimport { INavigationCard } from '@models/IHeader';\nimport useIsInIFrame from '@utils/hooks/useIsInIFrame';\nimport useIsTouchDevice from '@utils/hooks/useIsTouchDevice';\nimport classNames from 'classnames';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { useState } from 'react';\n\ninterface Props extends INavigationCard {\n  readonly classes: string;\n  readonly onClick: (params: string) => void;\n  readonly dataTestId?: string;\n}\n\nconst NavigationCard = ({\n  image,\n  link,\n  classes,\n  onClick,\n  dataTestId = 'Navigation-Card',\n}: Props) => {\n  const { name = '', url, target = '_self' } = link;\n  const isInIFrame = useIsInIFrame();\n  const isTouchDevice = useIsTouchDevice();\n  const [isHovered, setIsHovered] = useState(false);\n\n  return (\n    <a\n      href={url}\n      onClick={() => onClick(name)}\n      target={isInIFrame ? '_parent' : target}\n      className=\"body-two w-full text-center text-black-100 xl:leading-28\"\n      data-testid={`${dataTestId}`}\n      onMouseEnter={() => {\n        if (isTouchDevice) return;\n        setIsHovered(true);\n      }}\n      onMouseLeave={() => {\n        if (isTouchDevice) return;\n        setIsHovered(false);\n      }}\n    >\n      <div className={classNames('flex flex-col items-center', classes)}>\n        <Image\n          sizes=\"300px\"\n          image={image}\n          imageClasses=\"mb-12 w-full h-40 lg:h-56 object-contain\"\n          dataTestId={`${dataTestId}-Image`}\n        />\n\n        <motion.div className=\"flex w-full justify-center gap-x-[15px]\">\n          <motion.div\n            layout\n            className={classNames('max-w-[80%]', { 'font-normal': isHovered })}\n          >\n            {name}\n          </motion.div>\n\n          <AnimatePresence mode=\"popLayout\">\n            {isHovered && (\n              <motion.div\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0 }}\n                initial={{ opacity: 0 }}\n                className=\"flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-yellow\"\n                data-testid={`${dataTestId}-Icon`}\n              >\n                <Icon name=\"east\" size={IconSizeEnum.sm} />\n              </motion.div>\n            )}\n          </AnimatePresence>\n        </motion.div>\n      </div>\n    </a>\n  );\n};\n\nexport default NavigationCard;\n","import { ISubMenuItem } from '@models/IHeader';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport LinksList from './LinksList';\nimport NavigationCard from './NavigationCard';\n\ninterface Props {\n  readonly activeTab: ISubMenuItem;\n  readonly subCategory: string;\n  readonly mainCategory: string;\n  readonly dataTestId?: string;\n}\n\nconst SubNavTab = ({\n  activeTab,\n  mainCategory,\n  subCategory,\n  dataTestId,\n}: Props) => {\n  const handleLevelThreeClick = (item?: string) => {\n    updateDataLayer({\n      event: 'menuUsed',\n      content_type: 'header_menu_level_3',\n      main_category: mainCategory,\n      sub_category: subCategory,\n      tertiary_category: item,\n    });\n  };\n\n  return (\n    <div\n      className=\"ml-4 mr-4 flex min-h-[418px] cursor-default flex-col pb-24 lgm:ml-0 lgm:mr-0 lgm:flex-row lgm:pl-[9.5rem] xl:absolute xl:left-0 xl:right-0 xl:top-[100%] xl:bg-grey-200\"\n      data-testid={dataTestId}\n    >\n      <div className=\"grid grid-flow-row auto-rows-max md:grid-cols-2 md:gap-x-8 lgm:w-8/12 xl:grid-cols-3 2xl:grid-cols-4 2xl:gap-5\">\n        {activeTab?.navigationCards?.map(({ image, link }, index) => (\n          <NavigationCard\n            key={`level-3-card-${link?.name}`}\n            image={image}\n            link={link}\n            classes=\"lgm:mr-12 mt-8 lg:mt-28\"\n            onClick={handleLevelThreeClick}\n            dataTestId={`CT-01-Header-Sub-Nav-Tab-Navigation-Card-${index}`}\n          />\n        ))}\n      </div>\n\n      <LinksList\n        links={activeTab?.links || []}\n        onClick={handleLevelThreeClick}\n        dataTestId=\"CT-01-Header-Sub-Nav-Tab-Links-List\"\n      />\n    </div>\n  );\n};\n\nexport default SubNavTab;\n","import { IMainNavigationItem, ISubMenuItem } from '@models/IHeader';\nimport SubNavTab from '@organisms/Header/subNav/SubNavTab';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport useIsInIFrame from '@utils/hooks/useIsInIFrame';\nimport classNames from 'classnames';\nimport { motion } from 'framer-motion';\nimport {\n  Dispatch,\n  FocusEvent,\n  SetStateAction,\n  useEffect,\n  useRef,\n  useState,\n} from 'react';\n\ninterface Props {\n  readonly mainNavigation: IMainNavigationItem[];\n  readonly activeIndex: number;\n  readonly isOpenDesktop: boolean;\n  readonly setIsOpenDesktop: Dispatch<SetStateAction<boolean>>;\n}\n\nconst DesktopSubNav = ({\n  isOpenDesktop,\n  setIsOpenDesktop,\n  mainNavigation,\n  activeIndex,\n}: Props) => {\n  const desktopSubNavRef = useRef<HTMLDivElement>(null);\n  const [activeSubNav, setActiveSubNav] = useState<ISubMenuItem>();\n  const [secondLevelActiveIndex, setSecondLevelActiveIndex] = useState(0);\n  const [activeMenu, setActiveMenu] = useState<ISubMenuItem[]>([]);\n  const isInIFrame = useIsInIFrame();\n\n  const mainCategory = mainNavigation[activeIndex]?.title || '';\n\n  const handleLevelTwoClick = (item: string) => {\n    updateDataLayer({\n      event: 'menuUsed',\n      content_type: 'header_menu_level_2',\n      main_category: mainCategory,\n      sub_category: item,\n      tertiary_category: undefined,\n    });\n  };\n\n  const handleBlurOnLastSubNavItem = (event: FocusEvent<HTMLLIElement>) => {\n    if (!desktopSubNavRef?.current?.contains(event.relatedTarget as Node))\n      setIsOpenDesktop(false);\n  };\n\n  useEffect(() => {\n    if (activeMenu && activeMenu[0]) {\n      const { navigationCards, links, title } = activeMenu[0] || {};\n      setActiveSubNav({ navigationCards, links, title });\n    }\n  }, [activeMenu]);\n\n  useEffect(() => {\n    if (activeIndex >= 0) {\n      const menu = mainNavigation[activeIndex]!.subMenuItems;\n      setActiveMenu(menu);\n    }\n  }, [activeIndex, mainNavigation]);\n\n  return (\n    <div\n      className={classNames(\n        { hidden: !isOpenDesktop },\n        'desktop-header absolute left-0 right-0 top-[100%] z-100'\n      )}\n      ref={desktopSubNavRef}\n    >\n      <motion.div\n        onHoverEnd={() => setIsOpenDesktop(false)}\n        key=\"content\"\n        initial=\"collapsed\"\n        animate=\"open\"\n        exit=\"collapsed\"\n        variants={{\n          open: { opacity: 1 },\n          collapsed: { opacity: 0 },\n        }}\n        className=\"h-auto bg-grey-200 outline-none\"\n      >\n        <motion.ul className=\"top flex flex-row bg-white pb-7 pl-32 pr-32 pt-7\">\n          {activeMenu?.map(\n            ({ link, navigationCards, links, title = '' }, index) => {\n              const linkTitle = link?.name;\n              const linkUrl = link?.url;\n              const linkTarget = link?.target;\n              const isLastItem = index === activeMenu.length - 1;\n\n              return (\n                <motion.li\n                  key={`level-2-${linkTitle}-${title}`}\n                  onHoverStart={() => {\n                    setIsOpenDesktop(true);\n                    setActiveSubNav({ navigationCards, links });\n                    setSecondLevelActiveIndex(index);\n                  }}\n                  onClick={() => {\n                    setIsOpenDesktop(true);\n                    setActiveSubNav({ navigationCards, links });\n                    setSecondLevelActiveIndex(index);\n                  }}\n                  onKeyDown={() => {\n                    setIsOpenDesktop(true);\n                    setActiveSubNav({ navigationCards, links });\n                    setSecondLevelActiveIndex(index);\n                  }}\n                  onBlur={isLastItem ? handleBlurOnLastSubNavItem : undefined}\n                  className={classNames(\n                    'body-two cursor-pointer pr-6',\n                    secondLevelActiveIndex === index\n                      ? 'text-black-100'\n                      : 'text-grey-500'\n                  )}\n                >\n                  {linkUrl ? (\n                    <a\n                      href={linkUrl}\n                      target={isInIFrame ? '_parent' : linkTarget}\n                      onClick={() => handleLevelTwoClick(title)}\n                      data-testid={`CT-01-Header-Second-Level-Nav-Category-Link-${title}`}\n                    >\n                      <div\n                        className=\"second-level-nav-title body-two whitespace-nowrap\"\n                        data-testid={`CT-01-Header-Second-Level-Nav-Category-Title-${title}`}\n                      >\n                        {title}\n                      </div>\n                    </a>\n                  ) : (\n                    <span\n                      className=\"second-level-nav-title body-two whitespace-nowrap\"\n                      data-testid={`CT-01-Header-Second-Level-Nav-Category-Title-${title}`}\n                    >\n                      {title}\n                    </span>\n                  )}\n                  {secondLevelActiveIndex === index ? (\n                    <div className=\"mx-auto h-2 w-2 rounded-full bg-yellow\" />\n                  ) : null}\n                  {secondLevelActiveIndex === index &&\n                    activeSubNav &&\n                    (!!activeSubNav.navigationCards?.length ||\n                      !!activeSubNav.links?.length) && (\n                      <SubNavTab\n                        subCategory={title}\n                        activeTab={activeSubNav}\n                        mainCategory={mainCategory}\n                        dataTestId={`CT-01-Header-Sub-Nav-Tab-${title}`}\n                      />\n                    )}\n                </motion.li>\n              );\n            }\n          )}\n        </motion.ul>\n      </motion.div>\n    </div>\n  );\n};\n\nexport default DesktopSubNav;\n","import { IAccountNavigation } from '@models/IAccountNavigation';\nimport AccountNavigation from '@molecules/AccountNavigation/AccountNavigation';\nimport { motion } from 'framer-motion';\n\nconst mobileMenuVariant = {\n  opened: {\n    x: '100%',\n    transition: {\n      delay: 0.15,\n      duration: 1.1,\n      ease: [0.74, 0, 0.19, 1.02],\n    },\n  },\n  closed: {\n    x: '200%',\n    transition: {\n      delay: 0.35,\n      duration: 0.63,\n      ease: [0.74, 0, 0.19, 1.02],\n    },\n  },\n};\n\nconst AccountMenuMobile = (props: IAccountNavigation) => (\n  <motion.div\n    className=\"absolute bottom-0 left-0 right-0 top-0 overflow-y-auto\"\n    initial=\"closed\"\n    variants={mobileMenuVariant}\n  >\n    <div className=\"container w-full list-none text-black-100\">\n      <AccountNavigation {...props} />\n    </div>\n  </motion.div>\n);\n\nexport default AccountMenuMobile;\n","import ShadowContainerVertical from '@atoms/ShadowContainerVertical/ShadowContainerVertical';\nimport ILanguageSelector from '@models/ILanguageSelector';\nimport useIsInIFrame from '@utils/hooks/useIsInIFrame';\nimport classNames from 'classnames';\nimport { motion } from 'framer-motion';\n\ninterface Props {\n  readonly languageSelector?: ILanguageSelector;\n  readonly languageActiveIndex: number;\n}\n\nconst mobileMenuVariant = {\n  opened: {\n    x: '100%',\n    transition: {\n      delay: 0.15,\n      duration: 1.1,\n      ease: [0.74, 0, 0.19, 1.02],\n    },\n  },\n  closed: {\n    x: '200%',\n    transition: {\n      delay: 0.35,\n      duration: 0.63,\n      ease: [0.74, 0, 0.19, 1.02],\n    },\n  },\n};\n\nconst LanguageSelectorMobile = ({\n  languageSelector,\n  languageActiveIndex,\n}: Props) => {\n  const { title = '' } = languageSelector || {};\n  const isInIFrame = useIsInIFrame();\n\n  return (\n    <motion.div\n      className=\"absolute bottom-0 left-0 right-0 top-0 overflow-y-auto\"\n      initial=\"closed\"\n      variants={mobileMenuVariant}\n      data-testid=\"Language-Selector-Mobile\"\n    >\n      <ShadowContainerVertical shadowColour=\"from-white\">\n        <div className=\"container w-full list-none pb-7.5 text-black-100\">\n          {title && (\n            <p\n              className=\"h5 pb-7.5\"\n              data-testid=\"Language-Selector-Mobile-Title\"\n            >\n              {title}\n            </p>\n          )}\n          {!!languageSelector?.links?.length && (\n            <ul className=\"flex flex-col items-start gap-y-7.5\">\n              {languageSelector.links.map(\n                ({ url, target, longName, shortName, name, lang }, index) => (\n                  <li\n                    className=\"body-two shrink-0 cursor-pointer\"\n                    key={`dropdown-list-item-${longName || shortName || name}`}\n                    data-testid=\"Language-Selector-Mobile-Item\"\n                  >\n                    <a\n                      href={url}\n                      target={isInIFrame ? '_parent' : target}\n                      className={classNames(\n                        {\n                          'underline decoration-yellow decoration-2 underline-offset-8':\n                            languageActiveIndex === index,\n                        },\n                        'whitespace-nowrap hover:text-grey-500'\n                      )}\n                      data-testid=\"Language-Selector-Mobile-Link\"\n                      lang={lang}\n                    >\n                      {longName || shortName || name}\n                    </a>\n                  </li>\n                )\n              )}\n            </ul>\n          )}\n        </div>\n      </ShadowContainerVertical>\n    </motion.div>\n  );\n};\n\nexport default LanguageSelectorMobile;\n","import { ISubMenuItem } from '@models/IHeader';\nimport SubNavTab from '@organisms/Header/subNav/SubNavTab';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport useIsInIFrame from '@utils/hooks/useIsInIFrame';\nimport classNames from 'classnames';\nimport { motion } from 'framer-motion';\nimport { useEffect, useState } from 'react';\n\ninterface Props {\n  readonly activeTab: ISubMenuItem[];\n  readonly mainCategory: string;\n}\n\nconst MobileSecondLevelContent = ({ activeTab, mainCategory }: Props) => {\n  const [activeSubNavContent, setActiveSubNavContent] =\n    useState<ISubMenuItem>();\n  const [activeNavItemIndex, setActiveNavItemIndex] = useState(0);\n  const [subCategory, setSubCategory] = useState('');\n  const isInIFrame = useIsInIFrame();\n\n  const handleLevelTwoClick = (item: string) => {\n    setSubCategory(item);\n    updateDataLayer({\n      event: 'menuUsed',\n      content_type: 'header_menu_level_2',\n      main_category: mainCategory,\n      sub_category: item,\n      tertiary_category: undefined,\n    });\n  };\n\n  const classes = classNames({\n    'w-full': true,\n  });\n\n  useEffect(() => {\n    const { navigationCards, links } = activeTab[0]!;\n    setActiveSubNavContent({ navigationCards, links });\n  }, [activeTab]);\n\n  return (\n    <motion.div className={classes}>\n      <motion.ul className=\"flex flex-row flex-nowrap overflow-x-auto  bg-white pb-7 pl-5 pr-5 pt-7 md:pl-8 md:pr-8 lgm:pl-32  lgm:pr-32\">\n        {activeTab?.map(\n          ({ link, navigationCards, links, title = '' }, index) => {\n            const linkTitle = link?.name;\n            const linkUrl = link?.url;\n            const linkTarget = link?.target;\n\n            return linkUrl && !navigationCards?.length ? (\n              <motion.li\n                key={`level-2-${linkTitle}`}\n                className={classNames(\n                  'cursor-pointer pr-5',\n                  activeNavItemIndex === index\n                    ? 'text-black-100'\n                    : 'text-grey-500'\n                )}\n                data-testid=\"CT-01-Header-Mobile-Second-Level-Sub-Nav-Item\"\n              >\n                <span className=\"flex flex-col items-center gap-2.5\">\n                  <a\n                    href={linkUrl}\n                    target={isInIFrame ? '_parent' : linkTarget}\n                  >\n                    <div\n                      className=\"second-level-nav-title body-two whitespace-nowrap\"\n                      data-testid=\"CT-01-Header-Mobile-Second-Level-Sub-Nav-Item-Title\"\n                    >\n                      {title}\n                    </div>\n                  </a>\n                  {activeNavItemIndex === index ? (\n                    <div className=\"h-2 w-2 rounded-full bg-yellow\" />\n                  ) : null}\n                </span>\n              </motion.li>\n            ) : (\n              <motion.li\n                key={`level-2-${linkTitle}`}\n                className={classNames(\n                  'pr-5',\n                  activeNavItemIndex === index\n                    ? 'text-black-100'\n                    : 'text-grey-500',\n                  navigationCards?.length ? 'cursor-default' : 'cursor-pointer'\n                )}\n              >\n                <button\n                  onClick={() => {\n                    setActiveNavItemIndex(index);\n                    handleLevelTwoClick(title);\n                    setActiveSubNavContent({\n                      navigationCards,\n                      links,\n                    });\n                  }}\n                >\n                  <span className=\"flex flex-col items-center gap-2.5\">\n                    <div\n                      className=\"second-level-nav-title body-two whitespace-nowrap\"\n                      data-testid=\"CT-01-Header-Mobile-Second-Level-Sub-Nav-Item-Title\"\n                    >\n                      {title}\n                    </div>\n                    {activeNavItemIndex === index ? (\n                      <div className=\"h-2 w-2 rounded-full bg-yellow\" />\n                    ) : null}\n                  </span>\n                </button>\n              </motion.li>\n            );\n          }\n        )}\n      </motion.ul>\n\n      <SubNavTab\n        activeTab={activeSubNavContent || {}}\n        mainCategory={mainCategory}\n        subCategory={subCategory}\n        dataTestId=\"CT-01-Header-Sub-Nav-Tab\"\n      />\n    </motion.div>\n  );\n};\n\nexport default MobileSecondLevelContent;\n","import ShadowContainerVertical from '@atoms/ShadowContainerVertical/ShadowContainerVertical';\nimport { ISubMenuItem } from '@models/IHeader';\nimport { motion } from 'framer-motion';\nimport MobileSecondLevelContent from './MobileSecondLevelContent';\n\ninterface Props {\n  readonly activeTab: ISubMenuItem[];\n  readonly secondLevelTitle: string;\n}\n\nconst MobileSecondLevel = ({ activeTab, secondLevelTitle }: Props) => {\n  const mobileMenuVariant = {\n    opened: {\n      x: '100%',\n      transition: {\n        delay: 0.15,\n        duration: 1.1,\n        ease: [0.74, 0, 0.19, 1.02],\n      },\n    },\n    closed: {\n      x: '200%',\n      transition: {\n        delay: 0.35,\n        duration: 0.63,\n        ease: [0.74, 0, 0.19, 1.02],\n      },\n    },\n  };\n\n  return (\n    <motion.div\n      className=\"absolute bottom-0 left-0 right-0 top-0 overflow-y-auto\"\n      initial=\"closed\"\n      variants={mobileMenuVariant}\n      data-testid=\"CT-01-Header-Mobile-Second-Level\"\n    >\n      <ShadowContainerVertical shadowColour=\"from-white\" shadowHeight=\"h-6\">\n        <p\n          className=\"h5 pb-3 pl-5  pr-5 text-black-100 md:pl-8 md:pr-8 lgm:pl-32\"\n          data-testid={`CT-01-Header-Mobile-Second-Level-Title-${secondLevelTitle}`}\n        >\n          {secondLevelTitle}\n        </p>\n        <MobileSecondLevelContent\n          activeTab={activeTab}\n          mainCategory={secondLevelTitle}\n        />\n      </ShadowContainerVertical>\n    </motion.div>\n  );\n};\n\nexport default MobileSecondLevel;\n","import Icon from '@atoms/Icon/Icon';\nimport { IAccountDropdown } from '@models/IAccountDropdown';\nimport { IMainNavigationItem } from '@models/IHeader';\nimport ILanguageSelector from '@models/ILanguageSelector';\nimport { ILink } from '@models/ILink';\nimport IconSizeEnum from '@models/enums/IconSizeEnum';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport useIsInIFrame from '@utils/hooks/useIsInIFrame';\nimport { motion } from 'framer-motion';\nimport { Dispatch, SetStateAction, useState } from 'react';\nimport AccountMenuMobile from './AccountMenuMobile';\nimport LanguageSelectorMobile from './LanguageSelectorMobile';\nimport MobileSecondLevel from './MobileSecondLevel';\n\ninterface Props {\n  readonly accountsEnabled: boolean;\n  readonly accountLink: ILink;\n  readonly accountDropdownNavigation: IAccountDropdown;\n  readonly mainNavigation: IMainNavigationItem[];\n  readonly languageSelector?: ILanguageSelector;\n  readonly languageActiveIndex: number;\n  readonly isOpenSecondLevel: boolean;\n  readonly serviceAccountLink?: ILink;\n  readonly setIsOpenSecondLevel: Dispatch<SetStateAction<boolean>>;\n  readonly showAccountIcon?: boolean;\n}\n\ninterface LinkComponentProps {\n  readonly title: string;\n  readonly href: string;\n  readonly target: string;\n  readonly icon?: string;\n}\n\nconst AccountLink = ({\n  title,\n  href,\n  target = '_self',\n  icon = 'account',\n}: LinkComponentProps) => (\n  <a\n    href={href}\n    className=\"h5 flex w-full cursor-pointer flex-row gap-x-4 pb-8 pl-5 pr-5 text-black-100\"\n    target={target}\n  >\n    <div className=\"flex items-center justify-center\">\n      <Icon name={icon} size={IconSizeEnum.lg} className=\"mr-2\" />\n      <span>{title}</span>\n    </div>\n\n    <div className=\"ml-auto flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-yellow\">\n      <Icon name=\"east\" size={IconSizeEnum.sm} />\n    </div>\n  </a>\n);\n\nconst MobileTopLevel = (props: Props) => {\n  const {\n    accountsEnabled,\n    accountLink,\n    accountDropdownNavigation,\n    mainNavigation,\n    isOpenSecondLevel,\n    serviceAccountLink,\n    setIsOpenSecondLevel,\n    languageActiveIndex,\n    languageSelector,\n    showAccountIcon,\n  } = props;\n  const [activeCtaTabIndex, setActiveCtaTabIndex] = useState(-1);\n  const isInIFrame = useIsInIFrame();\n\n  const handleLevelOneClick = (item: string) => {\n    updateDataLayer({\n      event: 'menuUsed',\n      content_type: 'header_menu_level_1',\n      main_category: item,\n      sub_category: undefined,\n      tertiary_category: undefined,\n    });\n  };\n\n  const mobileMenuVariant = {\n    opened: {\n      x: '-100%',\n      transition: {\n        delay: 0.15,\n        duration: 1.1,\n        ease: [0.74, 0, 0.19, 1.02],\n      },\n    },\n    closed: {\n      x: '0%',\n      transition: {\n        delay: 0.35,\n        duration: 0.63,\n        ease: [0.74, 0, 0.19, 1.02],\n      },\n    },\n  };\n\n  const { loggedInMenuTitle, loggedOutMenuTitle, userAuthenticated } =\n    accountDropdownNavigation;\n\n  const conditions = {\n    userAuthenticated: accountsEnabled && userAuthenticated,\n    userNotAuthenticated: accountsEnabled && !userAuthenticated,\n    accountsDisabledCondition: !accountsEnabled,\n  };\n\n  // ONLY RELEVANT WHEN ACCOUNTS ARE DISABLED\n\n  const {\n    url: accountPageUrl,\n    target: accountPageTarget = '_self',\n    name: accountText,\n  } = accountLink ?? {};\n\n  const serviceAccountLinkTarget = serviceAccountLink?.target ?? '_blank';\n\n  return (\n    <motion.div\n      initial=\"closed\"\n      animate={isOpenSecondLevel ? 'opened' : 'closed'}\n      variants={mobileMenuVariant}\n      className=\"flex h-full min-w-[100%] flex-row items-start\"\n    >\n      <motion.ul className=\"flex h-full w-full flex-col items-start justify-between overflow-y-auto\">\n        <div className=\"w-full\">\n          {mainNavigation.map(({ link, subMenuItems, title = '' }, index) =>\n            link?.url ? (\n              <div key={`level-1-nav-link--${link?.name}`} className=\"w-full\">\n                <motion.li\n                  onClick={() => {\n                    setActiveCtaTabIndex(index);\n                    setIsOpenSecondLevel(true);\n                    handleLevelOneClick(link?.name || '');\n                  }}\n                  className=\"h5 flex w-full cursor-pointer flex-row gap-x-4 pb-8 pl-5 pr-5 text-black-100\"\n                  data-testid={`CT-01-Header-Mobile-Top-Level-Category-Item-${title}`}\n                >\n                  <a\n                    href={link.url}\n                    target={isInIFrame ? '_parent' : link.target}\n                    data-testid={`CT-01-Header-Mobile-Top-Level-Category-Link-${title}`}\n                  >\n                    {link?.name}\n                  </a>\n\n                  <div className=\"ml-auto flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-yellow\">\n                    <Icon name=\"east\" size={IconSizeEnum.sm} />\n                  </div>\n                </motion.li>\n              </div>\n            ) : (\n              <div key={`level-1-nav-link--${link?.name}`} className=\"w-full\">\n                <motion.li\n                  onClick={() => {\n                    setActiveCtaTabIndex(index);\n                    setIsOpenSecondLevel(true);\n                    handleLevelOneClick(title);\n                  }}\n                  className=\"h5 flex w-full cursor-pointer flex-row gap-x-4 pb-8 pl-5 pr-5 text-black-100\"\n                  data-testid={`CT-01-Header-Mobile-Top-Level-Category-Title-${title}`}\n                >\n                  {title}\n\n                  <div className=\"ml-auto flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-yellow\">\n                    <Icon name=\"east\" size={IconSizeEnum.sm} />\n                  </div>\n                </motion.li>\n\n                {index === activeCtaTabIndex && (\n                  <MobileSecondLevel\n                    activeTab={index === activeCtaTabIndex ? subMenuItems : []}\n                    secondLevelTitle={title}\n                  />\n                )}\n              </div>\n            )\n          )}\n        </div>\n        <div className=\"w-full items-end\">\n          {showAccountIcon &&\n            conditions.userAuthenticated &&\n            loggedInMenuTitle && (\n              <>\n                <motion.button\n                  onClick={() => {\n                    setActiveCtaTabIndex(mainNavigation.length + 1);\n                    setIsOpenSecondLevel(true);\n                  }}\n                  className=\"h5 flex w-full cursor-pointer flex-row gap-x-4 pb-8 pl-5 pr-5 text-black-100\"\n                >\n                  <div className=\"flex items-center justify-center\">\n                    <Icon\n                      name=\"account\"\n                      size={IconSizeEnum.lg}\n                      className=\"mr-2\"\n                    />\n                    <span>{loggedInMenuTitle}</span>\n                  </div>\n\n                  <div className=\"ml-auto flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-yellow\">\n                    <Icon name=\"east\" size={IconSizeEnum.sm} />\n                  </div>\n                </motion.button>\n                {mainNavigation.length + 1 === activeCtaTabIndex && (\n                  <AccountMenuMobile\n                    items={accountDropdownNavigation?.navigationDropdown}\n                    {...accountDropdownNavigation}\n                  />\n                )}\n              </>\n            )}\n          {conditions.userNotAuthenticated &&\n            loggedOutMenuTitle &&\n            accountDropdownNavigation?.loginEndpoint && (\n              <AccountLink\n                title={loggedOutMenuTitle}\n                href={accountDropdownNavigation.loginEndpoint}\n                target={isInIFrame ? '_parent' : '_self'}\n              />\n            )}\n          {conditions.accountsDisabledCondition &&\n            accountText &&\n            accountPageUrl && (\n              <AccountLink\n                title={accountText}\n                href={accountPageUrl}\n                target={isInIFrame ? '_parent' : accountPageTarget}\n              />\n            )}\n          {serviceAccountLink?.url && serviceAccountLink?.name && (\n            <AccountLink\n              title={serviceAccountLink.name}\n              href={serviceAccountLink.url}\n              target={isInIFrame ? '_parent' : serviceAccountLinkTarget}\n              icon={serviceAccountLink.linkIcon}\n            />\n          )}\n          {!!languageSelector && (\n            <>\n              <motion.button\n                onClick={() => {\n                  setActiveCtaTabIndex(mainNavigation.length + 2);\n                  setIsOpenSecondLevel(true);\n                }}\n                className=\"h5 flex w-full cursor-pointer flex-row gap-x-4 pb-8 pl-5 pr-5 text-black-100\"\n              >\n                <div className=\"flex items-center justify-center\">\n                  <Icon\n                    name=\"language\"\n                    size={IconSizeEnum.lg}\n                    className=\"mr-2\"\n                  />\n                  <span>\n                    {languageSelector.links[languageActiveIndex]?.longName ||\n                      ''}\n                  </span>\n                </div>\n\n                <div className=\"ml-auto flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-yellow\">\n                  <Icon name=\"east\" size={IconSizeEnum.sm} />\n                </div>\n              </motion.button>\n              {mainNavigation.length + 2 === activeCtaTabIndex && (\n                <LanguageSelectorMobile\n                  languageActiveIndex={languageActiveIndex}\n                  languageSelector={languageSelector}\n                />\n              )}\n            </>\n          )}\n        </div>\n      </motion.ul>\n    </motion.div>\n  );\n};\n\nexport default MobileTopLevel;\n","import Icon from '@atoms/Icon/Icon';\nimport { IAccountDropdown } from '@models/IAccountDropdown';\nimport { IMainNavigationItem } from '@models/IHeader';\nimport { IImage } from '@models/IImage';\nimport ILanguageSelector from '@models/ILanguageSelector';\nimport { ILink } from '@models/ILink';\nimport IconSizeEnum from '@models/enums/IconSizeEnum';\nimport useAriaLabels from '@utils/hooks/useAriaLabels';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { Dispatch, SetStateAction, useState } from 'react';\nimport MobileTopLevel from './MobileTopLevel';\n\ninterface Props {\n  readonly accountLink: ILink;\n  readonly accountsEnabled: boolean;\n  readonly accountDropdownNavigation: IAccountDropdown;\n  readonly backLabel: string;\n  readonly language: string;\n  readonly languageActiveIndex: number;\n  readonly languageSelector?: ILanguageSelector;\n  readonly logo: IImage;\n  readonly mainNavigation: IMainNavigationItem[];\n  readonly serviceAccountLink?: ILink;\n  readonly setIsOpen: Dispatch<SetStateAction<boolean>>;\n  readonly showAccountIcon?: boolean;\n}\n\nconst MobileSubNav = ({\n  accountLink,\n  accountsEnabled,\n  accountDropdownNavigation,\n  backLabel,\n  language,\n  languageActiveIndex,\n  languageSelector,\n  logo,\n  mainNavigation,\n  serviceAccountLink,\n  setIsOpen,\n  showAccountIcon,\n}: Props) => {\n  const [isOpenSecondLevel, setIsOpenSecondLevel] = useState(false);\n  const {\n    closeMobileNavigationAriaLabel,\n    backToFirstLevelNavigationAriaLabel,\n  } = useAriaLabels();\n\n  const topLevelProps = {\n    accountLink,\n    accountsEnabled,\n    accountDropdownNavigation,\n    mainNavigation,\n    logo,\n    isOpenSecondLevel,\n    setIsOpenSecondLevel,\n    languageActiveIndex,\n    languageSelector,\n    language,\n    serviceAccountLink,\n    showAccountIcon,\n  };\n\n  return (\n    <motion.div\n      initial={{ x: '100%' }}\n      animate={{ x: 0 }}\n      exit={{ x: '100%' }}\n      transition={{\n        delay: 0.15,\n        duration: 1.1,\n        ease: [0.74, 0, 0.19, 1.02],\n      }}\n      className=\"fixed left-0 top-0 z-max flex h-full w-screen flex-col overflow-hidden bg-white\"\n      data-testid=\"CT-01-Header-Mobile-Sub-Nav\"\n    >\n      <div className=\"relative flex flex-row items-center px-5 pb-11 pt-8 md:pl-8 md:pr-8 lgm:pl-32\">\n        <AnimatePresence>\n          {isOpenSecondLevel && (\n            <motion.button\n              initial={{ x: '-100%', opacity: 0 }}\n              animate={{ x: 0, opacity: 1 }}\n              exit={{ x: '-100%', opacity: 0 }}\n              transition={{\n                delay: 0.15,\n                duration: 1.1,\n                ease: [0.74, 0, 0.19, 1.02],\n              }}\n              className=\"absolute flex flex-row\"\n              onClick={() => setIsOpenSecondLevel(false)}\n              onKeyDown={() => setIsOpenSecondLevel(false)}\n              aria-label={backToFirstLevelNavigationAriaLabel}\n              data-testid=\"CT-01-Header-Mobile-Sub-Nav-Back-Button\"\n            >\n              <div className=\"mr-4 flex h-7 w-7 rotate-180 items-center justify-center rounded-full bg-yellow\">\n                <Icon name=\"east\" size={IconSizeEnum.sm} />\n              </div>\n              <p\n                className=\"flex items-center\"\n                data-testid=\"CT-01-Header-Mobile-Sub-Nav-Back-Button-Label\"\n              >\n                {backLabel}\n              </p>\n            </motion.button>\n          )}\n        </AnimatePresence>\n        <button\n          className=\"ml-auto flex justify-end\"\n          onClick={() => setIsOpen((oldState) => !oldState)}\n          onKeyDown={() => setIsOpen((oldState) => !oldState)}\n          aria-label={closeMobileNavigationAriaLabel}\n        >\n          <Icon name=\"close\" size={IconSizeEnum.lg} />\n        </button>\n      </div>\n      <div className=\"grow overflow-scroll bg-white\">\n        <MobileTopLevel {...topLevelProps} />\n      </div>\n    </motion.div>\n  );\n};\n\nexport default MobileSubNav;\n","import Backdrop from '@atoms/Backdrop/Backdrop';\nimport Icon from '@atoms/Icon/Icon';\nimport Image from '@atoms/Image/Image';\nimport Modal from '@atoms/Modal/Modal';\nimport Tooltip from '@atoms/Tooltip/Tooltip';\nimport { IHeader } from '@models/IHeader';\nimport IconSizeEnum from '@models/enums/IconSizeEnum';\nimport TooltipPositionEnum from '@models/enums/TooltipPositionEnum';\nimport VerticalDirectionEnum from '@models/enums/VerticalDirectionEnum';\nimport AccountDropdown from '@molecules/AccountDropdown/AccountDropdown';\nimport Dropdown from '@molecules/Dropdown/Dropdown';\nimport MiniBasket from '@molecules/MiniBasket/MiniBasket';\nimport Search from '@organisms/Search/Search';\nimport useCartSizeStore from '@state/CartSizeStore';\nimport useComponentsHeightsStore from '@state/ComponentsHeightsStore';\nimport bodyScrollLock from '@utils/helpers/bodyScrollLock';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport useAriaLabels from '@utils/hooks/useAriaLabels';\nimport useCookieConsent from '@utils/hooks/useCookieConsent';\nimport useIsInIFrame from '@utils/hooks/useIsInIFrame';\nimport useMediaQuery from '@utils/hooks/useMediaQuery';\nimport useResizeObserver from '@utils/hooks/useResizeObserver';\nimport classNames from 'classnames';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport Cookies from 'js-cookie';\nimport { useEffect, useState } from 'react';\nimport DesktopSubNav from './subNav/desktop/DesktopSubNav';\nimport MobileSubNav from './subNav/mobile/MobileSubNav';\n\nconst Header = ({\n  accountDropdownNavigation,\n  accountLabel,\n  accountLink = {},\n  accountsEnabled,\n  backLabel,\n  basketLabel,\n  basketLink,\n  cartIdCookie,\n  cartSizeCookie,\n  cookieDomain,\n  culture,\n  hasMiniBasket,\n  endpoint,\n  homepageLink,\n  language,\n  languageSelector,\n  listingPage,\n  logo,\n  mainNavigation,\n  miniBasketEndpoint,\n  miniBasketTitle,\n  nikonImagingText,\n  overlaySearchIcon,\n  popularSearches,\n  searchBlock,\n  searchIcon,\n  searchLabel,\n  searchPlaceholder,\n  searchSubTitle,\n  serviceAccountLink,\n  showAccountIcon,\n  showSearchIcon,\n  skipContentLabel,\n  suggestedSearchTitleLabel,\n}: IHeader) => {\n  const [isOpenDesktop, setIsOpenDesktop] = useState(false);\n  const [activeIndex, setActiveIndex] = useState(-1);\n  const [isMobileActive, setIsMobileActive] = useState(false);\n  const [isMiniBasketDisplayed, setIsMiniBasketDisplayed] = useState(false);\n  const [isSearchOpen, setIsSearchOpen] = useState(false);\n  const [isLanguageDropdownSelectorOpen, setIsLanguageDropdownSelectorOpen] =\n    useState(false);\n  const [isAccountDropdownOpen, setIsAccountDropdownOpen] = useState(false);\n  const [languageActiveIndex, setLanguageActiveIndex] = useState(-1);\n  const [isLanguageMobileModalOpen, setIsLanguageMobileModalOpen] =\n    useState(false);\n  const [mainSelector, setMainSelector] = useState<HTMLElement | null>(null);\n  const isInIFrame = useIsInIFrame();\n  const isMobileView = useMediaQuery(1440);\n  const { url: homePageUrl, target: homePageTarget = '_self' } =\n    homepageLink || {};\n  const [navRef, { height: navHeight }] = useResizeObserver();\n  const { siteNotificationsHeight, USPsStripHeight } =\n    useComponentsHeightsStore((state) => ({\n      siteNotificationsHeight: state.siteNotificationsHeight,\n      USPsStripHeight: state.USPsStripHeight,\n    }));\n\n  useCookieConsent();\n\n  const handleLevelOneClick = (item: string) => {\n    updateDataLayer({\n      event: 'menuUsed',\n      content_type: 'header_menu_level_1',\n      main_category: item,\n      sub_category: undefined,\n      tertiary_category: undefined,\n    });\n  };\n\n  const {\n    cartSize,\n    setCartIdName,\n    setCartSizeName,\n    setDomainName,\n    cartSizeName,\n    setCartSize,\n  } = useCartSizeStore((state) => ({\n    cartSize: state.cartSize,\n    setCartIdName: state.setCartIdName,\n    setCartSizeName: state.setCartSizeName,\n    setDomainName: state.setDomainName,\n    setCartSize: state.setCartSize,\n    cartIdName: state.cartIdName,\n    cartSizeName: state.cartSizeName,\n    domainName: state.domainName,\n  }));\n\n  useEffect(() => {\n    setCartIdName(cartIdCookie);\n    setCartSizeName(cartSizeCookie);\n    setDomainName(cookieDomain);\n  }, [\n    cartIdCookie,\n    cartSizeCookie,\n    cookieDomain,\n    setCartIdName,\n    setCartSizeName,\n    setDomainName,\n  ]);\n\n  useEffect(() => {\n    if (cartSizeName) {\n      setCartSize(Number(Cookies.get(cartSizeName)) || 0);\n    }\n  }, [cartSizeName, setCartSize]);\n\n  const {\n    mainNavigationAriaLabel,\n    openMenuAriaLabel,\n    backToFirstLevelNavigationAriaLabel,\n    closeMobileNavigationAriaLabel,\n    overlayToCloseDesktopNavigationAriaLabel,\n  } = useAriaLabels();\n\n  useEffect(\n    () =>\n      setLanguageActiveIndex(\n        languageSelector?.links?.findIndex(\n          (lang) => !!lang.url?.includes(language)\n        ) ?? -1\n      ),\n    [language, languageSelector]\n  );\n\n  useEffect(() => {\n    if (\n      isMobileActive ||\n      isSearchOpen ||\n      isLanguageDropdownSelectorOpen ||\n      isAccountDropdownOpen\n    ) {\n      bodyScrollLock(true);\n    } else {\n      bodyScrollLock(false);\n    }\n\n    return () => {\n      bodyScrollLock(false);\n    };\n  }, [\n    isMobileActive,\n    isSearchOpen,\n    isLanguageDropdownSelectorOpen,\n    isAccountDropdownOpen,\n  ]);\n\n  useEffect(() => {\n    setMainSelector(document.querySelector('main'));\n  }, []);\n\n  useEffect(() => {\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        setIsOpenDesktop(false);\n        setIsLanguageDropdownSelectorOpen(false);\n        setIsAccountDropdownOpen(false);\n        setIsSearchOpen(false);\n        setIsMiniBasketDisplayed(false);\n      }\n    };\n\n    if (\n      isOpenDesktop ||\n      isLanguageDropdownSelectorOpen ||\n      isAccountDropdownOpen ||\n      isSearchOpen ||\n      isMiniBasketDisplayed\n    ) {\n      document.addEventListener('keydown', handleKeyDown);\n    } else {\n      document.removeEventListener('keydown', handleKeyDown);\n    }\n\n    return () => {\n      document.removeEventListener('keydown', handleKeyDown);\n    };\n  }, [\n    isOpenDesktop,\n    isLanguageDropdownSelectorOpen,\n    isAccountDropdownOpen,\n    isSearchOpen,\n    isMiniBasketDisplayed,\n  ]);\n\n  // ONLY RELEVANT WHEN ACCOUNTS ARE DISABLED\n  const {\n    url: accountPageUrl,\n    target: accountPageTarget = '_self',\n    name: accountName,\n  } = accountLink;\n\n  const showLanguageSelector = !!languageSelector?.links?.length && language;\n  const showIcons =\n    isMobileView ||\n    showLanguageSelector ||\n    showAccountIcon ||\n    showSearchIcon ||\n    (basketLink?.url && basketLink?.name);\n  const showNav =\n    logo || (!isMobileView && !!mainNavigation?.length) || showIcons;\n\n  return (\n    <>\n      {mainSelector && (\n        <div className=\"sr-container\">\n          <button\n            onClick={() => mainSelector.focus()}\n            className=\"relative left-7.5 z-10 mt-5 h-[50px] rounded-[50px] border-2 border-dotted border-white bg-grey-600 px-[15px] py-2.5 text-white outline-none\"\n          >\n            {skipContentLabel}\n          </button>\n        </div>\n      )}\n\n      {showNav && (\n        <nav\n          ref={navRef}\n          aria-label={mainNavigationAriaLabel}\n          className=\"relative flex flex-col\"\n          data-testid=\"CT-01-Header\"\n        >\n          <div className=\"relative z-80 flex h-[77px] flex-row items-stretch border-b border-grey-500/30 bg-black-100 px-5 py-2.5 lg:h-[129px] lg:px-7 lg:py-3.5\">\n            {logo && homePageUrl && (\n              <a\n                href={homePageUrl}\n                target={isInIFrame ? '_parent' : homePageTarget}\n                rel=\"noreferrer\"\n                className=\"my-2 mr-6 lg:my-4\"\n                data-testid=\"CT-01-Header-Navigation-Logo-Link\"\n              >\n                <Image\n                  sizes=\"\" // TODO need to set the width for the logo so show correctly as does not have a width until image is loaded\n                  lazyLoad={false}\n                  image={logo}\n                  imageClasses=\"h-10 w-10 lg:h-[4.25rem] lg:w-[4.25rem]\"\n                  progressiveLoad={false}\n                  dataTestId=\"CT-01-Header-Navigation-Logo-Image\"\n                />\n              </a>\n            )}\n            {logo && !homePageUrl && (\n              <Image\n                sizes=\"\" // TODO need to set the width for the logo so show correctly as does not have a width until image is loaded\n                lazyLoad={false}\n                image={logo}\n                imageClasses=\"h-10 w-10 lg:h-[4.25rem] lg:w-[4.25rem] my-2 mr-6 lg:my-4\"\n                progressiveLoad={false}\n                dataTestId=\"CT-01-Header-Navigation-Logo-Image\"\n              />\n            )}\n\n            {!isMobileView && !!mainNavigation?.length && (\n              <ul className=\"hidden items-stretch justify-center xl:flex\">\n                {mainNavigation.map(({ link, title, isHighlighted }, index) => {\n                  const { url, target } = link || {};\n\n                  return (\n                    <li\n                      key={`level-1-nav-link--${title}`}\n                      className=\"body-two flex cursor-pointer items-center pr-6 text-white transition-colors hover:text-yellow\"\n                    >\n                      <a\n                        className={classNames(\n                          'flex items-center self-stretch',\n                          {\n                            'text-yellow': isHighlighted,\n                          }\n                        )}\n                        href={url || '#'}\n                        rel=\"noreferrer\"\n                        target={isInIFrame ? '_parent' : target}\n                        data-testid={`CT-01-Header-Item-${title}`}\n                        onClick={() => handleLevelOneClick(title || '')}\n                        onMouseOver={() => {\n                          setActiveIndex(index);\n                          setIsOpenDesktop(true);\n                          setIsSearchOpen(false);\n                          setIsLanguageDropdownSelectorOpen(false);\n                          setIsAccountDropdownOpen(false);\n                        }}\n                        onFocus={() => {\n                          setActiveIndex(index);\n                          setIsOpenDesktop(true);\n                          setIsSearchOpen(false);\n                          setIsLanguageDropdownSelectorOpen(false);\n                          setIsAccountDropdownOpen(false);\n                        }}\n                        onKeyDown={(e) => {\n                          if (e.key === 'Enter') {\n                            if (index === activeIndex) {\n                              setActiveIndex(-1);\n                              setIsOpenDesktop(false);\n                            } else {\n                              setActiveIndex(index);\n                              setIsOpenDesktop(true);\n                              setIsSearchOpen(false);\n                              setIsLanguageDropdownSelectorOpen(false);\n                              setIsAccountDropdownOpen(false);\n                            }\n                          }\n                        }}\n                      >\n                        {title}\n                      </a>\n                      {mainNavigation.length > 0 &&\n                        activeIndex === index &&\n                        activeIndex >= 0 &&\n                        !mainNavigation[activeIndex]?.link?.url && (\n                          <AnimatePresence initial={false}>\n                            {isOpenDesktop &&\n                              mainNavigation.length > 0 &&\n                              activeIndex >= 0 && (\n                                <DesktopSubNav\n                                  isOpenDesktop={isOpenDesktop}\n                                  setIsOpenDesktop={setIsOpenDesktop}\n                                  activeIndex={activeIndex}\n                                  mainNavigation={mainNavigation}\n                                />\n                              )}\n                          </AnimatePresence>\n                        )}\n                    </li>\n                  );\n                })}\n              </ul>\n            )}\n\n            {(nikonImagingText || showIcons) && (\n              <div className=\"ml-auto flex items-center justify-center gap-x-[15px] md:gap-x-5 lg:gap-x-[25px]\">\n                {nikonImagingText && (\n                  <div className=\"small-text text-grey\">{nikonImagingText}</div>\n                )}\n                {nikonImagingText && showIcons && (\n                  <div className=\"small-text text-white\">|</div>\n                )}\n                {showIcons && (\n                  <>\n                    {!isMobileView && (\n                      <>\n                        {showLanguageSelector && (\n                          <div className=\"hidden cursor-pointer items-center justify-center xl:flex\">\n                            <Dropdown\n                              openFromDirection={VerticalDirectionEnum.Down}\n                              links={languageSelector.links}\n                              modalTitle={languageSelector.title}\n                              title={\n                                languageSelector.links[languageActiveIndex]\n                                  ?.shortName\n                              }\n                              isOpen={isLanguageDropdownSelectorOpen}\n                              setIsOpen={setIsLanguageDropdownSelectorOpen}\n                              activeIndex={languageActiveIndex}\n                              animateUnderline\n                              titleCallback={() => {\n                                setIsLanguageDropdownSelectorOpen(\n                                  !isLanguageDropdownSelectorOpen\n                                );\n                                setIsOpenDesktop(false);\n                                setIsSearchOpen(false);\n                                setIsAccountDropdownOpen(false);\n                              }}\n                              dataTestId=\"CT-01-Header-Language-Dropdown\"\n                              dataLayerCallback={(label) => {\n                                updateDataLayer({\n                                  event: 'menuUsed',\n                                  content_type: 'quick_menu',\n                                  main_category: 'language',\n                                  sub_category: label,\n                                });\n                              }}\n                            />\n                          </div>\n                        )}\n                        {showAccountIcon && (\n                          <div className=\"tooltip-parent relative w-auto text-black-100\">\n                            {accountsEnabled ? (\n                              <AccountDropdown\n                                accountLabel={accountLabel}\n                                callback={() => {\n                                  setIsOpenDesktop(false);\n                                  setIsSearchOpen(false);\n                                  setIsLanguageDropdownSelectorOpen(false);\n                                  updateDataLayer({\n                                    event: 'menuUsed',\n                                    content_type: 'quick_menu',\n                                    main_category: 'account',\n                                  });\n                                }}\n                                isOpen={isAccountDropdownOpen}\n                                setIsOpen={setIsAccountDropdownOpen}\n                                {...accountDropdownNavigation}\n                              />\n                            ) : (\n                              <a\n                                href={accountPageUrl}\n                                target={\n                                  isInIFrame ? '_parent' : accountPageTarget\n                                }\n                                className=\"appearance-none\"\n                                aria-label={accountLabel}\n                                onClick={() => {\n                                  updateDataLayer({\n                                    event: 'menuUsed',\n                                    content_type: 'quick_menu',\n                                    main_category: 'account',\n                                  });\n                                }}\n                              >\n                                <span className=\"sr-only\">{accountName}</span>\n                                <Icon\n                                  name=\"account\"\n                                  colorClassName=\"text-white\"\n                                  size={IconSizeEnum.xl}\n                                />\n                              </a>\n                            )}\n                            {accountLabel && (\n                              <Tooltip\n                                label={accountLabel}\n                                position={TooltipPositionEnum.Bottom}\n                                hasArrow\n                              />\n                            )}\n                          </div>\n                        )}\n                      </>\n                    )}\n                    {showSearchIcon && (\n                      <div\n                        className={classNames(\n                          { 'tooltip-parent': !isMobileView },\n                          'relative'\n                        )}\n                      >\n                        <button\n                          type=\"button\"\n                          onClick={() => {\n                            setActiveIndex(-1);\n                            setIsOpenDesktop(false);\n                            setIsLanguageDropdownSelectorOpen(false);\n                            setIsAccountDropdownOpen(false);\n                            setIsSearchOpen((oldState) => !oldState);\n                            bodyScrollLock(!isSearchOpen);\n                            updateDataLayer({\n                              event: 'menuUsed',\n                              content_type: 'quick_menu',\n                              main_category: 'search',\n                            });\n                          }}\n                          aria-label={searchLabel}\n                          data-testid=\"CT-01-Header-Search-Icon\"\n                        >\n                          <Icon\n                            name={searchIcon}\n                            className=\"transition-colors hover:text-yellow\"\n                            colorClassName=\"text-white\"\n                            size={IconSizeEnum.xl}\n                          />\n                        </button>\n                        {searchLabel && (\n                          <Tooltip\n                            label={searchLabel}\n                            position={TooltipPositionEnum.Bottom}\n                            hasArrow\n                          />\n                        )}\n                      </div>\n                    )}\n\n                    {((basketLink?.url && basketLink?.name) ||\n                      hasMiniBasket) && (\n                      <div\n                        className={classNames(\n                          {\n                            'tooltip-parent': !isMobileView && !hasMiniBasket,\n                            'z-100': hasMiniBasket,\n                          },\n                          'relative'\n                        )}\n                        {...(hasMiniBasket && !isMobileView\n                          ? {\n                              onMouseEnter: () => {\n                                setIsMiniBasketDisplayed(true);\n                              },\n                              onMouseLeave: () => {\n                                setIsMiniBasketDisplayed(false);\n                              },\n                              onFocus: () => {\n                                setIsMiniBasketDisplayed(true);\n                              },\n                              onBlur: (event) => {\n                                if (\n                                  !event.currentTarget.contains(\n                                    event.relatedTarget\n                                  )\n                                ) {\n                                  setIsMiniBasketDisplayed(false);\n                                }\n                              },\n                            }\n                          : {})}\n                      >\n                        <a\n                          href={basketLink.url}\n                          className=\"block cursor-pointer\"\n                          aria-label={basketLink.name}\n                          target={isInIFrame ? '_parent' : '_self'}\n                          data-testid=\"CT-01-Header-Basket\"\n                          onClick={() => {\n                            updateDataLayer({\n                              event: 'menuUsed',\n                              content_type: 'quick_menu',\n                              main_category: 'cart',\n                            });\n                          }}\n                        >\n                          <span className=\"relative block\">\n                            <span className=\"sr-only\">{basketLink.name}</span>\n\n                            <Icon\n                              name=\"shopping_cart\"\n                              className=\"transition-colors hover:text-yellow\"\n                              colorClassName=\"text-white\"\n                              size={IconSizeEnum.xl}\n                            />\n\n                            {!!cartSize && (\n                              <span className=\"text-[10px] leading-[16px]\">\n                                <strong className=\"absolute -right-[5px] -top-[5px] rounded-full bg-yellow px-[5px] font-bold text-black-100\">\n                                  {cartSize}\n                                </strong>\n                              </span>\n                            )}\n                          </span>\n                        </a>\n\n                        {basketLabel && !hasMiniBasket && (\n                          <Tooltip\n                            label={basketLabel}\n                            position={TooltipPositionEnum.BottomLeft}\n                            hasArrow\n                            backgroundColor=\"bg-white\"\n                          />\n                        )}\n\n                        <AnimatePresence>\n                          {isMiniBasketDisplayed && (\n                            <motion.div\n                              initial={{ opacity: 0 }}\n                              animate={{ opacity: 1 }}\n                              exit={{ opacity: 0 }}\n                            >\n                              {/* The two divs below are used to increase the hoverable content area around the basket icon\n                              so that the mini basket tooltip is still displayed while the user moves the cursor from the icon\n                              to the mini basket container */}\n                              <div className=\"absolute -left-6 top-0 h-7 w-6\" />\n                              <div className=\"absolute left-1/2 h-10 w-[200px] translate-x-[calc(-100%+26px)]\" />\n\n                              <Tooltip\n                                position={TooltipPositionEnum.Custom}\n                                customContentClassName=\"left-1/2 translate-x-[calc(-100%+26px)] top-10 rounded-[10px]\"\n                                customArrowClassName=\"top-[33px]\"\n                                arrowRadiusClassName=\"rounded-[3px]\"\n                                hasArrow\n                                backgroundColor=\"bg-grey-100\"\n                                hasTooltipClass={false}\n                              >\n                                <MiniBasket\n                                  miniBasketEndpoint={miniBasketEndpoint}\n                                  miniBasketTitle={miniBasketTitle}\n                                />\n                              </Tooltip>\n                            </motion.div>\n                          )}\n                        </AnimatePresence>\n                      </div>\n                    )}\n\n                    {isMobileView && (\n                      <button\n                        className=\"right-2 top-2 ml-auto flex items-center\"\n                        onClick={() =>\n                          setIsMobileActive((oldState) => !oldState)\n                        }\n                        onKeyDown={() =>\n                          setIsMobileActive((oldState) => !oldState)\n                        }\n                        aria-label={openMenuAriaLabel}\n                      >\n                        <Icon\n                          name=\"menu\"\n                          colorClassName=\"text-white\"\n                          size={IconSizeEnum.xl}\n                        />\n                      </button>\n                    )}\n                  </>\n                )}\n              </div>\n            )}\n          </div>\n        </nav>\n      )}\n      <AnimatePresence mode=\"wait\">\n        {isMobileView && isMobileActive && (\n          <MobileSubNav\n            accountLink={accountLink}\n            accountsEnabled={accountsEnabled}\n            accountDropdownNavigation={accountDropdownNavigation}\n            language={language}\n            languageActiveIndex={languageActiveIndex}\n            languageSelector={languageSelector}\n            logo={logo}\n            mainNavigation={mainNavigation}\n            serviceAccountLink={serviceAccountLink}\n            setIsOpen={setIsMobileActive}\n            showAccountIcon={showAccountIcon}\n            backLabel={backLabel}\n          />\n        )}\n      </AnimatePresence>\n\n      <Modal\n        isOpen={isLanguageMobileModalOpen}\n        setIsOpen={setIsLanguageMobileModalOpen}\n        modalClasses=\"flex flex-col justify-start w-full h-full fixed top-0 bottom-0 left-0 right-0 pt-0 text-black-100 bg-white max-w-none\"\n        crossClasses=\"text-black-100\"\n        contentClasses=\"py-4\"\n        showCloseButton={false}\n      >\n        <div className=\"container h-full w-full list-none text-black-100\">\n          <div>\n            <div className=\"flex flex-row items-center pb-11 pt-8 md:pl-8 md:pr-8 lgm:pl-32\">\n              <button\n                className=\"flex flex-row\"\n                onClick={() => setIsLanguageMobileModalOpen(false)}\n                onKeyDown={() => setIsLanguageMobileModalOpen(false)}\n                aria-label={backToFirstLevelNavigationAriaLabel}\n              >\n                <div className=\"mr-4 flex h-7 w-7 rotate-180 items-center justify-center rounded-full bg-yellow\">\n                  <Icon\n                    name=\"east\"\n                    colorClassName=\"text-black-100\"\n                    size={IconSizeEnum.md}\n                  />\n                </div>\n                <p className=\"flex items-center\">{backLabel}</p>\n              </button>\n              <button\n                className=\"ml-auto flex justify-end\"\n                onClick={() =>\n                  setIsLanguageMobileModalOpen((oldState) => !oldState)\n                }\n                onKeyDown={() =>\n                  setIsLanguageMobileModalOpen((oldState) => !oldState)\n                }\n                aria-label={closeMobileNavigationAriaLabel}\n              >\n                <Icon\n                  name=\"close\"\n                  colorClassName=\"text-black-100\"\n                  size=\"1.125rem\"\n                />\n              </button>\n            </div>\n          </div>\n          <p className=\"h5 pb-4\">{languageSelector?.title}</p>\n          {!!languageSelector?.links?.length && (\n            <ul>\n              {languageSelector.links.map((link, index) => {\n                const { longName, url, target } = link;\n\n                return (\n                  <li className=\"py-4\" key={`dropdown-item-${longName}`}>\n                    <a\n                      href={url}\n                      target={isInIFrame ? '_parent' : target}\n                      className={classNames(\n                        'whitespace-nowrap decoration-yellow hover:underline',\n                        {\n                          'underline decoration-yellow':\n                            languageActiveIndex === index,\n                        }\n                      )}\n                    >\n                      {longName}\n                    </a>\n                  </li>\n                );\n              })}\n            </ul>\n          )}\n        </div>\n      </Modal>\n\n      <div\n        className={classNames(\n          'bottom-0 left-0 right-0 top-0 z-[78] bg-transparent',\n          isOpenDesktop ? 'fixed' : 'hidden'\n        )}\n        onClick={() => setIsOpenDesktop(false)}\n        onKeyDown={() => setIsOpenDesktop(false)}\n        role=\"button\"\n        tabIndex={0}\n        aria-label={overlayToCloseDesktopNavigationAriaLabel}\n      />\n\n      <AnimatePresence>\n        {isSearchOpen && (\n          <motion.div\n            className=\"fixed bottom-0 left-0 right-0 z-[79] overflow-y-auto\"\n            style={{\n              top: siteNotificationsHeight + USPsStripHeight + navHeight,\n            }}\n            initial={{ opacity: 1 }}\n            exit={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n          >\n            <Search\n              popularSearches={popularSearches}\n              listingPage={listingPage}\n              searchSubTitle={searchSubTitle}\n              searchPlaceholder={searchPlaceholder}\n              overlaySearchIcon={overlaySearchIcon}\n              culture={culture}\n              endpoint={endpoint}\n              suggestedSearchTitleLabel={suggestedSearchTitleLabel}\n              searchBlock={searchBlock}\n            />\n          </motion.div>\n        )}\n      </AnimatePresence>\n\n      {(isSearchOpen ||\n        isOpenDesktop ||\n        isLanguageDropdownSelectorOpen ||\n        isAccountDropdownOpen) && (\n        <Backdrop\n          key=\"backdrop\"\n          onCloseCallback={() => {\n            if (isSearchOpen) {\n              setIsSearchOpen(false);\n            }\n            if (isOpenDesktop) {\n              setIsOpenDesktop(false);\n            }\n            if (isLanguageDropdownSelectorOpen) {\n              setIsLanguageDropdownSelectorOpen(false);\n            }\n            if (isAccountDropdownOpen) {\n              setIsAccountDropdownOpen(false);\n            }\n          }}\n        />\n      )}\n    </>\n  );\n};\n\nexport default Header;\n","enum ErrorBannerNotificationEnum {\n  AccountDeleteAddress = 'accountDeleteAddress',\n  AccountDefaultAddressUpdate = 'defaultAddressUpdate',\n  AccountDeleteContactSubmit = 'deleteContactSubmit',\n  AccountGetOrderDetails = 'accountGetOrderDetails',\n  ShippingPickUpLocations = 'shippingPickUpLocations',\n  LightboxOuterImages = 'lightboxOuterImages',\n  MiniBasketDetails = 'miniBasketDetails',\n  OrderSummaryRemoveVoucher = 'orderSummaryRemoveVoucher',\n  ProductDetailsNotifyMe = 'productDetailsNotifyMe',\n  CartRemoveItem = 'cartRemoveItem',\n  NewsletterSignupBanner = 'newsletterSignupBanner',\n  NewsletterSignupPopup = 'newsletterSignupPopup',\n  OnlineRetailersData = 'onlineRetailersData',\n  SearchResults = 'searchResults',\n}\n\nexport default ErrorBannerNotificationEnum;\n","enum ScrollProgressEnum {\n  Start = 'Start',\n  Middle = 'Middle',\n  End = 'End',\n}\n\nexport default ScrollProgressEnum;\n","enum TooltipPositionEnum {\n  Top = 'Top',\n  Bottom = 'Bottom',\n  BottomLeft = 'BottomLeft',\n  Custom = 'Custom',\n}\nexport default TooltipPositionEnum;\n","enum VerticalDirectionEnum {\n  Up = 'UP',\n  Down = 'DOWN',\n}\n\nexport default VerticalDirectionEnum;\n","import { IAddToCartTray } from '@models/IAddToCartTray';\nimport { IBasketQuantityChangeResponse } from '@models/IBasket';\nimport axios from 'axios';\n\nexport const addItemToCart = async (\n  endpoint: string,\n  productData: { code: string; quantity: number }\n) => {\n  const { data } = await axios.post<IAddToCartTray>(\n    endpoint,\n    JSON.stringify(productData),\n    {\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      withCredentials: true,\n    }\n  );\n\n  return data;\n};\n\nexport const removeItemFromCart = async (\n  endpoint: string,\n  code: string,\n  isGift?: boolean\n) => {\n  const { data } = await axios.post<IBasketQuantityChangeResponse>(endpoint, {\n    code,\n    isGift,\n  });\n\n  return data;\n};\n\nexport const changeCartItemQuantity = async (\n  endpoint: string,\n  productData: { code: string; quantity: number }\n) => {\n  const { data } = await axios.post<IBasketQuantityChangeResponse>(\n    endpoint,\n    productData\n  );\n\n  return data;\n};\n\nexport const changeVoucher = async (endpoint: string, voucher: string) => {\n  const formData = new FormData();\n  formData.append('couponCode', voucher);\n\n  await axios.post(endpoint, formData);\n};\n\nexport const refresh = async <T>(endpoint: string) => {\n  const { data } = await axios.get<T>(endpoint);\n\n  return data;\n};\n","import create from 'zustand';\n\ninterface ICartSizeState {\n  readonly cartIdName: string;\n  readonly cartSizeName: string;\n  readonly domainName: string;\n  readonly cartSize: number;\n  readonly setCartIdName: (cartIdName: string) => void;\n  readonly setCartSizeName: (cartSizeName: string) => void;\n  readonly setDomainName: (domainName: string) => void;\n  readonly setCartSize: (cartSize: number) => void;\n}\n\nconst useCartSizeStore = create<ICartSizeState>((set) => ({\n  // default values that can be overwritten in the cms\n  cartIdName: '__gbSite__at__cartSize',\n  cartSizeName: '__gbSite__at__cart',\n  domainName: '.nikon.co.uk',\n  cartSize: 0,\n\n  // set cookie names\n  setCartIdName: (cartIdName) => set({ cartIdName }),\n  setCartSizeName: (cartSizeName) => set({ cartSizeName }),\n  setDomainName: (domainName) => set({ domainName }),\n  setCartSize: (cartSize) => set({ cartSize }),\n}));\n\nexport default useCartSizeStore;\n","import create from 'zustand';\n\ninterface IComponentsHeightsState {\n  readonly siteNotificationsHeight: number;\n  readonly USPsStripHeight: number;\n  readonly setSiteNotificationsHeight: (height: number) => void;\n  readonly setUSPsStripHeight: (height: number) => void;\n}\n\nconst useComponentsHeightsStore = create<IComponentsHeightsState>((set) => ({\n  siteNotificationsHeight: 0,\n  USPsStripHeight: 0,\n  setSiteNotificationsHeight: (height: number) =>\n    set({ siteNotificationsHeight: height }),\n  setUSPsStripHeight: (height: number) => set({ USPsStripHeight: height }),\n}));\n\nexport default useComponentsHeightsStore;\n","import create from 'zustand';\n\ninterface ICookieStatusState {\n  readonly cookieStatus: boolean;\n  readonly setCookieStatus: (cookieStatus: boolean) => void;\n}\n\nconst useCookieStatusStore = create<ICookieStatusState>((set) => ({\n  cookieStatus: false,\n  setCookieStatus: (cookieStatus: boolean) => set({ cookieStatus }),\n}));\n\nexport default useCookieStatusStore;\n","import ErrorBannerNotificationEnum from '@models/enums/ErrorBannerNotificationEnum';\nimport create from 'zustand';\n\ninterface IErrorBannerNotificationState {\n  readonly errorBannerNotification: ErrorBannerNotificationEnum | null;\n  readonly setErrorBannerNotification: (\n    errorNotificationDisplay: ErrorBannerNotificationEnum | null\n  ) => void;\n}\n\nconst useErrorNotificationStore = create<IErrorBannerNotificationState>(\n  (set) => ({\n    errorBannerNotification: null,\n    setErrorBannerNotification: (\n      errorBannerNotification: ErrorBannerNotificationEnum | null\n    ) => set({ errorBannerNotification }),\n  })\n);\n\nexport default useErrorNotificationStore;\n","const bodyScrollLock = (isScrollLocked: boolean) => {\n  const documentElementScroll =\n    document.documentElement.style.getPropertyValue('--scroll-y');\n  const cacheLocator = documentElementScroll || `${window.scrollY}px`;\n\n  if (!documentElementScroll) {\n    window.addEventListener('scroll', () => {\n      document.documentElement.style.setProperty(\n        '--scroll-y',\n        `${window.scrollY}px`\n      );\n    });\n  }\n\n  if (isScrollLocked) {\n    const scrollY = cacheLocator;\n    const { body } = document;\n    body.style.position = 'fixed';\n    body.style.top = `-${scrollY}`;\n  } else {\n    const { body } = document;\n    body.style.position = '';\n    const scrollY = body.style.top || cacheLocator;\n    body.style.top = '';\n    window.scrollTo(0, Math.abs(parseInt(scrollY || '0', 10)));\n  }\n};\n\nexport default bodyScrollLock;\n","import useCookieStatusStore from '@state/CookieStatusStore';\nimport { useEffect } from 'react';\n\nconst useCookieConsent = () => {\n  const { setCookieStatus } = useCookieStatusStore((state) => ({\n    setCookieStatus: state.setCookieStatus,\n  }));\n\n  useEffect(() => {\n    const intervalId = setInterval(() => {\n      if (window.OnetrustActiveGroups) {\n        setCookieStatus(\n          window.OnetrustActiveGroups.split(',').slice(1).length > 2\n        );\n        clearInterval(intervalId);\n      }\n    }, 100);\n\n    return () => clearInterval(intervalId);\n  }, [setCookieStatus]);\n\n  useEffect(() => {\n    window.OptanonWrapper = () => {\n      if (\n        window.OneTrust &&\n        typeof window.OneTrust.OnConsentChanged === 'function'\n      ) {\n        window.OneTrust.OnConsentChanged((e) => {\n          setCookieStatus(e.detail.length > 1);\n        });\n      }\n    };\n  }, [setCookieStatus]);\n};\n\nexport default useCookieConsent;\n","import { useEffect, useState } from 'react';\n\nconst useIsInIFrame = (): boolean => {\n  const [isInIFrame, setIsInIFrame] = useState(false);\n\n  useEffect(() => {\n    setIsInIFrame(window.self !== window.top);\n  }, []);\n\n  return isInIFrame;\n};\n\nexport default useIsInIFrame;\n","import { useEffect, useState } from 'react';\n\nconst useIsTouchDevice = () => {\n  const [isTouchDevice, setIsTouchDevice] = useState<boolean>();\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","/*! js-cookie v3.0.5 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n    for (var key in source) {\n      target[key] = source[key];\n    }\n  }\n  return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n  read: function (value) {\n    if (value[0] === '\"') {\n      value = value.slice(1, -1);\n    }\n    return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n  },\n  write: function (value) {\n    return encodeURIComponent(value).replace(\n      /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n      decodeURIComponent\n    )\n  }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n  function set (name, value, attributes) {\n    if (typeof document === 'undefined') {\n      return\n    }\n\n    attributes = assign({}, defaultAttributes, attributes);\n\n    if (typeof attributes.expires === 'number') {\n      attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n    }\n    if (attributes.expires) {\n      attributes.expires = attributes.expires.toUTCString();\n    }\n\n    name = encodeURIComponent(name)\n      .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n      .replace(/[()]/g, escape);\n\n    var stringifiedAttributes = '';\n    for (var attributeName in attributes) {\n      if (!attributes[attributeName]) {\n        continue\n      }\n\n      stringifiedAttributes += '; ' + attributeName;\n\n      if (attributes[attributeName] === true) {\n        continue\n      }\n\n      // Considers RFC 6265 section 5.2:\n      // ...\n      // 3.  If the remaining unparsed-attributes contains a %x3B (\";\")\n      //     character:\n      // Consume the characters of the unparsed-attributes up to,\n      // not including, the first %x3B (\";\") character.\n      // ...\n      stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n    }\n\n    return (document.cookie =\n      name + '=' + converter.write(value, name) + stringifiedAttributes)\n  }\n\n  function get (name) {\n    if (typeof document === 'undefined' || (arguments.length && !name)) {\n      return\n    }\n\n    // To prevent the for loop in the first place assign an empty array\n    // in case there are no cookies at all.\n    var cookies = document.cookie ? document.cookie.split('; ') : [];\n    var jar = {};\n    for (var i = 0; i < cookies.length; i++) {\n      var parts = cookies[i].split('=');\n      var value = parts.slice(1).join('=');\n\n      try {\n        var found = decodeURIComponent(parts[0]);\n        jar[found] = converter.read(value, found);\n\n        if (name === found) {\n          break\n        }\n      } catch (e) {}\n    }\n\n    return name ? jar[name] : jar\n  }\n\n  return Object.create(\n    {\n      set,\n      get,\n      remove: function (name, attributes) {\n        set(\n          name,\n          '',\n          assign({}, attributes, {\n            expires: -1\n          })\n        );\n      },\n      withAttributes: function (attributes) {\n        return init(this.converter, assign({}, this.attributes, attributes))\n      },\n      withConverter: function (converter) {\n        return init(assign({}, this.converter, converter), this.attributes)\n      }\n    },\n    {\n      attributes: { value: Object.freeze(defaultAttributes) },\n      converter: { value: Object.freeze(converter) }\n    }\n  )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport { api as default };\n"],"names":["_ref","children","className","onCloseCallback","React","createElement","motion","div","animate","opacity","exit","initial","role","onClick","oldState","ariaLabel","color","size","IconSizeEnum","lg","dataTestId","closeModalAriaLabel","useAriaLabels","type","classNames","black","white","red","style","width","height","Wrapper","label","url","buttonProps","href","_extends","_ref2","active","icon","secondaryLabel","circleClasses","Icon","name","colorClassName","contentClasses","crossColor","crossMarginsClassName","crossClasses","isOpen","modalClasses","setIsOpen","showCloseButton","transparent","isCloseButtonFixed","closeButtonIconSize","md","shouldCloseOnClickOutsideContent","shouldLockBody","contentRef","useRef","useEffect","bodyScrollLock","close","useCallback","keyboardClose","ev","key","window","addEventListener","removeEventListener","handleClickOutsideContent","current","contains","target","Portal","mountId","FocusTrap","focusTrapOptions","preventScroll","escapeDeactivates","transition","duration","ease","ref","Fragment","CloseButton","containerElement","useMemo","document","getElementById","appendChild","removeChild","createPortal","containerRef","containerHeight","contentHeight","disabled","arguments","length","undefined","isMouseDown","setIsMouseDown","useState","mouseScrollPosition","top","y","container","clientWidth","cursor","scrollTop","mouseMoveHandler","e","dy","clientY","mouseUpHandler","mouseDownHandler","scrollYProgress","useScroll","isStart","setIsStart","isEnd","setIsEnd","scrollProgress","setScrollProgress","ScrollProgressEnum","Start","threshold","useMotionValueEvent","value","Middle","End","forwardRef","customScrollbarTheme","disableScroll","shadowColour","hideScrollbar","shadowHeight","containerRefCallback","useResizeObserver","contentRefCallback","useVerticalScrollShadows","useVerticalGrabScroll","useImperativeHandle","scrollTo","topOffset","behavior","AnimatePresence","span","node","tabIndex","arrowRadiusClassName","backgroundColor","customArrowClassName","customContentClassName","customWrapperClassName","hasArrow","hasTooltipClass","position","positionClasses","TooltipPositionEnum","Top","Bottom","BottomLeft","Custom","isBottomVariant","isTopVariant","tooltip","items","signOutCta","signOutEndpoint","map","item","index","IconPageLink","Button","link","secondary","dropdownVariants","enter","links","activeIndex","itemCallback","titleCallback","title","openFromDirection","modalTitle","animateUnderline","dataLayerCallback","isTouchDevice","useIsTouchDevice","isInIFrame","useIsInIFrame","underlineClasses","Modal","longName","shortName","lang","onKeyDown","shiftKey","onBlur","currentTarget","requestAnimationFrame","activeElement","rotate","VerticalDirectionEnum","Down","ul","Up","_ref3","li","variants","accountIcon","accountLabel","callback","loggedInSubtitle","loggedInTitle","loggedOutTitle","loginCta","loginEndpoint","navigationDropdown","userAuthenticated","linkCallback","updateDataLayer","event","content_type","main_category","sub_category","isLightMode","amountLabels","code","displayName","discountedPrice","giftItemNotification","isFreeItem","lineItemTag","quantityLabel","stockStatus","stockStatusLabel","selectedQuantity","thumbnail","onRemoveItemFromCart","layout","scale","rel","Image","image","imageClasses","ProductStockStatusEnum","OutOfStock","filter","amountLabel","text","dangerouslySetInnerHTML","__html","miniBasketEndpoint","miniBasketTitle","isLoading","setIsLoading","basketPayload","setBasketPayload","cartSizeName","setCartSize","useCartSizeStore","state","setErrorBannerNotification","useErrorNotificationStore","basketLink","checkoutLink","cartItems","emptyMiniBasketLabel","removeItemFromCartEndpoint","subtotal","subtotalLabel","trackingData","total","hasBasketItems","basketItemsCount","reduce","acc","isDiscounted","handleRemoveItemFromCart","async","isGift","basketResponsePayload","removeItemFromCart","basket","orderSummary","Number","Cookies","get","currentProduct","products","find","product","item_id","ecommerce","currency","currencyCode","quantity","totalValue","quantityChange","error","ErrorBannerNotificationEnum","CartRemoveItem","data","axios","MiniBasketDetails","getMiniBasketDetails","LoadingSpinner","pulseItemClasses","MiniBasketItem","results","suggestedSearchTitleLabel","displayedResults","result","pageTypeLabel","popularSearches","listingPage","searchSubTitle","searchPlaceholder","overlaySearchIcon","culture","endpoint","searchBlock","setValue","setResults","searchBarContainerRef","clientHeight","searchBarContainerHeight","searchSummaryResults","fetchSearchSummaryResults","useSearchSummaryResults","searchSummary","SearchBar","searchSummaryPageLink","onTypingDone","params","pageSize","query","language","SearchResults","fetchResults","minHeight","PopularSearches","some","SearchResultsList","SearchSummaryResults","searchValue","productsStatusLabels","statusLabels","hoveredIndex","setHoveredIndex","defaultListRef","defaultListWidth","onMouseEnter","onMouseLeave","x","sm","classes","isHovered","setIsHovered","sizes","mode","activeTab","mainCategory","subCategory","handleLevelThreeClick","tertiary_category","navigationCards","NavigationCard","LinksList","isOpenDesktop","setIsOpenDesktop","mainNavigation","desktopSubNavRef","activeSubNav","setActiveSubNav","secondLevelActiveIndex","setSecondLevelActiveIndex","activeMenu","setActiveMenu","handleBlurOnLastSubNavItem","relatedTarget","menu","subMenuItems","hidden","onHoverEnd","open","collapsed","linkTitle","linkUrl","linkTarget","isLastItem","onHoverStart","handleLevelTwoClick","SubNavTab","mobileMenuVariant","opened","delay","closed","props","AccountNavigation","languageSelector","languageActiveIndex","ShadowContainerVertical","activeSubNavContent","setActiveSubNavContent","activeNavItemIndex","setActiveNavItemIndex","setSubCategory","secondLevelTitle","MobileSecondLevelContent","AccountLink","accountsEnabled","accountLink","accountDropdownNavigation","isOpenSecondLevel","serviceAccountLink","setIsOpenSecondLevel","showAccountIcon","activeCtaTabIndex","setActiveCtaTabIndex","handleLevelOneClick","loggedInMenuTitle","loggedOutMenuTitle","conditions","userNotAuthenticated","accountsDisabledCondition","accountPageUrl","accountPageTarget","accountText","serviceAccountLinkTarget","MobileSecondLevel","button","AccountMenuMobile","linkIcon","LanguageSelectorMobile","backLabel","logo","closeMobileNavigationAriaLabel","backToFirstLevelNavigationAriaLabel","topLevelProps","MobileTopLevel","basketLabel","cartIdCookie","cartSizeCookie","cookieDomain","hasMiniBasket","homepageLink","nikonImagingText","searchIcon","searchLabel","showSearchIcon","skipContentLabel","setActiveIndex","isMobileActive","setIsMobileActive","isMiniBasketDisplayed","setIsMiniBasketDisplayed","isSearchOpen","setIsSearchOpen","isLanguageDropdownSelectorOpen","setIsLanguageDropdownSelectorOpen","isAccountDropdownOpen","setIsAccountDropdownOpen","setLanguageActiveIndex","isLanguageMobileModalOpen","setIsLanguageMobileModalOpen","mainSelector","setMainSelector","isMobileView","useMediaQuery","homePageUrl","homePageTarget","navRef","navHeight","siteNotificationsHeight","USPsStripHeight","useComponentsHeightsStore","useCookieConsent","cartSize","setCartIdName","setCartSizeName","setDomainName","cartIdName","domainName","mainNavigationAriaLabel","openMenuAriaLabel","overlayToCloseDesktopNavigationAriaLabel","findIndex","includes","querySelector","handleKeyDown","accountName","showLanguageSelector","showIcons","showNav","focus","lazyLoad","progressiveLoad","isHighlighted","onMouseOver","onFocus","DesktopSubNav","Dropdown","AccountDropdown","xl","Tooltip","MiniBasket","MobileSubNav","Search","Backdrop","addItemToCart","productData","JSON","stringify","headers","withCredentials","changeCartItemQuantity","changeVoucher","voucher","formData","FormData","append","refresh","create","set","setSiteNotificationsHeight","setUSPsStripHeight","cookieStatus","setCookieStatus","errorBannerNotification","isScrollLocked","documentElementScroll","documentElement","getPropertyValue","cacheLocator","scrollY","setProperty","body","Math","abs","parseInt","useCookieStatusStore","intervalId","setInterval","OnetrustActiveGroups","split","slice","clearInterval","OptanonWrapper","OneTrust","OnConsentChanged","detail","setIsInIFrame","self","setIsTouchDevice","handleIsTouchDevice","navigator","maxTouchPoints","assign","i","source","api","init","converter","defaultAttributes","attributes","expires","Date","now","toUTCString","encodeURIComponent","replace","decodeURIComponent","escape","stringifiedAttributes","attributeName","cookie","write","Object","cookies","jar","parts","join","found","read","remove","withAttributes","this","withConverter","freeze","path"],"sourceRoot":""}