{"version":3,"file":"3261-5b01604c89b2466b88c2.js","mappings":"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","sources":["webpack://nikon-client/./components/atoms/Button/Button.tsx","webpack://nikon-client/./components/atoms/Image/Image.tsx","webpack://nikon-client/./components/atoms/PriceDisplayText/PriceDisplayText.tsx","webpack://nikon-client/./components/molecules/ColourSwatch/ColourSwatch.tsx","webpack://nikon-client/./components/molecules/ProductListingCard/ProductListingCard.tsx","webpack://nikon-client/./components/molecules/Tags/Tags.tsx","webpack://nikon-client/./config/animations.config.ts","webpack://nikon-client/./models/enums/BreakpointEnum.ts","webpack://nikon-client/./models/enums/ProductStockStatusEnum.ts","webpack://nikon-client/./models/enums/SizeEnum.ts","webpack://nikon-client/./utility/helpers/gtm.ts","webpack://nikon-client/./utility/helpers/mapToNewTrackingData.ts","webpack://nikon-client/./utility/hooks/useBreakpoint.ts","webpack://nikon-client/./utility/hooks/useMediaQuery.ts","webpack://nikon-client/./assets/hue.svg"],"sourcesContent":["import { ILink } from '@models/ILink';\nimport classNames from 'classnames';\nimport {\n  ButtonHTMLAttributes,\n  DetailedHTMLProps,\n  PropsWithChildren,\n} from 'react';\n\ninterface Props {\n  readonly className?: string;\n  readonly dataTestId?: string;\n  readonly disabled?: boolean;\n  readonly editHint?: string;\n  readonly link?: ILink;\n  readonly linkCallback?: () => void;\n  readonly secondary?: boolean;\n  readonly secondaryBackgroundClassName?: string;\n  readonly isLightMode?: boolean;\n  readonly inverted?: boolean;\n}\n\ntype ButtonProps = Props &\n  DetailedHTMLProps<ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>;\n\nconst Button = ({\n  children,\n  className,\n  dataTestId,\n  disabled = false,\n  editHint,\n  link,\n  linkCallback,\n  secondary = false,\n  secondaryBackgroundClassName = 'bg-transparent',\n  isLightMode,\n  inverted = false,\n  ...buttonProps\n}: PropsWithChildren<ButtonProps>) => {\n  const buttonClasses = classNames(\n    {\n      'bg-yellow py-1 px-4 text-black-100 hover:bg-yellow-100 focus:bg-yellow-500 active:bg-yellow-500':\n        !disabled && !secondary && !inverted,\n      //\n      [`${secondaryBackgroundClassName} border border-yellow py-[3px] px-[15px] text-black-100 hover:border-yellow-100 hover:bg-yellow-100 hover:text-black-100 focus:border-yellow-500 focus:bg-yellow-500 active:border-yellow-500 active:bg-yellow-500 ${\n        isLightMode\n          ? ''\n          : 'dark:text-white dark:hover:text-black-100 dark:focus:text-black-100 dark:active:text-black-100'\n      }`]: !disabled && secondary && !inverted,\n      //\n      'bg-grey text-grey-500 py-1 px-4': disabled,\n      //\n      'bg-black text-white py-1 px-4 active:bg-grey-600 hover:bg-grey-600 focus:bg-grey-600':\n        !disabled && !secondary && inverted,\n    },\n    'cta rounded-full inline-block min-h-min select-none',\n    className\n  );\n\n  return link?.url && (link?.name || children) && !disabled ? (\n    <a\n      className={buttonClasses}\n      href={link.url}\n      target={link.target}\n      data-epi-property-name={editHint}\n      onClick={linkCallback}\n      data-testid={dataTestId}\n    >\n      {children || link.name}\n    </a>\n  ) : (\n    <button\n      {...buttonProps}\n      className={buttonClasses}\n      disabled={disabled}\n      data-epi-property-name={editHint}\n      data-testid={dataTestId}\n    >\n      {children}\n    </button>\n  );\n};\n\nexport default Button;\n","import BreakpointEnum from '@models/enums/BreakpointEnum';\nimport { IImage } from '@models/IImage';\nimport useBreakpoint from '@utils/hooks/useBreakpoint';\nimport classNames from 'classnames';\nimport { PropsWithChildren, RefObject, useState } from 'react';\n\ninterface Props {\n  readonly classes?: string;\n  readonly dataTestId?: string;\n  readonly epiEdit?: string;\n  readonly image?: IImage;\n  readonly imageClasses?: string;\n  readonly imageRef?:\n    | RefObject<HTMLImageElement>\n    | ((node: HTMLElement | null) => void);\n  readonly lazyLoad?: boolean;\n  readonly progressiveLoad?: boolean;\n  readonly sizes?: string;\n}\n\nconst Image = ({\n  children,\n  classes,\n  dataTestId,\n  epiEdit,\n  image,\n  imageClasses,\n  imageRef,\n  lazyLoad = true,\n  progressiveLoad = true,\n  sizes = '',\n}: PropsWithChildren<Props>) => {\n  const mobileSource = image?.mobile;\n  const tabletSource = image?.tablet;\n  const desktopSource = image?.desktop;\n  const largeDesktopSource = image?.largeDesktop;\n  const breakpoint = useBreakpoint() as BreakpointEnum;\n  const [isLoaded, setIsLoaded] = useState<boolean>(false);\n\n  if (!desktopSource?.url) return null;\n\n  const currentSrc = {\n    [BreakpointEnum.Small]: mobileSource,\n    [BreakpointEnum.Medium]: tabletSource,\n    [BreakpointEnum.Large]: desktopSource,\n    [BreakpointEnum.XLarge]: largeDesktopSource,\n  };\n\n  return (\n    <picture className={classNames(classes)}>\n      <source\n        type=\"image/webp\"\n        sizes={sizes}\n        srcSet={`${mobileSource?.url} 376w, ${tabletSource?.url} 768w, ${desktopSource?.url} 1024w, ${largeDesktopSource?.url} 1440w`}\n      />\n      <img\n        ref={imageRef}\n        alt={image?.altText?.length ? image?.altText : 'nikon-image'}\n        className={classNames(\n          imageClasses,\n          'transition duration-500 ease-in-out'\n        )}\n        data-epi-property-name={epiEdit}\n        draggable=\"false\"\n        loading={lazyLoad ? 'lazy' : 'eager'}\n        onLoad={() => setIsLoaded(true)}\n        sizes={sizes}\n        src={\n          isLoaded && progressiveLoad\n            ? currentSrc[breakpoint]?.url\n            : mobileSource?.url\n        }\n        height={currentSrc[breakpoint]?.height}\n        width={currentSrc[breakpoint]?.width}\n        srcSet={`${mobileSource?.originalUrl} 376w, ${tabletSource?.originalUrl} 768w, ${desktopSource?.originalUrl} 1024w, ${largeDesktopSource?.originalUrl} 1440w`}\n        {...(dataTestId && { 'data-testid': dataTestId })}\n      />\n      {isLoaded && children}\n    </picture>\n  );\n};\n\nexport default Image;\n","import { IPricingData } from '@models/IPricingData';\nimport classNames from 'classnames';\n\ninterface Props {\n  readonly centerText?: boolean;\n  readonly fromPriceLabel?: string;\n  readonly pricingData: IPricingData;\n  readonly vatLabel?: string;\n  readonly shippingLabel?: string;\n  readonly rrpLabel?: string;\n  readonly smallText?: boolean;\n  readonly containerClassName?: string;\n  readonly taxesTopMarginClassName?: string;\n  readonly taxesClassName?: string;\n  readonly priceClassName?: string;\n  readonly dataTestId?: string;\n  readonly isLightMode?: boolean;\n}\n\nconst PriceDisplayText = ({\n  fromPriceLabel,\n  pricingData,\n  vatLabel,\n  shippingLabel,\n  rrpLabel,\n  centerText = false,\n  smallText = false,\n  containerClassName,\n  taxesTopMarginClassName = 'mt-2',\n  taxesClassName,\n  priceClassName,\n  dataTestId,\n  isLightMode,\n}: Props) => {\n  const {\n    amountSaved,\n    formattedPrice,\n    formattedCalculatedPrice,\n    shippingCost,\n    price,\n  } = pricingData;\n\n  if (typeof price !== 'number') {\n    return null;\n  }\n\n  return (\n    <div\n      className={classNames(\n        containerClassName,\n        smallText ? 'body-two font-light' : 'body-one',\n        {\n          'flex flex-col items-center': centerText,\n        }\n      )}\n      data-testid={dataTestId}\n    >\n      {(centerText ||\n        (amountSaved > 0 && formattedPrice) ||\n        formattedCalculatedPrice) && (\n        <span className=\"flex flex-wrap gap-x-2\">\n          {fromPriceLabel && <span>{fromPriceLabel}</span>}\n\n          {amountSaved > 0 && formattedPrice && (\n            <>\n              {rrpLabel && <span className=\"mr-2\">{rrpLabel}</span>}\n              <span\n                className=\"font-extralight line-through decoration-1\"\n                data-testid=\"Price-Display-Text-Discount-Price\"\n              >\n                {formattedPrice}\n              </span>\n            </>\n          )}\n\n          {formattedCalculatedPrice && (\n            <span\n              className={classNames(\n                {\n                  'font-normal': !smallText,\n                  'text-grey-450': amountSaved > 0,\n                  'dark:text-yellow': amountSaved > 0 && !isLightMode,\n                },\n                priceClassName\n              )}\n              data-testid=\"Price-Display-Text-Price\"\n            >\n              {formattedCalculatedPrice}\n            </span>\n          )}\n        </span>\n      )}\n\n      {(vatLabel || (!shippingCost && shippingLabel)) && (\n        <p\n          className={classNames(taxesClassName, 'body-four block', {\n            [`${taxesTopMarginClassName}`]: !smallText,\n          })}\n          data-testid=\"Price-Display-Text-VAT/Shipping\"\n        >\n          {vatLabel && vatLabel}\n          {vatLabel && !shippingCost && shippingLabel && ' + '}\n          {!shippingCost && shippingLabel && shippingLabel}\n        </p>\n      )}\n    </div>\n  );\n};\n\nexport default PriceDisplayText;\n","import { IProductVariant } from '@models/IProductVariant';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport classNames from 'classnames';\nimport { motion } from 'framer-motion';\nimport { useState } from 'react';\n\ninterface Props {\n  currentSkuCode?: string;\n  displayTags?: boolean;\n  small?: boolean;\n  variations?: IProductVariant[];\n  dataTestId?: string;\n}\n\nconst ColourSwatch = ({\n  currentSkuCode,\n  displayTags = false,\n  small = false,\n  variations,\n  dataTestId = 'Colour-Swatch',\n}: Props) => {\n  const [activeIndex, setActiveIndex] = useState(-1);\n\n  return (\n    <div\n      className={classNames(\n        small ? 'gap-0' : 'gap-3 md:gap-2',\n        'flex flex-row'\n      )}\n      data-testid={dataTestId}\n    >\n      {variations\n        ?.filter((variation) => variation.colour)\n        .map(({ name, url, colour, skuCode }, index) => (\n          <a\n            onFocus={() => setActiveIndex(index)}\n            onBlur={() => setActiveIndex(-1)}\n            onMouseEnter={() => setActiveIndex(index)}\n            onMouseLeave={() => setActiveIndex(-1)}\n            onClick={() =>\n              updateDataLayer({\n                event: 'productModification',\n                content_type: 'color',\n                selection: name,\n              })\n            }\n            href={url}\n            key={`colour-variation-${colour}`}\n            className={classNames(\n              'relative flex items-center justify-center rounded-full transition-colors duration-300 ease-in-out hover:border-gray-400',\n              {\n                'border border-black-100 dark:border-white':\n                  skuCode === currentSkuCode || activeIndex === index,\n              },\n              small\n                ? 'h-[18px] w-[18px]'\n                : 'h-[27px] w-[27px] md:h-[18px] md:w-[18px]'\n            )}\n            aria-label={name}\n            data-testid={`${dataTestId}-Colour-${index}`}\n          >\n            <span\n              style={{ backgroundColor: colour }}\n              className={classNames(\n                small\n                  ? 'h-[12px] w-[12px]'\n                  : 'h-[19px] w-[19px] border border-grey-250 md:h-[12px] md:w-[12px]',\n                'rounded-full'\n              )}\n            />\n            {name && displayTags && activeIndex === index && (\n              <motion.span\n                initial={{ opacity: 0 }}\n                animate={{ opacity: 1 }}\n                exit={{ opacity: 0 }}\n                transition={{ duration: 0.1 }}\n                className=\"small-text absolute -top-10 left-1/2 -translate-x-1/2 whitespace-nowrap rounded-full bg-white px-2 text-black-100\"\n                data-testid={`${dataTestId}-Name-${index}`}\n              >\n                {name}\n              </motion.span>\n            )}\n          </a>\n        ))}\n    </div>\n  );\n};\n\nexport default ColourSwatch;\n","import Hue from '@assets/hue.svg';\nimport Button from '@atoms/Button/Button';\nimport Image from '@atoms/Image/Image';\nimport LoadMoreButton from '@atoms/LoadMoreButton/LoadMoreButton';\nimport PriceDisplayText from '@atoms/PriceDisplayText/PriceDisplayText';\nimport { easeInOut } from '@config/animations.config';\nimport { IImage } from '@models/IImage';\nimport { ILink } from '@models/ILink';\nimport { IPricingData } from '@models/IPricingData';\nimport { IProductColour } from '@models/IProductColour';\nimport { IProductListingStatusLabels } from '@models/IProductListingStatusLabels';\nimport { IProductTrackingData } from '@models/IProductTrackingData';\nimport { IProductVariant } from '@models/IProductVariant';\nimport ColourSwatch from '@molecules/ColourSwatch/ColourSwatch';\nimport Tags from '@molecules/Tags/Tags';\nimport updateDataLayer from '@utils/helpers/gtm';\nimport mapToNewTrackingData from '@utils/helpers/mapToNewTrackingData';\nimport useMediaQuery from '@utils/hooks/useMediaQuery';\nimport classNames from 'classnames';\nimport { motion } from 'framer-motion';\nimport { useEffect, useRef, useState } from 'react';\n\ninterface Props {\n  readonly active?: boolean;\n  readonly buyNowLink: ILink;\n  readonly colours?: IProductColour[];\n  readonly dataTestId?: string;\n  readonly fromPriceLabel?: string;\n  readonly hidePriceFromSavePill: boolean;\n  readonly isLightMode?: boolean;\n  readonly kitAvailableLabel?: string;\n  readonly kitsAvailableLabel?: string;\n  readonly learnMoreLink: ILink;\n  readonly productListingName?: string;\n  readonly newProductLabel?: string;\n  readonly pricingData: IPricingData;\n  readonly savePriceLabel: string;\n  readonly shippingLabel: string;\n  readonly statusLabels: IProductListingStatusLabels;\n  readonly thumbnail: IImage;\n  readonly title: string;\n  readonly trackingData?: IProductTrackingData;\n  readonly onKitDropdownButtonClick?: () => void;\n  readonly variations?: IProductVariant[];\n  readonly vatLabel: string;\n}\n\nconst ProductListingCard = ({\n  buyNowLink,\n  colours,\n  fromPriceLabel,\n  hidePriceFromSavePill,\n  kitAvailableLabel,\n  kitsAvailableLabel,\n  learnMoreLink,\n  productListingName,\n  newProductLabel,\n  pricingData,\n  savePriceLabel,\n  shippingLabel,\n  statusLabels,\n  thumbnail,\n  title,\n  trackingData,\n  variations,\n  vatLabel,\n  active,\n  onKitDropdownButtonClick,\n  isLightMode,\n  dataTestId = 'Product-Listing-Card',\n}: Props) => {\n  const [isHovered, setHover] = useState(false);\n  const isXLarge = useMediaQuery(1440);\n  const [ctaBoxHeight, setCtaBoxHeight] = useState(0);\n  const ctaBox = useRef<HTMLDivElement>(null);\n  const trackingDataJson = JSON.stringify(trackingData ?? '');\n\n  const handleIntentToBuyEvent = (contentType: string) => {\n    if (!trackingData) return;\n\n    updateDataLayer({\n      event: 'intentToBuy',\n      content_type: contentType,\n      items: [mapToNewTrackingData(trackingData, productListingName)],\n    });\n  };\n\n  const handleSelectItemEvent = () => {\n    if (!trackingData) return;\n\n    updateDataLayer({\n      event: 'selectItem',\n      ecommerce: {\n        currency: trackingData.currency,\n        items: [mapToNewTrackingData(trackingData, productListingName)],\n      },\n    });\n  };\n\n  useEffect(() => {\n    if (ctaBox.current) setCtaBoxHeight(ctaBox.current.clientHeight);\n  }, []);\n\n  const contVariants = {\n    hover: { y: -ctaBoxHeight },\n    initial: { y: 0 },\n  };\n\n  const titleVariants = {\n    hover: { y: -49 },\n    initial: { y: 0 },\n  };\n\n  const ctaVariants = {\n    hover: { opacity: 1 },\n    initial: { opacity: isXLarge ? 1 : 0 },\n  };\n\n  const hueVariants = {\n    hover: { opacity: 0.2 },\n    initial: { opacity: 0 },\n  };\n\n  const imgVariants = {\n    hover: { y: -15, scale: 0.9 },\n    inActive: { y: 0, scale: 1 },\n  };\n\n  const kitsVariationNumber =\n    variations?.filter((variation) => variation.type === 'kit').length ?? 0;\n  const kitButtonLabel =\n    kitsVariationNumber > 1\n      ? `${kitsVariationNumber} ${kitsAvailableLabel}`\n      : `${kitsVariationNumber} ${kitAvailableLabel}`;\n\n  return (\n    <div\n      // eslint-disable-next-line react/no-unknown-property\n      track-product-impression=\"true\"\n      data-product={trackingDataJson}\n      className={`relative h-full w-full ${\n        isLightMode ? 'text-black-100' : 'text-white'\n      }`}\n      data-testid={dataTestId}\n    >\n      <div\n        className={classNames(\n          'absolute left-0 top-full h-4 w-full',\n          active ? 'flex' : 'hidden',\n          isLightMode ? 'bg-grey-100' : 'bg-grey-600'\n        )}\n      />\n\n      <div\n        onFocus={() => setHover(true)}\n        onBlur={() => setHover(false)}\n        onMouseEnter={() => setHover(true)}\n        onMouseLeave={() => setHover(false)}\n        className={classNames(\n          'pointer-events-auto flex h-full w-full gap-5 overflow-hidden p-5',\n          active ? 'rounded-t-[10px]' : 'rounded-[10px]',\n          isLightMode ? 'bg-grey-100' : 'bg-grey-600'\n        )}\n      >\n        <div className=\"relative flex h-full w-full flex-col items-center justify-center\">\n          <div className=\"absolute left-0 top-0 z-20 flex w-full flex-row flex-wrap gap-4\">\n            <Tags\n              hidePriceFromSavePill={hidePriceFromSavePill}\n              pricingData={pricingData}\n              savePriceLabel={savePriceLabel}\n              newProductLabel={newProductLabel}\n              statusLabels={statusLabels}\n              dataTestId={`${dataTestId}-Tag`}\n            />\n          </div>\n\n          <motion.div\n            initial=\"initial\"\n            className=\"relative mt-10 flex h-[214px] w-full shrink-0 items-center justify-center lg:h-[222px] 2xl:h-[302px]\"\n            animate={(active || isHovered) && !isXLarge ? 'hover' : 'initial'}\n            variants={imgVariants}\n            transition={easeInOut}\n          >\n            {thumbnail && (\n              <a\n                href={learnMoreLink?.url || buyNowLink?.url}\n                onClick={() => {\n                  if (learnMoreLink?.url)\n                    handleIntentToBuyEvent('product picture');\n                  else if (buyNowLink?.url) handleSelectItemEvent();\n                }}\n                aria-label={title}\n                className=\"flex h-full w-full\"\n              >\n                <Image\n                  image={thumbnail}\n                  classes=\"z-10 w-full h-full\"\n                  imageClasses=\"w-full h-full object-contain\"\n                  sizes=\"(max-width: 1024px) 376px, 500px\"\n                  dataTestId={`${dataTestId}-Image`}\n                />\n\n                <motion.div\n                  initial=\"initial\"\n                  animate={\n                    (active || isHovered) && !isXLarge ? 'hover' : 'initial'\n                  }\n                  variants={hueVariants}\n                  className=\"pointer-events-none absolute left-0 top-10 z-0 flex h-full scale-150 items-center justify-center\"\n                >\n                  <img\n                    src={`${Hue}`}\n                    alt=\"hue\"\n                    className=\"w-full object-contain\"\n                  />\n                </motion.div>\n              </a>\n            )}\n          </motion.div>\n\n          <motion.div\n            initial=\"initial\"\n            animate={(active || isHovered) && !isXLarge ? 'hover' : 'initial'}\n            variants={titleVariants}\n            transition={easeInOut}\n            className=\"relative mb-[100px] mt-20 flex w-full flex-col items-center justify-center px-10\"\n          >\n            <div className=\"absolute -top-10 left-1/2 flex -translate-x-1/2\">\n              <ColourSwatch small displayTags variations={colours} />\n            </div>\n\n            {title && (\n              <p className=\"h5 text-center\" data-testid={`${dataTestId}-Title`}>\n                {title}\n              </p>\n            )}\n          </motion.div>\n\n          <div className=\"relative w-full px-[10px] pb-[10px]\">\n            <motion.div\n              initial=\"initial\"\n              animate={(active || isHovered) && !isXLarge ? 'hover' : 'initial'}\n              variants={contVariants}\n              transition={easeInOut}\n              className=\"relative flex w-full flex-col items-start justify-between gap-3 xl:flex-row xl:items-end\"\n            >\n              <div className=\"flex flex-col gap-3 md:m-0\">\n                {pricingData?.formattedCalculatedPrice && (\n                  <div className=\"flex flex-col\">\n                    <PriceDisplayText\n                      pricingData={pricingData}\n                      fromPriceLabel={fromPriceLabel}\n                      vatLabel={vatLabel}\n                      shippingLabel={shippingLabel}\n                      isLightMode={isLightMode}\n                      dataTestId={`${dataTestId}-Price`}\n                    />\n                  </div>\n                )}\n\n                {kitsVariationNumber > 0 && (\n                  <div>\n                    <LoadMoreButton\n                      open={active}\n                      _type={isLightMode ? 'BASIC' : 'YELLOW-HIGHLIGHT'}\n                      loadMoreLabel={kitButtonLabel}\n                      loadLessLabel={kitButtonLabel}\n                      onClick={onKitDropdownButtonClick}\n                      isLightMode={isLightMode}\n                    />\n                  </div>\n                )}\n              </div>\n\n              <motion.div\n                initial=\"initial\"\n                animate={\n                  (active || isHovered) && !isXLarge ? 'hover' : 'initial'\n                }\n                variants={ctaVariants}\n                transition={{\n                  duration: 0.3,\n                }}\n                ref={ctaBox}\n                className=\"flex w-full flex-row flex-wrap items-start justify-start gap-5 pt-5 xl:absolute xl:top-full xl:gap-[10px]\"\n              >\n                {learnMoreLink?.url && learnMoreLink?.name && (\n                  <Button\n                    link={learnMoreLink}\n                    secondary\n                    linkCallback={() =>\n                      handleIntentToBuyEvent(learnMoreLink.name || 'Learn more')\n                    }\n                    isLightMode={isLightMode}\n                    dataTestId={`${dataTestId}-Learn-More`}\n                  />\n                )}\n\n                {buyNowLink?.url && buyNowLink?.name && (\n                  <a\n                    href={buyNowLink.url}\n                    onClick={handleSelectItemEvent}\n                    // eslint-disable-next-line react/no-unknown-property\n                    track-product-click=\"true\"\n                    data-product={trackingDataJson}\n                    className=\"cta primary\"\n                    data-testid={`${dataTestId}-Buy-Now`}\n                  >\n                    {buyNowLink.name}\n                  </a>\n                )}\n              </motion.div>\n            </motion.div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default ProductListingCard;\n","import Tag from '@atoms/Tag/Tag';\nimport ProductStockStatusEnum from '@models/enums/ProductStockStatusEnum';\nimport TagTypesEnum from '@models/enums/TagTypesEnum';\nimport { ITags } from '@models/ITags';\n\nconst Tags = ({\n  hidePriceFromSavePill,\n  pricingData,\n  newProductLabel,\n  savePriceLabel,\n  statusLabels,\n  dataTestId,\n}: ITags) => (\n  <>\n    {newProductLabel && (\n      <Tag\n        tagType={TagTypesEnum.Secondary}\n        text={newProductLabel}\n        pointerStates={false}\n        dataTestId={dataTestId}\n      />\n    )}\n\n    {pricingData?.status === ProductStockStatusEnum.OutOfStock &&\n      statusLabels?.outOfStockLabel && (\n        <Tag\n          tagType={TagTypesEnum.Secondary}\n          pointerStates={false}\n          text={statusLabels.outOfStockLabel}\n          dataTestId={dataTestId}\n        />\n      )}\n\n    {pricingData?.status === ProductStockStatusEnum.SoldOut &&\n      statusLabels?.soldOutLabel && (\n        <Tag\n          tagType={TagTypesEnum.Secondary}\n          pointerStates={false}\n          text={statusLabels.soldOutLabel}\n          dataTestId={dataTestId}\n        />\n      )}\n\n    {pricingData?.status === ProductStockStatusEnum.PreOrder &&\n      statusLabels?.preOrderLabel && (\n        <Tag\n          tagType={TagTypesEnum.Secondary}\n          pointerStates={false}\n          text={statusLabels.preOrderLabel}\n          dataTestId={dataTestId}\n        />\n      )}\n\n    {pricingData?.isCommerceEnabled &&\n      pricingData.status === ProductStockStatusEnum.BackOrder &&\n      statusLabels?.backOrderLabel && (\n        <Tag\n          tagType={TagTypesEnum.Secondary}\n          pointerStates={false}\n          text={statusLabels.backOrderLabel}\n          dataTestId={dataTestId}\n        />\n      )}\n\n    {!!(\n      pricingData?.formattedAmountSaved &&\n      pricingData.amountSaved > 0 &&\n      savePriceLabel\n    ) && (\n      <Tag\n        tagType={TagTypesEnum.Four}\n        pointerStates={false}\n        text={`${savePriceLabel} ${\n          hidePriceFromSavePill ? '' : pricingData.formattedAmountSaved\n        }`}\n        dataTestId={dataTestId}\n      />\n    )}\n  </>\n);\n\nexport default Tags;\n","export const fadeUp = {\n  hidden: {\n    y: 30,\n    opacity: 0,\n    transition: {\n      ease: [0.42, 0.46, 0.45, 0.99],\n      duration: 0.5,\n    },\n  },\n  visible: {\n    y: 0,\n    opacity: 1,\n    transition: {\n      ease: [0.42, 0.46, 0.45, 0.99],\n      duration: 0.5,\n    },\n  },\n};\n\nexport const easeInOut = {\n  transition: { type: 'easeinout', duration: 0.25 },\n};\n","const enum BreakpointEnum {\n  Small = 'sm',\n  Medium = 'md',\n  Large = 'lg',\n  XLarge = 'xl',\n}\n\nexport default BreakpointEnum;\n","// We get these values from the external stores, so they can't be changed unless they change also on the stores\n\nconst enum ProductStockStatusEnum {\n  InStock = 'IN_STOCK',\n  OutOfStock = 'OUT_OF_STOCK',\n  ComingSoon = 'COMING_SOON',\n  PreOrder = 'PRE_ORDER',\n  BackOrder = 'BACKORDER',\n  SoldOut = 'SOLD_OUT',\n  DoNotShow = 'DO_NOT_SHOW',\n  BtoBOnly = 'B2B_ONLY',\n}\n\nexport default ProductStockStatusEnum;\n","enum SizeEnum {\n  Small = 'SMALL',\n  Medium = 'MEDIUM',\n  Large = 'LARGE',\n  XLarge = 'XLARGE',\n}\n\nexport default SizeEnum;\n","const updateDataLayer = (eventPayload: Record<string, unknown>) => {\n  if (typeof window !== 'undefined') {\n    window.dataLayer = window.dataLayer || [];\n    window.dataLayer.push(eventPayload);\n  }\n};\n\nexport default updateDataLayer;\n","import {\n  INewProductTrackingData,\n  IProductTrackingData,\n} from '@models/IProductTrackingData';\n\nconst mapToNewTrackingData = (\n  trackingData: IProductTrackingData,\n  listingName?: string\n): INewProductTrackingData => {\n  const { name, id, price, discount, brand, category, variant, position } =\n    trackingData;\n\n  return {\n    item_name: name,\n    item_id: id,\n    price,\n    discount,\n    item_brand: brand,\n    item_category: category,\n    item_variant: variant,\n    index: position,\n    ...(listingName && { item_list_name: listingName }),\n  };\n};\n\nexport default mapToNewTrackingData;\n","import BreakpointEnum from '@models/enums/BreakpointEnum';\nimport { useCallback, useEffect, useState } from 'react';\n\nconst getCurrentBreakpoint = () => {\n  const breakpoints = { tablet: 768, desktop: 1024, lgDesktop: 1440 };\n  const width = window.innerWidth;\n\n  if (width < breakpoints.tablet) {\n    return BreakpointEnum.Small;\n  }\n  if (width >= breakpoints.tablet && width < breakpoints.desktop) {\n    return BreakpointEnum.Medium;\n  }\n  if (width >= breakpoints.desktop && width < breakpoints.lgDesktop) {\n    return BreakpointEnum.Large;\n  }\n  return BreakpointEnum.XLarge;\n};\n\nconst useBreakpoint = () => {\n  const [screen, setScreen] = useState<BreakpointEnum>();\n\n  const resizeHandler = useCallback(\n    () => setScreen(getCurrentBreakpoint()),\n    []\n  );\n\n  useEffect(() => {\n    window.addEventListener('resize', resizeHandler);\n    setScreen(getCurrentBreakpoint());\n\n    return () => {\n      window.removeEventListener('resize', resizeHandler);\n    };\n  }, [resizeHandler]);\n\n  return screen;\n};\n\nexport default useBreakpoint;\n","import { useCallback, useEffect, useState } from 'react';\n\nconst useMediaQuery = (minWidth: number) => {\n  // Set the default value to undefined in order to properly distinguish the falsey values\n  // where undefined is the value before computing whether the screen size is smaller than the minWidth\n  // i.e. a state where we don't really know whether we're below the threshold or not\n  // and false is the value where the computation returns false\n  const [isSmallerThan, setIsSmallerThan] = useState<boolean>();\n\n  const handler = useCallback(() => {\n    const isDesiredWidth = window.innerWidth < minWidth;\n    setIsSmallerThan(isDesiredWidth);\n  }, [minWidth]);\n\n  useEffect(() => {\n    window.addEventListener('resize', handler);\n    handler();\n\n    return () => {\n      window.removeEventListener('resize', handler);\n    };\n  }, [handler]);\n\n  return isSmallerThan;\n};\n\nexport default useMediaQuery;\n","module.exports = \"data:image/svg+xml,%3csvg width='906' height='906' viewBox='0 0 906 906' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cg opacity='0.5' filter='url(%23filter0_df_5839_100698)'%3e %3ccircle cx='453' cy='453' r='263' fill='%23FFDD00'/%3e %3c/g%3e %3cdefs%3e %3cfilter id='filter0_df_5839_100698' x='0' y='0' width='906' height='906' filterUnits='userSpaceOnUse' color-interpolation-filters='sRGB'%3e %3cfeFlood flood-opacity='0' result='BackgroundImageFix'/%3e %3cfeColorMatrix in='SourceAlpha' type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0' result='hardAlpha'/%3e %3cfeOffset dy='1.66516'/%3e %3cfeGaussianBlur stdDeviation='0.832579'/%3e %3cfeComposite in2='hardAlpha' operator='out'/%3e %3cfeColorMatrix type='matrix' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0'/%3e %3cfeBlend mode='normal' in2='BackgroundImageFix' result='effect1_dropShadow_5839_100698'/%3e %3cfeBlend mode='normal' in='SourceGraphic' in2='effect1_dropShadow_5839_100698' result='shape'/%3e %3cfeGaussianBlur stdDeviation='95' result='effect2_foregroundBlur_5839_100698'/%3e %3c/filter%3e %3c/defs%3e %3c/svg%3e\""],"names":["_ref","children","className","dataTestId","disabled","editHint","link","linkCallback","secondary","secondaryBackgroundClassName","isLightMode","inverted","buttonProps","buttonClasses","classNames","url","name","React","createElement","href","target","onClick","_extends","classes","epiEdit","image","imageClasses","imageRef","lazyLoad","progressiveLoad","sizes","mobileSource","mobile","tabletSource","tablet","desktopSource","desktop","largeDesktopSource","largeDesktop","breakpoint","useBreakpoint","isLoaded","setIsLoaded","useState","currentSrc","BreakpointEnum","Small","Medium","Large","XLarge","type","srcSet","ref","alt","altText","length","draggable","loading","onLoad","src","height","width","originalUrl","fromPriceLabel","pricingData","vatLabel","shippingLabel","rrpLabel","centerText","smallText","containerClassName","taxesTopMarginClassName","taxesClassName","priceClassName","amountSaved","formattedPrice","formattedCalculatedPrice","shippingCost","price","Fragment","currentSkuCode","displayTags","small","variations","activeIndex","setActiveIndex","filter","variation","colour","map","_ref2","index","skuCode","onFocus","onBlur","onMouseEnter","onMouseLeave","updateDataLayer","event","content_type","selection","key","style","backgroundColor","motion","span","initial","opacity","animate","exit","transition","duration","buyNowLink","colours","hidePriceFromSavePill","kitAvailableLabel","kitsAvailableLabel","learnMoreLink","productListingName","newProductLabel","savePriceLabel","statusLabels","thumbnail","title","trackingData","active","onKitDropdownButtonClick","isHovered","setHover","isXLarge","useMediaQuery","ctaBoxHeight","setCtaBoxHeight","ctaBox","useRef","trackingDataJson","JSON","stringify","handleIntentToBuyEvent","contentType","items","mapToNewTrackingData","handleSelectItemEvent","ecommerce","currency","useEffect","current","clientHeight","contVariants","hover","y","ctaVariants","kitsVariationNumber","kitButtonLabel","Tags","div","variants","scale","inActive","easeInOut","Image","Hue","ColourSwatch","PriceDisplayText","LoadMoreButton","open","_type","loadMoreLabel","loadLessLabel","Button","Tag","tagType","TagTypesEnum","Secondary","text","pointerStates","status","ProductStockStatusEnum","OutOfStock","outOfStockLabel","SoldOut","soldOutLabel","PreOrder","preOrderLabel","isCommerceEnabled","BackOrder","backOrderLabel","formattedAmountSaved","Four","fadeUp","hidden","ease","visible","SizeEnum","eventPayload","window","dataLayer","push","listingName","id","discount","brand","category","variant","position","item_name","item_id","item_brand","item_category","item_variant","item_list_name","getCurrentBreakpoint","breakpoints","innerWidth","screen","setScreen","resizeHandler","useCallback","addEventListener","removeEventListener","minWidth","isSmallerThan","setIsSmallerThan","handler","isDesiredWidth","module","exports"],"sourceRoot":""}