{"version":3,"file":"static/chunks/9967-ab0657b515a24551.js","mappings":"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","sources":["webpack://_N_E/../../libs/osc/responsive-image/src/lib/utils/element-selector.tsx","webpack://_N_E/../../libs/osc/responsive-image/src/lib/responsive-image.tsx","webpack://_N_E/../../libs/osc/responsive-image/src/lib/responsive-picture.tsx","webpack://_N_E/../../libs/osc/responsive-image/src/lib/utils/get-current-aspect-ratio-and-url.ts","webpack://_N_E/../../libs/osc/responsive-image/src/lib/index.ts","webpack://_N_E/../../libs/osc/responsive-image/src/index.ts","webpack://_N_E/../../libs/osc/tabs/src/lib/tabs.context.tsx","webpack://_N_E/../../libs/osc/tabs/src/lib/tabs.utils.ts","webpack://_N_E/../../libs/osc/tabs/src/lib/tab.button.tsx","webpack://_N_E/../../libs/osc/tabs/src/lib/tab.list.button.tsx","webpack://_N_E/../../libs/osc/tabs/src/lib/tab.list.tsx","webpack://_N_E/../../libs/osc/tabs/src/lib/scrollable/tab.list.tsx","webpack://_N_E/../../libs/osc/tabs/src/lib/tab.panel.tsx","webpack://_N_E/../../libs/osc/tabs/src/lib/tab.panels.tsx","webpack://_N_E/../../libs/osc/tabs/src/lib/tabs.tsx","webpack://_N_E/../../libs/osc/tabs/src/lib/util/icon-mapper.tsx","webpack://_N_E/../../libs/osc/tabs/src/lib/index.ts","webpack://_N_E/../../libs/osc/tabs/src/index.ts"],"sourcesContent":["import { createElement } from 'react';\n\nexport interface TagType extends React.HTMLAttributes<HTMLElement> {\n  figureTag: 'figure' | 'div' | 'span';\n  children: React.ReactNode;\n}\n\nexport const ElementSelector: React.FC<TagType> = ({ figureTag, children, ...props }) => {\n  return createElement(figureTag, props, children);\n};\n","import { useState } from 'react';\nimport cx from 'classnames';\nimport { Image } from 'next/dist/client/image-component';\nimport { Caption } from '@dx-ui/osc-caption';\nimport type { AspectRatio, TResponsiveImage } from './responsive-image.types';\nimport { ElementSelector } from './utils/element-selector';\nimport { logInfo } from '@dx-ui/framework-logger';\n\nconst BREAKPOINTS = {\n  xxs: 200,\n  xs: 320,\n  sm: 640,\n  md: 768,\n  lg: 1024,\n  xl: 1280,\n  xxl: 1440,\n  xxxl: 1920,\n  xxxxl: 2560,\n  xxxxxl: 3840,\n};\n\nfunction GetHeightForWidthAndAspectRatio(width: number, aspectRatio: AspectRatio) {\n  const heightWidthArray = aspectRatio.split(':');\n  const denominator = (heightWidthArray?.[0] || 1) as number;\n  const multiplier = (heightWidthArray?.[1] || 1) as number;\n  const height = (width * multiplier) / denominator;\n  return Math.round(height);\n}\n\nfunction getAspectRatio(width: number, height: number, urlString: string) {\n  const aspectRatio = width / height;\n\n  if (!Number.isFinite(aspectRatio) || aspectRatio === 0) {\n    logInfo(\n      'Customer_Experience_ImageError',\n      new Error('Invalid aspect ratio'),\n      `aspectRatio: ${aspectRatio}, width: ${width}, height: ${height}, imageUrl: \"${urlString}\"`\n    );\n\n    return 3 / 2;\n  }\n\n  return aspectRatio;\n}\n\nfunction parseQsNumber(qs: URLSearchParams, key: string, defaultValue: number) {\n  const str = qs.get(key) ?? defaultValue.toString();\n  const num = Math.abs(Number(str));\n\n  if (!Number.isFinite(num)) {\n    return defaultValue;\n  }\n\n  return num;\n}\n\n/**\n * Takes the image URL and reconstructs it with the appropriate aspect ratio, width and height.\n * Width values are multiplied by 2 to ensure high-res images are served.\n */\nfunction overrideImageUrl(urlString: string, targetHeight: number, targetWidth: number) {\n  const queryIndex = urlString.indexOf('?');\n  if (queryIndex === -1) {\n    return urlString;\n  }\n\n  const search = new URLSearchParams(urlString.slice(queryIndex) ?? '');\n\n  const sourceWidth = parseQsNumber(search, 'rw', 0);\n  const sourceHeight = parseQsNumber(search, 'rh', 0);\n  const sourceAspectRatio = getAspectRatio(sourceWidth, sourceHeight, urlString);\n\n  const targetAspectRatio = getAspectRatio(targetWidth, targetHeight, urlString);\n\n  if (targetAspectRatio > 1) {\n    search.set('rh', String(Math.round(targetWidth / sourceAspectRatio) * 2));\n    search.set('rw', String(targetWidth * 2));\n  } else {\n    search.set('rw', String(Math.round(targetHeight * sourceAspectRatio) * 2));\n    search.set('rh', String(targetHeight * 2));\n  }\n\n  return urlString.slice(0, queryIndex) + '?' + search.toString();\n}\n\n/**\n * Takes the component/image width and rounds it to the nearest breakpoint value.\n * Low bandwidth connections return the lowest breakpoint available.\n */\nconst getBreakpoint = (width: number, bandwidth: number) => {\n  const breakpoints = Object.values(BREAKPOINTS);\n  const maxBreakpoint = breakpoints[breakpoints.length - 1] ?? 0;\n  return width > maxBreakpoint\n    ? maxBreakpoint\n    : bandwidth > 50\n    ? breakpoints.find((breakpoint) => breakpoint >= width)\n    : BREAKPOINTS.xxs;\n};\n\n/**\n * Responsive Image wraps `next/image` to render an image that responds to tailwind breakpoints.\n */\n\nexport const aspectRatioMap: Record<AspectRatio, string> = {\n  '3:4': 'aspect-[3/4]',\n  '1:1': 'aspect-square',\n  '3:2': 'aspect-[3/2]',\n  '4:3': 'aspect-[4/3]',\n  '4:2': 'aspect-[4/2]',\n  '9:16': 'aspect-[9/16]',\n  '16:9': 'aspect-[16/9]',\n  '21:9': 'aspect-[21/9]',\n  '18:5': 'aspect-[18/5]',\n  '384:113': 'aspect-[384/113]',\n};\n\nexport const getAspectRatioClass = (aspectRatio: AspectRatio): string =>\n  aspectRatioMap[aspectRatio] || 'aspect-[3/2]';\n\nexport const ResponsiveImage = ({\n  id,\n  altText,\n  aspectRatio,\n  imageUrl,\n  className = '',\n  wrapperClassName,\n  wrapperTag,\n  captionData,\n  bandwidth = 100,\n  onImgLoaded,\n  priority = false,\n  width,\n  hFull = false,\n  maxHeight,\n  onClick,\n}: TResponsiveImage) => {\n  const [loaded, setLoaded] = useState(false);\n\n  const imageWidth = getBreakpoint(width, bandwidth) || 0;\n\n  const imageHeight = GetHeightForWidthAndAspectRatio(imageWidth, aspectRatio);\n  const resizedImageUrl = imageUrl ? overrideImageUrl(imageUrl, imageHeight, imageWidth) : '';\n  const captionExists =\n    typeof captionData === 'object' && Object.keys(captionData).length > 0 && captionData.caption;\n\n  const defaultWrapperTag = captionData ? 'figure' : 'div';\n\n  //TODO updates coming with NHCBP-5517\n  return (\n    <ElementSelector\n      figureTag={wrapperTag || defaultWrapperTag}\n      className={cx(\n        wrapperClassName,\n        `relative block w-full overflow-hidden bg-transparent`,\n        {\n          'h-full': hFull,\n        },\n        aspectRatio ? getAspectRatioClass(aspectRatio) : null\n      )}\n      style={{\n        maxHeight: maxHeight ? maxHeight : undefined,\n      }}\n    >\n      {resizedImageUrl && (\n        <Image\n          id={id}\n          className={cx(className, {\n            'invisible opacity-0': !loaded, // Added `opacity=0` css to hide the flickering of the loaded image(overlapping loading indicator div) happening due to the `visibility:visible` overriding style from 'next/image' img styles; invisble style is overriden here always\n            'opacity-100': loaded,\n          })}\n          alt={altText}\n          src={resizedImageUrl}\n          style={{\n            objectFit: 'cover',\n          }}\n          fill\n          onLoad={() => {\n            setLoaded(true);\n\n            if (onImgLoaded) {\n              //TODO tsc is erroniously infering onImgLoaded: never\n              onImgLoaded();\n            }\n          }}\n          data-testid=\"responsiveImageImg\"\n          unoptimized={true} // required because akamai image manager doesnt support this (will cause 403 otherwise)\n          priority={priority}\n          onClick={onClick}\n        />\n      )}\n\n      {!loaded ? (\n        <div\n          data-testid=\"image-loading-widget\"\n          className={cx('bg-bg-alt absolute inset-0 size-full shrink-0 animate-pulse')}\n        />\n      ) : null}\n      {\n        /*TODO tsc is erroniously infering captionData: some none object type*/\n        captionExists ? <Caption {...captionData} metricsOnClick={onClick} /> : null\n      }\n    </ElementSelector>\n  );\n};\n\nexport { GetHeightForWidthAndAspectRatio, BREAKPOINTS, overrideImageUrl, getBreakpoint };\nexport default ResponsiveImage;\n","import { useState } from 'react';\nimport cx from 'classnames';\nimport Image from 'next/image';\nimport { Caption } from '@dx-ui/osc-caption';\nimport type { TResponsivePicture } from './responsive-picture.types';\nimport {\n  overrideImageUrl,\n  BREAKPOINTS,\n  getBreakpoint,\n  GetHeightForWidthAndAspectRatio,\n  aspectRatioMap,\n} from './responsive-image';\nimport type { AspectRatio } from './responsive-image.types';\nimport { ElementSelector } from './utils/element-selector';\n\nconst getAspectRatioClass = ({\n  aspectRatio,\n  tabletAspectRatio,\n  mobileAspectRatio,\n}: {\n  aspectRatio: AspectRatio;\n  tabletAspectRatio?: AspectRatio;\n  mobileAspectRatio?: AspectRatio;\n}) => {\n  const defaultAspectRatio = 'aspect-[3/2]';\n\n  return [\n    mobileAspectRatio\n      ? aspectRatioMap[mobileAspectRatio] || defaultAspectRatio\n      : defaultAspectRatio,\n    tabletAspectRatio ? `sm:${aspectRatioMap[tabletAspectRatio] || defaultAspectRatio}` : '',\n    (mobileAspectRatio || tabletAspectRatio) && aspectRatio\n      ? `lg:${aspectRatioMap[aspectRatio] || defaultAspectRatio}`\n      : aspectRatioMap[aspectRatio] || defaultAspectRatio,\n  ]\n    .filter(Boolean)\n    .join(' ');\n};\n\nexport const ResponsivePicture = ({\n  id,\n  altText,\n  className = '',\n  wrapperClassName,\n  wrapperTag,\n  captionData,\n  bandwidth = 100,\n  onImgLoaded,\n  priority = false,\n  width,\n  onClick,\n  imageUrl,\n  aspectRatio,\n  mobileImageUrl,\n  mobileAspectRatio,\n  tabletImageUrl,\n  tabletAspectRatio,\n}: TResponsivePicture) => {\n  const [loaded, setLoaded] = useState(false);\n  const imageWidth = getBreakpoint(width, bandwidth) || 0;\n\n  // Optimized image URLs\n  const desktopImageHeight = GetHeightForWidthAndAspectRatio(imageWidth, aspectRatio);\n  const desktopResizedImageUrl = imageUrl\n    ? overrideImageUrl(imageUrl, desktopImageHeight, imageWidth)\n    : '';\n\n  const tabletResizedImageUrl =\n    tabletAspectRatio && tabletImageUrl\n      ? overrideImageUrl(\n          tabletImageUrl,\n          GetHeightForWidthAndAspectRatio(imageWidth, tabletAspectRatio),\n          imageWidth\n        )\n      : '';\n\n  const mobileResizedImageUrl =\n    mobileAspectRatio && mobileImageUrl\n      ? overrideImageUrl(\n          mobileImageUrl,\n          GetHeightForWidthAndAspectRatio(imageWidth, mobileAspectRatio),\n          imageWidth\n        )\n      : '';\n\n  const captionExists = captionData && Object.keys(captionData).length > 0 && captionData.caption;\n  const defaultWrapperTag = captionData ? 'figure' : 'div';\n\n  return (\n    <ElementSelector\n      data-testid=\"responsivePictureWrapper\"\n      figureTag={wrapperTag || defaultWrapperTag}\n      className={cx(\n        wrapperClassName,\n        'relative block w-full overflow-hidden bg-transparent',\n        getAspectRatioClass({\n          aspectRatio,\n          tabletAspectRatio,\n          mobileAspectRatio,\n        })\n      )}\n    >\n      {desktopResizedImageUrl && (\n        <picture data-testid=\"responsivePicture\">\n          {mobileImageUrl && (\n            <source\n              data-testid=\"mobileSource\"\n              media={`(max-width: ${BREAKPOINTS.sm}px)`}\n              srcSet={mobileResizedImageUrl}\n            />\n          )}\n          {tabletImageUrl && (\n            <source\n              data-testid=\"tabletSource\"\n              media={`(max-width: ${BREAKPOINTS.xl}px)`}\n              srcSet={tabletResizedImageUrl}\n            />\n          )}\n          <Image\n            id={id}\n            className={cx('object-cover', className, {\n              'invisible opacity-0': !loaded,\n              'opacity-100': loaded,\n            })}\n            alt={altText}\n            src={desktopResizedImageUrl}\n            fill\n            onLoad={() => {\n              setLoaded(true);\n              onImgLoaded?.();\n            }}\n            unoptimized={true}\n            priority={priority}\n            onClick={onClick}\n          />\n        </picture>\n      )}\n\n      {!loaded && (\n        <div\n          data-testid=\"image-loading-widget\"\n          className=\"bg-bg-alt absolute inset-0 size-full shrink-0 animate-pulse\"\n        />\n      )}\n      {captionExists && <Caption {...captionData} metricsOnClick={onClick} />}\n    </ElementSelector>\n  );\n};\n\nexport default ResponsivePicture;\n","import { BREAKPOINTS } from '../responsive-image';\nimport type { AspectRatio } from '../responsive-image.types';\n\ntype AspectRatioandUrlArgs = {\n  width: number;\n  imageUrlMobile?: string;\n  imageUrlTablet?: string;\n  imageUrlDesktop?: string;\n  aspectRatioMobile?: AspectRatio;\n  aspectRatioTablet?: AspectRatio;\n  aspectRatioDesktop?: AspectRatio;\n};\n\n/**\n * Returns the URL and the Aspect Ratio for the current screen size(mobile, desktop or tablet)\n *\n * @param width\n * @param imageUrlMobile\n * @param imageUrlTablet\n * @param imageUrlDesktop\n * @param imageUrlAllScreens\n * @param aspectRatioMobile\n * @param aspectRatioTablet\n * @param aspectRatioDesktop\n * @param aspectRatioAllScreens\n * @returns\n */\n\nexport const getCurrentAspectRatioAndUrl = ({\n  width,\n  imageUrlMobile,\n  imageUrlTablet,\n  imageUrlDesktop,\n  aspectRatioMobile,\n  aspectRatioTablet,\n  aspectRatioDesktop,\n}: AspectRatioandUrlArgs): { imageUrl: string; aspectRatio: AspectRatio } => {\n  const isMobile = width < BREAKPOINTS['sm'];\n\n  const isDesktop = width > BREAKPOINTS['xl'];\n\n  if (isMobile && imageUrlMobile && aspectRatioMobile) {\n    return { imageUrl: imageUrlMobile, aspectRatio: aspectRatioMobile };\n  }\n\n  if (isDesktop && imageUrlDesktop && aspectRatioDesktop) {\n    return { imageUrl: imageUrlDesktop, aspectRatio: aspectRatioDesktop };\n  }\n\n  if (!isDesktop && !isMobile && imageUrlTablet && aspectRatioTablet) {\n    return { imageUrl: imageUrlTablet, aspectRatio: aspectRatioTablet };\n  }\n\n  return { imageUrl: '', aspectRatio: '16:9' };\n};\n","export * from './responsive-image';\nexport * from './responsive-picture';\nexport * from './responsive-image.types';\nexport * from './responsive-picture.types';\nexport * from './utils/aspect-ratio-to-tailwind-class-converter';\nexport * from './utils/get-current-aspect-ratio-and-url';\n","export * from './lib';\n","import type * as React from 'react';\nimport { createContext, useContext } from 'react';\n\ntype TabsContext = {\n  active?: string;\n  activeIndex: number;\n  addRef: (ref: HTMLButtonElement | null) => void;\n  count: number;\n  onTabKeyDown: (e: React.KeyboardEvent<HTMLButtonElement>, value?: string) => void;\n  onTabSelect: (value?: string) => void;\n  setCount: (value: number) => void;\n};\n\nconst TabsContext = createContext<TabsContext>({\n  activeIndex: 0,\n  count: 0,\n} as TabsContext);\n\nconst useTabs = () => useContext(TabsContext);\n\nexport { TabsContext, useTabs };\nexport default TabsContext;\n","export function sanitizeId(id?: string) {\n  return id?.replace(/\\s/g, '-');\n}\n","import type * as React from 'react';\nimport { useTabs } from './tabs.context';\nimport cx from 'classnames';\nimport { sanitizeId } from './tabs.utils';\n\ntype TabButton = {\n  activeClassName?: string;\n  inactiveClassName?: string;\n  handleOnClick?: (value: React.MouseEvent<HTMLButtonElement>) => void;\n} & React.ButtonHTMLAttributes<HTMLButtonElement>;\n\n/**\n * The `TabButton` component is used to setup the a11y attributes for the tab button. it accepts `className` and `activeClassName`/`inactiveClassName` props that are applied when the tab is active/inactive.\n */\nconst TabButton: React.FC<React.PropsWithChildren<TabButton>> = ({\n  activeClassName,\n  inactiveClassName,\n  id,\n  className,\n  handleOnClick,\n  ...rest\n}) => {\n  const { active, addRef, onTabKeyDown, onTabSelect } = useTabs();\n  const safeId = sanitizeId(id);\n  const isActive = active === safeId;\n\n  const handleOnTabClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n    handleOnClick?.(event);\n    onTabSelect(safeId);\n  };\n\n  return (\n    <button\n      id={safeId}\n      aria-controls={`tab-panel-${safeId}`}\n      role=\"tab\"\n      aria-selected={isActive}\n      tabIndex={isActive ? 0 : -1}\n      onClick={handleOnTabClick}\n      onKeyDown={(e) => onTabKeyDown(e, safeId)}\n      ref={(ref) => addRef(ref)}\n      className={cx('appearance-none', className, {\n        [activeClassName as string]: isActive && !!activeClassName,\n        [inactiveClassName as string]: !isActive && !!inactiveClassName,\n      })}\n      type=\"button\"\n      {...rest}\n    />\n  );\n};\n\nexport { TabButton };\nexport default TabButton;\n","import type * as React from 'react';\nimport type { TabButton as TabButtonType } from './tab.button';\nimport { TabButton } from './tab.button';\n\n/**\n * The `TabListButton` component extends the `TabButton` component and is used as the default styles for the OSC component, but doesn't need to be used and the developer can provide their own `TabButton` component if they wish.\n */\nconst TabListButton: React.FC<React.PropsWithChildren<TabButtonType>> = ({ ...rest }) => (\n  <TabButton\n    className=\"hover:text-primary focus:text-primary grow cursor-pointer appearance-none whitespace-nowrap border-b-4 border-transparent px-4 py-2 font-bold md:whitespace-normal\"\n    activeClassName=\"!border-primary text-primary brand-es:!border-secondary\"\n    inactiveClassName=\"border-transparent text-text-alt\"\n    {...rest}\n  />\n);\n\nexport { TabListButton };\nexport default TabListButton;\n","import * as React from 'react';\nimport cx from 'classnames';\n\ntype TabList = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * The `TabList` component is used to render the tab buttons. It sets up a11y properties for the best compliance with the WCAG 2.0 accessibility guidelines.\n */\nconst TabList = React.forwardRef<HTMLDivElement, TabList>(\n  ({ className, ...rest }, forwardedRef) => (\n    <div\n      role=\"tablist\"\n      className={cx('flex justify-start overflow-x-auto px-1 pt-2', className)}\n      ref={forwardedRef}\n      {...rest}\n    />\n  )\n);\n\nTabList.displayName = 'TabList';\n\nexport { TabList };\nexport default TabList;\n","import * as React from 'react';\nimport cx from 'classnames';\nimport type { Argument } from 'classnames';\nimport { useWindowSize, useResizeObserver } from 'usehooks-ts';\nimport { BREAKPOINTS } from '@dx-ui/osc-responsive-image';\nimport { useTranslation } from 'next-i18next';\nimport { TabListButton } from '../tab.list.button';\nimport { useForkedRef } from '@dx-ui/utilities-use-forked-ref';\nimport { Icon } from '@dx-ui/osc-icon';\nimport { isRtl as isRTL } from '@dx-ui/utilities-get-language-direction';\nimport { useRect } from '@dx-ui/utilities-use-rect';\nimport { useRouter } from 'next/router';\n\ntype TabListScrollable = React.HTMLAttributes<HTMLDivElement> & {\n  leftArrowWrapperClassName?: Argument;\n  rightArrowWrapperClassName?: Argument;\n};\n\nconst TabListScrollable = React.forwardRef<HTMLDivElement, TabListScrollable>(\n  (\n    { className, leftArrowWrapperClassName, rightArrowWrapperClassName, children, id, ...rest },\n    forwardedRef\n  ) => {\n    const arrayChildren = React.Children.toArray(children);\n    const { width = 0 } = useWindowSize();\n    const { t } = useTranslation('osc-scrollable-tabs');\n    const { locale = 'en' } = useRouter();\n    const isRtl = isRTL(locale);\n    const tablistRef = React.useRef<React.ElementRef<'div'>>(null);\n    const ref = useForkedRef(forwardedRef, tablistRef);\n    const [isBackwardArrowVisible, setBackwardArrowVisible] = React.useState(false);\n    const [isForwardArrowVisible, setForwardArrowVisible] = React.useState(false);\n\n    const [focusedTabId, setFocusedTabId] = React.useState<string | null>(null);\n\n    //The purpose of this is to adjust the scroll position of the selected tab when switching between tabs adds vertical scrollbar to the screen.\n    useResizeObserver({\n      ref: tablistRef,\n      box: 'border-box',\n      onResize: () => {\n        if (tablistRef.current && focusedTabId) {\n          const focusedTab = document.getElementById(focusedTabId);\n\n          if (focusedTab) {\n            const { scrollLeft } = tablistRef.current;\n            //excluding padding of the Scrollable Div\n            //The distance from the beginning of the tablist div to the left border of the focused button\n            const distanceFromButtonToBeginningOfTabListDiv =\n              focusedTab.offsetLeft - tablistRef.current.scrollLeft;\n            const buttonWidth = focusedTab.offsetWidth;\n            //excluding scrollable tabs\n            const tablistWidth = tablistRef.current.offsetWidth;\n\n            tablistRef.current.scrollLeft = adjustScrollPosition(\n              distanceFromButtonToBeginningOfTabListDiv,\n              buttonWidth,\n              tablistWidth,\n              scrollLeft\n            );\n          }\n        }\n      },\n    });\n\n    const updateArrowVisibility = React.useCallback(\n      (rect: DOMRect | undefined) => {\n        //number of pixels that an element's content is scrolled from its left edge\n        const scrollLeft = tablistRef.current?.scrollLeft ?? 0;\n        // measurement of the width of an element's content, including content not visible on the screen due to overflow\n        const scrollWidth = tablistRef.current?.scrollWidth ?? 0;\n        //width of the tablist div excluding hidden tabs due to scroll\n        const tabListWidth = rect?.width || 0;\n        //indicates whether we need a scroll or not\n        const widthDiff = scrollWidth - tabListWidth;\n        //widthDiff > 0 means we need arrows\n        //for LTR, checking if scrollLeft value is more than 5 pixels, that means we need to let the user scroll backwards using arrows.\n        //similar is being checked for RTL.\n        const showScrollBackwardArrow = isRtl\n          ? scrollLeft < -5 && widthDiff > 0\n          : scrollLeft > 5 && widthDiff > 0;\n        //widthDiff > 0 means we need arrows\n        //for LTR, once widthDiff is almost the same as scrollLeft that means we are close to the end of the scroll.\n        //For the last 5 pixels of the scroll the arrow dissapears.\n        //similar is being checked for RTL.\n        const showScrollForwardArrow = isRtl\n          ? widthDiff > 0 && widthDiff > -scrollLeft + 5\n          : widthDiff > 0 && widthDiff - scrollLeft > 5;\n\n        setBackwardArrowVisible(showScrollBackwardArrow);\n        setForwardArrowVisible(showScrollForwardArrow);\n      },\n      [isRtl]\n    );\n\n    const tabListRect = useRect({ ref: tablistRef, onResize: updateArrowVisibility });\n    const onTabListScroll = React.useCallback(\n      () => tabListRect && updateArrowVisibility(tabListRect),\n      [updateArrowVisibility, tabListRect]\n    );\n\n    const threeItems = arrayChildren.length === 3;\n    const fourItems = arrayChildren.length === 4;\n\n    const getScrollMultiplier = () => {\n      //Checking if there are 3 or 4 tabs or the device is tablet or mobile.\n      if (threeItems || fourItems || width <= BREAKPOINTS['lg']) {\n        // scroll 50% of the offset width when there are less items or on smaller screens\n        return 0.5;\n      } else {\n        // at 40% of the offset width, each click scrolls a smaller distance. This works better for larger screens or higher item counts\n        return 0.4;\n      }\n    };\n\n    const scrollForward = (scrollLeft: number, offsetWidth: number) => {\n      return scrollLeft + offsetWidth * getScrollMultiplier();\n    };\n    const scrollBackward = (scrollLeft: number, offsetWidth: number) => {\n      return scrollLeft - offsetWidth * getScrollMultiplier();\n    };\n\n    const rightArrowHandler = () => {\n      if (tablistRef.current) {\n        const { scrollLeft, offsetWidth } = tablistRef.current;\n        if (isRtl) {\n          tablistRef.current.scrollLeft = scrollBackward(scrollLeft, offsetWidth);\n        } else {\n          tablistRef.current.scrollLeft = scrollForward(scrollLeft, offsetWidth);\n        }\n      }\n    };\n\n    const leftArrowhandler = () => {\n      if (tablistRef.current) {\n        const { scrollLeft, offsetWidth } = tablistRef.current;\n        if (isRtl) {\n          tablistRef.current.scrollLeft = scrollForward(scrollLeft, offsetWidth);\n        } else {\n          tablistRef.current.scrollLeft = scrollBackward(scrollLeft, offsetWidth);\n        }\n      }\n    };\n\n    function adjustScrollPosition(\n      distanceFromButtonToBeginningOfTabListDiv: number,\n      buttonWidth: number,\n      tablistWidth: number,\n      scrollLeft: number\n    ) {\n      //the padding value in rems\n      const paddingLeft = 0.25; //the \"px-1\" class. paddingLeft = paddingRight\n      const leftPaddingOfScrollableDiv =\n        paddingLeft * parseFloat(getComputedStyle(document.documentElement).fontSize);\n      //Adjusting the scroll position if the focused button is not fully visible to the user\n      //This if statement checks if the focused button overflows to the right(forwards) of the tablist div\n      //if it is, the scroll position is adjusted to make focused button fully visible.\n      if (\n        distanceFromButtonToBeginningOfTabListDiv + buttonWidth >=\n        tablistWidth - leftPaddingOfScrollableDiv\n      ) {\n        return (\n          scrollLeft +\n          (distanceFromButtonToBeginningOfTabListDiv +\n            buttonWidth +\n            leftPaddingOfScrollableDiv -\n            tablistWidth)\n        );\n      }\n      //Adjusting the scroll position if the focused button is not fully visible to the user\n      //This if statement checks if the focused button overflows to the left(backwards) of the tablist div\n      //if it is, the scroll position is adjusted to make focused button fully visible.\n      if (distanceFromButtonToBeginningOfTabListDiv < leftPaddingOfScrollableDiv) {\n        return (\n          scrollLeft - (leftPaddingOfScrollableDiv - distanceFromButtonToBeginningOfTabListDiv)\n        );\n      }\n\n      return scrollLeft;\n    }\n\n    const scrollToFocusedItem = (e: React.FocusEvent<HTMLButtonElement>) => {\n      setFocusedTabId(e.target.id);\n      if (tablistRef.current) {\n        const { scrollLeft } = tablistRef.current;\n        //excluding padding of the Scrollable Div\n        //The distance from the beginning of the tablist div to the left border of the focused button\n        const distanceFromButtonToBeginningOfTabListDiv =\n          e.target.offsetLeft - tablistRef.current.scrollLeft;\n        const buttonWidth = e.target.offsetWidth;\n        //excluding scrollable tabs\n        const tablistWidth = tablistRef.current.offsetWidth;\n\n        tablistRef.current.scrollLeft = adjustScrollPosition(\n          distanceFromButtonToBeginningOfTabListDiv,\n          buttonWidth,\n          tablistWidth,\n          scrollLeft\n        );\n      }\n    };\n\n    if (arrayChildren.length < 1) return null;\n    const lessOrEqual5 = arrayChildren.length <= 5;\n    const lessOrEqual2 = arrayChildren.length <= 2;\n\n    return (\n      //28px is the width of the svg arrow icon\n      <div\n        className={cx('relative', {\n          'mx-[28px] 2xl:m-0': !lessOrEqual5,\n          'mx-[28px] lg:m-0': lessOrEqual5 && !lessOrEqual2,\n          'm-0': lessOrEqual2,\n        })}\n      >\n        <div\n          role=\"tablist\"\n          className={cx(\n            'flex justify-start overflow-x-auto px-1 pt-2 motion-safe:scroll-smooth',\n            className\n          )}\n          ref={ref}\n          onScroll={onTabListScroll}\n          aria-labelledby={id}\n          {...rest}\n        >\n          {isBackwardArrowVisible ? (\n            <div\n              className={cx(\n                'from-bg pointer-events-none absolute start-0 z-10 flex h-full w-1/5 -translate-x-[28px] justify-start bg-gradient-to-r pb-3 lg:w-80 rtl:translate-x-[28px] rtl:bg-gradient-to-l',\n                { 'block lg:hidden': lessOrEqual5 && !lessOrEqual2, hidden: lessOrEqual2 },\n                leftArrowWrapperClassName\n              )}\n            >\n              <button\n                className=\"pointer-events-auto\"\n                onClick={leftArrowhandler}\n                aria-hidden\n                tabIndex={-1}\n                data-testid=\"scrollBackward\"\n                type=\"button\"\n              >\n                {isRtl ? (\n                  <Icon name=\"arrowhead-right\" size=\"md\" />\n                ) : (\n                  <Icon name=\"arrowhead-left\" size=\"md\" />\n                )}\n                <span className=\"sr-only\">{t('scrollBackward')}</span>\n              </button>\n            </div>\n          ) : null}\n\n          {React.Children.map(arrayChildren, (child) => {\n            if (React.isValidElement(child) && child.type === TabListButton)\n              return React.cloneElement(child as React.ReactElement, {\n                onFocus: (e: React.FocusEvent<HTMLButtonElement>) => {\n                  child.props?.onFocus?.();\n                  scrollToFocusedItem(e);\n                },\n              });\n          })}\n\n          {isForwardArrowVisible ? (\n            <div\n              className={cx(\n                'from-bg pointer-events-none absolute end-0 flex h-full w-1/5 translate-x-[28px] justify-end bg-gradient-to-l pb-3 lg:w-80 rtl:-translate-x-[28px] rtl:bg-gradient-to-r',\n                { 'block lg:hidden': lessOrEqual5 && !lessOrEqual2, hidden: lessOrEqual2 },\n                rightArrowWrapperClassName\n              )}\n            >\n              <button\n                onClick={rightArrowHandler}\n                className=\"pointer-events-auto\"\n                aria-hidden\n                tabIndex={-1}\n                data-testid=\"scrollForward\"\n                type=\"button\"\n              >\n                {isRtl ? (\n                  <Icon name=\"arrowhead-left\" size=\"md\" />\n                ) : (\n                  <Icon name=\"arrowhead-right\" size=\"md\" />\n                )}\n                <span className=\"sr-only\">{t('scrollForward')}</span>\n              </button>\n            </div>\n          ) : null}\n        </div>\n      </div>\n    );\n  }\n);\n\nTabListScrollable.displayName = 'TabListScrollable';\n\nexport { TabListScrollable };\nexport default TabListScrollable;\n","import cx from 'classnames';\nimport type * as React from 'react';\nimport { forwardRef } from 'react';\nimport { useTabs } from './tabs.context';\nimport { sanitizeId } from './tabs.utils';\n\ntype TabPanel = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * The `TabPanel` component is used to render the content of the `Tab` component. It sets up a11y properties for the best compliance with the WCAG 2.0 accessibility guidelines.\n */\nconst TabPanel = forwardRef<HTMLDivElement, TabPanel>(\n  ({ id, className, ...rest }, forwardedRef) => {\n    const { active } = useTabs();\n    const safeId = sanitizeId(id);\n    const isActive = active === safeId;\n\n    return (\n      <div\n        id={`tab-panel-${safeId}`}\n        aria-labelledby={safeId}\n        aria-hidden={!isActive}\n        role=\"tabpanel\"\n        tabIndex={0}\n        className={cx('w-full', className, {\n          hidden: !isActive,\n        })}\n        ref={forwardedRef}\n        {...rest}\n      />\n    );\n  }\n);\n\nTabPanel.displayName = 'TabPanel';\n\nexport { TabPanel };\nexport default TabPanel;\n","import { useTabs } from './tabs.context';\nimport * as React from 'react';\nimport { useEffect } from 'react';\nimport cx from 'classnames';\n\ntype TabPanels = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * The `TabPanels` component is used as a wrapper for the `TabPanel` components. It is important to use as it sets the count of components that helps set the focuse correctly.\n */\nconst TabPanels: React.FC<React.PropsWithChildren<TabPanels>> = ({\n  children,\n  className,\n  ...rest\n}) => {\n  const { setCount } = useTabs();\n  useEffect(() => {\n    setCount(React.Children.count(children));\n  }, [children, setCount]);\n\n  return (\n    <div className={cx('relative flex w-full', className)} {...rest}>\n      {children}\n    </div>\n  );\n};\n\nTabPanels.displayName = 'TabPanels';\n\nexport { TabPanels };\nexport default TabPanels;\n","import cx from 'classnames';\nimport * as React from 'react';\nimport { forwardRef, useEffect, useState } from 'react';\nimport type { TabsContext as TabsContextType } from './tabs.context';\nimport { TabsContext } from './tabs.context';\nimport { isRtl as isRTL } from '@dx-ui/utilities-get-language-direction';\nimport { sanitizeId } from './tabs.utils';\nimport { useRouter } from 'next/router';\n\nexport type TabsBaseProps = {\n  /** change the tabpanel on arrow key */\n  changeWithArrow?: boolean;\n  /** change the tabpanel on Up and Down keys. Works only if changeWithArrow is also true.   */\n  useUpDownArrows?: boolean;\n  /** id of tab that should be active by default */\n  defaultActive?: string;\n  /** callback with the id of the active tab */\n  onTabChange?: (id?: string) => void;\n};\n\ntype Tabs = TabsBaseProps & React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * `Tabs` is a container component that holds the tabs and their content. The set of Tab components are composed inside the Tabs component and have their own context. There should be a `TabButton` or a component that extends `TabButton` with an `id` prop that correlates to a `TabPanel` component.\n *\n * For a11y, there is a `changeWithArrow` prop that will change the tabpanel on arrow key, changing the default behavior to change the tab on enter key.\n *\n * ```jsx\n * <Tabs>\n *  <TabList>\n *    <TabButton id=\"tab1\">Tab 1</TabButton>\n *    <TabButton id=\"tab2\">Tab 2</TabButton>\n *  </TabList>\n *  <TabPanels>\n *    <TabPanel id=\"tab1\">\n *      <p>Tab 1 content</p>\n *    </TabPanel>\n *    <TabPanel id=\"tab2\">\n *      <p>Tab 2 content</p>\n *    </TabPanel>\n *  </TabPanels>\n * </Tabs>\n * ```\n */\nexport const Tabs = forwardRef<HTMLDivElement, Tabs>(\n  (\n    { changeWithArrow, useUpDownArrows, defaultActive, onTabChange, className, children, ...rest },\n    forwardedRef\n  ) => {\n    const [active, setActive] = useState(sanitizeId(defaultActive));\n    const [activeIndex, setActiveIndex] = useState<number>(0);\n    const [count, setCount] = useState<number>(0);\n    const { locale = 'en' } = useRouter();\n    const isRtl = isRTL(locale);\n    const refs: HTMLButtonElement[] = React.useMemo(() => [], []);\n    const addRef: TabsContextType['addRef'] = (ref) =>\n      ref ? (refs.includes(ref) ? refs : refs.push(ref)) : refs;\n\n    const changeActiveTab = React.useCallback(\n      (id?: string) => {\n        setActive(id);\n        setActiveIndex(refs.findIndex((ref) => ref.id === id));\n\n        if (onTabChange) {\n          onTabChange(id);\n        }\n      },\n      [onTabChange, refs]\n    );\n\n    const nextTabIndex = (currentIndex: number) =>\n      currentIndex + 1 <= count - 1 ? currentIndex + 1 : 0;\n    const previousTabIndex = (currentIndex: number) =>\n      currentIndex - 1 >= 0 ? currentIndex - 1 : count - 1;\n\n    const isModifiedKeyStroke = (e: React.KeyboardEvent<HTMLButtonElement>) =>\n      Boolean(e.shiftKey || e.altKey || e.ctrlKey || e.metaKey);\n\n    const onTabKeyDown: TabsContextType['onTabKeyDown'] = (e, id) => {\n      if (isModifiedKeyStroke(e)) {\n        return false;\n      }\n\n      const index = refs.findIndex((ref) => ref.id === id);\n      let tabRef = 0;\n      switch (e.key) {\n        case 'ArrowUp':\n        case 'ArrowLeft':\n          if (e.key === 'ArrowUp' && !useUpDownArrows) {\n            break;\n          }\n          e.preventDefault();\n          tabRef = isRtl ? nextTabIndex(index) : previousTabIndex(index);\n          if (changeWithArrow) {\n            changeActiveTab(refs[tabRef]?.getAttribute('id') || id);\n          }\n          refs[tabRef]?.focus();\n          break;\n        case 'ArrowDown':\n        case 'ArrowRight':\n          if (e.key === 'ArrowDown' && !useUpDownArrows) {\n            break;\n          }\n          e.preventDefault();\n          tabRef = isRtl ? previousTabIndex(index) : nextTabIndex(index);\n          if (changeWithArrow) {\n            changeActiveTab(refs[tabRef]?.getAttribute('id') || id);\n          }\n          refs[tabRef]?.focus();\n          break;\n        case 'Enter':\n        case ' ':\n          changeActiveTab(id);\n          break;\n        case 'End':\n          e.preventDefault();\n          refs[count - 1]?.focus();\n          break;\n        case 'Home':\n          e.preventDefault();\n          refs[0]?.focus();\n          break;\n        // no default\n      }\n    };\n    const onTabSelect: TabsContextType['onTabSelect'] = (id) => changeActiveTab(id);\n\n    useEffect(() => {\n      if (!defaultActive) {\n        refs.length > 0 && changeActiveTab(refs[0]?.id);\n      }\n    }, [changeActiveTab, defaultActive, refs]);\n\n    return (\n      <TabsContext.Provider\n        value={{\n          active,\n          activeIndex,\n          addRef,\n          count,\n          onTabKeyDown,\n          onTabSelect,\n          setCount,\n        }}\n      >\n        <div ref={forwardedRef} className={cx('relative', className)} {...rest}>\n          {children}\n        </div>\n      </TabsContext.Provider>\n    );\n  }\n);\n\nTabs.displayName = 'Tabs';\n\nexport default Tabs;\n","import type { IconNames, EYIconNames, ESIconNames, HPIconNames } from '@dx-ui/osc-icon';\n\nexport const brandIconMapper: {\n  [key: string]:\n    | { brandCode: 'EY'; name: (typeof EYIconNames)[number] }\n    | {\n        brandCode: 'ES';\n        name: (typeof ESIconNames)[number];\n        invertedName: (typeof ESIconNames)[number];\n      }\n    | {\n        brandCode: 'HP';\n        name: (typeof HPIconNames)[number];\n        invertedName: (typeof HPIconNames)[number];\n      };\n} = {\n  livsmartBreakfast: { brandCode: 'EY', name: 'breakfast' },\n  livsmartFitness: { brandCode: 'EY', name: 'fitness' },\n  livsmartGrill: { brandCode: 'EY', name: 'grill' },\n  livsmartKitchen: { brandCode: 'EY', name: 'kitchen' },\n  livsmartLaundry: { brandCode: 'EY', name: 'laundry' },\n  livsmartPetFriendly: { brandCode: 'EY', name: 'pet-friendly' },\n  livsmartStudio: { brandCode: 'EY', name: 'studio' },\n  embassyBreakfast: { brandCode: 'ES', name: 'breakfast', invertedName: 'breakfast_inverted' },\n  embassyFitness: { brandCode: 'ES', name: 'fitness', invertedName: 'fitness_inverted' },\n  embassyReception: { brandCode: 'ES', name: 'drink', invertedName: 'drink_inverted' },\n  hamptonHexagon: { brandCode: 'HP', name: 'hex', invertedName: 'hex_inverted' },\n} as const;\n\nexport const iconMapper: {\n  [key: string]: (typeof IconNames)[number];\n} = {\n  twentyFourHourMemberService: 'clock',\n  access: 'access',\n  account: 'user',\n  airlineMiles: 'airport',\n  amazonBox: 'amazon',\n  americanExpress: 'credit-card',\n  benefitsStar: 'star-circle',\n  carRental: 'car-rental',\n  chooseYourRoom: 'choose-your-room',\n  complimentaryBreakfast: 'hot-breakfast',\n  deviceApp: 'mobile',\n  diamond: 'diamond',\n  digitalCheckin: 'app',\n  digitalKey: 'digital-key',\n  dining: 'dining',\n  eliteRolloverNights: 'award',\n  fifthNightFree: 'free-nights',\n  freeWifi: 'wifi',\n  giftPoints: 'gift',\n  honorsDiscount: 'price',\n  honorsOffers: 'event',\n  lateCheckout: 'check-out',\n  loungeAccess: 'lounge',\n  lyftRides: 'lyft',\n  onPropertyRewards: 'rewards',\n  orderAhead: 'order-ahead',\n  points: 'points',\n  pointsMoney: 'points-and-money',\n  poolPoints: 'pool-points',\n  pointsPromotions: 'points-promotions',\n  premiumWifi: 'wifi',\n  roomGuarantee: 'check-in',\n  roomUpgrade: 'room-upgrade',\n  secondGuest: 'users',\n  transferPoints: 'transfer',\n  waterBottle: 'water-bottle',\n  hotelStays: 'hotel',\n  convertPoints: 'convert-points',\n  buyPoints: 'buy-points',\n  meetingEvents: 'meeting',\n  hgv: 'keys',\n  allInclusiveSpaDiscount: 'spa',\n  cookie: 'cookie',\n};\n","export * from './tab.button';\nexport * from './tab.list.button';\nexport * from './tab.list';\nexport * from './scrollable/tab.list';\nexport * from './tab.panel';\nexport * from './tab.panels';\nexport * from './tabs.context';\nexport * from './tabs.utils';\nexport * from './tabs';\nexport * from './util/icon-mapper';\n","export * from './lib/index';\n"],"names":["ElementSelector","figureTag","children","props","createElement","BREAKPOINTS","xxs","xs","sm","md","lg","xl","xxl","xxxl","xxxxl","xxxxxl","GetHeightForWidthAndAspectRatio","width","aspectRatio","heightWidthArray","split","denominator","Math","round","multiplier","getAspectRatio","height","urlString","Number","isFinite","logInfo","parseQsNumber","qs","key","defaultValue","num","abs","get","toString","overrideImageUrl","targetHeight","targetWidth","queryIndex","indexOf","search","URLSearchParams","slice","sourceAspectRatio","sourceWidth","sourceHeight","targetAspectRatio","set","String","getBreakpoint","bandwidth","breakpoints","Object","values","maxBreakpoint","length","find","breakpoint","aspectRatioMap","id","altText","imageUrl","className","wrapperClassName","wrapperTag","captionData","onImgLoaded","priority","hFull","maxHeight","onClick","useState","loaded","setLoaded","imageWidth","imageHeight","resizedImageUrl","captionExists","keys","caption","defaultWrapperTag","cx","getAspectRatioClass","style","undefined","Image","alt","src","objectFit","fill","onLoad","data-testid","unoptimized","div","Caption","metricsOnClick","tabletAspectRatio","mobileAspectRatio","defaultAspectRatio","filter","Boolean","join","ResponsivePicture","mobileImageUrl","tabletImageUrl","desktopImageHeight","desktopResizedImageUrl","tabletResizedImageUrl","mobileResizedImageUrl","picture","source","media","srcSet","imageUrlMobile","imageUrlTablet","imageUrlDesktop","aspectRatioMobile","aspectRatioTablet","aspectRatioDesktop","isMobile","isDesktop","TabsContext","createContext","activeIndex","count","useTabs","useContext","sanitizeId","replace","TabButton","activeClassName","inactiveClassName","handleOnClick","rest","active","addRef","onTabKeyDown","onTabSelect","safeId","isActive","button","aria-controls","role","aria-selected","tabIndex","handleOnTabClick","event","onKeyDown","e","ref","type","TabListButton","TabList","React","forwardedRef","displayName","TabListScrollable","adjustScrollPosition","buttonWidth","tablistWidth","scrollLeft","leftPaddingOfScrollableDiv","paddingLeft","parseFloat","getComputedStyle","document","documentElement","fontSize","distanceFromButtonToBeginningOfTabListDiv","leftArrowWrapperClassName","rightArrowWrapperClassName","arrayChildren","toArray","useWindowSize","useTranslation","t","useRouter","locale","isRtl","isRTL","tablistRef","useForkedRef","isBackwardArrowVisible","setBackwardArrowVisible","isForwardArrowVisible","setForwardArrowVisible","focusedTabId","setFocusedTabId","useResizeObserver","box","onResize","current","focusedTab","getElementById","offsetLeft","offsetWidth","updateArrowVisibility","rect","widthDiff","scrollWidth","tabListWidth","showScrollBackwardArrow","tabListRect","useRect","onTabListScroll","threeItems","fourItems","getScrollMultiplier","scrollForward","scrollBackward","scrollToFocusedItem","target","lessOrEqual5","lessOrEqual2","onScroll","aria-labelledby","hidden","leftArrowhandler","aria-hidden","Icon","name","size","span","map","child","onFocus","rightArrowHandler","TabPanel","forwardRef","TabPanels","setCount","useEffect","Tabs","changeWithArrow","useUpDownArrows","defaultActive","onTabChange","setActive","setActiveIndex","refs","changeActiveTab","findIndex","nextTabIndex","currentIndex","previousTabIndex","Provider","value","includes","push","isModifiedKeyStroke","shiftKey","altKey","ctrlKey","metaKey","index","tabRef","preventDefault","getAttribute","focus","brandIconMapper","livsmartBreakfast","brandCode","livsmartFitness","livsmartGrill","livsmartKitchen","livsmartLaundry","livsmartPetFriendly","livsmartStudio","embassyBreakfast","invertedName","embassyFitness","embassyReception","hamptonHexagon","twentyFourHourMemberService","access","account","airlineMiles","amazonBox","americanExpress","benefitsStar","carRental","chooseYourRoom","complimentaryBreakfast","deviceApp","diamond","digitalCheckin","digitalKey","dining","eliteRolloverNights","fifthNightFree","freeWifi","giftPoints","honorsDiscount","honorsOffers","lateCheckout","loungeAccess","lyftRides","onPropertyRewards","orderAhead","points","pointsMoney","poolPoints","pointsPromotions","premiumWifi","roomGuarantee","roomUpgrade","secondGuest","transferPoints","waterBottle","hotelStays","convertPoints","buyPoints","meetingEvents","hgv","allInclusiveSpaDiscount","cookie"],"sourceRoot":"","ignoreList":[]}