{"version":3,"file":"static/chunks/4181-c596d938c84f7f4b.js","mappings":"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","sources":["webpack://_N_E/./lib/image.dto.ts","webpack://_N_E/./utils/location-products.ts","webpack://_N_E/./app/[locale]/(pdp)/locations/[slug]/_components/utils.ts","webpack://_N_E/./components/CircleLoader.tsx","webpack://_N_E/./components/InteractiveMap.tsx","webpack://_N_E/./components/SkeletonLoader.tsx","webpack://_N_E/./components/buttons/Button.tsx","webpack://_N_E/./components/buttons/ButtonAsLink.tsx","webpack://_N_E/./components/buttons/PrimaryButton.tsx","webpack://_N_E/./components/buttons/SecondaryButton.tsx","webpack://_N_E/./components/buttons/ArrowButton.tsx","webpack://_N_E/./components/buttons/TertiaryButton.tsx","webpack://_N_E/./components/buttons/index.ts","webpack://_N_E/./components/gallery/GalleryMatterport.tsx","webpack://_N_E/./hooks/useQueryParams.tsx","webpack://_N_E/./hooks/useWebGL.ts","webpack://_N_E/./models/Frequency.enum.ts","webpack://_N_E/./models/Products.enum.ts","webpack://_N_E/./public/icons/closeIcon.svg","webpack://_N_E/./public/icons/directionsIcon.svg","webpack://_N_E/./public/icons/ellipse.svg","webpack://_N_E/./public/icons/transit-airport.svg","webpack://_N_E/./public/icons/transit-bike.svg","webpack://_N_E/./public/icons/transit-bus.svg","webpack://_N_E/./public/icons/transit-car.svg","webpack://_N_E/./public/icons/transit-other.svg","webpack://_N_E/./public/icons/transit-parking.svg","webpack://_N_E/./public/icons/transit-subway.svg","webpack://_N_E/./public/icons/transit-train.svg","webpack://_N_E/./public/icons/transit-transit_hub.svg","webpack://_N_E/./public/images/brands/TGR.svg","webpack://_N_E/./public/images/brands/welkin-and-meraki.svg"],"sourcesContent":["export type ImageDto = {\n order: number;\n url: string;\n caption: string | null;\n altText: string;\n isDefault?: boolean;\n tags?: PhotoTag[];\n};\n\nexport enum PhotoTag {\n Bathrooms = 'Bathrooms',\n BuildingAmenity = 'BuildingAmenity',\n BuildingConferenceCenter = 'BuildingConferenceCenter',\n BuildingExterior = 'BuildingExterior',\n BuildingFitnessCenter = 'BuildingFitnessCenter',\n BuildingLobby = 'BuildingLobby',\n BuildingLounge = 'BuildingLounge',\n Cafe = 'Cafe',\n CommonArea = 'CommonArea',\n FocusRoom = 'FocusRoom',\n HasPeople = 'HasPeople',\n HasPhoneBooths = 'HasPhoneBooths',\n HasSoftSeating = 'HasSoftSeating',\n HasWorkstation = 'HasWorkstation',\n LargeEventsSpace = 'LargeEventsSpace',\n Library = 'Library',\n MeetingRoom = 'MeetingRoom',\n MeetingRoomLarge = 'MeetingRoomLarge',\n OfficeUpTo15Seats = 'OfficeUpTo15Seats',\n OfficeLarge = 'OfficeLarge',\n PrivateOutdoorSpace = 'PrivateOutdoorSpace',\n Reception = 'Reception',\n WellnessRoom = 'WellnessRoom',\n}\n","import {\n CoworkingDayPassAvailabilityDto,\n LocationProductsDto,\n MeetingProductAvailabilityDto,\n ProductAvailabilityDto,\n} from '@/lib/locations/dto/location-products.dto';\n\nimport { CHECKOUT_PRODUCTS } from './constants';\n\nexport function hasLocationProductsToDisplay(\n locationProducts: LocationProductsDto\n) {\n const productNames = Object.keys(locationProducts) as Array<\n keyof LocationProductsDto\n >;\n const productsToDisplay = productNames.filter((productName) =>\n shouldDisplayProduct(locationProducts[productName])\n );\n\n return productsToDisplay.length > 0;\n}\n\nfunction hasDailyOnDemandCapacity(\n product:\n | ProductAvailabilityDto\n | CoworkingDayPassAvailabilityDto\n | MeetingProductAvailabilityDto\n): product is CoworkingDayPassAvailabilityDto {\n return 'dailyOnDemandCapacity' in product;\n}\n\nexport function shouldDisplayProduct(\n product:\n | ProductAvailabilityDto\n | CoworkingDayPassAvailabilityDto\n | MeetingProductAvailabilityDto\n) {\n if (hasDailyOnDemandCapacity(product)) {\n return Boolean(\n product.availableAtLocation &&\n product.currentlySellable &&\n product.canBuyOnline &&\n product.dailyOnDemandCapacity != null &&\n product.dailyOnDemandCapacity > 0\n );\n }\n\n return product.availableAtLocation || product.currentlySellable;\n}\n\nexport function canDisplayLearnMoreLink(params: {\n productName: keyof LocationProductsDto;\n currentlySellable: boolean;\n canBuyOnline?: boolean;\n}) {\n const { canBuyOnline, currentlySellable, productName } = params;\n if (!CHECKOUT_PRODUCTS.includes(productName)) {\n return currentlySellable;\n }\n\n return currentlySellable && canBuyOnline;\n}\n\nexport function isSuitesTheOnlyAvailableProduct(\n locationProducts: LocationProductsDto\n) {\n const productNames = Object.keys(locationProducts) as Array<\n keyof LocationProductsDto\n >;\n const productsToDisplay = productNames.filter((productName) =>\n shouldDisplayProduct(locationProducts[productName])\n );\n\n return productsToDisplay.length === 1 && productsToDisplay[0] === 'suites';\n}\n\nexport function shouldDisplayDedicatedOfficeOnlineProducts(\n product: ProductAvailabilityDto\n) {\n return (\n !!product.availableAtLocation &&\n !!product.currentlySellable &&\n !!product.canBuyOnline\n );\n}\n","import { getTranslations } from 'next-intl/server';\nimport { ReadonlyURLSearchParams } from 'next/navigation';\n\nimport { ImageDto, PhotoTag } from '@/lib/image.dto';\nimport { LocationPricesDto } from '@/lib/locations/dto/location-price.dto';\nimport { LocationProductsDto } from '@/lib/locations/dto/location-products.dto';\nimport { Frequency } from '@/models/Frequency.enum';\nimport { Products } from '@/models/Products.enum';\nimport { shouldDisplayProduct } from '@/utils/location-products';\n\nimport { PremiumAmenity } from './types';\n\nexport const PREMIUM_AMENITIES_CONFIG: PremiumAmenity[] = [\n {\n label: 'comfy-lounges',\n tags: [\n [PhotoTag.CommonArea, PhotoTag.HasSoftSeating, PhotoTag.HasPeople],\n [PhotoTag.CommonArea, PhotoTag.HasSoftSeating],\n [PhotoTag.CommonArea],\n ],\n fallbackImage: '/public-s3/images/location-comfy-common-lounge.webp',\n },\n {\n label: 'cafe',\n tags: [[PhotoTag.Cafe, PhotoTag.HasPeople], [PhotoTag.Cafe]],\n fallbackImage: '/public-s3/images/location-cafe.webp',\n },\n {\n label: 'meeting-rooms',\n tags: [[PhotoTag.MeetingRoomLarge], [PhotoTag.MeetingRoom]],\n fallbackImage: '/public-s3/images/location-meeting-room.webp',\n },\n {\n label: 'phone-booths',\n tags: [\n [PhotoTag.HasPhoneBooths, PhotoTag.HasPeople],\n [PhotoTag.HasPhoneBooths],\n ],\n fallbackImage: '/public-s3/images/location-phone-booths.webp',\n },\n];\n\nconst findImageByTags = (images: ImageDto[], tagCombination: PhotoTag[]) => {\n return images.find((image) =>\n tagCombination.every((tag) => image.tags?.includes(tag))\n );\n};\n\nexport function getImageForLocationAmenity(\n images: ImageDto[],\n tags: PhotoTag[][]\n) {\n const image = tags\n .map((tagCombination) => findImageByTags(images, tagCombination))\n .find(Boolean);\n\n return image || null;\n}\n\nexport type OnDemandProduct = {\n title: string;\n prices: { price: number; frequency: Frequency }[];\n tag: string;\n value: Products.Office | Products.MeetingRoom | Products.Coworking;\n canBuyOnline?: boolean;\n};\n\nexport async function getProductsToDisplay({\n locale,\n locationProducts,\n locationPrices,\n}: {\n locale: string;\n locationProducts: LocationProductsDto;\n locationPrices: LocationPricesDto;\n}): Promise {\n const result: OnDemandProduct[] = [];\n const t = await getTranslations({\n locale,\n namespace: 'location.on-demand',\n });\n\n const shouldDisplayOffice =\n locationProducts.dedicatedOffice.availableAtLocation;\n const shouldDisplayMeetingRoom =\n !!locationProducts.meetingRoom.availableAtLocation &&\n !!locationProducts.meetingRoom.currentlySellable;\n\n const shouldDisplayCoworkingDayPass = shouldDisplayProduct(\n locationProducts.coworkingDayPass\n );\n const shouldDisplayAccess = locationProducts.access.availableAtLocation;\n\n const shouldDisplayCoworking =\n shouldDisplayCoworkingDayPass || shouldDisplayAccess;\n\n if (shouldDisplayOffice) {\n const officePrice = locationPrices.lowestPrices.office.perMonth;\n result.push({\n title: t(`${Products.Office}.title`),\n prices: [\n officePrice != null && {\n price: officePrice,\n frequency: Frequency.Monthly,\n },\n ].filter((x) => x !== false),\n tag: t(`${Products.Office}.tag`),\n value: Products.Office,\n canBuyOnline:\n !!locationProducts.dedicatedOffice.currentlySellable &&\n !!locationProducts.dedicatedOffice.canBuyOnline,\n });\n }\n\n if (shouldDisplayCoworking) {\n const { perDay, perMonth } = locationPrices.lowestPrices.coworking;\n\n const coworkingPrices = [];\n if (perDay !== undefined && shouldDisplayCoworkingDayPass) {\n coworkingPrices.push({\n price: perDay,\n frequency: Frequency.Daily,\n });\n }\n if (perMonth !== undefined && shouldDisplayAccess) {\n coworkingPrices.push({\n price: perMonth,\n frequency: Frequency.Monthly,\n });\n }\n\n result.push({\n title: t(`${Products.Coworking}.title`),\n prices: coworkingPrices,\n tag: t(`${Products.Coworking}.tag`),\n value: Products.Coworking,\n });\n }\n\n if (shouldDisplayMeetingRoom) {\n const { perHour, perDay } = locationPrices.lowestPrices.meetingRoom;\n result.push({\n title: t(`${Products.MeetingRoom}.title`),\n prices: [\n perHour !== undefined && {\n price: perHour,\n frequency: Frequency.Hourly,\n },\n perDay !== undefined && {\n price: perDay,\n frequency: Frequency.Daily,\n },\n ].filter((x) => x !== false),\n tag: t(`${Products.MeetingRoom}.tag`),\n value: Products.MeetingRoom,\n });\n }\n\n return result;\n}\n\nexport function getProductFromSearchParams(\n searchparams: ReadonlyURLSearchParams,\n products: OnDemandProduct[]\n): Products {\n const product = searchparams.get('product');\n\n if (product && Object.values(Products).includes(product as Products)) {\n return product as Products;\n }\n\n return Object.values(products)[0].value;\n}\n","import clsx from 'clsx';\n\ntype CircleLoaderProps = {\n className?: string;\n};\n\nexport function CircleLoader({ className }: CircleLoaderProps) {\n return (\n \n \n \n );\n}\n","'use client';\n\nimport Script from 'next/script';\n\nimport { useWebGL } from '@/hooks/useWebGL';\nimport { DEFAULT_MAP_LOCATION_PAGE_ZOOM, MAP_STYLE } from '@/utils/constants';\n\nimport { ImageWithPlaceholder } from './ImageWithPlaceholder';\n\nconst MAPBOX_SCRIPT_URL =\n 'https://api.mapbox.com/mapbox-gl-js/v2.12.0/mapbox-gl.js';\n\ntype InteractiveMapProps = {\n mapboxAccessToken: string;\n mapboxStaticAccessToken: string;\n lat: number;\n lng: number;\n dataTestId?: string;\n className?: string;\n};\n\nexport default function InteractiveMap({\n mapboxAccessToken,\n mapboxStaticAccessToken,\n lat,\n lng,\n dataTestId,\n className,\n}: InteractiveMapProps) {\n const { isWebGLSupported } = useWebGL();\n\n const staticImageUrl = `https://api.mapbox.com/styles/v1/mapbox/${MAP_STYLE}/static/${lng},${lat},${DEFAULT_MAP_LOCATION_PAGE_ZOOM},0,0/800x200?access_token=${mapboxStaticAccessToken}`;\n\n const handleOnLoadMapboxScript = () => {\n window.mapboxgl.accessToken = mapboxAccessToken;\n const map = new window.mapboxgl.Map({\n container: 'map-location',\n style: `mapbox://styles/mapbox/${MAP_STYLE}`,\n center: [lng, lat],\n zoom: DEFAULT_MAP_LOCATION_PAGE_ZOOM,\n });\n\n map.addControl(\n new window.mapboxgl.NavigationControl({ showCompass: false }),\n 'top-left'\n );\n\n const el = document.createElement('div');\n el.className = 'w-4 h-4 rounded-full bg-teal-5';\n el.ariaLabel = '';\n new window.mapboxgl.Marker(el).setLngLat([lng, lat]).addTo(map);\n };\n\n return (\n <>\n {!isWebGLSupported ? (\n \n ) : (\n <>\n \n \n \n )}\n \n );\n}\n","import clsx from 'clsx';\n\ntype SkeletonLoaderProps = {\n dataTestId?: string;\n className?: string;\n};\n\nexport function SkeletonLoader({ dataTestId, className }: SkeletonLoaderProps) {\n return (\n \n );\n}\n","import {\n ComponentPropsWithoutRef,\n ElementType,\n PropsWithChildren,\n} from 'react';\n\nimport { CircleLoader } from '../CircleLoader';\n\nimport clsx from 'clsx';\n\nexport enum ButtonAction {\n PRIMARY = 'primary',\n SECONDARY = 'secondary',\n TERTIARY = 'tertiary',\n}\n\nexport enum ButtonSize {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large',\n}\n\ntype AsProp = {\n as?: E;\n};\n\ntype ComponentProps = PropsWithChildren<\n ComponentPropsWithoutRef & AsProp\n>;\n\ntype ButtonProps = React.ComponentPropsWithoutRef<'button'> & {\n action?: ButtonAction;\n size?: ButtonSize;\n isLoading?: boolean;\n};\n\nconst defaultElement = 'button';\n\nexport function Button({\n as,\n action = ButtonAction.PRIMARY,\n size = ButtonSize.MEDIUM,\n isLoading,\n children,\n disabled,\n className,\n ...otherProps\n}: ButtonProps & ComponentProps) {\n const baseClasses =\n 'inline-flex items-center justify-center rounded-full font-medium border group text-center cursor-pointer disabled:cursor-default';\n const Component = as ?? defaultElement;\n\n const getSizeClasses = () => {\n switch (size) {\n case ButtonSize.SMALL:\n return 'text-sm leading-none py-1 px-5';\n case ButtonSize.LARGE:\n return 'text-lg py-2 px-5';\n default:\n return 'text-base py-2 px-5';\n }\n };\n\n const getActionClasses = () => {\n switch (action) {\n case ButtonAction.SECONDARY:\n return 'bg-white border-teal-40 text-teal-40 hover:bg-teal-40 hover:text-white disabled:pointer-events-none disabled:text-grey-60 disabled:border-grey-60';\n case ButtonAction.TERTIARY:\n return 'bg-white border-[2px] border-[#013E3F1A] text-teal-40 hover:bg-[#013E3F0A]';\n default:\n return 'bg-teal-40 border-teal-40 text-white';\n }\n };\n\n const getCircleLoaderClasses = () => {\n switch (action) {\n case ButtonAction.SECONDARY:\n return 'fill-teal-40 group-hover:fill-white';\n default:\n return 'fill-white';\n }\n };\n\n return (\n \n {isLoading && (\n \n )}\n {children}\n \n );\n}\n","import clsx from 'clsx';\n\nexport function ButtonAsLink(props: React.ComponentPropsWithoutRef<'button'>) {\n const { className, children, type = 'button', ...others } = props;\n\n return (\n \n {children}\n \n );\n}\n","import { CircleLoader } from '../CircleLoader';\n\nimport clsx from 'clsx';\n\ntype PrimaryButtonProps = React.ComponentPropsWithoutRef<'button'> & {\n sm?: boolean;\n isLoading?: boolean;\n};\n\nexport function PrimaryButton(props: PrimaryButtonProps) {\n const { className, sm, isLoading, children, ...otherProps } = props;\n\n return (\n \n
\n {isLoading && }\n {children}\n
\n \n );\n}\n","import { CircleLoader } from '../CircleLoader';\n\nimport clsx from 'clsx';\n\ntype SecondaryButtonProps = {\n sm?: boolean;\n isLoading?: boolean;\n} & React.ComponentPropsWithoutRef<'button'>;\n\nexport function SecondaryButton(props: SecondaryButtonProps) {\n const { sm, className, isLoading, children, ...otherProps } = props;\n\n return (\n \n
\n {isLoading && (\n \n )}\n {children}\n
\n \n );\n}\n","import ChevronIcon from '../icons/ChevronIcon';\n\nimport clsx from 'clsx';\n\ntype ArrowButtonProps = {\n isDisabled?: boolean;\n direction: 'left' | 'right';\n className?: string;\n onClick: (direction: 'left' | 'right') => void;\n} & React.ComponentPropsWithoutRef<'button'>;\n\nexport function ArrowButton({\n isDisabled,\n direction,\n className,\n onClick,\n ...props\n}: ArrowButtonProps) {\n return (\n onClick(direction)}\n {...props}\n >\n \n \n );\n}\n","import clsx from 'clsx';\n\ntype TertiaryButtonProps = {\n sm?: boolean;\n} & React.ComponentPropsWithoutRef<'button'>;\n\nexport function TertiaryButton(props: TertiaryButtonProps) {\n const { sm, className, ...otherProps } = props;\n\n return (\n \n );\n}\n","export * from './SecondaryLinkButton';\nexport * from './PrimaryButton';\nexport * from './SecondaryButton';\nexport * from './LinkButtonThemes';\nexport * from './ArrowButton';\nexport * from './TertiaryButton';\nexport * from './ButtonAsLink';\n","import { useTranslations } from 'next-intl';\n\ntype GalleryMatterportProps = {\n url: string;\n className?: string;\n};\n\nexport function GalleryMatterport({ url, className }: GalleryMatterportProps) {\n const t = useTranslations('location.gallery');\n\n return (\n \n );\n}\n","import { useSearchParams } from 'next/navigation';\nimport { useCallback, useMemo } from 'react';\n\nimport { usePathname } from '@/i18n/navigation';\n\nimport { useRouter } from './useRouter';\n\ntype QueryParams = Record;\n\nexport default function useQueryParams() {\n const router = useRouter();\n const pathname = usePathname();\n const searchParams = useSearchParams();\n\n const queryParams = useMemo(() => {\n if (searchParams == null) return {};\n\n const entries = searchParams.entries();\n const result: QueryParams = {};\n for (const [key, value] of entries) {\n result[key] = value;\n }\n return result;\n }, [searchParams]);\n\n const updateQuery = useCallback(\n (newParams: Partial) => {\n if (searchParams == null) return {};\n\n const current = new URLSearchParams(window.location.search);\n\n Object.keys(newParams).forEach((key) => {\n const value = newParams[key];\n if (value === undefined || value === null) {\n current.delete(key); // Remove param if undefined or null\n } else if (Array.isArray(value)) {\n current.delete(key);\n value.forEach((val) => current.append(key, val));\n } else {\n current.set(key, value.toString());\n }\n });\n\n if (current.size === 0) {\n clearQuery();\n }\n\n router.replace(`?${current.toString()}`, { scroll: false });\n },\n [searchParams]\n );\n\n const clearQuery = useCallback(() => {\n window.history.replaceState(null, '', pathname);\n }, [pathname]);\n\n return {\n queryParams: queryParams as T,\n updateQuery,\n clearQuery,\n };\n}\n","import { useEffect, useState } from 'react';\n\nexport function useWebGL() {\n const [isWebGLSupported, setWebGLsupported] = useState();\n\n useEffect(() => {\n if (isWebGLSupported !== undefined) return;\n\n (async () => {\n const mapboxgl = await import('mapbox-gl');\n setWebGLsupported(mapboxgl.supported());\n })();\n }, []);\n\n return { isWebGLSupported };\n}\n","export enum Frequency {\n Hourly,\n Daily,\n Monthly,\n}\n","export enum Products {\n Office = 'office',\n Coworking = 'coworking',\n MeetingRoom = 'meeting-room',\n Suite = 'suite',\n Virtual = 'virtual',\n}\n","export default {\"src\":\"/_next/static/media/closeIcon.09805f7c.svg\",\"height\":18,\"width\":18,\"blurWidth\":0,\"blurHeight\":0};","export default {\"src\":\"/_next/static/media/directionsIcon.3d5d9d51.svg\",\"height\":19,\"width\":18,\"blurWidth\":0,\"blurHeight\":0};","export default {\"src\":\"/_next/static/media/ellipse.f355b1a9.svg\",\"height\":8,\"width\":8,\"blurWidth\":0,\"blurHeight\":0};","export default {\"src\":\"/_next/static/media/transit-airport.49b83380.svg\",\"height\":18,\"width\":18,\"blurWidth\":0,\"blurHeight\":0};","export default {\"src\":\"/_next/static/media/transit-bike.9887e240.svg\",\"height\":14,\"width\":20,\"blurWidth\":0,\"blurHeight\":0};","export default {\"src\":\"/_next/static/media/transit-bus.80f3a653.svg\",\"height\":18,\"width\":16,\"blurWidth\":0,\"blurHeight\":0};","export default {\"src\":\"/_next/static/media/transit-car.351cceaa.svg\",\"height\":16,\"width\":16,\"blurWidth\":0,\"blurHeight\":0};","export default {\"src\":\"/_next/static/media/transit-other.965d9b19.svg\",\"height\":24,\"width\":24,\"blurWidth\":0,\"blurHeight\":0};","export default {\"src\":\"/_next/static/media/transit-parking.0ecc16a9.svg\",\"height\":24,\"width\":24,\"blurWidth\":0,\"blurHeight\":0};","export default {\"src\":\"/_next/static/media/transit-subway.945da74a.svg\",\"height\":18,\"width\":16,\"blurWidth\":0,\"blurHeight\":0};","export default {\"src\":\"/_next/static/media/transit-train.336cdef3.svg\",\"height\":18,\"width\":16,\"blurWidth\":0,\"blurHeight\":0};","export default {\"src\":\"/_next/static/media/transit-transit_hub.192a8136.svg\",\"height\":18,\"width\":18,\"blurWidth\":0,\"blurHeight\":0};","export default {\"src\":\"/_next/static/media/TGR.30199ace.svg\",\"height\":15,\"width\":159,\"blurWidth\":0,\"blurHeight\":0};","export default {\"src\":\"/_next/static/media/welkin-and-meraki.3e549d5a.svg\",\"height\":20,\"width\":370,\"blurWidth\":0,\"blurHeight\":0};"],"names":["PhotoTag","PREMIUM_AMENITIES_CONFIG","label","tags","CommonArea","HasSoftSeating","HasPeople","fallbackImage","Cafe","MeetingRoomLarge","MeetingRoom","HasPhoneBooths","findImageByTags","images","tagCombination","find","every","image","includes","tag","getImageForLocationAmenity","map","Boolean","getProductFromSearchParams","searchparams","products","product","get","Object","values","Products","value","CircleLoader","param","className","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","svg","clsx","xmlns","width","height","fill","path","fillRule","stroke","d","clipRule","InteractiveMap","mapboxAccessToken","mapboxStaticAccessToken","lat","lng","dataTestId","isWebGLSupported","useWebGL","staticImageUrl","MAP_STYLE","DEFAULT_MAP_LOCATION_PAGE_ZOOM","concat","Fragment","jsxs","Script","src","onReady","window","mapboxgl","accessToken","Map","container","style","center","zoom","addControl","NavigationControl","showCompass","el","document","createElement","ariaLabel","Marker","setLngLat","addTo","strategy","div","data-testid","id","ImageWithPlaceholder","alt","SkeletonLoader","datatest-id","ButtonAction","ButtonSize","Button","as","action","size","isLoading","children","disabled","otherProps","Component","getSizeClasses","getActionClasses","ButtonAsLink","props","type","others","button","PrimaryButton","sm","SecondaryButton","ArrowButton","isDisabled","direction","onClick","jsx_runtime","ChevronIcon","TertiaryButton","GalleryMatterport","url","t","useTranslations","iframe","allow","aria-label","allowFullScreen","useQueryParams","router","useRouter","pathname","usePathname","searchParams","useSearchParams","queryParams","useMemo","entries","result","key","updateQuery","useCallback","current","URLSearchParams","location","search","keys","newParams","forEach","delete","Array","isArray","append","val","set","toString","clearQuery","replace","scroll","history","replaceState","setWebGLsupported","useState","useEffect","undefined","__webpack_require__","e","then","bind","supported","Frequency","__webpack_exports__","Z"],"sourceRoot":""}