{"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":""}