{"version":3,"sources":["webpack:///./node_modules/@babel/runtime/helpers/asyncToGenerator.js","webpack:///./node_modules/@google/markerclusterer/dist/markerclusterer.esm.js","webpack:///./node_modules/google-maps/lib/Google.js"],"names":["MarkerClusterer","constructor","map","opt_markers","opt_options","extend","google","maps","OverlayView","map_","MARKER_CLUSTER_IMAGE_PATH_","MARKER_CLUSTER_IMAGE_EXTENSION_","markers_","clusters_","sizes","styles_","ready_","options","zIndex_","Marker","MAX_ZINDEX","gridSize_","minClusterSize_","maxZoom_","imagePath_","imageExtension_","zoomOnClick_","undefined","averageCenter_","setupStyles_","setMap","prevZoom_","getZoom","that","event","addListener","zoom","minZoom","maxZoom","Math","min","mapTypes","getMapTypeId","max","resetViewport","redraw","length","Object","keys","addMarkers","obj1","obj2","object","property","prototype","apply","onAdd","setReady_","draw","i","size","push","url","height","width","fitMapToMarkers","markers","getMarkers","bounds","LatLngBounds","marker","getPosition","fitBounds","setZIndex","zIndex","getZIndex","setStyles","styles","getStyles","isZoomOnClick","isAverageCenter","getTotalMarkers","setMaxZoom","getMaxZoom","calculator_","numStyles","index","count","dv","parseInt","text","setCalculator","calculator","getCalculator","opt_nodraw","pushMarkerTo_","isAdded","repaint","addMarker","removeMarker_","indexOf","m","splice","removeMarker","removed","removeMarkers","markersCopy","slice","r","ready","createClusters_","getTotalClusters","getMap","getGridSize","setGridSize","getMinClusterSize","setMinClusterSize","getExtendedBounds","projection","getProjection","tr","LatLng","getNorthEast","lat","lng","bl","getSouthWest","trPix","fromLatLngToDivPixel","x","y","blPix","ne","fromDivPixelToLatLng","sw","isMarkerInBounds_","contains","clearMarkers","opt_hide","cluster","remove","oldClusters","setTimeout","distanceBetweenPoints_","p1","p2","R","dLat","PI","dLon","a","sin","cos","c","atan2","sqrt","d","addToClosestCluster_","distance","clusterToAddTo","center","getCenter","isMarkerInClusterBounds","newCluster","Cluster","mapBounds","getBounds","markerClusterer","markerClusterer_","center_","bounds_","clusterIcon_","ClusterIcon","isMarkerAlreadyAdded","calculateBounds_","l","len","updateIcon","getMarkerClusterer","getSize","mz","hide","sums","setCenter","setSums","show","opt_padding","padding_","cluster_","div_","sums_","visible_","triggerClusterClick","clusterBounds","trigger","document","createElement","pos","getPosFromLatLng_","style","cssText","createCss","innerHTML","panes","getPanes","overlayMouseTarget","appendChild","addDomListener","latlng","width_","height_","top","left","display","onRemove","parentNode","removeChild","text_","index_","useStyle","url_","textColor_","anchor_","textSize_","backgroundPosition_","backgroundPosition","txtColor","txtSize","join"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iH;;;;;;;;;;;;AC9BA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,eAAe,CAAC;EACpBC,WAAWA,CAACC,GAAG,EAAEC,WAAW,EAAEC,WAAW,EAAE;IACzC,IAAI,CAACC,MAAM,CAACL,eAAe,EAAEM,MAAM,CAACC,IAAI,CAACC,WAAW,CAAC;IACrD,IAAI,CAACC,IAAI,GAAGP,GAAG;;IAEf;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACQ,0BAA0B,GAAG,aAAa;;IAE/C;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACC,+BAA+B,GAAG,KAAK;IAC5C;AACJ;AACA;AACA;IACI,IAAI,CAACC,QAAQ,GAAG,EAAE;;IAElB;AACJ;AACA;IACI,IAAI,CAACC,SAAS,GAAG,EAAE;IAEnB,IAAI,CAACC,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;;IAEjC;AACJ;AACA;AACA;IACI,IAAI,CAACC,OAAO,GAAG,EAAE;;IAEjB;AACJ;AACA;AACA;IACI,IAAI,CAACC,MAAM,GAAG,KAAK;IAEnB,IAAIC,OAAO,GAAGb,WAAW,IAAI,CAAC,CAAC;;IAE/B;AACJ;AACA;IACI,IAAI,CAACc,OAAO,GAAGD,OAAO,CAAC,QAAQ,CAAC,IA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","file":"vendors~dealer.chunk.js","sourcesContent":["function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n _next(undefined);\n });\n };\n}\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/**\n * Copyright 2019 Google LLC. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @name MarkerClusterer for Google Maps v3\n * @author Luke Mahe\n * @fileoverview\n * The library creates and manages per-zoom-level clusters for large amounts of\n * markers.\n */\n\n/**\n * A Marker Clusterer that clusters markers.\n *\n * @param {google.maps.Map} map The Google map to attach to.\n * @param {Array.<google.maps.Marker>=} opt_markers Optional markers to add to\n * the cluster.\n * @param {Object=} opt_options support the following options:\n * 'gridSize': (number) The grid size of a cluster in pixels.\n * 'maxZoom': (number) The maximum zoom level that a marker can be part of a\n * cluster.\n * 'zoomOnClick': (boolean) Whether the default behaviour of clicking on a\n * cluster is to zoom into it.\n * 'imagePath': (string) The base URL where the images representing\n * clusters will be found. The full URL will be:\n * {imagePath}[1-5].{imageExtension}\n * Default: '../images/m'.\n * 'imageExtension': (string) The suffix for images URL representing\n * clusters will be found. See _imagePath_ for details.\n * Default: 'png'.\n * 'averageCenter': (boolean) Whether the center of each cluster should be\n * the average of all markers in the cluster.\n * 'minimumClusterSize': (number) The minimum number of markers to be in a\n * cluster before the markers are hidden and a count\n * is shown.\n * 'zIndex': (number) the z-index of a cluster.\n * Default: google.maps.Marker.MAX_ZINDEX + 1\n * 'styles': (Array.<Object>) An Array of single object that has style properties for all cluster:\n * 'url': (string) The image url.\n * 'height': (number) The image height.\n * 'width': (number) The image width.\n * 'anchor': (Array) The anchor position of the label text.\n * 'textColor': (string) The text color.\n * 'textSize': (number) The text size.\n * 'backgroundPosition': (string) The position of the backgound x, y.\n * @constructor\n * @extends google.maps.OverlayView\n */\n\nclass MarkerClusterer {\n constructor(map, opt_markers, opt_options) {\n this.extend(MarkerClusterer, google.maps.OverlayView);\n this.map_ = map;\n\n /**\n * The marker cluster image path.\n *\n * @type {string}\n * @private\n */\n this.MARKER_CLUSTER_IMAGE_PATH_ = \"../images/m\";\n\n /**\n * The marker cluster image path.\n *\n * @type {string}\n * @private\n */\n this.MARKER_CLUSTER_IMAGE_EXTENSION_ = \"png\";\n /**\n * @type {Array.<google.maps.Marker>}\n * @private\n */\n this.markers_ = [];\n\n /**\n * @type {Array.<Cluster>}\n */\n this.clusters_ = [];\n\n this.sizes = [53, 56, 66, 78, 90];\n\n /**\n * @type {Array.<Object>}\n * @private\n */\n this.styles_ = [];\n\n /**\n * @type {boolean}\n * @private\n */\n this.ready_ = false;\n\n var options = opt_options || {};\n\n /**\n * @type {number}\n */\n this.zIndex_ = options[\"zIndex\"] || google.maps.Marker.MAX_ZINDEX + 1;\n\n /**\n * @type {number}\n * @private\n */\n this.gridSize_ = options[\"gridSize\"] || 60;\n\n /**\n * @private\n */\n this.minClusterSize_ = options[\"minimumClusterSize\"] || 2;\n\n /**\n * @type {?number}\n * @private\n */\n this.maxZoom_ = options[\"maxZoom\"] || null;\n\n this.styles_ = options[\"styles\"] || [];\n\n /**\n * @type {string}\n * @private\n */\n this.imagePath_ = options[\"imagePath\"] || this.MARKER_CLUSTER_IMAGE_PATH_;\n\n /**\n * @type {string}\n * @private\n */\n this.imageExtension_ =\n options[\"imageExtension\"] || this.MARKER_CLUSTER_IMAGE_EXTENSION_;\n\n /**\n * @type {boolean}\n * @private\n */\n this.zoomOnClick_ = true;\n\n if (options[\"zoomOnClick\"] != undefined) {\n this.zoomOnClick_ = options[\"zoomOnClick\"];\n }\n\n /**\n * @type {boolean}\n * @private\n */\n this.averageCenter_ = false;\n\n if (options[\"averageCenter\"] != undefined) {\n this.averageCenter_ = options[\"averageCenter\"];\n }\n\n this.setupStyles_();\n\n this.setMap(map);\n\n /**\n * @type {number}\n * @private\n */\n this.prevZoom_ = this.map_.getZoom();\n\n // Add the map event listeners\n var that = this;\n google.maps.event.addListener(this.map_, \"zoom_changed\", function() {\n // Determines map type and prevent illegal zoom levels\n var zoom = that.map_.getZoom();\n var minZoom = that.map_.minZoom || 0;\n var maxZoom = Math.min(\n that.map_.maxZoom || 100,\n that.map_.mapTypes[that.map_.getMapTypeId()].maxZoom\n );\n zoom = Math.min(Math.max(zoom, minZoom), maxZoom);\n\n if (that.prevZoom_ != zoom) {\n that.prevZoom_ = zoom;\n that.resetViewport();\n }\n });\n\n google.maps.event.addListener(this.map_, \"idle\", function() {\n that.redraw();\n });\n\n // Finally, add the markers\n if (\n opt_markers &&\n (opt_markers.length || Object.keys(opt_markers).length)\n ) {\n this.addMarkers(opt_markers, false);\n }\n }\n\n /**\n * Extends a objects prototype by anothers.\n *\n * @param {Object} obj1 The object to be extended.\n * @param {Object} obj2 The object to extend with.\n * @return {Object} The new extended object.\n * @ignore\n */\n extend(obj1, obj2) {\n return function(object) {\n for (var property in object.prototype) {\n this.prototype[property] = object.prototype[property];\n }\n return this;\n }.apply(obj1, [obj2]);\n }\n\n /**\n * Implementaion of the interface method.\n * @ignore\n */\n onAdd() {\n this.setReady_(true);\n }\n\n /**\n * Implementaion of the interface method.\n * @ignore\n */\n draw() {}\n\n /**\n * Sets up the styles object.\n *\n * @private\n */\n setupStyles_() {\n if (this.styles_.length) {\n return;\n }\n\n for (var i = 0, size; (size = this.sizes[i]); i++) {\n this.styles_.push({\n url: this.imagePath_ + (i + 1) + \".\" + this.imageExtension_,\n height: size,\n width: size\n });\n }\n }\n\n /**\n * Fit the map to the bounds of the markers in the clusterer.\n */\n fitMapToMarkers() {\n var markers = this.getMarkers();\n var bounds = new google.maps.LatLngBounds();\n for (var i = 0, marker; (marker = markers[i]); i++) {\n bounds.extend(marker.getPosition());\n }\n\n this.map_.fitBounds(bounds);\n }\n\n /**\n * @param {number} zIndex\n */\n setZIndex(zIndex) {\n this.zIndex_ = zIndex;\n }\n\n /**\n * @return {number}\n */\n getZIndex() {\n return this.zIndex_;\n }\n\n /**\n * Sets the styles.\n *\n * @param {Object} styles The style to set.\n */\n setStyles(styles) {\n this.styles_ = styles;\n }\n\n /**\n * Gets the styles.\n *\n * @return {Object} The styles object.\n */\n getStyles() {\n return this.styles_;\n }\n\n /**\n * Whether zoom on click is set.\n *\n * @return {boolean} True if zoomOnClick_ is set.\n */\n isZoomOnClick() {\n return this.zoomOnClick_;\n }\n\n /**\n * Whether average center is set.\n *\n * @return {boolean} True if averageCenter_ is set.\n */\n isAverageCenter() {\n return this.averageCenter_;\n }\n\n /**\n * Returns the array of markers in the clusterer.\n *\n * @return {Array.<google.maps.Marker>} The markers.\n */\n getMarkers() {\n return this.markers_;\n }\n\n /**\n * Returns the number of markers in the clusterer\n *\n * @return {Number} The number of markers.\n */\n getTotalMarkers() {\n return this.markers_.length;\n }\n\n /**\n * Sets the max zoom for the clusterer.\n *\n * @param {number} maxZoom The max zoom level.\n */\n setMaxZoom(maxZoom) {\n this.maxZoom_ = maxZoom;\n }\n\n /**\n * Gets the max zoom for the clusterer.\n *\n * @return {number} The max zoom level.\n */\n getMaxZoom() {\n return this.maxZoom_;\n }\n\n /**\n * The function for calculating the cluster icon image.\n *\n * @param {Array.<google.maps.Marker>} markers The markers in the clusterer.\n * @param {number} numStyles The number of styles available.\n * @return {Object} A object properties: 'text' (string) and 'index' (number).\n * @private\n */\n calculator_(markers, numStyles) {\n var index = 0;\n var count = markers.length;\n var dv = count;\n while (dv !== 0) {\n dv = parseInt(dv / 10, 10);\n index++;\n }\n\n index = Math.min(index, numStyles);\n return {\n text: count,\n index: index\n };\n }\n\n /**\n * Set the calculator function.\n *\n * @param {function(Array, number)} calculator The function to set as the\n * calculator. The function should return a object properties:\n * 'text' (string) and 'index' (number).\n *\n */\n setCalculator(calculator) {\n this.calculator_ = calculator;\n }\n\n /**\n * Get the calculator function.\n *\n * @return {function(Array, number)} the calculator function.\n */\n getCalculator() {\n return this.calculator_;\n }\n\n /**\n * Add an array of markers to the clusterer.\n *\n * @param {Array.<google.maps.Marker>} markers The markers to add.\n * @param {boolean=} opt_nodraw Whether to redraw the clusters.\n */\n addMarkers(markers, opt_nodraw) {\n if (markers.length) {\n for (let i = 0, marker; (marker = markers[i]); i++) {\n this.pushMarkerTo_(marker);\n }\n } else if (Object.keys(markers).length) {\n for (let marker in markers) {\n this.pushMarkerTo_(markers[marker]);\n }\n }\n if (!opt_nodraw) {\n this.redraw();\n }\n }\n\n /**\n * Pushes a marker to the clusterer.\n *\n * @param {google.maps.Marker} marker The marker to add.\n * @private\n */\n pushMarkerTo_(marker) {\n marker.isAdded = false;\n if (marker[\"draggable\"]) {\n // If the marker is draggable add a listener so we update the clusters on\n // the drag end.\n var that = this;\n google.maps.event.addListener(marker, \"dragend\", function() {\n marker.isAdded = false;\n that.repaint();\n });\n }\n this.markers_.push(marker);\n }\n\n /**\n * Adds a marker to the clusterer and redraws if needed.\n *\n * @param {google.maps.Marker} marker The marker to add.\n * @param {boolean=} opt_nodraw Whether to redraw the clusters.\n */\n addMarker(marker, opt_nodraw) {\n this.pushMarkerTo_(marker);\n if (!opt_nodraw) {\n this.redraw();\n }\n }\n\n /**\n * Removes a marker and returns true if removed, false if not\n *\n * @param {google.maps.Marker} marker The marker to remove\n * @return {boolean} Whether the marker was removed or not\n * @private\n */\n removeMarker_(marker) {\n var index = -1;\n if (this.markers_.indexOf) {\n index = this.markers_.indexOf(marker);\n } else {\n for (var i = 0, m; (m = this.markers_[i]); i++) {\n if (m == marker) {\n index = i;\n break;\n }\n }\n }\n\n if (index == -1) {\n // Marker is not in our list of markers.\n return false;\n }\n\n marker.setMap(null);\n\n this.markers_.splice(index, 1);\n\n return true;\n }\n\n /**\n * Remove a marker from the cluster.\n *\n * @param {google.maps.Marker} marker The marker to remove.\n * @param {boolean=} opt_nodraw Optional boolean to force no redraw.\n * @return {boolean} True if the marker was removed.\n */\n removeMarker(marker, opt_nodraw) {\n var removed = this.removeMarker_(marker);\n\n if (!opt_nodraw && removed) {\n this.resetViewport();\n this.redraw();\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Removes an array of markers from the cluster.\n *\n * @param {Array.<google.maps.Marker>} markers The markers to remove.\n * @param {boolean=} opt_nodraw Optional boolean to force no redraw.\n */\n removeMarkers(markers, opt_nodraw) {\n // create a local copy of markers if required\n // (removeMarker_ modifies the getMarkers() array in place)\n var markersCopy = markers === this.getMarkers() ? markers.slice() : markers;\n var removed = false;\n\n for (var i = 0, marker; (marker = markersCopy[i]); i++) {\n var r = this.removeMarker_(marker);\n removed = removed || r;\n }\n\n if (!opt_nodraw && removed) {\n this.resetViewport();\n this.redraw();\n return true;\n }\n }\n\n /**\n * Sets the clusterer's ready state.\n *\n * @param {boolean} ready The state.\n * @private\n */\n setReady_(ready) {\n if (!this.ready_) {\n this.ready_ = ready;\n this.createClusters_();\n }\n }\n\n /**\n * Returns the number of clusters in the clusterer.\n *\n * @return {number} The number of clusters.\n */\n getTotalClusters() {\n return this.clusters_.length;\n }\n\n /**\n * Returns the google map that the clusterer is associated with.\n *\n * @return {google.maps.Map} The map.\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Sets the google map that the clusterer is associated with.\n *\n * @param {google.maps.Map} map The map.\n */\n setMap(map) {\n this.map_ = map;\n }\n\n /**\n * Returns the size of the grid.\n *\n * @return {number} The grid size.\n */\n getGridSize() {\n return this.gridSize_;\n }\n\n /**\n * Sets the size of the grid.\n *\n * @param {number} size The grid size.\n */\n setGridSize(size) {\n this.gridSize_ = size;\n }\n\n /**\n * Returns the min cluster size.\n *\n * @return {number} The grid size.\n */\n getMinClusterSize() {\n return this.minClusterSize_;\n }\n\n /**\n * Sets the min cluster size.\n *\n * @param {number} size The grid size.\n */\n setMinClusterSize(size) {\n this.minClusterSize_ = size;\n }\n\n /**\n * Extends a bounds object by the grid size.\n *\n * @param {google.maps.LatLngBounds} bounds The bounds to extend.\n * @return {google.maps.LatLngBounds} The extended bounds.\n */\n getExtendedBounds(bounds) {\n var projection = this.getProjection();\n\n // Turn the bounds into latlng.\n var tr = new google.maps.LatLng(\n bounds.getNorthEast().lat(),\n bounds.getNorthEast().lng()\n );\n var bl = new google.maps.LatLng(\n bounds.getSouthWest().lat(),\n bounds.getSouthWest().lng()\n );\n\n // Convert the points to pixels and the extend out by the grid size.\n var trPix = projection.fromLatLngToDivPixel(tr);\n trPix.x += this.gridSize_;\n trPix.y -= this.gridSize_;\n\n var blPix = projection.fromLatLngToDivPixel(bl);\n blPix.x -= this.gridSize_;\n blPix.y += this.gridSize_;\n\n // Convert the pixel points back to LatLng\n var ne = projection.fromDivPixelToLatLng(trPix);\n var sw = projection.fromDivPixelToLatLng(blPix);\n\n // Extend the bounds to contain the new bounds.\n bounds.extend(ne);\n bounds.extend(sw);\n\n return bounds;\n }\n\n /**\n * Determins if a marker is contained in a bounds.\n *\n * @param {google.maps.Marker} marker The marker to check.\n * @param {google.maps.LatLngBounds} bounds The bounds to check against.\n * @return {boolean} True if the marker is in the bounds.\n * @private\n */\n isMarkerInBounds_(marker, bounds) {\n return bounds.contains(marker.getPosition());\n }\n\n /**\n * Clears all clusters and markers from the clusterer.\n */\n clearMarkers() {\n this.resetViewport(true);\n\n // Set the markers a empty array.\n this.markers_ = [];\n }\n\n /**\n * Clears all existing clusters and recreates them.\n * @param {boolean} opt_hide To also hide the marker.\n */\n resetViewport(opt_hide) {\n // Remove all the clusters\n for (let i = 0, cluster; (cluster = this.clusters_[i]); i++) {\n cluster.remove();\n }\n\n // Reset the markers to not be added and to be invisible.\n for (let i = 0, marker; (marker = this.markers_[i]); i++) {\n marker.isAdded = false;\n if (opt_hide) {\n marker.setMap(null);\n }\n }\n\n this.clusters_ = [];\n }\n\n /**\n *\n */\n repaint() {\n var oldClusters = this.clusters_.slice();\n this.clusters_.length = 0;\n this.resetViewport();\n this.redraw();\n\n // Remove the old clusters.\n // Do it in a timeout so the other clusters have been drawn first.\n setTimeout(function() {\n for (var i = 0, cluster; (cluster = oldClusters[i]); i++) {\n cluster.remove();\n }\n }, 0);\n }\n\n /**\n * Redraws the clusters.\n */\n redraw() {\n this.createClusters_();\n }\n\n /**\n * Calculates the distance between two latlng locations in km.\n * @see http://www.movable-type.co.uk/scripts/latlong.html\n *\n * @param {google.maps.LatLng} p1 The first lat lng point.\n * @param {google.maps.LatLng} p2 The second lat lng point.\n * @return {number} The distance between the two points in km.\n * @private\n */\n distanceBetweenPoints_(p1, p2) {\n if (!p1 || !p2) {\n return 0;\n }\n\n var R = 6371; // Radius of the Earth in km\n var dLat = ((p2.lat() - p1.lat()) * Math.PI) / 180;\n var dLon = ((p2.lng() - p1.lng()) * Math.PI) / 180;\n var 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 var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n var d = R * c;\n return d;\n }\n\n /**\n * Add a marker to a cluster, or creates a new cluster.\n *\n * @param {google.maps.Marker} marker The marker to add.\n * @private\n */\n addToClosestCluster_(marker) {\n var distance = 40000; // Some large number\n var clusterToAddTo = null;\n for (var i = 0, cluster; (cluster = this.clusters_[i]); i++) {\n var center = cluster.getCenter();\n if (center) {\n var d = this.distanceBetweenPoints_(center, marker.getPosition());\n if (d < distance) {\n distance = d;\n clusterToAddTo = cluster;\n }\n }\n }\n\n if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) {\n clusterToAddTo.addMarker(marker);\n } else {\n var newCluster = new Cluster(this);\n newCluster.addMarker(marker);\n this.clusters_.push(newCluster);\n }\n }\n\n /**\n * Creates the clusters.\n *\n * @private\n */\n createClusters_() {\n if (!this.ready_) {\n return;\n }\n\n // Get our current map view bounds.\n // Create a new bounds object so we don't affect the map.\n var mapBounds = new google.maps.LatLngBounds(\n this.map_.getBounds().getSouthWest(),\n this.map_.getBounds().getNorthEast()\n );\n var bounds = this.getExtendedBounds(mapBounds);\n\n for (var i = 0, marker; (marker = this.markers_[i]); i++) {\n if (!marker.isAdded && this.isMarkerInBounds_(marker, bounds)) {\n this.addToClosestCluster_(marker);\n }\n }\n }\n}\n\n/**\n * A cluster that contains markers.\n *\n * @param {MarkerClusterer} markerClusterer The markerclusterer that this\n * cluster is associated with.\n * @constructor\n * @ignore\n */\nclass Cluster {\n constructor(markerClusterer) {\n this.markerClusterer_ = markerClusterer;\n this.map_ = markerClusterer.getMap();\n this.gridSize_ = markerClusterer.getGridSize();\n this.minClusterSize_ = markerClusterer.getMinClusterSize();\n this.averageCenter_ = markerClusterer.isAverageCenter();\n this.center_ = null;\n this.markers_ = [];\n this.bounds_ = null;\n this.clusterIcon_ = new ClusterIcon(\n this,\n markerClusterer.getStyles(),\n markerClusterer.getGridSize()\n );\n }\n\n /**\n * Determins if a marker is already added to the cluster.\n *\n * @param {google.maps.Marker} marker The marker to check.\n * @return {boolean} True if the marker is already added.\n */\n isMarkerAlreadyAdded(marker) {\n if (this.markers_.indexOf) {\n return this.markers_.indexOf(marker) != -1;\n } else {\n for (var i = 0, m; (m = this.markers_[i]); i++) {\n if (m == marker) {\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * Add a marker the cluster.\n *\n * @param {google.maps.Marker} marker The marker to add.\n * @return {boolean} True if the marker was added.\n */\n addMarker(marker) {\n if (this.isMarkerAlreadyAdded(marker)) {\n return false;\n }\n\n if (!this.center_) {\n this.center_ = marker.getPosition();\n this.calculateBounds_();\n } else {\n if (this.averageCenter_) {\n var l = this.markers_.length + 1;\n var lat =\n (this.center_.lat() * (l - 1) + marker.getPosition().lat()) / l;\n var lng =\n (this.center_.lng() * (l - 1) + marker.getPosition().lng()) / l;\n this.center_ = new google.maps.LatLng(lat, lng);\n this.calculateBounds_();\n }\n }\n\n marker.isAdded = true;\n this.markers_.push(marker);\n\n var len = this.markers_.length;\n if (len < this.minClusterSize_ && marker.getMap() != this.map_) {\n // Min cluster size not reached so show the marker.\n marker.setMap(this.map_);\n }\n\n if (len == this.minClusterSize_) {\n // Hide the markers that were showing.\n for (var i = 0; i < len; i++) {\n this.markers_[i].setMap(null);\n }\n }\n\n if (len >= this.minClusterSize_) {\n marker.setMap(null);\n }\n\n this.updateIcon();\n return true;\n }\n\n /**\n * Returns the marker clusterer that the cluster is associated with.\n *\n * @return {MarkerClusterer} The associated marker clusterer.\n */\n getMarkerClusterer() {\n return this.markerClusterer_;\n }\n\n /**\n * Returns the bounds of the cluster.\n *\n * @return {google.maps.LatLngBounds} the cluster bounds.\n */\n getBounds() {\n var bounds = new google.maps.LatLngBounds(this.center_, this.center_);\n var markers = this.getMarkers();\n for (var i = 0, marker; (marker = markers[i]); i++) {\n bounds.extend(marker.getPosition());\n }\n return bounds;\n }\n\n /**\n * Removes the cluster\n */\n remove() {\n this.clusterIcon_.remove();\n this.markers_.length = 0;\n delete this.markers_;\n }\n\n /**\n * Returns the number of markers in the cluster.\n *\n * @return {number} The number of markers in the cluster.\n */\n getSize() {\n return this.markers_.length;\n }\n\n /**\n * Returns a list of the markers in the cluster.\n *\n * @return {Array.<google.maps.Marker>} The markers in the cluster.\n */\n getMarkers() {\n return this.markers_;\n }\n\n /**\n * Returns the center of the cluster.\n *\n * @return {google.maps.LatLng} The cluster center.\n */\n getCenter() {\n return this.center_;\n }\n\n /**\n * Calculated the extended bounds of the cluster with the grid.\n *\n * @private\n */\n calculateBounds_() {\n var bounds = new google.maps.LatLngBounds(this.center_, this.center_);\n this.bounds_ = this.markerClusterer_.getExtendedBounds(bounds);\n }\n\n /**\n * Determines if a marker lies in the clusters bounds.\n *\n * @param {google.maps.Marker} marker The marker to check.\n * @return {boolean} True if the marker lies in the bounds.\n */\n isMarkerInClusterBounds(marker) {\n return this.bounds_.contains(marker.getPosition());\n }\n\n /**\n * Returns the map that the cluster is associated with.\n *\n * @return {google.maps.Map} The map.\n */\n getMap() {\n return this.map_;\n }\n\n /**\n * Updates the cluster icon\n */\n updateIcon() {\n var zoom = this.map_.getZoom();\n var mz = this.markerClusterer_.getMaxZoom();\n\n if (mz && zoom > mz) {\n // The zoom is greater than our max zoom so show all the markers in cluster.\n for (var i = 0, marker; (marker = this.markers_[i]); i++) {\n marker.setMap(this.map_);\n }\n return;\n }\n\n if (this.markers_.length < this.minClusterSize_) {\n // Min cluster size not yet reached.\n this.clusterIcon_.hide();\n return;\n }\n\n var numStyles = this.markerClusterer_.getStyles().length;\n var sums = this.markerClusterer_.getCalculator()(this.markers_, numStyles);\n this.clusterIcon_.setCenter(this.center_);\n this.clusterIcon_.setSums(sums);\n this.clusterIcon_.show();\n }\n}\n\n/**\n * A cluster icon\n *\n * @param {Cluster} cluster The cluster to be associated with.\n * @param {Object} styles An object that has style properties:\n * 'url': (string) The image url.\n * 'height': (number) The image height.\n * 'width': (number) The image width.\n * 'anchor': (Array) The anchor position of the label text.\n * 'textColor': (string) The text color.\n * 'textSize': (number) The text size.\n * 'backgroundPosition: (string) The background postition x, y.\n * @param {number=} opt_padding Optional padding to apply to the cluster icon.\n * @constructor\n * @extends google.maps.OverlayView\n * @ignore\n */\nclass ClusterIcon {\n constructor(cluster, styles, opt_padding) {\n cluster.getMarkerClusterer().extend(ClusterIcon, google.maps.OverlayView);\n\n this.styles_ = styles;\n this.padding_ = opt_padding || 0;\n this.cluster_ = cluster;\n this.center_ = null;\n this.map_ = cluster.getMap();\n this.div_ = null;\n this.sums_ = null;\n this.visible_ = false;\n\n this.setMap(this.map_);\n }\n\n /**\n * Triggers the clusterclick event and zoom's if the option is set.\n */\n triggerClusterClick() {\n var clusterBounds = this.cluster_.getBounds();\n var markerClusterer = this.cluster_.getMarkerClusterer();\n\n // Trigger the clusterclick event.\n google.maps.event.trigger(\n markerClusterer.map_,\n \"clusterclick\",\n this.cluster_\n );\n\n if (markerClusterer.isZoomOnClick()) {\n // Zoom into the cluster.\n this.map_.fitBounds(clusterBounds);\n this.map_.setCenter(clusterBounds.getCenter());\n }\n }\n\n /**\n * Adding the cluster icon to the dom.\n * @ignore\n */\n onAdd() {\n this.div_ = document.createElement(\"DIV\");\n if (this.visible_) {\n var pos = this.getPosFromLatLng_(this.center_);\n this.div_.style.cssText = this.createCss(pos);\n this.div_.innerHTML = this.sums_.text;\n }\n\n var panes = this.getPanes();\n panes.overlayMouseTarget.appendChild(this.div_);\n\n var that = this;\n google.maps.event.addDomListener(this.div_, \"click\", function() {\n that.triggerClusterClick();\n });\n }\n\n /**\n * Returns the position to place the div dending on the latlng.\n *\n * @param {google.maps.LatLng} latlng The position in latlng.\n * @return {google.maps.Point} The position in pixels.\n * @private\n */\n getPosFromLatLng_(latlng) {\n var pos = this.getProjection().fromLatLngToDivPixel(latlng);\n pos.x -= parseInt(this.width_ / 2, 10);\n pos.y -= parseInt(this.height_ / 2, 10);\n return pos;\n }\n\n /**\n * Draw the icon.\n * @ignore\n */\n draw() {\n if (this.visible_) {\n var pos = this.getPosFromLatLng_(this.center_);\n this.div_.style.top = pos.y + \"px\";\n this.div_.style.left = pos.x + \"px\";\n }\n }\n\n /**\n * Hide the icon.\n */\n hide() {\n if (this.div_) {\n this.div_.style.display = \"none\";\n }\n this.visible_ = false;\n }\n\n /**\n * Position and show the icon.\n */\n show() {\n if (this.div_) {\n var pos = this.getPosFromLatLng_(this.center_);\n this.div_.style.cssText = this.createCss(pos);\n this.div_.style.display = \"\";\n }\n this.visible_ = true;\n }\n\n /**\n * Remove the icon from the map\n */\n remove() {\n this.setMap(null);\n }\n\n /**\n * Implementation of the onRemove interface.\n * @ignore\n */\n onRemove() {\n if (this.div_ && this.div_.parentNode) {\n this.hide();\n this.div_.parentNode.removeChild(this.div_);\n this.div_ = null;\n }\n }\n\n /**\n * Set the sums of the icon.\n *\n * @param {Object} sums The sums containing:\n * 'text': (string) The text to display in the icon.\n * 'index': (number) The style index of the icon.\n */\n setSums(sums) {\n this.sums_ = sums;\n this.text_ = sums.text;\n this.index_ = sums.index;\n if (this.div_) {\n this.div_.innerHTML = sums.text;\n }\n\n this.useStyle();\n }\n\n /**\n * Sets the icon to the the styles.\n */\n useStyle() {\n var index = Math.max(0, this.sums_.index - 1);\n index = Math.min(this.styles_.length - 1, index);\n var style = this.styles_[index];\n this.url_ = style[\"url\"];\n this.height_ = style[\"height\"];\n this.width_ = style[\"width\"];\n this.textColor_ = style[\"textColor\"];\n this.anchor_ = style[\"anchor\"];\n this.textSize_ = style[\"textSize\"];\n this.backgroundPosition_ = style[\"backgroundPosition\"];\n }\n\n /**\n * Sets the center of the icon.\n *\n * @param {google.maps.LatLng} center The latlng to set as the center.\n */\n setCenter(center) {\n this.center_ = center;\n }\n\n /**\n * Create the css text based on the position of the icon.\n *\n * @param {google.maps.Point} pos The position.\n * @return {string} The css style text.\n */\n createCss(pos) {\n var style = [];\n style.push(\"z-index:\" + this.cluster_.markerClusterer_.getZIndex() + \";\");\n style.push(\"background-image:url(\" + this.url_ + \");\");\n var backgroundPosition = this.backgroundPosition_\n ? this.backgroundPosition_\n : \"0 0\";\n style.push(\"background-position:\" + backgroundPosition + \";\");\n\n if (typeof this.anchor_ === \"object\") {\n if (\n typeof this.anchor_[0] === \"number\" &&\n this.anchor_[0] > 0 &&\n this.anchor_[0] < this.height_\n ) {\n style.push(\n \"height:\" +\n (this.height_ - this.anchor_[0]) +\n \"px; padding-top:\" +\n this.anchor_[0] +\n \"px;\"\n );\n } else {\n style.push(\n \"height:\" + this.height_ + \"px; line-height:\" + this.height_ + \"px;\"\n );\n }\n if (\n typeof this.anchor_[1] === \"number\" &&\n this.anchor_[1] > 0 &&\n this.anchor_[1] < this.width_\n ) {\n style.push(\n \"width:\" +\n (this.width_ - this.anchor_[1]) +\n \"px; padding-left:\" +\n this.anchor_[1] +\n \"px;\"\n );\n } else {\n style.push(\"width:\" + this.width_ + \"px; text-align:center;\");\n }\n } else {\n style.push(\n \"height:\" +\n this.height_ +\n \"px; line-height:\" +\n this.height_ +\n \"px; width:\" +\n this.width_ +\n \"px; text-align:center;\"\n );\n }\n\n var txtColor = this.textColor_ ? this.textColor_ : \"black\";\n var txtSize = this.textSize_ ? this.textSize_ : 11;\n\n style.push(\n \"cursor:pointer; top:\" +\n pos.y +\n \"px; left:\" +\n pos.x +\n \"px; color:\" +\n txtColor +\n \"; position:absolute; font-size:\" +\n txtSize +\n \"px; font-family:Arial,sans-serif; font-weight:bold\"\n );\n return style.join(\"\");\n }\n}\n\nexport default MarkerClusterer;\n","(function(root, factory) {\n\n\tif (root === null) {\n\t\tthrow new Error('Google-maps package can be used only in browser');\n\t}\n\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t} else if (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t} else {\n\t\troot.GoogleMapsLoader = factory();\n\t}\n\n})(typeof window !== 'undefined' ? window : null, function() {\n\n\n\t'use strict';\n\n\n\tvar googleVersion = '3.31';\n\n\tvar script = null;\n\n\tvar google = null;\n\n\tvar loading = false;\n\n\tvar callbacks = [];\n\n\tvar onLoadEvents = [];\n\n\tvar originalCreateLoaderMethod = null;\n\n\n\tvar GoogleMapsLoader = {};\n\n\n\tGoogleMapsLoader.URL = 'https://maps.googleapis.com/maps/api/js';\n\n\tGoogleMapsLoader.KEY = null;\n\n\tGoogleMapsLoader.LIBRARIES = [];\n\n\tGoogleMapsLoader.CLIENT = null;\n\n\tGoogleMapsLoader.CHANNEL = null;\n\n\tGoogleMapsLoader.LANGUAGE = null;\n\n\tGoogleMapsLoader.REGION = null;\n\n\tGoogleMapsLoader.VERSION = googleVersion;\n\n\tGoogleMapsLoader.WINDOW_CALLBACK_NAME = '__google_maps_api_provider_initializator__';\n\n\n\tGoogleMapsLoader._googleMockApiObject = {};\n\n\n\tGoogleMapsLoader.load = function(fn) {\n\t\tif (google === null) {\n\t\t\tif (loading === true) {\n\t\t\t\tif (fn) {\n\t\t\t\t\tcallbacks.push(fn);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tloading = true;\n\n\t\t\t\twindow[GoogleMapsLoader.WINDOW_CALLBACK_NAME] = function() {\n\t\t\t\t\tready(fn);\n\t\t\t\t};\n\n\t\t\t\tGoogleMapsLoader.createLoader();\n\t\t\t}\n\t\t} else if (fn) {\n\t\t\tfn(google);\n\t\t}\n\t};\n\n\n\tGoogleMapsLoader.createLoader = function() {\n\t\tscript = document.createElement('script');\n\t\tscript.type = 'text/javascript';\n\t\tscript.src = GoogleMapsLoader.createUrl();\n\n\t\tdocument.body.appendChild(script);\n\t};\n\n\n\tGoogleMapsLoader.isLoaded = function() {\n\t\treturn google !== null;\n\t};\n\n\n\tGoogleMapsLoader.createUrl = function() {\n\t\tvar url = GoogleMapsLoader.URL;\n\n\t\turl += '?callback=' + GoogleMapsLoader.WINDOW_CALLBACK_NAME;\n\n\t\tif (GoogleMapsLoader.KEY) {\n\t\t\turl += '&key=' + GoogleMapsLoader.KEY;\n\t\t}\n\n\t\tif (GoogleMapsLoader.LIBRARIES.length > 0) {\n\t\t\turl += '&libraries=' + GoogleMapsLoader.LIBRARIES.join(',');\n\t\t}\n\n\t\tif (GoogleMapsLoader.CLIENT) {\n\t\t\turl += '&client=' + GoogleMapsLoader.CLIENT;\n\t\t}\n\n\t\tif (GoogleMapsLoader.CHANNEL) {\n\t\t\turl += '&channel=' + GoogleMapsLoader.CHANNEL;\n\t\t}\n\n\t\tif (GoogleMapsLoader.LANGUAGE) {\n\t\t\turl += '&language=' + GoogleMapsLoader.LANGUAGE;\n\t\t}\n\n\t\tif (GoogleMapsLoader.REGION) {\n\t\t\turl += '®ion=' + GoogleMapsLoader.REGION;\n\t\t}\n\n\t\tif (GoogleMapsLoader.VERSION) {\n\t\t\turl += '&v=' + GoogleMapsLoader.VERSION;\n\t\t}\n\n\t\treturn url;\n\t};\n\n\n\tGoogleMapsLoader.release = function(fn) {\n\t\tvar release = function() {\n\t\t\tGoogleMapsLoader.KEY = null;\n\t\t\tGoogleMapsLoader.LIBRARIES = [];\n\t\t\tGoogleMapsLoader.CLIENT = null;\n\t\t\tGoogleMapsLoader.CHANNEL = null;\n\t\t\tGoogleMapsLoader.LANGUAGE = null;\n\t\t\tGoogleMapsLoader.REGION = null;\n\t\t\tGoogleMapsLoader.VERSION = googleVersion;\n\n\t\t\tgoogle = null;\n\t\t\tloading = false;\n\t\t\tcallbacks = [];\n\t\t\tonLoadEvents = [];\n\n\t\t\tif (typeof window.google !== 'undefined') {\n\t\t\t\tdelete window.google;\n\t\t\t}\n\n\t\t\tif (typeof window[GoogleMapsLoader.WINDOW_CALLBACK_NAME] !== 'undefined') {\n\t\t\t\tdelete window[GoogleMapsLoader.WINDOW_CALLBACK_NAME];\n\t\t\t}\n\n\t\t\tif (originalCreateLoaderMethod !== null) {\n\t\t\t\tGoogleMapsLoader.createLoader = originalCreateLoaderMethod;\n\t\t\t\toriginalCreateLoaderMethod = null;\n\t\t\t}\n\n\t\t\tif (script !== null) {\n\t\t\t\tscript.parentElement.removeChild(script);\n\t\t\t\tscript = null;\n\t\t\t}\n\n\t\t\tif (fn) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t};\n\n\t\tif (loading) {\n\t\t\tGoogleMapsLoader.load(function() {\n\t\t\t\trelease();\n\t\t\t});\n\t\t} else {\n\t\t\trelease();\n\t\t}\n\t};\n\n\n\tGoogleMapsLoader.onLoad = function(fn) {\n\t\tonLoadEvents.push(fn);\n\t};\n\n\n\tGoogleMapsLoader.makeMock = function() {\n\t\toriginalCreateLoaderMethod = GoogleMapsLoader.createLoader;\n\n\t\tGoogleMapsLoader.createLoader = function() {\n\t\t\twindow.google = GoogleMapsLoader._googleMockApiObject;\n\t\t\twindow[GoogleMapsLoader.WINDOW_CALLBACK_NAME]();\n\t\t};\n\t};\n\n\n\tvar ready = function(fn) {\n\t\tvar i;\n\n\t\tloading = false;\n\n\t\tif (google === null) {\n\t\t\tgoogle = window.google;\n\t\t}\n\n\t\tfor (i = 0; i < onLoadEvents.length; i++) {\n\t\t\tonLoadEvents[i](google);\n\t\t}\n\n\t\tif (fn) {\n\t\t\tfn(google);\n\t\t}\n\n\t\tfor (i = 0; i < callbacks.length; i++) {\n\t\t\tcallbacks[i](google);\n\t\t}\n\n\t\tcallbacks = [];\n\t};\n\n\n\treturn GoogleMapsLoader;\n\n});\n"],"sourceRoot":""}