{"version":3,"file":"static/chunks/2693-83f14d362dfee0c7.js","mappings":"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","sources":["webpack://_N_E/../../libs/osc/brand-text-body/src/lib/brand-text-body.tsx","webpack://_N_E/../../libs/osc/brand-text-body/src/lib/index.ts","webpack://_N_E/../../libs/osc/brand-text-body/src/index.ts","webpack://_N_E/../../libs/osc/brand-text-header/src/lib/brand-text-header.tsx","webpack://_N_E/../../libs/osc/brand-text-header/src/lib/index.ts","webpack://_N_E/../../libs/osc/brand-text-header/src/index.ts","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","webpack://_N_E/../../libs/osc/custom-markdown/src/lib/custom-markdown.tsx","webpack://_N_E/../../libs/osc/custom-markdown/src/index.ts","webpack://_N_E/../../libs/osc/heading-level/src/lib/heading-level.tsx","webpack://_N_E/../../libs/osc/heading-level/src/lib/index.ts","webpack://_N_E/../../libs/osc/heading-level/src/index.ts","webpack://_N_E/../../libs/osc/marketing/src/lib/utils/get-prefers-reduced-motion.ts","webpack://_N_E/../../libs/osc/marketing/src/lib/brand-showcase/brand-showcase.tsx","webpack://_N_E/../../libs/osc/marketing/src/lib/brand-showcase/index.ts","webpack://_N_E/../../libs/osc/marketing/src/lib/dialog-with-content/dialog-with-content.tsx","webpack://_N_E/../../libs/osc/marketing/src/lib/dialog-with-content/index.ts","webpack://_N_E/../../libs/osc/marketing/src/lib/full-width-image/full-width-image.types.tsx","webpack://_N_E/../../libs/osc/marketing/src/lib/full-width-image/libs/utils/full-width-image-analytics.ts","webpack://_N_E/../../libs/osc/marketing/src/lib/full-width-image/full-width-image.tsx","webpack://_N_E/../../libs/osc/marketing/src/lib/full-width-image/index.ts","webpack://_N_E/../../libs/osc/marketing/src/lib/half-and-half/libs/utils/half-and-half-analytics.ts","webpack://_N_E/../../libs/osc/marketing/src/lib/half-and-half/half-and-half-content.tsx","webpack://_N_E/../../libs/osc/marketing/src/lib/half-and-half/half-and-half.tsx","webpack://_N_E/../../libs/osc/marketing/src/lib/half-and-half/half-and-half-carousel.tsx","webpack://_N_E/../../libs/osc/marketing/src/lib/half-and-half/index.ts","webpack://_N_E/../../libs/osc/marketing/src/lib/image-headliner/image-headliner-content.tsx","webpack://_N_E/../../libs/osc/marketing/src/lib/image-headliner/utils/image-headliner-analytics.ts","webpack://_N_E/../../libs/osc/marketing/src/lib/image-headliner/image-headliner-controls.tsx","webpack://_N_E/../../libs/osc/marketing/src/lib/image-headliner/image-headliner-item.tsx","webpack://_N_E/../../libs/osc/marketing/src/lib/image-headliner/image-headliner.tsx","webpack://_N_E/../../libs/osc/marketing/src/lib/image-headliner/index.ts","webpack://_N_E/../../libs/osc/marketing/src/lib/security-dialog/security-dialog.tsx","webpack://_N_E/../../libs/osc/marketing/src/lib/security-dialog/index.ts","webpack://_N_E/../../libs/osc/marketing/src/lib/index.ts","webpack://_N_E/../../libs/osc/marketing/src/index.ts","webpack://_N_E/../../libs/utilities/get-video-src/src/lib/get-video-src.ts","webpack://_N_E/../../libs/utilities/get-video-src/src/lib/index.ts","webpack://_N_E/../../libs/utilities/get-video-src/src/index.ts","webpack://_N_E/../../libs/osc/youtube-video/src/lib/youtube-video.tsx","webpack://_N_E/../../libs/osc/youtube-video/src/index.ts"],"sourcesContent":["import type * as React from 'react';\nimport { useId } from 'react';\nimport cx from 'classnames';\n\nimport { CustomMarkdown } from '@dx-ui/osc-custom-markdown';\n\nexport type BrandTextBodyType = {\n className?: string;\n baseAppUrl?: string;\n lang?: string;\n testId?: string | null;\n isStaticContentPage?: boolean;\n children: React.ReactNode;\n brandComponentTheme?: CmsBrandComponentTheme;\n};\n\n/**\n * Can utilize `<CustomMarkdown>` or `children` to add the body text content.\n * There is not a character limit on the text block body but individual components may have recommended character lengths, see components for more details.\n */\nexport const BrandTextBody = ({\n children,\n className = '',\n testId = 'brandTextBody',\n isStaticContentPage, // to enable segregation of styles, logic of textblock components for static pages\n brandComponentTheme,\n}: BrandTextBodyType) => {\n const id = useId();\n\n return typeof children === 'string' ? (\n /* Adding a unique id to children props passed in CustomMarkdown mainly headings */\n <div\n data-testid={testId}\n className={cx(\n className,\n 'brand-wa:font-serif brand-gi:font-serif brand-gi:font-semibold py-2 sm:text-lg lg:text-xl',\n {\n 'brand-hp:text-brand': brandComponentTheme !== 'dark',\n 'brand-ht:text-text-inverse': brandComponentTheme === 'light',\n }\n )}\n >\n <CustomMarkdown\n id={`textblock-body-section-${id}`}\n isStaticContentPage={isStaticContentPage}\n brandComponentTheme={brandComponentTheme}\n >\n {children}\n </CustomMarkdown>\n </div>\n ) : (\n children\n );\n};\n","export * from './brand-text-body';\n","export * from './lib';\n","import { HeadingLevel } from '@dx-ui/osc-heading-level';\nimport cx from 'classnames';\n\nexport type BrandTextHeaderType = {\n children?: React.ReactNode;\n ariaLabel?: string;\n className?: string;\n id?: string;\n};\n\n/**\n * Extra, Extra! Announcing the Text Block Header, consumed by other components to create a bold headline.\n */\nexport const BrandTextHeader = ({ children, ariaLabel, className = '', id }: BrandTextHeaderType) =>\n children ? (\n <HeadingLevel\n headingLevelFallback={2}\n className={cx(className, 'heading-2xl lg:heading-4xl lg:mb-2')}\n data-testid=\"brandTextHeader\"\n id={id}\n >\n {children}\n\n {ariaLabel && <span className=\"sr-only\">{ariaLabel}</span>}\n </HeadingLevel>\n ) : null;\n\nexport default BrandTextHeader;\n","export * from './brand-text-header';\n","export * from './lib';\n","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","// Note: See old file history at https://gitlab.svc-m.hhc.hilton.com/pac/hiw/dx-hotels-ui/-/blob/17b699b0671894da33c7751415283f954ef01838/src/components/custom-markdown/index.tsx\nimport Markdown from 'markdown-to-jsx';\nimport cx from 'classnames';\nimport merge from 'lodash/merge';\n\nimport { isBrowser } from '@dx-ui/utilities-is-browser';\n\nimport type { MarkdownToJSX } from 'markdown-to-jsx';\nimport { Children, type ReactNode } from 'react';\n\nexport type TagRendererProps = {\n tag: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'table' | 'th' | 'td' | 'b' | 'p';\n children: ReactNode;\n};\n\nconst targetOpensInNewWindow = (href: string) => (href ? href.endsWith('target_blank') : false);\n\nconst TagRenderer = ({ tag: Tag, children, ...props }: TagRendererProps) => (\n <Tag {...props}>{children}</Tag>\n);\n\nexport type LinkRendererProps = {\n href: string;\n children: ReactNode;\n brandComponentTheme?: CmsBrandComponentTheme;\n};\n\nconst MarkdownLinkRenderer = (props: LinkRendererProps) => {\n let { href } = props;\n const { children } = props;\n\n if (!href) {\n return null;\n }\n\n if (Children.count(props.children) === 0) {\n return null;\n }\n\n if (targetOpensInNewWindow(href)) {\n href = href.replace('/target_blank', '');\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cx('underline', {\n 'text-text-inverse': props.brandComponentTheme === 'dark',\n 'text-primary hover:text-primary-alt brand-gi:text-tertiary brand-gi:hover:text-tertiary-alt brand-ht:text-text-inverse brand-ht:hover:text-text-inverse':\n props.brandComponentTheme === 'light',\n 'text-primary hover:text-primary-alt ':\n props.brandComponentTheme !== 'light' && props.brandComponentTheme !== 'dark',\n })}\n >\n {children}\n </a>\n );\n }\n if (href.endsWith('_backToTop')) {\n href = href.replace('_backToTop', '');\n return (\n <>\n <a\n href={href}\n className={cx('underline', {\n 'text-text-inverse': props.brandComponentTheme === 'dark',\n 'text-primary hover:text-primary-alt brand-gi:text-tertiary brand-gi:hover:text-tertiary-alt brand-ht:text-text-inverse brand-ht:hover:text-text-inverse':\n props.brandComponentTheme === 'light',\n 'text-primary hover:text-primary-alt ':\n props.brandComponentTheme !== 'light' && props.brandComponentTheme !== 'dark',\n })}\n >\n {children}\n </a>\n <div />\n </>\n );\n }\n if (href.endsWith('Join_US')) {\n href = href.replace('Join_US', '');\n return (\n <a\n href={href}\n className={cx('join-us-link underline', {\n 'text-text-inverse': props.brandComponentTheme === 'dark',\n 'text-primary hover:text-primary-alt brand-gi:text-tertiary brand-gi:hover:text-tertiary-alt brand-ht:text-text-inverse brand-ht:hover:text-text-inverse':\n props.brandComponentTheme === 'light',\n 'text-primary hover:text-primary-alt ':\n props.brandComponentTheme !== 'light' && props.brandComponentTheme !== 'dark',\n })}\n >\n {children}\n </a>\n );\n }\n\n if (href === 'teconsent') {\n //`trustarc` is for analytics tracking (cookie preferences page) from GDPR countries\n if (isBrowser && window?.location?.href?.includes('?trustarc')) {\n return (\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\n <a\n id={href}\n className={cx('join-us-link underline', {\n 'text-text-inverse': props.brandComponentTheme === 'dark',\n 'text-primary hover:text-primary-alt brand-gi:text-tertiary brand-gi:hover:text-tertiary-alt brand-ht:text-text-inverse brand-ht:hover:text-text-inverse':\n props.brandComponentTheme === 'light',\n 'text-primary hover:text-primary-alt ':\n props.brandComponentTheme !== 'light' && props.brandComponentTheme !== 'dark',\n })}\n >\n {}\n </a>\n );\n }\n return (\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\n <a\n id={href}\n className={cx('join-us-link underline', {\n 'text-text-inverse': props.brandComponentTheme === 'dark',\n 'text-primary hover:text-primary-alt brand-gi:text-tertiary brand-gi:hover:text-tertiary-alt brand-ht:text-text-inverse brand-ht:hover:text-text-inverse':\n props.brandComponentTheme === 'light',\n 'text-primary hover:text-primary-alt ':\n props.brandComponentTheme !== 'light' && props.brandComponentTheme !== 'dark',\n })}\n >\n {children}\n </a>\n );\n }\n\n if (href.startsWith('#') && Array.isArray(children) && children.length === 0) {\n return <span id={href.replace('#', '')} />;\n }\n return (\n <a\n href={href}\n className={cx('join-us-link break-words underline', {\n 'text-text-inverse': props.brandComponentTheme === 'dark',\n 'text-primary hover:text-primary-alt brand-gi:text-tertiary brand-gi:hover:text-tertiary-alt brand-ht:text-text-inverse brand-ht:hover:text-text-inverse':\n props.brandComponentTheme === 'light',\n 'text-primary hover:text-primary-alt ':\n props.brandComponentTheme !== 'light' && props.brandComponentTheme !== 'dark',\n })}\n >\n {children}\n </a>\n );\n};\n\nexport type CustomMarkdownProps = {\n children: string;\n options?: MarkdownToJSX.Options;\n isStaticContentPage?: boolean;\n id?: string;\n brandComponentTheme?: CmsBrandComponentTheme;\n};\n\n/**\n * CustomMarkdown renders a markdown string to the DOM using React components.\n * It wraps the NPM package `markdown-to-jsx`, and provides renderers for many common markdown elements with specific styling classes\n */\nexport const CustomMarkdown = ({\n isStaticContentPage,\n children,\n options,\n id,\n brandComponentTheme,\n}: CustomMarkdownProps) => {\n const baseClass = cx('font-headline', {\n 'text-text-inverse': brandComponentTheme === 'dark',\n 'brand-ht:text-text-inverse': brandComponentTheme === 'light',\n });\n\n const defaultOptions = {\n overrides: {\n a: {\n component: MarkdownLinkRenderer,\n props: {\n brandComponentTheme,\n },\n },\n h1: {\n component: TagRenderer,\n props: {\n tag: 'h1',\n tabIndex: '-1',\n className: cx(baseClass, 'heading-2xl lg:heading-4xl focus:ring lg:mb-2'),\n ...(id ? { id } : {}),\n },\n },\n h2: {\n component: TagRenderer,\n props: {\n tag: 'h2',\n ...(id ? { id } : {}),\n className: cx(\n baseClass,\n 'heading-xl lg:heading-2xl',\n isStaticContentPage ? 'lg:mb-2' : 'lg:mb-1'\n ), // segregating styles for static pages in Brand & Brand pages,\n },\n },\n h3: {\n component: TagRenderer,\n props: {\n tag: 'h3',\n ...(id ? { id } : {}),\n className: cx(baseClass, 'heading-lg lg:heading-xl lg:mb-1'),\n },\n },\n table: {\n component: TagRenderer,\n props: {\n tag: 'table',\n className: 'table-auto -ml-2',\n },\n },\n thead: {\n component: TagRenderer,\n props: {\n tag: 'thead',\n className: 'border border-border-alt sm:overflow-hidden',\n },\n },\n th: {\n component: TagRenderer,\n props: {\n tag: 'th',\n className: 'bg-border-alt pt-3 pb-3 px-2',\n },\n },\n td: {\n component: TagRenderer,\n props: {\n tag: 'td',\n className: 'px-2 py-1 h-4',\n },\n },\n b: { component: TagRenderer, props: { tag: 'b' } },\n p: { component: TagRenderer, props: { tag: 'p' } },\n ul: {\n component: TagRenderer,\n props: {\n tag: 'ul',\n className: 'list-disc ps-8 my-4',\n },\n },\n ol: {\n component: TagRenderer,\n props: {\n tag: 'ol',\n className: 'list-decimal ps-8 my-4',\n },\n },\n li: {\n component: TagRenderer,\n props: {\n tag: 'li',\n className: 'my-2',\n },\n },\n },\n };\n\n const mergedOpts = merge(defaultOptions, options);\n let markdownArray: string[];\n let updatedChildren: string;\n\n //checking if the block of markdown is a table\n if (children[0] === '|' && children.slice(-1) === '|') {\n updatedChildren = children;\n }\n\n //if the block of markdown is not a table, then making the line breaks of a markdown block as '<div class=\"p-2\"></div>'\n else {\n markdownArray = children.split(/\\r\\n|\\n/);\n updatedChildren = markdownArray\n .map((markdown, index) => {\n if (markdown === '') {\n if (markdownArray[index + 1] === undefined || markdownArray[index + 1] === null)\n return '';\n return '<div class=\"p-2\"></div>\\n';\n }\n return `${markdown} \\n\\n`;\n })\n .join('');\n }\n\n return <Markdown options={mergedOpts}>{updatedChildren}</Markdown>;\n};\n","export * from './lib/custom-markdown';\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { createContext, useContext } from 'react';\n\nexport type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\nexport type HeadingLevelContext = [\n // Should the heading level increase?\n boolean,\n // The current heading level defined in the context\n HeadingLevel\n];\n\nconst DEFAULT_HEADING_LEVEL = 2;\nconst DEFAULT_CONTEXT_VALUE: HeadingLevelContext = [false, DEFAULT_HEADING_LEVEL];\n\nconst HeadingLevelContext = createContext<HeadingLevelContext>(DEFAULT_CONTEXT_VALUE);\n\nexport function useHeadingLevel() {\n return useContext(HeadingLevelContext);\n}\n\n/**\n * Calculate the heading level based on props passed via the HeadingLevelProvider component\n * 1) Always return the level if it has been explicitly defined via the level prop e.g. <HeadingLevelProvider level=\"1\" />\n * 2) Return the parent level + 1, if the <HeadingLevelProvider /> component has been nested inside another <HeadingLevelProvider />\n * 3) Fallback to the DEFAULT_HEADING_LEVEL at the top of this file\n */\nfunction calculateHeadingLevel({\n level,\n parent,\n}: {\n level?: HeadingLevel;\n parent: {\n level?: HeadingLevel;\n shouldIncreaseLevel?: boolean;\n };\n}) {\n if (level) {\n return level;\n }\n\n const { level: parentLevel, shouldIncreaseLevel } = parent;\n\n if (shouldIncreaseLevel && parentLevel) {\n return (parentLevel + 1) as HeadingLevel;\n }\n\n if (parentLevel) {\n return parentLevel;\n }\n\n return DEFAULT_HEADING_LEVEL;\n}\n\nexport interface HeadingLevelProviderProps {\n /** Any valid `ReactNode` */\n children: ReactNode;\n /** The level that headings should render as. Nested `<HeadingLevelProvider>`s will increase this number automatically. */\n level?: HeadingLevel;\n /**\n * Increase the heading level when nested inside a `<HeadingLevelProvider>` component.\n * This can be used to stop the heading level increasing if a parent heading in the component is set to conditionally\n * render.\n * */\n shouldIncreaseLevel?: boolean;\n /**\n * Should heading levels increase or always use the fallback value?\n * This prop only needs to be set on the first provider.\n * */\n isEnabled?: boolean;\n}\n\n/**\n * Automatically increase the heading level for child `<HeadingLevel />` components. You should wrap any child headings\n * with this provider so levels increase.\n * The first `<HeadingLevelProvider />` must have the `isEnabled` prop set for heading levels to start increasing.\n */\nexport function HeadingLevelProvider({\n children,\n level,\n shouldIncreaseLevel = true,\n isEnabled = false,\n}: HeadingLevelProviderProps) {\n const [isParentEnabled, parentLevel] = useHeadingLevel() ?? DEFAULT_CONTEXT_VALUE;\n\n return (\n <HeadingLevelContext.Provider\n value={[\n isParentEnabled || isEnabled,\n calculateHeadingLevel({ level, parent: { level: parentLevel, shouldIncreaseLevel } }),\n ]}\n >\n {children}\n </HeadingLevelContext.Provider>\n );\n}\n\nexport interface HeadingProps extends HTMLAttributes<HTMLHeadingElement> {\n /**\n * The heading level that should be used if this component is either not rendered inside the `<HeadingLevelProvider />`\n * component OR a parent `<HeadingLevelProvider />` hasn't enabled stacking\n * */\n headingLevelFallback?: HeadingLevel;\n}\n\n/**\n * Automatically render the correct heading level when this component is a child of the `<HeadingLevelProvider />`\n * component.\n * Defaults to a `<h2>` if `headingLevelFallback` prop is not defined.\n * The `headingLevelFallback` prop will be used when `HeadingLevelContext` is `undefined` OR `<HeadingLevelProvider />`\n * has the `isEnabled` prop set to `false`.\n */\nexport function HeadingLevel({\n children,\n headingLevelFallback = DEFAULT_HEADING_LEVEL,\n ...props\n}: HeadingProps) {\n const context = useHeadingLevel();\n let Tag = `h${headingLevelFallback}`;\n\n if (context !== undefined && context[0]) {\n const level = context[1];\n Tag = level > 6 ? 'span' : `h${level}`;\n }\n\n return <Tag {...props}>{children}</Tag>;\n}\n","export * from './heading-level';\n","export * from './lib';\n","let prefersReducedMotion: boolean | null = null;\nexport const getPrefersReducedMotion = () => {\n if (prefersReducedMotion === null) {\n prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n }\n return prefersReducedMotion;\n};\n","import type { FC } from 'react';\nimport { createRef, useCallback, useMemo, useRef, useState } from 'react';\nimport Image from 'next/image';\nimport { Icon } from '@dx-ui/osc-icon';\nimport { HeadingLevel } from '@dx-ui/osc-heading-level';\nimport { useRouter } from 'next/router';\nimport { isRtl } from '@dx-ui/utilities-get-language-direction';\nimport cx from 'classnames';\n\nimport { getPrefersReducedMotion } from '../utils/get-prefers-reduced-motion';\nimport type { TBrandShowcase, TBrandShowcaseItem } from './brand-showcase.types';\nimport { useTranslation } from 'next-i18next';\nimport { useDebounceCallback } from 'usehooks-ts';\n\nexport const NavItemWidth = 224; // px\nexport const END_MARGIN = 5; // px\nexport const SLIDE_DURATION = 0.5; // seconds\n\n/**\n * List of the Hilton brands in a carousel like form. Each brand includes a logo, additional info about the currently selected brand, a link to the brand page,\n * and includes navigation controls to cycle through each brand.\n */\nexport const BrandShowcase: FC<TBrandShowcase> = ({ items, id, onItemClicked, logoUrl }) => {\n const { t } = useTranslation('osc-marketing-brand-showcase');\n const { locale = 'en' } = useRouter();\n const rtl = isRtl(locale);\n\n const [selectedItem, setSelectedItem] = useState<TBrandShowcaseItem | undefined>(items[0]);\n const [atScrollEnd, setAtScrollEnd] = useState(false);\n\n const scrollAnimationRequest = useRef<number | null>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n const itemRefs = useMemo(() => items.map(() => createRef<HTMLButtonElement>()), [items]);\n\n const onShowcaseItemClicked = (item: TBrandShowcaseItem | undefined) => {\n const index = items?.findIndex((i) => i === item);\n if (item !== selectedItem && scrollRef.current) {\n const totalWidth = scrollRef.current.scrollWidth;\n const { offsetWidth } = scrollRef.current;\n //Getting width of the first brand item which is equal to all other brand items\n const brandRect = scrollRef?.current?.children[0]?.getBoundingClientRect();\n const width = brandRect?.width || 0;\n\n let desiredScrollLeft = index * width * (rtl ? -1 : 1);\n const maxScrollLeft = totalWidth - offsetWidth * (rtl ? -1 : 1);\n if (desiredScrollLeft > maxScrollLeft) {\n desiredScrollLeft = maxScrollLeft;\n }\n const onComplete = () => {\n const previousItem = selectedItem;\n setSelectedItem(item);\n itemRefs[index]?.current?.focus();\n\n previousItem !== item && onItemClicked && onItemClicked(index);\n };\n if (scrollRef.current.scrollLeft !== desiredScrollLeft) {\n scrollToOffset(desiredScrollLeft, onComplete);\n } else {\n onComplete();\n }\n }\n };\n\n const scrollToOffset = useCallback(\n (desiredScrollLeft: number, onComplete?: () => void) => {\n if (scrollRef.current) {\n if (scrollAnimationRequest.current) {\n cancelAnimationFrame(scrollAnimationRequest.current);\n scrollAnimationRequest.current = null;\n }\n\n const { scrollLeft } = scrollRef.current;\n\n if (getPrefersReducedMotion()) {\n scrollRef.current.scrollLeft = desiredScrollLeft;\n onComplete && onComplete();\n } else {\n const scrollDistance = desiredScrollLeft - scrollLeft;\n const duration = Math.max(350, Math.abs(scrollDistance) * 0.6);\n let startTime: number;\n\n const animateScroll = (timeStamp: number) => {\n if (!startTime) {\n startTime = timeStamp;\n }\n\n const progress = (timeStamp - startTime) / duration;\n const easing =\n progress < 0.5\n ? SLIDE_DURATION * progress * progress\n : (4 - 2 * progress) * progress - 1;\n\n if (scrollRef.current) {\n scrollRef.current.scrollLeft = scrollLeft + scrollDistance * easing;\n\n if (progress < 1) {\n scrollAnimationRequest.current = requestAnimationFrame(animateScroll);\n } else {\n scrollAnimationRequest.current = null;\n onComplete && onComplete();\n }\n }\n };\n\n scrollAnimationRequest.current = requestAnimationFrame(animateScroll);\n }\n }\n },\n [scrollAnimationRequest, scrollRef]\n );\n\n const debouncedOnScroll = useDebounceCallback(() => {\n if (scrollRef.current) {\n const { scrollLeft, scrollWidth: totalWidth, offsetWidth } = scrollRef.current;\n const marginForDetectingBrandPosition = 7;\n\n const distanceFromEndOfScrollBar = totalWidth - offsetWidth - Math.abs(scrollLeft);\n const endOfScrollBar =\n distanceFromEndOfScrollBar < marginForDetectingBrandPosition &&\n distanceFromEndOfScrollBar > -marginForDetectingBrandPosition;\n\n //Getting width of the first brand item which is equal to all other brand items\n const brandRect = scrollRef?.current?.children[0]?.getBoundingClientRect();\n const width = brandRect?.width || 0;\n\n const index = Math.min(items.length - 1, Math.ceil(Math.abs(scrollLeft) / Math.ceil(width)));\n\n const currentIndex = items.findIndex((i) => i === selectedItem);\n\n // Don't adjust if we aren't at a scroll stop point unless we are at the end of the bar and currentIndex is before index\n if (!endOfScrollBar || (endOfScrollBar && currentIndex < index)) {\n const previousItem = selectedItem;\n setSelectedItem(items[index]);\n itemRefs[index]?.current?.focus();\n\n previousItem !== items[index] && onItemClicked && onItemClicked(index);\n }\n setAtScrollEnd(endOfScrollBar);\n }\n }, 300);\n\n const onScrollWrapper = () => {\n if (atScrollEnd && scrollRef.current) {\n const { scrollLeft, offsetWidth, scrollWidth: totalWidth } = scrollRef.current;\n\n const distanceFromEndOfScrollBar = totalWidth - offsetWidth - scrollLeft;\n const endOfScrollBar = Math.abs(distanceFromEndOfScrollBar) < END_MARGIN;\n if (!endOfScrollBar) {\n setAtScrollEnd(false);\n }\n }\n debouncedOnScroll();\n };\n\n const handleTabListWrapperKeyDown = (evt: React.KeyboardEvent) => {\n const index = items.findIndex((i) => i.code === selectedItem?.code);\n switch (evt.key) {\n case 'ArrowLeft':\n evt.preventDefault();\n evt.stopPropagation();\n\n if (index !== 0) {\n onShowcaseItemClicked(items[index - 1]);\n }\n\n break;\n case 'ArrowRight':\n evt.preventDefault();\n evt.stopPropagation();\n\n if (index !== items.length - 1) {\n onShowcaseItemClicked(items[index + 1]);\n }\n\n break;\n default:\n }\n };\n\n const slide = (direction: number) => {\n const index = items.findIndex((i) => i.code === selectedItem?.code);\n let targetIndex;\n if (direction < 0) {\n targetIndex = index === 0 ? 0 : index - 1;\n // if we are at the end, make sure to update the endrow state\n if (targetIndex < items.length - 1) {\n setAtScrollEnd(false);\n }\n } else {\n targetIndex = index === items.length - 1 ? items.length - 1 : index + 1;\n }\n onShowcaseItemClicked(items[targetIndex]);\n };\n\n const index = items.findIndex((i) => i.code === selectedItem?.code);\n\n const NavItems = items.map((item, idx) => (\n <div\n className=\"relative w-full flex-none snap-start p-1 md:w-2/6 lg:w-1/5 xl:w-1/6\"\n key={item.code}\n >\n <button\n className=\"relative h-32 w-full px-4\"\n tabIndex={selectedItem?.name === item.name ? undefined : -1}\n onClick={() => onShowcaseItemClicked(item)}\n role=\"tab\"\n aria-expanded={selectedItem?.name === item.name}\n aria-controls={`brands-showcase-panel-${id}`}\n ref={itemRefs[idx]}\n aria-label={item.name}\n onKeyDown={handleTabListWrapperKeyDown}\n data-testid=\"brands-showcase-brand-button\"\n type=\"button\"\n >\n <div className=\"bg-bg-alt brand-hi-refresh:bg-bg-light relative size-full overflow-hidden\">\n <Image\n id={id}\n style={{\n objectFit: 'contain',\n fill: item.imageDefaultColor,\n }}\n // fill-[imageDefaultColor] does not fill if the SVG images already\n // have fill colors built-in like all of the 20 brand logos on the\n // Hilton.com homepage (portfolio site)\n fill\n src={`${logoUrl}/${item.code}.svg`}\n alt={item.name}\n />\n </div>\n </button>\n {selectedItem?.name === item.name ? (\n <div className=\"absolute bottom-0 flex h-2 w-full justify-center\">\n <div className=\"bg-bg top-0 me-3 size-6 origin-center rotate-45\" />\n </div>\n ) : null}\n </div>\n ));\n return (\n <div\n className=\"bg-bg-alt brand-hi-refresh:bg-bg-light relative w-full\"\n data-testid=\"brandShowcaseWrapper\"\n id={id}\n >\n <div className=\"brand-wa:py-16 brand-wa:xl:py-20 container flex flex-col items-start py-8 ps-4 xl:py-12\">\n <div className=\"px-0 sm:ps-6\">\n <HeadingLevel\n headingLevelFallback={2}\n className=\"text-primary heading-2xl sm:heading-3xl lg:heading-4xl pb-4 pt-1 leading-tight\"\n >\n {t('waysToStay')}\n </HeadingLevel>\n </div>\n <div className=\"relative flex w-full\">\n {index > 0 ? (\n <button\n className=\"btn btn-primary-text btn-lg absolute inset-y-0 start-0 z-10 m-1\"\n onClick={() => slide(-1)}\n data-testid=\"previous\"\n type=\"button\"\n >\n <span className=\"sr-only\">{t('returnsToThePreviousBrand')}</span>\n <Icon name={rtl ? 'arrowhead-right' : 'arrowhead-left'} size=\"2xl\" />\n </button>\n ) : null}\n <div className=\"relative w-full overflow-hidden px-12\">\n <div className=\"absolute start-0 top-0 inline-block h-full w-5 ltr:bg-gradient-to-l rtl:bg-gradient-to-r\" />\n <div\n className={cx(\n 'absolute end-4 top-0 inline-block h-full ltr:bg-gradient-to-r rtl:bg-gradient-to-l',\n {\n 'w-0': atScrollEnd,\n 'w-8 md:w-32': !atScrollEnd,\n }\n )}\n />\n <div\n className=\"snap mx-auto flex w-56 snap-x snap-mandatory overflow-x-auto overflow-y-hidden px-0 py-1 md:mx-0 md:w-full lg:overflow-x-scroll\"\n ref={scrollRef}\n onScroll={onScrollWrapper}\n role=\"tablist\"\n data-testid=\"onScrollWrapper\"\n >\n {NavItems}\n </div>\n </div>\n {index < items.length - 1 ? (\n <button\n className=\"btn btn-primary-text btn-lg absolute inset-y-0 end-0 m-1\"\n onClick={() => slide(1)}\n data-testid=\"next\"\n type=\"button\"\n >\n <span className=\"sr-only\">{t('advancesToTheNextBrand')}</span>\n <Icon name={rtl ? 'arrowhead-left' : 'arrowhead-right'} size=\"2xl\" />\n </button>\n ) : null}\n </div>\n <div className=\"flex w-full flex-col sm:ps-6\" id={`brands-showcase-panel-${id}`}>\n {items.map((item /* we render all tabs for SEO purposes */) => (\n <div\n className={`${selectedItem?.name === item.name ? 'flex' : 'hidden'} w-full flex-col`}\n key={item.name}\n data-testid={\n selectedItem?.name === item.name\n ? 'brand-showcase-panel-active'\n : 'brand-showcase-panel'\n }\n >\n <div className=\"bg-bg image-corner-radius mb-8 w-full px-8 pt-8\">\n <h3 className=\"text-2xl font-bold leading-tight sm:text-3xl lg:text-4xl\">\n {item.name}\n </h3>\n <p className=\"py-5 sm:text-lg md:pb-8 lg:text-xl\">{item.shortDescription}</p>\n </div>\n <div className=\"flex w-full flex-col items-center\">\n <a className=\"btn btn-primary btn-xl items-center\" href={item.url || `/en/brands/`}>\n {item.label || t('visitBrand', { brand: item.name })}\n </a>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n};\n","export * from './brand-showcase';\nexport * from './brand-showcase.types';\n","import { useRef } from 'react';\nimport cx from 'classnames';\nimport type { Link } from '@dx-ui/osc-link';\nimport type { DialogBaseProps } from '@dx-ui/osc-dialog-v2';\nimport { Dialog } from '@dx-ui/osc-dialog-v2';\nimport { useRect } from '@dx-ui/utilities-use-rect';\nimport { ResponsiveImage, getCurrentAspectRatioAndUrl } from '@dx-ui/osc-responsive-image';\nimport type { AspectRatio, TResponsiveImage } from '@dx-ui/osc-responsive-image';\nimport { BrandTextBody } from '@dx-ui/osc-brand-text-body';\nimport { BrandTextHeader } from '@dx-ui/osc-brand-text-header';\nimport { BrandLink } from '@dx-ui/osc-brand-buttons';\n\nexport type DialogWithContentBase = {\n ariaLabel?: string;\n id?: string;\n /**\n *Appears at the top of the dialog\n */\n title?: string;\n /**\n * Appears under the title, headline of content\n */\n headline?: string;\n /**\n * Can include images, text, markdown\n */\n content?: string | JSX.Element;\n /**\n * CTA link/button, opens in another tab\n */\n link?: Link & { experimentationConfiguration?: CmsExperimentationConfiguration };\n onClose?: () => void;\n};\n\ntype ImageUrlsType = {\n tabletImageUrl: string;\n mobileImageUrl: string;\n desktopImageUrl: string;\n};\n\nexport type DialogWithContentType = DialogWithContentBase &\n Omit<DialogBaseProps, 'content'> & {\n isOpen: boolean;\n imageUrl?: string;\n captionData?: TResponsiveImage['captionData'];\n imageUrls?: ImageUrlsType;\n imageAltText?: string;\n containerAspectRatio?: AspectRatio;\n imageAspectRatio?: AspectRatio;\n cmsTranslationClasses?: string;\n captionMetricsOnClick?: () => void;\n brandLinkMetricsOnClick?: () => void;\n };\n\nexport type AspectRatioGroup = {\n aspectRatioMobile: AspectRatio;\n aspectRatioTablet: AspectRatio;\n aspectRatioDesktop: AspectRatio;\n};\n\n/**\n * DialogWithContent renders many different styles of modal using the content passed into it.\n *\n * It suports rendering images, links, component children and markdown.\n */\nexport const DialogWithContent = (props: DialogWithContentType) => {\n const ref = useRef<React.ElementRef<'div'>>(null);\n const rect = useRect({ ref });\n\n const {\n imageAspectRatio = '3:2',\n imageUrl,\n imageUrls,\n imageAltText,\n captionData,\n isOpen,\n id = 'dialog',\n ariaLabel,\n title,\n headline,\n content,\n link,\n onClose,\n cmsTranslationClasses,\n captionMetricsOnClick,\n brandLinkMetricsOnClick,\n ...dialogProps\n } = props;\n\n let body: JSX.Element | null = null;\n if (content) {\n if (typeof content === 'string') {\n body = <BrandTextBody {...props}>{content}</BrandTextBody>;\n } else {\n body = <div className=\"lg:prose-xl prose my-2\">{content}</div>;\n }\n }\n\n const { imageUrl: multipleImageUrl, aspectRatio: multipleImageAspectRatio } = imageUrls\n ? getCurrentAspectRatioAndUrl({\n width: rect?.width || 700,\n imageUrlMobile: imageUrls.mobileImageUrl,\n imageUrlTablet: imageUrls.tabletImageUrl,\n imageUrlDesktop: imageUrls.desktopImageUrl,\n aspectRatioMobile: imageAspectRatio,\n aspectRatioTablet: imageAspectRatio,\n aspectRatioDesktop: imageAspectRatio,\n })\n : { imageUrl: null, aspectRatio: null };\n\n const dialogPropsWithLabel = title ? { title } : { ariaLabel: ariaLabel || '' };\n\n return (\n <Dialog\n data-testid=\"activeDialogWithContentBox\"\n isOpen={isOpen}\n onDismiss={onClose}\n size=\"3xl\"\n {...dialogProps}\n {...dialogPropsWithLabel}\n >\n <div className={cx('flex h-full flex-col sm:h-auto', cmsTranslationClasses)} ref={ref}>\n {/* This is needed in case we only need 1 img src that can be used for tablet, desktop and mobile screens */}\n {imageUrl ? (\n <div className=\"flex items-center justify-items-center overflow-y-hidden\">\n <ResponsiveImage\n id={id}\n aspectRatio={imageAspectRatio}\n imageUrl={imageUrl}\n altText={imageAltText || ''}\n width={rect?.width || 700}\n captionData={captionData}\n onClick={captionMetricsOnClick}\n />\n </div>\n ) : null}\n {/* This is needed in case we have separate Urls for tablet, desktop and mobile screens */}\n {/* Also, \"&& !imageUrl\" added just to prevent rendering 2 images if both props somehow get passed */}\n {imageUrls && !imageUrl ? (\n <div className=\"flex items-center justify-items-center overflow-y-hidden\">\n <ResponsiveImage\n id={id}\n aspectRatio={multipleImageAspectRatio || '3:2'}\n imageUrl={multipleImageUrl || ''}\n altText={imageAltText || ''}\n width={rect?.width || 700}\n captionData={captionData}\n onClick={captionMetricsOnClick}\n />\n </div>\n ) : null}\n\n <div className=\"box-border px-4 pb-2 pt-8 sm:px-8 md:px-16\">\n {headline ? (\n <BrandTextHeader {...props} className=\"brand-wa:md:heading-2xl brand-wa:heading-xl\">\n {headline}\n </BrandTextHeader>\n ) : null}\n {body}\n\n {link?.label && link?.url ? (\n <div className=\"inline-block w-full pb-4 pt-8 text-center\">\n <BrandLink\n label={link.label}\n isNewWindow={link.isNewWindow}\n showNewWindowIcon={link.isNewWindow}\n url={link.url}\n onClick={link?.onClick}\n cidParams={link?.cidParams}\n data-conductrics-goal={link.experimentationConfiguration?.goal}\n data-conductrics-value={link.experimentationConfiguration?.value}\n metricsOnClick={brandLinkMetricsOnClick}\n />\n </div>\n ) : null}\n </div>\n </div>\n </Dialog>\n );\n};\n\nexport default DialogWithContent;\n","export * from './dialog-with-content';\n","import type { Link } from '@dx-ui/osc-link';\nimport type { AspectRatio, TResponsiveImage } from '@dx-ui/osc-responsive-image';\n\nexport type TFullWidthImage = {\n id?: string;\n /**\n * Aspect Ratio of the Image at 1280px +\n */\n desktopImageUrl: string;\n /**\n * URL of the Image at 640px - 1280px\n */\n tabletImageUrl: string;\n /**\n * URL of the Image at 0px - 640px\n */\n mobileImageUrl: string;\n captionData?: TResponsiveImage['captionData'];\n /**\n * Alternative text of the Image (a11y)\n */\n imageAltText: string;\n /**\n * Text of the button that opens a Dialog box\n */\n imageOverlayButtonText: string;\n /**\n * Title at the top of the Dialog box\n */\n title: string;\n /**\n * Description(paragraph) at the bottom of the Dialog box\n */\n description: JSX.Element | string;\n /**\n * Link at the bottom of the Dialog box\n */\n link: Link & { experimentationConfiguration?: CmsExperimentationConfiguration };\n /**\n * Function that gets executed when the Dialog box is being open\n */\n overlayButtonClicked?: () => void;\n};\n\nexport const FullWidthImageAspectRatio: AspectRatio = '384:113';\nexport const FullWidthImageDialogAspectRatio: AspectRatio = '16:9';\n","import type { ImageFunctionType } from '@dx-ui/config-metrics';\nimport { ImageClickID, ImageType, ANALYTICS_NO_VALUE } from '@dx-ui/config-metrics';\nimport type { FullWidthMediaMetrics } from '../types/full-width-image-analytics';\n\nconst FULL_WIDTH__METRIC_POSITION = 1;\nconst FULL_WIDTH_METRIC_IMAGE_COUNT = 1;\n\ntype GenerateFullWidthMediaMetricsParams = {\n headline: string;\n itemTitle?: string;\n imageFunction: ImageFunctionType;\n};\n\nexport const generateFullWidthMediaMetricsParams = ({\n headline,\n itemTitle,\n imageFunction,\n}: GenerateFullWidthMediaMetricsParams): FullWidthMediaMetrics => {\n return {\n click: {\n clickID: ImageClickID.Img,\n },\n osc: {\n image: {\n headline,\n itemTitle: itemTitle || ANALYTICS_NO_VALUE,\n position: FULL_WIDTH__METRIC_POSITION,\n count: FULL_WIDTH_METRIC_IMAGE_COUNT,\n type: ImageType.Full,\n function: imageFunction,\n },\n },\n };\n};\n","import { useState, useRef } from 'react';\nimport cx from 'classnames';\nimport { useRect } from '@dx-ui/utilities-use-rect';\nimport { DialogWithContent } from '../dialog-with-content';\nimport { ResponsiveImage, getCurrentAspectRatioAndUrl } from '@dx-ui/osc-responsive-image';\nimport type { TLayout } from '../common.types';\nimport type { TFullWidthImage } from './full-width-image.types';\nimport { FullWidthImageDialogAspectRatio } from './full-width-image.types';\nimport { Icon } from '@dx-ui/osc-icon';\nimport { ANALYTICS_GLOBAL_CLICK_EVENT, ImageFunction, trackEvent } from '@dx-ui/config-metrics';\nimport { generateFullWidthMediaMetricsParams } from './libs/utils/full-width-image-analytics';\n\nexport type FullWidthImageProps = TLayout & TFullWidthImage;\n\n/**\n * FullWidthImage renders an image at the full width of the content, includes text overlay that opens a modal.\n *\n * Multiple imageUrls are provided, and displayed conditionally at different breakpoints. Clicking the FullWidthImage will open a DialogWithContent\n */\nexport const FullWidthImage: React.FC<FullWidthImageProps> = ({\n id,\n desktopImageUrl,\n tabletImageUrl,\n mobileImageUrl,\n imageAltText,\n captionData,\n imageOverlayButtonText,\n title,\n description,\n link,\n overlayButtonClicked,\n ...props\n}) => {\n const [showInfoContainer, setShowInfoContainer] = useState(false);\n const ref = useRef<React.ElementRef<'div'>>(null);\n const rect = useRect({ ref });\n const [imgLoaded, setImgLoaded] = useState(false);\n\n const handleImageOverlayButtonClick = () => {\n setShowInfoContainer(true);\n overlayButtonClicked && overlayButtonClicked();\n trackEvent(\n ANALYTICS_GLOBAL_CLICK_EVENT,\n generateFullWidthMediaMetricsParams({\n headline: title,\n itemTitle: imageOverlayButtonText,\n imageFunction: ImageFunction.Modal,\n })\n );\n };\n const handleCloseButtonClick = () => {\n setShowInfoContainer(false);\n };\n\n if (!desktopImageUrl || !tabletImageUrl || !mobileImageUrl) {\n return null;\n }\n\n const { imageUrl, aspectRatio } = getCurrentAspectRatioAndUrl({\n width: rect?.width || 0,\n imageUrlMobile: mobileImageUrl,\n imageUrlTablet: desktopImageUrl,\n imageUrlDesktop: desktopImageUrl,\n aspectRatioMobile: '3:2',\n aspectRatioTablet: '18:5',\n aspectRatioDesktop: '18:5',\n });\n\n return (\n <div\n id={id}\n ref={ref}\n data-testid=\"fullWidthImage\"\n className=\"brand-wa:py-16 brand-wa:xl:py-20 container py-8 xl:py-12\"\n >\n <div\n data-testid=\"fullwidth-image-wrap\"\n className=\"image-corner-radius relative flex flex-col justify-center overflow-hidden\"\n >\n {imageOverlayButtonText ? (\n <div className={cx('absolute flex size-full items-end', { 'z-2': imgLoaded })}>\n <div className=\"from-bg-inverse size-full bg-gradient-to-t to-transparent\">\n <button\n className=\"brand-es:font-headline brand-es:font-normal brand-gu:font-headline brand-gu:font-normal brand-ou:font-headline brand-ou:font-normal text-text-overlay brand-ey:text-text-inverse brand-ou:text-text-inverse absolute bottom-2 right-4 flex h-14 cursor-pointer items-center border-0 text-right text-xl font-bold leading-5 md:bottom-8 lg:right-8 lg:text-4xl\"\n type=\"button\"\n onClick={handleImageOverlayButtonClick}\n data-testid=\"overlayButton\"\n >\n <span>{imageOverlayButtonText} </span>\n <Icon\n className=\"-mx-4 size-12 xl:size-16 rtl:-scale-x-100\"\n name=\"arrow-small-right\"\n />\n </button>\n </div>\n </div>\n ) : null}\n\n <ResponsiveImage\n id={`${id}-img`}\n aspectRatio={aspectRatio}\n imageUrl={imageUrl}\n altText={imageAltText || ''}\n width={rect?.width ?? 0}\n onImgLoaded={() => setImgLoaded(true)}\n captionData={captionData}\n onClick={() =>\n trackEvent(\n ANALYTICS_GLOBAL_CLICK_EVENT,\n generateFullWidthMediaMetricsParams({\n headline: title,\n imageFunction: ImageFunction.Link,\n itemTitle: captionData?.caption,\n })\n )\n }\n />\n </div>\n\n {imageOverlayButtonText ? (\n <DialogWithContent\n data-testid=\"fullWidthImageModalDialog\"\n id=\"fullWidthImageModalOverlay\"\n isOpen={showInfoContainer}\n containerAspectRatio={FullWidthImageDialogAspectRatio}\n imageAspectRatio={FullWidthImageDialogAspectRatio}\n imageUrls={{ desktopImageUrl, mobileImageUrl, tabletImageUrl }}\n captionData={captionData}\n imageAltText={`${imageAltText} modal`}\n title={title}\n headline={title}\n content={description}\n link={link}\n onClose={handleCloseButtonClick}\n captionMetricsOnClick={() =>\n trackEvent(\n ANALYTICS_GLOBAL_CLICK_EVENT,\n generateFullWidthMediaMetricsParams({\n headline: title,\n imageFunction: ImageFunction.Link,\n itemTitle: captionData?.caption,\n })\n )\n }\n brandLinkMetricsOnClick={() =>\n trackEvent(\n ANALYTICS_GLOBAL_CLICK_EVENT,\n generateFullWidthMediaMetricsParams({\n headline: title,\n imageFunction: ImageFunction.Link,\n itemTitle: link?.label,\n })\n )\n }\n {...props}\n />\n ) : null}\n </div>\n );\n};\n","export * from './full-width-image';\nexport * from './full-width-image.types';\n","import { ANALYTICS_NO_VALUE, ImageClickID, ImageFunction, ImageType } from '@dx-ui/config-metrics';\nimport type { HalfAndHalfMetrics } from '../types/half-and-half-analytics';\n\nexport const HALF_AND_HALF_IMAGE_COUNT = 1;\n\ntype GenerateHalfAndHalfMetricsParams = {\n headline?: string;\n itemTitle?: string;\n};\n\nexport const generateHalfAndHalfMetrics = ({\n headline,\n itemTitle,\n}: GenerateHalfAndHalfMetricsParams): HalfAndHalfMetrics => {\n const halfAndHalfMetrics = {\n click: {\n clickID: ImageClickID.Img,\n },\n osc: {\n image: {\n headline: headline || ANALYTICS_NO_VALUE,\n itemTitle: itemTitle || ANALYTICS_NO_VALUE,\n position: HALF_AND_HALF_IMAGE_COUNT,\n count: HALF_AND_HALF_IMAGE_COUNT,\n type: ImageType.Half,\n function: ImageFunction.Link,\n },\n },\n };\n\n return halfAndHalfMetrics;\n};\n","import { useRef } from 'react';\nimport { useMediaQuery, useResizeObserver } from 'usehooks-ts';\nimport type { HalfAndHalfProps } from './half-and-half';\nimport cx from 'classnames';\nimport { BrandTextBody } from '@dx-ui/osc-brand-text-body';\nimport { BrandTextHeader } from '@dx-ui/osc-brand-text-header';\nimport { ParallaxBanner, ParallaxBannerLayer } from 'react-scroll-parallax';\nimport { YouTubeVideo } from '@dx-ui/osc-youtube-video';\nimport { ResponsiveImage } from '@dx-ui/osc-responsive-image';\nimport { BrandLink } from '@dx-ui/osc-brand-buttons';\nimport {\n Video,\n VideoCaptions,\n VideoControls,\n VideoTranscript,\n useVideoPlayerClasses,\n useVideoPlayer,\n VideoPlayerMarkup,\n} from '@dx-ui/osc-video-player';\nimport { CarouselSingle, generateCpmCarouselMetrics } from '@dx-ui/osc-carousel';\nimport { useRect } from '@dx-ui/utilities-use-rect';\nimport { Pagination } from '@dx-ui/osc-pagination';\nimport { useCycle } from '@dx-ui/osc-cycle';\nimport type { AgentStatus } from '@dx-ui/framework-conductrics';\nimport { sendReward, useConductricsSelection, Status } from '@dx-ui/framework-conductrics';\nimport { ANALYTICS_GLOBAL_CLICK_EVENT, trackEvent } from '@dx-ui/config-metrics';\nimport { generateHalfAndHalfMetrics } from './libs/utils/half-and-half-analytics';\n\nfunction sendHalfAndHalfCtaReward(isMobile: boolean) {\n if (isMobile) {\n sendReward('g-BzOBPhK7V7');\n }\n}\nfunction useHalfAndHalfMobileLayoutTest(status: AgentStatus | undefined) {\n const { selection, isLoaded } = useConductricsSelection('a-sYzuWw8FXGMx', status);\n return {\n variantA: isLoaded && selection?.choice === 'A',\n variantB: isLoaded && selection?.choice === 'B',\n };\n}\n\nexport type THalfAndHalfContentProps = HalfAndHalfProps & {\n isPositionOdd?: boolean;\n activeIndex?: number;\n count?: number;\n isFullCarousel?: boolean;\n isFullScreen?: boolean;\n mediaRatio?: '50-50' | '60-40' | '70-30';\n};\n\nfunction CarouselControls() {\n const { cycleId, active, total, onNextClick, onPreviousClick } = useCycle();\n return (\n <div\n data-e2e=\"arrows\"\n className=\"pointer-events-none inset-0 justify-end whitespace-nowrap text-lg xl:flex-row\"\n id={cycleId}\n >\n <Pagination\n controls={cycleId}\n label=\"Carousel\"\n hideLabel\n current={active}\n total={total}\n onNextClick={onNextClick}\n onPreviousClick={onPreviousClick}\n loop\n />\n </div>\n );\n}\n\nconst HalfAndHalfContent = ({\n imageUrl,\n captionData,\n headline,\n description,\n copy,\n imageAltText,\n id,\n link,\n hasParallax,\n isPositionOdd,\n media,\n hasImageCarousel,\n carouselImages,\n speed = -10,\n cmsDocumentControl,\n brandComponentTheme,\n index,\n activeIndex,\n count,\n isFullCarousel,\n isFullScreen,\n mediaRatio = '50-50',\n}: THalfAndHalfContentProps) => {\n const ref = useRef<React.ElementRef<'div'>>(null);\n const rect = useRect({ ref });\n const wrapperElement = useRef<React.ElementRef<'div'>>(null);\n const isVideo = Boolean(media?.video?.url || media?.multimedia?.videoUrl);\n const isYouTubeShort = media?.video?.source === 'youtube-short';\n const isPortrait = media?.multimedia?.orientation === 'portrait';\n const isLandscape = media?.multimedia?.orientation === 'landscape';\n const isVerticalVideo = isVideo && (isYouTubeShort || isPortrait);\n const videoUrl = media?.multimedia?.videoUrl || '';\n const isCinemagraph = !!media?.multimedia?.altText;\n const hasAudio = !isCinemagraph && !media?.multimedia?.isMuted;\n const playerProps = useVideoPlayer({\n ...media?.multimedia,\n hasAudio,\n videoUrl,\n wrapperElement,\n });\n const playerClassNames = useVideoPlayerClasses({ isLandscape });\n const hasActiveTranscript = Boolean(playerProps.videoTranscriptProps?.activeTranscript);\n const isLarge = useMediaQuery('(min-width: 1024px)');\n const videoSize = useResizeObserver({ ref: playerProps.videoProps.videoElement });\n const height = videoSize?.height ?? 0;\n const transcriptStyle = isLarge && !isVerticalVideo ? { height: `${height}px` } : undefined;\n const isDark = brandComponentTheme === 'dark';\n const isLight = brandComponentTheme === 'light';\n const isTabletAndMobile = useMediaQuery(`(max-width:1023px)`);\n const isMobile = useMediaQuery('(max-width: 640px)');\n const mobileLayout = useHalfAndHalfMobileLayoutTest(isMobile ? Status.OK : Status.PENDING);\n const Transcript = hasActiveTranscript ? (\n <VideoTranscript\n {...playerProps.videoTranscriptProps}\n style={transcriptStyle}\n brandComponentTheme={brandComponentTheme}\n className={cx('overflow-hidden p-4 lg:mb-6', {\n '[&>ol]:lg:max-h-full [&>ol]:lg:pb-16': !isVerticalVideo,\n '[&>ol]:lg:max-h-64': isVerticalVideo,\n })}\n />\n ) : null;\n const LongDescription = copy ? (\n <BrandTextBody\n // eslint-disable-next-line tailwindcss/no-custom-classname -- tracked in NHCBP-5929\n className={cx(\n 'brand-up:mb-12 text-text brand-ou:text-primary brand-up:text-center !text-xl',\n {\n 'text-text-inverse': isDark,\n 'brand-ht:text-text-inverse': isLight,\n }\n )}\n brandComponentTheme={brandComponentTheme}\n >\n {copy}\n </BrandTextBody>\n ) : null;\n //\n const CtaLink =\n link?.label && link?.url ? (\n <div\n className={cx('pt-6', {\n 'mb-4': isTabletAndMobile && mobileLayout.variantA,\n })}\n >\n <BrandLink\n onClick={() => {\n trackEvent(\n ANALYTICS_GLOBAL_CLICK_EVENT,\n generateHalfAndHalfMetrics({\n headline,\n itemTitle: link.label,\n })\n );\n\n sendHalfAndHalfCtaReward(isMobile);\n }}\n label={link.label}\n isNewWindow={link.isNewWindow}\n showNewWindowIcon={link.isNewWindow}\n url={link.url}\n brandComponentTheme={brandComponentTheme}\n data-conductrics-goal={link.experimentationConfiguration?.goal}\n data-conductrics-value={link.experimentationConfiguration?.value}\n />\n </div>\n ) : null;\n const Headline = headline ? (\n <BrandTextHeader\n className={cx('tracking-tight sm:!text-3xl lg:mb-4', {\n '!text-text-inverse': isDark,\n 'brand-ht:text-text-inverse': isLight,\n 'mb-4': isTabletAndMobile && mobileLayout.variantB,\n })}\n >\n {headline}\n </BrandTextHeader>\n ) : null;\n const ShortDescription = description ? (\n <BrandTextBody\n // eslint-disable-next-line tailwindcss/no-custom-classname -- tracked in NHCBP-5929\n className={cx('py-4 font-sans !text-xl lg:pt-0', {\n 'text-text-inverse': isDark,\n 'brand-ht:text-text-inverse': isLight,\n 'brand-ou:text-primary': !isDark,\n })}\n brandComponentTheme={brandComponentTheme}\n >\n {description}\n </BrandTextBody>\n ) : null;\n\n const ImgVideoContent = (\n <div\n data-testid=\"halfNHalfMedia\"\n className={cx({\n 'lg:w-4/12 max-w-sm': isVerticalVideo,\n 'lg:w-1/2': !isVerticalVideo && mediaRatio === '50-50',\n 'lg:w-3/5': !isVerticalVideo && mediaRatio === '60-40',\n 'lg:w-2/3': !isVerticalVideo && mediaRatio === '70-30',\n })}\n >\n {imageUrl && !isVideo && !hasImageCarousel ? (\n <div className=\"relative overflow-hidden py-2 lg:py-0\" ref={ref}>\n <ParallaxBanner className=\"aspect-[3/2]\" disabled={!hasParallax || isVideo}>\n <ParallaxBannerLayer\n speed={speed}\n expanded={false}\n scale={[1.2, 1.2]}\n disabled={!hasParallax || isVideo}\n >\n <ResponsiveImage\n aspectRatio=\"3:2\"\n id={id}\n imageUrl={imageUrl}\n altText={imageAltText ?? ''}\n width={rect?.width ?? 0}\n captionData={captionData}\n className=\"image-corner-radius\"\n onClick={() =>\n trackEvent(\n ANALYTICS_GLOBAL_CLICK_EVENT,\n generateHalfAndHalfMetrics({\n headline,\n itemTitle: captionData?.caption,\n })\n )\n }\n />\n </ParallaxBannerLayer>\n </ParallaxBanner>\n </div>\n ) : null}\n\n {isVideo ? (\n <div className=\"relative py-2 lg:py-0\">\n {media?.video?.url && media.video.title ? (\n <YouTubeVideo\n {...media.video}\n wrapperClassName=\"overflow-hidden\"\n id={media.video.title.trim()}\n isVertical={isVerticalVideo}\n isAutoPlay={false}\n />\n ) : media?.multimedia?.videoUrl ? (\n <>\n <div\n className={cx(playerClassNames.wrapperClassNames, 'mb-8', {\n 'sm:mb-0': !isVerticalVideo,\n 'lg:mb-0': isVerticalVideo,\n })}\n >\n <Video\n {...playerProps.videoProps}\n captionData={media?.multimedia?.captionData}\n isAutoPlay={media?.multimedia?.isAutoPlay}\n posterImageUrl={media?.multimedia?.posterImageUrl}\n videoId={media?.multimedia?.videoId}\n videoUrl={videoUrl}\n role={isCinemagraph ? 'img' : undefined}\n aria-label={isCinemagraph ? media?.multimedia?.altText : undefined}\n />\n <VideoCaptions\n {...playerProps.videoCaptionProps}\n brandComponentTheme={brandComponentTheme}\n className={playerClassNames.captionClassNames}\n />\n <VideoControls\n videoVariant={isCinemagraph ? 'cinemagraph' : undefined}\n {...playerProps.videoControlsProps}\n brandComponentTheme={brandComponentTheme}\n className={playerClassNames.controlsClassNames['default']}\n />\n </div>\n <div className=\"lg:hidden\">{Transcript}</div>\n </>\n ) : null}\n </div>\n ) : null}\n\n {hasImageCarousel && carouselImages && !isVideo ? (\n <CarouselSingle\n images={carouselImages}\n showAlternateControls={false}\n className=\"image-corner-radius\"\n metrics={generateCpmCarouselMetrics(headline)}\n />\n ) : null}\n </div>\n );\n\n const DefaultLayout = (\n <>\n <div\n data-testid=\"halfNHalfContent\"\n className={cx({\n 'lg:w-1/2': mediaRatio === '50-50',\n 'lg:w-2/5': mediaRatio === '60-40',\n 'lg:w-1/3': mediaRatio === '70-30',\n 'lg:ps-10': isFullScreen && isPositionOdd,\n })}\n >\n <div className=\"hidden lg:block\">{Transcript}</div>\n {Headline}\n {ShortDescription}\n <div className=\"hidden lg:block\">\n {LongDescription}\n {CtaLink}\n </div>\n </div>\n {ImgVideoContent}\n <div className=\"lg:hidden\">\n {LongDescription}\n {CtaLink}\n </div>\n </>\n );\n const MobileLayoutVariantAB =\n isTabletAndMobile && (mobileLayout.variantA || mobileLayout.variantB) ? (\n <>\n {Headline}\n {mobileLayout.variantB ? ImgVideoContent : null}\n {ShortDescription}\n {CtaLink}\n {mobileLayout.variantA ? ImgVideoContent : null}\n </>\n ) : null;\n\n return (\n <div\n className={cx('brand-wa:py-16 brand-wa:xl:py-20 relative py-8 xl:py-12', {\n container: !isFullScreen,\n 'px-4 md:px-8 lg:px-0': isFullScreen,\n hidden: isFullCarousel && index !== activeIndex,\n })}\n ref={wrapperElement}\n data-testid={\n isFullCarousel && activeIndex !== undefined\n ? `halfNHalf-slide-${activeIndex + 1}-of-${count}`\n : undefined\n }\n >\n {media?.multimedia?.markupSchemas ? (\n <VideoPlayerMarkup markupSchemas={media.multimedia.markupSchemas} />\n ) : null}\n <div\n className={cx('relative w-full justify-center gap-12 lg:flex', {\n 'flex-row-reverse': !isPositionOdd,\n 'items-center': !hasActiveTranscript,\n 'items-start': hasActiveTranscript,\n 'max-w-sm mx-auto lg:max-w-full': isVerticalVideo,\n })}\n data-testid=\"halfNHalfContentWrapper\"\n >\n {MobileLayoutVariantAB || DefaultLayout}\n </div>\n {isFullCarousel && (count ?? 0) > 1 && (\n <div\n className={cx('relative -start-7 mt-6 flex lg:absolute lg:bottom-12 lg:mt-0', {\n 'lg:start-3': isPositionOdd,\n 'lg:end-10 lg:start-auto': !isPositionOdd,\n })}\n >\n <CarouselControls />\n </div>\n )}\n {cmsDocumentControl}\n </div>\n );\n};\n\nexport { HalfAndHalfContent };\nexport default HalfAndHalfContent;\n","import type { ReactNode } from 'react';\nimport cx from 'classnames';\nimport { HalfAndHalfContent } from './half-and-half-content';\nimport type { Link } from '@dx-ui/osc-link';\nimport type { Media } from '../common.types';\nimport type { TResponsiveImage } from '@dx-ui/osc-responsive-image';\nimport type { CaptionProps } from '@dx-ui/osc-caption';\n\nexport type MarkdownLink = {\n adaDescription?: string;\n isNewWindow?: boolean;\n markdown: string;\n url: string;\n};\n\nexport type HalfAndHalfProps = {\n /**\n * sets position of image left or right\n */\n index: number;\n /**\n * should the half and half be flipped?\n */\n isReverse?: boolean;\n /**\n * the url to the image.\n */\n imageUrl?: string;\n captionData?: TResponsiveImage['captionData'];\n /**\n * whether the background color should be altered and if they should be on `even` or `odd` components.\n */\n showBackgroundOn?: 'even' | 'odd';\n /**\n * renders the headline as an heading.\n */\n headline?: string;\n /**\n * renders the description as a paragraph.\n */\n description?: string;\n /**\n * Long description as a paragraph.\n */\n copy?: string;\n /**\n * the description of the image being rendered.\n */\n imageAltText?: string;\n link?: Link & { experimentationConfiguration?: CmsExperimentationConfiguration };\n id?: string;\n brandComponentTheme?: CmsBrandComponentTheme;\n /**\n * Adds an image carousel to a single Half and Half content block\n */\n hasImageCarousel?: boolean;\n /**\n * Loads the carousel images\n */\n carouselImages?: { alt: string; url: string; captionData?: CaptionProps }[];\n /**\n * renders the component with a parallax animation.\n */\n hasParallax?: boolean;\n /**\n * the speed of Parallax\n */\n speed?: number;\n /**\n * Props for custom video player or YouTube player.\n */\n media?: Media;\n /**\n * CMS document editor button\n */\n cmsDocumentControl?: ReactNode;\n /**\n * Translation CSS classes to add to each item\n */\n cmsTranslationClasses?: string;\n /**\n * Full Screen / Full Bleed mode\n */\n isFullScreen?: boolean;\n /**\n * Ratio of Copy / Media section\n */\n mediaRatio?: '50-50' | '60-40' | '70-30';\n};\n\n/**\n * HalfAndHalf renders a component with an image on one half and attached content of headline, text and a CTA on the other half.\n *\n * The `index` prop is used by HalfAndHalf components to alternate their layout so their images appear on alternating sides of the page, this can be done on single or multiple components.\n */\nexport const HalfAndHalf = ({\n index,\n isReverse = false,\n brandComponentTheme,\n hasParallax = false,\n id,\n cmsTranslationClasses,\n media,\n hasImageCarousel,\n carouselImages,\n isFullScreen,\n mediaRatio,\n ...rest\n}: HalfAndHalfProps) => {\n const currElemIndxType = !Number.isNaN(index) && (index % 2 === 0 ? 'even' : 'odd');\n const isPositionOdd = isReverse ? currElemIndxType === 'even' : currElemIndxType === 'odd';\n const isLight = brandComponentTheme === 'light';\n const isDark = brandComponentTheme === 'dark';\n\n const containerBgClass = {\n 'bg-bg-light': isLight,\n 'bg-bg-dark': isDark,\n 'bg-transparent': !isLight && !isDark,\n 'brand-po:bg-bg-alt': !isPositionOdd && !isLight && !isDark,\n };\n\n return (\n <div\n id={id}\n className={cx(\n 'w-full',\n isPositionOdd ? `half-and-half-odd-${index}` : `half-and-half-even-${index}`,\n containerBgClass,\n cmsTranslationClasses\n )}\n data-testid=\"halfnhalf-sections-wrapper\"\n >\n <HalfAndHalfContent\n brandComponentTheme={brandComponentTheme}\n index={index}\n isPositionOdd={isPositionOdd}\n hasParallax={hasParallax}\n media={media}\n hasImageCarousel={hasImageCarousel}\n carouselImages={carouselImages}\n isFullScreen={isFullScreen}\n mediaRatio={mediaRatio}\n {...rest}\n />\n </div>\n );\n};\n","import type { ReactNode } from 'react';\nimport cx from 'classnames';\nimport { HalfAndHalfContent } from './half-and-half-content';\nimport type { HalfAndHalfProps } from './half-and-half';\nimport { Cycle, CycleContext } from '@dx-ui/osc-cycle';\n\nexport type HalfAndHalfCarouselItem = Pick<\n HalfAndHalfProps,\n | 'copy'\n | 'link'\n | 'headline'\n | 'description'\n | 'imageUrl'\n | 'captionData'\n | 'imageAltText'\n | 'media'\n>;\n\nexport type HalfAndHalfCarouselProps = {\n /**\n * sets position of image left or right\n */\n index?: number;\n /**\n * should the half and half be flipped?\n */\n isReverse?: boolean;\n /**\n * whether the background color should be altered and if they should be on `even` or `odd` components.\n */\n showBackgroundOn?: 'even' | 'odd';\n /**\n * Unique ID\n */\n id?: string;\n /**\n * CPM controlled brand color themes\n */\n brandComponentTheme?: CmsBrandComponentTheme;\n /**\n * renders the component with a parallax animation.\n */\n hasParallax?: boolean;\n /**\n * the speed of Parallax\n */\n speed?: number;\n /**\n * CMS document editor button\n */\n cmsDocumentControl?: ReactNode;\n /**\n * Translation CSS classes to add to each item\n */\n cmsTranslationClasses?: string;\n /**\n * Carousel Items\n */\n carouselItems: HalfAndHalfCarouselItem[];\n /**\n * Full Screen / Full Bleed mode\n */\n isFullScreen?: boolean;\n /**\n * Ratio of Copy / Media section\n */\n mediaRatio?: '50-50' | '60-40' | '70-30';\n};\n\nexport const HalfAndHalfCarousel = ({\n index = 0,\n isReverse = false,\n brandComponentTheme,\n id,\n cmsTranslationClasses,\n carouselItems,\n hasParallax,\n isFullScreen,\n mediaRatio,\n}: HalfAndHalfCarouselProps) => {\n const currElemIndxType = !Number.isNaN(index) && (index % 2 === 0 ? 'even' : 'odd');\n const isPositionOdd = isReverse ? currElemIndxType === 'even' : currElemIndxType === 'odd';\n const isLight = brandComponentTheme === 'light';\n const isDark = brandComponentTheme === 'dark';\n\n const containerBgClass = {\n 'bg-bg-light': isLight,\n 'bg-bg-dark': isDark,\n 'bg-transparent': !isLight && !isDark,\n 'brand-po:bg-bg-alt': !isPositionOdd && !isLight && !isDark,\n };\n\n const count = carouselItems.length;\n if (!count) {\n return null;\n }\n\n return (\n <div\n id={id}\n className={cx('w-full', containerBgClass, cmsTranslationClasses)}\n data-testid=\"halfnhalf-carousel-sections-wrapper\"\n >\n <Cycle total={count} current={0}>\n <CycleContext.Consumer>\n {({ active, cycleId }) => (\n <div id={cycleId}>\n <HalfAndHalfContent\n isFullCarousel={true}\n index={active}\n activeIndex={active}\n isPositionOdd={isPositionOdd}\n hasParallax={hasParallax}\n imageUrl={carouselItems[active]?.imageUrl}\n captionData={carouselItems[active]?.captionData}\n headline={carouselItems[active]?.headline}\n description={carouselItems[active]?.description}\n copy={carouselItems[active]?.copy}\n imageAltText={carouselItems[active]?.imageAltText}\n link={carouselItems[active]?.link}\n media={carouselItems[active]?.media}\n count={count}\n isFullScreen={isFullScreen}\n mediaRatio={mediaRatio}\n brandComponentTheme={brandComponentTheme}\n />\n </div>\n )}\n </CycleContext.Consumer>\n </Cycle>\n </div>\n );\n};\n","export * from './half-and-half';\nexport * from './half-and-half-carousel';\n","import type * as React from 'react';\nimport { useCycle } from '@dx-ui/osc-cycle';\n\nconst ImageHeadlinerContent = ({ children }: React.PropsWithChildren) => {\n const { cycleId } = useCycle();\n return (\n <div id={cycleId} aria-live=\"polite\" className=\"w-full\">\n {children}\n </div>\n );\n};\n\nexport { ImageHeadlinerContent };\nexport default ImageHeadlinerContent;\n","import type { ImageClickIDType, ImageFunctionType } from '@dx-ui/config-metrics';\nimport { ANALYTICS_NO_VALUE, ImageType, ImageFunction, ImageClickID } from '@dx-ui/config-metrics';\nimport type { ImageHeadlinerMetrics } from '../types/image-headliner-analytics';\n\ntype GenerateImageHeadlinerMetricsParams = {\n headline?: string;\n itemTitle?: string;\n position: number;\n count: number;\n imageFunction?: ImageFunctionType;\n clickID: ImageClickIDType;\n};\n\nexport const generateImageHeadlinerMetrics = ({\n clickID = ImageClickID.Img,\n headline = ANALYTICS_NO_VALUE,\n itemTitle = ANALYTICS_NO_VALUE,\n imageFunction,\n position,\n count,\n}: GenerateImageHeadlinerMetricsParams): ImageHeadlinerMetrics => {\n const ImageHeadlinerMetrics: ImageHeadlinerMetrics = {\n click: {\n clickID,\n },\n osc: {\n image: {\n headline,\n itemTitle,\n position,\n count,\n type: ImageType.Headliner,\n },\n },\n };\n\n if (imageFunction) {\n ImageHeadlinerMetrics.osc.image.function = ImageFunction.Link;\n }\n\n return ImageHeadlinerMetrics;\n};\n","import { Pagination } from '@dx-ui/osc-pagination';\nimport { useCycle } from '@dx-ui/osc-cycle';\nimport cx from 'classnames';\nimport {\n ANALYTICS_GLOBAL_CLICK_EVENT,\n ANALYTICS_NO_VALUE,\n ImageClickID,\n trackEvent,\n} from '@dx-ui/config-metrics';\nimport { generateImageHeadlinerMetrics } from './utils/image-headliner-analytics';\nimport type { TImageHeadlinerItemData } from './image-headliner';\n\nexport type TImageHeadlinerControls = {\n label?: string;\n hideLabel?: boolean;\n hasLoop?: boolean;\n brandComponentTheme?: CmsBrandComponentTheme;\n itemData: TImageHeadlinerItemData[];\n};\n\nconst ImageHeadlinerControls = ({\n label = 'Page',\n hideLabel = true,\n hasLoop = true,\n brandComponentTheme,\n itemData,\n}: TImageHeadlinerControls) => {\n const { hasSlides, cycleId, active, total, onNextClick, onPreviousClick } = useCycle();\n\n const currentItem = itemData[active];\n const currentHeadline = currentItem?.headline;\n const currentCtaText = currentItem?.ctaText;\n const currentPosition = currentItem?.position || 1;\n const totalItems = itemData.length;\n const trackImageHeadlinerScrollClick = () => {\n trackEvent(\n ANALYTICS_GLOBAL_CLICK_EVENT,\n generateImageHeadlinerMetrics({\n clickID: ImageClickID.Scroll,\n headline: currentHeadline,\n itemTitle: currentCtaText || ANALYTICS_NO_VALUE,\n position: currentPosition,\n count: totalItems,\n })\n );\n };\n\n const onNextClickWithAnalytics = () => {\n trackImageHeadlinerScrollClick();\n onNextClick();\n };\n const onPreviousClickWithAnalytics = () => {\n trackImageHeadlinerScrollClick();\n onPreviousClick();\n };\n\n const isDark = brandComponentTheme === 'dark';\n const isLight = brandComponentTheme === 'light';\n return hasSlides ? (\n <div\n data-e2e=\"arrows\"\n className={cx(\n 'pointer-events-none inset-0 mr-4 justify-end whitespace-nowrap text-xl font-bold lg:text-2xl',\n {\n 'text-text-inverse': isDark,\n 'brand-ht:text-text-inverse': isLight,\n 'image-headliner-controls-default': !isDark && !isLight,\n }\n )}\n >\n <Pagination\n controls={cycleId}\n label={label}\n hideLabel={hideLabel}\n current={active}\n total={total}\n onNextClick={onNextClickWithAnalytics}\n onPreviousClick={onPreviousClickWithAnalytics}\n loop={hasLoop}\n // TODO: bring this prop back once OSC-1278 is complete\n // // isHeadliner={true}\n />\n </div>\n ) : null;\n};\n\nexport { ImageHeadlinerControls };\nexport default ImageHeadlinerControls;\n","import type { ReactNode } from 'react';\nimport type { Link } from '@dx-ui/osc-link';\nimport { useCycle } from '@dx-ui/osc-cycle';\nimport cx from 'classnames';\nimport Image from 'next/image';\nimport {\n ANALYTICS_GLOBAL_CLICK_EVENT,\n ImageClickID,\n trackEvent,\n ImageFunction,\n} from '@dx-ui/config-metrics';\nimport { generateImageHeadlinerMetrics } from './utils/image-headliner-analytics';\n\nexport type TImageHeadlinerItem = {\n headline?: string;\n id?: string;\n link?: Link & { experimentationConfiguration?: CmsExperimentationConfiguration } & {\n onLinkClick?: (e?: React.SyntheticEvent<HTMLAnchorElement>) => void;\n };\n imageAltText?: string;\n imageUrl?: string;\n isPortfolio?: boolean;\n index?: number;\n /** Determines brand color theme for component */\n brandComponentTheme?: CmsBrandComponentTheme;\n /** CMS document editor button **/\n cmsDocumentControl?: ReactNode;\n /* Translation CSS classes to add to each item */\n cmsTranslationClasses?: string;\n /* Total number of slides in the component */\n totalSlides?: number;\n};\n\n/**\n * A headline item that can contain an image, headline text, and link to more information.\n */\nexport const ImageHeadlinerItem = (props: TImageHeadlinerItem) => {\n const { active, hasSlides } = useCycle();\n const {\n headline,\n id,\n link,\n imageUrl,\n imageAltText,\n index = 0,\n brandComponentTheme,\n cmsDocumentControl,\n cmsTranslationClasses,\n totalSlides = 1,\n ...rest\n } = props;\n const describedByID = `${id}-description`;\n\n const imageCss = 'inline-block max-h-12 md:max-h-16 w-16 md:w-24';\n\n const target = link?.isNewWindow ? '_blank' : '_self';\n const rel = link?.isNewWindow ? 'noopener' : null;\n\n const isDark = brandComponentTheme === 'dark';\n const isLight = brandComponentTheme === 'light';\n\n return (\n <div\n data-testid=\"imageHeadlinerItem\"\n {...rest}\n className={cx(\n 'mx-4 my-2 flex justify-center md:m-0 md:mx-auto md:w-4/5 md:px-4 lg:w-full lg:px-6',\n {\n hidden: hasSlides && index !== active,\n },\n cmsTranslationClasses\n )}\n >\n <span data-testid={describedByID} className=\"flex items-center text-left md:justify-center\">\n {imageUrl && imageAltText && (\n <div data-testid=\"imageHeadlinerImage\">\n <div className=\"relative mr-4 flex h-8 w-16 overflow-hidden md:mr-6 md:h-16 md:w-24\">\n <Image\n id={id}\n className={cx(imageCss)}\n alt={imageAltText}\n src={imageUrl}\n style={{\n objectFit: 'cover',\n }}\n fill\n />\n </div>\n </div>\n )}\n <span\n className={cx('image-headliner-item-text lg:image-headliner-font-size-lg', {\n 'text-text-inverse': isDark,\n 'image-headliner-item-text-light': isLight,\n })}\n aria-label={headline}\n >\n {headline}\n \n {link?.url && link.label && target && (\n <a\n className={cx(\n 'image-headliner-item-link inline-block overflow-visible underline sm:max-w-full md:inline md:max-w-none',\n {\n 'text-text-inverse': isDark,\n 'image-headliner-item-link-text-light': isLight,\n 'image-headliner-item-link-text-default': !isDark && !isLight,\n }\n )}\n href={link.url}\n aria-describedby={link.adaDescription ? describedByID : undefined}\n target={target}\n data-testid=\"imageHeaderlinerItemLink\"\n rel={rel || undefined}\n data-conductrics-goal={link.experimentationConfiguration?.goal}\n data-conductrics-value={link.experimentationConfiguration?.value}\n onClick={(e) => {\n trackEvent(\n ANALYTICS_GLOBAL_CLICK_EVENT,\n generateImageHeadlinerMetrics({\n clickID: ImageClickID.Img,\n headline,\n itemTitle: link.label,\n position: index + 1,\n count: totalSlides,\n imageFunction: ImageFunction.Link,\n })\n );\n link?.onLinkClick?.(e);\n }}\n >\n {link.label}\n </a>\n )}\n </span>\n </span>\n {cmsDocumentControl}\n </div>\n );\n};\n\nexport default ImageHeadlinerItem;\n","import * as React from 'react';\nimport { ImageHeadlinerContent } from './image-headliner-content';\nimport { ImageHeadlinerControls } from './image-headliner-controls';\nimport cx from 'classnames';\nimport type { Pagination } from '@dx-ui/osc-pagination';\nimport { Cycle } from '@dx-ui/osc-cycle';\nimport { ImageHeadlinerItem } from './image-headliner-item';\nimport { ANALYTICS_NO_VALUE } from '@dx-ui/config-metrics';\n\nexport type TImageHeadlinerItemData = {\n headline: string;\n ctaText: string;\n position: number;\n};\n\nexport type TImageHeadliner = Pick<Pagination, 'label' | 'loop' | 'hideLabel' | 'current'> &\n React.HTMLAttributes<HTMLDivElement>;\n\nexport type ImageHeadlinerType = {\n label?: string;\n className?: string;\n /** Determines brand color theme for component */\n brandComponentTheme?: CmsBrandComponentTheme;\n} & TImageHeadliner;\n\n/**\n * Used to grab a user's attention with a bold background color and text. Alerts users to promotions, new hotels for humans or supernatural beings, important legal updates.\n * Contains an image/logo, headline text and a link to more information.\n */\nexport const ImageHeadliner: React.FC<ImageHeadlinerType> = ({\n current,\n className = '',\n hideLabel,\n loop,\n label,\n children,\n brandComponentTheme,\n id = 'image-headliner-cycle-id',\n ...rest\n}) => {\n const validSlides = React.Children.map(\n children,\n (child) => React.isValidElement(child) && child.type === ImageHeadlinerItem && child\n )?.filter(Boolean) as unknown as (typeof ImageHeadlinerItem)[];\n\n const slides = React.Children.map(\n validSlides,\n (child, index) =>\n React.isValidElement(child) &&\n React.cloneElement(\n child as React.ReactElement<React.ComponentProps<typeof ImageHeadlinerItem>>,\n {\n index,\n totalSlides: validSlides.length,\n }\n )\n );\n const totalSlides = React.Children.count(slides);\n\n const isDark = brandComponentTheme === 'dark';\n const isLight = brandComponentTheme === 'light';\n\n const itemData =\n React.Children.map(children, (child, index) => {\n if (React.isValidElement(child) && child.type === ImageHeadlinerItem) {\n // Extract props for analytics\n const { headline, link } = child.props || {\n headline: ANALYTICS_NO_VALUE,\n link: {\n label: ANALYTICS_NO_VALUE,\n },\n };\n return {\n headline,\n ctaText: link?.label,\n position: index + 1,\n } as TImageHeadlinerItemData;\n }\n return null;\n })?.filter(Boolean) || [];\n\n return (\n <Cycle id={id} current={current} total={totalSlides}>\n <div\n className={cx(className, 'relative flex w-full flex-col items-center py-2 sm:flex-row', {\n 'bg-bg-dark': isDark,\n 'bg-bg-light': isLight,\n 'image-headliner-bg brand-hi-refresh:bg-accent': !isLight && !isDark,\n })}\n data-testid=\"imageHeadliner\"\n >\n <ImageHeadlinerContent {...rest}>{slides}</ImageHeadlinerContent>\n <ImageHeadlinerControls\n brandComponentTheme={brandComponentTheme}\n label={label}\n hideLabel={hideLabel}\n hasLoop={loop}\n itemData={itemData}\n />\n </div>\n </Cycle>\n );\n};\n\nexport default ImageHeadliner;\n","export * from './image-headliner';\nexport * from './image-headliner-item';\n","import { useRef, useEffect } from 'react';\nimport { useTranslation } from 'next-i18next';\nimport cx from 'classnames';\nimport { Dialog } from '@dx-ui/osc-dialog-v2';\nimport { ResponsiveImage } from '@dx-ui/osc-responsive-image';\nimport { BrandTextBody } from '@dx-ui/osc-brand-text-body';\nimport { BrandTextHeader } from '@dx-ui/osc-brand-text-header';\nimport type { SecurityDialogWithContentType } from './security-dialog.types';\nimport { useRect } from '@dx-ui/utilities-use-rect';\n\n/**\n * Security Dialog, or Gating Modal, is currently used for Corporate Advantage and travel agent pages.\n * This is a modal/dialog without a close button.\n *\n */\nexport const SecurityDialog = (props: SecurityDialogWithContentType) => {\n const [t] = useTranslation('osc-marketing-dx-dialog-with-content');\n const ref = useRef<React.ElementRef<'div'>>(null);\n const rect = useRect({ ref });\n const modalCloseButtonRef = useRef<HTMLButtonElement>(null);\n\n const {\n imageAspectRatio = '3:2',\n imageUrl,\n imageUrls,\n imageAltText,\n isOpen,\n id,\n headline,\n content,\n link,\n onClickLink,\n title,\n ...dialogProps\n } = props;\n\n const ariaLabelLink = [link?.adaDescription || '', link?.isNewWindow ? t('newWindow') : '']\n .filter(Boolean)\n .join(' - ');\n\n useEffect(() => {\n if (isOpen) {\n modalCloseButtonRef.current && modalCloseButtonRef.current.focus();\n }\n }, [isOpen, id]);\n\n const isHeadlineShown = headline && headline !== props?.title;\n\n let body: JSX.Element | null = null;\n if (content) {\n if (typeof content === 'string') {\n body = <BrandTextBody {...props}>{content}</BrandTextBody>;\n } else {\n body = <div className=\"prose lg:prose-xl my-2\">{content}</div>;\n }\n }\n\n return (\n <Dialog isOpen={isOpen} title={title} size=\"sm\" {...dialogProps}>\n <div\n data-testid=\"activeDialogWithContentBox\"\n className=\"flex h-full flex-col sm:h-auto\"\n ref={ref}\n >\n {/* This is needed in case we only need 1 img src that can be used for tablet, desktop and mobile screens */}\n {imageUrl ? (\n <div className=\"flex items-center justify-items-center overflow-y-hidden\">\n <ResponsiveImage\n id={id}\n aspectRatio={imageAspectRatio}\n imageUrl={imageUrl}\n altText={imageAltText ?? ''}\n width={rect?.width ?? 0}\n />\n </div>\n ) : null}\n {/* This is needed in case we have separate Urls for tablet, desktop and mobile screens */}\n {Array.isArray(imageUrls) && imageUrls.length > 0\n ? imageUrls.map((imgUrl) => {\n return (\n <div\n className={cx(\n 'flex items-center justify-items-center overflow-y-hidden',\n imgUrl?.className\n )}\n key={imgUrl.id}\n data-testid={`dialog-with-content-img-wrapper-${imgUrl?.screen}`}\n >\n <ResponsiveImage\n id={id}\n aspectRatio={imageAspectRatio}\n imageUrl={imgUrl?.url}\n altText={imageAltText ?? ''}\n width={rect?.width ?? 0}\n />\n </div>\n );\n })\n : null}\n\n <div className=\"box-border sm:px-8\" aria-live=\"polite\">\n {isHeadlineShown ? <BrandTextHeader {...props}>{headline}</BrandTextHeader> : null}\n\n {body}\n\n {link?.label && link?.url ? (\n <div className=\"inline-block w-full pb-4 pt-8 text-center\">\n <a\n className=\"btn btn-primary btn-xl\"\n href={link?.url}\n target={link?.isNewWindow ? '_blank' : '_self'}\n onClick={onClickLink}\n aria-label={ariaLabelLink}\n data-testid=\"dialogWithContentCTA\"\n rel=\"noreferrer\"\n >\n {link.label}\n </a>\n </div>\n ) : null}\n </div>\n </div>\n </Dialog>\n );\n};\n","export * from './security-dialog';\n","export * from './brand-showcase';\nexport * from './common.types';\nexport * from './dialog-with-content';\nexport * from './full-width-image';\nexport * from './half-and-half';\nexport * from './image-headliner';\nexport * from './security-dialog';\nexport * from './utils';\n","export * from './lib';\n","export const youtubeEmbedUrlPattern = RegExp('^https://(www.)?youtube.com/embed/');\nexport const youtubeShortsUrlPattern = RegExp('^https://(www.)?youtube.com/shorts/');\nexport const youtubePlaylistUrlPattern = RegExp(\n '^https://(www.)?youtube.com/watch\\\\?v=[^&]+&list=[^&]+'\n);\n\nexport const testUrlPattern = (url: string, pattern: RegExp) => {\n return pattern.test(url);\n};\n\nexport const getVideoSrc = (\n url: string | null,\n source: string | null,\n autoPlay: boolean,\n autoLoop: boolean\n) => {\n switch (source) {\n case 'youtube-short':\n case 'youtube': {\n if (!url) {\n return '';\n }\n\n try {\n const parsedUrl = new URL(url);\n\n let videoId, listId, listIndex;\n const isShortsLink = testUrlPattern(url, youtubeShortsUrlPattern);\n const isEmbedLink = testUrlPattern(url, youtubeEmbedUrlPattern);\n const isPlaylistLink = testUrlPattern(url, youtubePlaylistUrlPattern);\n\n if (isEmbedLink || isShortsLink) {\n videoId = parsedUrl.pathname ? parsedUrl.pathname.substring(isShortsLink ? 8 : 7) : '';\n\n const slashIndex = videoId.indexOf('/');\n if (slashIndex > 0) {\n videoId = videoId.substring(0, slashIndex);\n }\n } else {\n videoId = parsedUrl.searchParams.get('v');\n }\n\n if (isPlaylistLink) {\n listId = parsedUrl.searchParams.get('list');\n listIndex = parsedUrl.searchParams.get('index');\n return `https://www.youtube.com/embed?listType=playlist&list=${listId}&rel=0;&autoplay=${\n autoPlay ? '1' : '0'\n }&controls=1&enablejsapi=1&showinfo=0&playsinline=1&cc_lang_pref=en&cc_load_policy=0&modestbranding=1${\n autoPlay ? '&mute=1' : ''\n }${listIndex ? `&index=${listIndex}` : ''}`;\n }\n\n if (videoId) {\n return `https://www.youtube.com/embed/${videoId}/?rel=0;&autoplay=${\n autoPlay ? '1' : '0'\n }&controls=1&enablejsapi=1&showinfo=0&playsinline=1&cc_lang_pref=en&cc_load_policy=0&modestbranding=1${\n autoPlay ? '&mute=1' : ''\n }${autoLoop ? `&loop=1&playlist=${videoId}` : ''}`;\n }\n return '';\n } catch {\n return '';\n }\n }\n default: {\n return url || '';\n }\n }\n};\n","export * from './get-video-src';\n","export * from './lib';\n","import { useRef, useCallback, useEffect } from 'react';\nimport { getVideoSrc } from '@dx-ui/utilities-get-video-src';\nimport type { AspectRatio } from '@dx-ui/osc-responsive-image';\nimport cx from 'classnames';\n\ndeclare global {\n interface Window {\n YT: {\n Player: { new (arg0: string, arg1: Record<string, unknown>): void };\n };\n onYouTubeIframeAPIReady: () => void;\n }\n}\n\nexport type TYouTubeVideoProps = {\n id?: string;\n name?: string;\n /**\n * A11y requirement, iframe title for screen readers\n */\n title: string;\n /**\n * for example \"youtube\"\n */\n source: string;\n /**\n * Url of the video\n */\n url: string;\n /**\n * When present, the video will automatically start playing.\n */\n isAutoPlay?: boolean;\n /**\n * Specifies that the video will start over again, every time it is finished\n */\n isAutoLoop?: boolean;\n /**\n * Specified video aspect ratio\n */\n isVertical?: boolean;\n /**\n * Adds rounded corners\n */\n isRounded?: boolean;\n /**\n * Can be used to add styling to the wrapper div\n */\n wrapperClassName?: string;\n /**\n * This event fires whenever the player's state changes. https://developers.google.com/youtube/iframe_api_reference\n */\n onStateChange?: (e: unknown) => void;\n};\n\n/**\n * Renders a video player for YouTube supported videos and urls.\n *\n * Refer to the `getVideoSrc` util to see other supported source types.\n */\nexport const YouTubeVideo = ({\n title,\n source,\n url,\n id = 'video',\n isAutoPlay = false,\n isAutoLoop = true,\n wrapperClassName,\n isRounded,\n onStateChange,\n isVertical = source === 'youtube-short',\n}: TYouTubeVideoProps) => {\n const player = useRef<unknown>();\n const aspectRatio: AspectRatio = isVertical ? '9:16' : '16:9';\n const videoSrc = getVideoSrc(url || '', source || '', isAutoPlay, isAutoLoop);\n\n const onPlayerReady = useCallback(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (event: any) => {\n if (isAutoPlay) {\n event.target.mute();\n event.target.playVideo();\n }\n },\n [isAutoPlay]\n );\n\n const loadVideo = useCallback(() => {\n // The Player object is created uniquely based on the id in props\n const { YT } = window;\n\n player.current = new YT.Player(`${id}-youtube-video`, {\n events: {\n onReady: onPlayerReady,\n onStateChange,\n },\n });\n }, [id, onPlayerReady, onStateChange]);\n\n useEffect(() => {\n const ytHasLoaded = !!window.YT?.Player;\n\n if (!ytHasLoaded) {\n // If not, load the script asynchronously\n const tag = document.createElement('script');\n\n tag.src = 'https://www.youtube.com/iframe_api';\n\n // onYouTubeIframeAPIReady will load the video after the script is loaded\n const previous = window.onYouTubeIframeAPIReady;\n\n window.onYouTubeIframeAPIReady = () => {\n if (previous) {\n previous();\n }\n\n loadVideo();\n };\n\n const firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag &&\n firstScriptTag.parentNode &&\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n } else {\n // If script is already there, load the video directly\n loadVideo();\n }\n }, [loadVideo]);\n\n return (\n <div\n id={id}\n className={cx(\n 'brand-qq:max-w-full brand-qq:justify-start brand-qq:items-start brand-qq:p-0 relative flex w-full items-center justify-center',\n wrapperClassName\n )}\n style={{ aspectRatio: aspectRatio.replace(':', '/') }}\n >\n <div className=\"flex size-full justify-center\">\n <iframe\n className={cx({\n 'left-0 top-0 h-full w-full': !isVertical,\n 'aspect-[9/16]': isVertical,\n 'rounded-xl': isRounded,\n })}\n data-e2e={`${id}Video`}\n data-testid={`${id}Video`}\n id={`${id}-youtube-video`}\n src={videoSrc}\n allow=\"encrypted-media; autoplay\"\n allowFullScreen\n title={title || 'No video available'}\n // The \"sandbox\" attribute is from Checkmarx; see NHCBP-4137\n sandbox=\"allow-same-origin allow-scripts allow-popups allow-forms allow-popups-to-escape-sandbox\"\n />\n </div>\n </div>\n );\n};\n\nexport default YouTubeVideo;\n","export * from './lib/youtube-video';\n"],"names":["BrandTextBody","children","className","testId","isStaticContentPage","brandComponentTheme","id","useId","div","data-testid","cx","CustomMarkdown","BrandTextHeader","ariaLabel","HeadingLevel","headingLevelFallback","span","CarouselNoImage","isFullSize","useTranslation","t","CarouselImage","alt","imageProps","url","captionData","isActive","metrics","useState","isImageError","setIsImageError","isImageLoaded","setIsImageLoaded","classnames","figure","Image","layout","onError","onLoadingComplete","src","unoptimized","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","generateCpmCarouselMetrics","Img","CarouselNavigationButton","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","TagRenderer","tag","props","Tag","MarkdownLinkRenderer","window","href","Children","endsWith","replace","a","target","rel","isBrowser","location","includes","startsWith","Array","isArray","markdownArray","updatedChildren","options","baseClass","defaultOptions","overrides","component","h1","tabIndex","h2","h3","table","thead","th","td","b","ul","ol","li","mergedOpts","merge","slice","split","markdown","join","Markdown","DEFAULT_CONTEXT_VALUE","HeadingLevelContext","createContext","useHeadingLevel","useContext","HeadingLevelProvider","level","shouldIncreaseLevel","isEnabled","isParentEnabled","parentLevel","Provider","value","calculateHeadingLevel","parent","context","DEFAULT_HEADING_LEVEL","undefined","prefersReducedMotion","BrandShowcase","items","onItemClicked","logoUrl","rtl","selectedItem","setSelectedItem","atScrollEnd","setAtScrollEnd","scrollAnimationRequest","scrollRef","itemRefs","useMemo","createRef","onShowcaseItemClicked","item","findIndex","i","totalWidth","scrollWidth","offsetWidth","brandRect","getBoundingClientRect","desiredScrollLeft","maxScrollLeft","onComplete","focus","scrollLeft","scrollToOffset","useCallback","cancelAnimationFrame","getPrefersReducedMotion","matchMedia","matches","startTime","scrollDistance","duration","Math","max","abs","animateScroll","timeStamp","progress","SLIDE_DURATION","easing","requestAnimationFrame","debouncedOnScroll","useDebounceCallback","distanceFromEndOfScrollBar","endOfScrollBar","marginForDetectingBrandPosition","min","ceil","currentIndex","previousItem","handleTabListWrapperKeyDown","evt","code","key","preventDefault","slide","targetIndex","NavItems","idx","role","aria-expanded","aria-controls","aria-label","onKeyDown","objectFit","fill","imageDefaultColor","size","onScroll","onScrollWrapper","END_MARGIN","shortDescription","label","brand","DialogWithContent","link","imageAspectRatio","imageUrl","imageUrls","imageAltText","isOpen","title","content","onClose","cmsTranslationClasses","captionMetricsOnClick","brandLinkMetricsOnClick","dialogProps","body","getCurrentAspectRatioAndUrl","imageUrlMobile","mobileImageUrl","imageUrlTablet","tabletImageUrl","imageUrlDesktop","desktopImageUrl","aspectRatioMobile","aspectRatioTablet","aspectRatioDesktop","aspectRatio","Dialog","onDismiss","dialogPropsWithLabel","ResponsiveImage","altText","multipleImageAspectRatio","multipleImageUrl","BrandLink","isNewWindow","showNewWindowIcon","cidParams","data-conductrics-goal","experimentationConfiguration","goal","data-conductrics-value","generateFullWidthMediaMetricsParams","FULL_WIDTH__METRIC_POSITION","FULL_WIDTH_METRIC_IMAGE_COUNT","Full","imageOverlayButtonText","description","overlayButtonClicked","showInfoContainer","setShowInfoContainer","imgLoaded","setImgLoaded","handleImageOverlayButtonClick","Modal","onImgLoaded","containerAspectRatio","FullWidthImageDialogAspectRatio","handleCloseButtonClick","generateHalfAndHalfMetrics","HALF_AND_HALF_IMAGE_COUNT","Half","useCycle","cycleId","active","total","onNextClick","onPreviousClick","data-e2e","Pagination","controls","hideLabel","loop","HalfAndHalfContent","useConductricsSelection","isLoaded","media","playerProps","videoSize","copy","hasParallax","isPositionOdd","hasImageCarousel","carouselImages","speed","cmsDocumentControl","isFullCarousel","isFullScreen","mediaRatio","wrapperElement","isVideo","Boolean","video","multimedia","videoUrl","isYouTubeShort","source","isPortrait","orientation","isLandscape","isVerticalVideo","isCinemagraph","hasAudio","isMuted","useVideoPlayer","playerClassNames","useVideoPlayerClasses","hasActiveTranscript","videoTranscriptProps","activeTranscript","isLarge","useMediaQuery","useResizeObserver","videoProps","videoElement","transcriptStyle","isDark","isLight","isTabletAndMobile","isMobile","mobileLayout","status","Status","OK","useHalfAndHalfMobileLayoutTest","PENDING","selection","variantA","choice","variantB","Transcript","VideoTranscript","LongDescription","CtaLink","sendReward","Headline","ShortDescription","ImgVideoContent","ParallaxBanner","disabled","ParallaxBannerLayer","expanded","scale","YouTubeVideo","wrapperClassName","trim","isVertical","isAutoPlay","wrapperClassNames","Video","posterImageUrl","videoId","VideoCaptions","videoCaptionProps","captionClassNames","VideoControls","videoVariant","videoControlsProps","controlsClassNames","DefaultLayout","MobileLayoutVariantAB","container","hidden","markupSchemas","VideoPlayerMarkup","HalfAndHalf","isReverse","currElemIndxType","Number","isNaN","containerBgClass","carouselItems","Cycle","CycleContext","Consumer","generateImageHeadlinerMetrics","ImageHeadlinerMetrics","Headliner","hasLoop","itemData","hasSlides","currentItem","currentHeadline","currentCtaText","ctaText","currentPosition","trackImageHeadlinerScrollClick","totalItems","onNextClickWithAnalytics","onPreviousClickWithAnalytics","ImageHeadlinerItem","totalSlides","describedByID","imageCss","aria-describedby","adaDescription","onLinkClick","React","validSlides","child","filter","slides","ImageHeadlinerContent","ImageHeadlinerControls","youtubeEmbedUrlPattern","RegExp","pattern","test","autoPlay","autoLoop","listId","listIndex","parsedUrl","URL","isShortsLink","testUrlPattern","youtubeShortsUrlPattern","isEmbedLink","isPlaylistLink","youtubePlaylistUrlPattern","slashIndex","pathname","substring","indexOf","searchParams","get","isAutoLoop","isRounded","onStateChange","player","videoSrc","getVideoSrc","onPlayerReady","event","mute","playVideo","loadVideo","YT","Player","events","onReady","useEffect","ytHasLoaded","document","createElement","previous","onYouTubeIframeAPIReady","firstScriptTag","getElementsByTagName","parentNode","insertBefore","iframe","allow","allowFullScreen","sandbox"],"sourceRoot":"","ignoreList":[]}