{"version":3,"file":"static/chunks/892-fc1e2a6de5f2348a.js","mappings":"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","sources":["webpack://_N_E/../../libs/osc/carousel/src/lib/carousel-no-image.tsx","webpack://_N_E/../../libs/osc/carousel/src/lib/carousel-image.tsx","webpack://_N_E/../../libs/osc/carousel/src/lib/utils/carousel-analytics.ts","webpack://_N_E/../../libs/osc/carousel/src/lib/carousel-single.tsx","webpack://_N_E/../../libs/osc/carousel/src/index.ts"],"sourcesContent":["import cx from 'classnames';\nimport { useTranslation } from 'next-i18next';\n\nexport const CarouselNoImage = ({\n  className,\n  isFullSize = false,\n}: {\n  className?: string;\n  isFullSize?: boolean;\n}) => {\n  const { t } = useTranslation('osc-carousel');\n\n  return (\n    <div\n      className={cx(\n        '@container/no-image bg-bg-alt flex items-center justify-center',\n        { 'h-full w-full': isFullSize, 'aspect-[3/2]': !isFullSize },\n        className\n      )}\n    >\n      <span className=\"@[256px]/no-image:text-2xl @[150px]/no-image:text-base text-text-alt text-xs\">\n        {t('noPhotoAvailable')}\n      </span>\n    </div>\n  );\n};\n","import { useState } from 'react';\nimport type { ImageProps } from 'next/legacy/image';\nimport Image from 'next/legacy/image';\nimport { CarouselNoImage } from './carousel-no-image';\nimport { Caption } from '@dx-ui/osc-caption';\nimport type { CaptionProps } from '@dx-ui/osc-caption';\nimport classnames from 'classnames';\nimport { ANALYTICS_GLOBAL_CLICK_EVENT, trackEvent } from '@dx-ui/config-metrics';\nimport type { CarouselSingleMetrics } from './types/carousel-analytics';\n\nexport type CarouselImageProps = {\n  /** Image alt text. Defaults to \"Image showcasing selected Hotel\" */\n  alt?: string | null;\n  /** Pass in overrides for next/image component */\n  imageProps?: Omit<ImageProps, 'src'>;\n  /** source of image */\n  url: string;\n  captionData?: CaptionProps;\n  /** Whether it is the currently active image */\n  isActive?: boolean;\n  /** Analytics data */\n  metrics?: CarouselSingleMetrics;\n};\n\n/**\n * Component to render the carousel image. Includes error handling that will return a \"no photo available\" placeholder\n * in case of image error.\n * @returns JSX.Element\n */\nexport const CarouselImage = ({\n  alt,\n  imageProps,\n  url,\n  captionData,\n  isActive,\n  metrics,\n}: CarouselImageProps) => {\n  const [isImageError, setIsImageError] = useState(false);\n  const [isImageLoaded, setIsImageLoaded] = useState(false);\n\n  return (\n    <>\n      <div\n        className={classnames('bg-text/10 absolute inset-0 size-full shrink-0', {\n          'animate-pulse': !isImageLoaded,\n        })}\n      />\n      {isImageError ? (\n        <CarouselNoImage isFullSize />\n      ) : (\n        <figure className=\"relative size-full\">\n          <Image\n            alt={alt || ''}\n            className={classnames('absolute inset-0 size-full object-cover duration-500', {\n              'opacity-0': !isImageLoaded,\n              'opacity-100': isImageLoaded,\n            })}\n            layout=\"fill\"\n            onError={() => {\n              setIsImageError(true);\n            }}\n            onLoadingComplete={() => {\n              setIsImageLoaded(true);\n            }}\n            src={url}\n            unoptimized={true}\n            data-testid=\"carousel-image\"\n            aria-hidden={isActive ? 'false' : 'true'}\n            {...imageProps}\n          />\n          {captionData && isActive ? (\n            <Caption\n              caption={captionData?.caption}\n              captionLink={captionData?.captionLink}\n              metricsOnClick={() => metrics && trackEvent(ANALYTICS_GLOBAL_CLICK_EVENT, metrics)}\n            />\n          ) : null}\n        </figure>\n      )}\n    </>\n  );\n};\n","import {\n  ANALYTICS_NO_VALUE,\n  type BaseImageMetrics,\n  ImageClickID,\n  type ImageClickIDType,\n  ImageFunction,\n  ImageType,\n} from '@dx-ui/config-metrics';\nimport type { CarouselSingleMetrics } from '../types/carousel-analytics';\n\ntype GenerateCarouselSingleMetricsParams = {\n  metrics?: Partial<BaseImageMetrics>;\n  position?: number;\n  images?: { alt: string }[];\n  itemTitle?: string;\n  clickID: ImageClickIDType;\n  imageFunction?: (typeof ImageFunction)['Link'];\n};\n\n/**\n * Utility function to generate carousel metrics\n */\nexport function generateCarouselSingleMetrics({\n  metrics,\n  position,\n  images,\n  itemTitle = ANALYTICS_NO_VALUE,\n  clickID = ImageClickID.Scroll,\n  imageFunction,\n}: GenerateCarouselSingleMetricsParams): CarouselSingleMetrics {\n  const carouselMetrics = {\n    click: {\n      ...metrics?.click,\n      clickID,\n    },\n    osc: {\n      ...metrics?.osc,\n      image: {\n        ...metrics?.osc?.image,\n        headline: metrics?.osc?.image?.headline || ANALYTICS_NO_VALUE,\n        count: images?.length || 0,\n        position: position || 0,\n        itemTitle: itemTitle || ANALYTICS_NO_VALUE,\n        type: ImageType.Carousel,\n      },\n    },\n  };\n\n  if (imageFunction === ImageFunction.Link) {\n    carouselMetrics.osc.image = {\n      ...carouselMetrics.osc.image,\n      function: ImageFunction.Link,\n    };\n  }\n\n  return carouselMetrics;\n}\n\n/**\n * Utility function to generate CPM carousel metrics\n * The returned object will serve as a partial image metric object to be extended within the CarouselSingle component\n */\nexport function generateCpmCarouselMetrics(\n  headline: string | null | undefined,\n  clickID?: ImageClickIDType\n): Partial<BaseImageMetrics> {\n  return {\n    click: {\n      clickID: clickID ?? ImageClickID.Img,\n    },\n    osc: {\n      image: {\n        // All the other CarouselSingleMetrics attributes will be set in CarouselSingle\n        headline: headline || ANALYTICS_NO_VALUE,\n        type: ImageType.Carousel,\n      },\n    },\n  };\n}\n","/* eslint-disable react/display-name */\nimport cx from 'classnames';\nimport type * as React from 'react';\nimport { useRef, useState } from 'react';\nimport { useTranslation } from 'next-i18next';\nimport type { CaptionProps } from '@dx-ui/osc-caption';\nimport { Icon } from '@dx-ui/osc-icon';\nimport type { TFunction } from 'i18next';\nimport { CarouselImage } from './carousel-image';\nimport { CarouselNoImage } from './carousel-no-image';\nimport { useRect } from '@dx-ui/utilities-use-rect';\nimport { isRtl as isRtlLanguage } from '@dx-ui/utilities-get-language-direction';\nimport { useRouter } from 'next/router';\nimport {\n  ANALYTICS_GLOBAL_CLICK_EVENT,\n  ANALYTICS_NO_VALUE,\n  type BaseImageMetrics,\n  ImageClickID,\n  ImageFunction,\n  trackEvent,\n} from '@dx-ui/config-metrics';\nimport { generateCarouselSingleMetrics } from './utils/carousel-analytics';\n\nexport type CarouselImages = {\n  alt: string;\n  url: string;\n  captionData?: CaptionProps;\n  children?: React.ReactNode;\n};\n\nexport type CarouselSinglePropsBase = {\n  images?: CarouselImages[];\n  startingIndex?: number;\n  isLoading?: boolean;\n  onArrowClick?: (index: number) => void;\n  showAlternateControls?: boolean;\n  isTailored?: boolean;\n  metrics?: Partial<BaseImageMetrics>;\n};\n\nexport type CarouselSingleProps = CarouselSinglePropsBase & React.HTMLAttributes<HTMLDivElement>;\n\nconst CarouselNavigationButton = ({\n  children,\n  direction,\n  isTailored,\n  ...rest\n}: {\n  children: React.ReactNode;\n  direction: 'left' | 'right';\n  isTailored?: CarouselSinglePropsBase['isTailored'];\n} & React.HTMLAttributes<HTMLButtonElement>) => (\n  <button\n    className=\"relative flex appearance-none items-center overflow-hidden\"\n    type=\"button\"\n    {...rest}\n  >\n    {children}\n    <span\n      className={cx({\n        '@[256px]/carousel:px-2 py-2 px-1 bg-bg-inverse opacity-90': !isTailored,\n        'bg-[rgb(var(--color-background))] p-2 md:p-3': isTailored,\n      })}\n    >\n      <Icon\n        name=\"arrowhead-left\"\n        className={cx('@[256px]/carousel:size-7 @[448px]/carousel:size-8 h-3 w-5', {\n          '-scale-x-100': direction === 'right',\n          'fill-text': isTailored,\n          'fill-text-inverse': !isTailored,\n        })}\n      />\n    </span>\n  </button>\n);\n\nconst CarouselControls = ({\n  showAlternateControls,\n  activeIndex,\n  count,\n  isRtl = false,\n  isTailored = false,\n  handlePreviousButtonClick,\n  handleNextButtonClick,\n  t,\n}: {\n  isRtl: boolean;\n  isTailored?: CarouselSinglePropsBase['isTailored'];\n  showAlternateControls?: boolean;\n  count: number;\n  activeIndex: number;\n  handlePreviousButtonClick: () => void;\n  handleNextButtonClick: () => void;\n  t: TFunction<'osc-carousel'>;\n}) => {\n  const leftNav = (\n    <CarouselNavigationButton\n      data-testid=\"previousCarouselImage\"\n      direction={isRtl ? 'right' : 'left'}\n      onClick={handlePreviousButtonClick}\n      isTailored={isTailored}\n    >\n      <span className=\"sr-only\">{t('previousImage')}</span>\n    </CarouselNavigationButton>\n  );\n\n  const rightNav = (\n    <CarouselNavigationButton\n      data-testid=\"nextCarouselImage\"\n      direction={isRtl ? 'left' : 'right'}\n      onClick={handleNextButtonClick}\n      isTailored={isTailored}\n    >\n      <span className=\"sr-only\">{t('nextImage')}</span>\n    </CarouselNavigationButton>\n  );\n\n  const paginationCounter = showAlternateControls ? (\n    <>\n      <p\n        aria-hidden\n        className={cx('@[256px]/carousel:text-base select-none overflow-hidden text-xs', {\n          'bg-[rgb(var(--color-background))] p-2.5 md:p-4 text-xs tracking-wide font-semibold':\n            isTailored,\n          'text-text-inverse': !isTailored,\n        })}\n      >\n        {activeIndex + 1} / {count}\n      </p>\n      <span className=\"sr-only\" aria-live=\"polite\">\n        {t('imageCount', { activeIndex: activeIndex + 1, imageCount: count })}\n      </span>\n    </>\n  ) : (\n    <>\n      <p\n        data-osc-product=\"carousel-label\"\n        aria-hidden\n        className=\"bg-bg-inverse text-text-inverse @[256px]/carousel:text-sm @[448px]/carousel:text-base absolute bottom-0 right-0 flex select-none items-center overflow-hidden px-2 py-1 text-xs opacity-90 rtl:left-0 rtl:right-auto\"\n      >\n        {activeIndex + 1} / {count}\n      </p>\n      <span className=\"sr-only\" aria-live=\"polite\">\n        {t('imageCount', { activeIndex: activeIndex + 1, imageCount: count })}\n      </span>\n    </>\n  );\n\n  return showAlternateControls ? (\n    <div\n      data-testid=\"testAlternateControlClassName\"\n      className={cx('absolute flex', {\n        'bottom-0 right-10 opacity-90 bg-bg-inverse items-center': !isTailored,\n        'bottom-1 right-1 md:bottom-4 md:right-4 gap-0.5 justify-evenly items-stretch': isTailored,\n      })}\n    >\n      {isTailored ? (\n        <>\n          {leftNav}\n          {rightNav}\n          {paginationCounter}\n        </>\n      ) : (\n        <>\n          {leftNav}\n          {paginationCounter}\n          {rightNav}\n        </>\n      )}\n    </div>\n  ) : (\n    <>\n      {paginationCounter}\n      <div className=\"absolute inset-y-1/2 flex w-full items-center justify-between\">\n        {leftNav}\n        {rightNav}\n      </div>\n    </>\n  );\n};\n\n/**\n *\n * A carousel that displays a single image at a time. Includes a built in loading (shimmer) and error handling state\n * @returns JSX.element\n */\nexport const CarouselSingle = ({\n  className,\n  images,\n  startingIndex = 0,\n  onArrowClick,\n  isLoading = false,\n  showAlternateControls,\n  isTailored = false,\n  metrics,\n  ...rest\n}: CarouselSingleProps) => {\n  const { t } = useTranslation('osc-carousel');\n  const { locale = 'en' } = useRouter();\n  const isRtl = isRtlLanguage(locale);\n  const [activeIndex, setActiveIndex] = useState(startingIndex);\n  const [touchStart, setTouchStart] = useState(0);\n  const [touchEnd, setTouchEnd] = useState(0);\n  const ref = useRef<HTMLDivElement | null>(null);\n\n  const count = images?.length ?? 0;\n\n  const rect = useRect({ ref: count > 0 ? ref : { current: null } });\n\n  const width = rect?.width ?? 0;\n  const height = rect?.height ?? 0;\n  const imageTranslateX = `${!isRtl ? '-' : ''}${\n    activeIndex === 0 ? 0 : 100 / (count / activeIndex)\n  }%`;\n\n  const handleNextButtonClick = () => {\n    const newIndex = images && activeIndex === images.length - 1 ? 0 : activeIndex + 1;\n    if (onArrowClick) onArrowClick(newIndex);\n    setActiveIndex(newIndex);\n\n    trackEvent(\n      ANALYTICS_GLOBAL_CLICK_EVENT,\n      generateCarouselSingleMetrics({\n        metrics,\n        images,\n        clickID: ImageClickID.Scroll,\n        itemTitle:\n          images?.[activeIndex]?.captionData?.caption ||\n          images?.[activeIndex]?.alt ||\n          ANALYTICS_NO_VALUE,\n        position: activeIndex + 1, // 1-based index\n      })\n    );\n  };\n  const handlePreviousButtonClick = () => {\n    const newIndex = images && activeIndex === 0 ? images.length - 1 : activeIndex - 1;\n    if (onArrowClick) onArrowClick(newIndex);\n    setActiveIndex(newIndex);\n\n    trackEvent(\n      ANALYTICS_GLOBAL_CLICK_EVENT,\n      generateCarouselSingleMetrics({\n        metrics,\n        images,\n        clickID: ImageClickID.Scroll,\n        itemTitle:\n          images?.[activeIndex]?.captionData?.caption ||\n          images?.[activeIndex]?.alt ||\n          ANALYTICS_NO_VALUE,\n        position: activeIndex + 1, // 1-based index\n      })\n    );\n  };\n\n  const handleTouchStart = (e: React.TouchEvent<HTMLDivElement>) => {\n    e.stopPropagation();\n    setTouchStart(e.targetTouches[0]?.clientX ?? 0);\n  };\n  const handleTouchMove = (e: React.TouchEvent<HTMLDivElement>) => {\n    setTouchEnd(e.targetTouches[0]?.clientX ?? 0);\n  };\n  const handleTouchEnd = () => {\n    //swipe sensitivity can be adjusted - travel distance in [number] pixels of user swipe event\n    const SWIPE_SENSITIVITY = 50;\n    //swipe left\n    if (touchStart - touchEnd > SWIPE_SENSITIVITY && touchEnd > 0) handleNextButtonClick();\n    //swipe right\n    if (touchStart - touchEnd < -SWIPE_SENSITIVITY && touchEnd > 0) handlePreviousButtonClick();\n\n    setTouchStart(0);\n    setTouchEnd(0);\n  };\n\n  /** If content of gallery is loading present shimmer state to prevent CLS */\n  if (isLoading)\n    return (\n      <div\n        className={cx(\n          'bg-bg-alt relative aspect-[3/2] w-full animate-pulse overflow-hidden',\n          className\n        )}\n        data-testid=\"singleImageCarouselLoading\"\n        ref={ref}\n        {...rest}\n      />\n    );\n\n  /** No images are available return placeholder with message */\n  if (!images || !count) {\n    return <CarouselNoImage className={className} />;\n  }\n\n  return (\n    <div\n      className={cx('@container/carousel relative aspect-[3/2] w-full overflow-hidden', className)}\n      onTouchEnd={handleTouchEnd}\n      onTouchMove={handleTouchMove}\n      onTouchStart={handleTouchStart}\n      ref={ref}\n      {...rest}\n    >\n      <div\n        className=\"ease-out-quint relative flex select-none overflow-hidden transition duration-500\"\n        data-testid=\"singleImageCarousel\"\n        style={{\n          height,\n          width: `${count * 100}%`,\n          transform: `translate3d(${imageTranslateX}, 0, 0)`,\n        }}\n      >\n        {images?.map((imageProps, index) => (\n          <div\n            className=\"bg-bg-alt relative size-full overflow-hidden\"\n            key={`carousel-image-${imageProps.url}`}\n            style={{ width }}\n            data-testid={`image-carousel-wrap-${index + 1}`}\n          >\n            <CarouselImage\n              isActive={index === activeIndex}\n              {...imageProps}\n              imageProps={{ priority: index === 0 }}\n              metrics={generateCarouselSingleMetrics({\n                metrics,\n                position: index + 1, // 1-based index\n                images,\n                itemTitle: imageProps?.captionData?.caption || ANALYTICS_NO_VALUE,\n                clickID: ImageClickID.Img,\n                imageFunction: ImageFunction.Link,\n              })}\n            />\n            {imageProps.children ? <div>{imageProps.children}</div> : null}\n          </div>\n        ))}\n      </div>\n      {/* Only show carousel controls/count if we have more than 1 image passed in */}\n      {count > 1 ? (\n        <CarouselControls\n          handleNextButtonClick={handleNextButtonClick}\n          handlePreviousButtonClick={handlePreviousButtonClick}\n          count={count}\n          t={t}\n          activeIndex={activeIndex}\n          showAlternateControls={showAlternateControls}\n          isTailored={isTailored}\n          isRtl={isRtl}\n        />\n      ) : null}\n    </div>\n  );\n};\n\nexport default CarouselSingle;\n","export * from './lib/carousel-single';\nexport * from './lib/carousel-no-image';\nexport * from './lib/carousel-image';\nexport * from './lib/utils/carousel-analytics';\nexport * from './lib/types/carousel-analytics';\n"],"names":["CarouselNoImage","className","isFullSize","useTranslation","t","div","cx","span","CarouselImage","alt","imageProps","url","captionData","isActive","metrics","useState","isImageError","setIsImageError","isImageLoaded","setIsImageLoaded","classnames","figure","Image","layout","onError","onLoadingComplete","src","unoptimized","data-testid","aria-hidden","Caption","caption","captionLink","metricsOnClick","trackEvent","ANALYTICS_GLOBAL_CLICK_EVENT","generateCarouselSingleMetrics","position","images","itemTitle","ANALYTICS_NO_VALUE","clickID","ImageClickID","Scroll","imageFunction","carouselMetrics","click","osc","image","headline","count","length","type","ImageType","Carousel","ImageFunction","Link","function","CarouselNavigationButton","children","direction","isTailored","rest","button","Icon","name","CarouselControls","showAlternateControls","activeIndex","isRtl","handlePreviousButtonClick","handleNextButtonClick","leftNav","onClick","rightNav","paginationCounter","p","aria-live","imageCount","data-osc-product","CarouselSingle","rect","startingIndex","onArrowClick","isLoading","useRouter","locale","isRtlLanguage","setActiveIndex","touchStart","setTouchStart","touchEnd","setTouchEnd","ref","useRef","useRect","current","width","height","imageTranslateX","newIndex","onTouchEnd","handleTouchEnd","SWIPE_SENSITIVITY","onTouchMove","handleTouchMove","e","targetTouches","clientX","onTouchStart","handleTouchStart","stopPropagation","style","transform","map","index","priority","Img"],"sourceRoot":"","ignoreList":[]}