@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, useState, useRef, useLayoutEffect } from 'react';
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 { webmapUtils, WMGetServiceFromStore, getCapabilities, LayerType, clearImageCache, WMLayer } from '@opengeoweb/webmap';
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 layerId = _ref.layerId,
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
- var _React$useState = React.useState(layerDimensions.length ? layerDimensions[0].name : ''),
3929
- _React$useState2 = _slicedToArray(_React$useState, 2),
3930
- activeDimName = _React$useState2[0],
3931
- setActiveDimName = _React$useState2[1];
3932
- React.useEffect(function () {
3933
- var activeDim = layerDimensions.find(function (d) {
3934
- return d.name === activeDimName;
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 dimValueCurrentIndex = valuesToDisplay.findIndex(function (value) {
4000
- return value === activeDim.currentValue;
3936
+ var dimensionNames = layerDimensions.map(function (dimension) {
3937
+ return dimension.name;
4001
3938
  });
4002
- if (dimValueCurrentIndex === -1) {
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(TooltipSelect, {
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(activeDimName),
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: activeDimName,
4023
- list: dimNameList,
4024
- currentIndex: dimNameCurrentIndex,
4025
- onChange: onChangeActiveDimensionName,
4026
- onChangeMouseWheel: function onChangeMouseWheel(e) {
4027
- return setActiveDimName(e.value);
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"), layerDimensions.map(function (dimension) {
4023
+ }, "Dimension"), dimensionNames.map(function (name) {
4036
4024
  return /*#__PURE__*/React.createElement(MenuItem, {
4037
- key: dimension.name,
4038
- value: dimension.name
4039
- }, nameMappings && dimension.name && nameMappings[dimension.name] || dimension.name);
4040
- })), /*#__PURE__*/React.createElement(TooltipSelect, {
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(activeDimName, " ").concat(activeDim.currentValue, " ").concat(activeDim.units),
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: activeDim && activeDim.currentValue,
4051
- list: dimValueList,
4052
- currentIndex: dimValueCurrentIndex,
4053
- onChange: selectDimensionValue,
4054
- onChangeMouseWheel: function onChangeMouseWheel(e) {
4055
- return onLayerChangeDimension(activeDim.name, e.value, layerTypes.LayerActionOrigin.layerManager);
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 (", valuesToDisplay.length, " options)"), valuesToDisplay.map(function (dimValue) {
4077
+ }, "Dimension value (", dimensionValues.length, " options)"), dimensionValues.map(function (dimensionValue) {
4078
+ var _a;
4064
4079
  return /*#__PURE__*/React.createElement(MenuItem, {
4065
- key: dimValue,
4066
- value: dimValue
4067
- }, valueMappings && activeDim.name && valueMappings[activeDim.name] && valueMappings[activeDim.name](dimValue) || /*#__PURE__*/React.createElement(React.Fragment, null, "".concat(dimValue), "\xA0", /*#__PURE__*/React.createElement("i", null, "".concat(activeDim.units))));
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 currentStyle = currentLayerStyle !== '' ? currentLayerStyle : styles[0].name;
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.10
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 ? layerDimensions.filter(function (dimension) {
10597
- var _a;
10598
- return dimensionsToShow.includes((_a = dimension.name) !== null && _a !== void 0 ? _a : '');
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.5 | (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.5/LICENSE */
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
- /* Add properties to a lookup table */
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
- transformCaseFunc = (_transformCaseFunc = transformCaseFunc) !== null && _transformCaseFunc !== void 0 ? _transformCaseFunc : stringToLowerCase;
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
- /* Shallow clone an object */
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
- newObject[property] = value;
22232
+ if (getOwnPropertyDescriptor(object, property) !== undefined) {
22233
+ newObject[property] = value;
22234
+ }
22230
22235
  }
22231
22236
 
22232
22237
  return newObject;
22233
22238
  }
22234
- /* This method automatically checks if the prop is function
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 = () => typeof window === 'undefined' ? null : window;
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.5';
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(Object.create(null, {
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(cfg) {
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
- * _createIterator
23057
+ * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.
23046
23058
  *
23047
- * @param {Document} root document/fragment to create iterator for
23048
- * @return {Iterator} iterator instance
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 _createIterator = function _createIterator(root) {
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, false);
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
- * _isNode
23080
+ * Checks whether the given object is a DOM node.
23069
23081
  *
23070
- * @param {Node} obj object to check whether it's a DOM 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 === 'object' ? object instanceof Node : object && typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string';
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) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\w]/g, currentNode.innerHTML) && regExpTest(/<[/\w]/g, currentNode.textContent)) {
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] && _basicCustomElementTest(tagName)) {
23146
- if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) return false;
23147
- if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) return false;
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
- content = stringReplace(content, MUSTACHE_EXPR, ' ');
23192
- content = stringReplace(content, ERB_EXPR, ' ');
23193
- content = stringReplace(content, TMPLIT_EXPR, ' ');
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
- _basicCustomElementTest(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
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
- * _basicCustomElementCheck
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 _basicCustomElementTest = function _basicCustomElementTest(tagName) {
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
- value = name === 'value' ? attr.value : stringTrim(attr.value);
23305
- lcName = transformCaseFunc(name);
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
- value = stringReplace(value, MUSTACHE_EXPR, ' ');
23344
- value = stringReplace(value, ERB_EXPR, ' ');
23345
- value = stringReplace(value, TMPLIT_EXPR, ' ');
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 = _createIterator(fragment);
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} configuration 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 = _createIterator(IN_PLACE ? dirty : body);
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
- serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR, ' ');
23623
- serializedHTML = stringReplace(serializedHTML, ERB_EXPR, ' ');
23624
- serializedHTML = stringReplace(serializedHTML, TMPLIT_EXPR, ' ');
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 (cfg) {
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 {string} tag Tag name of containing element.
23659
- * @param {string} attr Attribute name.
23660
- * @param {string} value Attribute value.
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.9.0
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.16.0
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 <Router> API
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 <Router>.
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 <Link>s, but
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, store, testLayers, timeSliderUtils, useFetchServices, useSetupDialog };
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.0",
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.10",
17
- "@opengeoweb/api": "8.3.0",
18
- "@opengeoweb/form-fields": "8.3.0",
19
- "@opengeoweb/shared": "8.3.0",
20
- "@opengeoweb/store": "8.3.0",
21
- "@opengeoweb/theme": "8.3.0",
22
- "@opengeoweb/webmap": "8.3.0",
23
- "@opengeoweb/webmap-react": "8.3.0",
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.5",
26
+ "@reduxjs/toolkit": "1.9.7",
27
27
  "axios": "1.5.0",
28
28
  "date-fns": "2.30.0",
29
- "dompurify": "3.0.5",
30
- "i18next": "23.5.1",
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.5",
37
- "react-hook-form": "7.46.2",
38
- "react-i18next": "13.2.2",
39
- "react-redux": "8.1.2",
40
- "react-router-dom": "6.16.0",
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
- interface DimensionSelectProps {
4
- layerId: string;
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?: React.ElementType;
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: React.FC<DimensionSelectProps>;
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?: {
@@ -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';