{"version":3,"file":"ng-maps-core.mjs","sources":["../../../../libs/core/src/lib/services/maps-api-loader/maps-api-loader.ts","../../../../libs/core/src/lib/services/fit-bounds.ts","../../../../libs/core/src/lib/services/maps-api-wrapper.ts","../../../../libs/core/src/lib/directives/map.ts","../../../../libs/core/src/lib/services/managers/marker.manager.ts","../../../../libs/core/src/lib/services/managers/info-window.manager.ts","../../../../libs/core/src/lib/directives/info-window.ts","../../../../libs/core/src/lib/directives/marker.ts","../../../../libs/core/src/lib/directives/fit-bounds.ts","../../../../libs/core/src/lib/services/managers/circle-manager.ts","../../../../libs/core/src/lib/directives/circle.ts","../../../../libs/core/src/lib/services/managers/polygon.manager.ts","../../../../libs/core/src/lib/directives/polygon.ts","../../../../libs/core/src/lib/services/managers/polyline-manager.ts","../../../../libs/core/src/lib/directives/polyline-point.ts","../../../../libs/core/src/lib/directives/polyline.ts","../../../../libs/core/src/lib/services/managers/rectangle-manager.ts","../../../../libs/core/src/lib/directives/rectangle.ts","../../../../libs/core/src/lib/services/maps-api-loader/noop-maps-api-loader.ts","../../../../libs/core/src/lib/services/script-loader.service.ts","../../../../libs/core/src/lib/core.module.ts","../../../../libs/core/src/public-api.ts","../../../../libs/core/src/ng-maps-core.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable()\nexport abstract class MapsAPILoader {\n  protected _window?: Window | null;\n  protected _document?: Document;\n  public abstract load(): Promise<void>;\n  public abstract configure(config: any): void;\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, from, Observable, timer } from 'rxjs';\nimport {\n  flatMap,\n  map,\n  mergeMap,\n  sample,\n  shareReplay,\n  switchMap,\n} from 'rxjs/operators';\n\nimport { BoundsLiteral } from '../interface/bounds';\nimport { GeoPoint } from '../interface/geo-point';\n\nimport { MapsAPILoader } from './maps-api-loader/maps-api-loader';\n\nexport interface FitBoundsDetails {\n  latLng: GeoPoint;\n}\n\n/**\n * @internal\n */\nexport type BoundsMap = Map<string, GeoPoint>;\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 */\nexport abstract class FitBoundsAccessor {\n  public abstract getFitBoundsDetails$(): Observable<FitBoundsDetails>;\n}\n\n/**\n * The FitBoundsService is responsible for computing the bounds of the a single map.\n */\n@Injectable()\nexport abstract class FitBoundsService {\n  protected readonly bounds$: Observable<BoundsLiteral>;\n  protected readonly _boundsChangeSampleTime$ = new BehaviorSubject<number>(\n    200,\n  );\n  protected readonly _includeInBounds$ = new BehaviorSubject<BoundsMap>(\n    new Map<string, GeoPoint>(),\n  );\n\n  constructor(loader: MapsAPILoader) {\n    this.bounds$ = from(loader.load()).pipe(\n      mergeMap(() => this._includeInBounds$),\n      sample(\n        this._boundsChangeSampleTime$.pipe(switchMap((time) => timer(0, time))),\n      ),\n      map((includeInBounds) => this.generateBounds(includeInBounds)),\n      shareReplay(1),\n    );\n  }\n\n  protected abstract generateBounds(\n    includeInBounds: Map<string, GeoPoint>,\n  ): BoundsLiteral;\n\n  public addToBounds(latLng: GeoPoint) {\n    const id = this._createIdentifier(latLng);\n    if (this._includeInBounds$.value.has(id)) {\n      return;\n    }\n    const bounds = this._includeInBounds$.value;\n    bounds.set(id, latLng);\n    this._includeInBounds$.next(bounds);\n  }\n\n  public removeFromBounds(\n    latLng: google.maps.LatLng | google.maps.LatLngLiteral,\n  ) {\n    const bounds = this._includeInBounds$.value;\n    bounds.delete(this._createIdentifier(latLng));\n    this._includeInBounds$.next(bounds);\n  }\n\n  public changeFitBoundsChangeSampleTime(timeMs: number) {\n    this._boundsChangeSampleTime$.next(timeMs);\n  }\n\n  public getBounds$(): Observable<BoundsLiteral> {\n    return this.bounds$;\n  }\n\n  protected _createIdentifier(\n    latLng: google.maps.LatLng | google.maps.LatLngLiteral,\n  ): string {\n    return `${latLng.lat}+${latLng.lng}`;\n  }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { BoundsLiteral } from '../interface/bounds';\nimport { CircleOptions } from '../interface/circle-options';\nimport { GeoPoint } from '../interface/geo-point';\nimport { MapOptions } from '../interface/map-options';\nimport { MarkerOptions } from '../interface/marker-options';\nimport { Padding } from '../interface/padding';\nimport { RectangleOptions } from '../interface/rectangle-options';\n\nimport { MapsAPILoader } from './maps-api-loader/maps-api-loader';\n\n@Injectable()\nexport abstract class MapsApiWrapper<T = any, C = any, R = any, I = any> {\n  protected _api?: Promise<T>;\n  protected _mapResolver?: (value: T) => void;\n\n  constructor(protected _loader: MapsAPILoader, protected _zone: NgZone) {\n    this._api = new Promise<T>((resolve) => {\n      this._mapResolver = resolve;\n    });\n  }\n\n  public abstract createMap(\n    el: HTMLElement,\n    center: GeoPoint,\n    options: MapOptions,\n  ): void | Promise<void>;\n\n  public abstract setMapOptions(options: MapOptions): void | Promise<void>;\n\n  public abstract createMarker(\n    position: GeoPoint,\n    options?: MarkerOptions,\n    addToMap?: boolean,\n  ): Promise<any>;\n\n  public abstract clearInstanceListeners(): void;\n\n  public async getNativeMap(): Promise<T | undefined> {\n    return this._api;\n  }\n\n  public abstract triggerMapEvent(eventName: string): Promise<void>;\n\n  public abstract getCenter(): Promise<GeoPoint | undefined>;\n\n  public abstract setCenter(newCenter: GeoPoint): Promise<void>;\n\n  public abstract panTo(newCenter: GeoPoint): Promise<void>;\n\n  public abstract panToBounds(\n    bounds: BoundsLiteral,\n    boundsPadding?: number | Padding,\n  ): void | Promise<void>;\n\n  public abstract fitBounds(\n    bounds: BoundsLiteral,\n    boundsPadding?: number | Padding,\n  ): void | Promise<void>;\n\n  public abstract getBounds(): Promise<BoundsLiteral | undefined>;\n\n  public abstract getZoom(): Promise<number | undefined>;\n\n  public abstract setZoom(zoom: number): Promise<any>;\n\n  public abstract getMapTypeId(): Promise<\n    google.maps.MapTypeId | string | undefined\n  >;\n\n  public abstract subscribeToMapEvent(eventName: string): Observable<any>;\n\n  public abstract createInfoWindow(\n    center: GeoPoint | null,\n    options: any,\n  ): Promise<I>;\n\n  // TODO typings\n  public abstract createDrawingManager(\n    param: any,\n    addToMap?: boolean,\n  ): Promise<any>;\n\n  public abstract createCircle(\n    center: GeoPoint,\n    options: CircleOptions,\n  ): Promise<C>;\n\n  public abstract createRectangle(\n    box: BoundsLiteral,\n    options: RectangleOptions,\n  ): Promise<R>;\n\n  public abstract createPolyline(options: any): Promise<any>;\n\n  public abstract createPolygon(options: any): Promise<any>;\n}\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  NgZone,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { BoundsLiteral } from '../interface/bounds';\nimport { GeoPoint } from '../interface/geo-point';\nimport { LayerTypes } from '../interface/layers';\nimport { MapOptions } from '../interface/map-options';\nimport { Padding } from '../interface/padding';\nimport { FitBoundsService } from '../services/fit-bounds';\nimport { MapsApiWrapper } from '../services/maps-api-wrapper';\n\n/**\n * NgMapsViewComponent 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 `map-view`.\n *\n * @example\n * <map-view [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\"></map-view>\n */\n@Component({\n  styles: [\n    `\n      .map-container-inner {\n        width: inherit;\n        height: inherit;\n      }\n\n      .map-content {\n        display: none;\n      }\n    `,\n  ],\n  template: `\n    <div class=\"map-container-inner\" #container></div>\n    <div class=\"map-content\">\n      <ng-content></ng-content>\n    </div>\n  `,\n  standalone: false,\n})\nexport class NgMapsViewComponent<T>\n  implements OnChanges, OnInit, OnDestroy, MapOptions\n{\n  constructor(\n    protected _mapsWrapper: MapsApiWrapper<T>,\n    protected _fitBoundsService: FitBoundsService,\n    protected _zone: NgZone,\n  ) {}\n\n  /**\n   * Map option attributes that can change over time\n   */\n  private static _mapOptionsAttributes: Array<string> = [\n    'disableDoubleClickZoom',\n    'scrollwheel',\n    'draggable',\n    'draggableCursor',\n    'draggingCursor',\n    'keyboardShortcuts',\n    'zoomControl',\n    'zoomControlOptions',\n    'styles',\n    'streetViewControl',\n    'streetViewControlOptions',\n    'zoom',\n    'mapTypeControl',\n    'mapTypeControlOptions',\n    'minZoom',\n    'maxZoom',\n    'panControl',\n    'panControlOptions',\n    'rotateControl',\n    'rotateControlOptions',\n    'fullscreenControl',\n    'fullscreenControlOptions',\n    'scaleControl',\n    'scaleControlOptions',\n    'mapTypeId',\n    'clickableIcons',\n    'gestureHandling',\n    'tilt',\n  ];\n  /**\n   * The longitude that defines the center of the map.\n   */\n  @Input() public longitude: number = 0;\n\n  /**\n   * The latitude that defines the center of the map.\n   */\n  @Input() public latitude: number = 0;\n\n  /**\n   * The zoom level of the map. The default zoom level is 8.\n   */\n  @Input() public zoom: number = 8;\n\n  /**\n   * The minimal zoom level of the map allowed. When not provided, no restrictions to the zoom level\n   * are enforced.\n   */\n  @Input() public minZoom?: number;\n\n  /**\n   * The maximal zoom level of the map allowed. When not provided, no restrictions to the zoom level\n   * are enforced.\n   */\n  @Input() public maxZoom?: number;\n\n  /**\n   * Enables/disables if map is draggable.\n   */\n  @Input() public draggable: boolean = true;\n\n  /**\n   * Enables/disables zoom and center on double click. Enabled by default.\n   */\n  @Input() public disableDoubleClickZoom: boolean = false;\n\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  @Input() public disableDefaultUI: boolean = false;\n\n  /**\n   * If false, disables scrollwheel zooming on the map. The scrollwheel is enabled by default.\n   */\n  @Input() public scrollwheel: boolean = true;\n\n  /**\n   * Color used for the background of the Map div. This color will be visible when tiles have not\n   * yet loaded as the user pans. This option can only be set when the map is initialized.\n   */\n  @Input() public backgroundColor?: string;\n\n  /**\n   * The name or url of the cursor to display when mousing over a draggable map. This property uses\n   * the css  * cursor attribute to change the icon. As with the css property, you must specify at\n   * least one fallback cursor that is not a URL. For example:\n   * [draggableCursor]=\"'url(http://www.example.com/icon.png), auto;'\"\n   */\n  @Input() public draggableCursor?: string;\n\n  /**\n   * The name or url of the cursor to display when the map is being dragged. This property uses the\n   * css cursor attribute to change the icon. As with the css property, you must specify at least\n   * one fallback cursor that is not a URL. For example:\n   * [draggingCursor]=\"'url(http://www.example.com/icon.png), auto;'\"\n   */\n  @Input() public draggingCursor?: string;\n\n  /**\n   * If false, prevents the map from being controlled by the keyboard. Keyboard shortcuts are\n   * enabled by default.\n   */\n  @Input() public keyboardShortcuts: boolean = true;\n\n  /**\n   * The enabled/disabled state of the Zoom control.\n   */\n  @Input() public zoomControl: boolean = true;\n\n  /**\n   * Options for the Zoom control.\n   */\n  @Input() public zoomControlOptions?: google.maps.ZoomControlOptions;\n\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  @Input() public styles: Array<google.maps.MapTypeStyle> = [];\n\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  @Input() public usePanning: boolean = false;\n\n  /**\n   * The initial enabled/disabled state of the Street View Pegman control.\n   * This control is part of the default UI, and should be set to false when displaying a map type\n   * on which the Street View road overlay should not appear (e.g. a non-Earth map type).\n   */\n  @Input() public streetViewControl?: boolean;\n\n  /**\n   * Options for the Street View control.\n   */\n  @Input()\n  public streetViewControlOptions?: google.maps.StreetViewControlOptions;\n\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 NgMapsFitBounds} directive.\n   */\n  @Input() public fitBounds: BoundsLiteral | boolean = false;\n\n  /**\n   * Padding amount for bounds. This optional parameter is undefined by default.\n   */\n  @Input() public boundsPadding?: number | Padding;\n\n  /**\n   * The initial enabled/disabled state of the Scale control. This is disabled by default.\n   */\n  @Input() public scaleControl: boolean = true;\n\n  /**\n   * Options for the scale control.\n   */\n  @Input() public scaleControlOptions?: google.maps.ScaleControlOptions;\n\n  /**\n   * The initial enabled/disabled state of the Map type control.\n   */\n  @Input() public mapTypeControl: boolean = true;\n\n  /**\n   * Options for the Map type control.\n   */\n  @Input() public mapTypeControlOptions?: google.maps.MapTypeControlOptions;\n\n  /**\n   * The initial enabled/disabled state of the Pan control.\n   */\n  @Input() public panControl: boolean = false;\n\n  /**\n   * Options for the Pan control.\n   */\n  @Input() public panControlOptions?: google.maps.PanControlOptions;\n\n  /**\n   * The initial enabled/disabled state of the Rotate control.\n   */\n  @Input() public rotateControl: boolean = false;\n\n  /**\n   * Options for the Rotate control.\n   */\n  @Input() public rotateControlOptions?: google.maps.RotateControlOptions;\n\n  /**\n   * The initial enabled/disabled state of the Fullscreen control.\n   */\n  @Input() public fullscreenControl: boolean = false;\n\n  /**\n   * Options for the Fullscreen control.\n   */\n  @Input()\n  public fullscreenControlOptions?: google.maps.FullscreenControlOptions;\n\n  /**\n   * The map mapTypeId. Defaults to 'roadmap'.\n   */\n  @Input() public mapTypeId:\n    | 'roadmap'\n    | 'hybrid'\n    | 'satellite'\n    | 'terrain'\n    | string\n    | google.maps.MapTypeId = 'roadmap';\n\n  /**\n   * Add layers https://developers.google.com/maps/documentation/javascript/trafficlayer to map\n   */\n  @Input() public layers?: Array<LayerTypes> | LayerTypes;\n\n  private _layerInstance: Map<\n    LayerTypes,\n    | google.maps.TrafficLayer\n    | google.maps.TransitLayer\n    | google.maps.BicyclingLayer\n  > = new Map();\n\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  @Input() public clickableIcons: boolean = true;\n\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  @Input() public gestureHandling: 'cooperative' | 'greedy' | 'none' | 'auto' =\n    'auto';\n\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  @Input() public tilt: number = 0;\n\n  protected subscription: Subscription = new Subscription();\n  protected _fitBoundsSubscription?: Subscription;\n\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  @Output()\n  public mapClick: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\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  @Output()\n  public mapRightClick: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\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  @Output()\n  public mapDblClick: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\n  /**\n   * This event emitter is fired when the map center changes.\n   */\n  @Output()\n  public centerChange: EventEmitter<GeoPoint> = new EventEmitter<GeoPoint>();\n\n  /**\n   * This event is fired when the viewport bounds have changed.\n   */\n  @Output()\n  public boundsChange: EventEmitter<BoundsLiteral> =\n    new EventEmitter<BoundsLiteral>();\n\n  /**\n   * This event is fired when the mapTypeId property changes.\n   */\n  @Output()\n  public mapTypeIdChange: EventEmitter<google.maps.MapTypeId | string> =\n    new EventEmitter<google.maps.MapTypeId | string>();\n\n  /**\n   * This event is fired when the map becomes idle after panning or zooming.\n   */\n  @Output() public idle: EventEmitter<void> = new EventEmitter<void>();\n\n  /**\n   * This event is fired when the zoom level has changed.\n   */\n  @Output()\n  public zoomChange: EventEmitter<number> = new EventEmitter<number>();\n\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  @Output() public mapReady: EventEmitter<T> = new EventEmitter<T>();\n\n  /**\n   * This event is fired when the visible tiles have finished loading.\n   */\n  @Output() public tilesLoaded: EventEmitter<void> = new EventEmitter<void>();\n\n  @ViewChild('container', { static: true }) public container?: ElementRef;\n\n  /** @internal */\n  public ngOnInit() {\n    this._initMapInstance(this.container?.nativeElement);\n  }\n\n  protected async _initMapInstance(el: HTMLElement) {\n    await this._mapsWrapper.createMap(\n      el,\n      { lat: this.latitude || 0, lng: this.longitude || 0 },\n      {\n        zoom: this.zoom,\n        minZoom: this.minZoom,\n        maxZoom: this.maxZoom,\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        zoomControl: this.zoomControl,\n        zoomControlOptions: this.zoomControlOptions,\n        streetViewControl: this.streetViewControl,\n        streetViewControlOptions: this.streetViewControlOptions,\n        scaleControl: this.scaleControl,\n        scaleControlOptions: this.scaleControlOptions,\n        mapTypeControl: this.mapTypeControl,\n        mapTypeControlOptions: this.mapTypeControlOptions,\n        panControl: this.panControl,\n        panControlOptions: this.panControlOptions,\n        rotateControl: this.rotateControl,\n        rotateControlOptions: this.rotateControlOptions,\n        fullscreenControl: this.fullscreenControl,\n        fullscreenControlOptions: this.fullscreenControlOptions,\n        mapTypeId: this.mapTypeId as google.maps.MapTypeId,\n        clickableIcons: this.clickableIcons,\n        gestureHandling: this.gestureHandling,\n        tilt: this.tilt,\n      },\n    );\n    const map = await this._mapsWrapper.getNativeMap();\n    this.mapReady.emit(map);\n\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  }\n\n  protected _handleIdleEvent() {\n    throw new Error('Method not implemented.');\n  }\n\n  protected _handleTilesLoadedEvent() {\n    throw new Error('Method not implemented.');\n  }\n\n  protected _handleMapTypeIdChange() {\n    throw new Error('Method not implemented.');\n  }\n\n  protected _handleBoundsChange() {\n    throw new Error('Method not implemented.');\n  }\n\n  protected _handleMapMouseEvents() {\n    throw new Error('Method not implemented.');\n  }\n\n  protected _handleMapZoomChange() {\n    throw new Error('Method not implemented.');\n  }\n\n  protected _handleMapCenterChange() {\n    throw new Error('Method not implemented.');\n  }\n\n  /** @internal */\n  public ngOnDestroy() {\n    // unsubscribe all registered observable subscriptions\n    this.subscription.unsubscribe();\n\n    // remove all listeners from the map instance\n    this._mapsWrapper.clearInstanceListeners();\n    if (this._fitBoundsSubscription) {\n      this._fitBoundsSubscription.unsubscribe();\n    }\n  }\n\n  /* @internal */\n  public ngOnChanges(changes: SimpleChanges) {\n    this._updateMapOptionsChanges(changes);\n    this._updatePosition(changes);\n    this._layerChanges(changes);\n  }\n\n  protected _updateMapOptionsChanges(changes: SimpleChanges) {\n    const options: SimpleChanges = {};\n    const optionKeys = Object.keys(changes).filter((k) =>\n      NgMapsViewComponent._mapOptionsAttributes.includes(k),\n    );\n    optionKeys.forEach((k) => {\n      options[k] = changes[k].currentValue;\n    });\n    return this._mapsWrapper.setMapOptions(options);\n  }\n\n  /**\n   * @todo google specific\n   * @param changes\n   * @protected\n   */\n  protected async _layerChanges(changes: SimpleChanges) {\n    if (changes.layers) {\n      const map = await this._mapsWrapper.getNativeMap();\n      const layers = Array.isArray(this.layers) ? this.layers : [this.layers];\n      layers.forEach((layer) => {\n        if (layer && !this._layerInstance.has(layer)) {\n          const i:\n            | google.maps.TrafficLayer\n            | google.maps.TransitLayer\n            | google.maps.BicyclingLayer = new google.maps[layer]();\n          // @todo typings\n          i.setMap(map as any as google.maps.Map);\n          this._layerInstance.set(layer, i);\n        }\n      });\n      Array.from(this._layerInstance.keys()).forEach((layer) => {\n        if (!layers.includes(layer)) {\n          const i = this._layerInstance.get(layer);\n          i?.setMap(null);\n          this._layerInstance.delete(layer);\n        }\n      });\n    }\n  }\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  public triggerResize(recenter: boolean = true): Promise<void> {\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<void>((resolve) => {\n      setTimeout(async () => {\n        await this._mapsWrapper.triggerMapEvent('resize');\n        if (recenter) {\n          this.fitBounds != null ? this._fitBounds() : this._setCenter();\n        }\n        resolve();\n      });\n    });\n  }\n\n  protected async _updatePosition(changes: SimpleChanges) {\n    if (\n      changes.latitude == null &&\n      changes.longitude == null &&\n      !changes.fitBounds\n    ) {\n      // no position update needed\n      return;\n    }\n\n    // we prefer fitBounds in changes\n    if ('fitBounds' in changes) {\n      await this._fitBounds();\n      return;\n    }\n    if (typeof this.latitude === 'string') {\n      this.latitude = parseFloat(this.latitude);\n    }\n    if (typeof this.longitude === 'string') {\n      this.longitude = parseFloat(this.longitude);\n    }\n    const center = await this._mapsWrapper.getCenter();\n    if (\n      !(\n        typeof this.latitude !== 'number' || typeof this.longitude !== 'number'\n      ) &&\n      this.latitude !== center?.lat &&\n      this.longitude !== center?.lng\n    ) {\n      await this._setCenter();\n      return;\n    }\n  }\n\n  protected _setCenter() {\n    const newCenter = {\n      lat: this.latitude,\n      lng: this.longitude,\n    };\n    if (this.usePanning) {\n      return this._mapsWrapper.panTo(newCenter);\n    } else {\n      return this._mapsWrapper.setCenter(newCenter);\n    }\n  }\n\n  protected async _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        return this._updateBounds(this.fitBounds);\n    }\n  }\n\n  protected _subscribeToFitBoundsUpdates() {\n    this._zone.runOutsideAngular(() => {\n      this._fitBoundsSubscription = this._fitBoundsService\n        .getBounds$()\n        .subscribe((b) => this._zone.run(() => this._updateBounds(b)));\n    });\n  }\n\n  protected async _updateBounds(bounds: BoundsLiteral) {\n    if (bounds != null) {\n      /**\n       * await map to not update bounds till map is initialized\n       */\n      await this._mapsWrapper.getNativeMap();\n      if (this.usePanning) {\n        return this._mapsWrapper.panToBounds(bounds, this.boundsPadding);\n      } else {\n        return this._mapsWrapper.fitBounds(bounds, this.boundsPadding);\n      }\n    }\n  }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { NgMapsMarkerComponent } from '../../directives/marker';\nimport { MapsApiWrapper } from '../maps-api-wrapper';\n\n@Injectable()\nexport abstract class MarkerManager<T = any> {\n  protected _markers: Map<NgMapsMarkerComponent, T> = new Map<\n    NgMapsMarkerComponent,\n    T\n  >();\n\n  constructor(\n    protected _mapsWrapper: MapsApiWrapper,\n    protected _zone: NgZone,\n  ) {}\n\n  public abstract deleteMarker(marker: NgMapsMarkerComponent): void;\n\n  public abstract updateMarkerPosition(marker: NgMapsMarkerComponent): void;\n\n  public abstract updateTitle(marker: NgMapsMarkerComponent): void;\n\n  public abstract updateLabel(marker: NgMapsMarkerComponent): void;\n\n  public abstract updateDraggable(marker: NgMapsMarkerComponent): void;\n\n  public abstract updateIconLegacy(marker: NgMapsMarkerComponent): void;\n  public abstract updateIcon(marker: NgMapsMarkerComponent): void;\n\n  public abstract updateOpacity(marker: NgMapsMarkerComponent): void;\n\n  public abstract updateVisible(marker: NgMapsMarkerComponent): void;\n\n  public abstract updateZIndex(marker: NgMapsMarkerComponent): void;\n\n  public abstract updateClickable(marker: NgMapsMarkerComponent): void;\n\n  public abstract updateAnimation(marker: NgMapsMarkerComponent): void;\n\n  public async addMarker(marker: NgMapsMarkerComponent): Promise<void> {\n    if (\n      typeof marker.latitude !== 'number' ||\n      typeof marker.longitude !== 'number'\n    ) {\n      return;\n    }\n    const m = await this._mapsWrapper.createMarker(\n      { lat: marker.latitude, lng: marker.longitude },\n      // TODO typings\n      {\n        label: marker.label,\n        draggable: marker.draggable,\n        icon: marker.icon ?? marker.iconUrl,\n        opacity: marker.opacity,\n        optimized: marker.optimized,\n        visible: marker.visible,\n        zIndex: marker.zIndex,\n        title: marker.title,\n        clickable: marker.clickable,\n        animation:\n          typeof marker.animation === 'string'\n            ? google.maps.Animation[marker.animation]\n            : marker.animation,\n      } as any,\n    );\n    this._markers.set(marker, m);\n  }\n\n  public getNativeMarker(marker: NgMapsMarkerComponent): T | undefined {\n    return this._markers.get(marker);\n  }\n\n  public abstract createEventObservable<E>(\n    eventName: string | Array<string>,\n    marker: NgMapsMarkerComponent,\n  ): Observable<E>;\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { NgMapsInfoWindowComponent } from '../../directives/info-window';\nimport { MapsApiWrapper } from '../maps-api-wrapper';\n\nimport { MarkerManager } from './marker.manager';\n\n@Injectable()\nexport abstract class InfoWindowManager<T> {\n  protected _infoWindows: Map<NgMapsInfoWindowComponent, T> = new Map();\n\n  constructor(\n    protected _mapsWrapper: MapsApiWrapper,\n    protected _zone: NgZone,\n    protected _markerManager: MarkerManager,\n  ) {}\n\n  public abstract deleteInfoWindow(\n    infoWindow: NgMapsInfoWindowComponent,\n  ): Promise<void>;\n\n  public abstract setPosition(infoWindow: NgMapsInfoWindowComponent): void;\n\n  public abstract setZIndex(infoWindow: NgMapsInfoWindowComponent): void;\n\n  public abstract open(\n    infoWindow: NgMapsInfoWindowComponent,\n    event?: any,\n  ): Promise<void>;\n\n  public abstract close(infoWindow: NgMapsInfoWindowComponent): void;\n\n  public abstract setOptions(\n    infoWindow: NgMapsInfoWindowComponent,\n    options: google.maps.InfoWindowOptions,\n  ): Promise<void> | void;\n\n  public abstract addInfoWindow(\n    infoWindow: NgMapsInfoWindowComponent,\n  ): Promise<void>;\n\n  /**\n   * Creates a Google Maps event listener for the given InfoWindow as an Observable\n   */\n  public abstract createEventObservable<E>(\n    eventName: string,\n    infoWindow: NgMapsInfoWindowComponent,\n  ): Observable<E>;\n}\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\n\nimport { InfoWindowManager } from '../services/managers/info-window.manager';\n\nimport { NgMapsMarkerComponent } from './marker';\n\nlet infoWindowId = 0;\n\n/**\n * NgMapsInfoWindowComponent renders a info window inside a {@link NgMapsMarkerComponent} or standalone.\n *\n * ### Example\n * ```typescript\n * import { Component } from '@angular/core';\n *\n * @Component({\n *  selector: 'my-map-cmp',\n *  styles: [`\n *    map-view {\n *      height: 300px;\n *    }\n * `],\n *  template: `\n *    <map-view [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\">\n *      <map-marker [latitude]=\"lat\" [longitude]=\"lng\" [label]=\"'M'\">\n *        <map-info-window [disableAutoPan]=\"true\">\n *          Hi, this is the content of the <strong>info window</strong>\n *        </map-info-window>\n *      </map-marker>\n *    </map-view>\n *  `\n * })\n * ```\n */\n@Component({\n  selector: 'map-info-window',\n  template: `\n    <div class=\"info-window-content\" #content>\n      <ng-content></ng-content>\n    </div>\n  `,\n  standalone: false,\n})\nexport class NgMapsInfoWindowComponent implements OnDestroy, OnChanges, OnInit {\n  // @todo how to add correct typings?\n  constructor(\n    protected _infoWindowManager: InfoWindowManager<any>,\n    public readonly elementRef: ElementRef<HTMLElement>,\n  ) {}\n\n  private static _infoWindowOptionsInputs: Array<string> = [\n    'disableAutoPan',\n    'maxWidth',\n  ];\n  /**\n   * The latitude position of the info window (only usefull if you use it ouside of a {@link\n   * NgMapsMarkerComponent}).\n   */\n  @Input() public latitude?: number;\n\n  /**\n   * The longitude position of the info window (only usefull if you use it ouside of a {@link\n   * NgMapsMarkerComponent}).\n   */\n  @Input() public longitude?: number;\n\n  /**\n   * Disable auto-pan on open. By default, the info window will pan the map so that it is fully\n   * visible when it opens.\n   */\n  @Input() public disableAutoPan?: boolean;\n\n  /**\n   * All InfoWindows are displayed on the map in order of their zIndex, with higher values\n   * displaying in front of InfoWindows with lower values. By default, InfoWindows are displayed\n   * according to their latitude, with InfoWindows of lower latitudes appearing in front of\n   * InfoWindows at higher latitudes. InfoWindows are always displayed in front of markers.\n   */\n  @Input() public zIndex?: number;\n\n  /**\n   * Maximum width of the infowindow, regardless of content's width. This value is only considered\n   * if it is set before a call to open. To change the maximum width when changing content, call\n   * close, update maxWidth, and then open.\n   */\n  @Input() public maxWidth?: number;\n\n  /**\n   * Holds the marker that is the host of the info window (if available)\n   */\n  public hostMarker?: NgMapsMarkerComponent;\n\n  /**\n   * Holds the native element that is used for the info window content.\n   */\n  @ViewChild('content', { static: true })\n  public content?: ElementRef;\n\n  /**\n   * Sets the open state for the InfoWindow. You can also call the open() and close() methods.\n   */\n  @Input() public isOpen: boolean = false;\n\n  /**\n   * Emits an event when the info window is closed.\n   */\n  @Output()\n  public infoWindowClose: EventEmitter<void> = new EventEmitter<void>();\n  private _infoWindowAddedToManager: boolean = false;\n  private _id: string = (infoWindowId++).toString();\n\n  public ngOnInit() {\n    this._infoWindowManager.addInfoWindow(this).then(() => {\n      this._infoWindowAddedToManager = true;\n      this._updateOpenState();\n      this._registerEventListeners();\n    });\n  }\n\n  /** @internal */\n  public ngOnChanges(changes: SimpleChanges) {\n    if (!this._infoWindowAddedToManager) {\n      return;\n    }\n    if (\n      (changes.latitude || changes.longitude) &&\n      typeof this.latitude === 'number' &&\n      typeof this.longitude === 'number'\n    ) {\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\n  private _registerEventListeners() {\n    this._infoWindowManager\n      .createEventObservable('closeclick', this)\n      .subscribe(() => {\n        this.isOpen = false;\n        this.infoWindowClose.emit();\n      });\n  }\n\n  private _updateOpenState() {\n    this.isOpen ? this.open() : this.close();\n  }\n\n  private _setInfoWindowOptions(changes: SimpleChanges) {\n    const options: SimpleChanges = {};\n    const optionKeys = Object.keys(changes).filter((k) =>\n      NgMapsInfoWindowComponent._infoWindowOptionsInputs.includes(k),\n    );\n    optionKeys.forEach((k) => {\n      options[k] = changes[k].currentValue;\n    });\n    this._infoWindowManager.setOptions(this, options);\n  }\n\n  /**\n   * Opens the info window.\n   */\n  public open(event?: any): Promise<void> {\n    return this._infoWindowManager.open(this, event);\n  }\n\n  /**\n   * Closes the info window.\n   */\n  public async close(): Promise<void> {\n    await this._infoWindowManager.close(this);\n    return this.infoWindowClose.emit();\n  }\n\n  /** @internal */\n  public id(): string {\n    return this._id;\n  }\n\n  /** @internal */\n  public toString(): string {\n    return `NgMapsInfoWindowComponent-${this._id.toString()}`;\n  }\n\n  /** @internal */\n  public ngOnDestroy() {\n    this._infoWindowManager.deleteInfoWindow(this);\n  }\n}\n","import {\n  AfterContentInit,\n  Component,\n  ContentChildren,\n  EventEmitter,\n  forwardRef,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  QueryList,\n  SimpleChange,\n} from '@angular/core';\nimport { Observable, ReplaySubject, Subscription } from 'rxjs';\n\nimport { MarkerIcon } from '../interface/marker-icon';\nimport { MarkerOptions } from '../interface/marker-options';\nimport { FitBoundsAccessor, FitBoundsDetails } from '../services/fit-bounds';\nimport { MarkerManager } from '../services/managers/marker.manager';\n\nimport { NgMapsInfoWindowComponent } from './info-window';\n\nlet markerId = 0;\n\n/**\n * NgMapsMarkerComponent renders a map marker inside a {@link NgMapsViewComponent}.\n *\n * @example\n * <agm-map [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\">\n *               <agm-marker [latitude]=\"lat\" [longitude]=\"lng\" label=\"M\"></agm-marker>\n * </agm-map>\n */\n@Component({\n  selector: 'map-marker',\n  providers: [\n    {\n      provide: FitBoundsAccessor,\n      useExisting: forwardRef(() => NgMapsMarkerComponent),\n    },\n  ],\n  // eslint-disable-next-line @angular-eslint/no-inputs-metadata-property\n  inputs: [\n    'latitude',\n    'longitude',\n    'title',\n    'label',\n    // eslint-disable-next-line @angular-eslint/no-input-rename\n    'draggable: markerDraggable',\n    'iconUrl',\n    'icon',\n    'openInfoWindow',\n    'opacity',\n    'optimized',\n    'visible',\n    'zIndex',\n    'animation',\n  ],\n  // eslint-disable-next-line @angular-eslint/no-outputs-metadata-property\n  outputs: [\n    'markerClick',\n    'dragStart',\n    // eslint-disable-next-line @angular-eslint/no-output-native\n    'drag',\n    'dragEnd',\n    'mouseOver',\n    'mouseOut',\n  ],\n  template: '<ng-content></ng-content>',\n  standalone: false,\n})\nexport class NgMapsMarkerComponent\n  implements\n    OnDestroy,\n    OnChanges,\n    AfterContentInit,\n    FitBoundsAccessor,\n    MarkerOptions\n{\n  /**\n   * The latitude position of the marker.\n   */\n  @Input() public latitude?: number;\n\n  /**\n   * The longitude position of the marker.\n   */\n  @Input() public longitude?: number;\n\n  /**\n   * The title of the marker.\n   */\n  @Input() public title?: string;\n\n  /**\n   * The label (a single uppercase character) for the marker.\n   */\n  @Input() public label?: string | google.maps.MarkerLabel;\n\n  /**\n   * If true, the marker can be dragged. Default value is false.\n   */\n  // eslint-disable-next-line @angular-eslint/no-input-rename\n  @Input('markerDraggable') public draggable: boolean = false;\n\n  /**\n   * Icon (the URL of the image) for the foreground.\n   * Can also be a MarkerIcon (google.maps.Icon in Google Maps Javascript api)\n   *\n   * @see <a href=\"https://developers.google.com/maps/documentation/javascript/reference/marker#Icon\">google.maps.Icon</a>\n   */\n  @Input() public iconUrl?: string | google.maps.Icon;\n\n  @Input() public icon:\n    | MarkerIcon\n    | string\n    | google.maps.Icon\n    | null\n    | undefined\n    | google.maps.Symbol = null;\n\n  /**\n   * If true, the marker is visible\n   */\n  @Input() public visible: boolean = true;\n\n  /**\n   * Whether to automatically open the child info window when the marker is clicked.\n   */\n  @Input() public openInfoWindow: boolean = true;\n\n  /**\n   * The marker's opacity between 0.0 and 1.0.\n   */\n  @Input() public opacity: number = 1;\n\n  /**\n   * Marker optimize flag. If it is false then it prevent duplicate rendering.\n   * Default it is true\n   */\n  @Input() public optimized: boolean = true;\n\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  @Input() public zIndex: number = 1;\n\n  /**\n   * If true, the marker can be clicked. Default value is true.\n   */\n  // eslint-disable-next-line @angular-eslint/no-input-rename\n  @Input('markerClickable') public clickable: boolean = true;\n\n  /**\n   * Which animation to play when marker is added to a map.\n   * This can be 'BOUNCE' or 'DROP'\n   */\n  public animation?: 'BOUNCE' | 'DROP' | null;\n\n  /**\n   * This event emitter gets emitted when the user clicks on the marker.\n   */\n  @Output()\n  public markerClick: EventEmitter<NgMapsMarkerComponent> =\n    new EventEmitter<NgMapsMarkerComponent>();\n\n  /**\n   * This event is fired when the user rightclicks on the marker.\n   */\n  @Output()\n  public markerRightClick: EventEmitter<void> = new EventEmitter<void>();\n\n  /**\n   * This event is fired when the user starts dragging the marker.\n   */\n  @Output()\n  public dragStart: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\n  /**\n   * This event is repeatedly fired while the user drags the marker.\n   */\n  @Output()\n  // eslint-disable-next-line @angular-eslint/no-output-native\n  public drag: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\n  /**\n   * This event is fired when the user stops dragging the marker.\n   */\n  @Output()\n  public dragEnd: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\n  /**\n   * This event is fired when the user mouses over the marker.\n   */\n  @Output()\n  public mouseOver: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\n  /**\n   * This event is fired when the user mouses outside the marker.\n   */\n  @Output()\n  public mouseOut: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\n  /**\n   * @internal\n   */\n  @ContentChildren(NgMapsInfoWindowComponent)\n  public infoWindow: QueryList<NgMapsInfoWindowComponent> =\n    new QueryList<NgMapsInfoWindowComponent>();\n\n  private _markerAddedToManger: boolean = false;\n  private _id: string;\n  private subscription: Subscription = new Subscription();\n\n  protected readonly _fitBoundsDetails$: ReplaySubject<FitBoundsDetails> =\n    new ReplaySubject<FitBoundsDetails>(1);\n\n  constructor(private markerManager: MarkerManager) {\n    this._id = (markerId++).toString();\n  }\n\n  /**\n   *  @internal\n   */\n  public ngAfterContentInit() {\n    this.handleInfoWindowUpdate();\n    this.infoWindow.changes.subscribe(() => this.handleInfoWindowUpdate());\n  }\n\n  private 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\n  /**\n   * @internal\n   */\n  public ngOnChanges(changes: { [key: string]: SimpleChange }) {\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 (\n      typeof this.latitude !== 'number' ||\n      typeof this.longitude !== 'number'\n    ) {\n      return;\n    }\n    if (!this._markerAddedToManger) {\n      this.markerManager.addMarker(this).then(() => {\n        this._updateFitBoundsDetails();\n        this._markerAddedToManger = true;\n        this._addEventListeners();\n      });\n      return;\n    }\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.updateIconLegacy(this);\n    }\n    if (changes.icon) {\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  }\n\n  /**\n   * @internal\n   */\n  public getFitBoundsDetails$(): Observable<FitBoundsDetails> {\n    return this._fitBoundsDetails$.asObservable();\n  }\n\n  protected _updateFitBoundsDetails() {\n    if (this.latitude && this.longitude) {\n      this._fitBoundsDetails$.next({\n        latLng: { lat: this.latitude, lng: this.longitude },\n      });\n    }\n  }\n\n  protected _addEventListeners() {\n    const cs = this.markerManager\n      .createEventObservable(['click', 'pointerdown'], this)\n      .subscribe({\n        next: (event) => {\n          if (this.openInfoWindow) {\n            this.infoWindow.forEach((infoWindow) => infoWindow.open(event));\n          }\n          this.markerClick.emit(this);\n        },\n      });\n    this.subscription.add(cs);\n\n    const rc = this.markerManager\n      .createEventObservable('rightclick', this)\n      .subscribe(() => {\n        this.markerRightClick.emit();\n      });\n    this.subscription.add(rc);\n\n    const ds = this.markerManager\n      .createEventObservable<google.maps.MapMouseEvent>('dragstart', this)\n      .subscribe((e: google.maps.MapMouseEvent) => {\n        this.dragStart.emit(e);\n      });\n    this.subscription.add(ds);\n\n    const d = this.markerManager\n      .createEventObservable<google.maps.MapMouseEvent>('drag', this)\n      .subscribe((e: google.maps.MapMouseEvent) => {\n        this.drag.emit(e);\n      });\n    this.subscription.add(d);\n\n    const dragend = this.markerManager\n      .createEventObservable<google.maps.MapMouseEvent>('dragend', this)\n      .subscribe((e: google.maps.MapMouseEvent) => {\n        this.dragEnd.emit(e);\n      });\n    this.subscription.add(dragend);\n\n    const mouseover = this.markerManager\n      .createEventObservable<google.maps.MapMouseEvent>(\n        ['mouseover', 'pointerenter'],\n        this,\n      )\n      .subscribe((e: google.maps.MapMouseEvent) => {\n        this.mouseOver.emit(e);\n      });\n    this.subscription.add(mouseover);\n\n    const mouseout = this.markerManager\n      .createEventObservable<google.maps.MapMouseEvent>(\n        ['mouseout', 'pointerleave'],\n        this,\n      )\n      .subscribe((e: google.maps.MapMouseEvent) => {\n        this.mouseOut.emit(e);\n      });\n    this.subscription.add(mouseout);\n  }\n\n  /** @internal */\n  public id(): string {\n    return this._id;\n  }\n\n  /** @internal */\n  public toString(): string {\n    return `NgMapsMarker-${this._id}`;\n  }\n\n  /** @internal */\n  public ngOnDestroy() {\n    this.markerManager.deleteMarker(this);\n    // unsubscribe all registered observable subscription\n    this.subscription.unsubscribe();\n  }\n}\n","import {\n  Directive,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Self,\n  SimpleChanges,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\nimport {\n  FitBoundsAccessor,\n  FitBoundsDetails,\n  FitBoundsService,\n} from '../services/fit-bounds';\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 *\n * @example\n * <map-marker [mapFitBounds]=\"true\"></map-marker>\n */\n@Directive({\n  selector: '[mapFitBounds]',\n  standalone: false,\n})\nexport class NgMapsFitBoundsDirective implements OnInit, OnDestroy, OnChanges {\n  /**\n   * If the value is true, the element gets added to the bounds of the map.\n   * Default: true.\n   */\n  @Input() public mapFitBounds: boolean = true;\n\n  private _latestFitBoundsDetails: FitBoundsDetails | null = null;\n  private subscription: Subscription = new Subscription();\n\n  constructor(\n    @Self() private readonly _fitBoundsAccessor: FitBoundsAccessor,\n    private readonly _fitBoundsService: FitBoundsService,\n  ) {}\n\n  /**\n   * @internal\n   */\n  public ngOnChanges(changes: SimpleChanges) {\n    this._updateBounds();\n  }\n\n  /**\n   * @internal\n   */\n  public ngOnInit() {\n    this.subscription.add(\n      this._fitBoundsAccessor\n        .getFitBoundsDetails$()\n        .pipe(\n          distinctUntilChanged(\n            (x: FitBoundsDetails, y: FitBoundsDetails) =>\n              x.latLng.lat === y.latLng.lat && x.latLng.lng === y.latLng.lng,\n          ),\n        )\n        .subscribe({\n          next: (details) => this._updateBounds(details),\n          complete: () => this._updateBounds(),\n        }),\n    );\n  }\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  private _updateBounds(newFitBoundsDetails?: FitBoundsDetails) {\n    // either visibility will change, or location, so remove the old one anyway\n    if (this._latestFitBoundsDetails) {\n      this._fitBoundsService.removeFromBounds(\n        this._latestFitBoundsDetails.latLng,\n      );\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\n    if (newFitBoundsDetails) {\n      this._latestFitBoundsDetails = newFitBoundsDetails;\n    }\n    if (this._latestFitBoundsDetails) {\n      if (this.mapFitBounds === true) {\n        this._fitBoundsService.addToBounds(this._latestFitBoundsDetails.latLng);\n      } else {\n        this._fitBoundsService.removeFromBounds(\n          this._latestFitBoundsDetails.latLng,\n        );\n      }\n    }\n  }\n\n  /**\n   * @internal\n   */\n  public ngOnDestroy() {\n    this.subscription.unsubscribe();\n    if (this._latestFitBoundsDetails !== null) {\n      this._fitBoundsService.removeFromBounds(\n        this._latestFitBoundsDetails.latLng,\n      );\n    }\n  }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { NgMapsCircleDirective } from '../../directives/circle';\nimport { BoundsLiteral } from '../../interface/bounds';\nimport { CircleOptions } from '../../interface/circle-options';\nimport { GeoPoint } from '../../interface/geo-point';\nimport { MapsApiWrapper } from '../maps-api-wrapper';\n\n@Injectable()\nexport abstract class CircleManager<T = any> {\n  protected _circles: Map<NgMapsCircleDirective, Promise<T>> = new Map<\n    NgMapsCircleDirective,\n    Promise<T>\n  >();\n\n  constructor(protected _apiWrapper: MapsApiWrapper, protected _zone: NgZone) {}\n\n  /**\n   * @param circle\n   */\n  public abstract addCircle(\n    circle: NgMapsCircleDirective,\n  ): Promise<void> | void;\n\n  /**\n   * Removes the given circle from the map.\n   */\n  public abstract removeCircle(circle: NgMapsCircleDirective): Promise<void>;\n  /**\n   * @todo check how to improve type casting\n   * @param circle instance of {@link NgMapsCircleDirective}\n   * @param options options for the circle\n   */\n  public abstract setOptions(\n    circle: NgMapsCircleDirective,\n    options: CircleOptions,\n  ): Promise<void>;\n\n  public abstract getBounds(\n    circle: NgMapsCircleDirective,\n  ): Promise<BoundsLiteral | null>;\n\n  public abstract getCenter(\n    circle: NgMapsCircleDirective,\n  ): Promise<GeoPoint | null>;\n\n  public abstract getRadius(\n    circle: NgMapsCircleDirective,\n  ): Promise<number | null>;\n\n  public abstract setCenter(circle: NgMapsCircleDirective): Promise<void>;\n\n  public abstract setEditable(circle: NgMapsCircleDirective): Promise<void>;\n\n  public abstract setDraggable(circle: NgMapsCircleDirective): Promise<void>;\n\n  public abstract setVisible(circle: NgMapsCircleDirective): Promise<void>;\n\n  public abstract setRadius(circle: NgMapsCircleDirective): Promise<void>;\n\n  public abstract createEventObservable<E>(\n    eventName: string,\n    circle: NgMapsCircleDirective,\n  ): Observable<E>;\n}\n","import {\n  Directive,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChange,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { BoundsLiteral } from '../interface/bounds';\nimport { CircleOptions } from '../interface/circle-options';\nimport { GeoPoint } from '../interface/geo-point';\nimport { CircleManager } from '../services/managers/circle-manager';\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: 'map-circle',\n  standalone: false,\n})\nexport class NgMapsCircleDirective\n  implements OnInit, OnChanges, OnDestroy, CircleOptions\n{\n  constructor(private _manager: CircleManager) {}\n\n  private static _mapOptions: Array<string> = [\n    'fillColor',\n    'fillOpacity',\n    'strokeColor',\n    'strokeOpacity',\n    'strokePosition',\n    'strokeWeight',\n    'visible',\n    'zIndex',\n    'clickable',\n  ];\n  /**\n   * The latitude position of the circle (required).\n   */\n  @Input() public latitude?: number;\n\n  /**\n   * The clickable position of the circle (required).\n   */\n  @Input() public longitude?: number;\n\n  /**\n   * Indicates whether this Circle handles mouse events. Defaults to true.\n   */\n  @Input() public clickable: boolean = true;\n\n  /**\n   * If set to true, the user can drag this circle over the map. Defaults to false.\n   */\n  @Input() public draggable: boolean = false;\n\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  @Input() public editable: boolean = false;\n\n  /**\n   * The fill color. All CSS3 colors are supported except for extended named colors.\n   */\n  @Input() public fillColor?: string;\n\n  /**\n   * The fill opacity between 0.0 and 1.0.\n   */\n  @Input() public fillOpacity?: number;\n\n  /**\n   * The radius in meters on the Earth's surface.\n   */\n  @Input() public radius: number = 0;\n\n  /**\n   * The stroke color. All CSS3 colors are supported except for extended named colors.\n   */\n  @Input() public strokeColor?: string;\n\n  /**\n   * The stroke opacity between 0.0 and 1.0\n   */\n  @Input() public strokeOpacity?: number;\n\n  /**\n   * The stroke position. Defaults to CENTER.\n   * This property is not supported on Internet Explorer 8 and earlier.\n   *\n   * @fixme\n   */\n  // @Input() strokePosition: google.maps.StrokePosition =\n  //   google.maps.StrokePosition.CENTER;\n\n  /**\n   * The stroke width in pixels.\n   */\n  @Input() public strokeWeight: number = 0;\n\n  /**\n   * Whether this circle is visible on the map. Defaults to true.\n   */\n  @Input() public visible: boolean = true;\n\n  /**\n   * The zIndex compared to other polys.\n   */\n  @Input() public zIndex?: number;\n\n  /**\n   * This event is fired when the circle's center is changed.\n   */\n  @Output()\n  public centerChange: EventEmitter<GeoPoint> = new EventEmitter<GeoPoint>();\n\n  /**\n   * This event emitter gets emitted when the user clicks on the circle.\n   */\n  @Output()\n  public circleClick: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\n  /**\n   * This event emitter gets emitted when the user clicks on the circle.\n   */\n  @Output()\n  public circleDblClick: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\n  /**\n   * This event is repeatedly fired while the user drags the circle.\n   */\n  @Output()\n  // eslint-disable-next-line @angular-eslint/no-output-native\n  public drag: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\n  /**\n   * This event is fired when the user stops dragging the circle.\n   */\n  @Output()\n  public dragEnd: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\n  /**\n   * This event is fired when the user starts dragging the circle.\n   */\n  @Output()\n  public dragStart: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\n  /**\n   * This event is fired when the DOM mousedown event is fired on the circle.\n   */\n  @Output()\n  public mouseDown: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\n  /**\n   * This event is fired when the DOM mousemove event is fired on the circle.\n   */\n  @Output()\n  public mouseMove: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\n  /**\n   * This event is fired on circle mouseout.\n   */\n  @Output()\n  public mouseOut: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\n  /**\n   * This event is fired on circle mouseover.\n   */\n  @Output()\n  public mouseOver: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\n  /**\n   * This event is fired when the DOM mouseup event is fired on the circle.\n   */\n  @Output()\n  public mouseUp: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\n  /**\n   * This event is fired when the circle's radius is changed.\n   */\n  @Output()\n  public radiusChange: EventEmitter<number> = new EventEmitter<number>();\n\n  /**\n   * This event is fired when the circle is right-clicked on.\n   */\n  @Output()\n  public rightClick: EventEmitter<google.maps.MapMouseEvent> =\n    new EventEmitter<google.maps.MapMouseEvent>();\n\n  private _circleAddedToManager: boolean = false;\n\n  private subscription: Subscription = new Subscription();\n\n  /** @internal */\n  public ngOnInit() {\n    this._manager.addCircle(this);\n    this._circleAddedToManager = true;\n    this._registerEventListeners();\n  }\n\n  /** @internal */\n  public ngOnChanges(changes: { [key: string]: SimpleChange }) {\n    if (!this._circleAddedToManager) {\n      return;\n    }\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    this._updateCircleOptionsChanges(changes);\n  }\n\n  private _updateCircleOptionsChanges(changes: {\n    [propName: string]: SimpleChange;\n  }) {\n    const options: { [propName: string]: any } = {};\n    const optionKeys = Object.keys(changes).filter(\n      (k) => NgMapsCircleDirective._mapOptions.indexOf(k) !== -1,\n    );\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\n  private _registerEventListeners() {\n    const events: Map<string, EventEmitter<any>> = new Map<\n      string,\n      EventEmitter<any>\n    >();\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\n    events.forEach((eventEmitter, eventName) => {\n      this.subscription.add(\n        this._manager\n          .createEventObservable<google.maps.MapMouseEvent>(eventName, this)\n          .subscribe((value) => {\n            switch (eventName) {\n              case 'radius_changed':\n                this._manager\n                  .getRadius(this)\n                  .then((radius) => eventEmitter.emit(radius));\n                break;\n              case 'center_changed':\n                this._manager.getCenter(this).then((center) =>\n                  eventEmitter.emit({\n                    ...center,\n                  }),\n                );\n                break;\n              default:\n                eventEmitter.emit(value);\n            }\n          }),\n      );\n    });\n  }\n\n  /** @internal */\n  public ngOnDestroy() {\n    this.subscription.unsubscribe();\n    this._manager.removeCircle(this);\n  }\n\n  /**\n   * Gets the LatLngBounds of this Circle.\n   */\n  public async getBounds(): Promise<BoundsLiteral | null> {\n    return this._manager.getBounds(this);\n  }\n\n  public async getCenter(): Promise<GeoPoint | null> {\n    return this._manager.getCenter(this);\n  }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { NgMapsPolygonDirective } from '../../directives/polygon';\nimport { MapsApiWrapper } from '../maps-api-wrapper';\n\n@Injectable()\nexport abstract class PolygonManager<T = any> {\n  protected _polygons: Map<NgMapsPolygonDirective, Promise<T>> = new Map<\n    NgMapsPolygonDirective,\n    Promise<T>\n  >();\n\n  constructor(\n    protected _mapsWrapper: MapsApiWrapper,\n    protected _zone: NgZone,\n  ) {}\n\n  public abstract addPolygon(\n    path: NgMapsPolygonDirective,\n  ): Promise<void> | void;\n\n  public abstract updatePolygon(polygon: NgMapsPolygonDirective): Promise<void>;\n\n  public abstract setPolygonOptions(\n    path: NgMapsPolygonDirective,\n    options: { [propName: string]: any },\n  ): Promise<void>;\n\n  public abstract deletePolygon(paths: NgMapsPolygonDirective): Promise<void>;\n\n  public abstract createEventObservable<E>(\n    eventName: string,\n    path: NgMapsPolygonDirective,\n  ): Observable<E>;\n}\n","import {\n  AfterContentInit,\n  Directive,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { GeoPoint } from '../interface/geo-point';\nimport { PolygonManager } from '../services/managers/polygon.manager';\n\n/**\n * NgMapsPolygon renders a polygon on a {@link https://ng-maps.github.io/core/components/NgMapsViewComponent.html|NgMapsView}\n */\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: 'map-polygon',\n  standalone: false,\n})\nexport class NgMapsPolygonDirective\n  implements OnDestroy, OnChanges, AfterContentInit\n{\n  constructor(private _polygonManager: PolygonManager) {}\n\n  private static _polygonOptionsAttributes: Array<string> = [\n    'clickable',\n    'draggable',\n    'editable',\n    'fillColor',\n    'fillOpacity',\n    'geodesic',\n    'icon',\n    'map',\n    'paths',\n    'strokeColor',\n    'strokeOpacity',\n    'strokeWeight',\n    'visible',\n    'zIndex',\n    'draggable',\n    'editable',\n    'visible',\n  ];\n  /**\n   * Indicates whether this Polygon handles mouse events. Defaults to true.\n   */\n  @Input() public clickable: boolean = true;\n\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  // eslint-disable-next-line @angular-eslint/no-input-rename\n  @Input('polyDraggable') public draggable: boolean = false;\n\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  @Input() public editable: boolean = false;\n\n  /**\n   * The fill color. All CSS3 colors are supported except for extended\n   * named colors.\n   */\n  @Input() public fillColor?: string;\n\n  /**\n   * The fill opacity between 0.0 and 1.0\n   */\n  @Input() public fillOpacity?: number;\n\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  @Input() public geodesic: boolean = false;\n\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  @Input() public paths: Array<GeoPoint> | Array<Array<GeoPoint>> = [];\n\n  /**\n   * The stroke color. All CSS3 colors are supported except for extended\n   * named colors.\n   */\n  @Input() public strokeColor?: string;\n\n  /**\n   * The stroke opacity between 0.0 and 1.0\n   */\n  @Input() public strokeOpacity?: number;\n\n  /**\n   * The stroke width in pixels.\n   */\n  @Input() public strokeWeight?: number;\n\n  /**\n   * Whether this polygon is visible on the map. Defaults to true.\n   */\n  @Input() public visible?: boolean;\n\n  /**\n   * The zIndex compared to other polys.\n   */\n  @Input() public zIndex?: number;\n\n  /**\n   * This event is fired when the DOM click event is fired on the Polygon.\n   */\n  @Output()\n  public polyClick: EventEmitter<google.maps.PolyMouseEvent> =\n    new EventEmitter<google.maps.PolyMouseEvent>();\n\n  /**\n   * This event is fired when the DOM dblclick event is fired on the Polygon.\n   */\n  @Output()\n  public polyDblClick: EventEmitter<google.maps.PolyMouseEvent> =\n    new EventEmitter<google.maps.PolyMouseEvent>();\n\n  /**\n   * This event is repeatedly fired while the user drags the polygon.\n   */\n  @Output()\n  public polyDrag: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n  /**\n   * This event is fired when the user stops dragging the polygon.\n   */\n  @Output()\n  public polyDragEnd: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n  /**\n   * This event is fired when the user starts dragging the polygon.\n   */\n  @Output()\n  public polyDragStart: EventEmitter<MouseEvent> =\n    new EventEmitter<MouseEvent>();\n\n  /**\n   * This event is fired when the DOM mousedown event is fired on the Polygon.\n   */\n  @Output()\n  public polyMouseDown: EventEmitter<google.maps.PolyMouseEvent> =\n    new EventEmitter<google.maps.PolyMouseEvent>();\n\n  /**\n   * This event is fired when the DOM mousemove event is fired on the Polygon.\n   */\n  @Output()\n  public polyMouseMove: EventEmitter<google.maps.PolyMouseEvent> =\n    new EventEmitter<google.maps.PolyMouseEvent>();\n\n  /**\n   * This event is fired on Polygon mouseout.\n   */\n  @Output()\n  public polyMouseOut: EventEmitter<google.maps.PolyMouseEvent> =\n    new EventEmitter<google.maps.PolyMouseEvent>();\n\n  /**\n   * This event is fired on Polygon mouseover.\n   */\n  @Output()\n  public polyMouseOver: EventEmitter<google.maps.PolyMouseEvent> =\n    new EventEmitter<google.maps.PolyMouseEvent>();\n\n  /**\n   * This event is fired whe the DOM mouseup event is fired on the Polygon\n   */\n  @Output()\n  public polyMouseUp: EventEmitter<google.maps.PolyMouseEvent> =\n    new EventEmitter<google.maps.PolyMouseEvent>();\n\n  /**\n   * This even is fired when the Polygon is right-clicked on.\n   */\n  @Output()\n  public polyRightClick: EventEmitter<google.maps.PolyMouseEvent> =\n    new EventEmitter<google.maps.PolyMouseEvent>();\n\n  private _id?: string;\n  private _polygonAddedToManager: boolean = false;\n  private subscription: Subscription = new Subscription();\n\n  /** @internal */\n  public ngAfterContentInit() {\n    if (!this._polygonAddedToManager) {\n      this._init();\n    }\n  }\n\n  public ngOnChanges(changes: SimpleChanges): any {\n    if (!this._polygonAddedToManager) {\n      this._init();\n      return;\n    }\n\n    this._polygonManager.setPolygonOptions(\n      this,\n      this._updatePolygonOptions(changes),\n    );\n  }\n\n  private _init() {\n    this._polygonManager.addPolygon(this);\n    this._polygonAddedToManager = true;\n    this._addEventListeners();\n  }\n\n  private _addEventListeners() {\n    const handlers = [\n      {\n        name: 'click',\n        handler: (ev: google.maps.PolyMouseEvent) => this.polyClick.emit(ev),\n      },\n      {\n        name: 'dblclick',\n        handler: (ev: google.maps.PolyMouseEvent) => this.polyDblClick.emit(ev),\n      },\n      { name: 'drag', handler: (ev: MouseEvent) => this.polyDrag.emit(ev) },\n      {\n        name: 'dragend',\n        handler: (ev: MouseEvent) => this.polyDragEnd.emit(ev),\n      },\n      {\n        name: 'dragstart',\n        handler: (ev: MouseEvent) => this.polyDragStart.emit(ev),\n      },\n      {\n        name: 'mousedown',\n        handler: (ev: google.maps.PolyMouseEvent) =>\n          this.polyMouseDown.emit(ev),\n      },\n      {\n        name: 'mousemove',\n        handler: (ev: google.maps.PolyMouseEvent) =>\n          this.polyMouseMove.emit(ev),\n      },\n      {\n        name: 'mouseout',\n        handler: (ev: google.maps.PolyMouseEvent) => this.polyMouseOut.emit(ev),\n      },\n      {\n        name: 'mouseover',\n        handler: (ev: google.maps.PolyMouseEvent) =>\n          this.polyMouseOver.emit(ev),\n      },\n      {\n        name: 'mouseup',\n        handler: (ev: google.maps.PolyMouseEvent) => this.polyMouseUp.emit(ev),\n      },\n      {\n        name: 'rightclick',\n        handler: (ev: google.maps.PolyMouseEvent) =>\n          this.polyRightClick.emit(ev),\n      },\n    ];\n    handlers.forEach((obj) => {\n      const os = this._polygonManager\n        .createEventObservable(obj.name, this)\n        // FIXME\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        .subscribe(obj.handler);\n      this.subscription.add(os);\n    });\n  }\n\n  private _updatePolygonOptions(\n    changes: SimpleChanges,\n  ): google.maps.PolygonOptions {\n    return Object.keys(changes)\n      .filter(\n        (k) =>\n          NgMapsPolygonDirective._polygonOptionsAttributes.indexOf(k) !== -1,\n      )\n      .reduce((obj: any, k: string) => {\n        obj[k] = changes[k].currentValue;\n        return obj;\n      }, {});\n  }\n\n  /** @internal */\n  public id(): string | undefined {\n    return this._id;\n  }\n\n  /** @internal */\n  public ngOnDestroy() {\n    this._polygonManager.deletePolygon(this);\n    // unsubscribe all registered observable subscriptions\n    this.subscription.unsubscribe();\n  }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { NgMapsPolyline } from '../../directives/polyline';\nimport { NgMapsPolylinePoint } from '../../directives/polyline-point';\nimport { GeoPoint } from '../../interface/geo-point';\nimport { MapsApiWrapper } from '../maps-api-wrapper';\n\n@Injectable()\nexport abstract class PolylineManager<T = any> {\n  protected _polylines: Map<NgMapsPolyline, Promise<T>> = new Map<\n    NgMapsPolyline,\n    Promise<T>\n  >();\n\n  constructor(\n    protected _mapsWrapper: MapsApiWrapper,\n    protected _zone: NgZone,\n  ) {}\n\n  protected _convertPoints(line: NgMapsPolyline): Array<GeoPoint> {\n    return line._getPoints().map(\n      (point: NgMapsPolylinePoint) =>\n        ({\n          lat: point.latitude,\n          lng: point.longitude,\n        } as google.maps.LatLngLiteral),\n    );\n  }\n\n  public abstract addPolyline(line: NgMapsPolyline): Promise<void> | void;\n\n  public abstract updatePolylinePoints(line: NgMapsPolyline): Promise<void>;\n\n  public abstract setPolylineOptions(\n    line: NgMapsPolyline,\n    options: { [propName: string]: any },\n  ): Promise<void>;\n\n  public abstract deletePolyline(line: NgMapsPolyline): Promise<void>;\n\n  public abstract createEventObservable<E>(\n    eventName: string,\n    line: NgMapsPolyline,\n  ): Observable<E>;\n}\n","import {\n  Directive,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\n\n/**\n * NgMapsPolylinePoint represents one element of a polyline within a  {@link\n * NgMapsPolyline}\n */\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: 'map-polyline-point',\n  standalone: false,\n})\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class NgMapsPolylinePoint implements OnChanges {\n  /**\n   * The latitude position of the point.\n   */\n  @Input() public latitude?: number;\n\n  /**\n   * The longitude position of the point;\n   */\n  @Input() public longitude?: number;\n\n  /**\n   * This event emitter gets emitted when the position of the point changed.\n   */\n  @Output()\n  public positionChanged: EventEmitter<google.maps.LatLngLiteral> =\n    new EventEmitter<google.maps.LatLngLiteral>();\n\n  public ngOnChanges(changes: SimpleChanges): any {\n    if (changes.latitude || changes.longitude) {\n      const position: google.maps.LatLngLiteral = {\n        lat: changes.latitude ? changes.latitude.currentValue : this.latitude,\n        lng: changes.longitude\n          ? changes.longitude.currentValue\n          : this.longitude,\n      } as google.maps.LatLngLiteral;\n      this.positionChanged.emit(position);\n    }\n  }\n}\n","import {\n  AfterContentInit,\n  ContentChildren,\n  Directive,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  QueryList,\n  SimpleChanges,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { PolylineManager } from '../services/managers/polyline-manager';\n\nimport { NgMapsPolylinePoint } from './polyline-point';\n\nlet polylineId = 0;\n\n/**\n * NgMapsPolyline renders a polyline on a {@link https://ng-maps.github.io/core/components/NgMapsViewComponent.html|NgMapsView}\n */\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: 'map-polyline',\n  standalone: false,\n})\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class NgMapsPolyline implements OnDestroy, OnChanges, AfterContentInit {\n  constructor(private _polylineManager: PolylineManager) {\n    this._id = (polylineId++).toString();\n  }\n\n  private static _polylineOptionsAttributes: Array<string> = [\n    'draggable',\n    'editable',\n    'visible',\n    'geodesic',\n    'strokeColor',\n    'strokeOpacity',\n    'strokeWeight',\n    'zIndex',\n    'icons',\n  ];\n  /**\n   * Indicates whether this Polyline handles mouse events. Defaults to true.\n   */\n  @Input() public clickable: boolean = true;\n\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  // eslint-disable-next-line @angular-eslint/no-input-rename\n  @Input('polylineDraggable') public draggable: boolean = false;\n\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  @Input() public editable: boolean = false;\n\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  @Input() public geodesic: boolean = false;\n\n  /**\n   * The stroke color. All CSS3 colors are supported except for extended named colors.\n   */\n  @Input() public strokeColor?: string;\n\n  /**\n   * The stroke opacity between 0.0 and 1.0.\n   */\n  @Input() public strokeOpacity?: number;\n\n  /**\n   * The stroke width in pixels.\n   */\n  @Input() public strokeWeight?: number;\n\n  /**\n   * The icons to be rendered along the polyline.\n   */\n  @Input() public icons?: Array<google.maps.IconSequence>;\n\n  /**\n   * Whether this polyline is visible on the map. Defaults to true.\n   */\n  @Input() public visible: boolean = true;\n\n  /**\n   * The zIndex compared to other polys.\n   */\n  @Input() public zIndex?: number;\n\n  /**\n   * This event is fired when the DOM click event is fired on the Polyline.\n   */\n  @Output()\n  public lineClick: EventEmitter<google.maps.PolyMouseEvent> =\n    new EventEmitter<google.maps.PolyMouseEvent>();\n\n  /**\n   * This event is fired when the DOM dblclick event is fired on the Polyline.\n   */\n  @Output()\n  public lineDblClick: EventEmitter<google.maps.PolyMouseEvent> =\n    new EventEmitter<google.maps.PolyMouseEvent>();\n\n  /**\n   * This event is repeatedly fired while the user drags the polyline.\n   */\n  @Output()\n  public lineDrag: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n  /**\n   * This event is fired when the user stops dragging the polyline.\n   */\n  @Output()\n  public lineDragEnd: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n  /**\n   * This event is fired when the user starts dragging the polyline.\n   */\n  @Output()\n  public lineDragStart: EventEmitter<MouseEvent> =\n    new EventEmitter<MouseEvent>();\n\n  /**\n   * This event is fired when the DOM mousedown event is fired on the Polyline.\n   */\n  @Output()\n  public lineMouseDown: EventEmitter<google.maps.PolyMouseEvent> =\n    new EventEmitter<google.maps.PolyMouseEvent>();\n\n  /**\n   * This event is fired when the DOM mousemove event is fired on the Polyline.\n   */\n  @Output()\n  public lineMouseMove: EventEmitter<google.maps.PolyMouseEvent> =\n    new EventEmitter<google.maps.PolyMouseEvent>();\n\n  /**\n   * This event is fired on Polyline mouseout.\n   */\n  @Output()\n  public lineMouseOut: EventEmitter<google.maps.PolyMouseEvent> =\n    new EventEmitter<google.maps.PolyMouseEvent>();\n\n  /**\n   * This event is fired on Polyline mouseover.\n   */\n  @Output()\n  public lineMouseOver: EventEmitter<google.maps.PolyMouseEvent> =\n    new EventEmitter<google.maps.PolyMouseEvent>();\n\n  /**\n   * This event is fired whe the DOM mouseup event is fired on the Polyline\n   */\n  @Output()\n  public lineMouseUp: EventEmitter<google.maps.PolyMouseEvent> =\n    new EventEmitter<google.maps.PolyMouseEvent>();\n\n  /**\n   * This even is fired when the Polyline is right-clicked on.\n   */\n  @Output()\n  public lineRightClick: EventEmitter<google.maps.PolyMouseEvent> =\n    new EventEmitter<google.maps.PolyMouseEvent>();\n\n  /**\n   * @internal\n   */\n  @ContentChildren(NgMapsPolylinePoint)\n  public points?: QueryList<NgMapsPolylinePoint>;\n\n  private _id: string;\n  private _polylineAddedToManager: boolean = false;\n  private subscription: Subscription = new Subscription();\n\n  /** @internal */\n  public ngAfterContentInit() {\n    if (this.points) {\n      this.points.forEach((point: NgMapsPolylinePoint) => {\n        const subscription = point.positionChanged.subscribe(() => {\n          this._polylineManager.updatePolylinePoints(this);\n        });\n        this.subscription.add(subscription);\n      });\n\n      const s = this.points.changes.subscribe(() =>\n        this._polylineManager.updatePolylinePoints(this),\n      );\n      this.subscription.add(s);\n    }\n    if (!this._polylineAddedToManager) {\n      this._init();\n    }\n    this._polylineManager.updatePolylinePoints(this);\n  }\n\n  public ngOnChanges(changes: SimpleChanges): any {\n    if (!this._polylineAddedToManager) {\n      this._init();\n      return;\n    }\n\n    const options: { [propName: string]: any } = {};\n    const optionKeys = Object.keys(changes).filter(\n      (k) => NgMapsPolyline._polylineOptionsAttributes.indexOf(k) !== -1,\n    );\n    optionKeys.forEach((k) => (options[k] = changes[k].currentValue));\n    this._polylineManager.setPolylineOptions(this, options);\n  }\n\n  private _init() {\n    this._polylineManager.addPolyline(this);\n    this._polylineAddedToManager = true;\n    this._addEventListeners();\n  }\n\n  private _addEventListeners() {\n    const handlers = [\n      {\n        name: 'click',\n        handler: (ev: google.maps.PolyMouseEvent) => this.lineClick.emit(ev),\n      },\n      {\n        name: 'dblclick',\n        handler: (ev: google.maps.PolyMouseEvent) => this.lineDblClick.emit(ev),\n      },\n      { name: 'drag', handler: (ev: MouseEvent) => this.lineDrag.emit(ev) },\n      {\n        name: 'dragend',\n        handler: (ev: MouseEvent) => this.lineDragEnd.emit(ev),\n      },\n      {\n        name: 'dragstart',\n        handler: (ev: MouseEvent) => this.lineDragStart.emit(ev),\n      },\n      {\n        name: 'mousedown',\n        handler: (ev: google.maps.PolyMouseEvent) =>\n          this.lineMouseDown.emit(ev),\n      },\n      {\n        name: 'mousemove',\n        handler: (ev: google.maps.PolyMouseEvent) =>\n          this.lineMouseMove.emit(ev),\n      },\n      {\n        name: 'mouseout',\n        handler: (ev: google.maps.PolyMouseEvent) => this.lineMouseOut.emit(ev),\n      },\n      {\n        name: 'mouseover',\n        handler: (ev: google.maps.PolyMouseEvent) =>\n          this.lineMouseOver.emit(ev),\n      },\n      {\n        name: 'mouseup',\n        handler: (ev: google.maps.PolyMouseEvent) => this.lineMouseUp.emit(ev),\n      },\n      {\n        name: 'rightclick',\n        handler: (ev: google.maps.PolyMouseEvent) =>\n          this.lineRightClick.emit(ev),\n      },\n    ];\n    handlers.forEach((obj) => {\n      const os = this._polylineManager\n        .createEventObservable(obj.name, this)\n        // FIXME\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore\n        .subscribe(obj.handler);\n      this.subscription.add(os);\n    });\n  }\n\n  /** @internal */\n  public _getPoints(): Array<NgMapsPolylinePoint> {\n    if (this.points) {\n      return this.points.toArray();\n    } else {\n      return [];\n    }\n  }\n\n  /** @internal */\n  public id(): string {\n    return this._id;\n  }\n\n  /** @internal */\n  public ngOnDestroy() {\n    this._polylineManager.deletePolyline(this);\n    // unsubscribe all registered observable subscriptions\n    this.subscription.unsubscribe();\n  }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { NgMapsRectangleDirective } from '../../directives/rectangle';\nimport { BoundsLiteral } from '../../interface/bounds';\nimport { MapsApiWrapper } from '../maps-api-wrapper';\n\n@Injectable()\nexport abstract class RectangleManager<T = any> {\n  protected _rectangles: Map<NgMapsRectangleDirective, Promise<T>> = new Map<\n    NgMapsRectangleDirective,\n    Promise<T>\n  >();\n\n  constructor(protected _apiWrapper: MapsApiWrapper, protected _zone: NgZone) {}\n\n  public abstract addRectangle(rectangle: NgMapsRectangleDirective): void;\n\n  /**\n   * Removes the given rectangle from the map.\n   */\n  public abstract removeRectangle(\n    rectangle: NgMapsRectangleDirective,\n  ): Promise<void>;\n\n  public abstract setOptions(\n    rectangle: NgMapsRectangleDirective,\n    options: google.maps.RectangleOptions,\n  ): Promise<void>;\n\n  public abstract getBounds(\n    rectangle: NgMapsRectangleDirective,\n  ): Promise<BoundsLiteral | null>;\n\n  public abstract setBounds(rectangle: NgMapsRectangleDirective): Promise<void>;\n\n  public abstract setEditable(\n    rectangle: NgMapsRectangleDirective,\n  ): Promise<void>;\n\n  public abstract setDraggable(\n    rectangle: NgMapsRectangleDirective,\n  ): Promise<void>;\n\n  public abstract setVisible(\n    rectangle: NgMapsRectangleDirective,\n  ): Promise<void>;\n\n  public abstract createEventObservable<E>(\n    eventName: string,\n    rectangle: NgMapsRectangleDirective,\n  ): Observable<E>;\n}\n","import {\n  Directive,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChange,\n  SimpleChanges,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { BoundsLiteral } from '../interface/bounds';\nimport { RectangleOptions } from '../interface/rectangle-options';\nimport { RectangleManager } from '../services/managers/rectangle-manager';\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: 'map-rectangle',\n  standalone: false,\n})\nexport class NgMapsRectangleDirective\n  implements OnInit, OnChanges, OnDestroy, RectangleOptions\n{\n  constructor(private _manager: RectangleManager) {}\n\n  private static _mapOptions: Array<string> = [\n    'fillColor',\n    'fillOpacity',\n    'strokeColor',\n    'strokeOpacity',\n    'strokePosition',\n    'strokeWeight',\n    'visible',\n    'zIndex',\n    'clickable',\n  ];\n  /**\n   * The north position of the rectangle (required).\n   */\n  @Input() public north?: number;\n\n  /**\n   * The east position of the rectangle (required).\n   */\n  @Input() public east?: number;\n\n  /**\n   * The south position of the rectangle (required).\n   */\n  @Input() public south?: number;\n\n  /**\n   * The west position of the rectangle (required).\n   */\n  @Input() public west?: number;\n\n  /**\n   * Indicates whether this Rectangle handles mouse events. Defaults to true.\n   */\n  @Input() public clickable: boolean = true;\n\n  /**\n   * If set to true, the user can drag this rectangle over the map. Defaults to false.\n   */\n  // eslint-disable-next-line @angular-eslint/no-input-rename\n  @Input('rectangleDraggable') public draggable: boolean = false;\n\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  @Input() public editable: boolean = false;\n\n  /**\n   * The fill color. All CSS3 colors are supported except for extended named colors.\n   */\n  @Input() public fillColor?: string;\n\n  /**\n   * The fill opacity between 0.0 and 1.0.\n   */\n  @Input() public fillOpacity?: number;\n\n  /**\n   * The stroke color. All CSS3 colors are supported except for extended named colors.\n   */\n  @Input() public strokeColor?: string;\n\n  /**\n   * The stroke opacity between 0.0 and 1.0\n   */\n  @Input() public strokeOpacity?: number;\n\n  /**\n   * The stroke position. Defaults to CENTER.\n   * This property is not supported on Internet Explorer 8 and earlier.\n   */\n  @Input() public strokePosition: 'CENTER' | 'INSIDE' | 'OUTSIDE' = 'CENTER';\n\n  /**\n   * The stroke width in pixels.\n   */\n  @Input() public strokeWeight: number = 0;\n\n  /**\n   * Whether this rectangle is visible on the map. Defaults to true.\n   */\n  @Input() public visible: boolean = true;\n\n  /**\n   * The zIndex compared to other polys.\n   */\n  @Input() public zIndex?: number;\n\n  /**\n   * This event is fired when the rectangle's is changed.\n   */\n  @Output()\n  public boundsChange: EventEmitter<google.maps.LatLngBoundsLiteral> =\n    new EventEmitter<google.maps.LatLngBoundsLiteral>();\n\n  /**\n   * This event emitter gets emitted when the user clicks on the rectangle.\n   */\n  @Output()\n  public rectangleClick: EventEmitter<MouseEvent> =\n    new EventEmitter<MouseEvent>();\n\n  /**\n   * This event emitter gets emitted when the user clicks on the rectangle.\n   */\n  @Output()\n  public rectangleDblClick: EventEmitter<MouseEvent> =\n    new EventEmitter<MouseEvent>();\n\n  /**\n   * This event is repeatedly fired while the user drags the rectangle.\n   */\n  @Output()\n  // eslint-disable-next-line @angular-eslint/no-output-native\n  public drag: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n  /**\n   * This event is fired when the user stops dragging the rectangle.\n   */\n  @Output()\n  public dragEnd: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n  /**\n   * This event is fired when the user starts dragging the rectangle.\n   */\n  @Output()\n  public dragStart: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n  /**\n   * This event is fired when the DOM mousedown event is fired on the rectangle.\n   */\n  @Output()\n  public mouseDown: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n  /**\n   * This event is fired when the DOM mousemove event is fired on the rectangle.\n   */\n  @Output()\n  public mouseMove: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n  /**\n   * This event is fired on rectangle mouseout.\n   */\n  @Output()\n  public mouseOut: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n  /**\n   * This event is fired on rectangle mouseover.\n   */\n  @Output()\n  public mouseOver: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n  /**\n   * This event is fired when the DOM mouseup event is fired on the rectangle.\n   */\n  @Output()\n  public mouseUp: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n  /**\n   * This event is fired when the rectangle is right-clicked on.\n   */\n  @Output()\n  public rightClick: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>();\n\n  private _rectangleAddedToManager: boolean = false;\n\n  private subscription: Subscription = new Subscription();\n\n  /** @internal */\n  public ngOnInit() {\n    this._manager.addRectangle(this);\n    this._rectangleAddedToManager = true;\n    this._registerEventListeners();\n  }\n\n  /** @internal */\n  public ngOnChanges(changes: SimpleChanges) {\n    if (!this._rectangleAddedToManager) {\n      return;\n    }\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    this._updateRectangleOptionsChanges(changes);\n  }\n\n  private _updateRectangleOptionsChanges(changes: {\n    [propName: string]: SimpleChange;\n  }) {\n    const options: { [propName: string]: any } = {};\n    const optionKeys = Object.keys(changes).filter(\n      (k) => NgMapsRectangleDirective._mapOptions.indexOf(k) !== -1,\n    );\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\n  private _registerEventListeners() {\n    const events: Map<string, EventEmitter<any>> = new Map<\n      string,\n      EventEmitter<any>\n    >();\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\n    events.forEach((eventEmitter, eventName) => {\n      this.subscription.add(\n        this._manager\n          .createEventObservable<google.maps.MapMouseEvent>(eventName, this)\n          .subscribe((value) => {\n            switch (eventName) {\n              case 'bounds_changed':\n                this._manager\n                  .getBounds(this)\n                  .then((bounds) => eventEmitter.emit(bounds));\n                break;\n              default:\n                eventEmitter.emit(value);\n            }\n          }),\n      );\n    });\n  }\n\n  /** @internal */\n  public ngOnDestroy() {\n    this.subscription.unsubscribe();\n    this._manager.removeRectangle(this);\n  }\n\n  /**\n   * Gets the LatLngBounds of this Rectangle.\n   */\n  public getBounds(): Promise<BoundsLiteral | null> {\n    return this._manager.getBounds(this);\n  }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject } from '@angular/core';\n\nimport { MapsAPILoader } from './maps-api-loader';\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 */\nexport class NoOpMapsAPILoader extends MapsAPILoader {\n  constructor(@Inject(DOCUMENT) document: any) {\n    super();\n    this._document = document as Document;\n    this._window = this._document.defaultView;\n  }\n\n  public load(): Promise<void> {\n    return Promise.resolve();\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  public configure(config: any): void {}\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ScriptLoaderService {\n  public document: Document;\n  private head: HTMLHeadElement;\n  private alreadyLoaded: Map<string, Promise<any>> = new Map();\n\n  constructor(@Inject(DOCUMENT) document: any) {\n    this.document = document as Document;\n    this.head = this.document.head;\n  }\n\n  private observeLoad(\n    element: HTMLScriptElement | HTMLLinkElement,\n  ): Promise<UIEvent> {\n    return new Promise((resolve, reject) => {\n      function successHandler(event: UIEvent) {\n        const readyState: string = (element as any).readyState;\n        // For IE we have readyState, other browsers just call the load event and we proccede\n        if (\n          readyState === 'complete' ||\n          readyState === 'loaded' ||\n          event.type === 'load'\n        ) {\n          resolve(event);\n        }\n      }\n\n      function errorHandler(event: UIEvent) {\n        reject(event);\n      }\n\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      element.addEventListener('readystatechange', successHandler);\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      element.addEventListener('load', successHandler);\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore\n      element.addEventListener('error', errorHandler);\n    });\n  }\n\n  private createScriptElement(src: string): HTMLScriptElement {\n    const script = document.createElement('script');\n    script.src = src;\n    script.type = 'text/javascript';\n    script.async = true;\n    script.defer = true;\n    return script;\n  }\n\n  // eslint-disable-next-line\n  private createCSSElement(href: string): HTMLLinkElement {\n    const style = document.createElement('link');\n\n    style.rel = 'stylesheet';\n    style.type = 'text/css';\n    style.href = href;\n\n    return style;\n  }\n\n  /**\n   * Dynamically loads the given script\n   *\n   * @param src The url of the script to load dynamically\n   * @param integrity set integrity check value\n   * @returns Observable<UIEvent> Observable that will be resolved once the script has been loaded.\n   */\n  public loadScript(src: string, integrity?: string): Promise<UIEvent | void> {\n    if (this.alreadyLoaded.has(src)) {\n      return this.alreadyLoaded.get(src)!;\n    } else {\n      const script = this.createScriptElement(src);\n      const promise = this.observeLoad(script);\n      this.head.appendChild(script);\n      this.alreadyLoaded.set(src, promise);\n      return promise;\n    }\n  }\n\n  /**\n   * Dynamically loads the given CSS file\n   *\n   * @param href The url of the CSS to load dynamically\n   * @returns Observable<UIEvent> Promise that will be resolved once the CSS file has been loaded.\n   */\n  public loadCSS(href: string): Promise<UIEvent | void> {\n    // eslint-disable-line\n    if (this.alreadyLoaded.has(href)) {\n      return this.alreadyLoaded.get(href)!;\n    } else {\n      const style = this.createCSSElement(href);\n      const promise = this.observeLoad(style);\n      this.head.appendChild(style);\n      this.alreadyLoaded.set(href, promise);\n      return promise;\n    }\n  }\n}\n","import { InjectionToken, NgModule } from '@angular/core';\n\nimport { NgMapsCircleDirective } from './directives/circle';\nimport { NgMapsFitBoundsDirective } from './directives/fit-bounds';\nimport { NgMapsInfoWindowComponent } from './directives/info-window';\nimport { NgMapsViewComponent } from './directives/map';\nimport { NgMapsMarkerComponent } from './directives/marker';\nimport { NgMapsPolygonDirective } from './directives/polygon';\nimport { NgMapsPolyline } from './directives/polyline';\nimport { NgMapsPolylinePoint } from './directives/polyline-point';\nimport { NgMapsRectangleDirective } from './directives/rectangle';\n\nexport const MAP_PROVIDER = new InjectionToken<string>('Map Provider');\n\nexport function isGoogleMaps(token: string) {\n  return token === 'GoogleMaps';\n}\n\nexport function isHereMaps(token: string) {\n  return token === 'HereMaps';\n}\n\n/**\n * @internal\n */\nexport function coreDirectives() {\n  return [\n    NgMapsViewComponent,\n    NgMapsMarkerComponent,\n    NgMapsInfoWindowComponent,\n    NgMapsFitBoundsDirective,\n    NgMapsCircleDirective,\n    NgMapsPolygonDirective,\n    NgMapsPolyline,\n    NgMapsPolylinePoint,\n    NgMapsRectangleDirective,\n  ];\n}\n\n/**\n * The ng-maps core module. Contains all Directives/Services/Pipes\n */\n@NgModule({\n  declarations: coreDirectives(),\n  exports: coreDirectives(),\n})\nexport class NgMapsCoreModule {}\n","/*\n * Public API Surface of core\n */\n\n// interfaces\nexport * from './lib/interface/bounds';\nexport * from './lib/interface/circle-options';\nexport * from './lib/interface/geo-point';\nexport * from './lib/interface/layers';\nexport * from './lib/interface/map-options';\nexport * from './lib/interface/marker-icon';\nexport * from './lib/interface/marker-options';\nexport * from './lib/interface/padding';\nexport * from './lib/interface/rectangle-options';\nexport * from './lib/interface/shape-options';\n// directives\nexport * from './lib/directives';\n// services\nexport * from './lib/services';\n\n// core module\n// we explicitly export the module here to prevent this Ionic 2 bug:\n// http://stevemichelotti.com/integrate-angular-2-google-maps-into-ionic-2/\nexport {\n  NgMapsCoreModule,\n  MAP_PROVIDER,\n  isGoogleMaps,\n  isHereMaps,\n} from './lib/core.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MapsAPILoader","i1.MapsApiWrapper","i2.FitBoundsService","i2.MarkerManager","i1.InfoWindowManager","i1.MarkerManager","i1.FitBoundsAccessor","i1.FitBoundsService","i1.CircleManager","i1.PolygonManager","i1.PolylineManager","i1.RectangleManager"],"mappings":"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"}