{"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/libraries/create-static-maps-url/helpers.ts","../src/libraries/create-static-maps-url/assemble-marker-params.ts","../src/libraries/create-static-maps-url/assemble-path-params.ts","../src/libraries/create-static-maps-url/assemble-map-type-styles.ts","../src/libraries/create-static-maps-url/index.ts","../src/components/static-map.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  channel?: number;\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 parameters 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, String(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  FunctionComponent,\n  PropsWithChildren,\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 = PropsWithChildren<{\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  channel?: number;\n  /**\n   * To track usage of Google Maps JavaScript API via numeric channels. The only acceptable channel values are numbers from 0-999.\n   * Read more in the\n   * [documentation](https://developers.google.com/maps/reporting-and-monitoring/reporting#usage-tracking-per-channel)\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 (\n            params.channel === undefined ||\n            params.channel < 0 ||\n            params.channel > 999\n          )\n            delete params.channel;\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: FunctionComponent<APIProviderProps> = props => {\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, FunctionComponent} from 'react';\n\nexport const AuthFailureMessage: FunctionComponent = () => {\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  }>(undefined);\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  FunctionComponent,\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} as const;\nexport type ColorScheme = (typeof ColorScheme)[keyof typeof ColorScheme];\n\nexport const RenderingType = {\n  VECTOR: 'VECTOR',\n  RASTER: 'RASTER',\n  UNINITIALIZED: 'UNINITIALIZED'\n} as const;\nexport type RenderingType = (typeof RenderingType)[keyof typeof RenderingType];\n\n/**\n * Props for the Map Component\n */\nexport type MapProps = PropsWithChildren<\n  Omit<google.maps.MapOptions, 'renderingType' | 'colorScheme'> &\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>;\n\nexport const Map: FunctionComponent<MapProps> = (props: 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};\n\n// The deckGLViewProps flag here indicates to deck.gl that the Map component is\n// able to handle viewProps from deck.gl when deck.gl is used to control the map.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\n(Map as any).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\nfunction isElementNode(node: Node): node is HTMLElement {\n  return node.nodeType === Node.ELEMENT_NODE;\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  let xTranslationFlipped = `-${xTranslation}`;\n  let yTranslationFlipped = `-${yTranslation}`;\n  if (xTranslation.trimStart().startsWith('-')) {\n    xTranslationFlipped = xTranslation.substring(1);\n  }\n  if (yTranslation.trimStart().startsWith('-')) {\n    yTranslationFlipped = yTranslation.substring(1);\n  }\n\n  // The \"translate(50%, 100%)\" is here to counter and reset the default anchoring of the advanced marker element\n  // that comes from the api\n  const transformStyle = `translate(50%, 100%) translate(${xTranslationFlipped}, ${yTranslationFlipped})`;\n\n  return (\n    // anchoring container\n    <div style={{transform: transformStyle}}>\n      {/* AdvancedMarker div that user can give styles and classes */}\n      <div className={className} style={styles}>\n        {children}\n      </div>\n    </div>\n  );\n};\n\nexport type CustomMarkerContent =\n  | (HTMLDivElement & {isCustomMarker?: boolean})\n  | null;\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: CustomMarkerContent = null;\n    if (numChildren > 0) {\n      contentElement = document.createElement('div');\n\n      // We need some kind of flag to identify the custom marker content\n      // in the infowindow component. Choosing a custom property instead of a className\n      // to not encourage users to style the marker content directly.\n      contentElement.isCustomMarker = true;\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 or one of\n  // the hover events callbacks are specified)\n  useEffect(() => {\n    if (!marker) return;\n\n    const gmpClickable =\n      clickable !== undefined ||\n      Boolean(onClick) ||\n      Boolean(onMouseEnter) ||\n      Boolean(onMouseLeave);\n\n    // gmpClickable is only available in beta version of the\n    // maps api (as of 2024-10-10)\n    marker.gmpClickable = gmpClickable;\n\n    // enable pointer events for the markers with custom content\n    if (gmpClickable && marker?.content && isElementNode(marker.content)) {\n      marker.content.style.pointerEvents = 'none';\n\n      if (marker.content.firstElementChild) {\n        (marker.content.firstElementChild as HTMLElement).style.pointerEvents =\n          'all';\n      }\n    }\n  }, [marker, clickable, onClick, onMouseEnter, onMouseLeave]);\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(\n      ref,\n      () => marker as google.maps.marker.AdvancedMarkerElement,\n      [marker]\n    );\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  FunctionComponent,\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 {CustomMarkerContent, 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: FunctionComponent<\n  PropsWithChildren<InfoWindowProps>\n> = props => {\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  useDeepCompareEffect(() => {\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 wrapper = anchor.content as CustomMarkerContent;\n        const wrapperBcr = wrapper?.getBoundingClientRect();\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 (wrapperBcr && wrapper?.isCustomMarker) {\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\n            ?.firstElementChild as Element;\n\n          const contentBcr = anchorDomContent?.getBoundingClientRect();\n\n          // center infowindow above marker\n          const anchorOffsetX =\n            contentBcr.x -\n            wrapperBcr.x +\n            (contentBcr.width - wrapperBcr.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 {StaticMapsLocation} from './types';\n\n/**\n * Formats a location into a string representation suitable for Google Static Maps API.\n *\n * @param location - The location to format, can be either a string or an object with lat/lng properties\n * @returns A string representation of the location in the format \"lat,lng\" or the original string\n *\n * @example\n * // Returns \"40.714728,-73.998672\"\n * formatLocation({ lat: 40.714728, lng: -73.998672 })\n *\n * @example\n * // Returns \"New York, NY\"\n * formatLocation(\"New York, NY\")\n */\nexport function formatLocation(location: StaticMapsLocation): string {\n  return typeof location === 'string'\n    ? location\n    : `${location.lat},${location.lng}`;\n}\n\n// Used for removing the leading pipe from the param string\nexport function formatParam(string: string) {\n  return string.slice(1);\n}\n","import {formatParam} from './helpers';\nimport {StaticMapsMarker} from './types';\n\n/**\n * Assembles marker parameters for static maps.\n *\n * This function takes an array of markers and groups them by their style properties.\n * It then creates a string representation of these markers, including their styles and locations,\n * which can be used as parameters for static map APIs.\n *\n * @param {StaticMapsMarker[]} [markers=[]] - An array of markers to be processed. Each marker can have properties such as color, label, size, scale, icon, anchor, and location.\n * @returns {string[]} An array of strings, each representing a group of markers with their styles and locations.\n *\n * @example\n * const markers = [\n *   { color: 'blue', label: 'A', size: 'mid', location: '40.714728,-73.998672' },\n *   { color: 'blue', label: 'B', size: 'mid', location: '40.714728,-73.998672' },\n *   { icon: 'http://example.com/icon.png', location: { lat: 40.714728, lng: -73.998672 } }\n * ];\n * const params = assembleMarkerParams(markers);\n * // Params will be an array of strings representing the marker parameters\n * Example output: [\n *   \"color:blue|label:A|size:mid|40.714728,-73.998672|40.714728,-73.998672\",\n *   \"color:blue|label:B|size:mid|40.714728,-73.998672|40.714728,-73.998672\",\n *   \"icon:http://example.com/icon.png|40.714728,-73.998672\"\n * ]\n */\nexport function assembleMarkerParams(markers: StaticMapsMarker[] = []) {\n  const markerParams: Array<string> = [];\n\n  // Group markers by style\n  const markersByStyle = markers?.reduce(\n    (styles, marker) => {\n      const {color = 'red', label, size, scale, icon, anchor} = marker;\n\n      // Create a unique style key based on either icon properties or standard marker properties\n      const relevantProps = icon ? [icon, anchor, scale] : [color, label, size];\n      const key = relevantProps.filter(Boolean).join('-');\n\n      styles[key] = styles[key] || [];\n      styles[key].push(marker);\n      return styles;\n    },\n    {} as Record<string, StaticMapsMarker[]>\n  );\n\n  Object.values(markersByStyle ?? {}).forEach(markers => {\n    let markerParam: string = '';\n\n    const {icon} = markers[0];\n\n    // Create marker style from first marker in group since all markers share the same style.\n    Object.entries(markers[0]).forEach(([key, value]) => {\n      // Determine which properties to include based on whether marker uses custom icon\n      const relevantKeys = icon\n        ? ['icon', 'anchor', 'scale']\n        : ['color', 'label', 'size'];\n\n      if (relevantKeys.includes(key)) {\n        markerParam += `|${key}:${value}`;\n      }\n    });\n\n    // Add location coordinates for each marker in the style group\n    // Handles both string locations and lat/lng object formats.\n    for (const marker of markers) {\n      const location =\n        typeof marker.location === 'string'\n          ? marker.location\n          : `${marker.location.lat},${marker.location.lng}`;\n\n      markerParam += `|${location}`;\n    }\n\n    markerParams.push(markerParam);\n  });\n\n  return markerParams.map(formatParam);\n}\n","import {formatLocation, formatParam} from './helpers';\nimport {StaticMapsPath} from './types';\n\n/**\n * Assembles path parameters for the Static Maps Api from an array of paths.\n *\n * This function groups paths by their style properties (color, weight, fillcolor, geodesic)\n * and then constructs a string of path parameters for each group. Each path parameter string\n * includes the style properties and the coordinates of the paths.\n *\n * @param {Array<StaticMapsPath>} [paths=[]] - An array of paths to be assembled into path parameters.\n * @returns {Array<string>} An array of path parameter strings.\n *\n * @example\n * const paths = [\n *   {\n *     color: 'red',\n *     weight: 5,\n *     coordinates: [\n *       { lat: 40.714728, lng: -73.998672 },\n *       { lat: 40.718217, lng: -73.998284 }\n *     ]\n *   }\n * ];\n *\n * const pathParams = assemblePathParams(paths);\n * Output: [\n *    'color:red|weight:5|40.714728,-73.998672|40.718217,-73.998284'\n *  ]\n */\nexport function assemblePathParams(paths: Array<StaticMapsPath> = []) {\n  const pathParams: Array<string> = [];\n\n  // Group paths by their style properties (color, weight, fillcolor, geodesic)\n  // to combine paths with identical styles into single parameter strings\n  const pathsByStyle = paths?.reduce(\n    (styles, path) => {\n      const {color = 'default', weight, fillcolor, geodesic} = path;\n\n      // Create unique key for this style combination\n      const key = [color, weight, fillcolor, geodesic]\n        .filter(Boolean)\n        .join('-');\n\n      styles[key] = styles[key] || [];\n      styles[key].push(path);\n      return styles;\n    },\n    {} as Record<string, Array<StaticMapsPath>>\n  );\n\n  // Process each group of paths with identical styles\n  Object.values(pathsByStyle ?? {}).forEach(paths => {\n    let pathParam = '';\n\n    // Build style parameter string using properties from first path in group\n    // since all paths in this group share the same style\n    Object.entries(paths[0]).forEach(([key, value]) => {\n      if (['color', 'weight', 'fillcolor', 'geodesic'].includes(key)) {\n        pathParam += `|${key}:${value}`;\n      }\n    });\n\n    // Add location for all marker in style group\n    for (const path of paths) {\n      if (typeof path.coordinates === 'string') {\n        pathParam += `|${decodeURIComponent(path.coordinates)}`;\n      } else {\n        for (const location of path.coordinates) {\n          pathParam += `|${formatLocation(location)}`;\n        }\n      }\n    }\n\n    pathParams.push(pathParam);\n  });\n\n  return pathParams.map(formatParam);\n}\n","import {formatParam} from './helpers';\n\n/**\n * Converts an array of Google Maps style objects into an array of style strings\n * compatible with the Google Static Maps API.\n *\n * @param styles - An array of Google Maps MapTypeStyle objects that define the styling rules\n * @returns An array of formatted style strings ready to be used with the Static Maps API\n *\n * @example\n * const styles = [{\n *   featureType: \"road\",\n *   elementType: \"geometry\",\n *   stylers: [{color: \"#ff0000\"}, {weight: 1}]\n * }];\n *\n * const styleStrings = assembleMapTypeStyles(styles);\n * // Returns: [\"|feature:road|element:geometry|color:0xff0000|weight:1\"]\n *\n * Each style string follows the format:\n * \"feature:{featureType}|element:{elementType}|{stylerName}:{stylerValue}\"\n *\n * Note: Color values with hexadecimal notation (#) are automatically converted\n * to the required 0x format for the Static Maps API.\n */\nexport function assembleMapTypeStyles(\n  styles: Array<google.maps.MapTypeStyle>\n): string[] {\n  return styles\n    .map((mapTypeStyle: google.maps.MapTypeStyle) => {\n      const {featureType, elementType, stylers = []} = mapTypeStyle;\n\n      let styleString = '';\n\n      if (featureType) {\n        styleString += `|feature:${featureType}`;\n      }\n\n      if (elementType) {\n        styleString += `|element:${elementType}`;\n      }\n\n      for (const styler of stylers) {\n        Object.entries(styler).forEach(([name, value]) => {\n          styleString += `|${name}:${String(value).replace('#', '0x')}`;\n        });\n      }\n\n      return styleString;\n    })\n    .map(formatParam);\n}\n","import {assembleMarkerParams} from './assemble-marker-params';\nimport {assemblePathParams} from './assemble-path-params';\nimport {formatLocation} from './helpers';\n\nimport {StaticMapsApiOptions} from './types';\nimport {assembleMapTypeStyles} from './assemble-map-type-styles';\n\nconst STATIC_MAPS_BASE = 'https://maps.googleapis.com/maps/api/staticmap';\n\n/**\n * Creates a URL for the Google Static Maps API with the specified parameters.\n *\n * @param {Object} options - The configuration options for the static map\n * @param {string} options.apiKey - Your Google Maps API key (required)\n * @param {number} options.width - The width of the map image in pixels (required)\n * @param {number} options.height - The height of the map image in pixels (required)\n * @param {StaticMapsLocation} [options.center] - The center point of the map (lat/lng or address).\n *  Required if no markers or paths or \"visible locations\" are provided.\n * @param {number} [options.zoom] - The zoom level of the map. Required if no markers or paths or \"visible locations\" are provided.\n * @param {1|2|4} [options.scale] - The resolution of the map (1, 2, or 4)\n * @param {string} [options.format] - The image format (png, png8, png32, gif, jpg, jpg-baseline)\n * @param {string} [options.mapType] - The type of map (roadmap, satellite, terrain, hybrid)\n * @param {string} [options.language] - The language of the map labels\n * @param {string} [options.region] - The region code for the map\n * @param {string} [options.map_id] - The Cloud-based map style ID\n * @param {StaticMapsMarker[]} [options.markers=[]] - Array of markers to display on the map\n * @param {StaticMapsPath[]} [options.paths=[]] - Array of paths to display on the map\n * @param {StaticMapsLocation[]} [options.visible=[]] - Array of locations that should be visible on the map\n * @param {MapTypeStyle[]} [options.style=[]] - Array of style objects to customize the map appearance\n *\n * @returns {string} The complete Google Static Maps API URL\n *\n * @throws {Error} If API key is not provided\n * @throws {Error} If width or height is not provided\n *\n * @example\n * const url = createStaticMapsUrl({\n *   apiKey: 'YOUR_API_KEY',\n *   width: 600,\n *   height: 400,\n *   center: { lat: 40.714728, lng: -73.998672 },\n *   zoom: 12,\n *   markers: [\n *     {\n *       location: { lat: 40.714728, lng: -73.998672 },\n *       color: 'red',\n *       label: 'A'\n *     }\n *   ],\n *   paths: [\n *     {\n *       coordinates: [\n *         { lat: 40.714728, lng: -73.998672 },\n *         { lat: 40.719728, lng: -73.991672 }\n *       ],\n *       color: '0x0000ff',\n *       weight: 5\n *     }\n *   ],\n *   style: [\n *     {\n *       featureType: 'road',\n *       elementType: 'geometry',\n *       stylers: [{color: '#00ff00'}]\n *     }\n *   ]\n * });\n *\n * // Results in URL similar to:\n * // https://maps.googleapis.com/maps/api/staticmap?key=YOUR_API_KEY\n * // &size=600x400\n * // &center=40.714728,-73.998672&zoom=12\n * // &markers=color:red|label:A|40.714728,-73.998672\n * // &path=color:0x0000ff|weight:5|40.714728,-73.998672|40.719728,-73.991672\n * // &style=feature:road|element:geometry|color:0x00ff00\n */\nexport function createStaticMapsUrl({\n  apiKey,\n  width,\n  height,\n  center,\n  zoom,\n  scale,\n  format,\n  mapType,\n  language,\n  region,\n  mapId,\n  markers = [],\n  paths = [],\n  visible = [],\n  style = []\n}: StaticMapsApiOptions) {\n  if (!apiKey) {\n    console.warn('API key is required');\n  }\n  if (!width || !height) {\n    console.warn('Width and height are required');\n  }\n\n  const params: Record<string, string | number | null> = {\n    key: apiKey,\n    size: `${width}x${height}`,\n    ...(center && {center: formatLocation(center)}),\n    ...(zoom && {zoom}),\n    ...(scale && {scale}),\n    ...(format && {format}),\n    ...(mapType && {maptype: mapType}),\n    ...(language && {language}),\n    ...(region && {region}),\n    ...(mapId && {map_id: mapId})\n  };\n\n  const url = new URL(STATIC_MAPS_BASE);\n\n  // Params that don't need special handling\n  Object.entries(params).forEach(([key, value]) => {\n    url.searchParams.append(key, String(value));\n  });\n\n  // Assemble Markers\n  for (const markerParam of assembleMarkerParams(markers)) {\n    url.searchParams.append('markers', markerParam);\n  }\n\n  // Assemble Paths\n  for (const pathParam of assemblePathParams(paths)) {\n    url.searchParams.append('path', pathParam);\n  }\n\n  // Assemble visible locations\n  if (visible.length) {\n    url.searchParams.append(\n      'visible',\n      visible.map(location => formatLocation(location)).join('|')\n    );\n  }\n\n  // Assemble Map Type Styles\n  for (const styleString of assembleMapTypeStyles(style)) {\n    url.searchParams.append('style', styleString);\n  }\n\n  return url.toString();\n}\n","import React from 'react';\n\nexport {createStaticMapsUrl} from '../libraries/create-static-maps-url';\nexport * from '../libraries/create-static-maps-url/types';\n\n/**\n * Props for the StaticMap component\n */\nexport type StaticMapProps = {\n  url: string;\n  className?: string;\n};\n\nexport const StaticMap = (props: StaticMapProps) => {\n  const {url, className} = props;\n\n  if (!url) throw new Error('URL is required');\n\n  return <img className={className} src={url} width=\"100%\" />;\n};\n","import {FunctionComponent, 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: FunctionComponent<MapControlProps> = ({\n  children,\n  position\n}) => {\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 as google.maps.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  FunctionComponent,\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 = PropsWithChildren<google.maps.marker.PinElementOptions>;\n\n/**\n * Component to configure the appearance of an AdvancedMarker\n */\nexport const Pin: FunctionComponent<PinProps> = props => {\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    // Here we are selecting the anchor container.\n    // The hierarchy is as follows:\n    // \"advancedMarker.content\" (from google) -> \"pointer events reset div\" -> \"anchor container\"\n    const markerContent = advancedMarker.content?.firstChild?.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","String","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","channel","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","isElementNode","node","nodeType","Node","ELEMENT_NODE","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","xTranslationFlipped","yTranslationFlipped","trimStart","startsWith","substring","transformStyle","transform","useAdvancedMarker","setMarker","contentContainer","setContentContainer","markerLibrary","onMouseEnter","onMouseLeave","onDragStart","onDragEnd","collisionBehavior","clickable","draggable","title","numChildren","Children","count","newMarker","AdvancedMarkerElement","contentElement","isCustomMarker","_contentElement","gmpDraggable","gmpClickable","Boolean","pointerEvents","firstElementChild","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","wrapper","wrapperBcr","getBoundingClientRect","_anchor$content$first","anchorDomContent","contentBcr","anchorOffsetX","anchorOffsetY","y","open","close","Fragment","formatLocation","location","formatParam","string","slice","assembleMarkerParams","markers","markerParams","markersByStyle","reduce","label","size","scale","icon","relevantProps","filter","values","forEach","markerParam","relevantKeys","assemblePathParams","paths","pathParams","pathsByStyle","path","weight","fillcolor","geodesic","pathParam","coordinates","decodeURIComponent","assembleMapTypeStyles","mapTypeStyle","featureType","elementType","stylers","styleString","styler","STATIC_MAPS_BASE","createStaticMapsUrl","format","mapType","visible","maptype","map_id","url","URL","searchParams","StaticMap","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","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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"}