draw-libre 0.2.2 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,165 +1,165 @@
1
- <section >
2
- <h1>DrawLibre</h1>
3
- <img width=600 alt="GIF" src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExaDZscnowMHNndmtiZzcwb3Bvc2Y2b29qbHdndndndGE3Mzk5Z2Q0cSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/m6lig0ZCfL45FZQo7b/giphy.gif" />
4
- </section>
5
-
6
- ## Features
7
-
8
- - Draw linestrings (including closed ones) and polygons
9
- - Compatible with maplibre-gl.js and mapbox-gl.js (currently supports Mercator projection only)
10
- - Customizable UI and controls
11
- - Event-driven architecture for easy integration
12
-
13
- ## Installation
14
-
15
- ```bash
16
- npm install draw-libre
17
- ```
18
-
19
- ## Quick Start
20
-
21
- ```javascript
22
- import maplibregl from "maplibre-gl";
23
- import DrawLibre from "draw-libre";
24
- import "draw-libre/dist/index.css";
25
-
26
- const map = new maplibregl.Map({
27
- container: ...,
28
- style: ...,
29
- });
30
-
31
- const draw = DrawLibre.getInstance();
32
-
33
- map.on("load", (event) => {
34
- event.target.addControl(draw, "top-left");
35
- });
36
- ```
37
-
38
- ## API
39
-
40
- ### Configuration
41
-
42
- ```javascript
43
- const draw = DrawLibre.getInstance({
44
- modes: {
45
- initial: null, // default value; can be "line" or "polygon". Initial mode for drawing
46
- breakGeometry: { visible: true }, // Controls visibility of the break geometry button
47
- line: {
48
- closeGeometry: true, // Enables/disables ability to close a LineString
49
- visible: true, // Controls visibility of the line drawing button
50
- },
51
- polygon: { visible: true }, // Controls visibility of the polygon drawing button
52
- },
53
- panel: {
54
- size: "medium", // "large" || "small" - Controls size of the panel that appears after pressing a button
55
- buttons: {
56
- delete: { visible: true }, // Controls visibility of the delete all points button
57
- save: {
58
- clearOnSave: true, // Whether to clear all points after saving
59
- visible: true, // Controls visibility of the save button
60
- },
61
- undo: { visible: true }, // Controls visibility of the undo button
62
- },
63
- },
64
- locale: {
65
- // Customize button labels and tooltips
66
- break: "Break",
67
- closeLine: "Close",
68
- createPolygon: "Create",
69
- delete: "Delete",
70
- line: "Line",
71
- polygon: "Polygon",
72
- save: "Save",
73
- undo: "Undo",
74
- },
75
- layersPaint: {
76
- // Customize layer styles here. Refer to MapLibre's layer specifications for options.
77
- onLinePoint: {}, // CircleLayerSpecification["paint"]
78
- firstPoint: {}, // CircleLayerSpecification["paint"]
79
- points: {}, // CircleLayerSpecification["paint"]
80
- line: {}, // LineLayerSpecification["paint"]
81
- polygon: {}, // FillLayerSpecification["paint"]
82
- breakLine: {}, // LineLayerSpecification["paint"]
83
- },
84
- dynamicLine: true, // Whether to draw a dynamic line following the cursor after placing the first point
85
- initial: {
86
- // Initialize with pre-existing GeoJSON data
87
- closeGeometry: false, // Specify if the geometry is closed. Must be true if the geometry type is polygon.
88
- generateId: true, // Whether to generate unique IDs for your geometries. Should be true if there are no IDs for each point in `steps`.
89
- geometry: "line", // "line" | "polygon" - Specifies the type of geometry to initialize
90
- steps: [
91
- // Array of {id?: string | number, lat: number, lng: number}
92
- // The first and the last point should be the same if the geometry is closed.
93
- // The closeGeometry also should be true in this case.
94
- { lat: 40, lng: 30 },
95
- { lat: 31, lng: 21 },
96
- { lat: 31, lng: 21 },
97
- ],
98
- },
99
- });
100
- ```
101
-
102
- ### Events
103
-
104
- Import events from the library:
105
-
106
- ```javascript
107
- import DrawLibre, { type PointAddEvent } from "draw-libre";
108
-
109
- map.on(mdl:add, (event: PointAddEvent) => {
110
- console.log("Add event", event);
111
- });
112
- ```
113
-
114
- Available events:
115
-
116
- - `mdl:doubleclick` (PointDoubleClickEvent)
117
- - `mdl:pointenter` (PointEnterEvent)
118
- - `mdl:pointleave` (PointLeaveEvent)
119
- - `mdl:moveend` (PointMoveEvent)
120
- - `mdl:add` (PointAddEvent)
121
- - `mdl:undo` (UndoEvent)
122
- - `mdl:removeall` (RemoveAllEvent)
123
- - `mdl:save` (SaveEvent)
124
- - `mdl:mdl:modechanged` (ModeChangeEvent)
125
-
126
- ### Methods
127
-
128
- ```javascript
129
- const draw = DrawLibre.getInstance();
130
-
131
- // Find a step by its ID
132
- draw.findStepById(id: string)
133
-
134
- // Get all steps, optionally specifying the return type
135
- draw.getAllSteps(type?: "array" | "linkedlist")
136
-
137
- // Set new steps. If ID is not provided, it will be generated automatically
138
- draw.setSteps(steps: {lat: number; lng: number; id?: string}[])
139
-
140
- // Remove all steps
141
- draw.removeAllSteps()
142
-
143
- // Update options. Note that options are immutable, so return a new object with spread values.
144
- draw.setOptions((options: RequiredDrawOptions) => {
145
- return {
146
- ...options,
147
- locale: {
148
- ...options.locale,
149
- save: "Save update",
150
- },
151
- modes: {
152
- ...options.modes,
153
- line: {
154
- ...options.modes.line,
155
- closeGeometry: false,
156
- },
157
- },
158
- dynamicLine: false,
159
- };
160
- });
161
- ```
162
-
163
- ## License
164
-
165
- This project is licensed under the [MIT License](LICENSE).
1
+ <section >
2
+ <h1>DrawLibre</h1>
3
+ <img width=600 alt="GIF" src="https://i.giphy.com/media/v1.Y2lkPTc5MGI3NjExaDZscnowMHNndmtiZzcwb3Bvc2Y2b29qbHdndndndGE3Mzk5Z2Q0cSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/m6lig0ZCfL45FZQo7b/giphy.gif" />
4
+ </section>
5
+
6
+ ## Features
7
+
8
+ - Draw linestrings (including closed ones) and polygons
9
+ - Compatible with maplibre-gl.js and mapbox-gl.js (currently supports Mercator projection only)
10
+ - Customizable UI and controls
11
+ - Event-driven architecture for easy integration
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ npm install draw-libre
17
+ ```
18
+
19
+ ## Quick Start
20
+
21
+ ```javascript
22
+ import maplibregl from "maplibre-gl";
23
+ import DrawLibre from "draw-libre";
24
+ import "draw-libre/dist/index.css";
25
+
26
+ const map = new maplibregl.Map({
27
+ container: ...,
28
+ style: ...,
29
+ });
30
+
31
+ const draw = DrawLibre.getInstance();
32
+
33
+ map.on("load", (event) => {
34
+ event.target.addControl(draw, "top-left");
35
+ });
36
+ ```
37
+
38
+ ## API
39
+
40
+ ### Configuration
41
+
42
+ ```javascript
43
+ const draw = DrawLibre.getInstance({
44
+ modes: {
45
+ initial: null, // default value; can be "line" or "polygon". Initial mode for drawing
46
+ breakGeometry: { visible: true }, // Controls visibility of the break geometry button
47
+ line: {
48
+ closeGeometry: true, // Enables/disables ability to close a LineString
49
+ visible: true, // Controls visibility of the line drawing button
50
+ },
51
+ polygon: { visible: true }, // Controls visibility of the polygon drawing button
52
+ },
53
+ panel: {
54
+ size: "medium", // "large" || "small" - Controls size of the panel that appears after pressing a button
55
+ buttons: {
56
+ delete: { visible: true }, // Controls visibility of the delete all points button
57
+ save: {
58
+ clearOnSave: true, // Whether to clear all points after saving
59
+ visible: true, // Controls visibility of the save button
60
+ },
61
+ undo: { visible: true }, // Controls visibility of the undo button
62
+ },
63
+ },
64
+ locale: {
65
+ // Customize button labels and tooltips
66
+ break: "Break",
67
+ closeLine: "Close",
68
+ createPolygon: "Create",
69
+ delete: "Delete",
70
+ line: "Line",
71
+ polygon: "Polygon",
72
+ save: "Save",
73
+ undo: "Undo",
74
+ },
75
+ layersPaint: {
76
+ // Customize layer styles here. Refer to MapLibre's layer specifications for options.
77
+ onLinePoint: {}, // CircleLayerSpecification["paint"]
78
+ firstPoint: {}, // CircleLayerSpecification["paint"]
79
+ points: {}, // CircleLayerSpecification["paint"]
80
+ line: {}, // LineLayerSpecification["paint"]
81
+ polygon: {}, // FillLayerSpecification["paint"]
82
+ breakLine: {}, // LineLayerSpecification["paint"]
83
+ },
84
+ dynamicLine: true, // Whether to draw a dynamic line following the cursor after placing the first point
85
+ initial: {
86
+ // Initialize with pre-existing GeoJSON data
87
+ closeGeometry: false, // Specify if the geometry is closed. Must be true if the geometry type is polygon.
88
+ generateId: true, // Whether to generate unique IDs for your geometries. Should be true if there are no IDs for each point in `steps`.
89
+ geometry: "line", // "line" | "polygon" - Specifies the type of geometry to initialize
90
+ steps: [
91
+ // Array of {id?: string | number, lat: number, lng: number}
92
+ // The first and the last point should be the same if the geometry is closed.
93
+ // The closeGeometry also should be true in this case.
94
+ { lat: 40, lng: 30 },
95
+ { lat: 31, lng: 21 },
96
+ { lat: 31, lng: 21 },
97
+ ],
98
+ },
99
+ });
100
+ ```
101
+
102
+ ### Events
103
+
104
+ Import events from the library:
105
+
106
+ ```javascript
107
+ import DrawLibre, { type PointAddEvent } from "draw-libre";
108
+
109
+ map.on(mdl:add, (event: PointAddEvent) => {
110
+ console.log("Add event", event);
111
+ });
112
+ ```
113
+
114
+ Available events:
115
+
116
+ - `mdl:doubleclick` (PointDoubleClickEvent)
117
+ - `mdl:pointenter` (PointEnterEvent)
118
+ - `mdl:pointleave` (PointLeaveEvent)
119
+ - `mdl:moveend` (PointMoveEvent)
120
+ - `mdl:add` (PointAddEvent)
121
+ - `mdl:undo` (UndoEvent)
122
+ - `mdl:removeall` (RemoveAllEvent)
123
+ - `mdl:save` (SaveEvent)
124
+ - `mdl:mdl:modechanged` (ModeChangeEvent)
125
+
126
+ ### Methods
127
+
128
+ ```javascript
129
+ const draw = DrawLibre.getInstance();
130
+
131
+ // Find a step by its ID
132
+ draw.findStepById(id: string)
133
+
134
+ // Get all steps, optionally specifying the return type
135
+ draw.getAllSteps(type?: "array" | "linkedlist")
136
+
137
+ // Set new steps. If ID is not provided, it will be generated automatically
138
+ draw.setSteps(steps: {lat: number; lng: number; id?: string}[])
139
+
140
+ // Remove all steps
141
+ draw.removeAllSteps()
142
+
143
+ // Update options. Note that options are immutable, so return a new object with spread values.
144
+ draw.setOptions((options: RequiredDrawOptions) => {
145
+ return {
146
+ ...options,
147
+ locale: {
148
+ ...options.locale,
149
+ save: "Save update",
150
+ },
151
+ modes: {
152
+ ...options.modes,
153
+ line: {
154
+ ...options.modes.line,
155
+ closeGeometry: false,
156
+ },
157
+ },
158
+ dynamicLine: false,
159
+ };
160
+ });
161
+ ```
162
+
163
+ ## License
164
+
165
+ This project is licensed under the [MIT License](LICENSE).
package/dist/index.d.ts CHANGED
@@ -174,7 +174,7 @@ interface PointLeaveEvent extends BaseEvent {
174
174
  coordinates: LatLng;
175
175
  }
176
176
  interface ModeChangeEvent {
177
- mode: ModeEvent;
177
+ mode: Mode | "break";
178
178
  }
179
179
 
180
180
  declare class DrawLibre implements IControl {
package/dist/index.js CHANGED
@@ -1,5 +1,3 @@
1
- 'use strict';
1
+ var l=class o{static docStyle=typeof window<"u"&&window.document&&window.document.documentElement.style;static transformProp=o.testProp(["transform","WebkitTransform"]);static testProp(e){if(!o.docStyle)return e[0];for(let t=0;t<e.length;t++)if(e[t]in o.docStyle)return e[t];return e[0]}static create(e,t,i){let n=window.document.createElement(e);return t!==void 0&&(n.className=t),i&&i.appendChild(n),n}static remove(e){e.parentNode&&e.parentNode.removeChild(e);}static setTransform(e,t){o.transformProp&&e.style&&(e.style[o.transformProp]=t);}static manageEventListener(e,t,i,n,s={}){if(!t)return;let a=e==="add"?"addEventListener":"removeEventListener";"passive"in s?t[a](i,n,s):t[a](i,n,s.capture);}static mouseButton(e){return e.button}static addClassName(e,t){e.classList.contains(t)||e.classList.add(t);}static removeClassName(e,t){e.classList.contains(t)&&e.classList.remove(t);}};var S=class o{lng;lat;constructor(e,t){if(isNaN(e)||isNaN(t))throw new Error(`Invalid LngLat object: (${e}, ${t})`);if(this.lng=+e,this.lat=+t,this.lat>90||this.lat<-90)throw new Error("Invalid LngLat latitude value: must be between -90 and 90")}static convert(e){if(e instanceof o)return e;if(Array.isArray(e)&&(e.length===2||e.length===3))return new o(Number(e[0]),Number(e[1]));if(!Array.isArray(e)&&typeof e=="object"&&e!==null)return new o(Number("lng"in e?e.lng:e.lon),Number(e.lat));throw new Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: <lng>, lat: <lat>}, an object {lon: <lng>, lat: <lat>}, or an array of [<lng>, <lat>]")}};function H(o,...e){for(let t of e)for(let i in t)o[i]=t[i];return o}function Le(o,e,t){let i=new S(o.lng,o.lat);if(o=new S(o.lng,o.lat),e){let n=new S(o.lng-360,o.lat),s=new S(o.lng+360,o.lat),a=t.locationPoint(o).distSqr(e);t.locationPoint(n).distSqr(e)<a?o=n:t.locationPoint(s).distSqr(e)<a&&(o=s);}for(;Math.abs(o.lng-t.center.lng)>180;){let n=t.locationPoint(o);if(n.x>=0&&n.y>=0&&n.x<=t.width&&n.y<=t.height)break;o.lng>t.center.lng?o.lng-=360:o.lng+=360;}return o.lng!==i.lng&&t.locationPoint(o).y>t.height/2-t.getHorizon()?o:i}var me={center:"translate(-50%,-50%)",top:"translate(-50%,0)","top-left":"translate(0,0)","top-right":"translate(-100%,0)",bottom:"translate(-50%,-100%)","bottom-left":"translate(0,-100%)","bottom-right":"translate(-100%,-100%)",left:"translate(0,-50%)",right:"translate(-100%,-50%)"};function ge(o,e,t){let i=o.classList;for(let n in me)i.remove(`maplibregl-${t}-anchor-${n}`);i.add(`maplibregl-${t}-anchor-${e}`);}function Ee(o,e,t){t[o]&&t[o].indexOf(e)!==-1||(t[o]=t[o]||[],t[o].push(e));}function ye(o,e,t){if(t&&t[o]){let i=t[o].indexOf(e);i!==-1&&t[o].splice(i,1);}}var Y=class{_listeners;_oneTimeListeners;_eventedParent;_eventedParentData;on(e,t){return this._listeners=this._listeners||{},Ee(e,t,this._listeners),this}off(e,t){return ye(e,t,this._listeners),ye(e,t,this._oneTimeListeners),this}once(e,t){return t?(this._oneTimeListeners=this._oneTimeListeners||{},Ee(e,t,this._oneTimeListeners),this):new Promise(i=>this.once(e,i))}fire(e,t){typeof e=="string"&&(e=new I(e,t||{}));let i=e.type;if(this.listens(i)){e.target=this;let n=this._listeners&&this._listeners[i]?this._listeners[i].slice():[];for(let p of n)p.call(this,e);let s=this._oneTimeListeners&&this._oneTimeListeners[i]?this._oneTimeListeners[i].slice():[];for(let p of s)ye(i,p,this._oneTimeListeners),p.call(this,e);let a=this._eventedParent;a&&(H(e,typeof this._eventedParentData=="function"?this._eventedParentData():this._eventedParentData),a.fire(e));}else e instanceof ErrorEvent&&console.error(e.error);return this}listens(e){return this._listeners&&this._listeners[e]&&this._listeners[e].length>0||this._oneTimeListeners&&this._oneTimeListeners[e]&&this._oneTimeListeners[e].length>0||this._eventedParent&&this._eventedParent.listens(e)}setEventedParent(e,t){return this._eventedParent=e,this._eventedParentData=t,this}},I=class{type;constructor(e,t={}){H(this,t),this.type=e;}};var u=class o{x;y;constructor(e,t){this.x=e,this.y=t;}mag(){return Math.sqrt(this.x*this.x+this.y*this.y)}equals(e){return this.x===e.x&&this.y===e.y}dist(e){return Math.sqrt(this.distSqr(e))}distSqr(e){let t=e.x-this.x,i=e.y-this.y;return t*t+i*i}angle(){return Math.atan2(this.y,this.x)}angleTo(e){return Math.atan2(this.y-e.y,this.x-e.x)}angleWith(e){return this.angleWithSep(e.x,e.y)}angleWithSep(e,t){return Math.atan2(this.x*t-this.y*e,this.x*e+this.y*t)}_matMult(e){let t=e[0]*this.x+e[1]*this.y,i=e[2]*this.x+e[3]*this.y;return this.x=t,this.y=i,this}_add(e){return this.x+=e.x,this.y+=e.y,this}_sub(e){return this.x-=e.x,this.y-=e.y,this}_mult(e){return this.x*=e,this.y*=e,this}_div(e){return this.x/=e,this.y/=e,this}_multByPoint(e){return this.x*=e.x,this.y*=e.y,this}_divByPoint(e){return this.x/=e.x,this.y/=e.y,this}_unit(){return this._div(this.mag()),this}_perp(){let e=this.y;return this.y=this.x,this.x=-e,this}_rotate(e){let t=Math.cos(e),i=Math.sin(e),n=t*this.x-i*this.y,s=i*this.x+t*this.y;return this.x=n,this.y=s,this}_rotateAround(e,t){let i=Math.cos(e),n=Math.sin(e),s=t.x+i*(this.x-t.x)-n*(this.y-t.y),a=t.y+n*(this.x-t.x)+i*(this.y-t.y);return this.x=s,this.y=a,this}_round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}static convert(e){if(e instanceof o)return e;if(Array.isArray(e))return new o(+e[0],+e[1]);if(e.x!==void 0&&e.y!==void 0)return new o(+e.x,+e.y);throw new Error("Expected [x, y] or {x, y} point format")}};var ke={closeButton:!0,closeOnClick:!0,focusAfterOpen:!0,className:"",maxWidth:"240px",subpixelPositioning:!1},xe=["a[href]","[tabindex]:not([tabindex='-1'])","[contenteditable]:not([contenteditable='false'])","button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].join(", "),j=class extends Y{_map;options;_content;_container;_closeButton;_tip;_lngLat;_trackPointer;_pos;_flatPos;constructor(e){super(),this.options=H(Object.create(ke),e);}addTo(e){return this._map&&this.remove(),this._map=e,this.options.closeOnClick&&this._map.on("click",this._onClose),this.options.closeOnMove&&this._map.on("move",this._onClose),this._map.on("remove",this.remove),this._update(),this._focusFirstElement(),this._trackPointer?(this._map.on("mousemove",this._onMouseMove),this._map.on("mouseup",this._onMouseUp),this._container&&this._container.classList.add("maplibregl-popup-track-pointer"),this._map._canvasContainer.classList.add("maplibregl-track-pointer")):this._map.on("move",this._update),this.fire(new I("open")),this}isOpen(){return !!this._map}remove=()=>(this._content&&l.remove(this._content),this._container&&(l.remove(this._container),delete this._container),this._map&&(this._map.off("move",this._update),this._map.off("move",this._onClose),this._map.off("click",this._onClose),this._map.off("remove",this.remove),this._map.off("mousemove",this._onMouseMove),this._map.off("mouseup",this._onMouseUp),this._map.off("drag",this._onDrag),this._map._canvasContainer.classList.remove("maplibregl-track-pointer"),delete this._map,this.fire(new I("close"))),this);getLngLat(){return this._lngLat}setLngLat(e){return this._lngLat=S.convert(e),this._pos=null,this._flatPos=null,this._trackPointer=!1,this._update(),this._map&&(this._map.on("move",this._update),this._map.off("mousemove",this._onMouseMove),this._container&&this._container.classList.remove("maplibregl-popup-track-pointer"),this._map._canvasContainer.classList.remove("maplibregl-track-pointer")),this}trackPointer(){return this._trackPointer=!0,this._pos=null,this._flatPos=null,this._update(),this._map&&(this._map.off("move",this._update),this._map.on("mousemove",this._onMouseMove),this._map.on("drag",this._onDrag),this._container&&this._container.classList.add("maplibregl-popup-track-pointer"),this._map._canvasContainer.classList.add("maplibregl-track-pointer")),this}getElement(){return this._container}setText(e){return this.setDOMContent(document.createTextNode(e))}setHTML(e){let t=document.createDocumentFragment(),i=document.createElement("body"),n;for(i.innerHTML=e;n=i.firstChild,!!n;)t.appendChild(n);return this.setDOMContent(t)}getMaxWidth(){return this._container?.style.maxWidth}setMaxWidth(e){return this.options.maxWidth=e,this._update(),this}setDOMContent(e){if(this._content)for(;this._content.hasChildNodes();)this._content.firstChild&&this._content.removeChild(this._content.firstChild);else this._content=l.create("div","maplibregl-popup-content",this._container);return this._content.appendChild(e),this._createCloseButton(),this._update(),this._focusFirstElement(),this}addClassName(e){return this._container&&this._container.classList.add(e),this}removeClassName(e){return this._container&&this._container.classList.remove(e),this}setOffset(e){return this.options.offset=e,this._update(),this}toggleClassName(e){if(this._container)return this._container.classList.toggle(e)}setSubpixelPositioning(e){this.options.subpixelPositioning=e;}_createCloseButton(){this.options.closeButton&&(this._closeButton=l.create("button","maplibregl-popup-close-button",this._content),this._closeButton.type="button",this._closeButton.innerHTML="&#215;",this._closeButton.addEventListener("click",this._onClose));}_onMouseUp=e=>{this._update(e.point);};_onMouseMove=e=>{this._update(e.point);};_onDrag=e=>{this._update(e.point);};_update=e=>{let t=this._lngLat||this._trackPointer;if(!this._map||!t||!this._content)return;if(!this._container){if(this._container=l.create("div","maplibregl-popup",this._map.getContainer()),this._tip=l.create("div","maplibregl-popup-tip",this._container),this._container.appendChild(this._content),this.options.className)for(let p of this.options.className.split(" "))this._container.classList.add(p);this._closeButton&&this._closeButton.setAttribute("aria-label",this._map._getUIString("Popup.Close")),this._trackPointer&&this._container.classList.add("maplibregl-popup-track-pointer");}if(this.options.maxWidth&&this._container.style.maxWidth!==this.options.maxWidth&&(this._container.style.maxWidth=this.options.maxWidth),this._map.transform.renderWorldCopies&&!this._trackPointer?this._lngLat=Le(this._lngLat,this._flatPos,this._map.transform):this._lngLat=this._lngLat?.wrap(),this._trackPointer&&!e)return;let i=this._flatPos=this._pos=this._trackPointer&&e?e:this._map.project(this._lngLat);this._map.terrain&&(this._flatPos=this._trackPointer&&e?e:this._map.transform.locationPoint(this._lngLat));let n=this.options.anchor,s=Pe(this.options.offset);if(!n){let p=this._container.offsetWidth,g=this._container.offsetHeight,T;i.y+s.bottom.y<g?T=["top"]:i.y>this._map.transform.height-g?T=["bottom"]:T=[],i.x<p/2?T.push("left"):i.x>this._map.transform.width-p/2&&T.push("right"),T.length===0?n="bottom":n=T.join("-");}let a=i.add(s[n]);this.options.subpixelPositioning||(a=a.round()),l.setTransform(this._container,`${me[n]} translate(${a.x}px,${a.y}px)`),ge(this._container,n,"popup");};_focusFirstElement(){if(!this.options.focusAfterOpen||!this._container)return;let e=this._container.querySelector(xe);e&&e.focus();}_onClose=()=>{this.remove();}};function Pe(o){if(o)if(typeof o=="number"){let e=Math.round(Math.abs(o)/Math.SQRT2);return {center:new u(0,0),top:new u(0,o),"top-left":new u(e,e),"top-right":new u(-e,e),bottom:new u(0,-o),"bottom-left":new u(e,-e),"bottom-right":new u(-e,-e),left:new u(o,0),right:new u(-o,0)}}else if(o instanceof u||Array.isArray(o)){let e=u.convert(o);return {center:e,top:e,"top-left":e,"top-right":e,bottom:e,"bottom-left":e,"bottom-right":e,left:e,right:e}}else return {center:u.convert(o.center||[0,0]),top:u.convert(o.top||[0,0]),"top-left":u.convert(o["top-left"]||[0,0]),"top-right":u.convert(o["top-right"]||[0,0]),bottom:u.convert(o.bottom||[0,0]),"bottom-left":u.convert(o["bottom-left"]||[0,0]),"bottom-right":u.convert(o["bottom-right"]||[0,0]),left:u.convert(o.left||[0,0]),right:u.convert(o.right||[0,0])};else return Pe(new u(0,0))}var W=class{#e;#t;#i;_undoButton;_deleteButton;_saveButton;_container;constructor(e){this.#e=e,this._container=void 0,this.#i=!1,this.#s().then(()=>{this.#r(),this.#n();});}#n(){this.#e.mode?.addObserver(this.#o);}#o=e=>{let{store:t}=this.#e,{type:i,data:n}=e;i==="MODE_CHANGED"&&!n&&this.hidePanel(),i==="MODE_CHANGED"&&n&&t.tail?.val&&this.setPanelLocation({lat:t.tail?.val?.lat,lng:t.tail?.val?.lng});};#s=async()=>{try{this.#t=new j({offset:16,closeButton:!1,closeOnClick:!1,closeOnMove:!1,anchor:"bottom"});}catch(e){console.error("POPUP LOAD ERROR",e);}};#r=()=>{let{store:e}=this.#e;this.createPanel(),e.tail?.val&&this.setPanelLocation({lat:e.tail?.val?.lat,lng:e.tail?.val?.lng});};setPanelLocation=e=>{let{map:t}=this.#e;this.#i&&(this.#i=!1,this.showPanel()),this._container&&this.#t&&this.#t.setLngLat(e).setDOMContent(this._container).addTo(t);};hidePanel=()=>{!this.#i&&(this.#t?.addClassName("hide-panel"),this.#i=!0);};showPanel=()=>{this.#t?.removeClassName("hide-panel"),this.#i=!1;};onPointRemove=e=>{e?this.setPanelLocation(e):this.hidePanel();};removePanel=()=>{this._container&&l.remove(this._container),this.#t?.remove();};createButton=(e,t,i,n)=>{let s=l.create("button",`panel-button panel-button-${i}`,n);return s.setAttribute("data-type",e),s.setAttribute("aria-label",t),l.create("span",`icon ${e} icon-${i}`,s),s};createPanel=()=>{let{options:e}=this.#e,{locale:t}=e,{undo:i,delete:n,save:s}=e.panel.buttons,a=e.panel.size,p=document.querySelector(".maplibregl-popup-content"),g=l.create("div","dashboard",p);i.visible&&(this._undoButton=this.createButton("undo",t.undo,a,g)),n.visible&&(this._deleteButton=this.createButton("delete",t.delete,a,g)),s.visible&&(this._saveButton=this.createButton("save",t.save,a,g)),this._container=g;}};var V={type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[]}}]},K={type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"LineString",coordinates:[]}}]},Me={type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Point",coordinates:[]}}]},r={LineDynamicLayer:"mdl-line-dynamic-layer",LineLayer:"mdl-line-layer",LineLayerTransparent:"mdl-line-layer-transparent",LineLayerBreak:"mdl-line-break-layer",PolygonLayer:"mdl-polygon-layer",PointsLayer:"mdl-points-layer",SinglePointLayer:"mdl-single-point-layer",FirstPointLayer:"mdl-first-point-layer"},d={LineDynamicSource:"mdl-line-dynamic-source",LineSourceBreak:"mdl-line-source-break",LineSource:"mdl-line-source",PolygonSource:"mdl-polygon-source",PointsSource:"mdl-points-source",SinglePointSource:"mdl-single-point-source"},B={large:6.5,default:5.5},$={large:"#FF6464",default:"#666666"},w={"circle-radius":B.default,"circle-color":"#FEFFFE","circle-stroke-color":$.default,"circle-stroke-width":3},D={"circle-radius":B.large,"circle-color":"#FEFFFE","circle-stroke-color":"#666666","circle-stroke-width":3},U={"fill-color":"grey","fill-opacity":.4},N={"line-width":3,"line-color":"grey","line-opacity":.7},A={"circle-radius":B.default,"circle-color":"#FEFFFE","circle-stroke-color":"#666666","circle-stroke-width":3},F={"line-width":3,"line-color":"#FF6464","line-dasharray":[3,3]},Z=o=>[{id:r.SinglePointLayer,source:d.SinglePointSource,type:"circle",paint:o.layersPaint.onLinePoint,layout:{visibility:"none"}},{id:r.PolygonLayer,source:d.PolygonSource,type:"fill",paint:o.layersPaint.polygon,layout:{visibility:"none"}},{id:r.LineDynamicLayer,source:d.LineDynamicSource,type:"line",paint:o.layersPaint.line,layout:{visibility:"none"}},{id:r.LineLayer,source:d.LineSource,type:"line",paint:o.layersPaint.line,layout:{visibility:"visible"}},{id:r.LineLayerTransparent,source:d.LineSource,type:"line",paint:{"line-width":4,"line-color":"transparent"}},{id:r.LineLayerBreak,source:d.LineSourceBreak,type:"line",paint:o.layersPaint.breakLine,layout:{visibility:"none"}},{id:r.PointsLayer,source:d.PointsSource,type:"circle",paint:o.layersPaint.points,filter:["==",["get","isFirst"],!1]},{id:r.FirstPointLayer,source:d.PointsSource,type:"circle",paint:o.layersPaint.firstPoint,filter:["==",["get","isFirst"],!0]}];var E=class{static#e=0;static#t=e=>{e.setPaintProperty(r.FirstPointLayer,"circle-radius",B.large),e.setPaintProperty(r.FirstPointLayer,"circle-stroke-color",$.large);};static#i=e=>{e.setPaintProperty(r.FirstPointLayer,"circle-radius",B.default),e.setPaintProperty(r.FirstPointLayer,"circle-stroke-color",$.default);};static togglePointCircleRadius=(e,t)=>{t==="large"?this.#t(e):this.#i(e);};static removeTransparentLine=e=>{e.removeLayer(r.LineLayerTransparent);};static addTransparentLine=(e,t)=>{if(e.getLayer(r.LineLayerTransparent))return;let n=Z(t).find(s=>s.id===r.LineLayerTransparent);n&&e.addLayer(n);};static isDoubleClick(){let t=Date.now();return t-this.#e<=400?(this.#e=t,!0):(this.#e=t,!1)}};var v=class{static isFeatureTriggered(e,t){return e.target.queryRenderedFeatures(e.point,{layers:t}).some(n=>t.includes(n.layer.id))}static getPixelCoordinates=(e,t)=>{let{lat:i,lng:n}=t;return e.project([n,i])};static queryPointId=(e,t)=>e.queryRenderedFeatures(t,{layers:[r.PointsLayer,r.FirstPointLayer]})?.[0]?.properties.id},_=class{static#e(e){let t=[],i=e.head,n=new Set;for(;i!==null;){if(n.has(i.val?.id)){e.head&&e.head.val&&t.push([e.head.val.lng,e.head.val.lat]);break}n.add(i.val?.id),i.val&&t.push([i.val.lng,i.val.lat]),i=i.next;}return t}static getAllLines(e){let t=this.#e(e);return {type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"LineString",coordinates:t}}]}}static getLine(e,t){return {type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"LineString",coordinates:[e,t]}}]}}static getPolygon(e){let t=this.#e(e);return {type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[t]}}]}}static getPoints(e){let t=e.head,i=[],n=new Set;for(;t!==null&&!n.has(t.val?.id);){if(t.val){let s=t.val,a=t.val.id===e.head?.val?.id;i.push({type:"Feature",properties:{id:s.id,lat:s.lat,lng:s.lng,isFirst:a},geometry:{type:"Point",coordinates:[s.lng,s.lat]}});}n.add(t.val?.id),t=t.next;}return {type:"FeatureCollection",features:i}}},m=class o{static getGeometryIndex=(e,t)=>{let i=e.head,n=0;for(;i!==null;){if(i.val?.id===t)return n;n++,i=i.next;}return -1};static isFirstPoint(e){let t=e.target,i=e.point;return !!t.queryRenderedFeatures(i,{layers:[r.FirstPointLayer]}).length}static distance=(e,t)=>Math.sqrt((e.x-t.x)**2+(e.y-t.y)**2);static checkIfPointIsOnLine=(e,t,i)=>{let s=this.distance(e,t),a=this.distance(e,i),p=this.distance(i,t);return Math.abs(a+p-s)<.1};static isClosedGeometry=e=>e.tail?.next===e.head;static breakGeometry=(e,t)=>{if(!e.head)return;let i=e.head,n=e.tail;do{if(i?.val?.id===t){i!==e.head&&(n.next=i.next,e.head=i,e.tail=n),e.tail.next=null;return}n=i,i=i.next;}while(i!==e.head)};static closeGeometry=(e,t)=>{e.tail&&(e.tail.next=e.head),t.setClosedGeometry(!0);};static canCloseGeometry=e=>e.size>2&&!this.isClosedGeometry(e);static canBreakClosedGeometry=e=>e.size<=2;static switchToLineModeIfCan=e=>{let{mode:t,store:i,tiles:n,map:s}=e;o.canBreakClosedGeometry(i)&&(i.tail&&i.tail.val&&(i.tail.next=null),t.reset(),E.togglePointCircleRadius(s,"default"),n.renderPolygon(V));}},C=()=>{if("crypto"in window&&"randomUUID"in window.crypto)return window.crypto.randomUUID();function o(){return "0123456789abcdef"[Math.floor(Math.random()*16)]}function e(n){let s="";for(let a=0;a<n;a++)s+=o();return s}function t(n){let s=n===0,a=n===4;return s?8:a?12:4}let i=[];for(let n=0;n<5;n++)i.push(e(t(n)));return i.join("-")},O=(o,e)=>{let t,i=!0;function n(){i&&t&&(o(...t),t=null,i=!1,setTimeout(()=>{i=!0,n();},e));}return function(...s){t=s,n();}};var R=class{#e;#t;#i;#n;constructor(e){this.#e=e,this.#o(),this.render();}#o(){this.#s(),this.#r(),this.#a(r.LineLayer,r.SinglePointLayer),this.#a(r.LineLayerTransparent,r.SinglePointLayer),this.#a(r.LineLayerTransparent,r.FirstPointLayer),this.#a(r.LineLayerTransparent,r.PointsLayer),this.#a(r.PolygonLayer,r.LineLayer);}#s=()=>{let{map:e}=this.#e;Object.values(d).forEach(t=>{e.getSource(t)||e.addSource(t,{type:"geojson",data:{type:"FeatureCollection",features:[]},promoteId:"id"});});};#r=()=>{let{map:e,mode:t,options:i}=this.#e;Z(i).forEach(a=>{e.getLayer(a.id)||e.addLayer(a);});let s=e.getLayoutProperty(r.PolygonLayer,"visibility")==="none";t.getMode()==="polygon"&&s&&e.setLayoutProperty(r.PolygonLayer,"visibility","visible");};#a=(e,t)=>{let{map:i}=this.#e,n=i.getLayer(e),s=i.getLayer(t);n&&s&&i.moveLayer(e,t);};#l=()=>{let{map:e}=this.#e;Object.values(d).forEach(t=>{e.getSource(t)&&e.removeSource(t);});};#c=()=>{let{map:e}=this.#e;Object.values(r).forEach(t=>{e.getLayer(t)&&e.removeLayer(t);});};removeTiles=()=>{this.#c(),this.#l();};renderPoints=e=>{let{map:t}=this.#e,i=t.getSource(d.PointsSource);i&&i.setData(e);};renderLines=(e,t)=>{let{map:i}=this.#e,n=i.getSource(t);n&&n.setData(e);};renderPolygon=e=>{let{map:t}=this.#e,i=t.getSource(d.PolygonSource);i&&i.setData(e);};render=()=>{let{mode:e,options:t,store:i}=this.#e,n=_.getPoints(i),s=_.getAllLines(i);if(this.#t=n,this.#i=s,this.renderPoints(n),this.renderLines(s,d.LineSource),t.modes.polygon.visible&&e.isPolygon()){let p=_.getPolygon(i);this.#n=p,this.renderPolygon(p);}};#h=(e,t)=>{if(this.#n.features[0].geometry.coordinates[0][e]=[t.lng,t.lat],e===0){let n=this.#n.features[0].geometry.coordinates[0]?.length-1;this.#n.features[0].geometry.coordinates[0][n]=[t.lng,t.lat];}this.renderPolygon(this.#n);};#p=(e,t)=>{let{mode:i}=this.#e;this.#i.features[0].geometry.coordinates[e]=[t.lng,t.lat];let n=e===0;if(this.#i&&i.getClosedGeometry()&&n){let a=this.#i.features[0].geometry.coordinates?.length-1;this.#i.features[0].geometry.coordinates[a]=[t.lng,t.lat];}this.renderLines(this.#i,d.LineSource);};renderOnMouseMove=(e,t)=>{let{mode:i,options:n}=this.#e;this.#t.features[e].geometry.coordinates=[t.lng,t.lat],this.renderPoints(this.#t),this.#p(e,t),n.modes.polygon.visible&&i.isPolygon()&&this.#h(e,t);};resetGeometries=()=>{this.renderPoints(Me),this.renderLines(K,d.LineSource),this.renderPolygon(V);}};var Te=8,we=8,k=class{_container;_label;constructor(){this._container=void 0;}create=e=>{let t=l.create("div","popup-container",document.body),i=l.create("span",`popup-text popup-text-${e.placement}`,t);return i.textContent=e.label,this._container=t,this._label=i,this};#e=()=>{!this._label?.classList.value.includes("popup-text-active")&&this._label?.classList.add("popup-text-active");};#t=()=>this._label?{width:this._label.clientWidth,height:this._label.clientHeight}:{width:0,height:0};#i=e=>{let{bottom:t,left:i}=e.target.getBoundingClientRect(),{width:n,height:s}=this.#t();return {x:i-we-n,y:t-s-2}};#n=e=>{let{bottom:t,left:i,right:n}=e.target.getBoundingClientRect(),{width:s}=this.#t();return {x:(n-i)/2+i-s/2,y:t+Te}};getPosition=(e,t)=>t==="left"?this.#i(e):this.#n(e);setPosition=e=>{let{x:t,y:i}=e;this._container&&(this._container.style.left=`${t}px`,this._container.style.top=`${i}px`),this.#e();};remove=()=>{this._container&&l.remove(this._container);}};var P={AUTO:"auto",DEFAULT:"default",POINTER:"pointer",CROSSHAIR:"crosshair",MOVE:"move",HELP:"help",GRAB:"grab",GRABBING:"grabbing"};var J=(o,e)=>{for(let[t,i]of Object.entries(e))l.manageEventListener("add",o,t,i);},X=(o,e)=>{for(let[t,i]of Object.entries(e))l.manageEventListener("remove",o,t,i);},be=(o,e)=>{let t=e.locale.line,i=e.locale.polygon,n=e.locale.break;return {line:t,polygon:i,break:n}[o]};var L={DOUBLECLICK:"mdl:doubleclick",POINTENTER:"mdl:pointenter",POINTLEAVE:"mdl:pointleave",MOVEEND:"mdl:moveend",ADD:"mdl:add",UNDO:"mdl:undo",REMOVEALL:"mdl:removeall",SAVE:"mdl:save",BREAK:"mdl:break",MODECHANGED:"mdl:modechanged"};var y={panel:{size:"medium",buttons:{undo:{visible:!0},delete:{visible:!0},save:{visible:!0,clearOnSave:!0}}},modes:{initial:null,line:{visible:!0,closeGeometry:!0},polygon:{visible:!0},breakGeometry:{visible:!0}},layersPaint:{onLinePoint:D,firstPoint:w,points:A,line:N,polygon:U,breakLine:F},initial:null,dynamicLine:!0,locale:{save:"Save",delete:"Delete all",undo:"Undo",line:"Line",polygon:"Polygon",break:"Split",closeLine:"Close line",createPolygon:"Create polygon"}};var f=class{static addPoint(e,t,i){t.fire(L.ADD,{id:e.id,coordinates:{lat:e.lat,lng:e.lng},total:e.total,timestamp:Date.now(),mode:{geometry:i.getMode(),closedGeometry:i.getClosedGeometry()}});}static movePoint(e,t){t.fire(L.MOVEEND,{id:e.id,start_coordinates:{lat:e.start.lat,lng:e.start.lng},end_coordinates:{lat:e.end.lat,lng:e.end.lng},total:e.total,timestamp:Date.now()});}static pointDoubleClick(e,t){t.fire(L.DOUBLECLICK,{id:e.id,coordinates:{lat:e.lat,lng:e.lng},total:e.total,timestamp:Date.now()});}static enterPoint(e,t){t.fire(L.POINTENTER,{id:e.id,coordinates:{lat:e.lat,lng:e.lng},total:e.total,timestamp:Date.now()});}static leavePoint(e,t){t.fire(L.POINTLEAVE,{id:e.id,coordinates:{lat:e.lat,lng:e.lng},total:e.total,timestamp:Date.now()});}static undoPoint(e,t,i){t.fire(L.UNDO,{originalEvent:i,id:e.id,coordinates:{lat:e.lat,lng:e.lng},total:e.total,timestamp:Date.now()});}static modeChanged(e,t){e.fire(L.MODECHANGED,{mode:t});}static removeAllPoints(e,t){e.fire(L.REMOVEALL,{originalEvent:t});}static onSaveClick(e,t,i){let{map:n,mode:s}=e;n.fire(L.SAVE,{originalEvent:i,timestamp:Date.now(),steps:t,mode:{geometry:s.getMode(),closedGeometry:s.getClosedGeometry()}});}static onLineBreak(e){e.fire(L.BREAK);}};var Q=class{#e;constructor(e){this.#e=e,this.#t();}#t=()=>{this.#e.mode.addObserver(this.#l);};removeConsumers=()=>{this.#e.mode.removeObserver(this.#l);};#i=()=>{let{_line:e,_polygon:t,_break:i}=this.#e.control;e?.classList.remove("control-button-active"),t?.classList.remove("control-button-active"),i?.classList.remove("control-button-active");};#n=e=>{this.#i(),e.classList.add("control-button-active");};#o=e=>{let{data:t}=e,{_line:i,_polygon:n,_break:s}=this.#e.control,{mode:a}=this.#e;if(f.modeChanged(this.#e.map,t),!(!i||!n||!s)){switch(t){case"line":this.#n(i);break;case"polygon":this.#n(n);break;}t?a.getClosedGeometry()&&this.#r(s):this.#s(s);}};#s=e=>{e.setAttribute("disabled","true"),e.setAttribute("aria-disabled","true");};#r=e=>{e.removeAttribute("disabled"),e.removeAttribute("aria-disabled");};#a=e=>{let{data:t}=e,{_break:i,_line:n,_polygon:s}=this.#e.control,{mode:a}=this.#e;t?(i&&this.#r(i),a.getMode()==="polygon"&&n&&this.#s(n),a.getMode()==="line"&&s&&this.#s(s)):(i&&this.#s(i),a.getMode()==="polygon"&&n&&this.#r(n),a.getMode()==="line"&&s&&this.#r(s));};#l=e=>{let{type:t,data:i}=e;if(t==="MODE_CHANGED"&&this.#o(e),t==="CLOSED_GEOMETRY_CHANGED"&&this.#a(e),t==="BREAK_CHANGED"&&i){let{_break:n}=this.#e.control;this.#n(n),f.modeChanged(this.#e.map,"break");}}};var ee=class{#e;#t;#i;constructor(e){this.#e=e,this.#i=new Q(e),this.#t=new k,this.#n();}#n(){let{control:e}=this.#e;if(e){let t={mouseenter:this.onButtonEnter,mouseleave:this.onButtonLeave};e._line&&J(e._line,{...t,click:this.onLineClick}),e._polygon&&J(e._polygon,{...t,click:this.onPolygonClick}),e._break&&J(e._break,{...t,click:this.onBreakClick});}}#o(){let{control:e}=this.#e;if(e){let t={mouseenter:this.onButtonEnter,mouseleave:this.onButtonLeave};e._line&&X(e._line,{...t,click:this.onLineClick}),e._polygon&&X(e._polygon,{...t,click:this.onPolygonClick}),e._break&&X(e._break,{...t,click:this.onBreakClick});}}remove(){this.#i.removeConsumers(),this.#o(),this.#t.remove();}onButtonEnter=e=>{let{options:t}=this.#e,i=e.target.getAttribute("data-type");if(i){let n=be(i,t),s="left";this.#t.create({label:n,placement:s}).setPosition(this.#t.getPosition(e,s));}};onButtonLeave=()=>{this.#t.remove();};#s=()=>{let{control:e}=this.#e;e._line?.classList.remove("control-button-active"),e._polygon?.classList.remove("control-button-active"),e._break?.classList.remove("control-button-active");};#r=()=>{let{map:e,mode:t}=this.#e;t.getMode()||e.fire("mode:initialize");};onLineClick=()=>{let{map:e,mode:t,tiles:i,control:n}=this.#e;this.#r(),this.#s(),t.getMode()==="line"&&!t.getBreak()?(t.setMode(null),e.fire("mode:remove"),i.resetGeometries()):(n._line?.classList.add("control-button-active"),t.setMode("line"),i.render());};onPolygonClick=()=>{let{map:e,mode:t,tiles:i,control:n}=this.#e;this.#r(),this.#s(),t.getMode()==="polygon"&&!t.getBreak()?(t.setMode(null),e.fire("mode:remove"),e.setLayoutProperty(r.PolygonLayer,"visibility","visible"),i.resetGeometries()):(n._polygon?.classList.add("control-button-active"),t.setMode("polygon"),i.render());};onBreakClick=()=>{let{map:e,mode:t,control:i}=this.#e;t.getBreak()&&(t.setMode(null),e.fire("mode:remove")),this.#s(),i._break?.classList.add("control-button-active"),t.setBreak(!0),e.getCanvasContainer().style.cursor=P.POINTER;}};var x=class{observers;constructor(){this.observers=new Set;}addObserver(e){this.observers.add(e);}removeObserver(e){this.observers.delete(e);}unsubscribe(){this.observers.clear();}notify(e){this.observers.forEach(t=>t(e));}};var G={EMPTY_INITIAL_STATE:"You passed an empty initial array in the options. Please either remove the 'initial' property or include at least one element in the array.",MISSING_IDS:"You set 'generateId' to false but did not provide IDs for all steps. Please ensure all steps have IDs or set 'generateId' to true.",NOT_ENOUGH_POINTS_TO_CLOSE:"At least three points are required to close a polygon or a line. Please add more points or set 'closeGeometry' to false.",FIRST_LAST_POINT_NOT_EQUAL:"The first and last points of a polygon or a closed linestring must be the same. Please ensure the first and last points are equal or set 'closeGeometry' to false."};var te=class{val;next;constructor(e=null,t=null){this.val=e,this.next=t;}},q=class extends x{head;tail;size;constructor(e){super();let t=b.initStore(e);this.head=t?t.head:null,this.tail=t?t.tail:null,this.size=t?t.size:0;}push(e){let t=new te(e);this.head?this.tail&&(this.tail.next=t,this.tail=t):this.head=this.tail=t,this.size++,this.pingConsumers();}insert(e,t){let i=new te(e,t.next);this.tail===t&&this.head===t.next&&(this.tail=i),t.next=i,this.size++;}findStepById(e){let t=this.head,i=new Set;for(;t!==null&&!i.has(t);){if(t.val&&t.val.id===e)return t.val;i.add(t),t=t.next;}return null}removeStepById(e){if(!this.head)return null;let t=this.head,i=null;for(;t!==null;){if(t?.val?.id===e)return t===this.head?(this.head=t.next,this.tail&&(this.tail.next=t.next)):i.next=t.next,t===this.tail&&(this.tail=i),this.size--,this.pingConsumers(),t;i=t,t.next&&(t=t.next);}return null}reset(){this.head=null,this.tail=null,this.size=0,this.pingConsumers();}pingConsumers=()=>{this.notify({type:"STORE_CHANGED",data:{head:this.head,tail:this.tail,size:this.size}});}},b=class o{static isLastPoint=(e,t)=>e.tail?.val?.id===t;static initStore(e){if(!e?.initial)return null;if(e&&e.initial&&!e.initial.steps.length)throw new Error(G.EMPTY_INITIAL_STATE);if(e&&e.initial.steps){let{steps:n,closeGeometry:s,generateId:a}=e.initial;return o.fromArray(n,s,a)}return null}static#e=e=>e.map(t=>({...t,id:C()}));static buildStepSequence(e){let t=new q;return e.forEach(i=>{t.push(i);}),t}static fromArray(e,t,i){let n=i?this.#e(e):e,s=this.buildStepSequence(n);return t&&s.tail&&(s.tail.next=s.head),s}static toArray(e){if(!e)return [];let t=new Set,i=[],n=e;for(;n!==null&&!t.has(n);)t.add(n),i.push(n.val),n=n.next;return i}};var ie=class{#e;#t;constructor(e){this.#e=e,this.#t=new k;}initEvents(){let{panel:e}=this.#e;e&&(l.manageEventListener("add",e?._undoButton,"click",this.#o),l.manageEventListener("add",e?._undoButton,"mouseenter",this.onMouseEnter),l.manageEventListener("add",e?._undoButton,"mouseleave",this.onMouseLeave)),e&&(l.manageEventListener("add",e?._deleteButton,"click",this.#n),l.manageEventListener("add",e?._deleteButton,"mouseenter",this.onMouseEnter),l.manageEventListener("add",e?._deleteButton,"mouseleave",this.onMouseLeave)),e&&(l.manageEventListener("add",e?._saveButton,"click",this.onSaveClick),l.manageEventListener("add",e?._saveButton,"mouseenter",this.onMouseEnter),l.manageEventListener("add",e?._saveButton,"mouseleave",this.onMouseLeave));}removeEvents(){let{panel:e}=this.#e;e&&e._undoButton&&(l.manageEventListener("remove",e._undoButton,"click",this.#o),l.manageEventListener("remove",e._undoButton,"mouseenter",this.onMouseEnter),l.manageEventListener("remove",e._undoButton,"mouseleave",this.onMouseLeave)),e&&e._deleteButton&&(l.manageEventListener("remove",e._deleteButton,"click",this.#n),l.manageEventListener("remove",e._deleteButton,"mouseenter",this.onMouseEnter),l.manageEventListener("remove",e._deleteButton,"mouseleave",this.onMouseLeave)),e&&e._saveButton&&(l.manageEventListener("remove",e._saveButton,"click",this.onSaveClick),l.manageEventListener("remove",e._saveButton,"mouseenter",this.onMouseEnter),l.manageEventListener("remove",e._saveButton,"mouseleave",this.onMouseLeave));}#i=e=>{let{options:t}=this.#e;return {undo:t.locale.undo,delete:t.locale.delete,save:t.locale.save}[e]};onMouseEnter=e=>{let t=e.target.getAttribute("data-type");if(t){let i=this.#i(t);this.#t.create({label:i,placement:"bottom"}).setPosition(this.#t.getPosition(e,"bottom"));}};onMouseLeave=()=>{this.#t.remove();};#n=e=>{let{tiles:t,mode:i,panel:n,store:s,map:a}=this.#e;s.reset(),n.hidePanel(),i.reset(),E.togglePointCircleRadius(a,"default"),this.#t.remove(),t.resetGeometries(),f.removeAllPoints(a,e);};#o=e=>{let{store:t,panel:i,map:n,tiles:s}=this.#e,a=t.tail?.val;t.removeStepById(a.id);let p={...a,total:t.size};f.undoPoint(p,n,e),m.switchToLineModeIfCan(this.#e),i?.onPointRemove(t.tail?.val),this.#t.remove(),requestAnimationFrame(s.render);};onSaveClick=e=>{let{store:t,options:i}=this.#e;f.onSaveClick(this.#e,b.toArray(t.head),e),this.#t.remove(),i.panel.buttons.save.clearOnSave&&this.#n(e);}};var M=class{static updatePointsData(e){let i=e.target.getSource(d.SinglePointSource);i&&i.setData({type:"Feature",geometry:{type:"Point",coordinates:[e.lngLat.lng,e.lngLat.lat]},properties:{}});}static setSinglePointVisible(e){e.target.setLayoutProperty(r.SinglePointLayer,"visibility","visible");}static setSinglePointHidden(e){let t=e.target;setTimeout(()=>{t.setLayoutProperty(r.SinglePointLayer,"visibility","none");},33);}static triggerPostPointAddition(e,t){let{panel:i,tiles:n,store:s,map:a}=t;m.canCloseGeometry(s)&&E.togglePointCircleRadius(a,"large"),i?.setPanelLocation(e.lngLat),n.render();}static addPointToMap=(e,t)=>{let{store:i,map:n,mode:s}=t,a={...e.lngLat,id:C()};i.push(a),f.addPoint({...a,total:i.size},n,s),this.triggerPostPointAddition(e,t);};static updateSelectedStepLatLng=(e,t)=>{t.lat=e.lngLat.lat,t.lng=e.lngLat.lng;}};var fe=(o,e)=>{let t=e.head,i=new Set;for(;t!==null&&!i.has(t);){if(t.next&&t.next.val&&t.val){let n=o.target,s=v.getPixelCoordinates(n,t.val),a=v.getPixelCoordinates(n,t.next.val),p=v.getPixelCoordinates(n,o.lngLat);if(m.checkIfPointIsOnLine(s,a,p))return t}i.add(t),t=t.next;}return null},_e=(o,e)=>{let t=fe(o,e);if(t){let i={...o.lngLat,id:C()};return e.insert(i,t),i}return null},Ce=(o,e)=>{let{store:t,tiles:i,panel:n}=e;t.tail?.val&&(n?.setPanelLocation(t.tail.val),M.setSinglePointHidden(o),i.render());},Se=o=>v.isFeatureTriggered(o,[r.PointsLayer,r.FirstPointLayer]);var Oe=15,ne=class{props;#e;#t;constructor(e){this.props=e,this.#e=null,this.#t=O(this.#n,Oe);}initBreakEvents=()=>{let{map:e}=this.props;e.on("click",r.LineLayerTransparent,this.#i),e.on("mouseenter",r.LineLayerTransparent,this.#t),e.on("mousemove",r.LineLayerTransparent,this.#t),e.on("mouseleave",r.LineLayerTransparent,this.#o);};removeBreakEvents=()=>{let{map:e}=this.props;e.off("click",r.LineLayerTransparent,this.#i),e.off("mouseenter",r.LineLayerTransparent,this.#t),e.off("mousemove",r.LineLayerTransparent,this.#t),e.off("mouseleave",r.LineLayerTransparent,this.#o);};hideBreakLine=()=>{let{map:e}=this.props;e.getLayoutProperty(r.LineLayerBreak,"visibility")!=="none"&&e.setLayoutProperty(r.LineLayerBreak,"visibility","none");};showBreakLine=()=>{let{map:e}=this.props;e.getLayoutProperty(r.LineLayerBreak,"visibility")!=="visible"&&e.setLayoutProperty(r.LineLayerBreak,"visibility","visible");};#i=()=>{let{store:e,mode:t,panel:i,map:n,tiles:s}=this.props,a=this.#e?.next?.val?.id;m.breakGeometry(e,a),e.tail?.val&&i.setPanelLocation({lat:e.tail?.val?.lat,lng:e.tail?.val?.lng}),this.#o(),n.setLayoutProperty(r.PolygonLayer,"visibility","none"),t.reset(),s.render(),f.onLineBreak(n);};#n=e=>{let{map:t,store:i}=this.props,n=fe(e,i);n?.val?.id!==this.#e?.val?.id&&(this.#e=n);let s=t.getSource(d.LineSourceBreak),a=[n?.val?.lng,n?.val?.lat],p=[n?.next?.val?.lng,n?.next?.val?.lat],g=_.getLine(a,p);g&&(s.setData(g),this.showBreakLine());};#o=()=>{setTimeout(()=>{this.hideBreakLine();},Oe+10);}};var De=10,oe=class{#e;#t;#i;#n;#o;#s;constructor(e){this.#e=e,this.#t=e.options.dynamicLine,this.#i=null,this.#n=null,this.#r(),this.#s=O(this.#p,De);}#r(){this.#e.store.addObserver(this.#l),this.#e.mode.addObserver(this.#c),this.#e.mouseEvents.addObserver(this.#a);}removeLine=()=>{this.hideDynamicLine();};removeConsumers=()=>{this.#e.store.removeObserver(this.#l),this.#e.mode.removeObserver(this.#c),this.#e.mouseEvents.removeObserver(this.#a);};#a=e=>{let{mode:t}=this.#e;if(!t.getClosedGeometry()&&(e.type==="lastPointMouseClick"&&e.data?(this.hideDynamicLine(),this.#t=!1):e.type==="lastPointMouseClick"&&!e.data&&(this.#t=!0),!!this.#t&&((e.type==="pointMouseEnter"||e.type==="lineMouseEnter")&&e.data&&this.hideDynamicLine(),(e.type==="pointMouseLeave"||e.type==="lineMouseLeave")&&e.data))){let{store:i}=this.#e;this.#i=i.tail?.val,this.#n=i.tail?.val,this.showDynamicLine();}};#l=e=>{let{store:t}=this.#e;switch(e.type){case"STORE_CHANGED":e.data.tail?.val&&!m.isClosedGeometry(t)&&(this.#i=e.data.tail?.val,this.showDynamicLine());break;}};#c=e=>{let{store:t}=this.#e;e.type==="CLOSED_GEOMETRY_CHANGED"&&(e.data&&this.hideDynamicLine(),!e.data&&t?.tail?.val&&(this.#i=t?.tail?.val,this.showDynamicLine()));};initDynamicEvents=()=>{let{map:e}=this.#e;e.on("click",this.#f),e.on("mousemove",this.#s),e.on(L.REMOVEALL,this.hideDynamicLine),e.on(L.UNDO,this.#m),e.on(L.DOUBLECLICK,this.#v);};removeEvents=()=>{let{map:e}=this.#e;e.off("click",this.#f),e.off("mousemove",this.#s),e.off(L.REMOVEALL,this.hideDynamicLine),e.off(L.UNDO,this.#m),e.off(L.DOUBLECLICK,this.#v);};hideDynamicLine=()=>{let{map:e,tiles:t}=this.#e;this.#i=null,this.#n=null,this.#o=null,e.off("mousemove",this.#s),t.renderLines(K,d.LineDynamicSource),e.setLayoutProperty(r.LineDynamicLayer,"visibility","none");};showDynamicLine=()=>{let{map:e}=this.#e,t=[this.#i?.lng,this.#i?.lat],i=[this.#n?.lng,this.#n?.lat];this.#o=_.getLine(t,i),e.setLayoutProperty(r.LineDynamicLayer,"visibility","visible"),this.#n&&this.#h({lng:this.#n?.lng,lat:this.#n?.lat}),e.on("mousemove",this.#s);};#h=e=>{if(!this.#o)return;let{tiles:t}=this.#e;this.#o.features[0].geometry.coordinates[1]=[e.lng,e.lat],t.renderLines(this.#o,d.LineDynamicSource);};#p=e=>{this.#h(e.lngLat);};#f=e=>{let{mode:t}=this.#e,i=v.isFeatureTriggered(e,[r.LineLayerTransparent,r.LineLayer]);i&&t.getBreak()&&(this.#n={lng:e.lngLat.lng,lat:e.lngLat.lat}),!i&&this.hideDynamicLine();};#m=e=>{let{store:t,mode:i}=this.#e;if(!i.getClosedGeometry()){let n=e.target.unproject({x:e.originalEvent.x,y:e.originalEvent.y});this.#n={lng:n.lng,lat:n.lat},this.#i=t.tail?.val,this.showDynamicLine();}};#v=e=>{let{store:t,mode:i}=this.#e;i.getClosedGeometry()||(this.#n={lng:e.coordinates.lng,lat:e.coordinates.lat},this.#i=t.tail?.val,this.showDynamicLine());}};var Ae=22,se=class{props;#e;#t;constructor(e){this.props=e,this.#e=!1,this.#t=null;}initEvents(){let{map:e}=this.props;e.on("click",r.LineLayerTransparent,this.#i),e.on("mousemove",r.LineLayerTransparent,this.#o),e.on("mouseenter",r.LineLayerTransparent,this.#s),e.on("mouseleave",r.LineLayerTransparent,this.#r);}removeEvents(){let{map:e}=this.props;e.off("click",r.LineLayerTransparent,this.#i),e.off("mousemove",r.LineLayerTransparent,this.#o),e.off("mouseenter",r.LineLayerTransparent,this.#s),e.off("mouseleave",r.LineLayerTransparent,this.#r);}#i=e=>{let{store:t,map:i,mode:n}=this.props;if(Se(e))return;let s=_e(e,t);s&&(f.addPoint({...s,total:t.size},i,n),Ce(e,this.props));};#n=e=>{M.setSinglePointVisible(e),e.target.getLayer(r.SinglePointLayer)&&M.updatePointsData(e);};#o=O(e=>{if(v.isFeatureTriggered(e,[r.PointsLayer,r.FirstPointLayer]))return;let{mouseEvents:t}=this.props;t.pointMouseDown||t.pointMouseEnter||(this.#t=e,!this.#e&&(this.#e=!0,requestAnimationFrame(()=>{this.#t&&(this.#n(this.#t),this.#e=!1);})));},Ae);#s=e=>{let{mouseEvents:t}=this.props;t.pointMouseDown||t.pointMouseEnter||v.isFeatureTriggered(e,[r.PointsLayer,r.FirstPointLayer])||(t.lineMouseEnter=!0,M.setSinglePointVisible(e));};#r=e=>{let{mouseEvents:t}=this.props;t.pointMouseDown||t.pointMouseEnter||(t.lineMouseLeave=!0,M.setSinglePointHidden(e));}};var re=class{props;#e;#t;#i;#n;constructor(e){this.props=e,this.#e=new ne(e),this.#t=new se(e),this.#i=null,this.#n="default";}init(){this.#o(),this.#s(),this.#r();}#o=()=>{window.innerWidth<=768||this.props.options.dynamicLine&&(this.#i=new oe(this.props));};#s(){!this.props.mode.getBreak()&&(this.#t.initEvents(),this.props.options.dynamicLine&&this.#i?.initDynamicEvents());}#r(){this.props.mode.addObserver(this.#h),this.props.mouseEvents.addObserver(this.#c);}remove(){this.#a(),this.#l();}#a(){this.props.mode.removeObserver(this.#h),this.props.mouseEvents.removeObserver(this.#c),this.props.options.dynamicLine&&this.#i?.removeConsumers();}#l(){this.#e.removeBreakEvents(),this.#t.removeEvents(),this.props.options.dynamicLine&&(this.#i?.removeEvents(),this.#i?.removeLine());}#c=e=>{let{type:t,data:i}=e,{mode:n}=this.props;if(!(!i||!n.getBreak()))switch(t){case"pointMouseDown":this.#e.removeBreakEvents(),this.#e.hideBreakLine();break;case"pointMouseUp":this.#e.initBreakEvents();break;}};#h=e=>{let{type:t,data:i}=e;t==="MODE_CHANGED"&&this.#n==="break"&&(this.#e.removeBreakEvents(),this.#t.initEvents(),this.#n="default"),t==="BREAK_CHANGED"&&i&&this.#n==="default"&&(this.#t.removeEvents(),this.#e.initBreakEvents(),this.#n="break");}};var ae=class{#e;#t;#i;constructor(e){this.#t=e,this.#e=!1,this.#i=new k,e.mode.addObserver(this.#n);}initEvents(){let{map:e}=this.#t;e.on("click",r.FirstPointLayer,this.#o),e.on("mouseenter",r.FirstPointLayer,this.#c),e.on("mouseleave",r.FirstPointLayer,this.#a),e.on("mouseup",r.FirstPointLayer,this.#r),e.on("mousedown",r.FirstPointLayer,this.#s);}removeEvents(){let{map:e}=this.#t;e.off("click",r.FirstPointLayer,this.#o),e.off("mouseenter",r.FirstPointLayer,this.#c),e.off("mouseleave",r.FirstPointLayer,this.#a),e.off("mouseup",r.FirstPointLayer,this.#r);}#n=e=>{let{map:t,store:i}=this.#t,{type:n,data:s}=e;n==="MODE_CHANGED"&&(s==="line"||s==="polygon"?t.on("click",r.FirstPointLayer,this.#o):t.off("click",r.FirstPointLayer,this.#o),m.canCloseGeometry(i)&&E.togglePointCircleRadius(t,"large"));};#o=()=>{let{store:e,map:t,mode:i,tiles:n}=this.#t;if(i.getMode()==="polygon"&&t.setLayoutProperty(r.PolygonLayer,"visibility","visible"),m.canCloseGeometry(e)){m.closeGeometry(e,i);let s=Object.assign({},e.head?.val,{id:C(),total:e.size});f.addPoint(s,t,i),E.togglePointCircleRadius(t,"default"),n.render();}};#s=()=>{this.#e=!0,this.#i.remove();};#r=()=>{this.#e=!1;};#a=()=>{let{mouseEvents:e}=this.#t;this.#e||(e.firstPointMouseLeave=!0,this.#i.remove());};#l=()=>{let{mode:e,options:t}=this.#t;return e.getMode()==="line"&&t.modes.line.closeGeometry?t.locale.closeLine:e.getMode()==="polygon"?t.locale.createPolygon:""};#c=e=>{let{mode:t,mouseEvents:i,store:n}=this.#t;if(!(t.getClosedGeometry()||this.#e)&&(i.firstPointMouseEnter=!0,m.canCloseGeometry(n))){let{x:s,y:a}=e.originalEvent;if(s&&a){this.#i.create({label:this.#l(),placement:"bottom"});let g=this.#i._label?this.#i._label.clientWidth/2:0;this.#i.setPosition({x:s-g,y:a+14});}}}};var le=class{#e;#t;#i;#n;#o;#s;#r;#a;constructor(e){this.#e=e,this.#t=void 0,this.#i=null,this.#n=null,this.#o=null,this.#s=new ae(e),this.#r=!1,this.#a=null;}#l=()=>{let{map:e}=this.#e;e.on("click",r.FirstPointLayer,this.#p),e.on("mouseenter",r.FirstPointLayer,this.#L),e.on("mouseleave",r.FirstPointLayer,this.#g),e.on("mousedown",r.FirstPointLayer,this.#d),e.on("mouseup",r.FirstPointLayer,this.#u),e.on("touchend",r.FirstPointLayer,this.#u),e.on("touchstart",r.FirstPointLayer,this.#d),this.#s.initEvents();};initEvents=()=>{let{map:e}=this.#e;e.on("click",this.#m),e.on("dblclick",this.#h),e.on("click",r.PointsLayer,this.#p),e.on("mouseenter",r.PointsLayer,this.#L),e.on("mouseleave",r.PointsLayer,this.#g),e.on("mousedown",r.PointsLayer,this.#d),e.on("mouseup",r.PointsLayer,this.#u),e.on("touchend",r.PointsLayer,this.#u),e.on("touchstart",r.PointsLayer,this.#d),this.#l();};#c=()=>{let{map:e}=this.#e;e.off("click",r.FirstPointLayer,this.#p),e.off("mouseenter",r.FirstPointLayer,this.#L),e.off("mouseleave",r.FirstPointLayer,this.#g),e.off("mousedown",r.FirstPointLayer,this.#d),e.off("mouseup",r.FirstPointLayer,this.#u),e.off("touchend",r.PointsLayer,this.#u),e.off("touchstart",r.PointsLayer,this.#d),this.#s.removeEvents();};removeEvents=()=>{let{map:e}=this.#e;e.off("click",this.#m),e.off("dblclick",this.#h),e.off("mousemove",this.#y),e.off("click",r.PointsLayer,this.#p),e.off("mouseenter",r.PointsLayer,this.#L),e.off("mouseleave",r.PointsLayer,this.#g),e.off("mousedown",r.PointsLayer,this.#d),e.off("mouseup",r.PointsLayer,this.#u),this.#c();};#h=e=>{e.preventDefault();};#p=e=>{let{store:t,tiles:i,panel:n,map:s,mouseEvents:a}=this.#e;E.isDoubleClick()&&this.#n&&(t.removeStepById(this.#n.id),n.onPointRemove(t.tail?.val),f.pointDoubleClick({...this.#n,total:t.size},this.#e.map),m.switchToLineModeIfCan(this.#e));let p=v.queryPointId(s,e.point);b.isLastPoint(t,p)&&(a.lastPointMouseClick=!0,a.lastPointMouseUp=!1),i.render();};#f=e=>v.isFeatureTriggered(e,[r.PointsLayer,r.FirstPointLayer,r.LineLayerTransparent,r.LineLayerBreak]);#m=e=>{let{mode:t,mouseEvents:i,map:n}=this.#e;t.getClosedGeometry()||this.#f(e)||(i.lastPointMouseClick&&(i.lastPointMouseClick=!1),n.getCanvasContainer().style.cursor="grab",M.addPointToMap(e,this.#e),M.setSinglePointHidden(e));};#v=e=>{e.originalEvent.buttons===0&&this.#u();};#E=e=>{let{tiles:t}=this.#e;t.renderOnMouseMove(this.#o,e.lngLat);};#y=O(e=>{this.#a=e,this.#r||(this.#r=!0,requestAnimationFrame(()=>{!this.#n||!this.#a||(M.updateSelectedStepLatLng(this.#a,this.#n),this.#v(this.#a),this.#E(this.#a),this.#r=!1);}));},15);#L=e=>{let{mouseEvents:t,map:i,store:n}=this.#e;if(t&&(t.pointMouseEnter=!0,t.pointMouseDown))return;M.setSinglePointHidden(e);let s=v.queryPointId(i,e.point);b.isLastPoint(n,s)&&(t.lastPointMouseEnter=!0,t.lastPointMouseLeave=!1);let a=n.findStepById(s);a&&(this.#i=a,f.enterPoint(Object.assign({},a,{total:n.size}),i));};#g=e=>{let{mouseEvents:t,store:i,map:n}=this.#e;if(t&&(t.pointMouseEnter=!1,e.originalEvent.buttons===0&&(t.pointMouseLeave=!0),t.pointMouseDown))return;let s=v.queryPointId(n,e.point);b.isLastPoint(i,s)&&(t.lastPointMouseEnter=!1,t.lastPointMouseLeave=!0),f.leavePoint(Object.assign({},this.#i,{total:i.size}),n);};#P=()=>{let{store:e,panel:t}=this.#e;this.#n&&b.isLastPoint(e,this.#n.id)&&t.hidePanel();};#M=e=>{let{store:t,map:i}=this.#e,n=v.queryPointId(i,e.point),s=t.findStepById(n);s&&(this.#n=s);};#d=e=>{e.preventDefault();let{mouseEvents:t,map:i,store:n}=this.#e;E.removeTransparentLine(i),this.#M(e),this.#P();let s=v.queryPointId(i,e.point);this.#o=m.getGeometryIndex(n,s),t&&(t.pointMouseDown=!0),this.#t=e.lngLat,i.on("mousemove",this.#y),i.on("touchmove",this.#y);};#u=()=>{let{mouseEvents:e,store:t,panel:i,map:n,options:s}=this.#e;e.pointMouseUp=!0,this.#n&&(b.isLastPoint(t,this.#n.id)&&t.tail?.val&&i?.setPanelLocation(t.tail.val),i?.showPanel(),f.movePoint({id:this.#n.id,total:t.size,end:{lat:this.#n.lat,lng:this.#n.lng},start:this.#t},n)),e&&(e.pointMouseDown=!1),E.addTransparentLine(n,s),n.off("mousemove",this.#y),n.off("touchmove",this.#y);}};var ce=class extends R{#e;#t;#i;#n;#o;constructor(e){super({...e}),this.#e=e,this.#t=new ie(e),this.#i=new ee(e),this.#n=new le(e),this.#o=new re(e),e.map.on("mode:initialize",this.#s),e.map.on("mode:remove",this.#r);}#s=()=>{this.#o.init(),this.#t?.initEvents(),this.#n?.initEvents();};#r=()=>{this.#t?.removeEvents(),this.#n?.removeEvents(),this.#o?.remove();};removeMapEventsAndConsumers=()=>{this.#t?.removeEvents(),this.#n?.removeEvents(),this.#i?.remove(),this.#o?.remove(),this.#e.map.off("mode:initialize",this.#s);}};var he=class{#e;_line;_polygon;_break;_container;constructor(e){this.#e=e.options,this._line=void 0,this._polygon=void 0,this._break=void 0,this._container=l.create("div","mapboxgl-ctrl mapboxgl-ctrl-group maplibregl-ctrl maplibregl-ctrl-group"),this.createControl(e);}createControlButton=(e,t,i,n)=>{let s=this.#e.panel.size,a=l.create("button",`control-button control-button-${s}`,this._container);return a.setAttribute("aria-label",t),a.setAttribute("data-type",e),i&&a.classList.add("control-button-active"),n&&(a.setAttribute("disabled","true"),a.setAttribute("aria-disabled","true")),l.create("span",`icon ${e} icon-${s}`,a),a};#t=e=>{let{mode:t,options:i}=e,n=this.#e.modes.line.visible,s=i.locale.line;n&&(this._line=this.createControlButton("line",s,t.getMode()==="line"));};#i=e=>{let{mode:t,options:i}=e,n=this.#e.modes.polygon.visible,s=i.locale.polygon;n&&(this._polygon=this.createControlButton("polygon",s,t.getMode()==="polygon"));};#n=e=>{let{mode:t,options:i}=e,n=this.#e.modes.breakGeometry.visible,s=i.locale.break;if(n){let p=!this.#e?.initial?.closeGeometry,g=t.getBreak();this._break=this.createControlButton("break",s,g,p);}};createControl=e=>{this.#t(e),this.#i(e),this.#n(e);};getContainer=()=>this._container};function Ie(o){return o.initial?.geometry?o.initial?.geometry:o.modes.initial?o.modes.initial:null}var pe=class extends x{#e;#t;#i;constructor(e){super(),this.#e=Ie(e),this.#t=!1,this.#i=e.initial?.closeGeometry??!1;}getMode=()=>this.#e;setMode=e=>{this.#e=e,this.setBreak(!1),this.notify({type:"MODE_CHANGED",data:e});};getBreak=()=>this.#t;setBreak=e=>{this.#t=e,this.notify({type:"BREAK_CHANGED",data:e});};getClosedGeometry=()=>this.#i;setClosedGeometry=e=>{this.#i=e,this.notify({type:"CLOSED_GEOMETRY_CHANGED",data:this.#i});};isPolygon=()=>this.#e==="polygon"&&this.#i;reset=()=>{this.setMode(this.getMode()),this.setClosedGeometry(!1);};pingConsumers=()=>{this.notify({type:"MODE_CHANGED",data:this.getMode()}),this.notify({type:"CLOSED_GEOMETRY_CHANGED",data:this.getClosedGeometry()});}};var ue=class{#e;#t;constructor(e){this.#e=e,this.#t=this.#e.map.getCanvasContainer(),this.#t.style.cursor=e.mode.getMode()?P.CROSSHAIR:P.AUTO,this.#i();}set=e=>{this.#t.style.cursor=e;};get=()=>this.#t.style.cursor;handleMouseLeave=()=>{let{mouseEvents:e,mode:t}=this.#e;if(!e.pointMouseDown){if(!t.getMode()){this.set(P.AUTO);return}t.getClosedGeometry()?this.set(P.AUTO):this.set(P.CROSSHAIR);}};handleFirstPointMouseEnter=()=>{let{mode:e,store:t}=this.#e;e.getClosedGeometry()&&this.set(P.MOVE),m.canCloseGeometry(t)&&this.set(P.POINTER);};#i(){let{mouseEvents:e}=this.#e;e.addObserver(this.#n);}removeConsumers(){let{mouseEvents:e}=this.#e;e.removeObserver(this.#n);}#n=e=>{let{mode:t,mouseEvents:i}=this.#e;if(t.getBreak())return;let{type:n,data:s}=e;if(s)switch(n){case"pointMouseDown":this.set(P.GRABBING);break;case"pointMouseUp":this.set(P.GRAB);break;case"pointMouseEnter":if(i.pointMouseDown)return;this.set(P.GRAB);break;case"pointMouseLeave":this.handleMouseLeave();break;case"lineMouseEnter":if(i.pointMouseDown)return;this.set(P.POINTER);break;case"lineMouseLeave":this.handleMouseLeave();break;case"firstPointMouseEnter":this.handleFirstPointMouseEnter();break;case"firstPointMouseLeave":this.handleMouseLeave();break;case"lastPointMouseEnter":this.set(P.POINTER);break;case"lastPointMouseLeave":this.handleMouseLeave();break;}}};var de=class extends x{#e;#t;#i;#n;#o;#s;#r;#a;#l;#c;#h;#p;constructor(){super(),this.#e=!1,this.#t=!1,this.#i=!1,this.#n=!1,this.#o=!1,this.#s=!1,this.#r=!1,this.#a=!1,this.#l=!1,this.#c=!1,this.#h=!1,this.#p=!1;}get firstPointMouseEnter(){return this.#e}set firstPointMouseEnter(e){this.#e=e,this.notify({type:"firstPointMouseEnter",data:e});}get firstPointMouseLeave(){return this.#t}set firstPointMouseLeave(e){this.#t=e,this.notify({type:"firstPointMouseLeave",data:e});}get lastPointMouseClick(){return this.#i}set lastPointMouseClick(e){this.#i=e,this.notify({type:"lastPointMouseClick",data:e});}get lastPointMouseUp(){return this.#n}set lastPointMouseUp(e){this.#n=e,this.notify({type:"lastPointMouseUp",data:e});}get lastPointMouseEnter(){return this.#o}set lastPointMouseEnter(e){this.#o=e,this.notify({type:"lastPointMouseEnter",data:e});}get lastPointMouseLeave(){return this.#s}set lastPointMouseLeave(e){this.#s=e,this.notify({type:"lastPointMouseLeave",data:e});}get pointMouseDown(){return this.#r}set pointMouseDown(e){this.#r=e,this.notify({type:"pointMouseDown",data:e});}get pointMouseUp(){return this.#a}set pointMouseUp(e){this.#a=e,this.notify({type:"pointMouseUp",data:e});}get pointMouseEnter(){return this.#l}set pointMouseEnter(e){this.#l=e,this.notify({type:"pointMouseEnter",data:e});}get pointMouseLeave(){return this.#c}set pointMouseLeave(e){this.#c=e,this.notify({type:"pointMouseLeave",data:e});}get lineMouseEnter(){return this.#h}set lineMouseEnter(e){this.#h=e,this.notify({type:"lineMouseEnter",data:e});}get lineMouseLeave(){return this.#p}set lineMouseLeave(e){this.#p=e,this.notify({type:"lineMouseLeave",data:e});}};var z=class{static allStepsHaveIds(e){return e.every(t=>"id"in t&&t.id!==void 0)}static checkIfMissingIds(e,t){let i=!t,n=!this.allStepsHaveIds(e);if(i&&n)throw new Error(G.MISSING_IDS)}static checkIfEnoughPointsToClose(e,t){if(t&&e.length<3)throw new Error(G.NOT_ENOUGH_POINTS_TO_CLOSE)}static checkIfPolygonIsClosed(e){let{closeGeometry:t,steps:i}=e;if(i){let n=i[0]?.lng,s=i[i.length-1]?.lng,a=i[0]?.lat,p=i[i.length-1]?.lat;if((n!==s||a!==p)&&t)throw new Error(G.FIRST_LAST_POINT_NOT_EQUAL)}}static checkInitialStepsOption(e){let{closeGeometry:t,generateId:i,steps:n}=e;this.checkIfMissingIds(n,i),this.checkIfEnoughPointsToClose(n,t),this.checkIfPolygonIsClosed(e);}static init(e){return e?{panel:Be(e),modes:Ne(e),layersPaint:Fe(e),initial:e.initial||y.initial,locale:Re(e),dynamicLine:e.dynamicLine??y.dynamicLine}:y}};function Be(o){return {size:o.panel?.size||y.panel.size,buttons:{undo:{visible:o.panel?.buttons?.undo?.visible??y.panel.buttons.undo.visible},delete:{visible:o.panel?.buttons?.delete?.visible??y.panel.buttons.delete.visible},save:{visible:o.panel?.buttons?.save?.visible??y.panel.buttons.save.visible,clearOnSave:o.panel?.buttons?.save?.clearOnSave??y.panel.buttons.save.clearOnSave}}}}function Ne(o){return {initial:o.modes?.initial||y.modes.initial,line:{visible:o?.modes?.line?.visible!==void 0?o.modes.line.visible:o?.initial?.geometry==="line"||y.modes.line.visible,closeGeometry:o?.modes?.line?.closeGeometry??o?.initial?.closeGeometry??y.modes.line.closeGeometry},polygon:{visible:o?.modes?.polygon?.visible!==void 0?o.modes.polygon.visible:o?.initial?.geometry==="polygon"||y.modes.polygon.visible},breakGeometry:{visible:o?.modes?.breakGeometry?.visible??y.modes.breakGeometry.visible}}}function Fe(o){return {onLinePoint:{"circle-radius":o.layersPaint?.onLinePoint?.["circle-radius"]||D["circle-radius"],"circle-color":o.layersPaint?.onLinePoint?.["circle-color"]||D["circle-color"],"circle-stroke-color":o.layersPaint?.onLinePoint?.["circle-stroke-color"]||D["circle-stroke-color"],"circle-stroke-width":o.layersPaint?.onLinePoint?.["circle-stroke-width"]||D["circle-stroke-width"],...o.layersPaint?.onLinePoint},firstPoint:{"circle-radius":o.layersPaint?.firstPoint?.["circle-radius"]||w["circle-radius"],"circle-color":o.layersPaint?.firstPoint?.["circle-color"]||w["circle-color"],"circle-stroke-color":o.layersPaint?.firstPoint?.["circle-stroke-color"]||w["circle-stroke-color"],"circle-stroke-width":o.layersPaint?.firstPoint?.["circle-stroke-width"]||w["circle-stroke-width"],...o.layersPaint?.firstPoint},points:{"circle-radius":o.layersPaint?.points?.["circle-radius"]||A["circle-radius"],"circle-color":o.layersPaint?.points?.["circle-color"]||A["circle-color"],"circle-stroke-color":o.layersPaint?.points?.["circle-stroke-color"]||A["circle-stroke-color"],"circle-stroke-width":o.layersPaint?.points?.["circle-stroke-width"]||A["circle-stroke-width"],...o.layersPaint?.points},line:{"line-width":o.layersPaint?.line?.["line-width"]||N["line-width"],"line-color":o.layersPaint?.line?.["line-color"]||N["line-color"],"line-opacity":o.layersPaint?.line?.["line-opacity"]||N["line-opacity"],...o.layersPaint?.line},polygon:{"fill-color":o.layersPaint?.polygon?.["fill-color"]||U["fill-color"],"fill-opacity":o.layersPaint?.polygon?.["fill-opacity"]||U["fill-opacity"],...o.layersPaint?.polygon},breakLine:{"line-width":o.layersPaint?.breakLine?.["line-width"]||F["line-width"],"line-color":o.layersPaint?.breakLine?.["line-color"]||F["line-color"],"line-dasharray":o.layersPaint?.breakLine?.["line-dasharray"]||F["line-dasharray"],...o.layersPaint?.breakLine}}}function Re(o){return {save:o.locale?.save??y.locale.save,delete:o.locale?.delete??y.locale.delete,undo:o.locale?.undo??y.locale.undo,line:o.locale?.line??y.locale.line,polygon:o.locale?.polygon??y.locale.polygon,break:o.locale?.break??y.locale.break,closeLine:o.locale?.closeLine??y.locale.closeLine,createPolygon:o.locale?.createPolygon??y.locale.createPolygon}}var ve=class o{#e;#t;#i;#n;#o;#s;#r;#a;#l;static#c=null;static#h=!1;constructor(e){if(this.#n=z.init(e),this.#n.initial&&z.checkInitialStepsOption(this.#n.initial),o.#h)throw new Error("Use 'DrawLibre.getInstance()' instead of 'new DrawLibre()'.");o.#h=!0,this.#t=void 0,this.#i=void 0,this.#o=void 0,this.#s=void 0,this.#r=void 0,this.#l=void 0,this.#a=void 0;}static getInstance(e){return o.#c||(o.#c=new o(e)),o.#c}onAdd(e){this.#t=new q(this.#n),this.#i=new pe(this.#n),this.#r=new W({map:e,mode:this.#i,options:this.#n,store:this.#t}),this.#s=new R({map:e,store:this.#t,options:this.#n,mode:this.#i});let t=new he({options:this.#n,mode:this.#i});return this.#l=new de,this.#a=new ue({map:e,mode:this.#i,mouseEvents:this.#l,store:this.#t}),this.#o=new ce({map:e,store:this.#t,options:this.#n,panel:this.#r,control:t,mode:this.#i,tiles:this.#s,mouseEvents:this.#l}),this.#i.getMode()&&e.fire("mode:initialize"),this.#i.pingConsumers(),this.#e=t.getContainer(),this.#e}onRemove(){this.#a?.removeConsumers(),this.#s?.removeTiles(),this.#o?.removeMapEventsAndConsumers(),this.#r?.removePanel(),this.#t?.reset(),this.#i?.unsubscribe(),this.#e&&l.remove(this.#e);}setSteps=e=>{if(Array.isArray(e))e.forEach(t=>{let i={...t,id:t.id||C()};this.#t?.push(i);});else throw new Error("Invalid argument. Expected an array of steps.");this.#s?.render();};findStepById=e=>this.#t?.findStepById(e);getAllSteps=(e="array")=>{if(e==="array"&&this.#t)return b.toArray(this.#t.head);if(e==="linkedlist")return this.#t;throw new Error("Invalid type specified. Use 'array' or 'linkedlist'.")};setOptions=e=>{this.#n=e(this.#n);};removeAllSteps=()=>{this.#t?.reset(),this.#r?.removePanel(),this.#s?.render();}};
2
2
 
3
- var l=class o{static docStyle=typeof window<"u"&&window.document&&window.document.documentElement.style;static transformProp=o.testProp(["transform","WebkitTransform"]);static testProp(e){if(!o.docStyle)return e[0];for(let t=0;t<e.length;t++)if(e[t]in o.docStyle)return e[t];return e[0]}static create(e,t,i){let n=window.document.createElement(e);return t!==void 0&&(n.className=t),i&&i.appendChild(n),n}static remove(e){e.parentNode&&e.parentNode.removeChild(e);}static setTransform(e,t){o.transformProp&&e.style&&(e.style[o.transformProp]=t);}static manageEventListener(e,t,i,n,s={}){if(!t)return;let a=e==="add"?"addEventListener":"removeEventListener";"passive"in s?t[a](i,n,s):t[a](i,n,s.capture);}static mouseButton(e){return e.button}static addClassName(e,t){e.classList.contains(t)||e.classList.add(t);}static removeClassName(e,t){e.classList.contains(t)&&e.classList.remove(t);}};var C=class o{lng;lat;constructor(e,t){if(isNaN(e)||isNaN(t))throw new Error(`Invalid LngLat object: (${e}, ${t})`);if(this.lng=+e,this.lat=+t,this.lat>90||this.lat<-90)throw new Error("Invalid LngLat latitude value: must be between -90 and 90")}static convert(e){if(e instanceof o)return e;if(Array.isArray(e)&&(e.length===2||e.length===3))return new o(Number(e[0]),Number(e[1]));if(!Array.isArray(e)&&typeof e=="object"&&e!==null)return new o(Number("lng"in e?e.lng:e.lon),Number(e.lat));throw new Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: <lng>, lat: <lat>}, an object {lon: <lng>, lat: <lat>}, or an array of [<lng>, <lat>]")}};function G(o,...e){for(let t of e)for(let i in t)o[i]=t[i];return o}function ve(o,e,t){let i=new C(o.lng,o.lat);if(o=new C(o.lng,o.lat),e){let n=new C(o.lng-360,o.lat),s=new C(o.lng+360,o.lat),a=t.locationPoint(o).distSqr(e);t.locationPoint(n).distSqr(e)<a?o=n:t.locationPoint(s).distSqr(e)<a&&(o=s);}for(;Math.abs(o.lng-t.center.lng)>180;){let n=t.locationPoint(o);if(n.x>=0&&n.y>=0&&n.x<=t.width&&n.y<=t.height)break;o.lng>t.center.lng?o.lng-=360:o.lng+=360;}return o.lng!==i.lng&&t.locationPoint(o).y>t.height/2-t.getHorizon()?o:i}var de={center:"translate(-50%,-50%)",top:"translate(-50%,0)","top-left":"translate(0,0)","top-right":"translate(-100%,0)",bottom:"translate(-50%,-100%)","bottom-left":"translate(0,-100%)","bottom-right":"translate(-100%,-100%)",left:"translate(0,-50%)",right:"translate(-100%,-50%)"};function Le(o,e,t){let i=o.classList;for(let n in de)i.remove(`maplibregl-${t}-anchor-${n}`);i.add(`maplibregl-${t}-anchor-${e}`);}function ge(o,e,t){t[o]&&t[o].indexOf(e)!==-1||(t[o]=t[o]||[],t[o].push(e));}function me(o,e,t){if(t&&t[o]){let i=t[o].indexOf(e);i!==-1&&t[o].splice(i,1);}}var z=class{_listeners;_oneTimeListeners;_eventedParent;_eventedParentData;on(e,t){return this._listeners=this._listeners||{},ge(e,t,this._listeners),this}off(e,t){return me(e,t,this._listeners),me(e,t,this._oneTimeListeners),this}once(e,t){return t?(this._oneTimeListeners=this._oneTimeListeners||{},ge(e,t,this._oneTimeListeners),this):new Promise(i=>this.once(e,i))}fire(e,t){typeof e=="string"&&(e=new A(e,t||{}));let i=e.type;if(this.listens(i)){e.target=this;let n=this._listeners&&this._listeners[i]?this._listeners[i].slice():[];for(let h of n)h.call(this,e);let s=this._oneTimeListeners&&this._oneTimeListeners[i]?this._oneTimeListeners[i].slice():[];for(let h of s)me(i,h,this._oneTimeListeners),h.call(this,e);let a=this._eventedParent;a&&(G(e,typeof this._eventedParentData=="function"?this._eventedParentData():this._eventedParentData),a.fire(e));}else e instanceof ErrorEvent&&console.error(e.error);return this}listens(e){return this._listeners&&this._listeners[e]&&this._listeners[e].length>0||this._oneTimeListeners&&this._oneTimeListeners[e]&&this._oneTimeListeners[e].length>0||this._eventedParent&&this._eventedParent.listens(e)}setEventedParent(e,t){return this._eventedParent=e,this._eventedParentData=t,this}},A=class{type;constructor(e,t={}){G(this,t),this.type=e;}};var p=class o{x;y;constructor(e,t){this.x=e,this.y=t;}mag(){return Math.sqrt(this.x*this.x+this.y*this.y)}equals(e){return this.x===e.x&&this.y===e.y}dist(e){return Math.sqrt(this.distSqr(e))}distSqr(e){let t=e.x-this.x,i=e.y-this.y;return t*t+i*i}angle(){return Math.atan2(this.y,this.x)}angleTo(e){return Math.atan2(this.y-e.y,this.x-e.x)}angleWith(e){return this.angleWithSep(e.x,e.y)}angleWithSep(e,t){return Math.atan2(this.x*t-this.y*e,this.x*e+this.y*t)}_matMult(e){let t=e[0]*this.x+e[1]*this.y,i=e[2]*this.x+e[3]*this.y;return this.x=t,this.y=i,this}_add(e){return this.x+=e.x,this.y+=e.y,this}_sub(e){return this.x-=e.x,this.y-=e.y,this}_mult(e){return this.x*=e,this.y*=e,this}_div(e){return this.x/=e,this.y/=e,this}_multByPoint(e){return this.x*=e.x,this.y*=e.y,this}_divByPoint(e){return this.x/=e.x,this.y/=e.y,this}_unit(){return this._div(this.mag()),this}_perp(){let e=this.y;return this.y=this.x,this.x=-e,this}_rotate(e){let t=Math.cos(e),i=Math.sin(e),n=t*this.x-i*this.y,s=i*this.x+t*this.y;return this.x=n,this.y=s,this}_rotateAround(e,t){let i=Math.cos(e),n=Math.sin(e),s=t.x+i*(this.x-t.x)-n*(this.y-t.y),a=t.y+n*(this.x-t.x)+i*(this.y-t.y);return this.x=s,this.y=a,this}_round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}static convert(e){if(e instanceof o)return e;if(Array.isArray(e))return new o(+e[0],+e[1]);if(e.x!==void 0&&e.y!==void 0)return new o(+e.x,+e.y);throw new Error("Expected [x, y] or {x, y} point format")}};var Oe={closeButton:!0,closeOnClick:!0,focusAfterOpen:!0,className:"",maxWidth:"240px",subpixelPositioning:!1},ke=["a[href]","[tabindex]:not([tabindex='-1'])","[contenteditable]:not([contenteditable='false'])","button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].join(", "),Y=class extends z{_map;options;_content;_container;_closeButton;_tip;_lngLat;_trackPointer;_pos;_flatPos;constructor(e){super(),this.options=G(Object.create(Oe),e);}addTo(e){return this._map&&this.remove(),this._map=e,this.options.closeOnClick&&this._map.on("click",this._onClose),this.options.closeOnMove&&this._map.on("move",this._onClose),this._map.on("remove",this.remove),this._update(),this._focusFirstElement(),this._trackPointer?(this._map.on("mousemove",this._onMouseMove),this._map.on("mouseup",this._onMouseUp),this._container&&this._container.classList.add("maplibregl-popup-track-pointer"),this._map._canvasContainer.classList.add("maplibregl-track-pointer")):this._map.on("move",this._update),this.fire(new A("open")),this}isOpen(){return !!this._map}remove=()=>(this._content&&l.remove(this._content),this._container&&(l.remove(this._container),delete this._container),this._map&&(this._map.off("move",this._update),this._map.off("move",this._onClose),this._map.off("click",this._onClose),this._map.off("remove",this.remove),this._map.off("mousemove",this._onMouseMove),this._map.off("mouseup",this._onMouseUp),this._map.off("drag",this._onDrag),this._map._canvasContainer.classList.remove("maplibregl-track-pointer"),delete this._map,this.fire(new A("close"))),this);getLngLat(){return this._lngLat}setLngLat(e){return this._lngLat=C.convert(e),this._pos=null,this._flatPos=null,this._trackPointer=!1,this._update(),this._map&&(this._map.on("move",this._update),this._map.off("mousemove",this._onMouseMove),this._container&&this._container.classList.remove("maplibregl-popup-track-pointer"),this._map._canvasContainer.classList.remove("maplibregl-track-pointer")),this}trackPointer(){return this._trackPointer=!0,this._pos=null,this._flatPos=null,this._update(),this._map&&(this._map.off("move",this._update),this._map.on("mousemove",this._onMouseMove),this._map.on("drag",this._onDrag),this._container&&this._container.classList.add("maplibregl-popup-track-pointer"),this._map._canvasContainer.classList.add("maplibregl-track-pointer")),this}getElement(){return this._container}setText(e){return this.setDOMContent(document.createTextNode(e))}setHTML(e){let t=document.createDocumentFragment(),i=document.createElement("body"),n;for(i.innerHTML=e;n=i.firstChild,!!n;)t.appendChild(n);return this.setDOMContent(t)}getMaxWidth(){return this._container?.style.maxWidth}setMaxWidth(e){return this.options.maxWidth=e,this._update(),this}setDOMContent(e){if(this._content)for(;this._content.hasChildNodes();)this._content.firstChild&&this._content.removeChild(this._content.firstChild);else this._content=l.create("div","maplibregl-popup-content",this._container);return this._content.appendChild(e),this._createCloseButton(),this._update(),this._focusFirstElement(),this}addClassName(e){return this._container&&this._container.classList.add(e),this}removeClassName(e){return this._container&&this._container.classList.remove(e),this}setOffset(e){return this.options.offset=e,this._update(),this}toggleClassName(e){if(this._container)return this._container.classList.toggle(e)}setSubpixelPositioning(e){this.options.subpixelPositioning=e;}_createCloseButton(){this.options.closeButton&&(this._closeButton=l.create("button","maplibregl-popup-close-button",this._content),this._closeButton.type="button",this._closeButton.innerHTML="&#215;",this._closeButton.addEventListener("click",this._onClose));}_onMouseUp=e=>{this._update(e.point);};_onMouseMove=e=>{this._update(e.point);};_onDrag=e=>{this._update(e.point);};_update=e=>{let t=this._lngLat||this._trackPointer;if(!this._map||!t||!this._content)return;if(!this._container){if(this._container=l.create("div","maplibregl-popup",this._map.getContainer()),this._tip=l.create("div","maplibregl-popup-tip",this._container),this._container.appendChild(this._content),this.options.className)for(let h of this.options.className.split(" "))this._container.classList.add(h);this._closeButton&&this._closeButton.setAttribute("aria-label",this._map._getUIString("Popup.Close")),this._trackPointer&&this._container.classList.add("maplibregl-popup-track-pointer");}if(this.options.maxWidth&&this._container.style.maxWidth!==this.options.maxWidth&&(this._container.style.maxWidth=this.options.maxWidth),this._map.transform.renderWorldCopies&&!this._trackPointer?this._lngLat=ve(this._lngLat,this._flatPos,this._map.transform):this._lngLat=this._lngLat?.wrap(),this._trackPointer&&!e)return;let i=this._flatPos=this._pos=this._trackPointer&&e?e:this._map.project(this._lngLat);this._map.terrain&&(this._flatPos=this._trackPointer&&e?e:this._map.transform.locationPoint(this._lngLat));let n=this.options.anchor,s=Ee(this.options.offset);if(!n){let h=this._container.offsetWidth,L=this._container.offsetHeight,x;i.y+s.bottom.y<L?x=["top"]:i.y>this._map.transform.height-L?x=["bottom"]:x=[],i.x<h/2?x.push("left"):i.x>this._map.transform.width-h/2&&x.push("right"),x.length===0?n="bottom":n=x.join("-");}let a=i.add(s[n]);this.options.subpixelPositioning||(a=a.round()),l.setTransform(this._container,`${de[n]} translate(${a.x}px,${a.y}px)`),Le(this._container,n,"popup");};_focusFirstElement(){if(!this.options.focusAfterOpen||!this._container)return;let e=this._container.querySelector(ke);e&&e.focus();}_onClose=()=>{this.remove();}};function Ee(o){if(o)if(typeof o=="number"){let e=Math.round(Math.abs(o)/Math.SQRT2);return {center:new p(0,0),top:new p(0,o),"top-left":new p(e,e),"top-right":new p(-e,e),bottom:new p(0,-o),"bottom-left":new p(e,-e),"bottom-right":new p(-e,-e),left:new p(o,0),right:new p(-o,0)}}else if(o instanceof p||Array.isArray(o)){let e=p.convert(o);return {center:e,top:e,"top-left":e,"top-right":e,bottom:e,"bottom-left":e,"bottom-right":e,left:e,right:e}}else return {center:p.convert(o.center||[0,0]),top:p.convert(o.top||[0,0]),"top-left":p.convert(o["top-left"]||[0,0]),"top-right":p.convert(o["top-right"]||[0,0]),bottom:p.convert(o.bottom||[0,0]),"bottom-left":p.convert(o["bottom-left"]||[0,0]),"bottom-right":p.convert(o["bottom-right"]||[0,0]),left:p.convert(o.left||[0,0]),right:p.convert(o.right||[0,0])};else return Ee(new p(0,0))}var j=class{#e;#t;#i;_undoButton;_deleteButton;_saveButton;_container;constructor(e){this.#e=e,this._container=void 0,this.#i=!1,this.#s().then(()=>{this.#r(),this.#n();});}#n(){this.#e.mode?.addObserver(this.#o);}#o=e=>{let{store:t}=this.#e,{type:i,data:n}=e;i==="MODE_CHANGED"&&!n&&this.hidePanel(),i==="MODE_CHANGED"&&n&&t.tail?.val&&this.setPanelLocation({lat:t.tail?.val?.lat,lng:t.tail?.val?.lng});};#s=async()=>{try{this.#t=new Y({offset:16,closeButton:!1,closeOnClick:!1,closeOnMove:!1,anchor:"bottom"});}catch(e){console.error("POPUP LOAD ERROR",e);}};#r=()=>{let{store:e}=this.#e;this.createPanel(),e.tail?.val&&this.setPanelLocation({lat:e.tail?.val?.lat,lng:e.tail?.val?.lng});};setPanelLocation=e=>{let{map:t}=this.#e;this.#i&&(this.#i=!1,this.showPanel()),this._container&&this.#t&&this.#t.setLngLat(e).setDOMContent(this._container).addTo(t);};hidePanel=()=>{!this.#i&&(this.#t?.addClassName("hide-panel"),this.#i=!0);};showPanel=()=>{this.#t?.removeClassName("hide-panel"),this.#i=!1;};onPointRemove=e=>{e?this.setPanelLocation(e):this.hidePanel();};removePanel=()=>{this._container&&l.remove(this._container),this.#t?.remove();};createButton=(e,t,i,n)=>{let s=l.create("button",`panel-button panel-button-${i}`,n);return s.setAttribute("data-type",e),s.setAttribute("aria-label",t),l.create("span",`icon ${e} icon-${i}`,s),s};createPanel=()=>{let{options:e}=this.#e,{locale:t}=e,{undo:i,delete:n,save:s}=e.panel.buttons,a=e.panel.size,h=document.querySelector(".maplibregl-popup-content"),L=l.create("div","dashboard",h);i.visible&&(this._undoButton=this.createButton("undo",t.undo,a,L)),n.visible&&(this._deleteButton=this.createButton("delete",t.delete,a,L)),s.visible&&(this._saveButton=this.createButton("save",t.save,a,L)),this._container=L;}};var W={type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[]}}]},V={type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"LineString",coordinates:[]}}]},Pe={type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Point",coordinates:[]}}]},r={LineDynamicLayer:"mdl-line-dynamic-layer",LineLayer:"mdl-line-layer",LineLayerTransparent:"mdl-line-layer-transparent",LineLayerBreak:"mdl-line-break-layer",PolygonLayer:"mdl-polygon-layer",PointsLayer:"mdl-points-layer",SinglePointLayer:"mdl-single-point-layer",FirstPointLayer:"mdl-first-point-layer"},u={LineDynamicSource:"mdl-line-dynamic-source",LineSourceBreak:"mdl-line-source-break",LineSource:"mdl-line-source",PolygonSource:"mdl-polygon-source",PointsSource:"mdl-points-source",SinglePointSource:"mdl-single-point-source"},I={large:6.5,default:5.5},K={large:"#FF6464",default:"#666666"},T={"circle-radius":I.default,"circle-color":"#FEFFFE","circle-stroke-color":K.default,"circle-stroke-width":3},w={"circle-radius":I.large,"circle-color":"#FEFFFE","circle-stroke-color":"#666666","circle-stroke-width":3},H={"fill-color":"grey","fill-opacity":.4},B={"line-width":3,"line-color":"grey","line-opacity":.7},D={"circle-radius":I.default,"circle-color":"#FEFFFE","circle-stroke-color":"#666666","circle-stroke-width":3},N={"line-width":3,"line-color":"#FF6464","line-dasharray":[3,3]},$=o=>[{id:r.SinglePointLayer,source:u.SinglePointSource,type:"circle",paint:o.layersPaint.onLinePoint,layout:{visibility:"none"}},{id:r.PolygonLayer,source:u.PolygonSource,type:"fill",paint:o.layersPaint.polygon,layout:{visibility:"none"}},{id:r.LineDynamicLayer,source:u.LineDynamicSource,type:"line",paint:o.layersPaint.line,layout:{visibility:"none"}},{id:r.LineLayer,source:u.LineSource,type:"line",paint:o.layersPaint.line,layout:{visibility:"visible"}},{id:r.LineLayerTransparent,source:u.LineSource,type:"line",paint:{"line-width":4,"line-color":"transparent"}},{id:r.LineLayerBreak,source:u.LineSourceBreak,type:"line",paint:o.layersPaint.breakLine,layout:{visibility:"none"}},{id:r.PointsLayer,source:u.PointsSource,type:"circle",paint:o.layersPaint.points,filter:["==",["get","isFirst"],!1]},{id:r.FirstPointLayer,source:u.PointsSource,type:"circle",paint:o.layersPaint.firstPoint,filter:["==",["get","isFirst"],!0]}];var g=class{static#e=0;static#t=e=>{e.setPaintProperty(r.FirstPointLayer,"circle-radius",I.large),e.setPaintProperty(r.FirstPointLayer,"circle-stroke-color",K.large);};static#i=e=>{e.setPaintProperty(r.FirstPointLayer,"circle-radius",I.default),e.setPaintProperty(r.FirstPointLayer,"circle-stroke-color",K.default);};static togglePointCircleRadius=(e,t)=>{t==="large"?this.#t(e):this.#i(e);};static removeTransparentLine=e=>{e.removeLayer(r.LineLayerTransparent);};static addTransparentLine=(e,t)=>{if(e.getLayer(r.LineLayerTransparent))return;let n=$(t).find(s=>s.id===r.LineLayerTransparent);n&&e.addLayer(n);};static isDoubleClick(){let t=Date.now();return t-this.#e<=400?(this.#e=t,!0):(this.#e=t,!1)}};var f=class{static isFeatureTriggered(e,t){return e.target.queryRenderedFeatures(e.point,{layers:t}).some(n=>t.includes(n.layer.id))}static getPixelCoordinates=(e,t)=>{let{lat:i,lng:n}=t;return e.project([n,i])};static queryPointId=(e,t)=>e.queryRenderedFeatures(t,{layers:[r.PointsLayer,r.FirstPointLayer]})?.[0]?.properties.id},b=class{static#e(e){let t=[],i=e.head,n=new Set;for(;i!==null;){if(n.has(i.val?.id)){e.head&&e.head.val&&t.push([e.head.val.lng,e.head.val.lat]);break}n.add(i.val?.id),i.val&&t.push([i.val.lng,i.val.lat]),i=i.next;}return t}static getAllLines(e){let t=this.#e(e);return {type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"LineString",coordinates:t}}]}}static getLine(e,t){return {type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"LineString",coordinates:[e,t]}}]}}static getPolygon(e){let t=this.#e(e);return {type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[t]}}]}}static getPoints(e){let t=e.head,i=[],n=new Set;for(;t!==null&&!n.has(t.val?.id);){if(t.val){let s=t.val,a=t.val.id===e.head?.val?.id;i.push({type:"Feature",properties:{id:s.id,lat:s.lat,lng:s.lng,isFirst:a},geometry:{type:"Point",coordinates:[s.lng,s.lat]}});}n.add(t.val?.id),t=t.next;}return {type:"FeatureCollection",features:i}}},d=class o{static getGeometryIndex=(e,t)=>{let i=e.head,n=0;for(;i!==null;){if(i.val?.id===t)return n;n++,i=i.next;}return -1};static isFirstPoint(e){let t=e.target,i=e.point;return !!t.queryRenderedFeatures(i,{layers:[r.FirstPointLayer]}).length}static distance=(e,t)=>Math.sqrt((e.x-t.x)**2+(e.y-t.y)**2);static checkIfPointIsOnLine=(e,t,i)=>{let s=this.distance(e,t),a=this.distance(e,i),h=this.distance(i,t);return Math.abs(a+h-s)<.1};static isClosedGeometry=e=>e.tail?.next===e.head;static breakGeometry=(e,t)=>{if(!e.head)return;let i=e.head,n=e.tail;do{if(i?.val?.id===t){i!==e.head&&(n.next=i.next,e.head=i,e.tail=n),e.tail.next=null;return}n=i,i=i.next;}while(i!==e.head)};static closeGeometry=(e,t)=>{e.tail&&(e.tail.next=e.head),t.setClosedGeometry(!0);};static canCloseGeometry=e=>e.size>2&&!this.isClosedGeometry(e);static canBreakClosedGeometry=e=>e.size<=2;static switchToLineModeIfCan=e=>{let{mode:t,store:i,tiles:n,map:s}=e;o.canBreakClosedGeometry(i)&&(i.tail&&i.tail.val&&(i.tail.next=null),t.reset(),g.togglePointCircleRadius(s,"default"),n.renderPolygon(W));}},_=()=>{if("crypto"in window&&"randomUUID"in window.crypto)return window.crypto.randomUUID();function o(){return "0123456789abcdef"[Math.floor(Math.random()*16)]}function e(n){let s="";for(let a=0;a<n;a++)s+=o();return s}function t(n){let s=n===0,a=n===4;return s?8:a?12:4}let i=[];for(let n=0;n<5;n++)i.push(e(t(n)));return i.join("-")},S=(o,e)=>{let t,i=!0;function n(){i&&t&&(o(...t),t=null,i=!1,setTimeout(()=>{i=!0,n();},e));}return function(...s){t=s,n();}};var F=class{#e;#t;#i;#n;constructor(e){this.#e=e,this.#o(),this.render();}#o(){this.#s(),this.#r(),this.#a(r.LineLayer,r.SinglePointLayer),this.#a(r.LineLayerTransparent,r.SinglePointLayer),this.#a(r.LineLayerTransparent,r.FirstPointLayer),this.#a(r.LineLayerTransparent,r.PointsLayer),this.#a(r.PolygonLayer,r.LineLayer);}#s=()=>{let{map:e}=this.#e;Object.values(u).forEach(t=>{e.getSource(t)||e.addSource(t,{type:"geojson",data:{type:"FeatureCollection",features:[]},promoteId:"id"});});};#r=()=>{let{map:e,mode:t,options:i}=this.#e;$(i).forEach(a=>{e.getLayer(a.id)||e.addLayer(a);});let s=e.getLayoutProperty(r.PolygonLayer,"visibility")==="none";t.getMode()==="polygon"&&s&&e.setLayoutProperty(r.PolygonLayer,"visibility","visible");};#a=(e,t)=>{let{map:i}=this.#e,n=i.getLayer(e),s=i.getLayer(t);n&&s&&i.moveLayer(e,t);};#l=()=>{let{map:e}=this.#e;Object.values(u).forEach(t=>{e.getSource(t)&&e.removeSource(t);});};#c=()=>{let{map:e}=this.#e;Object.values(r).forEach(t=>{e.getLayer(t)&&e.removeLayer(t);});};removeTiles=()=>{this.#c(),this.#l();};renderPoints=e=>{let{map:t}=this.#e,i=t.getSource(u.PointsSource);i&&i.setData(e);};renderLines=(e,t)=>{let{map:i}=this.#e,n=i.getSource(t);n&&n.setData(e);};renderPolygon=e=>{let{map:t}=this.#e,i=t.getSource(u.PolygonSource);i&&i.setData(e);};render=()=>{let{mode:e,options:t,store:i}=this.#e,n=b.getPoints(i),s=b.getAllLines(i);if(this.#t=n,this.#i=s,this.renderPoints(n),this.renderLines(s,u.LineSource),t.modes.polygon.visible&&e.isPolygon()){let h=b.getPolygon(i);this.#n=h,this.renderPolygon(h);}};#h=(e,t)=>{if(this.#n.features[0].geometry.coordinates[0][e]=[t.lng,t.lat],e===0){let n=this.#n.features[0].geometry.coordinates[0]?.length-1;this.#n.features[0].geometry.coordinates[0][n]=[t.lng,t.lat];}this.renderPolygon(this.#n);};#p=(e,t)=>{let{mode:i}=this.#e;this.#i.features[0].geometry.coordinates[e]=[t.lng,t.lat];let n=e===0;if(this.#i&&i.getClosedGeometry()&&n){let a=this.#i.features[0].geometry.coordinates?.length-1;this.#i.features[0].geometry.coordinates[a]=[t.lng,t.lat];}this.renderLines(this.#i,u.LineSource);};renderOnMouseMove=(e,t)=>{let{mode:i,options:n}=this.#e;this.#t.features[e].geometry.coordinates=[t.lng,t.lat],this.renderPoints(this.#t),this.#p(e,t),n.modes.polygon.visible&&i.isPolygon()&&this.#h(e,t);};resetGeometries=()=>{this.renderPoints(Pe),this.renderLines(V,u.LineSource),this.renderPolygon(W);}};var xe=8,Te=8,O=class{_container;_label;constructor(){this._container=void 0;}create=e=>{let t=l.create("div","popup-container",document.body),i=l.create("span",`popup-text popup-text-${e.placement}`,t);return i.textContent=e.label,this._container=t,this._label=i,this};#e=()=>{!this._label?.classList.value.includes("popup-text-active")&&this._label?.classList.add("popup-text-active");};#t=()=>this._label?{width:this._label.clientWidth,height:this._label.clientHeight}:{width:0,height:0};#i=e=>{let{bottom:t,left:i}=e.target.getBoundingClientRect(),{width:n,height:s}=this.#t();return {x:i-Te-n,y:t-s-2}};#n=e=>{let{bottom:t,left:i,right:n}=e.target.getBoundingClientRect(),{width:s}=this.#t();return {x:(n-i)/2+i-s/2,y:t+xe}};getPosition=(e,t)=>t==="left"?this.#i(e):this.#n(e);setPosition=e=>{let{x:t,y:i}=e;this._container&&(this._container.style.left=`${t}px`,this._container.style.top=`${i}px`),this.#e();};remove=()=>{this._container&&l.remove(this._container);}};var E={AUTO:"auto",DEFAULT:"default",POINTER:"pointer",CROSSHAIR:"crosshair",MOVE:"move",HELP:"help",GRAB:"grab",GRABBING:"grabbing"};var Z=(o,e)=>{for(let[t,i]of Object.entries(e))l.manageEventListener("add",o,t,i);},J=(o,e)=>{for(let[t,i]of Object.entries(e))l.manageEventListener("remove",o,t,i);},Me=(o,e)=>{let t=e.locale.line,i=e.locale.polygon,n=e.locale.break;return {line:t,polygon:i,break:n}[o]};var v={DOUBLECLICK:"mdl:doubleclick",POINTENTER:"mdl:pointenter",POINTLEAVE:"mdl:pointleave",MOVEEND:"mdl:moveend",ADD:"mdl:add",UNDO:"mdl:undo",REMOVEALL:"mdl:removeall",SAVE:"mdl:save",BREAK:"mdl:break",MODECHANGED:"mdl:modechanged"};var m={panel:{size:"medium",buttons:{undo:{visible:!0},delete:{visible:!0},save:{visible:!0,clearOnSave:!0}}},modes:{initial:null,line:{visible:!0,closeGeometry:!0},polygon:{visible:!0},breakGeometry:{visible:!0}},layersPaint:{onLinePoint:w,firstPoint:T,points:D,line:B,polygon:H,breakLine:N},initial:null,dynamicLine:!0,locale:{save:"Save",delete:"Delete all",undo:"Undo",line:"Line",polygon:"Polygon",break:"Split",closeLine:"Close line",createPolygon:"Create polygon"}};var y=class{static addPoint(e,t,i){t.fire(v.ADD,{id:e.id,coordinates:{lat:e.lat,lng:e.lng},total:e.total,timestamp:Date.now(),mode:{geometry:i.getMode(),closedGeometry:i.getClosedGeometry()}});}static movePoint(e,t){t.fire(v.MOVEEND,{id:e.id,start_coordinates:{lat:e.start.lat,lng:e.start.lng},end_coordinates:{lat:e.end.lat,lng:e.end.lng},total:e.total,timestamp:Date.now()});}static pointDoubleClick(e,t){t.fire(v.DOUBLECLICK,{id:e.id,coordinates:{lat:e.lat,lng:e.lng},total:e.total,timestamp:Date.now()});}static enterPoint(e,t){t.fire(v.POINTENTER,{id:e.id,coordinates:{lat:e.lat,lng:e.lng},total:e.total,timestamp:Date.now()});}static leavePoint(e,t){t.fire(v.POINTLEAVE,{id:e.id,coordinates:{lat:e.lat,lng:e.lng},total:e.total,timestamp:Date.now()});}static undoPoint(e,t,i){t.fire(v.UNDO,{originalEvent:i,id:e.id,coordinates:{lat:e.lat,lng:e.lng},total:e.total,timestamp:Date.now()});}static modeChanged(e,t){e.fire(v.MODECHANGED,{mode:t});}static removeAllPoints(e,t){e.fire(v.REMOVEALL,{originalEvent:t});}static onSaveClick(e,t,i){let{map:n,mode:s}=e;n.fire(v.SAVE,{originalEvent:i,timestamp:Date.now(),steps:t,mode:{geometry:s.getMode(),closedGeometry:s.getClosedGeometry()}});}static onLineBreak(e){e.fire(v.BREAK);}};var X=class{#e;constructor(e){this.#e=e,this.#t();}#t=()=>{this.#e.mode.addObserver(this.#l);};removeConsumers=()=>{this.#e.mode.removeObserver(this.#l);};#i=()=>{let{_line:e,_polygon:t,_break:i}=this.#e.control;e?.classList.remove("control-button-active"),t?.classList.remove("control-button-active"),i?.classList.remove("control-button-active");};#n=e=>{this.#i(),e.classList.add("control-button-active");};#o=e=>{let{data:t}=e,{_line:i,_polygon:n,_break:s}=this.#e.control,{mode:a}=this.#e;if(y.modeChanged(this.#e.map,t),!(!i||!n||!s)){switch(t){case"line":this.#n(i);break;case"polygon":this.#n(n);break;}t?a.getClosedGeometry()&&this.#r(s):this.#s(s);}};#s=e=>{e.setAttribute("disabled","true"),e.setAttribute("aria-disabled","true");};#r=e=>{e.removeAttribute("disabled"),e.removeAttribute("aria-disabled");};#a=e=>{let{data:t}=e,{_break:i,_line:n,_polygon:s}=this.#e.control,{mode:a}=this.#e;t?(i&&this.#r(i),a.getMode()==="polygon"&&n&&this.#s(n),a.getMode()==="line"&&s&&this.#s(s)):(i&&this.#s(i),a.getMode()==="polygon"&&n&&this.#r(n),a.getMode()==="line"&&s&&this.#r(s));};#l=e=>{let{type:t,data:i}=e;if(t==="MODE_CHANGED"&&this.#o(e),t==="CLOSED_GEOMETRY_CHANGED"&&this.#a(e),t==="BREAK_CHANGED"&&i){let{_break:n}=this.#e.control;this.#n(n),y.modeChanged(this.#e.map,"break");}}};var Q=class{#e;#t;#i;constructor(e){this.#e=e,this.#i=new X(e),this.#t=new O,this.#n();}#n(){let{control:e}=this.#e;if(e){let t={mouseenter:this.onButtonEnter,mouseleave:this.onButtonLeave};e._line&&Z(e._line,{...t,click:this.onLineClick}),e._polygon&&Z(e._polygon,{...t,click:this.onPolygonClick}),e._break&&Z(e._break,{...t,click:this.onBreakClick});}}#o(){let{control:e}=this.#e;if(e){let t={mouseenter:this.onButtonEnter,mouseleave:this.onButtonLeave};e._line&&J(e._line,{...t,click:this.onLineClick}),e._polygon&&J(e._polygon,{...t,click:this.onPolygonClick}),e._break&&J(e._break,{...t,click:this.onBreakClick});}}remove(){this.#i.removeConsumers(),this.#o(),this.#t.remove();}onButtonEnter=e=>{let{options:t}=this.#e,i=e.target.getAttribute("data-type");if(i){let n=Me(i,t),s="left";this.#t.create({label:n,placement:s}).setPosition(this.#t.getPosition(e,s));}};onButtonLeave=()=>{this.#t.remove();};#s=()=>{let{control:e}=this.#e;e._line?.classList.remove("control-button-active"),e._polygon?.classList.remove("control-button-active"),e._break?.classList.remove("control-button-active");};#r=()=>{let{map:e,mode:t}=this.#e;t.getMode()||e.fire("mode:initialize");};onLineClick=()=>{let{map:e,mode:t,tiles:i,control:n}=this.#e;this.#r(),this.#s(),t.getMode()==="line"&&!t.getBreak()?(t.setMode(null),e.fire("mode:remove"),i.resetGeometries()):(n._line?.classList.add("control-button-active"),t.setMode("line"),i.render());};onPolygonClick=()=>{let{map:e,mode:t,tiles:i,control:n}=this.#e;this.#r(),this.#s(),t.getMode()==="polygon"&&!t.getBreak()?(t.setMode(null),e.fire("mode:remove"),e.setLayoutProperty(r.PolygonLayer,"visibility","visible"),i.resetGeometries()):(n._polygon?.classList.add("control-button-active"),t.setMode("polygon"),i.render());};onBreakClick=()=>{let{map:e,mode:t,control:i}=this.#e;t.getBreak()&&(t.setMode(null),e.fire("mode:remove")),this.#s(),i._break?.classList.add("control-button-active"),t.setBreak(!0),e.getCanvasContainer().style.cursor=E.POINTER;}};var k=class{observers;constructor(){this.observers=new Set;}addObserver(e){this.observers.add(e);}removeObserver(e){this.observers.delete(e);}unsubscribe(){this.observers.clear();}notify(e){this.observers.forEach(t=>t(e));}};var R={EMPTY_INITIAL_STATE:"You passed an empty initial array in the options. Please either remove the 'initial' property or include at least one element in the array.",MISSING_IDS:"You set 'generateId' to false but did not provide IDs for all steps. Please ensure all steps have IDs or set 'generateId' to true.",NOT_ENOUGH_POINTS_TO_CLOSE:"At least three points are required to close a polygon or a line. Please add more points or set 'closeGeometry' to false.",FIRST_LAST_POINT_NOT_EQUAL:"The first and last points of a polygon or a closed linestring must be the same. Please ensure the first and last points are equal or set 'closeGeometry' to false."};var ee=class{val;next;constructor(e=null,t=null){this.val=e,this.next=t;}},U=class extends k{head;tail;size;constructor(e){super();let t=M.initStore(e);this.head=t?t.head:null,this.tail=t?t.tail:null,this.size=t?t.size:0;}push(e){let t=new ee(e);this.head?this.tail&&(this.tail.next=t,this.tail=t):this.head=this.tail=t,this.size++,this.pingConsumers();}insert(e,t){let i=new ee(e,t.next);this.tail===t&&this.head===t.next&&(this.tail=i),t.next=i,this.size++;}findStepById(e){let t=this.head,i=new Set;for(;t!==null&&!i.has(t);){if(t.val&&t.val.id===e)return t.val;i.add(t),t=t.next;}return null}removeStepById(e){if(!this.head)return null;let t=this.head,i=null;for(;t!==null;){if(t?.val?.id===e)return t===this.head?(this.head=t.next,this.tail&&(this.tail.next=t.next)):i.next=t.next,t===this.tail&&(this.tail=i),this.size--,this.pingConsumers(),t;i=t,t.next&&(t=t.next);}return null}reset(){this.head=null,this.tail=null,this.size=0,this.pingConsumers();}pingConsumers=()=>{this.notify({type:"STORE_CHANGED",data:{head:this.head,tail:this.tail,size:this.size}});}},M=class o{static isLastPoint=(e,t)=>e.tail?.val?.id===t;static initStore(e){if(!e?.initial)return null;if(e&&e.initial&&!e.initial.steps.length)throw new Error(R.EMPTY_INITIAL_STATE);if(e&&e.initial.steps){let{steps:n,closeGeometry:s,generateId:a}=e.initial;return o.fromArray(n,s,a)}return null}static#e=e=>e.map(t=>({...t,id:_()}));static buildStepSequence(e){let t=new U;return e.forEach(i=>{t.push(i);}),t}static fromArray(e,t,i){let n=i?this.#e(e):e,s=this.buildStepSequence(n);return t&&s.tail&&(s.tail.next=s.head),s}static toArray(e){if(!e)return [];let t=new Set,i=[],n=e;for(;n!==null&&!t.has(n);)t.add(n),i.push(n.val),n=n.next;return i}};var te=class{#e;#t;constructor(e){this.#e=e,this.#t=new O;}initEvents(){let{panel:e}=this.#e;e&&(l.manageEventListener("add",e?._undoButton,"click",this.#o),l.manageEventListener("add",e?._undoButton,"mouseenter",this.onMouseEnter),l.manageEventListener("add",e?._undoButton,"mouseleave",this.onMouseLeave)),e&&(l.manageEventListener("add",e?._deleteButton,"click",this.#n),l.manageEventListener("add",e?._deleteButton,"mouseenter",this.onMouseEnter),l.manageEventListener("add",e?._deleteButton,"mouseleave",this.onMouseLeave)),e&&(l.manageEventListener("add",e?._saveButton,"click",this.onSaveClick),l.manageEventListener("add",e?._saveButton,"mouseenter",this.onMouseEnter),l.manageEventListener("add",e?._saveButton,"mouseleave",this.onMouseLeave));}removeEvents(){let{panel:e}=this.#e;e&&e._undoButton&&(l.manageEventListener("remove",e._undoButton,"click",this.#o),l.manageEventListener("remove",e._undoButton,"mouseenter",this.onMouseEnter),l.manageEventListener("remove",e._undoButton,"mouseleave",this.onMouseLeave)),e&&e._deleteButton&&(l.manageEventListener("remove",e._deleteButton,"click",this.#n),l.manageEventListener("remove",e._deleteButton,"mouseenter",this.onMouseEnter),l.manageEventListener("remove",e._deleteButton,"mouseleave",this.onMouseLeave)),e&&e._saveButton&&(l.manageEventListener("remove",e._saveButton,"click",this.onSaveClick),l.manageEventListener("remove",e._saveButton,"mouseenter",this.onMouseEnter),l.manageEventListener("remove",e._saveButton,"mouseleave",this.onMouseLeave));}#i=e=>{let{options:t}=this.#e;return {undo:t.locale.undo,delete:t.locale.delete,save:t.locale.save}[e]};onMouseEnter=e=>{let t=e.target.getAttribute("data-type");if(t){let i=this.#i(t);this.#t.create({label:i,placement:"bottom"}).setPosition(this.#t.getPosition(e,"bottom"));}};onMouseLeave=()=>{this.#t.remove();};#n=e=>{let{tiles:t,mode:i,panel:n,store:s,map:a}=this.#e;s.reset(),n.hidePanel(),i.reset(),g.togglePointCircleRadius(a,"default"),this.#t.remove(),t.resetGeometries(),y.removeAllPoints(a,e);};#o=e=>{let{store:t,panel:i,map:n,tiles:s}=this.#e,a=t.tail?.val;t.removeStepById(a.id);let h={...a,total:t.size};y.undoPoint(h,n,e),d.switchToLineModeIfCan(this.#e),i?.onPointRemove(t.tail?.val),this.#t.remove(),requestAnimationFrame(s.render);};onSaveClick=e=>{let{store:t,options:i}=this.#e;y.onSaveClick(this.#e,M.toArray(t.head),e),this.#t.remove(),i.panel.buttons.save.clearOnSave&&this.#n(e);}};var P=class{static updatePointsData(e){let i=e.target.getSource(u.SinglePointSource);i&&i.setData({type:"Feature",geometry:{type:"Point",coordinates:[e.lngLat.lng,e.lngLat.lat]},properties:{}});}static setSinglePointVisible(e){e.target.setLayoutProperty(r.SinglePointLayer,"visibility","visible");}static setSinglePointHidden(e){let t=e.target;setTimeout(()=>{t.setLayoutProperty(r.SinglePointLayer,"visibility","none");},33);}static triggerPostPointAddition(e,t){let{panel:i,tiles:n,store:s,map:a}=t;d.canCloseGeometry(s)&&g.togglePointCircleRadius(a,"large"),i?.setPanelLocation(e.lngLat),n.render();}static addPointToMap=(e,t)=>{let{store:i,map:n,mode:s}=t,a={...e.lngLat,id:_()};i.push(a),y.addPoint({...a,total:i.size},n,s),this.triggerPostPointAddition(e,t);};static updateSelectedStepLatLng=(e,t)=>{t.lat=e.lngLat.lat,t.lng=e.lngLat.lng;}};var ye=(o,e)=>{let t=e.head,i=new Set;for(;t!==null&&!i.has(t);){if(t.next&&t.next.val&&t.val){let n=o.target,s=f.getPixelCoordinates(n,t.val),a=f.getPixelCoordinates(n,t.next.val),h=f.getPixelCoordinates(n,o.lngLat);if(d.checkIfPointIsOnLine(s,a,h))return t}i.add(t),t=t.next;}return null},be=(o,e)=>{let t=ye(o,e);if(t){let i={...o.lngLat,id:_()};return e.insert(i,t),i}return null},_e=(o,e)=>{let{store:t,tiles:i,panel:n}=e;t.tail?.val&&(n?.setPanelLocation(t.tail.val),P.setSinglePointHidden(o),i.render());},Ce=o=>f.isFeatureTriggered(o,[r.PointsLayer,r.FirstPointLayer]);var Se=15,ie=class{props;#e;#t;constructor(e){this.props=e,this.#e=null,this.#t=S(this.#n,Se);}initBreakEvents=()=>{let{map:e}=this.props;e.on("click",r.LineLayerTransparent,this.#i),e.on("mouseenter",r.LineLayerTransparent,this.#t),e.on("mousemove",r.LineLayerTransparent,this.#t),e.on("mouseleave",r.LineLayerTransparent,this.#o);};removeBreakEvents=()=>{let{map:e}=this.props;e.off("click",r.LineLayerTransparent,this.#i),e.off("mouseenter",r.LineLayerTransparent,this.#t),e.off("mousemove",r.LineLayerTransparent,this.#t),e.off("mouseleave",r.LineLayerTransparent,this.#o);};hideBreakLine=()=>{let{map:e}=this.props;e.getLayoutProperty(r.LineLayerBreak,"visibility")!=="none"&&e.setLayoutProperty(r.LineLayerBreak,"visibility","none");};showBreakLine=()=>{let{map:e}=this.props;e.getLayoutProperty(r.LineLayerBreak,"visibility")!=="visible"&&e.setLayoutProperty(r.LineLayerBreak,"visibility","visible");};#i=()=>{let{store:e,mode:t,panel:i,map:n,tiles:s}=this.props,a=this.#e?.next?.val?.id;d.breakGeometry(e,a),e.tail?.val&&i.setPanelLocation({lat:e.tail?.val?.lat,lng:e.tail?.val?.lng}),this.#o(),n.setLayoutProperty(r.PolygonLayer,"visibility","none"),t.reset(),s.render(),y.onLineBreak(n);};#n=e=>{let{map:t,store:i}=this.props,n=ye(e,i);n?.val?.id!==this.#e?.val?.id&&(this.#e=n);let s=t.getSource(u.LineSourceBreak),a=[n?.val?.lng,n?.val?.lat],h=[n?.next?.val?.lng,n?.next?.val?.lat],L=b.getLine(a,h);L&&(s.setData(L),this.showBreakLine());};#o=()=>{setTimeout(()=>{this.hideBreakLine();},Se+10);}};var we=10,ne=class{#e;#t;#i;#n;#o;#s;constructor(e){this.#e=e,this.#t=e.options.dynamicLine,this.#i=null,this.#n=null,this.#r(),this.#s=S(this.#p,we);}#r(){this.#e.store.addObserver(this.#l),this.#e.mode.addObserver(this.#c),this.#e.mouseEvents.addObserver(this.#a);}removeLine=()=>{this.hideDynamicLine();};removeConsumers=()=>{this.#e.store.removeObserver(this.#l),this.#e.mode.removeObserver(this.#c),this.#e.mouseEvents.removeObserver(this.#a);};#a=e=>{let{mode:t}=this.#e;if(!t.getClosedGeometry()&&(e.type==="lastPointMouseClick"&&e.data?(this.hideDynamicLine(),this.#t=!1):e.type==="lastPointMouseClick"&&!e.data&&(this.#t=!0),!!this.#t&&((e.type==="pointMouseEnter"||e.type==="lineMouseEnter")&&e.data&&this.hideDynamicLine(),(e.type==="pointMouseLeave"||e.type==="lineMouseLeave")&&e.data))){let{store:i}=this.#e;this.#i=i.tail?.val,this.#n=i.tail?.val,this.showDynamicLine();}};#l=e=>{let{store:t}=this.#e;switch(e.type){case"STORE_CHANGED":e.data.tail?.val&&!d.isClosedGeometry(t)&&(this.#i=e.data.tail?.val,this.showDynamicLine());break;}};#c=e=>{let{store:t}=this.#e;e.type==="CLOSED_GEOMETRY_CHANGED"&&(e.data&&this.hideDynamicLine(),!e.data&&t?.tail?.val&&(this.#i=t?.tail?.val,this.showDynamicLine()));};initDynamicEvents=()=>{let{map:e}=this.#e;e.on("click",this.#f),e.on("mousemove",this.#s),e.on(v.REMOVEALL,this.hideDynamicLine),e.on(v.UNDO,this.#m),e.on(v.DOUBLECLICK,this.#v);};removeEvents=()=>{let{map:e}=this.#e;e.off("click",this.#f),e.off("mousemove",this.#s),e.off(v.REMOVEALL,this.hideDynamicLine),e.off(v.UNDO,this.#m),e.off(v.DOUBLECLICK,this.#v);};hideDynamicLine=()=>{let{map:e,tiles:t}=this.#e;this.#i=null,this.#n=null,this.#o=null,e.off("mousemove",this.#s),t.renderLines(V,u.LineDynamicSource),e.setLayoutProperty(r.LineDynamicLayer,"visibility","none");};showDynamicLine=()=>{let{map:e}=this.#e,t=[this.#i?.lng,this.#i?.lat],i=[this.#n?.lng,this.#n?.lat];this.#o=b.getLine(t,i),e.setLayoutProperty(r.LineDynamicLayer,"visibility","visible"),this.#n&&this.#h({lng:this.#n?.lng,lat:this.#n?.lat}),e.on("mousemove",this.#s);};#h=e=>{if(!this.#o)return;let{tiles:t}=this.#e;this.#o.features[0].geometry.coordinates[1]=[e.lng,e.lat],t.renderLines(this.#o,u.LineDynamicSource);};#p=e=>{this.#h(e.lngLat);};#f=e=>{let{mode:t}=this.#e,i=f.isFeatureTriggered(e,[r.LineLayerTransparent,r.LineLayer]);i&&t.getBreak()&&(this.#n={lng:e.lngLat.lng,lat:e.lngLat.lat}),!i&&this.hideDynamicLine();};#m=e=>{let{store:t,mode:i}=this.#e;if(!i.getClosedGeometry()){let n=e.target.unproject({x:e.originalEvent.x,y:e.originalEvent.y});this.#n={lng:n.lng,lat:n.lat},this.#i=t.tail?.val,this.showDynamicLine();}};#v=e=>{let{store:t,mode:i}=this.#e;i.getClosedGeometry()||(this.#n={lng:e.coordinates.lng,lat:e.coordinates.lat},this.#i=t.tail?.val,this.showDynamicLine());}};var De=22,oe=class{props;#e;#t;constructor(e){this.props=e,this.#e=!1,this.#t=null;}initEvents(){let{map:e}=this.props;e.on("click",r.LineLayerTransparent,this.#i),e.on("mousemove",r.LineLayerTransparent,this.#o),e.on("mouseenter",r.LineLayerTransparent,this.#s),e.on("mouseleave",r.LineLayerTransparent,this.#r);}removeEvents(){let{map:e}=this.props;e.off("click",r.LineLayerTransparent,this.#i),e.off("mousemove",r.LineLayerTransparent,this.#o),e.off("mouseenter",r.LineLayerTransparent,this.#s),e.off("mouseleave",r.LineLayerTransparent,this.#r);}#i=e=>{let{store:t,map:i,mode:n}=this.props;if(Ce(e))return;let s=be(e,t);s&&(y.addPoint({...s,total:t.size},i,n),_e(e,this.props));};#n=e=>{P.setSinglePointVisible(e),e.target.getLayer(r.SinglePointLayer)&&P.updatePointsData(e);};#o=S(e=>{if(f.isFeatureTriggered(e,[r.PointsLayer,r.FirstPointLayer]))return;let{mouseEvents:t}=this.props;t.pointMouseDown||t.pointMouseEnter||(this.#t=e,!this.#e&&(this.#e=!0,requestAnimationFrame(()=>{this.#t&&(this.#n(this.#t),this.#e=!1);})));},De);#s=e=>{let{mouseEvents:t}=this.props;t.pointMouseDown||t.pointMouseEnter||f.isFeatureTriggered(e,[r.PointsLayer,r.FirstPointLayer])||(t.lineMouseEnter=!0,P.setSinglePointVisible(e));};#r=e=>{let{mouseEvents:t}=this.props;t.pointMouseDown||t.pointMouseEnter||(t.lineMouseLeave=!0,P.setSinglePointHidden(e));}};var se=class{props;#e;#t;#i;#n;constructor(e){this.props=e,this.#e=new ie(e),this.#t=new oe(e),this.#i=null,this.#n="default";}init(){this.#o(),this.#s(),this.#r();}#o=()=>{window.innerWidth<=768||this.props.options.dynamicLine&&(this.#i=new ne(this.props));};#s(){!this.props.mode.getBreak()&&(this.#t.initEvents(),this.props.options.dynamicLine&&this.#i?.initDynamicEvents());}#r(){this.props.mode.addObserver(this.#h),this.props.mouseEvents.addObserver(this.#c);}remove(){this.#a(),this.#l();}#a(){this.props.mode.removeObserver(this.#h),this.props.mouseEvents.removeObserver(this.#c),this.props.options.dynamicLine&&this.#i?.removeConsumers();}#l(){this.#e.removeBreakEvents(),this.#t.removeEvents(),this.props.options.dynamicLine&&(this.#i?.removeEvents(),this.#i?.removeLine());}#c=e=>{let{type:t,data:i}=e,{mode:n}=this.props;if(!(!i||!n.getBreak()))switch(t){case"pointMouseDown":this.#e.removeBreakEvents(),this.#e.hideBreakLine();break;case"pointMouseUp":this.#e.initBreakEvents();break;}};#h=e=>{let{type:t,data:i}=e;t==="MODE_CHANGED"&&this.#n==="break"&&(this.#e.removeBreakEvents(),this.#t.initEvents(),this.#n="default"),t==="BREAK_CHANGED"&&i&&this.#n==="default"&&(this.#t.removeEvents(),this.#e.initBreakEvents(),this.#n="break");}};var re=class{#e;#t;#i;constructor(e){this.#t=e,this.#e=!1,this.#i=new O,e.mode.addObserver(this.#n);}initEvents(){let{map:e}=this.#t;e.on("click",r.FirstPointLayer,this.#o),e.on("mouseenter",r.FirstPointLayer,this.#c),e.on("mouseleave",r.FirstPointLayer,this.#a),e.on("mouseup",r.FirstPointLayer,this.#r),e.on("mousedown",r.FirstPointLayer,this.#s);}removeEvents(){let{map:e}=this.#t;e.off("click",r.FirstPointLayer,this.#o),e.off("mouseenter",r.FirstPointLayer,this.#c),e.off("mouseleave",r.FirstPointLayer,this.#a),e.off("mouseup",r.FirstPointLayer,this.#r);}#n=e=>{let{map:t,store:i}=this.#t,{type:n,data:s}=e;n==="MODE_CHANGED"&&(s==="line"||s==="polygon"?t.on("click",r.FirstPointLayer,this.#o):t.off("click",r.FirstPointLayer,this.#o),d.canCloseGeometry(i)&&g.togglePointCircleRadius(t,"large"));};#o=()=>{let{store:e,map:t,mode:i,tiles:n}=this.#t;if(i.getMode()==="polygon"&&t.setLayoutProperty(r.PolygonLayer,"visibility","visible"),d.canCloseGeometry(e)){d.closeGeometry(e,i);let s=Object.assign({},e.head?.val,{id:_(),total:e.size});y.addPoint(s,t,i),g.togglePointCircleRadius(t,"default"),n.render();}};#s=()=>{this.#e=!0,this.#i.remove();};#r=()=>{this.#e=!1;};#a=()=>{let{mouseEvents:e}=this.#t;this.#e||(e.firstPointMouseLeave=!0,this.#i.remove());};#l=()=>{let{mode:e,options:t}=this.#t;return e.getMode()==="line"&&t.modes.line.closeGeometry?t.locale.closeLine:e.getMode()==="polygon"?t.locale.createPolygon:""};#c=e=>{let{mode:t,mouseEvents:i,store:n}=this.#t;if(!(t.getClosedGeometry()||this.#e)&&(i.firstPointMouseEnter=!0,d.canCloseGeometry(n))){let{x:s,y:a}=e.originalEvent;if(s&&a){this.#i.create({label:this.#l(),placement:"bottom"});let L=this.#i._label?this.#i._label.clientWidth/2:0;this.#i.setPosition({x:s-L,y:a+14});}}}};var ae=class{#e;#t;#i;#n;#o;#s;#r;#a;constructor(e){this.#e=e,this.#t=void 0,this.#i=null,this.#n=null,this.#o=null,this.#s=new re(e),this.#r=!1,this.#a=null;}#l=()=>{let{map:e}=this.#e;e.on("click",r.FirstPointLayer,this.#p),e.on("mouseenter",r.FirstPointLayer,this.#L),e.on("mouseleave",r.FirstPointLayer,this.#g),e.on("mousedown",r.FirstPointLayer,this.#d),e.on("mouseup",r.FirstPointLayer,this.#u),e.on("touchend",r.FirstPointLayer,this.#u),e.on("touchstart",r.FirstPointLayer,this.#d),this.#s.initEvents();};initEvents=()=>{let{map:e}=this.#e;e.on("click",this.#m),e.on("dblclick",this.#h),e.on("click",r.PointsLayer,this.#p),e.on("mouseenter",r.PointsLayer,this.#L),e.on("mouseleave",r.PointsLayer,this.#g),e.on("mousedown",r.PointsLayer,this.#d),e.on("mouseup",r.PointsLayer,this.#u),e.on("touchend",r.PointsLayer,this.#u),e.on("touchstart",r.PointsLayer,this.#d),this.#l();};#c=()=>{let{map:e}=this.#e;e.off("click",r.FirstPointLayer,this.#p),e.off("mouseenter",r.FirstPointLayer,this.#L),e.off("mouseleave",r.FirstPointLayer,this.#g),e.off("mousedown",r.FirstPointLayer,this.#d),e.off("mouseup",r.FirstPointLayer,this.#u),e.off("touchend",r.PointsLayer,this.#u),e.off("touchstart",r.PointsLayer,this.#d),this.#s.removeEvents();};removeEvents=()=>{let{map:e}=this.#e;e.off("click",this.#m),e.off("dblclick",this.#h),e.off("mousemove",this.#y),e.off("click",r.PointsLayer,this.#p),e.off("mouseenter",r.PointsLayer,this.#L),e.off("mouseleave",r.PointsLayer,this.#g),e.off("mousedown",r.PointsLayer,this.#d),e.off("mouseup",r.PointsLayer,this.#u),this.#c();};#h=e=>{e.preventDefault();};#p=e=>{let{store:t,tiles:i,panel:n,map:s,mouseEvents:a}=this.#e;g.isDoubleClick()&&this.#n&&(t.removeStepById(this.#n.id),n.onPointRemove(t.tail?.val),y.pointDoubleClick({...this.#n,total:t.size},this.#e.map),d.switchToLineModeIfCan(this.#e));let h=f.queryPointId(s,e.point);M.isLastPoint(t,h)&&(a.lastPointMouseClick=!0,a.lastPointMouseUp=!1),i.render();};#f=e=>f.isFeatureTriggered(e,[r.PointsLayer,r.FirstPointLayer,r.LineLayerTransparent,r.LineLayerBreak]);#m=e=>{let{mode:t,mouseEvents:i,map:n}=this.#e;t.getClosedGeometry()||this.#f(e)||(i.lastPointMouseClick&&(i.lastPointMouseClick=!1),n.getCanvasContainer().style.cursor="grab",P.addPointToMap(e,this.#e),P.setSinglePointHidden(e));};#v=e=>{e.originalEvent.buttons===0&&this.#u();};#E=e=>{let{tiles:t}=this.#e;t.renderOnMouseMove(this.#o,e.lngLat);};#y=S(e=>{this.#a=e,this.#r||(this.#r=!0,requestAnimationFrame(()=>{!this.#n||!this.#a||(P.updateSelectedStepLatLng(this.#a,this.#n),this.#v(this.#a),this.#E(this.#a),this.#r=!1);}));},15);#L=e=>{let{mouseEvents:t,map:i,store:n}=this.#e;if(t&&(t.pointMouseEnter=!0,t.pointMouseDown))return;P.setSinglePointHidden(e);let s=f.queryPointId(i,e.point);M.isLastPoint(n,s)&&(t.lastPointMouseEnter=!0,t.lastPointMouseLeave=!1);let a=n.findStepById(s);a&&(this.#i=a,y.enterPoint(Object.assign({},a,{total:n.size}),i));};#g=e=>{let{mouseEvents:t,store:i,map:n}=this.#e;if(t&&(t.pointMouseEnter=!1,e.originalEvent.buttons===0&&(t.pointMouseLeave=!0),t.pointMouseDown))return;let s=f.queryPointId(n,e.point);M.isLastPoint(i,s)&&(t.lastPointMouseEnter=!1,t.lastPointMouseLeave=!0),y.leavePoint(Object.assign({},this.#i,{total:i.size}),n);};#P=()=>{let{store:e,panel:t}=this.#e;this.#n&&M.isLastPoint(e,this.#n.id)&&t.hidePanel();};#M=e=>{let{store:t,map:i}=this.#e,n=f.queryPointId(i,e.point),s=t.findStepById(n);s&&(this.#n=s);};#d=e=>{e.preventDefault();let{mouseEvents:t,map:i,store:n}=this.#e;g.removeTransparentLine(i),this.#M(e),this.#P();let s=f.queryPointId(i,e.point);this.#o=d.getGeometryIndex(n,s),t&&(t.pointMouseDown=!0),this.#t=e.lngLat,i.on("mousemove",this.#y),i.on("touchmove",this.#y);};#u=()=>{let{mouseEvents:e,store:t,panel:i,map:n,options:s}=this.#e;e.pointMouseUp=!0,this.#n&&(M.isLastPoint(t,this.#n.id)&&t.tail?.val&&i?.setPanelLocation(t.tail.val),i?.showPanel(),y.movePoint({id:this.#n.id,total:t.size,end:{lat:this.#n.lat,lng:this.#n.lng},start:this.#t},n)),e&&(e.pointMouseDown=!1),g.addTransparentLine(n,s),n.off("mousemove",this.#y),n.off("touchmove",this.#y);}};var le=class extends F{#e;#t;#i;#n;#o;constructor(e){super({...e}),this.#e=e,this.#t=new te(e),this.#i=new Q(e),this.#n=new ae(e),this.#o=new se(e),e.map.on("mode:initialize",this.#s),e.map.on("mode:remove",this.#r);}#s=()=>{this.#o.init(),this.#t?.initEvents(),this.#n?.initEvents();};#r=()=>{this.#t?.removeEvents(),this.#n?.removeEvents(),this.#o?.remove();};removeMapEventsAndConsumers=()=>{this.#t?.removeEvents(),this.#n?.removeEvents(),this.#i?.remove(),this.#o?.remove(),this.#e.map.off("mode:initialize",this.#s);}};var ce=class{#e;_line;_polygon;_break;_container;constructor(e){this.#e=e.options,this._line=void 0,this._polygon=void 0,this._break=void 0,this._container=l.create("div","mapboxgl-ctrl mapboxgl-ctrl-group maplibregl-ctrl maplibregl-ctrl-group"),this.createControl(e);}createControlButton=(e,t,i,n)=>{let s=this.#e.panel.size,a=l.create("button",`control-button control-button-${s}`,this._container);return a.setAttribute("aria-label",t),a.setAttribute("data-type",e),i&&a.classList.add("control-button-active"),n&&(a.setAttribute("disabled","true"),a.setAttribute("aria-disabled","true")),l.create("span",`icon ${e} icon-${s}`,a),a};#t=e=>{let{mode:t,options:i}=e,n=this.#e.modes.line.visible,s=i.locale.line;n&&(this._line=this.createControlButton("line",s,t.getMode()==="line"));};#i=e=>{let{mode:t,options:i}=e,n=this.#e.modes.polygon.visible,s=i.locale.polygon;n&&(this._polygon=this.createControlButton("polygon",s,t.getMode()==="polygon"));};#n=e=>{let{mode:t,options:i}=e,n=this.#e.modes.breakGeometry.visible,s=i.locale.break;if(n){let h=!this.#e?.initial?.closeGeometry,L=t.getBreak();this._break=this.createControlButton("break",s,L,h);}};createControl=e=>{this.#t(e),this.#i(e),this.#n(e);};getContainer=()=>this._container};function Ae(o){return o.initial?.geometry?o.initial?.geometry:o.modes.initial?o.modes.initial:null}var he=class extends k{#e;#t;#i;constructor(e){super(),this.#e=Ae(e),this.#t=!1,this.#i=e.initial?.closeGeometry??!1;}getMode=()=>this.#e;setMode=e=>{this.#e=e,this.setBreak(!1),this.notify({type:"MODE_CHANGED",data:e});};getBreak=()=>this.#t;setBreak=e=>{this.#t=e,this.notify({type:"BREAK_CHANGED",data:e});};getClosedGeometry=()=>this.#i;setClosedGeometry=e=>{this.#i=e,this.notify({type:"CLOSED_GEOMETRY_CHANGED",data:this.#i});};isPolygon=()=>this.#e==="polygon"&&this.#i;reset=()=>{this.setMode(this.getMode()),this.setClosedGeometry(!1);};pingConsumers=()=>{this.notify({type:"MODE_CHANGED",data:this.getMode()}),this.notify({type:"CLOSED_GEOMETRY_CHANGED",data:this.getClosedGeometry()});}};var pe=class{#e;#t;constructor(e){this.#e=e,this.#t=this.#e.map.getCanvasContainer(),this.#t.style.cursor=e.mode.getMode()?E.CROSSHAIR:E.AUTO,this.#i();}set=e=>{this.#t.style.cursor=e;};get=()=>this.#t.style.cursor;handleMouseLeave=()=>{let{mouseEvents:e,mode:t}=this.#e;if(!e.pointMouseDown){if(!t.getMode()){this.set(E.AUTO);return}t.getClosedGeometry()?this.set(E.AUTO):this.set(E.CROSSHAIR);}};handleFirstPointMouseEnter=()=>{let{mode:e,store:t}=this.#e;e.getClosedGeometry()&&this.set(E.MOVE),d.canCloseGeometry(t)&&this.set(E.POINTER);};#i(){let{mouseEvents:e}=this.#e;e.addObserver(this.#n);}removeConsumers(){let{mouseEvents:e}=this.#e;e.removeObserver(this.#n);}#n=e=>{let{mode:t,mouseEvents:i}=this.#e;if(t.getBreak())return;let{type:n,data:s}=e;if(s)switch(n){case"pointMouseDown":this.set(E.GRABBING);break;case"pointMouseUp":this.set(E.GRAB);break;case"pointMouseEnter":if(i.pointMouseDown)return;this.set(E.GRAB);break;case"pointMouseLeave":this.handleMouseLeave();break;case"lineMouseEnter":if(i.pointMouseDown)return;this.set(E.POINTER);break;case"lineMouseLeave":this.handleMouseLeave();break;case"firstPointMouseEnter":this.handleFirstPointMouseEnter();break;case"firstPointMouseLeave":this.handleMouseLeave();break;case"lastPointMouseEnter":this.set(E.POINTER);break;case"lastPointMouseLeave":this.handleMouseLeave();break;}}};var ue=class extends k{#e;#t;#i;#n;#o;#s;#r;#a;#l;#c;#h;#p;constructor(){super(),this.#e=!1,this.#t=!1,this.#i=!1,this.#n=!1,this.#o=!1,this.#s=!1,this.#r=!1,this.#a=!1,this.#l=!1,this.#c=!1,this.#h=!1,this.#p=!1;}get firstPointMouseEnter(){return this.#e}set firstPointMouseEnter(e){this.#e=e,this.notify({type:"firstPointMouseEnter",data:e});}get firstPointMouseLeave(){return this.#t}set firstPointMouseLeave(e){this.#t=e,this.notify({type:"firstPointMouseLeave",data:e});}get lastPointMouseClick(){return this.#i}set lastPointMouseClick(e){this.#i=e,this.notify({type:"lastPointMouseClick",data:e});}get lastPointMouseUp(){return this.#n}set lastPointMouseUp(e){this.#n=e,this.notify({type:"lastPointMouseUp",data:e});}get lastPointMouseEnter(){return this.#o}set lastPointMouseEnter(e){this.#o=e,this.notify({type:"lastPointMouseEnter",data:e});}get lastPointMouseLeave(){return this.#s}set lastPointMouseLeave(e){this.#s=e,this.notify({type:"lastPointMouseLeave",data:e});}get pointMouseDown(){return this.#r}set pointMouseDown(e){this.#r=e,this.notify({type:"pointMouseDown",data:e});}get pointMouseUp(){return this.#a}set pointMouseUp(e){this.#a=e,this.notify({type:"pointMouseUp",data:e});}get pointMouseEnter(){return this.#l}set pointMouseEnter(e){this.#l=e,this.notify({type:"pointMouseEnter",data:e});}get pointMouseLeave(){return this.#c}set pointMouseLeave(e){this.#c=e,this.notify({type:"pointMouseLeave",data:e});}get lineMouseEnter(){return this.#h}set lineMouseEnter(e){this.#h=e,this.notify({type:"lineMouseEnter",data:e});}get lineMouseLeave(){return this.#p}set lineMouseLeave(e){this.#p=e,this.notify({type:"lineMouseLeave",data:e});}};var q=class{static allStepsHaveIds(e){return e.every(t=>"id"in t&&t.id!==void 0)}static checkIfMissingIds(e,t){let i=!t,n=!this.allStepsHaveIds(e);if(i&&n)throw new Error(R.MISSING_IDS)}static checkIfEnoughPointsToClose(e,t){if(t&&e.length<3)throw new Error(R.NOT_ENOUGH_POINTS_TO_CLOSE)}static checkIfPolygonIsClosed(e){let{closeGeometry:t,steps:i}=e;if(i){let n=i[0]?.lng,s=i[i.length-1]?.lng,a=i[0]?.lat,h=i[i.length-1]?.lat;if((n!==s||a!==h)&&t)throw new Error(R.FIRST_LAST_POINT_NOT_EQUAL)}}static checkInitialStepsOption(e){let{closeGeometry:t,generateId:i,steps:n}=e;this.checkIfMissingIds(n,i),this.checkIfEnoughPointsToClose(n,t),this.checkIfPolygonIsClosed(e);}static init(e){return e?{panel:Ie(e),modes:Be(e),layersPaint:Ne(e),initial:e.initial||m.initial,locale:Fe(e),dynamicLine:e.dynamicLine??m.dynamicLine}:m}};function Ie(o){return {size:o.panel?.size||m.panel.size,buttons:{undo:{visible:o.panel?.buttons?.undo?.visible??m.panel.buttons.undo.visible},delete:{visible:o.panel?.buttons?.delete?.visible??m.panel.buttons.delete.visible},save:{visible:o.panel?.buttons?.save?.visible??m.panel.buttons.save.visible,clearOnSave:o.panel?.buttons?.save?.clearOnSave??m.panel.buttons.save.clearOnSave}}}}function Be(o){return {initial:o.modes?.initial||m.modes.initial,line:{visible:o?.modes?.line?.visible!==void 0?o.modes.line.visible:o?.initial?.geometry==="line"||m.modes.line.visible,closeGeometry:o?.modes?.line?.closeGeometry??o?.initial?.closeGeometry??m.modes.line.closeGeometry},polygon:{visible:o?.modes?.polygon?.visible!==void 0?o.modes.polygon.visible:o?.initial?.geometry==="polygon"||m.modes.polygon.visible},breakGeometry:{visible:o?.modes?.breakGeometry?.visible??m.modes.breakGeometry.visible}}}function Ne(o){return {onLinePoint:{"circle-radius":o.layersPaint?.onLinePoint?.["circle-radius"]||w["circle-radius"],"circle-color":o.layersPaint?.onLinePoint?.["circle-color"]||w["circle-color"],"circle-stroke-color":o.layersPaint?.onLinePoint?.["circle-stroke-color"]||w["circle-stroke-color"],"circle-stroke-width":o.layersPaint?.onLinePoint?.["circle-stroke-width"]||w["circle-stroke-width"],...o.layersPaint?.onLinePoint},firstPoint:{"circle-radius":o.layersPaint?.firstPoint?.["circle-radius"]||T["circle-radius"],"circle-color":o.layersPaint?.firstPoint?.["circle-color"]||T["circle-color"],"circle-stroke-color":o.layersPaint?.firstPoint?.["circle-stroke-color"]||T["circle-stroke-color"],"circle-stroke-width":o.layersPaint?.firstPoint?.["circle-stroke-width"]||T["circle-stroke-width"],...o.layersPaint?.firstPoint},points:{"circle-radius":o.layersPaint?.points?.["circle-radius"]||D["circle-radius"],"circle-color":o.layersPaint?.points?.["circle-color"]||D["circle-color"],"circle-stroke-color":o.layersPaint?.points?.["circle-stroke-color"]||D["circle-stroke-color"],"circle-stroke-width":o.layersPaint?.points?.["circle-stroke-width"]||D["circle-stroke-width"],...o.layersPaint?.points},line:{"line-width":o.layersPaint?.line?.["line-width"]||B["line-width"],"line-color":o.layersPaint?.line?.["line-color"]||B["line-color"],"line-opacity":o.layersPaint?.line?.["line-opacity"]||B["line-opacity"],...o.layersPaint?.line},polygon:{"fill-color":o.layersPaint?.polygon?.["fill-color"]||H["fill-color"],"fill-opacity":o.layersPaint?.polygon?.["fill-opacity"]||H["fill-opacity"],...o.layersPaint?.polygon},breakLine:{"line-width":o.layersPaint?.breakLine?.["line-width"]||N["line-width"],"line-color":o.layersPaint?.breakLine?.["line-color"]||N["line-color"],"line-dasharray":o.layersPaint?.breakLine?.["line-dasharray"]||N["line-dasharray"],...o.layersPaint?.breakLine}}}function Fe(o){return {save:o.locale?.save??m.locale.save,delete:o.locale?.delete??m.locale.delete,undo:o.locale?.undo??m.locale.undo,line:o.locale?.line??m.locale.line,polygon:o.locale?.polygon??m.locale.polygon,break:o.locale?.break??m.locale.break,closeLine:o.locale?.closeLine??m.locale.closeLine,createPolygon:o.locale?.createPolygon??m.locale.createPolygon}}var fe=class o{#e;#t;#i;#n;#o;#s;#r;#a;#l;static#c=null;static#h=!1;constructor(e){if(this.#n=q.init(e),this.#n.initial&&q.checkInitialStepsOption(this.#n.initial),o.#h)throw new Error("Use 'DrawLibre.getInstance()' instead of 'new DrawLibre()'.");o.#h=!0,this.#t=void 0,this.#i=void 0,this.#o=void 0,this.#s=void 0,this.#r=void 0,this.#l=void 0,this.#a=void 0;}static getInstance(e){return o.#c||(o.#c=new o(e)),o.#c}onAdd(e){this.#t=new U(this.#n),this.#i=new he(this.#n),this.#r=new j({map:e,mode:this.#i,options:this.#n,store:this.#t}),this.#s=new F({map:e,store:this.#t,options:this.#n,mode:this.#i});let t=new ce({options:this.#n,mode:this.#i});return this.#l=new ue,this.#a=new pe({map:e,mode:this.#i,mouseEvents:this.#l,store:this.#t}),this.#o=new le({map:e,store:this.#t,options:this.#n,panel:this.#r,control:t,mode:this.#i,tiles:this.#s,mouseEvents:this.#l}),this.#i.getMode()&&e.fire("mode:initialize"),this.#i.pingConsumers(),this.#e=t.getContainer(),this.#e}onRemove(){this.#a?.removeConsumers(),this.#s?.removeTiles(),this.#o?.removeMapEventsAndConsumers(),this.#r?.removePanel(),this.#t?.reset(),this.#i?.unsubscribe(),this.#e&&l.remove(this.#e);}setSteps=e=>{if(Array.isArray(e))e.forEach(t=>{let i={...t,id:t.id||_()};this.#t?.push(i);});else throw new Error("Invalid argument. Expected an array of steps.");this.#s?.render();};findStepById=e=>this.#t?.findStepById(e);getAllSteps=(e="array")=>{if(e==="array"&&this.#t)return M.toArray(this.#t.head);if(e==="linkedlist")return this.#t;throw new Error("Invalid type specified. Use 'array' or 'linkedlist'.")};setOptions=e=>{this.#n=e(this.#n);};removeAllSteps=()=>{this.#t?.reset(),this.#r?.removePanel(),this.#s?.render();}};
4
-
5
- module.exports = fe;
3
+ export { ve as default };
package/package.json CHANGED
@@ -1,19 +1,22 @@
1
1
  {
2
2
  "name": "draw-libre",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "Draw a line/polygon on a maplibre or mapbox map",
5
5
  "private": false,
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.mjs",
8
8
  "types": "./dist/index.d.ts",
9
+ "type": "module",
9
10
  "scripts": {
10
11
  "build": "tsup",
11
12
  "build:w": "tsup --watch",
12
13
  "dev": "tsc -w",
13
14
  "lint": "tsc",
14
15
  "prettier": "prettier --write .",
15
- "ci": "npm run lint && npm run build",
16
- "release": "npm run ci && changeset publish"
16
+ "exports": "attw --pack .",
17
+ "ci": "npm run lint && npm run prettier && npm run build",
18
+ "release": "npm run ci",
19
+ "prepublishOnly": "npm run ci"
17
20
  },
18
21
  "repository": {
19
22
  "type": "git",
@@ -30,12 +33,14 @@
30
33
  "url": "https://github.com/HusikyanLevon/draw-libre/issues"
31
34
  },
32
35
  "homepage": "https://github.com/HusikyanLevon/draw-libre#readme",
36
+ "files": [
37
+ "dist"
38
+ ],
33
39
  "peerDependencies": {
34
40
  "mapbox-gl": "^3",
35
41
  "maplibre-gl": "^3"
36
42
  },
37
43
  "devDependencies": {
38
- "@changesets/cli": "2.27.1",
39
44
  "@types/mapbox-gl": "3.1.0",
40
45
  "@types/node": "20.12.8",
41
46
  "prettier": "3.2.5",
package/dist/index.d.mts DELETED
@@ -1,246 +0,0 @@
1
- import { Map as Map$1, IControl as IControl$1, CircleLayerSpecification, LineLayerSpecification, FillLayerSpecification } from 'maplibre-gl';
2
- import { Map as Map$2, IControl as IControl$2 } from 'mapbox-gl';
3
-
4
- type Map = Map$1 & Map$2;
5
- type IControl = IControl$1 & IControl$2;
6
-
7
- type Func<T> = (event: T) => any;
8
- type ChangeEvent<T> = {
9
- [K in keyof T]: {
10
- type: K;
11
- data: T[K];
12
- };
13
- }[keyof T];
14
- declare class Observable<T> {
15
- observers: Set<Func<T>>;
16
- constructor();
17
- addObserver(observer: Func<T>): void;
18
- removeObserver(observer: Func<T>): void;
19
- unsubscribe(): void;
20
- notify(args: T): void;
21
- }
22
-
23
- type Mode = "line" | "polygon" | null;
24
-
25
- interface EventData {
26
- STORE_CHANGED: {
27
- head: ListNode | null;
28
- tail: ListNode | null;
29
- size: number;
30
- };
31
- }
32
- type StoreChangeEvent = ChangeEvent<EventData>;
33
-
34
- declare class ListNode {
35
- val: Step | null;
36
- next: ListNode | null;
37
- constructor(val?: Step | null, next?: ListNode | null);
38
- }
39
- declare class Store extends Observable<StoreChangeEvent> {
40
- head: ListNode | null;
41
- tail: ListNode | null;
42
- size: number;
43
- constructor(options?: RequiredDrawOptions);
44
- push(step: Step): void;
45
- insert(step: Step, current: ListNode): void;
46
- findStepById(id: StepId): ListNode["val"] | null;
47
- removeStepById(id: string): ListNode | null;
48
- reset(): void;
49
- pingConsumers: () => void;
50
- }
51
-
52
- type AnyFunction = (...args: any[]) => any;
53
- type DeepRequired<T> = T extends AnyFunction ? T : {
54
- [K in keyof T]-?: DeepRequired<T[K]>;
55
- };
56
-
57
- type LatLng = {
58
- lat: number;
59
- lng: number;
60
- };
61
- type Uuid = `${string}-${string}-${string}-${string}-${string}`;
62
- type StepId = Uuid | string;
63
- type Step = {
64
- id: StepId;
65
- } & LatLng;
66
- interface PanelImpl {
67
- size?: "small" | "medium" | "large";
68
- buttons?: {
69
- delete?: Button;
70
- undo?: Button;
71
- save?: SaveButton;
72
- };
73
- }
74
- type Button = {
75
- visible?: boolean;
76
- };
77
- type SaveButton = Button & {
78
- clearOnSave?: boolean;
79
- };
80
- type InitialSteps = {
81
- steps: Step[];
82
- generateId?: boolean;
83
- } | {
84
- steps: LatLng[];
85
- generateId: true;
86
- };
87
- type Initial = InitialSteps & {
88
- geometry: "line" | "polygon";
89
- closeGeometry: boolean;
90
- };
91
- interface LayersPaint {
92
- onLinePoint?: CircleLayerSpecification["paint"];
93
- firstPoint?: CircleLayerSpecification["paint"];
94
- points?: CircleLayerSpecification["paint"];
95
- line?: LineLayerSpecification["paint"];
96
- polygon?: FillLayerSpecification["paint"];
97
- breakLine?: LineLayerSpecification["paint"];
98
- }
99
- interface Locale {
100
- save?: string;
101
- delete?: string;
102
- undo?: string;
103
- line?: string;
104
- polygon?: string;
105
- break?: string;
106
- closeLine?: string;
107
- createPolygon?: string;
108
- }
109
- interface DrawOptions {
110
- panel?: {
111
- size?: PanelImpl["size"];
112
- buttons?: PanelImpl["buttons"];
113
- };
114
- modes?: {
115
- initial?: Mode;
116
- line?: {
117
- visible?: boolean;
118
- closeGeometry?: boolean;
119
- };
120
- polygon?: {
121
- visible?: boolean;
122
- };
123
- breakGeometry?: {
124
- visible?: boolean;
125
- };
126
- };
127
- layersPaint?: LayersPaint;
128
- initial?: Initial | null;
129
- locale?: Locale;
130
- dynamicLine?: boolean;
131
- }
132
- type RequiredDrawOptions = DeepRequired<Omit<DrawOptions, "layersPaint">> & {
133
- layersPaint: LayersPaint;
134
- };
135
-
136
- interface BaseEvent {
137
- id: Uuid;
138
- total: number;
139
- timestamp: number;
140
- target: Map;
141
- }
142
- interface ModeEvent {
143
- geometry: Mode;
144
- closedGeometry: boolean;
145
- }
146
- interface UndoEvent extends BaseEvent {
147
- coordinates: LatLng;
148
- originalEvent: MouseEvent;
149
- }
150
- interface RemoveAllEvent {
151
- originalEvent: MouseEvent;
152
- }
153
- interface SaveEvent {
154
- originalEvent: MouseEvent;
155
- timestamp: number;
156
- steps: Step[];
157
- mode: ModeEvent;
158
- }
159
- interface PointDoubleClickEvent extends BaseEvent {
160
- coordinates: LatLng;
161
- }
162
- interface PointAddEvent extends BaseEvent {
163
- coordinates: LatLng;
164
- mode: ModeEvent;
165
- }
166
- interface PointMoveEvent extends BaseEvent {
167
- start_coordinates: LatLng;
168
- end_coordinates: LatLng;
169
- }
170
- interface PointEnterEvent extends BaseEvent {
171
- coordinates: LatLng;
172
- }
173
- interface PointLeaveEvent extends BaseEvent {
174
- coordinates: LatLng;
175
- }
176
- interface ModeChangeEvent {
177
- mode: ModeEvent;
178
- }
179
-
180
- declare class DrawLibre implements IControl {
181
- #private;
182
- private constructor();
183
- static getInstance(options?: DrawOptions): DrawLibre;
184
- /**
185
- * DO NOT USE IMPLICITLY. PASS TO map.addControl().
186
- *
187
- * @example ```ts
188
- * const map = new Map();
189
- * const draw = new DrawLibre();
190
- * map.addControl(draw)
191
- * ```
192
- *
193
- * Register a control on the map and give it a chance to register event listeners
194
- *
195
- * @param map - the Map this control will be added to
196
- * @returns The control's container element. This should
197
- * be created by the control and returned by onAdd without being attached
198
- * to the DOM: the map will insert the control's element into the DOM
199
- * as necessary.
200
- */
201
- onAdd(map: Map): HTMLElement;
202
- /**
203
- * DO NOT USE IMPLICITLY. PASS TO map.removeControl().
204
- *
205
- * @example ```ts
206
- * const map = new Map();
207
- * const draw = new DrawLibre();
208
- * map.removeControl(draw)
209
- * ```
210
- *
211
- * Unregister a control on the map and give it a chance to detach event listeners.
212
- *
213
- * @param map - the Map this control will be removed from
214
- */
215
- onRemove(): void;
216
- /**
217
- * Adds a series of steps to the store. If a step ID is not provided, it will be automatically generated.
218
- *
219
- * @param step - The step to add to the store, which can be of type Step or LatLng.
220
- */
221
- setSteps: (value: Step[] | LatLng[]) => void;
222
- /**
223
- * Retrieves a step from the store by its ID. This method is called by {@link map.findStepById}
224
- * internally.
225
- *
226
- * @param id - The ID of the step to retrieve.
227
- * @returns The step with the specified ID, or undefined if not found.
228
- */
229
- findStepById: (id: StepId) => Step | null | undefined;
230
- /**
231
- * Retrieves all steps from the store, either as an array or as a linked list, based on the type specified.
232
- * This method is called by {@link map.getAllSteps}
233
- * internally.
234
- *
235
- * @param type - The type of collection to return, either "array" or "ll" (linked list).
236
- * @returns An array of all steps or the linked list of steps.
237
- */
238
- getAllSteps: (type?: "array" | "linkedlist") => Store | Step[] | undefined;
239
- setOptions: (fn: (options: RequiredDrawOptions) => RequiredDrawOptions) => void;
240
- /**
241
- * Removes all steps.
242
- */
243
- removeAllSteps: () => void;
244
- }
245
-
246
- export { type ModeChangeEvent, type PointAddEvent, type PointDoubleClickEvent, type PointEnterEvent, type PointLeaveEvent, type PointMoveEvent, type RemoveAllEvent, type RequiredDrawOptions, type SaveEvent, type UndoEvent, DrawLibre as default };
package/dist/index.mjs DELETED
@@ -1,3 +0,0 @@
1
- var l=class o{static docStyle=typeof window<"u"&&window.document&&window.document.documentElement.style;static transformProp=o.testProp(["transform","WebkitTransform"]);static testProp(e){if(!o.docStyle)return e[0];for(let t=0;t<e.length;t++)if(e[t]in o.docStyle)return e[t];return e[0]}static create(e,t,i){let n=window.document.createElement(e);return t!==void 0&&(n.className=t),i&&i.appendChild(n),n}static remove(e){e.parentNode&&e.parentNode.removeChild(e);}static setTransform(e,t){o.transformProp&&e.style&&(e.style[o.transformProp]=t);}static manageEventListener(e,t,i,n,s={}){if(!t)return;let a=e==="add"?"addEventListener":"removeEventListener";"passive"in s?t[a](i,n,s):t[a](i,n,s.capture);}static mouseButton(e){return e.button}static addClassName(e,t){e.classList.contains(t)||e.classList.add(t);}static removeClassName(e,t){e.classList.contains(t)&&e.classList.remove(t);}};var S=class o{lng;lat;constructor(e,t){if(isNaN(e)||isNaN(t))throw new Error(`Invalid LngLat object: (${e}, ${t})`);if(this.lng=+e,this.lat=+t,this.lat>90||this.lat<-90)throw new Error("Invalid LngLat latitude value: must be between -90 and 90")}static convert(e){if(e instanceof o)return e;if(Array.isArray(e)&&(e.length===2||e.length===3))return new o(Number(e[0]),Number(e[1]));if(!Array.isArray(e)&&typeof e=="object"&&e!==null)return new o(Number("lng"in e?e.lng:e.lon),Number(e.lat));throw new Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: <lng>, lat: <lat>}, an object {lon: <lng>, lat: <lat>}, or an array of [<lng>, <lat>]")}};function H(o,...e){for(let t of e)for(let i in t)o[i]=t[i];return o}function Le(o,e,t){let i=new S(o.lng,o.lat);if(o=new S(o.lng,o.lat),e){let n=new S(o.lng-360,o.lat),s=new S(o.lng+360,o.lat),a=t.locationPoint(o).distSqr(e);t.locationPoint(n).distSqr(e)<a?o=n:t.locationPoint(s).distSqr(e)<a&&(o=s);}for(;Math.abs(o.lng-t.center.lng)>180;){let n=t.locationPoint(o);if(n.x>=0&&n.y>=0&&n.x<=t.width&&n.y<=t.height)break;o.lng>t.center.lng?o.lng-=360:o.lng+=360;}return o.lng!==i.lng&&t.locationPoint(o).y>t.height/2-t.getHorizon()?o:i}var me={center:"translate(-50%,-50%)",top:"translate(-50%,0)","top-left":"translate(0,0)","top-right":"translate(-100%,0)",bottom:"translate(-50%,-100%)","bottom-left":"translate(0,-100%)","bottom-right":"translate(-100%,-100%)",left:"translate(0,-50%)",right:"translate(-100%,-50%)"};function ge(o,e,t){let i=o.classList;for(let n in me)i.remove(`maplibregl-${t}-anchor-${n}`);i.add(`maplibregl-${t}-anchor-${e}`);}function Ee(o,e,t){t[o]&&t[o].indexOf(e)!==-1||(t[o]=t[o]||[],t[o].push(e));}function ye(o,e,t){if(t&&t[o]){let i=t[o].indexOf(e);i!==-1&&t[o].splice(i,1);}}var Y=class{_listeners;_oneTimeListeners;_eventedParent;_eventedParentData;on(e,t){return this._listeners=this._listeners||{},Ee(e,t,this._listeners),this}off(e,t){return ye(e,t,this._listeners),ye(e,t,this._oneTimeListeners),this}once(e,t){return t?(this._oneTimeListeners=this._oneTimeListeners||{},Ee(e,t,this._oneTimeListeners),this):new Promise(i=>this.once(e,i))}fire(e,t){typeof e=="string"&&(e=new I(e,t||{}));let i=e.type;if(this.listens(i)){e.target=this;let n=this._listeners&&this._listeners[i]?this._listeners[i].slice():[];for(let p of n)p.call(this,e);let s=this._oneTimeListeners&&this._oneTimeListeners[i]?this._oneTimeListeners[i].slice():[];for(let p of s)ye(i,p,this._oneTimeListeners),p.call(this,e);let a=this._eventedParent;a&&(H(e,typeof this._eventedParentData=="function"?this._eventedParentData():this._eventedParentData),a.fire(e));}else e instanceof ErrorEvent&&console.error(e.error);return this}listens(e){return this._listeners&&this._listeners[e]&&this._listeners[e].length>0||this._oneTimeListeners&&this._oneTimeListeners[e]&&this._oneTimeListeners[e].length>0||this._eventedParent&&this._eventedParent.listens(e)}setEventedParent(e,t){return this._eventedParent=e,this._eventedParentData=t,this}},I=class{type;constructor(e,t={}){H(this,t),this.type=e;}};var u=class o{x;y;constructor(e,t){this.x=e,this.y=t;}mag(){return Math.sqrt(this.x*this.x+this.y*this.y)}equals(e){return this.x===e.x&&this.y===e.y}dist(e){return Math.sqrt(this.distSqr(e))}distSqr(e){let t=e.x-this.x,i=e.y-this.y;return t*t+i*i}angle(){return Math.atan2(this.y,this.x)}angleTo(e){return Math.atan2(this.y-e.y,this.x-e.x)}angleWith(e){return this.angleWithSep(e.x,e.y)}angleWithSep(e,t){return Math.atan2(this.x*t-this.y*e,this.x*e+this.y*t)}_matMult(e){let t=e[0]*this.x+e[1]*this.y,i=e[2]*this.x+e[3]*this.y;return this.x=t,this.y=i,this}_add(e){return this.x+=e.x,this.y+=e.y,this}_sub(e){return this.x-=e.x,this.y-=e.y,this}_mult(e){return this.x*=e,this.y*=e,this}_div(e){return this.x/=e,this.y/=e,this}_multByPoint(e){return this.x*=e.x,this.y*=e.y,this}_divByPoint(e){return this.x/=e.x,this.y/=e.y,this}_unit(){return this._div(this.mag()),this}_perp(){let e=this.y;return this.y=this.x,this.x=-e,this}_rotate(e){let t=Math.cos(e),i=Math.sin(e),n=t*this.x-i*this.y,s=i*this.x+t*this.y;return this.x=n,this.y=s,this}_rotateAround(e,t){let i=Math.cos(e),n=Math.sin(e),s=t.x+i*(this.x-t.x)-n*(this.y-t.y),a=t.y+n*(this.x-t.x)+i*(this.y-t.y);return this.x=s,this.y=a,this}_round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}static convert(e){if(e instanceof o)return e;if(Array.isArray(e))return new o(+e[0],+e[1]);if(e.x!==void 0&&e.y!==void 0)return new o(+e.x,+e.y);throw new Error("Expected [x, y] or {x, y} point format")}};var ke={closeButton:!0,closeOnClick:!0,focusAfterOpen:!0,className:"",maxWidth:"240px",subpixelPositioning:!1},xe=["a[href]","[tabindex]:not([tabindex='-1'])","[contenteditable]:not([contenteditable='false'])","button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].join(", "),j=class extends Y{_map;options;_content;_container;_closeButton;_tip;_lngLat;_trackPointer;_pos;_flatPos;constructor(e){super(),this.options=H(Object.create(ke),e);}addTo(e){return this._map&&this.remove(),this._map=e,this.options.closeOnClick&&this._map.on("click",this._onClose),this.options.closeOnMove&&this._map.on("move",this._onClose),this._map.on("remove",this.remove),this._update(),this._focusFirstElement(),this._trackPointer?(this._map.on("mousemove",this._onMouseMove),this._map.on("mouseup",this._onMouseUp),this._container&&this._container.classList.add("maplibregl-popup-track-pointer"),this._map._canvasContainer.classList.add("maplibregl-track-pointer")):this._map.on("move",this._update),this.fire(new I("open")),this}isOpen(){return !!this._map}remove=()=>(this._content&&l.remove(this._content),this._container&&(l.remove(this._container),delete this._container),this._map&&(this._map.off("move",this._update),this._map.off("move",this._onClose),this._map.off("click",this._onClose),this._map.off("remove",this.remove),this._map.off("mousemove",this._onMouseMove),this._map.off("mouseup",this._onMouseUp),this._map.off("drag",this._onDrag),this._map._canvasContainer.classList.remove("maplibregl-track-pointer"),delete this._map,this.fire(new I("close"))),this);getLngLat(){return this._lngLat}setLngLat(e){return this._lngLat=S.convert(e),this._pos=null,this._flatPos=null,this._trackPointer=!1,this._update(),this._map&&(this._map.on("move",this._update),this._map.off("mousemove",this._onMouseMove),this._container&&this._container.classList.remove("maplibregl-popup-track-pointer"),this._map._canvasContainer.classList.remove("maplibregl-track-pointer")),this}trackPointer(){return this._trackPointer=!0,this._pos=null,this._flatPos=null,this._update(),this._map&&(this._map.off("move",this._update),this._map.on("mousemove",this._onMouseMove),this._map.on("drag",this._onDrag),this._container&&this._container.classList.add("maplibregl-popup-track-pointer"),this._map._canvasContainer.classList.add("maplibregl-track-pointer")),this}getElement(){return this._container}setText(e){return this.setDOMContent(document.createTextNode(e))}setHTML(e){let t=document.createDocumentFragment(),i=document.createElement("body"),n;for(i.innerHTML=e;n=i.firstChild,!!n;)t.appendChild(n);return this.setDOMContent(t)}getMaxWidth(){return this._container?.style.maxWidth}setMaxWidth(e){return this.options.maxWidth=e,this._update(),this}setDOMContent(e){if(this._content)for(;this._content.hasChildNodes();)this._content.firstChild&&this._content.removeChild(this._content.firstChild);else this._content=l.create("div","maplibregl-popup-content",this._container);return this._content.appendChild(e),this._createCloseButton(),this._update(),this._focusFirstElement(),this}addClassName(e){return this._container&&this._container.classList.add(e),this}removeClassName(e){return this._container&&this._container.classList.remove(e),this}setOffset(e){return this.options.offset=e,this._update(),this}toggleClassName(e){if(this._container)return this._container.classList.toggle(e)}setSubpixelPositioning(e){this.options.subpixelPositioning=e;}_createCloseButton(){this.options.closeButton&&(this._closeButton=l.create("button","maplibregl-popup-close-button",this._content),this._closeButton.type="button",this._closeButton.innerHTML="&#215;",this._closeButton.addEventListener("click",this._onClose));}_onMouseUp=e=>{this._update(e.point);};_onMouseMove=e=>{this._update(e.point);};_onDrag=e=>{this._update(e.point);};_update=e=>{let t=this._lngLat||this._trackPointer;if(!this._map||!t||!this._content)return;if(!this._container){if(this._container=l.create("div","maplibregl-popup",this._map.getContainer()),this._tip=l.create("div","maplibregl-popup-tip",this._container),this._container.appendChild(this._content),this.options.className)for(let p of this.options.className.split(" "))this._container.classList.add(p);this._closeButton&&this._closeButton.setAttribute("aria-label",this._map._getUIString("Popup.Close")),this._trackPointer&&this._container.classList.add("maplibregl-popup-track-pointer");}if(this.options.maxWidth&&this._container.style.maxWidth!==this.options.maxWidth&&(this._container.style.maxWidth=this.options.maxWidth),this._map.transform.renderWorldCopies&&!this._trackPointer?this._lngLat=Le(this._lngLat,this._flatPos,this._map.transform):this._lngLat=this._lngLat?.wrap(),this._trackPointer&&!e)return;let i=this._flatPos=this._pos=this._trackPointer&&e?e:this._map.project(this._lngLat);this._map.terrain&&(this._flatPos=this._trackPointer&&e?e:this._map.transform.locationPoint(this._lngLat));let n=this.options.anchor,s=Pe(this.options.offset);if(!n){let p=this._container.offsetWidth,g=this._container.offsetHeight,T;i.y+s.bottom.y<g?T=["top"]:i.y>this._map.transform.height-g?T=["bottom"]:T=[],i.x<p/2?T.push("left"):i.x>this._map.transform.width-p/2&&T.push("right"),T.length===0?n="bottom":n=T.join("-");}let a=i.add(s[n]);this.options.subpixelPositioning||(a=a.round()),l.setTransform(this._container,`${me[n]} translate(${a.x}px,${a.y}px)`),ge(this._container,n,"popup");};_focusFirstElement(){if(!this.options.focusAfterOpen||!this._container)return;let e=this._container.querySelector(xe);e&&e.focus();}_onClose=()=>{this.remove();}};function Pe(o){if(o)if(typeof o=="number"){let e=Math.round(Math.abs(o)/Math.SQRT2);return {center:new u(0,0),top:new u(0,o),"top-left":new u(e,e),"top-right":new u(-e,e),bottom:new u(0,-o),"bottom-left":new u(e,-e),"bottom-right":new u(-e,-e),left:new u(o,0),right:new u(-o,0)}}else if(o instanceof u||Array.isArray(o)){let e=u.convert(o);return {center:e,top:e,"top-left":e,"top-right":e,bottom:e,"bottom-left":e,"bottom-right":e,left:e,right:e}}else return {center:u.convert(o.center||[0,0]),top:u.convert(o.top||[0,0]),"top-left":u.convert(o["top-left"]||[0,0]),"top-right":u.convert(o["top-right"]||[0,0]),bottom:u.convert(o.bottom||[0,0]),"bottom-left":u.convert(o["bottom-left"]||[0,0]),"bottom-right":u.convert(o["bottom-right"]||[0,0]),left:u.convert(o.left||[0,0]),right:u.convert(o.right||[0,0])};else return Pe(new u(0,0))}var W=class{#e;#t;#i;_undoButton;_deleteButton;_saveButton;_container;constructor(e){this.#e=e,this._container=void 0,this.#i=!1,this.#s().then(()=>{this.#r(),this.#n();});}#n(){this.#e.mode?.addObserver(this.#o);}#o=e=>{let{store:t}=this.#e,{type:i,data:n}=e;i==="MODE_CHANGED"&&!n&&this.hidePanel(),i==="MODE_CHANGED"&&n&&t.tail?.val&&this.setPanelLocation({lat:t.tail?.val?.lat,lng:t.tail?.val?.lng});};#s=async()=>{try{this.#t=new j({offset:16,closeButton:!1,closeOnClick:!1,closeOnMove:!1,anchor:"bottom"});}catch(e){console.error("POPUP LOAD ERROR",e);}};#r=()=>{let{store:e}=this.#e;this.createPanel(),e.tail?.val&&this.setPanelLocation({lat:e.tail?.val?.lat,lng:e.tail?.val?.lng});};setPanelLocation=e=>{let{map:t}=this.#e;this.#i&&(this.#i=!1,this.showPanel()),this._container&&this.#t&&this.#t.setLngLat(e).setDOMContent(this._container).addTo(t);};hidePanel=()=>{!this.#i&&(this.#t?.addClassName("hide-panel"),this.#i=!0);};showPanel=()=>{this.#t?.removeClassName("hide-panel"),this.#i=!1;};onPointRemove=e=>{e?this.setPanelLocation(e):this.hidePanel();};removePanel=()=>{this._container&&l.remove(this._container),this.#t?.remove();};createButton=(e,t,i,n)=>{let s=l.create("button",`panel-button panel-button-${i}`,n);return s.setAttribute("data-type",e),s.setAttribute("aria-label",t),l.create("span",`icon ${e} icon-${i}`,s),s};createPanel=()=>{let{options:e}=this.#e,{locale:t}=e,{undo:i,delete:n,save:s}=e.panel.buttons,a=e.panel.size,p=document.querySelector(".maplibregl-popup-content"),g=l.create("div","dashboard",p);i.visible&&(this._undoButton=this.createButton("undo",t.undo,a,g)),n.visible&&(this._deleteButton=this.createButton("delete",t.delete,a,g)),s.visible&&(this._saveButton=this.createButton("save",t.save,a,g)),this._container=g;}};var V={type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[]}}]},K={type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"LineString",coordinates:[]}}]},Me={type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Point",coordinates:[]}}]},r={LineDynamicLayer:"mdl-line-dynamic-layer",LineLayer:"mdl-line-layer",LineLayerTransparent:"mdl-line-layer-transparent",LineLayerBreak:"mdl-line-break-layer",PolygonLayer:"mdl-polygon-layer",PointsLayer:"mdl-points-layer",SinglePointLayer:"mdl-single-point-layer",FirstPointLayer:"mdl-first-point-layer"},d={LineDynamicSource:"mdl-line-dynamic-source",LineSourceBreak:"mdl-line-source-break",LineSource:"mdl-line-source",PolygonSource:"mdl-polygon-source",PointsSource:"mdl-points-source",SinglePointSource:"mdl-single-point-source"},B={large:6.5,default:5.5},$={large:"#FF6464",default:"#666666"},w={"circle-radius":B.default,"circle-color":"#FEFFFE","circle-stroke-color":$.default,"circle-stroke-width":3},D={"circle-radius":B.large,"circle-color":"#FEFFFE","circle-stroke-color":"#666666","circle-stroke-width":3},U={"fill-color":"grey","fill-opacity":.4},N={"line-width":3,"line-color":"grey","line-opacity":.7},A={"circle-radius":B.default,"circle-color":"#FEFFFE","circle-stroke-color":"#666666","circle-stroke-width":3},F={"line-width":3,"line-color":"#FF6464","line-dasharray":[3,3]},Z=o=>[{id:r.SinglePointLayer,source:d.SinglePointSource,type:"circle",paint:o.layersPaint.onLinePoint,layout:{visibility:"none"}},{id:r.PolygonLayer,source:d.PolygonSource,type:"fill",paint:o.layersPaint.polygon,layout:{visibility:"none"}},{id:r.LineDynamicLayer,source:d.LineDynamicSource,type:"line",paint:o.layersPaint.line,layout:{visibility:"none"}},{id:r.LineLayer,source:d.LineSource,type:"line",paint:o.layersPaint.line,layout:{visibility:"visible"}},{id:r.LineLayerTransparent,source:d.LineSource,type:"line",paint:{"line-width":4,"line-color":"transparent"}},{id:r.LineLayerBreak,source:d.LineSourceBreak,type:"line",paint:o.layersPaint.breakLine,layout:{visibility:"none"}},{id:r.PointsLayer,source:d.PointsSource,type:"circle",paint:o.layersPaint.points,filter:["==",["get","isFirst"],!1]},{id:r.FirstPointLayer,source:d.PointsSource,type:"circle",paint:o.layersPaint.firstPoint,filter:["==",["get","isFirst"],!0]}];var E=class{static#e=0;static#t=e=>{e.setPaintProperty(r.FirstPointLayer,"circle-radius",B.large),e.setPaintProperty(r.FirstPointLayer,"circle-stroke-color",$.large);};static#i=e=>{e.setPaintProperty(r.FirstPointLayer,"circle-radius",B.default),e.setPaintProperty(r.FirstPointLayer,"circle-stroke-color",$.default);};static togglePointCircleRadius=(e,t)=>{t==="large"?this.#t(e):this.#i(e);};static removeTransparentLine=e=>{e.removeLayer(r.LineLayerTransparent);};static addTransparentLine=(e,t)=>{if(e.getLayer(r.LineLayerTransparent))return;let n=Z(t).find(s=>s.id===r.LineLayerTransparent);n&&e.addLayer(n);};static isDoubleClick(){let t=Date.now();return t-this.#e<=400?(this.#e=t,!0):(this.#e=t,!1)}};var v=class{static isFeatureTriggered(e,t){return e.target.queryRenderedFeatures(e.point,{layers:t}).some(n=>t.includes(n.layer.id))}static getPixelCoordinates=(e,t)=>{let{lat:i,lng:n}=t;return e.project([n,i])};static queryPointId=(e,t)=>e.queryRenderedFeatures(t,{layers:[r.PointsLayer,r.FirstPointLayer]})?.[0]?.properties.id},_=class{static#e(e){let t=[],i=e.head,n=new Set;for(;i!==null;){if(n.has(i.val?.id)){e.head&&e.head.val&&t.push([e.head.val.lng,e.head.val.lat]);break}n.add(i.val?.id),i.val&&t.push([i.val.lng,i.val.lat]),i=i.next;}return t}static getAllLines(e){let t=this.#e(e);return {type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"LineString",coordinates:t}}]}}static getLine(e,t){return {type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"LineString",coordinates:[e,t]}}]}}static getPolygon(e){let t=this.#e(e);return {type:"FeatureCollection",features:[{type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[t]}}]}}static getPoints(e){let t=e.head,i=[],n=new Set;for(;t!==null&&!n.has(t.val?.id);){if(t.val){let s=t.val,a=t.val.id===e.head?.val?.id;i.push({type:"Feature",properties:{id:s.id,lat:s.lat,lng:s.lng,isFirst:a},geometry:{type:"Point",coordinates:[s.lng,s.lat]}});}n.add(t.val?.id),t=t.next;}return {type:"FeatureCollection",features:i}}},m=class o{static getGeometryIndex=(e,t)=>{let i=e.head,n=0;for(;i!==null;){if(i.val?.id===t)return n;n++,i=i.next;}return -1};static isFirstPoint(e){let t=e.target,i=e.point;return !!t.queryRenderedFeatures(i,{layers:[r.FirstPointLayer]}).length}static distance=(e,t)=>Math.sqrt((e.x-t.x)**2+(e.y-t.y)**2);static checkIfPointIsOnLine=(e,t,i)=>{let s=this.distance(e,t),a=this.distance(e,i),p=this.distance(i,t);return Math.abs(a+p-s)<.1};static isClosedGeometry=e=>e.tail?.next===e.head;static breakGeometry=(e,t)=>{if(!e.head)return;let i=e.head,n=e.tail;do{if(i?.val?.id===t){i!==e.head&&(n.next=i.next,e.head=i,e.tail=n),e.tail.next=null;return}n=i,i=i.next;}while(i!==e.head)};static closeGeometry=(e,t)=>{e.tail&&(e.tail.next=e.head),t.setClosedGeometry(!0);};static canCloseGeometry=e=>e.size>2&&!this.isClosedGeometry(e);static canBreakClosedGeometry=e=>e.size<=2;static switchToLineModeIfCan=e=>{let{mode:t,store:i,tiles:n,map:s}=e;o.canBreakClosedGeometry(i)&&(i.tail&&i.tail.val&&(i.tail.next=null),t.reset(),E.togglePointCircleRadius(s,"default"),n.renderPolygon(V));}},C=()=>{if("crypto"in window&&"randomUUID"in window.crypto)return window.crypto.randomUUID();function o(){return "0123456789abcdef"[Math.floor(Math.random()*16)]}function e(n){let s="";for(let a=0;a<n;a++)s+=o();return s}function t(n){let s=n===0,a=n===4;return s?8:a?12:4}let i=[];for(let n=0;n<5;n++)i.push(e(t(n)));return i.join("-")},O=(o,e)=>{let t,i=!0;function n(){i&&t&&(o(...t),t=null,i=!1,setTimeout(()=>{i=!0,n();},e));}return function(...s){t=s,n();}};var R=class{#e;#t;#i;#n;constructor(e){this.#e=e,this.#o(),this.render();}#o(){this.#s(),this.#r(),this.#a(r.LineLayer,r.SinglePointLayer),this.#a(r.LineLayerTransparent,r.SinglePointLayer),this.#a(r.LineLayerTransparent,r.FirstPointLayer),this.#a(r.LineLayerTransparent,r.PointsLayer),this.#a(r.PolygonLayer,r.LineLayer);}#s=()=>{let{map:e}=this.#e;Object.values(d).forEach(t=>{e.getSource(t)||e.addSource(t,{type:"geojson",data:{type:"FeatureCollection",features:[]},promoteId:"id"});});};#r=()=>{let{map:e,mode:t,options:i}=this.#e;Z(i).forEach(a=>{e.getLayer(a.id)||e.addLayer(a);});let s=e.getLayoutProperty(r.PolygonLayer,"visibility")==="none";t.getMode()==="polygon"&&s&&e.setLayoutProperty(r.PolygonLayer,"visibility","visible");};#a=(e,t)=>{let{map:i}=this.#e,n=i.getLayer(e),s=i.getLayer(t);n&&s&&i.moveLayer(e,t);};#l=()=>{let{map:e}=this.#e;Object.values(d).forEach(t=>{e.getSource(t)&&e.removeSource(t);});};#c=()=>{let{map:e}=this.#e;Object.values(r).forEach(t=>{e.getLayer(t)&&e.removeLayer(t);});};removeTiles=()=>{this.#c(),this.#l();};renderPoints=e=>{let{map:t}=this.#e,i=t.getSource(d.PointsSource);i&&i.setData(e);};renderLines=(e,t)=>{let{map:i}=this.#e,n=i.getSource(t);n&&n.setData(e);};renderPolygon=e=>{let{map:t}=this.#e,i=t.getSource(d.PolygonSource);i&&i.setData(e);};render=()=>{let{mode:e,options:t,store:i}=this.#e,n=_.getPoints(i),s=_.getAllLines(i);if(this.#t=n,this.#i=s,this.renderPoints(n),this.renderLines(s,d.LineSource),t.modes.polygon.visible&&e.isPolygon()){let p=_.getPolygon(i);this.#n=p,this.renderPolygon(p);}};#h=(e,t)=>{if(this.#n.features[0].geometry.coordinates[0][e]=[t.lng,t.lat],e===0){let n=this.#n.features[0].geometry.coordinates[0]?.length-1;this.#n.features[0].geometry.coordinates[0][n]=[t.lng,t.lat];}this.renderPolygon(this.#n);};#p=(e,t)=>{let{mode:i}=this.#e;this.#i.features[0].geometry.coordinates[e]=[t.lng,t.lat];let n=e===0;if(this.#i&&i.getClosedGeometry()&&n){let a=this.#i.features[0].geometry.coordinates?.length-1;this.#i.features[0].geometry.coordinates[a]=[t.lng,t.lat];}this.renderLines(this.#i,d.LineSource);};renderOnMouseMove=(e,t)=>{let{mode:i,options:n}=this.#e;this.#t.features[e].geometry.coordinates=[t.lng,t.lat],this.renderPoints(this.#t),this.#p(e,t),n.modes.polygon.visible&&i.isPolygon()&&this.#h(e,t);};resetGeometries=()=>{this.renderPoints(Me),this.renderLines(K,d.LineSource),this.renderPolygon(V);}};var Te=8,we=8,k=class{_container;_label;constructor(){this._container=void 0;}create=e=>{let t=l.create("div","popup-container",document.body),i=l.create("span",`popup-text popup-text-${e.placement}`,t);return i.textContent=e.label,this._container=t,this._label=i,this};#e=()=>{!this._label?.classList.value.includes("popup-text-active")&&this._label?.classList.add("popup-text-active");};#t=()=>this._label?{width:this._label.clientWidth,height:this._label.clientHeight}:{width:0,height:0};#i=e=>{let{bottom:t,left:i}=e.target.getBoundingClientRect(),{width:n,height:s}=this.#t();return {x:i-we-n,y:t-s-2}};#n=e=>{let{bottom:t,left:i,right:n}=e.target.getBoundingClientRect(),{width:s}=this.#t();return {x:(n-i)/2+i-s/2,y:t+Te}};getPosition=(e,t)=>t==="left"?this.#i(e):this.#n(e);setPosition=e=>{let{x:t,y:i}=e;this._container&&(this._container.style.left=`${t}px`,this._container.style.top=`${i}px`),this.#e();};remove=()=>{this._container&&l.remove(this._container);}};var P={AUTO:"auto",DEFAULT:"default",POINTER:"pointer",CROSSHAIR:"crosshair",MOVE:"move",HELP:"help",GRAB:"grab",GRABBING:"grabbing"};var J=(o,e)=>{for(let[t,i]of Object.entries(e))l.manageEventListener("add",o,t,i);},X=(o,e)=>{for(let[t,i]of Object.entries(e))l.manageEventListener("remove",o,t,i);},be=(o,e)=>{let t=e.locale.line,i=e.locale.polygon,n=e.locale.break;return {line:t,polygon:i,break:n}[o]};var L={DOUBLECLICK:"mdl:doubleclick",POINTENTER:"mdl:pointenter",POINTLEAVE:"mdl:pointleave",MOVEEND:"mdl:moveend",ADD:"mdl:add",UNDO:"mdl:undo",REMOVEALL:"mdl:removeall",SAVE:"mdl:save",BREAK:"mdl:break",MODECHANGED:"mdl:modechanged"};var y={panel:{size:"medium",buttons:{undo:{visible:!0},delete:{visible:!0},save:{visible:!0,clearOnSave:!0}}},modes:{initial:null,line:{visible:!0,closeGeometry:!0},polygon:{visible:!0},breakGeometry:{visible:!0}},layersPaint:{onLinePoint:D,firstPoint:w,points:A,line:N,polygon:U,breakLine:F},initial:null,dynamicLine:!0,locale:{save:"Save",delete:"Delete all",undo:"Undo",line:"Line",polygon:"Polygon",break:"Split",closeLine:"Close line",createPolygon:"Create polygon"}};var f=class{static addPoint(e,t,i){t.fire(L.ADD,{id:e.id,coordinates:{lat:e.lat,lng:e.lng},total:e.total,timestamp:Date.now(),mode:{geometry:i.getMode(),closedGeometry:i.getClosedGeometry()}});}static movePoint(e,t){t.fire(L.MOVEEND,{id:e.id,start_coordinates:{lat:e.start.lat,lng:e.start.lng},end_coordinates:{lat:e.end.lat,lng:e.end.lng},total:e.total,timestamp:Date.now()});}static pointDoubleClick(e,t){t.fire(L.DOUBLECLICK,{id:e.id,coordinates:{lat:e.lat,lng:e.lng},total:e.total,timestamp:Date.now()});}static enterPoint(e,t){t.fire(L.POINTENTER,{id:e.id,coordinates:{lat:e.lat,lng:e.lng},total:e.total,timestamp:Date.now()});}static leavePoint(e,t){t.fire(L.POINTLEAVE,{id:e.id,coordinates:{lat:e.lat,lng:e.lng},total:e.total,timestamp:Date.now()});}static undoPoint(e,t,i){t.fire(L.UNDO,{originalEvent:i,id:e.id,coordinates:{lat:e.lat,lng:e.lng},total:e.total,timestamp:Date.now()});}static modeChanged(e,t){e.fire(L.MODECHANGED,{mode:t});}static removeAllPoints(e,t){e.fire(L.REMOVEALL,{originalEvent:t});}static onSaveClick(e,t,i){let{map:n,mode:s}=e;n.fire(L.SAVE,{originalEvent:i,timestamp:Date.now(),steps:t,mode:{geometry:s.getMode(),closedGeometry:s.getClosedGeometry()}});}static onLineBreak(e){e.fire(L.BREAK);}};var Q=class{#e;constructor(e){this.#e=e,this.#t();}#t=()=>{this.#e.mode.addObserver(this.#l);};removeConsumers=()=>{this.#e.mode.removeObserver(this.#l);};#i=()=>{let{_line:e,_polygon:t,_break:i}=this.#e.control;e?.classList.remove("control-button-active"),t?.classList.remove("control-button-active"),i?.classList.remove("control-button-active");};#n=e=>{this.#i(),e.classList.add("control-button-active");};#o=e=>{let{data:t}=e,{_line:i,_polygon:n,_break:s}=this.#e.control,{mode:a}=this.#e;if(f.modeChanged(this.#e.map,t),!(!i||!n||!s)){switch(t){case"line":this.#n(i);break;case"polygon":this.#n(n);break;}t?a.getClosedGeometry()&&this.#r(s):this.#s(s);}};#s=e=>{e.setAttribute("disabled","true"),e.setAttribute("aria-disabled","true");};#r=e=>{e.removeAttribute("disabled"),e.removeAttribute("aria-disabled");};#a=e=>{let{data:t}=e,{_break:i,_line:n,_polygon:s}=this.#e.control,{mode:a}=this.#e;t?(i&&this.#r(i),a.getMode()==="polygon"&&n&&this.#s(n),a.getMode()==="line"&&s&&this.#s(s)):(i&&this.#s(i),a.getMode()==="polygon"&&n&&this.#r(n),a.getMode()==="line"&&s&&this.#r(s));};#l=e=>{let{type:t,data:i}=e;if(t==="MODE_CHANGED"&&this.#o(e),t==="CLOSED_GEOMETRY_CHANGED"&&this.#a(e),t==="BREAK_CHANGED"&&i){let{_break:n}=this.#e.control;this.#n(n),f.modeChanged(this.#e.map,"break");}}};var ee=class{#e;#t;#i;constructor(e){this.#e=e,this.#i=new Q(e),this.#t=new k,this.#n();}#n(){let{control:e}=this.#e;if(e){let t={mouseenter:this.onButtonEnter,mouseleave:this.onButtonLeave};e._line&&J(e._line,{...t,click:this.onLineClick}),e._polygon&&J(e._polygon,{...t,click:this.onPolygonClick}),e._break&&J(e._break,{...t,click:this.onBreakClick});}}#o(){let{control:e}=this.#e;if(e){let t={mouseenter:this.onButtonEnter,mouseleave:this.onButtonLeave};e._line&&X(e._line,{...t,click:this.onLineClick}),e._polygon&&X(e._polygon,{...t,click:this.onPolygonClick}),e._break&&X(e._break,{...t,click:this.onBreakClick});}}remove(){this.#i.removeConsumers(),this.#o(),this.#t.remove();}onButtonEnter=e=>{let{options:t}=this.#e,i=e.target.getAttribute("data-type");if(i){let n=be(i,t),s="left";this.#t.create({label:n,placement:s}).setPosition(this.#t.getPosition(e,s));}};onButtonLeave=()=>{this.#t.remove();};#s=()=>{let{control:e}=this.#e;e._line?.classList.remove("control-button-active"),e._polygon?.classList.remove("control-button-active"),e._break?.classList.remove("control-button-active");};#r=()=>{let{map:e,mode:t}=this.#e;t.getMode()||e.fire("mode:initialize");};onLineClick=()=>{let{map:e,mode:t,tiles:i,control:n}=this.#e;this.#r(),this.#s(),t.getMode()==="line"&&!t.getBreak()?(t.setMode(null),e.fire("mode:remove"),i.resetGeometries()):(n._line?.classList.add("control-button-active"),t.setMode("line"),i.render());};onPolygonClick=()=>{let{map:e,mode:t,tiles:i,control:n}=this.#e;this.#r(),this.#s(),t.getMode()==="polygon"&&!t.getBreak()?(t.setMode(null),e.fire("mode:remove"),e.setLayoutProperty(r.PolygonLayer,"visibility","visible"),i.resetGeometries()):(n._polygon?.classList.add("control-button-active"),t.setMode("polygon"),i.render());};onBreakClick=()=>{let{map:e,mode:t,control:i}=this.#e;t.getBreak()&&(t.setMode(null),e.fire("mode:remove")),this.#s(),i._break?.classList.add("control-button-active"),t.setBreak(!0),e.getCanvasContainer().style.cursor=P.POINTER;}};var x=class{observers;constructor(){this.observers=new Set;}addObserver(e){this.observers.add(e);}removeObserver(e){this.observers.delete(e);}unsubscribe(){this.observers.clear();}notify(e){this.observers.forEach(t=>t(e));}};var G={EMPTY_INITIAL_STATE:"You passed an empty initial array in the options. Please either remove the 'initial' property or include at least one element in the array.",MISSING_IDS:"You set 'generateId' to false but did not provide IDs for all steps. Please ensure all steps have IDs or set 'generateId' to true.",NOT_ENOUGH_POINTS_TO_CLOSE:"At least three points are required to close a polygon or a line. Please add more points or set 'closeGeometry' to false.",FIRST_LAST_POINT_NOT_EQUAL:"The first and last points of a polygon or a closed linestring must be the same. Please ensure the first and last points are equal or set 'closeGeometry' to false."};var te=class{val;next;constructor(e=null,t=null){this.val=e,this.next=t;}},q=class extends x{head;tail;size;constructor(e){super();let t=b.initStore(e);this.head=t?t.head:null,this.tail=t?t.tail:null,this.size=t?t.size:0;}push(e){let t=new te(e);this.head?this.tail&&(this.tail.next=t,this.tail=t):this.head=this.tail=t,this.size++,this.pingConsumers();}insert(e,t){let i=new te(e,t.next);this.tail===t&&this.head===t.next&&(this.tail=i),t.next=i,this.size++;}findStepById(e){let t=this.head,i=new Set;for(;t!==null&&!i.has(t);){if(t.val&&t.val.id===e)return t.val;i.add(t),t=t.next;}return null}removeStepById(e){if(!this.head)return null;let t=this.head,i=null;for(;t!==null;){if(t?.val?.id===e)return t===this.head?(this.head=t.next,this.tail&&(this.tail.next=t.next)):i.next=t.next,t===this.tail&&(this.tail=i),this.size--,this.pingConsumers(),t;i=t,t.next&&(t=t.next);}return null}reset(){this.head=null,this.tail=null,this.size=0,this.pingConsumers();}pingConsumers=()=>{this.notify({type:"STORE_CHANGED",data:{head:this.head,tail:this.tail,size:this.size}});}},b=class o{static isLastPoint=(e,t)=>e.tail?.val?.id===t;static initStore(e){if(!e?.initial)return null;if(e&&e.initial&&!e.initial.steps.length)throw new Error(G.EMPTY_INITIAL_STATE);if(e&&e.initial.steps){let{steps:n,closeGeometry:s,generateId:a}=e.initial;return o.fromArray(n,s,a)}return null}static#e=e=>e.map(t=>({...t,id:C()}));static buildStepSequence(e){let t=new q;return e.forEach(i=>{t.push(i);}),t}static fromArray(e,t,i){let n=i?this.#e(e):e,s=this.buildStepSequence(n);return t&&s.tail&&(s.tail.next=s.head),s}static toArray(e){if(!e)return [];let t=new Set,i=[],n=e;for(;n!==null&&!t.has(n);)t.add(n),i.push(n.val),n=n.next;return i}};var ie=class{#e;#t;constructor(e){this.#e=e,this.#t=new k;}initEvents(){let{panel:e}=this.#e;e&&(l.manageEventListener("add",e?._undoButton,"click",this.#o),l.manageEventListener("add",e?._undoButton,"mouseenter",this.onMouseEnter),l.manageEventListener("add",e?._undoButton,"mouseleave",this.onMouseLeave)),e&&(l.manageEventListener("add",e?._deleteButton,"click",this.#n),l.manageEventListener("add",e?._deleteButton,"mouseenter",this.onMouseEnter),l.manageEventListener("add",e?._deleteButton,"mouseleave",this.onMouseLeave)),e&&(l.manageEventListener("add",e?._saveButton,"click",this.onSaveClick),l.manageEventListener("add",e?._saveButton,"mouseenter",this.onMouseEnter),l.manageEventListener("add",e?._saveButton,"mouseleave",this.onMouseLeave));}removeEvents(){let{panel:e}=this.#e;e&&e._undoButton&&(l.manageEventListener("remove",e._undoButton,"click",this.#o),l.manageEventListener("remove",e._undoButton,"mouseenter",this.onMouseEnter),l.manageEventListener("remove",e._undoButton,"mouseleave",this.onMouseLeave)),e&&e._deleteButton&&(l.manageEventListener("remove",e._deleteButton,"click",this.#n),l.manageEventListener("remove",e._deleteButton,"mouseenter",this.onMouseEnter),l.manageEventListener("remove",e._deleteButton,"mouseleave",this.onMouseLeave)),e&&e._saveButton&&(l.manageEventListener("remove",e._saveButton,"click",this.onSaveClick),l.manageEventListener("remove",e._saveButton,"mouseenter",this.onMouseEnter),l.manageEventListener("remove",e._saveButton,"mouseleave",this.onMouseLeave));}#i=e=>{let{options:t}=this.#e;return {undo:t.locale.undo,delete:t.locale.delete,save:t.locale.save}[e]};onMouseEnter=e=>{let t=e.target.getAttribute("data-type");if(t){let i=this.#i(t);this.#t.create({label:i,placement:"bottom"}).setPosition(this.#t.getPosition(e,"bottom"));}};onMouseLeave=()=>{this.#t.remove();};#n=e=>{let{tiles:t,mode:i,panel:n,store:s,map:a}=this.#e;s.reset(),n.hidePanel(),i.reset(),E.togglePointCircleRadius(a,"default"),this.#t.remove(),t.resetGeometries(),f.removeAllPoints(a,e);};#o=e=>{let{store:t,panel:i,map:n,tiles:s}=this.#e,a=t.tail?.val;t.removeStepById(a.id);let p={...a,total:t.size};f.undoPoint(p,n,e),m.switchToLineModeIfCan(this.#e),i?.onPointRemove(t.tail?.val),this.#t.remove(),requestAnimationFrame(s.render);};onSaveClick=e=>{let{store:t,options:i}=this.#e;f.onSaveClick(this.#e,b.toArray(t.head),e),this.#t.remove(),i.panel.buttons.save.clearOnSave&&this.#n(e);}};var M=class{static updatePointsData(e){let i=e.target.getSource(d.SinglePointSource);i&&i.setData({type:"Feature",geometry:{type:"Point",coordinates:[e.lngLat.lng,e.lngLat.lat]},properties:{}});}static setSinglePointVisible(e){e.target.setLayoutProperty(r.SinglePointLayer,"visibility","visible");}static setSinglePointHidden(e){let t=e.target;setTimeout(()=>{t.setLayoutProperty(r.SinglePointLayer,"visibility","none");},33);}static triggerPostPointAddition(e,t){let{panel:i,tiles:n,store:s,map:a}=t;m.canCloseGeometry(s)&&E.togglePointCircleRadius(a,"large"),i?.setPanelLocation(e.lngLat),n.render();}static addPointToMap=(e,t)=>{let{store:i,map:n,mode:s}=t,a={...e.lngLat,id:C()};i.push(a),f.addPoint({...a,total:i.size},n,s),this.triggerPostPointAddition(e,t);};static updateSelectedStepLatLng=(e,t)=>{t.lat=e.lngLat.lat,t.lng=e.lngLat.lng;}};var fe=(o,e)=>{let t=e.head,i=new Set;for(;t!==null&&!i.has(t);){if(t.next&&t.next.val&&t.val){let n=o.target,s=v.getPixelCoordinates(n,t.val),a=v.getPixelCoordinates(n,t.next.val),p=v.getPixelCoordinates(n,o.lngLat);if(m.checkIfPointIsOnLine(s,a,p))return t}i.add(t),t=t.next;}return null},_e=(o,e)=>{let t=fe(o,e);if(t){let i={...o.lngLat,id:C()};return e.insert(i,t),i}return null},Ce=(o,e)=>{let{store:t,tiles:i,panel:n}=e;t.tail?.val&&(n?.setPanelLocation(t.tail.val),M.setSinglePointHidden(o),i.render());},Se=o=>v.isFeatureTriggered(o,[r.PointsLayer,r.FirstPointLayer]);var Oe=15,ne=class{props;#e;#t;constructor(e){this.props=e,this.#e=null,this.#t=O(this.#n,Oe);}initBreakEvents=()=>{let{map:e}=this.props;e.on("click",r.LineLayerTransparent,this.#i),e.on("mouseenter",r.LineLayerTransparent,this.#t),e.on("mousemove",r.LineLayerTransparent,this.#t),e.on("mouseleave",r.LineLayerTransparent,this.#o);};removeBreakEvents=()=>{let{map:e}=this.props;e.off("click",r.LineLayerTransparent,this.#i),e.off("mouseenter",r.LineLayerTransparent,this.#t),e.off("mousemove",r.LineLayerTransparent,this.#t),e.off("mouseleave",r.LineLayerTransparent,this.#o);};hideBreakLine=()=>{let{map:e}=this.props;e.getLayoutProperty(r.LineLayerBreak,"visibility")!=="none"&&e.setLayoutProperty(r.LineLayerBreak,"visibility","none");};showBreakLine=()=>{let{map:e}=this.props;e.getLayoutProperty(r.LineLayerBreak,"visibility")!=="visible"&&e.setLayoutProperty(r.LineLayerBreak,"visibility","visible");};#i=()=>{let{store:e,mode:t,panel:i,map:n,tiles:s}=this.props,a=this.#e?.next?.val?.id;m.breakGeometry(e,a),e.tail?.val&&i.setPanelLocation({lat:e.tail?.val?.lat,lng:e.tail?.val?.lng}),this.#o(),n.setLayoutProperty(r.PolygonLayer,"visibility","none"),t.reset(),s.render(),f.onLineBreak(n);};#n=e=>{let{map:t,store:i}=this.props,n=fe(e,i);n?.val?.id!==this.#e?.val?.id&&(this.#e=n);let s=t.getSource(d.LineSourceBreak),a=[n?.val?.lng,n?.val?.lat],p=[n?.next?.val?.lng,n?.next?.val?.lat],g=_.getLine(a,p);g&&(s.setData(g),this.showBreakLine());};#o=()=>{setTimeout(()=>{this.hideBreakLine();},Oe+10);}};var De=10,oe=class{#e;#t;#i;#n;#o;#s;constructor(e){this.#e=e,this.#t=e.options.dynamicLine,this.#i=null,this.#n=null,this.#r(),this.#s=O(this.#p,De);}#r(){this.#e.store.addObserver(this.#l),this.#e.mode.addObserver(this.#c),this.#e.mouseEvents.addObserver(this.#a);}removeLine=()=>{this.hideDynamicLine();};removeConsumers=()=>{this.#e.store.removeObserver(this.#l),this.#e.mode.removeObserver(this.#c),this.#e.mouseEvents.removeObserver(this.#a);};#a=e=>{let{mode:t}=this.#e;if(!t.getClosedGeometry()&&(e.type==="lastPointMouseClick"&&e.data?(this.hideDynamicLine(),this.#t=!1):e.type==="lastPointMouseClick"&&!e.data&&(this.#t=!0),!!this.#t&&((e.type==="pointMouseEnter"||e.type==="lineMouseEnter")&&e.data&&this.hideDynamicLine(),(e.type==="pointMouseLeave"||e.type==="lineMouseLeave")&&e.data))){let{store:i}=this.#e;this.#i=i.tail?.val,this.#n=i.tail?.val,this.showDynamicLine();}};#l=e=>{let{store:t}=this.#e;switch(e.type){case"STORE_CHANGED":e.data.tail?.val&&!m.isClosedGeometry(t)&&(this.#i=e.data.tail?.val,this.showDynamicLine());break;}};#c=e=>{let{store:t}=this.#e;e.type==="CLOSED_GEOMETRY_CHANGED"&&(e.data&&this.hideDynamicLine(),!e.data&&t?.tail?.val&&(this.#i=t?.tail?.val,this.showDynamicLine()));};initDynamicEvents=()=>{let{map:e}=this.#e;e.on("click",this.#f),e.on("mousemove",this.#s),e.on(L.REMOVEALL,this.hideDynamicLine),e.on(L.UNDO,this.#m),e.on(L.DOUBLECLICK,this.#v);};removeEvents=()=>{let{map:e}=this.#e;e.off("click",this.#f),e.off("mousemove",this.#s),e.off(L.REMOVEALL,this.hideDynamicLine),e.off(L.UNDO,this.#m),e.off(L.DOUBLECLICK,this.#v);};hideDynamicLine=()=>{let{map:e,tiles:t}=this.#e;this.#i=null,this.#n=null,this.#o=null,e.off("mousemove",this.#s),t.renderLines(K,d.LineDynamicSource),e.setLayoutProperty(r.LineDynamicLayer,"visibility","none");};showDynamicLine=()=>{let{map:e}=this.#e,t=[this.#i?.lng,this.#i?.lat],i=[this.#n?.lng,this.#n?.lat];this.#o=_.getLine(t,i),e.setLayoutProperty(r.LineDynamicLayer,"visibility","visible"),this.#n&&this.#h({lng:this.#n?.lng,lat:this.#n?.lat}),e.on("mousemove",this.#s);};#h=e=>{if(!this.#o)return;let{tiles:t}=this.#e;this.#o.features[0].geometry.coordinates[1]=[e.lng,e.lat],t.renderLines(this.#o,d.LineDynamicSource);};#p=e=>{this.#h(e.lngLat);};#f=e=>{let{mode:t}=this.#e,i=v.isFeatureTriggered(e,[r.LineLayerTransparent,r.LineLayer]);i&&t.getBreak()&&(this.#n={lng:e.lngLat.lng,lat:e.lngLat.lat}),!i&&this.hideDynamicLine();};#m=e=>{let{store:t,mode:i}=this.#e;if(!i.getClosedGeometry()){let n=e.target.unproject({x:e.originalEvent.x,y:e.originalEvent.y});this.#n={lng:n.lng,lat:n.lat},this.#i=t.tail?.val,this.showDynamicLine();}};#v=e=>{let{store:t,mode:i}=this.#e;i.getClosedGeometry()||(this.#n={lng:e.coordinates.lng,lat:e.coordinates.lat},this.#i=t.tail?.val,this.showDynamicLine());}};var Ae=22,se=class{props;#e;#t;constructor(e){this.props=e,this.#e=!1,this.#t=null;}initEvents(){let{map:e}=this.props;e.on("click",r.LineLayerTransparent,this.#i),e.on("mousemove",r.LineLayerTransparent,this.#o),e.on("mouseenter",r.LineLayerTransparent,this.#s),e.on("mouseleave",r.LineLayerTransparent,this.#r);}removeEvents(){let{map:e}=this.props;e.off("click",r.LineLayerTransparent,this.#i),e.off("mousemove",r.LineLayerTransparent,this.#o),e.off("mouseenter",r.LineLayerTransparent,this.#s),e.off("mouseleave",r.LineLayerTransparent,this.#r);}#i=e=>{let{store:t,map:i,mode:n}=this.props;if(Se(e))return;let s=_e(e,t);s&&(f.addPoint({...s,total:t.size},i,n),Ce(e,this.props));};#n=e=>{M.setSinglePointVisible(e),e.target.getLayer(r.SinglePointLayer)&&M.updatePointsData(e);};#o=O(e=>{if(v.isFeatureTriggered(e,[r.PointsLayer,r.FirstPointLayer]))return;let{mouseEvents:t}=this.props;t.pointMouseDown||t.pointMouseEnter||(this.#t=e,!this.#e&&(this.#e=!0,requestAnimationFrame(()=>{this.#t&&(this.#n(this.#t),this.#e=!1);})));},Ae);#s=e=>{let{mouseEvents:t}=this.props;t.pointMouseDown||t.pointMouseEnter||v.isFeatureTriggered(e,[r.PointsLayer,r.FirstPointLayer])||(t.lineMouseEnter=!0,M.setSinglePointVisible(e));};#r=e=>{let{mouseEvents:t}=this.props;t.pointMouseDown||t.pointMouseEnter||(t.lineMouseLeave=!0,M.setSinglePointHidden(e));}};var re=class{props;#e;#t;#i;#n;constructor(e){this.props=e,this.#e=new ne(e),this.#t=new se(e),this.#i=null,this.#n="default";}init(){this.#o(),this.#s(),this.#r();}#o=()=>{window.innerWidth<=768||this.props.options.dynamicLine&&(this.#i=new oe(this.props));};#s(){!this.props.mode.getBreak()&&(this.#t.initEvents(),this.props.options.dynamicLine&&this.#i?.initDynamicEvents());}#r(){this.props.mode.addObserver(this.#h),this.props.mouseEvents.addObserver(this.#c);}remove(){this.#a(),this.#l();}#a(){this.props.mode.removeObserver(this.#h),this.props.mouseEvents.removeObserver(this.#c),this.props.options.dynamicLine&&this.#i?.removeConsumers();}#l(){this.#e.removeBreakEvents(),this.#t.removeEvents(),this.props.options.dynamicLine&&(this.#i?.removeEvents(),this.#i?.removeLine());}#c=e=>{let{type:t,data:i}=e,{mode:n}=this.props;if(!(!i||!n.getBreak()))switch(t){case"pointMouseDown":this.#e.removeBreakEvents(),this.#e.hideBreakLine();break;case"pointMouseUp":this.#e.initBreakEvents();break;}};#h=e=>{let{type:t,data:i}=e;t==="MODE_CHANGED"&&this.#n==="break"&&(this.#e.removeBreakEvents(),this.#t.initEvents(),this.#n="default"),t==="BREAK_CHANGED"&&i&&this.#n==="default"&&(this.#t.removeEvents(),this.#e.initBreakEvents(),this.#n="break");}};var ae=class{#e;#t;#i;constructor(e){this.#t=e,this.#e=!1,this.#i=new k,e.mode.addObserver(this.#n);}initEvents(){let{map:e}=this.#t;e.on("click",r.FirstPointLayer,this.#o),e.on("mouseenter",r.FirstPointLayer,this.#c),e.on("mouseleave",r.FirstPointLayer,this.#a),e.on("mouseup",r.FirstPointLayer,this.#r),e.on("mousedown",r.FirstPointLayer,this.#s);}removeEvents(){let{map:e}=this.#t;e.off("click",r.FirstPointLayer,this.#o),e.off("mouseenter",r.FirstPointLayer,this.#c),e.off("mouseleave",r.FirstPointLayer,this.#a),e.off("mouseup",r.FirstPointLayer,this.#r);}#n=e=>{let{map:t,store:i}=this.#t,{type:n,data:s}=e;n==="MODE_CHANGED"&&(s==="line"||s==="polygon"?t.on("click",r.FirstPointLayer,this.#o):t.off("click",r.FirstPointLayer,this.#o),m.canCloseGeometry(i)&&E.togglePointCircleRadius(t,"large"));};#o=()=>{let{store:e,map:t,mode:i,tiles:n}=this.#t;if(i.getMode()==="polygon"&&t.setLayoutProperty(r.PolygonLayer,"visibility","visible"),m.canCloseGeometry(e)){m.closeGeometry(e,i);let s=Object.assign({},e.head?.val,{id:C(),total:e.size});f.addPoint(s,t,i),E.togglePointCircleRadius(t,"default"),n.render();}};#s=()=>{this.#e=!0,this.#i.remove();};#r=()=>{this.#e=!1;};#a=()=>{let{mouseEvents:e}=this.#t;this.#e||(e.firstPointMouseLeave=!0,this.#i.remove());};#l=()=>{let{mode:e,options:t}=this.#t;return e.getMode()==="line"&&t.modes.line.closeGeometry?t.locale.closeLine:e.getMode()==="polygon"?t.locale.createPolygon:""};#c=e=>{let{mode:t,mouseEvents:i,store:n}=this.#t;if(!(t.getClosedGeometry()||this.#e)&&(i.firstPointMouseEnter=!0,m.canCloseGeometry(n))){let{x:s,y:a}=e.originalEvent;if(s&&a){this.#i.create({label:this.#l(),placement:"bottom"});let g=this.#i._label?this.#i._label.clientWidth/2:0;this.#i.setPosition({x:s-g,y:a+14});}}}};var le=class{#e;#t;#i;#n;#o;#s;#r;#a;constructor(e){this.#e=e,this.#t=void 0,this.#i=null,this.#n=null,this.#o=null,this.#s=new ae(e),this.#r=!1,this.#a=null;}#l=()=>{let{map:e}=this.#e;e.on("click",r.FirstPointLayer,this.#p),e.on("mouseenter",r.FirstPointLayer,this.#L),e.on("mouseleave",r.FirstPointLayer,this.#g),e.on("mousedown",r.FirstPointLayer,this.#d),e.on("mouseup",r.FirstPointLayer,this.#u),e.on("touchend",r.FirstPointLayer,this.#u),e.on("touchstart",r.FirstPointLayer,this.#d),this.#s.initEvents();};initEvents=()=>{let{map:e}=this.#e;e.on("click",this.#m),e.on("dblclick",this.#h),e.on("click",r.PointsLayer,this.#p),e.on("mouseenter",r.PointsLayer,this.#L),e.on("mouseleave",r.PointsLayer,this.#g),e.on("mousedown",r.PointsLayer,this.#d),e.on("mouseup",r.PointsLayer,this.#u),e.on("touchend",r.PointsLayer,this.#u),e.on("touchstart",r.PointsLayer,this.#d),this.#l();};#c=()=>{let{map:e}=this.#e;e.off("click",r.FirstPointLayer,this.#p),e.off("mouseenter",r.FirstPointLayer,this.#L),e.off("mouseleave",r.FirstPointLayer,this.#g),e.off("mousedown",r.FirstPointLayer,this.#d),e.off("mouseup",r.FirstPointLayer,this.#u),e.off("touchend",r.PointsLayer,this.#u),e.off("touchstart",r.PointsLayer,this.#d),this.#s.removeEvents();};removeEvents=()=>{let{map:e}=this.#e;e.off("click",this.#m),e.off("dblclick",this.#h),e.off("mousemove",this.#y),e.off("click",r.PointsLayer,this.#p),e.off("mouseenter",r.PointsLayer,this.#L),e.off("mouseleave",r.PointsLayer,this.#g),e.off("mousedown",r.PointsLayer,this.#d),e.off("mouseup",r.PointsLayer,this.#u),this.#c();};#h=e=>{e.preventDefault();};#p=e=>{let{store:t,tiles:i,panel:n,map:s,mouseEvents:a}=this.#e;E.isDoubleClick()&&this.#n&&(t.removeStepById(this.#n.id),n.onPointRemove(t.tail?.val),f.pointDoubleClick({...this.#n,total:t.size},this.#e.map),m.switchToLineModeIfCan(this.#e));let p=v.queryPointId(s,e.point);b.isLastPoint(t,p)&&(a.lastPointMouseClick=!0,a.lastPointMouseUp=!1),i.render();};#f=e=>v.isFeatureTriggered(e,[r.PointsLayer,r.FirstPointLayer,r.LineLayerTransparent,r.LineLayerBreak]);#m=e=>{let{mode:t,mouseEvents:i,map:n}=this.#e;t.getClosedGeometry()||this.#f(e)||(i.lastPointMouseClick&&(i.lastPointMouseClick=!1),n.getCanvasContainer().style.cursor="grab",M.addPointToMap(e,this.#e),M.setSinglePointHidden(e));};#v=e=>{e.originalEvent.buttons===0&&this.#u();};#E=e=>{let{tiles:t}=this.#e;t.renderOnMouseMove(this.#o,e.lngLat);};#y=O(e=>{this.#a=e,this.#r||(this.#r=!0,requestAnimationFrame(()=>{!this.#n||!this.#a||(M.updateSelectedStepLatLng(this.#a,this.#n),this.#v(this.#a),this.#E(this.#a),this.#r=!1);}));},15);#L=e=>{let{mouseEvents:t,map:i,store:n}=this.#e;if(t&&(t.pointMouseEnter=!0,t.pointMouseDown))return;M.setSinglePointHidden(e);let s=v.queryPointId(i,e.point);b.isLastPoint(n,s)&&(t.lastPointMouseEnter=!0,t.lastPointMouseLeave=!1);let a=n.findStepById(s);a&&(this.#i=a,f.enterPoint(Object.assign({},a,{total:n.size}),i));};#g=e=>{let{mouseEvents:t,store:i,map:n}=this.#e;if(t&&(t.pointMouseEnter=!1,e.originalEvent.buttons===0&&(t.pointMouseLeave=!0),t.pointMouseDown))return;let s=v.queryPointId(n,e.point);b.isLastPoint(i,s)&&(t.lastPointMouseEnter=!1,t.lastPointMouseLeave=!0),f.leavePoint(Object.assign({},this.#i,{total:i.size}),n);};#P=()=>{let{store:e,panel:t}=this.#e;this.#n&&b.isLastPoint(e,this.#n.id)&&t.hidePanel();};#M=e=>{let{store:t,map:i}=this.#e,n=v.queryPointId(i,e.point),s=t.findStepById(n);s&&(this.#n=s);};#d=e=>{e.preventDefault();let{mouseEvents:t,map:i,store:n}=this.#e;E.removeTransparentLine(i),this.#M(e),this.#P();let s=v.queryPointId(i,e.point);this.#o=m.getGeometryIndex(n,s),t&&(t.pointMouseDown=!0),this.#t=e.lngLat,i.on("mousemove",this.#y),i.on("touchmove",this.#y);};#u=()=>{let{mouseEvents:e,store:t,panel:i,map:n,options:s}=this.#e;e.pointMouseUp=!0,this.#n&&(b.isLastPoint(t,this.#n.id)&&t.tail?.val&&i?.setPanelLocation(t.tail.val),i?.showPanel(),f.movePoint({id:this.#n.id,total:t.size,end:{lat:this.#n.lat,lng:this.#n.lng},start:this.#t},n)),e&&(e.pointMouseDown=!1),E.addTransparentLine(n,s),n.off("mousemove",this.#y),n.off("touchmove",this.#y);}};var ce=class extends R{#e;#t;#i;#n;#o;constructor(e){super({...e}),this.#e=e,this.#t=new ie(e),this.#i=new ee(e),this.#n=new le(e),this.#o=new re(e),e.map.on("mode:initialize",this.#s),e.map.on("mode:remove",this.#r);}#s=()=>{this.#o.init(),this.#t?.initEvents(),this.#n?.initEvents();};#r=()=>{this.#t?.removeEvents(),this.#n?.removeEvents(),this.#o?.remove();};removeMapEventsAndConsumers=()=>{this.#t?.removeEvents(),this.#n?.removeEvents(),this.#i?.remove(),this.#o?.remove(),this.#e.map.off("mode:initialize",this.#s);}};var he=class{#e;_line;_polygon;_break;_container;constructor(e){this.#e=e.options,this._line=void 0,this._polygon=void 0,this._break=void 0,this._container=l.create("div","mapboxgl-ctrl mapboxgl-ctrl-group maplibregl-ctrl maplibregl-ctrl-group"),this.createControl(e);}createControlButton=(e,t,i,n)=>{let s=this.#e.panel.size,a=l.create("button",`control-button control-button-${s}`,this._container);return a.setAttribute("aria-label",t),a.setAttribute("data-type",e),i&&a.classList.add("control-button-active"),n&&(a.setAttribute("disabled","true"),a.setAttribute("aria-disabled","true")),l.create("span",`icon ${e} icon-${s}`,a),a};#t=e=>{let{mode:t,options:i}=e,n=this.#e.modes.line.visible,s=i.locale.line;n&&(this._line=this.createControlButton("line",s,t.getMode()==="line"));};#i=e=>{let{mode:t,options:i}=e,n=this.#e.modes.polygon.visible,s=i.locale.polygon;n&&(this._polygon=this.createControlButton("polygon",s,t.getMode()==="polygon"));};#n=e=>{let{mode:t,options:i}=e,n=this.#e.modes.breakGeometry.visible,s=i.locale.break;if(n){let p=!this.#e?.initial?.closeGeometry,g=t.getBreak();this._break=this.createControlButton("break",s,g,p);}};createControl=e=>{this.#t(e),this.#i(e),this.#n(e);};getContainer=()=>this._container};function Ie(o){return o.initial?.geometry?o.initial?.geometry:o.modes.initial?o.modes.initial:null}var pe=class extends x{#e;#t;#i;constructor(e){super(),this.#e=Ie(e),this.#t=!1,this.#i=e.initial?.closeGeometry??!1;}getMode=()=>this.#e;setMode=e=>{this.#e=e,this.setBreak(!1),this.notify({type:"MODE_CHANGED",data:e});};getBreak=()=>this.#t;setBreak=e=>{this.#t=e,this.notify({type:"BREAK_CHANGED",data:e});};getClosedGeometry=()=>this.#i;setClosedGeometry=e=>{this.#i=e,this.notify({type:"CLOSED_GEOMETRY_CHANGED",data:this.#i});};isPolygon=()=>this.#e==="polygon"&&this.#i;reset=()=>{this.setMode(this.getMode()),this.setClosedGeometry(!1);};pingConsumers=()=>{this.notify({type:"MODE_CHANGED",data:this.getMode()}),this.notify({type:"CLOSED_GEOMETRY_CHANGED",data:this.getClosedGeometry()});}};var ue=class{#e;#t;constructor(e){this.#e=e,this.#t=this.#e.map.getCanvasContainer(),this.#t.style.cursor=e.mode.getMode()?P.CROSSHAIR:P.AUTO,this.#i();}set=e=>{this.#t.style.cursor=e;};get=()=>this.#t.style.cursor;handleMouseLeave=()=>{let{mouseEvents:e,mode:t}=this.#e;if(!e.pointMouseDown){if(!t.getMode()){this.set(P.AUTO);return}t.getClosedGeometry()?this.set(P.AUTO):this.set(P.CROSSHAIR);}};handleFirstPointMouseEnter=()=>{let{mode:e,store:t}=this.#e;e.getClosedGeometry()&&this.set(P.MOVE),m.canCloseGeometry(t)&&this.set(P.POINTER);};#i(){let{mouseEvents:e}=this.#e;e.addObserver(this.#n);}removeConsumers(){let{mouseEvents:e}=this.#e;e.removeObserver(this.#n);}#n=e=>{let{mode:t,mouseEvents:i}=this.#e;if(t.getBreak())return;let{type:n,data:s}=e;if(s)switch(n){case"pointMouseDown":this.set(P.GRABBING);break;case"pointMouseUp":this.set(P.GRAB);break;case"pointMouseEnter":if(i.pointMouseDown)return;this.set(P.GRAB);break;case"pointMouseLeave":this.handleMouseLeave();break;case"lineMouseEnter":if(i.pointMouseDown)return;this.set(P.POINTER);break;case"lineMouseLeave":this.handleMouseLeave();break;case"firstPointMouseEnter":this.handleFirstPointMouseEnter();break;case"firstPointMouseLeave":this.handleMouseLeave();break;case"lastPointMouseEnter":this.set(P.POINTER);break;case"lastPointMouseLeave":this.handleMouseLeave();break;}}};var de=class extends x{#e;#t;#i;#n;#o;#s;#r;#a;#l;#c;#h;#p;constructor(){super(),this.#e=!1,this.#t=!1,this.#i=!1,this.#n=!1,this.#o=!1,this.#s=!1,this.#r=!1,this.#a=!1,this.#l=!1,this.#c=!1,this.#h=!1,this.#p=!1;}get firstPointMouseEnter(){return this.#e}set firstPointMouseEnter(e){this.#e=e,this.notify({type:"firstPointMouseEnter",data:e});}get firstPointMouseLeave(){return this.#t}set firstPointMouseLeave(e){this.#t=e,this.notify({type:"firstPointMouseLeave",data:e});}get lastPointMouseClick(){return this.#i}set lastPointMouseClick(e){this.#i=e,this.notify({type:"lastPointMouseClick",data:e});}get lastPointMouseUp(){return this.#n}set lastPointMouseUp(e){this.#n=e,this.notify({type:"lastPointMouseUp",data:e});}get lastPointMouseEnter(){return this.#o}set lastPointMouseEnter(e){this.#o=e,this.notify({type:"lastPointMouseEnter",data:e});}get lastPointMouseLeave(){return this.#s}set lastPointMouseLeave(e){this.#s=e,this.notify({type:"lastPointMouseLeave",data:e});}get pointMouseDown(){return this.#r}set pointMouseDown(e){this.#r=e,this.notify({type:"pointMouseDown",data:e});}get pointMouseUp(){return this.#a}set pointMouseUp(e){this.#a=e,this.notify({type:"pointMouseUp",data:e});}get pointMouseEnter(){return this.#l}set pointMouseEnter(e){this.#l=e,this.notify({type:"pointMouseEnter",data:e});}get pointMouseLeave(){return this.#c}set pointMouseLeave(e){this.#c=e,this.notify({type:"pointMouseLeave",data:e});}get lineMouseEnter(){return this.#h}set lineMouseEnter(e){this.#h=e,this.notify({type:"lineMouseEnter",data:e});}get lineMouseLeave(){return this.#p}set lineMouseLeave(e){this.#p=e,this.notify({type:"lineMouseLeave",data:e});}};var z=class{static allStepsHaveIds(e){return e.every(t=>"id"in t&&t.id!==void 0)}static checkIfMissingIds(e,t){let i=!t,n=!this.allStepsHaveIds(e);if(i&&n)throw new Error(G.MISSING_IDS)}static checkIfEnoughPointsToClose(e,t){if(t&&e.length<3)throw new Error(G.NOT_ENOUGH_POINTS_TO_CLOSE)}static checkIfPolygonIsClosed(e){let{closeGeometry:t,steps:i}=e;if(i){let n=i[0]?.lng,s=i[i.length-1]?.lng,a=i[0]?.lat,p=i[i.length-1]?.lat;if((n!==s||a!==p)&&t)throw new Error(G.FIRST_LAST_POINT_NOT_EQUAL)}}static checkInitialStepsOption(e){let{closeGeometry:t,generateId:i,steps:n}=e;this.checkIfMissingIds(n,i),this.checkIfEnoughPointsToClose(n,t),this.checkIfPolygonIsClosed(e);}static init(e){return e?{panel:Be(e),modes:Ne(e),layersPaint:Fe(e),initial:e.initial||y.initial,locale:Re(e),dynamicLine:e.dynamicLine??y.dynamicLine}:y}};function Be(o){return {size:o.panel?.size||y.panel.size,buttons:{undo:{visible:o.panel?.buttons?.undo?.visible??y.panel.buttons.undo.visible},delete:{visible:o.panel?.buttons?.delete?.visible??y.panel.buttons.delete.visible},save:{visible:o.panel?.buttons?.save?.visible??y.panel.buttons.save.visible,clearOnSave:o.panel?.buttons?.save?.clearOnSave??y.panel.buttons.save.clearOnSave}}}}function Ne(o){return {initial:o.modes?.initial||y.modes.initial,line:{visible:o?.modes?.line?.visible!==void 0?o.modes.line.visible:o?.initial?.geometry==="line"||y.modes.line.visible,closeGeometry:o?.modes?.line?.closeGeometry??o?.initial?.closeGeometry??y.modes.line.closeGeometry},polygon:{visible:o?.modes?.polygon?.visible!==void 0?o.modes.polygon.visible:o?.initial?.geometry==="polygon"||y.modes.polygon.visible},breakGeometry:{visible:o?.modes?.breakGeometry?.visible??y.modes.breakGeometry.visible}}}function Fe(o){return {onLinePoint:{"circle-radius":o.layersPaint?.onLinePoint?.["circle-radius"]||D["circle-radius"],"circle-color":o.layersPaint?.onLinePoint?.["circle-color"]||D["circle-color"],"circle-stroke-color":o.layersPaint?.onLinePoint?.["circle-stroke-color"]||D["circle-stroke-color"],"circle-stroke-width":o.layersPaint?.onLinePoint?.["circle-stroke-width"]||D["circle-stroke-width"],...o.layersPaint?.onLinePoint},firstPoint:{"circle-radius":o.layersPaint?.firstPoint?.["circle-radius"]||w["circle-radius"],"circle-color":o.layersPaint?.firstPoint?.["circle-color"]||w["circle-color"],"circle-stroke-color":o.layersPaint?.firstPoint?.["circle-stroke-color"]||w["circle-stroke-color"],"circle-stroke-width":o.layersPaint?.firstPoint?.["circle-stroke-width"]||w["circle-stroke-width"],...o.layersPaint?.firstPoint},points:{"circle-radius":o.layersPaint?.points?.["circle-radius"]||A["circle-radius"],"circle-color":o.layersPaint?.points?.["circle-color"]||A["circle-color"],"circle-stroke-color":o.layersPaint?.points?.["circle-stroke-color"]||A["circle-stroke-color"],"circle-stroke-width":o.layersPaint?.points?.["circle-stroke-width"]||A["circle-stroke-width"],...o.layersPaint?.points},line:{"line-width":o.layersPaint?.line?.["line-width"]||N["line-width"],"line-color":o.layersPaint?.line?.["line-color"]||N["line-color"],"line-opacity":o.layersPaint?.line?.["line-opacity"]||N["line-opacity"],...o.layersPaint?.line},polygon:{"fill-color":o.layersPaint?.polygon?.["fill-color"]||U["fill-color"],"fill-opacity":o.layersPaint?.polygon?.["fill-opacity"]||U["fill-opacity"],...o.layersPaint?.polygon},breakLine:{"line-width":o.layersPaint?.breakLine?.["line-width"]||F["line-width"],"line-color":o.layersPaint?.breakLine?.["line-color"]||F["line-color"],"line-dasharray":o.layersPaint?.breakLine?.["line-dasharray"]||F["line-dasharray"],...o.layersPaint?.breakLine}}}function Re(o){return {save:o.locale?.save??y.locale.save,delete:o.locale?.delete??y.locale.delete,undo:o.locale?.undo??y.locale.undo,line:o.locale?.line??y.locale.line,polygon:o.locale?.polygon??y.locale.polygon,break:o.locale?.break??y.locale.break,closeLine:o.locale?.closeLine??y.locale.closeLine,createPolygon:o.locale?.createPolygon??y.locale.createPolygon}}var ve=class o{#e;#t;#i;#n;#o;#s;#r;#a;#l;static#c=null;static#h=!1;constructor(e){if(this.#n=z.init(e),this.#n.initial&&z.checkInitialStepsOption(this.#n.initial),o.#h)throw new Error("Use 'DrawLibre.getInstance()' instead of 'new DrawLibre()'.");o.#h=!0,this.#t=void 0,this.#i=void 0,this.#o=void 0,this.#s=void 0,this.#r=void 0,this.#l=void 0,this.#a=void 0;}static getInstance(e){return o.#c||(o.#c=new o(e)),o.#c}onAdd(e){this.#t=new q(this.#n),this.#i=new pe(this.#n),this.#r=new W({map:e,mode:this.#i,options:this.#n,store:this.#t}),this.#s=new R({map:e,store:this.#t,options:this.#n,mode:this.#i});let t=new he({options:this.#n,mode:this.#i});return this.#l=new de,this.#a=new ue({map:e,mode:this.#i,mouseEvents:this.#l,store:this.#t}),this.#o=new ce({map:e,store:this.#t,options:this.#n,panel:this.#r,control:t,mode:this.#i,tiles:this.#s,mouseEvents:this.#l}),this.#i.getMode()&&e.fire("mode:initialize"),this.#i.pingConsumers(),this.#e=t.getContainer(),this.#e}onRemove(){this.#a?.removeConsumers(),this.#s?.removeTiles(),this.#o?.removeMapEventsAndConsumers(),this.#r?.removePanel(),this.#t?.reset(),this.#i?.unsubscribe(),this.#e&&l.remove(this.#e);}setSteps=e=>{if(Array.isArray(e))e.forEach(t=>{let i={...t,id:t.id||C()};this.#t?.push(i);});else throw new Error("Invalid argument. Expected an array of steps.");this.#s?.render();};findStepById=e=>this.#t?.findStepById(e);getAllSteps=(e="array")=>{if(e==="array"&&this.#t)return b.toArray(this.#t.head);if(e==="linkedlist")return this.#t;throw new Error("Invalid type specified. Use 'array' or 'linkedlist'.")};setOptions=e=>{this.#n=e(this.#n);};removeAllSteps=()=>{this.#t?.reset(),this.#r?.removePanel(),this.#s?.render();}};
2
-
3
- export { ve as default };