@defra/interactive-map 0.0.39-alpha → 0.0.40-alpha

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.
Files changed (84) hide show
  1. package/dist/css/index.css +1 -1
  2. package/dist/esm/im-core.js +1 -1
  3. package/dist/esm/im-shell.js +1 -1
  4. package/dist/umd/im-core.js +1 -1
  5. package/dist/umd/index.js +1 -1
  6. package/docs/api.md +4 -4
  7. package/docs/plugins/draw.md +1 -1
  8. package/package.json +1 -1
  9. package/plugins/beta/map-styles/dist/esm/im-map-styles-plugin.js +1 -1
  10. package/plugins/beta/map-styles/dist/umd/im-map-styles-plugin.js +1 -1
  11. package/plugins/beta/map-styles/dist/umd/index.js +1 -1
  12. package/plugins/datasets/dist/esm/esriLayerAdapter.js +1 -1
  13. package/plugins/datasets/dist/esm/im-datasets-ml-adapter.js +1 -1
  14. package/plugins/datasets/dist/esm/im-datasets-plugin.js +1 -1
  15. package/plugins/datasets/dist/umd/im-datasets-esri-adapter.js +1 -1
  16. package/plugins/datasets/dist/umd/im-datasets-ml-adapter.js +1 -1
  17. package/plugins/datasets/dist/umd/im-datasets-plugin.js +1 -1
  18. package/plugins/datasets/src/adapters/esri/esriLayerAdapter.js +2 -3
  19. package/plugins/datasets/src/adapters/esri/registry/esriDataset.js +1 -1
  20. package/plugins/datasets/src/adapters/loadLayerAdapter.js +1 -1
  21. package/plugins/datasets/src/adapters/maplibre/maplibreLayerAdapter.js +1 -3
  22. package/plugins/datasets/src/adapters/maplibre/maplibreLayerAdapter.test.js +3 -3
  23. package/plugins/datasets/src/initialise/initialiseDatasets.js +0 -1
  24. package/plugins/datasets/src/registry/dataset.js +2 -3
  25. package/plugins/datasets/src/registry/datasetRegistry.js +0 -3
  26. package/plugins/datasets/src/registry/datasetRegistry.test.js +1 -1
  27. package/plugins/datasets/src/registry/globalDataset.js +0 -3
  28. package/plugins/draw/dist/esm/im-draw-ol-adapter.js +1 -1
  29. package/plugins/draw/dist/umd/im-draw-ol-adapter.js +1 -1
  30. package/plugins/draw/src/DrawInit.jsx +2 -2
  31. package/plugins/draw/src/adapters/maplibre/MaplibreDrawAdapter.js +1 -1
  32. package/plugins/draw/src/adapters/maplibre/modes/drawMode/pointerHandlers.js +1 -1
  33. package/plugins/draw/src/adapters/maplibre/modes/drawMode/pointerHandlers.test.js +1 -1
  34. package/plugins/draw/src/adapters/maplibre/modes/editVertexMode/keyboardHandlers.js +1 -1
  35. package/plugins/draw/src/adapters/maplibre/modes/editVertexMode/vertexOperations.js +3 -3
  36. package/plugins/draw/src/adapters/maplibre/modes/editVertexMode/vertexOperations.test.js +1 -1
  37. package/plugins/draw/src/adapters/maplibre/modes/editVertexMode.test.js +1 -1
  38. package/plugins/draw/src/adapters/openlayers/draw/DrawMode.js +1 -0
  39. package/plugins/draw/src/adapters/openlayers/draw/DrawMode.test.js +15 -1
  40. package/plugins/draw/src/adapters/openlayers/draw/drawInput.js +17 -3
  41. package/plugins/draw/src/adapters/openlayers/draw/drawInput.test.js +47 -3
  42. package/plugins/draw/src/adapters/openlayers/edit/EditMode.js +1 -1
  43. package/plugins/draw/src/adapters/openlayers/edit/EditMode.test.js +1 -1
  44. package/plugins/draw/src/adapters/openlayers/edit/keyboardHandler.test.js +1 -1
  45. package/plugins/draw/src/adapters/openlayers/edit/nudge.js +2 -2
  46. package/plugins/draw/src/adapters/openlayers/edit/nudge.test.js +2 -2
  47. package/plugins/draw/src/events.js +4 -4
  48. package/plugins/draw/src/events.test.js +1 -1
  49. package/plugins/interact/dist/esm/im-interact-plugin.js +1 -1
  50. package/plugins/interact/dist/umd/im-interact-plugin.js +1 -1
  51. package/plugins/interact/dist/umd/index.js +1 -1
  52. package/plugins/interact/src/hooks/useCrossHairVisibility.js +12 -4
  53. package/plugins/interact/src/hooks/useCrossHairVisibility.test.js +88 -1
  54. package/plugins/search/dist/esm/im-search-plugin.js +1 -1
  55. package/plugins/search/dist/umd/im-search-plugin.js +1 -1
  56. package/plugins/search/src/Search.jsx +5 -2
  57. package/sonar-project.properties +7 -1
  58. package/src/App/components/Attributions/Attributions.module.scss +10 -0
  59. package/src/App/components/Hints/Hints.jsx +7 -2
  60. package/src/App/components/KeyboardHelp/KeyboardHelp.jsx +2 -3
  61. package/src/App/components/KeyboardHelp/KeyboardHelp.test.jsx +3 -6
  62. package/src/App/components/{MoveControl/MoveControl.jsx → MoveControls/MoveControls.jsx} +10 -10
  63. package/src/App/components/{MoveControl/MoveControl.module.scss → MoveControls/MoveControls.module.scss} +24 -24
  64. package/src/App/components/{MoveControl/MoveControl.test.jsx → MoveControls/MoveControls.test.jsx} +48 -48
  65. package/src/App/components/Viewport/Viewport.jsx +9 -1
  66. package/src/App/components/Viewport/Viewport.test.jsx +11 -0
  67. package/src/App/initialiseApp.js +11 -8
  68. package/src/App/initialiseApp.test.js +15 -3
  69. package/src/App/layout/Layout.jsx +3 -1
  70. package/src/App/registry/keyboardShortcutRegistry.js +25 -13
  71. package/src/App/registry/keyboardShortcutRegistry.test.js +49 -32
  72. package/src/App/registry/pluginRegistry.js +1 -2
  73. package/src/App/registry/pluginRegistry.test.js +4 -3
  74. package/src/App/store/AppProvider.jsx +3 -2
  75. package/src/InteractiveMap/InteractiveMap.js +8 -2
  76. package/src/InteractiveMap/InteractiveMap.test.js +20 -3
  77. package/src/config/appConfig.js +17 -15
  78. package/src/config/appConfig.test.js +22 -22
  79. package/src/config/defaults.js +3 -1
  80. package/src/config/mergeConfig.js +7 -0
  81. package/src/config/mergeConfig.test.js +20 -0
  82. package/src/scss/main.scss +1 -1
  83. package/src/test-utils.js +5 -0
  84. package/src/types.js +14 -6
@@ -260,7 +260,7 @@ describe('removeDataset', () => {
260
260
  it('does nothing when the dataset is not in the registry', () => {
261
261
  const removeBefore = map.removeLayer.mock.calls.length
262
262
  adapter.removeDataset('nonexistent')
263
- expect(map.removeLayer.mock.calls.length).toBe(removeBefore)
263
+ expect(map.removeLayer.mock.calls).toHaveLength(removeBefore)
264
264
  })
265
265
  })
266
266
 
@@ -313,7 +313,7 @@ describe('applyDatasetVisibility', () => {
313
313
  it('does nothing for an unknown dataset', () => {
314
314
  const before = map.setLayoutProperty.mock.calls.length
315
315
  adapter.applyDatasetVisibility('unknown')
316
- expect(map.setLayoutProperty.mock.calls.length).toBe(before)
316
+ expect(map.setLayoutProperty.mock.calls).toHaveLength(before)
317
317
  })
318
318
 
319
319
  it('skips setLayoutProperty for a layer that has been removed from the map', () => {
@@ -418,7 +418,7 @@ describe('applyDatasetOpacity', () => {
418
418
  it('does nothing for an unknown dataset', () => {
419
419
  const before = map.setPaintProperty.mock.calls.length
420
420
  adapter.applyDatasetOpacity('unknown')
421
- expect(map.setPaintProperty.mock.calls.length).toBe(before)
421
+ expect(map.setPaintProperty.mock.calls).toHaveLength(before)
422
422
  })
423
423
 
424
424
  it('does not call setPaintProperty for a layer that has been removed from the map (covers _setPaintOpacity early return)', () => {
@@ -49,7 +49,6 @@ export const initialiseDatasets = ({
49
49
  dynamicSources.set(registryDataset.id, dynamicSource)
50
50
  })
51
51
  adapter.attachDynamicSources(dynamicSources)
52
- // TODO - apply dynamic source defaults here, and include in mappedDatasets
53
52
  eventBus.emit('datasets:ready')
54
53
  })
55
54
 
@@ -67,12 +67,11 @@ export class Dataset {
67
67
  get hasHiddenFeatures () { return Boolean(this.hiddenFeatures?.length > 0 || this.parent?.hasHiddenFeatures) }
68
68
 
69
69
  get filter () {
70
- return null // TODO - implement filter construction for esri and openLayers adapters
70
+ return null
71
71
  }
72
72
 
73
73
  // Returns true if either the parent (if it has one) or global visibility is hidden , otherwise returns true.
74
74
  // This is used to determine whether to show a tooltip
75
- // TODO: also work out how to convey datasets hidden by zoom filter.
76
75
  get isHiddenByInheritance () {
77
76
  if (this.isSublayer) {
78
77
  return !this.parent?.visible
@@ -165,7 +164,7 @@ export class Dataset {
165
164
  // any child with a parent opacity only would be multiplied by itself
166
165
  return {
167
166
  ...parentStyle,
168
- opacity: undefined,
167
+ opacity: undefined, // NOSONAR - we need to set this to undefined so that the opacity getter can calculate the correct opacity
169
168
  ...this._datasetDefinition.style,
170
169
  symbolDescription: this.symbolDescription
171
170
  }
@@ -134,7 +134,4 @@ const datasetRegistry = {
134
134
 
135
135
  Object.defineProperty(datasetRegistry, 'datasets', { get: () => datasetRegistry._datasets })
136
136
 
137
- // TODO remove this global reference once development is finished
138
- window.datasetRegistry = datasetRegistry
139
-
140
137
  export { datasetRegistry }
@@ -180,7 +180,7 @@ describe('datasetRegistry', () => {
180
180
  datasetRegistry.attach(grouped, orderedDatasets)
181
181
  const { items } = datasetRegistry.keyItems()
182
182
  const groupLabels = items.filter(i => i.type === 'group').map(i => i.groupLabel)
183
- expect(groupLabels.length).toBe(new Set(groupLabels).size)
183
+ expect(groupLabels).toHaveLength(new Set(groupLabels).size)
184
184
  })
185
185
 
186
186
  it('populates group item datasets with matching showInKey datasets', () => {
@@ -4,9 +4,6 @@ export const attachGlobalState = (globalStateRef) => {
4
4
  globalState = globalStateRef
5
5
  }
6
6
 
7
- // TODO - remove this once testing finishes
8
- window.getGlobalState = () => Object.freeze(globalState)
9
-
10
7
  const calculateLocalOpacity = (opacityValue, parentOpacityValue) => {
11
8
  if (opacityValue === undefined) {
12
9
  if (parentOpacityValue === undefined) {
@@ -1 +1 @@
1
- import e from"@babel/runtime/helpers/defineProperty";import t from"@babel/runtime/helpers/asyncToGenerator";import r from"ol/layer/Vector.js";import n from"ol/source/Vector.js";import a from"ol/format/GeoJSON.js";import{c as o,a as i,b as l,d,h as s,s as c,i as u,e as v,r as p}from"./im-draw-ml-adapter.js";import g from"ol/style/Style.js";import y from"ol/style/Fill.js";import m from"ol/style/Stroke.js";import h from"ol/style/Circle.js";import x from"ol/geom/MultiPoint.js";import{S as f,T as S,A as I,M as w,a as T,w as V,K as P,s as C,t as b}from"./im-draw-plugin.js";import{transform as _}from"ol/proj.js";import E from"ol/layer/VectorTile.js";import L from"ol/Feature.js";import k from"ol/geom/Point.js";import{Style as O}from"ol/style.js";import D from"ol/interaction/Interaction.js";import F from"ol/interaction/Draw.js";import{noModifierKeys as j}from"ol/events/condition.js";import M from"ol/interaction/Modify.js";import A from"ol/Collection.js";import"preact/compat";import"@babel/runtime/helpers/objectWithoutProperties";var G="EPSG:27700",R=new a({dataProjection:G,featureProjection:G}),H=()=>{var e=new n;return{source:e,getOL(t){var r;return null!==(r=e.getFeatureById(String(t)))&&void 0!==r?r:null},add(t){var r=this.getOL(t.id);r&&e.removeFeature(r);var n=R.readFeature(t);return e.addFeature(n),n},get(e){var t=this.getOL(e);return t?R.writeFeatureObject(t):null},remove(t){var r=Array.isArray(t)?t:[t];for(var n of r){var a=this.getOL(n);a&&e.removeFeature(a)}},clear(){e.clear()},toGeoJSON:e=>R.writeFeatureObject(e),fromGeoJSON:e=>R.readFeature(e)}},N={Polygon:2,LineString:1},U=e=>{var t,r=e.getType();return("Polygon"===r?null!==(t=e.getCoordinates()[0])&&void 0!==t?t:[]:e.getCoordinates()).slice(0,-N[r])},B=e=>{var t;return null!==(t=U(e).at(-1))&&void 0!==t?t:null},q={outer:f.vertexHaloRadius+3,mid:f.vertexHaloRadius,inner:f.vertexRadius},Y={outer:f.midpointHaloRadius+3,mid:f.midpointHaloRadius,inner:f.midpointRadius},z=(e,t,r,n,a)=>{e.beginPath(),e.arc(t,r,n,0,2*Math.PI),e.fillStyle=a,e.fill()},K=(e,t,r)=>{var{outer:n,mid:a,inner:o}=e;return(e,i)=>{var l=i.context,d=i.pixelRatio,[s,c]=e;l.save(),z(l,s,c,n*d,t.editActive),z(l,s,c,a*d,t.editHalo),z(l,s,c,o*d,t[r]),l.restore()}},X=e=>e.charAt(0).toUpperCase()+e.slice(1),W=e=>{var{vertexImage:t,vertexStyle:r,selectedVertexStyle:n}=(e=>{var t=new h({radius:f.vertexRadius,fill:new y({color:e.editVertex})});return{vertexImage:t,vertexStyle:new g({image:t}),selectedVertexStyle:new g({renderer:K(q,e,"editVertex")})}})(e),{midpointStyle:a,selectedMidpointStyle:o}=(e=>({midpointStyle:new g({image:new h({radius:f.midpointRadius,fill:new y({color:e.editMidpoint})})}),selectedMidpointStyle:new g({renderer:K(Y,e,"editMidpoint")})}))(e),i=new g({stroke:new m({color:e.editStroke,width:2}),fill:new y({color:e.editFill})}),l=new g({stroke:new m({color:e.invalidStroke,width:2,lineDash:[2,4]})}),d=(e=>({valid:new g({stroke:new m({color:e.editStroke,width:2}),fill:new y({color:e.editFill})}),invalid:new g({stroke:new m({color:e.invalidStroke,width:2,lineDash:[2,4]})}),splitValid:new g({stroke:new m({color:e.splitValid,width:2})}),splitInvalid:new g({stroke:new m({color:e.splitInvalid,width:2,lineDash:[2,4]})})}))(e),s=new x([]),c=new g({image:t,geometry:e=>{var t=U(e.getGeometry());return t.length?(s.setCoordinates(t),s):null}});return{vertexStyle:r,selectedVertexStyle:n,midpointStyle:a,selectedMidpointStyle:o,editFeatureStyle:i,editFeatureStyleInvalid:l,createSketchStyle:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return r=>{var n=r.getGeometry().getType();if("Point"===n)return[];var a=r.get("splitter"),o=t?d.invalid:d.valid;return"valid"===a&&(o=d.splitValid),"invalid"===a&&(o=d.splitInvalid),n===e?[o,c]:[o]}},createFeatureStyle:()=>t=>{var r=t.getProperties(),n=e.mapStyleId,a=n&&r["stroke".concat(X(n))]||r.stroke||e.shapeStroke,o=n&&r["fill".concat(X(n))]||r.fill||e.shapeFill,i=r.strokeWidth||e.strokeWidth;return[new g({stroke:new m({color:a,width:i}),fill:new y({color:o})})]}}},J=(e,t)=>{var r=e[0]-t[0],n=e[1]-t[1];return r*r+n*n},Z=(e,t,r)=>{var n=r[0]-t[0],a=r[1]-t[1],o=n*n+a*a;if(0===o)return[t[0],t[1]];var i=Math.max(0,Math.min(1,((e[0]-t[0])*n+(e[1]-t[1])*a)/o));return[t[0]+i*n,t[1]+i*a]},Q=(e,t)=>$(e,t)?t:e,$=(e,t)=>e?!!t&&("edge"===e.type&&"vertex"===t.type||("vertex"!==e.type||"edge"!==t.type)&&t.distSq<e.distSq):!!t,ee=(e,t,r,n)=>{for(var a=null,o=n&&e.length>1?e.length-1:e.length,i=n?o:o-1,l=0;l<o;l++){var d=e[l],s=J(t,d);s<=r&&(a=Q(a,{type:"vertex",coord:[d[0],d[1]],distSq:s}))}for(var c=0;c<i;c++){var u=e[c],v=e[(c+1)%o],p=Z(t,u,v),g=J(t,p);g<=r&&(a=Q(a,{type:"edge",coord:p,distSq:g}))}return a},te=(e,t,r,n,a,o)=>{for(var i=null,l=0;l<n;l++){var d=t+2*l,s=t+(l+1)%r*2,c=[e[d],e[d+1]],u=[e[s],e[s+1]],v=Z(a,c,u),p=J(a,v);p<=o&&(i=Q(i,{type:"edge",coord:v,distSq:p,seg:[c,u]}))}return i},re=(e,t,r)=>[e>0||r?e>0?e-1:t-1:null,e<t-1||r?e<t-1?e+1:0:null],ne=(e,t,r,n,a,o)=>{for(var i=n===r,l=r=>null===r?null:[e[t+2*r],e[t+2*r+1]],d=null,s=0;s<r;s++){var c=l(s),u=J(a,c);if(u<=o){var[v,p]=re(s,r,i),g=[l(v),l(p)];d=Q(d,{type:"vertex",coord:c,distSq:u,adjacent:g})}}return d},ae=(e,t,r,n,a,o)=>{var i=(r-t)/2,l=o?i:i-1;return{vertex:ne(e,t,i,l,n,a),edge:te(e,t,i,l,n,a)}},oe={point:(e,t,r)=>{var n=e.getCoordinates(),a=J(t,n);return a<=r?{type:"vertex",coord:[n[0],n[1]],distSq:a}:null},lineString:(e,t,r)=>ee(e.getCoordinates(),t,r,!1),linearRing:(e,t,r)=>ee(e.getCoordinates(),t,r,!0),polygon:(e,t,r)=>{var n=null;for(var a of e.getCoordinates())n=Q(n,ee(a,t,r,!0));return n},multiLineString:(e,t,r)=>{var n=null;for(var a of e.getCoordinates())n=Q(n,ee(a,t,r,!1));return n},multiPolygon:(e,t,r)=>{var n=null;for(var a of e.getCoordinates())for(var o of a)n=Q(n,ee(o,t,r,!0));return n}},ie=(e,t,r)=>{var n=e.getGeometry();if(!n)return null;var a=n.getType(),o=oe[a[0].toLowerCase()+a.slice(1)];return o?o(n,t,r):null};function le(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function de(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?le(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):le(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var se=(e,t,r)=>{if(!t||!r)return!1;var[n,a,o,i]=e.extent,l=(t,r,n)=>Math.min(Math.abs(t-r),Math.abs(t-n))<=e.band,d=Math.abs(t[0]-r[0])<=e.eps&&l(t[0],n,o),s=Math.abs(t[1]-r[1])<=e.eps&&l(t[1],a,i);return d||s},ce=(e,t)=>{var r,n=((e,t)=>{if(!e)return null;var{tileGrid:r,viewProj:n,sourceProj:a,zoom:o}=e,i=e=>e?_(e,n,a):null,l=i(t),d=r.getTileCoordForCoordAndZ(l,o),s=r.getTileCoordExtent(d),c=s[2]-s[0];return{toSource:i,anchor:l,extent:s,band:.0625*c,eps:c/4096*2}})(e,t.coord);if(!n)return!1;if("edge"===t.type){var[a,o]=t.seg;return se(n,n.toSource(a),n.toSource(o))}var[i,l]=null!==(r=t.adjacent)&&void 0!==r?r:[];return se(n,n.anchor,n.toSource(i))||se(n,n.anchor,n.toSource(l))},ue=()=>!0===globalThis.DEBUG_SNAP_VISIBILITY,ve=(e,t)=>{ue()&&console.log("[snap-candidate-found]",{type:e.type,layerId:null==t?void 0:t.id,layerType:null==t?void 0:t.type,coord:[e.coord[0].toFixed(2),e.coord[1].toFixed(2)],distSq:e.distSq.toFixed(2)})},pe=e=>{var{candidate:t,cursorCoord:r,mapboxLayer:n,boundaryState:a,map:o,vtLayers:i,resolution:l}=e;return ce(a,t)?(ue()&&console.log("[snap-filtered] tile clip artefact",t.type),!0):!("edge"!==t.type||"fill"!==(null==n?void 0:n.type)||!((e,t,r,n,a,o)=>{var i=e[0]-t[0],l=e[1]-t[1],d=i*i+l*l;if(d<1)return!1;var s=Math.sqrt(d),c=4*o,u=[e[0]+i/s*c,e[1]+l/s*c],v=n.getPixelFromCoordinate(u);return!!v&&!!n.forEachFeatureAtPixel(v,e=>{var t;return(null===(t=e.get("mapbox-layer"))||void 0===t?void 0:t.id)===r},{hitTolerance:2,layerFilter:e=>a.includes(e)})})(t.coord,r,n.id,o,i,l))&&(ue()&&console.log("[snap-filtered] invisible fill boundary"),!0)},ge=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=new Set,a=[],o=e=>{for(var t of(n=new Set,a=[],null!=e?e:[]))"string"==typeof t?n.add(t):t instanceof r&&a.push(t)};o(t);return{query:(t,r)=>{ue()&&console.log("[snap-query]",{coord:[t[0].toFixed(2),t[1].toFixed(2)],radiusPx:r,vtLayerCount:n.size,olLayerCount:a.length});var o=e.getView().getResolution();if(!o)return null;var i=r*o,l=i*i,d=[t[0]-i,t[1]-i,t[0]+i,t[1]+i],s=null;for(var c of a){var u=c.getSource();if(u)for(var v of u.getFeaturesInExtent(d))s=Q(s,ie(v,t,l))}if(n.size>0){var p=(e=>{var t=[];return e.getLayers().forEach(e=>{e instanceof E&&t.push(e)}),t})(e),g=p.length>0?e.getPixelFromCoordinate(t):null;if(g){var y=new Map;e.forEachFeatureAtPixel(g,(r,a)=>{var i=r.get("mapbox-layer");if(n.has(null==i?void 0:i.id)){var d=((e,t,r)=>{var n=e.getType(),a=e.getFlatCoordinates(),o=null,i=null;if("Point"===n){var l=J(t,a);l<=r&&(o={type:"vertex",coord:[a[0],a[1]],distSq:l})}else if("LineString"===n)({vertex:o,edge:i}=ae(a,0,a.length,t,r,!1));else if("Polygon"===n||"MultiLineString"===n){var d=e.getEnds(),s=0,c="Polygon"===n;for(var u of d){var v=ae(a,s,u,t,r,c);o=Q(o,v.vertex),i=Q(i,v.edge),s=u}}return[o,i].filter(Boolean)})(r,t,l);if(d.length){y.has(a)||y.set(a,((e,t)=>{var r,n=e.getSource(),a=null==n?void 0:n.getTileGrid();if(!a)return null;var o=t.getView().getProjection(),i=null!==(r=n.getProjection())&&void 0!==r?r:o,l=a.getZForResolution(t.getView().getResolution(),0);return{tileGrid:a,viewProj:o,sourceProj:i,zoom:l}})(a,e));var c=y.get(a);s=((e,t,r)=>{var n=e;for(var a of t)ve(a,r.mapboxLayer),pe(de({candidate:a},r))||(n=Q(n,a));return n})(s,d,{cursorCoord:t,mapboxLayer:i,boundaryState:c,map:e,vtLayers:p,resolution:o})}}},{hitTolerance:r,layerFilter:e=>p.includes(e)})}}return s?{type:s.type,coord:s.coord}:null},setLayers:o}},ye=e=>(t,r)=>{var n=r.context,[a,o]=t;n.beginPath(),n.arc(a,o,10*r.pixelRatio,0,2*Math.PI),n.fillStyle=e,n.fill()},me=e=>({vertex:new O({renderer:ye(e.snapVertex)}),edge:new O({renderer:ye(e.snapEdge)})}),he=new Set(["pointermove","pointerdrag","pointerdown","pointerup","singleclick","click"]),xe=(e,t,r,n)=>{var a=new D({handleEvent:o=>(a.getActive()&&((e,t,r,n,a)=>{var{type:o}=e;if("pointerout"!==o&&"pointerleave"!==o){if(he.has(o)){var i=t.query(e.coordinate,n);i&&(e.coordinate=i.coord.slice()),"pointermove"===o&&a()?i?r.show(i.coord,i.type):r.hide():"pointerdrag"===o&&r.hide()}}else r.hide()})(o,e,t,r,n),!0)});return a},fe=(e,t,a,o)=>{if(null==t||!t.length)return null;var i=ge(e,t),l=((e,t)=>{var a=me(t),o=new n,i=new r({source:o,style:e=>{var t;return null!==(t=a[e.get("snapType")])&&void 0!==t?t:null},zIndex:200,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(i);var l=new L,d=!1;return{show(e,t){l.setGeometry(new k(e)),l.set("snapType",t,!0),d?o.changed():(o.addFeature(l),d=!0)},hide(){d&&(o.clear(),d=!1)},updateColors(e){a=me(e),d&&o.changed()},remove(){o.clear(),e.removeLayer(i)}}})(e,a),d=!1,s=xe(i,l,o,()=>d);e.addInteraction(s),s.setActive(!1);var c=!1;return{snapRadius:o,apply(e){if(!c)return e;var t=i.query(e,o);return t?(l.show(t.coord,t.type),t.coord):(l.hide(),e)},hideIndicator(){l.hide()},setIndicatorActive(e){d=e,e||l.hide()},setActive(e){c=e,s.setActive(e),e||l.hide()},setSnapLayers(e){i.setLayers(null==e?t:e)},reattach(){e.removeInteraction(s),e.addInteraction(s)},updateColors(e){l.updateColors(e)},destroy(){e.removeInteraction(s),l.remove()}}},Se=(e,t)=>{var r=e.getPixelFromCoordinate(t);return r?{x:r[0],y:r[1]}:null},Ie=(e,t)=>Math.sqrt((e.x-t.x)**2+(e.y-t.y)**2),we=(e,t,r,n)=>{var a=e.getPixelFromCoordinate(t);return a?e.getCoordinateFromPixel([a[0]+r,a[1]+n]):t},Te=4,Ve=e=>{var{drawInteraction:t,canFinish:r,geom:n,sketchCoords:a,coord:o,lastPlacedCoord:i}=e;if(i&&i[0]===o[0]&&i[1]===o[1])return null!=r&&r()&&t.finishDrawing(),{handled:!0,lastPlacedCoord:null};var l=t.getMap();if(((e,t,r,n)=>{if("Polygon"!==n||r.length<Te)return!1;var a=Se(e,t),o=Se(e,r[0]);return!(!a||!o)&&Ie(a,o)<12})(l,o,a,n.getType()))return t.finishDrawing(),{handled:!0,lastPlacedCoord:i};var d=B(n);if(d){var s=l.getPixelFromCoordinate(d),c=l.getPixelFromCoordinate(o);if(s&&c){var u=s[0]-c[0],v=s[1]-c[1];if(u*u+v*v<4)return{handled:!0,lastPlacedCoord:o}}}return{handled:!1,lastPlacedCoord:i}},Pe=new Set(["ArrowLeft","ArrowRight","ArrowUp","ArrowDown"]),Ce=e=>{var t,{drawInteraction:r,options:n}=e,{container:a,addVertexButtonId:o,mapProvider:i,snap:l,onUndo:d,canFinish:s,canPlace:c}=n,u=null!==(t=n.interfaceType)&&void 0!==t?t:"mouse",v=()=>u,p=(e=>{var{drawInteraction:t,mapProvider:r,snap:n,canFinish:a,canPlace:o,getInterfaceType:i}=e,l=null,d=null,s=function(){l=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,d=null};t.on("drawstart",e=>s(e.feature)),t.on("drawend",()=>s()),t.on("drawabort",()=>s());var c=()=>{var e=r.getCenter();return"mouse"!==i()&&n?n.apply(e):e};return{placeVertex:()=>{var e=c();if(null==n||n.hideIndicator(),l){var r=l.getGeometry(),i=r.getCoordinates(),s="Polygon"===r.getType()?i[0]||[]:i,u=Ve({drawInteraction:t,canFinish:a,geom:r,sketchCoords:s,coord:e,lastPlacedCoord:d});if(d=u.lastPlacedCoord,u.handled)return}o&&!o(e)||(t.appendCoordinates([e]),d=e)},updateRubberbanding:()=>{if(l){var e=l.getGeometry();e.getCoordinates().length&&((e,t)=>{if("LineString"===e.getType()){var r=[...e.getCoordinates()];r[r.length-1]=t,e.setCoordinates(r)}else if("Polygon"===e.getType()){var n=e.getCoordinates().map((e,r)=>{if(0!==r)return e;var n=[...e];return n[n.length-1]=t,n});e.setCoordinates(n)}})(e,c())}else"mouse"!==i()&&n&&n.apply(r.getCenter())},clearLastCoord(){d=null}}})({drawInteraction:r,mapProvider:i,snap:l,canFinish:s,canPlace:c,getInterfaceType:v}),g=r.getMap(),y=null==g?void 0:g.getView(),m=(e=>{var{container:t,addVertexButtonId:r,olView:n,onUndo:a,getInterfaceType:o,setInterfaceType:i,clearLastCoord:l,updateRubberbanding:d,placeVertex:s}=e,c=()=>{"mouse"!==o()&&d()};null==n||n.on("change:center",c);var u=e=>{t.contains(document.activeElement)&&(Pe.has(e.key)?i("keyboard"):("Enter"===e.key&&(e.preventDefault(),i("keyboard"),s()),"z"===e.key&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),null==a||a())))},v=e=>{r&&e.target.closest("#".concat(r))&&s()},p=e=>{"touch"!==e.pointerType&&(i("mouse"),l())},g=()=>{i("touch")},y=()=>{"mouse"!==o()&&d()};return globalThis.addEventListener("keydown",u),globalThis.addEventListener("click",v),t.addEventListener("pointerdown",p),t.addEventListener("touchstart",g,{passive:!0}),t.addEventListener("pointermove",y),{destroy(){null==n||n.un("change:center",c),globalThis.removeEventListener("keydown",u),globalThis.removeEventListener("click",v),t.removeEventListener("pointerdown",p),t.removeEventListener("touchstart",g),t.removeEventListener("pointermove",y)}}})({container:a,addVertexButtonId:o,olView:y,onUndo:d,getInterfaceType:v,setInterfaceType:e=>{u=e},clearLastCoord:p.clearLastCoord,updateRubberbanding:p.updateRubberbanding,placeVertex:p.placeVertex}),h=()=>{"mouse"!==u&&null!=y&&y.getAnimating()&&p.updateRubberbanding()};return null==g||g.on("postrender",h),{getInterfaceType:v,setInterfaceType(e){u=e,"mouse"!==e&&p.updateRubberbanding()},destroy(){m.destroy(),null==g||g.un("postrender",h)}}},be="styleschanged",_e=(e,t)=>!!t&&U(t.getGeometry()).length>=w[e],Ee=(e,t,r,n)=>a=>{if(!j(a))return!1;var o=r();if(!n(a.coordinate))return!1;if(!o||_e(t,o))return!0;var i=B(o.getGeometry());if(!i)return!0;var l=e.getPixelFromCoordinate(i);if(!l)return!0;var d=a.pixel[0]-l[0],s=a.pixel[1]-l[1];return d*d+s*s>4},Le={Polygon:2,LineString:1},ke=(e,t)=>{var{manager:r,featureId:n,properties:a,onStart:o,onSketchChange:i}=t;e.on("drawstart",e=>{o(e.feature),e.feature.getGeometry().on("change",i)}),e.on("drawend",e=>((e,t,r,n)=>{t.setId(String(r)),t.setProperties(n),e.store.source.addFeature(t),e.emit(I.CREATE,e.store.toGeoJSON(t))})(r,e.feature,n,a)),e.on("drawabort",()=>{r.emit(I.CANCEL)})},Oe=e=>{var{map:t,manager:r,options:n}=e,{geometryType:a,featureId:l,properties:d={}}=n,s=null,c=!1,u=r.styles.createSketchStyle(a),{updateVertexCount:v,resetCount:p,emitUndoValidation:g}=((e,t)=>{var r=0,n=(r,n)=>{setTimeout(()=>{var a,o,i,l,d,s,c=t();c&&e.emit(I.GEOMETRY_CHANGE,{feature:(a=e.store,o=c,i=a.toGeoJSON(o),l=i.geometry.type,d=Le[l],s=("Polygon"===l?i.geometry.coordinates[0]:i.geometry.coordinates).slice(0,-d),{type:"Feature",geometry:"Polygon"===l?{type:"Polygon",coordinates:[s]}:{type:"LineString",coordinates:s},properties:i.properties}),phase:r,vertexIndex:n})},0)};return{resetCount:()=>{r=0},updateVertexCount:()=>{var a=t();if(a){var o=U(a.getGeometry()).length;e.emit(I.VERTEX_CHANGE,{numVertices:o}),o>r&&n("commit-add",o-1),r=o}},emitUndoValidation:()=>{var e=t();e&&n("commit-delete",U(e.getGeometry()).length)}}})(r,()=>s),y=(e=>{var{manager:t,geometryType:r,getSketch:n}=e;return e=>{var a=n(),o=T({placed:a?U(a.getGeometry()):[],point:e,geometryType:r,onGeometryChange:t._geometryValidator});return o.valid||t.emit(I.PLACEMENT_BLOCKED,o.blocked),o.valid}})({manager:r,geometryType:a,getSketch:()=>s}),m=new F({type:a,style:e=>u(e),stopClick:!0,snapTolerance:S.snapRadius,condition:Ee(t,a,()=>s,y),finishCondition:()=>!1!==r._geometryValid});t.addInteraction(m);var h=o({onChange:e=>{c=e,u=r.styles.createSketchStyle(a,c),m.overlay_.changed()}}),x=i({onStrokeChange:(e,t)=>h.set(e,t),onPlaceChange:(e,t)=>r.emit(I.CAN_PLACE_CHANGE,{canPlace:!e,reason:t})}),f=V[a],w=()=>{if(s){var{feature:e,numVertices:t}=((e,t)=>{var r,n=t.getGeometry(),a=n.getCoordinates(),o="Polygon"===e?null!==(r=a[0])&&void 0!==r?r:[]:a;return{feature:{type:"Feature",geometry:"Polygon"===e?{type:"Polygon",coordinates:[o]}:{type:"LineString",coordinates:o}},numVertices:U(n).length}})(a,s);x.update({feature:e,context:{mode:f},numVertices:t,onGeometryChange:r._geometryValidator})}},P=()=>{u=r.styles.createSketchStyle(a,c),m.overlay_.changed()};r.on(be,P),m.overlay_.updateWhileAnimating_=!0,ke(m,{manager:r,featureId:l,properties:d,onStart:e=>{s=e,p()},onSketchChange:()=>{v(),w()}});var C=(e=>{var{drawInteraction:t,options:r,geometryType:n,getSketch:a,updateVertexCount:o,emitUndoValidation:i,canPlaceVertex:l}=e;return Ce({drawInteraction:t,options:{container:r.container,interfaceType:r.interfaceType,addVertexButtonId:r.addVertexButtonId,mapProvider:r.mapProvider,snap:r.snap,onUndo:()=>{t.removeLastPoint(),o(),i()},canFinish:()=>_e(n,a()),canPlace:l}})})({drawInteraction:m,options:n,geometryType:a,getSketch:()=>s,updateVertexCount:v,emitUndoValidation:g,canPlaceVertex:y});return(e=>{var{map:t,manager:r,drawInteraction:n,input:a,geometryType:o,getSketch:i,updateVertexCount:l,emitUndoValidation:d,onStylesChanged:s,clearSketch:c,setInvalid:u,liveStroke:v,liveDrawChecks:p}=e;return{done(){_e(o,i())&&n.finishDrawing()},cancel(){n.abortDrawing()},undo(){n.removeLastPoint(),l(),d()},setInvalid:u,setInterfaceType(e){a.setInterfaceType(e)},setDrawingPreviewProperty(e,t){var r=i();r&&(r.set(e,t),n.overlay_.changed())},destroy(){v.destroy(),p.destroy(),r.off(be,s),r.emit(I.INTERFACE_TYPE_CHANGE,{interfaceType:a.getInterfaceType()}),a.destroy(),t.removeInteraction(n),c()}}})({map:t,manager:r,drawInteraction:m,input:C,geometryType:a,getSketch:()=>s,updateVertexCount:v,emitUndoValidation:g,onStylesChanged:P,clearSketch:()=>{s=null},setInvalid:e=>h.set(e),liveStroke:h,liveDrawChecks:x})},De=e=>{if(null==e||!e.coordinates)return[];switch(e.type){case"LineString":return e.coordinates;case"Polygon":return e.coordinates.flatMap(e=>e.slice(0,-1));case"MultiLineString":return e.coordinates.flat(1);case"MultiPolygon":return e.coordinates.flatMap(e=>e.flatMap(e=>e.slice(0,-1)));default:return[]}},Fe=e=>{if(null==e||!e.coordinates)return[];var t=[],r=0;switch(e.type){case"LineString":t.push({start:0,length:e.coordinates.length,path:[],closed:!1});break;case"Polygon":e.coordinates.forEach((e,n)=>{var a=e.length-1;t.push({start:r,length:a,path:[n],closed:!0}),r+=a});break;case"MultiLineString":e.coordinates.forEach((e,n)=>{t.push({start:r,length:e.length,path:[n],closed:!1}),r+=e.length});break;case"MultiPolygon":e.coordinates.forEach((e,n)=>{e.forEach((e,a)=>{var o=e.length-1;t.push({start:r,length:o,path:[n,a],closed:!0}),r+=o})})}return t},je=(e,t)=>{for(var r of e)if(t>=r.start&&t<r.start+r.length)return{segment:r,localIdx:t-r.start};return null},Me=(e,t)=>{var r=e.coordinates;for(var n of t)r=r[n];return r},Ae=e=>{var t=De(e),r=Fe(e);if(!t.length||!r.length)return[];var n=[];for(var a of r)for(var o=a.closed?a.length:a.length-1,i=0;i<o;i++){var l=a.start+i,d=a.start+(i+1)%a.length,[s,c]=t[l],[u,v]=t[d];n.push([(s+u)/2,(c+v)/2])}return n},Ge=(e,t)=>{var a=new n,o=new r({source:a,zIndex:103});e.addLayer(o);return{update(e){if(a.clear(),!(e.selectedVertexIndex<0)){var{coord:r,style:n}=(e=>{var{selectedVertexIndex:r,selectedVertexType:n,vertices:a,midpoints:o}=e,i=t();return"vertex"===n?{coord:a[r],style:i.selectedVertexStyle}:"midpoint"===n?{coord:o[r-a.length],style:i.selectedMidpointStyle}:{coord:null,style:null}})(e);if(r){var o=new L({geometry:new k(r)});o.setStyle(n),a.addFeature(o)}}},remove(){a.clear(),e.removeLayer(o)}}},Re=e=>{var{map:t,manager:r,store:n,olFeature:a,interfaceType:o,layers:i}=e,{vertexLayer:l,midpointLayer:d,activeLayer:s}=i,c={olFeature:a,selectedVertexIndex:-1,selectedVertexType:null,vertices:[],midpoints:[],interfaceType:null!=o?o:"mouse"},u={onDeselect:null,onUpdate:null},v=()=>{var e=a.getGeometry();return{type:e.getType(),coordinates:e.getCoordinates()}},p=()=>((e,t)=>{var r,{vertexLayer:n,midpointLayer:a,activeLayer:o,manager:i,hooks:l}=t;n.setSelected("vertex"===e.selectedVertexType?e.selectedVertexIndex:-1),a.setSelected("midpoint"===e.selectedVertexType?e.selectedVertexIndex-e.vertices.length:-1),e.selectedVertexIndex<0&&(null===(r=l.onDeselect)||void 0===r||r.call(l)),o.update(e),i.emit(I.VERTEX_SELECTION,{index:"vertex"===e.selectedVertexType?e.selectedVertexIndex:-1,numVertices:e.vertices.length})})(c,{vertexLayer:l,midpointLayer:d,activeLayer:s,manager:r,hooks:u}),g=()=>{var e=v();c.vertices=De(e),c.midpoints=Ae(e),d.update(e),l.update(e),s.update(c)},y=((e,t,r)=>(n,a)=>{n&&setTimeout(()=>{e.emit(I.GEOMETRY_CHANGE,{feature:t.toGeoJSON(r),phase:n,vertexIndex:a})},0)})(r,n,a),m=()=>g();return a.getGeometry().on("change",m),{state:c,getState:()=>c,setState:e=>{var r,n;Object.assign(c,e),void 0!==e.selectedVertexIndex&&p(),void 0!==e.vertices&&(n=v(),d.update(n),l.update(n),c.midpoints=d.getCoords(),s.update(c),null===(r=u.onUpdate)||void 0===r||r.call(u),t.render())},syncGeom:()=>{g(),r.emit(I.VERTEX_CHANGE,{numVertices:c.vertices.length}),r.emit(I.UPDATE,n.toGeoJSON(a))},emitGeometryValidation:y,updateLayersFromGeom:g,setHooks:e=>{var{onDeselect:t,onUpdate:r}=e;return Object.assign(u,{onDeselect:t,onUpdate:r})},destroy(){a.getGeometry().un("change",m)}}},He=function(e,t,r,n){var a,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:12;return null!==(a=function(e,t,r){var n=-1,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:12;return t.forEach((t,o)=>{var i=Se(e,t);if(i){var l=Ie(i,r);l<a&&(a=l,n=o)}}),n>=0?{index:n,type:"vertex"}:null}(e,t,n,o))&&void 0!==a?a:function(e,t,r,n){var a=-1,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:12;return t.forEach((t,n)=>{var i=Se(e,t);if(i){var l=Ie(i,r);l<o&&(o=l,a=n)}}),a>=0?{index:n+a,type:"midpoint"}:null}(e,r,n,t.length,o)},Ne=e=>{var{map:t,olFeature:r,getState:n,onModifyEnd:a}=e,o=(e=>{var{map:t,getState:r}=e;return e=>{var{interfaceType:n,vertices:a,midpoints:o}=r();if("touch"===n)return!1;var i=t.getEventPixel(e.originalEvent);return null!==He(t,a,o,{x:i[0],y:i[1]})}})({map:t,getState:n}),i=new M({features:new A([r]),style:()=>[],pixelTolerance:12,condition:o});t.addInteraction(i);var l=null;return i.on("modifystart",()=>{"touch"!==n().interfaceType&&(l=n().vertices.map(e=>[...e]))}),i.on("modifyend",()=>{if("touch"!==n().interfaceType){var e=l;l=null,a(e)}}),{destroy(){t.removeInteraction(i)}}},Ue=(e,t,r,n)=>{var a=r-n,o=t[a];if(!o)return null;var i=e.getGeometry(),l={type:i.getType(),coordinates:i.getCoordinates()},d=Fe(l),s=0;for(var c of d){var u=c.closed?c.length:c.length-1;if(a<s+u){var v=a-s+1,p=c.start+v;return Me(l,c.path).splice(v,0,[...o]),i.setCoordinates(l.coordinates),{insertedIndex:p}}s+=u}return null},Be=(e,t,r)=>{var n=e.getGeometry(),a={type:n.getType(),coordinates:n.getCoordinates()},o=Fe(a),i=je(o,t);if(i){var l=Me(a,i.segment.path);l[i.localIdx]=[...r],i.segment.closed&&0===i.localIdx&&(l[l.length-1]=[...r]),n.setCoordinates(a.coordinates)}};function qe(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function Ye(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?qe(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):qe(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var ze=(e,t)=>{var{getState:r,onVertexMoved:n,snap:a,drag:o}=t;if(null==o.dragStartIndex)return((e,t)=>{var{map:r,getState:n,onTap:a,drag:o}=t;if(o.tapStart&&!o.tapStart.onTarget&&0!==e.changedTouches.length){var i=e.changedTouches[0],l=Date.now()-o.tapStart.time;if(Math.hypot(i.clientX-o.tapStart.x,i.clientY-o.tapStart.y)<10&&l<400){var d=r.getEventPixel({clientX:i.clientX,clientY:i.clientY}),s=n();null==a||a(He(r,s.vertices,s.midpoints,{x:d[0],y:d[1]},24)),e.preventDefault()}}})(e,t),void(o.tapStart=null);o.tapStart=null;var{vertices:i}=r();i[o.dragStartIndex]&&o.dragStartCoord&&n({vertexIndex:o.dragStartIndex,previousCoord:o.dragStartCoord}),null==a||a.hideIndicator(),o.dragStartCoord=null,o.dragStartIndex=null,o.vertexTouchDelta=null,o.targetTouchDelta=null,e.preventDefault()},Ke=e=>{var{container:t}=e,r={dragStartCoord:null,dragStartIndex:null,vertexTouchDelta:null,targetTouchDelta:null,tapStart:null},n=Ye(Ye({},e),{},{drag:r}),a=e=>((e,t)=>{var{map:r,targetEl:n,cssToOl:a,getState:o,drag:i}=t,l=e.touches[0],d=u(e.target);if(i.tapStart={x:l.clientX,y:l.clientY,time:Date.now(),onTarget:d},d){var{selectedVertexIndex:s,vertices:c}=o(),v=c[s];if(v){var p=r.getEventPixel({clientX:l.clientX,clientY:l.clientY}),g=Se(r,v),y=getComputedStyle(n),m=a({x:Number.parseFloat(y.left),y:Number.parseFloat(y.top)});i.dragStartCoord=[...v],i.dragStartIndex=s,i.vertexTouchDelta={x:p[0]-g.x,y:p[1]-g.y},i.targetTouchDelta={x:p[0]-m.x,y:p[1]-m.y},e.preventDefault()}}})(e,n),o=e=>((e,t)=>{var{map:r,targetEl:n,olToCSS:a,getState:o,setState:i,snap:l,drag:d}=t;if(u(e.target)&&null!=d.dragStartIndex){e.preventDefault();var s=r.getEventPixel({clientX:e.touches[0].clientX,clientY:e.touches[0].clientY}),v=((e,t)=>e.getCoordinateFromPixel([t.x,t.y]))(r,{x:s[0]-d.vertexTouchDelta.x,y:s[1]-d.vertexTouchDelta.y}),p=l?l.apply(v):v;null==l||l.hideIndicator();var{olFeature:g,vertices:y}=o();g&&(Be(g,d.dragStartIndex,p),i({vertices:y.map((e,t)=>t===d.dragStartIndex?p:e)}),c(n,a({x:s[0]-d.targetTouchDelta.x,y:s[1]-d.targetTouchDelta.y})))}})(e,n),i=e=>ze(e,n);return t.addEventListener("touchstart",a,{passive:!1}),t.addEventListener("touchmove",o,{passive:!1}),t.addEventListener("touchend",i,{passive:!1}),{isDragging:()=>null!=r.dragStartIndex,destroy(){t.removeEventListener("touchstart",a),t.removeEventListener("touchmove",o),t.removeEventListener("touchend",i)}}},Xe=e=>{var{map:t,snap:r,getState:n,setState:a,onInserted:o,onVertexMoved:i}=e,l={start:null,index:null},d=(e,o)=>{var{selectedVertexIndex:i,vertices:l,olFeature:d}=n();if(!d||i<0||!l[i])return null;var s=l[i],c=we(t,s,e,o),u=r?r.apply(c):c;null==r||r.hideIndicator();var v=((e,t,r,n,a,o,i)=>{if(!e)return a;var l=[n[0]-r[0],n[1]-r[1]],d=[a[0]-r[0],a[1]-r[1]],s=l[0]**2+l[1]**2;if(s>0&&(d[0]*l[0]+d[1]*l[1])/s<.5){var c=e.snapRadius+1;return we(t,r,0===o?0:Math.sign(o)*c,0===i?0:Math.sign(i)*c)}return a})(r,t,s,c,u,e,o);return Be(d,i,v),a({vertices:l.map((e,t)=>t===i?v:e)}),{previousCoord:s,vertexIndex:i}};return{nudge:e=>{var{selectedVertexIndex:i,selectedVertexType:s,vertices:c,midpoints:u,olFeature:v}=n();if(v){var p=e.shiftKey?P.nudgeAmount:P.stepAmount,g={ArrowUp:[0,-p],ArrowDown:[0,p],ArrowLeft:[-p,0],ArrowRight:[p,0]},[y,m]=g[e.key];"midpoint"!==s?i<0||!c[i]||(l.start||(l.start=[...c[i]],l.index=i),d(y,m)):((e,i,d,s,c,u)=>{var v=Ue(e,i,d,s.length);if(v){o({insertedIndex:v.insertedIndex});var p=n().vertices,g=p[v.insertedIndex];if(g){l.start=[...g],l.index=v.insertedIndex;var y=we(t,g,c,u),m=r?r.apply(y):y;Be(e,v.insertedIndex,m),a({selectedVertexIndex:v.insertedIndex,selectedVertexType:"vertex",vertices:p.map((e,t)=>t===v.insertedIndex?m:e)})}}})(v,u,i,c,y,m)}},keyMove:l,nudgeByDelta:(e,t,r)=>{var n=r?P.stepAmount:P.nudgeAmount,a=d(e*n,t*n);a&&i({vertexIndex:a.vertexIndex,previousCoord:a.previousCoord})}}},We=new Set(["ArrowLeft","ArrowRight","ArrowUp","ArrowDown"]),Je=new Set(["INPUT","TEXTAREA","BUTTON","SELECT","A"]),Ze=e=>{var{map:t,getState:r,setState:n,nudge:a,keyMove:o,onUndo:i,onKeyboardActive:l,isFocused:d}=e,s=e=>{e.altKey?(e.preventDefault(),e.stopPropagation(),((e,t,r,n)=>{var{selectedVertexIndex:a,vertices:o,midpoints:i}=r();if(o.length){var l,d=[...o,...i].map(e=>Se(t,e)).filter(Boolean).map(e=>[e.x,e.y]),s=a>=0?d[a]:(l=Se(t,t.getView().getCenter()))?[l.x,l.y]:null;if(s){var c=C(s,d,e);n({selectedVertexIndex:c,selectedVertexType:c<o.length?"vertex":"midpoint"})}}})(e.key,t,r,n)):r().selectedVertexIndex>=0&&(e.preventDefault(),e.stopPropagation(),a(e))},c=e=>{if(null==l||l()," "===e.key)e.preventDefault(),r().selectedVertexIndex<0&&((e,t,r)=>{var{vertices:n,midpoints:a}=t();if(n.length){var o=Se(e,e.getView().getCenter());if(o){var i=[...n.map(t=>Se(e,t)),...a.map(t=>Se(e,t))].filter(Boolean).map(e=>[e.x,e.y]),l=C([o.x,o.y],i,void 0);r({selectedVertexIndex:l,selectedVertexType:l<n.length?"vertex":"midpoint"})}}})(t,r,n);else if(We.has(e.key))s(e);else if("z"===e.key&&(e.metaKey||e.ctrlKey)){var a,o=null===(a=document.activeElement)||void 0===a?void 0:a.tagName;Je.has(o)||(e.preventDefault(),e.stopPropagation(),i())}};return e=>{d()||("Escape"===e.key&&r().selectedVertexIndex>=0?(e.preventDefault(),o.start=null,o.index=null,n({selectedVertexIndex:-1,selectedVertexType:null})):c(e))}},Qe=e=>{var t,{map:r,snap:n,getState:a,setState:o,onVertexMoved:i,onInserted:l,onDeleted:d,onUndo:s,onKeyboardActive:c}=e,{nudge:u,keyMove:v,nudgeByDelta:p}=Xe({map:r,snap:n,getState:a,setState:o,onInserted:l,onVertexMoved:i}),g=null!==(t=r.getViewport().closest('[role="application"]'))&&void 0!==t?t:r.getViewport(),y=()=>(e=>{var t=document.activeElement;return!(!t||t===document.body)&&!e.contains(t)&&(Je.has(t.tagName)||t.isContentEditable||t.hasAttribute("tabindex"))})(g),m=Ze({map:r,getState:a,setState:o,nudge:u,keyMove:v,onUndo:s,onKeyboardActive:c,isFocused:y}),h=(e=>{var{snap:t,keyMove:r,onVertexMoved:n,onDeleted:a,isFocused:o}=e;return e=>{o()||(We.has(e.key)&&r.start&&null!=r.index&&(null==t||t.hideIndicator(),n({vertexIndex:r.index,previousCoord:r.start}),r.start=null,r.index=null),"Delete"===e.key&&a())}})({snap:n,keyMove:v,onVertexMoved:i,onDeleted:d,isFocused:y});return globalThis.addEventListener("keydown",m,{capture:!0}),globalThis.addEventListener("keyup",h,{capture:!0}),{nudgeByDelta:p,destroy(){globalThis.removeEventListener("keydown",m,{capture:!0}),globalThis.removeEventListener("keyup",h,{capture:!0})}}},$e=(e,t)=>{switch(t.type){case"move_vertex":return((e,t)=>{var{vertexIndex:r,previousCoord:n}=t,a=e.getGeometry(),o={type:a.getType(),coordinates:a.getCoordinates()},i=Fe(o),l=je(i,r);if(!l)return-1;var d=Me(o,l.segment.path);return d[l.localIdx]=[...n],l.segment.closed&&0===l.localIdx&&(d[d.length-1]=[...n]),a.setCoordinates(o.coordinates),r})(e,t);case"insert_vertex":return((e,t)=>{var{vertexIndex:r}=t,n=e.getGeometry(),a={type:n.getType(),coordinates:n.getCoordinates()},o=Fe(a),i=je(o,r);if(i){var l=Me(a,i.segment.path);l.splice(i.localIdx,1),i.segment.closed&&(l[l.length-1]=[...l[0]]),n.setCoordinates(a.coordinates)}return-1})(e,t);case"delete_vertex":return((e,t)=>{var{vertexIndex:r,deletedCoord:n}=t,a=e.getGeometry(),o={type:a.getType(),coordinates:a.getCoordinates()},i=Fe(o),l=je(i,r);if(!l)for(var d of i)if(r===d.start+d.length){l={segment:d,localIdx:d.length};break}if(!l)return-1;var s=Me(o,l.segment.path);return s.splice(l.localIdx,0,[...n]),l.segment.closed&&(s[s.length-1]=[...s[0]]),a.setCoordinates(o.coordinates),r})(e,t);default:return-1}},et="touch",tt="vertex",rt="commit-move",nt="commit-insert",at="commit-delete",ot={move_vertex:rt,insert_vertex:nt,delete_vertex:at},it={move_vertex:rt,insert_vertex:at,delete_vertex:nt},lt=e=>{var{olFeature:t,undoStack:r,selection:n,getTouchHandler:a}=e,{state:o,setState:i,syncGeom:l,emitGeometryValidation:d}=n;return{doDeleteVertex:()=>{if(!(o.selectedVertexType!==tt||o.selectedVertexIndex<0)){var e=((e,t)=>{var r=e.getGeometry(),n={type:r.getType(),coordinates:r.getCoordinates()},a=De(n),o=Fe(n),i=je(o,t);if(!i)return null;var{segment:l}=i,d=l.closed?w.Polygon:w.LineString;if(l.length<=d)return null;var s=[...a[t]],c=Me(n,l.path);return c.splice(i.localIdx,1),l.closed&&(c[c.length-1]=[...c[0]]),r.setCoordinates(n.coordinates),{deletedIndex:t,deletedCoord:s}})(t,o.selectedVertexIndex);e&&(r.push({type:"delete_vertex",vertexIndex:e.deletedIndex,deletedCoord:e.deletedCoord}),l(),d(at,e.deletedIndex),i({selectedVertexIndex:-1,selectedVertexType:null}))}},doUndo:()=>{var e=r.pop();if(e){var n=o.selectedVertexIndex,s=$e(t,e);l(),d(it[e.type],s);var c=n>=0?s:-1;i({selectedVertexIndex:c,selectedVertexType:c>=0?tt:null}),n>=0&&c>=0&&o.interfaceType===et&&a().updateTargetPosition()}}}},dt=e=>{var{map:t,container:r,manager:n,snap:a,olFeature:o,undoStack:i,selection:u}=e,{state:v,getState:p,setState:g,syncGeom:y,emitGeometryValidation:m}=u,h=e=>g({selectedVertexIndex:e,selectedVertexType:tt}),x=(e=>{var{map:t,container:r,getState:n,setState:a,onVertexMoved:o,onTap:i,colors:u,snap:v}=e,p=l(r);d(p,u);var g={scale:1,ox:0,oy:0},y=e=>({x:e.x*g.scale+g.ox,y:e.y*g.scale+g.oy}),m=()=>{var e=t.getViewport(),n=e.getBoundingClientRect(),a=r.getBoundingClientRect(),o=e.offsetWidth>0?n.width/e.offsetWidth:1,i=r.offsetWidth>0?a.width/r.offsetWidth:1;Object.assign(g,{scale:o/i,ox:(n.left-a.left)/i,oy:(n.top-a.top)/i})},h=Ke({container:r,map:t,targetEl:p,olToCSS:y,cssToOl:e=>({x:(e.x-g.ox)/g.scale,y:(e.y-g.oy)/g.scale}),getState:n,setState:a,onVertexMoved:o,onTap:i,snap:v}),x=()=>{var{selectedVertexIndex:e,vertices:r,interfaceType:a}=n();if(e<0||!r[e]||"touch"!==a)s(p);else{var o=Se(t,r[e]);o?c(p,y(o)):s(p)}},f=()=>{var{selectedVertexIndex:e,interfaceType:t}=n();e>=0&&!h.isDragging()&&"touch"===t&&x()};t.on("postrender",f);var S=()=>{m(),t.once("postrender",x)};return t.on("change:size",S),m(),{updateTargetPosition:x,updateColors(e){d(p,e)},hide(){s(p)},destroy(){t.un("change:size",S),t.un("postrender",f),h.destroy(),s(p)}}})({map:t,container:r,getState:p,setState:g,colors:n.colors,snap:a,onVertexMoved(e){var{vertexIndex:t,previousCoord:r}=e;i.push({type:"move_vertex",vertexIndex:t,previousCoord:r}),y(),m(rt,t),h(t),x.updateTargetPosition()},onTap(e){if(e){if(e.type===tt)return h(e.index),void x.updateTargetPosition();var t=Ue(o,v.midpoints,e.index,v.vertices.length);t&&(i.push({type:"insert_vertex",vertexIndex:t.insertedIndex}),y(),m(nt,t.insertedIndex),h(t.insertedIndex),x.updateTargetPosition())}else g({selectedVertexIndex:-1,selectedVertexType:null})}});return u.setHooks({onDeselect:()=>x.hide(),onUpdate(){v.interfaceType===et&&x.updateTargetPosition()}}),x},st=e=>{var{map:t,manager:a,options:i}=e,{featureId:l,container:d,interfaceType:s,deleteVertexButtonId:c,snap:u}=i,{store:v,undoStack:p}=a,g=v.getOL(l);if(!g)return null;var y=g.getStyle(),m=((e,t)=>{var a=t,o=-1,i=new n,l=new r({source:i,style:e=>e.get("midpointIndex")===o?null:[a],zIndex:101});return e.addLayer(l),{update(e){i.clear();var t=Ae(e).map((e,t)=>{var r=new L({geometry:new k(e)});return r.set("midpointIndex",t),r});i.addFeatures(t)},setSelected(e){o=e,i.changed()},updateStyle(e){a=e,i.changed()},getCoords:()=>i.getFeatures().sort((e,t)=>e.get("midpointIndex")-t.get("midpointIndex")).map(e=>e.getGeometry().getCoordinates()),remove(){i.clear(),e.removeLayer(l)}}})(t,a.styles.midpointStyle),h=((e,t)=>{var a=t,o=-1,i=new n,l=new r({source:i,style:e=>e.get("vertexIndex")===o?null:[a],zIndex:102});return e.addLayer(l),{update(e){i.clear(),De(e).forEach((e,t)=>{var r=new L({geometry:new k(e)});r.set("vertexIndex",t),i.addFeature(r)})},setSelected(e){o=e,i.changed()},updateStyle(e){a=e,i.changed()},remove(){i.clear(),e.removeLayer(l)}}})(t,a.styles.vertexStyle),x=Ge(t,()=>a.styles),f=Re({map:t,manager:a,store:v,olFeature:g,interfaceType:s,layers:{vertexLayer:h,midpointLayer:m,activeLayer:x}}),{state:S,getState:w,setState:T,syncGeom:V,emitGeometryValidation:P}=f,C=Ne({map:t,olFeature:g,getState:w,onModifyEnd(e){V();var t=e&&((e,t)=>{if(t.length>e.length){var r=t.findIndex((t,r)=>{var n;return t[0]!==(null===(n=e[r])||void 0===n?void 0:n[0])});return{type:"insert_vertex",vertexIndex:Math.max(0,r)}}if(t.length===e.length){var n=t.findIndex((t,r)=>t[0]!==e[r][0]||t[1]!==e[r][1]);if(n>=0)return{type:"move_vertex",vertexIndex:n,previousCoord:e[n]}}return null})(e,S.vertices);t&&(p.push(t),P(ot[t.type],t.vertexIndex),T({selectedVertexIndex:t.vertexIndex,selectedVertexType:tt}))}});V();var b={vertexLayer:h,midpointLayer:m,activeLayer:x},_=(e=>{var{map:t,manager:r,olFeature:n}=e,a=!1;n.setStyle(()=>a?r.styles.editFeatureStyleInvalid:r.styles.editFeatureStyle);var i=o({onChange:(e,n)=>{a=e,t.render(),r.emit(I.VALIDITY_CHANGE,{valid:!e,reason:n})}}),l=()=>{var e,t,a=n.getGeometry(),o=a.getType(),l=a.getCoordinates(),d="Polygon"===o?Math.max(0,(null!==(e=null===(t=l[0])||void 0===t?void 0:t.length)&&void 0!==e?e:1)-1):l.length;i.update({feature:{type:"Feature",geometry:{type:o,coordinates:l}},context:{mode:"edit_vertex"},numVertices:d,onGeometryChange:r._geometryValidator})};return n.getGeometry().on("change",l),{liveStroke:i,destroy(){n.getGeometry().un("change",l),i.destroy()}}})({map:t,manager:a,olFeature:g}),E=dt({map:t,container:d,manager:a,snap:u,olFeature:g,undoStack:p,selection:f}),O=lt({olFeature:g,undoStack:p,selection:f,getTouchHandler:()=>E}),D=(e=>{var{map:t,container:r,snap:n,undoStack:a,selection:o,touchHandler:i,actions:l}=e,{state:d,getState:s,setState:c,syncGeom:u,emitGeometryValidation:v}=o;return Qe({map:t,getState:s,setState:c,snap:n,onVertexMoved(e){var{vertexIndex:t,previousCoord:r}=e;a.push({type:"move_vertex",vertexIndex:t,previousCoord:r}),u(),v(rt,t),c({selectedVertexIndex:t,selectedVertexType:tt})},onInserted(e){var{insertedIndex:t}=e;a.push({type:"insert_vertex",vertexIndex:t}),u(),v(nt,t)},onDeleted:l.doDeleteVertex,onUndo:l.doUndo,onKeyboardActive(){"keyboard"!==d.interfaceType&&(d.interfaceType="keyboard",i.hide(),r.focus({preventScroll:!0}))}})})({map:t,container:d,snap:u,undoStack:p,selection:f,touchHandler:E,actions:O}),F=(e=>{var{map:t,container:r,getState:n,setState:a,touchHandler:o,deleteVertexButtonId:i,onDeleteVertex:l}=e,d=e=>{var{vertices:r,midpoints:a}=n(),o=t.getEventPixel(e);return He(t,r,a,{x:o[0],y:o[1]})},s=e=>{var t=n();if("touch"===e.pointerType)return t.interfaceType="touch",void o.updateTargetPosition();t.interfaceType="mouse";var r=d(e);"vertex"===(null==r?void 0:r.type)&&a({selectedVertexIndex:r.index,selectedVertexType:"vertex"})},c=e=>{if("touch"!==n().interfaceType){var t=d(e);"vertex"===(null==t?void 0:t.type)?a({selectedVertexIndex:t.index,selectedVertexType:"vertex"}):"midpoint"===(null==t?void 0:t.type)||a({selectedVertexIndex:-1,selectedVertexType:null})}},u=e=>{var t=n();"mouse"===e.pointerType&&"mouse"!==t.interfaceType&&(t.interfaceType="mouse",o.hide())},v=e=>{i&&e.target.closest("#".concat(i))&&l()};return r.addEventListener("pointerdown",s),r.addEventListener("pointerenter",u),r.addEventListener("pointermove",u),r.addEventListener("click",c),globalThis.addEventListener("click",v),{destroy(){r.removeEventListener("pointerdown",s),r.removeEventListener("pointerenter",u),r.removeEventListener("pointermove",u),r.removeEventListener("click",c),globalThis.removeEventListener("click",v)}}})({map:t,container:d,getState:w,setState:T,touchHandler:E,deleteVertexButtonId:c,onDeleteVertex:O.doDeleteVertex}),j=(e=>{var{map:t,manager:r,layers:n,selection:a,touchHandler:o,live:i}=e,{state:l}=a,d=e=>{i.liveStroke.refresh(),n.vertexLayer.updateStyle(e.vertexStyle),n.midpointLayer.updateStyle(e.midpointStyle),n.activeLayer.update(l),o.updateColors(r.colors)};r.on(be,d);var s=()=>{l.interfaceType!==et||l.selectedVertexIndex<0||t.once("postrender",()=>o.updateTargetPosition())};return t.on("change:size",s),{destroy(){r.off(be,d),t.un("change:size",s)}}})({map:t,manager:a,layers:b,selection:f,touchHandler:E,live:_});return(e=>{var{manager:t,store:r,olFeature:n,originalFeatureStyle:a,selection:o,actions:i,parts:l}=e,{state:d}=o,{touchHandler:s}=l;return{setInterfaceType(e){e!==d.interfaceType&&(d.interfaceType=e,e===et?s.updateTargetPosition():s.hide())},done(){t.emit(I.EDIT_FINISH,r.toGeoJSON(n))},setInvalid(e){l.live.liveStroke.set(e)},cancel(){},undo:i.doUndo,deleteVertex:i.doDeleteVertex,nudgeSelectedVertex:l.keyboardHandler.nudgeByDelta,destroy(){l.live.destroy(),n.setStyle(a),o.destroy(),l.mapSync.destroy(),l.pointerHandlers.destroy(),l.modify.destroy(),l.layers.activeLayer.remove(),l.layers.midpointLayer.remove(),l.layers.vertexLayer.remove(),s.destroy(),l.keyboardHandler.destroy()}}})({manager:a,store:v,olFeature:g,originalFeatureStyle:y,selection:f,actions:O,parts:{touchHandler:E,keyboardHandler:D,pointerHandlers:F,modify:C,mapSync:j,layers:b,live:_}})};function ct(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function ut(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?ct(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ct(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}class vt{constructor(e){var t,n,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._map=e,this._pluginConfig=a,this._mode="disabled",this._modeInstance=null,this._listeners=new Map,this.store=H(),this.undoStack=v(e=>this.emit(I.UNDO_CHANGE,e)),this.colors=p(null,a),this.styles=W(this.colors),this.snap=fe(e,null!==(t=a.snapLayers)&&void 0!==t?t:null,this.colors,null!==(n=a.snapRadius)&&void 0!==n?n:S.snapRadius),this._layer=new r({source:this.store.source,style:this.styles.createFeatureStyle(),zIndex:100}),this._layer.set("layerId","draw"),e.addLayer(this._layer)}setMapStyle(e){var t;this.colors=p(e,this._pluginConfig),this.styles=W(this.colors),this._layer.setStyle(this.styles.createFeatureStyle()),this.store.source.changed(),null===(t=this.snap)||void 0===t||t.updateColors(this.colors),this.emit(be,this.styles)}on(e,t){this._listeners.has(e)||this._listeners.set(e,new Set),this._listeners.get(e).add(t)}off(e,t){var r;null===(r=this._listeners.get(e))||void 0===r||r.delete(t)}emit(e,t){var r=this._listeners.get(e);r&&Array.from(r).forEach(e=>e(t))}changeMode(e){var r=arguments,n=this;return t(function*(){var t,a,o,i=r.length>1&&void 0!==r[1]?r[1]:{};null===(t=n._modeInstance)||void 0===t||t.destroy(),n._modeInstance=null,n._mode=e;var l="draw_polygon"===e||"draw_line"===e||"edit_vertex"===e;null===(a=n.snap)||void 0===a||a.setIndicatorActive(l);var d=ut(ut({},i),{},{snap:n.snap});"draw_polygon"===e||"draw_line"===e?n._modeInstance=Oe({map:n._map,manager:n,options:d}):"edit_vertex"===e&&(n._modeInstance=st({map:n._map,manager:n,options:d})),null===(o=n.snap)||void 0===o||o.reattach()})()}getMode(){return this._mode}done(){var e;null===(e=this._modeInstance)||void 0===e||e.done()}cancel(){var e;null===(e=this._modeInstance)||void 0===e||e.cancel(),this.changeMode("disabled")}undo(){var e;null===(e=this._modeInstance)||void 0===e||e.undo()}deleteVertex(){var e;null===(e=this._modeInstance)||void 0===e||e.deleteVertex()}nudgeSelectedVertex(e,t,r){var n,a;null===(n=this._modeInstance)||void 0===n||null===(a=n.nudgeSelectedVertex)||void 0===a||a.call(n,e,t,r)}setInvalid(e){var t,r;null===(t=this._modeInstance)||void 0===t||null===(r=t.setInvalid)||void 0===r||r.call(t,e)}setDrawingPreviewProperty(e,t){var r,n;null===(r=this._modeInstance)||void 0===r||null===(n=r.setDrawingPreviewProperty)||void 0===n||n.call(r,e,t)}setInterfaceType(e){var t,r;null===(t=this._modeInstance)||void 0===t||null===(r=t.setInterfaceType)||void 0===r||r.call(t,e),this.emit(I.INTERFACE_TYPE_CHANGE,{interfaceType:e})}get(e){return this.store.get(e)}add(e){return this.store.add(e)}delete(e){return this.store.remove(e)}deleteAll(){return this.store.clear()}remove(){var e,t;null===(e=this._modeInstance)||void 0===e||e.destroy(),this._modeInstance=null,null===(t=this.snap)||void 0===t||t.destroy(),this.snap=null,this.store.clear(),this._map.removeLayer(this._layer),this._listeners.clear()}}function pt(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function gt(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?pt(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):pt(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}class yt{constructor(t,r){var n;e(this,"_snapEnabled",!1);var{manager:a,remove:o}=(e=>{var{mapProvider:t,events:r,eventBus:n,pluginConfig:a={},mapStyle:o=null}=e,{map:i}=t,l=new vt(i,a);o&&l.setMapStyle(o),t.draw=l;var d=e=>{var r;t.drawScale=null!==(r=b[e])&&void 0!==r?r:1};n.on(r.MAP_SET_SIZE,d);var s=e=>{l.setMapStyle(e)};return n.on(r.MAP_SET_STYLE,s),{manager:l,remove(){n.off(r.MAP_SET_SIZE,d),n.off(r.MAP_SET_STYLE,s),l.remove(),t.draw=null}}})({mapProvider:t,events:r.events,eventBus:r.eventBus,pluginConfig:null!==(n=r.pluginConfig)&&void 0!==n?n:{snapLayers:r.snapLayers},mapStyle:r.mapStyle});this._cleanupOLDraw=o,this._manager=a,this._mapProvider=t}changeMode(e){var t=gt(gt({},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}),{},{mapProvider:this._mapProvider});return"draw_polygon"===e&&(t.geometryType="Polygon"),"draw_line"===e&&(t.geometryType="LineString"),this._manager.changeMode(e,t)}getMode(){return this._manager.getMode()}setInterfaceType(e){this._manager.setInterfaceType(e)}done(){this._manager.undoStack.clear(),this._manager.done()}cancel(){this._manager.undoStack.clear(),this._manager.cancel()}undo(){this._manager.undo()}deleteVertex(){this._manager.deleteVertex()}nudgeSelectedVertex(e,t,r){this._manager.nudgeSelectedVertex(e,t,r)}setGeometryValid(e){this._manager._geometryValid=e}set _geometryValidator(e){this._manager._geometryValidator=e}get _geometryValidator(){return this._manager._geometryValidator}setInvalid(e){this._manager.setInvalid(e)}get(e){return this._manager.get(e)}add(e){return this._manager.add(e)}delete(e){return this._manager.delete(e)}deleteAll(){return this._manager.deleteAll()}setSnapEnabled(e){var t;this._snapEnabled=e,null===(t=this._manager.snap)||void 0===t||t.setActive(e)}setSnapLayers(e){var t,r=null==e?void 0:e.map(e=>"stroke-inactive.cold"===e?this._manager._layer:e);null===(t=this._manager.snap)||void 0===t||t.setSnapLayers(r)}isSnapEnabled(){return this._snapEnabled}setFeatureProperty(){}setDrawingPreviewProperty(e,t){this._manager.setDrawingPreviewProperty(e,t)}on(e,t){this._manager.on(e,t)}off(e,t){this._manager.off(e,t)}remove(){this._cleanupOLDraw()}}export{yt as OLDrawAdapter};
1
+ import e from"@babel/runtime/helpers/defineProperty";import t from"@babel/runtime/helpers/asyncToGenerator";import r from"ol/layer/Vector.js";import n from"ol/source/Vector.js";import a from"ol/format/GeoJSON.js";import{c as o,a as i,b as l,d,h as s,s as c,i as u,e as v,r as p}from"./im-draw-ml-adapter.js";import g from"ol/style/Style.js";import y from"ol/style/Fill.js";import m from"ol/style/Stroke.js";import h from"ol/style/Circle.js";import x from"ol/geom/MultiPoint.js";import{S as f,T as S,A as I,M as w,a as T,w as V,K as C,s as P,t as b}from"./im-draw-plugin.js";import{transform as _}from"ol/proj.js";import E from"ol/layer/VectorTile.js";import L from"ol/Feature.js";import k from"ol/geom/Point.js";import{Style as O}from"ol/style.js";import D from"ol/interaction/Interaction.js";import F from"ol/interaction/Draw.js";import{noModifierKeys as j}from"ol/events/condition.js";import M from"ol/interaction/Modify.js";import A from"ol/Collection.js";import"preact/compat";import"@babel/runtime/helpers/objectWithoutProperties";var G="EPSG:27700",R=new a({dataProjection:G,featureProjection:G}),H=()=>{var e=new n;return{source:e,getOL(t){var r;return null!==(r=e.getFeatureById(String(t)))&&void 0!==r?r:null},add(t){var r=this.getOL(t.id);r&&e.removeFeature(r);var n=R.readFeature(t);return e.addFeature(n),n},get(e){var t=this.getOL(e);return t?R.writeFeatureObject(t):null},remove(t){var r=Array.isArray(t)?t:[t];for(var n of r){var a=this.getOL(n);a&&e.removeFeature(a)}},clear(){e.clear()},toGeoJSON:e=>R.writeFeatureObject(e),fromGeoJSON:e=>R.readFeature(e)}},N={Polygon:2,LineString:1},U=e=>{var t,r=e.getType();return("Polygon"===r?null!==(t=e.getCoordinates()[0])&&void 0!==t?t:[]:e.getCoordinates()).slice(0,-N[r])},B=e=>{var t;return null!==(t=U(e).at(-1))&&void 0!==t?t:null},q={outer:f.vertexHaloRadius+3,mid:f.vertexHaloRadius,inner:f.vertexRadius},Y={outer:f.midpointHaloRadius+3,mid:f.midpointHaloRadius,inner:f.midpointRadius},z=(e,t,r,n,a)=>{e.beginPath(),e.arc(t,r,n,0,2*Math.PI),e.fillStyle=a,e.fill()},K=(e,t,r)=>{var{outer:n,mid:a,inner:o}=e;return(e,i)=>{var l=i.context,d=i.pixelRatio,[s,c]=e;l.save(),z(l,s,c,n*d,t.editActive),z(l,s,c,a*d,t.editHalo),z(l,s,c,o*d,t[r]),l.restore()}},X=e=>e.charAt(0).toUpperCase()+e.slice(1),W=e=>{var{vertexImage:t,vertexStyle:r,selectedVertexStyle:n}=(e=>{var t=new h({radius:f.vertexRadius,fill:new y({color:e.editVertex})});return{vertexImage:t,vertexStyle:new g({image:t}),selectedVertexStyle:new g({renderer:K(q,e,"editVertex")})}})(e),{midpointStyle:a,selectedMidpointStyle:o}=(e=>({midpointStyle:new g({image:new h({radius:f.midpointRadius,fill:new y({color:e.editMidpoint})})}),selectedMidpointStyle:new g({renderer:K(Y,e,"editMidpoint")})}))(e),i=new g({stroke:new m({color:e.editStroke,width:2}),fill:new y({color:e.editFill})}),l=new g({stroke:new m({color:e.invalidStroke,width:2,lineDash:[2,4]})}),d=(e=>({valid:new g({stroke:new m({color:e.editStroke,width:2}),fill:new y({color:e.editFill})}),invalid:new g({stroke:new m({color:e.invalidStroke,width:2,lineDash:[2,4]})}),splitValid:new g({stroke:new m({color:e.splitValid,width:2})}),splitInvalid:new g({stroke:new m({color:e.splitInvalid,width:2,lineDash:[2,4]})})}))(e),s=new x([]),c=new g({image:t,geometry:e=>{var t=U(e.getGeometry());return t.length?(s.setCoordinates(t),s):null}});return{vertexStyle:r,selectedVertexStyle:n,midpointStyle:a,selectedMidpointStyle:o,editFeatureStyle:i,editFeatureStyleInvalid:l,createSketchStyle:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return r=>{var n=r.getGeometry().getType();if("Point"===n)return[];var a=r.get("splitter"),o=t?d.invalid:d.valid;return"valid"===a&&(o=d.splitValid),"invalid"===a&&(o=d.splitInvalid),n===e?[o,c]:[o]}},createFeatureStyle:()=>t=>{var r=t.getProperties(),n=e.mapStyleId,a=n&&r["stroke".concat(X(n))]||r.stroke||e.shapeStroke,o=n&&r["fill".concat(X(n))]||r.fill||e.shapeFill,i=r.strokeWidth||e.strokeWidth;return[new g({stroke:new m({color:a,width:i}),fill:new y({color:o})})]}}},J=(e,t)=>{var r=e[0]-t[0],n=e[1]-t[1];return r*r+n*n},Z=(e,t,r)=>{var n=r[0]-t[0],a=r[1]-t[1],o=n*n+a*a;if(0===o)return[t[0],t[1]];var i=Math.max(0,Math.min(1,((e[0]-t[0])*n+(e[1]-t[1])*a)/o));return[t[0]+i*n,t[1]+i*a]},Q=(e,t)=>$(e,t)?t:e,$=(e,t)=>e?!!t&&("edge"===e.type&&"vertex"===t.type||("vertex"!==e.type||"edge"!==t.type)&&t.distSq<e.distSq):!!t,ee=(e,t,r,n)=>{for(var a=null,o=n&&e.length>1?e.length-1:e.length,i=n?o:o-1,l=0;l<o;l++){var d=e[l],s=J(t,d);s<=r&&(a=Q(a,{type:"vertex",coord:[d[0],d[1]],distSq:s}))}for(var c=0;c<i;c++){var u=e[c],v=e[(c+1)%o],p=Z(t,u,v),g=J(t,p);g<=r&&(a=Q(a,{type:"edge",coord:p,distSq:g}))}return a},te=(e,t,r,n,a,o)=>{for(var i=null,l=0;l<n;l++){var d=t+2*l,s=t+(l+1)%r*2,c=[e[d],e[d+1]],u=[e[s],e[s+1]],v=Z(a,c,u),p=J(a,v);p<=o&&(i=Q(i,{type:"edge",coord:v,distSq:p,seg:[c,u]}))}return i},re=(e,t,r)=>[e>0||r?e>0?e-1:t-1:null,e<t-1||r?e<t-1?e+1:0:null],ne=(e,t,r,n,a,o)=>{for(var i=n===r,l=r=>null===r?null:[e[t+2*r],e[t+2*r+1]],d=null,s=0;s<r;s++){var c=l(s),u=J(a,c);if(u<=o){var[v,p]=re(s,r,i),g=[l(v),l(p)];d=Q(d,{type:"vertex",coord:c,distSq:u,adjacent:g})}}return d},ae=(e,t,r,n,a,o)=>{var i=(r-t)/2,l=o?i:i-1;return{vertex:ne(e,t,i,l,n,a),edge:te(e,t,i,l,n,a)}},oe={point:(e,t,r)=>{var n=e.getCoordinates(),a=J(t,n);return a<=r?{type:"vertex",coord:[n[0],n[1]],distSq:a}:null},lineString:(e,t,r)=>ee(e.getCoordinates(),t,r,!1),linearRing:(e,t,r)=>ee(e.getCoordinates(),t,r,!0),polygon:(e,t,r)=>{var n=null;for(var a of e.getCoordinates())n=Q(n,ee(a,t,r,!0));return n},multiLineString:(e,t,r)=>{var n=null;for(var a of e.getCoordinates())n=Q(n,ee(a,t,r,!1));return n},multiPolygon:(e,t,r)=>{var n=null;for(var a of e.getCoordinates())for(var o of a)n=Q(n,ee(o,t,r,!0));return n}},ie=(e,t,r)=>{var n=e.getGeometry();if(!n)return null;var a=n.getType(),o=oe[a[0].toLowerCase()+a.slice(1)];return o?o(n,t,r):null};function le(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function de(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?le(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):le(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var se=(e,t,r)=>{if(!t||!r)return!1;var[n,a,o,i]=e.extent,l=(t,r,n)=>Math.min(Math.abs(t-r),Math.abs(t-n))<=e.band,d=Math.abs(t[0]-r[0])<=e.eps&&l(t[0],n,o),s=Math.abs(t[1]-r[1])<=e.eps&&l(t[1],a,i);return d||s},ce=(e,t)=>{var r,n=((e,t)=>{if(!e)return null;var{tileGrid:r,viewProj:n,sourceProj:a,zoom:o}=e,i=e=>e?_(e,n,a):null,l=i(t),d=r.getTileCoordForCoordAndZ(l,o),s=r.getTileCoordExtent(d),c=s[2]-s[0];return{toSource:i,anchor:l,extent:s,band:.0625*c,eps:c/4096*2}})(e,t.coord);if(!n)return!1;if("edge"===t.type){var[a,o]=t.seg;return se(n,n.toSource(a),n.toSource(o))}var[i,l]=null!==(r=t.adjacent)&&void 0!==r?r:[];return se(n,n.anchor,n.toSource(i))||se(n,n.anchor,n.toSource(l))},ue=()=>!0===globalThis.DEBUG_SNAP_VISIBILITY,ve=(e,t)=>{ue()&&console.log("[snap-candidate-found]",{type:e.type,layerId:null==t?void 0:t.id,layerType:null==t?void 0:t.type,coord:[e.coord[0].toFixed(2),e.coord[1].toFixed(2)],distSq:e.distSq.toFixed(2)})},pe=e=>{var{candidate:t,cursorCoord:r,mapboxLayer:n,boundaryState:a,map:o,vtLayers:i,resolution:l}=e;return ce(a,t)?(ue()&&console.log("[snap-filtered] tile clip artefact",t.type),!0):!("edge"!==t.type||"fill"!==(null==n?void 0:n.type)||!((e,t,r,n,a,o)=>{var i=e[0]-t[0],l=e[1]-t[1],d=i*i+l*l;if(d<1)return!1;var s=Math.sqrt(d),c=4*o,u=[e[0]+i/s*c,e[1]+l/s*c],v=n.getPixelFromCoordinate(u);return!!v&&!!n.forEachFeatureAtPixel(v,e=>{var t;return(null===(t=e.get("mapbox-layer"))||void 0===t?void 0:t.id)===r},{hitTolerance:2,layerFilter:e=>a.includes(e)})})(t.coord,r,n.id,o,i,l))&&(ue()&&console.log("[snap-filtered] invisible fill boundary"),!0)},ge=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=new Set,a=[],o=e=>{for(var t of(n=new Set,a=[],null!=e?e:[]))"string"==typeof t?n.add(t):t instanceof r&&a.push(t)};o(t);return{query:(t,r)=>{ue()&&console.log("[snap-query]",{coord:[t[0].toFixed(2),t[1].toFixed(2)],radiusPx:r,vtLayerCount:n.size,olLayerCount:a.length});var o=e.getView().getResolution();if(!o)return null;var i=r*o,l=i*i,d=[t[0]-i,t[1]-i,t[0]+i,t[1]+i],s=null;for(var c of a){var u=c.getSource();if(u)for(var v of u.getFeaturesInExtent(d))s=Q(s,ie(v,t,l))}if(n.size>0){var p=(e=>{var t=[];return e.getLayers().forEach(e=>{e instanceof E&&t.push(e)}),t})(e),g=p.length>0?e.getPixelFromCoordinate(t):null;if(g){var y=new Map;e.forEachFeatureAtPixel(g,(r,a)=>{var i=r.get("mapbox-layer");if(n.has(null==i?void 0:i.id)){var d=((e,t,r)=>{var n=e.getType(),a=e.getFlatCoordinates(),o=null,i=null;if("Point"===n){var l=J(t,a);l<=r&&(o={type:"vertex",coord:[a[0],a[1]],distSq:l})}else if("LineString"===n)({vertex:o,edge:i}=ae(a,0,a.length,t,r,!1));else if("Polygon"===n||"MultiLineString"===n){var d=e.getEnds(),s=0,c="Polygon"===n;for(var u of d){var v=ae(a,s,u,t,r,c);o=Q(o,v.vertex),i=Q(i,v.edge),s=u}}return[o,i].filter(Boolean)})(r,t,l);if(d.length){y.has(a)||y.set(a,((e,t)=>{var r,n=e.getSource(),a=null==n?void 0:n.getTileGrid();if(!a)return null;var o=t.getView().getProjection(),i=null!==(r=n.getProjection())&&void 0!==r?r:o,l=a.getZForResolution(t.getView().getResolution(),0);return{tileGrid:a,viewProj:o,sourceProj:i,zoom:l}})(a,e));var c=y.get(a);s=((e,t,r)=>{var n=e;for(var a of t)ve(a,r.mapboxLayer),pe(de({candidate:a},r))||(n=Q(n,a));return n})(s,d,{cursorCoord:t,mapboxLayer:i,boundaryState:c,map:e,vtLayers:p,resolution:o})}}},{hitTolerance:r,layerFilter:e=>p.includes(e)})}}return s?{type:s.type,coord:s.coord}:null},setLayers:o}},ye=e=>(t,r)=>{var n=r.context,[a,o]=t;n.beginPath(),n.arc(a,o,10*r.pixelRatio,0,2*Math.PI),n.fillStyle=e,n.fill()},me=e=>({vertex:new O({renderer:ye(e.snapVertex)}),edge:new O({renderer:ye(e.snapEdge)})}),he=new Set(["pointermove","pointerdrag","pointerdown","pointerup","singleclick","click"]),xe=(e,t,r,n)=>{var a=new D({handleEvent:o=>(a.getActive()&&((e,t,r,n,a)=>{var{type:o}=e;if("pointerout"!==o&&"pointerleave"!==o){if(he.has(o)){var i=t.query(e.coordinate,n);i&&(e.coordinate=i.coord.slice()),"pointermove"===o&&a()?i?r.show(i.coord,i.type):r.hide():"pointerdrag"===o&&r.hide()}}else r.hide()})(o,e,t,r,n),!0)});return a},fe=(e,t,a,o)=>{if(null==t||!t.length)return null;var i=ge(e,t),l=((e,t)=>{var a=me(t),o=new n,i=new r({source:o,style:e=>{var t;return null!==(t=a[e.get("snapType")])&&void 0!==t?t:null},zIndex:200,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(i);var l=new L,d=!1;return{show(e,t){l.setGeometry(new k(e)),l.set("snapType",t,!0),d?o.changed():(o.addFeature(l),d=!0)},hide(){d&&(o.clear(),d=!1)},updateColors(e){a=me(e),d&&o.changed()},remove(){o.clear(),e.removeLayer(i)}}})(e,a),d=!1,s=xe(i,l,o,()=>d);e.addInteraction(s),s.setActive(!1);var c=!1;return{snapRadius:o,apply(e){if(!c)return e;var t=i.query(e,o);return t?(l.show(t.coord,t.type),t.coord):(l.hide(),e)},hideIndicator(){l.hide()},setIndicatorActive(e){d=e,e||l.hide()},setActive(e){c=e,s.setActive(e),e||l.hide()},setSnapLayers(e){i.setLayers(null==e?t:e)},reattach(){e.removeInteraction(s),e.addInteraction(s)},updateColors(e){l.updateColors(e)},destroy(){e.removeInteraction(s),l.remove()}}},Se=(e,t)=>{var r=e.getPixelFromCoordinate(t);return r?{x:r[0],y:r[1]}:null},Ie=(e,t)=>Math.sqrt((e.x-t.x)**2+(e.y-t.y)**2),we=(e,t,r,n)=>{var a=e.getPixelFromCoordinate(t);return a?e.getCoordinateFromPixel([a[0]+r,a[1]+n]):t},Te=4,Ve=e=>{var{drawInteraction:t,canFinish:r,geom:n,sketchCoords:a,coord:o,lastPlacedCoord:i}=e;if(i&&i[0]===o[0]&&i[1]===o[1])return null!=r&&r()&&t.finishDrawing(),{handled:!0,lastPlacedCoord:null};var l=t.getMap();if(((e,t,r,n)=>{if("Polygon"!==n||r.length<Te)return!1;var a=Se(e,t),o=Se(e,r[0]);return!(!a||!o)&&Ie(a,o)<12})(l,o,a,n.getType()))return t.finishDrawing(),{handled:!0,lastPlacedCoord:i};var d=B(n);if(d){var s=l.getPixelFromCoordinate(d),c=l.getPixelFromCoordinate(o);if(s&&c){var u=s[0]-c[0],v=s[1]-c[1];if(u*u+v*v<4)return{handled:!0,lastPlacedCoord:o}}}return{handled:!1,lastPlacedCoord:i}},Ce=new Set(["ArrowLeft","ArrowRight","ArrowUp","ArrowDown"]),Pe=(e,t)=>{e&&(["touch","keyboard"].includes(t)?e.fixAtCenter():e.hide())},be=e=>{var t,{drawInteraction:r,options:n}=e,{container:a,addVertexButtonId:o,mapProvider:i,snap:l,onUndo:d,canFinish:s,canPlace:c,crossHair:u}=n,v=null!==(t=n.interfaceType)&&void 0!==t?t:"mouse",p=()=>v,g=(e=>{var{drawInteraction:t,mapProvider:r,snap:n,canFinish:a,canPlace:o,getInterfaceType:i}=e,l=null,d=null,s=function(){l=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,d=null};t.on("drawstart",e=>s(e.feature)),t.on("drawend",()=>s()),t.on("drawabort",()=>s());var c=()=>{var e=r.getCenter();return"mouse"!==i()&&n?n.apply(e):e};return{placeVertex:()=>{var e=c();if(null==n||n.hideIndicator(),l){var r=l.getGeometry(),i=r.getCoordinates(),s="Polygon"===r.getType()?i[0]||[]:i,u=Ve({drawInteraction:t,canFinish:a,geom:r,sketchCoords:s,coord:e,lastPlacedCoord:d});if(d=u.lastPlacedCoord,u.handled)return}o&&!o(e)||(t.appendCoordinates([e]),d=e)},updateRubberbanding:()=>{if(l){var e=l.getGeometry();e.getCoordinates().length&&((e,t)=>{if("LineString"===e.getType()){var r=[...e.getCoordinates()];r[r.length-1]=t,e.setCoordinates(r)}else if("Polygon"===e.getType()){var n=e.getCoordinates().map((e,r)=>{if(0!==r)return e;var n=[...e];return n[n.length-1]=t,n});e.setCoordinates(n)}})(e,c())}else"mouse"!==i()&&n&&n.apply(r.getCenter())},clearLastCoord(){d=null}}})({drawInteraction:r,mapProvider:i,snap:l,canFinish:s,canPlace:c,getInterfaceType:p}),y=r.getMap(),m=null==y?void 0:y.getView(),h=(e=>{var{container:t,addVertexButtonId:r,olView:n,onUndo:a,getInterfaceType:o,setInterfaceType:i,clearLastCoord:l,updateRubberbanding:d,placeVertex:s}=e,c=()=>{"mouse"!==o()&&d()};null==n||n.on("change:center",c);var u=e=>{t.contains(document.activeElement)&&(Ce.has(e.key)?i("keyboard"):("Enter"===e.key&&(e.preventDefault(),i("keyboard"),s()),"z"===e.key&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),null==a||a())))},v=e=>{r&&e.target.closest("#".concat(r))&&s()},p=e=>{"touch"!==e.pointerType&&(i("mouse"),l())},g=()=>{i("touch")},y=()=>{"mouse"!==o()&&d()};return globalThis.addEventListener("keydown",u),globalThis.addEventListener("click",v),t.addEventListener("pointerdown",p),t.addEventListener("touchstart",g,{passive:!0}),t.addEventListener("pointermove",y),{destroy(){null==n||n.un("change:center",c),globalThis.removeEventListener("keydown",u),globalThis.removeEventListener("click",v),t.removeEventListener("pointerdown",p),t.removeEventListener("touchstart",g),t.removeEventListener("pointermove",y)}}})({container:a,addVertexButtonId:o,olView:m,onUndo:d,getInterfaceType:p,setInterfaceType:e=>{v=e,Pe(u,e)},clearLastCoord:g.clearLastCoord,updateRubberbanding:g.updateRubberbanding,placeVertex:g.placeVertex});Pe(u,v);var x=()=>{"mouse"!==v&&null!=m&&m.getAnimating()&&g.updateRubberbanding()};return null==y||y.on("postrender",x),{getInterfaceType:p,setInterfaceType(e){v=e,Pe(u,e),"mouse"!==e&&g.updateRubberbanding()},destroy(){h.destroy(),null==y||y.un("postrender",x)}}},_e="styleschanged",Ee=(e,t)=>!!t&&U(t.getGeometry()).length>=w[e],Le=(e,t,r,n)=>a=>{if(!j(a))return!1;var o=r();if(!n(a.coordinate))return!1;if(!o||Ee(t,o))return!0;var i=B(o.getGeometry());if(!i)return!0;var l=e.getPixelFromCoordinate(i);if(!l)return!0;var d=a.pixel[0]-l[0],s=a.pixel[1]-l[1];return d*d+s*s>4},ke={Polygon:2,LineString:1},Oe=(e,t)=>{var{manager:r,featureId:n,properties:a,onStart:o,onSketchChange:i}=t;e.on("drawstart",e=>{o(e.feature),e.feature.getGeometry().on("change",i)}),e.on("drawend",e=>((e,t,r,n)=>{t.setId(String(r)),t.setProperties(n),e.store.source.addFeature(t),e.emit(I.CREATE,e.store.toGeoJSON(t))})(r,e.feature,n,a)),e.on("drawabort",()=>{r.emit(I.CANCEL)})},De=e=>{var{map:t,manager:r,options:n}=e,{geometryType:a,featureId:l,properties:d={}}=n,s=null,c=!1,u=r.styles.createSketchStyle(a),{updateVertexCount:v,resetCount:p,emitUndoValidation:g}=((e,t)=>{var r=0,n=(r,n)=>{setTimeout(()=>{var a,o,i,l,d,s,c=t();c&&e.emit(I.GEOMETRY_CHANGE,{feature:(a=e.store,o=c,i=a.toGeoJSON(o),l=i.geometry.type,d=ke[l],s=("Polygon"===l?i.geometry.coordinates[0]:i.geometry.coordinates).slice(0,-d),{type:"Feature",geometry:"Polygon"===l?{type:"Polygon",coordinates:[s]}:{type:"LineString",coordinates:s},properties:i.properties}),phase:r,vertexIndex:n})},0)};return{resetCount:()=>{r=0},updateVertexCount:()=>{var a=t();if(a){var o=U(a.getGeometry()).length;e.emit(I.VERTEX_CHANGE,{numVertices:o}),o>r&&n("commit-add",o-1),r=o}},emitUndoValidation:()=>{var e=t();e&&n("commit-delete",U(e.getGeometry()).length)}}})(r,()=>s),y=(e=>{var{manager:t,geometryType:r,getSketch:n}=e;return e=>{var a=n(),o=T({placed:a?U(a.getGeometry()):[],point:e,geometryType:r,onGeometryChange:t._geometryValidator});return o.valid||t.emit(I.PLACEMENT_BLOCKED,o.blocked),o.valid}})({manager:r,geometryType:a,getSketch:()=>s}),m=new F({type:a,style:e=>u(e),stopClick:!0,snapTolerance:S.snapRadius,condition:Le(t,a,()=>s,y),finishCondition:()=>!1!==r._geometryValid});t.addInteraction(m);var h=o({onChange:e=>{c=e,u=r.styles.createSketchStyle(a,c),m.overlay_.changed()}}),x=i({onStrokeChange:(e,t)=>h.set(e,t),onPlaceChange:(e,t)=>r.emit(I.CAN_PLACE_CHANGE,{canPlace:!e,reason:t})}),f=V[a],w=()=>{if(s){var{feature:e,numVertices:t}=((e,t)=>{var r,n=t.getGeometry(),a=n.getCoordinates(),o="Polygon"===e?null!==(r=a[0])&&void 0!==r?r:[]:a;return{feature:{type:"Feature",geometry:"Polygon"===e?{type:"Polygon",coordinates:[o]}:{type:"LineString",coordinates:o}},numVertices:U(n).length}})(a,s);x.update({feature:e,context:{mode:f},numVertices:t,onGeometryChange:r._geometryValidator})}},C=()=>{u=r.styles.createSketchStyle(a,c),m.overlay_.changed()};r.on(_e,C),m.overlay_.updateWhileAnimating_=!0,Oe(m,{manager:r,featureId:l,properties:d,onStart:e=>{s=e,p()},onSketchChange:()=>{v(),w()}});var P=(e=>{var{drawInteraction:t,options:r,geometryType:n,getSketch:a,updateVertexCount:o,emitUndoValidation:i,canPlaceVertex:l}=e;return be({drawInteraction:t,options:{container:r.container,interfaceType:r.interfaceType,addVertexButtonId:r.addVertexButtonId,mapProvider:r.mapProvider,snap:r.snap,crossHair:r.crossHair,onUndo:()=>{t.removeLastPoint(),o(),i()},canFinish:()=>Ee(n,a()),canPlace:l}})})({drawInteraction:m,options:n,geometryType:a,getSketch:()=>s,updateVertexCount:v,emitUndoValidation:g,canPlaceVertex:y});return(e=>{var{map:t,manager:r,drawInteraction:n,input:a,geometryType:o,getSketch:i,updateVertexCount:l,emitUndoValidation:d,onStylesChanged:s,clearSketch:c,setInvalid:u,liveStroke:v,liveDrawChecks:p}=e;return{done(){Ee(o,i())&&n.finishDrawing()},cancel(){n.abortDrawing()},undo(){n.removeLastPoint(),l(),d()},setInvalid:u,setInterfaceType(e){a.setInterfaceType(e)},setDrawingPreviewProperty(e,t){var r=i();r&&(r.set(e,t),n.overlay_.changed())},destroy(){v.destroy(),p.destroy(),r.off(_e,s),r.emit(I.INTERFACE_TYPE_CHANGE,{interfaceType:a.getInterfaceType()}),a.destroy(),t.removeInteraction(n),c()}}})({map:t,manager:r,drawInteraction:m,input:P,geometryType:a,getSketch:()=>s,updateVertexCount:v,emitUndoValidation:g,onStylesChanged:C,clearSketch:()=>{s=null},setInvalid:e=>h.set(e),liveStroke:h,liveDrawChecks:x})},Fe=e=>{if(null==e||!e.coordinates)return[];switch(e.type){case"LineString":return e.coordinates;case"Polygon":return e.coordinates.flatMap(e=>e.slice(0,-1));case"MultiLineString":return e.coordinates.flat(1);case"MultiPolygon":return e.coordinates.flatMap(e=>e.flatMap(e=>e.slice(0,-1)));default:return[]}},je=e=>{if(null==e||!e.coordinates)return[];var t=[],r=0;switch(e.type){case"LineString":t.push({start:0,length:e.coordinates.length,path:[],closed:!1});break;case"Polygon":e.coordinates.forEach((e,n)=>{var a=e.length-1;t.push({start:r,length:a,path:[n],closed:!0}),r+=a});break;case"MultiLineString":e.coordinates.forEach((e,n)=>{t.push({start:r,length:e.length,path:[n],closed:!1}),r+=e.length});break;case"MultiPolygon":e.coordinates.forEach((e,n)=>{e.forEach((e,a)=>{var o=e.length-1;t.push({start:r,length:o,path:[n,a],closed:!0}),r+=o})})}return t},Me=(e,t)=>{for(var r of e)if(t>=r.start&&t<r.start+r.length)return{segment:r,localIdx:t-r.start};return null},Ae=(e,t)=>{var r=e.coordinates;for(var n of t)r=r[n];return r},Ge=e=>{var t=Fe(e),r=je(e);if(!t.length||!r.length)return[];var n=[];for(var a of r)for(var o=a.closed?a.length:a.length-1,i=0;i<o;i++){var l=a.start+i,d=a.start+(i+1)%a.length,[s,c]=t[l],[u,v]=t[d];n.push([(s+u)/2,(c+v)/2])}return n},Re=(e,t)=>{var a=new n,o=new r({source:a,zIndex:103});e.addLayer(o);return{update(e){if(a.clear(),!(e.selectedVertexIndex<0)){var{coord:r,style:n}=(e=>{var{selectedVertexIndex:r,selectedVertexType:n,vertices:a,midpoints:o}=e,i=t();return"vertex"===n?{coord:a[r],style:i.selectedVertexStyle}:"midpoint"===n?{coord:o[r-a.length],style:i.selectedMidpointStyle}:{coord:null,style:null}})(e);if(r){var o=new L({geometry:new k(r)});o.setStyle(n),a.addFeature(o)}}},remove(){a.clear(),e.removeLayer(o)}}},He=e=>{var{map:t,manager:r,store:n,olFeature:a,interfaceType:o,layers:i}=e,{vertexLayer:l,midpointLayer:d,activeLayer:s}=i,c={olFeature:a,selectedVertexIndex:-1,selectedVertexType:null,vertices:[],midpoints:[],interfaceType:null!=o?o:"mouse"},u={onDeselect:null,onUpdate:null},v=()=>{var e=a.getGeometry();return{type:e.getType(),coordinates:e.getCoordinates()}},p=()=>((e,t)=>{var r,{vertexLayer:n,midpointLayer:a,activeLayer:o,manager:i,hooks:l}=t;n.setSelected("vertex"===e.selectedVertexType?e.selectedVertexIndex:-1),a.setSelected("midpoint"===e.selectedVertexType?e.selectedVertexIndex-e.vertices.length:-1),e.selectedVertexIndex<0&&(null===(r=l.onDeselect)||void 0===r||r.call(l)),o.update(e),i.emit(I.VERTEX_SELECTION,{index:"vertex"===e.selectedVertexType?e.selectedVertexIndex:-1,numVertices:e.vertices.length})})(c,{vertexLayer:l,midpointLayer:d,activeLayer:s,manager:r,hooks:u}),g=()=>{var e=v();c.vertices=Fe(e),c.midpoints=Ge(e),d.update(e),l.update(e),s.update(c)},y=((e,t,r)=>(n,a)=>{n&&setTimeout(()=>{e.emit(I.GEOMETRY_CHANGE,{feature:t.toGeoJSON(r),phase:n,vertexIndex:a})},0)})(r,n,a),m=()=>g();return a.getGeometry().on("change",m),{state:c,getState:()=>c,setState:e=>{var r,n;Object.assign(c,e),void 0!==e.selectedVertexIndex&&p(),void 0!==e.vertices&&(n=v(),d.update(n),l.update(n),c.midpoints=d.getCoords(),s.update(c),null===(r=u.onUpdate)||void 0===r||r.call(u),t.render())},syncGeom:()=>{g(),r.emit(I.VERTEX_CHANGE,{numVertices:c.vertices.length}),r.emit(I.UPDATE,n.toGeoJSON(a))},emitGeometryValidation:y,updateLayersFromGeom:g,setHooks:e=>{var{onDeselect:t,onUpdate:r}=e;return Object.assign(u,{onDeselect:t,onUpdate:r})},destroy(){a.getGeometry().un("change",m)}}},Ne=function(e,t,r,n){var a,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:12;return null!==(a=function(e,t,r){var n=-1,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:12;return t.forEach((t,o)=>{var i=Se(e,t);if(i){var l=Ie(i,r);l<a&&(a=l,n=o)}}),n>=0?{index:n,type:"vertex"}:null}(e,t,n,o))&&void 0!==a?a:function(e,t,r,n){var a=-1,o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:12;return t.forEach((t,n)=>{var i=Se(e,t);if(i){var l=Ie(i,r);l<o&&(o=l,a=n)}}),a>=0?{index:n+a,type:"midpoint"}:null}(e,r,n,t.length,o)},Ue=e=>{var{map:t,olFeature:r,getState:n,onModifyEnd:a}=e,o=(e=>{var{map:t,getState:r}=e;return e=>{var{interfaceType:n,vertices:a,midpoints:o}=r();if("touch"===n)return!1;var i=t.getEventPixel(e.originalEvent);return null!==Ne(t,a,o,{x:i[0],y:i[1]})}})({map:t,getState:n}),i=new M({features:new A([r]),style:()=>[],pixelTolerance:12,condition:o});t.addInteraction(i);var l=null;return i.on("modifystart",()=>{"touch"!==n().interfaceType&&(l=n().vertices.map(e=>[...e]))}),i.on("modifyend",()=>{if("touch"!==n().interfaceType){var e=l;l=null,a(e)}}),{destroy(){t.removeInteraction(i)}}},Be=(e,t,r,n)=>{var a=r-n,o=t[a];if(!o)return null;var i=e.getGeometry(),l={type:i.getType(),coordinates:i.getCoordinates()},d=je(l),s=0;for(var c of d){var u=c.closed?c.length:c.length-1;if(a<s+u){var v=a-s+1,p=c.start+v;return Ae(l,c.path).splice(v,0,[...o]),i.setCoordinates(l.coordinates),{insertedIndex:p}}s+=u}return null},qe=(e,t,r)=>{var n=e.getGeometry(),a={type:n.getType(),coordinates:n.getCoordinates()},o=je(a),i=Me(o,t);if(i){var l=Ae(a,i.segment.path);l[i.localIdx]=[...r],i.segment.closed&&0===i.localIdx&&(l[l.length-1]=[...r]),n.setCoordinates(a.coordinates)}};function Ye(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function ze(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?Ye(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Ye(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}var Ke=(e,t)=>{var{getState:r,onVertexMoved:n,snap:a,drag:o}=t;if(null==o.dragStartIndex)return((e,t)=>{var{map:r,getState:n,onTap:a,drag:o}=t;if(o.tapStart&&!o.tapStart.onTarget&&0!==e.changedTouches.length){var i=e.changedTouches[0],l=Date.now()-o.tapStart.time;if(Math.hypot(i.clientX-o.tapStart.x,i.clientY-o.tapStart.y)<10&&l<400){var d=r.getEventPixel({clientX:i.clientX,clientY:i.clientY}),s=n();null==a||a(Ne(r,s.vertices,s.midpoints,{x:d[0],y:d[1]},24)),e.preventDefault()}}})(e,t),void(o.tapStart=null);o.tapStart=null;var{vertices:i}=r();i[o.dragStartIndex]&&o.dragStartCoord&&n({vertexIndex:o.dragStartIndex,previousCoord:o.dragStartCoord}),null==a||a.hideIndicator(),o.dragStartCoord=null,o.dragStartIndex=null,o.vertexTouchDelta=null,o.targetTouchDelta=null,e.preventDefault()},Xe=e=>{var{container:t}=e,r={dragStartCoord:null,dragStartIndex:null,vertexTouchDelta:null,targetTouchDelta:null,tapStart:null},n=ze(ze({},e),{},{drag:r}),a=e=>((e,t)=>{var{map:r,targetEl:n,cssToOl:a,getState:o,drag:i}=t,l=e.touches[0],d=u(e.target);if(i.tapStart={x:l.clientX,y:l.clientY,time:Date.now(),onTarget:d},d){var{selectedVertexIndex:s,vertices:c}=o(),v=c[s];if(v){var p=r.getEventPixel({clientX:l.clientX,clientY:l.clientY}),g=Se(r,v),y=getComputedStyle(n),m=a({x:Number.parseFloat(y.left),y:Number.parseFloat(y.top)});i.dragStartCoord=[...v],i.dragStartIndex=s,i.vertexTouchDelta={x:p[0]-g.x,y:p[1]-g.y},i.targetTouchDelta={x:p[0]-m.x,y:p[1]-m.y},e.preventDefault()}}})(e,n),o=e=>((e,t)=>{var{map:r,targetEl:n,olToCSS:a,getState:o,setState:i,snap:l,drag:d}=t;if(u(e.target)&&null!=d.dragStartIndex){e.preventDefault();var s=r.getEventPixel({clientX:e.touches[0].clientX,clientY:e.touches[0].clientY}),v=((e,t)=>e.getCoordinateFromPixel([t.x,t.y]))(r,{x:s[0]-d.vertexTouchDelta.x,y:s[1]-d.vertexTouchDelta.y}),p=l?l.apply(v):v;null==l||l.hideIndicator();var{olFeature:g,vertices:y}=o();g&&(qe(g,d.dragStartIndex,p),i({vertices:y.map((e,t)=>t===d.dragStartIndex?p:e)}),c(n,a({x:s[0]-d.targetTouchDelta.x,y:s[1]-d.targetTouchDelta.y})))}})(e,n),i=e=>Ke(e,n);return t.addEventListener("touchstart",a,{passive:!1}),t.addEventListener("touchmove",o,{passive:!1}),t.addEventListener("touchend",i,{passive:!1}),{isDragging:()=>null!=r.dragStartIndex,destroy(){t.removeEventListener("touchstart",a),t.removeEventListener("touchmove",o),t.removeEventListener("touchend",i)}}},We=e=>{var{map:t,snap:r,getState:n,setState:a,onInserted:o,onVertexMoved:i}=e,l={start:null,index:null},d=(e,o)=>{var{selectedVertexIndex:i,vertices:l,olFeature:d}=n();if(!d||i<0||!l[i])return null;var s=l[i],c=we(t,s,e,o),u=r?r.apply(c):c;null==r||r.hideIndicator();var v=((e,t,r,n,a,o,i)=>{if(!e)return a;var l=[n[0]-r[0],n[1]-r[1]],d=[a[0]-r[0],a[1]-r[1]],s=l[0]**2+l[1]**2;if(s>0&&(d[0]*l[0]+d[1]*l[1])/s<.5){var c=e.snapRadius+1;return we(t,r,0===o?0:Math.sign(o)*c,0===i?0:Math.sign(i)*c)}return a})(r,t,s,c,u,e,o);return qe(d,i,v),a({vertices:l.map((e,t)=>t===i?v:e)}),{previousCoord:s,vertexIndex:i}};return{nudge:e=>{var{selectedVertexIndex:i,selectedVertexType:s,vertices:c,midpoints:u,olFeature:v}=n();if(v){var p=e.shiftKey?C.nudgeAmount:C.stepAmount,g={ArrowUp:[0,-p],ArrowDown:[0,p],ArrowLeft:[-p,0],ArrowRight:[p,0]},[y,m]=g[e.key];"midpoint"!==s?i<0||!c[i]||(l.start||(l.start=[...c[i]],l.index=i),d(y,m)):((e,i,d,s,c,u)=>{var v=Be(e,i,d,s.length);if(v){o({insertedIndex:v.insertedIndex});var p=n().vertices,g=p[v.insertedIndex];if(g){l.start=[...g],l.index=v.insertedIndex;var y=we(t,g,c,u),m=r?r.apply(y):y;qe(e,v.insertedIndex,m),a({selectedVertexIndex:v.insertedIndex,selectedVertexType:"vertex",vertices:p.map((e,t)=>t===v.insertedIndex?m:e)})}}})(v,u,i,c,y,m)}},keyMove:l,nudgeByDelta:(e,t,r)=>{var n=r?C.stepAmount:C.nudgeAmount,a=d(e*n,t*n);a&&i({vertexIndex:a.vertexIndex,previousCoord:a.previousCoord})}}},Je=new Set(["ArrowLeft","ArrowRight","ArrowUp","ArrowDown"]),Ze=new Set(["INPUT","TEXTAREA","BUTTON","SELECT","A"]),Qe=e=>{var{map:t,getState:r,setState:n,nudge:a,keyMove:o,onUndo:i,onKeyboardActive:l,isFocused:d}=e,s=e=>{e.altKey?(e.preventDefault(),e.stopPropagation(),((e,t,r,n)=>{var{selectedVertexIndex:a,vertices:o,midpoints:i}=r();if(o.length){var l,d=[...o,...i].map(e=>Se(t,e)).filter(Boolean).map(e=>[e.x,e.y]),s=a>=0?d[a]:(l=Se(t,t.getView().getCenter()))?[l.x,l.y]:null;if(s){var c=P(s,d,e);n({selectedVertexIndex:c,selectedVertexType:c<o.length?"vertex":"midpoint"})}}})(e.key,t,r,n)):r().selectedVertexIndex>=0&&(e.preventDefault(),e.stopPropagation(),a(e))},c=e=>{if(null==l||l()," "===e.key)e.preventDefault(),r().selectedVertexIndex<0&&((e,t,r)=>{var{vertices:n,midpoints:a}=t();if(n.length){var o=Se(e,e.getView().getCenter());if(o){var i=[...n.map(t=>Se(e,t)),...a.map(t=>Se(e,t))].filter(Boolean).map(e=>[e.x,e.y]),l=P([o.x,o.y],i,void 0);r({selectedVertexIndex:l,selectedVertexType:l<n.length?"vertex":"midpoint"})}}})(t,r,n);else if(Je.has(e.key))s(e);else if("z"===e.key&&(e.metaKey||e.ctrlKey)){var a,o=null===(a=document.activeElement)||void 0===a?void 0:a.tagName;Ze.has(o)||(e.preventDefault(),e.stopPropagation(),i())}};return e=>{d()||("Escape"===e.key&&r().selectedVertexIndex>=0?(e.preventDefault(),o.start=null,o.index=null,n({selectedVertexIndex:-1,selectedVertexType:null})):c(e))}},$e=e=>{var t,{map:r,snap:n,getState:a,setState:o,onVertexMoved:i,onInserted:l,onDeleted:d,onUndo:s,onKeyboardActive:c}=e,{nudge:u,keyMove:v,nudgeByDelta:p}=We({map:r,snap:n,getState:a,setState:o,onInserted:l,onVertexMoved:i}),g=null!==(t=r.getViewport().closest('[role="application"]'))&&void 0!==t?t:r.getViewport(),y=()=>(e=>{var t=document.activeElement;return!(!t||t===document.body)&&!e.contains(t)&&(Ze.has(t.tagName)||t.isContentEditable||t.hasAttribute("tabindex"))})(g),m=Qe({map:r,getState:a,setState:o,nudge:u,keyMove:v,onUndo:s,onKeyboardActive:c,isFocused:y}),h=(e=>{var{snap:t,keyMove:r,onVertexMoved:n,onDeleted:a,isFocused:o}=e;return e=>{o()||(Je.has(e.key)&&r.start&&null!=r.index&&(null==t||t.hideIndicator(),n({vertexIndex:r.index,previousCoord:r.start}),r.start=null,r.index=null),"Delete"===e.key&&a())}})({snap:n,keyMove:v,onVertexMoved:i,onDeleted:d,isFocused:y});return globalThis.addEventListener("keydown",m,{capture:!0}),globalThis.addEventListener("keyup",h,{capture:!0}),{nudgeByDelta:p,destroy(){globalThis.removeEventListener("keydown",m,{capture:!0}),globalThis.removeEventListener("keyup",h,{capture:!0})}}},et=(e,t)=>{switch(t.type){case"move_vertex":return((e,t)=>{var{vertexIndex:r,previousCoord:n}=t,a=e.getGeometry(),o={type:a.getType(),coordinates:a.getCoordinates()},i=je(o),l=Me(i,r);if(!l)return-1;var d=Ae(o,l.segment.path);return d[l.localIdx]=[...n],l.segment.closed&&0===l.localIdx&&(d[d.length-1]=[...n]),a.setCoordinates(o.coordinates),r})(e,t);case"insert_vertex":return((e,t)=>{var{vertexIndex:r}=t,n=e.getGeometry(),a={type:n.getType(),coordinates:n.getCoordinates()},o=je(a),i=Me(o,r);if(i){var l=Ae(a,i.segment.path);l.splice(i.localIdx,1),i.segment.closed&&(l[l.length-1]=[...l[0]]),n.setCoordinates(a.coordinates)}return-1})(e,t);case"delete_vertex":return((e,t)=>{var{vertexIndex:r,deletedCoord:n}=t,a=e.getGeometry(),o={type:a.getType(),coordinates:a.getCoordinates()},i=je(o),l=Me(i,r);if(!l)for(var d of i)if(r===d.start+d.length){l={segment:d,localIdx:d.length};break}if(!l)return-1;var s=Ae(o,l.segment.path);return s.splice(l.localIdx,0,[...n]),l.segment.closed&&(s[s.length-1]=[...s[0]]),a.setCoordinates(o.coordinates),r})(e,t);default:return-1}},tt="touch",rt="vertex",nt="commit-move",at="commit-insert",ot="commit-delete",it={move_vertex:nt,insert_vertex:at,delete_vertex:ot},lt={move_vertex:nt,insert_vertex:ot,delete_vertex:at},dt=e=>{var{olFeature:t,undoStack:r,selection:n,getTouchHandler:a}=e,{state:o,setState:i,syncGeom:l,emitGeometryValidation:d}=n;return{doDeleteVertex:()=>{if(!(o.selectedVertexType!==rt||o.selectedVertexIndex<0)){var e=((e,t)=>{var r=e.getGeometry(),n={type:r.getType(),coordinates:r.getCoordinates()},a=Fe(n),o=je(n),i=Me(o,t);if(!i)return null;var{segment:l}=i,d=l.closed?w.Polygon:w.LineString;if(l.length<=d)return null;var s=[...a[t]],c=Ae(n,l.path);return c.splice(i.localIdx,1),l.closed&&(c[c.length-1]=[...c[0]]),r.setCoordinates(n.coordinates),{deletedIndex:t,deletedCoord:s}})(t,o.selectedVertexIndex);e&&(r.push({type:"delete_vertex",vertexIndex:e.deletedIndex,deletedCoord:e.deletedCoord}),l(),d(ot,e.deletedIndex),i({selectedVertexIndex:-1,selectedVertexType:null}))}},doUndo:()=>{var e=r.pop();if(e){var n=o.selectedVertexIndex,s=et(t,e);l(),d(lt[e.type],s);var c=n>=0?s:-1;i({selectedVertexIndex:c,selectedVertexType:c>=0?rt:null}),n>=0&&c>=0&&o.interfaceType===tt&&a().updateTargetPosition()}}}},st=e=>{var{map:t,container:r,manager:n,snap:a,olFeature:o,undoStack:i,selection:u}=e,{state:v,getState:p,setState:g,syncGeom:y,emitGeometryValidation:m}=u,h=e=>g({selectedVertexIndex:e,selectedVertexType:rt}),x=(e=>{var{map:t,container:r,getState:n,setState:a,onVertexMoved:o,onTap:i,colors:u,snap:v}=e,p=l(r);d(p,u);var g={scale:1,ox:0,oy:0},y=e=>({x:e.x*g.scale+g.ox,y:e.y*g.scale+g.oy}),m=()=>{var e=t.getViewport(),n=e.getBoundingClientRect(),a=r.getBoundingClientRect(),o=e.offsetWidth>0?n.width/e.offsetWidth:1,i=r.offsetWidth>0?a.width/r.offsetWidth:1;Object.assign(g,{scale:o/i,ox:(n.left-a.left)/i,oy:(n.top-a.top)/i})},h=Xe({container:r,map:t,targetEl:p,olToCSS:y,cssToOl:e=>({x:(e.x-g.ox)/g.scale,y:(e.y-g.oy)/g.scale}),getState:n,setState:a,onVertexMoved:o,onTap:i,snap:v}),x=()=>{var{selectedVertexIndex:e,vertices:r,interfaceType:a}=n();if(e<0||!r[e]||"touch"!==a)s(p);else{var o=Se(t,r[e]);o?c(p,y(o)):s(p)}},f=()=>{var{selectedVertexIndex:e,interfaceType:t}=n();e>=0&&!h.isDragging()&&"touch"===t&&x()};t.on("postrender",f);var S=()=>{m(),t.once("postrender",x)};return t.on("change:size",S),m(),{updateTargetPosition:x,updateColors(e){d(p,e)},hide(){s(p)},destroy(){t.un("change:size",S),t.un("postrender",f),h.destroy(),s(p)}}})({map:t,container:r,getState:p,setState:g,colors:n.colors,snap:a,onVertexMoved(e){var{vertexIndex:t,previousCoord:r}=e;i.push({type:"move_vertex",vertexIndex:t,previousCoord:r}),y(),m(nt,t),h(t),x.updateTargetPosition()},onTap(e){if(e){if(e.type===rt)return h(e.index),void x.updateTargetPosition();var t=Be(o,v.midpoints,e.index,v.vertices.length);t&&(i.push({type:"insert_vertex",vertexIndex:t.insertedIndex}),y(),m(at,t.insertedIndex),h(t.insertedIndex),x.updateTargetPosition())}else g({selectedVertexIndex:-1,selectedVertexType:null})}});return u.setHooks({onDeselect:()=>x.hide(),onUpdate(){v.interfaceType===tt&&x.updateTargetPosition()}}),x},ct=e=>{var{map:t,manager:a,options:i}=e,{featureId:l,container:d,interfaceType:s,deleteVertexButtonId:c,snap:u}=i,{store:v,undoStack:p}=a,g=v.getOL(l);if(!g)return null;var y=g.getStyle(),m=((e,t)=>{var a=t,o=-1,i=new n,l=new r({source:i,style:e=>e.get("midpointIndex")===o?null:[a],zIndex:101});return e.addLayer(l),{update(e){i.clear();var t=Ge(e).map((e,t)=>{var r=new L({geometry:new k(e)});return r.set("midpointIndex",t),r});i.addFeatures(t)},setSelected(e){o=e,i.changed()},updateStyle(e){a=e,i.changed()},getCoords:()=>i.getFeatures().sort((e,t)=>e.get("midpointIndex")-t.get("midpointIndex")).map(e=>e.getGeometry().getCoordinates()),remove(){i.clear(),e.removeLayer(l)}}})(t,a.styles.midpointStyle),h=((e,t)=>{var a=t,o=-1,i=new n,l=new r({source:i,style:e=>e.get("vertexIndex")===o?null:[a],zIndex:102});return e.addLayer(l),{update(e){i.clear(),Fe(e).forEach((e,t)=>{var r=new L({geometry:new k(e)});r.set("vertexIndex",t),i.addFeature(r)})},setSelected(e){o=e,i.changed()},updateStyle(e){a=e,i.changed()},remove(){i.clear(),e.removeLayer(l)}}})(t,a.styles.vertexStyle),x=Re(t,()=>a.styles),f=He({map:t,manager:a,store:v,olFeature:g,interfaceType:s,layers:{vertexLayer:h,midpointLayer:m,activeLayer:x}}),{state:S,getState:w,setState:T,syncGeom:V,emitGeometryValidation:C}=f,P=Ue({map:t,olFeature:g,getState:w,onModifyEnd(e){V();var t=e&&((e,t)=>{if(t.length>e.length){var r=t.findIndex((t,r)=>{var n;return t[0]!==(null===(n=e[r])||void 0===n?void 0:n[0])});return{type:"insert_vertex",vertexIndex:Math.max(0,r)}}if(t.length===e.length){var n=t.findIndex((t,r)=>t[0]!==e[r][0]||t[1]!==e[r][1]);if(n>=0)return{type:"move_vertex",vertexIndex:n,previousCoord:e[n]}}return null})(e,S.vertices);t&&(p.push(t),C(it[t.type],t.vertexIndex),T({selectedVertexIndex:t.vertexIndex,selectedVertexType:rt}))}});V();var b={vertexLayer:h,midpointLayer:m,activeLayer:x},_=(e=>{var{map:t,manager:r,olFeature:n}=e,a=!1;n.setStyle(()=>a?r.styles.editFeatureStyleInvalid:r.styles.editFeatureStyle);var i=o({onChange:(e,n)=>{a=e,t.render(),r.emit(I.VALIDITY_CHANGE,{valid:!e,reason:n})}}),l=()=>{var e,t,a=n.getGeometry(),o=a.getType(),l=a.getCoordinates(),d="Polygon"===o?Math.max(0,(null!==(e=null===(t=l[0])||void 0===t?void 0:t.length)&&void 0!==e?e:1)-1):l.length;i.update({feature:{type:"Feature",geometry:{type:o,coordinates:l}},context:{mode:"edit_vertex"},numVertices:d,onGeometryChange:r._geometryValidator})};return n.getGeometry().on("change",l),{liveStroke:i,destroy(){n.getGeometry().un("change",l),i.destroy()}}})({map:t,manager:a,olFeature:g}),E=st({map:t,container:d,manager:a,snap:u,olFeature:g,undoStack:p,selection:f}),O=dt({olFeature:g,undoStack:p,selection:f,getTouchHandler:()=>E}),D=(e=>{var{map:t,container:r,snap:n,undoStack:a,selection:o,touchHandler:i,actions:l}=e,{state:d,getState:s,setState:c,syncGeom:u,emitGeometryValidation:v}=o;return $e({map:t,getState:s,setState:c,snap:n,onVertexMoved(e){var{vertexIndex:t,previousCoord:r}=e;a.push({type:"move_vertex",vertexIndex:t,previousCoord:r}),u(),v(nt,t),c({selectedVertexIndex:t,selectedVertexType:rt})},onInserted(e){var{insertedIndex:t}=e;a.push({type:"insert_vertex",vertexIndex:t}),u(),v(at,t)},onDeleted:l.doDeleteVertex,onUndo:l.doUndo,onKeyboardActive(){"keyboard"!==d.interfaceType&&(d.interfaceType="keyboard",i.hide(),r.focus({preventScroll:!0}))}})})({map:t,container:d,snap:u,undoStack:p,selection:f,touchHandler:E,actions:O}),F=(e=>{var{map:t,container:r,getState:n,setState:a,touchHandler:o,deleteVertexButtonId:i,onDeleteVertex:l}=e,d=e=>{var{vertices:r,midpoints:a}=n(),o=t.getEventPixel(e);return Ne(t,r,a,{x:o[0],y:o[1]})},s=e=>{var t=n();if("touch"===e.pointerType)return t.interfaceType="touch",void o.updateTargetPosition();t.interfaceType="mouse";var r=d(e);"vertex"===(null==r?void 0:r.type)&&a({selectedVertexIndex:r.index,selectedVertexType:"vertex"})},c=e=>{if("touch"!==n().interfaceType){var t=d(e);"vertex"===(null==t?void 0:t.type)?a({selectedVertexIndex:t.index,selectedVertexType:"vertex"}):"midpoint"===(null==t?void 0:t.type)||a({selectedVertexIndex:-1,selectedVertexType:null})}},u=e=>{var t=n();"mouse"===e.pointerType&&"mouse"!==t.interfaceType&&(t.interfaceType="mouse",o.hide())},v=e=>{i&&e.target.closest("#".concat(i))&&l()};return r.addEventListener("pointerdown",s),r.addEventListener("pointerenter",u),r.addEventListener("pointermove",u),r.addEventListener("click",c),globalThis.addEventListener("click",v),{destroy(){r.removeEventListener("pointerdown",s),r.removeEventListener("pointerenter",u),r.removeEventListener("pointermove",u),r.removeEventListener("click",c),globalThis.removeEventListener("click",v)}}})({map:t,container:d,getState:w,setState:T,touchHandler:E,deleteVertexButtonId:c,onDeleteVertex:O.doDeleteVertex}),j=(e=>{var{map:t,manager:r,layers:n,selection:a,touchHandler:o,live:i}=e,{state:l}=a,d=e=>{i.liveStroke.refresh(),n.vertexLayer.updateStyle(e.vertexStyle),n.midpointLayer.updateStyle(e.midpointStyle),n.activeLayer.update(l),o.updateColors(r.colors)};r.on(_e,d);var s=()=>{l.interfaceType!==tt||l.selectedVertexIndex<0||t.once("postrender",()=>o.updateTargetPosition())};return t.on("change:size",s),{destroy(){r.off(_e,d),t.un("change:size",s)}}})({map:t,manager:a,layers:b,selection:f,touchHandler:E,live:_});return(e=>{var{manager:t,store:r,olFeature:n,originalFeatureStyle:a,selection:o,actions:i,parts:l}=e,{state:d}=o,{touchHandler:s}=l;return{setInterfaceType(e){e!==d.interfaceType&&(d.interfaceType=e,e===tt?s.updateTargetPosition():s.hide())},done(){t.emit(I.EDIT_FINISH,r.toGeoJSON(n))},setInvalid(e){l.live.liveStroke.set(e)},cancel(){},undo:i.doUndo,deleteVertex:i.doDeleteVertex,nudgeSelectedVertex:l.keyboardHandler.nudgeByDelta,destroy(){l.live.destroy(),n.setStyle(a),o.destroy(),l.mapSync.destroy(),l.pointerHandlers.destroy(),l.modify.destroy(),l.layers.activeLayer.remove(),l.layers.midpointLayer.remove(),l.layers.vertexLayer.remove(),s.destroy(),l.keyboardHandler.destroy()}}})({manager:a,store:v,olFeature:g,originalFeatureStyle:y,selection:f,actions:O,parts:{touchHandler:E,keyboardHandler:D,pointerHandlers:F,modify:P,mapSync:j,layers:b,live:_}})};function ut(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function vt(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?ut(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ut(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}class pt{constructor(e){var t,n,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._map=e,this._pluginConfig=a,this._mode="disabled",this._modeInstance=null,this._listeners=new Map,this.store=H(),this.undoStack=v(e=>this.emit(I.UNDO_CHANGE,e)),this.colors=p(null,a),this.styles=W(this.colors),this.snap=fe(e,null!==(t=a.snapLayers)&&void 0!==t?t:null,this.colors,null!==(n=a.snapRadius)&&void 0!==n?n:S.snapRadius),this._layer=new r({source:this.store.source,style:this.styles.createFeatureStyle(),zIndex:100}),this._layer.set("layerId","draw"),e.addLayer(this._layer)}setMapStyle(e){var t;this.colors=p(e,this._pluginConfig),this.styles=W(this.colors),this._layer.setStyle(this.styles.createFeatureStyle()),this.store.source.changed(),null===(t=this.snap)||void 0===t||t.updateColors(this.colors),this.emit(_e,this.styles)}on(e,t){this._listeners.has(e)||this._listeners.set(e,new Set),this._listeners.get(e).add(t)}off(e,t){var r;null===(r=this._listeners.get(e))||void 0===r||r.delete(t)}emit(e,t){var r=this._listeners.get(e);r&&Array.from(r).forEach(e=>e(t))}changeMode(e){var r=arguments,n=this;return t(function*(){var t,a,o,i=r.length>1&&void 0!==r[1]?r[1]:{};null===(t=n._modeInstance)||void 0===t||t.destroy(),n._modeInstance=null,n._mode=e;var l="draw_polygon"===e||"draw_line"===e||"edit_vertex"===e;null===(a=n.snap)||void 0===a||a.setIndicatorActive(l);var d=vt(vt({},i),{},{snap:n.snap});"draw_polygon"===e||"draw_line"===e?n._modeInstance=De({map:n._map,manager:n,options:d}):"edit_vertex"===e&&(n._modeInstance=ct({map:n._map,manager:n,options:d})),null===(o=n.snap)||void 0===o||o.reattach()})()}getMode(){return this._mode}done(){var e;null===(e=this._modeInstance)||void 0===e||e.done()}cancel(){var e;null===(e=this._modeInstance)||void 0===e||e.cancel(),this.changeMode("disabled")}undo(){var e;null===(e=this._modeInstance)||void 0===e||e.undo()}deleteVertex(){var e;null===(e=this._modeInstance)||void 0===e||e.deleteVertex()}nudgeSelectedVertex(e,t,r){var n,a;null===(n=this._modeInstance)||void 0===n||null===(a=n.nudgeSelectedVertex)||void 0===a||a.call(n,e,t,r)}setInvalid(e){var t,r;null===(t=this._modeInstance)||void 0===t||null===(r=t.setInvalid)||void 0===r||r.call(t,e)}setDrawingPreviewProperty(e,t){var r,n;null===(r=this._modeInstance)||void 0===r||null===(n=r.setDrawingPreviewProperty)||void 0===n||n.call(r,e,t)}setInterfaceType(e){var t,r;null===(t=this._modeInstance)||void 0===t||null===(r=t.setInterfaceType)||void 0===r||r.call(t,e),this.emit(I.INTERFACE_TYPE_CHANGE,{interfaceType:e})}get(e){return this.store.get(e)}add(e){return this.store.add(e)}delete(e){return this.store.remove(e)}deleteAll(){return this.store.clear()}remove(){var e,t;null===(e=this._modeInstance)||void 0===e||e.destroy(),this._modeInstance=null,null===(t=this.snap)||void 0===t||t.destroy(),this.snap=null,this.store.clear(),this._map.removeLayer(this._layer),this._listeners.clear()}}function gt(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function yt(t){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?gt(Object(n),!0).forEach(function(r){e(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):gt(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}class mt{constructor(t,r){var n;e(this,"_snapEnabled",!1);var{manager:a,remove:o}=(e=>{var{mapProvider:t,events:r,eventBus:n,pluginConfig:a={},mapStyle:o=null}=e,{map:i}=t,l=new pt(i,a);o&&l.setMapStyle(o),t.draw=l;var d=e=>{var r;t.drawScale=null!==(r=b[e])&&void 0!==r?r:1};n.on(r.MAP_SET_SIZE,d);var s=e=>{l.setMapStyle(e)};return n.on(r.MAP_SET_STYLE,s),{manager:l,remove(){n.off(r.MAP_SET_SIZE,d),n.off(r.MAP_SET_STYLE,s),l.remove(),t.draw=null}}})({mapProvider:t,events:r.events,eventBus:r.eventBus,pluginConfig:null!==(n=r.pluginConfig)&&void 0!==n?n:{snapLayers:r.snapLayers},mapStyle:r.mapStyle});this._cleanupOLDraw=o,this._manager=a,this._mapProvider=t}changeMode(e){var t=yt(yt({},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{}),{},{mapProvider:this._mapProvider});return"draw_polygon"===e&&(t.geometryType="Polygon"),"draw_line"===e&&(t.geometryType="LineString"),this._manager.changeMode(e,t)}getMode(){return this._manager.getMode()}setInterfaceType(e){this._manager.setInterfaceType(e)}done(){this._manager.undoStack.clear(),this._manager.done()}cancel(){this._manager.undoStack.clear(),this._manager.cancel()}undo(){this._manager.undo()}deleteVertex(){this._manager.deleteVertex()}nudgeSelectedVertex(e,t,r){this._manager.nudgeSelectedVertex(e,t,r)}setGeometryValid(e){this._manager._geometryValid=e}set _geometryValidator(e){this._manager._geometryValidator=e}get _geometryValidator(){return this._manager._geometryValidator}setInvalid(e){this._manager.setInvalid(e)}get(e){return this._manager.get(e)}add(e){return this._manager.add(e)}delete(e){return this._manager.delete(e)}deleteAll(){return this._manager.deleteAll()}setSnapEnabled(e){var t;this._snapEnabled=e,null===(t=this._manager.snap)||void 0===t||t.setActive(e)}setSnapLayers(e){var t,r=null==e?void 0:e.map(e=>"stroke-inactive.cold"===e?this._manager._layer:e);null===(t=this._manager.snap)||void 0===t||t.setSnapLayers(r)}isSnapEnabled(){return this._snapEnabled}setFeatureProperty(){}setDrawingPreviewProperty(e,t){this._manager.setDrawingPreviewProperty(e,t)}on(e,t){this._manager.on(e,t)}off(e,t){this._manager.off(e,t)}remove(){this._cleanupOLDraw()}}export{mt as OLDrawAdapter};