{"version":3,"file":"static/chunks/849-f72d2c37c59eb495.js","mappings":"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","sources":["webpack://_N_E/./components/hotel-card/utils/hotel-mpa-rate-utils.ts","webpack://_N_E/./hooks/use-recently-viewed.ts","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/./components/hotel-card/hotel-badges.tsx","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/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","webpack://_N_E/./components/hotel-card/hooks/use-get-poi-airport-info-mvt.ts"],"sourcesContent":["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 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 type { PresetChipTypes } from '@dx-ui/osc-chip';\nimport { Chip, presetFilter } from '@dx-ui/osc-chip';\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  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          return <Chip key={badge} data-testid=\"HotelBadge\" preset={badge} />;\n        })}\n    </div>\n  ) : null;\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 cx from 'classnames';\nimport { useTranslation } from 'next-i18next';\nimport { useMediaQuery } from 'usehooks-ts';\nimport { INTERNATIONAL_BOOKING_NUMBER, UP_TO_LG_BUTTON_MAX_STRING_LENGTH } 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';\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>{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,\n  ctaMessage,\n  customRateInfo,\n  onHDPClick,\n  onRateNameCTAClick,\n  isHDP,\n}: RateNameCTAProps) => {\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 showFlexDatesModals = ctaClickForFlexDatesModal && !isHDP;\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    onHDPClick?.();\n    if (!btnTarget) {\n      if (isIneligibleHotel) setCTAClick(!ctaClick);\n      else setCTAClickForFlexDatesModal(!ctaClickForFlexDatesModal);\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={showFlexDatesModals}\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            {ctaLabel?.text}\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-11 -translate-y-1/2 items-center justify-start rounded-none bg-gradient-to-r from-bg from-50% rtl:justify-end',\n              // Fake a disabled state for mouse users. Clicking the button at the start of the data won't do anything, but shouldn't be disabled for accessibility.\n              'peer-data-[at-start=true]:cursor-not-allowed peer-data-[at-start=true]:text-text-disabled peer-data-[at-start=true]:focus:!shadow-none'\n            )}\n            onClick={() => handleScrollClick(rtl ? 1 : -1)}\n            label={t('previousSetOfItems', { itemName: name })}\n            data-direction={rtl ? 'forward' : 'backward'}\n          />\n          <ControlNext\n            className={cx(\n              'absolute end-0 top-1/2 flex h-full w-11 -translate-y-1/2 items-center justify-end rounded-none bg-gradient-to-l from-bg from-50% rtl:justify-start',\n              // Fake a disabled state for mouse users. Clicking the button at the end of the data won't do anything, but shouldn't be disabled for accessibility.\n              'peer-data-[at-end=true]:cursor-not-allowed peer-data-[at-end=true]:text-text-disabled peer-data-[at-end=true]:focus:!shadow-none'\n            )}\n            onClick={() => handleScrollClick(rtl ? -1 : 1)}\n            label={t('nextSetOfItems', { itemName: name })}\n            data-direction={rtl ? 'backward' : 'forward'}\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","import { useGetMVTSelections } from '../../../hooks';\nimport { POI_AIRPORT_SHUTTLE_ON_HDP } from '../../../constants';\n\nexport const useGetPOIAirportInfoMVT = ({ enableTest }: { enableTest?: boolean }) => {\n  const {\n    isLoaded: isPOIAndAirportTestLoaded,\n    isMVTVariant: { b: isPOIAndAirportTabVarB, c: isPOIAndAirportTabVarC },\n  } = useGetMVTSelections({\n    agentId: POI_AIRPORT_SHUTTLE_ON_HDP.agentId,\n    MVTVariants: ['b', 'c'],\n    isProvisional: !!enableTest,\n  });\n  const isPOIAndAirportTab = isPOIAndAirportTestLoaded && isPOIAndAirportTabVarB;\n  const isAirportAndPOITab = isPOIAndAirportTestLoaded && isPOIAndAirportTabVarC;\n  const poiAndAirportTabOrder = isPOIAndAirportTab ? 1 : isAirportAndPOITab ? 2 : undefined;\n\n  return {\n    isPOIAndAirportTab,\n    isAirportAndPOITab,\n    poiAndAirportTabOrder,\n  };\n};\n"],"names":["getMPAHotelRate","numOfChildren","usePoints","isDateFlex","hasSpecialRate","hotelData","priceInfo","t","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","includes","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","className","length","rateCaptionSuffix","getRateCaptionSuffix","hotelName","name","totalPrice","customParams","phoneNumber","contactInfo","isNotBookable","showCompare","disclaimerMessages","ctaHref","useRecentlyViewed","recentlyViewed","setRecentlyViewed","useLocalStorage","initializeWithValue","serializer","JSON","stringify","instance","expireDate","Date","getTime","REFRESH_TTL_2WEEK","showRecentlyViewedChip","presets","presetFilter","preset","Chip","as","iconName","shouldInheritStyles","isIconTrailing","size","label","variant","rest","useTranslation","chipLabel","VARIANT_STYLES","Object","freeze","honors","general","marketing","neutral","PRESET_STYLES","featured","new","sale","package","recentlyRenovated","variantClassName","presetClassName","icon","span","data-testid","Icon","Element","cx","HotelBadges","badges","isClient","useIsClient","div","filter","badge","map","results","chunkedMPA","reduce","hashData","chunk","idx","mayBeAvailableHashMap","MPAChunk","isError","generateMayBeAvailableHashData","hashMap","notifications","maxSize","ctyhocns","useShopMultiPropAvail","enabled","mpaConstraints","router","safeQueryParams","useWrappedRouter","guestInfo","isLoading","isAuthLoading","useAuth","country","guestLocationCountry","isGuestLocationLoading","useLocation","queryClient","useQueryClient","hotelsInBounds","useAppState","ctyhocnsToFetchPrice","keys","sort","constraintsFromCache","useRef","isPastDate","invalidOfferId","hasPointsRateChange","isOfferNotAvailable","programAccountId","useSmbToggle","useEffect","current","getPageType","asPath","enableQuery","isBrowser","isReady","isSearch","datesFlex","input","generateShopMultiPropAvailInputVariables","smbProgramAccountId","initialHashedKeys","initialHashedShopMultiPropAvailDataFromCache","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","isDate","d","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","flag","e","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","priceDateAsString","bookFlexDatesPage","OHW_BASE_URL","monthTabIndex","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","isSMBContextSwitchingEnabled","useFeatureToggleConfig","isSMBContextSet","smbContext","useSMBContextLocalStorage","ctaClick","setCTAClick","isIneligibleHotel","isPartnerBrand","ctaClickForFlexDatesModal","setCTAClickForFlexDatesModal","isLocationsPage","btnHref","IneligibleHotelModal","onCloseIneligibleHotelModal","onContinueIneligibleHotelModal","window","open","FlexDatesModal","showFlexDatesModals","onCloseFlexDatesModal","UP_TO_LG_BUTTON_MAX_STRING_LENGTH","handleRateNameCTAClick","RateNameCTA","props","showOneColumn","RateNameCtaSkeleton","NotBookableInfo","queryKey","ShopMultiPropAvailPointsDocument","ShopMultiPropAvailDocument","arr","placeholderData","keepPreviousData","retry","staleTime","arrayToChunk","chunkSize","splice","notification","subType","values","isOfferInvalid","offerNotAvailableCount","cachedData","cacheDataVals","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","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","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","useGetPOIAirportInfoMVT","enableTest","isLoaded","isPOIAndAirportTestLoaded","isMVTVariant","b","isPOIAndAirportTabVarB","c","isPOIAndAirportTabVarC","useGetMVTSelections","agentId","POI_AIRPORT_SHUTTLE_ON_HDP","MVTVariants","isProvisional","isPOIAndAirportTab","isAirportAndPOITab","poiAndAirportTabOrder"],"sourceRoot":"","ignoreList":[]}