Kargi-Sitesi/.angular/cache/16.2.16/babel-webpack/72d0a2cfdc44fa2c15651bd61b4dfa382a2765ecaa97b7a9941a715317e3676f.json

1 line
No EOL
388 KiB
JSON

{"ast":null,"code":"import { __awaiter } from 'tslib';\nimport { Injectable, NgZone, ɵɵdefineInjectable, ɵɵinject, InjectionToken, Optional, Inject, LOCALE_ID, Directive, Input, EventEmitter, Output, Self, Component, ElementRef, PLATFORM_ID, ContentChildren, QueryList, forwardRef, NgModule } from '@angular/core';\nimport { Observable, BehaviorSubject, from, timer, ReplaySubject, bindCallback, of, throwError, fromEventPattern, merge, Subject } from 'rxjs';\nimport { flatMap, sample, switchMap, map, shareReplay, multicast, startWith, skip, distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { isPlatformServer } from '@angular/common';\nclass MapsAPILoader {}\nMapsAPILoader.decorators = [{\n type: Injectable\n}];\n\n/**\n * Wrapper class that handles the communication with the Google Maps Javascript\n * API v3\n */\nclass GoogleMapsAPIWrapper {\n constructor(_loader, _zone) {\n this._loader = _loader;\n this._zone = _zone;\n this._map = new Promise(resolve => {\n this._mapResolver = resolve;\n });\n }\n createMap(el, mapOptions) {\n return this._zone.runOutsideAngular(() => {\n return this._loader.load().then(() => {\n const map = new google.maps.Map(el, mapOptions);\n this._mapResolver(map);\n return;\n });\n });\n }\n setMapOptions(options) {\n return this._zone.runOutsideAngular(() => {\n this._map.then(m => {\n m.setOptions(options);\n });\n });\n }\n /**\n * Creates a google map marker with the map context\n */\n createMarker(options = {}, addToMap = true) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(map => {\n if (addToMap) {\n options.map = map;\n }\n return new google.maps.Marker(options);\n });\n });\n }\n createInfoWindow(options) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(() => new google.maps.InfoWindow(options));\n });\n }\n /**\n * Creates a google.map.Circle for the current map.\n */\n createCircle(options) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(map => {\n options.map = map;\n return new google.maps.Circle(options);\n });\n });\n }\n /**\n * Creates a google.map.Rectangle for the current map.\n */\n createRectangle(options) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(map => {\n options.map = map;\n return new google.maps.Rectangle(options);\n });\n });\n }\n createPolyline(options) {\n return this._zone.runOutsideAngular(() => {\n return this.getNativeMap().then(map => {\n const line = new google.maps.Polyline(options);\n line.setMap(map);\n return line;\n });\n });\n }\n createPolygon(options) {\n return this._zone.runOutsideAngular(() => {\n return this.getNativeMap().then(map => {\n const polygon = new google.maps.Polygon(options);\n polygon.setMap(map);\n return polygon;\n });\n });\n }\n /**\n * Creates a new google.map.Data layer for the current map\n */\n createDataLayer(options) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(m => {\n const data = new google.maps.Data(options);\n data.setMap(m);\n return data;\n });\n });\n }\n /**\n * Creates a TransitLayer instance for a map\n * @returns a new transit layer object\n */\n createTransitLayer() {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(map => {\n const newLayer = new google.maps.TransitLayer();\n newLayer.setMap(map);\n return newLayer;\n });\n });\n }\n /**\n * Creates a BicyclingLayer instance for a map\n * @returns a new bicycling layer object\n */\n createBicyclingLayer() {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(map => {\n const newLayer = new google.maps.BicyclingLayer();\n newLayer.setMap(map);\n return newLayer;\n });\n });\n }\n /**\n * Determines if given coordinates are insite a Polygon path.\n */\n containsLocation(latLng, polygon) {\n return this._map.then(() => google.maps.geometry.poly.containsLocation(latLng, polygon));\n }\n subscribeToMapEvent(eventName) {\n return new Observable(observer => {\n this._map.then(m => m.addListener(eventName, () => this._zone.run(() => observer.next(arguments[0]))));\n });\n }\n clearInstanceListeners() {\n return this._zone.runOutsideAngular(() => {\n this._map.then(map => {\n google.maps.event.clearInstanceListeners(map);\n });\n });\n }\n setCenter(latLng) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(map => map.setCenter(latLng));\n });\n }\n getZoom() {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(map => map.getZoom());\n });\n }\n getBounds() {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(map => map.getBounds());\n });\n }\n getMapTypeId() {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(map => map.getMapTypeId());\n });\n }\n setZoom(zoom) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(map => map.setZoom(zoom));\n });\n }\n getCenter() {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(map => map.getCenter());\n });\n }\n panTo(latLng) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(map => map.panTo(latLng));\n });\n }\n panBy(x, y) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(map => map.panBy(x, y));\n });\n }\n fitBounds(latLng, padding) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(map => map.fitBounds(latLng, padding));\n });\n }\n panToBounds(latLng, padding) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(map => map.panToBounds(latLng, padding));\n });\n }\n /**\n * Returns the native Google Maps Map instance. Be careful when using this instance directly.\n */\n getNativeMap() {\n return this._map;\n }\n /**\n * Triggers the given event name on the map instance.\n */\n triggerMapEvent(eventName) {\n return this._map.then(m => google.maps.event.trigger(m, eventName));\n }\n}\nGoogleMapsAPIWrapper.decorators = [{\n type: Injectable\n}];\nGoogleMapsAPIWrapper.ctorParameters = () => [{\n type: MapsAPILoader\n}, {\n type: NgZone\n}];\nclass CircleManager {\n constructor(_apiWrapper, _zone) {\n this._apiWrapper = _apiWrapper;\n this._zone = _zone;\n this._circles = new Map();\n }\n addCircle(circle) {\n this._apiWrapper.getNativeMap().then(() => this._circles.set(circle, this._apiWrapper.createCircle({\n center: {\n lat: circle.latitude,\n lng: circle.longitude\n },\n clickable: circle.clickable,\n draggable: circle.draggable,\n editable: circle.editable,\n fillColor: circle.fillColor,\n fillOpacity: circle.fillOpacity,\n radius: circle.radius,\n strokeColor: circle.strokeColor,\n strokeOpacity: circle.strokeOpacity,\n strokePosition: google.maps.StrokePosition[circle.strokePosition],\n strokeWeight: circle.strokeWeight,\n visible: circle.visible,\n zIndex: circle.zIndex\n })));\n }\n /**\n * Removes the given circle from the map.\n */\n removeCircle(circle) {\n return this._circles.get(circle).then(c => {\n c.setMap(null);\n this._circles.delete(circle);\n });\n }\n setOptions(circle, options) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._circles.get(circle).then(c => {\n const actualParam = options.strokePosition;\n options.strokePosition = google.maps.StrokePosition[actualParam];\n c.setOptions(options);\n });\n });\n }\n getBounds(circle) {\n return this._circles.get(circle).then(c => c.getBounds());\n }\n getCenter(circle) {\n return this._circles.get(circle).then(c => c.getCenter());\n }\n getRadius(circle) {\n return this._circles.get(circle).then(c => c.getRadius());\n }\n setCenter(circle) {\n return this._circles.get(circle).then(c => c.setCenter({\n lat: circle.latitude,\n lng: circle.longitude\n }));\n }\n setEditable(circle) {\n return this._circles.get(circle).then(c => c.setEditable(circle.editable));\n }\n setDraggable(circle) {\n return this._circles.get(circle).then(c => c.setDraggable(circle.draggable));\n }\n setVisible(circle) {\n return this._circles.get(circle).then(c => c.setVisible(circle.visible));\n }\n setRadius(circle) {\n return this._circles.get(circle).then(c => c.setRadius(circle.radius));\n }\n getNativeCircle(circle) {\n return this._circles.get(circle);\n }\n createEventObservable(eventName, circle) {\n return new Observable(observer => {\n let listener = null;\n this._circles.get(circle).then(c => {\n listener = c.addListener(eventName, e => this._zone.run(() => observer.next(e)));\n });\n return () => {\n if (listener !== null) {\n listener.remove();\n }\n };\n });\n }\n}\nCircleManager.decorators = [{\n type: Injectable\n}];\nCircleManager.ctorParameters = () => [{\n type: GoogleMapsAPIWrapper\n}, {\n type: NgZone\n}];\n\n/**\n * Manages all Data Layers for a Google Map instance.\n */\nclass DataLayerManager {\n constructor(_wrapper, _zone) {\n this._wrapper = _wrapper;\n this._zone = _zone;\n this._layers = new Map();\n }\n /**\n * Adds a new Data Layer to the map.\n */\n addDataLayer(layer) {\n const newLayer = this._wrapper.createDataLayer({\n style: layer.style\n }).then(d => {\n if (layer.geoJson) {\n // NOTE: accessing \"features\" on google.maps.Data is undocumented\n this.getDataFeatures(d, layer.geoJson).then(features => d.features = features);\n }\n return d;\n });\n this._layers.set(layer, newLayer);\n }\n deleteDataLayer(layer) {\n this._layers.get(layer).then(l => {\n l.setMap(null);\n this._layers.delete(layer);\n });\n }\n updateGeoJson(layer, geoJson) {\n this._layers.get(layer).then(l => {\n l.forEach(feature => {\n l.remove(feature);\n // NOTE: accessing \"features\" on google.maps.Data is undocumented\n const index = l.features.indexOf(feature, 0);\n if (index > -1) {\n l.features.splice(index, 1);\n }\n });\n this.getDataFeatures(l, geoJson).then(features => l.features = features);\n });\n }\n setDataOptions(layer, options) {\n this._layers.get(layer).then(l => {\n l.setControlPosition(options.controlPosition);\n l.setControls(options.controls);\n l.setDrawingMode(options.drawingMode);\n l.setStyle(options.style);\n });\n }\n /**\n * Creates a Google Maps event listener for the given DataLayer as an Observable\n */\n createEventObservable(eventName, layer) {\n return new Observable(observer => {\n this._layers.get(layer).then(d => {\n d.addListener(eventName, e => this._zone.run(() => observer.next(e)));\n });\n });\n }\n /**\n * Extract features from a geoJson using google.maps Data Class\n * @param d : google.maps.Data class instance\n * @param geoJson : url or geojson object\n */\n getDataFeatures(d, geoJson) {\n return new Promise((resolve, reject) => {\n if (typeof geoJson === 'object') {\n try {\n const features = d.addGeoJson(geoJson);\n resolve(features);\n } catch (e) {\n reject(e);\n }\n } else if (typeof geoJson === 'string') {\n d.loadGeoJson(geoJson, null, resolve);\n } else {\n reject(`Impossible to extract features from geoJson: wrong argument type`);\n }\n });\n }\n}\nDataLayerManager.decorators = [{\n type: Injectable\n}];\nDataLayerManager.ctorParameters = () => [{\n type: GoogleMapsAPIWrapper\n}, {\n type: NgZone\n}];\n\n/**\n * Class to implement when you what to be able to make it work with the auto fit bounds feature\n * of AGM.\n */\nclass FitBoundsAccessor {}\n/**\n * The FitBoundsService is responsible for computing the bounds of the a single map.\n */\nclass FitBoundsService {\n constructor(loader) {\n this._boundsChangeSampleTime$ = new BehaviorSubject(200);\n this._includeInBounds$ = new BehaviorSubject(new Map());\n this.bounds$ = from(loader.load()).pipe(flatMap(() => this._includeInBounds$), sample(this._boundsChangeSampleTime$.pipe(switchMap(time => timer(0, time)))), map(includeInBounds => this._generateBounds(includeInBounds)), shareReplay(1));\n }\n _generateBounds(includeInBounds) {\n const bounds = new google.maps.LatLngBounds();\n includeInBounds.forEach(b => bounds.extend(b));\n return bounds;\n }\n addToBounds(latLng) {\n const id = this._createIdentifier(latLng);\n if (this._includeInBounds$.value.has(id)) {\n return;\n }\n const boundsMap = this._includeInBounds$.value;\n boundsMap.set(id, latLng);\n this._includeInBounds$.next(boundsMap);\n }\n removeFromBounds(latLng) {\n const boundsMap = this._includeInBounds$.value;\n boundsMap.delete(this._createIdentifier(latLng));\n this._includeInBounds$.next(boundsMap);\n }\n changeFitBoundsChangeSampleTime(timeMs) {\n this._boundsChangeSampleTime$.next(timeMs);\n }\n getBounds$() {\n return this.bounds$;\n }\n _createIdentifier(latLng) {\n return `${latLng.lat}+${latLng.lng}`;\n }\n}\nFitBoundsService.decorators = [{\n type: Injectable\n}];\nFitBoundsService.ctorParameters = () => [{\n type: MapsAPILoader\n}];\nclass AgmGeocoder {\n constructor(loader) {\n const connectableGeocoder$ = new Observable(subscriber => {\n loader.load().then(() => subscriber.next());\n }).pipe(map(() => this._createGeocoder()), multicast(new ReplaySubject(1)));\n connectableGeocoder$.connect(); // ignore the subscription\n // since we will remain subscribed till application exits\n this.geocoder$ = connectableGeocoder$;\n }\n geocode(request) {\n return this.geocoder$.pipe(switchMap(geocoder => this._getGoogleResults(geocoder, request)));\n }\n _getGoogleResults(geocoder, request) {\n const geocodeObservable = bindCallback(geocoder.geocode);\n return geocodeObservable(request).pipe(switchMap(([results, status]) => {\n if (status === google.maps.GeocoderStatus.OK) {\n return of(results);\n }\n return throwError(status);\n }));\n }\n _createGeocoder() {\n return new google.maps.Geocoder();\n }\n}\nAgmGeocoder.ɵprov = ɵɵdefineInjectable({\n factory: function AgmGeocoder_Factory() {\n return new AgmGeocoder(ɵɵinject(MapsAPILoader));\n },\n token: AgmGeocoder,\n providedIn: \"root\"\n});\nAgmGeocoder.decorators = [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n}];\nAgmGeocoder.ctorParameters = () => [{\n type: MapsAPILoader\n}];\nclass WindowRef {\n getNativeWindow() {\n return window;\n }\n}\nclass DocumentRef {\n getNativeDocument() {\n return document;\n }\n}\nconst BROWSER_GLOBALS_PROVIDERS = [WindowRef, DocumentRef];\nvar GoogleMapsScriptProtocol;\n(function (GoogleMapsScriptProtocol) {\n GoogleMapsScriptProtocol[GoogleMapsScriptProtocol[\"HTTP\"] = 1] = \"HTTP\";\n GoogleMapsScriptProtocol[GoogleMapsScriptProtocol[\"HTTPS\"] = 2] = \"HTTPS\";\n GoogleMapsScriptProtocol[GoogleMapsScriptProtocol[\"AUTO\"] = 3] = \"AUTO\";\n})(GoogleMapsScriptProtocol || (GoogleMapsScriptProtocol = {}));\n/**\n * Token for the config of the LazyMapsAPILoader. Please provide an object of type {@link\n * LazyMapsAPILoaderConfig}.\n */\nconst LAZY_MAPS_API_CONFIG = new InjectionToken('angular-google-maps LAZY_MAPS_API_CONFIG');\nclass LazyMapsAPILoader extends MapsAPILoader {\n constructor(config = null, w, d, localeId) {\n super();\n this.localeId = localeId;\n this._SCRIPT_ID = 'agmGoogleMapsApiScript';\n this.callbackName = `agmLazyMapsAPILoader`;\n this._config = config || {};\n this._windowRef = w;\n this._documentRef = d;\n }\n load() {\n const window = this._windowRef.getNativeWindow();\n if (window.google && window.google.maps) {\n // Google maps already loaded on the page.\n return Promise.resolve();\n }\n if (this._scriptLoadingPromise) {\n return this._scriptLoadingPromise;\n }\n // this can happen in HMR situations or Stackblitz.io editors.\n const scriptOnPage = this._documentRef.getNativeDocument().getElementById(this._SCRIPT_ID);\n if (scriptOnPage) {\n this._assignScriptLoadingPromise(scriptOnPage);\n return this._scriptLoadingPromise;\n }\n const script = this._documentRef.getNativeDocument().createElement('script');\n script.type = 'text/javascript';\n script.async = true;\n script.defer = true;\n script.id = this._SCRIPT_ID;\n script.src = this._getScriptSrc(this.callbackName);\n this._assignScriptLoadingPromise(script);\n this._documentRef.getNativeDocument().body.appendChild(script);\n return this._scriptLoadingPromise;\n }\n _assignScriptLoadingPromise(scriptElem) {\n this._scriptLoadingPromise = new Promise((resolve, reject) => {\n this._windowRef.getNativeWindow()[this.callbackName] = () => {\n resolve();\n };\n scriptElem.onerror = error => {\n reject(error);\n };\n });\n }\n _getScriptSrc(callbackName) {\n const protocolType = this._config && this._config.protocol || GoogleMapsScriptProtocol.HTTPS;\n let protocol;\n switch (protocolType) {\n case GoogleMapsScriptProtocol.AUTO:\n protocol = '';\n break;\n case GoogleMapsScriptProtocol.HTTP:\n protocol = 'http:';\n break;\n case GoogleMapsScriptProtocol.HTTPS:\n protocol = 'https:';\n break;\n }\n const hostAndPath = this._config.hostAndPath || 'maps.googleapis.com/maps/api/js';\n const queryParams = {\n v: this._config.apiVersion || 'quarterly',\n callback: callbackName,\n key: this._config.apiKey,\n client: this._config.clientId,\n channel: this._config.channel,\n libraries: this._config.libraries,\n region: this._config.region,\n language: this._config.language || (this.localeId !== 'en-US' ? this.localeId : null)\n };\n const params = Object.keys(queryParams).filter(k => queryParams[k] != null).filter(k => {\n // remove empty arrays\n return !Array.isArray(queryParams[k]) || Array.isArray(queryParams[k]) && queryParams[k].length > 0;\n }).map(k => {\n // join arrays as comma seperated strings\n const i = queryParams[k];\n if (Array.isArray(i)) {\n return {\n key: k,\n value: i.join(',')\n };\n }\n return {\n key: k,\n value: queryParams[k]\n };\n }).map(entry => {\n return `${entry.key}=${entry.value}`;\n }).join('&');\n return `${protocol}//${hostAndPath}?${params}`;\n }\n}\nLazyMapsAPILoader.decorators = [{\n type: Injectable\n}];\nLazyMapsAPILoader.ctorParameters = () => [{\n type: undefined,\n decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [LAZY_MAPS_API_CONFIG]\n }]\n}, {\n type: WindowRef\n}, {\n type: DocumentRef\n}, {\n type: String,\n decorators: [{\n type: Inject,\n args: [LOCALE_ID]\n }]\n}];\nclass MarkerManager {\n constructor(_mapsWrapper, _zone) {\n this._mapsWrapper = _mapsWrapper;\n this._zone = _zone;\n this._markers = new Map();\n }\n convertAnimation(uiAnim) {\n return __awaiter(this, void 0, void 0, function* () {\n if (uiAnim === null) {\n return null;\n } else {\n return this._mapsWrapper.getNativeMap().then(() => google.maps.Animation[uiAnim]);\n }\n });\n }\n deleteMarker(markerDirective) {\n const markerPromise = this._markers.get(markerDirective);\n if (markerPromise == null) {\n // marker already deleted\n return Promise.resolve();\n }\n return markerPromise.then(marker => {\n return this._zone.run(() => {\n marker.setMap(null);\n this._markers.delete(markerDirective);\n });\n });\n }\n updateMarkerPosition(marker) {\n return this._markers.get(marker).then(m => m.setPosition({\n lat: marker.latitude,\n lng: marker.longitude\n }));\n }\n updateTitle(marker) {\n return this._markers.get(marker).then(m => m.setTitle(marker.title));\n }\n updateLabel(marker) {\n return this._markers.get(marker).then(m => {\n m.setLabel(marker.label);\n });\n }\n updateDraggable(marker) {\n return this._markers.get(marker).then(m => m.setDraggable(marker.draggable));\n }\n updateIcon(marker) {\n return this._markers.get(marker).then(m => m.setIcon(marker.iconUrl));\n }\n updateOpacity(marker) {\n return this._markers.get(marker).then(m => m.setOpacity(marker.opacity));\n }\n updateVisible(marker) {\n return this._markers.get(marker).then(m => m.setVisible(marker.visible));\n }\n updateZIndex(marker) {\n return this._markers.get(marker).then(m => m.setZIndex(marker.zIndex));\n }\n updateClickable(marker) {\n return this._markers.get(marker).then(m => m.setClickable(marker.clickable));\n }\n updateAnimation(marker) {\n return __awaiter(this, void 0, void 0, function* () {\n const m = yield this._markers.get(marker);\n m.setAnimation(yield this.convertAnimation(marker.animation));\n });\n }\n addMarker(marker) {\n const markerPromise = new Promise(resolve => __awaiter(this, void 0, void 0, function* () {\n return this._mapsWrapper.createMarker({\n position: {\n lat: marker.latitude,\n lng: marker.longitude\n },\n label: marker.label,\n draggable: marker.draggable,\n icon: marker.iconUrl,\n opacity: marker.opacity,\n visible: marker.visible,\n zIndex: marker.zIndex,\n title: marker.title,\n clickable: marker.clickable,\n animation: yield this.convertAnimation(marker.animation)\n }).then(resolve);\n }));\n this._markers.set(marker, markerPromise);\n }\n getNativeMarker(marker) {\n return this._markers.get(marker);\n }\n createEventObservable(eventName, marker) {\n return new Observable(observer => {\n this._markers.get(marker).then(m => m.addListener(eventName, e => this._zone.run(() => observer.next(e))));\n });\n }\n}\nMarkerManager.decorators = [{\n type: Injectable\n}];\nMarkerManager.ctorParameters = () => [{\n type: GoogleMapsAPIWrapper\n}, {\n type: NgZone\n}];\nclass InfoWindowManager {\n constructor(_mapsWrapper, _zone, _markerManager) {\n this._mapsWrapper = _mapsWrapper;\n this._zone = _zone;\n this._markerManager = _markerManager;\n this._infoWindows = new Map();\n }\n deleteInfoWindow(infoWindow) {\n const iWindow = this._infoWindows.get(infoWindow);\n if (iWindow == null) {\n // info window already deleted\n return Promise.resolve();\n }\n return iWindow.then(i => {\n return this._zone.run(() => {\n i.close();\n this._infoWindows.delete(infoWindow);\n });\n });\n }\n setPosition(infoWindow) {\n return this._infoWindows.get(infoWindow).then(i => i.setPosition({\n lat: infoWindow.latitude,\n lng: infoWindow.longitude\n }));\n }\n setZIndex(infoWindow) {\n return this._infoWindows.get(infoWindow).then(i => i.setZIndex(infoWindow.zIndex));\n }\n open(infoWindow) {\n return this._infoWindows.get(infoWindow).then(w => {\n if (infoWindow.hostMarker != null) {\n return this._markerManager.getNativeMarker(infoWindow.hostMarker).then(marker => {\n return this._mapsWrapper.getNativeMap().then(map => w.open(map, marker));\n });\n }\n return this._mapsWrapper.getNativeMap().then(map => w.open(map));\n });\n }\n close(infoWindow) {\n return this._infoWindows.get(infoWindow).then(w => w.close());\n }\n setOptions(infoWindow, options) {\n return this._infoWindows.get(infoWindow).then(i => i.setOptions(options));\n }\n addInfoWindow(infoWindow) {\n const options = {\n content: infoWindow.content,\n maxWidth: infoWindow.maxWidth,\n zIndex: infoWindow.zIndex,\n disableAutoPan: infoWindow.disableAutoPan\n };\n if (typeof infoWindow.latitude === 'number' && typeof infoWindow.longitude === 'number') {\n options.position = {\n lat: infoWindow.latitude,\n lng: infoWindow.longitude\n };\n }\n const infoWindowPromise = this._mapsWrapper.createInfoWindow(options);\n this._infoWindows.set(infoWindow, infoWindowPromise);\n }\n /**\n * Creates a Google Maps event listener for the given InfoWindow as an Observable\n */\n createEventObservable(eventName, infoWindow) {\n return new Observable(observer => {\n this._infoWindows.get(infoWindow).then(i => {\n i.addListener(eventName, e => this._zone.run(() => observer.next(e)));\n });\n });\n }\n}\nInfoWindowManager.decorators = [{\n type: Injectable\n}];\nInfoWindowManager.ctorParameters = () => [{\n type: GoogleMapsAPIWrapper\n}, {\n type: NgZone\n}, {\n type: MarkerManager\n}];\n\n/**\n * Manages all KML Layers for a Google Map instance.\n */\nclass KmlLayerManager {\n constructor(_wrapper, _zone) {\n this._wrapper = _wrapper;\n this._zone = _zone;\n this._layers = new Map();\n }\n /**\n * Adds a new KML Layer to the map.\n */\n addKmlLayer(layer) {\n const newLayer = this._wrapper.getNativeMap().then(m => {\n return new google.maps.KmlLayer({\n clickable: layer.clickable,\n map: m,\n preserveViewport: layer.preserveViewport,\n screenOverlays: layer.screenOverlays,\n suppressInfoWindows: layer.suppressInfoWindows,\n url: layer.url,\n zIndex: layer.zIndex\n });\n });\n this._layers.set(layer, newLayer);\n }\n setOptions(layer, options) {\n this._layers.get(layer).then(l => l.setOptions(options));\n }\n deleteKmlLayer(layer) {\n this._layers.get(layer).then(l => {\n l.setMap(null);\n this._layers.delete(layer);\n });\n }\n /**\n * Creates a Google Maps event listener for the given KmlLayer as an Observable\n */\n createEventObservable(eventName, layer) {\n return new Observable(observer => {\n this._layers.get(layer).then(m => {\n m.addListener(eventName, e => this._zone.run(() => observer.next(e)));\n });\n });\n }\n}\nKmlLayerManager.decorators = [{\n type: Injectable\n}];\nKmlLayerManager.ctorParameters = () => [{\n type: GoogleMapsAPIWrapper\n}, {\n type: NgZone\n}];\n\n/**\n * This class manages Transit and Bicycling Layers for a Google Map instance.\n */\nclass LayerManager {\n constructor(_wrapper) {\n this._wrapper = _wrapper;\n this._layers = new Map();\n }\n /**\n * Adds a transit layer to a map instance.\n * @param layer - a TransitLayer object\n * @param _options - TransitLayerOptions options\n * @returns void\n */\n addTransitLayer(layer) {\n const newLayer = this._wrapper.createTransitLayer();\n this._layers.set(layer, newLayer);\n }\n /**\n * Adds a bicycling layer to a map instance.\n * @param layer - a bicycling layer object\n * @param _options - BicyclingLayer options\n * @returns void\n */\n addBicyclingLayer(layer) {\n const newLayer = this._wrapper.createBicyclingLayer();\n this._layers.set(layer, newLayer);\n }\n /**\n * Deletes a map layer\n * @param layer - the layer to delete\n */\n deleteLayer(layer) {\n return this._layers.get(layer).then(currentLayer => {\n currentLayer.setMap(null);\n this._layers.delete(layer);\n });\n }\n}\nLayerManager.decorators = [{\n type: Injectable\n}];\nLayerManager.ctorParameters = () => [{\n type: GoogleMapsAPIWrapper\n}];\n\n/**\n * When using the NoOpMapsAPILoader, the Google Maps API must be added to the page via a `<script>`\n * Tag.\n * It's important that the Google Maps API script gets loaded first on the page.\n */\nclass NoOpMapsAPILoader {\n load() {\n if (!window.google || !window.google.maps) {\n throw new Error('Google Maps API not loaded on page. Make sure window.google.maps is available!');\n }\n return Promise.resolve();\n }\n}\nfunction createMVCEventObservable(array) {\n const eventNames = ['insert_at', 'remove_at', 'set_at'];\n return fromEventPattern(handler => eventNames.map(eventName => array.addListener(eventName, (index, previous) => handler.apply(array, [{\n newArr: array.getArray(),\n eventName,\n index,\n previous\n }]))), (_handler, evListeners) => evListeners.forEach(evListener => evListener.remove()));\n}\nclass MvcArrayMock {\n constructor() {\n this.vals = [];\n this.listeners = {\n remove_at: [],\n insert_at: [],\n set_at: []\n };\n }\n clear() {\n for (let i = this.vals.length - 1; i >= 0; i--) {\n this.removeAt(i);\n }\n }\n getArray() {\n return [...this.vals];\n }\n getAt(i) {\n return this.vals[i];\n }\n getLength() {\n return this.vals.length;\n }\n insertAt(i, elem) {\n this.vals.splice(i, 0, elem);\n this.listeners.insert_at.forEach(listener => listener(i));\n }\n pop() {\n const deleted = this.vals.pop();\n this.listeners.remove_at.forEach(listener => listener(this.vals.length, deleted));\n return deleted;\n }\n push(elem) {\n this.vals.push(elem);\n this.listeners.insert_at.forEach(listener => listener(this.vals.length - 1));\n return this.vals.length;\n }\n removeAt(i) {\n const deleted = this.vals.splice(i, 1)[0];\n this.listeners.remove_at.forEach(listener => listener(i, deleted));\n return deleted;\n }\n setAt(i, elem) {\n const deleted = this.vals[i];\n this.vals[i] = elem;\n this.listeners.set_at.forEach(listener => listener(i, deleted));\n }\n forEach(callback) {\n this.vals.forEach(callback);\n }\n addListener(eventName, handler) {\n const listenerArr = this.listeners[eventName];\n listenerArr.push(handler);\n return {\n remove: () => {\n listenerArr.splice(listenerArr.indexOf(handler), 1);\n }\n };\n }\n bindTo() {\n throw new Error('Not implemented');\n }\n changed() {\n throw new Error('Not implemented');\n }\n get() {\n throw new Error('Not implemented');\n }\n notify() {\n throw new Error('Not implemented');\n }\n set() {\n throw new Error('Not implemented');\n }\n setValues() {\n throw new Error('Not implemented');\n }\n unbind() {\n throw new Error('Not implemented');\n }\n unbindAll() {\n throw new Error('Not implemented');\n }\n}\nclass PolygonManager {\n constructor(_mapsWrapper, _zone) {\n this._mapsWrapper = _mapsWrapper;\n this._zone = _zone;\n this._polygons = new Map();\n }\n addPolygon(path) {\n const polygonPromise = this._mapsWrapper.createPolygon({\n clickable: path.clickable,\n draggable: path.draggable,\n editable: path.editable,\n fillColor: path.fillColor,\n fillOpacity: path.fillOpacity,\n geodesic: path.geodesic,\n paths: path.paths,\n strokeColor: path.strokeColor,\n strokeOpacity: path.strokeOpacity,\n strokeWeight: path.strokeWeight,\n visible: path.visible,\n zIndex: path.zIndex\n });\n this._polygons.set(path, polygonPromise);\n }\n updatePolygon(polygon) {\n const m = this._polygons.get(polygon);\n if (m == null) {\n return Promise.resolve();\n }\n return m.then(l => this._zone.run(() => {\n l.setPaths(polygon.paths);\n }));\n }\n setPolygonOptions(path, options) {\n return this._polygons.get(path).then(l => {\n l.setOptions(options);\n });\n }\n deletePolygon(paths) {\n const m = this._polygons.get(paths);\n if (m == null) {\n return Promise.resolve();\n }\n return m.then(l => {\n return this._zone.run(() => {\n l.setMap(null);\n this._polygons.delete(paths);\n });\n });\n }\n getPath(polygonDirective) {\n return this._polygons.get(polygonDirective).then(polygon => polygon.getPath().getArray());\n }\n getPaths(polygonDirective) {\n return this._polygons.get(polygonDirective).then(polygon => polygon.getPaths().getArray().map(p => p.getArray()));\n }\n createEventObservable(eventName, path) {\n return new Observable(observer => {\n this._polygons.get(path).then(l => {\n l.addListener(eventName, e => this._zone.run(() => observer.next(e)));\n });\n });\n }\n createPathEventObservable(agmPolygon) {\n return __awaiter(this, void 0, void 0, function* () {\n const polygon = yield this._polygons.get(agmPolygon);\n const paths = polygon.getPaths();\n const pathsChanges$ = createMVCEventObservable(paths);\n return pathsChanges$.pipe(startWith({\n newArr: paths.getArray()\n }),\n // in order to subscribe to them all\n switchMap(parentMVEvent => merge(...\n // rest parameter\n parentMVEvent.newArr.map((chMVC, index) => createMVCEventObservable(chMVC).pipe(map(chMVCEvent => ({\n parentMVEvent,\n chMVCEvent,\n pathIndex: index\n }))))).pipe(\n // start the merged ob with an event signinifing change to parent\n startWith({\n parentMVEvent,\n chMVCEvent: null,\n pathIndex: null\n }))), skip(1),\n // skip the manually added event\n map(({\n parentMVEvent,\n chMVCEvent,\n pathIndex\n }) => {\n let retVal;\n if (!chMVCEvent) {\n retVal = {\n newArr: parentMVEvent.newArr.map(subArr => subArr.getArray().map(latLng => latLng.toJSON())),\n eventName: parentMVEvent.eventName,\n index: parentMVEvent.index\n };\n if (parentMVEvent.previous) {\n retVal.previous = parentMVEvent.previous.getArray();\n }\n } else {\n retVal = {\n newArr: parentMVEvent.newArr.map(subArr => subArr.getArray().map(latLng => latLng.toJSON())),\n pathIndex,\n eventName: chMVCEvent.eventName,\n index: chMVCEvent.index\n };\n if (chMVCEvent.previous) {\n retVal.previous = chMVCEvent.previous;\n }\n }\n return retVal;\n }));\n });\n }\n}\nPolygonManager.decorators = [{\n type: Injectable\n}];\nPolygonManager.ctorParameters = () => [{\n type: GoogleMapsAPIWrapper\n}, {\n type: NgZone\n}];\nclass PolylineManager {\n constructor(_mapsWrapper, _zone) {\n this._mapsWrapper = _mapsWrapper;\n this._zone = _zone;\n this._polylines = new Map();\n }\n static _convertPoints(line) {\n const path = line._getPoints().map(point => {\n return {\n lat: point.latitude,\n lng: point.longitude\n };\n });\n return path;\n }\n static _convertPath(path) {\n const symbolPath = google.maps.SymbolPath[path];\n if (typeof symbolPath === 'number') {\n return symbolPath;\n } else {\n return path;\n }\n }\n static _convertIcons(line) {\n const icons = line._getIcons().map(agmIcon => ({\n fixedRotation: agmIcon.fixedRotation,\n offset: agmIcon.offset,\n repeat: agmIcon.repeat,\n icon: {\n anchor: new google.maps.Point(agmIcon.anchorX, agmIcon.anchorY),\n fillColor: agmIcon.fillColor,\n fillOpacity: agmIcon.fillOpacity,\n path: PolylineManager._convertPath(agmIcon.path),\n rotation: agmIcon.rotation,\n scale: agmIcon.scale,\n strokeColor: agmIcon.strokeColor,\n strokeOpacity: agmIcon.strokeOpacity,\n strokeWeight: agmIcon.strokeWeight\n }\n }));\n // prune undefineds;\n icons.forEach(icon => {\n Object.entries(icon).forEach(([key, val]) => {\n if (typeof val === 'undefined') {\n delete icon[key];\n }\n });\n if (typeof icon.icon.anchor.x === 'undefined' || typeof icon.icon.anchor.y === 'undefined') {\n delete icon.icon.anchor;\n }\n });\n return icons;\n }\n addPolyline(line) {\n const polylinePromise = this._mapsWrapper.getNativeMap().then(() => [PolylineManager._convertPoints(line), PolylineManager._convertIcons(line)]).then(([path, icons]) => this._mapsWrapper.createPolyline({\n clickable: line.clickable,\n draggable: line.draggable,\n editable: line.editable,\n geodesic: line.geodesic,\n strokeColor: line.strokeColor,\n strokeOpacity: line.strokeOpacity,\n strokeWeight: line.strokeWeight,\n visible: line.visible,\n zIndex: line.zIndex,\n path,\n icons\n }));\n this._polylines.set(line, polylinePromise);\n }\n updatePolylinePoints(line) {\n const path = PolylineManager._convertPoints(line);\n const m = this._polylines.get(line);\n if (m == null) {\n return Promise.resolve();\n }\n return m.then(l => this._zone.run(() => l.setPath(path)));\n }\n updateIconSequences(line) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._mapsWrapper.getNativeMap();\n const icons = PolylineManager._convertIcons(line);\n const m = this._polylines.get(line);\n if (m == null) {\n return;\n }\n return m.then(l => this._zone.run(() => l.setOptions({\n icons\n })));\n });\n }\n setPolylineOptions(line, options) {\n return this._polylines.get(line).then(l => {\n l.setOptions(options);\n });\n }\n deletePolyline(line) {\n const m = this._polylines.get(line);\n if (m == null) {\n return Promise.resolve();\n }\n return m.then(l => {\n return this._zone.run(() => {\n l.setMap(null);\n this._polylines.delete(line);\n });\n });\n }\n getMVCPath(agmPolyline) {\n return __awaiter(this, void 0, void 0, function* () {\n const polyline = yield this._polylines.get(agmPolyline);\n return polyline.getPath();\n });\n }\n getPath(agmPolyline) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.getMVCPath(agmPolyline)).getArray();\n });\n }\n createEventObservable(eventName, line) {\n return new Observable(observer => {\n this._polylines.get(line).then(l => {\n l.addListener(eventName, e => this._zone.run(() => observer.next(e)));\n });\n });\n }\n createPathEventObservable(line) {\n return __awaiter(this, void 0, void 0, function* () {\n const mvcPath = yield this.getMVCPath(line);\n return createMVCEventObservable(mvcPath);\n });\n }\n}\nPolylineManager.decorators = [{\n type: Injectable\n}];\nPolylineManager.ctorParameters = () => [{\n type: GoogleMapsAPIWrapper\n}, {\n type: NgZone\n}];\nclass RectangleManager {\n constructor(_apiWrapper, _zone) {\n this._apiWrapper = _apiWrapper;\n this._zone = _zone;\n this._rectangles = new Map();\n }\n addRectangle(rectangle) {\n this._apiWrapper.getNativeMap().then(() => this._rectangles.set(rectangle, this._apiWrapper.createRectangle({\n bounds: {\n north: rectangle.north,\n east: rectangle.east,\n south: rectangle.south,\n west: rectangle.west\n },\n clickable: rectangle.clickable,\n draggable: rectangle.draggable,\n editable: rectangle.editable,\n fillColor: rectangle.fillColor,\n fillOpacity: rectangle.fillOpacity,\n strokeColor: rectangle.strokeColor,\n strokeOpacity: rectangle.strokeOpacity,\n strokePosition: google.maps.StrokePosition[rectangle.strokePosition],\n strokeWeight: rectangle.strokeWeight,\n visible: rectangle.visible,\n zIndex: rectangle.zIndex\n })));\n }\n /**\n * Removes the given rectangle from the map.\n */\n removeRectangle(rectangle) {\n return this._rectangles.get(rectangle).then(r => {\n r.setMap(null);\n this._rectangles.delete(rectangle);\n });\n }\n setOptions(rectangle, options) {\n return this._rectangles.get(rectangle).then(r => {\n const actualStrokePosition = options.strokePosition;\n options.strokePosition = google.maps.StrokePosition[actualStrokePosition];\n r.setOptions(options);\n });\n }\n getBounds(rectangle) {\n return this._rectangles.get(rectangle).then(r => r.getBounds());\n }\n setBounds(rectangle) {\n return this._rectangles.get(rectangle).then(r => {\n return r.setBounds({\n north: rectangle.north,\n east: rectangle.east,\n south: rectangle.south,\n west: rectangle.west\n });\n });\n }\n setEditable(rectangle) {\n return this._rectangles.get(rectangle).then(r => {\n return r.setEditable(rectangle.editable);\n });\n }\n setDraggable(rectangle) {\n return this._rectangles.get(rectangle).then(r => {\n return r.setDraggable(rectangle.draggable);\n });\n }\n setVisible(rectangle) {\n return this._rectangles.get(rectangle).then(r => {\n return r.setVisible(rectangle.visible);\n });\n }\n createEventObservable(eventName, rectangle) {\n return new Observable(subsrciber => {\n let listener = null;\n this._rectangles.get(rectangle).then(r => {\n listener = r.addListener(eventName, e => this._zone.run(() => subsrciber.next(e)));\n });\n return () => {\n if (listener !== null) {\n listener.remove();\n }\n };\n });\n }\n}\nRectangleManager.decorators = [{\n type: Injectable\n}];\nRectangleManager.ctorParameters = () => [{\n type: GoogleMapsAPIWrapper\n}, {\n type: NgZone\n}];\nlet layerId = 0;\n/*\n * This directive adds a bicycling layer to a google map instance\n * <agm-bicycling-layer [visible]=\"true|false\"> <agm-bicycling-layer>\n * */\nclass AgmBicyclingLayer {\n constructor(_manager) {\n this._manager = _manager;\n this._addedToManager = false;\n this._id = (layerId++).toString();\n /**\n * Hide/show bicycling layer\n */\n this.visible = true;\n }\n ngOnInit() {\n if (this._addedToManager) {\n return;\n }\n this._manager.addBicyclingLayer(this);\n this._addedToManager = true;\n }\n /** @internal */\n id() {\n return this._id;\n }\n /** @internal */\n toString() {\n return `AgmBicyclingLayer-${this._id.toString()}`;\n }\n /** @internal */\n ngOnDestroy() {\n this._manager.deleteLayer(this);\n }\n}\nAgmBicyclingLayer.decorators = [{\n type: Directive,\n args: [{\n selector: 'agm-bicycling-layer'\n }]\n}];\nAgmBicyclingLayer.ctorParameters = () => [{\n type: LayerManager\n}];\nAgmBicyclingLayer.propDecorators = {\n visible: [{\n type: Input\n }]\n};\nclass AgmCircle {\n constructor(_manager) {\n this._manager = _manager;\n /**\n * Indicates whether this Circle handles mouse events. Defaults to true.\n */\n this.clickable = true;\n /**\n * If set to true, the user can drag this circle over the map. Defaults to false.\n */\n // tslint:disable-next-line:no-input-rename\n this.draggable = false;\n /**\n * If set to true, the user can edit this circle by dragging the control points shown at\n * the center and around the circumference of the circle. Defaults to false.\n */\n this.editable = false;\n /**\n * The radius in meters on the Earth's surface.\n */\n this.radius = 0;\n /**\n * The stroke position. Defaults to CENTER.\n * This property is not supported on Internet Explorer 8 and earlier.\n */\n this.strokePosition = 'CENTER';\n /**\n * The stroke width in pixels.\n */\n this.strokeWeight = 0;\n /**\n * Whether this circle is visible on the map. Defaults to true.\n */\n this.visible = true;\n /**\n * This event is fired when the circle's center is changed.\n */\n this.centerChange = new EventEmitter();\n /**\n * This event emitter gets emitted when the user clicks on the circle.\n */\n this.circleClick = new EventEmitter();\n /**\n * This event emitter gets emitted when the user clicks on the circle.\n */\n this.circleDblClick = new EventEmitter();\n /**\n * This event is repeatedly fired while the user drags the circle.\n */\n // tslint:disable-next-line: no-output-native\n this.drag = new EventEmitter();\n /**\n * This event is fired when the user stops dragging the circle.\n */\n this.dragEnd = new EventEmitter();\n /**\n * This event is fired when the user starts dragging the circle.\n */\n this.dragStart = new EventEmitter();\n /**\n * This event is fired when the DOM mousedown event is fired on the circle.\n */\n this.mouseDown = new EventEmitter();\n /**\n * This event is fired when the DOM mousemove event is fired on the circle.\n */\n this.mouseMove = new EventEmitter();\n /**\n * This event is fired on circle mouseout.\n */\n this.mouseOut = new EventEmitter();\n /**\n * This event is fired on circle mouseover.\n */\n this.mouseOver = new EventEmitter();\n /**\n * This event is fired when the DOM mouseup event is fired on the circle.\n */\n this.mouseUp = new EventEmitter();\n /**\n * This event is fired when the circle's radius is changed.\n */\n this.radiusChange = new EventEmitter();\n /**\n * This event is fired when the circle is right-clicked on.\n */\n this.rightClick = new EventEmitter();\n this._circleAddedToManager = false;\n this._eventSubscriptions = [];\n }\n /** @internal */\n ngOnInit() {\n this._manager.addCircle(this);\n this._circleAddedToManager = true;\n this._registerEventListeners();\n }\n /** @internal */\n ngOnChanges(changes) {\n if (!this._circleAddedToManager) {\n return;\n }\n // tslint:disable: no-string-literal\n if (changes['latitude'] || changes['longitude']) {\n this._manager.setCenter(this);\n }\n if (changes['editable']) {\n this._manager.setEditable(this);\n }\n if (changes['draggable']) {\n this._manager.setDraggable(this);\n }\n if (changes['visible']) {\n this._manager.setVisible(this);\n }\n if (changes['radius']) {\n this._manager.setRadius(this);\n }\n // tslint:enable: no-string-literal\n this._updateCircleOptionsChanges(changes);\n }\n _updateCircleOptionsChanges(changes) {\n const options = {};\n const optionKeys = Object.keys(changes).filter(k => AgmCircle._mapOptions.indexOf(k) !== -1);\n optionKeys.forEach(k => {\n options[k] = changes[k].currentValue;\n });\n if (optionKeys.length > 0) {\n this._manager.setOptions(this, options);\n }\n }\n _registerEventListeners() {\n const events = new Map();\n events.set('center_changed', this.centerChange);\n events.set('click', this.circleClick);\n events.set('dblclick', this.circleDblClick);\n events.set('drag', this.drag);\n events.set('dragend', this.dragEnd);\n events.set('dragstart', this.dragStart);\n events.set('mousedown', this.mouseDown);\n events.set('mousemove', this.mouseMove);\n events.set('mouseout', this.mouseOut);\n events.set('mouseover', this.mouseOver);\n events.set('mouseup', this.mouseUp);\n events.set('radius_changed', this.radiusChange);\n events.set('rightclick', this.rightClick);\n events.forEach((eventEmitter, eventName) => {\n this._eventSubscriptions.push(this._manager.createEventObservable(eventName, this).subscribe(value => {\n switch (eventName) {\n case 'radius_changed':\n this._manager.getRadius(this).then(radius => eventEmitter.emit(radius));\n break;\n case 'center_changed':\n this._manager.getCenter(this).then(center => eventEmitter.emit({\n lat: center.lat(),\n lng: center.lng()\n }));\n break;\n default:\n eventEmitter.emit(value);\n }\n }));\n });\n }\n /** @internal */\n ngOnDestroy() {\n this._eventSubscriptions.forEach(s => s.unsubscribe());\n this._eventSubscriptions = null;\n this._manager.removeCircle(this);\n }\n /**\n * Gets the LatLngBounds of this Circle.\n */\n getBounds() {\n return this._manager.getBounds(this);\n }\n getCenter() {\n return this._manager.getCenter(this);\n }\n}\nAgmCircle._mapOptions = ['fillColor', 'fillOpacity', 'strokeColor', 'strokeOpacity', 'strokePosition', 'strokeWeight', 'visible', 'zIndex', 'clickable'];\nAgmCircle.decorators = [{\n type: Directive,\n args: [{\n selector: 'agm-circle'\n }]\n}];\nAgmCircle.ctorParameters = () => [{\n type: CircleManager\n}];\nAgmCircle.propDecorators = {\n latitude: [{\n type: Input\n }],\n longitude: [{\n type: Input\n }],\n clickable: [{\n type: Input\n }],\n draggable: [{\n type: Input,\n args: ['circleDraggable']\n }],\n editable: [{\n type: Input\n }],\n fillColor: [{\n type: Input\n }],\n fillOpacity: [{\n type: Input\n }],\n radius: [{\n type: Input\n }],\n strokeColor: [{\n type: Input\n }],\n strokeOpacity: [{\n type: Input\n }],\n strokePosition: [{\n type: Input\n }],\n strokeWeight: [{\n type: Input\n }],\n visible: [{\n type: Input\n }],\n zIndex: [{\n type: Input\n }],\n centerChange: [{\n type: Output\n }],\n circleClick: [{\n type: Output\n }],\n circleDblClick: [{\n type: Output\n }],\n drag: [{\n type: Output\n }],\n dragEnd: [{\n type: Output\n }],\n dragStart: [{\n type: Output\n }],\n mouseDown: [{\n type: Output\n }],\n mouseMove: [{\n type: Output\n }],\n mouseOut: [{\n type: Output\n }],\n mouseOver: [{\n type: Output\n }],\n mouseUp: [{\n type: Output\n }],\n radiusChange: [{\n type: Output\n }],\n rightClick: [{\n type: Output\n }]\n};\nlet layerId$1 = 0;\n/**\n * AgmDataLayer enables the user to add data layers to the map.\n *\n * ### Example\n * ```typescript\n * import { Component } from 'angular2/core';\n * import { AgmMap, AgmDataLayer } from\n * 'angular-google-maps/core';\n *\n * @Component({\n * selector: 'my-map-cmp',\n * directives: [AgmMap, AgmDataLayer],\n * styles: [`\n * .agm-container {\n * height: 300px;\n * }\n * `],\n * template: `\n * <agm-map [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\">\n * \t <agm-data-layer [geoJson]=\"geoJsonObject\" (layerClick)=\"clicked($event)\" [style]=\"styleFunc\">\n * \t </agm-data-layer>\n * </agm-map>\n * `\n * })\n * export class MyMapCmp {\n * lat: number = -25.274449;\n * lng: number = 133.775060;\n * zoom: number = 5;\n *\n * clicked(clickEvent) {\n * console.log(clickEvent);\n * }\n *\n * styleFunc(feature) {\n * return ({\n * clickable: false,\n * fillColor: feature.getProperty('color'),\n * strokeWeight: 1\n * });\n * }\n *\n * geoJsonObject: Object = {\n * \"type\": \"FeatureCollection\",\n * \"features\": [\n * {\n * \"type\": \"Feature\",\n * \"properties\": {\n * \"letter\": \"G\",\n * \"color\": \"blue\",\n * \"rank\": \"7\",\n * \"ascii\": \"71\"\n * },\n * \"geometry\": {\n * \"type\": \"Polygon\",\n * \"coordinates\": [\n * [\n * [123.61, -22.14], [122.38, -21.73], [121.06, -21.69], [119.66, -22.22], [119.00, -23.40],\n * [118.65, -24.76], [118.43, -26.07], [118.78, -27.56], [119.22, -28.57], [120.23, -29.49],\n * [121.77, -29.87], [123.57, -29.64], [124.45, -29.03], [124.71, -27.95], [124.80, -26.70],\n * [124.80, -25.60], [123.61, -25.64], [122.56, -25.64], [121.72, -25.72], [121.81, -26.62],\n * [121.86, -26.98], [122.60, -26.90], [123.57, -27.05], [123.57, -27.68], [123.35, -28.18],\n * [122.51, -28.38], [121.77, -28.26], [121.02, -27.91], [120.49, -27.21], [120.14, -26.50],\n * [120.10, -25.64], [120.27, -24.52], [120.67, -23.68], [121.72, -23.32], [122.43, -23.48],\n * [123.04, -24.04], [124.54, -24.28], [124.58, -23.20], [123.61, -22.14]\n * ]\n * ]\n * }\n * },\n * {\n * \"type\": \"Feature\",\n * \"properties\": {\n * \"letter\": \"o\",\n * \"color\": \"red\",\n * \"rank\": \"15\",\n * \"ascii\": \"111\"\n * },\n * \"geometry\": {\n * \"type\": \"Polygon\",\n * \"coordinates\": [\n * [\n * [128.84, -25.76], [128.18, -25.60], [127.96, -25.52], [127.88, -25.52], [127.70, -25.60],\n * [127.26, -25.79], [126.60, -26.11], [126.16, -26.78], [126.12, -27.68], [126.21, -28.42],\n * [126.69, -29.49], [127.74, -29.80], [128.80, -29.72], [129.41, -29.03], [129.72, -27.95],\n * [129.68, -27.21], [129.33, -26.23], [128.84, -25.76]\n * ],\n * [\n * [128.45, -27.44], [128.32, -26.94], [127.70, -26.82], [127.35, -27.05], [127.17, -27.80],\n * [127.57, -28.22], [128.10, -28.42], [128.49, -27.80], [128.45, -27.44]\n * ]\n * ]\n * }\n * },\n * {\n * \"type\": \"Feature\",\n * \"properties\": {\n * \"letter\": \"o\",\n * \"color\": \"yellow\",\n * \"rank\": \"15\",\n * \"ascii\": \"111\"\n * },\n * \"geometry\": {\n * \"type\": \"Polygon\",\n * \"coordinates\": [\n * [\n * [131.87, -25.76], [131.35, -26.07], [130.95, -26.78], [130.82, -27.64], [130.86, -28.53],\n * [131.26, -29.22], [131.92, -29.76], [132.45, -29.87], [133.06, -29.76], [133.72, -29.34],\n * [134.07, -28.80], [134.20, -27.91], [134.07, -27.21], [133.81, -26.31], [133.37, -25.83],\n * [132.71, -25.64], [131.87, -25.76]\n * ],\n * [\n * [133.15, -27.17], [132.71, -26.86], [132.09, -26.90], [131.74, -27.56], [131.79, -28.26],\n * [132.36, -28.45], [132.93, -28.34], [133.15, -27.76], [133.15, -27.17]\n * ]\n * ]\n * }\n * },\n * {\n * \"type\": \"Feature\",\n * \"properties\": {\n * \"letter\": \"g\",\n * \"color\": \"blue\",\n * \"rank\": \"7\",\n * \"ascii\": \"103\"\n * },\n * \"geometry\": {\n * \"type\": \"Polygon\",\n * \"coordinates\": [\n * [\n * [138.12, -25.04], [136.84, -25.16], [135.96, -25.36], [135.26, -25.99], [135, -26.90],\n * [135.04, -27.91], [135.26, -28.88], [136.05, -29.45], [137.02, -29.49], [137.81, -29.49],\n * [137.94, -29.99], [137.90, -31.20], [137.85, -32.24], [136.88, -32.69], [136.45, -32.36],\n * [136.27, -31.80], [134.95, -31.84], [135.17, -32.99], [135.52, -33.43], [136.14, -33.76],\n * [137.06, -33.83], [138.12, -33.65], [138.86, -33.21], [139.30, -32.28], [139.30, -31.24],\n * [139.30, -30.14], [139.21, -28.96], [139.17, -28.22], [139.08, -27.41], [139.08, -26.47],\n * [138.99, -25.40], [138.73, -25.00], [138.12, -25.04]\n * ],\n * [\n * [137.50, -26.54], [136.97, -26.47], [136.49, -26.58], [136.31, -27.13], [136.31, -27.72],\n * [136.58, -27.99], [137.50, -28.03], [137.68, -27.68], [137.59, -26.78], [137.50, -26.54]\n * ]\n * ]\n * }\n * },\n * {\n * \"type\": \"Feature\",\n * \"properties\": {\n * \"letter\": \"l\",\n * \"color\": \"green\",\n * \"rank\": \"12\",\n * \"ascii\": \"108\"\n * },\n * \"geometry\": {\n * \"type\": \"Polygon\",\n * \"coordinates\": [\n * [\n * [140.14, -21.04], [140.31, -29.42], [141.67, -29.49], [141.59, -20.92], [140.14, -21.04]\n * ]\n * ]\n * }\n * },\n * {\n * \"type\": \"Feature\",\n * \"properties\": {\n * \"letter\": \"e\",\n * \"color\": \"red\",\n * \"rank\": \"5\",\n * \"ascii\": \"101\"\n * },\n * \"geometry\": {\n * \"type\": \"Polygon\",\n * \"coordinates\": [\n * [\n * [144.14, -27.41], [145.67, -27.52], [146.86, -27.09], [146.82, -25.64], [146.25, -25.04],\n * [145.45, -24.68], [144.66, -24.60], [144.09, -24.76], [143.43, -25.08], [142.99, -25.40],\n * [142.64, -26.03], [142.64, -27.05], [142.64, -28.26], [143.30, -29.11], [144.18, -29.57],\n * [145.41, -29.64], [146.46, -29.19], [146.64, -28.72], [146.82, -28.14], [144.84, -28.42],\n * [144.31, -28.26], [144.14, -27.41]\n * ],\n * [\n * [144.18, -26.39], [144.53, -26.58], [145.19, -26.62], [145.72, -26.35], [145.81, -25.91],\n * [145.41, -25.68], [144.97, -25.68], [144.49, -25.64], [144, -25.99], [144.18, -26.39]\n * ]\n * ]\n * }\n * }\n * ]\n * };\n * }\n * ```\n */\nclass AgmDataLayer {\n constructor(_manager) {\n this._manager = _manager;\n this._addedToManager = false;\n this._id = (layerId$1++).toString();\n this._subscriptions = [];\n /**\n * This event is fired when a feature in the layer is clicked.\n */\n this.layerClick = new EventEmitter();\n /**\n * The geoJson to be displayed\n */\n this.geoJson = null;\n }\n ngOnInit() {\n if (this._addedToManager) {\n return;\n }\n this._manager.addDataLayer(this);\n this._addedToManager = true;\n this._addEventListeners();\n }\n _addEventListeners() {\n const listeners = [{\n name: 'click',\n handler: ev => this.layerClick.emit(ev)\n }];\n listeners.forEach(obj => {\n const os = this._manager.createEventObservable(obj.name, this).subscribe(obj.handler);\n this._subscriptions.push(os);\n });\n }\n /** @internal */\n id() {\n return this._id;\n }\n /** @internal */\n toString() {\n return `AgmDataLayer-${this._id.toString()}`;\n }\n /** @internal */\n ngOnDestroy() {\n this._manager.deleteDataLayer(this);\n // unsubscribe all registered observable subscriptions\n this._subscriptions.forEach(s => s.unsubscribe());\n }\n /** @internal */\n ngOnChanges(changes) {\n if (!this._addedToManager) {\n return;\n }\n // tslint:disable-next-line: no-string-literal\n const geoJsonChange = changes['geoJson'];\n if (geoJsonChange) {\n this._manager.updateGeoJson(this, geoJsonChange.currentValue);\n }\n const dataOptions = AgmDataLayer._dataOptionsAttributes.reduce((options, k) => options[k] = changes.hasOwnProperty(k) ? changes[k].currentValue : this[k], {});\n this._manager.setDataOptions(this, dataOptions);\n }\n}\nAgmDataLayer._dataOptionsAttributes = ['style'];\nAgmDataLayer.decorators = [{\n type: Directive,\n args: [{\n selector: 'agm-data-layer'\n }]\n}];\nAgmDataLayer.ctorParameters = () => [{\n type: DataLayerManager\n}];\nAgmDataLayer.propDecorators = {\n layerClick: [{\n type: Output\n }],\n geoJson: [{\n type: Input\n }],\n style: [{\n type: Input\n }]\n};\n\n/**\n * Adds the given directive to the auto fit bounds feature when the value is true.\n * To make it work with you custom AGM component, you also have to implement the {@link FitBoundsAccessor} abstract class.\n * @example\n * <agm-marker [agmFitBounds]=\"true\"></agm-marker>\n */\nclass AgmFitBounds {\n constructor(_fitBoundsAccessor, _fitBoundsService) {\n this._fitBoundsAccessor = _fitBoundsAccessor;\n this._fitBoundsService = _fitBoundsService;\n /**\n * If the value is true, the element gets added to the bounds of the map.\n * Default: true.\n */\n this.agmFitBounds = true;\n this._destroyed$ = new Subject();\n this._latestFitBoundsDetails = null;\n }\n /**\n * @internal\n */\n ngOnChanges() {\n this._updateBounds();\n }\n /**\n * @internal\n */\n ngOnInit() {\n this._fitBoundsAccessor.getFitBoundsDetails$().pipe(distinctUntilChanged((x, y) => x.latLng.lat === y.latLng.lat && x.latLng.lng === y.latLng.lng), takeUntil(this._destroyed$)).subscribe(details => this._updateBounds(details));\n }\n /*\n Either the location changed, or visible status changed.\n Possible state changes are\n invisible -> visible\n visible -> invisible\n visible -> visible (new location)\n */\n _updateBounds(newFitBoundsDetails) {\n // either visibility will change, or location, so remove the old one anyway\n if (this._latestFitBoundsDetails) {\n this._fitBoundsService.removeFromBounds(this._latestFitBoundsDetails.latLng);\n // don't set latestFitBoundsDetails to null, because we can toggle visibility from\n // true -> false -> true, in which case we still need old value cached here\n }\n if (newFitBoundsDetails) {\n this._latestFitBoundsDetails = newFitBoundsDetails;\n }\n if (!this._latestFitBoundsDetails) {\n return;\n }\n if (this.agmFitBounds === true) {\n this._fitBoundsService.addToBounds(this._latestFitBoundsDetails.latLng);\n }\n }\n /**\n * @internal\n */\n ngOnDestroy() {\n this._destroyed$.next();\n this._destroyed$.complete();\n if (this._latestFitBoundsDetails !== null) {\n this._fitBoundsService.removeFromBounds(this._latestFitBoundsDetails.latLng);\n }\n }\n}\nAgmFitBounds.decorators = [{\n type: Directive,\n args: [{\n selector: '[agmFitBounds]'\n }]\n}];\nAgmFitBounds.ctorParameters = () => [{\n type: FitBoundsAccessor,\n decorators: [{\n type: Self\n }]\n}, {\n type: FitBoundsService\n}];\nAgmFitBounds.propDecorators = {\n agmFitBounds: [{\n type: Input\n }]\n};\nlet infoWindowId = 0;\n/**\n * AgmInfoWindow renders a info window inside a {@link AgmMarker} or standalone.\n *\n * ### Example\n * ```typescript\n * import { Component } from '@angular/core';\n *\n * @Component({\n * selector: 'my-map-cmp',\n * styles: [`\n * .agm-map-container {\n * height: 300px;\n * }\n * `],\n * template: `\n * <agm-map [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\">\n * <agm-marker [latitude]=\"lat\" [longitude]=\"lng\" [label]=\"'M'\">\n * <agm-info-window [disableAutoPan]=\"true\">\n * Hi, this is the content of the <strong>info window</strong>\n * </agm-info-window>\n * </agm-marker>\n * </agm-map>\n * `\n * })\n * ```\n */\nclass AgmInfoWindow {\n constructor(_infoWindowManager, _el) {\n this._infoWindowManager = _infoWindowManager;\n this._el = _el;\n /**\n * Sets the open state for the InfoWindow. You can also call the open() and close() methods.\n */\n this.isOpen = false;\n /**\n * Emits an event when the info window is closed.\n */\n this.infoWindowClose = new EventEmitter();\n this._infoWindowAddedToManager = false;\n this._id = (infoWindowId++).toString();\n }\n ngOnInit() {\n this.content = this._el.nativeElement.querySelector('.agm-info-window-content');\n this._infoWindowManager.addInfoWindow(this);\n this._infoWindowAddedToManager = true;\n this._updateOpenState();\n this._registerEventListeners();\n }\n /** @internal */\n ngOnChanges(changes) {\n if (!this._infoWindowAddedToManager) {\n return;\n }\n // tslint:disable: no-string-literal\n if ((changes['latitude'] || changes['longitude']) && typeof this.latitude === 'number' && typeof this.longitude === 'number') {\n this._infoWindowManager.setPosition(this);\n }\n if (changes['zIndex']) {\n this._infoWindowManager.setZIndex(this);\n }\n if (changes['isOpen']) {\n this._updateOpenState();\n }\n this._setInfoWindowOptions(changes);\n }\n // tslint:enable: no-string-literal\n _registerEventListeners() {\n this._infoWindowManager.createEventObservable('closeclick', this).subscribe(() => {\n this.isOpen = false;\n this.infoWindowClose.emit();\n });\n }\n _updateOpenState() {\n this.isOpen ? this.open() : this.close();\n }\n _setInfoWindowOptions(changes) {\n const options = {};\n const optionKeys = Object.keys(changes).filter(k => AgmInfoWindow._infoWindowOptionsInputs.indexOf(k) !== -1);\n optionKeys.forEach(k => {\n options[k] = changes[k].currentValue;\n });\n this._infoWindowManager.setOptions(this, options);\n }\n /**\n * Opens the info window.\n */\n open() {\n return this._infoWindowManager.open(this);\n }\n /**\n * Closes the info window.\n */\n close() {\n return this._infoWindowManager.close(this).then(() => {\n this.infoWindowClose.emit();\n });\n }\n /** @internal */\n id() {\n return this._id;\n }\n /** @internal */\n toString() {\n return 'AgmInfoWindow-' + this._id.toString();\n }\n /** @internal */\n ngOnDestroy() {\n this._infoWindowManager.deleteInfoWindow(this);\n }\n}\nAgmInfoWindow._infoWindowOptionsInputs = ['disableAutoPan', 'maxWidth'];\nAgmInfoWindow.decorators = [{\n type: Component,\n args: [{\n selector: 'agm-info-window',\n template: `<div class='agm-info-window-content'>\n <ng-content></ng-content>\n </div>\n `\n }]\n}];\nAgmInfoWindow.ctorParameters = () => [{\n type: InfoWindowManager\n}, {\n type: ElementRef\n}];\nAgmInfoWindow.propDecorators = {\n latitude: [{\n type: Input\n }],\n longitude: [{\n type: Input\n }],\n disableAutoPan: [{\n type: Input\n }],\n zIndex: [{\n type: Input\n }],\n maxWidth: [{\n type: Input\n }],\n isOpen: [{\n type: Input\n }],\n infoWindowClose: [{\n type: Output\n }]\n};\nlet layerId$2 = 0;\nclass AgmKmlLayer {\n constructor(_manager) {\n this._manager = _manager;\n this._addedToManager = false;\n this._id = (layerId$2++).toString();\n this._subscriptions = [];\n /**\n * If true, the layer receives mouse events. Default value is true.\n */\n this.clickable = true;\n /**\n * By default, the input map is centered and zoomed to the bounding box of the contents of the\n * layer.\n * If this option is set to true, the viewport is left unchanged, unless the map's center and zoom\n * were never set.\n */\n this.preserveViewport = false;\n /**\n * Whether to render the screen overlays. Default true.\n */\n this.screenOverlays = true;\n /**\n * Suppress the rendering of info windows when layer features are clicked.\n */\n this.suppressInfoWindows = false;\n /**\n * The URL of the KML document to display.\n */\n this.url = null;\n /**\n * The z-index of the layer.\n */\n this.zIndex = null;\n /**\n * This event is fired when a feature in the layer is clicked.\n */\n this.layerClick = new EventEmitter();\n /**\n * This event is fired when the KML layers default viewport has changed.\n */\n this.defaultViewportChange = new EventEmitter();\n /**\n * This event is fired when the KML layer has finished loading.\n * At this point it is safe to read the status property to determine if the layer loaded\n * successfully.\n */\n this.statusChange = new EventEmitter();\n }\n ngOnInit() {\n if (this._addedToManager) {\n return;\n }\n this._manager.addKmlLayer(this);\n this._addedToManager = true;\n this._addEventListeners();\n }\n ngOnChanges(changes) {\n if (!this._addedToManager) {\n return;\n }\n this._updatePolygonOptions(changes);\n }\n _updatePolygonOptions(changes) {\n const options = Object.keys(changes).filter(k => AgmKmlLayer._kmlLayerOptions.indexOf(k) !== -1).reduce((obj, k) => {\n obj[k] = changes[k].currentValue;\n return obj;\n }, {});\n if (Object.keys(options).length > 0) {\n this._manager.setOptions(this, options);\n }\n }\n _addEventListeners() {\n const listeners = [{\n name: 'click',\n handler: ev => this.layerClick.emit(ev)\n }, {\n name: 'defaultviewport_changed',\n handler: () => this.defaultViewportChange.emit()\n }, {\n name: 'status_changed',\n handler: () => this.statusChange.emit()\n }];\n listeners.forEach(obj => {\n const os = this._manager.createEventObservable(obj.name, this).subscribe(obj.handler);\n this._subscriptions.push(os);\n });\n }\n /** @internal */\n id() {\n return this._id;\n }\n /** @internal */\n toString() {\n return `AgmKmlLayer-${this._id.toString()}`;\n }\n /** @internal */\n ngOnDestroy() {\n this._manager.deleteKmlLayer(this);\n // unsubscribe all registered observable subscriptions\n this._subscriptions.forEach(s => s.unsubscribe());\n }\n}\nAgmKmlLayer._kmlLayerOptions = ['clickable', 'preserveViewport', 'screenOverlays', 'suppressInfoWindows', 'url', 'zIndex'];\nAgmKmlLayer.decorators = [{\n type: Directive,\n args: [{\n selector: 'agm-kml-layer'\n }]\n}];\nAgmKmlLayer.ctorParameters = () => [{\n type: KmlLayerManager\n}];\nAgmKmlLayer.propDecorators = {\n clickable: [{\n type: Input\n }],\n preserveViewport: [{\n type: Input\n }],\n screenOverlays: [{\n type: Input\n }],\n suppressInfoWindows: [{\n type: Input\n }],\n url: [{\n type: Input\n }],\n zIndex: [{\n type: Input\n }],\n layerClick: [{\n type: Output\n }],\n defaultViewportChange: [{\n type: Output\n }],\n statusChange: [{\n type: Output\n }]\n};\nclass AgmMapControl {}\nAgmMapControl.decorators = [{\n type: Directive\n}];\nAgmMapControl.propDecorators = {\n position: [{\n type: Input\n }]\n};\nclass AgmFullscreenControl extends AgmMapControl {\n getOptions() {\n return {\n fullscreenControl: true,\n fullscreenControlOptions: {\n position: this.position && google.maps.ControlPosition[this.position]\n }\n };\n }\n}\nAgmFullscreenControl.decorators = [{\n type: Directive,\n args: [{\n selector: 'agm-map agm-fullscreen-control',\n providers: [{\n provide: AgmMapControl,\n useExisting: AgmFullscreenControl\n }]\n }]\n}];\nclass AgmMapTypeControl extends AgmMapControl {\n getOptions() {\n return {\n mapTypeControl: true,\n mapTypeControlOptions: {\n position: this.position && google.maps.ControlPosition[this.position],\n style: this.style && google.maps.MapTypeControlStyle[this.style],\n mapTypeIds: this.mapTypeIds && this.mapTypeIds.map(mapTypeId => google.maps.MapTypeId[mapTypeId])\n }\n };\n }\n}\nAgmMapTypeControl.decorators = [{\n type: Directive,\n args: [{\n selector: 'agm-map agm-map-type-control',\n providers: [{\n provide: AgmMapControl,\n useExisting: AgmMapTypeControl\n }]\n }]\n}];\nAgmMapTypeControl.propDecorators = {\n mapTypeIds: [{\n type: Input\n }],\n style: [{\n type: Input\n }]\n};\nclass AgmPanControl extends AgmMapControl {\n getOptions() {\n return {\n panControl: true,\n panControlOptions: {\n position: this.position && google.maps.ControlPosition[this.position]\n }\n };\n }\n}\nAgmPanControl.decorators = [{\n type: Directive,\n args: [{\n selector: 'agm-map agm-pan-control',\n providers: [{\n provide: AgmMapControl,\n useExisting: AgmPanControl\n }]\n }]\n}];\nclass AgmRotateControl extends AgmMapControl {\n getOptions() {\n return {\n rotateControl: true,\n rotateControlOptions: {\n position: this.position && google.maps.ControlPosition[this.position]\n }\n };\n }\n}\nAgmRotateControl.decorators = [{\n type: Directive,\n args: [{\n selector: 'agm-map agm-rotate-control',\n providers: [{\n provide: AgmMapControl,\n useExisting: AgmRotateControl\n }]\n }]\n}];\nclass AgmScaleControl extends AgmMapControl {\n getOptions() {\n return {\n scaleControl: true\n };\n }\n}\nAgmScaleControl.decorators = [{\n type: Directive,\n args: [{\n selector: 'agm-map agm-scale-control',\n providers: [{\n provide: AgmMapControl,\n useExisting: AgmScaleControl\n }]\n }]\n}];\nclass AgmStreetViewControl extends AgmMapControl {\n getOptions() {\n return {\n streetViewControl: true,\n streetViewControlOptions: {\n position: this.position && google.maps.ControlPosition[this.position]\n }\n };\n }\n}\nAgmStreetViewControl.decorators = [{\n type: Directive,\n args: [{\n selector: 'agm-map agm-street-view-control',\n providers: [{\n provide: AgmMapControl,\n useExisting: AgmStreetViewControl\n }]\n }]\n}];\nclass AgmZoomControl extends AgmMapControl {\n getOptions() {\n return {\n zoomControl: true,\n zoomControlOptions: {\n position: this.position && google.maps.ControlPosition[this.position],\n style: this.style && google.maps.ZoomControlStyle[this.style]\n }\n };\n }\n}\nAgmZoomControl.decorators = [{\n type: Directive,\n args: [{\n selector: 'agm-map agm-zoom-control',\n providers: [{\n provide: AgmMapControl,\n useExisting: AgmZoomControl\n }]\n }]\n}];\nAgmZoomControl.propDecorators = {\n style: [{\n type: Input\n }]\n};\n/**\n * AgmMap renders a Google Map.\n * **Important note**: To be able see a map in the browser, you have to define a height for the\n * element `agm-map`.\n *\n * ### Example\n * ```typescript\n * import { Component } from '@angular/core';\n *\n * @Component({\n * selector: 'my-map-cmp',\n * styles: [`\n * agm-map {\n * height: 300px;\n * }\n * `],\n * template: `\n * <agm-map [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\">\n * </agm-map>\n * `\n * })\n * ```\n */\nclass AgmMap {\n constructor(_elem, _mapsWrapper,\n // tslint:disable-next-line: ban-types\n _platformId, _fitBoundsService, _zone) {\n this._elem = _elem;\n this._mapsWrapper = _mapsWrapper;\n this._platformId = _platformId;\n this._fitBoundsService = _fitBoundsService;\n this._zone = _zone;\n /**\n * The longitude that defines the center of the map.\n */\n this.longitude = 0;\n /**\n * The latitude that defines the center of the map.\n */\n this.latitude = 0;\n /**\n * The zoom level of the map. The default zoom level is 8.\n */\n this.zoom = 8;\n /**\n * Enables/disables if map is draggable.\n */\n // tslint:disable-next-line:no-input-rename\n this.draggable = true;\n /**\n * Enables/disables zoom and center on double click. Enabled by default.\n */\n this.disableDoubleClickZoom = false;\n /**\n * Enables/disables all default UI of the Google map. Please note: When the map is created, this\n * value cannot get updated.\n */\n this.disableDefaultUI = false;\n /**\n * If false, disables scrollwheel zooming on the map. The scrollwheel is enabled by default.\n */\n this.scrollwheel = true;\n /**\n * If false, prevents the map from being controlled by the keyboard. Keyboard shortcuts are\n * enabled by default.\n */\n this.keyboardShortcuts = true;\n /**\n * Styles to apply to each of the default map types. Note that for Satellite/Hybrid and Terrain\n * modes, these styles will only apply to labels and geometry.\n */\n this.styles = [];\n /**\n * When true and the latitude and/or longitude values changes, the Google Maps panTo method is\n * used to\n * center the map. See: https://developers.google.com/maps/documentation/javascript/reference#Map\n */\n this.usePanning = false;\n /**\n * Sets the viewport to contain the given bounds.\n * If this option to `true`, the bounds get automatically computed from all elements that use the {@link AgmFitBounds} directive.\n */\n this.fitBounds = false;\n /**\n * The map mapTypeId. Defaults to 'roadmap'.\n */\n this.mapTypeId = 'ROADMAP';\n /**\n * When false, map icons are not clickable. A map icon represents a point of interest,\n * also known as a POI. By default map icons are clickable.\n */\n this.clickableIcons = true;\n /**\n * A map icon represents a point of interest, also known as a POI.\n * When map icons are clickable by default, an info window is displayed.\n * When this property is set to false, the info window will not be shown but the click event\n * will still fire\n */\n this.showDefaultInfoWindow = true;\n /**\n * This setting controls how gestures on the map are handled.\n * Allowed values:\n * - 'cooperative' (Two-finger touch gestures pan and zoom the map. One-finger touch gestures are not handled by the map.)\n * - 'greedy' (All touch gestures pan or zoom the map.)\n * - 'none' (The map cannot be panned or zoomed by user gestures.)\n * - 'auto' [default] (Gesture handling is either cooperative or greedy, depending on whether the page is scrollable or not.\n */\n this.gestureHandling = 'auto';\n /**\n * Controls the automatic switching behavior for the angle of incidence of\n * the map. The only allowed values are 0 and 45. The value 0 causes the map\n * to always use a 0° overhead view regardless of the zoom level and\n * viewport. The value 45 causes the tilt angle to automatically switch to\n * 45 whenever 45° imagery is available for the current zoom level and\n * viewport, and switch back to 0 whenever 45° imagery is not available\n * (this is the default behavior). 45° imagery is only available for\n * satellite and hybrid map types, within some locations, and at some zoom\n * levels. Note: getTilt returns the current tilt angle, not the value\n * specified by this option. Because getTilt and this option refer to\n * different things, do not bind() the tilt property; doing so may yield\n * unpredictable effects. (Default of AGM is 0 (disabled). Enable it with value 45.)\n */\n this.tilt = 0;\n this._observableSubscriptions = [];\n /**\n * This event emitter gets emitted when the user clicks on the map (but not when they click on a\n * marker or infoWindow).\n */\n // tslint:disable-next-line: max-line-length\n this.mapClick = new EventEmitter();\n /**\n * This event emitter gets emitted when the user right-clicks on the map (but not when they click\n * on a marker or infoWindow).\n */\n this.mapRightClick = new EventEmitter();\n /**\n * This event emitter gets emitted when the user double-clicks on the map (but not when they click\n * on a marker or infoWindow).\n */\n this.mapDblClick = new EventEmitter();\n /**\n * This event emitter is fired when the map center changes.\n */\n this.centerChange = new EventEmitter();\n /**\n * This event is fired when the viewport bounds have changed.\n */\n this.boundsChange = new EventEmitter();\n /**\n * This event is fired when the mapTypeId property changes.\n */\n this.mapTypeIdChange = new EventEmitter();\n /**\n * This event is fired when the map becomes idle after panning or zooming.\n */\n this.idle = new EventEmitter();\n /**\n * This event is fired when the zoom level has changed.\n */\n this.zoomChange = new EventEmitter();\n /**\n * This event is fired when the google map is fully initialized.\n * You get the google.maps.Map instance as a result of this EventEmitter.\n */\n this.mapReady = new EventEmitter();\n /**\n * This event is fired when the visible tiles have finished loading.\n */\n this.tilesLoaded = new EventEmitter();\n }\n /** @internal */\n ngAfterContentInit() {\n if (isPlatformServer(this._platformId)) {\n // The code is running on the server, do nothing\n return;\n }\n // todo: this should be solved with a new component and a viewChild decorator\n const container = this._elem.nativeElement.querySelector('.agm-map-container-inner');\n this._initMapInstance(container);\n }\n _initMapInstance(el) {\n this._mapsWrapper.createMap(el, {\n center: {\n lat: this.latitude || 0,\n lng: this.longitude || 0\n },\n zoom: this.zoom,\n minZoom: this.minZoom,\n maxZoom: this.maxZoom,\n controlSize: this.controlSize,\n disableDefaultUI: this.disableDefaultUI,\n disableDoubleClickZoom: this.disableDoubleClickZoom,\n scrollwheel: this.scrollwheel,\n backgroundColor: this.backgroundColor,\n draggable: this.draggable,\n draggableCursor: this.draggableCursor,\n draggingCursor: this.draggingCursor,\n keyboardShortcuts: this.keyboardShortcuts,\n styles: this.styles,\n mapTypeId: this.mapTypeId.toLocaleLowerCase(),\n clickableIcons: this.clickableIcons,\n gestureHandling: this.gestureHandling,\n tilt: this.tilt,\n restriction: this.restriction\n }).then(() => this._mapsWrapper.getNativeMap()).then(map => this.mapReady.emit(map));\n // register event listeners\n this._handleMapCenterChange();\n this._handleMapZoomChange();\n this._handleMapMouseEvents();\n this._handleBoundsChange();\n this._handleMapTypeIdChange();\n this._handleTilesLoadedEvent();\n this._handleIdleEvent();\n this._handleControlChange();\n }\n /** @internal */\n ngOnDestroy() {\n // unsubscribe all registered observable subscriptions\n this._observableSubscriptions.forEach(s => s.unsubscribe());\n // remove all listeners from the map instance\n this._mapsWrapper.clearInstanceListeners();\n if (this._fitBoundsSubscription) {\n this._fitBoundsSubscription.unsubscribe();\n }\n }\n /* @internal */\n ngOnChanges(changes) {\n this._updateMapOptionsChanges(changes);\n this._updatePosition(changes);\n }\n _updateMapOptionsChanges(changes) {\n const options = {};\n const optionKeys = Object.keys(changes).filter(k => AgmMap._mapOptionsAttributes.indexOf(k) !== -1);\n optionKeys.forEach(k => {\n options[k] = changes[k].currentValue;\n });\n this._mapsWrapper.setMapOptions(options);\n }\n /**\n * Triggers a resize event on the google map instance.\n * When recenter is true, the of the google map gets called with the current lat/lng values or fitBounds value to recenter the map.\n * Returns a promise that gets resolved after the event was triggered.\n */\n triggerResize(recenter = true) {\n // Note: When we would trigger the resize event and show the map in the same turn (which is a\n // common case for triggering a resize event), then the resize event would not\n // work (to show the map), so we trigger the event in a timeout.\n return new Promise(resolve => {\n setTimeout(() => {\n return this._mapsWrapper.triggerMapEvent('resize').then(() => {\n if (recenter) {\n this.fitBounds != null ? this._fitBounds() : this._setCenter();\n }\n resolve();\n });\n });\n });\n }\n _updatePosition(changes) {\n // tslint:disable: no-string-literal\n if (changes['latitude'] == null && changes['longitude'] == null && !changes['fitBounds']) {\n // no position update needed\n return;\n }\n // tslint:enable: no-string-literal\n // we prefer fitBounds in changes\n if ('fitBounds' in changes) {\n this._fitBounds();\n return;\n }\n if (typeof this.latitude !== 'number' || typeof this.longitude !== 'number') {\n return;\n }\n this._setCenter();\n }\n _setCenter() {\n const newCenter = {\n lat: this.latitude,\n lng: this.longitude\n };\n if (this.usePanning) {\n this._mapsWrapper.panTo(newCenter);\n } else {\n this._mapsWrapper.setCenter(newCenter);\n }\n }\n _fitBounds() {\n switch (this.fitBounds) {\n case true:\n this._subscribeToFitBoundsUpdates();\n break;\n case false:\n if (this._fitBoundsSubscription) {\n this._fitBoundsSubscription.unsubscribe();\n }\n break;\n default:\n if (this._fitBoundsSubscription) {\n this._fitBoundsSubscription.unsubscribe();\n }\n this._updateBounds(this.fitBounds, this.fitBoundsPadding);\n }\n }\n _subscribeToFitBoundsUpdates() {\n this._zone.runOutsideAngular(() => {\n this._fitBoundsSubscription = this._fitBoundsService.getBounds$().subscribe(b => {\n this._zone.run(() => this._updateBounds(b, this.fitBoundsPadding));\n });\n });\n }\n _updateBounds(bounds, padding) {\n if (!bounds) {\n return;\n }\n if (this._isLatLngBoundsLiteral(bounds) && typeof google !== 'undefined' && google && google.maps && google.maps.LatLngBounds) {\n const newBounds = new google.maps.LatLngBounds();\n newBounds.union(bounds);\n bounds = newBounds;\n }\n if (this.usePanning) {\n this._mapsWrapper.panToBounds(bounds, padding);\n return;\n }\n this._mapsWrapper.fitBounds(bounds, padding);\n }\n _isLatLngBoundsLiteral(bounds) {\n return bounds != null && bounds.extend === undefined;\n }\n _handleMapCenterChange() {\n const s = this._mapsWrapper.subscribeToMapEvent('center_changed').subscribe(() => {\n this._mapsWrapper.getCenter().then(center => {\n this.latitude = center.lat();\n this.longitude = center.lng();\n this.centerChange.emit({\n lat: this.latitude,\n lng: this.longitude\n });\n });\n });\n this._observableSubscriptions.push(s);\n }\n _handleBoundsChange() {\n const s = this._mapsWrapper.subscribeToMapEvent('bounds_changed').subscribe(() => {\n this._mapsWrapper.getBounds().then(bounds => {\n this.boundsChange.emit(bounds);\n });\n });\n this._observableSubscriptions.push(s);\n }\n _handleMapTypeIdChange() {\n const s = this._mapsWrapper.subscribeToMapEvent('maptypeid_changed').subscribe(() => {\n this._mapsWrapper.getMapTypeId().then(mapTypeId => {\n this.mapTypeIdChange.emit(mapTypeId);\n });\n });\n this._observableSubscriptions.push(s);\n }\n _handleMapZoomChange() {\n const s = this._mapsWrapper.subscribeToMapEvent('zoom_changed').subscribe(() => {\n this._mapsWrapper.getZoom().then(z => {\n this.zoom = z;\n this.zoomChange.emit(z);\n });\n });\n this._observableSubscriptions.push(s);\n }\n _handleIdleEvent() {\n const s = this._mapsWrapper.subscribeToMapEvent('idle').subscribe(() => {\n this.idle.emit(void 0);\n });\n this._observableSubscriptions.push(s);\n }\n _handleTilesLoadedEvent() {\n const s = this._mapsWrapper.subscribeToMapEvent('tilesloaded').subscribe(() => this.tilesLoaded.emit(void 0));\n this._observableSubscriptions.push(s);\n }\n _handleMapMouseEvents() {\n const events = [{\n name: 'click',\n emitter: this.mapClick\n }, {\n name: 'rightclick',\n emitter: this.mapRightClick\n }, {\n name: 'dblclick',\n emitter: this.mapDblClick\n }];\n events.forEach(e => {\n const s = this._mapsWrapper.subscribeToMapEvent(e.name).subscribe(([event]) => {\n // the placeId will be undefined in case the event was not an IconMouseEvent (google types)\n if (event.placeId && !this.showDefaultInfoWindow) {\n event.stop();\n }\n e.emitter.emit(event);\n });\n this._observableSubscriptions.push(s);\n });\n }\n _handleControlChange() {\n this._setControls();\n this.mapControls.changes.subscribe(() => this._setControls());\n }\n _setControls() {\n const controlOptions = {\n fullscreenControl: !this.disableDefaultUI,\n mapTypeControl: false,\n panControl: false,\n rotateControl: false,\n scaleControl: false,\n streetViewControl: !this.disableDefaultUI,\n zoomControl: !this.disableDefaultUI\n };\n this._mapsWrapper.getNativeMap().then(() => {\n this.mapControls.forEach(control => Object.assign(controlOptions, control.getOptions()));\n this._mapsWrapper.setMapOptions(controlOptions);\n });\n }\n}\n/**\n * Map option attributes that can change over time\n */\nAgmMap._mapOptionsAttributes = ['disableDoubleClickZoom', 'scrollwheel', 'draggable', 'draggableCursor', 'draggingCursor', 'keyboardShortcuts', 'styles', 'zoom', 'minZoom', 'maxZoom', 'mapTypeId', 'clickableIcons', 'gestureHandling', 'tilt', 'restriction'];\nAgmMap.decorators = [{\n type: Component,\n args: [{\n selector: 'agm-map',\n providers: [CircleManager, DataLayerManager, DataLayerManager, FitBoundsService, GoogleMapsAPIWrapper, InfoWindowManager, KmlLayerManager, LayerManager, MarkerManager, PolygonManager, PolylineManager, RectangleManager],\n template: `\n <div class='agm-map-container-inner sebm-google-map-container-inner'></div>\n <div class='agm-map-content'>\n <ng-content></ng-content>\n </div>\n `,\n styles: [`\n .agm-map-container-inner {\n width: inherit;\n height: inherit;\n }\n .agm-map-content {\n display:none;\n }\n `]\n }]\n}];\nAgmMap.ctorParameters = () => [{\n type: ElementRef\n}, {\n type: GoogleMapsAPIWrapper\n}, {\n type: Object,\n decorators: [{\n type: Inject,\n args: [PLATFORM_ID]\n }]\n}, {\n type: FitBoundsService\n}, {\n type: NgZone\n}];\nAgmMap.propDecorators = {\n longitude: [{\n type: Input\n }],\n latitude: [{\n type: Input\n }],\n zoom: [{\n type: Input\n }],\n minZoom: [{\n type: Input\n }],\n maxZoom: [{\n type: Input\n }],\n controlSize: [{\n type: Input\n }],\n draggable: [{\n type: Input,\n args: ['mapDraggable']\n }],\n disableDoubleClickZoom: [{\n type: Input\n }],\n disableDefaultUI: [{\n type: Input\n }],\n scrollwheel: [{\n type: Input\n }],\n backgroundColor: [{\n type: Input\n }],\n draggableCursor: [{\n type: Input\n }],\n draggingCursor: [{\n type: Input\n }],\n keyboardShortcuts: [{\n type: Input\n }],\n styles: [{\n type: Input\n }],\n usePanning: [{\n type: Input\n }],\n fitBounds: [{\n type: Input\n }],\n fitBoundsPadding: [{\n type: Input\n }],\n mapTypeId: [{\n type: Input\n }],\n clickableIcons: [{\n type: Input\n }],\n showDefaultInfoWindow: [{\n type: Input\n }],\n gestureHandling: [{\n type: Input\n }],\n tilt: [{\n type: Input\n }],\n restriction: [{\n type: Input\n }],\n mapClick: [{\n type: Output\n }],\n mapRightClick: [{\n type: Output\n }],\n mapDblClick: [{\n type: Output\n }],\n centerChange: [{\n type: Output\n }],\n boundsChange: [{\n type: Output\n }],\n mapTypeIdChange: [{\n type: Output\n }],\n idle: [{\n type: Output\n }],\n zoomChange: [{\n type: Output\n }],\n mapReady: [{\n type: Output\n }],\n tilesLoaded: [{\n type: Output\n }],\n mapControls: [{\n type: ContentChildren,\n args: [AgmMapControl]\n }]\n};\nlet markerId = 0;\n/**\n * AgmMarker renders a map marker inside a {@link AgmMap}.\n *\n * ### Example\n * ```typescript\n * import { Component } from '@angular/core';\n *\n * @Component({\n * selector: 'my-map-cmp',\n * styles: [`\n * .agm-map-container {\n * height: 300px;\n * }\n * `],\n * template: `\n * <agm-map [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\">\n * <agm-marker [latitude]=\"lat\" [longitude]=\"lng\" [label]=\"'M'\">\n * </agm-marker>\n * </agm-map>\n * `\n * })\n * ```\n */\nclass AgmMarker {\n constructor(_markerManager) {\n this._markerManager = _markerManager;\n /**\n * If true, the marker can be dragged. Default value is false.\n */\n // tslint:disable-next-line:no-input-rename\n this.draggable = false;\n /**\n * If true, the marker is visible\n */\n this.visible = true;\n /**\n * Whether to automatically open the child info window when the marker is clicked.\n */\n this.openInfoWindow = true;\n /**\n * The marker's opacity between 0.0 and 1.0.\n */\n this.opacity = 1;\n /**\n * All markers are displayed on the map in order of their zIndex, with higher values displaying in\n * front of markers with lower values. By default, markers are displayed according to their\n * vertical position on screen, with lower markers appearing in front of markers further up the\n * screen.\n */\n this.zIndex = 1;\n /**\n * If true, the marker can be clicked. Default value is true.\n */\n // tslint:disable-next-line:no-input-rename\n this.clickable = true;\n /**\n * This event is fired when the marker's animation property changes.\n */\n this.animationChange = new EventEmitter();\n /**\n * This event emitter gets emitted when the user clicks on the marker.\n */\n this.markerClick = new EventEmitter();\n /**\n * This event emitter gets emitted when the user clicks twice on the marker.\n */\n this.markerDblClick = new EventEmitter();\n /**\n * This event is fired when the user rightclicks on the marker.\n */\n this.markerRightClick = new EventEmitter();\n /**\n * This event is fired when the user starts dragging the marker.\n */\n this.dragStart = new EventEmitter();\n /**\n * This event is repeatedly fired while the user drags the marker.\n */\n // tslint:disable-next-line: no-output-native\n this.drag = new EventEmitter();\n /**\n * This event is fired when the user stops dragging the marker.\n */\n this.dragEnd = new EventEmitter();\n /**\n * This event is fired when the user mouses over the marker.\n */\n this.mouseOver = new EventEmitter();\n /**\n * This event is fired when the user mouses outside the marker.\n */\n this.mouseOut = new EventEmitter();\n /** @internal */\n this.infoWindow = new QueryList();\n this._markerAddedToManger = false;\n this._observableSubscriptions = [];\n this._fitBoundsDetails$ = new ReplaySubject(1);\n this._id = (markerId++).toString();\n }\n /* @internal */\n ngAfterContentInit() {\n this.handleInfoWindowUpdate();\n this.infoWindow.changes.subscribe(() => this.handleInfoWindowUpdate());\n }\n handleInfoWindowUpdate() {\n if (this.infoWindow.length > 1) {\n throw new Error('Expected no more than one info window.');\n }\n this.infoWindow.forEach(marker => {\n marker.hostMarker = this;\n });\n }\n /** @internal */\n ngOnChanges(changes) {\n if (typeof this.latitude === 'string') {\n this.latitude = Number(this.latitude);\n }\n if (typeof this.longitude === 'string') {\n this.longitude = Number(this.longitude);\n }\n if (typeof this.latitude !== 'number' || typeof this.longitude !== 'number') {\n return;\n }\n if (!this._markerAddedToManger) {\n this._markerManager.addMarker(this);\n this._updateFitBoundsDetails();\n this._markerAddedToManger = true;\n this._addEventListeners();\n return;\n }\n // tslint:disable: no-string-literal\n if (changes['latitude'] || changes['longitude']) {\n this._markerManager.updateMarkerPosition(this);\n this._updateFitBoundsDetails();\n }\n if (changes['title']) {\n this._markerManager.updateTitle(this);\n }\n if (changes['label']) {\n this._markerManager.updateLabel(this);\n }\n if (changes['draggable']) {\n this._markerManager.updateDraggable(this);\n }\n if (changes['iconUrl']) {\n this._markerManager.updateIcon(this);\n }\n if (changes['opacity']) {\n this._markerManager.updateOpacity(this);\n }\n if (changes['visible']) {\n this._markerManager.updateVisible(this);\n }\n if (changes['zIndex']) {\n this._markerManager.updateZIndex(this);\n }\n if (changes['clickable']) {\n this._markerManager.updateClickable(this);\n }\n if (changes['animation']) {\n this._markerManager.updateAnimation(this);\n }\n // tslint:enable: no-string-literal\n }\n /** @internal */\n getFitBoundsDetails$() {\n return this._fitBoundsDetails$.asObservable();\n }\n _updateFitBoundsDetails() {\n this._fitBoundsDetails$.next({\n latLng: {\n lat: this.latitude,\n lng: this.longitude\n }\n });\n }\n _addEventListeners() {\n const cs = this._markerManager.createEventObservable('click', this).subscribe(() => {\n if (this.openInfoWindow) {\n this.infoWindow.forEach(infoWindow => infoWindow.open());\n }\n this.markerClick.emit(this);\n });\n this._observableSubscriptions.push(cs);\n const dcs = this._markerManager.createEventObservable('dblclick', this).subscribe(() => {\n this.markerDblClick.emit(null);\n });\n this._observableSubscriptions.push(dcs);\n const rc = this._markerManager.createEventObservable('rightclick', this).subscribe(() => {\n this.markerRightClick.emit(null);\n });\n this._observableSubscriptions.push(rc);\n const ds = this._markerManager.createEventObservable('dragstart', this).subscribe(e => this.dragStart.emit(e));\n this._observableSubscriptions.push(ds);\n const d = this._markerManager.createEventObservable('drag', this).subscribe(e => this.drag.emit(e));\n this._observableSubscriptions.push(d);\n const de = this._markerManager.createEventObservable('dragend', this).subscribe(e => this.dragEnd.emit(e));\n this._observableSubscriptions.push(de);\n const mover = this._markerManager.createEventObservable('mouseover', this).subscribe(e => this.mouseOver.emit(e));\n this._observableSubscriptions.push(mover);\n const mout = this._markerManager.createEventObservable('mouseout', this).subscribe(e => this.mouseOut.emit(e));\n this._observableSubscriptions.push(mout);\n const anChng = this._markerManager.createEventObservable('animation_changed', this).subscribe(() => {\n this.animationChange.emit(this.animation);\n });\n this._observableSubscriptions.push(anChng);\n }\n /** @internal */\n id() {\n return this._id;\n }\n /** @internal */\n toString() {\n return 'AgmMarker-' + this._id.toString();\n }\n /** @internal */\n ngOnDestroy() {\n this._markerManager.deleteMarker(this);\n // unsubscribe all registered observable subscriptions\n this._observableSubscriptions.forEach(s => s.unsubscribe());\n }\n}\nAgmMarker.decorators = [{\n type: Directive,\n args: [{\n selector: 'agm-marker',\n providers: [{\n provide: FitBoundsAccessor,\n useExisting: forwardRef(() => AgmMarker)\n }]\n }]\n}];\nAgmMarker.ctorParameters = () => [{\n type: MarkerManager\n}];\nAgmMarker.propDecorators = {\n latitude: [{\n type: Input\n }],\n longitude: [{\n type: Input\n }],\n title: [{\n type: Input\n }],\n label: [{\n type: Input\n }],\n draggable: [{\n type: Input,\n args: ['markerDraggable']\n }],\n iconUrl: [{\n type: Input\n }],\n visible: [{\n type: Input\n }],\n openInfoWindow: [{\n type: Input\n }],\n opacity: [{\n type: Input\n }],\n zIndex: [{\n type: Input\n }],\n clickable: [{\n type: Input,\n args: ['markerClickable']\n }],\n animation: [{\n type: Input\n }],\n animationChange: [{\n type: Output\n }],\n markerClick: [{\n type: Output\n }],\n markerDblClick: [{\n type: Output\n }],\n markerRightClick: [{\n type: Output\n }],\n dragStart: [{\n type: Output\n }],\n drag: [{\n type: Output\n }],\n dragEnd: [{\n type: Output\n }],\n mouseOver: [{\n type: Output\n }],\n mouseOut: [{\n type: Output\n }],\n infoWindow: [{\n type: ContentChildren,\n args: [AgmInfoWindow]\n }]\n};\n\n/**\n * AgmPolygon renders a polygon on a {@link AgmMap}\n *\n * ### Example\n * ```typescript\n * import { Component } from '@angular/core';\n *\n * @Component({\n * selector: 'my-map-cmp',\n * styles: [`\n * agm-map {\n * height: 300px;\n * }\n * `],\n * template: `\n * <agm-map [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\">\n * <agm-polygon [paths]=\"paths\">\n * </agm-polygon>\n * </agm-map>\n * `\n * })\n * export class MyMapCmp {\n * lat: number = 0;\n * lng: number = 0;\n * zoom: number = 10;\n * paths: LatLngLiteral[] = [\n * { lat: 0, lng: 10 },\n * { lat: 0, lng: 20 },\n * { lat: 10, lng: 20 },\n * { lat: 10, lng: 10 },\n * { lat: 0, lng: 10 }\n * ]\n * // Nesting paths will create a hole where they overlap;\n * nestedPaths: LatLngLiteral[][] = [[\n * { lat: 0, lng: 10 },\n * { lat: 0, lng: 20 },\n * { lat: 10, lng: 20 },\n * { lat: 10, lng: 10 },\n * { lat: 0, lng: 10 }\n * ], [\n * { lat: 0, lng: 15 },\n * { lat: 0, lng: 20 },\n * { lat: 5, lng: 20 },\n * { lat: 5, lng: 15 },\n * { lat: 0, lng: 15 }\n * ]]\n * }\n * ```\n */\nclass AgmPolygon {\n constructor(_polygonManager) {\n this._polygonManager = _polygonManager;\n /**\n * Indicates whether this Polygon handles mouse events. Defaults to true.\n */\n this.clickable = true;\n /**\n * If set to true, the user can drag this shape over the map. The geodesic\n * property defines the mode of dragging. Defaults to false.\n */\n // tslint:disable-next-line:no-input-rename\n this.draggable = false;\n /**\n * If set to true, the user can edit this shape by dragging the control\n * points shown at the vertices and on each segment. Defaults to false.\n */\n this.editable = false;\n /**\n * When true, edges of the polygon are interpreted as geodesic and will\n * follow the curvature of the Earth. When false, edges of the polygon are\n * rendered as straight lines in screen space. Note that the shape of a\n * geodesic polygon may appear to change when dragged, as the dimensions\n * are maintained relative to the surface of the earth. Defaults to false.\n */\n this.geodesic = false;\n /**\n * The ordered sequence of coordinates that designates a closed loop.\n * Unlike polylines, a polygon may consist of one or more paths.\n * As a result, the paths property may specify one or more arrays of\n * LatLng coordinates. Paths are closed automatically; do not repeat the\n * first vertex of the path as the last vertex. Simple polygons may be\n * defined using a single array of LatLngs. More complex polygons may\n * specify an array of arrays. Any simple arrays are converted into Arrays.\n * Inserting or removing LatLngs from the Array will automatically update\n * the polygon on the map.\n */\n this.paths = [];\n /**\n * This event is fired when the DOM click event is fired on the Polygon.\n */\n this.polyClick = new EventEmitter();\n /**\n * This event is fired when the DOM dblclick event is fired on the Polygon.\n */\n this.polyDblClick = new EventEmitter();\n /**\n * This event is repeatedly fired while the user drags the polygon.\n */\n this.polyDrag = new EventEmitter();\n /**\n * This event is fired when the user stops dragging the polygon.\n */\n this.polyDragEnd = new EventEmitter();\n /**\n * This event is fired when the user starts dragging the polygon.\n */\n this.polyDragStart = new EventEmitter();\n /**\n * This event is fired when the DOM mousedown event is fired on the Polygon.\n */\n this.polyMouseDown = new EventEmitter();\n /**\n * This event is fired when the DOM mousemove event is fired on the Polygon.\n */\n this.polyMouseMove = new EventEmitter();\n /**\n * This event is fired on Polygon mouseout.\n */\n this.polyMouseOut = new EventEmitter();\n /**\n * This event is fired on Polygon mouseover.\n */\n this.polyMouseOver = new EventEmitter();\n /**\n * This event is fired whe the DOM mouseup event is fired on the Polygon\n */\n this.polyMouseUp = new EventEmitter();\n /**\n * This event is fired when the Polygon is right-clicked on.\n */\n this.polyRightClick = new EventEmitter();\n /**\n * This event is fired after Polygon first path changes.\n */\n this.polyPathsChange = new EventEmitter();\n this._polygonAddedToManager = false;\n this._subscriptions = [];\n }\n /** @internal */\n ngAfterContentInit() {\n if (!this._polygonAddedToManager) {\n this._init();\n }\n }\n ngOnChanges(changes) {\n if (!this._polygonAddedToManager) {\n this._init();\n return;\n }\n this._polygonManager.setPolygonOptions(this, this._updatePolygonOptions(changes));\n }\n _init() {\n this._polygonManager.addPolygon(this);\n this._polygonAddedToManager = true;\n this._addEventListeners();\n }\n _addEventListeners() {\n const handlers = [{\n name: 'click',\n handler: ev => this.polyClick.emit(ev)\n }, {\n name: 'dblclick',\n handler: ev => this.polyDblClick.emit(ev)\n }, {\n name: 'drag',\n handler: ev => this.polyDrag.emit(ev)\n }, {\n name: 'dragend',\n handler: ev => this.polyDragEnd.emit(ev)\n }, {\n name: 'dragstart',\n handler: ev => this.polyDragStart.emit(ev)\n }, {\n name: 'mousedown',\n handler: ev => this.polyMouseDown.emit(ev)\n }, {\n name: 'mousemove',\n handler: ev => this.polyMouseMove.emit(ev)\n }, {\n name: 'mouseout',\n handler: ev => this.polyMouseOut.emit(ev)\n }, {\n name: 'mouseover',\n handler: ev => this.polyMouseOver.emit(ev)\n }, {\n name: 'mouseup',\n handler: ev => this.polyMouseUp.emit(ev)\n }, {\n name: 'rightclick',\n handler: ev => this.polyRightClick.emit(ev)\n }];\n handlers.forEach(obj => {\n const os = this._polygonManager.createEventObservable(obj.name, this).subscribe(obj.handler);\n this._subscriptions.push(os);\n });\n this._polygonManager.createPathEventObservable(this).then(paths$ => {\n const os = paths$.subscribe(pathEvent => this.polyPathsChange.emit(pathEvent));\n this._subscriptions.push(os);\n });\n }\n _updatePolygonOptions(changes) {\n return Object.keys(changes).filter(k => AgmPolygon._polygonOptionsAttributes.indexOf(k) !== -1).reduce((obj, k) => {\n obj[k] = changes[k].currentValue;\n return obj;\n }, {});\n }\n /** @internal */\n id() {\n return this._id;\n }\n /** @internal */\n ngOnDestroy() {\n this._polygonManager.deletePolygon(this);\n // unsubscribe all registered observable subscriptions\n this._subscriptions.forEach(s => s.unsubscribe());\n }\n getPath() {\n return this._polygonManager.getPath(this);\n }\n getPaths() {\n return this._polygonManager.getPaths(this);\n }\n}\nAgmPolygon._polygonOptionsAttributes = ['clickable', 'draggable', 'editable', 'fillColor', 'fillOpacity', 'geodesic', 'icon', 'map', 'paths', 'strokeColor', 'strokeOpacity', 'strokeWeight', 'visible', 'zIndex', 'draggable', 'editable', 'visible'];\nAgmPolygon.decorators = [{\n type: Directive,\n args: [{\n selector: 'agm-polygon'\n }]\n}];\nAgmPolygon.ctorParameters = () => [{\n type: PolygonManager\n}];\nAgmPolygon.propDecorators = {\n clickable: [{\n type: Input\n }],\n draggable: [{\n type: Input,\n args: ['polyDraggable']\n }],\n editable: [{\n type: Input\n }],\n fillColor: [{\n type: Input\n }],\n fillOpacity: [{\n type: Input\n }],\n geodesic: [{\n type: Input\n }],\n paths: [{\n type: Input\n }],\n strokeColor: [{\n type: Input\n }],\n strokeOpacity: [{\n type: Input\n }],\n strokeWeight: [{\n type: Input\n }],\n visible: [{\n type: Input\n }],\n zIndex: [{\n type: Input\n }],\n polyClick: [{\n type: Output\n }],\n polyDblClick: [{\n type: Output\n }],\n polyDrag: [{\n type: Output\n }],\n polyDragEnd: [{\n type: Output\n }],\n polyDragStart: [{\n type: Output\n }],\n polyMouseDown: [{\n type: Output\n }],\n polyMouseMove: [{\n type: Output\n }],\n polyMouseOut: [{\n type: Output\n }],\n polyMouseOver: [{\n type: Output\n }],\n polyMouseUp: [{\n type: Output\n }],\n polyRightClick: [{\n type: Output\n }],\n polyPathsChange: [{\n type: Output\n }]\n};\n\n/**\n * AgmPolylineIcon enables to add polyline sequences to add arrows, circle,\n * or custom icons either along the entire line, or in a specific part of it.\n * See https://developers.google.com/maps/documentation/javascript/shapes#polyline_customize\n *\n * ### Example\n * ```html\n * <agm-map [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\">\n * <agm-polyline>\n * <agm-icon-sequence [fixedRotation]=\"true\" [path]=\"'FORWARD_OPEN_ARROW'\">\n * </agm-icon-sequence>\n * </agm-polyline>\n * </agm-map>\n * ```\n */\nclass AgmPolylineIcon {\n ngOnInit() {\n if (this.path == null) {\n throw new Error('Icon Sequence path is required');\n }\n }\n}\nAgmPolylineIcon.decorators = [{\n type: Directive,\n args: [{\n selector: 'agm-polyline agm-icon-sequence'\n }]\n}];\nAgmPolylineIcon.propDecorators = {\n fixedRotation: [{\n type: Input\n }],\n offset: [{\n type: Input\n }],\n repeat: [{\n type: Input\n }],\n anchorX: [{\n type: Input\n }],\n anchorY: [{\n type: Input\n }],\n fillColor: [{\n type: Input\n }],\n fillOpacity: [{\n type: Input\n }],\n path: [{\n type: Input\n }],\n rotation: [{\n type: Input\n }],\n scale: [{\n type: Input\n }],\n strokeColor: [{\n type: Input\n }],\n strokeOpacity: [{\n type: Input\n }],\n strokeWeight: [{\n type: Input\n }]\n};\n\n/**\n * AgmPolylinePoint represents one element of a polyline within a {@link\n * AgmPolyline}\n */\nclass AgmPolylinePoint {\n constructor() {\n /**\n * This event emitter gets emitted when the position of the point changed.\n */\n this.positionChanged = new EventEmitter();\n }\n ngOnChanges(changes) {\n // tslint:disable: no-string-literal\n if (changes['latitude'] || changes['longitude']) {\n this.positionChanged.emit({\n lat: changes['latitude'] ? changes['latitude'].currentValue : this.latitude,\n lng: changes['longitude'] ? changes['longitude'].currentValue : this.longitude\n });\n }\n // tslint:enable: no-string-literal\n }\n /** @internal */\n getFitBoundsDetails$() {\n return this.positionChanged.pipe(startWith({\n lat: this.latitude,\n lng: this.longitude\n }), map(position => ({\n latLng: position\n })));\n }\n}\nAgmPolylinePoint.decorators = [{\n type: Directive,\n args: [{\n selector: 'agm-polyline-point',\n providers: [{\n provide: FitBoundsAccessor,\n useExisting: forwardRef(() => AgmPolylinePoint)\n }]\n }]\n}];\nAgmPolylinePoint.ctorParameters = () => [];\nAgmPolylinePoint.propDecorators = {\n latitude: [{\n type: Input\n }],\n longitude: [{\n type: Input\n }],\n positionChanged: [{\n type: Output\n }]\n};\nlet polylineId = 0;\n/**\n * AgmPolyline renders a polyline on a {@link AgmMap}\n *\n * ### Example\n * ```typescript\n * import { Component } from '@angular/core';\n *\n * @Component({\n * selector: 'my-map-cmp',\n * styles: [`\n * .agm-map-container {\n * height: 300px;\n * }\n * `],\n * template: `\n * <agm-map [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\">\n * <agm-polyline>\n * <agm-polyline-point [latitude]=\"latA\" [longitude]=\"lngA\">\n * </agm-polyline-point>\n * <agm-polyline-point [latitude]=\"latB\" [longitude]=\"lngB\">\n * </agm-polyline-point>\n * </agm-polyline>\n * </agm-map>\n * `\n * })\n * ```\n */\nclass AgmPolyline {\n constructor(_polylineManager) {\n this._polylineManager = _polylineManager;\n /**\n * Indicates whether this Polyline handles mouse events. Defaults to true.\n */\n this.clickable = true;\n /**\n * If set to true, the user can drag this shape over the map. The geodesic property defines the\n * mode of dragging. Defaults to false.\n */\n // tslint:disable-next-line:no-input-rename\n this.draggable = false;\n /**\n * If set to true, the user can edit this shape by dragging the control points shown at the\n * vertices and on each segment. Defaults to false.\n */\n this.editable = false;\n /**\n * When true, edges of the polygon are interpreted as geodesic and will follow the curvature of\n * the Earth. When false, edges of the polygon are rendered as straight lines in screen space.\n * Note that the shape of a geodesic polygon may appear to change when dragged, as the dimensions\n * are maintained relative to the surface of the earth. Defaults to false.\n */\n this.geodesic = false;\n /**\n * Whether this polyline is visible on the map. Defaults to true.\n */\n this.visible = true;\n /**\n * This event is fired when the DOM click event is fired on the Polyline.\n */\n this.lineClick = new EventEmitter();\n /**\n * This event is fired when the DOM dblclick event is fired on the Polyline.\n */\n this.lineDblClick = new EventEmitter();\n /**\n * This event is repeatedly fired while the user drags the polyline.\n */\n this.lineDrag = new EventEmitter();\n /**\n * This event is fired when the user stops dragging the polyline.\n */\n this.lineDragEnd = new EventEmitter();\n /**\n * This event is fired when the user starts dragging the polyline.\n */\n this.lineDragStart = new EventEmitter();\n /**\n * This event is fired when the DOM mousedown event is fired on the Polyline.\n */\n this.lineMouseDown = new EventEmitter();\n /**\n * This event is fired when the DOM mousemove event is fired on the Polyline.\n */\n this.lineMouseMove = new EventEmitter();\n /**\n * This event is fired on Polyline mouseout.\n */\n this.lineMouseOut = new EventEmitter();\n /**\n * This event is fired on Polyline mouseover.\n */\n this.lineMouseOver = new EventEmitter();\n /**\n * This event is fired whe the DOM mouseup event is fired on the Polyline\n */\n this.lineMouseUp = new EventEmitter();\n /**\n * This event is fired when the Polyline is right-clicked on.\n */\n this.lineRightClick = new EventEmitter();\n /**\n * This event is fired after Polyline's path changes.\n */\n this.polyPathChange = new EventEmitter();\n this._polylineAddedToManager = false;\n this._subscriptions = [];\n this._id = (polylineId++).toString();\n }\n /** @internal */\n ngAfterContentInit() {\n if (this.points.length) {\n this.points.forEach(point => {\n const s = point.positionChanged.subscribe(() => {\n this._polylineManager.updatePolylinePoints(this);\n });\n this._subscriptions.push(s);\n });\n }\n if (!this._polylineAddedToManager) {\n this._init();\n }\n const pointSub = this.points.changes.subscribe(() => this._polylineManager.updatePolylinePoints(this));\n this._subscriptions.push(pointSub);\n this._polylineManager.updatePolylinePoints(this);\n const iconSub = this.iconSequences.changes.subscribe(() => this._polylineManager.updateIconSequences(this));\n this._subscriptions.push(iconSub);\n }\n ngOnChanges(changes) {\n if (!this._polylineAddedToManager) {\n this._init();\n return;\n }\n const options = {};\n const optionKeys = Object.keys(changes).filter(k => AgmPolyline._polylineOptionsAttributes.indexOf(k) !== -1);\n optionKeys.forEach(k => options[k] = changes[k].currentValue);\n this._polylineManager.setPolylineOptions(this, options);\n }\n getPath() {\n return this._polylineManager.getPath(this);\n }\n _init() {\n this._polylineManager.addPolyline(this);\n this._polylineAddedToManager = true;\n this._addEventListeners();\n }\n _addEventListeners() {\n const handlers = [{\n name: 'click',\n handler: ev => this.lineClick.emit(ev)\n }, {\n name: 'dblclick',\n handler: ev => this.lineDblClick.emit(ev)\n }, {\n name: 'drag',\n handler: ev => this.lineDrag.emit(ev)\n }, {\n name: 'dragend',\n handler: ev => this.lineDragEnd.emit(ev)\n }, {\n name: 'dragstart',\n handler: ev => this.lineDragStart.emit(ev)\n }, {\n name: 'mousedown',\n handler: ev => this.lineMouseDown.emit(ev)\n }, {\n name: 'mousemove',\n handler: ev => this.lineMouseMove.emit(ev)\n }, {\n name: 'mouseout',\n handler: ev => this.lineMouseOut.emit(ev)\n }, {\n name: 'mouseover',\n handler: ev => this.lineMouseOver.emit(ev)\n }, {\n name: 'mouseup',\n handler: ev => this.lineMouseUp.emit(ev)\n }, {\n name: 'rightclick',\n handler: ev => this.lineRightClick.emit(ev)\n }];\n handlers.forEach(obj => {\n const os = this._polylineManager.createEventObservable(obj.name, this).subscribe(obj.handler);\n this._subscriptions.push(os);\n });\n this._polylineManager.createPathEventObservable(this).then(ob$ => {\n const os = ob$.subscribe(pathEvent => this.polyPathChange.emit(pathEvent));\n this._subscriptions.push(os);\n });\n }\n /** @internal */\n _getPoints() {\n if (this.points) {\n return this.points.toArray();\n }\n return [];\n }\n _getIcons() {\n if (this.iconSequences) {\n return this.iconSequences.toArray();\n }\n return [];\n }\n /** @internal */\n id() {\n return this._id;\n }\n /** @internal */\n ngOnDestroy() {\n this._polylineManager.deletePolyline(this);\n // unsubscribe all registered observable subscriptions\n this._subscriptions.forEach(s => s.unsubscribe());\n }\n}\nAgmPolyline._polylineOptionsAttributes = ['draggable', 'editable', 'visible', 'geodesic', 'strokeColor', 'strokeOpacity', 'strokeWeight', 'zIndex'];\nAgmPolyline.decorators = [{\n type: Directive,\n args: [{\n selector: 'agm-polyline'\n }]\n}];\nAgmPolyline.ctorParameters = () => [{\n type: PolylineManager\n}];\nAgmPolyline.propDecorators = {\n clickable: [{\n type: Input\n }],\n draggable: [{\n type: Input,\n args: ['polylineDraggable']\n }],\n editable: [{\n type: Input\n }],\n geodesic: [{\n type: Input\n }],\n strokeColor: [{\n type: Input\n }],\n strokeOpacity: [{\n type: Input\n }],\n strokeWeight: [{\n type: Input\n }],\n visible: [{\n type: Input\n }],\n zIndex: [{\n type: Input\n }],\n lineClick: [{\n type: Output\n }],\n lineDblClick: [{\n type: Output\n }],\n lineDrag: [{\n type: Output\n }],\n lineDragEnd: [{\n type: Output\n }],\n lineDragStart: [{\n type: Output\n }],\n lineMouseDown: [{\n type: Output\n }],\n lineMouseMove: [{\n type: Output\n }],\n lineMouseOut: [{\n type: Output\n }],\n lineMouseOver: [{\n type: Output\n }],\n lineMouseUp: [{\n type: Output\n }],\n lineRightClick: [{\n type: Output\n }],\n polyPathChange: [{\n type: Output\n }],\n points: [{\n type: ContentChildren,\n args: [AgmPolylinePoint]\n }],\n iconSequences: [{\n type: ContentChildren,\n args: [AgmPolylineIcon]\n }]\n};\nclass AgmRectangle {\n constructor(_manager) {\n this._manager = _manager;\n /**\n * Indicates whether this Rectangle handles mouse events. Defaults to true.\n */\n this.clickable = true;\n /**\n * If set to true, the user can drag this rectangle over the map. Defaults to false.\n */\n // tslint:disable-next-line:no-input-rename\n this.draggable = false;\n /**\n * If set to true, the user can edit this rectangle by dragging the control points shown at\n * the center and around the circumference of the rectangle. Defaults to false.\n */\n this.editable = false;\n /**\n * The stroke position. Defaults to CENTER.\n * This property is not supported on Internet Explorer 8 and earlier.\n */\n this.strokePosition = 'CENTER';\n /**\n * The stroke width in pixels.\n */\n this.strokeWeight = 0;\n /**\n * Whether this rectangle is visible on the map. Defaults to true.\n */\n this.visible = true;\n /**\n * This event is fired when the rectangle's is changed.\n */\n this.boundsChange = new EventEmitter();\n /**\n * This event emitter gets emitted when the user clicks on the rectangle.\n */\n this.rectangleClick = new EventEmitter();\n /**\n * This event emitter gets emitted when the user clicks on the rectangle.\n */\n this.rectangleDblClick = new EventEmitter();\n /**\n * This event is repeatedly fired while the user drags the rectangle.\n */\n // tslint:disable-next-line: no-output-native\n this.drag = new EventEmitter();\n /**\n * This event is fired when the user stops dragging the rectangle.\n */\n this.dragEnd = new EventEmitter();\n /**\n * This event is fired when the user starts dragging the rectangle.\n */\n this.dragStart = new EventEmitter();\n /**\n * This event is fired when the DOM mousedown event is fired on the rectangle.\n */\n this.mouseDown = new EventEmitter();\n /**\n * This event is fired when the DOM mousemove event is fired on the rectangle.\n */\n this.mouseMove = new EventEmitter();\n /**\n * This event is fired on rectangle mouseout.\n */\n this.mouseOut = new EventEmitter();\n /**\n * This event is fired on rectangle mouseover.\n */\n this.mouseOver = new EventEmitter();\n /**\n * This event is fired when the DOM mouseup event is fired on the rectangle.\n */\n this.mouseUp = new EventEmitter();\n /**\n * This event is fired when the rectangle is right-clicked on.\n */\n this.rightClick = new EventEmitter();\n this._rectangleAddedToManager = false;\n this._eventSubscriptions = [];\n }\n /** @internal */\n ngOnInit() {\n this._manager.addRectangle(this);\n this._rectangleAddedToManager = true;\n this._registerEventListeners();\n }\n /** @internal */\n ngOnChanges(changes) {\n if (!this._rectangleAddedToManager) {\n return;\n }\n // tslint:disable: no-string-literal\n if (changes['north'] || changes['east'] || changes['south'] || changes['west']) {\n this._manager.setBounds(this);\n }\n if (changes['editable']) {\n this._manager.setEditable(this);\n }\n if (changes['draggable']) {\n this._manager.setDraggable(this);\n }\n if (changes['visible']) {\n this._manager.setVisible(this);\n }\n // tslint:enable: no-string-literal\n this._updateRectangleOptionsChanges(changes);\n }\n _updateRectangleOptionsChanges(changes) {\n const options = {};\n const optionKeys = Object.keys(changes).filter(k => AgmRectangle._mapOptions.indexOf(k) !== -1);\n optionKeys.forEach(k => {\n options[k] = changes[k].currentValue;\n });\n if (optionKeys.length > 0) {\n this._manager.setOptions(this, options);\n }\n }\n _registerEventListeners() {\n const events = new Map();\n events.set('bounds_changed', this.boundsChange);\n events.set('click', this.rectangleClick);\n events.set('dblclick', this.rectangleDblClick);\n events.set('drag', this.drag);\n events.set('dragend', this.dragEnd);\n events.set('dragStart', this.dragStart);\n events.set('mousedown', this.mouseDown);\n events.set('mousemove', this.mouseMove);\n events.set('mouseout', this.mouseOut);\n events.set('mouseover', this.mouseOver);\n events.set('mouseup', this.mouseUp);\n events.set('rightclick', this.rightClick);\n events.forEach((eventEmitter, eventName) => {\n this._eventSubscriptions.push(this._manager.createEventObservable(eventName, this).subscribe(value => {\n switch (eventName) {\n case 'bounds_changed':\n this._manager.getBounds(this).then(bounds => eventEmitter.emit({\n north: bounds.getNorthEast().lat(),\n east: bounds.getNorthEast().lng(),\n south: bounds.getSouthWest().lat(),\n west: bounds.getSouthWest().lng()\n }));\n break;\n default:\n eventEmitter.emit(value);\n }\n }));\n });\n }\n /** @internal */\n ngOnDestroy() {\n this._eventSubscriptions.forEach(s => s.unsubscribe());\n this._eventSubscriptions = null;\n this._manager.removeRectangle(this);\n }\n /**\n * Gets the LatLngBounds of this Rectangle.\n */\n getBounds() {\n return this._manager.getBounds(this);\n }\n}\nAgmRectangle._mapOptions = ['fillColor', 'fillOpacity', 'strokeColor', 'strokeOpacity', 'strokePosition', 'strokeWeight', 'visible', 'zIndex', 'clickable'];\nAgmRectangle.decorators = [{\n type: Directive,\n args: [{\n selector: 'agm-rectangle'\n }]\n}];\nAgmRectangle.ctorParameters = () => [{\n type: RectangleManager\n}];\nAgmRectangle.propDecorators = {\n north: [{\n type: Input\n }],\n east: [{\n type: Input\n }],\n south: [{\n type: Input\n }],\n west: [{\n type: Input\n }],\n clickable: [{\n type: Input\n }],\n draggable: [{\n type: Input,\n args: ['rectangleDraggable']\n }],\n editable: [{\n type: Input\n }],\n fillColor: [{\n type: Input\n }],\n fillOpacity: [{\n type: Input\n }],\n strokeColor: [{\n type: Input\n }],\n strokeOpacity: [{\n type: Input\n }],\n strokePosition: [{\n type: Input\n }],\n strokeWeight: [{\n type: Input\n }],\n visible: [{\n type: Input\n }],\n zIndex: [{\n type: Input\n }],\n boundsChange: [{\n type: Output\n }],\n rectangleClick: [{\n type: Output\n }],\n rectangleDblClick: [{\n type: Output\n }],\n drag: [{\n type: Output\n }],\n dragEnd: [{\n type: Output\n }],\n dragStart: [{\n type: Output\n }],\n mouseDown: [{\n type: Output\n }],\n mouseMove: [{\n type: Output\n }],\n mouseOut: [{\n type: Output\n }],\n mouseOver: [{\n type: Output\n }],\n mouseUp: [{\n type: Output\n }],\n rightClick: [{\n type: Output\n }]\n};\nlet layerId$3 = 0;\n/*\n * This directive adds a transit layer to a google map instance\n * <agm-transit-layer [visible]=\"true|false\"> <agm-transit-layer>\n * */\nclass AgmTransitLayer {\n constructor(_manager) {\n this._manager = _manager;\n this._addedToManager = false;\n this._id = (layerId$3++).toString();\n /**\n * Hide/show transit layer\n */\n this.visible = true;\n }\n ngOnInit() {\n if (this._addedToManager) {\n return;\n }\n this._manager.addTransitLayer(this);\n this._addedToManager = true;\n }\n /** @internal */\n id() {\n return this._id;\n }\n /** @internal */\n toString() {\n return `AgmTransitLayer-${this._id.toString()}`;\n }\n /** @internal */\n ngOnDestroy() {\n this._manager.deleteLayer(this);\n }\n}\nAgmTransitLayer.decorators = [{\n type: Directive,\n args: [{\n selector: 'agm-transit-layer'\n }]\n}];\nAgmTransitLayer.ctorParameters = () => [{\n type: LayerManager\n}];\nAgmTransitLayer.propDecorators = {\n visible: [{\n type: Input\n }]\n};\n\n/**\n * @internal\n */\nfunction coreDirectives() {\n return [AgmBicyclingLayer, AgmCircle, AgmDataLayer, AgmFitBounds, AgmFullscreenControl, AgmInfoWindow, AgmKmlLayer, AgmMap, AgmMapTypeControl, AgmMarker, AgmPanControl, AgmPolygon, AgmPolyline, AgmPolylineIcon, AgmPolylinePoint, AgmRectangle, AgmRotateControl, AgmScaleControl, AgmStreetViewControl, AgmTransitLayer, AgmZoomControl];\n}\n/**\n * The angular-google-maps core module. Contains all Directives/Services/Pipes\n * of the core module. Please use `AgmCoreModule.forRoot()` in your app module.\n */\nclass AgmCoreModule {\n /**\n * Please use this method when you register the module at the root level.\n */\n static forRoot(lazyMapsAPILoaderConfig) {\n return {\n ngModule: AgmCoreModule,\n providers: [...BROWSER_GLOBALS_PROVIDERS, {\n provide: MapsAPILoader,\n useClass: LazyMapsAPILoader\n }, {\n provide: LAZY_MAPS_API_CONFIG,\n useValue: lazyMapsAPILoaderConfig\n }]\n };\n }\n}\nAgmCoreModule.decorators = [{\n type: NgModule,\n args: [{\n declarations: coreDirectives(),\n exports: coreDirectives()\n }]\n}];\n\n/*\n * Public API Surface of core\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AgmBicyclingLayer, AgmCircle, AgmCoreModule, AgmDataLayer, AgmFitBounds, AgmFullscreenControl, AgmGeocoder, AgmInfoWindow, AgmKmlLayer, AgmMap, AgmMapTypeControl, AgmMarker, AgmPanControl, AgmPolygon, AgmPolyline, AgmPolylineIcon, AgmPolylinePoint, AgmRectangle, AgmRotateControl, AgmScaleControl, AgmStreetViewControl, AgmTransitLayer, AgmZoomControl, CircleManager, DataLayerManager, FitBoundsAccessor, GoogleMapsAPIWrapper, GoogleMapsScriptProtocol, InfoWindowManager, KmlLayerManager, LAZY_MAPS_API_CONFIG, LayerManager, LazyMapsAPILoader, MapsAPILoader, MarkerManager, NoOpMapsAPILoader, PolygonManager, PolylineManager, RectangleManager, coreDirectives, FitBoundsService as ɵa, AgmMapControl as ɵb, WindowRef as ɵc, DocumentRef as ɵd, BROWSER_GLOBALS_PROVIDERS as ɵe };","map":{"version":3,"names":["__awaiter","Injectable","NgZone","ɵɵdefineInjectable","ɵɵinject","InjectionToken","Optional","Inject","LOCALE_ID","Directive","Input","EventEmitter","Output","Self","Component","ElementRef","PLATFORM_ID","ContentChildren","QueryList","forwardRef","NgModule","Observable","BehaviorSubject","from","timer","ReplaySubject","bindCallback","of","throwError","fromEventPattern","merge","Subject","flatMap","sample","switchMap","map","shareReplay","multicast","startWith","skip","distinctUntilChanged","takeUntil","isPlatformServer","MapsAPILoader","decorators","type","GoogleMapsAPIWrapper","constructor","_loader","_zone","_map","Promise","resolve","_mapResolver","createMap","el","mapOptions","runOutsideAngular","load","then","google","maps","Map","setMapOptions","options","m","setOptions","createMarker","addToMap","Marker","createInfoWindow","InfoWindow","createCircle","Circle","createRectangle","Rectangle","createPolyline","getNativeMap","line","Polyline","setMap","createPolygon","polygon","Polygon","createDataLayer","data","Data","createTransitLayer","newLayer","TransitLayer","createBicyclingLayer","BicyclingLayer","containsLocation","latLng","geometry","poly","subscribeToMapEvent","eventName","observer","addListener","run","next","arguments","clearInstanceListeners","event","setCenter","getZoom","getBounds","getMapTypeId","setZoom","zoom","getCenter","panTo","panBy","x","y","fitBounds","padding","panToBounds","triggerMapEvent","trigger","ctorParameters","CircleManager","_apiWrapper","_circles","addCircle","circle","set","center","lat","latitude","lng","longitude","clickable","draggable","editable","fillColor","fillOpacity","radius","strokeColor","strokeOpacity","strokePosition","StrokePosition","strokeWeight","visible","zIndex","removeCircle","get","c","delete","actualParam","getRadius","setEditable","setDraggable","setVisible","setRadius","getNativeCircle","createEventObservable","listener","e","remove","DataLayerManager","_wrapper","_layers","addDataLayer","layer","style","d","geoJson","getDataFeatures","features","deleteDataLayer","l","updateGeoJson","forEach","feature","index","indexOf","splice","setDataOptions","setControlPosition","controlPosition","setControls","controls","setDrawingMode","drawingMode","setStyle","reject","addGeoJson","loadGeoJson","FitBoundsAccessor","FitBoundsService","loader","_boundsChangeSampleTime$","_includeInBounds$","bounds$","pipe","time","includeInBounds","_generateBounds","bounds","LatLngBounds","b","extend","addToBounds","id","_createIdentifier","value","has","boundsMap","removeFromBounds","changeFitBoundsChangeSampleTime","timeMs","getBounds$","AgmGeocoder","connectableGeocoder$","subscriber","_createGeocoder","connect","geocoder$","geocode","request","geocoder","_getGoogleResults","geocodeObservable","results","status","GeocoderStatus","OK","Geocoder","ɵprov","factory","AgmGeocoder_Factory","token","providedIn","args","WindowRef","getNativeWindow","window","DocumentRef","getNativeDocument","document","BROWSER_GLOBALS_PROVIDERS","GoogleMapsScriptProtocol","LAZY_MAPS_API_CONFIG","LazyMapsAPILoader","config","w","localeId","_SCRIPT_ID","callbackName","_config","_windowRef","_documentRef","_scriptLoadingPromise","scriptOnPage","getElementById","_assignScriptLoadingPromise","script","createElement","async","defer","src","_getScriptSrc","body","appendChild","scriptElem","onerror","error","protocolType","protocol","HTTPS","AUTO","HTTP","hostAndPath","queryParams","v","apiVersion","callback","key","apiKey","client","clientId","channel","libraries","region","language","params","Object","keys","filter","k","Array","isArray","length","i","join","entry","undefined","String","MarkerManager","_mapsWrapper","_markers","convertAnimation","uiAnim","Animation","deleteMarker","markerDirective","markerPromise","marker","updateMarkerPosition","setPosition","updateTitle","setTitle","title","updateLabel","setLabel","label","updateDraggable","updateIcon","setIcon","iconUrl","updateOpacity","setOpacity","opacity","updateVisible","updateZIndex","setZIndex","updateClickable","setClickable","updateAnimation","setAnimation","animation","addMarker","position","icon","getNativeMarker","InfoWindowManager","_markerManager","_infoWindows","deleteInfoWindow","infoWindow","iWindow","close","open","hostMarker","addInfoWindow","content","maxWidth","disableAutoPan","infoWindowPromise","KmlLayerManager","addKmlLayer","KmlLayer","preserveViewport","screenOverlays","suppressInfoWindows","url","deleteKmlLayer","LayerManager","addTransitLayer","addBicyclingLayer","deleteLayer","currentLayer","NoOpMapsAPILoader","Error","createMVCEventObservable","array","eventNames","handler","previous","apply","newArr","getArray","_handler","evListeners","evListener","MvcArrayMock","vals","listeners","remove_at","insert_at","set_at","clear","removeAt","getAt","getLength","insertAt","elem","pop","deleted","push","setAt","listenerArr","bindTo","changed","notify","setValues","unbind","unbindAll","PolygonManager","_polygons","addPolygon","path","polygonPromise","geodesic","paths","updatePolygon","setPaths","setPolygonOptions","deletePolygon","getPath","polygonDirective","getPaths","p","createPathEventObservable","agmPolygon","pathsChanges$","parentMVEvent","chMVC","chMVCEvent","pathIndex","retVal","subArr","toJSON","PolylineManager","_polylines","_convertPoints","_getPoints","point","_convertPath","symbolPath","SymbolPath","_convertIcons","icons","_getIcons","agmIcon","fixedRotation","offset","repeat","anchor","Point","anchorX","anchorY","rotation","scale","entries","val","addPolyline","polylinePromise","updatePolylinePoints","setPath","updateIconSequences","setPolylineOptions","deletePolyline","getMVCPath","agmPolyline","polyline","mvcPath","RectangleManager","_rectangles","addRectangle","rectangle","north","east","south","west","removeRectangle","r","actualStrokePosition","setBounds","subsrciber","layerId","AgmBicyclingLayer","_manager","_addedToManager","_id","toString","ngOnInit","ngOnDestroy","selector","propDecorators","AgmCircle","centerChange","circleClick","circleDblClick","drag","dragEnd","dragStart","mouseDown","mouseMove","mouseOut","mouseOver","mouseUp","radiusChange","rightClick","_circleAddedToManager","_eventSubscriptions","_registerEventListeners","ngOnChanges","changes","_updateCircleOptionsChanges","optionKeys","_mapOptions","currentValue","events","eventEmitter","subscribe","emit","s","unsubscribe","layerId$1","AgmDataLayer","_subscriptions","layerClick","_addEventListeners","name","ev","obj","os","geoJsonChange","dataOptions","_dataOptionsAttributes","reduce","hasOwnProperty","AgmFitBounds","_fitBoundsAccessor","_fitBoundsService","agmFitBounds","_destroyed$","_latestFitBoundsDetails","_updateBounds","getFitBoundsDetails$","details","newFitBoundsDetails","complete","infoWindowId","AgmInfoWindow","_infoWindowManager","_el","isOpen","infoWindowClose","_infoWindowAddedToManager","nativeElement","querySelector","_updateOpenState","_setInfoWindowOptions","_infoWindowOptionsInputs","template","layerId$2","AgmKmlLayer","defaultViewportChange","statusChange","_updatePolygonOptions","_kmlLayerOptions","AgmMapControl","AgmFullscreenControl","getOptions","fullscreenControl","fullscreenControlOptions","ControlPosition","providers","provide","useExisting","AgmMapTypeControl","mapTypeControl","mapTypeControlOptions","MapTypeControlStyle","mapTypeIds","mapTypeId","MapTypeId","AgmPanControl","panControl","panControlOptions","AgmRotateControl","rotateControl","rotateControlOptions","AgmScaleControl","scaleControl","AgmStreetViewControl","streetViewControl","streetViewControlOptions","AgmZoomControl","zoomControl","zoomControlOptions","ZoomControlStyle","AgmMap","_elem","_platformId","disableDoubleClickZoom","disableDefaultUI","scrollwheel","keyboardShortcuts","styles","usePanning","clickableIcons","showDefaultInfoWindow","gestureHandling","tilt","_observableSubscriptions","mapClick","mapRightClick","mapDblClick","boundsChange","mapTypeIdChange","idle","zoomChange","mapReady","tilesLoaded","ngAfterContentInit","container","_initMapInstance","minZoom","maxZoom","controlSize","backgroundColor","draggableCursor","draggingCursor","toLocaleLowerCase","restriction","_handleMapCenterChange","_handleMapZoomChange","_handleMapMouseEvents","_handleBoundsChange","_handleMapTypeIdChange","_handleTilesLoadedEvent","_handleIdleEvent","_handleControlChange","_fitBoundsSubscription","_updateMapOptionsChanges","_updatePosition","_mapOptionsAttributes","triggerResize","recenter","setTimeout","_fitBounds","_setCenter","newCenter","_subscribeToFitBoundsUpdates","fitBoundsPadding","_isLatLngBoundsLiteral","newBounds","union","z","emitter","placeId","stop","_setControls","mapControls","controlOptions","control","assign","markerId","AgmMarker","openInfoWindow","animationChange","markerClick","markerDblClick","markerRightClick","_markerAddedToManger","_fitBoundsDetails$","handleInfoWindowUpdate","Number","_updateFitBoundsDetails","asObservable","cs","dcs","rc","ds","de","mover","mout","anChng","AgmPolygon","_polygonManager","polyClick","polyDblClick","polyDrag","polyDragEnd","polyDragStart","polyMouseDown","polyMouseMove","polyMouseOut","polyMouseOver","polyMouseUp","polyRightClick","polyPathsChange","_polygonAddedToManager","_init","handlers","paths$","pathEvent","_polygonOptionsAttributes","AgmPolylineIcon","AgmPolylinePoint","positionChanged","polylineId","AgmPolyline","_polylineManager","lineClick","lineDblClick","lineDrag","lineDragEnd","lineDragStart","lineMouseDown","lineMouseMove","lineMouseOut","lineMouseOver","lineMouseUp","lineRightClick","polyPathChange","_polylineAddedToManager","points","pointSub","iconSub","iconSequences","_polylineOptionsAttributes","ob$","toArray","AgmRectangle","rectangleClick","rectangleDblClick","_rectangleAddedToManager","_updateRectangleOptionsChanges","getNorthEast","getSouthWest","layerId$3","AgmTransitLayer","coreDirectives","AgmCoreModule","forRoot","lazyMapsAPILoaderConfig","ngModule","useClass","useValue","declarations","exports","ɵa","ɵb","ɵc","ɵd","ɵe"],"sources":["/home/arctichawk1/Desktop/Projects/Public/Kargi-Sitesi/node_modules/@agm/core/fesm2015/agm-core.js"],"sourcesContent":["import { __awaiter } from 'tslib';\nimport { Injectable, NgZone, ɵɵdefineInjectable, ɵɵinject, InjectionToken, Optional, Inject, LOCALE_ID, Directive, Input, EventEmitter, Output, Self, Component, ElementRef, PLATFORM_ID, ContentChildren, QueryList, forwardRef, NgModule } from '@angular/core';\nimport { Observable, BehaviorSubject, from, timer, ReplaySubject, bindCallback, of, throwError, fromEventPattern, merge, Subject } from 'rxjs';\nimport { flatMap, sample, switchMap, map, shareReplay, multicast, startWith, skip, distinctUntilChanged, takeUntil } from 'rxjs/operators';\nimport { isPlatformServer } from '@angular/common';\n\nclass MapsAPILoader {\n}\nMapsAPILoader.decorators = [\n { type: Injectable }\n];\n\n/**\n * Wrapper class that handles the communication with the Google Maps Javascript\n * API v3\n */\nclass GoogleMapsAPIWrapper {\n constructor(_loader, _zone) {\n this._loader = _loader;\n this._zone = _zone;\n this._map =\n new Promise((resolve) => { this._mapResolver = resolve; });\n }\n createMap(el, mapOptions) {\n return this._zone.runOutsideAngular(() => {\n return this._loader.load().then(() => {\n const map = new google.maps.Map(el, mapOptions);\n this._mapResolver(map);\n return;\n });\n });\n }\n setMapOptions(options) {\n return this._zone.runOutsideAngular(() => {\n this._map.then((m) => { m.setOptions(options); });\n });\n }\n /**\n * Creates a google map marker with the map context\n */\n createMarker(options = {}, addToMap = true) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then((map) => {\n if (addToMap) {\n options.map = map;\n }\n return new google.maps.Marker(options);\n });\n });\n }\n createInfoWindow(options) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(() => new google.maps.InfoWindow(options));\n });\n }\n /**\n * Creates a google.map.Circle for the current map.\n */\n createCircle(options) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then((map) => {\n options.map = map;\n return new google.maps.Circle(options);\n });\n });\n }\n /**\n * Creates a google.map.Rectangle for the current map.\n */\n createRectangle(options) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then((map) => {\n options.map = map;\n return new google.maps.Rectangle(options);\n });\n });\n }\n createPolyline(options) {\n return this._zone.runOutsideAngular(() => {\n return this.getNativeMap().then((map) => {\n const line = new google.maps.Polyline(options);\n line.setMap(map);\n return line;\n });\n });\n }\n createPolygon(options) {\n return this._zone.runOutsideAngular(() => {\n return this.getNativeMap().then((map) => {\n const polygon = new google.maps.Polygon(options);\n polygon.setMap(map);\n return polygon;\n });\n });\n }\n /**\n * Creates a new google.map.Data layer for the current map\n */\n createDataLayer(options) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then(m => {\n const data = new google.maps.Data(options);\n data.setMap(m);\n return data;\n });\n });\n }\n /**\n * Creates a TransitLayer instance for a map\n * @returns a new transit layer object\n */\n createTransitLayer() {\n return this._zone.runOutsideAngular(() => {\n return this._map.then((map) => {\n const newLayer = new google.maps.TransitLayer();\n newLayer.setMap(map);\n return newLayer;\n });\n });\n }\n /**\n * Creates a BicyclingLayer instance for a map\n * @returns a new bicycling layer object\n */\n createBicyclingLayer() {\n return this._zone.runOutsideAngular(() => {\n return this._map.then((map) => {\n const newLayer = new google.maps.BicyclingLayer();\n newLayer.setMap(map);\n return newLayer;\n });\n });\n }\n /**\n * Determines if given coordinates are insite a Polygon path.\n */\n containsLocation(latLng, polygon) {\n return this._map.then(() => google.maps.geometry.poly.containsLocation(latLng, polygon));\n }\n subscribeToMapEvent(eventName) {\n return new Observable((observer) => {\n this._map.then(m => m.addListener(eventName, () => this._zone.run(() => observer.next(arguments[0]))));\n });\n }\n clearInstanceListeners() {\n return this._zone.runOutsideAngular(() => {\n this._map.then((map) => {\n google.maps.event.clearInstanceListeners(map);\n });\n });\n }\n setCenter(latLng) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then((map) => map.setCenter(latLng));\n });\n }\n getZoom() {\n return this._zone.runOutsideAngular(() => {\n return this._map.then((map) => map.getZoom());\n });\n }\n getBounds() {\n return this._zone.runOutsideAngular(() => {\n return this._map.then((map) => map.getBounds());\n });\n }\n getMapTypeId() {\n return this._zone.runOutsideAngular(() => {\n return this._map.then((map) => map.getMapTypeId());\n });\n }\n setZoom(zoom) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then((map) => map.setZoom(zoom));\n });\n }\n getCenter() {\n return this._zone.runOutsideAngular(() => {\n return this._map.then((map) => map.getCenter());\n });\n }\n panTo(latLng) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then((map) => map.panTo(latLng));\n });\n }\n panBy(x, y) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then((map) => map.panBy(x, y));\n });\n }\n fitBounds(latLng, padding) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then((map) => map.fitBounds(latLng, padding));\n });\n }\n panToBounds(latLng, padding) {\n return this._zone.runOutsideAngular(() => {\n return this._map.then((map) => map.panToBounds(latLng, padding));\n });\n }\n /**\n * Returns the native Google Maps Map instance. Be careful when using this instance directly.\n */\n getNativeMap() { return this._map; }\n /**\n * Triggers the given event name on the map instance.\n */\n triggerMapEvent(eventName) {\n return this._map.then((m) => google.maps.event.trigger(m, eventName));\n }\n}\nGoogleMapsAPIWrapper.decorators = [\n { type: Injectable }\n];\nGoogleMapsAPIWrapper.ctorParameters = () => [\n { type: MapsAPILoader },\n { type: NgZone }\n];\n\nclass CircleManager {\n constructor(_apiWrapper, _zone) {\n this._apiWrapper = _apiWrapper;\n this._zone = _zone;\n this._circles = new Map();\n }\n addCircle(circle) {\n this._apiWrapper.getNativeMap().then(() => this._circles.set(circle, this._apiWrapper.createCircle({\n center: { lat: circle.latitude, lng: circle.longitude },\n clickable: circle.clickable,\n draggable: circle.draggable,\n editable: circle.editable,\n fillColor: circle.fillColor,\n fillOpacity: circle.fillOpacity,\n radius: circle.radius,\n strokeColor: circle.strokeColor,\n strokeOpacity: circle.strokeOpacity,\n strokePosition: google.maps.StrokePosition[circle.strokePosition],\n strokeWeight: circle.strokeWeight,\n visible: circle.visible,\n zIndex: circle.zIndex,\n })));\n }\n /**\n * Removes the given circle from the map.\n */\n removeCircle(circle) {\n return this._circles.get(circle).then((c) => {\n c.setMap(null);\n this._circles.delete(circle);\n });\n }\n setOptions(circle, options) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._circles.get(circle).then((c) => {\n const actualParam = options.strokePosition;\n options.strokePosition = google.maps.StrokePosition[actualParam];\n c.setOptions(options);\n });\n });\n }\n getBounds(circle) {\n return this._circles.get(circle).then((c) => c.getBounds());\n }\n getCenter(circle) {\n return this._circles.get(circle).then((c) => c.getCenter());\n }\n getRadius(circle) {\n return this._circles.get(circle).then((c) => c.getRadius());\n }\n setCenter(circle) {\n return this._circles.get(circle).then(c => c.setCenter({ lat: circle.latitude, lng: circle.longitude }));\n }\n setEditable(circle) {\n return this._circles.get(circle).then(c => c.setEditable(circle.editable));\n }\n setDraggable(circle) {\n return this._circles.get(circle).then(c => c.setDraggable(circle.draggable));\n }\n setVisible(circle) {\n return this._circles.get(circle).then(c => c.setVisible(circle.visible));\n }\n setRadius(circle) {\n return this._circles.get(circle).then(c => c.setRadius(circle.radius));\n }\n getNativeCircle(circle) {\n return this._circles.get(circle);\n }\n createEventObservable(eventName, circle) {\n return new Observable((observer) => {\n let listener = null;\n this._circles.get(circle).then((c) => {\n listener = c.addListener(eventName, (e) => this._zone.run(() => observer.next(e)));\n });\n return () => {\n if (listener !== null) {\n listener.remove();\n }\n };\n });\n }\n}\nCircleManager.decorators = [\n { type: Injectable }\n];\nCircleManager.ctorParameters = () => [\n { type: GoogleMapsAPIWrapper },\n { type: NgZone }\n];\n\n/**\n * Manages all Data Layers for a Google Map instance.\n */\nclass DataLayerManager {\n constructor(_wrapper, _zone) {\n this._wrapper = _wrapper;\n this._zone = _zone;\n this._layers = new Map();\n }\n /**\n * Adds a new Data Layer to the map.\n */\n addDataLayer(layer) {\n const newLayer = this._wrapper.createDataLayer({\n style: layer.style,\n })\n .then(d => {\n if (layer.geoJson) {\n // NOTE: accessing \"features\" on google.maps.Data is undocumented\n this.getDataFeatures(d, layer.geoJson).then(features => d.features = features);\n }\n return d;\n });\n this._layers.set(layer, newLayer);\n }\n deleteDataLayer(layer) {\n this._layers.get(layer).then(l => {\n l.setMap(null);\n this._layers.delete(layer);\n });\n }\n updateGeoJson(layer, geoJson) {\n this._layers.get(layer).then(l => {\n l.forEach(feature => {\n l.remove(feature);\n // NOTE: accessing \"features\" on google.maps.Data is undocumented\n const index = l.features.indexOf(feature, 0);\n if (index > -1) {\n l.features.splice(index, 1);\n }\n });\n this.getDataFeatures(l, geoJson).then(features => l.features = features);\n });\n }\n setDataOptions(layer, options) {\n this._layers.get(layer).then(l => {\n l.setControlPosition(options.controlPosition);\n l.setControls(options.controls);\n l.setDrawingMode(options.drawingMode);\n l.setStyle(options.style);\n });\n }\n /**\n * Creates a Google Maps event listener for the given DataLayer as an Observable\n */\n createEventObservable(eventName, layer) {\n return new Observable((observer) => {\n this._layers.get(layer).then((d) => {\n d.addListener(eventName, (e) => this._zone.run(() => observer.next(e)));\n });\n });\n }\n /**\n * Extract features from a geoJson using google.maps Data Class\n * @param d : google.maps.Data class instance\n * @param geoJson : url or geojson object\n */\n getDataFeatures(d, geoJson) {\n return new Promise((resolve, reject) => {\n if (typeof geoJson === 'object') {\n try {\n const features = d.addGeoJson(geoJson);\n resolve(features);\n }\n catch (e) {\n reject(e);\n }\n }\n else if (typeof geoJson === 'string') {\n d.loadGeoJson(geoJson, null, resolve);\n }\n else {\n reject(`Impossible to extract features from geoJson: wrong argument type`);\n }\n });\n }\n}\nDataLayerManager.decorators = [\n { type: Injectable }\n];\nDataLayerManager.ctorParameters = () => [\n { type: GoogleMapsAPIWrapper },\n { type: NgZone }\n];\n\n/**\n * Class to implement when you what to be able to make it work with the auto fit bounds feature\n * of AGM.\n */\nclass FitBoundsAccessor {\n}\n/**\n * The FitBoundsService is responsible for computing the bounds of the a single map.\n */\nclass FitBoundsService {\n constructor(loader) {\n this._boundsChangeSampleTime$ = new BehaviorSubject(200);\n this._includeInBounds$ = new BehaviorSubject(new Map());\n this.bounds$ = from(loader.load()).pipe(flatMap(() => this._includeInBounds$), sample(this._boundsChangeSampleTime$.pipe(switchMap(time => timer(0, time)))), map(includeInBounds => this._generateBounds(includeInBounds)), shareReplay(1));\n }\n _generateBounds(includeInBounds) {\n const bounds = new google.maps.LatLngBounds();\n includeInBounds.forEach(b => bounds.extend(b));\n return bounds;\n }\n addToBounds(latLng) {\n const id = this._createIdentifier(latLng);\n if (this._includeInBounds$.value.has(id)) {\n return;\n }\n const boundsMap = this._includeInBounds$.value;\n boundsMap.set(id, latLng);\n this._includeInBounds$.next(boundsMap);\n }\n removeFromBounds(latLng) {\n const boundsMap = this._includeInBounds$.value;\n boundsMap.delete(this._createIdentifier(latLng));\n this._includeInBounds$.next(boundsMap);\n }\n changeFitBoundsChangeSampleTime(timeMs) {\n this._boundsChangeSampleTime$.next(timeMs);\n }\n getBounds$() {\n return this.bounds$;\n }\n _createIdentifier(latLng) {\n return `${latLng.lat}+${latLng.lng}`;\n }\n}\nFitBoundsService.decorators = [\n { type: Injectable }\n];\nFitBoundsService.ctorParameters = () => [\n { type: MapsAPILoader }\n];\n\nclass AgmGeocoder {\n constructor(loader) {\n const connectableGeocoder$ = new Observable(subscriber => {\n loader.load().then(() => subscriber.next());\n })\n .pipe(map(() => this._createGeocoder()), multicast(new ReplaySubject(1)));\n connectableGeocoder$.connect(); // ignore the subscription\n // since we will remain subscribed till application exits\n this.geocoder$ = connectableGeocoder$;\n }\n geocode(request) {\n return this.geocoder$.pipe(switchMap((geocoder) => this._getGoogleResults(geocoder, request)));\n }\n _getGoogleResults(geocoder, request) {\n const geocodeObservable = bindCallback(geocoder.geocode);\n return geocodeObservable(request).pipe(switchMap(([results, status]) => {\n if (status === google.maps.GeocoderStatus.OK) {\n return of(results);\n }\n return throwError(status);\n }));\n }\n _createGeocoder() {\n return new google.maps.Geocoder();\n }\n}\nAgmGeocoder.ɵprov = ɵɵdefineInjectable({ factory: function AgmGeocoder_Factory() { return new AgmGeocoder(ɵɵinject(MapsAPILoader)); }, token: AgmGeocoder, providedIn: \"root\" });\nAgmGeocoder.decorators = [\n { type: Injectable, args: [{ providedIn: 'root' },] }\n];\nAgmGeocoder.ctorParameters = () => [\n { type: MapsAPILoader }\n];\n\nclass WindowRef {\n getNativeWindow() { return window; }\n}\nclass DocumentRef {\n getNativeDocument() { return document; }\n}\nconst BROWSER_GLOBALS_PROVIDERS = [WindowRef, DocumentRef];\n\nvar GoogleMapsScriptProtocol;\n(function (GoogleMapsScriptProtocol) {\n GoogleMapsScriptProtocol[GoogleMapsScriptProtocol[\"HTTP\"] = 1] = \"HTTP\";\n GoogleMapsScriptProtocol[GoogleMapsScriptProtocol[\"HTTPS\"] = 2] = \"HTTPS\";\n GoogleMapsScriptProtocol[GoogleMapsScriptProtocol[\"AUTO\"] = 3] = \"AUTO\";\n})(GoogleMapsScriptProtocol || (GoogleMapsScriptProtocol = {}));\n/**\n * Token for the config of the LazyMapsAPILoader. Please provide an object of type {@link\n * LazyMapsAPILoaderConfig}.\n */\nconst LAZY_MAPS_API_CONFIG = new InjectionToken('angular-google-maps LAZY_MAPS_API_CONFIG');\nclass LazyMapsAPILoader extends MapsAPILoader {\n constructor(config = null, w, d, localeId) {\n super();\n this.localeId = localeId;\n this._SCRIPT_ID = 'agmGoogleMapsApiScript';\n this.callbackName = `agmLazyMapsAPILoader`;\n this._config = config || {};\n this._windowRef = w;\n this._documentRef = d;\n }\n load() {\n const window = this._windowRef.getNativeWindow();\n if (window.google && window.google.maps) {\n // Google maps already loaded on the page.\n return Promise.resolve();\n }\n if (this._scriptLoadingPromise) {\n return this._scriptLoadingPromise;\n }\n // this can happen in HMR situations or Stackblitz.io editors.\n const scriptOnPage = this._documentRef.getNativeDocument().getElementById(this._SCRIPT_ID);\n if (scriptOnPage) {\n this._assignScriptLoadingPromise(scriptOnPage);\n return this._scriptLoadingPromise;\n }\n const script = this._documentRef.getNativeDocument().createElement('script');\n script.type = 'text/javascript';\n script.async = true;\n script.defer = true;\n script.id = this._SCRIPT_ID;\n script.src = this._getScriptSrc(this.callbackName);\n this._assignScriptLoadingPromise(script);\n this._documentRef.getNativeDocument().body.appendChild(script);\n return this._scriptLoadingPromise;\n }\n _assignScriptLoadingPromise(scriptElem) {\n this._scriptLoadingPromise = new Promise((resolve, reject) => {\n this._windowRef.getNativeWindow()[this.callbackName] = () => {\n resolve();\n };\n scriptElem.onerror = (error) => {\n reject(error);\n };\n });\n }\n _getScriptSrc(callbackName) {\n const protocolType = (this._config && this._config.protocol) || GoogleMapsScriptProtocol.HTTPS;\n let protocol;\n switch (protocolType) {\n case GoogleMapsScriptProtocol.AUTO:\n protocol = '';\n break;\n case GoogleMapsScriptProtocol.HTTP:\n protocol = 'http:';\n break;\n case GoogleMapsScriptProtocol.HTTPS:\n protocol = 'https:';\n break;\n }\n const hostAndPath = this._config.hostAndPath || 'maps.googleapis.com/maps/api/js';\n const queryParams = {\n v: this._config.apiVersion || 'quarterly',\n callback: callbackName,\n key: this._config.apiKey,\n client: this._config.clientId,\n channel: this._config.channel,\n libraries: this._config.libraries,\n region: this._config.region,\n language: this._config.language || (this.localeId !== 'en-US' ? this.localeId : null),\n };\n const params = Object.keys(queryParams)\n .filter((k) => queryParams[k] != null)\n .filter((k) => {\n // remove empty arrays\n return !Array.isArray(queryParams[k]) ||\n (Array.isArray(queryParams[k]) && queryParams[k].length > 0);\n })\n .map((k) => {\n // join arrays as comma seperated strings\n const i = queryParams[k];\n if (Array.isArray(i)) {\n return { key: k, value: i.join(',') };\n }\n return { key: k, value: queryParams[k] };\n })\n .map((entry) => {\n return `${entry.key}=${entry.value}`;\n })\n .join('&');\n return `${protocol}//${hostAndPath}?${params}`;\n }\n}\nLazyMapsAPILoader.decorators = [\n { type: Injectable }\n];\nLazyMapsAPILoader.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [LAZY_MAPS_API_CONFIG,] }] },\n { type: WindowRef },\n { type: DocumentRef },\n { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] }\n];\n\nclass MarkerManager {\n constructor(_mapsWrapper, _zone) {\n this._mapsWrapper = _mapsWrapper;\n this._zone = _zone;\n this._markers = new Map();\n }\n convertAnimation(uiAnim) {\n return __awaiter(this, void 0, void 0, function* () {\n if (uiAnim === null) {\n return null;\n }\n else {\n return this._mapsWrapper.getNativeMap().then(() => google.maps.Animation[uiAnim]);\n }\n });\n }\n deleteMarker(markerDirective) {\n const markerPromise = this._markers.get(markerDirective);\n if (markerPromise == null) {\n // marker already deleted\n return Promise.resolve();\n }\n return markerPromise.then((marker) => {\n return this._zone.run(() => {\n marker.setMap(null);\n this._markers.delete(markerDirective);\n });\n });\n }\n updateMarkerPosition(marker) {\n return this._markers.get(marker).then((m) => m.setPosition({ lat: marker.latitude, lng: marker.longitude }));\n }\n updateTitle(marker) {\n return this._markers.get(marker).then((m) => m.setTitle(marker.title));\n }\n updateLabel(marker) {\n return this._markers.get(marker).then((m) => { m.setLabel(marker.label); });\n }\n updateDraggable(marker) {\n return this._markers.get(marker).then((m) => m.setDraggable(marker.draggable));\n }\n updateIcon(marker) {\n return this._markers.get(marker).then((m) => m.setIcon(marker.iconUrl));\n }\n updateOpacity(marker) {\n return this._markers.get(marker).then((m) => m.setOpacity(marker.opacity));\n }\n updateVisible(marker) {\n return this._markers.get(marker).then((m) => m.setVisible(marker.visible));\n }\n updateZIndex(marker) {\n return this._markers.get(marker).then((m) => m.setZIndex(marker.zIndex));\n }\n updateClickable(marker) {\n return this._markers.get(marker).then((m) => m.setClickable(marker.clickable));\n }\n updateAnimation(marker) {\n return __awaiter(this, void 0, void 0, function* () {\n const m = yield this._markers.get(marker);\n m.setAnimation(yield this.convertAnimation(marker.animation));\n });\n }\n addMarker(marker) {\n const markerPromise = new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {\n return this._mapsWrapper.createMarker({\n position: { lat: marker.latitude, lng: marker.longitude },\n label: marker.label,\n draggable: marker.draggable,\n icon: marker.iconUrl,\n opacity: marker.opacity,\n visible: marker.visible,\n zIndex: marker.zIndex,\n title: marker.title,\n clickable: marker.clickable,\n animation: yield this.convertAnimation(marker.animation),\n }).then(resolve);\n }));\n this._markers.set(marker, markerPromise);\n }\n getNativeMarker(marker) {\n return this._markers.get(marker);\n }\n createEventObservable(eventName, marker) {\n return new Observable(observer => {\n this._markers.get(marker).then(m => m.addListener(eventName, e => this._zone.run(() => observer.next(e))));\n });\n }\n}\nMarkerManager.decorators = [\n { type: Injectable }\n];\nMarkerManager.ctorParameters = () => [\n { type: GoogleMapsAPIWrapper },\n { type: NgZone }\n];\n\nclass InfoWindowManager {\n constructor(_mapsWrapper, _zone, _markerManager) {\n this._mapsWrapper = _mapsWrapper;\n this._zone = _zone;\n this._markerManager = _markerManager;\n this._infoWindows = new Map();\n }\n deleteInfoWindow(infoWindow) {\n const iWindow = this._infoWindows.get(infoWindow);\n if (iWindow == null) {\n // info window already deleted\n return Promise.resolve();\n }\n return iWindow.then((i) => {\n return this._zone.run(() => {\n i.close();\n this._infoWindows.delete(infoWindow);\n });\n });\n }\n setPosition(infoWindow) {\n return this._infoWindows.get(infoWindow).then((i) => i.setPosition({\n lat: infoWindow.latitude,\n lng: infoWindow.longitude,\n }));\n }\n setZIndex(infoWindow) {\n return this._infoWindows.get(infoWindow)\n .then((i) => i.setZIndex(infoWindow.zIndex));\n }\n open(infoWindow) {\n return this._infoWindows.get(infoWindow).then((w) => {\n if (infoWindow.hostMarker != null) {\n return this._markerManager.getNativeMarker(infoWindow.hostMarker).then((marker) => {\n return this._mapsWrapper.getNativeMap().then((map) => w.open(map, marker));\n });\n }\n return this._mapsWrapper.getNativeMap().then((map) => w.open(map));\n });\n }\n close(infoWindow) {\n return this._infoWindows.get(infoWindow).then((w) => w.close());\n }\n setOptions(infoWindow, options) {\n return this._infoWindows.get(infoWindow).then((i) => i.setOptions(options));\n }\n addInfoWindow(infoWindow) {\n const options = {\n content: infoWindow.content,\n maxWidth: infoWindow.maxWidth,\n zIndex: infoWindow.zIndex,\n disableAutoPan: infoWindow.disableAutoPan,\n };\n if (typeof infoWindow.latitude === 'number' && typeof infoWindow.longitude === 'number') {\n options.position = { lat: infoWindow.latitude, lng: infoWindow.longitude };\n }\n const infoWindowPromise = this._mapsWrapper.createInfoWindow(options);\n this._infoWindows.set(infoWindow, infoWindowPromise);\n }\n /**\n * Creates a Google Maps event listener for the given InfoWindow as an Observable\n */\n createEventObservable(eventName, infoWindow) {\n return new Observable((observer) => {\n this._infoWindows.get(infoWindow).then((i) => {\n i.addListener(eventName, (e) => this._zone.run(() => observer.next(e)));\n });\n });\n }\n}\nInfoWindowManager.decorators = [\n { type: Injectable }\n];\nInfoWindowManager.ctorParameters = () => [\n { type: GoogleMapsAPIWrapper },\n { type: NgZone },\n { type: MarkerManager }\n];\n\n/**\n * Manages all KML Layers for a Google Map instance.\n */\nclass KmlLayerManager {\n constructor(_wrapper, _zone) {\n this._wrapper = _wrapper;\n this._zone = _zone;\n this._layers = new Map();\n }\n /**\n * Adds a new KML Layer to the map.\n */\n addKmlLayer(layer) {\n const newLayer = this._wrapper.getNativeMap().then(m => {\n return new google.maps.KmlLayer({\n clickable: layer.clickable,\n map: m,\n preserveViewport: layer.preserveViewport,\n screenOverlays: layer.screenOverlays,\n suppressInfoWindows: layer.suppressInfoWindows,\n url: layer.url,\n zIndex: layer.zIndex,\n });\n });\n this._layers.set(layer, newLayer);\n }\n setOptions(layer, options) {\n this._layers.get(layer).then(l => l.setOptions(options));\n }\n deleteKmlLayer(layer) {\n this._layers.get(layer).then(l => {\n l.setMap(null);\n this._layers.delete(layer);\n });\n }\n /**\n * Creates a Google Maps event listener for the given KmlLayer as an Observable\n */\n createEventObservable(eventName, layer) {\n return new Observable((observer) => {\n this._layers.get(layer).then((m) => {\n m.addListener(eventName, (e) => this._zone.run(() => observer.next(e)));\n });\n });\n }\n}\nKmlLayerManager.decorators = [\n { type: Injectable }\n];\nKmlLayerManager.ctorParameters = () => [\n { type: GoogleMapsAPIWrapper },\n { type: NgZone }\n];\n\n/**\n * This class manages Transit and Bicycling Layers for a Google Map instance.\n */\nclass LayerManager {\n constructor(_wrapper) {\n this._wrapper = _wrapper;\n this._layers = new Map();\n }\n /**\n * Adds a transit layer to a map instance.\n * @param layer - a TransitLayer object\n * @param _options - TransitLayerOptions options\n * @returns void\n */\n addTransitLayer(layer) {\n const newLayer = this._wrapper.createTransitLayer();\n this._layers.set(layer, newLayer);\n }\n /**\n * Adds a bicycling layer to a map instance.\n * @param layer - a bicycling layer object\n * @param _options - BicyclingLayer options\n * @returns void\n */\n addBicyclingLayer(layer) {\n const newLayer = this._wrapper.createBicyclingLayer();\n this._layers.set(layer, newLayer);\n }\n /**\n * Deletes a map layer\n * @param layer - the layer to delete\n */\n deleteLayer(layer) {\n return this._layers.get(layer).then(currentLayer => {\n currentLayer.setMap(null);\n this._layers.delete(layer);\n });\n }\n}\nLayerManager.decorators = [\n { type: Injectable }\n];\nLayerManager.ctorParameters = () => [\n { type: GoogleMapsAPIWrapper }\n];\n\n/**\n * When using the NoOpMapsAPILoader, the Google Maps API must be added to the page via a `<script>`\n * Tag.\n * It's important that the Google Maps API script gets loaded first on the page.\n */\nclass NoOpMapsAPILoader {\n load() {\n if (!window.google || !window.google.maps) {\n throw new Error('Google Maps API not loaded on page. Make sure window.google.maps is available!');\n }\n return Promise.resolve();\n }\n}\n\nfunction createMVCEventObservable(array) {\n const eventNames = ['insert_at', 'remove_at', 'set_at'];\n return fromEventPattern(handler => eventNames.map(eventName => array.addListener(eventName, (index, previous) => handler.apply(array, [{ newArr: array.getArray(), eventName, index, previous }]))), (_handler, evListeners) => evListeners.forEach(evListener => evListener.remove()));\n}\nclass MvcArrayMock {\n constructor() {\n this.vals = [];\n this.listeners = {\n remove_at: [],\n insert_at: [],\n set_at: [],\n };\n }\n clear() {\n for (let i = this.vals.length - 1; i >= 0; i--) {\n this.removeAt(i);\n }\n }\n getArray() {\n return [...this.vals];\n }\n getAt(i) {\n return this.vals[i];\n }\n getLength() {\n return this.vals.length;\n }\n insertAt(i, elem) {\n this.vals.splice(i, 0, elem);\n this.listeners.insert_at.forEach(listener => listener(i));\n }\n pop() {\n const deleted = this.vals.pop();\n this.listeners.remove_at.forEach(listener => listener(this.vals.length, deleted));\n return deleted;\n }\n push(elem) {\n this.vals.push(elem);\n this.listeners.insert_at.forEach(listener => listener(this.vals.length - 1));\n return this.vals.length;\n }\n removeAt(i) {\n const deleted = this.vals.splice(i, 1)[0];\n this.listeners.remove_at.forEach(listener => listener(i, deleted));\n return deleted;\n }\n setAt(i, elem) {\n const deleted = this.vals[i];\n this.vals[i] = elem;\n this.listeners.set_at.forEach(listener => listener(i, deleted));\n }\n forEach(callback) {\n this.vals.forEach(callback);\n }\n addListener(eventName, handler) {\n const listenerArr = this.listeners[eventName];\n listenerArr.push(handler);\n return {\n remove: () => {\n listenerArr.splice(listenerArr.indexOf(handler), 1);\n },\n };\n }\n bindTo() { throw new Error('Not implemented'); }\n changed() { throw new Error('Not implemented'); }\n get() { throw new Error('Not implemented'); }\n notify() { throw new Error('Not implemented'); }\n set() { throw new Error('Not implemented'); }\n setValues() { throw new Error('Not implemented'); }\n unbind() { throw new Error('Not implemented'); }\n unbindAll() { throw new Error('Not implemented'); }\n}\n\nclass PolygonManager {\n constructor(_mapsWrapper, _zone) {\n this._mapsWrapper = _mapsWrapper;\n this._zone = _zone;\n this._polygons = new Map();\n }\n addPolygon(path) {\n const polygonPromise = this._mapsWrapper.createPolygon({\n clickable: path.clickable,\n draggable: path.draggable,\n editable: path.editable,\n fillColor: path.fillColor,\n fillOpacity: path.fillOpacity,\n geodesic: path.geodesic,\n paths: path.paths,\n strokeColor: path.strokeColor,\n strokeOpacity: path.strokeOpacity,\n strokeWeight: path.strokeWeight,\n visible: path.visible,\n zIndex: path.zIndex,\n });\n this._polygons.set(path, polygonPromise);\n }\n updatePolygon(polygon) {\n const m = this._polygons.get(polygon);\n if (m == null) {\n return Promise.resolve();\n }\n return m.then((l) => this._zone.run(() => { l.setPaths(polygon.paths); }));\n }\n setPolygonOptions(path, options) {\n return this._polygons.get(path).then((l) => { l.setOptions(options); });\n }\n deletePolygon(paths) {\n const m = this._polygons.get(paths);\n if (m == null) {\n return Promise.resolve();\n }\n return m.then((l) => {\n return this._zone.run(() => {\n l.setMap(null);\n this._polygons.delete(paths);\n });\n });\n }\n getPath(polygonDirective) {\n return this._polygons.get(polygonDirective)\n .then((polygon) => polygon.getPath().getArray());\n }\n getPaths(polygonDirective) {\n return this._polygons.get(polygonDirective)\n .then((polygon) => polygon.getPaths().getArray().map((p) => p.getArray()));\n }\n createEventObservable(eventName, path) {\n return new Observable((observer) => {\n this._polygons.get(path).then((l) => {\n l.addListener(eventName, (e) => this._zone.run(() => observer.next(e)));\n });\n });\n }\n createPathEventObservable(agmPolygon) {\n return __awaiter(this, void 0, void 0, function* () {\n const polygon = yield this._polygons.get(agmPolygon);\n const paths = polygon.getPaths();\n const pathsChanges$ = createMVCEventObservable(paths);\n return pathsChanges$.pipe(startWith({ newArr: paths.getArray() }), // in order to subscribe to them all\n switchMap(parentMVEvent => merge(... // rest parameter\n parentMVEvent.newArr.map((chMVC, index) => createMVCEventObservable(chMVC)\n .pipe(map(chMVCEvent => ({ parentMVEvent, chMVCEvent, pathIndex: index })))))\n .pipe(// start the merged ob with an event signinifing change to parent\n startWith({ parentMVEvent, chMVCEvent: null, pathIndex: null }))), skip(1), // skip the manually added event\n map(({ parentMVEvent, chMVCEvent, pathIndex }) => {\n let retVal;\n if (!chMVCEvent) {\n retVal = {\n newArr: parentMVEvent.newArr.map(subArr => subArr.getArray().map(latLng => latLng.toJSON())),\n eventName: parentMVEvent.eventName,\n index: parentMVEvent.index,\n };\n if (parentMVEvent.previous) {\n retVal.previous = parentMVEvent.previous.getArray();\n }\n }\n else {\n retVal = {\n newArr: parentMVEvent.newArr.map(subArr => subArr.getArray().map(latLng => latLng.toJSON())),\n pathIndex,\n eventName: chMVCEvent.eventName,\n index: chMVCEvent.index,\n };\n if (chMVCEvent.previous) {\n retVal.previous = chMVCEvent.previous;\n }\n }\n return retVal;\n }));\n });\n }\n}\nPolygonManager.decorators = [\n { type: Injectable }\n];\nPolygonManager.ctorParameters = () => [\n { type: GoogleMapsAPIWrapper },\n { type: NgZone }\n];\n\nclass PolylineManager {\n constructor(_mapsWrapper, _zone) {\n this._mapsWrapper = _mapsWrapper;\n this._zone = _zone;\n this._polylines = new Map();\n }\n static _convertPoints(line) {\n const path = line._getPoints().map((point) => {\n return { lat: point.latitude, lng: point.longitude };\n });\n return path;\n }\n static _convertPath(path) {\n const symbolPath = google.maps.SymbolPath[path];\n if (typeof symbolPath === 'number') {\n return symbolPath;\n }\n else {\n return path;\n }\n }\n static _convertIcons(line) {\n const icons = line._getIcons().map(agmIcon => ({\n fixedRotation: agmIcon.fixedRotation,\n offset: agmIcon.offset,\n repeat: agmIcon.repeat,\n icon: {\n anchor: new google.maps.Point(agmIcon.anchorX, agmIcon.anchorY),\n fillColor: agmIcon.fillColor,\n fillOpacity: agmIcon.fillOpacity,\n path: PolylineManager._convertPath(agmIcon.path),\n rotation: agmIcon.rotation,\n scale: agmIcon.scale,\n strokeColor: agmIcon.strokeColor,\n strokeOpacity: agmIcon.strokeOpacity,\n strokeWeight: agmIcon.strokeWeight,\n },\n }));\n // prune undefineds;\n icons.forEach(icon => {\n Object.entries(icon).forEach(([key, val]) => {\n if (typeof val === 'undefined') {\n delete icon[key];\n }\n });\n if (typeof icon.icon.anchor.x === 'undefined' ||\n typeof icon.icon.anchor.y === 'undefined') {\n delete icon.icon.anchor;\n }\n });\n return icons;\n }\n addPolyline(line) {\n const polylinePromise = this._mapsWrapper.getNativeMap()\n .then(() => [PolylineManager._convertPoints(line),\n PolylineManager._convertIcons(line)])\n .then(([path, icons]) => this._mapsWrapper.createPolyline({\n clickable: line.clickable,\n draggable: line.draggable,\n editable: line.editable,\n geodesic: line.geodesic,\n strokeColor: line.strokeColor,\n strokeOpacity: line.strokeOpacity,\n strokeWeight: line.strokeWeight,\n visible: line.visible,\n zIndex: line.zIndex,\n path,\n icons,\n }));\n this._polylines.set(line, polylinePromise);\n }\n updatePolylinePoints(line) {\n const path = PolylineManager._convertPoints(line);\n const m = this._polylines.get(line);\n if (m == null) {\n return Promise.resolve();\n }\n return m.then((l) => this._zone.run(() => l.setPath(path)));\n }\n updateIconSequences(line) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._mapsWrapper.getNativeMap();\n const icons = PolylineManager._convertIcons(line);\n const m = this._polylines.get(line);\n if (m == null) {\n return;\n }\n return m.then(l => this._zone.run(() => l.setOptions({ icons })));\n });\n }\n setPolylineOptions(line, options) {\n return this._polylines.get(line).then((l) => { l.setOptions(options); });\n }\n deletePolyline(line) {\n const m = this._polylines.get(line);\n if (m == null) {\n return Promise.resolve();\n }\n return m.then((l) => {\n return this._zone.run(() => {\n l.setMap(null);\n this._polylines.delete(line);\n });\n });\n }\n getMVCPath(agmPolyline) {\n return __awaiter(this, void 0, void 0, function* () {\n const polyline = yield this._polylines.get(agmPolyline);\n return polyline.getPath();\n });\n }\n getPath(agmPolyline) {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield this.getMVCPath(agmPolyline)).getArray();\n });\n }\n createEventObservable(eventName, line) {\n return new Observable((observer) => {\n this._polylines.get(line).then((l) => {\n l.addListener(eventName, (e) => this._zone.run(() => observer.next(e)));\n });\n });\n }\n createPathEventObservable(line) {\n return __awaiter(this, void 0, void 0, function* () {\n const mvcPath = yield this.getMVCPath(line);\n return createMVCEventObservable(mvcPath);\n });\n }\n}\nPolylineManager.decorators = [\n { type: Injectable }\n];\nPolylineManager.ctorParameters = () => [\n { type: GoogleMapsAPIWrapper },\n { type: NgZone }\n];\n\nclass RectangleManager {\n constructor(_apiWrapper, _zone) {\n this._apiWrapper = _apiWrapper;\n this._zone = _zone;\n this._rectangles = new Map();\n }\n addRectangle(rectangle) {\n this._apiWrapper.getNativeMap().then(() => this._rectangles.set(rectangle, this._apiWrapper.createRectangle({\n bounds: {\n north: rectangle.north,\n east: rectangle.east,\n south: rectangle.south,\n west: rectangle.west,\n },\n clickable: rectangle.clickable,\n draggable: rectangle.draggable,\n editable: rectangle.editable,\n fillColor: rectangle.fillColor,\n fillOpacity: rectangle.fillOpacity,\n strokeColor: rectangle.strokeColor,\n strokeOpacity: rectangle.strokeOpacity,\n strokePosition: google.maps.StrokePosition[rectangle.strokePosition],\n strokeWeight: rectangle.strokeWeight,\n visible: rectangle.visible,\n zIndex: rectangle.zIndex,\n })));\n }\n /**\n * Removes the given rectangle from the map.\n */\n removeRectangle(rectangle) {\n return this._rectangles.get(rectangle).then((r) => {\n r.setMap(null);\n this._rectangles.delete(rectangle);\n });\n }\n setOptions(rectangle, options) {\n return this._rectangles.get(rectangle).then((r) => {\n const actualStrokePosition = options.strokePosition;\n options.strokePosition = google.maps.StrokePosition[actualStrokePosition];\n r.setOptions(options);\n });\n }\n getBounds(rectangle) {\n return this._rectangles.get(rectangle).then((r) => r.getBounds());\n }\n setBounds(rectangle) {\n return this._rectangles.get(rectangle).then((r) => {\n return r.setBounds({\n north: rectangle.north,\n east: rectangle.east,\n south: rectangle.south,\n west: rectangle.west,\n });\n });\n }\n setEditable(rectangle) {\n return this._rectangles.get(rectangle).then((r) => {\n return r.setEditable(rectangle.editable);\n });\n }\n setDraggable(rectangle) {\n return this._rectangles.get(rectangle).then((r) => {\n return r.setDraggable(rectangle.draggable);\n });\n }\n setVisible(rectangle) {\n return this._rectangles.get(rectangle).then((r) => {\n return r.setVisible(rectangle.visible);\n });\n }\n createEventObservable(eventName, rectangle) {\n return new Observable((subsrciber) => {\n let listener = null;\n this._rectangles.get(rectangle).then((r) => {\n listener = r.addListener(eventName, (e) => this._zone.run(() => subsrciber.next(e)));\n });\n return () => {\n if (listener !== null) {\n listener.remove();\n }\n };\n });\n }\n}\nRectangleManager.decorators = [\n { type: Injectable }\n];\nRectangleManager.ctorParameters = () => [\n { type: GoogleMapsAPIWrapper },\n { type: NgZone }\n];\n\nlet layerId = 0;\n/*\n * This directive adds a bicycling layer to a google map instance\n * <agm-bicycling-layer [visible]=\"true|false\"> <agm-bicycling-layer>\n * */\nclass AgmBicyclingLayer {\n constructor(_manager) {\n this._manager = _manager;\n this._addedToManager = false;\n this._id = (layerId++).toString();\n /**\n * Hide/show bicycling layer\n */\n this.visible = true;\n }\n ngOnInit() {\n if (this._addedToManager) {\n return;\n }\n this._manager.addBicyclingLayer(this);\n this._addedToManager = true;\n }\n /** @internal */\n id() { return this._id; }\n /** @internal */\n toString() { return `AgmBicyclingLayer-${this._id.toString()}`; }\n /** @internal */\n ngOnDestroy() {\n this._manager.deleteLayer(this);\n }\n}\nAgmBicyclingLayer.decorators = [\n { type: Directive, args: [{\n selector: 'agm-bicycling-layer',\n },] }\n];\nAgmBicyclingLayer.ctorParameters = () => [\n { type: LayerManager }\n];\nAgmBicyclingLayer.propDecorators = {\n visible: [{ type: Input }]\n};\n\nclass AgmCircle {\n constructor(_manager) {\n this._manager = _manager;\n /**\n * Indicates whether this Circle handles mouse events. Defaults to true.\n */\n this.clickable = true;\n /**\n * If set to true, the user can drag this circle over the map. Defaults to false.\n */\n // tslint:disable-next-line:no-input-rename\n this.draggable = false;\n /**\n * If set to true, the user can edit this circle by dragging the control points shown at\n * the center and around the circumference of the circle. Defaults to false.\n */\n this.editable = false;\n /**\n * The radius in meters on the Earth's surface.\n */\n this.radius = 0;\n /**\n * The stroke position. Defaults to CENTER.\n * This property is not supported on Internet Explorer 8 and earlier.\n */\n this.strokePosition = 'CENTER';\n /**\n * The stroke width in pixels.\n */\n this.strokeWeight = 0;\n /**\n * Whether this circle is visible on the map. Defaults to true.\n */\n this.visible = true;\n /**\n * This event is fired when the circle's center is changed.\n */\n this.centerChange = new EventEmitter();\n /**\n * This event emitter gets emitted when the user clicks on the circle.\n */\n this.circleClick = new EventEmitter();\n /**\n * This event emitter gets emitted when the user clicks on the circle.\n */\n this.circleDblClick = new EventEmitter();\n /**\n * This event is repeatedly fired while the user drags the circle.\n */\n // tslint:disable-next-line: no-output-native\n this.drag = new EventEmitter();\n /**\n * This event is fired when the user stops dragging the circle.\n */\n this.dragEnd = new EventEmitter();\n /**\n * This event is fired when the user starts dragging the circle.\n */\n this.dragStart = new EventEmitter();\n /**\n * This event is fired when the DOM mousedown event is fired on the circle.\n */\n this.mouseDown = new EventEmitter();\n /**\n * This event is fired when the DOM mousemove event is fired on the circle.\n */\n this.mouseMove = new EventEmitter();\n /**\n * This event is fired on circle mouseout.\n */\n this.mouseOut = new EventEmitter();\n /**\n * This event is fired on circle mouseover.\n */\n this.mouseOver = new EventEmitter();\n /**\n * This event is fired when the DOM mouseup event is fired on the circle.\n */\n this.mouseUp = new EventEmitter();\n /**\n * This event is fired when the circle's radius is changed.\n */\n this.radiusChange = new EventEmitter();\n /**\n * This event is fired when the circle is right-clicked on.\n */\n this.rightClick = new EventEmitter();\n this._circleAddedToManager = false;\n this._eventSubscriptions = [];\n }\n /** @internal */\n ngOnInit() {\n this._manager.addCircle(this);\n this._circleAddedToManager = true;\n this._registerEventListeners();\n }\n /** @internal */\n ngOnChanges(changes) {\n if (!this._circleAddedToManager) {\n return;\n }\n // tslint:disable: no-string-literal\n if (changes['latitude'] || changes['longitude']) {\n this._manager.setCenter(this);\n }\n if (changes['editable']) {\n this._manager.setEditable(this);\n }\n if (changes['draggable']) {\n this._manager.setDraggable(this);\n }\n if (changes['visible']) {\n this._manager.setVisible(this);\n }\n if (changes['radius']) {\n this._manager.setRadius(this);\n }\n // tslint:enable: no-string-literal\n this._updateCircleOptionsChanges(changes);\n }\n _updateCircleOptionsChanges(changes) {\n const options = {};\n const optionKeys = Object.keys(changes).filter(k => AgmCircle._mapOptions.indexOf(k) !== -1);\n optionKeys.forEach((k) => { options[k] = changes[k].currentValue; });\n if (optionKeys.length > 0) {\n this._manager.setOptions(this, options);\n }\n }\n _registerEventListeners() {\n const events = new Map();\n events.set('center_changed', this.centerChange);\n events.set('click', this.circleClick);\n events.set('dblclick', this.circleDblClick);\n events.set('drag', this.drag);\n events.set('dragend', this.dragEnd);\n events.set('dragstart', this.dragStart);\n events.set('mousedown', this.mouseDown);\n events.set('mousemove', this.mouseMove);\n events.set('mouseout', this.mouseOut);\n events.set('mouseover', this.mouseOver);\n events.set('mouseup', this.mouseUp);\n events.set('radius_changed', this.radiusChange);\n events.set('rightclick', this.rightClick);\n events.forEach((eventEmitter, eventName) => {\n this._eventSubscriptions.push(this._manager.createEventObservable(eventName, this).subscribe((value) => {\n switch (eventName) {\n case 'radius_changed':\n this._manager.getRadius(this).then((radius) => eventEmitter.emit(radius));\n break;\n case 'center_changed':\n this._manager.getCenter(this).then((center) => eventEmitter.emit({ lat: center.lat(), lng: center.lng() }));\n break;\n default:\n eventEmitter.emit(value);\n }\n }));\n });\n }\n /** @internal */\n ngOnDestroy() {\n this._eventSubscriptions.forEach(s => s.unsubscribe());\n this._eventSubscriptions = null;\n this._manager.removeCircle(this);\n }\n /**\n * Gets the LatLngBounds of this Circle.\n */\n getBounds() { return this._manager.getBounds(this); }\n getCenter() { return this._manager.getCenter(this); }\n}\nAgmCircle._mapOptions = [\n 'fillColor', 'fillOpacity', 'strokeColor', 'strokeOpacity', 'strokePosition', 'strokeWeight',\n 'visible', 'zIndex', 'clickable',\n];\nAgmCircle.decorators = [\n { type: Directive, args: [{\n selector: 'agm-circle',\n },] }\n];\nAgmCircle.ctorParameters = () => [\n { type: CircleManager }\n];\nAgmCircle.propDecorators = {\n latitude: [{ type: Input }],\n longitude: [{ type: Input }],\n clickable: [{ type: Input }],\n draggable: [{ type: Input, args: ['circleDraggable',] }],\n editable: [{ type: Input }],\n fillColor: [{ type: Input }],\n fillOpacity: [{ type: Input }],\n radius: [{ type: Input }],\n strokeColor: [{ type: Input }],\n strokeOpacity: [{ type: Input }],\n strokePosition: [{ type: Input }],\n strokeWeight: [{ type: Input }],\n visible: [{ type: Input }],\n zIndex: [{ type: Input }],\n centerChange: [{ type: Output }],\n circleClick: [{ type: Output }],\n circleDblClick: [{ type: Output }],\n drag: [{ type: Output }],\n dragEnd: [{ type: Output }],\n dragStart: [{ type: Output }],\n mouseDown: [{ type: Output }],\n mouseMove: [{ type: Output }],\n mouseOut: [{ type: Output }],\n mouseOver: [{ type: Output }],\n mouseUp: [{ type: Output }],\n radiusChange: [{ type: Output }],\n rightClick: [{ type: Output }]\n};\n\nlet layerId$1 = 0;\n/**\n * AgmDataLayer enables the user to add data layers to the map.\n *\n * ### Example\n * ```typescript\n * import { Component } from 'angular2/core';\n * import { AgmMap, AgmDataLayer } from\n * 'angular-google-maps/core';\n *\n * @Component({\n * selector: 'my-map-cmp',\n * directives: [AgmMap, AgmDataLayer],\n * styles: [`\n * .agm-container {\n * height: 300px;\n * }\n * `],\n * template: `\n * <agm-map [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\">\n * \t <agm-data-layer [geoJson]=\"geoJsonObject\" (layerClick)=\"clicked($event)\" [style]=\"styleFunc\">\n * \t </agm-data-layer>\n * </agm-map>\n * `\n * })\n * export class MyMapCmp {\n * lat: number = -25.274449;\n * lng: number = 133.775060;\n * zoom: number = 5;\n *\n * clicked(clickEvent) {\n * console.log(clickEvent);\n * }\n *\n * styleFunc(feature) {\n * return ({\n * clickable: false,\n * fillColor: feature.getProperty('color'),\n * strokeWeight: 1\n * });\n * }\n *\n * geoJsonObject: Object = {\n * \"type\": \"FeatureCollection\",\n * \"features\": [\n * {\n * \"type\": \"Feature\",\n * \"properties\": {\n * \"letter\": \"G\",\n * \"color\": \"blue\",\n * \"rank\": \"7\",\n * \"ascii\": \"71\"\n * },\n * \"geometry\": {\n * \"type\": \"Polygon\",\n * \"coordinates\": [\n * [\n * [123.61, -22.14], [122.38, -21.73], [121.06, -21.69], [119.66, -22.22], [119.00, -23.40],\n * [118.65, -24.76], [118.43, -26.07], [118.78, -27.56], [119.22, -28.57], [120.23, -29.49],\n * [121.77, -29.87], [123.57, -29.64], [124.45, -29.03], [124.71, -27.95], [124.80, -26.70],\n * [124.80, -25.60], [123.61, -25.64], [122.56, -25.64], [121.72, -25.72], [121.81, -26.62],\n * [121.86, -26.98], [122.60, -26.90], [123.57, -27.05], [123.57, -27.68], [123.35, -28.18],\n * [122.51, -28.38], [121.77, -28.26], [121.02, -27.91], [120.49, -27.21], [120.14, -26.50],\n * [120.10, -25.64], [120.27, -24.52], [120.67, -23.68], [121.72, -23.32], [122.43, -23.48],\n * [123.04, -24.04], [124.54, -24.28], [124.58, -23.20], [123.61, -22.14]\n * ]\n * ]\n * }\n * },\n * {\n * \"type\": \"Feature\",\n * \"properties\": {\n * \"letter\": \"o\",\n * \"color\": \"red\",\n * \"rank\": \"15\",\n * \"ascii\": \"111\"\n * },\n * \"geometry\": {\n * \"type\": \"Polygon\",\n * \"coordinates\": [\n * [\n * [128.84, -25.76], [128.18, -25.60], [127.96, -25.52], [127.88, -25.52], [127.70, -25.60],\n * [127.26, -25.79], [126.60, -26.11], [126.16, -26.78], [126.12, -27.68], [126.21, -28.42],\n * [126.69, -29.49], [127.74, -29.80], [128.80, -29.72], [129.41, -29.03], [129.72, -27.95],\n * [129.68, -27.21], [129.33, -26.23], [128.84, -25.76]\n * ],\n * [\n * [128.45, -27.44], [128.32, -26.94], [127.70, -26.82], [127.35, -27.05], [127.17, -27.80],\n * [127.57, -28.22], [128.10, -28.42], [128.49, -27.80], [128.45, -27.44]\n * ]\n * ]\n * }\n * },\n * {\n * \"type\": \"Feature\",\n * \"properties\": {\n * \"letter\": \"o\",\n * \"color\": \"yellow\",\n * \"rank\": \"15\",\n * \"ascii\": \"111\"\n * },\n * \"geometry\": {\n * \"type\": \"Polygon\",\n * \"coordinates\": [\n * [\n * [131.87, -25.76], [131.35, -26.07], [130.95, -26.78], [130.82, -27.64], [130.86, -28.53],\n * [131.26, -29.22], [131.92, -29.76], [132.45, -29.87], [133.06, -29.76], [133.72, -29.34],\n * [134.07, -28.80], [134.20, -27.91], [134.07, -27.21], [133.81, -26.31], [133.37, -25.83],\n * [132.71, -25.64], [131.87, -25.76]\n * ],\n * [\n * [133.15, -27.17], [132.71, -26.86], [132.09, -26.90], [131.74, -27.56], [131.79, -28.26],\n * [132.36, -28.45], [132.93, -28.34], [133.15, -27.76], [133.15, -27.17]\n * ]\n * ]\n * }\n * },\n * {\n * \"type\": \"Feature\",\n * \"properties\": {\n * \"letter\": \"g\",\n * \"color\": \"blue\",\n * \"rank\": \"7\",\n * \"ascii\": \"103\"\n * },\n * \"geometry\": {\n * \"type\": \"Polygon\",\n * \"coordinates\": [\n * [\n * [138.12, -25.04], [136.84, -25.16], [135.96, -25.36], [135.26, -25.99], [135, -26.90],\n * [135.04, -27.91], [135.26, -28.88], [136.05, -29.45], [137.02, -29.49], [137.81, -29.49],\n * [137.94, -29.99], [137.90, -31.20], [137.85, -32.24], [136.88, -32.69], [136.45, -32.36],\n * [136.27, -31.80], [134.95, -31.84], [135.17, -32.99], [135.52, -33.43], [136.14, -33.76],\n * [137.06, -33.83], [138.12, -33.65], [138.86, -33.21], [139.30, -32.28], [139.30, -31.24],\n * [139.30, -30.14], [139.21, -28.96], [139.17, -28.22], [139.08, -27.41], [139.08, -26.47],\n * [138.99, -25.40], [138.73, -25.00], [138.12, -25.04]\n * ],\n * [\n * [137.50, -26.54], [136.97, -26.47], [136.49, -26.58], [136.31, -27.13], [136.31, -27.72],\n * [136.58, -27.99], [137.50, -28.03], [137.68, -27.68], [137.59, -26.78], [137.50, -26.54]\n * ]\n * ]\n * }\n * },\n * {\n * \"type\": \"Feature\",\n * \"properties\": {\n * \"letter\": \"l\",\n * \"color\": \"green\",\n * \"rank\": \"12\",\n * \"ascii\": \"108\"\n * },\n * \"geometry\": {\n * \"type\": \"Polygon\",\n * \"coordinates\": [\n * [\n * [140.14, -21.04], [140.31, -29.42], [141.67, -29.49], [141.59, -20.92], [140.14, -21.04]\n * ]\n * ]\n * }\n * },\n * {\n * \"type\": \"Feature\",\n * \"properties\": {\n * \"letter\": \"e\",\n * \"color\": \"red\",\n * \"rank\": \"5\",\n * \"ascii\": \"101\"\n * },\n * \"geometry\": {\n * \"type\": \"Polygon\",\n * \"coordinates\": [\n * [\n * [144.14, -27.41], [145.67, -27.52], [146.86, -27.09], [146.82, -25.64], [146.25, -25.04],\n * [145.45, -24.68], [144.66, -24.60], [144.09, -24.76], [143.43, -25.08], [142.99, -25.40],\n * [142.64, -26.03], [142.64, -27.05], [142.64, -28.26], [143.30, -29.11], [144.18, -29.57],\n * [145.41, -29.64], [146.46, -29.19], [146.64, -28.72], [146.82, -28.14], [144.84, -28.42],\n * [144.31, -28.26], [144.14, -27.41]\n * ],\n * [\n * [144.18, -26.39], [144.53, -26.58], [145.19, -26.62], [145.72, -26.35], [145.81, -25.91],\n * [145.41, -25.68], [144.97, -25.68], [144.49, -25.64], [144, -25.99], [144.18, -26.39]\n * ]\n * ]\n * }\n * }\n * ]\n * };\n * }\n * ```\n */\nclass AgmDataLayer {\n constructor(_manager) {\n this._manager = _manager;\n this._addedToManager = false;\n this._id = (layerId$1++).toString();\n this._subscriptions = [];\n /**\n * This event is fired when a feature in the layer is clicked.\n */\n this.layerClick = new EventEmitter();\n /**\n * The geoJson to be displayed\n */\n this.geoJson = null;\n }\n ngOnInit() {\n if (this._addedToManager) {\n return;\n }\n this._manager.addDataLayer(this);\n this._addedToManager = true;\n this._addEventListeners();\n }\n _addEventListeners() {\n const listeners = [\n { name: 'click', handler: (ev) => this.layerClick.emit(ev) },\n ];\n listeners.forEach((obj) => {\n const os = this._manager.createEventObservable(obj.name, this).subscribe(obj.handler);\n this._subscriptions.push(os);\n });\n }\n /** @internal */\n id() { return this._id; }\n /** @internal */\n toString() { return `AgmDataLayer-${this._id.toString()}`; }\n /** @internal */\n ngOnDestroy() {\n this._manager.deleteDataLayer(this);\n // unsubscribe all registered observable subscriptions\n this._subscriptions.forEach(s => s.unsubscribe());\n }\n /** @internal */\n ngOnChanges(changes) {\n if (!this._addedToManager) {\n return;\n }\n // tslint:disable-next-line: no-string-literal\n const geoJsonChange = changes['geoJson'];\n if (geoJsonChange) {\n this._manager.updateGeoJson(this, geoJsonChange.currentValue);\n }\n const dataOptions = AgmDataLayer._dataOptionsAttributes.reduce((options, k) => options[k] = changes.hasOwnProperty(k) ? changes[k].currentValue : this[k], {});\n this._manager.setDataOptions(this, dataOptions);\n }\n}\nAgmDataLayer._dataOptionsAttributes = ['style'];\nAgmDataLayer.decorators = [\n { type: Directive, args: [{\n selector: 'agm-data-layer',\n },] }\n];\nAgmDataLayer.ctorParameters = () => [\n { type: DataLayerManager }\n];\nAgmDataLayer.propDecorators = {\n layerClick: [{ type: Output }],\n geoJson: [{ type: Input }],\n style: [{ type: Input }]\n};\n\n/**\n * Adds the given directive to the auto fit bounds feature when the value is true.\n * To make it work with you custom AGM component, you also have to implement the {@link FitBoundsAccessor} abstract class.\n * @example\n * <agm-marker [agmFitBounds]=\"true\"></agm-marker>\n */\nclass AgmFitBounds {\n constructor(_fitBoundsAccessor, _fitBoundsService) {\n this._fitBoundsAccessor = _fitBoundsAccessor;\n this._fitBoundsService = _fitBoundsService;\n /**\n * If the value is true, the element gets added to the bounds of the map.\n * Default: true.\n */\n this.agmFitBounds = true;\n this._destroyed$ = new Subject();\n this._latestFitBoundsDetails = null;\n }\n /**\n * @internal\n */\n ngOnChanges() {\n this._updateBounds();\n }\n /**\n * @internal\n */\n ngOnInit() {\n this._fitBoundsAccessor\n .getFitBoundsDetails$()\n .pipe(distinctUntilChanged((x, y) => x.latLng.lat === y.latLng.lat && x.latLng.lng === y.latLng.lng), takeUntil(this._destroyed$))\n .subscribe(details => this._updateBounds(details));\n }\n /*\n Either the location changed, or visible status changed.\n Possible state changes are\n invisible -> visible\n visible -> invisible\n visible -> visible (new location)\n */\n _updateBounds(newFitBoundsDetails) {\n // either visibility will change, or location, so remove the old one anyway\n if (this._latestFitBoundsDetails) {\n this._fitBoundsService.removeFromBounds(this._latestFitBoundsDetails.latLng);\n // don't set latestFitBoundsDetails to null, because we can toggle visibility from\n // true -> false -> true, in which case we still need old value cached here\n }\n if (newFitBoundsDetails) {\n this._latestFitBoundsDetails = newFitBoundsDetails;\n }\n if (!this._latestFitBoundsDetails) {\n return;\n }\n if (this.agmFitBounds === true) {\n this._fitBoundsService.addToBounds(this._latestFitBoundsDetails.latLng);\n }\n }\n /**\n * @internal\n */\n ngOnDestroy() {\n this._destroyed$.next();\n this._destroyed$.complete();\n if (this._latestFitBoundsDetails !== null) {\n this._fitBoundsService.removeFromBounds(this._latestFitBoundsDetails.latLng);\n }\n }\n}\nAgmFitBounds.decorators = [\n { type: Directive, args: [{\n selector: '[agmFitBounds]',\n },] }\n];\nAgmFitBounds.ctorParameters = () => [\n { type: FitBoundsAccessor, decorators: [{ type: Self }] },\n { type: FitBoundsService }\n];\nAgmFitBounds.propDecorators = {\n agmFitBounds: [{ type: Input }]\n};\n\nlet infoWindowId = 0;\n/**\n * AgmInfoWindow renders a info window inside a {@link AgmMarker} or standalone.\n *\n * ### Example\n * ```typescript\n * import { Component } from '@angular/core';\n *\n * @Component({\n * selector: 'my-map-cmp',\n * styles: [`\n * .agm-map-container {\n * height: 300px;\n * }\n * `],\n * template: `\n * <agm-map [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\">\n * <agm-marker [latitude]=\"lat\" [longitude]=\"lng\" [label]=\"'M'\">\n * <agm-info-window [disableAutoPan]=\"true\">\n * Hi, this is the content of the <strong>info window</strong>\n * </agm-info-window>\n * </agm-marker>\n * </agm-map>\n * `\n * })\n * ```\n */\nclass AgmInfoWindow {\n constructor(_infoWindowManager, _el) {\n this._infoWindowManager = _infoWindowManager;\n this._el = _el;\n /**\n * Sets the open state for the InfoWindow. You can also call the open() and close() methods.\n */\n this.isOpen = false;\n /**\n * Emits an event when the info window is closed.\n */\n this.infoWindowClose = new EventEmitter();\n this._infoWindowAddedToManager = false;\n this._id = (infoWindowId++).toString();\n }\n ngOnInit() {\n this.content = this._el.nativeElement.querySelector('.agm-info-window-content');\n this._infoWindowManager.addInfoWindow(this);\n this._infoWindowAddedToManager = true;\n this._updateOpenState();\n this._registerEventListeners();\n }\n /** @internal */\n ngOnChanges(changes) {\n if (!this._infoWindowAddedToManager) {\n return;\n }\n // tslint:disable: no-string-literal\n if ((changes['latitude'] || changes['longitude']) && typeof this.latitude === 'number' &&\n typeof this.longitude === 'number') {\n this._infoWindowManager.setPosition(this);\n }\n if (changes['zIndex']) {\n this._infoWindowManager.setZIndex(this);\n }\n if (changes['isOpen']) {\n this._updateOpenState();\n }\n this._setInfoWindowOptions(changes);\n }\n // tslint:enable: no-string-literal\n _registerEventListeners() {\n this._infoWindowManager.createEventObservable('closeclick', this).subscribe(() => {\n this.isOpen = false;\n this.infoWindowClose.emit();\n });\n }\n _updateOpenState() {\n this.isOpen ? this.open() : this.close();\n }\n _setInfoWindowOptions(changes) {\n const options = {};\n const optionKeys = Object.keys(changes).filter(k => AgmInfoWindow._infoWindowOptionsInputs.indexOf(k) !== -1);\n optionKeys.forEach((k) => { options[k] = changes[k].currentValue; });\n this._infoWindowManager.setOptions(this, options);\n }\n /**\n * Opens the info window.\n */\n open() { return this._infoWindowManager.open(this); }\n /**\n * Closes the info window.\n */\n close() {\n return this._infoWindowManager.close(this).then(() => { this.infoWindowClose.emit(); });\n }\n /** @internal */\n id() { return this._id; }\n /** @internal */\n toString() { return 'AgmInfoWindow-' + this._id.toString(); }\n /** @internal */\n ngOnDestroy() { this._infoWindowManager.deleteInfoWindow(this); }\n}\nAgmInfoWindow._infoWindowOptionsInputs = ['disableAutoPan', 'maxWidth'];\nAgmInfoWindow.decorators = [\n { type: Component, args: [{\n selector: 'agm-info-window',\n template: `<div class='agm-info-window-content'>\n <ng-content></ng-content>\n </div>\n `\n },] }\n];\nAgmInfoWindow.ctorParameters = () => [\n { type: InfoWindowManager },\n { type: ElementRef }\n];\nAgmInfoWindow.propDecorators = {\n latitude: [{ type: Input }],\n longitude: [{ type: Input }],\n disableAutoPan: [{ type: Input }],\n zIndex: [{ type: Input }],\n maxWidth: [{ type: Input }],\n isOpen: [{ type: Input }],\n infoWindowClose: [{ type: Output }]\n};\n\nlet layerId$2 = 0;\nclass AgmKmlLayer {\n constructor(_manager) {\n this._manager = _manager;\n this._addedToManager = false;\n this._id = (layerId$2++).toString();\n this._subscriptions = [];\n /**\n * If true, the layer receives mouse events. Default value is true.\n */\n this.clickable = true;\n /**\n * By default, the input map is centered and zoomed to the bounding box of the contents of the\n * layer.\n * If this option is set to true, the viewport is left unchanged, unless the map's center and zoom\n * were never set.\n */\n this.preserveViewport = false;\n /**\n * Whether to render the screen overlays. Default true.\n */\n this.screenOverlays = true;\n /**\n * Suppress the rendering of info windows when layer features are clicked.\n */\n this.suppressInfoWindows = false;\n /**\n * The URL of the KML document to display.\n */\n this.url = null;\n /**\n * The z-index of the layer.\n */\n this.zIndex = null;\n /**\n * This event is fired when a feature in the layer is clicked.\n */\n this.layerClick = new EventEmitter();\n /**\n * This event is fired when the KML layers default viewport has changed.\n */\n this.defaultViewportChange = new EventEmitter();\n /**\n * This event is fired when the KML layer has finished loading.\n * At this point it is safe to read the status property to determine if the layer loaded\n * successfully.\n */\n this.statusChange = new EventEmitter();\n }\n ngOnInit() {\n if (this._addedToManager) {\n return;\n }\n this._manager.addKmlLayer(this);\n this._addedToManager = true;\n this._addEventListeners();\n }\n ngOnChanges(changes) {\n if (!this._addedToManager) {\n return;\n }\n this._updatePolygonOptions(changes);\n }\n _updatePolygonOptions(changes) {\n const options = Object.keys(changes)\n .filter(k => AgmKmlLayer._kmlLayerOptions.indexOf(k) !== -1)\n .reduce((obj, k) => {\n obj[k] = changes[k].currentValue;\n return obj;\n }, {});\n if (Object.keys(options).length > 0) {\n this._manager.setOptions(this, options);\n }\n }\n _addEventListeners() {\n const listeners = [\n { name: 'click', handler: (ev) => this.layerClick.emit(ev) },\n { name: 'defaultviewport_changed', handler: () => this.defaultViewportChange.emit() },\n { name: 'status_changed', handler: () => this.statusChange.emit() },\n ];\n listeners.forEach((obj) => {\n const os = this._manager.createEventObservable(obj.name, this).subscribe(obj.handler);\n this._subscriptions.push(os);\n });\n }\n /** @internal */\n id() { return this._id; }\n /** @internal */\n toString() { return `AgmKmlLayer-${this._id.toString()}`; }\n /** @internal */\n ngOnDestroy() {\n this._manager.deleteKmlLayer(this);\n // unsubscribe all registered observable subscriptions\n this._subscriptions.forEach(s => s.unsubscribe());\n }\n}\nAgmKmlLayer._kmlLayerOptions = ['clickable', 'preserveViewport', 'screenOverlays', 'suppressInfoWindows', 'url', 'zIndex'];\nAgmKmlLayer.decorators = [\n { type: Directive, args: [{\n selector: 'agm-kml-layer',\n },] }\n];\nAgmKmlLayer.ctorParameters = () => [\n { type: KmlLayerManager }\n];\nAgmKmlLayer.propDecorators = {\n clickable: [{ type: Input }],\n preserveViewport: [{ type: Input }],\n screenOverlays: [{ type: Input }],\n suppressInfoWindows: [{ type: Input }],\n url: [{ type: Input }],\n zIndex: [{ type: Input }],\n layerClick: [{ type: Output }],\n defaultViewportChange: [{ type: Output }],\n statusChange: [{ type: Output }]\n};\n\nclass AgmMapControl {\n}\nAgmMapControl.decorators = [\n { type: Directive }\n];\nAgmMapControl.propDecorators = {\n position: [{ type: Input }]\n};\nclass AgmFullscreenControl extends AgmMapControl {\n getOptions() {\n return {\n fullscreenControl: true,\n fullscreenControlOptions: {\n position: this.position && google.maps.ControlPosition[this.position],\n },\n };\n }\n}\nAgmFullscreenControl.decorators = [\n { type: Directive, args: [{\n selector: 'agm-map agm-fullscreen-control',\n providers: [{ provide: AgmMapControl, useExisting: AgmFullscreenControl }],\n },] }\n];\nclass AgmMapTypeControl extends AgmMapControl {\n getOptions() {\n return {\n mapTypeControl: true,\n mapTypeControlOptions: {\n position: this.position && google.maps.ControlPosition[this.position],\n style: this.style && google.maps.MapTypeControlStyle[this.style],\n mapTypeIds: this.mapTypeIds && this.mapTypeIds.map(mapTypeId => google.maps.MapTypeId[mapTypeId]),\n },\n };\n }\n}\nAgmMapTypeControl.decorators = [\n { type: Directive, args: [{\n selector: 'agm-map agm-map-type-control',\n providers: [{ provide: AgmMapControl, useExisting: AgmMapTypeControl }],\n },] }\n];\nAgmMapTypeControl.propDecorators = {\n mapTypeIds: [{ type: Input }],\n style: [{ type: Input }]\n};\nclass AgmPanControl extends AgmMapControl {\n getOptions() {\n return {\n panControl: true,\n panControlOptions: {\n position: this.position && google.maps.ControlPosition[this.position],\n },\n };\n }\n}\nAgmPanControl.decorators = [\n { type: Directive, args: [{\n selector: 'agm-map agm-pan-control',\n providers: [{ provide: AgmMapControl, useExisting: AgmPanControl }],\n },] }\n];\nclass AgmRotateControl extends AgmMapControl {\n getOptions() {\n return {\n rotateControl: true,\n rotateControlOptions: {\n position: this.position && google.maps.ControlPosition[this.position],\n },\n };\n }\n}\nAgmRotateControl.decorators = [\n { type: Directive, args: [{\n selector: 'agm-map agm-rotate-control',\n providers: [{ provide: AgmMapControl, useExisting: AgmRotateControl }],\n },] }\n];\nclass AgmScaleControl extends AgmMapControl {\n getOptions() {\n return {\n scaleControl: true,\n };\n }\n}\nAgmScaleControl.decorators = [\n { type: Directive, args: [{\n selector: 'agm-map agm-scale-control',\n providers: [{ provide: AgmMapControl, useExisting: AgmScaleControl }],\n },] }\n];\nclass AgmStreetViewControl extends AgmMapControl {\n getOptions() {\n return {\n streetViewControl: true,\n streetViewControlOptions: {\n position: this.position && google.maps.ControlPosition[this.position],\n },\n };\n }\n}\nAgmStreetViewControl.decorators = [\n { type: Directive, args: [{\n selector: 'agm-map agm-street-view-control',\n providers: [{ provide: AgmMapControl, useExisting: AgmStreetViewControl }],\n },] }\n];\nclass AgmZoomControl extends AgmMapControl {\n getOptions() {\n return {\n zoomControl: true,\n zoomControlOptions: {\n position: this.position && google.maps.ControlPosition[this.position],\n style: this.style && google.maps.ZoomControlStyle[this.style],\n },\n };\n }\n}\nAgmZoomControl.decorators = [\n { type: Directive, args: [{\n selector: 'agm-map agm-zoom-control',\n providers: [{ provide: AgmMapControl, useExisting: AgmZoomControl }],\n },] }\n];\nAgmZoomControl.propDecorators = {\n style: [{ type: Input }]\n};\n/**\n * AgmMap renders a Google Map.\n * **Important note**: To be able see a map in the browser, you have to define a height for the\n * element `agm-map`.\n *\n * ### Example\n * ```typescript\n * import { Component } from '@angular/core';\n *\n * @Component({\n * selector: 'my-map-cmp',\n * styles: [`\n * agm-map {\n * height: 300px;\n * }\n * `],\n * template: `\n * <agm-map [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\">\n * </agm-map>\n * `\n * })\n * ```\n */\nclass AgmMap {\n constructor(_elem, _mapsWrapper, \n // tslint:disable-next-line: ban-types\n _platformId, _fitBoundsService, _zone) {\n this._elem = _elem;\n this._mapsWrapper = _mapsWrapper;\n this._platformId = _platformId;\n this._fitBoundsService = _fitBoundsService;\n this._zone = _zone;\n /**\n * The longitude that defines the center of the map.\n */\n this.longitude = 0;\n /**\n * The latitude that defines the center of the map.\n */\n this.latitude = 0;\n /**\n * The zoom level of the map. The default zoom level is 8.\n */\n this.zoom = 8;\n /**\n * Enables/disables if map is draggable.\n */\n // tslint:disable-next-line:no-input-rename\n this.draggable = true;\n /**\n * Enables/disables zoom and center on double click. Enabled by default.\n */\n this.disableDoubleClickZoom = false;\n /**\n * Enables/disables all default UI of the Google map. Please note: When the map is created, this\n * value cannot get updated.\n */\n this.disableDefaultUI = false;\n /**\n * If false, disables scrollwheel zooming on the map. The scrollwheel is enabled by default.\n */\n this.scrollwheel = true;\n /**\n * If false, prevents the map from being controlled by the keyboard. Keyboard shortcuts are\n * enabled by default.\n */\n this.keyboardShortcuts = true;\n /**\n * Styles to apply to each of the default map types. Note that for Satellite/Hybrid and Terrain\n * modes, these styles will only apply to labels and geometry.\n */\n this.styles = [];\n /**\n * When true and the latitude and/or longitude values changes, the Google Maps panTo method is\n * used to\n * center the map. See: https://developers.google.com/maps/documentation/javascript/reference#Map\n */\n this.usePanning = false;\n /**\n * Sets the viewport to contain the given bounds.\n * If this option to `true`, the bounds get automatically computed from all elements that use the {@link AgmFitBounds} directive.\n */\n this.fitBounds = false;\n /**\n * The map mapTypeId. Defaults to 'roadmap'.\n */\n this.mapTypeId = 'ROADMAP';\n /**\n * When false, map icons are not clickable. A map icon represents a point of interest,\n * also known as a POI. By default map icons are clickable.\n */\n this.clickableIcons = true;\n /**\n * A map icon represents a point of interest, also known as a POI.\n * When map icons are clickable by default, an info window is displayed.\n * When this property is set to false, the info window will not be shown but the click event\n * will still fire\n */\n this.showDefaultInfoWindow = true;\n /**\n * This setting controls how gestures on the map are handled.\n * Allowed values:\n * - 'cooperative' (Two-finger touch gestures pan and zoom the map. One-finger touch gestures are not handled by the map.)\n * - 'greedy' (All touch gestures pan or zoom the map.)\n * - 'none' (The map cannot be panned or zoomed by user gestures.)\n * - 'auto' [default] (Gesture handling is either cooperative or greedy, depending on whether the page is scrollable or not.\n */\n this.gestureHandling = 'auto';\n /**\n * Controls the automatic switching behavior for the angle of incidence of\n * the map. The only allowed values are 0 and 45. The value 0 causes the map\n * to always use a 0° overhead view regardless of the zoom level and\n * viewport. The value 45 causes the tilt angle to automatically switch to\n * 45 whenever 45° imagery is available for the current zoom level and\n * viewport, and switch back to 0 whenever 45° imagery is not available\n * (this is the default behavior). 45° imagery is only available for\n * satellite and hybrid map types, within some locations, and at some zoom\n * levels. Note: getTilt returns the current tilt angle, not the value\n * specified by this option. Because getTilt and this option refer to\n * different things, do not bind() the tilt property; doing so may yield\n * unpredictable effects. (Default of AGM is 0 (disabled). Enable it with value 45.)\n */\n this.tilt = 0;\n this._observableSubscriptions = [];\n /**\n * This event emitter gets emitted when the user clicks on the map (but not when they click on a\n * marker or infoWindow).\n */\n // tslint:disable-next-line: max-line-length\n this.mapClick = new EventEmitter();\n /**\n * This event emitter gets emitted when the user right-clicks on the map (but not when they click\n * on a marker or infoWindow).\n */\n this.mapRightClick = new EventEmitter();\n /**\n * This event emitter gets emitted when the user double-clicks on the map (but not when they click\n * on a marker or infoWindow).\n */\n this.mapDblClick = new EventEmitter();\n /**\n * This event emitter is fired when the map center changes.\n */\n this.centerChange = new EventEmitter();\n /**\n * This event is fired when the viewport bounds have changed.\n */\n this.boundsChange = new EventEmitter();\n /**\n * This event is fired when the mapTypeId property changes.\n */\n this.mapTypeIdChange = new EventEmitter();\n /**\n * This event is fired when the map becomes idle after panning or zooming.\n */\n this.idle = new EventEmitter();\n /**\n * This event is fired when the zoom level has changed.\n */\n this.zoomChange = new EventEmitter();\n /**\n * This event is fired when the google map is fully initialized.\n * You get the google.maps.Map instance as a result of this EventEmitter.\n */\n this.mapReady = new EventEmitter();\n /**\n * This event is fired when the visible tiles have finished loading.\n */\n this.tilesLoaded = new EventEmitter();\n }\n /** @internal */\n ngAfterContentInit() {\n if (isPlatformServer(this._platformId)) {\n // The code is running on the server, do nothing\n return;\n }\n // todo: this should be solved with a new component and a viewChild decorator\n const container = this._elem.nativeElement.querySelector('.agm-map-container-inner');\n this._initMapInstance(container);\n }\n _initMapInstance(el) {\n this._mapsWrapper.createMap(el, {\n center: { lat: this.latitude || 0, lng: this.longitude || 0 },\n zoom: this.zoom,\n minZoom: this.minZoom,\n maxZoom: this.maxZoom,\n controlSize: this.controlSize,\n disableDefaultUI: this.disableDefaultUI,\n disableDoubleClickZoom: this.disableDoubleClickZoom,\n scrollwheel: this.scrollwheel,\n backgroundColor: this.backgroundColor,\n draggable: this.draggable,\n draggableCursor: this.draggableCursor,\n draggingCursor: this.draggingCursor,\n keyboardShortcuts: this.keyboardShortcuts,\n styles: this.styles,\n mapTypeId: this.mapTypeId.toLocaleLowerCase(),\n clickableIcons: this.clickableIcons,\n gestureHandling: this.gestureHandling,\n tilt: this.tilt,\n restriction: this.restriction,\n })\n .then(() => this._mapsWrapper.getNativeMap())\n .then(map => this.mapReady.emit(map));\n // register event listeners\n this._handleMapCenterChange();\n this._handleMapZoomChange();\n this._handleMapMouseEvents();\n this._handleBoundsChange();\n this._handleMapTypeIdChange();\n this._handleTilesLoadedEvent();\n this._handleIdleEvent();\n this._handleControlChange();\n }\n /** @internal */\n ngOnDestroy() {\n // unsubscribe all registered observable subscriptions\n this._observableSubscriptions.forEach((s) => s.unsubscribe());\n // remove all listeners from the map instance\n this._mapsWrapper.clearInstanceListeners();\n if (this._fitBoundsSubscription) {\n this._fitBoundsSubscription.unsubscribe();\n }\n }\n /* @internal */\n ngOnChanges(changes) {\n this._updateMapOptionsChanges(changes);\n this._updatePosition(changes);\n }\n _updateMapOptionsChanges(changes) {\n const options = {};\n const optionKeys = Object.keys(changes).filter(k => AgmMap._mapOptionsAttributes.indexOf(k) !== -1);\n optionKeys.forEach((k) => { options[k] = changes[k].currentValue; });\n this._mapsWrapper.setMapOptions(options);\n }\n /**\n * Triggers a resize event on the google map instance.\n * When recenter is true, the of the google map gets called with the current lat/lng values or fitBounds value to recenter the map.\n * Returns a promise that gets resolved after the event was triggered.\n */\n triggerResize(recenter = true) {\n // Note: When we would trigger the resize event and show the map in the same turn (which is a\n // common case for triggering a resize event), then the resize event would not\n // work (to show the map), so we trigger the event in a timeout.\n return new Promise((resolve) => {\n setTimeout(() => {\n return this._mapsWrapper.triggerMapEvent('resize').then(() => {\n if (recenter) {\n this.fitBounds != null ? this._fitBounds() : this._setCenter();\n }\n resolve();\n });\n });\n });\n }\n _updatePosition(changes) {\n // tslint:disable: no-string-literal\n if (changes['latitude'] == null && changes['longitude'] == null &&\n !changes['fitBounds']) {\n // no position update needed\n return;\n }\n // tslint:enable: no-string-literal\n // we prefer fitBounds in changes\n if ('fitBounds' in changes) {\n this._fitBounds();\n return;\n }\n if (typeof this.latitude !== 'number' || typeof this.longitude !== 'number') {\n return;\n }\n this._setCenter();\n }\n _setCenter() {\n const newCenter = {\n lat: this.latitude,\n lng: this.longitude,\n };\n if (this.usePanning) {\n this._mapsWrapper.panTo(newCenter);\n }\n else {\n this._mapsWrapper.setCenter(newCenter);\n }\n }\n _fitBounds() {\n switch (this.fitBounds) {\n case true:\n this._subscribeToFitBoundsUpdates();\n break;\n case false:\n if (this._fitBoundsSubscription) {\n this._fitBoundsSubscription.unsubscribe();\n }\n break;\n default:\n if (this._fitBoundsSubscription) {\n this._fitBoundsSubscription.unsubscribe();\n }\n this._updateBounds(this.fitBounds, this.fitBoundsPadding);\n }\n }\n _subscribeToFitBoundsUpdates() {\n this._zone.runOutsideAngular(() => {\n this._fitBoundsSubscription = this._fitBoundsService.getBounds$().subscribe(b => {\n this._zone.run(() => this._updateBounds(b, this.fitBoundsPadding));\n });\n });\n }\n _updateBounds(bounds, padding) {\n if (!bounds) {\n return;\n }\n if (this._isLatLngBoundsLiteral(bounds) && typeof google !== 'undefined' && google && google.maps && google.maps.LatLngBounds) {\n const newBounds = new google.maps.LatLngBounds();\n newBounds.union(bounds);\n bounds = newBounds;\n }\n if (this.usePanning) {\n this._mapsWrapper.panToBounds(bounds, padding);\n return;\n }\n this._mapsWrapper.fitBounds(bounds, padding);\n }\n _isLatLngBoundsLiteral(bounds) {\n return bounds != null && bounds.extend === undefined;\n }\n _handleMapCenterChange() {\n const s = this._mapsWrapper.subscribeToMapEvent('center_changed').subscribe(() => {\n this._mapsWrapper.getCenter().then((center) => {\n this.latitude = center.lat();\n this.longitude = center.lng();\n this.centerChange.emit({ lat: this.latitude, lng: this.longitude });\n });\n });\n this._observableSubscriptions.push(s);\n }\n _handleBoundsChange() {\n const s = this._mapsWrapper.subscribeToMapEvent('bounds_changed').subscribe(() => {\n this._mapsWrapper.getBounds().then((bounds) => { this.boundsChange.emit(bounds); });\n });\n this._observableSubscriptions.push(s);\n }\n _handleMapTypeIdChange() {\n const s = this._mapsWrapper.subscribeToMapEvent('maptypeid_changed').subscribe(() => {\n this._mapsWrapper.getMapTypeId().then((mapTypeId) => { this.mapTypeIdChange.emit(mapTypeId); });\n });\n this._observableSubscriptions.push(s);\n }\n _handleMapZoomChange() {\n const s = this._mapsWrapper.subscribeToMapEvent('zoom_changed').subscribe(() => {\n this._mapsWrapper.getZoom().then((z) => {\n this.zoom = z;\n this.zoomChange.emit(z);\n });\n });\n this._observableSubscriptions.push(s);\n }\n _handleIdleEvent() {\n const s = this._mapsWrapper.subscribeToMapEvent('idle').subscribe(() => { this.idle.emit(void 0); });\n this._observableSubscriptions.push(s);\n }\n _handleTilesLoadedEvent() {\n const s = this._mapsWrapper.subscribeToMapEvent('tilesloaded').subscribe(() => this.tilesLoaded.emit(void 0));\n this._observableSubscriptions.push(s);\n }\n _handleMapMouseEvents() {\n const events = [\n { name: 'click', emitter: this.mapClick },\n { name: 'rightclick', emitter: this.mapRightClick },\n { name: 'dblclick', emitter: this.mapDblClick },\n ];\n events.forEach(e => {\n const s = this._mapsWrapper.subscribeToMapEvent(e.name).subscribe(([event]) => {\n // the placeId will be undefined in case the event was not an IconMouseEvent (google types)\n if (event.placeId && !this.showDefaultInfoWindow) {\n event.stop();\n }\n e.emitter.emit(event);\n });\n this._observableSubscriptions.push(s);\n });\n }\n _handleControlChange() {\n this._setControls();\n this.mapControls.changes.subscribe(() => this._setControls());\n }\n _setControls() {\n const controlOptions = {\n fullscreenControl: !this.disableDefaultUI,\n mapTypeControl: false,\n panControl: false,\n rotateControl: false,\n scaleControl: false,\n streetViewControl: !this.disableDefaultUI,\n zoomControl: !this.disableDefaultUI,\n };\n this._mapsWrapper.getNativeMap().then(() => {\n this.mapControls.forEach(control => Object.assign(controlOptions, control.getOptions()));\n this._mapsWrapper.setMapOptions(controlOptions);\n });\n }\n}\n/**\n * Map option attributes that can change over time\n */\nAgmMap._mapOptionsAttributes = [\n 'disableDoubleClickZoom', 'scrollwheel', 'draggable', 'draggableCursor', 'draggingCursor',\n 'keyboardShortcuts', 'styles', 'zoom', 'minZoom', 'maxZoom', 'mapTypeId', 'clickableIcons',\n 'gestureHandling', 'tilt', 'restriction',\n];\nAgmMap.decorators = [\n { type: Component, args: [{\n selector: 'agm-map',\n providers: [\n CircleManager,\n DataLayerManager,\n DataLayerManager,\n FitBoundsService,\n GoogleMapsAPIWrapper,\n InfoWindowManager,\n KmlLayerManager,\n LayerManager,\n MarkerManager,\n PolygonManager,\n PolylineManager,\n RectangleManager,\n ],\n template: `\n <div class='agm-map-container-inner sebm-google-map-container-inner'></div>\n <div class='agm-map-content'>\n <ng-content></ng-content>\n </div>\n `,\n styles: [`\n .agm-map-container-inner {\n width: inherit;\n height: inherit;\n }\n .agm-map-content {\n display:none;\n }\n `]\n },] }\n];\nAgmMap.ctorParameters = () => [\n { type: ElementRef },\n { type: GoogleMapsAPIWrapper },\n { type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] },\n { type: FitBoundsService },\n { type: NgZone }\n];\nAgmMap.propDecorators = {\n longitude: [{ type: Input }],\n latitude: [{ type: Input }],\n zoom: [{ type: Input }],\n minZoom: [{ type: Input }],\n maxZoom: [{ type: Input }],\n controlSize: [{ type: Input }],\n draggable: [{ type: Input, args: ['mapDraggable',] }],\n disableDoubleClickZoom: [{ type: Input }],\n disableDefaultUI: [{ type: Input }],\n scrollwheel: [{ type: Input }],\n backgroundColor: [{ type: Input }],\n draggableCursor: [{ type: Input }],\n draggingCursor: [{ type: Input }],\n keyboardShortcuts: [{ type: Input }],\n styles: [{ type: Input }],\n usePanning: [{ type: Input }],\n fitBounds: [{ type: Input }],\n fitBoundsPadding: [{ type: Input }],\n mapTypeId: [{ type: Input }],\n clickableIcons: [{ type: Input }],\n showDefaultInfoWindow: [{ type: Input }],\n gestureHandling: [{ type: Input }],\n tilt: [{ type: Input }],\n restriction: [{ type: Input }],\n mapClick: [{ type: Output }],\n mapRightClick: [{ type: Output }],\n mapDblClick: [{ type: Output }],\n centerChange: [{ type: Output }],\n boundsChange: [{ type: Output }],\n mapTypeIdChange: [{ type: Output }],\n idle: [{ type: Output }],\n zoomChange: [{ type: Output }],\n mapReady: [{ type: Output }],\n tilesLoaded: [{ type: Output }],\n mapControls: [{ type: ContentChildren, args: [AgmMapControl,] }]\n};\n\nlet markerId = 0;\n/**\n * AgmMarker renders a map marker inside a {@link AgmMap}.\n *\n * ### Example\n * ```typescript\n * import { Component } from '@angular/core';\n *\n * @Component({\n * selector: 'my-map-cmp',\n * styles: [`\n * .agm-map-container {\n * height: 300px;\n * }\n * `],\n * template: `\n * <agm-map [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\">\n * <agm-marker [latitude]=\"lat\" [longitude]=\"lng\" [label]=\"'M'\">\n * </agm-marker>\n * </agm-map>\n * `\n * })\n * ```\n */\nclass AgmMarker {\n constructor(_markerManager) {\n this._markerManager = _markerManager;\n /**\n * If true, the marker can be dragged. Default value is false.\n */\n // tslint:disable-next-line:no-input-rename\n this.draggable = false;\n /**\n * If true, the marker is visible\n */\n this.visible = true;\n /**\n * Whether to automatically open the child info window when the marker is clicked.\n */\n this.openInfoWindow = true;\n /**\n * The marker's opacity between 0.0 and 1.0.\n */\n this.opacity = 1;\n /**\n * All markers are displayed on the map in order of their zIndex, with higher values displaying in\n * front of markers with lower values. By default, markers are displayed according to their\n * vertical position on screen, with lower markers appearing in front of markers further up the\n * screen.\n */\n this.zIndex = 1;\n /**\n * If true, the marker can be clicked. Default value is true.\n */\n // tslint:disable-next-line:no-input-rename\n this.clickable = true;\n /**\n * This event is fired when the marker's animation property changes.\n */\n this.animationChange = new EventEmitter();\n /**\n * This event emitter gets emitted when the user clicks on the marker.\n */\n this.markerClick = new EventEmitter();\n /**\n * This event emitter gets emitted when the user clicks twice on the marker.\n */\n this.markerDblClick = new EventEmitter();\n /**\n * This event is fired when the user rightclicks on the marker.\n */\n this.markerRightClick = new EventEmitter();\n /**\n * This event is fired when the user starts dragging the marker.\n */\n this.dragStart = new EventEmitter();\n /**\n * This event is repeatedly fired while the user drags the marker.\n */\n // tslint:disable-next-line: no-output-native\n this.drag = new EventEmitter();\n /**\n * This event is fired when the user stops dragging the marker.\n */\n this.dragEnd = new EventEmitter();\n /**\n * This event is fired when the user mouses over the marker.\n */\n this.mouseOver = new EventEmitter();\n /**\n * This event is fired when the user mouses outside the marker.\n */\n this.mouseOut = new EventEmitter();\n /** @internal */\n this.infoWindow = new QueryList();\n this._markerAddedToManger = false;\n this._observableSubscriptions = [];\n this._fitBoundsDetails$ = new ReplaySubject(1);\n this._id = (markerId++).toString();\n }\n /* @internal */\n ngAfterContentInit() {\n this.handleInfoWindowUpdate();\n this.infoWindow.changes.subscribe(() => this.handleInfoWindowUpdate());\n }\n handleInfoWindowUpdate() {\n if (this.infoWindow.length > 1) {\n throw new Error('Expected no more than one info window.');\n }\n this.infoWindow.forEach(marker => {\n marker.hostMarker = this;\n });\n }\n /** @internal */\n ngOnChanges(changes) {\n if (typeof this.latitude === 'string') {\n this.latitude = Number(this.latitude);\n }\n if (typeof this.longitude === 'string') {\n this.longitude = Number(this.longitude);\n }\n if (typeof this.latitude !== 'number' || typeof this.longitude !== 'number') {\n return;\n }\n if (!this._markerAddedToManger) {\n this._markerManager.addMarker(this);\n this._updateFitBoundsDetails();\n this._markerAddedToManger = true;\n this._addEventListeners();\n return;\n }\n // tslint:disable: no-string-literal\n if (changes['latitude'] || changes['longitude']) {\n this._markerManager.updateMarkerPosition(this);\n this._updateFitBoundsDetails();\n }\n if (changes['title']) {\n this._markerManager.updateTitle(this);\n }\n if (changes['label']) {\n this._markerManager.updateLabel(this);\n }\n if (changes['draggable']) {\n this._markerManager.updateDraggable(this);\n }\n if (changes['iconUrl']) {\n this._markerManager.updateIcon(this);\n }\n if (changes['opacity']) {\n this._markerManager.updateOpacity(this);\n }\n if (changes['visible']) {\n this._markerManager.updateVisible(this);\n }\n if (changes['zIndex']) {\n this._markerManager.updateZIndex(this);\n }\n if (changes['clickable']) {\n this._markerManager.updateClickable(this);\n }\n if (changes['animation']) {\n this._markerManager.updateAnimation(this);\n }\n // tslint:enable: no-string-literal\n }\n /** @internal */\n getFitBoundsDetails$() {\n return this._fitBoundsDetails$.asObservable();\n }\n _updateFitBoundsDetails() {\n this._fitBoundsDetails$.next({ latLng: { lat: this.latitude, lng: this.longitude } });\n }\n _addEventListeners() {\n const cs = this._markerManager.createEventObservable('click', this).subscribe(() => {\n if (this.openInfoWindow) {\n this.infoWindow.forEach(infoWindow => infoWindow.open());\n }\n this.markerClick.emit(this);\n });\n this._observableSubscriptions.push(cs);\n const dcs = this._markerManager.createEventObservable('dblclick', this).subscribe(() => {\n this.markerDblClick.emit(null);\n });\n this._observableSubscriptions.push(dcs);\n const rc = this._markerManager.createEventObservable('rightclick', this).subscribe(() => {\n this.markerRightClick.emit(null);\n });\n this._observableSubscriptions.push(rc);\n const ds = this._markerManager.createEventObservable('dragstart', this)\n .subscribe(e => this.dragStart.emit(e));\n this._observableSubscriptions.push(ds);\n const d = this._markerManager.createEventObservable('drag', this)\n .subscribe(e => this.drag.emit(e));\n this._observableSubscriptions.push(d);\n const de = this._markerManager.createEventObservable('dragend', this)\n .subscribe(e => this.dragEnd.emit(e));\n this._observableSubscriptions.push(de);\n const mover = this._markerManager.createEventObservable('mouseover', this)\n .subscribe(e => this.mouseOver.emit(e));\n this._observableSubscriptions.push(mover);\n const mout = this._markerManager.createEventObservable('mouseout', this)\n .subscribe(e => this.mouseOut.emit(e));\n this._observableSubscriptions.push(mout);\n const anChng = this._markerManager.createEventObservable('animation_changed', this)\n .subscribe(() => {\n this.animationChange.emit(this.animation);\n });\n this._observableSubscriptions.push(anChng);\n }\n /** @internal */\n id() { return this._id; }\n /** @internal */\n toString() { return 'AgmMarker-' + this._id.toString(); }\n /** @internal */\n ngOnDestroy() {\n this._markerManager.deleteMarker(this);\n // unsubscribe all registered observable subscriptions\n this._observableSubscriptions.forEach((s) => s.unsubscribe());\n }\n}\nAgmMarker.decorators = [\n { type: Directive, args: [{\n selector: 'agm-marker',\n providers: [\n { provide: FitBoundsAccessor, useExisting: forwardRef(() => AgmMarker) },\n ],\n },] }\n];\nAgmMarker.ctorParameters = () => [\n { type: MarkerManager }\n];\nAgmMarker.propDecorators = {\n latitude: [{ type: Input }],\n longitude: [{ type: Input }],\n title: [{ type: Input }],\n label: [{ type: Input }],\n draggable: [{ type: Input, args: ['markerDraggable',] }],\n iconUrl: [{ type: Input }],\n visible: [{ type: Input }],\n openInfoWindow: [{ type: Input }],\n opacity: [{ type: Input }],\n zIndex: [{ type: Input }],\n clickable: [{ type: Input, args: ['markerClickable',] }],\n animation: [{ type: Input }],\n animationChange: [{ type: Output }],\n markerClick: [{ type: Output }],\n markerDblClick: [{ type: Output }],\n markerRightClick: [{ type: Output }],\n dragStart: [{ type: Output }],\n drag: [{ type: Output }],\n dragEnd: [{ type: Output }],\n mouseOver: [{ type: Output }],\n mouseOut: [{ type: Output }],\n infoWindow: [{ type: ContentChildren, args: [AgmInfoWindow,] }]\n};\n\n/**\n * AgmPolygon renders a polygon on a {@link AgmMap}\n *\n * ### Example\n * ```typescript\n * import { Component } from '@angular/core';\n *\n * @Component({\n * selector: 'my-map-cmp',\n * styles: [`\n * agm-map {\n * height: 300px;\n * }\n * `],\n * template: `\n * <agm-map [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\">\n * <agm-polygon [paths]=\"paths\">\n * </agm-polygon>\n * </agm-map>\n * `\n * })\n * export class MyMapCmp {\n * lat: number = 0;\n * lng: number = 0;\n * zoom: number = 10;\n * paths: LatLngLiteral[] = [\n * { lat: 0, lng: 10 },\n * { lat: 0, lng: 20 },\n * { lat: 10, lng: 20 },\n * { lat: 10, lng: 10 },\n * { lat: 0, lng: 10 }\n * ]\n * // Nesting paths will create a hole where they overlap;\n * nestedPaths: LatLngLiteral[][] = [[\n * { lat: 0, lng: 10 },\n * { lat: 0, lng: 20 },\n * { lat: 10, lng: 20 },\n * { lat: 10, lng: 10 },\n * { lat: 0, lng: 10 }\n * ], [\n * { lat: 0, lng: 15 },\n * { lat: 0, lng: 20 },\n * { lat: 5, lng: 20 },\n * { lat: 5, lng: 15 },\n * { lat: 0, lng: 15 }\n * ]]\n * }\n * ```\n */\nclass AgmPolygon {\n constructor(_polygonManager) {\n this._polygonManager = _polygonManager;\n /**\n * Indicates whether this Polygon handles mouse events. Defaults to true.\n */\n this.clickable = true;\n /**\n * If set to true, the user can drag this shape over the map. The geodesic\n * property defines the mode of dragging. Defaults to false.\n */\n // tslint:disable-next-line:no-input-rename\n this.draggable = false;\n /**\n * If set to true, the user can edit this shape by dragging the control\n * points shown at the vertices and on each segment. Defaults to false.\n */\n this.editable = false;\n /**\n * When true, edges of the polygon are interpreted as geodesic and will\n * follow the curvature of the Earth. When false, edges of the polygon are\n * rendered as straight lines in screen space. Note that the shape of a\n * geodesic polygon may appear to change when dragged, as the dimensions\n * are maintained relative to the surface of the earth. Defaults to false.\n */\n this.geodesic = false;\n /**\n * The ordered sequence of coordinates that designates a closed loop.\n * Unlike polylines, a polygon may consist of one or more paths.\n * As a result, the paths property may specify one or more arrays of\n * LatLng coordinates. Paths are closed automatically; do not repeat the\n * first vertex of the path as the last vertex. Simple polygons may be\n * defined using a single array of LatLngs. More complex polygons may\n * specify an array of arrays. Any simple arrays are converted into Arrays.\n * Inserting or removing LatLngs from the Array will automatically update\n * the polygon on the map.\n */\n this.paths = [];\n /**\n * This event is fired when the DOM click event is fired on the Polygon.\n */\n this.polyClick = new EventEmitter();\n /**\n * This event is fired when the DOM dblclick event is fired on the Polygon.\n */\n this.polyDblClick = new EventEmitter();\n /**\n * This event is repeatedly fired while the user drags the polygon.\n */\n this.polyDrag = new EventEmitter();\n /**\n * This event is fired when the user stops dragging the polygon.\n */\n this.polyDragEnd = new EventEmitter();\n /**\n * This event is fired when the user starts dragging the polygon.\n */\n this.polyDragStart = new EventEmitter();\n /**\n * This event is fired when the DOM mousedown event is fired on the Polygon.\n */\n this.polyMouseDown = new EventEmitter();\n /**\n * This event is fired when the DOM mousemove event is fired on the Polygon.\n */\n this.polyMouseMove = new EventEmitter();\n /**\n * This event is fired on Polygon mouseout.\n */\n this.polyMouseOut = new EventEmitter();\n /**\n * This event is fired on Polygon mouseover.\n */\n this.polyMouseOver = new EventEmitter();\n /**\n * This event is fired whe the DOM mouseup event is fired on the Polygon\n */\n this.polyMouseUp = new EventEmitter();\n /**\n * This event is fired when the Polygon is right-clicked on.\n */\n this.polyRightClick = new EventEmitter();\n /**\n * This event is fired after Polygon first path changes.\n */\n this.polyPathsChange = new EventEmitter();\n this._polygonAddedToManager = false;\n this._subscriptions = [];\n }\n /** @internal */\n ngAfterContentInit() {\n if (!this._polygonAddedToManager) {\n this._init();\n }\n }\n ngOnChanges(changes) {\n if (!this._polygonAddedToManager) {\n this._init();\n return;\n }\n this._polygonManager.setPolygonOptions(this, this._updatePolygonOptions(changes));\n }\n _init() {\n this._polygonManager.addPolygon(this);\n this._polygonAddedToManager = true;\n this._addEventListeners();\n }\n _addEventListeners() {\n const handlers = [\n { name: 'click', handler: (ev) => this.polyClick.emit(ev) },\n { name: 'dblclick', handler: (ev) => this.polyDblClick.emit(ev) },\n { name: 'drag', handler: (ev) => this.polyDrag.emit(ev) },\n { name: 'dragend', handler: (ev) => this.polyDragEnd.emit(ev) },\n { name: 'dragstart', handler: (ev) => this.polyDragStart.emit(ev) },\n { name: 'mousedown', handler: (ev) => this.polyMouseDown.emit(ev) },\n { name: 'mousemove', handler: (ev) => this.polyMouseMove.emit(ev) },\n { name: 'mouseout', handler: (ev) => this.polyMouseOut.emit(ev) },\n { name: 'mouseover', handler: (ev) => this.polyMouseOver.emit(ev) },\n { name: 'mouseup', handler: (ev) => this.polyMouseUp.emit(ev) },\n { name: 'rightclick', handler: (ev) => this.polyRightClick.emit(ev) },\n ];\n handlers.forEach((obj) => {\n const os = this._polygonManager.createEventObservable(obj.name, this).subscribe(obj.handler);\n this._subscriptions.push(os);\n });\n this._polygonManager.createPathEventObservable(this)\n .then(paths$ => {\n const os = paths$.subscribe(pathEvent => this.polyPathsChange.emit(pathEvent));\n this._subscriptions.push(os);\n });\n }\n _updatePolygonOptions(changes) {\n return Object.keys(changes)\n .filter(k => AgmPolygon._polygonOptionsAttributes.indexOf(k) !== -1)\n .reduce((obj, k) => {\n obj[k] = changes[k].currentValue;\n return obj;\n }, {});\n }\n /** @internal */\n id() { return this._id; }\n /** @internal */\n ngOnDestroy() {\n this._polygonManager.deletePolygon(this);\n // unsubscribe all registered observable subscriptions\n this._subscriptions.forEach((s) => s.unsubscribe());\n }\n getPath() {\n return this._polygonManager.getPath(this);\n }\n getPaths() {\n return this._polygonManager.getPaths(this);\n }\n}\nAgmPolygon._polygonOptionsAttributes = [\n 'clickable', 'draggable', 'editable', 'fillColor', 'fillOpacity', 'geodesic', 'icon', 'map',\n 'paths', 'strokeColor', 'strokeOpacity', 'strokeWeight', 'visible', 'zIndex', 'draggable',\n 'editable', 'visible',\n];\nAgmPolygon.decorators = [\n { type: Directive, args: [{\n selector: 'agm-polygon',\n },] }\n];\nAgmPolygon.ctorParameters = () => [\n { type: PolygonManager }\n];\nAgmPolygon.propDecorators = {\n clickable: [{ type: Input }],\n draggable: [{ type: Input, args: ['polyDraggable',] }],\n editable: [{ type: Input }],\n fillColor: [{ type: Input }],\n fillOpacity: [{ type: Input }],\n geodesic: [{ type: Input }],\n paths: [{ type: Input }],\n strokeColor: [{ type: Input }],\n strokeOpacity: [{ type: Input }],\n strokeWeight: [{ type: Input }],\n visible: [{ type: Input }],\n zIndex: [{ type: Input }],\n polyClick: [{ type: Output }],\n polyDblClick: [{ type: Output }],\n polyDrag: [{ type: Output }],\n polyDragEnd: [{ type: Output }],\n polyDragStart: [{ type: Output }],\n polyMouseDown: [{ type: Output }],\n polyMouseMove: [{ type: Output }],\n polyMouseOut: [{ type: Output }],\n polyMouseOver: [{ type: Output }],\n polyMouseUp: [{ type: Output }],\n polyRightClick: [{ type: Output }],\n polyPathsChange: [{ type: Output }]\n};\n\n/**\n * AgmPolylineIcon enables to add polyline sequences to add arrows, circle,\n * or custom icons either along the entire line, or in a specific part of it.\n * See https://developers.google.com/maps/documentation/javascript/shapes#polyline_customize\n *\n * ### Example\n * ```html\n * <agm-map [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\">\n * <agm-polyline>\n * <agm-icon-sequence [fixedRotation]=\"true\" [path]=\"'FORWARD_OPEN_ARROW'\">\n * </agm-icon-sequence>\n * </agm-polyline>\n * </agm-map>\n * ```\n */\nclass AgmPolylineIcon {\n ngOnInit() {\n if (this.path == null) {\n throw new Error('Icon Sequence path is required');\n }\n }\n}\nAgmPolylineIcon.decorators = [\n { type: Directive, args: [{ selector: 'agm-polyline agm-icon-sequence' },] }\n];\nAgmPolylineIcon.propDecorators = {\n fixedRotation: [{ type: Input }],\n offset: [{ type: Input }],\n repeat: [{ type: Input }],\n anchorX: [{ type: Input }],\n anchorY: [{ type: Input }],\n fillColor: [{ type: Input }],\n fillOpacity: [{ type: Input }],\n path: [{ type: Input }],\n rotation: [{ type: Input }],\n scale: [{ type: Input }],\n strokeColor: [{ type: Input }],\n strokeOpacity: [{ type: Input }],\n strokeWeight: [{ type: Input }]\n};\n\n/**\n * AgmPolylinePoint represents one element of a polyline within a {@link\n * AgmPolyline}\n */\nclass AgmPolylinePoint {\n constructor() {\n /**\n * This event emitter gets emitted when the position of the point changed.\n */\n this.positionChanged = new EventEmitter();\n }\n ngOnChanges(changes) {\n // tslint:disable: no-string-literal\n if (changes['latitude'] || changes['longitude']) {\n this.positionChanged.emit({\n lat: changes['latitude'] ? changes['latitude'].currentValue : this.latitude,\n lng: changes['longitude'] ? changes['longitude'].currentValue : this.longitude,\n });\n }\n // tslint:enable: no-string-literal\n }\n /** @internal */\n getFitBoundsDetails$() {\n return this.positionChanged.pipe(startWith({ lat: this.latitude, lng: this.longitude }), map(position => ({ latLng: position })));\n }\n}\nAgmPolylinePoint.decorators = [\n { type: Directive, args: [{\n selector: 'agm-polyline-point',\n providers: [\n { provide: FitBoundsAccessor, useExisting: forwardRef(() => AgmPolylinePoint) },\n ],\n },] }\n];\nAgmPolylinePoint.ctorParameters = () => [];\nAgmPolylinePoint.propDecorators = {\n latitude: [{ type: Input }],\n longitude: [{ type: Input }],\n positionChanged: [{ type: Output }]\n};\n\nlet polylineId = 0;\n/**\n * AgmPolyline renders a polyline on a {@link AgmMap}\n *\n * ### Example\n * ```typescript\n * import { Component } from '@angular/core';\n *\n * @Component({\n * selector: 'my-map-cmp',\n * styles: [`\n * .agm-map-container {\n * height: 300px;\n * }\n * `],\n * template: `\n * <agm-map [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\">\n * <agm-polyline>\n * <agm-polyline-point [latitude]=\"latA\" [longitude]=\"lngA\">\n * </agm-polyline-point>\n * <agm-polyline-point [latitude]=\"latB\" [longitude]=\"lngB\">\n * </agm-polyline-point>\n * </agm-polyline>\n * </agm-map>\n * `\n * })\n * ```\n */\nclass AgmPolyline {\n constructor(_polylineManager) {\n this._polylineManager = _polylineManager;\n /**\n * Indicates whether this Polyline handles mouse events. Defaults to true.\n */\n this.clickable = true;\n /**\n * If set to true, the user can drag this shape over the map. The geodesic property defines the\n * mode of dragging. Defaults to false.\n */\n // tslint:disable-next-line:no-input-rename\n this.draggable = false;\n /**\n * If set to true, the user can edit this shape by dragging the control points shown at the\n * vertices and on each segment. Defaults to false.\n */\n this.editable = false;\n /**\n * When true, edges of the polygon are interpreted as geodesic and will follow the curvature of\n * the Earth. When false, edges of the polygon are rendered as straight lines in screen space.\n * Note that the shape of a geodesic polygon may appear to change when dragged, as the dimensions\n * are maintained relative to the surface of the earth. Defaults to false.\n */\n this.geodesic = false;\n /**\n * Whether this polyline is visible on the map. Defaults to true.\n */\n this.visible = true;\n /**\n * This event is fired when the DOM click event is fired on the Polyline.\n */\n this.lineClick = new EventEmitter();\n /**\n * This event is fired when the DOM dblclick event is fired on the Polyline.\n */\n this.lineDblClick = new EventEmitter();\n /**\n * This event is repeatedly fired while the user drags the polyline.\n */\n this.lineDrag = new EventEmitter();\n /**\n * This event is fired when the user stops dragging the polyline.\n */\n this.lineDragEnd = new EventEmitter();\n /**\n * This event is fired when the user starts dragging the polyline.\n */\n this.lineDragStart = new EventEmitter();\n /**\n * This event is fired when the DOM mousedown event is fired on the Polyline.\n */\n this.lineMouseDown = new EventEmitter();\n /**\n * This event is fired when the DOM mousemove event is fired on the Polyline.\n */\n this.lineMouseMove = new EventEmitter();\n /**\n * This event is fired on Polyline mouseout.\n */\n this.lineMouseOut = new EventEmitter();\n /**\n * This event is fired on Polyline mouseover.\n */\n this.lineMouseOver = new EventEmitter();\n /**\n * This event is fired whe the DOM mouseup event is fired on the Polyline\n */\n this.lineMouseUp = new EventEmitter();\n /**\n * This event is fired when the Polyline is right-clicked on.\n */\n this.lineRightClick = new EventEmitter();\n /**\n * This event is fired after Polyline's path changes.\n */\n this.polyPathChange = new EventEmitter();\n this._polylineAddedToManager = false;\n this._subscriptions = [];\n this._id = (polylineId++).toString();\n }\n /** @internal */\n ngAfterContentInit() {\n if (this.points.length) {\n this.points.forEach((point) => {\n const s = point.positionChanged.subscribe(() => { this._polylineManager.updatePolylinePoints(this); });\n this._subscriptions.push(s);\n });\n }\n if (!this._polylineAddedToManager) {\n this._init();\n }\n const pointSub = this.points.changes.subscribe(() => this._polylineManager.updatePolylinePoints(this));\n this._subscriptions.push(pointSub);\n this._polylineManager.updatePolylinePoints(this);\n const iconSub = this.iconSequences.changes.subscribe(() => this._polylineManager.updateIconSequences(this));\n this._subscriptions.push(iconSub);\n }\n ngOnChanges(changes) {\n if (!this._polylineAddedToManager) {\n this._init();\n return;\n }\n const options = {};\n const optionKeys = Object.keys(changes).filter(k => AgmPolyline._polylineOptionsAttributes.indexOf(k) !== -1);\n optionKeys.forEach(k => options[k] = changes[k].currentValue);\n this._polylineManager.setPolylineOptions(this, options);\n }\n getPath() {\n return this._polylineManager.getPath(this);\n }\n _init() {\n this._polylineManager.addPolyline(this);\n this._polylineAddedToManager = true;\n this._addEventListeners();\n }\n _addEventListeners() {\n const handlers = [\n { name: 'click', handler: (ev) => this.lineClick.emit(ev) },\n { name: 'dblclick', handler: (ev) => this.lineDblClick.emit(ev) },\n { name: 'drag', handler: (ev) => this.lineDrag.emit(ev) },\n { name: 'dragend', handler: (ev) => this.lineDragEnd.emit(ev) },\n { name: 'dragstart', handler: (ev) => this.lineDragStart.emit(ev) },\n { name: 'mousedown', handler: (ev) => this.lineMouseDown.emit(ev) },\n { name: 'mousemove', handler: (ev) => this.lineMouseMove.emit(ev) },\n { name: 'mouseout', handler: (ev) => this.lineMouseOut.emit(ev) },\n { name: 'mouseover', handler: (ev) => this.lineMouseOver.emit(ev) },\n { name: 'mouseup', handler: (ev) => this.lineMouseUp.emit(ev) },\n { name: 'rightclick', handler: (ev) => this.lineRightClick.emit(ev) },\n ];\n handlers.forEach((obj) => {\n const os = this._polylineManager.createEventObservable(obj.name, this).subscribe(obj.handler);\n this._subscriptions.push(os);\n });\n this._polylineManager.createPathEventObservable(this).then((ob$) => {\n const os = ob$.subscribe(pathEvent => this.polyPathChange.emit(pathEvent));\n this._subscriptions.push(os);\n });\n }\n /** @internal */\n _getPoints() {\n if (this.points) {\n return this.points.toArray();\n }\n return [];\n }\n _getIcons() {\n if (this.iconSequences) {\n return this.iconSequences.toArray();\n }\n return [];\n }\n /** @internal */\n id() { return this._id; }\n /** @internal */\n ngOnDestroy() {\n this._polylineManager.deletePolyline(this);\n // unsubscribe all registered observable subscriptions\n this._subscriptions.forEach((s) => s.unsubscribe());\n }\n}\nAgmPolyline._polylineOptionsAttributes = [\n 'draggable', 'editable', 'visible', 'geodesic', 'strokeColor', 'strokeOpacity', 'strokeWeight',\n 'zIndex',\n];\nAgmPolyline.decorators = [\n { type: Directive, args: [{\n selector: 'agm-polyline',\n },] }\n];\nAgmPolyline.ctorParameters = () => [\n { type: PolylineManager }\n];\nAgmPolyline.propDecorators = {\n clickable: [{ type: Input }],\n draggable: [{ type: Input, args: ['polylineDraggable',] }],\n editable: [{ type: Input }],\n geodesic: [{ type: Input }],\n strokeColor: [{ type: Input }],\n strokeOpacity: [{ type: Input }],\n strokeWeight: [{ type: Input }],\n visible: [{ type: Input }],\n zIndex: [{ type: Input }],\n lineClick: [{ type: Output }],\n lineDblClick: [{ type: Output }],\n lineDrag: [{ type: Output }],\n lineDragEnd: [{ type: Output }],\n lineDragStart: [{ type: Output }],\n lineMouseDown: [{ type: Output }],\n lineMouseMove: [{ type: Output }],\n lineMouseOut: [{ type: Output }],\n lineMouseOver: [{ type: Output }],\n lineMouseUp: [{ type: Output }],\n lineRightClick: [{ type: Output }],\n polyPathChange: [{ type: Output }],\n points: [{ type: ContentChildren, args: [AgmPolylinePoint,] }],\n iconSequences: [{ type: ContentChildren, args: [AgmPolylineIcon,] }]\n};\n\nclass AgmRectangle {\n constructor(_manager) {\n this._manager = _manager;\n /**\n * Indicates whether this Rectangle handles mouse events. Defaults to true.\n */\n this.clickable = true;\n /**\n * If set to true, the user can drag this rectangle over the map. Defaults to false.\n */\n // tslint:disable-next-line:no-input-rename\n this.draggable = false;\n /**\n * If set to true, the user can edit this rectangle by dragging the control points shown at\n * the center and around the circumference of the rectangle. Defaults to false.\n */\n this.editable = false;\n /**\n * The stroke position. Defaults to CENTER.\n * This property is not supported on Internet Explorer 8 and earlier.\n */\n this.strokePosition = 'CENTER';\n /**\n * The stroke width in pixels.\n */\n this.strokeWeight = 0;\n /**\n * Whether this rectangle is visible on the map. Defaults to true.\n */\n this.visible = true;\n /**\n * This event is fired when the rectangle's is changed.\n */\n this.boundsChange = new EventEmitter();\n /**\n * This event emitter gets emitted when the user clicks on the rectangle.\n */\n this.rectangleClick = new EventEmitter();\n /**\n * This event emitter gets emitted when the user clicks on the rectangle.\n */\n this.rectangleDblClick = new EventEmitter();\n /**\n * This event is repeatedly fired while the user drags the rectangle.\n */\n // tslint:disable-next-line: no-output-native\n this.drag = new EventEmitter();\n /**\n * This event is fired when the user stops dragging the rectangle.\n */\n this.dragEnd = new EventEmitter();\n /**\n * This event is fired when the user starts dragging the rectangle.\n */\n this.dragStart = new EventEmitter();\n /**\n * This event is fired when the DOM mousedown event is fired on the rectangle.\n */\n this.mouseDown = new EventEmitter();\n /**\n * This event is fired when the DOM mousemove event is fired on the rectangle.\n */\n this.mouseMove = new EventEmitter();\n /**\n * This event is fired on rectangle mouseout.\n */\n this.mouseOut = new EventEmitter();\n /**\n * This event is fired on rectangle mouseover.\n */\n this.mouseOver = new EventEmitter();\n /**\n * This event is fired when the DOM mouseup event is fired on the rectangle.\n */\n this.mouseUp = new EventEmitter();\n /**\n * This event is fired when the rectangle is right-clicked on.\n */\n this.rightClick = new EventEmitter();\n this._rectangleAddedToManager = false;\n this._eventSubscriptions = [];\n }\n /** @internal */\n ngOnInit() {\n this._manager.addRectangle(this);\n this._rectangleAddedToManager = true;\n this._registerEventListeners();\n }\n /** @internal */\n ngOnChanges(changes) {\n if (!this._rectangleAddedToManager) {\n return;\n }\n // tslint:disable: no-string-literal\n if (changes['north'] ||\n changes['east'] ||\n changes['south'] ||\n changes['west']) {\n this._manager.setBounds(this);\n }\n if (changes['editable']) {\n this._manager.setEditable(this);\n }\n if (changes['draggable']) {\n this._manager.setDraggable(this);\n }\n if (changes['visible']) {\n this._manager.setVisible(this);\n }\n // tslint:enable: no-string-literal\n this._updateRectangleOptionsChanges(changes);\n }\n _updateRectangleOptionsChanges(changes) {\n const options = {};\n const optionKeys = Object.keys(changes).filter(k => AgmRectangle._mapOptions.indexOf(k) !== -1);\n optionKeys.forEach(k => {\n options[k] = changes[k].currentValue;\n });\n if (optionKeys.length > 0) {\n this._manager.setOptions(this, options);\n }\n }\n _registerEventListeners() {\n const events = new Map();\n events.set('bounds_changed', this.boundsChange);\n events.set('click', this.rectangleClick);\n events.set('dblclick', this.rectangleDblClick);\n events.set('drag', this.drag);\n events.set('dragend', this.dragEnd);\n events.set('dragStart', this.dragStart);\n events.set('mousedown', this.mouseDown);\n events.set('mousemove', this.mouseMove);\n events.set('mouseout', this.mouseOut);\n events.set('mouseover', this.mouseOver);\n events.set('mouseup', this.mouseUp);\n events.set('rightclick', this.rightClick);\n events.forEach((eventEmitter, eventName) => {\n this._eventSubscriptions.push(this._manager\n .createEventObservable(eventName, this)\n .subscribe(value => {\n switch (eventName) {\n case 'bounds_changed':\n this._manager.getBounds(this).then(bounds => eventEmitter.emit({\n north: bounds.getNorthEast().lat(),\n east: bounds.getNorthEast().lng(),\n south: bounds.getSouthWest().lat(),\n west: bounds.getSouthWest().lng(),\n }));\n break;\n default:\n eventEmitter.emit(value);\n }\n }));\n });\n }\n /** @internal */\n ngOnDestroy() {\n this._eventSubscriptions.forEach(s => s.unsubscribe());\n this._eventSubscriptions = null;\n this._manager.removeRectangle(this);\n }\n /**\n * Gets the LatLngBounds of this Rectangle.\n */\n getBounds() {\n return this._manager.getBounds(this);\n }\n}\nAgmRectangle._mapOptions = [\n 'fillColor',\n 'fillOpacity',\n 'strokeColor',\n 'strokeOpacity',\n 'strokePosition',\n 'strokeWeight',\n 'visible',\n 'zIndex',\n 'clickable',\n];\nAgmRectangle.decorators = [\n { type: Directive, args: [{\n selector: 'agm-rectangle',\n },] }\n];\nAgmRectangle.ctorParameters = () => [\n { type: RectangleManager }\n];\nAgmRectangle.propDecorators = {\n north: [{ type: Input }],\n east: [{ type: Input }],\n south: [{ type: Input }],\n west: [{ type: Input }],\n clickable: [{ type: Input }],\n draggable: [{ type: Input, args: ['rectangleDraggable',] }],\n editable: [{ type: Input }],\n fillColor: [{ type: Input }],\n fillOpacity: [{ type: Input }],\n strokeColor: [{ type: Input }],\n strokeOpacity: [{ type: Input }],\n strokePosition: [{ type: Input }],\n strokeWeight: [{ type: Input }],\n visible: [{ type: Input }],\n zIndex: [{ type: Input }],\n boundsChange: [{ type: Output }],\n rectangleClick: [{ type: Output }],\n rectangleDblClick: [{ type: Output }],\n drag: [{ type: Output }],\n dragEnd: [{ type: Output }],\n dragStart: [{ type: Output }],\n mouseDown: [{ type: Output }],\n mouseMove: [{ type: Output }],\n mouseOut: [{ type: Output }],\n mouseOver: [{ type: Output }],\n mouseUp: [{ type: Output }],\n rightClick: [{ type: Output }]\n};\n\nlet layerId$3 = 0;\n/*\n * This directive adds a transit layer to a google map instance\n * <agm-transit-layer [visible]=\"true|false\"> <agm-transit-layer>\n * */\nclass AgmTransitLayer {\n constructor(_manager) {\n this._manager = _manager;\n this._addedToManager = false;\n this._id = (layerId$3++).toString();\n /**\n * Hide/show transit layer\n */\n this.visible = true;\n }\n ngOnInit() {\n if (this._addedToManager) {\n return;\n }\n this._manager.addTransitLayer(this);\n this._addedToManager = true;\n }\n /** @internal */\n id() { return this._id; }\n /** @internal */\n toString() { return `AgmTransitLayer-${this._id.toString()}`; }\n /** @internal */\n ngOnDestroy() {\n this._manager.deleteLayer(this);\n }\n}\nAgmTransitLayer.decorators = [\n { type: Directive, args: [{\n selector: 'agm-transit-layer',\n },] }\n];\nAgmTransitLayer.ctorParameters = () => [\n { type: LayerManager }\n];\nAgmTransitLayer.propDecorators = {\n visible: [{ type: Input }]\n};\n\n/**\n * @internal\n */\nfunction coreDirectives() {\n return [\n AgmBicyclingLayer,\n AgmCircle,\n AgmDataLayer,\n AgmFitBounds,\n AgmFullscreenControl,\n AgmInfoWindow,\n AgmKmlLayer,\n AgmMap,\n AgmMapTypeControl,\n AgmMarker,\n AgmPanControl,\n AgmPolygon,\n AgmPolyline,\n AgmPolylineIcon,\n AgmPolylinePoint,\n AgmRectangle,\n AgmRotateControl,\n AgmScaleControl,\n AgmStreetViewControl,\n AgmTransitLayer,\n AgmZoomControl,\n ];\n}\n/**\n * The angular-google-maps core module. Contains all Directives/Services/Pipes\n * of the core module. Please use `AgmCoreModule.forRoot()` in your app module.\n */\nclass AgmCoreModule {\n /**\n * Please use this method when you register the module at the root level.\n */\n static forRoot(lazyMapsAPILoaderConfig) {\n return {\n ngModule: AgmCoreModule,\n providers: [\n ...BROWSER_GLOBALS_PROVIDERS, { provide: MapsAPILoader, useClass: LazyMapsAPILoader },\n { provide: LAZY_MAPS_API_CONFIG, useValue: lazyMapsAPILoaderConfig },\n ],\n };\n }\n}\nAgmCoreModule.decorators = [\n { type: NgModule, args: [{ declarations: coreDirectives(), exports: coreDirectives() },] }\n];\n\n/*\n * Public API Surface of core\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AgmBicyclingLayer, AgmCircle, AgmCoreModule, AgmDataLayer, AgmFitBounds, AgmFullscreenControl, AgmGeocoder, AgmInfoWindow, AgmKmlLayer, AgmMap, AgmMapTypeControl, AgmMarker, AgmPanControl, AgmPolygon, AgmPolyline, AgmPolylineIcon, AgmPolylinePoint, AgmRectangle, AgmRotateControl, AgmScaleControl, AgmStreetViewControl, AgmTransitLayer, AgmZoomControl, CircleManager, DataLayerManager, FitBoundsAccessor, GoogleMapsAPIWrapper, GoogleMapsScriptProtocol, InfoWindowManager, KmlLayerManager, LAZY_MAPS_API_CONFIG, LayerManager, LazyMapsAPILoader, MapsAPILoader, MarkerManager, NoOpMapsAPILoader, PolygonManager, PolylineManager, RectangleManager, coreDirectives, FitBoundsService as ɵa, AgmMapControl as ɵb, WindowRef as ɵc, DocumentRef as ɵd, BROWSER_GLOBALS_PROVIDERS as ɵe };\n"],"mappings":"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AE,CAAC;IAAE3b,IAAI,EAAEjC;EAAO,CAAC,CAAC;EAC7B6d,SAAS,EAAE,CAAC;IAAE5b,IAAI,EAAEjC;EAAO,CAAC,CAAC;EAC7B8d,SAAS,EAAE,CAAC;IAAE7b,IAAI,EAAEjC;EAAO,CAAC,CAAC;EAC7B+d,QAAQ,EAAE,CAAC;IAAE9b,IAAI,EAAEjC;EAAO,CAAC,CAAC;EAC5Bge,SAAS,EAAE,CAAC;IAAE/b,IAAI,EAAEjC;EAAO,CAAC,CAAC;EAC7Bie,OAAO,EAAE,CAAC;IAAEhc,IAAI,EAAEjC;EAAO,CAAC,CAAC;EAC3Bke,YAAY,EAAE,CAAC;IAAEjc,IAAI,EAAEjC;EAAO,CAAC,CAAC;EAChCme,UAAU,EAAE,CAAC;IAAElc,IAAI,EAAEjC;EAAO,CAAC;AACjC,CAAC;AAED,IAAImf,SAAS,GAAG,CAAC;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}