@element-editor/adapter-maplibre 0.0.0-stage → 0.2.0

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 (124) hide show
  1. package/AGENTS.md +119 -0
  2. package/LICENSE +21 -0
  3. package/README.md +82 -2
  4. package/basemaps/sprite.json +1 -0
  5. package/basemaps/sprite.png +0 -0
  6. package/basemaps/sprite@2x.json +1 -0
  7. package/basemaps/sprite@2x.png +0 -0
  8. package/basemaps/thumbs/dark.webp +0 -0
  9. package/basemaps/thumbs/light.webp +0 -0
  10. package/basemaps/thumbs/osm.webp +0 -0
  11. package/basemaps/thumbs/streets.webp +0 -0
  12. package/basemaps/thumbs/terrain.webp +0 -0
  13. package/dist/adapter-maplibre.css +1 -0
  14. package/dist/basemapIds-2GdXIJS1.cjs +1 -0
  15. package/dist/basemapIds-CVTxeXkr.js +11 -0
  16. package/dist/basemaps.cjs +1 -0
  17. package/dist/basemaps.d.cts +2 -0
  18. package/dist/basemaps.d.ts +2 -0
  19. package/dist/basemaps.es.js +10 -0
  20. package/dist/catalog-Cnqi23GZ.cjs +1 -0
  21. package/dist/catalog-gI-xABuu.js +10 -0
  22. package/dist/dark-C5d5FijX.cjs +1 -0
  23. package/dist/dark-CcJT_yHE.js +13 -0
  24. package/dist/index.cjs +26 -0
  25. package/dist/index.d.cts +2 -0
  26. package/dist/index.d.ts +2 -0
  27. package/dist/index.es.js +3792 -0
  28. package/dist/light-Cf5tUOoP.js +13 -0
  29. package/dist/light-DCtd1z4V.cjs +1 -0
  30. package/dist/src/BasemapControl.d.cts +47 -0
  31. package/dist/src/BasemapControl.d.ts +47 -0
  32. package/dist/src/ElementEditorControls.d.cts +113 -0
  33. package/dist/src/ElementEditorControls.d.ts +113 -0
  34. package/dist/src/basemapIds.d.cts +10 -0
  35. package/dist/src/basemapIds.d.ts +10 -0
  36. package/dist/src/basemaps/catalog.d.cts +7 -0
  37. package/dist/src/basemaps/catalog.d.ts +7 -0
  38. package/dist/src/basemaps/index.d.cts +3 -0
  39. package/dist/src/basemaps/index.d.ts +3 -0
  40. package/dist/src/basemaps/style.d.cts +61 -0
  41. package/dist/src/basemaps/style.d.ts +61 -0
  42. package/dist/src/components/BoundaryLayer.d.cts +11 -0
  43. package/dist/src/components/BoundaryLayer.d.ts +11 -0
  44. package/dist/src/components/BoxSelectHandler.d.cts +13 -0
  45. package/dist/src/components/BoxSelectHandler.d.ts +13 -0
  46. package/dist/src/components/DrawingLayer.d.cts +8 -0
  47. package/dist/src/components/DrawingLayer.d.ts +8 -0
  48. package/dist/src/components/DrawingPreviewLayer.d.cts +8 -0
  49. package/dist/src/components/DrawingPreviewLayer.d.ts +8 -0
  50. package/dist/src/components/FeatureInteractionLayer.d.cts +8 -0
  51. package/dist/src/components/FeatureInteractionLayer.d.ts +8 -0
  52. package/dist/src/components/FeatureLayer.d.cts +15 -0
  53. package/dist/src/components/FeatureLayer.d.ts +15 -0
  54. package/dist/src/components/GeometryProcessingPreview.d.cts +8 -0
  55. package/dist/src/components/GeometryProcessingPreview.d.ts +8 -0
  56. package/dist/src/components/MeasurePreviewLayer.d.cts +9 -0
  57. package/dist/src/components/MeasurePreviewLayer.d.ts +9 -0
  58. package/dist/src/components/MeasurementTooltip.d.cts +6 -0
  59. package/dist/src/components/MeasurementTooltip.d.ts +6 -0
  60. package/dist/src/components/OsmTraceHandler.d.cts +8 -0
  61. package/dist/src/components/OsmTraceHandler.d.ts +8 -0
  62. package/dist/src/components/PreciseCoordsOverlay.d.cts +10 -0
  63. package/dist/src/components/PreciseCoordsOverlay.d.ts +10 -0
  64. package/dist/src/components/SnapController.d.cts +9 -0
  65. package/dist/src/components/SnapController.d.ts +9 -0
  66. package/dist/src/components/TextEditOverlay.d.cts +9 -0
  67. package/dist/src/components/TextEditOverlay.d.ts +9 -0
  68. package/dist/src/components/TransformControls.d.cts +8 -0
  69. package/dist/src/components/TransformControls.d.ts +8 -0
  70. package/dist/src/components/VertexEditor.d.cts +15 -0
  71. package/dist/src/components/VertexEditor.d.ts +15 -0
  72. package/dist/src/contexts/FeatureStyleContext.d.cts +9 -0
  73. package/dist/src/contexts/FeatureStyleContext.d.ts +9 -0
  74. package/dist/src/contexts/MapControllerContext.d.cts +2 -0
  75. package/dist/src/contexts/MapControllerContext.d.ts +2 -0
  76. package/dist/src/contexts/StyleEpochContext.d.cts +7 -0
  77. package/dist/src/contexts/StyleEpochContext.d.ts +7 -0
  78. package/dist/src/elementLayers.d.cts +17 -0
  79. package/dist/src/elementLayers.d.ts +17 -0
  80. package/dist/src/hooks/lastPointer.d.cts +18 -0
  81. package/dist/src/hooks/lastPointer.d.ts +18 -0
  82. package/dist/src/hooks/useCursorWhileMode.d.cts +20 -0
  83. package/dist/src/hooks/useCursorWhileMode.d.ts +20 -0
  84. package/dist/src/hooks/useModifierDragCursor.d.cts +8 -0
  85. package/dist/src/hooks/useModifierDragCursor.d.ts +8 -0
  86. package/dist/src/index.d.cts +30 -0
  87. package/dist/src/index.d.ts +30 -0
  88. package/dist/src/store/StoreContext.d.cts +1 -0
  89. package/dist/src/store/StoreContext.d.ts +1 -0
  90. package/dist/src/utils/accentPaint.d.cts +13 -0
  91. package/dist/src/utils/accentPaint.d.ts +13 -0
  92. package/dist/src/utils/boxSelect.d.cts +4 -0
  93. package/dist/src/utils/boxSelect.d.ts +4 -0
  94. package/dist/src/utils/darkStyle.d.cts +8 -0
  95. package/dist/src/utils/darkStyle.d.ts +8 -0
  96. package/dist/src/utils/featureTooltip.d.cts +16 -0
  97. package/dist/src/utils/featureTooltip.d.ts +16 -0
  98. package/dist/src/utils/findPartAtPoint.d.cts +2 -0
  99. package/dist/src/utils/findPartAtPoint.d.ts +2 -0
  100. package/dist/src/utils/freehandCommitFlag.d.cts +2 -0
  101. package/dist/src/utils/freehandCommitFlag.d.ts +2 -0
  102. package/dist/src/utils/freshFeature.d.cts +3 -0
  103. package/dist/src/utils/freshFeature.d.ts +3 -0
  104. package/dist/src/utils/geojson.d.cts +10 -0
  105. package/dist/src/utils/geojson.d.ts +10 -0
  106. package/dist/src/utils/liveFeatureSource.d.cts +6 -0
  107. package/dist/src/utils/liveFeatureSource.d.ts +6 -0
  108. package/dist/src/utils/measureClickFlag.d.cts +2 -0
  109. package/dist/src/utils/measureClickFlag.d.ts +2 -0
  110. package/dist/src/utils/modifierDragFlag.d.cts +2 -0
  111. package/dist/src/utils/modifierDragFlag.d.ts +2 -0
  112. package/dist/src/utils/rafThrottle.d.cts +11 -0
  113. package/dist/src/utils/rafThrottle.d.ts +11 -0
  114. package/dist/src/utils/snapping.d.cts +25 -0
  115. package/dist/src/utils/snapping.d.ts +25 -0
  116. package/dist/src/utils/toolCursor.d.cts +3 -0
  117. package/dist/src/utils/toolCursor.d.ts +3 -0
  118. package/dist/streets-Bakdn2nG.cjs +1 -0
  119. package/dist/streets-D0l2l7xn.js +13 -0
  120. package/dist/style-873tzaoH.cjs +1 -0
  121. package/dist/style-mSgM9UsZ.js +75 -0
  122. package/dist/terrain-CUJe0pn4.cjs +1 -0
  123. package/dist/terrain-CZOhjFPd.js +13 -0
  124. package/package.json +124 -3
@@ -0,0 +1,13 @@
1
+ const l = 8, e = "Lab Dark", t = { openmaptiles: { type: "vector", url: "https://tiles.openfreemap.org/planet" } }, a = /* @__PURE__ */ JSON.parse('[{"id":"background","type":"background","paint":{"background-color":"#343332"}},{"id":"park-national","type":"fill","source":"openmaptiles","source-layer":"park","filter":["all",["match",["geometry-type"],["Polygon","MultiPolygon"],true,false],["match",["get","class"],["national_park","nature_reserve","wildlife_refuge"],true,false]],"paint":{"fill-color":"#3c3b3a","fill-antialias":false}},{"id":"landcover","type":"fill","source":"openmaptiles","source-layer":"landcover","filter":["match",["get","class"],["wood","grass","sand"],true,false],"paint":{"fill-color":"#3c3b3a","fill-antialias":false,"fill-opacity":["interpolate",["linear"],["zoom"],5,["match",["get","subclass"],["park","garden","beach"],1,["match",["get","class"],"wood",0.3,0]],16,["match",["get","subclass"],["park","garden","beach"],1,["match",["get","class"],"wood",0.5,0.3]]]}},{"id":"landuse","type":"fill","source":"openmaptiles","source-layer":"landuse","filter":["match",["get","class"],["cemetery","hospital","school","university","college","kindergarten","industrial","railway","pitch","stadium"],true,false],"paint":{"fill-color":"#343332"}},{"id":"landuse-pitch-outline","type":"line","source":"openmaptiles","source-layer":"landuse","minzoom":13,"filter":["==",["get","class"],"pitch"],"paint":{"line-color":"#4a4847","line-opacity":["interpolate",["linear"],["zoom"],13,0.5,14,1],"line-width":["interpolate",["linear"],["zoom"],13,0.2,15,1]}},{"id":"aeroway-area","type":"fill","source":"openmaptiles","source-layer":"aeroway","minzoom":9,"filter":["match",["geometry-type"],["Polygon","MultiPolygon"],true,false],"paint":{"fill-color":"#3f3e3d"}},{"id":"aeroway","type":"line","source":"openmaptiles","source-layer":"aeroway","minzoom":9,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["match",["get","class"],["runway","taxiway"],true,false]],"paint":{"line-color":"#3f3e3d","line-width":["interpolate",["exponential",1.5],["zoom"],9,["match",["get","class"],"runway",1,0.5],18,["match",["get","class"],"runway",80,20]]}},{"id":"waterway","type":"line","source":"openmaptiles","source-layer":"waterway","minzoom":9,"filter":["all",["!=",["get","brunnel"],"tunnel"],["!=",["get","intermittent"],1]],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#191a1a","line-width":["interpolate",["exponential",1.3],["zoom"],9,["match",["get","class"],["river","canal"],0.1,0],14,["match",["get","class"],["river","canal"],1.4,0.1],20,["match",["get","class"],["river","canal"],8,3]]}},{"id":"water-shadow","type":"fill","source":"openmaptiles","source-layer":"water","filter":["!=",["get","brunnel"],"tunnel"],"paint":{"fill-color":"#111212","fill-translate-anchor":"viewport","fill-translate":["interpolate",["exponential",1.5],["zoom"],7,["literal",[0,0]],9,["literal",[-0.2,-0.2]],16,["literal",[-1.5,-1.5]]]}},{"id":"water","type":"fill","source":"openmaptiles","source-layer":"water","filter":["!=",["get","brunnel"],"tunnel"],"paint":{"fill-color":"#191a1a"}},{"id":"structure","type":"fill","source":"openmaptiles","source-layer":"transportation","minzoom":15,"filter":["all",["match",["geometry-type"],["Polygon","MultiPolygon"],true,false],["match",["get","class"],["bridge","pier"],true,false]],"paint":{"fill-color":"#343332","fill-opacity":["interpolate",["linear"],["zoom"],15,0.2,16,1]}},{"id":"road-pedestrian-area","type":"fill","source":"openmaptiles","source-layer":"transportation","minzoom":14,"filter":["all",["match",["geometry-type"],["Polygon","MultiPolygon"],true,false],["==",["get","class"],"path"]],"paint":{"fill-color":"#414141","fill-opacity":0.8}},{"id":"tunnel-casing","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":12,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["==",["get","brunnel"],"tunnel"],["any",["match",["get","class"],["service","track"],true,false],["match",["get","class"],["minor","busway","raceway"],true,false],["match",["get","class"],["secondary","tertiary"],true,false],["==",["get","class"],"primary"],["all",["match",["get","class"],["motorway","trunk"],true,false],["==",["get","ramp"],1]],["all",["match",["get","class"],["motorway","trunk"],true,false],["!=",["get","ramp"],1]]]],"paint":{"line-color":"#2b2b2b","line-dasharray":[3,3],"line-width":["interpolate",["exponential",1.5],["zoom"],12,["match",["get","class"],["service","track"],0,["minor","busway","raceway"],0.5,["secondary","tertiary"],0.6,"primary",0.97,["motorway","trunk"],0.75,0],14,["match",["get","class"],["service","track"],0,["minor","busway","raceway"],0.68,["secondary","tertiary"],0.76,"primary",1.29,["motorway","trunk"],1.13,0],16,["match",["get","class"],["service","track"],0.44,["minor","busway","raceway"],1.09,["secondary","tertiary"],1.14,"primary",2,["motorway","trunk"],2,0],18,["match",["get","class"],["service","track"],1.08,["minor","busway","raceway"],2,["secondary","tertiary"],2,"primary",2,["motorway","trunk"],2,0]],"line-gap-width":["interpolate",["exponential",1.5],["zoom"],12,["match",["get","class"],["service","track"],0,["minor","busway","raceway"],0.5,["secondary","tertiary"],2.12,"primary",3.16,["motorway","trunk"],3.35,0],14,["match",["get","class"],["service","track"],0.5,["minor","busway","raceway"],2.61,["secondary","tertiary"],4.99,"primary",6.63,["motorway","trunk"],6.79,0],16,["match",["get","class"],["service","track"],4.04,["minor","busway","raceway"],7.34,["secondary","tertiary"],11.45,"primary",14.44,["motorway","trunk"],14.55,0],18,["match",["get","class"],["service","track"],12,["minor","busway","raceway"],18,["secondary","tertiary"],26,"primary",32,["motorway","trunk"],32,0]]}},{"id":"tunnel","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":12,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["==",["get","brunnel"],"tunnel"],["any",["match",["get","class"],["service","track"],true,false],["match",["get","class"],["minor","busway","raceway"],true,false],["match",["get","class"],["secondary","tertiary"],true,false],["==",["get","class"],"primary"],["all",["match",["get","class"],["motorway","trunk"],true,false],["==",["get","ramp"],1]],["all",["match",["get","class"],["motorway","trunk"],true,false],["!=",["get","ramp"],1]]]],"layout":{"line-join":"round"},"paint":{"line-color":["match",["get","class"],["motorway","trunk"],"#252727","#414141"],"line-opacity":0.7,"line-width":["interpolate",["exponential",1.5],["zoom"],12,["match",["get","class"],["service","track"],0,["minor","busway","raceway"],0.5,["secondary","tertiary"],2.12,"primary",3.16,["motorway","trunk"],3.35,0],14,["match",["get","class"],["service","track"],0.5,["minor","busway","raceway"],2.61,["secondary","tertiary"],4.99,"primary",6.63,["motorway","trunk"],6.79,0],16,["match",["get","class"],["service","track"],4.04,["minor","busway","raceway"],7.34,["secondary","tertiary"],11.45,"primary",14.44,["motorway","trunk"],14.55,0],18,["match",["get","class"],["service","track"],12,["minor","busway","raceway"],18,["secondary","tertiary"],26,"primary",32,["motorway","trunk"],32,0]]}},{"id":"road-pedestrian-casing","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":14,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["!=",["get","brunnel"],"tunnel"],["all",["==",["get","class"],"path"],["==",["get","subclass"],"pedestrian"]]],"layout":{"line-join":"round"},"paint":{"line-color":"#2b2b2b","line-opacity":["interpolate",["linear"],["zoom"],14,0,17,1],"line-width":["interpolate",["exponential",1.5],["zoom"],14,2,18,14]}},{"id":"road-path","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":14,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["!=",["get","brunnel"],"tunnel"],["==",["get","class"],"path"],["!=",["get","subclass"],"pedestrian"]],"layout":{"line-join":"round"},"paint":{"line-color":"#808080","line-opacity":["interpolate",["linear"],["zoom"],14,0,15,0.4],"line-width":["interpolate",["exponential",1.5],["zoom"],14,0.5,22,4],"line-dasharray":["step",["zoom"],["literal",[2,1]],16,["literal",[2.66,1.4]],18,["literal",[3.33,1.8]]]}},{"id":"road-pedestrian","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":14,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["!=",["get","brunnel"],"tunnel"],["all",["==",["get","class"],"path"],["==",["get","subclass"],"pedestrian"]]],"layout":{"line-join":"round"},"paint":{"line-color":"#414141","line-width":["interpolate",["exponential",1.5],["zoom"],14,1,18,12],"line-dasharray":["step",["zoom"],["literal",[1,0]],15,["literal",[1.5,0.4]],16,["literal",[1,0.2]]]}},{"id":"road-service-casing","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":13,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["!=",["get","brunnel"],"tunnel"],["match",["get","class"],["service","track"],true,false]],"layout":{"line-cap":["step",["zoom"],"butt",14,"round"],"line-join":["step",["zoom"],"miter",14,"round"]},"paint":{"line-color":"#2b2b2b","line-width":["interpolate",["exponential",1.2],["zoom"],14,0,20,2],"line-gap-width":["interpolate",["exponential",1.5],["zoom"],14,0.5,18,12]}},{"id":"road-minor-casing","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":12,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["!=",["get","brunnel"],"tunnel"],["match",["get","class"],["minor","busway","raceway"],true,false]],"layout":{"line-cap":["step",["zoom"],"butt",14,"round"],"line-join":["step",["zoom"],"miter",14,"round"]},"paint":{"line-color":"#2b2b2b","line-width":["interpolate",["exponential",1.5],["zoom"],12,0.5,18,2],"line-gap-width":["interpolate",["exponential",1.5],["zoom"],12,0.5,18,18],"line-opacity":["interpolate",["linear"],["zoom"],12,0,14,1]}},{"id":"road-secondary-casing","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":9,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["!=",["get","brunnel"],"tunnel"],["match",["get","class"],["secondary","tertiary"],true,false]],"layout":{"line-cap":["step",["zoom"],"butt",14,"round"],"line-join":["step",["zoom"],"miter",14,"round"]},"paint":{"line-color":"#2b2b2b","line-width":["interpolate",["exponential",1.5],["zoom"],9,0.5,18,2],"line-gap-width":["interpolate",["exponential",1.5],["zoom"],9,0.5,18,26],"line-opacity":["interpolate",["linear"],["zoom"],9,0,11,1]}},{"id":"road-primary-casing","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":7,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["!=",["get","brunnel"],"tunnel"],["==",["get","class"],"primary"]],"layout":{"line-cap":["step",["zoom"],"butt",14,"round"],"line-join":["step",["zoom"],"miter",14,"round"]},"paint":{"line-color":"#2b2b2b","line-width":["interpolate",["exponential",1.5],["zoom"],7,0.75,16,2],"line-gap-width":["interpolate",["exponential",1.5],["zoom"],7,0.75,18,32],"line-opacity":["interpolate",["linear"],["zoom"],7,0.25,11,1]}},{"id":"road-link-casing","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":10,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["!=",["get","brunnel"],"tunnel"],["all",["match",["get","class"],["motorway","trunk"],true,false],["==",["get","ramp"],1]]],"layout":{"line-cap":["step",["zoom"],"butt",14,"round"],"line-join":["step",["zoom"],"miter",14,"round"]},"paint":{"line-color":"#2b2b2b","line-width":["interpolate",["exponential",1.5],["zoom"],11,0,12,0.75,20,2],"line-gap-width":["interpolate",["exponential",1.5],["zoom"],12,0.5,14,2,18,18]}},{"id":"road-motorway-casing","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":5,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["!=",["get","brunnel"],"tunnel"],["all",["match",["get","class"],["motorway","trunk"],true,false],["!=",["get","ramp"],1]]],"layout":{"line-cap":["step",["zoom"],"butt",14,"round"],"line-join":["step",["zoom"],"miter",14,"round"]},"paint":{"line-color":"#2b2b2b","line-width":["interpolate",["exponential",1.5],["zoom"],10,0,12,0.75,16,2],"line-gap-width":["interpolate",["exponential",1.5],["zoom"],5,0.75,18,32],"line-opacity":["interpolate",["linear"],["zoom"],10,0,11,1]}},{"id":"road-service","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":13,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["!=",["get","brunnel"],"tunnel"],["match",["get","class"],["service","track"],true,false]],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#414141","line-width":["interpolate",["exponential",1.5],["zoom"],14,0.5,18,12]}},{"id":"road-minor","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":12,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["!=",["get","brunnel"],"tunnel"],["match",["get","class"],["minor","busway","raceway"],true,false]],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#414141","line-width":["interpolate",["exponential",1.5],["zoom"],12,0.5,18,18]}},{"id":"road-secondary","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":9,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["!=",["get","brunnel"],"tunnel"],["match",["get","class"],["secondary","tertiary"],true,false]],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#414141","line-width":["interpolate",["exponential",1.5],["zoom"],9,0.5,18,26]}},{"id":"road-primary","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":7,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["!=",["get","brunnel"],"tunnel"],["==",["get","class"],"primary"]],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#444444","line-width":["interpolate",["exponential",1.5],["zoom"],7,0.75,18,32]}},{"id":"road-link","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":10,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["!=",["get","brunnel"],"tunnel"],["all",["match",["get","class"],["motorway","trunk"],true,false],["==",["get","ramp"],1]]],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#454545","line-width":["interpolate",["exponential",1.5],["zoom"],12,0.5,14,2,18,18]}},{"id":"road-motorway","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":5,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["!=",["get","brunnel"],"tunnel"],["all",["match",["get","class"],["motorway","trunk"],true,false],["!=",["get","ramp"],1]]],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#454545","line-width":["interpolate",["exponential",1.5],["zoom"],5,0.75,18,32]}},{"id":"rail","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":12,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["!=",["get","brunnel"],"tunnel"],["match",["get","class"],["rail","transit"],true,false]],"layout":{"line-join":"round"},"paint":{"line-color":"#2b2b2b","line-width":["interpolate",["linear"],["zoom"],12,0.4,14,0.75,16,1],"line-gap-width":["interpolate",["exponential",1.5],["zoom"],17,0,20,3]}},{"id":"rail-ties","type":"line","source":"openmaptiles","source-layer":"transportation","minzoom":16,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["!=",["get","brunnel"],"tunnel"],["match",["get","class"],["rail","transit"],true,false]],"paint":{"line-color":"#2b2b2b","line-dasharray":[0.1,2],"line-width":["interpolate",["exponential",1.5],["zoom"],16,0,20,8]}},{"id":"boundary-state","type":"line","source":"openmaptiles","source-layer":"boundary","minzoom":2,"filter":["all",[">=",["get","admin_level"],3],["<=",["get","admin_level"],4],["!=",["get","maritime"],1]],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#000000","line-opacity":0.75,"line-width":["interpolate",["linear"],["zoom"],4,0.5,7,0.75,12,1.5],"line-dasharray":["step",["zoom"],["literal",[12,0]],9,["literal",[12,3]]]}},{"id":"boundary-country","type":"line","source":"openmaptiles","source-layer":"boundary","filter":["all",["==",["get","admin_level"],2],["!=",["get","maritime"],1],["!=",["get","disputed"],1]],"layout":{"line-cap":"round","line-join":"round"},"paint":{"line-color":"#6e6e6e","line-width":["interpolate",["linear"],["zoom"],0,0.5,12,2]}},{"id":"boundary-country-disputed","type":"line","source":"openmaptiles","source-layer":"boundary","filter":["all",["==",["get","admin_level"],2],["!=",["get","maritime"],1],["==",["get","disputed"],1]],"paint":{"line-color":"#6e6e6e","line-width":["interpolate",["linear"],["zoom"],0,0.5,12,2],"line-dasharray":[4,2]}},{"id":"building","type":"fill","source":"openmaptiles","source-layer":"building","minzoom":14,"paint":{"fill-color":"#2c2c2b","fill-opacity":["interpolate",["linear"],["zoom"],14,0,15,1]}},{"id":"building-outline","type":"line","source":"openmaptiles","source-layer":"building","minzoom":15,"paint":{"line-color":"#343332","line-opacity":["interpolate",["linear"],["zoom"],15,0,16,1],"line-width":["interpolate",["linear"],["zoom"],15,0.2,20,1]}},{"id":"road-oneway","type":"symbol","source":"openmaptiles","source-layer":"transportation","minzoom":16,"filter":["all",["match",["geometry-type"],["LineString","MultiLineString"],true,false],["==",["get","oneway"],1],["match",["get","class"],["motorway","trunk","primary","secondary","tertiary","minor","service"],true,false]],"layout":{"symbol-placement":"line","symbol-spacing":200,"icon-image":["coalesce",["image","oneway"],["image","dot"]],"icon-size":0.5,"icon-padding":5,"icon-rotation-alignment":"map"},"paint":{"icon-color":"#5e5e5e"}},{"id":"label-housenumber","type":"symbol","source":"openmaptiles","source-layer":"housenumber","minzoom":17,"layout":{"text-field":["get","housenumber"],"text-font":["Inter Italic"],"text-size":10},"paint":{"text-color":"#b5b5b5","text-opacity":0.3}},{"id":"label-waterway","type":"symbol","source":"openmaptiles","source-layer":"waterway","minzoom":12,"filter":["match",["get","class"],["river","canal"],true,false],"layout":{"symbol-placement":"line","text-field":["coalesce",["get","name:en"],["get","name:latin"],["get","name"]],"text-font":["Inter Italic"],"text-letter-spacing":0.2,"text-size":["interpolate",["linear"],["zoom"],13,10,18,14]},"paint":{"text-color":"#b5b5b5"}},{"id":"label-water","type":"symbol","source":"openmaptiles","source-layer":"water_name","minzoom":11,"filter":["!",["match",["get","class"],["ocean","sea"],true,false]],"layout":{"text-field":["coalesce",["get","name:en"],["get","name:latin"],["get","name"]],"text-font":["Inter Italic"],"text-letter-spacing":0.2,"text-size":["interpolate",["linear"],["zoom"],13,10,18,14],"text-max-width":6},"paint":{"text-color":"#b5b5b5"}},{"id":"label-road-minor","type":"symbol","source":"openmaptiles","source-layer":"transportation_name","minzoom":15,"filter":["match",["get","class"],["service","track","path"],true,false],"layout":{"symbol-placement":"line","text-field":["coalesce",["get","name:en"],["get","name:latin"],["get","name"]],"text-font":["Inter Regular"],"text-size":["interpolate",["linear"],["zoom"],15,10,20,13],"text-max-angle":30,"text-padding":1},"paint":{"text-color":"#b5b5b5","text-halo-color":"#000000","text-halo-width":1,"text-halo-blur":1}},{"id":"label-road-street","type":"symbol","source":"openmaptiles","source-layer":"transportation_name","minzoom":15,"filter":["match",["get","class"],["minor","busway"],true,false],"layout":{"symbol-placement":"line","text-field":["coalesce",["get","name:en"],["get","name:latin"],["get","name"]],"text-font":["Inter Regular"],"text-size":["interpolate",["linear"],["zoom"],11,10,20,14],"text-max-angle":30,"text-padding":1},"paint":{"text-color":"#b5b5b5","text-halo-color":"#000000","text-halo-width":1,"text-halo-blur":1}},{"id":"label-road-major","type":"symbol","source":"openmaptiles","source-layer":"transportation_name","minzoom":11,"filter":["any",["match",["get","class"],["motorway","trunk","primary"],true,false],["all",[">=",["zoom"],14],["match",["get","class"],["secondary","tertiary"],true,false]]],"layout":{"symbol-placement":"line","text-field":["coalesce",["get","name:en"],["get","name:latin"],["get","name"]],"text-font":["Inter Regular"],"text-size":["interpolate",["linear"],["zoom"],9,10,20,16],"text-max-angle":30,"text-padding":1},"paint":{"text-color":"#b5b5b5","text-halo-color":"#000000","text-halo-width":1,"text-halo-blur":1}},{"id":"poi-transit","type":"symbol","source":"openmaptiles","source-layer":"poi","minzoom":13,"filter":["all",["any",["match",["get","class"],["railway","bus"],true,false],["all",[">=",["zoom"],16],["==",["get","subclass"],"subway_entrance"]]],["<=",["get","rank"],["step",["zoom"],3,14,8,15,30,16,99]]],"layout":{"symbol-sort-key":["get","rank"],"text-field":["coalesce",["get","name:en"],["get","name:latin"],["get","name"]],"text-font":["Inter Regular"],"text-size":10,"text-max-width":8},"paint":{"text-color":"#b5b5b5","text-halo-color":"#000000","text-halo-width":1,"text-halo-blur":1}},{"id":"poi","type":"symbol","source":"openmaptiles","source-layer":"poi","minzoom":15,"filter":["any",["match",["get","class"],["place_of_worship","castle","stadium"],true,false],["match",["get","subclass"],["townhall","hospital","zoo"],true,false],["all",[">=",["zoom"],17],["match",["get","class"],["museum","monument","theatre","college","park","library","attraction"],true,false]]],"layout":{"symbol-sort-key":["get","rank"],"text-field":["coalesce",["get","name:en"],["get","name:latin"],["get","name"]],"text-font":["Inter Regular"],"text-size":11,"text-max-width":8,"text-padding":2},"paint":{"text-color":"#b5b5b5","text-halo-color":"#000000","text-halo-width":1,"text-halo-blur":1}},{"id":"label-airport","type":"symbol","source":"openmaptiles","source-layer":"aerodrome_label","minzoom":10,"filter":["has","iata"],"layout":{"text-field":["coalesce",["get","name:en"],["get","name:latin"],["get","name"]],"text-font":["Inter Regular"],"text-size":11,"text-max-width":8},"paint":{"text-color":"#b5b5b5","text-halo-color":"#000000","text-halo-width":1,"text-halo-blur":1}},{"id":"label-peak","type":"symbol","source":"openmaptiles","source-layer":"mountain_peak","minzoom":14,"filter":["==",["get","class"],"peak"],"layout":{"text-field":["coalesce",["get","name:en"],["get","name:latin"],["get","name"]],"text-font":["Inter Regular"],"text-size":10,"text-max-width":8,"text-padding":15},"paint":{"text-color":"#b5b5b5","text-halo-color":"#000000","text-halo-width":1,"text-halo-blur":1}},{"id":"label-ocean","type":"symbol","source":"openmaptiles","source-layer":"water_name","filter":["match",["get","class"],["ocean","sea"],true,false],"layout":{"text-field":["coalesce",["get","name:en"],["get","name:latin"],["get","name"]],"text-font":["Inter Regular"],"text-max-width":6,"text-size":["interpolate",["linear"],["zoom"],1,["match",["get","class"],"ocean",14,11],6,["match",["get","class"],"ocean",24,16]]},"paint":{"text-color":"#383b3b"}},{"id":"label-suburb","type":"symbol","source":"openmaptiles","source-layer":"place","minzoom":11,"maxzoom":16,"filter":["any",["match",["get","class"],["suburb","quarter"],true,false],["all",[">=",["zoom"],15],["==",["get","class"],"neighbourhood"]]],"layout":{"text-field":["coalesce",["get","name:en"],["get","name:latin"],["get","name"]],"text-font":["Inter Regular"],"text-transform":"uppercase","text-letter-spacing":0.04,"text-padding":3,"text-max-width":8,"text-size":["interpolate",["linear"],["zoom"],11,9,15,16]},"paint":{"text-color":"#b5b5b5","text-halo-color":"#000000","text-halo-width":1,"text-halo-blur":1}},{"id":"label-village","type":"symbol","source":"openmaptiles","source-layer":"place","minzoom":10,"maxzoom":15,"filter":["match",["get","class"],["village","hamlet"],true,false],"layout":{"text-field":["coalesce",["get","name:en"],["get","name:latin"],["get","name"]],"text-font":["Inter Regular"],"text-max-width":7,"text-padding":1,"text-size":["interpolate",["linear"],["zoom"],10,11,16,18],"symbol-sort-key":["get","rank"]},"paint":{"text-color":"#b5b5b5","text-halo-color":"#000000","text-halo-width":1,"text-halo-blur":1}},{"id":"label-town","type":"symbol","source":"openmaptiles","source-layer":"place","minzoom":7,"maxzoom":15,"filter":["==",["get","class"],"town"],"layout":{"text-field":["coalesce",["get","name:en"],["get","name:latin"],["get","name"]],"text-font":["Inter Regular"],"text-max-width":7,"text-padding":1,"text-size":["interpolate",["linear"],["zoom"],7,11,15,20],"symbol-sort-key":["get","rank"],"icon-image":["step",["zoom"],["coalesce",["image","dot"],["image","dot"]],8,""],"icon-size":0.8,"text-variable-anchor-offset":["step",["zoom"],["literal",["bottom",[0,-0.3],"top",[0,0.3],"left",[0.6,0],"right",[-0.6,0]]],8,["literal",["center",[0,0]]]]},"paint":{"text-color":"#b5b5b5","text-halo-color":"#000000","text-halo-width":1,"text-halo-blur":1,"icon-color":"#0d0d0d"}},{"id":"label-city","type":"symbol","source":"openmaptiles","source-layer":"place","minzoom":4,"maxzoom":14,"filter":["all",["==",["get","class"],"city"],["!=",["get","capital"],2]],"layout":{"text-field":["coalesce",["get","name:en"],["get","name:latin"],["get","name"]],"text-font":["Inter Regular"],"text-max-width":8,"text-size":["interpolate",["linear"],["zoom"],4,["step",["get","rank"],12,8,11],6,["step",["get","rank"],14,8,12],10,["step",["get","rank"],22,8,17],14,22],"symbol-sort-key":["get","rank"],"icon-image":["step",["zoom"],["coalesce",["image","dot"],["image","dot"]],8,""],"icon-size":0.95,"text-variable-anchor-offset":["step",["zoom"],["literal",["bottom",[0,-0.3],"top",[0,0.3],"left",[0.6,0],"right",[-0.6,0]]],8,["literal",["center",[0,0]]]]},"paint":{"text-color":"#b5b5b5","text-halo-color":"#000000","text-halo-width":1,"text-halo-blur":1,"icon-color":"#0d0d0d"}},{"id":"label-state","type":"symbol","source":"openmaptiles","source-layer":"place","minzoom":3,"maxzoom":8,"filter":["all",["==",["get","class"],"state"],["<=",["get","rank"],2]],"layout":{"text-field":["coalesce",["get","name:en"],["get","name:latin"],["get","name"]],"text-font":["Inter Regular"],"text-transform":"uppercase","text-letter-spacing":0.05,"text-max-width":6,"text-padding":5,"text-size":["interpolate",["linear"],["zoom"],3,8,8,16]},"paint":{"text-color":"#b5b5b5","text-halo-color":"#000000","text-halo-width":1,"text-halo-blur":1,"text-opacity":0.8}},{"id":"label-capital","type":"symbol","source":"openmaptiles","source-layer":"place","minzoom":3,"maxzoom":14,"filter":["all",["==",["get","class"],"city"],["==",["get","capital"],2]],"layout":{"text-field":["coalesce",["get","name:en"],["get","name:latin"],["get","name"]],"text-font":["Inter Bold"],"text-max-width":8,"text-size":["interpolate",["linear"],["zoom"],4,12,10,22],"icon-image":["step",["zoom"],["coalesce",["image","dot"],["image","dot"]],8,""],"icon-size":1.1,"text-variable-anchor-offset":["step",["zoom"],["literal",["top",[0,0.3],"bottom",[0,-0.3],"left",[0.6,0],"right",[-0.6,0]]],8,["literal",["center",[0,0]]]]},"paint":{"text-color":"#b5b5b5","text-halo-color":"#000000","text-halo-width":1,"text-halo-blur":1,"icon-color":"#0d0d0d"}},{"id":"label-country","type":"symbol","source":"openmaptiles","source-layer":"place","minzoom":1,"maxzoom":8,"filter":["==",["get","class"],"country"],"layout":{"text-field":["coalesce",["get","name:en"],["get","name:latin"],["get","name"]],"text-font":["Inter Bold"],"text-max-width":6,"symbol-sort-key":["get","rank"],"text-size":["interpolate",["linear"],["zoom"],1,["step",["get","rank"],10,3,9,5,8],3,["step",["get","rank"],15,3,10,5,9],6,["step",["get","rank"],24,3,20,5,15],8,["step",["get","rank"],24,3,24,5,18]]},"paint":{"text-color":"#c4c4c4","text-halo-color":"#000000","text-halo-width":1,"text-halo-blur":1}}]'), o = {
2
+ version: 8,
3
+ name: e,
4
+ sources: t,
5
+ layers: a
6
+ };
7
+ export {
8
+ o as default,
9
+ a as layers,
10
+ e as name,
11
+ t as sources,
12
+ l as version
13
+ };
package/dist/index.cjs ADDED
@@ -0,0 +1,26 @@
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const B=require("react/jsx-runtime"),u=require("react"),F=require("@element-editor/core/internal"),L=require("@element-editor/ui"),Ne=require("@element-editor/ui/internal"),le=require("@element-editor/core"),Ie=require("maplibre-gl"),_t=require("@phosphor-icons/react"),Ue=require("react-dom"),Nn=require("@turf/transform-rotate"),pe=require("@turf/helpers"),Qt=require("@turf/bbox"),Un=require("@turf/boolean-intersects"),Me=require("@turf/length"),Qe=require("@turf/area"),jt=require("./basemapIds-2GdXIJS1.cjs"),we=require("@turf/distance");function Le(){return{type:"FeatureCollection",features:[]}}const $n="elm-features",en=new WeakMap;function Gn(e,t,n){en.set(e,{features:t,uniqueIds:n})}function vt(e,t){const n=e.getSource($n),r=en.get(e);if(!(!n||!r||t.size===0))try{if(r.uniqueIds){const i=[];let a=!0;for(const[d,c]of t)if(c.type==="GeometryCollection"){if(c.geometries.length!==1){a=!1;break}i.push({id:d,newGeometry:c.geometries[0]})}else i.push({id:d,newGeometry:c});if(a){n.updateData({update:i});return}}const o=new Map,s=r.features.map(i=>{var c;const a=(c=i.properties)==null?void 0:c.id,d=t.get(a);if(!d)return i;if(d.type==="GeometryCollection"){const x=o.get(a)??0;o.set(a,x+1);const f=d.geometries[x];return f?{...i,geometry:f}:i}return{...i,geometry:d}});n.setData({type:"FeatureCollection",features:s})}catch{}}const tn=u.createContext(void 0);function nn({getFeatureStyle:e,children:t}){return B.jsx(tn.Provider,{value:e,children:t})}function rn(){return u.useContext(tn)}function Hn(e){let t,n,r;const o=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(e.trim());if(o){const i=o[1].length===3?o[1].replace(/./g,a=>a+a):o[1];t=parseInt(i.slice(0,2),16),n=parseInt(i.slice(2,4),16),r=parseInt(i.slice(4,6),16)}else{const i=/^rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)/i.exec(e.trim());if(!i)return null;t=+i[1],n=+i[2],r=+i[3]}const s=i=>{const a=i/255;return a<=.03928?a/12.92:((a+.055)/1.055)**2.4};return .2126*s(t)+.7152*s(n)+.0722*s(r)}function At(e){var t,n,r;try{const o=(n=(t=e.getStyle())==null?void 0:t.layers)==null?void 0:n.find(a=>a.type==="background"),s=(r=o==null?void 0:o.paint)==null?void 0:r["background-color"];if(typeof s!="string")return!1;const i=Hn(s);return i!==null&&i<.18}catch{return!1}}const on=u.createContext(0),ot=()=>u.useContext(on);function ke(e,t,n=le.readAccentPalette(e.getContainer())){for(const[r,o,s]of t)e.getLayer(r)&&e.setPaintProperty(r,o,s(n))}function $e(e,t){const n=L.useAccentPalette(e.getContainer());return u.useEffect(()=>{ke(e,t,n)},[e,t,n]),n}const fe="elm-features",xt="elm-features-line-hit",Vn=16,et=["boolean",["feature-state","hovered"],!1],Xn=["boolean",["feature-state","fresh"],!1],it=(e,t,n)=>["case",["boolean",["feature-state","selected"],!1],e,["coalesce",...t,["case",et,n.hover,n.color]]],Dt=[["get","_fillColor"],["get","_color"]],Yn={color:le.DEFAULT_FEATURE_COLOR,hover:"#64748b",casing:"rgba(255, 255, 255, 0.7)"},zn={color:F.DEFAULT_FEATURE_COLOR_ON_DARK,hover:"#cbd5e1",casing:"rgba(15, 23, 42, 0.5)"},sn=e=>[["elm-features-fill","fill-color",t=>it(t[500],Dt,e)],["elm-features-line-casing","line-color",()=>e.casing],["elm-features-line","line-color",t=>it(t[500],[["get","_color"]],e)],["elm-features-point","circle-color",t=>["case",Xn,t[600],it(t[500],Dt,e)]]],cn=sn(Yn),qn=sn(zn),St=["in",["geometry-type"],["literal",["LineString","MultiLineString"]]],Tt=["coalesce",["get","_weight"],["case",St,3.5,1.8]],Ot=["case",["boolean",["feature-state","selected"],!1],["case",St,4,2.5],et,["+",Tt,.7],Tt],Wn=1.5;function Zn(e){e.getSource(fe)||(e.addSource(fe,{type:"geojson",data:Le(),promoteId:"id"}),e.addLayer({id:"elm-features-fill",type:"fill",source:fe,filter:["in",["geometry-type"],["literal",["Polygon","MultiPolygon"]]],paint:{"fill-opacity":["case",["boolean",["feature-state","selected"],!1],.28,et,["max",["coalesce",["get","_fillOpacity"],.13],.22],["coalesce",["get","_fillOpacity"],.13]]}}),e.addLayer({id:"elm-features-line-casing",type:"line",source:fe,filter:St,paint:{"line-width":["+",Ot,2*Wn],"line-opacity":["coalesce",["get","_opacity"],1]}}),e.addLayer({id:"elm-features-line",type:"line",source:fe,filter:["in",["geometry-type"],["literal",["LineString","MultiLineString","Polygon","MultiPolygon"]]],paint:{"line-width":Ot,"line-opacity":["coalesce",["get","_opacity"],1]}}),e.addLayer({id:xt,type:"line",source:fe,filter:["in",["geometry-type"],["literal",["LineString","MultiLineString"]]],paint:{"line-width":Vn,"line-color":"#000","line-opacity":0}}),e.addLayer({id:"elm-features-point",type:"circle",source:fe,filter:["all",["in",["geometry-type"],["literal",["Point","MultiPoint"]]],["!=",["get","_isText"],"true"]],paint:{"circle-radius":["case",["boolean",["feature-state","selected"],!1],10,et,9,8],"circle-opacity":["coalesce",["get","_fillOpacity"],1],"circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),e.getGlyphs()?e.addLayer({id:"elm-features-text",type:"symbol",source:fe,filter:["==",["get","_isText"],"true"],layout:{"text-field":["get","name"],"text-font":["Noto Sans Regular"],"text-size":14,"text-allow-overlap":!0},paint:{"text-color":"#ffffff","text-halo-color":le.DEFAULT_FEATURE_COLOR,"text-halo-width":2}}):F.warnOnce("maplibre-no-glyphs",'The map style has no `glyphs`, so Element can\'t show text features. Use a style with glyphs that serve "Noto Sans Regular".'),ke(e,cn))}function Jn(e){for(const t of["elm-features-text","elm-features-point",xt,"elm-features-line","elm-features-line-casing","elm-features-fill"])e.getLayer(t)&&e.removeLayer(t);e.getSource(fe)&&e.removeSource(fe)}const Fe=["elm-features-fill","elm-features-line",xt,"elm-features-point"];function an({map:e}){const t=L.useDataStore(T=>T.features),n=L.useDataStore(T=>T.groups),r=L.useDataStore(T=>T.selectedIds),o=L.useUIStore(T=>T.editingMode),s=L.useUIStore(T=>T.geometryPreview!==null),i=L.useUIStore(T=>T.bufferCreateNew),a=rn(),d=L.useElementEditorConfig().featureColor,c=ot(),[x,f]=u.useState(()=>At(e));u.useEffect(()=>{const T=()=>f(At(e));return T(),e.on("styledata",T),()=>{e.off("styledata",T)}},[e,c]);const y=x?qn:cn,w=$e(e,y);u.useEffect(()=>{ke(e,y,w)},[c]);const M=Ne.useOptionalEmit(),O=u.useRef(!1);u.useEffect(()=>{O.current||e.getGlyphs()||(O.current=!0,M==null||M({type:"error",code:"unsupported",source:"basemap",quiet:!0,message:'The map style has no glyphs, so text features are not shown. Use a style whose glyphs serve "Noto Sans Regular".'}))},[e,c,M]);const I=s&&(o==="simplify-shape"||o==="smooth-shape"||o==="buffer-shape"&&!i)?r:null;u.useEffect(()=>{const T=e.getSource(fe);if(!T)return;const K=new Set(n.filter(R=>R.hidden).map(R=>R.id)),Z=I?new Set(I):null,p=t.filter(R=>!(R.hidden||R.groupId&&K.has(R.groupId)||Z!=null&&Z.has(R.id)&&F.canProcessShape(R.geometry.type))),g=[];let E=!0;for(const R of p){const{_validation:j,..._}=R,l=a==null?void 0:a(R),S={},h=(l==null?void 0:l.color)??d;if(h!==void 0&&(S._color=h),l&&(l.fillColor!==void 0&&(S._fillColor=l.fillColor),l.opacity!==void 0&&(S._opacity=l.opacity),l.fillOpacity!==void 0&&(S._fillOpacity=l.fillOpacity),l.weight!==void 0&&(S._weight=l.weight)),R.geometry.type==="GeometryCollection"){R.geometry.geometries.length>1&&(E=!1);for(const v of R.geometry.geometries)g.push({..._,geometry:v,properties:{..._.properties,...S,id:R.id}})}else g.push({..._,properties:{..._.properties,...S,id:R.id}})}T.setData({type:"FeatureCollection",features:g}),Gn(e,g,E)},[t,n,e,I,a,d,c]);const N=u.useRef(new Set),C=u.useRef(c);return u.useEffect(()=>{if(!e.getSource(fe))return;C.current!==c&&(C.current=c,N.current=new Set);const T=N.current,K=new Set(r);for(const Z of T)K.has(Z)||e.setFeatureState({source:fe,id:Z},{selected:!1});for(const Z of K)T.has(Z)||e.setFeatureState({source:fe,id:Z},{selected:!0});N.current=K},[r,e,c]),null}function ct(e,t,n){e.getSource(fe)&&(n&&e.setFeatureState({source:fe,id:n},{hovered:!1}),t&&e.setFeatureState({source:fe,id:t},{hovered:!0}))}function wt(e,t,n,r,o=15,s=new Set){const i=n.project([e,t]),a=i.x,d=i.y;let c=1/0,x=null,f=null,y=1/0,w=0,M=0,O=!1,D=null;const I=o+1;let N=1/0,C=-1/0,T=1/0,K=-1/0;for(const[E,R]of[[a-I,d-I],[a+I,d-I],[a-I,d+I],[a+I,d+I]]){const j=n.unproject([E,R]);j.lng<N&&(N=j.lng),j.lng>C&&(C=j.lng),j.lat<T&&(T=j.lat),j.lat>K&&(K=j.lat)}let Z="";function p(E,R=!0){if(!E||E.length===0)return;let j=-1,_=0,l=0;for(let S=0;S<E.length;S++){const h=E[S];if(!(h[0]<N||h[0]>C||h[1]<T||h[1]>K)){if(j!==S){const A=n.project(h);_=A.x,l=A.y,j=S}const v=Math.hypot(a-_,d-l);v<c&&(c=v,x=h,f=Z)}if(R&&S<E.length-1){const v=E[S+1];if(h[0]<N&&v[0]<N||h[0]>C&&v[0]>C||h[1]<T&&v[1]<T||h[1]>K&&v[1]>K)continue;if(j!==S){const k=n.project(h);_=k.x,l=k.y}const A=_,b=l,P=n.project(v);j=S+1,_=P.x,l=P.y;const U=(A-P.x)**2+(b-P.y)**2;let X=A,G=b;if(U!==0){let k=((a-A)*(P.x-A)+(d-b)*(P.y-b))/U;k=Math.max(0,Math.min(1,k)),X=A+k*(P.x-A),G=b+k*(P.y-b)}const m=Math.hypot(a-X,d-G);m<y&&(y=m,w=X,M=G,O=!0,D=Z)}}}function g(E){switch(E.type){case"Point":p([E.coordinates]);break;case"MultiPoint":p(E.coordinates,!1);break;case"LineString":p(E.coordinates);break;case"Polygon":case"MultiLineString":for(const R of E.coordinates)p(R);break;case"MultiPolygon":for(const R of E.coordinates)for(const j of R)p(j);break;case"GeometryCollection":for(const R of E.geometries)g(R);break}}for(const E of r)if(!s.has(E.id)){if(E.bbox){const[R,j,_,l]=E.bbox;if(_<N||R>C||l<T||j>K)continue}Z=E.id,g(E.geometry)}if(c<=o&&x)return{lnglat:x,isVertex:!0,featureId:f??void 0};if(y<=o&&O){const E=n.unproject([w,M]);return{lnglat:[E.lng,E.lat],isVertex:!1,featureId:D??void 0}}return null}function tt(e,t,n,r=15){const o=e.project(t),s=e.project(n),i=s.x-o.x,a=s.y-o.y,d=Math.hypot(i,a);if(d<1)return n;const c=Math.atan2(a,i),x=r*Math.PI/180,f=Math.round(c/x)*x,y=o.x+d*Math.cos(f),w=o.y+d*Math.sin(f),M=e.unproject([y,w]);return[M.lng,M.lat]}let mt=!1;function Qn(){mt=!0,Promise.resolve().then(()=>{mt=!1})}function er(){return mt}let ln=0;function tr(){ln=Date.now()}function nr(){return Date.now()-ln<200}let un=0;function at(){un=Date.now()}function dn(){return Date.now()-un<200}const Be=e=>e!=="none"?"crosshair":"",rr=3,Kt=5;function fn({map:e,routingApiKey:t}){const{uiStore:n,dataStore:r}=L.useGeoStore(),o=Ne.useRouting(t),s=L.useElementEditorConfig().network.fetch,i=u.useRef(null);i.current=o===!1?null:{...o,fetch:s};const a=L.useEmit(),d=L.useIsEventForEditor(),c=L.useUIStore(p=>p.editingMode),x=L.useUIStore(p=>p.cancelDrawing),f=L.useUIStore(p=>p.routeWaypoints),y=u.useRef(f);u.useEffect(()=>{y.current=f},[f]);const w=u.useRef(null),M=u.useRef(null),O=u.useRef(null),D=u.useRef(!1),I=u.useRef(!1),N=u.useRef(!1),C=u.useRef(null),T=u.useRef(F.createClickRepeatGuard()).current,K=u.useRef(!1),Z=u.useCallback(async p=>{if(!(p.length<2)){n.getState().setRoutePreview(null,!0);try{if(!i.current)throw new Error("routing is off");const g=await le.fetchRoute(p,i.current);y.current.length>=2&&n.getState().setRoutePreview(g,!1)}catch(g){const E=F.routingError(g);a({type:"error",code:E.code,source:"routing",message:E.message,error:E}),n.getState().setRoutePreview(p,!1)}}},[n,a]);return u.useEffect(()=>{const p=e.getCanvas();function g(){K.current||(K.current=!0,e.dragPan.enable(),p.style.cursor="grab")}function E(){if(!K.current)return;K.current=!1;const h=n.getState().editingMode;p.style.cursor=Be(h),(h==="draw-rect"||h==="draw-circle"||h==="draw-freehand")&&e.dragPan.disable()}const R=h=>{if(h.key==="Shift"&&(I.current=!0),!!d(h)){if(h.code==="Space"){const v=h.target;if(v&&(v.tagName==="INPUT"||v.tagName==="TEXTAREA"||v.isContentEditable))return;h.preventDefault(),n.getState().editingMode!=="none"&&g();return}if(h.key==="Escape"){const{selectedMeasurementId:v,setSelectedMeasurementId:A}=n.getState();if(v){A(null);return}x();return}if(h.key==="Enter"){const v=n.getState();if(v.editingMode==="measure"){v.completeMeasure();return}}if(h.key==="Backspace"||h.key==="Delete"){const v=n.getState();if(v.selectedMeasurementId){v.removeMeasurement(v.selectedMeasurementId);return}const A=v.editingMode;if(A==="measure"){v.removeLastMeasurePoint();return}if(A==="draw-line"||A==="slice-shape"){v.removeLastLineVertex();return}if(A==="draw-polygon"||A==="cut-hole"){v.removeLastPolygonVertex();return}if(A==="draw-route"){v.removeLastRouteWaypoint();return}}}},j=h=>{if(h.code==="Space"){E();return}h.key==="Shift"&&(I.current=!1)},_=()=>E(),l=()=>{p.style.cursor="grabbing"},S=()=>{p.style.cursor=K.current?"grab":Be(n.getState().editingMode)};return window.addEventListener("keydown",R),window.addEventListener("keyup",j),window.addEventListener("blur",_),e.on("dragstart",l),e.on("dragend",S),()=>{window.removeEventListener("keydown",R),window.removeEventListener("keyup",j),window.removeEventListener("blur",_),e.off("dragstart",l),e.off("dragend",S)}},[x,n,e,d]),u.useEffect(()=>{e.getCanvas().style.cursor=Be(c)},[c,e]),u.useEffect(()=>{c==="draw-freehand"?e.dragPan.disable():(e.dragPan.enable(),D.current=!1)},[c,e]),u.useEffect(()=>(c!=="none"?e.doubleClickZoom.disable():e.doubleClickZoom.enable(),()=>{e.doubleClickZoom.enable()}),[c,e]),u.useEffect(()=>{var R;if(!F.CLICK_TOOL_MODES.includes(c))return;const p=(R=e.handlers)==null?void 0:R._handlersById,g=[p==null?void 0:p.mapEvent,p==null?void 0:p.mousePan].filter(j=>typeof(j==null?void 0:j._clickTolerance)=="number"),E=g.map(j=>j._clickTolerance);for(const j of g)j._clickTolerance=F.CLICK_SLOP_PX;return()=>g.forEach((j,_)=>{j._clickTolerance=E[_]})},[c,e]),u.useEffect(()=>(c!=="none"?e.boxZoom.disable():e.boxZoom.enable(),()=>{e.boxZoom.enable()}),[c,e]),u.useEffect(()=>()=>{M.current&&clearTimeout(M.current),O.current&&O.current.abort()},[]),u.useEffect(()=>{const p=l=>l.metaKey||l.ctrlKey||l.altKey,g=l=>{if(!p(l.originalEvent)&&!K.current){if(c==="draw-freehand"){D.current=!0,n.getState().clearFreehandPoints(),n.getState().addFreehandPoint([l.lngLat.lng,l.lngLat.lat]);return}if(c==="draw-rect"){e.dragPan.disable(),r.getState().selectedIds.length>0&&r.setState({selectedIds:[]});const S=n.getState().snappedCoord??[l.lngLat.lng,l.lngLat.lat];n.getState().setRectCorner(S),N.current=!0,C.current={x:l.point.x,y:l.point.y};return}if(c==="draw-circle"){e.dragPan.disable(),r.getState().selectedIds.length>0&&r.setState({selectedIds:[]});const S=n.getState().snappedCoord??[l.lngLat.lng,l.lngLat.lat];n.getState().setCircleCenter(S),N.current=!0,C.current={x:l.point.x,y:l.point.y};return}}},E=l=>{if(c==="draw-freehand"&&D.current){D.current=!1;const A=e.getZoom(),b=156543.03392*Math.cos(l.lngLat.lat*Math.PI/180)/Math.pow(2,A),P=rr*b/111320;n.getState().commitFreehand(P),at();return}if(!N.current)return;N.current=!1,e.dragPan.enable();const S=C.current,h=S?Math.hypot(l.point.x-S.x,l.point.y-S.y):0;C.current=null;const v=n.getState();if(c==="draw-rect"){const A=v.rectCorner;if(!A)return;if(h<Kt){n.setState({rectCorner:null});return}const b=v.snappedCoord??[l.lngLat.lng,l.lngLat.lat],P=I.current||l.originalEvent.shiftKey;v.commitRect(A,b,{},P),at();return}if(c==="draw-circle"){const A=v.circleCenter;if(!A)return;let b;if(h<Kt){const X=e.unproject([l.point.x+25,l.point.y]);b=[X.lng,X.lat]}else b=v.snappedCoord??[l.lngLat.lng,l.lngLat.lat];const P=b[0]-A[0],U=b[1]-A[1];Math.hypot(P,U)>=1e-6&&(v.commitCircle(A,b,{}),at());return}},R=l=>{const S=n.getState();if(c==="draw-freehand"&&D.current){S.addFreehandPoint([l.lngLat.lng,l.lngLat.lat]);return}if(c==="draw-route"&&y.current.length>0){const h=[l.lngLat.lng,l.lngLat.lat];S.setRouteCursorPos(h),S.setRouteCursorPreview(null),M.current&&clearTimeout(M.current),O.current&&O.current.abort();const v=y.current[y.current.length-1];M.current=setTimeout(async()=>{const A=new AbortController;O.current=A;try{if(!i.current)return;const b=await le.fetchRoute([v,h],{...i.current,signal:A.signal});A.signal.aborted||n.getState().setRouteCursorPreview(b)}catch{}},400)}if((c==="draw-polygon"||c==="cut-hole")&&S.polygonInProgress.length>=3){const h=S.polygonInProgress[0],v=e.project(h),A=Math.hypot(l.point.x-v.x,l.point.y-v.y);e.getCanvas().style.cursor=A<=48?"pointer":"crosshair"}},j=l=>{const S=T.click(l.originalEvent);if(p(l.originalEvent)||nr()||K.current||dn())return;const h=n.getState();if(c==="measure"){if(S||er())return;h.selectedMeasurementId&&h.setSelectedMeasurementId(null);const b=h.snappedCoord??[l.lngLat.lng,l.lngLat.lat];h.addMeasurePoint(b);return}["place-point","draw-line","draw-polygon","draw-route","draw-circle","draw-rect"].includes(c)&&r.getState().selectedIds.length>0&&r.setState({selectedIds:[]});const A=h.snappedCoord??[l.lngLat.lng,l.lngLat.lat];if(c==="place-point"){if(S)return;h.commitPoint(A);return}if(c==="draw-line"||c==="draw-polygon"||c==="draw-route"||c==="cut-hole"||c==="slice-shape"){let b=A;if(I.current||l.originalEvent.shiftKey){const P=c==="draw-line"||c==="slice-shape"?h.lineInProgress:h.polygonInProgress;P.length>=1&&(b=tt(e,P[P.length-1],b))}if((c==="draw-polygon"||c==="cut-hole")&&h.polygonInProgress.length>=2){const P=h.polygonInProgress[0],U=e.project(P);if(Math.hypot(l.point.x-U.x,l.point.y-U.y)<=48){c==="draw-polygon"?h.commitPolygon({}):h.commitCutHole();return}}if(S)return;if(c==="draw-line"||c==="slice-shape")h.addLineVertex(b);else if(c==="draw-polygon"||c==="cut-hole")h.addPolygonVertex(b);else if(c==="draw-route"){w.current={waypoints:[...y.current],preview:h.routePreview},M.current&&(clearTimeout(M.current),M.current=null),O.current&&(O.current.abort(),O.current=null),h.setRouteCursorPos(null),h.setRouteCursorPreview(null),h.addRouteWaypoint(b);const P=[...y.current,b];Z(P)}return}},_=()=>{if(!T.isDouble())return;const l=n.getState();if(c==="measure"){l.completeMeasure();return}c==="draw-line"?l.commitLine({}):c==="draw-polygon"?l.commitPolygon({}):c==="cut-hole"?l.commitCutHole():c==="slice-shape"?l.commitSliceShape():c==="draw-route"&&(w.current&&(n.setState({routeWaypoints:w.current.waypoints,routePreview:w.current.preview,routeLoading:!1}),w.current=null),l.commitRoute())};return e.on("mousedown",g),e.on("mouseup",E),e.on("mousemove",R),e.on("click",j),e.on("dblclick",_),()=>{e.off("mousedown",g),e.off("mouseup",E),e.off("mousemove",R),e.off("click",j),e.off("dblclick",_)}},[c,e,Z,n,r]),null}function Bt(e){var t,n;return`${e.editingMode}|${e.lineInProgress.length}|${e.polygonInProgress.length}|${e.circleCenter}|${e.rectCorner}|${e.routeWaypoints.length}|${((t=e.routePreview)==null?void 0:t.length)??0}|${((n=e.routeCursorPreview)==null?void 0:n.length)??0}|${e.freehandPoints.length}`}const ve="elm-preview",gn=[["elm-preview-fill","fill-color",e=>e[500]],["elm-preview-line","line-color",e=>e[500]],["elm-preview-vertex","circle-color",e=>e[500]]];function or(e){e.getSource(ve)||(e.addSource(ve,{type:"geojson",data:Le()}),e.addLayer({id:"elm-preview-fill",type:"fill",source:ve,filter:["==",["geometry-type"],"Polygon"],paint:{"fill-opacity":.13}}),e.addLayer({id:"elm-preview-line",type:"line",source:ve,filter:["in",["geometry-type"],["literal",["LineString","Polygon"]]],paint:{"line-width":2,"line-dasharray":[4,3]}}),e.addLayer({id:"elm-preview-vertex",type:"circle",source:ve,filter:["all",["==",["geometry-type"],"Point"],["!=",["get","_isFirst"],!0]],paint:{"circle-radius":5,"circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),e.addLayer({id:"elm-preview-first-vertex",type:"circle",source:ve,filter:["==",["get","_isFirst"],!0],paint:{"circle-radius":7,"circle-color":"#22c55e","circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),ke(e,gn))}function sr(e){for(const t of["elm-preview-first-vertex","elm-preview-vertex","elm-preview-line","elm-preview-fill"])e.getLayer(t)&&e.removeLayer(t);e.getSource(ve)&&e.removeSource(ve)}function Ce(e,t){const n=e.getSource(ve);n&&n.setData({type:"FeatureCollection",features:t})}function yn({map:e}){$e(e,gn);const{uiStore:t,dataStore:n}=L.useGeoStore(),r=L.useUIStore(c=>c.editingMode),o=L.useDataStore(c=>c.geometryMode),s=u.useRef(o);u.useEffect(()=>{s.current=o},[o]);const i=u.useRef(null),a=u.useRef(!1);u.useEffect(()=>{const c=y=>{i.current=[y.lngLat.lng,y.lngLat.lat],d()},x=y=>{y.key==="Shift"&&(a.current=!0)},f=y=>{y.key==="Shift"&&(a.current=!1)};return e.on("mousemove",c),window.addEventListener("keydown",x),window.addEventListener("keyup",f),()=>{e.off("mousemove",c),window.removeEventListener("keydown",x),window.removeEventListener("keyup",f)}},[e]),u.useEffect(()=>{let c=Bt(t.getState());return t.subscribe(f=>{const y=Bt(f);y!==c&&(c=y,d())})},[t]),u.useEffect(()=>{i.current=null,r==="none"&&Ce(e,[])},[r,e]);function d(){const c=t.getState(),x=i.current,f=[];if(c.editingMode==="draw-line"||c.editingMode==="slice-shape"){const y=c.lineInProgress;if(y.length===0)return Ce(e,[]);let w=x??y[y.length-1];a.current&&y.length>=1&&(w=tt(e,y[y.length-1],w));const M=[...y,w];f.push({type:"Feature",properties:{},geometry:{type:"LineString",coordinates:M}}),y.forEach((O,D)=>{f.push({type:"Feature",properties:{_isFirst:D===0},geometry:{type:"Point",coordinates:O}})})}if(c.editingMode==="draw-polygon"||c.editingMode==="cut-hole"){const y=c.polygonInProgress;if(y.length===0)return Ce(e,[]);let w=x??y[y.length-1];a.current&&y.length>=1&&(w=tt(e,y[y.length-1],w));const M=[...y,w,y[0]];y.length>=2?f.push({type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[M]}}):f.push({type:"Feature",properties:{},geometry:{type:"LineString",coordinates:M}}),y.forEach((O,D)=>{f.push({type:"Feature",properties:{_isFirst:D===0},geometry:{type:"Point",coordinates:O}})})}if(c.editingMode==="draw-circle"){const y=c.circleCenter;if(!y)return Ce(e,[]);const w=x??y,M=F.makeCircleCoords(y,w,s.current,64);f.push({type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[M]}}),f.push({type:"Feature",properties:{_isFirst:!0},geometry:{type:"Point",coordinates:y}}),f.push({type:"Feature",properties:{},geometry:{type:"Point",coordinates:w}})}if(c.editingMode==="draw-rect"){const y=c.rectCorner;if(!y)return Ce(e,[]);const w=x??y,M=F.makeRectCoords(y,w,s.current,a.current);f.push({type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[M]}})}if(c.editingMode==="draw-route"){const y=c.routeWaypoints;if(y.length===0)return Ce(e,[]);const w=c.routePreview??y;w.length>=2&&f.push({type:"Feature",properties:{},geometry:{type:"LineString",coordinates:w}});const M=c.routeCursorPreview??(x?[y[y.length-1],x]:null);M&&M.length>=2&&f.push({type:"Feature",properties:{},geometry:{type:"LineString",coordinates:M}}),y.forEach((O,D)=>{f.push({type:"Feature",properties:{_isFirst:D===0},geometry:{type:"Point",coordinates:O}})})}if(c.editingMode==="draw-freehand"){const y=c.freehandPoints;y.length>=2&&f.push({type:"Feature",properties:{},geometry:{type:"LineString",coordinates:y}})}Ce(e,f)}return null}function Nt(e,t){const[n,r]=e;let o=!1;for(let s=0,i=t.length-1;s<t.length;i=s++){const[a,d]=t[s],[c,x]=t[i];d>r!=x>r&&n<(c-a)*(r-d)/(x-d+1e-20)+a&&(o=!o)}return o}function Ut(e,t){if(t.length===0||!Nt(e,t[0]))return!1;for(let n=1;n<t.length;n++)if(Nt(e,t[n]))return!1;return!0}function ir(e,t,n){const r=n[0]-t[0],o=n[1]-t[1];if(r===0&&o===0){const x=e[0]-t[0],f=e[1]-t[1];return x*x+f*f}const s=Math.max(0,Math.min(1,((e[0]-t[0])*r+(e[1]-t[1])*o)/(r*r+o*o))),i=t[0]+s*r,a=t[1]+s*o,d=e[0]-i,c=e[1]-a;return d*d+c*c}function Xe(e,t){let n=1/0;for(let r=0;r<t.length-1;r++){const o=ir(e,t[r],t[r+1]);o<n&&(n=o)}return n}function cr(e,t){if(!F.isMultiGeometry(e))return null;const n=F.getPartCount(e);if(n===0)return null;if(e.type==="MultiPolygon"){for(let s=0;s<n;s++)if(Ut(t,e.coordinates[s]))return s;let r=0,o=1/0;for(let s=0;s<n;s++){const i=Xe(t,e.coordinates[s][0]);i<o&&(o=i,r=s)}return r}if(e.type==="MultiLineString"){let r=0,o=1/0;const s=e.coordinates;for(let i=0;i<n;i++){const a=Xe(t,s[i]);a<o&&(o=a,r=i)}return r}if(e.type==="MultiPoint"){let r=0,o=1/0;const s=e.coordinates;for(let i=0;i<n;i++){const a=t[0]-s[i][0],d=t[1]-s[i][1],c=a*a+d*d;c<o&&(o=c,r=i)}return r}if(e.type==="GeometryCollection"){for(let s=0;s<n;s++){const i=F.getPartGeometry(e,s);if(i.type==="Polygon"&&Ut(t,i.coordinates))return s}let r=0,o=1/0;for(let s=0;s<n;s++){const i=F.getPartGeometry(e,s);let a=1/0;if(i.type==="Point"){const d=t[0]-i.coordinates[0],c=t[1]-i.coordinates[1];a=d*d+c*c}else i.type==="LineString"?a=Xe(t,i.coordinates):i.type==="Polygon"&&(a=Xe(t,i.coordinates[0]));a<o&&(o=a,r=s)}return r}return null}function pn({map:e,coords:t,onSave:n,onClose:r}){const o=L.useEmit(),[s,i]=u.useState(t[0].toFixed(6)),[a,d]=u.useState(t[1].toFixed(6)),[c,x]=u.useState(()=>{const w=e.project(t);return{x:w.x,y:w.y}}),f=u.useRef(null);u.useEffect(()=>{const w=()=>{const M=e.project(t);x({x:M.x,y:M.y})};return e.on("move",w),e.on("zoom",w),e.on("resize",w),()=>{e.off("move",w),e.off("zoom",w),e.off("resize",w)}},[e,t]),u.useEffect(()=>{var w,M;(w=f.current)==null||w.focus(),(M=f.current)==null||M.select()},[]);function y(){const w=parseFloat(s),M=parseFloat(a);if(isNaN(w)||isNaN(M)){o({type:"warning",message:"Invalid coordinates"});return}n([w,M]),o({type:"success",message:"Coordinate updated"}),r()}return Ue.createPortal(B.jsx("div",{"data-elm-theme":!0,style:{position:"absolute",left:c.x,top:c.y-16,transform:"translate(-50%, -100%)",zIndex:500,pointerEvents:"auto"},onMouseDown:w=>w.stopPropagation(),onDoubleClick:w=>w.stopPropagation(),onContextMenu:w=>w.stopPropagation(),children:B.jsxs("div",{className:"flex flex-col gap-2 min-w-[160px] bg-(--elm-surface,var(--color-white))/95 backdrop-blur-md border border-(--elm-border-strong,var(--color-slate-300)) rounded-elm-control shadow-elm-control p-2 text-(--elm-text,var(--color-slate-800))",onKeyDown:w=>{w.key==="Enter"?y():w.key==="Escape"&&r()},children:[B.jsx("p",{className:"text-xs font-semibold m-0 leading-none",children:"Precise coordinates"}),B.jsxs("label",{className:"flex items-center gap-2 text-xs text-(--elm-text-muted,var(--color-slate-500))",children:["Lat:",B.jsx("input",{ref:f,type:"text",inputMode:"decimal",value:a,onChange:w=>d(w.target.value),className:"flex-1 w-full min-w-0 border border-(--elm-border,var(--color-slate-200)) rounded-elm-chip px-1.5 py-0.5 text-xs outline-none focus:border-primary-400"})]}),B.jsxs("label",{className:"flex items-center gap-2 text-xs text-(--elm-text-muted,var(--color-slate-500))",children:["Lng:",B.jsx("input",{type:"text",inputMode:"decimal",value:s,onChange:w=>i(w.target.value),className:"flex-1 w-full min-w-0 border border-(--elm-border,var(--color-slate-200)) rounded-elm-chip px-1.5 py-0.5 text-xs outline-none focus:border-primary-400"})]}),B.jsxs("div",{className:"flex items-center justify-end gap-1 mt-1",children:[B.jsx("button",{type:"button",onClick:r,className:"px-2 py-1 text-xs text-(--elm-text-muted,var(--color-slate-500)) hover:bg-(--elm-surface-hover,var(--color-slate-100)) rounded-elm-chip transition-colors",children:"Cancel"}),B.jsx("button",{type:"button",onClick:y,className:"px-2 py-1 text-xs text-white bg-primary-500 hover:bg-primary-600 rounded-elm-chip transition-colors font-medium",children:"Save"})]})]})}),e.getCanvasContainer())}const lt="elm-features";let Oe=null;const bt=()=>Oe;function ut(e,t){Oe!==t&&(e.getSource(lt)&&(Oe&&e.setFeatureState({source:lt,id:Oe},{fresh:!1}),t&&e.setFeatureState({source:lt,id:t},{fresh:!0})),Oe=t)}let ae=null,Et=!1,Lt=null,Pt=0,Ct=0;function Mt(e){return e.ctrlKey||e.metaKey||e.altKey}function hn(e){Mt(e)&&ae&&(ae.style.display="none")}function mn(e){Mt(e)||Et||Lt&&ae&&ae.textContent&&(ae.style.display="",nt(Pt,Ct))}function vn(e){if(!ae)return;nt(e.clientX,e.clientY);const t=e.target;!!(t!=null&&t.closest(".maplibregl-canvas-container, .maplibregl-canvas"))||(ae.style.display="none")}function nt(e,t){if(Pt=e,Ct=t,!ae||ae.style.display==="none")return;const{left:n,top:r}=F.placeBox(e,t,ae.offsetWidth,ae.offsetHeight,{x:"center",y:"before",gapY:12});ae.style.left=n+"px",ae.style.top=r+"px"}function ar(){return ae||(ae=document.createElement("div"),ae.className="elm-feature-tooltip",ae.style.cssText="position:fixed;pointer-events:none;z-index:10000;display:none",document.body.appendChild(ae),window.addEventListener("keydown",hn),window.addEventListener("keyup",mn),document.addEventListener("mousemove",vn,{passive:!0})),ae}function lr(e,t,n){var i,a;if(Et)return;const r=t.getState();if(!r.showFeatureNameOnHover||r.vertexEditActive||bt()===e.id){Je();return}const o=L.featureLabel(e);if(!o)return;const s=ar();s.textContent=o,Ne.applyRootTokens(s,(a=(i=n==null?void 0:n.target)==null?void 0:i.closest)==null?void 0:a.call(i,"[data-elm-theme]")),Lt=e.id,n&&nt(n.clientX,n.clientY),n&&Mt(n)?s.style.display="none":(s.style.display="",nt(Pt,Ct))}function Je(){Lt=null,ae&&(ae.remove(),ae=null,window.removeEventListener("keydown",hn),window.removeEventListener("keyup",mn),document.removeEventListener("mousemove",vn))}function be(e){Et=e,e&&ae&&(ae.style.display="none")}function De(e){let t=0,n=null;const r=()=>{t=0;const o=n;n=null,o&&e(...o)};return{schedule(...o){n=o,t||(t=requestAnimationFrame(r))},flush(){t&&cancelAnimationFrame(t),r()},cancel(){t&&cancelAnimationFrame(t),t=0,n=null}}}function _e(e,t){return F.isMultiGeometry(e)?t==null?null:F.getPartGeometry(e,t):e}function Ye(e,t,n){return F.isMultiGeometry(e)&&t!=null?F.setPartGeometry(e,t,n):n}function ze(e){return e.type==="Point"?[[e.coordinates]]:e.type==="MultiPoint"?[e.coordinates]:e.type==="LineString"?[e.coordinates]:e.type==="Polygon"?e.coordinates:[]}function dt(e,t){e.style.background=t?"var(--color-primary-500)":"#ffffff",e.style.borderColor=t?"var(--color-primary-700)":"var(--color-primary-500)",e.dataset.elmSelected=t?"1":"0"}let $t=!1;function ur(){if($t)return;const e=document.createElement("style");e.textContent=".elm-midpoint-marker{pointer-events:auto!important}",document.head.appendChild(e),$t=!0}function Gt(e,t=!1){if(t){const r=document.createElement("div");r.classList.add("elm-midpoint-marker"),r.style.cssText="width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:pointer;background:rgba(0,0,0,0.001)";const o=document.createElement("div");return o.style.cssText=["width:12px","height:12px","background:#ffffff","border:2px solid var(--color-primary-500)","box-shadow:0 1px 3px rgba(0,0,0,0.35)","transform:rotate(45deg)","border-radius:3px","transition:all 0.1s"].join(";"),r.appendChild(o),r.addEventListener("mouseenter",()=>{o.style.background="var(--color-primary-100)"}),r.addEventListener("mouseleave",()=>{o.style.background="#ffffff"}),r}const n=document.createElement("div");return n.classList.add("elm-vertex"),n.style.cssText=["width:12px","height:12px",`background:${e?"var(--color-primary-500)":"#ffffff"}`,`border:2px solid ${e?"var(--color-primary-700)":"var(--color-primary-500)"}`,"border-radius:3px","cursor:pointer","box-shadow:0 1px 3px rgba(0,0,0,0.35)","transition:background 0.15s"].join(";"),n.dataset.elmSelected=e?"1":"0",n.addEventListener("mouseenter",()=>{n.style.background="var(--color-primary-100)"}),n.addEventListener("mouseleave",()=>{n.style.background=n.dataset.elmSelected==="1"?"var(--color-primary-500)":"#ffffff"}),n}const qe=500,Ht=15;function Vt(e,t,n){const r=t.map((f,y)=>y);if(t.length<=qe)return{indices:r,capped:!1};const o=e.getBounds(),s=r.filter(f=>o.contains(t[f]));if(s.length<=qe)return{indices:s,capped:!0};const i=[0];let a=e.project(t[s[0]]);for(let f=1;f<s.length;f++){const y=e.project(t[s[f]]);i.push(i[f-1]+Math.hypot(y.x-a.x,y.y-a.y)),a=y}const d=i[i.length-1],c=new Set;let x=0;for(let f=0;f<qe;f++){const y=d===0?f:f*d/qe;for(;x<i.length-1&&i[x+1]<y;)x++;c.add(s[x])}for(const f of s)n(f)&&c.add(f);return{indices:[...c].sort((f,y)=>f-y),capped:!0}}function dr(e,t){const n=(e[0]+t[0])/2,r=i=>Math.log(Math.tan(Math.PI/4+i*Math.PI/180/2)),s=(i=>(2*Math.atan(Math.exp(i))-Math.PI/2)*180/Math.PI)((r(e[1])+r(t[1]))/2);return[n,s]}function xn({map:e,feature:t,initialSelectedIndices:n}){var G;const{dataStore:r,uiStore:o}=L.useGeoStore(),s=L.useEmit(),i=L.useIsEventForEditor(),a=L.useDataStore(m=>m.selectedIds),d=L.useUIStore(m=>m.selectedPartIndex),c=u.useRef([]),[x,f]=u.useState(()=>n&&n.length>0?new Set(n.map(m=>`0:${m}`)):new Set),y=u.useRef(x);u.useEffect(()=>{y.current=x},[x]);const w=u.useRef(new Map),[M,O]=u.useState(null),D=u.useCallback(()=>O(null),[]),[I,N]=u.useState(null);u.useEffect(()=>{f(new Set),O(null),N(null)},[t.id,d]);const C=u.useRef(n);u.useEffect(()=>{n!==C.current&&(C.current=n,!(!n||n.length===0)&&f(m=>{const k=new Set(m);for(const $ of n)k.add(`0:${$}`);for(const $ of n){const H=w.current.get(`0:${$}`);H&&dt(H,!0)}return k}))},[n]);function T(m){vt(e,new Map([[t.id,m]]))}function K(m){const k=Ye(t.geometry,d,m);r.getState().updateFeature(t.id,F.vertexEditPatch(t,k))}const Z=u.useRef(!1);u.useEffect(()=>{const m=k=>{Z.current=k.metaKey||k.ctrlKey};return window.addEventListener("keydown",m),window.addEventListener("keyup",m),()=>{window.removeEventListener("keydown",m),window.removeEventListener("keyup",m)}},[]);function p(){ur(),c.current.forEach(H=>H.remove()),c.current=[],w.current=new Map,g.current=[],E.current=null,R.current=!1;const m=_e(t.geometry,d);if(!m)return;const k=ze(m),$=y.current;_.current=!1,k.forEach((H,z)=>{const V=m.type==="Polygon"?H.slice(0,-1):H,te=Vt(e,V,W=>$.has(`${z}:${W}`));te.capped&&(_.current=!0);for(const W of te.indices){const ne=V[W],se=`${z}:${W}`,ie=Gt($.has(se));w.current.set(se,ie);const oe=new Ie.Marker({element:ie,draggable:!0}).setLngLat(ne).addTo(e);let J=!1;ie.addEventListener("click",Y=>{if(Y.stopPropagation(),Y.preventDefault(),J){J=!1;return}Y.shiftKey?f(ee=>{const re=new Set(ee);re.has(se)?re.delete(se):re.add(se);const Q=w.current.get(se);return Q&&dt(Q,re.has(se)),re}):(f(new Set([se])),w.current.forEach((ee,re)=>dt(ee,re===se)))}),oe.on("dragstart",()=>{J=!0,R.current=!0,r.getState().takeSnapshot(),document.querySelectorAll(".elm-midpoint-marker").forEach(Y=>{Y.style.display="none"}),be(!0)});const ce=[ne[0],ne[1]],q=De(()=>{const Y=oe.getLngLat(),ee=[Y.lng,Y.lat],re=ft(m,z,W,ee);T(Ye(t.geometry,d,re))});oe.on("drag",()=>q.schedule()),oe.on("dragend",()=>{q.cancel();const Y=oe.getLngLat(),ee=[Y.lng,Y.lat],re=ft(m,z,W,ee);if(K(re),o.getState().topoEditEnabled&&!Z.current){const Q=r.getState();Q.updateFeatures(F.commitTopoMove(Q.features,t.id,ce,ee))}be(!1),R.current=!1,setTimeout(()=>{J=!1},50)}),ie.addEventListener("contextmenu",Y=>{Y.preventDefault(),Y.stopPropagation(),O({ringIdx:z,vertIdx:W,x:Y.clientX,y:Y.clientY})}),c.current.push(oe)}if(V.length>=2){const W=m.type==="Polygon"?V.length:V.length-1,ne=[];for(let ie=0;ie<W;ie++)ne.push(dr(V[ie],V[(ie+1)%V.length]));const se=Vt(e,ne,()=>!1);se.capped&&(_.current=!0);for(const ie of se.indices){const oe=V[ie],J=V[(ie+1)%V.length],ce=ne[ie],q=Gt(!1,!0);q.style.display="none",g.current.push({el:q,a:oe,b:J});const Y=new Ie.Marker({element:q,draggable:!0}).setLngLat(ce).addTo(e);let ee=!1;Y.on("dragstart",()=>{ee=!0,R.current=!0,r.getState().takeSnapshot(),be(!0)});const re=De(()=>{const Q=Y.getLngLat(),de=[Q.lng,Q.lat],ue=Te(m,z,ie+1,de);T(Ye(t.geometry,d,ue))});Y.on("drag",()=>re.schedule()),Y.on("dragend",()=>{re.cancel();const Q=Y.getLngLat(),de=[Q.lng,Q.lat],ue=Te(m,z,ie+1,de);if(K(ue),o.getState().topoEditEnabled){const Pe=r.getState();Pe.updateFeatures(F.commitTopoInsert(Pe.features,t.id,oe,J,de))}setTimeout(()=>{ee=!1},50),be(!1),R.current=!1}),q.addEventListener("click",Q=>{if(Q.stopPropagation(),ee){ee=!1;return}r.getState().takeSnapshot();const de=Te(m,z,ie+1,ce);if(K(de),o.getState().topoEditEnabled){const ue=r.getState();ue.updateFeatures(F.commitTopoInsert(ue.features,t.id,oe,J,ce))}}),c.current.push(Y)}}})}const g=u.useRef([]),E=u.useRef(null),R=u.useRef(!1);u.useEffect(()=>{const m=H=>{if(H===E.current)return;const z=g.current;E.current!==null&&z[E.current]&&(z[E.current].el.style.display="none"),H!==null&&(z[H].el.style.display="flex"),E.current=H},k=H=>{if(R.current)return;const{x:z,y:V}=H.point;let te=-1,W=1/0;g.current.forEach(({a:se,b:ie},oe)=>{const J=e.project(se),ce=e.project(ie),q=ce.x-J.x,Y=ce.y-J.y,ee=q*q+Y*Y,re=ee?Math.max(0,Math.min(1,((z-J.x)*q+(V-J.y)*Y)/ee)):0,Q=(J.x+re*q-z)**2+(J.y+re*Y-V)**2;Q<W&&(W=Q,te=oe)});const ne=E.current===null?22:36;m(te>=0&&W<=ne*ne?te:null)},$=H=>{const z=H.originalEvent.relatedTarget;!R.current&&!(z instanceof Node&&e.getContainer().contains(z))&&m(null)};return e.on("mousemove",k),e.on("mouseout",$),()=>{e.off("mousemove",k),e.off("mouseout",$)}},[e]);const j=u.useRef(()=>{});j.current=m=>{var ee,re;const k=m.originalEvent;if(R.current||k.button!==0||k.shiftKey||(re=(ee=k.target)==null?void 0:ee.closest)!=null&&re.call(ee,".maplibregl-marker"))return;const $=_e(t.geometry,d);if(!$||$.type!=="Polygon"&&$.type!=="LineString")return;const H=$.type==="Polygon";let z=null,V=Ht*Ht;if(ze($).forEach((Q,de)=>{const ue=H?Q.slice(0,-1):Q,Pe=H?ue.length:ue.length-1;if(ue.length<2)return;let he=e.project(ue[0]);for(let Se=0;Se<Pe;Se++){const Ge=ue[(Se+1)%ue.length],st=e.project(Ge),He=st.x-he.x,Ve=st.y-he.y,It=He*He+Ve*Ve,kt=It?Math.max(0,Math.min(1,((m.point.x-he.x)*He+(m.point.y-he.y)*Ve)/It)):0,Ft=(he.x+kt*He-m.point.x)**2+(he.y+kt*Ve-m.point.y)**2;Ft<V&&(V=Ft,z={ringIdx:de,seg:Se,a:ue[Se],b:Ge}),he=st}}),!z)return;const{ringIdx:te,seg:W,a:ne,b:se}=z;m.preventDefault();const ie=m.point;let oe=[m.lngLat.lng,m.lngLat.lat],J=!1;const ce=De(()=>{T(Ye(t.geometry,d,Te($,te,W+1,oe)))}),q=Q=>{if(!J){if(Math.hypot(Q.point.x-ie.x,Q.point.y-ie.y)<3)return;J=!0,R.current=!0,r.getState().takeSnapshot(),document.querySelectorAll(".elm-midpoint-marker").forEach(ue=>{ue.style.display="none"}),E.current=null,be(!0)}oe=[Q.lngLat.lng,Q.lngLat.lat];const de=Q.originalEvent.metaKey||Q.originalEvent.ctrlKey;if(o.getState().snapEnabled&&!de){const ue=wt(oe[0],oe[1],e,r.getState().features,15,new Set([t.id]));ue&&(oe=ue.lnglat)}ce.schedule()},Y=()=>{if(e.off("mousemove",q),window.removeEventListener("mouseup",Y),ce.cancel(),!!J){if(K(Te($,te,W+1,oe)),H&&o.getState().topoEditEnabled){const Q=r.getState();Q.updateFeatures(F.commitTopoInsert(Q.features,t.id,ne,se,oe))}be(!1),R.current=!1}};e.on("mousemove",q),window.addEventListener("mouseup",Y)},u.useEffect(()=>{const m=k=>j.current(k);return e.on("mousedown",m),()=>{e.off("mousedown",m)}},[e]);const _=u.useRef(!1),l=u.useRef(p);l.current=p,u.useEffect(()=>{const m=()=>{_.current&&l.current()};return e.on("moveend",m),()=>{e.off("moveend",m)}},[e]),u.useEffect(()=>(p(),()=>{c.current.forEach(m=>m.remove()),c.current=[],w.current=new Map}),[t,e,a,d]);function S(m,k){const $=_e(t.geometry,d);if(!$)return;const H=fr($,m,k);if(!H){s({type:"warning",message:`Cannot delete: ${$.type==="Polygon"?"an area needs at least 3":$.type==="LineString"?"a line needs at least 2":"at least 1"} points`});return}const z=ze($)[m][k];if(r.getState().takeSnapshot(),K(H),f(new Set),$.type==="Polygon"&&o.getState().topoEditEnabled){const V=r.getState();V.updateFeatures(F.commitTopoDelete(V.features,t.id,[z]))}}function h(){const m=y.current;if(m.size===0)return;const k=_e(t.geometry,d);if(!k)return;const $=new Map;for(const H of m){const[z,V]=H.split(":"),te=Number(z),W=Number(V),ne=$.get(te)??[];ne.push(W),$.set(te,ne)}if(k.type==="LineString"){const H=k.coordinates,z=new Set($.get(0)??[]),V=H.filter((te,W)=>!z.has(W));if(V.length<2){s({type:"warning",message:"Cannot delete: a line needs at least 2 points"});return}r.getState().takeSnapshot(),K({type:"LineString",coordinates:V}),f(new Set);return}if(k.type==="MultiPoint"){const H=k.coordinates,z=new Set($.get(0)??[]),V=H.filter((te,W)=>!z.has(W));if(V.length<1){s({type:"warning",message:"Cannot delete: at least 1 point required"});return}r.getState().takeSnapshot(),K({type:"MultiPoint",coordinates:V}),f(new Set);return}if(k.type==="Polygon"){const H=k.coordinates,z=[];for(let V=0;V<H.length;V++){const te=H[V],W=te.slice(0,-1),ne=new Set($.get(V)??[]);if(ne.size===0){z.push(te);continue}const se=W.filter((ie,oe)=>!ne.has(oe));if(se.length<3){s({type:"warning",message:"Cannot delete: an area needs at least 3 points"});return}z.push([...se,se[0]])}if(r.getState().takeSnapshot(),K({type:"Polygon",coordinates:z}),f(new Set),o.getState().topoEditEnabled){const V=[...$].flatMap(([W,ne])=>ne.map(se=>H[W][se])),te=r.getState();te.updateFeatures(F.commitTopoDelete(te.features,t.id,V))}return}}function v(){if(y.current.size<3){s({type:"warning",message:"Select at least 3 points to simplify"});return}const m=_e(t.geometry,d);if(!m||m.type!=="LineString"&&m.type!=="Polygon")return;const k=new Map;for(const q of y.current){const[Y,ee]=q.split(":"),re=Number(Y),Q=Number(ee),de=k.get(re)??[];de.push(Q),k.set(re,de)}if(k.size!==1){s({type:"warning",message:"Selection must stay within one ring/line to simplify"});return}const[$,H]=Array.from(k.entries())[0],z=H.sort((q,Y)=>q-Y),V=z[0],te=z[z.length-1],W=m.type==="Polygon",ne=W?m.coordinates[$].slice(0,-1):m.coordinates,se=ne.slice(V,te+1),ie=F.rdp(se,1e-5),oe=se.length-ie.length;if(oe===0){s({type:"warning",message:"Nothing to remove: no selected point sits on a straight line"});return}const J=[...ne.slice(0,V),...ie,...ne.slice(te+1)],ce=W?3:2;if(J.length<ce){s({type:"warning",message:`Cannot simplify: ${W?"an area needs at least 3":"a line needs at least 2"} points`});return}if(r.getState().takeSnapshot(),W){const q=m.coordinates.map((Y,ee)=>ee===$?[...J,J[0]]:Y);K({type:"Polygon",coordinates:q})}else K({type:"LineString",coordinates:J});f(new Set),s({type:"success",message:`Removed ${oe} extra point${oe!==1?"s":""}`})}u.useEffect(()=>{if(x.size===0)return;function m(k){if(k.key!=="Delete"&&k.key!=="Backspace")return;const $=k.target;$&&($.tagName==="INPUT"||$.tagName==="TEXTAREA"||$.isContentEditable)||i(k)&&(k.preventDefault(),k.stopPropagation(),h())}return window.addEventListener("keydown",m,{capture:!0}),()=>window.removeEventListener("keydown",m,{capture:!0})},[x]);const A=x.size>0,b=M&&(()=>{const m=`${M.ringIdx}:${M.vertIdx}`,k=x.has(m)&&x.size>1;return B.jsx(L.ContextMenu,{x:M.x,y:M.y,onClose:D,items:[{label:"Edit coordinates…",icon:B.jsx(_t.Crosshair,{size:16}),onClick:()=>N({ringIdx:M.ringIdx,vertIdx:M.vertIdx})},{separator:!0},{label:k?`Delete ${x.size} points`:"Delete point",icon:B.jsx(_t.Trash,{size:16}),onClick:()=>k?h():S(M.ringIdx,M.vertIdx)}]})})(),P=I&&_e(t.geometry,d),U=P&&I?(G=ze(P)[I.ringIdx])==null?void 0:G[I.vertIdx]:void 0,X=I&&P&&U&&B.jsx(pn,{map:e,coords:U,onSave:m=>{if(r.getState().takeSnapshot(),K(ft(P,I.ringIdx,I.vertIdx,m)),P.type==="Polygon"&&o.getState().topoEditEnabled){const k=r.getState();k.updateFeatures(F.commitTopoMove(k.features,t.id,U,m))}},onClose:()=>N(null)},`${I.ringIdx}:${I.vertIdx}`);return B.jsxs(B.Fragment,{children:[b,X,A&&B.jsx(L.VertexSelectionBar,{mapContainer:e.getContainer(),count:x.size,onSimplify:v,onDelete:h})]})}function ft(e,t,n,r){if(e.type==="Point")return{type:"Point",coordinates:F.withXY(e.coordinates,r)};if(e.type==="MultiPoint"){const o=[...e.coordinates];return o[n]=F.withXY(o[n],r),{type:"MultiPoint",coordinates:o}}if(e.type==="LineString"){const o=[...e.coordinates];return o[n]=F.withXY(o[n],r),{type:"LineString",coordinates:o}}return e.type==="Polygon"?{type:"Polygon",coordinates:e.coordinates.map((s,i)=>{if(i!==t)return s;const a=[...s];return a[n]=F.withXY(a[n],r),n===0&&(a[a.length-1]=a[0]),a})}:e}function fr(e,t,n){if(e.type==="LineString"){const r=e.coordinates.filter((o,s)=>s!==n);return r.length<2?null:{type:"LineString",coordinates:r}}if(e.type==="Polygon"){const o=e.coordinates[t].slice(0,-1);if(o.length<=3)return null;const s=o.filter((a,d)=>d!==n);return{type:"Polygon",coordinates:e.coordinates.map((a,d)=>d===t?[...s,s[0]]:a)}}if(e.type==="MultiPoint"){const r=e.coordinates.filter((o,s)=>s!==n);return r.length<1?null:{type:"MultiPoint",coordinates:r}}return null}function Te(e,t,n,r){if(e.type==="LineString"){const o=[...e.coordinates];return o.splice(n,0,F.insertedPosition(o[n-1],o[n],r)),{type:"LineString",coordinates:o}}if(e.type==="Polygon"){const s=e.coordinates[t].slice(0,-1);return s.splice(n,0,F.insertedPosition(s[n-1],s[n%s.length],r)),{type:"Polygon",coordinates:e.coordinates.map((a,d)=>d===t?[...s,s[0]]:a)}}return e}function gr(e,t,n){if(!n)return[t[0]-e[0],t[1]-e[1]];const r=F.project(e),o=F.project(t);return[o[0]-r[0],o[1]-r[1]]}function We(e,t,n){return F.offsetGeometry({type:"MultiPoint",coordinates:e},t,n).coordinates}function yr(e,t,n){let r=!1;for(let o=0,s=t.length-1;o<t.length;s=o++){const i=t[o],a=t[s];i.y>e.y!=a.y>e.y&&e.x<(a.x-i.x)*(e.y-i.y)/(a.y-i.y)+i.x&&(r=!r);const d=a.x-i.x,c=a.y-i.y,x=d*d+c*c,f=x?Math.max(0,Math.min(1,((e.x-i.x)*d+(e.y-i.y)*c)/x)):0;if(Math.hypot(i.x+f*d-e.x,i.y+f*c-e.y)<=n)return!0}return r}const pr=3,hr=8;function Ze(e){const t=pe.featureCollection(e),[n,r,o,s]=Qt.bbox(t),i=(n+o)/2,a=wr(r,s);return{corners:[[n,s],[o,s],[o,r],[n,r]],edges:[[i,s],[o,a],[i,r],[n,a]],center:[i,a],rotateHandle:[i,s]}}function gt(e,t,n){const[r,o]=t,s=F.toRadians(n),i=Math.cos(s),a=Math.sin(s),d=F.getMercatorLatCorrectionRatio(o);return e.map(([c,x])=>{const f=(c-r)*d,y=x-o;return[r+(f*i-y*a)/d,o+(f*a+y*i)]})}function mr(e,t,n,r,o){const[s,i]=t,a=F.toRadians(o),d=Math.cos(a),c=Math.sin(a),x=F.getMercatorLatCorrectionRatio(i);return e.map(([f,y])=>{const w=(f-s)*x,M=y-i,O=w*d+M*c,D=-w*c+M*d,I=O*n,N=D*r,C=I*d-N*c,T=I*c+N*d;return[s+C/x,i+T]})}function vr(e,t,n,r){const o=F.project(t),s=F.toRadians(r),i=Math.cos(s),a=Math.sin(s);function d(c){const x=F.project(c),f=x[0]-o[0],y=x[1]-o[1],w=f*i+y*a,M=-f*a+y*i,O=w*n,D=M*n,I=O*i-D*a,N=O*a+D*i;return F.unproject([o[0]+I,o[1]+N])}return{...e,geometry:F.mapPositions(e.geometry,d)}}function xr(e,t,n,r){const o=F.project(t),s=F.toRadians(r),i=Math.cos(s),a=Math.sin(s);return e.map(d=>{const c=F.project(d),x=c[0]-o[0],f=c[1]-o[1],y=x*i+f*a,w=-x*a+f*i,M=y*n,O=w*n,D=M*i-O*a,I=M*a+O*i;return F.unproject([o[0]+D,o[1]+I])})}function Sr(e,t,n,r,o){const[s,i]=t,a=F.toRadians(o),d=Math.cos(a),c=Math.sin(a),x=F.getMercatorLatCorrectionRatio(i);function f(y){const w=(y[0]-s)*x,M=y[1]-i,O=w*d+M*c,D=-w*c+M*d,I=O*n,N=D*r,C=I*d-N*c,T=I*c+N*d;return[s+C/x,i+T]}return{...e,geometry:F.mapPositions(e.geometry,f)}}function wr(e,t){return F.unproject([0,(F.project([0,e])[1]+F.project([0,t])[1])/2])[1]}function br(e,t,n,r){const o=r?e.initialBbox.center:e.origin,s=Math.cos(F.toRadians(e.rotationAngle)),i=Math.sin(F.toRadians(e.rotationAngle));let a;if(n){const D=F.project(o);a=I=>{const N=F.project(I),C=N[0]-D[0],T=N[1]-D[1];return[C*s+T*i,-C*i+T*s]}}else{const D=F.getMercatorLatCorrectionRatio(o[1]);a=I=>{const N=(I[0]-o[0])*D,C=I[1]-o[1];return[N*s+C*i,-N*i+C*s]}}const[d,c]=a(e.startLngLat),[x,f]=a(t),y=e.edgeIndex===0||e.edgeIndex===2,w=e.edgeIndex===1||e.edgeIndex===3,M=D=>Math.abs(D)<.01?D<0?-.01:.01:D,O=(D,I)=>Math.abs(I)>1e-9?D/I:1;if(n){let D;if(y)D=O(f,c);else if(w)D=O(x,d);else{const I=d*d+c*c;D=I>1e-18?(x*d+f*c)/I:1}return{origin:o,uniform:!0,factor:M(D)}}return{origin:o,uniform:!1,scaleX:w||!y?M(O(x,d)):1,scaleY:y||!w?M(O(f,c)):1}}function Er(e,t,n,r){const o=n.uniform?s=>xr(s,n.origin,n.factor,r):s=>mr(s,n.origin,n.scaleX,n.scaleY,r);return{features:e.map(s=>n.uniform?vr(s,n.origin,n.factor,r):Sr(s,n.origin,n.scaleX,n.scaleY,r)),box:{corners:o(t.corners),edges:o(t.edges),center:o([t.center])[0],rotateHandle:o([t.rotateHandle])[0]}}}function Lr(e){return e==="nw"||e==="se"?"nwse-resize":e==="ne"||e==="sw"?"nesw-resize":e==="n"||e==="s"?"ns-resize":e==="e"||e==="w"?"ew-resize":"grab"}function yt(e){const t=document.createElement("div");if(e==="rotate"){t.style.cssText=["position:relative","display:flex","align-items:center","justify-content:center","width:16px","height:32px","cursor:grab"].join(";");const n=document.createElement("div");n.style.cssText="position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:2px;height:24px;background:var(--color-primary-600);",t.appendChild(n);const r=document.createElement("div");r.style.cssText=["position:absolute","top:0","left:50%","transform:translateX(-50%)","width:16px","height:16px","background:#ffffff","border:2px solid var(--color-primary-600)","border-radius:50%","box-shadow:0 1px 3px rgba(0,0,0,0.35)","display:flex","align-items:center","justify-content:center"].join(";");const o=document.createElement("div");return o.style.cssText="width:6px;height:6px;background:var(--color-primary-600);border-radius:50%;",r.appendChild(o),t.appendChild(r),t}return t.style.cssText=["width:12px","height:12px","background:#ffffff","border:2px solid var(--color-primary-600)","border-radius:3px",`cursor:${Lr(e)}`,"box-shadow:0 1px 3px rgba(0,0,0,0.35)"].join(";"),t}function Sn({map:e,features:t}){const{dataStore:n,uiStore:r}=L.useGeoStore(),o=L.useDataStore(p=>p.selectedIds),s=L.useUIStore(p=>p.transformActive),i=L.useUIStore(p=>p.setTransformDragging),a=u.useRef(t);a.current=t;const[d,c]=u.useState(null),x=u.useRef(null);x.current=d;const f=u.useRef(0),y=o.join(",");u.useEffect(()=>{c(null),f.current=0},[y]);const w=u.useRef(null),M=u.useRef(null),O=u.useRef([]);function D(){O.current.forEach(p=>p.remove()),O.current=[]}function I(p){const g=new Map;for(const E of p)g.set(String(E.id??""),E.geometry);vt(e,g)}function N(p){const g=O.current;if(g.length===9){for(let E=0;E<4;E++)g[E].setLngLat(p.corners[E]);for(let E=0;E<4;E++)g[4+E].setLngLat(p.edges[E]);g[8].setLngLat(p.rotateHandle)}}const C=u.useRef(null);u.useEffect(()=>{if(!s||t.length===0)return;D();const p=x.current??Ze(t),g=["nw","ne","se","sw"],E=["n","e","s","w"],R=[];p.corners.forEach((j,_)=>{const l=yt(g[_]),S=new Ie.Marker({element:l,draggable:!1}).setLngLat(j).addTo(e);l.addEventListener("mousedown",h=>K(h,_,!1)),R.push(S)}),p.edges.forEach((j,_)=>{const l=yt(E[_]),S=new Ie.Marker({element:l,draggable:!1}).setLngLat(j).addTo(e);l.addEventListener("mousedown",h=>K(h,_,!0)),R.push(S)});{const j=yt("rotate"),_=new Ie.Marker({element:j,anchor:"bottom",draggable:!1}).setLngLat(p.rotateHandle).addTo(e);j.addEventListener("mousedown",l=>Z(l)),R.push(_)}return O.current=R,()=>{D()}},[s,y,d,e]),u.useEffect(()=>{function p(b){const P=e.getCanvasContainer().getBoundingClientRect(),U=e.unproject([b.clientX-P.left,b.clientY-P.top]);return[U.lng,U.lat]}const g=De(_);let E=null;function R(b){C.current&&(b.preventDefault(),E={clientX:b.clientX,clientY:b.clientY},g.schedule(b))}function j(b){var P;b.key!=="Shift"&&b.key!=="Alt"||((P=C.current)==null?void 0:P.type)!=="scale"||!E||(b.preventDefault(),g.schedule({...E,shiftKey:b.shiftKey,altKey:b.altKey}))}function _(b){const P=C.current;if(!P)return;const[U,X]=p(b),G=n.getState().geometryMode;if(P.type==="move"){if(!P.moving){const V=e.getCanvasContainer().getBoundingClientRect();if(Math.hypot(b.clientX-V.left-P.startPoint.x,b.clientY-V.top-P.startPoint.y)<pr)return;P.moving=!0,i(!0)}const m=G==="visual",k=gr(P.startLngLat,[U,X],m),$=P.initialFeatures.map(V=>({...V,geometry:F.offsetGeometry(V.geometry,k,m)})),H=P.initialBbox,z={corners:We(H.corners,k,m),edges:We(H.edges,k,m),center:We([H.center],k,m)[0],rotateHandle:We([H.rotateHandle],k,m)[0]};w.current=$,M.current=z,I($),N(z)}else if(P.type==="rotate"){const m=P.center,k=F.getMercatorLatCorrectionRatio(m[1]),$=X-m[1],H=G==="visual"?(U-m[0])*k:U-m[0],V=(Math.atan2($,H)-P.initialAngle)*(180/Math.PI),te=P.initialFeatures.map(ne=>G==="visual"?F.applyVisualTransform(ne,m,1,1,V):Nn.transformRotate(ne,V,{pivot:m})),W={corners:gt(P.initialBbox.corners,m,V),edges:gt(P.initialBbox.edges,m,V),center:m,rotateHandle:gt([P.initialBbox.rotateHandle],m,V)[0]};w.current=te,M.current=W,I(te),N(W)}else if(P.type==="scale"){const m=P.rotationAngle,k=br({initialBbox:P.initialBbox,origin:P.origin,startLngLat:P.startLngLat,edgeIndex:P.edgeIndex,rotationAngle:m},[U,X],b.shiftKey,b.altKey),$=Er(P.initialFeatures,P.initialBbox,k,m);w.current=$.features,M.current=$.box,I($.features),N($.box)}}function l(){g.flush();const b=C.current;if(!b)return;const P=w.current,U=M.current,X=b.type==="rotate";if(C.current=null,E=null,w.current=null,M.current=null,e.dragPan.enable(),i(!1),b.type==="move"&&P){const G=e.getContainer(),m=k=>k.stopPropagation();G.addEventListener("click",m,!0),setTimeout(()=>G.removeEventListener("click",m,!0),0)}if(P&&(n.getState().takeSnapshot(),n.getState().updateFeatures(F.transformUpdates(n.getState().features,P.flatMap(G=>G.id==null||G.id===""?[]:[{id:String(G.id),geometry:G.geometry}]),r.getState().topoEditEnabled))),U){if(X){const G=U.center,m=U.edges[1],k=F.getMercatorLatCorrectionRatio(G[1]),$=(m[0]-G[0])*k,H=m[1]-G[1];f.current=Math.atan2(H,$)*(180/Math.PI)}c(U)}}function S(b,P,U){b.preventDefault(),b.stopPropagation(),e.dragPan.disable();const X=x.current??Ze(a.current),[G,m]=p(b),k=U?X.edges[(P+2)%4]:X.corners[(P+2)%4];C.current={type:"scale",initialFeatures:structuredClone(a.current),initialBbox:X,rotationAngle:f.current,origin:k,startLngLat:[G,m],edgeIndex:U?P:void 0},i(!0)}function h(b){b.preventDefault(),b.stopPropagation(),e.dragPan.disable();const P=x.current??Ze(a.current),U=P.center,[X,G]=p(b),m=n.getState().geometryMode,k=F.getMercatorLatCorrectionRatio(U[1]),$=G-U[1],H=m==="visual"?(X-U[0])*k:X-U[0];C.current={type:"rotate",initialFeatures:structuredClone(a.current),initialBbox:P,rotationAngle:f.current,center:U,initialAngle:Math.atan2($,H)},i(!0)}function v(b){if(C.current||b.button!==0||b.shiftKey||b.altKey||b.ctrlKey||b.metaKey||b.target!==e.getCanvas())return;const P=r.getState();if(!P.transformActive||P.readonly||P.editingMode!=="none"||P.vertexEditActive)return;const U=a.current;if(U.length===0)return;const X=x.current??Ze(U),G=e.getCanvasContainer().getBoundingClientRect(),m={x:b.clientX-G.left,y:b.clientY-G.top};yr(m,X.corners.map(k=>e.project(k)),hr)&&(b.preventDefault(),b.stopPropagation(),e.dragPan.disable(),C.current={type:"move",initialFeatures:structuredClone(U),initialBbox:X,rotationAngle:f.current,startLngLat:p(b),startPoint:m,moving:!1})}const A=e.getContainer();return A.addEventListener("mousedown",v,!0),T.current.handleScaleStart=S,T.current.handleRotateStart=h,document.addEventListener("mousemove",R),document.addEventListener("mouseup",l),document.addEventListener("keydown",j),document.addEventListener("keyup",j),()=>{g.cancel(),A.removeEventListener("mousedown",v,!0),document.removeEventListener("mousemove",R),document.removeEventListener("mouseup",l),document.removeEventListener("keydown",j),document.removeEventListener("keyup",j)}},[e,n,r,i]);const T=u.useRef({handleScaleStart:()=>{},handleRotateStart:()=>{}});function K(p,g,E){T.current.handleScaleStart(p,g,E)}function Z(p){T.current.handleRotateStart(p)}return null}function Pr({map:e,feature:t,onDone:n}){const r=L.useDataStore(f=>f.updateFeature),[o,s]=u.useState(t.properties.name??""),[i,a]=u.useState(()=>{const f=t.geometry.coordinates,y=e.project(f);return{x:y.x,y:y.y}}),d=u.useRef(null);u.useEffect(()=>{const f=t.geometry.coordinates,y=()=>{const w=e.project(f);a({x:w.x,y:w.y})};return e.on("move",y),e.on("zoom",y),e.on("resize",y),()=>{e.off("move",y),e.off("zoom",y),e.off("resize",y)}},[e,t.geometry]),u.useEffect(()=>{const f=setTimeout(()=>{var y,w;(y=d.current)==null||y.focus(),(w=d.current)==null||w.select()},0);return()=>clearTimeout(f)},[]);function c(){const f=o;f!==(t.properties.name??"")&&r(t.id,{properties:{...t.properties,name:f}}),n()}const x=e.getCanvasContainer();return Ue.createPortal(B.jsx("div",{"data-elm-theme":!0,style:{position:"absolute",left:i.x,top:i.y,transform:"translate(-50%, -50%)",zIndex:500,pointerEvents:"auto"},onMouseDown:f=>f.stopPropagation(),onDoubleClick:f=>f.stopPropagation(),onContextMenu:f=>f.stopPropagation(),children:B.jsxs("div",{className:"grid items-center justify-items-center bg-white/95 backdrop-blur-md border border-slate-800 text-slate-800 rounded px-3 py-1.5 text-sm font-medium shadow-lg",children:[B.jsx("div",{className:"invisible whitespace-pre pointer-events-none col-start-1 row-start-1 min-w-[12px] px-[2px] leading-tight","aria-hidden":!0,children:o+" "}),B.jsx("textarea",{ref:d,value:o,onChange:f=>s(f.target.value),onKeyDown:f=>{f.key==="Enter"&&!f.shiftKey?(f.preventDefault(),c()):f.key==="Escape"&&(f.preventDefault(),n())},onBlur:c,className:"col-start-1 row-start-1 bg-transparent outline-none resize-none overflow-hidden whitespace-pre text-center leading-tight min-w-0 min-h-0 px-[2px] w-full h-full m-0 border-none",rows:1})]})}),x)}function Cr([e,t,n,r],o,s,i,a){return e>=o&&n<=i&&t>=s&&r<=a}function Mr(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;const n=new Set(e);return t.every(r=>n.has(r))}function wn({map:e,onVertexBoxSelect:t}){const{dataStore:n}=L.useGeoStore(),r=L.useUIStore(f=>f.editingMode),o=L.useUIStore(f=>f.vertexEditActive),s=L.useUIStore(f=>f.transformActive),i=L.useUIStore(f=>f.readonly),a=u.useRef(r),d=u.useRef(o),c=u.useRef(s),x=u.useRef(i);return a.current=r,d.current=o,c.current=s,x.current=i,u.useEffect(()=>{const f=e.getCanvas(),y=e.getContainer(),w=M=>{if(!M.shiftKey||x.current||c.current)return;const O=d.current;if(!O&&a.current!=="none")return;M.preventDefault(),e.dragPan.disable(),e.boxZoom.disable();const D=M.clientX,I=M.clientY,N=y.getBoundingClientRect(),C=[...n.getState().selectedIds],T=document.createElement("div");T.style.cssText=["position:absolute","pointer-events:none","border:2px solid var(--color-primary-500)","background:color-mix(in srgb, var(--color-primary-500) 8%, transparent)","z-index:9999","border-radius:2px"].join(";"),y.appendChild(T);let K=!1,Z=0;function p(l){const S=Math.min(D,l.clientX)-N.left,h=Math.min(I,l.clientY)-N.top,v=Math.max(D,l.clientX)-N.left,A=Math.max(I,l.clientY)-N.top,b=e.unproject([S,h]),P=e.unproject([v,A]);return{boxW:b.lng,boxE:P.lng,boxN:b.lat,boxS:P.lat,overlayX:S,overlayY:h,overlayW:v-S,overlayH:A-h}}function g(l){const{boxW:S,boxE:h,boxN:v,boxS:A}=p(l),b=n.getState(),P=new Set(b.groups.filter(m=>m.hidden).map(m=>m.id)),U=b.features.filter(m=>!m.hidden&&(!m.groupId||!P.has(m.groupId))),X={type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[[[S,A],[h,A],[h,v],[S,v],[S,A]]]}},G=[];for(const m of U){if(m.geometry.type==="Point"){const[te,W]=m.geometry.coordinates;te>=S&&te<=h&&W>=A&&W<=v&&G.push(m.id);continue}const k=m.bbox??le.getGeometryBBox(m.geometry),[$,H,z,V]=k;if(z>=S&&$<=h&&V>=A&&H<=v){if(Cr(k,S,A,h,v)){G.push(m.id);continue}try{Un(X,m)&&G.push(m.id)}catch{G.push(m.id)}}}return G}function E(l){const S=new Set(C);l.forEach(A=>S.add(A));const h=Array.from(S),v=n.getState();Mr(v.selectedIds,h)&&v.selectedGroupId===null||v.setSelection(h)}function R(l){const S=n.getState().selectedIds[0];if(!S)return null;const h=n.getState().features.find(G=>G.id===S);if(!h)return null;let v;if(h.geometry.type==="LineString")v=h.geometry.coordinates;else if(h.geometry.type==="Polygon")v=h.geometry.coordinates[0].slice(0,-1);else return null;const{boxW:A,boxE:b,boxN:P,boxS:U}=p(l),X=[];for(let G=0;G<v.length;G++){const[m,k]=v[G];m>=A&&m<=b&&k>=U&&k<=P&&X.push(G)}return{id:S,indices:X}}const j=l=>{const S=Math.abs(l.clientX-D),h=Math.abs(l.clientY-I);if(!K&&S<5&&h<5)return;K=!0;const{overlayX:v,overlayY:A,overlayW:b,overlayH:P}=p(l);T.style.left=`${v}px`,T.style.top=`${A}px`,T.style.width=`${b}px`,T.style.height=`${P}px`,!O&&Date.now()-Z>30&&(E(g(l)),Z=Date.now())},_=l=>{if(T.remove(),e.dragPan.enable(),e.boxZoom.enable(),window.removeEventListener("mousemove",j),window.removeEventListener("mouseup",_),!K)return;if(O){const h=R(l);h&&h.indices.length>0&&t&&t(h.id,h.indices);return}const S=g(l);if(E(S),S.length===0&&C.length===1&&t){const h=n.getState().features.find(v=>v.id===C[0]);if(h&&(h.geometry.type==="LineString"||h.geometry.type==="Polygon")){const v=R(l);v&&v.indices.length>0&&t(v.id,v.indices)}}};window.addEventListener("mousemove",j),window.addEventListener("mouseup",_)};return f.addEventListener("mousedown",w),()=>f.removeEventListener("mousedown",w)},[e,n,t]),null}function Rr(e){return e&&"style"in e?e:null}function Ir(e){const t=u.useRef(null),n=u.useRef(!1),r=u.useRef({value:"",priority:""});function o(a,d,c="important"){a.style.setProperty("cursor",d,c)}u.useEffect(()=>{if(e)return;function a(d){if(!n.current)return;const c=t.current;if(!c)return;const x=d.ctrlKey||d.metaKey,f=d.altKey;x||f?o(c,f?"copy":"move"):o(c,r.current.value,r.current.priority)}return window.addEventListener("keydown",a),window.addEventListener("keyup",a),()=>{window.removeEventListener("keydown",a),window.removeEventListener("keyup",a)}},[e]);const s=u.useCallback((a,d,c)=>{const x=Rr(a),f=x!==null&&x===t.current&&n.current;t.current=x,n.current=!0,c!==void 0?r.current={value:c,priority:""}:f||(r.current={value:(x==null?void 0:x.style.getPropertyValue("cursor"))??"",priority:(x==null?void 0:x.style.getPropertyPriority("cursor"))??""});const y=d;x&&y&&(y.ctrlKey||y.metaKey||y.altKey)?o(x,y.altKey?"copy":"move"):x&&c!==void 0&&o(x,c,"")},[]),i=u.useCallback(a=>{n.current=!1,t.current&&(a!==void 0?o(t.current,a,""):o(t.current,r.current.value,r.current.priority),t.current=null),r.current={value:"",priority:""}},[]);return u.useMemo(()=>({enter:s,leave:i}),[s,i])}let Ke={x:-1,y:-1,ctrlKey:!1,metaKey:!1,altKey:!1};if(typeof window<"u"){window.addEventListener("mousemove",n=>{Ke={x:n.clientX,y:n.clientY,ctrlKey:n.ctrlKey,metaKey:n.metaKey,altKey:n.altKey}},{capture:!0,passive:!0});const e=n=>{Ke={x:n.clientX,y:n.clientY,ctrlKey:n.ctrlKey,metaKey:n.metaKey,altKey:n.altKey}};window.addEventListener("pointerdown",e,{capture:!0,passive:!0}),window.addEventListener("mousedown",e,{capture:!0,passive:!0});const t=n=>{Ke={...Ke,ctrlKey:n.ctrlKey,metaKey:n.metaKey,altKey:n.altKey}};window.addEventListener("keydown",t,{capture:!0}),window.addEventListener("keyup",t,{capture:!0})}function kr(){return Ke}function je(e,t,n){if(!n.every(r=>e.getLayer(r)))return[];try{return e.queryRenderedFeatures(t,{layers:n})}catch{return[]}}function Fr(e){const t="elm-drag-ghost";e.getSource(t)||(e.addSource(t,{type:"geojson",data:{type:"FeatureCollection",features:[]}}),e.addLayer({id:"elm-drag-ghost-fill",type:"fill",source:t,filter:["in",["geometry-type"],["literal",["Polygon","MultiPolygon"]]],paint:{"fill-opacity":.18}}),e.addLayer({id:"elm-drag-ghost-line",type:"line",source:t,filter:["in",["geometry-type"],["literal",["LineString","MultiLineString","Polygon","MultiPolygon"]]],paint:{"line-opacity":.6,"line-width":2,"line-dasharray":[3,3]}}),e.addLayer({id:"elm-drag-ghost-point",type:"circle",source:t,filter:["in",["geometry-type"],["literal",["Point","MultiPoint"]]],paint:{"circle-radius":7,"circle-opacity":.6,"circle-stroke-color":"#ffffff","circle-stroke-width":2}}),ke(e,bn))}function _r(e){for(const t of["elm-drag-ghost-point","elm-drag-ghost-line","elm-drag-ghost-fill"])e.getLayer(t)&&e.removeLayer(t);e.getSource("elm-drag-ghost")&&e.removeSource("elm-drag-ghost")}const bn=[["elm-drag-ghost-fill","fill-color",e=>e[500]],["elm-drag-ghost-line","line-color",e=>e[500]],["elm-drag-ghost-point","circle-color",e=>e[500]]];function En({map:e}){$e(e,bn);const{dataStore:t,uiStore:n}=L.useGeoStore(),r=L.useEmit(),o=L.useDataStore(l=>l.features),s=L.useDataStore(l=>l.selectedIds),i=L.useUIStore(l=>l.vertexEditActive),a=L.useUIStore(l=>l.transformActive),d=L.useUIStore(l=>l.editingMode),c=L.useUIStore(l=>l.readonly);u.useEffect(()=>{Je()},[o.length,i]),u.useEffect(()=>{if(!i)return;const l=t.getState(),S=l.selectedIds.length===1?l.features.find(v=>v.id===l.selectedIds[0]):void 0,h=F.vertexEditNotice(S);h&&r({type:"warning",message:h})},[i,t,r]);const x=u.useRef(!1);u.useEffect(()=>{if(!a||x.current)return;const l=t.getState(),S=l.selectedIds.length===1?l.features.find(h=>h.id===l.selectedIds[0]):void 0;(S==null?void 0:S._drawType)==="route"&&(r({type:"warning",message:"Transforming may break road alignment."}),x.current=!0)},[a,s,t,r]);const f=u.useRef(null),y=u.useRef(null),[w,M]=u.useState(null),[O,D]=u.useState(null),[I,N]=u.useState(null);u.useEffect(()=>{!i&&I&&N(null)},[i,I]);const C=Ir(c),T=Ne.useContextMenu();u.useEffect(()=>{if(c)return;const l=e.getCanvasContainer(),S=h=>{var k,$;h.preventDefault();const v=l.getBoundingClientRect(),A=[h.clientX-v.left,h.clientY-v.top],b=je(e,A,Fe);if(b.length===0)return;const P=String(b[0].id??((k=b[0].properties)==null?void 0:k.id)??"");if(!P)return;const U=t.getState(),X=U.features.find(H=>H.id===P);if(!X)return;const G=U.selectedIds;G.length>=2&&G.includes(P)||U.selectFeature(P);const m=X.geometry.type==="Point"&&(($=X.properties)==null?void 0:$._isText)!=="true";T.open(h.clientX,h.clientY,{feature:X,requestPreciseCoords:m?()=>D(P):void 0})};return l.addEventListener("contextmenu",S),()=>{l.removeEventListener("contextmenu",S)}},[c,t,e,T]),u.useEffect(()=>{const l=d!=="none",S=(A=!0)=>{ct(e,null,f.current),f.current=null,A&&ut(e,null),Je(),C.leave(l?void 0:"")},h=A=>{var X,G;if(e.dragPan.isActive()||(X=y.current)!=null&&X.dragging)return;const b=je(e,A.point,Fe),P=b.length>0?String(b[0].id??((G=b[0].properties)==null?void 0:G.id)):null;if(P===f.current)return;if(!P){S();return}bt()!==P&&ut(e,null),l||ct(e,P,f.current),f.current=P;const U=t.getState().features.find(m=>m.id===P);U?lr(U,n,A.originalEvent):Je(),C.enter(e.getCanvas(),A.originalEvent,l?void 0:"pointer")};e.on("mousemove",h);const v=()=>S();return e.on("mouseout",v),()=>{e.off("mousemove",h),e.off("mouseout",v);try{S(!1)}catch{}}},[d,e,t,n,C]);const K=u.useRef(o);u.useEffect(()=>{const l=K.current;if(K.current=o,o.length<=l.length)return;const h=e.getCanvas().getBoundingClientRect(),v=kr();if(v.x<h.left||v.x>h.right||v.y<h.top||v.y>h.bottom)return;const A=new Set(l.map(m=>m.id)),b=new Set(o.filter(m=>!A.has(m.id)).map(m=>m.id)),P=[v.x-h.left,v.y-h.top],U=()=>{var m;try{const k=e.unproject(P),$=je(e,e.project(k),Fe)[0],H=$?String($.id??((m=$.properties)==null?void 0:m.id)):null;H&&b.has(H)&&ut(e,H),e.fire("mousemove",{point:e.project(k),lngLat:k,originalEvent:new MouseEvent("mousemove",{clientX:v.x,clientY:v.y,ctrlKey:v.ctrlKey,metaKey:v.metaKey,altKey:v.altKey})})}catch{}};let X=!1;const G=()=>{X||U()};return e.once("idle",G),()=>{X=!0,e.off("idle",G)}},[o.length,e]),u.useEffect(()=>{if(c||d!=="none")return;const l=S=>{var P;if(dn())return;const h=je(e,S.point,Fe),v=t.getState();if(h.length===0){i?n.getState().setVertexEditActive(!1):v.clearSelection();return}const A=h[0],b=String(A.id??((P=A.properties)==null?void 0:P.id)??"");if(b)if(S.originalEvent.shiftKey){const U=v.selectedIds;U.includes(b)?v.setSelection(U.filter(X=>X!==b)):v.setSelection([...U,b])}else v.selectedIds.length===1&&v.selectedIds[0]===b||v.selectFeature(b)};return e.on("click",l),()=>{e.off("click",l)}},[c,d,i,t,n,e]),u.useEffect(()=>{if(c||d!=="none")return;const l=S=>{var b,P;const h=je(e,S.point,Fe);if(h.length===0)return;S.preventDefault();const v=String(h[0].id??((b=h[0].properties)==null?void 0:b.id)??"");if(!v)return;const A=t.getState().features.find(U=>U.id===v);if(A){if(((P=A.properties)==null?void 0:P._isText)==="true"){t.getState().selectFeature(v),M(v);return}if(t.getState().selectFeature(v),F.isMultiGeometry(A.geometry)){const U=cr(A.geometry,[S.lngLat.lng,S.lngLat.lat]);n.getState().setSelectedPartIndex(U)}else n.getState().setSelectedPartIndex(null);n.getState().setVertexEditActive(!0)}};return e.on("dblclick",l),()=>{e.off("dblclick",l)}},[c,d,t,n,e]),u.useEffect(()=>{if(c||i)return;const S=d!=="none",h=v=>{var oe;if(v.originalEvent.shiftKey)return;const A=v.originalEvent.altKey,b=v.originalEvent.ctrlKey||v.originalEvent.metaKey;if(S&&!A&&!b)return;const P=je(e,v.point,Fe);if(P.length===0)return;const U=String(P[0].id??((oe=P[0].properties)==null?void 0:oe.id)??"");if(!U)return;const X=t.getState();if(X.selectedIds.includes(U)&&X.selectedIds.length>=2&&!A&&!b)return;X.selectedIds.includes(U)||X.selectFeature(U);const m=t.getState().selectedIds,k=m.includes(U)?m:[U],$=new Map(k.flatMap(J=>{const ce=X.features.find(q=>q.id===J);return ce?[[J,ce.geometry]]:[]})),H=A,z=X.geometryMode,V=[v.lngLat.lng,v.lngLat.lat],te=z==="visual"?F.project(V):V;e.dragPan.disable(),y.current={featureIds:k,startLngLat:V,startProjected:te,geometryMode:z,startCoords:$,dragging:!1,duplicate:H};const W=new Map,ne=De((J,ce)=>{const q=y.current;if(!q)return;const Y=J-q.startLngLat[0],ee=ce-q.startLngLat[1];let re;if(q.geometryMode==="visual"){const Q=[q.startLngLat[0]+Y,q.startLngLat[1]+ee],de=F.project(Q);re=[de[0]-q.startProjected[0],de[1]-q.startProjected[1]]}else re=[Y,ee];for(const Q of q.featureIds){const de=q.startCoords.get(Q);de&&W.set(Q,F.offsetGeometry(de,re,q.geometryMode==="visual"))}if(q.duplicate){const Q=e.getSource("elm-drag-ghost");if(Q){const de=t.getState(),ue=[];for(const Pe of q.featureIds){const he=de.features.find(Ge=>Ge.id===Pe),Se=W.get(Pe);he&&Se&&ue.push({type:"Feature",properties:{},geometry:Se})}try{Q.setData({type:"FeatureCollection",features:ue})}catch{}}}else vt(e,W)}),se=J=>{const ce=y.current;if(!ce)return;const q=J.lngLat.lng-ce.startLngLat[0],Y=J.lngLat.lat-ce.startLngLat[1],ee=Math.hypot(q,Y);!ce.dragging&&ee<1e-5||(ce.dragging||(ce.dragging=!0,e.getCanvas().style.cursor="grabbing",be(!0)),ne.schedule(J.lngLat.lng,J.lngLat.lat))},ie=()=>{ne.flush();const J=y.current;if(y.current=null,e.dragPan.enable(),J!=null&&J.dragging){const ce=Be(n.getState().editingMode);if(C.leave(ce),e.getCanvas().style.cursor=ce,ct(e,null,f.current),f.current=null,be(!1),tr(),t.getState().takeSnapshot(),J.duplicate){const q=[];for(const ee of J.featureIds){const re=W.get(ee);re&&q.push({sourceId:ee,geometry:re})}t.getState().duplicateFeaturesAtPosition(q);const Y=e.getSource("elm-drag-ghost");Y==null||Y.setData({type:"FeatureCollection",features:[]})}else t.getState().updateFeatures(J.featureIds.flatMap(q=>{const Y=W.get(q);return Y?[{id:q,patch:{geometry:Y}}]:[]}))}e.off("mousemove",se),e.off("mouseup",ie)};e.on("mousemove",se),e.on("mouseup",ie)};return e.on("mousedown",h),()=>{e.off("mousedown",h)}},[c,d,i,t,n,e,C]);const Z=s.length===1?o.find(l=>l.id===s[0])??null:null,p=o.filter(l=>s.includes(l.id)),g=T.state&&B.jsx(L.FeatureMapContextMenu,{x:T.state.x,y:T.state.y,data:T.state.data,onClose:T.close}),E=w?o.find(l=>l.id===w)??null:null,R=E&&B.jsx(Pr,{map:e,feature:E,onDone:()=>M(null)}),j=O?o.find(l=>l.id===O)??null:null,_=j&&j.geometry.type==="Point"&&B.jsx(pn,{map:e,coords:j.geometry.coordinates,onSave:l=>{t.getState().takeSnapshot(),t.getState().updateFeature(j.id,{geometry:{type:"Point",coordinates:F.withXY(j.geometry.coordinates,l)}})},onClose:()=>D(null)});return c||d!=="none"?B.jsxs(B.Fragment,{children:[g,R,_]}):B.jsxs(B.Fragment,{children:[i&&Z&&B.jsx(xn,{map:e,feature:Z,initialSelectedIndices:I??void 0}),B.jsx(wn,{map:e,onVertexBoxSelect:(l,S)=>{if(i&&s.length===1&&s[0]===l){N(S);return}t.getState().selectFeature(l),n.getState().setSelectedPartIndex(null),N(S),n.getState().setVertexEditActive(!0)}}),a&&!i&&p.length>=1&&B.jsx(Sn,{map:e,features:p}),g,R,_]})}const Ee="elm-snap",Ln=[["elm-snap-vertex","circle-color",e=>e[500]]];function jr(e){e.getSource(Ee)||(e.addSource(Ee,{type:"geojson",data:Le()}),e.addLayer({id:"elm-snap-vertex",type:"circle",source:Ee,filter:["==",["get","_kind"],"vertex"],paint:{"circle-radius":6,"circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),e.addLayer({id:"elm-snap-edge",type:"symbol",source:Ee,filter:["==",["get","_kind"],"edge"],layout:{"icon-image":"elm-snap-diamond","icon-size":1,"icon-allow-overlap":!0,"icon-ignore-placement":!0}}),ke(e,Ln))}function Ar(e){for(const t of["elm-snap-edge","elm-snap-vertex"])e.getLayer(t)&&e.removeLayer(t);e.getSource(Ee)&&e.removeSource(Ee)}const Xt=new WeakMap;function Pn(e,t){const n=e.hasImage("elm-snap-diamond");if(n&&Xt.get(e)===t)return;const r=16,o=document.createElement("canvas");o.width=r,o.height=r;const s=o.getContext("2d");if(!s)return;s.clearRect(0,0,r,r),s.save(),s.translate(r/2,r/2),s.rotate(Math.PI/4),s.fillStyle=t,s.strokeStyle="#ffffff",s.lineWidth=2;const i=8;s.fillRect(-i/2,-i/2,i,i),s.strokeRect(-i/2,-i/2,i,i),s.restore();const a=s.getImageData(0,0,r,r);n?e.updateImage("elm-snap-diamond",a):e.addImage("elm-snap-diamond",a),Xt.set(e,t)}function Cn({map:e}){const{uiStore:t,dataStore:n}=L.useGeoStore(),r=L.useUIStore(d=>d.editingMode),o=L.useUIStore(d=>d.snapEnabled),s=L.useDataStore(d=>d.features),i=L.useUIStore(d=>d.vertexEditActive),a=$e(e,Ln);return u.useEffect(()=>{Pn(e,a[400]);const d=r!=="none"||i,c=()=>{t.getState().snappedCoord&&t.getState().setSnappedCoord(null);const O=e.getSource(Ee);O==null||O.setData(Le())};if(!d){c();return}const f=De(O=>{var K;if(!o){c();return}const D=O.originalEvent;if(D.metaKey||D.ctrlKey){c();return}const I=D.target;if((K=I==null?void 0:I.closest)!=null&&K.call(I,".elm-midpoint-marker")){c();return}const N=bt(),C=wt(O.lngLat.lng,O.lngLat.lat,e,s,15,new Set(N?[N]:[]));if(!C){c();return}if(i&&C.isVertex){const Z=new Set(n.getState().selectedIds);if(C.featureId&&Z.has(C.featureId)){c();return}}t.getState().setSnappedCoord(C.lnglat);const T=e.getSource(Ee);T==null||T.setData({type:"FeatureCollection",features:[{type:"Feature",properties:{_kind:C.isVertex?"vertex":"edge"},geometry:{type:"Point",coordinates:C.lnglat}}]})}),y=O=>f.schedule(O),w=()=>f.flush(),M=()=>{f.cancel(),c()};return e.on("mousemove",y),e.on("mouseout",M),window.addEventListener("pointerdown",w,!0),window.addEventListener("pointerup",w,!0),()=>{f.cancel(),e.off("mousemove",y),e.off("mouseout",M),window.removeEventListener("pointerdown",w,!0),window.removeEventListener("pointerup",w,!0)}},[r,o,s,i,e,t,n,a]),null}function Dr({map:e}){const t=L.useDataStore(n=>n.features);return u.useEffect(()=>{if(t.length===0)return;let n=1/0,r=1/0,o=-1/0,s=-1/0;for(const i of t){const[a,d,c,x]=i.bbox||le.getGeometryBBox(i.geometry);a<n&&(n=a),d<r&&(r=d),c>o&&(o=c),x>s&&(s=x)}n!==1/0&&e.fitBounds([[n,r],[o,s]],{padding:F.fitPadding(e.getContainer()),maxZoom:16,duration:600})},[]),null}function Mn({map:e}){const t=L.useUIStore(r=>r.boundaryAutofitBbox),n=L.useUIStore(r=>r.setBoundaryAutofitBbox);return u.useEffect(()=>{if(!t)return;const[r,o,s,i]=t;e.fitBounds([[s,r],[i,o]],{padding:F.fitPadding(e.getContainer()),maxZoom:10,duration:1}),n(null)},[t,n,e]),null}const xe="elm-processing-preview",Rn=[["elm-processing-preview-fill","fill-color",e=>e[500]],["elm-processing-preview-line","line-color",e=>e[500]]];function Tr(e){e.getSource(xe)||(e.addSource(xe,{type:"geojson",data:Le()}),e.addLayer({id:"elm-processing-preview-ghost",type:"fill",source:xe,filter:["==",["get","_ghost"],!0],paint:{"fill-color":"#6b7280","fill-opacity":.07}}),e.addLayer({id:"elm-processing-preview-ghost-line",type:"line",source:xe,filter:["==",["get","_ghost"],!0],paint:{"line-color":"#6b7280","line-opacity":.35,"line-width":1.5,"line-dasharray":[4,4]}}),e.addLayer({id:"elm-processing-preview-fill",type:"fill",source:xe,filter:["!=",["get","_ghost"],!0],paint:{"fill-opacity":["case",["boolean",["get","_bufferNew"],!1],.12,.2]}}),e.addLayer({id:"elm-processing-preview-line",type:"line",source:xe,filter:["!=",["get","_ghost"],!0],paint:{"line-width":["case",["boolean",["get","_bufferNew"],!1],2,2.5],"line-dasharray":["case",["boolean",["get","_bufferNew"],!1],["literal",[8,5]],["literal",[1,0]]]}}),ke(e,Rn))}function Or(e){for(const t of["elm-processing-preview-line","elm-processing-preview-fill","elm-processing-preview-ghost-line","elm-processing-preview-ghost"])e.getLayer(t)&&e.removeLayer(t);e.getSource(xe)&&e.removeSource(xe)}function Yt(e,t){return{type:"Feature",properties:t,geometry:e}}function In({map:e}){$e(e,Rn);const t=ot(),n=L.useUIStore(a=>a.editingMode),r=L.useUIStore(a=>a.geometryPreview),o=L.useUIStore(a=>a.bufferCreateNew),s=L.useDataStore(a=>a.selectedIds[0]??null),i=L.useDataStore(a=>{var d;return s?((d=a.features.find(c=>c.id===s))==null?void 0:d.geometry)??null:null});return u.useEffect(()=>{const a=e.getSource(xe);if(!a)return;if(!(n==="simplify-shape"||n==="smooth-shape"||n==="buffer-shape")||!r){a.setData({type:"FeatureCollection",features:[]});return}if(!F.canProcessShape(r.type)){a.setData({type:"FeatureCollection",features:[]});return}const c=n==="buffer-shape",x=c&&!o&&i&&F.canProcessShape(i.type),f=[];x&&f.push(Yt(i,{_ghost:!0})),f.push(Yt(r,{_bufferNew:c&&o})),a.setData({type:"FeatureCollection",features:f})},[n,r,o,i,e,t]),null}function kn(e,t,n){const[r,o]=u.useState(null),[s,i]=u.useState(t);return s!==t&&(i(t),o(null)),u.useEffect(()=>{const a=c=>{n&&o([c.lngLat.lng,c.lngLat.lat])},d=()=>o(null);return e.on("mousemove",a),e.on("mouseout",d),()=>{e.off("mousemove",a),e.off("mouseout",d)}},[e,n]),r}const me="#e74c3c",zt="#ff2d1a",qt="#c0392b",ge="elm-measure-preview",pt=["elm-measure-hit-line","elm-measure-hit-fill"];function Kr(e){e.getSource(ge)||(e.addSource(ge,{type:"geojson",data:Le()}),e.addLayer({id:"elm-measure-area-fill",type:"fill",source:ge,filter:["all",["==",["get","_kind"],"area"],["==",["geometry-type"],"Polygon"]],paint:{"fill-color":["case",["boolean",["get","_selected"],!1],qt,["boolean",["get","_hovered"],!1],zt,me],"fill-opacity":["case",["boolean",["get","_selected"],!1],.15,["boolean",["get","_hovered"],!1],.12,.08]}}),e.addLayer({id:"elm-measure-live-area",type:"fill",source:ge,filter:["all",["==",["get","_kind"],"live-area"],["==",["geometry-type"],"Polygon"]],paint:{"fill-color":me,"fill-opacity":.08}}),e.addLayer({id:"elm-measure-line",type:"line",source:ge,filter:["all",["in",["get","_kind"],["literal",["segment","live-line","live-perimeter","live-area"]]],["==",["geometry-type"],"LineString"]],paint:{"line-color":["case",["boolean",["get","_selected"],!1],qt,["boolean",["get","_hovered"],!1],zt,me],"line-width":3,"line-opacity":["case",["boolean",["get","_selected"],!1],1,["boolean",["get","_hovered"],!1],1,.9],"line-dasharray":[3.33,2]}}),e.addLayer({id:"elm-measure-ghost",type:"line",source:ge,filter:["==",["get","_kind"],"ghost"],paint:{"line-color":me,"line-width":3,"line-opacity":.45,"line-dasharray":[3.33,2]}}),e.addLayer({id:"elm-measure-close-hint",type:"line",source:ge,filter:["==",["get","_kind"],"close-hint"],paint:{"line-color":me,"line-width":2,"line-opacity":.25,"line-dasharray":[3,3]}}),e.addLayer({id:"elm-measure-hit-line",type:"line",source:ge,filter:["==",["get","_kind"],"segment"],paint:{"line-color":me,"line-width":16,"line-opacity":0}}),e.addLayer({id:"elm-measure-hit-fill",type:"fill",source:ge,filter:["all",["==",["get","_kind"],"area"],["==",["geometry-type"],"Polygon"]],paint:{"fill-color":me,"fill-opacity":0}}),e.addLayer({id:"elm-measure-vertex",type:"circle",source:ge,filter:["all",["==",["geometry-type"],"Point"],["!=",["get","_isFirst"],!0]],paint:{"circle-radius":5,"circle-color":me,"circle-stroke-width":2,"circle-stroke-color":"#ffffff"}}),e.addLayer({id:"elm-measure-first-vertex",type:"circle",source:ge,filter:["all",["==",["geometry-type"],"Point"],["==",["get","_isFirst"],!0]],paint:{"circle-radius":5,"circle-color":"#ffffff","circle-stroke-width":2.5,"circle-stroke-color":me}}))}function Br(e){for(const t of["elm-measure-first-vertex","elm-measure-vertex","elm-measure-hit-fill","elm-measure-hit-line","elm-measure-close-hint","elm-measure-ghost","elm-measure-line","elm-measure-live-area","elm-measure-area-fill"])e.getLayer(t)&&e.removeLayer(t);e.getSource(ge)&&e.removeSource(ge)}function Nr(e,t){const n=e.getSource(ge);n&&n.setData({type:"FeatureCollection",features:t})}let ye=null;function Ur(e,t,n){ye||(ye=document.createElement("div"),ye.className="elm-feature-tooltip",ye.style.cssText="position:fixed;pointer-events:none;z-index:10000;transform:translate(-50%,-100%);margin-top:-12px",document.body.appendChild(ye)),ye.textContent=e,Fn(t,n)}function Fn(e,t){ye&&(ye.style.left=e+"px",ye.style.top=t+"px")}function Wt(){ye==null||ye.remove(),ye=null}function $r(e,t,n,r){try{if(t==="distance"&&e.length>=2)return le.formatLength(Me.length(pe.lineString(e))*1e3,n);if(t==="area"&&e.length>=3)return le.formatArea(Qe.area(pe.polygon([[...e,e[0]]])),r)}catch{}return null}function _n({map:e,position:t,parts:n,onRemove:r}){const o=u.useRef(null),[s]=u.useState(()=>document.createElement("div"));return u.useEffect(()=>{const i=new Ie.Marker({element:s,anchor:"left",offset:[12,0]}).setLngLat(t).addTo(e);return o.current=i,()=>{i.remove(),o.current=null}},[e,s]),u.useEffect(()=>{var i;(i=o.current)==null||i.setLngLat(t)},[t[0],t[1]]),Ue.createPortal(B.jsxs("div",{className:"elm-measure-label",style:{display:"inline-flex",alignItems:"center",gap:7,pointerEvents:r?"auto":"none",userSelect:"none",whiteSpace:"nowrap"},children:[B.jsxs("span",{children:[B.jsx("span",{style:{fontWeight:600},children:n.value}),B.jsxs("span",{style:{fontWeight:400,opacity:.85},children:[" ",n.unit]})]}),r&&B.jsx("button",{className:"elm-measure-close",onClick:i=>{i.stopPropagation(),r()},title:"Clear measurement",style:{marginRight:"-5px"},children:B.jsxs("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",stroke:"rgba(255,255,255,0.8)",strokeWidth:"1.5",strokeLinecap:"round",children:[B.jsx("line",{x1:"1.5",y1:"1.5",x2:"8.5",y2:"8.5"}),B.jsx("line",{x1:"8.5",y1:"1.5",x2:"1.5",y2:"8.5"})]})})]}),s)}const Gr=u.memo(function({map:t,m:n}){const r=L.useUIStore(c=>c.removeMeasurement),{units:o}=L.useElementEditorConfig(),s={unit:o.length,display:o.display,precision:o.precision},i={unit:o.area,display:o.display,precision:o.precision},a=u.useMemo(()=>{try{if(n.mode==="distance"&&n.points.length>=2)return le.formatLength(Me.length(pe.lineString(n.points))*1e3,s);if(n.mode==="area"&&n.points.length>=3)return le.formatArea(Qe.area(pe.polygon([n.points])),i)}catch{}return null},[n,s.unit,s.display,s.precision,i.unit,i.display,i.precision]),d=n.mode==="area"?n.points[n.points.length-2]:n.points[n.points.length-1];return!a||!d?null:B.jsx(_n,{map:t,position:d,parts:a,onRemove:()=>r(n.id)})});function jn({map:e}){const t=ot(),n=L.useUIStore(p=>p.editingMode),r=L.useUIStore(p=>p.measurePoints),o=L.useUIStore(p=>p.measureMode),s=L.useUIStore(p=>p.completedMeasurements),i=L.useUIStore(p=>p.selectedMeasurementId),a=L.useUIStore(p=>p.snappedCoord),d=L.useUIStore(p=>p.toggleMeasurementSelection),c=L.useUIStore(p=>p.setSelectedMeasurementId),x=kn(e,n,n==="measure"),{units:f}=L.useElementEditorConfig(),y={unit:f.length,display:f.display,precision:f.precision},w={unit:f.area,display:f.display,precision:f.precision},[M,O]=u.useState(null),D=n==="measure",I=D?a??x:null,N=r.length>0?r[r.length-1]:null;u.useEffect(()=>{const p=[];for(const g of s){const E=M===g.id,R=i===g.id;if(g.mode==="distance"){for(let _=0;_<g.points.length-1;_++)p.push({type:"Feature",properties:{_kind:"segment",_id:g.id,_segIdx:_,_hovered:E,_selected:R},geometry:{type:"LineString",coordinates:[g.points[_],g.points[_+1]]}});g.points.forEach((_,l)=>{p.push({type:"Feature",properties:{_kind:"dot",_id:g.id,_isFirst:l===0},geometry:{type:"Point",coordinates:_}})})}else p.push({type:"Feature",properties:{_kind:"area",_id:g.id,_hovered:E,_selected:R},geometry:{type:"Polygon",coordinates:[g.points]}}),p.push({type:"Feature",properties:{_kind:"segment",_id:g.id,_hovered:E,_selected:R},geometry:{type:"LineString",coordinates:g.points}}),g.points.slice(0,-1).forEach((_,l)=>{p.push({type:"Feature",properties:{_kind:"dot",_id:g.id,_isFirst:l===0},geometry:{type:"Point",coordinates:_}})})}D&&r.length>=2&&p.push({type:"Feature",properties:{_kind:"live-line"},geometry:{type:"LineString",coordinates:r}}),D&&o==="area"&&r.length>=3&&p.push({type:"Feature",properties:{_kind:"live-area"},geometry:{type:"Polygon",coordinates:[[...r,r[0]]]}}),D&&I&&N&&p.push({type:"Feature",properties:{_kind:"ghost"},geometry:{type:"LineString",coordinates:[N,I]}}),D&&o==="area"&&I&&r.length>=2&&p.push({type:"Feature",properties:{_kind:"close-hint"},geometry:{type:"LineString",coordinates:[I,r[0]]}}),D&&r.forEach((g,E)=>{p.push({type:"Feature",properties:{_kind:"live-dot",_isFirst:E===0},geometry:{type:"Point",coordinates:g}})}),Nr(e,p)},[e,D,r,o,s,M,i,I,N,t]),u.useEffect(()=>{const p=_=>{var h,v;const l=(h=_.features)==null?void 0:h[0];if(!l)return;const S=(v=l.properties)==null?void 0:v._id;S&&(Qn(),_.originalEvent.stopPropagation(),d(S))},g=_=>{var A,b,P,U;const l=(A=_.features)==null?void 0:A[0];if(!l)return;const S=(b=l.properties)==null?void 0:b._id;if(!S)return;O(S);const h=(P=l.properties)==null?void 0:P._kind,v=(U=l.properties)==null?void 0:U._segIdx;if(h==="segment"&&typeof v=="number"){const X=s.find(G=>G.id===S);if(X&&X.mode==="distance"){const G=X.points[v],m=X.points[v+1];if(G&&m){const k=le.formatLength(Me.length(pe.lineString([G,m]))*1e3,y);Ur(`${k.value} ${k.unit}`,_.originalEvent.clientX,_.originalEvent.clientY)}}}},E=_=>{var h,v;const l=(h=_.features)==null?void 0:h[0];if(!l)return;((v=l.properties)==null?void 0:v._kind)==="segment"&&Fn(_.originalEvent.clientX,_.originalEvent.clientY)},R=()=>{O(null),Wt()},j=_=>{try{e.queryRenderedFeatures(_.point,{layers:pt}).length===0&&c(null)}catch{}};for(const _ of pt)e.on("click",_,p),e.on("mouseenter",_,g),e.on("mousemove",_,E),e.on("mouseleave",_,R);return e.on("click",j),()=>{for(const _ of pt)e.off("click",_,p),e.off("mouseenter",_,g),e.off("mousemove",_,E),e.off("mouseleave",_,R);e.off("click",j),Wt()}},[e,d,c,s,y.unit,y.display,y.precision]);const C=o==="distance"?1:2,T=I&&r.length>=C?[...r,I]:r,K=$r(T,o,y,w),Z=I??N;return B.jsxs(B.Fragment,{children:[s.map(p=>B.jsx(Gr,{map:e,m:p},p.id)),K&&Z&&B.jsx(_n,{map:e,position:Z,parts:K})]})}const Re="elm-osm-trace";let Zt=!1;function Hr(){if(Zt)return;const e=document.createElement("style");e.textContent=`
2
+ @keyframes elm-osm-pulse {
3
+ 0% { transform: scale(0.6); opacity: 0.7; }
4
+ 100% { transform: scale(3); opacity: 0; }
5
+ }
6
+ @keyframes elm-osm-spin {
7
+ to { transform: rotate(360deg); }
8
+ }
9
+ .elm-osm-pulse-ring {
10
+ width: 64px; height: 64px; border-radius: 50%;
11
+ background: color-mix(in srgb, var(--color-primary-500) 20%, transparent);
12
+ animation: elm-osm-pulse 1.4s ease-out infinite;
13
+ pointer-events: none;
14
+ }
15
+ .elm-osm-spinner {
16
+ width: 24px; height: 24px; border-radius: 50%;
17
+ border: 4px solid color-mix(in srgb, var(--color-primary-500) 20%, transparent);
18
+ border-top-color: var(--color-primary-500);
19
+ animation: elm-osm-spin 0.8s linear infinite;
20
+ pointer-events: none;
21
+ }
22
+ `,document.head.appendChild(e),Zt=!0}function Vr(e){e.getSource(Re)||(e.addSource(Re,{type:"geojson",data:Le()}),e.addLayer({id:"elm-osm-trace-fill",type:"fill",source:Re,paint:{"fill-color":["get","_color"],"fill-opacity":["case",["boolean",["get","_hovered"],!1],.3,.12]}}),e.addLayer({id:"elm-osm-trace-line",type:"line",source:Re,paint:{"line-color":["get","_color"],"line-width":["case",["boolean",["get","_hovered"],!1],3,2],"line-opacity":["case",["boolean",["get","_hovered"],!1],1,.7]}}))}function Xr(e){for(const t of["elm-osm-trace-line","elm-osm-trace-fill"])e.getLayer(t)&&e.removeLayer(t);e.getSource(Re)&&e.removeSource(Re)}function Yr(e,t,n){const r=e.getSource(Re);if(!r)return;if(!t){r.setData(Le());return}const o=t.map((s,i)=>({type:"Feature",properties:{_color:F.OSM_PICK_OVERLAY_COLORS[i%F.OSM_PICK_OVERLAY_COLORS.length],_hovered:n===i,_idx:i},geometry:s.geometry}));r.setData({type:"FeatureCollection",features:o})}const zr=new Set(["building","landuse","landcover","park","water","aeroway"]);function qr(e,t){const n=[],r=new Map;for(const s of e.queryRenderedFeatures([t.x,t.y])){if(!s.sourceLayer||!zr.has(s.sourceLayer)||s.id==null||s.geometry.type!=="Polygon"&&s.geometry.type!=="MultiPolygon")continue;n.push({source:s.source,sourceLayer:s.sourceLayer,id:s.id,properties:s.properties,geometry:s.geometry});const i=`${s.source}
23
+ ${s.sourceLayer}`,a=r.get(i);a?a.ids.add(s.id):r.set(i,{source:s.source,sourceLayer:s.sourceLayer,ids:new Set([s.id])})}const o=[];for(const{source:s,sourceLayer:i,ids:a}of r.values())for(const d of e.querySourceFeatures(s,{sourceLayer:i,filter:["in",["id"],["literal",[...a]]]}))o.push({source:s,sourceLayer:i,id:d.id,properties:d.properties,geometry:d.geometry});return F.tileCandidates(n,o)}async function Wr(e,t){let n=e.pieces.length===1?e.pieces[0].geometry:null;if(!n)try{n=await L.runGeometryWorkerOperation({type:"boolean",op:"union",features:e.pieces})}catch{n=await F.unionPieces(e.pieces)}return F.tileCandidateResult(e,n,t)}function An({map:e}){const{dataStore:t,uiStore:n}=L.useGeoStore(),r=L.useElementEditorConfig().network,o=u.useRef(r);o.current=r;const s=L.useEmit(),i=L.useIsEventForEditor(),a=L.useUIStore(p=>p.editingMode),[d,c]=u.useState(null),[x,f]=u.useState(null),y=L.useAccentStyle(),w=L.useTheme(),M=u.useRef(null),O=u.useRef(null),D=u.useRef(null),I=u.useRef(null);u.useEffect(()=>()=>{D.current&&(D.current.remove(),D.current=null)},[e]);const N=ot();u.useEffect(()=>{Yr(e,d,x)},[e,d,x,N]);const C=u.useCallback(p=>F.addPickedFeature(t.getState(),n.getState(),p),[t,n]),T=u.useCallback(()=>{D.current&&(D.current.remove(),D.current=null)},[]),K=u.useCallback(()=>{c(null),f(null),M.current=null,T(),O.current&&(O.current.abort(),O.current=null)},[T]),Z=u.useCallback(p=>{const g=M.current;if(K(),!("pieces"in p)){C(p);return}if(!g)return;const E=new AbortController;O.current=E,Wr(p,g).then(R=>{E.signal.aborted||(O.current=null,R&&C(R))})},[C,K]);return u.useEffect(()=>{if(!d&&a!=="pick-shape")return;function p(g){g.key==="Escape"&&i(g)&&K()}return window.addEventListener("keydown",p),()=>window.removeEventListener("keydown",p)},[d,a,K,i]),u.useEffect(()=>{if(a!=="pick-shape")return;const p=g=>{if(e.getZoom()<F.OSM_PICK_MIN_ZOOM){s({type:"warning",message:"Zoom in further to use the picker"});return}g.originalEvent.preventDefault(),K();const E=new AbortController;O.current=E;const R=g.lngLat.lng,j=g.lngLat.lat;M.current=[R,j],Hr();const _=document.createElement("div");_.style.cssText="width:64px;height:64px;pointer-events:none;display:flex;align-items:center;justify-content:center;",_.innerHTML=`
24
+ <div class="elm-osm-pulse-ring" style="position:absolute"></div>
25
+ <div class="elm-osm-spinner"></div>
26
+ `,D.current=new Ie.Marker({element:_,anchor:"center"}).setLngLat([R,j]).addTo(e);const l=qr(e,g.point),{overpass:S,fetch:h}=o.current,v=S===!1;(l.length>0||v?Promise.resolve(l):le.fetchOverpassFeatures(j,R,F.overpassRadiusForZoom(e.getZoom()),[R,j],{...S,fetch:h,signal:E.signal})).then(b=>{T(),b.length===0?(s({type:"warning",message:v?"No shape here in the basemap":"No features found here"}),K()):b.length===1?Z(b[0]):c(b)}).catch(b=>{(b==null?void 0:b.name)!=="AbortError"&&(T(),s({type:"error",code:b instanceof le.OverpassError?b.code:"unknown",source:"picker",message:le.overpassErrorMessage(b),cause:b}),K())})};return e.on("click",p),()=>{e.off("click",p)}},[a,e,K,T,Z,s]),u.useEffect(()=>{if(!d||!M.current)return;const p=M.current;let g;function E(){if(!I.current){g=requestAnimationFrame(E);return}const R=e.project(p),j=e.getContainer().getBoundingClientRect();I.current.style.left=`${j.left+R.x+16}px`,I.current.style.top=`${j.top+R.y-8}px`,g=requestAnimationFrame(E)}return g=requestAnimationFrame(E),()=>cancelAnimationFrame(g)},[d,e]),u.useEffect(()=>{if(!d)return;const p=_=>{var v,A;const l=(v=_.features)==null?void 0:v[0];if(!l)return;const S=(A=l.properties)==null?void 0:A._idx;if(typeof S!="number")return;_.originalEvent.stopPropagation();const h=d[S];h&&Z(h)},g=_=>{var h,v;const l=(h=_.features)==null?void 0:h[0];if(!l)return;const S=(v=l.properties)==null?void 0:v._idx;typeof S=="number"&&f(S),e.getCanvas().style.cursor="pointer"},E=()=>{e.getCanvas().style.cursor=Be(n.getState().editingMode)},R=()=>{f(null),E()},j=["elm-osm-trace-fill","elm-osm-trace-line"];for(const _ of j)e.on("click",_,p),e.on("mouseenter",_,g),e.on("mouseleave",_,R);return()=>{for(const _ of j)e.off("click",_,p),e.off("mouseenter",_,g),e.off("mouseleave",_,R);E()}},[d,e,Z,n]),u.useEffect(()=>{a!=="pick-shape"&&K()},[a,K]),d?Ue.createPortal(B.jsx("div",{ref:I,"data-elm-portal":!0,"data-elm-theme":w,style:{...y,position:"fixed",zIndex:1e4},children:B.jsx("div",{className:"bg-elm-surface/95 backdrop-blur-md border border-elm-border/80 text-elm-text-secondary shadow-elm rounded-elm overflow-hidden min-w-[180px] max-w-[280px] text-sm py-1",children:d.map((p,g)=>B.jsxs("button",{onClick:()=>Z(p),onMouseEnter:()=>f(g),onMouseLeave:()=>f(null),className:`w-full text-left px-3 py-2 flex items-center gap-2 transition-colors ${x===g?"bg-primary-50 dark:bg-white/5":"hover:bg-(--elm-surface-hover,var(--color-gray-50)) dark:hover:bg-elm-surface-hover"}`,children:[B.jsx("span",{className:"w-2.5 h-2.5 rounded-full shrink-0",style:{background:F.OSM_PICK_OVERLAY_COLORS[g%F.OSM_PICK_OVERLAY_COLORS.length]}}),B.jsxs("span",{className:"flex flex-col min-w-0",children:[B.jsx("span",{className:"font-medium text-(--elm-text,var(--color-gray-800)) dark:text-(--elm-text,var(--color-gray-100)) truncate",children:p.name||`Unnamed ${p.type.toLowerCase()}`}),B.jsx("span",{className:"text-xs text-(--elm-text-subtle,var(--color-gray-400))",children:p.type})]})]},"key"in p?p.key:`${p.osmId}/${g}`))})}),document.body):null}const Jt="elm-features";function Zr(e){Zn(e),or(e),jr(e),Tr(e),Kr(e),Fr(e),Vr(e),Pn(e,le.readAccentPalette(e.getContainer())[400])}function Jr(e){Xr(e),_r(e),Jn(e),sr(e),Ar(e),Or(e),Br(e),e.hasImage("elm-snap-diamond")&&e.removeImage("elm-snap-diamond")}function Qr(e,t){let n,r=!1;const o=()=>{if(r)return;const i=e.getSource(Jt);if(!(i&&i===n)){r=!0;try{Zr(e)}catch{return}finally{r=!1}(!jt.getBasemapIds(e)||n&&!i)&&jt.rememberBasemap(e,e.getStyle()),n=e.getSource(Jt),t()}};o();const s=["styledata","style.load","load"];for(const i of s)e.on(i,o);return()=>{for(const i of s)e.off(i,o)}}function Dn({map:e}){const{units:t}=L.useElementEditorConfig(),n={unit:t.length,display:t.display,precision:t.precision},r={unit:t.area,display:t.display,precision:t.precision},o=g=>{const{value:E,unit:R}=le.formatLength(g*1e3,n);return`${E} ${R}`},s=g=>{const{value:E,unit:R}=le.formatArea(g,r);return`${E} ${R}`},i=L.useUIStore(g=>g.showMeasurements),a=L.useUIStore(g=>g.editingMode),d=L.useUIStore(g=>g.snappedCoord),c=L.useUIStore(g=>g.lineInProgress),x=L.useUIStore(g=>g.polygonInProgress),f=L.useUIStore(g=>g.circleCenter),y=L.useUIStore(g=>g.rectCorner),w=L.useUIStore(g=>g.freehandPoints),M=L.useUIStore(g=>g.freehandClosed),O=L.useUIStore(g=>g.routeWaypoints),D=kn(e,a,a!=="none"),[I,N]=u.useState(null),C=d??D;u.useEffect(()=>{if(!C){N(null);return}N(e.project(C));const g=()=>N(C?e.project(C):null);return e.on("move",g),e.on("zoom",g),()=>{e.off("move",g),e.off("zoom",g)}},[e,C==null?void 0:C[0],C==null?void 0:C[1]]);const T=u.useRef(null),[K,Z]=u.useState({w:0,h:0});if(u.useLayoutEffect(()=>{const g=T.current;g&&(g.offsetWidth!==K.w||g.offsetHeight!==K.h)&&Z({w:g.offsetWidth,h:g.offsetHeight})}),!i||a==="none"||!C||!I)return null;const p=[];try{if(a==="place-point")p.push({label:"",value:`${C[1].toFixed(6)}, ${C[0].toFixed(6)}`});else if(a==="draw-line"||a==="slice-shape"){const g=[...c,C];if(g.length>=2){const E=pe.lineString(g);p.push({label:"Length",value:o(Me.length(E))}),p.push({label:"Segment length",value:o(we.distance(g[g.length-2],g[g.length-1]))})}p.push({label:"",value:`${C[1].toFixed(6)}, ${C[0].toFixed(6)}`})}else if(a==="draw-polygon"||a==="cut-hole"){const g=[...x,C];if(g.length>=3){const E=[...g,g[0]],R=pe.polygon([E]);p.push({label:"Area",value:s(Qe.area(R))}),p.push({label:"Perimeter",value:o(Me.length(R))});const j=Qt.bbox(R);p.push({label:"Height",value:o(we.distance([j[0],j[1]],[j[0],j[3]]))}),p.push({label:"Width",value:o(we.distance([j[0],j[1]],[j[2],j[1]]))})}else g.length===2&&p.push({label:"Segment length",value:o(we.distance(g[0],g[1]))});p.push({label:"",value:`${C[1].toFixed(6)}, ${C[0].toFixed(6)}`})}else if(a==="draw-circle"){if(f){const g=we.distance(f,C);p.push({label:"Radius",value:o(g)}),p.push({label:"Area",value:s(Math.PI*(g*1e3)*(g*1e3))})}p.push({label:"",value:`${C[1].toFixed(6)}, ${C[0].toFixed(6)}`})}else if(a==="draw-rect"){if(y){const g=we.distance([y[0],y[1]],[C[0],y[1]]),E=we.distance([y[0],y[1]],[y[0],C[1]]),R=g*E*1e6;p.push({label:"Area",value:s(R)}),p.push({label:"Width",value:o(g)}),p.push({label:"Height",value:o(E)})}p.push({label:"",value:`${C[1].toFixed(6)}, ${C[0].toFixed(6)}`})}else if(a==="draw-route"){const g=[...O,C];g.length>=2&&p.push({label:"Straight distance",value:o(we.distance(g[g.length-2],g[g.length-1]))}),p.push({label:"",value:`${C[1].toFixed(6)}, ${C[0].toFixed(6)}`})}else if(a==="draw-freehand"){if(w.length>=3&&M){const g=[...w,w[0]],E=pe.polygon([g]);p.push({label:"Area",value:s(Qe.area(E))}),p.push({label:"Perimeter",value:o(Me.length(E))})}else if(w.length>=2){const g=pe.lineString(w);p.push({label:"Length",value:o(Me.length(g))})}p.push({label:"",value:`${C[1].toFixed(6)}, ${C[0].toFixed(6)}`})}}catch{}return p.length===0?null:Ue.createPortal(B.jsx("div",{ref:T,className:"elm-measurement-tooltip",style:{position:"absolute",...F.placeBox(I.x,I.y,K.w,K.h,{x:"after",y:"center",gapX:20,bounds:{left:0,top:0,right:e.getContainer().clientWidth,bottom:e.getContainer().clientHeight}}),zIndex:700,pointerEvents:"none",whiteSpace:"nowrap",background:"var(--elm-surface, white)",border:"1px solid var(--elm-border, rgb(229, 231, 235))",boxShadow:"var(--elm-shadow-control, 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1))",borderRadius:"calc(var(--elm-radius-control, 6px) + 2px)",padding:12,fontSize:12,color:"var(--elm-text-secondary, rgb(75, 85, 99))",fontFamily:"var(--elm-font, ui-sans-serif, system-ui, sans-serif)"},children:B.jsx("div",{style:{display:"flex",flexDirection:"column",gap:4,textAlign:"left"},children:p.map((g,E)=>B.jsxs("div",{style:{display:"flex",gap:8,alignItems:"center",lineHeight:1.3},children:[g.label&&B.jsxs("span",{style:{fontWeight:600,color:"var(--elm-text, rgb(17, 24, 39))"},children:[g.label,":"]}),B.jsx("span",{children:g.value})]},E))})}),e.getContainer())}const Rt=u.createContext(null);function eo(){const e=u.useContext(Rt);if(!e)throw new Error("useMapLibre must be used inside ElementEditorControls");return e}const to=()=>u.useContext(Rt);function no({map:e}){const t=L.useSetMapController();return u.useEffect(()=>{t({flyTo:([n,r],o)=>e.flyTo({center:[r,n],zoom:o,offset:F.visibleCenterOffset(e.getContainer())}),panTo:([n,r])=>e.panTo([r,n],{offset:F.visibleCenterOffset(e.getContainer())}),fitBounds:n=>{const r=F.normalizeFitBoundsTarget(n);r&&e.fitBounds([[r.minLng,r.minLat],[r.maxLng,r.maxLat]],{padding:F.fitPadding(e.getContainer()),maxZoom:16})},getCenter:()=>{const n=e.getCenter();return[n.lng,n.lat]},setZoom:n=>{const r=Math.max(e.getMinZoom(),Math.min(e.getMaxZoom(),n));return e.setZoom(r),r},getZoomBounds:()=>({min:e.getMinZoom(),max:e.getMaxZoom()}),getMap:()=>e})},[e,t]),null}const ro=u.forwardRef(function(t,n){const{map:r,maxBounds:o}=t,{dataStore:s,uiStore:i}=L.useGeoStore(),a=L.useAdapterControls({initialData:t.initialData,schema:t.schema,layout:t.layout,readonly:t.readonly,tools:t.tools,maxFeatures:t.maxFeatures,engine:"maplibre",onChange:t.onChange,onSubmit:t.onSubmit,onValidationError:t.onValidationError,onFeatureAdd:t.onFeatureAdd,onFeatureUpdate:t.onFeatureUpdate,onFeatureDelete:t.onFeatureDelete,onSelectionChange:t.onSelectionChange,onFeatureSelect:t.onFeatureSelect,onZoomChange:t.onZoomChange,onToolChange:t.onToolChange});return u.useImperativeHandle(n,()=>a,[a]),u.useEffect(()=>{},[s,i,r]),L.useKeyboardShortcuts(r.getContainer()),L.useApplyAccentToRoot(r.getContainer()),L.useReportThemeFromRoot(r.getContainer()),u.useEffect(()=>{L.preloadEditorPanelsWhenIdle()},[]),u.useEffect(()=>{r.setMaxBounds(o??null)},[r,o]),u.useEffect(()=>{const d=()=>s.getState().setCurrentZoom(r.getZoom());return s.getState().setCurrentZoom(r.getZoom()),r.on("zoomend",d),()=>{r.off("zoomend",d)}},[r,s]),B.jsxs(Rt.Provider,{value:r,children:[B.jsxs(nn,{getFeatureStyle:t.getFeatureStyle,children:[B.jsx(no,{map:r}),B.jsx(Mn,{map:r}),B.jsx(an,{map:r}),B.jsx(En,{map:r}),B.jsx(fn,{map:r,routingApiKey:t.routingApiKey}),B.jsx(yn,{map:r}),B.jsx(In,{map:r}),B.jsx(jn,{map:r}),B.jsx(Dn,{map:r}),B.jsx(An,{map:r}),B.jsx(Cn,{map:r})]}),t.children]})}),oo=u.forwardRef(function(t,n){const[r,o]=u.useState(()=>t.map.isStyleLoaded()),[s,i]=u.useState(0);u.useEffect(()=>Qr(t.map,()=>{o(!0),i(x=>x+1)}),[t.map]);const a=u.useRef(t.onReady);a.current=t.onReady;const d=u.useRef(null);if(u.useEffect(()=>{var x;!r||d.current===t.map||(d.current=t.map,(x=a.current)==null||x.call(a,t.map))},[r,t.map]),u.useEffect(()=>()=>{try{Jr(t.map)}catch{}},[t.map]),!r)return null;const c=B.jsx(on.Provider,{value:s,children:B.jsx(L.MapControllerProvider,{children:B.jsx(ro,{...t,ref:n})})});return t.onEvent||t.onError?B.jsx(L.EventProvider,{onEvent:t.onEvent,onError:t.onError,children:c}):c}),so=["streets","terrain","light","dark","osm"],ht=new WeakMap;let io=0;function Ae(e,t){if(typeof e=="string")return e;const n=e.id??e.label??("url"in e?e.url:typeof e.style=="string"?e.style:void 0);return n||(t>=0?`custom-${t}`:(ht.has(e)||ht.set(e,`custom-anon-${++io}`),ht.get(e)))}const Tn=()=>Promise.resolve().then(()=>require("./style-873tzaoH.cjs")),co=()=>Promise.all([Tn(),Promise.resolve().then(()=>require("./catalog-Cnqi23GZ.cjs"))]).then(([e,t])=>({...e,...t}));let rt=!1;const On=e=>new le.ElementEditorError("network","basemap",`The basemap catalog could not be loaded (${e instanceof Error?e.message:String(e)}). Reload the page to try again.`,{cause:e});function Kn(){const e=Ne.useOptionalEmit(),t=u.useRef(e);return t.current=e,u.useCallback(n=>{t.current?t.current({type:"error",code:n.code,source:"basemap",message:n.message,error:n}):console.error(`[element-editor] ${n.message}`)},[])}function Bn(e,t,n){const{theme:r}=n,o=L.useElementEditorConfig().network,s=u.useRef(o);s.current=o;const[i,a]=u.useState(null),d=Kn();u.useEffect(()=>{let y=!0;return Tn().then(w=>y&&a(w),w=>{y&&!rt&&(rt=!0,d(On(w)))}),()=>{y=!1}},[]);const c=y=>{const w=(i==null?void 0:i.resolveBasemap(y,r))??y;return Ae(w,-1)},x=u.useRef(void 0),f=u.useRef(n.initialApplied?{basemap:t,theme:r}:null);x.current===void 0&&(x.current=f.current?"":null),u.useEffect(()=>{if(!e||!i)return;const y=c(t);if(x.current===""&&(x.current=Ae(i.resolveBasemap(f.current.basemap,f.current.theme),-1)),x.current===y)return;let w=!1;const M=K=>K instanceof Error?K.message:String(K),O=i.resolveBasemap(t,r),D=typeof O=="object"&&"style"in O&&typeof O.style=="string",I=K=>{N(),x.current=null,d(new le.ElementEditorError(F.loadErrorCode(K.error),"basemap",`The basemap could not be loaded (${M(K.error)}).`,{cause:K.error}))},N=()=>{e.off("error",I),e.off("styledata",N)},C=()=>{w||!(e.isStyleLoaded()||e.getSource("elm-features"))||(w=!0,e.off("styledata",C),x.current=y,i.setBasemap(e,t,{theme:r,network:s.current}).then(()=>{D&&!T&&(e.on("error",I),e.once("styledata",N))},K=>{x.current=null,d(new le.ElementEditorError(F.loadErrorCode(K),"basemap",`The basemap could not be switched (${M(K)}). The map keeps the previous one.`,{cause:K}))}))};let T=!1;return e.on("styledata",C),C(),()=>{w=!0,T=!0,e.off("styledata",C),N()}},[e,i,t,r])}function ao(e){const{basemaps:t,value:n,defaultValue:r="auto",onChange:o,storageKey:s,initialApplied:i,size:a,tooltipSide:d}=e,c=to(),x=e.map??c,f=L.useTheme(),[y,w]=u.useState(null),M=Kn();u.useEffect(()=>{let l=!0;return co().then(S=>l&&w(S),S=>{l&&!rt&&(rt=!0,M(On(S)))}),()=>{l=!1}},[]);const O=L.useElementEditorConfig(),D=u.useMemo(()=>t??["auto",...so],[t]),I=D.map(Ae);(D.filter(l=>typeof l=="object"&&!l.id&&!l.label&&!("url"in l)&&typeof l.style!="string").length>1||new Set(I).size<I.length)&&F.warnOnce("basemap-ids","BasemapControl: give each custom basemap a unique `id` (two entries without one, or with the same id/label, cannot be told apart).");const[N]=u.useState(()=>{const l=s?le.readStorage(s,O):null;return l?D.find((S,h)=>Ae(S,h)===l):void 0}),[C,T]=u.useState(N??r),[K,Z]=u.useState(n!==void 0||e.defaultValue!==void 0||N!==void 0),p=n??C,g=D.indexOf(p),E=g>=0?I[g]:Ae(p,-1);Bn(K||n!==void 0?x:null,p,{theme:f,initialApplied:K&&i&&E===Ae(r,D.indexOf(r))});const R=u.useCallback(l=>{const S=I.indexOf(l);if(S<0)return;const h=D[S];Z(!0),n===void 0&&T(h),s&&(typeof h=="string"||h.id)&&le.writeStorage(s,l,O),o==null||o(h)},[I,D,n,s,o,O]);if(!y)return null;const j=l=>{var S;return(S=y.BASEMAPS.find(h=>h.id===l))==null?void 0:S.thumbnail},_=D.map((l,S)=>{const h=I[S],v=typeof l=="string"?y.BASEMAPS.find(A=>A.id===l):void 0;return{id:h,label:l==="auto"?"Auto":(v==null?void 0:v.label)??(typeof l=="object"&&l.label||h),thumbnail:l==="auto"?[j("streets"),j("dark")].every(Boolean)?[j("streets"),j("dark")]:void 0:typeof l=="string"?j(l):l.thumbnail}});return B.jsx(L.BasemapPicker,{options:_,value:E,onChange:R,size:a,tooltipSide:d})}Object.defineProperty(exports,"ActiveDrawingToolbar",{enumerable:!0,get:()=>L.ActiveDrawingToolbar});Object.defineProperty(exports,"EditingToolbar",{enumerable:!0,get:()=>L.EditingToolbar});Object.defineProperty(exports,"ElementEditorUIProvider",{enumerable:!0,get:()=>L.ElementEditorUIProvider});Object.defineProperty(exports,"FloatingToolbar",{enumerable:!0,get:()=>L.FloatingToolbar});Object.defineProperty(exports,"GeoStoreProvider",{enumerable:!0,get:()=>L.GeoStoreProvider});Object.defineProperty(exports,"MapControllerProvider",{enumerable:!0,get:()=>L.MapControllerProvider});Object.defineProperty(exports,"StoreContext",{enumerable:!0,get:()=>L.StoreContext});Object.defineProperty(exports,"useDataStore",{enumerable:!0,get:()=>L.useDataStore});Object.defineProperty(exports,"useGeoStore",{enumerable:!0,get:()=>L.useGeoStore});Object.defineProperty(exports,"useKeyboardShortcuts",{enumerable:!0,get:()=>L.useKeyboardShortcuts});Object.defineProperty(exports,"useMapController",{enumerable:!0,get:()=>L.useMapController});Object.defineProperty(exports,"useSetMapController",{enumerable:!0,get:()=>L.useSetMapController});Object.defineProperty(exports,"useUIStore",{enumerable:!0,get:()=>L.useUIStore});Object.defineProperty(exports,"ElementEditorError",{enumerable:!0,get:()=>le.ElementEditorError});exports.BasemapControl=ao;exports.BoundaryLayer=Mn;exports.BoxSelectHandler=wn;exports.DrawingLayer=fn;exports.DrawingPreviewLayer=yn;exports.ElementEditorControls=oo;exports.FeatureInteractionLayer=En;exports.FeatureLayer=an;exports.FeatureStyleProvider=nn;exports.FitBounds=Dr;exports.GeometryProcessingPreview=In;exports.MeasurePreviewLayer=jn;exports.MeasurementTooltip=Dn;exports.OsmTraceHandler=An;exports.SnapController=Cn;exports.TransformControls=Sn;exports.VertexEditor=xn;exports.findSnapPoint=wt;exports.snapToAngle=tt;exports.useBasemap=Bn;exports.useFeatureStyle=rn;exports.useMapLibre=eo;
@@ -0,0 +1,2 @@
1
+ export * from './src/index.cjs'
2
+ export {}
@@ -0,0 +1,2 @@
1
+ export * from './src/index.js'
2
+ export {}