{"version":3,"file":"static/chunks/998-9fad8de2e1a53727.js","mappings":"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","sources":["webpack://_N_E/../../libs/osc/chip/src/lib/osc-chip.tsx","webpack://_N_E/../../libs/osc/chip/src/lib/osc-action-chip.tsx","webpack://_N_E/../../libs/osc/chip/src/index.ts","webpack://_N_E/./hooks/use-new-chip-verbiage-mvt.ts","webpack://_N_E/./components/hotel-card/hotel-badges.tsx","webpack://_N_E/./components/hotel-card/utils/hotel-mpa-rate-utils.ts","webpack://_N_E/./hooks/use-recently-viewed.ts","webpack://_N_E/./hooks/use-shop-multi-prop-avail/utils/generate-may-be-available-hash-data.ts","webpack://_N_E/./hooks/use-shop-multi-prop-avail/use-shop-multi-prop-avail.ts","webpack://_N_E/./components/rate-name-cta/ineligible-hotel-modal.tsx","webpack://_N_E/./components/rate-name-cta/flex-dates/flex-dates-utils.ts","webpack://_N_E/./components/rate-name-cta/flex-dates/month-slider.tsx","webpack://_N_E/./components/rate-name-cta/flex-dates/hooks/use-get-flex-dates-info.ts","webpack://_N_E/./components/rate-name-cta/flex-dates/flex-dates-day-price.tsx","webpack://_N_E/./components/rate-name-cta/flex-dates/price-calendar.tsx","webpack://_N_E/./components/rate-name-cta/flex-dates/flex-dates-modal-footer.tsx","webpack://_N_E/./components/rate-name-cta/flex-dates/flex-dates-modal.tsx","webpack://_N_E/./components/rate-name-cta/hooks/use-explore-dates-cta-mvt.ts","webpack://_N_E/./components/rate-name-cta/rate-name-cta.tsx","webpack://_N_E/./hooks/use-shop-multi-prop-avail/utils/generate-mpa-query-array.ts","webpack://_N_E/./hooks/use-shop-multi-prop-avail/utils/array-chunk.ts","webpack://_N_E/./hooks/use-shop-multi-prop-avail/utils/check-pricing-constraints.ts","webpack://_N_E/./hooks/use-shop-multi-prop-avail/utils/generate-shop-multi-prop-avail-input-variables.ts","webpack://_N_E/./hooks/use-shop-multi-prop-avail/utils/get-hashed-mpa-data-from-cache.ts","webpack://_N_E/./hooks/use-shop-multi-prop-avail/utils/index.ts","webpack://_N_E/./components/hotel-card/hooks/use-get-hotel-info.ts","webpack://_N_E/./components/trip-advisor/trip-advisor-rating.tsx","webpack://_N_E/../../libs/osc/taxonomy-list/src/lib/taxonomy-list.tsx","webpack://_N_E/../../libs/osc/taxonomy-list/src/lib/index.ts","webpack://_N_E/../../libs/osc/taxonomy-list/src/index.ts","webpack://_N_E/../../libs/osc/accordion/src/lib/accordion.tsx","webpack://_N_E/../../libs/osc/accordion/src/index.ts"],"sourcesContent":["import cx from 'classnames';\nimport type { IconNames } from '@dx-ui/osc-icon';\nimport Icon from '@dx-ui/osc-icon';\nimport { useTranslation } from 'next-i18next';\n\nexport type PresetChipTypes = 'featured' | 'new' | 'sale' | 'package' | 'recentlyRenovated';\n\nexport type ChipVariants = 'honors' | 'general' | 'marketing' | 'neutral';\n\nexport type ChipProps = {\n  // The HTML element that the Chip renders as.\n  as?: 'div' | 'span';\n  className?: string;\n  // Whether the Chip inherits colors from the parent component\n  shouldInheritStyles?: boolean;\n  isIconTrailing?: boolean;\n  label?: string;\n  preset?: PresetChipTypes;\n  variant?: ChipVariants;\n} & {\n  size?: 'sm' | 'md' | 'lg' | 'xl';\n  iconName?: (typeof IconNames)[number] | 'checkmark';\n};\n\nconst presets: PresetChipTypes[] = ['featured', 'new', 'sale', 'recentlyRenovated'];\n\nexport const presetFilter = (preset: string) => (presets as readonly string[]).includes(preset);\n\nexport function Chip({\n  as = 'div',\n  className,\n  iconName,\n  shouldInheritStyles = false,\n  isIconTrailing = false,\n  size = 'md',\n  label,\n  preset,\n  variant,\n  ...rest\n}: ChipProps) {\n  const { t } = useTranslation('osc-chip');\n  const chipLabel = preset ? t(preset) : label;\n  const VARIANT_STYLES = Object.freeze({\n    honors: 'border-tier-diamond text-tier-diamond',\n    general: 'border-text text-text',\n    marketing: 'border-success text-success',\n    neutral: 'border-text-inverse text-text-inverse',\n  });\n  const PRESET_STYLES = Object.freeze({\n    featured: VARIANT_STYLES.marketing,\n    new: VARIANT_STYLES.general,\n    sale: VARIANT_STYLES.marketing,\n    package: VARIANT_STYLES.general,\n    recentlyRenovated: VARIANT_STYLES.general,\n  });\n  const variantClassName = variant && VARIANT_STYLES[variant];\n  const presetClassName = preset && PRESET_STYLES[preset];\n\n  const icon = () => {\n    if (iconName && iconName !== 'checkmark') {\n      return (\n        <span className=\"block\" data-testid=\"osc-chip-icon\">\n          <Icon name={iconName} size={size === 'xl' ? 'md' : 'xs'} variant=\"regular\" />\n        </span>\n      );\n    }\n\n    if (iconName === 'checkmark') {\n      return (\n        <span className=\"block\" data-testid=\"osc-chip-checkmark-icon\">\n          <Icon name=\"check\" size={size === 'sm' ? 'xs' : 'sm'} />\n        </span>\n      );\n    }\n\n    return null;\n  };\n\n  const Element = as;\n  return (\n    <Element\n      data-testid={preset ? `osc-${preset}-chip` : 'osc-chip'}\n      {...rest}\n      className={cx(\n        'inline-flex items-center gap-x-1 rounded-full border font-[\"Proxima_Nova\"] normal-case not-italic',\n        {\n          'px-2 px-py text-xs font-semibold': size === 'sm',\n          'px-3 py-1 text-xs font-semibold': size === 'md',\n          'px-3 py-2 text-xs font-bold': size === 'lg',\n          'px-3 py-1.5 text-sm font-bold': size === 'xl',\n          'border-text text-text': !presetClassName && !variantClassName && !shouldInheritStyles,\n          [presetClassName as string]: !!presetClassName && !variantClassName,\n        },\n        variantClassName,\n        className\n      )}\n    >\n      {!isIconTrailing && icon()}\n      {chipLabel}\n      {isIconTrailing && icon()}\n    </Element>\n  );\n}\n\nexport default Chip;\n","import { Chip } from './osc-chip';\nimport type { ChipProps } from './osc-chip';\nimport cx from 'classnames';\n\nexport type ActionChipProps = Omit<\n  ChipProps,\n  'as' | 'className' | 'inheritStyles' | 'preset' | 'variant'\n> & {\n  onClick: () => void;\n  isSelected?: boolean;\n};\n\n/** Note: The use case for this component is enterprise only and does not support brand colors or any other color variation. */\nexport function ActionChip({\n  iconName,\n  isIconTrailing,\n  label,\n  onClick,\n  isSelected,\n  size,\n}: ActionChipProps) {\n  return (\n    <button\n      onClick={onClick}\n      className={cx('rounded-full border-hilton text-hilton', {\n        'bg-hilton text-text-inverse': isSelected,\n      })}\n      type=\"button\"\n    >\n      <Chip\n        as=\"span\"\n        iconName={iconName}\n        isIconTrailing={isIconTrailing}\n        size={size}\n        label={label}\n        shouldInheritStyles\n      />\n    </button>\n  );\n}\n\nexport default ActionChip;\n","export * from './lib/osc-chip';\nexport * from './lib/osc-action-chip';\n","import { useGetMVTSelections } from './use-get-mvt-selections';\nimport { NEW_CHIP_VERBIAGE } from '../constants';\nimport { useTranslation } from 'react-i18next';\n\nexport const useNewChipVerbiageMVT = (badges: string[]) => {\n  const { t } = useTranslation('hotel-badges');\n  const {\n    isLoaded,\n    isMVTVariant: { b: isVarB, c: isVarC },\n  } = useGetMVTSelections({\n    agentId: NEW_CHIP_VERBIAGE.agentId,\n    MVTVariants: ['a', 'b', 'c'],\n    isProvisional: !!badges?.includes('new'),\n  });\n\n  const isNewlyBuiltMVTVar = isLoaded && isVarB;\n  const isNewHotelMVTVar = isLoaded && isVarC;\n\n  const getNewHotelChipMVTText = () => {\n    if (isNewlyBuiltMVTVar) {\n      return t('newlyBuilt');\n    }\n    if (isNewHotelMVTVar) {\n      return t('newHotel');\n    }\n    return '';\n  };\n  const newHotelChipMVTText = getNewHotelChipMVTText();\n\n  return {\n    newHotelChipMVTText,\n  };\n};\n","import type { PresetChipTypes } from '@dx-ui/osc-chip';\nimport { Chip, presetFilter } from '@dx-ui/osc-chip';\nimport { useNewChipVerbiageMVT } from '../../hooks/use-new-chip-verbiage-mvt';\nimport { useTranslation } from 'next-i18next';\nimport { useIsClient } from 'usehooks-ts';\nexport type HotelBadgeTypes =\n  | Extract<PresetChipTypes, 'new' | 'sale' | 'recentlyRenovated'>\n  | 'view';\nexport const HotelBadges = ({ badges }: { badges: HotelBadgeTypes[] }) => {\n  const { t } = useTranslation('hotel-badges');\n  const isClient = useIsClient();\n  const { newHotelChipMVTText } = useNewChipVerbiageMVT(badges);\n\n  return badges.length > 0 && isClient ? (\n    <div className=\"my-1 flex gap-1\">\n      {badges\n        .filter((badge: HotelBadgeTypes) => badge === 'view' || presetFilter(badge))\n        .map((badge: HotelBadgeTypes) => {\n          if (badge === 'view') {\n            return <Chip key={badge} data-testid=\"HotelBadge\" label={t(badge)} />;\n          }\n          if (badge === 'new' && !!newHotelChipMVTText) {\n            return (\n              <Chip\n                key={newHotelChipMVTText}\n                data-testid=\"HotelBadge\"\n                label={newHotelChipMVTText}\n              />\n            );\n          }\n          return <Chip key={badge} data-testid=\"HotelBadge\" preset={badge} />;\n        })}\n    </div>\n  ) : null;\n};\n","import type { QueryParameters } from '../../../constants';\nimport { env } from '../../../constants';\nimport type {\n  ShopMultiPropAvailPointsQuery,\n  ShopPropStatusType,\n} from '@dx-ui/queries-dx-shop-search-ui';\nimport type { PageType } from '../../../utils';\nimport { generateCTAFunnelUrl, getCMAPrice } from '../../../utils';\nimport type { MapLanguage } from '@dx-ui/framework-uri-builder';\nimport type { ConversionCurrencyOptions } from '@dx-ui/osc-currency-converter';\nimport { formatAndConvertPrice } from '@dx-ui/osc-currency-converter';\n\nimport {\n  getAvailabilityText,\n  getButtonLabels,\n  getMPARateInfo,\n  getPreSellPreOpenInfo,\n  isLocalCurrencySameAsHotelCurrency,\n} from './hotel-info-utils';\nimport type { RateInfoMessage, RateMessage } from '../../rate-name-cta/rate-name-cta';\nimport type { TFunction } from 'i18next';\nimport type { HotelCardData } from './hotel-lead-rate-utils';\nimport type { HotelInfoAttributes } from './hotel-info-utils';\nimport type { DXError } from '@dx-ui/types-graphql';\n\nexport function getMPAHotelRate({\n  numOfChildren,\n  usePoints,\n  isDateFlex,\n  hasSpecialRate,\n  hotelData,\n  priceInfo,\n  t,\n  locale,\n  pageType,\n  ctyhocn,\n  queryParameters,\n  selectedCurrency,\n  hasConnectingRooms,\n  isPointsExplorer,\n  currenciesError,\n  currenciesMap,\n  isIndividualRoomsOnly = false,\n}: {\n  numOfChildren: number;\n  usePoints: boolean;\n  isDateFlex: boolean;\n  hasSpecialRate: boolean | undefined;\n  hotelData: HotelCardData;\n  priceInfo?: ShopMultiPropAvailPointsQuery['shopMultiPropAvail'][0] | null | undefined;\n  t: TFunction<['hotel-card', 'rate-name-cta']>;\n  locale: string;\n  pageType: PageType;\n  ctyhocn: string | undefined;\n  queryParameters: QueryParameters | undefined;\n  selectedCurrency: string | null;\n  hasConnectingRooms: boolean;\n  isPointsExplorer: boolean;\n  currenciesError: DXError | null;\n  currenciesMap: Map<string, ConversionCurrencyOptions>;\n  isIndividualRoomsOnly?: boolean;\n}): HotelInfoAttributes {\n  const {\n    isAdultsOnly,\n    isOccupancyExceeded,\n    hasConfidentialRate,\n    rateMessage,\n    hasRateChange,\n    lengthOfStay,\n    pointsAvailable,\n    isDiamondRate,\n    showDisplayFeeTransparencySubMsg,\n  } = getMPARateInfo(\n    numOfChildren,\n    usePoints,\n    isDateFlex,\n    hasSpecialRate,\n    Boolean(hotelData?.facilityOverview?.allowAdultsOnly),\n    priceInfo\n  );\n  const ageBasedMessage = priceInfo?.ageBasedPricing ? t('ageBased') : undefined;\n  const hotelMinPoints = hotelData?.leadRate?.hhonors?.min?.dailyRmPointsRateRoundFmt;\n  const hotelMaxPoints = hotelData?.leadRate?.hhonors?.max?.dailyRmPointsRateRoundFmt;\n  const pointsRange =\n    hotelMinPoints && hotelMaxPoints ? `${hotelMinPoints} - ${hotelMaxPoints}` : '';\n\n  //Status\n  const status =\n    isAdultsOnly || isOccupancyExceeded ? 'NOT_AVAILABLE' : priceInfo?.summary?.status?.type || '';\n\n  const { isResPreSell, preSellDateFmt, isNoResPreOpen, isPreOpen, preOpenDateFmt } =\n    getPreSellPreOpenInfo(\n      locale,\n      status === 'NOT_OPEN',\n      hotelData?.display?.openDate,\n      hotelData?.display?.resEnabledDate,\n      hotelData?.display?.resEnabled\n    );\n  const href =\n    isNoResPreOpen || isOccupancyExceeded\n      ? ''\n      : generateCTAFunnelUrl({\n          availStatus: status ? (status as ShopPropStatusType) : 'LOADING',\n          host: env.HONORS_HOST,\n          isDreams: !!pageType?.isDreams,\n          ctyhocn: ctyhocn as string,\n          queryParameters,\n          shouldUsePoints: usePoints,\n          currencyCode: selectedCurrency as string,\n          preOpenDate: (isResPreSell\n            ? hotelData?.display?.resEnabledDate\n            : isPreOpen\n            ? hotelData?.display?.openDate\n            : '') as string,\n          hasConnectingRooms,\n          isPointsExplorer,\n          lang: locale as MapLanguage,\n        });\n\n  const { price, showAvgPricingMessage, totalRate, totalRateFmt, priceFmt } = getCMAPrice({\n    cmaTotalPriceIndicator: priceInfo?.summary?.lowest?.cmaTotalPriceIndicator,\n    rateAmount: priceInfo?.summary?.lowest?.rateAmount || 0,\n    rateAmountFmt: priceInfo?.summary?.lowest?.rateAmountFmt || '',\n    totalRate: priceInfo?.summary?.lowest?.amountAfterTax || 0,\n    totalRateFmt: priceInfo?.summary?.lowest?.amountAfterTaxFmt || '',\n    lengthOfStay,\n  });\n\n  // converted currency values\n  const convertedTotalRate = isDateFlex\n    ? undefined\n    : isLocalCurrencySameAsHotelCurrency(\n        selectedCurrency,\n        hotelData?.localization?.currencyCode || ''\n      )\n    ? totalRateFmt\n    : formatAndConvertPrice({\n        basePrice: !totalRate ? undefined : totalRate,\n        currencyQueryError: !!currenciesError,\n        fromCurrency: currenciesMap?.get('USD'),\n        language: locale,\n        toCurrency: currenciesMap?.get(selectedCurrency as string),\n      }) || totalRateFmt;\n\n  const convertedPrice =\n    isDateFlex || hasConfidentialRate\n      ? undefined\n      : isLocalCurrencySameAsHotelCurrency(\n          selectedCurrency,\n          hotelData?.localization?.currencyCode || ''\n        )\n      ? priceFmt\n      : formatAndConvertPrice({\n          basePrice: !price ? undefined : price,\n          currencyQueryError: !!currenciesError,\n          fromCurrency: currenciesMap?.get('USD'),\n          language: locale,\n          toCurrency: currenciesMap?.get(selectedCurrency as string),\n        }) || priceFmt;\n  const { comingSoonAndSoldOutCaption, comingSoonAndSoldOutMessage } = getAvailabilityText({\n    t,\n    isPreSell: isResPreSell,\n    isPreOpen,\n    isSoldOut: hotelData?.display?.resEnabled && status === 'NOT_AVAILABLE',\n    openDate: isResPreSell ? preSellDateFmt : isPreOpen ? preOpenDateFmt : undefined,\n    numChildren: isAdultsOnly ? numOfChildren : undefined,\n    occupants: queryParameters\n      ? (queryParameters?.numAdults + queryParameters?.numChildren).toString()\n      : '',\n    preOpenMsg: hotelData?.display?.preOpenMsg,\n    isOccupancyExceeded,\n    isIndividualRoomsOnly,\n  });\n\n  const showPointsInfo = !!(!hasSpecialRate && usePoints && pointsAvailable);\n\n  //CTA Label\n  const buttonLabel = isDateFlex\n    ? t('flexible')\n    : isPointsExplorer\n    ? t('selectDates')\n    : isAdultsOnly || isOccupancyExceeded || isIndividualRoomsOnly\n    ? undefined\n    : getButtonLabels({ t, isAdultsOnly, isNoResEnabled: isNoResPreOpen })[status];\n  const ctaLabel = buttonLabel\n    ? ({\n        text: buttonLabel,\n        screenReaderText: t('opensInNewTab'),\n        type: showPointsInfo || isPointsExplorer ? 'UsePoints' : undefined,\n      } as RateMessage)\n    : undefined;\n\n  const isPriceAvailable = status === 'AVAILABLE';\n  const isSaleHotel = priceInfo?.summary?.lowest?.ratePlan?.attributes?.includes('sale');\n\n  let isNewHotel = false;\n  if (hotelData?.amenities)\n    isNewHotel = !!hotelData?.amenities?.find((amenity) => amenity.id === 'newHotel');\n  else if (hotelData?.amenityIds)\n    isNewHotel = !!hotelData?.amenityIds?.find((amenity) => amenity === 'newHotel');\n\n  const tripAdvisorLocationSummary = hotelData?.tripAdvisorLocationSummary || null;\n\n  const messages: RateInfoMessage[] = [];\n\n  const message = isPointsExplorer ? t('pointsPerNight').toUpperCase() : rateMessage;\n  // Rate info caption - price value or comming soon/ sold out/ adults only/ max guest\n  const defaultRateCaption = comingSoonAndSoldOutCaption || convertedPrice || '';\n  //Rate name or comming soon/ sold out/ adults only/ max guest text\n  const defaultRateMessage = comingSoonAndSoldOutMessage || message || '';\n\n  const getUsePointsRateInfoMessage = () => {\n    let pointsText = '';\n    if (hasSpecialRate) {\n      pointsText =\n        lengthOfStay && lengthOfStay > 1 && hasRateChange\n          ? t('payWithPointsFirstNight', { points: pointsAvailable })\n          : t('payWithPointsPerNight', { points: pointsAvailable });\n    } else {\n      pointsText =\n        lengthOfStay && lengthOfStay > 1 && hasRateChange\n          ? t('pointsForFirstNight', { points: pointsAvailable })\n          : t('pointsPerNight', { points: pointsAvailable });\n    }\n    messages.push(\n      {\n        type: hasSpecialRate ? undefined : isPriceAvailable ? 'UsePoints' : undefined,\n        prefix: { text: ageBasedMessage ? t('ageBasedFrom') : undefined },\n        heading: {\n          text: (hasSpecialRate ? defaultRateCaption : pointsAvailable) as string,\n          isCaption: true,\n        },\n        suffix: !hasSpecialRate ? { text: pointsText } : undefined,\n      },\n      {\n        heading: { text: defaultRateMessage },\n      }\n    );\n    if (ageBasedMessage)\n      messages.push({\n        heading: {\n          text: ageBasedMessage,\n          infoIconOrPopup: { align: 'left', isIcon: true },\n          className: 'text-xs',\n        },\n      });\n    if (hasSpecialRate)\n      messages.push({\n        heading: { text: pointsText, className: 'text-xs font-bold' },\n        type: isPriceAvailable ? 'UsePoints' : undefined,\n      });\n  };\n\n  const getRateCaptionSuffix = () => {\n    if (showAvgPricingMessage && !usePoints) return t('average');\n    if (isDiamondRate) return ` | ${t('roomAvailable')}`;\n    return;\n  };\n\n  switch (true) {\n    case isPointsExplorer:\n      messages.push(\n        {\n          type: 'UsePoints',\n          heading: { text: pointsRange },\n          screenReaderText: t('pointsRangePerNight', {\n            minPoints: hotelMinPoints,\n            maxPoints: hotelMaxPoints,\n          }),\n        },\n        { heading: { text: defaultRateMessage } }\n      );\n      break;\n    case hasConfidentialRate:\n      messages.push(\n        { heading: { text: t('confidentialPrice') } },\n        { heading: { text: defaultRateMessage } }\n      );\n      break;\n    case isDiamondRate:\n      messages.push(\n        { heading: { text: defaultRateCaption, isCaption: true } },\n        { type: 'DiamondRate', heading: { text: t('soldOutNotForYou') } },\n        {\n          heading: { text: defaultRateMessage },\n          suffix: { text: ` | ${t('roomAvailable')}` },\n        }\n      );\n      break;\n    case usePoints && !isPointsExplorer:\n      if (isPriceAvailable && pointsAvailable) getUsePointsRateInfoMessage();\n      break;\n  }\n  // Add agebased rate info\n  if (messages.length === 0) {\n    const rateCaptionSuffix = getRateCaptionSuffix();\n    messages.push({\n      heading: { text: defaultRateCaption, isCaption: true },\n      prefix: ageBasedMessage\n        ? !hasSpecialRate && isPriceAvailable\n          ? { text: t('ageBasedFrom') }\n          : undefined\n        : undefined,\n      suffix: rateCaptionSuffix ? { text: rateCaptionSuffix } : undefined,\n      type: ageBasedMessage && showPointsInfo ? 'UsePoints' : undefined,\n    });\n    if (showDisplayFeeTransparencySubMsg)\n      messages.push({ heading: { text: t('rate-name-cta:includesFees') } });\n    messages.push({ heading: { text: defaultRateMessage } });\n    if (ageBasedMessage)\n      messages.push({\n        heading: {\n          text: ageBasedMessage,\n          infoIconOrPopup: { align: 'left', isIcon: true },\n          className: 'text-xs',\n        },\n      });\n  }\n\n  const hotelName = hotelData?.name || '';\n  let ctaMessage;\n  if (showAvgPricingMessage && !showPointsInfo) {\n    ctaMessage = {\n      heading: { text: t('totalPrice', { totalPrice: convertedTotalRate, lengthOfStay }) },\n    } as RateInfoMessage;\n  }\n  let customParams = {};\n  // Not Bookable - call to book\n  if (status === 'NOT_BOOKABLE_ONLINE') {\n    customParams = {\n      phoneNumber: hotelData?.contactInfo?.phoneNumber ?? '',\n      isNotBookable: true,\n    };\n  }\n  // reset message when hotel is may_be_available\n  if (status === 'NOT_BOOKABLE_ONLINE' || status === 'MAY_BE_AVAILABLE') messages.length = 0;\n\n  //NHCSEARCH-5249 MVT Compare Properties\n  if (status === 'AVAILABLE' && !isIndividualRoomsOnly) customParams = { showCompare: true };\n\n  const disclaimerMessages: RateInfoMessage[] = [];\n\n  if (isPointsExplorer) {\n    disclaimerMessages.push({\n      heading: {\n        text: t('rate-name-cta:pointsExplorerLegalDisclaimer'),\n      },\n    });\n  }\n  return {\n    isNewHotel,\n    isSaleHotel,\n    ctaLabel,\n    ctaHref: href,\n    ctaMessage,\n    customParams,\n    hotelName,\n    tripAdvisorLocationSummary,\n    messages,\n    disclaimerMessages,\n  };\n}\n","import { useLocalStorage } from 'usehooks-ts';\n\nconst REFRESH_TTL_2WEEK = 604800 * 2 * 1000;\n\nexport type RecentlyViewedHotel = {\n  ctyhocn: string;\n  expireDate: number;\n};\n\nexport function useRecentlyViewed(ctyhocn: string) {\n  const [recentlyViewed, setRecentlyViewed] = useLocalStorage<Record<string, RecentlyViewedHotel>>(\n    `RecentlyViewed`,\n    {},\n    {\n      initializeWithValue: false,\n      serializer: (instance) => {\n        if (!instance) {\n          return JSON.stringify({\n            [ctyhocn]: {\n              ctyhocn,\n              expireDate: new Date().getTime() + REFRESH_TTL_2WEEK,\n            },\n          });\n        } else {\n          return JSON.stringify({\n            ...instance,\n            [ctyhocn]: {\n              ctyhocn,\n              expireDate: new Date().getTime() + REFRESH_TTL_2WEEK,\n            },\n          });\n        }\n      },\n    }\n  );\n\n  const showRecentlyViewedChip =\n    recentlyViewed[ctyhocn] &&\n    new Date(recentlyViewed[ctyhocn]?.expireDate).getTime() - new Date().getTime() > 0;\n\n  return { recentlyViewed, setRecentlyViewed, showRecentlyViewedChip } as const;\n}\n","import type { UseQueryResult } from '@tanstack/react-query';\nimport type {\n  ShopMultiPropAvailPointsQuery,\n  ShopPropStatusType,\n} from '@dx-ui/queries-dx-shop-search-ui';\n\nconst generateMayBeAvailableHashData = (\n  results: UseQueryResult<ShopMultiPropAvailPointsQuery, unknown>[],\n  chunkedMPA: string[][]\n) =>\n  results.reduce((hashData, chunk, idx) => {\n    //if chunk is in error state create a hashMap of ctyhocn entries w/ may be available state\n    let mayBeAvailableHashMap: Record<\n      string,\n      ShopMultiPropAvailPointsQuery['shopMultiPropAvail'][0]\n    > = {};\n    const MPAChunk = chunkedMPA[idx];\n    if (chunk.isError && MPAChunk) {\n      mayBeAvailableHashMap = MPAChunk.reduce((hashMap, ctyhocn) => {\n        hashMap[ctyhocn] = {\n          ctyhocn,\n          notifications: [],\n          summary: {\n            status: {\n              type: 'MAY_BE_AVAILABLE' as ShopPropStatusType,\n            },\n          },\n        };\n        return hashMap;\n      }, {} as Record<string, ShopMultiPropAvailPointsQuery['shopMultiPropAvail'][0]>);\n    }\n    return { ...hashData, ...mayBeAvailableHashMap };\n  }, {} as Record<string, ShopMultiPropAvailPointsQuery['shopMultiPropAvail'][0]>);\n\nexport default generateMayBeAvailableHashData;\n","import { useRef, useEffect, useMemo } from 'react';\nimport { generateMPAQueryArray } from './utils/generate-mpa-query-array';\nimport { useAuth } from '@dx-ui/framework-auth-provider';\nimport { useSmbToggle, useWrappedRouter } from '../../hooks';\nimport type { ShopMultiPropAvailConstraints } from './utils';\nimport {\n  arrayChunk,\n  generateShopMultiPropAvailInputVariables,\n  getHashedMPADataFromCache,\n  getConstraintsFromCachedData,\n} from './utils';\nimport { useQueries, useQueryClient } from '@tanstack/react-query';\nimport generateMayBeAvailableHashData from './utils/generate-may-be-available-hash-data';\nimport { isBrowser } from '@dx-ui/utilities-is-browser';\nimport { useLocation } from '@dx-ui/framework-location-provider';\nimport type { ShopMultiPropAvailPointsQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { useAppState } from '../../providers/app-provider';\nimport { getPageType } from '../../utils';\n\n/**\n *\n * @param {Number} [chunkSize=20] - chunk size for parallel queries\n * @param {Number} [maxSize=150] - max number of ctyhocns to retrieve pricing for\n * @param {ShopMultiPropAvailQueryVariables} variables query variables for shopMultiPropAvail\n */\nconst useShopMultiPropAvail = ({\n  maxSize = 150,\n  ctyhocns,\n  enabled = true,\n  mpaConstraints = false,\n}: {\n  maxSize?: number;\n  ctyhocns?: string[];\n  enabled?: boolean;\n  mpaConstraints?: boolean;\n}) => {\n  const { router, safeQueryParams: queryParameters } = useWrappedRouter();\n  const { guestInfo, isLoading: isAuthLoading } = useAuth();\n  const { country: guestLocationCountry, isLoading: isGuestLocationLoading } = useLocation();\n  const queryClient = useQueryClient();\n  const { shouldUsePoints, hotelsInBounds } = useAppState();\n  const ctyhocnsToFetchPrice = (ctyhocns ? ctyhocns : Object.keys(hotelsInBounds))?.sort();\n  const constraintsFromCache = useRef<ShopMultiPropAvailConstraints>({\n    isPastDate: false,\n    invalidOfferId: false,\n    hasPointsRateChange: false,\n    hasRateChange: false,\n    isOfferNotAvailable: false,\n  });\n  const { programAccountId } = useSmbToggle();\n\n  //When we route again (query params change) need to reset constraints and whether we have fetched for bounds\n  useEffect(() => {\n    constraintsFromCache.current = {\n      isPastDate: false,\n      invalidOfferId: false,\n      hasPointsRateChange: false,\n      hasRateChange: false,\n      isOfferNotAvailable: false,\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [JSON.stringify(queryParameters)]);\n\n  const pageType = getPageType(router.asPath, queryParameters);\n  const enableQuery =\n    !!ctyhocnsToFetchPrice.length &&\n    isBrowser &&\n    !isAuthLoading &&\n    !isGuestLocationLoading &&\n    enabled &&\n    router.isReady &&\n    pageType.isSearch &&\n    !pageType.isPointsExplorer &&\n    !queryParameters?.datesFlex;\n\n  const CHUNK_SIZE = 20;\n\n  //format input graph object\n  const input = generateShopMultiPropAvailInputVariables({\n    guestInfo,\n    queryParameters,\n    shouldUsePoints,\n    guestLocationCountry,\n    smbProgramAccountId: programAccountId,\n  });\n\n  //get hash table data from mpa cache\n  const initialHashedShopMultiPropAvailDataFromCache = getHashedMPADataFromCache(\n    queryClient,\n    input,\n    shouldUsePoints\n  );\n\n  const initialHashedKeys = Object.keys(initialHashedShopMultiPropAvailDataFromCache);\n  //only allow up to the max of max size ctyhocns to be fetched that had not already been fetched before\n\n  // split ctyhocn array of size maxSize into chunks of size chunkSize\n  const chunkedMPA = useMemo(() => {\n    if (!enableQuery) return [];\n    const ctyhocnToFetchPricingFor =\n      ctyhocnsToFetchPrice\n        ?.reduce((ctyhocnsToFetch, ctyhocn) => {\n          if (!initialHashedKeys.includes(ctyhocn)) ctyhocnsToFetch.push(ctyhocn);\n          return ctyhocnsToFetch;\n        }, [] as string[])\n        .slice(0, maxSize) || [];\n    return arrayChunk(ctyhocnToFetchPricingFor, CHUNK_SIZE);\n  }, [ctyhocnsToFetchPrice, enableQuery, initialHashedKeys, maxSize]);\n\n  //create an array of query objects. Each object is identical except for contents of ctyhocn array\n  const queryArr = enableQuery\n    ? generateMPAQueryArray({\n        chunkedMPA,\n        enabled: enableQuery,\n        input,\n        language: 'en',\n      })\n    : [];\n\n  //parallel fetch MPA chunks\n  const results = useQueries({ queries: queryArr });\n\n  const { hashedData, isError, isLoading, hasMPACallResolved, constraints } = useMemo(() => {\n    //if this is dateFlex or flexibleDates scenario we dont use MPA data\n    if (queryParameters?.datesFlex) {\n      return {\n        hashedData: {} as Record<string, ShopMultiPropAvailPointsQuery['shopMultiPropAvail'][0]>,\n        isLoading: false,\n        isError: false,\n        hasMPACallResolved: false,\n      };\n    }\n    const mayBeAvailableHashData = generateMayBeAvailableHashData(results, chunkedMPA);\n    const isLoading = results.some((result) => result.isFetching);\n    const hashedMPADataFromCache = {\n      ...getHashedMPADataFromCache(queryClient, input, shouldUsePoints),\n    };\n    const hashedData = { ...hashedMPADataFromCache, ...mayBeAvailableHashData };\n    const shouldUpdateConstraints = !isLoading && isBrowser && mpaConstraints;\n    if (shouldUpdateConstraints) {\n      constraintsFromCache.current = getConstraintsFromCachedData(hashedData);\n    }\n\n    return {\n      hashedData,\n      isError:\n        results.some((result) => result.isError) || Object.keys(mayBeAvailableHashData).length > 0,\n      isLoading,\n      hasMPACallResolved: results.some((result) => result.isSuccess),\n      constraints: constraintsFromCache.current,\n    };\n    // HACK: Not sure a way around this one right now. NHCSEARCH-5242\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [\n    mpaConstraints,\n    queryParameters?.datesFlex,\n    JSON.stringify(results),\n    shouldUsePoints,\n    ctyhocns,\n  ]);\n\n  return {\n    hashedData,\n    isLoading,\n    isError,\n    hasMPACallResolved,\n    constraints,\n  };\n};\n\nexport default useShopMultiPropAvail;\n","import type * as React from 'react';\nimport { useTranslation } from 'next-i18next';\nimport { Dialog } from '@dx-ui/osc-dialog-v2';\n\ntype IneligibleHotelProps = {\n  /**\n   * displays the ineligible hotel modal or not\n   */\n  isShowing: boolean;\n  /**\n   * handler to close the ineligibleHotel\n   */\n  onClose?: () => void;\n  /**\n   * handler used to proceed if chosen\n   */\n  onContinue?: () => void;\n};\n\n/**\n * Used to display a ineligibleHotel when transitioning to a non translated page\n */\nconst IneligibleHotelModal: React.FC<React.PropsWithChildren<IneligibleHotelProps>> = ({\n  isShowing,\n  onClose: onCloseProp,\n  onContinue: onContinueProp,\n}) => {\n  const [t] = useTranslation('rate-name-cta');\n  const onContinue = () => {\n    if (onContinueProp) onContinueProp?.();\n  };\n  const onClose = () => {\n    if (onCloseProp) onCloseProp?.();\n  };\n\n  return (\n    <Dialog isOpen={isShowing} onDismiss={onClose} title={t('ineligibleHotel.header')} size=\"sm\">\n      <div data-testid=\"ineligibleHotelDialog\" className=\"mt-3\">\n        <div className=\"my-4 text-center leading-snug\">{t('ineligibleHotel.body')}</div>\n        <div className=\"mb-4\">\n          <button type=\"button\" className=\"btn btn-xl btn-primary w-full\" onClick={onContinue}>\n            {t('ineligibleHotel.cta1')}\n          </button>\n        </div>\n        <div className=\"mb-4\">\n          <button type=\"button\" className=\"btn btn-xl btn-primary-outline w-full\" onClick={onClose}>\n            {t('ineligibleHotel.cta2')}\n          </button>\n        </div>\n      </div>\n    </Dialog>\n  );\n};\n\nexport default IneligibleHotelModal;\n","import { addYears, eachMonthOfInterval, isEqual, parseISO } from 'date-fns';\nimport type { ShopCalendar } from '@dx-ui/queries-dx-shop-search-ui';\nimport type { Locale } from '@dx-ui/framework-uri-builder';\nimport { bookUriBuilder } from '@dx-ui/framework-uri-builder';\nimport type { TFunction } from 'i18next';\nimport { DEFAULT_LANGUAGE } from '@dx-ui/utilities-dates';\n\nexport type FlexDatesShopAvailCalendar =\n  | Pick<ShopCalendar, 'arrivalDate' | 'departureDate' | 'roomRate'>\n  | null\n  | undefined;\n\nexport type FlexDatesRateInfo = {\n  ctyhocn?: string;\n  isPriceFetching?: boolean;\n  shopAvailCalendar?: FlexDatesShopAvailCalendar;\n  statusCode?: number | undefined | null;\n  shouldUsePoints?: boolean;\n  t?: TFunction<['rate-name-cta']>;\n  locale?: string;\n};\n\nexport function getMonthsYearDetails(locale: string) {\n  const currentDate = new Date();\n  const monthArray = eachMonthOfInterval({\n    start: currentDate,\n    end: addYears(currentDate, 1),\n  });\n  return monthArray.map((date) => {\n    const isSelected = isEqual(date, currentDate);\n    const monthYear = date.toLocaleDateString(locale, {\n      month: 'short',\n      year: 'numeric',\n    });\n    const unabbreviatedMonthYear = date.toLocaleDateString(locale, {\n      month: 'long',\n      year: 'numeric',\n    });\n    return {\n      date,\n      isSelected,\n      monthYear,\n      unabbreviatedMonthYear,\n    };\n  });\n}\n\nexport function getRateDetails({\n  isPriceFetching,\n  shopAvailCalendar: rateInfo,\n  shouldUsePoints,\n  statusCode,\n  t,\n  locale = DEFAULT_LANGUAGE,\n}: FlexDatesRateInfo) {\n  if (isPriceFetching) {\n    return defaultRateDetails();\n  }\n  if (statusCode !== 0) {\n    return t ? rateInfoUnavailable(t) : {};\n  }\n\n  const hasNoPriceOrPoints = checkHasNoPriceOrPoints({\n    shopAvailCalendar: rateInfo,\n    shouldUsePoints,\n    statusCode,\n  });\n  const priceOrPoints = getPriceOrPoints({\n    isPriceFetching,\n    shopAvailCalendar: rateInfo,\n    statusCode,\n    shouldUsePoints,\n  });\n  const pointsAbbr = getPointsAbbr({\n    isPriceFetching,\n    shopAvailCalendar: rateInfo,\n    statusCode,\n    shouldUsePoints,\n  });\n\n  const rateName = getRateName({ shopAvailCalendar: rateInfo, statusCode });\n  const rateDate = getRateDate({ shopAvailCalendar: rateInfo, statusCode, locale });\n\n  const calendarAriaText = t\n    ? getCalendarAriaText(t, priceOrPoints, shouldUsePoints, rateInfo)\n    : '';\n\n  return { calendarAriaText, hasNoPriceOrPoints, priceOrPoints, pointsAbbr, rateName, rateDate };\n}\nfunction defaultRateDetails() {\n  return {\n    priceOrPoints: '',\n    pointsAbbr: '',\n    rateName: '',\n    rateDate: '',\n    hasNoPriceOrPoints: false,\n    calendarAriaText: '',\n  };\n}\nfunction rateInfoUnavailable(t: TFunction<['rate-name-cta']>) {\n  return {\n    calendarAriaText: t('flexDatesModal.calendarDaySoldOutRateAriaText'),\n    priceOrPoints: t('flexDatesModal.soldOut'),\n    pointsAbbr: t('flexDatesModal.soldOut'),\n    hasNoPriceOrPoints: true,\n    rateName: '',\n    rateDate: '',\n  };\n}\nfunction getPointsAbbr({\n  shopAvailCalendar: rateInfo,\n  shouldUsePoints,\n  statusCode,\n}: FlexDatesRateInfo) {\n  if (statusCode === 0 && shouldUsePoints) {\n    const pointsAvailable = rateInfo?.roomRate?.dailyRmPointsRate;\n    return pointsAvailable ? `${pointsAvailable / 1000}K` : '';\n  }\n  return;\n}\n\nfunction getPriceOrPoints({\n  shopAvailCalendar: rateInfo,\n  shouldUsePoints,\n  statusCode,\n}: FlexDatesRateInfo) {\n  if (statusCode === 0) {\n    return shouldUsePoints\n      ? rateInfo?.roomRate?.dailyRmPointsRateFmt || ''\n      : rateInfo?.roomRate?.rateAmountFmt || '';\n  }\n}\n\nfunction getRateName({ shopAvailCalendar: rateInfo, statusCode }: FlexDatesRateInfo) {\n  if (statusCode === 0) return rateInfo?.roomRate?.ratePlan?.ratePlanName || '';\n}\n\nfunction getRateDate({ shopAvailCalendar: rateInfo, statusCode, locale }: FlexDatesRateInfo) {\n  if (statusCode === 0) {\n    const startDate = rateInfo?.arrivalDate ? parseISO(rateInfo?.arrivalDate) : null;\n    const endDate = rateInfo?.departureDate ? parseISO(rateInfo?.departureDate) : null;\n    const startMonthDay = startDate?.toLocaleDateString(locale, {\n      month: 'short',\n      day: 'numeric',\n    });\n    const endMonthDay = endDate?.toLocaleDateString(locale, {\n      month: 'short',\n      day: 'numeric',\n    });\n    return startDate && endDate ? startMonthDay + ' - ' + endMonthDay : '';\n  }\n}\n\nfunction checkHasNoPriceOrPoints({\n  shopAvailCalendar: rateInfo,\n  shouldUsePoints,\n  statusCode,\n}: FlexDatesRateInfo) {\n  if (statusCode === 0) {\n    return !(shouldUsePoints\n      ? !!rateInfo?.roomRate?.dailyRmPointsRateFmt\n      : !!rateInfo?.roomRate?.rateAmount);\n  }\n}\n\nfunction getCalendarAriaText(\n  t: TFunction<['rate-name-cta']>,\n  priceOrPoints?: string,\n  shouldUsePoints?: boolean,\n  rateInfo?: FlexDatesShopAvailCalendar\n) {\n  if (priceOrPoints) {\n    return shouldUsePoints\n      ? t('flexDatesModal.calendarDayPointsRateAriaText', {\n          arrivalDate: rateInfo?.arrivalDate,\n          departureDate: rateInfo?.departureDate,\n          rateAmount: priceOrPoints,\n        })\n      : t('flexDatesModal.calendarDayPriceRateAriaText', {\n          arrivalDate: rateInfo?.arrivalDate,\n          departureDate: rateInfo?.departureDate,\n          rateAmount: priceOrPoints,\n        });\n  }\n}\n\nexport function getRoomsPageUrl({\n  ctyhocn,\n  currencyCode,\n  language,\n  rateInfo,\n  shouldUsePoints,\n}: {\n  ctyhocn: string;\n  currencyCode?: string | null;\n  language: string;\n  rateInfo: FlexDatesShopAvailCalendar;\n  shouldUsePoints?: boolean;\n}) {\n  const startDate = rateInfo?.arrivalDate ? parseISO(rateInfo?.arrivalDate) : null;\n  const endDate = rateInfo?.departureDate ? parseISO(rateInfo?.departureDate) : null;\n  const additionalQS: { [key: string]: string } = {};\n  if (currencyCode) additionalQS.displayCurrency = currencyCode;\n\n  return bookUriBuilder({\n    page: 'rooms',\n    locale: language as keyof Locale,\n    urlParams: {\n      ctyhocn: ctyhocn || '',\n      dates: {\n        arrivalDate: startDate,\n        departureDate: endDate,\n      },\n      numRooms: 1,\n      rates: {\n        redeemPts: shouldUsePoints,\n      },\n      additionalQS: {\n        ...additionalQS,\n      },\n    },\n  });\n}\n","import { TabList, TabListButton, TabPanel, TabPanels, Tabs } from '@dx-ui/osc-tabs';\nimport type * as React from 'react';\nimport { getMonthsYearDetails } from './flex-dates-utils';\nimport { useWrappedRouter } from '../../../hooks';\nimport { DEFAULT_LANGUAGE } from '@dx-ui/utilities-dates';\n\ntype MonthSliderProp = {\n  ctyhocn: string;\n  children: React.ReactNode;\n  onMonthChange: (tabIndex: number) => void;\n};\nexport const MonthSlider = ({ children, onMonthChange }: MonthSliderProp) => {\n  const { router } = useWrappedRouter();\n  const monthYear = getMonthsYearDetails(router.locale || DEFAULT_LANGUAGE);\n\n  return (\n    <div>\n      <Tabs defaultActive=\"0\" onTabChange={(index) => onMonthChange(parseFloat(index || '0'))}>\n        <TabList className=\"gap-x-4\">\n          {monthYear.map(({ monthYear, unabbreviatedMonthYear }, index) => (\n            <TabListButton id={`${index}`} key={monthYear} aria-label={unabbreviatedMonthYear}>\n              <span aria-hidden className=\"text-wrap text-xs font-bold sm:text-base\">\n                {monthYear}\n              </span>\n            </TabListButton>\n          ))}\n        </TabList>\n        <TabPanels>\n          {monthYear?.map(({ monthYear }, panelIndex) => {\n            return (\n              <TabPanel className=\"py-4\" id={`${panelIndex}`} key={monthYear}>\n                {children}\n              </TabPanel>\n            );\n          })}\n        </TabPanels>\n      </Tabs>\n    </div>\n  );\n};\n","//NHCSEARCH-5248  Flex Dates Modal\n\nimport { useWrappedRouter } from '../../../../hooks';\nimport type { ShopCalendar } from '@dx-ui/queries-dx-shop-search-ui';\nimport type { FlexDatesShopAvailCalendar } from '../flex-dates-utils';\nimport { useAppState } from '../../../../providers/app-provider';\nimport { useHotel_ShopAvailCalendarQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { DEFAULT_LANGUAGE } from '@dx-ui/utilities-dates';\n\ntype FlexDatesInfoProps = {\n  arrivalDate?: string;\n  ctyhocn: string;\n  enabled?: boolean;\n};\nexport const useGetFlexDatesInfo = ({\n  arrivalDate,\n  ctyhocn,\n  enabled = true,\n}: FlexDatesInfoProps) => {\n  const { router } = useWrappedRouter();\n  const { shouldUsePoints, selectedCurrency } = useAppState();\n\n  const { data: shopAvailCalendarData, isFetching } = useHotel_ShopAvailCalendarQuery(\n    {\n      language: router.locale || DEFAULT_LANGUAGE,\n      ctyhocn,\n      input: {\n        arrivalDate,\n        displayCurrency: selectedCurrency,\n        lengthOfStay: 1,\n        numAdults: 1,\n        numRooms: 1,\n        specialRates: { hhonors: shouldUsePoints },\n      },\n    },\n    { enabled: !!arrivalDate && !!ctyhocn && enabled }\n  );\n  const hotelPriceData = shopAvailCalendarData?.hotel?.shopCalendarAvail\n    ?.calendars as ShopCalendar[];\n  const statusCode = shopAvailCalendarData?.hotel?.shopCalendarAvail?.statusCode;\n\n  const dailyPrice: Record<string, FlexDatesShopAvailCalendar> = {};\n  hotelPriceData?.forEach((price) => {\n    if (price && price.arrivalDate) dailyPrice[price?.arrivalDate] = price;\n  });\n\n  return {\n    isFetching,\n    hotelPriceData,\n    statusCode,\n    dailyPrice,\n    shouldUsePoints,\n  };\n};\n","import cx from 'classnames';\n\ntype FlexDatesDayPriceProps = {\n  isDateDisabled?: boolean;\n  isPriceFetching?: boolean;\n  shouldUsePoints?: boolean;\n  statusCode?: number | undefined | null;\n  priceOrPoints?: string;\n  pointsAbbr?: string;\n};\n\nexport const FlexDatesDayPrice = ({\n  isDateDisabled,\n  isPriceFetching,\n  priceOrPoints,\n  pointsAbbr,\n  shouldUsePoints,\n  statusCode,\n}: FlexDatesDayPriceProps) => {\n  const hasPrice = statusCode === 0;\n  return (\n    <>\n      {isPriceFetching ? <span className=\"h-4 w-12 animate-pulse bg-bg-alt\" /> : null}\n      {!isPriceFetching && !isDateDisabled ? (\n        <span\n          className={cx(\n            'text-wrap pb-1 text-2xs normal-case text-primary group-hover:text-text-inverse',\n            {\n              'text-tertiary': shouldUsePoints && hasPrice,\n              'text-text-alt': !hasPrice,\n            }\n          )}\n        >\n          {shouldUsePoints ? pointsAbbr : priceOrPoints}\n        </span>\n      ) : null}\n    </>\n  );\n};\n","import { CalendarDay } from '@dx-ui/osc-calendar';\nimport {\n  getDaysSplitByWeeks,\n  useDaysOfWeek,\n  isKanji,\n  useDateFormat,\n  DEFAULT_LANGUAGE,\n} from '@dx-ui/utilities-dates';\nimport cx from 'classnames';\nimport {\n  addDays,\n  format,\n  isAfter,\n  isBefore,\n  isFirstDayOfMonth,\n  isSameDay,\n  isSameMonth,\n  isWithinInterval,\n  lastDayOfWeek,\n  startOfDay,\n  startOfMonth,\n  startOfWeek,\n  subDays,\n} from 'date-fns';\nimport * as React from 'react';\nimport { getRateDetails, type FlexDatesShopAvailCalendar } from './flex-dates-utils';\nimport { FlexDatesDayPrice } from './flex-dates-day-price';\nimport { useTranslation } from 'next-i18next';\n\ntype CalendarMonth = {\n  /**\n   * selected day or start day when a range is allowed\n   */\n  day?: Date;\n  /**\n   * selected end day when a range is allowed\n   */\n  endDay?: Date;\n  /**\n   * furthest date available to book\n   */\n  maxDays?: number;\n  /**\n   * allow ability to select previous months\n   */\n  allowPrevious?: boolean;\n  /**\n   * month to display, should be passed as the first day of the month, can use `startOfMonth(someDate)` from the date-fns lib\n   */\n  month?: Date;\n  /**\n   * locale for i18n\n   */\n  locale: Intl.Locale;\n  /**\n   * callback when a day is selected\n   */\n  onDayChange: (day?: Date) => void;\n  focusedDay?: number;\n  onFocusedDayChange: (d: number, newD?: number) => void;\n  isVisibleMonth?: boolean;\n  dayLabel?: (d: Date, isStartDay?: boolean) => string;\n  /**\n   * marked as current date, can be set to any date\n   */\n  today?: Date;\n  /**\n   * If using a string, it must be in the `yyyy-MM-dd` format\n   */\n  highlightedDates?: Array<Date | string>;\n  /**\n   * If using a string, it must be in the `yyyy-MM-dd` format\n   */\n  enabledDates?: Array<Date | string>;\n  isPriceLoading?: boolean;\n  dailyPrice: Record<string, FlexDatesShopAvailCalendar>;\n  shouldUsePoints?: boolean;\n  statusCode?: number | undefined | null;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst FORMAT = 'yyyy-MM-dd';\n\n/**\n * displays a calendar month\n */\nconst PriceCalendar = React.forwardRef<HTMLDivElement, CalendarMonth>(\n  (\n    {\n      day,\n      endDay,\n      maxDays = 730,\n      allowPrevious,\n      month: passedMonth,\n      onDayChange,\n      locale,\n      className,\n      onFocusedDayChange,\n      isVisibleMonth,\n      dayLabel,\n      today = new Date(),\n      highlightedDates: passedHighlightedDates = [],\n      enabledDates: passedEnabledDates = [],\n      dailyPrice,\n      isPriceLoading,\n      shouldUsePoints,\n      statusCode,\n    },\n    forwardedRef\n  ) => {\n    const { t } = useTranslation('rate-name-cta');\n    const month = passedMonth || startOfMonth(today);\n    const dateToString = (d: Date | string) => {\n      const isDate = d instanceof Date;\n      const parsedDate = isDate ? ['', '', ''] : d.split('-');\n      const date: Date = isDate\n        ? d\n        : new Date(\n            parseInt(parsedDate[0] ?? '', 10),\n            parseInt(parsedDate[1] ?? '', 10) - 1,\n            parseInt(parsedDate[2] ?? '', 10)\n          );\n      return format(date, FORMAT);\n    };\n\n    const highlightedDates = React.useMemo(\n      () => passedHighlightedDates.map(dateToString),\n      [passedHighlightedDates]\n    );\n\n    const enabledDates = React.useMemo(\n      () => passedEnabledDates.map(dateToString),\n      [passedEnabledDates]\n    );\n\n    const weeks: Date[][] = React.useMemo(\n      () => getDaysSplitByWeeks({ date: month, locale }),\n      [month, locale]\n    );\n    const week = useDaysOfWeek({ locale });\n    const formattedDate = useDateFormat({\n      date: month,\n      locale,\n      options: { monthName: 'long' },\n    });\n    const header = isKanji(locale)\n      ? `${formattedDate.year.numeric}${formattedDate.year.text} ${formattedDate.month.numeric}${formattedDate.month.text}`\n      : `${formattedDate.month.text} ${formattedDate.year.numeric}`;\n    const id = React.useId();\n    const monthId = `calendar-month-${id}`;\n\n    return (\n      <div ref={forwardedRef} className={cx('w-full max-w-6xl select-none', className)}>\n        <h2\n          className=\"mb-2 block text-center text-lg font-extrabold\"\n          id={monthId}\n          data-testid=\"calendar-month-header\"\n          aria-live=\"polite\"\n        >\n          {header}\n        </h2>\n        <table role=\"grid\" className=\"w-full\" aria-labelledby={monthId}>\n          <thead>\n            <tr>\n              {week.map((weekday) => (\n                <th scope=\"col\" key={weekday} className=\"text-center text-xs font-normal\">\n                  <span aria-hidden>{weekday}</span>\n                </th>\n              ))}\n            </tr>\n          </thead>\n          <tbody>\n            {weeks.map((w, i) => (\n              <tr key={w[0]?.getTime() ?? i}>\n                {w.map((d) => {\n                  if (d) {\n                    const selected = (day && isSameDay(d, day)) || (endDay && isSameDay(d, endDay));\n                    const tab0 =\n                      selected || isSameDay(d, today) || (isVisibleMonth && isFirstDayOfMonth(d));\n                    const disabled = enabledDates.length\n                      ? !enabledDates.includes(format(d, FORMAT))\n                      : allowPrevious\n                      ? false\n                      : isBefore(d, startOfDay(today)) || isAfter(d, addDays(today, maxDays));\n                    const inRange =\n                      day && endDay ? isWithinInterval(d, { start: day, end: endDay }) : false;\n                    const highlighted = highlightedDates.includes(format(d, FORMAT));\n\n                    const selectDay = () => onDayChange(d);\n                    const onKeyDown = (e: React.KeyboardEvent<HTMLButtonElement>) => {\n                      let flag = false;\n                      switch (e.key) {\n                        case ' ':\n                        case 'Enter':\n                          selectDay();\n                          flag = true;\n                          break;\n                        case 'ArrowRight':\n                          onFocusedDayChange(d.getTime(), addDays(d, 1).getTime());\n                          break;\n                        case 'ArrowLeft':\n                          onFocusedDayChange(d.getTime(), subDays(d, 1).getTime());\n                          flag = true;\n                          break;\n                        case 'ArrowDown':\n                          onFocusedDayChange(d.getTime(), addDays(d, 7).getTime());\n                          flag = true;\n                          break;\n                        case 'ArrowUp':\n                          onFocusedDayChange(d.getTime(), subDays(d, 7).getTime());\n                          flag = true;\n                          break;\n                        case 'Home':\n                          onFocusedDayChange(d.getTime(), startOfWeek(d).getTime());\n                          flag = true;\n                          break;\n                        case 'End':\n                          onFocusedDayChange(d.getTime(), lastDayOfWeek(d).getTime());\n                          flag = true;\n                          break;\n                        default:\n                          break;\n                      }\n                      if (flag) {\n                        e.stopPropagation();\n                        e.preventDefault();\n                      }\n                    };\n                    const currentDate = format(d, 'yyyy-MM-dd');\n                    const price = dailyPrice[currentDate];\n                    const { priceOrPoints, pointsAbbr, hasNoPriceOrPoints } = getRateDetails({\n                      shopAvailCalendar: price,\n                      shouldUsePoints,\n                      isPriceFetching: isPriceLoading,\n                      statusCode,\n                      t,\n                      locale: locale as unknown as string,\n                    });\n                    const isDisabled = disabled || hasNoPriceOrPoints || isPriceLoading;\n                    return (\n                      <td key={d.getTime()} className={cx('p-1', { group: !isDisabled })}>\n                        {isSameMonth(d, month) ? (\n                          <div\n                            className={cx('group-hover:bg-primary group-hover:text-text-inverse', {\n                              'group-hover:bg-tertiary': shouldUsePoints,\n                            })}\n                          >\n                            <CalendarDay\n                              id={`day-${d.getTime()}`}\n                              disabled={disabled}\n                              inRange={inRange}\n                              highlighted={highlighted}\n                              onKeyDown={onKeyDown}\n                              onClick={(evt: React.MouseEvent<HTMLButtonElement>) => {\n                                if (evt.clientX && evt.clientY) {\n                                  selectDay();\n                                }\n                              }}\n                              onFocus={() => onFocusedDayChange(d.getTime())}\n                              tabIndex={tab0 ? 0 : -1}\n                            >\n                              <span className=\"flex flex-col items-center text-sm\">\n                                <span className=\"sr-only\">{dayLabel ? dayLabel(d) : ''}</span>\n                                <span aria-hidden>\n                                  {d.toLocaleDateString(locale || DEFAULT_LANGUAGE, {\n                                    day: 'numeric',\n                                  })}\n                                </span>\n                                <FlexDatesDayPrice\n                                  isDateDisabled={disabled}\n                                  isPriceFetching={isPriceLoading}\n                                  pointsAbbr={pointsAbbr}\n                                  priceOrPoints={priceOrPoints}\n                                  statusCode={statusCode}\n                                  shouldUsePoints={shouldUsePoints}\n                                />\n                              </span>\n                            </CalendarDay>\n                          </div>\n                        ) : null}\n                      </td>\n                    );\n                  }\n                  return null;\n                })}\n              </tr>\n            ))}\n          </tbody>\n        </table>\n      </div>\n    );\n  }\n);\n\nPriceCalendar.displayName = 'PriceCalendar';\n\nexport { PriceCalendar };\nexport default PriceCalendar;\n","import cx from 'classnames';\nimport { useTranslation } from 'next-i18next';\nimport {\n  getRateDetails,\n  getRoomsPageUrl,\n  type FlexDatesShopAvailCalendar,\n} from './flex-dates-utils';\nimport { useMediaQuery } from 'usehooks-ts';\nimport { useWrappedRouter } from '../../../hooks';\nimport { useAppState } from '../../../providers/app-provider';\nimport { DEFAULT_LANGUAGE } from '@dx-ui/utilities-dates';\n\ntype FlexDatesModalFooterProps = {\n  ctyhocn: string;\n  isPriceLoading?: boolean;\n  rateInfo?: FlexDatesShopAvailCalendar;\n  statusCode?: number | undefined | null;\n  shouldUsePoints?: boolean;\n  onCancel: () => void;\n};\n\nexport const FlexDatesModalFooter = ({\n  ctyhocn,\n  isPriceLoading,\n  rateInfo,\n  statusCode,\n  shouldUsePoints,\n  onCancel,\n}: FlexDatesModalFooterProps) => {\n  const isMobileDevice = useMediaQuery('(max-width: 640px)');\n  const { t } = useTranslation('rate-name-cta');\n  const { router } = useWrappedRouter();\n  const { selectedCurrency } = useAppState();\n  const { priceOrPoints, rateName, rateDate } = getRateDetails({\n    isPriceFetching: isPriceLoading,\n    statusCode,\n    shopAvailCalendar: rateInfo,\n    shouldUsePoints,\n    t,\n    locale: router.locale || DEFAULT_LANGUAGE,\n  });\n  const bookUrl = getRoomsPageUrl({\n    ctyhocn,\n    currencyCode: selectedCurrency,\n    rateInfo,\n    shouldUsePoints,\n    language: router.locale || DEFAULT_LANGUAGE,\n  });\n\n  const handleChooseRoomClick = () => {};\n\n  return (\n    <div\n      className={cx('mb:pb-0 sticky bottom-0 flex justify-end gap-4 bg-bg px-1 pt-2 md:flex-row', {\n        'max-sm:flex-wrap': !!rateInfo,\n      })}\n      data-testid=\"flex-dates-modal-footer\"\n    >\n      {rateInfo ? (\n        <>\n          <div className=\"flex grow flex-col text-xs\">\n            <div\n              className={cx('font-sans text-sm font-bold', { 'text-tertiary': shouldUsePoints })}\n            >\n              {priceOrPoints}\n            </div>\n            <div className=\"text-text-alt\">{t('flexDatesModal.avgForOneNight')}</div>\n            <div className=\"text-xs font-normal\">{rateName}</div>\n            <div className=\"text-text-alt\">{rateDate}</div>\n          </div>\n          <div className=\"flex items-center\">\n            <a\n              type=\"button\"\n              className={cx('btn btn-xl btn-primary h-10 w-full', {\n                'btn-tertiary': shouldUsePoints,\n              })}\n              onClick={handleChooseRoomClick}\n              href={bookUrl}\n              target={!isMobileDevice ? '_blank' : undefined}\n              rel=\"noreferrer\"\n            >\n              {t('flexDatesModal.chooseRoom')}\n            </a>\n          </div>\n        </>\n      ) : null}\n\n      <div className=\"flex items-center max-sm:w-full md:justify-end\">\n        <button\n          type=\"button\"\n          className=\"btn btn-xl btn-primary-outline h-10 w-full\"\n          onClick={onCancel}\n        >\n          {t('flexDatesModal.cancel')}\n        </button>\n      </div>\n    </div>\n  );\n};\n","import { Dialog } from '@dx-ui/osc-dialog-v2';\nimport { useTranslation } from 'next-i18next';\nimport { MonthSlider } from './month-slider';\nimport { addMonths, format, startOfMonth } from 'date-fns';\nimport { useGetFlexDatesInfo } from './hooks/use-get-flex-dates-info';\nimport { useWrappedRouter } from '../../../hooks';\nimport PriceCalendar from './price-calendar';\nimport { FlexDatesModalFooter } from './flex-dates-modal-footer';\nimport { useEffect, useMemo, useState } from 'react';\nimport { DEFAULT_LANGUAGE } from '@dx-ui/utilities-dates';\nimport { env } from '../../../constants';\n\ntype FlexDatesModalProps = {\n  ctyhocn: string;\n  hotelName?: string;\n  isOpen: boolean;\n  onClose: () => void;\n};\n\nexport const FlexDatesModal = ({\n  isOpen = false,\n  onClose,\n  ctyhocn,\n  hotelName,\n}: FlexDatesModalProps) => {\n  const { t } = useTranslation('rate-name-cta');\n  const { router } = useWrappedRouter();\n  const [selectedDate, setSelectedDate] = useState(startOfMonth(new Date()));\n  const [selectedPriceDate, setSelectedPriceDate] = useState<Date | null>(null);\n  const startDate = format(selectedDate, 'yyyy-MM-dd');\n  const {\n    dailyPrice,\n    isFetching: isPriceLoading,\n    statusCode,\n    shouldUsePoints,\n  } = useGetFlexDatesInfo({\n    arrivalDate: startDate,\n    ctyhocn: ctyhocn || '',\n    enabled: isOpen,\n  });\n\n  useEffect(() => {\n    if (isOpen) {\n      setSelectedPriceDate(null);\n      setSelectedDate(startOfMonth(new Date()));\n    }\n  }, [isOpen]);\n\n  const handleMonthTabChange = (index: number) => {\n    setSelectedPriceDate(null);\n    const currDate = addMonths(new Date(), index);\n    setSelectedDate(startOfMonth(currDate));\n  };\n\n  const handleDaySelection = (day?: Date) => {\n    if (day) setSelectedPriceDate(day);\n  };\n\n  const handleOnClose = () => {\n    setSelectedPriceDate(null);\n    if (onClose) onClose();\n  };\n\n  const rateInfo = useMemo(() => {\n    let rateInfo = null;\n    if (selectedPriceDate) {\n      const priceDateAsString = format(selectedPriceDate, 'yyyy-MM-dd');\n      rateInfo = dailyPrice[priceDateAsString];\n    }\n    return rateInfo;\n  }, [dailyPrice, selectedPriceDate]);\n  const bookFlexDatesPage = `${env.OHW_BASE_URL}${\n    router.locale || 'en'\n  }/book/reservation/flexibledates/?ctyhocn=${ctyhocn}`;\n  return (\n    <Dialog\n      className=\"px-2\"\n      isOpen={isOpen}\n      onDismiss={handleOnClose}\n      size=\"2xl\"\n      title={t('flexDatesModal.title')}\n    >\n      <div className=\"space-y-2 pb-3 text-sm\">\n        <div className=\"font-bold\"> {hotelName}</div>\n        <div>{t('flexDatesModal.showingBestPriceFor')}</div>\n        {!shouldUsePoints ? (\n          <div className=\"font-semibold\">{t('flexDatesModal.priceIncludesFee')}</div>\n        ) : null}\n        <div className=\"font-bold\">\n          <a href={bookFlexDatesPage} target=\"_blank\" rel=\"noreferrer\">\n            <span className=\"whitespace-nowrap text-primary hover:text-primary-alt\">\n              {t('flexDatesModal.exploreAllFilterAndSearch')}\n            </span>\n            <span aria-hidden>&nbsp;&gt;</span>\n          </a>\n        </div>\n      </div>\n\n      <div className=\"border-y-2 border-border\">\n        <MonthSlider\n          ctyhocn={ctyhocn}\n          onMonthChange={(monthTabIndex) => handleMonthTabChange(monthTabIndex)}\n        >\n          <div>\n            <PriceCalendar\n              month={selectedDate}\n              maxDays={365}\n              onDayChange={(day) => handleDaySelection(day)}\n              locale={(router.locale || DEFAULT_LANGUAGE) as unknown as Intl.Locale}\n              onFocusedDayChange={() => {}}\n              dailyPrice={dailyPrice}\n              isPriceLoading={isPriceLoading}\n              shouldUsePoints={shouldUsePoints}\n              statusCode={statusCode}\n            />\n          </div>\n        </MonthSlider>\n      </div>\n      <FlexDatesModalFooter\n        rateInfo={rateInfo}\n        onCancel={handleOnClose}\n        shouldUsePoints={shouldUsePoints}\n        statusCode={statusCode}\n        ctyhocn={ctyhocn}\n      />\n    </Dialog>\n  );\n};\n","import { useGetMVTSelections } from '../../../hooks';\nimport { EXPLORE_DATES_CTA } from '../../../constants';\nimport { RateMessage } from '../../rate-name-cta/rate-name-cta';\nimport { useAppState } from '../../../providers/app-provider';\nimport { useTranslation } from 'next-i18next';\nimport { Maybe } from '@dx-ui/queries-dx-shop-search-ui';\n\nexport const useGetExploreDatesCTAMVT = ({\n  ctaRateMessage,\n  hotelName,\n}: {\n  ctaRateMessage?: RateMessage | undefined;\n  hotelName?: Maybe<string> | undefined;\n}) => {\n  const { t } = useTranslation(['hotel-card', 'rate-name-cta']);\n  const { pageType } = useAppState();\n  const {\n    isLoaded: isExploreDatesTestLoaded,\n    isMVTVariant: { a: isExploreDatesVarA, b: isExploreDatesVarB },\n  } = useGetMVTSelections({\n    agentId: EXPLORE_DATES_CTA.agentId,\n    isProvisional: pageType.isDreams,\n  });\n  const isExploreDatesVar = isExploreDatesTestLoaded && isExploreDatesVarB;\n  const isExploreDatesCTATest =\n    isExploreDatesTestLoaded && (isExploreDatesVarA || isExploreDatesVarB);\n  const ctaLabel =\n    isExploreDatesVar && ctaRateMessage?.text === t('rate-name-cta:selectDates')\n      ? {\n          ...ctaRateMessage,\n          text: t('rate-name-cta:exploreDates'),\n          screenReaderText: t('hotel-card:forHotel', { hotel: hotelName }),\n        }\n      : ctaRateMessage;\n\n  return {\n    ctaLabel,\n    isExploreDatesCTATest,\n  };\n};\n","import cx from 'classnames';\nimport { useTranslation } from 'next-i18next';\nimport { useMediaQuery } from 'usehooks-ts';\nimport {\n  GOALS,\n  INTERNATIONAL_BOOKING_NUMBER,\n  UP_TO_LG_BUTTON_MAX_STRING_LENGTH,\n} from '../../constants';\nimport { InfoPopup } from '@dx-ui/osc-info-popup';\nimport { getRateInfoTextClassName } from '../hotel-card/utils/hotel-info-utils';\nimport Icon from '@dx-ui/osc-icon';\nimport * as React from 'react';\nimport { useFeatureToggleConfig, useWrappedRouter } from '../../hooks';\nimport { useSMBContextLocalStorage } from '@dx-ui/utilities-use-smb-context-local-storage';\nimport IneligibleHotelModal from './ineligible-hotel-modal';\nimport { FlexDatesModal } from './flex-dates/flex-dates-modal';\nimport { useGetExploreDatesCTAMVT } from './hooks/use-explore-dates-cta-mvt';\nimport { sendReward } from '@dx-ui/framework-conductrics';\n\nexport type RateMessage = {\n  className?: string;\n  hasColumnLayout?: boolean;\n  isCaption?: boolean;\n  isCompare?: boolean;\n  screenReaderText?: string;\n  text?: string;\n  type?: 'DiamondRate' | 'UsePoints' | 'amexDisclaimer' | undefined;\n  textType?: 'prefix' | 'heading' | 'suffix' | undefined;\n  infoIconOrPopup?: { align: 'left' | 'right'; id?: string; infoText?: string; isIcon?: boolean };\n};\nexport type RateInfoMessage = {\n  className?: string;\n  isCaption?: boolean;\n  isCompare?: boolean;\n  prefix?: RateMessage;\n  hasColumnLayout?: boolean;\n  heading: RateMessage;\n  suffix?: RateMessage;\n  screenReaderText?: string;\n  type?: 'DiamondRate' | 'UsePoints' | 'amexDisclaimer' | undefined;\n};\n\ntype RateNameCTAProps = {\n  hasColumnLayout?: boolean;\n  ctaHref?: string;\n  ctaLabel?: RateMessage;\n  ctaMessage?: RateInfoMessage;\n  customRateInfo?: {\n    [key: string]: string | boolean;\n  };\n  'data-testid'?: string;\n  isLoading?: boolean;\n  rateMessages?: RateInfoMessage[];\n  onRateNameCTAClick?: () => void;\n  // NHCSEARCH-5197 MVT\n  onHDPClick?: () => void;\n  isHDP?: boolean;\n};\n\nconst NotBookableInfo = ({\n  hasColumnLayout,\n  phoneNumber,\n}: {\n  hasColumnLayout?: boolean;\n  phoneNumber?: string;\n}) => {\n  const { t } = useTranslation('rate-name-cta');\n  return phoneNumber ? (\n    <div\n      className={cx('flex flex-col', { 'mt-auto h-full items-end justify-end': hasColumnLayout })}\n    >\n      <p className=\"font-semibold\">{t('notBookable')}</p>\n      <p className=\"text-sm font-medium\">\n        <span>{`${t('tollFree')} `}</span>\n        <a className=\"text-primary\" href={`tel:${phoneNumber}`}>\n          {phoneNumber}\n        </a>\n      </p>\n      <p className=\"text-sm font-medium\">\n        <span>{t('international', { INTERNATIONAL_BOOKING_NUMBER })}</span>\n        <a className=\"text-primary\" href={`tel:${INTERNATIONAL_BOOKING_NUMBER}`}>\n          {INTERNATIONAL_BOOKING_NUMBER}\n        </a>\n      </p>\n    </div>\n  ) : null;\n};\nconst ScreenReaderText = ({ srText }: { srText?: string }) => {\n  return srText ? (\n    <span className=\"sr-only\">\n      <span>&nbsp;{srText}</span>\n    </span>\n  ) : null;\n};\n\nconst InfoPopupOrIcon = ({ isIcon, infoText }: { isIcon?: boolean; infoText?: string }) => {\n  const { t } = useTranslation('rate-name-cta');\n  if (isIcon)\n    return (\n      <div className=\"mt-[-0.1875rem] self-start\">\n        <span className=\"sr-only\">{infoText || t('moreInfo')}</span>\n        <Icon name=\"info-circle\" variant=\"regular\" size=\"sm\" />\n      </div>\n    );\n  return infoText ? (\n    <InfoPopup>\n      <span className=\"w-56 text-left\">{infoText}</span>\n    </InfoPopup>\n  ) : null;\n};\nconst RateInfoText = ({\n  className,\n  text,\n  hasColumnLayout,\n  isCaption = false,\n  isCompare = false,\n  type,\n  textType,\n  infoIconOrPopup,\n}: RateMessage) => {\n  const textClassName = getRateInfoTextClassName({\n    className,\n    hasColumnLayout,\n    isCaption,\n    isCompare,\n    type,\n    textType,\n  });\n  const rateHeadingTestId = isCaption && textType === 'heading' ? 'rateItem' : undefined;\n  const hasLeftIcon = infoIconOrPopup && infoIconOrPopup?.align === 'left';\n  return text ? (\n    <div\n      className={cx('flex space-x-1', {\n        'items-center': !hasLeftIcon,\n        'items-start': hasLeftIcon,\n      })}\n    >\n      {hasLeftIcon ? (\n        <InfoPopupOrIcon isIcon={!!infoIconOrPopup.isIcon} infoText={infoIconOrPopup.infoText} />\n      ) : null}\n      <span className={textClassName} data-testid={rateHeadingTestId}>\n        {text}\n      </span>\n      {infoIconOrPopup && infoIconOrPopup?.align === 'right' ? (\n        <InfoPopupOrIcon isIcon={!!infoIconOrPopup.isIcon} infoText={infoIconOrPopup.infoText} />\n      ) : null}\n    </div>\n  ) : null;\n};\n\nconst RateMessage = ({\n  className,\n  hasColumnLayout,\n  isCaption = false,\n  isCompare = false,\n  prefix,\n  heading,\n  suffix,\n  screenReaderText,\n  type,\n}: RateInfoMessage) => {\n  if (!heading) return null;\n  return (\n    <div\n      className={cx(\n        'flex flex-wrap justify-end space-x-1 rtl:flex-row-reverse rtl:justify-start rtl:text-left',\n        className\n      )}\n    >\n      <RateInfoText\n        className=\"text-xs\"\n        text={prefix?.text}\n        infoIconOrPopup={prefix?.infoIconOrPopup}\n        isCaption={isCaption}\n        isCompare={isCompare}\n        type={type}\n        textType=\"prefix\"\n      />\n      <RateInfoText\n        className={heading?.className}\n        hasColumnLayout={hasColumnLayout}\n        text={heading?.text}\n        infoIconOrPopup={heading?.infoIconOrPopup}\n        isCaption={isCaption}\n        isCompare={isCompare}\n        type={type}\n        textType=\"heading\"\n      />\n      <RateInfoText\n        className=\"text-xs\"\n        text={suffix?.text}\n        infoIconOrPopup={suffix?.infoIconOrPopup}\n        isCaption={isCaption}\n        isCompare={isCompare}\n        type={type}\n        textType=\"suffix\"\n      />\n      <ScreenReaderText srText={screenReaderText} />\n    </div>\n  );\n};\n\nexport const RateInfoMessages = ({\n  hasColumnLayout,\n  rateMessages,\n  isHDPWithoutCTA,\n  isCompare,\n}: {\n  hasColumnLayout?: boolean;\n  rateMessages?: RateInfoMessage[];\n  isHDPWithoutCTA?: boolean;\n  isCompare?: boolean;\n}) => {\n  if (!rateMessages?.length) return null;\n  return (\n    <div\n      className={cx('flex flex-col', {\n        'mb-1': hasColumnLayout,\n        'max-sm:items-center': isHDPWithoutCTA,\n        'items-start': isCompare,\n        'items-end': !isCompare,\n      })}\n    >\n      {rateMessages?.map((rateMessage, index) =>\n        rateMessage ? (\n          <RateMessage\n            {...rateMessage}\n            hasColumnLayout={hasColumnLayout}\n            isCaption={index === 0}\n            isCompare={isCompare}\n            key={`${index + 1}-${rateMessage.heading.text}`}\n          />\n        ) : null\n      )}\n    </div>\n  );\n};\n\nconst RateInfoCTAButton = ({\n  ctaHref,\n  ctaLabel: ctaRateMessage,\n  ctaMessage,\n  customRateInfo,\n  onHDPClick,\n  onRateNameCTAClick,\n  isHDP,\n}: RateNameCTAProps) => {\n  //NHCSEARCH-5792\n  const { ctaLabel, isExploreDatesCTATest } = useGetExploreDatesCTAMVT({\n    ctaRateMessage,\n    hotelName: customRateInfo?.hotelName as string,\n  });\n  const isMobileDevice = useMediaQuery('(max-width: 640px)');\n  const { enabled: isSMBContextSwitchingEnabled } = useFeatureToggleConfig('WEBPLAT-551');\n  const { isSMBContextSet, smbContext } = useSMBContextLocalStorage(isSMBContextSwitchingEnabled);\n  const [ctaClick, setCTAClick] = React.useState(false);\n  const isIneligibleHotel =\n    !!customRateInfo?.isPartnerBrand && isSMBContextSet && smbContext === 'business';\n\n  const [ctaClickForFlexDatesModal, setCTAClickForFlexDatesModal] = React.useState(false);\n  const { router } = useWrappedRouter();\n\n  const isLocationsPage = router.asPath.includes('/locations/');\n\n  let btnTarget: string | undefined;\n  let btnHref: string | undefined = '#';\n  if ((!isLocationsPage || !!isHDP) && !isIneligibleHotel) {\n    btnHref = ctaHref;\n    if (!isMobileDevice) btnTarget = '_blank';\n  }\n\n  const handleRateNameCTAClick = () => {\n    if (isExploreDatesCTATest) sendReward(GOALS.locationCTAClick); //NHCSEARCH-5792\n    onHDPClick?.();\n    if (!btnTarget) {\n      if (isIneligibleHotel) setCTAClick(!ctaClick);\n      else {\n        const showFlexDatesModals = !ctaClickForFlexDatesModal && !isHDP && isLocationsPage;\n        setCTAClickForFlexDatesModal(showFlexDatesModals);\n      }\n    }\n    onRateNameCTAClick?.();\n  };\n\n  const onContinueIneligibleHotelModal = () => {\n    setCTAClick(false);\n    window.open(ctaHref, '_blank');\n  };\n\n  const onCloseIneligibleHotelModal = () => setCTAClick(false);\n  const onCloseFlexDatesModal = () => setCTAClickForFlexDatesModal(false);\n  return !!ctaLabel && ctaHref ? (\n    <>\n      <IneligibleHotelModal\n        isShowing={ctaClick}\n        onClose={onCloseIneligibleHotelModal}\n        onContinue={onContinueIneligibleHotelModal}\n      />\n      <FlexDatesModal\n        isOpen={ctaClickForFlexDatesModal}\n        onClose={onCloseFlexDatesModal}\n        ctyhocn={customRateInfo?.ctyhocn as string}\n        hotelName={customRateInfo?.hotelName as string}\n      />\n\n      <div className=\"flex items-center justify-end\">\n        <div className=\"flex flex-col space-x-1\">\n          <a\n            className={cx(\n              'btn btn-primary flex h-10 cursor-pointer items-center justify-center  md:btn-base 2xl:btn-xl',\n              {\n                'btn-tertiary': ctaLabel?.type === 'UsePoints',\n                'lg:btn-base':\n                  ctaLabel?.text && ctaLabel.text.length > UP_TO_LG_BUTTON_MAX_STRING_LENGTH,\n                'lg:btn-lg':\n                  ctaLabel?.text && ctaLabel.text.length < UP_TO_LG_BUTTON_MAX_STRING_LENGTH,\n              }\n            )}\n            href={btnHref}\n            target={btnTarget}\n            rel={btnTarget ? 'noreferrer' : undefined}\n            onClick={handleRateNameCTAClick}\n          >\n            <span>{ctaLabel?.text}</span>\n            <ScreenReaderText srText={ctaLabel?.screenReaderText} />\n          </a>\n          {ctaMessage ? <RateMessage {...ctaMessage} /> : null}\n        </div>\n      </div>\n    </>\n  ) : null;\n};\n\nexport const RateNameCTA = ({\n  hasColumnLayout,\n  ctaHref,\n  ctaLabel,\n  ctaMessage,\n  rateMessages,\n  customRateInfo,\n  isLoading,\n  isHDP = false,\n  onHDPClick,\n  onRateNameCTAClick,\n  ...props\n}: RateNameCTAProps) => {\n  const showOneColumn = ctaLabel && !hasColumnLayout;\n  if (isLoading) return <RateNameCtaSkeleton hasColumnLayout={hasColumnLayout} />;\n  return (\n    <div\n      className={cx('flex space-x-4', {\n        'flex-col justify-end': showOneColumn,\n        'items-start lg:items-center': hasColumnLayout,\n        'max-sm:justify-between': !!ctaLabel,\n        'max-sm:justify-center': !ctaLabel,\n      })}\n      data-testid={props['data-testid'] ?? 'hotelDetailsInfo'}\n    >\n      {customRateInfo?.isNotBookable ? (\n        <NotBookableInfo\n          hasColumnLayout={!hasColumnLayout}\n          phoneNumber={customRateInfo?.phoneNumber as string}\n        />\n      ) : null}\n      <RateInfoMessages\n        hasColumnLayout={showOneColumn}\n        rateMessages={rateMessages}\n        isHDPWithoutCTA={isHDP && !ctaLabel}\n      />\n      <RateInfoCTAButton\n        ctaHref={ctaHref}\n        ctaLabel={ctaLabel}\n        ctaMessage={ctaMessage}\n        customRateInfo={customRateInfo}\n        isHDP={isHDP}\n        onHDPClick={onHDPClick}\n        onRateNameCTAClick={onRateNameCTAClick}\n      />\n    </div>\n  );\n};\n\nconst RateNameCtaSkeleton = ({ hasColumnLayout }: { hasColumnLayout?: boolean }) => (\n  <div\n    aria-hidden\n    className={cx('flex items-end justify-end space-x-1 px-0 py-2 max-sm:flex-col', {\n      'flex-col': !hasColumnLayout,\n    })}\n    data-testid=\"rateNameCtaSkeleton\"\n  >\n    <div className={cx('flex items-end justify-end max-sm:py-2', { 'flex-col': !hasColumnLayout })}>\n      <div className=\"mb-1 h-6 w-16 animate-pulse bg-border-alt \" />\n      <div className=\"mb-1 h-6 w-24 animate-pulse bg-border-alt\" />\n    </div>\n    <div className=\"h-8 w-36 animate-pulse rounded bg-border-alt pl-2\" />\n  </div>\n);\n","import { keepPreviousData, type UseQueryOptions } from '@tanstack/react-query';\nimport type {\n  ShopMultiPropAvailQueryInput,\n  ShopMultiPropAvailQueryVariables,\n  ShopMultiPropAvailQuery,\n} from '@dx-ui/queries-dx-shop-search-ui';\nimport {\n  ShopMultiPropAvailPointsDocument,\n  ShopMultiPropAvailDocument,\n} from '@dx-ui/queries-dx-shop-search-ui';\n\nexport const generateMPAQueryArray = ({\n  chunkedMPA,\n  enabled,\n  input,\n  language,\n}: {\n  chunkedMPA: string[][];\n  enabled: boolean;\n  input: ShopMultiPropAvailQueryInput;\n  language: string;\n}) => {\n  const queryKey =\n    input?.specialRates?.hhonors === true\n      ? ShopMultiPropAvailPointsDocument\n      : ShopMultiPropAvailDocument;\n\n  return chunkedMPA.reduce((arr, chunk) => {\n    const chunkedVariables: ShopMultiPropAvailQueryVariables = {\n      input,\n      ctyhocns: chunk,\n      language,\n    };\n\n    arr.push({\n      queryKey: [queryKey, chunkedVariables],\n      enabled,\n      placeholderData: keepPreviousData,\n      retry: 2,\n      staleTime: 1000 * 60 * 10,\n    });\n    return arr;\n  }, [] as UseQueryOptions<ShopMultiPropAvailQuery>[]);\n};\n","/**\n * @param {String[]} arrayToChunk - string array to create subarray of string arrays\n * @param {Number} chunkSize - size of sub chunks of array\n */\nexport const arrayChunk = (arrayToChunk: string[], chunkSize: number) => {\n  const results = [];\n\n  while (arrayToChunk.length) {\n    results.push(arrayToChunk.splice(0, chunkSize));\n  }\n\n  return results;\n};\n","import type {\n  ShopMultiPropAvailPointsQuery,\n  ShopMultiPropAvailQuery,\n} from '@dx-ui/queries-dx-shop-search-ui';\n\nexport const isPastDate = (hotel: ShopMultiPropAvailQuery['shopMultiPropAvail'][0]) =>\n  hotel.statusCode === 2004;\n\nexport const isOfferNotAvailable = (hotel: ShopMultiPropAvailQuery['shopMultiPropAvail'][0]) =>\n  !!hotel?.notifications?.find(\n    (notification) =>\n      notification?.type === 'info' &&\n      notification?.subType === 'offer' &&\n      notification?.text?.includes('The offer you requested is not available for your stay dates.')\n  );\n\nexport const isOfferInvalid = (hotel: ShopMultiPropAvailQuery['shopMultiPropAvail'][0]) =>\n  !!hotel?.notifications?.find(\n    (notification) =>\n      notification?.type === 'info' &&\n      notification?.subType === 'offer' &&\n      notification?.text?.includes('The offer you requested is not valid')\n  );\n\nexport const checkPricingConstraints = (\n  data: Record<string, ShopMultiPropAvailQuery['shopMultiPropAvail'][0]>\n) =>\n  Object.values(data).reduce(\n    (constraints, hotel) => {\n      constraints.isPastDate = isPastDate(hotel);\n      constraints.invalidOfferId = isOfferInvalid(hotel);\n      if (isOfferNotAvailable(hotel)) constraints.offerNotAvailableCount++;\n      return constraints;\n    },\n    {\n      isPastDate: false,\n      invalidOfferId: false,\n      offerNotAvailableCount: 0,\n    }\n  );\n\nexport type ShopMultiPropAvailConstraints = {\n  isPastDate: boolean;\n  invalidOfferId: boolean;\n  hasPointsRateChange: boolean;\n  hasRateChange: boolean;\n  isOfferNotAvailable: boolean;\n};\n\nexport const getConstraintsFromCachedData = (\n  cachedData: Record<string, ShopMultiPropAvailPointsQuery['shopMultiPropAvail'][0]>\n): ShopMultiPropAvailConstraints => {\n  const cacheDataVals = Object.values(cachedData);\n\n  //rate change indicators\n  const hasRateChange = cacheDataVals.some(\n    (pricing) => pricing?.summary?.lowest?.rateChangeIndicator\n  );\n  const hasPointsRateChange = cacheDataVals.some(\n    (pricing) => pricing?.summary?.hhonors?.rateChangeIndicator\n  );\n\n  //check pricing constraints (past date, offerId, etc)\n  const { isPastDate, invalidOfferId, offerNotAvailableCount } =\n    checkPricingConstraints(cachedData);\n\n  //an offer isnt available notification triggers when we 1) actually have pricing values 2) all pricing values return no offer avail status\n  const isOfferNotAvailable = Boolean(\n    cacheDataVals.length &&\n      offerNotAvailableCount > 0 &&\n      offerNotAvailableCount ===\n        cacheDataVals?.filter((hotel) => hotel?.ctyhocn && hotel?.statusCode === 0).length\n  );\n\n  return {\n    isPastDate,\n    invalidOfferId,\n    hasPointsRateChange,\n    hasRateChange,\n    isOfferNotAvailable,\n  };\n};\n","import type { GuestQuery } from '@dx-ui/framework-auth-provider';\nimport type { QueryParameters } from '../../../constants';\nimport type { ShopMultiPropAvailQueryVariables } from '@dx-ui/queries-dx-shop-search-ui';\nimport { getGuestInfo } from '../../../utils';\n\nexport const generateShopMultiPropAvailInputVariables = ({\n  guestInfo,\n  queryParameters,\n  shouldUsePoints = false,\n  guestLocationCountry,\n  smbProgramAccountId,\n}: {\n  guestInfo?: GuestQuery['guest'] | null;\n  queryParameters?: QueryParameters;\n  shouldUsePoints?: boolean | null;\n  guestLocationCountry?: string;\n  smbProgramAccountId: number | null;\n}): ShopMultiPropAvailQueryVariables['input'] => {\n  /**\n   * current limitation with CP is to only compute pricing on occupancy for room 1, all other room occupancy is ignored\n   * another limitation is childAges.length must equal numChildren, if childAges.length !== numChildren, send []\n   */\n  const [room1] = queryParameters?.rooms || [];\n  const childAges =\n    typeof room1?.childAges === 'number'\n      ? [room1.childAges]\n      : (room1?.childAges\n          ?.map(({ age }) => age)\n          .filter((a) => typeof a !== 'undefined') as number[]);\n  const { isTMTPTeamMember, isFriendsAndFamily, isOwner, isHGVOwner, isTPHMember } =\n    getGuestInfo(guestInfo);\n  const tmtpRates = {\n    teamMember: ((isTMTPTeamMember || isTPHMember) && queryParameters?.employeeRate) || false,\n    familyAndFriends:\n      ((isFriendsAndFamily || isTPHMember) && queryParameters?.friendsAndFamilyRate) || false,\n    owner: (isOwner && queryParameters?.ownerVIPRate) || false,\n    ownerHGV: (isHGVOwner && queryParameters?.ownerHGVRate) || false,\n  };\n\n  const smbRates = Boolean(queryParameters?.smbRate && smbProgramAccountId);\n  const programAccountId = smbRates ? { programAccountId: smbProgramAccountId } : {};\n\n  return {\n    guestId: guestInfo?.guestId || 0,\n    guestLocationCountry,\n    arrivalDate: queryParameters?.arrivalDate || '',\n    departureDate: queryParameters?.departureDate || '',\n    numAdults: queryParameters?.numAdults || 1,\n    numChildren: queryParameters?.numChildren,\n    numRooms: queryParameters?.numRooms,\n    childAges: queryParameters?.numChildren !== childAges?.length ? [] : childAges, // limitation is childAges.length must equal numChildren, if childAges.length !== numChildren, send []\n    ratePlanCodes: queryParameters?.specPlan,\n    rateCategoryTokens: queryParameters?.specialRateTokens,\n    specialRates: {\n      aaa: queryParameters?.token?.includes('HCAAA'),\n      aarp: queryParameters?.token?.includes('HCARP'),\n      corporateId: queryParameters?.corporateCode,\n      governmentMilitary: queryParameters?.token?.includes('GDSGOV'),\n      groupCode: queryParameters?.groupCode,\n      hhonors: shouldUsePoints,\n      pnd:\n        !!queryParameters?.pnd && queryParameters?.corporateCode !== 'false'\n          ? queryParameters?.pnd\n          : '',\n      offerId:\n        !!queryParameters?.offerId && queryParameters?.promoCode !== 'false'\n          ? queryParameters?.offerId\n          : null,\n      promoCode: queryParameters?.promoCode,\n      senior: queryParameters?.token?.includes('GDSSNR'),\n      smb: smbRates,\n      travelAgent: queryParameters?.travelAgentRate,\n      ...tmtpRates,\n    },\n    ...programAccountId,\n  };\n};\n","import {\n  ShopMultiPropAvailDocument,\n  ShopMultiPropAvailPointsDocument,\n} from '@dx-ui/queries-dx-shop-search-ui';\nimport type { QueryClient } from '@tanstack/react-query';\nimport type {\n  ShopMultiPropAvailPointsQuery,\n  ShopMultiPropAvailPointsQueryVariables,\n  ShopMultiPropAvailQueryInput,\n} from '@dx-ui/queries-dx-shop-search-ui';\n\nexport const getHashedMPADataFromCache = (\n  queryClient: QueryClient,\n  input: ShopMultiPropAvailQueryInput,\n  usePoints: boolean\n) => {\n  //select between points and currency based MPA query cache key\n  const queryKey =\n    usePoints === true ? ShopMultiPropAvailPointsDocument : ShopMultiPropAvailDocument;\n  const dataArray = queryClient.getQueriesData<ShopMultiPropAvailPointsQuery>({\n    queryKey: [queryKey],\n  });\n\n  return dataArray.reduce((hashMap, cacheEntry) => {\n    //first check to see if cached data actually matches current \"input\" variables for mpa. If it's cached data but with wrong parameters dont return it as consumable data\n    if (\n      JSON.stringify(input) !==\n      JSON.stringify((cacheEntry?.[0]?.[1] as ShopMultiPropAvailPointsQueryVariables).input)\n    ) {\n      return hashMap;\n    }\n\n    //otherwise data is valid for query inputs, normalize it\n    const normalizedCacheEntry = cacheEntry?.[1]?.shopMultiPropAvail?.reduce(\n      (normalizedData, cacheValue) => {\n        if (cacheValue?.ctyhocn) normalizedData[cacheValue?.ctyhocn] = cacheValue;\n        return normalizedData;\n      },\n      {} as Record<string, ShopMultiPropAvailPointsQuery['shopMultiPropAvail'][0]>\n    );\n\n    //merge normalized data with other normalized data\n    return { ...hashMap, ...normalizedCacheEntry };\n  }, {} as Record<string, ShopMultiPropAvailPointsQuery['shopMultiPropAvail'][0]>);\n};\n","export * from './array-chunk';\nexport * from './check-pricing-constraints';\nexport * from './generate-shop-multi-prop-avail-input-variables';\nexport * from './generate-mpa-query-array';\nexport * from './get-hashed-mpa-data-from-cache';\n","import { useHotelQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { useAppState } from '../../../providers/app-provider';\nimport { useWrappedRouter } from '../../../hooks/use-wrapped-router';\nimport { useCurrencyConversion } from '@dx-ui/osc-currency-converter';\nimport { useTranslation } from 'next-i18next';\n\nimport type { RateMessage } from '../../rate-name-cta/rate-name-cta';\nimport type { HotelType } from '../../../providers/app-provider/app-provider.types';\nimport { getMPAHotelRate } from '../utils/hotel-mpa-rate-utils';\nimport type { HotelCardData } from '../utils/hotel-lead-rate-utils';\nimport { getHotelLeadRateInfo } from '../utils/hotel-lead-rate-utils';\nimport { getLengthOfStay, getNoPhotoAvailable, getTransactionPropertyData } from '../../../utils';\nimport type { HotelBadgeTypes } from '../hotel-badges';\nimport {\n  type HotelInfoParams,\n  type HotelInfoAttributes,\n  isIndividualRoomLimitExceeded,\n} from '../utils/hotel-info-utils';\nimport { useBrandDetails, useIsAffiliateHotel, useRenovationChip } from '../../../hooks';\nimport { useLocation } from '@dx-ui/framework-location-provider';\n\nexport const useGetHotelInfo = ({\n  priceInfo,\n  hotelInfo,\n  additionalParams,\n}: HotelInfoParams): HotelInfoAttributes => {\n  const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n  const isDateFlex = queryParameters?.datesFlex || false;\n  const { currenciesError, currenciesMap } = useCurrencyConversion();\n\n  const numOfChildren =\n    queryParameters?.rooms\n      .map((room) => room.children)\n      .reduce((previous: number, current: number) => previous + current) || 0;\n  const {\n    hasConnectingRooms,\n    selectedCurrency = '',\n    selectedCtyhocn,\n    shouldUsePoints = false,\n    pageType,\n    hasSpecialRate,\n  } = useAppState();\n  const { isPointsExplorer, isDateSearch, isDreams } = pageType;\n  const { t } = useTranslation(['hotel-card', 'rate-name-cta', 'locations-page']);\n  const { country: guestLocationCountry, isLoading: isGuestLocationLoading } = useLocation();\n\n  //Disable hotel query if hotelInfo not passed\n  const isHotelQueryEnabled = !hotelInfo && !!selectedCtyhocn && !isGuestLocationLoading;\n\n  const { data, isLoading: isHotelDataLoading } = useHotelQuery(\n    {\n      language: 'en',\n      ctyhocn: selectedCtyhocn as string,\n      ratios: 'threeByTwo',\n      input: { guestLocationCountry },\n    },\n    { enabled: isHotelQueryEnabled }\n  );\n  const hotelData = (hotelInfo || data?.hotel) as HotelCardData;\n\n  const suppressBrandLogo = useIsAffiliateHotel(hotelData?.display);\n\n  const { isPartnerBrand } = useBrandDetails({\n    brandCode: hotelData?.brandCode,\n  });\n\n  const isIndividualRoomsOnly = isIndividualRoomLimitExceeded(\n    priceInfo?.statusCode,\n    queryParameters\n  );\n\n  const ctyhocn = hotelData?.ctyhocn;\n  const { isRenoHotel } = useRenovationChip(hotelData?.ctyhocn);\n  const isExternalResSystemSynix = hotelData?.externalResSystem === 'synxis';\n\n  let hotelRateInfo: HotelInfoAttributes = {};\n  if ((!!priceInfo && isDateSearch) || isPointsExplorer || isDateFlex)\n    hotelRateInfo = getMPAHotelRate({\n      numOfChildren,\n      usePoints: shouldUsePoints,\n      isDateFlex,\n      hasSpecialRate,\n      hotelData,\n      priceInfo,\n      t,\n      locale: router.locale ?? 'en',\n      pageType,\n      ctyhocn,\n      queryParameters,\n      selectedCurrency,\n      hasConnectingRooms,\n      isPointsExplorer,\n      currenciesError,\n      currenciesMap,\n      isIndividualRoomsOnly,\n    });\n  else if (isDreams) {\n    hotelRateInfo = getHotelLeadRateInfo({\n      hotelData,\n      locale: router.locale ?? 'en',\n      ctyhocn,\n      usePoints: shouldUsePoints,\n      selectedCurrency,\n      hasConnectingRooms,\n      currenciesError,\n      currenciesMap,\n      pageType,\n      t,\n      queryParameters,\n    });\n  }\n  const {\n    ctaHref,\n    ctaLabel,\n    ctaMessage,\n    customParams,\n    disclaimerMessages,\n    hotelName,\n    isNewHotel,\n    isSaleHotel,\n    messages,\n    tripAdvisorLocationSummary,\n  } = hotelRateInfo;\n\n  const transactionPropertyData = queryParameters?.datesFlex\n    ? undefined\n    : hotelInfo\n    ? getTransactionPropertyData({\n        currenciesError: !!currenciesError,\n        currenciesMap,\n        hotel: hotelInfo as HotelType,\n        isDateSearch: pageType.isDateSearch && !!priceInfo,\n        lengthOfStay: getLengthOfStay(queryParameters?.departureDate, queryParameters?.arrivalDate),\n        selectedCurrency: selectedCurrency || '',\n        priceInfo,\n        shouldUsePoints,\n      })\n    : undefined;\n\n  const badges: HotelBadgeTypes[] = [];\n  if (isSaleHotel) badges.push('sale');\n  if (isNewHotel) badges.push('new');\n  if (isRenoHotel) badges.push('recentlyRenovated');\n\n  const masterImage = additionalParams?.isHotelCard\n    ? hotelInfo?.images?.master || getNoPhotoAvailable('xs')[0]\n    : undefined;\n\n  const carouselImages =\n    !!additionalParams?.isHotelCard &&\n    hotelInfo?.images?.carousel &&\n    hotelInfo?.images?.carousel.length > 0\n      ? hotelInfo?.images?.carousel\n      : undefined;\n\n  const hotelUrl = hotelInfo?.facilityOverview?.homeUrlTemplate || '';\n\n  let isLoading = isHotelQueryEnabled && isHotelDataLoading;\n  if (isDateSearch && !isPointsExplorer && !isDateFlex) isLoading = isLoading || !priceInfo;\n\n  const customHotelInfoParams = {\n    ...customParams,\n    isPartnerBrand: isPartnerBrand || isExternalResSystemSynix,\n    ctyhocn: hotelInfo?.ctyhocn, //NHCSEARCH-5248\n    hotelName, //NHCSEARCH-5248\n  };\n\n  const amenities = hotelData?.amenityIds;\n\n  return {\n    amenities,\n    badges,\n    carouselImages,\n    ctaLabel: ctaLabel as RateMessage,\n    ctaHref,\n    ctaMessage,\n    customParams: customHotelInfoParams as { [key: string]: string | boolean },\n    hotelName,\n    hotelUrl,\n    isHotelDataLoading: isLoading,\n    masterImage,\n    tripAdvisorLocationSummary,\n    rateInfo: messages,\n    disclaimerMessages,\n    suppressBrandLogo,\n    transactionPropertyData,\n  };\n};\n","import type { HotelTripAdvisorLocation } from '@dx-ui/gql-types';\n\nimport { useTranslation } from 'next-i18next';\nimport Image from 'next/legacy/image';\nimport cx from 'classnames';\n\ntype TARating = Pick<\n  HotelTripAdvisorLocation,\n  'ratingFmt' | 'ratingImageUrl' | 'numReviews'\n> | null;\n\ntype TripAdvisorRatingProps = {\n  className?: string;\n  isLoadingState?: boolean;\n  showReviewCount?: boolean;\n  tripAdvisorLocationSummary?: TARating;\n  isCompare?: boolean;\n};\n\nexport const TripAdvisorRating = ({\n  isLoadingState,\n  showReviewCount = false,\n  tripAdvisorLocationSummary,\n  isCompare,\n}: TripAdvisorRatingProps) => {\n  const { t } = useTranslation('trip-advisor');\n\n  const numReviewsTxt = showReviewCount ? tripAdvisorLocationSummary?.numReviews : undefined;\n  const formattedRate = tripAdvisorLocationSummary?.ratingFmt;\n  const ratingImageUrl = tripAdvisorLocationSummary?.ratingImageUrl;\n  const formattedRateText = t('imgAlt', { rating: formattedRate });\n\n  if (isLoadingState) return <TripAdvisorShimmerState />;\n\n  return formattedRate ? (\n    <>\n      <div\n        className={cx({\n          'flex flex-col-reverse': isCompare,\n        })}\n      >\n        {ratingImageUrl ? (\n          <div\n            className={cx('relative -ml-1.5 h-4', {\n              'w-24': !isCompare,\n              'w-28': isCompare,\n            })}\n            data-testid=\"ta-rating-image\"\n          >\n            <Image\n              alt={formattedRateText}\n              aria-hidden\n              className=\"absolute inset-0 object-cover\"\n              layout=\"fill\"\n              src={ratingImageUrl}\n            />\n            <span className=\"sr-only\">{formattedRateText}</span>\n          </div>\n        ) : null}\n        <p\n          aria-hidden\n          className={cx({\n            'text-xs font-semibold': isCompare,\n            'text-sm font-bold': !isCompare,\n          })}\n        >\n          {t('ratingInfoWithLabel', { rating: formattedRate })}\n        </p>\n      </div>\n      {numReviewsTxt ? (\n        <div className=\"text-xs font-normal text-text-alt\">\n          <span>{t('basedOnReviews', { count: numReviewsTxt })}</span>\n        </div>\n      ) : null}\n    </>\n  ) : null;\n};\n\nconst TripAdvisorShimmerState = () => (\n  <div data-testid=\"trip-advisor-rating-shimmer\" className=\"flex flex-col\">\n    <div className=\"mb-1 h-4 w-16 animate-pulse bg-border-alt\" />\n    <div className=\"mb-1 h-4 w-16 animate-pulse bg-border-alt\" />\n    <div className=\"mb-1 h-4 w-16 animate-pulse bg-border-alt\" />\n  </div>\n);\n","import { Children, useRef, useMemo } from 'react';\nimport { useTranslation } from 'next-i18next';\nimport { ControlBack, ControlNext } from '@dx-ui/osc-controls';\nimport cx from 'classnames';\nimport { useEventListener, useResizeObserver, useIsClient } from 'usehooks-ts';\nimport { isRtl } from '@dx-ui/utilities-get-language-direction';\nimport { useRouter } from 'next/router';\n\nconst TIMEOUT = 500;\n\nexport type TaxonomyListProps = {\n  labelledBy: string;\n  testId?: string;\n  name: string;\n  listItemClassname?: string;\n  containerClassname?: string;\n};\n\nconst updateScrollDataAttributes = (scrollingRegion: HTMLUListElement) => {\n  if (!scrollingRegion) {\n    return;\n  }\n\n  const visibleWidth = scrollingRegion.clientWidth;\n  const maxScroll = scrollingRegion.scrollWidth - visibleWidth;\n  const scrollPosition = Math.abs(Math.round(scrollingRegion.scrollLeft));\n\n  scrollingRegion.setAttribute('data-at-start', scrollPosition <= 1 ? 'true' : 'false');\n\n  const endOfScrollingRegion = scrollPosition >= maxScroll - 1;\n  scrollingRegion.setAttribute('data-at-end', endOfScrollingRegion ? 'true' : 'false');\n};\n\nexport const TaxonomyList: React.FC<React.PropsWithChildren<TaxonomyListProps>> = ({\n  labelledBy,\n  name,\n  testId = 'taxonomy-list',\n  children,\n  listItemClassname,\n  containerClassname,\n}) => {\n  const { t } = useTranslation('osc-taxonomy-list');\n  const isClient = useIsClient();\n  const { locale = 'en' } = useRouter();\n  const rtl = isRtl(locale);\n\n  const arrayChildren = Children.toArray(children);\n\n  const scrollingRegionRef = useRef<React.ElementRef<'ul'>>(null);\n\n  const handleScrollClick = (direction: number) => {\n    const scrollingRegion = scrollingRegionRef.current;\n    if (!scrollingRegion) {\n      return;\n    }\n    const visibleWidth = scrollingRegionRef?.current?.clientWidth;\n    scrollingRegion.scrollLeft += visibleWidth * direction;\n    setTimeout(() => {\n      updateScrollDataAttributes(scrollingRegion);\n    }, TIMEOUT);\n  };\n\n  useEventListener(\n    'scroll',\n    (event) => updateScrollDataAttributes(event.target as HTMLUListElement),\n    scrollingRegionRef\n  );\n\n  const listSize = useResizeObserver({ ref: scrollingRegionRef, box: 'border-box' });\n\n  const isListScrollable = useMemo(() => {\n    const getScrollableList = (scrollingRegion: HTMLUListElement | null) => {\n      if (!scrollingRegion && !listSize) {\n        return false;\n      }\n\n      return listSize.width && scrollingRegion\n        ? scrollingRegion.scrollWidth > Math.round(listSize.width)\n        : false;\n    };\n\n    return getScrollableList(scrollingRegionRef?.current) || false;\n  }, [listSize]);\n\n  const shouldDisplayScrollableList = isListScrollable && isClient;\n\n  return (\n    <div className={cx('relative', containerClassname)}>\n      <ul\n        className={cx('peer flex overflow-x-auto py-3', {\n          'px-5 md:px-10 snap-proximity snap-x focus-visible:outline outline-[3px] outline-hilton motion-safe:scroll-smooth':\n            shouldDisplayScrollableList,\n        })}\n        ref={scrollingRegionRef}\n        tabIndex={0}\n        aria-labelledby={labelledBy}\n        data-testid={testId}\n        data-at-start={true}\n        data-at-end={false}\n      >\n        {Children.map(arrayChildren, (child, index) => (\n          // eslint-disable-next-line react/no-array-index-key\n          <li key={index} className={listItemClassname}>\n            {child}\n          </li>\n        ))}\n      </ul>\n      {shouldDisplayScrollableList ? (\n        <>\n          <ControlBack\n            className={cx(\n              'absolute start-0 top-1/2 flex h-full w-7 -translate-y-1/2 items-center justify-center rounded-none bg-white', // Add white background\n              'outline outline-[3px] outline-transparent focus:outline-hilton focus-visible:outline-hilton', // Ensure focus outline is visible\n              'after:absolute after:top-0 after:-z-1 after:h-full after:w-5 after:bg-gradient-to-r after:from-white after:to-transparent ltr:after:start-full rtl:after:end-full', // Gradient transitions from white to transparent and is behind the button\n              'peer-data-[at-start=true]:cursor-not-allowed peer-data-[at-start=true]:text-text-disabled peer-data-[at-start=true]:after:bg-none'\n            )}\n            onClick={() => handleScrollClick(rtl ? 1 : -1)}\n            label={t('previousSetOfItems', { itemName: name })}\n            data-direction={rtl ? 'forward' : 'backward'}\n            aria-disabled={scrollingRegionRef.current?.getAttribute('data-at-start') === 'true'}\n          />\n          <ControlNext\n            className={cx(\n              'absolute end-0 top-1/2 flex h-full w-7 -translate-y-1/2 items-center justify-center rounded-none bg-white', // Add white background\n              'outline outline-[3px] outline-transparent focus:outline-hilton focus-visible:outline-hilton', // Ensure focus outline is visible\n              'after:absolute after:top-0 after:-z-1 after:h-full after:w-5 after:bg-gradient-to-l after:from-white after:to-transparent ltr:after:end-full rtl:after:start-full', // Gradient transitions from white to transparent and is behind the button\n              'peer-data-[at-end=true]:cursor-not-allowed peer-data-[at-end=true]:text-text-disabled peer-data-[at-end=true]:after:bg-none'\n            )}\n            onClick={() => handleScrollClick(rtl ? -1 : 1)}\n            label={t('nextSetOfItems', { itemName: name })}\n            data-direction={rtl ? 'backward' : 'forward'}\n            aria-disabled={scrollingRegionRef.current?.getAttribute('data-at-end') === 'true'}\n          />\n        </>\n      ) : null}\n    </div>\n  );\n};\n\nexport default TaxonomyList;\n","export * from './taxonomy-list';\n","export * from './lib';\n","import * as React from 'react';\nimport * as RadixAccordion from '@radix-ui/react-accordion';\nimport { useTranslation } from 'next-i18next';\nimport cx from 'classnames';\nimport Icon from '@dx-ui/osc-icon';\nimport { getLanguageDirection } from '@dx-ui/utilities-get-language-direction';\nimport { useRouter } from 'next/router';\n\nexport type HeadingLevel = 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\nexport type Item = {\n  /**\n   * Content that will be displayed when the accordion is expanded\n   */\n  content: React.ReactNode;\n  /** Trigger text to display hidden content\n   *\n   * Defaults to “Open”\n   */\n  collapsedButtonLabel?: string | React.ReactNode;\n  /** Screen-reader only trigger text to display hidden content\n   */\n  collapsedButtonAccessibleLabel?: string;\n  /**\n   * Applies to Accordion when it is not expanded\n   */\n  collapsedClassName?: string;\n  /**\n   * Screen-reader only trigger text to hide displayed content\n   */\n  expandedButtonAccessibleLabel?: string;\n  /** Trigger text to hide displayed content\n   *\n   * Defaults to “Close”\n   */\n  expandedButtonLabel?: string | React.ReactNode;\n  /**\n   * Applies to Accordion when it is expanded\n   */\n  expandedClassName?: string;\n  /**\n   * Styles for the wrapper(div) of the accordion button\n   */\n  buttonWrapperClassName?: string;\n  /** A stable key to identify the accordion */\n  key: string;\n};\n\nexport type AccordionBase = {\n  /** Classes apply to trigger button\n   *\n   * To style accordion content, apply relevant classes directly to passed-in children\n   */\n  className?: string;\n  /** Accordion item including labels and content */\n  items: Item[];\n  /** Passed into `<section />` element that contains children\n   */\n  containerClassName?: string;\n  /**\n   * Optional heading level that should wrap the Accordion Trigger. Defaults to a span if undefined.\n   */\n  headingLevel?: HeadingLevel;\n  /**\n   * Controls the fill color for the indicator icon\n   */\n  iconIndicatorFillColor?: string;\n  /**\n   * Applies color when expanded\n   */\n  iconIndicatorExpandedFillColor?: string;\n  /**\n   * Controls whether children should be unmounted when accordion is collapsed\n   */\n  shouldUnmountChildrenWhenCollapsed?: boolean;\n  /**\n   * Controls accordion variant type, single or stacked.  Defaults to single.\n   *\n   * Single - only one accordion can be expanded at a time (other accordion items will collapse)\n   *\n   * Multiple - multiple accordion items can be expanded at the same time. (other accordion items will remain expanded)\n   */\n  variant?: 'single' | 'stacked';\n};\n\nexport type AccordionProps = AccordionBase & React.ComponentProps<typeof RadixAccordion.Root>;\n\nconst setInitialExpandedAccordions = (items: Item[], defaultValue?: string | string[]) => {\n  if (typeof defaultValue === 'string') {\n    const isExpanded = defaultValue === items[0]?.key;\n    return [isExpanded];\n  }\n  return Array.from({ length: items?.length }, (_, idx) => {\n    return Boolean(defaultValue?.includes(items?.[idx]?.key ?? ''));\n  });\n};\n/**\n *\n * An Accordion component based off of Radix UI's Accordion component. This component is used to display a list of items that can be expanded or collapsed to show or hide content. Root level component that rest props will pass to is <Accordion.Root />.\n * @see {@link Radix UI Accordion Documentation} https://www.radix-ui.com/primitives/docs/components/accordion\n */\nexport const Accordion = ({\n  className,\n  items,\n  containerClassName,\n  iconIndicatorFillColor,\n  iconIndicatorExpandedFillColor,\n\n  onValueChange,\n  variant = 'single',\n  shouldUnmountChildrenWhenCollapsed = false,\n  headingLevel,\n  ...rest\n}: AccordionProps) => {\n  const [uncontrolledExpandedAccordion, setUncontrolledExpandedAccordion] = React.useState(\n    setInitialExpandedAccordions(items, rest.defaultValue)\n  );\n\n  const isUncontrolledComponent = !rest?.value;\n\n  const { t } = useTranslation('osc-accordion');\n  const { locale = 'en' } = useRouter();\n  const languageDirection = getLanguageDirection(locale);\n\n  const isStackedAccordion = variant === 'stacked';\n  const handleIconType = isStackedAccordion ? 'arrowhead-down-circle' : 'arrowhead-small-down';\n  const iconSize = isStackedAccordion ? 'lg' : 'md';\n\n  /**\n   *\n   * Value can be string | string[] if `type` prop is `single` or `multiple` respectively.\n   */\n  const handleValueChange = (values: string | string[]) => {\n    if (typeof values === 'string') {\n      isUncontrolledComponent &&\n        setUncontrolledExpandedAccordion([!uncontrolledExpandedAccordion[0]]);\n      (onValueChange as (value: string) => void)?.(values);\n    } else {\n      isUncontrolledComponent &&\n        setUncontrolledExpandedAccordion(\n          uncontrolledExpandedAccordion.map((_, idx) => values.includes(items?.[idx]?.key ?? ''))\n        );\n      (onValueChange as (value: string[]) => void)?.(values);\n    }\n  };\n\n  if (!items?.length) return null;\n\n  return (\n    <RadixAccordion.Root\n      {...rest}\n      dir={languageDirection}\n      {...(rest.type === 'single' && { collapsible: true })}\n      onValueChange={handleValueChange}\n    >\n      {items.map((item, idx) => {\n        const isExpanded = isUncontrolledComponent\n          ? uncontrolledExpandedAccordion[idx]\n          : typeof rest?.value === 'string'\n          ? rest?.value === item.key\n          : !!rest?.value?.includes(item.key);\n\n        const buttonLabel = isExpanded\n          ? item?.expandedButtonLabel ?? t('close')\n          : item?.collapsedButtonLabel ?? t('open');\n\n        const accessibleButtonLabel = isExpanded\n          ? item?.expandedButtonAccessibleLabel\n          : item?.collapsedButtonAccessibleLabel;\n        const iconVariant = isStackedAccordion && isExpanded ? 'solid' : 'regular';\n        const shouldRenderChildren =\n          !isExpanded && shouldUnmountChildrenWhenCollapsed ? false : true;\n\n        return (\n          <RadixAccordion.Item\n            key={item.key}\n            value={item.key}\n            className={item.buttonWrapperClassName}\n            data-osc=\"accordion-item\"\n          >\n            <RadixAccordion.Header asChild={true}>\n              <TriggerWrapper as={headingLevel}>\n                <RadixAccordion.Trigger asChild>\n                  <button\n                    type=\"button\"\n                    className={cx('items-center', className, {\n                      [item?.expandedClassName as string]: isExpanded && !!item?.expandedClassName,\n                      [item?.collapsedClassName as string]:\n                        !isExpanded && !!item?.collapsedClassName,\n                    })}\n                    data-osc={`accordion-trigger-${item.key}`}\n                  >\n                    <span aria-hidden={Boolean(accessibleButtonLabel)}>{buttonLabel}</span>\n                    {accessibleButtonLabel ? (\n                      <span className=\"sr-only\">{accessibleButtonLabel}</span>\n                    ) : null}\n                    <span\n                      className={cx(\n                        'accordion-indicator-wrapper duration-150 ease-in-out motion-safe:transition',\n                        {\n                          '-rotate-180': isExpanded,\n                        }\n                      )}\n                      data-osc=\"accordion-indicator-wrapper\"\n                    >\n                      <Icon\n                        name={handleIconType}\n                        variant={iconVariant}\n                        size={iconSize}\n                        className={cx(iconIndicatorFillColor, {\n                          [iconIndicatorExpandedFillColor as string]:\n                            isExpanded && !!iconIndicatorExpandedFillColor,\n                        })}\n                      />\n                    </span>\n                  </button>\n                </RadixAccordion.Trigger>\n              </TriggerWrapper>\n            </RadixAccordion.Header>\n            <RadixAccordion.Content className={containerClassName} data-osc=\"accordion-panel\">\n              {shouldRenderChildren ? item.content : null}\n            </RadixAccordion.Content>\n          </RadixAccordion.Item>\n        );\n      })}\n    </RadixAccordion.Root>\n  );\n};\n\nfunction TriggerWrapper({\n  as: Wrapper = 'span',\n  children,\n  ...rest\n}: {\n  as?: HeadingLevel | 'span';\n  children: React.ReactNode;\n}) {\n  return <Wrapper {...rest}>{children}</Wrapper>;\n}\n\nexport default Accordion;\n","export * from './lib/accordion';\n"],"names":["presets","presetFilter","preset","includes","Chip","as","className","iconName","shouldInheritStyles","isIconTrailing","size","label","variant","rest","t","useTranslation","chipLabel","VARIANT_STYLES","Object","freeze","honors","general","marketing","neutral","PRESET_STYLES","featured","new","sale","package","recentlyRenovated","variantClassName","presetClassName","icon","span","data-testid","Icon","name","Element","cx","useNewChipVerbiageMVT","isLoaded","isMVTVariant","b","isVarB","c","isVarC","useGetMVTSelections","agentId","NEW_CHIP_VERBIAGE","MVTVariants","isProvisional","badges","newHotelChipMVTText","isNewlyBuiltMVTVar","HotelBadges","isClient","useIsClient","length","div","filter","badge","map","getMPAHotelRate","numOfChildren","usePoints","isDateFlex","hasSpecialRate","hotelData","priceInfo","locale","pageType","ctyhocn","queryParameters","selectedCurrency","hasConnectingRooms","isPointsExplorer","currenciesError","currenciesMap","isIndividualRoomsOnly","ctaMessage","isAdultsOnly","isOccupancyExceeded","hasConfidentialRate","rateMessage","hasRateChange","lengthOfStay","pointsAvailable","isDiamondRate","showDisplayFeeTransparencySubMsg","getMPARateInfo","Boolean","facilityOverview","allowAdultsOnly","ageBasedMessage","ageBasedPricing","undefined","hotelMinPoints","leadRate","hhonors","min","dailyRmPointsRateRoundFmt","hotelMaxPoints","max","pointsRange","status","summary","type","isResPreSell","preSellDateFmt","isNoResPreOpen","isPreOpen","preOpenDateFmt","getPreSellPreOpenInfo","display","openDate","resEnabledDate","resEnabled","href","generateCTAFunnelUrl","availStatus","host","env","HONORS_HOST","isDreams","shouldUsePoints","currencyCode","preOpenDate","lang","price","showAvgPricingMessage","totalRate","totalRateFmt","priceFmt","getCMAPrice","cmaTotalPriceIndicator","lowest","rateAmount","rateAmountFmt","amountAfterTax","amountAfterTaxFmt","convertedTotalRate","isLocalCurrencySameAsHotelCurrency","localization","formatAndConvertPrice","basePrice","currencyQueryError","fromCurrency","get","language","toCurrency","convertedPrice","comingSoonAndSoldOutCaption","comingSoonAndSoldOutMessage","getAvailabilityText","isPreSell","isSoldOut","numChildren","occupants","numAdults","toString","preOpenMsg","showPointsInfo","buttonLabel","getButtonLabels","isNoResEnabled","ctaLabel","text","screenReaderText","isPriceAvailable","isSaleHotel","ratePlan","attributes","isNewHotel","amenities","find","amenity","id","amenityIds","tripAdvisorLocationSummary","messages","message","toUpperCase","defaultRateCaption","defaultRateMessage","push","heading","minPoints","maxPoints","isCaption","suffix","getUsePointsRateInfoMessage","pointsText","points","prefix","infoIconOrPopup","align","isIcon","rateCaptionSuffix","getRateCaptionSuffix","hotelName","totalPrice","customParams","phoneNumber","contactInfo","isNotBookable","showCompare","disclaimerMessages","ctaHref","useRecentlyViewed","recentlyViewed","setRecentlyViewed","useLocalStorage","initializeWithValue","serializer","JSON","stringify","instance","expireDate","Date","getTime","REFRESH_TTL_2WEEK","showRecentlyViewedChip","results","chunkedMPA","reduce","hashData","chunk","idx","mayBeAvailableHashMap","MPAChunk","generateMayBeAvailableHashData","isError","hashMap","notifications","maxSize","ctyhocns","useShopMultiPropAvail","enabled","mpaConstraints","router","safeQueryParams","useWrappedRouter","guestInfo","isLoading","isAuthLoading","useAuth","country","guestLocationCountry","isGuestLocationLoading","useLocation","queryClient","useQueryClient","hotelsInBounds","useAppState","ctyhocnsToFetchPrice","keys","constraintsFromCache","useRef","isPastDate","invalidOfferId","hasPointsRateChange","isOfferNotAvailable","programAccountId","useSmbToggle","useEffect","current","getPageType","asPath","enableQuery","isBrowser","isReady","isSearch","datesFlex","input","generateShopMultiPropAvailInputVariables","smbProgramAccountId","initialHashedKeys","getHashedMPADataFromCache","useMemo","ctyhocnToFetchPricingFor","ctyhocnsToFetch","slice","arrayChunk","queryArr","generateMPAQueryArray","CHUNK_SIZE","useQueries","queries","hashedData","hasMPACallResolved","constraints","mayBeAvailableHashData","some","result","isFetching","hashedMPADataFromCache","getConstraintsFromCachedData","isSuccess","isShowing","onClose","onCloseProp","onContinue","onContinueProp","Dialog","isOpen","onDismiss","title","button","onClick","getRateDetails","isPriceFetching","shopAvailCalendar","rateInfo","statusCode","DEFAULT_LANGUAGE","defaultRateDetails","pointsAbbr","rateName","rateDate","hasNoPriceOrPoints","calendarAriaText","rateInfoUnavailable","priceOrPoints","checkHasNoPriceOrPoints","roomRate","dailyRmPointsRateFmt","getPriceOrPoints","getPointsAbbr","dailyRmPointsRate","getRateName","ratePlanName","getRateDate","startDate","arrivalDate","parseISO","endDate","departureDate","startMonthDay","toLocaleDateString","month","day","endMonthDay","getCalendarAriaText","MonthSlider","children","onMonthChange","monthYear","getMonthsYearDetails","currentDate","monthArray","eachMonthOfInterval","start","end","addYears","isSelected","isEqual","date","year","unabbreviatedMonthYear","Tabs","defaultActive","onTabChange","parseFloat","index","TabList","TabListButton","aria-label","aria-hidden","TabPanels","panelIndex","TabPanel","useGetFlexDatesInfo","data","shopAvailCalendarData","useHotel_ShopAvailCalendarQuery","displayCurrency","numRooms","specialRates","hotelPriceData","hotel","shopCalendarAvail","calendars","dailyPrice","forEach","FlexDatesDayPrice","isDateDisabled","hasPrice","PriceCalendar","React","endDay","maxDays","allowPrevious","passedMonth","onDayChange","onFocusedDayChange","isVisibleMonth","dayLabel","today","highlightedDates","passedHighlightedDates","enabledDates","passedEnabledDates","isPriceLoading","forwardedRef","startOfMonth","dateToString","d","isDate","parsedDate","split","parseInt","format","FORMAT","weeks","getDaysSplitByWeeks","week","useDaysOfWeek","formattedDate","useDateFormat","options","monthName","header","isKanji","numeric","monthId","ref","h2","aria-live","table","role","aria-labelledby","thead","tr","th","scope","weekday","tbody","w","i","tab0","isSameDay","isFirstDayOfMonth","disabled","isBefore","startOfDay","isAfter","addDays","inRange","isWithinInterval","highlighted","selectDay","isDisabled","td","group","isSameMonth","CalendarDay","onKeyDown","e","flag","key","subDays","startOfWeek","lastDayOfWeek","preventDefault","evt","clientX","clientY","onFocus","tabIndex","displayName","FlexDatesModalFooter","onCancel","isMobileDevice","useMediaQuery","bookUrl","getRoomsPageUrl","additionalQS","bookUriBuilder","page","urlParams","dates","rates","redeemPts","a","handleChooseRoomClick","target","rel","selectedDate","setSelectedDate","useState","selectedPriceDate","setSelectedPriceDate","handleMonthTabChange","currDate","addMonths","handleDaySelection","handleOnClose","bookFlexDatesPage","OHW_BASE_URL","monthTabIndex","ctaRateMessage","isExploreDatesTestLoaded","isExploreDatesVarA","isExploreDatesVarB","EXPLORE_DATES_CTA","isExploreDatesCTATest","NotBookableInfo","hasColumnLayout","p","INTERNATIONAL_BOOKING_NUMBER","ScreenReaderText","srText","InfoPopupOrIcon","infoText","InfoPopup","RateInfoText","isCompare","textType","textClassName","getRateInfoTextClassName","rateHeadingTestId","hasLeftIcon","RateMessage","RateInfoMessages","rateMessages","isHDPWithoutCTA","RateInfoCTAButton","customRateInfo","onHDPClick","onRateNameCTAClick","isHDP","btnTarget","useGetExploreDatesCTAMVT","isSMBContextSwitchingEnabled","useFeatureToggleConfig","isSMBContextSet","smbContext","useSMBContextLocalStorage","ctaClick","setCTAClick","isIneligibleHotel","isPartnerBrand","ctaClickForFlexDatesModal","setCTAClickForFlexDatesModal","isLocationsPage","btnHref","IneligibleHotelModal","onCloseIneligibleHotelModal","onContinueIneligibleHotelModal","window","open","FlexDatesModal","onCloseFlexDatesModal","UP_TO_LG_BUTTON_MAX_STRING_LENGTH","handleRateNameCTAClick","sendReward","GOALS","locationCTAClick","showFlexDatesModals","RateNameCTA","props","showOneColumn","RateNameCtaSkeleton","queryKey","ShopMultiPropAvailPointsDocument","ShopMultiPropAvailDocument","arr","placeholderData","keepPreviousData","retry","staleTime","arrayToChunk","chunkSize","splice","notification","subType","values","isOfferInvalid","offerNotAvailableCount","cacheDataVals","cachedData","pricing","rateChangeIndicator","checkPricingConstraints","room1","rooms","childAges","age","isTMTPTeamMember","isFriendsAndFamily","isOwner","isHGVOwner","isTPHMember","getGuestInfo","tmtpRates","teamMember","employeeRate","familyAndFriends","friendsAndFamilyRate","owner","ownerVIPRate","ownerHGV","ownerHGVRate","smbRates","smbRate","guestId","ratePlanCodes","specPlan","rateCategoryTokens","specialRateTokens","aaa","token","aarp","corporateId","corporateCode","governmentMilitary","groupCode","pnd","offerId","promoCode","senior","smb","travelAgent","travelAgentRate","getQueriesData","cacheEntry","normalizedCacheEntry","shopMultiPropAvail","normalizedData","cacheValue","useGetHotelInfo","hotelInfo","additionalParams","useCurrencyConversion","room","previous","selectedCtyhocn","isDateSearch","isHotelQueryEnabled","isHotelDataLoading","useHotelQuery","ratios","suppressBrandLogo","useIsAffiliateHotel","useBrandDetails","brandCode","isIndividualRoomLimitExceeded","isRenoHotel","useRenovationChip","isExternalResSystemSynix","externalResSystem","hotelRateInfo","getHotelLeadRateInfo","transactionPropertyData","getTransactionPropertyData","getLengthOfStay","masterImage","isHotelCard","images","master","getNoPhotoAvailable","carouselImages","carousel","hotelUrl","homeUrlTemplate","customHotelInfoParams","TripAdvisorRating","isLoadingState","showReviewCount","numReviewsTxt","numReviews","formattedRate","ratingFmt","ratingImageUrl","formattedRateText","rating","TripAdvisorShimmerState","Image","alt","layout","src","count","updateScrollDataAttributes","scrollingRegion","visibleWidth","maxScroll","scrollWidth","scrollPosition","Math","abs","round","scrollLeft","setAttribute","endOfScrollingRegion","TaxonomyList","labelledBy","testId","listItemClassname","containerClassname","useRouter","rtl","isRtl","arrayChildren","Children","toArray","scrollingRegionRef","handleScrollClick","clientWidth","direction","setTimeout","TIMEOUT","useEventListener","event","listSize","useResizeObserver","box","shouldDisplayScrollableList","getScrollableList","width","ul","data-at-start","data-at-end","child","li","ControlBack","itemName","data-direction","aria-disabled","getAttribute","ControlNext","setInitialExpandedAccordions","items","defaultValue","Array","from","_","Accordion","containerClassName","iconIndicatorFillColor","iconIndicatorExpandedFillColor","onValueChange","shouldUnmountChildrenWhenCollapsed","headingLevel","uncontrolledExpandedAccordion","setUncontrolledExpandedAccordion","isUncontrolledComponent","value","languageDirection","getLanguageDirection","isStackedAccordion","handleIconType","iconSize","RadixAccordion","dir","collapsible","handleValueChange","item","isExpanded","expandedButtonLabel","collapsedButtonLabel","accessibleButtonLabel","expandedButtonAccessibleLabel","collapsedButtonAccessibleLabel","iconVariant","shouldRenderChildren","buttonWrapperClassName","data-osc","asChild","TriggerWrapper","expandedClassName","collapsedClassName","content","Wrapper"],"sourceRoot":"","ignoreList":[]}