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