{"version":3,"file":"static/chunks/8562-3292e68bd95ee710.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/./models/BrandNames.enum.ts","webpack://_N_E/./utils/validators/string-day-validator.ts","webpack://_N_E/./utils/locations.ts","webpack://_N_E/./utils/mapbox.ts","webpack://_N_E/./utils/select-option-utils.ts","webpack://_N_E/./lib/users/dto/user.dto.ts","webpack://_N_E/./utils/user-utils.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';\nimport { hasValidCoordinates } from '@/utils/mapbox';\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 const hasValidCoords = hasValidCoordinates({\n lat,\n lng,\n });\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 || !hasValidCoords ? (\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 enum BrandNames {\n Industrious = 'Industrious',\n WelkinMeraki = 'Welkin & Meraki',\n TheGreatRoom = 'The Great Room',\n}\n","import { string } from 'yup';\n\nimport { isValidDate } from '../date-utils';\n\nexport const stringDay = () =>\n string().test((x) => {\n if (x == null) {\n return true;\n }\n return isValidDate(x) && /^\\d{4}-\\d{2}-\\d{2}$/.test(x);\n });\n","import { useTranslations } from 'next-intl';\n\nimport { SelectOption } from '@/components/form/Select/types';\nimport {\n LocationDto,\n SimpleIndustriousLocationSearchDto,\n SimpleLocationSearchDto,\n WorlwideExternalLocationDto,\n} from '@/lib/locations/dto';\nimport { LocationPhases, ManagerRoles } from '@/lib/locations/dto';\nimport {\n LocationOpeningHoursDto,\n LocationValueOpeningHour,\n} from '@/lib/locations/dto/location-opening-hours.dto';\nimport { BlackoutDateDto } from '@/lib/shared/dto/blackout-date.dto';\nimport { BrandNames } from '@/models/BrandNames.enum';\nimport { DateRange } from '@/models/DateRange';\nimport tgrLogo from '@/public/images/brands/TGR.svg';\nimport wmLogo from '@/public/images/brands/welkin-and-meraki.svg';\n\nimport {\n DAY_PASS_CUTOFF_HOUR,\n DISPLAY_SEASON_AFTER_NB_DAYS,\n MAX_BOOKING_MONTHS,\n NORTH_SEASONS_BY_QUARTER,\n SOUTH_SEASONS_BY_QUARTER,\n} from './constants';\nimport {\n addMonths,\n createLocalDay,\n differenceInDays,\n formatToDay,\n getAbbreviatedDayName,\n getNextDay,\n getQuarter,\n getTomorrowDay,\n isAfter,\n isSameDay,\n setHours,\n setMinutes,\n} from './date-utils';\nimport { sortByLabel } from './select-option-utils';\nimport { stringifyUrl } from './stringify-url';\nimport { stringDay } from './validators/string-day-validator';\n\nexport function createLocationUrl(location: {\n isExternal?: boolean;\n externalLink?: string;\n slug: string;\n}) {\n return location.isExternal\n ? location.externalLink!\n : `/locations/${location.slug}`;\n}\n\nexport function createLocationDayPassUrl(params: {\n slug: string;\n dateRange?: DateRange;\n}) {\n const { slug, dateRange } = params;\n\n const url = `/locations/${slug}/coworking-day-pass`;\n\n if (!dateRange) return url;\n\n return stringifyUrl(url, {\n startDay: formatToDay(dateRange.from),\n endDay: formatToDay(dateRange.to),\n });\n}\n\nexport function isIndustriousLocation(\n location: SimpleLocationSearchDto\n): location is SimpleIndustriousLocationSearchDto {\n return !location.isExternal;\n}\n\nexport function isExternalLocation(\n location: SimpleLocationSearchDto\n): location is WorlwideExternalLocationDto {\n return location.isExternal;\n}\n\nexport function getBrandLogo(brandName: string | null) {\n switch (brandName) {\n case BrandNames.WelkinMeraki:\n return wmLogo;\n case BrandNames.TheGreatRoom:\n return tgrLogo;\n default:\n return undefined;\n }\n}\n\ntype LocationForOption = Pick & {\n metroName?: string;\n};\n\nexport const mapLocationsToOptions = (\n locations: Array\n): SelectOption[] => locations.map(mapLocationToOption).sort(sortByLabel);\n\nexport const mapLocationToOption = (\n location: LocationForOption\n): SelectOption => ({\n label: getLocationOptionLabel(location),\n value: location.sfId,\n});\n\nconst getLocationOptionLabel = (location: LocationForOption) => {\n return `${location.city} - ${location.name}`;\n};\n\n// This function extract the date disregarding time and timezone as we currently don't care in SF.\n// if we don't do this, it brings an issue\nexport function getOpeningDate(dateISO: string) {\n const year = +dateISO.substring(0, 4);\n const month = +dateISO.substring(5, 7) - 1;\n const day = +dateISO.substring(8, 10);\n\n return new Date(year, month, day);\n}\n\nexport function getOpeningLabelTranslationKey(params: {\n openingDate: Date;\n latitude: number;\n}) {\n const { openingDate, latitude } = params;\n\n const is60daysAway =\n differenceInDays(openingDate, new Date()) > DISPLAY_SEASON_AFTER_NB_DAYS;\n\n if (!is60daysAway) {\n return 'date';\n }\n\n const quarter = getQuarter(openingDate);\n\n return latitude > 0\n ? NORTH_SEASONS_BY_QUARTER[quarter]\n : SOUTH_SEASONS_BY_QUARTER[quarter];\n}\n\nexport function managerRoleToTranslationKey(role: string) {\n switch (role) {\n case ManagerRoles.MemberExperienceAssociate:\n return 'member-experience-associate';\n case ManagerRoles.ConferenceServicesManager:\n return 'conference-services-manager';\n case ManagerRoles.TechnicalAudioVisualManager:\n return 'technical-audio-visual-manager';\n default:\n return 'member-experience-manager';\n }\n}\n\nexport function shouldShowLogo(brandName: string | null) {\n return brandName === BrandNames.WelkinMeraki;\n}\n\nexport function getLocationHighlightName(params: {\n name: string;\n brandName: LocationDto['brandName'];\n t: ReturnType>;\n}) {\n const { name, brandName, t } = params;\n\n if (\n brandName == null ||\n brandName === BrandNames.WelkinMeraki ||\n name.includes(brandName)\n ) {\n return name;\n }\n\n return t('highlight-name', { brandName, locationName: name });\n}\n\nexport function shouldShowOpeningLabel(location: {\n isExternal?: boolean;\n firstDayOfBusinessISO: string | null;\n phase?: LocationPhases;\n hideOpeningDate?: boolean;\n isWaitlisting?: boolean;\n}) {\n return (\n !location.isExternal &&\n location.firstDayOfBusinessISO != null &&\n !location.hideOpeningDate &&\n location.phase != null &&\n !location.isWaitlisting &&\n [LocationPhases.Signed, LocationPhases.Launch].includes(location.phase)\n );\n}\n\nexport const getDayOpeningHours = (\n openingHours: LocationOpeningHoursDto,\n day: string\n): LocationValueOpeningHour | null => {\n const currentDayOfWeek = getAbbreviatedDayName(\n day\n ) as keyof LocationOpeningHoursDto;\n\n return openingHours[currentDayOfWeek] ?? null;\n};\n\nexport function getNextAvailableDay(props: {\n day: string;\n blackoutDates: BlackoutDateDto[];\n openingHours: LocationOpeningHoursDto;\n unavailableDays: string[];\n}) {\n const { day, blackoutDates, openingHours, unavailableDays } = props;\n let isAvailableDay = false;\n let currentDay = day;\n\n while (!isAvailableDay) {\n const dayOpeningHours = getDayOpeningHours(openingHours, currentDay);\n if (\n dayOpeningHours === null ||\n blackoutDates.some((blackoutDate) =>\n isBlackoutDay(currentDay, blackoutDate)\n ) ||\n unavailableDays.includes(currentDay)\n ) {\n currentDay = getNextDay(currentDay);\n continue;\n }\n isAvailableDay = true;\n }\n\n return currentDay;\n}\n\nexport function getValidEndDays(props: {\n startDay: string;\n blackoutDates: BlackoutDateDto[];\n openingHours: LocationOpeningHoursDto;\n unavailableDays: string[];\n}) {\n const { startDay, blackoutDates, openingHours, unavailableDays } = props;\n let currentDay = startDay;\n const possibleEndDays: string[] = [startDay];\n\n while (true) {\n const nextDay = getNextDay(currentDay);\n const nextAvailableDay = getNextAvailableDay({\n day: nextDay,\n blackoutDates,\n openingHours,\n unavailableDays,\n });\n if (nextAvailableDay !== nextDay) {\n break;\n }\n possibleEndDays.push(nextDay);\n currentDay = nextDay;\n }\n\n return possibleEndDays;\n}\n\nexport function getMaxValidEndDay(\n props: Parameters[0]\n) {\n const validEndDays = getValidEndDays(props);\n return validEndDays[validEndDays.length - 1];\n}\n\nfunction isBlackoutDay(day: string, blackoutDate: BlackoutDateDto) {\n const blackoutDay = blackoutDate.date.split('T')[0];\n return day === blackoutDay;\n}\n\nexport async function getNextAvailableDateRange(props: {\n location: LocationDto;\n preferredStartDay?: string;\n preferredEndDay?: string;\n unavailableDays: string[];\n}): Promise<{ startDay: string; endDay: string }> {\n const { location, preferredEndDay, preferredStartDay, unavailableDays } =\n props;\n\n const startDay = getNextAvailableDay({\n day: await getValidDay(preferredStartDay),\n openingHours: location.openingHours,\n blackoutDates: location.blackoutDates,\n unavailableDays,\n });\n\n if (\n startDay !== preferredStartDay ||\n !preferredEndDay ||\n preferredEndDay < preferredStartDay\n ) {\n return getDefaultDateRange(startDay);\n }\n\n const endDay = getNextAvailableDay({\n day: await getValidDay(preferredEndDay),\n openingHours: location.openingHours,\n blackoutDates: location.blackoutDates,\n unavailableDays,\n });\n\n if (endDay !== preferredEndDay) {\n return getDefaultDateRange(startDay);\n }\n\n const validEndDates = await getValidEndDays({\n startDay,\n blackoutDates: location.blackoutDates,\n openingHours: location.openingHours,\n unavailableDays,\n });\n\n if (validEndDates.some((x) => x === endDay)) {\n return { startDay, endDay };\n }\n\n return getDefaultDateRange(startDay);\n}\n\nasync function getValidDay(day: string | undefined): Promise {\n const tomorrowDay = getTomorrowDay();\n const today = new Date();\n const todayAtCutoff = setHours(setMinutes(today, 0), DAY_PASS_CUTOFF_HOUR);\n\n const maxBookingDate = addMonths(today, MAX_BOOKING_MONTHS);\n\n if (day && new Date(day) > maxBookingDate) {\n return tomorrowDay;\n }\n\n if (day == null) {\n return tomorrowDay;\n }\n\n if (isSameDay(createLocalDay(day), today) && !isAfter(today, todayAtCutoff)) {\n return day;\n }\n\n const isValid = await stringDay().isValid(day);\n\n if (!isValid || day < tomorrowDay) {\n return tomorrowDay;\n }\n return day;\n}\n\nexport function getValidDaySync(day: string | undefined): string {\n const tomorrowDay = getTomorrowDay();\n const today = new Date();\n const todayAtCutoff = setHours(setMinutes(today, 0), DAY_PASS_CUTOFF_HOUR);\n\n const maxBookingDate = addMonths(today, MAX_BOOKING_MONTHS);\n\n if (day && new Date(day) > maxBookingDate) {\n return tomorrowDay;\n }\n\n if (day == null) {\n return tomorrowDay;\n }\n\n if (isSameDay(createLocalDay(day), today) && !isAfter(today, todayAtCutoff)) {\n return day;\n }\n\n const isValid = stringDay().isValidSync(day);\n\n if (!isValid || day < tomorrowDay) {\n return tomorrowDay;\n }\n return day;\n}\n\nfunction getDefaultDateRange(startDay: string) {\n return { startDay, endDay: startDay };\n}\n\nexport function isCoworkingDayPassEnabled(location: LocationDto) {\n const {\n canBuyOnline,\n availableAtLocation,\n dailyOnDemandCapacity,\n currentlySellable,\n } = location.products.coworkingDayPass;\n\n return Boolean(\n canBuyOnline &&\n currentlySellable &&\n availableAtLocation &&\n dailyOnDemandCapacity != null &&\n dailyOnDemandCapacity > 0\n );\n}\n\nexport function isSsosEnabled(location: LocationDto) {\n const { canBuyOnline, availableAtLocation, currentlySellable } =\n location.products.dedicatedOffice;\n\n return (\n canBuyOnline === true &&\n currentlySellable === true &&\n availableAtLocation === true\n );\n}\n","import { Feature, GeoJsonProperties, Geometry } from 'geojson';\nimport mapboxgl from 'mapbox-gl';\n\nimport {\n MapboxPlacesResult,\n MapboxPlacesResultTranslated,\n} from '@/app/api/mapbox-places/types';\nimport { CustomOption } from '@/components/form/CustomSelect/types';\nimport {\n LocationPhases,\n SimpleLocationDto,\n SimpleLocationSearchDto,\n} from '@/lib/locations/dto';\nimport { SearchMeetingRoomsPricesDto } from '@/lib/meeting-rooms/dto/search-meeting-rooms-prices.dto';\nimport { SimpleMeetingRoomDto } from '@/lib/meeting-rooms/dto/simple-meeting-room.dto';\n\nimport { isExternalLocation, isIndustriousLocation } from './locations';\n\nexport type LocationMapFeatureProps = Pick<\n SimpleLocationSearchDto,\n 'id' | 'slug' | 'name' | 'address' | 'city' | 'zipCode' | 'phone'\n> & {\n imageUrl?: string;\n imageAltText?: string | null;\n lat: number;\n lng: number;\n external?: boolean;\n externalLink?: string;\n state: string | null;\n phase?: LocationPhases;\n};\n\nexport type MeetingRoomMapFeatureProps = Pick<\n SimpleMeetingRoomDto,\n | 'slug'\n | 'name'\n | 'locationName'\n | 'seats'\n | 'amenities'\n | 'currencyIsoCode'\n | 'city'\n | 'locationTier'\n> & {\n imageUrl?: string;\n imageAltText?: string | null;\n prices?: SearchMeetingRoomsPricesDto['key'];\n lat: number;\n lng: number;\n};\n\nexport function getMapboxFeaturesLocations(\n locations: (SimpleLocationSearchDto | SimpleLocationDto)[]\n): Feature[] {\n return locations\n .filter(\n (loc) =>\n (isIndustriousLocation(loc) && !!loc.slug) || !!loc.geolocalization\n )\n .map((loc) => ({\n type: 'Feature',\n properties: {\n id: loc.id,\n slug: loc.slug,\n imageUrl: loc.image?.url,\n imageAltText: loc.image?.altText,\n name: loc.name,\n address: loc.address,\n city: loc.city,\n state: isIndustriousLocation(loc) ? loc.state : null,\n zipCode: loc.zipCode,\n phone: loc.phone,\n lat: loc.geolocalization.lat,\n lng: loc.geolocalization.lng,\n isExternal: loc.isExternal,\n externalLink: isExternalLocation(loc) ? loc.externalLink : undefined,\n phase: isIndustriousLocation(loc) ? loc.phase : undefined,\n },\n geometry: {\n type: 'Point',\n coordinates: [loc.geolocalization.lng, loc.geolocalization.lat],\n },\n }));\n}\n\nexport function getMapboxFeaturesMeetingRooms(\n meetingRooms: SimpleMeetingRoomDto[],\n prices?: SearchMeetingRoomsPricesDto\n): Feature[] {\n return meetingRooms.map((room) => ({\n type: 'Feature',\n properties: {\n slug: room.slug,\n name: room.name,\n seats: room.seats,\n amenities: room.amenities,\n locationName: room.locationName,\n imageUrl: room.image?.url,\n imageAltText: room.image?.altText,\n prices: prices?.[room.slug] || undefined,\n lat: room.geolocalization.lat,\n lng: room.geolocalization.lng,\n currencyIsoCode: room.currencyIsoCode,\n city: room.city,\n },\n geometry: {\n type: 'Point',\n coordinates: [room.geolocalization.lng, room.geolocalization.lat],\n },\n }));\n}\n\n// Because features come from tiled vector data, feature geometries may be split\n// or duplicated across tile boundaries. As a result, features may appear multiple times in query results.\nexport function getUniqueFeatures(\n features: Feature[]\n): Feature[] {\n const uniqueIds = new Set();\n const uniqueFeatures = [];\n for (const feature of features) {\n const id = feature.id || feature.properties?.slug;\n if (!uniqueIds.has(id)) {\n uniqueIds.add(id);\n uniqueFeatures.push(feature);\n }\n }\n return uniqueFeatures;\n}\n\nfunction getClusterLeavesOfSource(\n cluster_id: number,\n limit: number,\n offset: number,\n source: mapboxgl.GeoJSONSource\n): Promise[]> {\n return new Promise((resolve, reject) => {\n source.getClusterLeaves(cluster_id, limit, offset, (err, features) => {\n if (err) reject(err);\n else resolve(features);\n });\n });\n}\n\nexport const getArrayOfKeyRenderedFeaturesWithinView = async (\n source: mapboxgl.GeoJSONSource,\n renderedFeatures: Feature[],\n key: string\n) => {\n let arrayOfKeyRendered: string[] = [];\n try {\n for await (const feature of renderedFeatures) {\n const props = feature.properties!;\n const isACluster = props.cluster;\n if (isACluster) {\n const aFeatures = await getClusterLeavesOfSource(\n props.cluster_id,\n props.point_count,\n 0,\n source\n );\n const allInCluster = aFeatures.map((f) => f.properties![key]);\n arrayOfKeyRendered = [...arrayOfKeyRendered, ...allInCluster];\n } else {\n arrayOfKeyRendered = [...arrayOfKeyRendered, props[key]];\n }\n }\n } catch (error) {\n return arrayOfKeyRendered;\n }\n return arrayOfKeyRendered;\n};\n\nexport function getCenterFromFeatures(\n featuresLocations: Feature[]\n) {\n const bounds = new mapboxgl.LngLatBounds();\n\n for (const feature of featuresLocations) {\n if (feature.geometry.type === 'Point') {\n bounds.extend(feature.geometry.coordinates as [number, number]);\n }\n }\n\n return bounds.getCenter();\n}\n\nexport const getPlaceNameArrayFromFeature = (\n feature: MapboxPlacesResult,\n locale: string\n) => {\n const name =\n feature[`place_name_${locale}` as keyof MapboxPlacesResultTranslated] ||\n feature.place_name;\n const placeName = name.split(',');\n\n return placeName;\n};\n\nexport const mapResultsToOptions = (\n results: MapboxPlacesResult[],\n locale: string\n): CustomOption[] =>\n results.map((feat) => {\n const placeNameArray = getPlaceNameArrayFromFeature(feat, locale);\n return {\n label: placeNameArray.shift() as string,\n description: placeNameArray.join(','),\n value: feat.id as string,\n };\n });\n\nexport const hasValidCoordinates = (params: {\n lat: unknown;\n lng: unknown;\n}): params is { lat: number; lng: number } => {\n const { lat, lng } = params;\n return (\n typeof lng === 'number' &&\n !isNaN(lng) &&\n typeof lat === 'number' &&\n !isNaN(lat)\n );\n};\n","import { SelectOption } from '@/components/form/Select/types';\n\nexport function sortByLabel(a: SelectOption, b: SelectOption) {\n return a.label.localeCompare(b.label);\n}\n","export type UserDto = {\n firstName?: string;\n lastName?: string;\n email: string;\n phone?: string;\n profilePictureUrl?: string;\n jobTitle?: string;\n tenantOf?: string[] | null;\n accounts: { roles: UserAccountRoles[] }[];\n primaryAccountLocationId: string;\n};\n\nexport enum UserAccountRoles {\n DecisionMaker = 'Decision Maker',\n Member = 'Member',\n Guest = 'Guest',\n Billing = 'Billing',\n}\n","import { UserAccountRoles, UserDto } from '@/lib/users/dto/user.dto';\n\nexport function getFullName(user?: { firstName?: string; lastName?: string }) {\n const { firstName, lastName } = user ?? {};\n\n if (!firstName && !lastName) {\n return '';\n }\n\n if (!lastName) {\n return firstName ?? '';\n }\n\n return `${firstName ? `${firstName} ` : ''}${lastName}`;\n}\n\nexport function getHasMembership(user?: UserDto) {\n return (\n user != null &&\n user.accounts.some(\n (account) =>\n account.roles.includes(UserAccountRoles.Member) ||\n account.roles.includes(UserAccountRoles.DecisionMaker) ||\n account.roles.includes(UserAccountRoles.Billing)\n )\n );\n}\n\nexport function getHasDecisionMakerRole(user?: UserDto) {\n return (\n user != null &&\n user.accounts.some((account) =>\n account.roles.includes(UserAccountRoles.DecisionMaker)\n )\n );\n}\n\nexport function canBuyOfficeAt(user?: UserDto, locationId?: string) {\n const userHasMembership = getHasMembership(user);\n const isUserADecisionMaker = getHasDecisionMakerRole(user);\n const isOfficeLocationPrimaryLocation =\n locationId === user?.primaryAccountLocationId;\n\n return (\n !userHasMembership ||\n isUserADecisionMaker ||\n !isOfficeLocationPrimaryLocation\n );\n}\n\nexport function isUserIndustriousEmployee(email: string) {\n return email.endsWith('@industriousoffice.com');\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","hasValidCoords","hasValidCoordinates","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","BrandNames","stringDay","string","test","x","isValidDate","createLocationUrl","isExternal","externalLink","slug","createLocationDayPassUrl","params","dateRange","stringifyUrl","startDay","formatToDay","from","endDay","to","isIndustriousLocation","isExternalLocation","getBrandLogo","brandName","WelkinMeraki","wmLogo","TheGreatRoom","tgrLogo","mapLocationsToOptions","locations","mapLocationToOption","sort","sortByLabel","getLocationOptionLabel","sfId","city","name","getOpeningDate","dateISO","Date","substring","getOpeningLabelTranslationKey","openingDate","latitude","differenceInDays","DISPLAY_SEASON_AFTER_NB_DAYS","quarter","getQuarter","NORTH_SEASONS_BY_QUARTER","SOUTH_SEASONS_BY_QUARTER","managerRoleToTranslationKey","role","ManagerRoles","MemberExperienceAssociate","ConferenceServicesManager","TechnicalAudioVisualManager","shouldShowLogo","getLocationHighlightName","locationName","shouldShowOpeningLabel","firstDayOfBusinessISO","hideOpeningDate","phase","isWaitlisting","LocationPhases","Signed","Launch","getDayOpeningHours","openingHours","day","getAbbreviatedDayName","getNextAvailableDay","blackoutDates","unavailableDays","isAvailableDay","currentDay","dayOpeningHours","some","blackoutDate","date","split","getNextDay","getMaxValidEndDay","validEndDays","getValidEndDays","possibleEndDays","nextDay","nextAvailableDay","push","length","getValidDaySync","tomorrowDay","getTomorrowDay","today","todayAtCutoff","setHours","setMinutes","DAY_PASS_CUTOFF_HOUR","maxBookingDate","addMonths","MAX_BOOKING_MONTHS","isSameDay","createLocalDay","isAfter","isValidSync","getMapboxFeaturesLocations","filter","_locations__WEBPACK_IMPORTED_MODULE_1__","jS","loc","geolocalization","properties","imageUrl","imageAltText","altText","address","state","zipCode","phone","geometry","coordinates","getMapboxFeaturesMeetingRooms","meetingRooms","prices","room","seats","amenities","currencyIsoCode","getUniqueFeatures","features","uniqueIds","Set","uniqueFeatures","feature","has","add","getArrayOfKeyRenderedFeaturesWithinView","source","renderedFeatures","arrayOfKeyRendered","cluster","allInCluster","aFeatures","getClusterLeavesOfSource","cluster_id","limit","offset","Promise","resolve","reject","getClusterLeaves","err","point_count","f","error","getCenterFromFeatures","featuresLocations","bounds","extend","getCenter","getPlaceNameArrayFromFeature","locale","place_name","mapResultsToOptions","results","placeNameArray","feat","shift","description","join","isNaN","a","b","localeCompare","UserAccountRoles","getFullName","user","firstName","lastName","getHasMembership","accounts","account","roles","Member","DecisionMaker","Billing","canBuyOfficeAt","locationId","userHasMembership","isUserADecisionMaker","isOfficeLocationPrimaryLocation","primaryAccountLocationId","isUserIndustriousEmployee","email","endsWith","__webpack_exports__","Z"],"sourceRoot":""}