@react-google-maps/marker-clusterer 2.6.0 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"cjs.min.js","sources":["../src/ClusterIcon.tsx","../src/Cluster.tsx","../src/Clusterer.tsx"],"sourcesContent":["/* global google */\n/* eslint-disable filenames/match-regex */\nimport { Cluster } from './Cluster'\n\nimport { ClusterIconStyle, ClusterIconInfo } from './types'\n\nexport class ClusterIcon {\n cluster: Cluster\n className: string\n clusterClassName: string\n styles: ClusterIconStyle[]\n center: google.maps.LatLng | undefined\n div: HTMLDivElement | null\n sums: ClusterIconInfo | null\n visible: boolean\n url: string\n height: number\n width: number\n anchorText: number[]\n anchorIcon: number[]\n textColor: string\n textSize: number\n textDecoration: string\n fontWeight: string\n fontStyle: string\n fontFamily: string\n backgroundPosition: string\n\n boundsChangedListener: google.maps.MapsEventListener | null\n\n constructor(cluster: Cluster, styles: ClusterIconStyle[]) {\n cluster.getClusterer().extend(ClusterIcon, google.maps.OverlayView)\n this.cluster = cluster\n this.clusterClassName = this.cluster.getClusterer().getClusterClass()\n this.className = this.clusterClassName\n this.styles = styles\n this.center = undefined\n this.div = null\n this.sums = null\n this.visible = false\n this.boundsChangedListener = null\n this.url = ''\n this.height = 0\n this.width = 0\n this.anchorText = [0, 0]\n this.anchorIcon = [0, 0]\n this.textColor = 'black'\n this.textSize = 11\n this.textDecoration = 'none'\n this.fontWeight = 'bold'\n this.fontStyle = 'normal'\n this.fontFamily = 'Arial,sans-serif'\n this.backgroundPosition = '0 0'\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.setMap(cluster.getMap()) // Note: this causes onAdd to be called\n }\n\n onAdd() {\n let cMouseDownInCluster: boolean\n let cDraggingMapByCluster: boolean\n\n this.div = document.createElement('div')\n this.div.className = this.className\n if (this.visible) {\n this.show()\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getPanes().overlayMouseTarget.appendChild(this.div)\n\n // Fix for Issue 157\n this.boundsChangedListener = google.maps.event.addListener(\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap(),\n 'boundschanged',\n function boundsChanged() {\n cDraggingMapByCluster = cMouseDownInCluster\n }\n )\n\n google.maps.event.addDomListener(this.div, 'mousedown', function onMouseDown() {\n cMouseDownInCluster = true\n cDraggingMapByCluster = false\n })\n\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n google.maps.event.addDomListener(\n this.div,\n 'click',\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n (event: Event) => {\n cMouseDownInCluster = false\n\n if (!cDraggingMapByCluster) {\n const markerClusterer = this.cluster.getClusterer()\n\n /**\n * This event is fired when a cluster marker is clicked.\n * @name MarkerClusterer#click\n * @param {Cluster} c The cluster that was clicked.\n * @event\n */\n google.maps.event.trigger(markerClusterer, 'click', this.cluster)\n google.maps.event.trigger(markerClusterer, 'clusterclick', this.cluster) // deprecated name\n\n // The default click handler follows. Disable it by setting\n // the zoomOnClick property to false.\n if (markerClusterer.getZoomOnClick()) {\n // Zoom into the cluster.\n const maxZoom = markerClusterer.getMaxZoom()\n\n const bounds = this.cluster.getBounds()\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n markerClusterer.getMap().fitBounds(bounds)\n\n // There is a fix for Issue 170 here:\n setTimeout(function timeout() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n markerClusterer.getMap().fitBounds(bounds)\n\n // Don't zoom beyond the max zoom level\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n if (maxZoom !== null && markerClusterer.getMap().getZoom() > maxZoom) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n markerClusterer.getMap().setZoom(maxZoom + 1)\n }\n }, 100)\n }\n\n // Prevent event propagation to the map:\n event.cancelBubble = true\n\n if (event.stopPropagation) {\n event.stopPropagation()\n }\n }\n }\n )\n\n google.maps.event.addDomListener(\n this.div,\n 'mouseover',\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n () => {\n /**\n * This event is fired when the mouse moves over a cluster marker.\n * @name MarkerClusterer#mouseover\n * @param {Cluster} c The cluster that the mouse moved over.\n * @event\n */\n google.maps.event.trigger(this.cluster.getClusterer(), 'mouseover', this.cluster)\n }\n )\n\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n google.maps.event.addDomListener(\n this.div,\n 'mouseout',\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n () => {\n /**\n * This event is fired when the mouse moves out of a cluster marker.\n * @name MarkerClusterer#mouseout\n * @param {Cluster} c The cluster that the mouse moved out of.\n * @event\n */\n google.maps.event.trigger(this.cluster.getClusterer(), 'mouseout', this.cluster)\n }\n )\n }\n\n onRemove() {\n if (this.div && this.div.parentNode) {\n this.hide()\n\n if (this.boundsChangedListener !== null) {\n google.maps.event.removeListener(this.boundsChangedListener)\n }\n\n google.maps.event.clearInstanceListeners(this.div)\n\n this.div.parentNode.removeChild(this.div)\n\n this.div = null\n }\n }\n\n draw() {\n if (this.visible && this.div !== null && this.center) {\n const { x, y } = this.getPosFromLatLng(this.center)\n\n this.div.style.top = y + 'px'\n this.div.style.left = x + 'px'\n }\n }\n\n hide() {\n if (this.div) {\n this.div.style.display = 'none'\n }\n\n this.visible = false\n }\n\n show() {\n if (this.div && this.center) {\n let img = '',\n divTitle = ''\n\n // NOTE: values must be specified in px units\n const bp = this.backgroundPosition.split(' ')\n\n const spriteH = parseInt(bp[0].replace(/^\\s+|\\s+$/g, ''), 10)\n\n const spriteV = parseInt(bp[1].replace(/^\\s+|\\s+$/g, ''), 10)\n\n const pos = this.getPosFromLatLng(this.center)\n\n if (this.sums === null || typeof this.sums.title === 'undefined' || this.sums.title === '') {\n divTitle = this.cluster.getClusterer().getTitle()\n } else {\n divTitle = this.sums.title\n }\n\n this.div.style.cssText = this.createCss(pos)\n\n img =\n \"<img alt='\" +\n divTitle +\n \"' src='\" +\n this.url +\n \"' style='position: absolute; top: \" +\n spriteV +\n 'px; left: ' +\n spriteH +\n 'px; '\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n //@ts-ignore\n if (!this.cluster.getClusterer().enableRetinaIcons) {\n img +=\n 'clip: rect(' +\n -1 * spriteV +\n 'px, ' +\n (-1 * spriteH + this.width) +\n 'px, ' +\n (-1 * spriteV + this.height) +\n 'px, ' +\n -1 * spriteH +\n 'px);'\n }\n\n img += \"'>\"\n\n this.div.innerHTML =\n img +\n \"<div style='\" +\n 'position: absolute;' +\n 'top: ' +\n this.anchorText[0] +\n 'px;' +\n 'left: ' +\n this.anchorText[1] +\n 'px;' +\n 'color: ' +\n this.textColor +\n ';' +\n 'font-size: ' +\n this.textSize +\n 'px;' +\n 'font-family: ' +\n this.fontFamily +\n ';' +\n 'font-weight: ' +\n this.fontWeight +\n ';' +\n 'font-style: ' +\n this.fontStyle +\n ';' +\n 'text-decoration: ' +\n this.textDecoration +\n ';' +\n 'text-align: center;' +\n 'width: ' +\n this.width +\n 'px;' +\n 'line-height:' +\n this.height +\n 'px;' +\n \"'>\" +\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.sums.text +\n '</div>'\n\n this.div.title = divTitle\n\n this.div.style.display = ''\n }\n\n this.visible = true\n }\n\n useStyle(sums: ClusterIconInfo) {\n this.sums = sums\n const styles = this.cluster.getClusterer().getStyles()\n const style = styles[Math.min(styles.length - 1, Math.max(0, sums.index - 1))]\n\n this.url = style.url\n this.height = style.height\n this.width = style.width\n\n if (style.className) this.className = `${this.clusterClassName} ${style.className}`\n\n this.anchorText = style.anchorText || [0, 0]\n this.anchorIcon = style.anchorIcon || [this.height / 2, this.width / 2]\n\n this.textColor = style.textColor || 'black'\n\n this.textSize = style.textSize || 11\n\n this.textDecoration = style.textDecoration || 'none'\n\n this.fontWeight = style.fontWeight || 'bold'\n\n this.fontStyle = style.fontStyle || 'normal'\n\n this.fontFamily = style.fontFamily || 'Arial,sans-serif'\n\n this.backgroundPosition = style.backgroundPosition || '0 0'\n }\n\n setCenter(center: google.maps.LatLng) {\n this.center = center\n }\n\n createCss(pos: google.maps.Point): string {\n const style = []\n\n style.push('cursor: pointer;')\n\n style.push('position: absolute; top: ' + pos.y + 'px; left: ' + pos.x + 'px;')\n\n style.push('width: ' + this.width + 'px; height: ' + this.height + 'px;')\n\n return style.join('')\n }\n\n getPosFromLatLng(latlng: google.maps.LatLng): google.maps.Point {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n const pos = this.getProjection().fromLatLngToDivPixel(latlng)\n\n pos.x -= this.anchorIcon[1]\n\n pos.y -= this.anchorIcon[0]\n\n // pos.x = pos.x\n\n // pos.y = pos.y\n\n return pos\n }\n}\n","/* global google */\n/* eslint-disable filenames/match-regex */\nimport { Clusterer } from './Clusterer'\n\nimport { ClusterIcon } from './ClusterIcon'\n\nimport { MarkerExtended } from './types'\n\nexport class Cluster {\n markerClusterer: Clusterer\n map: google.maps.Map | google.maps.StreetViewPanorama\n gridSize: number\n minClusterSize: number\n averageCenter: boolean\n markers: MarkerExtended[]\n center: google.maps.LatLng | undefined\n bounds: google.maps.LatLngBounds | null\n clusterIcon: ClusterIcon\n\n constructor(markerClusterer: Clusterer) {\n this.markerClusterer = markerClusterer\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.map = this.markerClusterer.getMap()\n\n this.gridSize = this.markerClusterer.getGridSize()\n\n this.minClusterSize = this.markerClusterer.getMinimumClusterSize()\n\n this.averageCenter = this.markerClusterer.getAverageCenter()\n\n this.markers = []\n\n this.center = undefined\n\n this.bounds = null\n\n this.clusterIcon = new ClusterIcon(this, this.markerClusterer.getStyles())\n }\n\n getSize(): number {\n return this.markers.length\n }\n\n getMarkers(): MarkerExtended[] {\n return this.markers\n }\n\n getCenter(): google.maps.LatLng | undefined {\n return this.center\n }\n\n getMap(): google.maps.Map | google.maps.StreetViewPanorama {\n return this.map\n }\n\n getClusterer(): Clusterer {\n return this.markerClusterer\n }\n\n getBounds(): google.maps.LatLngBounds {\n const bounds = new google.maps.LatLngBounds(this.center, this.center)\n\n const markers = this.getMarkers()\n\n for (let i = 0; i < markers.length; i++) {\n const position = markers[i].getPosition()\n\n if (position) {\n bounds.extend(position)\n }\n }\n\n return bounds\n }\n\n remove() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.clusterIcon.setMap(null)\n\n this.markers = []\n\n // @ts-ignore\n delete this.markers\n }\n\n addMarker(marker: MarkerExtended): boolean {\n if (this.isMarkerAlreadyAdded(marker)) {\n return false\n }\n\n if (!this.center) {\n const position = marker.getPosition()\n\n if (position) {\n this.center = position\n\n this.calculateBounds()\n }\n } else {\n if (this.averageCenter) {\n const position = marker.getPosition()\n\n if (position) {\n const length = this.markers.length + 1\n\n this.center = new google.maps.LatLng(\n (this.center.lat() * (length - 1) + position.lat()) / length,\n (this.center.lng() * (length - 1) + position.lng()) / length\n )\n\n this.calculateBounds()\n }\n }\n }\n\n marker.isAdded = true\n\n this.markers.push(marker)\n\n const mCount = this.markers.length\n\n const maxZoom = this.markerClusterer.getMaxZoom()\n\n const zoom = this.map.getZoom()\n\n if (maxZoom !== null && typeof zoom !== 'undefined' && zoom > maxZoom) {\n // Zoomed in past max zoom, so show the marker.\n if (marker.getMap() !== this.map) {\n marker.setMap(this.map)\n }\n } else if (mCount < this.minClusterSize) {\n // Min cluster size not reached so show the marker.\n if (marker.getMap() !== this.map) {\n marker.setMap(this.map)\n }\n } else if (mCount === this.minClusterSize) {\n // Hide the markers that were showing.\n for (let i = 0; i < mCount; i++) {\n this.markers[i].setMap(null)\n }\n } else {\n marker.setMap(null)\n }\n\n return true\n }\n\n isMarkerInClusterBounds(marker: MarkerExtended): boolean {\n if (this.bounds !== null) {\n const position = marker.getPosition()\n\n if (position) {\n return this.bounds.contains(position)\n }\n }\n\n return false\n }\n\n calculateBounds() {\n this.bounds = this.markerClusterer.getExtendedBounds(\n new google.maps.LatLngBounds(this.center, this.center)\n )\n }\n\n updateIcon() {\n const mCount = this.markers.length\n\n const maxZoom = this.markerClusterer.getMaxZoom()\n\n const zoom = this.map.getZoom()\n\n if (maxZoom !== null && typeof zoom !== 'undefined' && zoom > maxZoom) {\n this.clusterIcon.hide()\n\n return\n }\n\n if (mCount < this.minClusterSize) {\n // Min cluster size not yet reached.\n this.clusterIcon.hide()\n\n return\n }\n\n if (this.center) {\n this.clusterIcon.setCenter(this.center)\n }\n\n this.clusterIcon.useStyle(\n this.markerClusterer.getCalculator()(this.markers, this.markerClusterer.getStyles().length)\n )\n\n this.clusterIcon.show()\n }\n\n isMarkerAlreadyAdded(marker: MarkerExtended): boolean {\n if (this.markers.includes) {\n return this.markers.includes(marker)\n } else {\n for (let i = 0; i < this.markers.length; i++) {\n if (marker === this.markers[i]) {\n return true\n }\n }\n }\n\n return false\n }\n}\n","/* global google */\n/* eslint-disable filenames/match-regex */\nimport { Cluster } from './Cluster'\n\nimport {\n MarkerExtended,\n ClustererOptions,\n ClusterIconStyle,\n TCalculator,\n ClusterIconInfo,\n} from './types'\n\n/**\n * Supports up to 9007199254740991 (Number.MAX_SAFE_INTEGER) markers\n * which is not a problem as max array length is 4294967296 (2**32)\n */\nconst CALCULATOR = function CALCULATOR(\n markers: MarkerExtended[],\n numStyles: number\n): ClusterIconInfo {\n const count = markers.length\n\n const numberOfDigits = count.toString().length\n\n const index = Math.min(numberOfDigits, numStyles)\n\n return {\n text: count.toString(),\n index: index,\n title: '',\n }\n}\n\nconst BATCH_SIZE = 2000\n\nconst BATCH_SIZE_IE = 500\n\nconst IMAGE_PATH =\n 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'\n\nconst IMAGE_EXTENSION = 'png'\n\nconst IMAGE_SIZES = [53, 56, 66, 78, 90]\n\nconst CLUSTERER_CLASS = 'cluster'\n\nexport class Clusterer {\n markers: MarkerExtended[]\n clusters: Cluster[]\n listeners: google.maps.MapsEventListener[]\n activeMap: google.maps.Map | google.maps.StreetViewPanorama | null\n ready: boolean\n gridSize: number\n minClusterSize: number\n maxZoom: number | null\n styles: ClusterIconStyle[]\n title: string\n zoomOnClick: boolean\n averageCenter: boolean\n ignoreHidden: boolean\n enableRetinaIcons: boolean\n imagePath: string\n imageExtension: string\n imageSizes: number[]\n calculator: TCalculator\n batchSize: number\n batchSizeIE: number\n clusterClass: string\n timerRefStatic: number | null\n\n constructor(\n map: google.maps.Map,\n optMarkers: MarkerExtended[] = [],\n optOptions: ClustererOptions = {}\n ) {\n this.extend(Clusterer, google.maps.OverlayView)\n\n this.markers = []\n this.clusters = []\n this.listeners = []\n this.activeMap = null\n this.ready = false\n this.gridSize = optOptions.gridSize || 60\n this.minClusterSize = optOptions.minimumClusterSize || 2\n this.maxZoom = optOptions.maxZoom || null\n this.styles = optOptions.styles || []\n\n this.title = optOptions.title || ''\n\n this.zoomOnClick = true\n\n if (optOptions.zoomOnClick !== undefined) {\n this.zoomOnClick = optOptions.zoomOnClick\n }\n\n this.averageCenter = false\n\n if (optOptions.averageCenter !== undefined) {\n this.averageCenter = optOptions.averageCenter\n }\n\n this.ignoreHidden = false\n\n if (optOptions.ignoreHidden !== undefined) {\n this.ignoreHidden = optOptions.ignoreHidden\n }\n\n this.enableRetinaIcons = false\n\n if (optOptions.enableRetinaIcons !== undefined) {\n this.enableRetinaIcons = optOptions.enableRetinaIcons\n }\n this.imagePath = optOptions.imagePath || IMAGE_PATH\n\n this.imageExtension = optOptions.imageExtension || IMAGE_EXTENSION\n\n this.imageSizes = optOptions.imageSizes || IMAGE_SIZES\n\n this.calculator = optOptions.calculator || CALCULATOR\n\n this.batchSize = optOptions.batchSize || BATCH_SIZE\n\n this.batchSizeIE = optOptions.batchSizeIE || BATCH_SIZE_IE\n\n this.clusterClass = optOptions.clusterClass || CLUSTERER_CLASS\n\n if (navigator.userAgent.toLowerCase().indexOf('msie') !== -1) {\n // Try to avoid IE timeout when processing a huge number of markers:\n this.batchSize = this.batchSizeIE\n }\n\n this.timerRefStatic = null\n\n this.setupStyles()\n\n this.addMarkers(optMarkers, true)\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.setMap(map) // Note: this causes onAdd to be called\n }\n\n onAdd() {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.activeMap = this.getMap()\n\n this.ready = true\n\n this.repaint()\n\n // Add the map event listeners\n this.listeners = [\n google.maps.event.addListener(\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap(),\n 'zoom_changed',\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n () => {\n this.resetViewport(false)\n // Workaround for this Google bug: when map is at level 0 and \"-\" of\n // zoom slider is clicked, a \"zoom_changed\" event is fired even though\n // the map doesn't zoom out any further. In this situation, no \"idle\"\n // event is triggered so the cluster markers that have been removed\n // do not get redrawn. Same goes for a zoom in at maxZoom.\n if (\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap().getZoom() === (this.get('minZoom') || 0) ||\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap().getZoom() === this.get('maxZoom')\n ) {\n google.maps.event.trigger(this, 'idle')\n }\n }\n ),\n google.maps.event.addListener(\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap(),\n 'idle',\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n () => {\n this.redraw()\n }\n ),\n ]\n }\n\n // eslint-disable-next-line @getify/proper-arrows/this\n onRemove() {\n // Put all the managed markers back on the map:\n for (let i = 0; i < this.markers.length; i++) {\n if (this.markers[i].getMap() !== this.activeMap) {\n this.markers[i].setMap(this.activeMap)\n }\n }\n\n // Remove all clusters:\n for (let i = 0; i < this.clusters.length; i++) {\n this.clusters[i].remove()\n }\n\n this.clusters = []\n\n // Remove map event listeners:\n for (let i = 0; i < this.listeners.length; i++) {\n google.maps.event.removeListener(this.listeners[i])\n }\n\n this.listeners = []\n\n this.activeMap = null\n\n this.ready = false\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n draw() {}\n\n setupStyles() {\n if (this.styles.length > 0) {\n return\n }\n\n for (let i = 0; i < this.imageSizes.length; i++) {\n this.styles.push({\n url: this.imagePath + (i + 1) + '.' + this.imageExtension,\n height: this.imageSizes[i],\n width: this.imageSizes[i],\n })\n }\n }\n\n fitMapToMarkers() {\n const markers = this.getMarkers()\n\n const bounds = new google.maps.LatLngBounds()\n\n for (let i = 0; i < markers.length; i++) {\n const position = markers[i].getPosition()\n if (position) {\n bounds.extend(position)\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap().fitBounds(bounds)\n }\n\n getGridSize(): number {\n return this.gridSize\n }\n\n setGridSize(gridSize: number) {\n this.gridSize = gridSize\n }\n\n getMinimumClusterSize(): number {\n return this.minClusterSize\n }\n\n setMinimumClusterSize(minimumClusterSize: number) {\n this.minClusterSize = minimumClusterSize\n }\n\n getMaxZoom(): number | null {\n return this.maxZoom\n }\n\n setMaxZoom(maxZoom: number) {\n this.maxZoom = maxZoom\n }\n\n getStyles(): ClusterIconStyle[] {\n return this.styles\n }\n\n setStyles(styles: ClusterIconStyle[]) {\n this.styles = styles\n }\n\n getTitle(): string {\n return this.title\n }\n\n setTitle(title: string) {\n this.title = title\n }\n\n getZoomOnClick(): boolean {\n return this.zoomOnClick\n }\n\n setZoomOnClick(zoomOnClick: boolean) {\n this.zoomOnClick = zoomOnClick\n }\n\n getAverageCenter(): boolean {\n return this.averageCenter\n }\n\n setAverageCenter(averageCenter: boolean) {\n this.averageCenter = averageCenter\n }\n\n getIgnoreHidden(): boolean {\n return this.ignoreHidden\n }\n\n setIgnoreHidden(ignoreHidden: boolean) {\n this.ignoreHidden = ignoreHidden\n }\n\n getEnableRetinaIcons(): boolean {\n return this.enableRetinaIcons\n }\n\n setEnableRetinaIcons(enableRetinaIcons: boolean) {\n this.enableRetinaIcons = enableRetinaIcons\n }\n\n getImageExtension(): string {\n return this.imageExtension\n }\n\n setImageExtension(imageExtension: string) {\n this.imageExtension = imageExtension\n }\n\n getImagePath(): string {\n return this.imagePath\n }\n\n setImagePath(imagePath: string) {\n this.imagePath = imagePath\n }\n\n getImageSizes(): number[] {\n return this.imageSizes\n }\n\n setImageSizes(imageSizes: number[]) {\n this.imageSizes = imageSizes\n }\n\n getCalculator(): TCalculator {\n return this.calculator\n }\n\n setCalculator(calculator: TCalculator) {\n this.calculator = calculator\n }\n\n getBatchSizeIE(): number {\n return this.batchSizeIE\n }\n\n setBatchSizeIE(batchSizeIE: number) {\n this.batchSizeIE = batchSizeIE\n }\n\n getClusterClass(): string {\n return this.clusterClass\n }\n\n setClusterClass(clusterClass: string) {\n this.clusterClass = clusterClass\n }\n\n getMarkers(): MarkerExtended[] {\n return this.markers\n }\n\n getTotalMarkers(): number {\n return this.markers.length\n }\n\n getClusters(): Cluster[] {\n return this.clusters\n }\n\n getTotalClusters(): number {\n return this.clusters.length\n }\n\n addMarker(marker: MarkerExtended, optNoDraw: boolean) {\n this.pushMarkerTo(marker)\n\n if (!optNoDraw) {\n this.redraw()\n }\n }\n\n addMarkers(markers: MarkerExtended[], optNoDraw: boolean) {\n for (const key in markers) {\n if (markers.hasOwnProperty(key)) {\n this.pushMarkerTo(markers[key])\n }\n }\n\n if (!optNoDraw) {\n this.redraw()\n }\n }\n\n pushMarkerTo(marker: MarkerExtended) {\n // If the marker is draggable add a listener so we can update the clusters on the dragend:\n if (marker.getDraggable()) {\n // eslint-disable-next-line @getify/proper-arrows/name, @getify/proper-arrows/this\n google.maps.event.addListener(marker, 'dragend', () => {\n if (this.ready) {\n marker.isAdded = false\n\n this.repaint()\n }\n })\n }\n\n marker.isAdded = false\n\n this.markers.push(marker)\n }\n\n removeMarker_(marker: MarkerExtended): boolean {\n let index = -1\n\n if (this.markers.indexOf) {\n index = this.markers.indexOf(marker)\n } else {\n for (let i = 0; i < this.markers.length; i++) {\n if (marker === this.markers[i]) {\n index = i\n\n break\n }\n }\n }\n\n if (index === -1) {\n // Marker is not in our list of markers, so do nothing:\n return false\n }\n\n marker.setMap(null)\n\n this.markers.splice(index, 1) // Remove the marker from the list of managed markers\n\n return true\n }\n\n removeMarker(marker: MarkerExtended, optNoDraw: boolean): boolean {\n const removed = this.removeMarker_(marker)\n\n if (!optNoDraw && removed) {\n this.repaint()\n }\n\n return removed\n }\n\n removeMarkers(markers: MarkerExtended[], optNoDraw: boolean): boolean {\n let removed = false\n\n for (let i = 0; i < markers.length; i++) {\n removed = removed || this.removeMarker_(markers[i])\n }\n\n if (!optNoDraw && removed) {\n this.repaint()\n }\n\n return removed\n }\n\n clearMarkers() {\n this.resetViewport(true)\n\n this.markers = []\n }\n\n repaint() {\n const oldClusters = this.clusters.slice()\n\n this.clusters = []\n\n this.resetViewport(false)\n\n this.redraw()\n\n // Remove the old clusters.\n // Do it in a timeout to prevent blinking effect.\n setTimeout(function timeout() {\n for (let i = 0; i < oldClusters.length; i++) {\n oldClusters[i].remove()\n }\n }, 0)\n }\n\n getExtendedBounds(bounds: google.maps.LatLngBounds): google.maps.LatLngBounds {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n const projection = this.getProjection()\n // Convert the points to pixels and the extend out by the grid size.\n const trPix = projection.fromLatLngToDivPixel(\n // Turn the bounds into latlng.\n new google.maps.LatLng(bounds.getNorthEast().lat(), bounds.getNorthEast().lng())\n )\n\n trPix.x += this.gridSize\n trPix.y -= this.gridSize\n\n const blPix = projection.fromLatLngToDivPixel(\n // Turn the bounds into latlng.\n new google.maps.LatLng(bounds.getSouthWest().lat(), bounds.getSouthWest().lng())\n )\n\n blPix.x -= this.gridSize\n blPix.y += this.gridSize\n\n // Extend the bounds to contain the new bounds.\n bounds.extend(\n // Convert the pixel points back to LatLng nw\n projection.fromDivPixelToLatLng(trPix)\n )\n\n bounds.extend(\n // Convert the pixel points back to LatLng sw\n projection.fromDivPixelToLatLng(blPix)\n )\n\n return bounds\n }\n\n redraw() {\n // Redraws all the clusters.\n this.createClusters(0)\n }\n\n resetViewport(optHide: boolean) {\n // Remove all the clusters\n for (let i = 0; i < this.clusters.length; i++) {\n this.clusters[i].remove()\n }\n\n this.clusters = []\n\n // Reset the markers to not be added and to be removed from the map.\n for (let i = 0; i < this.markers.length; i++) {\n const marker = this.markers[i]\n\n marker.isAdded = false\n\n if (optHide) {\n marker.setMap(null)\n }\n }\n }\n\n distanceBetweenPoints(p1: google.maps.LatLng, p2: google.maps.LatLng): number {\n const R = 6371 // Radius of the Earth in km\n\n const dLat = ((p2.lat() - p1.lat()) * Math.PI) / 180\n const dLon = ((p2.lng() - p1.lng()) * Math.PI) / 180\n\n const a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos((p1.lat() * Math.PI) / 180) *\n Math.cos((p2.lat() * Math.PI) / 180) *\n Math.sin(dLon / 2) *\n Math.sin(dLon / 2)\n\n return R * (2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)))\n }\n\n isMarkerInBounds(marker: MarkerExtended, bounds: google.maps.LatLngBounds): boolean {\n const position = marker.getPosition()\n\n if (position) {\n return bounds.contains(position)\n }\n\n return false\n }\n\n addToClosestCluster(marker: MarkerExtended) {\n let cluster\n\n let distance = 40000 // Some large number\n\n let clusterToAddTo = null\n\n for (let i = 0; i < this.clusters.length; i++) {\n cluster = this.clusters[i]\n\n const center = cluster.getCenter()\n\n const position = marker.getPosition()\n\n if (center && position) {\n const d = this.distanceBetweenPoints(center, position)\n\n if (d < distance) {\n distance = d\n\n clusterToAddTo = cluster\n }\n }\n }\n\n if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) {\n clusterToAddTo.addMarker(marker)\n } else {\n cluster = new Cluster(this)\n\n cluster.addMarker(marker)\n\n this.clusters.push(cluster)\n }\n }\n\n createClusters(iFirst: number) {\n if (!this.ready) {\n return\n }\n\n // Cancel previous batch processing if we're working on the first batch:\n if (iFirst === 0) {\n /**\n * This event is fired when the <code>Clusterer</code> begins\n * clustering markers.\n * @name Clusterer#clusteringbegin\n * @param {Clusterer} mc The Clusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, 'clusteringbegin', this)\n\n if (this.timerRefStatic !== null) {\n window.clearTimeout(this.timerRefStatic)\n\n // @ts-ignore\n delete this.timerRefStatic\n }\n }\n\n // Get our current map view bounds.\n // Create a new bounds object so we don't affect the map.\n //\n // See Comments 9 & 11 on Issue 3651 relating to this workaround for a Google Maps bug:\n const mapBounds =\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap().getZoom() > 3\n ? new google.maps.LatLngBounds(\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap()\n .getBounds()\n .getSouthWest(),\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.getMap()\n .getBounds()\n .getNorthEast()\n )\n : new google.maps.LatLngBounds(\n new google.maps.LatLng(85.02070771743472, -178.48388434375),\n new google.maps.LatLng(-85.08136444384544, 178.00048865625)\n )\n\n const bounds = this.getExtendedBounds(mapBounds)\n\n const iLast = Math.min(iFirst + this.batchSize, this.markers.length)\n\n for (let i = iFirst; i < iLast; i++) {\n const marker = this.markers[i]\n\n if (!marker.isAdded && this.isMarkerInBounds(marker, bounds)) {\n if (!this.ignoreHidden || (this.ignoreHidden && marker.getVisible())) {\n this.addToClosestCluster(marker)\n }\n }\n }\n\n if (iLast < this.markers.length) {\n this.timerRefStatic = window.setTimeout(\n // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name\n () => {\n this.createClusters(iLast)\n },\n 0\n )\n } else {\n this.timerRefStatic = null\n\n /**\n * This event is fired when the <code>Clusterer</code> stops\n * clustering markers.\n * @name Clusterer#clusteringend\n * @param {Clusterer} mc The Clusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, 'clusteringend', this)\n\n for (let i = 0; i < this.clusters.length; i++) {\n this.clusters[i].updateIcon()\n }\n }\n }\n\n extend(obj1: any, obj2: any): any {\n return function applyExtend(object: any) {\n // eslint-disable-next-line guard-for-in\n for (const property in object.prototype) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n this.prototype[property] = object.prototype[property]\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\n // @ts-ignore\n return this\n }.apply(obj1, [obj2])\n }\n}\n"],"names":["cluster","styles","getClusterer","extend","ClusterIcon","google","maps","OverlayView","this","clusterClassName","getClusterClass","className","center","undefined","div","sums","visible","boundsChangedListener","url","height","width","anchorText","anchorIcon","textColor","textSize","textDecoration","fontWeight","fontStyle","fontFamily","backgroundPosition","setMap","getMap","cMouseDownInCluster","cDraggingMapByCluster","document","createElement","show","getPanes","overlayMouseTarget","appendChild","event","addListener","addDomListener","markerClusterer_1","_this","trigger","getZoomOnClick","maxZoom_1","getMaxZoom","bounds_1","getBounds","fitBounds","setTimeout","getZoom","setZoom","cancelBubble","stopPropagation","parentNode","hide","removeListener","clearInstanceListeners","removeChild","_a","getPosFromLatLng","x","y","style","top","left","display","img","divTitle","bp","split","spriteH","parseInt","replace","spriteV","pos","title","getTitle","cssText","createCss","enableRetinaIcons","innerHTML","text","getStyles","Math","min","length","max","index","push","join","latlng","getProjection","fromLatLngToDivPixel","markerClusterer","map","gridSize","getGridSize","minClusterSize","getMinimumClusterSize","averageCenter","getAverageCenter","markers","bounds","clusterIcon","Cluster","LatLngBounds","getMarkers","i","position","getPosition","marker","isMarkerAlreadyAdded","length_1","LatLng","lat","lng","calculateBounds","isAdded","mCount","maxZoom","zoom","contains","getExtendedBounds","setCenter","useStyle","getCalculator","includes","CALCULATOR","numStyles","count","numberOfDigits","toString","IMAGE_SIZES","optMarkers","optOptions","Clusterer","clusters","listeners","activeMap","ready","minimumClusterSize","zoomOnClick","ignoreHidden","imagePath","imageExtension","imageSizes","calculator","batchSize","batchSizeIE","clusterClass","navigator","userAgent","toLowerCase","indexOf","timerRefStatic","setupStyles","addMarkers","repaint","resetViewport","get","redraw","remove","optNoDraw","pushMarkerTo","key","hasOwnProperty","getDraggable","splice","removed","removeMarker_","oldClusters","slice","projection","trPix","getNorthEast","blPix","getSouthWest","fromDivPixelToLatLng","createClusters","optHide","p1","p2","dLat","PI","dLon","a","sin","cos","atan2","sqrt","distance","clusterToAddTo","getCenter","d","distanceBetweenPoints","isMarkerInClusterBounds","addMarker","iFirst","window","clearTimeout","mapBounds","iLast","isMarkerInBounds","getVisible","addToClosestCluster","updateIcon","obj1","obj2","object","property","prototype","apply"],"mappings":"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"}
1
+ {"version":3,"file":"cjs.min.js","sources":["../src/ClusterIcon.tsx","../src/Cluster.tsx","../src/Clusterer.tsx"],"sourcesContent":["/* global google */\n/* eslint-disable filenames/match-regex */\nimport { Cluster } from './Cluster'\n\nimport { ClusterIconStyle, ClusterIconInfo } from './types'\n\nexport class ClusterIcon {\n cluster: Cluster\n className: string\n clusterClassName: string\n styles: ClusterIconStyle[]\n center: google.maps.LatLng | undefined\n div: HTMLDivElement | null\n sums: ClusterIconInfo | null\n visible: boolean\n url: string\n height: number\n width: number\n anchorText: number[]\n anchorIcon: number[]\n textColor: string\n textSize: number\n textDecoration: string\n fontWeight: string\n fontStyle: string\n fontFamily: string\n backgroundPosition: string\n\n boundsChangedListener: google.maps.MapsEventListener | null\n\n constructor(cluster: Cluster, styles: ClusterIconStyle[]) {\n cluster.getClusterer().extend(ClusterIcon, google.maps.OverlayView)\n this.cluster = cluster\n this.clusterClassName = this.cluster.getClusterer().getClusterClass()\n this.className = this.clusterClassName\n this.styles = styles\n this.center = undefined\n this.div = null\n this.sums = null\n this.visible = false\n this.boundsChangedListener = null\n this.url = ''\n this.height = 0\n this.width = 0\n this.anchorText = [0, 0]\n this.anchorIcon = [0, 0]\n this.textColor = 'black'\n this.textSize = 11\n this.textDecoration = 'none'\n this.fontWeight = 'bold'\n this.fontStyle = 'normal'\n this.fontFamily = 'Arial,sans-serif'\n this.backgroundPosition = '0 0'\n // @ts-ignore\n this.setMap(cluster.getMap()) // Note: this causes onAdd to be called\n }\n\n onAdd() {\n let cMouseDownInCluster: boolean\n let cDraggingMapByCluster: boolean\n\n this.div = document.createElement('div')\n this.div.className = this.className\n if (this.visible) {\n this.show()\n }\n\n // @ts-ignore\n this.getPanes().overlayMouseTarget.appendChild(this.div)\n\n // Fix for Issue 157\n this.boundsChangedListener = google.maps.event.addListener(\n // @ts-ignore\n this.getMap(),\n 'boundschanged',\n function boundsChanged() {\n cDraggingMapByCluster = cMouseDownInCluster\n }\n )\n\n google.maps.event.addDomListener(this.div, 'mousedown', function onMouseDown() {\n cMouseDownInCluster = true\n cDraggingMapByCluster = false\n })\n\n google.maps.event.addDomListener(\n this.div,\n 'click',\n (event: Event) => {\n cMouseDownInCluster = false\n\n if (!cDraggingMapByCluster) {\n const markerClusterer = this.cluster.getClusterer()\n\n /**\n * This event is fired when a cluster marker is clicked.\n * @name MarkerClusterer#click\n * @param {Cluster} c The cluster that was clicked.\n * @event\n */\n google.maps.event.trigger(markerClusterer, 'click', this.cluster)\n google.maps.event.trigger(markerClusterer, 'clusterclick', this.cluster) // deprecated name\n\n // The default click handler follows. Disable it by setting\n // the zoomOnClick property to false.\n if (markerClusterer.getZoomOnClick()) {\n // Zoom into the cluster.\n const maxZoom = markerClusterer.getMaxZoom()\n\n const bounds = this.cluster.getBounds()\n\n // @ts-ignore\n markerClusterer.getMap().fitBounds(bounds)\n\n // There is a fix for Issue 170 here:\n setTimeout(function timeout() {\n // @ts-ignore\n markerClusterer.getMap().fitBounds(bounds)\n\n // Don't zoom beyond the max zoom level\n // @ts-ignore\n if (maxZoom !== null && markerClusterer.getMap().getZoom() > maxZoom) {\n // @ts-ignore\n markerClusterer.getMap().setZoom(maxZoom + 1)\n }\n }, 100)\n }\n\n // Prevent event propagation to the map:\n event.cancelBubble = true\n\n if (event.stopPropagation) {\n event.stopPropagation()\n }\n }\n }\n )\n\n google.maps.event.addDomListener(\n this.div,\n 'mouseover',\n () => {\n /**\n * This event is fired when the mouse moves over a cluster marker.\n * @name MarkerClusterer#mouseover\n * @param {Cluster} c The cluster that the mouse moved over.\n * @event\n */\n google.maps.event.trigger(this.cluster.getClusterer(), 'mouseover', this.cluster)\n }\n )\n\n google.maps.event.addDomListener(\n this.div,\n 'mouseout',\n () => {\n /**\n * This event is fired when the mouse moves out of a cluster marker.\n * @name MarkerClusterer#mouseout\n * @param {Cluster} c The cluster that the mouse moved out of.\n * @event\n */\n google.maps.event.trigger(this.cluster.getClusterer(), 'mouseout', this.cluster)\n }\n )\n }\n\n onRemove() {\n if (this.div && this.div.parentNode) {\n this.hide()\n\n if (this.boundsChangedListener !== null) {\n google.maps.event.removeListener(this.boundsChangedListener)\n }\n\n google.maps.event.clearInstanceListeners(this.div)\n\n this.div.parentNode.removeChild(this.div)\n\n this.div = null\n }\n }\n\n draw() {\n if (this.visible && this.div !== null && this.center) {\n const { x, y } = this.getPosFromLatLng(this.center)\n\n this.div.style.top = y + 'px'\n this.div.style.left = x + 'px'\n }\n }\n\n hide() {\n if (this.div) {\n this.div.style.display = 'none'\n }\n\n this.visible = false\n }\n\n show() {\n if (this.div && this.center) {\n let divTitle = ''\n\n // NOTE: values must be specified in px units\n const bp = this.backgroundPosition.split(' ')\n\n const spriteH = parseInt(bp[0].replace(/^\\s+|\\s+$/g, ''), 10)\n const spriteV = parseInt(bp[1].replace(/^\\s+|\\s+$/g, ''), 10)\n\n const pos = this.getPosFromLatLng(this.center)\n\n if (this.sums === null || typeof this.sums.title === 'undefined' || this.sums.title === '') {\n divTitle = this.cluster.getClusterer().getTitle()\n } else {\n divTitle = this.sums.title\n }\n\n this.div.style.cursor = 'pointer'\n this.div.style.position = 'absolute'\n this.div.style.top = `${pos.y}px`\n this.div.style.left = `${pos.x}px`\n this.div.style.width = `${this.width}px`\n this.div.style.height = `${this.height}px`\n\n const img = document.createElement('img')\n img.alt = divTitle\n img.src = this.url\n img.style.position = 'absolute'\n img.style.top = `${spriteV}px`\n img.style.left = `${spriteH}px`\n\n if (!this.cluster.getClusterer().enableRetinaIcons) {\n img.style.clip = `rect(-${spriteV}px, -${spriteH + this.width}px, -${spriteV + this.height}, -${spriteH})`\n }\n\n const textElm = document.createElement('div')\n textElm.style.position = 'absolute'\n textElm.style.top = `${this.anchorText[0]}px`\n textElm.style.left = `${this.anchorText[1]}px`\n textElm.style.color = this.textColor\n textElm.style.fontSize = `${this.textSize}px`\n textElm.style.fontFamily = this.fontFamily\n textElm.style.fontWeight = this.fontWeight\n textElm.style.fontStyle = this.fontStyle\n textElm.style.textDecoration = this.textDecoration\n textElm.style.textAlign = 'center'\n textElm.style.width = `${this.width}px`\n textElm.style.lineHeight = `${this.height}px`\n textElm.innerText = `${this.sums?.text}`\n\n this.div.innerHTML = ''\n this.div.appendChild(img)\n this.div.appendChild(textElm)\n this.div.title = divTitle\n this.div.style.display = ''\n }\n\n this.visible = true\n }\n\n useStyle(sums: ClusterIconInfo) {\n this.sums = sums\n const styles = this.cluster.getClusterer().getStyles()\n const style = styles[Math.min(styles.length - 1, Math.max(0, sums.index - 1))]\n\n this.url = style.url\n this.height = style.height\n this.width = style.width\n\n if (style.className) this.className = `${this.clusterClassName} ${style.className}`\n\n this.anchorText = style.anchorText || [0, 0]\n this.anchorIcon = style.anchorIcon || [this.height / 2, this.width / 2]\n\n this.textColor = style.textColor || 'black'\n\n this.textSize = style.textSize || 11\n\n this.textDecoration = style.textDecoration || 'none'\n\n this.fontWeight = style.fontWeight || 'bold'\n\n this.fontStyle = style.fontStyle || 'normal'\n\n this.fontFamily = style.fontFamily || 'Arial,sans-serif'\n\n this.backgroundPosition = style.backgroundPosition || '0 0'\n }\n\n setCenter(center: google.maps.LatLng) {\n this.center = center\n }\n\n getPosFromLatLng(latlng: google.maps.LatLng): google.maps.Point {\n // @ts-ignore\n const pos = this.getProjection().fromLatLngToDivPixel(latlng)\n\n pos.x -= this.anchorIcon[1]\n\n pos.y -= this.anchorIcon[0]\n\n // pos.x = pos.x\n\n // pos.y = pos.y\n\n return pos\n }\n}\n","/* global google */\n/* eslint-disable filenames/match-regex */\nimport { Clusterer } from './Clusterer'\n\nimport { ClusterIcon } from './ClusterIcon'\n\nimport { MarkerExtended } from './types'\n\nexport class Cluster {\n markerClusterer: Clusterer\n map: google.maps.Map | google.maps.StreetViewPanorama\n gridSize: number\n minClusterSize: number\n averageCenter: boolean\n markers: MarkerExtended[]\n center: google.maps.LatLng | undefined\n bounds: google.maps.LatLngBounds | null\n clusterIcon: ClusterIcon\n\n constructor(markerClusterer: Clusterer) {\n this.markerClusterer = markerClusterer\n // @ts-ignore\n this.map = this.markerClusterer.getMap()\n\n this.gridSize = this.markerClusterer.getGridSize()\n\n this.minClusterSize = this.markerClusterer.getMinimumClusterSize()\n\n this.averageCenter = this.markerClusterer.getAverageCenter()\n\n this.markers = []\n\n this.center = undefined\n\n this.bounds = null\n\n this.clusterIcon = new ClusterIcon(this, this.markerClusterer.getStyles())\n }\n\n getSize(): number {\n return this.markers.length\n }\n\n getMarkers(): MarkerExtended[] {\n return this.markers\n }\n\n getCenter(): google.maps.LatLng | undefined {\n return this.center\n }\n\n getMap(): google.maps.Map | google.maps.StreetViewPanorama {\n return this.map\n }\n\n getClusterer(): Clusterer {\n return this.markerClusterer\n }\n\n getBounds(): google.maps.LatLngBounds {\n const bounds = new google.maps.LatLngBounds(this.center, this.center)\n\n const markers = this.getMarkers()\n\n for (let i = 0; i < markers.length; i++) {\n const position = markers[i].getPosition()\n\n if (position) {\n bounds.extend(position)\n }\n }\n\n return bounds\n }\n\n remove() {\n // @ts-ignore\n this.clusterIcon.setMap(null)\n\n this.markers = []\n\n // @ts-ignore\n delete this.markers\n }\n\n addMarker(marker: MarkerExtended): boolean {\n if (this.isMarkerAlreadyAdded(marker)) {\n return false\n }\n\n if (!this.center) {\n const position = marker.getPosition()\n\n if (position) {\n this.center = position\n\n this.calculateBounds()\n }\n } else {\n if (this.averageCenter) {\n const position = marker.getPosition()\n\n if (position) {\n const length = this.markers.length + 1\n\n this.center = new google.maps.LatLng(\n (this.center.lat() * (length - 1) + position.lat()) / length,\n (this.center.lng() * (length - 1) + position.lng()) / length\n )\n\n this.calculateBounds()\n }\n }\n }\n\n marker.isAdded = true\n\n this.markers.push(marker)\n\n const mCount = this.markers.length\n\n const maxZoom = this.markerClusterer.getMaxZoom()\n\n const zoom = this.map.getZoom()\n\n if (maxZoom !== null && typeof zoom !== 'undefined' && zoom > maxZoom) {\n // Zoomed in past max zoom, so show the marker.\n if (marker.getMap() !== this.map) {\n marker.setMap(this.map)\n }\n } else if (mCount < this.minClusterSize) {\n // Min cluster size not reached so show the marker.\n if (marker.getMap() !== this.map) {\n marker.setMap(this.map)\n }\n } else if (mCount === this.minClusterSize) {\n // Hide the markers that were showing.\n for (let i = 0; i < mCount; i++) {\n this.markers[i].setMap(null)\n }\n } else {\n marker.setMap(null)\n }\n\n return true\n }\n\n isMarkerInClusterBounds(marker: MarkerExtended): boolean {\n if (this.bounds !== null) {\n const position = marker.getPosition()\n\n if (position) {\n return this.bounds.contains(position)\n }\n }\n\n return false\n }\n\n calculateBounds() {\n this.bounds = this.markerClusterer.getExtendedBounds(\n new google.maps.LatLngBounds(this.center, this.center)\n )\n }\n\n updateIcon() {\n const mCount = this.markers.length\n\n const maxZoom = this.markerClusterer.getMaxZoom()\n\n const zoom = this.map.getZoom()\n\n if (maxZoom !== null && typeof zoom !== 'undefined' && zoom > maxZoom) {\n this.clusterIcon.hide()\n\n return\n }\n\n if (mCount < this.minClusterSize) {\n // Min cluster size not yet reached.\n this.clusterIcon.hide()\n\n return\n }\n\n if (this.center) {\n this.clusterIcon.setCenter(this.center)\n }\n\n this.clusterIcon.useStyle(\n this.markerClusterer.getCalculator()(this.markers, this.markerClusterer.getStyles().length)\n )\n\n this.clusterIcon.show()\n }\n\n isMarkerAlreadyAdded(marker: MarkerExtended): boolean {\n if (this.markers.includes) {\n return this.markers.includes(marker)\n } else {\n for (let i = 0; i < this.markers.length; i++) {\n if (marker === this.markers[i]) {\n return true\n }\n }\n }\n\n return false\n }\n}\n","/* global google */\n/* eslint-disable filenames/match-regex */\nimport { Cluster } from './Cluster'\n\nimport {\n MarkerExtended,\n ClustererOptions,\n ClusterIconStyle,\n TCalculator,\n ClusterIconInfo,\n} from './types'\n\n/**\n * Supports up to 9007199254740991 (Number.MAX_SAFE_INTEGER) markers\n * which is not a problem as max array length is 4294967296 (2**32)\n */\nconst CALCULATOR = function CALCULATOR(\n markers: MarkerExtended[],\n numStyles: number\n): ClusterIconInfo {\n const count = markers.length\n\n const numberOfDigits = count.toString().length\n\n const index = Math.min(numberOfDigits, numStyles)\n\n return {\n text: count.toString(),\n index,\n title: '',\n }\n}\n\nconst BATCH_SIZE = 2000\n\nconst BATCH_SIZE_IE = 500\n\nconst IMAGE_PATH =\n 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'\n\nconst IMAGE_EXTENSION = 'png'\n\nconst IMAGE_SIZES = [53, 56, 66, 78, 90]\n\nconst CLUSTERER_CLASS = 'cluster'\n\nexport class Clusterer {\n markers: MarkerExtended[]\n clusters: Cluster[]\n listeners: google.maps.MapsEventListener[]\n activeMap: google.maps.Map | google.maps.StreetViewPanorama | null\n ready: boolean\n gridSize: number\n minClusterSize: number\n maxZoom: number | null\n styles: ClusterIconStyle[]\n title: string\n zoomOnClick: boolean\n averageCenter: boolean\n ignoreHidden: boolean\n enableRetinaIcons: boolean\n imagePath: string\n imageExtension: string\n imageSizes: number[]\n calculator: TCalculator\n batchSize: number\n batchSizeIE: number\n clusterClass: string\n timerRefStatic: number | null\n\n constructor(\n map: google.maps.Map,\n optMarkers: MarkerExtended[] = [],\n optOptions: ClustererOptions = {}\n ) {\n this.extend(Clusterer, google.maps.OverlayView)\n\n this.markers = []\n this.clusters = []\n this.listeners = []\n this.activeMap = null\n this.ready = false\n this.gridSize = optOptions.gridSize || 60\n this.minClusterSize = optOptions.minimumClusterSize || 2\n this.maxZoom = optOptions.maxZoom || null\n this.styles = optOptions.styles || []\n\n this.title = optOptions.title || ''\n\n this.zoomOnClick = true\n\n if (optOptions.zoomOnClick !== undefined) {\n this.zoomOnClick = optOptions.zoomOnClick\n }\n\n this.averageCenter = false\n\n if (optOptions.averageCenter !== undefined) {\n this.averageCenter = optOptions.averageCenter\n }\n\n this.ignoreHidden = false\n\n if (optOptions.ignoreHidden !== undefined) {\n this.ignoreHidden = optOptions.ignoreHidden\n }\n\n this.enableRetinaIcons = false\n\n if (optOptions.enableRetinaIcons !== undefined) {\n this.enableRetinaIcons = optOptions.enableRetinaIcons\n }\n this.imagePath = optOptions.imagePath || IMAGE_PATH\n\n this.imageExtension = optOptions.imageExtension || IMAGE_EXTENSION\n\n this.imageSizes = optOptions.imageSizes || IMAGE_SIZES\n\n this.calculator = optOptions.calculator || CALCULATOR\n\n this.batchSize = optOptions.batchSize || BATCH_SIZE\n\n this.batchSizeIE = optOptions.batchSizeIE || BATCH_SIZE_IE\n\n this.clusterClass = optOptions.clusterClass || CLUSTERER_CLASS\n\n if (navigator.userAgent.toLowerCase().indexOf('msie') !== -1) {\n // Try to avoid IE timeout when processing a huge number of markers:\n this.batchSize = this.batchSizeIE\n }\n\n this.timerRefStatic = null\n\n this.setupStyles()\n\n this.addMarkers(optMarkers, true)\n // @ts-ignore\n this.setMap(map) // Note: this causes onAdd to be called\n }\n\n onAdd() {\n // @ts-ignore\n this.activeMap = this.getMap()\n\n this.ready = true\n\n this.repaint()\n\n // Add the map event listeners\n this.listeners = [\n google.maps.event.addListener(\n // @ts-ignore\n this.getMap(),\n 'zoom_changed',\n () => {\n this.resetViewport(false)\n // Workaround for this Google bug: when map is at level 0 and \"-\" of\n // zoom slider is clicked, a \"zoom_changed\" event is fired even though\n // the map doesn't zoom out any further. In this situation, no \"idle\"\n // event is triggered so the cluster markers that have been removed\n // do not get redrawn. Same goes for a zoom in at maxZoom.\n if (\n // @ts-ignore\n this.getMap().getZoom() === (this.get('minZoom') || 0) ||\n // @ts-ignore\n this.getMap().getZoom() === this.get('maxZoom')\n ) {\n google.maps.event.trigger(this, 'idle')\n }\n }\n ),\n google.maps.event.addListener(\n // @ts-ignore\n this.getMap(),\n 'idle',\n () => {\n this.redraw()\n }\n ),\n ]\n }\n\n onRemove() {\n // Put all the managed markers back on the map:\n for (let i = 0; i < this.markers.length; i++) {\n if (this.markers[i].getMap() !== this.activeMap) {\n this.markers[i].setMap(this.activeMap)\n }\n }\n\n // Remove all clusters:\n for (let i = 0; i < this.clusters.length; i++) {\n this.clusters[i].remove()\n }\n\n this.clusters = []\n\n // Remove map event listeners:\n for (let i = 0; i < this.listeners.length; i++) {\n google.maps.event.removeListener(this.listeners[i])\n }\n\n this.listeners = []\n\n this.activeMap = null\n\n this.ready = false\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n draw() {}\n\n setupStyles() {\n if (this.styles.length > 0) {\n return\n }\n\n for (let i = 0; i < this.imageSizes.length; i++) {\n this.styles.push({\n url: this.imagePath + (i + 1) + '.' + this.imageExtension,\n height: this.imageSizes[i],\n width: this.imageSizes[i],\n })\n }\n }\n\n fitMapToMarkers() {\n const markers = this.getMarkers()\n\n const bounds = new google.maps.LatLngBounds()\n\n for (let i = 0; i < markers.length; i++) {\n const position = markers[i].getPosition()\n if (position) {\n bounds.extend(position)\n }\n }\n\n // @ts-ignore\n this.getMap().fitBounds(bounds)\n }\n\n getGridSize(): number {\n return this.gridSize\n }\n\n setGridSize(gridSize: number) {\n this.gridSize = gridSize\n }\n\n getMinimumClusterSize(): number {\n return this.minClusterSize\n }\n\n setMinimumClusterSize(minimumClusterSize: number) {\n this.minClusterSize = minimumClusterSize\n }\n\n getMaxZoom(): number | null {\n return this.maxZoom\n }\n\n setMaxZoom(maxZoom: number) {\n this.maxZoom = maxZoom\n }\n\n getStyles(): ClusterIconStyle[] {\n return this.styles\n }\n\n setStyles(styles: ClusterIconStyle[]) {\n this.styles = styles\n }\n\n getTitle(): string {\n return this.title\n }\n\n setTitle(title: string) {\n this.title = title\n }\n\n getZoomOnClick(): boolean {\n return this.zoomOnClick\n }\n\n setZoomOnClick(zoomOnClick: boolean) {\n this.zoomOnClick = zoomOnClick\n }\n\n getAverageCenter(): boolean {\n return this.averageCenter\n }\n\n setAverageCenter(averageCenter: boolean) {\n this.averageCenter = averageCenter\n }\n\n getIgnoreHidden(): boolean {\n return this.ignoreHidden\n }\n\n setIgnoreHidden(ignoreHidden: boolean) {\n this.ignoreHidden = ignoreHidden\n }\n\n getEnableRetinaIcons(): boolean {\n return this.enableRetinaIcons\n }\n\n setEnableRetinaIcons(enableRetinaIcons: boolean) {\n this.enableRetinaIcons = enableRetinaIcons\n }\n\n getImageExtension(): string {\n return this.imageExtension\n }\n\n setImageExtension(imageExtension: string) {\n this.imageExtension = imageExtension\n }\n\n getImagePath(): string {\n return this.imagePath\n }\n\n setImagePath(imagePath: string) {\n this.imagePath = imagePath\n }\n\n getImageSizes(): number[] {\n return this.imageSizes\n }\n\n setImageSizes(imageSizes: number[]) {\n this.imageSizes = imageSizes\n }\n\n getCalculator(): TCalculator {\n return this.calculator\n }\n\n setCalculator(calculator: TCalculator) {\n this.calculator = calculator\n }\n\n getBatchSizeIE(): number {\n return this.batchSizeIE\n }\n\n setBatchSizeIE(batchSizeIE: number) {\n this.batchSizeIE = batchSizeIE\n }\n\n getClusterClass(): string {\n return this.clusterClass\n }\n\n setClusterClass(clusterClass: string) {\n this.clusterClass = clusterClass\n }\n\n getMarkers(): MarkerExtended[] {\n return this.markers\n }\n\n getTotalMarkers(): number {\n return this.markers.length\n }\n\n getClusters(): Cluster[] {\n return this.clusters\n }\n\n getTotalClusters(): number {\n return this.clusters.length\n }\n\n addMarker(marker: MarkerExtended, optNoDraw: boolean) {\n this.pushMarkerTo(marker)\n\n if (!optNoDraw) {\n this.redraw()\n }\n }\n\n addMarkers(markers: MarkerExtended[], optNoDraw: boolean) {\n for (const key in markers) {\n if (Object.prototype.hasOwnProperty.call(markers, key)) {\n this.pushMarkerTo(markers[key])\n }\n }\n\n if (!optNoDraw) {\n this.redraw()\n }\n }\n\n pushMarkerTo(marker: MarkerExtended) {\n // If the marker is draggable add a listener so we can update the clusters on the dragend:\n if (marker.getDraggable()) {\n google.maps.event.addListener(marker, 'dragend', () => {\n if (this.ready) {\n marker.isAdded = false\n\n this.repaint()\n }\n })\n }\n\n marker.isAdded = false\n\n this.markers.push(marker)\n }\n\n removeMarker_(marker: MarkerExtended): boolean {\n let index = -1\n\n if (this.markers.indexOf) {\n index = this.markers.indexOf(marker)\n } else {\n for (let i = 0; i < this.markers.length; i++) {\n if (marker === this.markers[i]) {\n index = i\n\n break\n }\n }\n }\n\n if (index === -1) {\n // Marker is not in our list of markers, so do nothing:\n return false\n }\n\n marker.setMap(null)\n\n this.markers.splice(index, 1) // Remove the marker from the list of managed markers\n\n return true\n }\n\n removeMarker(marker: MarkerExtended, optNoDraw: boolean): boolean {\n const removed = this.removeMarker_(marker)\n\n if (!optNoDraw && removed) {\n this.repaint()\n }\n\n return removed\n }\n\n removeMarkers(markers: MarkerExtended[], optNoDraw: boolean): boolean {\n let removed = false\n\n for (let i = 0; i < markers.length; i++) {\n removed = removed || this.removeMarker_(markers[i])\n }\n\n if (!optNoDraw && removed) {\n this.repaint()\n }\n\n return removed\n }\n\n clearMarkers() {\n this.resetViewport(true)\n\n this.markers = []\n }\n\n repaint() {\n const oldClusters = this.clusters.slice()\n\n this.clusters = []\n\n this.resetViewport(false)\n\n this.redraw()\n\n // Remove the old clusters.\n // Do it in a timeout to prevent blinking effect.\n setTimeout(function timeout() {\n for (let i = 0; i < oldClusters.length; i++) {\n oldClusters[i].remove()\n }\n }, 0)\n }\n\n getExtendedBounds(bounds: google.maps.LatLngBounds): google.maps.LatLngBounds {\n // @ts-ignore\n const projection = this.getProjection()\n // Convert the points to pixels and the extend out by the grid size.\n const trPix = projection.fromLatLngToDivPixel(\n // Turn the bounds into latlng.\n new google.maps.LatLng(bounds.getNorthEast().lat(), bounds.getNorthEast().lng())\n )\n\n trPix.x += this.gridSize\n trPix.y -= this.gridSize\n\n const blPix = projection.fromLatLngToDivPixel(\n // Turn the bounds into latlng.\n new google.maps.LatLng(bounds.getSouthWest().lat(), bounds.getSouthWest().lng())\n )\n\n blPix.x -= this.gridSize\n blPix.y += this.gridSize\n\n // Extend the bounds to contain the new bounds.\n bounds.extend(\n // Convert the pixel points back to LatLng nw\n projection.fromDivPixelToLatLng(trPix)\n )\n\n bounds.extend(\n // Convert the pixel points back to LatLng sw\n projection.fromDivPixelToLatLng(blPix)\n )\n\n return bounds\n }\n\n redraw() {\n // Redraws all the clusters.\n this.createClusters(0)\n }\n\n resetViewport(optHide: boolean) {\n // Remove all the clusters\n for (let i = 0; i < this.clusters.length; i++) {\n this.clusters[i].remove()\n }\n\n this.clusters = []\n\n // Reset the markers to not be added and to be removed from the map.\n for (let i = 0; i < this.markers.length; i++) {\n const marker = this.markers[i]\n\n marker.isAdded = false\n\n if (optHide) {\n marker.setMap(null)\n }\n }\n }\n\n distanceBetweenPoints(p1: google.maps.LatLng, p2: google.maps.LatLng): number {\n const R = 6371 // Radius of the Earth in km\n\n const dLat = ((p2.lat() - p1.lat()) * Math.PI) / 180\n const dLon = ((p2.lng() - p1.lng()) * Math.PI) / 180\n\n const a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos((p1.lat() * Math.PI) / 180) *\n Math.cos((p2.lat() * Math.PI) / 180) *\n Math.sin(dLon / 2) *\n Math.sin(dLon / 2)\n\n return R * (2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)))\n }\n\n isMarkerInBounds(marker: MarkerExtended, bounds: google.maps.LatLngBounds): boolean {\n const position = marker.getPosition()\n\n if (position) {\n return bounds.contains(position)\n }\n\n return false\n }\n\n addToClosestCluster(marker: MarkerExtended) {\n let cluster\n\n let distance = 40000 // Some large number\n\n let clusterToAddTo = null\n\n for (let i = 0; i < this.clusters.length; i++) {\n cluster = this.clusters[i]\n\n const center = cluster.getCenter()\n\n const position = marker.getPosition()\n\n if (center && position) {\n const d = this.distanceBetweenPoints(center, position)\n\n if (d < distance) {\n distance = d\n\n clusterToAddTo = cluster\n }\n }\n }\n\n if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) {\n clusterToAddTo.addMarker(marker)\n } else {\n cluster = new Cluster(this)\n\n cluster.addMarker(marker)\n\n this.clusters.push(cluster)\n }\n }\n\n createClusters(iFirst: number) {\n if (!this.ready) {\n return\n }\n\n // Cancel previous batch processing if we're working on the first batch:\n if (iFirst === 0) {\n /**\n * This event is fired when the <code>Clusterer</code> begins\n * clustering markers.\n * @name Clusterer#clusteringbegin\n * @param {Clusterer} mc The Clusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, 'clusteringbegin', this)\n\n if (this.timerRefStatic !== null) {\n window.clearTimeout(this.timerRefStatic)\n\n // @ts-ignore\n delete this.timerRefStatic\n }\n }\n\n // Get our current map view bounds.\n // Create a new bounds object so we don't affect the map.\n //\n // See Comments 9 & 11 on Issue 3651 relating to this workaround for a Google Maps bug:\n const mapBounds =\n // @ts-ignore\n this.getMap().getZoom() > 3\n ? new google.maps.LatLngBounds(\n // @ts-ignore\n this.getMap()\n .getBounds()\n .getSouthWest(),\n // @ts-ignore\n this.getMap()\n .getBounds()\n .getNorthEast()\n )\n : new google.maps.LatLngBounds(\n new google.maps.LatLng(85.02070771743472, -178.48388434375),\n new google.maps.LatLng(-85.08136444384544, 178.00048865625)\n )\n\n const bounds = this.getExtendedBounds(mapBounds)\n\n const iLast = Math.min(iFirst + this.batchSize, this.markers.length)\n\n for (let i = iFirst; i < iLast; i++) {\n const marker = this.markers[i]\n\n if (!marker.isAdded && this.isMarkerInBounds(marker, bounds)) {\n if (!this.ignoreHidden || (this.ignoreHidden && marker.getVisible())) {\n this.addToClosestCluster(marker)\n }\n }\n }\n\n if (iLast < this.markers.length) {\n this.timerRefStatic = window.setTimeout(\n () => {\n this.createClusters(iLast)\n },\n 0\n )\n } else {\n this.timerRefStatic = null\n\n /**\n * This event is fired when the <code>Clusterer</code> stops\n * clustering markers.\n * @name Clusterer#clusteringend\n * @param {Clusterer} mc The Clusterer whose markers are being clustered.\n * @event\n */\n google.maps.event.trigger(this, 'clusteringend', this)\n\n for (let i = 0; i < this.clusters.length; i++) {\n this.clusters[i].updateIcon()\n }\n }\n }\n\n extend(obj1: any, obj2: any): any {\n return function applyExtend(object: any) {\n // eslint-disable-next-line guard-for-in\n for (const property in object.prototype) {\n // @ts-ignore\n this.prototype[property] = object.prototype[property]\n }\n\n // @ts-ignore\n return this\n }.apply(obj1, [obj2])\n }\n}\n"],"names":["ClusterIcon","cluster","styles","getClusterer","extend","google","maps","OverlayView","this","clusterClassName","getClusterClass","className","center","undefined","div","sums","visible","boundsChangedListener","url","height","width","anchorText","anchorIcon","textColor","textSize","textDecoration","fontWeight","fontStyle","fontFamily","backgroundPosition","setMap","getMap","prototype","onAdd","cMouseDownInCluster","cDraggingMapByCluster","_this","document","createElement","show","getPanes","overlayMouseTarget","appendChild","event","addListener","addDomListener","markerClusterer_1","trigger","getZoomOnClick","maxZoom_1","getMaxZoom","bounds_1","getBounds","fitBounds","setTimeout","getZoom","setZoom","cancelBubble","stopPropagation","onRemove","parentNode","hide","removeListener","clearInstanceListeners","removeChild","draw","_a","getPosFromLatLng","x","y","style","top","left","display","divTitle","bp","split","spriteH","parseInt","replace","spriteV","pos","title","getTitle","cursor","position","concat","img","alt","src","enableRetinaIcons","clip","textElm","color","fontSize","textAlign","lineHeight","innerText","text","innerHTML","useStyle","getStyles","Math","min","length","max","index","setCenter","latlng","getProjection","fromLatLngToDivPixel","Cluster","markerClusterer","map","gridSize","getGridSize","minClusterSize","getMinimumClusterSize","averageCenter","getAverageCenter","markers","bounds","clusterIcon","getSize","getMarkers","getCenter","LatLngBounds","i","getPosition","remove","addMarker","marker","isMarkerAlreadyAdded","length_1","LatLng","lat","lng","calculateBounds","isAdded","push","mCount","maxZoom","zoom","isMarkerInClusterBounds","contains","getExtendedBounds","updateIcon","getCalculator","includes","CALCULATOR","numStyles","count","numberOfDigits","toString","IMAGE_SIZES","Clusterer","optMarkers","optOptions","clusters","listeners","activeMap","ready","minimumClusterSize","zoomOnClick","ignoreHidden","imagePath","imageExtension","imageSizes","calculator","batchSize","batchSizeIE","clusterClass","navigator","userAgent","toLowerCase","indexOf","timerRefStatic","setupStyles","addMarkers","repaint","resetViewport","get","redraw","fitMapToMarkers","setGridSize","setMinimumClusterSize","setMaxZoom","setStyles","setTitle","setZoomOnClick","setAverageCenter","getIgnoreHidden","setIgnoreHidden","getEnableRetinaIcons","setEnableRetinaIcons","getImageExtension","setImageExtension","getImagePath","setImagePath","getImageSizes","setImageSizes","setCalculator","getBatchSizeIE","setBatchSizeIE","setClusterClass","getTotalMarkers","getClusters","getTotalClusters","optNoDraw","pushMarkerTo","key","Object","hasOwnProperty","call","getDraggable","removeMarker_","splice","removeMarker","removed","removeMarkers","clearMarkers","oldClusters","slice","projection","trPix","getNorthEast","blPix","getSouthWest","fromDivPixelToLatLng","createClusters","optHide","distanceBetweenPoints","p1","p2","dLat","PI","dLon","a","sin","cos","atan2","sqrt","isMarkerInBounds","addToClosestCluster","distance","clusterToAddTo","d","iFirst","window","clearTimeout","mapBounds","iLast","getVisible","obj1","obj2","object","property","apply"],"mappings":"oEAMA,IAAAA,EAAA,WAwBE,SAAYA,EAAAC,EAAkBC,GAC5BD,EAAQE,eAAeC,OAAOJ,EAAaK,OAAOC,KAAKC,aACvDC,KAAKP,QAAUA,EACfO,KAAKC,iBAAmBD,KAAKP,QAAQE,eAAeO,kBACpDF,KAAKG,UAAYH,KAAKC,iBACtBD,KAAKN,OAASA,EACdM,KAAKI,YAASC,EACdL,KAAKM,IAAM,KACXN,KAAKO,KAAO,KACZP,KAAKQ,SAAU,EACfR,KAAKS,sBAAwB,KAC7BT,KAAKU,IAAM,GACXV,KAAKW,OAAS,EACdX,KAAKY,MAAQ,EACbZ,KAAKa,WAAa,CAAC,EAAG,GACtBb,KAAKc,WAAa,CAAC,EAAG,GACtBd,KAAKe,UAAY,QACjBf,KAAKgB,SAAW,GAChBhB,KAAKiB,eAAiB,OACtBjB,KAAKkB,WAAa,OAClBlB,KAAKmB,UAAY,SACjBnB,KAAKoB,WAAa,mBAClBpB,KAAKqB,mBAAqB,MAE1BrB,KAAKsB,OAAO7B,EAAQ8B,UA8PxB,OA3PE/B,EAAAgC,UAAAC,MAAA,WAAA,IACMC,EACAC,EA0GLC,EAAA5B,KAxGCA,KAAKM,IAAMuB,SAASC,cAAc,OAClC9B,KAAKM,IAAIH,UAAYH,KAAKG,UACtBH,KAAKQ,SACPR,KAAK+B,OAIP/B,KAAKgC,WAAWC,mBAAmBC,YAAYlC,KAAKM,KAGpDN,KAAKS,sBAAwBZ,OAAOC,KAAKqC,MAAMC,YAE7CpC,KAAKuB,SACL,iBACA,WACEI,EAAwBD,KAI5B7B,OAAOC,KAAKqC,MAAME,eAAerC,KAAKM,IAAK,aAAa,WACtDoB,GAAsB,EACtBC,GAAwB,KAG1B9B,OAAOC,KAAKqC,MAAME,eAChBrC,KAAKM,IACL,SACA,SAAC6B,GAGC,GAFAT,GAAsB,GAEjBC,EAAuB,CAC1B,IAAMW,EAAkBV,EAAKnC,QAAQE,eAarC,GALAE,OAAOC,KAAKqC,MAAMI,QAAQD,EAAiB,QAASV,EAAKnC,SACzDI,OAAOC,KAAKqC,MAAMI,QAAQD,EAAiB,eAAgBV,EAAKnC,SAI5D6C,EAAgBE,iBAAkB,CAEpC,IAAMC,EAAUH,EAAgBI,aAE1BC,EAASf,EAAKnC,QAAQmD,YAG5BN,EAAgBf,SAASsB,UAAUF,GAGnCG,YAAW,WAETR,EAAgBf,SAASsB,UAAUF,GAInB,OAAZF,GAAoBH,EAAgBf,SAASwB,UAAYN,GAE3DH,EAAgBf,SAASyB,QAAQP,EAAU,KAE5C,KAILN,EAAMc,cAAe,EAEjBd,EAAMe,iBACRf,EAAMe,sBAMdrD,OAAOC,KAAKqC,MAAME,eAChBrC,KAAKM,IACL,aACA,WAOET,OAAOC,KAAKqC,MAAMI,QAAQX,EAAKnC,QAAQE,eAAgB,YAAaiC,EAAKnC,YAI7EI,OAAOC,KAAKqC,MAAME,eAChBrC,KAAKM,IACL,YACA,WAOET,OAAOC,KAAKqC,MAAMI,QAAQX,EAAKnC,QAAQE,eAAgB,WAAYiC,EAAKnC,aAK9ED,EAAAgC,UAAA2B,SAAA,WACMnD,KAAKM,KAAON,KAAKM,IAAI8C,aACvBpD,KAAKqD,OAE8B,OAA/BrD,KAAKS,uBACPZ,OAAOC,KAAKqC,MAAMmB,eAAetD,KAAKS,uBAGxCZ,OAAOC,KAAKqC,MAAMoB,uBAAuBvD,KAAKM,KAE9CN,KAAKM,IAAI8C,WAAWI,YAAYxD,KAAKM,KAErCN,KAAKM,IAAM,OAIfd,EAAAgC,UAAAiC,KAAA,WACE,GAAIzD,KAAKQ,SAAwB,OAAbR,KAAKM,KAAgBN,KAAKI,OAAQ,CAC9C,IAAAsD,EAAW1D,KAAK2D,iBAAiB3D,KAAKI,QAApCwD,EAACF,EAAAE,EAAEC,MAEX7D,KAAKM,IAAIwD,MAAMC,IAAMF,EAAI,KACzB7D,KAAKM,IAAIwD,MAAME,KAAOJ,EAAI,OAI9BpE,EAAAgC,UAAA6B,KAAA,WACMrD,KAAKM,MACPN,KAAKM,IAAIwD,MAAMG,QAAU,QAG3BjE,KAAKQ,SAAU,GAGjBhB,EAAAgC,UAAAO,KAAA,iBACE,GAAI/B,KAAKM,KAAON,KAAKI,OAAQ,CAC3B,IAAI8D,EAAW,GAGTC,EAAKnE,KAAKqB,mBAAmB+C,MAAM,KAEnCC,EAAUC,SAASH,EAAG,GAAGI,QAAQ,aAAc,IAAK,IACpDC,EAAUF,SAASH,EAAG,GAAGI,QAAQ,aAAc,IAAK,IAEpDE,EAAMzE,KAAK2D,iBAAiB3D,KAAKI,QAGrC8D,EADgB,OAAdlE,KAAKO,WAA4C,IAApBP,KAAKO,KAAKmE,OAA6C,KAApB1E,KAAKO,KAAKmE,MACjE1E,KAAKP,QAAQE,eAAegF,WAE5B3E,KAAKO,KAAKmE,MAGvB1E,KAAKM,IAAIwD,MAAMc,OAAS,UACxB5E,KAAKM,IAAIwD,MAAMe,SAAW,WAC1B7E,KAAKM,IAAIwD,MAAMC,IAAM,GAAAe,OAAGL,EAAIZ,EAAC,MAC7B7D,KAAKM,IAAIwD,MAAME,KAAO,GAAAc,OAAGL,EAAIb,EAAC,MAC9B5D,KAAKM,IAAIwD,MAAMlD,MAAQ,GAAAkE,OAAG9E,KAAKY,MAAK,MACpCZ,KAAKM,IAAIwD,MAAMnD,OAAS,GAAAmE,OAAG9E,KAAKW,OAAM,MAEtC,IAAMoE,EAAMlD,SAASC,cAAc,OACnCiD,EAAIC,IAAMd,EACVa,EAAIE,IAAMjF,KAAKU,IACfqE,EAAIjB,MAAMe,SAAW,WACrBE,EAAIjB,MAAMC,IAAM,GAAGe,OAAAN,QACnBO,EAAIjB,MAAME,KAAO,GAAGc,OAAAT,QAEfrE,KAAKP,QAAQE,eAAeuF,oBAC/BH,EAAIjB,MAAMqB,KAAO,SAASL,OAAAN,EAAe,SAAAM,OAAAT,EAAUrE,KAAKY,MAAK,SAAAkE,OAAQN,EAAUxE,KAAKW,OAAM,OAAAmE,OAAMT,EAAO,MAGzG,IAAMe,EAAUvD,SAASC,cAAc,OACvCsD,EAAQtB,MAAMe,SAAW,WACzBO,EAAQtB,MAAMC,IAAM,GAAAe,OAAG9E,KAAKa,WAAW,SACvCuE,EAAQtB,MAAME,KAAO,GAAAc,OAAG9E,KAAKa,WAAW,SACxCuE,EAAQtB,MAAMuB,MAAQrF,KAAKe,UAC3BqE,EAAQtB,MAAMwB,SAAW,UAAGtF,KAAKgB,SAAQ,MACzCoE,EAAQtB,MAAM1C,WAAapB,KAAKoB,WAChCgE,EAAQtB,MAAM5C,WAAalB,KAAKkB,WAChCkE,EAAQtB,MAAM3C,UAAYnB,KAAKmB,UAC/BiE,EAAQtB,MAAM7C,eAAiBjB,KAAKiB,eACpCmE,EAAQtB,MAAMyB,UAAY,SAC1BH,EAAQtB,MAAMlD,MAAQ,UAAGZ,KAAKY,MAAK,MACnCwE,EAAQtB,MAAM0B,WAAa,UAAGxF,KAAKW,OAAM,MACzCyE,EAAQK,UAAY,GAAGX,OAAS,QAATpB,EAAA1D,KAAKO,YAAI,IAAAmD,OAAA,EAAAA,EAAEgC,MAElC1F,KAAKM,IAAIqF,UAAY,GACrB3F,KAAKM,IAAI4B,YAAY6C,GACrB/E,KAAKM,IAAI4B,YAAYkD,GACrBpF,KAAKM,IAAIoE,MAAQR,EACjBlE,KAAKM,IAAIwD,MAAMG,QAAU,GAG3BjE,KAAKQ,SAAU,GAGjBhB,EAAQgC,UAAAoE,SAAR,SAASrF,GACPP,KAAKO,KAAOA,EACZ,IAAMb,EAASM,KAAKP,QAAQE,eAAekG,YACrC/B,EAAQpE,EAAOoG,KAAKC,IAAIrG,EAAOsG,OAAS,EAAGF,KAAKG,IAAI,EAAG1F,EAAK2F,MAAQ,KAE1ElG,KAAKU,IAAMoD,EAAMpD,IACjBV,KAAKW,OAASmD,EAAMnD,OACpBX,KAAKY,MAAQkD,EAAMlD,MAEfkD,EAAM3D,YAAWH,KAAKG,UAAY,GAAA2E,OAAG9E,KAAKC,iBAAgB,KAAA6E,OAAIhB,EAAM3D,YAExEH,KAAKa,WAAaiD,EAAMjD,YAAc,CAAC,EAAG,GAC1Cb,KAAKc,WAAagD,EAAMhD,YAAc,CAACd,KAAKW,OAAS,EAAGX,KAAKY,MAAQ,GAErEZ,KAAKe,UAAY+C,EAAM/C,WAAa,QAEpCf,KAAKgB,SAAW8C,EAAM9C,UAAY,GAElChB,KAAKiB,eAAiB6C,EAAM7C,gBAAkB,OAE9CjB,KAAKkB,WAAa4C,EAAM5C,YAAc,OAEtClB,KAAKmB,UAAY2C,EAAM3C,WAAa,SAEpCnB,KAAKoB,WAAa0C,EAAM1C,YAAc,mBAEtCpB,KAAKqB,mBAAqByC,EAAMzC,oBAAsB,OAGxD7B,EAASgC,UAAA2E,UAAT,SAAU/F,GACRJ,KAAKI,OAASA,GAGhBZ,EAAgBgC,UAAAmC,iBAAhB,SAAiByC,GAEf,IAAM3B,EAAMzE,KAAKqG,gBAAgBC,qBAAqBF,GAUtD,OARA3B,EAAIb,GAAK5D,KAAKc,WAAW,GAEzB2D,EAAIZ,GAAK7D,KAAKc,WAAW,GAMlB2D,GAEVjF,KC5SD+G,EAAA,WAWE,SAAAA,EAAYC,GACVxG,KAAKwG,gBAAkBA,EAEvBxG,KAAKyG,IAAMzG,KAAKwG,gBAAgBjF,SAEhCvB,KAAK0G,SAAW1G,KAAKwG,gBAAgBG,cAErC3G,KAAK4G,eAAiB5G,KAAKwG,gBAAgBK,wBAE3C7G,KAAK8G,cAAgB9G,KAAKwG,gBAAgBO,mBAE1C/G,KAAKgH,QAAU,GAEfhH,KAAKI,YAASC,EAEdL,KAAKiH,OAAS,KAEdjH,KAAKkH,YAAc,IAAI1H,EAAYQ,KAAMA,KAAKwG,gBAAgBX,aA6KlE,OA1KEU,EAAA/E,UAAA2F,QAAA,WACE,OAAOnH,KAAKgH,QAAQhB,QAGtBO,EAAA/E,UAAA4F,WAAA,WACE,OAAOpH,KAAKgH,SAGdT,EAAA/E,UAAA6F,UAAA,WACE,OAAOrH,KAAKI,QAGdmG,EAAA/E,UAAAD,OAAA,WACE,OAAOvB,KAAKyG,KAGdF,EAAA/E,UAAA7B,aAAA,WACE,OAAOK,KAAKwG,iBAGdD,EAAA/E,UAAAoB,UAAA,WAKE,IAJA,IAAMqE,EAAS,IAAIpH,OAAOC,KAAKwH,aAAatH,KAAKI,OAAQJ,KAAKI,QAExD4G,EAAUhH,KAAKoH,aAEZG,EAAI,EAAGA,EAAIP,EAAQhB,OAAQuB,IAAK,CACvC,IAAM1C,EAAWmC,EAAQO,GAAGC,cAExB3C,GACFoC,EAAOrH,OAAOiF,GAIlB,OAAOoC,GAGTV,EAAA/E,UAAAiG,OAAA,WAEEzH,KAAKkH,YAAY5F,OAAO,MAExBtB,KAAKgH,QAAU,UAGRhH,KAAKgH,SAGdT,EAAS/E,UAAAkG,UAAT,SAAUC,GACR,GAAI3H,KAAK4H,qBAAqBD,GAC5B,OAAO,EAaL,IATI9C,EADR,GAAK7E,KAAKI,QASR,GAAIJ,KAAK8G,gBACDjC,EAAW8C,EAAOH,eAEV,CACZ,IAAMK,EAAS7H,KAAKgH,QAAQhB,OAAS,EAErChG,KAAKI,OAAS,IAAIP,OAAOC,KAAKgI,QAC3B9H,KAAKI,OAAO2H,OAASF,EAAS,GAAKhD,EAASkD,OAASF,GACrD7H,KAAKI,OAAO4H,OAASH,EAAS,GAAKhD,EAASmD,OAASH,GAGxD7H,KAAKiI,wBAnBHpD,EAAW8C,EAAOH,iBAGtBxH,KAAKI,OAASyE,EAEd7E,KAAKiI,mBAmBTN,EAAOO,SAAU,EAEjBlI,KAAKgH,QAAQmB,KAAKR,GAElB,IAAMS,EAASpI,KAAKgH,QAAQhB,OAEtBqC,EAAUrI,KAAKwG,gBAAgB9D,aAE/B4F,EAAOtI,KAAKyG,IAAI1D,UAEtB,GAAgB,OAAZsF,QAAoC,IAATC,GAAwBA,EAAOD,EAExDV,EAAOpG,WAAavB,KAAKyG,KAC3BkB,EAAOrG,OAAOtB,KAAKyG,UAEhB,GAAI2B,EAASpI,KAAK4G,eAEnBe,EAAOpG,WAAavB,KAAKyG,KAC3BkB,EAAOrG,OAAOtB,KAAKyG,UAEhB,GAAI2B,IAAWpI,KAAK4G,eAEzB,IAAK,IAAIW,EAAI,EAAGA,EAAIa,EAAQb,IAC1BvH,KAAKgH,QAAQO,GAAGjG,OAAO,WAGzBqG,EAAOrG,OAAO,MAGhB,OAAO,GAGTiF,EAAuB/E,UAAA+G,wBAAvB,SAAwBZ,GACtB,GAAoB,OAAhB3H,KAAKiH,OAAiB,CACxB,IAAMpC,EAAW8C,EAAOH,cAExB,GAAI3C,EACF,OAAO7E,KAAKiH,OAAOuB,SAAS3D,GAIhC,OAAO,GAGT0B,EAAA/E,UAAAyG,gBAAA,WACEjI,KAAKiH,OAASjH,KAAKwG,gBAAgBiC,kBACjC,IAAI5I,OAAOC,KAAKwH,aAAatH,KAAKI,OAAQJ,KAAKI,UAInDmG,EAAA/E,UAAAkH,WAAA,WACE,IAAMN,EAASpI,KAAKgH,QAAQhB,OAEtBqC,EAAUrI,KAAKwG,gBAAgB9D,aAE/B4F,EAAOtI,KAAKyG,IAAI1D,UAEN,OAAZsF,QAAoC,IAATC,GAAwBA,EAAOD,GAM1DD,EAASpI,KAAK4G,eALhB5G,KAAKkH,YAAY7D,QAYfrD,KAAKI,QACPJ,KAAKkH,YAAYf,UAAUnG,KAAKI,QAGlCJ,KAAKkH,YAAYtB,SACf5F,KAAKwG,gBAAgBmC,eAArB3I,CAAqCA,KAAKgH,QAAShH,KAAKwG,gBAAgBX,YAAYG,SAGtFhG,KAAKkH,YAAYnF,SAGnBwE,EAAoB/E,UAAAoG,qBAApB,SAAqBD,GACnB,GAAI3H,KAAKgH,QAAQ4B,SACf,OAAO5I,KAAKgH,QAAQ4B,SAASjB,GAE7B,IAAK,IAAIJ,EAAI,EAAGA,EAAIvH,KAAKgH,QAAQhB,OAAQuB,IACvC,GAAII,IAAW3H,KAAKgH,QAAQO,GAC1B,OAAO,EAKb,OAAO,GAEVhB,KCjMKsC,EAAa,SACjB7B,EACA8B,GAEA,IAAMC,EAAQ/B,EAAQhB,OAEhBgD,EAAiBD,EAAME,WAAWjD,OAElCE,EAAQJ,KAAKC,IAAIiD,EAAgBF,GAEvC,MAAO,CACLpD,KAAMqD,EAAME,WACZ/C,MAAKA,EACLxB,MAAO,KAaLwE,EAAc,CAAC,GAAI,GAAI,GAAI,GAAI,IAIrCC,EAAA,WAwBE,SAAAA,EACE1C,EACA2C,EACAC,QADA,IAAAD,IAAAA,EAAiC,SACjC,IAAAC,IAAAA,EAAiC,IAEjCrJ,KAAKJ,OAAOuJ,EAAWtJ,OAAOC,KAAKC,aAEnCC,KAAKgH,QAAU,GACfhH,KAAKsJ,SAAW,GAChBtJ,KAAKuJ,UAAY,GACjBvJ,KAAKwJ,UAAY,KACjBxJ,KAAKyJ,OAAQ,EACbzJ,KAAK0G,SAAW2C,EAAW3C,UAAY,GACvC1G,KAAK4G,eAAiByC,EAAWK,oBAAsB,EACvD1J,KAAKqI,QAAUgB,EAAWhB,SAAW,KACrCrI,KAAKN,OAAS2J,EAAW3J,QAAU,GAEnCM,KAAK0E,MAAQ2E,EAAW3E,OAAS,GAEjC1E,KAAK2J,aAAc,OAEYtJ,IAA3BgJ,EAAWM,cACb3J,KAAK2J,YAAcN,EAAWM,aAGhC3J,KAAK8G,eAAgB,OAEYzG,IAA7BgJ,EAAWvC,gBACb9G,KAAK8G,cAAgBuC,EAAWvC,eAGlC9G,KAAK4J,cAAe,OAEYvJ,IAA5BgJ,EAAWO,eACb5J,KAAK4J,aAAeP,EAAWO,cAGjC5J,KAAKkF,mBAAoB,OAEY7E,IAAjCgJ,EAAWnE,oBACblF,KAAKkF,kBAAoBmE,EAAWnE,mBAEtClF,KAAK6J,UAAYR,EAAWQ,WA1E9B,yFA4EE7J,KAAK8J,eAAiBT,EAAWS,gBA1Eb,MA4EpB9J,KAAK+J,WAAaV,EAAWU,YAAcb,EAE3ClJ,KAAKgK,WAAaX,EAAWW,YAAcnB,EAE3C7I,KAAKiK,UAAYZ,EAAWY,WAvFb,IAyFfjK,KAAKkK,YAAcb,EAAWa,aAvFZ,IAyFlBlK,KAAKmK,aAAed,EAAWc,cAhFX,WAkFuC,IAAvDC,UAAUC,UAAUC,cAAcC,QAAQ,UAE5CvK,KAAKiK,UAAYjK,KAAKkK,aAGxBlK,KAAKwK,eAAiB,KAEtBxK,KAAKyK,cAELzK,KAAK0K,WAAWtB,GAAY,GAE5BpJ,KAAKsB,OAAOmF,GA2jBhB,OAxjBE0C,EAAA3H,UAAAC,MAAA,WAAA,IAwCCG,EAAA5B,KAtCCA,KAAKwJ,UAAYxJ,KAAKuB,SAEtBvB,KAAKyJ,OAAQ,EAEbzJ,KAAK2K,UAGL3K,KAAKuJ,UAAY,CACf1J,OAAOC,KAAKqC,MAAMC,YAEhBpC,KAAKuB,SACL,gBACA,WACEK,EAAKgJ,eAAc,GAQjBhJ,EAAKL,SAASwB,aAAenB,EAAKiJ,IAAI,YAAc,IAEpDjJ,EAAKL,SAASwB,YAAcnB,EAAKiJ,IAAI,YAErChL,OAAOC,KAAKqC,MAAMI,QAAQX,EAAM,WAItC/B,OAAOC,KAAKqC,MAAMC,YAEhBpC,KAAKuB,SACL,QACA,WACEK,EAAKkJ,cAMb3B,EAAA3H,UAAA2B,SAAA,WAEE,IAAK,IAAIoE,EAAI,EAAGA,EAAIvH,KAAKgH,QAAQhB,OAAQuB,IACnCvH,KAAKgH,QAAQO,GAAGhG,WAAavB,KAAKwJ,WACpCxJ,KAAKgH,QAAQO,GAAGjG,OAAOtB,KAAKwJ,WAKhC,IAASjC,EAAI,EAAGA,EAAIvH,KAAKsJ,SAAStD,OAAQuB,IACxCvH,KAAKsJ,SAAS/B,GAAGE,SAGnBzH,KAAKsJ,SAAW,GAGhB,IAAS/B,EAAI,EAAGA,EAAIvH,KAAKuJ,UAAUvD,OAAQuB,IACzC1H,OAAOC,KAAKqC,MAAMmB,eAAetD,KAAKuJ,UAAUhC,IAGlDvH,KAAKuJ,UAAY,GAEjBvJ,KAAKwJ,UAAY,KAEjBxJ,KAAKyJ,OAAQ,GAIfN,EAAI3H,UAAAiC,KAAJ,aAEA0F,EAAA3H,UAAAiJ,YAAA,WACE,KAAIzK,KAAKN,OAAOsG,OAAS,GAIzB,IAAK,IAAIuB,EAAI,EAAGA,EAAIvH,KAAK+J,WAAW/D,OAAQuB,IAC1CvH,KAAKN,OAAOyI,KAAK,CACfzH,IAAKV,KAAK6J,WAAatC,EAAI,GAAK,IAAMvH,KAAK8J,eAC3CnJ,OAAQX,KAAK+J,WAAWxC,GACxB3G,MAAOZ,KAAK+J,WAAWxC,MAK7B4B,EAAA3H,UAAAuJ,gBAAA,WAKE,IAJA,IAAM/D,EAAUhH,KAAKoH,aAEfH,EAAS,IAAIpH,OAAOC,KAAKwH,aAEtBC,EAAI,EAAGA,EAAIP,EAAQhB,OAAQuB,IAAK,CACvC,IAAM1C,EAAWmC,EAAQO,GAAGC,cACxB3C,GACFoC,EAAOrH,OAAOiF,GAKlB7E,KAAKuB,SAASsB,UAAUoE,IAG1BkC,EAAA3H,UAAAmF,YAAA,WACE,OAAO3G,KAAK0G,UAGdyC,EAAW3H,UAAAwJ,YAAX,SAAYtE,GACV1G,KAAK0G,SAAWA,GAGlByC,EAAA3H,UAAAqF,sBAAA,WACE,OAAO7G,KAAK4G,gBAGduC,EAAqB3H,UAAAyJ,sBAArB,SAAsBvB,GACpB1J,KAAK4G,eAAiB8C,GAGxBP,EAAA3H,UAAAkB,WAAA,WACE,OAAO1C,KAAKqI,SAGdc,EAAU3H,UAAA0J,WAAV,SAAW7C,GACTrI,KAAKqI,QAAUA,GAGjBc,EAAA3H,UAAAqE,UAAA,WACE,OAAO7F,KAAKN,QAGdyJ,EAAS3H,UAAA2J,UAAT,SAAUzL,GACRM,KAAKN,OAASA,GAGhByJ,EAAA3H,UAAAmD,SAAA,WACE,OAAO3E,KAAK0E,OAGdyE,EAAQ3H,UAAA4J,SAAR,SAAS1G,GACP1E,KAAK0E,MAAQA,GAGfyE,EAAA3H,UAAAgB,eAAA,WACE,OAAOxC,KAAK2J,aAGdR,EAAc3H,UAAA6J,eAAd,SAAe1B,GACb3J,KAAK2J,YAAcA,GAGrBR,EAAA3H,UAAAuF,iBAAA,WACE,OAAO/G,KAAK8G,eAGdqC,EAAgB3H,UAAA8J,iBAAhB,SAAiBxE,GACf9G,KAAK8G,cAAgBA,GAGvBqC,EAAA3H,UAAA+J,gBAAA,WACE,OAAOvL,KAAK4J,cAGdT,EAAe3H,UAAAgK,gBAAf,SAAgB5B,GACd5J,KAAK4J,aAAeA,GAGtBT,EAAA3H,UAAAiK,qBAAA,WACE,OAAOzL,KAAKkF,mBAGdiE,EAAoB3H,UAAAkK,qBAApB,SAAqBxG,GACnBlF,KAAKkF,kBAAoBA,GAG3BiE,EAAA3H,UAAAmK,kBAAA,WACE,OAAO3L,KAAK8J,gBAGdX,EAAiB3H,UAAAoK,kBAAjB,SAAkB9B,GAChB9J,KAAK8J,eAAiBA,GAGxBX,EAAA3H,UAAAqK,aAAA,WACE,OAAO7L,KAAK6J,WAGdV,EAAY3H,UAAAsK,aAAZ,SAAajC,GACX7J,KAAK6J,UAAYA,GAGnBV,EAAA3H,UAAAuK,cAAA,WACE,OAAO/L,KAAK+J,YAGdZ,EAAa3H,UAAAwK,cAAb,SAAcjC,GACZ/J,KAAK+J,WAAaA,GAGpBZ,EAAA3H,UAAAmH,cAAA,WACE,OAAO3I,KAAKgK,YAGdb,EAAa3H,UAAAyK,cAAb,SAAcjC,GACZhK,KAAKgK,WAAaA,GAGpBb,EAAA3H,UAAA0K,eAAA,WACE,OAAOlM,KAAKkK,aAGdf,EAAc3H,UAAA2K,eAAd,SAAejC,GACblK,KAAKkK,YAAcA,GAGrBf,EAAA3H,UAAAtB,gBAAA,WACE,OAAOF,KAAKmK,cAGdhB,EAAe3H,UAAA4K,gBAAf,SAAgBjC,GACdnK,KAAKmK,aAAeA,GAGtBhB,EAAA3H,UAAA4F,WAAA,WACE,OAAOpH,KAAKgH,SAGdmC,EAAA3H,UAAA6K,gBAAA,WACE,OAAOrM,KAAKgH,QAAQhB,QAGtBmD,EAAA3H,UAAA8K,YAAA,WACE,OAAOtM,KAAKsJ,UAGdH,EAAA3H,UAAA+K,iBAAA,WACE,OAAOvM,KAAKsJ,SAAStD,QAGvBmD,EAAA3H,UAAAkG,UAAA,SAAUC,EAAwB6E,GAChCxM,KAAKyM,aAAa9E,GAEb6E,GACHxM,KAAK8K,UAIT3B,EAAA3H,UAAAkJ,WAAA,SAAW1D,EAA2BwF,GACpC,IAAK,IAAME,KAAO1F,EACZ2F,OAAOnL,UAAUoL,eAAeC,KAAK7F,EAAS0F,IAChD1M,KAAKyM,aAAazF,EAAQ0F,IAIzBF,GACHxM,KAAK8K,UAIT3B,EAAY3H,UAAAiL,aAAZ,SAAa9E,GAAb,IAeC/F,EAAA5B,KAbK2H,EAAOmF,gBACTjN,OAAOC,KAAKqC,MAAMC,YAAYuF,EAAQ,WAAW,WAC3C/F,EAAK6H,QACP9B,EAAOO,SAAU,EAEjBtG,EAAK+I,cAKXhD,EAAOO,SAAU,EAEjBlI,KAAKgH,QAAQmB,KAAKR,IAGpBwB,EAAa3H,UAAAuL,cAAb,SAAcpF,GACZ,IAAIzB,GAAS,EAEb,GAAIlG,KAAKgH,QAAQuD,QACfrE,EAAQlG,KAAKgH,QAAQuD,QAAQ5C,QAE7B,IAAK,IAAIJ,EAAI,EAAGA,EAAIvH,KAAKgH,QAAQhB,OAAQuB,IACvC,GAAII,IAAW3H,KAAKgH,QAAQO,GAAI,CAC9BrB,EAAQqB,EAER,MAKN,OAAe,IAAXrB,IAKJyB,EAAOrG,OAAO,MAEdtB,KAAKgH,QAAQgG,OAAO9G,EAAO,IAEpB,IAGTiD,EAAA3H,UAAAyL,aAAA,SAAatF,EAAwB6E,GACnC,IAAMU,EAAUlN,KAAK+M,cAAcpF,GAMnC,OAJK6E,GAAaU,GAChBlN,KAAK2K,UAGAuC,GAGT/D,EAAA3H,UAAA2L,cAAA,SAAcnG,EAA2BwF,GAGvC,IAFA,IAAIU,GAAU,EAEL3F,EAAI,EAAGA,EAAIP,EAAQhB,OAAQuB,IAClC2F,EAAUA,GAAWlN,KAAK+M,cAAc/F,EAAQO,IAOlD,OAJKiF,GAAaU,GAChBlN,KAAK2K,UAGAuC,GAGT/D,EAAA3H,UAAA4L,aAAA,WACEpN,KAAK4K,eAAc,GAEnB5K,KAAKgH,QAAU,IAGjBmC,EAAA3H,UAAAmJ,QAAA,WACE,IAAM0C,EAAcrN,KAAKsJ,SAASgE,QAElCtN,KAAKsJ,SAAW,GAEhBtJ,KAAK4K,eAAc,GAEnB5K,KAAK8K,SAILhI,YAAW,WACT,IAAK,IAAIyE,EAAI,EAAGA,EAAI8F,EAAYrH,OAAQuB,IACtC8F,EAAY9F,GAAGE,WAEhB,IAGL0B,EAAiB3H,UAAAiH,kBAAjB,SAAkBxB,GAEhB,IAAMsG,EAAavN,KAAKqG,gBAElBmH,EAAQD,EAAWjH,qBAEvB,IAAIzG,OAAOC,KAAKgI,OAAOb,EAAOwG,eAAe1F,MAAOd,EAAOwG,eAAezF,QAG5EwF,EAAM5J,GAAK5D,KAAK0G,SAChB8G,EAAM3J,GAAK7D,KAAK0G,SAEhB,IAAMgH,EAAQH,EAAWjH,qBAEvB,IAAIzG,OAAOC,KAAKgI,OAAOb,EAAO0G,eAAe5F,MAAOd,EAAO0G,eAAe3F,QAiB5E,OAdA0F,EAAM9J,GAAK5D,KAAK0G,SAChBgH,EAAM7J,GAAK7D,KAAK0G,SAGhBO,EAAOrH,OAEL2N,EAAWK,qBAAqBJ,IAGlCvG,EAAOrH,OAEL2N,EAAWK,qBAAqBF,IAG3BzG,GAGTkC,EAAA3H,UAAAsJ,OAAA,WAEE9K,KAAK6N,eAAe,IAGtB1E,EAAa3H,UAAAoJ,cAAb,SAAckD,GAEZ,IAAK,IAAIvG,EAAI,EAAGA,EAAIvH,KAAKsJ,SAAStD,OAAQuB,IACxCvH,KAAKsJ,SAAS/B,GAAGE,SAGnBzH,KAAKsJ,SAAW,GAGhB,IAAS/B,EAAI,EAAGA,EAAIvH,KAAKgH,QAAQhB,OAAQuB,IAAK,CAC5C,IAAMI,EAAS3H,KAAKgH,QAAQO,GAE5BI,EAAOO,SAAU,EAEb4F,GACFnG,EAAOrG,OAAO,QAKpB6H,EAAA3H,UAAAuM,sBAAA,SAAsBC,EAAwBC,GAC5C,IAEMC,GAASD,EAAGlG,MAAQiG,EAAGjG,OAASjC,KAAKqI,GAAM,IAC3CC,GAASH,EAAGjG,MAAQgG,EAAGhG,OAASlC,KAAKqI,GAAM,IAE3CE,EACJvI,KAAKwI,IAAIJ,EAAO,GAAKpI,KAAKwI,IAAIJ,EAAO,GACrCpI,KAAKyI,IAAKP,EAAGjG,MAAQjC,KAAKqI,GAAM,KAC9BrI,KAAKyI,IAAKN,EAAGlG,MAAQjC,KAAKqI,GAAM,KAChCrI,KAAKwI,IAAIF,EAAO,GAChBtI,KAAKwI,IAAIF,EAAO,GAEpB,OAAY,EAAItI,KAAK0I,MAAM1I,KAAK2I,KAAKJ,GAAIvI,KAAK2I,KAAK,EAAIJ,IAZ7C,MAeZlF,EAAA3H,UAAAkN,iBAAA,SAAiB/G,EAAwBV,GACvC,IAAMpC,EAAW8C,EAAOH,cAExB,QAAI3C,GACKoC,EAAOuB,SAAS3D,IAM3BsE,EAAmB3H,UAAAmN,oBAAnB,SAAoBhH,GAOlB,IANA,IAAIlI,EAEAmP,EAAW,IAEXC,EAAiB,KAEZtH,EAAI,EAAGA,EAAIvH,KAAKsJ,SAAStD,OAAQuB,IAAK,CAG7C,IAAMnH,GAFNX,EAAUO,KAAKsJ,SAAS/B,IAEDF,YAEjBxC,EAAW8C,EAAOH,cAExB,GAAIpH,GAAUyE,EAAU,CACtB,IAAMiK,EAAI9O,KAAK+N,sBAAsB3N,EAAQyE,GAEzCiK,EAAIF,IACNA,EAAWE,EAEXD,EAAiBpP,IAKnBoP,GAAkBA,EAAetG,wBAAwBZ,GAC3DkH,EAAenH,UAAUC,KAEzBlI,EAAU,IAAI8G,EAAQvG,OAEd0H,UAAUC,GAElB3H,KAAKsJ,SAASnB,KAAK1I,KAIvB0J,EAAc3H,UAAAqM,eAAd,SAAekB,GAAf,IAmFCnN,EAAA5B,KAlFC,GAAKA,KAAKyJ,MAAV,CAKe,IAAXsF,IAQFlP,OAAOC,KAAKqC,MAAMI,QAAQvC,KAAM,kBAAmBA,MAEvB,OAAxBA,KAAKwK,iBACPwE,OAAOC,aAAajP,KAAKwK,uBAGlBxK,KAAKwK,iBA8BhB,IAtBA,IAAM0E,EAEJlP,KAAKuB,SAASwB,UAAY,EACtB,IAAIlD,OAAOC,KAAKwH,aAEdtH,KAAKuB,SACFqB,YACA+K,eAEH3N,KAAKuB,SACFqB,YACA6K,gBAEL,IAAI5N,OAAOC,KAAKwH,aACd,IAAIzH,OAAOC,KAAKgI,OAAO,mBAAoB,iBAC3C,IAAIjI,OAAOC,KAAKgI,QAAQ,kBAAmB,kBAG7Cb,EAASjH,KAAKyI,kBAAkByG,GAEhCC,EAAQrJ,KAAKC,IAAIgJ,EAAS/O,KAAKiK,UAAWjK,KAAKgH,QAAQhB,QAEpDuB,EAAIwH,EAAQxH,EAAI4H,EAAO5H,IAAK,CACnC,IAAMI,EAAS3H,KAAKgH,QAAQO,IAEvBI,EAAOO,SAAWlI,KAAK0O,iBAAiB/G,EAAQV,MAC9CjH,KAAK4J,cAAiB5J,KAAK4J,cAAgBjC,EAAOyH,eACrDpP,KAAK2O,oBAAoBhH,GAK/B,GAAIwH,EAAQnP,KAAKgH,QAAQhB,OACvBhG,KAAKwK,eAAiBwE,OAAOlM,YAC3B,WACElB,EAAKiM,eAAesB,KAEtB,OAEG,CACLnP,KAAKwK,eAAiB,KAStB3K,OAAOC,KAAKqC,MAAMI,QAAQvC,KAAM,gBAAiBA,MAEjD,IAASuH,EAAI,EAAGA,EAAIvH,KAAKsJ,SAAStD,OAAQuB,IACxCvH,KAAKsJ,SAAS/B,GAAGmB,gBAKvBS,EAAA3H,UAAA5B,OAAA,SAAOyP,EAAWC,GAChB,OAAO,SAAqBC,GAE1B,IAAK,IAAMC,KAAYD,EAAO/N,UAE5BxB,KAAKwB,UAAUgO,GAAYD,EAAO/N,UAAUgO,GAI9C,OAAOxP,MACPyP,MAAMJ,EAAM,CAACC,KAElBnG"}
package/dist/esm.js CHANGED
@@ -22,7 +22,6 @@ var ClusterIcon = /** @class */ (function () {
22
22
  this.fontStyle = 'normal';
23
23
  this.fontFamily = 'Arial,sans-serif';
24
24
  this.backgroundPosition = '0 0';
25
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
26
25
  // @ts-ignore
27
26
  this.setMap(cluster.getMap()); // Note: this causes onAdd to be called
28
27
  }
@@ -35,12 +34,10 @@ var ClusterIcon = /** @class */ (function () {
35
34
  if (this.visible) {
36
35
  this.show();
37
36
  }
38
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
39
37
  // @ts-ignore
40
38
  this.getPanes().overlayMouseTarget.appendChild(this.div);
41
39
  // Fix for Issue 157
42
40
  this.boundsChangedListener = google.maps.event.addListener(
43
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
44
41
  // @ts-ignore
45
42
  this.getMap(), 'boundschanged', function boundsChanged() {
46
43
  cDraggingMapByCluster = cMouseDownInCluster;
@@ -49,10 +46,7 @@ var ClusterIcon = /** @class */ (function () {
49
46
  cMouseDownInCluster = true;
50
47
  cDraggingMapByCluster = false;
51
48
  });
52
- // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
53
- google.maps.event.addDomListener(this.div, 'click',
54
- // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
55
- function (event) {
49
+ google.maps.event.addDomListener(this.div, 'click', function (event) {
56
50
  cMouseDownInCluster = false;
57
51
  if (!cDraggingMapByCluster) {
58
52
  var markerClusterer_1 = _this.cluster.getClusterer();
@@ -70,19 +64,15 @@ var ClusterIcon = /** @class */ (function () {
70
64
  // Zoom into the cluster.
71
65
  var maxZoom_1 = markerClusterer_1.getMaxZoom();
72
66
  var bounds_1 = _this.cluster.getBounds();
73
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
74
67
  // @ts-ignore
75
68
  markerClusterer_1.getMap().fitBounds(bounds_1);
76
69
  // There is a fix for Issue 170 here:
77
70
  setTimeout(function timeout() {
78
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
79
71
  // @ts-ignore
80
72
  markerClusterer_1.getMap().fitBounds(bounds_1);
81
73
  // Don't zoom beyond the max zoom level
82
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
83
74
  // @ts-ignore
84
75
  if (maxZoom_1 !== null && markerClusterer_1.getMap().getZoom() > maxZoom_1) {
85
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
86
76
  // @ts-ignore
87
77
  markerClusterer_1.getMap().setZoom(maxZoom_1 + 1);
88
78
  }
@@ -95,9 +85,7 @@ var ClusterIcon = /** @class */ (function () {
95
85
  }
96
86
  }
97
87
  });
98
- google.maps.event.addDomListener(this.div, 'mouseover',
99
- // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
100
- function () {
88
+ google.maps.event.addDomListener(this.div, 'mouseover', function () {
101
89
  /**
102
90
  * This event is fired when the mouse moves over a cluster marker.
103
91
  * @name MarkerClusterer#mouseover
@@ -106,10 +94,7 @@ var ClusterIcon = /** @class */ (function () {
106
94
  */
107
95
  google.maps.event.trigger(_this.cluster.getClusterer(), 'mouseover', _this.cluster);
108
96
  });
109
- // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
110
- google.maps.event.addDomListener(this.div, 'mouseout',
111
- // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
112
- function () {
97
+ google.maps.event.addDomListener(this.div, 'mouseout', function () {
113
98
  /**
114
99
  * This event is fired when the mouse moves out of a cluster marker.
115
100
  * @name MarkerClusterer#mouseout
@@ -144,8 +129,9 @@ var ClusterIcon = /** @class */ (function () {
144
129
  this.visible = false;
145
130
  };
146
131
  ClusterIcon.prototype.show = function () {
132
+ var _a;
147
133
  if (this.div && this.center) {
148
- var img = '', divTitle = '';
134
+ var divTitle = '';
149
135
  // NOTE: values must be specified in px units
150
136
  var bp = this.backgroundPosition.split(' ');
151
137
  var spriteH = parseInt(bp[0].replace(/^\s+|\s+$/g, ''), 10);
@@ -157,72 +143,38 @@ var ClusterIcon = /** @class */ (function () {
157
143
  else {
158
144
  divTitle = this.sums.title;
159
145
  }
160
- this.div.style.cssText = this.createCss(pos);
161
- img =
162
- "<img alt='" +
163
- divTitle +
164
- "' src='" +
165
- this.url +
166
- "' style='position: absolute; top: " +
167
- spriteV +
168
- 'px; left: ' +
169
- spriteH +
170
- 'px; ';
171
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
172
- //@ts-ignore
146
+ this.div.style.cursor = 'pointer';
147
+ this.div.style.position = 'absolute';
148
+ this.div.style.top = "".concat(pos.y, "px");
149
+ this.div.style.left = "".concat(pos.x, "px");
150
+ this.div.style.width = "".concat(this.width, "px");
151
+ this.div.style.height = "".concat(this.height, "px");
152
+ var img = document.createElement('img');
153
+ img.alt = divTitle;
154
+ img.src = this.url;
155
+ img.style.position = 'absolute';
156
+ img.style.top = "".concat(spriteV, "px");
157
+ img.style.left = "".concat(spriteH, "px");
173
158
  if (!this.cluster.getClusterer().enableRetinaIcons) {
174
- img +=
175
- 'clip: rect(' +
176
- -1 * spriteV +
177
- 'px, ' +
178
- (-1 * spriteH + this.width) +
179
- 'px, ' +
180
- (-1 * spriteV + this.height) +
181
- 'px, ' +
182
- -1 * spriteH +
183
- 'px);';
159
+ img.style.clip = "rect(-".concat(spriteV, "px, -").concat(spriteH + this.width, "px, -").concat(spriteV + this.height, ", -").concat(spriteH, ")");
184
160
  }
185
- img += "'>";
186
- this.div.innerHTML =
187
- img +
188
- "<div style='" +
189
- 'position: absolute;' +
190
- 'top: ' +
191
- this.anchorText[0] +
192
- 'px;' +
193
- 'left: ' +
194
- this.anchorText[1] +
195
- 'px;' +
196
- 'color: ' +
197
- this.textColor +
198
- ';' +
199
- 'font-size: ' +
200
- this.textSize +
201
- 'px;' +
202
- 'font-family: ' +
203
- this.fontFamily +
204
- ';' +
205
- 'font-weight: ' +
206
- this.fontWeight +
207
- ';' +
208
- 'font-style: ' +
209
- this.fontStyle +
210
- ';' +
211
- 'text-decoration: ' +
212
- this.textDecoration +
213
- ';' +
214
- 'text-align: center;' +
215
- 'width: ' +
216
- this.width +
217
- 'px;' +
218
- 'line-height:' +
219
- this.height +
220
- 'px;' +
221
- "'>" +
222
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
223
- // @ts-ignore
224
- this.sums.text +
225
- '</div>';
161
+ var textElm = document.createElement('div');
162
+ textElm.style.position = 'absolute';
163
+ textElm.style.top = "".concat(this.anchorText[0], "px");
164
+ textElm.style.left = "".concat(this.anchorText[1], "px");
165
+ textElm.style.color = this.textColor;
166
+ textElm.style.fontSize = "".concat(this.textSize, "px");
167
+ textElm.style.fontFamily = this.fontFamily;
168
+ textElm.style.fontWeight = this.fontWeight;
169
+ textElm.style.fontStyle = this.fontStyle;
170
+ textElm.style.textDecoration = this.textDecoration;
171
+ textElm.style.textAlign = 'center';
172
+ textElm.style.width = "".concat(this.width, "px");
173
+ textElm.style.lineHeight = "".concat(this.height, "px");
174
+ textElm.innerText = "".concat((_a = this.sums) === null || _a === void 0 ? void 0 : _a.text);
175
+ this.div.innerHTML = '';
176
+ this.div.appendChild(img);
177
+ this.div.appendChild(textElm);
226
178
  this.div.title = divTitle;
227
179
  this.div.style.display = '';
228
180
  }
@@ -236,7 +188,7 @@ var ClusterIcon = /** @class */ (function () {
236
188
  this.height = style.height;
237
189
  this.width = style.width;
238
190
  if (style.className)
239
- this.className = this.clusterClassName + " " + style.className;
191
+ this.className = "".concat(this.clusterClassName, " ").concat(style.className);
240
192
  this.anchorText = style.anchorText || [0, 0];
241
193
  this.anchorIcon = style.anchorIcon || [this.height / 2, this.width / 2];
242
194
  this.textColor = style.textColor || 'black';
@@ -250,15 +202,7 @@ var ClusterIcon = /** @class */ (function () {
250
202
  ClusterIcon.prototype.setCenter = function (center) {
251
203
  this.center = center;
252
204
  };
253
- ClusterIcon.prototype.createCss = function (pos) {
254
- var style = [];
255
- style.push('cursor: pointer;');
256
- style.push('position: absolute; top: ' + pos.y + 'px; left: ' + pos.x + 'px;');
257
- style.push('width: ' + this.width + 'px; height: ' + this.height + 'px;');
258
- return style.join('');
259
- };
260
205
  ClusterIcon.prototype.getPosFromLatLng = function (latlng) {
261
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
262
206
  // @ts-ignore
263
207
  var pos = this.getProjection().fromLatLngToDivPixel(latlng);
264
208
  pos.x -= this.anchorIcon[1];
@@ -273,7 +217,6 @@ var ClusterIcon = /** @class */ (function () {
273
217
  var Cluster = /** @class */ (function () {
274
218
  function Cluster(markerClusterer) {
275
219
  this.markerClusterer = markerClusterer;
276
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
277
220
  // @ts-ignore
278
221
  this.map = this.markerClusterer.getMap();
279
222
  this.gridSize = this.markerClusterer.getGridSize();
@@ -311,7 +254,6 @@ var Cluster = /** @class */ (function () {
311
254
  return bounds;
312
255
  };
313
256
  Cluster.prototype.remove = function () {
314
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
315
257
  // @ts-ignore
316
258
  this.clusterIcon.setMap(null);
317
259
  this.markers = [];
@@ -480,13 +422,11 @@ var Clusterer = /** @class */ (function () {
480
422
  this.timerRefStatic = null;
481
423
  this.setupStyles();
482
424
  this.addMarkers(optMarkers, true);
483
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
484
425
  // @ts-ignore
485
426
  this.setMap(map); // Note: this causes onAdd to be called
486
427
  }
487
428
  Clusterer.prototype.onAdd = function () {
488
429
  var _this = this;
489
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
490
430
  // @ts-ignore
491
431
  this.activeMap = this.getMap();
492
432
  this.ready = true;
@@ -494,11 +434,8 @@ var Clusterer = /** @class */ (function () {
494
434
  // Add the map event listeners
495
435
  this.listeners = [
496
436
  google.maps.event.addListener(
497
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
498
437
  // @ts-ignore
499
- this.getMap(), 'zoom_changed',
500
- // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
501
- function () {
438
+ this.getMap(), 'zoom_changed', function () {
502
439
  _this.resetViewport(false);
503
440
  // Workaround for this Google bug: when map is at level 0 and "-" of
504
441
  // zoom slider is clicked, a "zoom_changed" event is fired even though
@@ -506,26 +443,20 @@ var Clusterer = /** @class */ (function () {
506
443
  // event is triggered so the cluster markers that have been removed
507
444
  // do not get redrawn. Same goes for a zoom in at maxZoom.
508
445
  if (
509
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
510
446
  // @ts-ignore
511
447
  _this.getMap().getZoom() === (_this.get('minZoom') || 0) ||
512
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
513
448
  // @ts-ignore
514
449
  _this.getMap().getZoom() === _this.get('maxZoom')) {
515
450
  google.maps.event.trigger(_this, 'idle');
516
451
  }
517
452
  }),
518
453
  google.maps.event.addListener(
519
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
520
454
  // @ts-ignore
521
- this.getMap(), 'idle',
522
- // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
523
- function () {
455
+ this.getMap(), 'idle', function () {
524
456
  _this.redraw();
525
457
  }),
526
458
  ];
527
459
  };
528
- // eslint-disable-next-line @getify/proper-arrows/this
529
460
  Clusterer.prototype.onRemove = function () {
530
461
  // Put all the managed markers back on the map:
531
462
  for (var i = 0; i < this.markers.length; i++) {
@@ -569,7 +500,6 @@ var Clusterer = /** @class */ (function () {
569
500
  bounds.extend(position);
570
501
  }
571
502
  }
572
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
573
503
  // @ts-ignore
574
504
  this.getMap().fitBounds(bounds);
575
505
  };
@@ -683,7 +613,7 @@ var Clusterer = /** @class */ (function () {
683
613
  };
684
614
  Clusterer.prototype.addMarkers = function (markers, optNoDraw) {
685
615
  for (var key in markers) {
686
- if (markers.hasOwnProperty(key)) {
616
+ if (Object.prototype.hasOwnProperty.call(markers, key)) {
687
617
  this.pushMarkerTo(markers[key]);
688
618
  }
689
619
  }
@@ -695,7 +625,6 @@ var Clusterer = /** @class */ (function () {
695
625
  var _this = this;
696
626
  // If the marker is draggable add a listener so we can update the clusters on the dragend:
697
627
  if (marker.getDraggable()) {
698
- // eslint-disable-next-line @getify/proper-arrows/name, @getify/proper-arrows/this
699
628
  google.maps.event.addListener(marker, 'dragend', function () {
700
629
  if (_this.ready) {
701
630
  marker.isAdded = false;
@@ -762,7 +691,6 @@ var Clusterer = /** @class */ (function () {
762
691
  }, 0);
763
692
  };
764
693
  Clusterer.prototype.getExtendedBounds = function (bounds) {
765
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
766
694
  // @ts-ignore
767
695
  var projection = this.getProjection();
768
696
  // Convert the points to pixels and the extend out by the grid size.
@@ -873,16 +801,13 @@ var Clusterer = /** @class */ (function () {
873
801
  //
874
802
  // See Comments 9 & 11 on Issue 3651 relating to this workaround for a Google Maps bug:
875
803
  var mapBounds =
876
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
877
804
  // @ts-ignore
878
805
  this.getMap().getZoom() > 3
879
806
  ? new google.maps.LatLngBounds(
880
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
881
807
  // @ts-ignore
882
808
  this.getMap()
883
809
  .getBounds()
884
810
  .getSouthWest(),
885
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
886
811
  // @ts-ignore
887
812
  this.getMap()
888
813
  .getBounds()
@@ -899,9 +824,7 @@ var Clusterer = /** @class */ (function () {
899
824
  }
900
825
  }
901
826
  if (iLast < this.markers.length) {
902
- this.timerRefStatic = window.setTimeout(
903
- // eslint-disable-next-line @getify/proper-arrows/this, @getify/proper-arrows/name
904
- function () {
827
+ this.timerRefStatic = window.setTimeout(function () {
905
828
  _this.createClusters(iLast);
906
829
  }, 0);
907
830
  }
@@ -924,11 +847,9 @@ var Clusterer = /** @class */ (function () {
924
847
  return function applyExtend(object) {
925
848
  // eslint-disable-next-line guard-for-in
926
849
  for (var property in object.prototype) {
927
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
928
850
  // @ts-ignore
929
851
  this.prototype[property] = object.prototype[property];
930
852
  }
931
- // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
932
853
  // @ts-ignore
933
854
  return this;
934
855
  }.apply(obj1, [obj2]);