{"version":3,"file":"index.modern.mjs","sources":["../src/libraries/api-loading-status.ts","../src/libraries/google-maps-api-loader.ts","../src/components/api-provider.tsx","../src/components/map/use-map-events.ts","../src/libraries/use-deep-compare-effect.tsx","../src/components/map/use-map-options.ts","../src/hooks/use-api-loading-status.ts","../src/components/map/use-deckgl-camera-update.ts","../src/libraries/lat-lng-utils.ts","../src/components/map/use-map-camera-params.ts","../src/components/map/auth-failure-message.tsx","../src/libraries/use-callback-ref.tsx","../src/hooks/use-api-is-loaded.ts","../src/libraries/use-force-update.ts","../src/components/map/use-tracked-camera-state-ref.ts","../src/components/map/use-map-instance.ts","../src/components/map/index.tsx","../src/libraries/errors.ts","../src/hooks/use-map.ts","../src/hooks/use-maps-library.ts","../src/hooks/use-maps-event-listener.ts","../src/hooks/use-prop-binding.ts","../src/hooks/use-dom-event-listener.ts","../src/components/advanced-marker.tsx","../src/libraries/set-value-for-styles.ts","../src/components/info-window.tsx","../src/components/map-control.tsx","../src/components/marker.tsx","../src/components/pin.tsx","../src/libraries/limit-tilt-range.ts"],"sourcesContent":["export const APILoadingStatus = {\n  NOT_LOADED: 'NOT_LOADED',\n  LOADING: 'LOADING',\n  LOADED: 'LOADED',\n  FAILED: 'FAILED',\n  AUTH_FAILURE: 'AUTH_FAILURE'\n};\nexport type APILoadingStatus =\n  (typeof APILoadingStatus)[keyof typeof APILoadingStatus];\n","import {APILoadingStatus} from './api-loading-status';\n\nexport type ApiParams = {\n  key: string;\n  v?: string;\n  language?: string;\n  region?: string;\n  libraries?: string;\n  solutionChannel?: string;\n  authReferrerPolicy?: string;\n};\n\ntype LoadingStatusCallback = (status: APILoadingStatus) => void;\n\nconst MAPS_API_BASE_URL = 'https://maps.googleapis.com/maps/api/js';\n\n/**\n * A GoogleMapsApiLoader to reliably load and unload the Google Maps JavaScript API.\n *\n * The actual loading and unloading is delayed into the microtask queue, to\n * allow using the API in an useEffect hook, without worrying about multiple API loads.\n */\nexport class GoogleMapsApiLoader {\n  /**\n   * The current loadingStatus of the API.\n   */\n  public static loadingStatus: APILoadingStatus = APILoadingStatus.NOT_LOADED;\n\n  /**\n   * The parameters used for first loading the API.\n   */\n  public static serializedApiParams?: string;\n\n  /**\n   * A list of functions to be notified when the loading status changes.\n   */\n  private static listeners: LoadingStatusCallback[] = [];\n\n  /**\n   * Loads the Maps JavaScript API with the specified parameters.\n   * Since the Maps library can only be loaded once per page, this will\n   * produce a warning when called multiple times with different\n   * parameters.\n   *\n   * The returned promise resolves when loading completes\n   * and rejects in case of an error or when the loading was aborted.\n   */\n  static async load(\n    params: ApiParams,\n    onLoadingStatusChange: (status: APILoadingStatus) => void\n  ): Promise<void> {\n    const libraries = params.libraries ? params.libraries.split(',') : [];\n    const serializedParams = this.serializeParams(params);\n\n    this.listeners.push(onLoadingStatusChange);\n\n    // Note: if `google.maps.importLibrary` has been defined externally, we\n    //   assume that loading is complete and successful.\n    //   If it was defined by a previous call to this method, a warning\n    //   message is logged if there are differences in api-parameters used\n    //   for both calls.\n\n    if (window.google?.maps?.importLibrary as unknown) {\n      // no serialized parameters means it was loaded externally\n      if (!this.serializedApiParams) {\n        this.loadingStatus = APILoadingStatus.LOADED;\n      }\n      this.notifyLoadingStatusListeners();\n    } else {\n      this.serializedApiParams = serializedParams;\n      this.initImportLibrary(params);\n    }\n\n    if (\n      this.serializedApiParams &&\n      this.serializedApiParams !== serializedParams\n    ) {\n      console.warn(\n        `[google-maps-api-loader] The maps API has already been loaded ` +\n          `with different parameters and will not be loaded again. Refresh the ` +\n          `page for new values to have effect.`\n      );\n    }\n\n    const librariesToLoad = ['maps', ...libraries];\n    await Promise.all(\n      librariesToLoad.map(name => google.maps.importLibrary(name))\n    );\n  }\n\n  /**\n   * Serialize the paramters used to load the library for easier comparison.\n   */\n  private static serializeParams(params: ApiParams): string {\n    return [\n      params.v,\n      params.key,\n      params.language,\n      params.region,\n      params.authReferrerPolicy,\n      params.solutionChannel\n    ].join('/');\n  }\n\n  /**\n   * Creates the global `google.maps.importLibrary` function for bootstrapping.\n   * This is essentially a formatted version of the dynamic loading script\n   * from the official documentation with some minor adjustments.\n   *\n   * The created importLibrary function will load the Google Maps JavaScript API,\n   * which will then replace the `google.maps.importLibrary` function with the full\n   * implementation.\n   *\n   * @see https://developers.google.com/maps/documentation/javascript/load-maps-js-api#dynamic-library-import\n   */\n  private static initImportLibrary(params: ApiParams) {\n    if (!window.google) window.google = {} as never;\n    if (!window.google.maps) window.google.maps = {} as never;\n\n    if (window.google.maps['importLibrary']) {\n      console.error(\n        '[google-maps-api-loader-internal]: initImportLibrary must only be called once'\n      );\n\n      return;\n    }\n\n    let apiPromise: Promise<void> | null = null;\n\n    const loadApi = () => {\n      if (apiPromise) return apiPromise;\n\n      apiPromise = new Promise((resolve, reject) => {\n        const scriptElement = document.createElement('script');\n        const urlParams = new URLSearchParams();\n\n        for (const [key, value] of Object.entries(params)) {\n          const urlParamName = key.replace(\n            /[A-Z]/g,\n            t => '_' + t[0].toLowerCase()\n          );\n          urlParams.set(urlParamName, value);\n        }\n        urlParams.set('loading', 'async');\n        urlParams.set('callback', '__googleMapsCallback__');\n\n        scriptElement.async = true;\n        scriptElement.src = MAPS_API_BASE_URL + `?` + urlParams.toString();\n        scriptElement.nonce =\n          (document.querySelector('script[nonce]') as HTMLScriptElement)\n            ?.nonce || '';\n\n        scriptElement.onerror = () => {\n          this.loadingStatus = APILoadingStatus.FAILED;\n          this.notifyLoadingStatusListeners();\n          reject(new Error('The Google Maps JavaScript API could not load.'));\n        };\n\n        window.__googleMapsCallback__ = () => {\n          this.loadingStatus = APILoadingStatus.LOADED;\n          this.notifyLoadingStatusListeners();\n          resolve();\n        };\n\n        window.gm_authFailure = () => {\n          this.loadingStatus = APILoadingStatus.AUTH_FAILURE;\n          this.notifyLoadingStatusListeners();\n        };\n\n        this.loadingStatus = APILoadingStatus.LOADING;\n        this.notifyLoadingStatusListeners();\n\n        document.head.append(scriptElement);\n      });\n\n      return apiPromise;\n    };\n\n    // for the first load, we declare an importLibrary function that will\n    // be overwritten once the api is loaded.\n    google.maps.importLibrary = libraryName =>\n      loadApi().then(() => google.maps.importLibrary(libraryName));\n  }\n\n  /**\n   * Calls all registered loadingStatusListeners after a status update.\n   */\n  private static notifyLoadingStatusListeners() {\n    for (const fn of this.listeners) {\n      fn(this.loadingStatus);\n    }\n  }\n}\n\n// Declare global maps callback functions\ndeclare global {\n  interface Window {\n    __googleMapsCallback__?: () => void;\n    gm_authFailure?: () => void;\n  }\n}\n","import React, {\n  PropsWithChildren,\n  ReactElement,\n  useCallback,\n  useEffect,\n  useMemo,\n  useReducer,\n  useState\n} from 'react';\n\nimport {\n  ApiParams,\n  GoogleMapsApiLoader\n} from '../libraries/google-maps-api-loader';\nimport {APILoadingStatus} from '../libraries/api-loading-status';\n\ntype ImportLibraryFunction = typeof google.maps.importLibrary;\ntype GoogleMapsLibrary = Awaited<ReturnType<ImportLibraryFunction>>;\ntype LoadedLibraries = {[name: string]: GoogleMapsLibrary};\n\nexport interface APIProviderContextValue {\n  status: APILoadingStatus;\n  loadedLibraries: LoadedLibraries;\n  importLibrary: typeof google.maps.importLibrary;\n  mapInstances: Record<string, google.maps.Map>;\n  addMapInstance: (map: google.maps.Map, id?: string) => void;\n  removeMapInstance: (id?: string) => void;\n  clearMapInstances: () => void;\n}\n\nconst DEFAULT_SOLUTION_CHANNEL = 'GMP_visgl_rgmlibrary_v1_default';\n\nexport const APIProviderContext =\n  React.createContext<APIProviderContextValue | null>(null);\n\nexport type APIProviderProps = {\n  /**\n   * apiKey must be provided to load the Google Maps JavaScript API. To create an API key, see: https://developers.google.com/maps/documentation/javascript/get-api-key\n   * Part of:\n   */\n  apiKey: string;\n  /**\n   * A custom id to reference the script tag can be provided. The default is set to 'google-maps-api'\n   * @default 'google-maps-api'\n   */\n  libraries?: Array<string>;\n  /**\n   * A specific version of the Google Maps JavaScript API can be used.\n   * Read more about versioning: https://developers.google.com/maps/documentation/javascript/versions\n   * Part of: https://developers.google.com/maps/documentation/javascript/url-params\n   */\n  version?: string;\n  /**\n   * Sets the map to a specific region.\n   * Read more about localizing the Map: https://developers.google.com/maps/documentation/javascript/localization\n   * Part of: https://developers.google.com/maps/documentation/javascript/url-params\n   */\n  region?: string;\n  /**\n   * Use a specific language for the map.\n   * Read more about localizing the Map: https://developers.google.com/maps/documentation/javascript/localization\n   * Part of: https://developers.google.com/maps/documentation/javascript/url-params\n   */\n  language?: string;\n  /**\n   * auth_referrer_policy can be set to 'origin'.\n   * Part of: https://developers.google.com/maps/documentation/javascript/url-params\n   */\n  authReferrerPolicy?: string;\n  /**\n   * To understand usage and ways to improve our solutions, Google includes the\n   * `solution_channel` query parameter in API calls to gather information about\n   * code usage. You may opt out at any time by setting this attribute to an\n   * empty string. Read more in the\n   * [documentation](https://developers.google.com/maps/reporting-and-monitoring/reporting#solutions-usage).\n   */\n  solutionChannel?: string;\n  /**\n   * A function that can be used to execute code after the Google Maps JavaScript API has been loaded.\n   */\n  onLoad?: () => void;\n  /**\n   * A function that will be called if there was an error when loading the Google Maps JavaScript API.\n   */\n  onError?: (error: unknown) => void;\n};\n\n/**\n * local hook to set up the map-instance management context.\n */\nfunction useMapInstances() {\n  const [mapInstances, setMapInstances] = useState<\n    Record<string, google.maps.Map>\n  >({});\n\n  const addMapInstance = (mapInstance: google.maps.Map, id = 'default') => {\n    setMapInstances(instances => ({...instances, [id]: mapInstance}));\n  };\n\n  const removeMapInstance = (id = 'default') => {\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    setMapInstances(({[id]: _, ...remaining}) => remaining);\n  };\n\n  const clearMapInstances = () => {\n    setMapInstances({});\n  };\n\n  return {mapInstances, addMapInstance, removeMapInstance, clearMapInstances};\n}\n\n/**\n * local hook to handle the loading of the maps API, returns the current loading status\n * @param props\n */\nfunction useGoogleMapsApiLoader(props: APIProviderProps) {\n  const {\n    onLoad,\n    onError,\n    apiKey,\n    version,\n    libraries = [],\n    ...otherApiParams\n  } = props;\n\n  const [status, setStatus] = useState<APILoadingStatus>(\n    GoogleMapsApiLoader.loadingStatus\n  );\n  const [loadedLibraries, addLoadedLibrary] = useReducer(\n    (\n      loadedLibraries: LoadedLibraries,\n      action: {name: keyof LoadedLibraries; value: LoadedLibraries[string]}\n    ) => {\n      return loadedLibraries[action.name]\n        ? loadedLibraries\n        : {...loadedLibraries, [action.name]: action.value};\n    },\n    {}\n  );\n\n  const librariesString = useMemo(() => libraries?.join(','), [libraries]);\n  const serializedParams = useMemo(\n    () => JSON.stringify({apiKey, version, ...otherApiParams}),\n    [apiKey, version, otherApiParams]\n  );\n\n  const importLibrary: typeof google.maps.importLibrary = useCallback(\n    async (name: string) => {\n      if (loadedLibraries[name]) {\n        return loadedLibraries[name];\n      }\n\n      if (!google?.maps?.importLibrary) {\n        throw new Error(\n          '[api-provider-internal] importLibrary was called before ' +\n            'google.maps.importLibrary was defined.'\n        );\n      }\n\n      const res = await window.google.maps.importLibrary(name);\n      addLoadedLibrary({name, value: res});\n\n      return res;\n    },\n    [loadedLibraries]\n  );\n\n  useEffect(\n    () => {\n      (async () => {\n        try {\n          const params: ApiParams = {key: apiKey, ...otherApiParams};\n          if (version) params.v = version;\n          if (librariesString?.length > 0) params.libraries = librariesString;\n\n          if (params.solutionChannel === undefined)\n            params.solutionChannel = DEFAULT_SOLUTION_CHANNEL;\n          else if (params.solutionChannel === '') delete params.solutionChannel;\n\n          await GoogleMapsApiLoader.load(params, status => setStatus(status));\n\n          for (const name of ['core', 'maps', ...libraries]) {\n            await importLibrary(name);\n          }\n\n          if (onLoad) {\n            onLoad();\n          }\n        } catch (error) {\n          if (onError) {\n            onError(error);\n          } else {\n            console.error(\n              '<ApiProvider> failed to load the Google Maps JavaScript API',\n              error\n            );\n          }\n        }\n      })();\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [apiKey, librariesString, serializedParams]\n  );\n\n  return {\n    status,\n    loadedLibraries,\n    importLibrary\n  };\n}\n\n/**\n * Component to wrap the components from this library and load the Google Maps JavaScript API\n */\nexport const APIProvider = (\n  props: PropsWithChildren<APIProviderProps>\n): ReactElement | null => {\n  const {children, ...loaderProps} = props;\n  const {mapInstances, addMapInstance, removeMapInstance, clearMapInstances} =\n    useMapInstances();\n\n  const {status, loadedLibraries, importLibrary} =\n    useGoogleMapsApiLoader(loaderProps);\n\n  const contextValue: APIProviderContextValue = useMemo(\n    () => ({\n      mapInstances,\n      addMapInstance,\n      removeMapInstance,\n      clearMapInstances,\n      status,\n      loadedLibraries,\n      importLibrary\n    }),\n    [\n      mapInstances,\n      addMapInstance,\n      removeMapInstance,\n      clearMapInstances,\n      status,\n      loadedLibraries,\n      importLibrary\n    ]\n  );\n\n  return (\n    <APIProviderContext.Provider value={contextValue}>\n      {children}\n    </APIProviderContext.Provider>\n  );\n};\n","import {useEffect} from 'react';\n\n/**\n * Handlers for all events that could be emitted by map-instances.\n */\nexport type MapEventProps = Partial<{\n  // map view state events\n  onBoundsChanged: (event: MapCameraChangedEvent) => void;\n  onCenterChanged: (event: MapCameraChangedEvent) => void;\n  onHeadingChanged: (event: MapCameraChangedEvent) => void;\n  onTiltChanged: (event: MapCameraChangedEvent) => void;\n  onZoomChanged: (event: MapCameraChangedEvent) => void;\n  onCameraChanged: (event: MapCameraChangedEvent) => void;\n\n  // mouse / touch / pointer events\n  onClick: (event: MapMouseEvent) => void;\n  onDblclick: (event: MapMouseEvent) => void;\n  onContextmenu: (event: MapMouseEvent) => void;\n  onMousemove: (event: MapMouseEvent) => void;\n  onMouseover: (event: MapMouseEvent) => void;\n  onMouseout: (event: MapMouseEvent) => void;\n  onDrag: (event: MapEvent) => void;\n  onDragend: (event: MapEvent) => void;\n  onDragstart: (event: MapEvent) => void;\n\n  // loading events\n  onTilesLoaded: (event: MapEvent) => void;\n  onIdle: (event: MapEvent) => void;\n\n  // configuration events\n  onProjectionChanged: (event: MapEvent) => void;\n  onIsFractionalZoomEnabledChanged: (event: MapEvent) => void;\n  onMapCapabilitiesChanged: (event: MapEvent) => void;\n  onMapTypeIdChanged: (event: MapEvent) => void;\n  onRenderingTypeChanged: (event: MapEvent) => void;\n}>;\n\n/**\n * Sets up effects to bind event-handlers for all event-props in MapEventProps.\n * @internal\n */\nexport function useMapEvents(\n  map: google.maps.Map | null,\n  props: MapEventProps\n) {\n  // note: calling a useEffect hook from within a loop is prohibited by the\n  // rules of hooks, but it's ok here since it's unconditional and the number\n  // and order of iterations is always strictly the same.\n  // (see https://legacy.reactjs.org/docs/hooks-rules.html)\n\n  for (const propName of eventPropNames) {\n    // fixme: this cast is essentially a 'trust me, bro' for typescript, but\n    //   a proper solution seems way too complicated right now\n    const handler = props[propName] as (ev: MapEvent) => void;\n    const eventType = propNameToEventType[propName];\n\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    useEffect(() => {\n      if (!map) return;\n      if (!handler) return;\n\n      const listener = google.maps.event.addListener(\n        map,\n        eventType,\n        (ev?: google.maps.MapMouseEvent | google.maps.IconMouseEvent) => {\n          handler(createMapEvent(eventType, map, ev));\n        }\n      );\n\n      return () => listener.remove();\n    }, [map, eventType, handler]);\n  }\n}\n\n/**\n * Create the wrapped map-events used for the event-props.\n * @param type the event type as it is specified to the maps api\n * @param map the map instance the event originates from\n * @param srcEvent the source-event if there is one.\n */\nfunction createMapEvent(\n  type: string,\n  map: google.maps.Map,\n  srcEvent?: google.maps.MapMouseEvent | google.maps.IconMouseEvent\n): MapEvent {\n  const ev: MapEvent = {\n    type,\n    map,\n    detail: {},\n    stoppable: false,\n    stop: () => {}\n  };\n\n  if (cameraEventTypes.includes(type)) {\n    const camEvent = ev as MapCameraChangedEvent;\n\n    const center = map.getCenter();\n    const zoom = map.getZoom();\n    const heading = map.getHeading() || 0;\n    const tilt = map.getTilt() || 0;\n    const bounds = map.getBounds();\n\n    if (!center || !bounds || !Number.isFinite(zoom)) {\n      console.warn(\n        '[createEvent] at least one of the values from the map ' +\n          'returned undefined. This is not expected to happen. Please ' +\n          'report an issue at https://github.com/visgl/react-google-maps/issues/new'\n      );\n    }\n\n    camEvent.detail = {\n      center: center?.toJSON() || {lat: 0, lng: 0},\n      zoom: (zoom as number) || 0,\n      heading: heading as number,\n      tilt: tilt as number,\n      bounds: bounds?.toJSON() || {\n        north: 90,\n        east: 180,\n        south: -90,\n        west: -180\n      }\n    };\n\n    return camEvent;\n  } else if (mouseEventTypes.includes(type)) {\n    if (!srcEvent)\n      throw new Error('[createEvent] mouse events must provide a srcEvent');\n    const mouseEvent = ev as MapMouseEvent;\n\n    mouseEvent.domEvent = srcEvent.domEvent;\n    mouseEvent.stoppable = true;\n    mouseEvent.stop = () => srcEvent.stop();\n\n    mouseEvent.detail = {\n      latLng: srcEvent.latLng?.toJSON() || null,\n      placeId: (srcEvent as google.maps.IconMouseEvent).placeId\n    };\n\n    return mouseEvent;\n  }\n\n  return ev;\n}\n\n/**\n * maps the camelCased names of event-props to the corresponding event-types\n * used in the maps API.\n */\nconst propNameToEventType: {[prop in keyof Required<MapEventProps>]: string} = {\n  onBoundsChanged: 'bounds_changed',\n  onCenterChanged: 'center_changed',\n  onClick: 'click',\n  onContextmenu: 'contextmenu',\n  onDblclick: 'dblclick',\n  onDrag: 'drag',\n  onDragend: 'dragend',\n  onDragstart: 'dragstart',\n  onHeadingChanged: 'heading_changed',\n  onIdle: 'idle',\n  onIsFractionalZoomEnabledChanged: 'isfractionalzoomenabled_changed',\n  onMapCapabilitiesChanged: 'mapcapabilities_changed',\n  onMapTypeIdChanged: 'maptypeid_changed',\n  onMousemove: 'mousemove',\n  onMouseout: 'mouseout',\n  onMouseover: 'mouseover',\n  onProjectionChanged: 'projection_changed',\n  onRenderingTypeChanged: 'renderingtype_changed',\n  onTilesLoaded: 'tilesloaded',\n  onTiltChanged: 'tilt_changed',\n  onZoomChanged: 'zoom_changed',\n\n  // note: onCameraChanged is an alias for the bounds_changed event,\n  // since that is going to be fired in every situation where the camera is\n  // updated.\n  onCameraChanged: 'bounds_changed'\n} as const;\n\nconst cameraEventTypes = [\n  'bounds_changed',\n  'center_changed',\n  'heading_changed',\n  'tilt_changed',\n  'zoom_changed'\n];\n\nconst mouseEventTypes = [\n  'click',\n  'contextmenu',\n  'dblclick',\n  'mousemove',\n  'mouseout',\n  'mouseover'\n];\n\ntype MapEventPropName = keyof MapEventProps;\nconst eventPropNames = Object.keys(propNameToEventType) as MapEventPropName[];\n\nexport type MapEvent<T = unknown> = {\n  type: string;\n  map: google.maps.Map;\n  detail: T;\n\n  stoppable: boolean;\n  stop: () => void;\n  domEvent?: MouseEvent | TouchEvent | PointerEvent | KeyboardEvent | Event;\n};\n\nexport type MapMouseEvent = MapEvent<{\n  latLng: google.maps.LatLngLiteral | null;\n  placeId: string | null;\n}>;\n\nexport type MapCameraChangedEvent = MapEvent<{\n  center: google.maps.LatLngLiteral;\n  bounds: google.maps.LatLngBoundsLiteral;\n  zoom: number;\n  heading: number;\n  tilt: number;\n}>;\n","import {DependencyList, EffectCallback, useEffect, useRef} from 'react';\nimport isDeepEqual from 'fast-deep-equal';\n\nexport function useDeepCompareEffect(\n  effect: EffectCallback,\n  deps: DependencyList\n) {\n  const ref = useRef<DependencyList | undefined>(undefined);\n\n  if (!ref.current || !isDeepEqual(deps, ref.current)) {\n    ref.current = deps;\n  }\n\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  useEffect(effect, ref.current);\n}\n","import {MapProps} from '../map';\nimport {useDeepCompareEffect} from '../../libraries/use-deep-compare-effect';\n\nconst mapOptionKeys: Set<keyof google.maps.MapOptions> = new Set([\n  'backgroundColor',\n  'clickableIcons',\n  'controlSize',\n  'disableDefaultUI',\n  'disableDoubleClickZoom',\n  'draggable',\n  'draggableCursor',\n  'draggingCursor',\n  'fullscreenControl',\n  'fullscreenControlOptions',\n  'gestureHandling',\n  'headingInteractionEnabled',\n  'isFractionalZoomEnabled',\n  'keyboardShortcuts',\n  'mapTypeControl',\n  'mapTypeControlOptions',\n  'mapTypeId',\n  'maxZoom',\n  'minZoom',\n  'noClear',\n  'panControl',\n  'panControlOptions',\n  'restriction',\n  'rotateControl',\n  'rotateControlOptions',\n  'scaleControl',\n  'scaleControlOptions',\n  'scrollwheel',\n  'streetView',\n  'streetViewControl',\n  'streetViewControlOptions',\n  'styles',\n  'tiltInteractionEnabled',\n  'zoomControl',\n  'zoomControlOptions'\n]);\n\n/**\n * Internal hook to update the map-options when props are changed.\n *\n * @param map the map instance\n * @param mapProps the props to update the map-instance with\n * @internal\n */\nexport function useMapOptions(map: google.maps.Map | null, mapProps: MapProps) {\n  /* eslint-disable react-hooks/exhaustive-deps --\n   *\n   * The following effects aren't triggered when the map is changed.\n   * In that case, the values will be or have been passed to the map\n   * constructor via mapOptions.\n   */\n\n  const mapOptions: google.maps.MapOptions = {};\n  const keys = Object.keys(mapProps) as (keyof google.maps.MapOptions)[];\n  for (const key of keys) {\n    if (!mapOptionKeys.has(key)) continue;\n\n    mapOptions[key] = mapProps[key] as never;\n  }\n\n  // update the map options when mapOptions is changed\n  // Note: due to the destructuring above, mapOptions will be seen as changed\n  //   with every re-render, so we're assuming the maps-api will properly\n  //   deal with unchanged option-values passed into setOptions.\n  useDeepCompareEffect(() => {\n    if (!map) return;\n\n    map.setOptions(mapOptions);\n  }, [mapOptions]);\n  /* eslint-enable react-hooks/exhaustive-deps */\n}\n","import {useContext} from 'react';\nimport {APIProviderContext} from '../components/api-provider';\nimport {APILoadingStatus} from '../libraries/api-loading-status';\n\nexport function useApiLoadingStatus(): APILoadingStatus {\n  return useContext(APIProviderContext)?.status || APILoadingStatus.NOT_LOADED;\n}\n","import {useLayoutEffect} from 'react';\n\nexport type DeckGlCompatProps = {\n  /**\n   * Viewport from deck.gl\n   */\n  viewport?: unknown;\n  /**\n   * View state from deck.gl\n   */\n  viewState?: Record<string, unknown>;\n  /**\n   * Initial View State from deck.gl\n   */\n  initialViewState?: Record<string, unknown>;\n};\n\n/**\n * Internal hook that updates the camera when deck.gl viewState changes.\n * @internal\n */\nexport function useDeckGLCameraUpdate(\n  map: google.maps.Map | null,\n  props: DeckGlCompatProps\n) {\n  const {viewport, viewState} = props;\n  const isDeckGlControlled = !!viewport;\n\n  useLayoutEffect(() => {\n    if (!map || !viewState) return;\n\n    const {\n      latitude,\n      longitude,\n      bearing: heading,\n      pitch: tilt,\n      zoom\n    } = viewState as Record<string, number>;\n\n    map.moveCamera({\n      center: {lat: latitude, lng: longitude},\n      heading,\n      tilt,\n      zoom: zoom + 1\n    });\n  }, [map, viewState]);\n\n  return isDeckGlControlled;\n}\n","export function isLatLngLiteral(\n  obj: unknown\n): obj is google.maps.LatLngLiteral {\n  if (!obj || typeof obj !== 'object') return false;\n  if (!('lat' in obj && 'lng' in obj)) return false;\n\n  return Number.isFinite(obj.lat) && Number.isFinite(obj.lng);\n}\n\nexport function latLngEquals(\n  a: google.maps.LatLngLiteral | google.maps.LatLng | undefined | null,\n  b: google.maps.LatLngLiteral | google.maps.LatLng | undefined | null\n): boolean {\n  if (!a || !b) return false;\n  const A = toLatLngLiteral(a);\n  const B = toLatLngLiteral(b);\n  if (A.lat !== B.lat || A.lng !== B.lng) return false;\n  return true;\n}\n\nexport function toLatLngLiteral(\n  obj: google.maps.LatLngLiteral | google.maps.LatLng\n): google.maps.LatLngLiteral {\n  if (isLatLngLiteral(obj)) return obj;\n\n  return obj.toJSON();\n}\n","import {useLayoutEffect} from 'react';\nimport {CameraStateRef} from './use-tracked-camera-state-ref';\nimport {toLatLngLiteral} from '../../libraries/lat-lng-utils';\nimport {MapProps} from '../map';\n\nexport function useMapCameraParams(\n  map: google.maps.Map | null,\n  cameraStateRef: CameraStateRef,\n  mapProps: MapProps\n) {\n  const center = mapProps.center ? toLatLngLiteral(mapProps.center) : null;\n\n  let lat: number | null = null;\n  let lng: number | null = null;\n\n  if (center && Number.isFinite(center.lat) && Number.isFinite(center.lng)) {\n    lat = center.lat as number;\n    lng = center.lng as number;\n  }\n\n  const zoom: number | null = Number.isFinite(mapProps.zoom)\n    ? (mapProps.zoom as number)\n    : null;\n  const heading: number | null = Number.isFinite(mapProps.heading)\n    ? (mapProps.heading as number)\n    : null;\n  const tilt: number | null = Number.isFinite(mapProps.tilt)\n    ? (mapProps.tilt as number)\n    : null;\n\n  // the following effect runs for every render of the map component and checks\n  // if there are differences between the known state of the map instance\n  // (cameraStateRef, which is updated by all bounds_changed events) and the\n  // desired state in the props.\n\n  useLayoutEffect(() => {\n    if (!map) return;\n\n    const nextCamera: google.maps.CameraOptions = {};\n    let needsUpdate = false;\n\n    if (\n      lat !== null &&\n      lng !== null &&\n      (cameraStateRef.current.center.lat !== lat ||\n        cameraStateRef.current.center.lng !== lng)\n    ) {\n      nextCamera.center = {lat, lng};\n      needsUpdate = true;\n    }\n\n    if (zoom !== null && cameraStateRef.current.zoom !== zoom) {\n      nextCamera.zoom = zoom as number;\n      needsUpdate = true;\n    }\n\n    if (heading !== null && cameraStateRef.current.heading !== heading) {\n      nextCamera.heading = heading as number;\n      needsUpdate = true;\n    }\n\n    if (tilt !== null && cameraStateRef.current.tilt !== tilt) {\n      nextCamera.tilt = tilt as number;\n      needsUpdate = true;\n    }\n\n    if (needsUpdate) {\n      map.moveCamera(nextCamera);\n    }\n  });\n}\n","import React, {CSSProperties} from 'react';\n\nexport const AuthFailureMessage = () => {\n  const style: CSSProperties = {\n    position: 'absolute',\n    top: 0,\n    left: 0,\n    bottom: 0,\n    right: 0,\n    zIndex: 999,\n    display: 'flex',\n    flexFlow: 'column nowrap',\n    textAlign: 'center',\n    justifyContent: 'center',\n    fontSize: '.8rem',\n    color: 'rgba(0,0,0,0.6)',\n    background: '#dddddd',\n    padding: '1rem 1.5rem'\n  };\n\n  return (\n    <div style={style}>\n      <h2>Error: AuthFailure</h2>\n      <p>\n        A problem with your API key prevents the map from rendering correctly.\n        Please make sure the value of the <code>APIProvider.apiKey</code> prop\n        is correct. Check the error-message in the console for further details.\n      </p>\n    </div>\n  );\n};\n","import {Ref, useCallback, useState} from 'react';\n\nexport function useCallbackRef<T>() {\n  const [el, setEl] = useState<T | null>(null);\n  const ref = useCallback((value: T) => setEl(value), [setEl]);\n\n  return [el, ref as Ref<T>] as const;\n}\n","import {useApiLoadingStatus} from './use-api-loading-status';\nimport {APILoadingStatus} from '../libraries/api-loading-status';\n/**\n * Hook to check if the Maps JavaScript API is loaded\n */\nexport function useApiIsLoaded(): boolean {\n  const status = useApiLoadingStatus();\n\n  return status === APILoadingStatus.LOADED;\n}\n","import {useReducer} from 'react';\n\nexport function useForceUpdate(): () => void {\n  const [, forceUpdate] = useReducer(x => x + 1, 0);\n\n  return forceUpdate;\n}\n","import {MutableRefObject, useEffect, useRef} from 'react';\nimport {useForceUpdate} from '../../libraries/use-force-update';\n\nexport type CameraState = {\n  center: google.maps.LatLngLiteral;\n  heading: number;\n  tilt: number;\n  zoom: number;\n};\n\nexport type CameraStateRef = MutableRefObject<CameraState>;\n\nfunction handleBoundsChange(map: google.maps.Map, ref: CameraStateRef) {\n  const center = map.getCenter();\n  const zoom = map.getZoom();\n  const heading = map.getHeading() || 0;\n  const tilt = map.getTilt() || 0;\n  const bounds = map.getBounds();\n\n  if (!center || !bounds || !Number.isFinite(zoom)) {\n    console.warn(\n      '[useTrackedCameraState] at least one of the values from the map ' +\n        'returned undefined. This is not expected to happen. Please ' +\n        'report an issue at https://github.com/visgl/react-google-maps/issues/new'\n    );\n  }\n\n  // fixme: do we need the `undefined` cases for the camera-params? When are they used in the maps API?\n  Object.assign(ref.current, {\n    center: center?.toJSON() || {lat: 0, lng: 0},\n    zoom: (zoom as number) || 0,\n    heading: heading as number,\n    tilt: tilt as number\n  });\n}\n\n/**\n * Creates a mutable ref object to track the last known state of the map camera.\n * This is used in `useMapCameraParams` to reduce stuttering in normal operation\n * by avoiding updates of the map camera with values that have already been processed.\n */\nexport function useTrackedCameraStateRef(\n  map: google.maps.Map | null\n): CameraStateRef {\n  const forceUpdate = useForceUpdate();\n  const ref = useRef<CameraState>({\n    center: {lat: 0, lng: 0},\n    heading: 0,\n    tilt: 0,\n    zoom: 0\n  });\n\n  // Record camera state with every bounds_changed event dispatched by the map.\n  // This data is used to prevent feeding these values back to the\n  // map-instance when a typical \"controlled component\" setup (state variable is\n  // fed into and updated by the map).\n  useEffect(() => {\n    if (!map) return;\n\n    const listener = google.maps.event.addListener(\n      map,\n      'bounds_changed',\n      () => {\n        handleBoundsChange(map, ref);\n\n        // When an event is occured, we have to update during the next cycle.\n        // The application could decide to ignore the event and not update any\n        // camera props of the map, meaning that in that case we will have to\n        // 'undo' the change to the camera.\n        forceUpdate();\n      }\n    );\n\n    return () => listener.remove();\n  }, [map, forceUpdate]);\n\n  return ref;\n}\n","import {Ref, useEffect, useRef, useState} from 'react';\n\nimport {MapProps} from '../map';\nimport {APIProviderContextValue} from '../api-provider';\n\nimport {useCallbackRef} from '../../libraries/use-callback-ref';\nimport {useApiIsLoaded} from '../../hooks/use-api-is-loaded';\nimport {\n  CameraState,\n  CameraStateRef,\n  useTrackedCameraStateRef\n} from './use-tracked-camera-state-ref';\n\n/**\n * Stores a stack of map-instances for each mapId. Whenever an\n * instance is used, it is removed from the stack while in use,\n * and returned to the stack when the component unmounts.\n * This allows us to correctly implement caching for multiple\n * maps om the same page, while reusing as much as possible.\n *\n * FIXME: while it should in theory be possible to reuse maps solely\n *   based on the mapId (as all other parameters can be changed at\n *   runtime), we don't yet have good enough tracking of options to\n *   reliably unset all the options that have been set.\n */\nclass CachedMapStack {\n  static entries: {[key: string]: google.maps.Map[]} = {};\n\n  static has(key: string) {\n    return this.entries[key] && this.entries[key].length > 0;\n  }\n\n  static pop(key: string) {\n    if (!this.entries[key]) return null;\n\n    return this.entries[key].pop() || null;\n  }\n\n  static push(key: string, value: google.maps.Map) {\n    if (!this.entries[key]) this.entries[key] = [];\n\n    this.entries[key].push(value);\n  }\n}\n\n/**\n * The main hook takes care of creating map-instances and registering them in\n * the api-provider context.\n * @return a tuple of the map-instance created (or null) and the callback\n *   ref that will be used to pass the map-container into this hook.\n * @internal\n */\nexport function useMapInstance(\n  props: MapProps,\n  context: APIProviderContextValue\n): readonly [\n  map: google.maps.Map | null,\n  containerRef: Ref<HTMLDivElement>,\n  cameraStateRef: CameraStateRef\n] {\n  const apiIsLoaded = useApiIsLoaded();\n  const [map, setMap] = useState<google.maps.Map | null>(null);\n  const [container, containerRef] = useCallbackRef<HTMLDivElement>();\n\n  const cameraStateRef = useTrackedCameraStateRef(map);\n\n  const {\n    id,\n    defaultBounds,\n    defaultCenter,\n    defaultZoom,\n    defaultHeading,\n    defaultTilt,\n    reuseMaps,\n    renderingType,\n    colorScheme,\n\n    ...mapOptions\n  } = props;\n\n  const hasZoom = props.zoom !== undefined || props.defaultZoom !== undefined;\n  const hasCenter =\n    props.center !== undefined || props.defaultCenter !== undefined;\n\n  if (!defaultBounds && (!hasZoom || !hasCenter)) {\n    console.warn(\n      '<Map> component is missing configuration. ' +\n        'You have to provide zoom and center (via the `zoom`/`defaultZoom` and ' +\n        '`center`/`defaultCenter` props) or specify the region to show using ' +\n        '`defaultBounds`. See ' +\n        'https://visgl.github.io/react-google-maps/docs/api-reference/components/map#required'\n    );\n  }\n\n  // apply default camera props if available and not overwritten by controlled props\n  if (!mapOptions.center && defaultCenter) mapOptions.center = defaultCenter;\n  if (!mapOptions.zoom && Number.isFinite(defaultZoom))\n    mapOptions.zoom = defaultZoom;\n  if (!mapOptions.heading && Number.isFinite(defaultHeading))\n    mapOptions.heading = defaultHeading;\n  if (!mapOptions.tilt && Number.isFinite(defaultTilt))\n    mapOptions.tilt = defaultTilt;\n\n  for (const key of Object.keys(mapOptions) as (keyof typeof mapOptions)[])\n    if (mapOptions[key] === undefined) delete mapOptions[key];\n\n  const savedMapStateRef = useRef<{\n    mapId?: string | null;\n    cameraState: CameraState;\n  }>();\n\n  // create the map instance and register it in the context\n  useEffect(\n    () => {\n      if (!container || !apiIsLoaded) return;\n\n      const {addMapInstance, removeMapInstance} = context;\n\n      // note: colorScheme (upcoming feature) isn't yet in the typings, remove once that is fixed:\n      const {mapId} = props;\n      const cacheKey = `${mapId || 'default'}:${renderingType || 'default'}:${colorScheme || 'LIGHT'}`;\n\n      let mapDiv: HTMLElement;\n      let map: google.maps.Map;\n\n      if (reuseMaps && CachedMapStack.has(cacheKey)) {\n        map = CachedMapStack.pop(cacheKey) as google.maps.Map;\n        mapDiv = map.getDiv();\n\n        container.appendChild(mapDiv);\n        map.setOptions(mapOptions);\n\n        // detaching the element from the DOM lets the map fall back to its default\n        // size, setting the center will trigger reloading the map.\n        setTimeout(() => map.setCenter(map.getCenter()!), 0);\n      } else {\n        mapDiv = document.createElement('div');\n        mapDiv.style.height = '100%';\n        container.appendChild(mapDiv);\n\n        map = new google.maps.Map(mapDiv, {\n          ...mapOptions,\n          ...(renderingType\n            ? {renderingType: renderingType as google.maps.RenderingType}\n            : {}),\n          ...(colorScheme\n            ? {colorScheme: colorScheme as google.maps.ColorScheme}\n            : {})\n        });\n      }\n\n      setMap(map);\n      addMapInstance(map, id);\n\n      if (defaultBounds) {\n        const {padding, ...defBounds} = defaultBounds;\n        map.fitBounds(defBounds, padding);\n      }\n\n      // prevent map not rendering due to missing configuration\n      else if (!hasZoom || !hasCenter) {\n        map.fitBounds({east: 180, west: -180, south: -90, north: 90});\n      }\n\n      // the savedMapState is used to restore the camera parameters when the mapId is changed\n      if (savedMapStateRef.current) {\n        const {mapId: savedMapId, cameraState: savedCameraState} =\n          savedMapStateRef.current;\n        if (savedMapId !== mapId) {\n          map.setOptions(savedCameraState);\n        }\n      }\n\n      return () => {\n        savedMapStateRef.current = {\n          mapId,\n          // eslint-disable-next-line react-hooks/exhaustive-deps\n          cameraState: cameraStateRef.current\n        };\n\n        // detach the map-div from the dom\n        mapDiv.remove();\n\n        if (reuseMaps) {\n          // push back on the stack\n          CachedMapStack.push(cacheKey, map);\n        } else {\n          // remove all event-listeners to minimize the possibility of memory-leaks\n          google.maps.event.clearInstanceListeners(map);\n        }\n\n        setMap(null);\n        removeMapInstance(id);\n      };\n    },\n\n    // some dependencies are ignored in the list below:\n    //  - defaultBounds and the default* camera props will only be used once, and\n    //    changes should be ignored\n    //  - mapOptions has special hooks that take care of updating the options\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [\n      container,\n      apiIsLoaded,\n      id,\n\n      // these props can't be changed after initialization and require a new\n      // instance to be created\n      props.mapId,\n      props.renderingType,\n      props.colorScheme\n    ]\n  );\n\n  return [map, containerRef, cameraStateRef] as const;\n}\n","/* eslint-disable complexity */\nimport React, {\n  CSSProperties,\n  PropsWithChildren,\n  useContext,\n  useEffect,\n  useLayoutEffect,\n  useMemo\n} from 'react';\n\nimport {APIProviderContext} from '../api-provider';\n\nimport {MapEventProps, useMapEvents} from './use-map-events';\nimport {useMapOptions} from './use-map-options';\nimport {useApiLoadingStatus} from '../../hooks/use-api-loading-status';\nimport {APILoadingStatus} from '../../libraries/api-loading-status';\nimport {\n  DeckGlCompatProps,\n  useDeckGLCameraUpdate\n} from './use-deckgl-camera-update';\nimport {toLatLngLiteral} from '../../libraries/lat-lng-utils';\nimport {useMapCameraParams} from './use-map-camera-params';\nimport {AuthFailureMessage} from './auth-failure-message';\nimport {useMapInstance} from './use-map-instance';\n\nexport interface GoogleMapsContextValue {\n  map: google.maps.Map | null;\n}\nexport const GoogleMapsContext =\n  React.createContext<GoogleMapsContextValue | null>(null);\n\nexport type {\n  MapCameraChangedEvent,\n  MapEvent,\n  MapEventProps,\n  MapMouseEvent\n} from './use-map-events';\n\nexport type MapCameraProps = {\n  center: google.maps.LatLngLiteral;\n  zoom: number;\n  heading?: number;\n  tilt?: number;\n};\n\n// ColorScheme and RenderingType are redefined here to make them usable before the\n// maps API has been fully loaded.\n\nexport const ColorScheme = {\n  DARK: 'DARK',\n  LIGHT: 'LIGHT',\n  FOLLOW_SYSTEM: 'FOLLOW_SYSTEM'\n};\nexport type ColorScheme = (typeof ColorScheme)[keyof typeof ColorScheme];\n\nexport const RenderingType = {\n  VECTOR: 'VECTOR',\n  RASTER: 'RASTER',\n  UNINITIALIZED: 'UNINITIALIZED'\n};\nexport type RenderingType = (typeof RenderingType)[keyof typeof RenderingType];\n\n/**\n * Props for the Map Component\n */\nexport type MapProps = Omit<\n  google.maps.MapOptions,\n  'renderingType' | 'colorScheme'\n> &\n  MapEventProps &\n  DeckGlCompatProps & {\n    /**\n     * An id for the map, this is required when multiple maps are present\n     * in the same APIProvider context.\n     */\n    id?: string;\n\n    /**\n     * Additional style rules to apply to the map dom-element.\n     */\n    style?: CSSProperties;\n\n    /**\n     * Additional css class-name to apply to the element containing the map.\n     */\n    className?: string;\n\n    /**\n     * The color-scheme to use for the map.\n     */\n    colorScheme?: ColorScheme;\n\n    /**\n     * The rendering-type to be used.\n     */\n    renderingType?: RenderingType;\n\n    /**\n     * Indicates that the map will be controlled externally. Disables all controls provided by the map itself.\n     */\n    controlled?: boolean;\n\n    /**\n     * Enable caching of map-instances created by this component.\n     */\n    reuseMaps?: boolean;\n\n    defaultCenter?: google.maps.LatLngLiteral;\n    defaultZoom?: number;\n    defaultHeading?: number;\n    defaultTilt?: number;\n    /**\n     * Alternative way to specify the default camera props as a geographic region that should be fully visible\n     */\n    defaultBounds?: google.maps.LatLngBoundsLiteral & {\n      padding?: number | google.maps.Padding;\n    };\n  };\n\nexport const Map = (props: PropsWithChildren<MapProps>) => {\n  const {children, id, className, style} = props;\n  const context = useContext(APIProviderContext);\n  const loadingStatus = useApiLoadingStatus();\n\n  if (!context) {\n    throw new Error(\n      '<Map> can only be used inside an <ApiProvider> component.'\n    );\n  }\n\n  const [map, mapRef, cameraStateRef] = useMapInstance(props, context);\n\n  useMapCameraParams(map, cameraStateRef, props);\n  useMapEvents(map, props);\n  useMapOptions(map, props);\n\n  const isDeckGlControlled = useDeckGLCameraUpdate(map, props);\n  const isControlledExternally = !!props.controlled;\n\n  // disable interactions with the map for externally controlled maps\n  useEffect(() => {\n    if (!map) return;\n\n    // fixme: this doesn't seem to belong here (and it's mostly there for convenience anyway).\n    //   The reasoning is that a deck.gl canvas will be put on top of the map, rendering\n    //   any default map controls pretty much useless\n    if (isDeckGlControlled) {\n      map.setOptions({disableDefaultUI: true});\n    }\n\n    // disable all control-inputs when the map is controlled externally\n    if (isDeckGlControlled || isControlledExternally) {\n      map.setOptions({\n        gestureHandling: 'none',\n        keyboardShortcuts: false\n      });\n    }\n\n    return () => {\n      map.setOptions({\n        gestureHandling: props.gestureHandling,\n        keyboardShortcuts: props.keyboardShortcuts\n      });\n    };\n  }, [\n    map,\n    isDeckGlControlled,\n    isControlledExternally,\n    props.gestureHandling,\n    props.keyboardShortcuts\n  ]);\n\n  // setup a stable cameraOptions object that can be used as dependency\n  const center = props.center ? toLatLngLiteral(props.center) : null;\n  let lat: number | null = null;\n  let lng: number | null = null;\n  if (center && Number.isFinite(center.lat) && Number.isFinite(center.lng)) {\n    lat = center.lat as number;\n    lng = center.lng as number;\n  }\n\n  const cameraOptions: google.maps.CameraOptions = useMemo(() => {\n    return {\n      center: {lat: lat ?? 0, lng: lng ?? 0},\n      zoom: props.zoom ?? 0,\n      heading: props.heading ?? 0,\n      tilt: props.tilt ?? 0\n    };\n  }, [lat, lng, props.zoom, props.heading, props.tilt]);\n\n  // externally controlled mode: reject all camera changes that don't correspond to changes in props\n  useLayoutEffect(() => {\n    if (!map || !isControlledExternally) return;\n\n    map.moveCamera(cameraOptions);\n    const listener = map.addListener('bounds_changed', () => {\n      map.moveCamera(cameraOptions);\n    });\n\n    return () => listener.remove();\n  }, [map, isControlledExternally, cameraOptions]);\n\n  const combinedStyle: CSSProperties = useMemo(\n    () => ({\n      width: '100%',\n      height: '100%',\n      position: 'relative',\n      // when using deckgl, the map should be sent to the back\n      zIndex: isDeckGlControlled ? -1 : 0,\n\n      ...style\n    }),\n    [style, isDeckGlControlled]\n  );\n\n  const contextValue: GoogleMapsContextValue = useMemo(() => ({map}), [map]);\n\n  if (loadingStatus === APILoadingStatus.AUTH_FAILURE) {\n    return (\n      <div\n        style={{position: 'relative', ...(className ? {} : combinedStyle)}}\n        className={className}>\n        <AuthFailureMessage />\n      </div>\n    );\n  }\n\n  return (\n    <div\n      ref={mapRef}\n      data-testid={'map'}\n      style={className ? undefined : combinedStyle}\n      className={className}\n      {...(id ? {id} : {})}>\n      {map ? (\n        <GoogleMapsContext.Provider value={contextValue}>\n          {children}\n        </GoogleMapsContext.Provider>\n      ) : null}\n    </div>\n  );\n};\nMap.deckGLViewProps = true;\n","const shownMessages = new Set();\n\nexport function logErrorOnce(...args: Parameters<typeof console.error>) {\n  const key = JSON.stringify(args);\n\n  if (!shownMessages.has(key)) {\n    shownMessages.add(key);\n\n    console.error(...args);\n  }\n}\n","import {useContext} from 'react';\n\nimport {APIProviderContext} from '../components/api-provider';\nimport {GoogleMapsContext} from '../components/map';\nimport {logErrorOnce} from '../libraries/errors';\n\n/**\n * Retrieves a map-instance from the context. This is either an instance\n * identified by id or the parent map instance if no id is specified.\n * Returns null if neither can be found.\n */\nexport const useMap = (id: string | null = null): google.maps.Map | null => {\n  const ctx = useContext(APIProviderContext);\n  const {map} = useContext(GoogleMapsContext) || {};\n\n  if (ctx === null) {\n    logErrorOnce(\n      'useMap(): failed to retrieve APIProviderContext. ' +\n        'Make sure that the <APIProvider> component exists and that the ' +\n        'component you are calling `useMap()` from is a sibling of the ' +\n        '<APIProvider>.'\n    );\n\n    return null;\n  }\n\n  const {mapInstances} = ctx;\n\n  // if an id is specified, the corresponding map or null is returned\n  if (id !== null) return mapInstances[id] || null;\n\n  // otherwise, return the closest ancestor\n  if (map) return map;\n\n  // finally, return the default map instance\n  return mapInstances['default'] || null;\n};\n","import {useContext, useEffect} from 'react';\n\nimport {APIProviderContext} from '../components/api-provider';\nimport {useApiIsLoaded} from './use-api-is-loaded';\n\ninterface ApiLibraries {\n  core: google.maps.CoreLibrary;\n  maps: google.maps.MapsLibrary;\n  places: google.maps.PlacesLibrary;\n  geocoding: google.maps.GeocodingLibrary;\n  routes: google.maps.RoutesLibrary;\n  marker: google.maps.MarkerLibrary;\n  geometry: google.maps.GeometryLibrary;\n  elevation: google.maps.ElevationLibrary;\n  streetView: google.maps.StreetViewLibrary;\n  journeySharing: google.maps.JourneySharingLibrary;\n  drawing: google.maps.DrawingLibrary;\n  visualization: google.maps.VisualizationLibrary;\n}\n\nexport function useMapsLibrary<\n  K extends keyof ApiLibraries,\n  V extends ApiLibraries[K]\n>(name: K): V | null;\n\nexport function useMapsLibrary(name: string) {\n  const apiIsLoaded = useApiIsLoaded();\n  const ctx = useContext(APIProviderContext);\n\n  useEffect(() => {\n    if (!apiIsLoaded || !ctx) return;\n\n    // Trigger loading the libraries via our proxy-method.\n    // The returned promise is ignored, since importLibrary will update loadedLibraries\n    // list in the context, triggering a re-render.\n    void ctx.importLibrary(name);\n  }, [apiIsLoaded, ctx, name]);\n\n  return ctx?.loadedLibraries[name] || null;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {useEffect} from 'react';\n\n/**\n * Internally used to bind events to Maps JavaScript API objects.\n * @internal\n */\nexport function useMapsEventListener<T extends (...args: any[]) => void>(\n  target?: object | null,\n  name?: string,\n  callback?: T | null\n) {\n  useEffect(() => {\n    if (!target || !name || !callback) return;\n\n    const listener = google.maps.event.addListener(target, name, callback);\n\n    return () => listener.remove();\n  }, [target, name, callback]);\n}\n","import {useEffect} from 'react';\n\n/**\n * Internally used to copy values from props into API-Objects\n * whenever they change.\n *\n * @example\n *   usePropBinding(marker, 'position', position);\n *\n * @internal\n */\nexport function usePropBinding<T extends object, K extends keyof T>(\n  object: T | null,\n  prop: K,\n  value: T[K]\n) {\n  useEffect(() => {\n    if (!object) return;\n\n    object[prop] = value;\n  }, [object, prop, value]);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {useEffect} from 'react';\n\n/**\n * Internally used to bind events to DOM nodes.\n * @internal\n */\nexport function useDomEventListener<T extends (...args: any[]) => void>(\n  target?: Node | null,\n  name?: string,\n  callback?: T | null\n) {\n  useEffect(() => {\n    if (!target || !name || !callback) return;\n\n    target.addEventListener(name, callback);\n\n    return () => target.removeEventListener(name, callback);\n  }, [target, name, callback]);\n}\n","/* eslint-disable complexity */\nimport React, {\n  Children,\n  CSSProperties,\n  forwardRef,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useMemo,\n  useState\n} from 'react';\n\nimport {createPortal} from 'react-dom';\nimport {useMap} from '../hooks/use-map';\nimport {useMapsLibrary} from '../hooks/use-maps-library';\n\nimport type {Ref, PropsWithChildren} from 'react';\nimport {useMapsEventListener} from '../hooks/use-maps-event-listener';\nimport {usePropBinding} from '../hooks/use-prop-binding';\nimport {useDomEventListener} from '../hooks/use-dom-event-listener';\n\nexport interface AdvancedMarkerContextValue {\n  marker: google.maps.marker.AdvancedMarkerElement;\n}\n\nexport function isAdvancedMarker(\n  marker: google.maps.Marker | google.maps.marker.AdvancedMarkerElement\n): marker is google.maps.marker.AdvancedMarkerElement {\n  return (\n    (marker as google.maps.marker.AdvancedMarkerElement).content !== undefined\n  );\n}\n\n/**\n * Copy of the `google.maps.CollisionBehavior` constants.\n * They have to be duplicated here since we can't wait for the maps API to load to be able to use them.\n */\nexport const CollisionBehavior = {\n  REQUIRED: 'REQUIRED',\n  REQUIRED_AND_HIDES_OPTIONAL: 'REQUIRED_AND_HIDES_OPTIONAL',\n  OPTIONAL_AND_HIDES_LOWER_PRIORITY: 'OPTIONAL_AND_HIDES_LOWER_PRIORITY'\n} as const;\nexport type CollisionBehavior =\n  (typeof CollisionBehavior)[keyof typeof CollisionBehavior];\n\nexport const AdvancedMarkerContext =\n  React.createContext<AdvancedMarkerContextValue | null>(null);\n\n// [xPosition, yPosition] when the top left corner is [0, 0]\nexport const AdvancedMarkerAnchorPoint = {\n  TOP_LEFT: ['0', '0'],\n  TOP_CENTER: ['50%', '0'],\n  TOP: ['50%', '0'],\n  TOP_RIGHT: ['100%', '0'],\n  LEFT_CENTER: ['0', '50%'],\n  LEFT_TOP: ['0', '0'],\n  LEFT: ['0', '50%'],\n  LEFT_BOTTOM: ['0', '100%'],\n  RIGHT_TOP: ['100%', '0'],\n  RIGHT: ['100%', '50%'],\n  RIGHT_CENTER: ['100%', '50%'],\n  RIGHT_BOTTOM: ['100%', '100%'],\n  BOTTOM_LEFT: ['0', '100%'],\n  BOTTOM_CENTER: ['50%', '100%'],\n  BOTTOM: ['50%', '100%'],\n  BOTTOM_RIGHT: ['100%', '100%'],\n  CENTER: ['50%', '50%']\n} as const;\n\nexport type AdvancedMarkerAnchorPoint =\n  (typeof AdvancedMarkerAnchorPoint)[keyof typeof AdvancedMarkerAnchorPoint];\n\ntype AdvancedMarkerEventProps = {\n  onClick?: (e: google.maps.MapMouseEvent) => void;\n  onMouseEnter?: (e: google.maps.MapMouseEvent['domEvent']) => void;\n  onMouseLeave?: (e: google.maps.MapMouseEvent['domEvent']) => void;\n  onDrag?: (e: google.maps.MapMouseEvent) => void;\n  onDragStart?: (e: google.maps.MapMouseEvent) => void;\n  onDragEnd?: (e: google.maps.MapMouseEvent) => void;\n};\n\nexport type AdvancedMarkerProps = PropsWithChildren<\n  Omit<\n    google.maps.marker.AdvancedMarkerElementOptions,\n    'gmpDraggable' | 'gmpClickable' | 'content' | 'map' | 'collisionBehavior'\n  > &\n    AdvancedMarkerEventProps & {\n      draggable?: boolean;\n      clickable?: boolean;\n      collisionBehavior?: CollisionBehavior;\n      /**\n       * The anchor point for the Advanced Marker.\n       * Either use one of the predefined anchor point from the \"AdvancedMarkerAnchorPoint\" export\n       * or provide a string tuple in the form of [\"xPosition\", \"yPosition\"].\n       * The position is measured from the top-left corner and\n       * can be anything that can be consumed by a CSS translate() function.\n       * For example in percent (\"50%\") or in pixels (\"20px\").\n       */\n      anchorPoint?: AdvancedMarkerAnchorPoint | [string, string];\n      /**\n       * A className for the content element.\n       * (can only be used with HTML Marker content)\n       */\n      className?: string;\n      /**\n       * Additional styles to apply to the content element.\n       */\n      style?: CSSProperties;\n    }\n>;\n\ntype MarkerContentProps = PropsWithChildren & {\n  styles?: CSSProperties;\n  className?: string;\n  anchorPoint?: AdvancedMarkerAnchorPoint | [string, string];\n};\n\nconst MarkerContent = ({\n  children,\n  styles,\n  className,\n  anchorPoint\n}: MarkerContentProps) => {\n  const [xTranslation, yTranslation] =\n    anchorPoint ?? AdvancedMarkerAnchorPoint['BOTTOM'];\n\n  const {transform: userTransform, ...restStyles} = styles ?? {};\n\n  let transformStyle = `translate(-${xTranslation}, -${yTranslation})`;\n\n  // preserve extra transform styles that were set by the user\n  if (userTransform) {\n    transformStyle += ` ${userTransform}`;\n  }\n  return (\n    <div\n      className={className}\n      style={{\n        width: 'fit-content',\n        transformOrigin: `${xTranslation} ${yTranslation}`,\n        transform: transformStyle,\n        ...restStyles\n      }}>\n      {children}\n    </div>\n  );\n};\n\nexport type AdvancedMarkerRef = google.maps.marker.AdvancedMarkerElement | null;\nfunction useAdvancedMarker(props: AdvancedMarkerProps) {\n  const [marker, setMarker] =\n    useState<google.maps.marker.AdvancedMarkerElement | null>(null);\n  const [contentContainer, setContentContainer] =\n    useState<HTMLDivElement | null>(null);\n\n  const map = useMap();\n  const markerLibrary = useMapsLibrary('marker');\n\n  const {\n    children,\n    onClick,\n    className,\n    onMouseEnter,\n    onMouseLeave,\n    onDrag,\n    onDragStart,\n    onDragEnd,\n    collisionBehavior,\n    clickable,\n    draggable,\n    position,\n    title,\n    zIndex\n  } = props;\n\n  const numChildren = Children.count(children);\n\n  // create an AdvancedMarkerElement instance and add it to the map once available\n  useEffect(() => {\n    if (!map || !markerLibrary) return;\n\n    const newMarker = new markerLibrary.AdvancedMarkerElement();\n    newMarker.map = map;\n\n    setMarker(newMarker);\n\n    // create the container for marker content if there are children\n    let contentElement: HTMLDivElement | null = null;\n    if (numChildren > 0) {\n      contentElement = document.createElement('div');\n      contentElement.style.width = '0';\n      contentElement.style.height = '0';\n\n      newMarker.content = contentElement;\n      setContentContainer(contentElement);\n    }\n\n    return () => {\n      newMarker.map = null;\n      contentElement?.remove();\n      setMarker(null);\n      setContentContainer(null);\n    };\n  }, [map, markerLibrary, numChildren]);\n\n  // When no children are present we don't have our own wrapper div\n  // which usually gets the user provided className. In this case\n  // we set the className directly on the marker.content element that comes\n  // with the AdvancedMarker.\n  useEffect(() => {\n    if (!marker || !marker.content || numChildren > 0) return;\n\n    (marker.content as HTMLElement).className = className || '';\n  }, [marker, className, numChildren]);\n\n  // copy other props\n  usePropBinding(marker, 'position', position);\n  usePropBinding(marker, 'title', title ?? '');\n  usePropBinding(marker, 'zIndex', zIndex);\n  usePropBinding(\n    marker,\n    'collisionBehavior',\n    collisionBehavior as google.maps.CollisionBehavior\n  );\n\n  // set gmpDraggable from props (when unspecified, it's true if any drag-event\n  // callbacks are specified)\n  useEffect(() => {\n    if (!marker) return;\n\n    if (draggable !== undefined) marker.gmpDraggable = draggable;\n    else if (onDrag || onDragStart || onDragEnd) marker.gmpDraggable = true;\n    else marker.gmpDraggable = false;\n  }, [marker, draggable, onDrag, onDragEnd, onDragStart]);\n\n  // set gmpClickable from props (when unspecified, it's true if the onClick event\n  // callback is specified)\n  useEffect(() => {\n    if (!marker) return;\n\n    if (clickable !== undefined) marker.gmpClickable = clickable;\n    else if (onClick) marker.gmpClickable = true;\n    else marker.gmpClickable = false;\n  }, [marker, clickable, onClick]);\n\n  useMapsEventListener(marker, 'click', onClick);\n  useMapsEventListener(marker, 'drag', onDrag);\n  useMapsEventListener(marker, 'dragstart', onDragStart);\n  useMapsEventListener(marker, 'dragend', onDragEnd);\n\n  useDomEventListener(marker?.element, 'mouseenter', onMouseEnter);\n  useDomEventListener(marker?.element, 'mouseleave', onMouseLeave);\n\n  return [marker, contentContainer] as const;\n}\n\nexport const AdvancedMarker = forwardRef(\n  (props: AdvancedMarkerProps, ref: Ref<AdvancedMarkerRef>) => {\n    const {children, style, className, anchorPoint} = props;\n    const [marker, contentContainer] = useAdvancedMarker(props);\n\n    const advancedMarkerContextValue: AdvancedMarkerContextValue | null =\n      useMemo(() => (marker ? {marker} : null), [marker]);\n\n    useImperativeHandle(ref, () => marker, [marker]);\n\n    if (!contentContainer) return null;\n\n    return (\n      <AdvancedMarkerContext.Provider value={advancedMarkerContextValue}>\n        {createPortal(\n          <MarkerContent\n            anchorPoint={anchorPoint}\n            styles={style}\n            className={className}>\n            {children}\n          </MarkerContent>,\n          contentContainer\n        )}\n      </AdvancedMarkerContext.Provider>\n    );\n  }\n);\n\nexport function useAdvancedMarkerRef() {\n  const [marker, setMarker] =\n    useState<google.maps.marker.AdvancedMarkerElement | null>(null);\n\n  const refCallback = useCallback((m: AdvancedMarkerRef | null) => {\n    setMarker(m);\n  }, []);\n\n  return [refCallback, marker] as const;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/*\n * The code in this file was adapted from the internal react-dom-bindings package.\n * https://github.com/facebook/react/tree/4508873393058e86bed308b56e49ec883ece59d1/packages/react-dom-bindings\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport {CSSProperties} from 'react';\n\nexport function setValueForStyles(\n  element: HTMLElement,\n  styles: CSSProperties | null,\n  prevStyles: CSSProperties | null\n) {\n  if (styles != null && typeof styles !== 'object') {\n    throw new Error(\n      'The `style` prop expects a mapping from style properties to values, ' +\n        \"not a string. For example, style={{marginRight: spacing + 'em'}} when \" +\n        'using JSX.'\n    );\n  }\n\n  const elementStyle = element.style;\n\n  // without `prevStyles`, just set all values\n  if (prevStyles == null) {\n    if (styles == null) return;\n\n    for (const styleName in styles) {\n      if (!styles.hasOwnProperty(styleName)) continue;\n\n      setValueForStyle(\n        elementStyle,\n        styleName,\n        styles[styleName as keyof CSSProperties]\n      );\n    }\n\n    return;\n  }\n\n  // unset all styles in `prevStyles` that aren't in `styles`\n  for (const styleName in prevStyles) {\n    if (\n      prevStyles.hasOwnProperty(styleName) &&\n      (styles == null || !styles.hasOwnProperty(styleName))\n    ) {\n      // Clear style\n      const isCustomProperty = styleName.indexOf('--') === 0;\n      if (isCustomProperty) {\n        elementStyle.setProperty(styleName, '');\n      } else if (styleName === 'float') {\n        elementStyle.cssFloat = '';\n      } else {\n        elementStyle[styleName as any] = '';\n      }\n    }\n  }\n\n  // only assign values from `styles` that are different from `prevStyles`\n  if (styles == null) return;\n\n  for (const styleName in styles) {\n    const value = styles[styleName as keyof CSSProperties];\n    if (\n      styles.hasOwnProperty(styleName) &&\n      prevStyles[styleName as keyof CSSProperties] !== value\n    ) {\n      setValueForStyle(elementStyle, styleName, value);\n    }\n  }\n}\n\nfunction setValueForStyle(\n  elementStyle: CSSStyleDeclaration,\n  styleName: string,\n  value: unknown\n) {\n  const isCustomProperty = styleName.indexOf('--') === 0;\n\n  // falsy values will unset the style property\n  if (value == null || typeof value === 'boolean' || value === '') {\n    if (isCustomProperty) {\n      elementStyle.setProperty(styleName, '');\n    } else if (styleName === 'float') {\n      elementStyle.cssFloat = '';\n    } else {\n      elementStyle[styleName as any] = '';\n    }\n  }\n\n  // custom properties can't be directly assigned\n  else if (isCustomProperty) {\n    elementStyle.setProperty(styleName, value as string);\n  }\n\n  // numeric values are treated as 'px' unless the style property expects unitless numbers\n  else if (\n    typeof value === 'number' &&\n    value !== 0 &&\n    !isUnitlessNumber(styleName)\n  ) {\n    elementStyle[styleName as any] = value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n  }\n\n  // everything else can just be assigned\n  else {\n    if (styleName === 'float') {\n      elementStyle.cssFloat = value as string;\n    } else {\n      elementStyle[styleName as any] = ('' + value).trim();\n    }\n  }\n}\n\n// CSS properties which accept numbers but are not in units of \"px\".\nconst unitlessNumbers = new Set([\n  'animationIterationCount',\n  'aspectRatio',\n  'borderImageOutset',\n  'borderImageSlice',\n  'borderImageWidth',\n  'boxFlex',\n  'boxFlexGroup',\n  'boxOrdinalGroup',\n  'columnCount',\n  'columns',\n  'flex',\n  'flexGrow',\n  'flexPositive',\n  'flexShrink',\n  'flexNegative',\n  'flexOrder',\n  'gridArea',\n  'gridRow',\n  'gridRowEnd',\n  'gridRowSpan',\n  'gridRowStart',\n  'gridColumn',\n  'gridColumnEnd',\n  'gridColumnSpan',\n  'gridColumnStart',\n  'fontWeight',\n  'lineClamp',\n  'lineHeight',\n  'opacity',\n  'order',\n  'orphans',\n  'scale',\n  'tabSize',\n  'widows',\n  'zIndex',\n  'zoom',\n  'fillOpacity', // SVG-related properties\n  'floodOpacity',\n  'stopOpacity',\n  'strokeDasharray',\n  'strokeDashoffset',\n  'strokeMiterlimit',\n  'strokeOpacity',\n  'strokeWidth'\n]);\nfunction isUnitlessNumber(name: string): boolean {\n  return unitlessNumbers.has(name);\n}\n","/* eslint-disable complexity */\nimport React, {\n  CSSProperties,\n  PropsWithChildren,\n  ReactNode,\n  useEffect,\n  useRef,\n  useState\n} from 'react';\nimport {createPortal} from 'react-dom';\n\nimport {useMap} from '../hooks/use-map';\nimport {useMapsEventListener} from '../hooks/use-maps-event-listener';\nimport {setValueForStyles} from '../libraries/set-value-for-styles';\nimport {useMapsLibrary} from '../hooks/use-maps-library';\nimport {useDeepCompareEffect} from '../libraries/use-deep-compare-effect';\nimport {isAdvancedMarker} from './advanced-marker';\n\nexport type InfoWindowProps = Omit<\n  google.maps.InfoWindowOptions,\n  'headerContent' | 'content' | 'pixelOffset'\n> & {\n  style?: CSSProperties;\n  className?: string;\n  anchor?: google.maps.Marker | google.maps.marker.AdvancedMarkerElement | null;\n  pixelOffset?: [number, number];\n  shouldFocus?: boolean;\n  onClose?: () => void;\n  onCloseClick?: () => void;\n\n  headerContent?: ReactNode;\n};\n\n/**\n * Component to render an Info Window with the Maps JavaScript API\n */\nexport const InfoWindow = (props: PropsWithChildren<InfoWindowProps>) => {\n  const {\n    // content options\n    children,\n    headerContent,\n\n    style,\n    className,\n    pixelOffset,\n\n    // open options\n    anchor,\n    shouldFocus,\n\n    // events\n    onClose,\n    onCloseClick,\n\n    // other options\n    ...infoWindowOptions\n  } = props;\n\n  // ## create infowindow instance once the mapsLibrary is available.\n  const mapsLibrary = useMapsLibrary('maps');\n  const [infoWindow, setInfoWindow] = useState<google.maps.InfoWindow | null>(\n    null\n  );\n\n  const contentContainerRef = useRef<HTMLElement | null>(null);\n  const headerContainerRef = useRef<HTMLElement | null>(null);\n\n  useEffect(\n    () => {\n      if (!mapsLibrary) return;\n\n      contentContainerRef.current = document.createElement('div');\n      headerContainerRef.current = document.createElement('div');\n\n      const opts: google.maps.InfoWindowOptions = infoWindowOptions;\n      if (pixelOffset) {\n        opts.pixelOffset = new google.maps.Size(pixelOffset[0], pixelOffset[1]);\n      }\n\n      if (headerContent) {\n        // if headerContent is specified as string we can directly forward it,\n        // otherwise we'll pass the element the portal will render into\n        opts.headerContent =\n          typeof headerContent === 'string'\n            ? headerContent\n            : headerContainerRef.current;\n      }\n\n      // intentionally shadowing the state variables here\n      const infoWindow = new google.maps.InfoWindow(infoWindowOptions);\n      infoWindow.setContent(contentContainerRef.current);\n\n      setInfoWindow(infoWindow);\n\n      // unmount: remove infoWindow and content elements (note: close is called in a different effect-cleanup)\n      return () => {\n        infoWindow.setContent(null);\n\n        contentContainerRef.current?.remove();\n        headerContainerRef.current?.remove();\n\n        contentContainerRef.current = null;\n        headerContainerRef.current = null;\n\n        setInfoWindow(null);\n      };\n    },\n    // `infoWindowOptions` and other props are missing from dependencies:\n    //\n    // We don't want to re-create the infowindow instance\n    // when the options change.\n    // Updating the options is handled in the useEffect below.\n    //\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [mapsLibrary]\n  );\n\n  // ## update className and styles for `contentContainer`\n  // stores previously applied style properties, so they can be removed when unset\n  const prevStyleRef = useRef<CSSProperties | null>(null);\n  useEffect(() => {\n    if (!infoWindow || !contentContainerRef.current) return;\n\n    setValueForStyles(\n      contentContainerRef.current,\n      style || null,\n      prevStyleRef.current\n    );\n\n    prevStyleRef.current = style || null;\n\n    if (className !== contentContainerRef.current.className)\n      contentContainerRef.current.className = className || '';\n  }, [infoWindow, className, style]);\n\n  // ## update options\n  useDeepCompareEffect(\n    () => {\n      if (!infoWindow) return;\n\n      const opts: google.maps.InfoWindowOptions = infoWindowOptions;\n      if (!pixelOffset) {\n        opts.pixelOffset = null;\n      } else {\n        opts.pixelOffset = new google.maps.Size(pixelOffset[0], pixelOffset[1]);\n      }\n\n      if (!headerContent) {\n        opts.headerContent = null;\n      } else {\n        opts.headerContent =\n          typeof headerContent === 'string'\n            ? headerContent\n            : headerContainerRef.current;\n      }\n\n      infoWindow.setOptions(infoWindowOptions);\n    },\n\n    // dependency `infoWindow` isn't needed since options are also passed\n    // to the constructor when a new infoWindow is created.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [infoWindowOptions, pixelOffset, headerContent]\n  );\n\n  // ## bind event handlers\n  useMapsEventListener(infoWindow, 'close', onClose);\n  useMapsEventListener(infoWindow, 'closeclick', onCloseClick);\n\n  // ## open info window when content and map are available\n  const map = useMap();\n  useEffect(() => {\n    // `anchor === null` means an anchor is defined but not ready yet.\n    if (!map || !infoWindow || anchor === null) return;\n\n    const isOpenedWithAnchor = !!anchor;\n    const openOptions: google.maps.InfoWindowOpenOptions = {map};\n    if (anchor) {\n      openOptions.anchor = anchor;\n\n      // Only do the infowindow adjusting when dealing with an AdvancedMarker\n      if (isAdvancedMarker(anchor) && anchor.content instanceof Element) {\n        const wrapperBcr = anchor.content.getBoundingClientRect() ?? {};\n        const {width: anchorWidth, height: anchorHeight} = wrapperBcr;\n\n        // This checks whether or not the anchor has custom content with our own\n        // div wrapper. If not, that means we have a regular AdvancedMarker without any children.\n        // In that case we do not want to adjust the infowindow since it is all handled correctly\n        // by the Google Maps API.\n        if (anchorWidth === 0 && anchorHeight === 0) {\n          // We can safely typecast here since we control that element and we know that\n          // it is a div\n          const anchorDomContent = anchor.content.firstElementChild as Element;\n\n          const contentBcr = anchorDomContent?.getBoundingClientRect();\n\n          // center infowindow above marker\n          const anchorOffsetX =\n            contentBcr.x - wrapperBcr.x + contentBcr.width / 2;\n          const anchorOffsetY = contentBcr.y - wrapperBcr.y;\n\n          const opts: google.maps.InfoWindowOptions = infoWindowOptions;\n\n          opts.pixelOffset = new google.maps.Size(\n            pixelOffset ? pixelOffset[0] + anchorOffsetX : anchorOffsetX,\n            pixelOffset ? pixelOffset[1] + anchorOffsetY : anchorOffsetY\n          );\n\n          infoWindow.setOptions(opts);\n        }\n      }\n    }\n\n    if (shouldFocus !== undefined) {\n      openOptions.shouldFocus = shouldFocus;\n    }\n\n    infoWindow.open(openOptions);\n\n    return () => {\n      // Note: when the infowindow has an anchor, it will automatically show up again when the\n      // anchor was removed from the map before infoWindow.close() is called but the it gets\n      // added back to the map after that.\n      // More information here: https://issuetracker.google.com/issues/343750849\n      if (isOpenedWithAnchor) infoWindow.set('anchor', null);\n\n      infoWindow.close();\n    };\n  }, [infoWindow, anchor, map, shouldFocus, infoWindowOptions, pixelOffset]);\n\n  return (\n    <>\n      {contentContainerRef.current &&\n        createPortal(children, contentContainerRef.current)}\n\n      {headerContainerRef.current !== null &&\n        createPortal(headerContent, headerContainerRef.current)}\n    </>\n  );\n};\n","import {useEffect, useMemo} from 'react';\nimport {createPortal} from 'react-dom';\nimport {useMap} from '../hooks/use-map';\n\nimport type {PropsWithChildren} from 'react';\n\ntype MapControlProps = PropsWithChildren<{\n  position: ControlPosition;\n}>;\n\n/**\n * Copy of the `google.maps.ControlPosition` constants.\n * They have to be duplicated here since we can't wait for the maps API to load to be able to use them.\n */\nexport const ControlPosition = {\n  TOP_LEFT: 1,\n  TOP_CENTER: 2,\n  TOP: 2,\n  TOP_RIGHT: 3,\n  LEFT_CENTER: 4,\n  LEFT_TOP: 5,\n  LEFT: 5,\n  LEFT_BOTTOM: 6,\n  RIGHT_TOP: 7,\n  RIGHT: 7,\n  RIGHT_CENTER: 8,\n  RIGHT_BOTTOM: 9,\n  BOTTOM_LEFT: 10,\n  BOTTOM_CENTER: 11,\n  BOTTOM: 11,\n  BOTTOM_RIGHT: 12,\n  CENTER: 13,\n  BLOCK_START_INLINE_START: 14,\n  BLOCK_START_INLINE_CENTER: 15,\n  BLOCK_START_INLINE_END: 16,\n  INLINE_START_BLOCK_CENTER: 17,\n  INLINE_START_BLOCK_START: 18,\n  INLINE_START_BLOCK_END: 19,\n  INLINE_END_BLOCK_START: 20,\n  INLINE_END_BLOCK_CENTER: 21,\n  INLINE_END_BLOCK_END: 22,\n  BLOCK_END_INLINE_START: 23,\n  BLOCK_END_INLINE_CENTER: 24,\n  BLOCK_END_INLINE_END: 25\n} as const;\nexport type ControlPosition =\n  (typeof ControlPosition)[keyof typeof ControlPosition];\n\nexport const MapControl = ({children, position}: MapControlProps) => {\n  const controlContainer = useMemo(() => document.createElement('div'), []);\n  const map = useMap();\n\n  useEffect(() => {\n    if (!map) return;\n\n    const controls = map.controls[position];\n\n    controls.push(controlContainer);\n\n    return () => {\n      const controlsArray = controls.getArray();\n      // controlsArray could be undefined if the map is in an undefined state (e.g. invalid API-key, see #276\n      if (!controlsArray) return;\n\n      const index = controlsArray.indexOf(controlContainer);\n      controls.removeAt(index);\n    };\n  }, [controlContainer, map, position]);\n\n  return createPortal(children, controlContainer);\n};\n","/* eslint-disable complexity */\nimport React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useImperativeHandle,\n  useState\n} from 'react';\n\nimport {useMap} from '../hooks/use-map';\n\nimport type {Ref} from 'react';\n\ntype MarkerEventProps = {\n  onClick?: (e: google.maps.MapMouseEvent) => void;\n  onDrag?: (e: google.maps.MapMouseEvent) => void;\n  onDragStart?: (e: google.maps.MapMouseEvent) => void;\n  onDragEnd?: (e: google.maps.MapMouseEvent) => void;\n  onMouseOver?: (e: google.maps.MapMouseEvent) => void;\n  onMouseOut?: (e: google.maps.MapMouseEvent) => void;\n};\n\nexport type MarkerProps = Omit<google.maps.MarkerOptions, 'map'> &\n  MarkerEventProps;\n\nexport type MarkerRef = Ref<google.maps.Marker | null>;\n\nfunction useMarker(props: MarkerProps) {\n  const [marker, setMarker] = useState<google.maps.Marker | null>(null);\n  const map = useMap();\n\n  const {\n    onClick,\n    onDrag,\n    onDragStart,\n    onDragEnd,\n    onMouseOver,\n    onMouseOut,\n    ...markerOptions\n  } = props;\n\n  const {position, draggable} = markerOptions;\n\n  // create marker instance and add to the map once the map is available\n  useEffect(() => {\n    if (!map) {\n      if (map === undefined)\n        console.error('<Marker> has to be inside a Map component.');\n\n      return;\n    }\n\n    const newMarker = new google.maps.Marker(markerOptions);\n    newMarker.setMap(map);\n    setMarker(newMarker);\n\n    return () => {\n      newMarker.setMap(null);\n      setMarker(null);\n    };\n    // We do not want to re-render the whole marker when the options change.\n    // Marker options update is handled in a useEffect below.\n    // Excluding markerOptions from dependency array on purpose here.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map]);\n\n  // attach and re-attach event-handlers when any of the properties change\n  useEffect(() => {\n    if (!marker) return;\n\n    const m = marker;\n\n    // Add event listeners\n    const gme = google.maps.event;\n\n    if (onClick) gme.addListener(m, 'click', onClick);\n    if (onDrag) gme.addListener(m, 'drag', onDrag);\n    if (onDragStart) gme.addListener(m, 'dragstart', onDragStart);\n    if (onDragEnd) gme.addListener(m, 'dragend', onDragEnd);\n    if (onMouseOver) gme.addListener(m, 'mouseover', onMouseOver);\n    if (onMouseOut) gme.addListener(m, 'mouseout', onMouseOut);\n\n    marker.setDraggable(Boolean(draggable));\n\n    return () => {\n      gme.clearInstanceListeners(m);\n    };\n  }, [\n    marker,\n    draggable,\n    onClick,\n    onDrag,\n    onDragStart,\n    onDragEnd,\n    onMouseOver,\n    onMouseOut\n  ]);\n\n  // update markerOptions (note the dependencies aren't properly checked\n  // here, we just assume that setOptions is smart enough to not waste a\n  // lot of time updating values that didn't change)\n  useEffect(() => {\n    if (!marker) return;\n    if (markerOptions) marker.setOptions(markerOptions);\n  }, [marker, markerOptions]);\n\n  // update position when changed\n  useEffect(() => {\n    // Should not update position when draggable\n    if (draggable || !position || !marker) return;\n\n    marker.setPosition(position);\n  }, [draggable, position, marker]);\n\n  return marker;\n}\n\n/**\n * Component to render a marker on a map\n */\nexport const Marker = forwardRef((props: MarkerProps, ref: MarkerRef) => {\n  const marker = useMarker(props);\n\n  useImperativeHandle(ref, () => marker, [marker]);\n\n  return <></>;\n});\n\nexport function useMarkerRef() {\n  const [marker, setMarker] = useState<google.maps.Marker | null>(null);\n\n  const refCallback = useCallback((m: google.maps.Marker | null) => {\n    setMarker(m);\n  }, []);\n\n  return [refCallback, marker] as const;\n}\n","import {\n  Children,\n  PropsWithChildren,\n  useContext,\n  useEffect,\n  useMemo\n} from 'react';\nimport {AdvancedMarkerContext} from './advanced-marker';\nimport {createPortal} from 'react-dom';\nimport {logErrorOnce} from '../libraries/errors';\n\n/**\n * Props for the Pin component\n */\nexport type PinProps = google.maps.marker.PinElementOptions;\n\n/**\n * Component to configure the appearance of an AdvancedMarker\n */\nexport const Pin = (props: PropsWithChildren<PinProps>) => {\n  const advancedMarker = useContext(AdvancedMarkerContext)?.marker;\n  const glyphContainer = useMemo(() => document.createElement('div'), []);\n\n  // Create Pin View instance\n  useEffect(() => {\n    if (!advancedMarker) {\n      if (advancedMarker === undefined) {\n        console.error(\n          'The <Pin> component can only be used inside <AdvancedMarker>.'\n        );\n      }\n\n      return;\n    }\n\n    if (props.glyph && props.children) {\n      logErrorOnce(\n        'The <Pin> component only uses children to render the glyph if both the glyph property and children are present.'\n      );\n    }\n\n    if (Children.count(props.children) > 1) {\n      logErrorOnce(\n        'Passing multiple children to the <Pin> component might lead to unexpected results.'\n      );\n    }\n\n    const pinViewOptions: google.maps.marker.PinElementOptions = {\n      ...props\n    };\n\n    const pinElement = new google.maps.marker.PinElement(pinViewOptions);\n\n    // Set glyph to glyph container if children are present (rendered via portal).\n    // If both props.glyph and props.children are present, props.children takes priority.\n    if (props.children) {\n      pinElement.glyph = glyphContainer;\n    }\n\n    // Set content of Advanced Marker View to the Pin View element\n    const markerContent = advancedMarker.content?.firstChild;\n\n    while (markerContent?.firstChild) {\n      markerContent.removeChild(markerContent.firstChild);\n    }\n\n    if (markerContent) {\n      markerContent.appendChild(pinElement.element);\n    }\n  }, [advancedMarker, glyphContainer, props]);\n\n  return createPortal(props.children, glyphContainer);\n};\n","const mapLinear = (x: number, a1: number, a2: number, b1: number, b2: number) =>\n  b1 + ((x - a1) * (b2 - b1)) / (a2 - a1);\n\nconst getMapMaxTilt = (zoom: number) => {\n  if (zoom <= 10) {\n    return 30;\n  }\n  if (zoom >= 15.5) {\n    return 67.5;\n  }\n\n  // range [10...14]\n  if (zoom <= 14) {\n    return mapLinear(zoom, 10, 14, 30, 45);\n  }\n\n  // range [14...15.5]\n  return mapLinear(zoom, 14, 15.5, 45, 67.5);\n};\n\n/**\n * Function to limit the tilt range of the Google map when updating the view state\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const limitTiltRange = ({viewState}: any) => {\n  const pitch = viewState.pitch;\n  const gmZoom = viewState.zoom + 1;\n  const maxTilt = getMapMaxTilt(gmZoom);\n\n  return {...viewState, fovy: 25, pitch: Math.min(maxTilt, pitch)};\n};\n"],"names":["APILoadingStatus","NOT_LOADED","LOADING","LOADED","FAILED","AUTH_FAILURE","MAPS_API_BASE_URL","GoogleMapsApiLoader","load","params","onLoadingStatusChange","_window$google","libraries","split","serializedParams","serializeParams","listeners","push","window","google","maps","importLibrary","serializedApiParams","loadingStatus","notifyLoadingStatusListeners","initImportLibrary","console","warn","librariesToLoad","Promise","all","map","name","v","key","language","region","authReferrerPolicy","solutionChannel","join","error","apiPromise","loadApi","resolve","reject","_document$querySelect","scriptElement","document","createElement","urlParams","URLSearchParams","value","Object","entries","urlParamName","replace","t","toLowerCase","set","async","src","toString","nonce","querySelector","onerror","Error","__googleMapsCallback__","gm_authFailure","head","append","libraryName","then","fn","DEFAULT_SOLUTION_CHANNEL","APIProviderContext","React","createContext","useMapInstances","mapInstances","setMapInstances","useState","addMapInstance","mapInstance","id","instances","_extends","removeMapInstance","_ref","remaining","_objectWithoutPropertiesLoose","_toPropertyKey","clearMapInstances","useGoogleMapsApiLoader","props","onLoad","onError","apiKey","version","otherApiParams","_excluded","status","setStatus","loadedLibraries","addLoadedLibrary","useReducer","action","librariesString","useMemo","JSON","stringify","useCallback","_google","res","useEffect","length","undefined","APIProvider","children","loaderProps","_excluded2","contextValue","Provider","useMapEvents","propName","eventPropNames","handler","eventType","propNameToEventType","listener","event","addListener","ev","createMapEvent","remove","type","srcEvent","detail","stoppable","stop","cameraEventTypes","includes","camEvent","center","getCenter","zoom","getZoom","heading","getHeading","tilt","getTilt","bounds","getBounds","Number","isFinite","toJSON","lat","lng","north","east","south","west","mouseEventTypes","_srcEvent$latLng","mouseEvent","domEvent","latLng","placeId","onBoundsChanged","onCenterChanged","onClick","onContextmenu","onDblclick","onDrag","onDragend","onDragstart","onHeadingChanged","onIdle","onIsFractionalZoomEnabledChanged","onMapCapabilitiesChanged","onMapTypeIdChanged","onMousemove","onMouseout","onMouseover","onProjectionChanged","onRenderingTypeChanged","onTilesLoaded","onTiltChanged","onZoomChanged","onCameraChanged","keys","useDeepCompareEffect","effect","deps","ref","useRef","current","isDeepEqual","mapOptionKeys","Set","useMapOptions","mapProps","mapOptions","has","setOptions","useApiLoadingStatus","_useContext","useContext","useDeckGLCameraUpdate","viewport","viewState","isDeckGlControlled","useLayoutEffect","latitude","longitude","bearing","pitch","moveCamera","isLatLngLiteral","obj","latLngEquals","a","b","A","toLatLngLiteral","B","useMapCameraParams","cameraStateRef","nextCamera","needsUpdate","AuthFailureMessage","style","position","top","left","bottom","right","zIndex","display","flexFlow","textAlign","justifyContent","fontSize","color","background","padding","useCallbackRef","el","setEl","useApiIsLoaded","useForceUpdate","forceUpdate","x","handleBoundsChange","assign","useTrackedCameraStateRef","CachedMapStack","pop","useMapInstance","context","apiIsLoaded","setMap","container","containerRef","defaultBounds","defaultCenter","defaultZoom","defaultHeading","defaultTilt","reuseMaps","renderingType","colorScheme","hasZoom","hasCenter","savedMapStateRef","mapId","cacheKey","mapDiv","getDiv","appendChild","setTimeout","setCenter","height","Map","defBounds","fitBounds","savedMapId","cameraState","savedCameraState","clearInstanceListeners","GoogleMapsContext","ColorScheme","DARK","LIGHT","FOLLOW_SYSTEM","RenderingType","VECTOR","RASTER","UNINITIALIZED","className","mapRef","isControlledExternally","controlled","disableDefaultUI","gestureHandling","keyboardShortcuts","cameraOptions","_lat","_lng","_props$zoom","_props$heading","_props$tilt","combinedStyle","width","deckGLViewProps","shownMessages","logErrorOnce","args","add","useMap","ctx","useMapsLibrary","useMapsEventListener","target","callback","usePropBinding","object","prop","useDomEventListener","addEventListener","removeEventListener","isAdvancedMarker","marker","content","CollisionBehavior","REQUIRED","REQUIRED_AND_HIDES_OPTIONAL","OPTIONAL_AND_HIDES_LOWER_PRIORITY","AdvancedMarkerContext","AdvancedMarkerAnchorPoint","TOP_LEFT","TOP_CENTER","TOP","TOP_RIGHT","LEFT_CENTER","LEFT_TOP","LEFT","LEFT_BOTTOM","RIGHT_TOP","RIGHT","RIGHT_CENTER","RIGHT_BOTTOM","BOTTOM_LEFT","BOTTOM_CENTER","BOTTOM","BOTTOM_RIGHT","CENTER","MarkerContent","styles","anchorPoint","xTranslation","yTranslation","transform","userTransform","restStyles","transformStyle","transformOrigin","useAdvancedMarker","setMarker","contentContainer","setContentContainer","markerLibrary","onMouseEnter","onMouseLeave","onDragStart","onDragEnd","collisionBehavior","clickable","draggable","title","numChildren","Children","count","newMarker","AdvancedMarkerElement","contentElement","_contentElement","gmpDraggable","gmpClickable","element","AdvancedMarker","forwardRef","advancedMarkerContextValue","useImperativeHandle","createPortal","useAdvancedMarkerRef","refCallback","m","setValueForStyles","prevStyles","elementStyle","styleName","hasOwnProperty","setValueForStyle","isCustomProperty","indexOf","setProperty","cssFloat","isUnitlessNumber","trim","unitlessNumbers","InfoWindow","headerContent","pixelOffset","anchor","shouldFocus","onClose","onCloseClick","infoWindowOptions","mapsLibrary","infoWindow","setInfoWindow","contentContainerRef","headerContainerRef","opts","Size","setContent","_contentContainerRef$","_headerContainerRef$c","prevStyleRef","isOpenedWithAnchor","openOptions","Element","_anchor$content$getBo","wrapperBcr","getBoundingClientRect","anchorWidth","anchorHeight","anchorDomContent","firstElementChild","contentBcr","anchorOffsetX","anchorOffsetY","y","open","close","Fragment","ControlPosition","BLOCK_START_INLINE_START","BLOCK_START_INLINE_CENTER","BLOCK_START_INLINE_END","INLINE_START_BLOCK_CENTER","INLINE_START_BLOCK_START","INLINE_START_BLOCK_END","INLINE_END_BLOCK_START","INLINE_END_BLOCK_CENTER","INLINE_END_BLOCK_END","BLOCK_END_INLINE_START","BLOCK_END_INLINE_CENTER","BLOCK_END_INLINE_END","MapControl","controlContainer","controls","controlsArray","getArray","index","removeAt","useMarker","onMouseOver","onMouseOut","markerOptions","Marker","gme","setDraggable","Boolean","setPosition","useMarkerRef","Pin","advancedMarker","glyphContainer","_advancedMarker$conte","glyph","pinViewOptions","pinElement","PinElement","markerContent","firstChild","removeChild","mapLinear","a1","a2","b1","b2","getMapMaxTilt","limitTiltRange","gmZoom","maxTilt","fovy","Math","min"],"mappings":"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"}