vue3-google-map 0.10.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cjs/index.js +75 -22
- package/dist/es/index.js +74 -24
- package/dist/types/components/InfoWindow.vue.d.ts +1 -1
- package/dist/types/components/MarkerCluster.d.ts +15 -0
- package/dist/types/components/index.d.ts +1 -0
- package/dist/types/shared/index.d.ts +5 -3
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -43,7 +43,7 @@ Include the following script tag in your `index.html` (make sure to include it a
|
|
|
43
43
|
|
|
44
44
|
### Your First Map
|
|
45
45
|
|
|
46
|
-
To construct a map using `vue3-google-map` you'll need to use the base `GoogleMap` component which receives your [Google Maps API key](https://developers.google.com/maps/documentation/javascript/get-api-key), styles (e.g. setting width and height), and any [MapOptions](https://developers.google.com/maps/documentation/javascript/reference/map#MapOptions) to configure your map ([see this](https://github.com/inocan-group/vue3-google-map/blob/develop/src/components/GoogleMap.vue#L30-L209) for
|
|
46
|
+
To construct a map using `vue3-google-map` you'll need to use the base `GoogleMap` component which receives your [Google Maps API key](https://developers.google.com/maps/documentation/javascript/get-api-key), styles (e.g. setting width and height), and any [MapOptions](https://developers.google.com/maps/documentation/javascript/reference/map#MapOptions) to configure your map ([see this](https://github.com/inocan-group/vue3-google-map/blob/develop/src/components/GoogleMap.vue#L30-L209) for all the supported `MapOptions`).
|
|
47
47
|
Other map features can be added to your map by passing map subcomponents ([Marker](#marker), [Polyline](#polyline), [Polygon](#polygon), [Rectangle](#rectangle), [Circle](#circle), [InfoWindow](#info-window), or [CustomControl](#custom-controls)) to the default slot of the `GoogleMap` component.
|
|
48
48
|
|
|
49
49
|
```vue
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,32 +1,85 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/*
|
|
2
|
+
*****************************************************************************
|
|
3
|
+
Copyright (c) Microsoft Corporation.
|
|
4
|
+
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
+
purpose with or without fee is hereby granted.
|
|
7
|
+
|
|
8
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
9
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
10
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
11
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
12
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
13
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
+
*****************************************************************************/
|
|
16
|
+
'use strict';Object.defineProperty(exports,"__esModule",{value:!0});var vue=require("vue");let mapSymbol=Symbol("map"),apiSymbol=Symbol("api"),markerSymbol=Symbol("marker"),markerClusterSymbol=Symbol("markerCluster"),mapTilesLoadedSymbol=Symbol("mapTilesLoaded"),loaderInstance=vue.ref(null),polylineEvents="click dblclick drag dragend dragstart mousedown mousemove mouseout mouseover mouseup rightclick".split(" ");
|
|
17
|
+
var fastDeepEqual$1=function equal(a,b){if(a===b)return!0;if(a&&b&&"object"==typeof a&&"object"==typeof b){if(a.constructor!==b.constructor)return!1;var d;if(Array.isArray(a)){var e=a.length;if(e!=b.length)return!1;for(d=e;0!==d--;)if(!equal(a[d],b[d]))return!1;return!0}if(a.constructor===RegExp)return a.source===b.source&&a.flags===b.flags;if(a.valueOf!==Object.prototype.valueOf)return a.valueOf()===b.valueOf();if(a.toString!==Object.prototype.toString)return a.toString()===b.toString();var g=Object.keys(a);
|
|
18
|
+
e=g.length;if(e!==Object.keys(b).length)return!1;for(d=e;0!==d--;)if(!Object.prototype.hasOwnProperty.call(b,g[d]))return!1;for(d=e;0!==d--;)if(e=g[d],!equal(a[e],b[e]))return!1;return!0}return a!==a&&b!==b};let DEFAULT_ID="__googleMapsScriptId";
|
|
19
|
+
class Loader{constructor({apiKey:a,channel:b,client:c,id:d=DEFAULT_ID,libraries:e=[],language:g,region:f,version:k,mapIds:l,nonce:h,retries:m=3,url:n="https://maps.googleapis.com/maps/api/js"}){this.CALLBACK="__googleMapsCallback";this.callbacks=[];this.loading=this.done=!1;this.errors=[];this.version=k;this.apiKey=a;this.channel=b;this.client=c;this.id=d||DEFAULT_ID;this.libraries=e;this.language=g;this.region=f;this.mapIds=l;this.nonce=h;this.retries=m;this.url=n;if(Loader.instance){if(!fastDeepEqual$1(this.options,
|
|
5
20
|
Loader.instance.options))throw Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(Loader.instance.options)}`);return Loader.instance}Loader.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>=
|
|
6
21
|
this.retries+1}createUrl(){let a=this.url;a+=`?callback=${this.CALLBACK}`;this.apiKey&&(a+=`&key=${this.apiKey}`);this.channel&&(a+=`&channel=${this.channel}`);this.client&&(a+=`&client=${this.client}`);0<this.libraries.length&&(a+=`&libraries=${this.libraries.join(",")}`);this.language&&(a+=`&language=${this.language}`);this.region&&(a+=`®ion=${this.region}`);this.version&&(a+=`&v=${this.version}`);this.mapIds&&(a+=`&map_ids=${this.mapIds.join(",")}`);return a}deleteScript(){let a=document.getElementById(this.id);
|
|
7
|
-
a&&a.remove()}load(){return this.loadPromise()}loadPromise(){return new Promise((a,b)=>{this.loadCallback(
|
|
22
|
+
a&&a.remove()}load(){return this.loadPromise()}loadPromise(){return new Promise((a,b)=>{this.loadCallback(c=>{c?b(c.error):a(window.google)})})}loadCallback(a){this.callbacks.push(a);this.execute()}setScript(){if(document.getElementById(this.id))this.callback();else{var a=this.createUrl(),b=document.createElement("script");b.id=this.id;b.type="text/javascript";b.src=a;b.onerror=this.loadErrorCallback.bind(this);b.defer=!0;b.async=!0;this.nonce&&(b.nonce=this.nonce);document.head.appendChild(b)}}reset(){this.deleteScript();
|
|
8
23
|
this.loading=this.done=!1;this.errors=[];this.onerrorEvent=null}resetIfRetryingFailed(){this.failed&&this.reset()}loadErrorCallback(a){this.errors.push(a);this.errors.length<=this.retries?(a=this.errors.length*Math.pow(2,this.errors.length),console.log(`Failed to load Google Maps script, retrying in ${a} ms.`),setTimeout(()=>{this.deleteScript();this.setScript()},a)):(this.onerrorEvent=a,this.callback())}setCallback(){window.__googleMapsCallback=this.callback.bind(this)}callback(){this.done=!0;this.loading=
|
|
9
24
|
!1;this.callbacks.forEach(a=>{a(this.onerrorEvent)});this.callbacks=[]}execute(){this.resetIfRetryingFailed();this.done?this.callback():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()):this.loading||(this.loading=!0,this.setCallback(),this.setScript())}}let mapEvents="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".split(" ");
|
|
10
25
|
var _sfc_main$2=vue.defineComponent({props:{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,
|
|
11
26
|
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,
|
|
12
27
|
required:!1},mapTypeId:{type:[Number,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,
|
|
13
|
-
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:mapEvents,setup(a,{emit:b}){let
|
|
14
|
-
|
|
15
|
-
fullscreenControlOptions:
|
|
16
|
-
|
|
17
|
-
(
|
|
18
|
-
function styleInject(a,b){void 0===b&&(b={});b=b.insertAt;if(a&&"undefined"!==typeof document){var
|
|
19
|
-
vue.pushScopeId("data-v-177d06e3");let _hoisted_1$2={ref:"mapRef",class:"mapdiv"};vue.popScopeId();let _sfc_render$2=_withId$1((a,b,
|
|
20
|
-
let useSetupMapComponent=(a,b,
|
|
21
|
-
a?void 0:a.event.clearInstanceListeners(
|
|
22
|
-
var Marker=vue.defineComponent({name:"Marker",props:{options:{type:Object,required:!0}},emits:markerEvents,setup(a,{emit:b,expose:
|
|
28
|
+
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:mapEvents,setup(a,{emit:b}){let c=vue.ref(null),d=vue.ref(!1),e=vue.ref(null),g=vue.ref(null),
|
|
29
|
+
f=vue.ref(!1);vue.provide(mapSymbol,e);vue.provide(apiSymbol,g);vue.provide(mapTilesLoadedSymbol,f);let k=()=>{const b={...a};Object.keys(b).forEach(a=>{void 0===b[a]&&delete b[a]});var c=a=>{var b;return a?{position:null===(b=g.value)||void 0===b?void 0:b.ControlPosition[a]}:{}};c={scaleControlOptions:a.scaleControlStyle?{style:a.scaleControlStyle}:{},panControlOptions:c(a.panControlPosition),zoomControlOptions:c(a.zoomControlPosition),rotateControlOptions:c(a.rotateControlPosition),streetViewControlOptions:c(a.streetViewControlPosition),
|
|
30
|
+
fullscreenControlOptions:c(a.fullscreenControlPosition),disableDefaultUI:a.disableDefaultUi};return{...b,...c}},l=vue.watch([g,e],([a,b])=>{a&&b&&(a.event.addListenerOnce(b,"tilesloaded",()=>{f.value=!0}),setTimeout(l,0))},{immediate:!0}),h=()=>{try{const {apiKey:b,region:c,version:d,language:e,libraries:f}=a;loaderInstance.value=new Loader({apiKey:b,region:c,version:d,language:e,libraries:f})}catch(m){console.error(m)}};vue.onMounted(()=>{h();loaderInstance.value.load().then(()=>{g.value=google.maps;
|
|
31
|
+
e.value=new google.maps.Map(c.value,k());mapEvents.forEach(a=>{var c;null===(c=e.value)||void 0===c?void 0:c.addListener(a,c=>b(a,c))});d.value=!0;let f=Object.keys(a).filter(a=>!["center","zoom"].includes(a)).map(b=>vue.toRef(a,b));vue.watch([()=>a.center,()=>a.zoom,...f],([a,b],[c,d])=>{var f,h,g;let {center:m,zoom:l,...n}=k();null===(f=e.value)||void 0===f?void 0:f.setOptions(n);void 0!==b&&b!==d&&(null===(h=e.value)||void 0===h?void 0:h.setZoom(b));b=!c||a.lng!==c.lng||a.lat!==c.lat;a&&b&&(null===
|
|
32
|
+
(g=e.value)||void 0===g?void 0:g.panTo(a))})})});vue.onBeforeUnmount(()=>{var a;f.value=!1;e.value&&(null===(a=g.value)||void 0===a?void 0:a.event.clearInstanceListeners(e.value))});return{mapRef:c,ready:d,map:e,api:g,mapTilesLoaded:f}}});
|
|
33
|
+
function styleInject(a,b){void 0===b&&(b={});b=b.insertAt;if(a&&"undefined"!==typeof document){var c=document.head||document.getElementsByTagName("head")[0],d=document.createElement("style");d.type="text/css";"top"===b?c.firstChild?c.insertBefore(d,c.firstChild):c.appendChild(d):c.appendChild(d);d.styleSheet?d.styleSheet.cssText=a:d.appendChild(document.createTextNode(a))}}var css_248z$1="\n.mapdiv[data-v-177d06e3] {\n width: 100%;\n height: 100%;\n}\n";styleInject(css_248z$1);let _withId$1=vue.withScopeId("data-v-177d06e3");
|
|
34
|
+
vue.pushScopeId("data-v-177d06e3");let _hoisted_1$2={ref:"mapRef",class:"mapdiv"};vue.popScopeId();let _sfc_render$2=_withId$1((a,b,c,d,e,g)=>(vue.openBlock(),vue.createBlock("div",null,[vue.createVNode("div",_hoisted_1$2,null,512),vue.renderSlot(a.$slots,"default",{ready:a.ready,map:a.map,api:a.api,mapTilesLoaded:a.mapTilesLoaded},void 0,!0)])));_sfc_main$2.render=_sfc_render$2;_sfc_main$2.__scopeId="data-v-177d06e3";
|
|
35
|
+
let useSetupMapComponent=(a,b,c,d)=>{let e=null;const g=vue.ref(null),f=vue.inject(mapSymbol,vue.ref()),k=vue.inject(apiSymbol,vue.ref()),l=vue.inject(markerClusterSymbol,vue.ref()),h=vue.computed(()=>!!(l.value&&k.value&&e instanceof k.value.Marker));vue.watch([f,c],(m,[n,r])=>{var q,p,t;m=JSON.stringify(c.value)!==JSON.stringify(r)||f.value!==n;f.value&&k.value&&m&&(e?(e.setOptions(c.value),h.value&&(null===(q=l.value)||void 0===q?void 0:q.removeMarker(e),null===(p=l.value)||void 0===p?void 0:p.addMarker(e))):
|
|
36
|
+
(g.value="Marker"===a?e=new k.value[a](c.value):e=new k.value[a]({...c.value,map:f.value}),h.value?null===(t=l.value)||void 0===t?void 0:t.addMarker(e):e.setMap(f.value),b.forEach(a=>{null===e||void 0===e?void 0:e.addListener(a,b=>d(a,b))})))},{immediate:!0});vue.onBeforeUnmount(()=>{var a,b;e&&(null===(a=k.value)||void 0===a?void 0:a.event.clearInstanceListeners(e),h.value?null===(b=l.value)||void 0===b?void 0:b.removeMarker(e):e.setMap(null))});return g},markerEvents="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".split(" ");
|
|
37
|
+
var Marker=vue.defineComponent({name:"Marker",props:{options:{type:Object,required:!0}},emits:markerEvents,setup(a,{emit:b,expose:c,slots:d}){a=vue.toRef(a,"options");b=useSetupMapComponent("Marker",markerEvents,a,b);vue.provide(markerSymbol,b);c({marker:b});return()=>{var a;return null===(a=d.default)||void 0===a?void 0:a.call(d)}}}),Polyline=vue.defineComponent({name:"Polyline",props:{options:{type:Object,required:!0}},emits:polylineEvents,setup(a,{emit:b}){a=vue.toRef(a,"options");return{polyline:useSetupMapComponent("Polyline",
|
|
23
38
|
polylineEvents,a,b)}},render:()=>null}),Polygon=vue.defineComponent({name:"Polygon",props:{options:{type:Object,required:!0}},emits:polylineEvents,setup(a,{emit:b}){a=vue.toRef(a,"options");return{polygon:useSetupMapComponent("Polygon",polylineEvents,a,b)}},render:()=>null});let rectangleEvents=polylineEvents.concat(["bounds_changed"]);
|
|
24
39
|
var Rectangle=vue.defineComponent({name:"Rectangle",props:{options:{type:Object,required:!0}},emits:rectangleEvents,setup(a,{emit:b}){a=vue.toRef(a,"options");return{rectangle:useSetupMapComponent("Rectangle",rectangleEvents,a,b)}},render:()=>null});let circleEvents=polylineEvents.concat(["center_changed","radius_changed"]);
|
|
25
|
-
var Circle=vue.defineComponent({name:"Circle",props:{options:{type:Object,required:!0}},emits:circleEvents,setup(a,{emit:b}){a=vue.toRef(a,"options");return{circle:useSetupMapComponent("Circle",circleEvents,a,b)}},render:()=>null}),_sfc_main$1=vue.defineComponent({props:{position:{type:String,required:!0},index:{type:Number,default:1}},emits:["content:loaded"],setup(a,{emit:b}){let
|
|
26
|
-
vue.ref(!1)),
|
|
27
|
-
a.index,b=>{b&&
|
|
40
|
+
var Circle=vue.defineComponent({name:"Circle",props:{options:{type:Object,required:!0}},emits:circleEvents,setup(a,{emit:b}){a=vue.toRef(a,"options");return{circle:useSetupMapComponent("Circle",circleEvents,a,b)}},render:()=>null}),_sfc_main$1=vue.defineComponent({props:{position:{type:String,required:!0},index:{type:Number,default:1}},emits:["content:loaded"],setup(a,{emit:b}){let c=vue.ref(null),d=vue.inject(mapSymbol,vue.ref()),e=vue.inject(apiSymbol,vue.ref()),g=vue.inject(mapTilesLoadedSymbol,
|
|
41
|
+
vue.ref(!1)),f=vue.ref(!1),k=vue.watch([g,e,c],([c,d,e])=>{d&&c&&e&&(l(a.position),f.value=!0,b("content:loaded"),setTimeout(k,0))},{immediate:!0}),l=a=>{d.value&&e.value&&c.value&&d.value.controls[e.value.ControlPosition[a]].push(c.value)},h=a=>{if(d.value&&e.value){let b=null;a=e.value.ControlPosition[a];d.value.controls[a].forEach((a,d)=>{a===c.value&&(b=d)});null!==b&&d.value.controls[a].removeAt(b)}};vue.onBeforeUnmount(()=>h(a.position));vue.watch(()=>a.position,(a,b)=>{h(b);l(a)});vue.watch(()=>
|
|
42
|
+
a.index,b=>{b&&c.value&&(c.value.index=a.index)});return{controlRef:c,showContent:f}}});let _hoisted_1$1={ref:"controlRef"};function _sfc_render$1(a,b,c,d,e,g){return vue.openBlock(),vue.createBlock(vue.Fragment,null,[vue.createCommentVNode("\n v-show must be used instead of v-if otherwise there\n would be no rendered content pushed to the map controls\n "),vue.withDirectives(vue.createVNode("div",_hoisted_1$1,[vue.renderSlot(a.$slots,"default")],512),[[vue.vShow,a.showContent]])],2112)}
|
|
28
43
|
_sfc_main$1.render=_sfc_render$1;let infoWindowEvents="closeclick content_changed domready position_changed visible zindex_changed".split(" ");
|
|
29
|
-
var _sfc_main=vue.defineComponent({props:{options:{type:Object,default:()=>({})}},emits:infoWindowEvents,setup(a,{slots:b,emit:
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
let _sfc_render=_withId((a,b,
|
|
44
|
+
var _sfc_main=vue.defineComponent({props:{options:{type:Object,default:()=>({})}},emits:infoWindowEvents,setup(a,{slots:b,emit:c}){let d,e=vue.ref(),g=vue.ref(),f=vue.inject(mapSymbol,vue.ref()),k=vue.inject(apiSymbol,vue.ref()),l=vue.inject(markerSymbol,vue.ref()),h,m=vue.computed(()=>{var a;return null===(a=b.default)||void 0===a?void 0:a.call(b).some(a=>a.type!==vue.Comment)});vue.onMounted(()=>{vue.watch([f,()=>a.options],([,a],[b,q])=>{b=JSON.stringify(a)!==JSON.stringify(q)||f.value!==b;f.value&&
|
|
45
|
+
k.value&&b&&(d?(d.setOptions({...a,content:m.value?g.value:a.content}),l.value||d.open({map:f.value})):(e.value=d=new k.value.InfoWindow({...a,content:m.value?g.value:a.content}),l.value?h=l.value.addListener("click",()=>{d.open({map:f.value,anchor:l.value})}):d.open({map:f.value}),infoWindowEvents.forEach(a=>{null===d||void 0===d?void 0:d.addListener(a,b=>c(a,b))})))},{immediate:!0})});vue.onBeforeUnmount(()=>{var a;h&&h.remove();d&&(null===(a=k.value)||void 0===a?void 0:a.event.clearInstanceListeners(d),
|
|
46
|
+
d.close())});return{infoWindow:e,infoWindowRef:g,hasSlotContent:m,anchor:l}}}),css_248z="\n.info-window-content[data-v-5b373d6e] {\n display: none;\n}\n.mapdiv .info-window-content[data-v-5b373d6e] {\n display: block;\n}\n";styleInject(css_248z);let _withId=vue.withScopeId("data-v-5b373d6e");vue.pushScopeId("data-v-5b373d6e");let _hoisted_1={key:0,ref:"infoWindowRef",class:"info-window-content"};vue.popScopeId();
|
|
47
|
+
let _sfc_render=_withId((a,b,c,d,e,g)=>a.hasSlotContent?(vue.openBlock(),vue.createBlock("div",_hoisted_1,[vue.renderSlot(a.$slots,"default",{},void 0,!0)],512)):vue.createCommentVNode("v-if",!0));_sfc_main.render=_sfc_render;_sfc_main.__scopeId="data-v-5b373d6e";function sortKD(a,b,c,d,e,g){if(!(e-d<=c)){var f=d+e>>1;select(a,b,f,d,e,g%2);sortKD(a,b,c,d,f-1,g+1);sortKD(a,b,c,f+1,e,g+1)}}
|
|
48
|
+
function select(a,b,c,d,e,g){for(;e>d;){if(600<e-d){var f=e-d+1,k=c-d+1,l=Math.log(f),h=.5*Math.exp(2*l/3);l=.5*Math.sqrt(l*h*(f-h)/f)*(0>k-f/2?-1:1);select(a,b,c,Math.max(d,Math.floor(c-k*h/f+l)),Math.min(e,Math.floor(c+(f-k)*h/f+l)),g)}f=b[2*c+g];k=d;h=e;swapItem(a,b,d,c);for(b[2*e+g]>f&&swapItem(a,b,d,e);k<h;){swapItem(a,b,k,h);k++;for(h--;b[2*k+g]<f;)k++;for(;b[2*h+g]>f;)h--}b[2*d+g]===f?swapItem(a,b,d,h):(h++,swapItem(a,b,h,e));h<=c&&(d=h+1);c<=h&&(e=h-1)}}
|
|
49
|
+
function swapItem(a,b,c,d){swap(a,c,d);swap(b,2*c,2*d);swap(b,2*c+1,2*d+1)}function swap(a,b,c){let d=a[b];a[b]=a[c];a[c]=d}
|
|
50
|
+
function range(a,b,c,d,e,g,f){let k=[0,a.length-1,0],l=[],h,m;for(;k.length;){var n=k.pop();let r=k.pop(),q=k.pop();if(r-q<=f){for(n=q;n<=r;n++)h=b[2*n],m=b[2*n+1],h>=c&&h<=e&&m>=d&&m<=g&&l.push(a[n]);continue}let p=Math.floor((q+r)/2);h=b[2*p];m=b[2*p+1];h>=c&&h<=e&&m>=d&&m<=g&&l.push(a[p]);let t=(n+1)%2;if(0===n?c<=h:d<=m)k.push(q),k.push(p-1),k.push(t);if(0===n?e>=h:g>=m)k.push(p+1),k.push(r),k.push(t)}return l}
|
|
51
|
+
function within(a,b,c,d,e,g){let f=[0,a.length-1,0],k=[],l=e*e;for(;f.length;){var h=f.pop();let m=f.pop(),n=f.pop();if(m-n<=g){for(h=n;h<=m;h++)sqDist(b[2*h],b[2*h+1],c,d)<=l&&k.push(a[h]);continue}let r=Math.floor((n+m)/2),q=b[2*r],p=b[2*r+1];sqDist(q,p,c,d)<=l&&k.push(a[r]);let t=(h+1)%2;if(0===h?c-e<=q:d-e<=p)f.push(n),f.push(r-1),f.push(t);if(0===h?c+e>=q:d+e>=p)f.push(r+1),f.push(m),f.push(t)}return k}function sqDist(a,b,c,d){a-=c;b-=d;return a*a+b*b}let defaultGetX=a=>a[0],defaultGetY=a=>a[1];
|
|
52
|
+
class KDBush{constructor(a,b=defaultGetX,c=defaultGetY,d=64,e=Float64Array){this.nodeSize=d;this.points=a;let g=this.ids=new (65536>a.length?Uint16Array:Uint32Array)(a.length);e=this.coords=new e(2*a.length);for(let d=0;d<a.length;d++)g[d]=d,e[2*d]=b(a[d]),e[2*d+1]=c(a[d]);sortKD(g,e,d,0,g.length-1,0)}range(a,b,c,d){return range(this.ids,this.coords,a,b,c,d,this.nodeSize)}within(a,b,c){return within(this.ids,this.coords,a,b,c,this.nodeSize)}}
|
|
53
|
+
let defaultOptions={minZoom:0,maxZoom:16,minPoints:2,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:a=>a},fround=Math.fround||(a=>b=>{a[0]=+b;return a[0]})(new Float32Array(1));
|
|
54
|
+
class Supercluster{constructor(a){this.options=extend$1(Object.create(defaultOptions),a);this.trees=Array(this.options.maxZoom+1)}load(a){let {log:b,minZoom:c,maxZoom:d,nodeSize:e}=this.options;b&&console.time("total time");var g=`prepare ${a.length} points`;b&&console.time(g);this.points=a;let f=[];for(let b=0;b<a.length;b++)a[b].geometry&&f.push(createPointCluster(a[b],b));this.trees[d+1]=new KDBush(f,getX,getY,e,Float32Array);b&&console.timeEnd(g);for(a=d;a>=c;a--)g=+Date.now(),f=this._cluster(f,
|
|
55
|
+
a),this.trees[a]=new KDBush(f,getX,getY,e,Float32Array),b&&console.log("z%d: %d clusters in %dms",a,f.length,+Date.now()-g);b&&console.timeEnd("total time");return this}getClusters(a,b){let c=((a[0]+180)%360+360)%360-180;var d=Math.max(-90,Math.min(90,a[1])),e=180===a[2]?180:((a[2]+180)%360+360)%360-180;let g=Math.max(-90,Math.min(90,a[3]));if(360<=a[2]-a[0])c=-180,e=180;else if(c>e){var f=this.getClusters([c,d,180,g],b);d=this.getClusters([-180,d,e,g],b);return f.concat(d)}b=this.trees[this._limitZoom(b)];
|
|
56
|
+
e=b.range(lngX(c),latY(g),lngX(e),latY(d));d=[];for(f of e)e=b.points[f],d.push(e.numPoints?getClusterJSON(e):this.points[e.index]);return d}getChildren(a){var b=this._getOriginId(a),c=this._getOriginZoom(a);let d=this.trees[c];if(!d)throw Error("No cluster with the specified id.");b=d.points[b];if(!b)throw Error("No cluster with the specified id.");b=d.within(b.x,b.y,this.options.radius/(this.options.extent*Math.pow(2,c-1)));c=[];for(let e of b)b=d.points[e],b.parentId===a&&c.push(b.numPoints?getClusterJSON(b):
|
|
57
|
+
this.points[b.index]);if(0===c.length)throw Error("No cluster with the specified id.");return c}getLeaves(a,b,c){let d=[];this._appendLeaves(d,a,b||10,c||0,0);return d}getTile(a,b,c){let d=this.trees[this._limitZoom(a)];a=Math.pow(2,a);let {extent:e,radius:g}=this.options,f=g/e,k=(c-f)/a,l=(c+1+f)/a,h={features:[]};this._addTileFeatures(d.range((b-f)/a,k,(b+1+f)/a,l),d.points,b,c,a,h);0===b&&this._addTileFeatures(d.range(1-f/a,k,1,l),d.points,a,c,a,h);b===a-1&&this._addTileFeatures(d.range(0,k,f/
|
|
58
|
+
a,l),d.points,-1,c,a,h);return h.features.length?h:null}getClusterExpansionZoom(a){let b=this._getOriginZoom(a)-1;for(;b<=this.options.maxZoom;){a=this.getChildren(a);b++;if(1!==a.length)break;a=a[0].properties.cluster_id}return b}_appendLeaves(a,b,c,d,e){b=this.getChildren(b);for(let g of b)if((b=g.properties)&&b.cluster?e=e+b.point_count<=d?e+b.point_count:this._appendLeaves(a,b.cluster_id,c,d,e):e<d?e++:a.push(g),a.length===c)break;return e}_addTileFeatures(a,b,c,d,e,g){for(let l of a){a=b[l];
|
|
59
|
+
let h=a.numPoints;var f=void 0;let m;var k=void 0;h?(f=getClusterProperties(a),m=a.x,k=a.y):(k=this.points[a.index],f=k.properties,m=lngX(k.geometry.coordinates[0]),k=latY(k.geometry.coordinates[1]));f={type:1,geometry:[[Math.round(this.options.extent*(m*e-c)),Math.round(this.options.extent*(k*e-d))]],tags:f};let n;h?n=a.id:this.options.generateId?n=a.index:this.points[a.index].id&&(n=this.points[a.index].id);void 0!==n&&(f.id=n);g.features.push(f)}}_limitZoom(a){return Math.max(this.options.minZoom,
|
|
60
|
+
Math.min(Math.floor(+a),this.options.maxZoom+1))}_cluster(a,b){let c=[],{radius:d,extent:e,reduce:g,minPoints:f}=this.options,k=d/(e*Math.pow(2,b));for(let d=0;d<a.length;d++){var l=a[d];if(l.zoom<=b)continue;l.zoom=b;let e=this.trees[b+1];var h=e.within(l.x,l.y,k),m=l.numPoints||1;let p=m;for(let a of h){var n=e.points[a];n.zoom>b&&(p+=n.numPoints||1)}if(p>m&&p>=f){n=l.x*m;let a=l.y*m;m=g&&1<m?this._map(l,!0):null;let f=(d<<5)+(b+1)+this.points.length;for(let c of h){h=e.points[c];if(h.zoom<=b)continue;
|
|
61
|
+
h.zoom=b;let d=h.numPoints||1;n+=h.x*d;a+=h.y*d;h.parentId=f;g&&(m||(m=this._map(l,!0)),g(m,this._map(h)))}l.parentId=f;c.push(createCluster(n/p,a/p,f,p,m))}else if(c.push(l),1<p)for(let a of h)l=e.points[a],l.zoom<=b||(l.zoom=b,c.push(l))}return c}_getOriginId(a){return a-this.points.length>>5}_getOriginZoom(a){return(a-this.points.length)%32}_map(a,b){if(a.numPoints)return b?extend$1({},a.properties):a.properties;a=this.points[a.index].properties;let c=this.options.map(a);return b&&c===a?extend$1({},
|
|
62
|
+
c):c}}function createCluster(a,b,c,d,e){return{x:fround(a),y:fround(b),zoom:Infinity,id:c,parentId:-1,numPoints:d,properties:e}}function createPointCluster(a,b){let [c,d]=a.geometry.coordinates;return{x:fround(lngX(c)),y:fround(latY(d)),zoom:Infinity,index:b,parentId:-1}}function getClusterJSON(a){return{type:"Feature",id:a.id,properties:getClusterProperties(a),geometry:{type:"Point",coordinates:[xLng(a.x),yLat(a.y)]}}}
|
|
63
|
+
function getClusterProperties(a){let b=a.numPoints,c=1E4<=b?`${Math.round(b/1E3)}k`:1E3<=b?`${Math.round(b/100)/10}k`:b;return extend$1(extend$1({},a.properties),{cluster:!0,cluster_id:a.id,point_count:b,point_count_abbreviated:c})}function lngX(a){return a/360+.5}function latY(a){a=Math.sin(a*Math.PI/180);a=.5-.25*Math.log((1+a)/(1-a))/Math.PI;return 0>a?0:1<a?1:a}function xLng(a){return 360*(a-.5)}function yLat(a){return 360*Math.atan(Math.exp((180-360*a)*Math.PI/180))/Math.PI-90}
|
|
64
|
+
function extend$1(a,b){for(let c in b)a[c]=b[c];return a}function getX(a){return a.x}function getY(a){return a.y}
|
|
65
|
+
var fastDeepEqual=function equal(a,b){if(a===b)return!0;if(a&&b&&"object"==typeof a&&"object"==typeof b){if(a.constructor!==b.constructor)return!1;var d;if(Array.isArray(a)){var e=a.length;if(e!=b.length)return!1;for(d=e;0!==d--;)if(!equal(a[d],b[d]))return!1;return!0}if(a.constructor===RegExp)return a.source===b.source&&a.flags===b.flags;if(a.valueOf!==Object.prototype.valueOf)return a.valueOf()===b.valueOf();if(a.toString!==Object.prototype.toString)return a.toString()===b.toString();var g=Object.keys(a);
|
|
66
|
+
e=g.length;if(e!==Object.keys(b).length)return!1;for(d=e;0!==d--;)if(!Object.prototype.hasOwnProperty.call(b,g[d]))return!1;for(d=e;0!==d--;)if(e=g[d],!equal(a[e],b[e]))return!1;return!0}return a!==a&&b!==b};
|
|
67
|
+
function __rest(a,b){var c={},d;for(d in a)Object.prototype.hasOwnProperty.call(a,d)&&0>b.indexOf(d)&&(c[d]=a[d]);if(null!=a&&"function"===typeof Object.getOwnPropertySymbols){var e=0;for(d=Object.getOwnPropertySymbols(a);e<d.length;e++)0>b.indexOf(d[e])&&Object.prototype.propertyIsEnumerable.call(a,d[e])&&(c[d[e]]=a[d[e]])}return c}
|
|
68
|
+
class Cluster{constructor({markers:a,position:b}){this.markers=a;b&&(this._position=b instanceof google.maps.LatLng?b:new google.maps.LatLng(b))}get bounds(){if(0!==this.markers.length||this._position)return this.markers.reduce((a,b)=>a.extend(b.getPosition()),new google.maps.LatLngBounds(this._position,this._position))}get position(){return this._position||this.bounds.getCenter()}get count(){return this.markers.filter(a=>a.getVisible()).length}push(a){this.markers.push(a)}delete(){this.marker&&(this.marker.setMap(null),
|
|
69
|
+
delete this.marker);this.markers.length=0}}class AbstractAlgorithm{constructor({maxZoom:a=16}){this.maxZoom=a}noop({markers:a}){return noop(a)}}let noop=a=>a.map(a=>new Cluster({position:a.getPosition(),markers:[a]}));
|
|
70
|
+
class SuperClusterAlgorithm extends AbstractAlgorithm{constructor(a){var {maxZoom:b,radius:c=60}=a;a=__rest(a,["maxZoom","radius"]);super({maxZoom:b});this.superCluster=new Supercluster(Object.assign({maxZoom:this.maxZoom,radius:c},a));this.state={zoom:null}}calculate(a){let b=!1;if(!fastDeepEqual(a.markers,this.markers)){b=!0;this.markers=[...a.markers];var c=this.markers.map(a=>({type:"Feature",geometry:{type:"Point",coordinates:[a.getPosition().lng(),a.getPosition().lat()]},properties:{marker:a}}));
|
|
71
|
+
this.superCluster.load(c)}c={zoom:a.map.getZoom()};b||this.state.zoom>this.maxZoom&&c.zoom>this.maxZoom||(b=b||!fastDeepEqual(this.state,c));this.state=c;b&&(this.clusters=this.cluster(a));return{clusters:this.clusters,changed:b}}cluster({map:a}){return this.superCluster.getClusters([-180,-90,180,90],Math.round(a.getZoom())).map(this.transformCluster.bind(this))}transformCluster({geometry:{coordinates:[a,b]},properties:c}){if(c.cluster)return new Cluster({markers:this.superCluster.getLeaves(c.cluster_id,
|
|
72
|
+
Infinity).map(a=>a.properties.marker),position:new google.maps.LatLng({lat:b,lng:a})});a=c.marker;return new Cluster({markers:[a],position:a.getPosition()})}}class ClusterStats{constructor(a,b){this.markers={sum:a.length};a=b.map(a=>a.count);let c=a.reduce((a,b)=>a+b,0);this.clusters={count:b.length,markers:{mean:c/b.length,sum:c,min:Math.min(...a),max:Math.max(...a)}}}}class DefaultRenderer{render({count:a,position:b},c){c=window.btoa(`
|
|
73
|
+
<svg fill="${a>Math.max(10,c.clusters.markers.mean)?"#ff0000":"#0000ff"}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 240">
|
|
74
|
+
<circle cx="120" cy="120" opacity=".6" r="70" />
|
|
75
|
+
<circle cx="120" cy="120" opacity=".3" r="90" />
|
|
76
|
+
<circle cx="120" cy="120" opacity=".2" r="110" />
|
|
77
|
+
</svg>`);return new google.maps.Marker({position:b,icon:{url:`data:image/svg+xml;base64,${c}`,scaledSize:new google.maps.Size(45,45)},label:{text:String(a),color:"rgba(255,255,255,0.9)",fontSize:"12px"},title:`Cluster of ${a} markers`,zIndex:Number(google.maps.Marker.MAX_ZINDEX)+a})}}function extend(a,b){for(let c in b.prototype)a.prototype[c]=b.prototype[c]}class OverlayViewSafe{constructor(){extend(OverlayViewSafe,google.maps.OverlayView)}}var MarkerClustererEvents;
|
|
78
|
+
(function(a){a.CLUSTERING_BEGIN="clusteringbegin";a.CLUSTERING_END="clusteringend";a.CLUSTER_CLICK="click"})(MarkerClustererEvents||(MarkerClustererEvents={}));let defaultOnClusterClickHandler=(a,b,c)=>{c.fitBounds(b.bounds)};
|
|
79
|
+
class MarkerClusterer extends OverlayViewSafe{constructor({map:a,markers:b=[],algorithm:c=new SuperClusterAlgorithm({}),renderer:d=new DefaultRenderer,onClusterClick:e=defaultOnClusterClickHandler}){super();this.markers=[...b];this.clusters=[];this.algorithm=c;this.renderer=d;this.onClusterClick=e;a&&this.setMap(a)}addMarker(a,b){this.markers.includes(a)||(this.markers.push(a),b||this.render())}addMarkers(a,b){a.forEach(a=>{this.addMarker(a,!0)});b||this.render()}removeMarker(a,b){let c=this.markers.indexOf(a);
|
|
80
|
+
if(-1===c)return!1;a.setMap(null);this.markers.splice(c,1);b||this.render();return!0}removeMarkers(a,b){let c=!1;a.forEach(a=>{c=this.removeMarker(a,!0)||c});c&&!b&&this.render();return c}clearMarkers(a){this.markers.length=0;a||this.render()}render(){let a=this.getMap();if(a instanceof google.maps.Map&&this.getProjection()){google.maps.event.trigger(this,MarkerClustererEvents.CLUSTERING_BEGIN,this);let {clusters:b,changed:c}=this.algorithm.calculate({markers:this.markers,map:a,mapCanvasProjection:this.getProjection()});
|
|
81
|
+
if(c||void 0==c)this.reset(),this.clusters=b,this.renderClusters();google.maps.event.trigger(this,MarkerClustererEvents.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(a=>a.setMap(null));this.clusters.forEach(a=>a.delete());this.clusters=[]}renderClusters(){let a=new ClusterStats(this.markers,this.clusters),b=this.getMap();
|
|
82
|
+
this.clusters.forEach(c=>{1===c.markers.length?c.marker=c.markers[0]:(c.marker=this.renderer.render(c,a),this.onClusterClick&&c.marker.addListener("click",a=>{google.maps.event.trigger(this,MarkerClustererEvents.CLUSTER_CLICK,c);this.onClusterClick(a,c,b)}));c.marker.setMap(b)})}}let markerClusterEvents=["clusteringbegin","clusteringend","click"];
|
|
83
|
+
var MarkerCluster=vue.defineComponent({name:"MarkerCluster",props:{options:{type:Object,default:()=>({})}},emits:markerClusterEvents,setup(a,{emit:b,expose:c,slots:d}){let e=vue.ref(),g=vue.inject(mapSymbol,vue.ref()),f=vue.inject(apiSymbol,vue.ref());vue.provide(markerClusterSymbol,e);vue.watch(g,()=>{g.value&&(e.value=vue.markRaw(new MarkerClusterer({map:g.value,...a.options})),markerClusterEvents.forEach(a=>{var c;null===(c=e.value)||void 0===c?void 0:c.addListener(a,c=>b(a,c))}))},{immediate:!0});
|
|
84
|
+
vue.onBeforeUnmount(()=>{var a;e.value&&(null===(a=f.value)||void 0===a?void 0:a.event.clearInstanceListeners(e.value),e.value.clearMarkers(),e.value.setMap(null))});c({markerCluster:e});return()=>{var a;return null===(a=d.default)||void 0===a?void 0:a.call(d)}}});exports.Circle=Circle;exports.CustomControl=_sfc_main$1;exports.GoogleMap=_sfc_main$2;exports.InfoWindow=_sfc_main;exports.Marker=Marker;exports.MarkerCluster=MarkerCluster;exports.Polygon=Polygon;exports.Polyline=Polyline;
|
|
85
|
+
exports.Rectangle=Rectangle
|
package/dist/es/index.js
CHANGED
|
@@ -1,28 +1,78 @@
|
|
|
1
|
-
import{ref,defineComponent,provide,watch,onMounted,toRef,onBeforeUnmount,pushScopeId,popScopeId,openBlock,createBlock,createVNode,renderSlot,withScopeId,inject,Fragment,createCommentVNode,withDirectives,vShow,
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import{ref,defineComponent,provide,watch,onMounted,toRef,onBeforeUnmount,pushScopeId,popScopeId,openBlock,createBlock,createVNode,renderSlot,withScopeId,inject,computed,Fragment,createCommentVNode,withDirectives,vShow,Comment,markRaw}from'vue';/*
|
|
2
|
+
*****************************************************************************
|
|
3
|
+
Copyright (c) Microsoft Corporation.
|
|
4
|
+
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
+
purpose with or without fee is hereby granted.
|
|
7
|
+
|
|
8
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
9
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
10
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
11
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
12
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
13
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
+
*****************************************************************************/
|
|
16
|
+
let u=Symbol("map"),v=Symbol("api"),w=Symbol("marker"),x=Symbol("markerCluster"),y=Symbol("mapTilesLoaded"),z=ref(null),A="click dblclick drag dragend dragstart mousedown mousemove mouseout mouseover mouseup rightclick".split(" ");
|
|
17
|
+
var aa=function B(a,b){if(a===b)return!0;if(a&&b&&"object"==typeof a&&"object"==typeof b){if(a.constructor!==b.constructor)return!1;var d;if(Array.isArray(a)){var e=a.length;if(e!=b.length)return!1;for(d=e;0!==d--;)if(!B(a[d],b[d]))return!1;return!0}if(a.constructor===RegExp)return a.source===b.source&&a.flags===b.flags;if(a.valueOf!==Object.prototype.valueOf)return a.valueOf()===b.valueOf();if(a.toString!==Object.prototype.toString)return a.toString()===b.toString();var g=Object.keys(a);e=g.length;
|
|
18
|
+
if(e!==Object.keys(b).length)return!1;for(d=e;0!==d--;)if(!Object.prototype.hasOwnProperty.call(b,g[d]))return!1;for(d=e;0!==d--;)if(e=g[d],!B(a[e],b[e]))return!1;return!0}return a!==a&&b!==b};
|
|
19
|
+
class C{constructor({apiKey:a,channel:b,client:c,id:d="__googleMapsScriptId",libraries:e=[],language:g,region:f,version:l,mapIds:h,nonce:k,retries:m=3,url:n="https://maps.googleapis.com/maps/api/js"}){this.CALLBACK="__googleMapsCallback";this.callbacks=[];this.loading=this.done=!1;this.errors=[];this.version=l;this.apiKey=a;this.channel=b;this.client=c;this.id=d||"__googleMapsScriptId";this.libraries=e;this.language=g;this.region=f;this.mapIds=h;this.nonce=k;this.retries=m;this.url=n;if(C.instance){if(!aa(this.options,
|
|
20
|
+
C.instance.options))throw Error(`Loader must not be called again with different options. ${JSON.stringify(this.options)} !== ${JSON.stringify(C.instance.options)}`);return C.instance}C.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+
|
|
6
21
|
1}createUrl(){let a=this.url;a+=`?callback=${this.CALLBACK}`;this.apiKey&&(a+=`&key=${this.apiKey}`);this.channel&&(a+=`&channel=${this.channel}`);this.client&&(a+=`&client=${this.client}`);0<this.libraries.length&&(a+=`&libraries=${this.libraries.join(",")}`);this.language&&(a+=`&language=${this.language}`);this.region&&(a+=`®ion=${this.region}`);this.version&&(a+=`&v=${this.version}`);this.mapIds&&(a+=`&map_ids=${this.mapIds.join(",")}`);return a}deleteScript(){let a=document.getElementById(this.id);
|
|
7
|
-
a&&a.remove()}load(){return this.loadPromise()}loadPromise(){return new Promise((a,b)=>{this.loadCallback(
|
|
22
|
+
a&&a.remove()}load(){return this.loadPromise()}loadPromise(){return new Promise((a,b)=>{this.loadCallback(c=>{c?b(c.error):a(window.google)})})}loadCallback(a){this.callbacks.push(a);this.execute()}setScript(){if(document.getElementById(this.id))this.callback();else{var a=this.createUrl(),b=document.createElement("script");b.id=this.id;b.type="text/javascript";b.src=a;b.onerror=this.loadErrorCallback.bind(this);b.defer=!0;b.async=!0;this.nonce&&(b.nonce=this.nonce);document.head.appendChild(b)}}reset(){this.deleteScript();
|
|
8
23
|
this.loading=this.done=!1;this.errors=[];this.onerrorEvent=null}resetIfRetryingFailed(){this.failed&&this.reset()}loadErrorCallback(a){this.errors.push(a);this.errors.length<=this.retries?(a=this.errors.length*Math.pow(2,this.errors.length),console.log(`Failed to load Google Maps script, retrying in ${a} ms.`),setTimeout(()=>{this.deleteScript();this.setScript()},a)):(this.onerrorEvent=a,this.callback())}setCallback(){window.__googleMapsCallback=this.callback.bind(this)}callback(){this.done=!0;this.loading=
|
|
9
|
-
!1;this.callbacks.forEach(a=>{a(this.onerrorEvent)});this.callbacks=[]}execute(){this.resetIfRetryingFailed();this.done?this.callback():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()):this.loading||(this.loading=!0,this.setCallback(),this.setScript())}}let
|
|
10
|
-
var
|
|
24
|
+
!1;this.callbacks.forEach(a=>{a(this.onerrorEvent)});this.callbacks=[]}execute(){this.resetIfRetryingFailed();this.done?this.callback():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()):this.loading||(this.loading=!0,this.setCallback(),this.setScript())}}let D="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".split(" ");
|
|
25
|
+
var E=defineComponent({props:{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,
|
|
11
26
|
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},
|
|
12
27
|
mapTypeId:{type:[Number,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},
|
|
13
|
-
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:
|
|
14
|
-
g);provide(
|
|
15
|
-
disableDefaultUI:a.disableDefaultUi};return{...b,...
|
|
16
|
-
c?void 0:c.addListener(a,c=>b(a,c))});
|
|
17
|
-
(a=g.value)||void 0===a?void 0:a.event.clearInstanceListeners(
|
|
18
|
-
let
|
|
19
|
-
let
|
|
20
|
-
return g},
|
|
21
|
-
var
|
|
22
|
-
required:!0}},emits:
|
|
23
|
-
var
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
var
|
|
27
|
-
(
|
|
28
|
-
let
|
|
28
|
+
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:D,setup(a,{emit:b}){let c=ref(null),d=ref(!1),e=ref(null),g=ref(null),f=ref(!1);provide(u,e);provide(v,
|
|
29
|
+
g);provide(y,f);let l=()=>{const b={...a};Object.keys(b).forEach(a=>{void 0===b[a]&&delete b[a]});var c=a=>{var b;return a?{position:null===(b=g.value)||void 0===b?void 0:b.ControlPosition[a]}:{}};c={scaleControlOptions:a.scaleControlStyle?{style:a.scaleControlStyle}:{},panControlOptions:c(a.panControlPosition),zoomControlOptions:c(a.zoomControlPosition),rotateControlOptions:c(a.rotateControlPosition),streetViewControlOptions:c(a.streetViewControlPosition),fullscreenControlOptions:c(a.fullscreenControlPosition),
|
|
30
|
+
disableDefaultUI:a.disableDefaultUi};return{...b,...c}},h=watch([g,e],([a,b])=>{a&&b&&(a.event.addListenerOnce(b,"tilesloaded",()=>{f.value=!0}),setTimeout(h,0))},{immediate:!0}),k=()=>{try{const {apiKey:b,region:c,version:d,language:e,libraries:f}=a;z.value=new C({apiKey:b,region:c,version:d,language:e,libraries:f})}catch(m){console.error(m)}};onMounted(()=>{k();z.value.load().then(()=>{g.value=google.maps;e.value=new google.maps.Map(c.value,l());D.forEach(a=>{var c;null===(c=e.value)||void 0===
|
|
31
|
+
c?void 0:c.addListener(a,c=>b(a,c))});d.value=!0;let f=Object.keys(a).filter(a=>!["center","zoom"].includes(a)).map(b=>toRef(a,b));watch([()=>a.center,()=>a.zoom,...f],([a,b],[c,d])=>{var f,g,h;let {center:k,zoom:m,...n}=l();null===(f=e.value)||void 0===f?void 0:f.setOptions(n);void 0!==b&&b!==d&&(null===(g=e.value)||void 0===g?void 0:g.setZoom(b));b=!c||a.lng!==c.lng||a.lat!==c.lat;a&&b&&(null===(h=e.value)||void 0===h?void 0:h.panTo(a))})})});onBeforeUnmount(()=>{var a;f.value=!1;e.value&&(null===
|
|
32
|
+
(a=g.value)||void 0===a?void 0:a.event.clearInstanceListeners(e.value))});return{mapRef:c,ready:d,map:e,api:g,mapTilesLoaded:f}}});function F(a,b){void 0===b&&(b={});b=b.insertAt;if(a&&"undefined"!==typeof document){var c=document.head||document.getElementsByTagName("head")[0],d=document.createElement("style");d.type="text/css";"top"===b?c.firstChild?c.insertBefore(d,c.firstChild):c.appendChild(d):c.appendChild(d);d.styleSheet?d.styleSheet.cssText=a:d.appendChild(document.createTextNode(a))}}F("\n.mapdiv[data-v-177d06e3] {\n width: 100%;\n height: 100%;\n}\n");
|
|
33
|
+
let ba=withScopeId("data-v-177d06e3");pushScopeId("data-v-177d06e3");let ca={ref:"mapRef",class:"mapdiv"};popScopeId();let da=ba(a=>(openBlock(),createBlock("div",null,[createVNode("div",ca,null,512),renderSlot(a.$slots,"default",{ready:a.ready,map:a.map,api:a.api,mapTilesLoaded:a.mapTilesLoaded},void 0,!0)])));E.render=da;E.__scopeId="data-v-177d06e3";
|
|
34
|
+
let G=(a,b,c,d)=>{let e=null;const g=ref(null),f=inject(u,ref()),l=inject(v,ref()),h=inject(x,ref()),k=computed(()=>!!(h.value&&l.value&&e instanceof l.value.Marker));watch([f,c],(m,[n,t])=>{var q,p,r;m=JSON.stringify(c.value)!==JSON.stringify(t)||f.value!==n;f.value&&l.value&&m&&(e?(e.setOptions(c.value),k.value&&(null===(q=h.value)||void 0===q?void 0:q.removeMarker(e),null===(p=h.value)||void 0===p?void 0:p.addMarker(e))):(g.value="Marker"===a?e=new l.value[a](c.value):e=new l.value[a]({...c.value,
|
|
35
|
+
map:f.value}),k.value?null===(r=h.value)||void 0===r?void 0:r.addMarker(e):e.setMap(f.value),b.forEach(a=>{null===e||void 0===e?void 0:e.addListener(a,b=>d(a,b))})))},{immediate:!0});onBeforeUnmount(()=>{var a,b;e&&(null===(a=l.value)||void 0===a?void 0:a.event.clearInstanceListeners(e),k.value?null===(b=h.value)||void 0===b?void 0:b.removeMarker(e):e.setMap(null))});return g},H="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".split(" ");
|
|
36
|
+
var ea=defineComponent({name:"Marker",props:{options:{type:Object,required:!0}},emits:H,setup(a,{emit:b,expose:c,slots:d}){a=toRef(a,"options");b=G("Marker",H,a,b);provide(w,b);c({marker:b});return()=>{var a;return null===(a=d.default)||void 0===a?void 0:a.call(d)}}}),fa=defineComponent({name:"Polyline",props:{options:{type:Object,required:!0}},emits:A,setup(a,{emit:b}){a=toRef(a,"options");return{polyline:G("Polyline",A,a,b)}},render:()=>null}),ha=defineComponent({name:"Polygon",props:{options:{type:Object,
|
|
37
|
+
required:!0}},emits:A,setup(a,{emit:b}){a=toRef(a,"options");return{polygon:G("Polygon",A,a,b)}},render:()=>null});let I=A.concat(["bounds_changed"]);var ia=defineComponent({name:"Rectangle",props:{options:{type:Object,required:!0}},emits:I,setup(a,{emit:b}){a=toRef(a,"options");return{rectangle:G("Rectangle",I,a,b)}},render:()=>null});let J=A.concat(["center_changed","radius_changed"]);
|
|
38
|
+
var ja=defineComponent({name:"Circle",props:{options:{type:Object,required:!0}},emits:J,setup(a,{emit:b}){a=toRef(a,"options");return{circle:G("Circle",J,a,b)}},render:()=>null}),K=defineComponent({props:{position:{type:String,required:!0},index:{type:Number,default:1}},emits:["content:loaded"],setup(a,{emit:b}){let c=ref(null),d=inject(u,ref()),e=inject(v,ref()),g=inject(y,ref(!1)),f=ref(!1),l=watch([g,e,c],([c,d,e])=>{d&&c&&e&&(h(a.position),f.value=!0,b("content:loaded"),setTimeout(l,0))},{immediate:!0}),
|
|
39
|
+
h=a=>{d.value&&e.value&&c.value&&d.value.controls[e.value.ControlPosition[a]].push(c.value)},k=a=>{if(d.value&&e.value){let b=null;a=e.value.ControlPosition[a];d.value.controls[a].forEach((a,d)=>{a===c.value&&(b=d)});null!==b&&d.value.controls[a].removeAt(b)}};onBeforeUnmount(()=>k(a.position));watch(()=>a.position,(a,b)=>{k(b);h(a)});watch(()=>a.index,b=>{b&&c.value&&(c.value.index=a.index)});return{controlRef:c,showContent:f}}});let ka={ref:"controlRef"};
|
|
40
|
+
K.render=function(a){return openBlock(),createBlock(Fragment,null,[createCommentVNode("\n v-show must be used instead of v-if otherwise there\n would be no rendered content pushed to the map controls\n "),withDirectives(createVNode("div",ka,[renderSlot(a.$slots,"default")],512),[[vShow,a.showContent]])],2112)};let L="closeclick content_changed domready position_changed visible zindex_changed".split(" ");
|
|
41
|
+
var M=defineComponent({props:{options:{type:Object,default:()=>({})}},emits:L,setup(a,{slots:b,emit:c}){let d,e=ref(),g=ref(),f=inject(u,ref()),l=inject(v,ref()),h=inject(w,ref()),k,m=computed(()=>{var a;return null===(a=b.default)||void 0===a?void 0:a.call(b).some(a=>a.type!==Comment)});onMounted(()=>{watch([f,()=>a.options],([,a],[b,q])=>{b=JSON.stringify(a)!==JSON.stringify(q)||f.value!==b;f.value&&l.value&&b&&(d?(d.setOptions({...a,content:m.value?g.value:a.content}),h.value||d.open({map:f.value})):
|
|
42
|
+
(e.value=d=new l.value.InfoWindow({...a,content:m.value?g.value:a.content}),h.value?k=h.value.addListener("click",()=>{d.open({map:f.value,anchor:h.value})}):d.open({map:f.value}),L.forEach(a=>{null===d||void 0===d?void 0:d.addListener(a,b=>c(a,b))})))},{immediate:!0})});onBeforeUnmount(()=>{var a;k&&k.remove();d&&(null===(a=l.value)||void 0===a?void 0:a.event.clearInstanceListeners(d),d.close())});return{infoWindow:e,infoWindowRef:g,hasSlotContent:m,anchor:h}}});F("\n.info-window-content[data-v-5b373d6e] {\n display: none;\n}\n.mapdiv .info-window-content[data-v-5b373d6e] {\n display: block;\n}\n");
|
|
43
|
+
let la=withScopeId("data-v-5b373d6e");pushScopeId("data-v-5b373d6e");let ma={key:0,ref:"infoWindowRef",class:"info-window-content"};popScopeId();let na=la(a=>a.hasSlotContent?(openBlock(),createBlock("div",ma,[renderSlot(a.$slots,"default",{},void 0,!0)],512)):createCommentVNode("v-if",!0));M.render=na;M.__scopeId="data-v-5b373d6e";function N(a,b,c,d,e,g){if(!(e-d<=c)){var f=d+e>>1;O(a,b,f,d,e,g%2);N(a,b,c,d,f-1,g+1);N(a,b,c,f+1,e,g+1)}}
|
|
44
|
+
function O(a,b,c,d,e,g){for(;e>d;){if(600<e-d){var f=e-d+1,l=c-d+1,h=Math.log(f),k=.5*Math.exp(2*h/3);h=.5*Math.sqrt(h*k*(f-k)/f)*(0>l-f/2?-1:1);O(a,b,c,Math.max(d,Math.floor(c-l*k/f+h)),Math.min(e,Math.floor(c+(f-l)*k/f+h)),g)}f=b[2*c+g];l=d;k=e;P(a,b,d,c);for(b[2*e+g]>f&&P(a,b,d,e);l<k;){P(a,b,l,k);l++;for(k--;b[2*l+g]<f;)l++;for(;b[2*k+g]>f;)k--}b[2*d+g]===f?P(a,b,d,k):(k++,P(a,b,k,e));k<=c&&(d=k+1);c<=k&&(e=k-1)}}function P(a,b,c,d){Q(a,c,d);Q(b,2*c,2*d);Q(b,2*c+1,2*d+1)}
|
|
45
|
+
function Q(a,b,c){let d=a[b];a[b]=a[c];a[c]=d}let oa=a=>a[0],pa=a=>a[1];
|
|
46
|
+
class R{constructor(a,b=oa,c=pa,d=64,e=Float64Array){this.nodeSize=d;this.points=a;let g=this.ids=new (65536>a.length?Uint16Array:Uint32Array)(a.length);e=this.coords=new e(2*a.length);for(let d=0;d<a.length;d++)g[d]=d,e[2*d]=b(a[d]),e[2*d+1]=c(a[d]);N(g,e,d,0,g.length-1,0)}range(a,b,c,d){{var e=this.ids,g=this.coords,f=this.nodeSize;let h=[0,e.length-1,0],k=[],m,n;for(;h.length;){var l=h.pop();let t=h.pop(),q=h.pop();if(t-q<=f){for(l=q;l<=t;l++)m=g[2*l],n=g[2*l+1],m>=a&&m<=c&&n>=b&&n<=d&&k.push(e[l]);
|
|
47
|
+
continue}let p=Math.floor((q+t)/2);m=g[2*p];n=g[2*p+1];m>=a&&m<=c&&n>=b&&n<=d&&k.push(e[p]);let r=(l+1)%2;if(0===l?a<=m:b<=n)h.push(q),h.push(p-1),h.push(r);if(0===l?c>=m:d>=n)h.push(p+1),h.push(t),h.push(r)}a=k}return a}within(a,b,c){{var d=this.ids,e=this.coords,g=this.nodeSize;let m=[0,d.length-1,0],n=[],t=c*c;for(;m.length;){var f=m.pop();let q=m.pop();var l=m.pop();if(q-l<=g){for(f=l;f<=q;f++){l=e[2*f]-a;var h=e[2*f+1]-b;l=l*l+h*h;l<=t&&n.push(d[f])}continue}h=Math.floor((l+q)/2);let p=e[2*h],
|
|
48
|
+
r=e[2*h+1];{var k=p-a;let c=r-b;k=k*k+c*c}k<=t&&n.push(d[h]);k=(f+1)%2;if(0===f?a-c<=p:b-c<=r)m.push(l),m.push(h-1),m.push(k);if(0===f?a+c>=p:b+c>=r)m.push(h+1),m.push(q),m.push(k)}a=n}return a}}let qa={minZoom:0,maxZoom:16,minPoints:2,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:a=>a},S=Math.fround||(a=>b=>{a[0]=+b;return a[0]})(new Float32Array(1));
|
|
49
|
+
class ra{constructor(a){this.options=T(Object.create(qa),a);this.trees=Array(this.options.maxZoom+1)}load(a){let {log:b,minZoom:c,maxZoom:d,nodeSize:e}=this.options;b&&console.time("total time");var g=`prepare ${a.length} points`;b&&console.time(g);this.points=a;let f=[];for(let b=0;b<a.length;b++)a[b].geometry&&f.push(sa(a[b],b));this.trees[d+1]=new R(f,U,V,e,Float32Array);b&&console.timeEnd(g);for(a=d;a>=c;a--)g=+Date.now(),f=this._cluster(f,a),this.trees[a]=new R(f,U,V,e,Float32Array),b&&console.log("z%d: %d clusters in %dms",
|
|
50
|
+
a,f.length,+Date.now()-g);b&&console.timeEnd("total time");return this}getClusters(a,b){let c=((a[0]+180)%360+360)%360-180;var d=Math.max(-90,Math.min(90,a[1])),e=180===a[2]?180:((a[2]+180)%360+360)%360-180;let g=Math.max(-90,Math.min(90,a[3]));if(360<=a[2]-a[0])c=-180,e=180;else if(c>e){var f=this.getClusters([c,d,180,g],b);d=this.getClusters([-180,d,e,g],b);return f.concat(d)}b=this.trees[this._limitZoom(b)];e=b.range(c/360+.5,W(g),e/360+.5,W(d));d=[];for(f of e)e=b.points[f],d.push(e.numPoints?
|
|
51
|
+
ta(e):this.points[e.index]);return d}getChildren(a){var b=this._getOriginId(a),c=this._getOriginZoom(a);let d=this.trees[c];if(!d)throw Error("No cluster with the specified id.");b=d.points[b];if(!b)throw Error("No cluster with the specified id.");b=d.within(b.x,b.y,this.options.radius/(this.options.extent*Math.pow(2,c-1)));c=[];for(let e of b)b=d.points[e],b.parentId===a&&c.push(b.numPoints?ta(b):this.points[b.index]);if(0===c.length)throw Error("No cluster with the specified id.");return c}getLeaves(a,
|
|
52
|
+
b,c){let d=[];this._appendLeaves(d,a,b||10,c||0,0);return d}getTile(a,b,c){let d=this.trees[this._limitZoom(a)];a=Math.pow(2,a);let {extent:e,radius:g}=this.options,f=g/e,l=(c-f)/a,h=(c+1+f)/a,k={features:[]};this._addTileFeatures(d.range((b-f)/a,l,(b+1+f)/a,h),d.points,b,c,a,k);0===b&&this._addTileFeatures(d.range(1-f/a,l,1,h),d.points,a,c,a,k);b===a-1&&this._addTileFeatures(d.range(0,l,f/a,h),d.points,-1,c,a,k);return k.features.length?k:null}getClusterExpansionZoom(a){let b=this._getOriginZoom(a)-
|
|
53
|
+
1;for(;b<=this.options.maxZoom;){a=this.getChildren(a);b++;if(1!==a.length)break;a=a[0].properties.cluster_id}return b}_appendLeaves(a,b,c,d,e){b=this.getChildren(b);for(let g of b)if((b=g.properties)&&b.cluster?e=e+b.point_count<=d?e+b.point_count:this._appendLeaves(a,b.cluster_id,c,d,e):e<d?e++:a.push(g),a.length===c)break;return e}_addTileFeatures(a,b,c,d,e,g){for(let h of a){a=b[h];let k=a.numPoints;var f=void 0;let m;var l=void 0;k?(f=ua(a),m=a.x,l=a.y):(l=this.points[a.index],f=l.properties,
|
|
54
|
+
m=l.geometry.coordinates[0]/360+.5,l=W(l.geometry.coordinates[1]));f={type:1,geometry:[[Math.round(this.options.extent*(m*e-c)),Math.round(this.options.extent*(l*e-d))]],tags:f};let n;k?n=a.id:this.options.generateId?n=a.index:this.points[a.index].id&&(n=this.points[a.index].id);void 0!==n&&(f.id=n);g.features.push(f)}}_limitZoom(a){return Math.max(this.options.minZoom,Math.min(Math.floor(+a),this.options.maxZoom+1))}_cluster(a,b){let c=[],{radius:d,extent:e,reduce:g,minPoints:f}=this.options,l=d/
|
|
55
|
+
(e*Math.pow(2,b));for(let d=0;d<a.length;d++){var h=a[d];if(h.zoom<=b)continue;h.zoom=b;let e=this.trees[b+1];var k=e.within(h.x,h.y,l),m=h.numPoints||1;let p=m;for(let a of k){var n=e.points[a];n.zoom>b&&(p+=n.numPoints||1)}if(p>m&&p>=f){n=h.x*m;let a=h.y*m;m=g&&1<m?this._map(h,!0):null;let f=(d<<5)+(b+1)+this.points.length;for(let c of k){k=e.points[c];if(k.zoom<=b)continue;k.zoom=b;let d=k.numPoints||1;n+=k.x*d;a+=k.y*d;k.parentId=f;g&&(m||(m=this._map(h,!0)),g(m,this._map(k)))}h.parentId=f;c.push(va(n/
|
|
56
|
+
p,a/p,f,p,m))}else if(c.push(h),1<p)for(let a of k)h=e.points[a],h.zoom<=b||(h.zoom=b,c.push(h))}return c}_getOriginId(a){return a-this.points.length>>5}_getOriginZoom(a){return(a-this.points.length)%32}_map(a,b){if(a.numPoints)return b?T({},a.properties):a.properties;a=this.points[a.index].properties;let c=this.options.map(a);return b&&c===a?T({},c):c}}function va(a,b,c,d,e){return{x:S(a),y:S(b),zoom:Infinity,id:c,parentId:-1,numPoints:d,properties:e}}
|
|
57
|
+
function sa(a,b){let [c,d]=a.geometry.coordinates;return{x:S(c/360+.5),y:S(W(d)),zoom:Infinity,index:b,parentId:-1}}function ta(a){var b=a.id,c=ua(a);return{type:"Feature",id:b,properties:c,geometry:{type:"Point",coordinates:[360*(a.x-.5),360*Math.atan(Math.exp((180-360*a.y)*Math.PI/180))/Math.PI-90]}}}
|
|
58
|
+
function ua(a){let b=a.numPoints,c=1E4<=b?`${Math.round(b/1E3)}k`:1E3<=b?`${Math.round(b/100)/10}k`:b;return T(T({},a.properties),{cluster:!0,cluster_id:a.id,point_count:b,point_count_abbreviated:c})}function W(a){a=Math.sin(a*Math.PI/180);a=.5-.25*Math.log((1+a)/(1-a))/Math.PI;return 0>a?0:1<a?1:a}function T(a,b){for(let c in b)a[c]=b[c];return a}function U(a){return a.x}function V(a){return a.y}
|
|
59
|
+
var xa=function wa(a,b){if(a===b)return!0;if(a&&b&&"object"==typeof a&&"object"==typeof b){if(a.constructor!==b.constructor)return!1;var d;if(Array.isArray(a)){var e=a.length;if(e!=b.length)return!1;for(d=e;0!==d--;)if(!wa(a[d],b[d]))return!1;return!0}if(a.constructor===RegExp)return a.source===b.source&&a.flags===b.flags;if(a.valueOf!==Object.prototype.valueOf)return a.valueOf()===b.valueOf();if(a.toString!==Object.prototype.toString)return a.toString()===b.toString();var g=Object.keys(a);e=g.length;
|
|
60
|
+
if(e!==Object.keys(b).length)return!1;for(d=e;0!==d--;)if(!Object.prototype.hasOwnProperty.call(b,g[d]))return!1;for(d=e;0!==d--;)if(e=g[d],!wa(a[e],b[e]))return!1;return!0}return a!==a&&b!==b};
|
|
61
|
+
class X{constructor({markers:a,position:b}){this.markers=a;b&&(this._position=b instanceof google.maps.LatLng?b:new google.maps.LatLng(b))}get bounds(){if(0!==this.markers.length||this._position)return this.markers.reduce((a,b)=>a.extend(b.getPosition()),new google.maps.LatLngBounds(this._position,this._position))}get position(){return this._position||this.bounds.getCenter()}get count(){return this.markers.filter(a=>a.getVisible()).length}push(a){this.markers.push(a)}delete(){this.marker&&(this.marker.setMap(null),
|
|
62
|
+
delete this.marker);this.markers.length=0}}class ya{constructor({maxZoom:a=16}){this.maxZoom=a}noop({markers:a}){return za(a)}}let za=a=>a.map(a=>new X({position:a.getPosition(),markers:[a]}));
|
|
63
|
+
class Aa extends ya{constructor(a){var {maxZoom:b,radius:c=60}=a,d=["maxZoom","radius"],e={},g;for(g in a)Object.prototype.hasOwnProperty.call(a,g)&&0>d.indexOf(g)&&(e[g]=a[g]);if(null!=a&&"function"===typeof Object.getOwnPropertySymbols){var f=0;for(g=Object.getOwnPropertySymbols(a);f<g.length;f++)0>d.indexOf(g[f])&&Object.prototype.propertyIsEnumerable.call(a,g[f])&&(e[g[f]]=a[g[f]])}super({maxZoom:b});this.superCluster=new ra(Object.assign({maxZoom:this.maxZoom,radius:c},e));this.state={zoom:null}}calculate(a){let b=
|
|
64
|
+
!1;if(!xa(a.markers,this.markers)){b=!0;this.markers=[...a.markers];var c=this.markers.map(a=>({type:"Feature",geometry:{type:"Point",coordinates:[a.getPosition().lng(),a.getPosition().lat()]},properties:{marker:a}}));this.superCluster.load(c)}c={zoom:a.map.getZoom()};b||this.state.zoom>this.maxZoom&&c.zoom>this.maxZoom||(b=b||!xa(this.state,c));this.state=c;b&&(this.clusters=this.cluster(a));return{clusters:this.clusters,changed:b}}cluster({map:a}){return this.superCluster.getClusters([-180,-90,
|
|
65
|
+
180,90],Math.round(a.getZoom())).map(this.transformCluster.bind(this))}transformCluster({geometry:{coordinates:[a,b]},properties:c}){if(c.cluster)return new X({markers:this.superCluster.getLeaves(c.cluster_id,Infinity).map(a=>a.properties.marker),position:new google.maps.LatLng({lat:b,lng:a})});a=c.marker;return new X({markers:[a],position:a.getPosition()})}}
|
|
66
|
+
class Ba{constructor(a,b){this.markers={sum:a.length};a=b.map(a=>a.count);let c=a.reduce((a,b)=>a+b,0);this.clusters={count:b.length,markers:{mean:c/b.length,sum:c,min:Math.min(...a),max:Math.max(...a)}}}}class Ca{render({count:a,position:b},c){c=window.btoa(`
|
|
67
|
+
<svg fill="${a>Math.max(10,c.clusters.markers.mean)?"#ff0000":"#0000ff"}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 240">
|
|
68
|
+
<circle cx="120" cy="120" opacity=".6" r="70" />
|
|
69
|
+
<circle cx="120" cy="120" opacity=".3" r="90" />
|
|
70
|
+
<circle cx="120" cy="120" opacity=".2" r="110" />
|
|
71
|
+
</svg>`);return new google.maps.Marker({position:b,icon:{url:`data:image/svg+xml;base64,${c}`,scaledSize:new google.maps.Size(45,45)},label:{text:String(a),color:"rgba(255,255,255,0.9)",fontSize:"12px"},title:`Cluster of ${a} markers`,zIndex:Number(google.maps.Marker.MAX_ZINDEX)+a})}}class Da{constructor(){var a=Da,b=google.maps.OverlayView;for(let c in b.prototype)a.prototype[c]=b.prototype[c]}}var Y,Z=Y||(Y={});Z.CLUSTERING_BEGIN="clusteringbegin";Z.CLUSTERING_END="clusteringend";
|
|
72
|
+
Z.CLUSTER_CLICK="click";let Ea=(a,b,c)=>{c.fitBounds(b.bounds)};
|
|
73
|
+
class Fa extends Da{constructor({map:a,markers:b=[],algorithm:c=new Aa({}),renderer:d=new Ca,onClusterClick:e=Ea}){super();this.markers=[...b];this.clusters=[];this.algorithm=c;this.renderer=d;this.onClusterClick=e;a&&this.setMap(a)}addMarker(a,b){this.markers.includes(a)||(this.markers.push(a),b||this.render())}addMarkers(a,b){a.forEach(a=>{this.addMarker(a,!0)});b||this.render()}removeMarker(a,b){let c=this.markers.indexOf(a);if(-1===c)return!1;a.setMap(null);this.markers.splice(c,1);b||this.render();
|
|
74
|
+
return!0}removeMarkers(a,b){let c=!1;a.forEach(a=>{c=this.removeMarker(a,!0)||c});c&&!b&&this.render();return c}clearMarkers(a){this.markers.length=0;a||this.render()}render(){let a=this.getMap();if(a instanceof google.maps.Map&&this.getProjection()){google.maps.event.trigger(this,Y.CLUSTERING_BEGIN,this);let {clusters:b,changed:c}=this.algorithm.calculate({markers:this.markers,map:a,mapCanvasProjection:this.getProjection()});if(c||void 0==c)this.reset(),this.clusters=b,this.renderClusters();google.maps.event.trigger(this,
|
|
75
|
+
Y.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(a=>a.setMap(null));this.clusters.forEach(a=>a.delete());this.clusters=[]}renderClusters(){let a=new Ba(this.markers,this.clusters),b=this.getMap();this.clusters.forEach(c=>{1===c.markers.length?c.marker=c.markers[0]:(c.marker=this.renderer.render(c,a),this.onClusterClick&&c.marker.addListener("click",
|
|
76
|
+
a=>{google.maps.event.trigger(this,Y.CLUSTER_CLICK,c);this.onClusterClick(a,c,b)}));c.marker.setMap(b)})}}let Ga=["clusteringbegin","clusteringend","click"];
|
|
77
|
+
var Ha=defineComponent({name:"MarkerCluster",props:{options:{type:Object,default:()=>({})}},emits:Ga,setup(a,{emit:b,expose:c,slots:d}){let e=ref(),g=inject(u,ref()),f=inject(v,ref());provide(x,e);watch(g,()=>{g.value&&(e.value=markRaw(new Fa({map:g.value,...a.options})),Ga.forEach(a=>{var c;null===(c=e.value)||void 0===c?void 0:c.addListener(a,c=>b(a,c))}))},{immediate:!0});onBeforeUnmount(()=>{var a;e.value&&(null===(a=f.value)||void 0===a?void 0:a.event.clearInstanceListeners(e.value),e.value.clearMarkers(),
|
|
78
|
+
e.value.setMap(null))});c({markerCluster:e});return()=>{var a;return null===(a=d.default)||void 0===a?void 0:a.call(d)}}});export{ja as Circle,K as CustomControl,E as GoogleMap,M as InfoWindow,ea as Marker,Ha as MarkerCluster,ha as Polygon,fa as Polyline,ia as Rectangle}
|
|
@@ -9,7 +9,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
9
9
|
infoWindow: import("vue").Ref<google.maps.InfoWindow | undefined>;
|
|
10
10
|
infoWindowRef: import("vue").Ref<HTMLElement | undefined>;
|
|
11
11
|
hasSlotContent: import("vue").ComputedRef<boolean | undefined>;
|
|
12
|
-
anchor: import("vue").Ref<google.maps.Marker |
|
|
12
|
+
anchor: import("vue").Ref<google.maps.Marker | undefined>;
|
|
13
13
|
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, string[], string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<{
|
|
14
14
|
options: google.maps.InfoWindowOptions;
|
|
15
15
|
} & {}>, {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PropType } from "vue";
|
|
2
|
+
import { MarkerClustererOptions } from "@googlemaps/markerclusterer";
|
|
3
|
+
declare const _default: import("vue").DefineComponent<{
|
|
4
|
+
options: {
|
|
5
|
+
type: PropType<MarkerClustererOptions>;
|
|
6
|
+
default: () => {};
|
|
7
|
+
};
|
|
8
|
+
}, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
}>[] | undefined, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, string[], string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<{
|
|
11
|
+
options: MarkerClustererOptions;
|
|
12
|
+
} & {}>, {
|
|
13
|
+
options: MarkerClustererOptions;
|
|
14
|
+
}>;
|
|
15
|
+
export default _default;
|
|
@@ -6,3 +6,4 @@ export { default as Rectangle } from "./Rectangle";
|
|
|
6
6
|
export { default as Circle } from "./Circle";
|
|
7
7
|
export { default as CustomControl } from "./CustomControl.vue";
|
|
8
8
|
export { default as InfoWindow } from "./InfoWindow.vue";
|
|
9
|
+
export { default as MarkerCluster } from "./MarkerCluster";
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/// <reference types="google.maps" />
|
|
2
|
+
import type { MarkerClusterer } from "@googlemaps/markerclusterer";
|
|
2
3
|
import { InjectionKey, Ref } from "vue";
|
|
3
|
-
export declare const mapSymbol: InjectionKey<Ref<google.maps.Map
|
|
4
|
-
export declare const apiSymbol: InjectionKey<Ref<typeof google.maps
|
|
5
|
-
export declare const markerSymbol: InjectionKey<Ref<google.maps.Marker
|
|
4
|
+
export declare const mapSymbol: InjectionKey<Ref<google.maps.Map>>;
|
|
5
|
+
export declare const apiSymbol: InjectionKey<Ref<typeof google.maps>>;
|
|
6
|
+
export declare const markerSymbol: InjectionKey<Ref<google.maps.Marker>>;
|
|
7
|
+
export declare const markerClusterSymbol: InjectionKey<Ref<MarkerClusterer>>;
|
|
6
8
|
/**
|
|
7
9
|
* Utilitary flag for components that need to know the map
|
|
8
10
|
* was fully loaded (including its tiles) to decide their behavior
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vue3-google-map",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/inocan-group/vue3-google-maps.git"
|
|
8
8
|
},
|
|
9
|
-
"homepage": "https://vue3-google-map.netlify.app
|
|
9
|
+
"homepage": "https://vue3-google-map.netlify.app",
|
|
10
10
|
"description": "A set of composable components for easy use of Google Maps in your Vue 3 projects.",
|
|
11
11
|
"unpkg": "dist/cjs/index.js",
|
|
12
12
|
"jsdelivr": "dist/cjs/index.js",
|
|
@@ -52,7 +52,8 @@
|
|
|
52
52
|
"release": "standard-version"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@googlemaps/js-api-loader": "^1.12.11"
|
|
55
|
+
"@googlemaps/js-api-loader": "^1.12.11",
|
|
56
|
+
"@googlemaps/markerclusterer": "^2.0.6"
|
|
56
57
|
},
|
|
57
58
|
"devDependencies": {
|
|
58
59
|
"@ampproject/rollup-plugin-closure-compiler": "^0.26.0",
|