@opengeoweb/time-slider-lite 14.3.0 → 14.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/index.esm.js +747 -743
  2. package/package.json +7 -7
  3. package/src/lib/components/TimeSliderLite/TimeSliderLite.d.ts +5 -4
  4. package/src/lib/components/TimeSliderLite/TimeSliderLiteConnect.d.ts +4 -4
  5. package/src/lib/components/TimeSliderLite/timeSliderLiteUtils.d.ts +3 -3
  6. package/src/lib/components/TimeSliderLite/useOnToggleAnimation.d.ts +2 -2
  7. package/src/lib/components/TimeSliderLiteBackground/TimeSliderDraggableNeedle.d.ts +1 -1
  8. package/src/lib/components/TimeSliderLiteBackground/TimeSliderLiteBackground.d.ts +1 -1
  9. package/src/lib/components/TimeSliderLiteBackground/TimeSliderLiteBackgroundSvg.d.ts +1 -1
  10. package/src/lib/components/TimeSliderLiteBackground/TimeSliderZeroTimestamp.d.ts +1 -1
  11. package/src/lib/components/TimeSliderLiteButtons/ControlButtonGroup/ControlButtonGroup.d.ts +1 -1
  12. package/src/lib/components/TimeSliderLiteButtons/HideButton/HideButton.d.ts +1 -1
  13. package/src/lib/components/TimeSliderLiteButtons/MenuButton/MenuButton.d.ts +1 -1
  14. package/src/lib/components/TimeSliderLiteButtons/PlayButton/PlayButton.d.ts +1 -1
  15. package/src/lib/components/TimeSliderLiteButtons/StepButton/StepButton.d.ts +2 -2
  16. package/src/lib/components/TimeSliderLiteButtons/TimeSliderLiteButtonUtils.d.ts +1 -1
  17. package/src/lib/components/TimeSliderLiteOptionsMenu/AnimationSpeedOptions/AnimationSpeedOptions.d.ts +1 -1
  18. package/src/lib/components/TimeSliderLiteOptionsMenu/SubmenuSelectLabel.d.ts +1 -1
  19. package/src/lib/components/TimeSliderLiteOptionsMenu/SubmenuWrapper.d.ts +1 -1
  20. package/src/lib/components/TimeSliderLiteOptionsMenu/TimeRangeOptions/DayHourSelector.d.ts +1 -1
  21. package/src/lib/components/TimeSliderLiteOptionsMenu/TimeSliderLiteOptionsMenu.d.ts +6 -6
  22. package/src/lib/components/TimeSliderLiteOptionsMenu/TimeStepOptions/TimeStepSelector.d.ts +1 -1
  23. package/src/lib/locales/i18n.d.ts +3 -2
  24. package/src/lib/testUtils/Providers.d.ts +4 -4
package/index.esm.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
- import { Card, Typography, IconButton, Select, MenuItem, CardContent, RadioGroup, FormControlLabel, Radio, Grid, Box, ToggleButtonGroup, ToggleButton, Divider, Tooltip, ButtonGroup, useTheme } from '@mui/material';
3
- import { Close, ChevronDown, ChevronUp, StepForward, StepBackward, Pause, Play, Options } from '@opengeoweb/theme';
4
- import React, { useState, useEffect, useLayoutEffect, createElement, useRef } from 'react';
2
+ import { Card, Typography, IconButton, CardContent, Select, MenuItem, Grid, RadioGroup, FormControlLabel, Radio, Box, ToggleButtonGroup, ToggleButton, Divider, useTheme, ButtonGroup, Tooltip } from '@mui/material';
3
+ import React, { useState, useEffect, useLayoutEffect, useRef, createElement } from 'react';
4
+ import { Close, ChevronDown, ChevronUp, Options, Pause, Play, StepForward, StepBackward } from '@opengeoweb/theme';
5
5
  import { usePrevious, safelyInitI18nForTestsAndStories } from '@opengeoweb/shared';
6
- import { I18nextProvider, useTranslation } from 'react-i18next';
6
+ import { speedFactors, defaultAnimationDelayAtStart } from '@opengeoweb/time-slider';
7
7
  import i18n from 'i18next';
8
+ import { I18nextProvider, useTranslation } from 'react-i18next';
8
9
  import { CORE_NAMESPACE, coreTranslations } from '@opengeoweb/core';
9
- import { speedFactors, defaultAnimationDelayAtStart } from '@opengeoweb/time-slider';
10
10
  import { useDispatch, useSelector } from 'react-redux';
11
11
  import { mapActions, mapEnums, mapSelectors, genericActions } from '@opengeoweb/store';
12
12
  import { handleDateUtilsISOString } from '@opengeoweb/webmap';
@@ -167,7 +167,7 @@ var SubmenuWrapper = function SubmenuWrapper(_ref) {
167
167
  return jsxs(Card, Object.assign({}, props, {
168
168
  sx: Object.assign({
169
169
  position: 'relative'
170
- }, sx),
170
+ }, Array.isArray(sx) ? Object.assign.apply(Object, [{}].concat(sx)) : sx),
171
171
  children: [jsx(Typography, {
172
172
  sx: {
173
173
  fontWeight: '500',
@@ -177,15 +177,15 @@ var SubmenuWrapper = function SubmenuWrapper(_ref) {
177
177
  children: title
178
178
  }), jsx(IconButton, {
179
179
  "data-testid": "TimeSliderLite-submenuWrapper-closeButton",
180
+ onClick: function onClick() {
181
+ return setSubmenu == null ? void 0 : setSubmenu(null);
182
+ },
180
183
  size: "small",
181
184
  sx: {
182
185
  position: 'absolute',
183
186
  top: 4,
184
187
  right: 4
185
188
  },
186
- onClick: function onClick() {
187
- return setSubmenu && setSubmenu(null);
188
- },
189
189
  children: closeButtonIcon != null ? closeButtonIcon : jsx(Close, {
190
190
  "data-testid": "TimeSliderLite-submenuWrapper-defaultCloseIcon"
191
191
  })
@@ -636,54 +636,62 @@ var useTimesliderLiteTranslation = function useTimesliderLiteTranslation() {
636
636
  return useTranslation(TIME_SLIDER_LITE_NAMESPACE);
637
637
  };
638
638
 
639
- var _excluded$3 = ["dropdownButtonIcon", "value", "setValue", "defaultTimeStep", "timeStepOptions"];
640
- var TimeStepSelector = function TimeStepSelector(_ref) {
639
+ var AnimationSpeedOptions = function AnimationSpeedOptions(_ref) {
640
+ var _useAnimationSpeed$;
641
641
  var dropdownButtonIcon = _ref.dropdownButtonIcon,
642
- value = _ref.value,
643
- setValue = _ref.setValue,
644
- defaultTimeStep = _ref.defaultTimeStep,
645
- timeStepOptions = _ref.timeStepOptions,
646
- props = _objectWithoutPropertiesLoose(_ref, _excluded$3);
642
+ _ref$speedOptions = _ref.speedOptions,
643
+ speedOptions = _ref$speedOptions === void 0 ? speedFactors.sort(function (speedA, speedB) {
644
+ return speedB - speedA;
645
+ }) : _ref$speedOptions,
646
+ _ref$speedOptionItemP = _ref.speedOptionItemPrefix,
647
+ speedOptionItemPrefix = _ref$speedOptionItemP === void 0 ? 'x ' : _ref$speedOptionItemP,
648
+ _ref$speedOptionItemP2 = _ref.speedOptionItemPostfix,
649
+ speedOptionItemPostfix = _ref$speedOptionItemP2 === void 0 ? '' : _ref$speedOptionItemP2,
650
+ defaultSpeedOptionPostfix = _ref.defaultSpeedOptionPostfix,
651
+ _ref$defaultSpeedFact = _ref.defaultSpeedFactor,
652
+ defaultSpeedFactor = _ref$defaultSpeedFact === void 0 ? speedFactors[2] : _ref$defaultSpeedFact,
653
+ useAnimationSpeed = _ref.useAnimationSpeed;
647
654
  var _useTimesliderLiteTra = useTimesliderLiteTranslation(),
648
655
  t = _useTimesliderLiteTra.t;
649
- var defaultTimeStepOptions = {
650
- 5: "5 " + t('units.minutes'),
651
- 15: "15 " + t('units.minutes'),
652
- 30: "30 " + t('units.minutes'),
653
- 60: "1 " + t('units.hours'),
654
- 180: "3 " + t('units.hours'),
655
- 360: "6 " + t('units.hours'),
656
- 720: "12 " + t('units.hours')
657
- };
658
- var options = timeStepOptions != null ? timeStepOptions : defaultTimeStepOptions;
659
- var allOptionsKeys = Object.keys(options);
660
- var availableOptionKeys = allOptionsKeys.filter(function (option) {
661
- return Number(option) >= defaultTimeStep;
662
- });
663
- return jsx(Select, Object.assign({}, props, {
664
- className: "TimeSliderLite-timeStepSelect",
665
- "data-testid": "TimeSliderLite-timeStepSelect",
666
- inputProps: {
667
- 'data-testid': 'TimeSliderLite-timeStepSelect-input'
668
- },
656
+ var translatedSpeedOptionPostfix = defaultSpeedOptionPostfix != null ? defaultSpeedOptionPostfix : " (" + t('common.default').toLocaleLowerCase() + ")";
657
+ var animationSpeed = (_useAnimationSpeed$ = useAnimationSpeed == null ? void 0 : useAnimationSpeed[0]) != null ? _useAnimationSpeed$ : defaultSpeedFactor;
658
+ var setAnimationSpeed = useAnimationSpeed == null ? void 0 : useAnimationSpeed[1];
659
+ var readOnly = !setAnimationSpeed || speedOptions.length < 2;
660
+ return jsx(CardContent, {
661
+ className: "TimeSliderLite-animationSpeedOptions",
662
+ "data-testid": "TimeSliderLite-animationSpeedOptions",
669
663
  sx: {
670
- height: '40px',
671
- width: '100%'
672
- },
673
- value: String(availableOptionKeys.includes(String(value)) ? value : availableOptionKeys[availableOptionKeys.length - 1]),
674
- onChange: function onChange(event) {
675
- var _event$target;
676
- var newValue = Number(event == null || (_event$target = event.target) == null ? void 0 : _event$target.value);
677
- setValue(newValue);
664
+ paddingTop: '12px',
665
+ marginBottom: '-8px',
666
+ minWidth: '200px'
678
667
  },
679
- IconComponent: dropdownButtonIcon,
680
- children: availableOptionKeys.map(function (option) {
681
- return jsx(MenuItem, {
682
- value: String(option),
683
- children: options[option]
684
- }, String(option));
668
+ children: jsx(Select, {
669
+ IconComponent: dropdownButtonIcon,
670
+ className: "TimeSliderLite-animationSpeedSelect",
671
+ "data-testid": "TimeSliderLite-animationSpeedSelect",
672
+ disabled: readOnly,
673
+ inputProps: {
674
+ 'data-testid': 'TimeSliderLite-animationSpeedSelect-input'
675
+ },
676
+ onChange: function onChange(event) {
677
+ var _event$target;
678
+ var newValue = Number(event == null || (_event$target = event.target) == null ? void 0 : _event$target.value);
679
+ setAnimationSpeed == null || setAnimationSpeed(newValue);
680
+ },
681
+ sx: {
682
+ height: '40px'
683
+ },
684
+ value: String(animationSpeed),
685
+ children: speedOptions.map(function (option) {
686
+ var postfix = option === defaultSpeedFactor ? translatedSpeedOptionPostfix : speedOptionItemPostfix;
687
+ var label = speedOptionItemPrefix + option + postfix;
688
+ return jsx(MenuItem, {
689
+ value: String(option),
690
+ children: label
691
+ }, String(option));
692
+ })
685
693
  })
686
- }));
694
+ });
687
695
  };
688
696
 
689
697
  var SubmenuSelectLabel = function SubmenuSelectLabel(_ref) {
@@ -699,150 +707,22 @@ var SubmenuSelectLabel = function SubmenuSelectLabel(_ref) {
699
707
  });
700
708
  };
701
709
 
702
- var TimeStepOptions = function TimeStepOptions(_ref) {
703
- var useTimeStep = _ref.useTimeStep,
704
- _ref$defaultTimeStep = _ref.defaultTimeStep,
705
- defaultTimeStep = _ref$defaultTimeStep === void 0 ? [5, 15] : _ref$defaultTimeStep,
706
- timeStepOptions = _ref.timeStepOptions,
707
- dropdownButtonIcon = _ref.dropdownButtonIcon;
708
- var _useTimesliderLiteTra = useTimesliderLiteTranslation(),
709
- t = _useTimesliderLiteTra.t;
710
- var isReadOnly = useTimeStep === undefined;
711
- var timeStep = useTimeStep == null ? void 0 : useTimeStep[0];
712
- var setTimeStep = useTimeStep == null ? void 0 : useTimeStep[1];
713
- var observedTimeStepProp = timeStep == null ? void 0 : timeStep[0];
714
- var forecastTimeStepProp = timeStep == null ? void 0 : timeStep[1];
715
- var isDefault = !useTimeStep || timeStep === null;
716
- var defaultObservedTimeStep = defaultTimeStep[0];
717
- var defaultForecastTimeStep = defaultTimeStep[1];
718
- var _React$useState = React.useState(observedTimeStepProp != null ? observedTimeStepProp : defaultObservedTimeStep),
719
- observedTimeStep = _React$useState[0],
720
- setObservedTimeStep = _React$useState[1];
721
- var _React$useState2 = React.useState(forecastTimeStepProp != null ? forecastTimeStepProp : defaultForecastTimeStep),
722
- forecastTimeStep = _React$useState2[0],
723
- setForecastTimeStep = _React$useState2[1];
724
- useEffect(function () {
725
- if (!isDefault && setTimeStep) {
726
- setTimeStep([observedTimeStep, forecastTimeStep]);
727
- }
728
- // eslint-disable-next-line react-hooks/exhaustive-deps
729
- }, [observedTimeStep, forecastTimeStep]);
730
- var handleIsDefaultChange = function handleIsDefaultChange(event) {
731
- if (event.target.value === 'default') {
732
- setTimeStep && setTimeStep(null);
733
- setObservedTimeStep(defaultTimeStep[0]);
734
- setForecastTimeStep(defaultTimeStep[1]);
735
- }
736
- if (event.target.value === 'custom' && setTimeStep) {
737
- setTimeStep(defaultTimeStep);
738
- }
739
- };
740
- return jsxs(CardContent, {
741
- "data-testid": "TimeSliderLite-timeStepOptions",
742
- sx: {
743
- paddingTop: '4px',
744
- '& label': {
745
- height: '36px'
746
- },
747
- '&:last-child': {
748
- paddingBottom: '16px'
749
- }
750
- },
751
- children: [jsxs(RadioGroup, {
752
- defaultValue: isDefault ? 'default' : 'custom',
753
- name: "time-range-radio-button-group",
754
- row: true,
755
- sx: {
756
- marginTop: 1
757
- },
758
- value: isDefault ? 'default' : 'custom',
759
- onChange: handleIsDefaultChange,
760
- children: [jsx(FormControlLabel, {
761
- disabled: isReadOnly,
762
- value: "default",
763
- control: jsx(Radio, {}),
764
- label: t('common.default')
765
- }), jsx(FormControlLabel, {
766
- disabled: isReadOnly,
767
- value: "custom",
768
- control: jsx(Radio, {}),
769
- label: t('common.custom')
770
- })]
771
- }), jsxs(Grid, {
772
- container: true,
773
- width: 250,
774
- children: [jsx(Grid, {
775
- size: {
776
- xs: 4
777
- },
778
- sx: {
779
- marginY: 1
780
- },
781
- children: jsx(SubmenuSelectLabel, {
782
- isDisabled: isDefault,
783
- children: t('common.observed')
784
- })
785
- }), jsx(Grid, {
786
- size: {
787
- xs: 8
788
- },
789
- paddingX: "4px",
790
- sx: {
791
- marginY: 1
792
- },
793
- children: jsx(TimeStepSelector, {
794
- disabled: isDefault,
795
- value: observedTimeStep,
796
- setValue: setObservedTimeStep,
797
- defaultTimeStep: defaultTimeStep[0],
798
- dropdownButtonIcon: dropdownButtonIcon,
799
- timeStepOptions: timeStepOptions
800
- })
801
- }), jsx(Grid, {
802
- size: {
803
- xs: 4
804
- },
805
- children: jsx(SubmenuSelectLabel, {
806
- isDisabled: isDefault,
807
- children: t('common.forecast')
808
- })
809
- }), jsx(Grid, {
810
- size: {
811
- xs: 8
812
- },
813
- paddingX: "4px",
814
- children: jsx(TimeStepSelector, {
815
- disabled: isDefault,
816
- value: forecastTimeStep,
817
- setValue: setForecastTimeStep,
818
- defaultTimeStep: defaultTimeStep[1],
819
- dropdownButtonIcon: dropdownButtonIcon,
820
- timeStepOptions: timeStepOptions
821
- })
822
- })]
823
- })]
824
- });
825
- };
826
-
827
- var _excluded$2 = ["amountOfOptions", "dropdownButtonIcon", "itemPostFix", "value", "setValue"];
710
+ var _excluded$3 = ["amountOfOptions", "dropdownButtonIcon", "itemPostFix", "value", "setValue"];
828
711
  var CustomSelect = function CustomSelect(_ref) {
829
712
  var amountOfOptions = _ref.amountOfOptions,
830
713
  dropdownButtonIcon = _ref.dropdownButtonIcon,
831
714
  itemPostFix = _ref.itemPostFix,
832
715
  value = _ref.value,
833
716
  setValue = _ref.setValue,
834
- props = _objectWithoutPropertiesLoose(_ref, _excluded$2);
717
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$3);
835
718
  var availableOptions = Array.from(Array(amountOfOptions).keys());
836
719
  return jsx(Select, Object.assign({}, props, {
720
+ IconComponent: dropdownButtonIcon,
721
+ autoWidth: false,
837
722
  "data-testid": "TimeSliderLite-customSelect-" + itemPostFix,
838
723
  inputProps: {
839
724
  'data-testid': "TimeSliderLite-customSelect-" + itemPostFix + "-input"
840
725
  },
841
- sx: {
842
- height: '40px',
843
- width: '100%'
844
- },
845
- value: String(availableOptions.includes(value) ? value : availableOptions[availableOptions.length - 1]),
846
726
  onChange: function onChange(event) {
847
727
  var _event$target;
848
728
  var newValue = Number(event == null || (_event$target = event.target) == null ? void 0 : _event$target.value);
@@ -850,8 +730,11 @@ var CustomSelect = function CustomSelect(_ref) {
850
730
  setValue(newValue);
851
731
  }
852
732
  },
853
- autoWidth: false,
854
- IconComponent: dropdownButtonIcon,
733
+ sx: {
734
+ height: '40px',
735
+ width: '100%'
736
+ },
737
+ value: String(availableOptions.includes(value) ? value : availableOptions[availableOptions.length - 1]),
855
738
  children: availableOptions.map(function (option) {
856
739
  return jsxs(MenuItem, {
857
740
  value: String(option),
@@ -889,30 +772,30 @@ var DayHourSelector = function DayHourSelector(_ref2) {
889
772
  children: label
890
773
  })
891
774
  }), jsx(Grid, {
775
+ paddingX: "4px",
892
776
  size: {
893
777
  xs: 4.5
894
778
  },
895
- paddingX: "4px",
896
779
  children: jsx(CustomSelect, {
780
+ amountOfOptions: amountOfDayOptions,
897
781
  disabled: isDisabled || amountOfDayOptions === 1,
898
- value: days,
899
- setValue: setDays,
782
+ dropdownButtonIcon: dropdownButtonIcon,
900
783
  itemPostFix: t('units.days'),
901
- amountOfOptions: amountOfDayOptions,
902
- dropdownButtonIcon: dropdownButtonIcon
784
+ setValue: setDays,
785
+ value: days
903
786
  })
904
787
  }), jsx(Grid, {
788
+ paddingLeft: "4px",
905
789
  size: {
906
790
  xs: 4.5
907
791
  },
908
- paddingLeft: "4px",
909
792
  children: jsx(CustomSelect, {
793
+ amountOfOptions: amountOfHourOptions,
910
794
  disabled: isDisabled || amountOfHourOptions === 1,
911
- value: hours,
912
- setValue: setHours,
795
+ dropdownButtonIcon: dropdownButtonIcon,
913
796
  itemPostFix: t('units.hours'),
914
- amountOfOptions: amountOfHourOptions,
915
- dropdownButtonIcon: dropdownButtonIcon
797
+ setValue: setHours,
798
+ value: hours
916
799
  })
917
800
  })]
918
801
  });
@@ -928,7 +811,7 @@ var TimeRangeOptions = function TimeRangeOptions(_ref) {
928
811
  var _useTimesliderLiteTra = useTimesliderLiteTranslation(),
929
812
  t = _useTimesliderLiteTra.t;
930
813
  var isReadOnly = useTimeRange === undefined;
931
- var isDefault = !useTimeRange || useTimeRange[0] === null;
814
+ var isDefault = (useTimeRange == null ? void 0 : useTimeRange[0]) === null;
932
815
  var handleIsDefaultChange = function handleIsDefaultChange(event) {
933
816
  if (event.target.value === 'default' && useTimeRange != null && useTimeRange[1]) {
934
817
  useTimeRange[1](null);
@@ -1002,28 +885,28 @@ var TimeRangeOptions = function TimeRangeOptions(_ref) {
1002
885
  children: [t('menu.timeRange.description'), jsxs(RadioGroup, {
1003
886
  defaultValue: isDefault ? 'default' : 'custom',
1004
887
  name: "time-range-radio-button-group",
888
+ onChange: handleIsDefaultChange,
1005
889
  row: true,
1006
890
  sx: {
1007
891
  marginTop: 1
1008
892
  },
1009
893
  value: isDefault ? 'default' : 'custom',
1010
- onChange: handleIsDefaultChange,
1011
894
  children: [jsx(FormControlLabel, {
1012
- disabled: isReadOnly,
1013
- value: "default",
1014
895
  control: jsx(Radio, {}),
1015
- label: t('common.default')
1016
- }), jsx(FormControlLabel, {
1017
896
  disabled: isReadOnly,
1018
- value: "custom",
897
+ label: t('common.default'),
898
+ value: "default"
899
+ }), jsx(FormControlLabel, {
1019
900
  control: jsx(Radio, {}),
1020
- label: t('common.custom')
901
+ disabled: isReadOnly,
902
+ label: t('common.custom'),
903
+ value: "custom"
1021
904
  })]
1022
905
  }), jsxs(Box, {
1023
906
  minWidth: TIME_SELECTOR_MIN_WIDTH,
1024
907
  children: [jsx(DayHourSelector, {
1025
- isDisabled: isDefault,
1026
908
  dropdownButtonIcon: dropdownButtonIcon,
909
+ isDisabled: isDefault,
1027
910
  label: t('common.observed'),
1028
911
  maxHours: maxObservedHours,
1029
912
  sx: {
@@ -1032,8 +915,8 @@ var TimeRangeOptions = function TimeRangeOptions(_ref) {
1032
915
  useDays: [observedDays, setObservedDays],
1033
916
  useHours: [observedHours, setObservedHours]
1034
917
  }), jsx(DayHourSelector, {
1035
- isDisabled: isDefault,
1036
918
  dropdownButtonIcon: dropdownButtonIcon,
919
+ isDisabled: isDefault,
1037
920
  label: t('common.forecast'),
1038
921
  maxHours: maxForecastHours,
1039
922
  useDays: [forecastDays, setForecastDays],
@@ -1043,122 +926,178 @@ var TimeRangeOptions = function TimeRangeOptions(_ref) {
1043
926
  });
1044
927
  };
1045
928
 
1046
- var AnimationSpeedOptions = function AnimationSpeedOptions(_ref) {
1047
- var _useAnimationSpeed$;
929
+ var _excluded$2 = ["dropdownButtonIcon", "value", "setValue", "defaultTimeStep", "timeStepOptions"];
930
+ var TimeStepSelector = function TimeStepSelector(_ref) {
1048
931
  var dropdownButtonIcon = _ref.dropdownButtonIcon,
1049
- _ref$speedOptions = _ref.speedOptions,
1050
- speedOptions = _ref$speedOptions === void 0 ? speedFactors.sort(function (speedA, speedB) {
1051
- return speedB - speedA;
1052
- }) : _ref$speedOptions,
1053
- _ref$speedOptionItemP = _ref.speedOptionItemPrefix,
1054
- speedOptionItemPrefix = _ref$speedOptionItemP === void 0 ? 'x ' : _ref$speedOptionItemP,
1055
- _ref$speedOptionItemP2 = _ref.speedOptionItemPostfix,
1056
- speedOptionItemPostfix = _ref$speedOptionItemP2 === void 0 ? '' : _ref$speedOptionItemP2,
1057
- defaultSpeedOptionPostfix = _ref.defaultSpeedOptionPostfix,
1058
- _ref$defaultSpeedFact = _ref.defaultSpeedFactor,
1059
- defaultSpeedFactor = _ref$defaultSpeedFact === void 0 ? speedFactors[2] : _ref$defaultSpeedFact,
1060
- useAnimationSpeed = _ref.useAnimationSpeed;
932
+ value = _ref.value,
933
+ setValue = _ref.setValue,
934
+ defaultTimeStep = _ref.defaultTimeStep,
935
+ timeStepOptions = _ref.timeStepOptions,
936
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$2);
1061
937
  var _useTimesliderLiteTra = useTimesliderLiteTranslation(),
1062
938
  t = _useTimesliderLiteTra.t;
1063
- var translatedSpeedOptionPostfix = defaultSpeedOptionPostfix != null ? defaultSpeedOptionPostfix : " (" + t('common.default').toLocaleLowerCase() + ")";
1064
- var animationSpeed = (_useAnimationSpeed$ = useAnimationSpeed == null ? void 0 : useAnimationSpeed[0]) != null ? _useAnimationSpeed$ : defaultSpeedFactor;
1065
- var setAnimationSpeed = useAnimationSpeed == null ? void 0 : useAnimationSpeed[1];
1066
- var readOnly = !setAnimationSpeed || speedOptions.length < 2;
1067
- return jsx(CardContent, {
1068
- className: "TimeSliderLite-animationSpeedOptions",
1069
- "data-testid": "TimeSliderLite-animationSpeedOptions",
939
+ var defaultTimeStepOptions = {
940
+ 5: "5 " + t('units.minutes'),
941
+ 15: "15 " + t('units.minutes'),
942
+ 30: "30 " + t('units.minutes'),
943
+ 60: "1 " + t('units.hours'),
944
+ 180: "3 " + t('units.hours'),
945
+ 360: "6 " + t('units.hours'),
946
+ 720: "12 " + t('units.hours')
947
+ };
948
+ var options = timeStepOptions != null ? timeStepOptions : defaultTimeStepOptions;
949
+ var allOptionsKeys = Object.keys(options);
950
+ var availableOptionKeys = allOptionsKeys.filter(function (option) {
951
+ return Number(option) >= defaultTimeStep;
952
+ });
953
+ return jsx(Select, Object.assign({}, props, {
954
+ IconComponent: dropdownButtonIcon,
955
+ className: "TimeSliderLite-timeStepSelect",
956
+ "data-testid": "TimeSliderLite-timeStepSelect",
957
+ inputProps: {
958
+ 'data-testid': 'TimeSliderLite-timeStepSelect-input'
959
+ },
960
+ onChange: function onChange(event) {
961
+ var _event$target;
962
+ var newValue = Number(event == null || (_event$target = event.target) == null ? void 0 : _event$target.value);
963
+ setValue(newValue);
964
+ },
1070
965
  sx: {
1071
- paddingTop: '12px',
1072
- marginBottom: '-8px',
1073
- minWidth: '200px'
966
+ height: '40px',
967
+ width: '100%'
1074
968
  },
1075
- children: jsx(Select, {
1076
- disabled: readOnly,
1077
- className: "TimeSliderLite-animationSpeedSelect",
1078
- "data-testid": "TimeSliderLite-animationSpeedSelect",
1079
- inputProps: {
1080
- 'data-testid': 'TimeSliderLite-animationSpeedSelect-input'
1081
- },
1082
- sx: {
1083
- height: '40px'
1084
- },
1085
- value: String(animationSpeed),
1086
- onChange: function onChange(event) {
1087
- var _event$target;
1088
- var newValue = Number(event == null || (_event$target = event.target) == null ? void 0 : _event$target.value);
1089
- setAnimationSpeed && setAnimationSpeed(newValue);
1090
- },
1091
- IconComponent: dropdownButtonIcon,
1092
- children: speedOptions.map(function (option) {
1093
- var postfix = option === defaultSpeedFactor ? translatedSpeedOptionPostfix : speedOptionItemPostfix;
1094
- var label = speedOptionItemPrefix + option + postfix;
1095
- return jsx(MenuItem, {
1096
- value: String(option),
1097
- children: label
1098
- }, String(option));
1099
- })
969
+ value: String(availableOptionKeys.includes(String(value)) ? value : availableOptionKeys[availableOptionKeys.length - 1]),
970
+ children: availableOptionKeys.map(function (option) {
971
+ return jsx(MenuItem, {
972
+ value: String(option),
973
+ children: options[option]
974
+ }, String(option));
1100
975
  })
1101
- });
976
+ }));
1102
977
  };
1103
978
 
1104
- var defaultUpdateIntervalOptions = [1, 2, 5, 10, 15, 30, 60];
1105
- var UpdateIntervalOptions = function UpdateIntervalOptions(_ref) {
1106
- var _useUpdateInterval$, _updateIntervalOption;
1107
- var _ref$defaultUpdateInt = _ref.defaultUpdateInterval,
1108
- defaultUpdateInterval = _ref$defaultUpdateInt === void 0 ? 1 : _ref$defaultUpdateInt,
1109
- dropdownButtonIcon = _ref.dropdownButtonIcon,
1110
- _ref$intervalOptionPr = _ref.intervalOptionPrefix,
1111
- intervalOptionPrefix = _ref$intervalOptionPr === void 0 ? '' : _ref$intervalOptionPr,
1112
- intervalOptionPostfix = _ref.intervalOptionPostfix,
1113
- defaultOptionPostfix = _ref.defaultOptionPostfix,
1114
- _ref$updateIntervalOp = _ref.updateIntervalOptions,
1115
- updateIntervalOptions = _ref$updateIntervalOp === void 0 ? defaultUpdateIntervalOptions.sort(function (optionA, optionB) {
1116
- return optionA - optionB;
1117
- }) : _ref$updateIntervalOp,
1118
- useUpdateInterval = _ref.useUpdateInterval;
979
+ var TimeStepOptions = function TimeStepOptions(_ref) {
980
+ var useTimeStep = _ref.useTimeStep,
981
+ _ref$defaultTimeStep = _ref.defaultTimeStep,
982
+ defaultTimeStep = _ref$defaultTimeStep === void 0 ? [5, 15] : _ref$defaultTimeStep,
983
+ timeStepOptions = _ref.timeStepOptions,
984
+ dropdownButtonIcon = _ref.dropdownButtonIcon;
1119
985
  var _useTimesliderLiteTra = useTimesliderLiteTranslation(),
1120
986
  t = _useTimesliderLiteTra.t;
1121
- var translatedIntervalOptionPostfix = intervalOptionPostfix != null ? intervalOptionPostfix : " " + t('units.minutes');
1122
- var translatedDefaultOptionPostfix = defaultOptionPostfix != null ? defaultOptionPostfix : " " + t('units.minutes') + " (" + t('common.default').toLowerCase() + ")";
1123
- var updateInterval = (_useUpdateInterval$ = useUpdateInterval == null ? void 0 : useUpdateInterval[0]) != null ? _useUpdateInterval$ : defaultUpdateInterval;
1124
- var setUpdateInterval = useUpdateInterval == null ? void 0 : useUpdateInterval[1];
1125
- var readOnly = !setUpdateInterval || updateIntervalOptions.length < 2;
1126
- var defaultValue = (_updateIntervalOption = updateIntervalOptions.find(function (option) {
1127
- return option === defaultUpdateInterval;
1128
- })) != null ? _updateIntervalOption : Math.min.apply(Math, updateIntervalOptions);
1129
- return jsx(CardContent, {
1130
- className: "TimeSliderLite-updateIntervalOptions",
1131
- "data-testid": "TimeSliderLite-updateIntervalOptions",
987
+ var isReadOnly = useTimeStep === undefined;
988
+ var timeStep = useTimeStep == null ? void 0 : useTimeStep[0];
989
+ var setTimeStep = useTimeStep == null ? void 0 : useTimeStep[1];
990
+ var observedTimeStepProp = timeStep == null ? void 0 : timeStep[0];
991
+ var forecastTimeStepProp = timeStep == null ? void 0 : timeStep[1];
992
+ var isDefault = !useTimeStep || timeStep === null;
993
+ var defaultObservedTimeStep = defaultTimeStep[0];
994
+ var defaultForecastTimeStep = defaultTimeStep[1];
995
+ var _React$useState = React.useState(observedTimeStepProp != null ? observedTimeStepProp : defaultObservedTimeStep),
996
+ observedTimeStep = _React$useState[0],
997
+ setObservedTimeStep = _React$useState[1];
998
+ var _React$useState2 = React.useState(forecastTimeStepProp != null ? forecastTimeStepProp : defaultForecastTimeStep),
999
+ forecastTimeStep = _React$useState2[0],
1000
+ setForecastTimeStep = _React$useState2[1];
1001
+ useEffect(function () {
1002
+ if (!isDefault && setTimeStep) {
1003
+ setTimeStep([observedTimeStep, forecastTimeStep]);
1004
+ }
1005
+ // eslint-disable-next-line react-hooks/exhaustive-deps
1006
+ }, [observedTimeStep, forecastTimeStep]);
1007
+ var handleIsDefaultChange = function handleIsDefaultChange(event) {
1008
+ if (event.target.value === 'default') {
1009
+ setTimeStep == null || setTimeStep(null);
1010
+ setObservedTimeStep(defaultTimeStep[0]);
1011
+ setForecastTimeStep(defaultTimeStep[1]);
1012
+ }
1013
+ if (event.target.value === 'custom' && setTimeStep) {
1014
+ setTimeStep(defaultTimeStep);
1015
+ }
1016
+ };
1017
+ return jsxs(CardContent, {
1018
+ "data-testid": "TimeSliderLite-timeStepOptions",
1132
1019
  sx: {
1133
- paddingTop: '12px',
1134
- marginBottom: '-8px',
1135
- minWidth: '200px'
1136
- },
1137
- children: jsx(Select, {
1138
- disabled: readOnly,
1139
- className: "TimeSliderLite-updateIntervalSelect",
1140
- "data-testid": "TimeSliderLite-updateIntervalSelect",
1141
- inputProps: {
1142
- 'data-testid': 'TimeSliderLite-updateIntervalSelect-input'
1020
+ paddingTop: '4px',
1021
+ '& label': {
1022
+ height: '36px'
1143
1023
  },
1024
+ '&:last-child': {
1025
+ paddingBottom: '16px'
1026
+ }
1027
+ },
1028
+ children: [jsxs(RadioGroup, {
1029
+ defaultValue: isDefault ? 'default' : 'custom',
1030
+ name: "time-range-radio-button-group",
1031
+ onChange: handleIsDefaultChange,
1032
+ row: true,
1144
1033
  sx: {
1145
- height: '40px'
1146
- },
1147
- value: String(updateInterval != null ? updateInterval : defaultValue),
1148
- onChange: function onChange(event) {
1149
- var _event$target;
1150
- var newValue = Number(event == null || (_event$target = event.target) == null ? void 0 : _event$target.value);
1151
- setUpdateInterval && setUpdateInterval(newValue === defaultValue ? null : newValue);
1034
+ marginTop: 1
1152
1035
  },
1153
- IconComponent: dropdownButtonIcon,
1154
- children: updateIntervalOptions.map(function (option) {
1155
- var label = option === defaultValue ? "" + intervalOptionPrefix + option + translatedDefaultOptionPostfix : "" + intervalOptionPrefix + option + translatedIntervalOptionPostfix;
1156
- return jsx(MenuItem, {
1157
- value: String(option),
1158
- children: label
1159
- }, String(option));
1160
- })
1161
- })
1036
+ value: isDefault ? 'default' : 'custom',
1037
+ children: [jsx(FormControlLabel, {
1038
+ control: jsx(Radio, {}),
1039
+ disabled: isReadOnly,
1040
+ label: t('common.default'),
1041
+ value: "default"
1042
+ }), jsx(FormControlLabel, {
1043
+ control: jsx(Radio, {}),
1044
+ disabled: isReadOnly,
1045
+ label: t('common.custom'),
1046
+ value: "custom"
1047
+ })]
1048
+ }), jsxs(Grid, {
1049
+ container: true,
1050
+ width: 250,
1051
+ children: [jsx(Grid, {
1052
+ size: {
1053
+ xs: 4
1054
+ },
1055
+ sx: {
1056
+ marginY: 1
1057
+ },
1058
+ children: jsx(SubmenuSelectLabel, {
1059
+ isDisabled: isDefault,
1060
+ children: t('common.observed')
1061
+ })
1062
+ }), jsx(Grid, {
1063
+ paddingX: "4px",
1064
+ size: {
1065
+ xs: 8
1066
+ },
1067
+ sx: {
1068
+ marginY: 1
1069
+ },
1070
+ children: jsx(TimeStepSelector, {
1071
+ defaultTimeStep: defaultTimeStep[0],
1072
+ disabled: isDefault,
1073
+ dropdownButtonIcon: dropdownButtonIcon,
1074
+ setValue: setObservedTimeStep,
1075
+ timeStepOptions: timeStepOptions,
1076
+ value: observedTimeStep
1077
+ })
1078
+ }), jsx(Grid, {
1079
+ size: {
1080
+ xs: 4
1081
+ },
1082
+ children: jsx(SubmenuSelectLabel, {
1083
+ isDisabled: isDefault,
1084
+ children: t('common.forecast')
1085
+ })
1086
+ }), jsx(Grid, {
1087
+ paddingX: "4px",
1088
+ size: {
1089
+ xs: 8
1090
+ },
1091
+ children: jsx(TimeStepSelector, {
1092
+ defaultTimeStep: defaultTimeStep[1],
1093
+ disabled: isDefault,
1094
+ dropdownButtonIcon: dropdownButtonIcon,
1095
+ setValue: setForecastTimeStep,
1096
+ timeStepOptions: timeStepOptions,
1097
+ value: forecastTimeStep
1098
+ })
1099
+ })]
1100
+ })]
1162
1101
  });
1163
1102
  };
1164
1103
 
@@ -1188,22 +1127,83 @@ var TimeZoneSwitch = function TimeZoneSwitch(_ref) {
1188
1127
  var _useTimesliderLiteTra = useTimesliderLiteTranslation(),
1189
1128
  t = _useTimesliderLiteTra.t;
1190
1129
  return jsx(ToggleButtonGroup, {
1191
- disabled: !setTimeZone,
1192
1130
  className: "TimeSliderLite-timeZoneSwitch",
1193
1131
  "data-testid": "TimeSliderLite-timeZoneSwitch",
1194
- value: timeZone != null ? timeZone : 'LT',
1132
+ disabled: !setTimeZone,
1195
1133
  exclusive: true,
1196
- sx: styles$3.root,
1197
1134
  onChange: function onChange(_event, newZone) {
1198
1135
  if (newZone && setTimeZone) {
1199
1136
  setTimeZone(newZone);
1200
1137
  }
1201
1138
  },
1202
- children: availableTimeZones.map(function (zone) {
1203
- return jsx(ToggleButton, {
1204
- value: zone,
1205
- children: t("menu." + zone)
1206
- }, zone);
1139
+ sx: styles$3.root,
1140
+ value: timeZone != null ? timeZone : 'LT',
1141
+ children: availableTimeZones.map(function (zone) {
1142
+ return jsx(ToggleButton, {
1143
+ value: zone,
1144
+ children: t("menu." + zone)
1145
+ }, zone);
1146
+ })
1147
+ });
1148
+ };
1149
+
1150
+ var defaultUpdateIntervalOptions = [1, 2, 5, 10, 15, 30, 60];
1151
+ var UpdateIntervalOptions = function UpdateIntervalOptions(_ref) {
1152
+ var _useUpdateInterval$, _updateIntervalOption;
1153
+ var _ref$defaultUpdateInt = _ref.defaultUpdateInterval,
1154
+ defaultUpdateInterval = _ref$defaultUpdateInt === void 0 ? 1 : _ref$defaultUpdateInt,
1155
+ dropdownButtonIcon = _ref.dropdownButtonIcon,
1156
+ _ref$intervalOptionPr = _ref.intervalOptionPrefix,
1157
+ intervalOptionPrefix = _ref$intervalOptionPr === void 0 ? '' : _ref$intervalOptionPr,
1158
+ intervalOptionPostfix = _ref.intervalOptionPostfix,
1159
+ defaultOptionPostfix = _ref.defaultOptionPostfix,
1160
+ _ref$updateIntervalOp = _ref.updateIntervalOptions,
1161
+ updateIntervalOptions = _ref$updateIntervalOp === void 0 ? defaultUpdateIntervalOptions.sort(function (optionA, optionB) {
1162
+ return optionA - optionB;
1163
+ }) : _ref$updateIntervalOp,
1164
+ useUpdateInterval = _ref.useUpdateInterval;
1165
+ var _useTimesliderLiteTra = useTimesliderLiteTranslation(),
1166
+ t = _useTimesliderLiteTra.t;
1167
+ var translatedIntervalOptionPostfix = intervalOptionPostfix != null ? intervalOptionPostfix : " " + t('units.minutes');
1168
+ var translatedDefaultOptionPostfix = defaultOptionPostfix != null ? defaultOptionPostfix : " " + t('units.minutes') + " (" + t('common.default').toLowerCase() + ")";
1169
+ var updateInterval = (_useUpdateInterval$ = useUpdateInterval == null ? void 0 : useUpdateInterval[0]) != null ? _useUpdateInterval$ : defaultUpdateInterval;
1170
+ var setUpdateInterval = useUpdateInterval == null ? void 0 : useUpdateInterval[1];
1171
+ var readOnly = !setUpdateInterval || updateIntervalOptions.length < 2;
1172
+ var defaultValue = (_updateIntervalOption = updateIntervalOptions.find(function (option) {
1173
+ return option === defaultUpdateInterval;
1174
+ })) != null ? _updateIntervalOption : Math.min.apply(Math, updateIntervalOptions);
1175
+ return jsx(CardContent, {
1176
+ className: "TimeSliderLite-updateIntervalOptions",
1177
+ "data-testid": "TimeSliderLite-updateIntervalOptions",
1178
+ sx: {
1179
+ paddingTop: '12px',
1180
+ marginBottom: '-8px',
1181
+ minWidth: '200px'
1182
+ },
1183
+ children: jsx(Select, {
1184
+ IconComponent: dropdownButtonIcon,
1185
+ className: "TimeSliderLite-updateIntervalSelect",
1186
+ "data-testid": "TimeSliderLite-updateIntervalSelect",
1187
+ disabled: readOnly,
1188
+ inputProps: {
1189
+ 'data-testid': 'TimeSliderLite-updateIntervalSelect-input'
1190
+ },
1191
+ onChange: function onChange(event) {
1192
+ var _event$target;
1193
+ var newValue = Number(event == null || (_event$target = event.target) == null ? void 0 : _event$target.value);
1194
+ setUpdateInterval == null || setUpdateInterval(newValue === defaultValue ? null : newValue);
1195
+ },
1196
+ sx: {
1197
+ height: '40px'
1198
+ },
1199
+ value: String(updateInterval != null ? updateInterval : defaultValue),
1200
+ children: updateIntervalOptions.map(function (option) {
1201
+ var label = option === defaultValue ? "" + intervalOptionPrefix + option + translatedDefaultOptionPostfix : "" + intervalOptionPrefix + option + translatedIntervalOptionPostfix;
1202
+ return jsx(MenuItem, {
1203
+ value: String(option),
1204
+ children: label
1205
+ }, String(option));
1206
+ })
1207
1207
  })
1208
1208
  });
1209
1209
  };
@@ -1266,31 +1266,31 @@ var TimeSliderLiteOptionsMenu = function TimeSliderLiteOptionsMenu(_ref) {
1266
1266
  submenuLeft = _React$useState2[0],
1267
1267
  setSubmenuLeft = _React$useState2[1];
1268
1268
  return jsxs(Fragment, {
1269
- children: [submenu && jsxs(SubmenuWrapper, {
1269
+ children: [!!submenu && jsxs(SubmenuWrapper, {
1270
+ closeButtonIcon: closeButtonIcon,
1271
+ setSubmenu: setSubmenu,
1270
1272
  sx: Object.assign({
1271
1273
  left: submenuLeft,
1272
1274
  marginLeft: '-12px'
1273
- }, subMenuSx),
1274
- setSubmenu: setSubmenu,
1275
+ }, Array.isArray(subMenuSx) ? Object.assign.apply(Object, [{}].concat(subMenuSx)) : subMenuSx),
1275
1276
  title: t(submenu + ".title"),
1276
- closeButtonIcon: closeButtonIcon,
1277
1277
  children: [submenu === SubmenuTitleTranslations.TIME_RANGE && jsx(TimeRangeOptions, {
1278
1278
  currentTime: currentTime,
1279
- useTimeRange: useTimeRange,
1280
1279
  defaultTimeRange: defaultTimeRange,
1281
- dropdownButtonIcon: dropdownButtonIcon
1280
+ dropdownButtonIcon: dropdownButtonIcon,
1281
+ useTimeRange: useTimeRange
1282
1282
  }), submenu === SubmenuTitleTranslations.TIME_STEP && jsx(TimeStepOptions, {
1283
1283
  defaultTimeStep: defaultTimeStep,
1284
- useTimeStep: useTimeStep,
1285
1284
  dropdownButtonIcon: dropdownButtonIcon,
1286
- timeStepOptions: timeStepOptions
1285
+ timeStepOptions: timeStepOptions,
1286
+ useTimeStep: useTimeStep
1287
1287
  }), submenu === SubmenuTitleTranslations.SPEED && jsx(AnimationSpeedOptions, {
1288
- useAnimationSpeed: useAnimationSpeed,
1288
+ defaultSpeedFactor: defaultSpeedFactor,
1289
1289
  dropdownButtonIcon: dropdownButtonIcon,
1290
1290
  speedOptionItemPostfix: speedOptionItemPostfix,
1291
1291
  speedOptionItemPrefix: speedOptionItemPrefix,
1292
1292
  speedOptions: speedOptions,
1293
- defaultSpeedFactor: defaultSpeedFactor
1293
+ useAnimationSpeed: useAnimationSpeed
1294
1294
  }), submenu === SubmenuTitleTranslations.UPDATE_INTERVAL && jsx(UpdateIntervalOptions, {
1295
1295
  defaultUpdateInterval: defaultUpdateInterval,
1296
1296
  dropdownButtonIcon: dropdownButtonIcon,
@@ -1305,119 +1305,221 @@ var TimeSliderLiteOptionsMenu = function TimeSliderLiteOptionsMenu(_ref) {
1305
1305
  flexDirection: 'row',
1306
1306
  marginY: 1,
1307
1307
  visibility: menuOpen ? 'visible' : 'hidden'
1308
- }, sx),
1308
+ }, Array.isArray(sx) ? Object.assign.apply(Object, [{}].concat(sx)) : sx),
1309
1309
  children: [jsx(ToggleButtonGroup, {
1310
1310
  "data-testid": "TimeSliderLite-optionsMenu",
1311
- value: submenu,
1312
1311
  exclusive: true,
1313
- sx: {
1314
- padding: 0.5,
1315
- gap: 0.5
1316
- },
1317
1312
  onChange: function onChange(event, newOption) {
1318
1313
  setSubmenu(newOption);
1319
1314
  var button = event.currentTarget;
1320
1315
  var buttonPosition = button.getBoundingClientRect();
1321
1316
  setSubmenuLeft(buttonPosition.x);
1322
1317
  },
1318
+ sx: {
1319
+ padding: 0.5,
1320
+ gap: 0.5
1321
+ },
1322
+ value: submenu,
1323
1323
  children: Object.values(SubmenuTitleTranslations).map(function (value) {
1324
1324
  return jsx(ToggleButton, {
1325
- value: value,
1326
1325
  sx: styles$2.button,
1326
+ value: value,
1327
1327
  children: t(value + ".button")
1328
1328
  }, value);
1329
1329
  })
1330
1330
  }), jsx(TimeZoneSwitch$1, {
1331
1331
  useTimeZone: useTimeZone != null ? useTimeZone : ['LT']
1332
1332
  }), jsx(Divider, {
1333
- orientation: "vertical",
1334
- flexItem: true
1333
+ flexItem: true,
1334
+ orientation: "vertical"
1335
1335
  }), jsx(IconButton, {
1336
1336
  "data-testid": "TimeSliderLite-optionsMenu-closeButton",
1337
+ onClick: function onClick() {
1338
+ return setMenuOpen == null ? void 0 : setMenuOpen(false);
1339
+ },
1337
1340
  size: "small",
1338
1341
  sx: {
1339
1342
  margin: 0.5
1340
1343
  },
1341
- onClick: function onClick() {
1342
- return setMenuOpen && setMenuOpen(false);
1343
- },
1344
1344
  children: closeButtonIcon != null ? closeButtonIcon : jsx(Close, {})
1345
1345
  })]
1346
1346
  })]
1347
1347
  });
1348
1348
  };
1349
1349
 
1350
- /* *
1351
- * Licensed under the Apache License, Version 2.0 (the "License");
1352
- * you may not use this file except in compliance with the License.
1353
- * You may obtain a copy of the License at
1354
- *
1355
- * http://www.apache.org/licenses/LICENSE-2.0
1356
- *
1357
- * Unless required by applicable law or agreed to in writing, software
1358
- * distributed under the License is distributed on an "AS IS" BASIS,
1359
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1360
- * See the License for the specific language governing permissions and
1361
- * limitations under the License.
1362
- *
1363
- * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
1364
- * Copyright 2023 - Finnish Meteorological Institute (FMI)
1365
- * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
1366
- * */
1367
- var timeSliderLiteButtonDefaultProps = {
1368
- sx: {
1369
- width: '36px',
1370
- height: '36px'
1371
- }
1350
+ var DRAG_AREA_WIDTH = 10;
1351
+ var NEEDLE_WIDTH = 5;
1352
+ var SHADOW_SPREAD = 2;
1353
+ var NeedleShadow = function NeedleShadow(_ref) {
1354
+ var x = _ref.x,
1355
+ stroke = _ref.stroke,
1356
+ height = _ref.height,
1357
+ width = _ref.width;
1358
+ return jsx("line", {
1359
+ "data-testid": "TimeSliderLite-NeedleShadow",
1360
+ filter: "blur(0.5px)",
1361
+ stroke: stroke,
1362
+ strokeLinecap: "round",
1363
+ strokeWidth: width + SHADOW_SPREAD,
1364
+ x1: x,
1365
+ x2: x,
1366
+ y1: height - (height - SHADOW_SPREAD / 2),
1367
+ y2: height - SHADOW_SPREAD / 2
1368
+ });
1372
1369
  };
1373
-
1374
- var HideButton = function HideButton(_ref) {
1375
- var _settings$icon$hide, _settings$icon, _settings$icon$show, _settings$icon2;
1376
- var isVisible = _ref.isVisible,
1377
- settings = _ref.settings,
1378
- onClick = _ref.onClick;
1379
- var _useTimesliderLiteTra = useTimesliderLiteTranslation(),
1380
- t = _useTimesliderLiteTra.t;
1381
- var hideIcon = (_settings$icon$hide = settings == null || (_settings$icon = settings.icon) == null ? void 0 : _settings$icon.hide) != null ? _settings$icon$hide : jsx(ChevronDown, {});
1382
- var showIcon = (_settings$icon$show = settings == null || (_settings$icon2 = settings.icon) == null ? void 0 : _settings$icon2.show) != null ? _settings$icon$show : jsx(ChevronUp, {});
1383
- return jsx(Tooltip, {
1384
- placement: "top-end",
1385
- title: isVisible ? t('controlButtons.hide') : t('controlButtons.show'),
1386
- children: jsx(IconButton, Object.assign({}, timeSliderLiteButtonDefaultProps, {
1387
- "aria-selected": !isVisible,
1388
- onClick: onClick,
1389
- "data-testid": "TimeSliderLite-HideButton",
1390
- children: isVisible ? hideIcon : showIcon
1391
- }))
1370
+ var NeedleLine = function NeedleLine(_ref2) {
1371
+ var x = _ref2.x,
1372
+ stroke = _ref2.stroke,
1373
+ height = _ref2.height,
1374
+ width = _ref2.width;
1375
+ return jsx("line", {
1376
+ "data-testid": "TimeSliderLite-NeedleLine",
1377
+ stroke: stroke,
1378
+ strokeLinecap: "round",
1379
+ strokeWidth: width,
1380
+ x1: x,
1381
+ x2: x,
1382
+ y1: width / 2,
1383
+ y2: height - width / 2
1392
1384
  });
1393
1385
  };
1394
-
1395
- var _excluded$1 = ["children", "right", "left"];
1396
- var ControlButtonGroup = function ControlButtonGroup(_ref) {
1397
- var children = _ref.children,
1398
- right = _ref.right,
1399
- left = _ref.left,
1400
- props = _objectWithoutPropertiesLoose(_ref, _excluded$1);
1401
- return jsx(ButtonGroup, Object.assign({
1402
- orientation: "horizontal",
1403
- fullWidth: true
1404
- }, props, {
1405
- sx: Object.assign({}, right && {
1406
- borderTopLeftRadius: 0,
1407
- borderBottomLeftRadius: 0
1408
- }, left && {
1409
- borderTopRightRadius: 0,
1410
- borderBottomRightRadius: 0
1411
- }, {
1412
- backgroundColor: 'geowebColors.background.surface',
1413
- height: '100%',
1414
- alignItems: 'center',
1415
- justifyContent: 'center',
1416
- padding: '4px',
1417
- gap: '2px'
1418
- }, props.sx),
1419
- children: children
1420
- }));
1386
+ var TimeSliderDraggableNeedle = function TimeSliderDraggableNeedle(_ref3) {
1387
+ var draggableLabel = _ref3.draggableLabel,
1388
+ width = _ref3.width,
1389
+ height = _ref3.height,
1390
+ _ref3$timeZone = _ref3.timeZone,
1391
+ timeZone = _ref3$timeZone === void 0 ? 'LT' : _ref3$timeZone,
1392
+ _ref3$currentTime = _ref3.currentTime,
1393
+ currentTime = _ref3$currentTime === void 0 ? Date.now() * MILLISECOND_TO_SECOND : _ref3$currentTime,
1394
+ currentTimeSelected = _ref3.currentTimeSelected,
1395
+ startTime = _ref3.startTime,
1396
+ endTime = _ref3.endTime,
1397
+ disableForecast = _ref3.disableForecast,
1398
+ _ref3$needleDragAreaW = _ref3.needleDragAreaWidth,
1399
+ needleDragAreaWidth = _ref3$needleDragAreaW === void 0 ? DRAG_AREA_WIDTH : _ref3$needleDragAreaW,
1400
+ needleLabelZIndex = _ref3.needleLabelZIndex,
1401
+ _ref3$needleLabelOffs = _ref3.needleLabelOffset,
1402
+ needleLabelOffset = _ref3$needleLabelOffs === void 0 ? [0, -5] : _ref3$needleLabelOffs,
1403
+ _ref3$needleWidth = _ref3.needleWidth,
1404
+ needleWidth = _ref3$needleWidth === void 0 ? NEEDLE_WIDTH : _ref3$needleWidth,
1405
+ timeStep = _ref3.timeStep,
1406
+ selectedTime = _ref3.selectedTime,
1407
+ setSelectedTime = _ref3.setSelectedTime,
1408
+ style = _ref3.style,
1409
+ onDoubleClick = _ref3.onDoubleClick;
1410
+ var _useTimesliderLiteTra = useTimesliderLiteTranslation(),
1411
+ i18n = _useTimesliderLiteTra.i18n;
1412
+ var language = i18n.language;
1413
+ var draggableRef = useRef(null);
1414
+ var _useTheme = useTheme(),
1415
+ timeSliderLite = _useTheme.palette.geowebColors.timeSliderLite;
1416
+ var timeZoneOffset = timeZone === 'UTC' ? 0 : undefined;
1417
+ var observedTimeStepSeconds = timeStep[0];
1418
+ var forecastTimeStepSeconds = timeStep[1];
1419
+ var timeStepSeconds = selectedTime >= currentTime ? forecastTimeStepSeconds : observedTimeStepSeconds;
1420
+ var lastObservedTime = floorLocalSeconds(currentTime, observedTimeStepSeconds, timeZoneOffset);
1421
+ var firstForecastTime = floorLocalSeconds(currentTime, forecastTimeStepSeconds, timeZoneOffset) + forecastTimeStepSeconds;
1422
+ var selectedTimePx = getSelectedTimePx(startTime, endTime, selectedTime, width);
1423
+ var x = selectedTimePx > 0 ? selectedTimePx - needleDragAreaWidth / 2 : -needleDragAreaWidth / 2;
1424
+ var isBetweenObservedAndForecast = selectedTime >= lastObservedTime && selectedTime < firstForecastTime;
1425
+ var roundedSelectedTime = isBetweenObservedAndForecast ? lastObservedTime : floorLocalSeconds(selectedTime, timeStepSeconds, timeZoneOffset);
1426
+ var dateString = new Date(roundedSelectedTime * 1000).toLocaleDateString(language, {
1427
+ weekday: 'short',
1428
+ month: 'numeric',
1429
+ day: 'numeric',
1430
+ hour: 'numeric',
1431
+ minute: 'numeric',
1432
+ timeZone: timeZone === 'UTC' ? 'UTC' : undefined
1433
+ });
1434
+ var localLabel = language === 'fi' || language === 'sv-FI' ? reformatFinnishDateString(dateString) : dateString;
1435
+ var label = timeZone === 'UTC' ? shortUTCTime(localLabel) : localLabel;
1436
+ return jsx(Draggable, {
1437
+ axis: "x",
1438
+ bounds: {
1439
+ left: -needleDragAreaWidth / 2,
1440
+ right: width - needleDragAreaWidth / 2
1441
+ },
1442
+ handle: ".TimeSliderLite-DraggableNeedle",
1443
+ nodeRef: draggableRef,
1444
+ onDrag: function onDrag(_, position) {
1445
+ var positionOffsetToCompensateFlooring = 0.5;
1446
+ var needleCenterPosition = position.x + needleDragAreaWidth / 2 + positionOffsetToCompensateFlooring;
1447
+ var newSelectedTime = getSelectedTimeFromPx(startTime, endTime, needleCenterPosition, width);
1448
+ if (disableForecast && newSelectedTime >= lastObservedTime) {
1449
+ setSelectedTime(lastObservedTime);
1450
+ }
1451
+ setSelectedTime(newSelectedTime);
1452
+ },
1453
+ onStop: function onStop(_, position) {
1454
+ var positionOffsetToCompensateFlooring = 0.5;
1455
+ var needleCenterPosition = position.x + needleDragAreaWidth / 2 + positionOffsetToCompensateFlooring;
1456
+ var newSelectedTime = getSelectedTimeFromPx(startTime, endTime, needleCenterPosition, width);
1457
+ var isLastObservedTime = newSelectedTime >= lastObservedTime && newSelectedTime < firstForecastTime || newSelectedTime >= lastObservedTime && disableForecast;
1458
+ var roundedSelectedTime = isLastObservedTime ? lastObservedTime : floorLocalSeconds(newSelectedTime, timeStepSeconds, timeZoneOffset);
1459
+ setSelectedTime(roundedSelectedTime);
1460
+ },
1461
+ position: {
1462
+ x: x,
1463
+ y: 0
1464
+ },
1465
+ children: jsxs(Box, {
1466
+ className: "TimeSliderLite-DraggableNeedle",
1467
+ "data-testid": "TimeSliderLite-DraggableNeedle",
1468
+ onDoubleClick: onDoubleClick,
1469
+ ref: draggableRef,
1470
+ sx: {
1471
+ overflow: 'visible'
1472
+ },
1473
+ children: [jsxs("svg", {
1474
+ cursor: "ew-resize",
1475
+ "data-testid": "TimeSliderLite-NeedleSvg",
1476
+ height: height,
1477
+ style: style,
1478
+ width: needleDragAreaWidth,
1479
+ children: [jsx(NeedleShadow, {
1480
+ height: height,
1481
+ stroke: timeSliderLite.needleShadow.stroke,
1482
+ width: needleWidth,
1483
+ x: needleDragAreaWidth / 2
1484
+ }), jsx(NeedleLine, {
1485
+ height: height,
1486
+ stroke: currentTimeSelected ? timeSliderLite.needleDefault.stroke : timeSliderLite.needle.stroke,
1487
+ width: needleWidth,
1488
+ x: needleDragAreaWidth / 2
1489
+ })]
1490
+ }), jsxs(Box, {
1491
+ bottom: "-1px",
1492
+ className: "TimeSliderLite-timeStamp",
1493
+ position: "absolute",
1494
+ sx: {
1495
+ backgroundColor: timeSliderLite.needleLabel.backgroundColor,
1496
+ border: "1px solid " + timeSliderLite.needleLabel.borderColor,
1497
+ borderRadius: '4px',
1498
+ className: draggableLabel ? 'TimeSliderLite-DraggableNeedle' : '',
1499
+ color: timeSliderLite.needleLabel.color,
1500
+ cursor: draggableLabel ? 'ew-resize' : null,
1501
+ fontSize: '12px',
1502
+ padding: '0px 4px 0px 4px',
1503
+ pointerEvents: draggableLabel ? null : 'none',
1504
+ transform: "translate(calc(-50% + " + needleWidth + "px + " + needleLabelOffset[0] + "px), " + needleLabelOffset[1] + "px)",
1505
+ zIndex: needleLabelZIndex != null ? needleLabelZIndex : null
1506
+ },
1507
+ children: [label, jsx(Box, {
1508
+ bottom: "-4px",
1509
+ className: "TimeSliderLite-timeStamp-tail",
1510
+ height: "10px",
1511
+ position: "absolute",
1512
+ sx: {
1513
+ backgroundColor: timeSliderLite.needleLabel.backgroundColor,
1514
+ transform: 'rotate(45deg)',
1515
+ left: "calc(50% - 5px - " + needleLabelOffset[0] + "px)",
1516
+ zIndex: -1
1517
+ },
1518
+ width: "10px"
1519
+ })]
1520
+ })]
1521
+ })
1522
+ });
1421
1523
  };
1422
1524
 
1423
1525
  var OBSERVED_PADDING_DAYS = 1;
@@ -1447,8 +1549,8 @@ var TimeSliderLiteBackgroundSvg = function TimeSliderLiteBackgroundSvg(_ref) {
1447
1549
  timeSliderLite = _useTheme.palette.geowebColors.timeSliderLite;
1448
1550
  if (!width) {
1449
1551
  return jsx("svg", {
1450
- style: style,
1451
- height: height
1552
+ height: height,
1553
+ style: style
1452
1554
  });
1453
1555
  }
1454
1556
  // Convert start and end time from Unix timestamp to JavaScript Date object
@@ -1492,14 +1594,14 @@ var TimeSliderLiteBackgroundSvg = function TimeSliderLiteBackgroundSvg(_ref) {
1492
1594
  });
1493
1595
  var label = dateString.charAt(0).toUpperCase() + dateString.slice(1);
1494
1596
  return jsx("text", {
1495
- x: x,
1496
- y: 14,
1497
1597
  fill: timeSliderLite.timeline.fill,
1498
- textAnchor: "left",
1499
1598
  fontSize: "12px",
1500
1599
  style: {
1501
1600
  userSelect: 'none'
1502
1601
  },
1602
+ textAnchor: "left",
1603
+ x: x,
1604
+ y: 14,
1503
1605
  children: label
1504
1606
  }, monthChange + "-month-change-text");
1505
1607
  }) : null;
@@ -1516,18 +1618,18 @@ var TimeSliderLiteBackgroundSvg = function TimeSliderLiteBackgroundSvg(_ref) {
1516
1618
  };
1517
1619
  var isObserved = index + 1 < currentDayIndex;
1518
1620
  var baseRectangle = /*#__PURE__*/createElement("rect", Object.assign({}, defaultProps, {
1621
+ "data-testid": "TimeSliderLite-BackgroundRectangle-" + (isObserved ? 'Observed' : 'Forecast'),
1519
1622
  fill: isObserved ? observedColor : forecastColor,
1520
- width: Math.ceil(tickSpacing),
1521
1623
  key: label + "-color",
1522
- "data-testid": "TimeSliderLite-BackgroundRectangle-" + (isObserved ? 'Observed' : 'Forecast')
1624
+ width: Math.ceil(tickSpacing)
1523
1625
  }));
1524
1626
  var localDayOffset = secondsSinceLocalMidnight(currentTime) * SECOND_TO_DAY + utcOffset;
1525
1627
  var isCurrentDay = index === Math.floor(currentDayIndex);
1526
1628
  if (isCurrentDay) {
1527
1629
  var partialRectangle = /*#__PURE__*/createElement("rect", Object.assign({}, defaultProps, {
1528
- width: tickSpacing * localDayOffset,
1529
1630
  fill: observedColor,
1530
- key: label + "-partial-color"
1631
+ key: label + "-partial-color",
1632
+ width: tickSpacing * localDayOffset
1531
1633
  }));
1532
1634
  return [baseRectangle, partialRectangle];
1533
1635
  }
@@ -1535,14 +1637,14 @@ var TimeSliderLiteBackgroundSvg = function TimeSliderLiteBackgroundSvg(_ref) {
1535
1637
  }).flat();
1536
1638
  var dailyLabels = !showMonthLabel ? dayLabels.map(function (label, index) {
1537
1639
  return jsx("text", {
1538
- x: (index - OBSERVED_PADDING_DAYS) * tickSpacing + 8 - tickOffset,
1539
- y: 14,
1540
1640
  fill: timeSliderLite.timeline.fill,
1541
- textAnchor: "left",
1542
1641
  fontSize: "12px",
1543
1642
  style: {
1544
1643
  userSelect: 'none'
1545
1644
  },
1645
+ textAnchor: "left",
1646
+ x: (index - OBSERVED_PADDING_DAYS) * tickSpacing + 8 - tickOffset,
1647
+ y: 14,
1546
1648
  children: dayLabels[index]
1547
1649
  }, label + "-text");
1548
1650
  }) : null;
@@ -1560,16 +1662,16 @@ var TimeSliderLiteBackgroundSvg = function TimeSliderLiteBackgroundSvg(_ref) {
1560
1662
  };
1561
1663
  return jsxs("g", {
1562
1664
  children: [jsx("text", Object.assign({}, defaultProps, {
1563
- textAnchor: "end",
1564
1665
  style: {
1565
1666
  userSelect: 'none'
1566
1667
  },
1668
+ textAnchor: "end",
1567
1669
  children: value
1568
1670
  })), jsx("text", Object.assign({}, defaultProps, {
1569
- textAnchor: "start",
1570
1671
  style: {
1571
1672
  userSelect: 'none'
1572
1673
  },
1674
+ textAnchor: "start",
1573
1675
  children: ":00"
1574
1676
  })), ","]
1575
1677
  }, label + "-" + value + "-hourLabel");
@@ -1590,18 +1692,18 @@ var TimeSliderLiteBackgroundSvg = function TimeSliderLiteBackgroundSvg(_ref) {
1590
1692
  length: Math.floor(observedTicksPerDay * (currentDayIndex - index)) + 1
1591
1693
  }, function (_, value) {
1592
1694
  return /*#__PURE__*/createElement("line", Object.assign({}, defaultProps, {
1695
+ key: label + "-" + value + "-observed-tick",
1593
1696
  x1: (index - OBSERVED_PADDING_DAYS) * tickSpacing + value * (tickSpacing / observedTicksPerDay) - tickOffset,
1594
- x2: (index - OBSERVED_PADDING_DAYS) * tickSpacing + value * (tickSpacing / observedTicksPerDay) - tickOffset,
1595
- key: label + "-" + value + "-observed-tick"
1697
+ x2: (index - OBSERVED_PADDING_DAYS) * tickSpacing + value * (tickSpacing / observedTicksPerDay) - tickOffset
1596
1698
  }));
1597
1699
  });
1598
1700
  var forecastTickMarksFromEndOfDay = Array.from({
1599
1701
  length: Math.floor(forecastTicksPerDay * (1 - (currentDayIndex - index))) + 1
1600
1702
  }, function (_, value) {
1601
1703
  return /*#__PURE__*/createElement("line", Object.assign({}, defaultProps, {
1704
+ key: label + "-" + value + "-forecast-tick",
1602
1705
  x1: (index + 1 - OBSERVED_PADDING_DAYS) * tickSpacing - value * (tickSpacing / forecastTicksPerDay) - tickOffset,
1603
- x2: (index + 1 - OBSERVED_PADDING_DAYS) * tickSpacing - value * (tickSpacing / forecastTicksPerDay) - tickOffset,
1604
- key: label + "-" + value + "-forecast-tick"
1706
+ x2: (index + 1 - OBSERVED_PADDING_DAYS) * tickSpacing - value * (tickSpacing / forecastTicksPerDay) - tickOffset
1605
1707
  }));
1606
1708
  });
1607
1709
  return [].concat(observedTickMarksFromStartOfDay, forecastTickMarksFromEndOfDay);
@@ -1610,195 +1712,20 @@ var TimeSliderLiteBackgroundSvg = function TimeSliderLiteBackgroundSvg(_ref) {
1610
1712
  length: ticksPerDay + 1
1611
1713
  }, function (_, value) {
1612
1714
  return /*#__PURE__*/createElement("line", Object.assign({}, defaultProps, {
1715
+ key: label + "-" + value + "-tick",
1613
1716
  x1: (index - OBSERVED_PADDING_DAYS) * tickSpacing + value * (tickSpacing / ticksPerDay) - tickOffset,
1614
- x2: (index - OBSERVED_PADDING_DAYS) * tickSpacing + value * (tickSpacing / ticksPerDay) - tickOffset,
1615
- key: label + "-" + value + "-tick"
1717
+ x2: (index - OBSERVED_PADDING_DAYS) * tickSpacing + value * (tickSpacing / ticksPerDay) - tickOffset
1616
1718
  }));
1617
1719
  });
1618
1720
  }).flat();
1619
1721
  return jsxs("svg", {
1722
+ height: height,
1620
1723
  style: style,
1621
1724
  width: width + TIME_SLIDER_LITE_PADDING_RIGHT,
1622
- height: height,
1623
1725
  children: [backgroundRectangles, tickMarks, monthLabels, dailyLabels, hourLabels]
1624
1726
  });
1625
1727
  };
1626
1728
 
1627
- var DRAG_AREA_WIDTH = 10;
1628
- var NEEDLE_WIDTH = 5;
1629
- var SHADOW_SPREAD = 2;
1630
- var NeedleShadow = function NeedleShadow(_ref) {
1631
- var x = _ref.x,
1632
- stroke = _ref.stroke,
1633
- height = _ref.height,
1634
- width = _ref.width;
1635
- return jsx("line", {
1636
- x1: x,
1637
- y1: height - (height - SHADOW_SPREAD / 2),
1638
- x2: x,
1639
- y2: height - SHADOW_SPREAD / 2,
1640
- strokeWidth: width + SHADOW_SPREAD,
1641
- stroke: stroke,
1642
- strokeLinecap: "round",
1643
- filter: "blur(0.5px)",
1644
- "data-testid": "TimeSliderLite-NeedleShadow"
1645
- });
1646
- };
1647
- var NeedleLine = function NeedleLine(_ref2) {
1648
- var x = _ref2.x,
1649
- stroke = _ref2.stroke,
1650
- height = _ref2.height,
1651
- width = _ref2.width;
1652
- return jsx("line", {
1653
- x1: x,
1654
- y1: width / 2,
1655
- x2: x,
1656
- y2: height - width / 2,
1657
- strokeWidth: width,
1658
- strokeLinecap: "round",
1659
- stroke: stroke,
1660
- "data-testid": "TimeSliderLite-NeedleLine"
1661
- });
1662
- };
1663
- var TimeSliderDraggableNeedle = function TimeSliderDraggableNeedle(_ref3) {
1664
- var draggableLabel = _ref3.draggableLabel,
1665
- width = _ref3.width,
1666
- height = _ref3.height,
1667
- _ref3$timeZone = _ref3.timeZone,
1668
- timeZone = _ref3$timeZone === void 0 ? 'LT' : _ref3$timeZone,
1669
- _ref3$currentTime = _ref3.currentTime,
1670
- currentTime = _ref3$currentTime === void 0 ? Date.now() * MILLISECOND_TO_SECOND : _ref3$currentTime,
1671
- currentTimeSelected = _ref3.currentTimeSelected,
1672
- startTime = _ref3.startTime,
1673
- endTime = _ref3.endTime,
1674
- disableForecast = _ref3.disableForecast,
1675
- _ref3$needleDragAreaW = _ref3.needleDragAreaWidth,
1676
- needleDragAreaWidth = _ref3$needleDragAreaW === void 0 ? DRAG_AREA_WIDTH : _ref3$needleDragAreaW,
1677
- needleLabelZIndex = _ref3.needleLabelZIndex,
1678
- _ref3$needleLabelOffs = _ref3.needleLabelOffset,
1679
- needleLabelOffset = _ref3$needleLabelOffs === void 0 ? [0, -5] : _ref3$needleLabelOffs,
1680
- _ref3$needleWidth = _ref3.needleWidth,
1681
- needleWidth = _ref3$needleWidth === void 0 ? NEEDLE_WIDTH : _ref3$needleWidth,
1682
- timeStep = _ref3.timeStep,
1683
- selectedTime = _ref3.selectedTime,
1684
- setSelectedTime = _ref3.setSelectedTime,
1685
- style = _ref3.style,
1686
- onDoubleClick = _ref3.onDoubleClick;
1687
- var _useTimesliderLiteTra = useTimesliderLiteTranslation(),
1688
- i18n = _useTimesliderLiteTra.i18n;
1689
- var language = i18n.language;
1690
- var draggableRef = useRef(null);
1691
- var _useTheme = useTheme(),
1692
- timeSliderLite = _useTheme.palette.geowebColors.timeSliderLite;
1693
- var timeZoneOffset = timeZone === 'UTC' ? 0 : undefined;
1694
- var observedTimeStepSeconds = timeStep[0];
1695
- var forecastTimeStepSeconds = timeStep[1];
1696
- var timeStepSeconds = selectedTime >= currentTime ? forecastTimeStepSeconds : observedTimeStepSeconds;
1697
- var lastObservedTime = floorLocalSeconds(currentTime, observedTimeStepSeconds, timeZoneOffset);
1698
- var firstForecastTime = floorLocalSeconds(currentTime, forecastTimeStepSeconds, timeZoneOffset) + forecastTimeStepSeconds;
1699
- var selectedTimePx = getSelectedTimePx(startTime, endTime, selectedTime, width);
1700
- var x = selectedTimePx > 0 ? selectedTimePx - needleDragAreaWidth / 2 : -needleDragAreaWidth / 2;
1701
- var isBetweenObservedAndForecast = selectedTime >= lastObservedTime && selectedTime < firstForecastTime;
1702
- var roundedSelectedTime = isBetweenObservedAndForecast ? lastObservedTime : floorLocalSeconds(selectedTime, timeStepSeconds, timeZoneOffset);
1703
- var dateString = new Date(roundedSelectedTime * 1000).toLocaleDateString(language, {
1704
- weekday: 'short',
1705
- month: 'numeric',
1706
- day: 'numeric',
1707
- hour: 'numeric',
1708
- minute: 'numeric',
1709
- timeZone: timeZone === 'UTC' ? 'UTC' : undefined
1710
- });
1711
- var localLabel = language === 'fi' || language === 'sv-FI' ? reformatFinnishDateString(dateString) : dateString;
1712
- var label = timeZone === 'UTC' ? shortUTCTime(localLabel) : localLabel;
1713
- return jsx(Draggable, {
1714
- handle: ".TimeSliderLite-DraggableNeedle",
1715
- axis: "x",
1716
- nodeRef: draggableRef,
1717
- bounds: {
1718
- left: -needleDragAreaWidth / 2,
1719
- right: width - needleDragAreaWidth / 2
1720
- },
1721
- position: {
1722
- x: x,
1723
- y: 0
1724
- },
1725
- onDrag: function onDrag(_, position) {
1726
- var positionOffsetToCompensateFlooring = 0.5;
1727
- var needleCenterPosition = position.x + needleDragAreaWidth / 2 + positionOffsetToCompensateFlooring;
1728
- var newSelectedTime = getSelectedTimeFromPx(startTime, endTime, needleCenterPosition, width);
1729
- if (disableForecast && newSelectedTime >= lastObservedTime) {
1730
- setSelectedTime(lastObservedTime);
1731
- }
1732
- setSelectedTime(newSelectedTime);
1733
- },
1734
- onStop: function onStop(_, position) {
1735
- var positionOffsetToCompensateFlooring = 0.5;
1736
- var needleCenterPosition = position.x + needleDragAreaWidth / 2 + positionOffsetToCompensateFlooring;
1737
- var newSelectedTime = getSelectedTimeFromPx(startTime, endTime, needleCenterPosition, width);
1738
- var isLastObservedTime = newSelectedTime >= lastObservedTime && newSelectedTime < firstForecastTime || newSelectedTime >= lastObservedTime && disableForecast;
1739
- var roundedSelectedTime = isLastObservedTime ? lastObservedTime : floorLocalSeconds(newSelectedTime, timeStepSeconds, timeZoneOffset);
1740
- setSelectedTime(roundedSelectedTime);
1741
- },
1742
- children: jsxs(Box, {
1743
- className: "TimeSliderLite-DraggableNeedle",
1744
- ref: draggableRef,
1745
- "data-testid": "TimeSliderLite-DraggableNeedle",
1746
- onDoubleClick: onDoubleClick,
1747
- sx: {
1748
- overflow: 'visible'
1749
- },
1750
- children: [jsxs("svg", {
1751
- style: style,
1752
- cursor: "ew-resize",
1753
- width: needleDragAreaWidth,
1754
- height: height,
1755
- "data-testid": "TimeSliderLite-NeedleSvg",
1756
- children: [jsx(NeedleShadow, {
1757
- x: needleDragAreaWidth / 2,
1758
- stroke: timeSliderLite.needleShadow.stroke,
1759
- height: height,
1760
- width: needleWidth
1761
- }), jsx(NeedleLine, {
1762
- x: needleDragAreaWidth / 2,
1763
- stroke: currentTimeSelected ? timeSliderLite.needleDefault.stroke : timeSliderLite.needle.stroke,
1764
- height: height,
1765
- width: needleWidth
1766
- })]
1767
- }), jsxs(Box, {
1768
- className: "TimeSliderLite-timeStamp",
1769
- position: "absolute",
1770
- bottom: "-1px",
1771
- sx: {
1772
- backgroundColor: timeSliderLite.needleLabel.backgroundColor,
1773
- border: "1px solid " + timeSliderLite.needleLabel.borderColor,
1774
- borderRadius: '4px',
1775
- className: draggableLabel ? 'TimeSliderLite-DraggableNeedle' : '',
1776
- color: timeSliderLite.needleLabel.color,
1777
- cursor: draggableLabel ? 'ew-resize' : null,
1778
- fontSize: '12px',
1779
- padding: '0px 4px 0px 4px',
1780
- pointerEvents: draggableLabel ? null : 'none',
1781
- transform: "translate(calc(-50% + " + needleWidth + "px + " + needleLabelOffset[0] + "px), " + needleLabelOffset[1] + "px)",
1782
- zIndex: needleLabelZIndex != null ? needleLabelZIndex : null
1783
- },
1784
- children: [label, jsx(Box, {
1785
- className: "TimeSliderLite-timeStamp-tail",
1786
- position: "absolute",
1787
- width: "10px",
1788
- height: "10px",
1789
- bottom: "-4px",
1790
- sx: {
1791
- backgroundColor: timeSliderLite.needleLabel.backgroundColor,
1792
- transform: 'rotate(45deg)',
1793
- left: "calc(50% - 5px - " + needleLabelOffset[0] + "px)",
1794
- zIndex: -1
1795
- }
1796
- })]
1797
- })]
1798
- })
1799
- });
1800
- };
1801
-
1802
1729
  var HOVER_NEEDLE_WIDTH = 1;
1803
1730
  var DEFAULT_OPACITY = 0.5;
1804
1731
  var TimeSliderClickableTimeline = function TimeSliderClickableTimeline(_ref) {
@@ -1828,12 +1755,6 @@ var TimeSliderClickableTimeline = function TimeSliderClickableTimeline(_ref) {
1828
1755
  }
1829
1756
  return jsx("svg", {
1830
1757
  "data-testid": "TimeSliderLite-clickableTimeline",
1831
- style: {
1832
- position: 'absolute',
1833
- width: '100%',
1834
- height: '100%',
1835
- cursor: 'pointer'
1836
- },
1837
1758
  onClick: function onClick() {
1838
1759
  return setSelectedTime(needleSuggestion);
1839
1760
  },
@@ -1846,17 +1767,23 @@ var TimeSliderClickableTimeline = function TimeSliderClickableTimeline(_ref) {
1846
1767
  onMouseMove: function onMouseMove(event) {
1847
1768
  isShown && setMouseX(event.nativeEvent.offsetX);
1848
1769
  },
1770
+ style: {
1771
+ position: 'absolute',
1772
+ width: '100%',
1773
+ height: '100%',
1774
+ cursor: 'pointer'
1775
+ },
1849
1776
  children: jsx("line", {
1850
1777
  opacity: isShown ? opacity : 0,
1851
- x1: x,
1852
- y1: "0",
1853
- x2: x,
1854
- y2: "100%",
1855
1778
  stroke: timeSliderLite.timeline.stroke,
1856
1779
  strokeWidth: HOVER_NEEDLE_WIDTH,
1857
1780
  style: {
1858
1781
  transition: 'opacity 0.2s ease-in-out'
1859
- }
1782
+ },
1783
+ x1: x,
1784
+ x2: x,
1785
+ y1: "0",
1786
+ y2: "100%"
1860
1787
  })
1861
1788
  });
1862
1789
  };
@@ -1947,6 +1874,7 @@ var TimeSliderLiteBackground = function TimeSliderLiteBackground(_ref) {
1947
1874
  };
1948
1875
  }, [sliderAreaRef]);
1949
1876
  return jsxs(Box, {
1877
+ "data-testid": "TimeSliderLite-Background",
1950
1878
  ref: sliderAreaRef,
1951
1879
  sx: {
1952
1880
  position: 'relative',
@@ -1955,93 +1883,157 @@ var TimeSliderLiteBackground = function TimeSliderLiteBackground(_ref) {
1955
1883
  width: '100%',
1956
1884
  backgroundColor: timeSliderLite.timelineBackgroundObserved.fill
1957
1885
  },
1958
- "data-testid": "TimeSliderLite-Background",
1959
1886
  children: [jsx(TimeSliderLiteBackgroundSvg, {
1887
+ currentTime: currentTime,
1888
+ disableForecast: disableForecast,
1889
+ endTime: endTime,
1890
+ height: height,
1891
+ startTime: startTime,
1960
1892
  style: {
1961
1893
  position: 'absolute',
1962
1894
  top: 0
1963
1895
  },
1964
1896
  timeStep: timeStep,
1965
- width: areaWidth,
1966
- height: height,
1967
- startTime: startTime,
1968
- endTime: endTime,
1969
- disableForecast: disableForecast,
1970
- currentTime: currentTime,
1971
- timeZone: timeZone
1897
+ timeZone: timeZone,
1898
+ width: areaWidth
1972
1899
  }), jsx(TimeSliderClickableTimeline, {
1973
1900
  currentTime: currentTime,
1901
+ disableForecast: disableForecast,
1902
+ endTime: endTime,
1974
1903
  opacity: mouseHoverNeedleOpacity,
1975
- width: areaWidth,
1904
+ setSelectedTime: setSelectedTime,
1976
1905
  startTime: startTime,
1977
- endTime: endTime,
1978
- disableForecast: disableForecast,
1979
1906
  timeStep: timeStep,
1980
- setSelectedTime: setSelectedTime,
1981
- timeZone: timeZone
1982
- }), drawNeedle && (!zerorange ? jsx(TimeSliderDraggableNeedle, {
1907
+ timeZone: timeZone,
1908
+ width: areaWidth
1909
+ }), !!drawNeedle && (!zerorange ? jsx(TimeSliderDraggableNeedle, {
1910
+ currentTime: currentTime,
1983
1911
  currentTimeSelected: currentTimeSelected,
1984
- onDoubleClick: resetSelectedTime,
1912
+ disableForecast: disableForecast,
1913
+ draggableLabel: draggableTimeStamp,
1914
+ endTime: endTime,
1915
+ height: height,
1916
+ needleDragAreaWidth: needleDragAreaWidth,
1917
+ needleLabelOffset: needleLabelOffset,
1918
+ needleLabelZIndex: needleLabelZIndex,
1985
1919
  needleWidth: needleWidth,
1986
- draggableLabel: draggableTimeStamp,
1920
+ onDoubleClick: resetSelectedTime,
1921
+ selectedTime: selectedTime,
1922
+ setSelectedTime: setSelectedTime,
1923
+ startTime: startTime,
1987
1924
  style: {
1988
1925
  position: 'absolute',
1989
1926
  top: 0
1990
1927
  },
1991
- timeZone: timeZone,
1992
- disableForecast: disableForecast,
1993
- width: areaWidth,
1994
- needleDragAreaWidth: needleDragAreaWidth,
1995
- needleLabelZIndex: needleLabelZIndex,
1996
- needleLabelOffset: needleLabelOffset,
1997
- height: height,
1998
- startTime: startTime,
1999
- endTime: endTime,
2000
1928
  timeStep: timeStep,
2001
- currentTime: currentTime,
2002
- selectedTime: selectedTime,
2003
- setSelectedTime: setSelectedTime
2004
- }) : jsx(TimeSliderZeroTimestamp, {
2005
1929
  timeZone: timeZone,
2006
- timeStep: timeStep,
1930
+ width: areaWidth
1931
+ }) : jsx(TimeSliderZeroTimestamp, {
2007
1932
  currentTime: currentTime,
1933
+ timeStep: timeStep,
1934
+ timeZone: timeZone,
2008
1935
  timestampZIndex: needleLabelZIndex
2009
1936
  }))]
2010
1937
  });
2011
1938
  };
2012
1939
 
2013
- var StepButton = function StepButton(_ref) {
2014
- var _settings$icon$forwar, _settings$icon, _settings$icon$backwa, _settings$icon2;
2015
- var forward = _ref.forward,
2016
- isDisabled = _ref.isDisabled,
2017
- _ref$onClick = _ref.onClick,
2018
- onClick = _ref$onClick === void 0 ? function () {} : _ref$onClick,
1940
+ var _excluded$1 = ["children", "right", "left"];
1941
+ var ControlButtonGroup = function ControlButtonGroup(_ref) {
1942
+ var children = _ref.children,
1943
+ right = _ref.right,
1944
+ left = _ref.left,
1945
+ props = _objectWithoutPropertiesLoose(_ref, _excluded$1);
1946
+ return jsx(ButtonGroup, Object.assign({
1947
+ fullWidth: true,
1948
+ orientation: "horizontal"
1949
+ }, props, {
1950
+ sx: Object.assign({}, right && {
1951
+ borderTopLeftRadius: 0,
1952
+ borderBottomLeftRadius: 0
1953
+ }, left && {
1954
+ borderTopRightRadius: 0,
1955
+ borderBottomRightRadius: 0
1956
+ }, {
1957
+ backgroundColor: 'geowebColors.background.surface',
1958
+ height: '100%',
1959
+ alignItems: 'center',
1960
+ justifyContent: 'center',
1961
+ padding: '4px',
1962
+ gap: '2px'
1963
+ }, Array.isArray(props.sx) ? Object.assign.apply(Object, [{}].concat(props.sx)) : props.sx),
1964
+ children: children
1965
+ }));
1966
+ };
1967
+
1968
+ /* *
1969
+ * Licensed under the Apache License, Version 2.0 (the "License");
1970
+ * you may not use this file except in compliance with the License.
1971
+ * You may obtain a copy of the License at
1972
+ *
1973
+ * http://www.apache.org/licenses/LICENSE-2.0
1974
+ *
1975
+ * Unless required by applicable law or agreed to in writing, software
1976
+ * distributed under the License is distributed on an "AS IS" BASIS,
1977
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1978
+ * See the License for the specific language governing permissions and
1979
+ * limitations under the License.
1980
+ *
1981
+ * Copyright 2023 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
1982
+ * Copyright 2023 - Finnish Meteorological Institute (FMI)
1983
+ * Copyright 2024 - The Norwegian Meteorological Institute (MET Norway)
1984
+ * */
1985
+ var timeSliderLiteButtonDefaultProps = {
1986
+ sx: {
1987
+ width: '36px',
1988
+ height: '36px'
1989
+ }
1990
+ };
1991
+
1992
+ var HideButton = function HideButton(_ref) {
1993
+ var _settings$icon$hide, _settings$icon, _settings$icon$show, _settings$icon2;
1994
+ var isVisible = _ref.isVisible,
2019
1995
  settings = _ref.settings,
2020
- tooltipDelay = _ref.tooltipDelay;
1996
+ onClick = _ref.onClick;
2021
1997
  var _useTimesliderLiteTra = useTimesliderLiteTranslation(),
2022
1998
  t = _useTimesliderLiteTra.t;
2023
- var forwardTitle = t('controlButtons.forward');
2024
- var backwardTitle = t('controlButtons.backward');
2025
- var forwardIcon = (_settings$icon$forwar = settings == null || (_settings$icon = settings.icon) == null ? void 0 : _settings$icon.forward) != null ? _settings$icon$forwar : jsx(StepForward, {
2026
- "data-testid": "step-forward-svg-path"
2027
- });
2028
- var backwardIcon = (_settings$icon$backwa = settings == null || (_settings$icon2 = settings.icon) == null ? void 0 : _settings$icon2.backward) != null ? _settings$icon$backwa : jsx(StepBackward, {
2029
- "data-testid": "step-backward-svg-path"
1999
+ var hideIcon = (_settings$icon$hide = settings == null || (_settings$icon = settings.icon) == null ? void 0 : _settings$icon.hide) != null ? _settings$icon$hide : jsx(ChevronDown, {});
2000
+ var showIcon = (_settings$icon$show = settings == null || (_settings$icon2 = settings.icon) == null ? void 0 : _settings$icon2.show) != null ? _settings$icon$show : jsx(ChevronUp, {});
2001
+ return jsx(Tooltip, {
2002
+ placement: "top-end",
2003
+ title: isVisible ? t('controlButtons.hide') : t('controlButtons.show'),
2004
+ children: jsx(IconButton, Object.assign({}, timeSliderLiteButtonDefaultProps, {
2005
+ "aria-selected": !isVisible,
2006
+ "data-testid": "TimeSliderLite-HideButton",
2007
+ onClick: onClick,
2008
+ children: isVisible ? hideIcon : showIcon
2009
+ }))
2030
2010
  });
2011
+ };
2012
+
2013
+ var MenuButton = function MenuButton(_ref) {
2014
+ var _settings$icon;
2015
+ var menuOpen = _ref.menuOpen,
2016
+ onClick = _ref.onClick,
2017
+ settings = _ref.settings;
2018
+ var _useTimesliderLiteTra = useTimesliderLiteTranslation(),
2019
+ t = _useTimesliderLiteTra.t;
2020
+ var icon = (_settings$icon = settings == null ? void 0 : settings.icon) != null ? _settings$icon : jsx(Options, {});
2021
+ var Button = jsx(IconButton, Object.assign({}, timeSliderLiteButtonDefaultProps, {
2022
+ "aria-selected": menuOpen,
2023
+ "data-testid": "TimeSliderLite-MenuButton",
2024
+ onClick: onClick,
2025
+ sx: Object.assign({}, menuOpen && {
2026
+ backgroundColor: 'geowebColors.timeSliderLite.selected.backgroundColor'
2027
+ }, Array.isArray(timeSliderLiteButtonDefaultProps.sx) ? Object.assign.apply(Object, [{}].concat(timeSliderLiteButtonDefaultProps.sx)) : timeSliderLiteButtonDefaultProps.sx),
2028
+ children: icon
2029
+ }));
2030
+ if (menuOpen) {
2031
+ return Button;
2032
+ }
2031
2033
  return jsx(Tooltip, {
2032
- placement: "top",
2033
- title: forward ? forwardTitle : backwardTitle,
2034
- enterDelay: tooltipDelay,
2035
- enterNextDelay: tooltipDelay,
2036
- children: jsx("span", {
2037
- children: jsx(IconButton, Object.assign({}, timeSliderLiteButtonDefaultProps, {
2038
- disabled: isDisabled,
2039
- "aria-label": forward ? forwardTitle : backwardTitle,
2040
- onClick: onClick,
2041
- "data-testid": "TimeSliderLite-StepButton" + (forward ? 'Forward' : 'Backward'),
2042
- children: forward ? forwardIcon : backwardIcon
2043
- }))
2044
- })
2034
+ placement: "top-start",
2035
+ title: t('menu.title'),
2036
+ children: Button
2045
2037
  });
2046
2038
  };
2047
2039
 
@@ -2057,50 +2049,58 @@ var PlayButton = function PlayButton(_ref) {
2057
2049
  var pauseIcon = (_settings$icon$pause = settings == null || (_settings$icon = settings.icon) == null ? void 0 : _settings$icon.pause) != null ? _settings$icon$pause : jsx(Pause, {});
2058
2050
  var playIcon = (_settings$icon$play = settings == null || (_settings$icon2 = settings.icon) == null ? void 0 : _settings$icon2.play) != null ? _settings$icon$play : jsx(Play, {});
2059
2051
  return jsx(Tooltip, {
2060
- title: isAnimating ? t('controlButtons.pause') : t('controlButtons.play'),
2061
- placement: "top",
2062
2052
  enterDelay: tooltipDelay,
2063
2053
  enterNextDelay: tooltipDelay,
2054
+ placement: "top",
2055
+ title: isAnimating ? t('controlButtons.pause') : t('controlButtons.play'),
2064
2056
  children: jsx("span", {
2065
2057
  children: jsx(IconButton, Object.assign({}, timeSliderLiteButtonDefaultProps, {
2066
- sx: Object.assign({}, isAnimating && {
2067
- backgroundColor: 'geowebColors.timeSliderLite.selected.backgroundColor'
2068
- }, timeSliderLiteButtonDefaultProps.sx),
2058
+ "data-testid": "TimeSliderLite-PlayButton",
2059
+ disabled: isDisabled,
2069
2060
  onClick: function onClick() {
2070
2061
  onTogglePlayButton();
2071
2062
  },
2072
- disabled: isDisabled,
2073
- "data-testid": "TimeSliderLite-PlayButton",
2063
+ sx: Object.assign({}, isAnimating && {
2064
+ backgroundColor: 'geowebColors.timeSliderLite.selected.backgroundColor'
2065
+ }, Array.isArray(timeSliderLiteButtonDefaultProps.sx) ? Object.assign.apply(Object, [{}].concat(timeSliderLiteButtonDefaultProps.sx)) : timeSliderLiteButtonDefaultProps.sx),
2074
2066
  children: isAnimating ? pauseIcon : playIcon
2075
2067
  }))
2076
2068
  })
2077
2069
  });
2078
2070
  };
2079
2071
 
2080
- var MenuButton = function MenuButton(_ref) {
2081
- var _settings$icon;
2082
- var menuOpen = _ref.menuOpen,
2083
- onClick = _ref.onClick,
2084
- settings = _ref.settings;
2072
+ var StepButton = function StepButton(_ref) {
2073
+ var _settings$icon$forwar, _settings$icon, _settings$icon$backwa, _settings$icon2;
2074
+ var forward = _ref.forward,
2075
+ isDisabled = _ref.isDisabled,
2076
+ _ref$onClick = _ref.onClick,
2077
+ onClick = _ref$onClick === void 0 ? function () {} : _ref$onClick,
2078
+ settings = _ref.settings,
2079
+ tooltipDelay = _ref.tooltipDelay;
2085
2080
  var _useTimesliderLiteTra = useTimesliderLiteTranslation(),
2086
2081
  t = _useTimesliderLiteTra.t;
2087
- var icon = (_settings$icon = settings == null ? void 0 : settings.icon) != null ? _settings$icon : jsx(Options, {});
2088
- var Button = jsx(IconButton, Object.assign({}, timeSliderLiteButtonDefaultProps, {
2089
- sx: Object.assign({}, menuOpen && {
2090
- backgroundColor: 'geowebColors.timeSliderLite.selected.backgroundColor'
2091
- }, timeSliderLiteButtonDefaultProps.sx),
2092
- "aria-selected": menuOpen,
2093
- onClick: onClick,
2094
- "data-testid": "TimeSliderLite-MenuButton",
2095
- children: icon
2096
- }));
2097
- if (menuOpen) {
2098
- return Button;
2099
- }
2082
+ var forwardTitle = t('controlButtons.forward');
2083
+ var backwardTitle = t('controlButtons.backward');
2084
+ var forwardIcon = (_settings$icon$forwar = settings == null || (_settings$icon = settings.icon) == null ? void 0 : _settings$icon.forward) != null ? _settings$icon$forwar : jsx(StepForward, {
2085
+ "data-testid": "step-forward-svg-path"
2086
+ });
2087
+ var backwardIcon = (_settings$icon$backwa = settings == null || (_settings$icon2 = settings.icon) == null ? void 0 : _settings$icon2.backward) != null ? _settings$icon$backwa : jsx(StepBackward, {
2088
+ "data-testid": "step-backward-svg-path"
2089
+ });
2100
2090
  return jsx(Tooltip, {
2101
- placement: "top-start",
2102
- title: t('menu.title'),
2103
- children: Button
2091
+ enterDelay: tooltipDelay,
2092
+ enterNextDelay: tooltipDelay,
2093
+ placement: "top",
2094
+ title: forward ? forwardTitle : backwardTitle,
2095
+ children: jsx("span", {
2096
+ children: jsx(IconButton, Object.assign({}, timeSliderLiteButtonDefaultProps, {
2097
+ "aria-label": forward ? forwardTitle : backwardTitle,
2098
+ "data-testid": "TimeSliderLite-StepButton" + (forward ? 'Forward' : 'Backward'),
2099
+ disabled: isDisabled,
2100
+ onClick: onClick,
2101
+ children: forward ? forwardIcon : backwardIcon
2102
+ }))
2103
+ })
2104
2104
  });
2105
2105
  };
2106
2106
 
@@ -2240,12 +2240,12 @@ var TimeSliderLite = function TimeSliderLite(_ref) {
2240
2240
  var tooltipDelay = menuOpen ? TIME_SLIDER_LITE_TOOLTIP_DELAY : undefined;
2241
2241
  return jsxs(Grid, {
2242
2242
  container: true,
2243
- sx: Object.assign({}, styles.container, sx, {
2243
+ "data-testid": "timeSliderLite-" + mapId,
2244
+ sx: Object.assign({}, styles.container, Array.isArray(sx) ? Object.assign.apply(Object, [{}].concat(sx)) : sx, {
2244
2245
  gridTemplateColumns: isVisible ? 'auto 1fr auto' : "1fr auto",
2245
2246
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
2246
2247
  boxShadow: isVisible ? sx == null ? void 0 : sx.boxShadow : undefined
2247
2248
  }),
2248
- "data-testid": "timeSliderLite-" + mapId,
2249
2249
  children: [isVisible ? jsxs(Fragment, {
2250
2250
  children: [jsx(Grid, {
2251
2251
  sx: {
@@ -2255,9 +2255,9 @@ var TimeSliderLite = function TimeSliderLite(_ref) {
2255
2255
  left: true,
2256
2256
  children: [!hideMenuButton && jsxs(Fragment, {
2257
2257
  children: [jsx(MenuButton, {
2258
- settings: settings == null ? void 0 : settings.menuButton,
2259
2258
  menuOpen: menuOpen,
2260
- onClick: onToggleMenu
2259
+ onClick: onToggleMenu,
2260
+ settings: settings == null ? void 0 : settings.menuButton
2261
2261
  }), jsx(Divider, {
2262
2262
  orientation: "vertical",
2263
2263
  sx: {
@@ -2266,51 +2266,51 @@ var TimeSliderLite = function TimeSliderLite(_ref) {
2266
2266
  }
2267
2267
  })]
2268
2268
  }), !hidePlayButton && jsx(PlayButton, {
2269
- settings: settings == null ? void 0 : settings.playButton,
2270
2269
  isAnimating: isAnimating,
2270
+ isDisabled: needleDisabled,
2271
2271
  onTogglePlayButton: onToggleAnimation,
2272
- tooltipDelay: tooltipDelay,
2273
- isDisabled: needleDisabled
2272
+ settings: settings == null ? void 0 : settings.playButton,
2273
+ tooltipDelay: tooltipDelay
2274
2274
  }), !hideStepButtons && jsxs(Fragment, {
2275
2275
  children: [jsx(StepButton, {
2276
- settings: settings == null ? void 0 : settings.stepButton,
2276
+ isDisabled: needleDisabled,
2277
2277
  onClick: function onClick() {
2278
2278
  return handleTimeStep(-timeStepSeconds);
2279
2279
  },
2280
- tooltipDelay: tooltipDelay,
2281
- isDisabled: needleDisabled
2280
+ settings: settings == null ? void 0 : settings.stepButton,
2281
+ tooltipDelay: tooltipDelay
2282
2282
  }), jsx(StepButton, {
2283
2283
  forward: true,
2284
- settings: settings == null ? void 0 : settings.stepButton,
2284
+ isDisabled: needleDisabled,
2285
2285
  onClick: function onClick() {
2286
2286
  return handleTimeStep(timeStepSeconds);
2287
2287
  },
2288
- tooltipDelay: tooltipDelay,
2289
- isDisabled: needleDisabled
2288
+ settings: settings == null ? void 0 : settings.stepButton,
2289
+ tooltipDelay: tooltipDelay
2290
2290
  })]
2291
2291
  })]
2292
2292
  })
2293
2293
  }), jsx(Grid, {
2294
2294
  children: jsx(TimeSliderLiteBackground, {
2295
- draggableTimeStamp: draggableTimeStamp,
2296
2295
  currentTime: currentTime,
2297
- currentTimeSelected: autoUpdateSelectedTime && !isAnimating,
2298
- startTime: roundedStartTime,
2299
- timeZone: timeZone,
2300
- endTime: roundedEndTime,
2296
+ currentTimeSelected: !!autoUpdateSelectedTime && !isAnimating,
2301
2297
  disableForecast: isObservedTimeRange,
2298
+ draggableTimeStamp: draggableTimeStamp,
2299
+ endTime: roundedEndTime,
2300
+ height: height,
2302
2301
  mouseHoverNeedleOpacity: mouseHoverNeedleOpacity,
2303
- needleWidth: needleWidth,
2304
2302
  needleDragAreaWidth: needleDragAreaWidth,
2305
- needleLabelZIndex: needleLabelZIndex,
2306
2303
  needleLabelOffset: needleLabelOffset,
2307
- timeStep: [observedTimeStepSeconds, forecastTimeStepSeconds],
2308
- selectedTime: runningExternalAnimation ? selectedTime : rawSelectedTime,
2309
- setSelectedTime: handleTimeSelect,
2304
+ needleLabelZIndex: needleLabelZIndex,
2305
+ needleWidth: needleWidth,
2310
2306
  resetSelectedTime: function resetSelectedTime() {
2311
2307
  return setRawSelectedTime(lastObservedTime);
2312
2308
  },
2313
- height: height,
2309
+ selectedTime: runningExternalAnimation ? selectedTime : rawSelectedTime,
2310
+ setSelectedTime: handleTimeSelect,
2311
+ startTime: roundedStartTime,
2312
+ timeStep: [observedTimeStepSeconds, forecastTimeStepSeconds],
2313
+ timeZone: timeZone,
2314
2314
  zerorange: needleDisabled
2315
2315
  })
2316
2316
  })]
@@ -2325,9 +2325,9 @@ var TimeSliderLite = function TimeSliderLite(_ref) {
2325
2325
  className: "timeSliderLite-hideButtonGroup-" + (isVisible ? 'hide' : 'show'),
2326
2326
  right: isVisible,
2327
2327
  children: jsx(HideButton, {
2328
- settings: settings == null ? void 0 : settings.hideButton,
2328
+ isVisible: isVisible,
2329
2329
  onClick: onToggleTimeSlider,
2330
- isVisible: isVisible
2330
+ settings: settings == null ? void 0 : settings.hideButton
2331
2331
  })
2332
2332
  })
2333
2333
  })]
@@ -2410,18 +2410,22 @@ var TimeSliderLiteConnect = function TimeSliderLiteConnect(_ref) {
2410
2410
  var _React$useState = React.useState(false),
2411
2411
  menuOpen = _React$useState[0],
2412
2412
  setMenuOpen = _React$useState[1];
2413
+ // eslint-disable-next-line react/hook-use-state
2413
2414
  var useTimeRange = React.useState(null);
2414
2415
  var _ref2 = overrideUseTimeRange || useTimeRange,
2415
2416
  timeRange = _ref2[0],
2416
2417
  setTimeRange = _ref2[1];
2418
+ // eslint-disable-next-line react/hook-use-state
2417
2419
  var useTimeStep = React.useState(null);
2418
2420
  var _ref3 = overrideUseTimeStep || useTimeStep,
2419
2421
  timeStep = _ref3[0],
2420
2422
  setTimeStep = _ref3[1];
2423
+ // eslint-disable-next-line react/hook-use-state
2421
2424
  var useTimeZone = React.useState('LT');
2422
2425
  var _ref4 = overrideUseTimeZone || useTimeZone,
2423
2426
  timeZone = _ref4[0],
2424
2427
  setTimeZone = _ref4[1];
2428
+ // eslint-disable-next-line react/hook-use-state
2425
2429
  var useUpdateInterval = React.useState(null);
2426
2430
  var _ref5 = overrideUseUpdateInterval || useUpdateInterval,
2427
2431
  updateInterval = _ref5[0],
@@ -2505,29 +2509,34 @@ var TimeSliderLiteConnect = function TimeSliderLiteConnect(_ref) {
2505
2509
  setTimeStep(newTimeStep);
2506
2510
  };
2507
2511
  return jsxs(Fragment, {
2508
- children: [isVisible && menuOpen && jsx(TimeSliderLiteOptionsMenu, Object.assign({
2509
- menuOpen: menuOpen,
2510
- setMenuOpen: setMenuOpen,
2512
+ children: [!!isVisible && !!menuOpen && jsx(TimeSliderLiteOptionsMenu, Object.assign({
2513
+ TimeZoneSwitch: timeSliderProps == null || (_timeSliderProps$sett = timeSliderProps.settings) == null ? void 0 : _timeSliderProps$sett.TimeZoneSwitch,
2514
+ closeButtonIcon: (_timeSliderProps$sett2 = timeSliderProps.settings) == null || (_timeSliderProps$sett2 = _timeSliderProps$sett2.closeButton) == null ? void 0 : _timeSliderProps$sett2.icon,
2511
2515
  defaultTimeRange: [defaultStartTime, defaultEndTime],
2512
2516
  defaultTimeStep: defaultTimeStep,
2517
+ dropdownButtonIcon: (_timeSliderProps$sett3 = timeSliderProps.settings) == null || (_timeSliderProps$sett3 = _timeSliderProps$sett3.dropdownButton) == null ? void 0 : _timeSliderProps$sett3.icon,
2518
+ menuOpen: menuOpen,
2519
+ setMenuOpen: setMenuOpen,
2520
+ useAnimationSpeed: [animationSpeed, handleAnimationSpeedChange],
2513
2521
  useTimeRange: [timeRange, handleTimeRangeChange],
2514
2522
  useTimeStep: [timeStep, handleTimeStepChange],
2515
- useAnimationSpeed: [animationSpeed, handleAnimationSpeedChange],
2516
- useUpdateInterval: [updateInterval, setUpdateInterval],
2517
2523
  useTimeZone: [timeZone, setTimeZone],
2518
- closeButtonIcon: (_timeSliderProps$sett = timeSliderProps.settings) == null || (_timeSliderProps$sett = _timeSliderProps$sett.closeButton) == null ? void 0 : _timeSliderProps$sett.icon,
2519
- dropdownButtonIcon: (_timeSliderProps$sett2 = timeSliderProps.settings) == null || (_timeSliderProps$sett2 = _timeSliderProps$sett2.dropdownButton) == null ? void 0 : _timeSliderProps$sett2.icon,
2520
- TimeZoneSwitch: timeSliderProps == null || (_timeSliderProps$sett3 = timeSliderProps.settings) == null ? void 0 : _timeSliderProps$sett3.TimeZoneSwitch
2524
+ useUpdateInterval: [updateInterval, setUpdateInterval]
2521
2525
  }, TimeSliderLiteOptionsMenuProps)), jsx(TimeSliderLite, Object.assign({
2522
2526
  currentTime: currentTime,
2523
- selectedTime: selectedTime,
2524
- timeStep: timeStep != null ? timeStep : defaultTimeStep,
2525
- timeZone: timeZone,
2526
- overrideAnimation: true,
2527
+ endTime: endTime,
2527
2528
  isAnimating: !!isAnimating,
2528
2529
  isVisible: isVisible,
2529
- needleDisabled: zeroRange,
2530
2530
  mapId: mapId,
2531
+ menuOpen: menuOpen,
2532
+ needleDisabled: zeroRange,
2533
+ onToggleAnimation: onToggleAnimation,
2534
+ onToggleMenu: function onToggleMenu() {
2535
+ return setMenuOpen(!menuOpen);
2536
+ },
2537
+ onToggleTimeSlider: onToggleTimeSliderVisibility,
2538
+ overrideAnimation: true,
2539
+ selectedTime: selectedTime,
2531
2540
  setSelectedTime: function setSelectedTime(newSelectedTime) {
2532
2541
  var newDate = preTimeDimensionSelect(mapId, newSelectedTime);
2533
2542
  if (isAnimating) {
@@ -2543,14 +2552,9 @@ var TimeSliderLiteConnect = function TimeSliderLiteConnect(_ref) {
2543
2552
  origin: mapEnums.MapActionOrigin.map
2544
2553
  }));
2545
2554
  },
2546
- menuOpen: menuOpen,
2547
- onToggleMenu: function onToggleMenu() {
2548
- return setMenuOpen(!menuOpen);
2549
- },
2550
- onToggleTimeSlider: onToggleTimeSliderVisibility,
2551
- onToggleAnimation: onToggleAnimation,
2552
2555
  startTime: startTime,
2553
- endTime: endTime
2556
+ timeStep: timeStep != null ? timeStep : defaultTimeStep,
2557
+ timeZone: timeZone
2554
2558
  }, timeSliderProps))]
2555
2559
  });
2556
2560
  };