{"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/components/advanced-marker.tsx","../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 Google Maps 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\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   * A function that can be used to execute code after the Google Maps JavaScript API has been loaded.\n   */\n  onLoad?: () => 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 {onLoad, apiKey, version, libraries = [], ...otherApiParams} = 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]: 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          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          console.error('<ApiProvider> failed to load Google Maps API', error);\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 Google Maps React components 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  onProjectionChanged: (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  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  'projection_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 = 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  '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  '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 Google Maps 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 * 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\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      const mapId = props.mapId;\n      const newMap = new google.maps.Map(container, mapOptions);\n\n      setMap(newMap);\n      addMapInstance(newMap, id);\n\n      if (defaultBounds) {\n        newMap.fitBounds(defaultBounds);\n      }\n\n      // prevent map not rendering due to missing configuration\n      else if (!hasZoom || !hasCenter) {\n        newMap.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          newMap.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        // remove all event-listeners to minimize memory-leaks\n        google.maps.event.clearInstanceListeners(newMap);\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    [container, apiIsLoaded, id, props.mapId]\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/**\n * Props for the Google Maps Map Component\n */\nexport type MapProps = google.maps.MapOptions &\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     * Additional style rules to apply to the map dom-element.\n     */\n    style?: CSSProperties;\n    /**\n     * Additional css class-name to apply to the element containing the map.\n     */\n    className?: string;\n    /**\n     * Indicates that the map will be controlled externally. Disables all controls provided by the map itself.\n     */\n    controlled?: 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  };\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      // 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 complexity */\nimport React, {\n  Children,\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';\n\nexport interface AdvancedMarkerContextValue {\n  marker: google.maps.marker.AdvancedMarkerElement;\n}\n\nexport const AdvancedMarkerContext =\n  React.createContext<AdvancedMarkerContextValue | null>(null);\n\ntype AdvancedMarkerEventProps = {\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};\n\nexport type AdvancedMarkerProps = PropsWithChildren<\n  Omit<\n    google.maps.marker.AdvancedMarkerElementOptions,\n    'gmpDraggable' | 'map'\n  > &\n    AdvancedMarkerEventProps & {\n      /**\n       * className to add a class to the advanced marker element\n       * Can only be used with HTML Marker content\n       */\n      className?: string;\n      draggable?: boolean;\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    className,\n    onClick,\n    onDrag,\n    onDragStart,\n    onDragEnd,\n    collisionBehavior,\n    draggable,\n    position,\n    title,\n    zIndex\n  } = props;\n\n  const numChilds = Children.count(children);\n\n  // create marker instance and add it to the map when map becomes 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 container for marker content if there are children\n    if (numChilds > 0) {\n      const el = document.createElement('div');\n      if (className) el.className = className;\n\n      newMarker.content = el;\n\n      setContentContainer(el);\n    }\n\n    return () => {\n      newMarker.map = null;\n      setMarker(null);\n      setContentContainer(null);\n    };\n    // We do not want to re-render the whole marker when the className changes\n    // because that causes a short flickering of the marker.\n    // The className update is handled in the useEffect below.\n    // Excluding the className from the dependency array onm purpose here\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, markerLibrary, numChilds]);\n\n  // update className of advanced marker element\n  useEffect(() => {\n    if (!contentContainer) return;\n    contentContainer.className = className ?? '';\n  }, [contentContainer, className]);\n\n  // bind all marker events\n  useEffect(() => {\n    if (!marker) return;\n\n    const gme = google.maps.event;\n\n    if (onClick) gme.addListener(marker, 'click', onClick);\n    if (onDrag) gme.addListener(marker, 'drag', onDrag);\n    if (onDragStart) gme.addListener(marker, 'dragstart', onDragStart);\n    if (onDragEnd) gme.addListener(marker, 'dragend', onDragEnd);\n\n    if ((onDrag || onDragStart || onDragEnd) && !draggable) {\n      console.warn(\n        'You need to set the marker to draggable to listen to drag-events.'\n      );\n    }\n\n    const m = marker;\n    return () => {\n      gme.clearInstanceListeners(m);\n    };\n  }, [marker, draggable, onClick, onDragStart, onDrag, onDragEnd]);\n\n  // update other marker props when changed\n  useEffect(() => {\n    if (!marker) return;\n\n    if (position !== undefined) marker.position = position;\n    if (draggable !== undefined) marker.gmpDraggable = draggable;\n    if (collisionBehavior !== undefined)\n      marker.collisionBehavior = collisionBehavior;\n    if (zIndex !== undefined) marker.zIndex = zIndex;\n    if (typeof title === 'string') marker.title = title;\n  }, [marker, position, draggable, collisionBehavior, zIndex, title]);\n\n  return [marker, contentContainer] as const;\n}\n\nexport const AdvancedMarker = forwardRef(\n  (props: AdvancedMarkerProps, ref: Ref<AdvancedMarkerRef>) => {\n    const {children} = 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 (!marker) {\n      return null;\n    }\n\n    return (\n      <AdvancedMarkerContext.Provider value={advancedMarkerContextValue}>\n        {contentContainer !== null && createPortal(children, contentContainer)}\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 complexity */\nimport React, {PropsWithChildren, useEffect, useRef, useState} from 'react';\nimport {createPortal} from 'react-dom';\n\nimport {useMap} from '../hooks/use-map';\n\n/**\n * Props for the Info Window Component\n */\nexport type InfoWindowProps = google.maps.InfoWindowOptions & {\n  onCloseClick?: () => void;\n  anchor?: google.maps.Marker | google.maps.marker.AdvancedMarkerElement | null;\n  shouldFocus?: boolean;\n};\n\n/**\n * Component to render a Google Maps Info Window\n */\nexport const InfoWindow = (props: PropsWithChildren<InfoWindowProps>) => {\n  const {children, anchor, shouldFocus, onCloseClick, ...infoWindowOptions} =\n    props;\n  const map = useMap();\n\n  const infoWindowRef = useRef<google.maps.InfoWindow | null>(null);\n  const [contentContainer, setContentContainer] =\n    useState<HTMLDivElement | null>(null);\n\n  // create infowindow once map is available\n  useEffect(() => {\n    if (!map) return;\n\n    const newInfowindow = new google.maps.InfoWindow(infoWindowOptions);\n\n    // Add content to info window\n    const el = document.createElement('div');\n    newInfowindow.setContent(el);\n\n    infoWindowRef.current = newInfowindow;\n    setContentContainer(el);\n\n    // Cleanup info window and event listeners on unmount\n    return () => {\n      google.maps.event.clearInstanceListeners(newInfowindow);\n\n      newInfowindow.close();\n      el.remove();\n\n      setContentContainer(null);\n    };\n\n    // `infoWindowOptions` is missing from dependencies:\n    //\n    // we don't want to re-render a whole new infowindow\n    // when the options change to prevent flickering.\n    // Update of infoWindow options is handled in the useEffect below.\n    //\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [map, children]);\n\n  // Update infoWindowOptions\n  useEffect(() => {\n    infoWindowRef.current?.setOptions(infoWindowOptions);\n  }, [infoWindowOptions]);\n\n  // Handle the close click callback\n  useEffect(() => {\n    if (!infoWindowRef.current) return;\n\n    let listener: google.maps.MapsEventListener | null = null;\n\n    if (onCloseClick) {\n      listener = google.maps.event.addListener(\n        infoWindowRef.current,\n        'closeclick',\n        onCloseClick\n      );\n    }\n\n    return () => {\n      if (listener) listener.remove();\n    };\n  }, [onCloseClick]);\n\n  // Open info window after content container is set\n  useEffect(() => {\n    // anchor === null means an anchor is defined but not ready yet.\n    if (!contentContainer || !infoWindowRef.current || anchor === null) return;\n\n    const openOptions: google.maps.InfoWindowOpenOptions = {map};\n\n    if (anchor) {\n      openOptions.anchor = anchor;\n    }\n\n    if (shouldFocus !== undefined) {\n      openOptions.shouldFocus = shouldFocus;\n    }\n\n    infoWindowRef.current.open(openOptions);\n  }, [contentContainer, infoWindowRef, anchor, map, shouldFocus]);\n\n  return (\n    <>{contentContainer !== null && createPortal(children, contentContainer)}</>\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 Google Maps 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 render a google maps marker Pin View\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    advancedMarker.content = pinElement.element;\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 maps 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","APIProviderContext","React","createContext","useMapInstances","mapInstances","setMapInstances","useState","addMapInstance","mapInstance","id","instances","_extends","removeMapInstance","_ref","remaining","_objectWithoutPropertiesLoose","_toPropertyKey","clearMapInstances","useGoogleMapsApiLoader","props","onLoad","apiKey","version","otherApiParams","_excluded","status","setStatus","loadedLibraries","addLoadedLibrary","useReducer","action","librariesString","useMemo","JSON","stringify","useCallback","_google","res","useEffect","length","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","undefined","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","useMapInstance","context","apiIsLoaded","setMap","container","containerRef","defaultBounds","defaultCenter","defaultZoom","defaultHeading","defaultTilt","hasZoom","hasCenter","savedMapStateRef","mapId","newMap","Map","fitBounds","savedMapId","cameraState","savedCameraState","clearInstanceListeners","GoogleMapsContext","className","mapRef","isControlledExternally","controlled","disableDefaultUI","gestureHandling","keyboardShortcuts","cameraOptions","_lat","_lng","_props$zoom","_props$heading","_props$tilt","combinedStyle","width","height","deckGLViewProps","shownMessages","logErrorOnce","args","add","useMap","ctx","useMapsLibrary","AdvancedMarkerContext","useAdvancedMarker","marker","setMarker","contentContainer","setContentContainer","markerLibrary","onDragStart","onDragEnd","collisionBehavior","draggable","title","numChilds","Children","count","newMarker","AdvancedMarkerElement","content","gme","m","gmpDraggable","AdvancedMarker","forwardRef","advancedMarkerContextValue","useImperativeHandle","createPortal","useAdvancedMarkerRef","refCallback","InfoWindow","anchor","shouldFocus","onCloseClick","infoWindowOptions","infoWindowRef","newInfowindow","setContent","close","_infoWindowRef$curren","openOptions","open","Fragment","ControlPosition","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","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","indexOf","removeAt","useMarker","onMouseOver","onMouseOut","markerOptions","Marker","setDraggable","Boolean","setPosition","useMarkerRef","Pin","advancedMarker","glyphContainer","glyph","pinViewOptions","pinElement","PinElement","element","mapLinear","a1","a2","b1","b2","getMapMaxTilt","limitTiltRange","gmZoom","maxTilt","fovy","Math","min"],"mappings":"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"}