{"version":3,"sources":["jsdelivr-header.js","/npm/@flossyweb/capacitor-google-maps@7.0.1/dist/esm/implementation.js","/npm/@flossyweb/capacitor-google-maps@7.0.1/dist/esm/definitions.js","/npm/@flossyweb/capacitor-google-maps@7.0.1/dist/esm/map.js","/npm/@flossyweb/capacitor-google-maps@7.0.1/dist/esm/web.js"],"names":[],"mappings":"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","file":"/npm/@flossyweb/capacitor-google-maps@7.0.1/dist/plugin.cjs.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@flossyweb/capacitor-google-maps@7.0.1/dist/plugin.cjs.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import { registerPlugin } from '@capacitor/core';\nconst CapacitorGoogleMaps = registerPlugin('CapacitorGoogleMaps', {\n    web: () => import('./web').then(m => new m.CapacitorGoogleMapsWeb()),\n});\nCapacitorGoogleMaps.addListener('isMapInFocus', data => {\n    var _a;\n    const x = data.x;\n    const y = data.y;\n    const elem = document.elementFromPoint(x, y);\n    const internalId = (_a = elem === null || elem === void 0 ? void 0 : elem.dataset) === null || _a === void 0 ? void 0 : _a.internalId;\n    const mapInFocus = internalId === data.mapId;\n    CapacitorGoogleMaps.dispatchMapEvent({ id: data.mapId, focus: mapInFocus });\n});\nexport { CapacitorGoogleMaps };\n//# sourceMappingURL=implementation.js.map","import { CapacitorGoogleMaps } from './implementation';\nexport class LatLngBounds {\n    constructor(bounds) {\n        this.southwest = bounds.southwest;\n        this.center = bounds.center;\n        this.northeast = bounds.northeast;\n    }\n    async contains(point) {\n        const result = await CapacitorGoogleMaps.mapBoundsContains({\n            bounds: this,\n            point,\n        });\n        return result['contains'];\n    }\n    async extend(point) {\n        const result = await CapacitorGoogleMaps.mapBoundsExtend({\n            bounds: this,\n            point,\n        });\n        this.southwest = result['bounds']['southwest'];\n        this.center = result['bounds']['center'];\n        this.northeast = result['bounds']['northeast'];\n        return this;\n    }\n}\nexport var MapType;\n(function (MapType) {\n    /**\n     * Basic map.\n     */\n    MapType[\"Normal\"] = \"Normal\";\n    /**\n     * Satellite imagery with roads and labels.\n     */\n    MapType[\"Hybrid\"] = \"Hybrid\";\n    /**\n     * Satellite imagery with no labels.\n     */\n    MapType[\"Satellite\"] = \"Satellite\";\n    /**\n     * Topographic data.\n     */\n    MapType[\"Terrain\"] = \"Terrain\";\n    /**\n     * No base map tiles.\n     */\n    MapType[\"None\"] = \"None\";\n})(MapType || (MapType = {}));\n//# sourceMappingURL=definitions.js.map","import { Capacitor } from '@capacitor/core';\nimport { LatLngBounds, MapType } from './definitions';\nimport { CapacitorGoogleMaps } from './implementation';\nclass MapCustomElement extends HTMLElement {\n    constructor() {\n        super();\n    }\n    connectedCallback() {\n        this.innerHTML = '';\n        if (Capacitor.getPlatform() == 'ios') {\n            this.style.overflow = 'scroll';\n            this.style['-webkit-overflow-scrolling'] = 'touch';\n            const overflowDiv = document.createElement('div');\n            overflowDiv.style.height = '200%';\n            this.appendChild(overflowDiv);\n        }\n    }\n}\ncustomElements.define('capacitor-google-map', MapCustomElement);\nexport class GoogleMap {\n    constructor(id) {\n        this.element = null;\n        this.resizeObserver = null;\n        this.handleScrollEvent = () => this.updateMapBounds();\n        this.id = id;\n    }\n    /**\n     * Creates a new instance of a Google Map\n     * @param options\n     * @param callback\n     * @returns GoogleMap\n     */\n    static async create(options, callback) {\n        const newMap = new GoogleMap(options.id);\n        if (!options.element) {\n            throw new Error('container element is required');\n        }\n        if (options.config.androidLiteMode === undefined) {\n            options.config.androidLiteMode = false;\n        }\n        newMap.element = options.element;\n        newMap.element.dataset.internalId = options.id;\n        const elementBounds = await GoogleMap.getElementBounds(options.element);\n        options.config.width = elementBounds.width;\n        options.config.height = elementBounds.height;\n        options.config.x = elementBounds.x;\n        options.config.y = elementBounds.y;\n        options.config.devicePixelRatio = window.devicePixelRatio;\n        if (Capacitor.getPlatform() == 'android') {\n            newMap.initScrolling();\n        }\n        if (Capacitor.isNativePlatform()) {\n            options.element = {};\n            const getMapBounds = () => {\n                var _a, _b;\n                const mapRect = (_b = (_a = newMap.element) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect()) !== null && _b !== void 0 ? _b : {};\n                return {\n                    x: mapRect.x,\n                    y: mapRect.y,\n                    width: mapRect.width,\n                    height: mapRect.height,\n                };\n            };\n            const onDisplay = () => {\n                CapacitorGoogleMaps.onDisplay({\n                    id: newMap.id,\n                    mapBounds: getMapBounds(),\n                });\n            };\n            const onResize = () => {\n                CapacitorGoogleMaps.onResize({\n                    id: newMap.id,\n                    mapBounds: getMapBounds(),\n                });\n            };\n            const ionicPage = newMap.element.closest('.ion-page');\n            if (Capacitor.getPlatform() === 'ios' && ionicPage) {\n                ionicPage.addEventListener('ionViewWillEnter', () => {\n                    setTimeout(() => {\n                        onDisplay();\n                    }, 100);\n                });\n                ionicPage.addEventListener('ionViewDidEnter', () => {\n                    setTimeout(() => {\n                        onDisplay();\n                    }, 100);\n                });\n            }\n            const lastState = {\n                width: elementBounds.width,\n                height: elementBounds.height,\n                isHidden: false,\n            };\n            newMap.resizeObserver = new ResizeObserver(() => {\n                if (newMap.element != null) {\n                    const mapRect = newMap.element.getBoundingClientRect();\n                    const isHidden = mapRect.width === 0 && mapRect.height === 0;\n                    if (!isHidden) {\n                        if (lastState.isHidden) {\n                            if (Capacitor.getPlatform() === 'ios' && !ionicPage) {\n                                onDisplay();\n                            }\n                        }\n                        else if (lastState.width !== mapRect.width ||\n                            lastState.height !== mapRect.height) {\n                            onResize();\n                        }\n                    }\n                    lastState.width = mapRect.width;\n                    lastState.height = mapRect.height;\n                    lastState.isHidden = isHidden;\n                }\n            });\n            newMap.resizeObserver.observe(newMap.element);\n        }\n        // small delay to allow for iOS WKWebView to setup corresponding element sub-scroll views ???\n        await new Promise((resolve, reject) => {\n            setTimeout(async () => {\n                try {\n                    await CapacitorGoogleMaps.create(options);\n                    resolve(undefined);\n                }\n                catch (err) {\n                    reject(err);\n                }\n            }, 200);\n        });\n        if (callback) {\n            const onMapReadyListener = await CapacitorGoogleMaps.addListener('onMapReady', (data) => {\n                if (data.mapId == newMap.id) {\n                    callback(data);\n                    onMapReadyListener.remove();\n                }\n            });\n        }\n        return newMap;\n    }\n    static async getElementBounds(element) {\n        return new Promise(resolve => {\n            let elementBounds = element.getBoundingClientRect();\n            if (elementBounds.width == 0) {\n                let retries = 0;\n                const boundsInterval = setInterval(function () {\n                    if (elementBounds.width == 0 && retries < 30) {\n                        elementBounds = element.getBoundingClientRect();\n                        retries++;\n                    }\n                    else {\n                        if (retries == 30) {\n                            console.warn('Map size could not be determined');\n                        }\n                        clearInterval(boundsInterval);\n                        resolve(elementBounds);\n                    }\n                }, 100);\n            }\n            else {\n                resolve(elementBounds);\n            }\n        });\n    }\n    /**\n     * Enable touch events on native map\n     *\n     * @returns void\n     */\n    async enableTouch() {\n        return CapacitorGoogleMaps.enableTouch({\n            id: this.id,\n        });\n    }\n    /**\n     * Disable touch events on native map\n     *\n     * @returns void\n     */\n    async disableTouch() {\n        return CapacitorGoogleMaps.disableTouch({\n            id: this.id,\n        });\n    }\n    /**\n     * Enable marker clustering\n     *\n     * @param minClusterSize - The minimum number of markers that can be clustered together.\n     * @defaultValue 4\n     *\n     * @returns void\n     */\n    async enableClustering(minClusterSize) {\n        return CapacitorGoogleMaps.enableClustering({\n            id: this.id,\n            minClusterSize,\n        });\n    }\n    /**\n     * Disable marker clustering\n     *\n     * @returns void\n     */\n    async disableClustering() {\n        return CapacitorGoogleMaps.disableClustering({\n            id: this.id,\n        });\n    }\n    /**\n     * Adds a marker to the map\n     *\n     * @param marker\n     * @returns created marker id\n     */\n    async addMarker(marker) {\n        const res = await CapacitorGoogleMaps.addMarker({\n            id: this.id,\n            marker,\n        });\n        return res.id;\n    }\n    /**\n     * Updates the map options.\n     *\n     * @param options The options to update.\n     */\n    async updateMapOptions(options) {\n        await CapacitorGoogleMaps.updateMapOptions({\n            id: this.id,\n            options,\n        });\n    }\n    /**\n     * Adds a ground overlay to the map\n     *\n     * @param overlay\n     * @returns created ground overlay id\n     */\n    async addGroundOverlay(overlay) {\n        // Remove all existing ground overlays\n        // await this.removeAllGroundOverlays();\n        const res = await CapacitorGoogleMaps.addGroundOverlay({\n            id: this.id,\n            overlay,\n        });\n        return res.id;\n    }\n    async addTileLayer(tileLayer) {\n        const res = await CapacitorGoogleMaps.addTileLayer({\n            id: this.id,\n            tileLayer,\n        });\n        return res.id;\n    }\n    async removeTileLayer(tileId) {\n        return CapacitorGoogleMaps.removeTileLayer({\n            id: this.id,\n            tileId: tileId\n        });\n    }\n    async removeAllTileLayers(tileId) {\n        return CapacitorGoogleMaps.removeAllTileLayers({\n            id: this.id,\n            tileId: tileId\n        });\n    }\n    async setTileLayerOpacity(opacity) {\n        return CapacitorGoogleMaps.setTileLayerOpacity({\n            id: this.id,\n            opacity\n        });\n    }\n    async addOrUpdateGroundOverlay(overlay) {\n        const res = await CapacitorGoogleMaps.addOrUpdateGroundOverlay({\n            id: this.id,\n            overlay,\n        });\n        return res.id;\n    }\n    async addMultipleGroundOverlays(overlays) {\n        const res = await CapacitorGoogleMaps.addMultipleGroundOverlays({\n            id: this.id,\n            overlays,\n        });\n        return res === null || res === void 0 ? void 0 : res.id; // Only returning one ID, similar to the previous behavior\n    }\n    /**\n     * Sets the opacity of the current ground overlay.\n     *\n     * @param opacity The opacity value (0.0 - 1.0).\n     */\n    async setOverlayOpacity(opacity) {\n        await CapacitorGoogleMaps.setOverlayOpacity({\n            id: this.id,\n            opacity,\n        });\n    }\n    /**\n     * Remove ground overlay from the map\n     *\n     * @param id id of the ground overlay to remove from the map\n     * @returns\n     */\n    async removeGroundOverlay(id) {\n        return CapacitorGoogleMaps.removeGroundOverlay({\n            id: this.id,\n            overlayId: id,\n        });\n    }\n    /**\n     * Remove all ground overlays from the map\n     */\n    async removeAllGroundOverlays() {\n        return CapacitorGoogleMaps.removeAllGroundOverlays({\n            id: this.id,\n        });\n    }\n    async setCurrentOverlayImage(imageUrl, opacity) {\n        return CapacitorGoogleMaps.setCurrentOverlayImage({\n            id: this.id,\n            imageUrl,\n            opacity,\n        });\n    }\n    /**\n     * Adds multiple markers to the map\n     *\n     * @param markers\n     * @returns array of created marker IDs\n     */\n    async addMarkers(markers) {\n        const res = await CapacitorGoogleMaps.addMarkers({\n            id: this.id,\n            markers,\n        });\n        return res.ids;\n    }\n    /**\n     * Remove marker from the map\n     *\n     * @param id id of the marker to remove from the map\n     * @returns\n     */\n    async removeMarker(id) {\n        return CapacitorGoogleMaps.removeMarker({\n            id: this.id,\n            markerId: id,\n        });\n    }\n    /**\n     * Remove markers from the map\n     *\n     * @param ids array of ids to remove from the map\n     * @returns\n     */\n    async removeMarkers(ids) {\n        return CapacitorGoogleMaps.removeMarkers({\n            id: this.id,\n            markerIds: ids,\n        });\n    }\n    async addPolygons(polygons) {\n        const res = await CapacitorGoogleMaps.addPolygons({\n            id: this.id,\n            polygons,\n        });\n        return res.ids;\n    }\n    async addPolylines(polylines) {\n        const res = await CapacitorGoogleMaps.addPolylines({\n            id: this.id,\n            polylines,\n        });\n        return res.ids;\n    }\n    async removePolygons(ids) {\n        return CapacitorGoogleMaps.removePolygons({\n            id: this.id,\n            polygonIds: ids,\n        });\n    }\n    async addCircles(circles) {\n        const res = await CapacitorGoogleMaps.addCircles({\n            id: this.id,\n            circles,\n        });\n        return res.ids;\n    }\n    async removeCircles(ids) {\n        return CapacitorGoogleMaps.removeCircles({\n            id: this.id,\n            circleIds: ids,\n        });\n    }\n    async removePolylines(ids) {\n        return CapacitorGoogleMaps.removePolylines({\n            id: this.id,\n            polylineIds: ids,\n        });\n    }\n    /**\n     * Destroy the current instance of the map\n     */\n    async destroy() {\n        var _a;\n        if (Capacitor.getPlatform() == 'android') {\n            this.disableScrolling();\n        }\n        if (Capacitor.isNativePlatform()) {\n            (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\n        }\n        this.removeAllMapListeners();\n        return CapacitorGoogleMaps.destroy({\n            id: this.id,\n        });\n    }\n    /**\n     * Update the map camera configuration\n     *\n     * @param config\n     * @returns\n     */\n    async setCamera(config) {\n        return CapacitorGoogleMaps.setCamera({\n            id: this.id,\n            config,\n        });\n    }\n    async getMapType() {\n        const { type } = await CapacitorGoogleMaps.getMapType({ id: this.id });\n        return MapType[type];\n    }\n    /**\n     * Sets the type of map tiles that should be displayed.\n     *\n     * @param mapType\n     * @returns\n     */\n    async setMapType(mapType) {\n        return CapacitorGoogleMaps.setMapType({\n            id: this.id,\n            mapType,\n        });\n    }\n    /**\n     * Sets whether indoor maps are shown, where available.\n     *\n     * @param enabled\n     * @returns\n     */\n    async enableIndoorMaps(enabled) {\n        return CapacitorGoogleMaps.enableIndoorMaps({\n            id: this.id,\n            enabled,\n        });\n    }\n    /**\n     * Controls whether the map is drawing traffic data, if available.\n     *\n     * @param enabled\n     * @returns\n     */\n    async enableTrafficLayer(enabled) {\n        return CapacitorGoogleMaps.enableTrafficLayer({\n            id: this.id,\n            enabled,\n        });\n    }\n    /**\n     * Show accessibility elements for overlay objects, such as Marker and Polyline.\n     *\n     * Only available on iOS.\n     *\n     * @param enabled\n     * @returns\n     */\n    async enableAccessibilityElements(enabled) {\n        return CapacitorGoogleMaps.enableAccessibilityElements({\n            id: this.id,\n            enabled,\n        });\n    }\n    /**\n     * Set whether the My Location dot and accuracy circle is enabled.\n     *\n     * @param enabled\n     * @returns\n     */\n    async enableCurrentLocation(enabled) {\n        return CapacitorGoogleMaps.enableCurrentLocation({\n            id: this.id,\n            enabled,\n        });\n    }\n    /**\n     * Set padding on the 'visible' region of the view.\n     *\n     * @param padding\n     * @returns\n     */\n    async setPadding(padding) {\n        return CapacitorGoogleMaps.setPadding({\n            id: this.id,\n            padding,\n        });\n    }\n    /**\n     * Get the map's current viewport latitude and longitude bounds.\n     *\n     * @returns {LatLngBounds}\n     */\n    async getMapBounds() {\n        return new LatLngBounds(await CapacitorGoogleMaps.getMapBounds({\n            id: this.id,\n        }));\n    }\n    async fitBounds(bounds, padding) {\n        return CapacitorGoogleMaps.fitBounds({\n            id: this.id,\n            bounds,\n            padding,\n        });\n    }\n    initScrolling() {\n        const ionContents = document.getElementsByTagName('ion-content');\n        // eslint-disable-next-line @typescript-eslint/prefer-for-of\n        for (let i = 0; i < ionContents.length; i++) {\n            ionContents[i].scrollEvents = true;\n        }\n        window.addEventListener('ionScroll', this.handleScrollEvent);\n        window.addEventListener('scroll', this.handleScrollEvent);\n        window.addEventListener('resize', this.handleScrollEvent);\n        if (screen.orientation) {\n            screen.orientation.addEventListener('change', () => {\n                setTimeout(this.updateMapBounds, 500);\n            });\n        }\n        else {\n            window.addEventListener('orientationchange', () => {\n                setTimeout(this.updateMapBounds, 500);\n            });\n        }\n    }\n    disableScrolling() {\n        window.removeEventListener('ionScroll', this.handleScrollEvent);\n        window.removeEventListener('scroll', this.handleScrollEvent);\n        window.removeEventListener('resize', this.handleScrollEvent);\n        if (screen.orientation) {\n            screen.orientation.removeEventListener('change', () => {\n                setTimeout(this.updateMapBounds, 1000);\n            });\n        }\n        else {\n            window.removeEventListener('orientationchange', () => {\n                setTimeout(this.updateMapBounds, 1000);\n            });\n        }\n    }\n    updateMapBounds() {\n        if (this.element) {\n            const mapRect = this.element.getBoundingClientRect();\n            CapacitorGoogleMaps.onScroll({\n                id: this.id,\n                mapBounds: {\n                    x: mapRect.x,\n                    y: mapRect.y,\n                    width: mapRect.width,\n                    height: mapRect.height,\n                },\n            });\n        }\n    }\n    /*\n    private findContainerElement(): HTMLElement | null {\n      if (!this.element) {\n        return null;\n      }\n  \n      let parentElement = this.element.parentElement;\n      while (parentElement !== null) {\n        if (window.getComputedStyle(parentElement).overflowY !== 'hidden') {\n          return parentElement;\n        }\n  \n        parentElement = parentElement.parentElement;\n      }\n  \n      return null;\n    }\n    */\n    /**\n     * Set the event listener on the map for 'onCameraIdle' events.\n     *\n     * @param callback\n     * @returns\n     */\n    async setOnCameraIdleListener(callback) {\n        if (this.onCameraIdleListener) {\n            this.onCameraIdleListener.remove();\n        }\n        if (callback) {\n            this.onCameraIdleListener = await CapacitorGoogleMaps.addListener('onCameraIdle', this.generateCallback(callback));\n        }\n        else {\n            this.onCameraIdleListener = undefined;\n        }\n    }\n    /**\n     * Set the event listener on the map for 'onBoundsChanged' events.\n     *\n     * @param callback\n     * @returns\n     */\n    async setOnBoundsChangedListener(callback) {\n        if (this.onBoundsChangedListener) {\n            this.onBoundsChangedListener.remove();\n        }\n        if (callback) {\n            this.onBoundsChangedListener = await CapacitorGoogleMaps.addListener('onBoundsChanged', this.generateCallback(callback));\n        }\n        else {\n            this.onBoundsChangedListener = undefined;\n        }\n    }\n    /**\n     * Set the event listener on the map for 'onCameraMoveStarted' events.\n     *\n     * @param callback\n     * @returns\n     */\n    async setOnCameraMoveStartedListener(callback) {\n        if (this.onCameraMoveStartedListener) {\n            this.onCameraMoveStartedListener.remove();\n        }\n        if (callback) {\n            this.onCameraMoveStartedListener = await CapacitorGoogleMaps.addListener('onCameraMoveStarted', this.generateCallback(callback));\n        }\n        else {\n            this.onCameraMoveStartedListener = undefined;\n        }\n    }\n    /**\n     * Set the event listener on the map for 'onClusterClick' events.\n     *\n     * @param callback\n     * @returns\n     */\n    async setOnClusterClickListener(callback) {\n        if (this.onClusterClickListener) {\n            this.onClusterClickListener.remove();\n        }\n        if (callback) {\n            this.onClusterClickListener = await CapacitorGoogleMaps.addListener('onClusterClick', this.generateCallback(callback));\n        }\n        else {\n            this.onClusterClickListener = undefined;\n        }\n    }\n    /**\n     * Set the event listener on the map for 'onClusterInfoWindowClick' events.\n     *\n     * @param callback\n     * @returns\n     */\n    async setOnClusterInfoWindowClickListener(callback) {\n        if (this.onClusterInfoWindowClickListener) {\n            this.onClusterInfoWindowClickListener.remove();\n        }\n        if (callback) {\n            this.onClusterInfoWindowClickListener =\n                await CapacitorGoogleMaps.addListener('onClusterInfoWindowClick', this.generateCallback(callback));\n        }\n        else {\n            this.onClusterInfoWindowClickListener = undefined;\n        }\n    }\n    /**\n     * Set the event listener on the map for 'onInfoWindowClick' events.\n     *\n     * @param callback\n     * @returns\n     */\n    async setOnInfoWindowClickListener(callback) {\n        if (this.onInfoWindowClickListener) {\n            this.onInfoWindowClickListener.remove();\n        }\n        if (callback) {\n            this.onInfoWindowClickListener = await CapacitorGoogleMaps.addListener('onInfoWindowClick', this.generateCallback(callback));\n        }\n        else {\n            this.onInfoWindowClickListener = undefined;\n        }\n    }\n    /**\n     * Set the event listener on the map for 'onMapClick' events.\n     *\n     * @param callback\n     * @returns\n     */\n    async setOnMapClickListener(callback) {\n        if (this.onMapClickListener) {\n            this.onMapClickListener.remove();\n        }\n        if (callback) {\n            this.onMapClickListener = await CapacitorGoogleMaps.addListener('onMapClick', this.generateCallback(callback));\n        }\n        else {\n            this.onMapClickListener = undefined;\n        }\n    }\n    /**\n     * Set the event listener on the map for 'onPolygonClick' events.\n     *\n     * @param callback\n     * @returns\n     */\n    async setOnPolygonClickListener(callback) {\n        if (this.onPolygonClickListener) {\n            this.onPolygonClickListener.remove();\n        }\n        if (callback) {\n            this.onPolygonClickListener = await CapacitorGoogleMaps.addListener('onPolygonClick', this.generateCallback(callback));\n        }\n        else {\n            this.onPolygonClickListener = undefined;\n        }\n    }\n    /**\n     * Set the event listener on the map for 'onCircleClick' events.\n     *\n     * @param callback\n     * @returns\n     */\n    async setOnCircleClickListener(callback) {\n        if (this.onCircleClickListener)\n            [this.onCircleClickListener.remove()];\n        if (callback) {\n            this.onCircleClickListener = await CapacitorGoogleMaps.addListener('onCircleClick', this.generateCallback(callback));\n        }\n        else {\n            this.onCircleClickListener = undefined;\n        }\n    }\n    /**\n     * Set the event listener on the map for 'onMarkerClick' events.\n     *\n     * @param callback\n     * @returns\n     */\n    async setOnMarkerClickListener(callback) {\n        if (this.onMarkerClickListener) {\n            this.onMarkerClickListener.remove();\n        }\n        if (callback) {\n            this.onMarkerClickListener = await CapacitorGoogleMaps.addListener('onMarkerClick', this.generateCallback(callback));\n        }\n        else {\n            this.onMarkerClickListener = undefined;\n        }\n    }\n    /**\n     * Set the event listener on the map for 'onPolylineClick' events.\n     *\n     * @param callback\n     * @returns\n     */\n    async setOnPolylineClickListener(callback) {\n        if (this.onPolylineClickListener) {\n            this.onPolylineClickListener.remove();\n        }\n        if (callback) {\n            this.onPolylineClickListener = await CapacitorGoogleMaps.addListener('onPolylineClick', this.generateCallback(callback));\n        }\n        else {\n            this.onPolylineClickListener = undefined;\n        }\n    }\n    /**\n     * Set the event listener on the map for 'onMarkerDragStart' events.\n     *\n     * @param callback\n     * @returns\n     */\n    async setOnMarkerDragStartListener(callback) {\n        if (this.onMarkerDragStartListener) {\n            this.onMarkerDragStartListener.remove();\n        }\n        if (callback) {\n            this.onMarkerDragStartListener = await CapacitorGoogleMaps.addListener('onMarkerDragStart', this.generateCallback(callback));\n        }\n        else {\n            this.onMarkerDragStartListener = undefined;\n        }\n    }\n    /**\n     * Set the event listener on the map for 'onMarkerDrag' events.\n     *\n     * @param callback\n     * @returns\n     */\n    async setOnMarkerDragListener(callback) {\n        if (this.onMarkerDragListener) {\n            this.onMarkerDragListener.remove();\n        }\n        if (callback) {\n            this.onMarkerDragListener = await CapacitorGoogleMaps.addListener('onMarkerDrag', this.generateCallback(callback));\n        }\n        else {\n            this.onMarkerDragListener = undefined;\n        }\n    }\n    /**\n     * Set the event listener on the map for 'onMarkerDragEnd' events.\n     *\n     * @param callback\n     * @returns\n     */\n    async setOnMarkerDragEndListener(callback) {\n        if (this.onMarkerDragEndListener) {\n            this.onMarkerDragEndListener.remove();\n        }\n        if (callback) {\n            this.onMarkerDragEndListener = await CapacitorGoogleMaps.addListener('onMarkerDragEnd', this.generateCallback(callback));\n        }\n        else {\n            this.onMarkerDragEndListener = undefined;\n        }\n    }\n    /**\n     * Set the event listener on the map for 'onMyLocationButtonClick' events.\n     *\n     * @param callback\n     * @returns\n     */\n    async setOnMyLocationButtonClickListener(callback) {\n        if (this.onMyLocationButtonClickListener) {\n            this.onMyLocationButtonClickListener.remove();\n        }\n        if (callback) {\n            this.onMyLocationButtonClickListener =\n                await CapacitorGoogleMaps.addListener('onMyLocationButtonClick', this.generateCallback(callback));\n        }\n        else {\n            this.onMyLocationButtonClickListener = undefined;\n        }\n    }\n    /**\n     * Set the event listener on the map for 'onMyLocationClick' events.\n     *\n     * @param callback\n     * @returns\n     */\n    async setOnMyLocationClickListener(callback) {\n        if (this.onMyLocationClickListener) {\n            this.onMyLocationClickListener.remove();\n        }\n        if (callback) {\n            this.onMyLocationClickListener = await CapacitorGoogleMaps.addListener('onMyLocationClick', this.generateCallback(callback));\n        }\n        else {\n            this.onMyLocationClickListener = undefined;\n        }\n    }\n    /**\n     * Remove all event listeners on the map.\n     *\n     * @param callback\n     * @returns\n     */\n    async removeAllMapListeners() {\n        if (this.onBoundsChangedListener) {\n            this.onBoundsChangedListener.remove();\n            this.onBoundsChangedListener = undefined;\n        }\n        if (this.onCameraIdleListener) {\n            this.onCameraIdleListener.remove();\n            this.onCameraIdleListener = undefined;\n        }\n        if (this.onCameraMoveStartedListener) {\n            this.onCameraMoveStartedListener.remove();\n            this.onCameraMoveStartedListener = undefined;\n        }\n        if (this.onClusterClickListener) {\n            this.onClusterClickListener.remove();\n            this.onClusterClickListener = undefined;\n        }\n        if (this.onClusterInfoWindowClickListener) {\n            this.onClusterInfoWindowClickListener.remove();\n            this.onClusterInfoWindowClickListener = undefined;\n        }\n        if (this.onInfoWindowClickListener) {\n            this.onInfoWindowClickListener.remove();\n            this.onInfoWindowClickListener = undefined;\n        }\n        if (this.onMapClickListener) {\n            this.onMapClickListener.remove();\n            this.onMapClickListener = undefined;\n        }\n        if (this.onPolylineClickListener) {\n            this.onPolylineClickListener.remove();\n            this.onPolylineClickListener = undefined;\n        }\n        if (this.onMarkerClickListener) {\n            this.onMarkerClickListener.remove();\n            this.onMarkerClickListener = undefined;\n        }\n        if (this.onPolygonClickListener) {\n            this.onPolygonClickListener.remove();\n            this.onPolygonClickListener = undefined;\n        }\n        if (this.onCircleClickListener) {\n            this.onCircleClickListener.remove();\n            this.onCircleClickListener = undefined;\n        }\n        if (this.onMarkerDragStartListener) {\n            this.onMarkerDragStartListener.remove();\n            this.onMarkerDragStartListener = undefined;\n        }\n        if (this.onMarkerDragListener) {\n            this.onMarkerDragListener.remove();\n            this.onMarkerDragListener = undefined;\n        }\n        if (this.onMarkerDragEndListener) {\n            this.onMarkerDragEndListener.remove();\n            this.onMarkerDragEndListener = undefined;\n        }\n        if (this.onMyLocationButtonClickListener) {\n            this.onMyLocationButtonClickListener.remove();\n            this.onMyLocationButtonClickListener = undefined;\n        }\n        if (this.onMyLocationClickListener) {\n            this.onMyLocationClickListener.remove();\n            this.onMyLocationClickListener = undefined;\n        }\n    }\n    generateCallback(callback) {\n        const mapId = this.id;\n        return (data) => {\n            if (data.mapId == mapId) {\n                callback(data);\n            }\n        };\n    }\n}\n//# sourceMappingURL=map.js.map","import { WebPlugin } from '@capacitor/core';\nimport { MarkerClusterer, SuperClusterAlgorithm, } from '@googlemaps/markerclusterer';\nimport { MapType, LatLngBounds } from './definitions';\nexport class CapacitorGoogleMapsWeb extends WebPlugin {\n    constructor() {\n        super(...arguments);\n        this.gMapsRef = undefined;\n        this.AdvancedMarkerElement = undefined;\n        this.PinElement = undefined;\n        this.maps = {};\n        this.currMarkerId = 0;\n        this.currGroundOverlayId = 0;\n        this.currPolygonId = 0;\n        this.currCircleId = 0;\n        this.currPolylineId = 0;\n        this.currentOverlay = null;\n        this.currentTileLayer = null;\n        this.currTileId = 0;\n        // private tileLayers: any | null = null;\n        this.currMapId = 0;\n        this.onClusterClickHandler = (_, cluster, map) => {\n            var _a;\n            const mapId = this.getIdFromMap(map);\n            const items = [];\n            if (cluster.markers != undefined && this.AdvancedMarkerElement) {\n                for (const marker of cluster.markers) {\n                    if (marker instanceof this.AdvancedMarkerElement) {\n                        const markerId = this.getIdFromMarker(mapId, marker);\n                        const position = marker.position;\n                        items.push({\n                            markerId: markerId,\n                            latitude: position.lat,\n                            longitude: position.lng,\n                            title: (_a = marker.title) !== null && _a !== void 0 ? _a : '',\n                            snippet: '',\n                        });\n                    }\n                }\n            }\n            this.notifyListeners('onClusterClick', {\n                mapId: mapId,\n                latitude: cluster.position.lat,\n                longitude: cluster.position.lng,\n                size: cluster.count,\n                items: items,\n            });\n        };\n    }\n    getIdFromMap(map) {\n        for (const id in this.maps) {\n            if (this.maps[id].map == map) {\n                return id;\n            }\n        }\n        return '';\n    }\n    getIdFromMarker(mapId, marker) {\n        for (const id in this.maps[mapId].markers) {\n            if (this.maps[mapId].markers[id] == marker) {\n                return id;\n            }\n        }\n        return '';\n    }\n    async importGoogleLib(apiKey, region, language) {\n        if (this.gMapsRef === undefined) {\n            const lib = await import('@googlemaps/js-api-loader');\n            const loader = new lib.Loader({\n                apiKey: apiKey !== null && apiKey !== void 0 ? apiKey : '',\n                version: 'weekly',\n                libraries: ['places'],\n                language,\n                region,\n            });\n            const google = await loader.load();\n            this.gMapsRef = google.maps;\n            // Import marker library once\n            const { AdvancedMarkerElement, PinElement } = (await google.maps.importLibrary('marker'));\n            this.AdvancedMarkerElement = AdvancedMarkerElement;\n            this.PinElement = PinElement;\n            console.log('Loaded google maps API');\n        }\n    }\n    async enableTouch(_args) {\n        this.maps[_args.id].map.setOptions({ gestureHandling: 'auto' });\n    }\n    async disableTouch(_args) {\n        this.maps[_args.id].map.setOptions({ gestureHandling: 'none' });\n    }\n    async setCamera(_args) {\n        // Animation not supported yet...\n        this.maps[_args.id].map.moveCamera({\n            center: _args.config.coordinate,\n            heading: _args.config.bearing,\n            tilt: _args.config.angle,\n            zoom: _args.config.zoom,\n        });\n    }\n    async getMapType(_args) {\n        let type = this.maps[_args.id].map.getMapTypeId();\n        if (type !== undefined) {\n            if (type === 'roadmap') {\n                type = MapType.Normal;\n            }\n            return { type: `${type.charAt(0).toUpperCase()}${type.slice(1)}` };\n        }\n        throw new Error('Map type is undefined');\n    }\n    async setMapType(_args) {\n        let mapType = _args.mapType.toLowerCase();\n        if (_args.mapType === MapType.Normal) {\n            mapType = 'roadmap';\n        }\n        this.maps[_args.id].map.setMapTypeId(mapType);\n    }\n    async enableIndoorMaps() {\n        throw new Error('Method not supported on web.');\n    }\n    async enableTrafficLayer(_args) {\n        var _a;\n        const trafficLayer = (_a = this.maps[_args.id].trafficLayer) !== null && _a !== void 0 ? _a : new google.maps.TrafficLayer();\n        if (_args.enabled) {\n            trafficLayer.setMap(this.maps[_args.id].map);\n            this.maps[_args.id].trafficLayer = trafficLayer;\n        }\n        else if (this.maps[_args.id].trafficLayer) {\n            trafficLayer.setMap(null);\n            this.maps[_args.id].trafficLayer = undefined;\n        }\n    }\n    async enableAccessibilityElements() {\n        throw new Error('Method not supported on web.');\n    }\n    dispatchMapEvent() {\n        throw new Error('Method not supported on web.');\n    }\n    async enableCurrentLocation(_args) {\n        if (_args.enabled) {\n            if (navigator.geolocation) {\n                navigator.geolocation.getCurrentPosition((position) => {\n                    const pos = {\n                        lat: position.coords.latitude,\n                        lng: position.coords.longitude,\n                    };\n                    this.maps[_args.id].map.setCenter(pos);\n                    this.notifyListeners('onMyLocationButtonClick', {});\n                    this.notifyListeners('onMyLocationClick', {});\n                }, () => {\n                    throw new Error('Geolocation not supported on web browser.');\n                });\n            }\n            else {\n                throw new Error('Geolocation not supported on web browser.');\n            }\n        }\n    }\n    async setPadding(_args) {\n        const bounds = this.maps[_args.id].map.getBounds();\n        if (bounds !== undefined) {\n            this.maps[_args.id].map.fitBounds(bounds, _args.padding);\n        }\n    }\n    async getMapBounds(_args) {\n        const bounds = this.maps[_args.id].map.getBounds();\n        if (!bounds) {\n            throw new Error('Google Map Bounds could not be found.');\n        }\n        return new LatLngBounds({\n            southwest: {\n                lat: bounds.getSouthWest().lat(),\n                lng: bounds.getSouthWest().lng(),\n            },\n            center: {\n                lat: bounds.getCenter().lat(),\n                lng: bounds.getCenter().lng(),\n            },\n            northeast: {\n                lat: bounds.getNorthEast().lat(),\n                lng: bounds.getNorthEast().lng(),\n            },\n        });\n    }\n    async fitBounds(_args) {\n        const map = this.maps[_args.id].map;\n        const bounds = this.getLatLngBounds(_args.bounds);\n        map.fitBounds(bounds, _args.padding);\n    }\n    async addMarkers(_args) {\n        const markerIds = [];\n        const map = this.maps[_args.id];\n        for (const markerArgs of _args.markers) {\n            const advancedMarker = this.buildMarkerOpts(markerArgs, map.map);\n            const id = '' + this.currMarkerId;\n            map.markers[id] = advancedMarker;\n            await this.setMarkerListeners(_args.id, id, advancedMarker);\n            markerIds.push(id);\n            this.currMarkerId++;\n        }\n        return { ids: markerIds };\n    }\n    async addTileLayer(_args) {\n        var _a;\n        const map = this.maps[_args.id].map;\n        const maxZoom = (_args.tileLayer.maxZoom) ? _args.tileLayer.maxZoom : 0;\n        // const currentZoom = map.getZoom() || 0;\n        // console.warn(currentZoom, maxZoom);\n        const tileLayer = new google.maps.ImageMapType({\n            getTileUrl: (coord, zoom) => {\n                if (zoom > maxZoom)\n                    return null;\n                const url = _args.tileLayer.tileUrl\n                    .replace('{x}', coord.x.toString())\n                    .replace('{y}', coord.y.toString())\n                    .replace('{zoom}', zoom.toString());\n                return url;\n            },\n            tileSize: new google.maps.Size(256, 256),\n            maxZoom: maxZoom,\n        });\n        if (this.currentTileLayer) {\n            this.currentTileLayer = tileLayer;\n        }\n        // if (this.maps[_args.id].tileLayer) { // Remove previous overlay\n        //   map.overlayMapTypes.removeAt(0);\n        // }\n        if (_args.tileLayer.opacity)\n            tileLayer.setOpacity(_args.tileLayer.opacity);\n        // Draw Tiles\n        map.overlayMapTypes.push(tileLayer);\n        // this.maps[_args.id].tileLayer = tileLayer;\n        /*\n        if (_args.tileLayer?.debug) { // Optionally, you can set debug mode if needed\n          map.addListener('mousemove', function (event: any) {\n            console.log('Mouse Coordinates: ', event.latLng.toString());\n          });\n        }\n        if (!_args.tileLayer?.visible) { // Set visibility based on the 'visible' property\n          map.overlayMapTypes.pop(); // Remove the last overlay (customMapOverlay) from the stack\n        }\n        */\n        if (((_a = _args.tileLayer) === null || _a === void 0 ? void 0 : _a.zIndex) !== undefined) { // Set zIndex based on the 'zIndex' property\n            // Move the customMapOverlay to the specified index in the overlay stack\n            map.overlayMapTypes.setAt(map.overlayMapTypes.getLength() - 1, tileLayer);\n        }\n        const id = '' + this.currTileId;\n        this.maps[_args.id].tiles[id] = tileLayer;\n        this.currTileId++;\n        return { id: id };\n    }\n    async removeTileLayer(_args) {\n        if (this.maps[_args.id].tiles[_args.tileId]) {\n            this.maps[_args.id].tiles[_args.tileId].setOpacity(0);\n            delete this.maps[_args.id].tiles[_args.tileId];\n        }\n        // if (this.maps[_args.id].tileLayer) {\n        //   this.maps[_args.id].map.overlayMapTypes.removeAt(0);\n        //   delete this.maps[_args.id].tileLayer;\n        // }\n    }\n    async removeAllTileLayers(_args) {\n        Object.keys(this.maps[_args.id].tiles).forEach(tileId => {\n            var _a;\n            (_a = this.maps[_args.id].tiles[tileId]) === null || _a === void 0 ? void 0 : _a.setOpacity(0);\n            delete this.maps[_args.id].tiles[tileId];\n        });\n        this.currentTileLayer = null; // Reset the currentTileLayer\n    }\n    async setTileLayerOpacity(_args) {\n        const map = this.maps[_args.id];\n        if (map && map.tileLayer) {\n            const clampedOpacity = Math.max(0, Math.min(1, _args.opacity)); // Clamp opacity between 0 and 1\n            map.tileLayer.setOpacity(clampedOpacity); // Assuming your tileLayer object has a setOpacity method\n        }\n        else {\n            console.error('No tile layer found for the given map ID');\n        }\n    }\n    async addMarker(_args) {\n        const advancedMarker = this.buildMarkerOpts(_args.marker, this.maps[_args.id].map);\n        const id = '' + this.currMarkerId;\n        this.maps[_args.id].markers[id] = advancedMarker;\n        await this.setMarkerListeners(_args.id, id, advancedMarker);\n        this.currMarkerId++;\n        return { id: id };\n    }\n    async removeMarkers(_args) {\n        const map = this.maps[_args.id];\n        for (const id of _args.markerIds) {\n            if (map.markers[id]) {\n                map.markers[id].map = null;\n                delete map.markers[id];\n            }\n        }\n    }\n    async removeMarker(_args) {\n        if (this.maps[_args.id].markers[_args.markerId]) {\n            this.maps[_args.id].markers[_args.markerId].map = null;\n            delete this.maps[_args.id].markers[_args.markerId];\n        }\n    }\n    async updateMapOptions(_args) {\n        const map = this.maps[_args.id];\n        if (!map) {\n            throw new Error('Map not found');\n        }\n        const googleMapOptions = {};\n        if (_args.options.zoom !== undefined) {\n            googleMapOptions.zoom = _args.options.zoom;\n        }\n        if (_args.options.center) {\n            googleMapOptions.center = _args.options.center;\n        }\n        if (_args.options.styles) {\n            googleMapOptions.styles = _args.options.styles;\n        }\n        if (_args.options.disableDefaultUI !== undefined) {\n            googleMapOptions.disableDefaultUI = _args.options.disableDefaultUI;\n            googleMapOptions.streetViewControl = false; // Force no streetViewControl\n        }\n        map.map.setOptions(googleMapOptions);\n    }\n    // async updateMapOptions(options: UpdateMapOptions): Promise<void> {\n    //   const map = this.maps[options.id];\n    //   if (!map) {\n    //     throw new Error('Map not found');\n    //   }\n    //   const cameraUpdate: CameraUpdate = {};\n    //   if (options.zoom !== undefined) {\n    //     cameraUpdate.zoom = options.zoom;\n    //   }\n    //   if (options.center) {\n    //     cameraUpdate.target = options.center;\n    //   }\n    //   await map.moveCamera(cameraUpdate);\n    // }\n    async addGroundOverlay(_args) {\n        // Remove all existing ground overlays\n        // Object.keys(this.maps[_args.id].overlays).forEach(overlayId => {\n        //   this.maps[_args.id].overlays[overlayId].setMap(null);\n        //   delete this.maps[_args.id].overlays[overlayId];\n        // });\n        const bounds = new google.maps.LatLngBounds(new google.maps.LatLng(_args.overlay.bounds.southwest.lat, _args.overlay.bounds.southwest.lng), new google.maps.LatLng(_args.overlay.bounds.northeast.lat, _args.overlay.bounds.northeast.lng));\n        const overlayOpts = this.buildGroundOverlay(_args.overlay, this.maps[_args.id].map);\n        const overlay = new google.maps.GroundOverlay(_args.overlay.imageUrl, bounds, overlayOpts);\n        overlay.setMap(this.maps[_args.id].map);\n        // this.currentOverlay = overlay;\n        const id = '' + this.currGroundOverlayId;\n        this.maps[_args.id].overlays[id] = overlay;\n        // You can add event listeners here if needed, similar to setMarkerListeners for markers.\n        this.currGroundOverlayId++;\n        return { id: id };\n    }\n    async addOrUpdateGroundOverlay(_args) {\n        const bounds = new google.maps.LatLngBounds(new google.maps.LatLng(_args.overlay.bounds.southwest.lat, _args.overlay.bounds.southwest.lng), new google.maps.LatLng(_args.overlay.bounds.northeast.lat, _args.overlay.bounds.northeast.lng));\n        const overlayOpts = this.buildGroundOverlay(_args.overlay, this.maps[_args.id].map);\n        if (this.currentOverlay) {\n            this.currentOverlay.setMap(null);\n        }\n        const overlay = new google.maps.GroundOverlay(_args.overlay.imageUrl, bounds, overlayOpts);\n        overlay.setMap(this.maps[_args.id].map);\n        this.currentOverlay = overlay;\n        const id = '' + this.currGroundOverlayId;\n        this.maps[_args.id].overlays[id] = overlay;\n        this.currGroundOverlayId++;\n        return { id: id };\n    }\n    async addMultipleGroundOverlays(_args) {\n        let firstId = '';\n        // Loop through the arrays of image URLs and bounds to add each overlay\n        for (let i = 0; i < _args.overlays.imageUrl.length; i++) {\n            // Create a single GroundOverlay object by restructuring the data\n            const singleOverlay = {\n                imageUrl: _args.overlays.imageUrl[i],\n                bounds: {\n                    southwest: _args.overlays.bounds[i].southwest,\n                    northeast: _args.overlays.bounds[i].northeast,\n                },\n                opacity: _args.overlays.opacity,\n            };\n            // Now we can call buildGroundOverlay with a properly structured GroundOverlay object\n            const bounds = new google.maps.LatLngBounds(new google.maps.LatLng(singleOverlay.bounds.southwest.lat, singleOverlay.bounds.southwest.lng), new google.maps.LatLng(singleOverlay.bounds.northeast.lat, singleOverlay.bounds.northeast.lng));\n            const overlayOpts = this.buildGroundOverlay(singleOverlay, this.maps[_args.id].map);\n            const overlay = new google.maps.GroundOverlay(singleOverlay.imageUrl, bounds, overlayOpts);\n            overlay.setMap(this.maps[_args.id].map);\n            const id = '' + this.currGroundOverlayId;\n            if (i === 0) {\n                firstId = id; // Store the first ID\n            }\n            this.maps[_args.id].overlays[id] = overlay;\n            this.currGroundOverlayId++;\n        }\n        return { id: firstId }; // Return only the first ID\n    }\n    async setOverlayOpacity(_args) {\n        if (this.currentOverlay) {\n            this.currentOverlay.setOpacity(_args.opacity);\n        }\n        else {\n            console.warn('No existing overlay to update opacity');\n        }\n    }\n    async removeGroundOverlay(_args) {\n        this.maps[_args.id].overlays[_args.overlayId].setMap(null);\n        delete this.maps[_args.id].overlays[_args.overlayId];\n    }\n    async removeAllGroundOverlays(_args) {\n        Object.keys(this.maps[_args.id].overlays).forEach(overlayId => {\n            this.maps[_args.id].overlays[overlayId].setMap(null);\n            delete this.maps[_args.id].overlays[overlayId];\n        });\n        // Reset the currentOverlay\n        this.currentOverlay = null;\n    }\n    async setCurrentOverlayImage(_args) {\n        if (!this.currentOverlay) {\n            throw new Error('No overlay has been added to update its image.');\n        }\n        // Remove the current overlay\n        this.currentOverlay.setMap(null);\n        // Create a new overlay with the updated image URL\n        const newOverlay = new google.maps.GroundOverlay(_args.imageUrl, this.currentOverlay.getBounds(), { opacity: _args.opacity });\n        // Add the new overlay to the map\n        newOverlay.setMap(this.maps[_args.id].map);\n        // Update the currentOverlay reference\n        this.currentOverlay = newOverlay;\n    }\n    buildGroundOverlay(overlay, map) {\n        const opts = {\n            map: map,\n            opacity: overlay.opacity,\n            clickable: false,\n        };\n        return opts;\n    }\n    async addPolygons(args) {\n        const polygonIds = [];\n        const map = this.maps[args.id];\n        for (const polygonArgs of args.polygons) {\n            const polygon = new google.maps.Polygon(polygonArgs);\n            polygon.setMap(map.map);\n            const id = '' + this.currPolygonId;\n            this.maps[args.id].polygons[id] = polygon;\n            this.setPolygonListeners(args.id, id, polygon);\n            polygonIds.push(id);\n            this.currPolygonId++;\n        }\n        return { ids: polygonIds };\n    }\n    async removePolygons(args) {\n        const map = this.maps[args.id];\n        for (const id of args.polygonIds) {\n            map.polygons[id].setMap(null);\n            delete map.polygons[id];\n        }\n    }\n    async addCircles(args) {\n        const circleIds = [];\n        const map = this.maps[args.id];\n        for (const circleArgs of args.circles) {\n            const circle = new google.maps.Circle(circleArgs);\n            circle.setMap(map.map);\n            const id = '' + this.currCircleId;\n            this.maps[args.id].circles[id] = circle;\n            this.setCircleListeners(args.id, id, circle);\n            circleIds.push(id);\n            this.currCircleId++;\n        }\n        return { ids: circleIds };\n    }\n    async removeCircles(args) {\n        const map = this.maps[args.id];\n        for (const id of args.circleIds) {\n            map.circles[id].setMap(null);\n            delete map.circles[id];\n        }\n    }\n    async addPolylines(args) {\n        const lineIds = [];\n        const map = this.maps[args.id];\n        for (const polylineArgs of args.polylines) {\n            const polyline = new google.maps.Polyline(polylineArgs);\n            polyline.set('tag', polylineArgs.tag);\n            polyline.setMap(map.map);\n            const id = '' + this.currPolylineId;\n            this.maps[args.id].polylines[id] = polyline;\n            this.setPolylineListeners(args.id, id, polyline);\n            lineIds.push(id);\n            this.currPolylineId++;\n        }\n        return {\n            ids: lineIds,\n        };\n    }\n    async removePolylines(args) {\n        const map = this.maps[args.id];\n        for (const id of args.polylineIds) {\n            map.polylines[id].setMap(null);\n            delete map.polylines[id];\n        }\n    }\n    async enableClustering(_args) {\n        var _a;\n        const markers = [];\n        for (const id in this.maps[_args.id].markers) {\n            markers.push(this.maps[_args.id].markers[id]);\n        }\n        this.maps[_args.id].markerClusterer = new MarkerClusterer({\n            map: this.maps[_args.id].map,\n            markers: markers,\n            algorithm: new SuperClusterAlgorithm({\n                minPoints: (_a = _args.minClusterSize) !== null && _a !== void 0 ? _a : 4,\n            }),\n            onClusterClick: this.onClusterClickHandler,\n        });\n    }\n    async disableClustering(_args) {\n        const mapInstance = this.maps[_args.id];\n        if (mapInstance.markerClusterer) {\n            const markers = Object.values(mapInstance.markers);\n            mapInstance.markerClusterer.setMap(null);\n            mapInstance.markerClusterer = undefined;\n            for (const marker of markers) {\n                marker.map = mapInstance.map;\n            }\n        }\n    }\n    async onScroll() {\n        throw new Error('Method not supported on web.');\n    }\n    async onResize() {\n        throw new Error('Method not supported on web.');\n    }\n    async onDisplay() {\n        throw new Error('Method not supported on web.');\n    }\n    async create(_args) {\n        console.log(`Create map: ${_args.id}`);\n        await this.importGoogleLib(_args.apiKey, _args.region, _args.language);\n        // Ensure we have a Map ID for Advanced Markers\n        const config = Object.assign({}, _args.config);\n        if (!config.mapId) {\n            config.mapId = `capacitor_map_${this.currMapId++}`;\n        }\n        this.maps[_args.id] = {\n            map: new window.google.maps.Map(_args.element, config),\n            element: _args.element,\n            markers: {},\n            overlays: {},\n            polygons: {},\n            tiles: {},\n            circles: {},\n            polylines: {},\n            tileLayer: undefined, // Initialize with undefined\n        };\n        this.setMapListeners(_args.id);\n    }\n    async destroy(_args) {\n        console.log(`Destroy map: ${_args.id}`);\n        const mapItem = this.maps[_args.id];\n        mapItem.element.innerHTML = '';\n        mapItem.map.unbindAll();\n        delete this.maps[_args.id];\n    }\n    async mapBoundsContains(_args) {\n        const bounds = this.getLatLngBounds(_args.bounds);\n        const point = new google.maps.LatLng(_args.point.lat, _args.point.lng);\n        return { contains: bounds.contains(point) };\n    }\n    async mapBoundsExtend(_args) {\n        const bounds = this.getLatLngBounds(_args.bounds);\n        const point = new google.maps.LatLng(_args.point.lat, _args.point.lng);\n        bounds.extend(point);\n        const result = new LatLngBounds({\n            southwest: {\n                lat: bounds.getSouthWest().lat(),\n                lng: bounds.getSouthWest().lng(),\n            },\n            center: {\n                lat: bounds.getCenter().lat(),\n                lng: bounds.getCenter().lng(),\n            },\n            northeast: {\n                lat: bounds.getNorthEast().lat(),\n                lng: bounds.getNorthEast().lng(),\n            },\n        });\n        return { bounds: result };\n    }\n    getLatLngBounds(_args) {\n        return new google.maps.LatLngBounds(new google.maps.LatLng(_args.southwest.lat, _args.southwest.lng), new google.maps.LatLng(_args.northeast.lat, _args.northeast.lng));\n    }\n    async setCircleListeners(mapId, circleId, circle) {\n        circle.addListener('click', () => {\n            this.notifyListeners('onCircleClick', {\n                mapId: mapId,\n                circleId: circleId,\n                tag: circle.get('tag'),\n            });\n        });\n    }\n    async setPolygonListeners(mapId, polygonId, polygon) {\n        polygon.addListener('click', () => {\n            this.notifyListeners('onPolygonClick', {\n                mapId: mapId,\n                polygonId: polygonId,\n                tag: polygon.get('tag'),\n            });\n        });\n    }\n    async setPolylineListeners(mapId, polylineId, polyline) {\n        polyline.addListener('click', () => {\n            this.notifyListeners('onPolylineClick', {\n                mapId: mapId,\n                polylineId: polylineId,\n                tag: polyline.get('tag'),\n            });\n        });\n    }\n    async setMarkerListeners(mapId, markerId, marker) {\n        marker.addListener('click', () => {\n            var _a;\n            const position = marker.position;\n            this.notifyListeners('onMarkerClick', {\n                mapId: mapId,\n                markerId: markerId,\n                latitude: position.lat,\n                longitude: position.lng,\n                title: (_a = marker.title) !== null && _a !== void 0 ? _a : '',\n                snippet: '',\n            });\n        });\n        if (marker.gmpDraggable) {\n            marker.addListener('dragstart', () => {\n                var _a;\n                const position = marker.position;\n                this.notifyListeners('onMarkerDragStart', {\n                    mapId: mapId,\n                    markerId: markerId,\n                    latitude: position.lat,\n                    longitude: position.lng,\n                    title: (_a = marker.title) !== null && _a !== void 0 ? _a : '',\n                    snippet: '',\n                });\n            });\n            marker.addListener('drag', () => {\n                var _a;\n                const position = marker.position;\n                this.notifyListeners('onMarkerDrag', {\n                    mapId: mapId,\n                    markerId: markerId,\n                    latitude: position.lat,\n                    longitude: position.lng,\n                    title: (_a = marker.title) !== null && _a !== void 0 ? _a : '',\n                    snippet: '',\n                });\n            });\n            marker.addListener('dragend', () => {\n                var _a;\n                const position = marker.position;\n                this.notifyListeners('onMarkerDragEnd', {\n                    mapId: mapId,\n                    markerId: markerId,\n                    latitude: position.lat,\n                    longitude: position.lng,\n                    title: (_a = marker.title) !== null && _a !== void 0 ? _a : '',\n                    snippet: '',\n                });\n            });\n        }\n    }\n    async setMapListeners(mapId) {\n        const map = this.maps[mapId].map;\n        map.addListener('idle', async () => {\n            var _a, _b;\n            const bounds = await this.getMapBounds({ id: mapId });\n            this.notifyListeners('onCameraIdle', {\n                mapId: mapId,\n                bearing: map.getHeading(),\n                bounds: bounds,\n                latitude: (_a = map.getCenter()) === null || _a === void 0 ? void 0 : _a.lat(),\n                longitude: (_b = map.getCenter()) === null || _b === void 0 ? void 0 : _b.lng(),\n                tilt: map.getTilt(),\n                zoom: map.getZoom(),\n            });\n        });\n        map.addListener('center_changed', () => {\n            this.notifyListeners('onCameraMoveStarted', {\n                mapId: mapId,\n                isGesture: true,\n            });\n        });\n        map.addListener('bounds_changed', async () => {\n            var _a, _b;\n            const bounds = await this.getMapBounds({ id: mapId });\n            this.notifyListeners('onBoundsChanged', {\n                mapId: mapId,\n                bearing: map.getHeading(),\n                bounds: bounds,\n                latitude: (_a = map.getCenter()) === null || _a === void 0 ? void 0 : _a.lat(),\n                longitude: (_b = map.getCenter()) === null || _b === void 0 ? void 0 : _b.lng(),\n                tilt: map.getTilt(),\n                zoom: map.getZoom(),\n            });\n        });\n        map.addListener('click', (e) => {\n            var _a, _b;\n            this.notifyListeners('onMapClick', {\n                mapId: mapId,\n                latitude: (_a = e.latLng) === null || _a === void 0 ? void 0 : _a.lat(),\n                longitude: (_b = e.latLng) === null || _b === void 0 ? void 0 : _b.lng(),\n            });\n        });\n        this.notifyListeners('onMapReady', {\n            mapId: mapId,\n        });\n    }\n    buildMarkerOpts(marker, map) {\n        var _a;\n        if (!this.AdvancedMarkerElement || !this.PinElement) {\n            throw new Error('Marker library not loaded');\n        }\n        let content = undefined;\n        if (marker.iconUrl) {\n            const img = document.createElement('img');\n            img.src = marker.iconUrl;\n            if (marker.iconSize) {\n                img.style.width = `${marker.iconSize.width}px`;\n                img.style.height = `${marker.iconSize.height}px`;\n            }\n            content = img;\n        }\n        else {\n            const pinOptions = {\n                scale: (_a = marker.opacity) !== null && _a !== void 0 ? _a : 1,\n                glyph: marker.title,\n                background: marker.tintColor\n                    ? `rgb(${marker.tintColor.r}, ${marker.tintColor.g}, ${marker.tintColor.b})`\n                    : undefined,\n            };\n            const pin = new this.PinElement(pinOptions);\n            content = pin.element;\n        }\n        const advancedMarker = new this.AdvancedMarkerElement({\n            position: marker.coordinate,\n            map: map,\n            content: content,\n            title: marker.title,\n            gmpDraggable: marker.draggable,\n        });\n        return advancedMarker;\n    }\n}\n//# sourceMappingURL=web.js.map"]}