mahal_map 1.6.12 → 1.6.13
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 +51 -0
- package/dist/index.d.mts +49 -3
- package/dist/index.d.ts +49 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +5 -5
- package/dist/index.mjs.map +1 -1
- package/dist/mahal_map.sdk.js +1 -1
- package/package.json +8 -2
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
1
|
+
var Me=Object.defineProperty;var k=(r,e)=>{for(var t in e)Me(r,t,{get:e[t],enumerable:!0})};var y=class{constructor(e){this.map=e}setZoom(e,t=!0){t?this.map.easeTo({zoom:e}):this.map.setZoom(e)}setBearing(e,t=!0){t?this.map.easeTo({bearing:e}):this.map.setBearing(e)}setPitch(e,t=!0){t?this.map.easeTo({pitch:e}):this.map.setPitch(e)}toggle3D(e){this.map.easeTo({pitch:e?60:0,bearing:e?this.map.getBearing():0,duration:800})}resetNorth(){this.map.easeTo({bearing:0,pitch:0,duration:600})}flyTo(e){this.map.flyTo({speed:1.2,curve:1.42,essential:!0,...e})}getPitch(){return this.map.getPitch()}};var X="https://platform.mahal.tj/api/",B=/^([-+]?(?:[1-8]?\d(?:\.\d+)?|90(?:\.0+)?)),\s*([-+]?(?:180(?:\.0+)?|(?:(?:1[0-7]\d)|(?:[1-9]?\d))(?:\.\d+)?))$/,D=/^([-+]?(?:180(?:\.0+)?|(?:(?:1[0-7]\d)|(?:[1-9]?\d))(?:\.\d+)?)),\s*([-+]?(?:[1-8]?\d(?:\.\d+)?|90(?:\.0+)?))$/;var Y="https://mtile.gram.tj/custom-styles/dark-style.json",Q="https://mtile.gram.tj/custom-styles/mapstyle.json",ee="https://mtile.gram.tj/custom-styles/style_maptiler_basic_hn.json";var T="https://route.gram.tj",L={light:"standard-day",dark:"standard-night"};function A(r,e){return`${r}/maps/${e}.json`}function Z(r,e,t){let i=r.includes("?")?"&":"?";return`${r}${i}${e}=${encodeURIComponent(t)}`}function F(r,e,t){let i=r;return t&&(i=Z(i,"token",t)),e==="ru"&&(i=Z(i,"lang","ru")),i}var R="";function be(r){r!==""&&(R=r)}function Le(){R=""}var v=()=>R;var Ce=/<svg[\s>]/i,Se=/<(svg|path|g|circle|rect|polygon|line|polyline|ellipse|use)\b/i,C=(r,e,t)=>{let i=new RegExp(`\\s${e}="[^"]*"`,"i");return i.test(r)?r.replace(i,` ${e}="${t}"`):r.replace(/<svg\b/i,`<svg ${e}="${t}"`)},xe=r=>r.replace(/&/g,"&").replace(/"/g,"""),te=r=>`<image href="${xe(r)}" x="14" y="12" width="22" height="22" style="filter: brightness(0) invert(1);" />`,we=r=>{let e=r.trim();if(Ce.test(e)){let t=C(e,"x","14");return t=C(t,"y","12"),t=C(t,"width","22"),t=C(t,"height","22"),/\spreserveAspectRatio="/i.test(t)||(t=t.replace(/<svg\b/i,'<svg preserveAspectRatio="xMidYMid meet"')),t}return`<g transform="translate(14 12)">${e}</g>`},Ie=({innerSvg:r,innerUrl:e})=>{let t=r?.trim(),i=e?.trim();return t?Se.test(t)?we(t):te(t):i?te(i):""},re=(r,e={})=>`<svg
|
|
2
2
|
width="50"
|
|
3
3
|
height="62"
|
|
4
4
|
viewBox="0 0 50 62"
|
|
@@ -20,7 +20,7 @@ var fe=Object.defineProperty;var P=(r,e)=>{for(var t in e)fe(r,t,{get:e[t],enume
|
|
|
20
20
|
stroke-width="2"
|
|
21
21
|
/>
|
|
22
22
|
<g clip-path="url(#clip0_367_31358)">
|
|
23
|
-
${
|
|
23
|
+
${Ie(e)}
|
|
24
24
|
</g>
|
|
25
25
|
<defs>
|
|
26
26
|
<filter
|
|
@@ -67,7 +67,7 @@ var fe=Object.defineProperty;var P=(r,e)=>{for(var t in e)fe(r,t,{get:e[t],enume
|
|
|
67
67
|
/>
|
|
68
68
|
</clipPath>
|
|
69
69
|
</defs>
|
|
70
|
-
</svg>`;var
|
|
70
|
+
</svg>`;var H=class{constructor(e){this.props=e;this.element=this.createElement()}createElement(){let e=document.createElement("div");e.style.cursor="pointer";let t=this.props.svg?this.applyColorToCustomSvg(this.props.svg):re(this.props.color??"#278960",{innerSvg:this.props.innerSvg,innerUrl:this.props.innerUrl});return e.innerHTML=t,this.props.draggable&&(e.draggable=!0),e}applyColorToCustomSvg(e){return this.props.color?e.replace(/fill="[^"]*"/g,`fill="${this.props.color}"`):e}getElement(){return this.element}getCoordinates(){return this.props.coordinates}isDraggable(){return!!this.props.draggable}getAnchor(){return this.props.anchor||"center"}};function ie(r,e,t){return new r.Marker({element:t.getElement(),draggable:t.isDraggable?.()??!1,anchor:t.getAnchor?.()??"center"}).setLngLat(t.getCoordinates()).addTo(e)}var Pe={dark:Y,light:Q},Ee={dark:"#ffffff",light:"#19191a"},h=class h{constructor(){this.isReady=!1;this.readyCallbacks=[];this.language="tj";this.instanceKey="";this.engine="legacy";this.gramBase=T;this.gramPreset=L.light;this.presetIsExplicit=!1}static getInstanceKey(e){return typeof e.container=="string"&&e.container?e.container:"map"}static normalizeLanguage(e){return e==="ru"?"ru":"tj"}static setDefaultLanguage(e){h.defaultLanguage=h.normalizeLanguage(e)}static getDefaultStyle(e,t){return F(Pe[e],t,h.getMapToken())}static getVectorStyle(){return F(ee,void 0,h.getMapToken())}static getMapToken(){let e=v();if(!e)throw new Error("[MahalMap SDK] Map API key is required. Call keyUtils.saveKey() before creating the map or pass apikey in the SDK script URL.");return e}static getMaps3DCtor(e){let t=typeof window<"u"?window.Maps3D:void 0;return e||t}static create(e,t,i){let s=(typeof window<"u"?window.maplibregl:void 0)||t;if(!s)throw new Error("[MahalMap SDK] MapLibre GL was not found. Pass it as the second argument or include it through a script.");let o=h.normalizeLanguage(e.lang||h.defaultLanguage),p=e.theme==="dark"?"dark":"light",l=e.engine==="3d"?"3d":"legacy",a=new h,u=h.getInstanceKey(e);if(a.options=e,a.language=o,a.instanceKey=u,a.maplibre=s,a.engine=l,l==="3d"){a.gramBase=e.base||T,a.presetIsExplicit=!!e.preset,a.gramPreset=e.preset||L[p],a.maps3dCtor=h.getMaps3DCtor(i);let d=e.style?e.style:A(a.gramBase,a.gramPreset),c=a.maps3dCtor?a.maps3dCtor.transformRequest({base:a.gramBase,apiKey:v()||void 0}):void 0;if(a.map=new s.Map({container:e.container||"map",style:d,center:e.center||[69.624024,40.279687],zoom:e.zoom||5,pitch:e.pitch,bearing:e.bearing,attributionControl:!1,...c?{transformRequest:c}:{}}),e.enable3D){if(!a.maps3dCtor)throw new Error("[MahalMap SDK] Maps3D was not found. Pass it as the third argument to create() or include it through a script (window.Maps3D).");a.maps3dLayer=new a.maps3dCtor({apiKey:v()||void 0,base:a.gramBase,buildings:!0,...e.maps3d}),a.maps3dLayer.attach(a.map)}}else{let d=e.autoAddVectorSource?h.getVectorStyle():e.style?e.style:h.getDefaultStyle(p,o);a.map=new s.Map({container:e.container||"map",style:d,center:e.center||[69.624024,40.279687],zoom:e.zoom||5,pitch:e.pitch,bearing:e.bearing,attributionControl:!1})}return a.addLogo(p),a.map.on("load",()=>{a.isReady=!0,a.camera=new y(a.map),a.readyCallbacks.forEach(d=>d(a.map)),a.readyCallbacks=[]}),h.instances.set(u,a),a}static onReady(e,t){if(!h.instances.has(e)){let n=setInterval(()=>{h.instances.has(e)&&(clearInterval(n),h.onReady(e,t))},50);return}let i=h.getInstance(e);i.isReady?t(i.map):i.readyCallbacks.push(t)}static getInstance(e){let t=h.instances.get(e);if(!t)throw new Error("[MahalMap SDK] Map instance is not created");return t}static hasInstance(e){return h.instances.has(e)}static removeInstance(e){return h.instances.delete(e)}static addMarker(e,t){return e.addMarker(t)}static getCamera(e){return e.getCamera()}static getMap(e){return e.getMap()}static setStyle(e,t){e.setStyle(t)}static getMaps3DLayer(e){return e.getMaps3DLayer()}static setLanguage(e,t){e.setLanguage(t)}static setCenter(e,t){e.setCenter(t)}static setZoom(e,t){e.setZoom(t)}static destroy(e){e.destroy()}addMarker(e){return ie(this.maplibre,this.map,e)}init(e){this.map=e,this.camera=new y(e)}getCamera(){return this.camera}getMap(){return this.map}setStyle(e){if(this.options.theme=e,this.engine==="3d"){if(this.options.style||this.presetIsExplicit)return;this.gramPreset=L[e],this.map.setStyle(A(this.gramBase,this.gramPreset)),this.updateLogoColor(e);return}this.options.autoAddVectorSource||(this.options.style||this.map.setStyle(h.getDefaultStyle(e,this.language)),this.updateLogoColor(e))}setLanguage(e){if(this.language=h.normalizeLanguage(e),this.options.lang=this.language,this.engine==="3d"||this.options.autoAddVectorSource||this.options.style)return;let t=this.options.theme==="dark"?"dark":"light";this.map.setStyle(h.getDefaultStyle(t,this.language))}getMaps3DLayer(){return this.maps3dLayer}setCenter(e){this.map.setCenter(e)}setZoom(e){this.map.setZoom(e)}destroy(){this.maps3dLayer?.destroy?.(),this.maps3dLayer?.remove?.(),this.maps3dLayer=void 0,this.logoObserver?.disconnect(),this.logoObserver=void 0,this.logoHost?.remove(),this.logoHost=void 0,this.logoShadow=void 0,this.map.remove(),h.instances.delete(this.instanceKey)}addLogo(e){let t=this.map.getContainer(),i=document.createElement("div"),n=i.attachShadow({mode:"closed"});i.setAttribute("aria-label","Mahal"),i.dataset.mahal=Math.random().toString(36).slice(2),this.logoHost=i,this.logoShadow=n,this.applyLogoHostStyles(),this.renderLogo(e),t.appendChild(i),this.observeLogo(t)}updateLogoColor(e){this.logoShadow&&this.renderLogo(e)}renderLogo(e){this.logoShadow&&(this.logoShadow.innerHTML=`
|
|
71
71
|
<style>
|
|
72
72
|
:host {
|
|
73
73
|
all: initial;
|
|
@@ -87,7 +87,7 @@ var fe=Object.defineProperty;var P=(r,e)=>{for(var t in e)fe(r,t,{get:e[t],enume
|
|
|
87
87
|
}
|
|
88
88
|
</style>
|
|
89
89
|
<span class="logo-wrap" aria-hidden="true">
|
|
90
|
-
${this.getLogoSvg(
|
|
90
|
+
${this.getLogoSvg(Ee[e])}
|
|
91
91
|
</span>
|
|
92
92
|
`)}applyLogoHostStyles(){if(!this.logoHost)return;let e=this.logoHost.style;e.setProperty("position","absolute","important"),e.setProperty("right","10px","important"),e.setProperty("bottom","10px","important"),e.setProperty("z-index","1","important"),e.setProperty("display","block","important"),e.setProperty("visibility","visible","important"),e.setProperty("opacity","1","important"),e.setProperty("pointer-events","none","important"),e.setProperty("line-height","0","important"),e.setProperty("width","80px","important"),e.setProperty("height","18.45px","important")}observeLogo(e){this.logoHost&&(this.logoObserver?.disconnect(),this.logoObserver=new MutationObserver(()=>{this.logoHost&&(this.applyLogoHostStyles(),e.contains(this.logoHost)||e.appendChild(this.logoHost))}),this.logoObserver.observe(e,{childList:!0}),this.logoObserver.observe(this.logoHost,{attributes:!0,attributeFilter:["class","style","hidden"]}))}getLogoSvg(e){return`
|
|
93
93
|
<svg class="logo" width="80" viewBox="0 0 143 33" fill="none" xmlns="http://www.w3.org/2000/svg" style="opacity: 0.95;">
|
|
@@ -110,5 +110,5 @@ var fe=Object.defineProperty;var P=(r,e)=>{for(var t in e)fe(r,t,{get:e[t],enume
|
|
|
110
110
|
</clipPath>
|
|
111
111
|
</defs>
|
|
112
112
|
</svg>
|
|
113
|
-
`}};h.instances=new Map,h.defaultLanguage="tj";var A=h;var he={};P(he,{Router:()=>se,Search:()=>le,SearchByLocation:()=>pe,clearKey:()=>ve,getApiKey:()=>D,saveKey:()=>ye});import Ie from"axios";var v=Ie.create({baseURL:q});var te=async(r,e)=>{try{let t=[];return r.forEach(s=>{t.push({lng:s[0],lat:s[1]})}),(await v.post("services/getRoutes",{points:t,token:e})).data}catch(t){throw console.error(t),t}};var ne={};P(ne,{checkCoordinates:()=>Pe,debounce:()=>H,geojsonPolyline:()=>R,geometryPolyline:()=>ie,trimValue:()=>Be});function Pe(r){let e,t;if(k.test(r)){let i=r.match(k);i&&([,e,t]=i)}else if(E.test(r)){let i=r.match(E);i&&([,t,e]=i)}else return console.log("\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u043A\u043E\u043E\u0440\u0434\u0438\u043D\u0430\u0442"),null;return{lat:e,lng:t}}function H(r,e){let t;return(...i)=>(t&&clearTimeout(t),new Promise(s=>{t=setTimeout(async()=>{let n=await r(...i);s(n)},e)}))}function R(r){let e=[],t=0,i=r.length,s=0,n=0;for(;t<i;){let a,l=0,o=0;do a=r.charCodeAt(t++)-63,o|=(a&31)<<l,l+=5;while(a>=32);let p=o&1?~(o>>1):o>>1;s+=p,l=0,o=0;do a=r.charCodeAt(t++)-63,o|=(a&31)<<l,l+=5;while(a>=32);let u=o&1?~(o>>1):o>>1;n+=u,e.push([n*1e-5,s*1e-5])}return e}function ke(r){let e="",t=0,i=0;for(let s=0;s<r.length;s++){let[n,a]=r[s],l=Math.round(a*1e5),o=Math.round(n*1e5),p=l-t,u=o-i;t=l,i=o,e+=re(p)+re(u)}return e}function re(r){let e=r<<1;return r<0&&(e=~e),Ee(e)}function Ee(r){let e="";for(;r>=32;)e+=String.fromCharCode((32|r&31)+63),r>>=5;return e+=String.fromCharCode(r+63),e}var ie=ke;function Be(r,e){if(e<=0)return"";let t=r.trim();return e>=t.length?t:t.slice(0,e)}async function se(r,e,t){if(!t)throw new Error("[MahalMap SDK] Router token is required");try{let i=await te(r,t);return i?.data?i.data.map(n=>{let a={...n};return a.route?.routes?.length&&(a.route.routes=a.route.routes.map(l=>({...l,geometry:e==="geojson"&&typeof l.geometry=="string"?R(l.geometry):l.geometry}))),a}):i}catch(i){throw i}}var ae=async r=>{try{return(await v.post("services/getAddress",null,{params:r})).data}catch(e){throw console.error("Error while searching address:",e),e}},oe=async r=>{try{return(await v.post("services/getAddressByLocation",null,{params:r})).data}catch(e){throw console.error("Error while searching address by location:",e),e}};async function Te(r,e,t){let i={text:r,token:e,...t};try{return(await ae(i)).data}catch(s){throw s}}var De=H(Te,500);async function le(r,e,t){if(!e)throw new Error("[MahalMap SDK] Search token is required");return await De(r,e,t)}async function pe(r){if(!r.token)throw new Error("[MahalMap SDK] SearchByLocation token is required");let e={...r};try{return await oe(e)}catch(t){throw t}}var me={};P(me,{MeasureTool:()=>I,haversineDistance:()=>V,lineLength:()=>L,midpoint:()=>z,polygonArea:()=>j,polygonCentroid:()=>U});var G=63710088e-1;function m(r){return r*Math.PI/180}function O(r){return((r+180)%360+360)%360-180}function $(r){return((r+180)%360+360)%360-180}function V(r,e){let[t,i]=r,[s,n]=e,a=m(i),l=m(n),o=m(n-i),p=m(s-t),u=Math.sin(o/2),d=Math.sin(p/2),c=u*u+Math.cos(a)*Math.cos(l)*d*d,g=2*Math.atan2(Math.sqrt(c),Math.sqrt(1-c));return G*g}function L(r){let e=0;for(let t=1;t<r.length;t+=1)e+=V(r[t-1],r[t]);return e}function j(r){if(r.length<3)return 0;let e=0;for(let t=0;t<r.length;t+=1){let i=r[t],s=r[(t+1)%r.length],n=m(O(s[0]-i[0])),a=m(i[1]),l=m(s[1]);e+=n*(2+Math.sin(a)+Math.sin(l))}return Math.abs(e*G*G/2)}function ue(r){let e=r.reduce((t,i)=>[t[0]+i[0],t[1]+i[1]],[0,0]);return[$(e[0]/r.length),e[1]/r.length]}function U(r){if(r.length===0)return[0,0];if(r.length<3)return ue(r);let e=r[0]?.[0]??0,t=r.map(([p,u])=>[e+O(p-e),u]),i=0,s=0,n=0;for(let p=0;p<t.length;p+=1){let[u,d]=t[p],[c,g]=t[(p+1)%t.length],f=u*g-c*d;i+=f,s+=(u+c)*f,n+=(d+g)*f}let a=i/2;if(Math.abs(a)<1e-12)return ue(t);let l=s/(6*a),o=n/(6*a);return[$(l),o]}function z(r){if(r.length===0)return[0,0];if(r.length===1)return r[0];let e=[],t=0;for(let n=1;n<r.length;n+=1){let a=V(r[n-1],r[n]);e.push(a),t+=a}if(t===0)return r[0];let i=t/2,s=0;for(let n=1;n<r.length;n+=1){let a=e[n-1];if(s+a>=i){let l=a===0?0:(i-s)/a,o=r[n-1],p=r[n],u=$(o[0]+O(p[0]-o[0])*l),d=o[1]+(p[1]-o[1])*l;return[u,d]}s+=a}return r[r.length-1]}var Fe=new Set(["svg","g","path","circle","ellipse","rect","line","polyline","polygon"]),Ae=new Set(["xmlns","viewbox","width","height","fill","fill-rule","fill-opacity","stroke","stroke-width","stroke-linecap","stroke-linejoin","stroke-dasharray","stroke-opacity","opacity","d","cx","cy","r","rx","ry","x","y","x1","y1","x2","y2","points","transform"]),He=new Set(["fill","stroke"]);function Re(r,e){let t=e.trim().toLowerCase();return!(t.includes("javascript:")||t.includes("data:")||t.includes("expression(")||He.has(r)&&t.includes("url("))}function de(r){return Fe.has(r.tagName.toLowerCase())?(Array.from(r.attributes).forEach(e=>{let t=e.name.toLowerCase();(!Ae.has(t)||!Re(t,e.value))&&r.removeAttribute(e.name)}),Array.from(r.children).forEach(e=>{de(e)||e.remove()}),!0):!1}function Ge(r){if(typeof DOMParser>"u")return null;try{let e=new DOMParser().parseFromString(r,"image/svg+xml"),t=e.documentElement;return!t||t.tagName.toLowerCase()!=="svg"||e.querySelector("parsererror")||!de(t)?null:new XMLSerializer().serializeToString(t)}catch{return null}}function M(r,e){return r?Ge(r)??e:e}var ce='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 7h16M9 7V4h6v3M6 7l1 13h10l1-13" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg>',Oe='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 4l16 16M20 4L4 20" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></svg>',$e='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 12l6 6 10-12" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>',S=class{constructor(e,t,i,s){this.wrapper=document.createElement("div"),this.valueEl=document.createElement("span"),this.trashButton=document.createElement("button"),this.closeButton=document.createElement("button"),this.checkButton=document.createElement("button"),this.applyWrapperStyles(t),this.applyValueStyles(t),this.applyButtonStyles(this.trashButton,t),this.applyButtonStyles(this.closeButton,t),this.applyButtonStyles(this.checkButton,t),this.trashButton.type="button",this.closeButton.type="button",this.checkButton.type="button",this.trashButton.innerHTML=M(i.trash,ce),this.closeButton.innerHTML=M(i.close,Oe),this.checkButton.innerHTML=M(i.check,$e);let n=a=>{a.preventDefault(),a.stopPropagation()};this.wrapper.addEventListener("mousedown",n),this.wrapper.addEventListener("dblclick",n),this.wrapper.addEventListener("contextmenu",n),this.trashButton.addEventListener("click",a=>{n(a),s.onRemove()}),this.closeButton.addEventListener("click",a=>{n(a),s.onClose()}),this.checkButton.addEventListener("click",a=>{n(a),s.onCheck()}),this.wrapper.appendChild(this.valueEl),this.wrapper.appendChild(this.checkButton),this.wrapper.appendChild(this.trashButton),this.wrapper.appendChild(this.closeButton),this.wrapper.style.display="none",e.appendChild(this.wrapper)}applyWrapperStyles(e){let t=this.wrapper.style;t.position="absolute",t.zIndex="5",t.display="flex",t.alignItems="center",t.gap=e.badgeGap??"8px",t.padding="6px 8px",t.background=e.badgeBackground??"#FFFFFF",t.borderRadius=e.badgeBorderRadius??"12px",t.boxShadow=e.badgeBoxShadow??"0 2px 10px rgba(15, 23, 42, 0.18)",t.border=e.badgeBorder??"1px solid rgba(0,0,0,0.06)",t.transform="translate(-50%, -140%)",t.pointerEvents="auto",t.userSelect="none",t.whiteSpace="nowrap"}applyValueStyles(e){let t=this.valueEl.style;t.color=e.badgeTextColor??"#19191A",t.fontSize=e.badgeFontSize??"14px",t.fontWeight=e.badgeFontWeight??"600",t.lineHeight="18px"}applyButtonStyles(e,t){let i=e.style,s=t.iconButtonSize??"24px";i.display="inline-flex",i.alignItems="center",i.justifyContent="center",i.width=s,i.height=s,i.border="none",i.background="transparent",i.cursor="pointer",i.color=t.badgeTextColor??"#535969",i.padding="0"}setValue(e){this.valueEl.textContent=e}setCheckEnabled(e){this.checkButton.style.opacity=e?"1":"0.35",this.checkButton.style.pointerEvents=e?"auto":"none"}setPosition(e,t){this.wrapper.style.left=`${e}px`,this.wrapper.style.top=`${t}px`}show(){this.wrapper.style.display="flex"}hide(){this.wrapper.style.display="none"}destroy(){this.wrapper.remove()}},C=class{constructor(e,t,i,s){this.wrapper=document.createElement("div"),this.valueEl=document.createElement("span"),this.trashButton=document.createElement("button");let n=this.wrapper.style;n.position="absolute",n.zIndex="4",n.display="flex",n.alignItems="center",n.gap=t.badgeGap??"6px",n.padding="5px 7px",n.background=t.badgeBackground??"#FFFFFF",n.borderRadius=t.badgeBorderRadius??"12px",n.boxShadow=t.badgeBoxShadow??"0 2px 10px rgba(15, 23, 42, 0.18)",n.border=t.badgeBorder??"1px solid rgba(0,0,0,0.06)",n.transform="translate(-50%, -50%)",n.pointerEvents="auto",n.userSelect="none",n.whiteSpace="nowrap";let a=this.valueEl.style;a.color=t.badgeTextColor??"#19191A",a.fontSize=t.badgeFontSize??"13px",a.fontWeight=t.badgeFontWeight??"600",a.lineHeight="16px";let l=t.iconButtonSize??"20px",o=this.trashButton.style;o.display="inline-flex",o.alignItems="center",o.justifyContent="center",o.width=l,o.height=l,o.border="none",o.background="transparent",o.cursor="pointer",o.color=t.badgeTextColor??"#535969",o.padding="0",this.trashButton.type="button",this.trashButton.innerHTML=M(i.trash,ce);let p=u=>{u.preventDefault(),u.stopPropagation()};this.wrapper.addEventListener("mousedown",p),this.wrapper.addEventListener("dblclick",p),this.wrapper.addEventListener("contextmenu",p),this.trashButton.addEventListener("click",u=>{p(u),s()}),this.wrapper.appendChild(this.valueEl),this.wrapper.appendChild(this.trashButton),e.appendChild(this.wrapper)}setValue(e){this.valueEl.textContent=e}setPosition(e,t){this.wrapper.style.left=`${e}px`,this.wrapper.style.top=`${t}px`}destroy(){this.wrapper.remove()}};var Ve=0,J=r=>`${r}-${Date.now().toString(36)}-${Ve+=1}`,je=0,Ue=()=>`mahal-measure-${je+=1}`,ze={pointColor:"#FFFFFF",pointStrokeColor:"#278960",pointStrokeWidth:2,pointRadius:5,lineColor:"#278960",lineWidth:3,fillColor:"#278960",fillOpacity:.15};function K(r,e){return r>=1e3?`${(r/1e3).toFixed(2)} ${e.kilometers??"\u043A\u043C"}`:`${Math.round(r)} ${e.meters??"\u043C"}`}function ge(r,e){return r>=1e5?`${(r/1e6).toFixed(2)} ${e.squareKilometers??"\u043A\u043C\xB2"}`:`${Math.round(r)} ${e.squareMeters??"\u043C\xB2"}`}function x(r){return r==="area"?3:2}function w(){return{type:"FeatureCollection",features:[]}}var I=class{constructor(e,t={}){this.layerHandlersBound=!1;this.isActive=!1;this.draft=null;this.shapes=[];this.badge=null;this.shapeBadges=new Map;this.draggingPointId=null;this.draggingShapeId=null;this.dragPanWasEnabled=!0;this.suppressNextClick=!1;this.hoverInsert=null;this.handleClick=e=>this.onMapClick(e);this.handlePointMouseDown=e=>this.onPointMouseDown(e);this.handlePointMouseEnter=()=>{this.isActive&&this.setCursor("pointer")};this.handlePointMouseLeave=()=>{this.isActive&&this.setCursor("")};this.handlePointContextMenu=e=>this.onPointContextMenu(e);this.handleLineMouseMove=e=>this.onLineMouseMove(e);this.handleLineMouseLeave=()=>this.clearHoverInsert();this.handleLineMouseDown=e=>this.onLineMouseDown(e);this.handleStyleLoad=()=>this.onStyleLoad();this.handleViewportChange=()=>{this.updateBadgePosition(),this.updateShapeBadgePositions()};this.onPointDragMove=e=>{if(!this.draggingShapeId||!this.draggingPointId)return;let t=this.findShape(this.draggingShapeId),i=t?.points.find(s=>s.id===this.draggingPointId);!t||!i||(i.lngLat=[+e.lngLat.lng.toFixed(6),+e.lngLat.lat.toFixed(6)],this.recomputeShape(t),this.render(),this.emitChange())};this.onPointDragUp=()=>{this.draggingPointId&&(this.stopDragListeners(),this.dragPanWasEnabled&&this.map.dragPan.enable(),this.setCursor("pointer"),this.suppressNextClick=!0,window.setTimeout(()=>{this.suppressNextClick=!1},0))};this.map=e,this.originalCursor=e.getCanvas().style.cursor,this.prefix=t.sourceIdPrefix??Ue(),this.style=t.style??{},this.labels=t.labels??{},this.icons=t.icons??{},this.mode=t.mode??"distance",this.onChange=t.onChange,this.onCloseRequest=t.onCloseRequest,this.pointsSourceId=`${this.prefix}-points`,this.linesSourceId=`${this.prefix}-lines`,this.fillsSourceId=`${this.prefix}-fills`,this.hoverPointSourceId=`${this.prefix}-hover-point`,this.pointsLayerId=`${this.prefix}-points-layer`,this.linesCasingLayerId=`${this.prefix}-lines-casing-layer`,this.linesLayerId=`${this.prefix}-lines-layer`,this.fillsLayerId=`${this.prefix}-fills-layer`,this.hoverPointLayerId=`${this.prefix}-hover-point-layer`,this.badge=new S(e.getContainer(),this.style,this.icons,{onRemove:()=>this.removeShape((this.draft??this.getLastShape())?.id??""),onClose:()=>this.onCloseRequest?.(),onCheck:()=>this.finishDraft()}),this.tryEnsureLayers()&&this.bindLayerHandlers(),this.map.on("click",this.handleClick),this.map.on("style.load",this.handleStyleLoad),this.map.on("move",this.handleViewportChange)}bindLayerHandlers(){this.layerHandlersBound||(this.layerHandlersBound=!0,this.map.on("mousedown",this.pointsLayerId,this.handlePointMouseDown),this.map.on("mouseenter",this.pointsLayerId,this.handlePointMouseEnter),this.map.on("mouseleave",this.pointsLayerId,this.handlePointMouseLeave),this.map.on("contextmenu",this.pointsLayerId,this.handlePointContextMenu),this.map.on("mousemove",this.linesCasingLayerId,this.handleLineMouseMove),this.map.on("mouseleave",this.linesCasingLayerId,this.handleLineMouseLeave),this.map.on("mousedown",this.linesCasingLayerId,this.handleLineMouseDown))}unbindLayerHandlers(){this.layerHandlersBound&&(this.layerHandlersBound=!1,this.map.off("mousedown",this.pointsLayerId,this.handlePointMouseDown),this.map.off("mouseenter",this.pointsLayerId,this.handlePointMouseEnter),this.map.off("mouseleave",this.pointsLayerId,this.handlePointMouseLeave),this.map.off("contextmenu",this.pointsLayerId,this.handlePointContextMenu),this.map.off("mousemove",this.linesCasingLayerId,this.handleLineMouseMove),this.map.off("mouseleave",this.linesCasingLayerId,this.handleLineMouseLeave),this.map.off("mousedown",this.linesCasingLayerId,this.handleLineMouseDown))}start(e=this.mode){this.isActive=!0;let t=e!==this.mode;this.setMode(e),t||(this.render(),this.emitChange())}stop(){this.isActive=!1,this.onPointDragUp(),this.badge?.hide(),this.clearHoverInsert(),this.setCursor(this.originalCursor),this.emitChange()}setMode(e){this.mode!==e&&(this.mode=e,this.draft&&(this.draft.mode=e,this.recomputeShape(this.draft)),this.render(),this.emitChange())}finishDraft(){this.commitOrDiscardDraft(),this.render(),this.emitChange()}removeShape(e){e&&(this.draft?.id===e?this.draft=null:this.shapes=this.shapes.filter(t=>t.id!==e),this.hoverInsert?.shapeId===e&&this.clearHoverInsert(),this.render(),this.emitChange())}removePoint(e,t){let i=this.findShape(e);if(!i)return;if(i.points=i.points.filter(n=>n.id!==t),i.points.length===0){this.removeShape(e);return}if(!(this.draft?.id===e)&&i.points.length<x(i.mode)){this.removeShape(e);return}this.recomputeShape(i),this.render(),this.emitChange()}clearAll(){this.draft=null,this.shapes=[],this.clearHoverInsert(),this.render(),this.emitChange()}getState(){return{active:this.isActive,mode:this.mode,draft:this.draft?this.cloneShape(this.draft):null,shapes:this.shapes.map(e=>this.cloneShape(e))}}destroy(){this.map.off("click",this.handleClick),this.unbindLayerHandlers(),this.map.off("style.load",this.handleStyleLoad),this.map.off("move",this.handleViewportChange),this.onPointDragUp(),this.setCursor(this.originalCursor),this.badge?.destroy(),this.badge=null,this.shapeBadges.forEach(e=>e.destroy()),this.shapeBadges.clear(),this.removeLayers()}cloneShape(e){return{...e,points:e.points.map(t=>({...t,lngLat:[...t.lngLat]}))}}findShape(e){return this.draft?.id===e?this.draft:this.shapes.find(t=>t.id===e)??null}getLastShape(){return this.shapes[this.shapes.length-1]??null}commitOrDiscardDraft(){this.draft&&(this.draft.points.length>=x(this.draft.mode)&&this.shapes.push(this.draft),this.draft=null)}ensureDraft(){return this.draft||(this.draft={id:J("measure-shape"),mode:this.mode,points:[],closed:!1,distance:0,area:0}),this.draft}recomputeShape(e){let t=e.points.map(i=>i.lngLat);if(e.mode==="area"&&t.length>=3){e.closed=!0,e.area=j(t),e.distance=L([...t,t[0]]);return}e.closed=!1,e.area=0,e.distance=L(t)}onMapClick(e){if(!this.isActive)return;if(this.suppressNextClick){this.suppressNextClick=!1;return}if(this.queryPointsLayer(e.point).length>0)return;let i=this.ensureDraft();i.points.push({id:J("measure-point"),lngLat:[+e.lngLat.lng.toFixed(6),+e.lngLat.lat.toFixed(6)]}),this.recomputeShape(i),this.render(),this.emitChange()}onPointMouseDown(e){if(!this.isActive)return;let t=e.features?.[0],i=t?.properties?.shapeId,s=t?.properties?.pointId;!i||!s||(e.preventDefault(),this.beginPointDrag(i,s))}beginPointDrag(e,t){this.draggingShapeId=e,this.draggingPointId=t,this.dragPanWasEnabled=this.map.dragPan.isEnabled(),this.map.dragPan.disable(),this.setCursor("grabbing"),this.map.on("mousemove",this.onPointDragMove),this.map.on("mouseup",this.onPointDragUp),window.addEventListener("mouseup",this.onPointDragUp)}stopDragListeners(){this.map.off("mousemove",this.onPointDragMove),this.map.off("mouseup",this.onPointDragUp),window.removeEventListener("mouseup",this.onPointDragUp),this.draggingShapeId=null,this.draggingPointId=null}projectPoint(e){let t=this.map.project(e);return{x:t.x,y:t.y}}closestPointOnSegment(e,t,i){let s=i.x-t.x,n=i.y-t.y,a=s*s+n*n;if(a===0)return t;let l=Math.max(0,Math.min(1,((e.x-t.x)*s+(e.y-t.y)*n)/a));return{x:t.x+s*l,y:t.y+n*l}}findClosestPointOnShape(e,t){let i=e.points.map(p=>this.projectPoint(p.lngLat)),s=e.closed?i.length:i.length-1,n=-1,a=null,l=1/0;for(let p=0;p<s;p+=1){let u=i[p],d=i[(p+1)%i.length];if(!u||!d)continue;let c=this.closestPointOnSegment(t,u,d),g=c.x-t.x,f=c.y-t.y,N=Math.sqrt(g*g+f*f);N<l&&(l=N,n=p,a=c)}if(n===-1||!a)return null;let o=this.map.unproject([a.x,a.y]);return{index:n,lngLat:[+o.lng.toFixed(6),+o.lat.toFixed(6)]}}queryPointsLayer(e){return this.map.getLayer(this.pointsLayerId)?this.map.queryRenderedFeatures(e,{layers:[this.pointsLayerId]}):[]}isOverExistingPoint(e){return this.queryPointsLayer(e).length>0}onLineMouseMove(e){if(!this.isActive||this.draggingPointId||this.isOverExistingPoint(e.point)){this.clearHoverInsert();return}let i=e.features?.[0]?.properties?.shapeId,s=i?this.findShape(i):null;if(!i||!s)return;let n=this.findClosestPointOnShape(s,e.point);n&&(this.hoverInsert={shapeId:i,index:n.index,lngLat:n.lngLat},this.renderHoverPoint(),this.setCursor("copy"))}clearHoverInsert(){this.hoverInsert&&(this.hoverInsert=null,this.renderHoverPoint(),this.setCursor(""))}onLineMouseDown(e){if(!this.isActive||!this.hoverInsert)return;let i=e.features?.[0]?.properties?.shapeId;if(!i||i!==this.hoverInsert.shapeId)return;let s=this.findShape(i);if(!s)return;e.preventDefault();let n={id:J("measure-point"),lngLat:this.hoverInsert.lngLat};s.points.splice(this.hoverInsert.index+1,0,n),this.recomputeShape(s),this.hoverInsert=null,this.renderHoverPoint(),this.render(),this.emitChange(),this.beginPointDrag(i,n.id)}renderHoverPoint(){let e=this.hoverInsert?[{type:"Feature",properties:{},geometry:{type:"Point",coordinates:this.hoverInsert.lngLat}}]:[];this.setSourceData(this.hoverPointSourceId,{type:"FeatureCollection",features:e})}onPointContextMenu(e){if(!this.isActive)return;let t=e.features?.[0],i=t?.properties?.shapeId,s=t?.properties?.pointId;!i||!s||(e.preventDefault(),this.removePoint(i,s))}setCursor(e){this.map.getCanvas().style.cursor=e}onStyleLoad(){this.tryEnsureLayers()&&this.bindLayerHandlers(),this.render()}emitChange(){this.onChange?.(this.getState())}tryEnsureLayers(){try{return this.ensureLayers(),!0}catch{return!1}}ensureLayers(){let e={...ze,...this.style};this.map.getSource(this.linesSourceId)||this.map.addSource(this.linesSourceId,{type:"geojson",data:w()}),this.map.getSource(this.fillsSourceId)||this.map.addSource(this.fillsSourceId,{type:"geojson",data:w()}),this.map.getSource(this.pointsSourceId)||this.map.addSource(this.pointsSourceId,{type:"geojson",data:w()}),this.map.getSource(this.hoverPointSourceId)||this.map.addSource(this.hoverPointSourceId,{type:"geojson",data:w()}),this.map.getLayer(this.fillsLayerId)||this.map.addLayer({id:this.fillsLayerId,type:"fill",source:this.fillsSourceId,paint:{"fill-color":e.fillColor,"fill-opacity":e.fillOpacity}}),this.map.getLayer(this.linesCasingLayerId)||this.map.addLayer({id:this.linesCasingLayerId,type:"line",source:this.linesSourceId,layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":"#FFFFFF","line-width":e.lineWidth+3,"line-opacity":.9}}),this.map.getLayer(this.linesLayerId)||this.map.addLayer({id:this.linesLayerId,type:"line",source:this.linesSourceId,layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":e.lineColor,"line-width":e.lineWidth,...this.style.lineDasharray?{"line-dasharray":this.style.lineDasharray}:{}}}),this.map.getLayer(this.hoverPointLayerId)||this.map.addLayer({id:this.hoverPointLayerId,type:"circle",source:this.hoverPointSourceId,paint:{"circle-radius":Math.max(3,e.pointRadius-1),"circle-color":e.pointColor,"circle-stroke-color":e.pointStrokeColor,"circle-stroke-width":e.pointStrokeWidth,"circle-opacity":.8,"circle-stroke-opacity":.8}}),this.map.getLayer(this.pointsLayerId)||this.map.addLayer({id:this.pointsLayerId,type:"circle",source:this.pointsSourceId,paint:{"circle-radius":e.pointRadius,"circle-color":e.pointColor,"circle-stroke-color":e.pointStrokeColor,"circle-stroke-width":e.pointStrokeWidth}})}removeLayers(){[this.pointsLayerId,this.hoverPointLayerId,this.linesLayerId,this.linesCasingLayerId,this.fillsLayerId].forEach(e=>{this.map.getLayer(e)&&this.map.removeLayer(e)}),[this.pointsSourceId,this.hoverPointSourceId,this.linesSourceId,this.fillsSourceId].forEach(e=>{this.map.getSource(e)&&this.map.removeSource(e)})}setSourceData(e,t){this.map.getSource(e)?.setData(t)}buildLineFeature(e){if(e.points.length<2)return null;let t=e.points.map(i=>i.lngLat);return{type:"Feature",id:e.id,properties:{shapeId:e.id},geometry:{type:"LineString",coordinates:e.closed?[...t,t[0]]:t}}}buildFillFeature(e){if(e.mode!=="area"||e.points.length<3)return null;let t=e.points.map(i=>i.lngLat);return{type:"Feature",id:e.id,properties:{shapeId:e.id},geometry:{type:"Polygon",coordinates:[[...t,t[0]]]}}}buildPointFeatures(e){return e.points.map(t=>({type:"Feature",id:t.id,properties:{shapeId:e.id,pointId:t.id},geometry:{type:"Point",coordinates:t.lngLat}}))}getShapeAnchor(e){let t=e.points.map(i=>i.lngLat);return e.mode==="area"?U(t):z(t)}render(){let e=this.shapes,t=e.map(n=>this.buildLineFeature(n)).filter(n=>!!n),i=e.map(n=>this.buildFillFeature(n)).filter(n=>!!n),s=e.flatMap(n=>this.buildPointFeatures(n));if(this.draft){let n=this.buildLineFeature(this.draft),a=this.buildFillFeature(this.draft);n&&t.push(n),a&&i.push(a),s.push(...this.buildPointFeatures(this.draft))}this.setSourceData(this.linesSourceId,{type:"FeatureCollection",features:t}),this.setSourceData(this.fillsSourceId,{type:"FeatureCollection",features:i}),this.setSourceData(this.pointsSourceId,{type:"FeatureCollection",features:s}),this.updateBadge(),this.syncShapeBadges()}syncShapeBadges(){let e=new Set(this.shapes.map(t=>t.id));Array.from(this.shapeBadges.keys()).forEach(t=>{e.has(t)||(this.shapeBadges.get(t)?.destroy(),this.shapeBadges.delete(t))}),this.shapes.forEach(t=>{if(t.points.length<x(t.mode)){this.shapeBadges.get(t.id)?.destroy(),this.shapeBadges.delete(t.id);return}let i=t.mode==="area"?ge(t.area,this.labels):K(t.distance,this.labels),s=this.shapeBadges.get(t.id);s||(s=new C(this.map.getContainer(),this.style,this.icons,()=>this.removeShape(t.id)),this.shapeBadges.set(t.id,s)),s.setValue(i);let n=this.map.project(this.getShapeAnchor(t));s.setPosition(n.x,n.y)})}updateShapeBadgePositions(){this.shapes.forEach(e=>{let t=this.shapeBadges.get(e.id);if(!t)return;let i=this.map.project(this.getShapeAnchor(e));t.setPosition(i.x,i.y)})}updateBadge(){if(!this.badge)return;if(!this.isActive||!this.draft||this.draft.points.length===0){this.badge.hide();return}let e=this.draft.points.length>=x(this.draft.mode),t=this.draft.mode==="area"?ge(this.draft.area,this.labels):K(this.draft.distance,this.labels);this.badge.setValue(e?t:K(this.draft.distance,this.labels)),this.badge.setCheckEnabled(e),this.badge.show(),this.updateBadgePosition()}updateBadgePosition(){if(!this.badge||!this.draft||this.draft.points.length===0||!this.isActive)return;let e=this.draft.points[this.draft.points.length-1];if(!e)return;let t=this.map.project(e.lngLat);this.badge.setPosition(t.x,t.y)}};export{A as MahalMap,F as MahalMapDefaultMarker,I as MeasureTool,se as Router,le as Search,pe as SearchByLocation,he as keyUtils,me as measureUtils,ne as utils};
|
|
113
|
+
`}};h.instances=new Map,h.defaultLanguage="tj";var G=h;var ce={};k(ce,{Router:()=>le,Search:()=>ue,SearchByLocation:()=>de,clearKey:()=>Le,getApiKey:()=>v,saveKey:()=>be});import ke from"axios";var M=ke.create({baseURL:X});var se=async(r,e)=>{try{let t=[];return r.forEach(n=>{t.push({lng:n[0],lat:n[1]})}),(await M.post("services/getRoutes",{points:t,token:e})).data}catch(t){throw console.error(t),t}};var oe={};k(oe,{checkCoordinates:()=>Be,debounce:()=>O,geojsonPolyline:()=>$,geometryPolyline:()=>ae,trimValue:()=>Ae});function Be(r){let e,t;if(B.test(r)){let i=r.match(B);i&&([,e,t]=i)}else if(D.test(r)){let i=r.match(D);i&&([,t,e]=i)}else return console.log("\u041D\u0435\u0432\u0435\u0440\u043D\u044B\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u043A\u043E\u043E\u0440\u0434\u0438\u043D\u0430\u0442"),null;return{lat:e,lng:t}}function O(r,e){let t;return(...i)=>(t&&clearTimeout(t),new Promise(n=>{t=setTimeout(async()=>{let s=await r(...i);n(s)},e)}))}function $(r){let e=[],t=0,i=r.length,n=0,s=0;for(;t<i;){let o,p=0,l=0;do o=r.charCodeAt(t++)-63,l|=(o&31)<<p,p+=5;while(o>=32);let a=l&1?~(l>>1):l>>1;n+=a,p=0,l=0;do o=r.charCodeAt(t++)-63,l|=(o&31)<<p,p+=5;while(o>=32);let u=l&1?~(l>>1):l>>1;s+=u,e.push([s*1e-5,n*1e-5])}return e}function De(r){let e="",t=0,i=0;for(let n=0;n<r.length;n++){let[s,o]=r[n],p=Math.round(o*1e5),l=Math.round(s*1e5),a=p-t,u=l-i;t=p,i=l,e+=ne(a)+ne(u)}return e}function ne(r){let e=r<<1;return r<0&&(e=~e),Te(e)}function Te(r){let e="";for(;r>=32;)e+=String.fromCharCode((32|r&31)+63),r>>=5;return e+=String.fromCharCode(r+63),e}var ae=De;function Ae(r,e){if(e<=0)return"";let t=r.trim();return e>=t.length?t:t.slice(0,e)}async function le(r,e,t){if(!t)throw new Error("[MahalMap SDK] Router token is required");try{let i=await se(r,t);return i?.data?i.data.map(s=>{let o={...s};return o.route?.routes?.length&&(o.route.routes=o.route.routes.map(p=>({...p,geometry:e==="geojson"&&typeof p.geometry=="string"?$(p.geometry):p.geometry}))),o}):i}catch(i){throw i}}var pe=async r=>{try{return(await M.post("services/getAddress",null,{params:r})).data}catch(e){throw console.error("Error while searching address:",e),e}},he=async r=>{try{return(await M.post("services/getAddressByLocation",null,{params:r})).data}catch(e){throw console.error("Error while searching address by location:",e),e}};async function Fe(r,e,t){let i={text:r,token:e,...t};try{return(await pe(i)).data}catch(n){throw n}}var Re=O(Fe,500);async function ue(r,e,t){if(!e)throw new Error("[MahalMap SDK] Search token is required");return await Re(r,e,t)}async function de(r){if(!r.token)throw new Error("[MahalMap SDK] SearchByLocation token is required");let e={...r};try{return await he(e)}catch(t){throw t}}var ve={};k(ve,{MeasureTool:()=>E,haversineDistance:()=>z,lineLength:()=>S,midpoint:()=>N,polygonArea:()=>K,polygonCentroid:()=>J});var V=63710088e-1;function m(r){return r*Math.PI/180}function j(r){return((r+180)%360+360)%360-180}function U(r){return((r+180)%360+360)%360-180}function z(r,e){let[t,i]=r,[n,s]=e,o=m(i),p=m(s),l=m(s-i),a=m(n-t),u=Math.sin(l/2),d=Math.sin(a/2),c=u*u+Math.cos(o)*Math.cos(p)*d*d,g=2*Math.atan2(Math.sqrt(c),Math.sqrt(1-c));return V*g}function S(r){let e=0;for(let t=1;t<r.length;t+=1)e+=z(r[t-1],r[t]);return e}function K(r){if(r.length<3)return 0;let e=0;for(let t=0;t<r.length;t+=1){let i=r[t],n=r[(t+1)%r.length],s=m(j(n[0]-i[0])),o=m(i[1]),p=m(n[1]);e+=s*(2+Math.sin(o)+Math.sin(p))}return Math.abs(e*V*V/2)}function ge(r){let e=r.reduce((t,i)=>[t[0]+i[0],t[1]+i[1]],[0,0]);return[U(e[0]/r.length),e[1]/r.length]}function J(r){if(r.length===0)return[0,0];if(r.length<3)return ge(r);let e=r[0]?.[0]??0,t=r.map(([a,u])=>[e+j(a-e),u]),i=0,n=0,s=0;for(let a=0;a<t.length;a+=1){let[u,d]=t[a],[c,g]=t[(a+1)%t.length],f=u*g-c*d;i+=f,n+=(u+c)*f,s+=(d+g)*f}let o=i/2;if(Math.abs(o)<1e-12)return ge(t);let p=n/(6*o),l=s/(6*o);return[U(p),l]}function N(r){if(r.length===0)return[0,0];if(r.length===1)return r[0];let e=[],t=0;for(let s=1;s<r.length;s+=1){let o=z(r[s-1],r[s]);e.push(o),t+=o}if(t===0)return r[0];let i=t/2,n=0;for(let s=1;s<r.length;s+=1){let o=e[s-1];if(n+o>=i){let p=o===0?0:(i-n)/o,l=r[s-1],a=r[s],u=U(l[0]+j(a[0]-l[0])*p),d=l[1]+(a[1]-l[1])*p;return[u,d]}n+=o}return r[r.length-1]}var He=new Set(["svg","g","path","circle","ellipse","rect","line","polyline","polygon"]),Ge=new Set(["xmlns","viewbox","width","height","fill","fill-rule","fill-opacity","stroke","stroke-width","stroke-linecap","stroke-linejoin","stroke-dasharray","stroke-opacity","opacity","d","cx","cy","r","rx","ry","x","y","x1","y1","x2","y2","points","transform"]),Oe=new Set(["fill","stroke"]);function $e(r,e){let t=e.trim().toLowerCase();return!(t.includes("javascript:")||t.includes("data:")||t.includes("expression(")||Oe.has(r)&&t.includes("url("))}function me(r){return He.has(r.tagName.toLowerCase())?(Array.from(r.attributes).forEach(e=>{let t=e.name.toLowerCase();(!Ge.has(t)||!$e(t,e.value))&&r.removeAttribute(e.name)}),Array.from(r.children).forEach(e=>{me(e)||e.remove()}),!0):!1}function Ve(r){if(typeof DOMParser>"u")return null;try{let e=new DOMParser().parseFromString(r,"image/svg+xml"),t=e.documentElement;return!t||t.tagName.toLowerCase()!=="svg"||e.querySelector("parsererror")||!me(t)?null:new XMLSerializer().serializeToString(t)}catch{return null}}function b(r,e){return r?Ve(r)??e:e}var fe='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 7h16M9 7V4h6v3M6 7l1 13h10l1-13" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg>',je='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 4l16 16M20 4L4 20" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></svg>',Ue='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 12l6 6 10-12" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg>',x=class{constructor(e,t,i,n){this.wrapper=document.createElement("div"),this.valueEl=document.createElement("span"),this.trashButton=document.createElement("button"),this.closeButton=document.createElement("button"),this.checkButton=document.createElement("button"),this.applyWrapperStyles(t),this.applyValueStyles(t),this.applyButtonStyles(this.trashButton,t),this.applyButtonStyles(this.closeButton,t),this.applyButtonStyles(this.checkButton,t),this.trashButton.type="button",this.closeButton.type="button",this.checkButton.type="button",this.trashButton.innerHTML=b(i.trash,fe),this.closeButton.innerHTML=b(i.close,je),this.checkButton.innerHTML=b(i.check,Ue);let s=o=>{o.preventDefault(),o.stopPropagation()};this.wrapper.addEventListener("mousedown",s),this.wrapper.addEventListener("dblclick",s),this.wrapper.addEventListener("contextmenu",s),this.trashButton.addEventListener("click",o=>{s(o),n.onRemove()}),this.closeButton.addEventListener("click",o=>{s(o),n.onClose()}),this.checkButton.addEventListener("click",o=>{s(o),n.onCheck()}),this.wrapper.appendChild(this.valueEl),this.wrapper.appendChild(this.checkButton),this.wrapper.appendChild(this.trashButton),this.wrapper.appendChild(this.closeButton),this.wrapper.style.display="none",e.appendChild(this.wrapper)}applyWrapperStyles(e){let t=this.wrapper.style;t.position="absolute",t.zIndex="5",t.display="flex",t.alignItems="center",t.gap=e.badgeGap??"8px",t.padding="6px 8px",t.background=e.badgeBackground??"#FFFFFF",t.borderRadius=e.badgeBorderRadius??"12px",t.boxShadow=e.badgeBoxShadow??"0 2px 10px rgba(15, 23, 42, 0.18)",t.border=e.badgeBorder??"1px solid rgba(0,0,0,0.06)",t.transform="translate(-50%, -140%)",t.pointerEvents="auto",t.userSelect="none",t.whiteSpace="nowrap"}applyValueStyles(e){let t=this.valueEl.style;t.color=e.badgeTextColor??"#19191A",t.fontSize=e.badgeFontSize??"14px",t.fontWeight=e.badgeFontWeight??"600",t.lineHeight="18px"}applyButtonStyles(e,t){let i=e.style,n=t.iconButtonSize??"24px";i.display="inline-flex",i.alignItems="center",i.justifyContent="center",i.width=n,i.height=n,i.border="none",i.background="transparent",i.cursor="pointer",i.color=t.badgeTextColor??"#535969",i.padding="0"}setValue(e){this.valueEl.textContent=e}setCheckEnabled(e){this.checkButton.style.opacity=e?"1":"0.35",this.checkButton.style.pointerEvents=e?"auto":"none"}setPosition(e,t){this.wrapper.style.left=`${e}px`,this.wrapper.style.top=`${t}px`}show(){this.wrapper.style.display="flex"}hide(){this.wrapper.style.display="none"}destroy(){this.wrapper.remove()}},w=class{constructor(e,t,i,n){this.wrapper=document.createElement("div"),this.valueEl=document.createElement("span"),this.trashButton=document.createElement("button");let s=this.wrapper.style;s.position="absolute",s.zIndex="4",s.display="flex",s.alignItems="center",s.gap=t.badgeGap??"6px",s.padding="5px 7px",s.background=t.badgeBackground??"#FFFFFF",s.borderRadius=t.badgeBorderRadius??"12px",s.boxShadow=t.badgeBoxShadow??"0 2px 10px rgba(15, 23, 42, 0.18)",s.border=t.badgeBorder??"1px solid rgba(0,0,0,0.06)",s.transform="translate(-50%, -50%)",s.pointerEvents="auto",s.userSelect="none",s.whiteSpace="nowrap";let o=this.valueEl.style;o.color=t.badgeTextColor??"#19191A",o.fontSize=t.badgeFontSize??"13px",o.fontWeight=t.badgeFontWeight??"600",o.lineHeight="16px";let p=t.iconButtonSize??"20px",l=this.trashButton.style;l.display="inline-flex",l.alignItems="center",l.justifyContent="center",l.width=p,l.height=p,l.border="none",l.background="transparent",l.cursor="pointer",l.color=t.badgeTextColor??"#535969",l.padding="0",this.trashButton.type="button",this.trashButton.innerHTML=b(i.trash,fe);let a=u=>{u.preventDefault(),u.stopPropagation()};this.wrapper.addEventListener("mousedown",a),this.wrapper.addEventListener("dblclick",a),this.wrapper.addEventListener("contextmenu",a),this.trashButton.addEventListener("click",u=>{a(u),n()}),this.wrapper.appendChild(this.valueEl),this.wrapper.appendChild(this.trashButton),e.appendChild(this.wrapper)}setValue(e){this.valueEl.textContent=e}setPosition(e,t){this.wrapper.style.left=`${e}px`,this.wrapper.style.top=`${t}px`}destroy(){this.wrapper.remove()}};var ze=0,_=r=>`${r}-${Date.now().toString(36)}-${ze+=1}`,Ke=0,Je=()=>`mahal-measure-${Ke+=1}`,Ne={pointColor:"#FFFFFF",pointStrokeColor:"#278960",pointStrokeWidth:2,pointRadius:5,lineColor:"#278960",lineWidth:3,fillColor:"#278960",fillOpacity:.15};function q(r,e){return r>=1e3?`${(r/1e3).toFixed(2)} ${e.kilometers??"\u043A\u043C"}`:`${Math.round(r)} ${e.meters??"\u043C"}`}function ye(r,e){return r>=1e5?`${(r/1e6).toFixed(2)} ${e.squareKilometers??"\u043A\u043C\xB2"}`:`${Math.round(r)} ${e.squareMeters??"\u043C\xB2"}`}function I(r){return r==="area"?3:2}function P(){return{type:"FeatureCollection",features:[]}}var E=class{constructor(e,t={}){this.layerHandlersBound=!1;this.isActive=!1;this.draft=null;this.shapes=[];this.badge=null;this.shapeBadges=new Map;this.draggingPointId=null;this.draggingShapeId=null;this.dragPanWasEnabled=!0;this.suppressNextClick=!1;this.hoverInsert=null;this.handleClick=e=>this.onMapClick(e);this.handlePointMouseDown=e=>this.onPointMouseDown(e);this.handlePointMouseEnter=()=>{this.isActive&&this.setCursor("pointer")};this.handlePointMouseLeave=()=>{this.isActive&&this.setCursor("")};this.handlePointContextMenu=e=>this.onPointContextMenu(e);this.handleLineMouseMove=e=>this.onLineMouseMove(e);this.handleLineMouseLeave=()=>this.clearHoverInsert();this.handleLineMouseDown=e=>this.onLineMouseDown(e);this.handleStyleLoad=()=>this.onStyleLoad();this.handleViewportChange=()=>{this.updateBadgePosition(),this.updateShapeBadgePositions()};this.onPointDragMove=e=>{if(!this.draggingShapeId||!this.draggingPointId)return;let t=this.findShape(this.draggingShapeId),i=t?.points.find(n=>n.id===this.draggingPointId);!t||!i||(i.lngLat=[+e.lngLat.lng.toFixed(6),+e.lngLat.lat.toFixed(6)],this.recomputeShape(t),this.render(),this.emitChange())};this.onPointDragUp=()=>{this.draggingPointId&&(this.stopDragListeners(),this.dragPanWasEnabled&&this.map.dragPan.enable(),this.setCursor("pointer"),this.suppressNextClick=!0,window.setTimeout(()=>{this.suppressNextClick=!1},0))};this.map=e,this.originalCursor=e.getCanvas().style.cursor,this.prefix=t.sourceIdPrefix??Je(),this.style=t.style??{},this.labels=t.labels??{},this.icons=t.icons??{},this.mode=t.mode??"distance",this.onChange=t.onChange,this.onCloseRequest=t.onCloseRequest,this.pointsSourceId=`${this.prefix}-points`,this.linesSourceId=`${this.prefix}-lines`,this.fillsSourceId=`${this.prefix}-fills`,this.hoverPointSourceId=`${this.prefix}-hover-point`,this.pointsLayerId=`${this.prefix}-points-layer`,this.linesCasingLayerId=`${this.prefix}-lines-casing-layer`,this.linesLayerId=`${this.prefix}-lines-layer`,this.fillsLayerId=`${this.prefix}-fills-layer`,this.hoverPointLayerId=`${this.prefix}-hover-point-layer`,this.badge=new x(e.getContainer(),this.style,this.icons,{onRemove:()=>this.removeShape((this.draft??this.getLastShape())?.id??""),onClose:()=>this.onCloseRequest?.(),onCheck:()=>this.finishDraft()}),this.map.isStyleLoaded()&&(this.ensureLayers(),this.bindLayerHandlers()),this.map.on("click",this.handleClick),this.map.on("style.load",this.handleStyleLoad),this.map.on("move",this.handleViewportChange)}bindLayerHandlers(){this.layerHandlersBound||(this.layerHandlersBound=!0,this.map.on("mousedown",this.pointsLayerId,this.handlePointMouseDown),this.map.on("mouseenter",this.pointsLayerId,this.handlePointMouseEnter),this.map.on("mouseleave",this.pointsLayerId,this.handlePointMouseLeave),this.map.on("contextmenu",this.pointsLayerId,this.handlePointContextMenu),this.map.on("mousemove",this.linesCasingLayerId,this.handleLineMouseMove),this.map.on("mouseleave",this.linesCasingLayerId,this.handleLineMouseLeave),this.map.on("mousedown",this.linesCasingLayerId,this.handleLineMouseDown))}unbindLayerHandlers(){this.layerHandlersBound&&(this.layerHandlersBound=!1,this.map.off("mousedown",this.pointsLayerId,this.handlePointMouseDown),this.map.off("mouseenter",this.pointsLayerId,this.handlePointMouseEnter),this.map.off("mouseleave",this.pointsLayerId,this.handlePointMouseLeave),this.map.off("contextmenu",this.pointsLayerId,this.handlePointContextMenu),this.map.off("mousemove",this.linesCasingLayerId,this.handleLineMouseMove),this.map.off("mouseleave",this.linesCasingLayerId,this.handleLineMouseLeave),this.map.off("mousedown",this.linesCasingLayerId,this.handleLineMouseDown))}start(e=this.mode){this.isActive=!0;let t=e!==this.mode;this.setMode(e),t||(this.render(),this.emitChange())}stop(){this.isActive=!1,this.onPointDragUp(),this.badge?.hide(),this.clearHoverInsert(),this.setCursor(this.originalCursor),this.emitChange()}setMode(e){this.mode!==e&&(this.mode=e,this.draft&&(this.draft.mode=e,this.recomputeShape(this.draft)),this.render(),this.emitChange())}finishDraft(){this.commitOrDiscardDraft(),this.render(),this.emitChange()}removeShape(e){e&&(this.draft?.id===e?this.draft=null:this.shapes=this.shapes.filter(t=>t.id!==e),this.hoverInsert?.shapeId===e&&this.clearHoverInsert(),this.render(),this.emitChange())}removePoint(e,t){let i=this.findShape(e);if(!i)return;if(i.points=i.points.filter(s=>s.id!==t),i.points.length===0){this.removeShape(e);return}if(!(this.draft?.id===e)&&i.points.length<I(i.mode)){this.removeShape(e);return}this.recomputeShape(i),this.render(),this.emitChange()}clearAll(){this.draft=null,this.shapes=[],this.clearHoverInsert(),this.render(),this.emitChange()}getState(){return{active:this.isActive,mode:this.mode,draft:this.draft?this.cloneShape(this.draft):null,shapes:this.shapes.map(e=>this.cloneShape(e))}}destroy(){this.map.off("click",this.handleClick),this.unbindLayerHandlers(),this.map.off("style.load",this.handleStyleLoad),this.map.off("move",this.handleViewportChange),this.onPointDragUp(),this.setCursor(this.originalCursor),this.badge?.destroy(),this.badge=null,this.shapeBadges.forEach(e=>e.destroy()),this.shapeBadges.clear(),this.removeLayers()}cloneShape(e){return{...e,points:e.points.map(t=>({...t,lngLat:[...t.lngLat]}))}}findShape(e){return this.draft?.id===e?this.draft:this.shapes.find(t=>t.id===e)??null}getLastShape(){return this.shapes[this.shapes.length-1]??null}commitOrDiscardDraft(){this.draft&&(this.draft.points.length>=I(this.draft.mode)&&this.shapes.push(this.draft),this.draft=null)}ensureDraft(){return this.draft||(this.draft={id:_("measure-shape"),mode:this.mode,points:[],closed:!1,distance:0,area:0}),this.draft}recomputeShape(e){let t=e.points.map(i=>i.lngLat);if(e.mode==="area"&&t.length>=3){e.closed=!0,e.area=K(t),e.distance=S([...t,t[0]]);return}e.closed=!1,e.area=0,e.distance=S(t)}onMapClick(e){if(!this.isActive)return;if(this.suppressNextClick){this.suppressNextClick=!1;return}if(this.queryPointsLayer(e.point).length>0)return;let i=this.ensureDraft();i.points.push({id:_("measure-point"),lngLat:[+e.lngLat.lng.toFixed(6),+e.lngLat.lat.toFixed(6)]}),this.recomputeShape(i),this.render(),this.emitChange()}onPointMouseDown(e){if(!this.isActive)return;let t=e.features?.[0],i=t?.properties?.shapeId,n=t?.properties?.pointId;!i||!n||(e.preventDefault(),this.beginPointDrag(i,n))}beginPointDrag(e,t){this.draggingShapeId=e,this.draggingPointId=t,this.dragPanWasEnabled=this.map.dragPan.isEnabled(),this.map.dragPan.disable(),this.setCursor("grabbing"),this.map.on("mousemove",this.onPointDragMove),this.map.on("mouseup",this.onPointDragUp),window.addEventListener("mouseup",this.onPointDragUp)}stopDragListeners(){this.map.off("mousemove",this.onPointDragMove),this.map.off("mouseup",this.onPointDragUp),window.removeEventListener("mouseup",this.onPointDragUp),this.draggingShapeId=null,this.draggingPointId=null}projectPoint(e){let t=this.map.project(e);return{x:t.x,y:t.y}}closestPointOnSegment(e,t,i){let n=i.x-t.x,s=i.y-t.y,o=n*n+s*s;if(o===0)return t;let p=Math.max(0,Math.min(1,((e.x-t.x)*n+(e.y-t.y)*s)/o));return{x:t.x+n*p,y:t.y+s*p}}findClosestPointOnShape(e,t){let i=e.points.map(a=>this.projectPoint(a.lngLat)),n=e.closed?i.length:i.length-1,s=-1,o=null,p=1/0;for(let a=0;a<n;a+=1){let u=i[a],d=i[(a+1)%i.length];if(!u||!d)continue;let c=this.closestPointOnSegment(t,u,d),g=c.x-t.x,f=c.y-t.y,W=Math.sqrt(g*g+f*f);W<p&&(p=W,s=a,o=c)}if(s===-1||!o)return null;let l=this.map.unproject([o.x,o.y]);return{index:s,lngLat:[+l.lng.toFixed(6),+l.lat.toFixed(6)]}}queryPointsLayer(e){return this.map.getLayer(this.pointsLayerId)?this.map.queryRenderedFeatures(e,{layers:[this.pointsLayerId]}):[]}isOverExistingPoint(e){return this.queryPointsLayer(e).length>0}onLineMouseMove(e){if(!this.isActive||this.draggingPointId||this.isOverExistingPoint(e.point)){this.clearHoverInsert();return}let i=e.features?.[0]?.properties?.shapeId,n=i?this.findShape(i):null;if(!i||!n)return;let s=this.findClosestPointOnShape(n,e.point);s&&(this.hoverInsert={shapeId:i,index:s.index,lngLat:s.lngLat},this.renderHoverPoint(),this.setCursor("copy"))}clearHoverInsert(){this.hoverInsert&&(this.hoverInsert=null,this.renderHoverPoint(),this.setCursor(""))}onLineMouseDown(e){if(!this.isActive||!this.hoverInsert)return;let i=e.features?.[0]?.properties?.shapeId;if(!i||i!==this.hoverInsert.shapeId)return;let n=this.findShape(i);if(!n)return;e.preventDefault();let s={id:_("measure-point"),lngLat:this.hoverInsert.lngLat};n.points.splice(this.hoverInsert.index+1,0,s),this.recomputeShape(n),this.hoverInsert=null,this.renderHoverPoint(),this.render(),this.emitChange(),this.beginPointDrag(i,s.id)}renderHoverPoint(){let e=this.hoverInsert?[{type:"Feature",properties:{},geometry:{type:"Point",coordinates:this.hoverInsert.lngLat}}]:[];this.setSourceData(this.hoverPointSourceId,{type:"FeatureCollection",features:e})}onPointContextMenu(e){if(!this.isActive)return;let t=e.features?.[0],i=t?.properties?.shapeId,n=t?.properties?.pointId;!i||!n||(e.preventDefault(),this.removePoint(i,n))}setCursor(e){this.map.getCanvas().style.cursor=e}onStyleLoad(){this.ensureLayers(),this.bindLayerHandlers(),this.render()}emitChange(){this.onChange?.(this.getState())}ensureLayers(){let e={...Ne,...this.style};this.map.getSource(this.linesSourceId)||this.map.addSource(this.linesSourceId,{type:"geojson",data:P()}),this.map.getSource(this.fillsSourceId)||this.map.addSource(this.fillsSourceId,{type:"geojson",data:P()}),this.map.getSource(this.pointsSourceId)||this.map.addSource(this.pointsSourceId,{type:"geojson",data:P()}),this.map.getSource(this.hoverPointSourceId)||this.map.addSource(this.hoverPointSourceId,{type:"geojson",data:P()}),this.map.getLayer(this.fillsLayerId)||this.map.addLayer({id:this.fillsLayerId,type:"fill",source:this.fillsSourceId,paint:{"fill-color":e.fillColor,"fill-opacity":e.fillOpacity}}),this.map.getLayer(this.linesCasingLayerId)||this.map.addLayer({id:this.linesCasingLayerId,type:"line",source:this.linesSourceId,layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":"#FFFFFF","line-width":e.lineWidth+3,"line-opacity":.9}}),this.map.getLayer(this.linesLayerId)||this.map.addLayer({id:this.linesLayerId,type:"line",source:this.linesSourceId,layout:{"line-cap":"round","line-join":"round"},paint:{"line-color":e.lineColor,"line-width":e.lineWidth,...this.style.lineDasharray?{"line-dasharray":this.style.lineDasharray}:{}}}),this.map.getLayer(this.hoverPointLayerId)||this.map.addLayer({id:this.hoverPointLayerId,type:"circle",source:this.hoverPointSourceId,paint:{"circle-radius":Math.max(3,e.pointRadius-1),"circle-color":e.pointColor,"circle-stroke-color":e.pointStrokeColor,"circle-stroke-width":e.pointStrokeWidth,"circle-opacity":.8,"circle-stroke-opacity":.8}}),this.map.getLayer(this.pointsLayerId)||this.map.addLayer({id:this.pointsLayerId,type:"circle",source:this.pointsSourceId,paint:{"circle-radius":e.pointRadius,"circle-color":e.pointColor,"circle-stroke-color":e.pointStrokeColor,"circle-stroke-width":e.pointStrokeWidth}})}removeLayers(){[this.pointsLayerId,this.hoverPointLayerId,this.linesLayerId,this.linesCasingLayerId,this.fillsLayerId].forEach(e=>{this.map.getLayer(e)&&this.map.removeLayer(e)}),[this.pointsSourceId,this.hoverPointSourceId,this.linesSourceId,this.fillsSourceId].forEach(e=>{this.map.getSource(e)&&this.map.removeSource(e)})}setSourceData(e,t){this.map.getSource(e)?.setData(t)}buildLineFeature(e){if(e.points.length<2)return null;let t=e.points.map(i=>i.lngLat);return{type:"Feature",id:e.id,properties:{shapeId:e.id},geometry:{type:"LineString",coordinates:e.closed?[...t,t[0]]:t}}}buildFillFeature(e){if(e.mode!=="area"||e.points.length<3)return null;let t=e.points.map(i=>i.lngLat);return{type:"Feature",id:e.id,properties:{shapeId:e.id},geometry:{type:"Polygon",coordinates:[[...t,t[0]]]}}}buildPointFeatures(e){return e.points.map(t=>({type:"Feature",id:t.id,properties:{shapeId:e.id,pointId:t.id},geometry:{type:"Point",coordinates:t.lngLat}}))}getShapeAnchor(e){let t=e.points.map(i=>i.lngLat);return e.mode==="area"?J(t):N(t)}render(){let e=this.shapes,t=e.map(s=>this.buildLineFeature(s)).filter(s=>!!s),i=e.map(s=>this.buildFillFeature(s)).filter(s=>!!s),n=e.flatMap(s=>this.buildPointFeatures(s));if(this.draft){let s=this.buildLineFeature(this.draft),o=this.buildFillFeature(this.draft);s&&t.push(s),o&&i.push(o),n.push(...this.buildPointFeatures(this.draft))}this.setSourceData(this.linesSourceId,{type:"FeatureCollection",features:t}),this.setSourceData(this.fillsSourceId,{type:"FeatureCollection",features:i}),this.setSourceData(this.pointsSourceId,{type:"FeatureCollection",features:n}),this.updateBadge(),this.syncShapeBadges()}syncShapeBadges(){let e=new Set(this.shapes.map(t=>t.id));Array.from(this.shapeBadges.keys()).forEach(t=>{e.has(t)||(this.shapeBadges.get(t)?.destroy(),this.shapeBadges.delete(t))}),this.shapes.forEach(t=>{if(t.points.length<I(t.mode)){this.shapeBadges.get(t.id)?.destroy(),this.shapeBadges.delete(t.id);return}let i=t.mode==="area"?ye(t.area,this.labels):q(t.distance,this.labels),n=this.shapeBadges.get(t.id);n||(n=new w(this.map.getContainer(),this.style,this.icons,()=>this.removeShape(t.id)),this.shapeBadges.set(t.id,n)),n.setValue(i);let s=this.map.project(this.getShapeAnchor(t));n.setPosition(s.x,s.y)})}updateShapeBadgePositions(){this.shapes.forEach(e=>{let t=this.shapeBadges.get(e.id);if(!t)return;let i=this.map.project(this.getShapeAnchor(e));t.setPosition(i.x,i.y)})}updateBadge(){if(!this.badge)return;if(!this.isActive||!this.draft||this.draft.points.length===0){this.badge.hide();return}let e=this.draft.points.length>=I(this.draft.mode),t=this.draft.mode==="area"?ye(this.draft.area,this.labels):q(this.draft.distance,this.labels);this.badge.setValue(e?t:q(this.draft.distance,this.labels)),this.badge.setCheckEnabled(e),this.badge.show(),this.updateBadgePosition()}updateBadgePosition(){if(!this.badge||!this.draft||this.draft.points.length===0||!this.isActive)return;let e=this.draft.points[this.draft.points.length-1];if(!e)return;let t=this.map.project(e.lngLat);this.badge.setPosition(t.x,t.y)}};export{G as MahalMap,H as MahalMapDefaultMarker,E as MeasureTool,le as Router,ue as Search,de as SearchByLocation,ce as keyUtils,ve as measureUtils,oe as utils};
|
|
114
114
|
//# sourceMappingURL=index.mjs.map
|