UNPKG

ng-agm-core-lib

Version:
744 lines 85.9 kB
import { isPlatformServer } from '@angular/common'; import { Component, ContentChildren, Directive, EventEmitter, Inject, Input, Output, PLATFORM_ID } from '@angular/core'; import { FitBoundsService } from '../services/fit-bounds'; import { GoogleMapsAPIWrapper } from '../services/google-maps-api-wrapper'; import { CircleManager } from '../services/managers/circle-manager'; import { InfoWindowManager } from '../services/managers/info-window-manager'; import { LayerManager } from '../services/managers/layer-manager'; import { MarkerManager } from '../services/managers/marker-manager'; import { PolygonManager } from '../services/managers/polygon-manager'; import { PolylineManager } from '../services/managers/polyline-manager'; import { RectangleManager } from '../services/managers/rectangle-manager'; import { DataLayerManager } from './../services/managers/data-layer-manager'; import { KmlLayerManager } from './../services/managers/kml-layer-manager'; import * as i0 from "@angular/core"; import * as i1 from "../services/google-maps-api-wrapper"; import * as i2 from "../services/fit-bounds"; export class AgmMapControl { position; static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgmMapControl, deps: [], target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: AgmMapControl, inputs: { position: "position" }, ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgmMapControl, decorators: [{ type: Directive }], propDecorators: { position: [{ type: Input }] } }); export class AgmFullscreenControl extends AgmMapControl { getOptions() { return { fullscreenControl: true, fullscreenControlOptions: { position: this.position && google.maps.ControlPosition[this.position], }, }; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgmFullscreenControl, deps: null, target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: AgmFullscreenControl, selector: "agm-map agm-fullscreen-control", providers: [{ provide: AgmMapControl, useExisting: AgmFullscreenControl }], usesInheritance: true, ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgmFullscreenControl, decorators: [{ type: Directive, args: [{ selector: 'agm-map agm-fullscreen-control', providers: [{ provide: AgmMapControl, useExisting: AgmFullscreenControl }], }] }] }); export class AgmMapTypeControl extends AgmMapControl { mapTypeIds; style; getOptions() { return { mapTypeControl: true, mapTypeControlOptions: { position: this.position && google.maps.ControlPosition[this.position], style: this.style && google.maps.MapTypeControlStyle[this.style], mapTypeIds: this.mapTypeIds && this.mapTypeIds.map(mapTypeId => google.maps.MapTypeId[mapTypeId]), }, }; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgmMapTypeControl, deps: null, target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: AgmMapTypeControl, selector: "agm-map agm-map-type-control", inputs: { mapTypeIds: "mapTypeIds", style: "style" }, providers: [{ provide: AgmMapControl, useExisting: AgmMapTypeControl }], usesInheritance: true, ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgmMapTypeControl, decorators: [{ type: Directive, args: [{ selector: 'agm-map agm-map-type-control', providers: [{ provide: AgmMapControl, useExisting: AgmMapTypeControl }], }] }], propDecorators: { mapTypeIds: [{ type: Input }], style: [{ type: Input }] } }); export class AgmPanControl extends AgmMapControl { getOptions() { return { panControl: true, panControlOptions: { position: this.position && google.maps.ControlPosition[this.position], }, }; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgmPanControl, deps: null, target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: AgmPanControl, selector: "agm-map agm-pan-control", providers: [{ provide: AgmMapControl, useExisting: AgmPanControl }], usesInheritance: true, ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgmPanControl, decorators: [{ type: Directive, args: [{ selector: 'agm-map agm-pan-control', providers: [{ provide: AgmMapControl, useExisting: AgmPanControl }], }] }] }); export class AgmRotateControl extends AgmMapControl { getOptions() { return { rotateControl: true, rotateControlOptions: { position: this.position && google.maps.ControlPosition[this.position], }, }; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgmRotateControl, deps: null, target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: AgmRotateControl, selector: "agm-map agm-rotate-control", providers: [{ provide: AgmMapControl, useExisting: AgmRotateControl }], usesInheritance: true, ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgmRotateControl, decorators: [{ type: Directive, args: [{ selector: 'agm-map agm-rotate-control', providers: [{ provide: AgmMapControl, useExisting: AgmRotateControl }], }] }] }); export class AgmScaleControl extends AgmMapControl { getOptions() { return { scaleControl: true, }; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgmScaleControl, deps: null, target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: AgmScaleControl, selector: "agm-map agm-scale-control", providers: [{ provide: AgmMapControl, useExisting: AgmScaleControl }], usesInheritance: true, ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgmScaleControl, decorators: [{ type: Directive, args: [{ selector: 'agm-map agm-scale-control', providers: [{ provide: AgmMapControl, useExisting: AgmScaleControl }], }] }] }); export class AgmStreetViewControl extends AgmMapControl { getOptions() { return { streetViewControl: true, streetViewControlOptions: { position: this.position && google.maps.ControlPosition[this.position], }, }; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgmStreetViewControl, deps: null, target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: AgmStreetViewControl, selector: "agm-map agm-street-view-control", providers: [{ provide: AgmMapControl, useExisting: AgmStreetViewControl }], usesInheritance: true, ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgmStreetViewControl, decorators: [{ type: Directive, args: [{ selector: 'agm-map agm-street-view-control', providers: [{ provide: AgmMapControl, useExisting: AgmStreetViewControl }], }] }] }); export class AgmZoomControl extends AgmMapControl { style; getOptions() { return { zoomControl: true, zoomControlOptions: { position: this.position && google.maps.ControlPosition[this.position], style: this.style && google.maps.ZoomControlStyle[this.style], }, }; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgmZoomControl, deps: null, target: i0.ɵɵFactoryTarget.Directive }); static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: AgmZoomControl, selector: "agm-map agm-zoom-control", inputs: { style: "style" }, providers: [{ provide: AgmMapControl, useExisting: AgmZoomControl }], usesInheritance: true, ngImport: i0 }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgmZoomControl, decorators: [{ type: Directive, args: [{ selector: 'agm-map agm-zoom-control', providers: [{ provide: AgmMapControl, useExisting: AgmZoomControl }], }] }], propDecorators: { style: [{ type: Input }] } }); /** * AgmMap renders a Google Map. * **Important note**: To be able see a map in the browser, you have to define a height for the * element `agm-map`. * * ### Example * ```typescript * import { Component } from '@angular/core'; * * @Component({ * selector: 'my-map-cmp', * styles: [` * agm-map { * height: 300px; * } * `], * template: ` * <agm-map [latitude]="lat" [longitude]="lng" [zoom]="zoom"> * </agm-map> * ` * }) * ``` */ export class AgmMap { _elem; _mapsWrapper; _platformId; _fitBoundsService; _zone; /** * The longitude that defines the center of the map. */ longitude = 0; /** * The latitude that defines the center of the map. */ latitude = 0; /** * The zoom level of the map. The default zoom level is 8. */ zoom = 8; /** * The minimal zoom level of the map allowed. When not provided, no restrictions to the zoom level * are enforced. */ minZoom; /** * The maximal zoom level of the map allowed. When not provided, no restrictions to the zoom level * are enforced. */ maxZoom; /** * The control size for the default map controls. Only governs the controls made by the Maps API itself */ controlSize; /** * Enables/disables if map is draggable. */ // tslint:disable-next-line:no-input-rename draggable = true; /** * Enables/disables zoom and center on double click. Enabled by default. */ disableDoubleClickZoom = false; /** * Enables/disables all default UI of the Google map. Please note: When the map is created, this * value cannot get updated. */ disableDefaultUI = false; /** * If false, disables scrollwheel zooming on the map. The scrollwheel is enabled by default. */ scrollwheel = true; /** * Color used for the background of the Map div. This color will be visible when tiles have not * yet loaded as the user pans. This option can only be set when the map is initialized. */ backgroundColor; /** * The name or url of the cursor to display when mousing over a draggable map. This property uses * the css * cursor attribute to change the icon. As with the css property, you must specify at * least one fallback cursor that is not a URL. For example: * [draggableCursor]="'url(http://www.example.com/icon.png), auto;'" */ draggableCursor; /** * The name or url of the cursor to display when the map is being dragged. This property uses the * css cursor attribute to change the icon. As with the css property, you must specify at least * one fallback cursor that is not a URL. For example: * [draggingCursor]="'url(http://www.example.com/icon.png), auto;'" */ draggingCursor; /** * If false, prevents the map from being controlled by the keyboard. Keyboard shortcuts are * enabled by default. */ keyboardShortcuts = true; /** * Styles to apply to each of the default map types. Note that for Satellite/Hybrid and Terrain * modes, these styles will only apply to labels and geometry. */ styles = []; /** * When true and the latitude and/or longitude values changes, the Google Maps panTo method is * used to * center the map. See: https://developers.google.com/maps/documentation/javascript/reference#Map */ usePanning = false; /** * Sets the viewport to contain the given bounds. * If this option to `true`, the bounds get automatically computed from all elements that use the {@link AgmFitBounds} directive. */ fitBounds = false; /** * Padding amount for the bounds. */ fitBoundsPadding; /** * The map mapTypeId. Defaults to 'roadmap'. */ mapTypeId = 'ROADMAP'; /** * When false, map icons are not clickable. A map icon represents a point of interest, * also known as a POI. By default map icons are clickable. */ clickableIcons = true; /** * A map icon represents a point of interest, also known as a POI. * When map icons are clickable by default, an info window is displayed. * When this property is set to false, the info window will not be shown but the click event * will still fire */ showDefaultInfoWindow = true; /** * This setting controls how gestures on the map are handled. * Allowed values: * - 'cooperative' (Two-finger touch gestures pan and zoom the map. One-finger touch gestures are not handled by the map.) * - 'greedy' (All touch gestures pan or zoom the map.) * - 'none' (The map cannot be panned or zoomed by user gestures.) * - 'auto' [default] (Gesture handling is either cooperative or greedy, depending on whether the page is scrollable or not. */ gestureHandling = 'auto'; /** * Controls the automatic switching behavior for the angle of incidence of * the map. The only allowed values are 0 and 45. The value 0 causes the map * to always use a 0° overhead view regardless of the zoom level and * viewport. The value 45 causes the tilt angle to automatically switch to * 45 whenever 45° imagery is available for the current zoom level and * viewport, and switch back to 0 whenever 45° imagery is not available * (this is the default behavior). 45° imagery is only available for * satellite and hybrid map types, within some locations, and at some zoom * levels. Note: getTilt returns the current tilt angle, not the value * specified by this option. Because getTilt and this option refer to * different things, do not bind() the tilt property; doing so may yield * unpredictable effects. (Default of AGM is 0 (disabled). Enable it with value 45.) */ tilt = 0; /** * Options for restricting the bounds of the map. * User cannot pan or zoom away from restricted area. */ restriction; /** * Map option attributes that can change over time */ static _mapOptionsAttributes = [ 'disableDoubleClickZoom', 'scrollwheel', 'draggable', 'draggableCursor', 'draggingCursor', 'keyboardShortcuts', 'styles', 'zoom', 'minZoom', 'maxZoom', 'mapTypeId', 'clickableIcons', 'gestureHandling', 'tilt', 'restriction', ]; _observableSubscriptions = []; _fitBoundsSubscription; /** * This event emitter gets emitted when the user clicks on the map (but not when they click on a * marker or infoWindow). */ // tslint:disable-next-line: max-line-length mapClick = new EventEmitter(); /** * This event emitter gets emitted when the user right-clicks on the map (but not when they click * on a marker or infoWindow). */ mapRightClick = new EventEmitter(); /** * This event emitter gets emitted when the user double-clicks on the map (but not when they click * on a marker or infoWindow). */ mapDblClick = new EventEmitter(); /** * This event emitter is fired when the map center changes. */ centerChange = new EventEmitter(); /** * This event is fired when the viewport bounds have changed. */ boundsChange = new EventEmitter(); /** * This event is fired when the mapTypeId property changes. */ mapTypeIdChange = new EventEmitter(); /** * This event is fired when the map becomes idle after panning or zooming. */ idle = new EventEmitter(); /** * This event is fired when the zoom level has changed. */ zoomChange = new EventEmitter(); /** * This event is fired when the google map is fully initialized. * You get the google.maps.Map instance as a result of this EventEmitter. */ mapReady = new EventEmitter(); /** * This event is fired when the visible tiles have finished loading. */ tilesLoaded = new EventEmitter(); mapControls; constructor(_elem, _mapsWrapper, // tslint:disable-next-line: ban-types _platformId, _fitBoundsService, _zone) { this._elem = _elem; this._mapsWrapper = _mapsWrapper; this._platformId = _platformId; this._fitBoundsService = _fitBoundsService; this._zone = _zone; } /** @internal */ ngAfterContentInit() { if (isPlatformServer(this._platformId)) { // The code is running on the server, do nothing return; } // todo: this should be solved with a new component and a viewChild decorator const container = this._elem.nativeElement.querySelector('.agm-map-container-inner'); this._initMapInstance(container); } _initMapInstance(el) { this._mapsWrapper.createMap(el, { center: { lat: this.latitude || 0, lng: this.longitude || 0 }, zoom: this.zoom, minZoom: this.minZoom, maxZoom: this.maxZoom, controlSize: this.controlSize, disableDefaultUI: this.disableDefaultUI, disableDoubleClickZoom: this.disableDoubleClickZoom, scrollwheel: this.scrollwheel, backgroundColor: this.backgroundColor, draggable: this.draggable, draggableCursor: this.draggableCursor, draggingCursor: this.draggingCursor, keyboardShortcuts: this.keyboardShortcuts, styles: this.styles, mapTypeId: this.mapTypeId.toLocaleLowerCase(), clickableIcons: this.clickableIcons, gestureHandling: this.gestureHandling, tilt: this.tilt, restriction: this.restriction, }) .then(() => this._mapsWrapper.getNativeMap()) .then(map => this.mapReady.emit(map)); // register event listeners this._handleMapCenterChange(); this._handleMapZoomChange(); this._handleMapMouseEvents(); this._handleBoundsChange(); this._handleMapTypeIdChange(); this._handleTilesLoadedEvent(); this._handleIdleEvent(); this._handleControlChange(); } /** @internal */ ngOnDestroy() { // unsubscribe all registered observable subscriptions this._observableSubscriptions.forEach((s) => s.unsubscribe()); // remove all listeners from the map instance this._mapsWrapper.clearInstanceListeners(); if (this._fitBoundsSubscription) { this._fitBoundsSubscription.unsubscribe(); } } /* @internal */ ngOnChanges(changes) { this._updateMapOptionsChanges(changes); this._updatePosition(changes); } _updateMapOptionsChanges(changes) { const options = {}; const optionKeys = Object.keys(changes).filter(k => AgmMap._mapOptionsAttributes.indexOf(k) !== -1); optionKeys.forEach((k) => { options[k] = changes[k].currentValue; }); this._mapsWrapper.setMapOptions(options); } /** * Triggers a resize event on the google map instance. * When recenter is true, the of the google map gets called with the current lat/lng values or fitBounds value to recenter the map. * Returns a promise that gets resolved after the event was triggered. */ triggerResize(recenter = true) { // Note: When we would trigger the resize event and show the map in the same turn (which is a // common case for triggering a resize event), then the resize event would not // work (to show the map), so we trigger the event in a timeout. return new Promise((resolve) => { setTimeout(() => { return this._mapsWrapper.triggerMapEvent('resize').then(() => { if (recenter) { this.fitBounds != null ? this._fitBounds() : this._setCenter(); } resolve(); }); }); }); } _updatePosition(changes) { // tslint:disable: no-string-literal if (changes['latitude'] == null && changes['longitude'] == null && !changes['fitBounds']) { // no position update needed return; } // tslint:enable: no-string-literal // we prefer fitBounds in changes if ('fitBounds' in changes) { this._fitBounds(); return; } if (typeof this.latitude !== 'number' || typeof this.longitude !== 'number') { return; } this._setCenter(); } _setCenter() { const newCenter = { lat: this.latitude, lng: this.longitude, }; if (this.usePanning) { this._mapsWrapper.panTo(newCenter); } else { this._mapsWrapper.setCenter(newCenter); } } _fitBounds() { switch (this.fitBounds) { case true: this._subscribeToFitBoundsUpdates(); break; case false: if (this._fitBoundsSubscription) { this._fitBoundsSubscription.unsubscribe(); } break; default: if (this._fitBoundsSubscription) { this._fitBoundsSubscription.unsubscribe(); } this._updateBounds(this.fitBounds, this.fitBoundsPadding); } } _subscribeToFitBoundsUpdates() { this._zone.runOutsideAngular(() => { this._fitBoundsSubscription = this._fitBoundsService.getBounds$().subscribe(b => { this._zone.run(() => this._updateBounds(b, this.fitBoundsPadding)); }); }); } _updateBounds(bounds, padding) { if (!bounds) { return; } if (this._isLatLngBoundsLiteral(bounds) && typeof google !== 'undefined' && google && google.maps && google.maps.LatLngBounds) { const newBounds = new google.maps.LatLngBounds(); newBounds.union(bounds); bounds = newBounds; } if (this.usePanning) { this._mapsWrapper.panToBounds(bounds, padding); return; } this._mapsWrapper.fitBounds(bounds, padding); } _isLatLngBoundsLiteral(bounds) { return bounds != null && bounds.extend === undefined; } _handleMapCenterChange() { const s = this._mapsWrapper.subscribeToMapEvent('center_changed').subscribe(() => { this._mapsWrapper.getCenter().then((center) => { this.latitude = center.lat(); this.longitude = center.lng(); this.centerChange.emit({ lat: this.latitude, lng: this.longitude }); }); }); this._observableSubscriptions.push(s); } _handleBoundsChange() { const s = this._mapsWrapper.subscribeToMapEvent('bounds_changed').subscribe(() => { this._mapsWrapper.getBounds().then((bounds) => { this.boundsChange.emit(bounds); }); }); this._observableSubscriptions.push(s); } _handleMapTypeIdChange() { const s = this._mapsWrapper.subscribeToMapEvent('maptypeid_changed').subscribe(() => { this._mapsWrapper.getMapTypeId().then((mapTypeId) => { this.mapTypeIdChange.emit(mapTypeId); }); }); this._observableSubscriptions.push(s); } _handleMapZoomChange() { const s = this._mapsWrapper.subscribeToMapEvent('zoom_changed').subscribe(() => { this._mapsWrapper.getZoom().then((z) => { this.zoom = z; this.zoomChange.emit(z); }); }); this._observableSubscriptions.push(s); } _handleIdleEvent() { const s = this._mapsWrapper.subscribeToMapEvent('idle').subscribe(() => { this.idle.emit(void 0); }); this._observableSubscriptions.push(s); } _handleTilesLoadedEvent() { const s = this._mapsWrapper.subscribeToMapEvent('tilesloaded').subscribe(() => this.tilesLoaded.emit(void 0)); this._observableSubscriptions.push(s); } _handleMapMouseEvents() { const events = [ { name: 'click', emitter: this.mapClick }, { name: 'rightclick', emitter: this.mapRightClick }, { name: 'dblclick', emitter: this.mapDblClick }, ]; events.forEach(e => { const s = this._mapsWrapper.subscribeToMapEvent(e.name).subscribe(([event]) => { // the placeId will be undefined in case the event was not an IconMouseEvent (google types) if (event.placeId && !this.showDefaultInfoWindow) { event.stop(); } e.emitter.emit(event); }); this._observableSubscriptions.push(s); }); } _handleControlChange() { this._setControls(); this.mapControls.changes.subscribe(() => this._setControls()); } _setControls() { const controlOptions = { fullscreenControl: !this.disableDefaultUI, mapTypeControl: false, panControl: false, rotateControl: false, scaleControl: false, streetViewControl: !this.disableDefaultUI, zoomControl: !this.disableDefaultUI, }; this.mapControls.forEach(control => Object.assign(controlOptions, control.getOptions())); this._mapsWrapper.setMapOptions(controlOptions); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgmMap, deps: [{ token: i0.ElementRef }, { token: i1.GoogleMapsAPIWrapper }, { token: PLATFORM_ID }, { token: i2.FitBoundsService }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AgmMap, selector: "agm-map", inputs: { longitude: "longitude", latitude: "latitude", zoom: "zoom", minZoom: "minZoom", maxZoom: "maxZoom", controlSize: "controlSize", draggable: ["mapDraggable", "draggable"], disableDoubleClickZoom: "disableDoubleClickZoom", disableDefaultUI: "disableDefaultUI", scrollwheel: "scrollwheel", backgroundColor: "backgroundColor", draggableCursor: "draggableCursor", draggingCursor: "draggingCursor", keyboardShortcuts: "keyboardShortcuts", styles: "styles", usePanning: "usePanning", fitBounds: "fitBounds", fitBoundsPadding: "fitBoundsPadding", mapTypeId: "mapTypeId", clickableIcons: "clickableIcons", showDefaultInfoWindow: "showDefaultInfoWindow", gestureHandling: "gestureHandling", tilt: "tilt", restriction: "restriction" }, outputs: { mapClick: "mapClick", mapRightClick: "mapRightClick", mapDblClick: "mapDblClick", centerChange: "centerChange", boundsChange: "boundsChange", mapTypeIdChange: "mapTypeIdChange", idle: "idle", zoomChange: "zoomChange", mapReady: "mapReady", tilesLoaded: "tilesLoaded" }, providers: [ CircleManager, DataLayerManager, DataLayerManager, FitBoundsService, GoogleMapsAPIWrapper, InfoWindowManager, KmlLayerManager, LayerManager, MarkerManager, PolygonManager, PolylineManager, RectangleManager, ], queries: [{ propertyName: "mapControls", predicate: AgmMapControl }], usesOnChanges: true, ngImport: i0, template: ` <div class='agm-map-container-inner sebm-google-map-container-inner'></div> <div class='agm-map-content'> <ng-content></ng-content> </div> `, isInline: true, styles: [".agm-map-container-inner{width:inherit;height:inherit}.agm-map-content{display:none}\n"] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AgmMap, decorators: [{ type: Component, args: [{ selector: 'agm-map', providers: [ CircleManager, DataLayerManager, DataLayerManager, FitBoundsService, GoogleMapsAPIWrapper, InfoWindowManager, KmlLayerManager, LayerManager, MarkerManager, PolygonManager, PolylineManager, RectangleManager, ], template: ` <div class='agm-map-container-inner sebm-google-map-container-inner'></div> <div class='agm-map-content'> <ng-content></ng-content> </div> `, styles: [".agm-map-container-inner{width:inherit;height:inherit}.agm-map-content{display:none}\n"] }] }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.GoogleMapsAPIWrapper }, { type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID] }] }, { type: i2.FitBoundsService }, { type: i0.NgZone }], propDecorators: { longitude: [{ type: Input }], latitude: [{ type: Input }], zoom: [{ type: Input }], minZoom: [{ type: Input }], maxZoom: [{ type: Input }], controlSize: [{ type: Input }], draggable: [{ type: Input, args: ['mapDraggable'] }], disableDoubleClickZoom: [{ type: Input }], disableDefaultUI: [{ type: Input }], scrollwheel: [{ type: Input }], backgroundColor: [{ type: Input }], draggableCursor: [{ type: Input }], draggingCursor: [{ type: Input }], keyboardShortcuts: [{ type: Input }], styles: [{ type: Input }], usePanning: [{ type: Input }], fitBounds: [{ type: Input }], fitBoundsPadding: [{ type: Input }], mapTypeId: [{ type: Input }], clickableIcons: [{ type: Input }], showDefaultInfoWindow: [{ type: Input }], gestureHandling: [{ type: Input }], tilt: [{ type: Input }], restriction: [{ type: Input }], mapClick: [{ type: Output }], mapRightClick: [{ type: Output }], mapDblClick: [{ type: Output }], centerChange: [{ type: Output }], boundsChange: [{ type: Output }], mapTypeIdChange: [{ type: Output }], idle: [{ type: Output }], zoomChange: [{ type: Output }], mapReady: [{ type: Output }], tilesLoaded: [{ type: Output }], mapControls: [{ type: ContentChildren, args: [AgmMapControl] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL2RpcmVjdGl2ZXMvbWFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBb0IsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBRSxXQUFXLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBRzlNLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7O0FBSzNFLE1BQU0sT0FBZ0IsYUFBYTtJQUN4QixRQUFRLENBQWtCO3dHQURmLGFBQWE7NEZBQWIsYUFBYTs7NEZBQWIsYUFBYTtrQkFEbEMsU0FBUzs4QkFFQyxRQUFRO3NCQUFoQixLQUFLOztBQVFSLE1BQU0s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