vue-maplibre-gl
Version:
Vue 3 plugin for maplibre-gl
15 lines (14 loc) • 42.6 kB
JavaScript
/*!
* vue-maplibre-gl v5.5.9
* (c) 2025 Volker Nauruhn
* @license MIT
*/
"use strict";var Fe=Object.defineProperty;var Ne=(t,o,e)=>o in t?Fe(t,o,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[o]=e;var M=(t,o,e)=>Ne(t,typeof o!="symbol"?o+"":o,e);const g=require("vue");require("maplibre-gl");require("geojson");function Ge(t,o=250,e=!1){let i;function n(){const r=arguments,s=()=>{i=void 0,e!==!0&&t.apply(this,r)};clearTimeout(i),e===!0&&i===void 0&&t.apply(this,r),i=window.setTimeout(s,o)}return n.cancel=()=>{clearTimeout(i)},n}function se(t,o){let e,i;return function(){const n=arguments,r=this;return e||(e=!0,setTimeout(()=>e=!1,o),i=t.apply(r,n)),i}}const ae=Symbol("map"),_e=Symbol("isLoaded"),Ce=Symbol("isInitialized"),He=Symbol("componentId"),Be=Symbol("sourceId"),qe=Symbol("sourceLayerRegistry"),$e=Symbol("emitter"),Se=Symbol("fitBoundsOptions");function Ze(t){return Object.keys(t)}function We(t){return Object.keys(t)}var q=(t=>(t.TOP_LEFT="top-left",t.TOP_RIGHT="top-right",t.BOTTOM_LEFT="bottom-left",t.BOTTOM_RIGHT="bottom-right",t))(q||{});const le=Object.values(q);function Pe(t,o,e){g.watch(t,i=>{var n,r;i&&le.indexOf(i)===-1||((n=o.value)!=null&&n.hasControl(e)&&o.value.removeControl(e),(r=o.value)==null||r.addControl(e,i))},{immediate:!0})}const U=class U{constructor(o,e){M(this,"container");this.isAdded=o,this.container=document.createElement("div"),this.setClasses(e)}getDefaultPosition(){return q.TOP_LEFT}onAdd(){return g.nextTick(()=>this.isAdded.value=!0),this.container}onRemove(){this.isAdded.value=!1,this.container.remove()}setClasses(o){o?(this.container.classList.remove(U.CONTROL_CLASS),this.container.classList.remove(U.CONTROL_GROUP_CLASS)):(this.container.classList.add(U.CONTROL_CLASS),this.container.classList.add(U.CONTROL_GROUP_CLASS))}};M(U,"CONTROL_CLASS","maplibregl-ctrl"),M(U,"CONTROL_GROUP_CLASS","maplibregl-ctrl-group");let X=U;const oe=g.defineComponent({name:"MglCustomControl",props:{position:{type:String,validator:t=>le.indexOf(t)!==-1},noClasses:{type:Boolean,default:!1}},slots:Object,setup(t,{slots:o}){const e=g.inject(ae),i=g.inject(Ce),n=g.ref(!1),r=new X(n,t.noClasses);return Pe(()=>t.position,e,r),g.watch(()=>t.noClasses,s=>r.setClasses(s)),g.onBeforeUnmount(()=>{var s;return i.value&&((s=e.value)==null?void 0:s.removeControl(r))}),()=>{var s;return n.value?g.h(g.Teleport,{to:r.container},(s=o.default)==null?void 0:s.call(o,{})):g.createCommentVNode("custom-component")}}});var G=(t=>(t.DEFAULT="default",t.TEXT="text",t.MDI="mdi",t.SIMPLE_ICON="simple-icons",t))(G||{});const Ye=Object.values(G),Z={text:void 0,mdi:{size:21,viewbox:"0 0 24 24"},"simple-icons":{size:21,viewbox:"0 0 24 24"},default:{size:0,viewbox:"0 0 0 0"}},W=g.defineComponent({name:"MglButton",props:{type:{type:String,default:"default",validator:t=>Ye.indexOf(t)!==-1},path:{type:String},size:Number,viewbox:String},slots:Object,setup(t,{slots:o}){!t.path&&t.type!=="text"&&g.warn("property `path` must be set on MaplibreButton");const e=g.ref(Z[t.type]||Z.default);return g.watch(()=>t.type,i=>e.value=Z[i]||Z.default),()=>{var i,n;return t.type==="text"?g.h("button",{type:"button"},(i=o.default)==null?void 0:i.call(o,{})):g.h("button",{type:"button",class:"maplibregl-ctrl-icon"},[g.h("svg",{width:t.size||e.value.size,height:t.size||e.value.size,viewBox:t.viewbox||e.value.viewbox},g.h("path",{fill:"currentColor",d:t.path})),(n=o.default)==null?void 0:n.call(o,{})])}}});var O=63710088e-1,Ae={centimeters:O*100,centimetres:O*100,degrees:360/(2*Math.PI),feet:O*3.28084,inches:O*39.37,kilometers:O/1e3,kilometres:O/1e3,meters:O,metres:O,miles:O/1609.344,millimeters:O*1e3,millimetres:O*1e3,nauticalmiles:O/1852,radians:1,yards:O*1.0936};function ce(t,o,e={}){const i={type:"Feature"};return(e.id===0||e.id)&&(i.id=e.id),e.bbox&&(i.bbox=e.bbox),i.properties=o||{},i.geometry=t,i}function Xe(t,o,e={}){if(!t)throw new Error("coordinates is required");if(!Array.isArray(t))throw new Error("coordinates must be an Array");if(t.length<2)throw new Error("coordinates must be at least 2 numbers long");if(!pe(t[0])||!pe(t[1]))throw new Error("coordinates must contain numbers");return ce({type:"Point",coordinates:t},o,e)}function Je(t,o,e={}){for(const n of t){if(n.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");if(n[n.length-1].length!==n[0].length)throw new Error("First and last Position are not equivalent.");for(let r=0;r<n[n.length-1].length;r++)if(n[n.length-1][r]!==n[0][r])throw new Error("First and last Position are not equivalent.")}return ce({type:"Polygon",coordinates:t},o,e)}function Ke(t,o="kilometers"){const e=Ae[o];if(!e)throw new Error(o+" units is invalid");return t*e}function Qe(t,o="kilometers"){const e=Ae[o];if(!e)throw new Error(o+" units is invalid");return t/e}function de(t){return t%(2*Math.PI)*180/Math.PI}function F(t){return t%360*Math.PI/180}function pe(t){return!isNaN(t)&&t!==null&&!Array.isArray(t)}function je(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Le(t,o,e){if(t!==null)for(var i,n,r,s,a,l,d,h=0,c=0,u,p=t.type,y=p==="FeatureCollection",m=p==="Feature",v=y?t.features.length:1,f=0;f<v;f++){d=y?t.features[f].geometry:m?t.geometry:t,u=d?d.type==="GeometryCollection":!1,a=u?d.geometries.length:1;for(var b=0;b<a;b++){var _=0,w=0;if(s=u?d.geometries[b]:d,s!==null){l=s.coordinates;var C=s.type;switch(h=0,C){case null:break;case"Point":if(o(l,c,f,_,w)===!1)return!1;c++,_++;break;case"LineString":case"MultiPoint":for(i=0;i<l.length;i++){if(o(l[i],c,f,_,w)===!1)return!1;c++,C==="MultiPoint"&&_++}C==="LineString"&&_++;break;case"Polygon":case"MultiLineString":for(i=0;i<l.length;i++){for(n=0;n<l[i].length-h;n++){if(o(l[i][n],c,f,_,w)===!1)return!1;c++}C==="MultiLineString"&&_++,C==="Polygon"&&w++}C==="Polygon"&&_++;break;case"MultiPolygon":for(i=0;i<l.length;i++){for(w=0,n=0;n<l[i].length;n++){for(r=0;r<l[i][n].length-h;r++){if(o(l[i][n][r],c,f,_,w)===!1)return!1;c++}w++}_++}break;case"GeometryCollection":for(i=0;i<s.geometries.length;i++)if(Le(s.geometries[i],o)===!1)return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function Oe(t,o){var e,i,n,r,s,a,l,d,h,c,u=0,p=t.type==="FeatureCollection",y=t.type==="Feature",m=p?t.features.length:1;for(e=0;e<m;e++){for(a=p?t.features[e].geometry:y?t.geometry:t,d=p?t.features[e].properties:y?t.properties:{},h=p?t.features[e].bbox:y?t.bbox:void 0,c=p?t.features[e].id:y?t.id:void 0,l=a?a.type==="GeometryCollection":!1,s=l?a.geometries.length:1,n=0;n<s;n++){if(r=l?a.geometries[n]:a,r===null){if(o(null,u,d,h,c)===!1)return!1;continue}switch(r.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":{if(o(r,u,d,h,c)===!1)return!1;break}case"GeometryCollection":{for(i=0;i<r.geometries.length;i++)if(o(r.geometries[i],u,d,h,c)===!1)return!1;break}default:throw new Error("Unknown Geometry Type")}}u++}}function et(t,o,e){var i=e;return Oe(t,function(n,r,s,a,l){i=o(i,n,r,s,a,l)}),i}function tt(t){return et(t,(o,e)=>o+it(e),0)}function it(t){let o=0,e;switch(t.type){case"Polygon":return fe(t.coordinates);case"MultiPolygon":for(e=0;e<t.coordinates.length;e++)o+=fe(t.coordinates[e]);return o;case"Point":case"MultiPoint":case"LineString":case"MultiLineString":return 0}return 0}function fe(t){let o=0;if(t&&t.length>0){o+=Math.abs(me(t[0]));for(let e=1;e<t.length;e++)o-=Math.abs(me(t[e]))}return o}var ot=O*O/2,ee=Math.PI/180;function me(t){const o=t.length-1;if(o<=2)return 0;let e=0,i=0;for(;i<o;){const n=t[i],r=t[i+1===o?0:i+1],s=t[i+2>=o?(i+2)%o:i+2],a=n[0]*ee,l=r[1]*ee,d=s[0]*ee;e+=(d-a)*Math.sin(l),i++}return e*ot}var rt=tt;function J(t){if(!t)throw new Error("coord is required");if(!Array.isArray(t)){if(t.type==="Feature"&&t.geometry!==null&&t.geometry.type==="Point")return[...t.geometry.coordinates];if(t.type==="Point")return[...t.coordinates]}if(Array.isArray(t)&&t.length>=2&&!Array.isArray(t[0])&&!Array.isArray(t[1]))return[...t];throw new Error("coord must be GeoJSON Point or an Array of numbers")}function Y(t){if(Array.isArray(t))return t;if(t.type==="Feature"){if(t.geometry!==null)return t.geometry.coordinates}else if(t.coordinates)return t.coordinates;throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array")}function nt(t){return t.type==="Feature"?t.geometry:t}function st(t,o){return t.type==="FeatureCollection"?"FeatureCollection":t.type==="GeometryCollection"?"GeometryCollection":t.type==="Feature"&&t.geometry!==null?t.geometry.type:t.type}function at(t,o,e,i={}){const n=J(t),r=F(n[0]),s=F(n[1]),a=F(e),l=Qe(o,i.units),d=Math.asin(Math.sin(s)*Math.cos(l)+Math.cos(s)*Math.sin(l)*Math.cos(a)),h=r+Math.atan2(Math.sin(a)*Math.sin(l)*Math.cos(s),Math.cos(l)-Math.sin(s)*Math.sin(d)),c=de(h),u=de(d);return Xe([c,u],i.properties)}function lt(t,o,e={}){const i=e.steps||64,n=e.properties?e.properties:!Array.isArray(t)&&t.type==="Feature"&&t.properties?t.properties:{},r=[];for(let s=0;s<i;s++)r.push(at(t,o,s*-360/i,e).geometry.coordinates);return r.push(r[0]),Je([r],n)}var ct=lt;class he{constructor(o,e,i){M(this,"isTouchEventSupported",window!==void 0&&!!window.TouchEvent);M(this,"plugin");M(this,"map");M(this,"source");M(this,"collection");this.plugin=o,this.map=e,this.source=i}hasPolygon(){var o;return!!((o=this.collection)!=null&&o.features[0])}getPolygon(){return this.collection.features[0]}clonePolygon(){return this.getPolygon().geometry.coordinates[0].map(o=>[o[0],o[1]])}isNearby(o,e,i){const n=i?this.plugin.options.pointerPrecision.touch:this.plugin.options.pointerPrecision.mouse,r=this.map.project(o);return Math.sqrt((e.x-r.x)**2+(e.y-r.y)**2)<=n}getMidpoint(o,e){return[(o[0]+e[0])/2,(o[1]+e[1])/2]}clear(){var o;(o=this.source)==null||o.setData({type:"FeatureCollection",features:[]})}render(){var o;if(this.source){if(this.plugin.options.minArea.size&&((o=this.collection)!=null&&o.features[0])){const e=this.getAreaSize(this.collection.features[0]);this.collection.features[0].properties.area=e,this.collection.features[0].properties.tooSmall=e<this.plugin.options.minArea.size&&!this.collection.features[0].properties.hasHelperVertex,this.collection.features[0].properties.minSizeLabel=this.plugin.options.minArea.label}this.source.setData(this.collection??{type:"FeatureCollection",features:[]})}}emitOnUpdate(o){var e,i,n,r;o?(i=(e=this.plugin.options).onUpdate)==null||i.call(e,o):this.collection&&((r=(n=this.plugin.options).onUpdate)==null||r.call(n,this.collection.features[0]))}createCircle(o,e,i=64){const n=ct(o,e,{units:"meters",steps:i,properties:{center:o,radius:e,meta:"circle",minSizeLabel:this.plugin.options.minArea.label}});return n.properties.area=this.getAreaSize(n),n.properties.tooSmall=n.properties.area<(this.plugin.options.minArea.size??-1),n}getAreaSize(o){return o.properties.meta==="circle"&&o.properties.radius?Math.PI*Math.pow(o.properties.radius,2):rt(o)}isTouchEvent(o){return this.isTouchEventSupported?o.originalEvent instanceof TouchEvent:!1}}const R=11102230246251565e-32,A=134217729,ht=(3+8*R)*R;function te(t,o,e,i,n){let r,s,a,l,d=o[0],h=i[0],c=0,u=0;h>d==h>-d?(r=d,d=o[++c]):(r=h,h=i[++u]);let p=0;if(c<t&&u<e)for(h>d==h>-d?(s=d+r,a=r-(s-d),d=o[++c]):(s=h+r,a=r-(s-h),h=i[++u]),r=s,a!==0&&(n[p++]=a);c<t&&u<e;)h>d==h>-d?(s=r+d,l=s-r,a=r-(s-l)+(d-l),d=o[++c]):(s=r+h,l=s-r,a=r-(s-l)+(h-l),h=i[++u]),r=s,a!==0&&(n[p++]=a);for(;c<t;)s=r+d,l=s-r,a=r-(s-l)+(d-l),d=o[++c],r=s,a!==0&&(n[p++]=a);for(;u<e;)s=r+h,l=s-r,a=r-(s-l)+(h-l),h=i[++u],r=s,a!==0&&(n[p++]=a);return(r!==0||p===0)&&(n[p++]=r),p}function ut(t,o){let e=o[0];for(let i=1;i<t;i++)e+=o[i];return e}function $(t){return new Float64Array(t)}const dt=(3+16*R)*R,pt=(2+12*R)*R,ft=(9+64*R)*R*R,N=$(4),ge=$(8),ye=$(12),ve=$(16),L=$(4);function mt(t,o,e,i,n,r,s){let a,l,d,h,c,u,p,y,m,v,f,b,_,w,C,S,x,P;const k=t-n,z=e-n,D=o-r,I=i-r;w=k*I,u=A*k,p=u-(u-k),y=k-p,u=A*I,m=u-(u-I),v=I-m,C=y*v-(w-p*m-y*m-p*v),S=D*z,u=A*D,p=u-(u-D),y=D-p,u=A*z,m=u-(u-z),v=z-m,x=y*v-(S-p*m-y*m-p*v),f=C-x,c=C-f,N[0]=C-(f+c)+(c-x),b=w+f,c=b-w,_=w-(b-c)+(f-c),f=_-S,c=_-f,N[1]=_-(f+c)+(c-S),P=b+f,c=P-b,N[2]=b-(P-c)+(f-c),N[3]=P;let V=ut(4,N),H=pt*s;if(V>=H||-V>=H||(c=t-k,a=t-(k+c)+(c-n),c=e-z,d=e-(z+c)+(c-n),c=o-D,l=o-(D+c)+(c-r),c=i-I,h=i-(I+c)+(c-r),a===0&&l===0&&d===0&&h===0)||(H=ft*s+ht*Math.abs(V),V+=k*h+I*a-(D*d+z*l),V>=H||-V>=H))return V;w=a*I,u=A*a,p=u-(u-a),y=a-p,u=A*I,m=u-(u-I),v=I-m,C=y*v-(w-p*m-y*m-p*v),S=l*z,u=A*l,p=u-(u-l),y=l-p,u=A*z,m=u-(u-z),v=z-m,x=y*v-(S-p*m-y*m-p*v),f=C-x,c=C-f,L[0]=C-(f+c)+(c-x),b=w+f,c=b-w,_=w-(b-c)+(f-c),f=_-S,c=_-f,L[1]=_-(f+c)+(c-S),P=b+f,c=P-b,L[2]=b-(P-c)+(f-c),L[3]=P;const Ve=te(4,N,4,L,ge);w=k*h,u=A*k,p=u-(u-k),y=k-p,u=A*h,m=u-(u-h),v=h-m,C=y*v-(w-p*m-y*m-p*v),S=D*d,u=A*D,p=u-(u-D),y=D-p,u=A*d,m=u-(u-d),v=d-m,x=y*v-(S-p*m-y*m-p*v),f=C-x,c=C-f,L[0]=C-(f+c)+(c-x),b=w+f,c=b-w,_=w-(b-c)+(f-c),f=_-S,c=_-f,L[1]=_-(f+c)+(c-S),P=b+f,c=P-b,L[2]=b-(P-c)+(f-c),L[3]=P;const Re=te(Ve,ge,4,L,ye);w=a*h,u=A*a,p=u-(u-a),y=a-p,u=A*h,m=u-(u-h),v=h-m,C=y*v-(w-p*m-y*m-p*v),S=l*d,u=A*l,p=u-(u-l),y=l-p,u=A*d,m=u-(u-d),v=d-m,x=y*v-(S-p*m-y*m-p*v),f=C-x,c=C-f,L[0]=C-(f+c)+(c-x),b=w+f,c=b-w,_=w-(b-c)+(f-c),f=_-S,c=_-f,L[1]=_-(f+c)+(c-S),P=b+f,c=P-b,L[2]=b-(P-c)+(f-c),L[3]=P;const Ue=te(Re,ye,4,L,ve);return ve[Ue-1]}function gt(t,o,e,i,n,r){const s=(o-r)*(e-n),a=(t-n)*(i-r),l=s-a,d=Math.abs(s+a);return Math.abs(l)>=dt*d?l:-mt(t,o,e,i,n,r,d)}function yt(t,o){var e,i,n=0,r,s,a,l,d,h,c,u=t[0],p=t[1],y=o.length;for(e=0;e<y;e++){i=0;var m=o[e],v=m.length-1;if(h=m[0],h[0]!==m[v][0]&&h[1]!==m[v][1])throw new Error("First and last coordinates in a ring must be the same");for(s=h[0]-u,a=h[1]-p,i;i<v;i++){if(c=m[i+1],l=c[0]-u,d=c[1]-p,a===0&&d===0){if(l<=0&&s>=0||s<=0&&l>=0)return 0}else if(d>=0&&a<=0||d<=0&&a>=0){if(r=gt(s,l,a,d,0,0),r===0)return 0;(r>0&&d>0&&a<=0||r<0&&d<=0&&a>0)&&n++}h=c,a=d,s=l}}return n%2!==0}function vt(t,o,e={}){if(!t)throw new Error("point is required");if(!o)throw new Error("polygon is required");const i=J(t),n=nt(o),r=n.type,s=o.bbox;let a=n.coordinates;if(s&&bt(i,s)===!1)return!1;r==="Polygon"&&(a=[a]);let l=!1;for(var d=0;d<a.length;++d){const h=yt(i,a[d]);if(h===0)return!e.ignoreBoundary;h&&(l=!0)}return l}function bt(t,o){return o[0]<=t[0]&&o[1]<=t[1]&&o[2]>=t[0]&&o[3]>=t[1]}var K=vt;function wt(t,o,e={}){var i=J(t),n=J(o),r=F(n[1]-i[1]),s=F(n[0]-i[0]),a=F(i[1]),l=F(n[1]),d=Math.pow(Math.sin(r/2),2)+Math.pow(Math.sin(s/2),2)*Math.cos(a)*Math.cos(l);return Ke(2*Math.atan2(Math.sqrt(d),Math.sqrt(1-d)),e.units)}var re=wt;class Ee extends he{constructor(e,i,n,r){super(e,i,n);M(this,"_mode");M(this,"_moveStart");M(this,"_resizeAnker");this.onClick=this.onClick.bind(this),this.onMouseMove=se(this.onMouseMove.bind(this),16),this.onMouseDown=this.onMouseDown.bind(this),this.onMouseUp=this.onMouseUp.bind(this),this.setModel(r)}onClick(e){if(this._mode)return;if(this.hasPolygon()){const a=this.getPolygon();if(K(e.lngLat.toArray(),a)){e.preventDefault();return}}const i=e.lngLat.toArray(),n=this.map.unproject([e.point.x+this.plugin.options.circleMode.creationSize,e.point.y]),r=re(i,n.toArray(),{units:"meters"}),s=this.createCircle(i,r);this.createFeatureCollection(s),this.generateVertices(),this.render(),this.emitOnUpdate()}onMouseDown(e){var n,r;if(!((n=this.collection)!=null&&n.features.length)||((r=e.points)==null?void 0:r.length)>1)return;for(let s=0,a=this.collection.features[1].geometry.coordinates.length;s<a;s++)if(this.isNearby(this.collection.features[1].geometry.coordinates[s],e.point,this.isTouchEvent(e))){e.preventDefault(),this._resizeAnker=s,this._mode="resize";return}const i=this.getPolygon();K(e.lngLat.toArray(),i)&&(e.preventDefault(),this._moveStart={polygon:this.clonePolygon(),point:[...i.properties.center],start:e.lngLat},this._mode="move")}onMouseMove(e){var n;if(!this._mode||!((n=this.collection)!=null&&n.features.length))return;let i;switch(this._mode){case"move":if(!this._moveStart)return;e.preventDefault(),i=this.getPolygon();const r=e.lngLat.lat-this._moveStart.start.lat,s=e.lngLat.lng-this._moveStart.start.lng;for(let l=0,d=i.geometry.coordinates[0].length;l<d;l++)i.geometry.coordinates[0][l][1]=this._moveStart.polygon[l][1]+r,i.geometry.coordinates[0][l][0]=this._moveStart.polygon[l][0]+s;i.properties.center[1]=this._moveStart.point[1]+r,i.properties.center[0]=this._moveStart.point[0]+s,this.generateVertices(),this.render();break;case"resize":if(!this._resizeAnker)return;e.preventDefault(),i=this.getPolygon();const a=re(i.properties.center,e.lngLat.toArray(),{units:"meters"});i.geometry.coordinates[0]=this.createCircle(i.properties.center,a).geometry.coordinates[0],i.properties.radius=a,this.generateVertices(),this.render();break}}onMouseUp(e){if(this._mode)switch(this._mode){case"move":case"resize":e.preventDefault(),this._mode=void 0,this._moveStart=void 0,this._resizeAnker=void 0,this.emitOnUpdate();break}}generateVertices(){if(!this.collection)return;const e=this.getPolygon(),i=this.createCircle(e.properties.center,e.properties.radius,4);this.collection.features[1].geometry.coordinates=i.geometry.coordinates[0].slice(0,-1)}createFeatureCollection(e){this.collection={type:"FeatureCollection",features:[e,{type:"Feature",geometry:{type:"MultiPoint",coordinates:[]},properties:{meta:"vertex"}}]}}register(){this.map.on("click",this.onClick),this.map.on("mousemove",this.onMouseMove),this.map.on("mousedown",this.onMouseDown),this.map.on("mouseup",this.onMouseUp),this.map.on("touchstart",this.onMouseDown),this.map.on("touchmove",this.onMouseMove),this.map.on("touchend",this.onMouseUp)}unregister(){this.map.off("click",this.onClick),this.map.off("mousemove",this.onMouseMove),this.map.off("mousedown",this.onMouseDown),this.map.off("mouseup",this.onMouseUp),this.map.off("touchstart",this.onMouseDown),this.map.off("touchmove",this.onMouseMove),this.map.off("touchend",this.onMouseUp)}setModel(e){var i;((i=e==null?void 0:e.properties)==null?void 0:i.meta)==="circle"?(this.createFeatureCollection(e),this.generateVertices()):this.collection=void 0,this.render()}onOptionsUpdate(){var e;(e=this.collection)!=null&&e.features[0]&&(this.collection.features[0].properties.minSizeLabel=this.plugin.options.minArea.label)}}function B(t,o){const e=document.createElement(t);return e.classList.add(o),e}class Te extends he{constructor(e,i,n,r){super(e,i,n);M(this,"_model");M(this,"_container");M(this,"_circle");M(this,"_widthContstraint");M(this,"_heightConstraint");M(this,"_minSizeLabel");this.onViewportChangeEnd=this.onViewportChangeEnd.bind(this),this.onViewportChange=se(this.onViewportChange.bind(this),100),this._model=r,this._container=B("div","maplibregl-draw-circle-mode"),this._widthContstraint=B("div","maplibregl-draw-circle-mode-width-constraint"),this._heightConstraint=B("div","maplibregl-draw-circle-mode-height-constraint"),this._circle=B("div","maplibregl-draw-circle-mode-circle"),this._circle.innerHTML=`<svg class="maplibre-draw-min-area-pattern" xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
<defs>
<pattern id="maplibre-draw-min-area-pattern" patternUnits="userSpaceOnUse" width="4.5" height="4.5" patternTransform="rotate(135)">
<line x1="0" y="0" x2="0" y2="4.5" stroke="currentColor" stroke-width="1" />
</pattern>
</defs>
<rect width="100%" height="100%" fill="url(#maplibre-draw-min-area-pattern)" :opacity="1" />
</svg>`,this._minSizeLabel=B("div","maplibre-draw-circle-mode-below-min-area-size-label"),e.options.minArea.label&&(this._minSizeLabel.textContent=e.options.minArea.label),this._container.appendChild(this._heightConstraint),this._heightConstraint.appendChild(this._widthContstraint),this._widthContstraint.appendChild(this._circle),this._circle.appendChild(this._minSizeLabel),this.setPadding()}onViewportChange(){this._model=this.viewportToModel(),this._model.properties.tooSmall?this._circle.classList.add("maplibregl-draw-circle-too-small"):this._circle.classList.remove("maplibregl-draw-circle-too-small")}onViewportChangeEnd(){this._model=this.viewportToModel(),this.emitOnUpdate(this._model),this._model.properties.tooSmall?this._circle.classList.add("maplibregl-draw-circle-too-small"):this._circle.classList.remove("maplibregl-draw-circle-too-small")}viewportToModel(){const e=this._container.offsetLeft+this._circle.offsetLeft,i=this._container.offsetTop+this._circle.offsetTop,n=this.map.unproject([e+this._circle.offsetWidth/2,i+this._circle.offsetHeight/2]),r=this.map.unproject([e+this._circle.offsetWidth/2,i]),s=n.toArray(),a=re(r.toArray(),s,{units:"meters"});return this.createCircle(s,a)}register(){this.map.getCanvasContainer().appendChild(this._container),this.map.on("dragend",this.onViewportChangeEnd),this.map.on("zoomend",this.onViewportChangeEnd),this.map.on("zoom",this.onViewportChange)}unregister(){this.map.getCanvasContainer().removeChild(this._container),this.map.off("dragend",this.onViewportChangeEnd),this.map.off("zoomend",this.onViewportChangeEnd),this.map.off("zoom",this.onViewportChange)}setModel(e){(e==null?void 0:e.properties.meta)==="circle"?this._model=this.createCircle(e.properties.center,e.properties.radius):this._model=void 0}setPadding(){var i;const e=(i=this.plugin.options.fitBoundsOptions)==null?void 0:i.padding;switch(typeof e){case"number":this._container.style.setProperty("--padding",`${e}px`);break;case"object":let n;for(n in e)typeof e[n]=="number"&&this._container.style.setProperty(`--padding-${n}`,`${e[n]}px`);break}}onOptionsUpdate(){this.plugin.options.minArea.label&&(this._minSizeLabel.textContent=this.plugin.options.minArea.label)}}function Mt(t,o={}){var e=typeof o=="object"?o.mutate:o;if(!t)throw new Error("geojson is required");var i=st(t),n=[];switch(i){case"LineString":n=ie(t,i);break;case"MultiLineString":case"Polygon":Y(t).forEach(function(s){n.push(ie(s,i))});break;case"MultiPolygon":Y(t).forEach(function(s){var a=[];s.forEach(function(l){a.push(ie(l,i))}),n.push(a)});break;case"Point":return t;case"MultiPoint":var r={};Y(t).forEach(function(s){var a=s.join("-");Object.prototype.hasOwnProperty.call(r,a)||(n.push(s),r[a]=!0)});break;default:throw new Error(i+" geometry not supported")}return t.coordinates?e===!0?(t.coordinates=n,t):{type:i,coordinates:n}:e===!0?(t.geometry.coordinates=n,t):ce({type:i,coordinates:n},t.properties,{bbox:t.bbox,id:t.id})}function ie(t,o){var e=Y(t);if(e.length===2&&!be(e[0],e[1]))return e;var i=[],n=e.length-1,r=i.length;i.push(e[0]);for(var s=1;s<n;s++){var a=i[i.length-1];e[s][0]===a[0]&&e[s][1]===a[1]||(i.push(e[s]),r=i.length,r>2&&we(i[r-3],i[r-1],i[r-2])&&i.splice(i.length-2,1))}if(i.push(e[e.length-1]),r=i.length,(o==="Polygon"||o==="MultiPolygon")&&be(e[0],e[e.length-1])&&r<4)throw new Error("invalid polygon");return o==="LineString"&&r<3||we(i[r-3],i[r-1],i[r-2])&&i.splice(i.length-2,1),i}function be(t,o){return t[0]===o[0]&&t[1]===o[1]}function we(t,o,e){var i=e[0],n=e[1],r=t[0],s=t[1],a=o[0],l=o[1],d=i-r,h=n-s,c=a-r,u=l-s,p=d*u-h*c;return p!==0?!1:Math.abs(c)>=Math.abs(u)?c>0?r<=i&&i<=a:a<=i&&i<=r:u>0?s<=n&&n<=l:l<=n&&n<=s}function xe(t){if(!t)throw new Error("geojson is required");switch(t.type){case"Feature":return ke(t);case"FeatureCollection":return _t(t);case"Point":case"LineString":case"Polygon":case"MultiPoint":case"MultiLineString":case"MultiPolygon":case"GeometryCollection":return ue(t);default:throw new Error("unknown GeoJSON type")}}function ke(t){const o={type:"Feature"};return Object.keys(t).forEach(e=>{switch(e){case"type":case"properties":case"geometry":return;default:o[e]=t[e]}}),o.properties=ze(t.properties),t.geometry==null?o.geometry=null:o.geometry=ue(t.geometry),o}function ze(t){const o={};return t&&Object.keys(t).forEach(e=>{const i=t[e];typeof i=="object"?i===null?o[e]=null:Array.isArray(i)?o[e]=i.map(n=>n):o[e]=ze(i):o[e]=i}),o}function _t(t){const o={type:"FeatureCollection"};return Object.keys(t).forEach(e=>{switch(e){case"type":case"features":return;default:o[e]=t[e]}}),o.features=t.features.map(e=>ke(e)),o}function ue(t){const o={type:t.type};return t.bbox&&(o.bbox=t.bbox),t.type==="GeometryCollection"?(o.geometries=t.geometries.map(e=>ue(e)),o):(o.coordinates=De(t.coordinates),o)}function De(t){const o=t;return typeof o[0]!="object"?o.slice():o.map(e=>De(e))}var Ct=xe;function St(t,o){var e=t[0]-o[0],i=t[1]-o[1];return e*e+i*i}function Pt(t,o,e){var i=o[0],n=o[1],r=e[0]-i,s=e[1]-n;if(r!==0||s!==0){var a=((t[0]-i)*r+(t[1]-n)*s)/(r*r+s*s);a>1?(i=e[0],n=e[1]):a>0&&(i+=r*a,n+=s*a)}return r=t[0]-i,s=t[1]-n,r*r+s*s}function At(t,o){for(var e=t[0],i=[e],n,r=1,s=t.length;r<s;r++)n=t[r],St(n,e)>o&&(i.push(n),e=n);return e!==n&&i.push(n),i}function ne(t,o,e,i,n){for(var r=i,s,a=o+1;a<e;a++){var l=Pt(t[a],t[o],t[e]);l>r&&(s=a,r=l)}r>i&&(s-o>1&&ne(t,o,s,i,n),n.push(t[s]),e-s>1&&ne(t,s,e,i,n))}function Lt(t,o){var e=t.length-1,i=[t[0]];return ne(t,0,e,o,i),i.push(t[e]),i}function Q(t,o,e){if(t.length<=2)return t;var i=o!==void 0?o*o:1;return t=e?t:At(t,i),t=Lt(t,i),t}function Ot(t,o={}){var e,i,n;if(o=o??{},!je(o))throw new Error("options is invalid");const r=(e=o.tolerance)!=null?e:1,s=(i=o.highQuality)!=null?i:!1,a=(n=o.mutate)!=null?n:!1;if(!t)throw new Error("geojson is required");if(r&&r<0)throw new Error("invalid tolerance");return a!==!0&&(t=xe(t)),Oe(t,function(l){Et(l,r,s)}),t}function Et(t,o,e){const i=t.type;if(i==="Point"||i==="MultiPoint")return t;if(Mt(t,{mutate:!0}),i!=="GeometryCollection")switch(i){case"LineString":t.coordinates=Q(t.coordinates,o,e);break;case"MultiLineString":t.coordinates=t.coordinates.map(n=>Q(n,o,e));break;case"Polygon":t.coordinates=Me(t.coordinates,o,e);break;case"MultiPolygon":t.coordinates=t.coordinates.map(n=>Me(n,o,e))}return t}function Me(t,o,e){return t.map(function(i){if(i.length<4)throw new Error("invalid polygon");let n=o,r=Q(i,n,e);for(;!Tt(r);)n-=n*.01,r=Q(i,n,e);return(r[r.length-1][0]!==r[0][0]||r[r.length-1][1]!==r[0][1])&&r.push(r[0]),r})}function Tt(t){return t.length<3?!1:!(t.length===3&&t[2][0]===t[0][0]&&t[2][1]===t[0][1])}var xt=Ot;class Ie extends he{constructor(e,i,n,r){super(e,i,n);M(this,"_mode");M(this,"_moveStart");this.onClick=this.onClick.bind(this),this.onDoubleClick=this.onDoubleClick.bind(this),this.onMouseMove=se(this.onMouseMove.bind(this),16),this.onMouseDown=this.onMouseDown.bind(this),this.onMouseUp=this.onMouseUp.bind(this),this.setModel(r)}onClick(e){var r;const i=e.lngLat.toArray();let n;switch(this._mode){case"create":if(n=this.getPolygon(),this.isNearby(n.geometry.coordinates[0][0],e.point,this.isTouchEvent(e))){this.getPolygon().geometry.coordinates[0].splice(1,1),this.endCreation();return}n.geometry.coordinates[0].splice(1,0,i),this.collection.features[1].geometry.coordinates[1]=i;const s=n.geometry.coordinates[0].length,a=s-2;n.properties.hasHelperVertex&&s===5&&(n.geometry.coordinates[0].splice(a,1),n.properties.hasHelperVertex=!1);break;default:if(e.originalEvent.ctrlKey&&this.collection){e.preventDefault();const l=this.getPolygon(),d=l.geometry.coordinates[0].length;if(d<5)return;for(let h=0;h<d;h++)if(this.isNearby(l.geometry.coordinates[0][h],e.point,this.isTouchEvent(e))){l.geometry.coordinates[0].splice(h,1),h===0&&(l.geometry.coordinates[0].splice(-1,1),l.geometry.coordinates[0].push(l.geometry.coordinates[0][0])),this.generateCollectionWithVertexes(),(r=this.source)==null||r.setData(this.collection),this.emitOnUpdate();return}}if(this.hasPolygon()&&(n=this.getPolygon(),K(e.lngLat.toArray(),n))){e.preventDefault();return}this.createFeatureCollection({type:"Feature",geometry:{type:"Polygon",coordinates:[[i,i,i,i]]},properties:{meta:"polygon",hasHelperVertex:!0}}),this.collection.features[1].geometry.coordinates=[i,i],this._mode="create"}this.render()}onDoubleClick(e){if(!(!this._mode||!this.collection))switch(this._mode){case"create":e.preventDefault(),this.endCreation();break}}onMouseMove(e){var r;if(!this._mode||!((r=this.collection)!=null&&r.features.length))return;let i,n;switch(this._mode){case"create":e.preventDefault(),i=this.getPolygon(),n=e.lngLat.toArray();const s=i.geometry.coordinates[0].length,a=s-2;if(i.geometry.coordinates[0][1]=n,i.properties.hasHelperVertex){const h=this.map.unproject([e.point.x+1,e.point.y]),c=Math.abs((h.lng-n[0])/3);i.geometry.coordinates[0][a]=this.calculateB(n,i.geometry.coordinates[0][0],c)}this.render();break;case"move":if(!this._moveStart)return;e.preventDefault(),i=this.getPolygon();const l=e.lngLat.lng-this._moveStart.start.lng,d=e.lngLat.lat-this._moveStart.start.lat;for(let h=0,c=i.geometry.coordinates[0].length;h<c;h++)i.geometry.coordinates[0][h][0]=this._moveStart.polygon[h][0]+l,i.geometry.coordinates[0][h][1]=this._moveStart.polygon[h][1]+d;this.generateCollectionWithVertexes(),this.render();break;case"move_vertex":if(!this._moveStart)return;e.preventDefault(),i=this.getPolygon(),n=e.lngLat.toArray();for(let h=0,c=i.geometry.coordinates[0].length;h<c;h++)if(this._moveStart.polygon[h][0]===this._moveStart.point[0]&&this._moveStart.polygon[h][1]===this._moveStart.point[1]){i.geometry.coordinates[0][h]=n,h===0&&(i.geometry.coordinates[0][i.geometry.coordinates[0].length-1]=n);break}this.generateCollectionWithVertexes(),this.render();break;case"add_vertex":if(!this._moveStart)return;e.preventDefault(),i=this.getPolygon(),n=e.lngLat.toArray();for(let h=0,c=i.geometry.coordinates[0].length;h<c-1;h++){const u=this.getMidpoint(i.geometry.coordinates[0][h],i.geometry.coordinates[0][h+1]);if(u[0]===this._moveStart.point[0]&&u[1]===this._moveStart.point[1]){i.geometry.coordinates[0].splice(h+1,0,u),this._moveStart={polygon:this.clonePolygon(),point:u,start:e.lngLat},this._mode="move_vertex";break}}this.generateCollectionWithVertexes(),this.render();break}}onMouseDown(e){var n,r;if(this._mode==="create"||!((n=this.collection)!=null&&n.features.length)||((r=e.points)==null?void 0:r.length)>1)return;for(let s=0,a=this.collection.features[1].geometry.coordinates.length;s<a;s++)if(this.isNearby(this.collection.features[1].geometry.coordinates[s],e.point,this.isTouchEvent(e))){e.preventDefault(),this._moveStart={polygon:this.clonePolygon(),point:this.collection.features[1].geometry.coordinates[s],start:e.lngLat},this._mode="move_vertex";return}for(let s=0,a=this.collection.features[2].geometry.coordinates.length;s<a;s++)if(this.isNearby(this.collection.features[2].geometry.coordinates[s],e.point,this.isTouchEvent(e))){e.preventDefault(),this._moveStart={polygon:this.clonePolygon(),point:this.collection.features[2].geometry.coordinates[s],start:e.lngLat},this._mode="add_vertex";return}const i=this.getPolygon();K(e.lngLat.toArray(),i)&&(e.preventDefault(),this._moveStart={polygon:this.clonePolygon(),start:e.lngLat},this._mode="move")}onMouseUp(e){if(this._mode)switch(this._mode){case"move":case"move_vertex":case"add_vertex":e.preventDefault(),this._mode=void 0,this._moveStart=void 0,e.originalEvent.ctrlKey||this.emitOnUpdate();break}}register(){this.map.on("click",this.onClick),this.map.on("dblclick",this.onDoubleClick),this.map.on("mousemove",this.onMouseMove),this.map.on("mousedown",this.onMouseDown),this.map.on("mouseup",this.onMouseUp),this.map.on("touchstart",this.onMouseDown),this.map.on("touchmove",this.onMouseMove),this.map.on("touchend",this.onMouseUp)}unregister(){this.map.off("click",this.onClick),this.map.off("dblclick",this.onDoubleClick),this.map.off("mousemove",this.onMouseMove),this.map.off("mousedown",this.onMouseDown),this.map.off("mouseup",this.onMouseUp),this.map.off("touchstart",this.onMouseDown),this.map.off("touchmove",this.onMouseMove),this.map.off("touchend",this.onMouseUp)}setModel(e){var i;((i=e==null?void 0:e.properties)==null?void 0:i.meta)==="polygon"?(this.createFeatureCollection(e),this.generateCollectionWithVertexes()):this.collection=void 0,this.render()}onOptionsUpdate(){var e;(e=this.collection)!=null&&e.features[0]&&(this.collection.features[0].properties.minSizeLabel=this.plugin.options.minArea.label)}createFeatureCollection(e){this.collection={type:"FeatureCollection",features:[e,{type:"Feature",geometry:{type:"MultiPoint",coordinates:[]},properties:{meta:"vertex"}},{type:"Feature",geometry:{type:"MultiPoint",coordinates:[]},properties:{meta:"midpoint"}}]}}endCreation(){const e=this.getPolygon();this._mode=void 0,this.collection.features[0]=xt(e,{tolerance:1e-5,highQuality:!0}),this.generateCollectionWithVertexes(),this.render(),this.emitOnUpdate()}generateCollectionWithVertexes(){if(!this.collection)return;const e=this.getPolygon(),i=e.geometry.coordinates[0].length;this.collection.features[1].geometry.coordinates=e.geometry.coordinates[0].slice(0,-1);const n=new Array(i-1);for(let r=0;r<i-1;r++)n[r]=this.getMidpoint(e.geometry.coordinates[0][r],e.geometry.coordinates[0][r+1]);this.collection.features[2].geometry.coordinates=n}calculateB(e,i,n){const r=e[0]-i[0],s=e[1]-i[1],a=Math.sqrt(r*r+s*s),l=i[0]+n*(-s/a),d=i[1]+n*(r/a);return[l,d]}}const kt=[{id:"gl-draw-line",type:"line",filter:["all",["==","$type","LineString"],["!=","mode","static"]],layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":"#e74b3c","line-dasharray":[.2,2],"line-width":2}},{id:"gl-draw-polygon-fill",type:"fill",filter:["all",["==","$type","Polygon"],["!=","mode","static"]],paint:{"fill-color":"#3c99e7","fill-outline-color":"#3c99e7","fill-opacity":.1}},{id:"gl-draw-polygon-fill-below-min-area-size",type:"fill",filter:["all",["==","$type","Polygon"],["==","tooSmall",!0]],paint:{"fill-pattern":"maplibre-draw-min-area-pattern"}},{id:"gl-draw-polygon-fill-below-min-area-size-label",type:"symbol",filter:["all",["==","$type","Polygon"],["==","tooSmall",!0],["has","minSizeLabel"]],layout:{"text-field":["get","minSizeLabel"],"text-font":["Open Sans Bold"],"text-size":24,"text-justify":"center","text-anchor":"center"},paint:{"text-color":"#e74b3c","text-halo-color":"#fff","text-halo-width":3}},{id:"gl-draw-polygon-midpoint",type:"circle",filter:["all",["==","$type","Point"],["==","meta","midpoint"]],paint:{"circle-radius":4,"circle-color":"#e74b3c"}},{id:"gl-draw-polygon-stroke-active",type:"line",filter:["all",["==","$type","Polygon"],["!=","mode","static"]],layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":"#e74b3c","line-dasharray":[.2,2],"line-width":2}},{id:"gl-draw-polygon-and-line-vertex-halo-active",type:"circle",filter:["all",["==","meta","vertex"],["==","$type","Point"],["!=","mode","static"]],paint:{"circle-radius":8,"circle-color":"#FFF"}},{id:"gl-draw-polygon-and-line-vertex-active",type:"circle",filter:["all",["==","meta","vertex"],["==","$type","Point"],["!=","mode","static"]],paint:{"circle-radius":5,"circle-color":"#e74b3c"}},{id:"gl-draw-line-static",type:"line",filter:["all",["==","$type","LineString"],["==","mode","static"]],layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":"#000","line-width":3}},{id:"gl-draw-polygon-fill-static",type:"fill",filter:["all",["==","$type","Polygon"],["==","mode","static"]],paint:{"fill-color":"#000","fill-outline-color":"#000","fill-opacity":.1}},{id:"gl-draw-polygon-stroke-static",type:"line",filter:["all",["==","$type","Polygon"],["==","mode","static"]],layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":"#000","line-width":3}}];var E=(t=>(t.POLYGON="POLYGON",t.CIRCLE="CIRCLE",t.CIRCLE_STATIC="CIRCLE_STATIC",t))(E||{});function zt(t,o={}){if(t.bbox!=null&&o.recompute!==!0)return t.bbox;const e=[1/0,1/0,-1/0,-1/0];return Le(t,i=>{e[0]>i[0]&&(e[0]=i[0]),e[1]>i[1]&&(e[1]=i[1]),e[2]<i[0]&&(e[2]=i[0]),e[3]<i[1]&&(e[3]=i[1])}),e}var Dt=zt;const T=class T{constructor(o,e,i={}){M(this,"map");M(this,"_model");M(this,"_mode");M(this,"_modeInstance");M(this,"_source");M(this,"options");this.map=o,this._model=e?this.prepareModel(e):void 0,this._mode=i.mode??E.POLYGON,this.options={...i,styles:i.styles??kt,autoZoom:i.autoZoom??!0,minArea:i.minArea??{},pointerPrecision:{mouse:24,touch:36,...i.pointerPrecision||{}},circleMode:{creationSize:75,...i.circleMode||{}}},this.setup=this.setup.bind(this),this.zoomToModel=this.zoomToModel.bind(this),i.waitForSetup||this.setup()}get mode(){return this._mode}setMode(o,e){this._model=e?this.prepareModel(e):void 0,this._mode!==o&&(this._mode=o,this.setupMode())}setupMode(){switch(this._modeInstance&&(this._modeInstance.unregister(),this._modeInstance.clear()),this._mode){case E.POLYGON:this._modeInstance=new Ie(this,this.map,this._source,this._model);break;case E.CIRCLE:this._modeInstance=new Ee(this,this.map,this._source,this._model);break;case E.CIRCLE_STATIC:this._modeInstance=new Te(this,this.map,this._source,this._model);break;default:throw new Error(`Unsupported mode "${this._mode}"`)}this.zoomToModel(),this._modeInstance&&(this._modeInstance.register(),this._modeInstance.render())}setupMap(){this._source=this.map.getSource(T.SOURCE_ID),this._source||(this.map.addSource(T.SOURCE_ID,{type:"geojson",data:{type:"FeatureCollection",features:[]}}),this._source=this.map.getSource(T.SOURCE_ID),this.setupStyles(),this.map.on("resize",this.zoomToModel)),this._modeInstance&&(this._modeInstance.source=this._source)}setupStyles(){for(let o=0,e=this.options.styles.length;o<e;o++)this.map.addLayer({...this.options.styles[o],source:T.SOURCE_ID})}setStyles(o){this.removeStyles(),this.options.styles=o,this.setupStyles()}setOnUpdate(o){this.options.onUpdate=o}setModel(o){var e;this._model=o?this.prepareModel(o):void 0,(e=this._modeInstance)==null||e.setModel(this._model),this.zoomToModel()}setMinAreaSize(o){this.options.minArea.size=o,o&&this.setMinAreaSizePattern()}setMinAreaColor(o){this.options.minArea.color=o,this.options.minArea.size&&this.setMinAreaSizePattern()}setMinAreaLabel(o){var e;this.options.minArea.label=o,(e=this._modeInstance)==null||e.onOptionsUpdate()}zoomToModel(){this._model&&this.options.autoZoom&&this.map.fitBounds(Dt(this._model),this.options.fitBoundsOptions)}setAutoZoom(o){this.options.autoZoom=o}removeStyles(){for(let o=0,e=this.options.styles.length;o<e;o++)this.map.removeLayer(this.options.styles[o].id)}setup(){this.setupMap(),this.setupMode(),this.options.minArea.size&&this.setMinAreaSizePattern()}prepareModel(o){var i,n;const e=Ct(o);if((n=(i=e.geometry.coordinates)==null?void 0:i[0])!=null&&n.length){const r=e.geometry.coordinates[0][0],s=e.geometry.coordinates[0][e.geometry.coordinates[0].length-1];r[0]===s[0]&&s[1]===s[1]||e.geometry.coordinates[0].push(e.geometry.coordinates[0][0])}return e}setMinAreaSizePattern(){const o=document.createElement("canvas"),e=o.getContext("2d",{antialias:!0}),i=window.devicePixelRatio||1,n=12*i,r=n,s=n,a=16*i;o.width=r,o.height=s,e.fillStyle=this.options.minArea.color||"#e74b3c",e.translate(r/2,s/2),e.rotate(Math.PI/2),e.translate(-r/2,-s/2),e.beginPath(),e.moveTo(0,s*(1/a)),e.lineTo(r*(1/a),0),e.lineTo(0,0),e.lineTo(0,s*(1/a)),e.fill(),e.beginPath(),e.moveTo(r,s*(1/a)),e.lineTo(r*(1/a),s),e.lineTo(0,s),e.lineTo(0,s*((a-1)/a)),e.lineTo(r*((a-1)/a),0),e.lineTo(r,0),e.lineTo(r,s*(1/a)),e.fill(),e.beginPath(),e.moveTo(r,s*((a-1)/a)),e.lineTo(r*((a-1)/a),s),e.lineTo(r,s),e.lineTo(r,s*((a-1)/a)),e.fill();const l=e.getImageData(0,0,r,s);this.map.hasImage(T.MIN_AREA_PATTERN_ID)?this.map.updateImage(T.MIN_AREA_PATTERN_ID,l):this.map.addImage(T.MIN_AREA_PATTERN_ID,l,{pixelRatio:2*i})}dispose(){var o;(o=this._modeInstance)==null||o.unregister(),this.map.off("resize",this.zoomToModel);try{if(this.map){for(let e=0,i=this.options.styles.length;e<i;e++)this.map.getLayer(this.options.styles[e].id)&&this.map.removeLayer(this.options.styles[e].id);this.map.getSource(T.SOURCE_ID)&&this.map.removeSource(T.SOURCE_ID)}}catch{}}};M(T,"SOURCE_ID","mgl-draw-plugin"),M(T,"MIN_AREA_PATTERN_ID","maplibre-draw-min-area-pattern");let j=T;const It=g.defineComponent({name:"MglDrawControl",components:{MglCustomControl:oe},props:{position:{type:String,default:q.TOP_RIGHT},model:{type:Object},mode:{type:String,default:E.POLYGON},defaultMode:{type:String,default:E.POLYGON},autoZoom:{type:Boolean,default:!0},minAreaSize:{type:Number},minAreaColor:{type:String},minAreaLabel:{type:String},pointerPrecision:{type:Object}},emits:["update:mode","update:model"],slots:Object,setup(t,{emit:o,slots:e}){const i=g.inject(ae),n=g.inject(_e),r=g.inject(Se),s=g.reactive(new j(i.value,t.model,{mode:t.mode,autoZoom:t.autoZoom,pointerPrecision:t.pointerPrecision,minArea:{size:t.minAreaSize,color:t.minAreaColor,label:t.minAreaLabel},fitBoundsOptions:r,onUpdate:l=>o("update:model",l),waitForSetup:!0}));function a(l){s.mode===l?s.setMode(t.defaultMode,t.model):s.setMode(l,t.model),o("update:mode",l)}return g.watch(()=>t.mode,()=>t.mode!==s.mode&&a(t.mode)),g.watch(()=>t.model,()=>s.setModel(t.model)),g.watch(()=>t.autoZoom,()=>s.setAutoZoom(t.autoZoom)),g.watch(()=>t.minAreaSize,()=>s.setMinAreaSize(t.minAreaSize)),g.watch(()=>t.minAreaColor,()=>s.setMinAreaColor(t.minAreaColor)),g.watch(()=>t.minAreaLabel,()=>s.setMinAreaColor(t.minAreaLabel)),g.watch(n,()=>n.value&&s.setup(),{immediate:!0}),g.onBeforeUnmount(()=>s.dispose()),()=>g.h(oe,{position:t.position},()=>e.buttons?e.buttons({mode:s.mode,setMode:a}):[g.h(W,{type:G.MDI,path:"M17,15.7V13H19V17L10,21L3,14L7,5H11V7H8.3L5.4,13.6L10.4,18.6L17,15.7M22,5V7H19V10H17V7H14V5H17V2H19V5H22Z",class:["maplibregl-ctrl-icon maplibregl-draw-control maplibregl-draw-control-polygon",s.mode===E.POLYGON?"is-active":void 0],onClick:()=>a(E.POLYGON)}),g.h(W,{type:G.MDI,path:"M11,19A6,6 0 0,0 17,13H19A8,8 0 0,1 11,21A8,8 0 0,1 3,13A8,8 0 0,1 11,5V7A6,6 0 0,0 5,13A6,6 0 0,0 11,19M19,5H22V7H19V10H17V7H14V5H17V2H19V5Z",class:["maplibregl-ctrl-icon maplibregl-draw-control maplibregl-draw-control-circle",s.mode===E.CIRCLE?"is-active":void 0],onClick:()=>a(E.CIRCLE)}),g.h(W,{type:G.MDI,path:"M3.05,13H1V11H3.05C3.5,6.83 6.83,3.5 11,3.05V1H13V3.05C17.17,3.5 20.5,6.83 20.95,11H23V13H20.95C20.5,17.17 17.17,20.5 13,20.95V23H11V20.95C6.83,20.5 3.5,17.17 3.05,13M12,5A7,7 0 0,0 5,12A7,7 0 0,0 12,19A7,7 0 0,0 19,12A7,7 0 0,0 12,5Z",class:["maplibregl-ctrl-icon maplibregl-draw-control maplibregl-draw-control-circle-static",s.mode===E.CIRCLE_STATIC?"is-active":void 0],onClick:()=>a(E.CIRCLE_STATIC)})])}});exports.AllOptions=Ze;exports.AllSourceOptions=We;exports.ButtonType=G;exports.CircleMode=Ee;exports.CircleStaticMode=Te;exports.CustomControl=X;exports.DrawMode=E;exports.DrawPlugin=j;exports.MglButton=W;exports.MglCustomControl=oe;exports.PolygonMode=Ie;exports.Position=q;exports.PositionValues=le;exports.componentIdSymbol=He;exports.debounce=Ge;exports.draw_control=It;exports.emitterSymbol=$e;exports.fitBoundsOptionsSymbol=Se;exports.isInitializedSymbol=Ce;exports.isLoadedSymbol=_e;exports.mapSymbol=ae;exports.sourceIdSymbol=Be;exports.sourceLayerRegistry=qe;exports.usePositionWatcher=Pe;
//# sourceMappingURL=draw.control-D4sJ2phO.cjs.map