{"version":3,"file":"ColourCardCarousel-Chunk-221e2aa46a1b0778ed03.js","mappings":"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","sources":["webpack://react-app/./components/molecules/ColourSwatchCard/ColourSwatchCard.tsx","webpack://react-app/./node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.mjs","webpack://react-app/./node_modules/.pnpm/motion@12.5.0_react-dom@19.0.0_react@19.0.0/node_modules/motion/dist/es/framer-motion/dist/es/render/dom/viewport/index.mjs","webpack://react-app/./node_modules/.pnpm/motion@12.5.0_react-dom@19.0.0_react@19.0.0/node_modules/motion/dist/es/framer-motion/dist/es/utils/use-in-view.mjs","webpack://react-app/./node_modules/.pnpm/react-swipeable@7.0.2_react@19.0.0/node_modules/react-swipeable/es/index.js","webpack://react-app/./node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","webpack://react-app/./components/Shared/src/components/atoms/Carousel/Carousel.tsx","webpack://react-app/./components/Shared/src/components/molecules/NavigationCarousel/NavigationCarousel.tsx","webpack://react-app/./components/Shared/src/utility/helpers/createColourPng.ts","webpack://react-app/./models/enums/ColourSwatchVariantEnum.ts","webpack://react-app/./components/Shared/src/components/atoms/AnimateInView/AnimateInView.tsx","webpack://react-app/./components/organisms/ColourCardCarousel/ColourCardCarousel.tsx","webpack://react-app/./components/Shared/src/utility/hooks/useIsTouchDevice.ts"],"sourcesContent":["import Image from '@atoms/Image/Image';\nimport Text from '@atoms/Text/Text';\nimport { IColourSwatchCard } from '@models/IColourSwatchCard';\nimport CardTypeEnum from '@models/enums/CardTypeEnum';\nimport ColourSwatchVariantEnum from '@models/enums/ColourSwatchVariantEnum';\nimport AddToWishlist from '@molecules/AddToWishlist/AddToWishlist';\nimport ProductImageGallery from '@molecules/ProductImageGallery/ProductImageGallery';\nimport { createColourPng } from '@utility/helpers/createColourPng';\nimport useIsTouchDevice from '@utility/hooks/useIsTouchDevice';\nimport classNames from 'classnames';\nimport { motion, useInView } from 'motion/react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nexport const enum ColourSwatchCardBG {\n Grey = 'tw-bg-grey-10',\n White = 'tw-bg-white',\n}\n\ninterface Props extends IColourSwatchCard {\n readonly createColourImage?: boolean;\n readonly showLikeButton?: boolean;\n readonly wishlistId?: number;\n}\n\nconst ColourSwatchCard = (props: Props) => {\n const {\n bgColour = ColourSwatchCardBG.Grey,\n colourCode,\n colourHexCode,\n colourName,\n description,\n images,\n link,\n mainImage,\n showLikeButton = true,\n tag,\n variant = ColourSwatchVariantEnum.Default,\n wishlistDrawerLabels,\n wishlistId,\n createColourImage = true,\n } = props;\n\n const [imageDataUrl, setImageDataUrl] = useState();\n const [isHovered, setIsHovered] = useState(false);\n const colourRef = useRef(null);\n const isTouchDevice = useIsTouchDevice();\n const isDefaultVariant = variant === ColourSwatchVariantEnum.Default;\n const isDetailedVariant = variant === ColourSwatchVariantEnum.Detailed;\n const isSimpleVariant = variant === ColourSwatchVariantEnum.Simple;\n const containerRef = useRef(null);\n const inView = useInView(containerRef, { amount: 0, once: true });\n\n const fetchImageDataUrl = useCallback(async () => {\n if (isTouchDevice || !colourHexCode) return;\n try {\n const dataUrl = await createColourPng(colourRef, colourHexCode);\n setImageDataUrl(dataUrl);\n } catch (error) {\n console.error(error);\n }\n }, [colourHexCode, isTouchDevice]);\n\n useEffect(() => {\n if (inView && createColourImage) fetchImageDataUrl();\n }, [fetchImageDataUrl, inView, createColourImage]);\n\n const handleTrackingEvent = useCallback(() => {\n window.dataLayer.push({\n event: 'trackingEvent_select_item',\n event_name_variable: 'select_item',\n trackingEvent_select_item: {\n item_name: colourName,\n item_category: 'colour',\n item_category3: colourHexCode,\n },\n });\n }, [colourName, colourHexCode]);\n\n const backgroundColorStyle = useMemo(() => {\n return colourHexCode\n ? { backgroundColor: `#${colourHexCode}` }\n : { backgroundImage: `url(${mainImage?.url})` };\n }, [colourHexCode, images]);\n\n return (\n setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n onFocus={() => setIsHovered(true)}\n onBlur={() => setIsHovered(false)}\n ref={containerRef}\n >\n {showLikeButton && (\n \n )}\n \n
\n {!isTouchDevice && (\n \n {imageDataUrl && (\n \n )}\n \n )}\n \n {!isTouchDevice && images.length === 1 && images[0] ? (\n \n ) : (\n \n )}\n \n\n {tag && !isSimpleVariant && (\n \n
\n \n {tag}\n \n
\n
\n )}\n \n \n \n {colourCode}\n \n\n {!isSimpleVariant && (\n \n {colourName?.toLowerCase()}\n \n )}\n\n {isDetailedVariant && description && (\n \n )}\n \n \n \n );\n};\n\nexport default ColourSwatchCard;\n","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","import '../../../../../../motion-utils/dist/es/errors.mjs';\nimport { resolveElements } from '../../../../../../motion-dom/dist/es/utils/resolve-elements.mjs';\n\nconst thresholds = {\n some: 0,\n all: 1,\n};\nfunction inView(elementOrSelector, onStart, { root, margin: rootMargin, amount = \"some\" } = {}) {\n const elements = resolveElements(elementOrSelector);\n const activeIntersections = new WeakMap();\n const onIntersectionChange = (entries) => {\n entries.forEach((entry) => {\n const onEnd = activeIntersections.get(entry.target);\n /**\n * If there's no change to the intersection, we don't need to\n * do anything here.\n */\n if (entry.isIntersecting === Boolean(onEnd))\n return;\n if (entry.isIntersecting) {\n const newOnEnd = onStart(entry.target, entry);\n if (typeof newOnEnd === \"function\") {\n activeIntersections.set(entry.target, newOnEnd);\n }\n else {\n observer.unobserve(entry.target);\n }\n }\n else if (typeof onEnd === \"function\") {\n onEnd(entry);\n activeIntersections.delete(entry.target);\n }\n });\n };\n const observer = new IntersectionObserver(onIntersectionChange, {\n root,\n rootMargin,\n threshold: typeof amount === \"number\" ? amount : thresholds[amount],\n });\n elements.forEach((element) => observer.observe(element));\n return () => observer.disconnect();\n}\n\nexport { inView };\n","import { useState, useEffect } from 'react';\nimport { inView } from '../render/dom/viewport/index.mjs';\n\nfunction useInView(ref, { root, margin, amount, once = false, initial = false, } = {}) {\n const [isInView, setInView] = useState(initial);\n useEffect(() => {\n if (!ref.current || (once && isInView))\n return;\n const onEnter = () => {\n setInView(true);\n return once ? undefined : () => setInView(false);\n };\n const options = {\n root: (root && root.current) || undefined,\n margin,\n amount,\n };\n return inView(ref.current, onEnter, options);\n }, [root, ref, margin, once, amount]);\n return isInView;\n}\n\nexport { useInView };\n","import * as React from 'react';\n\nconst LEFT = \"Left\";\nconst RIGHT = \"Right\";\nconst UP = \"Up\";\nconst DOWN = \"Down\";\n\n/* global document */\nconst defaultProps = {\n delta: 10,\n preventScrollOnSwipe: false,\n rotationAngle: 0,\n trackMouse: false,\n trackTouch: true,\n swipeDuration: Infinity,\n touchEventOptions: { passive: true },\n};\nconst initialState = {\n first: true,\n initial: [0, 0],\n start: 0,\n swiping: false,\n xy: [0, 0],\n};\nconst mouseMove = \"mousemove\";\nconst mouseUp = \"mouseup\";\nconst touchEnd = \"touchend\";\nconst touchMove = \"touchmove\";\nconst touchStart = \"touchstart\";\nfunction getDirection(absX, absY, deltaX, deltaY) {\n if (absX > absY) {\n if (deltaX > 0) {\n return RIGHT;\n }\n return LEFT;\n }\n else if (deltaY > 0) {\n return DOWN;\n }\n return UP;\n}\nfunction rotateXYByAngle(pos, angle) {\n if (angle === 0)\n return pos;\n const angleInRadians = (Math.PI / 180) * angle;\n const x = pos[0] * Math.cos(angleInRadians) + pos[1] * Math.sin(angleInRadians);\n const y = pos[1] * Math.cos(angleInRadians) - pos[0] * Math.sin(angleInRadians);\n return [x, y];\n}\nfunction getHandlers(set, handlerProps) {\n const onStart = (event) => {\n const isTouch = \"touches\" in event;\n // if more than a single touch don't track, for now...\n if (isTouch && event.touches.length > 1)\n return;\n set((state, props) => {\n // setup mouse listeners on document to track swipe since swipe can leave container\n if (props.trackMouse && !isTouch) {\n document.addEventListener(mouseMove, onMove);\n document.addEventListener(mouseUp, onUp);\n }\n const { clientX, clientY } = isTouch ? event.touches[0] : event;\n const xy = rotateXYByAngle([clientX, clientY], props.rotationAngle);\n props.onTouchStartOrOnMouseDown &&\n props.onTouchStartOrOnMouseDown({ event });\n return Object.assign(Object.assign(Object.assign({}, state), initialState), { initial: xy.slice(), xy, start: event.timeStamp || 0 });\n });\n };\n const onMove = (event) => {\n set((state, props) => {\n const isTouch = \"touches\" in event;\n // Discount a swipe if additional touches are present after\n // a swipe has started.\n if (isTouch && event.touches.length > 1) {\n return state;\n }\n // if swipe has exceeded duration stop tracking\n if (event.timeStamp - state.start > props.swipeDuration) {\n return state.swiping ? Object.assign(Object.assign({}, state), { swiping: false }) : state;\n }\n const { clientX, clientY } = isTouch ? event.touches[0] : event;\n const [x, y] = rotateXYByAngle([clientX, clientY], props.rotationAngle);\n const deltaX = x - state.xy[0];\n const deltaY = y - state.xy[1];\n const absX = Math.abs(deltaX);\n const absY = Math.abs(deltaY);\n const time = (event.timeStamp || 0) - state.start;\n const velocity = Math.sqrt(absX * absX + absY * absY) / (time || 1);\n const vxvy = [deltaX / (time || 1), deltaY / (time || 1)];\n const dir = getDirection(absX, absY, deltaX, deltaY);\n // if swipe is under delta and we have not started to track a swipe: skip update\n const delta = typeof props.delta === \"number\"\n ? props.delta\n : props.delta[dir.toLowerCase()] ||\n defaultProps.delta;\n if (absX < delta && absY < delta && !state.swiping)\n return state;\n const eventData = {\n absX,\n absY,\n deltaX,\n deltaY,\n dir,\n event,\n first: state.first,\n initial: state.initial,\n velocity,\n vxvy,\n };\n // call onSwipeStart if present and is first swipe event\n eventData.first && props.onSwipeStart && props.onSwipeStart(eventData);\n // call onSwiping if present\n props.onSwiping && props.onSwiping(eventData);\n // track if a swipe is cancelable (handler for swiping or swiped(dir) exists)\n // so we can call preventDefault if needed\n let cancelablePageSwipe = false;\n if (props.onSwiping ||\n props.onSwiped ||\n props[`onSwiped${dir}`]) {\n cancelablePageSwipe = true;\n }\n if (cancelablePageSwipe &&\n props.preventScrollOnSwipe &&\n props.trackTouch &&\n event.cancelable) {\n event.preventDefault();\n }\n return Object.assign(Object.assign({}, state), { \n // first is now always false\n first: false, eventData, swiping: true });\n });\n };\n const onEnd = (event) => {\n set((state, props) => {\n let eventData;\n if (state.swiping && state.eventData) {\n // if swipe is less than duration fire swiped callbacks\n if (event.timeStamp - state.start < props.swipeDuration) {\n eventData = Object.assign(Object.assign({}, state.eventData), { event });\n props.onSwiped && props.onSwiped(eventData);\n const onSwipedDir = props[`onSwiped${eventData.dir}`];\n onSwipedDir && onSwipedDir(eventData);\n }\n }\n else {\n props.onTap && props.onTap({ event });\n }\n props.onTouchEndOrOnMouseUp && props.onTouchEndOrOnMouseUp({ event });\n return Object.assign(Object.assign(Object.assign({}, state), initialState), { eventData });\n });\n };\n const cleanUpMouse = () => {\n // safe to just call removeEventListener\n document.removeEventListener(mouseMove, onMove);\n document.removeEventListener(mouseUp, onUp);\n };\n const onUp = (e) => {\n cleanUpMouse();\n onEnd(e);\n };\n /**\n * The value of passive on touchMove depends on `preventScrollOnSwipe`:\n * - true => { passive: false }\n * - false => { passive: true } // Default\n *\n * NOTE: When preventScrollOnSwipe is true, we attempt to call preventDefault to prevent scroll.\n *\n * props.touchEventOptions can also be set for all touch event listeners,\n * but for `touchmove` specifically when `preventScrollOnSwipe` it will\n * supersede and force passive to false.\n *\n */\n const attachTouch = (el, props) => {\n let cleanup = () => { };\n if (el && el.addEventListener) {\n const baseOptions = Object.assign(Object.assign({}, defaultProps.touchEventOptions), props.touchEventOptions);\n // attach touch event listeners and handlers\n const tls = [\n [touchStart, onStart, baseOptions],\n // preventScrollOnSwipe option supersedes touchEventOptions.passive\n [\n touchMove,\n onMove,\n Object.assign(Object.assign({}, baseOptions), (props.preventScrollOnSwipe ? { passive: false } : {})),\n ],\n [touchEnd, onEnd, baseOptions],\n ];\n tls.forEach(([e, h, o]) => el.addEventListener(e, h, o));\n // return properly scoped cleanup method for removing listeners, options not required\n cleanup = () => tls.forEach(([e, h]) => el.removeEventListener(e, h));\n }\n return cleanup;\n };\n const onRef = (el) => {\n // \"inline\" ref functions are called twice on render, once with null then again with DOM element\n // ignore null here\n if (el === null)\n return;\n set((state, props) => {\n // if the same DOM el as previous just return state\n if (state.el === el)\n return state;\n const addState = {};\n // if new DOM el clean up old DOM and reset cleanUpTouch\n if (state.el && state.el !== el && state.cleanUpTouch) {\n state.cleanUpTouch();\n addState.cleanUpTouch = void 0;\n }\n // only attach if we want to track touch\n if (props.trackTouch && el) {\n addState.cleanUpTouch = attachTouch(el, props);\n }\n // store event attached DOM el for comparison, clean up, and re-attachment\n return Object.assign(Object.assign(Object.assign({}, state), { el }), addState);\n });\n };\n // set ref callback to attach touch event listeners\n const output = {\n ref: onRef,\n };\n // if track mouse attach mouse down listener\n if (handlerProps.trackMouse) {\n output.onMouseDown = onStart;\n }\n return [output, attachTouch];\n}\nfunction updateTransientState(state, props, previousProps, attachTouch) {\n // if trackTouch is off or there is no el, then remove handlers if necessary and exit\n if (!props.trackTouch || !state.el) {\n if (state.cleanUpTouch) {\n state.cleanUpTouch();\n }\n return Object.assign(Object.assign({}, state), { cleanUpTouch: undefined });\n }\n // trackTouch is on, so if there are no handlers attached, attach them and exit\n if (!state.cleanUpTouch) {\n return Object.assign(Object.assign({}, state), { cleanUpTouch: attachTouch(state.el, props) });\n }\n // trackTouch is on and handlers are already attached, so if preventScrollOnSwipe changes value,\n // remove and reattach handlers (this is required to update the passive option when attaching\n // the handlers)\n if (props.preventScrollOnSwipe !== previousProps.preventScrollOnSwipe ||\n props.touchEventOptions.passive !== previousProps.touchEventOptions.passive) {\n state.cleanUpTouch();\n return Object.assign(Object.assign({}, state), { cleanUpTouch: attachTouch(state.el, props) });\n }\n return state;\n}\nfunction useSwipeable(options) {\n const { trackMouse } = options;\n const transientState = React.useRef(Object.assign({}, initialState));\n const transientProps = React.useRef(Object.assign({}, defaultProps));\n // track previous rendered props\n const previousProps = React.useRef(Object.assign({}, transientProps.current));\n previousProps.current = Object.assign({}, transientProps.current);\n // update current render props & defaults\n transientProps.current = Object.assign(Object.assign({}, defaultProps), options);\n // Force defaults for config properties\n let defaultKey;\n for (defaultKey in defaultProps) {\n if (transientProps.current[defaultKey] === void 0) {\n transientProps.current[defaultKey] = defaultProps[defaultKey];\n }\n }\n const [handlers, attachTouch] = React.useMemo(() => getHandlers((stateSetter) => (transientState.current = stateSetter(transientState.current, transientProps.current)), { trackMouse }), [trackMouse]);\n transientState.current = updateTransientState(transientState.current, transientProps.current, previousProps.current, attachTouch);\n return handlers;\n}\n\nexport { DOWN, LEFT, RIGHT, UP, useSwipeable };\n//# sourceMappingURL=index.js.map\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t) => {\n if (!children) {\n return null;\n }\n\n return (\n \n {children}\n \n );\n};\n\nexport default Carousel;\n","import Button from '@atoms/Button/Button';\nimport Carousel from '@atoms/Carousel/Carousel';\nimport Text from '@atoms/Text/Text';\nimport SiteEnum from '@models/enums/SiteEnum';\nimport useBreakpoint from '@utility/hooks/useBreakpoint';\nimport classNames from 'classnames';\nimport React, { PropsWithChildren, useState } from 'react';\nimport slugify from 'slugify';\nimport SwiperType from 'swiper';\nimport { Pagination } from 'swiper/modules';\nimport { SwiperProps } from 'swiper/react';\ninterface INavigationCarousel extends SwiperProps {\n readonly site: SiteEnum;\n readonly id: string;\n readonly loop?: boolean;\n readonly numberOfSlides: number;\n readonly overflow?: boolean;\n readonly slidesToShowDesktop?: number;\n readonly slidesToShowLargeDesktop?: number;\n readonly slidesToShowMobile?: number;\n readonly slidesToShowTabletLandscape?: number;\n readonly slidesToShowTabletPortrait?: number;\n readonly title?: string;\n readonly titleClasses?: string;\n readonly titleElement?: React.JSX.Element;\n readonly slideByGroup?: boolean;\n}\n\nconst NavigationCarousel = ({\n site,\n children,\n id,\n numberOfSlides,\n overflow = true,\n slidesToShowDesktop = 3,\n slidesToShowLargeDesktop = 3.5,\n slidesToShowMobile = 1.1,\n slidesToShowTabletLandscape = 2.5,\n slidesToShowTabletPortrait = 2,\n title,\n titleElement,\n slideByGroup,\n ...props\n}: PropsWithChildren) => {\n const [hasMoreItemsToShow, setHasMoreItemsToShow] = useState(true);\n const breakpoint = useBreakpoint();\n\n if (!breakpoint) return null;\n\n const handleSwiperUpdate = (swiper: SwiperType) => {\n const slidesPerView = swiper?.params?.slidesPerView;\n const currentSlidesPerView =\n slidesPerView && typeof slidesPerView === 'number' ? slidesPerView : 0;\n\n setHasMoreItemsToShow(numberOfSlides > currentSlidesPerView);\n };\n\n const slugifiedId = slugify(id, {\n remove: /[*+~.()'\"!:@]/g, // remove characters that match regex, defaults to `undefined`\n });\n\n return (\n
\n
\n
\n {title && (\n \n {title}\n \n )}\n {!title && titleElement}\n \n \n \n
\n
\n \n slidesToShowTabletLandscape\n ? slidesToShowTabletLandscape\n : Math.floor(slidesToShowTabletLandscape),\n slidesPerGroup: slideByGroup\n ? Math.floor(slidesToShowTabletLandscape)\n : 1,\n },\n 1408: {\n spaceBetween: 32,\n slidesPerView: slidesToShowDesktop,\n slidesPerGroup: slideByGroup\n ? Math.floor(slidesToShowDesktop)\n : 1,\n },\n 1600: {\n slidesPerGroup: slideByGroup\n ? Math.floor(slidesToShowLargeDesktop)\n : 1,\n spaceBetween: 32,\n slidesPerView:\n numberOfSlides > slidesToShowLargeDesktop\n ? slidesToShowLargeDesktop\n : Math.floor(slidesToShowLargeDesktop),\n },\n }}\n >\n {children}\n \n
\n \n \n \n );\n};\n\nexport default NavigationCarousel;\n","import { RefObject } from 'react';\n\nexport const createColourPng = (\n ref: RefObject,\n colour: string\n): string => {\n if (typeof window !== 'undefined') {\n const imageWidth = ref.current?.offsetWidth || 100;\n const imageHeight = ref.current?.offsetHeight || 100;\n\n const canvas = document.createElement('canvas');\n canvas.width = imageWidth;\n canvas.height = imageHeight;\n const ctx = canvas.getContext('2d');\n\n if (ctx) {\n ctx.fillStyle = `#${colour}`;\n ctx.fillRect(0, 0, imageWidth, imageHeight);\n }\n\n return canvas.toDataURL();\n }\n\n return '';\n};\n","enum ColourSwatchVariantEnum {\n Default = 'default',\n Detailed = 'detailed',\n Simple = 'simple',\n}\n\nexport default ColourSwatchVariantEnum;\n","import useMediaQuery from '@utility/hooks/useMediaQuery';\nimport { motion, useInView } from 'motion/react';\nimport { PropsWithChildren, useRef } from 'react';\n\ninterface Props extends PropsWithChildren {\n readonly className?: string;\n readonly mobileOffset?: number;\n readonly desktopOffset?: number;\n readonly element?: 'section' | 'div';\n}\n\nconst AnimateInView = ({\n children,\n className,\n element = 'section',\n mobileOffset = 0.2,\n desktopOffset = 0.5,\n}: Props) => {\n const ref = useRef(null);\n const isMobile = useMediaQuery(752);\n const inView = useInView(ref, {\n amount: isMobile ? mobileOffset : desktopOffset,\n once: true,\n });\n\n const containerVariants = {\n hidden: { opacity: 0 },\n visible: {\n opacity: 1,\n transition: {\n staggerChildren: 0.1,\n duration: isMobile ? 0.3 : 0.5,\n type: 'spring',\n stiffness: 50,\n damping: 14,\n },\n },\n };\n\n const MotionElement = motion[element];\n\n return (\n \n {children}\n \n );\n};\n\nexport default AnimateInView;\n","import AnimateInView from '@atoms/AnimateInView/AnimateInView';\nimport SiteEnum from '@models/enums/SiteEnum';\nimport { IColourSwatchCard } from '@models/IColourSwatchCard';\nimport { IMeta } from '@models/IMeta';\nimport ColourSwatchCard from '@molecules/ColourSwatchCard/ColourSwatchCard';\nimport NavigationCarousel from '@molecules/NavigationCarousel/NavigationCarousel';\nimport { fadeInUp } from '@utility/config/animations';\nimport { motion } from 'motion/react';\nimport { SwiperSlide } from 'swiper/react';\n\ninterface Props {\n readonly cards: IColourSwatchCard[];\n readonly header?: string;\n readonly meta?: IMeta;\n}\n\nconst ColourCardCarousel = ({ cards, header, meta }: Props) => {\n return (\n \n \n {cards.map((card: IColourSwatchCard) => (\n \n \n \n \n \n ))}\n \n \n );\n};\nexport default ColourCardCarousel;\n","import { useEffect, useState } from 'react';\n\nconst useIsTouchDevice = () => {\n const [isTouchDevice, setIsTouchDevice] = useState(false);\n\n const checkIfTouchDevice = () => {\n const hasTouchPoints =\n navigator.maxTouchPoints > 0 || 'ontouchstart' in window;\n\n // Helps with detecting whether a mouse is used\n const isFinePointer = window.matchMedia('(pointer: fine)').matches;\n\n setIsTouchDevice(hasTouchPoints && !isFinePointer);\n };\n\n useEffect(() => {\n checkIfTouchDevice();\n\n window.addEventListener('resize', checkIfTouchDevice);\n window.addEventListener('pointerdown', checkIfTouchDevice);\n\n return () => {\n window.removeEventListener('resize', checkIfTouchDevice);\n window.removeEventListener('pointerdown', checkIfTouchDevice);\n };\n }, []);\n\n return isTouchDevice;\n};\n\nexport default useIsTouchDevice;\n"],"names":["ColourSwatchCardBG","props","bgColour","Grey","colourCode","colourHexCode","colourName","description","images","link","mainImage","showLikeButton","tag","variant","ColourSwatchVariantEnum","Default","wishlistDrawerLabels","wishlistId","createColourImage","imageDataUrl","setImageDataUrl","useState","isHovered","setIsHovered","colourRef","useRef","isTouchDevice","useIsTouchDevice","isDefaultVariant","isDetailedVariant","Detailed","isSimpleVariant","Simple","containerRef","inView","useInView","amount","once","fetchImageDataUrl","useCallback","async","dataUrl","createColourPng","error","console","useEffect","handleTrackingEvent","window","dataLayer","push","event","event_name_variable","trackingEvent_select_item","item_name","item_category","item_category3","backgroundColorStyle","useMemo","backgroundColor","backgroundImage","url","React","createElement","className","onMouseEnter","onMouseLeave","onFocus","onBlur","ref","AddToWishlist","card","cardId","collection","CardTypeEnum","Colours","href","onClick","motion","div","style","animate","opacity","length","exit","initial","src","alt","Image","image","aspectRatio","imageClasses","ProductImageGallery","showProductImage","showColourImage","productImageClasses","imageAspectRatio","initialIndex","classNames","Text","toLowerCase","dangerouslySetInnerHTML","__html","falsyToString","value","cx","cva","base","config","_config_compoundVariants","variants","class","defaultVariants","getVariantClassNames","Object","keys","map","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","entries","reduce","acc","param","key","undefined","getCompoundVariantClassNames","compoundVariants","cvClass","cvClassName","compoundVariantOptions","every","Array","isArray","includes","thresholds","some","all","root","margin","isInView","setInView","current","options","elementOrSelector","onStart","rootMargin","elements","activeIntersections","WeakMap","observer","IntersectionObserver","forEach","entry","onEnd","get","target","isIntersecting","Boolean","newOnEnd","set","unobserve","delete","threshold","element","observe","disconnect","LEFT","RIGHT","UP","DOWN","defaultProps","delta","preventScrollOnSwipe","rotationAngle","trackMouse","trackTouch","swipeDuration","Infinity","touchEventOptions","passive","initialState","first","start","swiping","xy","mouseMove","mouseUp","touchEnd","touchMove","touchStart","rotateXYByAngle","pos","angle","angleInRadians","Math","PI","cos","sin","getHandlers","handlerProps","isTouch","touches","state","document","addEventListener","onMove","onUp","clientX","clientY","onTouchStartOrOnMouseDown","assign","slice","timeStamp","x","y","deltaX","deltaY","absX","abs","absY","time","velocity","sqrt","vxvy","dir","getDirection","eventData","onSwipeStart","onSwiping","cancelablePageSwipe","onSwiped","cancelable","preventDefault","onSwipedDir","onTap","onTouchEndOrOnMouseUp","e","removeEventListener","attachTouch","el","cleanup","baseOptions","tls","h","o","output","addState","cleanUpTouch","onMouseDown","useSwipeable","transientState","transientProps","previousProps","defaultKey","handlers","stateSetter","updateTransientState","r","t","f","n","clsx","arguments","_ref","additionalModules","children","id","navId","Swiper","_extends","a11y","enabled","navigation","prevEl","nextEl","keyboard","onlyInViewport","modules","A11y","Keyboard","Navigation","site","numberOfSlides","overflow","slidesToShowDesktop","slidesToShowLargeDesktop","slidesToShowMobile","slidesToShowTabletLandscape","slidesToShowTabletPortrait","title","titleElement","slideByGroup","hasMoreItemsToShow","setHasMoreItemsToShow","useBreakpoint","handleSwiperUpdate","swiper","slidesPerView","params","slugifiedId","slugify","remove","Button","iconName","Carousel","pagination","clickable","bulletClass","onResize","onInit","watchSlidesProgress","Pagination","speed","breakpoints","spaceBetween","slidesPerGroup","floor","colour","imageWidth","offsetWidth","imageHeight","offsetHeight","canvas","width","height","ctx","getContext","fillStyle","fillRect","toDataURL","mobileOffset","desktopOffset","isMobile","useMediaQuery","containerVariants","hidden","visible","transition","staggerChildren","duration","type","stiffness","damping","MotionElement","cards","header","meta","AnimateInView","NavigationCarousel","contentLink","SiteEnum","Deco","SwiperSlide","fadeInUp","ColourSwatchCard","setIsTouchDevice","checkIfTouchDevice","hasTouchPoints","navigator","maxTouchPoints","isFinePointer","matchMedia","matches"],"sourceRoot":""}