@opengeoweb/core 8.3.0 → 8.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.esm.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import React__default, { forwardRef, useContext, useCallback, useEffect, createElement, PureComponent,
|
|
2
|
+
import React__default, { useState, forwardRef, useContext, useCallback, useEffect, createElement, PureComponent, useRef, useLayoutEffect } from 'react';
|
|
3
3
|
import { Grid, Box as Box$2, MenuItem, Typography, useTheme as useTheme$2, Button, Popper, ListItemText, ListItemIcon, FormControl, InputLabel, Paper, List, ListItemButton, CircularProgress, ListSubheader, Dialog, DialogTitle, DialogContent, DialogContentText, TextField, InputAdornment, DialogActions, LinearProgress, Backdrop, ListItem, ListItemSecondaryAction, Checkbox, Switch, styled as styled$1, Slider, Menu, Card, IconButton, Select, CardContent, RadioGroup, FormControlLabel, Radio, ToggleButtonGroup, ToggleButton, Divider, Tooltip, ButtonGroup, Snackbar } from '@mui/material';
|
|
4
4
|
import { CustomIconButton, TooltipSelect, AlertIcon, useControlledTooltip, CustomTooltip, tooltipContainerStyles, sliderHeaderStyle, CustomSlider, ToggleMenu, AlertBanner, CustomAccordion, ToolContainerDraggable, calculateStartSize, CustomToggleButton, SearchHighlight, dateUtils, useMakeSureContainerStaysInsideWindow, withEggs } from '@opengeoweb/shared';
|
|
5
5
|
import { CollapseSmall, CollapseMedium, CollapseLarge, CollapseWindow, ExpandWindow, LayersAdd, Copy, None, FastForward, AutoUpdateActive, Both, Info, Visibility, VisibilityOff, Delete, DimensionsOther, DimensionsElevation, DimensionsRefTime, DimensionsTime, DragHandle as DragHandle$1, Cached, Add, MapAdd, Filter, Search, Clear, Edit, Close, Layers, Equalizer, Link, LinkOff, AutoUpdateInActive, Speed, Clock, Now, Animation, Options, Pause, Play, StepForward, StepBackward, dragHandlePath, ChevronDown, ChevronUp, List as List$1, ChevronRight, ChevronLeft, Resize, ExitDomain, ThemeWrapper, lightTheme } from '@opengeoweb/theme';
|
|
6
6
|
import { useDispatch, useSelector, connect, Provider } from 'react-redux';
|
|
7
7
|
import { uiTypes, uiSelectors, uiActions, layerTypes, layerUtils, layerActions, layerSelectors, serviceSelectors, serviceActions, mapSelectors, mapActions, mapEnums, mapConstants, layerSelectSelectors, layerSelectActions, filterLayers, getUserAddedServices, storeUtils, snackbarActions, layerSelectTypes, mapUtils, genericActions, syncConstants, defaultLayers, mapStoreActions, getSingularDrawtoolDrawLayerId, syncGroupsSelectors, syncGroupsSelector, snackbarModuleConfig, snackbarSelectors, coreModuleConfig, routerUtils, routerModuleConfig, appModuleConfig, appActions } from '@opengeoweb/store';
|
|
8
8
|
import { ReactSortable } from 'react-sortablejs';
|
|
9
|
-
import {
|
|
9
|
+
import { WMGetServiceFromStore, getCapabilities, webmapUtils, LayerType, clearImageCache, WMLayer } from '@opengeoweb/webmap';
|
|
10
10
|
import { jsx } from 'react/jsx-runtime';
|
|
11
11
|
import Box$3 from '@mui/material/Box';
|
|
12
12
|
import Typography$1 from '@mui/material/Typography';
|
|
@@ -14,13 +14,12 @@ import Grid$1 from '@mui/material/Grid';
|
|
|
14
14
|
import { LegendLayout, MapControlButton, ZoomControls, CanvasComponent, MapView, MapViewLayer, LegendDialog, emptyGeoJSON, MapControls, publicLayers } from '@opengeoweb/webmap-react';
|
|
15
15
|
import _, { isEqual as isEqual$1, debounce, groupBy, throttle as throttle$1, range } from 'lodash';
|
|
16
16
|
import { ReactHookFormProvider, defaultFormOptions, ReactHookFormTextField } from '@opengeoweb/form-fields';
|
|
17
|
+
import { useFormContext } from 'react-hook-form';
|
|
17
18
|
import moment from 'moment';
|
|
18
19
|
import Draggable from 'react-draggable';
|
|
19
20
|
import { flushSync } from 'react-dom';
|
|
20
21
|
import axios from 'axios';
|
|
21
22
|
import { useDebounce } from '@opengeoweb/api';
|
|
22
|
-
import { createStore } from '@redux-eggs/redux-toolkit';
|
|
23
|
-
import { getSagaExtension } from '@redux-eggs/saga-extension';
|
|
24
23
|
|
|
25
24
|
function _iterableToArrayLimit(r, l) {
|
|
26
25
|
var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
@@ -3915,93 +3914,40 @@ Sortable.mount(new AutoScrollPlugin());
|
|
|
3915
3914
|
Sortable.mount(Remove, Revert);
|
|
3916
3915
|
|
|
3917
3916
|
var DimensionSelect = function DimensionSelect(_ref) {
|
|
3918
|
-
var
|
|
3919
|
-
onLayerChangeDimension = _ref.onLayerChangeDimension,
|
|
3917
|
+
var onLayerChangeDimension = _ref.onLayerChangeDimension,
|
|
3920
3918
|
_ref$layerDimensions = _ref.layerDimensions,
|
|
3921
3919
|
layerDimensions = _ref$layerDimensions === void 0 ? [] : _ref$layerDimensions,
|
|
3922
|
-
isEnabled = _ref.isEnabled,
|
|
3920
|
+
_ref$isEnabled = _ref.isEnabled,
|
|
3921
|
+
isEnabled = _ref$isEnabled === void 0 ? false : _ref$isEnabled,
|
|
3923
3922
|
icon = _ref.icon,
|
|
3924
3923
|
nameMappings = _ref.nameMappings,
|
|
3925
3924
|
valueMappings = _ref.valueMappings,
|
|
3926
3925
|
_ref$tooltipPrefix = _ref.tooltipPrefix,
|
|
3927
|
-
tooltipPrefix = _ref$tooltipPrefix === void 0 ? 'Dimensions: ' : _ref$tooltipPrefix
|
|
3928
|
-
|
|
3929
|
-
|
|
3930
|
-
|
|
3931
|
-
|
|
3932
|
-
|
|
3933
|
-
|
|
3934
|
-
|
|
3935
|
-
|
|
3936
|
-
if (!activeDim) {
|
|
3937
|
-
setActiveDimName(layerDimensions.length ? layerDimensions[0].name : '');
|
|
3938
|
-
}
|
|
3939
|
-
}, [layerDimensions, activeDimName]);
|
|
3940
|
-
React.useEffect(function () {
|
|
3941
|
-
var activeDim = layerDimensions.find(function (d) {
|
|
3942
|
-
return d.name === activeDimName;
|
|
3943
|
-
});
|
|
3944
|
-
if (activeDim) {
|
|
3945
|
-
onLayerChangeDimension(activeDim.name, activeDim.currentValue);
|
|
3946
|
-
}
|
|
3947
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
3948
|
-
}, []);
|
|
3949
|
-
if (!layerDimensions.length || !layerId) {
|
|
3950
|
-
return null;
|
|
3951
|
-
}
|
|
3952
|
-
var getValuesToDisplay = function getValuesToDisplay() {
|
|
3953
|
-
var activeWMJSDim = webmapUtils.getWMJSDimensionForLayerAndDimension(layerId, activeDimName) || webmapUtils.getWMJSDimensionForLayerAndDimension(layerId, layerDimensions[0].name);
|
|
3954
|
-
if (!activeWMJSDim) {
|
|
3955
|
-
return null;
|
|
3956
|
-
}
|
|
3957
|
-
var availableDimValues = [];
|
|
3958
|
-
for (var j = 0; j < activeWMJSDim.size(); j += 1) {
|
|
3959
|
-
availableDimValues.push(activeWMJSDim.getValueForIndex(j));
|
|
3960
|
-
}
|
|
3961
|
-
availableDimValues.reverse();
|
|
3962
|
-
// Only display last 100 values, to avoid performance issues
|
|
3963
|
-
// TODO: (2020-06-29 Tineke van Rijn) replace this with lazy loading
|
|
3964
|
-
return availableDimValues.slice(0, 100);
|
|
3965
|
-
};
|
|
3966
|
-
var valuesToDisplay = getValuesToDisplay();
|
|
3967
|
-
if (valuesToDisplay === null) {
|
|
3968
|
-
return null;
|
|
3969
|
-
}
|
|
3970
|
-
var activeDim = layerDimensions.find(function (dim) {
|
|
3971
|
-
return dim.name === activeDimName;
|
|
3972
|
-
});
|
|
3973
|
-
if (!activeDim) {
|
|
3974
|
-
return null;
|
|
3975
|
-
}
|
|
3976
|
-
var selectDimensionValue = function selectDimensionValue(event) {
|
|
3977
|
-
event.stopPropagation();
|
|
3978
|
-
if (activeDim) {
|
|
3979
|
-
onLayerChangeDimension(activeDim.name, event.target.value, layerTypes.LayerActionOrigin.layerManager);
|
|
3980
|
-
}
|
|
3981
|
-
};
|
|
3982
|
-
var onChangeActiveDimensionName = function onChangeActiveDimensionName(event) {
|
|
3983
|
-
event.stopPropagation();
|
|
3984
|
-
setActiveDimName(event.target.value);
|
|
3985
|
-
};
|
|
3986
|
-
var dimNameList = layerDimensions.map(function (dimension) {
|
|
3987
|
-
return {
|
|
3988
|
-
value: dimension.name
|
|
3989
|
-
};
|
|
3990
|
-
});
|
|
3991
|
-
var dimNameCurrentIndex = layerDimensions.findIndex(function (value) {
|
|
3992
|
-
return value.name === activeDim.name;
|
|
3993
|
-
});
|
|
3994
|
-
var dimValueList = valuesToDisplay.map(function (value) {
|
|
3995
|
-
return {
|
|
3996
|
-
value: value
|
|
3997
|
-
};
|
|
3926
|
+
tooltipPrefix = _ref$tooltipPrefix === void 0 ? 'Dimensions: ' : _ref$tooltipPrefix,
|
|
3927
|
+
SingleValueComponent = _ref.SingleValueComponent;
|
|
3928
|
+
var _a, _b;
|
|
3929
|
+
var _useState = useState((_a = layerDimensions === null || layerDimensions === void 0 ? void 0 : layerDimensions[0]) === null || _a === void 0 ? void 0 : _a.name),
|
|
3930
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
3931
|
+
selectedDimensionName = _useState2[0],
|
|
3932
|
+
setSelectedDimensionName = _useState2[1];
|
|
3933
|
+
var selectedDimension = layerDimensions.find(function (dimension) {
|
|
3934
|
+
return dimension.name === selectedDimensionName;
|
|
3998
3935
|
});
|
|
3999
|
-
var
|
|
4000
|
-
return
|
|
3936
|
+
var dimensionNames = layerDimensions.map(function (dimension) {
|
|
3937
|
+
return dimension.name;
|
|
4001
3938
|
});
|
|
4002
|
-
|
|
3939
|
+
var selectedDimensionDoesntExist = !dimensionNames.includes(selectedDimensionName);
|
|
3940
|
+
React.useEffect(function () {
|
|
3941
|
+
var _a, _b;
|
|
3942
|
+
if (selectedDimensionDoesntExist) {
|
|
3943
|
+
setSelectedDimensionName((_b = (_a = layerDimensions === null || layerDimensions === void 0 ? void 0 : layerDimensions[0]) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : '');
|
|
3944
|
+
}
|
|
3945
|
+
}, [layerDimensions, selectedDimensionDoesntExist]);
|
|
3946
|
+
if (selectedDimensionDoesntExist) {
|
|
4003
3947
|
return null;
|
|
4004
3948
|
}
|
|
3949
|
+
var collapseDimensionDropdown = SingleValueComponent && layerDimensions.length === 1;
|
|
3950
|
+
var collapseValueDropdown = SingleValueComponent && ((_b = selectedDimension === null || selectedDimension === void 0 ? void 0 : selectedDimension.values) === null || _b === void 0 ? void 0 : _b.length) === 1;
|
|
4005
3951
|
return /*#__PURE__*/React.createElement(Grid, {
|
|
4006
3952
|
container: true,
|
|
4007
3953
|
direction: "row",
|
|
@@ -4010,21 +3956,63 @@ var DimensionSelect = function DimensionSelect(_ref) {
|
|
|
4010
3956
|
}, /*#__PURE__*/React.createElement(Grid, {
|
|
4011
3957
|
item: true,
|
|
4012
3958
|
xs: 12
|
|
4013
|
-
}, /*#__PURE__*/React.createElement(
|
|
3959
|
+
}, collapseDimensionDropdown ? /*#__PURE__*/React.createElement(SingleValueComponent, Object.assign({}, layerDimensions[0], {
|
|
3960
|
+
nameMappings: nameMappings,
|
|
3961
|
+
valueMappings: valueMappings,
|
|
3962
|
+
position: "dimension"
|
|
3963
|
+
})) : /*#__PURE__*/React.createElement(SelectDimension, {
|
|
3964
|
+
selectedDimensionName: selectedDimensionName,
|
|
3965
|
+
setSelectedDimensionName: setSelectedDimensionName,
|
|
3966
|
+
dimensionNames: dimensionNames,
|
|
3967
|
+
tooltipPrefix: tooltipPrefix,
|
|
3968
|
+
isEnabled: isEnabled,
|
|
3969
|
+
icon: icon,
|
|
3970
|
+
nameMappings: nameMappings
|
|
3971
|
+
}), collapseValueDropdown ? /*#__PURE__*/React.createElement(SingleValueComponent, Object.assign({}, layerDimensions[0], {
|
|
3972
|
+
nameMappings: nameMappings,
|
|
3973
|
+
valueMappings: valueMappings,
|
|
3974
|
+
position: "value"
|
|
3975
|
+
})) : /*#__PURE__*/React.createElement(SelectDimensionValue, {
|
|
3976
|
+
selectedDimension: selectedDimension,
|
|
3977
|
+
onLayerChangeDimension: onLayerChangeDimension,
|
|
3978
|
+
tooltipPrefix: tooltipPrefix,
|
|
3979
|
+
isEnabled: isEnabled,
|
|
3980
|
+
icon: icon,
|
|
3981
|
+
valueMappings: valueMappings
|
|
3982
|
+
})));
|
|
3983
|
+
};
|
|
3984
|
+
var SelectDimension = function SelectDimension(_ref2) {
|
|
3985
|
+
var selectedDimensionName = _ref2.selectedDimensionName,
|
|
3986
|
+
setSelectedDimensionName = _ref2.setSelectedDimensionName,
|
|
3987
|
+
icon = _ref2.icon,
|
|
3988
|
+
nameMappings = _ref2.nameMappings,
|
|
3989
|
+
tooltipPrefix = _ref2.tooltipPrefix,
|
|
3990
|
+
isEnabled = _ref2.isEnabled,
|
|
3991
|
+
dimensionNames = _ref2.dimensionNames;
|
|
3992
|
+
return /*#__PURE__*/React.createElement(TooltipSelect, {
|
|
4014
3993
|
disableUnderline: true,
|
|
4015
|
-
tooltip: "".concat(tooltipPrefix).concat(
|
|
3994
|
+
tooltip: "".concat(tooltipPrefix).concat(selectedDimensionName),
|
|
4016
3995
|
inputProps: {
|
|
4017
3996
|
SelectDisplayProps: {
|
|
4018
3997
|
'data-testid': 'selectDimension'
|
|
4019
3998
|
}
|
|
4020
3999
|
},
|
|
4021
4000
|
isEnabled: isEnabled,
|
|
4022
|
-
value:
|
|
4023
|
-
list:
|
|
4024
|
-
|
|
4025
|
-
|
|
4026
|
-
|
|
4027
|
-
|
|
4001
|
+
value: selectedDimensionName,
|
|
4002
|
+
list: dimensionNames.map(function (name) {
|
|
4003
|
+
return {
|
|
4004
|
+
value: name
|
|
4005
|
+
};
|
|
4006
|
+
}),
|
|
4007
|
+
currentIndex: dimensionNames.findIndex(function (name) {
|
|
4008
|
+
return name === selectedDimensionName;
|
|
4009
|
+
}),
|
|
4010
|
+
onChange: function onChange(event) {
|
|
4011
|
+
event.stopPropagation();
|
|
4012
|
+
setSelectedDimensionName(event.target.value);
|
|
4013
|
+
},
|
|
4014
|
+
onChangeMouseWheel: function onChangeMouseWheel(event) {
|
|
4015
|
+
setSelectedDimensionName(event.value);
|
|
4028
4016
|
},
|
|
4029
4017
|
style: {
|
|
4030
4018
|
maxWidth: '50%'
|
|
@@ -4032,14 +4020,31 @@ var DimensionSelect = function DimensionSelect(_ref) {
|
|
|
4032
4020
|
IconComponent: icon
|
|
4033
4021
|
}, /*#__PURE__*/React.createElement(MenuItem, {
|
|
4034
4022
|
disabled: true
|
|
4035
|
-
}, "Dimension"),
|
|
4023
|
+
}, "Dimension"), dimensionNames.map(function (name) {
|
|
4036
4024
|
return /*#__PURE__*/React.createElement(MenuItem, {
|
|
4037
|
-
key:
|
|
4038
|
-
value:
|
|
4039
|
-
}, nameMappings
|
|
4040
|
-
}))
|
|
4025
|
+
key: name,
|
|
4026
|
+
value: name
|
|
4027
|
+
}, (nameMappings === null || nameMappings === void 0 ? void 0 : nameMappings[name]) || name);
|
|
4028
|
+
}));
|
|
4029
|
+
};
|
|
4030
|
+
var SelectDimensionValue = function SelectDimensionValue(_ref3) {
|
|
4031
|
+
var isEnabled = _ref3.isEnabled,
|
|
4032
|
+
tooltipPrefix = _ref3.tooltipPrefix,
|
|
4033
|
+
selectedDimension = _ref3.selectedDimension,
|
|
4034
|
+
icon = _ref3.icon,
|
|
4035
|
+
onLayerChangeDimension = _ref3.onLayerChangeDimension,
|
|
4036
|
+
valueMappings = _ref3.valueMappings;
|
|
4037
|
+
var _a;
|
|
4038
|
+
var dimensionValues = (_a = selectedDimension === null || selectedDimension === void 0 ? void 0 : selectedDimension.values) === null || _a === void 0 ? void 0 : _a.split(',').slice(0, 100).reverse();
|
|
4039
|
+
if (!(selectedDimension === null || selectedDimension === void 0 ? void 0 : selectedDimension.name) || !(dimensionValues === null || dimensionValues === void 0 ? void 0 : dimensionValues.length)) {
|
|
4040
|
+
return null;
|
|
4041
|
+
}
|
|
4042
|
+
var setDimensionValue = function setDimensionValue(dimensionValue) {
|
|
4043
|
+
onLayerChangeDimension(selectedDimension.name, dimensionValue, layerTypes.LayerActionOrigin.layerManager);
|
|
4044
|
+
};
|
|
4045
|
+
return /*#__PURE__*/React.createElement(TooltipSelect, {
|
|
4041
4046
|
disableUnderline: true,
|
|
4042
|
-
tooltip: "".concat(tooltipPrefix).concat(
|
|
4047
|
+
tooltip: "".concat(tooltipPrefix).concat(selectedDimension.name, " ").concat(selectedDimension.currentValue, " ").concat(selectedDimension.units),
|
|
4043
4048
|
inputProps: {
|
|
4044
4049
|
SelectDisplayProps: {
|
|
4045
4050
|
'data-testid': 'selectDimensionValue'
|
|
@@ -4047,12 +4052,21 @@ var DimensionSelect = function DimensionSelect(_ref) {
|
|
|
4047
4052
|
'data-testid': 'selectDimensionValue-input'
|
|
4048
4053
|
},
|
|
4049
4054
|
isEnabled: isEnabled,
|
|
4050
|
-
value:
|
|
4051
|
-
list:
|
|
4052
|
-
|
|
4053
|
-
|
|
4054
|
-
|
|
4055
|
-
|
|
4055
|
+
value: selectedDimension.currentValue,
|
|
4056
|
+
list: dimensionValues.map(function (dimensionValue) {
|
|
4057
|
+
return {
|
|
4058
|
+
value: dimensionValue
|
|
4059
|
+
};
|
|
4060
|
+
}),
|
|
4061
|
+
currentIndex: dimensionValues.findIndex(function (dimensionValue) {
|
|
4062
|
+
return dimensionValue === selectedDimension.currentValue;
|
|
4063
|
+
}),
|
|
4064
|
+
onChange: function onChange(event) {
|
|
4065
|
+
event.stopPropagation();
|
|
4066
|
+
setDimensionValue(event.target.value);
|
|
4067
|
+
},
|
|
4068
|
+
onChangeMouseWheel: function onChangeMouseWheel(event) {
|
|
4069
|
+
setDimensionValue(event.value);
|
|
4056
4070
|
},
|
|
4057
4071
|
style: {
|
|
4058
4072
|
maxWidth: '50%'
|
|
@@ -4060,12 +4074,13 @@ var DimensionSelect = function DimensionSelect(_ref) {
|
|
|
4060
4074
|
IconComponent: icon
|
|
4061
4075
|
}, /*#__PURE__*/React.createElement(MenuItem, {
|
|
4062
4076
|
disabled: true
|
|
4063
|
-
}, "Dimension value (",
|
|
4077
|
+
}, "Dimension value (", dimensionValues.length, " options)"), dimensionValues.map(function (dimensionValue) {
|
|
4078
|
+
var _a;
|
|
4064
4079
|
return /*#__PURE__*/React.createElement(MenuItem, {
|
|
4065
|
-
key:
|
|
4066
|
-
value:
|
|
4067
|
-
}, valueMappings
|
|
4068
|
-
}))
|
|
4080
|
+
key: dimensionValue,
|
|
4081
|
+
value: dimensionValue
|
|
4082
|
+
}, ((_a = valueMappings === null || valueMappings === void 0 ? void 0 : valueMappings[selectedDimension.name]) === null || _a === void 0 ? void 0 : _a.call(valueMappings, dimensionValue)) || /*#__PURE__*/React.createElement(React.Fragment, null, "".concat(dimensionValue), "\xA0", /*#__PURE__*/React.createElement("i", null, "".concat(selectedDimension.units))));
|
|
4083
|
+
}));
|
|
4069
4084
|
};
|
|
4070
4085
|
|
|
4071
4086
|
var getRenderLayersValues = function getRenderLayersValues(layerName, layers) {
|
|
@@ -4403,7 +4418,11 @@ var RenderStyles = function RenderStyles(_ref) {
|
|
|
4403
4418
|
if (layerStyles && layerStyles.length > 0) {
|
|
4404
4419
|
styles.push.apply(styles, _toConsumableArray(layerStyles));
|
|
4405
4420
|
}
|
|
4406
|
-
var
|
|
4421
|
+
var layerStyleNames = layerStyles.map(function (style) {
|
|
4422
|
+
return style.name;
|
|
4423
|
+
});
|
|
4424
|
+
var layerStyleExists = layerStyleNames.includes(currentLayerStyle);
|
|
4425
|
+
var currentStyle = layerStyleExists ? currentLayerStyle : styles[0].name;
|
|
4407
4426
|
var selectStyle = function selectStyle(event) {
|
|
4408
4427
|
event.stopPropagation();
|
|
4409
4428
|
onChangeLayerStyle(event.target.value);
|
|
@@ -5027,7 +5046,6 @@ var LayerRow = function LayerRow(_ref7) {
|
|
|
5027
5046
|
item: true,
|
|
5028
5047
|
className: columnClasses.column5
|
|
5029
5048
|
}, layerDimensionLayout || /*#__PURE__*/React__default.createElement(DimensionSelect, {
|
|
5030
|
-
layerId: layerId,
|
|
5031
5049
|
layerDimensions: layerUtils.filterNonTimeDimensions(layer.dimensions),
|
|
5032
5050
|
onLayerChangeDimension: function onLayerChangeDimension(dimensionName, dimensionValue) {
|
|
5033
5051
|
var dimension = {
|
|
@@ -5347,8 +5365,10 @@ var DimensionSelectConnect = function DimensionSelectConnect(_ref2) {
|
|
|
5347
5365
|
layerDimensions = _useLayerDimensions.layerDimensions,
|
|
5348
5366
|
isLayerEnabled = _useLayerDimensions.isLayerEnabled,
|
|
5349
5367
|
layerChangeDimension = _useLayerDimensions.layerChangeDimension;
|
|
5368
|
+
if (!layerDimensions.length || !layerId) {
|
|
5369
|
+
return null;
|
|
5370
|
+
}
|
|
5350
5371
|
return /*#__PURE__*/React.createElement(DimensionSelect, {
|
|
5351
|
-
layerId: layerId,
|
|
5352
5372
|
layerDimensions: layerDimensions,
|
|
5353
5373
|
onLayerChangeDimension: function onLayerChangeDimension(dimensionName, dimensionValue, origin) {
|
|
5354
5374
|
var dimension = {
|
|
@@ -9016,7 +9036,7 @@ tags.forEach(function (tagName) {
|
|
|
9016
9036
|
});
|
|
9017
9037
|
|
|
9018
9038
|
/**
|
|
9019
|
-
* @mui/styled-engine v5.14.
|
|
9039
|
+
* @mui/styled-engine v5.14.14
|
|
9020
9040
|
*
|
|
9021
9041
|
* @license MIT
|
|
9022
9042
|
* This source code is licensed under the MIT license found in the
|
|
@@ -10593,25 +10613,14 @@ var CustomDimensionSelectConnect = function CustomDimensionSelectConnect(_a) {
|
|
|
10593
10613
|
layerDimensions = _useLayerDimensions.layerDimensions,
|
|
10594
10614
|
isLayerEnabled = _useLayerDimensions.isLayerEnabled,
|
|
10595
10615
|
layerChangeDimension = _useLayerDimensions.layerChangeDimension;
|
|
10596
|
-
var filteredDimensions = dimensionsToShow ?
|
|
10597
|
-
|
|
10598
|
-
|
|
10599
|
-
}) : layerDimensions;
|
|
10600
|
-
if (dimensionsToShow) {
|
|
10601
|
-
// also sort according to the filter array
|
|
10602
|
-
filteredDimensions.sort(function (a, b) {
|
|
10603
|
-
return dimensionsToShow.indexOf(a.name) - dimensionsToShow.indexOf(b.name);
|
|
10616
|
+
var filteredDimensions = dimensionsToShow ? dimensionsToShow.map(function (dimensionName) {
|
|
10617
|
+
return layerDimensions.find(function (dimension) {
|
|
10618
|
+
return dimension.name === dimensionName;
|
|
10604
10619
|
});
|
|
10605
|
-
}
|
|
10606
|
-
var singleValue = filteredDimensions.length === 1 && SingleValueComponent;
|
|
10607
|
-
if (singleValue) {
|
|
10608
|
-
return /*#__PURE__*/React.createElement(SingleValueComponent, Object.assign({
|
|
10609
|
-
value: filteredDimensions[0].currentValue
|
|
10610
|
-
}, props));
|
|
10611
|
-
}
|
|
10620
|
+
}).filter(Boolean) : layerDimensions;
|
|
10612
10621
|
return /*#__PURE__*/React.createElement(DimensionSelect, Object.assign({
|
|
10613
|
-
layerId: layerId,
|
|
10614
10622
|
layerDimensions: filteredDimensions,
|
|
10623
|
+
SingleValueComponent: SingleValueComponent,
|
|
10615
10624
|
onLayerChangeDimension: function onLayerChangeDimension(dimensionName, dimensionValue, origin) {
|
|
10616
10625
|
var dimension = {
|
|
10617
10626
|
name: dimensionName,
|
|
@@ -15363,39 +15372,6 @@ var LayerInfoDialogConnect = function LayerInfoDialogConnect() {
|
|
|
15363
15372
|
});
|
|
15364
15373
|
};
|
|
15365
15374
|
|
|
15366
|
-
const HookFormContext = React__default.createContext(null);
|
|
15367
|
-
/**
|
|
15368
|
-
* This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.
|
|
15369
|
-
*
|
|
15370
|
-
* @remarks
|
|
15371
|
-
* [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)
|
|
15372
|
-
*
|
|
15373
|
-
* @returns return all useForm methods
|
|
15374
|
-
*
|
|
15375
|
-
* @example
|
|
15376
|
-
* ```tsx
|
|
15377
|
-
* function App() {
|
|
15378
|
-
* const methods = useForm();
|
|
15379
|
-
* const onSubmit = data => console.log(data);
|
|
15380
|
-
*
|
|
15381
|
-
* return (
|
|
15382
|
-
* <FormProvider {...methods} >
|
|
15383
|
-
* <form onSubmit={methods.handleSubmit(onSubmit)}>
|
|
15384
|
-
* <NestedInput />
|
|
15385
|
-
* <input type="submit" />
|
|
15386
|
-
* </form>
|
|
15387
|
-
* </FormProvider>
|
|
15388
|
-
* );
|
|
15389
|
-
* }
|
|
15390
|
-
*
|
|
15391
|
-
* function NestedInput() {
|
|
15392
|
-
* const { register } = useFormContext(); // retrieve all hook methods
|
|
15393
|
-
* return <input {...register("test")} />;
|
|
15394
|
-
* }
|
|
15395
|
-
* ```
|
|
15396
|
-
*/
|
|
15397
|
-
const useFormContext = () => React__default.useContext(HookFormContext);
|
|
15398
|
-
|
|
15399
15375
|
var style = {
|
|
15400
15376
|
textField: {
|
|
15401
15377
|
width: '100%',
|
|
@@ -22110,7 +22086,7 @@ var getLayersToUpdate = function getLayersToUpdate(layers, mapId) {
|
|
|
22110
22086
|
});
|
|
22111
22087
|
};
|
|
22112
22088
|
|
|
22113
|
-
/*! @license DOMPurify 3.0.
|
|
22089
|
+
/*! @license DOMPurify 3.0.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.0.6/LICENSE */
|
|
22114
22090
|
|
|
22115
22091
|
const {
|
|
22116
22092
|
entries,
|
|
@@ -22130,12 +22106,6 @@ let {
|
|
|
22130
22106
|
construct
|
|
22131
22107
|
} = typeof Reflect !== 'undefined' && Reflect;
|
|
22132
22108
|
|
|
22133
|
-
if (!apply) {
|
|
22134
|
-
apply = function apply(fun, thisValue, args) {
|
|
22135
|
-
return fun.apply(thisValue, args);
|
|
22136
|
-
};
|
|
22137
|
-
}
|
|
22138
|
-
|
|
22139
22109
|
if (!freeze) {
|
|
22140
22110
|
freeze = function freeze(x) {
|
|
22141
22111
|
return x;
|
|
@@ -22148,6 +22118,12 @@ if (!seal) {
|
|
|
22148
22118
|
};
|
|
22149
22119
|
}
|
|
22150
22120
|
|
|
22121
|
+
if (!apply) {
|
|
22122
|
+
apply = function apply(fun, thisValue, args) {
|
|
22123
|
+
return fun.apply(thisValue, args);
|
|
22124
|
+
};
|
|
22125
|
+
}
|
|
22126
|
+
|
|
22151
22127
|
if (!construct) {
|
|
22152
22128
|
construct = function construct(Func, args) {
|
|
22153
22129
|
return new Func(...args);
|
|
@@ -22165,6 +22141,13 @@ const stringIndexOf = unapply(String.prototype.indexOf);
|
|
|
22165
22141
|
const stringTrim = unapply(String.prototype.trim);
|
|
22166
22142
|
const regExpTest = unapply(RegExp.prototype.test);
|
|
22167
22143
|
const typeErrorCreate = unconstruct(TypeError);
|
|
22144
|
+
/**
|
|
22145
|
+
* Creates a new function that calls the given function with a specified thisArg and arguments.
|
|
22146
|
+
*
|
|
22147
|
+
* @param {Function} func - The function to be wrapped and called.
|
|
22148
|
+
* @returns {Function} A new function that calls the given function with a specified thisArg and arguments.
|
|
22149
|
+
*/
|
|
22150
|
+
|
|
22168
22151
|
function unapply(func) {
|
|
22169
22152
|
return function (thisArg) {
|
|
22170
22153
|
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
@@ -22174,6 +22157,14 @@ function unapply(func) {
|
|
|
22174
22157
|
return apply(func, thisArg, args);
|
|
22175
22158
|
};
|
|
22176
22159
|
}
|
|
22160
|
+
/**
|
|
22161
|
+
* Creates a new function that constructs an instance of the given constructor function with the provided arguments.
|
|
22162
|
+
*
|
|
22163
|
+
* @param {Function} func - The constructor function to be wrapped and called.
|
|
22164
|
+
* @returns {Function} A new function that constructs an instance of the given constructor function with the provided arguments.
|
|
22165
|
+
*/
|
|
22166
|
+
|
|
22167
|
+
|
|
22177
22168
|
function unconstruct(func) {
|
|
22178
22169
|
return function () {
|
|
22179
22170
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
@@ -22183,12 +22174,18 @@ function unconstruct(func) {
|
|
|
22183
22174
|
return construct(func, args);
|
|
22184
22175
|
};
|
|
22185
22176
|
}
|
|
22186
|
-
|
|
22177
|
+
/**
|
|
22178
|
+
* Add properties to a lookup table
|
|
22179
|
+
*
|
|
22180
|
+
* @param {Object} set - The set to which elements will be added.
|
|
22181
|
+
* @param {Array} array - The array containing elements to be added to the set.
|
|
22182
|
+
* @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set.
|
|
22183
|
+
* @returns {Object} The modified set with added elements.
|
|
22184
|
+
*/
|
|
22187
22185
|
|
|
22188
|
-
function addToSet(set, array, transformCaseFunc) {
|
|
22189
|
-
var _transformCaseFunc;
|
|
22190
22186
|
|
|
22191
|
-
|
|
22187
|
+
function addToSet(set, array) {
|
|
22188
|
+
let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;
|
|
22192
22189
|
|
|
22193
22190
|
if (setPrototypeOf) {
|
|
22194
22191
|
// Make 'in' and truthy checks like Boolean(set.constructor)
|
|
@@ -22220,19 +22217,32 @@ function addToSet(set, array, transformCaseFunc) {
|
|
|
22220
22217
|
|
|
22221
22218
|
return set;
|
|
22222
22219
|
}
|
|
22223
|
-
|
|
22220
|
+
/**
|
|
22221
|
+
* Shallow clone an object
|
|
22222
|
+
*
|
|
22223
|
+
* @param {Object} object - The object to be cloned.
|
|
22224
|
+
* @returns {Object} A new object that copies the original.
|
|
22225
|
+
*/
|
|
22226
|
+
|
|
22224
22227
|
|
|
22225
22228
|
function clone(object) {
|
|
22226
22229
|
const newObject = create(null);
|
|
22227
22230
|
|
|
22228
22231
|
for (const [property, value] of entries(object)) {
|
|
22229
|
-
|
|
22232
|
+
if (getOwnPropertyDescriptor(object, property) !== undefined) {
|
|
22233
|
+
newObject[property] = value;
|
|
22234
|
+
}
|
|
22230
22235
|
}
|
|
22231
22236
|
|
|
22232
22237
|
return newObject;
|
|
22233
22238
|
}
|
|
22234
|
-
|
|
22235
|
-
* or getter and behaves accordingly.
|
|
22239
|
+
/**
|
|
22240
|
+
* This method automatically checks if the prop is function or getter and behaves accordingly.
|
|
22241
|
+
*
|
|
22242
|
+
* @param {Object} object - The object to look up the getter function in its prototype chain.
|
|
22243
|
+
* @param {String} prop - The property name for which to find the getter function.
|
|
22244
|
+
* @returns {Function} The getter function found in the prototype chain or a fallback function.
|
|
22245
|
+
*/
|
|
22236
22246
|
|
|
22237
22247
|
function lookupGetter(object, prop) {
|
|
22238
22248
|
while (object !== null) {
|
|
@@ -22307,7 +22317,9 @@ var EXPRESSIONS = /*#__PURE__*/Object.freeze({
|
|
|
22307
22317
|
DOCTYPE_NAME: DOCTYPE_NAME
|
|
22308
22318
|
});
|
|
22309
22319
|
|
|
22310
|
-
const getGlobal = ()
|
|
22320
|
+
const getGlobal = function getGlobal() {
|
|
22321
|
+
return typeof window === 'undefined' ? null : window;
|
|
22322
|
+
};
|
|
22311
22323
|
/**
|
|
22312
22324
|
* Creates a no-op policy for internal use only.
|
|
22313
22325
|
* Don't export this function outside this module!
|
|
@@ -22365,7 +22377,7 @@ function createDOMPurify() {
|
|
|
22365
22377
|
*/
|
|
22366
22378
|
|
|
22367
22379
|
|
|
22368
|
-
DOMPurify.version = '3.0.
|
|
22380
|
+
DOMPurify.version = '3.0.6';
|
|
22369
22381
|
/**
|
|
22370
22382
|
* Array of elements that DOMPurify removed during sanitation.
|
|
22371
22383
|
* Empty if nothing was removed.
|
|
@@ -22380,11 +22392,11 @@ function createDOMPurify() {
|
|
|
22380
22392
|
return DOMPurify;
|
|
22381
22393
|
}
|
|
22382
22394
|
|
|
22383
|
-
const originalDocument = window.document;
|
|
22384
|
-
const currentScript = originalDocument.currentScript;
|
|
22385
22395
|
let {
|
|
22386
22396
|
document
|
|
22387
22397
|
} = window;
|
|
22398
|
+
const originalDocument = document;
|
|
22399
|
+
const currentScript = originalDocument.currentScript;
|
|
22388
22400
|
const {
|
|
22389
22401
|
DocumentFragment,
|
|
22390
22402
|
HTMLTemplateElement,
|
|
@@ -22464,7 +22476,7 @@ function createDOMPurify() {
|
|
|
22464
22476
|
* @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.
|
|
22465
22477
|
*/
|
|
22466
22478
|
|
|
22467
|
-
let CUSTOM_ELEMENT_HANDLING = Object.seal(
|
|
22479
|
+
let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {
|
|
22468
22480
|
tagNameCheck: {
|
|
22469
22481
|
writable: true,
|
|
22470
22482
|
configurable: false,
|
|
@@ -22588,10 +22600,10 @@ function createDOMPurify() {
|
|
|
22588
22600
|
const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);
|
|
22589
22601
|
/* Parsing of strict XHTML documents */
|
|
22590
22602
|
|
|
22591
|
-
let PARSER_MEDIA_TYPE;
|
|
22603
|
+
let PARSER_MEDIA_TYPE = null;
|
|
22592
22604
|
const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];
|
|
22593
22605
|
const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';
|
|
22594
|
-
let transformCaseFunc;
|
|
22606
|
+
let transformCaseFunc = null;
|
|
22595
22607
|
/* Keep a reference to config to pass to hooks */
|
|
22596
22608
|
|
|
22597
22609
|
let CONFIG = null;
|
|
@@ -22612,7 +22624,9 @@ function createDOMPurify() {
|
|
|
22612
22624
|
// eslint-disable-next-line complexity
|
|
22613
22625
|
|
|
22614
22626
|
|
|
22615
|
-
const _parseConfig = function _parseConfig(
|
|
22627
|
+
const _parseConfig = function _parseConfig() {
|
|
22628
|
+
let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
22629
|
+
|
|
22616
22630
|
if (CONFIG && CONFIG === cfg) {
|
|
22617
22631
|
return;
|
|
22618
22632
|
}
|
|
@@ -22831,8 +22845,6 @@ function createDOMPurify() {
|
|
|
22831
22845
|
const ALL_MATHML_TAGS = addToSet({}, mathMl$1);
|
|
22832
22846
|
addToSet(ALL_MATHML_TAGS, mathMlDisallowed);
|
|
22833
22847
|
/**
|
|
22834
|
-
*
|
|
22835
|
-
*
|
|
22836
22848
|
* @param {Element} element a DOM element whose namespace is being checked
|
|
22837
22849
|
* @returns {boolean} Return false if the element has a
|
|
22838
22850
|
* namespace that a spec-compliant parser would never
|
|
@@ -22988,8 +23000,8 @@ function createDOMPurify() {
|
|
|
22988
23000
|
|
|
22989
23001
|
const _initDocument = function _initDocument(dirty) {
|
|
22990
23002
|
/* Create a HTML document */
|
|
22991
|
-
let doc;
|
|
22992
|
-
let leadingWhitespace;
|
|
23003
|
+
let doc = null;
|
|
23004
|
+
let leadingWhitespace = null;
|
|
22993
23005
|
|
|
22994
23006
|
if (FORCE_BODY) {
|
|
22995
23007
|
dirty = '<remove></remove>' + dirty;
|
|
@@ -23042,16 +23054,16 @@ function createDOMPurify() {
|
|
|
23042
23054
|
return WHOLE_DOCUMENT ? doc.documentElement : body;
|
|
23043
23055
|
};
|
|
23044
23056
|
/**
|
|
23045
|
-
*
|
|
23057
|
+
* Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.
|
|
23046
23058
|
*
|
|
23047
|
-
* @param {
|
|
23048
|
-
* @return {
|
|
23059
|
+
* @param {Node} root The root element or node to start traversing on.
|
|
23060
|
+
* @return {NodeIterator} The created NodeIterator
|
|
23049
23061
|
*/
|
|
23050
23062
|
|
|
23051
23063
|
|
|
23052
|
-
const
|
|
23064
|
+
const _createNodeIterator = function _createNodeIterator(root) {
|
|
23053
23065
|
return createNodeIterator.call(root.ownerDocument || root, root, // eslint-disable-next-line no-bitwise
|
|
23054
|
-
NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null
|
|
23066
|
+
NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null);
|
|
23055
23067
|
};
|
|
23056
23068
|
/**
|
|
23057
23069
|
* _isClobbered
|
|
@@ -23065,15 +23077,15 @@ function createDOMPurify() {
|
|
|
23065
23077
|
return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');
|
|
23066
23078
|
};
|
|
23067
23079
|
/**
|
|
23068
|
-
*
|
|
23080
|
+
* Checks whether the given object is a DOM node.
|
|
23069
23081
|
*
|
|
23070
|
-
* @param {Node}
|
|
23082
|
+
* @param {Node} object object to check whether it's a DOM node
|
|
23071
23083
|
* @return {Boolean} true is object is a DOM node
|
|
23072
23084
|
*/
|
|
23073
23085
|
|
|
23074
23086
|
|
|
23075
23087
|
const _isNode = function _isNode(object) {
|
|
23076
|
-
return typeof Node === '
|
|
23088
|
+
return typeof Node === 'function' && object instanceof Node;
|
|
23077
23089
|
};
|
|
23078
23090
|
/**
|
|
23079
23091
|
* _executeHook
|
|
@@ -23107,7 +23119,7 @@ function createDOMPurify() {
|
|
|
23107
23119
|
|
|
23108
23120
|
|
|
23109
23121
|
const _sanitizeElements = function _sanitizeElements(currentNode) {
|
|
23110
|
-
let content;
|
|
23122
|
+
let content = null;
|
|
23111
23123
|
/* Execute a hook if present */
|
|
23112
23124
|
|
|
23113
23125
|
_executeHook('beforeSanitizeElements', currentNode, null);
|
|
@@ -23132,7 +23144,7 @@ function createDOMPurify() {
|
|
|
23132
23144
|
/* Detect mXSS attempts abusing namespace confusion */
|
|
23133
23145
|
|
|
23134
23146
|
|
|
23135
|
-
if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) &&
|
|
23147
|
+
if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\w]/g, currentNode.innerHTML) && regExpTest(/<[/\w]/g, currentNode.textContent)) {
|
|
23136
23148
|
_forceRemove(currentNode);
|
|
23137
23149
|
|
|
23138
23150
|
return true;
|
|
@@ -23142,9 +23154,14 @@ function createDOMPurify() {
|
|
|
23142
23154
|
|
|
23143
23155
|
if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
|
|
23144
23156
|
/* Check if we have a custom element to handle */
|
|
23145
|
-
if (!FORBID_TAGS[tagName] &&
|
|
23146
|
-
if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName))
|
|
23147
|
-
|
|
23157
|
+
if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {
|
|
23158
|
+
if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {
|
|
23159
|
+
return false;
|
|
23160
|
+
}
|
|
23161
|
+
|
|
23162
|
+
if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {
|
|
23163
|
+
return false;
|
|
23164
|
+
}
|
|
23148
23165
|
}
|
|
23149
23166
|
/* Keep content except for bad-listed elements */
|
|
23150
23167
|
|
|
@@ -23188,9 +23205,9 @@ function createDOMPurify() {
|
|
|
23188
23205
|
if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {
|
|
23189
23206
|
/* Get the element's text content */
|
|
23190
23207
|
content = currentNode.textContent;
|
|
23191
|
-
|
|
23192
|
-
|
|
23193
|
-
|
|
23208
|
+
arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {
|
|
23209
|
+
content = stringReplace(content, expr, ' ');
|
|
23210
|
+
});
|
|
23194
23211
|
|
|
23195
23212
|
if (currentNode.textContent !== content) {
|
|
23196
23213
|
arrayPush(DOMPurify.removed, {
|
|
@@ -23232,7 +23249,7 @@ function createDOMPurify() {
|
|
|
23232
23249
|
if ( // First condition does a very basic check if a) it's basically a valid custom element tagname AND
|
|
23233
23250
|
// b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck
|
|
23234
23251
|
// and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck
|
|
23235
|
-
|
|
23252
|
+
_isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) || // Alternative, second condition checks if it's an `is`-attribute, AND
|
|
23236
23253
|
// the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck
|
|
23237
23254
|
lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {
|
|
23238
23255
|
return false;
|
|
@@ -23246,14 +23263,16 @@ function createDOMPurify() {
|
|
|
23246
23263
|
return true;
|
|
23247
23264
|
};
|
|
23248
23265
|
/**
|
|
23249
|
-
*
|
|
23266
|
+
* _isBasicCustomElement
|
|
23250
23267
|
* checks if at least one dash is included in tagName, and it's not the first char
|
|
23251
23268
|
* for more sophisticated checking see https://github.com/sindresorhus/validate-element-name
|
|
23269
|
+
*
|
|
23252
23270
|
* @param {string} tagName name of the tag of the node to sanitize
|
|
23271
|
+
* @returns {boolean} Returns true if the tag name meets the basic criteria for a custom element, otherwise false.
|
|
23253
23272
|
*/
|
|
23254
23273
|
|
|
23255
23274
|
|
|
23256
|
-
const
|
|
23275
|
+
const _isBasicCustomElement = function _isBasicCustomElement(tagName) {
|
|
23257
23276
|
return tagName.indexOf('-') > 0;
|
|
23258
23277
|
};
|
|
23259
23278
|
/**
|
|
@@ -23269,12 +23288,7 @@ function createDOMPurify() {
|
|
|
23269
23288
|
|
|
23270
23289
|
|
|
23271
23290
|
const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {
|
|
23272
|
-
let attr;
|
|
23273
|
-
let value;
|
|
23274
|
-
let lcName;
|
|
23275
|
-
let l;
|
|
23276
23291
|
/* Execute a hook if present */
|
|
23277
|
-
|
|
23278
23292
|
_executeHook('beforeSanitizeAttributes', currentNode, null);
|
|
23279
23293
|
|
|
23280
23294
|
const {
|
|
@@ -23292,17 +23306,18 @@ function createDOMPurify() {
|
|
|
23292
23306
|
keepAttr: true,
|
|
23293
23307
|
allowedAttributes: ALLOWED_ATTR
|
|
23294
23308
|
};
|
|
23295
|
-
l = attributes.length;
|
|
23309
|
+
let l = attributes.length;
|
|
23296
23310
|
/* Go backwards over all attributes; safely remove bad ones */
|
|
23297
23311
|
|
|
23298
23312
|
while (l--) {
|
|
23299
|
-
attr = attributes[l];
|
|
23313
|
+
const attr = attributes[l];
|
|
23300
23314
|
const {
|
|
23301
23315
|
name,
|
|
23302
|
-
namespaceURI
|
|
23316
|
+
namespaceURI,
|
|
23317
|
+
value: attrValue
|
|
23303
23318
|
} = attr;
|
|
23304
|
-
|
|
23305
|
-
|
|
23319
|
+
const lcName = transformCaseFunc(name);
|
|
23320
|
+
let value = name === 'value' ? attrValue : stringTrim(attrValue);
|
|
23306
23321
|
/* Execute a hook if present */
|
|
23307
23322
|
|
|
23308
23323
|
hookEvent.attrName = lcName;
|
|
@@ -23340,9 +23355,9 @@ function createDOMPurify() {
|
|
|
23340
23355
|
|
|
23341
23356
|
|
|
23342
23357
|
if (SAFE_FOR_TEMPLATES) {
|
|
23343
|
-
|
|
23344
|
-
|
|
23345
|
-
|
|
23358
|
+
arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {
|
|
23359
|
+
value = stringReplace(value, expr, ' ');
|
|
23360
|
+
});
|
|
23346
23361
|
}
|
|
23347
23362
|
/* Is `value` valid for this attribute? */
|
|
23348
23363
|
|
|
@@ -23411,9 +23426,9 @@ function createDOMPurify() {
|
|
|
23411
23426
|
|
|
23412
23427
|
|
|
23413
23428
|
const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {
|
|
23414
|
-
let shadowNode;
|
|
23429
|
+
let shadowNode = null;
|
|
23415
23430
|
|
|
23416
|
-
const shadowIterator =
|
|
23431
|
+
const shadowIterator = _createNodeIterator(fragment);
|
|
23417
23432
|
/* Execute a hook if present */
|
|
23418
23433
|
|
|
23419
23434
|
|
|
@@ -23449,17 +23464,17 @@ function createDOMPurify() {
|
|
|
23449
23464
|
* Public method providing core sanitation functionality
|
|
23450
23465
|
*
|
|
23451
23466
|
* @param {String|Node} dirty string or DOM node
|
|
23452
|
-
* @param {Object}
|
|
23467
|
+
* @param {Object} cfg object
|
|
23453
23468
|
*/
|
|
23454
23469
|
// eslint-disable-next-line complexity
|
|
23455
23470
|
|
|
23456
23471
|
|
|
23457
23472
|
DOMPurify.sanitize = function (dirty) {
|
|
23458
23473
|
let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
23459
|
-
let body;
|
|
23460
|
-
let importedNode;
|
|
23461
|
-
let currentNode;
|
|
23462
|
-
let returnNode;
|
|
23474
|
+
let body = null;
|
|
23475
|
+
let importedNode = null;
|
|
23476
|
+
let currentNode = null;
|
|
23477
|
+
let returnNode = null;
|
|
23463
23478
|
/* Make sure we have a string to sanitize.
|
|
23464
23479
|
DO NOT return early, as this will return the wrong type if
|
|
23465
23480
|
the user has requested a DOM object rather than a string */
|
|
@@ -23554,7 +23569,7 @@ function createDOMPurify() {
|
|
|
23554
23569
|
/* Get node iterator */
|
|
23555
23570
|
|
|
23556
23571
|
|
|
23557
|
-
const nodeIterator =
|
|
23572
|
+
const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);
|
|
23558
23573
|
/* Now start iterating over the created document */
|
|
23559
23574
|
|
|
23560
23575
|
|
|
@@ -23619,9 +23634,9 @@ function createDOMPurify() {
|
|
|
23619
23634
|
|
|
23620
23635
|
|
|
23621
23636
|
if (SAFE_FOR_TEMPLATES) {
|
|
23622
|
-
|
|
23623
|
-
|
|
23624
|
-
|
|
23637
|
+
arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {
|
|
23638
|
+
serializedHTML = stringReplace(serializedHTML, expr, ' ');
|
|
23639
|
+
});
|
|
23625
23640
|
}
|
|
23626
23641
|
|
|
23627
23642
|
return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;
|
|
@@ -23634,7 +23649,9 @@ function createDOMPurify() {
|
|
|
23634
23649
|
*/
|
|
23635
23650
|
|
|
23636
23651
|
|
|
23637
|
-
DOMPurify.setConfig = function (
|
|
23652
|
+
DOMPurify.setConfig = function () {
|
|
23653
|
+
let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
23654
|
+
|
|
23638
23655
|
_parseConfig(cfg);
|
|
23639
23656
|
|
|
23640
23657
|
SET_CONFIG = true;
|
|
@@ -23655,9 +23672,9 @@ function createDOMPurify() {
|
|
|
23655
23672
|
* Uses last set config, if any. Otherwise, uses config defaults.
|
|
23656
23673
|
* isValidAttribute
|
|
23657
23674
|
*
|
|
23658
|
-
* @param {
|
|
23659
|
-
* @param {
|
|
23660
|
-
* @param {
|
|
23675
|
+
* @param {String} tag Tag name of containing element.
|
|
23676
|
+
* @param {String} attr Attribute name.
|
|
23677
|
+
* @param {String} value Attribute value.
|
|
23661
23678
|
* @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.
|
|
23662
23679
|
*/
|
|
23663
23680
|
|
|
@@ -23720,7 +23737,6 @@ function createDOMPurify() {
|
|
|
23720
23737
|
/**
|
|
23721
23738
|
* RemoveAllHooks
|
|
23722
23739
|
* Public method to remove all DOMPurify hooks
|
|
23723
|
-
*
|
|
23724
23740
|
*/
|
|
23725
23741
|
|
|
23726
23742
|
|
|
@@ -24960,26 +24976,6 @@ var SyncGroupViewerConnect = function SyncGroupViewerConnect() {
|
|
|
24960
24976
|
});
|
|
24961
24977
|
};
|
|
24962
24978
|
|
|
24963
|
-
/* *
|
|
24964
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
24965
|
-
* you may not use this file except in compliance with the License.
|
|
24966
|
-
* You may obtain a copy of the License at
|
|
24967
|
-
*
|
|
24968
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
24969
|
-
*
|
|
24970
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
24971
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
24972
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
24973
|
-
* See the License for the specific language governing permissions and
|
|
24974
|
-
* limitations under the License.
|
|
24975
|
-
*
|
|
24976
|
-
* Copyright 2020 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
|
|
24977
|
-
* Copyright 2020 - Finnish Meteorological Institute (FMI)
|
|
24978
|
-
* */
|
|
24979
|
-
var store = createStore({
|
|
24980
|
-
extensions: [getSagaExtension()]
|
|
24981
|
-
});
|
|
24982
|
-
|
|
24983
24979
|
/* *
|
|
24984
24980
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
24985
24981
|
* you may not use this file except in compliance with the License.
|
|
@@ -27380,7 +27376,7 @@ var CoreThemeStoreProvider = function CoreThemeStoreProvider(_ref3) {
|
|
|
27380
27376
|
};
|
|
27381
27377
|
|
|
27382
27378
|
/**
|
|
27383
|
-
* @remix-run/router v1.
|
|
27379
|
+
* @remix-run/router v1.10.0
|
|
27384
27380
|
*
|
|
27385
27381
|
* Copyright (c) Remix Software Inc.
|
|
27386
27382
|
*
|
|
@@ -27620,7 +27616,7 @@ const validMutationMethodsArr = ["post", "put", "patch", "delete"];
|
|
|
27620
27616
|
["get", ...validMutationMethodsArr];
|
|
27621
27617
|
|
|
27622
27618
|
/**
|
|
27623
|
-
* React Router v6.
|
|
27619
|
+
* React Router v6.17.0
|
|
27624
27620
|
*
|
|
27625
27621
|
* Copyright (c) Remix Software Inc.
|
|
27626
27622
|
*
|
|
@@ -27664,7 +27660,7 @@ if (process.env.NODE_ENV !== "production") {
|
|
|
27664
27660
|
* A Navigator is a "location changer"; it's how you get to different locations.
|
|
27665
27661
|
*
|
|
27666
27662
|
* Every history instance conforms to the Navigator interface, but the
|
|
27667
|
-
* distinction is useful primarily when it comes to the low-level
|
|
27663
|
+
* distinction is useful primarily when it comes to the low-level `<Router>` API
|
|
27668
27664
|
* where both the location and a navigator must be provided separately in order
|
|
27669
27665
|
* to avoid "tearing" that may occur in a suspense-enabled app if the action
|
|
27670
27666
|
* and/or location were to be read directly from the history instance.
|
|
@@ -27692,7 +27688,7 @@ if (process.env.NODE_ENV !== "production") {
|
|
|
27692
27688
|
}
|
|
27693
27689
|
|
|
27694
27690
|
/**
|
|
27695
|
-
* Returns true if this component is a descendant of a
|
|
27691
|
+
* Returns true if this component is a descendant of a `<Router>`.
|
|
27696
27692
|
*
|
|
27697
27693
|
* @see https://reactrouter.com/hooks/use-in-router-context
|
|
27698
27694
|
*/
|
|
@@ -27735,7 +27731,7 @@ function useIsomorphicLayoutEffect(cb) {
|
|
|
27735
27731
|
}
|
|
27736
27732
|
|
|
27737
27733
|
/**
|
|
27738
|
-
* Returns an imperative method for changing the location. Used by
|
|
27734
|
+
* Returns an imperative method for changing the location. Used by `<Link>`s, but
|
|
27739
27735
|
* may also be used by other elements to change the location.
|
|
27740
27736
|
*
|
|
27741
27737
|
* @see https://reactrouter.com/hooks/use-navigate
|
|
@@ -27943,4 +27939,4 @@ var AppWrapperConnect = withEggs([appModuleConfig])(function (_ref) {
|
|
|
27943
27939
|
return children;
|
|
27944
27940
|
});
|
|
27945
27941
|
|
|
27946
|
-
export { AppWrapperConnect, ConfigurableMapConnect, CoreThemeProvider, CoreThemeStoreProvider, HarmonieTempAndPrecipPreset, LayerManager, BaseLayerRow as LayerManagerBaseLayerRow, LayerManagerConnect, DescriptionRow as LayerManagerDescriptionRow, HeaderOptions as LayerManagerHeaderOptions, LayerContainerRow as LayerManagerLayerContainerRow, LayerManagerMapButtonConnect, LayerSelectConnect, LegendConnect, LegendMapButtonConnect, MapViewConnect, MultiDimensionSelectMapButtonsConnect, MultiMapMultiDimensionSelectConnect as MultiMapDimensionSelectConnect, MultiMapViewConnect, RouterWrapperConnect, SnackbarWrapperConnect, SyncGroupViewerConnect, TimeSlider, BackwardForwardStepButtonConnect as TimeSliderBackwardForwardStepButtonConnect, TimeSliderButtonsConnectMemo as TimeSliderButtonsConnect, TimeSliderConnect, TimeSliderLite, TimeSliderLiteConnect, TimeSliderLiteOptionsMenu, timeSliderLiteUtils as TimeSliderLiteUtils, OptionsMenuButtonConnect as TimeSliderOptionsMenuButtonConnect, PlayButtonConnect as TimeSliderPlayButtonConnect, ZoomControlConnect, componentsLookUp, defaultBbox, defaultConfigurations, filterMapPresets, filterServices,
|
|
27942
|
+
export { AppWrapperConnect, ConfigurableMapConnect, CoreThemeProvider, CoreThemeStoreProvider, HarmonieTempAndPrecipPreset, LayerManager, BaseLayerRow as LayerManagerBaseLayerRow, LayerManagerConnect, DescriptionRow as LayerManagerDescriptionRow, HeaderOptions as LayerManagerHeaderOptions, LayerContainerRow as LayerManagerLayerContainerRow, LayerManagerMapButtonConnect, LayerSelectConnect, LegendConnect, LegendMapButtonConnect, MapViewConnect, MultiDimensionSelectMapButtonsConnect, MultiMapMultiDimensionSelectConnect as MultiMapDimensionSelectConnect, MultiMapViewConnect, RouterWrapperConnect, SnackbarWrapperConnect, SyncGroupViewerConnect, TimeSlider, BackwardForwardStepButtonConnect as TimeSliderBackwardForwardStepButtonConnect, TimeSliderButtonsConnectMemo as TimeSliderButtonsConnect, TimeSliderConnect, TimeSliderLite, TimeSliderLiteConnect, TimeSliderLiteOptionsMenu, timeSliderLiteUtils as TimeSliderLiteUtils, OptionsMenuButtonConnect as TimeSliderOptionsMenuButtonConnect, PlayButtonConnect as TimeSliderPlayButtonConnect, ZoomControlConnect, componentsLookUp, defaultBbox, defaultConfigurations, filterMapPresets, filterServices, testLayers, timeSliderUtils, useFetchServices, useSetupDialog };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opengeoweb/core",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.4.0",
|
|
4
4
|
"description": "GeoWeb Core library for the opengeoweb project",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -13,31 +13,31 @@
|
|
|
13
13
|
"dependencies": {},
|
|
14
14
|
"peerDependencies": {
|
|
15
15
|
"@mui/material": "5.12.0",
|
|
16
|
-
"@mui/system": "5.14.
|
|
17
|
-
"@opengeoweb/api": "8.
|
|
18
|
-
"@opengeoweb/form-fields": "8.
|
|
19
|
-
"@opengeoweb/shared": "8.
|
|
20
|
-
"@opengeoweb/store": "8.
|
|
21
|
-
"@opengeoweb/theme": "8.
|
|
22
|
-
"@opengeoweb/webmap": "8.
|
|
23
|
-
"@opengeoweb/webmap-react": "8.
|
|
16
|
+
"@mui/system": "5.14.14",
|
|
17
|
+
"@opengeoweb/api": "8.4.0",
|
|
18
|
+
"@opengeoweb/form-fields": "8.4.0",
|
|
19
|
+
"@opengeoweb/shared": "8.4.0",
|
|
20
|
+
"@opengeoweb/store": "8.4.0",
|
|
21
|
+
"@opengeoweb/theme": "8.4.0",
|
|
22
|
+
"@opengeoweb/webmap": "8.4.0",
|
|
23
|
+
"@opengeoweb/webmap-react": "8.4.0",
|
|
24
24
|
"@redux-eggs/redux-toolkit": "2.2.0",
|
|
25
25
|
"@redux-eggs/saga-extension": "2.2.0",
|
|
26
|
-
"@reduxjs/toolkit": "1.9.
|
|
26
|
+
"@reduxjs/toolkit": "1.9.7",
|
|
27
27
|
"axios": "1.5.0",
|
|
28
28
|
"date-fns": "2.30.0",
|
|
29
|
-
"dompurify": "3.0.
|
|
30
|
-
"i18next": "23.
|
|
29
|
+
"dompurify": "3.0.6",
|
|
30
|
+
"i18next": "23.6.0",
|
|
31
31
|
"immer": "9.0.21",
|
|
32
32
|
"lodash": "4.17.21",
|
|
33
33
|
"moment": "2.29.4",
|
|
34
34
|
"re-resizable": "6.9.11",
|
|
35
35
|
"react": "18.2.0",
|
|
36
|
-
"react-draggable": "4.4.
|
|
37
|
-
"react-hook-form": "7.
|
|
38
|
-
"react-i18next": "13.
|
|
39
|
-
"react-redux": "8.1.
|
|
40
|
-
"react-router-dom": "6.
|
|
36
|
+
"react-draggable": "4.4.6",
|
|
37
|
+
"react-hook-form": "7.47.0",
|
|
38
|
+
"react-i18next": "13.3.0",
|
|
39
|
+
"react-redux": "8.1.3",
|
|
40
|
+
"react-router-dom": "6.17.0",
|
|
41
41
|
"react-sortablejs": "6.1.4",
|
|
42
42
|
"react-window": "1.8.9",
|
|
43
43
|
"redux-saga": "1.2.3",
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { mapTypes, layerTypes } from '@opengeoweb/store';
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
import { ElementType, FC } from 'react';
|
|
4
|
+
export interface SingleValueComponentProps extends mapTypes.Dimension {
|
|
5
|
+
position: 'dimension' | 'value';
|
|
6
|
+
nameMappings?: {
|
|
7
|
+
[dimensionName: string]: string;
|
|
8
|
+
};
|
|
9
|
+
valueMappings?: {
|
|
10
|
+
[dimensionName: string]: (value: string) => string;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export interface DimensionSelectProps {
|
|
5
14
|
layerDimensions?: mapTypes.Dimension[];
|
|
6
15
|
onLayerChangeDimension: (dimensionName: string, dimensionValue: string, origin?: layerTypes.LayerActionOrigin.layerManager) => void;
|
|
7
16
|
isEnabled?: boolean;
|
|
8
|
-
icon?:
|
|
17
|
+
icon?: ElementType;
|
|
9
18
|
nameMappings?: {
|
|
10
19
|
[dimensionName: string]: string;
|
|
11
20
|
};
|
|
@@ -13,6 +22,7 @@ interface DimensionSelectProps {
|
|
|
13
22
|
[dimensionName: string]: (value: string) => string;
|
|
14
23
|
};
|
|
15
24
|
tooltipPrefix?: string;
|
|
25
|
+
SingleValueComponent?: React.FC<SingleValueComponentProps>;
|
|
16
26
|
}
|
|
17
|
-
declare const DimensionSelect:
|
|
27
|
+
declare const DimensionSelect: FC<DimensionSelectProps>;
|
|
18
28
|
export default DimensionSelect;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { mapTypes } from '@opengeoweb/store';
|
|
3
|
+
import { SingleValueComponentProps } from './LayerContainerRow/LayerRow/DimensionSelect/DimensionSelect';
|
|
3
4
|
import { Size, ToolbarButtonSettings } from './LayerManagerHeaderOptions';
|
|
4
5
|
export declare const columnClasses: {
|
|
5
6
|
column1: string;
|
|
@@ -223,9 +224,7 @@ export interface LayerManagerCustomSettings {
|
|
|
223
224
|
};
|
|
224
225
|
dimensions?: {
|
|
225
226
|
dimensionsToShow?: string[];
|
|
226
|
-
SingleValueComponent?: React.FC<
|
|
227
|
-
value: string;
|
|
228
|
-
}>;
|
|
227
|
+
SingleValueComponent?: React.FC<SingleValueComponentProps>;
|
|
229
228
|
icon?: React.ElementType;
|
|
230
229
|
tooltipPrefix?: string;
|
|
231
230
|
nameMappings?: {
|
package/src/lib/index.d.ts
CHANGED
|
@@ -3,7 +3,6 @@ import { MultiDimensionSelectMapButtonsConnect, MultiMapDimensionSelectConnect }
|
|
|
3
3
|
export * from './components/ComponentsLookUp';
|
|
4
4
|
export * from './components/ConfigurableMap';
|
|
5
5
|
export { SyncGroupViewerConnect } from './components/SyncGroups/SyncGroupViewerConnect';
|
|
6
|
-
export { store } from './storybookUtils/store';
|
|
7
6
|
export * from './hooks';
|
|
8
7
|
export * from './components/MultiMapView/MultiMapViewConnect';
|
|
9
8
|
export * from './components/MultiMapView/HarmoniePresets';
|