{"version":3,"file":"static/chunks/4498-ab26f29c458e474d.js","mappings":"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","sources":["webpack://_N_E/./core--client--components/src/components/atoms/ContentfulImage/ContentfulImage.tsx","webpack://_N_E/./core--client--components/src/components/atoms/Paragraph/Paragraph.tsx","webpack://_N_E/./core--client--components/src/components/molecules/CarouselItemReunion/CarouselItemReunion.tsx","webpack://_N_E/./core--client--components/src/components/molecules/ButtonWithIcon/ButtonWithIcon.tsx","webpack://_N_E/./core--client--components/src/components/organisms/VideoPlayer/VideoPlayer.tsx","webpack://_N_E/./src/lib/loaders/cdnSquareImageLoader.ts","webpack://_N_E/./src/components/atoms/CdnSquareImage/CdnSquareImage.tsx","webpack://_N_E/./src/components/molecules/CarouselButton/CarouselButton.tsx","webpack://_N_E/./src/components/molecules/CarouselDotNavigation/CarouselDotNavigation.tsx","webpack://_N_E/./src/components/molecules/CarouselPreviewNavigation/CarouselPreviewNavigation.tsx","webpack://_N_E/./src/components/organisms/Carousel/Carousel.tsx","webpack://_N_E/./src/lib/utils/helpers/dateHelpers/dates.ts","webpack://_N_E/<anon>"],"sourcesContent":["import contentFulImageLoader from '@/component-library-lib/loaders/contentfulImageLoader';\nimport Image, { ImageProps } from \"next/legacy/image\";\n\n/**\n * ContentfulImage An image from the CDN\n *\n * @param {ImageProps} props - The props for the ContentfulImage component\n * @returns {React.FC<ImageProps>} Component\n */\nconst ContentfulImage: React.FC<ImageProps> = (props: ImageProps) => {\n return (\n <Image\n data-testid=\"contentful-image\"\n {...props}\n alt={props.alt || 'contentful image'}\n loader={contentFulImageLoader}\n />\n );\n};\n\nexport default ContentfulImage;\n","import { ReactElement, ReactNode } from 'react';\n\n/**\n * IParagraph - Interface for Paragraph component\n *\n * @interface\n */\nexport interface IParagraph extends React.HTMLAttributes<HTMLParagraphElement> {\n /** The styling of the paragraph. Regular, bold, or italic or boldItalic. */\n styling?: 'regular' | 'bold' | 'italic' | 'boldItalic';\n /**\n * The size of the paragraph.\n *\n * @default 'body1'\n */\n size?: 'body1' | 'body2' | 'body3' | 'body4' | 'body5' | 'overline';\n /**\n * The font of the paragraph.\n *\n * @default 'petco'\n */\n font?: 'petco' | 'amasis';\n /** The content of the paragraph. */\n children?: ReactElement | string | ReactNode;\n}\n\n/**\n * Paragraph Used to display a paragraph of text. Can be used as a generic\n * paragraph.\n *\n * @param {IParagraph} props - The props for the Paragraph component\n * @returns {React.FC<IParagraph>} Paragraph Component\n */\nconst Paragraph: React.FC<IParagraph> = ({\n styling = 'regular',\n size = 'body1',\n font = 'petco',\n children,\n ...rest\n}: IParagraph) => {\n // Set the styling Classes\n let stylingClass = '';\n switch (styling) {\n case 'bold':\n stylingClass = 'font-bold';\n break;\n case 'italic':\n stylingClass = 'italic';\n break;\n case 'boldItalic':\n stylingClass = 'font-bold italic';\n break;\n default:\n stylingClass = '';\n break;\n }\n\n const paragraphClass = `text-${size} font-${font} break-words ${stylingClass} ${rest.className}`;\n return (\n <p data-testid=\"paragraph\" {...rest} className={paragraphClass}>\n {children}\n </p>\n );\n};\n\nexport default Paragraph;\n","import ContentfulImage from '@/component-library/atoms/ContentfulImage/ContentfulImage';\nimport Paragraph from '@/component-library/atoms/Paragraph/Paragraph';\nimport Link from 'next/link';\n\n/**\n * ICarouselItemReunion Interface for the Carousel Item Reunion Component\n *\n * @interface ICarouselItemReunion\n */\nexport interface ICarouselItemReunion {\n /**\n * The Name of the Pet\n *\n * @memberof ICarouselItemReunion\n * @member {string} petName\n */\n petName: string;\n /**\n * The Name of the Owner\n *\n * @memberof ICarouselItemReunion\n * @member {string} ownerName\n */\n ownerName: string;\n /**\n * The Description of the Reunion\n *\n * @memberof ICarouselItemReunion\n * @member {string} description\n */\n description: string;\n /**\n * The Image of the Reunion\n *\n * @memberof ICarouselItemReunion\n * @member {string} image\n */\n image: string;\n /**\n * The Link to the Reunion\n *\n * @memberof ICarouselItemReunion\n * @member {string} link\n */\n link: string;\n}\n\n/**\n * Carousel Item Reunion - A Reunion Carousel Item\n *\n * @param {ICarouselItemReunion} props - The props for the Carousel Item Reunion\n * @returns {React.FC<ICarouselItemReunion>} Carousel Item Component\n */\nconst CarouselItemReunion: React.FC<ICarouselItemReunion> = ({\n petName,\n ownerName,\n description,\n image,\n link,\n}) => {\n return (\n <Link href={link} className=\"focus-visible:outline-none py-[5px] w-full\">\n <div\n data-testid=\"carousel-item-reunion\"\n className=\"group flex flex-col justify-center items-center focus-visible:outline-focus-400\"\n >\n <div className=\"aspect-square overflow-hidden rounded-[20px] md:rounded-3xl w-full relative\">\n <ContentfulImage\n layout=\"fill\"\n objectFit=\"cover\"\n alt={petName + ' + ' + ownerName}\n src={image}\n className=\"scale-100 group-hover:scale-[102%] transition-all duration-100\"\n sizes=\"(max-width: 739px) 100vw, (max-width: 1198px) 50vw, (max-width: 1439px) 33vw, 450px\"\n />\n </div>\n\n <span className=\"mt-3.5 line-clamp-1 text-h5 font-petco font-semibold\">\n {petName} <span className=\"text-base-300\">+</span> {ownerName}\n </span>\n <Paragraph\n size=\"body4\"\n font=\"petco\"\n className=\"mt-2 text-center line-clamp-2 font-petco max-w-[432px]\"\n >\n {description}\n </Paragraph>\n </div>\n </Link>\n );\n};\n\nexport default CarouselItemReunion;\n","import { ColorShade } from '@/component-library/atoms/Colors/Colors';\nimport Icon, { IIcon } from '@/component-library/atoms/Icon/Icon';\nimport { MouseEventHandler, useState } from 'react';\n\n/**\n * IButtonWithIcon Interface for the ButtonWithIcon Component\n *\n * @interface\n */\nexport interface IButtonWithIcon {\n /** The text to display. */\n children: string;\n /** The icon to display. */\n icon: IIcon;\n /** The onClick event handler. */\n onClick?: MouseEventHandler<HTMLButtonElement>;\n /** If the button is disabled. */\n disabled?: boolean;\n /**\n * The optional classes to apply to the button.\n *\n * @default ''\n */\n classes?: string;\n}\n\n/**\n * Icon State Styles This is the styles for the icon\n *\n * @constant\n */\nexport const iconStateStyles: {\n /** Color Map of the icon states */\n color: {\n [key: string]: string;\n };\n /** Shade Map of the icon states */\n shade: { [key: string]: ColorShade };\n} = {\n color: {\n hovered: 'base',\n normal: 'neutral',\n disabled: 'neutral',\n },\n shade: {\n hovered: 300,\n normal: 800,\n disabled: 500,\n },\n};\n\n/**\n * Button With Icon Button with Icon is used to display a button with an icon\n *\n * @param {IButtonWithIcon} props - The props for the Button With Icon component\n * @returns {React.FC<IButtonWithIcon>} Button With Icon Component\n */\nconst ButtonWithIcon: React.FC<IButtonWithIcon> = ({\n children,\n icon,\n onClick,\n disabled,\n classes = '',\n}) => {\n const [hovered, setHovered] = useState(false);\n // Set the icon color default to normal\n let iconColor = iconStateStyles.color.normal;\n let iconShade = iconStateStyles.shade.normal;\n // Determine if the button is hovered or disabled since a disabled button can not also be hovered\n if (disabled) {\n iconColor = iconStateStyles.color.disabled;\n iconShade = iconStateStyles.shade.disabled;\n } else if (hovered) {\n iconColor = iconStateStyles.color.hovered;\n iconShade = iconStateStyles.shade.hovered;\n }\n\n const disabledClass = disabled\n ? 'text-neutral-500 cursor-not-allowed group-hover:text-neutral-500'\n : 'text-neutral-800 ';\n\n const testId = `button-with-icon-${hovered}-${disabled}`;\n return (\n <button\n data-testid={testId}\n onClick={onClick}\n type=\"button\"\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n disabled={disabled}\n className={`inline-flex items-center rounded-sm focus:ring-focus-400 ring-0 focus:outline-0 focus:ring-2 focus-visible:outline-0 focus-visible:outline group ${classes}`}\n >\n <Icon\n {...icon}\n colorType={iconColor}\n colorShade={iconShade}\n classes={disabledClass}\n />\n <span\n className={`pl-[6px] text-body5 group-hover:text-base-300 ${disabledClass}`}\n >\n {children}\n </span>\n </button>\n );\n};\n\nexport default ButtonWithIcon;\n","import Icon from '@/component-library/atoms/Icon/Icon';\nimport ButtonWithIcon from '@/component-library/molecules/ButtonWithIcon/ButtonWithIcon';\nimport { Dialog, Transition } from '@headlessui/react';\nimport Image, { ImageLoader } from 'next/legacy/image';\nimport { Fragment, useRef, useState } from 'react';\nimport ReactPlayer from 'react-player';\n\n/**\n * IVideoPlayer Interface for the Video Player\n *\n * @interface\n */\nexport interface IVideoPlayer {\n /** The title to Display */\n title: string;\n /** Image URL */\n image: string;\n /** Alt Text for the Image placeholder on the video */\n alt: string;\n /** Video URL to Youtube */\n video: string;\n /**\n * The optional classes\n *\n * @default ''\n */\n classes?: string;\n /**\n * Whether to start the video muted or unmuted\n *\n * @default true\n */\n muted?: boolean;\n /** The loader function for the image */\n loader?: ImageLoader;\n}\n\n/**\n * Video Player The Video Player component that displays a video with a title\n * and image.\n *\n * @param {IVideoPlayer} props - The props of the Video Player component.\n * @returns {React.FC<IVideoPlayer>} Video Player Component\n */\nconst VideoPlayer: React.FC<IVideoPlayer> = ({\n title,\n image,\n alt,\n video,\n classes = '',\n muted = true,\n loader,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const playerWrapperRef = useRef(null);\n\n /** Close Modal */\n const closeModal = () => {\n setIsOpen(false);\n };\n\n /** Open Modal */\n const openModal = () => {\n setIsOpen(true);\n };\n\n return (\n <div data-testid=\"video-player\" className={classes}>\n <div\n className=\"flex justify-center items-center h-full relative aspect-video\"\n id=\"video-player-image\"\n >\n {!isOpen && (\n <button\n onClick={openModal}\n className=\"flex items-center justify-center cursor-pointer z-[1] rounded-[4px] focus-visible:outline-focus-400 focus-visible:outline-2 focus-visible:outline\"\n data-testid=\"video-player-modal-open\"\n >\n <Icon\n size={40}\n icon=\"playCircle\"\n colorType=\"neutral\"\n colorShade={100}\n classes=\"mr-[8px]\"\n />\n <span className=\"text-neutral-100 text-h5 font-petco\">{title}</span>\n </button>\n )}\n <div className=\"absolute w-full h-full rounded-[20px] sm:rounded-[24px] md:rounded-[32px] overflow-hidden\">\n <Image\n src={image}\n alt={alt}\n layout=\"fill\"\n className=\"object-fit aspect-video -z-10 rounded-[20px] sm:rounded-[24px] md:rounded-[32px]\"\n loader={loader}\n />\n <div className=\"absolute top-0 left-0 right-0 bottom-0 opacity-30 bg-black\"></div>\n </div>\n </div>\n <Transition appear show={isOpen} as={Fragment}>\n <Dialog\n as=\"div\"\n className=\"z-[30] bg-neutral-100 h-screen w-screen flex justify-center items-center fixed inset-0 overflow-hidden\"\n onClose={closeModal}\n initialFocus={playerWrapperRef}\n >\n <Transition.Child\n as={Fragment}\n enter=\"ease-out duration-300\"\n enterFrom=\"opacity-0\"\n enterTo=\"opacity-100\"\n leave=\"ease-in duration-200\"\n leaveFrom=\"opacity-100\"\n leaveTo=\"opacity-0\"\n >\n <div className=\"fixed inset-0 bg-neutral-100 \" />\n </Transition.Child>\n\n <div className=\"absolute inset-0 overflow-y-auto w-full z-50\">\n <div className=\"flex min-h-full\">\n <Transition.Child\n as={Fragment}\n enter=\"ease-out duration-300\"\n enterFrom=\"opacity-0 scale-95\"\n enterTo=\"opacity-100 scale-100\"\n leave=\"ease-in duration-200\"\n leaveFrom=\"opacity-100 scale-100\"\n leaveTo=\"opacity-0 scale-95\"\n >\n <Dialog.Panel className=\"w-full h-full transform overflow-hidden transition-all z-100\">\n <div className=\"flex justify-center items-center aspect-video flex-col bg-neutral-100 p-[24px] w-screen h-screen\">\n <div className=\"flex flex-col max-w-full w-[327px] sm:w-[680px] md:w-[1128px] px-[24px] sm:px-[32px] md:px-[40px] aspect-video relative mt-[-40px]\">\n <div className=\"flex justify-end w-full \">\n <ButtonWithIcon\n icon={{\n icon: 'close',\n colorShade: 800,\n colorType: 'neutral',\n size: 24,\n }}\n onClick={closeModal}\n classes=\"mb-[20px]\"\n >\n Close\n </ButtonWithIcon>\n </div>\n <div ref={playerWrapperRef}>\n <ReactPlayer\n playing={true}\n playsInline={true}\n url={video}\n controls={true}\n muted={muted}\n stopOnUnmount={true}\n volume={1}\n width=\"100%\"\n height=\"100%\"\n className=\"aspect-video\"\n data-testid=\"video-player-react-player\"\n />\n </div>\n </div>\n </div>\n </Dialog.Panel>\n </Transition.Child>\n </div>\n </div>\n </Dialog>\n </Transition>\n </div>\n );\n};\n\nexport default VideoPlayer;\n","import { getImagePath } from '@/component-library-lib/utils/helpers/photoHelpers/getImagePath';\nimport { ImageLoaderProps } from 'next/legacy/image';\n\n/**\n * Loads images from the CDN in squared format\n *\n * @param {ImageLoaderProps} params- Image loader props\n * @returns {string} - Image URL\n */\nfunction cdnSquareImageLoader({\n src,\n width,\n quality,\n}: ImageLoaderProps): string {\n /**\n * The CDN base URL\n *\n * @constant {string} cdnBaseUrl - The CDN base URL\n */\n const cdnBaseUrl =\n process.env.NEXT_PUBLIC_CDN_BASE_URL ?? process.env.STORYBOOK_CDN_BASE_URL;\n\n /** We need the CDN base URL to load images from the CDN */\n if (cdnBaseUrl === undefined) return '';\n\n /**\n * Image path without cdn base path\n *\n * @constant {string} imageSrcPath - The image src path\n */\n const imagePath = getImagePath({ src, cdnBaseUrl });\n\n if (quality) {\n return `${cdnBaseUrl}${imagePath}?quality=${quality}&width=${width}&height=${width}&format=webp`;\n } else {\n return `${cdnBaseUrl}${imagePath}?width=${width}&height=${width}&format=webp`;\n }\n}\n\nexport default cdnSquareImageLoader;\n","import cdnSquareImageLoader from '@/lib/loaders/cdnSquareImageLoader';\nimport Image, { ImageProps } from \"next/legacy/image\";\n\n/**\n * CdnImage An image from the CDN\n *\n * @param {ImageProps} props - The props for the CdnImage component\n * @returns {React.FC<ImageProps>} Component\n */\nconst CdnSquareImage: React.FC<ImageProps> = (props: ImageProps) => {\n return (\n <Image\n data-testid={'cdn-square-image'}\n loader={cdnSquareImageLoader}\n {...props}\n alt={props.alt}\n />\n );\n};\n\nexport default CdnSquareImage;\n","import { ColorShade, ColorType } from '@/components/atoms/Colors/Colors';\nimport Icon, { IconType } from '@/components/atoms/Icon/Icon';\nimport { cva } from 'cva';\nimport { useState } from 'react';\n\n/**\n * The CarouselButtonSize The size of the carousel button.\n *\n * @type {CarouselButtonSize}\n */\nexport type CarouselButtonSize = 'regular' | 'small';\n\n/**\n * Carousel Button Classes The classes for the carousel components using CVA.\n *\n * @constant\n */\nconst carouselButtonClasses = cva('rounded-full bg-neutral-200 p-3', {\n variants: {\n state: {\n active:\n 'hover:drop-shadow-[0_4px_8px_rgba(0,0,0,0.16)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus-400 transition-all duration-200 ease-in-out',\n disabled: 'cursor-not-allowed',\n },\n size: {\n regular: 'p-3',\n small: 'p-1',\n },\n },\n});\n\n/**\n * ICarouselButton Interface for the Carousel Button Component\n *\n * @augments React.ButtonHTMLAttributes<HTMLButtonElement>\n * @interface ICarouselButton\n */\nexport interface ICarouselButton\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * The icon to display.\n *\n * @memberof ICarouselButton\n * @member {IconType} icon\n */\n icon: IconType;\n /**\n * If the button is disabled.\n *\n * @memberof ICarouselButton\n * @member {boolean} [disabled]\n */\n disabled?: boolean;\n /**\n * The button size\n *\n * @memberof ICarouselButton\n * @member {CarouselButtonSize} [size]\n */\n size?: CarouselButtonSize;\n}\n\n/**\n * Carousel Button Carousel Button Component to be used in the Carousel\n * Component\n *\n * @param {ICarouselButton} props - The props for the Carousel Button Component.\n * @returns {React.FC<ICarouselButton>} Carousel Button Component\n */\nconst CarouselButton: React.FC<ICarouselButton> = ({\n icon,\n disabled,\n size = 'regular',\n ...rest\n}: ICarouselButton) => {\n const [hovered, setHovered] = useState(false);\n let iconColorShade: ColorShade = 300;\n let iconColorType: ColorType = 'base';\n\n if (disabled) {\n iconColorShade = 400;\n iconColorType = 'neutral';\n } else if (hovered) {\n iconColorShade = 400;\n iconColorType = 'base';\n } else {\n iconColorShade = 300;\n iconColorType = 'base';\n }\n\n return (\n <button\n {...rest}\n disabled={disabled}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n data-testid=\"carousel-button\"\n className={carouselButtonClasses({\n state: disabled ? 'disabled' : 'active',\n size: size,\n class: rest.className,\n })}\n >\n <Icon\n icon={icon}\n size={24}\n colorShade={iconColorShade}\n colorType={iconColorType}\n />\n </button>\n );\n};\n\nexport default CarouselButton;\n","import { twMerge } from 'tailwind-merge';\n\n/**\n * ICarouselDotNavigation\n *\n * @interface ICarouselDotNavigation\n */\nexport interface ICarouselDotNavigation {\n /**\n * The carousel current slide\n *\n * @memberof ICarouselDotNavigation\n * @member {number} currentSlide\n */\n currentSlide: number;\n /**\n * Set carousel slide\n *\n * @memberof ICarouselDotNavigation\n * @member {(index: number) => void} setSlide\n */\n setSlide: (index: number) => void;\n /**\n * The total number of slides\n *\n * @memberof ICarouselDotNavigation\n * @member {number} totalSlides\n */\n totalSlides: number;\n /**\n * The optional font size class\n *\n * @memberof ICarouselDotNavigation\n * @default 'text-[1.5rem]'\n * @member {string} [fontSizeClass]\n */\n fontSizeClass?: string;\n /**\n * The optional classes to add to the component\n *\n * @memberof ICarouselDotNavigation\n * @member {string} [classes]\n */\n classes?: string;\n /**\n * The optional class to add to the dot button\n *\n * @memberof ICarouselDotNavigation\n * @member {string} [dotClass]\n */\n dotClass?: string;\n}\n\n/**\n * CarouselDotNavigation A dot navigation for the carousel\n *\n * @param {ICarouselDotNavigation} props - The props for the\n * CarouselDotNavigation component\n * @returns {React.FC<ICarouselDotNavigation>} Component\n */\nconst CarouselDotNavigation: React.FC<ICarouselDotNavigation> = ({\n currentSlide,\n setSlide,\n totalSlides,\n fontSizeClass = 'text-[1.5rem]',\n classes = '',\n dotClass = '',\n}: ICarouselDotNavigation) => {\n return (\n <div\n data-testid=\"carousel-dot-navigation\"\n className={twMerge(\n 'font-petco space-x-2 text-center flex w-full justify-center absolute bottom-0',\n fontSizeClass,\n classes\n )}\n >\n {Array.from({ length: totalSlides }, (_, index) => {\n /**\n * The active state of the current dot\n *\n * @constant {boolean} isActiveSlide\n */\n const isActiveSlide = index === currentSlide;\n\n return (\n <button\n key={index}\n onClick={() => setSlide(index)}\n data-testid=\"carousel-dot-button\"\n className={twMerge(\n 'text-neutral-100 h-[38px]',\n !isActiveSlide ? 'opacity-40' : '',\n dotClass\n )}\n >\n •<span className=\"sr-only\">Jump to Item {index + 1}</span>\n </button>\n );\n })}\n </div>\n );\n};\n\nexport default CarouselDotNavigation;\n","import CdnSquareImage from '@/components/atoms/CdnSquareImage/CdnSquareImage';\n\n/**\n * ICarouselPreviewNavigation\n *\n * @interface ICarouselPreviewNavigation\n */\nexport interface ICarouselPreviewNavigation {\n /**\n * The carousel current slide\n *\n * @memberof ICarouselPreviewNavigation\n * @member {number} currentSlide\n */\n currentSlide: number;\n /**\n * The images\n *\n * @memberof ICarouselPreviewNavigation\n * @member {string[]} images\n */\n images: string[];\n /**\n * Set carousel slide\n *\n * @memberof ICarouselPreviewNavigation\n * @member {Function} setSlide\n */\n setSlide: (index: number) => void;\n /**\n * The optional classes to add to the component\n *\n * @memberof ICarouselPreviewNavigation\n * @default ''\n * @member {string} [classes]\n */\n classes?: string;\n}\n\n/**\n * CarouselPreviewNavigation A preview navigation for the carousel\n *\n * @param {ICarouselPreviewNavigation} props - The props for the\n * CarouselPreviewNavigation component\n * @returns {React.FC<ICarouselPreviewNavigation>} Component\n */\nconst CarouselPreviewNavigation: React.FC<ICarouselPreviewNavigation> = ({\n currentSlide,\n images,\n setSlide,\n classes = '',\n}: ICarouselPreviewNavigation) => {\n return (\n <div\n data-testid=\"carousel-preview-navigation\"\n className={`flex space-x-4 mt-6 justify-center h-[54px] ${classes}`}\n >\n {images.map((src, index) => {\n /**\n * The active state of the current dot\n *\n * @constant {boolean} isActiveSlide\n */\n const isActiveSlide = index === currentSlide;\n return (\n <div\n key={index}\n className={`rounded-lg aspect-square overflow-hidden ${\n isActiveSlide ? 'border-2 border-base-300' : ''\n }`}\n >\n <button\n onClick={() => setSlide(index)}\n key={index}\n className=\"aspect-square relative w-[54px]\"\n data-testid=\"carousel-preview-button\"\n >\n <CdnSquareImage\n src={src}\n layout=\"fill\"\n objectFit=\"cover\"\n loading=\"lazy\"\n sizes=\"54px\"\n alt=\"preview image\"\n className={`${\n !isActiveSlide\n ? 'scale-100 hover:scale-[105%] transition-all duration-100'\n : ''\n }`}\n />\n </button>\n </div>\n );\n })}\n </div>\n );\n};\n\nexport default CarouselPreviewNavigation;\n","import useWindowSize from '@/component-library-lib/hooks/windowSize/WindowSize';\nimport CarouselButton, {\n CarouselButtonSize,\n} from '@/components/molecules/CarouselButton/CarouselButton';\nimport CarouselDotNavigation from '@/components/molecules/CarouselDotNavigation/CarouselDotNavigation';\nimport CarouselPreviewNavigation from '@/components/molecules/CarouselPreviewNavigation/CarouselPreviewNavigation';\nimport {\n CarouselContext,\n CarouselProvider,\n CarouselProviderProps,\n Slide,\n Slider,\n} from 'pure-react-carousel';\nimport 'pure-react-carousel/dist/react-carousel.es.css';\nimport { useCallback, useContext, useEffect, useState } from 'react';\n\n/**\n * The default classes for the Slider Component.\n *\n * @constant {string} defaultSliderClasses\n */\nconst defaultSliderClasses = ' focus-visible:outline-focus-400 mb-8';\n/**\n * The default classes for the Slide Component.\n *\n * @constant {string} defaultSlideClasses\n */\nconst defaultSlideClasses =\n 'focus-visible:outline-focus-400 px-[0.5rem] sm:px-[0.75rem] md:px-[1rem]';\n\n/**\n * The props for the navigation buttons\n *\n * @interface ICarouselControlsNavigationButtonsProps\n */\nexport interface ICarouselControlsNavigationButtonsProps {\n /**\n * Whether to show the navigation buttons\n *\n * @memberof ICarouselControlsNavigationButtonsProps\n * @default true\n * @member {boolean} [showNavigationButtons]\n */\n showNavigationButtons?: boolean;\n /**\n * The size of the navigation buttons\n *\n * @memberof ICarouselControlsNavigationButtonsProps\n * @default 'regular'\n * @member {CarouselButtonSize} [navigationButtonSize]\n */\n navigationButtonSize?: CarouselButtonSize;\n /**\n * The optional verticalOffsetClass\n *\n * @memberof ICarouselControlsNavigationButtonsProps\n * @default defaultVerticalOffsetClass\n * @member {string} [verticalOffsetClass]\n */\n verticalOffsetClass?: string;\n /**\n * The optional classes for the right arrow\n *\n * @memberof ICarouselControlsNavigationButtonsProps\n * @default ''\n * @member {string} [rightArrowClasses]\n */\n rightArrowClasses?: string;\n /**\n * The optional classes for the left arrow\n *\n * @memberof ICarouselControlsNavigationButtonsProps\n * @default ''\n * @member {string} [leftArrowClasses]\n */\n leftArrowClasses?: string;\n}\n\n/**\n * The props for the dot navigation\n *\n * @interface ICarouselControlsDotNavigationProps\n */\ninterface ICarouselControlsDotNavigationProps {\n /**\n * The optional dot navigation space in pixels\n *\n * @memberof ICarouselControlsDotNavigationProps\n * @default 16\n * @member {number} [space]\n */\n space?: number;\n /**\n * The optional dot navigation font size class\n *\n * @memberof ICarouselControlsDotNavigationProps\n * @default 'text-[1.5rem]'\n * @member {string} [fontSizeClass]\n */\n fontSizeClass?: string;\n /**\n * The optional dot navigation class\n *\n * @memberof ICarouselControlsDotNavigationProps\n * @member {string} [dotClass]\n */\n dotClass?: string;\n}\n\n/**\n * The props for the preview navigation\n *\n * @interface ICarouselControlsPreviewNavigation\n */\ninterface ICarouselControlsPreviewNavigation {\n /**\n * The carousel images\n *\n * @memberof ICarouselControlsPreviewNavigation\n * @member {string[]} images\n */\n images: string[];\n}\n\n/**\n * The CarouselControlsProps\n *\n * @interface ICarouselControlsProps\n */\ninterface ICarouselControlsProps {\n /**\n * The carousel images\n *\n * @memberof ICarouselControlsProps\n * @member {string | string[]} [images]\n */\n images?: string | string[];\n /**\n * The navigation buttons for the carousel controls\n *\n * @memberof ICarouselControlsProps\n * @member {ICarouselControlsNavigationButtonsProps} [navigationButtons]\n */\n navigationButtons?: ICarouselControlsNavigationButtonsProps;\n /**\n * The dot navigation for the carousel controls\n *\n * @memberof ICarouselControlsProps\n * @member {ICarouselControlsDotNavigationProps} [dotNavigation]\n */\n dotNavigation?: ICarouselControlsDotNavigationProps;\n /**\n * The preview navigation configuration\n *\n * @memberof ICarouselControlsProps\n * @member {ICarouselControlsPreviewNavigation} [previewNavigation]\n */\n previewNavigation?: ICarouselControlsPreviewNavigation;\n}\n\n/**\n * Carousel Controls Handles the Carousel Context and Controls\n *\n * @param {ICarouselControlsProps} props - The props for the Carousel Controls\n * Component.\n * @returns {void} Carousel Controls Component with Context\n */\nexport function CarouselControls({\n navigationButtons,\n dotNavigation,\n previewNavigation,\n}: ICarouselControlsProps) {\n /**\n * @property {boolean} showNavigationButtons - Whether to show the navigation\n * @property {CarouselButtonSize} navigationButtonSize - The size of the\n * navigation buttons\n * @property {string} verticalOffsetClass - The optional vertical offset class\n */\n const {\n showNavigationButtons = true,\n navigationButtonSize = 'regular',\n verticalOffsetClass = '',\n rightArrowClasses = '',\n leftArrowClasses = '',\n } = navigationButtons || {};\n /**\n * The carousel context\n *\n * @constant {CarouselContext} carouselContext\n */\n const carouselContext = useContext(CarouselContext);\n /**\n * The current slide state\n *\n * @constant {number} currentSlide\n */\n const [currentSlide, setCurrentSlide] = useState(\n carouselContext.state.currentSlide\n );\n /**\n * The total slides state\n *\n * @constant {number} totalSlides\n */\n const [totalSlides, setTotalSlides] = useState(\n carouselContext.state.totalSlides\n );\n /**\n * The visible slides state\n *\n * @constant {number} visibleSlides\n */\n const [visibleSlides, setVisibleSlides] = useState(\n carouselContext.state.visibleSlides\n );\n /**\n * The\n *\n * @constant {string} breakpoint\n */\n const { breakpoint } = useWindowSize();\n\n /** Subscribes to any Carousel Context changes and sets it to the state */\n useEffect(() => {\n /** OnChange Handles the change of the carousel context */\n function onChange() {\n setCurrentSlide(carouselContext.state.currentSlide);\n setTotalSlides(carouselContext.state.totalSlides);\n setVisibleSlides(carouselContext.state.visibleSlides);\n }\n carouselContext.subscribe(onChange);\n return () => carouselContext.unsubscribe(onChange);\n }, [carouselContext]);\n\n const firstSlide = currentSlide === 0;\n const lastSlide = currentSlide + visibleSlides >= totalSlides;\n\n /**\n * Set Slide Sets the slide to the given index\n *\n * @param {number} index - The index of the slide to set.\n * @returns {void}\n */\n const setSlide = useCallback(\n (index: number): void => {\n carouselContext.setStoreState({ currentSlide: index });\n },\n [carouselContext]\n );\n\n return (\n <div data-testid=\"carousel-controls\">\n {/* Forward and Back Buttons */}\n {!firstSlide && showNavigationButtons && (\n <CarouselButton\n icon=\"arrowLeft\"\n data-testid=\"carousel-controls-back\"\n onClick={() => setSlide(currentSlide - 1)}\n className={`hidden md:flex absolute z-[1] ${verticalOffsetClass} ${\n leftArrowClasses ? leftArrowClasses : 'left-[5px]'\n }`}\n size={navigationButtonSize}\n />\n )}\n {!lastSlide && showNavigationButtons && (\n <CarouselButton\n icon=\"arrowRight\"\n data-testid=\"carousel-controls-forward\"\n onClick={() => setSlide(currentSlide + 1)}\n className={`hidden md:flex absolute z-[1] ${verticalOffsetClass} ${\n rightArrowClasses ? rightArrowClasses : 'right-[5px]'\n }`}\n size={navigationButtonSize}\n />\n )}\n {breakpoint === 'md' && previewNavigation?.images !== undefined ? (\n <CarouselPreviewNavigation\n images={previewNavigation?.images as string[]}\n currentSlide={currentSlide}\n setSlide={setSlide}\n classes={'hidden md:flex'}\n />\n ) : (\n <CarouselDotNavigation\n data-testid=\"carousel-dot-navigation\"\n currentSlide={currentSlide}\n setSlide={setSlide}\n totalSlides={totalSlides}\n fontSizeClass={dotNavigation?.fontSizeClass}\n dotClass={dotNavigation?.dotClass}\n />\n )}\n </div>\n );\n}\n\n/**\n * ICarousel Interface for the Carousel Component.\n *\n * @augments Partial<CarouselProviderProps>\n * @interface ICarousel\n */\nexport interface ICarousel\n extends Partial<CarouselProviderProps>,\n ICarouselControlsProps {\n /**\n * The children to display.\n *\n * @memberof ICarousel\n * @member {React.ReactNode[]} children\n */\n children: React.ReactNode[];\n /**\n * The classes to apply to the Carousel Component.\n *\n * @memberof ICarousel\n * @default ''\n * @member {string} [classes]\n */\n classes?: string;\n /**\n * The classes to apply to the Slider Component.\n *\n * @memberof ICarousel\n * @default ''\n * @member {string} [sliderClasses]\n */\n sliderClasses?: string;\n /**\n * The classes to apply to the Slide Component.\n *\n * @memberof ICarousel\n * @default ''\n * @member {string} [slideClasses]\n */\n slideClasses?: string;\n}\n\n/**\n * Carousel Carousel Component for displaying a list of items in a carousel.\n *\n * @param {ICarousel} props - The props for the Carousel Component.\n * @returns {React.FC<ICarousel>} Carousel Component\n */\nconst Carousel: React.FC<ICarousel> = ({\n naturalSlideWidth = 300,\n naturalSlideHeight = 400,\n visibleSlides,\n children,\n classes = '',\n sliderClasses = defaultSliderClasses,\n slideClasses = defaultSlideClasses,\n navigationButtons,\n dotNavigation,\n previewNavigation,\n}: ICarousel) => {\n const [calculatedVisibleSlides, setCalculatedVisibleSlides] = useState(1);\n\n const size = useWindowSize();\n\n /** Sets the number of visible slides based on the window size. */\n useEffect(() => {\n if (size.breakpoint === 'xs') {\n setCalculatedVisibleSlides(1);\n } else if (size.breakpoint === 'sm') {\n setCalculatedVisibleSlides(2);\n } else {\n setCalculatedVisibleSlides(3);\n }\n }, [size.breakpoint]);\n\n return (\n <CarouselProvider\n naturalSlideWidth={naturalSlideWidth}\n naturalSlideHeight={naturalSlideHeight}\n visibleSlides={visibleSlides || calculatedVisibleSlides}\n isIntrinsicHeight={true}\n totalSlides={children.length}\n >\n <div data-testid=\"carousel\" className={`relative ${classes}`}>\n <Slider className={sliderClasses}>\n {children.map((child, index) => (\n <Slide\n key={index}\n index={index}\n tabIndex={-1}\n className={slideClasses}\n >\n {child}\n </Slide>\n ))}\n </Slider>\n <CarouselControls\n navigationButtons={navigationButtons}\n dotNavigation={dotNavigation}\n previewNavigation={previewNavigation}\n />\n </div>\n </CarouselProvider>\n );\n};\n\nexport default Carousel;\n","// Today's date\nexport const today = new Date();\n// Tomorrow's Date\nexport const tomorrow = new Date(today.getTime() + 86400000);\n\n/**\n * Get a date object that is X minutes from now\n *\n * @param {number} minutes - Time in minutes\n * @returns {Date} A date object that is X minutes from now\n */\nexport const getDateXMinutesFromNow = (minutes: number) => {\n return new Date(new Date().getTime() + minutes * 60 * 1000);\n};\n\n/**\n * Check if a date is valid\n *\n * @param {string} date - The date to check\n * @returns {boolean} - True if the date is valid, false otherwise\n */\nexport const isDateValid = (date: string) => {\n return !isNaN(new Date(date).getTime());\n};\n"],"names":["__webpack_exports__","Z","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","Image","props","alt","loader","contentFulImageLoader","styling","size","font","children","rest","param","stylingClass","paragraphClass","concat","className","p","petName","ownerName","description","image","link","Link","href","jsxs","div","ContentfulImage","layout","objectFit","src","sizes","span","Paragraph","iconStateStyles","color","hovered","normal","disabled","shade","ButtonWithIcon_ButtonWithIcon","icon","onClick","classes","setHovered","useState","iconColor","iconShade","disabledClass","jsx_runtime","button","type","onMouseEnter","onMouseLeave","Icon","colorType","colorShade","VideoPlayer_VideoPlayer","title","video","muted","isOpen","setIsOpen","playerWrapperRef","useRef","closeModal","id","Transition","appear","show","as","Fragment","Dialog","onClose","initialFocus","Child","enter","enterFrom","enterTo","leave","leaveFrom","leaveTo","Panel","ButtonWithIcon","ref","ReactPlayer","playing","playsInline","url","controls","stopOnUnmount","volume","width","height","loaders_cdnSquareImageLoader","quality","cdnBaseUrl","process","undefined","imagePath","getImagePath","CdnSquareImage_CdnSquareImage","cdnSquareImageLoader","carouselButtonClasses","cva","variants","state","active","regular","small","CarouselButton_CarouselButton","iconColorShade","iconColorType","class","CarouselDotNavigation_CarouselDotNavigation","currentSlide","setSlide","totalSlides","fontSizeClass","dotClass","twMerge","Array","from","length","_","index","isActiveSlide","CarouselPreviewNavigation_CarouselPreviewNavigation","images","map","CdnSquareImage","loading","CarouselControls","navigationButtons","dotNavigation","previewNavigation","showNavigationButtons","navigationButtonSize","verticalOffsetClass","rightArrowClasses","leftArrowClasses","carouselContext","useContext","CarouselContext","setCurrentSlide","setTotalSlides","visibleSlides","setVisibleSlides","breakpoint","useWindowSize","useEffect","onChange","subscribe","unsubscribe","firstSlide","lastSlide","useCallback","setStoreState","CarouselButton","CarouselPreviewNavigation","CarouselDotNavigation","Carousel_Carousel","naturalSlideWidth","naturalSlideHeight","sliderClasses","slideClasses","calculatedVisibleSlides","setCalculatedVisibleSlides","CarouselProvider","isIntrinsicHeight","Slider","child","Slide","tabIndex","today","Date","tomorrow","getTime","getDateXMinutesFromNow","minutes","isDateValid","isNaN","date"],"sourceRoot":""}