@element-editor/adapter-maplibre 0.0.0-stage → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +119 -0
- package/LICENSE +21 -0
- package/README.md +82 -2
- package/basemaps/sprite.json +1 -0
- package/basemaps/sprite.png +0 -0
- package/basemaps/sprite@2x.json +1 -0
- package/basemaps/sprite@2x.png +0 -0
- package/basemaps/thumbs/dark.webp +0 -0
- package/basemaps/thumbs/light.webp +0 -0
- package/basemaps/thumbs/osm.webp +0 -0
- package/basemaps/thumbs/streets.webp +0 -0
- package/basemaps/thumbs/terrain.webp +0 -0
- package/dist/adapter-maplibre.css +1 -0
- package/dist/basemapIds-2GdXIJS1.cjs +1 -0
- package/dist/basemapIds-CVTxeXkr.js +11 -0
- package/dist/basemaps.cjs +1 -0
- package/dist/basemaps.d.cts +2 -0
- package/dist/basemaps.d.ts +2 -0
- package/dist/basemaps.es.js +10 -0
- package/dist/catalog-Cnqi23GZ.cjs +1 -0
- package/dist/catalog-gI-xABuu.js +10 -0
- package/dist/dark-C5d5FijX.cjs +1 -0
- package/dist/dark-CcJT_yHE.js +13 -0
- package/dist/index.cjs +26 -0
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.es.js +3792 -0
- package/dist/light-Cf5tUOoP.js +13 -0
- package/dist/light-DCtd1z4V.cjs +1 -0
- package/dist/src/BasemapControl.d.cts +47 -0
- package/dist/src/BasemapControl.d.ts +47 -0
- package/dist/src/ElementEditorControls.d.cts +113 -0
- package/dist/src/ElementEditorControls.d.ts +113 -0
- package/dist/src/basemapIds.d.cts +10 -0
- package/dist/src/basemapIds.d.ts +10 -0
- package/dist/src/basemaps/catalog.d.cts +7 -0
- package/dist/src/basemaps/catalog.d.ts +7 -0
- package/dist/src/basemaps/index.d.cts +3 -0
- package/dist/src/basemaps/index.d.ts +3 -0
- package/dist/src/basemaps/style.d.cts +61 -0
- package/dist/src/basemaps/style.d.ts +61 -0
- package/dist/src/components/BoundaryLayer.d.cts +11 -0
- package/dist/src/components/BoundaryLayer.d.ts +11 -0
- package/dist/src/components/BoxSelectHandler.d.cts +13 -0
- package/dist/src/components/BoxSelectHandler.d.ts +13 -0
- package/dist/src/components/DrawingLayer.d.cts +8 -0
- package/dist/src/components/DrawingLayer.d.ts +8 -0
- package/dist/src/components/DrawingPreviewLayer.d.cts +8 -0
- package/dist/src/components/DrawingPreviewLayer.d.ts +8 -0
- package/dist/src/components/FeatureInteractionLayer.d.cts +8 -0
- package/dist/src/components/FeatureInteractionLayer.d.ts +8 -0
- package/dist/src/components/FeatureLayer.d.cts +15 -0
- package/dist/src/components/FeatureLayer.d.ts +15 -0
- package/dist/src/components/GeometryProcessingPreview.d.cts +8 -0
- package/dist/src/components/GeometryProcessingPreview.d.ts +8 -0
- package/dist/src/components/MeasurePreviewLayer.d.cts +9 -0
- package/dist/src/components/MeasurePreviewLayer.d.ts +9 -0
- package/dist/src/components/MeasurementTooltip.d.cts +6 -0
- package/dist/src/components/MeasurementTooltip.d.ts +6 -0
- package/dist/src/components/OsmTraceHandler.d.cts +8 -0
- package/dist/src/components/OsmTraceHandler.d.ts +8 -0
- package/dist/src/components/PreciseCoordsOverlay.d.cts +10 -0
- package/dist/src/components/PreciseCoordsOverlay.d.ts +10 -0
- package/dist/src/components/SnapController.d.cts +9 -0
- package/dist/src/components/SnapController.d.ts +9 -0
- package/dist/src/components/TextEditOverlay.d.cts +9 -0
- package/dist/src/components/TextEditOverlay.d.ts +9 -0
- package/dist/src/components/TransformControls.d.cts +8 -0
- package/dist/src/components/TransformControls.d.ts +8 -0
- package/dist/src/components/VertexEditor.d.cts +15 -0
- package/dist/src/components/VertexEditor.d.ts +15 -0
- package/dist/src/contexts/FeatureStyleContext.d.cts +9 -0
- package/dist/src/contexts/FeatureStyleContext.d.ts +9 -0
- package/dist/src/contexts/MapControllerContext.d.cts +2 -0
- package/dist/src/contexts/MapControllerContext.d.ts +2 -0
- package/dist/src/contexts/StyleEpochContext.d.cts +7 -0
- package/dist/src/contexts/StyleEpochContext.d.ts +7 -0
- package/dist/src/elementLayers.d.cts +17 -0
- package/dist/src/elementLayers.d.ts +17 -0
- package/dist/src/hooks/lastPointer.d.cts +18 -0
- package/dist/src/hooks/lastPointer.d.ts +18 -0
- package/dist/src/hooks/useCursorWhileMode.d.cts +20 -0
- package/dist/src/hooks/useCursorWhileMode.d.ts +20 -0
- package/dist/src/hooks/useModifierDragCursor.d.cts +8 -0
- package/dist/src/hooks/useModifierDragCursor.d.ts +8 -0
- package/dist/src/index.d.cts +30 -0
- package/dist/src/index.d.ts +30 -0
- package/dist/src/store/StoreContext.d.cts +1 -0
- package/dist/src/store/StoreContext.d.ts +1 -0
- package/dist/src/utils/accentPaint.d.cts +13 -0
- package/dist/src/utils/accentPaint.d.ts +13 -0
- package/dist/src/utils/boxSelect.d.cts +4 -0
- package/dist/src/utils/boxSelect.d.ts +4 -0
- package/dist/src/utils/darkStyle.d.cts +8 -0
- package/dist/src/utils/darkStyle.d.ts +8 -0
- package/dist/src/utils/featureTooltip.d.cts +16 -0
- package/dist/src/utils/featureTooltip.d.ts +16 -0
- package/dist/src/utils/findPartAtPoint.d.cts +2 -0
- package/dist/src/utils/findPartAtPoint.d.ts +2 -0
- package/dist/src/utils/freehandCommitFlag.d.cts +2 -0
- package/dist/src/utils/freehandCommitFlag.d.ts +2 -0
- package/dist/src/utils/freshFeature.d.cts +3 -0
- package/dist/src/utils/freshFeature.d.ts +3 -0
- package/dist/src/utils/geojson.d.cts +10 -0
- package/dist/src/utils/geojson.d.ts +10 -0
- package/dist/src/utils/liveFeatureSource.d.cts +6 -0
- package/dist/src/utils/liveFeatureSource.d.ts +6 -0
- package/dist/src/utils/measureClickFlag.d.cts +2 -0
- package/dist/src/utils/measureClickFlag.d.ts +2 -0
- package/dist/src/utils/modifierDragFlag.d.cts +2 -0
- package/dist/src/utils/modifierDragFlag.d.ts +2 -0
- package/dist/src/utils/rafThrottle.d.cts +11 -0
- package/dist/src/utils/rafThrottle.d.ts +11 -0
- package/dist/src/utils/snapping.d.cts +25 -0
- package/dist/src/utils/snapping.d.ts +25 -0
- package/dist/src/utils/toolCursor.d.cts +3 -0
- package/dist/src/utils/toolCursor.d.ts +3 -0
- package/dist/streets-Bakdn2nG.cjs +1 -0
- package/dist/streets-D0l2l7xn.js +13 -0
- package/dist/style-Db7kunP9.cjs +1 -0
- package/dist/style-Di9c4u-c.js +75 -0
- package/dist/terrain-CUJe0pn4.cjs +1 -0
- package/dist/terrain-CZOhjFPd.js +13 -0
- package/package.json +128 -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"),_=require("@element-editor/core/internal"),L=require("@element-editor/ui"),Ne=require("@element-editor/ui/internal"),le=require("@element-editor/core"),Nn=require("maplibre-gl"),_t=require("@phosphor-icons/react"),Ue=require("react-dom"),Un=require("@turf/transform-rotate"),pe=require("@turf/helpers"),Qt=require("@turf/bbox"),$n=require("@turf/boolean-intersects"),Me=require("@turf/length"),Qe=require("@turf/area"),jt=require("./basemapIds-2GdXIJS1.cjs"),we=require("@turf/distance");function Gn(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const ke=Gn(Nn);function Le(){return{type:"FeatureCollection",features:[]}}const Hn="elm-features",en=new WeakMap;function Vn(e,t,n){en.set(e,{features:t,uniqueIds:n})}function vt(e,t){const n=e.getSource(Hn),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 Xn(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=Xn(s);return i!==null&&i<.18}catch{return!1}}const on=u.createContext(0),ot=()=>u.useContext(on);function Ie(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(()=>{Ie(e,t,n)},[e,t,n]),n}const fe="elm-features",xt="elm-features-line-hit",Yn=16,et=["boolean",["feature-state","hovered"],!1],zn=["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"]],qn={color:le.DEFAULT_FEATURE_COLOR,hover:"#64748b",casing:"rgba(255, 255, 255, 0.7)"},Wn={color:_.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",zn,t[600],it(t[500],Dt,e)]]],cn=sn(qn),Zn=sn(Wn),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],Jn=1.5;function Qn(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*Jn],"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":Yn,"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}}):_.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".'),Ie(e,cn))}function er(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(D=>D.features),n=L.useDataStore(D=>D.groups),r=L.useDataStore(D=>D.selectedIds),o=L.useUIStore(D=>D.editingMode),s=L.useUIStore(D=>D.geometryPreview!==null),i=L.useUIStore(D=>D.bufferCreateNew),a=rn(),d=L.useElementEditorConfig().featureColor,c=ot(),[x,f]=u.useState(()=>At(e));u.useEffect(()=>{const D=()=>f(At(e));return D(),e.on("styledata",D),()=>{e.off("styledata",D)}},[e,c]);const y=x?Zn:cn,w=$e(e,y);u.useEffect(()=>{Ie(e,y,w)},[c]);const R=Ne.useOptionalEmit(),O=u.useRef(!1);u.useEffect(()=>{O.current||e.getGlyphs()||(O.current=!0,R==null||R({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,R]);const I=s&&(o==="simplify-shape"||o==="smooth-shape"||o==="buffer-shape"&&!i)?r:null;u.useEffect(()=>{const D=e.getSource(fe);if(!D)return;const K=new Set(n.filter(k=>k.hidden).map(k=>k.id)),Z=I?new Set(I):null,h=t.filter(k=>!(k.hidden||k.groupId&&K.has(k.groupId)||Z!=null&&Z.has(k.id)&&_.canProcessShape(k.geometry.type))),g=[];let E=!0;for(const k of h){const{_validation:T,...C}=k,l=a==null?void 0:a(k),S={},p=(l==null?void 0:l.color)??d;if(p!==void 0&&(S._color=p),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)),k.geometry.type==="GeometryCollection"){k.geometry.geometries.length>1&&(E=!1);for(const v of k.geometry.geometries)g.push({...C,geometry:v,properties:{...C.properties,...S,id:k.id}})}else g.push({...C,properties:{...C.properties,...S,id:k.id}})}D.setData({type:"FeatureCollection",features:g}),Vn(e,g,E)},[t,n,e,I,a,d,c]);const N=u.useRef(new Set),M=u.useRef(c);return u.useEffect(()=>{if(!e.getSource(fe))return;M.current!==c&&(M.current=c,N.current=new Set);const D=N.current,K=new Set(r);for(const Z of D)K.has(Z)||e.setFeatureState({source:fe,id:Z},{selected:!1});for(const Z of K)D.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,R=0,O=!1,A=null;const I=o+1;let N=1/0,M=-1/0,D=1/0,K=-1/0;for(const[E,k]of[[a-I,d-I],[a+I,d-I],[a-I,d+I],[a+I,d+I]]){const T=n.unproject([E,k]);T.lng<N&&(N=T.lng),T.lng>M&&(M=T.lng),T.lat<D&&(D=T.lat),T.lat>K&&(K=T.lat)}let Z="";function h(E,k=!0){if(!E||E.length===0)return;let T=-1,C=0,l=0;for(let S=0;S<E.length;S++){const p=E[S];if(!(p[0]<N||p[0]>M||p[1]<D||p[1]>K)){if(T!==S){const j=n.project(p);C=j.x,l=j.y,T=S}const v=Math.hypot(a-C,d-l);v<c&&(c=v,x=p,f=Z)}if(k&&S<E.length-1){const v=E[S+1];if(p[0]<N&&v[0]<N||p[0]>M&&v[0]>M||p[1]<D&&v[1]<D||p[1]>K&&v[1]>K)continue;if(T!==S){const F=n.project(p);C=F.x,l=F.y}const j=C,b=l,P=n.project(v);T=S+1,C=P.x,l=P.y;const U=(j-P.x)**2+(b-P.y)**2;let X=j,G=b;if(U!==0){let F=((a-j)*(P.x-j)+(d-b)*(P.y-b))/U;F=Math.max(0,Math.min(1,F)),X=j+F*(P.x-j),G=b+F*(P.y-b)}const m=Math.hypot(a-X,d-G);m<y&&(y=m,w=X,R=G,O=!0,A=Z)}}}function g(E){switch(E.type){case"Point":h([E.coordinates]);break;case"MultiPoint":h(E.coordinates,!1);break;case"LineString":h(E.coordinates);break;case"Polygon":case"MultiLineString":for(const k of E.coordinates)h(k);break;case"MultiPolygon":for(const k of E.coordinates)for(const T of k)h(T);break;case"GeometryCollection":for(const k of E.geometries)g(k);break}}for(const E of r)if(!s.has(E.id)){if(E.bbox){const[k,T,C,l]=E.bbox;if(C<N||k>M||l<D||T>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,R]);return{lnglat:[E.lng,E.lat],isVertex:!1,featureId:A??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),R=e.unproject([y,w]);return[R.lng,R.lat]}let mt=!1;function tr(){mt=!0,Promise.resolve().then(()=>{mt=!1})}function nr(){return mt}let ln=0;function rr(){ln=Date.now()}function or(){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":"",sr=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(h=>h.editingMode),x=L.useUIStore(h=>h.cancelDrawing),f=L.useUIStore(h=>h.routeWaypoints),y=u.useRef(f);u.useEffect(()=>{y.current=f},[f]);const w=u.useRef(null),R=u.useRef(null),O=u.useRef(null),A=u.useRef(!1),I=u.useRef(!1),N=u.useRef(!1),M=u.useRef(null),D=u.useRef(_.createClickRepeatGuard()).current,K=u.useRef(!1),Z=u.useCallback(async h=>{if(!(h.length<2)){n.getState().setRoutePreview(null,!0);try{if(!i.current)throw new Error("routing is off");const g=await le.fetchRoute(h,i.current);y.current.length>=2&&n.getState().setRoutePreview(g,!1)}catch(g){const E=_.routingError(g);a({type:"error",code:E.code,source:"routing",message:E.message,error:E}),n.getState().setRoutePreview(h,!1)}}},[n,a]);return u.useEffect(()=>{const h=e.getCanvas();function g(){K.current||(K.current=!0,e.dragPan.enable(),h.style.cursor="grab")}function E(){if(!K.current)return;K.current=!1;const p=n.getState().editingMode;h.style.cursor=Be(p),(p==="draw-rect"||p==="draw-circle"||p==="draw-freehand")&&e.dragPan.disable()}const k=p=>{if(p.key==="Shift"&&(I.current=!0),!!d(p)){if(p.code==="Space"){const v=p.target;if(v&&(v.tagName==="INPUT"||v.tagName==="TEXTAREA"||v.isContentEditable))return;p.preventDefault(),n.getState().editingMode!=="none"&&g();return}if(p.key==="Escape"){const{selectedMeasurementId:v,setSelectedMeasurementId:j}=n.getState();if(v){j(null);return}x();return}if(p.key==="Enter"){const v=n.getState();if(v.editingMode==="measure"){v.completeMeasure();return}}if(p.key==="Backspace"||p.key==="Delete"){const v=n.getState();if(v.selectedMeasurementId){v.removeMeasurement(v.selectedMeasurementId);return}const j=v.editingMode;if(j==="measure"){v.removeLastMeasurePoint();return}if(j==="draw-line"||j==="slice-shape"){v.removeLastLineVertex();return}if(j==="draw-polygon"||j==="cut-hole"){v.removeLastPolygonVertex();return}if(j==="draw-route"){v.removeLastRouteWaypoint();return}}}},T=p=>{if(p.code==="Space"){E();return}p.key==="Shift"&&(I.current=!1)},C=()=>E(),l=()=>{h.style.cursor="grabbing"},S=()=>{h.style.cursor=K.current?"grab":Be(n.getState().editingMode)};return window.addEventListener("keydown",k),window.addEventListener("keyup",T),window.addEventListener("blur",C),e.on("dragstart",l),e.on("dragend",S),()=>{window.removeEventListener("keydown",k),window.removeEventListener("keyup",T),window.removeEventListener("blur",C),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(),A.current=!1)},[c,e]),u.useEffect(()=>(c!=="none"?e.doubleClickZoom.disable():e.doubleClickZoom.enable(),()=>{e.doubleClickZoom.enable()}),[c,e]),u.useEffect(()=>{var T;if(!_.CLICK_TOOL_MODES.includes(c))return;const h=e,g=(T=h.handlers??h._handlerManager)==null?void 0:T._handlersById,E=[g==null?void 0:g.mapEvent,g==null?void 0:g.mousePan].filter(C=>typeof(C==null?void 0:C._clickTolerance)=="number"),k=E.map(C=>C._clickTolerance);for(const C of E)C._clickTolerance=_.CLICK_SLOP_PX;return()=>E.forEach((C,l)=>{C._clickTolerance=k[l]})},[c,e]),u.useEffect(()=>(c!=="none"?e.boxZoom.disable():e.boxZoom.enable(),()=>{e.boxZoom.enable()}),[c,e]),u.useEffect(()=>()=>{R.current&&clearTimeout(R.current),O.current&&O.current.abort()},[]),u.useEffect(()=>{const h=l=>l.metaKey||l.ctrlKey||l.altKey,g=l=>{if(!h(l.originalEvent)&&!K.current){if(c==="draw-freehand"){A.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,M.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,M.current={x:l.point.x,y:l.point.y};return}}},E=l=>{if(c==="draw-freehand"&&A.current){A.current=!1;const j=e.getZoom(),b=156543.03392*Math.cos(l.lngLat.lat*Math.PI/180)/Math.pow(2,j),P=sr*b/111320;n.getState().commitFreehand(P),at();return}if(!N.current)return;N.current=!1,e.dragPan.enable();const S=M.current,p=S?Math.hypot(l.point.x-S.x,l.point.y-S.y):0;M.current=null;const v=n.getState();if(c==="draw-rect"){const j=v.rectCorner;if(!j)return;if(p<Kt){n.setState({rectCorner:null});return}const b=v.snappedCoord??[l.lngLat.lng,l.lngLat.lat],P=I.current||l.originalEvent.shiftKey;v.commitRect(j,b,{},P),at();return}if(c==="draw-circle"){const j=v.circleCenter;if(!j)return;let b;if(p<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]-j[0],U=b[1]-j[1];Math.hypot(P,U)>=1e-6&&(v.commitCircle(j,b,{}),at());return}},k=l=>{const S=n.getState();if(c==="draw-freehand"&&A.current){S.addFreehandPoint([l.lngLat.lng,l.lngLat.lat]);return}if(c==="draw-route"&&y.current.length>0){const p=[l.lngLat.lng,l.lngLat.lat];S.setRouteCursorPos(p),S.setRouteCursorPreview(null),R.current&&clearTimeout(R.current),O.current&&O.current.abort();const v=y.current[y.current.length-1];R.current=setTimeout(async()=>{const j=new AbortController;O.current=j;try{if(!i.current)return;const b=await le.fetchRoute([v,p],{...i.current,signal:j.signal});j.signal.aborted||n.getState().setRouteCursorPreview(b)}catch{}},400)}if((c==="draw-polygon"||c==="cut-hole")&&S.polygonInProgress.length>=3){const p=S.polygonInProgress[0],v=e.project(p),j=Math.hypot(l.point.x-v.x,l.point.y-v.y);e.getCanvas().style.cursor=j<=48?"pointer":"crosshair"}},T=l=>{const S=D.click(l.originalEvent);if(h(l.originalEvent)||or()||K.current||dn())return;const p=n.getState();if(c==="measure"){if(S||nr())return;p.selectedMeasurementId&&p.setSelectedMeasurementId(null);const b=p.snappedCoord??[l.lngLat.lng,l.lngLat.lat];p.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 j=p.snappedCoord??[l.lngLat.lng,l.lngLat.lat];if(c==="place-point"){if(S)return;p.commitPoint(j);return}if(c==="draw-line"||c==="draw-polygon"||c==="draw-route"||c==="cut-hole"||c==="slice-shape"){let b=j;if(I.current||l.originalEvent.shiftKey){const P=c==="draw-line"||c==="slice-shape"?p.lineInProgress:p.polygonInProgress;P.length>=1&&(b=tt(e,P[P.length-1],b))}if((c==="draw-polygon"||c==="cut-hole")&&p.polygonInProgress.length>=2){const P=p.polygonInProgress[0],U=e.project(P);if(Math.hypot(l.point.x-U.x,l.point.y-U.y)<=48){c==="draw-polygon"?p.commitPolygon({}):p.commitCutHole();return}}if(S)return;if(c==="draw-line"||c==="slice-shape")p.addLineVertex(b);else if(c==="draw-polygon"||c==="cut-hole")p.addPolygonVertex(b);else if(c==="draw-route"){w.current={waypoints:[...y.current],preview:p.routePreview},R.current&&(clearTimeout(R.current),R.current=null),O.current&&(O.current.abort(),O.current=null),p.setRouteCursorPos(null),p.setRouteCursorPreview(null),p.addRouteWaypoint(b);const P=[...y.current,b];Z(P)}return}},C=()=>{if(!D.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",k),e.on("click",T),e.on("dblclick",C),()=>{e.off("mousedown",g),e.off("mouseup",E),e.off("mousemove",k),e.off("click",T),e.off("dblclick",C)}},[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 ir(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"}}),Ie(e,gn))}function cr(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 R=[...y,w];f.push({type:"Feature",properties:{},geometry:{type:"LineString",coordinates:R}}),y.forEach((O,A)=>{f.push({type:"Feature",properties:{_isFirst:A===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 R=[...y,w,y[0]];y.length>=2?f.push({type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[R]}}):f.push({type:"Feature",properties:{},geometry:{type:"LineString",coordinates:R}}),y.forEach((O,A)=>{f.push({type:"Feature",properties:{_isFirst:A===0},geometry:{type:"Point",coordinates:O}})})}if(c.editingMode==="draw-circle"){const y=c.circleCenter;if(!y)return Ce(e,[]);const w=x??y,R=_.makeCircleCoords(y,w,s.current,64);f.push({type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[R]}}),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,R=_.makeRectCoords(y,w,s.current,a.current);f.push({type:"Feature",properties:{},geometry:{type:"Polygon",coordinates:[R]}})}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 R=c.routeCursorPreview??(x?[y[y.length-1],x]:null);R&&R.length>=2&&f.push({type:"Feature",properties:{},geometry:{type:"LineString",coordinates:R}}),y.forEach((O,A)=>{f.push({type:"Feature",properties:{_isFirst:A===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 ar(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=ar(e,t[r],t[r+1]);o<n&&(n=o)}return n}function lr(e,t){if(!_.isMultiGeometry(e))return null;const n=_.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=_.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=_.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 R=e.project(t);x({x:R.x,y:R.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,R;(w=f.current)==null||w.focus(),(R=f.current)==null||R.select()},[]);function y(){const w=parseFloat(s),R=parseFloat(a);if(isNaN(w)||isNaN(R)){o({type:"warning",message:"Invalid coordinates"});return}n([w,R]),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}=_.placeBox(e,t,ae.offsetWidth,ae.offsetHeight,{x:"center",y:"before",gapY:12});ae.style.left=n+"px",ae.style.top=r+"px"}function ur(){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 dr(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=ur();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 _.isMultiGeometry(e)?t==null?null:_.getPartGeometry(e,t):e}function Ye(e,t,n){return _.isMultiGeometry(e)&&t!=null?_.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 fr(){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 gr(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),[R,O]=u.useState(null),A=u.useCallback(()=>O(null),[]),[I,N]=u.useState(null);u.useEffect(()=>{f(new Set),O(null),N(null)},[t.id,d]);const M=u.useRef(n);u.useEffect(()=>{n!==M.current&&(M.current=n,!(!n||n.length===0)&&f(m=>{const F=new Set(m);for(const $ of n)F.add(`0:${$}`);for(const $ of n){const H=w.current.get(`0:${$}`);H&&dt(H,!0)}return F}))},[n]);function D(m){vt(e,new Map([[t.id,m]]))}function K(m){const F=Ye(t.geometry,d,m);r.getState().updateFeature(t.id,_.vertexEditPatch(t,F))}const Z=u.useRef(!1);u.useEffect(()=>{const m=F=>{Z.current=F.metaKey||F.ctrlKey};return window.addEventListener("keydown",m),window.addEventListener("keyup",m),()=>{window.removeEventListener("keydown",m),window.removeEventListener("keyup",m)}},[]);function h(){fr(),c.current.forEach(H=>H.remove()),c.current=[],w.current=new Map,g.current=[],E.current=null,k.current=!1;const m=_e(t.geometry,d);if(!m)return;const F=ze(m),$=y.current;C.current=!1,F.forEach((H,z)=>{const V=m.type==="Polygon"?H.slice(0,-1):H,te=Vt(e,V,W=>$.has(`${z}:${W}`));te.capped&&(C.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 ke.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,k.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);D(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(_.commitTopoMove(Q.features,t.id,ce,ee))}be(!1),k.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(gr(V[ie],V[(ie+1)%V.length]));const se=Vt(e,ne,()=>!1);se.capped&&(C.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 ke.Marker({element:q,draggable:!0}).setLngLat(ce).addTo(e);let ee=!1;Y.on("dragstart",()=>{ee=!0,k.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);D(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(_.commitTopoInsert(Pe.features,t.id,oe,J,de))}setTimeout(()=>{ee=!1},50),be(!1),k.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(_.commitTopoInsert(ue.features,t.id,oe,J,ce))}}),c.current.push(Y)}}})}const g=u.useRef([]),E=u.useRef(null),k=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},F=H=>{if(k.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;!k.current&&!(z instanceof Node&&e.getContainer().contains(z))&&m(null)};return e.on("mousemove",F),e.on("mouseout",$),()=>{e.off("mousemove",F),e.off("mouseout",$)}},[e]);const T=u.useRef(()=>{});T.current=m=>{var ee,re;const F=m.originalEvent;if(k.current||F.button!==0||F.shiftKey||(re=(ee=F.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,kt=He*He+Ve*Ve,It=kt?Math.max(0,Math.min(1,((m.point.x-he.x)*He+(m.point.y-he.y)*Ve)/kt)):0,Ft=(he.x+It*He-m.point.x)**2+(he.y+It*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(()=>{D(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,k.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(_.commitTopoInsert(Q.features,t.id,ne,se,oe))}be(!1),k.current=!1}};e.on("mousemove",q),window.addEventListener("mouseup",Y)},u.useEffect(()=>{const m=F=>T.current(F);return e.on("mousedown",m),()=>{e.off("mousedown",m)}},[e]);const C=u.useRef(!1),l=u.useRef(h);l.current=h,u.useEffect(()=>{const m=()=>{C.current&&l.current()};return e.on("moveend",m),()=>{e.off("moveend",m)}},[e]),u.useEffect(()=>(h(),()=>{c.current.forEach(m=>m.remove()),c.current=[],w.current=new Map}),[t,e,a,d]);function S(m,F){const $=_e(t.geometry,d);if(!$)return;const H=yr($,m,F);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][F];if(r.getState().takeSnapshot(),K(H),f(new Set),$.type==="Polygon"&&o.getState().topoEditEnabled){const V=r.getState();V.updateFeatures(_.commitTopoDelete(V.features,t.id,[z]))}}function p(){const m=y.current;if(m.size===0)return;const F=_e(t.geometry,d);if(!F)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(F.type==="LineString"){const H=F.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(F.type==="MultiPoint"){const H=F.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(F.type==="Polygon"){const H=F.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(_.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 F=new Map;for(const q of y.current){const[Y,ee]=q.split(":"),re=Number(Y),Q=Number(ee),de=F.get(re)??[];de.push(Q),F.set(re,de)}if(F.size!==1){s({type:"warning",message:"Selection must stay within one ring/line to simplify"});return}const[$,H]=Array.from(F.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=_.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(F){if(F.key!=="Delete"&&F.key!=="Backspace")return;const $=F.target;$&&($.tagName==="INPUT"||$.tagName==="TEXTAREA"||$.isContentEditable)||i(F)&&(F.preventDefault(),F.stopPropagation(),p())}return window.addEventListener("keydown",m,{capture:!0}),()=>window.removeEventListener("keydown",m,{capture:!0})},[x]);const j=x.size>0,b=R&&(()=>{const m=`${R.ringIdx}:${R.vertIdx}`,F=x.has(m)&&x.size>1;return B.jsx(L.ContextMenu,{x:R.x,y:R.y,onClose:A,items:[{label:"Edit coordinates…",icon:B.jsx(_t.Crosshair,{size:16}),onClick:()=>N({ringIdx:R.ringIdx,vertIdx:R.vertIdx})},{separator:!0},{label:F?`Delete ${x.size} points`:"Delete point",icon:B.jsx(_t.Trash,{size:16}),onClick:()=>F?p():S(R.ringIdx,R.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 F=r.getState();F.updateFeatures(_.commitTopoMove(F.features,t.id,U,m))}},onClose:()=>N(null)},`${I.ringIdx}:${I.vertIdx}`);return B.jsxs(B.Fragment,{children:[b,X,j&&B.jsx(L.VertexSelectionBar,{mapContainer:e.getContainer(),count:x.size,onSimplify:v,onDelete:p})]})}function ft(e,t,n,r){if(e.type==="Point")return{type:"Point",coordinates:_.withXY(e.coordinates,r)};if(e.type==="MultiPoint"){const o=[...e.coordinates];return o[n]=_.withXY(o[n],r),{type:"MultiPoint",coordinates:o}}if(e.type==="LineString"){const o=[...e.coordinates];return o[n]=_.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]=_.withXY(a[n],r),n===0&&(a[a.length-1]=a[0]),a})}:e}function yr(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,_.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,_.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 pr(e,t,n){if(!n)return[t[0]-e[0],t[1]-e[1]];const r=_.project(e),o=_.project(t);return[o[0]-r[0],o[1]-r[1]]}function We(e,t,n){return _.offsetGeometry({type:"MultiPoint",coordinates:e},t,n).coordinates}function hr(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 mr=3,vr=8;function Ze(e){const t=pe.featureCollection(e),[n,r,o,s]=Qt.bbox(t),i=(n+o)/2,a=Er(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=_.toRadians(n),i=Math.cos(s),a=Math.sin(s),d=_.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 xr(e,t,n,r,o){const[s,i]=t,a=_.toRadians(o),d=Math.cos(a),c=Math.sin(a),x=_.getMercatorLatCorrectionRatio(i);return e.map(([f,y])=>{const w=(f-s)*x,R=y-i,O=w*d+R*c,A=-w*c+R*d,I=O*n,N=A*r,M=I*d-N*c,D=I*c+N*d;return[s+M/x,i+D]})}function Sr(e,t,n,r){const o=_.project(t),s=_.toRadians(r),i=Math.cos(s),a=Math.sin(s);function d(c){const x=_.project(c),f=x[0]-o[0],y=x[1]-o[1],w=f*i+y*a,R=-f*a+y*i,O=w*n,A=R*n,I=O*i-A*a,N=O*a+A*i;return _.unproject([o[0]+I,o[1]+N])}return{...e,geometry:_.mapPositions(e.geometry,d)}}function wr(e,t,n,r){const o=_.project(t),s=_.toRadians(r),i=Math.cos(s),a=Math.sin(s);return e.map(d=>{const c=_.project(d),x=c[0]-o[0],f=c[1]-o[1],y=x*i+f*a,w=-x*a+f*i,R=y*n,O=w*n,A=R*i-O*a,I=R*a+O*i;return _.unproject([o[0]+A,o[1]+I])})}function br(e,t,n,r,o){const[s,i]=t,a=_.toRadians(o),d=Math.cos(a),c=Math.sin(a),x=_.getMercatorLatCorrectionRatio(i);function f(y){const w=(y[0]-s)*x,R=y[1]-i,O=w*d+R*c,A=-w*c+R*d,I=O*n,N=A*r,M=I*d-N*c,D=I*c+N*d;return[s+M/x,i+D]}return{...e,geometry:_.mapPositions(e.geometry,f)}}function Er(e,t){return _.unproject([0,(_.project([0,e])[1]+_.project([0,t])[1])/2])[1]}function Lr(e,t,n,r){const o=r?e.initialBbox.center:e.origin,s=Math.cos(_.toRadians(e.rotationAngle)),i=Math.sin(_.toRadians(e.rotationAngle));let a;if(n){const A=_.project(o);a=I=>{const N=_.project(I),M=N[0]-A[0],D=N[1]-A[1];return[M*s+D*i,-M*i+D*s]}}else{const A=_.getMercatorLatCorrectionRatio(o[1]);a=I=>{const N=(I[0]-o[0])*A,M=I[1]-o[1];return[N*s+M*i,-N*i+M*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,R=A=>Math.abs(A)<.01?A<0?-.01:.01:A,O=(A,I)=>Math.abs(I)>1e-9?A/I:1;if(n){let A;if(y)A=O(f,c);else if(w)A=O(x,d);else{const I=d*d+c*c;A=I>1e-18?(x*d+f*c)/I:1}return{origin:o,uniform:!0,factor:R(A)}}return{origin:o,uniform:!1,scaleX:w||!y?R(O(x,d)):1,scaleY:y||!w?R(O(f,c)):1}}function Pr(e,t,n,r){const o=n.uniform?s=>wr(s,n.origin,n.factor,r):s=>xr(s,n.origin,n.scaleX,n.scaleY,r);return{features:e.map(s=>n.uniform?Sr(s,n.origin,n.factor,r):br(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 Cr(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:${Cr(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(h=>h.selectedIds),s=L.useUIStore(h=>h.transformActive),i=L.useUIStore(h=>h.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),R=u.useRef(null),O=u.useRef([]);function A(){O.current.forEach(h=>h.remove()),O.current=[]}function I(h){const g=new Map;for(const E of h)g.set(String(E.id??""),E.geometry);vt(e,g)}function N(h){const g=O.current;if(g.length===9){for(let E=0;E<4;E++)g[E].setLngLat(h.corners[E]);for(let E=0;E<4;E++)g[4+E].setLngLat(h.edges[E]);g[8].setLngLat(h.rotateHandle)}}const M=u.useRef(null);u.useEffect(()=>{if(!s||t.length===0)return;A();const h=x.current??Ze(t),g=["nw","ne","se","sw"],E=["n","e","s","w"],k=[];h.corners.forEach((T,C)=>{const l=yt(g[C]),S=new ke.Marker({element:l,draggable:!1}).setLngLat(T).addTo(e);l.addEventListener("mousedown",p=>K(p,C,!1)),k.push(S)}),h.edges.forEach((T,C)=>{const l=yt(E[C]),S=new ke.Marker({element:l,draggable:!1}).setLngLat(T).addTo(e);l.addEventListener("mousedown",p=>K(p,C,!0)),k.push(S)});{const T=yt("rotate"),C=new ke.Marker({element:T,anchor:"bottom",draggable:!1}).setLngLat(h.rotateHandle).addTo(e);T.addEventListener("mousedown",l=>Z(l)),k.push(C)}return O.current=k,()=>{A()}},[s,y,d,e]),u.useEffect(()=>{function h(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(C);let E=null;function k(b){M.current&&(b.preventDefault(),E={clientX:b.clientX,clientY:b.clientY},g.schedule(b))}function T(b){var P;b.key!=="Shift"&&b.key!=="Alt"||((P=M.current)==null?void 0:P.type)!=="scale"||!E||(b.preventDefault(),g.schedule({...E,shiftKey:b.shiftKey,altKey:b.altKey}))}function C(b){const P=M.current;if(!P)return;const[U,X]=h(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)<mr)return;P.moving=!0,i(!0)}const m=G==="visual",F=pr(P.startLngLat,[U,X],m),$=P.initialFeatures.map(V=>({...V,geometry:_.offsetGeometry(V.geometry,F,m)})),H=P.initialBbox,z={corners:We(H.corners,F,m),edges:We(H.edges,F,m),center:We([H.center],F,m)[0],rotateHandle:We([H.rotateHandle],F,m)[0]};w.current=$,R.current=z,I($),N(z)}else if(P.type==="rotate"){const m=P.center,F=_.getMercatorLatCorrectionRatio(m[1]),$=X-m[1],H=G==="visual"?(U-m[0])*F:U-m[0],V=(Math.atan2($,H)-P.initialAngle)*(180/Math.PI),te=P.initialFeatures.map(ne=>G==="visual"?_.applyVisualTransform(ne,m,1,1,V):Un.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,R.current=W,I(te),N(W)}else if(P.type==="scale"){const m=P.rotationAngle,F=Lr({initialBbox:P.initialBbox,origin:P.origin,startLngLat:P.startLngLat,edgeIndex:P.edgeIndex,rotationAngle:m},[U,X],b.shiftKey,b.altKey),$=Pr(P.initialFeatures,P.initialBbox,F,m);w.current=$.features,R.current=$.box,I($.features),N($.box)}}function l(){g.flush();const b=M.current;if(!b)return;const P=w.current,U=R.current,X=b.type==="rotate";if(M.current=null,E=null,w.current=null,R.current=null,e.dragPan.enable(),i(!1),b.type==="move"&&P){const G=e.getContainer(),m=F=>F.stopPropagation();G.addEventListener("click",m,!0),setTimeout(()=>G.removeEventListener("click",m,!0),0)}if(P&&(n.getState().takeSnapshot(),n.getState().updateFeatures(_.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],F=_.getMercatorLatCorrectionRatio(G[1]),$=(m[0]-G[0])*F,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]=h(b),F=U?X.edges[(P+2)%4]:X.corners[(P+2)%4];M.current={type:"scale",initialFeatures:structuredClone(a.current),initialBbox:X,rotationAngle:f.current,origin:F,startLngLat:[G,m],edgeIndex:U?P:void 0},i(!0)}function p(b){b.preventDefault(),b.stopPropagation(),e.dragPan.disable();const P=x.current??Ze(a.current),U=P.center,[X,G]=h(b),m=n.getState().geometryMode,F=_.getMercatorLatCorrectionRatio(U[1]),$=G-U[1],H=m==="visual"?(X-U[0])*F:X-U[0];M.current={type:"rotate",initialFeatures:structuredClone(a.current),initialBbox:P,rotationAngle:f.current,center:U,initialAngle:Math.atan2($,H)},i(!0)}function v(b){if(M.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};hr(m,X.corners.map(F=>e.project(F)),vr)&&(b.preventDefault(),b.stopPropagation(),e.dragPan.disable(),M.current={type:"move",initialFeatures:structuredClone(U),initialBbox:X,rotationAngle:f.current,startLngLat:h(b),startPoint:m,moving:!1})}const j=e.getContainer();return j.addEventListener("mousedown",v,!0),D.current.handleScaleStart=S,D.current.handleRotateStart=p,document.addEventListener("mousemove",k),document.addEventListener("mouseup",l),document.addEventListener("keydown",T),document.addEventListener("keyup",T),()=>{g.cancel(),j.removeEventListener("mousedown",v,!0),document.removeEventListener("mousemove",k),document.removeEventListener("mouseup",l),document.removeEventListener("keydown",T),document.removeEventListener("keyup",T)}},[e,n,r,i]);const D=u.useRef({handleScaleStart:()=>{},handleRotateStart:()=>{}});function K(h,g,E){D.current.handleScaleStart(h,g,E)}function Z(h){D.current.handleRotateStart(h)}return null}function Mr({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 Rr([e,t,n,r],o,s,i,a){return e>=o&&n<=i&&t>=s&&r<=a}function kr(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=R=>{if(!R.shiftKey||x.current||c.current)return;const O=d.current;if(!O&&a.current!=="none")return;R.preventDefault(),e.dragPan.disable(),e.boxZoom.disable();const A=R.clientX,I=R.clientY,N=y.getBoundingClientRect(),M=[...n.getState().selectedIds],D=document.createElement("div");D.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(D);let K=!1,Z=0;function h(l){const S=Math.min(A,l.clientX)-N.left,p=Math.min(I,l.clientY)-N.top,v=Math.max(A,l.clientX)-N.left,j=Math.max(I,l.clientY)-N.top,b=e.unproject([S,p]),P=e.unproject([v,j]);return{boxW:b.lng,boxE:P.lng,boxN:b.lat,boxS:P.lat,overlayX:S,overlayY:p,overlayW:v-S,overlayH:j-p}}function g(l){const{boxW:S,boxE:p,boxN:v,boxS:j}=h(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,j],[p,j],[p,v],[S,v],[S,j]]]}},G=[];for(const m of U){if(m.geometry.type==="Point"){const[te,W]=m.geometry.coordinates;te>=S&&te<=p&&W>=j&&W<=v&&G.push(m.id);continue}const F=m.bbox??le.getGeometryBBox(m.geometry),[$,H,z,V]=F;if(z>=S&&$<=p&&V>=j&&H<=v){if(Rr(F,S,j,p,v)){G.push(m.id);continue}try{$n(X,m)&&G.push(m.id)}catch{G.push(m.id)}}}return G}function E(l){const S=new Set(M);l.forEach(j=>S.add(j));const p=Array.from(S),v=n.getState();kr(v.selectedIds,p)&&v.selectedGroupId===null||v.setSelection(p)}function k(l){const S=n.getState().selectedIds[0];if(!S)return null;const p=n.getState().features.find(G=>G.id===S);if(!p)return null;let v;if(p.geometry.type==="LineString")v=p.geometry.coordinates;else if(p.geometry.type==="Polygon")v=p.geometry.coordinates[0].slice(0,-1);else return null;const{boxW:j,boxE:b,boxN:P,boxS:U}=h(l),X=[];for(let G=0;G<v.length;G++){const[m,F]=v[G];m>=j&&m<=b&&F>=U&&F<=P&&X.push(G)}return{id:S,indices:X}}const T=l=>{const S=Math.abs(l.clientX-A),p=Math.abs(l.clientY-I);if(!K&&S<5&&p<5)return;K=!0;const{overlayX:v,overlayY:j,overlayW:b,overlayH:P}=h(l);D.style.left=`${v}px`,D.style.top=`${j}px`,D.style.width=`${b}px`,D.style.height=`${P}px`,!O&&Date.now()-Z>30&&(E(g(l)),Z=Date.now())},C=l=>{if(D.remove(),e.dragPan.enable(),e.boxZoom.enable(),window.removeEventListener("mousemove",T),window.removeEventListener("mouseup",C),!K)return;if(O){const p=k(l);p&&p.indices.length>0&&t&&t(p.id,p.indices);return}const S=g(l);if(E(S),S.length===0&&M.length===1&&t){const p=n.getState().features.find(v=>v.id===M[0]);if(p&&(p.geometry.type==="LineString"||p.geometry.type==="Polygon")){const v=k(l);v&&v.indices.length>0&&t(v.id,v.indices)}}};window.addEventListener("mousemove",T),window.addEventListener("mouseup",C)};return f.addEventListener("mousedown",w),()=>f.removeEventListener("mousedown",w)},[e,n,t]),null}function Ir(e){return e&&"style"in e?e:null}function Fr(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=Ir(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 _r(){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 jr(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}}),Ie(e,bn))}function Ar(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,p=_.vertexEditNotice(S);p&&r({type:"warning",message:p})},[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(p=>p.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,R]=u.useState(null),[O,A]=u.useState(null),[I,N]=u.useState(null);u.useEffect(()=>{!i&&I&&N(null)},[i,I]);const M=Fr(c),D=Ne.useContextMenu();u.useEffect(()=>{if(c)return;const l=e.getCanvasContainer(),S=p=>{var F,$;p.preventDefault();const v=l.getBoundingClientRect(),j=[p.clientX-v.left,p.clientY-v.top],b=je(e,j,Fe);if(b.length===0)return;const P=String(b[0].id??((F=b[0].properties)==null?void 0:F.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";D.open(p.clientX,p.clientY,{feature:X,requestPreciseCoords:m?()=>A(P):void 0})};return l.addEventListener("contextmenu",S),()=>{l.removeEventListener("contextmenu",S)}},[c,t,e,D]),u.useEffect(()=>{const l=d!=="none",S=(j=!0)=>{ct(e,null,f.current),f.current=null,j&&ut(e,null),Je(),M.leave(l?void 0:"")},p=j=>{var X,G;if(e.dragPan.isActive()||(X=y.current)!=null&&X.dragging)return;const b=je(e,j.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?dr(U,n,j.originalEvent):Je(),M.enter(e.getCanvas(),j.originalEvent,l?void 0:"pointer")};e.on("mousemove",p);const v=()=>S();return e.on("mouseout",v),()=>{e.off("mousemove",p),e.off("mouseout",v);try{S(!1)}catch{}}},[d,e,t,n,M]);const K=u.useRef(o);u.useEffect(()=>{const l=K.current;if(K.current=o,o.length<=l.length)return;const p=e.getCanvas().getBoundingClientRect(),v=_r();if(v.x<p.left||v.x>p.right||v.y<p.top||v.y>p.bottom)return;const j=new Set(l.map(m=>m.id)),b=new Set(o.filter(m=>!j.has(m.id)).map(m=>m.id)),P=[v.x-p.left,v.y-p.top],U=()=>{var m;try{const F=e.unproject(P),$=je(e,e.project(F),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(F),lngLat:F,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 p=je(e,S.point,Fe),v=t.getState();if(p.length===0){i?n.getState().setVertexEditActive(!1):v.clearSelection();return}const j=p[0],b=String(j.id??((P=j.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 p=je(e,S.point,Fe);if(p.length===0)return;S.preventDefault();const v=String(p[0].id??((b=p[0].properties)==null?void 0:b.id)??"");if(!v)return;const j=t.getState().features.find(U=>U.id===v);if(j){if(((P=j.properties)==null?void 0:P._isText)==="true"){t.getState().selectFeature(v),R(v);return}if(t.getState().selectFeature(v),_.isMultiGeometry(j.geometry)){const U=lr(j.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",p=v=>{var oe;if(v.originalEvent.shiftKey)return;const j=v.originalEvent.altKey,b=v.originalEvent.ctrlKey||v.originalEvent.metaKey;if(S&&!j&&!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&&!j&&!b)return;X.selectedIds.includes(U)||X.selectFeature(U);const m=t.getState().selectedIds,F=m.includes(U)?m:[U],$=new Map(F.flatMap(J=>{const ce=X.features.find(q=>q.id===J);return ce?[[J,ce.geometry]]:[]})),H=j,z=X.geometryMode,V=[v.lngLat.lng,v.lngLat.lat],te=z==="visual"?_.project(V):V;e.dragPan.disable(),y.current={featureIds:F,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=_.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,_.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(M.leave(ce),e.getCanvas().style.cursor=ce,ct(e,null,f.current),f.current=null,be(!1),rr(),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",p),()=>{e.off("mousedown",p)}},[c,d,i,t,n,e,M]);const Z=s.length===1?o.find(l=>l.id===s[0])??null:null,h=o.filter(l=>s.includes(l.id)),g=D.state&&B.jsx(L.FeatureMapContextMenu,{x:D.state.x,y:D.state.y,data:D.state.data,onClose:D.close}),E=w?o.find(l=>l.id===w)??null:null,k=E&&B.jsx(Mr,{map:e,feature:E,onDone:()=>R(null)}),T=O?o.find(l=>l.id===O)??null:null,C=T&&T.geometry.type==="Point"&&B.jsx(pn,{map:e,coords:T.geometry.coordinates,onSave:l=>{t.getState().takeSnapshot(),t.getState().updateFeature(T.id,{geometry:{type:"Point",coordinates:_.withXY(T.geometry.coordinates,l)}})},onClose:()=>A(null)});return c||d!=="none"?B.jsxs(B.Fragment,{children:[g,k,C]}):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&&h.length>=1&&B.jsx(Sn,{map:e,features:h}),g,k,C]})}const Ee="elm-snap",Ln=[["elm-snap-vertex","circle-color",e=>e[500]]];function Dr(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}}),Ie(e,Ln))}function Tr(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 A=O.originalEvent;if(A.metaKey||A.ctrlKey){c();return}const I=A.target;if((K=I==null?void 0:I.closest)!=null&&K.call(I,".elm-midpoint-marker")){c();return}const N=bt(),M=wt(O.lngLat.lng,O.lngLat.lat,e,s,15,new Set(N?[N]:[]));if(!M){c();return}if(i&&M.isVertex){const Z=new Set(n.getState().selectedIds);if(M.featureId&&Z.has(M.featureId)){c();return}}t.getState().setSnappedCoord(M.lnglat);const D=e.getSource(Ee);D==null||D.setData({type:"FeatureCollection",features:[{type:"Feature",properties:{_kind:M.isVertex?"vertex":"edge"},geometry:{type:"Point",coordinates:M.lnglat}}]})}),y=O=>f.schedule(O),w=()=>f.flush(),R=()=>{f.cancel(),c()};return e.on("mousemove",y),e.on("mouseout",R),window.addEventListener("pointerdown",w,!0),window.addEventListener("pointerup",w,!0),()=>{f.cancel(),e.off("mousemove",y),e.off("mouseout",R),window.removeEventListener("pointerdown",w,!0),window.removeEventListener("pointerup",w,!0)}},[r,o,s,i,e,t,n,a]),null}function Or({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:_.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:_.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 Kr(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]]]}}),Ie(e,Rn))}function Br(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 kn({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(!_.canProcessShape(r.type)){a.setData({type:"FeatureCollection",features:[]});return}const c=n==="buffer-shape",x=c&&!o&&i&&_.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 In(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 Nr(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 Ur(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 $r(e,t){const n=e.getSource(ge);n&&n.setData({type:"FeatureCollection",features:t})}let ye=null;function Gr(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 Hr(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 ke.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 Vr=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(h=>h.editingMode),r=L.useUIStore(h=>h.measurePoints),o=L.useUIStore(h=>h.measureMode),s=L.useUIStore(h=>h.completedMeasurements),i=L.useUIStore(h=>h.selectedMeasurementId),a=L.useUIStore(h=>h.snappedCoord),d=L.useUIStore(h=>h.toggleMeasurementSelection),c=L.useUIStore(h=>h.setSelectedMeasurementId),x=In(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},[R,O]=u.useState(null),A=n==="measure",I=A?a??x:null,N=r.length>0?r[r.length-1]:null;u.useEffect(()=>{const h=[];for(const g of s){const E=R===g.id,k=i===g.id;if(g.mode==="distance"){for(let C=0;C<g.points.length-1;C++)h.push({type:"Feature",properties:{_kind:"segment",_id:g.id,_segIdx:C,_hovered:E,_selected:k},geometry:{type:"LineString",coordinates:[g.points[C],g.points[C+1]]}});g.points.forEach((C,l)=>{h.push({type:"Feature",properties:{_kind:"dot",_id:g.id,_isFirst:l===0},geometry:{type:"Point",coordinates:C}})})}else h.push({type:"Feature",properties:{_kind:"area",_id:g.id,_hovered:E,_selected:k},geometry:{type:"Polygon",coordinates:[g.points]}}),h.push({type:"Feature",properties:{_kind:"segment",_id:g.id,_hovered:E,_selected:k},geometry:{type:"LineString",coordinates:g.points}}),g.points.slice(0,-1).forEach((C,l)=>{h.push({type:"Feature",properties:{_kind:"dot",_id:g.id,_isFirst:l===0},geometry:{type:"Point",coordinates:C}})})}A&&r.length>=2&&h.push({type:"Feature",properties:{_kind:"live-line"},geometry:{type:"LineString",coordinates:r}}),A&&o==="area"&&r.length>=3&&h.push({type:"Feature",properties:{_kind:"live-area"},geometry:{type:"Polygon",coordinates:[[...r,r[0]]]}}),A&&I&&N&&h.push({type:"Feature",properties:{_kind:"ghost"},geometry:{type:"LineString",coordinates:[N,I]}}),A&&o==="area"&&I&&r.length>=2&&h.push({type:"Feature",properties:{_kind:"close-hint"},geometry:{type:"LineString",coordinates:[I,r[0]]}}),A&&r.forEach((g,E)=>{h.push({type:"Feature",properties:{_kind:"live-dot",_isFirst:E===0},geometry:{type:"Point",coordinates:g}})}),$r(e,h)},[e,A,r,o,s,R,i,I,N,t]),u.useEffect(()=>{const h=C=>{var p,v;const l=(p=C.features)==null?void 0:p[0];if(!l)return;const S=(v=l.properties)==null?void 0:v._id;S&&(tr(),C.originalEvent.stopPropagation(),d(S))},g=C=>{var j,b,P,U;const l=(j=C.features)==null?void 0:j[0];if(!l)return;const S=(b=l.properties)==null?void 0:b._id;if(!S)return;O(S);const p=(P=l.properties)==null?void 0:P._kind,v=(U=l.properties)==null?void 0:U._segIdx;if(p==="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 F=le.formatLength(Me.length(pe.lineString([G,m]))*1e3,y);Gr(`${F.value} ${F.unit}`,C.originalEvent.clientX,C.originalEvent.clientY)}}}},E=C=>{var p,v;const l=(p=C.features)==null?void 0:p[0];if(!l)return;((v=l.properties)==null?void 0:v._kind)==="segment"&&Fn(C.originalEvent.clientX,C.originalEvent.clientY)},k=()=>{O(null),Wt()},T=C=>{try{e.queryRenderedFeatures(C.point,{layers:pt}).length===0&&c(null)}catch{}};for(const C of pt)e.on("click",C,h),e.on("mouseenter",C,g),e.on("mousemove",C,E),e.on("mouseleave",C,k);return e.on("click",T),()=>{for(const C of pt)e.off("click",C,h),e.off("mouseenter",C,g),e.off("mousemove",C,E),e.off("mouseleave",C,k);e.off("click",T),Wt()}},[e,d,c,s,y.unit,y.display,y.precision]);const M=o==="distance"?1:2,D=I&&r.length>=M?[...r,I]:r,K=Hr(D,o,y,w),Z=I??N;return B.jsxs(B.Fragment,{children:[s.map(h=>B.jsx(Vr,{map:e,m:h},h.id)),K&&Z&&B.jsx(_n,{map:e,position:Z,parts:K})]})}const Re="elm-osm-trace";let Zt=!1;function Xr(){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 Yr(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 zr(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 qr(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:_.OSM_PICK_OVERLAY_COLORS[i%_.OSM_PICK_OVERLAY_COLORS.length],_hovered:n===i,_idx:i},geometry:s.geometry}));r.setData({type:"FeatureCollection",features:o})}const Wr=new Set(["building","landuse","landcover","park","water","aeroway"]);function Zr(e,t){const n=[],r=new Map;for(const s of e.queryRenderedFeatures([t.x,t.y])){if(!s.sourceLayer||!Wr.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 _.tileCandidates(n,o)}async function Jr(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 _.unionPieces(e.pieces)}return _.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(h=>h.editingMode),[d,c]=u.useState(null),[x,f]=u.useState(null),y=L.useAccentStyle(),w=L.useTheme(),R=u.useRef(null),O=u.useRef(null),A=u.useRef(null),I=u.useRef(null);u.useEffect(()=>()=>{A.current&&(A.current.remove(),A.current=null)},[e]);const N=ot();u.useEffect(()=>{qr(e,d,x)},[e,d,x,N]);const M=u.useCallback(h=>_.addPickedFeature(t.getState(),n.getState(),h),[t,n]),D=u.useCallback(()=>{A.current&&(A.current.remove(),A.current=null)},[]),K=u.useCallback(()=>{c(null),f(null),R.current=null,D(),O.current&&(O.current.abort(),O.current=null)},[D]),Z=u.useCallback(h=>{const g=R.current;if(K(),!("pieces"in h)){M(h);return}if(!g)return;const E=new AbortController;O.current=E,Jr(h,g).then(k=>{E.signal.aborted||(O.current=null,k&&M(k))})},[M,K]);return u.useEffect(()=>{if(!d&&a!=="pick-shape")return;function h(g){g.key==="Escape"&&i(g)&&K()}return window.addEventListener("keydown",h),()=>window.removeEventListener("keydown",h)},[d,a,K,i]),u.useEffect(()=>{if(a!=="pick-shape")return;const h=g=>{if(e.getZoom()<_.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 k=g.lngLat.lng,T=g.lngLat.lat;R.current=[k,T],Xr();const C=document.createElement("div");C.style.cssText="width:64px;height:64px;pointer-events:none;display:flex;align-items:center;justify-content:center;",C.innerHTML=`
|
|
24
|
+
<div class="elm-osm-pulse-ring" style="position:absolute"></div>
|
|
25
|
+
<div class="elm-osm-spinner"></div>
|
|
26
|
+
`,A.current=new ke.Marker({element:C,anchor:"center"}).setLngLat([k,T]).addTo(e);const l=Zr(e,g.point),{overpass:S,fetch:p}=o.current,v=S===!1;(l.length>0||v?Promise.resolve(l):le.fetchOverpassFeatures(T,k,_.overpassRadiusForZoom(e.getZoom()),[k,T],{...S,fetch:p,signal:E.signal})).then(b=>{D(),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"&&(D(),s({type:"error",code:b instanceof le.OverpassError?b.code:"unknown",source:"picker",message:le.overpassErrorMessage(b),cause:b}),K())})};return e.on("click",h),()=>{e.off("click",h)}},[a,e,K,D,Z,s]),u.useEffect(()=>{if(!d||!R.current)return;const h=R.current;let g;function E(){if(!I.current){g=requestAnimationFrame(E);return}const k=e.project(h),T=e.getContainer().getBoundingClientRect();I.current.style.left=`${T.left+k.x+16}px`,I.current.style.top=`${T.top+k.y-8}px`,g=requestAnimationFrame(E)}return g=requestAnimationFrame(E),()=>cancelAnimationFrame(g)},[d,e]),u.useEffect(()=>{if(!d)return;const h=C=>{var v,j;const l=(v=C.features)==null?void 0:v[0];if(!l)return;const S=(j=l.properties)==null?void 0:j._idx;if(typeof S!="number")return;C.originalEvent.stopPropagation();const p=d[S];p&&Z(p)},g=C=>{var p,v;const l=(p=C.features)==null?void 0:p[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)},k=()=>{f(null),E()},T=["elm-osm-trace-fill","elm-osm-trace-line"];for(const C of T)e.on("click",C,h),e.on("mouseenter",C,g),e.on("mouseleave",C,k);return()=>{for(const C of T)e.off("click",C,h),e.off("mouseenter",C,g),e.off("mouseleave",C,k);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((h,g)=>B.jsxs("button",{onClick:()=>Z(h),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:_.OSM_PICK_OVERLAY_COLORS[g%_.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:h.name||`Unnamed ${h.type.toLowerCase()}`}),B.jsx("span",{className:"text-xs text-(--elm-text-subtle,var(--color-gray-400))",children:h.type})]})]},"key"in h?h.key:`${h.osmId}/${g}`))})}),document.body):null}const Jt="elm-features";function Qr(e){Qn(e),ir(e),Dr(e),Kr(e),Nr(e),jr(e),Yr(e),Pn(e,le.readAccentPalette(e.getContainer())[400])}function eo(e){zr(e),Ar(e),er(e),cr(e),Tr(e),Br(e),Ur(e),e.hasImage("elm-snap-diamond")&&e.removeImage("elm-snap-diamond")}function to(e,t){let n,r=!1;const o=()=>{if(r)return;const i=e.getSource(Jt);if(!(i&&i===n)){r=!0;try{Qr(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:k}=le.formatLength(g*1e3,n);return`${E} ${k}`},s=g=>{const{value:E,unit:k}=le.formatArea(g,r);return`${E} ${k}`},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),R=L.useUIStore(g=>g.freehandClosed),O=L.useUIStore(g=>g.routeWaypoints),A=In(e,a,a!=="none"),[I,N]=u.useState(null),M=d??A;u.useEffect(()=>{if(!M){N(null);return}N(e.project(M));const g=()=>N(M?e.project(M):null);return e.on("move",g),e.on("zoom",g),()=>{e.off("move",g),e.off("zoom",g)}},[e,M==null?void 0:M[0],M==null?void 0:M[1]]);const D=u.useRef(null),[K,Z]=u.useState({w:0,h:0});if(u.useLayoutEffect(()=>{const g=D.current;g&&(g.offsetWidth!==K.w||g.offsetHeight!==K.h)&&Z({w:g.offsetWidth,h:g.offsetHeight})}),!i||a==="none"||!M||!I)return null;const h=[];try{if(a==="place-point")h.push({label:"",value:`${M[1].toFixed(6)}, ${M[0].toFixed(6)}`});else if(a==="draw-line"||a==="slice-shape"){const g=[...c,M];if(g.length>=2){const E=pe.lineString(g);h.push({label:"Length",value:o(Me.length(E))}),h.push({label:"Segment length",value:o(we.distance(g[g.length-2],g[g.length-1]))})}h.push({label:"",value:`${M[1].toFixed(6)}, ${M[0].toFixed(6)}`})}else if(a==="draw-polygon"||a==="cut-hole"){const g=[...x,M];if(g.length>=3){const E=[...g,g[0]],k=pe.polygon([E]);h.push({label:"Area",value:s(Qe.area(k))}),h.push({label:"Perimeter",value:o(Me.length(k))});const T=Qt.bbox(k);h.push({label:"Height",value:o(we.distance([T[0],T[1]],[T[0],T[3]]))}),h.push({label:"Width",value:o(we.distance([T[0],T[1]],[T[2],T[1]]))})}else g.length===2&&h.push({label:"Segment length",value:o(we.distance(g[0],g[1]))});h.push({label:"",value:`${M[1].toFixed(6)}, ${M[0].toFixed(6)}`})}else if(a==="draw-circle"){if(f){const g=we.distance(f,M);h.push({label:"Radius",value:o(g)}),h.push({label:"Area",value:s(Math.PI*(g*1e3)*(g*1e3))})}h.push({label:"",value:`${M[1].toFixed(6)}, ${M[0].toFixed(6)}`})}else if(a==="draw-rect"){if(y){const g=we.distance([y[0],y[1]],[M[0],y[1]]),E=we.distance([y[0],y[1]],[y[0],M[1]]),k=g*E*1e6;h.push({label:"Area",value:s(k)}),h.push({label:"Width",value:o(g)}),h.push({label:"Height",value:o(E)})}h.push({label:"",value:`${M[1].toFixed(6)}, ${M[0].toFixed(6)}`})}else if(a==="draw-route"){const g=[...O,M];g.length>=2&&h.push({label:"Straight distance",value:o(we.distance(g[g.length-2],g[g.length-1]))}),h.push({label:"",value:`${M[1].toFixed(6)}, ${M[0].toFixed(6)}`})}else if(a==="draw-freehand"){if(w.length>=3&&R){const g=[...w,w[0]],E=pe.polygon([g]);h.push({label:"Area",value:s(Qe.area(E))}),h.push({label:"Perimeter",value:o(Me.length(E))})}else if(w.length>=2){const g=pe.lineString(w);h.push({label:"Length",value:o(Me.length(g))})}h.push({label:"",value:`${M[1].toFixed(6)}, ${M[0].toFixed(6)}`})}}catch{}return h.length===0?null:Ue.createPortal(B.jsx("div",{ref:D,className:"elm-measurement-tooltip",style:{position:"absolute",..._.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:h.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 no(){const e=u.useContext(Rt);if(!e)throw new Error("useMapLibre must be used inside ElementEditorControls");return e}const ro=()=>u.useContext(Rt);function oo({map:e}){const t=L.useSetMapController();return u.useEffect(()=>{t({flyTo:([n,r],o)=>e.flyTo({center:[r,n],zoom:o,offset:_.visibleCenterOffset(e.getContainer())}),panTo:([n,r])=>e.panTo([r,n],{offset:_.visibleCenterOffset(e.getContainer())}),fitBounds:n=>{const r=_.normalizeFitBoundsTarget(n);r&&e.fitBounds([[r.minLng,r.minLat],[r.maxLng,r.maxLat]],{padding:_.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 so=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(oo,{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(kn,{map:r}),B.jsx(jn,{map:r}),B.jsx(Dn,{map:r}),B.jsx(An,{map:r}),B.jsx(Cn,{map:r})]}),t.children]})}),io=u.forwardRef(function(t,n){const[r,o]=u.useState(()=>t.map.isStyleLoaded()),[s,i]=u.useState(0);u.useEffect(()=>to(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{eo(t.map)}catch{}},[t.map]),!r)return null;const c=B.jsx(on.Provider,{value:s,children:B.jsx(L.MapControllerProvider,{children:B.jsx(so,{...t,ref:n})})});return t.onEvent||t.onError?B.jsx(L.EventProvider,{onEvent:t.onEvent,onError:t.onError,children:c}):c}),co=["streets","terrain","light","dark","osm"],ht=new WeakMap;let ao=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-${++ao}`),ht.get(e)))}const Tn=()=>Promise.resolve().then(()=>require("./style-Db7kunP9.cjs")),lo=()=>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 R=K=>K instanceof Error?K.message:String(K),O=i.resolveBasemap(t,r),A=typeof O=="object"&&"style"in O&&typeof O.style=="string",I=K=>{N(),x.current=null,d(new le.ElementEditorError(_.loadErrorCode(K.error),"basemap",`The basemap could not be loaded (${R(K.error)}).`,{cause:K.error}))},N=()=>{e.off("error",I),e.off("styledata",N)},M=()=>{w||!(e.isStyleLoaded()||e.getSource("elm-features"))||(w=!0,e.off("styledata",M),x.current=y,i.setBasemap(e,t,{theme:r,network:s.current}).then(()=>{A&&!D&&(e.on("error",I),e.once("styledata",N))},K=>{x.current=null,d(new le.ElementEditorError(_.loadErrorCode(K),"basemap",`The basemap could not be switched (${R(K)}). The map keeps the previous one.`,{cause:K}))}))};let D=!1;return e.on("styledata",M),M(),()=>{w=!0,D=!0,e.off("styledata",M),N()}},[e,i,t,r])}function uo(e){const{basemaps:t,value:n,defaultValue:r="auto",onChange:o,storageKey:s,initialApplied:i,size:a,tooltipSide:d}=e,c=ro(),x=e.map??c,f=L.useTheme(),[y,w]=u.useState(null),R=Kn();u.useEffect(()=>{let l=!0;return lo().then(S=>l&&w(S),S=>{l&&!rt&&(rt=!0,R(On(S)))}),()=>{l=!1}},[]);const O=L.useElementEditorConfig(),A=u.useMemo(()=>t??["auto",...co],[t]),I=A.map(Ae);(A.filter(l=>typeof l=="object"&&!l.id&&!l.label&&!("url"in l)&&typeof l.style!="string").length>1||new Set(I).size<I.length)&&_.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?A.find((S,p)=>Ae(S,p)===l):void 0}),[M,D]=u.useState(N??r),[K,Z]=u.useState(n!==void 0||e.defaultValue!==void 0||N!==void 0),h=n??M,g=A.indexOf(h),E=g>=0?I[g]:Ae(h,-1);Bn(K||n!==void 0?x:null,h,{theme:f,initialApplied:K&&i&&E===Ae(r,A.indexOf(r))});const k=u.useCallback(l=>{const S=I.indexOf(l);if(S<0)return;const p=A[S];Z(!0),n===void 0&&D(p),s&&(typeof p=="string"||p.id)&&le.writeStorage(s,l,O),o==null||o(p)},[I,A,n,s,o,O]);if(!y)return null;const T=l=>{var S;return(S=y.BASEMAPS.find(p=>p.id===l))==null?void 0:S.thumbnail},C=A.map((l,S)=>{const p=I[S],v=typeof l=="string"?y.BASEMAPS.find(j=>j.id===l):void 0;return{id:p,label:l==="auto"?"Auto":(v==null?void 0:v.label)??(typeof l=="object"&&l.label||p),thumbnail:l==="auto"?[T("streets"),T("dark")].every(Boolean)?[T("streets"),T("dark")]:void 0:typeof l=="string"?T(l):l.thumbnail}});return B.jsx(L.BasemapPicker,{options:C,value:E,onChange:k,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=uo;exports.BoundaryLayer=Mn;exports.BoxSelectHandler=wn;exports.DrawingLayer=fn;exports.DrawingPreviewLayer=yn;exports.ElementEditorControls=io;exports.FeatureInteractionLayer=En;exports.FeatureLayer=an;exports.FeatureStyleProvider=nn;exports.FitBounds=Or;exports.GeometryProcessingPreview=kn;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=no;
|
package/dist/index.d.cts
ADDED
package/dist/index.d.ts
ADDED