{"version":3,"file":"js/4550-27cbc4d33dcf168368aa.chunk.js","mappings":"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","sources":["webpack://nodalview/./node_modules/fast-deep-equal/index.js","webpack://nodalview/./node_modules/@vis.gl/react-google-maps/dist/index.modern.mjs"],"sourcesContent":["'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","import React, { useMemo, useState, useReducer, useCallback, useEffect, useRef, useContext, useLayoutEffect, forwardRef, useImperativeHandle, Children } from 'react';\nimport { createPortal } from 'react-dom';\nimport isDeepEqual from 'fast-deep-equal';\n\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : String(i);\n}\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nconst APILoadingStatus = {\n NOT_LOADED: 'NOT_LOADED',\n LOADING: 'LOADING',\n LOADED: 'LOADED',\n FAILED: 'FAILED',\n AUTH_FAILURE: 'AUTH_FAILURE'\n};\n\nconst MAPS_API_BASE_URL = 'https://maps.googleapis.com/maps/api/js';\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 */\nclass GoogleMapsApiLoader {\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(params, onLoadingStatusChange) {\n var _window$google;\n const libraries = params.libraries ? params.libraries.split(',') : [];\n const serializedParams = this.serializeParams(params);\n this.listeners.push(onLoadingStatusChange);\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 if ((_window$google = window.google) != null && (_window$google = _window$google.maps) != null && _window$google.importLibrary) {\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 if (this.serializedApiParams && this.serializedApiParams !== serializedParams) {\n console.warn(`[google-maps-api-loader] The maps API has already been loaded ` + `with different parameters and will not be loaded again. Refresh the ` + `page for new values to have effect.`);\n }\n const librariesToLoad = ['maps', ...libraries];\n await Promise.all(librariesToLoad.map(name => google.maps.importLibrary(name)));\n }\n /**\n * Serialize the paramters used to load the library for easier comparison.\n */\n static serializeParams(params) {\n return [params.v, params.key, params.language, params.region, params.authReferrerPolicy, params.solutionChannel].join('/');\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 static initImportLibrary(params) {\n if (!window.google) window.google = {};\n if (!window.google.maps) window.google.maps = {};\n if (window.google.maps['importLibrary']) {\n console.error('[google-maps-api-loader-internal]: initImportLibrary must only be called once');\n return;\n }\n let apiPromise = null;\n const loadApi = () => {\n if (apiPromise) return apiPromise;\n apiPromise = new Promise((resolve, reject) => {\n var _document$querySelect;\n const scriptElement = document.createElement('script');\n const urlParams = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n const urlParamName = key.replace(/[A-Z]/g, t => '_' + t[0].toLowerCase());\n urlParams.set(urlParamName, value);\n }\n urlParams.set('loading', 'async');\n urlParams.set('callback', '__googleMapsCallback__');\n scriptElement.async = true;\n scriptElement.src = MAPS_API_BASE_URL + `?` + urlParams.toString();\n scriptElement.nonce = ((_document$querySelect = document.querySelector('script[nonce]')) == null ? void 0 : _document$querySelect.nonce) || '';\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 window.__googleMapsCallback__ = () => {\n this.loadingStatus = APILoadingStatus.LOADED;\n this.notifyLoadingStatusListeners();\n resolve();\n };\n window.gm_authFailure = () => {\n this.loadingStatus = APILoadingStatus.AUTH_FAILURE;\n this.notifyLoadingStatusListeners();\n };\n this.loadingStatus = APILoadingStatus.LOADING;\n this.notifyLoadingStatusListeners();\n document.head.append(scriptElement);\n });\n return apiPromise;\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 => loadApi().then(() => google.maps.importLibrary(libraryName));\n }\n /**\n * Calls all registered loadingStatusListeners after a status update.\n */\n static notifyLoadingStatusListeners() {\n for (const fn of this.listeners) {\n fn(this.loadingStatus);\n }\n }\n}\n/**\n * The current loadingStatus of the API.\n */\nGoogleMapsApiLoader.loadingStatus = APILoadingStatus.NOT_LOADED;\n/**\n * The parameters used for first loading the API.\n */\nGoogleMapsApiLoader.serializedApiParams = void 0;\n/**\n * A list of functions to be notified when the loading status changes.\n */\nGoogleMapsApiLoader.listeners = [];\n\nconst _excluded$3 = [\"onLoad\", \"apiKey\", \"version\", \"libraries\"],\n _excluded2$1 = [\"children\"];\nconst DEFAULT_SOLUTION_CHANNEL = 'GMP_visgl_rgmlibrary_v1_default';\nconst APIProviderContext = React.createContext(null);\n/**\n * local hook to set up the map-instance management context.\n */\nfunction useMapInstances() {\n const [mapInstances, setMapInstances] = useState({});\n const addMapInstance = (mapInstance, id = 'default') => {\n setMapInstances(instances => _extends({}, instances, {\n [id]: mapInstance\n }));\n };\n const removeMapInstance = (id = 'default') => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n setMapInstances(_ref => {\n let remaining = _objectWithoutPropertiesLoose(_ref, [id].map(_toPropertyKey));\n return remaining;\n });\n };\n const clearMapInstances = () => {\n setMapInstances({});\n };\n return {\n mapInstances,\n addMapInstance,\n removeMapInstance,\n 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) {\n const {\n onLoad,\n apiKey,\n version,\n libraries = []\n } = props,\n otherApiParams = _objectWithoutPropertiesLoose(props, _excluded$3);\n const [status, setStatus] = useState(GoogleMapsApiLoader.loadingStatus);\n const [loadedLibraries, addLoadedLibrary] = useReducer((loadedLibraries, action) => {\n return _extends({}, loadedLibraries, {\n [action.name]: action.value\n });\n }, {});\n const librariesString = useMemo(() => libraries == null ? void 0 : libraries.join(','), [libraries]);\n const serializedParams = useMemo(() => JSON.stringify(_extends({\n apiKey,\n version\n }, otherApiParams)), [apiKey, version, otherApiParams]);\n const importLibrary = useCallback(async name => {\n var _google;\n if (loadedLibraries[name]) {\n return loadedLibraries[name];\n }\n if (!((_google = google) != null && (_google = _google.maps) != null && _google.importLibrary)) {\n throw new Error('[api-provider-internal] importLibrary was called before ' + 'google.maps.importLibrary was defined.');\n }\n const res = await window.google.maps.importLibrary(name);\n addLoadedLibrary({\n name,\n value: res\n });\n return res;\n }, [loadedLibraries]);\n useEffect(() => {\n (async () => {\n try {\n const params = _extends({\n key: apiKey\n }, otherApiParams);\n if (version) params.v = version;\n if ((librariesString == null ? void 0 : librariesString.length) > 0) params.libraries = librariesString;\n if (params.solutionChannel === undefined) params.solutionChannel = DEFAULT_SOLUTION_CHANNEL;else if (params.solutionChannel === '') delete params.solutionChannel;\n await GoogleMapsApiLoader.load(params, status => setStatus(status));\n for (const name of ['core', 'maps', ...libraries]) {\n await importLibrary(name);\n }\n if (onLoad) {\n onLoad();\n }\n } catch (error) {\n console.error('<ApiProvider> failed to load the Google Maps JavaScript API', error);\n }\n })();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [apiKey, librariesString, serializedParams]);\n return {\n status,\n loadedLibraries,\n importLibrary\n };\n}\n/**\n * Component to wrap the components from this library and load the Google Maps JavaScript API\n */\nconst APIProvider = props => {\n const {\n children\n } = props,\n loaderProps = _objectWithoutPropertiesLoose(props, _excluded2$1);\n const {\n mapInstances,\n addMapInstance,\n removeMapInstance,\n clearMapInstances\n } = useMapInstances();\n const {\n status,\n loadedLibraries,\n importLibrary\n } = useGoogleMapsApiLoader(loaderProps);\n const contextValue = useMemo(() => ({\n mapInstances,\n addMapInstance,\n removeMapInstance,\n clearMapInstances,\n status,\n loadedLibraries,\n importLibrary\n }), [mapInstances, addMapInstance, removeMapInstance, clearMapInstances, status, loadedLibraries, importLibrary]);\n return /*#__PURE__*/React.createElement(APIProviderContext.Provider, {\n value: contextValue\n }, children);\n};\n\n/**\n * Sets up effects to bind event-handlers for all event-props in MapEventProps.\n * @internal\n */\nfunction useMapEvents(map, props) {\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 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];\n const eventType = propNameToEventType[propName];\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n if (!map) return;\n if (!handler) return;\n const listener = google.maps.event.addListener(map, eventType, ev => {\n handler(createMapEvent(eventType, map, ev));\n });\n return () => listener.remove();\n }, [map, eventType, handler]);\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(type, map, srcEvent) {\n const ev = {\n type,\n map,\n detail: {},\n stoppable: false,\n stop: () => {}\n };\n if (cameraEventTypes.includes(type)) {\n const camEvent = ev;\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 if (!center || !bounds || !Number.isFinite(zoom)) {\n console.warn('[createEvent] at least one of the values from the map ' + 'returned undefined. This is not expected to happen. Please ' + 'report an issue at https://github.com/visgl/react-google-maps/issues/new');\n }\n camEvent.detail = {\n center: (center == null ? void 0 : center.toJSON()) || {\n lat: 0,\n lng: 0\n },\n zoom: zoom || 0,\n heading: heading,\n tilt: tilt,\n bounds: (bounds == null ? void 0 : bounds.toJSON()) || {\n north: 90,\n east: 180,\n south: -90,\n west: -180\n }\n };\n return camEvent;\n } else if (mouseEventTypes.includes(type)) {\n var _srcEvent$latLng;\n if (!srcEvent) throw new Error('[createEvent] mouse events must provide a srcEvent');\n const mouseEvent = ev;\n mouseEvent.domEvent = srcEvent.domEvent;\n mouseEvent.stoppable = true;\n mouseEvent.stop = () => srcEvent.stop();\n mouseEvent.detail = {\n latLng: ((_srcEvent$latLng = srcEvent.latLng) == null ? void 0 : _srcEvent$latLng.toJSON()) || null,\n placeId: srcEvent.placeId\n };\n return mouseEvent;\n }\n return ev;\n}\n/**\n * maps the camelCased names of event-props to the corresponding event-types\n * used in the maps API.\n */\nconst propNameToEventType = {\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 // 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};\nconst cameraEventTypes = ['bounds_changed', 'center_changed', 'heading_changed', 'tilt_changed', 'zoom_changed'];\nconst mouseEventTypes = ['click', 'contextmenu', 'dblclick', 'mousemove', 'mouseout', 'mouseover'];\nconst eventPropNames = Object.keys(propNameToEventType);\n\nfunction useDeepCompareEffect(effect, deps) {\n const ref = useRef(undefined);\n if (!ref.current || !isDeepEqual(deps, ref.current)) {\n ref.current = deps;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(effect, ref.current);\n}\n\nconst mapOptionKeys = new Set(['backgroundColor', 'clickableIcons', 'controlSize', 'disableDefaultUI', 'disableDoubleClickZoom', 'draggable', 'draggableCursor', 'draggingCursor', 'fullscreenControl', 'fullscreenControlOptions', 'gestureHandling', 'isFractionalZoomEnabled', 'keyboardShortcuts', 'mapTypeControl', 'mapTypeControlOptions', 'mapTypeId', 'maxZoom', 'minZoom', 'noClear', 'panControl', 'panControlOptions', 'restriction', 'rotateControl', 'rotateControlOptions', 'scaleControl', 'scaleControlOptions', 'scrollwheel', 'streetView', 'streetViewControl', 'streetViewControlOptions', 'styles', 'zoomControl', 'zoomControlOptions']);\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 */\nfunction useMapOptions(map, 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 const mapOptions = {};\n const keys = Object.keys(mapProps);\n for (const key of keys) {\n if (!mapOptionKeys.has(key)) continue;\n mapOptions[key] = mapProps[key];\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 map.setOptions(mapOptions);\n }, [mapOptions]);\n /* eslint-enable react-hooks/exhaustive-deps */\n}\n\nfunction useApiLoadingStatus() {\n var _useContext;\n return ((_useContext = useContext(APIProviderContext)) == null ? void 0 : _useContext.status) || APILoadingStatus.NOT_LOADED;\n}\n\n/**\n * Internal hook that updates the camera when deck.gl viewState changes.\n * @internal\n */\nfunction useDeckGLCameraUpdate(map, props) {\n const {\n viewport,\n viewState\n } = props;\n const isDeckGlControlled = !!viewport;\n useLayoutEffect(() => {\n if (!map || !viewState) return;\n const {\n latitude,\n longitude,\n bearing: heading,\n pitch: tilt,\n zoom\n } = viewState;\n map.moveCamera({\n center: {\n lat: latitude,\n lng: longitude\n },\n heading,\n tilt,\n zoom: zoom + 1\n });\n }, [map, viewState]);\n return isDeckGlControlled;\n}\n\nfunction isLatLngLiteral(obj) {\n if (!obj || typeof obj !== 'object') return false;\n if (!('lat' in obj && 'lng' in obj)) return false;\n return Number.isFinite(obj.lat) && Number.isFinite(obj.lng);\n}\nfunction latLngEquals(a, b) {\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}\nfunction toLatLngLiteral(obj) {\n if (isLatLngLiteral(obj)) return obj;\n return obj.toJSON();\n}\n\nfunction useMapCameraParams(map, cameraStateRef, mapProps) {\n const center = mapProps.center ? toLatLngLiteral(mapProps.center) : null;\n let lat = null;\n let lng = null;\n if (center && Number.isFinite(center.lat) && Number.isFinite(center.lng)) {\n lat = center.lat;\n lng = center.lng;\n }\n const zoom = Number.isFinite(mapProps.zoom) ? mapProps.zoom : null;\n const heading = Number.isFinite(mapProps.heading) ? mapProps.heading : null;\n const tilt = Number.isFinite(mapProps.tilt) ? mapProps.tilt : null;\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 useLayoutEffect(() => {\n if (!map) return;\n const nextCamera = {};\n let needsUpdate = false;\n if (lat !== null && lng !== null && (cameraStateRef.current.center.lat !== lat || cameraStateRef.current.center.lng !== lng)) {\n nextCamera.center = {\n lat,\n lng\n };\n needsUpdate = true;\n }\n if (zoom !== null && cameraStateRef.current.zoom !== zoom) {\n nextCamera.zoom = zoom;\n needsUpdate = true;\n }\n if (heading !== null && cameraStateRef.current.heading !== heading) {\n nextCamera.heading = heading;\n needsUpdate = true;\n }\n if (tilt !== null && cameraStateRef.current.tilt !== tilt) {\n nextCamera.tilt = tilt;\n needsUpdate = true;\n }\n if (needsUpdate) {\n map.moveCamera(nextCamera);\n }\n });\n}\n\nconst AuthFailureMessage = () => {\n const style = {\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 return /*#__PURE__*/React.createElement(\"div\", {\n style: style\n }, /*#__PURE__*/React.createElement(\"h2\", null, \"Error: AuthFailure\"), /*#__PURE__*/React.createElement(\"p\", null, \"A problem with your API key prevents the map from rendering correctly. Please make sure the value of the \", /*#__PURE__*/React.createElement(\"code\", null, \"APIProvider.apiKey\"), \" prop is correct. Check the error-message in the console for further details.\"));\n};\n\nfunction useCallbackRef() {\n const [el, setEl] = useState(null);\n const ref = useCallback(value => setEl(value), [setEl]);\n return [el, ref];\n}\n\n/**\n * Hook to check if the Maps JavaScript API is loaded\n */\nfunction useApiIsLoaded() {\n const status = useApiLoadingStatus();\n return status === APILoadingStatus.LOADED;\n}\n\nfunction useForceUpdate() {\n const [, forceUpdate] = useReducer(x => x + 1, 0);\n return forceUpdate;\n}\n\nfunction handleBoundsChange(map, ref) {\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 if (!center || !bounds || !Number.isFinite(zoom)) {\n console.warn('[useTrackedCameraState] at least one of the values from the map ' + 'returned undefined. This is not expected to happen. Please ' + 'report an issue at https://github.com/visgl/react-google-maps/issues/new');\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 == null ? void 0 : center.toJSON()) || {\n lat: 0,\n lng: 0\n },\n zoom: zoom || 0,\n heading: heading,\n tilt: tilt\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 */\nfunction useTrackedCameraStateRef(map) {\n const forceUpdate = useForceUpdate();\n const ref = useRef({\n center: {\n lat: 0,\n lng: 0\n },\n heading: 0,\n tilt: 0,\n zoom: 0\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 const listener = google.maps.event.addListener(map, 'bounds_changed', () => {\n handleBoundsChange(map, ref);\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 return () => listener.remove();\n }, [map, forceUpdate]);\n return ref;\n}\n\nconst _excluded$2 = [\"id\", \"defaultBounds\", \"defaultCenter\", \"defaultZoom\", \"defaultHeading\", \"defaultTilt\", \"reuseMaps\"],\n _excluded2 = [\"padding\"];\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 has(key) {\n return this.entries[key] && this.entries[key].length > 0;\n }\n static pop(key) {\n if (!this.entries[key]) return null;\n return this.entries[key].pop() || null;\n }\n static push(key, value) {\n if (!this.entries[key]) this.entries[key] = [];\n this.entries[key].push(value);\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 */\nCachedMapStack.entries = {};\nfunction useMapInstance(props, context) {\n const apiIsLoaded = useApiIsLoaded();\n const [map, setMap] = useState(null);\n const [container, containerRef] = useCallbackRef();\n const cameraStateRef = useTrackedCameraStateRef(map);\n const {\n id,\n defaultBounds,\n defaultCenter,\n defaultZoom,\n defaultHeading,\n defaultTilt,\n reuseMaps\n } = props,\n mapOptions = _objectWithoutPropertiesLoose(props, _excluded$2);\n const hasZoom = props.zoom !== undefined || props.defaultZoom !== undefined;\n const hasCenter = props.center !== undefined || props.defaultCenter !== undefined;\n if (!defaultBounds && (!hasZoom || !hasCenter)) {\n console.warn('<Map> component is missing configuration. ' + 'You have to provide zoom and center (via the `zoom`/`defaultZoom` and ' + '`center`/`defaultCenter` props) or specify the region to show using ' + '`defaultBounds`. See ' + 'https://visgl.github.io/react-google-maps/docs/api-reference/components/map#required');\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)) mapOptions.zoom = defaultZoom;\n if (!mapOptions.heading && Number.isFinite(defaultHeading)) mapOptions.heading = defaultHeading;\n if (!mapOptions.tilt && Number.isFinite(defaultTilt)) mapOptions.tilt = defaultTilt;\n for (const key of Object.keys(mapOptions)) if (mapOptions[key] === undefined) delete mapOptions[key];\n const savedMapStateRef = useRef();\n // create the map instance and register it in the context\n useEffect(() => {\n if (!container || !apiIsLoaded) return;\n const {\n addMapInstance,\n removeMapInstance\n } = context;\n const mapId = props.mapId;\n const cacheKey = mapId || 'default';\n let mapDiv;\n let map;\n if (reuseMaps && CachedMapStack.has(cacheKey)) {\n map = CachedMapStack.pop(cacheKey);\n mapDiv = map.getDiv();\n container.appendChild(mapDiv);\n map.setOptions(mapOptions);\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 map = new google.maps.Map(mapDiv, mapOptions);\n }\n setMap(map);\n addMapInstance(map, id);\n if (defaultBounds) {\n const {\n padding\n } = defaultBounds,\n defBounds = _objectWithoutPropertiesLoose(defaultBounds, _excluded2);\n map.fitBounds(defBounds, padding);\n }\n // prevent map not rendering due to missing configuration\n else if (!hasZoom || !hasCenter) {\n map.fitBounds({\n east: 180,\n west: -180,\n south: -90,\n 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 {\n mapId: savedMapId,\n cameraState: savedCameraState\n } = savedMapStateRef.current;\n if (savedMapId !== mapId) {\n map.setOptions(savedCameraState);\n }\n }\n return () => {\n savedMapStateRef.current = {\n mapId,\n // eslint-disable-next-line react-hooks/exhaustive-deps\n cameraState: cameraStateRef.current\n };\n // detach the map-div from the dom\n mapDiv.remove();\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 setMap(null);\n removeMapInstance(id);\n };\n },\n // some dependencies are ignored in the list below:\n // - defaultBounds and the default* camera props will only be used once, and\n // changes should be ignored\n // - mapOptions has special hooks that take care of updating the options\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [container, apiIsLoaded, id, props.mapId]);\n return [map, containerRef, cameraStateRef];\n}\n\nconst GoogleMapsContext = React.createContext(null);\nconst Map = props => {\n const {\n children,\n id,\n className,\n style\n } = props;\n const context = useContext(APIProviderContext);\n const loadingStatus = useApiLoadingStatus();\n if (!context) {\n throw new Error('<Map> can only be used inside an <ApiProvider> component.');\n }\n const [map, mapRef, cameraStateRef] = useMapInstance(props, context);\n useMapCameraParams(map, cameraStateRef, props);\n useMapEvents(map, props);\n useMapOptions(map, props);\n const isDeckGlControlled = useDeckGLCameraUpdate(map, props);\n const isControlledExternally = !!props.controlled;\n // disable interactions with the map for externally controlled maps\n useEffect(() => {\n if (!map) return;\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({\n 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 return () => {\n map.setOptions({\n gestureHandling: props.gestureHandling,\n keyboardShortcuts: props.keyboardShortcuts\n });\n };\n }, [map, isDeckGlControlled, isControlledExternally, props.gestureHandling, props.keyboardShortcuts]);\n // setup a stable cameraOptions object that can be used as dependency\n const center = props.center ? toLatLngLiteral(props.center) : null;\n let lat = null;\n let lng = null;\n if (center && Number.isFinite(center.lat) && Number.isFinite(center.lng)) {\n lat = center.lat;\n lng = center.lng;\n }\n const cameraOptions = useMemo(() => {\n var _lat, _lng, _props$zoom, _props$heading, _props$tilt;\n return {\n center: {\n lat: (_lat = lat) != null ? _lat : 0,\n lng: (_lng = lng) != null ? _lng : 0\n },\n zoom: (_props$zoom = props.zoom) != null ? _props$zoom : 0,\n heading: (_props$heading = props.heading) != null ? _props$heading : 0,\n tilt: (_props$tilt = props.tilt) != null ? _props$tilt : 0\n };\n }, [lat, lng, props.zoom, props.heading, props.tilt]);\n // externally controlled mode: reject all camera changes that don't correspond to changes in props\n useLayoutEffect(() => {\n if (!map || !isControlledExternally) return;\n map.moveCamera(cameraOptions);\n const listener = map.addListener('bounds_changed', () => {\n map.moveCamera(cameraOptions);\n });\n return () => listener.remove();\n }, [map, isControlledExternally, cameraOptions]);\n const combinedStyle = useMemo(() => _extends({\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 }, style), [style, isDeckGlControlled]);\n const contextValue = useMemo(() => ({\n map\n }), [map]);\n if (loadingStatus === APILoadingStatus.AUTH_FAILURE) {\n return /*#__PURE__*/React.createElement(\"div\", {\n style: _extends({\n position: 'relative'\n }, className ? {} : combinedStyle),\n className: className\n }, /*#__PURE__*/React.createElement(AuthFailureMessage, null));\n }\n return /*#__PURE__*/React.createElement(\"div\", _extends({\n ref: mapRef,\n \"data-testid\": 'map',\n style: className ? undefined : combinedStyle,\n className: className\n }, id ? {\n id\n } : {}), map ? /*#__PURE__*/React.createElement(GoogleMapsContext.Provider, {\n value: contextValue\n }, children) : null);\n};\nMap.deckGLViewProps = true;\n\nconst shownMessages = new Set();\nfunction logErrorOnce(...args) {\n const key = JSON.stringify(args);\n if (!shownMessages.has(key)) {\n shownMessages.add(key);\n console.error(...args);\n }\n}\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 */\nconst useMap = (id = null) => {\n const ctx = useContext(APIProviderContext);\n const {\n map\n } = useContext(GoogleMapsContext) || {};\n if (ctx === null) {\n logErrorOnce('useMap(): failed to retrieve APIProviderContext. ' + 'Make sure that the <APIProvider> component exists and that the ' + 'component you are calling `useMap()` from is a sibling of the ' + '<APIProvider>.');\n return null;\n }\n const {\n mapInstances\n } = ctx;\n // if an id is specified, the corresponding map or null is returned\n if (id !== null) return mapInstances[id] || null;\n // otherwise, return the closest ancestor\n if (map) return map;\n // finally, return the default map instance\n return mapInstances['default'] || null;\n};\n\nfunction useMapsLibrary(name) {\n const apiIsLoaded = useApiIsLoaded();\n const ctx = useContext(APIProviderContext);\n useEffect(() => {\n if (!apiIsLoaded || !ctx) return;\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 return (ctx == null ? void 0 : ctx.loadedLibraries[name]) || null;\n}\n\nfunction setValueForStyles(element, styles, prevStyles) {\n if (styles != null && typeof styles !== 'object') {\n throw new Error('The `style` prop expects a mapping from style properties to values, ' + \"not a string. For example, style={{marginRight: spacing + 'em'}} when \" + 'using JSX.');\n }\n const elementStyle = element.style;\n // without `prevStyles`, just set all values\n if (prevStyles == null) {\n if (styles == null) return;\n for (const styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) continue;\n setValueForStyle(elementStyle, styleName, styles[styleName]);\n }\n return;\n }\n // unset all styles in `prevStyles` that aren't in `styles`\n for (const styleName in prevStyles) {\n if (prevStyles.hasOwnProperty(styleName) && (styles == null || !styles.hasOwnProperty(styleName))) {\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] = '';\n }\n }\n }\n // only assign values from `styles` that are different from `prevStyles`\n if (styles == null) return;\n for (const styleName in styles) {\n const value = styles[styleName];\n if (styles.hasOwnProperty(styleName) && prevStyles[styleName] !== value) {\n setValueForStyle(elementStyle, styleName, value);\n }\n }\n}\nfunction setValueForStyle(elementStyle, styleName, value) {\n const isCustomProperty = styleName.indexOf('--') === 0;\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] = '';\n }\n }\n // custom properties can't be directly assigned\n else if (isCustomProperty) {\n elementStyle.setProperty(styleName, value);\n }\n // numeric values are treated as 'px' unless the style property expects unitless numbers\n else if (typeof value === 'number' && value !== 0 && !isUnitlessNumber(styleName)) {\n elementStyle[styleName] = value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n }\n // everything else can just be assigned\n else {\n if (styleName === 'float') {\n elementStyle.cssFloat = value;\n } else {\n elementStyle[styleName] = ('' + value).trim();\n }\n }\n}\n// CSS properties which accept numbers but are not in units of \"px\".\nconst unitlessNumbers = new Set(['animationIterationCount', 'aspectRatio', 'borderImageOutset', 'borderImageSlice', 'borderImageWidth', 'boxFlex', 'boxFlexGroup', 'boxOrdinalGroup', 'columnCount', 'columns', 'flex', 'flexGrow', 'flexPositive', 'flexShrink', 'flexNegative', 'flexOrder', 'gridArea', 'gridRow', 'gridRowEnd', 'gridRowSpan', 'gridRowStart', 'gridColumn', 'gridColumnEnd', 'gridColumnSpan', 'gridColumnStart', 'fontWeight', 'lineClamp', 'lineHeight', 'opacity', 'order', 'orphans', 'scale', 'tabSize', 'widows', 'zIndex', 'zoom', 'fillOpacity',\n// SVG-related properties\n'floodOpacity', 'stopOpacity', 'strokeDasharray', 'strokeDashoffset', 'strokeMiterlimit', 'strokeOpacity', 'strokeWidth']);\nfunction isUnitlessNumber(name) {\n return unitlessNumbers.has(name);\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * Internally used to bind events to Maps JavaScript API objects.\n * @internal\n */\nfunction useMapsEventListener(target, name, callback) {\n useEffect(() => {\n if (!target || !name || !callback) return;\n const listener = google.maps.event.addListener(target, name, callback);\n return () => listener.remove();\n }, [target, name, callback]);\n}\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 */\nfunction usePropBinding(object, prop, value) {\n useEffect(() => {\n if (!object) return;\n object[prop] = value;\n }, [object, prop, value]);\n}\n\n/* eslint-disable complexity */\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 */\nconst 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};\nconst AdvancedMarkerContext = React.createContext(null);\nfunction useAdvancedMarker(props) {\n const [marker, setMarker] = useState(null);\n const [contentContainer, setContentContainer] = useState(null);\n const prevStyleRef = useRef(null);\n const map = useMap();\n const markerLibrary = useMapsLibrary('marker');\n const {\n children,\n className,\n style,\n onClick,\n onDrag,\n onDragStart,\n onDragEnd,\n collisionBehavior,\n clickable,\n draggable,\n position,\n title,\n zIndex\n } = props;\n const numChildren = Children.count(children);\n // create an AdvancedMarkerElement instance and add it to the map once available\n useEffect(() => {\n if (!map || !markerLibrary) return;\n const newMarker = new markerLibrary.AdvancedMarkerElement();\n newMarker.map = map;\n setMarker(newMarker);\n // create the container for marker content if there are children\n let contentElement = null;\n if (numChildren > 0) {\n contentElement = document.createElement('div');\n newMarker.content = contentElement;\n setContentContainer(contentElement);\n }\n return () => {\n var _contentElement;\n newMarker.map = null;\n (_contentElement = contentElement) == null || _contentElement.remove();\n setMarker(null);\n setContentContainer(null);\n };\n }, [map, markerLibrary, numChildren]);\n // update className and styles of marker.content element\n useEffect(() => {\n if (!marker || !marker.content) return;\n marker.content.className = className || '';\n }, [marker, className]);\n usePropBinding(contentContainer, 'className', className != null ? className : '');\n useEffect(() => {\n if (!contentContainer) return;\n setValueForStyles(contentContainer, style || null, prevStyleRef.current);\n prevStyleRef.current = style || null;\n }, [contentContainer, className, style]);\n // copy other props\n usePropBinding(marker, 'position', position);\n usePropBinding(marker, 'title', title != null ? title : '');\n usePropBinding(marker, 'zIndex', zIndex);\n usePropBinding(marker, 'collisionBehavior', collisionBehavior);\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 if (draggable !== undefined) marker.gmpDraggable = draggable;else if (onDrag || onDragStart || onDragEnd) marker.gmpDraggable = true;else marker.gmpDraggable = false;\n }, [marker, draggable, onDrag, onDragEnd, onDragStart]);\n // set gmpClickable from props (when unspecified, it's true if the onClick event\n // callback is specified)\n useEffect(() => {\n if (!marker) return;\n if (clickable !== undefined) marker.gmpClickable = clickable;else if (onClick) marker.gmpClickable = true;else marker.gmpClickable = false;\n }, [marker, clickable, onClick]);\n useMapsEventListener(marker, 'click', onClick);\n useMapsEventListener(marker, 'drag', onDrag);\n useMapsEventListener(marker, 'dragstart', onDragStart);\n useMapsEventListener(marker, 'dragend', onDragEnd);\n return [marker, contentContainer];\n}\nconst AdvancedMarker = forwardRef((props, ref) => {\n const {\n children\n } = props;\n const [marker, contentContainer] = useAdvancedMarker(props);\n const advancedMarkerContextValue = useMemo(() => marker ? {\n marker\n } : null, [marker]);\n useImperativeHandle(ref, () => marker, [marker]);\n if (!contentContainer) return null;\n return /*#__PURE__*/React.createElement(AdvancedMarkerContext.Provider, {\n value: advancedMarkerContextValue\n }, createPortal(children, contentContainer));\n});\nfunction useAdvancedMarkerRef() {\n const [marker, setMarker] = useState(null);\n const refCallback = useCallback(m => {\n setMarker(m);\n }, []);\n return [refCallback, marker];\n}\n\nconst _excluded$1 = [\"children\", \"headerContent\", \"style\", \"className\", \"pixelOffset\", \"anchor\", \"shouldFocus\", \"onClose\", \"onCloseClick\"];\n/**\n * Component to render an Info Window with the Maps JavaScript API\n */\nconst InfoWindow = props => {\n const {\n // content options\n children,\n headerContent,\n style,\n className,\n pixelOffset,\n // open options\n anchor,\n shouldFocus,\n // events\n onClose,\n onCloseClick\n // other options\n } = props,\n infoWindowOptions = _objectWithoutPropertiesLoose(props, _excluded$1);\n // ## create infowindow instance once the mapsLibrary is available.\n const mapsLibrary = useMapsLibrary('maps');\n const [infoWindow, setInfoWindow] = useState(null);\n const contentContainerRef = useRef(null);\n const headerContainerRef = useRef(null);\n useEffect(() => {\n if (!mapsLibrary) return;\n contentContainerRef.current = document.createElement('div');\n headerContainerRef.current = document.createElement('div');\n const opts = infoWindowOptions;\n if (pixelOffset) {\n opts.pixelOffset = new google.maps.Size(pixelOffset[0], pixelOffset[1]);\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 = typeof headerContent === 'string' ? headerContent : headerContainerRef.current;\n }\n // intentionally shadowing the state variables here\n const infoWindow = new google.maps.InfoWindow(infoWindowOptions);\n infoWindow.setContent(contentContainerRef.current);\n setInfoWindow(infoWindow);\n // unmount: remove infoWindow and content elements (note: close is called in a different effect-cleanup)\n return () => {\n var _contentContainerRef$, _headerContainerRef$c;\n infoWindow.setContent(null);\n (_contentContainerRef$ = contentContainerRef.current) == null || _contentContainerRef$.remove();\n (_headerContainerRef$c = headerContainerRef.current) == null || _headerContainerRef$c.remove();\n contentContainerRef.current = null;\n headerContainerRef.current = null;\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 // ## update className and styles for `contentContainer`\n // stores previously applied style properties, so they can be removed when unset\n const prevStyleRef = useRef(null);\n useEffect(() => {\n if (!infoWindow || !contentContainerRef.current) return;\n setValueForStyles(contentContainerRef.current, style || null, prevStyleRef.current);\n prevStyleRef.current = style || null;\n if (className !== contentContainerRef.current.className) contentContainerRef.current.className = className || '';\n }, [infoWindow, className, style]);\n // ## update options\n useDeepCompareEffect(() => {\n if (!infoWindow) return;\n const opts = infoWindowOptions;\n if (!pixelOffset) {\n opts.pixelOffset = null;\n } else {\n opts.pixelOffset = new google.maps.Size(pixelOffset[0], pixelOffset[1]);\n }\n if (!headerContent) {\n opts.headerContent = null;\n } else {\n opts.headerContent = typeof headerContent === 'string' ? headerContent : headerContainerRef.current;\n }\n infoWindow.setOptions(infoWindowOptions);\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 // ## bind event handlers\n useMapsEventListener(infoWindow, 'close', onClose);\n useMapsEventListener(infoWindow, 'closeclick', onCloseClick);\n // ## open info window when content and map are available\n const map = useMap();\n useEffect(() => {\n // `anchor === null` means an anchor is defined but not ready yet.\n if (!map || !infoWindow || anchor === null) return;\n const isOpenedWithAnchor = !!anchor;\n const openOptions = {\n map\n };\n if (anchor) {\n openOptions.anchor = anchor;\n }\n if (shouldFocus !== undefined) {\n openOptions.shouldFocus = shouldFocus;\n }\n infoWindow.open(openOptions);\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 infoWindow.close();\n };\n }, [infoWindow, anchor, map, shouldFocus]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, contentContainerRef.current && createPortal(children, contentContainerRef.current), headerContainerRef.current !== null && createPortal(headerContent, headerContainerRef.current));\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 */\nconst 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};\nconst MapControl = ({\n children,\n position\n}) => {\n const controlContainer = useMemo(() => document.createElement('div'), []);\n const map = useMap();\n useEffect(() => {\n if (!map) return;\n const controls = map.controls[position];\n controls.push(controlContainer);\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 const index = controlsArray.indexOf(controlContainer);\n controls.removeAt(index);\n };\n }, [controlContainer, map, position]);\n return createPortal(children, controlContainer);\n};\n\nconst _excluded = [\"onClick\", \"onDrag\", \"onDragStart\", \"onDragEnd\", \"onMouseOver\", \"onMouseOut\"];\nfunction useMarker(props) {\n const [marker, setMarker] = useState(null);\n const map = useMap();\n const {\n onClick,\n onDrag,\n onDragStart,\n onDragEnd,\n onMouseOver,\n onMouseOut\n } = props,\n markerOptions = _objectWithoutPropertiesLoose(props, _excluded);\n const {\n position,\n draggable\n } = markerOptions;\n // create marker instance and add to the map once the map is available\n useEffect(() => {\n if (!map) {\n if (map === undefined) console.error('<Marker> has to be inside a Map component.');\n return;\n }\n const newMarker = new google.maps.Marker(markerOptions);\n newMarker.setMap(map);\n setMarker(newMarker);\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 // attach and re-attach event-handlers when any of the properties change\n useEffect(() => {\n if (!marker) return;\n const m = marker;\n // Add event listeners\n const gme = google.maps.event;\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 marker.setDraggable(Boolean(draggable));\n return () => {\n gme.clearInstanceListeners(m);\n };\n }, [marker, draggable, onClick, onDrag, onDragStart, onDragEnd, onMouseOver, onMouseOut]);\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 // update position when changed\n useEffect(() => {\n // Should not update position when draggable\n if (draggable || !position || !marker) return;\n marker.setPosition(position);\n }, [draggable, position, marker]);\n return marker;\n}\n/**\n * Component to render a marker on a map\n */\nconst Marker = forwardRef((props, ref) => {\n const marker = useMarker(props);\n useImperativeHandle(ref, () => marker, [marker]);\n return /*#__PURE__*/React.createElement(React.Fragment, null);\n});\nfunction useMarkerRef() {\n const [marker, setMarker] = useState(null);\n const refCallback = useCallback(m => {\n setMarker(m);\n }, []);\n return [refCallback, marker];\n}\n\n/**\n * Component to configure the appearance of an AdvancedMarker\n */\nconst Pin = props => {\n var _useContext;\n const advancedMarker = (_useContext = useContext(AdvancedMarkerContext)) == null ? void 0 : _useContext.marker;\n const glyphContainer = useMemo(() => document.createElement('div'), []);\n // Create Pin View instance\n useEffect(() => {\n if (!advancedMarker) {\n if (advancedMarker === undefined) {\n console.error('The <Pin> component can only be used inside <AdvancedMarker>.');\n }\n return;\n }\n if (props.glyph && props.children) {\n logErrorOnce('The <Pin> component only uses children to render the glyph if both the glyph property and children are present.');\n }\n if (Children.count(props.children) > 1) {\n logErrorOnce('Passing multiple children to the <Pin> component might lead to unexpected results.');\n }\n const pinViewOptions = _extends({}, props);\n const pinElement = new google.maps.marker.PinElement(pinViewOptions);\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 // Set content of Advanced Marker View to the Pin View element\n advancedMarker.content = pinElement.element;\n }, [advancedMarker, glyphContainer, props]);\n return createPortal(props.children, glyphContainer);\n};\n\nconst mapLinear = (x, a1, a2, b1, b2) => b1 + (x - a1) * (b2 - b1) / (a2 - a1);\nconst getMapMaxTilt = zoom => {\n if (zoom <= 10) {\n return 30;\n }\n if (zoom >= 15.5) {\n return 67.5;\n }\n // range [10...14]\n if (zoom <= 14) {\n return mapLinear(zoom, 10, 14, 30, 45);\n }\n // range [14...15.5]\n return mapLinear(zoom, 14, 15.5, 45, 67.5);\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\nconst limitTiltRange = ({\n viewState\n}) => {\n const pitch = viewState.pitch;\n const gmZoom = viewState.zoom + 1;\n const maxTilt = getMapMaxTilt(gmZoom);\n return _extends({}, viewState, {\n fovy: 25,\n pitch: Math.min(maxTilt, pitch)\n });\n};\n\nexport { APILoadingStatus, APIProvider, APIProviderContext, AdvancedMarker, AdvancedMarkerContext, CollisionBehavior, ControlPosition, GoogleMapsContext, InfoWindow, Map, MapControl, Marker, Pin, isLatLngLiteral, latLngEquals, limitTiltRange, toLatLngLiteral, useAdvancedMarkerRef, useApiIsLoaded, useApiLoadingStatus, useMap, useMapsLibrary, useMarkerRef };\n//# sourceMappingURL=index.modern.mjs.map\n"],"names":["module","exports","equal","a","b","constructor","length","i","keys","Array","isArray","RegExp","source","flags","valueOf","Object","prototype","toString","hasOwnProperty","call","key","_toPropertyKey","t","r","e","Symbol","toPrimitive","TypeError","String","Number","_toPrimitive","_extends","assign","bind","target","arguments","apply","this","_objectWithoutPropertiesLoose","excluded","sourceKeys","indexOf","APILoadingStatus","NOT_LOADED","LOADING","LOADED","FAILED","AUTH_FAILURE","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","language","region","authReferrerPolicy","solutionChannel","join","error","apiPromise","loadApi","resolve","reject","_document$querySelect","scriptElement","document","createElement","urlParams","URLSearchParams","value","entries","urlParamName","replace","toLowerCase","set","async","src","MAPS_API_BASE_URL","nonce","querySelector","onerror","Error","__googleMapsCallback__","gm_authFailure","head","append","libraryName","then","fn","_excluded$3","_excluded2$1","APIProviderContext","APIProvider","props","children","loaderProps","mapInstances","addMapInstance","removeMapInstance","clearMapInstances","setMapInstances","useState","mapInstance","id","instances","_ref","useMapInstances","status","loadedLibraries","onLoad","apiKey","version","otherApiParams","setStatus","addLoadedLibrary","useReducer","action","librariesString","useMemo","JSON","stringify","useCallback","_google","res","useEffect","undefined","useGoogleMapsApiLoader","contextValue","Provider","createMapEvent","type","srcEvent","ev","detail","stoppable","stop","cameraEventTypes","includes","camEvent","center","getCenter","zoom","getZoom","heading","getHeading","tilt","getTilt","bounds","getBounds","isFinite","toJSON","lat","lng","north","east","south","west","mouseEventTypes","_srcEvent$latLng","mouseEvent","domEvent","latLng","placeId","propNameToEventType","onBoundsChanged","onCenterChanged","onClick","onContextmenu","onDblclick","onDrag","onDragend","onDragstart","onHeadingChanged","onIdle","onIsFractionalZoomEnabledChanged","onMapCapabilitiesChanged","onMapTypeIdChanged","onMousemove","onMouseout","onMouseover","onProjectionChanged","onRenderingTypeChanged","onTilesLoaded","onTiltChanged","onZoomChanged","onCameraChanged","eventPropNames","useDeepCompareEffect","effect","deps","ref","useRef","current","mapOptionKeys","Set","useApiLoadingStatus","_useContext","useContext","toLatLngLiteral","obj","isLatLngLiteral","AuthFailureMessage","style","position","top","left","bottom","right","zIndex","display","flexFlow","textAlign","justifyContent","fontSize","color","background","padding","useApiIsLoaded","useTrackedCameraStateRef","forceUpdate","x","useForceUpdate","listener","event","addListener","handleBoundsChange","remove","_excluded$2","_excluded2","CachedMapStack","has","pop","useMapInstance","context","apiIsLoaded","setMap","container","containerRef","el","setEl","useCallbackRef","cameraStateRef","defaultBounds","defaultCenter","defaultZoom","defaultHeading","defaultTilt","reuseMaps","mapOptions","hasZoom","hasCenter","savedMapStateRef","mapId","cacheKey","mapDiv","getDiv","appendChild","setOptions","setTimeout","setCenter","height","Map","defBounds","fitBounds","savedMapId","cameraState","savedCameraState","clearInstanceListeners","GoogleMapsContext","className","mapRef","mapProps","useLayoutEffect","nextCamera","needsUpdate","moveCamera","useMapCameraParams","propName","handler","eventType","useMapEvents","useMapOptions","isDeckGlControlled","viewport","viewState","latitude","longitude","bearing","pitch","useDeckGLCameraUpdate","isControlledExternally","controlled","disableDefaultUI","gestureHandling","keyboardShortcuts","cameraOptions","_lat","_lng","_props$zoom","_props$heading","_props$tilt","combinedStyle","width","deckGLViewProps","shownMessages","logErrorOnce","args","add","useMap","ctx","useMapsLibrary","setValueForStyles","element","styles","prevStyles","elementStyle","styleName","setProperty","cssFloat","setValueForStyle","isCustomProperty","unitlessNumbers","trim","useMapsEventListener","callback","usePropBinding","object","prop","AdvancedMarkerContext","AdvancedMarker","forwardRef","marker","contentContainer","setMarker","setContentContainer","prevStyleRef","markerLibrary","onDragStart","onDragEnd","collisionBehavior","clickable","draggable","title","numChildren","Children","count","newMarker","AdvancedMarkerElement","contentElement","content","_contentElement","gmpDraggable","gmpClickable","useAdvancedMarker","advancedMarkerContextValue","useImperativeHandle","createPortal","useAdvancedMarkerRef","m","_excluded$1","InfoWindow","headerContent","pixelOffset","anchor","shouldFocus","onClose","onCloseClick","infoWindowOptions","mapsLibrary","infoWindow","setInfoWindow","contentContainerRef","headerContainerRef","opts","Size","setContent","_contentContainerRef$","_headerContainerRef$c","isOpenedWithAnchor","openOptions","open","close","_excluded","onMouseOver","onMouseOut","markerOptions","Marker","gme","setDraggable","Boolean","setPosition","useMarker","Pin","advancedMarker","glyphContainer","glyph","pinViewOptions","pinElement","PinElement"],"sourceRoot":""}