{"version":3,"file":"ProductCarousel-Chunk-8794cdcb66a33150f563.js","mappings":"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","sources":["webpack://react-app/./components/organisms/ProductCarousel/ProductCarousel.tsx","webpack://react-app/./node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.mjs","webpack://react-app/./models/enums/ProductCardVariantEnum.ts","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/components/atoms/AnimateInView/AnimateInView.tsx","webpack://react-app/./components/molecules/ProductCard/ProductCard.tsx","webpack://react-app/./components/Shared/src/components/atoms/ConditionalWrapper/ConditionalWrapper.tsx","webpack://react-app/./components/Shared/src/utility/hooks/useIsTouchDevice.ts"],"sourcesContent":["import AnimateInView from '@atoms/AnimateInView/AnimateInView';\nimport { IMeta } from '@models/IMeta';\nimport { IProductCard } from '@models/IProductCard';\nimport SiteEnum from '@models/enums/SiteEnum';\nimport NavigationCarousel from '@molecules/NavigationCarousel/NavigationCarousel';\nimport ProductCard from '@molecules/ProductCard/ProductCard';\nimport { fadeInUp } from '@utility/config/animations';\nimport { motion } from 'motion/react';\nimport { SwiperSlide } from 'swiper/react';\n\ninterface Props {\n readonly cards: IProductCard[];\n readonly title: string;\n readonly meta?: IMeta;\n}\n\nconst ProductCarousel = ({ title, cards, meta }: Props) => (\n <AnimateInView>\n <NavigationCarousel\n site={SiteEnum.Deco}\n title={title}\n id={meta?.contentLink ? `product-${meta?.contentLink}` : ''}\n numberOfSlides={cards.length}\n slidesToShowDesktop={4}\n slidesToShowLargeDesktop={4}\n >\n {cards.map((card) => (\n <SwiperSlide\n className=\"stretch-card tw-h-full\"\n key={card.meta?.contentLink || card.productName}\n >\n <motion.div variants={fadeInUp} className=\"tw-h-full\">\n <ProductCard {...card} />\n </motion.div>\n </SwiperSlide>\n ))}\n </NavigationCarousel>\n </AnimateInView>\n);\n\nexport default ProductCarousel;\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","enum ProductCardVariantEnum {\n Default = 'default',\n Tall = 'tall',\n TallOnDesktopOnly = 'tall-desktop',\n}\n\nexport default ProductCardVariantEnum;\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<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import { PropsWithChildren } from 'react';\nimport { A11y, Keyboard, Navigation } from 'swiper/modules';\nimport { Swiper, SwiperProps } from 'swiper/react';\nimport 'swiper/scss';\nimport 'swiper/scss/a11y';\nimport 'swiper/scss/autoplay';\nimport 'swiper/scss/effect-fade';\nimport 'swiper/scss/keyboard';\nimport { SwiperModule } from 'swiper/types';\n\ninterface Props extends SwiperProps {\n readonly additionalModules?: SwiperModule[];\n readonly className?: string;\n readonly id?: string;\n readonly navId?: string;\n}\n\nconst Carousel = ({\n additionalModules = [],\n children,\n className,\n id = 'carousel',\n navId = '',\n ...props\n}: PropsWithChildren<Props>) => {\n if (!children) {\n return null;\n }\n\n return (\n <Swiper\n id={id}\n a11y={{ enabled: true }}\n className={className}\n navigation={{\n enabled: !!navId,\n prevEl: `#prevBtn-${navId}`,\n nextEl: `#nextBtn-${navId}`,\n }}\n keyboard={{\n enabled: true,\n onlyInViewport: true,\n }}\n modules={[...[A11y, Keyboard, Navigation], ...additionalModules]}\n {...props}\n >\n {children}\n </Swiper>\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<INavigationCarousel>) => {\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 <div className=\"tw-w-full tw-overflow-hidden\">\n <div className=\"tw-grid-container tw-gap-y-sm md:tw-gap-y-md xxl:tw-gap-y-[60px]\">\n <div className=\"tw-col-span-full tw-flex tw-items-center tw-justify-between\">\n {title && (\n <Text className=\"tw-text-grey-100\" variant=\"headline\">\n {title}\n </Text>\n )}\n {!title && titleElement}\n <div\n className={classNames(\n hasMoreItemsToShow\n ? 'md:tw-flex md:tw-flex-row rtl:md:tw-flex-row-reverse'\n : 'md:tw-hidden',\n 'tw-ml-auto tw-mt-auto tw-hidden tw-shrink-0 tw-gap-xs tw-py-[6px] rtl:tw-ml-0 rtl:tw-mr-auto'\n )}\n >\n <Button\n site={site}\n iconName=\"chevron-left\"\n id={`prevBtn-${slugifiedId}`}\n />\n <Button\n site={site}\n iconName=\"chevron-right\"\n id={`nextBtn-${slugifiedId}`}\n />\n </div>\n </div>\n <div\n className={classNames(\n { 'overflow-swiper': overflow },\n 'tw-col-span-full'\n )}\n >\n <Carousel\n enabled={hasMoreItemsToShow}\n navId={slugifiedId}\n pagination={{\n el: `#${slugifiedId}-pagination-carousel`,\n clickable: false,\n bulletClass:\n 'tw-h-3 tw-w-3 tw-flex-shrink-0 tw-rounded-full tw-bg-grey-20',\n }}\n className=\"overflow-xxl tw-w-full\"\n onResize={handleSwiperUpdate}\n onInit={handleSwiperUpdate}\n watchSlidesProgress\n additionalModules={[Pagination]}\n speed={1200}\n {...props}\n breakpoints={{\n 0: {\n spaceBetween: 16,\n slidesPerView: slidesToShowMobile,\n },\n 752: {\n spaceBetween: 16,\n slidesPerView: slidesToShowTabletPortrait,\n slidesPerGroup: slideByGroup\n ? Math.floor(slidesToShowTabletPortrait)\n : 1,\n },\n 1024: {\n spaceBetween: 16,\n slidesPerView:\n numberOfSlides > 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 </Carousel>\n <div\n id={`${slugifiedId}-pagination-carousel`}\n className={classNames(\n 'tw-flex tw-w-full tw-justify-center tw-gap-xs tw-pt-lg md:tw-hidden',\n {\n 'tw-hidden': !hasMoreItemsToShow,\n }\n )}\n ></div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default NavigationCarousel;\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 <MotionElement\n ref={ref}\n initial=\"hidden\"\n animate={inView ? 'visible' : 'hidden'}\n variants={containerVariants}\n className={className}\n >\n {children}\n </MotionElement>\n );\n};\n\nexport default AnimateInView;\n","import Button from '@atoms/Button/Button';\nimport ConditionalWrapper from '@atoms/ConditionalWrapper/ConditionalWrapper';\nimport Image from '@atoms/Image/Image';\nimport Text from '@atoms/Text/Text';\nimport { IProductCard } from '@models/IProductCard';\nimport CardTypeEnum from '@models/enums/CardTypeEnum';\nimport ProductCardVariantEnum from '@models/enums/ProductCardVariantEnum';\nimport AddToWishlist from '@molecules/AddToWishlist/AddToWishlist';\nimport ProductCardImage from '@molecules/ProductCardImage/ProductCardImage';\nimport ProductImageGallery from '@molecules/ProductImageGallery/ProductImageGallery';\nimport useIsTouchDevice from '@utility/hooks/useIsTouchDevice';\nimport classNames from 'classnames';\nimport { motion } from 'motion/react';\nimport { useState } from 'react';\n\ninterface Props extends IProductCard {\n readonly showLikeButton?: boolean;\n readonly wishlistId?: number;\n}\n\nconst ProductCard = (props: Props) => {\n const {\n category,\n cta,\n detailedView = true,\n images,\n productImage,\n productName,\n productRole,\n showLikeButton = true,\n tags,\n usps,\n variant = ProductCardVariantEnum.Default,\n wishlistDrawerLabels,\n wishlistId,\n } = props;\n\n const [isHovered, setIsHovered] = useState(false);\n const isTouchDevice = useIsTouchDevice();\n\n const fadeUpVariants = {\n hide: {\n y: isTouchDevice ? 0 : '100%',\n opacity: isTouchDevice ? 1 : 0,\n },\n show: { y: 0, opacity: 1 },\n };\n\n const fadeInVariants = {\n hide: { opacity: isTouchDevice ? 1 : 0 },\n show: { opacity: 1 },\n };\n\n const handleTrackingEvent = () => {\n window.dataLayer.push({\n event: 'trackingEvent_select_item',\n event_name_variable: 'select_item',\n trackingEvent_select_item: {\n item_name: productName,\n item_category: 'product',\n item_category2: category,\n },\n });\n };\n\n let imageAspectRatio = 'tw-aspect-[6/7]';\n\n if (variant !== ProductCardVariantEnum.Default) {\n imageAspectRatio =\n variant === ProductCardVariantEnum.Tall\n ? 'tw-aspect-[2/3]'\n : 'tw-aspect-[6/7] md:tw-aspect-[2/3]';\n }\n\n return (\n <div className=\"tw-relative tw-h-full\">\n {showLikeButton && (\n <AddToWishlist\n wishlistId={wishlistId}\n card={props}\n cardId={`${cta.url}.html`} // To match existing format\n collection={CardTypeEnum.Products}\n wishlistDrawerLabels={wishlistDrawerLabels}\n />\n )}\n\n <ConditionalWrapper\n condition={isTouchDevice || !detailedView}\n wrapper={(children) => (\n <a\n className=\"focus-outline tw-block tw-h-full\"\n href={cta.url}\n onClick={handleTrackingEvent}\n >\n {children}\n </a>\n )}\n >\n <article\n className=\"focus-outline tw-group tw-relative tw-flex tw-h-full tw-w-full tw-flex-col tw-overflow-hidden tw-bg-white focus:tw-bg-white\"\n onPointerEnter={() => setIsHovered(true)}\n onPointerLeave={() => setIsHovered(false)}\n onFocus={() => setIsHovered(true)}\n onBlur={() => setIsHovered(false)}\n >\n <div\n className={classNames(\n 'tw-relative tw-flex tw-w-full tw-overflow-hidden tw-bg-grey-20',\n imageAspectRatio,\n )}\n >\n <motion.div\n initial=\"show\"\n animate={isHovered && !!images?.length ? 'hide' : 'show'}\n exit=\"show\"\n variants={fadeInVariants}\n transition={{ ease: 'easeInOut', duration: 0.5 }}\n className=\"tw-will-change-opacity tw-h-full tw-w-full\"\n >\n <ProductCardImage\n productImage={productImage.mobile}\n tags={tags}\n />\n </motion.div>\n\n {!!images?.length && (\n <motion.div\n initial=\"hide\"\n animate={isHovered ? 'show' : 'hide'}\n exit=\"hide\"\n variants={fadeInVariants}\n transition={{ ease: 'easeInOut', duration: 0.5 }}\n className=\"tw-will-change-opacity tw-absolute tw-top-0 tw-z-10 tw-h-full tw-w-full\"\n >\n {!isTouchDevice && images.length === 1 && images[0] ? (\n <Image\n image={images[0]}\n imageClasses=\"tw-absolute tw-inset-0 tw-z-10 tw-w-full tw-h-full tw-object-center tw-object-cover\"\n />\n ) : (\n <ProductImageGallery\n images={images}\n initialIndex={0}\n showProductImage={isTouchDevice}\n mobileFirstImage={productImage.mobile}\n tags={tags}\n imageAspectRatio={imageAspectRatio}\n />\n )}\n </motion.div>\n )}\n </div>\n <div\n className={classNames(\n 'tw-relative tw-m-xs tw-flex tw-grow tw-flex-col tw-bg-white tw-text-grey-100',\n variant === ProductCardVariantEnum.TallOnDesktopOnly &&\n 'max-md:tw-pb-5',\n )}\n >\n <Text variant=\"label-12\" className=\"tw-uppercase tw-text-grey-70\">\n {category}\n </Text>\n <Text variant=\"heading-21\" as=\"p\" className=\"tw-font-light\">\n {productName}\n </Text>\n {detailedView && (\n <>\n <Text variant=\"body-small\" className=\"tw-my-xs tw-text-grey-70\">\n {productRole}\n </Text>\n <motion.ul\n initial=\"show\"\n animate={isHovered ? 'hide' : 'show'}\n exit=\"show\"\n variants={fadeInVariants}\n transition={{ ease: 'easeInOut', duration: 0.3 }}\n className=\"tw-will-change-opacity tw-min-h-xl tw-list-disc tw-px-xs tw-text-xs tw-text-grey-70\"\n >\n {usps.map((usp) => (\n <li key={usp}>\n <Text variant=\"body-small\">{usp}</Text>\n </li>\n ))}\n </motion.ul>\n {!isTouchDevice && (\n <motion.div\n initial=\"hide\"\n animate={isHovered ? 'show' : 'hide'}\n exit=\"hide\"\n variants={fadeUpVariants}\n transition={{ ease: [0.74, 0, 0.19, 1.02], duration: 0.5 }}\n className={classNames(\n isTouchDevice ? 'tw-hidden' : 'tw-block',\n 'tw-w-full tw-will-change-transform md:tw-absolute md:tw-bottom-0 md:tw-left-0',\n )}\n >\n <Button\n as=\"link\"\n variant=\"grey80\"\n label={cta.text}\n href={cta.url}\n onClick={handleTrackingEvent}\n />\n </motion.div>\n )}\n </>\n )}\n </div>\n </article>\n </ConditionalWrapper>\n </div>\n );\n};\n\nexport default ProductCard;\n","import { PropsWithChildren, ReactNode } from 'react';\n\ninterface Props {\n readonly condition: boolean;\n readonly wrapper: (child: ReactNode) => ReactNode;\n}\nconst ConditionalWrapper = ({\n condition,\n wrapper,\n children,\n}: PropsWithChildren<Props>) => (condition ? wrapper(children) : children);\n\nexport default ConditionalWrapper;\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":["_ref","title","cards","meta","React","createElement","AnimateInView","NavigationCarousel","site","SiteEnum","Deco","id","contentLink","numberOfSlides","length","slidesToShowDesktop","slidesToShowLargeDesktop","map","card","SwiperSlide","className","key","productName","motion","div","variants","fadeInUp","ProductCard","falsyToString","value","cx","cva","base","config","props","_config_compoundVariants","class","defaultVariants","getVariantClassNames","Object","keys","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","entries","reduce","acc","param","undefined","getCompoundVariantClassNames","compoundVariants","cvClass","cvClassName","compoundVariantOptions","every","Array","isArray","includes","ProductCardVariantEnum","thresholds","some","all","useInView","ref","root","margin","amount","once","initial","isInView","setInView","useState","useEffect","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","inView","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","event","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","toLowerCase","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","additionalModules","children","navId","Swiper","_extends","a11y","enabled","navigation","prevEl","nextEl","keyboard","onlyInViewport","modules","A11y","Keyboard","Navigation","overflow","slidesToShowMobile","slidesToShowTabletLandscape","slidesToShowTabletPortrait","titleElement","slideByGroup","hasMoreItemsToShow","setHasMoreItemsToShow","useBreakpoint","handleSwiperUpdate","swiper","slidesPerView","params","slugifiedId","slugify","remove","Text","classNames","Button","iconName","Carousel","pagination","clickable","bulletClass","onResize","onInit","watchSlidesProgress","Pagination","speed","breakpoints","spaceBetween","slidesPerGroup","floor","mobileOffset","desktopOffset","useRef","isMobile","useMediaQuery","containerVariants","hidden","opacity","visible","transition","staggerChildren","duration","type","stiffness","damping","MotionElement","animate","category","cta","detailedView","images","productImage","productRole","showLikeButton","tags","usps","Default","wishlistDrawerLabels","wishlistId","isHovered","setIsHovered","isTouchDevice","useIsTouchDevice","fadeUpVariants","hide","show","fadeInVariants","handleTrackingEvent","window","dataLayer","push","event_name_variable","trackingEvent_select_item","item_name","item_category","item_category2","imageAspectRatio","Tall","AddToWishlist","cardId","url","collection","CardTypeEnum","Products","ConditionalWrapper","condition","wrapper","href","onClick","onPointerEnter","onPointerLeave","onFocus","onBlur","exit","ease","ProductCardImage","mobile","Image","image","imageClasses","ProductImageGallery","initialIndex","showProductImage","mobileFirstImage","TallOnDesktopOnly","as","Fragment","ul","usp","label","text","setIsTouchDevice","checkIfTouchDevice","hasTouchPoints","navigator","maxTouchPoints","isFinePointer","matchMedia","matches"],"sourceRoot":""}