@mapcomponents/react-maplibre 0.1.78 → 0.1.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +22 -2
  2. package/dist/components/MlFeatureEditor/MlFeatureEditor.d.ts +3 -40
  3. package/dist/components/MlTerrainLayer/MlTerrainLayer.cy.d.ts +1 -0
  4. package/dist/components/MlTerrainLayer/MlTerrainLayer.d.ts +28 -0
  5. package/dist/components/MlTerrainLayer/MlTerrainLayer.stories.d.ts +14 -0
  6. package/dist/components/MlThreeJsLayer/MlThreeJsLayer.d.ts +24 -9
  7. package/dist/components/MlThreeJsLayer/MlThreeJsLayer.stories.d.ts +1 -1
  8. package/dist/components/MlWmsLoader/MlWmsLoader.d.ts +49 -3
  9. package/dist/contexts/LayerContext.d.ts +2 -0
  10. package/dist/hooks/useFeatureEditor.d.ts +46 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.esm.js +270 -1383
  13. package/dist/index.esm.js.map +1 -1
  14. package/dist/ui_components/LayerList/LayerListItem.d.ts +4 -0
  15. package/dist/ui_components/LayerList/LayerListItemFactory.d.ts +0 -1
  16. package/dist/ui_components/SpeedDial/SpeedDial.d.ts +14 -0
  17. package/dist/ui_components/SpeedDial/SpeedDial.stories.d.ts +21 -0
  18. package/package.json +5 -5
  19. package/dist/components/MlFeatureEditor/custom-direct-select-mode.d.ts +0 -37
  20. package/dist/components/MlFeatureEditor/custom-polygon-mode.d.ts +0 -16
  21. package/dist/components/MlFeatureEditor/custom-select-mode.d.ts +0 -37
  22. package/dist/components/MlFeatureEditor/lib/common_selectors.d.ts +0 -11
  23. package/dist/components/MlFeatureEditor/lib/constants.d.ts +0 -85
  24. package/dist/components/MlFeatureEditor/lib/constrain_feature_movement.d.ts +0 -2
  25. package/dist/components/MlFeatureEditor/lib/create_midpoint.d.ts +0 -15
  26. package/dist/components/MlFeatureEditor/lib/create_supplementary_points.d.ts +0 -2
  27. package/dist/components/MlFeatureEditor/lib/create_vertex.d.ts +0 -13
  28. package/dist/components/MlFeatureEditor/lib/double_click_zoom.d.ts +0 -5
  29. package/dist/components/MlFeatureEditor/lib/euclidean_distance.d.ts +0 -5
  30. package/dist/components/MlFeatureEditor/lib/features_at.d.ts +0 -7
  31. package/dist/components/MlFeatureEditor/lib/get_features_and_set_cursor.d.ts +0 -1
  32. package/dist/components/MlFeatureEditor/lib/is_click.d.ts +0 -1
  33. package/dist/components/MlFeatureEditor/lib/is_event_at_coordinates.d.ts +0 -6
  34. package/dist/components/MlFeatureEditor/lib/is_tap.d.ts +0 -3
  35. package/dist/components/MlFeatureEditor/lib/map_event_to_bounding_box.d.ts +0 -12
  36. package/dist/components/MlFeatureEditor/lib/mode_handler.d.ts +0 -24
  37. package/dist/components/MlFeatureEditor/lib/mouse_event_point.d.ts +0 -11
  38. package/dist/components/MlFeatureEditor/lib/move_features.d.ts +0 -2
  39. package/dist/components/MlFeatureEditor/lib/sort_features.d.ts +0 -2
  40. package/dist/components/MlFeatureEditor/lib/string_set.d.ts +0 -21
  41. package/dist/components/MlFeatureEditor/lib/string_sets_are_equal.d.ts +0 -5
  42. package/dist/components/MlFeatureEditor/lib/theme.d.ts +0 -88
  43. package/dist/components/MlFeatureEditor/lib/to_dense_array.d.ts +0 -12
  44. package/dist/components/MlFeatureEditor/lib/utils.d.ts +0 -10
  45. package/dist/components/MlSketchTool/LayerList/ColorPicker.d.ts +0 -10
  46. package/dist/components/MlSketchTool/LayerList/LayerList.d.ts +0 -6
  47. package/dist/components/MlSketchTool/LayerList/LayerListItem.d.ts +0 -12
  48. package/dist/components/MlSketchTool/LayerList/LayerPropertyForm.d.ts +0 -10
  49. package/dist/components/MlThreeJsLayer/MlThreejsLayer.d.ts +0 -30
package/dist/index.esm.js CHANGED
@@ -18,10 +18,6 @@ var Moveable = require('react-moveable');
18
18
  var turf = require('@turf/turf');
19
19
  require('@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css');
20
20
  var MapboxDraw = require('@mapbox/mapbox-gl-draw');
21
- var Point = require('@mapbox/point-geometry');
22
- var require$$0 = require('@mapbox/geojson-coords');
23
- var require$$1 = require('traverse');
24
- var require$$2 = require('@mapbox/extent');
25
21
  var ButtonGroup = require('@mui/material/ButtonGroup');
26
22
  var ControlPointIcon = require('@mui/icons-material/ControlPoint');
27
23
  var RemoveCircleOutlineIcon = require('@mui/icons-material/RemoveCircleOutline');
@@ -54,6 +50,8 @@ var d3 = require('d3');
54
50
  var TuneIcon = require('@mui/icons-material/Tune');
55
51
  var reactColor = require('react-color');
56
52
  var system = require('@mui/system');
53
+ var ArrowCircleDownIcon = require('@mui/icons-material/ArrowCircleDown');
54
+ var ArrowCircleUpIcon = require('@mui/icons-material/ArrowCircleUp');
57
55
  var PlaylistAddIcon = require('@mui/icons-material/PlaylistAdd');
58
56
  var DynamicFeedIcon = require('@mui/icons-material/DynamicFeed');
59
57
  var AppBar = require('@mui/material/AppBar');
@@ -65,6 +63,12 @@ var react = require('@emotion/react');
65
63
  var _ = require('@mui/material/');
66
64
  var FileCopy = require('@mui/icons-material/FileCopy');
67
65
  var WallpaperIcon = require('@mui/icons-material/Wallpaper');
66
+ var MuiSpeedDial = require('@mui/material/SpeedDial');
67
+ var MoreVertIcon = require('@mui/icons-material/MoreVert');
68
+ var SpeedDialAction = require('@mui/material/SpeedDialAction');
69
+ var LayersIcon = require('@mui/icons-material/Layers');
70
+ var DesignServicesIcon = require('@mui/icons-material/DesignServices');
71
+ var PictureAsPdfIcon = require('@mui/icons-material/PictureAsPdf');
68
72
 
69
73
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
70
74
 
@@ -97,10 +101,6 @@ var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM);
97
101
  var Moveable__default = /*#__PURE__*/_interopDefaultLegacy(Moveable);
98
102
  var turf__namespace = /*#__PURE__*/_interopNamespace(turf);
99
103
  var MapboxDraw__default = /*#__PURE__*/_interopDefaultLegacy(MapboxDraw);
100
- var Point__default = /*#__PURE__*/_interopDefaultLegacy(Point);
101
- var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0);
102
- var require$$1__default = /*#__PURE__*/_interopDefaultLegacy(require$$1);
103
- var require$$2__default = /*#__PURE__*/_interopDefaultLegacy(require$$2);
104
104
  var ButtonGroup__default = /*#__PURE__*/_interopDefaultLegacy(ButtonGroup);
105
105
  var ControlPointIcon__default = /*#__PURE__*/_interopDefaultLegacy(ControlPointIcon);
106
106
  var RemoveCircleOutlineIcon__default = /*#__PURE__*/_interopDefaultLegacy(RemoveCircleOutlineIcon);
@@ -128,6 +128,8 @@ var FastForwardIcon__default = /*#__PURE__*/_interopDefaultLegacy(FastForwardIco
128
128
  var FastRewindIcon__default = /*#__PURE__*/_interopDefaultLegacy(FastRewindIcon);
129
129
  var d3__namespace = /*#__PURE__*/_interopNamespace(d3);
130
130
  var TuneIcon__default = /*#__PURE__*/_interopDefaultLegacy(TuneIcon);
131
+ var ArrowCircleDownIcon__default = /*#__PURE__*/_interopDefaultLegacy(ArrowCircleDownIcon);
132
+ var ArrowCircleUpIcon__default = /*#__PURE__*/_interopDefaultLegacy(ArrowCircleUpIcon);
131
133
  var PlaylistAddIcon__default = /*#__PURE__*/_interopDefaultLegacy(PlaylistAddIcon);
132
134
  var DynamicFeedIcon__default = /*#__PURE__*/_interopDefaultLegacy(DynamicFeedIcon);
133
135
  var AppBar__default = /*#__PURE__*/_interopDefaultLegacy(AppBar);
@@ -137,6 +139,12 @@ var MenuIcon__default = /*#__PURE__*/_interopDefaultLegacy(MenuIcon);
137
139
  var CloseIcon__default = /*#__PURE__*/_interopDefaultLegacy(CloseIcon);
138
140
  var FileCopy__default = /*#__PURE__*/_interopDefaultLegacy(FileCopy);
139
141
  var WallpaperIcon__default = /*#__PURE__*/_interopDefaultLegacy(WallpaperIcon);
142
+ var MuiSpeedDial__default = /*#__PURE__*/_interopDefaultLegacy(MuiSpeedDial);
143
+ var MoreVertIcon__default = /*#__PURE__*/_interopDefaultLegacy(MoreVertIcon);
144
+ var SpeedDialAction__default = /*#__PURE__*/_interopDefaultLegacy(SpeedDialAction);
145
+ var LayersIcon__default = /*#__PURE__*/_interopDefaultLegacy(LayersIcon);
146
+ var DesignServicesIcon__default = /*#__PURE__*/_interopDefaultLegacy(DesignServicesIcon);
147
+ var PictureAsPdfIcon__default = /*#__PURE__*/_interopDefaultLegacy(PictureAsPdfIcon);
140
148
 
141
149
  /******************************************************************************
142
150
  Copyright (c) Microsoft Corporation.
@@ -772,8 +780,9 @@ var darkDefault = styles.createTheme({
772
780
  var getDesignTokens = function (mode) { return (__assign(__assign({}, (mode === 'light' ? lightDefault : darkDefault)), { palette: __assign({ mode: mode }, (mode === 'dark'
773
781
  ? {
774
782
  primary: {
775
- main: '#009FE3',
783
+ main: '#009EE0',
776
784
  },
785
+ secondary: { main: '#747577' },
777
786
  background: {
778
787
  default: '#222222',
779
788
  paper: '#414141',
@@ -786,15 +795,16 @@ var getDesignTokens = function (mode) { return (__assign(__assign({}, (mode ===
786
795
  }
787
796
  : {
788
797
  primary: {
789
- main: '#009FE3',
798
+ main: '#009EE0',
790
799
  },
800
+ secondary: { main: '#747577' },
791
801
  background: {
792
802
  default: '#fff',
793
803
  paper: '#fdfdfd',
794
804
  icon: '#bdbdbd',
795
805
  },
796
806
  text: {
797
- primary: '#111',
807
+ primary: '#1A171B',
798
808
  secondary: '#121212',
799
809
  contrast: '#fff',
800
810
  },
@@ -930,6 +940,7 @@ function LayerContextProvider(props) {
930
940
  setSymbolLayers(symbolLayers);
931
941
  };
932
942
  React.useEffect(function () {
943
+ console.log('layers', layers);
933
944
  if (layers.filter(function (el) { return !(el === null || el === void 0 ? void 0 : el.id); }).length) {
934
945
  var _layers = __spreadArray([], layers, true);
935
946
  _layers.forEach(function (el) {
@@ -940,6 +951,34 @@ function LayerContextProvider(props) {
940
951
  setLayers(_layers);
941
952
  }
942
953
  }, [layers]);
954
+ var moveDown = React.useCallback(function (layerId) {
955
+ var _a;
956
+ var targetLayer = (_a = layers === null || layers === void 0 ? void 0 : layers.filter) === null || _a === void 0 ? void 0 : _a.call(layers, function (el) { return el.id === layerId; });
957
+ if (targetLayer.length > 0) {
958
+ var newLayers = __spreadArray([], layers, true);
959
+ var element = targetLayer[0];
960
+ var idx = layers.indexOf(element);
961
+ if (idx + 1 <= layers.length - 1) {
962
+ newLayers.splice(idx, 1);
963
+ newLayers.splice(idx + 1, 0, element);
964
+ setLayers(newLayers);
965
+ }
966
+ }
967
+ }, [layers]);
968
+ var moveUp = React.useCallback(function (layerId) {
969
+ var _a;
970
+ var targetLayer = (_a = layers === null || layers === void 0 ? void 0 : layers.filter) === null || _a === void 0 ? void 0 : _a.call(layers, function (el) { return el.id === layerId; });
971
+ if (targetLayer.length > 0) {
972
+ var newLayers = JSON.parse(JSON.stringify(layers));
973
+ var element = targetLayer[0];
974
+ var idx = layers.indexOf(element);
975
+ if (idx - 1 >= 0) {
976
+ newLayers.splice(idx, 1);
977
+ newLayers.splice(idx - 1, 0, element);
978
+ setLayers(newLayers);
979
+ }
980
+ }
981
+ }, [layers]);
943
982
  var value = {
944
983
  layers: layers,
945
984
  setLayers: setLayers,
@@ -951,6 +990,8 @@ function LayerContextProvider(props) {
951
990
  vtLayerConfig: vtLayerConfig,
952
991
  tileUrl: tileUrl,
953
992
  setTileUrl: setTileUrl,
993
+ moveUp: moveUp,
994
+ moveDown: moveDown,
954
995
  };
955
996
  return React__default["default"].createElement(LayerContext.Provider, { value: value }, props.children);
956
997
  }
@@ -2030,1323 +2071,10 @@ MlCreatePdfForm.defaultProps = {
2030
2071
  mapId: undefined,
2031
2072
  };
2032
2073
 
2033
- /**
2034
- * Code from https://github.com/mapbox/mapbox-gl-draw
2035
- * and licensed under ISC
2036
- */
2037
- var classes = {
2038
- CONTROL_BASE: 'mapboxgl-ctrl',
2039
- CONTROL_PREFIX: 'mapboxgl-ctrl-',
2040
- CONTROL_BUTTON: 'mapbox-gl-draw_ctrl-draw-btn',
2041
- CONTROL_BUTTON_LINE: 'mapbox-gl-draw_line',
2042
- CONTROL_BUTTON_POLYGON: 'mapbox-gl-draw_polygon',
2043
- CONTROL_BUTTON_POINT: 'mapbox-gl-draw_point',
2044
- CONTROL_BUTTON_TRASH: 'mapbox-gl-draw_trash',
2045
- CONTROL_BUTTON_COMBINE_FEATURES: 'mapbox-gl-draw_combine',
2046
- CONTROL_BUTTON_UNCOMBINE_FEATURES: 'mapbox-gl-draw_uncombine',
2047
- CONTROL_GROUP: 'mapboxgl-ctrl-group',
2048
- ATTRIBUTION: 'mapboxgl-ctrl-attrib',
2049
- ACTIVE_BUTTON: 'active',
2050
- BOX_SELECT: 'mapbox-gl-draw_boxselect'
2051
- };
2052
- var cursors = {
2053
- ADD: 'add',
2054
- MOVE: 'move',
2055
- DRAG: 'drag',
2056
- POINTER: 'pointer',
2057
- NONE: 'none'
2058
- };
2059
- var types$1 = {
2060
- POLYGON: 'polygon',
2061
- LINE: 'line_string',
2062
- POINT: 'point'
2063
- };
2064
- var geojsonTypes = {
2065
- FEATURE: 'Feature',
2066
- POLYGON: 'Polygon',
2067
- LINE_STRING: 'LineString',
2068
- POINT: 'Point',
2069
- FEATURE_COLLECTION: 'FeatureCollection',
2070
- MULTI_PREFIX: 'Multi',
2071
- MULTI_POINT: 'MultiPoint',
2072
- MULTI_LINE_STRING: 'MultiLineString',
2073
- MULTI_POLYGON: 'MultiPolygon'
2074
- };
2075
- var events = {
2076
- CREATE: 'draw.create',
2077
- DELETE: 'draw.delete',
2078
- UPDATE: 'draw.update',
2079
- SELECTION_CHANGE: 'draw.selectionchange',
2080
- MODE_CHANGE: 'draw.modechange',
2081
- ACTIONABLE: 'draw.actionable',
2082
- RENDER: 'draw.render',
2083
- COMBINE_FEATURES: 'draw.combine',
2084
- UNCOMBINE_FEATURES: 'draw.uncombine'
2085
- };
2086
- var updateActions = {
2087
- MOVE: 'move',
2088
- CHANGE_COORDINATES: 'change_coordinates'
2089
- };
2090
- var meta = {
2091
- FEATURE: 'feature',
2092
- MIDPOINT: 'midpoint',
2093
- VERTEX: 'vertex'
2094
- };
2095
- var activeStates = {
2096
- ACTIVE: 'true',
2097
- INACTIVE: 'false'
2098
- };
2099
- var LAT_MIN$1 = -90;
2100
- var LAT_RENDERED_MIN$1 = -85;
2101
- var LAT_MAX$1 = 90;
2102
- var LAT_RENDERED_MAX$1 = 85;
2103
- var LNG_MIN$1 = -270;
2104
- var LNG_MAX$1 = 270;
2105
-
2106
- /**
2107
- * Code from https://github.com/mapbox/mapbox-gl-draw
2108
- * and licensed under ISC
2109
- */
2110
- function isOfMetaType(type) {
2111
- return function (e) {
2112
- var featureTarget = e.featureTarget;
2113
- if (!featureTarget) return false;
2114
- if (!featureTarget.properties) return false;
2115
- return featureTarget.properties.meta === type;
2116
- };
2117
- }
2118
- function isShiftMousedown(e) {
2119
- if (!e.originalEvent) return false;
2120
- if (!e.originalEvent.shiftKey) return false;
2121
- return e.originalEvent.button === 0;
2122
- }
2123
- function isActiveFeature(e) {
2124
- if (!e.featureTarget) return false;
2125
- if (!e.featureTarget.properties) return false;
2126
- return e.featureTarget.properties.active === activeStates.ACTIVE && e.featureTarget.properties.meta === meta.FEATURE;
2127
- }
2128
- function isInactiveFeature(e) {
2129
- if (!e.featureTarget) return false;
2130
- if (!e.featureTarget.properties) return false;
2131
- return e.featureTarget.properties.active === activeStates.INACTIVE && e.featureTarget.properties.meta === meta.FEATURE;
2132
- }
2133
- function noTarget(e) {
2134
- return e.featureTarget === undefined;
2135
- }
2136
- function isFeature(e) {
2137
- if (!e.featureTarget) return false;
2138
- if (!e.featureTarget.properties) return false;
2139
- return e.featureTarget.properties.meta === meta.FEATURE;
2140
- }
2141
- function isVertex$1(e) {
2142
- var featureTarget = e.featureTarget;
2143
- if (!featureTarget) return false;
2144
- if (!featureTarget.properties) return false;
2145
- return featureTarget.properties.meta === meta.VERTEX;
2146
- }
2147
- function isShiftDown(e) {
2148
- if (!e.originalEvent) return false;
2149
- return e.originalEvent.shiftKey === true;
2150
- }
2151
- function isEscapeKey(e) {
2152
- return e.keyCode === 27;
2153
- }
2154
- function isEnterKey(e) {
2155
- return e.keyCode === 13;
2156
- }
2157
-
2158
- /**
2159
- * Code from https://github.com/mapbox/mapbox-gl-draw
2160
- * and licensed under ISC
2161
- */
2162
- var doubleClickZoom = {
2163
- enable: function enable(ctx) {
2164
- setTimeout(function () {
2165
- // First check we've got a map and some context.
2166
- if (!ctx.map || !ctx.map.doubleClickZoom || !ctx._ctx || !ctx._ctx.store || !ctx._ctx.store.getInitialConfigValue) return;
2167
- // Now check initial state wasn't false (we leave it disabled if so)
2168
- if (!ctx._ctx.store.getInitialConfigValue("doubleClickZoom")) return;
2169
- ctx.map.doubleClickZoom.enable();
2170
- }, 0);
2171
- },
2172
- disable: function disable(ctx) {
2173
- setTimeout(function () {
2174
- if (!ctx.map || !ctx.map.doubleClickZoom) return;
2175
- // Always disable here, as it's necessary in some cases.
2176
- ctx.map.doubleClickZoom.disable();
2177
- }, 0);
2178
- }
2179
- };
2180
-
2181
- /**
2182
- * Code from https://github.com/mapbox/mapbox-gl-draw
2183
- * and licensed under ISC
2184
- */
2185
- function isEventAtCoordinates(event, coordinates) {
2186
- if (!event.lngLat) return false;
2187
- return event.lngLat.lng === coordinates[0] && event.lngLat.lat === coordinates[1];
2188
- }
2189
-
2190
- /**
2191
- * Code from https://github.com/mapbox/mapbox-gl-draw
2192
- * and licensed under ISC
2193
- */
2194
-
2195
- /**
2196
- * Returns GeoJSON for a Point representing the
2197
- * vertex of another feature.
2198
- *
2199
- * @param {string} parentId
2200
- * @param {Array<number>} coordinates
2201
- * @param {string} path - Dot-separated numbers indicating exactly
2202
- * where the point exists within its parent feature's coordinates.
2203
- * @param {boolean} selected
2204
- * @return {GeoJSON} Point
2205
- */
2206
- var create_vertex = function create_vertex(parentId, coordinates, path, selected) {
2207
- return {
2208
- type: geojsonTypes.FEATURE,
2209
- properties: {
2210
- meta: meta.VERTEX,
2211
- parent: parentId,
2212
- coord_path: path,
2213
- active: selected ? activeStates.ACTIVE : activeStates.INACTIVE
2214
- },
2215
- geometry: {
2216
- type: geojsonTypes.POINT,
2217
- coordinates: coordinates
2218
- }
2219
- };
2220
- };
2221
-
2222
- /**
2223
- * Code from https://github.com/mapbox/mapbox-gl-draw
2224
- * and licensed under ISC
2225
- */
2226
- var CustomPolygonMode = {};
2227
- CustomPolygonMode.onSetup = function () {
2228
- console.log("Change mode: custom polygon");
2229
- var polygon = this.newFeature({
2230
- type: geojsonTypes.FEATURE,
2231
- properties: {},
2232
- geometry: {
2233
- type: geojsonTypes.POLYGON,
2234
- coordinates: [[]]
2235
- }
2236
- });
2237
- this.addFeature(polygon);
2238
- this.clearSelectedFeatures();
2239
- doubleClickZoom.disable(this);
2240
- this.updateUIClasses({
2241
- mouse: cursors.ADD
2242
- });
2243
- this.activateUIButton(types$1.POLYGON);
2244
- this.setActionableState({
2245
- trash: true
2246
- });
2247
- return {
2248
- polygon: polygon,
2249
- currentVertexPosition: 0
2250
- };
2251
- };
2252
- CustomPolygonMode.clickAnywhere = function (state, e) {
2253
- if (state.currentVertexPosition > 0 && isEventAtCoordinates(e, state.polygon.coordinates[0][state.currentVertexPosition - 1])) {
2254
- return this.changeMode("custom_select", {
2255
- featureIds: [state.polygon.id]
2256
- });
2257
- }
2258
- this.updateUIClasses({
2259
- mouse: cursors.ADD
2260
- });
2261
- state.polygon.updateCoordinate("0.".concat(state.currentVertexPosition), e.lngLat.lng, e.lngLat.lat);
2262
- state.currentVertexPosition++;
2263
- state.polygon.updateCoordinate("0.".concat(state.currentVertexPosition), e.lngLat.lng, e.lngLat.lat);
2264
- this.map.fire(events.CREATE, {
2265
- features: [state.polygon.toGeoJSON()]
2266
- });
2267
- };
2268
- CustomPolygonMode.clickOnVertex = function (state) {
2269
- return this.changeMode("custom_select", {
2270
- featureIds: [state.polygon.id]
2271
- });
2272
- };
2273
- CustomPolygonMode.onMouseMove = function (state, e) {
2274
- state.polygon.updateCoordinate("0.".concat(state.currentVertexPosition), e.lngLat.lng, e.lngLat.lat);
2275
- if (isVertex$1(e)) {
2276
- this.updateUIClasses({
2277
- mouse: cursors.POINTER
2278
- });
2279
- }
2280
- };
2281
- CustomPolygonMode.onTap = CustomPolygonMode.onClick = function (state, e) {
2282
- if (isVertex$1(e)) return this.clickOnVertex(state, e);
2283
- return this.clickAnywhere(state, e);
2284
- };
2285
- CustomPolygonMode.onKeyUp = function (state, e) {
2286
- if (isEscapeKey(e)) {
2287
- this.deleteFeature([state.polygon.id], {
2288
- silent: true
2289
- });
2290
- this.changeMode("custom_select");
2291
- } else if (isEnterKey(e)) {
2292
- this.changeMode("custom_select", {
2293
- featureIds: [state.polygon.id]
2294
- });
2295
- }
2296
- };
2297
- CustomPolygonMode.onStop = function (state) {
2298
- this.updateUIClasses({
2299
- mouse: cursors.NONE
2300
- });
2301
- doubleClickZoom.enable(this);
2302
- this.activateUIButton();
2303
-
2304
- // check to see if we've deleted this feature
2305
- if (this.getFeature(state.polygon.id) === undefined) return;
2306
-
2307
- //remove last added coordinate
2308
- state.polygon.removeCoordinate("0.".concat(state.currentVertexPosition));
2309
- if (state.polygon.isValid()) {
2310
- this.map.fire(events.CREATE, {
2311
- features: [state.polygon.toGeoJSON()]
2312
- });
2313
- } else {
2314
- this.deleteFeature([state.polygon.id], {
2315
- silent: true
2316
- });
2317
- this.changeMode("custom_select", {}, {
2318
- silent: true
2319
- });
2320
- }
2321
- };
2322
- CustomPolygonMode.toDisplayFeatures = function (state, geojson, display) {
2323
- var isActivePolygon = geojson.properties.id === state.polygon.id;
2324
- geojson.properties.active = isActivePolygon ? activeStates.ACTIVE : activeStates.INACTIVE;
2325
- if (!isActivePolygon) return display(geojson);
2326
-
2327
- // Don't render a polygon until it has two positions
2328
- // (and a 3rd which is just the first repeated)
2329
- if (geojson.geometry.coordinates.length === 0) return;
2330
- var coordinateCount = geojson.geometry.coordinates[0].length;
2331
- // 2 coordinates after selecting a draw type
2332
- // 3 after creating the first point
2333
- if (coordinateCount < 3) {
2334
- return;
2335
- }
2336
- geojson.properties.meta = meta.FEATURE;
2337
- display(create_vertex(state.polygon.id, geojson.geometry.coordinates[0][0], "0.0", false));
2338
- if (coordinateCount > 3) {
2339
- // Add a start position marker to the map, clicking on this will finish the feature
2340
- // This should only be shown when we're in a valid spot
2341
- var endPos = geojson.geometry.coordinates[0].length - 3;
2342
- display(create_vertex(state.polygon.id, geojson.geometry.coordinates[0][endPos], "0.".concat(endPos), false));
2343
- }
2344
- if (coordinateCount <= 4) {
2345
- // If we've only drawn two positions (plus the closer),
2346
- // make a LineString instead of a Polygon
2347
- var lineCoordinates = [[geojson.geometry.coordinates[0][0][0], geojson.geometry.coordinates[0][0][1]], [geojson.geometry.coordinates[0][1][0], geojson.geometry.coordinates[0][1][1]]];
2348
- // create an initial vertex so that we can track the first point on mobile devices
2349
- display({
2350
- type: geojsonTypes.FEATURE,
2351
- properties: geojson.properties,
2352
- geometry: {
2353
- coordinates: lineCoordinates,
2354
- type: geojsonTypes.LINE_STRING
2355
- }
2356
- });
2357
- if (coordinateCount === 3) {
2358
- return;
2359
- }
2360
- }
2361
- // render the Polygon
2362
- return display(geojson);
2363
- };
2364
- CustomPolygonMode.onTrash = function (state) {
2365
- this.deleteFeature([state.polygon.id], {
2366
- silent: true
2367
- });
2368
- this.changeMode("custom_select");
2369
- };
2370
-
2371
- /**
2372
- * Code from https://github.com/mapbox/mapbox-gl-draw
2373
- * and licensed under ISC
2374
- */
2375
-
2376
- /**
2377
- * Returns a Point representing a mouse event's position
2378
- * relative to a containing element.
2379
- *
2380
- * @param {MouseEvent} mouseEvent
2381
- * @param {Node} container
2382
- * @returns {Point}
2383
- */
2384
- function mouseEventPoint(mouseEvent, container) {
2385
- var rect = container.getBoundingClientRect();
2386
- return new Point__default["default"](mouseEvent.clientX - rect.left - (container.clientLeft || 0), mouseEvent.clientY - rect.top - (container.clientTop || 0));
2387
- }
2388
-
2389
- /**
2390
- * Code from https://github.com/mapbox/mapbox-gl-draw
2391
- * and licensed under ISC
2392
- */
2393
- var create_midpoint = function create_midpoint(parent, startVertex, endVertex) {
2394
- var startCoord = startVertex.geometry.coordinates;
2395
- var endCoord = endVertex.geometry.coordinates;
2396
-
2397
- // If a coordinate exceeds the projection, we can't calculate a midpoint,
2398
- // so run away
2399
- if (startCoord[1] > LAT_RENDERED_MAX$1 || startCoord[1] < LAT_RENDERED_MIN$1 || endCoord[1] > LAT_RENDERED_MAX$1 || endCoord[1] < LAT_RENDERED_MIN$1) {
2400
- return null;
2401
- }
2402
- var mid = {
2403
- lng: (startCoord[0] + endCoord[0]) / 2,
2404
- lat: (startCoord[1] + endCoord[1]) / 2
2405
- };
2406
- return {
2407
- type: geojsonTypes.FEATURE,
2408
- properties: {
2409
- meta: meta.MIDPOINT,
2410
- parent: parent,
2411
- lng: mid.lng,
2412
- lat: mid.lat,
2413
- coord_path: endVertex.properties.coord_path
2414
- },
2415
- geometry: {
2416
- type: geojsonTypes.POINT,
2417
- coordinates: [mid.lng, mid.lat]
2418
- }
2419
- };
2420
- };
2421
-
2422
- /**
2423
- * Code from https://github.com/mapbox/mapbox-gl-draw
2424
- * and licensed under ISC
2425
- */
2426
- function createSupplementaryPoints(geojson) {
2427
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2428
- var basePath = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
2429
- var _geojson$geometry = geojson.geometry,
2430
- type = _geojson$geometry.type,
2431
- coordinates = _geojson$geometry.coordinates;
2432
- var featureId = geojson.properties && geojson.properties.id;
2433
- var supplementaryPoints = [];
2434
- if (type === geojsonTypes.POINT) {
2435
- // For points, just create a vertex
2436
- supplementaryPoints.push(create_vertex(featureId, coordinates, basePath, isSelectedPath(basePath)));
2437
- } else if (type === geojsonTypes.POLYGON) {
2438
- // Cycle through a Polygon's rings and
2439
- // process each line
2440
- coordinates.forEach(function (line, lineIndex) {
2441
- processLine(line, basePath !== null ? "".concat(basePath, ".").concat(lineIndex) : String(lineIndex));
2442
- });
2443
- } else if (type === geojsonTypes.LINE_STRING) {
2444
- processLine(coordinates, basePath);
2445
- } else if (type.indexOf(geojsonTypes.MULTI_PREFIX) === 0) {
2446
- processMultiGeometry();
2447
- }
2448
- function processLine(line, lineBasePath) {
2449
- var firstPointString = "";
2450
- var lastVertex = null;
2451
- line.forEach(function (point, pointIndex) {
2452
- var pointPath = lineBasePath !== undefined && lineBasePath !== null ? "".concat(lineBasePath, ".").concat(pointIndex) : String(pointIndex);
2453
- var vertex = create_vertex(featureId, point, pointPath, isSelectedPath(pointPath));
2454
-
2455
- // If we're creating midpoints, check if there was a
2456
- // vertex before this one. If so, add a midpoint
2457
- // between that vertex and this one.
2458
- if (options.midpoints && lastVertex) {
2459
- var midpoint = create_midpoint(featureId, lastVertex, vertex);
2460
- if (midpoint) {
2461
- supplementaryPoints.push(midpoint);
2462
- }
2463
- }
2464
- lastVertex = vertex;
2465
-
2466
- // A Polygon line's last point is the same as the first point. If we're on the last
2467
- // point, we want to draw a midpoint before it but not another vertex on it
2468
- // (since we already a vertex there, from the first point).
2469
- var stringifiedPoint = JSON.stringify(point);
2470
- if (firstPointString !== stringifiedPoint) {
2471
- supplementaryPoints.push(vertex);
2472
- }
2473
- if (pointIndex === 0) {
2474
- firstPointString = stringifiedPoint;
2475
- }
2476
- });
2477
- }
2478
- function isSelectedPath(path) {
2479
- if (!options.selectedPaths) return false;
2480
- return options.selectedPaths.indexOf(path) !== -1;
2481
- }
2482
-
2483
- // Split a multi-geometry into constituent
2484
- // geometries, and accumulate the supplementary points
2485
- // for each of those constituents
2486
- function processMultiGeometry() {
2487
- var subType = type.replace(geojsonTypes.MULTI_PREFIX, "");
2488
- coordinates.forEach(function (subCoordinates, index) {
2489
- var subFeature = {
2490
- type: geojsonTypes.FEATURE,
2491
- properties: geojson.properties,
2492
- geometry: {
2493
- type: subType,
2494
- coordinates: subCoordinates
2495
- }
2496
- };
2497
- supplementaryPoints = supplementaryPoints.concat(createSupplementaryPoints(subFeature, options, index));
2498
- });
2499
- }
2500
- return supplementaryPoints;
2501
- }
2502
-
2503
- /**
2504
- * Code from https://github.com/mapbox/mapbox-gl-draw
2505
- * and licensed under ISC
2506
- */
2507
- function StringSet(items) {
2508
- this._items = {};
2509
- this._nums = {};
2510
- this._length = items ? items.length : 0;
2511
- if (!items) return;
2512
- for (var i = 0, l = items.length; i < l; i++) {
2513
- this.add(items[i]);
2514
- if (items[i] === undefined) continue;
2515
- if (typeof items[i] === 'string') this._items[items[i]] = i;else this._nums[items[i]] = i;
2516
- }
2517
- }
2518
- StringSet.prototype.add = function (x) {
2519
- if (this.has(x)) return this;
2520
- this._length++;
2521
- if (typeof x === 'string') this._items[x] = this._length;else this._nums[x] = this._length;
2522
- return this;
2523
- };
2524
- StringSet.prototype["delete"] = function (x) {
2525
- if (this.has(x) === false) return this;
2526
- this._length--;
2527
- delete this._items[x];
2528
- delete this._nums[x];
2529
- return this;
2530
- };
2531
- StringSet.prototype.has = function (x) {
2532
- if (typeof x !== 'string' && typeof x !== 'number') return false;
2533
- return this._items[x] !== undefined || this._nums[x] !== undefined;
2534
- };
2535
- StringSet.prototype.values = function () {
2536
- var _this = this;
2537
- var values = [];
2538
- Object.keys(this._items).forEach(function (k) {
2539
- values.push({
2540
- k: k,
2541
- v: _this._items[k]
2542
- });
2543
- });
2544
- Object.keys(this._nums).forEach(function (k) {
2545
- values.push({
2546
- k: JSON.parse(k),
2547
- v: _this._nums[k]
2548
- });
2549
- });
2550
- return values.sort(function (a, b) {
2551
- return a.v - b.v;
2552
- }).map(function (a) {
2553
- return a.k;
2554
- });
2555
- };
2556
- StringSet.prototype.clear = function () {
2557
- this._length = 0;
2558
- this._items = {};
2559
- this._nums = {};
2560
- return this;
2561
- };
2562
-
2563
- var geojsonExtentExports = {};
2564
- var geojsonExtent = {
2565
- get exports(){ return geojsonExtentExports; },
2566
- set exports(v){ geojsonExtentExports = v; },
2567
- };
2568
-
2569
- var geojsonCoords = require$$0__default["default"],
2570
- traverse = require$$1__default["default"],
2571
- extent = require$$2__default["default"];
2572
- var geojsonTypesByDataAttributes = {
2573
- features: ['FeatureCollection'],
2574
- coordinates: ['Point', 'MultiPoint', 'LineString', 'MultiLineString', 'Polygon', 'MultiPolygon'],
2575
- geometry: ['Feature'],
2576
- geometries: ['GeometryCollection']
2577
- };
2578
- var dataAttributes = Object.keys(geojsonTypesByDataAttributes);
2579
- geojsonExtent.exports = function (_) {
2580
- return getExtent(_).bbox();
2581
- };
2582
- geojsonExtentExports.polygon = function (_) {
2583
- return getExtent(_).polygon();
2584
- };
2585
- geojsonExtentExports.bboxify = function (_) {
2586
- return traverse(_).map(function (value) {
2587
- if (!value) return;
2588
- var isValid = dataAttributes.some(function (attribute) {
2589
- if (value[attribute]) {
2590
- return geojsonTypesByDataAttributes[attribute].indexOf(value.type) !== -1;
2591
- }
2592
- return false;
2593
- });
2594
- if (isValid) {
2595
- value.bbox = getExtent(value).bbox();
2596
- this.update(value);
2597
- }
2598
- });
2599
- };
2600
- function getExtent(_) {
2601
- var ext = extent(),
2602
- coords = geojsonCoords(_);
2603
- for (var i = 0; i < coords.length; i++) ext.include(coords[i]);
2604
- return ext;
2605
- }
2606
-
2607
- /**
2608
- * Code from https://github.com/mapbox/mapbox-gl-draw
2609
- * and licensed under ISC
2610
- */
2611
- var LAT_MIN = LAT_MIN$1,
2612
- LAT_MAX = LAT_MAX$1,
2613
- LAT_RENDERED_MIN = LAT_RENDERED_MIN$1,
2614
- LAT_RENDERED_MAX = LAT_RENDERED_MAX$1,
2615
- LNG_MIN = LNG_MIN$1,
2616
- LNG_MAX = LNG_MAX$1;
2617
-
2618
- // Ensure that we do not drag north-south far enough for
2619
- // - any part of any feature to exceed the poles
2620
- // - any feature to be completely lost in the space between the projection's
2621
- // edge and the poles, such that it couldn't be re-selected and moved back
2622
- var constrain_feature_movement = function constrain_feature_movement(geojsonFeatures, delta) {
2623
- // "inner edge" = a feature's latitude closest to the equator
2624
- var northInnerEdge = LAT_MIN;
2625
- var southInnerEdge = LAT_MAX;
2626
- // "outer edge" = a feature's latitude furthest from the equator
2627
- var northOuterEdge = LAT_MIN;
2628
- var southOuterEdge = LAT_MAX;
2629
- var westEdge = LNG_MAX;
2630
- var eastEdge = LNG_MIN;
2631
- geojsonFeatures.forEach(function (feature) {
2632
- var bounds = geojsonExtentExports(feature);
2633
- var featureSouthEdge = bounds[1];
2634
- var featureNorthEdge = bounds[3];
2635
- var featureWestEdge = bounds[0];
2636
- var featureEastEdge = bounds[2];
2637
- if (featureSouthEdge > northInnerEdge) northInnerEdge = featureSouthEdge;
2638
- if (featureNorthEdge < southInnerEdge) southInnerEdge = featureNorthEdge;
2639
- if (featureNorthEdge > northOuterEdge) northOuterEdge = featureNorthEdge;
2640
- if (featureSouthEdge < southOuterEdge) southOuterEdge = featureSouthEdge;
2641
- if (featureWestEdge < westEdge) westEdge = featureWestEdge;
2642
- if (featureEastEdge > eastEdge) eastEdge = featureEastEdge;
2643
- });
2644
-
2645
- // These changes are not mutually exclusive: we might hit the inner
2646
- // edge but also have hit the outer edge and therefore need
2647
- // another readjustment
2648
- var constrainedDelta = delta;
2649
- if (northInnerEdge + constrainedDelta.lat > LAT_RENDERED_MAX) {
2650
- constrainedDelta.lat = LAT_RENDERED_MAX - northInnerEdge;
2651
- }
2652
- if (northOuterEdge + constrainedDelta.lat > LAT_MAX) {
2653
- constrainedDelta.lat = LAT_MAX - northOuterEdge;
2654
- }
2655
- if (southInnerEdge + constrainedDelta.lat < LAT_RENDERED_MIN) {
2656
- constrainedDelta.lat = LAT_RENDERED_MIN - southInnerEdge;
2657
- }
2658
- if (southOuterEdge + constrainedDelta.lat < LAT_MIN) {
2659
- constrainedDelta.lat = LAT_MIN - southOuterEdge;
2660
- }
2661
- if (westEdge + constrainedDelta.lng <= LNG_MIN) {
2662
- constrainedDelta.lng += Math.ceil(Math.abs(constrainedDelta.lng) / 360) * 360;
2663
- }
2664
- if (eastEdge + constrainedDelta.lng >= LNG_MAX) {
2665
- constrainedDelta.lng -= Math.ceil(Math.abs(constrainedDelta.lng) / 360) * 360;
2666
- }
2667
- return constrainedDelta;
2668
- };
2669
-
2670
- /**
2671
- * Code from https://github.com/mapbox/mapbox-gl-draw
2672
- * and licensed under ISC
2673
- */
2674
- var move_features = function move_features(features, delta) {
2675
- var constrainedDelta = constrain_feature_movement(features.map(function (feature) {
2676
- return feature.toGeoJSON();
2677
- }), delta);
2678
- features.forEach(function (feature) {
2679
- var currentCoordinates = feature.getCoordinates();
2680
- var moveCoordinate = function moveCoordinate(coord) {
2681
- var point = {
2682
- lng: coord[0] + constrainedDelta.lng,
2683
- lat: coord[1] + constrainedDelta.lat
2684
- };
2685
- return [point.lng, point.lat];
2686
- };
2687
- var moveRing = function moveRing(ring) {
2688
- return ring.map(function (coord) {
2689
- return moveCoordinate(coord);
2690
- });
2691
- };
2692
- var moveMultiPolygon = function moveMultiPolygon(multi) {
2693
- return multi.map(function (ring) {
2694
- return moveRing(ring);
2695
- });
2696
- };
2697
- var nextCoordinates;
2698
- if (feature.type === geojsonTypes.POINT) {
2699
- nextCoordinates = moveCoordinate(currentCoordinates);
2700
- } else if (feature.type === geojsonTypes.LINE_STRING || feature.type === geojsonTypes.MULTI_POINT) {
2701
- nextCoordinates = currentCoordinates.map(moveCoordinate);
2702
- } else if (feature.type === geojsonTypes.POLYGON || feature.type === geojsonTypes.MULTI_LINE_STRING) {
2703
- nextCoordinates = currentCoordinates.map(moveRing);
2704
- } else if (feature.type === geojsonTypes.MULTI_POLYGON) {
2705
- nextCoordinates = currentCoordinates.map(moveMultiPolygon);
2706
- }
2707
- feature.incomingCoords(nextCoordinates);
2708
- });
2709
- };
2710
-
2711
- /**
2712
- * Code from https://github.com/mapbox/mapbox-gl-draw
2713
- * and licensed under ISC
2714
- */
2715
- var CustomSelectMode = {};
2716
- CustomSelectMode.onSetup = function (opts) {
2717
- var _this = this;
2718
- console.log("Change mode: custom select");
2719
-
2720
- // turn the opts into state.
2721
- var state = {
2722
- dragMoveLocation: null,
2723
- boxSelectStartLocation: null,
2724
- boxSelectElement: undefined,
2725
- boxSelecting: false,
2726
- canBoxSelect: false,
2727
- dragMoving: false,
2728
- canDragMove: false,
2729
- initiallySelectedFeatureIds: opts.featureIds || []
2730
- };
2731
- this.setSelected(state.initiallySelectedFeatureIds.filter(function (id) {
2732
- return _this.getFeature(id) !== undefined;
2733
- }));
2734
- this.fireActionable();
2735
- this.setActionableState({
2736
- combineFeatures: true,
2737
- uncombineFeatures: true,
2738
- trash: true
2739
- });
2740
- return state;
2741
- };
2742
- CustomSelectMode.fireUpdate = function () {
2743
- this.map.fire(events.UPDATE, {
2744
- action: updateActions.MOVE,
2745
- features: this.getSelected().map(function (f) {
2746
- return f.toGeoJSON();
2747
- })
2748
- });
2749
- };
2750
- CustomSelectMode.fireActionable = function () {
2751
- var _this2 = this;
2752
- var selectedFeatures = this.getSelected();
2753
- var multiFeatures = selectedFeatures.filter(function (feature) {
2754
- return _this2.isInstanceOf("MultiFeature", feature);
2755
- });
2756
- var combineFeatures = false;
2757
- if (selectedFeatures.length > 1) {
2758
- combineFeatures = true;
2759
- var featureType = selectedFeatures[0].type.replace("Multi", "");
2760
- selectedFeatures.forEach(function (feature) {
2761
- if (feature.type.replace("Multi", "") !== featureType) {
2762
- combineFeatures = false;
2763
- }
2764
- });
2765
- }
2766
- var uncombineFeatures = multiFeatures.length > 0;
2767
- var trash = selectedFeatures.length > 0;
2768
- this.setActionableState({
2769
- combineFeatures: combineFeatures,
2770
- uncombineFeatures: uncombineFeatures,
2771
- trash: trash
2772
- });
2773
- };
2774
- CustomSelectMode.getUniqueIds = function (allFeatures) {
2775
- if (!allFeatures.length) return [];
2776
- var ids = allFeatures.map(function (s) {
2777
- return s.properties.id;
2778
- }).filter(function (id) {
2779
- return id !== undefined;
2780
- }).reduce(function (memo, id) {
2781
- memo.add(id);
2782
- return memo;
2783
- }, new StringSet());
2784
- return ids.values();
2785
- };
2786
- CustomSelectMode.stopExtendedInteractions = function (state) {
2787
- if (state.boxSelectElement) {
2788
- if (state.boxSelectElement.parentNode) state.boxSelectElement.parentNode.removeChild(state.boxSelectElement);
2789
- state.boxSelectElement = null;
2790
- }
2791
- this.map.dragPan.enable();
2792
- state.boxSelecting = false;
2793
- state.canBoxSelect = false;
2794
- state.dragMoving = false;
2795
- state.canDragMove = false;
2796
- };
2797
- CustomSelectMode.onStop = function () {
2798
- doubleClickZoom.enable(this);
2799
- };
2800
- CustomSelectMode.onMouseMove = function (state) {
2801
- // On mousemove that is not a drag, stop extended interactions.
2802
- // This is useful if you drag off the canvas, release the button,
2803
- // then move the mouse back over the canvas --- we don't allow the
2804
- // interaction to continue then, but we do let it continue if you held
2805
- // the mouse button that whole time
2806
- return this.stopExtendedInteractions(state);
2807
- };
2808
- CustomSelectMode.onMouseOut = function (state) {
2809
- // As soon as you mouse leaves the canvas, update the feature
2810
- if (state.dragMoving) return this.fireUpdate();
2811
- };
2812
- CustomSelectMode.onTap = CustomSelectMode.onClick = function (state, e) {
2813
- // Click (with or without shift) on no feature
2814
- if (noTarget(e)) return this.clickAnywhere(state, e); // also tap
2815
- if (isOfMetaType(meta.VERTEX)(e)) return this.clickOnVertex(state, e); //tap
2816
- if (isFeature(e)) return this.clickOnFeature(state, e);
2817
- };
2818
- CustomSelectMode.clickAnywhere = function (state) {
2819
- var _this3 = this;
2820
- // Clear the re-render selection
2821
- var wasSelected = this.getSelectedIds();
2822
- if (wasSelected.length) {
2823
- this.clearSelectedFeatures();
2824
- wasSelected.forEach(function (id) {
2825
- return _this3.doRender(id);
2826
- });
2827
- }
2828
- doubleClickZoom.enable(this);
2829
- this.stopExtendedInteractions(state);
2830
- };
2831
- CustomSelectMode.clickOnVertex = function (state, e) {
2832
- // Enter direct select mode
2833
- this.changeMode("custom_direct_select", {
2834
- featureId: e.featureTarget.properties.parent,
2835
- coordPath: e.featureTarget.properties.coord_path,
2836
- startPos: e.lngLat
2837
- // groupMove_vertices: matchingVertices,
2838
- });
2839
-
2840
- this.updateUIClasses({
2841
- mouse: cursors.MOVE
2842
- });
2843
- };
2844
- CustomSelectMode.startOnActiveFeature = function (state, e) {
2845
- // Stop any already-underway extended interactions
2846
- this.stopExtendedInteractions(state);
2847
-
2848
- // Disable map.dragPan immediately so it can't start
2849
- this.map.dragPan.disable();
2850
-
2851
- // Re-render it and enable drag move
2852
- this.doRender(e.featureTarget.properties.id);
2853
-
2854
- // Set up the state for drag moving
2855
- state.canDragMove = true;
2856
- state.dragMoveLocation = e.lngLat;
2857
- };
2858
- CustomSelectMode.clickOnFeature = function (state, e) {
2859
- var _this4 = this;
2860
- // Stop everything
2861
- doubleClickZoom.disable(this);
2862
- this.stopExtendedInteractions(state);
2863
- var isShiftClick = isShiftDown(e);
2864
- var selectedFeatureIds = this.getSelectedIds();
2865
- var featureId = e.featureTarget.properties.id;
2866
- var isFeatureSelected = this.isSelected(featureId);
2867
-
2868
- // Click (without shift) on any selected feature but a point
2869
- if (!isShiftClick && isFeatureSelected && this.getFeature(featureId).type !== geojsonTypes.POINT) {
2870
- // Enter direct select mode
2871
- return this.changeMode("custom_direct_select", {
2872
- featureId: featureId
2873
- });
2874
- }
2875
-
2876
- // Shift-click on a selected feature
2877
- if (isFeatureSelected && isShiftClick) {
2878
- // Deselect it
2879
- this.deselect(featureId);
2880
- this.updateUIClasses({
2881
- mouse: cursors.POINTER
2882
- });
2883
- if (selectedFeatureIds.length === 1) {
2884
- doubleClickZoom.enable(this);
2885
- }
2886
- // Shift-click on an unselected feature
2887
- } else if (!isFeatureSelected && isShiftClick) {
2888
- // Add it to the selection
2889
- this.select(featureId);
2890
- this.updateUIClasses({
2891
- mouse: cursors.MOVE
2892
- });
2893
- // Click (without shift) on an unselected feature
2894
- } else if (!isFeatureSelected && !isShiftClick) {
2895
- // Make it the only selected feature
2896
- selectedFeatureIds.forEach(function (id) {
2897
- return _this4.doRender(id);
2898
- });
2899
- this.setSelected(featureId);
2900
- this.updateUIClasses({
2901
- mouse: cursors.MOVE
2902
- });
2903
- }
2904
-
2905
- // No matter what, re-render the clicked feature
2906
- this.doRender(featureId);
2907
- };
2908
- CustomSelectMode.onMouseDown = function (state, e) {
2909
- if (isActiveFeature(e)) return this.startOnActiveFeature(state, e);
2910
- if (this.drawConfig.boxSelect && isShiftMousedown(e)) return this.startBoxSelect(state, e);
2911
- };
2912
- CustomSelectMode.startBoxSelect = function (state, e) {
2913
- this.stopExtendedInteractions(state);
2914
- this.map.dragPan.disable();
2915
- // Enable box select
2916
- state.boxSelectStartLocation = mouseEventPoint(e.originalEvent, this.map.getContainer());
2917
- state.canBoxSelect = true;
2918
- };
2919
- CustomSelectMode.onTouchStart = function (state, e) {
2920
- if (isActiveFeature(e)) return this.startOnActiveFeature(state, e);
2921
- };
2922
- CustomSelectMode.onDrag = function (state, e) {
2923
- if (state.canDragMove) return this.dragMove(state, e);
2924
- if (this.drawConfig.boxSelect && state.canBoxSelect) return this.whileBoxSelect(state, e);
2925
- };
2926
- CustomSelectMode.whileBoxSelect = function (state, e) {
2927
- state.boxSelecting = true;
2928
- this.updateUIClasses({
2929
- mouse: cursors.ADD
2930
- });
2931
-
2932
- // Create the box node if it doesn't exist
2933
- if (!state.boxSelectElement) {
2934
- state.boxSelectElement = document.createElement("div");
2935
- state.boxSelectElement.classList.add(classes.BOX_SELECT);
2936
- this.map.getContainer().appendChild(state.boxSelectElement);
2937
- }
2938
-
2939
- // Adjust the box node's width and xy position
2940
- var current = mouseEventPoint(e.originalEvent, this.map.getContainer());
2941
- var minX = Math.min(state.boxSelectStartLocation.x, current.x);
2942
- var maxX = Math.max(state.boxSelectStartLocation.x, current.x);
2943
- var minY = Math.min(state.boxSelectStartLocation.y, current.y);
2944
- var maxY = Math.max(state.boxSelectStartLocation.y, current.y);
2945
- var translateValue = "translate(".concat(minX, "px, ").concat(minY, "px)");
2946
- state.boxSelectElement.style.transform = translateValue;
2947
- state.boxSelectElement.style.WebkitTransform = translateValue;
2948
- state.boxSelectElement.style.width = "".concat(maxX - minX, "px");
2949
- state.boxSelectElement.style.height = "".concat(maxY - minY, "px");
2950
- };
2951
- CustomSelectMode.dragMove = function (state, e) {
2952
- // Dragging when drag move is enabled
2953
- state.dragMoving = true;
2954
- e.originalEvent.stopPropagation();
2955
- var delta = {
2956
- lng: e.lngLat.lng - state.dragMoveLocation.lng,
2957
- lat: e.lngLat.lat - state.dragMoveLocation.lat
2958
- };
2959
- move_features(this.getSelected(), delta);
2960
- state.dragMoveLocation = e.lngLat;
2961
- };
2962
- CustomSelectMode.onMouseUp = function (state, e) {
2963
- var _this5 = this;
2964
- // End any extended interactions
2965
- if (state.dragMoving) {
2966
- this.fireUpdate();
2967
- } else if (state.boxSelecting) {
2968
- var bbox = [state.boxSelectStartLocation, mouseEventPoint(e.originalEvent, this.map.getContainer())];
2969
- var featuresInBox = this.featuresAt(null, bbox, "click");
2970
- var idsToSelect = this.getUniqueIds(featuresInBox).filter(function (id) {
2971
- return !_this5.isSelected(id);
2972
- });
2973
- if (idsToSelect.length) {
2974
- this.select(idsToSelect);
2975
- idsToSelect.forEach(function (id) {
2976
- return _this5.doRender(id);
2977
- });
2978
- this.updateUIClasses({
2979
- mouse: cursors.MOVE
2980
- });
2981
- }
2982
- }
2983
- this.stopExtendedInteractions(state);
2984
- };
2985
- CustomSelectMode.toDisplayFeatures = function (state, geojson, display) {
2986
- geojson.properties.active = this.isSelected(geojson.properties.id) ? activeStates.ACTIVE : activeStates.INACTIVE;
2987
- display(geojson);
2988
- this.fireActionable();
2989
- if (geojson.properties.active !== activeStates.ACTIVE || geojson.geometry.type === geojsonTypes.POINT) return;
2990
- createSupplementaryPoints(geojson).forEach(display);
2991
- };
2992
- CustomSelectMode.onTrash = function () {
2993
- this.deleteFeature(this.getSelectedIds());
2994
- this.fireActionable();
2995
- };
2996
- CustomSelectMode.onCombineFeatures = function () {
2997
- var selectedFeatures = this.getSelected();
2998
- if (selectedFeatures.length === 0 || selectedFeatures.length < 2) return;
2999
- var coordinates = [],
3000
- featuresCombined = [];
3001
- var featureType = selectedFeatures[0].type.replace("Multi", "");
3002
- for (var i = 0; i < selectedFeatures.length; i++) {
3003
- var feature = selectedFeatures[i];
3004
- if (feature.type.replace("Multi", "") !== featureType) {
3005
- return;
3006
- }
3007
- if (feature.type.includes("Multi")) {
3008
- feature.getCoordinates().forEach(function (subcoords) {
3009
- coordinates.push(subcoords);
3010
- });
3011
- } else {
3012
- coordinates.push(feature.getCoordinates());
3013
- }
3014
- featuresCombined.push(feature.toGeoJSON());
3015
- }
3016
- if (featuresCombined.length > 1) {
3017
- var multiFeature = this.newFeature({
3018
- type: geojsonTypes.FEATURE,
3019
- properties: featuresCombined[0].properties,
3020
- geometry: {
3021
- type: "Multi".concat(featureType),
3022
- coordinates: coordinates
3023
- }
3024
- });
3025
- this.addFeature(multiFeature);
3026
- this.deleteFeature(this.getSelectedIds(), {
3027
- silent: true
3028
- });
3029
- this.setSelected([multiFeature.id]);
3030
- this.map.fire(events.COMBINE_FEATURES, {
3031
- createdFeatures: [multiFeature.toGeoJSON()],
3032
- deletedFeatures: featuresCombined
3033
- });
3034
- }
3035
- this.fireActionable();
3036
- };
3037
- CustomSelectMode.onUncombineFeatures = function () {
3038
- var _this6 = this;
3039
- var selectedFeatures = this.getSelected();
3040
- if (selectedFeatures.length === 0) return;
3041
- var createdFeatures = [];
3042
- var featuresUncombined = [];
3043
- var _loop = function _loop() {
3044
- var feature = selectedFeatures[i];
3045
- if (_this6.isInstanceOf("MultiFeature", feature)) {
3046
- feature.getFeatures().forEach(function (subFeature) {
3047
- _this6.addFeature(subFeature);
3048
- subFeature.properties = feature.properties;
3049
- createdFeatures.push(subFeature.toGeoJSON());
3050
- _this6.select([subFeature.id]);
3051
- });
3052
- _this6.deleteFeature(feature.id, {
3053
- silent: true
3054
- });
3055
- featuresUncombined.push(feature.toGeoJSON());
3056
- }
3057
- };
3058
- for (var i = 0; i < selectedFeatures.length; i++) {
3059
- _loop();
3060
- }
3061
- if (createdFeatures.length > 1) {
3062
- this.map.fire(events.UNCOMBINE_FEATURES, {
3063
- createdFeatures: createdFeatures,
3064
- deletedFeatures: featuresUncombined
3065
- });
3066
- }
3067
- this.fireActionable();
3068
- };
3069
-
3070
- /**
3071
- * Code from https://github.com/mapbox/mapbox-gl-draw
3072
- * and licensed under ISC
3073
- */
3074
- var drawUtils = {
3075
- getMatchingVertices: function getMatchingVertices(vertex, featureId, allFeatures, map) {
3076
- // number of decimals should probably be dynamic depending on zoom level
3077
- var decimals = 5;
3078
- var matchingVertices = [];
3079
- var v_lng = vertex[0].toFixed(decimals);
3080
- var v_lat = vertex[1].toFixed(decimals);
3081
- for (var i = 0; i < allFeatures.length; i++) {
3082
- if (allFeatures[i].id !== featureId) {
3083
- for (var k = 0; k < allFeatures[i].geometry.coordinates.length; k++) {
3084
- for (var m = 0; m < allFeatures[i].geometry.coordinates[k].length; m++) {
3085
- if (v_lng === allFeatures[i].geometry.coordinates[k][m][0].toFixed(decimals) && v_lat === allFeatures[i].geometry.coordinates[k][m][1].toFixed(decimals)) {
3086
- matchingVertices.push({
3087
- featureId: allFeatures[i].id,
3088
- coord_path: k + "." + m,
3089
- //feature: map.getFeature(allFeatures[i].id),
3090
- lng: allFeatures[i].geometry.coordinates[k][m][0],
3091
- lat: allFeatures[i].geometry.coordinates[k][m][1]
3092
- });
3093
- }
3094
- }
3095
- }
3096
- }
3097
- }
3098
- return matchingVertices;
3099
- },
3100
- getDrawInstance: function getDrawInstance(map) {
3101
- for (var i = map._controls.length - 1; i >= 0; i--) {
3102
- var _map$_controls$i, _map$_controls$i$mode;
3103
- if (((_map$_controls$i = map._controls[i]) === null || _map$_controls$i === void 0 ? void 0 : (_map$_controls$i$mode = _map$_controls$i.modes) === null || _map$_controls$i$mode === void 0 ? void 0 : _map$_controls$i$mode.SIMPLE_SELECT) === "simple_select") {
3104
- return map._controls[i];
3105
- }
3106
- }
3107
- return null;
3108
- }
3109
- };
3110
-
3111
- /**
3112
- * Code from https://github.com/mapbox/mapbox-gl-draw
3113
- * and licensed under ISC
3114
- */
3115
- var isVertex = isOfMetaType(meta.VERTEX);
3116
- var isMidpoint = isOfMetaType(meta.MIDPOINT);
3117
- var DirectSelect = {};
3118
-
3119
- // INTERNAL FUNCTIONS
3120
-
3121
- DirectSelect.fireUpdate = function () {
3122
- this.map.fire(events.UPDATE, {
3123
- action: updateActions.CHANGE_COORDINATES,
3124
- features: this.getSelected().map(function (f) {
3125
- return f.toGeoJSON();
3126
- })
3127
- });
3128
- };
3129
- DirectSelect.fireActionable = function (state) {
3130
- this.setActionableState({
3131
- combineFeatures: false,
3132
- uncombineFeatures: false,
3133
- trash: state.selectedCoordPaths.length > 0
3134
- });
3135
- };
3136
- DirectSelect.startDragging = function (state, e) {
3137
- this.map.dragPan.disable();
3138
- state.canDragMove = true;
3139
- state.dragMoveLocation = e.lngLat;
3140
- };
3141
- DirectSelect.stopDragging = function (state) {
3142
- this.map.dragPan.enable();
3143
- state.dragMoving = false;
3144
- state.canDragMove = false;
3145
- state.dragMoveLocation = null;
3146
- };
3147
- DirectSelect.onVertex = function (state, e) {
3148
- this.startDragging(state, e);
3149
- var about = e.featureTarget.properties;
3150
- var selectedIndex = state.selectedCoordPaths.indexOf(about.coord_path);
3151
- if (!isShiftDown(e) && selectedIndex === -1) {
3152
- state.selectedCoordPaths = [about.coord_path];
3153
- } else if (isShiftDown(e) && selectedIndex === -1) {
3154
- state.selectedCoordPaths.push(about.coord_path);
3155
- }
3156
-
3157
- // currently this work with single selected vertices only
3158
- var allFeatures = drawUtils.getDrawInstance(this.map).getAll();
3159
- var matchingVertices = drawUtils.getMatchingVertices(e.featureTarget._geometry.coordinates, e.featureTarget.properties.parent, allFeatures.features, this.map);
3160
- state.groupMove_vertices = matchingVertices;
3161
- for (var i = 0; i < state.groupMove_vertices.length; i++) {
3162
- state.groupMove_vertices[i].feature = this.getFeature(state.groupMove_vertices[i].featureId);
3163
- }
3164
- var selectedCoordinates = this.pathsToCoordinates(state.featureId, state.selectedCoordPaths);
3165
- this.setSelectedCoordinates(selectedCoordinates);
3166
- };
3167
- DirectSelect.onMidpoint = function (state, e) {
3168
- this.startDragging(state, e);
3169
- var about = e.featureTarget.properties;
3170
- state.feature.addCoordinate(about.coord_path, about.lng, about.lat);
3171
- this.fireUpdate();
3172
- state.selectedCoordPaths = [about.coord_path];
3173
- };
3174
- DirectSelect.pathsToCoordinates = function (featureId, paths) {
3175
- return paths.map(function (coord_path) {
3176
- return {
3177
- feature_id: featureId,
3178
- coord_path: coord_path
3179
- };
3180
- });
3181
- };
3182
- DirectSelect.onFeature = function (state, e) {
3183
- if (state.selectedCoordPaths.length === 0) this.startDragging(state, e);else this.stopDragging(state);
3184
- };
3185
- DirectSelect.dragFeature = function (state, e, delta) {
3186
- move_features(this.getSelected(), delta);
3187
- state.dragMoveLocation = e.lngLat;
3188
- };
3189
- DirectSelect.dragVertex = function (state, e, delta) {
3190
- var selectedCoords = state.selectedCoordPaths.map(function (coord_path) {
3191
- return state.feature.getCoordinate(coord_path);
3192
- });
3193
- var selectedCoordPoints = selectedCoords.map(function (coords) {
3194
- return {
3195
- type: geojsonTypes.FEATURE,
3196
- properties: {},
3197
- geometry: {
3198
- type: geojsonTypes.POINT,
3199
- coordinates: coords
3200
- }
3201
- };
3202
- });
3203
- var constrainedDelta = constrain_feature_movement(selectedCoordPoints, delta);
3204
- for (var i = 0; i < selectedCoords.length; i++) {
3205
- var coord = selectedCoords[i];
3206
- state.feature.updateCoordinate(state.selectedCoordPaths[i], coord[0] + constrainedDelta.lng, coord[1] + constrainedDelta.lat);
3207
- for (var k = 0; k < state.groupMove_vertices.length; k++) {
3208
- var coord_path_m = state.groupMove_vertices[k].coord_path.split(".");
3209
- if (typeof coord_path_m[0] !== "undefined" && typeof coord_path_m[1] !== "undefined" && typeof state.groupMove_vertices[k].feature.coordinates[coord_path_m[0]] !== "undefined" && typeof state.groupMove_vertices[k].feature.coordinates[coord_path_m[0]][coord_path_m[1]] !== "undefined") {
3210
- var coord_m = state.groupMove_vertices[k].feature.coordinates[coord_path_m[0]][coord_path_m[1]];
3211
- state.groupMove_vertices[k].feature.updateCoordinate(state.groupMove_vertices[k].coord_path, coord_m[0] + constrainedDelta.lng, coord_m[1] + constrainedDelta.lat);
3212
- }
3213
- }
3214
- }
3215
- };
3216
- DirectSelect.clickNoTarget = function () {
3217
- this.changeMode("custom_select");
3218
- };
3219
- DirectSelect.clickInactive = function () {
3220
- this.changeMode("custom_select");
3221
- };
3222
- DirectSelect.clickActiveFeature = function (state) {
3223
- state.selectedCoordPaths = [];
3224
- this.clearSelectedCoordinates();
3225
- state.feature.changed();
3226
- };
3227
-
3228
- // EXTERNAL FUNCTIONS
3229
-
3230
- DirectSelect.onSetup = function (opts) {
3231
- var featureId = opts.featureId;
3232
- var feature = this.getFeature(featureId);
3233
- if (!feature) {
3234
- throw new Error("You must provide a featureId to enter direct_select mode");
3235
- }
3236
- if (feature.type === geojsonTypes.POINT) {
3237
- throw new TypeError("direct_select mode doesn't handle point features");
3238
- }
3239
- var state = {
3240
- featureId: featureId,
3241
- feature: feature,
3242
- dragMoveLocation: opts.startPos || null,
3243
- dragMoving: false,
3244
- canDragMove: false,
3245
- selectedCoordPaths: opts.coordPath ? [opts.coordPath] : [],
3246
- groupMove_vertices: opts.groupMove_vertices ? opts.groupMove_vertices : []
3247
- };
3248
- this.setSelectedCoordinates(this.pathsToCoordinates(featureId, state.selectedCoordPaths));
3249
- this.setSelected(featureId);
3250
- doubleClickZoom.disable(this);
3251
- this.setActionableState({
3252
- trash: true
3253
- });
3254
- return state;
3255
- };
3256
- DirectSelect.onStop = function () {
3257
- doubleClickZoom.enable(this);
3258
- this.clearSelectedCoordinates();
3259
- };
3260
- DirectSelect.toDisplayFeatures = function (state, geojson, push) {
3261
- if (state.featureId === geojson.properties.id) {
3262
- geojson.properties.active = activeStates.ACTIVE;
3263
- push(geojson);
3264
- createSupplementaryPoints(geojson, {
3265
- map: this.map,
3266
- midpoints: true,
3267
- selectedPaths: state.selectedCoordPaths
3268
- }).forEach(push);
3269
- } else {
3270
- geojson.properties.active = activeStates.INACTIVE;
3271
- push(geojson);
3272
- }
3273
- this.fireActionable(state);
3274
- };
3275
- DirectSelect.onTrash = function (state) {
3276
- // Uses number-aware sorting to make sure '9' < '10'. Comparison is reversed because we want them
3277
- // in reverse order so that we can remove by index safely.
3278
- state.selectedCoordPaths.sort(function (a, b) {
3279
- return b.localeCompare(a, "en", {
3280
- numeric: true
3281
- });
3282
- }).forEach(function (id) {
3283
- return state.feature.removeCoordinate(id);
3284
- });
3285
- this.fireUpdate();
3286
- state.selectedCoordPaths = [];
3287
- this.clearSelectedCoordinates();
3288
- this.fireActionable(state);
3289
- if (state.feature.isValid() === false) {
3290
- this.deleteFeature([state.featureId]);
3291
- this.changeMode("custom_select", {});
3292
- }
3293
- };
3294
- DirectSelect.onMouseMove = function (state, e) {
3295
- // On mousemove that is not a drag, stop vertex movement.
3296
- var isFeature = isActiveFeature(e);
3297
- var onVertex = isVertex(e);
3298
- var noCoords = state.selectedCoordPaths.length === 0;
3299
- if (isFeature && noCoords) this.updateUIClasses({
3300
- mouse: cursors.MOVE
3301
- });else if (onVertex && !noCoords) this.updateUIClasses({
3302
- mouse: cursors.MOVE
3303
- });else this.updateUIClasses({
3304
- mouse: cursors.NONE
3305
- });
3306
- this.stopDragging(state);
3307
- };
3308
- DirectSelect.onMouseOut = function (state) {
3309
- // As soon as you mouse leaves the canvas, update the feature
3310
- if (state.dragMoving) this.fireUpdate();
3311
- };
3312
- DirectSelect.onTouchStart = DirectSelect.onMouseDown = function (state, e) {
3313
- if (isVertex(e)) return this.onVertex(state, e);
3314
- if (isActiveFeature(e)) return this.onFeature(state, e);
3315
- if (isMidpoint(e)) return this.onMidpoint(state, e);
3316
- };
3317
- DirectSelect.onDrag = function (state, e) {
3318
- if (state.canDragMove !== true) return;
3319
- state.dragMoving = true;
3320
- e.originalEvent.stopPropagation();
3321
- var delta = {
3322
- lng: e.lngLat.lng - state.dragMoveLocation.lng,
3323
- lat: e.lngLat.lat - state.dragMoveLocation.lat
3324
- };
3325
- if (state.selectedCoordPaths.length > 0) this.dragVertex(state, e, delta);else this.dragFeature(state, e, delta);
3326
- state.dragMoveLocation = e.lngLat;
3327
- };
3328
- DirectSelect.onClick = function (state, e) {
3329
- if (noTarget(e)) return this.clickNoTarget(state, e);
3330
- if (isActiveFeature(e)) return this.clickActiveFeature(state, e);
3331
- if (isInactiveFeature(e)) return this.clickInactive(state, e);
3332
- this.stopDragging(state);
3333
- };
3334
- DirectSelect.onTap = function (state, e) {
3335
- if (noTarget(e)) return this.clickNoTarget(state, e);
3336
- if (isActiveFeature(e)) return this.clickActiveFeature(state, e);
3337
- if (isInactiveFeature(e)) return this.clickInactive(state, e);
3338
- };
3339
- DirectSelect.onTouchEnd = DirectSelect.onMouseUp = function (state) {
3340
- if (state.dragMoving) {
3341
- this.fireUpdate();
3342
- }
3343
- this.stopDragging(state);
3344
- };
3345
-
3346
2074
  /**
3347
2075
  * GeoJson Feature editor that allows to create or manipulate GeoJson data
3348
2076
  */
3349
- var MlFeatureEditor = function (props) {
2077
+ var useFeatureEditor = function (props) {
3350
2078
  var draw = React.useRef();
3351
2079
  var mapHook = useMap({
3352
2080
  mapId: props.mapId,
@@ -3354,14 +2082,15 @@ var MlFeatureEditor = function (props) {
3354
2082
  });
3355
2083
  var drawToolsInitialized = React.useRef(false);
3356
2084
  var _a = React.useState(false), drawToolsReady = _a[0], setDrawToolsReady = _a[1];
3357
- var modeChangeHandler = function (e) {
2085
+ var _b = React.useState(), feature = _b[0], setFeature = _b[1];
2086
+ var modeChangeHandler = React.useCallback(function (e) {
3358
2087
  console.log('MlFeatureEditor mode change to ' + e.mode);
3359
2088
  //setDrawMode(e.mode);
3360
2089
  if (typeof props.onFinish === 'function' &&
3361
- (e.mode === 'custom_select' || e.mode === 'simple_select')) {
2090
+ (e.mode === 'simple_select')) {
3362
2091
  props.onFinish();
3363
2092
  }
3364
- };
2093
+ }, [props.onFinish]);
3365
2094
  React.useEffect(function () {
3366
2095
  var _a;
3367
2096
  if (mapHook.map && !drawToolsInitialized.current) {
@@ -3376,20 +2105,16 @@ var MlFeatureEditor = function (props) {
3376
2105
  }
3377
2106
  draw.current = new MapboxDraw__default["default"]({
3378
2107
  displayControlsDefault: false,
3379
- defaultMode: props.mode || 'custom_select',
2108
+ defaultMode: props.mode || 'simple_select',
3380
2109
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3381
2110
  // @ts-ignore
3382
- modes: Object.assign({
3383
- custom_polygon: CustomPolygonMode,
3384
- custom_select: CustomSelectMode,
3385
- custom_direct_select: DirectSelect,
3386
- }, MapboxDraw__default["default"].modes),
2111
+ modes: Object.assign({}, MapboxDraw__default["default"].modes),
3387
2112
  });
3388
2113
  mapHook.map.addControl(draw.current, 'top-left', mapHook.componentId);
3389
2114
  mapHook.map.on('draw.modechange', modeChangeHandler, mapHook.componentId);
3390
2115
  setDrawToolsReady(true);
3391
2116
  }
3392
- }, [mapHook.map, props, drawToolsInitialized]);
2117
+ }, [mapHook.map, props, drawToolsInitialized, modeChangeHandler]);
3393
2118
  React.useEffect(function () {
3394
2119
  if (!mapHook.map || !drawToolsReady)
3395
2120
  return;
@@ -3397,8 +2122,9 @@ var MlFeatureEditor = function (props) {
3397
2122
  var _a, _b;
3398
2123
  if (draw.current) {
3399
2124
  // update drawnFeatures state object
2125
+ var currentFeatureCollection = (_b = (_a = draw.current).getAll) === null || _b === void 0 ? void 0 : _b.call(_a);
2126
+ setFeature(currentFeatureCollection === null || currentFeatureCollection === void 0 ? void 0 : currentFeatureCollection.features);
3400
2127
  if (typeof props.onChange === 'function') {
3401
- var currentFeatureCollection = (_b = (_a = draw.current).getAll) === null || _b === void 0 ? void 0 : _b.call(_a);
3402
2128
  props.onChange(currentFeatureCollection === null || currentFeatureCollection === void 0 ? void 0 : currentFeatureCollection.features);
3403
2129
  }
3404
2130
  }
@@ -3415,17 +2141,38 @@ var MlFeatureEditor = function (props) {
3415
2141
  React.useEffect(function () {
3416
2142
  var _a;
3417
2143
  if (draw.current && ((_a = props.geojson) === null || _a === void 0 ? void 0 : _a.geometry)) {
2144
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
2145
+ // @ts-ignore
3418
2146
  draw.current.set({ type: 'FeatureCollection', features: [props.geojson] });
3419
2147
  }
3420
2148
  }, [props.geojson, drawToolsReady]);
3421
2149
  React.useEffect(function () {
3422
- if (props.mode && draw.current) {
2150
+ var _a, _b, _c, _d;
2151
+ if (props.mode && draw.current && ((_b = (_a = draw.current) === null || _a === void 0 ? void 0 : _a.getMode) === null || _b === void 0 ? void 0 : _b.call(_a)) !== props.mode) {
3423
2152
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3424
2153
  // @ts-ignore
3425
- draw.current.changeMode(props.mode);
2154
+ (_d = (_c = draw.current) === null || _c === void 0 ? void 0 : _c.changeMode) === null || _d === void 0 ? void 0 : _d.call(_c, props.mode);
2155
+ if (props.mode !== 'simple_select' && props.mode !== 'direct_select') {
2156
+ draw.current.set({ type: 'FeatureCollection', features: [] });
2157
+ }
3426
2158
  }
3427
- }, [props.mode]);
3428
- return React__default["default"].createElement(React__default["default"].Fragment, null);
2159
+ }, [props.mode, mapHook.map]);
2160
+ return {
2161
+ feature: feature,
2162
+ drawToolsReady: drawToolsReady,
2163
+ draw: draw.current
2164
+ };
2165
+ };
2166
+
2167
+ var MlFeatureEditor = function (props) {
2168
+ useFeatureEditor({
2169
+ mode: props.mode,
2170
+ geojson: props.geojson,
2171
+ onChange: props.onChange,
2172
+ onFinish: props.onFinish,
2173
+ mapId: props.mapId,
2174
+ });
2175
+ return (React__default["default"].createElement(React__default["default"].Fragment, null));
3429
2176
  };
3430
2177
 
3431
2178
  var legalLayerTypes = [
@@ -3571,6 +2318,14 @@ function useLayer(props) {
3571
2318
  layerPaintConfRef.current = paintString;
3572
2319
  }
3573
2320
  }, [props.options, mapHook.map]);
2321
+ React.useEffect(function () {
2322
+ if (!props.insertBeforeLayer ||
2323
+ !mapHook.map ||
2324
+ !mapHook.map.getLayer(props.insertBeforeLayer) ||
2325
+ !mapHook.map.getLayer(layerId.current))
2326
+ return;
2327
+ mapHook.map.moveLayer(layerId.current, props.insertBeforeLayer);
2328
+ }, [mapHook.map, props.insertBeforeLayer]);
3574
2329
  React.useEffect(function () {
3575
2330
  return function () {
3576
2331
  initializedRef.current = false;
@@ -3869,7 +2624,7 @@ function getUnitLabel(measureType) {
3869
2624
  }
3870
2625
  var MlMeasureTool = function (props) {
3871
2626
  var _a = React.useState(0), length = _a[0], setLength = _a[1];
3872
- var _b = React.useState([undefined]), currentFeatures = _b[0], setCurrentFeatures = _b[1];
2627
+ var _b = React.useState([]), currentFeatures = _b[0], setCurrentFeatures = _b[1];
3873
2628
  React.useEffect(function () {
3874
2629
  if (currentFeatures[0]) {
3875
2630
  setLength(props.measureType === "polygon"
@@ -3880,7 +2635,7 @@ var MlMeasureTool = function (props) {
3880
2635
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
3881
2636
  React__default["default"].createElement(MlFeatureEditor, { onChange: function (features) {
3882
2637
  setCurrentFeatures(features);
3883
- }, mode: props.measureType === "polygon" ? "custom_polygon" : "draw_line_string" }),
2638
+ }, mode: props.measureType === "polygon" ? "draw_polygon" : "draw_line_string" }),
3884
2639
  length.toFixed(2),
3885
2640
  " ",
3886
2641
  getUnitLabel(props.unit),
@@ -6429,16 +5184,17 @@ var MlWmsLoader = function (props) {
6429
5184
  setFeatureInfoLngLat(undefined);
6430
5185
  setFeatureInfoContent(undefined);
6431
5186
  };
6432
- var getFeatureInfo = React.useCallback(
6433
- // eslint-disable-next-line @typescript-eslint/ban-types
6434
- function (ev) {
5187
+ var getFeatureInfo = React.useCallback(function (ev) {
6435
5188
  var _a, _b, _c;
6436
5189
  if (!mapHook.map)
6437
5190
  return;
6438
5191
  resetFeatureInfo();
6439
- var _bounds = mapHook.map.getBounds();
6440
- var _sw = lngLatToMeters(_bounds._sw);
6441
- var _ne = lngLatToMeters(_bounds._ne);
5192
+ var unprojected = mapHook.map.unproject([ev.point.x, ev.point.y]);
5193
+ var point = turf__namespace.point([unprojected.lng, unprojected.lat]);
5194
+ var buffered = turf__namespace.buffer(point, 50, { units: 'meters' });
5195
+ var _bbox = turf__namespace.bbox(buffered);
5196
+ var _sw = lngLatToMeters({ lng: _bbox[0], lat: _bbox[1] });
5197
+ var _ne = lngLatToMeters({ lng: _bbox[2], lat: _bbox[3] });
6442
5198
  var bbox = [_sw[0], _sw[1], _ne[0], _ne[1]];
6443
5199
  var _getFeatureInfoUrlParams = {
6444
5200
  REQUEST: 'GetFeatureInfo',
@@ -6454,15 +5210,15 @@ var MlWmsLoader = function (props) {
6454
5210
  QUERY_LAYERS: layers
6455
5211
  .map(function (layer) { return (layer.visible && layer.queryable ? layer.Name : undefined); })
6456
5212
  .filter(function (n) { return n; }),
6457
- WIDTH: mapHook === null || mapHook === void 0 ? void 0 : mapHook.map._container.clientWidth,
6458
- HEIGHT: mapHook === null || mapHook === void 0 ? void 0 : mapHook.map._container.clientHeight,
5213
+ WIDTH: 100,
5214
+ HEIGHT: 100,
6459
5215
  srs: 'EPSG:3857',
6460
5216
  CRS: 'EPSG:3857',
6461
5217
  version: '1.3.0',
6462
- X: ev.point.x,
6463
- Y: ev.point.y,
6464
- I: ev.point.x,
6465
- J: ev.point.y,
5218
+ X: 50,
5219
+ Y: 50,
5220
+ I: 50,
5221
+ J: 50,
6466
5222
  buffer: '50',
6467
5223
  };
6468
5224
  var _gfiUrl = getFeatureInfoUrl;
@@ -6562,6 +5318,7 @@ var MlWmsLoader = function (props) {
6562
5318
  React__default["default"].createElement(material.Box, null, error))),
6563
5319
  wmsUrl && (React__default["default"].createElement(React__default["default"].Fragment, null,
6564
5320
  React__default["default"].createElement(ListItem__default["default"], { secondaryAction: React__default["default"].createElement(React__default["default"].Fragment, null,
5321
+ props.buttons,
6565
5322
  props.featureInfoEnabled && (React__default["default"].createElement(IconButton__default["default"], { sx: {
6566
5323
  padding: '4px',
6567
5324
  marginTop: '-3px',
@@ -7166,11 +5923,11 @@ var MlOrderLayers = function (props) {
7166
5923
  var _a;
7167
5924
  return (React__default["default"].createElement(React__default["default"].Fragment, null, (_a = props === null || props === void 0 ? void 0 : props.layerIds) === null || _a === void 0 ? void 0 : _a.map(function (layer, idx) {
7168
5925
  var _a;
7169
- return (React__default["default"].createElement(MlLayer, __assign({ layerId: 'order-' + layer, options: {
5926
+ return (React__default["default"].createElement(MlLayer, __assign({ layerId: layer, options: {
7170
5927
  display: 'none',
7171
5928
  }, key: layer }, (idx > 0
7172
5929
  ? {
7173
- insertBeforeLayer: 'order-' + ((_a = props === null || props === void 0 ? void 0 : props.layerIds) === null || _a === void 0 ? void 0 : _a[idx - 1]),
5930
+ insertBeforeLayer: (_a = props === null || props === void 0 ? void 0 : props.layerIds) === null || _a === void 0 ? void 0 : _a[idx - 1],
7174
5931
  }
7175
5932
  : { insertBeforeLayer: props.insertBeforeLayer }))));
7176
5933
  })));
@@ -7180,6 +5937,41 @@ MlOrderLayers.defaultProps = {
7180
5937
  insertBeforeLayer: undefined,
7181
5938
  };
7182
5939
 
5940
+ /**
5941
+ * Create Terrain Layer Component
5942
+ *
5943
+ */
5944
+ var MlTerrainLayer = function (props) {
5945
+ var mapHook = useMap({ mapId: 'map_1' });
5946
+ React.useEffect(function () {
5947
+ if (!mapHook.map)
5948
+ return;
5949
+ if (!mapHook.map.map.getSource('terrain')) {
5950
+ mapHook.map.map.addSource('terrain', __assign({ type: 'raster-dem', encoding: 'mapbox', maxzoom: 14, minzoom: 4 }, props.sourceOptions));
5951
+ }
5952
+ mapHook.map.map.setTerrain(__assign({ source: 'terrain', exaggeration: 1 }, props.terrainOptions));
5953
+ mapHook.map.addLayer({
5954
+ id: 'hills',
5955
+ type: 'hillshade',
5956
+ source: 'terrain',
5957
+ layout: { visibility: 'visible' },
5958
+ paint: { 'hillshade-shadow-color': 'rgba(71,59,36,0.4)' },
5959
+ });
5960
+ return function () {
5961
+ var _a, _b;
5962
+ (_a = mapHook.map) === null || _a === void 0 ? void 0 : _a.map.setTerrain(null);
5963
+ if ((_b = mapHook.map) === null || _b === void 0 ? void 0 : _b.map.getSource('terrain')) {
5964
+ mapHook.map.map.removeLayer('hills');
5965
+ mapHook.map.map.removeSource('terrain');
5966
+ }
5967
+ };
5968
+ }, [mapHook.map, props.sourceOptions, props.terrainOptions]);
5969
+ return React__default["default"].createElement(React__default["default"].Fragment, null);
5970
+ };
5971
+ MlTerrainLayer.defaultProps = {
5972
+ mapId: undefined,
5973
+ };
5974
+
7183
5975
  /**
7184
5976
  * Component template
7185
5977
  *
@@ -7782,13 +6574,9 @@ function LayerListItem(_a) {
7782
6574
  return undefined;
7783
6575
  }, [layerComponent]);
7784
6576
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
7785
- !((_f = layerComponent === null || layerComponent === void 0 ? void 0 : layerComponent.props) === null || _f === void 0 ? void 0 : _f.layers) && (React__default["default"].createElement(material.ListItem, { sx: {
7786
- paddingRight: configurable ? '56px' : 0,
7787
- paddingLeft: 0,
7788
- paddingTop: 0,
7789
- paddingBottom: '4px',
7790
- }, secondaryAction: configurable && ((_g = Object.keys(paintProps)) === null || _g === void 0 ? void 0 : _g.length) > 0 ? (React__default["default"].createElement(React__default["default"].Fragment, null,
7791
- React__default["default"].createElement(material.IconButton, { edge: props.showDeleteButton ? false : 'end', "aria-label": "visibility", onClick: function () {
6577
+ !((_f = layerComponent === null || layerComponent === void 0 ? void 0 : layerComponent.props) === null || _f === void 0 ? void 0 : _f.layers) && (React__default["default"].createElement(material.ListItem, { sx: __assign({ paddingRight: configurable ? '56px' : 0, paddingLeft: 0, paddingTop: 0, paddingBottom: '4px' }, props.listItemSx), secondaryAction: configurable && ((_g = Object.keys(paintProps)) === null || _g === void 0 ? void 0 : _g.length) > 0 ? (React__default["default"].createElement(React__default["default"].Fragment, null, props === null || props === void 0 ? void 0 :
6578
+ props.buttons,
6579
+ React__default["default"].createElement(material.IconButton, { edge: props.showDeleteButton ? false : 'end', "aria-label": "settings", onClick: function () {
7792
6580
  setPaintPropsFormVisible(function (current) {
7793
6581
  return !current;
7794
6582
  });
@@ -7817,7 +6605,7 @@ function LayerListItem(_a) {
7817
6605
  React__default["default"].createElement(material.Checkbox, { disabled: !visible, checked: localVisible, sx: { padding: 0 }, onClick: function () {
7818
6606
  setLocalVisible(function (val) { return !val; });
7819
6607
  } })),
7820
- React__default["default"].createElement(material.ListItemText, { variant: "layerlist", primary: name, secondary: description }))),
6608
+ React__default["default"].createElement(material.ListItemText, { variant: "layerlist", primary: name, secondary: description, primaryTypographyProps: { overflow: 'hidden' } }))),
7821
6609
  _layerComponent,
7822
6610
  !((_h = layerComponent === null || layerComponent === void 0 ? void 0 : layerComponent.props) === null || _h === void 0 ? void 0 : _h.layers) &&
7823
6611
  Object.keys(paintProps).length > 0 &&
@@ -7829,26 +6617,68 @@ LayerListItem.defaultProps = {
7829
6617
  type: 'layer',
7830
6618
  visible: true,
7831
6619
  showDeleteButton: false,
6620
+ buttons: React__default["default"].createElement(React__default["default"].Fragment, null),
7832
6621
  };
7833
6622
 
7834
6623
  function LayerListItemFactory(props) {
7835
6624
  var _a, _b;
7836
6625
  var layerContext = useLayerContext();
6626
+ var orderLayers = React.useMemo(function () {
6627
+ var layerIds = __spreadArray(__spreadArray([
6628
+ 'order-background'
6629
+ ], __spreadArray([], layerContext.layers, true).map(function (_el, idx) { return 'content_order_' + idx; }), true), [
6630
+ 'order-labels',
6631
+ ], false);
6632
+ return layerIds.reverse();
6633
+ }, [layerContext.layers]);
6634
+ var layers = React.useMemo(function () {
6635
+ if (props.layers)
6636
+ return props.layers;
6637
+ if (layerContext === null || layerContext === void 0 ? void 0 : layerContext.layers)
6638
+ return layerContext.layers;
6639
+ return [];
6640
+ }, [props.layers, layerContext.layers]);
6641
+ var setLayers = React.useMemo(function () {
6642
+ if (props.setLayers)
6643
+ return props.setLayers;
6644
+ return layerContext.setLayers;
6645
+ }, [props.setLayers, layerContext.setLayers]);
7837
6646
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
7838
- React__default["default"].createElement(MlOrderLayers, { layerIds: ['labels', 'content', 'background'] }),
7839
- ((_a = layerContext === null || layerContext === void 0 ? void 0 : layerContext.backgroundLayers) === null || _a === void 0 ? void 0 : _a.length) > 0 && (React__default["default"].createElement(LayerListItem, { layerComponent: React__default["default"].createElement(MlVectorTileLayer, __assign({}, layerContext.vtLayerConfig, { layers: layerContext.backgroundLayers, mapId: props === null || props === void 0 ? void 0 : props.mapId, insertBeforeLayer: 'order-background' })), setLayerState: function (state) {
7840
- layerContext.setBackgroundLayers(state === null || state === void 0 ? void 0 : state.layers);
7841
- }, visible: true, configurable: true, type: "layer", name: "Background" })),
7842
- props.layers.map(function (layer, idx) {
6647
+ React__default["default"].createElement(MlOrderLayers, { layerIds: orderLayers, insertBeforeLayer: '_background' }),
6648
+ ((_a = layerContext === null || layerContext === void 0 ? void 0 : layerContext.symbolLayers) === null || _a === void 0 ? void 0 : _a.length) > 0 && (React__default["default"].createElement(LayerListItem, { key: 'background_labels', layerComponent: React__default["default"].createElement(MlVectorTileLayer, __assign({}, layerContext.vtLayerConfig, { layers: layerContext.symbolLayers, mapId: props === null || props === void 0 ? void 0 : props.mapId, insertBeforeLayer: 'order-labels' })), setLayerState: function (state) {
6649
+ return layerContext.setSymbolLayers(state === null || state === void 0 ? void 0 : state.layers);
6650
+ }, visible: true, configurable: true, type: "layer", name: "Labels" })),
6651
+ __spreadArray([], layers, true).map(function (layer, idx) {
7843
6652
  var _a, _b;
7844
6653
  if (!(layer === null || layer === void 0 ? void 0 : layer.id))
7845
6654
  return null;
7846
6655
  switch (layer.type) {
7847
6656
  case 'geojson':
7848
6657
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
7849
- React__default["default"].createElement(LayerListItem, { key: layer.id, name: (layer === null || layer === void 0 ? void 0 : layer.name) || ((_a = layer === null || layer === void 0 ? void 0 : layer.config) === null || _a === void 0 ? void 0 : _a.type) + ' layer' || 'unnamed layer', layerComponent: React__default["default"].createElement(MlGeoJsonLayer, __assign({}, layer.config, { mapId: props === null || props === void 0 ? void 0 : props.mapId, insertBeforeLayer: (props === null || props === void 0 ? void 0 : props.insertBeforeLayer) || 'order-content' })), setLayerState: function (layerConfig) {
7850
- var _a;
7851
- return (_a = props.setLayers) === null || _a === void 0 ? void 0 : _a.call(props, function (current) {
6658
+ React__default["default"].createElement(LayerListItem, { key: layer.id, name: (layer === null || layer === void 0 ? void 0 : layer.name) || ((_a = layer === null || layer === void 0 ? void 0 : layer.config) === null || _a === void 0 ? void 0 : _a.type) + ' layer' || 'unnamed layer', layerComponent: React__default["default"].createElement(MlGeoJsonLayer, __assign({}, layer.config, { mapId: props === null || props === void 0 ? void 0 : props.mapId, layerId: layer.id, insertBeforeLayer: 'content_order_' + (layers.length - 1 - idx) })), buttons: React__default["default"].createElement(React__default["default"].Fragment, null,
6659
+ React__default["default"].createElement(material.IconButton, { disabled: idx === layers.length - 1, onClick: function () {
6660
+ layerContext.moveDown(layer.id || '');
6661
+ }, sx: {
6662
+ padding: '4px',
6663
+ marginTop: '-3px',
6664
+ background: 'none',
6665
+ "&:hover": {
6666
+ background: "none"
6667
+ }
6668
+ } },
6669
+ React__default["default"].createElement(ArrowCircleDownIcon__default["default"], null)),
6670
+ React__default["default"].createElement(material.IconButton, { disabled: idx === 0, onClick: function () {
6671
+ layerContext.moveUp(layer.id || '');
6672
+ }, sx: {
6673
+ padding: '4px',
6674
+ marginTop: '-3px',
6675
+ background: 'none',
6676
+ "&:hover": {
6677
+ background: "none"
6678
+ }
6679
+ } },
6680
+ React__default["default"].createElement(ArrowCircleUpIcon__default["default"], null))), setLayerState: function (layerConfig) {
6681
+ return setLayers === null || setLayers === void 0 ? void 0 : setLayers(function (current) {
7852
6682
  var _layers = __spreadArray([], current, true);
7853
6683
  if (layerConfig === false) {
7854
6684
  _layers.splice(idx, 1);
@@ -7861,9 +6691,8 @@ function LayerListItemFactory(props) {
7861
6691
  }, configurable: true, showDeleteButton: true })));
7862
6692
  case 'wms':
7863
6693
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
7864
- React__default["default"].createElement(MlWmsLoader, __assign({}, layer.config, { key: layer.id, mapId: props === null || props === void 0 ? void 0 : props.mapId, insertBeforeLayer: (props === null || props === void 0 ? void 0 : props.insertBeforeLayer) || 'order-content', onConfigChange: function (layerConfig) {
7865
- var _a;
7866
- (_a = props === null || props === void 0 ? void 0 : props.setLayers) === null || _a === void 0 ? void 0 : _a.call(props, function (current) {
6694
+ React__default["default"].createElement(MlWmsLoader, __assign({}, layer.config, { key: layer.id, mapId: props === null || props === void 0 ? void 0 : props.mapId, insertBeforeLayer: 'content_order_' + (layers.length - 1 - idx), onConfigChange: function (layerConfig) {
6695
+ setLayers === null || setLayers === void 0 ? void 0 : setLayers(function (current) {
7867
6696
  var _layers = __spreadArray([], current, true);
7868
6697
  if (layerConfig === false) {
7869
6698
  _layers.splice(idx, 1);
@@ -7874,27 +6703,48 @@ function LayerListItemFactory(props) {
7874
6703
  return _layers;
7875
6704
  });
7876
6705
  }, featureInfoActive: ((_b = layer === null || layer === void 0 ? void 0 : layer.config) === null || _b === void 0 ? void 0 : _b.featureInfoActive) || false, setFeatureInfoActive: function (updateFunction) {
7877
- var _a;
7878
- (_a = props === null || props === void 0 ? void 0 : props.setLayers) === null || _a === void 0 ? void 0 : _a.call(props, function (current) {
6706
+ setLayers === null || setLayers === void 0 ? void 0 : setLayers(function (current) {
7879
6707
  var _a;
7880
6708
  var _layers = __spreadArray([], current, true);
7881
6709
  if (typeof updateFunction === 'function') {
7882
- _layers[idx].config.featureInfoActive = updateFunction(((_a = _layers[idx].config) === null || _a === void 0 ? void 0 : _a.featureInfoActive) || false);
6710
+ _layers[idx].config.featureInfoActive =
6711
+ updateFunction(((_a = _layers[idx].config) === null || _a === void 0 ? void 0 : _a.featureInfoActive) || false);
7883
6712
  }
7884
6713
  return _layers;
7885
6714
  });
7886
- }, showDeleteButton: true }))));
6715
+ }, showDeleteButton: true, buttons: React__default["default"].createElement(React__default["default"].Fragment, null,
6716
+ React__default["default"].createElement(material.IconButton, { disabled: idx === layers.length - 1, onClick: function () {
6717
+ layerContext.moveDown(layer.id || '');
6718
+ }, sx: {
6719
+ padding: '4px',
6720
+ marginTop: '-3px',
6721
+ background: 'none',
6722
+ "&:hover": {
6723
+ background: "none"
6724
+ }
6725
+ } },
6726
+ React__default["default"].createElement(ArrowCircleDownIcon__default["default"], null)),
6727
+ React__default["default"].createElement(material.IconButton, { disabled: idx === 0, onClick: function () {
6728
+ layerContext.moveUp(layer.id || '');
6729
+ }, sx: {
6730
+ padding: '4px',
6731
+ marginTop: '-3px',
6732
+ background: 'none',
6733
+ "&:hover": {
6734
+ background: "none"
6735
+ }
6736
+ } },
6737
+ React__default["default"].createElement(ArrowCircleUpIcon__default["default"], null))) }))));
7887
6738
  default:
7888
6739
  return null;
7889
6740
  }
7890
6741
  }),
7891
- ((_b = layerContext === null || layerContext === void 0 ? void 0 : layerContext.symbolLayers) === null || _b === void 0 ? void 0 : _b.length) > 0 && (React__default["default"].createElement(LayerListItem, { layerComponent: React__default["default"].createElement(MlVectorTileLayer, __assign({}, layerContext.vtLayerConfig, { layers: layerContext.symbolLayers, mapId: props === null || props === void 0 ? void 0 : props.mapId, insertBeforeLayer: 'order-labels' })), setLayerState: function (state) {
7892
- return layerContext.setSymbolLayers(state === null || state === void 0 ? void 0 : state.layers);
7893
- }, visible: true, configurable: true, type: "layer", name: "Labels" }))));
6742
+ ((_b = layerContext === null || layerContext === void 0 ? void 0 : layerContext.backgroundLayers) === null || _b === void 0 ? void 0 : _b.length) > 0 && (React__default["default"].createElement(LayerListItem, { key: 'background_geometry', layerComponent: React__default["default"].createElement(MlVectorTileLayer, __assign({}, layerContext.vtLayerConfig, { layers: layerContext.backgroundLayers, mapId: props === null || props === void 0 ? void 0 : props.mapId, insertBeforeLayer: 'order-background' })), setLayerState: function (state) {
6743
+ layerContext.setBackgroundLayers(state === null || state === void 0 ? void 0 : state.layers);
6744
+ }, visible: true, configurable: true, type: "layer", name: "Background" }))));
7894
6745
  }
7895
6746
  LayerListItemFactory.defaultProps = {
7896
6747
  mapId: undefined,
7897
- layers: [],
7898
6748
  };
7899
6749
 
7900
6750
  var types = [
@@ -20987,6 +19837,40 @@ SelectStyleButton.defaultProps = {
20987
19837
  defaultStyles: true,
20988
19838
  };
20989
19839
 
19840
+ var actions = [
19841
+ { icon: React__default["default"].createElement(PictureAsPdfIcon__default["default"], null), name: 'Create PDF' },
19842
+ { icon: React__default["default"].createElement(DesignServicesIcon__default["default"], null), name: 'Sketch' },
19843
+ { icon: React__default["default"].createElement(LayersIcon__default["default"], null), name: 'Layers' },
19844
+ { icon: React__default["default"].createElement(WallpaperIcon__default["default"], null), name: 'Background' },
19845
+ ];
19846
+ /*
19847
+ * SpeedDial Button, which opens up options for Background, Layers, Sketch and Create PDF
19848
+ */
19849
+ var SpeedDial = function () {
19850
+ var _a = React.useState(false), open = _a[0], setOpen = _a[1];
19851
+ var handleOpen = function (_event, reason) {
19852
+ if (reason === 'toggle') {
19853
+ setOpen(true);
19854
+ }
19855
+ };
19856
+ var handleClose = function () { return setOpen(false); };
19857
+ var theme = getTheme('light');
19858
+ return (React__default["default"].createElement(Box__default["default"], { sx: {
19859
+ height: 330,
19860
+ transform: 'translateZ(0px)',
19861
+ flexGrow: 1,
19862
+ position: 'absolute',
19863
+ bottom: 0,
19864
+ right: 0,
19865
+ width: '100px',
19866
+ zIndex: '1000',
19867
+ } },
19868
+ React__default["default"].createElement(MuiSpeedDial__default["default"], { ariaLabel: "SpeedDial tooltip example", sx: { position: 'absolute', bottom: 16, right: 16 }, icon: open ? React__default["default"].createElement(CloseIcon__default["default"], null) : React__default["default"].createElement(MoreVertIcon__default["default"], null), onClick: open ? handleClose : handleOpen, onOpen: handleOpen, open: open }, actions.map(function (action) { return (React__default["default"].createElement(SpeedDialAction__default["default"], { key: action.name, icon: action.icon, tooltipTitle: action.name, tooltipOpen: true, onClick: handleClose, FabProps: { sx: { color: theme.palette.secondary.main } } })); }))));
19869
+ };
19870
+ SpeedDial.defaultProps = {
19871
+ mapId: undefined,
19872
+ };
19873
+
20990
19874
  exports.AddLayerButton = AddLayerButton;
20991
19875
  exports.AddLayerPopup = AddLayerPopup;
20992
19876
  exports.ColorPicker = PaintPropsColorPicker;
@@ -21034,6 +19918,7 @@ exports.MlScaleReference = MlScaleReference;
21034
19918
  exports.MlShareMapState = MlShareMapState;
21035
19919
  exports.MlSpatialElevationProfile = MlSpatialElevationProfile;
21036
19920
  exports.MlTemporalController = MlTemporalController;
19921
+ exports.MlTerrainLayer = MlTerrainLayer;
21037
19922
  exports.MlTransitionGeoJsonLayer = MlTransitionGeoJsonLayer;
21038
19923
  exports.MlVectorTileLayer = MlVectorTileLayer;
21039
19924
  exports.MlWmsFeatureInfoPopup = MlWmsFeatureInfoPopup;
@@ -21049,12 +19934,14 @@ exports.Sidebar = Sidebar;
21049
19934
  exports.SimpleDataContext = SimpleDataContext;
21050
19935
  exports.SimpleDataProvider = SimpleDataProvider;
21051
19936
  exports.SolarizedStyle = SolarizedStyle;
19937
+ exports.SpeedDial = SpeedDial;
21052
19938
  exports.TopToolbar = TopToolbar;
21053
19939
  exports.UploadButton = UploadButton;
21054
19940
  exports.WmsLayerForm = WmsLayerForm;
21055
19941
  exports.getTheme = getTheme;
21056
19942
  exports.useCameraFollowPath = useCameraFollowPath;
21057
19943
  exports.useExportMap = useExportMap;
19944
+ exports.useFeatureEditor = useFeatureEditor;
21058
19945
  exports.useFilterData = useFilterData;
21059
19946
  exports.useGpx = useGpx;
21060
19947
  exports.useLayer = useLayer;