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