{"version":3,"file":"007.surajit2023-agm-markerclusterer.mjs","sources":["../../../packages/markerclusterer/src/lib/services/managers/cluster-manager.ts","../../../packages/markerclusterer/src/lib/directives/marker-cluster.ts","../../../packages/markerclusterer/src/lib/marker-clusterer.module.ts","../../../packages/markerclusterer/src/public-api.ts","../../../packages/markerclusterer/src/007.surajit2023-agm-markerclusterer.ts"],"sourcesContent":["import { AgmMarker, GoogleMapsAPIWrapper, MarkerManager } from '@007.surajit2023/agm-core';\r\nimport { Injectable, NgZone } from '@angular/core';\r\nimport { MarkerClustererOptions } from '@google/markerclustererplus';\r\nimport MarkerClusterer from '@google/markerclustererplus';\r\nimport { Observable, Subscriber } from 'rxjs';\r\nimport { AgmMarkerCluster } from '../../directives/marker-cluster';\r\n\r\n@Injectable()\r\nexport class ClusterManager extends MarkerManager {\r\n  private _clustererInstance: Promise<MarkerClusterer>;\r\n  private _resolver: (cluster: MarkerClusterer) => void;\r\n\r\n  constructor(protected _mapsWrapper: GoogleMapsAPIWrapper, protected _zone: NgZone) {\r\n    super(_mapsWrapper, _zone);\r\n    this._clustererInstance = new Promise<MarkerClusterer>((resolver) => {\r\n      this._resolver = resolver;\r\n    });\r\n  }\r\n\r\n  init(options: MarkerClustererOptions): void {\r\n    this._mapsWrapper.getNativeMap().then(map => {\r\n      const clusterer = new MarkerClusterer(map, [], options);\r\n      this._resolver(clusterer);\r\n    });\r\n  }\r\n\r\n  getClustererInstance(): Promise<MarkerClusterer> {\r\n    return this._clustererInstance;\r\n  }\r\n\r\n  addMarker(markerDirective: AgmMarker): void {\r\n    const clusterPromise: Promise<MarkerClusterer> = this.getClustererInstance();\r\n    const markerPromise = this._mapsWrapper\r\n      .createMarker({\r\n        position: {\r\n          lat: markerDirective.latitude,\r\n          lng: markerDirective.longitude,\r\n        },\r\n        label: markerDirective.label,\r\n        draggable: markerDirective.draggable,\r\n        icon: markerDirective.iconUrl,\r\n        opacity: markerDirective.opacity,\r\n        visible: markerDirective.visible,\r\n        zIndex: markerDirective.zIndex,\r\n        title: markerDirective.title,\r\n        clickable: markerDirective.clickable,\r\n      }, false);\r\n\r\n    Promise\r\n      .all([clusterPromise, markerPromise])\r\n      .then(([cluster, marker]) => cluster.addMarker(marker));\r\n    this._markers.set(markerDirective, markerPromise);\r\n  }\r\n\r\n  deleteMarker(marker: AgmMarker): Promise<void> {\r\n    const markerPromise = this._markers.get(marker);\r\n    if (markerPromise == null) {\r\n      // marker already deleted\r\n      return Promise.resolve();\r\n    }\r\n    return markerPromise.then((m: google.maps.Marker) => {\r\n      this._zone.run(() => {\r\n        m.setMap(null);\r\n        this.getClustererInstance().then(cluster => {\r\n          cluster.removeMarker(m);\r\n          this._markers.delete(marker);\r\n        });\r\n      });\r\n    });\r\n  }\r\n\r\n  clearMarkers(): Promise<void> {\r\n    return this.getClustererInstance().then(cluster => {\r\n      cluster.clearMarkers();\r\n    });\r\n  }\r\n\r\n  setGridSize(c: AgmMarkerCluster): void {\r\n    this.getClustererInstance().then(cluster => {\r\n      cluster.setGridSize(c.gridSize);\r\n    });\r\n  }\r\n\r\n  setMaxZoom(c: AgmMarkerCluster): void {\r\n    this.getClustererInstance().then(cluster => {\r\n      cluster.setMaxZoom(c.maxZoom);\r\n    });\r\n  }\r\n\r\n  setStyles(c: AgmMarkerCluster): void {\r\n    this.getClustererInstance().then(cluster => {\r\n      cluster.setStyles(c.styles);\r\n    });\r\n  }\r\n\r\n  setZoomOnClick(c: AgmMarkerCluster): void {\r\n    this.getClustererInstance().then(cluster => {\r\n      if (c.zoomOnClick !== undefined) {\r\n        cluster.setZoomOnClick(c.zoomOnClick);\r\n      }\r\n    });\r\n  }\r\n\r\n  setAverageCenter(c: AgmMarkerCluster): void {\r\n    this.getClustererInstance().then(cluster => {\r\n      if (c.averageCenter !== undefined) {\r\n        cluster.setAverageCenter(c.averageCenter);\r\n      }\r\n    });\r\n  }\r\n\r\n  setImagePath(c: AgmMarkerCluster): void {\r\n    this.getClustererInstance().then(cluster => {\r\n      if (c.imagePath !== undefined) {\r\n        cluster.setImagePath(c.imagePath);\r\n      }\r\n    });\r\n  }\r\n\r\n  setMinimumClusterSize(c: AgmMarkerCluster): void {\r\n    this.getClustererInstance().then(cluster => {\r\n      if (c.minimumClusterSize !== undefined) {\r\n        cluster.setMinimumClusterSize(c.minimumClusterSize);\r\n      }\r\n    });\r\n  }\r\n\r\n  setImageExtension(c: AgmMarkerCluster): void {\r\n    this.getClustererInstance().then(cluster => {\r\n      if (c.imageExtension !== undefined) {\r\n        cluster.setImageExtension(c.imageExtension);\r\n      }\r\n    });\r\n  }\r\n\r\n  createClusterEventObservable<T>(eventName: string): Observable<T> {\r\n    return new Observable((subscriber: Subscriber<T>) => {\r\n      this._zone.runOutsideAngular(() => {\r\n        this._clustererInstance.then((m: MarkerClusterer) => {\r\n          m.addListener(eventName, (e: T) => this._zone.run(() => subscriber.next(e)));\r\n        });\r\n      });\r\n    });\r\n  }\r\n\r\n  setCalculator(c: AgmMarkerCluster): void {\r\n    this.getClustererInstance().then(cluster => {\r\n      if (typeof c.calculator === 'function') {\r\n        cluster.setCalculator(c.calculator);\r\n      }\r\n    });\r\n  }\r\n\r\n  async setClusterClass(c: AgmMarkerCluster) {\r\n    if (typeof c.clusterClass !== 'undefined') {\r\n      const instance = await this.getClustererInstance();\r\n      instance.setClusterClass(c.clusterClass);\r\n    }\r\n  }\r\n\r\n  async setEnableRetinaIcons(c: AgmMarkerCluster) {\r\n    if (typeof c.enableRetinaIcons !== 'undefined') {\r\n      const instance = await this.getClustererInstance();\r\n      instance.setEnableRetinaIcons(c.enableRetinaIcons);\r\n    }\r\n  }\r\n\r\n  async setIgnoreHidden(c: AgmMarkerCluster) {\r\n    if (typeof c.ignoreHidden !== 'undefined') {\r\n      const instance = await this.getClustererInstance();\r\n      instance.setIgnoreHidden(c.ignoreHidden);\r\n    }\r\n  }\r\n\r\n  async setImageSizes(c: AgmMarkerCluster) {\r\n    if (typeof c.imageSizes !== 'undefined') {\r\n      const instance = await this.getClustererInstance();\r\n      instance.setImageSizes(c.imageSizes);\r\n    }\r\n  }\r\n\r\n  async setTitle(c: AgmMarkerCluster) {\r\n    if (typeof c.title !== 'undefined') {\r\n      const instance = await this.getClustererInstance();\r\n      instance.setTitle(c.title);\r\n    }\r\n  }\r\n}\r\n","import { Directive, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChange } from '@angular/core';\r\n\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { InfoWindowManager, MarkerManager } from '@007.surajit2023/agm-core';\r\nimport { ClusterIconStyle, MarkerClustererOptions } from '@google/markerclustererplus';\r\nimport { Calculator } from '@google/markerclustererplus/dist/markerclusterer';\r\nimport { ClusterManager } from '../services/managers/cluster-manager';\r\n\r\n// tslint:disable: jsdoc-format\r\n/**\r\n * AgmMarkerCluster clusters map marker if they are near together\r\n *\r\n * ### Example\r\n```typescript\r\nimport { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'my-map-cmp',\r\n styles: [`\r\n   agm-map {\r\n     height: 300px;\r\n   }\r\n `],\r\n template: `\r\n   <agm-map [latitude]=\"lat\" [longitude]=\"lng\" [zoom]=\"zoom\">\r\n     <agm-marker-cluster>\r\n       <agm-marker [latitude]=\"lat\" [longitude]=\"lng\" [label]=\"'M'\">\r\n       </agm-marker>\r\n       <agm-marker [latitude]=\"lat2\" [longitude]=\"lng2\" [label]=\"'N'\">\r\n       </agm-marker>\r\n     </agm-marker-cluster>\r\n   </agm-map>\r\n `\r\n})\r\n```\r\n */\r\n// tslint:enable: jsdoc-format\r\n@Directive({\r\n  selector: 'agm-marker-cluster',\r\n  providers: [\r\n    ClusterManager,\r\n    { provide: MarkerManager, useExisting: ClusterManager },\r\n    InfoWindowManager,\r\n  ],\r\n})\r\nexport class AgmMarkerCluster implements OnDestroy, OnChanges, OnInit, MarkerClustererOptions {\r\n  /**\r\n   * The grid size of a cluster in pixels\r\n   */\r\n  @Input() gridSize: number;\r\n\r\n  /**\r\n   * The maximum zoom level that a marker can be part of a cluster.\r\n   */\r\n  @Input() maxZoom: number;\r\n\r\n  /**\r\n   * Whether the default behaviour of clicking on a cluster is to zoom into it.\r\n   */\r\n  @Input() zoomOnClick: boolean;\r\n\r\n  /**\r\n   * Whether the center of each cluster should be the average of all markers in the cluster.\r\n   */\r\n  @Input() averageCenter: boolean;\r\n\r\n  /**\r\n   * The minimum number of markers to be in a cluster before the markers are hidden and a count is shown.\r\n   */\r\n  @Input() minimumClusterSize: number;\r\n\r\n  /**\r\n   * An object that has style properties.\r\n   */\r\n  @Input() styles: ClusterIconStyle[];\r\n\r\n  /**\r\n   * A function that calculates the cluster style and text based on the markers in the cluster.\r\n   */\r\n  @Input() calculator: Calculator;\r\n\r\n  @Input() imagePath: string;\r\n  @Input() imageExtension: string;\r\n\r\n  /**\r\n   * The name of the CSS class defining general styles for the cluster markers.\r\n   * Use this class to define CSS styles that are not set up by the code that\r\n   * processes the `styles` array.\r\n   *\r\n   * @defaultValue 'cluster'\r\n   */\r\n  @Input() clusterClass: string;\r\n\r\n  /**\r\n   * Whether to allow the use of cluster icons that have sizes that are some\r\n   * multiple (typically double) of their actual display size. Icons such as\r\n   * these look better when viewed on high-resolution monitors such as Apple's\r\n   * Retina displays. Note: if this property is `true`, sprites cannot be used\r\n   * as cluster icons.\r\n   *\r\n   * @defaultValue false\r\n   */\r\n  @Input() enableRetinaIcons: boolean;\r\n\r\n  /**\r\n   * Whether to ignore hidden markers in clusters. You may want to set this to\r\n   * `true` to ensure that hidden markers are not included in the marker count\r\n   * that appears on a cluster marker (this count is the value of the `text`\r\n   * property of the result returned by the default `calculator`). If set to\r\n   * `true` and you change the visibility of a marker being clustered, be sure\r\n   * to also call `MarkerClusterer.repaint()`.\r\n   *\r\n   * @defaultValue false\r\n   */\r\n  @Input() ignoreHidden: boolean;\r\n\r\n  /**\r\n   * An array of numbers containing the widths of the group of\r\n   * `<imagePath><n>.<imageExtension>` image files. (The images are assumed to\r\n   * be square.)\r\n   *\r\n   * @defaultValue [53, 56, 66, 78, 90]\r\n   */\r\n  @Input() imageSizes: number[];\r\n\r\n  /**\r\n   * The tooltip to display when the mouse moves over a cluster marker.\r\n   * (Alternatively, you can use a custom `calculator` function to specify a\r\n   * different tooltip for each cluster marker.)\r\n   *\r\n   * @defaultValue ''\r\n   */\r\n  @Input() title: string;\r\n\r\n  @Output() clusterClick: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  private _observableSubscriptions: Subscription[] = [];\r\n\r\n  constructor(private _clusterManager: ClusterManager) { }\r\n\r\n  /** @internal */\r\n  ngOnDestroy() {\r\n    this._clusterManager.clearMarkers();\r\n    this._observableSubscriptions.forEach((s) => s.unsubscribe());\r\n  }\r\n\r\n  /** @internal */\r\n  ngOnChanges(changes: { [key: string]: SimpleChange }) {\r\n    // tslint:disable: no-string-literal\r\n    if (changes['gridSize']) {\r\n      this._clusterManager.setGridSize(this);\r\n    }\r\n    if (changes['maxZoom']) {\r\n      this._clusterManager.setMaxZoom(this);\r\n    }\r\n    if (changes['zoomOnClick']) {\r\n      this._clusterManager.setZoomOnClick(this);\r\n    }\r\n    if (changes['averageCenter']) {\r\n      this._clusterManager.setAverageCenter(this);\r\n    }\r\n    if (changes['minimumClusterSize']) {\r\n      this._clusterManager.setMinimumClusterSize(this);\r\n    }\r\n    if (changes['imagePath']) {\r\n      this._clusterManager.setImagePath(this);\r\n    }\r\n    if (changes['imageExtension']) {\r\n      this._clusterManager.setImageExtension(this);\r\n    }\r\n    if (changes['calculator']) {\r\n      this._clusterManager.setCalculator(this);\r\n    }\r\n    if (changes['styles']) {\r\n      this._clusterManager.setStyles(this);\r\n    }\r\n    if (changes['clusterClass']) {\r\n      this._clusterManager.setClusterClass(this);\r\n    }\r\n    if (changes['enableRetinaIcons']) {\r\n      this._clusterManager.setEnableRetinaIcons(this);\r\n    }\r\n    if (changes['ignoreHidden']) {\r\n      this._clusterManager.setIgnoreHidden(this);\r\n    }\r\n    if (changes['imageSizes']) {\r\n      this._clusterManager.setImageSizes(this);\r\n    }\r\n    if (changes['title']) {\r\n      this._clusterManager.setTitle(this);\r\n    }\r\n    // tslint:enable: no-string-literal\r\n\r\n  }\r\n\r\n  private _addEventListeners() {\r\n    const handlers = [\r\n      {\r\n        name: 'clusterclick',\r\n        handler: () => this.clusterClick.emit(),\r\n      },\r\n    ];\r\n    handlers.forEach((obj) => {\r\n      const os = this._clusterManager.createClusterEventObservable(obj.name).subscribe(obj.handler);\r\n      this._observableSubscriptions.push(os);\r\n    });\r\n  }\r\n\r\n  /** @internal */\r\n  ngOnInit() {\r\n    this._addEventListeners();\r\n    this._clusterManager.init({\r\n      averageCenter: this.averageCenter,\r\n      calculator: this.calculator,\r\n      clusterClass: this.clusterClass,\r\n      enableRetinaIcons: this.enableRetinaIcons,\r\n      gridSize: this.gridSize,\r\n      ignoreHidden: this.ignoreHidden,\r\n      imageExtension: this.imageExtension,\r\n      imagePath: this.imagePath,\r\n      imageSizes: this.imageSizes,\r\n      maxZoom: this.maxZoom,\r\n      minimumClusterSize: this.minimumClusterSize,\r\n      styles: this.styles,\r\n      title: this.title,\r\n      zoomOnClick: this.zoomOnClick,\r\n    });\r\n  }\r\n}\r\n","import { AgmCoreModule } from '@007.surajit2023/agm-core';\r\nimport { NgModule } from '@angular/core';\r\nimport { AgmMarkerCluster } from './directives/marker-cluster';\r\n\r\n@NgModule({\r\n  imports: [AgmCoreModule],\r\n  declarations: [AgmMarkerCluster],\r\n  exports: [AgmMarkerCluster],\r\n})\r\nexport class AgmMarkerClustererModule {\r\n}\r\n","/*\r\n * Public API Surface of markerclusterer\r\n */\r\n\r\nexport * from './lib/services';\r\nexport * from './lib/directives';\r\nexport * from './lib/marker-clusterer.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ClusterManager"],"mappings":"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"}