vue3-google-map
Advanced tools
Comparing version 0.16.0 to 0.17.0
(function(){"use strict";try{if(typeof document<"u"){var d=document.createElement("style");d.appendChild(document.createTextNode(".mapdiv[data-v-7d660dd5]{width:100%;height:100%}.info-window-wrapper[data-v-45a4606d]{display:none}.mapdiv .info-window-wrapper[data-v-45a4606d]{display:inline-block}.custom-marker-wrapper[data-v-c7599d50]{display:none}.mapdiv .custom-marker-wrapper[data-v-c7599d50]{display:inline-block}")),document.head.appendChild(d)}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}})(); | ||
"use strict";var ce=Object.defineProperty;var ue=(r,e,t)=>e in r?ce(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var B=(r,e,t)=>(ue(r,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("vue"),b=Symbol("map"),O=Symbol("api"),re=Symbol("marker"),se=Symbol("markerCluster"),T=Symbol("CustomMarker"),ie=Symbol("mapTilesLoaded"),M=["click","dblclick","drag","dragend","dragstart","mousedown","mousemove","mouseout","mouseover","mouseup","rightclick"];var de=function r(e,t){if(e===t)return!0;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var o,n,s;if(Array.isArray(e)){if(o=e.length,o!=t.length)return!1;for(n=o;n--!==0;)if(!r(e[n],t[n]))return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();if(s=Object.keys(e),o=s.length,o!==Object.keys(t).length)return!1;for(n=o;n--!==0;)if(!Object.prototype.hasOwnProperty.call(t,s[n]))return!1;for(n=o;n--!==0;){var l=s[n];if(!r(e[l],t[l]))return!1}return!0}return e!==e&&t!==t};const G="__googleMapsScriptId";class _{constructor({apiKey:e,channel:t,client:o,id:n=G,libraries:s=[],language:l,region:c,version:a,mapIds:p,nonce:d,retries:u=3,url:f="https://maps.googleapis.com/maps/api/js"}){if(this.CALLBACK="__googleMapsCallback",this.callbacks=[],this.done=!1,this.loading=!1,this.errors=[],this.version=a,this.apiKey=e,this.channel=t,this.client=o,this.id=n||G,this.libraries=s,this.language=l,this.region=c,this.mapIds=p,this.nonce=d,this.retries=u,this.url=f,_.instance){if(!de(this.options,_.instance.options))throw new Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(_.instance.options)}`);return _.instance}_.instance=this}get options(){return{version:this.version,apiKey:this.apiKey,channel:this.channel,client:this.client,id:this.id,libraries:this.libraries,language:this.language,region:this.region,mapIds:this.mapIds,nonce:this.nonce,url:this.url}}get failed(){return this.done&&!this.loading&&this.errors.length>=this.retries+1}createUrl(){let e=this.url;return e+=`?callback=${this.CALLBACK}`,this.apiKey&&(e+=`&key=${this.apiKey}`),this.channel&&(e+=`&channel=${this.channel}`),this.client&&(e+=`&client=${this.client}`),this.libraries.length>0&&(e+=`&libraries=${this.libraries.join(",")}`),this.language&&(e+=`&language=${this.language}`),this.region&&(e+=`®ion=${this.region}`),this.version&&(e+=`&v=${this.version}`),this.mapIds&&(e+=`&map_ids=${this.mapIds.join(",")}`),e}deleteScript(){const e=document.getElementById(this.id);e&&e.remove()}load(){return this.loadPromise()}loadPromise(){return new Promise((e,t)=>{this.loadCallback(o=>{o?t(o.error):e(window.google)})})}loadCallback(e){this.callbacks.push(e),this.execute()}setScript(){if(document.getElementById(this.id)){this.callback();return}const e=this.createUrl(),t=document.createElement("script");t.id=this.id,t.type="text/javascript",t.src=e,t.onerror=this.loadErrorCallback.bind(this),t.defer=!0,t.async=!0,this.nonce&&(t.nonce=this.nonce),document.head.appendChild(t)}reset(){this.deleteScript(),this.done=!1,this.loading=!1,this.errors=[],this.onerrorEvent=null}resetIfRetryingFailed(){this.failed&&this.reset()}loadErrorCallback(e){if(this.errors.push(e),this.errors.length<=this.retries){const t=this.errors.length*Math.pow(2,this.errors.length);console.log(`Failed to load Google Maps script, retrying in ${t} ms.`),setTimeout(()=>{this.deleteScript(),this.setScript()},t)}else this.onerrorEvent=e,this.callback()}setCallback(){window.__googleMapsCallback=this.callback.bind(this)}callback(){this.done=!0,this.loading=!1,this.callbacks.forEach(e=>{e(this.onerrorEvent)}),this.callbacks=[]}execute(){if(this.resetIfRetryingFailed(),this.done)this.callback();else{if(window.google&&window.google.maps&&window.google.maps.version){console.warn("Google Maps already loaded outside @googlemaps/js-api-loader.This may result in undesirable behavior as options and script parameters may not match."),this.callback();return}this.loading||(this.loading=!0,this.setCallback(),this.setScript())}}}function pe(r){return class extends r.OverlayView{constructor(o){super();B(this,"element");B(this,"opts");const{element:n,...s}=o;this.element=n,this.opts=s,this.opts.map&&this.setMap(this.opts.map)}getPosition(){return this.opts.position?this.opts.position instanceof r.LatLng?this.opts.position:new r.LatLng(this.opts.position):null}getVisible(){if(!this.element)return!1;const o=this.element;return o.style.display!=="none"&&o.style.visibility!=="hidden"&&(o.style.opacity===""||Number(o.style.opacity)>.01)}onAdd(){if(!this.element)return;const o=this.getPanes();o&&o.overlayMouseTarget.appendChild(this.element)}draw(){if(!this.element)return;const n=this.getProjection().fromLatLngToDivPixel(this.getPosition());if(n){this.element.style.position="absolute";const s=this.element.offsetHeight,l=this.element.offsetWidth;let c,a;switch(this.opts.anchorPoint){case"TOP_CENTER":c=n.x-l/2,a=n.y;break;case"BOTTOM_CENTER":c=n.x-l/2,a=n.y-s;break;case"LEFT_CENTER":c=n.x,a=n.y-s/2;break;case"RIGHT_CENTER":c=n.x-l,a=n.y-s/2;break;case"TOP_LEFT":c=n.x,a=n.y;break;case"TOP_RIGHT":c=n.x-l,a=n.y;break;case"BOTTOM_LEFT":c=n.x,a=n.y-s;break;case"BOTTOM_RIGHT":c=n.x-l,a=n.y-s;break;default:c=n.x-l/2,a=n.y-s/2}this.element.style.left=c+"px",this.element.style.top=a+"px",this.element.style.transform=`translateX(${this.opts.offsetX||0}px) translateY(${this.opts.offsetY||0}px)`,this.opts.zIndex&&(this.element.style.zIndex=this.opts.zIndex.toString())}}onRemove(){this.element&&this.element.remove()}setOptions(o){this.opts=o,this.draw()}}}let V;const H=["bounds_changed","center_changed","click","dblclick","drag","dragend","dragstart","heading_changed","idle","maptypeid_changed","mousemove","mouseout","mouseover","projection_changed","resize","rightclick","tilesloaded","tilt_changed","zoom_changed"],he=i.defineComponent({props:{apiPromise:{type:Promise},apiKey:{type:String,default:""},version:{type:String,default:"weekly"},libraries:{type:Array,default:()=>["places"]},region:{type:String,required:!1},language:{type:String,required:!1},backgroundColor:{type:String,required:!1},center:{type:Object,default:()=>({lat:0,lng:0})},clickableIcons:{type:Boolean,required:!1,default:void 0},controlSize:{type:Number,required:!1},disableDefaultUi:{type:Boolean,required:!1,default:void 0},disableDoubleClickZoom:{type:Boolean,required:!1,default:void 0},draggable:{type:Boolean,required:!1,default:void 0},draggableCursor:{type:String,required:!1},draggingCursor:{type:String,required:!1},fullscreenControl:{type:Boolean,required:!1,default:void 0},fullscreenControlPosition:{type:String,required:!1},gestureHandling:{type:String,required:!1},heading:{type:Number,required:!1},keyboardShortcuts:{type:Boolean,required:!1,default:void 0},mapTypeControl:{type:Boolean,required:!1,default:void 0},mapTypeControlOptions:{type:Object,required:!1},mapTypeId:{type:[Number,String],required:!1},mapId:{type:String,required:!1},maxZoom:{type:Number,required:!1},minZoom:{type:Number,required:!1},noClear:{type:Boolean,required:!1,default:void 0},panControl:{type:Boolean,required:!1,default:void 0},panControlPosition:{type:String,required:!1},restriction:{type:Object,required:!1},rotateControl:{type:Boolean,required:!1,default:void 0},rotateControlPosition:{type:String,required:!1},scaleControl:{type:Boolean,required:!1,default:void 0},scaleControlStyle:{type:Number,required:!1},scrollwheel:{type:Boolean,required:!1,default:void 0},streetView:{type:Object,required:!1},streetViewControl:{type:Boolean,required:!1,default:void 0},streetViewControlPosition:{type:String,required:!1},styles:{type:Array,required:!1},tilt:{type:Number,required:!1},zoom:{type:Number,required:!1},zoomControl:{type:Boolean,required:!1,default:void 0},zoomControlPosition:{type:String,required:!1}},emits:H,setup(r,{emit:e}){const t=i.ref(),o=i.ref(!1),n=i.ref(),s=i.ref(),l=i.ref(!1);i.provide(b,n),i.provide(O,s),i.provide(ie,l);const c=()=>{const u={...r};Object.keys(u).forEach(g=>{u[g]===void 0&&delete u[g]});const m=g=>{var v;return g?{position:(v=s.value)==null?void 0:v.ControlPosition[g]}:{}},h={scaleControlOptions:r.scaleControlStyle?{style:r.scaleControlStyle}:{},panControlOptions:m(r.panControlPosition),zoomControlOptions:m(r.zoomControlPosition),rotateControlOptions:m(r.rotateControlPosition),streetViewControlOptions:m(r.streetViewControlPosition),fullscreenControlOptions:m(r.fullscreenControlPosition),disableDefaultUI:r.disableDefaultUi};return{...u,...h}},a=i.watch([s,n],([u,f])=>{const m=u,h=f;m&&h&&(m.event.addListenerOnce(h,"tilesloaded",()=>{l.value=!0}),setTimeout(a,0))},{immediate:!0}),p=()=>{try{const{apiKey:u,region:f,version:m,language:h,libraries:g}=r;V=new _({apiKey:u,region:f,version:m,language:h,libraries:g})}catch(u){console.error(u)}},d=u=>{s.value=i.markRaw(u.maps),n.value=i.markRaw(new u.maps.Map(t.value,c()));const f=pe(s.value);s.value[T]=f,H.forEach(h=>{var g;(g=n.value)==null||g.addListener(h,v=>e(h,v))}),o.value=!0;const m=Object.keys(r).filter(h=>!["apiPromise","apiKey","version","libraries","region","language","center","zoom"].includes(h)).map(h=>i.toRef(r,h));i.watch([()=>r.center,()=>r.zoom,...m],([h,g],[v,y])=>{var D,U,F;const{center:k,zoom:P,...C}=c();(D=n.value)==null||D.setOptions(C),g!==void 0&&g!==y&&((U=n.value)==null||U.setZoom(g));const I=!v||h.lng!==v.lng||h.lat!==v.lat;h&&I&&((F=n.value)==null||F.panTo(h))})};return i.onMounted(()=>{r.apiPromise&&r.apiPromise instanceof Promise?r.apiPromise.then(d):(p(),V.load().then(d))}),i.onBeforeUnmount(()=>{var u;l.value=!1,n.value&&((u=s.value)==null||u.event.clearInstanceListeners(n.value))}),{mapRef:t,ready:o,map:n,api:s,mapTilesLoaded:l}}});const q=(r,e)=>{const t=r.__vccOpts||r;for(const[o,n]of e)t[o]=n;return t},fe={ref:"mapRef",class:"mapdiv"};function me(r,e,t,o,n,s){return i.openBlock(),i.createElementBlock("div",null,[i.createElementVNode("div",fe,null,512),i.renderSlot(r.$slots,"default",i.normalizeProps(i.guardReactiveProps({ready:r.ready,map:r.map,api:r.api,mapTilesLoaded:r.mapTilesLoaded})),void 0,!0)])}const ge=q(he,[["render",me],["__scopeId","data-v-7d660dd5"]]);function ve(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}var ye=function r(e,t){if(e===t)return!0;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var o,n,s;if(Array.isArray(e)){if(o=e.length,o!=t.length)return!1;for(n=o;n--!==0;)if(!r(e[n],t[n]))return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();if(s=Object.keys(e),o=s.length,o!==Object.keys(t).length)return!1;for(n=o;n--!==0;)if(!Object.prototype.hasOwnProperty.call(t,s[n]))return!1;for(n=o;n--!==0;){var l=s[n];if(!r(e[l],t[l]))return!1}return!0}return e!==e&&t!==t};const E=ve(ye),Ce=r=>r==="Marker",ke=r=>r===T,x=(r,e,t,o)=>{const n=i.ref(),s=i.inject(b,i.ref()),l=i.inject(O,i.ref()),c=i.inject(se,i.ref()),a=i.computed(()=>!!(c.value&&l.value&&(n.value instanceof l.value.Marker||n.value instanceof l.value[T])));return i.watch([s,t],(p,[d,u])=>{var m,h,g;const f=!E(t.value,u)||s.value!==d;!s.value||!l.value||!f||(n.value?(n.value.setOptions(t.value),a.value&&((m=c.value)==null||m.removeMarker(n.value),(h=c.value)==null||h.addMarker(n.value))):(Ce(r)?n.value=i.markRaw(new l.value[r](t.value)):ke(r)?n.value=i.markRaw(new l.value[r](t.value)):n.value=i.markRaw(new l.value[r]({...t.value,map:s.value})),a.value?(g=c.value)==null||g.addMarker(n.value):n.value.setMap(s.value),e.forEach(v=>{var y;(y=n.value)==null||y.addListener(v,k=>o(v,k))})))},{immediate:!0}),i.onBeforeUnmount(()=>{var p,d;n.value&&((p=l.value)==null||p.event.clearInstanceListeners(n.value),a.value?(d=c.value)==null||d.removeMarker(n.value):n.value.setMap(null))}),n},K=["animation_changed","click","dblclick","rightclick","dragstart","dragend","drag","mouseover","mousedown","mouseout","mouseup","draggable_changed","clickable_changed","contextmenu","cursor_changed","flat_changed","rightclick","zindex_changed","icon_changed","position_changed","shape_changed","title_changed","visible_changed"],_e=i.defineComponent({name:"Marker",props:{options:{type:Object,required:!0}},emits:K,setup(r,{emit:e,expose:t,slots:o}){const n=i.toRef(r,"options"),s=x("Marker",K,n,e);return i.provide(re,s),t({marker:s}),()=>{var l;return(l=o.default)==null?void 0:l.call(o)}}}),we=i.defineComponent({name:"Polyline",props:{options:{type:Object,required:!0}},emits:M,setup(r,{emit:e}){const t=i.toRef(r,"options");return{polyline:x("Polyline",M,t,e)}},render:()=>null}),Me=i.defineComponent({name:"Polygon",props:{options:{type:Object,required:!0}},emits:M,setup(r,{emit:e}){const t=i.toRef(r,"options");return{polygon:x("Polygon",M,t,e)}},render:()=>null}),W=M.concat(["bounds_changed"]),be=i.defineComponent({name:"Rectangle",props:{options:{type:Object,required:!0}},emits:W,setup(r,{emit:e}){const t=i.toRef(r,"options");return{rectangle:x("Rectangle",W,t,e)}},render:()=>null}),J=M.concat(["center_changed","radius_changed"]),Oe=i.defineComponent({name:"Circle",props:{options:{type:Object,required:!0}},emits:J,setup(r,{emit:e}){const t=i.toRef(r,"options");return{circle:x("Circle",J,t,e)}},render:()=>null}),xe=i.defineComponent({props:{position:{type:String,required:!0},index:{type:Number,default:1}},emits:["content:loaded"],setup(r,{emit:e}){const t=i.ref(null),o=i.inject(b,i.ref()),n=i.inject(O,i.ref()),s=i.inject(ie,i.ref(!1)),l=i.ref(!1),c=i.watch([s,n,t],([d,u,f])=>{u&&d&&f&&(a(r.position),l.value=!0,e("content:loaded"),setTimeout(c,0))},{immediate:!0}),a=d=>{if(o.value&&n.value&&t.value){const u=n.value.ControlPosition[d];o.value.controls[u].push(t.value)}},p=d=>{if(o.value&&n.value){let u=null;const f=n.value.ControlPosition[d];o.value.controls[f].forEach((m,h)=>{m===t.value&&(u=h)}),u!==null&&o.value.controls[f].removeAt(u)}};return i.onBeforeUnmount(()=>p(r.position)),i.watch(()=>r.position,(d,u)=>{p(u),a(d)}),i.watch(()=>r.index,d=>{d&&t.value&&(t.value.index=r.index)}),{controlRef:t,showContent:l}}}),Pe={ref:"controlRef"};function Se(r,e,t,o,n,s){return i.withDirectives((i.openBlock(),i.createElementBlock("div",Pe,[i.renderSlot(r.$slots,"default")],512)),[[i.vShow,r.showContent]])}const Le=q(xe,[["render",Se]]),X=["closeclick","content_changed","domready","position_changed","visible","zindex_changed"],Ee=i.defineComponent({inheritAttrs:!1,props:{options:{type:Object,default:()=>({})}},emits:X,setup(r,{slots:e,emit:t,expose:o}){const n=i.ref(),s=i.ref(),l=i.inject(b,i.ref()),c=i.inject(O,i.ref()),a=i.inject(re,i.ref());let p;const d=i.computed(()=>{var m;return(m=e.default)==null?void 0:m.call(e).some(h=>h.type!==i.Comment)}),u=m=>{var h;return(h=n.value)==null?void 0:h.open({map:l.value,anchor:a.value,...m})},f=()=>{var m;return(m=n.value)==null?void 0:m.close()};return i.onMounted(()=>{i.watch([l,()=>r.options],([m,h],[g,v])=>{const y=!E(h,v)||l.value!==g;l.value&&c.value&&y&&(n.value?(n.value.setOptions({...h,content:d.value?s.value:h.content}),a.value||u()):(n.value=i.markRaw(new c.value.InfoWindow({...h,content:d.value?s.value:h.content})),a.value?p=a.value.addListener("click",()=>{u()}):u(),X.forEach(k=>{var P;(P=n.value)==null||P.addListener(k,C=>t(k,C))})))},{immediate:!0})}),i.onBeforeUnmount(()=>{var m;p&&p.remove(),n.value&&((m=c.value)==null||m.event.clearInstanceListeners(n.value),f())}),o({infoWindow:n,open:u,close:f}),{infoWindow:n,infoWindowRef:s,hasSlotContent:d,open:u,close:f}}});const Ie={key:0,class:"info-window-wrapper"};function je(r,e,t,o,n,s){return r.hasSlotContent?(i.openBlock(),i.createElementBlock("div",Ie,[i.createElementVNode("div",i.mergeProps({ref:"infoWindowRef"},r.$attrs),[i.renderSlot(r.$slots,"default",{},void 0,!0)],16)])):i.createCommentVNode("",!0)}const $e=q(Ee,[["render",je],["__scopeId","data-v-45a4606d"]]);function N(r,e,t,o,n,s){if(n-o<=t)return;const l=o+n>>1;ae(r,e,l,o,n,s%2),N(r,e,t,o,l-1,s+1),N(r,e,t,l+1,n,s+1)}function ae(r,e,t,o,n,s){for(;n>o;){if(n-o>600){const p=n-o+1,d=t-o+1,u=Math.log(p),f=.5*Math.exp(2*u/3),m=.5*Math.sqrt(u*f*(p-f)/p)*(d-p/2<0?-1:1),h=Math.max(o,Math.floor(t-d*f/p+m)),g=Math.min(n,Math.floor(t+(p-d)*f/p+m));ae(r,e,t,h,g,s)}const l=e[2*t+s];let c=o,a=n;for(S(r,e,o,t),e[2*n+s]>l&&S(r,e,o,n);c<a;){for(S(r,e,c,a),c++,a--;e[2*c+s]<l;)c++;for(;e[2*a+s]>l;)a--}e[2*o+s]===l?S(r,e,o,a):(a++,S(r,e,a,n)),a<=t&&(o=a+1),t<=a&&(n=a-1)}}function S(r,e,t,o){A(r,t,o),A(e,2*t,2*o),A(e,2*t+1,2*o+1)}function A(r,e,t){const o=r[e];r[e]=r[t],r[t]=o}function Re(r,e,t,o,n,s,l){const c=[0,r.length-1,0],a=[];let p,d;for(;c.length;){const u=c.pop(),f=c.pop(),m=c.pop();if(f-m<=l){for(let v=m;v<=f;v++)p=e[2*v],d=e[2*v+1],p>=t&&p<=n&&d>=o&&d<=s&&a.push(r[v]);continue}const h=Math.floor((m+f)/2);p=e[2*h],d=e[2*h+1],p>=t&&p<=n&&d>=o&&d<=s&&a.push(r[h]);const g=(u+1)%2;(u===0?t<=p:o<=d)&&(c.push(m),c.push(h-1),c.push(g)),(u===0?n>=p:s>=d)&&(c.push(h+1),c.push(f),c.push(g))}return a}function Te(r,e,t,o,n,s){const l=[0,r.length-1,0],c=[],a=n*n;for(;l.length;){const p=l.pop(),d=l.pop(),u=l.pop();if(d-u<=s){for(let v=u;v<=d;v++)Y(e[2*v],e[2*v+1],t,o)<=a&&c.push(r[v]);continue}const f=Math.floor((u+d)/2),m=e[2*f],h=e[2*f+1];Y(m,h,t,o)<=a&&c.push(r[f]);const g=(p+1)%2;(p===0?t-n<=m:o-n<=h)&&(l.push(u),l.push(f-1),l.push(g)),(p===0?t+n>=m:o+n>=h)&&(l.push(f+1),l.push(d),l.push(g))}return c}function Y(r,e,t,o){const n=r-t,s=e-o;return n*n+s*s}const qe=r=>r[0],Be=r=>r[1];class Q{constructor(e,t=qe,o=Be,n=64,s=Float64Array){this.nodeSize=n,this.points=e;const l=e.length<65536?Uint16Array:Uint32Array,c=this.ids=new l(e.length),a=this.coords=new s(e.length*2);for(let p=0;p<e.length;p++)c[p]=p,a[2*p]=t(e[p]),a[2*p+1]=o(e[p]);N(c,a,n,0,c.length-1,0)}range(e,t,o,n){return Re(this.ids,this.coords,e,t,o,n,this.nodeSize)}within(e,t,o){return Te(this.ids,this.coords,e,t,o,this.nodeSize)}}const Ae={minZoom:0,maxZoom:16,minPoints:2,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:r=>r},R=Math.fround||(r=>e=>(r[0]=+e,r[0]))(new Float32Array(1));class Ne{constructor(e){this.options=L(Object.create(Ae),e),this.trees=new Array(this.options.maxZoom+1)}load(e){const{log:t,minZoom:o,maxZoom:n,nodeSize:s}=this.options;t&&console.time("total time");const l=`prepare ${e.length} points`;t&&console.time(l),this.points=e;let c=[];for(let a=0;a<e.length;a++)e[a].geometry&&c.push(ze(e[a],a));this.trees[n+1]=new Q(c,te,ne,s,Float32Array),t&&console.timeEnd(l);for(let a=n;a>=o;a--){const p=+Date.now();c=this._cluster(c,a),this.trees[a]=new Q(c,te,ne,s,Float32Array),t&&console.log("z%d: %d clusters in %dms",a,c.length,+Date.now()-p)}return t&&console.timeEnd("total time"),this}getClusters(e,t){let o=((e[0]+180)%360+360)%360-180;const n=Math.max(-90,Math.min(90,e[1]));let s=e[2]===180?180:((e[2]+180)%360+360)%360-180;const l=Math.max(-90,Math.min(90,e[3]));if(e[2]-e[0]>=360)o=-180,s=180;else if(o>s){const d=this.getClusters([o,n,180,l],t),u=this.getClusters([-180,n,s,l],t);return d.concat(u)}const c=this.trees[this._limitZoom(t)],a=c.range(j(o),$(l),j(s),$(n)),p=[];for(const d of a){const u=c.points[d];p.push(u.numPoints?ee(u):this.points[u.index])}return p}getChildren(e){const t=this._getOriginId(e),o=this._getOriginZoom(e),n="No cluster with the specified id.",s=this.trees[o];if(!s)throw new Error(n);const l=s.points[t];if(!l)throw new Error(n);const c=this.options.radius/(this.options.extent*Math.pow(2,o-1)),a=s.within(l.x,l.y,c),p=[];for(const d of a){const u=s.points[d];u.parentId===e&&p.push(u.numPoints?ee(u):this.points[u.index])}if(p.length===0)throw new Error(n);return p}getLeaves(e,t,o){t=t||10,o=o||0;const n=[];return this._appendLeaves(n,e,t,o,0),n}getTile(e,t,o){const n=this.trees[this._limitZoom(e)],s=Math.pow(2,e),{extent:l,radius:c}=this.options,a=c/l,p=(o-a)/s,d=(o+1+a)/s,u={features:[]};return this._addTileFeatures(n.range((t-a)/s,p,(t+1+a)/s,d),n.points,t,o,s,u),t===0&&this._addTileFeatures(n.range(1-a/s,p,1,d),n.points,s,o,s,u),t===s-1&&this._addTileFeatures(n.range(0,p,a/s,d),n.points,-1,o,s,u),u.features.length?u:null}getClusterExpansionZoom(e){let t=this._getOriginZoom(e)-1;for(;t<=this.options.maxZoom;){const o=this.getChildren(e);if(t++,o.length!==1)break;e=o[0].properties.cluster_id}return t}_appendLeaves(e,t,o,n,s){const l=this.getChildren(t);for(const c of l){const a=c.properties;if(a&&a.cluster?s+a.point_count<=n?s+=a.point_count:s=this._appendLeaves(e,a.cluster_id,o,n,s):s<n?s++:e.push(c),e.length===o)break}return s}_addTileFeatures(e,t,o,n,s,l){for(const c of e){const a=t[c],p=a.numPoints;let d,u,f;if(p)d=le(a),u=a.x,f=a.y;else{const g=this.points[a.index];d=g.properties,u=j(g.geometry.coordinates[0]),f=$(g.geometry.coordinates[1])}const m={type:1,geometry:[[Math.round(this.options.extent*(u*s-o)),Math.round(this.options.extent*(f*s-n))]],tags:d};let h;p?h=a.id:this.options.generateId?h=a.index:this.points[a.index].id&&(h=this.points[a.index].id),h!==void 0&&(m.id=h),l.features.push(m)}}_limitZoom(e){return Math.max(this.options.minZoom,Math.min(Math.floor(+e),this.options.maxZoom+1))}_cluster(e,t){const o=[],{radius:n,extent:s,reduce:l,minPoints:c}=this.options,a=n/(s*Math.pow(2,t));for(let p=0;p<e.length;p++){const d=e[p];if(d.zoom<=t)continue;d.zoom=t;const u=this.trees[t+1],f=u.within(d.x,d.y,a),m=d.numPoints||1;let h=m;for(const g of f){const v=u.points[g];v.zoom>t&&(h+=v.numPoints||1)}if(h>m&&h>=c){let g=d.x*m,v=d.y*m,y=l&&m>1?this._map(d,!0):null;const k=(p<<5)+(t+1)+this.points.length;for(const P of f){const C=u.points[P];if(C.zoom<=t)continue;C.zoom=t;const I=C.numPoints||1;g+=C.x*I,v+=C.y*I,C.parentId=k,l&&(y||(y=this._map(d,!0)),l(y,this._map(C)))}d.parentId=k,o.push(Ze(g/h,v/h,k,h,y))}else if(o.push(d),h>1)for(const g of f){const v=u.points[g];v.zoom<=t||(v.zoom=t,o.push(v))}}return o}_getOriginId(e){return e-this.points.length>>5}_getOriginZoom(e){return(e-this.points.length)%32}_map(e,t){if(e.numPoints)return t?L({},e.properties):e.properties;const o=this.points[e.index].properties,n=this.options.map(o);return t&&n===o?L({},n):n}}function Ze(r,e,t,o,n){return{x:R(r),y:R(e),zoom:1/0,id:t,parentId:-1,numPoints:o,properties:n}}function ze(r,e){const[t,o]=r.geometry.coordinates;return{x:R(j(t)),y:R($(o)),zoom:1/0,index:e,parentId:-1}}function ee(r){return{type:"Feature",id:r.id,properties:le(r),geometry:{type:"Point",coordinates:[De(r.x),Ue(r.y)]}}}function le(r){const e=r.numPoints,t=e>=1e4?`${Math.round(e/1e3)}k`:e>=1e3?`${Math.round(e/100)/10}k`:e;return L(L({},r.properties),{cluster:!0,cluster_id:r.id,point_count:e,point_count_abbreviated:t})}function j(r){return r/360+.5}function $(r){const e=Math.sin(r*Math.PI/180),t=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return t<0?0:t>1?1:t}function De(r){return(r-.5)*360}function Ue(r){const e=(180-r*360)*Math.PI/180;return 360*Math.atan(Math.exp(e))/Math.PI-90}function L(r,e){for(const t in e)r[t]=e[t];return r}function te(r){return r.x}function ne(r){return r.y}/*! ***************************************************************************** | ||
"use strict";var ke=Object.defineProperty;var Ce=(n,e,t)=>e in n?ke(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var z=(n,e,t)=>(Ce(n,typeof e!="symbol"?e+"":e,t),t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("vue"),A=Symbol("map"),T=Symbol("api"),de=Symbol("marker"),he=Symbol("markerCluster"),F=Symbol("CustomMarker"),pe=Symbol("mapTilesLoaded"),L=["click","dblclick","drag","dragend","dragstart","mousedown","mousemove","mouseout","mouseover","mouseup","rightclick"];var _e=function n(e,t){if(e===t)return!0;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var s,r,o;if(Array.isArray(e)){if(s=e.length,s!=t.length)return!1;for(r=s;r--!==0;)if(!n(e[r],t[r]))return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();if(o=Object.keys(e),s=o.length,s!==Object.keys(t).length)return!1;for(r=s;r--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[r]))return!1;for(r=s;r--!==0;){var a=o[r];if(!n(e[a],t[a]))return!1}return!0}return e!==e&&t!==t};const X="__googleMapsScriptId";class O{constructor({apiKey:e,channel:t,client:s,id:r=X,libraries:o=[],language:a,region:u,version:i,mapIds:h,nonce:d,retries:c=3,url:p="https://maps.googleapis.com/maps/api/js"}){if(this.CALLBACK="__googleMapsCallback",this.callbacks=[],this.done=!1,this.loading=!1,this.errors=[],this.version=i,this.apiKey=e,this.channel=t,this.client=s,this.id=r||X,this.libraries=o,this.language=a,this.region=u,this.mapIds=h,this.nonce=d,this.retries=c,this.url=p,O.instance){if(!_e(this.options,O.instance.options))throw new Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(O.instance.options)}`);return O.instance}O.instance=this}get options(){return{version:this.version,apiKey:this.apiKey,channel:this.channel,client:this.client,id:this.id,libraries:this.libraries,language:this.language,region:this.region,mapIds:this.mapIds,nonce:this.nonce,url:this.url}}get failed(){return this.done&&!this.loading&&this.errors.length>=this.retries+1}createUrl(){let e=this.url;return e+=`?callback=${this.CALLBACK}`,this.apiKey&&(e+=`&key=${this.apiKey}`),this.channel&&(e+=`&channel=${this.channel}`),this.client&&(e+=`&client=${this.client}`),this.libraries.length>0&&(e+=`&libraries=${this.libraries.join(",")}`),this.language&&(e+=`&language=${this.language}`),this.region&&(e+=`®ion=${this.region}`),this.version&&(e+=`&v=${this.version}`),this.mapIds&&(e+=`&map_ids=${this.mapIds.join(",")}`),e}deleteScript(){const e=document.getElementById(this.id);e&&e.remove()}load(){return this.loadPromise()}loadPromise(){return new Promise((e,t)=>{this.loadCallback(s=>{s?t(s.error):e(window.google)})})}loadCallback(e){this.callbacks.push(e),this.execute()}setScript(){if(document.getElementById(this.id)){this.callback();return}const e=this.createUrl(),t=document.createElement("script");t.id=this.id,t.type="text/javascript",t.src=e,t.onerror=this.loadErrorCallback.bind(this),t.defer=!0,t.async=!0,this.nonce&&(t.nonce=this.nonce),document.head.appendChild(t)}reset(){this.deleteScript(),this.done=!1,this.loading=!1,this.errors=[],this.onerrorEvent=null}resetIfRetryingFailed(){this.failed&&this.reset()}loadErrorCallback(e){if(this.errors.push(e),this.errors.length<=this.retries){const t=this.errors.length*Math.pow(2,this.errors.length);console.log(`Failed to load Google Maps script, retrying in ${t} ms.`),setTimeout(()=>{this.deleteScript(),this.setScript()},t)}else this.onerrorEvent=e,this.callback()}setCallback(){window.__googleMapsCallback=this.callback.bind(this)}callback(){this.done=!0,this.loading=!1,this.callbacks.forEach(e=>{e(this.onerrorEvent)}),this.callbacks=[]}execute(){if(this.resetIfRetryingFailed(),this.done)this.callback();else{if(window.google&&window.google.maps&&window.google.maps.version){console.warn("Google Maps already loaded outside @googlemaps/js-api-loader.This may result in undesirable behavior as options and script parameters may not match."),this.callback();return}this.loading||(this.loading=!0,this.setCallback(),this.setScript())}}}function Me(n){return class extends n.OverlayView{constructor(s){super();z(this,"element");z(this,"opts");const{element:r,...o}=s;this.element=r,this.opts=o,this.opts.map&&this.setMap(this.opts.map)}getPosition(){return this.opts.position?this.opts.position instanceof n.LatLng?this.opts.position:new n.LatLng(this.opts.position):null}getVisible(){if(!this.element)return!1;const s=this.element;return s.style.display!=="none"&&s.style.visibility!=="hidden"&&(s.style.opacity===""||Number(s.style.opacity)>.01)}onAdd(){if(!this.element)return;const s=this.getPanes();s&&s.overlayMouseTarget.appendChild(this.element)}draw(){if(!this.element)return;const r=this.getProjection().fromLatLngToDivPixel(this.getPosition());if(r){this.element.style.position="absolute";const o=this.element.offsetHeight,a=this.element.offsetWidth;let u,i;switch(this.opts.anchorPoint){case"TOP_CENTER":u=r.x-a/2,i=r.y;break;case"BOTTOM_CENTER":u=r.x-a/2,i=r.y-o;break;case"LEFT_CENTER":u=r.x,i=r.y-o/2;break;case"RIGHT_CENTER":u=r.x-a,i=r.y-o/2;break;case"TOP_LEFT":u=r.x,i=r.y;break;case"TOP_RIGHT":u=r.x-a,i=r.y;break;case"BOTTOM_LEFT":u=r.x,i=r.y-o;break;case"BOTTOM_RIGHT":u=r.x-a,i=r.y-o;break;default:u=r.x-a/2,i=r.y-o/2}this.element.style.left=u+"px",this.element.style.top=i+"px",this.element.style.transform=`translateX(${this.opts.offsetX||0}px) translateY(${this.opts.offsetY||0}px)`,this.opts.zIndex&&(this.element.style.zIndex=this.opts.zIndex.toString())}}onRemove(){this.element&&this.element.remove()}setOptions(s){this.opts=s,this.draw()}}}let Q;const ee=["bounds_changed","center_changed","click","dblclick","drag","dragend","dragstart","heading_changed","idle","maptypeid_changed","mousemove","mouseout","mouseover","projection_changed","resize","rightclick","tilesloaded","tilt_changed","zoom_changed"],be=l.defineComponent({props:{apiPromise:{type:Promise},apiKey:{type:String,default:""},version:{type:String,default:"weekly"},libraries:{type:Array,default:()=>["places"]},region:{type:String,required:!1},language:{type:String,required:!1},backgroundColor:{type:String,required:!1},center:{type:Object,default:()=>({lat:0,lng:0})},clickableIcons:{type:Boolean,required:!1,default:void 0},controlSize:{type:Number,required:!1},disableDefaultUi:{type:Boolean,required:!1,default:void 0},disableDoubleClickZoom:{type:Boolean,required:!1,default:void 0},draggable:{type:Boolean,required:!1,default:void 0},draggableCursor:{type:String,required:!1},draggingCursor:{type:String,required:!1},fullscreenControl:{type:Boolean,required:!1,default:void 0},fullscreenControlPosition:{type:String,required:!1},gestureHandling:{type:String,required:!1},heading:{type:Number,required:!1},keyboardShortcuts:{type:Boolean,required:!1,default:void 0},mapTypeControl:{type:Boolean,required:!1,default:void 0},mapTypeControlOptions:{type:Object,required:!1},mapTypeId:{type:[Number,String],required:!1},mapId:{type:String,required:!1},maxZoom:{type:Number,required:!1},minZoom:{type:Number,required:!1},noClear:{type:Boolean,required:!1,default:void 0},panControl:{type:Boolean,required:!1,default:void 0},panControlPosition:{type:String,required:!1},restriction:{type:Object,required:!1},rotateControl:{type:Boolean,required:!1,default:void 0},rotateControlPosition:{type:String,required:!1},scaleControl:{type:Boolean,required:!1,default:void 0},scaleControlStyle:{type:Number,required:!1},scrollwheel:{type:Boolean,required:!1,default:void 0},streetView:{type:Object,required:!1},streetViewControl:{type:Boolean,required:!1,default:void 0},streetViewControlPosition:{type:String,required:!1},styles:{type:Array,required:!1},tilt:{type:Number,required:!1},zoom:{type:Number,required:!1},zoomControl:{type:Boolean,required:!1,default:void 0},zoomControlPosition:{type:String,required:!1}},emits:ee,setup(n,{emit:e}){const t=l.ref(),s=l.ref(!1),r=l.ref(),o=l.ref(),a=l.ref(!1);l.provide(A,r),l.provide(T,o),l.provide(pe,a);const u=()=>{const c={...n};Object.keys(c).forEach(g=>{c[g]===void 0&&delete c[g]});const f=g=>{var v;return g?{position:(v=o.value)==null?void 0:v.ControlPosition[g]}:{}},m={scaleControlOptions:n.scaleControlStyle?{style:n.scaleControlStyle}:{},panControlOptions:f(n.panControlPosition),zoomControlOptions:f(n.zoomControlPosition),rotateControlOptions:f(n.rotateControlPosition),streetViewControlOptions:f(n.streetViewControlPosition),fullscreenControlOptions:f(n.fullscreenControlPosition),disableDefaultUI:n.disableDefaultUi};return{...c,...m}},i=l.watch([o,r],([c,p])=>{const f=c,m=p;f&&m&&(f.event.addListenerOnce(m,"tilesloaded",()=>{a.value=!0}),setTimeout(i,0))},{immediate:!0}),h=()=>{try{const{apiKey:c,region:p,version:f,language:m,libraries:g}=n;Q=new O({apiKey:c,region:p,version:f,language:m,libraries:g})}catch(c){console.error(c)}},d=c=>{o.value=l.markRaw(c.maps),r.value=l.markRaw(new c.maps.Map(t.value,u()));const p=Me(o.value);o.value[F]=p,ee.forEach(m=>{var g;(g=r.value)==null||g.addListener(m,v=>e(m,v))}),s.value=!0;const f=Object.keys(n).filter(m=>!["apiPromise","apiKey","version","libraries","region","language","center","zoom"].includes(m)).map(m=>l.toRef(n,m));l.watch([()=>n.center,()=>n.zoom,...f],([m,g],[v,y])=>{var N,_,B;const{center:w,zoom:C,...x}=u();(N=r.value)==null||N.setOptions(x),g!==void 0&&g!==y&&((_=r.value)==null||_.setZoom(g));const j=!v||m.lng!==v.lng||m.lat!==v.lat;m&&j&&((B=r.value)==null||B.panTo(m))})};return l.onMounted(()=>{n.apiPromise&&n.apiPromise instanceof Promise?n.apiPromise.then(d):(h(),Q.load().then(d))}),l.onBeforeUnmount(()=>{var c;a.value=!1,r.value&&((c=o.value)==null||c.event.clearInstanceListeners(r.value))}),{mapRef:t,ready:s,map:r,api:o,mapTilesLoaded:a}}});const D=(n,e)=>{const t=n.__vccOpts||n;for(const[s,r]of e)t[s]=r;return t},Pe={ref:"mapRef",class:"mapdiv"};function Oe(n,e,t,s,r,o){return l.openBlock(),l.createElementBlock("div",null,[l.createElementVNode("div",Pe,null,512),l.renderSlot(n.$slots,"default",l.normalizeProps(l.guardReactiveProps({ready:n.ready,map:n.map,api:n.api,mapTilesLoaded:n.mapTilesLoaded})),void 0,!0)])}const Ee=D(be,[["render",Oe],["__scopeId","data-v-7d660dd5"]]);function xe(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var Se=function n(e,t){if(e===t)return!0;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var s,r,o;if(Array.isArray(e)){if(s=e.length,s!=t.length)return!1;for(r=s;r--!==0;)if(!n(e[r],t[r]))return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();if(o=Object.keys(e),s=o.length,s!==Object.keys(t).length)return!1;for(r=s;r--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[r]))return!1;for(r=s;r--!==0;){var a=o[r];if(!n(e[a],t[a]))return!1}return!0}return e!==e&&t!==t};const E=xe(Se),Le=n=>n==="Marker",Ae=n=>n===F,I=(n,e,t,s)=>{const r=l.ref(),o=l.inject(A,l.ref()),a=l.inject(T,l.ref()),u=l.inject(he,l.ref()),i=l.computed(()=>!!(u.value&&a.value&&(r.value instanceof a.value.Marker||r.value instanceof a.value[F])));return l.watch([o,t],(h,[d,c])=>{var f,m,g;const p=!E(t.value,c)||o.value!==d;!o.value||!a.value||!p||(r.value?(r.value.setOptions(t.value),i.value&&((f=u.value)==null||f.removeMarker(r.value),(m=u.value)==null||m.addMarker(r.value))):(Le(n)?r.value=l.markRaw(new a.value[n](t.value)):Ae(n)?r.value=l.markRaw(new a.value[n](t.value)):r.value=l.markRaw(new a.value[n]({...t.value,map:o.value})),i.value?(g=u.value)==null||g.addMarker(r.value):r.value.setMap(o.value),e.forEach(v=>{var y;(y=r.value)==null||y.addListener(v,w=>s(v,w))})))},{immediate:!0}),l.onBeforeUnmount(()=>{var h,d;r.value&&((h=a.value)==null||h.event.clearInstanceListeners(r.value),i.value?(d=u.value)==null||d.removeMarker(r.value):r.value.setMap(null))}),r},te=["animation_changed","click","dblclick","rightclick","dragstart","dragend","drag","mouseover","mousedown","mouseout","mouseup","draggable_changed","clickable_changed","contextmenu","cursor_changed","flat_changed","rightclick","zindex_changed","icon_changed","position_changed","shape_changed","title_changed","visible_changed"],Te=l.defineComponent({name:"Marker",props:{options:{type:Object,required:!0}},emits:te,setup(n,{emit:e,expose:t,slots:s}){const r=l.toRef(n,"options"),o=I("Marker",te,r,e);return l.provide(de,o),t({marker:o}),()=>{var a;return(a=s.default)==null?void 0:a.call(s)}}}),Ie=l.defineComponent({name:"Polyline",props:{options:{type:Object,required:!0}},emits:L,setup(n,{emit:e}){const t=l.toRef(n,"options");return{polyline:I("Polyline",L,t,e)}},render:()=>null}),je=l.defineComponent({name:"Polygon",props:{options:{type:Object,required:!0}},emits:L,setup(n,{emit:e}){const t=l.toRef(n,"options");return{polygon:I("Polygon",L,t,e)}},render:()=>null}),se=L.concat(["bounds_changed"]),Be=l.defineComponent({name:"Rectangle",props:{options:{type:Object,required:!0}},emits:se,setup(n,{emit:e}){const t=l.toRef(n,"options");return{rectangle:I("Rectangle",se,t,e)}},render:()=>null}),re=L.concat(["center_changed","radius_changed"]),Re=l.defineComponent({name:"Circle",props:{options:{type:Object,required:!0}},emits:re,setup(n,{emit:e}){const t=l.toRef(n,"options");return{circle:I("Circle",re,t,e)}},render:()=>null}),$e=l.defineComponent({props:{position:{type:String,required:!0},index:{type:Number,default:1}},emits:["content:loaded"],setup(n,{emit:e}){const t=l.ref(null),s=l.inject(A,l.ref()),r=l.inject(T,l.ref()),o=l.inject(pe,l.ref(!1)),a=l.ref(!1),u=l.watch([o,r,t],([d,c,p])=>{c&&d&&p&&(i(n.position),a.value=!0,e("content:loaded"),setTimeout(u,0))},{immediate:!0}),i=d=>{if(s.value&&r.value&&t.value){const c=r.value.ControlPosition[d];s.value.controls[c].push(t.value)}},h=d=>{if(s.value&&r.value){let c=null;const p=r.value.ControlPosition[d];s.value.controls[p].forEach((f,m)=>{f===t.value&&(c=m)}),c!==null&&s.value.controls[p].removeAt(c)}};return l.onBeforeUnmount(()=>h(n.position)),l.watch(()=>n.position,(d,c)=>{h(c),i(d)}),l.watch(()=>n.index,d=>{d&&t.value&&(t.value.index=n.index)}),{controlRef:t,showContent:a}}}),qe={ref:"controlRef"};function Ne(n,e,t,s,r,o){return l.withDirectives((l.openBlock(),l.createElementBlock("div",qe,[l.renderSlot(n.$slots,"default")],512)),[[l.vShow,n.showContent]])}const Ze=D($e,[["render",Ne]]),ne=["closeclick","content_changed","domready","position_changed","visible","zindex_changed"],Ue=l.defineComponent({inheritAttrs:!1,props:{options:{type:Object,default:()=>({})}},emits:ne,setup(n,{slots:e,emit:t,expose:s}){const r=l.ref(),o=l.ref(),a=l.inject(A,l.ref()),u=l.inject(T,l.ref()),i=l.inject(de,l.ref());let h;const d=l.computed(()=>{var f;return(f=e.default)==null?void 0:f.call(e).some(m=>m.type!==l.Comment)}),c=f=>{var m;return(m=r.value)==null?void 0:m.open({map:a.value,anchor:i.value,...f})},p=()=>{var f;return(f=r.value)==null?void 0:f.close()};return l.onMounted(()=>{l.watch([a,()=>n.options],([f,m],[g,v])=>{const y=!E(m,v)||a.value!==g;a.value&&u.value&&y&&(r.value?(r.value.setOptions({...m,content:d.value?o.value:m.content}),i.value||c()):(r.value=l.markRaw(new u.value.InfoWindow({...m,content:d.value?o.value:m.content})),i.value?h=i.value.addListener("click",()=>{c()}):c(),ne.forEach(w=>{var C;(C=r.value)==null||C.addListener(w,x=>t(w,x))})))},{immediate:!0})}),l.onBeforeUnmount(()=>{var f;h&&h.remove(),r.value&&((f=u.value)==null||f.event.clearInstanceListeners(r.value),p())}),s({infoWindow:r,open:c,close:p}),{infoWindow:r,infoWindowRef:o,hasSlotContent:d,open:c,close:p}}});const Fe={key:0,class:"info-window-wrapper"};function De(n,e,t,s,r,o){return n.hasSlotContent?(l.openBlock(),l.createElementBlock("div",Fe,[l.createElementVNode("div",l.mergeProps({ref:"infoWindowRef"},n.$attrs),[l.renderSlot(n.$slots,"default",{},void 0,!0)],16)])):l.createCommentVNode("",!0)}const ze=D(Ue,[["render",De],["__scopeId","data-v-45a4606d"]]),oe=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],V=1,R=8;class K{static from(e){if(!(e instanceof ArrayBuffer))throw new Error("Data must be an instance of ArrayBuffer.");const[t,s]=new Uint8Array(e,0,2);if(t!==219)throw new Error("Data does not appear to be in a KDBush format.");const r=s>>4;if(r!==V)throw new Error(`Got v${r} data when expected v${V}.`);const o=oe[s&15];if(!o)throw new Error("Unrecognized array type.");const[a]=new Uint16Array(e,2,1),[u]=new Uint32Array(e,4,1);return new K(u,a,o,e)}constructor(e,t=64,s=Float64Array,r){if(isNaN(e)||e<0)throw new Error(`Unpexpected numItems value: ${e}.`);this.numItems=+e,this.nodeSize=Math.min(Math.max(+t,2),65535),this.ArrayType=s,this.IndexArrayType=e<65536?Uint16Array:Uint32Array;const o=oe.indexOf(this.ArrayType),a=e*2*this.ArrayType.BYTES_PER_ELEMENT,u=e*this.IndexArrayType.BYTES_PER_ELEMENT,i=(8-u%8)%8;if(o<0)throw new Error(`Unexpected typed array class: ${s}.`);r&&r instanceof ArrayBuffer?(this.data=r,this.ids=new this.IndexArrayType(this.data,R,e),this.coords=new this.ArrayType(this.data,R+u+i,e*2),this._pos=e*2,this._finished=!0):(this.data=new ArrayBuffer(R+a+u+i),this.ids=new this.IndexArrayType(this.data,R,e),this.coords=new this.ArrayType(this.data,R+u+i,e*2),this._pos=0,this._finished=!1,new Uint8Array(this.data,0,2).set([219,(V<<4)+o]),new Uint16Array(this.data,2,1)[0]=t,new Uint32Array(this.data,4,1)[0]=e)}add(e,t){const s=this._pos>>1;return this.ids[s]=s,this.coords[this._pos++]=e,this.coords[this._pos++]=t,s}finish(){const e=this._pos>>1;if(e!==this.numItems)throw new Error(`Added ${e} items when expected ${this.numItems}.`);return W(this.ids,this.coords,this.nodeSize,0,this.numItems-1,0),this._finished=!0,this}range(e,t,s,r){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");const{ids:o,coords:a,nodeSize:u}=this,i=[0,o.length-1,0],h=[];for(;i.length;){const d=i.pop()||0,c=i.pop()||0,p=i.pop()||0;if(c-p<=u){for(let v=p;v<=c;v++){const y=a[2*v],w=a[2*v+1];y>=e&&y<=s&&w>=t&&w<=r&&h.push(o[v])}continue}const f=p+c>>1,m=a[2*f],g=a[2*f+1];m>=e&&m<=s&&g>=t&&g<=r&&h.push(o[f]),(d===0?e<=m:t<=g)&&(i.push(p),i.push(f-1),i.push(1-d)),(d===0?s>=m:r>=g)&&(i.push(f+1),i.push(c),i.push(1-d))}return h}within(e,t,s){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");const{ids:r,coords:o,nodeSize:a}=this,u=[0,r.length-1,0],i=[],h=s*s;for(;u.length;){const d=u.pop()||0,c=u.pop()||0,p=u.pop()||0;if(c-p<=a){for(let v=p;v<=c;v++)ie(o[2*v],o[2*v+1],e,t)<=h&&i.push(r[v]);continue}const f=p+c>>1,m=o[2*f],g=o[2*f+1];ie(m,g,e,t)<=h&&i.push(r[f]),(d===0?e-s<=m:t-s<=g)&&(u.push(p),u.push(f-1),u.push(1-d)),(d===0?e+s>=m:t+s>=g)&&(u.push(f+1),u.push(c),u.push(1-d))}return i}}function W(n,e,t,s,r,o){if(r-s<=t)return;const a=s+r>>1;fe(n,e,a,s,r,o),W(n,e,t,s,a-1,1-o),W(n,e,t,a+1,r,1-o)}function fe(n,e,t,s,r,o){for(;r>s;){if(r-s>600){const h=r-s+1,d=t-s+1,c=Math.log(h),p=.5*Math.exp(2*c/3),f=.5*Math.sqrt(c*p*(h-p)/h)*(d-h/2<0?-1:1),m=Math.max(s,Math.floor(t-d*p/h+f)),g=Math.min(r,Math.floor(t+(h-d)*p/h+f));fe(n,e,t,m,g,o)}const a=e[2*t+o];let u=s,i=r;for($(n,e,s,t),e[2*r+o]>a&&$(n,e,s,r);u<i;){for($(n,e,u,i),u++,i--;e[2*u+o]<a;)u++;for(;e[2*i+o]>a;)i--}e[2*s+o]===a?$(n,e,s,i):(i++,$(n,e,i,r)),i<=t&&(s=i+1),t<=i&&(r=i-1)}}function $(n,e,t,s){G(n,t,s),G(e,2*t,2*s),G(e,2*t+1,2*s+1)}function G(n,e,t){const s=n[e];n[e]=n[t],n[t]=s}function ie(n,e,t,s){const r=n-t,o=e-s;return r*r+o*o}const Ve={minZoom:0,maxZoom:16,minPoints:2,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:n=>n},ae=Math.fround||(n=>e=>(n[0]=+e,n[0]))(new Float32Array(1)),P=2,b=3,H=4,M=5,me=6;class ge{constructor(e){this.options=Object.assign(Object.create(Ve),e),this.trees=new Array(this.options.maxZoom+1),this.stride=this.options.reduce?7:6,this.clusterProps=[]}load(e){const{log:t,minZoom:s,maxZoom:r}=this.options;t&&console.time("total time");const o=`prepare ${e.length} points`;t&&console.time(o),this.points=e;const a=[];for(let i=0;i<e.length;i++){const h=e[i];if(!h.geometry)continue;const[d,c]=h.geometry.coordinates,p=ae(Z(d)),f=ae(U(c));a.push(p,f,1/0,i,-1,1),this.options.reduce&&a.push(0)}let u=this.trees[r+1]=this._createTree(a);t&&console.timeEnd(o);for(let i=r;i>=s;i--){const h=+Date.now();u=this.trees[i]=this._createTree(this._cluster(u,i)),t&&console.log("z%d: %d clusters in %dms",i,u.numItems,+Date.now()-h)}return t&&console.timeEnd("total time"),this}getClusters(e,t){let s=((e[0]+180)%360+360)%360-180;const r=Math.max(-90,Math.min(90,e[1]));let o=e[2]===180?180:((e[2]+180)%360+360)%360-180;const a=Math.max(-90,Math.min(90,e[3]));if(e[2]-e[0]>=360)s=-180,o=180;else if(s>o){const c=this.getClusters([s,r,180,a],t),p=this.getClusters([-180,r,o,a],t);return c.concat(p)}const u=this.trees[this._limitZoom(t)],i=u.range(Z(s),U(a),Z(o),U(r)),h=u.data,d=[];for(const c of i){const p=this.stride*c;d.push(h[p+M]>1?le(h,p,this.clusterProps):this.points[h[p+b]])}return d}getChildren(e){const t=this._getOriginId(e),s=this._getOriginZoom(e),r="No cluster with the specified id.",o=this.trees[s];if(!o)throw new Error(r);const a=o.data;if(t*this.stride>=a.length)throw new Error(r);const u=this.options.radius/(this.options.extent*Math.pow(2,s-1)),i=a[t*this.stride],h=a[t*this.stride+1],d=o.within(i,h,u),c=[];for(const p of d){const f=p*this.stride;a[f+H]===e&&c.push(a[f+M]>1?le(a,f,this.clusterProps):this.points[a[f+b]])}if(c.length===0)throw new Error(r);return c}getLeaves(e,t,s){t=t||10,s=s||0;const r=[];return this._appendLeaves(r,e,t,s,0),r}getTile(e,t,s){const r=this.trees[this._limitZoom(e)],o=Math.pow(2,e),{extent:a,radius:u}=this.options,i=u/a,h=(s-i)/o,d=(s+1+i)/o,c={features:[]};return this._addTileFeatures(r.range((t-i)/o,h,(t+1+i)/o,d),r.data,t,s,o,c),t===0&&this._addTileFeatures(r.range(1-i/o,h,1,d),r.data,o,s,o,c),t===o-1&&this._addTileFeatures(r.range(0,h,i/o,d),r.data,-1,s,o,c),c.features.length?c:null}getClusterExpansionZoom(e){let t=this._getOriginZoom(e)-1;for(;t<=this.options.maxZoom;){const s=this.getChildren(e);if(t++,s.length!==1)break;e=s[0].properties.cluster_id}return t}_appendLeaves(e,t,s,r,o){const a=this.getChildren(t);for(const u of a){const i=u.properties;if(i&&i.cluster?o+i.point_count<=r?o+=i.point_count:o=this._appendLeaves(e,i.cluster_id,s,r,o):o<r?o++:e.push(u),e.length===s)break}return o}_createTree(e){const t=new K(e.length/this.stride|0,this.options.nodeSize,Float32Array);for(let s=0;s<e.length;s+=this.stride)t.add(e[s],e[s+1]);return t.finish(),t.data=e,t}_addTileFeatures(e,t,s,r,o,a){for(const u of e){const i=u*this.stride,h=t[i+M]>1;let d,c,p;if(h)d=ve(t,i,this.clusterProps),c=t[i],p=t[i+1];else{const g=this.points[t[i+b]];d=g.properties;const[v,y]=g.geometry.coordinates;c=Z(v),p=U(y)}const f={type:1,geometry:[[Math.round(this.options.extent*(c*o-s)),Math.round(this.options.extent*(p*o-r))]],tags:d};let m;h||this.options.generateId?m=t[i+b]:m=this.points[t[i+b]].id,m!==void 0&&(f.id=m),a.features.push(f)}}_limitZoom(e){return Math.max(this.options.minZoom,Math.min(Math.floor(+e),this.options.maxZoom+1))}_cluster(e,t){const{radius:s,extent:r,reduce:o,minPoints:a}=this.options,u=s/(r*Math.pow(2,t)),i=e.data,h=[],d=this.stride;for(let c=0;c<i.length;c+=d){if(i[c+P]<=t)continue;i[c+P]=t;const p=i[c],f=i[c+1],m=e.within(i[c],i[c+1],u),g=i[c+M];let v=g;for(const y of m){const w=y*d;i[w+P]>t&&(v+=i[w+M])}if(v>g&&v>=a){let y=p*g,w=f*g,C,x=-1;const j=((c/d|0)<<5)+(t+1)+this.points.length;for(const N of m){const _=N*d;if(i[_+P]<=t)continue;i[_+P]=t;const B=i[_+M];y+=i[_]*B,w+=i[_+1]*B,i[_+H]=j,o&&(C||(C=this._map(i,c,!0),x=this.clusterProps.length,this.clusterProps.push(C)),o(C,this._map(i,_)))}i[c+H]=j,h.push(y/v,w/v,1/0,j,-1,v),o&&h.push(x)}else{for(let y=0;y<d;y++)h.push(i[c+y]);if(v>1)for(const y of m){const w=y*d;if(!(i[w+P]<=t)){i[w+P]=t;for(let C=0;C<d;C++)h.push(i[w+C])}}}}return h}_getOriginId(e){return e-this.points.length>>5}_getOriginZoom(e){return(e-this.points.length)%32}_map(e,t,s){if(e[t+M]>1){const a=this.clusterProps[e[t+me]];return s?Object.assign({},a):a}const r=this.points[e[t+b]].properties,o=this.options.map(r);return s&&o===r?Object.assign({},o):o}}function le(n,e,t){return{type:"Feature",id:n[e+b],properties:ve(n,e,t),geometry:{type:"Point",coordinates:[Ge(n[e]),He(n[e+1])]}}}function ve(n,e,t){const s=n[e+M],r=s>=1e4?`${Math.round(s/1e3)}k`:s>=1e3?`${Math.round(s/100)/10}k`:s,o=n[e+me],a=o===-1?{}:Object.assign({},t[o]);return Object.assign(a,{cluster:!0,cluster_id:n[e+b],point_count:s,point_count_abbreviated:r})}function Z(n){return n/360+.5}function U(n){const e=Math.sin(n*Math.PI/180),t=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return t<0?0:t>1?1:t}function Ge(n){return(n-.5)*360}function He(n){const e=(180-n*360)*Math.PI/180;return 360*Math.atan(Math.exp(e))/Math.PI-90}/*! ***************************************************************************** | ||
Copyright (c) Microsoft Corporation. | ||
@@ -15,7 +15,7 @@ | ||
PERFORMANCE OF THIS SOFTWARE. | ||
***************************************************************************** */function Fe(r,e){var t={};for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&e.indexOf(o)<0&&(t[o]=r[o]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,o=Object.getOwnPropertySymbols(r);n<o.length;n++)e.indexOf(o[n])<0&&Object.prototype.propertyIsEnumerable.call(r,o[n])&&(t[o[n]]=r[o[n]]);return t}class Z{constructor({markers:e,position:t}){this.markers=e,t&&(t instanceof google.maps.LatLng?this._position=t:this._position=new google.maps.LatLng(t))}get bounds(){if(!(this.markers.length===0&&!this._position))return this.markers.reduce((e,t)=>e.extend(t.getPosition()),new google.maps.LatLngBounds(this._position,this._position))}get position(){return this._position||this.bounds.getCenter()}get count(){return this.markers.filter(e=>e.getVisible()).length}push(e){this.markers.push(e)}delete(){this.marker&&(this.marker.setMap(null),delete this.marker),this.markers.length=0}}class Ge{constructor({maxZoom:e=16}){this.maxZoom=e}noop({markers:e}){return Ve(e)}}const Ve=r=>r.map(t=>new Z({position:t.getPosition(),markers:[t]}));class He extends Ge{constructor(e){var{maxZoom:t,radius:o=60}=e,n=Fe(e,["maxZoom","radius"]);super({maxZoom:t}),this.superCluster=new Ne(Object.assign({maxZoom:this.maxZoom,radius:o},n)),this.state={zoom:null}}calculate(e){let t=!1;if(!E(e.markers,this.markers)){t=!0,this.markers=[...e.markers];const n=this.markers.map(s=>({type:"Feature",geometry:{type:"Point",coordinates:[s.getPosition().lng(),s.getPosition().lat()]},properties:{marker:s}}));this.superCluster.load(n)}const o={zoom:e.map.getZoom()};return t||this.state.zoom>this.maxZoom&&o.zoom>this.maxZoom||(t=t||!E(this.state,o)),this.state=o,t&&(this.clusters=this.cluster(e)),{clusters:this.clusters,changed:t}}cluster({map:e}){return this.superCluster.getClusters([-180,-90,180,90],Math.round(e.getZoom())).map(this.transformCluster.bind(this))}transformCluster({geometry:{coordinates:[e,t]},properties:o}){if(o.cluster)return new Z({markers:this.superCluster.getLeaves(o.cluster_id,1/0).map(n=>n.properties.marker),position:new google.maps.LatLng({lat:t,lng:e})});{const n=o.marker;return new Z({markers:[n],position:n.getPosition()})}}}class Ke{constructor(e,t){this.markers={sum:e.length};const o=t.map(s=>s.count),n=o.reduce((s,l)=>s+l,0);this.clusters={count:t.length,markers:{mean:n/t.length,sum:n,min:Math.min(...o),max:Math.max(...o)}}}}class We{render({count:e,position:t},o){const n=e>Math.max(10,o.clusters.markers.mean)?"#ff0000":"#0000ff",s=window.btoa(` | ||
<svg fill="${n}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 240"> | ||
<circle cx="120" cy="120" opacity=".6" r="70" /> | ||
<circle cx="120" cy="120" opacity=".3" r="90" /> | ||
<circle cx="120" cy="120" opacity=".2" r="110" /> | ||
</svg>`);return new google.maps.Marker({position:t,icon:{url:`data:image/svg+xml;base64,${s}`,scaledSize:new google.maps.Size(45,45)},label:{text:String(e),color:"rgba(255,255,255,0.9)",fontSize:"12px"},title:`Cluster of ${e} markers`,zIndex:Number(google.maps.Marker.MAX_ZINDEX)+e})}}function Je(r,e){for(let t in e.prototype)r.prototype[t]=e.prototype[t]}class z{constructor(){Je(z,google.maps.OverlayView)}}var w;(function(r){r.CLUSTERING_BEGIN="clusteringbegin",r.CLUSTERING_END="clusteringend",r.CLUSTER_CLICK="click"})(w||(w={}));const Xe=(r,e,t)=>{t.fitBounds(e.bounds)};class Ye extends z{constructor({map:e,markers:t=[],algorithm:o=new He({}),renderer:n=new We,onClusterClick:s=Xe}){super(),this.markers=[...t],this.clusters=[],this.algorithm=o,this.renderer=n,this.onClusterClick=s,e&&this.setMap(e)}addMarker(e,t){this.markers.includes(e)||(this.markers.push(e),t||this.render())}addMarkers(e,t){e.forEach(o=>{this.addMarker(o,!0)}),t||this.render()}removeMarker(e,t){const o=this.markers.indexOf(e);return o===-1?!1:(e.setMap(null),this.markers.splice(o,1),t||this.render(),!0)}removeMarkers(e,t){let o=!1;return e.forEach(n=>{o=this.removeMarker(n,!0)||o}),o&&!t&&this.render(),o}clearMarkers(e){this.markers.length=0,e||this.render()}render(){const e=this.getMap();if(e instanceof google.maps.Map&&this.getProjection()){google.maps.event.trigger(this,w.CLUSTERING_BEGIN,this);const{clusters:t,changed:o}=this.algorithm.calculate({markers:this.markers,map:e,mapCanvasProjection:this.getProjection()});(o||o==null)&&(this.reset(),this.clusters=t,this.renderClusters()),google.maps.event.trigger(this,w.CLUSTERING_END,this)}}onAdd(){this.idleListener=this.getMap().addListener("idle",this.render.bind(this)),this.render()}onRemove(){google.maps.event.removeListener(this.idleListener),this.reset()}reset(){this.markers.forEach(e=>e.setMap(null)),this.clusters.forEach(e=>e.delete()),this.clusters=[]}renderClusters(){const e=new Ke(this.markers,this.clusters),t=this.getMap();this.clusters.forEach(o=>{o.markers.length===1?o.marker=o.markers[0]:(o.marker=this.renderer.render(o,e),this.onClusterClick&&o.marker.addListener("click",n=>{google.maps.event.trigger(this,w.CLUSTER_CLICK,o),this.onClusterClick(n,o,t)})),o.marker.setMap(t)})}}const oe=Object.values(w),Qe=i.defineComponent({name:"MarkerCluster",props:{options:{type:Object,default:()=>({})}},emits:oe,setup(r,{emit:e,expose:t,slots:o}){const n=i.ref(),s=i.inject(b,i.ref()),l=i.inject(O,i.ref());return i.provide(se,n),i.watch(s,()=>{s.value&&(n.value=i.markRaw(new Ye({map:s.value,...r.options})),oe.forEach(c=>{var a;(a=n.value)==null||a.addListener(c,p=>e(c,p))}))},{immediate:!0}),i.onBeforeUnmount(()=>{var c;n.value&&((c=l.value)==null||c.event.clearInstanceListeners(n.value),n.value.clearMarkers(),n.value.setMap(null))}),t({markerCluster:n}),()=>{var c;return(c=o.default)==null?void 0:c.call(o)}}}),et=i.defineComponent({inheritAttrs:!1,props:{options:{type:Object,required:!0}},setup(r,{slots:e,emit:t,expose:o}){const n=i.ref(),s=i.computed(()=>{var a;return(a=e.default)==null?void 0:a.call(e).some(p=>p.type!==i.Comment)}),l=i.computed(()=>({...r.options,element:n.value})),c=x(T,[],l,t);return o({customMarker:c}),{customMarkerRef:n,customMarker:c,hasSlotContent:s}}});const tt={key:0,class:"custom-marker-wrapper"};function nt(r,e,t,o,n,s){return r.hasSlotContent?(i.openBlock(),i.createElementBlock("div",tt,[i.createElementVNode("div",i.mergeProps({ref:"customMarkerRef",style:{cursor:r.$attrs.onClick?"pointer":void 0}},r.$attrs),[i.renderSlot(r.$slots,"default",{},void 0,!0)],16)])):i.createCommentVNode("",!0)}const ot=q(et,[["render",nt],["__scopeId","data-v-c7599d50"]]),rt=i.defineComponent({name:"HeatmapLayer",props:{options:{type:Object,default:()=>({})}},setup(r){const e=i.ref(),t=i.inject(b,i.ref()),o=i.inject(O,i.ref());return i.watch([t,()=>r.options],([n,s],[l,c])=>{var p;const a=!E(s,c)||t.value!==l;if(t.value&&o.value&&a){const d=structuredClone(s);if(d.data&&!(d.data instanceof o.value.MVCArray)){const u=o.value.LatLng;d.data=(p=d.data)==null?void 0:p.map(f=>f instanceof u||"location"in f&&(f.location instanceof u||f.location===null)?f:"location"in f?{...f,location:new u(f.location)}:new u(f))}e.value?e.value.setOptions(d):e.value=i.markRaw(new o.value.visualization.HeatmapLayer({...d,map:t.value}))}},{immediate:!0}),i.onBeforeUnmount(()=>{e.value&&e.value.setMap(null)}),{heatmapLayer:e}},render:()=>null});exports.Circle=Oe;exports.CustomControl=Le;exports.CustomMarker=ot;exports.GoogleMap=ge;exports.HeatmapLayer=rt;exports.InfoWindow=$e;exports.Marker=_e;exports.MarkerCluster=Qe;exports.Polygon=Me;exports.Polyline=we;exports.Rectangle=be; | ||
***************************************************************************** */function J(n,e){var t={};for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&e.indexOf(s)<0&&(t[s]=n[s]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,s=Object.getOwnPropertySymbols(n);r<s.length;r++)e.indexOf(s[r])<0&&Object.prototype.propertyIsEnumerable.call(n,s[r])&&(t[s[r]]=n[s[r]]);return t}class k{static isAdvancedMarkerAvailable(e){return google.maps.marker&&e.getMapCapabilities().isAdvancedMarkersAvailable===!0}static isAdvancedMarker(e){return google.maps.marker&&e instanceof google.maps.marker.AdvancedMarkerElement}static setMap(e,t){this.isAdvancedMarker(e)?e.map=t:e.setMap(t)}static getPosition(e){if(this.isAdvancedMarker(e)){if(e.position){if(e.position instanceof google.maps.LatLng)return e.position;if(e.position.lat&&e.position.lng)return new google.maps.LatLng(e.position.lat,e.position.lng)}return new google.maps.LatLng(null)}return e.getPosition()}static getVisible(e){return this.isAdvancedMarker(e)?!0:e.getVisible()}}class q{constructor({markers:e,position:t}){this.markers=e,t&&(t instanceof google.maps.LatLng?this._position=t:this._position=new google.maps.LatLng(t))}get bounds(){if(this.markers.length===0&&!this._position)return;const e=new google.maps.LatLngBounds(this._position,this._position);for(const t of this.markers)e.extend(k.getPosition(t));return e}get position(){return this._position||this.bounds.getCenter()}get count(){return this.markers.filter(e=>k.getVisible(e)).length}push(e){this.markers.push(e)}delete(){this.marker&&(k.setMap(this.marker,null),this.marker=void 0),this.markers.length=0}}const We=(n,e,t,s)=>{const r=ye(n.getBounds(),e,s);return t.filter(o=>r.contains(k.getPosition(o)))},ye=(n,e,t)=>{const{northEast:s,southWest:r}=Ke(n,e),o=Je({northEast:s,southWest:r},t);return Ye(o,e)},ce=(n,e,t)=>{const s=ye(n,e,t),r=s.getNorthEast(),o=s.getSouthWest();return[o.lng(),o.lat(),r.lng(),r.lat()]},Ke=(n,e)=>({northEast:e.fromLatLngToDivPixel(n.getNorthEast()),southWest:e.fromLatLngToDivPixel(n.getSouthWest())}),Je=({northEast:n,southWest:e},t)=>(n.x+=t,n.y-=t,e.x-=t,e.y+=t,{northEast:n,southWest:e}),Ye=({northEast:n,southWest:e},t)=>{const s=t.fromDivPixelToLatLng(e),r=t.fromDivPixelToLatLng(n);return new google.maps.LatLngBounds(s,r)};class we{constructor({maxZoom:e=16}){this.maxZoom=e}noop({markers:e}){return Qe(e)}}class Xe extends we{constructor(e){var{viewportPadding:t=60}=e,s=J(e,["viewportPadding"]);super(s),this.viewportPadding=60,this.viewportPadding=t}calculate({markers:e,map:t,mapCanvasProjection:s}){return t.getZoom()>=this.maxZoom?{clusters:this.noop({markers:e}),changed:!1}:{clusters:this.cluster({markers:We(t,s,e,this.viewportPadding),map:t,mapCanvasProjection:s})}}}const Qe=n=>n.map(t=>new q({position:k.getPosition(t),markers:[t]}));class et extends we{constructor(e){var{maxZoom:t,radius:s=60}=e,r=J(e,["maxZoom","radius"]);super({maxZoom:t}),this.state={zoom:-1},this.superCluster=new ge(Object.assign({maxZoom:this.maxZoom,radius:s},r))}calculate(e){let t=!1;const s={zoom:e.map.getZoom()};if(!E(e.markers,this.markers)){t=!0,this.markers=[...e.markers];const r=this.markers.map(o=>{const a=k.getPosition(o);return{type:"Feature",geometry:{type:"Point",coordinates:[a.lng(),a.lat()]},properties:{marker:o}}});this.superCluster.load(r)}return t||(this.state.zoom<=this.maxZoom||s.zoom<=this.maxZoom)&&(t=!E(this.state,s)),this.state=s,t&&(this.clusters=this.cluster(e)),{clusters:this.clusters,changed:t}}cluster({map:e}){return this.superCluster.getClusters([-180,-90,180,90],Math.round(e.getZoom())).map(t=>this.transformCluster(t))}transformCluster({geometry:{coordinates:[e,t]},properties:s}){if(s.cluster)return new q({markers:this.superCluster.getLeaves(s.cluster_id,1/0).map(o=>o.properties.marker),position:{lat:t,lng:e}});const r=s.marker;return new q({markers:[r],position:k.getPosition(r)})}}class tt extends Xe{constructor(e){var{maxZoom:t,radius:s=60,viewportPadding:r=60}=e,o=J(e,["maxZoom","radius","viewportPadding"]);super({maxZoom:t,viewportPadding:r}),this.superCluster=new ge(Object.assign({maxZoom:this.maxZoom,radius:s},o)),this.state={zoom:-1,view:[0,0,0,0]}}calculate(e){const t={zoom:Math.round(e.map.getZoom()),view:ce(e.map.getBounds(),e.mapCanvasProjection,this.viewportPadding)};let s=!E(this.state,t);if(!E(e.markers,this.markers)){s=!0,this.markers=[...e.markers];const r=this.markers.map(o=>{const a=k.getPosition(o);return{type:"Feature",geometry:{type:"Point",coordinates:[a.lng(),a.lat()]},properties:{marker:o}}});this.superCluster.load(r)}return s&&(this.clusters=this.cluster(e),this.state=t),{clusters:this.clusters,changed:s}}cluster({map:e,mapCanvasProjection:t}){const s={zoom:Math.round(e.getZoom()),view:ce(e.getBounds(),t,this.viewportPadding)};return this.superCluster.getClusters(s.view,s.zoom).map(r=>this.transformCluster(r))}transformCluster({geometry:{coordinates:[e,t]},properties:s}){if(s.cluster)return new q({markers:this.superCluster.getLeaves(s.cluster_id,1/0).map(o=>o.properties.marker),position:{lat:t,lng:e}});const r=s.marker;return new q({markers:[r],position:k.getPosition(r)})}}class st{constructor(e,t){this.markers={sum:e.length};const s=t.map(o=>o.count),r=s.reduce((o,a)=>o+a,0);this.clusters={count:t.length,markers:{mean:r/t.length,sum:r,min:Math.min(...s),max:Math.max(...s)}}}}class rt{render({count:e,position:t},s,r){const a=`<svg fill="${e>Math.max(10,s.clusters.markers.mean)?"#ff0000":"#0000ff"}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 240" width="50" height="50"> | ||
<circle cx="120" cy="120" opacity=".6" r="70" /> | ||
<circle cx="120" cy="120" opacity=".3" r="90" /> | ||
<circle cx="120" cy="120" opacity=".2" r="110" /> | ||
<text x="50%" y="50%" style="fill:#fff" text-anchor="middle" font-size="50" dominant-baseline="middle" font-family="roboto,arial,sans-serif">${e}</text> | ||
</svg>`,u=`Cluster of ${e} markers`,i=Number(google.maps.Marker.MAX_ZINDEX)+e;if(k.isAdvancedMarkerAvailable(r)){const d=document.createElement("div");d.innerHTML=a;const c=d.firstElementChild;c.setAttribute("transform","translate(0 25)");const p={map:r,position:t,zIndex:i,title:u,content:c};return new google.maps.marker.AdvancedMarkerElement(p)}const h={position:t,zIndex:i,title:u,icon:{url:`data:image/svg+xml;base64,${btoa(a)}`,anchor:new google.maps.Point(25,25)}};return new google.maps.Marker(h)}}function nt(n,e){for(let t in e.prototype)n.prototype[t]=e.prototype[t]}class Y{constructor(){nt(Y,google.maps.OverlayView)}}var S;(function(n){n.CLUSTERING_BEGIN="clusteringbegin",n.CLUSTERING_END="clusteringend",n.CLUSTER_CLICK="click"})(S||(S={}));const ot=(n,e,t)=>{t.fitBounds(e.bounds)};class it extends Y{constructor({map:e,markers:t=[],algorithmOptions:s={},algorithm:r=new et(s),renderer:o=new rt,onClusterClick:a=ot}){super(),this.markers=[...t],this.clusters=[],this.algorithm=r,this.renderer=o,this.onClusterClick=a,e&&this.setMap(e)}addMarker(e,t){this.markers.includes(e)||(this.markers.push(e),t||this.render())}addMarkers(e,t){e.forEach(s=>{this.addMarker(s,!0)}),t||this.render()}removeMarker(e,t){const s=this.markers.indexOf(e);return s===-1?!1:(k.setMap(e,null),this.markers.splice(s,1),t||this.render(),!0)}removeMarkers(e,t){let s=!1;return e.forEach(r=>{s=this.removeMarker(r,!0)||s}),s&&!t&&this.render(),s}clearMarkers(e){this.markers.length=0,e||this.render()}render(){const e=this.getMap();if(e instanceof google.maps.Map&&e.getProjection()){google.maps.event.trigger(this,S.CLUSTERING_BEGIN,this);const{clusters:t,changed:s}=this.algorithm.calculate({markers:this.markers,map:e,mapCanvasProjection:this.getProjection()});if(s||s==null){const r=new Set;for(const a of t)a.markers.length==1&&r.add(a.markers[0]);const o=[];for(const a of this.clusters)a.marker!=null&&(a.markers.length==1?r.has(a.marker)||k.setMap(a.marker,null):o.push(a.marker));this.clusters=t,this.renderClusters(),requestAnimationFrame(()=>o.forEach(a=>k.setMap(a,null)))}google.maps.event.trigger(this,S.CLUSTERING_END,this)}}onAdd(){this.idleListener=this.getMap().addListener("idle",this.render.bind(this)),this.render()}onRemove(){google.maps.event.removeListener(this.idleListener),this.reset()}reset(){this.markers.forEach(e=>k.setMap(e,null)),this.clusters.forEach(e=>e.delete()),this.clusters=[]}renderClusters(){const e=new st(this.markers,this.clusters),t=this.getMap();this.clusters.forEach(s=>{s.markers.length===1?s.marker=s.markers[0]:(s.marker=this.renderer.render(s,e,t),s.markers.forEach(r=>k.setMap(r,null)),this.onClusterClick&&s.marker.addListener("click",r=>{google.maps.event.trigger(this,S.CLUSTER_CLICK,s),this.onClusterClick(r,s,t)})),k.setMap(s.marker,t)})}}const ue=Object.values(S),at=l.defineComponent({name:"MarkerCluster",props:{options:{type:Object,default:()=>({})}},emits:ue,setup(n,{emit:e,expose:t,slots:s}){const r=l.ref(),o=l.inject(A,l.ref()),a=l.inject(T,l.ref());return l.provide(he,r),l.watch(o,()=>{o.value&&(r.value=l.markRaw(new it({map:o.value,algorithm:new tt(n.options.algorithmOptions??{}),...n.options})),ue.forEach(u=>{var i;(i=r.value)==null||i.addListener(u,h=>e(u,h))}))},{immediate:!0}),l.onBeforeUnmount(()=>{var u;r.value&&((u=a.value)==null||u.event.clearInstanceListeners(r.value),r.value.clearMarkers(),r.value.setMap(null))}),t({markerCluster:r}),()=>{var u;return(u=s.default)==null?void 0:u.call(s)}}}),lt=l.defineComponent({inheritAttrs:!1,props:{options:{type:Object,required:!0}},setup(n,{slots:e,emit:t,expose:s}){const r=l.ref(),o=l.computed(()=>{var i;return(i=e.default)==null?void 0:i.call(e).some(h=>h.type!==l.Comment)}),a=l.computed(()=>({...n.options,element:r.value})),u=I(F,[],a,t);return s({customMarker:u}),{customMarkerRef:r,customMarker:u,hasSlotContent:o}}});const ct={key:0,class:"custom-marker-wrapper"};function ut(n,e,t,s,r,o){return n.hasSlotContent?(l.openBlock(),l.createElementBlock("div",ct,[l.createElementVNode("div",l.mergeProps({ref:"customMarkerRef",style:{cursor:n.$attrs.onClick?"pointer":void 0}},n.$attrs),[l.renderSlot(n.$slots,"default",{},void 0,!0)],16)])):l.createCommentVNode("",!0)}const dt=D(lt,[["render",ut],["__scopeId","data-v-c7599d50"]]),ht=l.defineComponent({name:"HeatmapLayer",props:{options:{type:Object,default:()=>({})}},setup(n){const e=l.ref(),t=l.inject(A,l.ref()),s=l.inject(T,l.ref());return l.watch([t,()=>n.options],([r,o],[a,u])=>{var h;const i=!E(o,u)||t.value!==a;if(t.value&&s.value&&i){const d=structuredClone(o);if(d.data&&!(d.data instanceof s.value.MVCArray)){const c=s.value.LatLng;d.data=(h=d.data)==null?void 0:h.map(p=>p instanceof c||"location"in p&&(p.location instanceof c||p.location===null)?p:"location"in p?{...p,location:new c(p.location)}:new c(p))}e.value?e.value.setOptions(d):e.value=l.markRaw(new s.value.visualization.HeatmapLayer({...d,map:t.value}))}},{immediate:!0}),l.onBeforeUnmount(()=>{e.value&&e.value.setMap(null)}),{heatmapLayer:e}},render:()=>null});exports.Circle=Re;exports.CustomControl=Ze;exports.CustomMarker=dt;exports.GoogleMap=Ee;exports.HeatmapLayer=ht;exports.InfoWindow=ze;exports.Marker=Te;exports.MarkerCluster=at;exports.Polygon=je;exports.Polyline=Ie;exports.Rectangle=Be; |
1437
dist/index.es.js
(function(){"use strict";try{if(typeof document<"u"){var d=document.createElement("style");d.appendChild(document.createTextNode(".mapdiv[data-v-7d660dd5]{width:100%;height:100%}.info-window-wrapper[data-v-45a4606d]{display:none}.mapdiv .info-window-wrapper[data-v-45a4606d]{display:inline-block}.custom-marker-wrapper[data-v-c7599d50]{display:none}.mapdiv .custom-marker-wrapper[data-v-c7599d50]{display:inline-block}")),document.head.appendChild(d)}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}})(); | ||
var Oe = Object.defineProperty; | ||
var xe = (o, e, t) => e in o ? Oe(o, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[e] = t; | ||
var V = (o, e, t) => (xe(o, typeof e != "symbol" ? e + "" : e, t), t); | ||
import { defineComponent as k, ref as v, provide as q, watch as b, onMounted as ge, onBeforeUnmount as S, markRaw as M, toRef as L, openBlock as F, createElementBlock as G, createElementVNode as Y, renderSlot as U, normalizeProps as Pe, guardReactiveProps as Se, inject as y, computed as z, withDirectives as Le, vShow as Ie, Comment as ve, mergeProps as ye, createCommentVNode as Ce } from "vue"; | ||
const I = Symbol("map"), E = Symbol("api"), _e = Symbol("marker"), ke = Symbol("markerCluster"), H = Symbol("CustomMarker"), we = Symbol("mapTilesLoaded"), P = [ | ||
var Be = Object.defineProperty; | ||
var qe = (o, e, t) => e in o ? Be(o, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[e] = t; | ||
var te = (o, e, t) => (qe(o, typeof e != "symbol" ? e + "" : e, t), t); | ||
import { defineComponent as M, ref as v, provide as z, watch as O, onMounted as Me, onBeforeUnmount as j, markRaw as E, toRef as B, openBlock as J, createElementBlock as Y, createElementVNode as ie, renderSlot as X, normalizeProps as Re, guardReactiveProps as Ze, inject as _, computed as K, withDirectives as Ne, vShow as Fe, Comment as be, mergeProps as Oe, createCommentVNode as Pe } from "vue"; | ||
const q = Symbol("map"), R = Symbol("api"), xe = Symbol("marker"), Ee = Symbol("markerCluster"), Q = Symbol("CustomMarker"), Le = Symbol("mapTilesLoaded"), $ = [ | ||
"click", | ||
@@ -19,3 +19,3 @@ "dblclick", | ||
]; | ||
var Ee = function o(e, t) { | ||
var De = function o(e, t) { | ||
if (e === t) | ||
@@ -26,8 +26,8 @@ return !0; | ||
return !1; | ||
var n, s, r; | ||
var s, r, n; | ||
if (Array.isArray(e)) { | ||
if (n = e.length, n != t.length) | ||
if (s = e.length, s != t.length) | ||
return !1; | ||
for (s = n; s-- !== 0; ) | ||
if (!o(e[s], t[s])) | ||
for (r = s; r-- !== 0; ) | ||
if (!o(e[r], t[r])) | ||
return !1; | ||
@@ -42,9 +42,9 @@ return !0; | ||
return e.toString() === t.toString(); | ||
if (r = Object.keys(e), n = r.length, n !== Object.keys(t).length) | ||
if (n = Object.keys(e), s = n.length, s !== Object.keys(t).length) | ||
return !1; | ||
for (s = n; s-- !== 0; ) | ||
if (!Object.prototype.hasOwnProperty.call(t, r[s])) | ||
for (r = s; r-- !== 0; ) | ||
if (!Object.prototype.hasOwnProperty.call(t, n[r])) | ||
return !1; | ||
for (s = n; s-- !== 0; ) { | ||
var a = r[s]; | ||
for (r = s; r-- !== 0; ) { | ||
var a = n[r]; | ||
if (!o(e[a], t[a])) | ||
@@ -57,4 +57,4 @@ return !1; | ||
}; | ||
const ne = "__googleMapsScriptId"; | ||
class O { | ||
const ue = "__googleMapsScriptId"; | ||
class S { | ||
/** | ||
@@ -69,9 +69,9 @@ * Creates an instance of Loader using [[LoaderOptions]]. No defaults are set | ||
*/ | ||
constructor({ apiKey: e, channel: t, client: n, id: s = ne, libraries: r = [], language: a, region: l, version: i, mapIds: p, nonce: u, retries: c = 3, url: h = "https://maps.googleapis.com/maps/api/js" }) { | ||
if (this.CALLBACK = "__googleMapsCallback", this.callbacks = [], this.done = !1, this.loading = !1, this.errors = [], this.version = i, this.apiKey = e, this.channel = t, this.client = n, this.id = s || ne, this.libraries = r, this.language = a, this.region = l, this.mapIds = p, this.nonce = u, this.retries = c, this.url = h, O.instance) { | ||
if (!Ee(this.options, O.instance.options)) | ||
throw new Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(O.instance.options)}`); | ||
return O.instance; | ||
constructor({ apiKey: e, channel: t, client: s, id: r = ue, libraries: n = [], language: a, region: c, version: i, mapIds: d, nonce: u, retries: l = 3, url: h = "https://maps.googleapis.com/maps/api/js" }) { | ||
if (this.CALLBACK = "__googleMapsCallback", this.callbacks = [], this.done = !1, this.loading = !1, this.errors = [], this.version = i, this.apiKey = e, this.channel = t, this.client = s, this.id = r || ue, this.libraries = n, this.language = a, this.region = c, this.mapIds = d, this.nonce = u, this.retries = l, this.url = h, S.instance) { | ||
if (!De(this.options, S.instance.options)) | ||
throw new Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(S.instance.options)}`); | ||
return S.instance; | ||
} | ||
O.instance = this; | ||
S.instance = this; | ||
} | ||
@@ -122,4 +122,4 @@ get options() { | ||
return new Promise((e, t) => { | ||
this.loadCallback((n) => { | ||
n ? t(n.error) : e(window.google); | ||
this.loadCallback((s) => { | ||
s ? t(s.error) : e(window.google); | ||
}); | ||
@@ -183,10 +183,10 @@ }); | ||
} | ||
function $e(o) { | ||
function Ue(o) { | ||
return class extends o.OverlayView { | ||
constructor(n) { | ||
constructor(s) { | ||
super(); | ||
V(this, "element"); | ||
V(this, "opts"); | ||
const { element: s, ...r } = n; | ||
this.element = s, this.opts = r, this.opts.map && this.setMap(this.opts.map); | ||
te(this, "element"); | ||
te(this, "opts"); | ||
const { element: r, ...n } = s; | ||
this.element = r, this.opts = n, this.opts.map && this.setMap(this.opts.map); | ||
} | ||
@@ -199,4 +199,4 @@ getPosition() { | ||
return !1; | ||
const n = this.element; | ||
return n.style.display !== "none" && n.style.visibility !== "hidden" && (n.style.opacity === "" || Number(n.style.opacity) > 0.01); | ||
const s = this.element; | ||
return s.style.display !== "none" && s.style.visibility !== "hidden" && (s.style.opacity === "" || Number(s.style.opacity) > 0.01); | ||
} | ||
@@ -206,4 +206,4 @@ onAdd() { | ||
return; | ||
const n = this.getPanes(); | ||
n && n.overlayMouseTarget.appendChild(this.element); | ||
const s = this.getPanes(); | ||
s && s.overlayMouseTarget.appendChild(this.element); | ||
} | ||
@@ -213,36 +213,36 @@ draw() { | ||
return; | ||
const s = this.getProjection().fromLatLngToDivPixel(this.getPosition()); | ||
if (s) { | ||
const r = this.getProjection().fromLatLngToDivPixel(this.getPosition()); | ||
if (r) { | ||
this.element.style.position = "absolute"; | ||
const r = this.element.offsetHeight, a = this.element.offsetWidth; | ||
let l, i; | ||
const n = this.element.offsetHeight, a = this.element.offsetWidth; | ||
let c, i; | ||
switch (this.opts.anchorPoint) { | ||
case "TOP_CENTER": | ||
l = s.x - a / 2, i = s.y; | ||
c = r.x - a / 2, i = r.y; | ||
break; | ||
case "BOTTOM_CENTER": | ||
l = s.x - a / 2, i = s.y - r; | ||
c = r.x - a / 2, i = r.y - n; | ||
break; | ||
case "LEFT_CENTER": | ||
l = s.x, i = s.y - r / 2; | ||
c = r.x, i = r.y - n / 2; | ||
break; | ||
case "RIGHT_CENTER": | ||
l = s.x - a, i = s.y - r / 2; | ||
c = r.x - a, i = r.y - n / 2; | ||
break; | ||
case "TOP_LEFT": | ||
l = s.x, i = s.y; | ||
c = r.x, i = r.y; | ||
break; | ||
case "TOP_RIGHT": | ||
l = s.x - a, i = s.y; | ||
c = r.x - a, i = r.y; | ||
break; | ||
case "BOTTOM_LEFT": | ||
l = s.x, i = s.y - r; | ||
c = r.x, i = r.y - n; | ||
break; | ||
case "BOTTOM_RIGHT": | ||
l = s.x - a, i = s.y - r; | ||
c = r.x - a, i = r.y - n; | ||
break; | ||
default: | ||
l = s.x - a / 2, i = s.y - r / 2; | ||
c = r.x - a / 2, i = r.y - n / 2; | ||
} | ||
this.element.style.left = l + "px", this.element.style.top = i + "px", this.element.style.transform = `translateX(${this.opts.offsetX || 0}px) translateY(${this.opts.offsetY || 0}px)`, this.opts.zIndex && (this.element.style.zIndex = this.opts.zIndex.toString()); | ||
this.element.style.left = c + "px", this.element.style.top = i + "px", this.element.style.transform = `translateX(${this.opts.offsetX || 0}px) translateY(${this.opts.offsetY || 0}px)`, this.opts.zIndex && (this.element.style.zIndex = this.opts.zIndex.toString()); | ||
} | ||
@@ -253,9 +253,9 @@ } | ||
} | ||
setOptions(n) { | ||
this.opts = n, this.draw(); | ||
setOptions(s) { | ||
this.opts = s, this.draw(); | ||
} | ||
}; | ||
} | ||
let oe; | ||
const re = [ | ||
let de; | ||
const he = [ | ||
"bounds_changed", | ||
@@ -280,3 +280,3 @@ "center_changed", | ||
"zoom_changed" | ||
], je = k({ | ||
], ze = M({ | ||
props: { | ||
@@ -469,29 +469,29 @@ apiPromise: { | ||
}, | ||
emits: re, | ||
emits: he, | ||
setup(o, { emit: e }) { | ||
const t = v(), n = v(!1), s = v(), r = v(), a = v(!1); | ||
q(I, s), q(E, r), q(we, a); | ||
const l = () => { | ||
const c = { ...o }; | ||
Object.keys(c).forEach((m) => { | ||
c[m] === void 0 && delete c[m]; | ||
const t = v(), s = v(!1), r = v(), n = v(), a = v(!1); | ||
z(q, r), z(R, n), z(Le, a); | ||
const c = () => { | ||
const l = { ...o }; | ||
Object.keys(l).forEach((m) => { | ||
l[m] === void 0 && delete l[m]; | ||
}); | ||
const f = (m) => { | ||
const p = (m) => { | ||
var g; | ||
return m ? { position: (g = r.value) == null ? void 0 : g.ControlPosition[m] } : {}; | ||
}, d = { | ||
return m ? { position: (g = n.value) == null ? void 0 : g.ControlPosition[m] } : {}; | ||
}, f = { | ||
scaleControlOptions: o.scaleControlStyle ? { style: o.scaleControlStyle } : {}, | ||
panControlOptions: f(o.panControlPosition), | ||
zoomControlOptions: f(o.zoomControlPosition), | ||
rotateControlOptions: f(o.rotateControlPosition), | ||
streetViewControlOptions: f(o.streetViewControlPosition), | ||
fullscreenControlOptions: f(o.fullscreenControlPosition), | ||
panControlOptions: p(o.panControlPosition), | ||
zoomControlOptions: p(o.zoomControlPosition), | ||
rotateControlOptions: p(o.rotateControlPosition), | ||
streetViewControlOptions: p(o.streetViewControlPosition), | ||
fullscreenControlOptions: p(o.fullscreenControlPosition), | ||
disableDefaultUI: o.disableDefaultUi | ||
}; | ||
return { ...c, ...d }; | ||
}, i = b( | ||
[r, s], | ||
([c, h]) => { | ||
const f = c, d = h; | ||
f && d && (f.event.addListenerOnce(d, "tilesloaded", () => { | ||
return { ...l, ...f }; | ||
}, i = O( | ||
[n, r], | ||
([l, h]) => { | ||
const p = l, f = h; | ||
p && f && (p.event.addListenerOnce(f, "tilesloaded", () => { | ||
a.value = !0; | ||
@@ -501,58 +501,58 @@ }), setTimeout(i, 0)); | ||
{ immediate: !0 } | ||
), p = () => { | ||
), d = () => { | ||
try { | ||
const { apiKey: c, region: h, version: f, language: d, libraries: m } = o; | ||
oe = new O({ apiKey: c, region: h, version: f, language: d, libraries: m }); | ||
} catch (c) { | ||
console.error(c); | ||
const { apiKey: l, region: h, version: p, language: f, libraries: m } = o; | ||
de = new S({ apiKey: l, region: h, version: p, language: f, libraries: m }); | ||
} catch (l) { | ||
console.error(l); | ||
} | ||
}, u = (c) => { | ||
r.value = M(c.maps), s.value = M(new c.maps.Map(t.value, l())); | ||
const h = $e(r.value); | ||
r.value[H] = h, re.forEach((d) => { | ||
}, u = (l) => { | ||
n.value = E(l.maps), r.value = E(new l.maps.Map(t.value, c())); | ||
const h = Ue(n.value); | ||
n.value[Q] = h, he.forEach((f) => { | ||
var m; | ||
(m = s.value) == null || m.addListener(d, (g) => e(d, g)); | ||
}), n.value = !0; | ||
const f = Object.keys(o).filter( | ||
(d) => !["apiPromise", "apiKey", "version", "libraries", "region", "language", "center", "zoom"].includes(d) | ||
).map((d) => L(o, d)); | ||
b( | ||
[() => o.center, () => o.zoom, ...f], | ||
([d, m], [g, C]) => { | ||
var ee, te, se; | ||
const { center: w, zoom: j, ..._ } = l(); | ||
(ee = s.value) == null || ee.setOptions(_), m !== void 0 && m !== C && ((te = s.value) == null || te.setZoom(m)); | ||
const Z = !g || d.lng !== g.lng || d.lat !== g.lat; | ||
d && Z && ((se = s.value) == null || se.panTo(d)); | ||
(m = r.value) == null || m.addListener(f, (g) => e(f, g)); | ||
}), s.value = !0; | ||
const p = Object.keys(o).filter( | ||
(f) => !["apiPromise", "apiKey", "version", "libraries", "region", "language", "center", "zoom"].includes(f) | ||
).map((f) => B(o, f)); | ||
O( | ||
[() => o.center, () => o.zoom, ...p], | ||
([f, m], [g, y]) => { | ||
var G, b, F; | ||
const { center: w, zoom: C, ...T } = c(); | ||
(G = r.value) == null || G.setOptions(T), m !== void 0 && m !== y && ((b = r.value) == null || b.setZoom(m)); | ||
const N = !g || f.lng !== g.lng || f.lat !== g.lat; | ||
f && N && ((F = r.value) == null || F.panTo(f)); | ||
} | ||
); | ||
}; | ||
return ge(() => { | ||
o.apiPromise && o.apiPromise instanceof Promise ? o.apiPromise.then(u) : (p(), oe.load().then(u)); | ||
}), S(() => { | ||
var c; | ||
a.value = !1, s.value && ((c = r.value) == null || c.event.clearInstanceListeners(s.value)); | ||
}), { mapRef: t, ready: n, map: s, api: r, mapTilesLoaded: a }; | ||
return Me(() => { | ||
o.apiPromise && o.apiPromise instanceof Promise ? o.apiPromise.then(u) : (d(), de.load().then(u)); | ||
}), j(() => { | ||
var l; | ||
a.value = !1, r.value && ((l = n.value) == null || l.event.clearInstanceListeners(r.value)); | ||
}), { mapRef: t, ready: s, map: r, api: n, mapTilesLoaded: a }; | ||
} | ||
}); | ||
const K = (o, e) => { | ||
const ee = (o, e) => { | ||
const t = o.__vccOpts || o; | ||
for (const [n, s] of e) | ||
t[n] = s; | ||
for (const [s, r] of e) | ||
t[s] = r; | ||
return t; | ||
}, Te = { | ||
}, Ve = { | ||
ref: "mapRef", | ||
class: "mapdiv" | ||
}; | ||
function qe(o, e, t, n, s, r) { | ||
return F(), G("div", null, [ | ||
Y("div", Te, null, 512), | ||
U(o.$slots, "default", Pe(Se({ ready: o.ready, map: o.map, api: o.api, mapTilesLoaded: o.mapTilesLoaded })), void 0, !0) | ||
function Ge(o, e, t, s, r, n) { | ||
return J(), Y("div", null, [ | ||
ie("div", Ve, null, 512), | ||
X(o.$slots, "default", Re(Ze({ ready: o.ready, map: o.map, api: o.api, mapTilesLoaded: o.mapTilesLoaded })), void 0, !0) | ||
]); | ||
} | ||
const vt = /* @__PURE__ */ K(je, [["render", qe], ["__scopeId", "data-v-7d660dd5"]]); | ||
function Re(o) { | ||
const Ot = /* @__PURE__ */ ee(ze, [["render", Ge], ["__scopeId", "data-v-7d660dd5"]]); | ||
function He(o) { | ||
return o && o.__esModule && Object.prototype.hasOwnProperty.call(o, "default") ? o.default : o; | ||
} | ||
var Ae = function o(e, t) { | ||
var We = function o(e, t) { | ||
if (e === t) | ||
@@ -563,8 +563,8 @@ return !0; | ||
return !1; | ||
var n, s, r; | ||
var s, r, n; | ||
if (Array.isArray(e)) { | ||
if (n = e.length, n != t.length) | ||
if (s = e.length, s != t.length) | ||
return !1; | ||
for (s = n; s-- !== 0; ) | ||
if (!o(e[s], t[s])) | ||
for (r = s; r-- !== 0; ) | ||
if (!o(e[r], t[r])) | ||
return !1; | ||
@@ -579,9 +579,9 @@ return !0; | ||
return e.toString() === t.toString(); | ||
if (r = Object.keys(e), n = r.length, n !== Object.keys(t).length) | ||
if (n = Object.keys(e), s = n.length, s !== Object.keys(t).length) | ||
return !1; | ||
for (s = n; s-- !== 0; ) | ||
if (!Object.prototype.hasOwnProperty.call(t, r[s])) | ||
for (r = s; r-- !== 0; ) | ||
if (!Object.prototype.hasOwnProperty.call(t, n[r])) | ||
return !1; | ||
for (s = n; s-- !== 0; ) { | ||
var a = r[s]; | ||
for (r = s; r-- !== 0; ) { | ||
var a = n[r]; | ||
if (!o(e[a], t[a])) | ||
@@ -594,23 +594,23 @@ return !1; | ||
}; | ||
const A = /* @__PURE__ */ Re(Ae), Ze = (o) => o === "Marker", Be = (o) => o === H, $ = (o, e, t, n) => { | ||
const s = v(), r = y(I, v()), a = y(E, v()), l = y(ke, v()), i = z( | ||
() => !!(l.value && a.value && (s.value instanceof a.value.Marker || s.value instanceof a.value[H])) | ||
const A = /* @__PURE__ */ He(We), Ke = (o) => o === "Marker", Je = (o) => o === Q, Z = (o, e, t, s) => { | ||
const r = v(), n = _(q, v()), a = _(R, v()), c = _(Ee, v()), i = K( | ||
() => !!(c.value && a.value && (r.value instanceof a.value.Marker || r.value instanceof a.value[Q])) | ||
); | ||
return b( | ||
[r, t], | ||
(p, [u, c]) => { | ||
var f, d, m; | ||
const h = !A(t.value, c) || r.value !== u; | ||
!r.value || !a.value || !h || (s.value ? (s.value.setOptions(t.value), i.value && ((f = l.value) == null || f.removeMarker(s.value), (d = l.value) == null || d.addMarker(s.value))) : (Ze(o) ? s.value = M( | ||
return O( | ||
[n, t], | ||
(d, [u, l]) => { | ||
var p, f, m; | ||
const h = !A(t.value, l) || n.value !== u; | ||
!n.value || !a.value || !h || (r.value ? (r.value.setOptions(t.value), i.value && ((p = c.value) == null || p.removeMarker(r.value), (f = c.value) == null || f.addMarker(r.value))) : (Ke(o) ? r.value = E( | ||
new a.value[o](t.value) | ||
) : Be(o) ? s.value = M( | ||
) : Je(o) ? r.value = E( | ||
new a.value[o](t.value) | ||
) : s.value = M( | ||
) : r.value = E( | ||
new a.value[o]({ | ||
...t.value, | ||
map: r.value | ||
map: n.value | ||
}) | ||
), i.value ? (m = l.value) == null || m.addMarker(s.value) : s.value.setMap(r.value), e.forEach((g) => { | ||
var C; | ||
(C = s.value) == null || C.addListener(g, (w) => n(g, w)); | ||
), i.value ? (m = c.value) == null || m.addMarker(r.value) : r.value.setMap(n.value), e.forEach((g) => { | ||
var y; | ||
(y = r.value) == null || y.addListener(g, (w) => s(g, w)); | ||
}))); | ||
@@ -621,7 +621,7 @@ }, | ||
} | ||
), S(() => { | ||
var p, u; | ||
s.value && ((p = a.value) == null || p.event.clearInstanceListeners(s.value), i.value ? (u = l.value) == null || u.removeMarker(s.value) : s.value.setMap(null)); | ||
}), s; | ||
}, ie = [ | ||
), j(() => { | ||
var d, u; | ||
r.value && ((d = a.value) == null || d.event.clearInstanceListeners(r.value), i.value ? (u = c.value) == null || u.removeMarker(r.value) : r.value.setMap(null)); | ||
}), r; | ||
}, pe = [ | ||
"animation_changed", | ||
@@ -650,3 +650,3 @@ "click", | ||
"visible_changed" | ||
], yt = k({ | ||
], Pt = M({ | ||
name: "Marker", | ||
@@ -659,11 +659,11 @@ props: { | ||
}, | ||
emits: ie, | ||
setup(o, { emit: e, expose: t, slots: n }) { | ||
const s = L(o, "options"), r = $("Marker", ie, s, e); | ||
return q(_e, r), t({ marker: r }), () => { | ||
emits: pe, | ||
setup(o, { emit: e, expose: t, slots: s }) { | ||
const r = B(o, "options"), n = Z("Marker", pe, r, e); | ||
return z(xe, n), t({ marker: n }), () => { | ||
var a; | ||
return (a = n.default) == null ? void 0 : a.call(n); | ||
return (a = s.default) == null ? void 0 : a.call(s); | ||
}; | ||
} | ||
}), Ct = k({ | ||
}), xt = M({ | ||
name: "Polyline", | ||
@@ -676,9 +676,9 @@ props: { | ||
}, | ||
emits: P, | ||
emits: $, | ||
setup(o, { emit: e }) { | ||
const t = L(o, "options"); | ||
return { polyline: $("Polyline", P, t, e) }; | ||
const t = B(o, "options"); | ||
return { polyline: Z("Polyline", $, t, e) }; | ||
}, | ||
render: () => null | ||
}), _t = k({ | ||
}), Et = M({ | ||
name: "Polygon", | ||
@@ -691,9 +691,9 @@ props: { | ||
}, | ||
emits: P, | ||
emits: $, | ||
setup(o, { emit: e }) { | ||
const t = L(o, "options"); | ||
return { polygon: $("Polygon", P, t, e) }; | ||
const t = B(o, "options"); | ||
return { polygon: Z("Polygon", $, t, e) }; | ||
}, | ||
render: () => null | ||
}), ae = P.concat(["bounds_changed"]), kt = k({ | ||
}), fe = $.concat(["bounds_changed"]), Lt = M({ | ||
name: "Rectangle", | ||
@@ -706,9 +706,9 @@ props: { | ||
}, | ||
emits: ae, | ||
emits: fe, | ||
setup(o, { emit: e }) { | ||
const t = L(o, "options"); | ||
return { rectangle: $("Rectangle", ae, t, e) }; | ||
const t = B(o, "options"); | ||
return { rectangle: Z("Rectangle", fe, t, e) }; | ||
}, | ||
render: () => null | ||
}), le = P.concat(["center_changed", "radius_changed"]), wt = k({ | ||
}), me = $.concat(["center_changed", "radius_changed"]), St = M({ | ||
name: "Circle", | ||
@@ -721,9 +721,9 @@ props: { | ||
}, | ||
emits: le, | ||
emits: me, | ||
setup(o, { emit: e }) { | ||
const t = L(o, "options"); | ||
return { circle: $("Circle", le, t, e) }; | ||
const t = B(o, "options"); | ||
return { circle: Z("Circle", me, t, e) }; | ||
}, | ||
render: () => null | ||
}), Ne = k({ | ||
}), Ye = M({ | ||
props: { | ||
@@ -741,28 +741,28 @@ position: { | ||
setup(o, { emit: e }) { | ||
const t = v(null), n = y(I, v()), s = y(E, v()), r = y(we, v(!1)), a = v(!1), l = b( | ||
[r, s, t], | ||
([u, c, h]) => { | ||
c && u && h && (i(o.position), a.value = !0, e("content:loaded"), setTimeout(l, 0)); | ||
const t = v(null), s = _(q, v()), r = _(R, v()), n = _(Le, v(!1)), a = v(!1), c = O( | ||
[n, r, t], | ||
([u, l, h]) => { | ||
l && u && h && (i(o.position), a.value = !0, e("content:loaded"), setTimeout(c, 0)); | ||
}, | ||
{ immediate: !0 } | ||
), i = (u) => { | ||
if (n.value && s.value && t.value) { | ||
const c = s.value.ControlPosition[u]; | ||
n.value.controls[c].push(t.value); | ||
if (s.value && r.value && t.value) { | ||
const l = r.value.ControlPosition[u]; | ||
s.value.controls[l].push(t.value); | ||
} | ||
}, p = (u) => { | ||
if (n.value && s.value) { | ||
let c = null; | ||
const h = s.value.ControlPosition[u]; | ||
n.value.controls[h].forEach((f, d) => { | ||
f === t.value && (c = d); | ||
}), c !== null && n.value.controls[h].removeAt(c); | ||
}, d = (u) => { | ||
if (s.value && r.value) { | ||
let l = null; | ||
const h = r.value.ControlPosition[u]; | ||
s.value.controls[h].forEach((p, f) => { | ||
p === t.value && (l = f); | ||
}), l !== null && s.value.controls[h].removeAt(l); | ||
} | ||
}; | ||
return S(() => p(o.position)), b( | ||
return j(() => d(o.position)), O( | ||
() => o.position, | ||
(u, c) => { | ||
p(c), i(u); | ||
(u, l) => { | ||
d(l), i(u); | ||
} | ||
), b( | ||
), O( | ||
() => o.index, | ||
@@ -774,11 +774,11 @@ (u) => { | ||
} | ||
}), ze = { ref: "controlRef" }; | ||
function De(o, e, t, n, s, r) { | ||
return Le((F(), G("div", ze, [ | ||
U(o.$slots, "default") | ||
}), Xe = { ref: "controlRef" }; | ||
function Qe(o, e, t, s, r, n) { | ||
return Ne((J(), Y("div", Xe, [ | ||
X(o.$slots, "default") | ||
], 512)), [ | ||
[Ie, o.showContent] | ||
[Fe, o.showContent] | ||
]); | ||
} | ||
const bt = /* @__PURE__ */ K(Ne, [["render", De]]), ce = ["closeclick", "content_changed", "domready", "position_changed", "visible", "zindex_changed"], Fe = k({ | ||
const At = /* @__PURE__ */ ee(Ye, [["render", Qe]]), ge = ["closeclick", "content_changed", "domready", "position_changed", "visible", "zindex_changed"], et = M({ | ||
inheritAttrs: !1, | ||
@@ -791,34 +791,34 @@ props: { | ||
}, | ||
emits: ce, | ||
setup(o, { slots: e, emit: t, expose: n }) { | ||
const s = v(), r = v(), a = y(I, v()), l = y(E, v()), i = y(_e, v()); | ||
let p; | ||
const u = z(() => { | ||
emits: ge, | ||
setup(o, { slots: e, emit: t, expose: s }) { | ||
const r = v(), n = v(), a = _(q, v()), c = _(R, v()), i = _(xe, v()); | ||
let d; | ||
const u = K(() => { | ||
var p; | ||
return (p = e.default) == null ? void 0 : p.call(e).some((f) => f.type !== be); | ||
}), l = (p) => { | ||
var f; | ||
return (f = e.default) == null ? void 0 : f.call(e).some((d) => d.type !== ve); | ||
}), c = (f) => { | ||
var d; | ||
return (d = s.value) == null ? void 0 : d.open({ map: a.value, anchor: i.value, ...f }); | ||
return (f = r.value) == null ? void 0 : f.open({ map: a.value, anchor: i.value, ...p }); | ||
}, h = () => { | ||
var f; | ||
return (f = s.value) == null ? void 0 : f.close(); | ||
var p; | ||
return (p = r.value) == null ? void 0 : p.close(); | ||
}; | ||
return ge(() => { | ||
b( | ||
return Me(() => { | ||
O( | ||
[a, () => o.options], | ||
([f, d], [m, g]) => { | ||
const C = !A(d, g) || a.value !== m; | ||
a.value && l.value && C && (s.value ? (s.value.setOptions({ | ||
...d, | ||
content: u.value ? r.value : d.content | ||
}), i.value || c()) : (s.value = M( | ||
new l.value.InfoWindow({ | ||
...d, | ||
content: u.value ? r.value : d.content | ||
([p, f], [m, g]) => { | ||
const y = !A(f, g) || a.value !== m; | ||
a.value && c.value && y && (r.value ? (r.value.setOptions({ | ||
...f, | ||
content: u.value ? n.value : f.content | ||
}), i.value || l()) : (r.value = E( | ||
new c.value.InfoWindow({ | ||
...f, | ||
content: u.value ? n.value : f.content | ||
}) | ||
), i.value ? p = i.value.addListener("click", () => { | ||
c(); | ||
}) : c(), ce.forEach((w) => { | ||
var j; | ||
(j = s.value) == null || j.addListener(w, (_) => t(w, _)); | ||
), i.value ? d = i.value.addListener("click", () => { | ||
l(); | ||
}) : l(), ge.forEach((w) => { | ||
var C; | ||
(C = r.value) == null || C.addListener(w, (T) => t(w, T)); | ||
}))); | ||
@@ -830,104 +830,170 @@ }, | ||
); | ||
}), S(() => { | ||
var f; | ||
p && p.remove(), s.value && ((f = l.value) == null || f.event.clearInstanceListeners(s.value), h()); | ||
}), n({ infoWindow: s, open: c, close: h }), { infoWindow: s, infoWindowRef: r, hasSlotContent: u, open: c, close: h }; | ||
}), j(() => { | ||
var p; | ||
d && d.remove(), r.value && ((p = c.value) == null || p.event.clearInstanceListeners(r.value), h()); | ||
}), s({ infoWindow: r, open: l, close: h }), { infoWindow: r, infoWindowRef: n, hasSlotContent: u, open: l, close: h }; | ||
} | ||
}); | ||
const Ge = { | ||
const tt = { | ||
key: 0, | ||
class: "info-window-wrapper" | ||
}; | ||
function Ue(o, e, t, n, s, r) { | ||
return o.hasSlotContent ? (F(), G("div", Ge, [ | ||
Y("div", ye({ ref: "infoWindowRef" }, o.$attrs), [ | ||
U(o.$slots, "default", {}, void 0, !0) | ||
function st(o, e, t, s, r, n) { | ||
return o.hasSlotContent ? (J(), Y("div", tt, [ | ||
ie("div", Oe({ ref: "infoWindowRef" }, o.$attrs), [ | ||
X(o.$slots, "default", {}, void 0, !0) | ||
], 16) | ||
])) : Ce("", !0); | ||
])) : Pe("", !0); | ||
} | ||
const Mt = /* @__PURE__ */ K(Fe, [["render", Ue], ["__scopeId", "data-v-45a4606d"]]); | ||
function J(o, e, t, n, s, r) { | ||
if (s - n <= t) | ||
return; | ||
const a = n + s >> 1; | ||
be(o, e, a, n, s, r % 2), J(o, e, t, n, a - 1, r + 1), J(o, e, t, a + 1, s, r + 1); | ||
} | ||
function be(o, e, t, n, s, r) { | ||
for (; s > n; ) { | ||
if (s - n > 600) { | ||
const p = s - n + 1, u = t - n + 1, c = Math.log(p), h = 0.5 * Math.exp(2 * c / 3), f = 0.5 * Math.sqrt(c * h * (p - h) / p) * (u - p / 2 < 0 ? -1 : 1), d = Math.max(n, Math.floor(t - u * h / p + f)), m = Math.min(s, Math.floor(t + (p - u) * h / p + f)); | ||
be(o, e, t, d, m, r); | ||
const Tt = /* @__PURE__ */ ee(et, [["render", st], ["__scopeId", "data-v-45a4606d"]]), ve = [ | ||
Int8Array, | ||
Uint8Array, | ||
Uint8ClampedArray, | ||
Int16Array, | ||
Uint16Array, | ||
Int32Array, | ||
Uint32Array, | ||
Float32Array, | ||
Float64Array | ||
], se = 1, D = 8; | ||
class ae { | ||
/** | ||
* Creates an index from raw `ArrayBuffer` data. | ||
* @param {ArrayBuffer} data | ||
*/ | ||
static from(e) { | ||
if (!(e instanceof ArrayBuffer)) | ||
throw new Error("Data must be an instance of ArrayBuffer."); | ||
const [t, s] = new Uint8Array(e, 0, 2); | ||
if (t !== 219) | ||
throw new Error("Data does not appear to be in a KDBush format."); | ||
const r = s >> 4; | ||
if (r !== se) | ||
throw new Error(`Got v${r} data when expected v${se}.`); | ||
const n = ve[s & 15]; | ||
if (!n) | ||
throw new Error("Unrecognized array type."); | ||
const [a] = new Uint16Array(e, 2, 1), [c] = new Uint32Array(e, 4, 1); | ||
return new ae(c, a, n, e); | ||
} | ||
/** | ||
* Creates an index that will hold a given number of items. | ||
* @param {number} numItems | ||
* @param {number} [nodeSize=64] Size of the KD-tree node (64 by default). | ||
* @param {TypedArrayConstructor} [ArrayType=Float64Array] The array type used for coordinates storage (`Float64Array` by default). | ||
* @param {ArrayBuffer} [data] (For internal use only) | ||
*/ | ||
constructor(e, t = 64, s = Float64Array, r) { | ||
if (isNaN(e) || e < 0) | ||
throw new Error(`Unpexpected numItems value: ${e}.`); | ||
this.numItems = +e, this.nodeSize = Math.min(Math.max(+t, 2), 65535), this.ArrayType = s, this.IndexArrayType = e < 65536 ? Uint16Array : Uint32Array; | ||
const n = ve.indexOf(this.ArrayType), a = e * 2 * this.ArrayType.BYTES_PER_ELEMENT, c = e * this.IndexArrayType.BYTES_PER_ELEMENT, i = (8 - c % 8) % 8; | ||
if (n < 0) | ||
throw new Error(`Unexpected typed array class: ${s}.`); | ||
r && r instanceof ArrayBuffer ? (this.data = r, this.ids = new this.IndexArrayType(this.data, D, e), this.coords = new this.ArrayType(this.data, D + c + i, e * 2), this._pos = e * 2, this._finished = !0) : (this.data = new ArrayBuffer(D + a + c + i), this.ids = new this.IndexArrayType(this.data, D, e), this.coords = new this.ArrayType(this.data, D + c + i, e * 2), this._pos = 0, this._finished = !1, new Uint8Array(this.data, 0, 2).set([219, (se << 4) + n]), new Uint16Array(this.data, 2, 1)[0] = t, new Uint32Array(this.data, 4, 1)[0] = e); | ||
} | ||
/** | ||
* Add a point to the index. | ||
* @param {number} x | ||
* @param {number} y | ||
* @returns {number} An incremental index associated with the added item (starting from `0`). | ||
*/ | ||
add(e, t) { | ||
const s = this._pos >> 1; | ||
return this.ids[s] = s, this.coords[this._pos++] = e, this.coords[this._pos++] = t, s; | ||
} | ||
/** | ||
* Perform indexing of the added points. | ||
*/ | ||
finish() { | ||
const e = this._pos >> 1; | ||
if (e !== this.numItems) | ||
throw new Error(`Added ${e} items when expected ${this.numItems}.`); | ||
return ne(this.ids, this.coords, this.nodeSize, 0, this.numItems - 1, 0), this._finished = !0, this; | ||
} | ||
/** | ||
* Search the index for items within a given bounding box. | ||
* @param {number} minX | ||
* @param {number} minY | ||
* @param {number} maxX | ||
* @param {number} maxY | ||
* @returns {number[]} An array of indices correponding to the found items. | ||
*/ | ||
range(e, t, s, r) { | ||
if (!this._finished) | ||
throw new Error("Data not yet indexed - call index.finish()."); | ||
const { ids: n, coords: a, nodeSize: c } = this, i = [0, n.length - 1, 0], d = []; | ||
for (; i.length; ) { | ||
const u = i.pop() || 0, l = i.pop() || 0, h = i.pop() || 0; | ||
if (l - h <= c) { | ||
for (let g = h; g <= l; g++) { | ||
const y = a[2 * g], w = a[2 * g + 1]; | ||
y >= e && y <= s && w >= t && w <= r && d.push(n[g]); | ||
} | ||
continue; | ||
} | ||
const p = h + l >> 1, f = a[2 * p], m = a[2 * p + 1]; | ||
f >= e && f <= s && m >= t && m <= r && d.push(n[p]), (u === 0 ? e <= f : t <= m) && (i.push(h), i.push(p - 1), i.push(1 - u)), (u === 0 ? s >= f : r >= m) && (i.push(p + 1), i.push(l), i.push(1 - u)); | ||
} | ||
const a = e[2 * t + r]; | ||
let l = n, i = s; | ||
for (T(o, e, n, t), e[2 * s + r] > a && T(o, e, n, s); l < i; ) { | ||
for (T(o, e, l, i), l++, i--; e[2 * l + r] < a; ) | ||
l++; | ||
for (; e[2 * i + r] > a; ) | ||
i--; | ||
return d; | ||
} | ||
/** | ||
* Search the index for items within a given radius. | ||
* @param {number} qx | ||
* @param {number} qy | ||
* @param {number} r Query radius. | ||
* @returns {number[]} An array of indices correponding to the found items. | ||
*/ | ||
within(e, t, s) { | ||
if (!this._finished) | ||
throw new Error("Data not yet indexed - call index.finish()."); | ||
const { ids: r, coords: n, nodeSize: a } = this, c = [0, r.length - 1, 0], i = [], d = s * s; | ||
for (; c.length; ) { | ||
const u = c.pop() || 0, l = c.pop() || 0, h = c.pop() || 0; | ||
if (l - h <= a) { | ||
for (let g = h; g <= l; g++) | ||
ye(n[2 * g], n[2 * g + 1], e, t) <= d && i.push(r[g]); | ||
continue; | ||
} | ||
const p = h + l >> 1, f = n[2 * p], m = n[2 * p + 1]; | ||
ye(f, m, e, t) <= d && i.push(r[p]), (u === 0 ? e - s <= f : t - s <= m) && (c.push(h), c.push(p - 1), c.push(1 - u)), (u === 0 ? e + s >= f : t + s >= m) && (c.push(p + 1), c.push(l), c.push(1 - u)); | ||
} | ||
e[2 * n + r] === a ? T(o, e, n, i) : (i++, T(o, e, i, s)), i <= t && (n = i + 1), t <= i && (s = i - 1); | ||
return i; | ||
} | ||
} | ||
function T(o, e, t, n) { | ||
W(o, t, n), W(e, 2 * t, 2 * n), W(e, 2 * t + 1, 2 * n + 1); | ||
function ne(o, e, t, s, r, n) { | ||
if (r - s <= t) | ||
return; | ||
const a = s + r >> 1; | ||
Se(o, e, a, s, r, n), ne(o, e, t, s, a - 1, 1 - n), ne(o, e, t, a + 1, r, 1 - n); | ||
} | ||
function W(o, e, t) { | ||
const n = o[e]; | ||
o[e] = o[t], o[t] = n; | ||
} | ||
function He(o, e, t, n, s, r, a) { | ||
const l = [0, o.length - 1, 0], i = []; | ||
let p, u; | ||
for (; l.length; ) { | ||
const c = l.pop(), h = l.pop(), f = l.pop(); | ||
if (h - f <= a) { | ||
for (let g = f; g <= h; g++) | ||
p = e[2 * g], u = e[2 * g + 1], p >= t && p <= s && u >= n && u <= r && i.push(o[g]); | ||
continue; | ||
function Se(o, e, t, s, r, n) { | ||
for (; r > s; ) { | ||
if (r - s > 600) { | ||
const d = r - s + 1, u = t - s + 1, l = Math.log(d), h = 0.5 * Math.exp(2 * l / 3), p = 0.5 * Math.sqrt(l * h * (d - h) / d) * (u - d / 2 < 0 ? -1 : 1), f = Math.max(s, Math.floor(t - u * h / d + p)), m = Math.min(r, Math.floor(t + (d - u) * h / d + p)); | ||
Se(o, e, t, f, m, n); | ||
} | ||
const d = Math.floor((f + h) / 2); | ||
p = e[2 * d], u = e[2 * d + 1], p >= t && p <= s && u >= n && u <= r && i.push(o[d]); | ||
const m = (c + 1) % 2; | ||
(c === 0 ? t <= p : n <= u) && (l.push(f), l.push(d - 1), l.push(m)), (c === 0 ? s >= p : r >= u) && (l.push(d + 1), l.push(h), l.push(m)); | ||
} | ||
return i; | ||
} | ||
function Ke(o, e, t, n, s, r) { | ||
const a = [0, o.length - 1, 0], l = [], i = s * s; | ||
for (; a.length; ) { | ||
const p = a.pop(), u = a.pop(), c = a.pop(); | ||
if (u - c <= r) { | ||
for (let g = c; g <= u; g++) | ||
ue(e[2 * g], e[2 * g + 1], t, n) <= i && l.push(o[g]); | ||
continue; | ||
const a = e[2 * t + n]; | ||
let c = s, i = r; | ||
for (U(o, e, s, t), e[2 * r + n] > a && U(o, e, s, r); c < i; ) { | ||
for (U(o, e, c, i), c++, i--; e[2 * c + n] < a; ) | ||
c++; | ||
for (; e[2 * i + n] > a; ) | ||
i--; | ||
} | ||
const h = Math.floor((c + u) / 2), f = e[2 * h], d = e[2 * h + 1]; | ||
ue(f, d, t, n) <= i && l.push(o[h]); | ||
const m = (p + 1) % 2; | ||
(p === 0 ? t - s <= f : n - s <= d) && (a.push(c), a.push(h - 1), a.push(m)), (p === 0 ? t + s >= f : n + s >= d) && (a.push(h + 1), a.push(u), a.push(m)); | ||
e[2 * s + n] === a ? U(o, e, s, i) : (i++, U(o, e, i, r)), i <= t && (s = i + 1), t <= i && (r = i - 1); | ||
} | ||
return l; | ||
} | ||
function ue(o, e, t, n) { | ||
const s = o - t, r = e - n; | ||
return s * s + r * r; | ||
function U(o, e, t, s) { | ||
re(o, t, s), re(e, 2 * t, 2 * s), re(e, 2 * t + 1, 2 * s + 1); | ||
} | ||
const Ve = (o) => o[0], We = (o) => o[1]; | ||
class pe { | ||
constructor(e, t = Ve, n = We, s = 64, r = Float64Array) { | ||
this.nodeSize = s, this.points = e; | ||
const a = e.length < 65536 ? Uint16Array : Uint32Array, l = this.ids = new a(e.length), i = this.coords = new r(e.length * 2); | ||
for (let p = 0; p < e.length; p++) | ||
l[p] = p, i[2 * p] = t(e[p]), i[2 * p + 1] = n(e[p]); | ||
J(l, i, s, 0, l.length - 1, 0); | ||
} | ||
range(e, t, n, s) { | ||
return He(this.ids, this.coords, e, t, n, s, this.nodeSize); | ||
} | ||
within(e, t, n) { | ||
return Ke(this.ids, this.coords, e, t, n, this.nodeSize); | ||
} | ||
function re(o, e, t) { | ||
const s = o[e]; | ||
o[e] = o[t], o[t] = s; | ||
} | ||
const Je = { | ||
function ye(o, e, t, s) { | ||
const r = o - t, n = e - s; | ||
return r * r + n * n; | ||
} | ||
const rt = { | ||
minZoom: 0, | ||
@@ -955,87 +1021,105 @@ // min zoom to generate clusters on | ||
// props => ({sum: props.my_value}) | ||
}, D = Math.fround || ((o) => (e) => (o[0] = +e, o[0]))(new Float32Array(1)); | ||
class Xe { | ||
}, we = Math.fround || ((o) => (e) => (o[0] = +e, o[0]))(new Float32Array(1)), L = 2, x = 3, oe = 4, P = 5, Ae = 6; | ||
class Te { | ||
constructor(e) { | ||
this.options = R(Object.create(Je), e), this.trees = new Array(this.options.maxZoom + 1); | ||
this.options = Object.assign(Object.create(rt), e), this.trees = new Array(this.options.maxZoom + 1), this.stride = this.options.reduce ? 7 : 6, this.clusterProps = []; | ||
} | ||
load(e) { | ||
const { log: t, minZoom: n, maxZoom: s, nodeSize: r } = this.options; | ||
const { log: t, minZoom: s, maxZoom: r } = this.options; | ||
t && console.time("total time"); | ||
const a = `prepare ${e.length} points`; | ||
t && console.time(a), this.points = e; | ||
let l = []; | ||
for (let i = 0; i < e.length; i++) | ||
e[i].geometry && l.push(Qe(e[i], i)); | ||
this.trees[s + 1] = new pe(l, he, fe, r, Float32Array), t && console.timeEnd(a); | ||
for (let i = s; i >= n; i--) { | ||
const p = +Date.now(); | ||
l = this._cluster(l, i), this.trees[i] = new pe(l, he, fe, r, Float32Array), t && console.log("z%d: %d clusters in %dms", i, l.length, +Date.now() - p); | ||
const n = `prepare ${e.length} points`; | ||
t && console.time(n), this.points = e; | ||
const a = []; | ||
for (let i = 0; i < e.length; i++) { | ||
const d = e[i]; | ||
if (!d.geometry) | ||
continue; | ||
const [u, l] = d.geometry.coordinates, h = we(H(u)), p = we(W(l)); | ||
a.push( | ||
h, | ||
p, | ||
// projected point coordinates | ||
1 / 0, | ||
// the last zoom the point was processed at | ||
i, | ||
// index of the source feature in the original input array | ||
-1, | ||
// parent cluster id | ||
1 | ||
// number of points in a cluster | ||
), this.options.reduce && a.push(0); | ||
} | ||
let c = this.trees[r + 1] = this._createTree(a); | ||
t && console.timeEnd(n); | ||
for (let i = r; i >= s; i--) { | ||
const d = +Date.now(); | ||
c = this.trees[i] = this._createTree(this._cluster(c, i)), t && console.log("z%d: %d clusters in %dms", i, c.numItems, +Date.now() - d); | ||
} | ||
return t && console.timeEnd("total time"), this; | ||
} | ||
getClusters(e, t) { | ||
let n = ((e[0] + 180) % 360 + 360) % 360 - 180; | ||
const s = Math.max(-90, Math.min(90, e[1])); | ||
let r = e[2] === 180 ? 180 : ((e[2] + 180) % 360 + 360) % 360 - 180; | ||
let s = ((e[0] + 180) % 360 + 360) % 360 - 180; | ||
const r = Math.max(-90, Math.min(90, e[1])); | ||
let n = e[2] === 180 ? 180 : ((e[2] + 180) % 360 + 360) % 360 - 180; | ||
const a = Math.max(-90, Math.min(90, e[3])); | ||
if (e[2] - e[0] >= 360) | ||
n = -180, r = 180; | ||
else if (n > r) { | ||
const u = this.getClusters([n, s, 180, a], t), c = this.getClusters([-180, s, r, a], t); | ||
return u.concat(c); | ||
s = -180, n = 180; | ||
else if (s > n) { | ||
const l = this.getClusters([s, r, 180, a], t), h = this.getClusters([-180, r, n, a], t); | ||
return l.concat(h); | ||
} | ||
const l = this.trees[this._limitZoom(t)], i = l.range(B(n), N(a), B(r), N(s)), p = []; | ||
for (const u of i) { | ||
const c = l.points[u]; | ||
p.push(c.numPoints ? de(c) : this.points[c.index]); | ||
const c = this.trees[this._limitZoom(t)], i = c.range(H(s), W(a), H(n), W(r)), d = c.data, u = []; | ||
for (const l of i) { | ||
const h = this.stride * l; | ||
u.push(d[h + P] > 1 ? ke(d, h, this.clusterProps) : this.points[d[h + x]]); | ||
} | ||
return p; | ||
return u; | ||
} | ||
getChildren(e) { | ||
const t = this._getOriginId(e), n = this._getOriginZoom(e), s = "No cluster with the specified id.", r = this.trees[n]; | ||
if (!r) | ||
throw new Error(s); | ||
const a = r.points[t]; | ||
if (!a) | ||
throw new Error(s); | ||
const l = this.options.radius / (this.options.extent * Math.pow(2, n - 1)), i = r.within(a.x, a.y, l), p = []; | ||
for (const u of i) { | ||
const c = r.points[u]; | ||
c.parentId === e && p.push(c.numPoints ? de(c) : this.points[c.index]); | ||
const t = this._getOriginId(e), s = this._getOriginZoom(e), r = "No cluster with the specified id.", n = this.trees[s]; | ||
if (!n) | ||
throw new Error(r); | ||
const a = n.data; | ||
if (t * this.stride >= a.length) | ||
throw new Error(r); | ||
const c = this.options.radius / (this.options.extent * Math.pow(2, s - 1)), i = a[t * this.stride], d = a[t * this.stride + 1], u = n.within(i, d, c), l = []; | ||
for (const h of u) { | ||
const p = h * this.stride; | ||
a[p + oe] === e && l.push(a[p + P] > 1 ? ke(a, p, this.clusterProps) : this.points[a[p + x]]); | ||
} | ||
if (p.length === 0) | ||
throw new Error(s); | ||
return p; | ||
if (l.length === 0) | ||
throw new Error(r); | ||
return l; | ||
} | ||
getLeaves(e, t, n) { | ||
t = t || 10, n = n || 0; | ||
const s = []; | ||
return this._appendLeaves(s, e, t, n, 0), s; | ||
getLeaves(e, t, s) { | ||
t = t || 10, s = s || 0; | ||
const r = []; | ||
return this._appendLeaves(r, e, t, s, 0), r; | ||
} | ||
getTile(e, t, n) { | ||
const s = this.trees[this._limitZoom(e)], r = Math.pow(2, e), { extent: a, radius: l } = this.options, i = l / a, p = (n - i) / r, u = (n + 1 + i) / r, c = { | ||
getTile(e, t, s) { | ||
const r = this.trees[this._limitZoom(e)], n = Math.pow(2, e), { extent: a, radius: c } = this.options, i = c / a, d = (s - i) / n, u = (s + 1 + i) / n, l = { | ||
features: [] | ||
}; | ||
return this._addTileFeatures( | ||
s.range((t - i) / r, p, (t + 1 + i) / r, u), | ||
s.points, | ||
r.range((t - i) / n, d, (t + 1 + i) / n, u), | ||
r.data, | ||
t, | ||
s, | ||
n, | ||
r, | ||
c | ||
l | ||
), t === 0 && this._addTileFeatures( | ||
s.range(1 - i / r, p, 1, u), | ||
s.points, | ||
r, | ||
r.range(1 - i / n, d, 1, u), | ||
r.data, | ||
n, | ||
r, | ||
c | ||
), t === r - 1 && this._addTileFeatures( | ||
s.range(0, p, i / r, u), | ||
s.points, | ||
s, | ||
n, | ||
l | ||
), t === n - 1 && this._addTileFeatures( | ||
r.range(0, d, i / n, u), | ||
r.data, | ||
-1, | ||
s, | ||
n, | ||
r, | ||
c | ||
), c.features.length ? c : null; | ||
l | ||
), l.features.length ? l : null; | ||
} | ||
@@ -1045,38 +1129,46 @@ getClusterExpansionZoom(e) { | ||
for (; t <= this.options.maxZoom; ) { | ||
const n = this.getChildren(e); | ||
if (t++, n.length !== 1) | ||
const s = this.getChildren(e); | ||
if (t++, s.length !== 1) | ||
break; | ||
e = n[0].properties.cluster_id; | ||
e = s[0].properties.cluster_id; | ||
} | ||
return t; | ||
} | ||
_appendLeaves(e, t, n, s, r) { | ||
_appendLeaves(e, t, s, r, n) { | ||
const a = this.getChildren(t); | ||
for (const l of a) { | ||
const i = l.properties; | ||
if (i && i.cluster ? r + i.point_count <= s ? r += i.point_count : r = this._appendLeaves(e, i.cluster_id, n, s, r) : r < s ? r++ : e.push(l), e.length === n) | ||
for (const c of a) { | ||
const i = c.properties; | ||
if (i && i.cluster ? n + i.point_count <= r ? n += i.point_count : n = this._appendLeaves(e, i.cluster_id, s, r, n) : n < r ? n++ : e.push(c), e.length === s) | ||
break; | ||
} | ||
return r; | ||
return n; | ||
} | ||
_addTileFeatures(e, t, n, s, r, a) { | ||
for (const l of e) { | ||
const i = t[l], p = i.numPoints; | ||
let u, c, h; | ||
if (p) | ||
u = Me(i), c = i.x, h = i.y; | ||
_createTree(e) { | ||
const t = new ae(e.length / this.stride | 0, this.options.nodeSize, Float32Array); | ||
for (let s = 0; s < e.length; s += this.stride) | ||
t.add(e[s], e[s + 1]); | ||
return t.finish(), t.data = e, t; | ||
} | ||
_addTileFeatures(e, t, s, r, n, a) { | ||
for (const c of e) { | ||
const i = c * this.stride, d = t[i + P] > 1; | ||
let u, l, h; | ||
if (d) | ||
u = Ie(t, i, this.clusterProps), l = t[i], h = t[i + 1]; | ||
else { | ||
const m = this.points[i.index]; | ||
u = m.properties, c = B(m.geometry.coordinates[0]), h = N(m.geometry.coordinates[1]); | ||
const m = this.points[t[i + x]]; | ||
u = m.properties; | ||
const [g, y] = m.geometry.coordinates; | ||
l = H(g), h = W(y); | ||
} | ||
const f = { | ||
const p = { | ||
type: 1, | ||
geometry: [[ | ||
Math.round(this.options.extent * (c * r - n)), | ||
Math.round(this.options.extent * (h * r - s)) | ||
Math.round(this.options.extent * (l * n - s)), | ||
Math.round(this.options.extent * (h * n - r)) | ||
]], | ||
tags: u | ||
}; | ||
let d; | ||
p ? d = i.id : this.options.generateId ? d = i.index : this.points[i.index].id && (d = this.points[i.index].id), d !== void 0 && (f.id = d), a.features.push(f); | ||
let f; | ||
d || this.options.generateId ? f = t[i + x] : f = this.points[t[i + x]].id, f !== void 0 && (p.id = f), a.features.push(p); | ||
} | ||
@@ -1088,33 +1180,40 @@ } | ||
_cluster(e, t) { | ||
const n = [], { radius: s, extent: r, reduce: a, minPoints: l } = this.options, i = s / (r * Math.pow(2, t)); | ||
for (let p = 0; p < e.length; p++) { | ||
const u = e[p]; | ||
if (u.zoom <= t) | ||
const { radius: s, extent: r, reduce: n, minPoints: a } = this.options, c = s / (r * Math.pow(2, t)), i = e.data, d = [], u = this.stride; | ||
for (let l = 0; l < i.length; l += u) { | ||
if (i[l + L] <= t) | ||
continue; | ||
u.zoom = t; | ||
const c = this.trees[t + 1], h = c.within(u.x, u.y, i), f = u.numPoints || 1; | ||
let d = f; | ||
for (const m of h) { | ||
const g = c.points[m]; | ||
g.zoom > t && (d += g.numPoints || 1); | ||
i[l + L] = t; | ||
const h = i[l], p = i[l + 1], f = e.within(i[l], i[l + 1], c), m = i[l + P]; | ||
let g = m; | ||
for (const y of f) { | ||
const w = y * u; | ||
i[w + L] > t && (g += i[w + P]); | ||
} | ||
if (d > f && d >= l) { | ||
let m = u.x * f, g = u.y * f, C = a && f > 1 ? this._map(u, !0) : null; | ||
const w = (p << 5) + (t + 1) + this.points.length; | ||
for (const j of h) { | ||
const _ = c.points[j]; | ||
if (_.zoom <= t) | ||
if (g > m && g >= a) { | ||
let y = h * m, w = p * m, C, T = -1; | ||
const N = ((l / u | 0) << 5) + (t + 1) + this.points.length; | ||
for (const G of f) { | ||
const b = G * u; | ||
if (i[b + L] <= t) | ||
continue; | ||
_.zoom = t; | ||
const Z = _.numPoints || 1; | ||
m += _.x * Z, g += _.y * Z, _.parentId = w, a && (C || (C = this._map(u, !0)), a(C, this._map(_))); | ||
i[b + L] = t; | ||
const F = i[b + P]; | ||
y += i[b] * F, w += i[b + 1] * F, i[b + oe] = N, n && (C || (C = this._map(i, l, !0), T = this.clusterProps.length, this.clusterProps.push(C)), n(C, this._map(i, b))); | ||
} | ||
u.parentId = w, n.push(Ye(m / d, g / d, w, d, C)); | ||
} else if (n.push(u), d > 1) | ||
for (const m of h) { | ||
const g = c.points[m]; | ||
g.zoom <= t || (g.zoom = t, n.push(g)); | ||
} | ||
i[l + oe] = N, d.push(y / g, w / g, 1 / 0, N, -1, g), n && d.push(T); | ||
} else { | ||
for (let y = 0; y < u; y++) | ||
d.push(i[l + y]); | ||
if (g > 1) | ||
for (const y of f) { | ||
const w = y * u; | ||
if (!(i[w + L] <= t)) { | ||
i[w + L] = t; | ||
for (let C = 0; C < u; C++) | ||
d.push(i[w + C]); | ||
} | ||
} | ||
} | ||
} | ||
return n; | ||
return d; | ||
} | ||
@@ -1129,83 +1228,45 @@ // get index of the point from which the cluster originated | ||
} | ||
_map(e, t) { | ||
if (e.numPoints) | ||
return t ? R({}, e.properties) : e.properties; | ||
const n = this.points[e.index].properties, s = this.options.map(n); | ||
return t && s === n ? R({}, s) : s; | ||
_map(e, t, s) { | ||
if (e[t + P] > 1) { | ||
const a = this.clusterProps[e[t + Ae]]; | ||
return s ? Object.assign({}, a) : a; | ||
} | ||
const r = this.points[e[t + x]].properties, n = this.options.map(r); | ||
return s && n === r ? Object.assign({}, n) : n; | ||
} | ||
} | ||
function Ye(o, e, t, n, s) { | ||
function ke(o, e, t) { | ||
return { | ||
x: D(o), | ||
// weighted cluster center; round for consistency with Float32Array index | ||
y: D(e), | ||
zoom: 1 / 0, | ||
// the last zoom the cluster was processed at | ||
id: t, | ||
// encodes index of the first child of the cluster and its zoom level | ||
parentId: -1, | ||
// parent cluster id | ||
numPoints: n, | ||
properties: s | ||
}; | ||
} | ||
function Qe(o, e) { | ||
const [t, n] = o.geometry.coordinates; | ||
return { | ||
x: D(B(t)), | ||
// projected point coordinates | ||
y: D(N(n)), | ||
zoom: 1 / 0, | ||
// the last zoom the point was processed at | ||
index: e, | ||
// index of the source feature in the original input array, | ||
parentId: -1 | ||
// parent cluster id | ||
}; | ||
} | ||
function de(o) { | ||
return { | ||
type: "Feature", | ||
id: o.id, | ||
properties: Me(o), | ||
id: o[e + x], | ||
properties: Ie(o, e, t), | ||
geometry: { | ||
type: "Point", | ||
coordinates: [et(o.x), tt(o.y)] | ||
coordinates: [ot(o[e]), nt(o[e + 1])] | ||
} | ||
}; | ||
} | ||
function Me(o) { | ||
const e = o.numPoints, t = e >= 1e4 ? `${Math.round(e / 1e3)}k` : e >= 1e3 ? `${Math.round(e / 100) / 10}k` : e; | ||
return R(R({}, o.properties), { | ||
function Ie(o, e, t) { | ||
const s = o[e + P], r = s >= 1e4 ? `${Math.round(s / 1e3)}k` : s >= 1e3 ? `${Math.round(s / 100) / 10}k` : s, n = o[e + Ae], a = n === -1 ? {} : Object.assign({}, t[n]); | ||
return Object.assign(a, { | ||
cluster: !0, | ||
cluster_id: o.id, | ||
point_count: e, | ||
point_count_abbreviated: t | ||
cluster_id: o[e + x], | ||
point_count: s, | ||
point_count_abbreviated: r | ||
}); | ||
} | ||
function B(o) { | ||
function H(o) { | ||
return o / 360 + 0.5; | ||
} | ||
function N(o) { | ||
function W(o) { | ||
const e = Math.sin(o * Math.PI / 180), t = 0.5 - 0.25 * Math.log((1 + e) / (1 - e)) / Math.PI; | ||
return t < 0 ? 0 : t > 1 ? 1 : t; | ||
} | ||
function et(o) { | ||
function ot(o) { | ||
return (o - 0.5) * 360; | ||
} | ||
function tt(o) { | ||
function nt(o) { | ||
const e = (180 - o * 360) * Math.PI / 180; | ||
return 360 * Math.atan(Math.exp(e)) / Math.PI - 90; | ||
} | ||
function R(o, e) { | ||
for (const t in e) | ||
o[t] = e[t]; | ||
return o; | ||
} | ||
function he(o) { | ||
return o.x; | ||
} | ||
function fe(o) { | ||
return o.y; | ||
} | ||
/*! ***************************************************************************** | ||
@@ -1225,12 +1286,38 @@ Copyright (c) Microsoft Corporation. | ||
***************************************************************************** */ | ||
function st(o, e) { | ||
function le(o, e) { | ||
var t = {}; | ||
for (var n in o) | ||
Object.prototype.hasOwnProperty.call(o, n) && e.indexOf(n) < 0 && (t[n] = o[n]); | ||
for (var s in o) | ||
Object.prototype.hasOwnProperty.call(o, s) && e.indexOf(s) < 0 && (t[s] = o[s]); | ||
if (o != null && typeof Object.getOwnPropertySymbols == "function") | ||
for (var s = 0, n = Object.getOwnPropertySymbols(o); s < n.length; s++) | ||
e.indexOf(n[s]) < 0 && Object.prototype.propertyIsEnumerable.call(o, n[s]) && (t[n[s]] = o[n[s]]); | ||
for (var r = 0, s = Object.getOwnPropertySymbols(o); r < s.length; r++) | ||
e.indexOf(s[r]) < 0 && Object.prototype.propertyIsEnumerable.call(o, s[r]) && (t[s[r]] = o[s[r]]); | ||
return t; | ||
} | ||
class X { | ||
class k { | ||
static isAdvancedMarkerAvailable(e) { | ||
return google.maps.marker && e.getMapCapabilities().isAdvancedMarkersAvailable === !0; | ||
} | ||
static isAdvancedMarker(e) { | ||
return google.maps.marker && e instanceof google.maps.marker.AdvancedMarkerElement; | ||
} | ||
static setMap(e, t) { | ||
this.isAdvancedMarker(e) ? e.map = t : e.setMap(t); | ||
} | ||
static getPosition(e) { | ||
if (this.isAdvancedMarker(e)) { | ||
if (e.position) { | ||
if (e.position instanceof google.maps.LatLng) | ||
return e.position; | ||
if (e.position.lat && e.position.lng) | ||
return new google.maps.LatLng(e.position.lat, e.position.lng); | ||
} | ||
return new google.maps.LatLng(null); | ||
} | ||
return e.getPosition(); | ||
} | ||
static getVisible(e) { | ||
return this.isAdvancedMarker(e) ? !0 : e.getVisible(); | ||
} | ||
} | ||
class V { | ||
constructor({ markers: e, position: t }) { | ||
@@ -1240,4 +1327,8 @@ this.markers = e, t && (t instanceof google.maps.LatLng ? this._position = t : this._position = new google.maps.LatLng(t)); | ||
get bounds() { | ||
if (!(this.markers.length === 0 && !this._position)) | ||
return this.markers.reduce((e, t) => e.extend(t.getPosition()), new google.maps.LatLngBounds(this._position, this._position)); | ||
if (this.markers.length === 0 && !this._position) | ||
return; | ||
const e = new google.maps.LatLngBounds(this._position, this._position); | ||
for (const t of this.markers) | ||
e.extend(k.getPosition(t)); | ||
return e; | ||
} | ||
@@ -1251,3 +1342,3 @@ get position() { | ||
get count() { | ||
return this.markers.filter((e) => e.getVisible()).length; | ||
return this.markers.filter((e) => k.getVisible(e)).length; | ||
} | ||
@@ -1264,6 +1355,22 @@ /** | ||
delete() { | ||
this.marker && (this.marker.setMap(null), delete this.marker), this.markers.length = 0; | ||
this.marker && (k.setMap(this.marker, null), this.marker = void 0), this.markers.length = 0; | ||
} | ||
} | ||
class nt { | ||
const it = (o, e, t, s) => { | ||
const r = $e(o.getBounds(), e, s); | ||
return t.filter((n) => r.contains(k.getPosition(n))); | ||
}, $e = (o, e, t) => { | ||
const { northEast: s, southWest: r } = at(o, e), n = lt({ northEast: s, southWest: r }, t); | ||
return ct(n, e); | ||
}, _e = (o, e, t) => { | ||
const s = $e(o, e, t), r = s.getNorthEast(), n = s.getSouthWest(); | ||
return [n.lng(), n.lat(), r.lng(), r.lat()]; | ||
}, at = (o, e) => ({ | ||
northEast: e.fromLatLngToDivPixel(o.getNorthEast()), | ||
southWest: e.fromLatLngToDivPixel(o.getSouthWest()) | ||
}), lt = ({ northEast: o, southWest: e }, t) => (o.x += t, o.y -= t, e.x -= t, e.y += t, { northEast: o, southWest: e }), ct = ({ northEast: o, southWest: e }, t) => { | ||
const s = t.fromDivPixelToLatLng(e), r = t.fromDivPixelToLatLng(o); | ||
return new google.maps.LatLngBounds(s, r); | ||
}; | ||
class je { | ||
constructor({ maxZoom: e = 16 }) { | ||
@@ -1279,3 +1386,3 @@ this.maxZoom = e; | ||
* if (shouldBypassClustering(map)) { | ||
* return this.noop({markers, map}) | ||
* return this.noop({markers}) | ||
* } | ||
@@ -1286,63 +1393,129 @@ * } | ||
noop({ markers: e }) { | ||
return ot(e); | ||
return dt(e); | ||
} | ||
} | ||
const ot = (o) => o.map((t) => new X({ | ||
position: t.getPosition(), | ||
class ut extends je { | ||
constructor(e) { | ||
var { viewportPadding: t = 60 } = e, s = le(e, ["viewportPadding"]); | ||
super(s), this.viewportPadding = 60, this.viewportPadding = t; | ||
} | ||
calculate({ markers: e, map: t, mapCanvasProjection: s }) { | ||
return t.getZoom() >= this.maxZoom ? { | ||
clusters: this.noop({ | ||
markers: e | ||
}), | ||
changed: !1 | ||
} : { | ||
clusters: this.cluster({ | ||
markers: it(t, s, e, this.viewportPadding), | ||
map: t, | ||
mapCanvasProjection: s | ||
}) | ||
}; | ||
} | ||
} | ||
const dt = (o) => o.map((t) => new V({ | ||
position: k.getPosition(t), | ||
markers: [t] | ||
})); | ||
class rt extends nt { | ||
class ht extends je { | ||
constructor(e) { | ||
var { maxZoom: t, radius: n = 60 } = e, s = st(e, ["maxZoom", "radius"]); | ||
super({ maxZoom: t }), this.superCluster = new Xe(Object.assign({ maxZoom: this.maxZoom, radius: n }, s)), this.state = { zoom: null }; | ||
var { maxZoom: t, radius: s = 60 } = e, r = le(e, ["maxZoom", "radius"]); | ||
super({ maxZoom: t }), this.state = { zoom: -1 }, this.superCluster = new Te(Object.assign({ maxZoom: this.maxZoom, radius: s }, r)); | ||
} | ||
calculate(e) { | ||
let t = !1; | ||
const s = { zoom: e.map.getZoom() }; | ||
if (!A(e.markers, this.markers)) { | ||
t = !0, this.markers = [...e.markers]; | ||
const s = this.markers.map((r) => ({ | ||
type: "Feature", | ||
geometry: { | ||
type: "Point", | ||
coordinates: [ | ||
r.getPosition().lng(), | ||
r.getPosition().lat() | ||
] | ||
}, | ||
properties: { marker: r } | ||
})); | ||
this.superCluster.load(s); | ||
const r = this.markers.map((n) => { | ||
const a = k.getPosition(n); | ||
return { | ||
type: "Feature", | ||
geometry: { | ||
type: "Point", | ||
coordinates: [a.lng(), a.lat()] | ||
}, | ||
properties: { marker: n } | ||
}; | ||
}); | ||
this.superCluster.load(r); | ||
} | ||
const n = { zoom: e.map.getZoom() }; | ||
return t || this.state.zoom > this.maxZoom && n.zoom > this.maxZoom || (t = t || !A(this.state, n)), this.state = n, t && (this.clusters = this.cluster(e)), { clusters: this.clusters, changed: t }; | ||
return t || (this.state.zoom <= this.maxZoom || s.zoom <= this.maxZoom) && (t = !A(this.state, s)), this.state = s, t && (this.clusters = this.cluster(e)), { clusters: this.clusters, changed: t }; | ||
} | ||
cluster({ map: e }) { | ||
return this.superCluster.getClusters([-180, -90, 180, 90], Math.round(e.getZoom())).map(this.transformCluster.bind(this)); | ||
return this.superCluster.getClusters([-180, -90, 180, 90], Math.round(e.getZoom())).map((t) => this.transformCluster(t)); | ||
} | ||
transformCluster({ geometry: { coordinates: [e, t] }, properties: n }) { | ||
if (n.cluster) | ||
return new X({ | ||
markers: this.superCluster.getLeaves(n.cluster_id, 1 / 0).map((s) => s.properties.marker), | ||
position: new google.maps.LatLng({ lat: t, lng: e }) | ||
transformCluster({ geometry: { coordinates: [e, t] }, properties: s }) { | ||
if (s.cluster) | ||
return new V({ | ||
markers: this.superCluster.getLeaves(s.cluster_id, 1 / 0).map((n) => n.properties.marker), | ||
position: { lat: t, lng: e } | ||
}); | ||
{ | ||
const s = n.marker; | ||
return new X({ | ||
markers: [s], | ||
position: s.getPosition() | ||
const r = s.marker; | ||
return new V({ | ||
markers: [r], | ||
position: k.getPosition(r) | ||
}); | ||
} | ||
} | ||
class pt extends ut { | ||
constructor(e) { | ||
var { maxZoom: t, radius: s = 60, viewportPadding: r = 60 } = e, n = le(e, ["maxZoom", "radius", "viewportPadding"]); | ||
super({ maxZoom: t, viewportPadding: r }), this.superCluster = new Te(Object.assign({ maxZoom: this.maxZoom, radius: s }, n)), this.state = { zoom: -1, view: [0, 0, 0, 0] }; | ||
} | ||
calculate(e) { | ||
const t = { | ||
zoom: Math.round(e.map.getZoom()), | ||
view: _e(e.map.getBounds(), e.mapCanvasProjection, this.viewportPadding) | ||
}; | ||
let s = !A(this.state, t); | ||
if (!A(e.markers, this.markers)) { | ||
s = !0, this.markers = [...e.markers]; | ||
const r = this.markers.map((n) => { | ||
const a = k.getPosition(n); | ||
return { | ||
type: "Feature", | ||
geometry: { | ||
type: "Point", | ||
coordinates: [a.lng(), a.lat()] | ||
}, | ||
properties: { marker: n } | ||
}; | ||
}); | ||
this.superCluster.load(r); | ||
} | ||
return s && (this.clusters = this.cluster(e), this.state = t), { clusters: this.clusters, changed: s }; | ||
} | ||
cluster({ map: e, mapCanvasProjection: t }) { | ||
const s = { | ||
zoom: Math.round(e.getZoom()), | ||
view: _e(e.getBounds(), t, this.viewportPadding) | ||
}; | ||
return this.superCluster.getClusters(s.view, s.zoom).map((r) => this.transformCluster(r)); | ||
} | ||
transformCluster({ geometry: { coordinates: [e, t] }, properties: s }) { | ||
if (s.cluster) | ||
return new V({ | ||
markers: this.superCluster.getLeaves(s.cluster_id, 1 / 0).map((n) => n.properties.marker), | ||
position: { lat: t, lng: e } | ||
}); | ||
const r = s.marker; | ||
return new V({ | ||
markers: [r], | ||
position: k.getPosition(r) | ||
}); | ||
} | ||
} | ||
class it { | ||
class ft { | ||
constructor(e, t) { | ||
this.markers = { sum: e.length }; | ||
const n = t.map((r) => r.count), s = n.reduce((r, a) => r + a, 0); | ||
const s = t.map((n) => n.count), r = s.reduce((n, a) => n + a, 0); | ||
this.clusters = { | ||
count: t.length, | ||
markers: { | ||
mean: s / t.length, | ||
sum: s, | ||
min: Math.min(...n), | ||
max: Math.max(...n) | ||
mean: r / t.length, | ||
sum: r, | ||
min: Math.min(...s), | ||
max: Math.max(...s) | ||
} | ||
@@ -1352,3 +1525,3 @@ }; | ||
} | ||
class at { | ||
class mt { | ||
/** | ||
@@ -1392,45 +1565,54 @@ * The default render function for the library used by {@link MarkerClusterer}. | ||
*/ | ||
render({ count: e, position: t }, n) { | ||
const s = e > Math.max(10, n.clusters.markers.mean) ? "#ff0000" : "#0000ff", r = window.btoa(` | ||
<svg fill="${s}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 240"> | ||
<circle cx="120" cy="120" opacity=".6" r="70" /> | ||
<circle cx="120" cy="120" opacity=".3" r="90" /> | ||
<circle cx="120" cy="120" opacity=".2" r="110" /> | ||
</svg>`); | ||
return new google.maps.Marker({ | ||
render({ count: e, position: t }, s, r) { | ||
const a = `<svg fill="${e > Math.max(10, s.clusters.markers.mean) ? "#ff0000" : "#0000ff"}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 240" width="50" height="50"> | ||
<circle cx="120" cy="120" opacity=".6" r="70" /> | ||
<circle cx="120" cy="120" opacity=".3" r="90" /> | ||
<circle cx="120" cy="120" opacity=".2" r="110" /> | ||
<text x="50%" y="50%" style="fill:#fff" text-anchor="middle" font-size="50" dominant-baseline="middle" font-family="roboto,arial,sans-serif">${e}</text> | ||
</svg>`, c = `Cluster of ${e} markers`, i = Number(google.maps.Marker.MAX_ZINDEX) + e; | ||
if (k.isAdvancedMarkerAvailable(r)) { | ||
const u = document.createElement("div"); | ||
u.innerHTML = a; | ||
const l = u.firstElementChild; | ||
l.setAttribute("transform", "translate(0 25)"); | ||
const h = { | ||
map: r, | ||
position: t, | ||
zIndex: i, | ||
title: c, | ||
content: l | ||
}; | ||
return new google.maps.marker.AdvancedMarkerElement(h); | ||
} | ||
const d = { | ||
position: t, | ||
zIndex: i, | ||
title: c, | ||
icon: { | ||
url: `data:image/svg+xml;base64,${r}`, | ||
scaledSize: new google.maps.Size(45, 45) | ||
}, | ||
label: { | ||
text: String(e), | ||
color: "rgba(255,255,255,0.9)", | ||
fontSize: "12px" | ||
}, | ||
title: `Cluster of ${e} markers`, | ||
// adjust zIndex to be above other markers | ||
zIndex: Number(google.maps.Marker.MAX_ZINDEX) + e | ||
}); | ||
url: `data:image/svg+xml;base64,${btoa(a)}`, | ||
anchor: new google.maps.Point(25, 25) | ||
} | ||
}; | ||
return new google.maps.Marker(d); | ||
} | ||
} | ||
function lt(o, e) { | ||
function gt(o, e) { | ||
for (let t in e.prototype) | ||
o.prototype[t] = e.prototype[t]; | ||
} | ||
class Q { | ||
class ce { | ||
constructor() { | ||
lt(Q, google.maps.OverlayView); | ||
gt(ce, google.maps.OverlayView); | ||
} | ||
} | ||
var x; | ||
var I; | ||
(function(o) { | ||
o.CLUSTERING_BEGIN = "clusteringbegin", o.CLUSTERING_END = "clusteringend", o.CLUSTER_CLICK = "click"; | ||
})(x || (x = {})); | ||
const ct = (o, e, t) => { | ||
})(I || (I = {})); | ||
const vt = (o, e, t) => { | ||
t.fitBounds(e.bounds); | ||
}; | ||
class ut extends Q { | ||
constructor({ map: e, markers: t = [], algorithm: n = new rt({}), renderer: s = new at(), onClusterClick: r = ct }) { | ||
super(), this.markers = [...t], this.clusters = [], this.algorithm = n, this.renderer = s, this.onClusterClick = r, e && this.setMap(e); | ||
class yt extends ce { | ||
constructor({ map: e, markers: t = [], algorithmOptions: s = {}, algorithm: r = new ht(s), renderer: n = new mt(), onClusterClick: a = vt }) { | ||
super(), this.markers = [...t], this.clusters = [], this.algorithm = r, this.renderer = n, this.onClusterClick = a, e && this.setMap(e); | ||
} | ||
@@ -1441,15 +1623,15 @@ addMarker(e, t) { | ||
addMarkers(e, t) { | ||
e.forEach((n) => { | ||
this.addMarker(n, !0); | ||
e.forEach((s) => { | ||
this.addMarker(s, !0); | ||
}), t || this.render(); | ||
} | ||
removeMarker(e, t) { | ||
const n = this.markers.indexOf(e); | ||
return n === -1 ? !1 : (e.setMap(null), this.markers.splice(n, 1), t || this.render(), !0); | ||
const s = this.markers.indexOf(e); | ||
return s === -1 ? !1 : (k.setMap(e, null), this.markers.splice(s, 1), t || this.render(), !0); | ||
} | ||
removeMarkers(e, t) { | ||
let n = !1; | ||
return e.forEach((s) => { | ||
n = this.removeMarker(s, !0) || n; | ||
}), n && !t && this.render(), n; | ||
let s = !1; | ||
return e.forEach((r) => { | ||
s = this.removeMarker(r, !0) || s; | ||
}), s && !t && this.render(), s; | ||
} | ||
@@ -1464,5 +1646,5 @@ clearMarkers(e) { | ||
const e = this.getMap(); | ||
if (e instanceof google.maps.Map && this.getProjection()) { | ||
google.maps.event.trigger(this, x.CLUSTERING_BEGIN, this); | ||
const { clusters: t, changed: n } = this.algorithm.calculate({ | ||
if (e instanceof google.maps.Map && e.getProjection()) { | ||
google.maps.event.trigger(this, I.CLUSTERING_BEGIN, this); | ||
const { clusters: t, changed: s } = this.algorithm.calculate({ | ||
markers: this.markers, | ||
@@ -1472,3 +1654,12 @@ map: e, | ||
}); | ||
(n || n == null) && (this.reset(), this.clusters = t, this.renderClusters()), google.maps.event.trigger(this, x.CLUSTERING_END, this); | ||
if (s || s == null) { | ||
const r = /* @__PURE__ */ new Set(); | ||
for (const a of t) | ||
a.markers.length == 1 && r.add(a.markers[0]); | ||
const n = []; | ||
for (const a of this.clusters) | ||
a.marker != null && (a.markers.length == 1 ? r.has(a.marker) || k.setMap(a.marker, null) : n.push(a.marker)); | ||
this.clusters = t, this.renderClusters(), requestAnimationFrame(() => n.forEach((a) => k.setMap(a, null))); | ||
} | ||
google.maps.event.trigger(this, I.CLUSTERING_END, this); | ||
} | ||
@@ -1483,18 +1674,18 @@ } | ||
reset() { | ||
this.markers.forEach((e) => e.setMap(null)), this.clusters.forEach((e) => e.delete()), this.clusters = []; | ||
this.markers.forEach((e) => k.setMap(e, null)), this.clusters.forEach((e) => e.delete()), this.clusters = []; | ||
} | ||
renderClusters() { | ||
const e = new it(this.markers, this.clusters), t = this.getMap(); | ||
this.clusters.forEach((n) => { | ||
n.markers.length === 1 ? n.marker = n.markers[0] : (n.marker = this.renderer.render(n, e), this.onClusterClick && n.marker.addListener( | ||
const e = new ft(this.markers, this.clusters), t = this.getMap(); | ||
this.clusters.forEach((s) => { | ||
s.markers.length === 1 ? s.marker = s.markers[0] : (s.marker = this.renderer.render(s, e, t), s.markers.forEach((r) => k.setMap(r, null)), this.onClusterClick && s.marker.addListener( | ||
"click", | ||
/* istanbul ignore next */ | ||
(s) => { | ||
google.maps.event.trigger(this, x.CLUSTER_CLICK, n), this.onClusterClick(s, n, t); | ||
(r) => { | ||
google.maps.event.trigger(this, I.CLUSTER_CLICK, s), this.onClusterClick(r, s, t); | ||
} | ||
)), n.marker.setMap(t); | ||
)), k.setMap(s.marker, t); | ||
}); | ||
} | ||
} | ||
const me = Object.values(x), Ot = k({ | ||
const Ce = Object.values(I), It = M({ | ||
name: "MarkerCluster", | ||
@@ -1507,11 +1698,19 @@ props: { | ||
}, | ||
emits: me, | ||
setup(o, { emit: e, expose: t, slots: n }) { | ||
const s = v(), r = y(I, v()), a = y(E, v()); | ||
return q(ke, s), b( | ||
r, | ||
emits: Ce, | ||
setup(o, { emit: e, expose: t, slots: s }) { | ||
const r = v(), n = _(q, v()), a = _(R, v()); | ||
return z(Ee, r), O( | ||
n, | ||
() => { | ||
r.value && (s.value = M(new ut({ map: r.value, ...o.options })), me.forEach((l) => { | ||
n.value && (r.value = E( | ||
new yt({ | ||
map: n.value, | ||
// Better perf than the default `SuperClusterAlgorithm`. See: | ||
// https://github.com/googlemaps/js-markerclusterer/pull/640 | ||
algorithm: new pt(o.options.algorithmOptions ?? {}), | ||
...o.options | ||
}) | ||
), Ce.forEach((c) => { | ||
var i; | ||
(i = s.value) == null || i.addListener(l, (p) => e(l, p)); | ||
(i = r.value) == null || i.addListener(c, (d) => e(c, d)); | ||
})); | ||
@@ -1522,11 +1721,11 @@ }, | ||
} | ||
), S(() => { | ||
var l; | ||
s.value && ((l = a.value) == null || l.event.clearInstanceListeners(s.value), s.value.clearMarkers(), s.value.setMap(null)); | ||
}), t({ markerCluster: s }), () => { | ||
var l; | ||
return (l = n.default) == null ? void 0 : l.call(n); | ||
), j(() => { | ||
var c; | ||
r.value && ((c = a.value) == null || c.event.clearInstanceListeners(r.value), r.value.clearMarkers(), r.value.setMap(null)); | ||
}), t({ markerCluster: r }), () => { | ||
var c; | ||
return (c = s.default) == null ? void 0 : c.call(s); | ||
}; | ||
} | ||
}), pt = k({ | ||
}), wt = M({ | ||
inheritAttrs: !1, | ||
@@ -1539,30 +1738,30 @@ props: { | ||
}, | ||
setup(o, { slots: e, emit: t, expose: n }) { | ||
const s = v(), r = z(() => { | ||
setup(o, { slots: e, emit: t, expose: s }) { | ||
const r = v(), n = K(() => { | ||
var i; | ||
return (i = e.default) == null ? void 0 : i.call(e).some((p) => p.type !== ve); | ||
}), a = z(() => ({ | ||
return (i = e.default) == null ? void 0 : i.call(e).some((d) => d.type !== be); | ||
}), a = K(() => ({ | ||
...o.options, | ||
element: s.value | ||
})), l = $(H, [], a, t); | ||
return n({ | ||
customMarker: l | ||
}), { customMarkerRef: s, customMarker: l, hasSlotContent: r }; | ||
element: r.value | ||
})), c = Z(Q, [], a, t); | ||
return s({ | ||
customMarker: c | ||
}), { customMarkerRef: r, customMarker: c, hasSlotContent: n }; | ||
} | ||
}); | ||
const dt = { | ||
const kt = { | ||
key: 0, | ||
class: "custom-marker-wrapper" | ||
}; | ||
function ht(o, e, t, n, s, r) { | ||
return o.hasSlotContent ? (F(), G("div", dt, [ | ||
Y("div", ye({ | ||
function _t(o, e, t, s, r, n) { | ||
return o.hasSlotContent ? (J(), Y("div", kt, [ | ||
ie("div", Oe({ | ||
ref: "customMarkerRef", | ||
style: { cursor: o.$attrs.onClick ? "pointer" : void 0 } | ||
}, o.$attrs), [ | ||
U(o.$slots, "default", {}, void 0, !0) | ||
X(o.$slots, "default", {}, void 0, !0) | ||
], 16) | ||
])) : Ce("", !0); | ||
])) : Pe("", !0); | ||
} | ||
const xt = /* @__PURE__ */ K(pt, [["render", ht], ["__scopeId", "data-v-c7599d50"]]), Pt = k({ | ||
const $t = /* @__PURE__ */ ee(wt, [["render", _t], ["__scopeId", "data-v-c7599d50"]]), jt = M({ | ||
name: "HeatmapLayer", | ||
@@ -1576,16 +1775,16 @@ props: { | ||
setup(o) { | ||
const e = v(), t = y(I, v()), n = y(E, v()); | ||
return b( | ||
const e = v(), t = _(q, v()), s = _(R, v()); | ||
return O( | ||
[t, () => o.options], | ||
([s, r], [a, l]) => { | ||
var p; | ||
const i = !A(r, l) || t.value !== a; | ||
if (t.value && n.value && i) { | ||
const u = structuredClone(r); | ||
if (u.data && !(u.data instanceof n.value.MVCArray)) { | ||
const c = n.value.LatLng; | ||
u.data = (p = u.data) == null ? void 0 : p.map((h) => h instanceof c || "location" in h && (h.location instanceof c || h.location === null) ? h : "location" in h ? { ...h, location: new c(h.location) } : new c(h)); | ||
([r, n], [a, c]) => { | ||
var d; | ||
const i = !A(n, c) || t.value !== a; | ||
if (t.value && s.value && i) { | ||
const u = structuredClone(n); | ||
if (u.data && !(u.data instanceof s.value.MVCArray)) { | ||
const l = s.value.LatLng; | ||
u.data = (d = u.data) == null ? void 0 : d.map((h) => h instanceof l || "location" in h && (h.location instanceof l || h.location === null) ? h : "location" in h ? { ...h, location: new l(h.location) } : new l(h)); | ||
} | ||
e.value ? e.value.setOptions(u) : e.value = M( | ||
new n.value.visualization.HeatmapLayer({ | ||
e.value ? e.value.setOptions(u) : e.value = E( | ||
new s.value.visualization.HeatmapLayer({ | ||
...u, | ||
@@ -1598,3 +1797,3 @@ map: t.value | ||
{ immediate: !0 } | ||
), S(() => { | ||
), j(() => { | ||
e.value && e.value.setMap(null); | ||
@@ -1606,13 +1805,13 @@ }), { heatmapLayer: e }; | ||
export { | ||
wt as Circle, | ||
bt as CustomControl, | ||
xt as CustomMarker, | ||
vt as GoogleMap, | ||
Pt as HeatmapLayer, | ||
Mt as InfoWindow, | ||
yt as Marker, | ||
Ot as MarkerCluster, | ||
_t as Polygon, | ||
Ct as Polyline, | ||
kt as Rectangle | ||
St as Circle, | ||
At as CustomControl, | ||
$t as CustomMarker, | ||
Ot as GoogleMap, | ||
jt as HeatmapLayer, | ||
Tt as InfoWindow, | ||
Pt as Marker, | ||
It as MarkerCluster, | ||
Et as Polygon, | ||
xt as Polyline, | ||
Lt as Rectangle | ||
}; |
(function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode(".mapdiv[data-v-765a8e46]{width:100%;height:100%}.info-window-wrapper[data-v-7138f548]{display:none}.mapdiv .info-window-wrapper[data-v-7138f548]{display:inline-block}.custom-marker-wrapper[data-v-cab807c1]{display:none}.mapdiv .custom-marker-wrapper[data-v-cab807c1]{display:inline-block}")),document.head.appendChild(e)}}catch(a){console.error("vite-plugin-css-injected-by-js",a)}})(); | ||
(function(C,i){typeof exports=="object"&&typeof module<"u"?i(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],i):(C=typeof globalThis<"u"?globalThis:C||self,i(C.Vue3GoogleMap={},C.Vue))})(this,function(C,i){"use strict";var st=Object.defineProperty;var rt=(C,i,k)=>i in C?st(C,i,{enumerable:!0,configurable:!0,writable:!0,value:k}):C[i]=k;var D=(C,i,k)=>(rt(C,typeof i!="symbol"?i+"":i,k),k);const k=Symbol("map"),M=Symbol("api"),U=Symbol("marker"),F=Symbol("markerCluster"),j=Symbol("CustomMarker"),G=Symbol("mapTilesLoaded"),O=["click","dblclick","drag","dragend","dragstart","mousedown","mousemove","mouseout","mouseover","mouseup","rightclick"];var ue=function s(e,t){if(e===t)return!0;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var o,n,r;if(Array.isArray(e)){if(o=e.length,o!=t.length)return!1;for(n=o;n--!==0;)if(!s(e[n],t[n]))return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();if(r=Object.keys(e),o=r.length,o!==Object.keys(t).length)return!1;for(n=o;n--!==0;)if(!Object.prototype.hasOwnProperty.call(t,r[n]))return!1;for(n=o;n--!==0;){var l=r[n];if(!s(e[l],t[l]))return!1}return!0}return e!==e&&t!==t};const V="__googleMapsScriptId";class b{constructor({apiKey:e,channel:t,client:o,id:n=V,libraries:r=[],language:l,region:c,version:a,mapIds:p,nonce:d,retries:u=3,url:f="https://maps.googleapis.com/maps/api/js"}){if(this.CALLBACK="__googleMapsCallback",this.callbacks=[],this.done=!1,this.loading=!1,this.errors=[],this.version=a,this.apiKey=e,this.channel=t,this.client=o,this.id=n||V,this.libraries=r,this.language=l,this.region=c,this.mapIds=p,this.nonce=d,this.retries=u,this.url=f,b.instance){if(!ue(this.options,b.instance.options))throw new Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(b.instance.options)}`);return b.instance}b.instance=this}get options(){return{version:this.version,apiKey:this.apiKey,channel:this.channel,client:this.client,id:this.id,libraries:this.libraries,language:this.language,region:this.region,mapIds:this.mapIds,nonce:this.nonce,url:this.url}}get failed(){return this.done&&!this.loading&&this.errors.length>=this.retries+1}createUrl(){let e=this.url;return e+=`?callback=${this.CALLBACK}`,this.apiKey&&(e+=`&key=${this.apiKey}`),this.channel&&(e+=`&channel=${this.channel}`),this.client&&(e+=`&client=${this.client}`),this.libraries.length>0&&(e+=`&libraries=${this.libraries.join(",")}`),this.language&&(e+=`&language=${this.language}`),this.region&&(e+=`®ion=${this.region}`),this.version&&(e+=`&v=${this.version}`),this.mapIds&&(e+=`&map_ids=${this.mapIds.join(",")}`),e}deleteScript(){const e=document.getElementById(this.id);e&&e.remove()}load(){return this.loadPromise()}loadPromise(){return new Promise((e,t)=>{this.loadCallback(o=>{o?t(o.error):e(window.google)})})}loadCallback(e){this.callbacks.push(e),this.execute()}setScript(){if(document.getElementById(this.id)){this.callback();return}const e=this.createUrl(),t=document.createElement("script");t.id=this.id,t.type="text/javascript",t.src=e,t.onerror=this.loadErrorCallback.bind(this),t.defer=!0,t.async=!0,this.nonce&&(t.nonce=this.nonce),document.head.appendChild(t)}reset(){this.deleteScript(),this.done=!1,this.loading=!1,this.errors=[],this.onerrorEvent=null}resetIfRetryingFailed(){this.failed&&this.reset()}loadErrorCallback(e){if(this.errors.push(e),this.errors.length<=this.retries){const t=this.errors.length*Math.pow(2,this.errors.length);console.log(`Failed to load Google Maps script, retrying in ${t} ms.`),setTimeout(()=>{this.deleteScript(),this.setScript()},t)}else this.onerrorEvent=e,this.callback()}setCallback(){window.__googleMapsCallback=this.callback.bind(this)}callback(){this.done=!0,this.loading=!1,this.callbacks.forEach(e=>{e(this.onerrorEvent)}),this.callbacks=[]}execute(){if(this.resetIfRetryingFailed(),this.done)this.callback();else{if(window.google&&window.google.maps&&window.google.maps.version){console.warn("Google Maps already loaded outside @googlemaps/js-api-loader.This may result in undesirable behavior as options and script parameters may not match."),this.callback();return}this.loading||(this.loading=!0,this.setCallback(),this.setScript())}}}function de(s){return class extends s.OverlayView{constructor(o){super();D(this,"element");D(this,"opts");const{element:n,...r}=o;this.element=n,this.opts=r,this.opts.map&&this.setMap(this.opts.map)}getPosition(){return this.opts.position?this.opts.position instanceof s.LatLng?this.opts.position:new s.LatLng(this.opts.position):null}getVisible(){if(!this.element)return!1;const o=this.element;return o.style.display!=="none"&&o.style.visibility!=="hidden"&&(o.style.opacity===""||Number(o.style.opacity)>.01)}onAdd(){if(!this.element)return;const o=this.getPanes();o&&o.overlayMouseTarget.appendChild(this.element)}draw(){if(!this.element)return;const n=this.getProjection().fromLatLngToDivPixel(this.getPosition());if(n){this.element.style.position="absolute";const r=this.element.offsetHeight,l=this.element.offsetWidth;let c,a;switch(this.opts.anchorPoint){case"TOP_CENTER":c=n.x-l/2,a=n.y;break;case"BOTTOM_CENTER":c=n.x-l/2,a=n.y-r;break;case"LEFT_CENTER":c=n.x,a=n.y-r/2;break;case"RIGHT_CENTER":c=n.x-l,a=n.y-r/2;break;case"TOP_LEFT":c=n.x,a=n.y;break;case"TOP_RIGHT":c=n.x-l,a=n.y;break;case"BOTTOM_LEFT":c=n.x,a=n.y-r;break;case"BOTTOM_RIGHT":c=n.x-l,a=n.y-r;break;default:c=n.x-l/2,a=n.y-r/2}this.element.style.left=c+"px",this.element.style.top=a+"px",this.element.style.transform=`translateX(${this.opts.offsetX||0}px) translateY(${this.opts.offsetY||0}px)`,this.opts.zIndex&&(this.element.style.zIndex=this.opts.zIndex.toString())}}onRemove(){this.element&&this.element.remove()}setOptions(o){this.opts=o,this.draw()}}}let H;const K=["bounds_changed","center_changed","click","dblclick","drag","dragend","dragstart","heading_changed","idle","maptypeid_changed","mousemove","mouseout","mouseover","projection_changed","resize","rightclick","tilesloaded","tilt_changed","zoom_changed"],pe=i.defineComponent({props:{apiPromise:{type:Promise},apiKey:{type:String,default:""},version:{type:String,default:"weekly"},libraries:{type:Array,default:()=>["places"]},region:{type:String,required:!1},language:{type:String,required:!1},backgroundColor:{type:String,required:!1},center:{type:Object,default:()=>({lat:0,lng:0})},clickableIcons:{type:Boolean,required:!1,default:void 0},controlSize:{type:Number,required:!1},disableDefaultUi:{type:Boolean,required:!1,default:void 0},disableDoubleClickZoom:{type:Boolean,required:!1,default:void 0},draggable:{type:Boolean,required:!1,default:void 0},draggableCursor:{type:String,required:!1},draggingCursor:{type:String,required:!1},fullscreenControl:{type:Boolean,required:!1,default:void 0},fullscreenControlPosition:{type:String,required:!1},gestureHandling:{type:String,required:!1},heading:{type:Number,required:!1},keyboardShortcuts:{type:Boolean,required:!1,default:void 0},mapTypeControl:{type:Boolean,required:!1,default:void 0},mapTypeControlOptions:{type:Object,required:!1},mapTypeId:{type:[Number,String],required:!1},mapId:{type:String,required:!1},maxZoom:{type:Number,required:!1},minZoom:{type:Number,required:!1},noClear:{type:Boolean,required:!1,default:void 0},panControl:{type:Boolean,required:!1,default:void 0},panControlPosition:{type:String,required:!1},restriction:{type:Object,required:!1},rotateControl:{type:Boolean,required:!1,default:void 0},rotateControlPosition:{type:String,required:!1},scaleControl:{type:Boolean,required:!1,default:void 0},scaleControlStyle:{type:Number,required:!1},scrollwheel:{type:Boolean,required:!1,default:void 0},streetView:{type:Object,required:!1},streetViewControl:{type:Boolean,required:!1,default:void 0},streetViewControlPosition:{type:String,required:!1},styles:{type:Array,required:!1},tilt:{type:Number,required:!1},zoom:{type:Number,required:!1},zoomControl:{type:Boolean,required:!1,default:void 0},zoomControlPosition:{type:String,required:!1}},emits:K,setup(s,{emit:e}){const t=i.ref(),o=i.ref(!1),n=i.ref(),r=i.ref(),l=i.ref(!1);i.provide(k,n),i.provide(M,r),i.provide(G,l);const c=()=>{const u={...s};Object.keys(u).forEach(g=>{u[g]===void 0&&delete u[g]});const m=g=>{var y;return g?{position:(y=r.value)==null?void 0:y.ControlPosition[g]}:{}},h={scaleControlOptions:s.scaleControlStyle?{style:s.scaleControlStyle}:{},panControlOptions:m(s.panControlPosition),zoomControlOptions:m(s.zoomControlPosition),rotateControlOptions:m(s.rotateControlPosition),streetViewControlOptions:m(s.streetViewControlPosition),fullscreenControlOptions:m(s.fullscreenControlPosition),disableDefaultUI:s.disableDefaultUi};return{...u,...h}},a=i.watch([r,n],([u,f])=>{const m=u,h=f;m&&h&&(m.event.addListenerOnce(h,"tilesloaded",()=>{l.value=!0}),setTimeout(a,0))},{immediate:!0}),p=()=>{try{const{apiKey:u,region:f,version:m,language:h,libraries:g}=s;H=new b({apiKey:u,region:f,version:m,language:h,libraries:g})}catch(u){console.error(u)}},d=u=>{r.value=i.markRaw(u.maps),n.value=i.markRaw(new u.maps.Map(t.value,c()));const f=de(r.value);r.value[j]=f,K.forEach(h=>{var g;(g=n.value)==null||g.addListener(h,y=>e(h,y))}),o.value=!0;const m=Object.keys(s).filter(h=>!["apiPromise","apiKey","version","libraries","region","language","center","zoom"].includes(h)).map(h=>i.toRef(s,h));i.watch([()=>s.center,()=>s.zoom,...m],([h,g],[y,v])=>{var ae,le,ce;const{center:w,zoom:I,..._}=c();(ae=n.value)==null||ae.setOptions(_),g!==void 0&&g!==v&&((le=n.value)==null||le.setZoom(g));const B=!y||h.lng!==y.lng||h.lat!==y.lat;h&&B&&((ce=n.value)==null||ce.panTo(h))})};return i.onMounted(()=>{s.apiPromise&&s.apiPromise instanceof Promise?s.apiPromise.then(d):(p(),H.load().then(d))}),i.onBeforeUnmount(()=>{var u;l.value=!1,n.value&&((u=r.value)==null||u.event.clearInstanceListeners(n.value))}),{mapRef:t,ready:o,map:n,api:r,mapTilesLoaded:l}}}),it="",$=(s,e)=>{const t=s.__vccOpts||s;for(const[o,n]of e)t[o]=n;return t},he={ref:"mapRef",class:"mapdiv"};function fe(s,e,t,o,n,r){return i.openBlock(),i.createElementBlock("div",null,[i.createElementVNode("div",he,null,512),i.renderSlot(s.$slots,"default",i.normalizeProps(i.guardReactiveProps({ready:s.ready,map:s.map,api:s.api,mapTilesLoaded:s.mapTilesLoaded})),void 0,!0)])}const me=$(pe,[["render",fe],["__scopeId","data-v-765a8e46"]]);function ge(s){return s&&s.__esModule&&Object.prototype.hasOwnProperty.call(s,"default")?s.default:s}var ye=function s(e,t){if(e===t)return!0;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var o,n,r;if(Array.isArray(e)){if(o=e.length,o!=t.length)return!1;for(n=o;n--!==0;)if(!s(e[n],t[n]))return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();if(r=Object.keys(e),o=r.length,o!==Object.keys(t).length)return!1;for(n=o;n--!==0;)if(!Object.prototype.hasOwnProperty.call(t,r[n]))return!1;for(n=o;n--!==0;){var l=r[n];if(!s(e[l],t[l]))return!1}return!0}return e!==e&&t!==t};const x=ge(ye),Ce=s=>s==="Marker",ke=s=>s===j,P=(s,e,t,o)=>{const n=i.ref(),r=i.inject(k,i.ref()),l=i.inject(M,i.ref()),c=i.inject(F,i.ref()),a=i.computed(()=>!!(c.value&&l.value&&(n.value instanceof l.value.Marker||n.value instanceof l.value[j])));return i.watch([r,t],(p,[d,u])=>{var m,h,g;const f=!x(t.value,u)||r.value!==d;!r.value||!l.value||!f||(n.value?(n.value.setOptions(t.value),a.value&&((m=c.value)==null||m.removeMarker(n.value),(h=c.value)==null||h.addMarker(n.value))):(Ce(s)?n.value=i.markRaw(new l.value[s](t.value)):ke(s)?n.value=i.markRaw(new l.value[s](t.value)):n.value=i.markRaw(new l.value[s]({...t.value,map:r.value})),a.value?(g=c.value)==null||g.addMarker(n.value):n.value.setMap(r.value),e.forEach(y=>{var v;(v=n.value)==null||v.addListener(y,w=>o(y,w))})))},{immediate:!0}),i.onBeforeUnmount(()=>{var p,d;n.value&&((p=l.value)==null||p.event.clearInstanceListeners(n.value),a.value?(d=c.value)==null||d.removeMarker(n.value):n.value.setMap(null))}),n},W=["animation_changed","click","dblclick","rightclick","dragstart","dragend","drag","mouseover","mousedown","mouseout","mouseup","draggable_changed","clickable_changed","contextmenu","cursor_changed","flat_changed","rightclick","zindex_changed","icon_changed","position_changed","shape_changed","title_changed","visible_changed"],ve=i.defineComponent({name:"Marker",props:{options:{type:Object,required:!0}},emits:W,setup(s,{emit:e,expose:t,slots:o}){const n=i.toRef(s,"options"),r=P("Marker",W,n,e);return i.provide(U,r),t({marker:r}),()=>{var l;return(l=o.default)==null?void 0:l.call(o)}}}),_e=i.defineComponent({name:"Polyline",props:{options:{type:Object,required:!0}},emits:O,setup(s,{emit:e}){const t=i.toRef(s,"options");return{polyline:P("Polyline",O,t,e)}},render:()=>null}),we=i.defineComponent({name:"Polygon",props:{options:{type:Object,required:!0}},emits:O,setup(s,{emit:e}){const t=i.toRef(s,"options");return{polygon:P("Polygon",O,t,e)}},render:()=>null}),J=O.concat(["bounds_changed"]),be=i.defineComponent({name:"Rectangle",props:{options:{type:Object,required:!0}},emits:J,setup(s,{emit:e}){const t=i.toRef(s,"options");return{rectangle:P("Rectangle",J,t,e)}},render:()=>null}),X=O.concat(["center_changed","radius_changed"]),Me=i.defineComponent({name:"Circle",props:{options:{type:Object,required:!0}},emits:X,setup(s,{emit:e}){const t=i.toRef(s,"options");return{circle:P("Circle",X,t,e)}},render:()=>null}),Oe=i.defineComponent({props:{position:{type:String,required:!0},index:{type:Number,default:1}},emits:["content:loaded"],setup(s,{emit:e}){const t=i.ref(null),o=i.inject(k,i.ref()),n=i.inject(M,i.ref()),r=i.inject(G,i.ref(!1)),l=i.ref(!1),c=i.watch([r,n,t],([d,u,f])=>{u&&d&&f&&(a(s.position),l.value=!0,e("content:loaded"),setTimeout(c,0))},{immediate:!0}),a=d=>{if(o.value&&n.value&&t.value){const u=n.value.ControlPosition[d];o.value.controls[u].push(t.value)}},p=d=>{if(o.value&&n.value){let u=null;const f=n.value.ControlPosition[d];o.value.controls[f].forEach((m,h)=>{m===t.value&&(u=h)}),u!==null&&o.value.controls[f].removeAt(u)}};return i.onBeforeUnmount(()=>p(s.position)),i.watch(()=>s.position,(d,u)=>{p(u),a(d)}),i.watch(()=>s.index,d=>{d&&t.value&&(t.value.index=s.index)}),{controlRef:t,showContent:l}}}),Pe={ref:"controlRef"};function Se(s,e,t,o,n,r){return i.withDirectives((i.openBlock(),i.createElementBlock("div",Pe,[i.renderSlot(s.$slots,"default")],512)),[[i.vShow,s.showContent]])}const xe=$(Oe,[["render",Se]]),Y=["closeclick","content_changed","domready","position_changed","visible","zindex_changed"],Le=i.defineComponent({inheritAttrs:!1,props:{options:{type:Object,default:()=>({})}},emits:Y,setup(s,{slots:e,emit:t,expose:o}){const n=i.ref(),r=i.ref(),l=i.inject(k,i.ref()),c=i.inject(M,i.ref()),a=i.inject(U,i.ref());let p;const d=i.computed(()=>{var m;return(m=e.default)==null?void 0:m.call(e).some(h=>h.type!==i.Comment)}),u=m=>{var h;return(h=n.value)==null?void 0:h.open({map:l.value,anchor:a.value,...m})},f=()=>{var m;return(m=n.value)==null?void 0:m.close()};return i.onMounted(()=>{i.watch([l,()=>s.options],([m,h],[g,y])=>{const v=!x(h,y)||l.value!==g;l.value&&c.value&&v&&(n.value?(n.value.setOptions({...h,content:d.value?r.value:h.content}),a.value||u()):(n.value=i.markRaw(new c.value.InfoWindow({...h,content:d.value?r.value:h.content})),a.value?p=a.value.addListener("click",()=>{u()}):u(),Y.forEach(w=>{var I;(I=n.value)==null||I.addListener(w,_=>t(w,_))})))},{immediate:!0})}),i.onBeforeUnmount(()=>{var m;p&&p.remove(),n.value&&((m=c.value)==null||m.event.clearInstanceListeners(n.value),f())}),o({infoWindow:n,open:u,close:f}),{infoWindow:n,infoWindowRef:r,hasSlotContent:d,open:u,close:f}}}),at="",Ee={key:0,class:"info-window-wrapper"};function Ie(s,e,t,o,n,r){return s.hasSlotContent?(i.openBlock(),i.createElementBlock("div",Ee,[i.createElementVNode("div",i.mergeProps({ref:"infoWindowRef"},s.$attrs),[i.renderSlot(s.$slots,"default",{},void 0,!0)],16)])):i.createCommentVNode("",!0)}const je=$(Le,[["render",Ie],["__scopeId","data-v-7138f548"]]);function A(s,e,t,o,n,r){if(n-o<=t)return;const l=o+n>>1;Q(s,e,l,o,n,r%2),A(s,e,t,o,l-1,r+1),A(s,e,t,l+1,n,r+1)}function Q(s,e,t,o,n,r){for(;n>o;){if(n-o>600){const p=n-o+1,d=t-o+1,u=Math.log(p),f=.5*Math.exp(2*u/3),m=.5*Math.sqrt(u*f*(p-f)/p)*(d-p/2<0?-1:1),h=Math.max(o,Math.floor(t-d*f/p+m)),g=Math.min(n,Math.floor(t+(p-d)*f/p+m));Q(s,e,t,h,g,r)}const l=e[2*t+r];let c=o,a=n;for(L(s,e,o,t),e[2*n+r]>l&&L(s,e,o,n);c<a;){for(L(s,e,c,a),c++,a--;e[2*c+r]<l;)c++;for(;e[2*a+r]>l;)a--}e[2*o+r]===l?L(s,e,o,a):(a++,L(s,e,a,n)),a<=t&&(o=a+1),t<=a&&(n=a-1)}}function L(s,e,t,o){N(s,t,o),N(e,2*t,2*o),N(e,2*t+1,2*o+1)}function N(s,e,t){const o=s[e];s[e]=s[t],s[t]=o}function $e(s,e,t,o,n,r,l){const c=[0,s.length-1,0],a=[];let p,d;for(;c.length;){const u=c.pop(),f=c.pop(),m=c.pop();if(f-m<=l){for(let y=m;y<=f;y++)p=e[2*y],d=e[2*y+1],p>=t&&p<=n&&d>=o&&d<=r&&a.push(s[y]);continue}const h=Math.floor((m+f)/2);p=e[2*h],d=e[2*h+1],p>=t&&p<=n&&d>=o&&d<=r&&a.push(s[h]);const g=(u+1)%2;(u===0?t<=p:o<=d)&&(c.push(m),c.push(h-1),c.push(g)),(u===0?n>=p:r>=d)&&(c.push(h+1),c.push(f),c.push(g))}return a}function Re(s,e,t,o,n,r){const l=[0,s.length-1,0],c=[],a=n*n;for(;l.length;){const p=l.pop(),d=l.pop(),u=l.pop();if(d-u<=r){for(let y=u;y<=d;y++)ee(e[2*y],e[2*y+1],t,o)<=a&&c.push(s[y]);continue}const f=Math.floor((u+d)/2),m=e[2*f],h=e[2*f+1];ee(m,h,t,o)<=a&&c.push(s[f]);const g=(p+1)%2;(p===0?t-n<=m:o-n<=h)&&(l.push(u),l.push(f-1),l.push(g)),(p===0?t+n>=m:o+n>=h)&&(l.push(f+1),l.push(d),l.push(g))}return c}function ee(s,e,t,o){const n=s-t,r=e-o;return n*n+r*r}const Te=s=>s[0],qe=s=>s[1];class te{constructor(e,t=Te,o=qe,n=64,r=Float64Array){this.nodeSize=n,this.points=e;const l=e.length<65536?Uint16Array:Uint32Array,c=this.ids=new l(e.length),a=this.coords=new r(e.length*2);for(let p=0;p<e.length;p++)c[p]=p,a[2*p]=t(e[p]),a[2*p+1]=o(e[p]);A(c,a,n,0,c.length-1,0)}range(e,t,o,n){return $e(this.ids,this.coords,e,t,o,n,this.nodeSize)}within(e,t,o){return Re(this.ids,this.coords,e,t,o,this.nodeSize)}}const Be={minZoom:0,maxZoom:16,minPoints:2,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:s=>s},R=Math.fround||(s=>e=>(s[0]=+e,s[0]))(new Float32Array(1));class Ae{constructor(e){this.options=E(Object.create(Be),e),this.trees=new Array(this.options.maxZoom+1)}load(e){const{log:t,minZoom:o,maxZoom:n,nodeSize:r}=this.options;t&&console.time("total time");const l=`prepare ${e.length} points`;t&&console.time(l),this.points=e;let c=[];for(let a=0;a<e.length;a++)e[a].geometry&&c.push(Ze(e[a],a));this.trees[n+1]=new te(c,se,re,r,Float32Array),t&&console.timeEnd(l);for(let a=n;a>=o;a--){const p=+Date.now();c=this._cluster(c,a),this.trees[a]=new te(c,se,re,r,Float32Array),t&&console.log("z%d: %d clusters in %dms",a,c.length,+Date.now()-p)}return t&&console.timeEnd("total time"),this}getClusters(e,t){let o=((e[0]+180)%360+360)%360-180;const n=Math.max(-90,Math.min(90,e[1]));let r=e[2]===180?180:((e[2]+180)%360+360)%360-180;const l=Math.max(-90,Math.min(90,e[3]));if(e[2]-e[0]>=360)o=-180,r=180;else if(o>r){const d=this.getClusters([o,n,180,l],t),u=this.getClusters([-180,n,r,l],t);return d.concat(u)}const c=this.trees[this._limitZoom(t)],a=c.range(T(o),q(l),T(r),q(n)),p=[];for(const d of a){const u=c.points[d];p.push(u.numPoints?ne(u):this.points[u.index])}return p}getChildren(e){const t=this._getOriginId(e),o=this._getOriginZoom(e),n="No cluster with the specified id.",r=this.trees[o];if(!r)throw new Error(n);const l=r.points[t];if(!l)throw new Error(n);const c=this.options.radius/(this.options.extent*Math.pow(2,o-1)),a=r.within(l.x,l.y,c),p=[];for(const d of a){const u=r.points[d];u.parentId===e&&p.push(u.numPoints?ne(u):this.points[u.index])}if(p.length===0)throw new Error(n);return p}getLeaves(e,t,o){t=t||10,o=o||0;const n=[];return this._appendLeaves(n,e,t,o,0),n}getTile(e,t,o){const n=this.trees[this._limitZoom(e)],r=Math.pow(2,e),{extent:l,radius:c}=this.options,a=c/l,p=(o-a)/r,d=(o+1+a)/r,u={features:[]};return this._addTileFeatures(n.range((t-a)/r,p,(t+1+a)/r,d),n.points,t,o,r,u),t===0&&this._addTileFeatures(n.range(1-a/r,p,1,d),n.points,r,o,r,u),t===r-1&&this._addTileFeatures(n.range(0,p,a/r,d),n.points,-1,o,r,u),u.features.length?u:null}getClusterExpansionZoom(e){let t=this._getOriginZoom(e)-1;for(;t<=this.options.maxZoom;){const o=this.getChildren(e);if(t++,o.length!==1)break;e=o[0].properties.cluster_id}return t}_appendLeaves(e,t,o,n,r){const l=this.getChildren(t);for(const c of l){const a=c.properties;if(a&&a.cluster?r+a.point_count<=n?r+=a.point_count:r=this._appendLeaves(e,a.cluster_id,o,n,r):r<n?r++:e.push(c),e.length===o)break}return r}_addTileFeatures(e,t,o,n,r,l){for(const c of e){const a=t[c],p=a.numPoints;let d,u,f;if(p)d=oe(a),u=a.x,f=a.y;else{const g=this.points[a.index];d=g.properties,u=T(g.geometry.coordinates[0]),f=q(g.geometry.coordinates[1])}const m={type:1,geometry:[[Math.round(this.options.extent*(u*r-o)),Math.round(this.options.extent*(f*r-n))]],tags:d};let h;p?h=a.id:this.options.generateId?h=a.index:this.points[a.index].id&&(h=this.points[a.index].id),h!==void 0&&(m.id=h),l.features.push(m)}}_limitZoom(e){return Math.max(this.options.minZoom,Math.min(Math.floor(+e),this.options.maxZoom+1))}_cluster(e,t){const o=[],{radius:n,extent:r,reduce:l,minPoints:c}=this.options,a=n/(r*Math.pow(2,t));for(let p=0;p<e.length;p++){const d=e[p];if(d.zoom<=t)continue;d.zoom=t;const u=this.trees[t+1],f=u.within(d.x,d.y,a),m=d.numPoints||1;let h=m;for(const g of f){const y=u.points[g];y.zoom>t&&(h+=y.numPoints||1)}if(h>m&&h>=c){let g=d.x*m,y=d.y*m,v=l&&m>1?this._map(d,!0):null;const w=(p<<5)+(t+1)+this.points.length;for(const I of f){const _=u.points[I];if(_.zoom<=t)continue;_.zoom=t;const B=_.numPoints||1;g+=_.x*B,y+=_.y*B,_.parentId=w,l&&(v||(v=this._map(d,!0)),l(v,this._map(_)))}d.parentId=w,o.push(Ne(g/h,y/h,w,h,v))}else if(o.push(d),h>1)for(const g of f){const y=u.points[g];y.zoom<=t||(y.zoom=t,o.push(y))}}return o}_getOriginId(e){return e-this.points.length>>5}_getOriginZoom(e){return(e-this.points.length)%32}_map(e,t){if(e.numPoints)return t?E({},e.properties):e.properties;const o=this.points[e.index].properties,n=this.options.map(o);return t&&n===o?E({},n):n}}function Ne(s,e,t,o,n){return{x:R(s),y:R(e),zoom:1/0,id:t,parentId:-1,numPoints:o,properties:n}}function Ze(s,e){const[t,o]=s.geometry.coordinates;return{x:R(T(t)),y:R(q(o)),zoom:1/0,index:e,parentId:-1}}function ne(s){return{type:"Feature",id:s.id,properties:oe(s),geometry:{type:"Point",coordinates:[ze(s.x),De(s.y)]}}}function oe(s){const e=s.numPoints,t=e>=1e4?`${Math.round(e/1e3)}k`:e>=1e3?`${Math.round(e/100)/10}k`:e;return E(E({},s.properties),{cluster:!0,cluster_id:s.id,point_count:e,point_count_abbreviated:t})}function T(s){return s/360+.5}function q(s){const e=Math.sin(s*Math.PI/180),t=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return t<0?0:t>1?1:t}function ze(s){return(s-.5)*360}function De(s){const e=(180-s*360)*Math.PI/180;return 360*Math.atan(Math.exp(e))/Math.PI-90}function E(s,e){for(const t in e)s[t]=e[t];return s}function se(s){return s.x}function re(s){return s.y}/*! ***************************************************************************** | ||
(function(w,a){typeof exports=="object"&&typeof module<"u"?a(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],a):(w=typeof globalThis<"u"?globalThis:w||self,a(w.Vue3GoogleMap={},w.Vue))})(this,function(w,a){"use strict";var ht=Object.defineProperty;var pt=(w,a,_)=>a in w?ht(w,a,{enumerable:!0,configurable:!0,writable:!0,value:_}):w[a]=_;var X=(w,a,_)=>(pt(w,typeof a!="symbol"?a+"":a,_),_);const _=Symbol("map"),L=Symbol("api"),Q=Symbol("marker"),ee=Symbol("markerCluster"),Z=Symbol("CustomMarker"),te=Symbol("mapTilesLoaded"),T=["click","dblclick","drag","dragend","dragstart","mousedown","mousemove","mouseout","mouseover","mouseup","rightclick"];var Ce=function r(e,t){if(e===t)return!0;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var s,n,o;if(Array.isArray(e)){if(s=e.length,s!=t.length)return!1;for(n=s;n--!==0;)if(!r(e[n],t[n]))return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();if(o=Object.keys(e),s=o.length,s!==Object.keys(t).length)return!1;for(n=s;n--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[n]))return!1;for(n=s;n--!==0;){var l=o[n];if(!r(e[l],t[l]))return!1}return!0}return e!==e&&t!==t};const se="__googleMapsScriptId";class E{constructor({apiKey:e,channel:t,client:s,id:n=se,libraries:o=[],language:l,region:u,version:i,mapIds:h,nonce:d,retries:c=3,url:p="https://maps.googleapis.com/maps/api/js"}){if(this.CALLBACK="__googleMapsCallback",this.callbacks=[],this.done=!1,this.loading=!1,this.errors=[],this.version=i,this.apiKey=e,this.channel=t,this.client=s,this.id=n||se,this.libraries=o,this.language=l,this.region=u,this.mapIds=h,this.nonce=d,this.retries=c,this.url=p,E.instance){if(!Ce(this.options,E.instance.options))throw new Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(E.instance.options)}`);return E.instance}E.instance=this}get options(){return{version:this.version,apiKey:this.apiKey,channel:this.channel,client:this.client,id:this.id,libraries:this.libraries,language:this.language,region:this.region,mapIds:this.mapIds,nonce:this.nonce,url:this.url}}get failed(){return this.done&&!this.loading&&this.errors.length>=this.retries+1}createUrl(){let e=this.url;return e+=`?callback=${this.CALLBACK}`,this.apiKey&&(e+=`&key=${this.apiKey}`),this.channel&&(e+=`&channel=${this.channel}`),this.client&&(e+=`&client=${this.client}`),this.libraries.length>0&&(e+=`&libraries=${this.libraries.join(",")}`),this.language&&(e+=`&language=${this.language}`),this.region&&(e+=`®ion=${this.region}`),this.version&&(e+=`&v=${this.version}`),this.mapIds&&(e+=`&map_ids=${this.mapIds.join(",")}`),e}deleteScript(){const e=document.getElementById(this.id);e&&e.remove()}load(){return this.loadPromise()}loadPromise(){return new Promise((e,t)=>{this.loadCallback(s=>{s?t(s.error):e(window.google)})})}loadCallback(e){this.callbacks.push(e),this.execute()}setScript(){if(document.getElementById(this.id)){this.callback();return}const e=this.createUrl(),t=document.createElement("script");t.id=this.id,t.type="text/javascript",t.src=e,t.onerror=this.loadErrorCallback.bind(this),t.defer=!0,t.async=!0,this.nonce&&(t.nonce=this.nonce),document.head.appendChild(t)}reset(){this.deleteScript(),this.done=!1,this.loading=!1,this.errors=[],this.onerrorEvent=null}resetIfRetryingFailed(){this.failed&&this.reset()}loadErrorCallback(e){if(this.errors.push(e),this.errors.length<=this.retries){const t=this.errors.length*Math.pow(2,this.errors.length);console.log(`Failed to load Google Maps script, retrying in ${t} ms.`),setTimeout(()=>{this.deleteScript(),this.setScript()},t)}else this.onerrorEvent=e,this.callback()}setCallback(){window.__googleMapsCallback=this.callback.bind(this)}callback(){this.done=!0,this.loading=!1,this.callbacks.forEach(e=>{e(this.onerrorEvent)}),this.callbacks=[]}execute(){if(this.resetIfRetryingFailed(),this.done)this.callback();else{if(window.google&&window.google.maps&&window.google.maps.version){console.warn("Google Maps already loaded outside @googlemaps/js-api-loader.This may result in undesirable behavior as options and script parameters may not match."),this.callback();return}this.loading||(this.loading=!0,this.setCallback(),this.setScript())}}}function _e(r){return class extends r.OverlayView{constructor(s){super();X(this,"element");X(this,"opts");const{element:n,...o}=s;this.element=n,this.opts=o,this.opts.map&&this.setMap(this.opts.map)}getPosition(){return this.opts.position?this.opts.position instanceof r.LatLng?this.opts.position:new r.LatLng(this.opts.position):null}getVisible(){if(!this.element)return!1;const s=this.element;return s.style.display!=="none"&&s.style.visibility!=="hidden"&&(s.style.opacity===""||Number(s.style.opacity)>.01)}onAdd(){if(!this.element)return;const s=this.getPanes();s&&s.overlayMouseTarget.appendChild(this.element)}draw(){if(!this.element)return;const n=this.getProjection().fromLatLngToDivPixel(this.getPosition());if(n){this.element.style.position="absolute";const o=this.element.offsetHeight,l=this.element.offsetWidth;let u,i;switch(this.opts.anchorPoint){case"TOP_CENTER":u=n.x-l/2,i=n.y;break;case"BOTTOM_CENTER":u=n.x-l/2,i=n.y-o;break;case"LEFT_CENTER":u=n.x,i=n.y-o/2;break;case"RIGHT_CENTER":u=n.x-l,i=n.y-o/2;break;case"TOP_LEFT":u=n.x,i=n.y;break;case"TOP_RIGHT":u=n.x-l,i=n.y;break;case"BOTTOM_LEFT":u=n.x,i=n.y-o;break;case"BOTTOM_RIGHT":u=n.x-l,i=n.y-o;break;default:u=n.x-l/2,i=n.y-o/2}this.element.style.left=u+"px",this.element.style.top=i+"px",this.element.style.transform=`translateX(${this.opts.offsetX||0}px) translateY(${this.opts.offsetY||0}px)`,this.opts.zIndex&&(this.element.style.zIndex=this.opts.zIndex.toString())}}onRemove(){this.element&&this.element.remove()}setOptions(s){this.opts=s,this.draw()}}}let ne;const re=["bounds_changed","center_changed","click","dblclick","drag","dragend","dragstart","heading_changed","idle","maptypeid_changed","mousemove","mouseout","mouseover","projection_changed","resize","rightclick","tilesloaded","tilt_changed","zoom_changed"],Me=a.defineComponent({props:{apiPromise:{type:Promise},apiKey:{type:String,default:""},version:{type:String,default:"weekly"},libraries:{type:Array,default:()=>["places"]},region:{type:String,required:!1},language:{type:String,required:!1},backgroundColor:{type:String,required:!1},center:{type:Object,default:()=>({lat:0,lng:0})},clickableIcons:{type:Boolean,required:!1,default:void 0},controlSize:{type:Number,required:!1},disableDefaultUi:{type:Boolean,required:!1,default:void 0},disableDoubleClickZoom:{type:Boolean,required:!1,default:void 0},draggable:{type:Boolean,required:!1,default:void 0},draggableCursor:{type:String,required:!1},draggingCursor:{type:String,required:!1},fullscreenControl:{type:Boolean,required:!1,default:void 0},fullscreenControlPosition:{type:String,required:!1},gestureHandling:{type:String,required:!1},heading:{type:Number,required:!1},keyboardShortcuts:{type:Boolean,required:!1,default:void 0},mapTypeControl:{type:Boolean,required:!1,default:void 0},mapTypeControlOptions:{type:Object,required:!1},mapTypeId:{type:[Number,String],required:!1},mapId:{type:String,required:!1},maxZoom:{type:Number,required:!1},minZoom:{type:Number,required:!1},noClear:{type:Boolean,required:!1,default:void 0},panControl:{type:Boolean,required:!1,default:void 0},panControlPosition:{type:String,required:!1},restriction:{type:Object,required:!1},rotateControl:{type:Boolean,required:!1,default:void 0},rotateControlPosition:{type:String,required:!1},scaleControl:{type:Boolean,required:!1,default:void 0},scaleControlStyle:{type:Number,required:!1},scrollwheel:{type:Boolean,required:!1,default:void 0},streetView:{type:Object,required:!1},streetViewControl:{type:Boolean,required:!1,default:void 0},streetViewControlPosition:{type:String,required:!1},styles:{type:Array,required:!1},tilt:{type:Number,required:!1},zoom:{type:Number,required:!1},zoomControl:{type:Boolean,required:!1,default:void 0},zoomControlPosition:{type:String,required:!1}},emits:re,setup(r,{emit:e}){const t=a.ref(),s=a.ref(!1),n=a.ref(),o=a.ref(),l=a.ref(!1);a.provide(_,n),a.provide(L,o),a.provide(te,l);const u=()=>{const c={...r};Object.keys(c).forEach(g=>{c[g]===void 0&&delete c[g]});const f=g=>{var y;return g?{position:(y=o.value)==null?void 0:y.ControlPosition[g]}:{}},m={scaleControlOptions:r.scaleControlStyle?{style:r.scaleControlStyle}:{},panControlOptions:f(r.panControlPosition),zoomControlOptions:f(r.zoomControlPosition),rotateControlOptions:f(r.rotateControlPosition),streetViewControlOptions:f(r.streetViewControlPosition),fullscreenControlOptions:f(r.fullscreenControlPosition),disableDefaultUI:r.disableDefaultUi};return{...c,...m}},i=a.watch([o,n],([c,p])=>{const f=c,m=p;f&&m&&(f.event.addListenerOnce(m,"tilesloaded",()=>{l.value=!0}),setTimeout(i,0))},{immediate:!0}),h=()=>{try{const{apiKey:c,region:p,version:f,language:m,libraries:g}=r;ne=new E({apiKey:c,region:p,version:f,language:m,libraries:g})}catch(c){console.error(c)}},d=c=>{o.value=a.markRaw(c.maps),n.value=a.markRaw(new c.maps.Map(t.value,u()));const p=_e(o.value);o.value[Z]=p,re.forEach(m=>{var g;(g=n.value)==null||g.addListener(m,y=>e(m,y))}),s.value=!0;const f=Object.keys(r).filter(m=>!["apiPromise","apiKey","version","libraries","region","language","center","zoom"].includes(m)).map(m=>a.toRef(r,m));a.watch([()=>r.center,()=>r.zoom,...f],([m,g],[y,v])=>{var z,b,N;const{center:k,zoom:M,...j}=u();(z=n.value)==null||z.setOptions(j),g!==void 0&&g!==v&&((b=n.value)==null||b.setZoom(g));const q=!y||m.lng!==y.lng||m.lat!==y.lat;m&&q&&((N=n.value)==null||N.panTo(m))})};return a.onMounted(()=>{r.apiPromise&&r.apiPromise instanceof Promise?r.apiPromise.then(d):(h(),ne.load().then(d))}),a.onBeforeUnmount(()=>{var c;l.value=!1,n.value&&((c=o.value)==null||c.event.clearInstanceListeners(n.value))}),{mapRef:t,ready:s,map:n,api:o,mapTilesLoaded:l}}}),ft="",U=(r,e)=>{const t=r.__vccOpts||r;for(const[s,n]of e)t[s]=n;return t},be={ref:"mapRef",class:"mapdiv"};function Pe(r,e,t,s,n,o){return a.openBlock(),a.createElementBlock("div",null,[a.createElementVNode("div",be,null,512),a.renderSlot(r.$slots,"default",a.normalizeProps(a.guardReactiveProps({ready:r.ready,map:r.map,api:r.api,mapTilesLoaded:r.mapTilesLoaded})),void 0,!0)])}const Oe=U(Me,[["render",Pe],["__scopeId","data-v-765a8e46"]]);function Ee(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}var Se=function r(e,t){if(e===t)return!0;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(e.constructor!==t.constructor)return!1;var s,n,o;if(Array.isArray(e)){if(s=e.length,s!=t.length)return!1;for(n=s;n--!==0;)if(!r(e[n],t[n]))return!1;return!0}if(e.constructor===RegExp)return e.source===t.source&&e.flags===t.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===t.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===t.toString();if(o=Object.keys(e),s=o.length,s!==Object.keys(t).length)return!1;for(n=s;n--!==0;)if(!Object.prototype.hasOwnProperty.call(t,o[n]))return!1;for(n=s;n--!==0;){var l=o[n];if(!r(e[l],t[l]))return!1}return!0}return e!==e&&t!==t};const S=Ee(Se),xe=r=>r==="Marker",Le=r=>r===Z,A=(r,e,t,s)=>{const n=a.ref(),o=a.inject(_,a.ref()),l=a.inject(L,a.ref()),u=a.inject(ee,a.ref()),i=a.computed(()=>!!(u.value&&l.value&&(n.value instanceof l.value.Marker||n.value instanceof l.value[Z])));return a.watch([o,t],(h,[d,c])=>{var f,m,g;const p=!S(t.value,c)||o.value!==d;!o.value||!l.value||!p||(n.value?(n.value.setOptions(t.value),i.value&&((f=u.value)==null||f.removeMarker(n.value),(m=u.value)==null||m.addMarker(n.value))):(xe(r)?n.value=a.markRaw(new l.value[r](t.value)):Le(r)?n.value=a.markRaw(new l.value[r](t.value)):n.value=a.markRaw(new l.value[r]({...t.value,map:o.value})),i.value?(g=u.value)==null||g.addMarker(n.value):n.value.setMap(o.value),e.forEach(y=>{var v;(v=n.value)==null||v.addListener(y,k=>s(y,k))})))},{immediate:!0}),a.onBeforeUnmount(()=>{var h,d;n.value&&((h=l.value)==null||h.event.clearInstanceListeners(n.value),i.value?(d=u.value)==null||d.removeMarker(n.value):n.value.setMap(null))}),n},oe=["animation_changed","click","dblclick","rightclick","dragstart","dragend","drag","mouseover","mousedown","mouseout","mouseup","draggable_changed","clickable_changed","contextmenu","cursor_changed","flat_changed","rightclick","zindex_changed","icon_changed","position_changed","shape_changed","title_changed","visible_changed"],Te=a.defineComponent({name:"Marker",props:{options:{type:Object,required:!0}},emits:oe,setup(r,{emit:e,expose:t,slots:s}){const n=a.toRef(r,"options"),o=A("Marker",oe,n,e);return a.provide(Q,o),t({marker:o}),()=>{var l;return(l=s.default)==null?void 0:l.call(s)}}}),Ae=a.defineComponent({name:"Polyline",props:{options:{type:Object,required:!0}},emits:T,setup(r,{emit:e}){const t=a.toRef(r,"options");return{polyline:A("Polyline",T,t,e)}},render:()=>null}),Ie=a.defineComponent({name:"Polygon",props:{options:{type:Object,required:!0}},emits:T,setup(r,{emit:e}){const t=a.toRef(r,"options");return{polygon:A("Polygon",T,t,e)}},render:()=>null}),ie=T.concat(["bounds_changed"]),je=a.defineComponent({name:"Rectangle",props:{options:{type:Object,required:!0}},emits:ie,setup(r,{emit:e}){const t=a.toRef(r,"options");return{rectangle:A("Rectangle",ie,t,e)}},render:()=>null}),ae=T.concat(["center_changed","radius_changed"]),Be=a.defineComponent({name:"Circle",props:{options:{type:Object,required:!0}},emits:ae,setup(r,{emit:e}){const t=a.toRef(r,"options");return{circle:A("Circle",ae,t,e)}},render:()=>null}),Re=a.defineComponent({props:{position:{type:String,required:!0},index:{type:Number,default:1}},emits:["content:loaded"],setup(r,{emit:e}){const t=a.ref(null),s=a.inject(_,a.ref()),n=a.inject(L,a.ref()),o=a.inject(te,a.ref(!1)),l=a.ref(!1),u=a.watch([o,n,t],([d,c,p])=>{c&&d&&p&&(i(r.position),l.value=!0,e("content:loaded"),setTimeout(u,0))},{immediate:!0}),i=d=>{if(s.value&&n.value&&t.value){const c=n.value.ControlPosition[d];s.value.controls[c].push(t.value)}},h=d=>{if(s.value&&n.value){let c=null;const p=n.value.ControlPosition[d];s.value.controls[p].forEach((f,m)=>{f===t.value&&(c=m)}),c!==null&&s.value.controls[p].removeAt(c)}};return a.onBeforeUnmount(()=>h(r.position)),a.watch(()=>r.position,(d,c)=>{h(c),i(d)}),a.watch(()=>r.index,d=>{d&&t.value&&(t.value.index=r.index)}),{controlRef:t,showContent:l}}}),$e={ref:"controlRef"};function qe(r,e,t,s,n,o){return a.withDirectives((a.openBlock(),a.createElementBlock("div",$e,[a.renderSlot(r.$slots,"default")],512)),[[a.vShow,r.showContent]])}const Ne=U(Re,[["render",qe]]),le=["closeclick","content_changed","domready","position_changed","visible","zindex_changed"],Ze=a.defineComponent({inheritAttrs:!1,props:{options:{type:Object,default:()=>({})}},emits:le,setup(r,{slots:e,emit:t,expose:s}){const n=a.ref(),o=a.ref(),l=a.inject(_,a.ref()),u=a.inject(L,a.ref()),i=a.inject(Q,a.ref());let h;const d=a.computed(()=>{var f;return(f=e.default)==null?void 0:f.call(e).some(m=>m.type!==a.Comment)}),c=f=>{var m;return(m=n.value)==null?void 0:m.open({map:l.value,anchor:i.value,...f})},p=()=>{var f;return(f=n.value)==null?void 0:f.close()};return a.onMounted(()=>{a.watch([l,()=>r.options],([f,m],[g,y])=>{const v=!S(m,y)||l.value!==g;l.value&&u.value&&v&&(n.value?(n.value.setOptions({...m,content:d.value?o.value:m.content}),i.value||c()):(n.value=a.markRaw(new u.value.InfoWindow({...m,content:d.value?o.value:m.content})),i.value?h=i.value.addListener("click",()=>{c()}):c(),le.forEach(k=>{var M;(M=n.value)==null||M.addListener(k,j=>t(k,j))})))},{immediate:!0})}),a.onBeforeUnmount(()=>{var f;h&&h.remove(),n.value&&((f=u.value)==null||f.event.clearInstanceListeners(n.value),p())}),s({infoWindow:n,open:c,close:p}),{infoWindow:n,infoWindowRef:o,hasSlotContent:d,open:c,close:p}}}),mt="",Ue={key:0,class:"info-window-wrapper"};function Fe(r,e,t,s,n,o){return r.hasSlotContent?(a.openBlock(),a.createElementBlock("div",Ue,[a.createElementVNode("div",a.mergeProps({ref:"infoWindowRef"},r.$attrs),[a.renderSlot(r.$slots,"default",{},void 0,!0)],16)])):a.createCommentVNode("",!0)}const De=U(Ze,[["render",Fe],["__scopeId","data-v-7138f548"]]),ce=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],V=1,B=8;class G{static from(e){if(!(e instanceof ArrayBuffer))throw new Error("Data must be an instance of ArrayBuffer.");const[t,s]=new Uint8Array(e,0,2);if(t!==219)throw new Error("Data does not appear to be in a KDBush format.");const n=s>>4;if(n!==V)throw new Error(`Got v${n} data when expected v${V}.`);const o=ce[s&15];if(!o)throw new Error("Unrecognized array type.");const[l]=new Uint16Array(e,2,1),[u]=new Uint32Array(e,4,1);return new G(u,l,o,e)}constructor(e,t=64,s=Float64Array,n){if(isNaN(e)||e<0)throw new Error(`Unpexpected numItems value: ${e}.`);this.numItems=+e,this.nodeSize=Math.min(Math.max(+t,2),65535),this.ArrayType=s,this.IndexArrayType=e<65536?Uint16Array:Uint32Array;const o=ce.indexOf(this.ArrayType),l=e*2*this.ArrayType.BYTES_PER_ELEMENT,u=e*this.IndexArrayType.BYTES_PER_ELEMENT,i=(8-u%8)%8;if(o<0)throw new Error(`Unexpected typed array class: ${s}.`);n&&n instanceof ArrayBuffer?(this.data=n,this.ids=new this.IndexArrayType(this.data,B,e),this.coords=new this.ArrayType(this.data,B+u+i,e*2),this._pos=e*2,this._finished=!0):(this.data=new ArrayBuffer(B+l+u+i),this.ids=new this.IndexArrayType(this.data,B,e),this.coords=new this.ArrayType(this.data,B+u+i,e*2),this._pos=0,this._finished=!1,new Uint8Array(this.data,0,2).set([219,(V<<4)+o]),new Uint16Array(this.data,2,1)[0]=t,new Uint32Array(this.data,4,1)[0]=e)}add(e,t){const s=this._pos>>1;return this.ids[s]=s,this.coords[this._pos++]=e,this.coords[this._pos++]=t,s}finish(){const e=this._pos>>1;if(e!==this.numItems)throw new Error(`Added ${e} items when expected ${this.numItems}.`);return H(this.ids,this.coords,this.nodeSize,0,this.numItems-1,0),this._finished=!0,this}range(e,t,s,n){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");const{ids:o,coords:l,nodeSize:u}=this,i=[0,o.length-1,0],h=[];for(;i.length;){const d=i.pop()||0,c=i.pop()||0,p=i.pop()||0;if(c-p<=u){for(let y=p;y<=c;y++){const v=l[2*y],k=l[2*y+1];v>=e&&v<=s&&k>=t&&k<=n&&h.push(o[y])}continue}const f=p+c>>1,m=l[2*f],g=l[2*f+1];m>=e&&m<=s&&g>=t&&g<=n&&h.push(o[f]),(d===0?e<=m:t<=g)&&(i.push(p),i.push(f-1),i.push(1-d)),(d===0?s>=m:n>=g)&&(i.push(f+1),i.push(c),i.push(1-d))}return h}within(e,t,s){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");const{ids:n,coords:o,nodeSize:l}=this,u=[0,n.length-1,0],i=[],h=s*s;for(;u.length;){const d=u.pop()||0,c=u.pop()||0,p=u.pop()||0;if(c-p<=l){for(let y=p;y<=c;y++)de(o[2*y],o[2*y+1],e,t)<=h&&i.push(n[y]);continue}const f=p+c>>1,m=o[2*f],g=o[2*f+1];de(m,g,e,t)<=h&&i.push(n[f]),(d===0?e-s<=m:t-s<=g)&&(u.push(p),u.push(f-1),u.push(1-d)),(d===0?e+s>=m:t+s>=g)&&(u.push(f+1),u.push(c),u.push(1-d))}return i}}function H(r,e,t,s,n,o){if(n-s<=t)return;const l=s+n>>1;ue(r,e,l,s,n,o),H(r,e,t,s,l-1,1-o),H(r,e,t,l+1,n,1-o)}function ue(r,e,t,s,n,o){for(;n>s;){if(n-s>600){const h=n-s+1,d=t-s+1,c=Math.log(h),p=.5*Math.exp(2*c/3),f=.5*Math.sqrt(c*p*(h-p)/h)*(d-h/2<0?-1:1),m=Math.max(s,Math.floor(t-d*p/h+f)),g=Math.min(n,Math.floor(t+(h-d)*p/h+f));ue(r,e,t,m,g,o)}const l=e[2*t+o];let u=s,i=n;for(R(r,e,s,t),e[2*n+o]>l&&R(r,e,s,n);u<i;){for(R(r,e,u,i),u++,i--;e[2*u+o]<l;)u++;for(;e[2*i+o]>l;)i--}e[2*s+o]===l?R(r,e,s,i):(i++,R(r,e,i,n)),i<=t&&(s=i+1),t<=i&&(n=i-1)}}function R(r,e,t,s){W(r,t,s),W(e,2*t,2*s),W(e,2*t+1,2*s+1)}function W(r,e,t){const s=r[e];r[e]=r[t],r[t]=s}function de(r,e,t,s){const n=r-t,o=e-s;return n*n+o*o}const ze={minZoom:0,maxZoom:16,minPoints:2,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:r=>r},he=Math.fround||(r=>e=>(r[0]=+e,r[0]))(new Float32Array(1)),x=2,P=3,K=4,O=5,pe=6;class fe{constructor(e){this.options=Object.assign(Object.create(ze),e),this.trees=new Array(this.options.maxZoom+1),this.stride=this.options.reduce?7:6,this.clusterProps=[]}load(e){const{log:t,minZoom:s,maxZoom:n}=this.options;t&&console.time("total time");const o=`prepare ${e.length} points`;t&&console.time(o),this.points=e;const l=[];for(let i=0;i<e.length;i++){const h=e[i];if(!h.geometry)continue;const[d,c]=h.geometry.coordinates,p=he(F(d)),f=he(D(c));l.push(p,f,1/0,i,-1,1),this.options.reduce&&l.push(0)}let u=this.trees[n+1]=this._createTree(l);t&&console.timeEnd(o);for(let i=n;i>=s;i--){const h=+Date.now();u=this.trees[i]=this._createTree(this._cluster(u,i)),t&&console.log("z%d: %d clusters in %dms",i,u.numItems,+Date.now()-h)}return t&&console.timeEnd("total time"),this}getClusters(e,t){let s=((e[0]+180)%360+360)%360-180;const n=Math.max(-90,Math.min(90,e[1]));let o=e[2]===180?180:((e[2]+180)%360+360)%360-180;const l=Math.max(-90,Math.min(90,e[3]));if(e[2]-e[0]>=360)s=-180,o=180;else if(s>o){const c=this.getClusters([s,n,180,l],t),p=this.getClusters([-180,n,o,l],t);return c.concat(p)}const u=this.trees[this._limitZoom(t)],i=u.range(F(s),D(l),F(o),D(n)),h=u.data,d=[];for(const c of i){const p=this.stride*c;d.push(h[p+O]>1?me(h,p,this.clusterProps):this.points[h[p+P]])}return d}getChildren(e){const t=this._getOriginId(e),s=this._getOriginZoom(e),n="No cluster with the specified id.",o=this.trees[s];if(!o)throw new Error(n);const l=o.data;if(t*this.stride>=l.length)throw new Error(n);const u=this.options.radius/(this.options.extent*Math.pow(2,s-1)),i=l[t*this.stride],h=l[t*this.stride+1],d=o.within(i,h,u),c=[];for(const p of d){const f=p*this.stride;l[f+K]===e&&c.push(l[f+O]>1?me(l,f,this.clusterProps):this.points[l[f+P]])}if(c.length===0)throw new Error(n);return c}getLeaves(e,t,s){t=t||10,s=s||0;const n=[];return this._appendLeaves(n,e,t,s,0),n}getTile(e,t,s){const n=this.trees[this._limitZoom(e)],o=Math.pow(2,e),{extent:l,radius:u}=this.options,i=u/l,h=(s-i)/o,d=(s+1+i)/o,c={features:[]};return this._addTileFeatures(n.range((t-i)/o,h,(t+1+i)/o,d),n.data,t,s,o,c),t===0&&this._addTileFeatures(n.range(1-i/o,h,1,d),n.data,o,s,o,c),t===o-1&&this._addTileFeatures(n.range(0,h,i/o,d),n.data,-1,s,o,c),c.features.length?c:null}getClusterExpansionZoom(e){let t=this._getOriginZoom(e)-1;for(;t<=this.options.maxZoom;){const s=this.getChildren(e);if(t++,s.length!==1)break;e=s[0].properties.cluster_id}return t}_appendLeaves(e,t,s,n,o){const l=this.getChildren(t);for(const u of l){const i=u.properties;if(i&&i.cluster?o+i.point_count<=n?o+=i.point_count:o=this._appendLeaves(e,i.cluster_id,s,n,o):o<n?o++:e.push(u),e.length===s)break}return o}_createTree(e){const t=new G(e.length/this.stride|0,this.options.nodeSize,Float32Array);for(let s=0;s<e.length;s+=this.stride)t.add(e[s],e[s+1]);return t.finish(),t.data=e,t}_addTileFeatures(e,t,s,n,o,l){for(const u of e){const i=u*this.stride,h=t[i+O]>1;let d,c,p;if(h)d=ge(t,i,this.clusterProps),c=t[i],p=t[i+1];else{const g=this.points[t[i+P]];d=g.properties;const[y,v]=g.geometry.coordinates;c=F(y),p=D(v)}const f={type:1,geometry:[[Math.round(this.options.extent*(c*o-s)),Math.round(this.options.extent*(p*o-n))]],tags:d};let m;h||this.options.generateId?m=t[i+P]:m=this.points[t[i+P]].id,m!==void 0&&(f.id=m),l.features.push(f)}}_limitZoom(e){return Math.max(this.options.minZoom,Math.min(Math.floor(+e),this.options.maxZoom+1))}_cluster(e,t){const{radius:s,extent:n,reduce:o,minPoints:l}=this.options,u=s/(n*Math.pow(2,t)),i=e.data,h=[],d=this.stride;for(let c=0;c<i.length;c+=d){if(i[c+x]<=t)continue;i[c+x]=t;const p=i[c],f=i[c+1],m=e.within(i[c],i[c+1],u),g=i[c+O];let y=g;for(const v of m){const k=v*d;i[k+x]>t&&(y+=i[k+O])}if(y>g&&y>=l){let v=p*g,k=f*g,M,j=-1;const q=((c/d|0)<<5)+(t+1)+this.points.length;for(const z of m){const b=z*d;if(i[b+x]<=t)continue;i[b+x]=t;const N=i[b+O];v+=i[b]*N,k+=i[b+1]*N,i[b+K]=q,o&&(M||(M=this._map(i,c,!0),j=this.clusterProps.length,this.clusterProps.push(M)),o(M,this._map(i,b)))}i[c+K]=q,h.push(v/y,k/y,1/0,q,-1,y),o&&h.push(j)}else{for(let v=0;v<d;v++)h.push(i[c+v]);if(y>1)for(const v of m){const k=v*d;if(!(i[k+x]<=t)){i[k+x]=t;for(let M=0;M<d;M++)h.push(i[k+M])}}}}return h}_getOriginId(e){return e-this.points.length>>5}_getOriginZoom(e){return(e-this.points.length)%32}_map(e,t,s){if(e[t+O]>1){const l=this.clusterProps[e[t+pe]];return s?Object.assign({},l):l}const n=this.points[e[t+P]].properties,o=this.options.map(n);return s&&o===n?Object.assign({},o):o}}function me(r,e,t){return{type:"Feature",id:r[e+P],properties:ge(r,e,t),geometry:{type:"Point",coordinates:[Ve(r[e]),Ge(r[e+1])]}}}function ge(r,e,t){const s=r[e+O],n=s>=1e4?`${Math.round(s/1e3)}k`:s>=1e3?`${Math.round(s/100)/10}k`:s,o=r[e+pe],l=o===-1?{}:Object.assign({},t[o]);return Object.assign(l,{cluster:!0,cluster_id:r[e+P],point_count:s,point_count_abbreviated:n})}function F(r){return r/360+.5}function D(r){const e=Math.sin(r*Math.PI/180),t=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return t<0?0:t>1?1:t}function Ve(r){return(r-.5)*360}function Ge(r){const e=(180-r*360)*Math.PI/180;return 360*Math.atan(Math.exp(e))/Math.PI-90}/*! ***************************************************************************** | ||
Copyright (c) Microsoft Corporation. | ||
@@ -15,7 +15,7 @@ | ||
PERFORMANCE OF THIS SOFTWARE. | ||
***************************************************************************** */function Ue(s,e){var t={};for(var o in s)Object.prototype.hasOwnProperty.call(s,o)&&e.indexOf(o)<0&&(t[o]=s[o]);if(s!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,o=Object.getOwnPropertySymbols(s);n<o.length;n++)e.indexOf(o[n])<0&&Object.prototype.propertyIsEnumerable.call(s,o[n])&&(t[o[n]]=s[o[n]]);return t}class Z{constructor({markers:e,position:t}){this.markers=e,t&&(t instanceof google.maps.LatLng?this._position=t:this._position=new google.maps.LatLng(t))}get bounds(){if(!(this.markers.length===0&&!this._position))return this.markers.reduce((e,t)=>e.extend(t.getPosition()),new google.maps.LatLngBounds(this._position,this._position))}get position(){return this._position||this.bounds.getCenter()}get count(){return this.markers.filter(e=>e.getVisible()).length}push(e){this.markers.push(e)}delete(){this.marker&&(this.marker.setMap(null),delete this.marker),this.markers.length=0}}class Fe{constructor({maxZoom:e=16}){this.maxZoom=e}noop({markers:e}){return Ge(e)}}const Ge=s=>s.map(t=>new Z({position:t.getPosition(),markers:[t]}));class Ve extends Fe{constructor(e){var{maxZoom:t,radius:o=60}=e,n=Ue(e,["maxZoom","radius"]);super({maxZoom:t}),this.superCluster=new Ae(Object.assign({maxZoom:this.maxZoom,radius:o},n)),this.state={zoom:null}}calculate(e){let t=!1;if(!x(e.markers,this.markers)){t=!0,this.markers=[...e.markers];const n=this.markers.map(r=>({type:"Feature",geometry:{type:"Point",coordinates:[r.getPosition().lng(),r.getPosition().lat()]},properties:{marker:r}}));this.superCluster.load(n)}const o={zoom:e.map.getZoom()};return t||this.state.zoom>this.maxZoom&&o.zoom>this.maxZoom||(t=t||!x(this.state,o)),this.state=o,t&&(this.clusters=this.cluster(e)),{clusters:this.clusters,changed:t}}cluster({map:e}){return this.superCluster.getClusters([-180,-90,180,90],Math.round(e.getZoom())).map(this.transformCluster.bind(this))}transformCluster({geometry:{coordinates:[e,t]},properties:o}){if(o.cluster)return new Z({markers:this.superCluster.getLeaves(o.cluster_id,1/0).map(n=>n.properties.marker),position:new google.maps.LatLng({lat:t,lng:e})});{const n=o.marker;return new Z({markers:[n],position:n.getPosition()})}}}class He{constructor(e,t){this.markers={sum:e.length};const o=t.map(r=>r.count),n=o.reduce((r,l)=>r+l,0);this.clusters={count:t.length,markers:{mean:n/t.length,sum:n,min:Math.min(...o),max:Math.max(...o)}}}}class Ke{render({count:e,position:t},o){const n=e>Math.max(10,o.clusters.markers.mean)?"#ff0000":"#0000ff",r=window.btoa(` | ||
<svg fill="${n}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 240"> | ||
<circle cx="120" cy="120" opacity=".6" r="70" /> | ||
<circle cx="120" cy="120" opacity=".3" r="90" /> | ||
<circle cx="120" cy="120" opacity=".2" r="110" /> | ||
</svg>`);return new google.maps.Marker({position:t,icon:{url:`data:image/svg+xml;base64,${r}`,scaledSize:new google.maps.Size(45,45)},label:{text:String(e),color:"rgba(255,255,255,0.9)",fontSize:"12px"},title:`Cluster of ${e} markers`,zIndex:Number(google.maps.Marker.MAX_ZINDEX)+e})}}function We(s,e){for(let t in e.prototype)s.prototype[t]=e.prototype[t]}class z{constructor(){We(z,google.maps.OverlayView)}}var S;(function(s){s.CLUSTERING_BEGIN="clusteringbegin",s.CLUSTERING_END="clusteringend",s.CLUSTER_CLICK="click"})(S||(S={}));const Je=(s,e,t)=>{t.fitBounds(e.bounds)};class Xe extends z{constructor({map:e,markers:t=[],algorithm:o=new Ve({}),renderer:n=new Ke,onClusterClick:r=Je}){super(),this.markers=[...t],this.clusters=[],this.algorithm=o,this.renderer=n,this.onClusterClick=r,e&&this.setMap(e)}addMarker(e,t){this.markers.includes(e)||(this.markers.push(e),t||this.render())}addMarkers(e,t){e.forEach(o=>{this.addMarker(o,!0)}),t||this.render()}removeMarker(e,t){const o=this.markers.indexOf(e);return o===-1?!1:(e.setMap(null),this.markers.splice(o,1),t||this.render(),!0)}removeMarkers(e,t){let o=!1;return e.forEach(n=>{o=this.removeMarker(n,!0)||o}),o&&!t&&this.render(),o}clearMarkers(e){this.markers.length=0,e||this.render()}render(){const e=this.getMap();if(e instanceof google.maps.Map&&this.getProjection()){google.maps.event.trigger(this,S.CLUSTERING_BEGIN,this);const{clusters:t,changed:o}=this.algorithm.calculate({markers:this.markers,map:e,mapCanvasProjection:this.getProjection()});(o||o==null)&&(this.reset(),this.clusters=t,this.renderClusters()),google.maps.event.trigger(this,S.CLUSTERING_END,this)}}onAdd(){this.idleListener=this.getMap().addListener("idle",this.render.bind(this)),this.render()}onRemove(){google.maps.event.removeListener(this.idleListener),this.reset()}reset(){this.markers.forEach(e=>e.setMap(null)),this.clusters.forEach(e=>e.delete()),this.clusters=[]}renderClusters(){const e=new He(this.markers,this.clusters),t=this.getMap();this.clusters.forEach(o=>{o.markers.length===1?o.marker=o.markers[0]:(o.marker=this.renderer.render(o,e),this.onClusterClick&&o.marker.addListener("click",n=>{google.maps.event.trigger(this,S.CLUSTER_CLICK,o),this.onClusterClick(n,o,t)})),o.marker.setMap(t)})}}const ie=Object.values(S),Ye=i.defineComponent({name:"MarkerCluster",props:{options:{type:Object,default:()=>({})}},emits:ie,setup(s,{emit:e,expose:t,slots:o}){const n=i.ref(),r=i.inject(k,i.ref()),l=i.inject(M,i.ref());return i.provide(F,n),i.watch(r,()=>{r.value&&(n.value=i.markRaw(new Xe({map:r.value,...s.options})),ie.forEach(c=>{var a;(a=n.value)==null||a.addListener(c,p=>e(c,p))}))},{immediate:!0}),i.onBeforeUnmount(()=>{var c;n.value&&((c=l.value)==null||c.event.clearInstanceListeners(n.value),n.value.clearMarkers(),n.value.setMap(null))}),t({markerCluster:n}),()=>{var c;return(c=o.default)==null?void 0:c.call(o)}}}),Qe=i.defineComponent({inheritAttrs:!1,props:{options:{type:Object,required:!0}},setup(s,{slots:e,emit:t,expose:o}){const n=i.ref(),r=i.computed(()=>{var a;return(a=e.default)==null?void 0:a.call(e).some(p=>p.type!==i.Comment)}),l=i.computed(()=>({...s.options,element:n.value})),c=P(j,[],l,t);return o({customMarker:c}),{customMarkerRef:n,customMarker:c,hasSlotContent:r}}}),lt="",et={key:0,class:"custom-marker-wrapper"};function tt(s,e,t,o,n,r){return s.hasSlotContent?(i.openBlock(),i.createElementBlock("div",et,[i.createElementVNode("div",i.mergeProps({ref:"customMarkerRef",style:{cursor:s.$attrs.onClick?"pointer":void 0}},s.$attrs),[i.renderSlot(s.$slots,"default",{},void 0,!0)],16)])):i.createCommentVNode("",!0)}const nt=$(Qe,[["render",tt],["__scopeId","data-v-cab807c1"]]),ot=i.defineComponent({name:"HeatmapLayer",props:{options:{type:Object,default:()=>({})}},setup(s){const e=i.ref(),t=i.inject(k,i.ref()),o=i.inject(M,i.ref());return i.watch([t,()=>s.options],([n,r],[l,c])=>{var p;const a=!x(r,c)||t.value!==l;if(t.value&&o.value&&a){const d=structuredClone(r);if(d.data&&!(d.data instanceof o.value.MVCArray)){const u=o.value.LatLng;d.data=(p=d.data)==null?void 0:p.map(f=>f instanceof u||"location"in f&&(f.location instanceof u||f.location===null)?f:"location"in f?{...f,location:new u(f.location)}:new u(f))}e.value?e.value.setOptions(d):e.value=i.markRaw(new o.value.visualization.HeatmapLayer({...d,map:t.value}))}},{immediate:!0}),i.onBeforeUnmount(()=>{e.value&&e.value.setMap(null)}),{heatmapLayer:e}},render:()=>null});C.Circle=Me,C.CustomControl=xe,C.CustomMarker=nt,C.GoogleMap=me,C.HeatmapLayer=ot,C.InfoWindow=je,C.Marker=ve,C.MarkerCluster=Ye,C.Polygon=we,C.Polyline=_e,C.Rectangle=be,Object.defineProperty(C,Symbol.toStringTag,{value:"Module"})}); | ||
***************************************************************************** */function J(r,e){var t={};for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&e.indexOf(s)<0&&(t[s]=r[s]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,s=Object.getOwnPropertySymbols(r);n<s.length;n++)e.indexOf(s[n])<0&&Object.prototype.propertyIsEnumerable.call(r,s[n])&&(t[s[n]]=r[s[n]]);return t}class C{static isAdvancedMarkerAvailable(e){return google.maps.marker&&e.getMapCapabilities().isAdvancedMarkersAvailable===!0}static isAdvancedMarker(e){return google.maps.marker&&e instanceof google.maps.marker.AdvancedMarkerElement}static setMap(e,t){this.isAdvancedMarker(e)?e.map=t:e.setMap(t)}static getPosition(e){if(this.isAdvancedMarker(e)){if(e.position){if(e.position instanceof google.maps.LatLng)return e.position;if(e.position.lat&&e.position.lng)return new google.maps.LatLng(e.position.lat,e.position.lng)}return new google.maps.LatLng(null)}return e.getPosition()}static getVisible(e){return this.isAdvancedMarker(e)?!0:e.getVisible()}}class ${constructor({markers:e,position:t}){this.markers=e,t&&(t instanceof google.maps.LatLng?this._position=t:this._position=new google.maps.LatLng(t))}get bounds(){if(this.markers.length===0&&!this._position)return;const e=new google.maps.LatLngBounds(this._position,this._position);for(const t of this.markers)e.extend(C.getPosition(t));return e}get position(){return this._position||this.bounds.getCenter()}get count(){return this.markers.filter(e=>C.getVisible(e)).length}push(e){this.markers.push(e)}delete(){this.marker&&(C.setMap(this.marker,null),this.marker=void 0),this.markers.length=0}}const He=(r,e,t,s)=>{const n=ye(r.getBounds(),e,s);return t.filter(o=>n.contains(C.getPosition(o)))},ye=(r,e,t)=>{const{northEast:s,southWest:n}=We(r,e),o=Ke({northEast:s,southWest:n},t);return Je(o,e)},we=(r,e,t)=>{const s=ye(r,e,t),n=s.getNorthEast(),o=s.getSouthWest();return[o.lng(),o.lat(),n.lng(),n.lat()]},We=(r,e)=>({northEast:e.fromLatLngToDivPixel(r.getNorthEast()),southWest:e.fromLatLngToDivPixel(r.getSouthWest())}),Ke=({northEast:r,southWest:e},t)=>(r.x+=t,r.y-=t,e.x-=t,e.y+=t,{northEast:r,southWest:e}),Je=({northEast:r,southWest:e},t)=>{const s=t.fromDivPixelToLatLng(e),n=t.fromDivPixelToLatLng(r);return new google.maps.LatLngBounds(s,n)};class ve{constructor({maxZoom:e=16}){this.maxZoom=e}noop({markers:e}){return Xe(e)}}class Ye extends ve{constructor(e){var{viewportPadding:t=60}=e,s=J(e,["viewportPadding"]);super(s),this.viewportPadding=60,this.viewportPadding=t}calculate({markers:e,map:t,mapCanvasProjection:s}){return t.getZoom()>=this.maxZoom?{clusters:this.noop({markers:e}),changed:!1}:{clusters:this.cluster({markers:He(t,s,e,this.viewportPadding),map:t,mapCanvasProjection:s})}}}const Xe=r=>r.map(t=>new $({position:C.getPosition(t),markers:[t]}));class Qe extends ve{constructor(e){var{maxZoom:t,radius:s=60}=e,n=J(e,["maxZoom","radius"]);super({maxZoom:t}),this.state={zoom:-1},this.superCluster=new fe(Object.assign({maxZoom:this.maxZoom,radius:s},n))}calculate(e){let t=!1;const s={zoom:e.map.getZoom()};if(!S(e.markers,this.markers)){t=!0,this.markers=[...e.markers];const n=this.markers.map(o=>{const l=C.getPosition(o);return{type:"Feature",geometry:{type:"Point",coordinates:[l.lng(),l.lat()]},properties:{marker:o}}});this.superCluster.load(n)}return t||(this.state.zoom<=this.maxZoom||s.zoom<=this.maxZoom)&&(t=!S(this.state,s)),this.state=s,t&&(this.clusters=this.cluster(e)),{clusters:this.clusters,changed:t}}cluster({map:e}){return this.superCluster.getClusters([-180,-90,180,90],Math.round(e.getZoom())).map(t=>this.transformCluster(t))}transformCluster({geometry:{coordinates:[e,t]},properties:s}){if(s.cluster)return new $({markers:this.superCluster.getLeaves(s.cluster_id,1/0).map(o=>o.properties.marker),position:{lat:t,lng:e}});const n=s.marker;return new $({markers:[n],position:C.getPosition(n)})}}class et extends Ye{constructor(e){var{maxZoom:t,radius:s=60,viewportPadding:n=60}=e,o=J(e,["maxZoom","radius","viewportPadding"]);super({maxZoom:t,viewportPadding:n}),this.superCluster=new fe(Object.assign({maxZoom:this.maxZoom,radius:s},o)),this.state={zoom:-1,view:[0,0,0,0]}}calculate(e){const t={zoom:Math.round(e.map.getZoom()),view:we(e.map.getBounds(),e.mapCanvasProjection,this.viewportPadding)};let s=!S(this.state,t);if(!S(e.markers,this.markers)){s=!0,this.markers=[...e.markers];const n=this.markers.map(o=>{const l=C.getPosition(o);return{type:"Feature",geometry:{type:"Point",coordinates:[l.lng(),l.lat()]},properties:{marker:o}}});this.superCluster.load(n)}return s&&(this.clusters=this.cluster(e),this.state=t),{clusters:this.clusters,changed:s}}cluster({map:e,mapCanvasProjection:t}){const s={zoom:Math.round(e.getZoom()),view:we(e.getBounds(),t,this.viewportPadding)};return this.superCluster.getClusters(s.view,s.zoom).map(n=>this.transformCluster(n))}transformCluster({geometry:{coordinates:[e,t]},properties:s}){if(s.cluster)return new $({markers:this.superCluster.getLeaves(s.cluster_id,1/0).map(o=>o.properties.marker),position:{lat:t,lng:e}});const n=s.marker;return new $({markers:[n],position:C.getPosition(n)})}}class tt{constructor(e,t){this.markers={sum:e.length};const s=t.map(o=>o.count),n=s.reduce((o,l)=>o+l,0);this.clusters={count:t.length,markers:{mean:n/t.length,sum:n,min:Math.min(...s),max:Math.max(...s)}}}}class st{render({count:e,position:t},s,n){const l=`<svg fill="${e>Math.max(10,s.clusters.markers.mean)?"#ff0000":"#0000ff"}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 240" width="50" height="50"> | ||
<circle cx="120" cy="120" opacity=".6" r="70" /> | ||
<circle cx="120" cy="120" opacity=".3" r="90" /> | ||
<circle cx="120" cy="120" opacity=".2" r="110" /> | ||
<text x="50%" y="50%" style="fill:#fff" text-anchor="middle" font-size="50" dominant-baseline="middle" font-family="roboto,arial,sans-serif">${e}</text> | ||
</svg>`,u=`Cluster of ${e} markers`,i=Number(google.maps.Marker.MAX_ZINDEX)+e;if(C.isAdvancedMarkerAvailable(n)){const d=document.createElement("div");d.innerHTML=l;const c=d.firstElementChild;c.setAttribute("transform","translate(0 25)");const p={map:n,position:t,zIndex:i,title:u,content:c};return new google.maps.marker.AdvancedMarkerElement(p)}const h={position:t,zIndex:i,title:u,icon:{url:`data:image/svg+xml;base64,${btoa(l)}`,anchor:new google.maps.Point(25,25)}};return new google.maps.Marker(h)}}function nt(r,e){for(let t in e.prototype)r.prototype[t]=e.prototype[t]}class Y{constructor(){nt(Y,google.maps.OverlayView)}}var I;(function(r){r.CLUSTERING_BEGIN="clusteringbegin",r.CLUSTERING_END="clusteringend",r.CLUSTER_CLICK="click"})(I||(I={}));const rt=(r,e,t)=>{t.fitBounds(e.bounds)};class ot extends Y{constructor({map:e,markers:t=[],algorithmOptions:s={},algorithm:n=new Qe(s),renderer:o=new st,onClusterClick:l=rt}){super(),this.markers=[...t],this.clusters=[],this.algorithm=n,this.renderer=o,this.onClusterClick=l,e&&this.setMap(e)}addMarker(e,t){this.markers.includes(e)||(this.markers.push(e),t||this.render())}addMarkers(e,t){e.forEach(s=>{this.addMarker(s,!0)}),t||this.render()}removeMarker(e,t){const s=this.markers.indexOf(e);return s===-1?!1:(C.setMap(e,null),this.markers.splice(s,1),t||this.render(),!0)}removeMarkers(e,t){let s=!1;return e.forEach(n=>{s=this.removeMarker(n,!0)||s}),s&&!t&&this.render(),s}clearMarkers(e){this.markers.length=0,e||this.render()}render(){const e=this.getMap();if(e instanceof google.maps.Map&&e.getProjection()){google.maps.event.trigger(this,I.CLUSTERING_BEGIN,this);const{clusters:t,changed:s}=this.algorithm.calculate({markers:this.markers,map:e,mapCanvasProjection:this.getProjection()});if(s||s==null){const n=new Set;for(const l of t)l.markers.length==1&&n.add(l.markers[0]);const o=[];for(const l of this.clusters)l.marker!=null&&(l.markers.length==1?n.has(l.marker)||C.setMap(l.marker,null):o.push(l.marker));this.clusters=t,this.renderClusters(),requestAnimationFrame(()=>o.forEach(l=>C.setMap(l,null)))}google.maps.event.trigger(this,I.CLUSTERING_END,this)}}onAdd(){this.idleListener=this.getMap().addListener("idle",this.render.bind(this)),this.render()}onRemove(){google.maps.event.removeListener(this.idleListener),this.reset()}reset(){this.markers.forEach(e=>C.setMap(e,null)),this.clusters.forEach(e=>e.delete()),this.clusters=[]}renderClusters(){const e=new tt(this.markers,this.clusters),t=this.getMap();this.clusters.forEach(s=>{s.markers.length===1?s.marker=s.markers[0]:(s.marker=this.renderer.render(s,e,t),s.markers.forEach(n=>C.setMap(n,null)),this.onClusterClick&&s.marker.addListener("click",n=>{google.maps.event.trigger(this,I.CLUSTER_CLICK,s),this.onClusterClick(n,s,t)})),C.setMap(s.marker,t)})}}const ke=Object.values(I),it=a.defineComponent({name:"MarkerCluster",props:{options:{type:Object,default:()=>({})}},emits:ke,setup(r,{emit:e,expose:t,slots:s}){const n=a.ref(),o=a.inject(_,a.ref()),l=a.inject(L,a.ref());return a.provide(ee,n),a.watch(o,()=>{o.value&&(n.value=a.markRaw(new ot({map:o.value,algorithm:new et(r.options.algorithmOptions??{}),...r.options})),ke.forEach(u=>{var i;(i=n.value)==null||i.addListener(u,h=>e(u,h))}))},{immediate:!0}),a.onBeforeUnmount(()=>{var u;n.value&&((u=l.value)==null||u.event.clearInstanceListeners(n.value),n.value.clearMarkers(),n.value.setMap(null))}),t({markerCluster:n}),()=>{var u;return(u=s.default)==null?void 0:u.call(s)}}}),at=a.defineComponent({inheritAttrs:!1,props:{options:{type:Object,required:!0}},setup(r,{slots:e,emit:t,expose:s}){const n=a.ref(),o=a.computed(()=>{var i;return(i=e.default)==null?void 0:i.call(e).some(h=>h.type!==a.Comment)}),l=a.computed(()=>({...r.options,element:n.value})),u=A(Z,[],l,t);return s({customMarker:u}),{customMarkerRef:n,customMarker:u,hasSlotContent:o}}}),gt="",lt={key:0,class:"custom-marker-wrapper"};function ct(r,e,t,s,n,o){return r.hasSlotContent?(a.openBlock(),a.createElementBlock("div",lt,[a.createElementVNode("div",a.mergeProps({ref:"customMarkerRef",style:{cursor:r.$attrs.onClick?"pointer":void 0}},r.$attrs),[a.renderSlot(r.$slots,"default",{},void 0,!0)],16)])):a.createCommentVNode("",!0)}const ut=U(at,[["render",ct],["__scopeId","data-v-cab807c1"]]),dt=a.defineComponent({name:"HeatmapLayer",props:{options:{type:Object,default:()=>({})}},setup(r){const e=a.ref(),t=a.inject(_,a.ref()),s=a.inject(L,a.ref());return a.watch([t,()=>r.options],([n,o],[l,u])=>{var h;const i=!S(o,u)||t.value!==l;if(t.value&&s.value&&i){const d=structuredClone(o);if(d.data&&!(d.data instanceof s.value.MVCArray)){const c=s.value.LatLng;d.data=(h=d.data)==null?void 0:h.map(p=>p instanceof c||"location"in p&&(p.location instanceof c||p.location===null)?p:"location"in p?{...p,location:new c(p.location)}:new c(p))}e.value?e.value.setOptions(d):e.value=a.markRaw(new s.value.visualization.HeatmapLayer({...d,map:t.value}))}},{immediate:!0}),a.onBeforeUnmount(()=>{e.value&&e.value.setMap(null)}),{heatmapLayer:e}},render:()=>null});w.Circle=Be,w.CustomControl=Ne,w.CustomMarker=ut,w.GoogleMap=Oe,w.HeatmapLayer=dt,w.InfoWindow=De,w.Marker=Te,w.MarkerCluster=it,w.Polygon=Ie,w.Polyline=Ae,w.Rectangle=je,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})}); |
{ | ||
"name": "vue3-google-map", | ||
"version": "0.16.0", | ||
"version": "0.17.0", | ||
"license": "MIT", | ||
@@ -55,3 +55,3 @@ "repository": { | ||
"@googlemaps/js-api-loader": "^1.12.11", | ||
"@googlemaps/markerclusterer": "^2.0.6", | ||
"@googlemaps/markerclusterer": "^2.4.0", | ||
"fast-deep-equal": "^3.1.3", | ||
@@ -58,0 +58,0 @@ "vite-plugin-css-injected-by-js": "^3.2.1" |
@@ -43,3 +43,3 @@ # vue3-google-map | ||
Include the following script tag in your `index.html` (make sure to include it after Vue 3). | ||
Include the following script tag in your `index.html` (make sure to include it after Vue 3's global build). | ||
@@ -50,2 +50,6 @@ ```html | ||
All the map components are available on the `Vue3GoogeMap` global variable. | ||
[Codepen demo](https://codepen.io/husamibrahim/pen/poQXZbR) | ||
### Your First Map | ||
@@ -52,0 +56,0 @@ |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
218437
4133
810
0