{"version":3,"file":"static/chunks/423-bb83968c40f9b9a6.js","mappings":"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","sources":["webpack://_N_E/./components/compare-hotels/hooks/use-get-compare-hotels.ts","webpack://_N_E/./components/compare-hotels/compare-skeleton.tsx","webpack://_N_E/./components/compare-hotels/compare-modal.tsx","webpack://_N_E/./components/compare-hotels/compare-bar.tsx","webpack://_N_E/./components/compare-hotels/compare-hotel-utils.ts","webpack://_N_E/./components/compare-hotels/compare-toggle.tsx","webpack://_N_E/./components/compare-hotels/feature-tool-tip.tsx","webpack://_N_E/./components/currency-converter/currency-converter.tsx","webpack://_N_E/./hooks/use-suggested-filters.ts","webpack://_N_E/./components/filters/suggested-filters.tsx","webpack://_N_E/./components/hotel-counter/hotel-counter.tsx","webpack://_N_E/./components/hotel-counter/index.ts","webpack://_N_E/./components/list-view/log-in-banner/log-in-banner.tsx","webpack://_N_E/./components/locations-page/locations-page.utils.ts","webpack://_N_E/./components/locations-page/locations-page-heading.tsx","webpack://_N_E/./components/hotel-search-result-summary/hotel-search-result-summary.tsx","webpack://_N_E/./components/info-message-banner/info-message-banner.tsx","webpack://_N_E/./components/list-view/list-view-utils/list-view-brand-banner.utils.ts","webpack://_N_E/./components/list-view/list-view-brand-banner/list-view-brand-banner.tsx","webpack://_N_E/./components/list-view/list-view-brand-banner/index.ts","webpack://_N_E/./components/age-based-modal/age-based-modal-utils.ts","webpack://_N_E/./components/age-based-modal/age-based-modal.tsx","webpack://_N_E/./components/age-based-modal/index.ts","webpack://_N_E/./components/list-view/list-view-utils/list-view.utils.ts","webpack://_N_E/./hooks/use-get-visible-in-bound-hotels.ts","webpack://_N_E/./components/carousel/carousel.tsx","webpack://_N_E/./components/hotel-card/why-property-mvt/why-property-skeleton.tsx","webpack://_N_E/./components/hotel-card/why-property-mvt/why-property.tsx","webpack://_N_E/./components/hotel-card/why-property-mvt/why-property-accordion.tsx","webpack://_N_E/./components/compare-hotels/compare-checkbox.tsx","webpack://_N_E/./components/hotel-card/key-hotel-amenity-info.tsx","webpack://_N_E/./components/hotel-card/hotel-card.tsx","webpack://_N_E/./components/hotel-card/hotel-card-cta-skeleton.tsx","webpack://_N_E/./components/hotel-card/hotel-card-skeleton.tsx","webpack://_N_E/./components/hotel-card/hotel-cards.tsx","webpack://_N_E/./components/list-view/list-view.tsx","webpack://_N_E/./components/map-list-toggle-button/map-list-toggle-button.tsx","webpack://_N_E/./components/zoom-in-for-pricing/zoom-in-for-pricing.tsx","webpack://_N_E/./components/zoom-in-for-pricing/index.ts","webpack://_N_E/./components/map/map.context.tsx","webpack://_N_E/./components/map/map.info-window.tsx","webpack://_N_E/./components/map/map.marker.tsx","webpack://_N_E/./components/map/map.static-marker.tsx","webpack://_N_E/./components/map/map.markers.tsx","webpack://_N_E/../../libs/osc/map/src/lib/info-window/map-info-window.tsx","webpack://_N_E/../../libs/osc/map/src/lib/info-window/index.ts","webpack://_N_E/../../libs/osc/map/src/lib/index.ts","webpack://_N_E/../../libs/osc/map/src/index.ts","webpack://_N_E/./components/map/map.markers.search.tsx","webpack://_N_E/./components/map/map.base.tsx","webpack://_N_E/./components/map/map.provider.tsx","webpack://_N_E/./components/map/map.tsx","webpack://_N_E/./components/map/map.markers.locations.tsx","webpack://_N_E/./components/map/map-block.tsx","webpack://_N_E/./components/sort-by-drop-down/dropdown-ui.tsx","webpack://_N_E/./components/sort-by-drop-down/sort-by-drop-down.tsx","webpack://_N_E/./components/sort-by-drop-down/index.ts","webpack://_N_E/./components/use-points/display-points-mvt/points-message.tsx","webpack://_N_E/./components/login-modal/login-modal.tsx","webpack://_N_E/./components/use-points/display-points-mvt/display-points.tsx","webpack://_N_E/./components/use-points/use-points.tsx","webpack://_N_E/./hooks/use-hotel-summary-options/utils/filter-state-country-brand-hashed-hotels.ts","webpack://_N_E/./hooks/use-hotel-summary-options/utils/generate-hotel-summary-options-query-array.ts","webpack://_N_E/./utils/get-bounds-nodes/get-bounds-nodes.ts","webpack://_N_E/./hooks/use-hotel-summary-options/use-quad-nodes.ts","webpack://_N_E/./hooks/use-hotel-summary-options/use-blob.ts","webpack://_N_E/./hooks/use-hotel-summary-options/use-hotel-summary-options.ts","webpack://_N_E/./hooks/use-vertical-space-MVT.ts","webpack://_N_E/../../libs/osc/pagination/src/lib/pagination.tsx","webpack://_N_E/../../libs/osc/pagination/src/index.ts","webpack://_N_E/../../libs/utilities/images/src/lib/get-aspect-ratio-url.ts","webpack://_N_E/../../libs/utilities/images/src/index.ts","webpack://_N_E/./components/map/map.module.css"],"sourcesContent":["import { keepPreviousData, useQueries } from '@tanstack/react-query';\nimport { HotelDocument } from '@dx-ui/queries-dx-shop-search-ui';\nimport type { HotelQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { getMPAHotelRate } from '../../hotel-card/utils/hotel-mpa-rate-utils';\nimport {\n  getHotelLeadRateInfo,\n  type HotelCardData,\n} from '../../hotel-card/utils/hotel-lead-rate-utils';\nimport { useAppState } from '../../../providers/app-provider';\nimport { useRenovationChip, useWrappedRouter } from '../../../hooks';\nimport { useCurrencyConversion } from '@dx-ui/osc-currency-converter';\nimport useShopMultiPropAvail from '../../../hooks/use-shop-multi-prop-avail/use-shop-multi-prop-avail';\nimport { useTranslation } from 'next-i18next';\nimport type { HotelBadgeTypes } from '../../hotel-card/hotel-badges';\nimport { getDistanceFromCenterFmt, type GoogleCoordinate } from '../../../utils';\nimport { getCompareImage, getParkingType, getRoomTypes } from '../compare-hotel-utils';\nimport type { HotelInfoAttributes } from '../../hotel-card/utils/hotel-info-utils';\nimport { isIndividualRoomLimitExceeded } from '../../hotel-card/utils/hotel-info-utils';\n\nexport const useGetCompareHotelsInfo = ({\n  ctyhocns,\n  centerCoordinate,\n  displayHotelCount = 0,\n  isEnabled,\n}: {\n  ctyhocns: string[];\n  centerCoordinate: GoogleCoordinate | null;\n  displayHotelCount?: number;\n  isEnabled?: boolean;\n}) => {\n  const {\n    hasConnectingRooms,\n    selectedCurrency = '',\n    shouldUsePoints = false,\n    pageType,\n    hasSpecialRate,\n  } = useAppState();\n  const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n  const isDateFlex = queryParameters?.datesFlex || false;\n  const { currenciesError, currenciesMap } = useCurrencyConversion();\n  const { t } = useTranslation(['hotel-card', 'rate-name-cta', 'locations-page', 'compare-hotels']);\n  const { isPointsExplorer, isDateSearch, isDreams } = pageType;\n  const numOfChildren =\n    queryParameters?.rooms\n      .map((room) => room.children)\n      .reduce((previous: number, current: number) => previous + current) || 0;\n\n  const hotelsQueryArr = ctyhocns.map((ctyhocn) => {\n    const variables = { language: 'en', ctyhocn, ratios: 'threeByTwo' };\n    return {\n      queryKey: [HotelDocument, variables],\n      placeholderData: keepPreviousData,\n      retry: 2,\n      staleTime: 1000 * 60 * 10,\n      enabled: isEnabled,\n    };\n  });\n  const results = useQueries({\n    queries: hotelsQueryArr,\n  });\n  const hotelData = results.map((hotel) => hotel.data as HotelQuery);\n  const { renoChipConfig } = useRenovationChip();\n\n  const { hashedData: priceInfoCollection, isLoading: isMPALoading } = useShopMultiPropAvail({\n    ctyhocns: ctyhocns.map((ctyhocn) => ctyhocn),\n    mpaConstraints: true,\n    enabled: router.asPath.includes('/search/'),\n  });\n  const hotelInfo = hotelData.map((hotelData) => {\n    const hotel = hotelData?.hotel;\n    const isRenoHotel = renoChipConfig.includes(hotel?.ctyhocn);\n    const currentHotelPriceInfo = hotel?.ctyhocn ? priceInfoCollection[hotel.ctyhocn] : undefined;\n    const isIndividualRoomsOnly = isIndividualRoomLimitExceeded(\n      currentHotelPriceInfo?.statusCode,\n      queryParameters\n    );\n    let hotelRateInfo: HotelInfoAttributes = {};\n    if ((!!priceInfoCollection && isDateSearch) || isPointsExplorer || isDateFlex) {\n      hotelRateInfo = getMPAHotelRate({\n        numOfChildren,\n        usePoints: shouldUsePoints,\n        isDateFlex,\n        hasSpecialRate,\n        hotelData: hotel as HotelCardData,\n        priceInfo: currentHotelPriceInfo,\n        t,\n        locale: router.locale ?? 'en',\n        pageType,\n        ctyhocn: hotel?.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: hotel as HotelCardData,\n        locale: router.locale ?? 'en',\n        ctyhocn: hotel?.ctyhocn,\n        usePoints: shouldUsePoints,\n        selectedCurrency,\n        hasConnectingRooms,\n        currenciesError,\n        currenciesMap,\n        pageType,\n        t,\n        queryParameters,\n      });\n    }\n\n    const badges: HotelBadgeTypes[] = [];\n    if (hotelRateInfo.isNewHotel) badges.push('new');\n    if (hotelRateInfo.isSaleHotel) badges.push('sale');\n    if (isRenoHotel) badges.push('recentlyRenovated');\n\n    const { distanceFmt: distance } = getDistanceFromCenterFmt(\n      t,\n      centerCoordinate,\n      hotel?.localization?.coordinate,\n      router.locale\n    );\n    const {\n      ctyhocn,\n      images,\n      name,\n      tripAdvisorLocationSummary,\n      parking,\n      amenities: hotelAmenities,\n      roomTypes,\n    } = hotelData?.hotel ?? {};\n    const parkingType = getParkingType(parking, t);\n    const rooms = getRoomTypes(roomTypes, t).slice(0, 3);\n    const masterImage = getCompareImage(images?.carousel?.[0]);\n    const { ctaHref, ctaLabel, messages } = hotelRateInfo ?? {};\n    const amenities = hotelAmenities\n      ?.filter((amenity) => !amenity.name.includes('parking'))\n      ?.slice(0, 4);\n\n    return {\n      ctyhocn,\n      name,\n      tripAdvisorLocationSummary,\n      amenities,\n      rooms,\n      badges,\n      distance,\n      parkingType,\n      masterImage,\n      ctaHref,\n      ctaLabel,\n      messages,\n    };\n  });\n  return {\n    isFetching: results.some((result) => result.isFetching),\n    isMPALoading,\n    hotelInfo: hotelInfo?.slice(0, displayHotelCount),\n  };\n};\n","export const CompareSkeleton = ({ numHotels }: { numHotels: number }) => (\n  <div className=\"flex w-full\">\n    {Array.from({ length: numHotels })\n      .fill('_')\n      .map((_, i) => (\n        <div\n          className=\"border-border grid size-full min-w-40 max-w-[336px] items-start border\"\n          // eslint-disable-next-line react/no-array-index-key\n          key={`compare-skeleton-${i}`}\n        >\n          {/* image */}\n          <div className=\"bg-bg-alt border-border h-48 w-full animate-pulse border-b\" />\n          {/* title */}\n          <div className=\"border-border w-full self-start border-b p-2\">\n            <div className=\"bg-bg-alt h-6  animate-pulse\" />\n          </div>\n          {/* trip advisor */}\n          <div className=\"border-border flex w-full flex-col justify-start gap-1 border-b p-2\">\n            <div className=\" bg-bg-alt h-3 w-32 animate-pulse\" />\n            <div className=\" bg-bg-alt h-6 w-28 animate-pulse\" />\n            <div className=\" bg-bg-alt h-3 w-32 animate-pulse\" />\n          </div>\n          {/* pricing */}\n          <div className=\"border-border flex w-full flex-col justify-start gap-1 border-b p-2\">\n            <div className=\" bg-bg-alt h-12 w-24 animate-pulse\" />\n            <div className=\" bg-bg-alt h-4 w-32 animate-pulse\" />\n          </div>\n          {/* parking */}\n          <div className=\"border-border flex w-full flex-col gap-1 self-start border-b p-2\">\n            <div className=\" bg-bg-alt h-6 w-32 animate-pulse\" />\n          </div>\n          {/* amenities */}\n          <div className=\"border-border flex w-full flex-col gap-1 self-start border-b p-2\">\n            <div className=\" bg-bg-alt h-6 w-32 animate-pulse\" />\n            <div className=\" bg-bg-alt h-6 w-32 animate-pulse\" />\n            <div className=\" bg-bg-alt h-6 w-32 animate-pulse\" />\n            <div className=\" bg-bg-alt h-6 w-32 animate-pulse\" />\n          </div>\n          {/* rooms */}\n          <div className=\"border-border flex w-full flex-col gap-1 self-start border-b p-2\">\n            <div className=\" bg-bg-alt h-4 w-32 animate-pulse\" />\n            <div className=\" bg-bg-alt h-6 w-32 animate-pulse\" />\n            <div className=\" bg-bg-alt h-6 w-32 animate-pulse\" />\n            <div className=\" bg-bg-alt h-6 w-32 animate-pulse\" />\n            <div className=\" bg-bg-alt h-6 w-32 animate-pulse\" />\n          </div>\n          {/* CTA */}\n          <div className=\"flex w-full flex-col items-center gap-1 p-2\">\n            <div className=\" bg-bg-alt h-10 w-full animate-pulse\" />\n            {numHotels > 2 ? <div className=\" bg-bg-alt h-6 w-1/2 animate-pulse\" /> : null}\n          </div>\n        </div>\n      ))}\n  </div>\n);\n","/* eslint-disable validate-jsx-nesting/no-invalid-jsx-nesting */\nimport { Dialog } from '@dx-ui/osc-dialog-v2';\nimport { useTranslation } from 'next-i18next';\nimport { useMediaQuery } from 'usehooks-ts';\nimport { useWrappedRouter } from '../../hooks';\nimport { getModalSize, MOBILE_COMPARE_LIMIT, TABLET_COMPARE_LIMIT } from './compare-hotel-utils';\n\nimport { useGetCompareHotelsInfo } from './hooks/use-get-compare-hotels';\nimport Image from 'next/image';\nimport { CompareSkeleton } from './compare-skeleton';\nimport { TripAdvisorRating } from '../trip-advisor/trip-advisor-rating';\nimport Icon from '@dx-ui/osc-icon';\nimport { RateInfoMessages } from '../rate-name-cta/rate-name-cta';\nimport { Link } from '@dx-ui/osc-link';\nimport { HotelBadges } from '../hotel-card/hotel-badges';\nimport type { GoogleCoordinate } from '../../utils';\nimport { useAppDispatch } from '../../providers/app-provider';\n\ntype CompareModalProps = {\n  centerCoordinate: GoogleCoordinate | null;\n  hotelsToCompare: string[];\n  isOpen: boolean;\n  onDismiss: () => void;\n  onStopCompare?: () => void;\n};\nexport const CompareModal = ({\n  hotelsToCompare,\n  isOpen,\n  onDismiss,\n  onStopCompare,\n  centerCoordinate,\n}: CompareModalProps) => {\n  const { t } = useTranslation('compare-hotels');\n  const {\n    router: { asPath },\n  } = useWrappedRouter();\n  const isDesktop = useMediaQuery('(min-width:1024px)');\n  const isMobile = useMediaQuery('(max-width:640px)');\n  const isTablet = useMediaQuery(`(max-width:1023px)`);\n\n  const dispatch = useAppDispatch();\n\n  const showRemoveCTA = hotelsToCompare.length > 2;\n\n  const modalSize = getModalSize({\n    isMobile,\n    isDesktop: isTablet || isDesktop,\n    compareCtyhocnsCount: hotelsToCompare?.length || 0,\n  });\n\n  const onRemoveHotel = (ctyhocnToRemove?: string) => {\n    if (ctyhocnToRemove) {\n      const newCtyhocnList = hotelsToCompare?.filter((hotel) => hotel !== ctyhocnToRemove);\n      dispatch({ type: 'SET_HOTELS_TO_COMPARE', payload: newCtyhocnList });\n    }\n  };\n  let displayHotelCount = hotelsToCompare?.length;\n\n  if (isMobile) displayHotelCount = MOBILE_COMPARE_LIMIT;\n  else if (isTablet)\n    displayHotelCount =\n      hotelsToCompare.length > TABLET_COMPARE_LIMIT ? TABLET_COMPARE_LIMIT : hotelsToCompare.length;\n\n  const { hotelInfo, isMPALoading, isFetching } = useGetCompareHotelsInfo({\n    ctyhocns: hotelsToCompare,\n    centerCoordinate,\n    displayHotelCount,\n    isEnabled: isOpen,\n  });\n\n  const handleOnDismiss = (\n    event: React.MouseEvent | React.KeyboardEvent,\n    isStopCompare?: boolean\n  ) => {\n    if (!!isStopCompare) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    onDismiss();\n  };\n\n  const handleStopComparing = (event: React.MouseEvent | React.KeyboardEvent) => {\n    if (hotelsToCompare.length) dispatch({ type: 'SET_HOTELS_TO_COMPARE', payload: [] });\n    if (onStopCompare) setTimeout(() => onStopCompare(), 50);\n    handleOnDismiss(event, true);\n  };\n\n  const stopComparingButton = () => (\n    <div className=\"bg-bg sticky -bottom-4 flex h-full items-center justify-center py-2\">\n      <button\n        className=\"btn-primary-link mt-2.5 text-sm\"\n        type=\"button\"\n        onClick={handleStopComparing}\n      >\n        {t('stopComparing')}\n      </button>\n    </div>\n  );\n\n  return (\n    <Dialog\n      bottomContent={stopComparingButton()}\n      isOpen={isOpen}\n      size={modalSize}\n      title={t('compare')}\n      onDismiss={handleOnDismiss as () => void}\n      dialogClassName=\"max-h-[90vh]\"\n      stickyHeader\n    >\n      {isFetching || isMPALoading ? (\n        <CompareSkeleton numHotels={hotelsToCompare.length} />\n      ) : (\n        <div className=\"flex flex-col overflow-auto\">\n          <table className=\"border-border-alt border\">\n            <tr>\n              {hotelInfo.map((data) => {\n                return (\n                  <td\n                    className=\"border-border-alt h-full border-2 p-0\"\n                    key={`${data?.ctyhocn}-image`}\n                  >\n                    <Image\n                      alt={data?.masterImage?.altText ?? ''}\n                      width={600}\n                      height={400}\n                      src={data?.masterImage?.url ?? ''}\n                      unoptimized={true}\n                      data-testid=\"carousel-image\"\n                    />\n                  </td>\n                );\n              })}\n            </tr>\n            <tr>\n              {hotelInfo.map((data) => {\n                return (\n                  <th\n                    className=\"border-border  border-2 p-2 text-left align-top text-sm font-bold\"\n                    key={data?.name}\n                    scope=\"col\"\n                  >\n                    {data?.name}\n\n                    {data?.badges ? <HotelBadges badges={data?.badges} /> : null}\n                    <span\n                      className=\"text-text-alt block whitespace-nowrap text-xs font-normal\"\n                      data-testid=\"distanceMarker\"\n                    >\n                      {data?.distance}\n                    </span>\n                  </th>\n                );\n              })}\n            </tr>\n            <tr>\n              {hotelInfo.map((data) => {\n                const tripAdvisorLocationSummary = data?.tripAdvisorLocationSummary;\n                return (\n                  <td\n                    className=\"border-border border-2 p-2\"\n                    key={tripAdvisorLocationSummary?.numReviews}\n                  >\n                    <TripAdvisorRating\n                      tripAdvisorLocationSummary={tripAdvisorLocationSummary}\n                      showReviewCount\n                      isCompare\n                    />\n                  </td>\n                );\n              })}\n            </tr>\n            <tr>\n              {hotelInfo.map((data) => {\n                return (\n                  <td className=\"border-border border-2 p-2\" key={`${data?.ctyhocn}-rate`}>\n                    <RateInfoMessages rateMessages={data?.messages} isCompare />\n                  </td>\n                );\n              })}\n            </tr>\n            <tr>\n              {hotelInfo.map((data) => {\n                return (\n                  <td\n                    className=\"border-border items-center gap-0.5 border-2 p-2 text-sm\"\n                    key={`${data?.ctyhocn}-parking`}\n                  >\n                    <div className=\"flex items-start sm:items-center\">\n                      <Icon name=\"parking\" />\n                      <span>{data?.parkingType}</span>\n                    </div>\n                  </td>\n                );\n              })}\n            </tr>\n            <tr>\n              {hotelInfo.map((data) => {\n                return (\n                  <td\n                    className=\"border-border items-center gap-0.5 border-2 p-2 text-sm\"\n                    key={`${data?.ctyhocn}-amenities`}\n                  >\n                    <ul className=\"grid grid-cols-1 text-sm\">\n                      {data?.amenities?.map((amenity) => (\n                        <li key={amenity.id} className=\"flex items-center gap-0.5\">\n                          <Icon name=\"check\" />\n                          <span> {amenity.name}</span>\n                        </li>\n                      ))}\n                    </ul>\n                  </td>\n                );\n              })}\n            </tr>\n            <tr>\n              {hotelInfo.map((data) => (\n                <td\n                  className=\"border-border items-center gap-0.5 border-2 p-2 text-sm\"\n                  key={`${data?.ctyhocn}-rooms`}\n                >\n                  <ul className=\"grid grid-cols-1 gap-1.5 text-sm font-bold\">\n                    <p>\n                      {t(\n                        asPath.includes('/locations/') ? 'roomTypesOffered' : 'roomTypesAvailable'\n                      )}\n                    </p>\n                    {data?.rooms?.map((room) => (\n                      <li\n                        key={room?.type}\n                        className=\"flex items-start gap-0.5 font-normal sm:items-center\"\n                      >\n                        <Icon name={room.icon} />\n                        <span> {room.type}</span>\n                      </li>\n                    ))}\n                  </ul>\n                </td>\n              ))}\n            </tr>\n            <tr>\n              {hotelInfo.map((data) => {\n                const ctaHref = data?.ctaHref;\n                const ctaLabel = data?.ctaLabel;\n                return (\n                  <td\n                    className=\"border-border items-center gap-0.5 border-2 p-2 text-sm\"\n                    key={ctaHref}\n                  >\n                    <div className=\"flex size-full flex-col justify-end gap-3 p-2 font-bold\">\n                      {ctaHref && ctaLabel ? (\n                        <Link\n                          url={ctaHref}\n                          className=\"btn-primary btn flex w-full justify-center no-underline\"\n                          target=\"_blank\"\n                          showNewWindowIcon={false}\n                        >\n                          {ctaLabel.text}\n                        </Link>\n                      ) : null}\n                      {showRemoveCTA ? (\n                        <button\n                          className=\"btn-primary-link hidden text-sm lg:block\"\n                          type=\"button\"\n                          onClick={() => onRemoveHotel(data?.ctyhocn)}\n                        >\n                          {t('remove')}\n                        </button>\n                      ) : null}\n                    </div>\n                  </td>\n                );\n              })}\n            </tr>\n          </table>\n        </div>\n      )}\n    </Dialog>\n  );\n};\n","import { useTranslation } from 'next-i18next';\nimport { InfoMessageBanner } from '../info-message-banner/info-message-banner';\nimport { useMediaQuery } from 'usehooks-ts';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport { GOALS } from '../../constants';\nimport { useState } from 'react';\nimport { DESKTOP_COMPARE_LIMIT, MOBILE_COMPARE_LIMIT } from './compare-hotel-utils';\nimport { CompareModal } from './compare-modal';\nimport type { GoogleCoordinate } from '../../utils';\n\ntype CompareBarProps = {\n  hotelsToCompare?: string[];\n  centerCoordinate: GoogleCoordinate | null;\n  onCompare?: () => void;\n  onStopCompare?: () => void;\n};\n\nexport const CompareBar = ({ onStopCompare, onCompare, centerCoordinate }: CompareBarProps) => {\n  const { t } = useTranslation('compare-hotels');\n  const isMobile = useMediaQuery('(max-width:640px)');\n  const [showCompareModal, setShowCompareModal] = useState<boolean>(false);\n  const { hotelsToCompare, compareHotelsToggle: showCompareBar } = useAppState();\n  const dispatch = useAppDispatch();\n\n  const selectHotelsBannerMessage = () => {\n    if (hotelsToCompare.length < 2) {\n      if (hotelsToCompare.length === 1) return t('selectOneMoreHotel');\n      return t('selectHotelsToStart');\n    }\n    return null;\n  };\n\n  const handleCompareHotels = () => {\n    if (onCompare) onCompare();\n    sendReward(GOALS.compareHotelsCTAClick);\n    setShowCompareModal(true);\n  };\n\n  const closeCompareModal = () => setShowCompareModal(false);\n\n  const handleStopComparing = () => {\n    if (hotelsToCompare.length) dispatch({ type: 'SET_HOTELS_TO_COMPARE', payload: [] });\n    closeCompareModal();\n    onStopCompare?.();\n  };\n\n  return showCompareBar && hotelsToCompare.length ? (\n    <>\n      <div\n        className=\"bg-bg-alt border-border sticky bottom-0 z-10 flex w-full flex-col items-center justify-between gap-3 border-t-2 p-4 md:flex-row\"\n        data-testId=\"compare-hotels-bar\"\n      >\n        {hotelsToCompare.length < 2 ? (\n          <InfoMessageBanner bannerClassName=\"bg-bg-alt gap-3 flex items-center pb-0 font-base\">\n            <span aria-live=\"assertive\"> {selectHotelsBannerMessage()} </span>\n          </InfoMessageBanner>\n        ) : (\n          <div aria-live=\"assertive\">\n            {t('numOfHotelsCompared', {\n              compareHotelsSelected: hotelsToCompare.length,\n              compareLimit: isMobile ? `${MOBILE_COMPARE_LIMIT}` : `${DESKTOP_COMPARE_LIMIT}`,\n            })}\n          </div>\n        )}\n        <div className=\"flex w-full flex-col-reverse gap-4  text-sm md:w-auto md:flex-row\">\n          {hotelsToCompare.length ? (\n            <button type=\"button\" onClick={handleStopComparing} className=\"btn-primary-link\">\n              {t('stopComparing')}\n            </button>\n          ) : null}\n          <button\n            type=\"button\"\n            className=\"btn-primary disabled:bg-text-disabled w-full rounded p-3 font-bold md:w-72 lg:w-[343px]\"\n            disabled={hotelsToCompare.length < 2}\n            onClick={handleCompareHotels}\n          >\n            {t('compareHotels')}\n          </button>\n        </div>\n      </div>\n      <CompareModal\n        centerCoordinate={centerCoordinate}\n        hotelsToCompare={[...hotelsToCompare]}\n        isOpen={showCompareModal}\n        onDismiss={closeCompareModal}\n        onStopCompare={onStopCompare}\n      />\n    </>\n  ) : null;\n};\n","import type { TFunction } from 'i18next';\nimport type {\n  HotelImageRatioName,\n  HotelImageVariantSize,\n  HotelQuery,\n  Maybe,\n} from '@dx-ui/queries-dx-shop-search-ui';\nimport { getAspectRatioUrl } from '@dx-ui/utilities-images';\nimport { getNoPhotoAvailable } from '../../utils';\nimport type { IconNames } from '@dx-ui/osc-icon';\n\nexport const MOBILE_COMPARE_LIMIT = 2;\nexport const TABLET_COMPARE_LIMIT = 3;\nexport const DESKTOP_COMPARE_LIMIT = 5;\n\nexport const getParkingType = (\n  parking: NonNullable<HotelQuery['hotel']>['parking'] | null | undefined,\n  t: TFunction<['hotel-card', 'rate-name-cta', 'locations-page', 'compare-hotels'], undefined>\n) => {\n  switch (true) {\n    case parking?.hasFreeParking:\n      return t('compare-hotels:freeParking');\n    case parking?.hasValetParking:\n      return t('compare-hotels:valetParking', {\n        price: parking?.valetParkingCharge?.chargeAmountFmt,\n      });\n    case parking?.hasSelfParking && !!parking?.selfParkingCharge?.chargeAmountFmt:\n      return t('compare-hotels:selfParking', {\n        price: parking?.selfParkingCharge?.chargeAmountFmt,\n      });\n    default:\n      return t('compare-hotels:noParking');\n  }\n};\n\nexport const getRoomTypes = (\n  rooms: NonNullable<HotelQuery['hotel']>['roomTypes'] | null | undefined,\n  t: TFunction<['hotel-card', 'rate-name-cta', 'locations-page', 'compare-hotels'], undefined>\n) => {\n  const types = new Set<string>();\n  rooms?.forEach((room) => {\n    if (room.suite) types.add(t('compare-hotels:suites'));\n    else if (room.features.some((feature) => feature.name === 'Connecting rooms'))\n      types.add(t('compare-hotels:connectedRooms'));\n    else if (room?.numBeds)\n      types.add(\n        t('compare-hotels:bedWithCount', {\n          count: room.numBeds,\n        })\n      );\n  });\n  const roomTypes: { type: string; icon: (typeof IconNames)[number] }[] = [];\n  types?.forEach((type) => {\n    if (type === t('compare-hotels:suites')) roomTypes.push({ type, icon: 'suites' });\n    else if (type === t('compare-hotels:connectedRooms'))\n      roomTypes.push({ type: t('compare-hotels:connectedRooms'), icon: 'connecting-rooms' });\n    else\n      roomTypes.push({\n        type,\n        icon: 'bed',\n      });\n  });\n  return roomTypes.sort((a, b) => a.type.localeCompare(b.type));\n};\nexport const getModalSize = ({\n  isMobile,\n  isDesktop,\n  compareCtyhocnsCount,\n}: {\n  isMobile: boolean;\n  isDesktop: boolean;\n  compareCtyhocns?: string[];\n  compareCtyhocnsCount: number;\n}) => {\n  switch (true) {\n    case isMobile:\n      return 'lg';\n    case isDesktop && compareCtyhocnsCount < 3:\n      return '2xl';\n    case isDesktop && compareCtyhocnsCount >= 4:\n      return 'container';\n    case isDesktop && compareCtyhocnsCount < 4:\n      return '5xl';\n    default:\n      return 'xl';\n  }\n};\n\ntype CompareImage = {\n  altText?: Maybe<string>;\n  ratios: Array<{ url?: Maybe<string>; size: HotelImageRatioName }>;\n  variants: Array<{ size: HotelImageVariantSize; url?: Maybe<string> }>;\n};\nexport const getCompareImage = (image?: CompareImage | null) => {\n  if (!!image?.ratios?.[0]) {\n    const { imgUrl } = getAspectRatioUrl({\n      src: image?.ratios?.[0]?.url,\n      width: 326,\n    });\n    return { url: imgUrl, altText: image?.altText };\n  }\n  const noPhoto = getNoPhotoAvailable('xs')?.[0]?.variants[0];\n  return { url: noPhoto?.url };\n};\n","import { useTranslation } from 'next-i18next';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport { COMPARE_ONBOARDING, GOALS } from '../../constants';\nimport { useGetMVTSelections, useWrappedRouter } from '../../hooks';\nimport { FeatureToolTip } from './feature-tool-tip';\nimport { useLocalStorage } from 'usehooks-ts';\nimport { useRef, useState } from 'react';\n\ntype CompareToggleProps = {\n  onChange?: () => void;\n};\n\nexport const CompareHotelsToggle = ({ onChange }: CompareToggleProps) => {\n  const { t } = useTranslation('compare-hotels');\n  const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n\n  const { compareHotelsToggle, hotelsToCompare } = useAppState();\n  const dispatch = useAppDispatch();\n\n  //NHCSEARCH-5449 | Compare Hotels Onboarding MVT\n  const toggleRef = useRef<HTMLInputElement>(null);\n  const {\n    isLoaded: isOnboardingMVTLoaded,\n    isMVTVariant: { b: isOnboardingVarB, c: isOnboardingVarC },\n  } = useGetMVTSelections({\n    agentId: COMPARE_ONBOARDING.agentId,\n    MVTVariants: ['b', 'c'],\n    isProvisional: router.locale === 'en',\n  });\n  const [isOnboarded, setIsOnboarded] = useLocalStorage('compare-hotels-onboarded', false);\n  const [isCompareToolTipOpen, setIsCompareToolTipOpen] = useState(true);\n  const handleToolTipClose = () => {\n    if (isOnboardingVarB) setIsOnboarded(true);\n    setIsCompareToolTipOpen(false);\n    if (toggleRef.current) toggleRef.current.focus();\n  };\n  const showCompareOnboardingToolTip = isOnboardingMVTLoaded && !isOnboarded;\n\n  const handleInputChange = () => {\n    if (onChange) onChange();\n    if (!compareHotelsToggle) sendReward(GOALS.compareHotelsToggleOn);\n    //when hotels to compare still selected and  toggle is set to false - remove previous selections\n    if (!compareHotelsToggle && hotelsToCompare.length)\n      dispatch({ type: 'SET_HOTELS_TO_COMPARE', payload: [] });\n    dispatch({ type: 'SET_COMPARE_HOTELS_TOGGLE', payload: !compareHotelsToggle });\n    if (isOnboardingVarB) setIsOnboarded(true);\n    setIsCompareToolTipOpen(false);\n  };\n  return !queryParameters?.datesFlex ? (\n    <div className=\"relative ml-1 mr-2 text-nowrap pt-5 rtl:mb-2\">\n      {/* NHCSEARCH-5449 | Compare Hotels Onboarding MVT */}\n      <FeatureToolTip\n        absolutePosition=\"-left-2 -top-10\"\n        tailPosition=\"left-6\"\n        message={t('newFeature')}\n        onDismiss={handleToolTipClose}\n        containerClass=\"w-[115px] py-3 pl-3 pr-4\"\n        shouldShowFeatureToolTip={\n          !!(showCompareOnboardingToolTip && isOnboardingVarB && isCompareToolTipOpen)\n        }\n      />\n      <FeatureToolTip\n        absolutePosition=\"[@media(max-width:422px)]:-right-24 [@media(min-width:423px)]:-right-48  [@media(min-width:588px)]:-right-2 [@media(min-width:768px)]:-right-44 [@media(min-width:876px)]:-right-2 [@media(min-width:1200px)]:left-0 -top-36\"\n        tailPosition=\"[@media(max-width:422px)]:left-1/3 [@media(min-width:423px & max-width:587px)]:left-28 [@media(min-width:588px)]:left-48 [@media(min-width:768px)]:left-6 [@media(min-width:876px)]:left-48 [@media(min-width:1124px)]:left-2 [@media(min-width:1201px)]:-translate-x-44\"\n        title={t('compareAndBook')}\n        message={t('compareKeyFeatures')}\n        onDismiss={handleToolTipClose}\n        cta={{ label: t('ok'), onClick: handleToolTipClose }}\n        containerClass=\"w-[343px] p-3\"\n        shouldShowFeatureToolTip={\n          !!(showCompareOnboardingToolTip && isOnboardingVarC && isCompareToolTipOpen)\n        }\n      />\n      <div className=\"flex\">\n        <label className=\"flex cursor-pointer items-center font-bold\">\n          <div className=\"relative mr-1 inline-flex\">\n            <input\n              className=\"peer sr-only\"\n              type=\"checkbox\"\n              onChange={handleInputChange}\n              ref={toggleRef}\n              checked={compareHotelsToggle}\n            />\n            <div className=\"peer-checked:bg-hilton peer-focus:ring-hilton peer-checked:after:border-bg after:border-bg-disabled after:bg-bg peer h-6 w-12 rounded-full bg-[#CFCFCF] ring-offset-1 after:absolute after:top-[2px] after:size-5 after:rounded-full after:border after:transition-all after:content-[''] peer-focus:outline-none peer-focus:ring-2 motion-reduce:transition-none ltr:after:left-[4px] peer-checked:ltr:after:translate-x-full rtl:after:right-[4px] peer-checked:rtl:after:-translate-x-full\" />\n          </div>\n          <span className=\"text-sm first-letter:capitalize rtl:pr-2\">{t('compareHotels')}</span>\n        </label>\n      </div>\n    </div>\n  ) : null;\n};\n","import { ControlClose } from '@dx-ui/osc-controls';\nimport { useTranslation } from 'next-i18next';\nimport cx from 'classnames';\nimport { useEffect, useRef } from 'react';\n\nexport const FeatureToolTip = ({\n  absolutePosition,\n  cta,\n  containerClass,\n  message,\n  onDismiss,\n  shouldShowFeatureToolTip,\n  tailPosition,\n  title,\n}: {\n  absolutePosition: string;\n  cta?: { label: string; onClick: () => void };\n  containerClass?: string;\n  message?: string;\n  onDismiss: () => void;\n  shouldShowFeatureToolTip: boolean;\n  tailPosition?: string;\n  title?: string;\n}) => {\n  const { t } = useTranslation('osc-dialog');\n  const ref = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (ref.current) ref.current.focus();\n  }, []);\n\n  useEffect(() => {\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        onDismiss?.();\n      }\n    };\n\n    document.addEventListener('keydown', handleKeyDown);\n\n    return () => {\n      document.removeEventListener('keydown', handleKeyDown);\n    };\n  }, [onDismiss]);\n\n  return shouldShowFeatureToolTip ? (\n    <div className={cx('absolute z-50', absolutePosition)} ref={ref} tabIndex={-1} role=\"tooltip\">\n      <div\n        className={cx(\n          'bg-tier-diamond text-bg relative flex flex-col gap-2 rounded text-base shadow-[0px_4px_4px_0px_rgba(0,0,0,0.40)]',\n          containerClass\n        )}\n      >\n        {title ? <div className=\"font-bold\">{title}</div> : null}\n        <div>{message}</div>\n        {cta?.label ? (\n          <button\n            type=\"button\"\n            onClick={cta.onClick}\n            className=\"border-bg self-start rounded-lg border px-4 py-2 text-sm\"\n          >\n            {cta.label}\n          </button>\n        ) : null}\n        <div\n          className={cx(\n            'border-t-tier-diamond absolute bottom-[-8px] size-0 border-x-8 border-t-8 border-transparent',\n            tailPosition\n          )}\n        />\n      </div>\n      {!cta?.label ? (\n        <ControlClose\n          size=\"xs\"\n          onClick={onDismiss}\n          className=\"text-bg absolute end-0.5 top-0.5\"\n          label={t('close')}\n        />\n      ) : null}\n    </div>\n  ) : null;\n};\n","/* eslint-disable jsx-a11y/no-onchange */\nimport type * as React from 'react';\nimport { useMetrics, useWrappedRouter } from '../../hooks';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport {\n  CurrencyConverter as OSCCurrencyConverter,\n  convert,\n  useCurrencyConversion,\n} from '@dx-ui/osc-currency-converter';\nimport { useFilterState } from '../../providers/filter-provider';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport { GOALS } from '../../constants';\n\ntype CurrencyConverterProps = {\n  onChange?: () => void;\n};\n\nexport const CurrencyConverter = ({ onChange }: CurrencyConverterProps) => {\n  const metrics = useMetrics();\n  const { router } = useWrappedRouter();\n  const dispatch = useAppDispatch();\n  const { selectedCurrency: currencyCode, pageType, selectedCurrency } = useAppState();\n  const activeFiltersState = useFilterState();\n\n  const { currenciesMap } = useCurrencyConversion();\n  async function handleChange(event: React.ChangeEvent<HTMLSelectElement>) {\n    const currency = event.target.value;\n\n    const fromCurrency = currenciesMap?.get(selectedCurrency || 'USD');\n    const toCurrency = currenciesMap?.get(currency || 'USD');\n    if (!fromCurrency || !toCurrency) {\n      return;\n    }\n    sendReward(GOALS.currencyEngagement);\n    const converted = convert(\n      activeFiltersState?.priceFilter?.[1],\n      fromCurrency,\n      toCurrency,\n      0,\n      ''\n    );\n    dispatch({\n      type: 'SET_DISPLAY_CURRENCY',\n      payload: {\n        currency,\n        ...(activeFiltersState?.priceFilter &&\n          converted.price && {\n            priceFilter: [activeFiltersState?.priceFilter?.[0], converted.price],\n          }),\n      },\n    });\n    onChange?.();\n    await metrics.trackCurrencyConverterClick({ currencyCode: currency || 'LOCAL' });\n  }\n\n  const selectProps = {\n    id: 'selectCurrencyConverter',\n    'data-testid': 'currencyConverterSelect',\n  };\n\n  if (pageType.isPointsExplorer) return null;\n\n  return (\n    <div className=\"w-36 items-center pl-2 text-sm md:w-64 rtl:pl-0 rtl:pr-2\">\n      <OSCCurrencyConverter\n        showDefaultOption={true}\n        language={router.locale as string}\n        onChange={handleChange}\n        selectedCurrency={currencyCode as string}\n        hasStackedDisplay={true}\n        selectProps={selectProps}\n      />\n    </div>\n  );\n};\n","import {\n  NUM_AMENITIES_SUGGESTIONS_WANTED,\n  HotelAttributeIds,\n  MAX_SUGGESTED_AMENITY_FILTERS_WITH_SALE_FILTER,\n} from '../components/filters/filter.constants';\nimport type { AmenityItem } from '../components/filters/suggested-filters';\nimport type { HotelAmenityId } from '@dx-ui/queries-dx-shop-search-ui';\nimport { useAppState } from '../providers/app-provider';\nimport type { HotelType } from '../providers/app-provider/app-provider.types';\nimport { useMemo } from 'react';\nimport { useFeatureToggleConfig } from './use-feature-toggle';\nimport type { Maybe } from '@dx-ui/gql-types';\nimport { useTranslation } from 'next-i18next';\nimport { HIGHEST_AMENITIES_SUGGESTED_FILTERS } from '../constants';\nimport { useGetMVTSelections } from './use-get-mvt-selections';\n\nconst findAmenity = (wantedAmenityId: string, amenities: AmenityItem[]) => {\n  const foundAmenity = amenities.find((amenity) => amenity.id === wantedAmenityId);\n  return (\n    foundAmenity || {\n      id: wantedAmenityId,\n      name: wantedAmenityId,\n    }\n  );\n};\n\nconst calculateSuggestedFilterCounts = ({\n  filtersList,\n  visibleHotels,\n  hotelsInBounds,\n}: {\n  filtersList?: string[];\n  visibleHotels: string[];\n  hotelsInBounds: Record<string, HotelType>;\n}) => {\n  return filtersList?.length\n    ? filtersList.reduce<{\n        isAtleastOneSuggestedFilter: boolean;\n        suggestedFilterCounts: { [key: string]: number };\n      }>(\n        (result, suggestedFilter) => {\n          const count = visibleHotels.reduce((count, hotel) => {\n            const inBoundsHotel = hotelsInBounds[hotel];\n            if (inBoundsHotel) {\n              return inBoundsHotel.amenityIds.includes(suggestedFilter as HotelAmenityId)\n                ? count + 1\n                : count;\n            }\n            return count;\n          }, 0);\n\n          return {\n            isAtleastOneSuggestedFilter: result.isAtleastOneSuggestedFilter || count > 0,\n            suggestedFilterCounts: {\n              ...result.suggestedFilterCounts,\n              [suggestedFilter]: count,\n            },\n          };\n        },\n        {\n          isAtleastOneSuggestedFilter: false,\n          suggestedFilterCounts: {},\n        }\n      )\n    : {\n        isAtleastOneSuggestedFilter: false,\n        suggestedFilterCounts: {},\n      };\n};\n\nconst calculateTopSuggestedFilters = (\n  suggestedFilterCounts: { [key: string]: number },\n  amenities: AmenityItem[],\n  maxSuggestedFilters: number\n) => {\n  const topSuggestedFilters: { [key: string]: AmenityItem } = {};\n\n  for (const suggestedFilter of Object.keys(suggestedFilterCounts)) {\n    const count = suggestedFilterCounts[suggestedFilter] ?? 0;\n\n    if (count > 0 && Object.keys(topSuggestedFilters)?.length < maxSuggestedFilters) {\n      topSuggestedFilters[suggestedFilter] = findAmenity(suggestedFilter, amenities);\n      const topFilter = topSuggestedFilters[suggestedFilter];\n      if (topFilter) topFilter.count = suggestedFilterCounts[suggestedFilter];\n    } else if (count > 0) {\n      const smallestCountKey = Object.keys(topSuggestedFilters).reduce((a, b) => {\n        const filterA = topSuggestedFilters[a];\n        const filterB = topSuggestedFilters[b];\n        if (filterA && filterB) {\n          const aCount = filterA.count || 0;\n          const bCount = filterB.count || 0;\n          return aCount < bCount ? a : b;\n        }\n        return a;\n      });\n\n      const smallestCount = topSuggestedFilters[smallestCountKey]?.count;\n\n      if (!smallestCount || count > smallestCount) {\n        delete topSuggestedFilters[smallestCountKey];\n        topSuggestedFilters[suggestedFilter] = findAmenity(suggestedFilter, amenities);\n        const topSuggestedFilter = topSuggestedFilters[suggestedFilter];\n        if (topSuggestedFilter) topSuggestedFilter.count = suggestedFilterCounts[suggestedFilter];\n      }\n    }\n  }\n  return topSuggestedFilters;\n};\n\nconst getSuggestedFiltersQuant = ({ hasSalesFilter }: { hasSalesFilter: boolean }) => {\n  if (hasSalesFilter) {\n    return MAX_SUGGESTED_AMENITY_FILTERS_WITH_SALE_FILTER;\n  } else {\n    return NUM_AMENITIES_SUGGESTIONS_WANTED;\n  }\n};\n//NHCSEARCH-5346\nconst HIGHEST_CONVERTING_AMENITIES = ['evCharging', 'freeParking', 'airportShuttle', 'petsAllowed'];\nconst CONGFIGURED_SUGGESTED_FILTERS = [\n  'dx-location::locality::us::ny::new-york-city',\n  'dx-location::locality::us::ca::los-angeles',\n  'dx-location::locality::us::fl::orlando',\n  'dx-location::locality::us::il::chicago',\n  'dx-location::locality::us::dc::washington-dc',\n  'dx-location::locality::us::nv::las-vegas',\n  'dx-location::locality::gb::london',\n  'dx-location::locality::us::ga::atlanta',\n  'dx-location::locality::us::ca::orange',\n  'dx-location::locality::us::ca::san-diego',\n  'dx-location::locality::us::tx::dallas',\n  'dx-location::locality::us::ma::boston',\n  'dx-location::locality::us::hi::honolulu',\n  'dx-location::locality::us::fl::ft-lauderdale',\n  'dx-location::locality::us::fl::miami',\n  'dx-location::locality::us::tn::nashville',\n  'dx-location::locality::mx::cancun',\n  'dx-location::locality::us::fl::tampa',\n  'dx-location::locality::us::tx::houston',\n  'dx-location::locality::us::az::phoenix',\n];\n\nexport const useSuggestedFilters = ({\n  visibleHotels,\n  amenities,\n  matchId,\n  saleFilter,\n}: {\n  visibleHotels: string[];\n  amenities: AmenityItem[];\n  matchId?: Maybe<string>;\n  saleFilter?: { showSaleFilter: boolean; saleFilterCount: number };\n}) => {\n  const { hotelsInBounds } = useAppState();\n  const { t } = useTranslation('filters');\n\n  const { isLoaded: isConducticsLoaded, isMVTVariant: isHighestConvertingAmenitiesVariant } =\n    useGetMVTSelections({ agentId: HIGHEST_AMENITIES_SUGGESTED_FILTERS.agentId });\n\n  const isHighestConvertingAmenitiesTest =\n    isConducticsLoaded && isHighestConvertingAmenitiesVariant.b;\n\n  const { config: defaultConfig, configFromRule } = useFeatureToggleConfig(\n    'config-rule-search-ui-suggested-filters',\n    { matchId: matchId || '' }\n  );\n\n  const suggestedSaleFilter = useMemo(\n    () =>\n      saleFilter?.showSaleFilter && visibleHotels.length <= 150\n        ? {\n            sale: {\n              id: HotelAttributeIds.sale,\n              name: t('saleRates'),\n              count: saleFilter?.saleFilterCount,\n            },\n          }\n        : null,\n    [saleFilter?.saleFilterCount, saleFilter?.showSaleFilter, t, visibleHotels.length]\n  );\n\n  const filtersList =\n    isHighestConvertingAmenitiesTest && matchId && !CONGFIGURED_SUGGESTED_FILTERS.includes(matchId)\n      ? HIGHEST_CONVERTING_AMENITIES\n      : (configFromRule || defaultConfig)?.suggestedFilters;\n\n  const maxSuggestedFilters = getSuggestedFiltersQuant({\n    hasSalesFilter: Boolean(suggestedSaleFilter),\n  });\n\n  // get the count of all filters in filtersList\n  const { isAtleastOneSuggestedFilter, suggestedFilterCounts } = useMemo(\n    () => calculateSuggestedFilterCounts({ filtersList, visibleHotels, hotelsInBounds }),\n    [filtersList, hotelsInBounds, visibleHotels]\n  );\n  // get only the top filters count while maintaining the order of filtersList\n  const suggestedFilters = useMemo(\n    () => calculateTopSuggestedFilters(suggestedFilterCounts, amenities, maxSuggestedFilters),\n\n    [suggestedFilterCounts, amenities, maxSuggestedFilters]\n  );\n\n  const topSuggestedFilters = suggestedSaleFilter\n    ? {\n        ...suggestedSaleFilter,\n        ...suggestedFilters,\n      }\n    : suggestedFilters;\n\n  return { topSuggestedFilters, isAtleastOneSuggestedFilter };\n};\n","import cx from 'classnames';\nimport { useTranslation } from 'next-i18next';\nimport { useFilterState } from '../../providers/filter-provider';\nimport type { HotelAmenityId, Maybe } from '@dx-ui/queries-dx-shop-search-ui';\nimport type { ActiveFiltersState } from './filter.constants';\nimport { useMetrics } from '../../hooks';\nimport { GOALS } from '../../constants';\nimport { useSuggestedFilters } from '../../hooks/use-suggested-filters';\nimport Icon, { AmenityIcons } from '@dx-ui/osc-icon';\nimport { HotelAttributeIds } from './filter.constants';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport { TaxonomyList } from '@dx-ui/osc-taxonomy-list';\nimport { useState } from 'react';\nimport { useVerticalSpaceMVT } from '../../hooks/use-vertical-space-MVT';\n\nexport type AmenityItem = {\n  id: string;\n  name: string;\n  hint?: string | null;\n  count?: number;\n};\ntype SuggestedFilterButtonsProps = {\n  amenities?: AmenityItem[];\n  isConductricsLoaded?: boolean;\n  isFindingHotels?: boolean;\n  onFilterCriteriaChange: (activeFiltersState: ActiveFiltersState) => void;\n  visibleHotels: string[];\n  matchId?: Maybe<string>;\n  saleFilter?: { showSaleFilter: boolean; saleFilterCount: number };\n};\n\ntype SuggestedFiltersAmenitiesProps = {\n  suggestedFilterOrderedList: AmenityItem[];\n  onFilterCriteriaChange: (activeFiltersState: ActiveFiltersState) => void;\n  showSaleFilter?: boolean;\n  suggestedFilterMVTVariant?: Record<string, boolean>;\n};\n\n/*\n * SuggestedFilterButtons\n * Displays the Suggested Filter Component\n */\nexport const SuggestedFilterButtons = ({\n  amenities = [],\n  isConductricsLoaded,\n  isFindingHotels,\n  onFilterCriteriaChange,\n  visibleHotels,\n  matchId,\n  saleFilter,\n}: SuggestedFilterButtonsProps) => {\n  const { isAtleastOneSuggestedFilter, topSuggestedFilters } = useSuggestedFilters({\n    visibleHotels,\n    amenities,\n    matchId,\n    saleFilter,\n  });\n  const suggestedFiltersOrderedList = Object.values(topSuggestedFilters);\n\n  const showSuggestedFilters = isAtleastOneSuggestedFilter || saleFilter?.showSaleFilter;\n\n  const { isSuggestedFiltersInHorizontalScroll } = useVerticalSpaceMVT();\n\n  if (showSuggestedFilters) {\n    if (isFindingHotels || !isConductricsLoaded || !amenities.length)\n      return <SuggestedFiltersShimmer shouldShowTitle={!isSuggestedFiltersInHorizontalScroll} />;\n    else if (isConductricsLoaded && !!visibleHotels.length)\n      return (\n        <>\n          {isSuggestedFiltersInHorizontalScroll ? null : <SuggestedFiltersTitle />}\n          <SuggestedFiltersAmenities\n            onFilterCriteriaChange={onFilterCriteriaChange}\n            suggestedFilterOrderedList={suggestedFiltersOrderedList}\n            showSaleFilter={saleFilter?.showSaleFilter}\n          />\n        </>\n      );\n  }\n  return null;\n};\n\n/*\n * SuggestedFiltersShimmer\n * Returns the Suggested Filters Shimmer State\n */\nconst SuggestedFiltersShimmer = ({ shouldShowTitle }: { shouldShowTitle?: boolean }) => (\n  <>\n    {shouldShowTitle ? (\n      <div className=\"flex\" data-testid=\"suggested-filters-shimmer\">\n        <div className=\"bg-bg-alt mb-4 h-6 w-32 animate-pulse\" />\n      </div>\n    ) : null}\n    <div\n      className={cx('flex h-32 gap-2 lg:h-16', {\n        '-mb-3 pt-3.5': !shouldShowTitle,\n      })}\n    >\n      <div className=\"bg-bg-alt mr-2 h-10 w-20 animate-pulse rounded-full lg:mr-1 lg:w-36\" />\n      <div className=\"bg-bg-alt mr-2 h-10 w-20 animate-pulse rounded-full lg:mr-1 lg:w-36\" />\n      <div className=\"bg-bg-alt mr-2 h-10 w-20 animate-pulse rounded-full lg:mr-1 lg:w-36\" />\n      <div className=\"bg-bg-alt mr-2 h-10 w-20 animate-pulse rounded-full lg:mr-1 lg:w-36\" />\n    </div>\n  </>\n);\n\n/*\n * Returns Suggest Filters Title\n */\nconst SuggestedFiltersTitle = () => {\n  const { t } = useTranslation('filters');\n  return (\n    <h2 className=\"label mr-1 flex items-start pb-1 font-semibold tracking-tight rtl:mx-0\">\n      {t('suggestedFiltersLabel')}\n    </h2>\n  );\n};\n\nconst SuggestedFiltersAmenities = ({\n  onFilterCriteriaChange,\n  suggestedFilterOrderedList,\n}: SuggestedFiltersAmenitiesProps) => {\n  const { t } = useTranslation('filters');\n  const activeFiltersState = useFilterState();\n\n  /* NHCSEARCH-5451 Vertical Space MVT */\n  const { isShorterSuggestedFilters, isSuggestedFiltersInHorizontalScroll } = useVerticalSpaceMVT();\n\n  const getTaxonomyListClassName = () => {\n    switch (true) {\n      case isShorterSuggestedFilters:\n        return '-mb-3';\n      case isSuggestedFiltersInHorizontalScroll:\n        return '-mb-3 pt-3.5';\n      default:\n        return undefined;\n    }\n  };\n  return (\n    <div className=\"pb-2\">\n      <TaxonomyList\n        labelledBy=\"suggestedFilters\"\n        testId=\"suggested-filters\"\n        name={t('suggestedFiltersLabel')}\n        listItemClassname={getTaxonomyListClassName()}\n      >\n        {suggestedFilterOrderedList?.map((amenity) => {\n          const amenityListCount = amenity?.count;\n          const amenitySelected =\n            activeFiltersState.amenityFilters.includes(amenity?.id ?? '') ||\n            activeFiltersState.attributeFilters.includes(amenity?.id);\n          return amenityListCount ? (\n            <SuggestedFilterButton\n              amenity={amenity}\n              amenityListCount={amenityListCount}\n              isAmenitySelected={amenitySelected}\n              onFilterCriteriaChange={onFilterCriteriaChange}\n            />\n          ) : null;\n        })}\n      </TaxonomyList>\n      <span aria-hidden=\"true\" className=\"sr-only\" id=\"suggestedFilters\">\n        {t('suggestedFiltersLabel')}\n      </span>\n    </div>\n  );\n};\nfunction SuggestedFilterButton({\n  amenity,\n  amenityListCount,\n  isAmenitySelected,\n  onFilterCriteriaChange,\n}: {\n  amenity: AmenityItem;\n  amenityListCount: number;\n  isAmenitySelected: boolean;\n  onFilterCriteriaChange: (activeFiltersState: ActiveFiltersState) => void;\n}) {\n  const [a11yText, setA11yText] = useState<string>('');\n  const [selectedAmenity, setSelectedAmenity] = useState('');\n  const { t } = useTranslation('filters');\n  const activeFiltersState = useFilterState();\n  const metrics = useMetrics();\n\n  /* NHCSEARCH-5451 Vertical Space MVT */\n  const { isShorterSuggestedFilters } = useVerticalSpaceMVT();\n\n  const resetSuggestedFilter = (amenityId: HotelAmenityId | typeof HotelAttributeIds.sale) => {\n    const attributeFilters = [...activeFiltersState.attributeFilters];\n    const attributeIndex = attributeFilters.indexOf(amenityId);\n    const amenityFilters = [...activeFiltersState.amenityFilters];\n    const amenityIndex = amenityFilters.indexOf(amenityId);\n\n    if (amenityId === HotelAttributeIds.sale) {\n      if (attributeIndex !== -1) attributeFilters.splice(attributeIndex, 1);\n      else attributeFilters.push(amenityId);\n    } else {\n      if (amenityIndex !== -1) amenityFilters.splice(amenityIndex, 1);\n      else amenityFilters.push(amenityId);\n    }\n\n    const updatedActiveFiltersState = {\n      ...activeFiltersState,\n      amenityFilters,\n      attributeFilters,\n    };\n\n    onFilterCriteriaChange(updatedActiveFiltersState);\n  };\n  const handleOnClick = async (\n    amenityId: HotelAmenityId | typeof HotelAttributeIds.sale,\n    amenitySelected: boolean\n  ) => {\n    setSelectedAmenity(amenityId);\n    const suggestedFiltersA11YText = amenitySelected\n      ? t('suggestedFiltersRemoved')\n      : t('suggestedFiltersApplied');\n    setA11yText(suggestedFiltersA11YText);\n\n    resetSuggestedFilter(amenityId);\n    sendReward(GOALS.suggestedFilterEngagement);\n    await metrics.trackSuggestedFilters(amenityId);\n\n    setTimeout(() => {\n      if (amenitySelected) setA11yText('');\n    }, 2000);\n  };\n\n  return (\n    <div className=\"h-10 px-1\" key={amenity.name}>\n      <button\n        type=\"button\"\n        name={`${amenity?.name}  (${amenityListCount})`}\n        aria-label={`${amenity?.name} ${amenityListCount} ${\n          selectedAmenity === amenity.id ? a11yText : ''\n        }`}\n        className={cx(\n          'btn btn-primary-outline focus:border-primary flex items-center rounded-full',\n          {\n            'text-bg bg-primary outline-none active:text-text-inverse focus:text-text-inverse hover:text-text-inverse':\n              isAmenitySelected,\n            'h-[26px] gap-x-1': isShorterSuggestedFilters,\n            'gap-x-2': !isShorterSuggestedFilters,\n          }\n        )}\n        onClick={() => handleOnClick(amenity?.id as HotelAmenityId, isAmenitySelected)}\n      >\n        <span>\n          <Icon\n            name={AmenityIcons[amenity.id as HotelAmenityId] || amenity.id}\n            size={isShorterSuggestedFilters ? 'xs' : 'md'}\n          />\n        </span>\n        <span\n          aria-hidden\n          className={cx({\n            'text-xs font-normal': isShorterSuggestedFilters,\n            'text-sm font-bold': !isShorterSuggestedFilters,\n          })}\n        >\n          <span>{`${amenity.name} (${amenityListCount})`}</span>\n        </span>\n      </button>\n      {a11yText && selectedAmenity === amenity.id ? (\n        <span aria-live=\"assertive\" className=\"sr-only -order-1\">\n          <span role=\"status\">{`${amenity?.name} ${a11yText}`} </span>\n        </span>\n      ) : null}\n    </div>\n  );\n}\n","import { useState, useEffect } from 'react';\nimport { useTranslation } from 'next-i18next';\nimport { MAX_PROPERTIES_PER_LIST_VIEW_PAGE } from '../../constants';\n\nexport type HotelCounterProps = {\n  count: number;\n  currentPageIndex: number;\n  customMessage?: string;\n  customSRMessage?: string;\n  isLoading: boolean;\n  isListVisible: boolean;\n};\n\nexport const HotelCounter = ({\n  count,\n  currentPageIndex,\n  isLoading,\n  customMessage,\n  customSRMessage,\n  isListVisible,\n}: HotelCounterProps) => {\n  const pageStart = currentPageIndex * MAX_PROPERTIES_PER_LIST_VIEW_PAGE + 1;\n  const pageEnd =\n    pageStart + MAX_PROPERTIES_PER_LIST_VIEW_PAGE - 1 < count\n      ? pageStart + MAX_PROPERTIES_PER_LIST_VIEW_PAGE - 1\n      : count;\n  const { t } = useTranslation('hotel-counter-text');\n\n  const message = customMessage\n    ? customMessage\n    : count > MAX_PROPERTIES_PER_LIST_VIEW_PAGE && isListVisible\n    ? t('hotelShowingWithPages', { count, pageStart, pageEnd })\n    : t('hotelShowingWithCount', { count });\n\n  const srMessage = customSRMessage\n    ? customSRMessage\n    : count === 0\n    ? t('notFoundMessage')\n    : message;\n  const [srCounter, setSrCounter] = useState(1);\n  useEffect(() => {\n    let interval: ReturnType<typeof setInterval>;\n    if (isLoading) {\n      interval = setInterval(() => setSrCounter(srCounter + 1), 3000);\n    } else {\n      setSrCounter(0);\n    }\n    return () => clearInterval(interval);\n  }, [isLoading, srCounter]);\n\n  return isLoading ? (\n    <div>\n      <h2\n        aria-hidden\n        className=\"text-sm font-semibold md:text-lg lg:text-xl\"\n        data-testid=\"findingHotels\"\n      >\n        {t('findingHotels')}\n      </h2>\n      <span aria-live=\"assertive\" className=\"sr-only\">\n        <span key={srCounter} role=\"status\">\n          {t('findingHotels')}\n        </span>\n      </span>\n    </div>\n  ) : (\n    <div>\n      <h2\n        className=\"mr-2 font-semibold md:mr-0 md:text-lg lg:text-xl \"\n        data-testid=\"numberOfHotelsShowing\"\n      >\n        <span aria-hidden=\"true\">{message} </span>\n      </h2>\n      <span aria-atomic=\"true\" aria-live=\"assertive\" className=\"sr-only -order-1\">\n        <span role=\"status\">{srMessage}</span>\n      </span>\n    </div>\n  );\n};\n","export * from './hotel-counter';\n","import { type LoginResponse, useAuth } from '@dx-ui/framework-auth-provider';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport { Dialog } from '@dx-ui/osc-dialog-v2';\nimport { LoginIFrame } from '@dx-ui/osc-login';\nimport { Trans, useTranslation } from 'next-i18next';\nimport { useCallback, useState } from 'react';\nimport { useIsClient } from 'usehooks-ts';\nimport { GOALS, env } from '../../../constants';\nimport { useWrappedRouter } from '../../../hooks';\nimport { generateSigninUrl } from '../../../utils';\nimport { InfoMessageBanner } from '../../info-message-banner/info-message-banner';\n\nexport const LogInBanner = () => {\n  const isClient = useIsClient();\n  const { t } = useTranslation('list-view');\n  const { router } = useWrappedRouter();\n  const { login, isAuthenticated } = useAuth();\n  const [showLoginModal, setShowLoginModal] = useState<boolean>(false);\n\n  const closeLoginModal = () => setShowLoginModal(false);\n  const openLoginModal = () => {\n    setShowLoginModal(true);\n    sendReward(GOALS.shopLoginClick);\n  };\n\n  const lang = router.locale as string;\n  const forgetInfoUrl = env.PARTNER_FORGET_INFO_LINK.replace('/__LANG__/', `/${lang}/`);\n  const options = {\n    showCreatePassword: false,\n    forgetInfoLink: { url: forgetInfoUrl },\n    secureInfoLink: { url: env.GLOBAL_PRIVACY_URL },\n    signInLink: { url: generateSigninUrl(router.asPath, lang) },\n  };\n\n  const onSignInAttempt = useCallback(\n    async (resp: LoginResponse) => {\n      if (resp?.data) {\n        await login(resp);\n        window.location.reload();\n      }\n    },\n    [login]\n  );\n  const handleLogin = async (resp: LoginResponse) => {\n    await onSignInAttempt?.(resp);\n    if (!resp.error) {\n      closeLoginModal();\n      sendReward(GOALS.shopHonorsLogin);\n    }\n  };\n\n  return isClient && !isAuthenticated ? (\n    <>\n      <InfoMessageBanner\n        bannerClassName=\"bg-tertiary\"\n        iconClassName=\"text-bg\"\n        iconName=\"star-burst\"\n      >\n        <div className=\"text-bg pl-2.5 pt-px font-bold\">\n          <Trans\n            ns=\"list-view\"\n            i18nKey=\"loginBanner.getExclusiveRates\"\n            components={{\n              SignInLink: (\n                <button onClick={openLoginModal} type=\"button\" className=\"font-normal underline\">\n                  signing in\n                </button>\n              ),\n            }}\n          />\n        </div>\n      </InfoMessageBanner>\n      <Dialog\n        isOpen={showLoginModal}\n        onDismiss={closeLoginModal}\n        size=\"md\"\n        title={t('loginBanner.signIn')}\n      >\n        <LoginIFrame\n          data-testid=\"loginIframe\"\n          frameSrc={generateSigninUrl(router?.asPath, lang)}\n          options={options}\n          onLoginAttempt={handleLogin}\n          onClose={closeLoginModal}\n          title={t('loginBanner.signIn')}\n        />\n      </Dialog>\n    </>\n  ) : null;\n};\n","// The <abbr> tags announces the Abbreviation of states on the screen readers\n// This function will return the non-abbrevated form from the end of the Title\n// e.g. \"Hotels in New York, [NY](New York)\" becomes \"New York\"\nexport const getTitleExpandedAbbreviation = (title: string) => {\n  if (title) return title.substring(title.indexOf('(') + 1, title.lastIndexOf(')'));\n};\n","import Markdown from 'markdown-to-jsx';\nimport * as React from 'react';\nimport { getTitleExpandedAbbreviation } from './locations-page.utils';\n\n// We're \"hijacking\" markdown's link syntax in order to create <abbr> tags\n// markdown-to-jsx doesn't handle spaces in the link's href, so we need to intercept the markdown and encode the href value\n// e.g. \"Hotels in New York, [NY](New York)\" becomes \"Hotels in New York, [NY](New%20York)\"\nconst sanitizeTitleMarkdown = (title: string) =>\n  title?.replace(\n    /\\[([^\\]]+)\\]\\(([^)]+)\\)/,\n    (_, abbreviation, expandedName) => `[${abbreviation}](${encodeURI(expandedName)})`\n  );\nexport const LocationsPageHeadingLevel1 = ({ title }: { title: string | null | undefined }) => {\n  const titleAbbreviationExpanded = title ? getTitleExpandedAbbreviation(title) : undefined;\n\n  return title ? (\n    <div className=\"mb-4 flex-1 text-left rtl:text-right\">\n      <h1 className=\"font-sans text-xl font-bold\">\n        <Markdown\n          options={{\n            createElement(type, props, children) {\n              if (type === 'a') {\n                const abbreviation = children;\n                const expandedName = decodeURI((props as { href: string }).href);\n                return React.createElement(\n                  'abbr',\n                  {\n                    title: expandedName,\n                    style: { textDecoration: 'none' },\n                    key: `abbr-${JSON.stringify(children)}`,\n                    'aria-hidden': true,\n                  },\n                  abbreviation\n                );\n              }\n              return React.createElement(type, props, children);\n            },\n          }}\n        >\n          {sanitizeTitleMarkdown(title || '')}\n        </Markdown>\n      </h1>\n      {titleAbbreviationExpanded && <span className=\"sr-only\">{titleAbbreviationExpanded}</span>}\n    </div>\n  ) : null;\n};\n","import type { AmenityItem } from '../filters/suggested-filters';\nimport { SuggestedFilterButtons } from '../filters/suggested-filters';\nimport { HotelCounter } from '../hotel-counter';\nimport { MapListToggleButton } from '../map-list-toggle-button/map-list-toggle-button';\nimport { useConfigRule } from '@dx-ui/framework-config-rule-provider';\nimport type { ActiveFiltersState } from '../filters/filter.constants';\nimport type { Maybe } from '@dx-ui/gql-types';\nimport { useAppState } from '../../providers/app-provider';\nimport { SMBProfileSwitcher } from '@dx-ui/osc-smb-profile-switcher';\nimport { useSmbToggle, useWrappedRouter } from '../../hooks';\nimport { LogInBanner } from '../list-view/log-in-banner/log-in-banner';\nimport { LocationsPageHeadingLevel1 } from '../locations-page/locations-page-heading';\nimport { useVerticalSpaceMVT } from '../../hooks/use-vertical-space-MVT';\n\nexport const HotelSearchResultSummaryPanel = ({\n  amenities,\n  customCounterMessage,\n  customCounterSRMessage,\n  hotelCount,\n  isFindingHotels,\n  isConductricsLoaded,\n  matchId,\n  onFilterChange,\n  saleFilter,\n  visibleHotels,\n  pageHeading1Title,\n  showingHotelDivRef,\n}: {\n  amenities?: AmenityItem[];\n  customCounterMessage?: string;\n  customCounterSRMessage?: string;\n  hotelCount: number;\n  isFindingHotels: boolean;\n  isConductricsLoaded: boolean;\n  matchId?: Maybe<string>;\n  onFilterChange?: (activeFiltersState: ActiveFiltersState) => void;\n  saleFilter?: { showSaleFilter: boolean; saleFilterCount: number };\n  visibleHotels: string[];\n  pageHeading1Title: string;\n  showingHotelDivRef?: React.Ref<HTMLDivElement>;\n}) => {\n  const { taggedConfig } = useConfigRule();\n  const configShowMap = taggedConfig?.config['showMap'] as boolean;\n  const { isListVisible, paginationIndex } = useAppState();\n  const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n\n  const { handleSMBSwitch, isSMBContextSwitchingEnabled } = useSmbToggle();\n  const smbChecked = queryParameters?.smbRate || false;\n\n  /* NHCSEARCH-5451 Vertical Space MVT */\n  const { isSuggestedFiltersInHorizontalScroll } = useVerticalSpaceMVT();\n\n  return (\n    <>\n      <div className=\"flex items-start justify-between\">\n        {router.asPath.includes('/locations/') ? (\n          <LocationsPageHeadingLevel1 title={pageHeading1Title} />\n        ) : (\n          <h1 className=\"mb-4 font-sans text-xl font-bold\">{pageHeading1Title}</h1>\n        )}\n        <MapListToggleButton showMapListToggleButton={configShowMap} className=\"md:hidden\" />\n      </div>\n      {isSMBContextSwitchingEnabled ? (\n        <SMBProfileSwitcher\n          className=\"mb-4\"\n          onInputChange={handleSMBSwitch}\n          isSmbChecked={smbChecked}\n        />\n      ) : null}\n      {isSuggestedFiltersInHorizontalScroll ? null : (\n        <SuggestedFilterButtons\n          amenities={amenities}\n          isConductricsLoaded={isConductricsLoaded}\n          isFindingHotels={isFindingHotels}\n          onFilterCriteriaChange={(activeFiltersState: ActiveFiltersState) => {\n            if (onFilterChange) onFilterChange(activeFiltersState);\n          }}\n          visibleHotels={visibleHotels}\n          matchId={matchId}\n          saleFilter={saleFilter}\n        />\n      )}\n      <LogInBanner />\n      <div\n        ref={showingHotelDivRef}\n        tabIndex={-1}\n        className=\"flex items-center justify-between pb-2\"\n      >\n        <HotelCounter\n          count={hotelCount}\n          customMessage={customCounterMessage}\n          customSRMessage={customCounterSRMessage}\n          currentPageIndex={paginationIndex}\n          isListVisible={isListVisible}\n          isLoading={isFindingHotels}\n        />\n      </div>\n    </>\n  );\n};\n","import type { IconNames } from '@dx-ui/osc-icon';\nimport Icon from '@dx-ui/osc-icon';\nimport cx from 'classnames';\n\nexport const InfoMessageBanner = ({\n  bannerClassName,\n  message,\n  children,\n  shouldCenterInfoIcon,\n  iconClassName,\n  iconName = 'info-circle',\n}: {\n  message?: string;\n  children?: React.ReactNode;\n  shouldCenterInfoIcon?: boolean;\n  bannerClassName?: string;\n  iconClassName?: string;\n  iconName?: (typeof IconNames)[number];\n}) => (\n  <h2\n    className={cx(\n      'mb-4 flex px-4 py-3 font-semibold leading-none',\n      {\n        'bg-bg-primary': !bannerClassName,\n      },\n      bannerClassName\n    )}\n  >\n    <div className={cx({ 'flex items-center': shouldCenterInfoIcon })}>\n      <Icon name={iconName} variant=\"regular\" size=\"sm\" className={iconClassName} />\n    </div>\n    <div className=\"flex flex-col\">\n      <span className=\"pl-2 text-base\">{message}</span>\n      {children}\n    </div>\n  </h2>\n);\n","import type { HotelType } from '../../../providers/app-provider/app-provider.types';\n\nexport const shouldDisplayBrandedHotels = (brandName: string | undefined): boolean => {\n  if (brandName !== 'hilton-honors') {\n    return true;\n  }\n  return false;\n};\n\nexport const getBrandedHotels = (\n  hotelPageCards: HotelType[],\n  brandCode: string | undefined,\n  brandName: string | undefined\n): HotelType[] =>\n  shouldDisplayBrandedHotels(brandName)\n    ? hotelPageCards.filter((hotel) => hotel.brandCode === brandCode)\n    : [];\n\nexport const getOtherHotels = (\n  hotelPageCards: HotelType[],\n  brandCode: string | undefined,\n  brandName: string | undefined\n): HotelType[] =>\n  shouldDisplayBrandedHotels(brandName)\n    ? hotelPageCards.filter((hotel) => hotel.brandCode !== brandCode)\n    : hotelPageCards;\n\n//link for no branded hotels found info banner that removes brand slug from uri\nexport const getInfoBannerURLWithBrandRemoved = ({\n  baseUrl,\n  path,\n  locale = 'en',\n  canonicalSlug = '',\n  altSlugs = [],\n  brandCode,\n}: {\n  baseUrl: string;\n  path: string;\n  locale?: string;\n  canonicalSlug?: string | null;\n  altSlugs?: string[];\n  brandCode?: string;\n}) => {\n  //remove brand filter param from URL\n  const newURL = path.replace(`&f-brandCodes=${brandCode}`, '');\n  //remove slug from URL\n  if (canonicalSlug && newURL.includes(canonicalSlug))\n    return encodeURI(`${baseUrl}${locale}${newURL.replace(`${canonicalSlug}/`, '')}`);\n  const slug = altSlugs?.find((slug) => newURL.includes(slug)) ?? '';\n  return encodeURI(`${baseUrl}${locale}${newURL.replace(`${slug}/`, '')}`);\n};\n","import { useBrandDetails, useWrappedRouter } from '../../../hooks';\nimport { useTranslation } from 'next-i18next';\nimport { useAppState } from '../../../providers/app-provider';\nimport { InfoMessageBanner } from '../../info-message-banner/info-message-banner';\nimport { Link } from '@dx-ui/osc-link';\nimport { env } from '../../../constants';\nimport { getInfoBannerURLWithBrandRemoved } from '../list-view-utils/list-view-brand-banner.utils';\n\nexport type ListViewBrandBannerProps = {\n  numBrandedHotels: number;\n  brandCode: string | undefined;\n  isDisplayBrandBanner?: boolean;\n  isPageBrandFilterEnabled?: boolean;\n  isEndOfResults?: boolean;\n};\n\nexport const ListViewBrandBanner = ({\n  numBrandedHotels,\n  brandCode,\n  isDisplayBrandBanner,\n  isPageBrandFilterEnabled,\n  isEndOfResults = false,\n}: ListViewBrandBannerProps) => {\n  const { pageType } = useAppState();\n  const brandInfo = useBrandDetails({ brandCode });\n  const { t } = useTranslation(['list-view-brand-banner', 'list-view']);\n  const { isGlobal: isGlobalPage } = pageType;\n  const {\n    router: { asPath, locale },\n  } = useWrappedRouter();\n\n  const atLeastOneBrandedHotel = numBrandedHotels > 0;\n\n  const infoBannerMessage = atLeastOneBrandedHotel\n    ? t('list-view-brand-banner:endOfBrandedHotelsResults', { brandName: brandInfo.name })\n    : t('list-view-brand-banner:couldNotFindHotelsInSearchArea', { brandName: brandInfo.name });\n\n  const linkWithoutBrandSlug = pageType.isBrand ? (\n    <Link\n      url={getInfoBannerURLWithBrandRemoved({\n        baseUrl: env.OHW_BASE_URL,\n        path: asPath,\n        locale,\n        canonicalSlug: brandInfo.canonicalSlug,\n        altSlugs: brandInfo.altSlugs,\n        brandCode,\n      })}\n      className=\"px-2 text-sm font-normal\"\n    >\n      {t('exploreOtherHotelsLink')}\n    </Link>\n  ) : null;\n\n  return isDisplayBrandBanner && isPageBrandFilterEnabled && isEndOfResults\n    ? ((!!brandInfo?.isHotelBrand && !!brandInfo?.hasHotels) || isGlobalPage) && (\n        <InfoMessageBanner message={infoBannerMessage}>{linkWithoutBrandSlug}</InfoMessageBanner>\n      )\n    : null;\n};\n","export * from './list-view-brand-banner';\n","import type { QueryParameters } from '../../constants';\n\nimport type { ShopMultiPropAvailPointsQuery } from '@dx-ui/queries-dx-shop-search-ui';\n\nexport const hasAgeBased = (\n  queryParameters?: QueryParameters,\n  pricing?: Record<string, ShopMultiPropAvailPointsQuery['shopMultiPropAvail'][0]>\n): boolean => {\n  if (queryParameters)\n    return Object.values(pricing || {}).filter((price) => price?.ageBasedPricing).length > 0;\n  return false;\n};\n\nexport const hasChildAges = (queryParameters?: QueryParameters): boolean =>\n  (queryParameters &&\n    queryParameters.rooms\n      .filter(({ children, childAges }) => {\n        if (children > 0) {\n          return (\n            childAges &&\n            typeof childAges !== 'number' &&\n            childAges.filter(({ age }) => typeof age !== 'undefined').length !== children\n          );\n        }\n        return false;\n      })\n      .filter(Boolean).length > 0) ||\n  false;\n\nexport const hasTMTPRatesSelected = (queryParameters: QueryParameters): boolean =>\n  queryParameters &&\n  (queryParameters.employeeRate ||\n    queryParameters.friendsAndFamilyRate ||\n    queryParameters.ownerVIPRate);\n","import type { MapLanguage, BrandCode, SortByValues, Child } from '@dx-ui/framework-uri-builder';\nimport { searchUriBuilder } from '@dx-ui/framework-uri-builder';\nimport { RoomsModal } from '@dx-ui/osc-rooms';\nimport { parseISO } from 'date-fns';\nimport isNumber from 'lodash/isNumber';\nimport { useTranslation } from 'next-i18next';\nimport * as React from 'react';\nimport type { QueryParameters } from '../../constants';\nimport type { ShopMultiPropAvailQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { useBrandDetails, useWrappedRouter } from '../../hooks';\nimport { getTARatingValue, getValidFilters, isPriceRangeValid } from '../filters/filter-utils';\nimport { hasAgeBased, hasChildAges, hasTMTPRatesSelected } from './age-based-modal-utils';\nimport { mapRatesToSearchUriBuilder } from '../osc-search-form/search-form.utils';\nimport { useAppState } from '../../providers/app-provider';\nimport type { FieldValues } from 'react-hook-form';\nimport { useFilterState } from '../../providers/filter-provider';\n\nconst AgeBasedModal = ({\n  isAgeBasedModalOpen,\n  setIsAgeBasedModalOpen,\n  pricing,\n}: {\n  isAgeBasedModalOpen: boolean;\n  setIsAgeBasedModalOpen: React.Dispatch<React.SetStateAction<boolean>>;\n  pricing?: Record<string, ShopMultiPropAvailQuery['shopMultiPropAvail'][0]>;\n}) => {\n  const { t } = useTranslation(['hotel-card', 'osc-shop-form-wrapper']);\n  const { hasConnectingRooms, selectedCurrency, sortType, shouldUsePoints } = useAppState();\n  const activeFiltersState = useFilterState();\n\n  const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n\n  const isAgeBased = hasAgeBased(queryParameters, pricing) && hasChildAges(queryParameters);\n\n  const { code: brandCode } = useBrandDetails({});\n\n  React.useEffect(() => {\n    if (isAgeBased) {\n      setIsAgeBasedModalOpen(isAgeBased);\n    }\n  }, [queryParameters, pricing, isAgeBased, setIsAgeBasedModalOpen]);\n\n  const roomInfo =\n    queryParameters &&\n    queryParameters.rooms.map((room) => ({\n      adults: room.adults,\n      kids: room.children,\n      childAges: room.childAges?.map(({ age }) => ({ age: isNumber(age) ? age : '' })),\n    }));\n\n  const handleRoomInfoSubmit = (data: FieldValues) => {\n    const roomInfo = data?.rooms?.map((room: { adults: number; children: Child[] }) => ({\n      adults: room?.adults,\n      children: room?.children,\n    }));\n\n    const path =\n      window.location.pathname.split('/').includes('go-hilton') ||\n      hasTMTPRatesSelected(queryParameters as QueryParameters)\n        ? 'go-hilton'\n        : 'search';\n\n    if (queryParameters) {\n      const { offerId, pnd, specPlan, fromId, travelAgentId, requestedRatesOnly } = queryParameters;\n\n      const url = searchUriBuilder({\n        brandCode: brandCode as keyof BrandCode,\n        locale: router.locale as MapLanguage,\n        urlParams: {\n          content: queryParameters?.content,\n          dates: {\n            arrivalDate: parseISO(queryParameters.arrivalDate),\n            departureDate: parseISO(queryParameters.departureDate),\n            flexibleDates: queryParameters.datesFlex,\n          },\n          placeId: queryParameters.placeId,\n          query: queryParameters.query,\n          sortBy: sortType as SortByValues,\n          f_amenityIds: getValidFilters(activeFiltersState?.amenityFilters),\n          f_brandCodes: getValidFilters(activeFiltersState?.brandFilters),\n          f_price: isPriceRangeValid(activeFiltersState?.priceFilter)\n            ? activeFiltersState?.priceFilter\n            : undefined,\n          f_tripAdvisorRatings: getTARatingValue(activeFiltersState?.ratingsFilter),\n          availableHotelsOnly: activeFiltersState?.showAvailableHotels,\n          rates: {\n            ...mapRatesToSearchUriBuilder(queryParameters, shouldUsePoints),\n            ...(offerId ? { offerId } : {}),\n            ...(pnd ? { pnd } : {}),\n            ...(specPlan ? { spec_plan: specPlan.join(',') } : {}),\n            ...(fromId ? { fromId } : {}),\n            ...(travelAgentId ? { travelAgentId } : {}),\n            ...(requestedRatesOnly ? { requestedRatesOnly } : {}),\n          },\n          numRooms: roomInfo?.length || 1,\n          rooms: roomInfo,\n          sessionToken: queryParameters.sessionToken,\n          specialRateTokens: queryParameters.specialRateTokens,\n          displayCurrency: selectedCurrency || '',\n          adjoiningRoomStay: hasConnectingRooms,\n          maxPoints: queryParameters.maxPoints,\n        },\n        path,\n        relative: true,\n      });\n\n      window.location.href = url;\n    }\n  };\n\n  return isAgeBasedModalOpen ? (\n    <RoomsModal\n      ageRange={{ min: 0, max: 18 }}\n      agesRequired\n      ariaLabel={t('hotel-card:roomModalAria')}\n      isOpen\n      occupancyLimitMessage={t('osc-shop-form-wrapper:maxGuestsSingleRoom')}\n      onSubmit={handleRoomInfoSubmit}\n      useFormProps={{\n        defaultValues: {\n          rooms: roomInfo?.map((room) => ({\n            adults: room.adults,\n            children: room.childAges.map((child) => ({\n              age: child?.age,\n            })),\n          })),\n        },\n      }}\n    />\n  ) : null;\n};\n\nexport { AgeBasedModal };\n","export * from './age-based-modal';\n","export const setFocusOnFirstListViewCard = (\n  ulContainerRef: React.MutableRefObject<HTMLDivElement | null>\n) => {\n  const firstHotelCardItem = ulContainerRef?.current?.querySelector('li');\n  if (firstHotelCardItem) {\n    firstHotelCardItem.setAttribute('tabindex', '0');\n    firstHotelCardItem.focus();\n  }\n};\n","import { useMemo } from 'react';\nimport type { HotelType } from '../providers/app-provider/app-provider.types';\nimport {\n  getBrandedHotels,\n  getOtherHotels,\n} from '../components/list-view/list-view-utils/list-view-brand-banner.utils';\n\ntype GetVisibleInBoundHotelsProps = {\n  currentPageVisibleHotels: HotelType[];\n  brandCode: string | undefined;\n  brandName: string | undefined;\n};\n\nexport const useGetVisibleInBoundHotels = ({\n  currentPageVisibleHotels,\n  brandCode,\n  brandName,\n}: GetVisibleInBoundHotelsProps) => {\n  const brandedVisibleHotels = useMemo(\n    () => getBrandedHotels(currentPageVisibleHotels, brandCode, brandName),\n    [currentPageVisibleHotels, brandCode, brandName]\n  );\n\n  const otherVisibleHotels = useMemo(\n    () => getOtherHotels(currentPageVisibleHotels, brandCode, brandName),\n    [currentPageVisibleHotels, brandCode, brandName]\n  );\n\n  return { brandedVisibleHotels, otherVisibleHotels };\n};\n","/* eslint-disable react/display-name */\nimport * as React from 'react';\n\nimport type { HotelImageRatio, Maybe } from '@dx-ui/queries-dx-shop-search-ui';\nimport { CarouselSingle } from '@dx-ui/osc-carousel';\nimport { getAspectRatioUrl } from '@dx-ui/utilities-images';\nimport { useRect } from '@dx-ui/utilities-use-rect';\nimport { env } from '../../constants';\nimport { useTranslation } from 'next-i18next';\n\nexport type IHotelImagesVariants =\n  | {\n      altText?: string | null;\n      size?: 'xs' | 'sm' | 'md';\n      ratios?: Maybe<Pick<HotelImageRatio, 'url' | 'size'>[]> | undefined;\n    }\n  | undefined;\n\ntype ICarousel = {\n  images?: IHotelImagesVariants[];\n  isLoading?: boolean;\n} & React.HTMLAttributes<HTMLDivElement>;\n\nconst Carousel = ({ images, isLoading }: ICarousel) => {\n  const carouselRef = React.useRef<HTMLDivElement | null>(null);\n  const rect = useRect({ ref: carouselRef });\n\n  const { t } = useTranslation(['osc-carousel']);\n  const noPhotoImageUrl = `${env.HILTON_ASSETS_URI}/modules/assets/img/common/no-photo-available.png`;\n  const carouselImages = images\n    ?.map((props) => {\n      const { imgUrl } = getAspectRatioUrl({\n        src: props?.ratios?.[0]?.url,\n        width: rect?.width ?? 0,\n      });\n      const src = props?.ratios?.[0]?.url ? imgUrl : null;\n      return { alt: props?.altText || t('noPhotoAvailable'), url: src || noPhotoImageUrl };\n    })\n    .filter((image) => image.url);\n  return carouselImages && carouselImages?.length >= 1 ? (\n    <div ref={carouselRef}>\n      <CarouselSingle\n        data-testid=\"imageCarousel\"\n        images={carouselImages || []}\n        isLoading={isLoading}\n      />\n    </div>\n  ) : null;\n};\n\nexport default Carousel;\n","export const WhyPropertySkeleton = ({ variants }: { variants: Record<string, boolean> }) => {\n  return (\n    <div className=\"h-40 w-full\">\n      <div className=\"bg-bg-alt my-2 h-5 w-32 animate-pulse\" />\n\n      {variants?.b ? (\n        <>\n          <div className=\"bg-bg-alt my-2 h-5 w-full animate-pulse\" />\n          <div className=\"bg-bg-alt my-2 h-5 w-full animate-pulse\" />\n        </>\n      ) : null}\n      {variants?.c ? (\n        <div className=\" flex flex-wrap gap-2\">\n          <div className=\"bg-bg-alt my-2 h-5 w-36 animate-pulse\" />\n          <div className=\"bg-bg-alt my-2 h-5 w-36 animate-pulse\" />\n          <div className=\"bg-bg-alt my-2 h-5 w-36 animate-pulse\" />\n        </div>\n      ) : null}\n      <div className=\"bg-bg-alt my-2 h-5 w-32 animate-pulse\" />\n      <div className=\" flex flex-wrap gap-2\">\n        {Array(6)\n          .fill(null)\n          .map(() => (\n            <div key={crypto.randomUUID()} className=\"bg-bg-alt h-5 w-28 animate-pulse\" />\n          ))}\n      </div>\n    </div>\n  );\n};\n","import Icon from '@dx-ui/osc-icon';\nimport { useHotelQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { useTranslation } from 'next-i18next';\nimport type { DISTANCE_UNITS } from './constants/distance-units';\nimport type { HotelDistanceUnit, Maybe } from '@dx-ui/gql-types';\nimport { WhyPropertySkeleton } from './why-property-skeleton';\n\nexport const WhyProperty = ({\n  ctyhocn,\n  variants,\n}: {\n  ctyhocn: string;\n  variants: Record<string, boolean>;\n}) => {\n  const { t } = useTranslation('hotel-card');\n  /** TODO IMPLEMENTATION - using hotel query call similar to HDP for MVT b/c\n   * serviceAmenities is not exposed on HSO query. If variant c is a winner,\n   * we can exposed serviceAmenities on HSO and pass to this feature to avoid\n   * making extra network calls and shimmer.\n   */\n  const { data, isLoading } = useHotelQuery({ ctyhocn, language: 'en' });\n\n  if (isLoading) return <WhyPropertySkeleton variants={variants} />;\n\n  const hotel = data?.hotel;\n  const shortDesc = hotel?.facilityOverview?.shortDesc || '';\n  const trimmedDesc = shortDesc.length > 140 ? `${shortDesc.slice(0, 140)}...` : shortDesc;\n  const blurb = variants?.b ? trimmedDesc : null;\n  const top3POI =\n    variants?.c && hotel?.serviceAmenities\n      ? hotel.serviceAmenities\n          .sort((a, b) => {\n            if (typeof a?.distance === 'number' && typeof b?.distance === 'number') {\n              return a.distance - b.distance;\n            }\n            return 0;\n          })\n          ?.slice(0, 3)\n      : null;\n\n  return (\n    <>\n      <h4 className=\"py-3 text-sm font-bold\">{t('whatsNearby')}</h4>\n      {blurb ? <div>{blurb}</div> : null}\n      {top3POI ? (\n        <div className=\"flex flex-wrap gap-2\">\n          {top3POI.map((poi) => {\n            const unitStringVariant:\n              | (typeof DISTANCE_UNITS)[number]\n              | undefined\n              | Maybe<HotelDistanceUnit> =\n              poi.distance && poi.distanceUnit && poi.distance > 1\n                ? `${poi.distanceUnit}_other`\n                : poi.distanceUnit;\n            return (\n              <div key={poi.name} className=\"flex items-center text-sm\">\n                <Icon name=\"point-of-interest\" size=\"sm\" />\n                {poi.name}{' '}\n                {unitStringVariant\n                  ? t(`distanceUnits.${unitStringVariant}`, {\n                      distance: poi.distanceFmt || '',\n                    })\n                  : ''}\n              </div>\n            );\n          })}\n        </div>\n      ) : null}\n      <h4 className=\"py-3 text-sm font-bold\">{t('amenitiesWeProvide')}</h4>\n      <div className=\"flex flex-wrap gap-2\">\n        {hotel?.amenities?.slice?.(0, 6)?.map((amenity) => (\n          <div key={amenity.name} className=\"flex items-center text-sm\">\n            <Icon name=\"check\" size=\"sm\" /> {amenity?.name}\n          </div>\n        ))}\n      </div>\n    </>\n  );\n};\n","import { Accordion } from '@dx-ui/osc-accordion';\nimport { useTranslation } from 'next-i18next';\nimport { WhyProperty } from './why-property';\nimport { GOALS, WHY_PROPERTY } from '../../../constants';\nimport { useGetMVTSelections } from '../../../hooks';\nimport { useRef } from 'react';\nimport { sendReward } from '@dx-ui/framework-conductrics';\n\nexport const WhyPropertyAccordion = ({ ctyhocn }: { ctyhocn: string }) => {\n  const { t } = useTranslation('hotel-card');\n  const whyPropertyAccordionRef = useRef(false);\n  const { isMVTVariant } = useGetMVTSelections({\n    agentId: WHY_PROPERTY.agentId,\n    MVTVariants: ['b', 'c'],\n  });\n  const handleAccordionClick = () => {\n    if (!whyPropertyAccordionRef.current) {\n      sendReward(GOALS.whyBrandClicked);\n      sendReward(GOALS.whyBrandTotalClicks);\n      whyPropertyAccordionRef.current = true;\n    }\n  };\n  const isWhyPropertyMvt = isMVTVariant.b || isMVTVariant.c;\n  return isWhyPropertyMvt ? (\n    <div className=\"mt-2 w-full\">\n      <Accordion\n        className=\"accordion-single text-sm\"\n        items={[\n          {\n            content: <WhyProperty ctyhocn={ctyhocn} variants={isMVTVariant} />,\n            key: 'whyProperty-accordion',\n            collapsedButtonLabel: t('whyStayHere'),\n            expandedButtonLabel: t('whyStayHere'),\n          },\n        ]}\n        onValueChange={handleAccordionClick}\n        type=\"multiple\"\n      />\n    </div>\n  ) : null;\n};\n","import cx from 'classnames';\nimport { useTranslation } from 'next-i18next';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport { COMPARE_ONBOARDING, GOALS } from '../../constants';\nimport { useLocalStorage, useMediaQuery } from 'usehooks-ts';\nimport { DESKTOP_COMPARE_LIMIT, MOBILE_COMPARE_LIMIT } from './compare-hotel-utils';\nimport { FeatureToolTip } from './feature-tool-tip';\nimport { useGetMVTSelections } from '../../hooks';\nimport { useRef } from 'react';\n\ntype CompareCheckboxProps = {\n  ctyhocn?: string;\n  onChange?: () => void;\n  isFirstCheckbox?: boolean;\n};\n\nexport const CompareHotelsCheckbox = ({\n  onChange,\n  ctyhocn: selectedCtyhocn,\n  isFirstCheckbox,\n}: CompareCheckboxProps) => {\n  const { t } = useTranslation('compare-hotels');\n  const isSubDesktop = useMediaQuery('(max-width: 1023px)');\n  const compareCheckboxRef = useRef<HTMLInputElement>(null);\n\n  const { hotelsToCompare, compareHotelsToggle: showCompareCheckBox } = useAppState();\n  const dispatch = useAppDispatch();\n\n  //NHCSEARCH-5449 | Compare Hotels Onboarding MVT\n  const {\n    isLoaded: isOnboardingMVTLoaded,\n    isMVTVariant: { c: isOnboardingVarC },\n  } = useGetMVTSelections({ agentId: COMPARE_ONBOARDING.agentId, MVTVariants: ['c'] });\n  const [isOnboarded, setIsOnboarded] = useLocalStorage('compare-hotels-onboarded', false);\n  const handleToolTipClose = () => {\n    setIsOnboarded(true);\n    if (compareCheckboxRef.current) compareCheckboxRef.current.focus();\n  };\n\n  const handleCompareHotelChange = () => {\n    if (onChange) onChange();\n\n    if (selectedCtyhocn) {\n      let selectedHotels = [...hotelsToCompare];\n      if (hotelsToCompare.includes(selectedCtyhocn))\n        selectedHotels = hotelsToCompare?.filter((hotel) => hotel !== selectedCtyhocn);\n      else selectedHotels.push(selectedCtyhocn);\n      dispatch({ type: 'SET_HOTELS_TO_COMPARE', payload: selectedHotels });\n      if (selectedHotels.length) sendReward(GOALS.compareHotelsCheckboxSelected);\n    }\n    if (!isOnboarded && isOnboardingVarC) setIsOnboarded(true);\n  };\n  const isCompareCBChecked = selectedCtyhocn ? !!hotelsToCompare?.includes(selectedCtyhocn) : false;\n  //Disable checkbox when hotels selected is 2 for mobile and  5 selected for other large device\n  const isCompareCBDisabled =\n    !isCompareCBChecked &&\n    (isSubDesktop\n      ? hotelsToCompare?.length >= MOBILE_COMPARE_LIMIT\n      : hotelsToCompare?.length === DESKTOP_COMPARE_LIMIT);\n\n  return showCompareCheckBox ? (\n    <div className=\"relative mr-0 pt-1.5 rtl:mb-2\">\n      <div className=\"flex\">\n        <label className=\"label label-inline-reverse rtl:label-inline-reverse\">\n          <span className={cx('text-base font-semibold rtl:pl-2 rtl:pr-1')}>{t('compare')}</span>\n          <input\n            className=\"form-checkbox\"\n            checked={isCompareCBChecked}\n            disabled={isCompareCBDisabled}\n            onChange={handleCompareHotelChange}\n            type=\"checkbox\"\n            ref={compareCheckboxRef}\n          />\n        </label>\n      </div>\n      {/* NHCSEARCH-5449 | Compare Hotels Onboarding MVT */}\n      <FeatureToolTip\n        absolutePosition=\"-left-5 bottom-9\"\n        title={t('startComparing')}\n        message={t('selectFirstHotel')}\n        onDismiss={handleToolTipClose}\n        cta={{ label: t('gotIt'), onClick: handleToolTipClose }}\n        containerClass=\"w-[343px] p-3\"\n        shouldShowFeatureToolTip={\n          !!(isOnboardingMVTLoaded && isOnboardingVarC && !isOnboarded && isFirstCheckbox)\n        }\n      />\n    </div>\n  ) : null;\n};\n","import Icon, { AmenityIcons } from '@dx-ui/osc-icon';\nimport type { HotelAmenityId } from '@dx-ui/queries-dx-shop-search-ui';\n\ntype HotelAmenities = { name: string; id: string };\n\nconst KEY_AMENITIES = {\n  freeParking: { id: 'freeParking', name: 'Free parking' },\n  freeBreakfast: { id: 'freeBreakfast', name: 'Free breakfast' },\n  indoorPool: { id: 'indoorPool', name: 'Indoor pool' },\n  outdoorPool: { id: 'outdoorPool', name: 'Outdoor pool' },\n} as unknown as Record<string, HotelAmenities>;\n\nexport const KeyHotelAmenities = ({ amenities }: { amenities: HotelAmenityId[] | undefined }) => {\n  const keyAmenities: HotelAmenities[] = [];\n  amenities?.forEach((amenityId) => {\n    if (Object.keys(KEY_AMENITIES).includes(amenityId)) {\n      keyAmenities.push(KEY_AMENITIES[amenityId] as HotelAmenities);\n    }\n  });\n\n  return keyAmenities?.length ? (\n    <div className=\"flex flex-wrap gap-1.5 py-2.5 pb-1.5\" data-testid=\"key-hotel-amenities\">\n      {keyAmenities.map((amenity: HotelAmenities) => (\n        <div key={amenity.id} className=\"flex items-center gap-0.5 text-sm\">\n          <Icon name={AmenityIcons[amenity.id as HotelAmenityId]} size=\"sm\" />\n          <span> {amenity?.name}</span>\n        </div>\n      ))}\n    </div>\n  ) : null;\n};\n","import { useTranslation } from 'next-i18next';\nimport cx from 'classnames';\nimport type { Maybe, ShopMultiPropAvailPointsQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport Carousel from '../carousel/carousel';\nimport { HotelBadges } from './hotel-badges';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport { useMediaQuery } from 'usehooks-ts';\nimport { TripAdvisorRating } from '../trip-advisor/trip-advisor-rating';\nimport { useMetrics } from '../../hooks';\nimport { WhyPropertyAccordion } from './why-property-mvt/why-property-accordion';\nimport type { HotelType } from '../../providers/app-provider/app-provider.types';\nimport type { RateInfoMessage } from '../rate-name-cta/rate-name-cta';\nimport { RateNameCTA } from '../rate-name-cta/rate-name-cta';\nimport { useGetHotelInfo } from './hooks/use-get-hotel-info';\nimport { CompareHotelsCheckbox } from '../compare-hotels/compare-checkbox';\nimport { useRecentlyViewed } from '../../hooks/use-recently-viewed';\nimport { KeyHotelAmenities } from './key-hotel-amenity-info';\n\nconst preventNavigation = (e: React.MouseEvent<HTMLAnchorElement, MouseEvent>) => {\n  e.preventDefault();\n};\nconst preventFocus = (e: React.FocusEvent<HTMLAnchorElement>) => {\n  e.preventDefault();\n  e.target.blur();\n};\n\nconst HotelNameHeader = ({\n  children,\n  name,\n  url,\n}: {\n  children: React.ReactElement;\n  name?: string | null;\n  url?: Maybe<string>;\n}) => {\n  if (url) {\n    return (\n      <>\n        {/* This is a bit 'hacky'. We need a link in the page for SEO, but it is non-functional when JS is enabled */}\n        <a\n          aria-hidden=\"true\"\n          className=\"cursor-default\"\n          href={url}\n          onClick={preventNavigation}\n          onFocus={preventFocus}\n          tabIndex={-1}\n        >\n          {children}\n        </a>\n        {/* For a11y, we're hiding the above link (since it behaves as text) and supplementing it with sr-only content */}\n        <h3 className=\"sr-only\">{name}</h3>\n      </>\n    );\n  }\n  return children;\n};\n\ntype HotelCardProps = {\n  distance?: string;\n  isTALoadingState?: boolean;\n  onDetailsClick?: () => void;\n  showImages?: boolean;\n  isListViewOnly?: boolean;\n  priceInfo?: ShopMultiPropAvailPointsQuery['shopMultiPropAvail'][0] | null;\n  hotelInfo?: HotelType | null | undefined;\n  isFirstAvailableProperty?: boolean;\n};\n\nconst HotelCard = ({\n  distance,\n  isTALoadingState,\n  onDetailsClick,\n  showImages,\n  isListViewOnly,\n  priceInfo,\n  hotelInfo,\n  isFirstAvailableProperty,\n}: HotelCardProps) => {\n  const { t } = useTranslation(['hotel-card']);\n  const { pageType } = useAppState();\n  const smMedViewPort = useMediaQuery('(min-width: 500px) and (max-width: 767px)');\n  const metrics = useMetrics();\n  const dispatch = useAppDispatch();\n\n  const {\n    amenities,\n    badges,\n    carouselImages,\n    ctaLabel,\n    ctaHref,\n    ctaMessage,\n    customParams,\n    hotelUrl,\n    isHotelDataLoading,\n    masterImage,\n    rateInfo,\n    disclaimerMessages,\n    transactionPropertyData,\n  } = useGetHotelInfo({\n    priceInfo,\n    hotelInfo,\n    additionalParams: { isHotelCard: true },\n  });\n  const hotelName = hotelInfo?.name || '';\n  const tripAdvisorLocationSummary = hotelInfo?.tripAdvisorLocationSummary || null;\n  const ctyhocn = hotelInfo?.ctyhocn;\n  const classname = {\n    rateNameClassName: 'mt-auto w-1/2 sm:w-full md:mt-0 md:w-3/5 xl:w-auto',\n    propertyNameClassName: 'w-1/2 sm:w-full md:w-2/5 xl:flex-grow rtl:mr-2',\n    hotelCardContentClassName: cx('flex w-full items-end', {\n      'sm:flex-col': !showImages && !isListViewOnly,\n      'sm:justify-end md:flex-row': showImages && !isListViewOnly,\n    }),\n    wrapperHotelCardHeaderAndCardContentClassName: cx(\n      'w-full content-end lg:grid lg:h-full lg:grid-cols-1',\n      {\n        'px-2.5 py-1': showImages,\n      }\n    ),\n    hotelCardImage: 'w-full justify-center flex',\n    distanceClassName: cx('text-text-alt whitespace-nowrap text-xs font-normal', {\n      hidden: !!pageType?.isGlobal,\n    }),\n  };\n\n  const amexDisclaimer = disclaimerMessages?.find((disclaimer: RateInfoMessage) => {\n    return disclaimer?.type === 'amexDisclaimer';\n  })?.heading?.text;\n  const { recentlyViewed, setRecentlyViewed, showRecentlyViewedChip } = useRecentlyViewed(\n    ctyhocn as string\n  );\n\n  if (showRecentlyViewedChip) {\n    badges?.push('view');\n  }\n\n  const handleOnRateNameCTAClick = () => {\n    setRecentlyViewed({ ...recentlyViewed });\n    if (transactionPropertyData) metrics.setPriceClicked(transactionPropertyData);\n  };\n  const setHighlightedMapCtyhocn = (ctyhocn: string | null) => {\n    dispatch({ type: 'SET_HIGHLIGHTED_MAP_CTYHOCN', payload: ctyhocn });\n  };\n  const getHotelLocationName = () => {\n    // In dream on a global page should display (city, state, Country) instead of distance marker\n    const address = hotelInfo?.address;\n    let location;\n    let srLocation;\n    if (pageType.isGlobal) {\n      // Hotel location name\n      location = address?.city;\n      if (address?.city) location = address.city;\n      if (address?.state) {\n        location += location ? `, ${address.state}` : address.state;\n      }\n      if (address?.country) {\n        location += location ? `, ${address.country}` : address.country;\n      }\n      //screen reader location text\n      if (address?.city) srLocation = address.city;\n      if (address?.stateName) {\n        srLocation += srLocation ? `, ${address.stateName}` : address.stateName;\n      }\n      if (address?.countryName) {\n        srLocation += srLocation ? `, ${address.countryName}` : address.countryName;\n      }\n    }\n    return { location, srLocation };\n  };\n  const { location, srLocation } = getHotelLocationName();\n\n  return (\n    <li\n      className=\"border-border flex w-full justify-self-center rounded-lg border\"\n      data-testid={`hotel-card-${ctyhocn}`}\n      onBlur={() => setHighlightedMapCtyhocn(ctyhocn || null)}\n      onFocus={() => setHighlightedMapCtyhocn(null)}\n      onMouseEnter={() => setHighlightedMapCtyhocn(ctyhocn || null)}\n      onMouseLeave={() => setHighlightedMapCtyhocn(null)}\n    >\n      <div className=\"flex w-full flex-col lg:max-w-[343px] xl:max-w-[440px]\">\n        {showImages && (\n          <div className={classname.hotelCardImage} data-testid=\"hotel-card-image\">\n            <div className=\"bg-bg-alt pb-2/3 relative h-0 w-full overflow-hidden rounded-t-lg\">\n              <Carousel\n                data-testid=\"listViewImageCarousel\"\n                images={carouselImages ? carouselImages : [masterImage]}\n              />\n            </div>\n          </div>\n        )}\n        <HotelNameHeader url={hotelUrl} name={hotelName}>\n          <h3\n            className={cx('w-full break-words px-2.5 pt-2.5 font-semibold leading-snug', {\n              'text-sm': smMedViewPort,\n              'text-base': !smMedViewPort,\n            })}\n            data-testid=\"listViewPropertyName\"\n            id={`hotel-${ctyhocn}`}\n          >\n            {hotelName}\n          </h3>\n        </HotelNameHeader>\n        {badges?.length ? (\n          <div className=\"ps-2.5\">\n            <HotelBadges badges={badges} />\n          </div>\n        ) : null}\n\n        <div\n          className={classname.wrapperHotelCardHeaderAndCardContentClassName}\n          data-testid=\"wrapper-hotel-card-content\"\n        >\n          <div className={classname.hotelCardContentClassName} data-testid=\"hotel-card-content\">\n            <div className={classname.propertyNameClassName}>\n              <button\n                className=\"btn-sm btn-primary-text block self-start font-semibold\"\n                data-testid={`hotelDetails-${ctyhocn}`}\n                onClick={onDetailsClick}\n                type=\"button\"\n              >\n                <span>{t('hotelDetails')}</span>\n                <span className=\"sr-only\">&nbsp;{t('forHotel', { hotel: hotelName })}</span>\n                <span aria-hidden>&nbsp;&gt;</span>\n              </button>\n              <span className={classname.distanceClassName} data-testid=\"distanceMarker\">\n                {distance}\n              </span>\n              <span className=\"sr-only\">{srLocation}</span>\n              <span\n                aria-hidden=\"true\"\n                className=\"text-text-alt whitespace-nowrap text-xs font-normal\"\n                data-testid=\"locationMarker\"\n              >\n                {location}\n              </span>\n              <TripAdvisorRating\n                isLoadingState={isTALoadingState}\n                showReviewCount={true}\n                tripAdvisorLocationSummary={tripAdvisorLocationSummary}\n              />\n            </div>\n            <div className={classname.rateNameClassName}>\n              <RateNameCTA\n                ctaHref={ctaHref || ''}\n                ctaLabel={ctaLabel}\n                ctaMessage={ctaMessage}\n                customRateInfo={customParams}\n                data-testid=\"priceInfo\"\n                isLoading={isHotelDataLoading}\n                rateMessages={rateInfo}\n                onRateNameCTAClick={handleOnRateNameCTAClick}\n              />\n            </div>\n          </div>\n          {/* NHCSEARCH-5028 - Why Property MVT */}\n          <WhyPropertyAccordion ctyhocn={ctyhocn || ''} />\n          <KeyHotelAmenities amenities={amenities} />\n          {!!customParams?.showCompare ? (\n            <CompareHotelsCheckbox\n              ctyhocn={ctyhocn || ''}\n              isFirstCheckbox={isFirstAvailableProperty}\n            />\n          ) : null}\n          {amexDisclaimer ? (\n            <div\n              className=\"flex-basis-full shrink-0 grow-0 pt-2.5 text-xs font-normal\"\n              data-testid=\"amexDisclaimerMsg\"\n            >\n              {amexDisclaimer}\n            </div>\n          ) : null}\n        </div>\n      </div>\n    </li>\n  );\n};\n\nexport default HotelCard;\n","export default function HotelCardCTASkeleton() {\n  return (\n    <div\n      aria-hidden\n      className=\"flex h-full flex-col items-end justify-end space-y-2 pt-2\"\n      data-testid=\"HotelCardCTASkeleton\"\n    >\n      <div className=\"bg-bg-alt h-8 w-16 animate-pulse\" />\n      <div className=\"bg-bg-alt h-4 w-1/2 animate-pulse\" />\n      <div className=\"bg-bg-alt h-10 w-32 animate-pulse rounded\" />\n    </div>\n  );\n}\n","import cx from 'classnames';\nimport HotelCardCTASkeleton from './hotel-card-cta-skeleton';\nimport { useMediaQuery } from 'usehooks-ts';\n\ntype HotelCardSkeletonProps = {\n  isListViewOnly?: boolean;\n  showImages?: boolean;\n};\n\nconst HotelCardSkeleton = ({ isListViewOnly, showImages }: HotelCardSkeletonProps) => {\n  const isDesktop = useMediaQuery('(min-width: 1024px)');\n\n  // Do not modify the classname string without notifying the team\n  const classname = {\n    wrapperHotelCardHeaderAndCardContentClassName: cx('w-full md:max-w-[440px]', {\n      'pl-0 py-2 md:pl-2 md:pr-2 pt-2 grow': showImages && !isDesktop,\n      ' md:min-w-[343px]': showImages && isDesktop,\n      'pt-2 sm:w-5/7 sm:pt-0 sm:pl-4 md:w-3/4': showImages && isListViewOnly,\n    }),\n    hotelCardImage: 'flex-shrink-0 w-full',\n  };\n\n  return (\n    <li\n      className={cx(\n        'flex w-full min-w-[343px] flex-col justify-self-center rounded-lg md:max-w-[440px]',\n        {\n          ' last:mb-4': !isDesktop,\n        }\n      )}\n      data-testid=\"hotel-card-skeleton\"\n    >\n      {/* Hotel Image placeholder */}\n      {showImages && (\n        <div className={classname.hotelCardImage} data-testid=\"hotel-card-image-shimmer\">\n          <div className=\"bg-bg-alt pb-2/3 relative h-0 w-full animate-pulse overflow-hidden\" />\n        </div>\n      )}\n      {/* Hotel Card Details Wrapper */}\n      <div\n        className={classname.wrapperHotelCardHeaderAndCardContentClassName}\n        data-testid=\"wrapper-hotel-card-details-shimmer\"\n      >\n        {/* Hotel Header placeholder */}\n        <div\n          className=\"bg-bg-alt my-2 h-4 w-full animate-pulse leading-snug rtl:mr-2\"\n          data-testid=\"listView-property-name-shimmer\"\n        />\n        {/* Hotel Card Details Wrapper */}\n        <div className=\"flex\">\n          <div className=\"w-1/2 sm:w-full md:w-3/5 xl:grow  rtl:mr-2\">\n            {/* Hotel Details placeholder */}\n            <div\n              className=\"bg-bg-alt mb-2 block h-4 w-24 animate-pulse self-start\"\n              data-testid=\"hotel-details-button-shimmer\"\n            />\n            {/* Hotel Distance Marker placeholder */}\n            <div\n              className=\"bg-bg-alt h-4 w-16 animate-pulse whitespace-nowrap\"\n              data-testid=\"distance-marker-shimmer\"\n            />\n            {/* Trip Advisor placeholder */}\n            <div\n              className=\"bg-bg-alt mt-2 h-4 w-32 animate-pulse\"\n              data-testid=\"trip-advisor-rating-shimmer\"\n            />\n            {/* Trip Advisor Circle placeholder */}\n            <div\n              className=\"bg-bg-alt mt-2 h-4 w-20 animate-pulse\"\n              data-testid=\"trip-advisor-circle-review-shimmer\"\n            />\n            {/* Trip Advisor Based on Reviews placeholder */}\n            <div\n              className=\"bg-bg-alt mt-2 h-4 w-28 animate-pulse\"\n              data-testid=\"trip-advisor-reviews-shimmer\"\n            />\n          </div>\n          {/* Hotel Details CTA shimmer */}\n          <div className=\"flex w-1/2 shrink-0 justify-end overflow-hidden\">\n            <HotelCardCTASkeleton />\n          </div>\n        </div>\n      </div>\n    </li>\n  );\n};\n\nexport default HotelCardSkeleton;\n","import { forwardRef, useMemo, useState } from 'react';\n\nimport type { HotelType } from '../../providers/app-provider/app-provider.types';\nimport { useTranslation } from 'next-i18next';\nimport type { GoogleCoordinate } from '../../utils';\nimport { getDistanceFromCenterFmt } from '../../utils';\nimport HotelCard from './hotel-card';\nimport HotelCardSkeleton from './hotel-card-skeleton';\nimport { useMetrics, useWrappedRouter } from '../../hooks';\n\nimport type { ShopMultiPropAvailQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { useAppDispatch } from '../../providers/app-provider';\nimport {\n  DEFAULT_HOTEL_CARD_SKELETON_COUNT,\n  MAX_PROPERTIES_PER_LIST_VIEW_PAGE,\n} from '../../constants';\nimport { InfoMessageBanner } from '../info-message-banner/info-message-banner';\nimport { useGetPOIAirportInfoMVT } from './hooks/use-get-poi-airport-info-mvt';\n\nexport type IHotelCards = {\n  hotels: HotelType[];\n  pricing?: Record<string, ShopMultiPropAvailQuery['shopMultiPropAvail'][0]>;\n  showImages: boolean;\n  isListViewOnly?: boolean;\n  isLoadingState?: boolean;\n  centerCoordinate: GoogleCoordinate | null;\n  cardsClassName?: string;\n  initHotelCount?: number;\n} & React.HTMLAttributes<HTMLUListElement>;\n\nconst HotelCards = forwardRef<HTMLUListElement, IHotelCards>(\n  (\n    {\n      hotels,\n      pricing,\n      showImages,\n      isListViewOnly,\n      isLoadingState,\n      centerCoordinate,\n      cardsClassName,\n      initHotelCount,\n      ...rest\n    },\n    forwardedRef\n  ) => {\n    const { t } = useTranslation(['hotel-card', 'rate-name-cta', 'locations-page']);\n    const dispatch = useAppDispatch();\n    const metrics = useMetrics();\n    const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n\n    //NHCSEARCH-5621\n    const [enablePOIAndAirportTest, setEnablePOIAndAirporTest] = useState(false);\n    useGetPOIAirportInfoMVT({ enableTest: enablePOIAndAirportTest });\n\n    const handleDetailsClick = (ctyhocn: string, name: string, index: number) => {\n      setEnablePOIAndAirporTest(true);\n      dispatch({ type: 'SET_PDP_CTYHOCN', payload: ctyhocn });\n      metrics.setBrandDetail({\n        ctyhocn,\n        view: 'List',\n        name,\n        index: index + 1,\n      });\n    };\n\n    const skeletonCardCount = useMemo(() => {\n      if (initHotelCount && initHotelCount > 0) {\n        return initHotelCount && initHotelCount > MAX_PROPERTIES_PER_LIST_VIEW_PAGE\n          ? MAX_PROPERTIES_PER_LIST_VIEW_PAGE\n          : initHotelCount;\n      }\n      return DEFAULT_HOTEL_CARD_SKELETON_COUNT;\n    }, [initHotelCount]);\n    if (isLoadingState) {\n      let cnt = 0;\n      return (\n        <ul ref={forwardedRef} {...rest} className={cardsClassName}>\n          {Array.from({ length: skeletonCardCount }, () => (\n            <HotelCardSkeleton\n              key={cnt++}\n              isListViewOnly={isListViewOnly}\n              showImages={showImages}\n            />\n          ))}\n        </ul>\n      );\n    }\n    const keyString: string | undefined =\n      Object.keys(rest).find((key) => key === 'data-testid') ?? '';\n\n    const firstAvailableProperty = hotels.findIndex((hotel) =>\n      router.asPath.includes('/search/')\n        ? pricing?.[hotel?.ctyhocn]?.summary?.status?.type === 'AVAILABLE'\n        : hotel?.display?.open && hotel?.leadRate?.lowest\n    );\n    const SoldOutInfoMessageBanner = () => {\n      /* show property sold out info banner if specific searched property sold out */\n      const hotelPlaceId = queryParameters?.placeId?.includes('dx-hotel')\n        ? queryParameters?.placeId?.split('::')[1]?.toUpperCase()\n        : null;\n      const queryParam = queryParameters?.query?.toUpperCase();\n      return (hotelPlaceId && pricing?.[hotelPlaceId]?.statusCode === 1740) ||\n        (queryParam && pricing?.[queryParam]?.statusCode === 1740) ? (\n        <InfoMessageBanner message={t('selectedHotelSoldOut')} />\n      ) : null;\n    };\n    if (!hotels.length) return null;\n\n    return (\n      <>\n        <SoldOutInfoMessageBanner />\n        <ul\n          key={`ulHotelCard-${keyString}`}\n          ref={forwardedRef}\n          {...rest}\n          className={cardsClassName}\n        >\n          {hotels.map((hotel, _id) => {\n            const { name, ctyhocn, localization } = hotel;\n            const { distanceFmt } = getDistanceFromCenterFmt(\n              t,\n              centerCoordinate,\n              localization?.coordinate,\n              router.locale\n            );\n            const priceInfo = pricing && pricing[ctyhocn];\n\n            return (\n              <HotelCard\n                key={`hotel-card-${ctyhocn}`}\n                distance={distanceFmt}\n                isTALoadingState={isLoadingState}\n                isListViewOnly={isListViewOnly}\n                onDetailsClick={() => handleDetailsClick(ctyhocn, name || '', _id)}\n                showImages={showImages}\n                priceInfo={priceInfo}\n                hotelInfo={hotel}\n                isFirstAvailableProperty={_id === firstAvailableProperty}\n              />\n            );\n          })}\n        </ul>\n      </>\n    );\n  }\n);\n\nHotelCards.displayName = 'HotelCards';\n\nexport default HotelCards;\n","import { Pagination } from '@dx-ui/osc-pagination';\nimport { useRef, useState, useEffect, useMemo } from 'react';\nimport { useTranslation } from 'next-i18next';\n\nimport { useMetrics, useTrackSearchPricing, useWrappedRouter, useBrandDetails } from '../../hooks';\nimport type { HotelType } from '../../providers/app-provider/app-provider.types';\nimport { ListViewBrandBanner } from './list-view-brand-banner';\nimport {\n  DEFAULT_HOTEL_CARD_SKELETON_COUNT,\n  MAX_PROPERTIES_PER_LIST_VIEW_PAGE,\n  env,\n} from '../../constants';\nimport { AgeBasedModal } from '../../components/age-based-modal';\nimport type { GoogleCoordinate } from '../../utils';\nimport { getLengthOfStay } from '../../utils';\nimport { setFocusOnFirstListViewCard } from './list-view-utils/list-view.utils';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport { useConfigRule } from '@dx-ui/framework-config-rule-provider';\nimport useShopMultiPropAvail from '../../hooks/use-shop-multi-prop-avail/use-shop-multi-prop-avail';\nimport { getInfoBannerURLWithBrandRemoved } from './list-view-utils/list-view-brand-banner.utils';\nimport { useGetVisibleInBoundHotels } from '../../hooks/use-get-visible-in-bound-hotels';\nimport { InfoMessageBanner } from '../info-message-banner/info-message-banner';\nimport { Link } from '@dx-ui/osc-link';\nimport HotelCards from '../hotel-card/hotel-cards';\nimport HotelCardSkeleton from '../hotel-card/hotel-card-skeleton';\nimport cx from 'classnames';\n\ntype ListViewProps = {\n  isConductricsLoaded?: boolean;\n  brandName?: string;\n  brandCode?: string;\n  centerCoordinate: GoogleCoordinate | null;\n  isHSODataLoading?: boolean;\n  onPageChanged?: (paginationIndex: number, pageSize: number) => void;\n  sortedHotels: HotelType[];\n  initHotelCount?: number;\n};\ntype IListViewLoadingShimmer = {\n  isListViewOnly?: boolean;\n  showImages?: boolean;\n  cardsClassName?: string;\n  cardCount?: number;\n};\n\n/*\n * List View Loading / Shimmer\n * Displays if hotel data is being fetched from backend\n */\nconst ListViewLoadingShimmer = ({\n  isListViewOnly,\n  showImages,\n  cardsClassName,\n  cardCount = DEFAULT_HOTEL_CARD_SKELETON_COUNT,\n}: IListViewLoadingShimmer) => {\n  let cnt = 0;\n  return (\n    <ul className={cx(cardsClassName)}>\n      {Array.from({ length: cardCount }, () => (\n        <HotelCardSkeleton key={cnt++} isListViewOnly={isListViewOnly} showImages={showImages} />\n      ))}\n    </ul>\n  );\n};\n\nexport const ListView = ({\n  isConductricsLoaded,\n  brandName,\n  brandCode,\n  centerCoordinate,\n  isHSODataLoading,\n  onPageChanged,\n  sortedHotels,\n  initHotelCount,\n}: ListViewProps) => {\n  const {\n    hasConnectingRooms,\n    showHotelImages,\n    paginationIndex,\n    selectedCurrency,\n    pageType,\n    isListVisible,\n  } = useAppState();\n  const listRef = useRef<HTMLUListElement | null>(null);\n  const { t } = useTranslation(['locations-page', 'list-view', 'list-view-brand-banner']);\n  const metrics = useMetrics();\n  const dispatch = useAppDispatch();\n\n  const [isAgeBasedModalOpen, setIsAgeBasedModalOpen] = useState(false);\n  const ulContainerRef = useRef<HTMLDivElement | null>(null);\n\n  const { taggedConfig } = useConfigRule();\n  // if show hotel images toggle is disabled always show images. Otherwise show images depending on toggle state\n  const showImages = !taggedConfig?.config.showListViewHotelImagesToggle || !!showHotelImages;\n  const isListViewOnly = !taggedConfig?.config['showMap'];\n\n  const {\n    safeQueryParams: queryParameters,\n    router: { asPath, locale },\n  } = useWrappedRouter();\n  const { canonicalSlug, altSlugs, isHotelBrand } = useBrandDetails({ brandCode });\n\n  const currentPageVisibleHotels = sortedHotels.slice(\n    paginationIndex * MAX_PROPERTIES_PER_LIST_VIEW_PAGE,\n    (paginationIndex + 1) * MAX_PROPERTIES_PER_LIST_VIEW_PAGE\n  );\n  const totalPages = Math.ceil(sortedHotels.length / MAX_PROPERTIES_PER_LIST_VIEW_PAGE);\n\n  //guarantee we always fetch hotels in list view even if >150. Disable query if on locations page\n  const { hashedData: pricing } = useShopMultiPropAvail({\n    ctyhocns: currentPageVisibleHotels.map((hotel) => hotel.ctyhocn),\n    mpaConstraints: true,\n  });\n\n  const showAmountAfterTax = useMemo(() => {\n    return asPath.includes('/locations/')\n      ? sortedHotels?.some((hotel) => !!hotel?.leadRate?.lowest?.cmaTotalPriceIndicator)\n      : sortedHotels.some((hotel) =>\n          Boolean(pricing[hotel.ctyhocn]?.summary?.lowest?.cmaTotalPriceIndicator)\n        );\n  }, [asPath, pricing, sortedHotels]);\n\n  useTrackSearchPricing({\n    isDateSearch: true,\n    hotels: currentPageVisibleHotels,\n    pricing,\n    datesFlex: queryParameters?.datesFlex,\n    selectedCurrency: selectedCurrency || '',\n    lengthOfStay: getLengthOfStay(queryParameters?.departureDate, queryParameters?.arrivalDate),\n  });\n\n  const { brandedVisibleHotels, otherVisibleHotels } = useGetVisibleInBoundHotels({\n    currentPageVisibleHotels,\n    brandCode,\n    brandName,\n  });\n\n  const shouldDisplayBrandBannerInCurrentPage = () => {\n    const atLeastOneHotelNotBranded = otherVisibleHotels?.length > 0;\n    const displayAtEndOfBrandPageResults = pageType.isBrand && paginationIndex === totalPages - 1;\n\n    switch (true) {\n      case displayAtEndOfBrandPageResults:\n        return true;\n      case pageType.isGlobal && atLeastOneHotelNotBranded:\n        return true;\n      default:\n        return false;\n    }\n  };\n  //call onPageChange if it exists and reset focus on first card if paginationIndex changes\n  useEffect(() => {\n    if (onPageChanged) onPageChanged(paginationIndex, MAX_PROPERTIES_PER_LIST_VIEW_PAGE);\n  }, [onPageChanged, paginationIndex]);\n\n  //reset focus on first card in list any time pagination changes\n  useEffect(() => {\n    if (paginationIndex > 0) setFocusOnFirstListViewCard(ulContainerRef);\n  }, [paginationIndex]);\n\n  const handlePagination = async (newPageIndex: number) => {\n    dispatch({ type: 'SET_PAGINATION_INDEX', payload: newPageIndex });\n    await metrics.trackPaginationClick({\n      paginationNumber: `${newPageIndex + 1}`,\n      actionType: !queryParameters ? 'categoryPagination' : 'searchAction',\n    });\n  };\n  useEffect(() => {\n    // setting setPaginationData separately for each flow (search & locations)\n    // since search hotels will not load till conductrics is resolved\n    if (isConductricsLoaded && totalPages > 0) {\n      // due to string character limit constraints with Adobe,\n      // we still want only first page results in the propertyResultList.\n      // but propertyResults should reflect the total number of hotels returned.\n      metrics.setPaginationData({\n        totalPages: `${totalPages}`,\n        propertyResultList: otherVisibleHotels.map((hotel) => hotel.ctyhocn).join(','),\n        propertyResults: otherVisibleHotels.length,\n        brandedHotels: brandedVisibleHotels\n          .filter((hotel) => hotel.brandCode === brandCode)\n          .map((hotel) => hotel.ctyhocn),\n      });\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isConductricsLoaded]);\n\n  // if the current page is beyond the last page, set it to the last page\n  const lastPageIndex = Math.max(totalPages - 1, 0); // go no lower than the first page\n  if (paginationIndex > lastPageIndex && dispatch) {\n    dispatch({ type: 'SET_PAGINATION_INDEX', payload: lastPageIndex });\n  }\n  const showHotelCardImage = !!pageType.isDreams || !!showImages;\n  const classname = {\n    cardsClassName:\n      'mb-4 grid justify-center gap-2 grid-cols-1 lg:grid-cols-2 lg:w-[694px] xl:w-[888px]',\n  };\n  const linkWithoutBrandSlug = pageType.isBrand ? (\n    <Link\n      url={getInfoBannerURLWithBrandRemoved({\n        baseUrl: env.OHW_BASE_URL,\n        path: asPath,\n        locale,\n        canonicalSlug,\n        altSlugs,\n        brandCode,\n      })}\n      className=\"px-2 text-sm font-normal\"\n    >\n      {t('list-view-brand-banner:exploreOtherHotelsLink')}\n    </Link>\n  ) : null;\n\n  const skeletonCardCount = useMemo(() => {\n    if (initHotelCount && initHotelCount > 0) {\n      return initHotelCount && initHotelCount > MAX_PROPERTIES_PER_LIST_VIEW_PAGE\n        ? MAX_PROPERTIES_PER_LIST_VIEW_PAGE\n        : initHotelCount;\n    }\n    return DEFAULT_HOTEL_CARD_SKELETON_COUNT;\n  }, [initHotelCount]);\n\n  if (isHSODataLoading && sortedHotels?.length === 0)\n    return (\n      <ListViewLoadingShimmer\n        isListViewOnly={isListViewOnly}\n        showImages={showHotelCardImage}\n        cardsClassName={classname.cardsClassName}\n        cardCount={skeletonCardCount}\n      />\n    );\n\n  // Returns Message when zero hotels are found to adjust search / map\n  if (!isHSODataLoading && sortedHotels?.length === 0) {\n    const noHotelsFoundBannerMessage = isHotelBrand\n      ? t('list-view-brand-banner:couldNotFindHotelsInSearchArea', { brandName })\n      : t('notFoundMessage');\n    return (\n      <InfoMessageBanner message={noHotelsFoundBannerMessage}>\n        {linkWithoutBrandSlug}\n      </InfoMessageBanner>\n    );\n  }\n\n  return (\n    <div ref={ulContainerRef} className={cx({ hidden: !isListVisible })}>\n      {showAmountAfterTax ? <p className=\"block pb-2 \">{t('list-view:cmaPriceMessage')}</p> : null}\n      {hasConnectingRooms && <InfoMessageBanner message={t('list-view:ccrPricingMessage')} />}\n      {/* Child based pricing modal when at least one property in map requires child ages but arent specified by customer. but TBD about this location in code (at least no longer in hotel card)*/}\n      <AgeBasedModal\n        isAgeBasedModalOpen={isAgeBasedModalOpen}\n        pricing={pricing}\n        setIsAgeBasedModalOpen={setIsAgeBasedModalOpen}\n      />\n      <HotelCards\n        aria-label={t('list-view:hotelSearchResults')}\n        centerCoordinate={centerCoordinate}\n        data-testid=\"hotelsList\"\n        hotels={currentPageVisibleHotels || []}\n        isListViewOnly={isListViewOnly}\n        isLoadingState={isHSODataLoading}\n        pricing={pricing}\n        ref={listRef}\n        showImages={showHotelCardImage}\n        cardsClassName={classname.cardsClassName}\n        initHotelCount={initHotelCount}\n      />\n      <ListViewBrandBanner\n        brandCode={brandCode}\n        isDisplayBrandBanner={shouldDisplayBrandBannerInCurrentPage()}\n        isPageBrandFilterEnabled={pageType.isPageBrandFilterEnabled}\n        numBrandedHotels={brandedVisibleHotels?.length}\n        isEndOfResults={!isHSODataLoading && paginationIndex === lastPageIndex}\n      />\n\n      <div className=\"border-border border-y py-4\">\n        <Pagination\n          current={paginationIndex}\n          onNextClick={() => handlePagination(paginationIndex + 1)}\n          onPreviousClick={() => handlePagination(paginationIndex - 1)}\n          total={totalPages}\n        />\n      </div>\n    </div>\n  );\n};\n","import { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport { useIsClient, useMediaQuery } from 'usehooks-ts';\nimport cx from 'classnames';\nimport { Icon, type IconNames } from '@dx-ui/osc-icon';\nimport { useMapListToggle } from '../../hooks';\n\nexport const MapListToggleButton = ({\n  showMapListToggleButton = true,\n  className,\n}: {\n  showMapListToggleButton?: boolean;\n  className?: string;\n}) => {\n  const { isListVisible } = useAppState();\n  const dispatch = useAppDispatch();\n  const isClient = useIsClient();\n  const isSlimView = useMediaQuery('(max-width: 767px)');\n\n  const { iconName: listMapViewButtonIconName, label: listMapViewButtonLabel } = useMapListToggle();\n  const mapToggleButtonArrowDirection = listMapViewButtonIconName as (typeof IconNames)[number];\n\n  return isClient && showMapListToggleButton ? (\n    <button\n      className={cx(\n        'btn flex items-center justify-center rtl:ml-0 rtl:mr-auto',\n        {\n          'md:hidden btn-primary': isSlimView,\n          ' btn-text-outline text-base text-text px-3 py-2 shadow-xl bg-bg hover:text-text focus:text-text':\n            !isSlimView,\n        },\n        className\n      )}\n      onClick={() => {\n        dispatch({ type: 'SET_IS_LIST_VISIBLE', payload: !isListVisible });\n      }}\n      type=\"button\"\n    >\n      {listMapViewButtonLabel}\n      {!isSlimView ? <Icon name={mapToggleButtonArrowDirection} /> : null}\n    </button>\n  ) : null;\n};\n","import { useTranslation } from 'next-i18next';\n\nexport const ZoomInForPricing = () => {\n  const { t } = useTranslation('zoom-in-for-additional-pricing');\n\n  return (\n    <span className=\"z-2 border-text-alt bg-text/75 text-text-inverse @[400px]:w-auto @[460px]:mt-3 absolute mt-4 w-28 text-wrap rounded-lg border px-2 py-0.5 text-center text-sm max-2xl:top-12\">\n      {t('zoomInForAdditionalPricing')}\n    </span>\n  );\n};\n","export * from './zoom-in-for-pricing';\n","import { createContext, useContext } from 'react';\nimport type MarkerClusterer from '@googlemaps/markerclustererplus';\n\ntype IMapContext = {\n  apiKey?: string;\n  clusterer?: MarkerClusterer;\n  infoWindow?: google.maps.InfoWindow;\n  infoWindowContainer?: HTMLDivElement;\n  map?: google.maps.Map;\n  setClusterer: (clusterer?: MarkerClusterer) => void;\n  setInfoWindow: (infoWindow?: google.maps.InfoWindow) => void;\n  setInfoWindowContainer: (infoWindowContainer?: HTMLDivElement) => void;\n  setMap: (map?: google.maps.Map) => void;\n};\n\nconst defaultContext: IMapContext = {\n  apiKey: undefined,\n  clusterer: undefined,\n  infoWindow: undefined,\n  infoWindowContainer: undefined,\n  map: undefined,\n  setClusterer: () => null,\n  setInfoWindow: () => null,\n  setInfoWindowContainer: () => null,\n  setMap: () => null,\n};\n\nexport const MapContext = createContext<IMapContext>(defaultContext);\n\nexport const useMap = () => {\n  const context = useContext(MapContext);\n  if (context === undefined) {\n    throw new Error('useMap must be used within an MapProvider');\n  }\n  return context;\n};\n","import type * as React from 'react';\nimport { useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useMap } from './map.context';\n\ntype IMapInfoWindow = {\n  children: React.ReactNode;\n  /**\n   * This event is fired when the close button is clicked.\n   */\n  onCloseClick?: () => void;\n  position: google.maps.InfoWindowOptions['position'];\n};\n\n/**\n * Used as a wrapper to insert any React Component into\n */\nconst MapInfoWindow = ({ children, onCloseClick, position }: IMapInfoWindow) => {\n  const { infoWindow, infoWindowContainer } = useMap();\n\n  useEffect(() => {\n    if (infoWindow) {\n      if (position) {\n        infoWindow.setPosition(position);\n      }\n      if (onCloseClick) {\n        infoWindow.addListener('closeclick', onCloseClick);\n      }\n    }\n    return () => {\n      if (infoWindow) {\n        google.maps.event.clearListeners(infoWindow, 'closeclick');\n      }\n    };\n  }, [infoWindow, children, onCloseClick, position]);\n\n  return infoWindowContainer ? createPortal(children, infoWindowContainer) : null;\n};\n\nexport default MapInfoWindow;\n","import type * as React from 'react';\n\nexport type MapMarkerColor = {\n  active: string;\n  inactive: string;\n};\n\nexport const MAP_MARKER_COLOR: Record<string, MapMarkerColor> = {\n  POINTS_EXPLORER: { active: '#601b45', inactive: '#84235e' } as const,\n  DEFAULT: { active: 'rgb(0 22 59)', inactive: 'rgb(0 47 97)' } as const,\n} as const;\n\nexport type IMapMarker = {\n  /**\n   * if `iconActive` is provided, this will switch to use that icon\n   */\n  isActive?: boolean;\n  id: string | number;\n  icon?: string;\n  label?: string;\n  children: React.ReactNode;\n  color?: MapMarkerColor;\n  /**\n   * This event is fired when the marker is clicked.\n   */\n  onClick?: () => void;\n  onMouseOver?: () => void;\n  onMouseOut?: () => void;\n  markerOptions?: google.maps.MarkerOptions;\n  position: google.maps.MarkerOptions['position'];\n};\n\nconst MapMarker = ({ isActive, children }: IMapMarker) => (isActive ? children : null);\n\nexport default MapMarker;\n","import { useRef, useEffect } from 'react';\nimport { useMap } from './map.context';\n\nexport type IMapStaticMarker = {\n  icon?: google.maps.MarkerOptions['icon'];\n  position: google.maps.MarkerOptions['position'];\n  shouldShowCenterMarker?: boolean;\n};\n\nconst MapStaticMarker = ({ icon = '', position, shouldShowCenterMarker }: IMapStaticMarker) => {\n  const { map } = useMap();\n  const centerMarker = useRef<google.maps.Marker | null>(null);\n\n  useEffect(() => {\n    if (map && position) {\n      //if marker already drawn remove it.\n      if (centerMarker.current) centerMarker.current.setMap(null);\n\n      //draw new center marker on map\n      // eslint-disable-next-line no-new\n      centerMarker.current = shouldShowCenterMarker\n        ? new google.maps.Marker({\n            icon,\n            map,\n            position,\n          })\n        : null;\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [icon, map, JSON.stringify(position)]);\n\n  return null;\n};\n\nexport default MapStaticMarker;\n","import { useEffect, useRef, useState } from 'react';\nimport * as React from 'react';\nimport { useMap } from './map.context';\nimport type { IMapMarker, MapMarkerColor } from './map.marker';\nimport { MAP_MARKER_COLOR } from './map.marker';\nimport type { IMapStaticMarker } from './map.static-marker';\nimport type { ClusterIconStyle, MarkerClustererOptions } from '@googlemaps/markerclustererplus';\nimport MarkerClusterer from '@googlemaps/markerclustererplus';\n\nlet MARKER_Z_INDEX = 1;\n/**\n * Dynamically generates the price marker shape using SVG path syntax\n */\nconst getPriceMarkerPath: (width: number) => string = (width) => {\n  const height = 15;\n  const radius = 4;\n  const tailHeight = 10;\n  const tailWidth = 10;\n  return `\n    M 0 0\n    l -${tailWidth / 2} -${tailHeight}\n    h -${width / 2 - tailWidth / 2}\n    a ${radius} ${radius} 0 0 1 -${radius} -${radius}\n    v -${height}\n    a ${radius} ${radius} 0 0 1 ${radius} -${radius}\n    h ${width}\n    a ${radius} ${radius} 0 0 1 ${radius} ${radius}\n    v ${height}\n    a ${radius} ${radius} 0 0 1 -${radius} ${radius}\n    h -${width / 2 - tailWidth / 2}\n    z`;\n};\n/**\n * Generates a marker with text overlayed on top of it\n * @param label - the text to display on the marker\n */\nconst getPriceMarker = (\n  label: string,\n  isActive: boolean,\n  color?: MapMarkerColor\n): google.maps.Symbol => {\n  const estimatedAverageCharacterWidth = 8;\n  const width = label.length * estimatedAverageCharacterWidth;\n  const defaultColor = MAP_MARKER_COLOR['DEFAULT'];\n  return {\n    path: getPriceMarkerPath(width),\n    scale: 1,\n    fillColor: isActive\n      ? color?.active || defaultColor?.active\n      : color?.inactive || defaultColor?.inactive,\n    fillOpacity: 1,\n    strokeColor: 'rgb(228 228 228)',\n    strokeWeight: 1.2,\n    labelOrigin: new google.maps.Point(0, -22),\n  };\n};\n\ntype IMapMarkers = {\n  children: React.ReactNode;\n  clusterOptions?: MarkerClustererOptions;\n  /**\n   * If using an infoWindow, you must provide this prop in order to have it be closed when there is no active selection\n   */\n  activeMarker: IMapMarker['id'] | null;\n  iconClusterPath?: ClusterIconStyle['url'];\n};\ntype ModifiedMarker = { id?: string } & google.maps.MarkerOptions;\n\nconst MapMarkers = ({ children, clusterOptions, activeMarker, iconClusterPath }: IMapMarkers) => {\n  const { map, clusterer, setClusterer, infoWindow } = useMap();\n  const { current: markers } = useRef<Map<string, ModifiedMarker>>(new Map());\n  const [staticMarker, setStaticMarker] = useState<React.ReactNode>(null);\n\n  const markersToDisplay = React.useMemo(\n    () =>\n      React.Children.map(children, (child) => {\n        if (React.isValidElement<IMapMarker>(child)) {\n          // this is reducing the time it takes the add/remove marker useEffect to run by just under 1 sec per run\n          const { children: _children, ...propsWithoutChildren } = child.props;\n          return propsWithoutChildren;\n        }\n        if (React.isValidElement<IMapStaticMarker>(child)) {\n          setStaticMarker(child);\n        }\n        return null;\n      })?.filter(Boolean) as IMapMarker[],\n    [children]\n  );\n  const getMarker = (id?: IMapMarker['id']) =>\n    markers.get(id as string) as google.maps.Marker | undefined;\n  const addMarker = (m: IMapMarker) => {\n    if (map && m) {\n      const marker = new google.maps.Marker({\n        id: m.id,\n        icon: m.label\n          ? getPriceMarker(m.label, !!m.isActive, m.color)\n          : { url: m.icon, scaledSize: new google.maps.Size(22, 30) },\n        label: m.label\n          ? { text: m.label, color: '#ffffff', fontWeight: 'bold', fontFamily: 'Hilton Sans' }\n          : undefined,\n        position: m.position,\n        optimized: false,\n        visible: true,\n        zIndex: MARKER_Z_INDEX++,\n        clickable: true,\n        ...m.markerOptions,\n      } as ModifiedMarker);\n      let originalZindex = marker.getZIndex();\n      marker.addListener('mouseover', () => {\n        originalZindex = marker.getZIndex();\n        marker.setZIndex(MARKER_Z_INDEX + 1000);\n        if (m.onMouseOver) {\n          m.onMouseOver();\n        }\n      });\n      marker.addListener('mouseout', () => {\n        if (originalZindex) marker.setZIndex(originalZindex);\n        if (m.onMouseOut) {\n          m.onMouseOut();\n        }\n      });\n      marker.addListener('click', () => {\n        marker.setZIndex(MARKER_Z_INDEX + 1000);\n        if (m.onClick) {\n          m.onClick();\n        }\n      });\n      markers.set(m.id as string, marker as ModifiedMarker);\n      return marker;\n    }\n  };\n  const removeMarker = (marker: google.maps.Marker) => {\n    if (map && marker) {\n      google.maps.event.clearListeners(marker, 'mouseover');\n      markers.delete((marker as ModifiedMarker).id as string);\n      return marker;\n    }\n  };\n\n  useEffect(() => {\n    if (map && infoWindow) {\n      if (activeMarker) {\n        const mapMarker = getMarker(activeMarker);\n        if (mapMarker) {\n          infoWindow.open({\n            anchor: mapMarker as google.maps.MVCObject | google.maps.marker.AdvancedMarkerElement,\n            map: map as google.maps.Map | google.maps.StreetViewPanorama,\n            shouldFocus: false,\n          });\n        }\n      } else {\n        infoWindow.close();\n      }\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, infoWindow, activeMarker]);\n\n  useEffect(() => {\n    const shouldHaveCluster = iconClusterPath || clusterOptions;\n    if (map) {\n      if (shouldHaveCluster && !clusterer) {\n        setClusterer(\n          new MarkerClusterer(map, [], {\n            averageCenter: true,\n            minimumClusterSize: 4,\n            maxZoom: 9,\n            ignoreHidden: true,\n            styles: [\n              {\n                textSize: 16,\n                textColor: '#fff',\n                url: iconClusterPath,\n                height: 53,\n                width: 53,\n                anchorText: [16, 0],\n              },\n            ],\n            ...(clusterOptions || {}),\n          })\n        );\n        return;\n      }\n\n      // markers to update\n      markersToDisplay.forEach((m) => {\n        const marker = getMarker(m.id);\n        if (marker) {\n          // Anything that changes a label will require re-setting both label and icon on existing markers. Also update marker if icon state changes (no price => price marker for example)\n          marker.setIcon(\n            m.label\n              ? getPriceMarker(m.label, !!m.isActive, m.color)\n              : { url: m.icon || '', scaledSize: new google.maps.Size(22, 30) }\n          );\n          if (m.label !== marker.getLabel())\n            if (m.label)\n              marker.setLabel({\n                text: m.label,\n                color: '#ffffff',\n                fontWeight: 'bold',\n                fontFamily: 'Hilton Sans',\n              });\n            else marker.setLabel(null);\n        }\n      });\n      // markers to add (exclude any marker w/out an id as it doesnt represent a ctyhocn)\n      const markersToAdd = markersToDisplay\n        .filter(({ id }) => !getMarker(id as string))\n        .map((m) => addMarker(m))\n        .filter((m) => m !== undefined && !!(m as ModifiedMarker).id) as google.maps.Marker[];\n      if (clusterer) {\n        clusterer.addMarkers(markersToAdd);\n      } else {\n        markersToAdd.forEach((m) => {\n          m?.setMap(map);\n        });\n      }\n      // markers to remove\n      const toRemove = [...markers]\n        .filter(([id, _marker]) => !markersToDisplay.find((m) => m.id === id))\n        .map(([_id, marker]) => removeMarker(marker as google.maps.Marker))\n        .filter((m) => m !== undefined);\n\n      if (clusterer) {\n        clusterer.removeMarkers(toRemove);\n      } else {\n        toRemove.forEach((m) => {\n          m.setMap(null);\n        });\n      }\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, iconClusterPath, clusterOptions, clusterer, markersToDisplay]);\n\n  return (\n    <>\n      {staticMarker}\n      {children}\n    </>\n  );\n};\n\nexport default MapMarkers;\n","import type * as React from 'react';\nimport Image from 'next/legacy/image';\nimport { Link } from '@dx-ui/osc-link';\nimport { useMediaQuery } from 'usehooks-ts';\nimport cx from 'classnames';\n\nexport type InfoWindowProps = {\n  /**Full address of the property */\n  address?: string | null;\n  /**Brand code to render brand logo bug */\n  brandCode?: string;\n  /** pill badges that flag exceptional attributes of the property such as\n   * if a property is new or having a sale\n   */\n  hotelBadges?: React.ReactNode;\n  /** Add additional Custom tailwind styling for info-window container */\n  containerClassName?: string;\n  /** Property ctyhocn */\n  ctyhocn: string | null;\n  /**Directions object -\n   * title - sting that will display as link text, suggest to pass returned t function string value.\n   * uri - link URI\n   */\n  directionsLink?: {\n    linkCopy: string;\n    url: string;\n  };\n  /** hotel name to be used as info-window title and logo bug alt*/\n  name?: string | null;\n} & React.ComponentProps<'div'>;\n\nexport const InfoWindow = ({\n  address,\n  brandCode,\n  children,\n  containerClassName,\n  ctyhocn,\n  directionsLink,\n  hotelBadges,\n  name,\n}: InfoWindowProps) => {\n  const isMobile = useMediaQuery('(max-width: 640px)');\n\n  return (\n    <div className={cx('max-w-sm bg-[#ffffff] text-[#121212] shadow-sm', containerClassName)}>\n      <div\n        className=\"flex max-w-xs rtl:flex-row-reverse\"\n        data-testid={`${ctyhocn}-mapMarkerContent`}\n      >\n        {brandCode ? (\n          <div className=\"order-first flex size-8 items-center text-center sm:size-12 rtl:order-last\">\n            <Image\n              alt={`${name || ctyhocn} logo`}\n              className=\"object-contain\"\n              src={`/modules/assets/svgs/logos/bug/${brandCode}.svg`}\n              height={isMobile ? 32 : 48}\n              width={isMobile ? 32 : 48}\n            />\n          </div>\n        ) : null}\n        <div className=\"flex flex-col items-start text-left\">\n          {name ? <div className=\"w-full px-2 py-1 text-sm font-bold\">{name}</div> : null}\n          {hotelBadges ? <div className=\"px-2 \">{hotelBadges}</div> : null}\n          {address ? <div className=\"w-full px-2 py-1 text-xs\">{address}</div> : null}\n          {directionsLink?.url && directionsLink?.linkCopy ? (\n            <Link url={directionsLink.url} isNewWindow={true} className=\"px-2 text-xs sm:text-sm\">\n              {directionsLink.linkCopy}\n            </Link>\n          ) : null}\n          {children}\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default InfoWindow;\n","export * from './map-info-window';\n","export * from './info-window';\n","export * from './lib';\n","import { useCallback, useMemo } from 'react';\n\nimport type { HotelType } from '../../providers/app-provider/app-provider.types';\nimport { isAffiliateHotel, useMetrics, useRenovationChip, useWrappedRouter } from '../../hooks';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport type { GoogleCoordinate } from '../../utils';\nimport {\n  getCMAPrice,\n  getLengthOfStay,\n  isSpecialRatesDeeplinked,\n  prefixPublicAssetUriWithAppPrefix,\n} from '../../utils';\nimport { isLocalCurrencySameAsHotelCurrency } from '../hotel-card/utils/hotel-info-utils';\nimport MapInfoWindow from './map.info-window';\nimport MapMarker, { MAP_MARKER_COLOR } from './map.marker';\nimport MapStaticMarker from './map.static-marker';\nimport MapMarkers from './map.markers';\nimport type { HotelBadgeTypes } from '../hotel-card/hotel-badges';\nimport { HotelBadges } from '../hotel-card/hotel-badges';\nimport { InfoWindow } from '@dx-ui/osc-map';\nimport { formatAndConvertPrice, useCurrencyConversion } from '@dx-ui/osc-currency-converter';\nimport useShopMultiPropAvail from '../../hooks/use-shop-multi-prop-avail/use-shop-multi-prop-avail';\nimport { MAX_PRICE_PROPERTY_LIMIT } from '../../constants';\n\nexport const SearchMapMarkers = ({\n  centerCoordinate,\n  matchId,\n  sortedHotels,\n}: {\n  centerCoordinate: GoogleCoordinate | null;\n  matchId?: string | null;\n  sortedHotels: HotelType[];\n}) => {\n  const visibleHotels = sortedHotels\n    ?.slice(0, MAX_PRICE_PROPERTY_LIMIT - 1)\n    ?.map((hotel) => hotel.ctyhocn);\n\n  const { safeQueryParams: queryParameters, router } = useWrappedRouter();\n\n  const hasSpecialRatesDeepLinked = useMemo(\n    () => isSpecialRatesDeeplinked(queryParameters),\n    [queryParameters]\n  );\n  const { hashedData: hashedMPAData, isLoading: isMPADataLoading } = useShopMultiPropAvail({\n    ctyhocns: visibleHotels,\n    enabled: hasSpecialRatesDeepLinked,\n  });\n\n  const {\n    activeProperty,\n    selectedCurrency,\n    selectedCtyhocn,\n    shouldUsePoints,\n    pageType,\n    hasSpecialRate,\n  } = useAppState();\n  const { currenciesError, currenciesMap } = useCurrencyConversion();\n  const dispatch = useAppDispatch();\n  const metrics = useMetrics();\n  const { isPointsExplorer } = pageType;\n  const { renoChipConfig } = useRenovationChip();\n\n  const handleMapMarkerClicked = useCallback(\n    (ctyhocn: string, name?: string | null) => {\n      dispatch({ type: 'SET_PDP_CTYHOCN', payload: ctyhocn });\n      metrics.setBrandDetail({\n        ctyhocn,\n        view: 'Map',\n        name: name || '',\n        index: 1,\n      });\n    },\n    [dispatch, metrics]\n  );\n  const showPointsInMarker = !hasSpecialRate && shouldUsePoints;\n  const propertySearch = matchId?.includes('dx-hotel::');\n  return (\n    <MapMarkers\n      activeMarker={activeProperty || selectedCtyhocn}\n      iconClusterPath=\"/modules/assets/svgs/map/cluster/HI.svg\"\n    >\n      {/** Do not render static center marker if specific property searched */}\n      <MapStaticMarker\n        icon={prefixPublicAssetUriWithAppPrefix('/assets/map-pin-active.png')}\n        position={centerCoordinate}\n        shouldShowCenterMarker={!propertySearch}\n      />\n      {!isMPADataLoading &&\n        sortedHotels.map(\n          ({ address, brandCode, localization, ctyhocn, name, leadRate, amenityIds, display }) => {\n            const badges: HotelBadgeTypes[] = [];\n            if (hashedMPAData?.[ctyhocn]?.summary?.lowest?.ratePlan?.attributes?.includes('sale'))\n              badges.push('sale');\n            if (amenityIds.includes('newHotel')) badges.push('new');\n            if (renoChipConfig?.includes(ctyhocn)) badges.push('recentlyRenovated');\n\n            const position = {\n              lat: localization?.coordinate?.latitude || 0,\n              lng: localization?.coordinate?.longitude || 0,\n            };\n            const hasConfidentialRate =\n              hashedMPAData?.[ctyhocn]?.summary?.lowest?.ratePlan?.confidentialRates;\n            const currentHotel = hashedMPAData[ctyhocn];\n            const isNotBookable =\n              hashedMPAData &&\n              currentHotel &&\n              ((currentHotel.summary?.status?.type === 'NOT_AVAILABLE' &&\n                !queryParameters?.datesFlex) ||\n                currentHotel.summary?.status?.type === 'NOT_OPEN');\n\n            // do not display prices/points when flexDates enabled or avail status is effectively not bookable. Fallback to price if pts not avail\n            const displayPriceInMarker =\n              !isNotBookable && !queryParameters?.datesFlex && !hasConfidentialRate;\n            const displayPointsInMarker = showPointsInMarker && displayPriceInMarker;\n            const { totalRate, totalRateFmt } = getCMAPrice({\n              cmaTotalPriceIndicator:\n                hashedMPAData?.[ctyhocn]?.summary?.lowest?.cmaTotalPriceIndicator,\n              rateAmount: hashedMPAData?.[ctyhocn]?.summary?.lowest?.rateAmount,\n              rateAmountFmt: hashedMPAData?.[ctyhocn]?.summary?.lowest?.rateAmountFmt,\n              totalRate: hashedMPAData?.[ctyhocn]?.summary?.lowest?.amountAfterTax,\n              totalRateFmt: hashedMPAData?.[ctyhocn]?.summary?.lowest?.amountAfterTaxFmt,\n              lengthOfStay: getLengthOfStay(\n                queryParameters?.departureDate,\n                queryParameters?.departureDate\n              ),\n            });\n\n            const markerPrice = hasConfidentialRate\n              ? undefined\n              : isLocalCurrencySameAsHotelCurrency(\n                  selectedCurrency,\n                  localization?.currencyCode || ''\n                )\n              ? totalRateFmt\n              : formatAndConvertPrice({\n                  basePrice: !totalRate ? undefined : totalRate,\n                  currencyQueryError: !!currenciesError,\n                  fromCurrency: currenciesMap?.get('USD'),\n                  language: router.locale,\n                  toCurrency: currenciesMap.get(selectedCurrency || ''),\n                }) || totalRateFmt;\n\n            const markerPointsOrPrice =\n              hashedMPAData?.[ctyhocn]?.summary?.hhonors?.dailyRmPointsRateFmt || markerPrice;\n\n            const pointsRangeLabel = leadRate?.hhonors\n              ? `${leadRate?.hhonors.min?.dailyRmPointsRateRoundFmt} - ${leadRate?.hhonors.max?.dailyRmPointsRateRoundFmt}`\n              : '';\n            const markerLabel =\n              sortedHotels.length > 150\n                ? undefined\n                : displayPointsInMarker\n                ? isPointsExplorer\n                  ? pointsRangeLabel\n                  : markerPointsOrPrice\n                : displayPriceInMarker\n                ? markerPrice\n                : undefined;\n\n            const isActive = activeProperty === ctyhocn || selectedCtyhocn === ctyhocn;\n            const suppressBrandLogo = isAffiliateHotel(display);\n            const icon =\n              isActive && !isNotBookable && !isPointsExplorer\n                ? prefixPublicAssetUriWithAppPrefix('/assets/map-pin-active.png')\n                : isActive && isNotBookable && !isPointsExplorer\n                ? prefixPublicAssetUriWithAppPrefix('/assets/map-pin-alt-active.png')\n                : isNotBookable && !isPointsExplorer\n                ? prefixPublicAssetUriWithAppPrefix('/assets/map-pin-alt.png')\n                : prefixPublicAssetUriWithAppPrefix('/assets/map-pin.png');\n\n            return (\n              <MapMarker\n                isActive={isActive}\n                color={\n                  !!isPointsExplorer ||\n                  (!!showPointsInMarker &&\n                    hashedMPAData?.[ctyhocn]?.summary?.hhonors?.dailyRmPointsRateFmt)\n                    ? MAP_MARKER_COLOR['POINTS_EXPLORER']\n                    : undefined\n                }\n                icon={icon}\n                id={ctyhocn}\n                key={`map-marker-item-${ctyhocn}`}\n                label={markerLabel || undefined}\n                onClick={() => handleMapMarkerClicked(ctyhocn, name)}\n                onMouseOut={() => dispatch({ type: 'UNSET_HIGHLIGHTED_MAP_CTYHOCN' })}\n                onMouseOver={() =>\n                  dispatch({ type: 'SET_HIGHLIGHTED_MAP_CTYHOCN', payload: ctyhocn })\n                }\n                position={position}\n              >\n                <MapInfoWindow\n                  onCloseClick={() => dispatch({ type: 'SET_PDP_CTYHOCN', payload: null })}\n                  position={position}\n                >\n                  <InfoWindow\n                    address={address ? `${address.addressLine1}, ${address.city}` : ''}\n                    brandCode={suppressBrandLogo ? undefined : brandCode || 'HI'}\n                    ctyhocn={ctyhocn}\n                    hotelBadges={<HotelBadges badges={badges} />}\n                    name={name || ''}\n                    containerClassName='w-56 sm:w-fit !font-[\"Hilton_Sans\"]'\n                  />\n                </MapInfoWindow>\n              </MapMarker>\n            );\n          }\n        )}\n    </MapMarkers>\n  );\n};\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { useMap } from './map.context';\nimport { MAPS_URL, MAX_ZOOM } from '../../constants';\nimport { isBrowser } from '@dx-ui/utilities-is-browser';\nimport { useRouter } from 'next/router';\nimport { getLanguageDirection } from '@dx-ui/utilities-get-language-direction';\nimport styles from './map.module.css';\nimport { useHotelQuadrantsQuery } from '@dx-ui/queries-dx-shop-search-ui';\n\ntype IMap = {\n  children?: React.ReactNode;\n  /**\n   * setting `initialBounds` will use the google maps api method `fitBounds()` to set the zoom and center of the map\n   */\n  initialBounds?: google.maps.LatLngBoundsLiteral;\n  /**\n   * supports all options from https://developers.google.com/maps/documentation/javascript/reference/map#MapOptions\n   */\n  options?: google.maps.MapOptions;\n  /**\n   * whenever the map is panned or zoomed, the bounds of the map are changed.\n   */\n  onBoundsChange?: (bounds: google.maps.LatLngBoundsLiteral) => void;\n  /**\n   * whenever the map is panned, the bounds of the map are changed.\n   */\n  onPan?: (bounds: google.maps.LatLngBoundsLiteral) => void;\n  /**\n   * whenever the map is zoomed, the bounds of the map are changed.\n   */\n  onZoom?: () => void;\n  /**\n   * for development, it is nice to see the bounds that are passed for the initial view\n   */\n  showInitialBounds?: boolean;\n  /**\n   * for debug, see quad node boundaries and additional debug info\n   */\n  showQuadNodeBounds?: boolean;\n};\n/**\n * This is the base for the Google Maps JavaScript API\n *\n * https://developers.google.com/maps/documentation/javascript/reference/map\n */\nexport const MapBase = ({\n  children,\n  initialBounds,\n  options,\n  onBoundsChange,\n  onPan,\n  onZoom,\n  showInitialBounds,\n  showQuadNodeBounds,\n}: IMap) => {\n  const { apiKey, setMap, setInfoWindow, setInfoWindowContainer, map } = useMap();\n  const mapRef = useRef<HTMLDivElement>(null);\n  const infoWindowRef = useRef<HTMLDivElement>(null);\n  const hasDrawnInitialBoundingBox = useRef(false);\n  const hasDrawnInitialQuadNodes = useRef(false);\n  const router = useRouter();\n  const resetMap = useRef(true); // reset map on every search 'Update' cta click\n  const isMapInitialized = useRef(false);\n\n  const { data: quadNodesData } = useHotelQuadrantsQuery(\n    {},\n    {\n      enabled: isBrowser,\n    }\n  );\n\n  useEffect(() => {\n    const listeners: google.maps.MapsEventListener[] = [];\n\n    const initMap = () => {\n      // empty the array, but keep the reference\n      listeners.length = 0;\n      const map = new google.maps.Map(mapRef.current as HTMLDivElement, {\n        clickableIcons: false,\n        disableDefaultUI: true,\n        zoomControl: true,\n        zoomControlOptions: {\n          position:\n            getLanguageDirection(router.locale) === 'rtl'\n              ? google.maps.ControlPosition.LEFT_TOP\n              : google.maps.ControlPosition.RIGHT_TOP,\n        },\n        restriction: {\n          latLngBounds: { north: 85, south: -85, west: -180, east: 180 },\n          strictBounds: true,\n        },\n        maxZoom: MAX_ZOOM,\n        ...options,\n      });\n\n      if (onBoundsChange) {\n        listeners.push(\n          map.addListener('bounds_changed', () => {\n            const bounds = map.getBounds();\n            if (bounds) {\n              onBoundsChange(bounds.toJSON());\n            }\n          })\n        );\n      }\n      if (onPan) {\n        listeners.push(\n          map.addListener('dragend', () => {\n            const bounds = map.getBounds();\n            if (bounds) {\n              onPan(bounds.toJSON());\n            }\n          })\n        );\n      }\n      if (onZoom) {\n        const handleTilesLoaded = () => {\n          if (!isMapInitialized.current) {\n            isMapInitialized.current = true;\n            listeners.push(map.addListener('zoom_changed', () => onZoom()));\n          }\n        };\n        listeners.push(map.addListener('tilesloaded', handleTilesLoaded));\n      }\n      setMap(map);\n\n      if (infoWindowRef.current) {\n        setInfoWindowContainer(infoWindowRef.current);\n        const newInfoWindow = new google.maps.InfoWindow({\n          content: infoWindowRef.current,\n          disableAutoPan: true,\n        });\n        setInfoWindow(newInfoWindow);\n      }\n    };\n\n    if (!window.google) {\n      const script = document.createElement('script');\n      script.src = `${MAPS_URL}&key=${apiKey}&language=${router.locale}`;\n      script.defer = true;\n      script.async = true;\n\n      script.onload = initMap;\n      document.body.appendChild(script);\n    } else {\n      initMap();\n    }\n\n    return () => {\n      listeners.forEach((listener) => listener.remove());\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  //if bounds changes due to shallow route re-calc bounds!\n  React.useEffect(() => {\n    if (initialBounds && map && resetMap) {\n      map.setZoom(9);\n      map.fitBounds(initialBounds);\n      resetMap.current = false;\n    }\n    router.events.on('routeChangeComplete', () => {\n      resetMap.current = true;\n    });\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [JSON.stringify(initialBounds), map, resetMap.current]);\n\n  //Show debug initial bounds bbox\n  React.useEffect(() => {\n    if (showInitialBounds && map && initialBounds && !hasDrawnInitialBoundingBox.current) {\n      // eslint-disable-next-line no-new\n      new google.maps.Rectangle({ map, bounds: initialBounds, strokeWeight: 1, fillOpacity: 0.1 });\n      hasDrawnInitialBoundingBox.current = true;\n    }\n  }, [showInitialBounds, map, initialBounds]);\n\n  //Show debug of hotel quad nodes\n  React.useEffect(() => {\n    if (\n      showQuadNodeBounds &&\n      map &&\n      !hasDrawnInitialQuadNodes.current &&\n      quadNodesData?.hotelQuadrants\n    ) {\n      quadNodesData?.hotelQuadrants?.forEach((node) => {\n        //rectangle representing node\n        new google.maps.Rectangle({\n          map,\n          bounds: {\n            south: Math.max(node?.bounds?.southwest?.latitude ?? -89.99, -89.99),\n            west: Math.max(node?.bounds?.southwest?.longitude ?? -179.99, -179.99),\n            north: Math.min(node?.bounds?.northeast?.latitude ?? 89.99, 89.99),\n            east: Math.min(node?.bounds?.northeast?.longitude ?? 179.99, 179.99),\n          },\n          strokeWeight: 1,\n          fillOpacity: 0.1,\n        });\n        //debug info corresponding to node\n        new google.maps.Marker({\n          position: {\n            lat:\n              ((node?.bounds?.northeast?.latitude ?? -89.99) +\n                (node?.bounds?.southwest?.latitude ?? 89.99)) /\n              2,\n            lng:\n              ((node?.bounds?.northeast?.longitude ?? 179.99) +\n                (node?.bounds?.southwest?.longitude ?? -179.99)) /\n              2,\n          },\n          map,\n          label: {\n            className: styles.node_debug_info,\n            text: node?.id || 'no id',\n          } as string | google.maps.MarkerLabel,\n        });\n      });\n      hasDrawnInitialQuadNodes.current = true;\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, quadNodesData?.hotelQuadrants]);\n\n  return (\n    <>\n      <div\n        className=\"absolute left-0 m-0 size-full p-0 md:top-0\"\n        id=\"searchGoogleMaps\"\n        ref={mapRef}\n      />\n      <div data-testid=\"mapMarker\" ref={infoWindowRef} />\n      {children}\n    </>\n  );\n};\n","import type * as React from 'react';\nimport { useState } from 'react';\nimport { MapContext } from './map.context';\nimport type MarkerClusterer from '@googlemaps/markerclustererplus';\n\ntype MapProviderProps = { apiKey: string; children: React.ReactNode };\n\nconst MapProvider = ({ apiKey, children }: MapProviderProps) => {\n  const [clusterer, setClusterer] = useState<MarkerClusterer>();\n  const [infoWindow, setInfoWindow] = useState<google.maps.InfoWindow>();\n  const [infoWindowContainer, setInfoWindowContainer] = useState<HTMLDivElement>();\n  const [map, setMap] = useState<google.maps.Map>();\n\n  return (\n    <MapContext.Provider\n      value={{\n        apiKey,\n        clusterer,\n        infoWindow,\n        infoWindowContainer,\n        map,\n        setClusterer,\n        setInfoWindow,\n        setInfoWindowContainer,\n        setMap,\n      }}\n    >\n      {children}\n    </MapContext.Provider>\n  );\n};\n\nexport default MapProvider;\n","import { env } from '../../constants';\nimport { useWrappedRouter } from '../../hooks';\nimport { MapBase } from './map.base';\nimport MapProvider from './map.provider';\n\nexport const Map = ({\n  handleBoundsChange,\n  hasUserPanned,\n  hasUserZoomed,\n  initialBounds,\n  children,\n}: {\n  handleBoundsChange: (newBounds: google.maps.LatLngBoundsLiteral) => void;\n  hasUserPanned: React.MutableRefObject<boolean>;\n  hasUserZoomed: React.MutableRefObject<boolean>;\n  initialBounds: google.maps.LatLngBoundsLiteral;\n  children: React.ReactNode;\n}) => {\n  const { safeQueryParams: queryParameters } = useWrappedRouter();\n\n  return (\n    <MapProvider apiKey={env.MAP_API_KEY}>\n      <MapBase\n        initialBounds={initialBounds}\n        onBoundsChange={(bounds) => handleBoundsChange(bounds)}\n        onPan={() => {\n          // need to know if user interacted with the map\n          hasUserPanned.current = true;\n        }}\n        onZoom={() => (hasUserZoomed.current = true)}\n        showInitialBounds={queryParameters?.showBbox}\n        showQuadNodeBounds={queryParameters?.isDebugQuadTrees as boolean}\n      >\n        {children}\n      </MapBase>\n    </MapProvider>\n  );\n};\n","import { useCallback } from 'react';\nimport type { HotelType } from '../../providers/app-provider/app-provider.types';\nimport { isAffiliateHotel, useMetrics, useRenovationChip, useWrappedRouter } from '../../hooks';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport { prefixPublicAssetUriWithAppPrefix } from '../../utils';\nimport { isLocalCurrencySameAsHotelCurrency } from '../hotel-card/utils/hotel-info-utils';\nimport MapInfoWindow from './map.info-window';\nimport MapMarker, { MAP_MARKER_COLOR } from './map.marker';\nimport MapStaticMarker from './map.static-marker';\nimport MapMarkers from './map.markers';\nimport { getMapMarkerIcon, getMarkerPrice } from './map.utils';\nimport { InfoWindow } from '@dx-ui/osc-map';\nimport type { HotelBadgeTypes } from '../hotel-card/hotel-badges';\nimport { HotelBadges } from '../hotel-card/hotel-badges';\nimport { formatAndConvertPrice, useCurrencyConversion } from '@dx-ui/osc-currency-converter';\n\nexport const LocationsMapMarkers = ({\n  centerCoordinate,\n  hotelsInBounds,\n  visibleHotels,\n}: {\n  centerCoordinate: {\n    lat: number;\n    lng: number;\n  };\n  hotelsInBounds: Record<string, HotelType>;\n  visibleHotels: string[];\n}) => {\n  const { activeProperty, selectedCurrency, selectedCtyhocn, shouldUsePoints } = useAppState();\n  const { currenciesError, currenciesMap } = useCurrencyConversion();\n  const dispatch = useAppDispatch();\n  const metrics = useMetrics();\n  const { router } = useWrappedRouter();\n  const { renoChipConfig } = useRenovationChip();\n  const disableMarkerPrice = !!(visibleHotels.length > 150);\n\n  const handleMapMarkerClicked = useCallback(\n    (ctyhocn: string, name?: string | null) => {\n      dispatch({ type: 'SET_PDP_CTYHOCN', payload: ctyhocn });\n      metrics.setBrandDetail({\n        ctyhocn,\n        view: 'Map',\n        name: name || '',\n        index: 1,\n      });\n    },\n    [dispatch, metrics]\n  );\n\n  return (\n    <MapMarkers\n      activeMarker={activeProperty || selectedCtyhocn}\n      iconClusterPath=\"/modules/assets/svgs/map/cluster/HI.svg\"\n    >\n      <MapStaticMarker\n        icon={prefixPublicAssetUriWithAppPrefix('/assets/map-pin-active.png')}\n        position={centerCoordinate}\n        shouldShowCenterMarker={true}\n      />\n      {visibleHotels.map((hotelCtyhocn) => {\n        const hotel = hotelsInBounds[hotelCtyhocn];\n        if (hotel) {\n          const {\n            ctyhocn,\n            localization,\n            brandCode: hotelBrandCode,\n            name,\n            address,\n            amenityIds,\n          } = hotel;\n\n          const badges: HotelBadgeTypes[] = [];\n          if (amenityIds.includes('newHotel')) badges.push('new');\n          if (renoChipConfig?.includes(ctyhocn)) badges.push('recentlyRenovated');\n\n          const coordinate = localization?.coordinate || null;\n          const price =\n            currenciesMap.size &&\n            !isLocalCurrencySameAsHotelCurrency(\n              selectedCurrency || '',\n              hotel?.localization?.currencyCode || ''\n            )\n              ? formatAndConvertPrice({\n                  basePrice: !hotel?.leadRate?.lowest?.rateAmount\n                    ? undefined\n                    : hotel.leadRate?.lowest?.rateAmount,\n                  currencyQueryError: !!currenciesError,\n                  fromCurrency: currenciesMap?.get('USD'),\n                  language: router.locale,\n                  toCurrency: currenciesMap.get(selectedCurrency || ''),\n                }) || hotel?.leadRate?.lowest?.rateAmountFmt\n              : hotel?.leadRate?.lowest?.rateAmountFmt;\n          const points = hotel?.leadRate?.hhonors?.lead?.dailyRmPointsRateNumFmt;\n\n          if (!coordinate) return null;\n          const position = { lat: coordinate.latitude, lng: coordinate.longitude };\n          const isActive = activeProperty === ctyhocn || selectedCtyhocn === ctyhocn;\n          const suppressBrandLogo = isAffiliateHotel(hotel?.display);\n          return (\n            // eslint-disable-next-line jsx-a11y/mouse-events-have-key-events\n            <MapMarker\n              isActive={isActive}\n              color={\n                !!shouldUsePoints && !!points ? MAP_MARKER_COLOR['POINTS_EXPLORER'] : undefined\n              }\n              icon={prefixPublicAssetUriWithAppPrefix(\n                getMapMarkerIcon(isActive, disableMarkerPrice)\n              )}\n              id={ctyhocn}\n              key={`map-marker-item-${ctyhocn}`}\n              label={getMarkerPrice(disableMarkerPrice, shouldUsePoints, points, price)}\n              onClick={() => handleMapMarkerClicked(ctyhocn, name)}\n              onMouseOut={() => dispatch({ type: 'UNSET_HIGHLIGHTED_MAP_CTYHOCN' })}\n              onMouseOver={() =>\n                dispatch({ type: 'SET_HIGHLIGHTED_MAP_CTYHOCN', payload: ctyhocn })\n              }\n              position={position}\n            >\n              <MapInfoWindow\n                onCloseClick={() => dispatch({ type: 'SET_PDP_CTYHOCN', payload: null })}\n                position={position}\n              >\n                <InfoWindow\n                  address={address ? `${address.addressLine1}, ${address.city}` : ''}\n                  brandCode={suppressBrandLogo ? undefined : hotelBrandCode || 'HI'}\n                  ctyhocn={ctyhocn}\n                  hotelBadges={<HotelBadges badges={badges} />}\n                  name={name || ''}\n                  containerClassName='w-56 sm:w-fit !font-[\"Hilton-Sans\"]'\n                />\n              </MapInfoWindow>\n            </MapMarker>\n          );\n        }\n        return null;\n      })}\n    </MapMarkers>\n  );\n};\n","import { MapListToggleButton } from '../map-list-toggle-button/map-list-toggle-button';\nimport { Spinner } from '@dx-ui/osc-spinner';\nimport { ZoomInForPricing } from '../zoom-in-for-pricing';\nimport { SearchMapMarkers } from './map.markers.search';\nimport { MAX_PRICE_PROPERTY_LIMIT } from '../../constants';\nimport { Map } from './map';\nimport { useAppState } from '../../providers/app-provider';\nimport { HotelSearchResultSummaryPanel } from '../hotel-search-result-summary/hotel-search-result-summary';\nimport { useConductricsSelection } from '@dx-ui/framework-conductrics';\nimport { useTranslation } from 'next-i18next';\nimport cx from 'classnames';\nimport type { ActiveFiltersState } from '../filters/filter.constants';\nimport type { MutableRefObject, RefObject } from 'react';\nimport type { DebouncedState } from 'usehooks-ts';\nimport type { HotelType } from '../../providers/app-provider/app-provider.types';\nimport { useWrappedRouter, useMapListToggle } from '../../hooks';\nimport { LocationsMapMarkers } from './map.markers.locations';\n// eslint-disable-next-line lodash/import-scope\nimport type { DebouncedFunc } from 'lodash';\nimport type { AmenityItem } from '../filters/suggested-filters';\nimport type { Maybe } from '@dx-ui/gql-types';\nimport { useConfigRule } from '@dx-ui/framework-config-rule-provider';\n\ntype MapProps = {\n  showSpinner: boolean | undefined;\n  visibleFilteredInBoundHotels: string[];\n  handleBoundsChange:\n    | DebouncedState<(newBounds: google.maps.LatLngBoundsLiteral) => void>\n    | DebouncedFunc<(newBounds: google.maps.LatLngBoundsLiteral) => void>;\n  hasUserPanned: MutableRefObject<boolean>;\n  hasUserZoomed: MutableRefObject<boolean>;\n  initialBounds:\n    | {\n        south: number;\n        west: number;\n        north: number;\n        east: number;\n      }\n    | google.maps.LatLngBoundsLiteral;\n  sortedHotels?: HotelType[];\n  filterChange: (activeFiltersState: Partial<ActiveFiltersState>) => void;\n  saleFilterCount?: number | undefined;\n  showSaleFilter?: boolean;\n  isFindingHotels: boolean;\n  h1SearchResultsContent?: string;\n  hotelCounterRef: RefObject<HTMLDivElement>;\n  pageHeading1Title?: string;\n  centerCoordinate: {\n    lat: number;\n    lng: number;\n  };\n  amenities: AmenityItem[] | undefined;\n  matchId?: Maybe<string>;\n  counterMessage?: {\n    customCounterMessage: string;\n    customCounterSRMessage: string;\n  };\n};\nexport const MapBlock = ({\n  showSpinner,\n  visibleFilteredInBoundHotels,\n  handleBoundsChange,\n  hasUserPanned,\n  hasUserZoomed,\n  initialBounds,\n  sortedHotels,\n  filterChange,\n  saleFilterCount,\n  showSaleFilter,\n  isFindingHotels,\n  h1SearchResultsContent,\n  hotelCounterRef,\n  pageHeading1Title,\n  amenities,\n  matchId,\n  centerCoordinate,\n  counterMessage,\n}: MapProps) => {\n  const { isListVisible, hotelsInBounds } = useAppState();\n  const { isSlimView, isDesktopMapView } = useMapListToggle();\n  const { t } = useTranslation('search-page');\n  const {\n    router: { asPath },\n  } = useWrappedRouter();\n  const isSearchPage = asPath.includes('/search/');\n  const { taggedConfig } = useConfigRule();\n  const shouldShowMap = isSearchPage ? !!taggedConfig?.config['showMap'] : true;\n  const { isLoaded: isConductricsLoaded } = useConductricsSelection('');\n\n  return (\n    shouldShowMap && (\n      <div\n        className={cx('@container z-0 h-screen text-center max-md:w-full', {\n          'max-md:invisible absolute md:sticky md:top-0': isListVisible,\n          'max-sm:z-1 relative': !isListVisible,\n          'relative overflow-hidden': isDesktopMapView,\n        })}\n        data-testid=\"mapContainer\"\n      >\n        {/* Map/List toggle button */}\n        {shouldShowMap && !isListVisible && (\n          <HotelSearchResultSummaryPanel\n            amenities={amenities}\n            customCounterMessage={counterMessage?.customCounterMessage}\n            customCounterSRMessage={counterMessage?.customCounterSRMessage}\n            hotelCount={sortedHotels?.length ?? 0}\n            isFindingHotels={isFindingHotels}\n            isConductricsLoaded={isConductricsLoaded}\n            matchId={matchId}\n            onFilterChange={(activeFiltersState: ActiveFiltersState) =>\n              filterChange(activeFiltersState)\n            }\n            pageHeading1Title={\n              pageHeading1Title ??\n              t('searchResults', {\n                name: h1SearchResultsContent,\n              })\n            }\n            saleFilter={{\n              showSaleFilter: !!showSaleFilter,\n              saleFilterCount: saleFilterCount ?? 0,\n            }}\n            visibleHotels={visibleFilteredInBoundHotels}\n            showingHotelDivRef={hotelCounterRef}\n          />\n        )}\n        <div className={cx('relative h-full overflow-hidden')}>\n          <div className=\"absolute top-3 z-20 ltr:left-3 rtl:right-3\">\n            <MapListToggleButton showMapListToggleButton={!isSlimView} />\n          </div>\n\n          {showSpinner && (\n            <div\n              className={cx('z-1 bg-bg absolute ml-4 mt-4 p-2 rtl:mr-4', {\n                'top-12': !isSlimView,\n              })}\n            >\n              <Spinner className=\"text-hilton-alt\" size=\"lg\" />\n            </div>\n          )}\n          {/* Show zoom in overlay on map if we have > 150 hotels on map */}\n          {visibleFilteredInBoundHotels.length > MAX_PRICE_PROPERTY_LIMIT ? (\n            <div className=\"flex justify-center\">\n              <ZoomInForPricing />\n            </div>\n          ) : null}\n          <Map\n            handleBoundsChange={handleBoundsChange}\n            hasUserPanned={hasUserPanned}\n            hasUserZoomed={hasUserZoomed}\n            initialBounds={initialBounds}\n          >\n            {isSearchPage && sortedHotels ? (\n              <SearchMapMarkers\n                centerCoordinate={centerCoordinate}\n                matchId={matchId}\n                sortedHotels={sortedHotels}\n              />\n            ) : (\n              <LocationsMapMarkers\n                centerCoordinate={centerCoordinate}\n                hotelsInBounds={hotelsInBounds}\n                visibleHotels={visibleFilteredInBoundHotels}\n              />\n            )}\n          </Map>\n        </div>\n      </div>\n    )\n  );\n};\n","import type * as React from 'react';\nimport { isBrowser } from '@dx-ui/utilities-is-browser';\nimport { useIsClient } from 'usehooks-ts';\nimport getBreakpoint from '../../utils/get-breakpoint';\nimport type { LabelValue } from '../../utils';\n\ntype DropdownProps = {\n  options: LabelValue[];\n  handleChange: (event: React.ChangeEvent<HTMLSelectElement>) => void;\n  value?: string | number | readonly string[];\n  label: string;\n};\nconst Dropdown = ({ options, handleChange, value, label }: DropdownProps) => {\n  const isClient = useIsClient();\n  const isMobile = isBrowser && window.innerWidth < (getBreakpoint('sm', true) as number);\n\n  return isClient ? (\n    <div className=\"z-1 ml-2 mr-1 w-32 text-sm md:ml-0 md:w-64\" data-testid=\"sortByDropdown\">\n      <label\n        className=\"label mr-1 flex h-7 justify-center whitespace-nowrap pb-1 text-xs font-semibold tracking-tight md:text-sm rtl:mx-0\"\n        htmlFor=\"selectSortBy\"\n      >\n        {label}\n      </label>\n      <select\n        aria-label={label}\n        className=\"form-select w-32 text-sm leading-4 md:w-full md:text-base\"\n        data-testid=\"selectSortBy\"\n        id=\"selectSortBy\"\n        name={label}\n        onChange={(evt) => handleChange(evt)}\n        role=\"presentation\"\n        style={{ ...(isMobile && { margin: 0 }) }}\n        title={label}\n        value={value}\n      >\n        {options?.map(\n          (option) =>\n            !!option.isVisible && (\n              <option\n                data-testid={option.testIdLabel}\n                disabled={option.isDisabled}\n                key={option.value}\n                value={option.value}\n              >\n                {option.label}\n              </option>\n            )\n        )}\n      </select>\n    </div>\n  ) : null;\n};\n\nexport default Dropdown;\n","import type * as React from 'react';\nimport type { SortByDropDownValues } from '../../utils';\nimport { isSortByPoints, isSortByPrice } from '../../utils';\nimport Dropdown from './dropdown-ui';\nimport { useMetrics, useGetSortByOptions } from '../../hooks';\nimport { useTranslation } from 'next-i18next';\nimport { useAppState, useAppDispatch } from '../../providers/app-provider';\nimport { sendReward } from '@dx-ui/framework-conductrics';\nimport { GOALS } from '../../constants';\n\ntype SortByDropDownProps = {\n  isInvalidOrUnavailableOffer?: boolean;\n  onChange?: () => void;\n  filteredHotelCount?: number;\n};\n\nexport const SortByDropDown = ({\n  filteredHotelCount,\n  isInvalidOrUnavailableOffer,\n  onChange,\n}: SortByDropDownProps) => {\n  const { t } = useTranslation('sort-by-drop-down');\n  const { sortType, shouldUsePoints } = useAppState();\n  const dispatch = useAppDispatch();\n\n  const metrics = useMetrics();\n\n  const { sortByOptions: sortOptions } = useGetSortByOptions({\n    filteredHotelsCount: filteredHotelCount,\n    isInvalidOrUnavailableOffer,\n  });\n\n  const handleUsePointsOnSortChange = (sortBy: SortByDropDownValues) => {\n    //When switching to -> Points andshouldUsePointsis not selected, force usePoints select\n    if (isSortByPoints(sortBy) && !shouldUsePoints) {\n      dispatch({ type: 'SET_USE_POINTS', payload: true });\n    }\n    //When switching to -> Price  andshouldUsePointsis selected, force usePoints de-select\n    if (isSortByPrice(sortBy) && shouldUsePoints) {\n      dispatch({ type: 'SET_USE_POINTS', payload: false });\n    }\n    return;\n  };\n\n  const handleChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n    dispatch({ type: 'SET_SORT_TYPE', payload: event.target.value as SortByDropDownValues });\n    dispatch({ type: 'SET_PAGINATION_INDEX', payload: 0 });\n    sendReward(GOALS.sortEngagement);\n    metrics.propertySearchSort(event.target.value);\n    if (onChange) {\n      onChange();\n    }\n    handleUsePointsOnSortChange(event.target.value as SortByDropDownValues);\n  };\n\n  if (sortType === null || !sortOptions.length) return null;\n\n  return (\n    <Dropdown\n      handleChange={handleChange}\n      label={t('label')}\n      options={sortOptions}\n      value={sortType}\n    />\n  );\n};\n","export * from './sort-by-drop-down';\n","import { useAuth } from '@dx-ui/framework-auth-provider';\nimport { useWrappedRouter } from '../../../hooks';\nimport { useTranslation } from 'next-i18next';\nimport { useEffect, useRef } from 'react';\nimport cx from 'classnames';\n\nexport const PointsMessage = ({ className }: { className?: string }) => {\n  const { guestInfo } = useAuth();\n  const { t } = useTranslation('use-points');\n  const { router } = useWrappedRouter();\n  const pointsAvailable = guestInfo?.hhonors?.summary?.points;\n  const ref = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (ref?.current && router.query?.['pointsLogin']) return ref.current.focus();\n  }, [router.query]);\n\n  return (\n    <div className={cx('text-tier-diamond text-sm font-bold', className)} ref={ref} tabIndex={-1}>\n      <span className=\"sr-only\" aria-live=\"assertive\">\n        {t('numPoints_a11y', { numPoints: pointsAvailable })}\n      </span>\n      <span aria-hidden=\"true\" className=\"text-nowrap\">\n        {t('numPoints', { numPoints: pointsAvailable })}\n      </span>\n    </div>\n  );\n};\n","import { Dialog } from '@dx-ui/osc-dialog-v2';\nimport { LoginIFrame, type LoginResponse } from '@dx-ui/osc-login';\nimport { generateSigninUrl, persistSessionState } from '../../utils';\nimport { useCallback } from 'react';\nimport { useAuth } from '@dx-ui/framework-auth-provider';\nimport { env } from '../../constants';\nimport { useWrappedRouter } from '../../hooks';\nimport { useAppState } from '../../providers/app-provider';\nimport { useFilterState } from '../../providers/filter-provider';\n\nexport const LoginModal = ({\n  onClose,\n  onLogin,\n  showLoginModal,\n  title,\n}: {\n  onClose: () => void;\n  onLogin?: () => void;\n  showLoginModal: boolean;\n  title: string;\n}) => {\n  const { login } = useAuth();\n  const { router } = useWrappedRouter();\n  const { shouldUsePoints, selectedCurrency, sortType } = useAppState();\n  const activeFiltersState = useFilterState();\n  const lang = router.locale as string;\n  const forgetInfoUrl = env.PARTNER_FORGET_INFO_LINK.replace('/__LANG__/', `/${lang}/`);\n  const options = {\n    showCreatePassword: false,\n    forgetInfoLink: { url: forgetInfoUrl },\n    secureInfoLink: { url: env.GLOBAL_PRIVACY_URL },\n    signInLink: { url: generateSigninUrl(router.asPath, lang) },\n  };\n  const onSignInAttempt = useCallback(\n    async (resp: LoginResponse) => {\n      persistSessionState({ shouldUsePoints, selectedCurrency, sortType, activeFiltersState });\n      if (resp?.data) {\n        await login(resp);\n      }\n    },\n    [activeFiltersState, login, selectedCurrency, shouldUsePoints, sortType]\n  );\n  const handleLogin = async (resp: LoginResponse) => {\n    await onSignInAttempt?.(resp);\n    if (!resp.error) {\n      onClose();\n      onLogin?.();\n    }\n  };\n  return (\n    <Dialog isOpen={showLoginModal} onDismiss={onClose} size=\"md\" title={title}>\n      <LoginIFrame\n        data-testid=\"loginIframe\"\n        frameSrc={generateSigninUrl(router?.asPath, lang)}\n        options={options}\n        onLoginAttempt={handleLogin}\n        onClose={onClose}\n        title={title}\n      />\n    </Dialog>\n  );\n};\n","import { useAuth } from '@dx-ui/framework-auth-provider';\nimport { DISPLAY_NUM_OF_AVAILABLE_POINTS, GOALS } from '../../../constants';\nimport { useGetMVTSelections, useWrappedRouter } from '../../../hooks';\nimport { useAppState } from '../../../providers/app-provider';\nimport { Trans, useTranslation } from 'next-i18next';\n\nimport { useState } from 'react';\nimport { LoginModal } from '../../login-modal/login-modal';\nimport { PointsMessage } from './points-message';\nimport { logError } from '@dx-ui/framework-logger';\nimport { sendReward } from '@dx-ui/framework-conductrics';\n\nexport const DisplayPoints = () => {\n  const { t } = useTranslation('use-points');\n  const { shouldUsePoints } = useAppState();\n  const { isAuthenticated } = useAuth();\n  const [showLoginModal, setShowLoginModal] = useState(false);\n  const { router } = useWrappedRouter();\n\n  const {\n    isLoaded,\n    isMVTVariant: { b: isMVT },\n  } = useGetMVTSelections({\n    agentId: DISPLAY_NUM_OF_AVAILABLE_POINTS.agentId,\n    isProvisional: shouldUsePoints,\n  });\n\n  const onLogin = () => {\n    const params = new URLSearchParams(window.location.search);\n    params.set('redeemPts', 'true');\n    params.set('pointsLogin', 'true');\n    router\n      .replace(\n        {\n          pathname: router.pathname,\n          query: params.toString(),\n        },\n        undefined,\n        { shallow: true }\n      )\n      .catch((error) => logError('DISPLAY_POINTS', error, 'Error redirecting to login page'));\n  };\n\n  const handleSignInButtonClick = () => {\n    setShowLoginModal(true);\n    sendReward(GOALS.pointsLoginClick);\n  };\n\n  const buttonLabel = t('SRSignInToBookWithPoints');\n  if (!isMVT || !isLoaded) return null;\n  return isAuthenticated ? (\n    <PointsMessage />\n  ) : (\n    <>\n      <div className=\"text-tier-diamond text-nowrap text-sm\">\n        <Trans\n          ns=\"use-points\"\n          i18nKey=\"signInToBookWithPoints\"\n          components={{\n            SignInLink: (\n              <button\n                onClick={handleSignInButtonClick}\n                type=\"button\"\n                className=\"font-normal underline\"\n                aria-label={buttonLabel}\n                aria-live=\"polite\"\n              >\n                Sign in now\n              </button>\n            ),\n          }}\n        />\n      </div>\n      <LoginModal\n        showLoginModal={showLoginModal}\n        onClose={() => setShowLoginModal(false)}\n        onLogin={onLogin}\n        title={t('signInNowToPay')}\n      />\n    </>\n  );\n};\n","import cx from 'classnames';\nimport { useTranslation } from 'next-i18next';\nimport { useGetUsePoints, useMetrics, useWrappedRouter } from '../../hooks';\nimport { useAppDispatch, useAppState } from '../../providers/app-provider';\nimport { InfoPopup } from '@dx-ui/osc-info-popup';\nimport { useIsClient } from 'usehooks-ts';\nimport { DisplayPoints } from './display-points-mvt/display-points';\nimport { useState } from 'react';\nimport { useCurrencyConversion } from '@dx-ui/osc-currency-converter';\n\nexport type UsePointsProps = {\n  isInvalidOrUnavailableOffer?: boolean;\n  onChange?: () => void;\n};\n\nexport const UsePoints = ({ isInvalidOrUnavailableOffer, onChange }: UsePointsProps) => {\n  const { router } = useWrappedRouter();\n  const { t } = useTranslation('use-points');\n  const { shouldUsePoints, selectedCurrency } = useAppState();\n  const dispatch = useAppDispatch();\n  const metrics = useMetrics();\n  const isClient = useIsClient();\n  const [a11yText, setA11yText] = useState('');\n  const { currenciesMap } = useCurrencyConversion();\n  const selecteCurrencyDesc = currenciesMap?.get(selectedCurrency || 'USD')?.description;\n\n  const {\n    isDisabled: isPointsDisabled,\n    isChecked: shouldUsePointsChecked,\n    infoPopupMessage,\n  } = useGetUsePoints(isInvalidOrUnavailableOffer);\n\n  const handleUsePointsChange = () => {\n    const a11yMessage = !shouldUsePointsChecked\n      ? t('priceChangeToPoints')\n      : t('rateChangedToCurrency', { currencyName: selecteCurrencyDesc });\n    setA11yText(a11yMessage);\n    dispatch({ type: 'SET_USE_POINTS', payload: !shouldUsePoints });\n    void metrics.trackUsePointsChecked();\n    if (onChange) onChange();\n    setTimeout(() => setA11yText(''), 1000);\n  };\n\n  return isClient && router.isReady ? (\n    <div className=\"ml-2 mr-0 flex-col pt-5 md:mx-2 md:px-2 rtl:mb-2\">\n      <div className=\"flex\">\n        <label className=\"label label-inline-reverse rtl:label-inline-reverse text-nowrap\">\n          <span\n            className={cx('text-sm font-semibold lg:text-lg rtl:pl-2 rtl:pr-1', {\n              'text-text-disabled': isPointsDisabled,\n            })}\n          >\n            {t('usePoints')}\n          </span>\n          <input\n            checked={shouldUsePointsChecked}\n            className=\"form-checkbox\"\n            data-testid=\"searchByUsePoints\"\n            disabled={isPointsDisabled}\n            onChange={handleUsePointsChange}\n            type=\"checkbox\"\n          />\n          {a11yText ? <span className=\"sr-only\">{a11yText}</span> : null}\n        </label>\n        {infoPopupMessage && (\n          <span className=\"m-1 flex\">\n            <InfoPopup testId=\"dayUseRateDisclaimer\" label={t('pointsInfo')}>\n              <span className=\"flex w-40\">{t(infoPopupMessage)}</span>\n            </InfoPopup>\n          </span>\n        )}\n      </div>\n      <DisplayPoints />\n    </div>\n  ) : null;\n};\n","import type { HotelType } from '../../../providers/app-provider/app-provider.types';\nimport type { GeocodeAddress } from '@dx-ui/queries-dx-shop-search-ui';\n\nexport const filterStateCountryBrandHashedHotels = (\n  address: Pick<GeocodeAddress, 'state' | '_id' | 'city' | 'country'> | null | undefined,\n  brandCode: string | undefined,\n  hashedHotelSummaryOptionsHotelData: Record<string, HotelType>\n) =>\n  Object.keys(hashedHotelSummaryOptionsHotelData || {})\n    .filter((ctyhocn) => {\n      const currentHotel = hashedHotelSummaryOptionsHotelData[ctyhocn];\n      if (brandCode && currentHotel && brandCode !== currentHotel.brandCode) return false;\n      if (address) {\n        if (\n          address?.country &&\n          address?.country !== hashedHotelSummaryOptionsHotelData[ctyhocn]?.address?.country\n        )\n          return false;\n        if (\n          address?.state &&\n          address?.state !== hashedHotelSummaryOptionsHotelData[ctyhocn]?.address?.state\n        )\n          return false;\n      }\n\n      return true;\n    })\n    .reduce((obj, key) => {\n      const hotel = hashedHotelSummaryOptionsHotelData[key];\n      if (hotel) obj[key] = hotel;\n      return obj;\n    }, {} as Record<string, HotelType>);\n\nexport const filterRegionHashedHotels = (\n  countriesInRegion: string[],\n  hashedHotelSummaryOptionsHotelData: Record<string, HotelType>\n) =>\n  Object.keys(hashedHotelSummaryOptionsHotelData || {})\n    .filter((ctyhocn) => {\n      const currentHotel = hashedHotelSummaryOptionsHotelData[ctyhocn];\n      return countriesInRegion?.includes(currentHotel?.address?.country || '');\n    })\n    .reduce((obj, key) => {\n      const hotel = hashedHotelSummaryOptionsHotelData[key];\n      if (hotel) obj[key] = hotel;\n      return obj;\n    }, {} as Record<string, HotelType>);\n","import { keepPreviousData, type UseQueryOptions } from '@tanstack/react-query';\nimport { isBrowser } from '@dx-ui/utilities-is-browser';\nimport type { HotelSummaryOptionsQuery, HotelQuadrant } from '@dx-ui/queries-dx-shop-search-ui';\nimport { HotelSummaryOptionsDocument } from '@dx-ui/queries-dx-shop-search-ui';\n\nexport const generateHotelSummaryOptionsQueryArray = ({\n  language,\n  enabled,\n  quadNodes,\n  guestLocationCountry,\n}: {\n  language: string;\n  enabled: boolean;\n  quadNodes?: HotelQuadrant[];\n  guestLocationCountry?: string;\n}) =>\n  quadNodes?.reduce((arr, node) => {\n    arr.push({\n      queryKey: [\n        HotelSummaryOptionsDocument,\n        {\n          language,\n          input: {\n            quadrantId: node?.id,\n            guestLocationCountry,\n          },\n        },\n      ],\n      enabled: isBrowser && enabled,\n      placeholderData: keepPreviousData,\n      retry: 2,\n    });\n    return arr;\n  }, [] as UseQueryOptions<HotelSummaryOptionsQuery>[]) || [];\n","import type { Maybe, HotelQuadrantBounds, HotelQuadrant } from '@dx-ui/queries-dx-shop-search-ui';\n\ntype NodeFilterCountry = {\n  countryCode: string;\n  stateCode?: string | null;\n};\n\ntype NodeFilter = {\n  brandCode?: string | null;\n  countries?: NodeFilterCountry[] | null;\n};\n\nexport type GoogleCoordinate = {\n  lat: number;\n  lng: number;\n};\n\n/**\n * Determines if two rectangular bounds intercept. Basically this method confirms that there is no overlap between rectangles and then returns the result logically NOT'ed.\n *\n * @param bounds1\n * @param bounds2\n */\nfunction isOverlappingBounds(\n  bounds1?: Maybe<HotelQuadrantBounds>,\n  bounds2?: Maybe<HotelQuadrantBounds>\n) {\n  return (\n    typeof bounds1?.northeast?.latitude !== 'undefined' &&\n    typeof bounds2?.southwest?.latitude !== 'undefined' &&\n    typeof bounds1?.southwest?.latitude !== 'undefined' &&\n    typeof bounds2?.northeast?.latitude !== 'undefined' &&\n    !(\n      bounds1?.northeast?.latitude < bounds2?.southwest?.latitude ||\n      bounds1?.southwest?.latitude > bounds2?.northeast?.latitude ||\n      bounds1?.southwest?.longitude > bounds2?.northeast?.longitude ||\n      bounds1?.northeast?.longitude < bounds2?.southwest?.longitude\n    )\n  );\n}\n\n/**\n * Determines if the quad node matches the filter criteria.\n *\n * @param {HotelQuadrant} validNode\n * @param {NodeFilter} filter\n */\nfunction isMatchFilter(validNode: HotelQuadrant, filter?: NodeFilter) {\n  let brandCodeMatch = true;\n  let stateOrCountryMatch = true;\n  if (filter) {\n    // Filter by brand codes if provided\n    if (filter?.brandCode) {\n      brandCodeMatch = Boolean(validNode?.brands.find((brand) => brand.code === filter?.brandCode));\n    }\n    // Filter by country/state if provided\n    if (brandCodeMatch && filter.countries && validNode.countries) {\n      stateOrCountryMatch = filter.countries.some((c) => {\n        const nodeCountry = validNode?.countries?.find(\n          (nodeCountry) => nodeCountry.code === c.countryCode\n        );\n        return !!(nodeCountry && (!c.stateCode || nodeCountry?.states?.includes(c.stateCode)));\n      });\n    }\n  }\n  return brandCodeMatch && stateOrCountryMatch;\n}\n\n/**\n * Determines the list of quad tree nodes within the bounds provided. Able to also further filter nodes by a list of brands, states, or countries.\n *\n * @param {HotelQuadrant[]} validNodes\n * @param {Maybe<HotelQuadrantBounds>} bounds\n * @param {NodeFilter} filter\n */\nconst getBoundNodes = (\n  validNodes: HotelQuadrant[],\n  bounds: Maybe<HotelQuadrantBounds>,\n  filter?: NodeFilter\n): HotelQuadrant[] => {\n  //if we dont have any nodes or a value for bounds is missing return an empty arr\n  if (validNodes.length === 0 || !bounds?.northeast || !bounds.southwest) return [];\n\n  // If the bounding box crosses the international time line, create a bounding box for each side of the time line,\n  // and get the quad nodes for each.\n  const { southwest, northeast } = bounds || {};\n\n  if (southwest?.longitude && northeast?.longitude && southwest?.longitude > northeast?.longitude) {\n    return [\n      ...getBoundNodes(\n        validNodes,\n        { southwest, northeast: { ...northeast, longitude: 180 } },\n        filter\n      ),\n      ...getBoundNodes(\n        validNodes,\n        { southwest: { ...southwest, longitude: -180 }, northeast },\n        filter\n      ),\n    ];\n  }\n\n  // Filter quad nodes based on whether it overlaps with the provided bounding box and matches the filter criteria.\n  return validNodes\n    .filter((validNode) => isOverlappingBounds(validNode?.bounds, bounds))\n    .filter((validNode) => isMatchFilter(validNode, filter));\n};\n\nexport default getBoundNodes;\n","import { useIsClient } from 'usehooks-ts';\nimport { useHotelQuadrantsQuery } from '@dx-ui/queries-dx-shop-search-ui';\nimport { generateHotelSummaryOptionsQueryArray } from './utils/generate-hotel-summary-options-query-array';\nimport { useQueries } from '@tanstack/react-query';\nimport getBoundNodes from '../../utils/get-bounds-nodes/get-bounds-nodes';\nimport { toNestedBounds } from '../../providers/app-provider/app-provider.utils';\nimport { useLocation } from '@dx-ui/framework-location-provider';\n\nexport const useQuadNodes = ({\n  language,\n  enabled,\n  bounds,\n  brandCode,\n  stateOrCountryOrRegionFilter,\n}: {\n  language: string;\n  enabled: boolean;\n  bounds: google.maps.LatLngBoundsLiteral;\n  brandCode?: string;\n  stateOrCountryOrRegionFilter:\n    | {\n        countries:\n          | {\n              countryCode: string;\n              stateCode: string;\n            }[]\n          | null;\n      }\n    | undefined;\n}) => {\n  const isClient = useIsClient();\n\n  const { country: guestLocationCountry, isLoading: isGuestLocationLoading } = useLocation();\n\n  const { data: quadNodesData, isLoading: isQuadNodesDataLoading } = useHotelQuadrantsQuery(\n    {},\n    {\n      enabled: isClient && enabled,\n    }\n  );\n  const quadNodes = getBoundNodes(quadNodesData?.hotelQuadrants || [], toNestedBounds(bounds), {\n    ...stateOrCountryOrRegionFilter,\n    brandCode,\n  });\n\n  const isHotelSummaryQueryEnabled =\n    Boolean(quadNodesData) && enabled && !isQuadNodesDataLoading && !isGuestLocationLoading;\n\n  const queryArr = generateHotelSummaryOptionsQueryArray({\n    language,\n    enabled: isHotelSummaryQueryEnabled,\n    quadNodes,\n    guestLocationCountry,\n  });\n  //parallel fetch zoned hotel summary options\n  const results = useQueries({ queries: queryArr });\n\n  return {\n    isFetching: results.some((result) => result.isFetching),\n    isInitialRender: results.some(\n      (result) => result.status === 'success' || result.status === 'error'\n    ),\n  };\n};\n","import { useQuery } from '@tanstack/react-query';\nimport type { THsoHotel } from './utils/get-hashed-hotel-summary-options-data-from-cache';\nimport { logError } from '@dx-ui/framework-logger';\n\nconst fetchHotelSummaryOptions = async ({\n  queryKey,\n}: {\n  queryKey: [string];\n}): Promise<THsoHotel> => {\n  const [url] = queryKey;\n\n  const response = await fetch(url);\n\n  if (!response.ok) {\n    logError(\n      'Shop HSO blob fetch',\n      `${response.status}: ${response.statusText}`,\n      'failed to fetch blob'\n    );\n    throw new Error(`Error ${response.status}: ${response.statusText}`);\n  }\n\n  return response.json();\n};\n\nexport const useBlob = ({\n  enabled,\n  hotelSummaryExtractUrl,\n}: {\n  enabled: boolean;\n  hotelSummaryExtractUrl: string;\n}) => {\n  const { isFetching, status, data } = useQuery({\n    queryKey: [hotelSummaryExtractUrl],\n    queryFn: fetchHotelSummaryOptions,\n    enabled,\n  });\n\n  return {\n    data,\n    isFetching,\n    isInitialRender: status === 'success' || status === 'error',\n    status,\n  };\n};\n","import { useQueryClient } from '@tanstack/react-query';\nimport type { GeocodeAddress, GeocodePlaceType } from '@dx-ui/queries-dx-shop-search-ui';\nimport { getHashedHotelSummaryOptionsDataFromCache } from './utils/get-hashed-hotel-summary-options-data-from-cache';\n\nimport {\n  filterStateCountryBrandHashedHotels,\n  filterRegionHashedHotels,\n} from './utils/filter-state-country-brand-hashed-hotels';\nimport * as React from 'react';\nimport { useGetRegions } from '../use-get-regions';\nimport { useQuadNodes } from './use-quad-nodes';\nimport { useBlob } from './use-blob';\nimport type { HotelType } from '../../providers/app-provider/app-provider.types';\n\nconst useHotelSummaryOptions = ({\n  initialHashedHotelSummaryOptionsData,\n  bounds,\n  brandCode,\n  language,\n  address,\n  type,\n  isInitialRender,\n  matchName,\n  blobEnabled = false,\n  hotelSummaryExtractUrl,\n}: {\n  initialHashedHotelSummaryOptionsData: Record<string, HotelType>;\n  bounds: google.maps.LatLngBoundsLiteral;\n  brandCode?: string;\n  language: string;\n  address: Pick<GeocodeAddress, '_id' | 'city' | 'country' | 'state'> | null | undefined;\n  type: GeocodePlaceType | undefined;\n  isInitialRender: React.MutableRefObject<boolean>;\n  matchName?: string;\n  blobEnabled?: boolean;\n  hotelSummaryExtractUrl?: string;\n}) => {\n  const isRegions = type === 'region';\n  const { countryCodes: countriesInRegion } = useGetRegions({\n    isTypeRegion: isRegions,\n    regionName: matchName || '',\n    isEnabled: isRegions,\n  });\n  const queryClient = useQueryClient();\n\n  const stateOrCountryFilter =\n    address && !isRegions\n      ? {\n          countries: ['country', 'state'].includes(type || '')\n            ? [{ countryCode: address?.country || '', stateCode: address?.state || '' }]\n            : null,\n        }\n      : undefined;\n\n  let stateOrCountryOrRegionFilter = stateOrCountryFilter;\n  if (isRegions) {\n    stateOrCountryOrRegionFilter = {\n      countries:\n        countriesInRegion?.map((country) => ({\n          countryCode: country,\n          stateCode: '',\n        })) || null,\n    };\n  }\n  const isBlobEnabledWithExtractURL = !!hotelSummaryExtractUrl && blobEnabled;\n  const {\n    data: blobData,\n    isFetching: isFetchingBlobNodes,\n    isInitialRender: isInitialRenderBlobNodes,\n    status: blobStatus,\n  } = useBlob({\n    enabled: isBlobEnabledWithExtractURL,\n    hotelSummaryExtractUrl: hotelSummaryExtractUrl ?? '',\n  });\n\n  const isFallbackToNodes = !isBlobEnabledWithExtractURL || blobStatus === 'error';\n  const { isFetching: isFetchingQuadNodes, isInitialRender: isInitialRenderQuadNodes } =\n    useQuadNodes({\n      language,\n      enabled: isFallbackToNodes,\n      bounds,\n      brandCode,\n      stateOrCountryOrRegionFilter,\n    });\n\n  const { isFetching, isInitial } = !isFallbackToNodes\n    ? { isFetching: isFetchingBlobNodes, isInitial: isInitialRenderBlobNodes }\n    : { isFetching: isFetchingQuadNodes, isInitial: isInitialRenderQuadNodes };\n\n  if (isInitial) isInitialRender.current = false;\n\n  const hotelDataToUse =\n    !isFallbackToNodes && blobData\n      ? blobData\n      : getHashedHotelSummaryOptionsDataFromCache(\n          queryClient,\n          initialHashedHotelSummaryOptionsData\n        );\n\n  const filteredHotelDataToUse = React.useMemo(() => {\n    if (isFetching) return {};\n    return isRegions && countriesInRegion\n      ? filterRegionHashedHotels(countriesInRegion, hotelDataToUse)\n      : filterStateCountryBrandHashedHotels(address, brandCode, hotelDataToUse);\n  }, [address, brandCode, countriesInRegion, hotelDataToUse, isFetching, isRegions]);\n\n  return {\n    hashedHotelSummaryOptionsHotelData: filteredHotelDataToUse,\n    isFetching,\n  };\n};\n\nexport default useHotelSummaryOptions;\n","import { useTranslation } from 'react-i18next';\nimport { VERTICAL_SPACE_SAVINGS } from '../constants';\nimport { useGetMVTSelections } from './use-get-mvt-selections';\n\nexport const useVerticalSpaceMVT = () => {\n  const { t } = useTranslation('filters');\n  const {\n    isLoaded: isVerticalSpaceMVTLoaded,\n    isMVTVariant: {\n      b: isVerticalSpaceVar1,\n      c: isVerticalSpaceVar2,\n      d: isVerticalSpaceVar3,\n      e: isVerticalSpaceVar4,\n      f: isVerticalSpaceVar5,\n      g: isVerticalSpaceVar6,\n      h: isVerticalSpaceVar7,\n      i: isVerticalSpaceVar8,\n    },\n  } = useGetMVTSelections({\n    agentId: VERTICAL_SPACE_SAVINGS.agentId,\n    MVTVariants: ['b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'],\n  });\n  const filterAndSortLabel = t('filterAndSort');\n  const isFilterAndSortInAccordion =\n    isVerticalSpaceVar1 || isVerticalSpaceVar5 || isVerticalSpaceVar6;\n  const isSuggestedFiltersInHorizontalScroll =\n    isVerticalSpaceVar4 || isVerticalSpaceVar6 || isVerticalSpaceVar8;\n  const isShorterSuggestedFilters =\n    isVerticalSpaceVar3 || isVerticalSpaceVar5 || isVerticalSpaceVar7;\n  const isCurrencyAndSortInAllFiltersModal =\n    isVerticalSpaceVar2 || isVerticalSpaceVar7 || isVerticalSpaceVar8;\n\n  return isVerticalSpaceMVTLoaded\n    ? {\n        filterAndSortLabel,\n        isFilterAndSortInAccordion,\n        isShorterSuggestedFilters,\n        isCurrencyAndSortInAllFiltersModal,\n        isSuggestedFiltersInHorizontalScroll,\n        isVerticalSpaceVar8,\n      }\n    : {};\n};\n","import type * as React from 'react';\nimport { ControlNext, ControlBack } from '@dx-ui/osc-controls';\nimport { useTranslation } from 'next-i18next';\n\nexport type Pagination = {\n  /**\n   * `id` of the element pagination controls for usage with aria-controls\n   */\n  controls?: string;\n  /**\n   * Current active page (zero based)\n   */\n  current?: number;\n  /**\n   * The text displayed in front of the page numbers and used for a11y\n   */\n  label?: string;\n  /**\n   * Whether to visually hide the label\n   */\n  hideLabel?: boolean;\n  /**\n   * Controls whether or not to disable buttons at either end\n   */\n  loop?: boolean;\n  /**\n   * Total number of pages\n   */\n  total?: number;\n  /**\n   * When the page is selected from the dropdown\n   */\n  onChange?: (val: number) => void;\n  onPreviousClick?: React.DOMAttributes<HTMLButtonElement>['onClick'];\n  onNextClick?: React.DOMAttributes<HTMLButtonElement>['onClick'];\n  /** Pagination item id */\n  groupId?: string;\n};\n\n/**\n * Use when you need a control to cycle through \"pages\" or any paginated data.\n *\n * Pass the `current` page _(zero-based)_ and `total` pages, if you want to allow the select element to jump to a specific page, include the `onChange` callback. You can include listeners for `onPreviousClick` and `onNextClick` to change pages one by one.\n */\nexport const Pagination: React.FC<React.PropsWithChildren<Pagination>> = ({\n  controls,\n  loop,\n  onChange,\n  onPreviousClick,\n  onNextClick,\n  hideLabel,\n  current = 0,\n  total = 0,\n  label,\n  groupId,\n}) => {\n  const { t } = useTranslation('osc-pagination');\n  // eslint-disable-next-line prefer-spread\n  const pageNumbers = Array.apply(null, Array(total));\n  const prevDisabled = loop ? false : current === 0;\n  const nextDisabled = loop ? false : current === total - 1;\n\n  const paginationLabel = label ?? t('defaultLabel');\n\n  return (\n    <div className=\"pointer-events-auto flex items-center justify-center space-x-4\">\n      <div className=\"sr-only\" aria-live=\"polite\">{`${paginationLabel} ${t('count', {\n        current: current + 1,\n        total,\n      })}`}</div>\n      <ControlBack\n        id={groupId ? `pagination-left-${groupId}` : 'pagination-left'}\n        size=\"lg\"\n        aria-controls={controls}\n        onClick={onPreviousClick}\n        disabled={prevDisabled}\n        label={`${t('previousLabel', { label: paginationLabel })}, ${t('count', {\n          current: current - 1 < 0 ? total : current,\n          total,\n        })}`}\n      />\n      <div className=\"flex items-center justify-center\">\n        {onChange ? (\n          <>\n            {!hideLabel && <span className=\"pr-2\">{paginationLabel}</span>}\n            <label>\n              <span className=\"sr-only\">{t('prompt', { label: paginationLabel })}</span>\n              <select\n                aria-controls={controls}\n                className=\"form-select\"\n                value={current}\n                onBlur={(e) => onChange(parseInt(e.currentTarget.value, 10))}\n                onChange={(e) => onChange(parseInt(e.currentTarget.value, 10))}\n              >\n                {pageNumbers.map((_, index) => (\n                  // eslint-disable-next-line react/no-array-index-key\n                  <option key={index} value={index}>\n                    {index + 1}\n                  </option>\n                ))}\n              </select>\n            </label>\n            <span className=\"pl-2\">{t('count', { current: undefined, total })}</span>\n          </>\n        ) : (\n          <span className=\"text-center\">\n            {!hideLabel && `${paginationLabel} `}\n            <span className=\"tabular-nums\">{t('count', { current: current + 1, total })}</span>\n          </span>\n        )}\n      </div>\n      <ControlNext\n        id={groupId ? `pagination-right-${groupId}` : 'pagination-right'}\n        size=\"lg\"\n        aria-controls={controls}\n        onClick={onNextClick}\n        disabled={nextDisabled}\n        label={`${t('nextLabel', { label: paginationLabel })}, ${t('count', {\n          current: current + 1 >= total ? 1 : current + 2,\n          total,\n        })}`}\n      />\n    </div>\n  );\n};\n\nexport default Pagination;\n","export * from './lib/pagination';\n","type GetAspectRatioUrlParams = {\n  /** Aspect ratio based URL from CMS */\n  src?: string | null;\n  /** Carousel container width */\n  width: number;\n};\n\nconst BREAK_POINTS = Object.freeze({\n  small: 640,\n  medium: 768,\n  large: 1024,\n  extraLarge: 1280,\n  twoExtraLarge: 1440,\n});\n\nexport type BreakPoints = keyof typeof BREAK_POINTS;\n\n/**\n * Returns a set of aspect ratio based URLs (with 2x and 3x options) bucketed by breakpoints\n * @param src Aspect ratio based URL from CMS\n * @param width desired image width\n * @returns imgUrl, twoXimgUrl, threeXImgUrl\n */\nexport const getAspectRatioUrl = ({ src, width }: GetAspectRatioUrlParams) => {\n  if (!src) return { imgUrl: null, twoXimgUrl: null, threeXImgUrl: null };\n\n  const srcUrl = new URLSearchParams(src);\n\n  const cw = srcUrl.has('cw') ? parseInt(srcUrl.get('cw') as string) : null;\n  const ch = srcUrl.has('ch') ? parseInt(srcUrl.get('ch') as string) : null;\n\n  // If a crop width or height is not present in the URL, return null as we cant do the math to return the appopriate img src. Contact the CMS team in case we see broken assets\n  if (!cw || !ch) return { imgUrl: null, twoXimgUrl: null, threeXImgUrl: null };\n\n  const aspectRatioVariants = Object.entries(BREAK_POINTS).reduce(\n    (accum, [breakPointName, breakPointWidth]) => {\n      const imgUrl = `${src}&rw=${breakPointWidth}&rh=${Math.round((breakPointWidth * ch) / cw)}`;\n\n      const twoXimgUrl = `${src}&rw=${breakPointWidth * 2}&rh=${\n        Math.round((breakPointWidth * ch) / cw) * 2\n      }`;\n\n      const threeXImgUrl = `${src}&rw=${breakPointWidth * 3}&rh=${\n        Math.round((breakPointWidth * ch) / cw) * 3\n      }`;\n\n      return { ...accum, [breakPointName]: { imgUrl, twoXimgUrl, threeXImgUrl } };\n    },\n    {} as Record<BreakPoints, { imgUrl: string; twoXimgUrl: string; threeXImgUrl: string }>\n  );\n\n  switch (true) {\n    case width <= BREAK_POINTS.small:\n      return aspectRatioVariants.small;\n\n    case width > BREAK_POINTS.small && width <= BREAK_POINTS.medium:\n      return aspectRatioVariants.medium;\n\n    case width > BREAK_POINTS.medium && width <= BREAK_POINTS.large:\n      return aspectRatioVariants.large;\n\n    case width > BREAK_POINTS.large && width <= BREAK_POINTS.extraLarge:\n      return aspectRatioVariants.extraLarge;\n\n    default:\n      return aspectRatioVariants.twoExtraLarge;\n  }\n};\n","export * from './lib/get-aspect-ratio-url';\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"node_debug_info\":\"map_node_debug_info___9ET3\"};"],"names":["useGetCompareHotelsInfo","ctyhocns","centerCoordinate","displayHotelCount","isEnabled","useAppState","hasConnectingRooms","selectedCurrency","shouldUsePoints","pageType","hasSpecialRate","useWrappedRouter","safeQueryParams","router","isDateFlex","queryParameters","datesFlex","useCurrencyConversion","currenciesError","currenciesMap","useTranslation","t","isPointsExplorer","isDateSearch","isDreams","numOfChildren","rooms","map","room","children","reduce","previous","current","hotelsQueryArr","ctyhocn","queryKey","HotelDocument","language","ratios","placeholderData","keepPreviousData","retry","staleTime","enabled","results","useQueries","queries","hotelData","hotel","data","useRenovationChip","renoChipConfig","useShopMultiPropAvail","mpaConstraints","asPath","includes","hashedData","isLoading","hotelInfo","images","hotelAmenities","isRenoHotel","currentHotelPriceInfo","priceInfoCollection","undefined","isIndividualRoomsOnly","isIndividualRoomLimitExceeded","statusCode","hotelRateInfo","getMPAHotelRate","usePoints","priceInfo","locale","getHotelLeadRateInfo","badges","isNewHotel","push","isSaleHotel","getDistanceFromCenterFmt","localization","coordinate","distanceFmt","name","tripAdvisorLocationSummary","parking","amenities","roomTypes","parkingType","getParkingType","getRoomTypes","slice","masterImage","getCompareImage","carousel","ctaHref","ctaLabel","messages","filter","amenity","distance","isFetching","some","result","isMPALoading","CompareSkeleton","numHotels","div","className","Array","from","length","fill","_","i","CompareModal","hotelsToCompare","isOpen","onDismiss","onStopCompare","isDesktop","useMediaQuery","isMobile","isTablet","dispatch","useAppDispatch","showRemoveCTA","modalSize","getModalSize","compareCtyhocnsCount","onRemoveHotel","ctyhocnToRemove","type","payload","newCtyhocnList","MOBILE_COMPARE_LIMIT","TABLET_COMPARE_LIMIT","handleOnDismiss","event","isStopCompare","preventDefault","stopPropagation","Dialog","bottomContent","button","onClick","handleStopComparing","setTimeout","size","title","dialogClassName","stickyHeader","table","tr","td","Image","alt","altText","width","height","src","url","unoptimized","data-testid","th","scope","HotelBadges","span","TripAdvisorRating","showReviewCount","isCompare","numReviews","RateInfoMessages","rateMessages","Icon","ul","li","id","p","icon","Link","target","showNewWindowIcon","text","onCompare","useState","showCompareModal","setShowCompareModal","compareHotelsToggle","closeCompareModal","showCompareBar","data-testId","InfoMessageBanner","bannerClassName","aria-live","compareHotelsSelected","compareLimit","DESKTOP_COMPARE_LIMIT","disabled","handleCompareHotels","sendReward","GOALS","compareHotelsCTAClick","hasFreeParking","hasValetParking","price","valetParkingCharge","chargeAmountFmt","hasSelfParking","selfParkingCharge","types","Set","forEach","suite","add","features","feature","numBeds","count","sort","a","b","localeCompare","image","getNoPhotoAvailable","getAspectRatioUrl","imgUrl","noPhoto","variants","CompareHotelsToggle","onChange","toggleRef","useRef","useGetMVTSelections","agentId","COMPARE_ONBOARDING","MVTVariants","isProvisional","isLoaded","isMVTVariant","c","useLocalStorage","isOnboarded","setIsOnboarded","isCompareToolTipOpen","setIsCompareToolTipOpen","handleToolTipClose","isOnboardingVarB","focus","showCompareOnboardingToolTip","isOnboardingMVTLoaded","FeatureToolTip","absolutePosition","tailPosition","message","containerClass","shouldShowFeatureToolTip","cta","label","isOnboardingVarC","input","handleInputChange","compareHotelsToggleOn","ref","checked","useEffect","handleKeyDown","key","document","addEventListener","removeEventListener","cx","tabIndex","role","ControlClose","CurrencyConverter","metrics","useMetrics","activeFiltersState","useFilterState","handleChange","currency","fromCurrency","toCurrency","converted","value","get","currencyEngagement","convert","priceFilter","trackCurrencyConverterClick","currencyCode","OSCCurrencyConverter","showDefaultOption","hasStackedDisplay","selectProps","findAmenity","wantedAmenityId","find","calculateSuggestedFilterCounts","filtersList","visibleHotels","hotelsInBounds","suggestedFilter","inBoundsHotel","amenityIds","isAtleastOneSuggestedFilter","suggestedFilterCounts","calculateTopSuggestedFilters","maxSuggestedFilters","topSuggestedFilters","Object","keys","topFilter","smallestCountKey","filterA","filterB","aCount","bCount","smallestCount","topSuggestedFilter","HIGHEST_CONVERTING_AMENITIES","CONGFIGURED_SUGGESTED_FILTERS","useSuggestedFilters","configFromRule","matchId","saleFilter","HIGHEST_AMENITIES_SUGGESTED_FILTERS","isHighestConvertingAmenitiesTest","isConducticsLoaded","isHighestConvertingAmenitiesVariant","useFeatureToggleConfig","config","suggestedSaleFilter","useMemo","showSaleFilter","sale","HotelAttributeIds","saleFilterCount","defaultConfig","suggestedFilters","MAX_SUGGESTED_AMENITY_FILTERS_WITH_SALE_FILTER","hasSalesFilter","NUM_AMENITIES_SUGGESTIONS_WANTED","getSuggestedFiltersQuant","SuggestedFilterButtons","isConductricsLoaded","isFindingHotels","onFilterCriteriaChange","suggestedFiltersOrderedList","values","showSuggestedFilters","useVerticalSpaceMVT","isSuggestedFiltersInHorizontalScroll","SuggestedFiltersShimmer","shouldShowTitle","SuggestedFiltersTitle","SuggestedFiltersAmenities","suggestedFilterOrderedList","h2","isShorterSuggestedFilters","TaxonomyList","labelledBy","testId","listItemClassname","amenityListCount","amenitySelected","amenityFilters","attributeFilters","SuggestedFilterButton","isAmenitySelected","aria-hidden","a11yText","setA11yText","selectedAmenity","setSelectedAmenity","resetSuggestedFilter","amenityId","attributeIndex","indexOf","amenityIndex","splice","updatedActiveFiltersState","handleOnClick","suggestedFiltersA11YText","suggestedFilterEngagement","trackSuggestedFilters","aria-label","AmenityIcons","HotelCounter","currentPageIndex","customMessage","customSRMessage","isListVisible","pageStart","MAX_PROPERTIES_PER_LIST_VIEW_PAGE","pageEnd","srMessage","srCounter","setSrCounter","interval","setInterval","clearInterval","aria-atomic","LogInBanner","isClient","useIsClient","useAuth","login","isAuthenticated","showLoginModal","setShowLoginModal","closeLoginModal","lang","options","showCreatePassword","forgetInfoLink","env","forgetInfoUrl","PARTNER_FORGET_INFO_LINK","replace","secureInfoLink","GLOBAL_PRIVACY_URL","signInLink","generateSigninUrl","onSignInAttempt","useCallback","resp","window","location","reload","handleLogin","error","shopHonorsLogin","iconClassName","iconName","Trans","ns","i18nKey","components","SignInLink","openLoginModal","shopLoginClick","LoginIFrame","frameSrc","onLoginAttempt","onClose","getTitleExpandedAbbreviation","substring","lastIndexOf","titleAbbreviationExpanded","h1","Markdown","createElement","props","expandedName","decodeURI","href","React","style","textDecoration","JSON","stringify","abbreviation","sanitizeTitleMarkdown","encodeURI","HotelSearchResultSummaryPanel","customCounterMessage","customCounterSRMessage","hotelCount","onFilterChange","pageHeading1Title","showingHotelDivRef","useConfigRule","taggedConfig","configShowMap","paginationIndex","useSmbToggle","handleSMBSwitch","isSMBContextSwitchingEnabled","smbChecked","smbRate","LocationsPageHeadingLevel1","MapListToggleButton","showMapListToggleButton","SMBProfileSwitcher","onInputChange","isSmbChecked","shouldCenterInfoIcon","variant","shouldDisplayBrandedHotels","brandName","altSlugs","baseUrl","path","canonicalSlug","brandCode","newURL","slug","numBrandedHotels","isDisplayBrandBanner","isPageBrandFilterEnabled","isEndOfResults","brandInfo","useBrandDetails","isGlobal","infoBannerMessage","atLeastOneBrandedHotel","linkWithoutBrandSlug","isBrand","getInfoBannerURLWithBrandRemoved","OHW_BASE_URL","isHotelBrand","hasHotels","isGlobalPage","AgeBasedModal","isAgeBasedModalOpen","setIsAgeBasedModalOpen","pricing","sortType","isAgeBased","hasAgeBased","hasChildAges","ageBasedPricing","childAges","age","Boolean","code","roomInfo","adults","kids","isNumber","RoomsModal","ageRange","min","max","agesRequired","ariaLabel","occupancyLimitMessage","onSubmit","handleRoomInfoSubmit","pathname","split","hasTMTPRatesSelected","employeeRate","ownerVIPRate","offerId","pnd","specPlan","fromId","travelAgentId","requestedRatesOnly","searchUriBuilder","urlParams","content","dates","arrivalDate","parseISO","departureDate","flexibleDates","placeId","query","sortBy","f_amenityIds","getValidFilters","f_brandCodes","brandFilters","f_price","isPriceRangeValid","f_tripAdvisorRatings","getTARatingValue","ratingsFilter","availableHotelsOnly","showAvailableHotels","mapRatesToSearchUriBuilder","spec_plan","join","numRooms","sessionToken","specialRateTokens","displayCurrency","adjoiningRoomStay","maxPoints","relative","useFormProps","defaultValues","child","setFocusOnFirstListViewCard","ulContainerRef","firstHotelCardItem","querySelector","setAttribute","useGetVisibleInBoundHotels","currentPageVisibleHotels","brandedVisibleHotels","getBrandedHotels","hotelPageCards","otherVisibleHotels","getOtherHotels","carouselRef","rect","useRect","noPhotoImageUrl","HILTON_ASSETS_URI","carouselImages","CarouselSingle","WhyPropertySkeleton","crypto","randomUUID","useHotelQuery","facilityOverview","shortDesc","trimmedDesc","blurb","serviceAmenities","h4","top3POI","poi","unitStringVariant","distanceUnit","WhyPropertyAccordion","whyPropertyAccordionRef","WHY_PROPERTY","Accordion","items","WhyProperty","collapsedButtonLabel","expandedButtonLabel","onValueChange","handleAccordionClick","whyBrandClicked","whyBrandTotalClicks","CompareHotelsCheckbox","isFirstCheckbox","isSubDesktop","compareCheckboxRef","isCompareCBChecked","selectedCtyhocn","isCompareCBDisabled","showCompareCheckBox","handleCompareHotelChange","selectedHotels","compareHotelsCheckboxSelected","KEY_AMENITIES","freeParking","freeBreakfast","indoorPool","outdoorPool","KeyHotelAmenities","keyAmenities","e","preventFocus","blur","HotelNameHeader","preventNavigation","onFocus","h3","HotelCard","srLocation","disclaimerMessages","isTALoadingState","onDetailsClick","showImages","isListViewOnly","isFirstAvailableProperty","smMedViewPort","useGetHotelInfo","additionalParams","isHotelCard","ctaMessage","customParams","hotelUrl","isHotelDataLoading","rateInfo","transactionPropertyData","hotelName","classname","propertyNameClassName","hotelCardContentClassName","wrapperHotelCardHeaderAndCardContentClassName","hotelCardImage","distanceClassName","hidden","amexDisclaimer","disclaimer","heading","useRecentlyViewed","recentlyViewed","setRecentlyViewed","showRecentlyViewedChip","setHighlightedMapCtyhocn","getHotelLocationName","address","city","state","country","stateName","countryName","onBlur","onMouseEnter","onMouseLeave","Carousel","isLoadingState","rateNameClassName","RateNameCTA","customRateInfo","onRateNameCTAClick","handleOnRateNameCTAClick","setPriceClicked","showCompare","HotelCardCTASkeleton","HotelCards","forwardRef","forwardedRef","hotels","cardsClassName","initHotelCount","rest","enablePOIAndAirportTest","setEnablePOIAndAirporTest","useGetPOIAirportInfoMVT","enableTest","handleDetailsClick","index","setBrandDetail","view","skeletonCardCount","DEFAULT_HOTEL_CARD_SKELETON_COUNT","cnt","HotelCardSkeleton","keyString","firstAvailableProperty","findIndex","summary","status","display","open","leadRate","lowest","SoldOutInfoMessageBanner","hotelPlaceId","toUpperCase","queryParam","_id","displayName","ListViewLoadingShimmer","cardCount","ListView","isHSODataLoading","onPageChanged","sortedHotels","showHotelImages","listRef","showListViewHotelImagesToggle","totalPages","Math","ceil","showAmountAfterTax","cmaTotalPriceIndicator","useTrackSearchPricing","lengthOfStay","getLengthOfStay","handlePagination","newPageIndex","trackPaginationClick","paginationNumber","actionType","setPaginationData","propertyResultList","propertyResults","brandedHotels","lastPageIndex","showHotelCardImage","noHotelsFoundBannerMessage","ListViewBrandBanner","atLeastOneHotelNotBranded","displayAtEndOfBrandPageResults","Pagination","onNextClick","onPreviousClick","total","isSlimView","useMapListToggle","listMapViewButtonLabel","listMapViewButtonIconName","mapToggleButtonArrowDirection","ZoomInForPricing","MapContext","createContext","apiKey","clusterer","infoWindow","infoWindowContainer","setClusterer","setInfoWindow","setInfoWindowContainer","setMap","useMap","context","useContext","MapInfoWindow","onCloseClick","position","setPosition","addListener","google","maps","clearListeners","createPortal","MAP_MARKER_COLOR","POINTS_EXPLORER","active","inactive","DEFAULT","MapMarker","isActive","MapStaticMarker","shouldShowCenterMarker","centerMarker","Marker","MARKER_Z_INDEX","getPriceMarker","color","defaultColor","estimatedAverageCharacterWidth","getPriceMarkerPath","tailHeight","tailWidth","radius","scale","fillColor","fillOpacity","strokeColor","strokeWeight","labelOrigin","Point","MapMarkers","clusterOptions","activeMarker","iconClusterPath","Map","staticMarker","setStaticMarker","markersToDisplay","propsWithoutChildren","getMarker","markers","addMarker","m","marker","scaledSize","Size","fontWeight","fontFamily","optimized","visible","zIndex","clickable","markerOptions","originalZindex","getZIndex","setZIndex","onMouseOver","onMouseOut","set","removeMarker","delete","mapMarker","shouldFocus","close","shouldHaveCluster","MarkerClusterer","averageCenter","minimumClusterSize","maxZoom","ignoreHidden","styles","textSize","textColor","anchorText","setIcon","getLabel","setLabel","markersToAdd","addMarkers","toRemove","_marker","removeMarkers","InfoWindow","containerClassName","directionsLink","hotelBadges","linkCopy","isNewWindow","SearchMapMarkers","MAX_PRICE_PROPERTY_LIMIT","hasSpecialRatesDeepLinked","isSpecialRatesDeeplinked","activeProperty","handleMapMarkerClicked","showPointsInMarker","propertySearch","prefixPublicAssetUriWithAppPrefix","isMPADataLoading","hashedMPAData","currentHotel","ratePlan","attributes","lat","latitude","lng","longitude","hasConfidentialRate","confidentialRates","isNotBookable","displayPriceInMarker","getCMAPrice","rateAmount","rateAmountFmt","totalRate","amountAfterTax","totalRateFmt","amountAfterTaxFmt","markerPrice","isLocalCurrencySameAsHotelCurrency","formatAndConvertPrice","basePrice","currencyQueryError","markerPointsOrPrice","hhonors","dailyRmPointsRateFmt","pointsRangeLabel","dailyRmPointsRateRoundFmt","markerLabel","displayPointsInMarker","suppressBrandLogo","isAffiliateHotel","addressLine1","MapBase","initialBounds","onBoundsChange","onPan","onZoom","showInitialBounds","showQuadNodeBounds","mapRef","infoWindowRef","hasDrawnInitialBoundingBox","hasDrawnInitialQuadNodes","useRouter","resetMap","isMapInitialized","useHotelQuadrantsQuery","isBrowser","listeners","initMap","clickableIcons","disableDefaultUI","zoomControl","zoomControlOptions","getLanguageDirection","ControlPosition","LEFT_TOP","RIGHT_TOP","restriction","latLngBounds","north","south","west","east","strictBounds","MAX_ZOOM","bounds","getBounds","toJSON","handleTilesLoaded","newInfoWindow","disableAutoPan","script","MAPS_URL","defer","async","onload","body","appendChild","listener","remove","setZoom","fitBounds","events","on","Rectangle","quadNodesData","hotelQuadrants","node","southwest","northeast","MapProvider","Provider","handleBoundsChange","hasUserPanned","hasUserZoomed","MAP_API_KEY","showBbox","isDebugQuadTrees","LocationsMapMarkers","disableMarkerPrice","hotelCtyhocn","points","lead","dailyRmPointsRateNumFmt","getMapMarkerIcon","getMarkerPrice","hotelBrandCode","MapBlock","showSpinner","visibleFilteredInBoundHotels","filterChange","h1SearchResultsContent","hotelCounterRef","counterMessage","isDesktopMapView","isSearchPage","shouldShowMap","useConductricsSelection","Spinner","Dropdown","innerWidth","getBreakpoint","htmlFor","select","evt","margin","option","isVisible","testIdLabel","isDisabled","SortByDropDown","filteredHotelCount","isInvalidOrUnavailableOffer","sortByOptions","useGetSortByOptions","filteredHotelsCount","handleUsePointsOnSortChange","isSortByPoints","isSortByPrice","sortOptions","sortEngagement","propertySearchSort","PointsMessage","guestInfo","pointsAvailable","numPoints","LoginModal","onLogin","persistSessionState","DisplayPoints","DISPLAY_NUM_OF_AVAILABLE_POINTS","buttonLabel","handleSignInButtonClick","pointsLoginClick","params","URLSearchParams","search","toString","shallow","catch","logError","UsePoints","selecteCurrencyDesc","description","useGetUsePoints","isChecked","infoPopupMessage","isReady","isPointsDisabled","shouldUsePointsChecked","handleUsePointsChange","a11yMessage","currencyName","trackUsePointsChecked","InfoPopup","generateHotelSummaryOptionsQueryArray","quadNodes","guestLocationCountry","arr","HotelSummaryOptionsDocument","quadrantId","getBoundNodes","validNodes","validNode","bounds1","bounds2","isMatchFilter","stateOrCountryMatch","brandCodeMatch","brands","brand","countries","nodeCountry","countryCode","stateCode","states","useQuadNodes","stateOrCountryOrRegionFilter","useLocation","toNestedBounds","queryArr","isQuadNodesDataLoading","isGuestLocationLoading","isInitialRender","fetchHotelSummaryOptions","response","fetch","ok","statusText","json","useBlob","hotelSummaryExtractUrl","useQuery","queryFn","initialHashedHotelSummaryOptionsData","useHotelSummaryOptions","matchName","blobEnabled","isRegions","countryCodes","useGetRegions","isTypeRegion","regionName","queryClient","useQueryClient","stateOrCountryFilter","countriesInRegion","isBlobEnabledWithExtractURL","isFallbackToNodes","blobStatus","isFetchingQuadNodes","isInitial","isInitialRenderQuadNodes","isFetchingBlobNodes","isInitialRenderBlobNodes","hotelDataToUse","blobData","getHashedHotelSummaryOptionsDataFromCache","hashedHotelSummaryOptionsHotelData","filteredHotelDataToUse","filterRegionHashedHotels","obj","filterStateCountryBrandHashedHotels","VERTICAL_SPACE_SAVINGS","d","f","g","h","filterAndSortLabel","isVerticalSpaceMVTLoaded","isFilterAndSortInAccordion","isVerticalSpaceVar1","isVerticalSpaceVar5","isVerticalSpaceVar6","isVerticalSpaceVar3","isVerticalSpaceVar7","isCurrencyAndSortInAllFiltersModal","isVerticalSpaceVar2","isVerticalSpaceVar8","isVerticalSpaceVar4","controls","loop","hideLabel","groupId","pageNumbers","apply","prevDisabled","nextDisabled","paginationLabel","ControlBack","aria-controls","parseInt","currentTarget","ControlNext","BREAK_POINTS","freeze","small","medium","large","extraLarge","twoExtraLarge","twoXimgUrl","threeXImgUrl","srcUrl","cw","has","ch","aspectRatioVariants","entries","accum","breakPointName","breakPointWidth","round"],"sourceRoot":"","ignoreList":[]}