terra-draw 0.0.1-alpha.23 → 0.0.1-alpha.24
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/CHANGELOG.md +14 -0
- package/README.md +2 -0
- package/dist/adapters/common/base.adapter.d.ts +1 -1
- package/dist/adapters/google-maps.adapter.d.ts +2 -2
- package/dist/adapters/leaflet.adapter.d.ts +2 -2
- package/dist/adapters/mapbox-gl.adapter.d.ts +2 -2
- package/dist/adapters/maplibre-gl.adapter.d.ts +2 -2
- package/dist/adapters/openlayers.adapter.d.ts +2 -2
- package/dist/terra-draw.cjs +1 -1
- package/dist/terra-draw.cjs.map +1 -1
- package/dist/terra-draw.d.ts +7 -1
- package/dist/terra-draw.modern.js +1 -1
- package/dist/terra-draw.modern.js.map +1 -1
- package/dist/terra-draw.module.js +1 -1
- package/dist/terra-draw.module.js.map +1 -1
- package/dist/terra-draw.umd.js +1 -1
- package/dist/terra-draw.umd.js.map +1 -1
- package/package.json +1 -1
- package/readme.gif +0 -0
package/dist/terra-draw.d.ts
CHANGED
|
@@ -4,6 +4,8 @@ import { TerraDrawMapboxGLAdapter } from "./adapters/mapbox-gl.adapter";
|
|
|
4
4
|
import { TerraDrawMapLibreGLAdapter } from "./adapters/maplibre-gl.adapter";
|
|
5
5
|
import { TerraDrawOpenLayersAdapter } from "./adapters/openlayers.adapter";
|
|
6
6
|
import { TerraDrawMode, TerraDrawAdapter, TerraDrawAdapterStyling } from "./common";
|
|
7
|
+
import { TerraDrawBaseAdapter } from "./adapters/common/base.adapter";
|
|
8
|
+
import { TerraDrawBaseDrawMode } from "./modes/base.mode";
|
|
7
9
|
import { TerraDrawCircleMode } from "./modes/circle/circle.mode";
|
|
8
10
|
import { TerraDrawFreehandMode } from "./modes/freehand/freehand.mode";
|
|
9
11
|
import { TerraDrawGreatCircleMode } from "./modes/greatcircle/great-circle.mode";
|
|
@@ -126,4 +128,8 @@ declare class TerraDraw {
|
|
|
126
128
|
*/
|
|
127
129
|
off<T extends TerraDrawEvents>(event: TerraDrawEvents, callback: TerraDrawEventListeners[T]): void;
|
|
128
130
|
}
|
|
129
|
-
|
|
131
|
+
declare const TerraDrawExtend: {
|
|
132
|
+
TerraDrawBaseDrawMode: typeof TerraDrawBaseDrawMode;
|
|
133
|
+
TerraDrawBaseAdapter: typeof TerraDrawBaseAdapter;
|
|
134
|
+
};
|
|
135
|
+
export { TerraDraw, TerraDrawSelectMode, TerraDrawPointMode, TerraDrawLineStringMode, TerraDrawGreatCircleMode, TerraDrawPolygonMode, TerraDrawCircleMode, TerraDrawFreehandMode, TerraDrawRenderMode, TerraDrawRectangleMode, TerraDrawGoogleMapsAdapter, TerraDrawMapboxGLAdapter, TerraDrawLeafletAdapter, TerraDrawMapLibreGLAdapter, TerraDrawOpenLayersAdapter, TerraDrawExtend, };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function t(){return t=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(t[s]=i[s])}return t},t.apply(this,arguments)}function e(t,e=9){const i=Math.pow(10,e);return Math.round(t*i)/i}const i=(t,e)=>{const{x:i,y:s}=t,{x:o,y:n}=e,r=o-i,a=n-s;return Math.sqrt(a*a+r*r)};class s{constructor({name:t,callback:e,unregister:i,register:s}){this.name=void 0,this.callback=void 0,this.registered=!1,this.register=void 0,this.unregister=void 0,this.name=t,this.register=()=>{this.registered||(this.registered=!0,s(e))},this.unregister=()=>{this.register&&(this.registered=!1,i(e))},this.callback=e}}class o{constructor(t){this._minPixelDragDistance=void 0,this._lastDrawEvent=void 0,this._coordinatePrecision=void 0,this._heldKeys=new Set,this._listeners=[],this._dragState="not-dragging",this._currentModeCallbacks=void 0,this._minPixelDragDistance="number"==typeof t.minPixelDragDistance?t.minPixelDragDistance:8,this._coordinatePrecision="number"==typeof t.coordinatePrecision?t.coordinatePrecision:9,this._listeners=[new s({name:"pointerdown",callback:t=>{if(!t.isPrimary)return;const e=this.getDrawEventFromEvent(t);e&&(this._dragState="pre-dragging",this._lastDrawEvent=e)},register:t=>{this.getMapContainer().addEventListener("pointerdown",t)},unregister:t=>{this.getMapContainer().removeEventListener("pointerdown",t)}}),new s({name:"pointermove",callback:t=>{if(!this._currentModeCallbacks)return;if(!t.isPrimary)return;t.preventDefault();const e=this.getDrawEventFromEvent(t);if(e)if("not-dragging"===this._dragState)this._currentModeCallbacks.onMouseMove(e),this._lastDrawEvent=e;else if("pre-dragging"===this._dragState){if(!this._lastDrawEvent)return;const t={x:this._lastDrawEvent.containerX,y:this._lastDrawEvent.containerY},s={x:e.containerX,y:e.containerY};if("drawing"===this._currentModeCallbacks.getState()&&i(t,s)<this._minPixelDragDistance)return;this._dragState="dragging",this._currentModeCallbacks.onDragStart(e,t=>{this.setDraggability.bind(this)(t)})}else"dragging"===this._dragState&&this._currentModeCallbacks.onDrag(e)},register:t=>{this.getMapContainer().addEventListener("pointermove",t)},unregister:t=>{this.getMapContainer().removeEventListener("pointermove",t)}}),new s({name:"contextmenu",callback:t=>{if(this._currentModeCallbacks&&(t.preventDefault(),"not-dragging"===this._dragState||"pre-dragging"===this._dragState)){const e=this.getDrawEventFromEvent(t);if(!e)return;"neither"!==e.button&&this._currentModeCallbacks.onClick(e)}},register:t=>{this.getMapContainer().addEventListener("contextmenu",t)},unregister:t=>{this.getMapContainer().removeEventListener("contextmenu",t)}}),new s({name:"pointerup",callback:t=>{if(!this._currentModeCallbacks)return;if(!t.isPrimary)return;const e=this.getDrawEventFromEvent(t);e&&("dragging"===this._dragState?this._currentModeCallbacks.onDragEnd(e,t=>{this.setDraggability.bind(this)(t)}):"not-dragging"!==this._dragState&&"pre-dragging"!==this._dragState||this._currentModeCallbacks.onClick(e),this._dragState="not-dragging",this.setDraggability(!0))},register:t=>{this.getMapContainer().addEventListener("pointerup",t)},unregister:t=>{this.getMapContainer().removeEventListener("pointerup",t)}}),new s({name:"keyup",callback:t=>{this._currentModeCallbacks&&(t.preventDefault(),this._heldKeys.delete(t.key),this._currentModeCallbacks.onKeyUp({key:t.key}))},register:t=>{this.getMapContainer().addEventListener("keyup",t)},unregister:t=>{this.getMapContainer().removeEventListener("keyup",t)}}),new s({name:"keydown",callback:t=>{this._currentModeCallbacks&&(t.preventDefault(),this._heldKeys.add(t.key),this._currentModeCallbacks.onKeyDown({key:t.key}))},register:t=>{this.getMapContainer().addEventListener("keydown",t)},unregister:t=>{this.getMapContainer().removeEventListener("keydown",t)}})]}getButton(t){return-1===t.button?"neither":0===t.button?"left":1===t.button?"middle":2===t.button?"right":"neither"}getDrawEventFromEvent(t){const i=this.getLngLatFromEvent(t);if(!i)return null;const{lng:s,lat:o}=i,n=this.getButton(t),r=this.getMapContainer();return{lng:e(s,this._coordinatePrecision),lat:e(o,this._coordinatePrecision),containerX:t.clientX-r.offsetLeft,containerY:t.clientY-r.offsetTop,button:n,heldKeys:[...this._heldKeys]}}register(t){this._currentModeCallbacks=t,this._listeners.forEach(t=>{t.register()})}unregister(){this._listeners.forEach(t=>{t.unregister()})}}class n extends o{constructor(t){super(t),this._cursor=void 0,this._cursorStyleSheet=void 0,this._lib=void 0,this._map=void 0,this._layers=!1,this._overlay=void 0,this._lib=t.lib,this._map=t.map,this._coordinatePrecision="number"==typeof t.coordinatePrecision?t.coordinatePrecision:9,this._overlay=new this._lib.OverlayView,this._overlay.draw=function(){},this._overlay.setMap(this._map)}circlePath(t,e,i){const s=2*i;return`M ${t} ${e} m -${i}, 0 a ${i},${i} 0 1,0 ${s},0 a ${i},${i} 0 1,0 -${s},0`}getLngLatFromEvent(t){const e=this._map.getBounds();if(!e)return null;const i=e.getNorthEast(),s=e.getSouthWest(),o=new google.maps.LatLngBounds(s,i),n=this._map.getDiv(),r=t.clientX-n.getBoundingClientRect().left,a=t.clientY-n.getBoundingClientRect().top,l=new google.maps.Point(r,a),h=this._overlay.getProjection().fromContainerPixelToLatLng(l);return h&&o.contains(h)?{lng:h.lng(),lat:h.lat()}:null}getMapContainer(){return this._map.getDiv()}project(t,e){const i=this._map.getBounds();if(void 0===i)throw new Error("cannot get bounds");const s=new this._lib.LatLng(i.getNorthEast().lat(),i.getSouthWest().lng()),o=this._map.getProjection();if(void 0===o)throw new Error("cannot get projection");const n=o.fromLatLngToPoint(s);if(null===n)throw new Error("cannot get projectedNorthWest");const r=o.fromLatLngToPoint({lng:t,lat:e});if(null===r)throw new Error("cannot get projected lng lat");const a=this._map.getZoom();if(void 0===a)throw new Error("cannot get zoom");const l=Math.pow(2,a);return{x:Math.floor((r.x-n.x)*l),y:Math.floor((r.y-n.y)*l)}}unproject(t,e){const i=this._map.getProjection();if(void 0===i)throw new Error("cannot get projection");const s=this._map.getBounds();if(void 0===s)throw new Error("cannot get bounds");const o=i.fromLatLngToPoint(s.getNorthEast());if(null===o)throw new Error("cannot get topRight");const n=i.fromLatLngToPoint(s.getSouthWest());if(null===n)throw new Error("cannot get bottomLeft");const r=this._map.getZoom();if(void 0===r)throw new Error("zoom get bounds");const a=Math.pow(2,r),l=new google.maps.Point(t/a+n.x,e/a+o.y),h=i.fromPointToLatLng(l);if(null===h)throw new Error("zoom get bounds");return{lng:h.lng(),lat:h.lat()}}setCursor(t){if(t!==this._cursor){if(this._cursorStyleSheet&&(this._cursorStyleSheet.remove(),this._cursorStyleSheet=void 0),"unset"!==t){const e=this.getMapContainer(),i=document.createElement("style");i.type="text/css",i.innerHTML=`#${e.id} [aria-label="Map"] { cursor: ${t} !important; }`,document.getElementsByTagName("head")[0].appendChild(i),this._cursorStyleSheet=i}this._cursor=t}}setDoubleClickToZoom(t){this._map.setOptions(t?{disableDoubleClickZoom:!1}:{disableDoubleClickZoom:!0})}setDraggability(t){this._map.setOptions({draggable:t})}render(t,e){this._layers?(t.deletedIds.forEach(t=>{const e=this._map.data.getFeatureById(t);e&&this._map.data.remove(e)}),t.updated.forEach(t=>{if(!t||!t.id)throw new Error("Feature is not valid");const e=this._map.data.getFeatureById(t.id);if(!e)throw new Error("Feature could not be found by Google Maps API");switch(e.forEachProperty((t,i)=>{e.setProperty(i,void 0)}),Object.keys(t.properties).forEach(i=>{e.setProperty(i,t.properties[i])}),t.geometry.type){case"Point":{const i=t.geometry.coordinates;e.setGeometry(new google.maps.Data.Point(new google.maps.LatLng(i[1],i[0])))}break;case"LineString":{const i=t.geometry.coordinates,s=[];for(let t=0;t<i.length;t++){const e=i[t],o=new google.maps.LatLng(e[1],e[0]);s.push(o)}e.setGeometry(new google.maps.Data.LineString(s))}break;case"Polygon":{const i=t.geometry.coordinates,s=[];for(let t=0;t<i.length;t++){const e=[];for(let s=0;s<i[t].length;s++){const o=new google.maps.LatLng(i[t][s][1],i[t][s][0]);e.push(o)}s.push(e)}e.setGeometry(new google.maps.Data.Polygon(s))}}}),t.created.forEach(t=>{this._map.data.addGeoJson(t)})):(this._map.data.addListener("click",t=>{const e=this._listeners.find(({name:t})=>"click"===t);e&&e.callback(t)}),this._map.data.addListener("mousemove",t=>{const e=this._listeners.find(({name:t})=>"mousemove"===t);e&&e.callback(t)}));const i={type:"FeatureCollection",features:[...t.created]};this._map.data.addGeoJson(i),this._map.data.setStyle(t=>{const i=t.getProperty("mode"),s=t.getGeometry();if(!s)throw new Error("Google Maps geometry not found");const o=s.getType(),n={};t.forEachProperty((t,e)=>{n[e]=t});const r=e[i]({type:"Feature",geometry:{type:o,coordinates:[]},properties:n});switch(o){case"Point":return{clickable:!1,icon:{path:this.circlePath(0,0,r.pointWidth),fillColor:r.pointColor,fillOpacity:1,strokeColor:r.pointOutlineColor,strokeWeight:r.pointOutlineWidth,rotation:0,scale:1}};case"LineString":return{strokeColor:r.lineStringColor,strokeWeight:r.lineStringWidth};case"Polygon":return{strokeColor:r.polygonOutlineColor,strokeWeight:r.polygonOutlineWidth,fillOpacity:r.polygonFillOpacity,fillColor:r.polygonFillColor}}throw Error("Unknown feature type")}),this._layers=!0}}class r extends o{constructor(t){super(t),this._lib=void 0,this._map=void 0,this._layer=void 0,this._panes={},this._container=void 0,this._lib=t.lib,this._map=t.map,this._container=this._map.getContainer()}createPaneStyleSheet(t,e){const i=document.createElement("style");return i.type="text/css",i.innerHTML=`.leaflet-${t} {z-index: ${e};}`,document.getElementsByTagName("head")[0].appendChild(i),this._map.createPane(t),i}getLngLatFromEvent(t){const e=this.getMapContainer(),i={x:t.clientX-e.offsetLeft,y:t.clientY-e.offsetTop};if(isNaN(i.x)||isNaN(i.y))return null;const s=this._map.containerPointToLatLng(i);return isNaN(s.lng)||isNaN(s.lat)?null:{lng:s.lng,lat:s.lat}}getMapContainer(){return this._container}setDraggability(t){t?this._map.dragging.enable():this._map.dragging.disable()}project(t,e){const{x:i,y:s}=this._map.latLngToContainerPoint({lng:t,lat:e});return{x:i,y:s}}unproject(t,e){const{lng:i,lat:s}=this._map.containerPointToLatLng({x:t,y:e});return{lng:i,lat:s}}setCursor(t){"unset"===t?this.getMapContainer().style.removeProperty("cursor"):this.getMapContainer().style.cursor=t}setDoubleClickToZoom(t){t?this._map.doubleClickZoom.enable():this._map.doubleClickZoom.disable()}render(t,e){const i=[...t.created,...t.updated,...t.unchanged];this._layer&&this._map.removeLayer(this._layer);const s=this._lib.geoJSON({type:"FeatureCollection",features:i},{pointToLayer:(t,i)=>{if(!t.properties)throw new Error("Feature has no properties");if("string"!=typeof t.properties.mode)throw new Error("Feature mode is not a string");const s=(0,e[t.properties.mode])(t),o=String(s.zIndex);return this._panes[o]||(this._panes[o]=this.createPaneStyleSheet(o,s.zIndex)),this._lib.circleMarker(i,{radius:s.pointWidth,stroke:s.pointOutlineWidth||!1,color:s.pointOutlineColor,weight:s.pointOutlineWidth,fillOpacity:.8,fillColor:s.pointColor,pane:o,interactive:!1})},style:t=>{if(!t||!t.properties)return{};const i=t,s=(0,e[i.properties.mode])(i);return"LineString"===i.geometry.type?{interactive:!1,color:s.lineStringColor,weight:s.lineStringWidth}:"Polygon"===i.geometry.type?{interactive:!1,fillOpacity:s.polygonFillOpacity,fillColor:s.polygonFillColor,weight:s.polygonOutlineWidth,stroke:!0,color:s.polygonFillColor}:{}}});this._map.addLayer(s),this._layer=s}}class a extends o{constructor(t){super(t),this._map=void 0,this._container=void 0,this._rendered={},this._map=t.map,this._container=this._map.getContainer()}_addGeoJSONSource(t,e){this._map.addSource(t,{type:"geojson",data:{type:"FeatureCollection",features:e},tolerance:0})}_addFillLayer(t,e){return this._map.addLayer({id:t,source:t,type:"fill",filter:["all",["match",["geometry-type"],"Polygon",!0,!1],["match",["get","mode"],e,!0,!1]],paint:{"fill-color":["get","polygonFillColor"],"fill-opacity":["get","polygonFillOpacity"]}})}_addFillOutlineLayer(t,e,i){const s=this._map.addLayer({id:t+"outline",source:t,type:"line",filter:["all",["match",["geometry-type"],"Polygon",!0,!1],["match",["get","mode"],e,!0,!1]],paint:{"line-width":["get","polygonOutlineWidth"],"line-color":["get","polygonOutlineColor"]}});return i&&this._map.moveLayer(t,i),s}_addLineLayer(t,e,i){const s=this._map.addLayer({id:t,source:t,type:"line",filter:["all",["match",["geometry-type"],"LineString",!0,!1],["match",["get","mode"],e,!0,!1]],paint:{"line-width":["get","lineStringWidth"],"line-color":["get","lineStringColor"]}});return i&&this._map.moveLayer(t,i),s}_addPointLayer(t,e,i){const s=this._map.addLayer({id:t,source:t,type:"circle",filter:["all",["match",["geometry-type"],"Point",!0,!1],["match",["get","mode"],e,!0,!1]],paint:{"circle-stroke-color":["get","pointOutlineColor"],"circle-stroke-width":["get","pointOutlineWidth"],"circle-radius":["get","pointWidth"],"circle-color":["get","pointColor"]}});return i&&this._map.moveLayer(t,i),s}_addLayer(t,e,i,s){"Point"===i&&this._addPointLayer(t,e,s),"LineString"===i&&this._addLineLayer(t,e,s),"Polygon"===i&&(this._addFillLayer(t,e),this._addFillOutlineLayer(t,e,s))}_addGeoJSONLayer(t,e,i){const s=`td-${t}-${e.toLowerCase()}`;return this._addGeoJSONSource(s,i),this._addLayer(s,t,e),s}_setGeoJSONLayerData(t,e,i){const s=`td-${t}-${e.toLowerCase()}`;return this._map.getSource(s).setData({type:"FeatureCollection",features:i}),s}getLngLatFromEvent(t){const{left:e,top:i}=this.getMapContainer().getBoundingClientRect();return this.unproject(t.clientX-e,t.clientY-i)}getMapContainer(){return this._container}setDraggability(t){t?this._map.dragPan.enable():this._map.dragPan.disable()}project(t,e){const{x:i,y:s}=this._map.project({lng:t,lat:e});return{x:i,y:s}}unproject(t,e){const{lng:i,lat:s}=this._map.unproject({x:t,y:e});return{lng:i,lat:s}}setCursor(t){this._map.getCanvas().style.cursor=t}setDoubleClickToZoom(t){t?this._map.doubleClickZoom.enable():this._map.doubleClickZoom.disable()}render(t,e){const i=[...t.created,...t.updated,...t.unchanged],s={};Object.keys(e).forEach(t=>{s[t]||(s[t]={points:[],linestrings:[],polygons:[]})});for(let t=0;t<i.length;t++){const o=i[t];Object.keys(e).forEach(t=>{const{properties:i}=o;if(i.mode!==t)return;const n=e[t](o);"Point"===o.geometry.type?(i.pointColor=n.pointColor,i.pointOutlineColor=n.pointOutlineColor,i.pointOutlineWidth=n.pointOutlineWidth,i.pointWidth=n.pointWidth,s[t].points.push(o)):"LineString"===o.geometry.type?(i.lineStringColor=n.lineStringColor,i.lineStringWidth=n.lineStringWidth,s[t].linestrings.push(o)):"Polygon"===o.geometry.type&&(i.polygonFillColor=n.polygonFillColor,i.polygonFillOpacity=n.polygonFillOpacity,i.polygonOutlineColor=n.polygonOutlineColor,i.polygonOutlineWidth=n.polygonOutlineWidth,s[t].polygons.push(o))})}Object.keys(e).forEach(t=>{if(!s[t])return;const{points:e,linestrings:i,polygons:o}=s[t];if(this._rendered[t]){const s=this._setGeoJSONLayerData(t,"Point",e);this._setGeoJSONLayerData(t,"LineString",i),this._setGeoJSONLayerData(t,"Polygon",o),this._map.moveLayer(s)}else this._addGeoJSONLayer(t,"Point",e),this._addGeoJSONLayer(t,"LineString",i),this._addGeoJSONLayer(t,"Polygon",o),this._rendered[t]=!0})}}class l extends o{constructor(t){super(t),this.mapboxglAdapter=void 0,this.mapboxglAdapter=new a(t)}getLngLatFromEvent(t){return this.mapboxglAdapter.getLngLatFromEvent(t)}getMapContainer(){return this.mapboxglAdapter.getMapContainer()}setDraggability(t){this.mapboxglAdapter.setDraggability(t)}project(t,e){return this.mapboxglAdapter.project(t,e)}unproject(t,e){return this.mapboxglAdapter.unproject(t,e)}setCursor(t){this.mapboxglAdapter.setCursor(t)}setDoubleClickToZoom(t){this.mapboxglAdapter.setDoubleClickToZoom(t)}render(t,e){this.mapboxglAdapter.render(t,e)}}function h(){throw new Error("Unimplemented abstract method.")}let c=0;function d(t,e){return Array.isArray(t)?t:(void 0===e?e=[t,t]:(e[0]=t,e[1]=t),e)}class u{constructor(t){this.opacity_=t.opacity,this.rotateWithView_=t.rotateWithView,this.rotation_=t.rotation,this.scale_=t.scale,this.scaleArray_=d(t.scale),this.displacement_=t.displacement,this.declutterMode_=t.declutterMode}clone(){const t=this.getScale();return new u({opacity:this.getOpacity(),scale:Array.isArray(t)?t.slice():t,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()})}getOpacity(){return this.opacity_}getRotateWithView(){return this.rotateWithView_}getRotation(){return this.rotation_}getScale(){return this.scale_}getScaleArray(){return this.scaleArray_}getDisplacement(){return this.displacement_}getDeclutterMode(){return this.declutterMode_}getAnchor(){return h()}getImage(t){return h()}getHitDetectionImage(){return h()}getPixelRatio(t){return 1}getImageState(){return h()}getImageSize(){return h()}getOrigin(){return h()}getSize(){return h()}setDisplacement(t){this.displacement_=t}setOpacity(t){this.opacity_=t}setRotateWithView(t){this.rotateWithView_=t}setRotation(t){this.rotation_=t}setScale(t){this.scale_=t,this.scaleArray_=d(t)}listenImageChange(t){h()}load(){h()}unlistenImageChange(t){h()}}var g=u;const p={1:"The view center is not defined",2:"The view resolution is not defined",3:"The view rotation is not defined",4:"`image` and `src` cannot be provided at the same time",5:"`imgSize` must be set when `image` is provided",7:"`format` must be set when `url` is set",8:"Unknown `serverType` configured",9:"`url` must be configured or set using `#setUrl()`",10:"The default `geometryFunction` can only handle `Point` geometries",11:"`options.featureTypes` must be an Array",12:"`options.geometryName` must also be provided when `options.bbox` is set",13:"Invalid corner",14:"Invalid color",15:"Tried to get a value for a key that does not exist in the cache",16:"Tried to set a value for a key that is used already",17:"`resolutions` must be sorted in descending order",18:"Either `origin` or `origins` must be configured, never both",19:"Number of `tileSizes` and `resolutions` must be equal",20:"Number of `origins` and `resolutions` must be equal",22:"Either `tileSize` or `tileSizes` must be configured, never both",24:"Invalid extent or geometry provided as `geometry`",25:"Cannot fit empty extent provided as `geometry`",26:"Features must have an id set",27:"Features must have an id set",28:'`renderMode` must be `"hybrid"` or `"vector"`',30:"The passed `feature` was already added to the source",31:"Tried to enqueue an `element` that was already added to the queue",32:"Transformation matrix cannot be inverted",33:"Invalid units",34:"Invalid geometry layout",36:"Unknown SRS type",37:"Unknown geometry type found",38:"`styleMapValue` has an unknown type",39:"Unknown geometry type",40:"Expected `feature` to have a geometry",41:"Expected an `ol/style/Style` or an array of `ol/style/Style.js`",42:"Question unknown, the answer is 42",43:"Expected `layers` to be an array or a `Collection`",47:"Expected `controls` to be an array or an `ol/Collection`",48:"Expected `interactions` to be an array or an `ol/Collection`",49:"Expected `overlays` to be an array or an `ol/Collection`",50:"`options.featureTypes` should be an Array",51:"Either `url` or `tileJSON` options must be provided",52:"Unknown `serverType` configured",53:"Unknown `tierSizeCalculation` configured",55:"The {-y} placeholder requires a tile grid with extent",56:"mapBrowserEvent must originate from a pointer event",57:"At least 2 conditions are required",59:"Invalid command found in the PBF",60:"Missing or invalid `size`",61:"Cannot determine IIIF Image API version from provided image information JSON",62:"A `WebGLArrayBuffer` must either be of type `ELEMENT_ARRAY_BUFFER` or `ARRAY_BUFFER`",64:"Layer opacity must be a number",66:"`forEachFeatureAtCoordinate` cannot be used on a WebGL layer if the hit detection logic has not been enabled. This is done by providing adequate shaders using the `hitVertexShader` and `hitFragmentShader` properties of `WebGLPointsLayerRenderer`",67:"A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both",68:"A VectorTile source can only be rendered if it has a projection compatible with the view projection"};class y extends Error{constructor(t){const e=p[t];super(e),this.code=t,this.name="AssertionError",this.message=e}}var f=y;function m(t,e,i){return Math.min(Math.max(t,e),i)}const v=/^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i,_=/^([a-z]*)$|^hsla?\(.*\)$/i,C=function(){const t={};let e=0;return function(i){let s;if(t.hasOwnProperty(i))s=t[i];else{if(e>=1024){let i=0;for(const s in t)0==(3&i++)&&(delete t[s],--e)}s=function(t){let e,i,s,o,n;if(_.exec(t)&&(t=function(t){const e=document.createElement("div");if(e.style.color=t,""!==e.style.color){document.body.appendChild(e);const t=getComputedStyle(e).color;return document.body.removeChild(e),t}return""}(t)),v.exec(t)){const r=t.length-1;let a;a=r<=4?1:2;const l=4===r||8===r;e=parseInt(t.substr(1+0*a,a),16),i=parseInt(t.substr(1+1*a,a),16),s=parseInt(t.substr(1+2*a,a),16),o=l?parseInt(t.substr(1+3*a,a),16):255,1==a&&(e=(e<<4)+e,i=(i<<4)+i,s=(s<<4)+s,l&&(o=(o<<4)+o)),n=[e,i,s,o/255]}else t.startsWith("rgba(")?(n=t.slice(5,-1).split(",").map(Number),P(n)):t.startsWith("rgb(")?(n=t.slice(4,-1).split(",").map(Number),n.push(1),P(n)):function(t,e){throw new f(14)}();return n}(i),t[i]=s,++e}return s}}();function P(t){return t[0]=m(t[0]+.5|0,0,255),t[1]=m(t[1]+.5|0,0,255),t[2]=m(t[2]+.5|0,0,255),t[3]=m(t[3],0,1),t}function x(t){return Array.isArray(t)?function(t){let e=t[0];e!=(0|e)&&(e=e+.5|0);let i=t[1];i!=(0|i)&&(i=i+.5|0);let s=t[2];return s!=(0|s)&&(s=s+.5|0),"rgba("+e+","+i+","+s+","+(void 0===t[3]?1:Math.round(100*t[3])/100)+")"}(t):t}const w="undefined"!=typeof navigator&&void 0!==navigator.userAgent?navigator.userAgent.toLowerCase():"";w.includes("firefox"),w.includes("safari")&&!w.includes("chrom")&&(w.includes("version/15.4")||/cpu (os|iphone os) 15_4 like mac os x/.test(w)),w.includes("webkit")&&w.includes("edge"),w.includes("macintosh");const M="undefined"!=typeof WorkerGlobalScope&&"undefined"!=typeof OffscreenCanvas&&self instanceof WorkerGlobalScope;function E(t,e,i,s){let o;return o=i&&i.length?i.shift():M?new OffscreenCanvas(t||300,e||300):document.createElement("canvas"),t&&(o.width=t),e&&(o.height=e),o.getContext("2d",s)}!function(){let t=!1;try{const e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("_",null,e),window.removeEventListener("_",null,e)}catch(t){}}();var S=class{constructor(t){this.type=t,this.target=null}preventDefault(){this.defaultPrevented=!0}stopPropagation(){this.propagationStopped=!0}},b=class{constructor(){this.disposed=!1}dispose(){this.disposed||(this.disposed=!0,this.disposeInternal())}disposeInternal(){}};function I(){}function k(t){for(const e in t)delete t[e]}var D=class extends b{constructor(t){super(),this.eventTarget_=t,this.pendingRemovals_=null,this.dispatching_=null,this.listeners_=null}addEventListener(t,e){if(!t||!e)return;const i=this.listeners_||(this.listeners_={}),s=i[t]||(i[t]=[]);s.includes(e)||s.push(e)}dispatchEvent(t){const e="string"==typeof t,i=e?t:t.type,s=this.listeners_&&this.listeners_[i];if(!s)return;const o=e?new S(t):t;o.target||(o.target=this.eventTarget_||this);const n=this.dispatching_||(this.dispatching_={}),r=this.pendingRemovals_||(this.pendingRemovals_={});let a;i in n||(n[i]=0,r[i]=0),++n[i];for(let t=0,e=s.length;t<e;++t)if(a="handleEvent"in s[t]?s[t].handleEvent(o):s[t].call(this,o),!1===a||o.propagationStopped){a=!1;break}if(0==--n[i]){let t=r[i];for(delete r[i];t--;)this.removeEventListener(i,I);delete n[i]}return a}disposeInternal(){this.listeners_&&k(this.listeners_)}getListeners(t){return this.listeners_&&this.listeners_[t]||void 0}hasListener(t){return!!this.listeners_&&(t?t in this.listeners_:Object.keys(this.listeners_).length>0)}removeEventListener(t,e){const i=this.listeners_&&this.listeners_[t];if(i){const s=i.indexOf(e);-1!==s&&(this.pendingRemovals_&&t in this.pendingRemovals_?(i[s]=I,++this.pendingRemovals_[t]):(i.splice(s,1),0===i.length&&delete this.listeners_[t]))}}};function O(t,e,i,s,o){if(s&&s!==t&&(i=i.bind(s)),o){const s=i;i=function(){t.removeEventListener(e,i),s.apply(this,arguments)}}const n={target:t,type:e,listener:i};return t.addEventListener(e,i),n}function L(t,e,i,s){return O(t,e,i,s,!0)}function F(t){t&&t.target&&(t.target.removeEventListener(t.type,t.listener),k(t))}var W=class extends D{constructor(){super(),this.on=this.onInternal,this.once=this.onceInternal,this.un=this.unInternal,this.revision_=0}changed(){++this.revision_,this.dispatchEvent("change")}getRevision(){return this.revision_}onInternal(t,e){if(Array.isArray(t)){const i=t.length,s=new Array(i);for(let o=0;o<i;++o)s[o]=O(this,t[o],e);return s}return O(this,t,e)}onceInternal(t,e){let i;if(Array.isArray(t)){const s=t.length;i=new Array(s);for(let o=0;o<s;++o)i[o]=L(this,t[o],e)}else i=L(this,t,e);return e.ol_key=i,i}unInternal(t,e){const i=e.ol_key;if(i)!function(t){if(Array.isArray(t))for(let e=0,i=t.length;e<i;++e)F(t[e]);else F(t)}(i);else if(Array.isArray(t))for(let i=0,s=t.length;i<s;++i)this.removeEventListener(t[i],e);else this.removeEventListener(t,e)}};class B extends S{constructor(t,e,i){super(t),this.key=e,this.oldValue=i}}const G="#000",A="round";new class extends W{constructor(t){super(),this.ol_uid||(this.ol_uid=String(++c)),this.values_=null,void 0!==t&&this.setProperties(t)}get(t){let e;return this.values_&&this.values_.hasOwnProperty(t)&&(e=this.values_[t]),e}getKeys(){return this.values_&&Object.keys(this.values_)||[]}getProperties(){return this.values_&&Object.assign({},this.values_)||{}}hasProperties(){return!!this.values_}notify(t,e){let i;i=`change:${t}`,this.hasListener(i)&&this.dispatchEvent(new B(i,t,e)),i="propertychange",this.hasListener(i)&&this.dispatchEvent(new B(i,t,e))}addChangeListener(t,e){this.addEventListener(`change:${t}`,e)}removeChangeListener(t,e){this.removeEventListener(`change:${t}`,e)}set(t,e,i){const s=this.values_||(this.values_={});if(i)s[t]=e;else{const i=s[t];s[t]=e,i!==e&&this.notify(t,i)}}setProperties(t,e){for(const i in t)this.set(i,t[i],e)}applyProperties(t){t.values_&&Object.assign(this.values_||(this.values_={}),t.values_)}unset(t,e){if(this.values_&&t in this.values_){const i=this.values_[t];delete this.values_[t],function(t){let e;for(e in t)return!1;return!e}(this.values_)&&(this.values_=null),e||this.notify(t,i)}}};class j extends g{constructor(t){super({opacity:1,rotateWithView:void 0!==t.rotateWithView&&t.rotateWithView,rotation:void 0!==t.rotation?t.rotation:0,scale:void 0!==t.scale?t.scale:1,displacement:void 0!==t.displacement?t.displacement:[0,0],declutterMode:t.declutterMode}),this.canvas_=void 0,this.hitDetectionCanvas_=null,this.fill_=void 0!==t.fill?t.fill:null,this.origin_=[0,0],this.points_=t.points,this.radius_=void 0!==t.radius?t.radius:t.radius1,this.radius2_=t.radius2,this.angle_=void 0!==t.angle?t.angle:0,this.stroke_=void 0!==t.stroke?t.stroke:null,this.size_=null,this.renderOptions_=null,this.render()}clone(){const t=this.getScale(),e=new j({fill:this.getFill()?this.getFill().clone():void 0,points:this.getPoints(),radius:this.getRadius(),radius2:this.getRadius2(),angle:this.getAngle(),stroke:this.getStroke()?this.getStroke().clone():void 0,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),scale:Array.isArray(t)?t.slice():t,displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()});return e.setOpacity(this.getOpacity()),e}getAnchor(){const t=this.size_;if(!t)return null;const e=this.getDisplacement(),i=this.getScaleArray();return[t[0]/2-e[0]/i[0],t[1]/2+e[1]/i[1]]}getAngle(){return this.angle_}getFill(){return this.fill_}setFill(t){this.fill_=t,this.render()}getHitDetectionImage(){return this.hitDetectionCanvas_||this.createHitDetectionCanvas_(this.renderOptions_),this.hitDetectionCanvas_}getImage(t){let e=this.canvas_[t];if(!e){const i=this.renderOptions_,s=E(i.size*t,i.size*t);this.draw_(i,s,t),e=s.canvas,this.canvas_[t]=e}return e}getPixelRatio(t){return t}getImageSize(){return this.size_}getImageState(){return 2}getOrigin(){return this.origin_}getPoints(){return this.points_}getRadius(){return this.radius_}getRadius2(){return this.radius2_}getSize(){return this.size_}getStroke(){return this.stroke_}setStroke(t){this.stroke_=t,this.render()}listenImageChange(t){}load(){}unlistenImageChange(t){}calculateLineJoinSize_(t,e,i){if(0===e||Infinity===this.points_||"bevel"!==t&&"miter"!==t)return e;let s=this.radius_,o=void 0===this.radius2_?s:this.radius2_;if(s<o){const t=s;s=o,o=t}const n=2*Math.PI/(void 0===this.radius2_?this.points_:2*this.points_),r=o*Math.sin(n),a=s-Math.sqrt(o*o-r*r),l=Math.sqrt(r*r+a*a),h=l/r;if("miter"===t&&h<=i)return h*e;const c=e/2/h,d=e/2*(a/l),u=Math.sqrt((s+c)*(s+c)+d*d)-s;if(void 0===this.radius2_||"bevel"===t)return 2*u;const g=s*Math.sin(n),p=o-Math.sqrt(s*s-g*g),y=Math.sqrt(g*g+p*p)/g;return y<=i?2*Math.max(u,y*e/2-o-s):2*u}createRenderOptions(){let t,e=A,i=0,s=null,o=0,n=0;this.stroke_&&(t=this.stroke_.getColor(),null===t&&(t="#000"),t=x(t),n=this.stroke_.getWidth(),void 0===n&&(n=1),s=this.stroke_.getLineDash(),o=this.stroke_.getLineDashOffset(),e=this.stroke_.getLineJoin(),void 0===e&&(e=A),i=this.stroke_.getMiterLimit(),void 0===i&&(i=10));const r=this.calculateLineJoinSize_(e,n,i),a=Math.max(this.radius_,this.radius2_||0);return{strokeStyle:t,strokeWidth:n,size:Math.ceil(2*a+r),lineDash:s,lineDashOffset:o,lineJoin:e,miterLimit:i}}render(){this.renderOptions_=this.createRenderOptions();const t=this.renderOptions_.size;this.canvas_={},this.size_=[t,t]}draw_(t,e,i){if(e.scale(i,i),e.translate(t.size/2,t.size/2),this.createPath_(e),this.fill_){let t=this.fill_.getColor();null===t&&(t=G),e.fillStyle=x(t),e.fill()}this.stroke_&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.strokeWidth,t.lineDash&&(e.setLineDash(t.lineDash),e.lineDashOffset=t.lineDashOffset),e.lineJoin=t.lineJoin,e.miterLimit=t.miterLimit,e.stroke())}createHitDetectionCanvas_(t){if(this.fill_){let e=this.fill_.getColor(),i=0;if("string"==typeof e&&(e=function(t){return Array.isArray(t)?t:C(t)}(e)),null===e?i=1:Array.isArray(e)&&(i=4===e.length?e[3]:1),0===i){const e=E(t.size,t.size);this.hitDetectionCanvas_=e.canvas,this.drawHitDetectionCanvas_(t,e)}}this.hitDetectionCanvas_||(this.hitDetectionCanvas_=this.getImage(1))}createPath_(t){let e=this.points_;const i=this.radius_;if(Infinity===e)t.arc(0,0,i,0,2*Math.PI);else{const s=void 0===this.radius2_?i:this.radius2_;void 0!==this.radius2_&&(e*=2);const o=this.angle_-Math.PI/2,n=2*Math.PI/e;for(let r=0;r<e;r++){const e=o+r*n,a=r%2==0?i:s;t.lineTo(a*Math.cos(e),a*Math.sin(e))}t.closePath()}}drawHitDetectionCanvas_(t,e){e.translate(t.size/2,t.size/2),this.createPath_(e),e.fillStyle=G,e.fill(),this.stroke_&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.strokeWidth,t.lineDash&&(e.setLineDash(t.lineDash),e.lineDashOffset=t.lineDashOffset),e.lineJoin=t.lineJoin,e.miterLimit=t.miterLimit,e.stroke())}}var R=j;class T extends R{constructor(t){super({points:Infinity,fill:(t=t||{radius:5}).fill,radius:t.radius,stroke:t.stroke,scale:void 0!==t.scale?t.scale:1,rotation:void 0!==t.rotation?t.rotation:0,rotateWithView:void 0!==t.rotateWithView&&t.rotateWithView,displacement:void 0!==t.displacement?t.displacement:[0,0],declutterMode:t.declutterMode})}clone(){const t=this.getScale(),e=new T({fill:this.getFill()?this.getFill().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,radius:this.getRadius(),scale:Array.isArray(t)?t.slice():t,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()});return e.setOpacity(this.getOpacity()),e}setRadius(t){this.radius_=t,this.render()}}var U=T;class N{constructor(t){this.color_=void 0!==(t=t||{}).color?t.color:null}clone(){const t=this.getColor();return new N({color:Array.isArray(t)?t.slice():t||void 0})}getColor(){return this.color_}setColor(t){this.color_=t}}var X=N;class Y{constructor(t){this.color_=void 0!==(t=t||{}).color?t.color:null,this.lineCap_=t.lineCap,this.lineDash_=void 0!==t.lineDash?t.lineDash:null,this.lineDashOffset_=t.lineDashOffset,this.lineJoin_=t.lineJoin,this.miterLimit_=t.miterLimit,this.width_=t.width}clone(){const t=this.getColor();return new Y({color:Array.isArray(t)?t.slice():t||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()})}getColor(){return this.color_}getLineCap(){return this.lineCap_}getLineDash(){return this.lineDash_}getLineDashOffset(){return this.lineDashOffset_}getLineJoin(){return this.lineJoin_}getMiterLimit(){return this.miterLimit_}getWidth(){return this.width_}setColor(t){this.color_=t}setLineCap(t){this.lineCap_=t}setLineDash(t){this.lineDash_=t}setLineDashOffset(t){this.lineDashOffset_=t}setLineJoin(t){this.lineJoin_=t}setMiterLimit(t){this.miterLimit_=t}setWidth(t){this.width_=t}}var z=Y;class J{constructor(t){t=t||{},this.geometry_=null,this.geometryFunction_=$,void 0!==t.geometry&&this.setGeometry(t.geometry),this.fill_=void 0!==t.fill?t.fill:null,this.image_=void 0!==t.image?t.image:null,this.renderer_=void 0!==t.renderer?t.renderer:null,this.hitDetectionRenderer_=void 0!==t.hitDetectionRenderer?t.hitDetectionRenderer:null,this.stroke_=void 0!==t.stroke?t.stroke:null,this.text_=void 0!==t.text?t.text:null,this.zIndex_=t.zIndex}clone(){let t=this.getGeometry();return t&&"object"==typeof t&&(t=t.clone()),new J({geometry:t,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,renderer:this.getRenderer(),stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})}getRenderer(){return this.renderer_}setRenderer(t){this.renderer_=t}setHitDetectionRenderer(t){this.hitDetectionRenderer_=t}getHitDetectionRenderer(){return this.hitDetectionRenderer_}getGeometry(){return this.geometry_}getGeometryFunction(){return this.geometryFunction_}getFill(){return this.fill_}setFill(t){this.fill_=t}getImage(){return this.image_}setImage(t){this.image_=t}getStroke(){return this.stroke_}setStroke(t){this.stroke_=t}getText(){return this.text_}setText(t){this.text_=t}getZIndex(){return this.zIndex_}setGeometry(t){"function"==typeof t?this.geometryFunction_=t:"string"==typeof t?this.geometryFunction_=function(e){return e.get(t)}:t?void 0!==t&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=$,this.geometry_=t}setZIndex(t){this.zIndex_=t}}function $(t){return t.getGeometry()}var K=J;const V={radians:6370997/(2*Math.PI),degrees:2*Math.PI*6370997/360,ft:.3048,m:1,"us-ft":1200/3937};var Z=class{constructor(t){this.code_=t.code,this.units_=t.units,this.extent_=void 0!==t.extent?t.extent:null,this.worldExtent_=void 0!==t.worldExtent?t.worldExtent:null,this.axisOrientation_=void 0!==t.axisOrientation?t.axisOrientation:"enu",this.global_=void 0!==t.global&&t.global,this.canWrapX_=!(!this.global_||!this.extent_),this.getPointResolutionFunc_=t.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=t.metersPerUnit}canWrapX(){return this.canWrapX_}getCode(){return this.code_}getExtent(){return this.extent_}getUnits(){return this.units_}getMetersPerUnit(){return this.metersPerUnit_||V[this.units_]}getWorldExtent(){return this.worldExtent_}getAxisOrientation(){return this.axisOrientation_}isGlobal(){return this.global_}setGlobal(t){this.global_=t,this.canWrapX_=!(!t||!this.extent_)}getDefaultTileGrid(){return this.defaultTileGrid_}setDefaultTileGrid(t){this.defaultTileGrid_=t}setExtent(t){this.extent_=t,this.canWrapX_=!(!this.global_||!t)}setWorldExtent(t){this.worldExtent_=t}setGetPointResolution(t){this.getPointResolutionFunc_=t}getPointResolutionFunc(){return this.getPointResolutionFunc_}};const q=6378137,H=Math.PI*q,Q=[-H,-H,H,H],tt=[-180,-85,180,85],et=q*Math.log(Math.tan(Math.PI/2));class it extends Z{constructor(t){super({code:t,units:"m",extent:Q,global:!0,worldExtent:tt,getPointResolution:function(t,e){return t/Math.cosh(e[1]/q)}})}}const st=[new it("EPSG:3857"),new it("EPSG:102100"),new it("EPSG:102113"),new it("EPSG:900913"),new it("http://www.opengis.net/def/crs/EPSG/0/3857"),new it("http://www.opengis.net/gml/srs/epsg.xml#3857")],ot=[-180,-90,180,90],nt=6378137*Math.PI/180;class rt extends Z{constructor(t,e){super({code:t,units:"degrees",extent:ot,axisOrientation:e,global:!0,metersPerUnit:nt,worldExtent:ot})}}const at=[new rt("CRS:84"),new rt("EPSG:4326","neu"),new rt("urn:ogc:def:crs:OGC:1.3:CRS84"),new rt("urn:ogc:def:crs:OGC:2:84"),new rt("http://www.opengis.net/def/crs/OGC/1.3/CRS84"),new rt("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new rt("http://www.opengis.net/def/crs/EPSG/0/4326","neu")];let lt={},ht={};function ct(t,e,i){const s=t.getCode(),o=e.getCode();s in ht||(ht[s]={}),ht[s][o]=i}function dt(t,e,i){if(void 0!==e)for(let i=0,s=t.length;i<s;++i)e[i]=t[i];else e=t.slice();return e}function ut(t,e,i){if(void 0!==e&&t!==e){for(let i=0,s=t.length;i<s;++i)e[i]=t[i];t=e}return t}function gt(t){!function(t,e){lt[t]=e}(t.getCode(),t),ct(t,t,dt)}function pt(t){return"string"==typeof t?lt[e=t]||lt[e.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\w+)$/,"EPSG:$3")]||null:t||null;var e}function yt(t){!function(t){t.forEach(gt)}(t),t.forEach(function(e){t.forEach(function(t){e!==t&&ct(e,t,dt)})})}function ft(t,e,i){const s=function(t,e){return function(t,e){let i=function(t,e){let i;return t in ht&&e in ht[t]&&(i=ht[t][e]),i}(t.getCode(),e.getCode());return i||(i=ut),i}(pt(t),pt(e))}(e,i);return s(t,void 0,t.length)}var mt,vt,_t;yt(st),yt(at),mt=st,vt=function(t,e,i){const s=t.length;i=i>1?i:2,void 0===e&&(e=i>2?t.slice():new Array(s));for(let o=0;o<s;o+=i){e[o]=H*t[o]/180;let i=q*Math.log(Math.tan(Math.PI*(+t[o+1]+90)/360));i>et?i=et:i<-et&&(i=-et),e[o+1]=i}return e},_t=function(t,e,i){const s=t.length;i=i>1?i:2,void 0===e&&(e=i>2?t.slice():new Array(s));for(let o=0;o<s;o+=i)e[o]=180*t[o]/H,e[o+1]=360*Math.atan(Math.exp(t[o+1]/q))/Math.PI-90;return e},at.forEach(function(t){mt.forEach(function(e){ct(t,e,vt),ct(e,t,_t)})});class Ct extends o{constructor(t){super(t),this._lib=void 0,this._map=void 0,this._container=void 0,this._projection="EPSG:3857",this._vectorSource=void 0,this._geoJSONReader=void 0,this._map=t.map,this._lib=t.lib,this._container=this._map.getViewport(),this._container.setAttribute("tabindex","0")}hexToRGB(t){return{r:parseInt(t.slice(1,3),16),g:parseInt(t.slice(3,5),16),b:parseInt(t.slice(5,7),16)}}getStyles(t,e){const i=t.getGeometry();if(i)return{Point:t=>{const i=t.getProperties(),s=e[i.mode]({type:"Feature",geometry:{type:"Point",coordinates:[]},properties:i});return new this._lib.Style({image:new U({radius:s.pointWidth,fill:new X({color:s.pointColor}),stroke:new z({color:s.pointOutlineColor,width:s.pointOutlineWidth})})})},LineString:t=>{const i=t.getProperties(),s=e[i.mode]({type:"Feature",geometry:{type:"LineString",coordinates:[]},properties:i});return new this._lib.Style({stroke:new this._lib.Stroke({color:s.lineStringColor,width:s.lineStringWidth})})},Polygon:t=>{const i=t.getProperties(),s=e[i.mode]({type:"Feature",geometry:{type:"LineString",coordinates:[]},properties:i}),{r:o,g:n,b:r}=this.hexToRGB(s.polygonFillColor);return new K({stroke:new z({color:s.polygonOutlineColor,width:s.polygonOutlineWidth}),fill:new X({color:`rgba(${o},${n},${r},${s.polygonFillOpacity})`})})}}[i.getType()](t)}addFeature(t){if(!this._vectorSource||!this._geoJSONReader)throw new Error("Vector Source not initalised");{const e=this._geoJSONReader.readFeature(t,{featureProjection:this._projection});this._vectorSource.addFeature(e)}}removeFeature(t){if(!this._vectorSource)throw new Error("Vector Source not initalised");{const e=this._vectorSource.getFeatureById(t);if(!e)return;this._vectorSource.removeFeature(e)}}getLngLatFromEvent(t){const e=this.getMapContainer();return this.unproject(t.clientX-e.offsetLeft,t.clientY-e.offsetTop)}getMapContainer(){return this._container}setDraggability(t){this._map.getInteractions().forEach(e=>{"DragPan"===e.constructor.name&&e.setActive(t)})}project(t,e){const[i,s]=this._map.getPixelFromCoordinate(ft([t,e],"EPSG:4326","EPSG:3857"));return{x:i,y:s}}unproject(t,e){const[i,s]=function(t,e){const i=ft(t,"EPSG:3857","EPSG:4326"),s=i[0];return(s<-180||s>180)&&(i[0]=function(t,e){const i=t%360;return 360*i<0?i+360:i}(s+180)-180),i}(this._map.getCoordinateFromPixel([t,e]));return{lng:i,lat:s}}setCursor(t){"unset"===t?this.getMapContainer().style.removeProperty("cursor"):this.getMapContainer().style.cursor=t}setDoubleClickToZoom(t){this._map.getInteractions().forEach(function(e){"DoubleClickZoom"===e.constructor.name&&e.setActive(t)})}render(t,e){if(this._vectorSource){if(!this._vectorSource)throw new Error("Vector Layer source has disappeared");t.deletedIds.forEach(t=>{this.removeFeature(t)}),t.updated.forEach(t=>{this.removeFeature(t.id),this.addFeature(t)}),t.created.forEach(t=>{this.addFeature(t)})}else{this._geoJSONReader=new this._lib.GeoJSON;const i=this._geoJSONReader.readFeatures({type:"FeatureCollection",features:[...t.created,...t.updated,...t.unchanged]},{featureProjection:this._projection}),s=new this._lib.VectorSource({features:i});this._vectorSource=s;const o=new this._lib.VectorLayer({source:s,style:t=>this.getStyles(t,e)});this._map.addLayer(o)}}}function Pt(t,e){const i=t=>t*Math.PI/180,s=i(t[1]),o=i(t[0]),n=i(e[1]),r=n-s,a=i(e[0])-o,l=Math.sin(r/2)*Math.sin(r/2)+Math.cos(s)*Math.cos(n)*Math.sin(a/2)*Math.sin(a/2);return 2*Math.atan2(Math.sqrt(l),Math.sqrt(1-l))*6371e3/1e3}function xt(t){return t%360*Math.PI/180}function wt(t){return t%(2*Math.PI)*180/Math.PI}function Mt(t,e,i){const s=xt(t[0]),o=xt(t[1]),n=xt(i),r=function(t){return t/6371.0088}(e),a=Math.asin(Math.sin(o)*Math.cos(r)+Math.cos(o)*Math.sin(r)*Math.cos(n));return[wt(s+Math.atan2(Math.sin(n)*Math.sin(r)*Math.cos(o),Math.cos(r)-Math.sin(o)*Math.sin(a))),wt(a)]}function Et(t){const{center:i,radiusKilometers:s,coordinatePrecision:o}=t,n=t.steps?t.steps:64,r=[];for(let t=0;t<n;t++){const a=Mt(i,s,-360*t/n);r.push([e(a[0],o),e(a[1],o)])}return r.push(r[0]),{type:"Feature",geometry:{type:"Polygon",coordinates:[r]},properties:{}}}class St{get state(){return this._state}set state(t){throw new Error("Please use the modes lifecycle methods")}get styles(){return this._styles}set styles(t){if("object"!=typeof t)throw new Error("Styling must be an object");this.onStyleChange([],"styling"),this._styles=t}registerBehaviors(t){}constructor(e){this._state=void 0,this._styles=void 0,this.behaviors=[],this.pointerDistance=void 0,this.coordinatePrecision=void 0,this.onStyleChange=void 0,this.store=void 0,this.setDoubleClickToZoom=void 0,this.unproject=void 0,this.project=void 0,this.setCursor=void 0,this._state="unregistered",this._styles=e&&e.styles?t({},e.styles):{},this.pointerDistance=e&&e.pointerDistance||40,this.coordinatePrecision=e&&e.coordinatePrecision||9}setDrawing(){if("started"!==this._state)throw new Error("Mode must be unregistered or stopped to start");this._state="drawing"}setStarted(){if("stopped"!==this._state&&"registered"!==this._state&&"drawing"!==this._state)throw new Error("Mode must be unregistered or stopped to start");this._state="started",this.setDoubleClickToZoom(!1)}setStopped(){if("started"!==this._state)throw new Error("Mode must be started to be stopped");this._state="stopped",this.setDoubleClickToZoom(!0)}register(t){if("unregistered"!==this._state)throw new Error("Can not register unless mode is unregistered");this._state="registered",this.store=t.store,this.store.registerOnChange(t.onChange),this.setDoubleClickToZoom=t.setDoubleClickToZoom,this.project=t.project,this.unproject=t.unproject,this.onSelect=t.onSelect,this.onDeselect=t.onDeselect,this.setCursor=t.setCursor,this.onStyleChange=t.onChange,this.registerBehaviors({mode:t.mode,store:this.store,project:this.project,unproject:this.unproject,pointerDistance:this.pointerDistance,coordinatePrecision:this.coordinatePrecision})}onDeselect(t){}onSelect(t){}styleFeature(t){}}class bt extends St{constructor(e){if(super(e),this.mode="circle",this.center=void 0,this.clickCount=0,this.currentCircleId=void 0,this.keyEvents=void 0,null===(null==e?void 0:e.keyEvents))this.keyEvents={cancel:null,finish:null};else{const i={cancel:"Escape",finish:"Enter"};this.keyEvents=e&&e.keyEvents?t({},i,e.keyEvents):i}}close(){this.center=void 0,this.currentCircleId=void 0,this.clickCount=0,"drawing"===this.state&&this.setStarted()}start(){this.setStarted(),this.setCursor("crosshair")}stop(){this.cleanUp(),this.setStopped(),this.setCursor("unset")}onClick(t){if(0===this.clickCount){this.center=[t.lng,t.lat];const e=Et({center:this.center,radiusKilometers:1e-5,coordinatePrecision:this.coordinatePrecision}),[i]=this.store.create([{geometry:e.geometry,properties:{mode:this.mode}}]);this.currentCircleId=i,this.clickCount++,this.setDrawing()}else this.close()}onMouseMove(t){if(1===this.clickCount&&this.center&&this.currentCircleId){const e=Pt(this.center,[t.lng,t.lat]),i=Et({center:this.center,radiusKilometers:e,coordinatePrecision:this.coordinatePrecision});this.store.updateGeometry([{id:this.currentCircleId,geometry:i.geometry}])}}onKeyDown(){}onKeyUp(t){t.key===this.keyEvents.cancel?this.cleanUp():t.key===this.keyEvents.finish&&this.close()}onDragStart(){}onDrag(){}onDragEnd(){}cleanUp(){try{this.currentCircleId&&this.store.delete([this.currentCircleId])}catch(t){}this.center=void 0,this.currentCircleId=void 0,this.clickCount=0,"drawing"===this.state&&this.setStarted()}styleFeature(e){const i=t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0});return"Feature"===e.type&&"Polygon"===e.geometry.type&&e.properties.mode===this.mode?(this.styles.fillColor&&(i.polygonFillColor=this.styles.fillColor),this.styles.outlineColor&&(i.polygonOutlineColor=this.styles.outlineColor),this.styles.outlineWidth&&(i.polygonOutlineWidth=this.styles.outlineWidth),this.styles.fillOpacity&&(i.polygonFillOpacity=this.styles.fillOpacity),i):i}}class It extends St{constructor(e){if(super(e),this.mode="freehand",this.startingClick=!1,this.currentId=void 0,this.closingPointId=void 0,this.minDistance=void 0,this.keyEvents=void 0,this.minDistance=e&&e.minDistance||20,null===(null==e?void 0:e.keyEvents))this.keyEvents={cancel:null,finish:null};else{const i={cancel:"Escape",finish:"Enter"};this.keyEvents=e&&e.keyEvents?t({},i,e.keyEvents):i}}close(){this.closingPointId&&this.store.delete([this.closingPointId]),this.startingClick=!1,this.currentId=void 0,this.closingPointId=void 0,"drawing"===this.state&&this.setStarted()}start(){this.setStarted(),this.setCursor("crosshair")}stop(){this.cleanUp(),this.setStopped(),this.setCursor("unset")}onMouseMove(t){if(!this.currentId||!1===this.startingClick)return;const e=this.store.getGeometryCopy(this.currentId),[s,o]=e.coordinates[0][e.coordinates[0].length-2],{x:n,y:r}=this.project(s,o),a=i({x:n,y:r},{x:t.containerX,y:t.containerY}),[l,h]=e.coordinates[0][0],{x:c,y:d}=this.project(l,h),u=i({x:c,y:d},{x:t.containerX,y:t.containerY});this.setCursor(u<this.pointerDistance?"pointer":"crosshair"),a<this.minDistance||(e.coordinates[0].pop(),this.store.updateGeometry([{id:this.currentId,geometry:{type:"Polygon",coordinates:[[...e.coordinates[0],[t.lng,t.lat],e.coordinates[0][0]]]}}]))}onClick(t){if(!1===this.startingClick){const[e,i]=this.store.create([{geometry:{type:"Polygon",coordinates:[[[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat]]]},properties:{mode:this.mode}},{geometry:{type:"Point",coordinates:[t.lng,t.lat]},properties:{mode:this.mode}}]);return this.currentId=e,this.closingPointId=i,this.startingClick=!0,void this.setDrawing()}this.close()}onKeyDown(){}onKeyUp(t){t.key===this.keyEvents.cancel?this.cleanUp():t.key===this.keyEvents.finish&&this.close()}onDragStart(){}onDrag(){}onDragEnd(){}cleanUp(){try{this.currentId&&this.store.delete([this.currentId]),this.closingPointId&&this.store.delete([this.closingPointId])}catch(t){}this.closingPointId=void 0,this.currentId=void 0,this.startingClick=!1,"drawing"===this.state&&this.setStarted()}styleFeature(e){const i=t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0});return"Feature"===e.type&&"Polygon"===e.geometry.type&&e.properties.mode===this.mode?(this.styles.fillColor&&(i.polygonFillColor=this.styles.fillColor),this.styles.outlineColor&&(i.polygonOutlineColor=this.styles.outlineColor),this.styles.outlineWidth&&(i.polygonOutlineWidth=this.styles.outlineWidth),this.styles.fillOpacity&&(i.polygonFillOpacity=this.styles.fillOpacity),i):"Feature"===e.type&&"Point"===e.geometry.type&&e.properties.mode===this.mode?(this.styles.closingPointColor&&(i.pointColor=this.styles.closingPointColor),this.styles.closingPointWidth&&(i.pointWidth=this.styles.closingPointWidth),i.pointOutlineColor=void 0!==this.styles.closingPointOutlineColor?this.styles.closingPointOutlineColor:"#ffffff",i.pointOutlineWidth=void 0!==this.styles.closingPointOutlineWidth?this.styles.closingPointOutlineWidth:2,i):i}}const kt=Math.PI/180,Dt=180/Math.PI;class Ot{constructor(t){this.coordinatePrecision=void 0,this.coords=void 0,this.length=void 0,this.coordinatePrecision=t,this.coords=[],this.length=0}moveTo(t){this.length++,this.coords.push([e(t[0],this.coordinatePrecision),e(t[1],this.coordinatePrecision)])}}class Lt{constructor({properties:t}){this.geometries=void 0,this.properties=void 0,this.properties=t||{},this.geometries=[]}toJSON(){if(1===this.geometries.length){const t=this.geometries[0].coords;if(t[0][0]&&!isNaN(t[0][0])&&t[0][1]&&!isNaN(t[0][1]))return{geometry:{type:"LineString",coordinates:t},type:"Feature",properties:this.properties}}return null}}class Ft{constructor(t,e,i){if(this.g=void 0,this.start=void 0,this.end=void 0,this.properties=void 0,!t||void 0===t[0]||void 0===t[1])throw new Error("GreatCircle constructor expects two args: start and end objects with x and y properties");if(!e||void 0===e[0]||void 0===e[1])throw new Error("GreatCircle constructor expects two args: start and end objects with x and y properties");this.start={lng:t[0],lat:t[1],x:kt*t[0],y:kt*t[1]},this.end={lng:e[0],lat:e[1],x:kt*e[0],y:kt*e[1]},this.properties=i||{};const s=this.start.x-this.end.x,o=Math.pow(Math.sin((this.start.y-this.end.y)/2),2)+Math.cos(this.start.y)*Math.cos(this.end.y)*Math.pow(Math.sin(s/2),2);if(this.g=2*Math.asin(Math.sqrt(o)),this.g===Math.PI)throw new Error(`it appears ${t} and ${e} are 'antipodal', e.g diametrically opposite, thus there is no single route but rather infinite`);if(isNaN(this.g))throw new Error(`could not calculate great circle between ${t} and ${e}`)}interpolate(t){const e=Math.sin((1-t)*this.g)/Math.sin(this.g),i=Math.sin(t*this.g)/Math.sin(this.g),s=e*Math.cos(this.start.y)*Math.cos(this.start.x)+i*Math.cos(this.end.y)*Math.cos(this.end.x),o=e*Math.cos(this.start.y)*Math.sin(this.start.x)+i*Math.cos(this.end.y)*Math.sin(this.end.x),n=e*Math.sin(this.start.y)+i*Math.sin(this.end.y),r=Dt*Math.atan2(n,Math.sqrt(Math.pow(s,2)+Math.pow(o,2)));return[Dt*Math.atan2(o,s),r]}arc(t,e){const i=[];if(!t||t<=2)i.push([this.start.lng,this.start.lat]),i.push([this.end.lng,this.end.lat]);else{const e=1/(t-1);for(let s=0;s<t;++s){const t=this.interpolate(e*s);i.push(t)}}let s=!1,o=0;const n=e&&e.offset?e.offset:10,r=180-n,a=-180+n,l=360-n;for(let t=1;t<i.length;++t){const e=i[t-1][0],n=i[t][0],h=Math.abs(n-e);h>l&&(n>r&&e<a||e>r&&n<a)?s=!0:h>o&&(o=h)}const h=[];if(s&&o<n){let t=[];h.push(t);for(let e=0;e<i.length;++e){const s=i[e][0];if(e>0&&Math.abs(s-i[e-1][0])>l){let o=i[e-1][0],n=i[e-1][1],l=i[e][0],c=i[e][1];if(o>-180&&o<a&&180===l&&e+1<i.length&&i[e-1][0]>-180&&i[e-1][0]<a){t.push([-180,i[e][1]]),e++,t.push([i[e][0],i[e][1]]);continue}if(o>r&&o<180&&-180===l&&e+1<i.length&&i[e-1][0]>r&&i[e-1][0]<180){t.push([180,i[e][1]]),e++,t.push([i[e][0],i[e][1]]);continue}if(o<a&&l>r){const t=o;o=l,l=t;const e=n;n=c,c=e}if(o>r&&l<a&&(l+=360),o<=180&&l>=180&&o<l){const s=(180-o)/(l-o),a=s*c+(1-s)*n;t.push([i[e-1][0]>r?180:-180,a]),t=[],t.push([i[e-1][0]>r?-180:180,a]),h.push(t)}else t=[],h.push(t);t.push([s,i[e][1]])}else t.push([i[e][0],i[e][1]])}}else{const t=[];h.push(t);for(let e=0;e<i.length;++e)t.push([i[e][0],i[e][1]])}const c=new Lt({properties:this.properties});for(let t=0;t<h.length;++t){const i=new Ot(e.coordinatePrecision);c.geometries.push(i);const s=h[t];for(let t=0;t<s.length;++t)i.moveTo(s[t])}return c}}class Wt{constructor({store:t,mode:e,project:i,unproject:s,pointerDistance:o,coordinatePrecision:n}){this.store=void 0,this.mode=void 0,this.project=void 0,this.unproject=void 0,this.pointerDistance=void 0,this.coordinatePrecision=void 0,this.store=t,this.mode=e,this.project=i,this.unproject=s,this.pointerDistance=o,this.coordinatePrecision=n}}class Bt extends Wt{constructor(t,e,i){super(t),this.config=void 0,this.pixelDistance=void 0,this.clickBoundingBox=void 0,this.getSnappableCoordinate=(t,e)=>this.getSnappableEnds(t,t=>Boolean(!t.properties||t.properties.mode!==this.mode||!e||t.id!==e)),this.config=t,this.pixelDistance=e,this.clickBoundingBox=i}getSnappableEnds(t,e){const i=this.clickBoundingBox.create(t),s=this.store.search(i,e),o={coord:void 0,minDist:Infinity};return s.forEach(e=>{let i;if("LineString"!==e.geometry.type)return;i=e.geometry.coordinates;const s=i[0],n=this.pixelDistance.measure(t,s);n<o.minDist&&n<this.pointerDistance&&(o.coord=s);const r=i[i.length-1],a=this.pixelDistance.measure(t,r);a<o.minDist&&a<this.pointerDistance&&(o.coord=r)}),o.coord}}class Gt extends Wt{constructor(t){super(t)}measure(t,e){const{x:s,y:o}=this.project(e[0],e[1]);return i({x:s,y:o},{x:t.containerX,y:t.containerY})}}class At extends Wt{constructor(t){super(t)}create(t){const{containerX:e,containerY:i}=t,s=this.pointerDistance/2;return{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[this.unproject(e-s,i-s),this.unproject(e+s,i-s),this.unproject(e+s,i+s),this.unproject(e-s,i+s),this.unproject(e-s,i-s)].map(t=>[t.lng,t.lat])]}}}}class jt extends St{constructor(e){if(super(e),this.mode="greatcircle",this.currentCoordinate=0,this.currentId=void 0,this.closingPointId=void 0,this.keyEvents=void 0,this.snappingEnabled=void 0,this.snapping=void 0,this.snappingEnabled=!(!e||void 0===e.snapping)&&e.snapping,null===(null==e?void 0:e.keyEvents))this.keyEvents={cancel:null,finish:null};else{const i={cancel:"Escape",finish:"Enter"};this.keyEvents=e&&e.keyEvents?t({},i,e.keyEvents):i}}close(){this.currentId&&(this.closingPointId&&this.store.delete([this.closingPointId]),this.currentCoordinate=0,this.currentId=void 0,this.closingPointId=void 0,"drawing"===this.state&&this.setStarted())}registerBehaviors(t){this.snapping=new Bt(t,new Gt(t),new At(t))}start(){this.setStarted(),this.setCursor("crosshair")}stop(){this.cleanUp(),this.setStopped(),this.setCursor("unset")}onMouseMove(t){if(this.setCursor("crosshair"),(this.currentId||0!==this.currentCoordinate)&&this.currentId&&1===this.currentCoordinate&&this.closingPointId){const e=this.currentId&&this.snappingEnabled&&this.snapping.getSnappableCoordinate(t,this.currentId)||[t.lng,t.lat];this.store.updateGeometry([{id:this.closingPointId,geometry:{type:"Point",coordinates:e}}]);const i=this.store.getGeometryCopy(this.currentId);i.coordinates.pop();const s=function({start:t,end:e,options:i}){const s=i||{};if("object"!=typeof s)throw new Error("options argument is invalid, must be of type object");const{properties:o={},numberOfPoints:n=100,offset:r=10,coordinatePrecision:a=9}=s;return new Ft(t,e,o).arc(n,{offset:r,coordinatePrecision:a}).toJSON()}({start:i.coordinates[0],end:e,options:{coordinatePrecision:this.coordinatePrecision}});s&&this.store.updateGeometry([{id:this.currentId,geometry:s.geometry}])}}onClick(t){if(0===this.currentCoordinate){const e=this.snappingEnabled&&this.snapping.getSnappableCoordinate(t)||[t.lng,t.lat],[i]=this.store.create([{geometry:{type:"LineString",coordinates:[e,e]},properties:{mode:this.mode}}]);this.currentId=i;const[s]=this.store.create([{geometry:{type:"Point",coordinates:e},properties:{mode:this.mode}}]);this.closingPointId=s,this.currentCoordinate++,this.setDrawing()}else 1===this.currentCoordinate&&this.currentId&&(this.setCursor("pointer"),this.close())}onKeyDown(){}onKeyUp(t){t.key===this.keyEvents.cancel&&this.cleanUp(),t.key===this.keyEvents.finish&&this.close()}onDragStart(){}onDrag(){}onDragEnd(){}cleanUp(){try{this.currentId&&this.store.delete([this.currentId]),this.closingPointId&&this.store.delete([this.closingPointId])}catch(t){}this.closingPointId=void 0,this.currentId=void 0,this.currentCoordinate=0,"drawing"===this.state&&this.setStarted()}styleFeature(e){const i=t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0});return"Feature"===e.type&&"LineString"===e.geometry.type&&e.properties.mode===this.mode?(this.styles.lineStringColor&&(i.lineStringColor=this.styles.lineStringColor),this.styles.lineStringWidth&&(i.lineStringWidth=this.styles.lineStringWidth),i):"Feature"===e.type&&"Point"===e.geometry.type&&e.properties.mode===this.mode?(this.styles.closingPointColor&&(i.pointColor=this.styles.closingPointColor),this.styles.closingPointWidth&&(i.pointWidth=this.styles.closingPointWidth),i.pointOutlineColor=void 0!==this.styles.closingPointOutlineColor?this.styles.closingPointOutlineColor:"#ffffff",i.pointOutlineWidth=void 0!==this.styles.closingPointOutlineWidth?this.styles.closingPointOutlineWidth:2,i):i}}function Rt(t){let e;if("Polygon"===t.geometry.type)e=t.geometry.coordinates;else{if("LineString"!==t.geometry.type)throw new Error("Self intersects only accepts Polygons and LineStrings");e=[t.geometry.coordinates]}const i=[];for(let t=0;t<e.length;t++)for(let i=0;i<e[t].length-1;i++)for(let s=0;s<e.length;s++)for(let n=0;n<e[s].length-1;n++)o(t,i,s,n);return i.length>0;function s(t){return t<0||t>1}function o(t,o,n,r){const a=e[t][o],l=e[t][o+1],h=e[n][r],c=e[n][r+1],d=function(t,e,i,s){if(Tt(t,i)||Tt(t,s)||Tt(e,i)||Tt(s,i))return null;const o=t[0],n=t[1],r=e[0],a=e[1],l=i[0],h=i[1],c=s[0],d=s[1],u=(o-r)*(h-d)-(n-a)*(l-c);return 0===u?null:[((o*a-n*r)*(l-c)-(o-r)*(l*d-h*c))/u,((o*a-n*r)*(h-d)-(n-a)*(l*d-h*c))/u]}(a,l,h,c);if(null===d)return;let u,g;u=l[0]!==a[0]?(d[0]-a[0])/(l[0]-a[0]):(d[1]-a[1])/(l[1]-a[1]),g=c[0]!==h[0]?(d[0]-h[0])/(c[0]-h[0]):(d[1]-h[1])/(c[1]-h[1]),s(u)||s(g)||(d.toString(),i.push(d))}}function Tt(t,e){return t[0]===e[0]&&t[1]===e[1]}class Ut extends Wt{constructor(t,e,i){super(t),this.config=void 0,this.pixelDistance=void 0,this.clickBoundingBox=void 0,this.getSnappableCoordinate=(t,e)=>this.getSnappable(t,t=>Boolean(t.properties&&t.properties.mode===this.mode&&t.id!==e)),this.config=t,this.pixelDistance=e,this.clickBoundingBox=i}getSnappable(t,e){const i=this.clickBoundingBox.create(t),s=this.store.search(i,e),o={coord:void 0,minDist:Infinity};return s.forEach(e=>{let i;if("Polygon"===e.geometry.type)i=e.geometry.coordinates[0];else{if("LineString"!==e.geometry.type)return;i=e.geometry.coordinates}i.forEach(e=>{const i=this.pixelDistance.measure(t,e);i<o.minDist&&i<this.pointerDistance&&(o.coord=e)})}),o.coord}}class Nt extends St{constructor(e){if(super(e),this.mode="linestring",this.currentCoordinate=0,this.currentId=void 0,this.closingPointId=void 0,this.allowSelfIntersections=void 0,this.keyEvents=void 0,this.snappingEnabled=void 0,this.mouseMove=!1,this.snapping=void 0,this.snappingEnabled=!(!e||void 0===e.snapping)&&e.snapping,this.allowSelfIntersections=!e||void 0===e.allowSelfIntersections||e.allowSelfIntersections,null===(null==e?void 0:e.keyEvents))this.keyEvents={cancel:null,finish:null};else{const i={cancel:"Escape",finish:"Enter"};this.keyEvents=e&&e.keyEvents?t({},i,e.keyEvents):i}}close(){if(!this.currentId)return;const t=this.store.getGeometryCopy(this.currentId);t.coordinates.pop(),this.store.updateGeometry([{id:this.currentId,geometry:{type:"LineString",coordinates:[...t.coordinates]}}]),this.closingPointId&&this.store.delete([this.closingPointId]),this.currentCoordinate=0,this.currentId=void 0,this.closingPointId=void 0,"drawing"===this.state&&this.setStarted()}registerBehaviors(t){this.snapping=new Ut(t,new Gt(t),new At(t))}start(){this.setStarted(),this.setCursor("crosshair")}stop(){this.cleanUp(),this.setStopped(),this.setCursor("unset")}onMouseMove(t){if(this.mouseMove=!0,this.setCursor("crosshair"),!this.currentId||0===this.currentCoordinate)return;const e=this.store.getGeometryCopy(this.currentId);e.coordinates.pop();const s=this.snappingEnabled&&this.snapping.getSnappableCoordinate(t,this.currentId)||[t.lng,t.lat];if(this.closingPointId){const[s,o]=e.coordinates[e.coordinates.length-1],{x:n,y:r}=this.project(s,o);i({x:n,y:r},{x:t.containerX,y:t.containerY})<this.pointerDistance&&this.setCursor("pointer")}this.store.updateGeometry([{id:this.currentId,geometry:{type:"LineString",coordinates:[...e.coordinates,s]}}])}onClick(t){this.currentCoordinate>0&&!this.mouseMove&&this.onMouseMove(t),this.mouseMove=!1;const e=this.currentId&&this.snappingEnabled&&this.snapping.getSnappableCoordinate(t,this.currentId)||[t.lng,t.lat];if(0===this.currentCoordinate){const[t]=this.store.create([{geometry:{type:"LineString",coordinates:[e,e]},properties:{mode:this.mode}}]);this.currentId=t,this.currentCoordinate++,this.setDrawing()}else if(1===this.currentCoordinate&&this.currentId){const t=this.store.getGeometryCopy(this.currentId),[i]=this.store.create([{geometry:{type:"Point",coordinates:[...e]},properties:{mode:this.mode}}]);this.closingPointId=i,this.setCursor("pointer"),this.store.updateGeometry([{id:this.currentId,geometry:{type:"LineString",coordinates:[t.coordinates[0],e,e]}}]),this.currentCoordinate++}else if(this.currentId){const s=this.store.getGeometryCopy(this.currentId),[o,n]=s.coordinates[s.coordinates.length-2],{x:r,y:a}=this.project(o,n);if(i({x:r,y:a},{x:t.containerX,y:t.containerY})<this.pointerDistance)this.close();else{const t={type:"LineString",coordinates:[...s.coordinates,e]};if(!this.allowSelfIntersections&&Rt({type:"Feature",geometry:t,properties:{}}))return;this.closingPointId&&(this.setCursor("pointer"),this.store.updateGeometry([{id:this.currentId,geometry:t},{id:this.closingPointId,geometry:{type:"Point",coordinates:s.coordinates[s.coordinates.length-1]}}]),this.currentCoordinate++)}}}onKeyDown(){}onKeyUp(t){t.key===this.keyEvents.cancel&&this.cleanUp(),t.key===this.keyEvents.finish&&this.close()}onDragStart(){}onDrag(){}onDragEnd(){}cleanUp(){try{this.currentId&&this.store.delete([this.currentId]),this.closingPointId&&this.store.delete([this.closingPointId])}catch(t){}this.closingPointId=void 0,this.currentId=void 0,this.currentCoordinate=0,"drawing"===this.state&&this.setStarted()}styleFeature(e){const i=t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0});return"Feature"===e.type&&"LineString"===e.geometry.type&&e.properties.mode===this.mode?(this.styles.lineStringColor&&(i.lineStringColor=this.styles.lineStringColor),this.styles.lineStringWidth&&(i.lineStringWidth=this.styles.lineStringWidth),i):"Feature"===e.type&&"Point"===e.geometry.type&&e.properties.mode===this.mode?(this.styles.closingPointColor&&(i.pointColor=this.styles.closingPointColor),this.styles.closingPointWidth&&(i.pointWidth=this.styles.closingPointWidth),i.pointOutlineColor=void 0!==this.styles.closingPointOutlineColor?this.styles.closingPointOutlineColor:"#ffffff",i.pointOutlineWidth=void 0!==this.styles.closingPointOutlineWidth?this.styles.closingPointOutlineWidth:2,i):i}}class Xt extends St{constructor(t){super(t),this.mode="point"}start(){this.setStarted(),this.setCursor("crosshair")}stop(){this.cleanUp(),this.setStopped(),this.setCursor("unset")}onClick(t){if(!this.store)throw new Error("Mode must be registered first");this.store.create([{geometry:{type:"Point",coordinates:[t.lng,t.lat]},properties:{mode:this.mode}}])}onMouseMove(){}onKeyDown(){}onKeyUp(){}cleanUp(){}onDragStart(){}onDrag(){}onDragEnd(){}styleFeature(e){const i=t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0});return"Feature"===e.type&&"Point"===e.geometry.type&&e.properties.mode===this.mode?(this.styles.pointColor&&(i.pointColor=this.styles.pointColor),this.styles.pointOutlineColor&&(i.pointOutlineColor=this.styles.pointOutlineColor),this.styles.pointOutlineWidth&&(i.pointOutlineWidth=this.styles.pointOutlineWidth),this.styles.pointWidth&&(i.pointWidth=this.styles.pointWidth),i):i}}function Yt(t,e){return t[0]===e[0]&&t[1]===e[1]}const zt="midPoint",Jt="closingPoint";class $t extends Wt{constructor(t,e){super(t),this.config=void 0,this.pixelDistance=void 0,this._startEndPoints=[],this.config=t,this.pixelDistance=e}get ids(){return this._startEndPoints.concat()}set ids(t){}create(t,e){if(this.ids.length)throw new Error("Opening and closing points already creating");if(t.length<=3)throw new Error("Requires at least 4 cooridnates");this._startEndPoints=this.store.create([{geometry:{type:"Point",coordinates:t[0]},properties:{mode:e,[Jt]:!0}},{geometry:{type:"Point",coordinates:t[t.length-2]},properties:{mode:e,[Jt]:!0}}])}delete(){this.ids.length&&(this.store.delete(this.ids),this._startEndPoints=[])}update(t){if(2!==this.ids.length)throw new Error("No closing points to update");this.store.updateGeometry([{id:this.ids[0],geometry:{type:"Point",coordinates:t[0]}},{id:this.ids[1],geometry:{type:"Point",coordinates:t[t.length-3]}}])}isClosingPoint(t){const e=this.store.getGeometryCopy(this.ids[0]),i=this.store.getGeometryCopy(this.ids[1]),s=this.pixelDistance.measure(t,e.coordinates),o=this.pixelDistance.measure(t,i.coordinates);return{isClosing:s<this.pointerDistance,isPreviousClosing:o<this.pointerDistance}}}class Kt extends St{constructor(e){if(super(e),this.mode="polygon",this.currentCoordinate=0,this.currentId=void 0,this.allowSelfIntersections=void 0,this.keyEvents=void 0,this.snappingEnabled=void 0,this.snapping=void 0,this.pixelDistance=void 0,this.closingPoints=void 0,this.mouseMove=!1,this.snappingEnabled=!(!e||void 0===e.snapping)&&e.snapping,this.allowSelfIntersections=!e||void 0===e.allowSelfIntersections||e.allowSelfIntersections,null===(null==e?void 0:e.keyEvents))this.keyEvents={cancel:null,finish:null};else{const i={cancel:"Escape",finish:"Enter"};this.keyEvents=e&&e.keyEvents?t({},i,e.keyEvents):i}}close(){if(!this.currentId)return;const t=this.store.getGeometryCopy(this.currentId).coordinates[0];t.length<5||(this.store.updateGeometry([{id:this.currentId,geometry:{type:"Polygon",coordinates:[[...t.slice(0,-2),t[0]]]}}]),this.currentCoordinate=0,this.currentId=void 0,this.closingPoints.delete(),"drawing"===this.state&&this.setStarted())}registerBehaviors(t){this.pixelDistance=new Gt(t),this.snapping=new Ut(t,this.pixelDistance,new At(t)),this.closingPoints=new $t(t,this.pixelDistance)}start(){this.setStarted(),this.setCursor("crosshair")}stop(){this.cleanUp(),this.setStopped(),this.setCursor("unset")}onMouseMove(t){if(this.mouseMove=!0,this.setCursor("crosshair"),!this.currentId||0===this.currentCoordinate)return;const e=this.snappingEnabled?this.snapping.getSnappableCoordinate(t,this.currentId):void 0,i=this.store.getGeometryCopy(this.currentId).coordinates[0];let s;if(e&&(t.lng=e[0],t.lat=e[1]),1===this.currentCoordinate){const e=1/Math.pow(10,this.coordinatePrecision-1),o=Math.max(1e-6,e);s=[i[0],[t.lng,t.lat],[t.lng,t.lat-o],i[0]]}else if(2===this.currentCoordinate)s=[i[0],i[1],[t.lng,t.lat],i[0]];else{const{isClosing:e,isPreviousClosing:o}=this.closingPoints.isClosingPoint(t);o||e?(this.setCursor("pointer"),s=[...i.slice(0,-2),i[0],i[0]]):s=[...i.slice(0,-2),[t.lng,t.lat],i[0]]}this.store.updateGeometry([{id:this.currentId,geometry:{type:"Polygon",coordinates:[s]}}]),this.closingPoints.ids.length&&this.closingPoints.update(s)}onClick(t){this.currentCoordinate>0&&!this.mouseMove&&this.onMouseMove(t),this.mouseMove=!1;const e=this.currentId&&this.snappingEnabled?this.snapping.getSnappableCoordinate(t,this.currentId):void 0;if(0===this.currentCoordinate){e&&(t.lng=e[0],t.lat=e[1]);const[i]=this.store.create([{geometry:{type:"Polygon",coordinates:[[[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat]]]},properties:{mode:this.mode}}]);this.currentId=i,this.currentCoordinate++,this.setDrawing()}else if(1===this.currentCoordinate&&this.currentId){e&&(t.lng=e[0],t.lat=e[1]);const i=this.store.getGeometryCopy(this.currentId);if(Yt([t.lng,t.lat],i.coordinates[0][0]))return;this.store.updateGeometry([{id:this.currentId,geometry:{type:"Polygon",coordinates:[[i.coordinates[0][0],[t.lng,t.lat],[t.lng,t.lat],i.coordinates[0][0]]]}}]),this.currentCoordinate++}else if(2===this.currentCoordinate&&this.currentId){e&&(t.lng=e[0],t.lat=e[1]);const i=this.store.getGeometryCopy(this.currentId).coordinates[0];if(Yt([t.lng,t.lat],i[1]))return;2===this.currentCoordinate&&this.closingPoints.create(i,"polygon"),this.store.updateGeometry([{id:this.currentId,geometry:{type:"Polygon",coordinates:[[i[0],i[1],[t.lng,t.lat],[t.lng,t.lat],i[0]]]}}]),this.currentCoordinate++}else if(this.currentId){const i=this.store.getGeometryCopy(this.currentId).coordinates[0],{isClosing:s,isPreviousClosing:o}=this.closingPoints.isClosingPoint(t);if(o||s)this.close();else{if(e&&(t.lng=e[0],t.lat=e[1]),Yt([t.lng,t.lat],i[this.currentCoordinate-1]))return;const s=function(t=[[[0,0],[0,1],[1,1],[1,0],[0,0]]]){return{type:"Feature",geometry:{type:"Polygon",coordinates:t},properties:{}}}([[...i.slice(0,-1),[t.lng,t.lat],i[0]]]);if(this.currentCoordinate>2&&!this.allowSelfIntersections&&Rt(s))return;this.store.updateGeometry([{id:this.currentId,geometry:s.geometry}]),this.currentCoordinate++,this.closingPoints.ids.length&&this.closingPoints.update(s.geometry.coordinates[0])}}}onKeyUp(t){t.key===this.keyEvents.cancel?this.cleanUp():t.key===this.keyEvents.finish&&this.close()}onKeyDown(){}onDragStart(){this.setCursor("unset")}onDrag(){}onDragEnd(){this.setCursor("crosshair")}cleanUp(){try{this.currentId&&this.store.delete([this.currentId]),this.closingPoints.ids.length&&this.closingPoints.delete()}catch(t){}this.currentId=void 0,this.currentCoordinate=0,"drawing"===this.state&&this.setStarted()}styleFeature(e){const i=t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0});if(e.properties.mode===this.mode){if("Polygon"===e.geometry.type)return i.polygonFillColor=this.styles.fillColor||i.polygonFillColor,i.polygonOutlineColor=this.styles.outlineColor||i.polygonOutlineColor,i.polygonOutlineWidth=this.styles.outlineWidth||i.polygonOutlineWidth,i.polygonFillColor=this.styles.fillColor||i.polygonFillColor,i.polygonFillOpacity=this.styles.fillOpacity||i.polygonFillOpacity,i.zIndex=10,i;if("Point"===e.geometry.type)return i.pointWidth=this.styles.closingPointWidth||i.pointWidth,i.pointColor=this.styles.closingPointColor||i.pointColor,i.pointOutlineColor=this.styles.closingPointOutlineColor||"#ffffff",i.pointOutlineWidth=this.styles.closingPointOutlineWidth||2,i.zIndex=30,i}return i}}class Vt extends St{constructor(e){if(super(e),this.mode="rectangle",this.center=void 0,this.clickCount=0,this.currentRectangleId=void 0,this.keyEvents=void 0,null===(null==e?void 0:e.keyEvents))this.keyEvents={cancel:null,finish:null};else{const i={cancel:"Escape",finish:"Enter"};this.keyEvents=e&&e.keyEvents?t({},i,e.keyEvents):i}}close(){this.center=void 0,this.currentRectangleId=void 0,this.clickCount=0,"drawing"===this.state&&this.setStarted()}start(){this.setStarted(),this.setCursor("crosshair")}stop(){this.cleanUp(),this.setStopped(),this.setCursor("unset")}onClick(t){if(0===this.clickCount){this.center=[t.lng,t.lat];const[e]=this.store.create([{geometry:{type:"Polygon",coordinates:[[[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat]]]},properties:{mode:this.mode}}]);this.currentRectangleId=e,this.clickCount++,this.setDrawing()}else this.close()}onMouseMove(t){if(1===this.clickCount&&this.center&&this.currentRectangleId){const e=this.store.getGeometryCopy(this.currentRectangleId).coordinates[0][0];this.store.updateGeometry([{id:this.currentRectangleId,geometry:{type:"Polygon",coordinates:[[e,[t.lng,e[1]],[t.lng,t.lat],[e[0],t.lat],e]]}}])}}onKeyDown(){}onKeyUp(t){t.key===this.keyEvents.cancel?this.cleanUp():t.key===this.keyEvents.finish&&this.close()}onDragStart(){}onDrag(){}onDragEnd(){}cleanUp(){try{this.currentRectangleId&&this.store.delete([this.currentRectangleId])}catch(t){}this.center=void 0,this.currentRectangleId=void 0,this.clickCount=0,"drawing"===this.state&&this.setStarted()}styleFeature(e){const i=t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0});return"Feature"===e.type&&"Polygon"===e.geometry.type&&e.properties.mode===this.mode?(this.styles.fillColor&&(i.polygonFillColor=this.styles.fillColor),this.styles.outlineColor&&(i.polygonOutlineColor=this.styles.outlineColor),this.styles.outlineWidth&&(i.polygonOutlineWidth=this.styles.outlineWidth),this.styles.fillOpacity&&(i.polygonFillOpacity=this.styles.fillOpacity),i):i}}class Zt extends St{constructor(t){super({styles:t.styles}),this.mode="render"}registerBehaviors(t){this.mode=t.mode}start(){this.setStarted()}stop(){this.setStopped()}onKeyUp(){}onKeyDown(){}onClick(){}onDragStart(){}onDrag(){}onDragEnd(){}onMouseMove(){}styleFeature(){return t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0},this.styles)}}function qt(t,i,s,o,n){const r=o(t[0],t[1]),a=o(i[0],i[1]),{lng:l,lat:h}=n((r.x+a.x)/2,(r.y+a.y)/2);return[e(l,s),e(h,s)]}function Ht(t,e,i,s){const o=[];for(let n=0;n<t.length-1;n++){const r=qt(t[n],t[n+1],e,i,s);o.push(r)}return o}class Qt extends Wt{constructor(t,e){super(t),this.config=void 0,this.selectionPointBehavior=void 0,this._midPoints=[],this.config=t,this.selectionPointBehavior=e}get ids(){return this._midPoints.concat()}set ids(t){}insert(t,e){const i=this.store.getGeometryCopy(t),{midPointFeatureId:s,midPointSegment:o}=this.store.getPropertiesCopy(t),n=this.store.getGeometryCopy(s),r="Polygon"===n.type?n.coordinates[0]:n.coordinates;r.splice(o+1,0,i.coordinates),n.coordinates="Polygon"===n.type?[r]:r,this.store.updateGeometry([{id:s,geometry:n}]),this.store.delete([...this._midPoints,...this.selectionPointBehavior.ids]),this.create(r,s,e),this.selectionPointBehavior.create(r,n.type,s)}create(t,e,i){if(!this.store.has(e))throw new Error("Store does not have feature with this id");this._midPoints=this.store.create(function(t,e,i,s,o){return Ht(t,i,s,o).map((t,i)=>({geometry:{type:"Point",coordinates:t},properties:e(i)}))}(t,t=>({mode:this.mode,[zt]:!0,midPointSegment:t,midPointFeatureId:e}),i,this.config.project,this.config.unproject))}delete(){this._midPoints.length&&(this.store.delete(this._midPoints),this._midPoints=[])}getUpdated(t){if(0!==this._midPoints.length)return Ht(t,this.coordinatePrecision,this.config.project,this.config.unproject).map((t,e)=>({id:this._midPoints[e],geometry:{type:"Point",coordinates:t}}))}}class te extends Wt{constructor(t){super(t),this._selectionPoints=[]}get ids(){return this._selectionPoints.concat()}set ids(t){}create(t,e,i){this._selectionPoints=this.store.create(function(t,e,i){const s=[],o="Polygon"===e?t.length-1:t.length;for(let e=0;e<o;e++)s.push({geometry:{type:"Point",coordinates:t[e]},properties:i(e)});return s}(t,e,t=>({mode:this.mode,selectionPoint:!0,selectionPointFeatureId:i,index:t})))}delete(){this.ids.length&&(this.store.delete(this.ids),this._selectionPoints=[])}getUpdated(t){if(0!==this._selectionPoints.length)return this._selectionPoints.map((e,i)=>({id:e,geometry:{type:"Point",coordinates:t[i]}}))}getOneUpdated(t,e){if(void 0!==this._selectionPoints[t])return{id:this._selectionPoints[t],geometry:{type:"Point",coordinates:e}}}}function ee(t,e){let i=!1;for(let r=0,a=e.length;r<a;r++){const a=e[r];for(let e=0,r=a.length,l=r-1;e<r;l=e++)(o=a[e])[1]>(s=t)[1]!=(n=a[l])[1]>s[1]&&s[0]<(n[0]-o[0])*(s[1]-o[1])/(n[1]-o[1])+o[0]&&(i=!i)}var s,o,n;return i}const ie=(t,e,i)=>{const s=t=>t*t,o=(t,e)=>s(t.x-e.x)+s(t.y-e.y);return Math.sqrt(((t,e,i)=>{const s=o(e,i);if(0===s)return o(t,e);let n=((t.x-e.x)*(i.x-e.x)+(t.y-e.y)*(i.y-e.y))/s;return n=Math.max(0,Math.min(1,n)),o(t,{x:e.x+n*(i.x-e.x),y:e.y+n*(i.y-e.y)})})(t,e,i))};class se extends Wt{constructor(t,e,i){super(t),this.config=void 0,this.createClickBoundingBox=void 0,this.pixelDistance=void 0,this.config=t,this.createClickBoundingBox=e,this.pixelDistance=i}find(t,e){let i,s,o=Infinity,n=Infinity;const r=this.createClickBoundingBox.create(t),a=this.store.search(r);for(let r=0;r<a.length;r++){const l=a[r],h=l.geometry;if("Point"===h.type){if(l.properties.selectionPoint||!e&&l.properties[zt])continue;const r=this.pixelDistance.measure(t,h.coordinates);l.properties[zt]&&r<this.pointerDistance&&r<n?(n=r,s=l):!l.properties[zt]&&r<this.pointerDistance&&r<o&&(o=r,i=l)}else if("LineString"===h.type)for(let e=0;e<h.coordinates.length-1;e++){const s=h.coordinates[e],n=h.coordinates[e+1],r=ie({x:t.containerX,y:t.containerY},this.project(s[0],s[1]),this.project(n[0],n[1]));r<this.pointerDistance&&r<o&&(o=r,i=l)}else"Polygon"===h.type&&ee([t.lng,t.lat],h.coordinates)&&(o=0,i=l)}return{clickedFeature:i,clickedMidPoint:s}}}class oe extends Wt{constructor(t,e,i,s){super(t),this.config=void 0,this.featuresAtMouseEvent=void 0,this.selectionPoints=void 0,this.midPoints=void 0,this.dragPosition=void 0,this.config=t,this.featuresAtMouseEvent=e,this.selectionPoints=i,this.midPoints=s}get position(){return this.dragPosition?this.dragPosition.concat():void 0}set position(t){if(void 0!==t){if(!Array.isArray(t)||2!==t.length||"number"!=typeof t[0]||"number"!=typeof t[1])throw new Error("Position must be [number, number] array");this.dragPosition=t.concat()}else this.dragPosition=void 0}drag(t,e){const{clickedFeature:i}=this.featuresAtMouseEvent.find(t,!0);if(!i||i.id!==e)return;const s=this.store.getGeometryCopy(e),o=[t.lng,t.lat];if("Polygon"===s.type||"LineString"===s.type){let t,i;if("Polygon"===s.type?(t=s.coordinates[0],i=t.length-1):"LineString"===s.type&&(t=s.coordinates,i=t.length),void 0===i||!t||!this.dragPosition)return!1;for(let e=0;e<i;e++){const i=t[e],s=[this.dragPosition[0]-o[0],this.dragPosition[1]-o[1]];t[e]=[i[0]-s[0],i[1]-s[1]]}"Polygon"===s.type&&(t[t.length-1]=[t[0][0],t[0][1]]);const n=this.selectionPoints.getUpdated(t)||[],r=this.midPoints.getUpdated(t)||[];this.store.updateGeometry([{id:e,geometry:s},...n,...r])}else"Point"===s.type&&this.store.updateGeometry([{id:e,geometry:{type:"Point",coordinates:o}}])}}class ne extends Wt{constructor(t,e,i,s){super(t),this.config=void 0,this.pixelDistance=void 0,this.selectionPoints=void 0,this.midPoints=void 0,this.config=t,this.pixelDistance=e,this.selectionPoints=i,this.midPoints=s}drag(t,e){const i=this.store.getGeometryCopy(e);let s;if("LineString"===i.type)s=i.coordinates;else{if("Polygon"!==i.type)return!1;s=i.coordinates[0]}const o={dist:Infinity,index:-1,isFirstOrLastPolygonCoord:!1};for(let e=0;e<s.length;e++){const n=this.pixelDistance.measure(t,s[e]);if(n<this.pointerDistance&&n<o.dist){const t="Polygon"===i.type&&(e===s.length-1||0===e);o.dist=n,o.index=t?0:e,o.isFirstOrLastPolygonCoord=t}}if(-1===o.index)return!1;const n=[t.lng,t.lat];if(o.isFirstOrLastPolygonCoord){const t=s.length-1;s[0]=n,s[t]=n}else s[o.index]=n;const r=this.selectionPoints.getOneUpdated(o.index,n),a=r?[r]:[],l=this.midPoints.getUpdated(s)||[];return this.store.updateGeometry([{id:e,geometry:i},...a,...l]),!0}}function re(t){let e=0,i=0,s=0;return("Polygon"===t.geometry.type?t.geometry.coordinates[0].slice(0,-1):t.geometry.coordinates).forEach(t=>{e+=t[0],i+=t[1],s++},!0),[e/s,i/s]}function ae(t,e){const i=t,s=e,o=xt(i[1]),n=xt(s[1]);let r=xt(s[0]-i[0]);r>Math.PI&&(r-=2*Math.PI),r<-Math.PI&&(r+=2*Math.PI);const a=Math.log(Math.tan(n/2+Math.PI/4)/Math.tan(o/2+Math.PI/4)),l=(wt(Math.atan2(r,a))+360)%360;return l>180?-(360-l):l}function le(t,e,i){const s=e/6371008.8,o=t[0]*Math.PI/180,n=xt(t[1]),r=xt(i),a=s*Math.cos(r);let l=n+a;Math.abs(l)>Math.PI/2&&(l=l>0?Math.PI-l:-Math.PI-l);const h=Math.log(Math.tan(l/2+Math.PI/4)/Math.tan(n/2+Math.PI/4)),c=Math.abs(h)>1e-11?a/h:Math.cos(n),d=[(180*(o+s*Math.sin(r)/c)/Math.PI+540)%360-180,180*l/Math.PI];return d[0]+=d[0]-t[0]>180?-360:t[0]-d[0]>180?360:0,d}function he(t,e){t[0]+=t[0]-e[0]>180?-360:e[0]-t[0]>180?360:0;const i=e[1]*Math.PI/180,s=t[1]*Math.PI/180,o=s-i;let n=Math.abs(t[0]-e[0])*Math.PI/180;n>Math.PI&&(n-=2*Math.PI);const r=Math.log(Math.tan(s/2+Math.PI/4)/Math.tan(i/2+Math.PI/4)),a=Math.abs(r)>1e-11?o/r:Math.cos(i);return 6371008.8*Math.sqrt(o*o+a*a*n*n)}class ce extends Wt{constructor(t,e,i){super(t),this.config=void 0,this.selectionPoints=void 0,this.midPoints=void 0,this.lastBearing=void 0,this.config=t,this.selectionPoints=e,this.midPoints=i}reset(){this.lastBearing=void 0}rotate(t,i){const s=this.store.getGeometryCopy(i);if("Polygon"!==s.type&&"LineString"!==s.type)return;const o=[t.lng,t.lat],n=ae(re({type:"Feature",geometry:s,properties:{}}),o);if(!this.lastBearing)return void(this.lastBearing=n+180);let r;if(function(t,e){if(0===e)return t;const i=re(t);("Polygon"===t.geometry.type?t.geometry.coordinates[0]:t.geometry.coordinates).forEach(t=>{const s=ae(i,t)+e,o=he(i,t),n=le(i,o,s);t[0]=n[0],t[1]=n[1]})}({type:"Feature",geometry:s,properties:{}},-(this.lastBearing-(n+180))),"Polygon"===s.type)r=s.coordinates[0];else{if("LineString"!==s.type)return;r=s.coordinates}r.forEach(t=>{t[0]=e(t[0],this.coordinatePrecision),t[1]=e(t[1],this.coordinatePrecision)});const a=this.midPoints.getUpdated(r)||[],l=this.selectionPoints.getUpdated(r)||[];this.store.updateGeometry([{id:i,geometry:s},...l,...a]),this.lastBearing=n+180}}class de extends Wt{constructor(t,e,i){super(t),this.config=void 0,this.selectionPoints=void 0,this.midPoints=void 0,this.lastDistance=void 0,this.config=t,this.selectionPoints=e,this.midPoints=i}reset(){this.lastDistance=void 0}scale(t,i){const s=this.store.getGeometryCopy(i);if("Polygon"!==s.type&&"LineString"!==s.type)return;const o=[t.lng,t.lat],n=Pt(re({type:"Feature",geometry:s,properties:{}}),o);if(!this.lastDistance)return void(this.lastDistance=n);let r;if(function(t,e){if(1===e)return t;const i=re(t);("Polygon"===t.geometry.type?t.geometry.coordinates[0]:t.geometry.coordinates).forEach(t=>{const s=he(i,t),o=ae(i,t),n=le(i,s*e,o);t[0]=n[0],t[1]=n[1]})}({type:"Feature",geometry:s,properties:{}},1-(this.lastDistance-n)/n),"Polygon"===s.type)r=s.coordinates[0];else{if("LineString"!==s.type)return;r=s.coordinates}r.forEach(t=>{t[0]=e(t[0],this.coordinatePrecision),t[1]=e(t[1],this.coordinatePrecision)});const a=this.midPoints.getUpdated(r)||[],l=this.selectionPoints.getUpdated(r)||[];this.store.updateGeometry([{id:i,geometry:s},...l,...a]),this.lastDistance=n}}class ue extends St{constructor(e){if(super(e),this.mode="select",this.dragEventThrottle=5,this.dragEventCount=0,this.selected=[],this.flags=void 0,this.keyEvents=void 0,this.selectionPoints=void 0,this.midPoints=void 0,this.featuresAtMouseEvent=void 0,this.pixelDistance=void 0,this.clickBoundingBox=void 0,this.dragFeature=void 0,this.dragCoordinate=void 0,this.rotateFeature=void 0,this.scaleFeature=void 0,this.flags=e&&e.flags?e.flags:{},null===(null==e?void 0:e.keyEvents))this.keyEvents={deselect:null,delete:null,rotate:null,scale:null};else{const i={deselect:"Escape",delete:"Delete",rotate:"r",scale:"s"};this.keyEvents=e&&e.keyEvents?t({},i,e.keyEvents):i}this.dragEventThrottle=e&&void 0!==e.dragEventThrottle&&e.dragEventThrottle||5}registerBehaviors(t){this.pixelDistance=new Gt(t),this.clickBoundingBox=new At(t),this.featuresAtMouseEvent=new se(t,this.clickBoundingBox,this.pixelDistance),this.selectionPoints=new te(t),this.midPoints=new Qt(t,this.selectionPoints),this.rotateFeature=new ce(t,this.selectionPoints,this.midPoints),this.scaleFeature=new de(t,this.selectionPoints,this.midPoints),this.dragFeature=new oe(t,this.featuresAtMouseEvent,this.selectionPoints,this.midPoints),this.dragCoordinate=new ne(t,this.pixelDistance,this.selectionPoints,this.midPoints)}deselect(){this.store.updateProperty(this.selected.map(t=>({id:t,property:"selected",value:!1}))),this.onDeselect(this.selected[0]),this.selected=[],this.selectionPoints.delete(),this.midPoints.delete()}deleteSelected(){this.store.delete(this.selected),this.selected=[]}onRightClick(t){if(!this.selectionPoints.ids.length)return;let e,i=Infinity;if(this.selectionPoints.ids.forEach(s=>{const o=this.store.getGeometryCopy(s),n=this.pixelDistance.measure(t,o.coordinates);n<this.pointerDistance&&n<i&&(i=n,e=this.store.getPropertiesCopy(s))}),!e)return;const s=e.selectionPointFeatureId,o=e.index,n=this.store.getPropertiesCopy(s),r=this.flags[n.mode];if(!(r&&r.feature&&r.feature.coordinates&&r.feature.coordinates.deletable))return;const a=this.store.getGeometryCopy(s);let l;if("Polygon"===a.type){if(l=a.coordinates[0],l.length<=4)return}else if("LineString"===a.type&&(l=a.coordinates,l.length<=3))return;l&&("Polygon"===a.type&&0===o||o===l.length-1?(l.shift(),l.pop(),l.push([l[0][0],l[0][1]])):l.splice(o,1),this.store.delete([...this.midPoints.ids,...this.selectionPoints.ids]),this.store.updateGeometry([{id:s,geometry:a}]),this.selectionPoints.create(l,a.type,s),r&&r.feature&&r.feature.coordinates&&r.feature.coordinates.midpoints&&this.midPoints.create(l,s,this.coordinatePrecision))}onLeftClick(t){const{clickedFeature:e,clickedMidPoint:i}=this.featuresAtMouseEvent.find(t,this.selected.length>0);if(this.selected.length&&i)this.midPoints.insert(i.id,this.coordinatePrecision);else if(e){const{mode:t}=this.store.getPropertiesCopy(e.id),i=this.selected[0];if(i){if(i===e.id)return;this.deselect()}const s=this.flags[t];if(!s||!s.feature)return;this.selected=[e.id],this.store.updateProperty([{id:e.id,property:"selected",value:!0}]),this.onSelect(e.id);const{type:o,coordinates:n}=this.store.getGeometryCopy(e.id);if("LineString"!==o&&"Polygon"!==o)return;const r="LineString"===o?n:n[0];r&&s&&s.feature.coordinates&&(this.selectionPoints.create(r,o,e.id),s.feature.coordinates.midpoints&&this.midPoints.create(r,e.id,this.coordinatePrecision))}else if(this.selected.length)return void this.deselect()}start(){this.setStarted()}stop(){this.cleanUp(),this.setStopped()}onClick(t){"right"!==t.button?"left"===t.button&&this.onLeftClick(t):this.onRightClick(t)}onKeyDown(){}onKeyUp(t){if(t.key===this.keyEvents.delete){if(!this.selected.length)return;this.onDeselect(this.selected[0]),this.deleteSelected(),this.selectionPoints.delete(),this.midPoints.delete()}else t.key===this.keyEvents.deselect&&this.cleanUp()}cleanUp(){this.selected.length&&this.deselect()}onDragStart(t,e){if(!this.selected.length)return;const i=this.store.getPropertiesCopy(this.selected[0]),s=this.flags[i.mode];s&&s.feature&&(s.feature.draggable||s.feature.coordinates&&s.feature.coordinates.draggable)&&(this.dragEventCount=0,this.setCursor("grabbing"),this.dragFeature.position=[t.lng,t.lat],e(!1))}onDrag(t){const e=this.selected[0];if(!e||!this.dragFeature.position)return;const i=this.store.getPropertiesCopy(e),s=this.flags[i.mode];if(this.dragEventCount++,this.dragEventCount%this.dragEventThrottle!=0)if(s&&s.feature&&s.feature.rotateable&&t.heldKeys.includes("r"))this.rotateFeature.rotate(t,e);else if(s&&s.feature&&s.feature.scaleable&&t.heldKeys.includes("s"))this.scaleFeature.scale(t,e);else{if(s&&s.feature&&s.feature.coordinates&&s.feature.coordinates.draggable&&this.dragCoordinate.drag(t,e))return;s&&s.feature&&s.feature.draggable&&(this.dragFeature.drag(t,e),this.dragFeature.position=[t.lng,t.lat])}}onDragEnd(t,e){this.setCursor("grab"),this.dragFeature.position=void 0,this.rotateFeature.reset(),this.scaleFeature.reset(),e(!0)}onMouseMove(t){if(!this.selected.length||this.dragFeature.position)return;let e=!1;this.midPoints.ids.forEach(i=>{if(e)return;const s=this.store.getGeometryCopy(i);this.pixelDistance.measure(t,s.coordinates)<this.pointerDistance&&(e=!0)}),this.selectionPoints.ids.forEach(i=>{const s=this.store.getGeometryCopy(i);this.pixelDistance.measure(t,s.coordinates)<this.pointerDistance&&(e=!1)}),this.setCursor(e?"crosshair":"unset")}styleFeature(e){const i=t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0});if(e.properties.mode===this.mode){if("Polygon"===e.geometry.type)return this.styles.selectedColor&&(i.polygonFillColor=this.styles.selectedColor),this.styles.selectedColor&&(i.polygonOutlineColor=this.styles.selectedColor),i.zIndex=10,i;if("Point"===e.geometry.type){if(e.properties.selectionPoint)return i.pointColor=this.styles.selectionPointColor||i.pointColor,i.pointOutlineColor=this.styles.selectionPointOutlineColor||i.pointOutlineColor,i.pointWidth=this.styles.selectionPointWidth||i.pointWidth,i.pointOutlineWidth=this.styles.midPointOutlineWidth||2,i.zIndex=30,i;if(e.properties.midPoint)return i.pointColor=this.styles.midPointColor||i.pointColor,i.pointOutlineColor=this.styles.midPointOutlineColor||i.pointOutlineColor,i.pointWidth=this.styles.midPointWidth||4,i.pointOutlineWidth=this.styles.midPointOutlineWidth||2,i.zIndex=40,i}}return i}}class ge extends St{constructor(...t){super(...t),this.mode="static"}start(){}stop(){}onKeyUp(){}onKeyDown(){}onClick(){}onDragStart(){}onDrag(){}onDragEnd(){}onMouseMove(){}styleFeature(){return t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0})}}const pe=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){const e=16*Math.random()|0;return("x"==t?e:3&e|8).toString(16)})};function ye(t,e,i,s,o){for(;s>i;){if(s-i>600){const n=s-i+1,r=e-i+1,a=Math.log(n),l=.5*Math.exp(2*a/3),h=.5*Math.sqrt(a*l*(n-l)/n)*(r-n/2<0?-1:1);ye(t,e,Math.max(i,Math.floor(e-r*l/n+h)),Math.min(s,Math.floor(e+(n-r)*l/n+h)),o)}const n=t[e];let r=i,a=s;for(fe(t,i,e),o(t[s],n)>0&&fe(t,i,s);r<a;){for(fe(t,r,a),r++,a--;o(t[r],n)<0;)r++;for(;o(t[a],n)>0;)a--}0===o(t[i],n)?fe(t,i,a):(a++,fe(t,a,s)),a<=e&&(i=a+1),e<=a&&(s=a-1)}}function fe(t,e,i){const s=t[e];t[e]=t[i],t[i]=s}function me(t,e){ve(t,0,t.children.length,e,t)}function ve(t,e,i,s,o){o||(o=be([])),o.minX=Infinity,o.minY=Infinity,o.maxX=-Infinity,o.maxY=-Infinity;for(let n=e;n<i;n++){const e=t.children[n];_e(o,t.leaf?s(e):e)}return o}function _e(t,e){return t.minX=Math.min(t.minX,e.minX),t.minY=Math.min(t.minY,e.minY),t.maxX=Math.max(t.maxX,e.maxX),t.maxY=Math.max(t.maxY,e.maxY),t}function Ce(t,e){return t.minX-e.minX}function Pe(t,e){return t.minY-e.minY}function xe(t){return(t.maxX-t.minX)*(t.maxY-t.minY)}function we(t){return t.maxX-t.minX+(t.maxY-t.minY)}function Me(t,e){const i=Math.max(t.minX,e.minX),s=Math.max(t.minY,e.minY),o=Math.min(t.maxX,e.maxX),n=Math.min(t.maxY,e.maxY);return Math.max(0,o-i)*Math.max(0,n-s)}function Ee(t,e){return t.minX<=e.minX&&t.minY<=e.minY&&e.maxX<=t.maxX&&e.maxY<=t.maxY}function Se(t,e){return e.minX<=t.maxX&&e.minY<=t.maxY&&e.maxX>=t.minX&&e.maxY>=t.minY}function be(t){return{children:t,height:1,leaf:!0,minX:Infinity,minY:Infinity,maxX:-Infinity,maxY:-Infinity}}function Ie(t,e,i,s,o){const n=[e,i];for(;n.length;){if((i=n.pop())-(e=n.pop())<=s)continue;const r=e+Math.ceil((i-e)/s/2)*s;ye(t,r,e,i,o),n.push(e,r,r,i)}}class ke{constructor(t){this._maxEntries=void 0,this._minEntries=void 0,this.data=void 0,this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}search(t){let e=this.data;const i=[];if(!Se(t,e))return i;const s=this.toBBox,o=[];for(;e;){for(let n=0;n<e.children.length;n++){const r=e.children[n],a=e.leaf?s(r):r;Se(t,a)&&(e.leaf?i.push(r):Ee(t,a)?this._all(r,i):o.push(r))}e=o.pop()}return i}collides(t){let e=this.data;if(Se(t,e)){const i=[];for(;e;){for(let s=0;s<e.children.length;s++){const o=e.children[s],n=e.leaf?this.toBBox(o):o;if(Se(t,n)){if(e.leaf||Ee(t,n))return!0;i.push(o)}}e=i.pop()}}return!1}load(t){if(t.length<this._minEntries){for(let e=0;e<t.length;e++)this.insert(t[e]);return}let e=this._build(t.slice(),0,t.length-1,0);if(this.data.children.length)if(this.data.height===e.height)this._splitRoot(this.data,e);else{if(this.data.height<e.height){const t=this.data;this.data=e,e=t}this._insert(e,this.data.height-e.height-1,!0)}else this.data=e}insert(t){this._insert(t,this.data.height-1)}clear(){this.data=be([])}remove(t){let e=this.data;const i=this.toBBox(t),s=[],o=[];let n,r,a=!1;for(;e||s.length;){if(e||(e=s.pop(),r=s[s.length-1],n=o.pop(),a=!0),e.leaf){const i=e.children.indexOf(t);-1!==i&&(e.children.splice(i,1),s.push(e),this._condense(s))}a||e.leaf||!Ee(e,i)?r?(n++,e=r.children[n],a=!1):e=null:(s.push(e),o.push(n),n=0,r=e,e=e.children[0])}}toBBox(t){return t}compareMinX(t,e){return t.minX-e.minX}compareMinY(t,e){return t.minY-e.minY}_all(t,e){const i=[];for(;t;)t.leaf?e.push(...t.children):i.push(...t.children),t=i.pop();return e}_build(t,e,i,s){const o=i-e+1;let n,r=this._maxEntries;if(o<=r)return n=be(t.slice(e,i+1)),me(n,this.toBBox),n;s||(s=Math.ceil(Math.log(o)/Math.log(r)),r=Math.ceil(o/Math.pow(r,s-1))),n=be([]),n.leaf=!1,n.height=s;const a=Math.ceil(o/r),l=a*Math.ceil(Math.sqrt(r));Ie(t,e,i,l,this.compareMinX);for(let o=e;o<=i;o+=l){const e=Math.min(o+l-1,i);Ie(t,o,e,a,this.compareMinY);for(let i=o;i<=e;i+=a){const o=Math.min(i+a-1,e);n.children.push(this._build(t,i,o,s-1))}}return me(n,this.toBBox),n}_chooseSubtree(t,e,i,s){for(;s.push(e),!e.leaf&&s.length-1!==i;){let i,s=Infinity,r=Infinity;for(let a=0;a<e.children.length;a++){const l=e.children[a],h=xe(l),c=(o=t,n=l,(Math.max(n.maxX,o.maxX)-Math.min(n.minX,o.minX))*(Math.max(n.maxY,o.maxY)-Math.min(n.minY,o.minY))-h);c<r?(r=c,s=h<s?h:s,i=l):c===r&&h<s&&(s=h,i=l)}e=i||e.children[0]}var o,n;return e}_insert(t,e,i){const s=i?t:this.toBBox(t),o=[],n=this._chooseSubtree(s,this.data,e,o);for(n.children.push(t),_e(n,s);e>=0&&o[e].children.length>this._maxEntries;)this._split(o,e),e--;this._adjustParentBBoxes(s,o,e)}_split(t,e){const i=t[e],s=i.children.length,o=this._minEntries;this._chooseSplitAxis(i,o,s);const n=this._chooseSplitIndex(i,o,s),r=be(i.children.splice(n,i.children.length-n));r.height=i.height,r.leaf=i.leaf,me(i,this.toBBox),me(r,this.toBBox),e?t[e-1].children.push(r):this._splitRoot(i,r)}_splitRoot(t,e){this.data=be([t,e]),this.data.height=t.height+1,this.data.leaf=!1,me(this.data,this.toBBox)}_chooseSplitIndex(t,e,i){let s,o=Infinity,n=Infinity;for(let r=e;r<=i-e;r++){const e=ve(t,0,r,this.toBBox),a=ve(t,r,i,this.toBBox),l=Me(e,a),h=xe(e)+xe(a);l<o?(o=l,s=r,n=h<n?h:n):l===o&&h<n&&(n=h,s=r)}return s||i-e}_chooseSplitAxis(t,e,i){const s=t.leaf?this.compareMinX:Ce,o=t.leaf?this.compareMinY:Pe;this._allDistMargin(t,e,i,s)<this._allDistMargin(t,e,i,o)&&t.children.sort(s)}_allDistMargin(t,e,i,s){t.children.sort(s);const o=this.toBBox,n=ve(t,0,e,o),r=ve(t,i-e,i,o);let a=we(n)+we(r);for(let s=e;s<i-e;s++){const e=t.children[s];_e(n,t.leaf?o(e):e),a+=we(n)}for(let s=i-e-1;s>=e;s--){const e=t.children[s];_e(r,t.leaf?o(e):e),a+=we(r)}return a}_adjustParentBBoxes(t,e,i){for(let s=i;s>=0;s--)_e(e[s],t)}_condense(t){for(let e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children,e.splice(e.indexOf(t[i]),1)):this.clear():me(t[i],this.toBBox)}}class De{constructor(t){this.tree=void 0,this.idToNode=void 0,this.nodeToId=void 0,this.tree=new ke(t&&t.maxEntries?t.maxEntries:9),this.idToNode=new Map,this.nodeToId=new Map}setMaps(t,e){this.idToNode.set(String(t.id),e),this.nodeToId.set(e,String(t.id))}toBBox(t){const e=[],i=[];let s;if("Polygon"===t.geometry.type)s=t.geometry.coordinates[0];else if("LineString"===t.geometry.type)s=t.geometry.coordinates;else{if("Point"!==t.geometry.type)throw new Error("Not a valid feature to turn into a bounding box");s=[t.geometry.coordinates]}for(let t=0;t<s.length;t++)i.push(s[t][1]),e.push(s[t][0]);const o=Math.min(...i),n=Math.max(...i);return{minX:Math.min(...e),minY:o,maxX:Math.max(...e),maxY:n}}insert(t){if(this.idToNode.get(String(t.id)))throw new Error("Feature already exists");const e=this.toBBox(t);this.setMaps(t,e),this.tree.insert(e)}load(t){const e=[],i=new Set;t.forEach(t=>{const s=this.toBBox(t);if(this.setMaps(t,s),i.has(String(t.id)))throw new Error(`Duplicate feature ID found ${t.id}`);i.add(String(t.id)),e.push(s)}),this.tree.load(e)}update(t){this.remove(t.id);const e=this.toBBox(t);this.setMaps(t,e),this.tree.insert(e)}remove(t){const e=this.idToNode.get(t);if(!e)throw new Error(`${t} not inserted into the spatial index`);this.tree.remove(e)}clear(){this.tree.clear()}search(t){return this.tree.search(this.toBBox(t)).map(t=>this.nodeToId.get(t))}collides(t){return this.tree.collides(this.toBBox(t))}}class Oe{constructor(t){this.tracked=void 0,this.spatialIndex=void 0,this.store=void 0,this._onChange=()=>{},this.store={},this.spatialIndex=new De,this.tracked=!t||!1!==t.tracked,t&&t.data&&this.load(t.data,t.validateFeature)}getId(){return pe()}clone(t){return JSON.parse(JSON.stringify(t))}has(t){return Boolean(this.store[t])}load(t,e){if(0===t.length)return;const i=this.clone(t);i.forEach(t=>{t.id||(t.id=pe()),this.tracked&&(t.properties.createdAt||(t.properties.createdAt=+new Date),t.properties.updatedAt||(t.properties.updatedAt=+new Date))});const s=[];i.forEach(t=>{e&&e(t),this.store[t.id]=t,s.push(t.id)}),this.spatialIndex.load(i),this._onChange(s,"create")}search(t,e){const i=this.spatialIndex.search(t).map(t=>this.store[t]);return this.clone(e?i.filter(e):i)}registerOnChange(t){this._onChange=(e,i)=>{t(e,i)}}getGeometryCopy(t){const e=this.store[t];if(!e)throw new Error(`No feature with this id (${t}), can not get geometry copy`);return this.clone(e.geometry)}getPropertiesCopy(t){const e=this.store[t];if(!e)throw new Error(`No feature with this id (${t}), can not get properties copy`);return this.clone(e.properties)}updateProperty(t){const e=[];t.forEach(({id:t,property:i,value:s})=>{const o=this.store[t];if(!o)throw new Error(`No feature with this (${t}), can not update geometry`);e.push(t),o.properties[i]=s,this.tracked&&(o.properties.updatedAt=+new Date)}),this._onChange&&this._onChange(e,"update")}updateGeometry(t){const e=[];t.forEach(({id:t,geometry:i})=>{e.push(t);const s=this.store[t];if(!s)throw new Error(`No feature with this (${t}), can not update geometry`);s.geometry=this.clone(i),this.spatialIndex.update(s),this.tracked&&(s.properties.updatedAt=+new Date)}),this._onChange&&this._onChange(e,"update")}create(e){const i=[];return e.forEach(({geometry:e,properties:s})=>{let o,n=t({},s);this.tracked&&(o=+new Date,s?(n.createdAt="number"==typeof s.createdAt?s.createdAt:o,n.updatedAt="number"==typeof s.updatedAt?s.updatedAt:o):n={createdAt:o,updatedAt:o});const r=this.getId(),a={id:r,type:"Feature",geometry:e,properties:n};this.store[r]=a,this.spatialIndex.insert(a),i.push(r)}),this._onChange&&this._onChange([...i],"create"),i}delete(t){t.forEach(t=>{if(!this.store[t])throw new Error("No feature with this id, can not delete");delete this.store[t],this.spatialIndex.remove(t)}),this._onChange&&this._onChange([...t],"delete")}copyAll(){return this.clone(Object.keys(this.store).map(t=>this.store[t]))}clear(){this.store={},this.spatialIndex.clear()}size(){return Object.keys(this.store).length}}class Le{constructor(e){this._modes=void 0,this._mode=void 0,this._adapter=void 0,this._enabled=!1,this._store=void 0,this._eventListeners=void 0,this._adapter=e.adapter,this._mode=new ge,this._modes=t({},e.modes,{static:this._mode}),this._eventListeners={change:[],select:[],deselect:[]},this._store=e.data?new Oe({data:e.data}):new Oe;const i=t=>{const e=[],i=this._store.copyAll().filter(i=>!t.includes(i.id)||(e.push(i),!1));return{changed:e,unchanged:i}},s=(t,e)=>{this._eventListeners.change.forEach(i=>{i(t,e)});const{changed:s,unchanged:o}=i(t);"create"===e?this._adapter.render({created:s,deletedIds:[],unchanged:o,updated:[]},this.getModeStyles()):"update"===e?this._adapter.render({created:[],deletedIds:[],unchanged:o,updated:s},this.getModeStyles()):"delete"===e?this._adapter.render({created:[],deletedIds:t,unchanged:o,updated:[]},this.getModeStyles()):"styling"===e&&this._adapter.render({created:[],deletedIds:[],unchanged:o,updated:[]},this.getModeStyles())},o=t=>{this._eventListeners.select.forEach(e=>{e(t)});const{changed:e,unchanged:s}=i([t]);this._adapter.render({created:[],deletedIds:[],unchanged:s,updated:e},this.getModeStyles())},n=t=>{this._eventListeners.deselect.forEach(t=>{t()});const{changed:e,unchanged:s}=i([t]);e&&this._adapter.render({created:[],deletedIds:[],unchanged:s,updated:e},this.getModeStyles())};if(Object.keys(this._modes).forEach(t=>{this._modes[t].register({mode:t,store:this._store,setCursor:this._adapter.setCursor.bind(this._adapter),project:this._adapter.project.bind(this._adapter),unproject:this._adapter.unproject.bind(this._adapter),setDoubleClickToZoom:this._adapter.setDoubleClickToZoom.bind(this._adapter),onChange:s,onSelect:o,onDeselect:n})}),e.data){const t=this._store.copyAll().filter(t=>!(t.properties&&!Object.keys(this._modes).includes(t.properties.mode)&&(this._store.delete([t.id]),1)));this._adapter.render({created:t,deletedIds:[],unchanged:[],updated:[]},this.getModeStyles())}}checkEnabled(){if(!this._enabled)throw new Error("Terra Draw is not enabled")}getModeStyles(){const t={};return Object.keys(this._modes).forEach(e=>{t[e]=this._modes[e].styleFeature.bind(this._modes[e])}),t}setModeStyles(t,e){this.checkEnabled(),this._modes[t].styles=e}getSnapshot(){return this._store.copyAll()}clear(){this.checkEnabled(),this._store.clear()}get enabled(){return this._enabled}set enabled(t){throw new Error("Enabled is read only")}getMode(){return this._mode.mode}setMode(t){if(this.checkEnabled(),!this._modes[t])throw new Error("No mode with this name present");this._mode.stop(),this._mode=this._modes[t],this._mode.start()}start(){this._enabled=!0,this._adapter.register({getState:()=>this._mode.state,onClick:t=>{this._mode.onClick(t)},onMouseMove:t=>{this._mode.onMouseMove(t)},onKeyDown:t=>{this._mode.onKeyDown(t)},onKeyUp:t=>{this._mode.onKeyUp(t)},onDragStart:(t,e)=>{this._mode.onDragStart(t,e)},onDrag:t=>{this._mode.onDrag(t)},onDragEnd:(t,e)=>{this._mode.onDragEnd(t,e)}})}stop(){this._enabled=!1,this._adapter.unregister()}on(t,e){const i=this._eventListeners[t];i.includes(e)||i.push(e)}off(t,e){const i=this._eventListeners[t];i.includes(e)&&i.splice(i.indexOf(e),1)}}export{Le as TerraDraw,bt as TerraDrawCircleMode,It as TerraDrawFreehandMode,n as TerraDrawGoogleMapsAdapter,jt as TerraDrawGreatCircleMode,r as TerraDrawLeafletAdapter,Nt as TerraDrawLineStringMode,l as TerraDrawMapLibreGLAdapter,a as TerraDrawMapboxGLAdapter,Ct as TerraDrawOpenLayersAdapter,Xt as TerraDrawPointMode,Kt as TerraDrawPolygonMode,Vt as TerraDrawRectangleMode,Zt as TerraDrawRenderMode,ue as TerraDrawSelectMode};
|
|
1
|
+
function t(){return t=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(t[s]=i[s])}return t},t.apply(this,arguments)}function e(t,e=9){const i=Math.pow(10,e);return Math.round(t*i)/i}const i=(t,e)=>{const{x:i,y:s}=t,{x:o,y:n}=e,r=o-i,a=n-s;return Math.sqrt(a*a+r*r)};class s{constructor({name:t,callback:e,unregister:i,register:s}){this.name=void 0,this.callback=void 0,this.registered=!1,this.register=void 0,this.unregister=void 0,this.name=t,this.register=()=>{this.registered||(this.registered=!0,s(e))},this.unregister=()=>{this.register&&(this.registered=!1,i(e))},this.callback=e}}class o{constructor(t){this._minPixelDragDistance=void 0,this._lastDrawEvent=void 0,this._coordinatePrecision=void 0,this._heldKeys=new Set,this._listeners=[],this._dragState="not-dragging",this._currentModeCallbacks=void 0,this._minPixelDragDistance="number"==typeof t.minPixelDragDistance?t.minPixelDragDistance:8,this._coordinatePrecision="number"==typeof t.coordinatePrecision?t.coordinatePrecision:9,this._listeners=[new s({name:"pointerdown",callback:t=>{if(!t.isPrimary)return;const e=this.getDrawEventFromEvent(t);e&&(this._dragState="pre-dragging",this._lastDrawEvent=e)},register:t=>{this.getMapContainer().addEventListener("pointerdown",t)},unregister:t=>{this.getMapContainer().removeEventListener("pointerdown",t)}}),new s({name:"pointermove",callback:t=>{if(!this._currentModeCallbacks)return;if(!t.isPrimary)return;t.preventDefault();const e=this.getDrawEventFromEvent(t);if(e)if("not-dragging"===this._dragState)this._currentModeCallbacks.onMouseMove(e),this._lastDrawEvent=e;else if("pre-dragging"===this._dragState){if(!this._lastDrawEvent)return;const t={x:this._lastDrawEvent.containerX,y:this._lastDrawEvent.containerY},s={x:e.containerX,y:e.containerY};if("drawing"===this._currentModeCallbacks.getState()&&i(t,s)<this._minPixelDragDistance)return;this._dragState="dragging",this._currentModeCallbacks.onDragStart(e,t=>{this.setDraggability.bind(this)(t)})}else"dragging"===this._dragState&&this._currentModeCallbacks.onDrag(e)},register:t=>{this.getMapContainer().addEventListener("pointermove",t)},unregister:t=>{this.getMapContainer().removeEventListener("pointermove",t)}}),new s({name:"contextmenu",callback:t=>{if(this._currentModeCallbacks&&(t.preventDefault(),"not-dragging"===this._dragState||"pre-dragging"===this._dragState)){const e=this.getDrawEventFromEvent(t);if(!e)return;"neither"!==e.button&&this._currentModeCallbacks.onClick(e)}},register:t=>{this.getMapContainer().addEventListener("contextmenu",t)},unregister:t=>{this.getMapContainer().removeEventListener("contextmenu",t)}}),new s({name:"pointerup",callback:t=>{if(!this._currentModeCallbacks)return;if(!t.isPrimary)return;const e=this.getDrawEventFromEvent(t);e&&("dragging"===this._dragState?this._currentModeCallbacks.onDragEnd(e,t=>{this.setDraggability.bind(this)(t)}):"not-dragging"!==this._dragState&&"pre-dragging"!==this._dragState||this._currentModeCallbacks.onClick(e),this._dragState="not-dragging",this.setDraggability(!0))},register:t=>{this.getMapContainer().addEventListener("pointerup",t)},unregister:t=>{this.getMapContainer().removeEventListener("pointerup",t)}}),new s({name:"keyup",callback:t=>{this._currentModeCallbacks&&(t.preventDefault(),this._heldKeys.delete(t.key),this._currentModeCallbacks.onKeyUp({key:t.key}))},register:t=>{this.getMapContainer().addEventListener("keyup",t)},unregister:t=>{this.getMapContainer().removeEventListener("keyup",t)}}),new s({name:"keydown",callback:t=>{this._currentModeCallbacks&&(t.preventDefault(),this._heldKeys.add(t.key),this._currentModeCallbacks.onKeyDown({key:t.key}))},register:t=>{this.getMapContainer().addEventListener("keydown",t)},unregister:t=>{this.getMapContainer().removeEventListener("keydown",t)}})]}getButton(t){return-1===t.button?"neither":0===t.button?"left":1===t.button?"middle":2===t.button?"right":"neither"}getDrawEventFromEvent(t){const i=this.getLngLatFromEvent(t);if(!i)return null;const{lng:s,lat:o}=i,n=this.getButton(t),r=this.getMapContainer();return{lng:e(s,this._coordinatePrecision),lat:e(o,this._coordinatePrecision),containerX:t.clientX-r.offsetLeft,containerY:t.clientY-r.offsetTop,button:n,heldKeys:[...this._heldKeys]}}register(t){this._currentModeCallbacks=t,this._listeners.forEach(t=>{t.register()})}unregister(){this._listeners.forEach(t=>{t.unregister()})}}class n extends o{constructor(t){super(t),this._cursor=void 0,this._cursorStyleSheet=void 0,this._lib=void 0,this._map=void 0,this._layers=!1,this._overlay=void 0,this._lib=t.lib,this._map=t.map,this._coordinatePrecision="number"==typeof t.coordinatePrecision?t.coordinatePrecision:9,this._overlay=new this._lib.OverlayView,this._overlay.draw=function(){},this._overlay.setMap(this._map)}circlePath(t,e,i){const s=2*i;return`M ${t} ${e} m -${i}, 0 a ${i},${i} 0 1,0 ${s},0 a ${i},${i} 0 1,0 -${s},0`}getLngLatFromEvent(t){const e=this._map.getBounds();if(!e)return null;const i=e.getNorthEast(),s=e.getSouthWest(),o=new google.maps.LatLngBounds(s,i),n=this._map.getDiv(),r=t.clientX-n.getBoundingClientRect().left,a=t.clientY-n.getBoundingClientRect().top,l=new google.maps.Point(r,a),h=this._overlay.getProjection().fromContainerPixelToLatLng(l);return h&&o.contains(h)?{lng:h.lng(),lat:h.lat()}:null}getMapContainer(){return this._map.getDiv()}project(t,e){const i=this._map.getBounds();if(void 0===i)throw new Error("cannot get bounds");const s=new this._lib.LatLng(i.getNorthEast().lat(),i.getSouthWest().lng()),o=this._map.getProjection();if(void 0===o)throw new Error("cannot get projection");const n=o.fromLatLngToPoint(s);if(null===n)throw new Error("cannot get projectedNorthWest");const r=o.fromLatLngToPoint({lng:t,lat:e});if(null===r)throw new Error("cannot get projected lng lat");const a=this._map.getZoom();if(void 0===a)throw new Error("cannot get zoom");const l=Math.pow(2,a);return{x:Math.floor((r.x-n.x)*l),y:Math.floor((r.y-n.y)*l)}}unproject(t,e){const i=this._map.getProjection();if(void 0===i)throw new Error("cannot get projection");const s=this._map.getBounds();if(void 0===s)throw new Error("cannot get bounds");const o=i.fromLatLngToPoint(s.getNorthEast());if(null===o)throw new Error("cannot get topRight");const n=i.fromLatLngToPoint(s.getSouthWest());if(null===n)throw new Error("cannot get bottomLeft");const r=this._map.getZoom();if(void 0===r)throw new Error("zoom get bounds");const a=Math.pow(2,r),l=new google.maps.Point(t/a+n.x,e/a+o.y),h=i.fromPointToLatLng(l);if(null===h)throw new Error("zoom get bounds");return{lng:h.lng(),lat:h.lat()}}setCursor(t){if(t!==this._cursor){if(this._cursorStyleSheet&&(this._cursorStyleSheet.remove(),this._cursorStyleSheet=void 0),"unset"!==t){const e=this.getMapContainer(),i=document.createElement("style");i.type="text/css",i.innerHTML=`#${e.id} [aria-label="Map"] { cursor: ${t} !important; }`,document.getElementsByTagName("head")[0].appendChild(i),this._cursorStyleSheet=i}this._cursor=t}}setDoubleClickToZoom(t){this._map.setOptions(t?{disableDoubleClickZoom:!1}:{disableDoubleClickZoom:!0})}setDraggability(t){this._map.setOptions({draggable:t})}render(t,e){this._layers?(t.deletedIds.forEach(t=>{const e=this._map.data.getFeatureById(t);e&&this._map.data.remove(e)}),t.updated.forEach(t=>{if(!t||!t.id)throw new Error("Feature is not valid");const e=this._map.data.getFeatureById(t.id);if(!e)throw new Error("Feature could not be found by Google Maps API");switch(e.forEachProperty((t,i)=>{e.setProperty(i,void 0)}),Object.keys(t.properties).forEach(i=>{e.setProperty(i,t.properties[i])}),t.geometry.type){case"Point":{const i=t.geometry.coordinates;e.setGeometry(new google.maps.Data.Point(new google.maps.LatLng(i[1],i[0])))}break;case"LineString":{const i=t.geometry.coordinates,s=[];for(let t=0;t<i.length;t++){const e=i[t],o=new google.maps.LatLng(e[1],e[0]);s.push(o)}e.setGeometry(new google.maps.Data.LineString(s))}break;case"Polygon":{const i=t.geometry.coordinates,s=[];for(let t=0;t<i.length;t++){const e=[];for(let s=0;s<i[t].length;s++){const o=new google.maps.LatLng(i[t][s][1],i[t][s][0]);e.push(o)}s.push(e)}e.setGeometry(new google.maps.Data.Polygon(s))}}}),t.created.forEach(t=>{this._map.data.addGeoJson(t)})):(this._map.data.addListener("click",t=>{const e=this._listeners.find(({name:t})=>"click"===t);e&&e.callback(t)}),this._map.data.addListener("mousemove",t=>{const e=this._listeners.find(({name:t})=>"mousemove"===t);e&&e.callback(t)}));const i={type:"FeatureCollection",features:[...t.created]};this._map.data.addGeoJson(i),this._map.data.setStyle(t=>{const i=t.getProperty("mode"),s=t.getGeometry();if(!s)throw new Error("Google Maps geometry not found");const o=s.getType(),n={};t.forEachProperty((t,e)=>{n[e]=t});const r=e[i]({type:"Feature",geometry:{type:o,coordinates:[]},properties:n});switch(o){case"Point":return{clickable:!1,icon:{path:this.circlePath(0,0,r.pointWidth),fillColor:r.pointColor,fillOpacity:1,strokeColor:r.pointOutlineColor,strokeWeight:r.pointOutlineWidth,rotation:0,scale:1}};case"LineString":return{strokeColor:r.lineStringColor,strokeWeight:r.lineStringWidth};case"Polygon":return{strokeColor:r.polygonOutlineColor,strokeWeight:r.polygonOutlineWidth,fillOpacity:r.polygonFillOpacity,fillColor:r.polygonFillColor}}throw Error("Unknown feature type")}),this._layers=!0}}class r extends o{constructor(t){super(t),this._lib=void 0,this._map=void 0,this._layer=void 0,this._panes={},this._container=void 0,this._lib=t.lib,this._map=t.map,this._container=this._map.getContainer()}createPaneStyleSheet(t,e){const i=document.createElement("style");return i.type="text/css",i.innerHTML=`.leaflet-${t} {z-index: ${e};}`,document.getElementsByTagName("head")[0].appendChild(i),this._map.createPane(t),i}getLngLatFromEvent(t){const e=this.getMapContainer(),i={x:t.clientX-e.offsetLeft,y:t.clientY-e.offsetTop};if(isNaN(i.x)||isNaN(i.y))return null;const s=this._map.containerPointToLatLng(i);return isNaN(s.lng)||isNaN(s.lat)?null:{lng:s.lng,lat:s.lat}}getMapContainer(){return this._container}setDraggability(t){t?this._map.dragging.enable():this._map.dragging.disable()}project(t,e){const{x:i,y:s}=this._map.latLngToContainerPoint({lng:t,lat:e});return{x:i,y:s}}unproject(t,e){const{lng:i,lat:s}=this._map.containerPointToLatLng({x:t,y:e});return{lng:i,lat:s}}setCursor(t){"unset"===t?this.getMapContainer().style.removeProperty("cursor"):this.getMapContainer().style.cursor=t}setDoubleClickToZoom(t){t?this._map.doubleClickZoom.enable():this._map.doubleClickZoom.disable()}render(t,e){const i=[...t.created,...t.updated,...t.unchanged];this._layer&&this._map.removeLayer(this._layer);const s=this._lib.geoJSON({type:"FeatureCollection",features:i},{pointToLayer:(t,i)=>{if(!t.properties)throw new Error("Feature has no properties");if("string"!=typeof t.properties.mode)throw new Error("Feature mode is not a string");const s=(0,e[t.properties.mode])(t),o=String(s.zIndex);return this._panes[o]||(this._panes[o]=this.createPaneStyleSheet(o,s.zIndex)),this._lib.circleMarker(i,{radius:s.pointWidth,stroke:s.pointOutlineWidth||!1,color:s.pointOutlineColor,weight:s.pointOutlineWidth,fillOpacity:.8,fillColor:s.pointColor,pane:o,interactive:!1})},style:t=>{if(!t||!t.properties)return{};const i=t,s=(0,e[i.properties.mode])(i);return"LineString"===i.geometry.type?{interactive:!1,color:s.lineStringColor,weight:s.lineStringWidth}:"Polygon"===i.geometry.type?{interactive:!1,fillOpacity:s.polygonFillOpacity,fillColor:s.polygonFillColor,weight:s.polygonOutlineWidth,stroke:!0,color:s.polygonFillColor}:{}}});this._map.addLayer(s),this._layer=s}}class a extends o{constructor(t){super(t),this._map=void 0,this._container=void 0,this._rendered={},this._map=t.map,this._container=this._map.getContainer()}_addGeoJSONSource(t,e){this._map.addSource(t,{type:"geojson",data:{type:"FeatureCollection",features:e},tolerance:0})}_addFillLayer(t,e){return this._map.addLayer({id:t,source:t,type:"fill",filter:["all",["match",["geometry-type"],"Polygon",!0,!1],["match",["get","mode"],e,!0,!1]],paint:{"fill-color":["get","polygonFillColor"],"fill-opacity":["get","polygonFillOpacity"]}})}_addFillOutlineLayer(t,e,i){const s=this._map.addLayer({id:t+"outline",source:t,type:"line",filter:["all",["match",["geometry-type"],"Polygon",!0,!1],["match",["get","mode"],e,!0,!1]],paint:{"line-width":["get","polygonOutlineWidth"],"line-color":["get","polygonOutlineColor"]}});return i&&this._map.moveLayer(t,i),s}_addLineLayer(t,e,i){const s=this._map.addLayer({id:t,source:t,type:"line",filter:["all",["match",["geometry-type"],"LineString",!0,!1],["match",["get","mode"],e,!0,!1]],paint:{"line-width":["get","lineStringWidth"],"line-color":["get","lineStringColor"]}});return i&&this._map.moveLayer(t,i),s}_addPointLayer(t,e,i){const s=this._map.addLayer({id:t,source:t,type:"circle",filter:["all",["match",["geometry-type"],"Point",!0,!1],["match",["get","mode"],e,!0,!1]],paint:{"circle-stroke-color":["get","pointOutlineColor"],"circle-stroke-width":["get","pointOutlineWidth"],"circle-radius":["get","pointWidth"],"circle-color":["get","pointColor"]}});return i&&this._map.moveLayer(t,i),s}_addLayer(t,e,i,s){"Point"===i&&this._addPointLayer(t,e,s),"LineString"===i&&this._addLineLayer(t,e,s),"Polygon"===i&&(this._addFillLayer(t,e),this._addFillOutlineLayer(t,e,s))}_addGeoJSONLayer(t,e,i){const s=`td-${t}-${e.toLowerCase()}`;return this._addGeoJSONSource(s,i),this._addLayer(s,t,e),s}_setGeoJSONLayerData(t,e,i){const s=`td-${t}-${e.toLowerCase()}`;return this._map.getSource(s).setData({type:"FeatureCollection",features:i}),s}getLngLatFromEvent(t){const{left:e,top:i}=this.getMapContainer().getBoundingClientRect();return this.unproject(t.clientX-e,t.clientY-i)}getMapContainer(){return this._container}setDraggability(t){t?this._map.dragPan.enable():this._map.dragPan.disable()}project(t,e){const{x:i,y:s}=this._map.project({lng:t,lat:e});return{x:i,y:s}}unproject(t,e){const{lng:i,lat:s}=this._map.unproject({x:t,y:e});return{lng:i,lat:s}}setCursor(t){this._map.getCanvas().style.cursor=t}setDoubleClickToZoom(t){t?this._map.doubleClickZoom.enable():this._map.doubleClickZoom.disable()}render(t,e){const i=[...t.created,...t.updated,...t.unchanged],s={};Object.keys(e).forEach(t=>{s[t]||(s[t]={points:[],linestrings:[],polygons:[]})});for(let t=0;t<i.length;t++){const o=i[t];Object.keys(e).forEach(t=>{const{properties:i}=o;if(i.mode!==t)return;const n=e[t](o);"Point"===o.geometry.type?(i.pointColor=n.pointColor,i.pointOutlineColor=n.pointOutlineColor,i.pointOutlineWidth=n.pointOutlineWidth,i.pointWidth=n.pointWidth,s[t].points.push(o)):"LineString"===o.geometry.type?(i.lineStringColor=n.lineStringColor,i.lineStringWidth=n.lineStringWidth,s[t].linestrings.push(o)):"Polygon"===o.geometry.type&&(i.polygonFillColor=n.polygonFillColor,i.polygonFillOpacity=n.polygonFillOpacity,i.polygonOutlineColor=n.polygonOutlineColor,i.polygonOutlineWidth=n.polygonOutlineWidth,s[t].polygons.push(o))})}Object.keys(e).forEach(t=>{if(!s[t])return;const{points:e,linestrings:i,polygons:o}=s[t];if(this._rendered[t]){const s=this._setGeoJSONLayerData(t,"Point",e);this._setGeoJSONLayerData(t,"LineString",i),this._setGeoJSONLayerData(t,"Polygon",o),this._map.moveLayer(s)}else this._addGeoJSONLayer(t,"Point",e),this._addGeoJSONLayer(t,"LineString",i),this._addGeoJSONLayer(t,"Polygon",o),this._rendered[t]=!0})}}class l extends o{constructor(t){super(t),this.mapboxglAdapter=void 0,this.mapboxglAdapter=new a(t)}getLngLatFromEvent(t){return this.mapboxglAdapter.getLngLatFromEvent(t)}getMapContainer(){return this.mapboxglAdapter.getMapContainer()}setDraggability(t){this.mapboxglAdapter.setDraggability(t)}project(t,e){return this.mapboxglAdapter.project(t,e)}unproject(t,e){return this.mapboxglAdapter.unproject(t,e)}setCursor(t){this.mapboxglAdapter.setCursor(t)}setDoubleClickToZoom(t){this.mapboxglAdapter.setDoubleClickToZoom(t)}render(t,e){this.mapboxglAdapter.render(t,e)}}function h(){throw new Error("Unimplemented abstract method.")}let c=0;function d(t,e){return Array.isArray(t)?t:(void 0===e?e=[t,t]:(e[0]=t,e[1]=t),e)}class u{constructor(t){this.opacity_=t.opacity,this.rotateWithView_=t.rotateWithView,this.rotation_=t.rotation,this.scale_=t.scale,this.scaleArray_=d(t.scale),this.displacement_=t.displacement,this.declutterMode_=t.declutterMode}clone(){const t=this.getScale();return new u({opacity:this.getOpacity(),scale:Array.isArray(t)?t.slice():t,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()})}getOpacity(){return this.opacity_}getRotateWithView(){return this.rotateWithView_}getRotation(){return this.rotation_}getScale(){return this.scale_}getScaleArray(){return this.scaleArray_}getDisplacement(){return this.displacement_}getDeclutterMode(){return this.declutterMode_}getAnchor(){return h()}getImage(t){return h()}getHitDetectionImage(){return h()}getPixelRatio(t){return 1}getImageState(){return h()}getImageSize(){return h()}getOrigin(){return h()}getSize(){return h()}setDisplacement(t){this.displacement_=t}setOpacity(t){this.opacity_=t}setRotateWithView(t){this.rotateWithView_=t}setRotation(t){this.rotation_=t}setScale(t){this.scale_=t,this.scaleArray_=d(t)}listenImageChange(t){h()}load(){h()}unlistenImageChange(t){h()}}var g=u;const p={1:"The view center is not defined",2:"The view resolution is not defined",3:"The view rotation is not defined",4:"`image` and `src` cannot be provided at the same time",5:"`imgSize` must be set when `image` is provided",7:"`format` must be set when `url` is set",8:"Unknown `serverType` configured",9:"`url` must be configured or set using `#setUrl()`",10:"The default `geometryFunction` can only handle `Point` geometries",11:"`options.featureTypes` must be an Array",12:"`options.geometryName` must also be provided when `options.bbox` is set",13:"Invalid corner",14:"Invalid color",15:"Tried to get a value for a key that does not exist in the cache",16:"Tried to set a value for a key that is used already",17:"`resolutions` must be sorted in descending order",18:"Either `origin` or `origins` must be configured, never both",19:"Number of `tileSizes` and `resolutions` must be equal",20:"Number of `origins` and `resolutions` must be equal",22:"Either `tileSize` or `tileSizes` must be configured, never both",24:"Invalid extent or geometry provided as `geometry`",25:"Cannot fit empty extent provided as `geometry`",26:"Features must have an id set",27:"Features must have an id set",28:'`renderMode` must be `"hybrid"` or `"vector"`',30:"The passed `feature` was already added to the source",31:"Tried to enqueue an `element` that was already added to the queue",32:"Transformation matrix cannot be inverted",33:"Invalid units",34:"Invalid geometry layout",36:"Unknown SRS type",37:"Unknown geometry type found",38:"`styleMapValue` has an unknown type",39:"Unknown geometry type",40:"Expected `feature` to have a geometry",41:"Expected an `ol/style/Style` or an array of `ol/style/Style.js`",42:"Question unknown, the answer is 42",43:"Expected `layers` to be an array or a `Collection`",47:"Expected `controls` to be an array or an `ol/Collection`",48:"Expected `interactions` to be an array or an `ol/Collection`",49:"Expected `overlays` to be an array or an `ol/Collection`",50:"`options.featureTypes` should be an Array",51:"Either `url` or `tileJSON` options must be provided",52:"Unknown `serverType` configured",53:"Unknown `tierSizeCalculation` configured",55:"The {-y} placeholder requires a tile grid with extent",56:"mapBrowserEvent must originate from a pointer event",57:"At least 2 conditions are required",59:"Invalid command found in the PBF",60:"Missing or invalid `size`",61:"Cannot determine IIIF Image API version from provided image information JSON",62:"A `WebGLArrayBuffer` must either be of type `ELEMENT_ARRAY_BUFFER` or `ARRAY_BUFFER`",64:"Layer opacity must be a number",66:"`forEachFeatureAtCoordinate` cannot be used on a WebGL layer if the hit detection logic has not been enabled. This is done by providing adequate shaders using the `hitVertexShader` and `hitFragmentShader` properties of `WebGLPointsLayerRenderer`",67:"A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both",68:"A VectorTile source can only be rendered if it has a projection compatible with the view projection"};class y extends Error{constructor(t){const e=p[t];super(e),this.code=t,this.name="AssertionError",this.message=e}}var f=y;function m(t,e,i){return Math.min(Math.max(t,e),i)}const v=/^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i,_=/^([a-z]*)$|^hsla?\(.*\)$/i,C=function(){const t={};let e=0;return function(i){let s;if(t.hasOwnProperty(i))s=t[i];else{if(e>=1024){let i=0;for(const s in t)0==(3&i++)&&(delete t[s],--e)}s=function(t){let e,i,s,o,n;if(_.exec(t)&&(t=function(t){const e=document.createElement("div");if(e.style.color=t,""!==e.style.color){document.body.appendChild(e);const t=getComputedStyle(e).color;return document.body.removeChild(e),t}return""}(t)),v.exec(t)){const r=t.length-1;let a;a=r<=4?1:2;const l=4===r||8===r;e=parseInt(t.substr(1+0*a,a),16),i=parseInt(t.substr(1+1*a,a),16),s=parseInt(t.substr(1+2*a,a),16),o=l?parseInt(t.substr(1+3*a,a),16):255,1==a&&(e=(e<<4)+e,i=(i<<4)+i,s=(s<<4)+s,l&&(o=(o<<4)+o)),n=[e,i,s,o/255]}else t.startsWith("rgba(")?(n=t.slice(5,-1).split(",").map(Number),P(n)):t.startsWith("rgb(")?(n=t.slice(4,-1).split(",").map(Number),n.push(1),P(n)):function(t,e){throw new f(14)}();return n}(i),t[i]=s,++e}return s}}();function P(t){return t[0]=m(t[0]+.5|0,0,255),t[1]=m(t[1]+.5|0,0,255),t[2]=m(t[2]+.5|0,0,255),t[3]=m(t[3],0,1),t}function x(t){return Array.isArray(t)?function(t){let e=t[0];e!=(0|e)&&(e=e+.5|0);let i=t[1];i!=(0|i)&&(i=i+.5|0);let s=t[2];return s!=(0|s)&&(s=s+.5|0),"rgba("+e+","+i+","+s+","+(void 0===t[3]?1:Math.round(100*t[3])/100)+")"}(t):t}const w="undefined"!=typeof navigator&&void 0!==navigator.userAgent?navigator.userAgent.toLowerCase():"";w.includes("firefox"),w.includes("safari")&&!w.includes("chrom")&&(w.includes("version/15.4")||/cpu (os|iphone os) 15_4 like mac os x/.test(w)),w.includes("webkit")&&w.includes("edge"),w.includes("macintosh");const M="undefined"!=typeof WorkerGlobalScope&&"undefined"!=typeof OffscreenCanvas&&self instanceof WorkerGlobalScope;function E(t,e,i,s){let o;return o=i&&i.length?i.shift():M?new OffscreenCanvas(t||300,e||300):document.createElement("canvas"),t&&(o.width=t),e&&(o.height=e),o.getContext("2d",s)}!function(){let t=!1;try{const e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("_",null,e),window.removeEventListener("_",null,e)}catch(t){}}();var S=class{constructor(t){this.type=t,this.target=null}preventDefault(){this.defaultPrevented=!0}stopPropagation(){this.propagationStopped=!0}},b=class{constructor(){this.disposed=!1}dispose(){this.disposed||(this.disposed=!0,this.disposeInternal())}disposeInternal(){}};function I(){}function k(t){for(const e in t)delete t[e]}var D=class extends b{constructor(t){super(),this.eventTarget_=t,this.pendingRemovals_=null,this.dispatching_=null,this.listeners_=null}addEventListener(t,e){if(!t||!e)return;const i=this.listeners_||(this.listeners_={}),s=i[t]||(i[t]=[]);s.includes(e)||s.push(e)}dispatchEvent(t){const e="string"==typeof t,i=e?t:t.type,s=this.listeners_&&this.listeners_[i];if(!s)return;const o=e?new S(t):t;o.target||(o.target=this.eventTarget_||this);const n=this.dispatching_||(this.dispatching_={}),r=this.pendingRemovals_||(this.pendingRemovals_={});let a;i in n||(n[i]=0,r[i]=0),++n[i];for(let t=0,e=s.length;t<e;++t)if(a="handleEvent"in s[t]?s[t].handleEvent(o):s[t].call(this,o),!1===a||o.propagationStopped){a=!1;break}if(0==--n[i]){let t=r[i];for(delete r[i];t--;)this.removeEventListener(i,I);delete n[i]}return a}disposeInternal(){this.listeners_&&k(this.listeners_)}getListeners(t){return this.listeners_&&this.listeners_[t]||void 0}hasListener(t){return!!this.listeners_&&(t?t in this.listeners_:Object.keys(this.listeners_).length>0)}removeEventListener(t,e){const i=this.listeners_&&this.listeners_[t];if(i){const s=i.indexOf(e);-1!==s&&(this.pendingRemovals_&&t in this.pendingRemovals_?(i[s]=I,++this.pendingRemovals_[t]):(i.splice(s,1),0===i.length&&delete this.listeners_[t]))}}};function O(t,e,i,s,o){if(s&&s!==t&&(i=i.bind(s)),o){const s=i;i=function(){t.removeEventListener(e,i),s.apply(this,arguments)}}const n={target:t,type:e,listener:i};return t.addEventListener(e,i),n}function L(t,e,i,s){return O(t,e,i,s,!0)}function F(t){t&&t.target&&(t.target.removeEventListener(t.type,t.listener),k(t))}var W=class extends D{constructor(){super(),this.on=this.onInternal,this.once=this.onceInternal,this.un=this.unInternal,this.revision_=0}changed(){++this.revision_,this.dispatchEvent("change")}getRevision(){return this.revision_}onInternal(t,e){if(Array.isArray(t)){const i=t.length,s=new Array(i);for(let o=0;o<i;++o)s[o]=O(this,t[o],e);return s}return O(this,t,e)}onceInternal(t,e){let i;if(Array.isArray(t)){const s=t.length;i=new Array(s);for(let o=0;o<s;++o)i[o]=L(this,t[o],e)}else i=L(this,t,e);return e.ol_key=i,i}unInternal(t,e){const i=e.ol_key;if(i)!function(t){if(Array.isArray(t))for(let e=0,i=t.length;e<i;++e)F(t[e]);else F(t)}(i);else if(Array.isArray(t))for(let i=0,s=t.length;i<s;++i)this.removeEventListener(t[i],e);else this.removeEventListener(t,e)}};class B extends S{constructor(t,e,i){super(t),this.key=e,this.oldValue=i}}const G="#000",A="round";new class extends W{constructor(t){super(),this.ol_uid||(this.ol_uid=String(++c)),this.values_=null,void 0!==t&&this.setProperties(t)}get(t){let e;return this.values_&&this.values_.hasOwnProperty(t)&&(e=this.values_[t]),e}getKeys(){return this.values_&&Object.keys(this.values_)||[]}getProperties(){return this.values_&&Object.assign({},this.values_)||{}}hasProperties(){return!!this.values_}notify(t,e){let i;i=`change:${t}`,this.hasListener(i)&&this.dispatchEvent(new B(i,t,e)),i="propertychange",this.hasListener(i)&&this.dispatchEvent(new B(i,t,e))}addChangeListener(t,e){this.addEventListener(`change:${t}`,e)}removeChangeListener(t,e){this.removeEventListener(`change:${t}`,e)}set(t,e,i){const s=this.values_||(this.values_={});if(i)s[t]=e;else{const i=s[t];s[t]=e,i!==e&&this.notify(t,i)}}setProperties(t,e){for(const i in t)this.set(i,t[i],e)}applyProperties(t){t.values_&&Object.assign(this.values_||(this.values_={}),t.values_)}unset(t,e){if(this.values_&&t in this.values_){const i=this.values_[t];delete this.values_[t],function(t){let e;for(e in t)return!1;return!e}(this.values_)&&(this.values_=null),e||this.notify(t,i)}}};class j extends g{constructor(t){super({opacity:1,rotateWithView:void 0!==t.rotateWithView&&t.rotateWithView,rotation:void 0!==t.rotation?t.rotation:0,scale:void 0!==t.scale?t.scale:1,displacement:void 0!==t.displacement?t.displacement:[0,0],declutterMode:t.declutterMode}),this.canvas_=void 0,this.hitDetectionCanvas_=null,this.fill_=void 0!==t.fill?t.fill:null,this.origin_=[0,0],this.points_=t.points,this.radius_=void 0!==t.radius?t.radius:t.radius1,this.radius2_=t.radius2,this.angle_=void 0!==t.angle?t.angle:0,this.stroke_=void 0!==t.stroke?t.stroke:null,this.size_=null,this.renderOptions_=null,this.render()}clone(){const t=this.getScale(),e=new j({fill:this.getFill()?this.getFill().clone():void 0,points:this.getPoints(),radius:this.getRadius(),radius2:this.getRadius2(),angle:this.getAngle(),stroke:this.getStroke()?this.getStroke().clone():void 0,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),scale:Array.isArray(t)?t.slice():t,displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()});return e.setOpacity(this.getOpacity()),e}getAnchor(){const t=this.size_;if(!t)return null;const e=this.getDisplacement(),i=this.getScaleArray();return[t[0]/2-e[0]/i[0],t[1]/2+e[1]/i[1]]}getAngle(){return this.angle_}getFill(){return this.fill_}setFill(t){this.fill_=t,this.render()}getHitDetectionImage(){return this.hitDetectionCanvas_||this.createHitDetectionCanvas_(this.renderOptions_),this.hitDetectionCanvas_}getImage(t){let e=this.canvas_[t];if(!e){const i=this.renderOptions_,s=E(i.size*t,i.size*t);this.draw_(i,s,t),e=s.canvas,this.canvas_[t]=e}return e}getPixelRatio(t){return t}getImageSize(){return this.size_}getImageState(){return 2}getOrigin(){return this.origin_}getPoints(){return this.points_}getRadius(){return this.radius_}getRadius2(){return this.radius2_}getSize(){return this.size_}getStroke(){return this.stroke_}setStroke(t){this.stroke_=t,this.render()}listenImageChange(t){}load(){}unlistenImageChange(t){}calculateLineJoinSize_(t,e,i){if(0===e||Infinity===this.points_||"bevel"!==t&&"miter"!==t)return e;let s=this.radius_,o=void 0===this.radius2_?s:this.radius2_;if(s<o){const t=s;s=o,o=t}const n=2*Math.PI/(void 0===this.radius2_?this.points_:2*this.points_),r=o*Math.sin(n),a=s-Math.sqrt(o*o-r*r),l=Math.sqrt(r*r+a*a),h=l/r;if("miter"===t&&h<=i)return h*e;const c=e/2/h,d=e/2*(a/l),u=Math.sqrt((s+c)*(s+c)+d*d)-s;if(void 0===this.radius2_||"bevel"===t)return 2*u;const g=s*Math.sin(n),p=o-Math.sqrt(s*s-g*g),y=Math.sqrt(g*g+p*p)/g;return y<=i?2*Math.max(u,y*e/2-o-s):2*u}createRenderOptions(){let t,e=A,i=0,s=null,o=0,n=0;this.stroke_&&(t=this.stroke_.getColor(),null===t&&(t="#000"),t=x(t),n=this.stroke_.getWidth(),void 0===n&&(n=1),s=this.stroke_.getLineDash(),o=this.stroke_.getLineDashOffset(),e=this.stroke_.getLineJoin(),void 0===e&&(e=A),i=this.stroke_.getMiterLimit(),void 0===i&&(i=10));const r=this.calculateLineJoinSize_(e,n,i),a=Math.max(this.radius_,this.radius2_||0);return{strokeStyle:t,strokeWidth:n,size:Math.ceil(2*a+r),lineDash:s,lineDashOffset:o,lineJoin:e,miterLimit:i}}render(){this.renderOptions_=this.createRenderOptions();const t=this.renderOptions_.size;this.canvas_={},this.size_=[t,t]}draw_(t,e,i){if(e.scale(i,i),e.translate(t.size/2,t.size/2),this.createPath_(e),this.fill_){let t=this.fill_.getColor();null===t&&(t=G),e.fillStyle=x(t),e.fill()}this.stroke_&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.strokeWidth,t.lineDash&&(e.setLineDash(t.lineDash),e.lineDashOffset=t.lineDashOffset),e.lineJoin=t.lineJoin,e.miterLimit=t.miterLimit,e.stroke())}createHitDetectionCanvas_(t){if(this.fill_){let e=this.fill_.getColor(),i=0;if("string"==typeof e&&(e=function(t){return Array.isArray(t)?t:C(t)}(e)),null===e?i=1:Array.isArray(e)&&(i=4===e.length?e[3]:1),0===i){const e=E(t.size,t.size);this.hitDetectionCanvas_=e.canvas,this.drawHitDetectionCanvas_(t,e)}}this.hitDetectionCanvas_||(this.hitDetectionCanvas_=this.getImage(1))}createPath_(t){let e=this.points_;const i=this.radius_;if(Infinity===e)t.arc(0,0,i,0,2*Math.PI);else{const s=void 0===this.radius2_?i:this.radius2_;void 0!==this.radius2_&&(e*=2);const o=this.angle_-Math.PI/2,n=2*Math.PI/e;for(let r=0;r<e;r++){const e=o+r*n,a=r%2==0?i:s;t.lineTo(a*Math.cos(e),a*Math.sin(e))}t.closePath()}}drawHitDetectionCanvas_(t,e){e.translate(t.size/2,t.size/2),this.createPath_(e),e.fillStyle=G,e.fill(),this.stroke_&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.strokeWidth,t.lineDash&&(e.setLineDash(t.lineDash),e.lineDashOffset=t.lineDashOffset),e.lineJoin=t.lineJoin,e.miterLimit=t.miterLimit,e.stroke())}}var T=j;class R extends T{constructor(t){super({points:Infinity,fill:(t=t||{radius:5}).fill,radius:t.radius,stroke:t.stroke,scale:void 0!==t.scale?t.scale:1,rotation:void 0!==t.rotation?t.rotation:0,rotateWithView:void 0!==t.rotateWithView&&t.rotateWithView,displacement:void 0!==t.displacement?t.displacement:[0,0],declutterMode:t.declutterMode})}clone(){const t=this.getScale(),e=new R({fill:this.getFill()?this.getFill().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,radius:this.getRadius(),scale:Array.isArray(t)?t.slice():t,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()});return e.setOpacity(this.getOpacity()),e}setRadius(t){this.radius_=t,this.render()}}var U=R;class N{constructor(t){this.color_=void 0!==(t=t||{}).color?t.color:null}clone(){const t=this.getColor();return new N({color:Array.isArray(t)?t.slice():t||void 0})}getColor(){return this.color_}setColor(t){this.color_=t}}var X=N;class Y{constructor(t){this.color_=void 0!==(t=t||{}).color?t.color:null,this.lineCap_=t.lineCap,this.lineDash_=void 0!==t.lineDash?t.lineDash:null,this.lineDashOffset_=t.lineDashOffset,this.lineJoin_=t.lineJoin,this.miterLimit_=t.miterLimit,this.width_=t.width}clone(){const t=this.getColor();return new Y({color:Array.isArray(t)?t.slice():t||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()})}getColor(){return this.color_}getLineCap(){return this.lineCap_}getLineDash(){return this.lineDash_}getLineDashOffset(){return this.lineDashOffset_}getLineJoin(){return this.lineJoin_}getMiterLimit(){return this.miterLimit_}getWidth(){return this.width_}setColor(t){this.color_=t}setLineCap(t){this.lineCap_=t}setLineDash(t){this.lineDash_=t}setLineDashOffset(t){this.lineDashOffset_=t}setLineJoin(t){this.lineJoin_=t}setMiterLimit(t){this.miterLimit_=t}setWidth(t){this.width_=t}}var z=Y;class J{constructor(t){t=t||{},this.geometry_=null,this.geometryFunction_=$,void 0!==t.geometry&&this.setGeometry(t.geometry),this.fill_=void 0!==t.fill?t.fill:null,this.image_=void 0!==t.image?t.image:null,this.renderer_=void 0!==t.renderer?t.renderer:null,this.hitDetectionRenderer_=void 0!==t.hitDetectionRenderer?t.hitDetectionRenderer:null,this.stroke_=void 0!==t.stroke?t.stroke:null,this.text_=void 0!==t.text?t.text:null,this.zIndex_=t.zIndex}clone(){let t=this.getGeometry();return t&&"object"==typeof t&&(t=t.clone()),new J({geometry:t,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,renderer:this.getRenderer(),stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})}getRenderer(){return this.renderer_}setRenderer(t){this.renderer_=t}setHitDetectionRenderer(t){this.hitDetectionRenderer_=t}getHitDetectionRenderer(){return this.hitDetectionRenderer_}getGeometry(){return this.geometry_}getGeometryFunction(){return this.geometryFunction_}getFill(){return this.fill_}setFill(t){this.fill_=t}getImage(){return this.image_}setImage(t){this.image_=t}getStroke(){return this.stroke_}setStroke(t){this.stroke_=t}getText(){return this.text_}setText(t){this.text_=t}getZIndex(){return this.zIndex_}setGeometry(t){"function"==typeof t?this.geometryFunction_=t:"string"==typeof t?this.geometryFunction_=function(e){return e.get(t)}:t?void 0!==t&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=$,this.geometry_=t}setZIndex(t){this.zIndex_=t}}function $(t){return t.getGeometry()}var K=J;const V={radians:6370997/(2*Math.PI),degrees:2*Math.PI*6370997/360,ft:.3048,m:1,"us-ft":1200/3937};var Z=class{constructor(t){this.code_=t.code,this.units_=t.units,this.extent_=void 0!==t.extent?t.extent:null,this.worldExtent_=void 0!==t.worldExtent?t.worldExtent:null,this.axisOrientation_=void 0!==t.axisOrientation?t.axisOrientation:"enu",this.global_=void 0!==t.global&&t.global,this.canWrapX_=!(!this.global_||!this.extent_),this.getPointResolutionFunc_=t.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=t.metersPerUnit}canWrapX(){return this.canWrapX_}getCode(){return this.code_}getExtent(){return this.extent_}getUnits(){return this.units_}getMetersPerUnit(){return this.metersPerUnit_||V[this.units_]}getWorldExtent(){return this.worldExtent_}getAxisOrientation(){return this.axisOrientation_}isGlobal(){return this.global_}setGlobal(t){this.global_=t,this.canWrapX_=!(!t||!this.extent_)}getDefaultTileGrid(){return this.defaultTileGrid_}setDefaultTileGrid(t){this.defaultTileGrid_=t}setExtent(t){this.extent_=t,this.canWrapX_=!(!this.global_||!t)}setWorldExtent(t){this.worldExtent_=t}setGetPointResolution(t){this.getPointResolutionFunc_=t}getPointResolutionFunc(){return this.getPointResolutionFunc_}};const q=6378137,H=Math.PI*q,Q=[-H,-H,H,H],tt=[-180,-85,180,85],et=q*Math.log(Math.tan(Math.PI/2));class it extends Z{constructor(t){super({code:t,units:"m",extent:Q,global:!0,worldExtent:tt,getPointResolution:function(t,e){return t/Math.cosh(e[1]/q)}})}}const st=[new it("EPSG:3857"),new it("EPSG:102100"),new it("EPSG:102113"),new it("EPSG:900913"),new it("http://www.opengis.net/def/crs/EPSG/0/3857"),new it("http://www.opengis.net/gml/srs/epsg.xml#3857")],ot=[-180,-90,180,90],nt=6378137*Math.PI/180;class rt extends Z{constructor(t,e){super({code:t,units:"degrees",extent:ot,axisOrientation:e,global:!0,metersPerUnit:nt,worldExtent:ot})}}const at=[new rt("CRS:84"),new rt("EPSG:4326","neu"),new rt("urn:ogc:def:crs:OGC:1.3:CRS84"),new rt("urn:ogc:def:crs:OGC:2:84"),new rt("http://www.opengis.net/def/crs/OGC/1.3/CRS84"),new rt("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new rt("http://www.opengis.net/def/crs/EPSG/0/4326","neu")];let lt={},ht={};function ct(t,e,i){const s=t.getCode(),o=e.getCode();s in ht||(ht[s]={}),ht[s][o]=i}function dt(t,e,i){if(void 0!==e)for(let i=0,s=t.length;i<s;++i)e[i]=t[i];else e=t.slice();return e}function ut(t,e,i){if(void 0!==e&&t!==e){for(let i=0,s=t.length;i<s;++i)e[i]=t[i];t=e}return t}function gt(t){!function(t,e){lt[t]=e}(t.getCode(),t),ct(t,t,dt)}function pt(t){return"string"==typeof t?lt[e=t]||lt[e.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\w+)$/,"EPSG:$3")]||null:t||null;var e}function yt(t){!function(t){t.forEach(gt)}(t),t.forEach(function(e){t.forEach(function(t){e!==t&&ct(e,t,dt)})})}function ft(t,e,i){const s=function(t,e){return function(t,e){let i=function(t,e){let i;return t in ht&&e in ht[t]&&(i=ht[t][e]),i}(t.getCode(),e.getCode());return i||(i=ut),i}(pt(t),pt(e))}(e,i);return s(t,void 0,t.length)}var mt,vt,_t;yt(st),yt(at),mt=st,vt=function(t,e,i){const s=t.length;i=i>1?i:2,void 0===e&&(e=i>2?t.slice():new Array(s));for(let o=0;o<s;o+=i){e[o]=H*t[o]/180;let i=q*Math.log(Math.tan(Math.PI*(+t[o+1]+90)/360));i>et?i=et:i<-et&&(i=-et),e[o+1]=i}return e},_t=function(t,e,i){const s=t.length;i=i>1?i:2,void 0===e&&(e=i>2?t.slice():new Array(s));for(let o=0;o<s;o+=i)e[o]=180*t[o]/H,e[o+1]=360*Math.atan(Math.exp(t[o+1]/q))/Math.PI-90;return e},at.forEach(function(t){mt.forEach(function(e){ct(t,e,vt),ct(e,t,_t)})});class Ct extends o{constructor(t){super(t),this._lib=void 0,this._map=void 0,this._container=void 0,this._projection="EPSG:3857",this._vectorSource=void 0,this._geoJSONReader=void 0,this._map=t.map,this._lib=t.lib,this._container=this._map.getViewport(),this._container.setAttribute("tabindex","0")}hexToRGB(t){return{r:parseInt(t.slice(1,3),16),g:parseInt(t.slice(3,5),16),b:parseInt(t.slice(5,7),16)}}getStyles(t,e){const i=t.getGeometry();if(i)return{Point:t=>{const i=t.getProperties(),s=e[i.mode]({type:"Feature",geometry:{type:"Point",coordinates:[]},properties:i});return new this._lib.Style({image:new U({radius:s.pointWidth,fill:new X({color:s.pointColor}),stroke:new z({color:s.pointOutlineColor,width:s.pointOutlineWidth})})})},LineString:t=>{const i=t.getProperties(),s=e[i.mode]({type:"Feature",geometry:{type:"LineString",coordinates:[]},properties:i});return new this._lib.Style({stroke:new this._lib.Stroke({color:s.lineStringColor,width:s.lineStringWidth})})},Polygon:t=>{const i=t.getProperties(),s=e[i.mode]({type:"Feature",geometry:{type:"LineString",coordinates:[]},properties:i}),{r:o,g:n,b:r}=this.hexToRGB(s.polygonFillColor);return new K({stroke:new z({color:s.polygonOutlineColor,width:s.polygonOutlineWidth}),fill:new X({color:`rgba(${o},${n},${r},${s.polygonFillOpacity})`})})}}[i.getType()](t)}addFeature(t){if(!this._vectorSource||!this._geoJSONReader)throw new Error("Vector Source not initalised");{const e=this._geoJSONReader.readFeature(t,{featureProjection:this._projection});this._vectorSource.addFeature(e)}}removeFeature(t){if(!this._vectorSource)throw new Error("Vector Source not initalised");{const e=this._vectorSource.getFeatureById(t);if(!e)return;this._vectorSource.removeFeature(e)}}getLngLatFromEvent(t){const e=this.getMapContainer();return this.unproject(t.clientX-e.offsetLeft,t.clientY-e.offsetTop)}getMapContainer(){return this._container}setDraggability(t){this._map.getInteractions().forEach(e=>{"DragPan"===e.constructor.name&&e.setActive(t)})}project(t,e){const[i,s]=this._map.getPixelFromCoordinate(ft([t,e],"EPSG:4326","EPSG:3857"));return{x:i,y:s}}unproject(t,e){const[i,s]=function(t,e){const i=ft(t,"EPSG:3857","EPSG:4326"),s=i[0];return(s<-180||s>180)&&(i[0]=function(t,e){const i=t%360;return 360*i<0?i+360:i}(s+180)-180),i}(this._map.getCoordinateFromPixel([t,e]));return{lng:i,lat:s}}setCursor(t){"unset"===t?this.getMapContainer().style.removeProperty("cursor"):this.getMapContainer().style.cursor=t}setDoubleClickToZoom(t){this._map.getInteractions().forEach(function(e){"DoubleClickZoom"===e.constructor.name&&e.setActive(t)})}render(t,e){if(this._vectorSource){if(!this._vectorSource)throw new Error("Vector Layer source has disappeared");t.deletedIds.forEach(t=>{this.removeFeature(t)}),t.updated.forEach(t=>{this.removeFeature(t.id),this.addFeature(t)}),t.created.forEach(t=>{this.addFeature(t)})}else{this._geoJSONReader=new this._lib.GeoJSON;const i=this._geoJSONReader.readFeatures({type:"FeatureCollection",features:[...t.created,...t.updated,...t.unchanged]},{featureProjection:this._projection}),s=new this._lib.VectorSource({features:i});this._vectorSource=s;const o=new this._lib.VectorLayer({source:s,style:t=>this.getStyles(t,e)});this._map.addLayer(o)}}}class Pt{get state(){return this._state}set state(t){throw new Error("Please use the modes lifecycle methods")}get styles(){return this._styles}set styles(t){if("object"!=typeof t)throw new Error("Styling must be an object");this.onStyleChange([],"styling"),this._styles=t}registerBehaviors(t){}constructor(e){this._state=void 0,this._styles=void 0,this.behaviors=[],this.pointerDistance=void 0,this.coordinatePrecision=void 0,this.onStyleChange=void 0,this.store=void 0,this.setDoubleClickToZoom=void 0,this.unproject=void 0,this.project=void 0,this.setCursor=void 0,this._state="unregistered",this._styles=e&&e.styles?t({},e.styles):{},this.pointerDistance=e&&e.pointerDistance||40,this.coordinatePrecision=e&&e.coordinatePrecision||9}setDrawing(){if("started"!==this._state)throw new Error("Mode must be unregistered or stopped to start");this._state="drawing"}setStarted(){if("stopped"!==this._state&&"registered"!==this._state&&"drawing"!==this._state)throw new Error("Mode must be unregistered or stopped to start");this._state="started",this.setDoubleClickToZoom(!1)}setStopped(){if("started"!==this._state)throw new Error("Mode must be started to be stopped");this._state="stopped",this.setDoubleClickToZoom(!0)}register(t){if("unregistered"!==this._state)throw new Error("Can not register unless mode is unregistered");this._state="registered",this.store=t.store,this.store.registerOnChange(t.onChange),this.setDoubleClickToZoom=t.setDoubleClickToZoom,this.project=t.project,this.unproject=t.unproject,this.onSelect=t.onSelect,this.onDeselect=t.onDeselect,this.setCursor=t.setCursor,this.onStyleChange=t.onChange,this.registerBehaviors({mode:t.mode,store:this.store,project:this.project,unproject:this.unproject,pointerDistance:this.pointerDistance,coordinatePrecision:this.coordinatePrecision})}onDeselect(t){}onSelect(t){}styleFeature(t){}}function xt(t,e){const i=t=>t*Math.PI/180,s=i(t[1]),o=i(t[0]),n=i(e[1]),r=n-s,a=i(e[0])-o,l=Math.sin(r/2)*Math.sin(r/2)+Math.cos(s)*Math.cos(n)*Math.sin(a/2)*Math.sin(a/2);return 2*Math.atan2(Math.sqrt(l),Math.sqrt(1-l))*6371e3/1e3}function wt(t){return t%360*Math.PI/180}function Mt(t){return t%(2*Math.PI)*180/Math.PI}function Et(t,e,i){const s=wt(t[0]),o=wt(t[1]),n=wt(i),r=function(t){return t/6371.0088}(e),a=Math.asin(Math.sin(o)*Math.cos(r)+Math.cos(o)*Math.sin(r)*Math.cos(n));return[Mt(s+Math.atan2(Math.sin(n)*Math.sin(r)*Math.cos(o),Math.cos(r)-Math.sin(o)*Math.sin(a))),Mt(a)]}function St(t){const{center:i,radiusKilometers:s,coordinatePrecision:o}=t,n=t.steps?t.steps:64,r=[];for(let t=0;t<n;t++){const a=Et(i,s,-360*t/n);r.push([e(a[0],o),e(a[1],o)])}return r.push(r[0]),{type:"Feature",geometry:{type:"Polygon",coordinates:[r]},properties:{}}}class bt extends Pt{constructor(e){if(super(e),this.mode="circle",this.center=void 0,this.clickCount=0,this.currentCircleId=void 0,this.keyEvents=void 0,null===(null==e?void 0:e.keyEvents))this.keyEvents={cancel:null,finish:null};else{const i={cancel:"Escape",finish:"Enter"};this.keyEvents=e&&e.keyEvents?t({},i,e.keyEvents):i}}close(){this.center=void 0,this.currentCircleId=void 0,this.clickCount=0,"drawing"===this.state&&this.setStarted()}start(){this.setStarted(),this.setCursor("crosshair")}stop(){this.cleanUp(),this.setStopped(),this.setCursor("unset")}onClick(t){if(0===this.clickCount){this.center=[t.lng,t.lat];const e=St({center:this.center,radiusKilometers:1e-5,coordinatePrecision:this.coordinatePrecision}),[i]=this.store.create([{geometry:e.geometry,properties:{mode:this.mode}}]);this.currentCircleId=i,this.clickCount++,this.setDrawing()}else this.close()}onMouseMove(t){if(1===this.clickCount&&this.center&&this.currentCircleId){const e=xt(this.center,[t.lng,t.lat]),i=St({center:this.center,radiusKilometers:e,coordinatePrecision:this.coordinatePrecision});this.store.updateGeometry([{id:this.currentCircleId,geometry:i.geometry}])}}onKeyDown(){}onKeyUp(t){t.key===this.keyEvents.cancel?this.cleanUp():t.key===this.keyEvents.finish&&this.close()}onDragStart(){}onDrag(){}onDragEnd(){}cleanUp(){try{this.currentCircleId&&this.store.delete([this.currentCircleId])}catch(t){}this.center=void 0,this.currentCircleId=void 0,this.clickCount=0,"drawing"===this.state&&this.setStarted()}styleFeature(e){const i=t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0});return"Feature"===e.type&&"Polygon"===e.geometry.type&&e.properties.mode===this.mode?(this.styles.fillColor&&(i.polygonFillColor=this.styles.fillColor),this.styles.outlineColor&&(i.polygonOutlineColor=this.styles.outlineColor),this.styles.outlineWidth&&(i.polygonOutlineWidth=this.styles.outlineWidth),this.styles.fillOpacity&&(i.polygonFillOpacity=this.styles.fillOpacity),i):i}}class It extends Pt{constructor(e){if(super(e),this.mode="freehand",this.startingClick=!1,this.currentId=void 0,this.closingPointId=void 0,this.minDistance=void 0,this.keyEvents=void 0,this.minDistance=e&&e.minDistance||20,null===(null==e?void 0:e.keyEvents))this.keyEvents={cancel:null,finish:null};else{const i={cancel:"Escape",finish:"Enter"};this.keyEvents=e&&e.keyEvents?t({},i,e.keyEvents):i}}close(){this.closingPointId&&this.store.delete([this.closingPointId]),this.startingClick=!1,this.currentId=void 0,this.closingPointId=void 0,"drawing"===this.state&&this.setStarted()}start(){this.setStarted(),this.setCursor("crosshair")}stop(){this.cleanUp(),this.setStopped(),this.setCursor("unset")}onMouseMove(t){if(!this.currentId||!1===this.startingClick)return;const e=this.store.getGeometryCopy(this.currentId),[s,o]=e.coordinates[0][e.coordinates[0].length-2],{x:n,y:r}=this.project(s,o),a=i({x:n,y:r},{x:t.containerX,y:t.containerY}),[l,h]=e.coordinates[0][0],{x:c,y:d}=this.project(l,h),u=i({x:c,y:d},{x:t.containerX,y:t.containerY});this.setCursor(u<this.pointerDistance?"pointer":"crosshair"),a<this.minDistance||(e.coordinates[0].pop(),this.store.updateGeometry([{id:this.currentId,geometry:{type:"Polygon",coordinates:[[...e.coordinates[0],[t.lng,t.lat],e.coordinates[0][0]]]}}]))}onClick(t){if(!1===this.startingClick){const[e,i]=this.store.create([{geometry:{type:"Polygon",coordinates:[[[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat]]]},properties:{mode:this.mode}},{geometry:{type:"Point",coordinates:[t.lng,t.lat]},properties:{mode:this.mode}}]);return this.currentId=e,this.closingPointId=i,this.startingClick=!0,void this.setDrawing()}this.close()}onKeyDown(){}onKeyUp(t){t.key===this.keyEvents.cancel?this.cleanUp():t.key===this.keyEvents.finish&&this.close()}onDragStart(){}onDrag(){}onDragEnd(){}cleanUp(){try{this.currentId&&this.store.delete([this.currentId]),this.closingPointId&&this.store.delete([this.closingPointId])}catch(t){}this.closingPointId=void 0,this.currentId=void 0,this.startingClick=!1,"drawing"===this.state&&this.setStarted()}styleFeature(e){const i=t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0});return"Feature"===e.type&&"Polygon"===e.geometry.type&&e.properties.mode===this.mode?(this.styles.fillColor&&(i.polygonFillColor=this.styles.fillColor),this.styles.outlineColor&&(i.polygonOutlineColor=this.styles.outlineColor),this.styles.outlineWidth&&(i.polygonOutlineWidth=this.styles.outlineWidth),this.styles.fillOpacity&&(i.polygonFillOpacity=this.styles.fillOpacity),i):"Feature"===e.type&&"Point"===e.geometry.type&&e.properties.mode===this.mode?(this.styles.closingPointColor&&(i.pointColor=this.styles.closingPointColor),this.styles.closingPointWidth&&(i.pointWidth=this.styles.closingPointWidth),i.pointOutlineColor=void 0!==this.styles.closingPointOutlineColor?this.styles.closingPointOutlineColor:"#ffffff",i.pointOutlineWidth=void 0!==this.styles.closingPointOutlineWidth?this.styles.closingPointOutlineWidth:2,i):i}}const kt=Math.PI/180,Dt=180/Math.PI;class Ot{constructor(t){this.coordinatePrecision=void 0,this.coords=void 0,this.length=void 0,this.coordinatePrecision=t,this.coords=[],this.length=0}moveTo(t){this.length++,this.coords.push([e(t[0],this.coordinatePrecision),e(t[1],this.coordinatePrecision)])}}class Lt{constructor({properties:t}){this.geometries=void 0,this.properties=void 0,this.properties=t||{},this.geometries=[]}toJSON(){if(1===this.geometries.length){const t=this.geometries[0].coords;if(t[0][0]&&!isNaN(t[0][0])&&t[0][1]&&!isNaN(t[0][1]))return{geometry:{type:"LineString",coordinates:t},type:"Feature",properties:this.properties}}return null}}class Ft{constructor(t,e,i){if(this.g=void 0,this.start=void 0,this.end=void 0,this.properties=void 0,!t||void 0===t[0]||void 0===t[1])throw new Error("GreatCircle constructor expects two args: start and end objects with x and y properties");if(!e||void 0===e[0]||void 0===e[1])throw new Error("GreatCircle constructor expects two args: start and end objects with x and y properties");this.start={lng:t[0],lat:t[1],x:kt*t[0],y:kt*t[1]},this.end={lng:e[0],lat:e[1],x:kt*e[0],y:kt*e[1]},this.properties=i||{};const s=this.start.x-this.end.x,o=Math.pow(Math.sin((this.start.y-this.end.y)/2),2)+Math.cos(this.start.y)*Math.cos(this.end.y)*Math.pow(Math.sin(s/2),2);if(this.g=2*Math.asin(Math.sqrt(o)),this.g===Math.PI)throw new Error(`it appears ${t} and ${e} are 'antipodal', e.g diametrically opposite, thus there is no single route but rather infinite`);if(isNaN(this.g))throw new Error(`could not calculate great circle between ${t} and ${e}`)}interpolate(t){const e=Math.sin((1-t)*this.g)/Math.sin(this.g),i=Math.sin(t*this.g)/Math.sin(this.g),s=e*Math.cos(this.start.y)*Math.cos(this.start.x)+i*Math.cos(this.end.y)*Math.cos(this.end.x),o=e*Math.cos(this.start.y)*Math.sin(this.start.x)+i*Math.cos(this.end.y)*Math.sin(this.end.x),n=e*Math.sin(this.start.y)+i*Math.sin(this.end.y),r=Dt*Math.atan2(n,Math.sqrt(Math.pow(s,2)+Math.pow(o,2)));return[Dt*Math.atan2(o,s),r]}arc(t,e){const i=[];if(!t||t<=2)i.push([this.start.lng,this.start.lat]),i.push([this.end.lng,this.end.lat]);else{const e=1/(t-1);for(let s=0;s<t;++s){const t=this.interpolate(e*s);i.push(t)}}let s=!1,o=0;const n=e&&e.offset?e.offset:10,r=180-n,a=-180+n,l=360-n;for(let t=1;t<i.length;++t){const e=i[t-1][0],n=i[t][0],h=Math.abs(n-e);h>l&&(n>r&&e<a||e>r&&n<a)?s=!0:h>o&&(o=h)}const h=[];if(s&&o<n){let t=[];h.push(t);for(let e=0;e<i.length;++e){const s=i[e][0];if(e>0&&Math.abs(s-i[e-1][0])>l){let o=i[e-1][0],n=i[e-1][1],l=i[e][0],c=i[e][1];if(o>-180&&o<a&&180===l&&e+1<i.length&&i[e-1][0]>-180&&i[e-1][0]<a){t.push([-180,i[e][1]]),e++,t.push([i[e][0],i[e][1]]);continue}if(o>r&&o<180&&-180===l&&e+1<i.length&&i[e-1][0]>r&&i[e-1][0]<180){t.push([180,i[e][1]]),e++,t.push([i[e][0],i[e][1]]);continue}if(o<a&&l>r){const t=o;o=l,l=t;const e=n;n=c,c=e}if(o>r&&l<a&&(l+=360),o<=180&&l>=180&&o<l){const s=(180-o)/(l-o),a=s*c+(1-s)*n;t.push([i[e-1][0]>r?180:-180,a]),t=[],t.push([i[e-1][0]>r?-180:180,a]),h.push(t)}else t=[],h.push(t);t.push([s,i[e][1]])}else t.push([i[e][0],i[e][1]])}}else{const t=[];h.push(t);for(let e=0;e<i.length;++e)t.push([i[e][0],i[e][1]])}const c=new Lt({properties:this.properties});for(let t=0;t<h.length;++t){const i=new Ot(e.coordinatePrecision);c.geometries.push(i);const s=h[t];for(let t=0;t<s.length;++t)i.moveTo(s[t])}return c}}class Wt{constructor({store:t,mode:e,project:i,unproject:s,pointerDistance:o,coordinatePrecision:n}){this.store=void 0,this.mode=void 0,this.project=void 0,this.unproject=void 0,this.pointerDistance=void 0,this.coordinatePrecision=void 0,this.store=t,this.mode=e,this.project=i,this.unproject=s,this.pointerDistance=o,this.coordinatePrecision=n}}class Bt extends Wt{constructor(t,e,i){super(t),this.config=void 0,this.pixelDistance=void 0,this.clickBoundingBox=void 0,this.getSnappableCoordinate=(t,e)=>this.getSnappableEnds(t,t=>Boolean(!t.properties||t.properties.mode!==this.mode||!e||t.id!==e)),this.config=t,this.pixelDistance=e,this.clickBoundingBox=i}getSnappableEnds(t,e){const i=this.clickBoundingBox.create(t),s=this.store.search(i,e),o={coord:void 0,minDist:Infinity};return s.forEach(e=>{let i;if("LineString"!==e.geometry.type)return;i=e.geometry.coordinates;const s=i[0],n=this.pixelDistance.measure(t,s);n<o.minDist&&n<this.pointerDistance&&(o.coord=s);const r=i[i.length-1],a=this.pixelDistance.measure(t,r);a<o.minDist&&a<this.pointerDistance&&(o.coord=r)}),o.coord}}class Gt extends Wt{constructor(t){super(t)}measure(t,e){const{x:s,y:o}=this.project(e[0],e[1]);return i({x:s,y:o},{x:t.containerX,y:t.containerY})}}class At extends Wt{constructor(t){super(t)}create(t){const{containerX:e,containerY:i}=t,s=this.pointerDistance/2;return{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[this.unproject(e-s,i-s),this.unproject(e+s,i-s),this.unproject(e+s,i+s),this.unproject(e-s,i+s),this.unproject(e-s,i-s)].map(t=>[t.lng,t.lat])]}}}}class jt extends Pt{constructor(e){if(super(e),this.mode="greatcircle",this.currentCoordinate=0,this.currentId=void 0,this.closingPointId=void 0,this.keyEvents=void 0,this.snappingEnabled=void 0,this.snapping=void 0,this.snappingEnabled=!(!e||void 0===e.snapping)&&e.snapping,null===(null==e?void 0:e.keyEvents))this.keyEvents={cancel:null,finish:null};else{const i={cancel:"Escape",finish:"Enter"};this.keyEvents=e&&e.keyEvents?t({},i,e.keyEvents):i}}close(){this.currentId&&(this.closingPointId&&this.store.delete([this.closingPointId]),this.currentCoordinate=0,this.currentId=void 0,this.closingPointId=void 0,"drawing"===this.state&&this.setStarted())}registerBehaviors(t){this.snapping=new Bt(t,new Gt(t),new At(t))}start(){this.setStarted(),this.setCursor("crosshair")}stop(){this.cleanUp(),this.setStopped(),this.setCursor("unset")}onMouseMove(t){if(this.setCursor("crosshair"),(this.currentId||0!==this.currentCoordinate)&&this.currentId&&1===this.currentCoordinate&&this.closingPointId){const e=this.currentId&&this.snappingEnabled&&this.snapping.getSnappableCoordinate(t,this.currentId)||[t.lng,t.lat];this.store.updateGeometry([{id:this.closingPointId,geometry:{type:"Point",coordinates:e}}]);const i=this.store.getGeometryCopy(this.currentId);i.coordinates.pop();const s=function({start:t,end:e,options:i}){const s=i||{};if("object"!=typeof s)throw new Error("options argument is invalid, must be of type object");const{properties:o={},numberOfPoints:n=100,offset:r=10,coordinatePrecision:a=9}=s;return new Ft(t,e,o).arc(n,{offset:r,coordinatePrecision:a}).toJSON()}({start:i.coordinates[0],end:e,options:{coordinatePrecision:this.coordinatePrecision}});s&&this.store.updateGeometry([{id:this.currentId,geometry:s.geometry}])}}onClick(t){if(0===this.currentCoordinate){const e=this.snappingEnabled&&this.snapping.getSnappableCoordinate(t)||[t.lng,t.lat],[i]=this.store.create([{geometry:{type:"LineString",coordinates:[e,e]},properties:{mode:this.mode}}]);this.currentId=i;const[s]=this.store.create([{geometry:{type:"Point",coordinates:e},properties:{mode:this.mode}}]);this.closingPointId=s,this.currentCoordinate++,this.setDrawing()}else 1===this.currentCoordinate&&this.currentId&&(this.setCursor("pointer"),this.close())}onKeyDown(){}onKeyUp(t){t.key===this.keyEvents.cancel&&this.cleanUp(),t.key===this.keyEvents.finish&&this.close()}onDragStart(){}onDrag(){}onDragEnd(){}cleanUp(){try{this.currentId&&this.store.delete([this.currentId]),this.closingPointId&&this.store.delete([this.closingPointId])}catch(t){}this.closingPointId=void 0,this.currentId=void 0,this.currentCoordinate=0,"drawing"===this.state&&this.setStarted()}styleFeature(e){const i=t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0});return"Feature"===e.type&&"LineString"===e.geometry.type&&e.properties.mode===this.mode?(this.styles.lineStringColor&&(i.lineStringColor=this.styles.lineStringColor),this.styles.lineStringWidth&&(i.lineStringWidth=this.styles.lineStringWidth),i):"Feature"===e.type&&"Point"===e.geometry.type&&e.properties.mode===this.mode?(this.styles.closingPointColor&&(i.pointColor=this.styles.closingPointColor),this.styles.closingPointWidth&&(i.pointWidth=this.styles.closingPointWidth),i.pointOutlineColor=void 0!==this.styles.closingPointOutlineColor?this.styles.closingPointOutlineColor:"#ffffff",i.pointOutlineWidth=void 0!==this.styles.closingPointOutlineWidth?this.styles.closingPointOutlineWidth:2,i):i}}function Tt(t){let e;if("Polygon"===t.geometry.type)e=t.geometry.coordinates;else{if("LineString"!==t.geometry.type)throw new Error("Self intersects only accepts Polygons and LineStrings");e=[t.geometry.coordinates]}const i=[];for(let t=0;t<e.length;t++)for(let i=0;i<e[t].length-1;i++)for(let s=0;s<e.length;s++)for(let n=0;n<e[s].length-1;n++)o(t,i,s,n);return i.length>0;function s(t){return t<0||t>1}function o(t,o,n,r){const a=e[t][o],l=e[t][o+1],h=e[n][r],c=e[n][r+1],d=function(t,e,i,s){if(Rt(t,i)||Rt(t,s)||Rt(e,i)||Rt(s,i))return null;const o=t[0],n=t[1],r=e[0],a=e[1],l=i[0],h=i[1],c=s[0],d=s[1],u=(o-r)*(h-d)-(n-a)*(l-c);return 0===u?null:[((o*a-n*r)*(l-c)-(o-r)*(l*d-h*c))/u,((o*a-n*r)*(h-d)-(n-a)*(l*d-h*c))/u]}(a,l,h,c);if(null===d)return;let u,g;u=l[0]!==a[0]?(d[0]-a[0])/(l[0]-a[0]):(d[1]-a[1])/(l[1]-a[1]),g=c[0]!==h[0]?(d[0]-h[0])/(c[0]-h[0]):(d[1]-h[1])/(c[1]-h[1]),s(u)||s(g)||(d.toString(),i.push(d))}}function Rt(t,e){return t[0]===e[0]&&t[1]===e[1]}class Ut extends Wt{constructor(t,e,i){super(t),this.config=void 0,this.pixelDistance=void 0,this.clickBoundingBox=void 0,this.getSnappableCoordinate=(t,e)=>this.getSnappable(t,t=>Boolean(t.properties&&t.properties.mode===this.mode&&t.id!==e)),this.config=t,this.pixelDistance=e,this.clickBoundingBox=i}getSnappable(t,e){const i=this.clickBoundingBox.create(t),s=this.store.search(i,e),o={coord:void 0,minDist:Infinity};return s.forEach(e=>{let i;if("Polygon"===e.geometry.type)i=e.geometry.coordinates[0];else{if("LineString"!==e.geometry.type)return;i=e.geometry.coordinates}i.forEach(e=>{const i=this.pixelDistance.measure(t,e);i<o.minDist&&i<this.pointerDistance&&(o.coord=e)})}),o.coord}}class Nt extends Pt{constructor(e){if(super(e),this.mode="linestring",this.currentCoordinate=0,this.currentId=void 0,this.closingPointId=void 0,this.allowSelfIntersections=void 0,this.keyEvents=void 0,this.snappingEnabled=void 0,this.mouseMove=!1,this.snapping=void 0,this.snappingEnabled=!(!e||void 0===e.snapping)&&e.snapping,this.allowSelfIntersections=!e||void 0===e.allowSelfIntersections||e.allowSelfIntersections,null===(null==e?void 0:e.keyEvents))this.keyEvents={cancel:null,finish:null};else{const i={cancel:"Escape",finish:"Enter"};this.keyEvents=e&&e.keyEvents?t({},i,e.keyEvents):i}}close(){if(!this.currentId)return;const t=this.store.getGeometryCopy(this.currentId);t.coordinates.pop(),this.store.updateGeometry([{id:this.currentId,geometry:{type:"LineString",coordinates:[...t.coordinates]}}]),this.closingPointId&&this.store.delete([this.closingPointId]),this.currentCoordinate=0,this.currentId=void 0,this.closingPointId=void 0,"drawing"===this.state&&this.setStarted()}registerBehaviors(t){this.snapping=new Ut(t,new Gt(t),new At(t))}start(){this.setStarted(),this.setCursor("crosshair")}stop(){this.cleanUp(),this.setStopped(),this.setCursor("unset")}onMouseMove(t){if(this.mouseMove=!0,this.setCursor("crosshair"),!this.currentId||0===this.currentCoordinate)return;const e=this.store.getGeometryCopy(this.currentId);e.coordinates.pop();const s=this.snappingEnabled&&this.snapping.getSnappableCoordinate(t,this.currentId)||[t.lng,t.lat];if(this.closingPointId){const[s,o]=e.coordinates[e.coordinates.length-1],{x:n,y:r}=this.project(s,o);i({x:n,y:r},{x:t.containerX,y:t.containerY})<this.pointerDistance&&this.setCursor("pointer")}this.store.updateGeometry([{id:this.currentId,geometry:{type:"LineString",coordinates:[...e.coordinates,s]}}])}onClick(t){this.currentCoordinate>0&&!this.mouseMove&&this.onMouseMove(t),this.mouseMove=!1;const e=this.currentId&&this.snappingEnabled&&this.snapping.getSnappableCoordinate(t,this.currentId)||[t.lng,t.lat];if(0===this.currentCoordinate){const[t]=this.store.create([{geometry:{type:"LineString",coordinates:[e,e]},properties:{mode:this.mode}}]);this.currentId=t,this.currentCoordinate++,this.setDrawing()}else if(1===this.currentCoordinate&&this.currentId){const t=this.store.getGeometryCopy(this.currentId),[i]=this.store.create([{geometry:{type:"Point",coordinates:[...e]},properties:{mode:this.mode}}]);this.closingPointId=i,this.setCursor("pointer"),this.store.updateGeometry([{id:this.currentId,geometry:{type:"LineString",coordinates:[t.coordinates[0],e,e]}}]),this.currentCoordinate++}else if(this.currentId){const s=this.store.getGeometryCopy(this.currentId),[o,n]=s.coordinates[s.coordinates.length-2],{x:r,y:a}=this.project(o,n);if(i({x:r,y:a},{x:t.containerX,y:t.containerY})<this.pointerDistance)this.close();else{const t={type:"LineString",coordinates:[...s.coordinates,e]};if(!this.allowSelfIntersections&&Tt({type:"Feature",geometry:t,properties:{}}))return;this.closingPointId&&(this.setCursor("pointer"),this.store.updateGeometry([{id:this.currentId,geometry:t},{id:this.closingPointId,geometry:{type:"Point",coordinates:s.coordinates[s.coordinates.length-1]}}]),this.currentCoordinate++)}}}onKeyDown(){}onKeyUp(t){t.key===this.keyEvents.cancel&&this.cleanUp(),t.key===this.keyEvents.finish&&this.close()}onDragStart(){}onDrag(){}onDragEnd(){}cleanUp(){try{this.currentId&&this.store.delete([this.currentId]),this.closingPointId&&this.store.delete([this.closingPointId])}catch(t){}this.closingPointId=void 0,this.currentId=void 0,this.currentCoordinate=0,"drawing"===this.state&&this.setStarted()}styleFeature(e){const i=t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0});return"Feature"===e.type&&"LineString"===e.geometry.type&&e.properties.mode===this.mode?(this.styles.lineStringColor&&(i.lineStringColor=this.styles.lineStringColor),this.styles.lineStringWidth&&(i.lineStringWidth=this.styles.lineStringWidth),i):"Feature"===e.type&&"Point"===e.geometry.type&&e.properties.mode===this.mode?(this.styles.closingPointColor&&(i.pointColor=this.styles.closingPointColor),this.styles.closingPointWidth&&(i.pointWidth=this.styles.closingPointWidth),i.pointOutlineColor=void 0!==this.styles.closingPointOutlineColor?this.styles.closingPointOutlineColor:"#ffffff",i.pointOutlineWidth=void 0!==this.styles.closingPointOutlineWidth?this.styles.closingPointOutlineWidth:2,i):i}}class Xt extends Pt{constructor(t){super(t),this.mode="point"}start(){this.setStarted(),this.setCursor("crosshair")}stop(){this.cleanUp(),this.setStopped(),this.setCursor("unset")}onClick(t){if(!this.store)throw new Error("Mode must be registered first");this.store.create([{geometry:{type:"Point",coordinates:[t.lng,t.lat]},properties:{mode:this.mode}}])}onMouseMove(){}onKeyDown(){}onKeyUp(){}cleanUp(){}onDragStart(){}onDrag(){}onDragEnd(){}styleFeature(e){const i=t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0});return"Feature"===e.type&&"Point"===e.geometry.type&&e.properties.mode===this.mode?(this.styles.pointColor&&(i.pointColor=this.styles.pointColor),this.styles.pointOutlineColor&&(i.pointOutlineColor=this.styles.pointOutlineColor),this.styles.pointOutlineWidth&&(i.pointOutlineWidth=this.styles.pointOutlineWidth),this.styles.pointWidth&&(i.pointWidth=this.styles.pointWidth),i):i}}function Yt(t,e){return t[0]===e[0]&&t[1]===e[1]}const zt="midPoint",Jt="closingPoint";class $t extends Wt{constructor(t,e){super(t),this.config=void 0,this.pixelDistance=void 0,this._startEndPoints=[],this.config=t,this.pixelDistance=e}get ids(){return this._startEndPoints.concat()}set ids(t){}create(t,e){if(this.ids.length)throw new Error("Opening and closing points already creating");if(t.length<=3)throw new Error("Requires at least 4 cooridnates");this._startEndPoints=this.store.create([{geometry:{type:"Point",coordinates:t[0]},properties:{mode:e,[Jt]:!0}},{geometry:{type:"Point",coordinates:t[t.length-2]},properties:{mode:e,[Jt]:!0}}])}delete(){this.ids.length&&(this.store.delete(this.ids),this._startEndPoints=[])}update(t){if(2!==this.ids.length)throw new Error("No closing points to update");this.store.updateGeometry([{id:this.ids[0],geometry:{type:"Point",coordinates:t[0]}},{id:this.ids[1],geometry:{type:"Point",coordinates:t[t.length-3]}}])}isClosingPoint(t){const e=this.store.getGeometryCopy(this.ids[0]),i=this.store.getGeometryCopy(this.ids[1]),s=this.pixelDistance.measure(t,e.coordinates),o=this.pixelDistance.measure(t,i.coordinates);return{isClosing:s<this.pointerDistance,isPreviousClosing:o<this.pointerDistance}}}class Kt extends Pt{constructor(e){if(super(e),this.mode="polygon",this.currentCoordinate=0,this.currentId=void 0,this.allowSelfIntersections=void 0,this.keyEvents=void 0,this.snappingEnabled=void 0,this.snapping=void 0,this.pixelDistance=void 0,this.closingPoints=void 0,this.mouseMove=!1,this.snappingEnabled=!(!e||void 0===e.snapping)&&e.snapping,this.allowSelfIntersections=!e||void 0===e.allowSelfIntersections||e.allowSelfIntersections,null===(null==e?void 0:e.keyEvents))this.keyEvents={cancel:null,finish:null};else{const i={cancel:"Escape",finish:"Enter"};this.keyEvents=e&&e.keyEvents?t({},i,e.keyEvents):i}}close(){if(!this.currentId)return;const t=this.store.getGeometryCopy(this.currentId).coordinates[0];t.length<5||(this.store.updateGeometry([{id:this.currentId,geometry:{type:"Polygon",coordinates:[[...t.slice(0,-2),t[0]]]}}]),this.currentCoordinate=0,this.currentId=void 0,this.closingPoints.delete(),"drawing"===this.state&&this.setStarted())}registerBehaviors(t){this.pixelDistance=new Gt(t),this.snapping=new Ut(t,this.pixelDistance,new At(t)),this.closingPoints=new $t(t,this.pixelDistance)}start(){this.setStarted(),this.setCursor("crosshair")}stop(){this.cleanUp(),this.setStopped(),this.setCursor("unset")}onMouseMove(t){if(this.mouseMove=!0,this.setCursor("crosshair"),!this.currentId||0===this.currentCoordinate)return;const e=this.snappingEnabled?this.snapping.getSnappableCoordinate(t,this.currentId):void 0,i=this.store.getGeometryCopy(this.currentId).coordinates[0];let s;if(e&&(t.lng=e[0],t.lat=e[1]),1===this.currentCoordinate){const e=1/Math.pow(10,this.coordinatePrecision-1),o=Math.max(1e-6,e);s=[i[0],[t.lng,t.lat],[t.lng,t.lat-o],i[0]]}else if(2===this.currentCoordinate)s=[i[0],i[1],[t.lng,t.lat],i[0]];else{const{isClosing:e,isPreviousClosing:o}=this.closingPoints.isClosingPoint(t);o||e?(this.setCursor("pointer"),s=[...i.slice(0,-2),i[0],i[0]]):s=[...i.slice(0,-2),[t.lng,t.lat],i[0]]}this.store.updateGeometry([{id:this.currentId,geometry:{type:"Polygon",coordinates:[s]}}]),this.closingPoints.ids.length&&this.closingPoints.update(s)}onClick(t){this.currentCoordinate>0&&!this.mouseMove&&this.onMouseMove(t),this.mouseMove=!1;const e=this.currentId&&this.snappingEnabled?this.snapping.getSnappableCoordinate(t,this.currentId):void 0;if(0===this.currentCoordinate){e&&(t.lng=e[0],t.lat=e[1]);const[i]=this.store.create([{geometry:{type:"Polygon",coordinates:[[[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat]]]},properties:{mode:this.mode}}]);this.currentId=i,this.currentCoordinate++,this.setDrawing()}else if(1===this.currentCoordinate&&this.currentId){e&&(t.lng=e[0],t.lat=e[1]);const i=this.store.getGeometryCopy(this.currentId);if(Yt([t.lng,t.lat],i.coordinates[0][0]))return;this.store.updateGeometry([{id:this.currentId,geometry:{type:"Polygon",coordinates:[[i.coordinates[0][0],[t.lng,t.lat],[t.lng,t.lat],i.coordinates[0][0]]]}}]),this.currentCoordinate++}else if(2===this.currentCoordinate&&this.currentId){e&&(t.lng=e[0],t.lat=e[1]);const i=this.store.getGeometryCopy(this.currentId).coordinates[0];if(Yt([t.lng,t.lat],i[1]))return;2===this.currentCoordinate&&this.closingPoints.create(i,"polygon"),this.store.updateGeometry([{id:this.currentId,geometry:{type:"Polygon",coordinates:[[i[0],i[1],[t.lng,t.lat],[t.lng,t.lat],i[0]]]}}]),this.currentCoordinate++}else if(this.currentId){const i=this.store.getGeometryCopy(this.currentId).coordinates[0],{isClosing:s,isPreviousClosing:o}=this.closingPoints.isClosingPoint(t);if(o||s)this.close();else{if(e&&(t.lng=e[0],t.lat=e[1]),Yt([t.lng,t.lat],i[this.currentCoordinate-1]))return;const s=function(t=[[[0,0],[0,1],[1,1],[1,0],[0,0]]]){return{type:"Feature",geometry:{type:"Polygon",coordinates:t},properties:{}}}([[...i.slice(0,-1),[t.lng,t.lat],i[0]]]);if(this.currentCoordinate>2&&!this.allowSelfIntersections&&Tt(s))return;this.store.updateGeometry([{id:this.currentId,geometry:s.geometry}]),this.currentCoordinate++,this.closingPoints.ids.length&&this.closingPoints.update(s.geometry.coordinates[0])}}}onKeyUp(t){t.key===this.keyEvents.cancel?this.cleanUp():t.key===this.keyEvents.finish&&this.close()}onKeyDown(){}onDragStart(){this.setCursor("unset")}onDrag(){}onDragEnd(){this.setCursor("crosshair")}cleanUp(){try{this.currentId&&this.store.delete([this.currentId]),this.closingPoints.ids.length&&this.closingPoints.delete()}catch(t){}this.currentId=void 0,this.currentCoordinate=0,"drawing"===this.state&&this.setStarted()}styleFeature(e){const i=t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0});if(e.properties.mode===this.mode){if("Polygon"===e.geometry.type)return i.polygonFillColor=this.styles.fillColor||i.polygonFillColor,i.polygonOutlineColor=this.styles.outlineColor||i.polygonOutlineColor,i.polygonOutlineWidth=this.styles.outlineWidth||i.polygonOutlineWidth,i.polygonFillColor=this.styles.fillColor||i.polygonFillColor,i.polygonFillOpacity=this.styles.fillOpacity||i.polygonFillOpacity,i.zIndex=10,i;if("Point"===e.geometry.type)return i.pointWidth=this.styles.closingPointWidth||i.pointWidth,i.pointColor=this.styles.closingPointColor||i.pointColor,i.pointOutlineColor=this.styles.closingPointOutlineColor||"#ffffff",i.pointOutlineWidth=this.styles.closingPointOutlineWidth||2,i.zIndex=30,i}return i}}class Vt extends Pt{constructor(e){if(super(e),this.mode="rectangle",this.center=void 0,this.clickCount=0,this.currentRectangleId=void 0,this.keyEvents=void 0,null===(null==e?void 0:e.keyEvents))this.keyEvents={cancel:null,finish:null};else{const i={cancel:"Escape",finish:"Enter"};this.keyEvents=e&&e.keyEvents?t({},i,e.keyEvents):i}}close(){this.center=void 0,this.currentRectangleId=void 0,this.clickCount=0,"drawing"===this.state&&this.setStarted()}start(){this.setStarted(),this.setCursor("crosshair")}stop(){this.cleanUp(),this.setStopped(),this.setCursor("unset")}onClick(t){if(0===this.clickCount){this.center=[t.lng,t.lat];const[e]=this.store.create([{geometry:{type:"Polygon",coordinates:[[[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat],[t.lng,t.lat]]]},properties:{mode:this.mode}}]);this.currentRectangleId=e,this.clickCount++,this.setDrawing()}else this.close()}onMouseMove(t){if(1===this.clickCount&&this.center&&this.currentRectangleId){const e=this.store.getGeometryCopy(this.currentRectangleId).coordinates[0][0];this.store.updateGeometry([{id:this.currentRectangleId,geometry:{type:"Polygon",coordinates:[[e,[t.lng,e[1]],[t.lng,t.lat],[e[0],t.lat],e]]}}])}}onKeyDown(){}onKeyUp(t){t.key===this.keyEvents.cancel?this.cleanUp():t.key===this.keyEvents.finish&&this.close()}onDragStart(){}onDrag(){}onDragEnd(){}cleanUp(){try{this.currentRectangleId&&this.store.delete([this.currentRectangleId])}catch(t){}this.center=void 0,this.currentRectangleId=void 0,this.clickCount=0,"drawing"===this.state&&this.setStarted()}styleFeature(e){const i=t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0});return"Feature"===e.type&&"Polygon"===e.geometry.type&&e.properties.mode===this.mode?(this.styles.fillColor&&(i.polygonFillColor=this.styles.fillColor),this.styles.outlineColor&&(i.polygonOutlineColor=this.styles.outlineColor),this.styles.outlineWidth&&(i.polygonOutlineWidth=this.styles.outlineWidth),this.styles.fillOpacity&&(i.polygonFillOpacity=this.styles.fillOpacity),i):i}}class Zt extends Pt{constructor(t){super({styles:t.styles}),this.mode="render"}registerBehaviors(t){this.mode=t.mode}start(){this.setStarted()}stop(){this.setStopped()}onKeyUp(){}onKeyDown(){}onClick(){}onDragStart(){}onDrag(){}onDragEnd(){}onMouseMove(){}styleFeature(){return t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0},this.styles)}}function qt(t,i,s,o,n){const r=o(t[0],t[1]),a=o(i[0],i[1]),{lng:l,lat:h}=n((r.x+a.x)/2,(r.y+a.y)/2);return[e(l,s),e(h,s)]}function Ht(t,e,i,s){const o=[];for(let n=0;n<t.length-1;n++){const r=qt(t[n],t[n+1],e,i,s);o.push(r)}return o}class Qt extends Wt{constructor(t,e){super(t),this.config=void 0,this.selectionPointBehavior=void 0,this._midPoints=[],this.config=t,this.selectionPointBehavior=e}get ids(){return this._midPoints.concat()}set ids(t){}insert(t,e){const i=this.store.getGeometryCopy(t),{midPointFeatureId:s,midPointSegment:o}=this.store.getPropertiesCopy(t),n=this.store.getGeometryCopy(s),r="Polygon"===n.type?n.coordinates[0]:n.coordinates;r.splice(o+1,0,i.coordinates),n.coordinates="Polygon"===n.type?[r]:r,this.store.updateGeometry([{id:s,geometry:n}]),this.store.delete([...this._midPoints,...this.selectionPointBehavior.ids]),this.create(r,s,e),this.selectionPointBehavior.create(r,n.type,s)}create(t,e,i){if(!this.store.has(e))throw new Error("Store does not have feature with this id");this._midPoints=this.store.create(function(t,e,i,s,o){return Ht(t,i,s,o).map((t,i)=>({geometry:{type:"Point",coordinates:t},properties:e(i)}))}(t,t=>({mode:this.mode,[zt]:!0,midPointSegment:t,midPointFeatureId:e}),i,this.config.project,this.config.unproject))}delete(){this._midPoints.length&&(this.store.delete(this._midPoints),this._midPoints=[])}getUpdated(t){if(0!==this._midPoints.length)return Ht(t,this.coordinatePrecision,this.config.project,this.config.unproject).map((t,e)=>({id:this._midPoints[e],geometry:{type:"Point",coordinates:t}}))}}class te extends Wt{constructor(t){super(t),this._selectionPoints=[]}get ids(){return this._selectionPoints.concat()}set ids(t){}create(t,e,i){this._selectionPoints=this.store.create(function(t,e,i){const s=[],o="Polygon"===e?t.length-1:t.length;for(let e=0;e<o;e++)s.push({geometry:{type:"Point",coordinates:t[e]},properties:i(e)});return s}(t,e,t=>({mode:this.mode,selectionPoint:!0,selectionPointFeatureId:i,index:t})))}delete(){this.ids.length&&(this.store.delete(this.ids),this._selectionPoints=[])}getUpdated(t){if(0!==this._selectionPoints.length)return this._selectionPoints.map((e,i)=>({id:e,geometry:{type:"Point",coordinates:t[i]}}))}getOneUpdated(t,e){if(void 0!==this._selectionPoints[t])return{id:this._selectionPoints[t],geometry:{type:"Point",coordinates:e}}}}function ee(t,e){let i=!1;for(let r=0,a=e.length;r<a;r++){const a=e[r];for(let e=0,r=a.length,l=r-1;e<r;l=e++)(o=a[e])[1]>(s=t)[1]!=(n=a[l])[1]>s[1]&&s[0]<(n[0]-o[0])*(s[1]-o[1])/(n[1]-o[1])+o[0]&&(i=!i)}var s,o,n;return i}const ie=(t,e,i)=>{const s=t=>t*t,o=(t,e)=>s(t.x-e.x)+s(t.y-e.y);return Math.sqrt(((t,e,i)=>{const s=o(e,i);if(0===s)return o(t,e);let n=((t.x-e.x)*(i.x-e.x)+(t.y-e.y)*(i.y-e.y))/s;return n=Math.max(0,Math.min(1,n)),o(t,{x:e.x+n*(i.x-e.x),y:e.y+n*(i.y-e.y)})})(t,e,i))};class se extends Wt{constructor(t,e,i){super(t),this.config=void 0,this.createClickBoundingBox=void 0,this.pixelDistance=void 0,this.config=t,this.createClickBoundingBox=e,this.pixelDistance=i}find(t,e){let i,s,o=Infinity,n=Infinity;const r=this.createClickBoundingBox.create(t),a=this.store.search(r);for(let r=0;r<a.length;r++){const l=a[r],h=l.geometry;if("Point"===h.type){if(l.properties.selectionPoint||!e&&l.properties[zt])continue;const r=this.pixelDistance.measure(t,h.coordinates);l.properties[zt]&&r<this.pointerDistance&&r<n?(n=r,s=l):!l.properties[zt]&&r<this.pointerDistance&&r<o&&(o=r,i=l)}else if("LineString"===h.type)for(let e=0;e<h.coordinates.length-1;e++){const s=h.coordinates[e],n=h.coordinates[e+1],r=ie({x:t.containerX,y:t.containerY},this.project(s[0],s[1]),this.project(n[0],n[1]));r<this.pointerDistance&&r<o&&(o=r,i=l)}else"Polygon"===h.type&&ee([t.lng,t.lat],h.coordinates)&&(o=0,i=l)}return{clickedFeature:i,clickedMidPoint:s}}}class oe extends Wt{constructor(t,e,i,s){super(t),this.config=void 0,this.featuresAtMouseEvent=void 0,this.selectionPoints=void 0,this.midPoints=void 0,this.dragPosition=void 0,this.config=t,this.featuresAtMouseEvent=e,this.selectionPoints=i,this.midPoints=s}get position(){return this.dragPosition?this.dragPosition.concat():void 0}set position(t){if(void 0!==t){if(!Array.isArray(t)||2!==t.length||"number"!=typeof t[0]||"number"!=typeof t[1])throw new Error("Position must be [number, number] array");this.dragPosition=t.concat()}else this.dragPosition=void 0}drag(t,e){const{clickedFeature:i}=this.featuresAtMouseEvent.find(t,!0);if(!i||i.id!==e)return;const s=this.store.getGeometryCopy(e),o=[t.lng,t.lat];if("Polygon"===s.type||"LineString"===s.type){let t,i;if("Polygon"===s.type?(t=s.coordinates[0],i=t.length-1):"LineString"===s.type&&(t=s.coordinates,i=t.length),void 0===i||!t||!this.dragPosition)return!1;for(let e=0;e<i;e++){const i=t[e],s=[this.dragPosition[0]-o[0],this.dragPosition[1]-o[1]];t[e]=[i[0]-s[0],i[1]-s[1]]}"Polygon"===s.type&&(t[t.length-1]=[t[0][0],t[0][1]]);const n=this.selectionPoints.getUpdated(t)||[],r=this.midPoints.getUpdated(t)||[];this.store.updateGeometry([{id:e,geometry:s},...n,...r])}else"Point"===s.type&&this.store.updateGeometry([{id:e,geometry:{type:"Point",coordinates:o}}])}}class ne extends Wt{constructor(t,e,i,s){super(t),this.config=void 0,this.pixelDistance=void 0,this.selectionPoints=void 0,this.midPoints=void 0,this.config=t,this.pixelDistance=e,this.selectionPoints=i,this.midPoints=s}drag(t,e){const i=this.store.getGeometryCopy(e);let s;if("LineString"===i.type)s=i.coordinates;else{if("Polygon"!==i.type)return!1;s=i.coordinates[0]}const o={dist:Infinity,index:-1,isFirstOrLastPolygonCoord:!1};for(let e=0;e<s.length;e++){const n=this.pixelDistance.measure(t,s[e]);if(n<this.pointerDistance&&n<o.dist){const t="Polygon"===i.type&&(e===s.length-1||0===e);o.dist=n,o.index=t?0:e,o.isFirstOrLastPolygonCoord=t}}if(-1===o.index)return!1;const n=[t.lng,t.lat];if(o.isFirstOrLastPolygonCoord){const t=s.length-1;s[0]=n,s[t]=n}else s[o.index]=n;const r=this.selectionPoints.getOneUpdated(o.index,n),a=r?[r]:[],l=this.midPoints.getUpdated(s)||[];return this.store.updateGeometry([{id:e,geometry:i},...a,...l]),!0}}function re(t){let e=0,i=0,s=0;return("Polygon"===t.geometry.type?t.geometry.coordinates[0].slice(0,-1):t.geometry.coordinates).forEach(t=>{e+=t[0],i+=t[1],s++},!0),[e/s,i/s]}function ae(t,e){const i=t,s=e,o=wt(i[1]),n=wt(s[1]);let r=wt(s[0]-i[0]);r>Math.PI&&(r-=2*Math.PI),r<-Math.PI&&(r+=2*Math.PI);const a=Math.log(Math.tan(n/2+Math.PI/4)/Math.tan(o/2+Math.PI/4)),l=(Mt(Math.atan2(r,a))+360)%360;return l>180?-(360-l):l}function le(t,e,i){const s=e/6371008.8,o=t[0]*Math.PI/180,n=wt(t[1]),r=wt(i),a=s*Math.cos(r);let l=n+a;Math.abs(l)>Math.PI/2&&(l=l>0?Math.PI-l:-Math.PI-l);const h=Math.log(Math.tan(l/2+Math.PI/4)/Math.tan(n/2+Math.PI/4)),c=Math.abs(h)>1e-11?a/h:Math.cos(n),d=[(180*(o+s*Math.sin(r)/c)/Math.PI+540)%360-180,180*l/Math.PI];return d[0]+=d[0]-t[0]>180?-360:t[0]-d[0]>180?360:0,d}function he(t,e){t[0]+=t[0]-e[0]>180?-360:e[0]-t[0]>180?360:0;const i=e[1]*Math.PI/180,s=t[1]*Math.PI/180,o=s-i;let n=Math.abs(t[0]-e[0])*Math.PI/180;n>Math.PI&&(n-=2*Math.PI);const r=Math.log(Math.tan(s/2+Math.PI/4)/Math.tan(i/2+Math.PI/4)),a=Math.abs(r)>1e-11?o/r:Math.cos(i);return 6371008.8*Math.sqrt(o*o+a*a*n*n)}class ce extends Wt{constructor(t,e,i){super(t),this.config=void 0,this.selectionPoints=void 0,this.midPoints=void 0,this.lastBearing=void 0,this.config=t,this.selectionPoints=e,this.midPoints=i}reset(){this.lastBearing=void 0}rotate(t,i){const s=this.store.getGeometryCopy(i);if("Polygon"!==s.type&&"LineString"!==s.type)return;const o=[t.lng,t.lat],n=ae(re({type:"Feature",geometry:s,properties:{}}),o);if(!this.lastBearing)return void(this.lastBearing=n+180);let r;if(function(t,e){if(0===e)return t;const i=re(t);("Polygon"===t.geometry.type?t.geometry.coordinates[0]:t.geometry.coordinates).forEach(t=>{const s=ae(i,t)+e,o=he(i,t),n=le(i,o,s);t[0]=n[0],t[1]=n[1]})}({type:"Feature",geometry:s,properties:{}},-(this.lastBearing-(n+180))),"Polygon"===s.type)r=s.coordinates[0];else{if("LineString"!==s.type)return;r=s.coordinates}r.forEach(t=>{t[0]=e(t[0],this.coordinatePrecision),t[1]=e(t[1],this.coordinatePrecision)});const a=this.midPoints.getUpdated(r)||[],l=this.selectionPoints.getUpdated(r)||[];this.store.updateGeometry([{id:i,geometry:s},...l,...a]),this.lastBearing=n+180}}class de extends Wt{constructor(t,e,i){super(t),this.config=void 0,this.selectionPoints=void 0,this.midPoints=void 0,this.lastDistance=void 0,this.config=t,this.selectionPoints=e,this.midPoints=i}reset(){this.lastDistance=void 0}scale(t,i){const s=this.store.getGeometryCopy(i);if("Polygon"!==s.type&&"LineString"!==s.type)return;const o=[t.lng,t.lat],n=xt(re({type:"Feature",geometry:s,properties:{}}),o);if(!this.lastDistance)return void(this.lastDistance=n);let r;if(function(t,e){if(1===e)return t;const i=re(t);("Polygon"===t.geometry.type?t.geometry.coordinates[0]:t.geometry.coordinates).forEach(t=>{const s=he(i,t),o=ae(i,t),n=le(i,s*e,o);t[0]=n[0],t[1]=n[1]})}({type:"Feature",geometry:s,properties:{}},1-(this.lastDistance-n)/n),"Polygon"===s.type)r=s.coordinates[0];else{if("LineString"!==s.type)return;r=s.coordinates}r.forEach(t=>{t[0]=e(t[0],this.coordinatePrecision),t[1]=e(t[1],this.coordinatePrecision)});const a=this.midPoints.getUpdated(r)||[],l=this.selectionPoints.getUpdated(r)||[];this.store.updateGeometry([{id:i,geometry:s},...l,...a]),this.lastDistance=n}}class ue extends Pt{constructor(e){if(super(e),this.mode="select",this.dragEventThrottle=5,this.dragEventCount=0,this.selected=[],this.flags=void 0,this.keyEvents=void 0,this.selectionPoints=void 0,this.midPoints=void 0,this.featuresAtMouseEvent=void 0,this.pixelDistance=void 0,this.clickBoundingBox=void 0,this.dragFeature=void 0,this.dragCoordinate=void 0,this.rotateFeature=void 0,this.scaleFeature=void 0,this.flags=e&&e.flags?e.flags:{},null===(null==e?void 0:e.keyEvents))this.keyEvents={deselect:null,delete:null,rotate:null,scale:null};else{const i={deselect:"Escape",delete:"Delete",rotate:"r",scale:"s"};this.keyEvents=e&&e.keyEvents?t({},i,e.keyEvents):i}this.dragEventThrottle=e&&void 0!==e.dragEventThrottle&&e.dragEventThrottle||5}registerBehaviors(t){this.pixelDistance=new Gt(t),this.clickBoundingBox=new At(t),this.featuresAtMouseEvent=new se(t,this.clickBoundingBox,this.pixelDistance),this.selectionPoints=new te(t),this.midPoints=new Qt(t,this.selectionPoints),this.rotateFeature=new ce(t,this.selectionPoints,this.midPoints),this.scaleFeature=new de(t,this.selectionPoints,this.midPoints),this.dragFeature=new oe(t,this.featuresAtMouseEvent,this.selectionPoints,this.midPoints),this.dragCoordinate=new ne(t,this.pixelDistance,this.selectionPoints,this.midPoints)}deselect(){this.store.updateProperty(this.selected.map(t=>({id:t,property:"selected",value:!1}))),this.onDeselect(this.selected[0]),this.selected=[],this.selectionPoints.delete(),this.midPoints.delete()}deleteSelected(){this.store.delete(this.selected),this.selected=[]}onRightClick(t){if(!this.selectionPoints.ids.length)return;let e,i=Infinity;if(this.selectionPoints.ids.forEach(s=>{const o=this.store.getGeometryCopy(s),n=this.pixelDistance.measure(t,o.coordinates);n<this.pointerDistance&&n<i&&(i=n,e=this.store.getPropertiesCopy(s))}),!e)return;const s=e.selectionPointFeatureId,o=e.index,n=this.store.getPropertiesCopy(s),r=this.flags[n.mode];if(!(r&&r.feature&&r.feature.coordinates&&r.feature.coordinates.deletable))return;const a=this.store.getGeometryCopy(s);let l;if("Polygon"===a.type){if(l=a.coordinates[0],l.length<=4)return}else if("LineString"===a.type&&(l=a.coordinates,l.length<=3))return;l&&("Polygon"===a.type&&0===o||o===l.length-1?(l.shift(),l.pop(),l.push([l[0][0],l[0][1]])):l.splice(o,1),this.store.delete([...this.midPoints.ids,...this.selectionPoints.ids]),this.store.updateGeometry([{id:s,geometry:a}]),this.selectionPoints.create(l,a.type,s),r&&r.feature&&r.feature.coordinates&&r.feature.coordinates.midpoints&&this.midPoints.create(l,s,this.coordinatePrecision))}onLeftClick(t){const{clickedFeature:e,clickedMidPoint:i}=this.featuresAtMouseEvent.find(t,this.selected.length>0);if(this.selected.length&&i)this.midPoints.insert(i.id,this.coordinatePrecision);else if(e){const{mode:t}=this.store.getPropertiesCopy(e.id),i=this.selected[0];if(i){if(i===e.id)return;this.deselect()}const s=this.flags[t];if(!s||!s.feature)return;this.selected=[e.id],this.store.updateProperty([{id:e.id,property:"selected",value:!0}]),this.onSelect(e.id);const{type:o,coordinates:n}=this.store.getGeometryCopy(e.id);if("LineString"!==o&&"Polygon"!==o)return;const r="LineString"===o?n:n[0];r&&s&&s.feature.coordinates&&(this.selectionPoints.create(r,o,e.id),s.feature.coordinates.midpoints&&this.midPoints.create(r,e.id,this.coordinatePrecision))}else if(this.selected.length)return void this.deselect()}start(){this.setStarted()}stop(){this.cleanUp(),this.setStopped()}onClick(t){"right"!==t.button?"left"===t.button&&this.onLeftClick(t):this.onRightClick(t)}onKeyDown(){}onKeyUp(t){if(t.key===this.keyEvents.delete){if(!this.selected.length)return;this.onDeselect(this.selected[0]),this.deleteSelected(),this.selectionPoints.delete(),this.midPoints.delete()}else t.key===this.keyEvents.deselect&&this.cleanUp()}cleanUp(){this.selected.length&&this.deselect()}onDragStart(t,e){if(!this.selected.length)return;const i=this.store.getPropertiesCopy(this.selected[0]),s=this.flags[i.mode];s&&s.feature&&(s.feature.draggable||s.feature.coordinates&&s.feature.coordinates.draggable)&&(this.dragEventCount=0,this.setCursor("grabbing"),this.dragFeature.position=[t.lng,t.lat],e(!1))}onDrag(t){const e=this.selected[0];if(!e||!this.dragFeature.position)return;const i=this.store.getPropertiesCopy(e),s=this.flags[i.mode];if(this.dragEventCount++,this.dragEventCount%this.dragEventThrottle!=0)if(s&&s.feature&&s.feature.rotateable&&t.heldKeys.includes("r"))this.rotateFeature.rotate(t,e);else if(s&&s.feature&&s.feature.scaleable&&t.heldKeys.includes("s"))this.scaleFeature.scale(t,e);else{if(s&&s.feature&&s.feature.coordinates&&s.feature.coordinates.draggable&&this.dragCoordinate.drag(t,e))return;s&&s.feature&&s.feature.draggable&&(this.dragFeature.drag(t,e),this.dragFeature.position=[t.lng,t.lat])}}onDragEnd(t,e){this.setCursor("grab"),this.dragFeature.position=void 0,this.rotateFeature.reset(),this.scaleFeature.reset(),e(!0)}onMouseMove(t){if(!this.selected.length||this.dragFeature.position)return;let e=!1;this.midPoints.ids.forEach(i=>{if(e)return;const s=this.store.getGeometryCopy(i);this.pixelDistance.measure(t,s.coordinates)<this.pointerDistance&&(e=!0)}),this.selectionPoints.ids.forEach(i=>{const s=this.store.getGeometryCopy(i);this.pixelDistance.measure(t,s.coordinates)<this.pointerDistance&&(e=!1)}),this.setCursor(e?"crosshair":"unset")}styleFeature(e){const i=t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0});if(e.properties.mode===this.mode){if("Polygon"===e.geometry.type)return this.styles.selectedColor&&(i.polygonFillColor=this.styles.selectedColor),this.styles.selectedColor&&(i.polygonOutlineColor=this.styles.selectedColor),i.zIndex=10,i;if("Point"===e.geometry.type){if(e.properties.selectionPoint)return i.pointColor=this.styles.selectionPointColor||i.pointColor,i.pointOutlineColor=this.styles.selectionPointOutlineColor||i.pointOutlineColor,i.pointWidth=this.styles.selectionPointWidth||i.pointWidth,i.pointOutlineWidth=this.styles.midPointOutlineWidth||2,i.zIndex=30,i;if(e.properties.midPoint)return i.pointColor=this.styles.midPointColor||i.pointColor,i.pointOutlineColor=this.styles.midPointOutlineColor||i.pointOutlineColor,i.pointWidth=this.styles.midPointWidth||4,i.pointOutlineWidth=this.styles.midPointOutlineWidth||2,i.zIndex=40,i}}return i}}class ge extends Pt{constructor(...t){super(...t),this.mode="static"}start(){}stop(){}onKeyUp(){}onKeyDown(){}onClick(){}onDragStart(){}onDrag(){}onDragEnd(){}onMouseMove(){}styleFeature(){return t({},{polygonFillColor:"#3f97e0",polygonOutlineColor:"#3f97e0",polygonOutlineWidth:4,polygonFillOpacity:.3,pointColor:"#3f97e0",pointOutlineColor:"#ffffff",pointOutlineWidth:0,pointWidth:6,lineStringColor:"#3f97e0",lineStringWidth:4,zIndex:0})}}const pe=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){const e=16*Math.random()|0;return("x"==t?e:3&e|8).toString(16)})};function ye(t,e,i,s,o){for(;s>i;){if(s-i>600){const n=s-i+1,r=e-i+1,a=Math.log(n),l=.5*Math.exp(2*a/3),h=.5*Math.sqrt(a*l*(n-l)/n)*(r-n/2<0?-1:1);ye(t,e,Math.max(i,Math.floor(e-r*l/n+h)),Math.min(s,Math.floor(e+(n-r)*l/n+h)),o)}const n=t[e];let r=i,a=s;for(fe(t,i,e),o(t[s],n)>0&&fe(t,i,s);r<a;){for(fe(t,r,a),r++,a--;o(t[r],n)<0;)r++;for(;o(t[a],n)>0;)a--}0===o(t[i],n)?fe(t,i,a):(a++,fe(t,a,s)),a<=e&&(i=a+1),e<=a&&(s=a-1)}}function fe(t,e,i){const s=t[e];t[e]=t[i],t[i]=s}function me(t,e){ve(t,0,t.children.length,e,t)}function ve(t,e,i,s,o){o||(o=be([])),o.minX=Infinity,o.minY=Infinity,o.maxX=-Infinity,o.maxY=-Infinity;for(let n=e;n<i;n++){const e=t.children[n];_e(o,t.leaf?s(e):e)}return o}function _e(t,e){return t.minX=Math.min(t.minX,e.minX),t.minY=Math.min(t.minY,e.minY),t.maxX=Math.max(t.maxX,e.maxX),t.maxY=Math.max(t.maxY,e.maxY),t}function Ce(t,e){return t.minX-e.minX}function Pe(t,e){return t.minY-e.minY}function xe(t){return(t.maxX-t.minX)*(t.maxY-t.minY)}function we(t){return t.maxX-t.minX+(t.maxY-t.minY)}function Me(t,e){const i=Math.max(t.minX,e.minX),s=Math.max(t.minY,e.minY),o=Math.min(t.maxX,e.maxX),n=Math.min(t.maxY,e.maxY);return Math.max(0,o-i)*Math.max(0,n-s)}function Ee(t,e){return t.minX<=e.minX&&t.minY<=e.minY&&e.maxX<=t.maxX&&e.maxY<=t.maxY}function Se(t,e){return e.minX<=t.maxX&&e.minY<=t.maxY&&e.maxX>=t.minX&&e.maxY>=t.minY}function be(t){return{children:t,height:1,leaf:!0,minX:Infinity,minY:Infinity,maxX:-Infinity,maxY:-Infinity}}function Ie(t,e,i,s,o){const n=[e,i];for(;n.length;){if((i=n.pop())-(e=n.pop())<=s)continue;const r=e+Math.ceil((i-e)/s/2)*s;ye(t,r,e,i,o),n.push(e,r,r,i)}}class ke{constructor(t){this._maxEntries=void 0,this._minEntries=void 0,this.data=void 0,this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}search(t){let e=this.data;const i=[];if(!Se(t,e))return i;const s=this.toBBox,o=[];for(;e;){for(let n=0;n<e.children.length;n++){const r=e.children[n],a=e.leaf?s(r):r;Se(t,a)&&(e.leaf?i.push(r):Ee(t,a)?this._all(r,i):o.push(r))}e=o.pop()}return i}collides(t){let e=this.data;if(Se(t,e)){const i=[];for(;e;){for(let s=0;s<e.children.length;s++){const o=e.children[s],n=e.leaf?this.toBBox(o):o;if(Se(t,n)){if(e.leaf||Ee(t,n))return!0;i.push(o)}}e=i.pop()}}return!1}load(t){if(t.length<this._minEntries){for(let e=0;e<t.length;e++)this.insert(t[e]);return}let e=this._build(t.slice(),0,t.length-1,0);if(this.data.children.length)if(this.data.height===e.height)this._splitRoot(this.data,e);else{if(this.data.height<e.height){const t=this.data;this.data=e,e=t}this._insert(e,this.data.height-e.height-1,!0)}else this.data=e}insert(t){this._insert(t,this.data.height-1)}clear(){this.data=be([])}remove(t){let e=this.data;const i=this.toBBox(t),s=[],o=[];let n,r,a=!1;for(;e||s.length;){if(e||(e=s.pop(),r=s[s.length-1],n=o.pop(),a=!0),e.leaf){const i=e.children.indexOf(t);-1!==i&&(e.children.splice(i,1),s.push(e),this._condense(s))}a||e.leaf||!Ee(e,i)?r?(n++,e=r.children[n],a=!1):e=null:(s.push(e),o.push(n),n=0,r=e,e=e.children[0])}}toBBox(t){return t}compareMinX(t,e){return t.minX-e.minX}compareMinY(t,e){return t.minY-e.minY}_all(t,e){const i=[];for(;t;)t.leaf?e.push(...t.children):i.push(...t.children),t=i.pop();return e}_build(t,e,i,s){const o=i-e+1;let n,r=this._maxEntries;if(o<=r)return n=be(t.slice(e,i+1)),me(n,this.toBBox),n;s||(s=Math.ceil(Math.log(o)/Math.log(r)),r=Math.ceil(o/Math.pow(r,s-1))),n=be([]),n.leaf=!1,n.height=s;const a=Math.ceil(o/r),l=a*Math.ceil(Math.sqrt(r));Ie(t,e,i,l,this.compareMinX);for(let o=e;o<=i;o+=l){const e=Math.min(o+l-1,i);Ie(t,o,e,a,this.compareMinY);for(let i=o;i<=e;i+=a){const o=Math.min(i+a-1,e);n.children.push(this._build(t,i,o,s-1))}}return me(n,this.toBBox),n}_chooseSubtree(t,e,i,s){for(;s.push(e),!e.leaf&&s.length-1!==i;){let i,s=Infinity,r=Infinity;for(let a=0;a<e.children.length;a++){const l=e.children[a],h=xe(l),c=(o=t,n=l,(Math.max(n.maxX,o.maxX)-Math.min(n.minX,o.minX))*(Math.max(n.maxY,o.maxY)-Math.min(n.minY,o.minY))-h);c<r?(r=c,s=h<s?h:s,i=l):c===r&&h<s&&(s=h,i=l)}e=i||e.children[0]}var o,n;return e}_insert(t,e,i){const s=i?t:this.toBBox(t),o=[],n=this._chooseSubtree(s,this.data,e,o);for(n.children.push(t),_e(n,s);e>=0&&o[e].children.length>this._maxEntries;)this._split(o,e),e--;this._adjustParentBBoxes(s,o,e)}_split(t,e){const i=t[e],s=i.children.length,o=this._minEntries;this._chooseSplitAxis(i,o,s);const n=this._chooseSplitIndex(i,o,s),r=be(i.children.splice(n,i.children.length-n));r.height=i.height,r.leaf=i.leaf,me(i,this.toBBox),me(r,this.toBBox),e?t[e-1].children.push(r):this._splitRoot(i,r)}_splitRoot(t,e){this.data=be([t,e]),this.data.height=t.height+1,this.data.leaf=!1,me(this.data,this.toBBox)}_chooseSplitIndex(t,e,i){let s,o=Infinity,n=Infinity;for(let r=e;r<=i-e;r++){const e=ve(t,0,r,this.toBBox),a=ve(t,r,i,this.toBBox),l=Me(e,a),h=xe(e)+xe(a);l<o?(o=l,s=r,n=h<n?h:n):l===o&&h<n&&(n=h,s=r)}return s||i-e}_chooseSplitAxis(t,e,i){const s=t.leaf?this.compareMinX:Ce,o=t.leaf?this.compareMinY:Pe;this._allDistMargin(t,e,i,s)<this._allDistMargin(t,e,i,o)&&t.children.sort(s)}_allDistMargin(t,e,i,s){t.children.sort(s);const o=this.toBBox,n=ve(t,0,e,o),r=ve(t,i-e,i,o);let a=we(n)+we(r);for(let s=e;s<i-e;s++){const e=t.children[s];_e(n,t.leaf?o(e):e),a+=we(n)}for(let s=i-e-1;s>=e;s--){const e=t.children[s];_e(r,t.leaf?o(e):e),a+=we(r)}return a}_adjustParentBBoxes(t,e,i){for(let s=i;s>=0;s--)_e(e[s],t)}_condense(t){for(let e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children,e.splice(e.indexOf(t[i]),1)):this.clear():me(t[i],this.toBBox)}}class De{constructor(t){this.tree=void 0,this.idToNode=void 0,this.nodeToId=void 0,this.tree=new ke(t&&t.maxEntries?t.maxEntries:9),this.idToNode=new Map,this.nodeToId=new Map}setMaps(t,e){this.idToNode.set(String(t.id),e),this.nodeToId.set(e,String(t.id))}toBBox(t){const e=[],i=[];let s;if("Polygon"===t.geometry.type)s=t.geometry.coordinates[0];else if("LineString"===t.geometry.type)s=t.geometry.coordinates;else{if("Point"!==t.geometry.type)throw new Error("Not a valid feature to turn into a bounding box");s=[t.geometry.coordinates]}for(let t=0;t<s.length;t++)i.push(s[t][1]),e.push(s[t][0]);const o=Math.min(...i),n=Math.max(...i);return{minX:Math.min(...e),minY:o,maxX:Math.max(...e),maxY:n}}insert(t){if(this.idToNode.get(String(t.id)))throw new Error("Feature already exists");const e=this.toBBox(t);this.setMaps(t,e),this.tree.insert(e)}load(t){const e=[],i=new Set;t.forEach(t=>{const s=this.toBBox(t);if(this.setMaps(t,s),i.has(String(t.id)))throw new Error(`Duplicate feature ID found ${t.id}`);i.add(String(t.id)),e.push(s)}),this.tree.load(e)}update(t){this.remove(t.id);const e=this.toBBox(t);this.setMaps(t,e),this.tree.insert(e)}remove(t){const e=this.idToNode.get(t);if(!e)throw new Error(`${t} not inserted into the spatial index`);this.tree.remove(e)}clear(){this.tree.clear()}search(t){return this.tree.search(this.toBBox(t)).map(t=>this.nodeToId.get(t))}collides(t){return this.tree.collides(this.toBBox(t))}}class Oe{constructor(t){this.tracked=void 0,this.spatialIndex=void 0,this.store=void 0,this._onChange=()=>{},this.store={},this.spatialIndex=new De,this.tracked=!t||!1!==t.tracked,t&&t.data&&this.load(t.data,t.validateFeature)}getId(){return pe()}clone(t){return JSON.parse(JSON.stringify(t))}has(t){return Boolean(this.store[t])}load(t,e){if(0===t.length)return;const i=this.clone(t);i.forEach(t=>{t.id||(t.id=pe()),this.tracked&&(t.properties.createdAt||(t.properties.createdAt=+new Date),t.properties.updatedAt||(t.properties.updatedAt=+new Date))});const s=[];i.forEach(t=>{e&&e(t),this.store[t.id]=t,s.push(t.id)}),this.spatialIndex.load(i),this._onChange(s,"create")}search(t,e){const i=this.spatialIndex.search(t).map(t=>this.store[t]);return this.clone(e?i.filter(e):i)}registerOnChange(t){this._onChange=(e,i)=>{t(e,i)}}getGeometryCopy(t){const e=this.store[t];if(!e)throw new Error(`No feature with this id (${t}), can not get geometry copy`);return this.clone(e.geometry)}getPropertiesCopy(t){const e=this.store[t];if(!e)throw new Error(`No feature with this id (${t}), can not get properties copy`);return this.clone(e.properties)}updateProperty(t){const e=[];t.forEach(({id:t,property:i,value:s})=>{const o=this.store[t];if(!o)throw new Error(`No feature with this (${t}), can not update geometry`);e.push(t),o.properties[i]=s,this.tracked&&(o.properties.updatedAt=+new Date)}),this._onChange&&this._onChange(e,"update")}updateGeometry(t){const e=[];t.forEach(({id:t,geometry:i})=>{e.push(t);const s=this.store[t];if(!s)throw new Error(`No feature with this (${t}), can not update geometry`);s.geometry=this.clone(i),this.spatialIndex.update(s),this.tracked&&(s.properties.updatedAt=+new Date)}),this._onChange&&this._onChange(e,"update")}create(e){const i=[];return e.forEach(({geometry:e,properties:s})=>{let o,n=t({},s);this.tracked&&(o=+new Date,s?(n.createdAt="number"==typeof s.createdAt?s.createdAt:o,n.updatedAt="number"==typeof s.updatedAt?s.updatedAt:o):n={createdAt:o,updatedAt:o});const r=this.getId(),a={id:r,type:"Feature",geometry:e,properties:n};this.store[r]=a,this.spatialIndex.insert(a),i.push(r)}),this._onChange&&this._onChange([...i],"create"),i}delete(t){t.forEach(t=>{if(!this.store[t])throw new Error("No feature with this id, can not delete");delete this.store[t],this.spatialIndex.remove(t)}),this._onChange&&this._onChange([...t],"delete")}copyAll(){return this.clone(Object.keys(this.store).map(t=>this.store[t]))}clear(){this.store={},this.spatialIndex.clear()}size(){return Object.keys(this.store).length}}class Le{constructor(e){this._modes=void 0,this._mode=void 0,this._adapter=void 0,this._enabled=!1,this._store=void 0,this._eventListeners=void 0,this._adapter=e.adapter,this._mode=new ge,this._modes=t({},e.modes,{static:this._mode}),this._eventListeners={change:[],select:[],deselect:[]},this._store=e.data?new Oe({data:e.data}):new Oe;const i=t=>{const e=[],i=this._store.copyAll().filter(i=>!t.includes(i.id)||(e.push(i),!1));return{changed:e,unchanged:i}},s=(t,e)=>{this._eventListeners.change.forEach(i=>{i(t,e)});const{changed:s,unchanged:o}=i(t);"create"===e?this._adapter.render({created:s,deletedIds:[],unchanged:o,updated:[]},this.getModeStyles()):"update"===e?this._adapter.render({created:[],deletedIds:[],unchanged:o,updated:s},this.getModeStyles()):"delete"===e?this._adapter.render({created:[],deletedIds:t,unchanged:o,updated:[]},this.getModeStyles()):"styling"===e&&this._adapter.render({created:[],deletedIds:[],unchanged:o,updated:[]},this.getModeStyles())},o=t=>{this._eventListeners.select.forEach(e=>{e(t)});const{changed:e,unchanged:s}=i([t]);this._adapter.render({created:[],deletedIds:[],unchanged:s,updated:e},this.getModeStyles())},n=t=>{this._eventListeners.deselect.forEach(t=>{t()});const{changed:e,unchanged:s}=i([t]);e&&this._adapter.render({created:[],deletedIds:[],unchanged:s,updated:e},this.getModeStyles())};if(Object.keys(this._modes).forEach(t=>{this._modes[t].register({mode:t,store:this._store,setCursor:this._adapter.setCursor.bind(this._adapter),project:this._adapter.project.bind(this._adapter),unproject:this._adapter.unproject.bind(this._adapter),setDoubleClickToZoom:this._adapter.setDoubleClickToZoom.bind(this._adapter),onChange:s,onSelect:o,onDeselect:n})}),e.data){const t=this._store.copyAll().filter(t=>!(t.properties&&!Object.keys(this._modes).includes(t.properties.mode)&&(this._store.delete([t.id]),1)));this._adapter.render({created:t,deletedIds:[],unchanged:[],updated:[]},this.getModeStyles())}}checkEnabled(){if(!this._enabled)throw new Error("Terra Draw is not enabled")}getModeStyles(){const t={};return Object.keys(this._modes).forEach(e=>{t[e]=this._modes[e].styleFeature.bind(this._modes[e])}),t}setModeStyles(t,e){this.checkEnabled(),this._modes[t].styles=e}getSnapshot(){return this._store.copyAll()}clear(){this.checkEnabled(),this._store.clear()}get enabled(){return this._enabled}set enabled(t){throw new Error("Enabled is read only")}getMode(){return this._mode.mode}setMode(t){if(this.checkEnabled(),!this._modes[t])throw new Error("No mode with this name present");this._mode.stop(),this._mode=this._modes[t],this._mode.start()}start(){this._enabled=!0,this._adapter.register({getState:()=>this._mode.state,onClick:t=>{this._mode.onClick(t)},onMouseMove:t=>{this._mode.onMouseMove(t)},onKeyDown:t=>{this._mode.onKeyDown(t)},onKeyUp:t=>{this._mode.onKeyUp(t)},onDragStart:(t,e)=>{this._mode.onDragStart(t,e)},onDrag:t=>{this._mode.onDrag(t)},onDragEnd:(t,e)=>{this._mode.onDragEnd(t,e)}})}stop(){this._enabled=!1,this._adapter.unregister()}on(t,e){const i=this._eventListeners[t];i.includes(e)||i.push(e)}off(t,e){const i=this._eventListeners[t];i.includes(e)&&i.splice(i.indexOf(e),1)}}const Fe={TerraDrawBaseDrawMode:Pt,TerraDrawBaseAdapter:o};export{Le as TerraDraw,bt as TerraDrawCircleMode,Fe as TerraDrawExtend,It as TerraDrawFreehandMode,n as TerraDrawGoogleMapsAdapter,jt as TerraDrawGreatCircleMode,r as TerraDrawLeafletAdapter,Nt as TerraDrawLineStringMode,l as TerraDrawMapLibreGLAdapter,a as TerraDrawMapboxGLAdapter,Ct as TerraDrawOpenLayersAdapter,Xt as TerraDrawPointMode,Kt as TerraDrawPolygonMode,Vt as TerraDrawRectangleMode,Zt as TerraDrawRenderMode,ue as TerraDrawSelectMode};
|
|
2
2
|
//# sourceMappingURL=terra-draw.modern.js.map
|