UNPKG

highcharts

Version:
45 lines (42 loc) 17.7 kB
/* Highcharts JS v8.0.0 (2019-12-10) Marker clusters module for Highcharts (c) 2010-2019 Wojciech Chmiel License: www.highcharts.com/license */ (function(k){"object"===typeof module&&module.exports?(k["default"]=k,module.exports=k):"function"===typeof define&&define.amd?define("highcharts/modules/marker-clusters",["highcharts"],function(w){k(w);k.Highcharts=w;return k}):k("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(k){function w(D,k,I,w){D.hasOwnProperty(k)||(D[k]=w.apply(null,I))}k=k?k._modules:{};w(k,"modules/marker-clusters.src.js",[k["parts/Globals.js"],k["parts/Utilities.js"]],function(k,w){function I(a){var b=a.length, d=0,f=0,c;for(c=0;c<b;c++)d+=a[c].x,f+=a[c].y;return{x:d/b,y:f/b}}function D(a,b){var d=[];d.length=b;a.clusters.forEach(function(a){a.data.forEach(function(a){d[a.dataIndex]=a})});a.noise.forEach(function(a){d[a.data[0].dataIndex]=a.data[0]});return d}function P(a,b,d,f,c){a.point&&(f&&a.point.graphic&&(a.point.graphic.show(),a.point.graphic.attr({opacity:b}).animate({opacity:1},d)),c&&a.point.dataLabel&&(a.point.dataLabel.show(),a.point.dataLabel.attr({opacity:b}).animate({opacity:1},d)))}function Q(a, b,d){a.point&&(b&&a.point.graphic&&a.point.graphic.hide(),d&&a.point.dataLabel&&a.point.dataLabel.hide())}function Y(a){a&&R(a,function(a){a.point&&a.point.destroy&&a.point.destroy()})}function K(a,b,d,f){P(a,f,d,!0,!0);b.forEach(function(a){a.point&&a.point.destroy&&a.point.destroy()})}var J=this&&this.__read||function(a,b){var d="function"===typeof Symbol&&a[Symbol.iterator];if(!d)return a;a=d.call(a);var f,c=[];try{for(;(void 0===b||0<b--)&&!(f=a.next()).done;)c.push(f.value)}catch(h){var l={error:h}}finally{try{f&& !f.done&&(d=a["return"])&&d.call(a)}finally{if(l)throw l.error;}}return c},L=k.Series,u=k.seriesTypes.scatter,Z=k.Point,aa=k.SVGRenderer,A=k.addEvent,M=k.merge,B=w.defined,S=w.isArray,N=w.isObject,O=k.isFunction,E=w.isNumber,T=k.relativeLength,U=k.error,R=w.objectEach,G=w.syncTimeout,V=k.animObject,W=L.prototype.generatePoints,X=0,H=[],C={enabled:!1,allowOverlap:!0,animation:{duration:500},drillToCluster:!0,minimumClusterSize:2,layoutAlgorithm:{gridSize:50,distance:40,kmeansThreshold:100},marker:{symbol:"cluster", radius:15,lineWidth:0,lineColor:"#ffffff"},dataLabels:{enabled:!0,format:"{point.clusterPointsAmount}",verticalAlign:"middle",align:"center",style:{color:"contrast"},inside:!0}};(k.defaultOptions.plotOptions||{}).series=M((k.defaultOptions.plotOptions||{}).series,{cluster:C,tooltip:{clusterFormat:"<span>Clustered points: {point.clusterPointsAmount}</span><br/>"}});aa.prototype.symbols.cluster=function(a,b,d,f){d/=2;f/=2;var c=this.arc(a+d,b+f,d-4,f-4,{start:.5*Math.PI,end:2.5*Math.PI,open:!1});var l= this.arc(a+d,b+f,d-3,f-3,{start:.5*Math.PI,end:2.5*Math.PI,innerR:d-2,open:!1});return this.arc(a+d,b+f,d-1,f-1,{start:.5*Math.PI,end:2.5*Math.PI,innerR:d,open:!1}).concat(l,c)};u.prototype.animateClusterPoint=function(a){var b=this.xAxis,d=this.yAxis,f=this.chart,c=V((this.options.cluster||{}).animation),l=c.duration||500,h=(this.markerClusterInfo||{}).pointsState,t=(h||{}).newState,r=(h||{}).oldState,g=[],m=h=0,p=0,q=!1,v=!1;if(r&&t){var e=t[a.stateId];m=b.toPixels(e.x)-f.plotLeft;p=d.toPixels(e.y)- f.plotTop;if(1===e.parentsId.length){a=(t||{})[a.stateId].parentsId[0];var n=r[a];e.point&&e.point.graphic&&n&&n.point&&n.point.plotX&&n.point.plotY&&n.point.plotX!==e.point.plotX&&n.point.plotY!==e.point.plotY&&(a=e.point.graphic.getBBox(),h=a.width/2,e.point.graphic.attr({x:n.point.plotX-h,y:n.point.plotY-h}),e.point.graphic.animate({x:m-e.point.graphic.radius,y:p-e.point.graphic.radius},c,function(){v=!0;n.point&&n.point.destroy&&n.point.destroy()}),e.point.dataLabel&&e.point.dataLabel.alignAttr&& n.point.dataLabel&&n.point.dataLabel.alignAttr&&(e.point.dataLabel.attr({x:n.point.dataLabel.alignAttr.x,y:n.point.dataLabel.alignAttr.y}),e.point.dataLabel.animate({x:e.point.dataLabel.alignAttr.x,y:e.point.dataLabel.alignAttr.y},c)))}else 0===e.parentsId.length?(Q(e,!0,!0),G(function(){P(e,.1,c,!0,!0)},l/2)):(Q(e,!0,!0),e.parentsId.forEach(function(a){r&&r[a]&&(n=r[a],g.push(n),n.point&&n.point.graphic&&(q=!0,n.point.graphic.show(),n.point.graphic.animate({x:m-n.point.graphic.radius,y:p-n.point.graphic.radius, opacity:.4},c,function(){v=!0;K(e,g,c,.7)}),n.point.dataLabel&&-9999!==n.point.dataLabel.y&&e.point&&e.point.dataLabel&&e.point.dataLabel.alignAttr&&(n.point.dataLabel.show(),n.point.dataLabel.animate({x:e.point.dataLabel.alignAttr.x,y:e.point.dataLabel.alignAttr.y,opacity:.4},c))))}),G(function(){v||K(e,g,c,.85)},l),q||G(function(){K(e,g,c,.1)},l/2))}};u.prototype.getGridOffset=function(){var a=this.chart,b=this.xAxis,d=this.yAxis;b=this.dataMinX&&this.dataMaxX?b.reversed?b.toPixels(this.dataMaxX): b.toPixels(this.dataMinX):a.plotLeft;a=this.dataMinY&&this.dataMaxY?d.reversed?d.toPixels(this.dataMinY):d.toPixels(this.dataMaxY):a.plotTop;return{plotLeft:b,plotTop:a}};u.prototype.getScaledGridSize=function(a){var b=this.xAxis,d=!0,f=1,c=1;a=a.processedGridSize||C.layoutAlgorithm.gridSize;this.gridValueSize||(this.gridValueSize=Math.abs(b.toValue(a)-b.toValue(0)));b=b.toPixels(this.gridValueSize)-b.toPixels(0);for(b=+(a/b).toFixed(14);d&&1!==b;){var l=Math.pow(2,f);.75<b&&1.25>b?d=!1:b>=1/l&&b< 1/l*2?(d=!1,c=l):b<=l&&b>l/2&&(d=!1,c=1/l);f++}return a/c/b};u.prototype.getRealExtremes=function(){var a=this.chart,b=this.xAxis,d=this.yAxis;var f=b?b.toValue(a.plotLeft):0;b=b?b.toValue(a.plotLeft+a.plotWidth):0;var c=d?d.toValue(a.plotTop):0;a=d?d.toValue(a.plotTop+a.plotHeight):0;f>b&&(f=J([f,b],2),b=f[0],f=f[1]);c>a&&(c=J([c,a],2),a=c[0],c=c[1]);return{minX:f,maxX:b,minY:c,maxY:a}};u.prototype.onDrillToCluster=function(a){(a.point||a.target).firePointEvent("drillToCluster",a,function(a){var b= a.point||a.target,f=b.series.xAxis,c=b.series.yAxis,l=b.series.chart;if((b.series.options.cluster||{}).drillToCluster&&b.clusteredData){var h=b.clusteredData.map(function(a){return a.x}).sort(function(a,b){return a-b});var t=b.clusteredData.map(function(a){return a.y}).sort(function(a,b){return a-b});b=h[0];var r=h[h.length-1];h=t[0];var g=t[t.length-1];t=Math.abs(.1*(r-b));var m=Math.abs(.1*(g-h));l.pointer.zoomX=!0;l.pointer.zoomY=!0;b>r&&(r=J([r,b],2),b=r[0],r=r[1]);h>g&&(g=J([g,h],2),h=g[0],g= g[1]);l.zoom({originalEvent:a,xAxis:[{axis:f,min:b-t,max:r+t}],yAxis:[{axis:c,min:h-m,max:g+m}]})}})};u.prototype.getClusterDistancesFromPoint=function(a,b,d){var f=this.xAxis,c=this.yAxis,l=[],h;for(h=0;h<a.length;h++){var t=Math.sqrt(Math.pow(f.toPixels(b)-f.toPixels(a[h].posX),2)+Math.pow(c.toPixels(d)-c.toPixels(a[h].posY),2));l.push({clusterIndex:h,distance:t})}return l.sort(function(a,b){return a.distance-b.distance})};u.prototype.getPointsState=function(a,b,d){b=b?D(b,d):[];d=D(a,d);var f= {},c;H=[];a.clusters.forEach(function(a){f[a.stateId]={x:a.x,y:a.y,id:a.stateId,point:a.point,parentsId:[]}});a.noise.forEach(function(a){f[a.stateId]={x:a.x,y:a.y,id:a.stateId,point:a.point,parentsId:[]}});for(c=0;c<d.length;c++){a=d[c];var l=b[c];a&&l&&a.parentStateId&&l.parentStateId&&f[a.parentStateId]&&-1===f[a.parentStateId].parentsId.indexOf(l.parentStateId)&&(f[a.parentStateId].parentsId.push(l.parentStateId),-1===H.indexOf(l.parentStateId)&&H.push(l.parentStateId))}return f};u.prototype.markerClusterAlgorithms= {grid:function(a,b,d,f){var c=this.xAxis,l=this.yAxis,h={},t=this.getGridOffset(),r;f=this.getScaledGridSize(f);for(r=0;r<a.length;r++){var g=c.toPixels(a[r])-t.plotLeft;var m=l.toPixels(b[r])-t.plotTop;g=Math.floor(g/f);m=Math.floor(m/f);m=m+"-"+g;h[m]||(h[m]=[]);h[m].push({dataIndex:d[r],x:a[r],y:b[r]})}return h},kmeans:function(a,b,d,f){var c=[],l=[],h={},t=f.processedDistance||C.layoutAlgorithm.distance,r=f.iterations,g=0,m=!0,p=0,q=0;var v=[];var e;f.processedGridSize=f.processedDistance;p=this.markerClusterAlgorithms? this.markerClusterAlgorithms.grid.call(this,a,b,d,f):{};for(e in p)1<p[e].length&&(v=I(p[e]),c.push({posX:v.x,posY:v.y,oldX:0,oldY:0,startPointsLen:p[e].length,points:[]}));for(;m;){c.map(function(a){a.points.length=0;return a});for(m=l.length=0;m<a.length;m++)p=a[m],q=b[m],v=this.getClusterDistancesFromPoint(c,p,q),v.length&&v[0].distance<t?c[v[0].clusterIndex].points.push({x:p,y:q,dataIndex:d[m]}):l.push({x:p,y:q,dataIndex:d[m]});for(e=0;e<c.length;e++)1===c[e].points.length&&(v=this.getClusterDistancesFromPoint(c, c[e].points[0].x,c[e].points[0].y),v[1].distance<t&&(c[v[1].clusterIndex].points.push(c[e].points[0]),c[v[0].clusterIndex].points.length=0));m=!1;for(e=0;e<c.length;e++)if(v=I(c[e].points),c[e].oldX=c[e].posX,c[e].oldY=c[e].posY,c[e].posX=v.x,c[e].posY=v.y,c[e].posX>c[e].oldX+1||c[e].posX<c[e].oldX-1||c[e].posY>c[e].oldY+1||c[e].posY<c[e].oldY-1)m=!0;r&&(m=g<r-1);g++}c.forEach(function(a,b){h["cluster"+b]=a.points});l.forEach(function(a,b){h["noise"+b]=[a]});return h},optimizedKmeans:function(a,b, d,f){var c=this.xAxis,l=this.yAxis,h=f.processedDistance||C.layoutAlgorithm.gridSize,t={},r=this.getRealExtremes(),g=(this.options.cluster||{}).marker,m,p,q;!this.markerClusterInfo||this.initMaxX&&this.initMaxX<r.maxX||this.initMinX&&this.initMinX>r.minX||this.initMaxY&&this.initMaxY<r.maxY||this.initMinY&&this.initMinY>r.minY?(this.initMaxX=r.maxX,this.initMinX=r.minX,this.initMaxY=r.maxY,this.initMinY=r.minY,t=this.markerClusterAlgorithms?this.markerClusterAlgorithms.kmeans.call(this,a,b,d,f):{}, this.baseClusters=null):(this.baseClusters||(this.baseClusters={clusters:this.markerClusterInfo.clusters,noise:this.markerClusterInfo.noise}),this.baseClusters.clusters.forEach(function(a){a.pointsOutside=[];a.pointsInside=[];a.data.forEach(function(b){p=Math.sqrt(Math.pow(c.toPixels(b.x)-c.toPixels(a.x),2)+Math.pow(l.toPixels(b.y)-l.toPixels(a.y),2));q=a.clusterZone&&a.clusterZone.marker&&a.clusterZone.marker.radius?a.clusterZone.marker.radius:g&&g.radius?g.radius:C.marker.radius;m=0<=h-q?h-q:q; p>q+m&&B(a.pointsOutside)?a.pointsOutside.push(b):B(a.pointsInside)&&a.pointsInside.push(b)});a.pointsInside.length&&(t[a.id]=a.pointsInside);a.pointsOutside.forEach(function(b,f){t[a.id+"_noise"+f]=[b]})}),this.baseClusters.noise.forEach(function(a){t[a.id]=a.data}));return t}};u.prototype.preventClusterCollisions=function(a){var b=this.xAxis,d=this.yAxis,f=J(a.key.split("-").map(parseFloat),2),c=f[0],l=f[1],h=a.gridSize,t=a.groupedData,r=a.defaultRadius,g=a.clusterRadius,m=l*h,p=c*h,q=b.toPixels(a.x), v=d.toPixels(a.y);f=[];var e=0,n=0,k=(this.options.cluster||{}).marker,x=(this.options.cluster||{}).zones,u=this.getGridOffset(),w,A,z,D,E,G,H;q-=u.plotLeft;v-=u.plotTop;for(z=1;5>z;z++){var F=z%2?-1:1;var y=3>z?-1:1;F=Math.floor((q+F*g)/h);y=Math.floor((v+y*g)/h);F=[y+"-"+F,y+"-"+l,c+"-"+F];for(y=0;y<F.length;y++)-1===f.indexOf(F[y])&&F[y]!==a.key&&f.push(F[y])}f.forEach(function(a){if(t[a]){t[a].posX||(G=I(t[a]),t[a].posX=G.x,t[a].posY=G.y);w=b.toPixels(t[a].posX||0)-u.plotLeft;A=d.toPixels(t[a].posY|| 0)-u.plotTop;var f=J(a.split("-").map(parseFloat),2);E=f[0];D=f[1];if(x)for(e=t[a].length,z=0;z<x.length;z++)e>=x[z].from&&e<=x[z].to&&(n=B((x[z].marker||{}).radius)?x[z].marker.radius||0:k&&k.radius?k.radius:C.marker.radius);1<t[a].length&&0===n&&k&&k.radius?n=k.radius:1===t[a].length&&(n=r);H=g+n;n=0;D!==l&&Math.abs(q-w)<H&&(q=0>D-l?m+g:m+h-g);E!==c&&Math.abs(v-A)<H&&(v=0>E-c?p+g:p+h-g)}});f=b.toValue(q+u.plotLeft);y=d.toValue(v+u.plotTop);t[a.key].posX=f;t[a.key].posY=y;return{x:f,y:y}};u.prototype.isValidGroupedDataObject= function(a){var b=!1,d;if(!N(a))return!1;R(a,function(a){b=!0;if(S(a)&&a.length)for(d=0;d<a.length;d++){if(!N(a[d])||!a[d].x||!a[d].y){b=!1;break}}else b=!1});return b};u.prototype.getClusteredData=function(a,b){var d=[],f=[],c=[],l=[],h=[],t=0,r=Math.max(2,b.minimumClusterSize||2),g,m;if(O(b.layoutAlgorithm.type)&&!this.isValidGroupedDataObject(a))return U("Highcharts marker-clusters module: The custom algorithm result is not valid!",!1,this.chart),!1;for(m in a)if(a[m].length>=r){var p=a[m];var q= Math.random().toString(36).substring(2,7)+"-"+X++;var k=p.length;if(b.zones)for(g=0;g<b.zones.length;g++)if(k>=b.zones[g].from&&k<=b.zones[g].to){var e=b.zones[g];e.zoneIndex=g;var n=b.zones[g].marker;var u=b.zones[g].className}var x=I(p);"grid"!==b.layoutAlgorithm.type||b.allowOverlap?x={x:x.x,y:x.y}:(g=this.options.marker||{},x=this.preventClusterCollisions({x:x.x,y:x.y,key:m,groupedData:a,gridSize:this.getScaledGridSize(b.layoutAlgorithm),defaultRadius:g.radius||3+(g.lineWidth||0),clusterRadius:n&& n.radius?n.radius:(b.marker||{}).radius||C.marker.radius}));for(g=0;g<k;g++)p[g].parentStateId=q;c.push({x:x.x,y:x.y,id:m,stateId:q,index:t,data:p,clusterZone:e,clusterZoneClassName:u});d.push(x.x);f.push(x.y);h.push({options:{formatPrefix:"cluster",dataLabels:b.dataLabels,marker:M(b.marker,{states:b.states},n||{})}});if(this.options.data&&this.options.data.length)for(g=0;g<k;g++)N(this.options.data[p[g].dataIndex])&&(p[g].options=this.options.data[p[g].dataIndex]);t++;n=null}else for(g=0;g<a[m].length;g++)p= a[m][g],q=Math.random().toString(36).substring(2,7)+"-"+X++,k=((this.options||{}).data||[])[p.dataIndex],d.push(p.x),f.push(p.y),p.parentStateId=q,l.push({x:p.x,y:p.y,id:m,stateId:q,index:t,data:a[m]}),q=k&&"object"===typeof k&&!S(k)?M(k,{x:p.x,y:p.y}):{userOptions:k,x:p.x,y:p.y},h.push({options:q}),t++;return{clusters:c,noise:l,groupedXData:d,groupedYData:f,groupMap:h}};u.prototype.destroyClusteredData=function(){(this.markerClusterSeriesData||[]).forEach(function(a){a&&a.destroy&&a.destroy()}); this.markerClusterSeriesData=null};u.prototype.hideClusteredData=function(){var a=this.markerClusterSeriesData,b=((this.markerClusterInfo||{}).pointsState||{}).oldState||{},d=H.map(function(a){return(b[a].point||{}).id||""});(a||[]).forEach(function(a){a&&-1!==d.indexOf(a.id)?(a.graphic&&a.graphic.hide(),a.dataLabel&&a.dataLabel.hide()):a&&a.destroy&&a.destroy()})};u.prototype.generatePoints=function(){var a=this,b=a.chart,d=a.xAxis,f=a.yAxis,c=a.options.cluster,l=a.getRealExtremes(),h=[],k=[],r= [],g,m,p,q;if(c&&c.enabled&&a.xData&&a.yData&&!b.polar){var v=c.layoutAlgorithm.type;var e=c.layoutAlgorithm;e.processedGridSize=T(e.gridSize||C.layoutAlgorithm.gridSize,b.plotWidth);e.processedDistance=T(e.distance||C.layoutAlgorithm.distance,b.plotWidth);b=e.kmeansThreshold||C.layoutAlgorithm.kmeansThreshold;d=Math.abs(d.toValue(e.processedGridSize/2)-d.toValue(0));f=Math.abs(f.toValue(e.processedGridSize/2)-f.toValue(0));for(q=0;q<a.xData.length;q++){if(!a.dataMaxX)if(B(n)&&B(g)&&B(u)&&B(m))E(a.yData[q])&& E(u)&&E(m)&&(n=Math.max(a.xData[q],n),g=Math.min(a.xData[q],g),u=Math.max(a.yData[q]||u,u),m=Math.min(a.yData[q]||m,m));else{var n=g=a.xData[q];var u=m=a.yData[q]}a.xData[q]>=l.minX-d&&a.xData[q]<=l.maxX+d&&(a.yData[q]||l.minY)>=l.minY-f&&(a.yData[q]||l.maxY)<=l.maxY+f&&(h.push(a.xData[q]),k.push(a.yData[q]),r.push(q))}B(n)&&B(g)&&E(u)&&E(m)&&(a.dataMaxX=n,a.dataMinX=g,a.dataMaxY=u,a.dataMinY=m);l=O(v)?v:a.markerClusterAlgorithms?v&&a.markerClusterAlgorithms[v]?a.markerClusterAlgorithms[v]:h.length< b?a.markerClusterAlgorithms.kmeans:a.markerClusterAlgorithms.grid:function(){return!1};e=(h=l.call(this,h,k,r,e))?a.getClusteredData(h,c):h;c.animation&&a.markerClusterInfo&&a.markerClusterInfo.pointsState&&a.markerClusterInfo.pointsState.oldState?(Y(a.markerClusterInfo.pointsState.oldState),h=a.markerClusterInfo.pointsState.newState):h={};k=a.xData.length;r=a.markerClusterInfo;e&&(a.processedXData=e.groupedXData,a.processedYData=e.groupedYData,a.hasGroupedData=!0,a.markerClusterInfo=e,a.groupMap= e.groupMap);W.apply(this);e&&a.markerClusterInfo&&((a.markerClusterInfo.clusters||[]).forEach(function(b){p=a.points[b.index];p.isCluster=!0;p.clusteredData=b.data;p.clusterPointsAmount=b.data.length;b.point=p;A(p,"click",a.onDrillToCluster)}),(a.markerClusterInfo.noise||[]).forEach(function(b){b.point=a.points[b.index]}),c.animation&&a.markerClusterInfo&&(a.markerClusterInfo.pointsState={oldState:h,newState:a.getPointsState(e,r,k)}),c.animation?this.hideClusteredData():this.destroyClusteredData(), this.markerClusterSeriesData=this.hasGroupedData?this.points:null)}else W.apply(this)};A(k.Chart,"render",function(){(this.series||[]).forEach(function(a){if(a.markerClusterInfo){var b=((a.markerClusterInfo||{}).pointsState||{}).oldState;(a.options.cluster||{}).animation&&a.markerClusterInfo&&0===a.chart.pointer.pinchDown.length&&"pan"!==(a.xAxis.eventArgs||{}).trigger&&b&&Object.keys(b).length&&(a.markerClusterInfo.clusters.forEach(function(b){a.animateClusterPoint(b)}),a.markerClusterInfo.noise.forEach(function(b){a.animateClusterPoint(b)}))}})}); A(Z,"update",function(){if(this.dataGroup)return U("Highcharts marker-clusters module: Running `Point.update` when point belongs to clustered series is not supported.",!1,this.series.chart),!1});A(L,"destroy",u.prototype.destroyClusteredData);A(L,"afterRender",function(){var a=(this.options.cluster||{}).drillToCluster;this.markerClusterInfo&&this.markerClusterInfo.clusters&&this.markerClusterInfo.clusters.forEach(function(b){b.point&&b.point.graphic&&(b.point.graphic.addClass("highcharts-cluster-point"), a&&b.point&&(b.point.graphic.css({cursor:"pointer"}),b.point.dataLabel&&b.point.dataLabel.css({cursor:"pointer"})),B(b.clusterZone)&&b.point.graphic.addClass(b.clusterZoneClassName||"highcharts-cluster-zone-"+b.clusterZone.zoneIndex))})});A(k.Point,"drillToCluster",function(a){var b=(((a.point||a.target).series.options.cluster||{}).events||{}).drillToCluster;O(b)&&b.call(this,a)});A(k.Axis,"setExtremes",function(){var a=this.chart,b=0,d;a.series.forEach(function(a){a.markerClusterInfo&&(d=V((a.options.cluster|| {}).animation),b=d.duration||0)});G(function(){a.tooltip&&a.tooltip.destroy()},b)})});w(k,"masters/modules/marker-clusters.src.js",[],function(){})}); //# sourceMappingURL=marker-clusters.js.map