@opengeoweb/store 15.3.0 → 16.0.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
@@ -2301,13 +2301,26 @@ var slice$6 = createSlice({
2301
2301
  },
2302
2302
  hideLayerInfo: function hideLayerInfo(draft) {
2303
2303
  delete draft.activeLayerInfo;
2304
+ },
2305
+ SetLayerLegendVisibilityPayload: function SetLayerLegendVisibilityPayload(draft, action) {
2306
+ var _action$payload22 = action.payload,
2307
+ layerId = _action$payload22.layerId,
2308
+ showLayerLegend = _action$payload22.showLayerLegend;
2309
+ var layer = draft.byId[layerId];
2310
+ if (!layer) {
2311
+ return;
2312
+ }
2313
+ if (!layer.showLayerLegend) {
2314
+ layer.showLayerLegend = true;
2315
+ }
2316
+ draft.byId[layerId].showLayerLegend = showLayerLegend;
2304
2317
  }
2305
2318
  },
2306
2319
  extraReducers: function extraReducers(builder) {
2307
2320
  builder.addCase(setTimeSync, function (draft, action) {
2308
- var _action$payload22 = action.payload,
2309
- targetsFromAction = _action$payload22.targets,
2310
- source = _action$payload22.source;
2321
+ var _action$payload23 = action.payload,
2322
+ targetsFromAction = _action$payload23.targets,
2323
+ source = _action$payload23.source;
2311
2324
  /* Because we want backwards compatibility with the previous code, we also need to listen to the original source action */
2312
2325
  var targets = [];
2313
2326
  if (source) {
@@ -2337,9 +2350,9 @@ var slice$6 = createSlice({
2337
2350
  * These targets can be used as payloads in new Layer actions.
2338
2351
  * These actions are here handled via the layer reducer, as it is the same logic
2339
2352
  */
2340
- var _action$payload23 = action.payload,
2341
- targets = _action$payload23.targets,
2342
- source = _action$payload23.source;
2353
+ var _action$payload24 = action.payload,
2354
+ targets = _action$payload24.targets,
2355
+ source = _action$payload24.source;
2343
2356
  return targets.reduce(function (prevState, target) {
2344
2357
  var actionType = (source === null || source === void 0 ? void 0 : source.type) || 'GENERIC_SYNC_SETLAYERACTIONS';
2345
2358
  var action = {
@@ -2412,6 +2425,12 @@ var createLayersWithIds = function createLayersWithIds(state, layers) {
2412
2425
  }
2413
2426
  });
2414
2427
  };
2428
+ var layerHasTimeDimension = function layerHasTimeDimension(layer) {
2429
+ var _layer$dimensions;
2430
+ return !!((_layer$dimensions = layer.dimensions) !== null && _layer$dimensions !== void 0 && _layer$dimensions.some(function (dimension) {
2431
+ return dimension.name === 'time';
2432
+ }));
2433
+ };
2415
2434
  var initialState$4 = {
2416
2435
  byId: {},
2417
2436
  allIds: []
@@ -2763,12 +2782,25 @@ var slice$5 = createSlice({
2763
2782
  return;
2764
2783
  }
2765
2784
  draft.byId[mapId].isClockVisible = isClockVisible;
2785
+ if (!isClockVisible) {
2786
+ // close options menu when clock is closed
2787
+ draft.byId[mapId].isClockOptionsMenuVisible = false;
2788
+ }
2766
2789
  },
2767
- setClockPositionSize: function setClockPositionSize(draft, action) {
2790
+ toggleClockOptions: function toggleClockOptions(draft, action) {
2768
2791
  var _action$payload29 = action.payload,
2769
2792
  mapId = _action$payload29.mapId,
2770
- position = _action$payload29.position,
2771
- size = _action$payload29.size;
2793
+ isClockOptionsMenuVisible = _action$payload29.isClockOptionsMenuVisible;
2794
+ if (!draft.byId[mapId]) {
2795
+ return;
2796
+ }
2797
+ draft.byId[mapId].isClockOptionsMenuVisible = isClockOptionsMenuVisible;
2798
+ },
2799
+ setClockPositionSize: function setClockPositionSize(draft, action) {
2800
+ var _action$payload30 = action.payload,
2801
+ mapId = _action$payload30.mapId,
2802
+ position = _action$payload30.position,
2803
+ size = _action$payload30.size;
2772
2804
  if (!draft.byId[mapId]) {
2773
2805
  return;
2774
2806
  }
@@ -2782,10 +2814,10 @@ var slice$5 = createSlice({
2782
2814
  },
2783
2815
  extraReducers: function extraReducers(builder) {
2784
2816
  builder.addCase(layerActions.addLayer, function (draft, action) {
2785
- var _action$payload30 = action.payload,
2786
- layerId = _action$payload30.layerId,
2787
- mapId = _action$payload30.mapId,
2788
- layer = _action$payload30.layer;
2817
+ var _action$payload31 = action.payload,
2818
+ layerId = _action$payload31.layerId,
2819
+ mapId = _action$payload31.mapId,
2820
+ layer = _action$payload31.layer;
2789
2821
  if (!draft.byId[mapId]) {
2790
2822
  return;
2791
2823
  }
@@ -2793,21 +2825,21 @@ var slice$5 = createSlice({
2793
2825
  console.warn("Warning: Layer id ".concat(layerId, " was already taken"));
2794
2826
  return;
2795
2827
  }
2796
- if (!draft.byId[mapId].mapLayers.length) {
2828
+ var isFeatureLayer = (layer === null || layer === void 0 ? void 0 : layer.layerType) === LayerType.featureLayer;
2829
+ if (!isFeatureLayer && !draft.byId[mapId].autoUpdateLayerId && !draft.byId[mapId].autoTimeStepLayerId && layerHasTimeDimension(layer)) {
2797
2830
  draft.byId[mapId].autoUpdateLayerId = layerId;
2798
2831
  draft.byId[mapId].autoTimeStepLayerId = layerId;
2799
2832
  }
2800
- var isFeatureLayer = (layer === null || layer === void 0 ? void 0 : layer.layerType) === LayerType.featureLayer;
2801
2833
  if (isFeatureLayer) {
2802
2834
  draft.byId[mapId].featureLayers.unshift(layerId);
2803
2835
  } else {
2804
2836
  draft.byId[mapId].mapLayers.unshift(layerId);
2805
2837
  }
2806
2838
  }).addCase(layerActions.duplicateMapLayer, function (draft, action) {
2807
- var _action$payload31 = action.payload,
2808
- newLayerId = _action$payload31.newLayerId,
2809
- oldLayerId = _action$payload31.oldLayerId,
2810
- mapId = _action$payload31.mapId;
2839
+ var _action$payload32 = action.payload,
2840
+ newLayerId = _action$payload32.newLayerId,
2841
+ oldLayerId = _action$payload32.oldLayerId,
2842
+ mapId = _action$payload32.mapId;
2811
2843
  if (!draft.byId[mapId]) {
2812
2844
  return;
2813
2845
  }
@@ -2824,10 +2856,10 @@ var slice$5 = createSlice({
2824
2856
  draft.byId[mapId].featureLayers.unshift(newLayerId);
2825
2857
  }
2826
2858
  }).addCase(layerActions.addBaseLayer, function (draft, action) {
2827
- var _action$payload32 = action.payload,
2828
- layer = _action$payload32.layer,
2829
- layerId = _action$payload32.layerId,
2830
- mapId = _action$payload32.mapId;
2859
+ var _action$payload33 = action.payload,
2860
+ layer = _action$payload33.layer,
2861
+ layerId = _action$payload33.layerId,
2862
+ mapId = _action$payload33.mapId;
2831
2863
  if (!draft.byId[mapId]) {
2832
2864
  return;
2833
2865
  }
@@ -2843,23 +2875,23 @@ var slice$5 = createSlice({
2843
2875
  draft.byId[mapId].overLayers.unshift(layerId);
2844
2876
  }
2845
2877
  }).addCase(layerActions.setLayers, function (draft, action) {
2878
+ var _layersWithIds$find;
2846
2879
  var mapId = action.payload.mapId;
2847
2880
  var layersWithIds = createLayersWithIds(draft, action.payload.layers);
2848
2881
  var layerIds = layersWithIds.map(function (_ref) {
2849
2882
  var id = _ref.id;
2850
2883
  return id;
2851
2884
  });
2852
- var _layerIds = _slicedToArray(layerIds, 1),
2853
- activeLayerId = _layerIds[0];
2885
+ var activeLayerId = (_layersWithIds$find = layersWithIds.find(layerHasTimeDimension)) === null || _layersWithIds$find === void 0 ? void 0 : _layersWithIds$find.id;
2854
2886
  if (draft.byId[mapId]) {
2855
2887
  draft.byId[mapId].mapLayers = layerIds;
2856
2888
  draft.byId[mapId].autoUpdateLayerId = activeLayerId;
2857
2889
  draft.byId[mapId].autoTimeStepLayerId = activeLayerId;
2858
2890
  }
2859
2891
  }).addCase(layerActions.setBaseLayers, function (draft, action) {
2860
- var _action$payload33 = action.payload,
2861
- layers = _action$payload33.layers,
2862
- mapId = _action$payload33.mapId;
2892
+ var _action$payload34 = action.payload,
2893
+ layers = _action$payload34.layers,
2894
+ mapId = _action$payload34.mapId;
2863
2895
  // Split into base and overlayers
2864
2896
  var baseLayers = [];
2865
2897
  var overLayers = [];
@@ -2889,9 +2921,9 @@ var slice$5 = createSlice({
2889
2921
  }
2890
2922
  }
2891
2923
  }).addCase(layerActions.layerDelete, function (draft, action) {
2892
- var _action$payload34 = action.payload,
2893
- mapId = _action$payload34.mapId,
2894
- layerId = _action$payload34.layerId;
2924
+ var _action$payload35 = action.payload,
2925
+ mapId = _action$payload35.mapId,
2926
+ layerId = _action$payload35.layerId;
2895
2927
  var map = draft.byId[mapId];
2896
2928
  if (!map) {
2897
2929
  return;
@@ -2917,9 +2949,9 @@ var slice$5 = createSlice({
2917
2949
  return id !== layerId;
2918
2950
  });
2919
2951
  }).addCase(layerActions.baseLayerDelete, function (draft, action) {
2920
- var _action$payload35 = action.payload,
2921
- mapId = _action$payload35.mapId,
2922
- layerId = _action$payload35.layerId;
2952
+ var _action$payload36 = action.payload,
2953
+ mapId = _action$payload36.mapId,
2954
+ layerId = _action$payload36.layerId;
2923
2955
  if (!draft.byId[mapId]) {
2924
2956
  return;
2925
2957
  }
@@ -2930,14 +2962,14 @@ var slice$5 = createSlice({
2930
2962
  return id !== layerId;
2931
2963
  });
2932
2964
  }).addCase(layerActions.layerChangeDimension, function (draft, action) {
2933
- var _action$payload36 = action.payload,
2934
- layerId = _action$payload36.layerId,
2935
- dimension = _action$payload36.dimension;
2965
+ var _action$payload37 = action.payload,
2966
+ layerId = _action$payload37.layerId,
2967
+ dimension = _action$payload37.dimension;
2936
2968
  produceDraftStateSetMapDimensionFromLayerChangeDimension(draft, layerId, dimension);
2937
2969
  }).addCase(setTimeSync, function (draft, action) {
2938
- var _action$payload37 = action.payload,
2939
- targetsFromAction = _action$payload37.targets,
2940
- source = _action$payload37.source;
2970
+ var _action$payload38 = action.payload,
2971
+ targetsFromAction = _action$payload38.targets,
2972
+ source = _action$payload38.source;
2941
2973
  /* Because we want backwards compatibility with the previous code, we also need to listen to the original source action */
2942
2974
  var targets = [];
2943
2975
  if (source) {
@@ -2990,9 +3022,9 @@ var slice$5 = createSlice({
2990
3022
  }
2991
3023
  });
2992
3024
  }).addCase(setBboxSync, function (draft, action) {
2993
- var _action$payload38 = action.payload,
2994
- targetsFromAction = _action$payload38.targets,
2995
- source = _action$payload38.source;
3025
+ var _action$payload39 = action.payload,
3026
+ targetsFromAction = _action$payload39.targets,
3027
+ source = _action$payload39.source;
2996
3028
  /* Because we want backwards compatibility with the previous code, we also need to listen to the original source action */
2997
3029
  var targets = [];
2998
3030
  if (source) {
@@ -3024,9 +3056,9 @@ var slice$5 = createSlice({
3024
3056
  * These targets can be used as payloads in new Layer actions.
3025
3057
  * These actions are here handled via the layer reducer, as it is the same logic
3026
3058
  */
3027
- var _action$payload39 = action.payload,
3028
- targets = _action$payload39.targets,
3029
- source = _action$payload39.source;
3059
+ var _action$payload40 = action.payload,
3060
+ targets = _action$payload40.targets,
3061
+ source = _action$payload40.source;
3030
3062
  return targets.reduce(function (prevState, target) {
3031
3063
  var actionType = (source === null || source === void 0 ? void 0 : source.type) || 'GENERIC_SYNC_SETLAYERACTIONS';
3032
3064
  var action = {
@@ -3048,9 +3080,9 @@ var slice$5 = createSlice({
3048
3080
  });
3049
3081
  return draft;
3050
3082
  }).addCase(mapChangeDimension, function (draft, action) {
3051
- var _action$payload40 = action.payload,
3052
- mapId = _action$payload40.mapId,
3053
- dimensionFromAction = _action$payload40.dimension;
3083
+ var _action$payload41 = action.payload,
3084
+ mapId = _action$payload41.mapId,
3085
+ dimensionFromAction = _action$payload41.dimension;
3054
3086
  produceDraftStateSetWebMapDimension(draft, mapId, dimensionFromAction, true);
3055
3087
  }).addCase(setMapPreset, function (draft, action) {
3056
3088
  var mapId = action.payload.mapId;
@@ -3070,9 +3102,9 @@ var slice$5 = createSlice({
3070
3102
  draft.byId[mapId].animationDelay = defaultAnimationDelayAtStart;
3071
3103
  draft.byId[mapId].dockedLayerManagerSize = '';
3072
3104
  }).addCase(uiActions.registerDialog, function (draft, action) {
3073
- var _action$payload41 = action.payload,
3074
- mapId = _action$payload41.mapId,
3075
- type = _action$payload41.type;
3105
+ var _action$payload42 = action.payload,
3106
+ mapId = _action$payload42.mapId,
3107
+ type = _action$payload42.type;
3076
3108
  if (!draft.byId[mapId]) {
3077
3109
  return;
3078
3110
  }
@@ -3538,9 +3570,16 @@ var getTargets = createSelector([syncGroupStore, function (syncGroupStore, paylo
3538
3570
  var source = syncronizationGroup.targets.byId[payload.sourceId];
3539
3571
  /* If the source is part of the target list, and is linked, continue syncing the other targets */
3540
3572
  if (source !== null && source !== void 0 && source.linked) {
3573
+ var hasLinkedPeer = syncronizationGroup.targets.allIds.some(function (targetId) {
3574
+ var _syncronizationGroup$;
3575
+ return targetId !== payload.sourceId && ((_syncronizationGroup$ = syncronizationGroup.targets.byId[targetId]) === null || _syncronizationGroup$ === void 0 ? void 0 : _syncronizationGroup$.linked);
3576
+ });
3577
+ if (!hasLinkedPeer) {
3578
+ return;
3579
+ }
3541
3580
  syncronizationGroup.targets.allIds.forEach(function (targetId) {
3542
3581
  var target = syncronizationGroup.targets.byId[targetId];
3543
- if (target.linked && !targetsInActionPayload[targetId]) {
3582
+ if (targetId !== payload.sourceId && target.linked && !targetsInActionPayload[targetId]) {
3544
3583
  /* Remember that we have already added this target in the action payloads, prevents adding it twice */
3545
3584
  targetsInActionPayload[targetId] = true;
3546
3585
  /* Compose the payload */
@@ -3637,6 +3676,44 @@ var selectors$6 = /*#__PURE__*/Object.freeze({
3637
3676
  syncGroupStore: syncGroupStore
3638
3677
  });
3639
3678
 
3679
+ /* *
3680
+ * Licensed under the Apache License, Version 2.0 (the "License");
3681
+ * you may not use this file except in compliance with the License.
3682
+ * You may obtain a copy of the License at
3683
+ *
3684
+ * http://www.apache.org/licenses/LICENSE-2.0
3685
+ *
3686
+ * Unless required by applicable law or agreed to in writing, software
3687
+ * distributed under the License is distributed on an "AS IS" BASIS,
3688
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
3689
+ * See the License for the specific language governing permissions and
3690
+ * limitations under the License.
3691
+ *
3692
+ * Copyright 2026 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
3693
+ * Copyright 2026 - Finnish Meteorological Institute (FMI)
3694
+ * Copyright 2026 - The Norwegian Meteorological Institute (MET Norway)
3695
+ * */
3696
+ var constructSyncSourceDisplayName = function constructSyncSourceDisplayName(sourceId, viewMeta, fallbackName) {
3697
+ var _viewMeta$title;
3698
+ var rawTitle = viewMeta === null || viewMeta === void 0 || (_viewMeta$title = viewMeta.title) === null || _viewMeta$title === void 0 ? void 0 : _viewMeta$title.trim();
3699
+ if (rawTitle === sourceId) {
3700
+ return sourceId;
3701
+ }
3702
+ var title = rawTitle && rawTitle !== sourceId ? rawTitle : undefined;
3703
+ if (!title) {
3704
+ return fallbackName;
3705
+ }
3706
+ var isSavedView = !!(viewMeta !== null && viewMeta !== void 0 && viewMeta.id) && viewMeta.id !== sourceId;
3707
+ if (isSavedView) {
3708
+ return title;
3709
+ }
3710
+ var isDefaultUnsavedTitle = /^New .+ preset$/i.test(title);
3711
+ if (isDefaultUnsavedTitle) {
3712
+ return title.includes(sourceId) ? title : "".concat(title, " (").concat(sourceId, ")");
3713
+ }
3714
+ return title;
3715
+ };
3716
+
3640
3717
  /* *
3641
3718
  * Licensed under the Apache License, Version 2.0 (the "License");
3642
3719
  * you may not use this file except in compliance with the License.
@@ -3682,7 +3759,7 @@ var groupTypes = [{
3682
3759
  - Runs Each time viewState is created:
3683
3760
  - Fill arrays inside initialState with objects containing new values from Redux
3684
3761
  */
3685
- var createSyncGroupViewState = function createSyncGroupViewState(groups, sources) {
3762
+ var createSyncGroupViewState = function createSyncGroupViewState(groups, sources, viewsById) {
3686
3763
  var initialState = produce(emptyState, function (draft) {
3687
3764
  /*
3688
3765
  _____ 1. Fill groups _____
@@ -3713,7 +3790,7 @@ var createSyncGroupViewState = function createSyncGroupViewState(groups, sources
3713
3790
  if (sources.byId[id].types.includes(syncType)) {
3714
3791
  draft[groupType].sourcesById.push({
3715
3792
  id: id,
3716
- name: id
3793
+ name: constructSyncSourceDisplayName(id, viewsById === null || viewsById === void 0 ? void 0 : viewsById[id], id)
3717
3794
  });
3718
3795
  }
3719
3796
  });
@@ -3727,7 +3804,12 @@ var groups = function groups(store) {
3727
3804
  var sources = function sources(store) {
3728
3805
  return store.syncGroups.sources;
3729
3806
  };
3730
- var createSyncGroupViewStateSelector = createSelector(groups, sources, createSyncGroupViewState);
3807
+ var workspaceViewsById = function workspaceViewsById(store) {
3808
+ var _storeWithWorkspace$w;
3809
+ var storeWithWorkspace = store;
3810
+ return (_storeWithWorkspace$w = storeWithWorkspace.workspace) === null || _storeWithWorkspace$w === void 0 || (_storeWithWorkspace$w = _storeWithWorkspace$w.views) === null || _storeWithWorkspace$w === void 0 ? void 0 : _storeWithWorkspace$w.byId;
3811
+ };
3812
+ var createSyncGroupViewStateSelector = createSelector(groups, sources, workspaceViewsById, createSyncGroupViewState);
3731
3813
 
3732
3814
  var selector = /*#__PURE__*/Object.freeze({
3733
3815
  __proto__: null,
@@ -3741,49 +3823,64 @@ syncGroupsListener.startListening({
3741
3823
  matcher: isAnyOf(syncGroupsActions.syncGroupAddTarget, syncGroupsActions.syncGroupLinkTarget),
3742
3824
  effect: function () {
3743
3825
  var _effect = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref, listenerApi) {
3744
- var payload, groupId, linked, targetToUpdate, group;
3826
+ var payload, type, groupId, linked, targetToUpdate, group;
3745
3827
  return _regeneratorRuntime().wrap(function _callee$(_context) {
3746
3828
  while (1) switch (_context.prev = _context.next) {
3747
3829
  case 0:
3748
- payload = _ref.payload;
3830
+ payload = _ref.payload, type = _ref.type;
3749
3831
  listenerApi.cancelActiveListeners();
3750
3832
  groupId = payload.groupId, linked = payload.linked, targetToUpdate = payload.targetId;
3751
3833
  group = getSynchronizationGroup(listenerApi.getState(), groupId);
3752
3834
  if (!(!linked && group)) {
3753
- _context.next = 17;
3835
+ _context.next = 21;
3754
3836
  break;
3755
3837
  }
3756
3838
  _context.t0 = group.type;
3757
- _context.next = _context.t0 === SYNCGROUPS_TYPE_SETTIME ? 8 : _context.t0 === SYNCGROUPS_TYPE_SETBBOX ? 12 : 16;
3839
+ _context.next = _context.t0 === SYNCGROUPS_TYPE_SETTIME ? 8 : _context.t0 === SYNCGROUPS_TYPE_SETBBOX ? 16 : 20;
3758
3840
  break;
3759
3841
  case 8:
3760
- if (group.payloadByType[SYNCGROUPS_TYPE_SETTIME]) {
3842
+ if (!(type === syncGroupsActions.syncGroupLinkTarget.type)) {
3761
3843
  _context.next = 10;
3762
3844
  break;
3763
3845
  }
3764
- return _context.abrupt("return");
3846
+ return _context.abrupt("break", 21);
3765
3847
  case 10:
3848
+ if (group.targets.allIds.some(function (targetId) {
3849
+ var _group$targets$byId$t;
3850
+ return targetId !== targetToUpdate && ((_group$targets$byId$t = group.targets.byId[targetId]) === null || _group$targets$byId$t === void 0 ? void 0 : _group$targets$byId$t.linked);
3851
+ })) {
3852
+ _context.next = 12;
3853
+ break;
3854
+ }
3855
+ return _context.abrupt("break", 21);
3856
+ case 12:
3857
+ if (group.payloadByType[SYNCGROUPS_TYPE_SETTIME]) {
3858
+ _context.next = 14;
3859
+ break;
3860
+ }
3861
+ return _context.abrupt("return");
3862
+ case 14:
3766
3863
  listenerApi.dispatch(setTimeSync(group.payloadByType[SYNCGROUPS_TYPE_SETTIME], [{
3767
3864
  targetId: targetToUpdate,
3768
3865
  value: group.payloadByType[SYNCGROUPS_TYPE_SETTIME].value
3769
3866
  }], [groupId]));
3770
- return _context.abrupt("break", 17);
3771
- case 12:
3867
+ return _context.abrupt("break", 21);
3868
+ case 16:
3772
3869
  if (group.payloadByType[SYNCGROUPS_TYPE_SETBBOX]) {
3773
- _context.next = 14;
3870
+ _context.next = 18;
3774
3871
  break;
3775
3872
  }
3776
3873
  return _context.abrupt("return");
3777
- case 14:
3874
+ case 18:
3778
3875
  listenerApi.dispatch(setBboxSync(group.payloadByType[SYNCGROUPS_TYPE_SETBBOX], [{
3779
3876
  targetId: targetToUpdate,
3780
3877
  bbox: group.payloadByType[SYNCGROUPS_TYPE_SETBBOX].bbox,
3781
3878
  srs: group.payloadByType[SYNCGROUPS_TYPE_SETBBOX].srs
3782
3879
  }], [groupId]));
3783
- return _context.abrupt("break", 17);
3784
- case 16:
3785
- return _context.abrupt("break", 17);
3786
- case 17:
3880
+ return _context.abrupt("break", 21);
3881
+ case 20:
3882
+ return _context.abrupt("break", 21);
3883
+ case 21:
3787
3884
  case "end":
3788
3885
  return _context.stop();
3789
3886
  }
@@ -4054,32 +4151,25 @@ var selectors$5 = /*#__PURE__*/Object.freeze({
4054
4151
  selectSharedData: selectSharedData
4055
4152
  });
4056
4153
 
4057
- /* *
4058
- * Licensed under the Apache License, Version 2.0 (the "License");
4059
- * you may not use this file except in compliance with the License.
4060
- * You may obtain a copy of the License at
4061
- *
4062
- * http://www.apache.org/licenses/LICENSE-2.0
4154
+ /**
4155
+ * This registers a new syncgroup source for given panelId. The source is not synced to any group by default.
4156
+ * When the user links the source with a group, this hook returns an object with the timeslider state (start, end, step and current time) for the panel (if effectively linked).
4063
4157
  *
4064
- * Unless required by applicable law or agreed to in writing, software
4065
- * distributed under the License is distributed on an "AS IS" BASIS,
4066
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
4067
- * See the License for the specific language governing permissions and
4068
- * limitations under the License.
4158
+ * How it works:
4159
+ * - Registers/unregisters the source on mount/unmount.
4160
+ * - Returns `{ start, end, step, current }` when linked.
4161
+ * - Uses linked map selected time as `current` when available.
4162
+ * - Falls back to sync source "now" timestamp when
4163
+ * synced state is not initialized yet.
4069
4164
  *
4070
- * Copyright 2026 - Koninklijk Nederlands Meteorologisch Instituut (KNMI)
4071
- * Copyright 2026 - Finnish Meteorological Institute (FMI)
4072
- * Copyright 2026 - The Norwegian Meteorological Institute (MET Norway)
4073
- * */
4074
- /**
4075
- * This registers a new syncgroup souce for given panel id. The source is not synced to any group by default.
4076
- * When the user links the source with a group, this hook returns an object with the timeslider state: start, end, step and current time.
4077
- * @param panelId panelId to register
4078
- * @returns the timeslider state
4165
+ * @param panelId panelId to register as sync source
4166
+ * @returns timeslider state
4079
4167
  */
4080
4168
  var useSyncgroupTimeState = function useSyncgroupTimeState(panelId) {
4169
+ var _ref;
4081
4170
  var debounceMs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100;
4082
4171
  var dispatch = useDispatch();
4172
+ var defaultNowTime = React.useRef(Math.round(Date.now() / 1000));
4083
4173
  var syncGroupsAddSourceCallBack = React.useCallback(function (payload) {
4084
4174
  dispatch(syncGroupAddSource(payload));
4085
4175
  }, [dispatch]);
@@ -4101,11 +4191,94 @@ var useSyncgroupTimeState = function useSyncgroupTimeState(panelId) {
4101
4191
  var syncGroupTimeSliderCenterStartEndStep = useSelector(function (store) {
4102
4192
  return getSyncedStartCenterEndStepCurrentTime(store, panelId);
4103
4193
  });
4194
+ var syncSourceTime = useSelector(function (store) {
4195
+ return getTime(getSynchronizationGroupStore(store), panelId);
4196
+ });
4104
4197
  var syncTargets = useSelector(function (store) {
4105
4198
  return getAllTargetGroupsForSource(store, panelId);
4106
4199
  });
4107
- var isSyncgroupLinked = syncTargets.length > 0;
4108
- return useDebounce(isSyncgroupLinked ? syncGroupTimeSliderCenterStartEndStep : undefined, debounceMs);
4200
+ var isSyncgroupLinked = useSelector(function (store) {
4201
+ return syncTargets.some(function (groupId) {
4202
+ var group = getSynchronizationGroup(store, groupId);
4203
+ if ((group === null || group === void 0 ? void 0 : group.type) !== SYNCGROUPS_TYPE_SETTIME) {
4204
+ return false;
4205
+ }
4206
+ return group.targets.allIds.some(function (targetId) {
4207
+ var _group$targets$byId$t;
4208
+ return targetId !== panelId && ((_group$targets$byId$t = group.targets.byId[targetId]) === null || _group$targets$byId$t === void 0 ? void 0 : _group$targets$byId$t.linked);
4209
+ });
4210
+ });
4211
+ });
4212
+ var linkedMapIdsInTimeGroup = useSelector(function (store) {
4213
+ var _iterator = _createForOfIteratorHelper(syncTargets),
4214
+ _step;
4215
+ try {
4216
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
4217
+ var groupId = _step.value;
4218
+ var group = getSynchronizationGroup(store, groupId);
4219
+ if ((group === null || group === void 0 ? void 0 : group.type) === SYNCGROUPS_TYPE_SETTIME) {
4220
+ var _iterator2 = _createForOfIteratorHelper(group.targets.allIds),
4221
+ _step2;
4222
+ try {
4223
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
4224
+ var _group$targets$byId$t2, _store$webmap;
4225
+ var targetId = _step2.value;
4226
+ if (targetId !== panelId && (_group$targets$byId$t2 = group.targets.byId[targetId]) !== null && _group$targets$byId$t2 !== void 0 && _group$targets$byId$t2.linked && !!((_store$webmap = store.webmap) !== null && _store$webmap !== void 0 && (_store$webmap = _store$webmap.byId) !== null && _store$webmap !== void 0 && _store$webmap[targetId])) {
4227
+ return targetId;
4228
+ }
4229
+ }
4230
+ } catch (err) {
4231
+ _iterator2.e(err);
4232
+ } finally {
4233
+ _iterator2.f();
4234
+ }
4235
+ }
4236
+ }
4237
+ } catch (err) {
4238
+ _iterator.e(err);
4239
+ } finally {
4240
+ _iterator.f();
4241
+ }
4242
+ return undefined;
4243
+ });
4244
+ var linkedMapSelectedTime = useSelector(function (store) {
4245
+ var _store$webmap2;
4246
+ if (!linkedMapIdsInTimeGroup) {
4247
+ return undefined;
4248
+ }
4249
+ var selectedTime = (_store$webmap2 = store.webmap) === null || _store$webmap2 === void 0 || (_store$webmap2 = _store$webmap2.byId) === null || _store$webmap2 === void 0 || (_store$webmap2 = _store$webmap2[linkedMapIdsInTimeGroup]) === null || _store$webmap2 === void 0 || (_store$webmap2 = _store$webmap2.dimensions) === null || _store$webmap2 === void 0 || (_store$webmap2 = _store$webmap2.find(function (dimension) {
4250
+ return dimension.name === 'time';
4251
+ })) === null || _store$webmap2 === void 0 ? void 0 : _store$webmap2.currentValue;
4252
+ if (!selectedTime) {
4253
+ return undefined;
4254
+ }
4255
+ var selectedTimeAsUnix = Date.parse(selectedTime) / 1000;
4256
+ if (!Number.isFinite(selectedTimeAsUnix)) {
4257
+ return undefined;
4258
+ }
4259
+ return Math.round(selectedTimeAsUnix);
4260
+ });
4261
+ var syncSourceCurrentTime = syncSourceTime !== null && syncSourceTime !== void 0 && syncSourceTime.currentTime ? Date.parse(syncSourceTime.currentTime) / 1000 : undefined;
4262
+ var roundedSyncSourceCurrentTime = syncSourceCurrentTime !== undefined && Number.isFinite(syncSourceCurrentTime) ? Math.round(syncSourceCurrentTime) : undefined;
4263
+ var fallbackCurrentTime = (_ref = linkedMapSelectedTime !== null && linkedMapSelectedTime !== void 0 ? linkedMapSelectedTime : roundedSyncSourceCurrentTime) !== null && _ref !== void 0 ? _ref : defaultNowTime.current;
4264
+ var fallbackState = isSyncgroupLinked ? {
4265
+ start: fallbackCurrentTime - defaultTimeSpan / 2,
4266
+ end: fallbackCurrentTime + defaultTimeSpan / 2,
4267
+ step: defaultTimeStep,
4268
+ current: fallbackCurrentTime
4269
+ } : undefined;
4270
+ var syncedState = isSyncgroupLinked ? syncGroupTimeSliderCenterStartEndStep || fallbackState : undefined;
4271
+ var mapFallbackState = linkedMapSelectedTime !== undefined ? {
4272
+ start: linkedMapSelectedTime - defaultTimeSpan / 2,
4273
+ end: linkedMapSelectedTime + defaultTimeSpan / 2,
4274
+ step: defaultTimeStep,
4275
+ current: linkedMapSelectedTime
4276
+ } : undefined;
4277
+ var baseState = syncedState || mapFallbackState;
4278
+ var stateWithAuthoritativeCurrent = baseState && linkedMapSelectedTime !== undefined ? _objectSpread2(_objectSpread2({}, baseState), {}, {
4279
+ current: linkedMapSelectedTime
4280
+ }) : baseState;
4281
+ return useDebounce(stateWithAuthoritativeCurrent, debounceMs);
4109
4282
  };
4110
4283
 
4111
4284
  var useUpdateSharedData = function useUpdateSharedData(data, panelId) {
@@ -5871,6 +6044,15 @@ var getLegendId = createSelector(getMapById, function (store) {
5871
6044
  var getIsClockVisible = createSelector(getMapById, function (store) {
5872
6045
  return store === null || store === void 0 ? void 0 : store.isClockVisible;
5873
6046
  }, selectorMemoizationOptions);
6047
+ /**
6048
+ * Returns if clock options menu is visible from webmap state
6049
+ *
6050
+ * @param {CoreAppStore} store - The Redux store from which the map state will be extracted.
6051
+ * @returns {boolean | undefined} returnType: boolean
6052
+ */
6053
+ var getIsClockOptionsMenuVisible = createSelector(getMapById, function (store) {
6054
+ return store === null || store === void 0 ? void 0 : store.isClockOptionsMenuVisible;
6055
+ }, selectorMemoizationOptions);
5874
6056
  /**
5875
6057
  * Returns if clock position from webmap state
5876
6058
  *
@@ -5910,14 +6092,14 @@ var getMapPreset = createSelector(getMapLayers, getMapBaseLayers, getMapOverLaye
5910
6092
  }, function (store, mapId) {
5911
6093
  var _getMapById3;
5912
6094
  return (_getMapById3 = getMapById(store, mapId)) === null || _getMapById3 === void 0 ? void 0 : _getMapById3.dockedLayerManagerDimensions;
5913
- }, getIsClockVisible, getClockPosition, getClockSize, getUiStore, function (_store, mapId) {
6095
+ }, getIsClockVisible, getIsClockOptionsMenuVisible, getClockPosition, getClockSize, getUiStore, function (_store, mapId) {
5914
6096
  return mapId;
5915
6097
  }, function (_store, _mapId) {
5916
6098
  var keepAllDims = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
5917
6099
  return keepAllDims;
5918
- }, function (mapLayers, baseLayers, overLayers, bbox, srs, activeLayerId, autoTimeStepLayerId, autoUpdateLayerId, isAnimating, isAutoUpdating, isTimeSliderVisible, displayMapPin, isZoomControlsVisible, mapTimeStep, mapAnimationDelay, animationStartTime, animationEndTime, timeSliderSpan, mapDimensions, isTimestepAuto, isTimeSpanAuto, legendId, dockedLayerManagerSize, dockedLayerManagerPosition, dockedLayerManagerDimensions, isClockVisible, clockPosition, clockSize, uiStore, mapId, keepAllDims) {
6100
+ }, function (mapLayers, baseLayers, overLayers, bbox, srs, activeLayerId, autoTimeStepLayerId, autoUpdateLayerId, isAnimating, isAutoUpdating, isTimeSliderVisible, displayMapPin, isZoomControlsVisible, mapTimeStep, mapAnimationDelay, animationStartTime, animationEndTime, timeSliderSpan, mapDimensions, isTimestepAuto, isTimeSpanAuto, legendId, dockedLayerManagerSize, dockedLayerManagerPosition, dockedLayerManagerDimensions, isClockVisible, isClockOptionsMenuVisible, clockPosition, clockSize, uiStore, mapId, keepAllDims) {
5919
6101
  var _overLayers$, _uiStore$dialogs$lege;
5920
- var defaultOverlayer = arguments.length > 31 && arguments[31] !== undefined ? arguments[31] : ((_overLayers$ = overLayers[0]) === null || _overLayers$ === void 0 ? void 0 : _overLayers$.name) || 'none';
6102
+ var defaultOverlayer = arguments.length > 32 && arguments[32] !== undefined ? arguments[32] : ((_overLayers$ = overLayers[0]) === null || _overLayers$ === void 0 ? void 0 : _overLayers$.name) || 'none';
5921
6103
  var allLayers = [].concat(_toConsumableArray(baseLayers), _toConsumableArray(overLayers), _toConsumableArray(mapLayers)).map(function (_ref3) {
5922
6104
  _ref3.mapId;
5923
6105
  var layer = _objectWithoutProperties(_ref3, _excluded$2);
@@ -5957,7 +6139,7 @@ var getMapPreset = createSelector(getMapLayers, getMapBaseLayers, getMapOverLaye
5957
6139
  }, dockedLayerManagerDimensions && {
5958
6140
  dockedLayerManagerDimensions: dockedLayerManagerDimensions
5959
6141
  }) : {};
5960
- return _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({
6142
+ return _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({
5961
6143
  layers: allLayers
5962
6144
  }, activeLayerId && {
5963
6145
  activeLayerId: activeLayerId
@@ -5984,6 +6166,8 @@ var getMapPreset = createSelector(getMapLayers, getMapBaseLayers, getMapOverLaye
5984
6166
  defaultOverlayer: defaultOverlayer
5985
6167
  }, dockedLayerManagerPreset), isClockVisible !== undefined && {
5986
6168
  isClockVisible: isClockVisible
6169
+ }), isClockOptionsMenuVisible !== undefined && {
6170
+ isClockOptionsMenuVisible: isClockOptionsMenuVisible
5987
6171
  }), clockPosition !== undefined && {
5988
6172
  clockPosition: clockPosition
5989
6173
  }), clockSize !== undefined && {
@@ -6246,6 +6430,7 @@ var selectors$1 = /*#__PURE__*/Object.freeze({
6246
6430
  getFirstMap: getFirstMap,
6247
6431
  getFirstMapId: getFirstMapId,
6248
6432
  getHarmonieInitialProps: getHarmonieInitialProps,
6433
+ getIsClockOptionsMenuVisible: getIsClockOptionsMenuVisible,
6249
6434
  getIsClockVisible: getIsClockVisible,
6250
6435
  getIsEnabledLayersForMapDimension: getIsEnabledLayersForMapDimension,
6251
6436
  getIsLayerActiveLayer: getIsLayerActiveLayer,
@@ -7230,6 +7415,16 @@ var olMetronomeHandler = function olMetronomeHandler(timerIds, listenerApi) {
7230
7415
  }
7231
7416
  });
7232
7417
  }
7418
+ if (!targets.some(function (target) {
7419
+ return target.targetId === timerId;
7420
+ })) {
7421
+ targets.push({
7422
+ targetId: timerId,
7423
+ value: {
7424
+ currentTime: ''
7425
+ }
7426
+ });
7427
+ }
7233
7428
  var timerIsInDwell = handleTimerDwell(timerId, animationListValues.length);
7234
7429
  // Collect all layers for this syncgroups target
7235
7430
  var reduxLayers = [];
@@ -7324,9 +7519,23 @@ mapListener.startListening({
7324
7519
  return;
7325
7520
  }
7326
7521
  var autoUpdateLayerId = getAutoUpdateLayerId(listenerApi.getState(), mapId);
7522
+ var autoTimeStepLayerId = getAutoTimeStepLayerId(listenerApi.getState(), mapId);
7523
+ var autoUpdateLayerHasTimeDimension = autoUpdateLayerId ? getLayerHasTimeDimension(listenerApi.getState(), autoUpdateLayerId) : false;
7524
+ var autoTimeStepLayerHasTimeDimension = autoTimeStepLayerId ? getLayerHasTimeDimension(listenerApi.getState(), autoTimeStepLayerId) : false;
7327
7525
  var shouldAutoUpdate = isAutoUpdating(listenerApi.getState(), mapId);
7328
7526
  var prevTimeDimension = getLayerTimeDimension(listenerApi.getState(), layerId);
7329
- var isAutoUpdateLayer = layerId === autoUpdateLayerId;
7527
+ var hasAutoLayers = !!autoUpdateLayerId && !!autoTimeStepLayerId;
7528
+ var isAutoLayerValid = hasAutoLayers && autoUpdateLayerHasTimeDimension && autoTimeStepLayerHasTimeDimension;
7529
+ var hasTimeDimension = !!newTimeDimension;
7530
+ var shouldSetAutoLayer = !isAutoLayerValid && hasTimeDimension;
7531
+ if (shouldSetAutoLayer) {
7532
+ listenerApi.dispatch(mapActions.setAutoLayerId({
7533
+ mapId: mapId,
7534
+ layerId: layerId
7535
+ }));
7536
+ }
7537
+ var effectiveAutoUpdateLayerId = shouldSetAutoLayer ? layerId : autoUpdateLayerId;
7538
+ var isAutoUpdateLayer = layerId === effectiveAutoUpdateLayerId;
7330
7539
  var incomingMaxTime = newTimeDimension === null || newTimeDimension === void 0 ? void 0 : newTimeDimension.maxValue;
7331
7540
  var isIncomingMaxTimeLaterThanCurrentLayerTime = incomingMaxTime && (prevTimeDimension === null || prevTimeDimension === void 0 ? void 0 : prevTimeDimension.currentValue) && prevTimeDimension.currentValue !== incomingMaxTime;
7332
7541
  if (isAutoUpdateLayer &&
@@ -7548,7 +7757,7 @@ mapListener.startListening({
7548
7757
  actionCreator: mapActions.setMapPreset,
7549
7758
  effect: function () {
7550
7759
  var _effect2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(_ref6, listenerApi) {
7551
- var payload, mapId, initialProps, mapPreset, _mapPreset$dimensions, layers, activeLayerId, autoTimeStepLayerId, autoUpdateLayerId, proj, shouldAutoUpdate, shouldAnimate, animationPayload, toggleTimestepAuto, showTimeSlider, displayMapPin, shouldShowZoomControls, shouldShowLegend, shouldShowDockedLayerManager, shouldShowDataExplorer, dockedLayerManagerSize, dockedLayerManagerPosition, dockedLayerManagerDimensions, timeSliderSpan, toggleTimeSpanAuto, defaultOverlayer, isClockVisible, clockPosition, clockSize, _filterLayers, mapLayers, baseLayers, overLayers, _newLayerIds$layers$f, _newLayerIds$layers$f2, autoTimeStepLayerIdNew, autoUpdateLayerIdNew, onlyActiveLayerIdIsSet, newLayerIds, newAutoTimeStepLayerId, newAutoUpdateLayerId, customLayers, customBaseLayer, customOverLayer, baseLayersWithDefaultLayer, overLayersWithDefaultLayer, allBaseLayers, _overlayersFromStore$, overlayersFromStore, foundOverlayerId, checkIsprojectionSupported, animationLength, animationEndTime, shouldEndtimeOverride, interval, timeAlreadySet, endTime, startTime, centerTimeInSeconds, animationEnd, _startTime, duration, _animationEnd, animationStart, shouldOpenLegend, legendId, dockedLayerManagerType, fiveMinuteDelayForAnimation, _animationEnd2, _animationStart;
7760
+ var payload, mapId, initialProps, mapPreset, _mapPreset$dimensions, layers, activeLayerId, autoTimeStepLayerId, autoUpdateLayerId, proj, shouldAutoUpdate, shouldAnimate, animationPayload, toggleTimestepAuto, showTimeSlider, displayMapPin, shouldShowZoomControls, shouldShowLegend, shouldShowDockedLayerManager, shouldShowDataExplorer, dockedLayerManagerSize, dockedLayerManagerPosition, dockedLayerManagerDimensions, timeSliderSpan, toggleTimeSpanAuto, defaultOverlayer, isClockVisible, isClockOptionsMenuVisible, clockPosition, clockSize, _filterLayers, mapLayers, baseLayers, overLayers, _newLayerIds$layers$f, _newLayerIds$layers$f2, autoTimeStepLayerIdNew, autoUpdateLayerIdNew, onlyActiveLayerIdIsSet, newLayerIds, newAutoTimeStepLayerId, newAutoUpdateLayerId, customLayers, customBaseLayer, customOverLayer, baseLayersWithDefaultLayer, overLayersWithDefaultLayer, allBaseLayers, _overlayersFromStore$, overlayersFromStore, foundOverlayerId, checkIsprojectionSupported, animationLength, animationEndTime, shouldEndtimeOverride, interval, timeAlreadySet, endTime, startTime, centerTimeInSeconds, animationEnd, _startTime, duration, _animationEnd, animationStart, shouldOpenLegend, legendId, dockedLayerManagerType, fiveMinuteDelayForAnimation, _animationEnd2, _animationStart;
7552
7761
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
7553
7762
  while (1) switch (_context2.prev = _context2.next) {
7554
7763
  case 0:
@@ -7557,10 +7766,10 @@ mapListener.startListening({
7557
7766
  mapId = payload.mapId, initialProps = payload.initialProps;
7558
7767
  mapPreset = initialProps.mapPreset;
7559
7768
  if (!mapPreset) {
7560
- _context2.next = 61;
7769
+ _context2.next = 62;
7561
7770
  break;
7562
7771
  }
7563
- layers = mapPreset.layers, activeLayerId = mapPreset.activeLayerId, autoTimeStepLayerId = mapPreset.autoTimeStepLayerId, autoUpdateLayerId = mapPreset.autoUpdateLayerId, proj = mapPreset.proj, shouldAutoUpdate = mapPreset.shouldAutoUpdate, shouldAnimate = mapPreset.shouldAnimate, animationPayload = mapPreset.animationPayload, toggleTimestepAuto = mapPreset.toggleTimestepAuto, showTimeSlider = mapPreset.showTimeSlider, displayMapPin = mapPreset.displayMapPin, shouldShowZoomControls = mapPreset.shouldShowZoomControls, shouldShowLegend = mapPreset.shouldShowLegend, shouldShowDockedLayerManager = mapPreset.shouldShowDockedLayerManager, shouldShowDataExplorer = mapPreset.shouldShowDataExplorer, dockedLayerManagerSize = mapPreset.dockedLayerManagerSize, dockedLayerManagerPosition = mapPreset.dockedLayerManagerPosition, dockedLayerManagerDimensions = mapPreset.dockedLayerManagerDimensions, timeSliderSpan = mapPreset.timeSliderSpan, toggleTimeSpanAuto = mapPreset.toggleTimeSpanAuto, defaultOverlayer = mapPreset.defaultOverlayer, isClockVisible = mapPreset.isClockVisible, clockPosition = mapPreset.clockPosition, clockSize = mapPreset.clockSize;
7772
+ layers = mapPreset.layers, activeLayerId = mapPreset.activeLayerId, autoTimeStepLayerId = mapPreset.autoTimeStepLayerId, autoUpdateLayerId = mapPreset.autoUpdateLayerId, proj = mapPreset.proj, shouldAutoUpdate = mapPreset.shouldAutoUpdate, shouldAnimate = mapPreset.shouldAnimate, animationPayload = mapPreset.animationPayload, toggleTimestepAuto = mapPreset.toggleTimestepAuto, showTimeSlider = mapPreset.showTimeSlider, displayMapPin = mapPreset.displayMapPin, shouldShowZoomControls = mapPreset.shouldShowZoomControls, shouldShowLegend = mapPreset.shouldShowLegend, shouldShowDockedLayerManager = mapPreset.shouldShowDockedLayerManager, shouldShowDataExplorer = mapPreset.shouldShowDataExplorer, dockedLayerManagerSize = mapPreset.dockedLayerManagerSize, dockedLayerManagerPosition = mapPreset.dockedLayerManagerPosition, dockedLayerManagerDimensions = mapPreset.dockedLayerManagerDimensions, timeSliderSpan = mapPreset.timeSliderSpan, toggleTimeSpanAuto = mapPreset.toggleTimeSpanAuto, defaultOverlayer = mapPreset.defaultOverlayer, isClockVisible = mapPreset.isClockVisible, isClockOptionsMenuVisible = mapPreset.isClockOptionsMenuVisible, clockPosition = mapPreset.clockPosition, clockSize = mapPreset.clockSize;
7564
7773
  _filterLayers = filterLayers(layers), mapLayers = _filterLayers.mapLayers, baseLayers = _filterLayers.baseLayers, overLayers = _filterLayers.overLayers;
7565
7774
  if (layers) {
7566
7775
  // make sure all layers have a unique id before going forward
@@ -7693,6 +7902,13 @@ mapListener.startListening({
7693
7902
  isClockVisible: isClockVisible
7694
7903
  }));
7695
7904
  }
7905
+ if (isClockOptionsMenuVisible) {
7906
+ // toggle clock options menu visibility
7907
+ listenerApi.dispatch(mapActions.toggleClockOptions({
7908
+ mapId: mapId,
7909
+ isClockOptionsMenuVisible: isClockOptionsMenuVisible
7910
+ }));
7911
+ }
7696
7912
  if (clockPosition !== undefined) {
7697
7913
  // set clock position
7698
7914
  listenerApi.dispatch(mapActions.setClockPositionSize({
@@ -7851,15 +8067,15 @@ mapListener.startListening({
7851
8067
  dockedLayerManagerDimensions: dockedLayerManagerDimensions
7852
8068
  }));
7853
8069
  }
7854
- case 51:
8070
+ case 52:
7855
8071
  if (!(animationEndTime && (shouldEndtimeOverride || !(shouldAutoUpdate || shouldAnimate)))) {
7856
- _context2.next = 61;
8072
+ _context2.next = 62;
7857
8073
  break;
7858
8074
  }
7859
8075
  fiveMinuteDelayForAnimation = 1000 * 60 * 5; // eslint-disable-next-line no-await-in-loop
7860
- _context2.next = 55;
8076
+ _context2.next = 56;
7861
8077
  return listenerApi.delay(fiveMinuteDelayForAnimation);
7862
- case 55:
8078
+ case 56:
7863
8079
  _animationEnd2 = getAnimationEndTime(listenerApi.getState(), mapId);
7864
8080
  listenerApi.dispatch(mapActions.setAnimationEndTime({
7865
8081
  mapId: mapId,
@@ -7874,13 +8090,13 @@ mapListener.startListening({
7874
8090
  minutes: 5
7875
8091
  }).toISOString()
7876
8092
  }));
7877
- _context2.next = 51;
8093
+ _context2.next = 52;
7878
8094
  break;
7879
- case 61:
7880
- _context2.next = 66;
8095
+ case 62:
8096
+ _context2.next = 67;
7881
8097
  break;
7882
- case 63:
7883
- _context2.prev = 63;
8098
+ case 64:
8099
+ _context2.prev = 64;
7884
8100
  _context2.t0 = _context2["catch"](1);
7885
8101
  if (_context2.t0 instanceof Error) {
7886
8102
  listenerApi.dispatch(mapActions.setMapPresetError({
@@ -7888,11 +8104,11 @@ mapListener.startListening({
7888
8104
  error: _context2.t0.message
7889
8105
  }));
7890
8106
  }
7891
- case 66:
8107
+ case 67:
7892
8108
  case "end":
7893
8109
  return _context2.stop();
7894
8110
  }
7895
- }, _callee2, null, [[1, 63]]);
8111
+ }, _callee2, null, [[1, 64]]);
7896
8112
  }));
7897
8113
  function effect(_x3, _x4) {
7898
8114
  return _effect2.apply(this, arguments);
@@ -7932,6 +8148,8 @@ mapListener.startListening({
7932
8148
  _mapSelectors$getData2 = _slicedToArray(_mapSelectors$getData, 2),
7933
8149
  dataStartTime = _mapSelectors$getData2[0],
7934
8150
  dataEndTime = _mapSelectors$getData2[1];
8151
+ var hasValidDataStartTime = Number.isFinite(dataStartTime) && dataStartTime > 0 && dataStartTime < 2147483647;
8152
+ var hasValidDataEndTime = Number.isFinite(dataEndTime) && dataEndTime > 0;
7935
8153
  if (dateUtils.isValid(currentTime)) {
7936
8154
  var makeForwardStep = function makeForwardStep() {
7937
8155
  // timeStep is in minutes, convert to seconds
@@ -7941,7 +8159,7 @@ mapListener.startListening({
7941
8159
  // This ensures 12:07 with 24h step goes to 12:00 next day, not 00:00
7942
8160
  var roundingStep = timeStep > 12 * 60 ? 60 : timeStep; // Use 1 hour for large steps
7943
8161
  var roundedTime = roundWithTimeStep(nextTime, roundingStep, 'round');
7944
- var newTime = Math.min(roundedTime, dataEndTime || roundedTime);
8162
+ var newTime = hasValidDataEndTime ? Math.min(roundedTime, dataEndTime) : roundedTime;
7945
8163
  return dateUtils.fromUnix(newTime).toISOString();
7946
8164
  };
7947
8165
  var makeBackwardStep = function makeBackwardStep() {
@@ -7951,7 +8169,7 @@ mapListener.startListening({
7951
8169
  // For large timesteps (>12h), round to nearest hour instead of timestep
7952
8170
  var roundingStep = timeStep > 12 * 60 ? 60 : timeStep; // Use 1 hour for large steps
7953
8171
  var roundedTime = roundWithTimeStep(nextTime, roundingStep, 'round');
7954
- var newTime = Math.max(roundedTime, dataStartTime || roundedTime);
8172
+ var newTime = hasValidDataStartTime ? Math.max(roundedTime, dataStartTime) : roundedTime;
7955
8173
  return dateUtils.fromUnix(newTime).toISOString();
7956
8174
  };
7957
8175
  var selectedTimeString = isForwardStep ? makeForwardStep() : makeBackwardStep();
@@ -9568,4 +9786,4 @@ var configureOpenGeoWebStore = function configureOpenGeoWebStore() {
9568
9786
  });
9569
9787
  };
9570
9788
 
9571
- export { IS_LEGEND_OPEN_BY_DEFAULT, SECONDS_IN_DAY, SECONDS_IN_HOUR, commonActions, commonListener, commonReducers, commonSelectors, configureOpenGeoWebStore, createMockStore, createViewObjectForNewMap, drawingToolActions, drawingToolListener, drawingToolReducer, selectors as drawingToolSelectors, filterLayers$1 as filterLayers, genericActions, genericListener, selectors$5 as genericSelectors, getSingularDrawtoolDrawLayerId, getUserAddedServices, getViewObjectForMapId, getViewObjectForSyncGroup, initialState$3 as initialState, layerActions, layerReducer, selectors$2 as layerSelectors, types$2 as layerTypes, utils$1 as layerUtils, layersListener, constants as linkComponentTypesConstants, loadingIndicatorActions, constants$1 as loadingIndicatorConstants, loadingIndicatorReducer, selectors$4 as loadingIndicatorSelectors, mapActions, enums as mapEnums, mapListener, mapReducer, selectors$1 as mapSelectors, types$3 as mapTypes, mapUtils, metronomeListener, openlayersListener, routerActions, routerListener, routerReducer, utils as routerUtils, selectorMemoizationOptions, serviceActions, serviceListener, serviceReducer, selectors$7 as serviceSelectors, setUserAddedServices, storeMiddlewares, storeReducerMap, storeTestSettings, storeTestUtils, utils$3 as storeUtils, constants$2 as syncConstants, syncGroupsActions, syncGroupsListener, syncGroupsReducer, selector as syncGroupsSelector, selectors$6 as syncGroupsSelectors, types$1 as syncGroupsTypes, types$1 as types, uiActions, uiReducer, selectors$3 as uiSelectors, types as uiTypes, unifyReducerMaps, useSetupDialog, useSyncgroupTimeState, useUpdateSharedData };
9789
+ export { IS_LEGEND_OPEN_BY_DEFAULT, SECONDS_IN_DAY, SECONDS_IN_HOUR, commonActions, commonListener, commonReducers, commonSelectors, configureOpenGeoWebStore, constructSyncSourceDisplayName, createMockStore, createViewObjectForNewMap, drawingToolActions, drawingToolListener, drawingToolReducer, selectors as drawingToolSelectors, filterLayers$1 as filterLayers, genericActions, genericListener, selectors$5 as genericSelectors, getSingularDrawtoolDrawLayerId, getUserAddedServices, getViewObjectForMapId, getViewObjectForSyncGroup, initialState$3 as initialState, layerActions, layerReducer, selectors$2 as layerSelectors, types$2 as layerTypes, utils$1 as layerUtils, layersListener, constants as linkComponentTypesConstants, loadingIndicatorActions, constants$1 as loadingIndicatorConstants, loadingIndicatorReducer, selectors$4 as loadingIndicatorSelectors, mapActions, enums as mapEnums, mapListener, mapReducer, selectors$1 as mapSelectors, types$3 as mapTypes, mapUtils, metronomeListener, openlayersListener, routerActions, routerListener, routerReducer, utils as routerUtils, selectorMemoizationOptions, serviceActions, serviceListener, serviceReducer, selectors$7 as serviceSelectors, setUserAddedServices, storeMiddlewares, storeReducerMap, storeTestSettings, storeTestUtils, utils$3 as storeUtils, constants$2 as syncConstants, syncGroupsActions, syncGroupsListener, syncGroupsReducer, selector as syncGroupsSelector, selectors$6 as syncGroupsSelectors, types$1 as syncGroupsTypes, types$1 as types, uiActions, uiReducer, selectors$3 as uiSelectors, types as uiTypes, unifyReducerMaps, useSetupDialog, useSyncgroupTimeState, useUpdateSharedData };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeoweb/store",
3
- "version": "15.3.0",
3
+ "version": "16.0.0",
4
4
  "description": "GeoWeb Store library for the opengeoweb project",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -8,15 +8,15 @@
8
8
  "url": "git@gitlab.com:opengeoweb/opengeoweb.git"
9
9
  },
10
10
  "dependencies": {
11
- "@opengeoweb/shared": "15.3.0",
11
+ "@opengeoweb/shared": "16.0.0",
12
12
  "react-redux": "^9.2.0",
13
13
  "@reduxjs/toolkit": "^2.6.1",
14
- "@opengeoweb/webmap-react": "15.3.0",
15
- "@opengeoweb/webmap": "15.3.0",
14
+ "@opengeoweb/webmap-react": "16.0.0",
15
+ "@opengeoweb/webmap": "16.0.0",
16
16
  "immer": "^10.0.3",
17
17
  "lodash": "^4.17.21",
18
- "@opengeoweb/metronome": "15.3.0",
19
- "@opengeoweb/time-slider": "15.3.0",
18
+ "@opengeoweb/metronome": "16.0.0",
19
+ "@opengeoweb/time-slider": "16.0.0",
20
20
  "react-router-dom": "^6.23.1",
21
21
  "ol": "^10.4.0",
22
22
  "@turf/turf": "^7.2.0",
@@ -22,4 +22,5 @@ export * as genericSelectors from './selectors';
22
22
  export * from './hooks';
23
23
  export * from './syncGroups';
24
24
  export type * as genericTypes from './types';
25
+ export type * from './synchronizationActions/types';
25
26
  export * from './loadingIndicator';
@@ -2,18 +2,18 @@ import type { CoreAppStore } from '../types';
2
2
  import type { LinkedState, PotentialData, SynchronizationGroupState, SynchronizationSource } from './syncGroups/types';
3
3
  import type { TimeSliderStartEndStepCurrent } from '../map/types';
4
4
  export declare const getSynchronizationGroupStore: (store: CoreAppStore) => SynchronizationGroupState;
5
- export declare const getTime: ((state: SynchronizationGroupState, id: string) => import("./synchronizationActions/types").SetTimeSyncProps | null) & {
5
+ export declare const getTime: ((state: SynchronizationGroupState, id: string) => import(".").SetTimeSyncProps | null) & {
6
6
  clearCache: () => void;
7
7
  resultsCount: () => number;
8
8
  resetResultsCount: () => void;
9
9
  } & {
10
- resultFunc: (resultFuncArgs_0: SynchronizationSource) => import("./synchronizationActions/types").SetTimeSyncProps | null;
11
- memoizedResultFunc: ((resultFuncArgs_0: SynchronizationSource) => import("./synchronizationActions/types").SetTimeSyncProps | null) & {
10
+ resultFunc: (resultFuncArgs_0: SynchronizationSource) => import(".").SetTimeSyncProps | null;
11
+ memoizedResultFunc: ((resultFuncArgs_0: SynchronizationSource) => import(".").SetTimeSyncProps | null) & {
12
12
  clearCache: () => void;
13
13
  resultsCount: () => number;
14
14
  resetResultsCount: () => void;
15
15
  };
16
- lastResult: () => import("./synchronizationActions/types").SetTimeSyncProps | null;
16
+ lastResult: () => import(".").SetTimeSyncProps | null;
17
17
  dependencies: [(state: SynchronizationGroupState, id: string) => SynchronizationSource];
18
18
  recomputations: () => number;
19
19
  resetRecomputations: () => void;
@@ -1,8 +1,16 @@
1
1
  import type { TimeSliderStartEndStepCurrent } from '../../map/map/types';
2
2
  /**
3
- * This registers a new syncgroup souce for given panel id. The source is not synced to any group by default.
4
- * When the user links the source with a group, this hook returns an object with the timeslider state: start, end, step and current time.
5
- * @param panelId panelId to register
6
- * @returns the timeslider state
3
+ * This registers a new syncgroup source for given panelId. The source is not synced to any group by default.
4
+ * When the user links the source with a group, this hook returns an object with the timeslider state (start, end, step and current time) for the panel (if effectively linked).
5
+ *
6
+ * How it works:
7
+ * - Registers/unregisters the source on mount/unmount.
8
+ * - Returns `{ start, end, step, current }` when linked.
9
+ * - Uses linked map selected time as `current` when available.
10
+ * - Falls back to sync source "now" timestamp when
11
+ * synced state is not initialized yet.
12
+ *
13
+ * @param panelId panelId to register as sync source
14
+ * @returns timeslider state
7
15
  */
8
16
  export declare const useSyncgroupTimeState: (panelId: string, debounceMs?: number) => TimeSliderStartEndStepCurrent | undefined;
@@ -7,4 +7,5 @@ export type { SynchronizationGroupModuleState } from './types';
7
7
  export * as syncGroupsSelectors from './selectors';
8
8
  export * as syncGroupsTypes from './types';
9
9
  export * as syncGroupsSelector from './selector';
10
+ export * from './syncSourceDisplayName';
10
11
  export * from './hooks';
@@ -5,20 +5,36 @@ export declare const groupTypes: {
5
5
  syncType: SyncType;
6
6
  groupType: string;
7
7
  }[];
8
- export declare const createSyncGroupViewState: (groups: SynchronizationGroups, sources: SynchronizationSources) => SyncGroupViewState;
8
+ export declare const createSyncGroupViewState: (groups: SynchronizationGroups, sources: SynchronizationSources, viewsById?: Record<string, {
9
+ id?: string;
10
+ title?: string;
11
+ componentType?: string;
12
+ }>) => SyncGroupViewState;
9
13
  export declare const createSyncGroupViewStateSelector: ((state: CoreAppStore) => SyncGroupViewState) & {
10
14
  clearCache: () => void;
11
15
  resultsCount: () => number;
12
16
  resetResultsCount: () => void;
13
17
  } & {
14
- resultFunc: (resultFuncArgs_0: SynchronizationGroups, resultFuncArgs_1: SynchronizationSources) => SyncGroupViewState;
15
- memoizedResultFunc: ((resultFuncArgs_0: SynchronizationGroups, resultFuncArgs_1: SynchronizationSources) => SyncGroupViewState) & {
18
+ resultFunc: (resultFuncArgs_0: SynchronizationGroups, resultFuncArgs_1: SynchronizationSources, resultFuncArgs_2: Record<string, {
19
+ id?: string;
20
+ title?: string;
21
+ componentType?: string;
22
+ }> | undefined) => SyncGroupViewState;
23
+ memoizedResultFunc: ((resultFuncArgs_0: SynchronizationGroups, resultFuncArgs_1: SynchronizationSources, resultFuncArgs_2: Record<string, {
24
+ id?: string;
25
+ title?: string;
26
+ componentType?: string;
27
+ }> | undefined) => SyncGroupViewState) & {
16
28
  clearCache: () => void;
17
29
  resultsCount: () => number;
18
30
  resetResultsCount: () => void;
19
31
  };
20
32
  lastResult: () => SyncGroupViewState;
21
- dependencies: [(store: CoreAppStore) => SynchronizationGroups, (store: CoreAppStore) => SynchronizationSources];
33
+ dependencies: [(store: CoreAppStore) => SynchronizationGroups, (store: CoreAppStore) => SynchronizationSources, (store: CoreAppStore) => Record<string, {
34
+ id?: string;
35
+ title?: string;
36
+ componentType?: string;
37
+ }> | undefined];
22
38
  recomputations: () => number;
23
39
  resetRecomputations: () => void;
24
40
  dependencyRecomputations: () => number;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { SyncedWorkspaceViewDetails } from './types';
2
+ export declare const constructSyncSourceDisplayName: (sourceId: string, viewMeta: SyncedWorkspaceViewDetails | undefined, fallbackName: string) => string;
@@ -164,3 +164,8 @@ export interface AddSharedData {
164
164
  export interface DeleteSharedData {
165
165
  panelId: string;
166
166
  }
167
+ export interface SyncedWorkspaceViewDetails {
168
+ id?: string;
169
+ title?: string;
170
+ componentType?: string;
171
+ }
@@ -1,6 +1,6 @@
1
1
  import type { Draft, PayloadAction } from '@reduxjs/toolkit';
2
2
  import type { SetLayerAcceptanceTimePayload, SetLayerDimensionsPayload, SetLayerStylePayload, UpdateLayerInfoPayload } from '@opengeoweb/webmap-react';
3
- import type { LayerState, Layer, AddLayerPayload, SetLayerDimensionPayload, SetLayerEnabledPayload, SetLayerOpacityPayload, SetLayerNamePayload, SetLayerGeojsonPayload, DeleteLayerPayload, ErrorLayerPayload, SetLayersPayload, SetBaseLayersPayload, AddBaseLayerPayload, AddAvailableBaseLayerPayload, AddAvailableBaseLayersPayload, SetAvailableBaseLayersPayload, SetSelectedFeaturePayload, UpdateFeaturePayload, ExitFeatureDrawModePayload, ToggleFeatureModePayload, UpdateFeaturePropertiesPayload, DuplicateMapLayerPayload, ShowLayerInfoPayload, SetLayerGeojsonFromLayerPayload, SetLayerOptionsPayload } from './types';
3
+ import type { LayerState, Layer, AddLayerPayload, SetLayerDimensionPayload, SetLayerEnabledPayload, SetLayerOpacityPayload, SetLayerNamePayload, SetLayerGeojsonPayload, DeleteLayerPayload, ErrorLayerPayload, SetLayersPayload, SetBaseLayersPayload, AddBaseLayerPayload, AddAvailableBaseLayerPayload, AddAvailableBaseLayersPayload, SetAvailableBaseLayersPayload, SetSelectedFeaturePayload, UpdateFeaturePayload, ExitFeatureDrawModePayload, ToggleFeatureModePayload, UpdateFeaturePropertiesPayload, DuplicateMapLayerPayload, ShowLayerInfoPayload, SetLayerGeojsonFromLayerPayload, SetLayerOptionsPayload, SetLayerLegendVisibilityPayload } from './types';
4
4
  export declare const createLayer: ({ id, opacity, acceptanceTimeInMinutes, enabled, layerType, status, useLatestReferenceTime, ...props }: Layer) => Layer;
5
5
  export declare const initialState: LayerState;
6
6
  export declare const slice: import("@reduxjs/toolkit").Slice<LayerState, {
@@ -43,6 +43,7 @@ export declare const slice: import("@reduxjs/toolkit").Slice<LayerState, {
43
43
  }>) => void;
44
44
  showLayerInfo: (draft: Draft<LayerState>, action: PayloadAction<ShowLayerInfoPayload>) => void;
45
45
  hideLayerInfo: (draft: Draft<LayerState>) => void;
46
+ SetLayerLegendVisibilityPayload: (draft: Draft<LayerState>, action: PayloadAction<SetLayerLegendVisibilityPayload>) => void;
46
47
  }, "layerReducer", "layerReducer", import("@reduxjs/toolkit").SliceSelectors<LayerState>>;
47
48
  export declare const layerReducer: import("redux").Reducer<LayerState>, layerActions: import("@reduxjs/toolkit").CaseReducerActions<{
48
49
  addLayer: (draft: Draft<LayerState>, action: PayloadAction<AddLayerPayload>) => void;
@@ -84,5 +85,6 @@ export declare const layerReducer: import("redux").Reducer<LayerState>, layerAct
84
85
  }>) => void;
85
86
  showLayerInfo: (draft: Draft<LayerState>, action: PayloadAction<ShowLayerInfoPayload>) => void;
86
87
  hideLayerInfo: (draft: Draft<LayerState>) => void;
88
+ SetLayerLegendVisibilityPayload: (draft: Draft<LayerState>, action: PayloadAction<SetLayerLegendVisibilityPayload>) => void;
87
89
  }, "layerReducer">;
88
- export type LayerActions = ReturnType<typeof layerActions.layerSetDimensions> | ReturnType<typeof layerActions.layerChangeStyle> | ReturnType<typeof layerActions.addAvailableBaseLayer> | ReturnType<typeof layerActions.addAvailableBaseLayers> | ReturnType<typeof layerActions.addBaseLayer> | ReturnType<typeof layerActions.addLayer> | ReturnType<typeof layerActions.baseLayerDelete> | ReturnType<typeof layerActions.onUpdateLayerInformation> | ReturnType<typeof layerActions.layerChangeDimension> | ReturnType<typeof layerActions.layerChangeEnabled> | ReturnType<typeof layerActions.layerChangeGeojson> | ReturnType<typeof layerActions.layerChangeName> | ReturnType<typeof layerActions.layerChangeOpacity> | ReturnType<typeof layerActions.layerDelete> | ReturnType<typeof layerActions.layerError> | ReturnType<typeof layerActions.setBaseLayers> | ReturnType<typeof layerActions.setLayers>;
90
+ export type LayerActions = ReturnType<typeof layerActions.layerSetDimensions> | ReturnType<typeof layerActions.layerChangeStyle> | ReturnType<typeof layerActions.addAvailableBaseLayer> | ReturnType<typeof layerActions.addAvailableBaseLayers> | ReturnType<typeof layerActions.addBaseLayer> | ReturnType<typeof layerActions.addLayer> | ReturnType<typeof layerActions.baseLayerDelete> | ReturnType<typeof layerActions.onUpdateLayerInformation> | ReturnType<typeof layerActions.layerChangeDimension> | ReturnType<typeof layerActions.layerChangeEnabled> | ReturnType<typeof layerActions.layerChangeGeojson> | ReturnType<typeof layerActions.layerChangeName> | ReturnType<typeof layerActions.layerChangeOpacity> | ReturnType<typeof layerActions.layerDelete> | ReturnType<typeof layerActions.layerError> | ReturnType<typeof layerActions.setBaseLayers> | ReturnType<typeof layerActions.setLayers> | ReturnType<typeof layerActions.SetLayerLegendVisibilityPayload>;
@@ -173,3 +173,7 @@ export interface ShowLayerInfoPayload {
173
173
  source?: uiTypes.Source;
174
174
  style?: string;
175
175
  }
176
+ export interface SetLayerLegendVisibilityPayload {
177
+ layerId: string;
178
+ showLayerLegend: boolean;
179
+ }
@@ -67,6 +67,11 @@ export declare const slice: import("@reduxjs/toolkit").Slice<WebMapState, {
67
67
  origin: string;
68
68
  }>) => void;
69
69
  toggleClock: (draft: Draft<WebMapState>, action: PayloadAction<ToggleClockPayload>) => void;
70
+ toggleClockOptions: (draft: Draft<WebMapState>, action: PayloadAction<{
71
+ mapId: string;
72
+ isClockOptionsMenuVisible: boolean;
73
+ origin?: string;
74
+ }>) => void;
70
75
  setClockPositionSize: (draft: Draft<WebMapState>, action: PayloadAction<SetClockPositionSizePayload>) => void;
71
76
  }, "mapReducer", "mapReducer", import("@reduxjs/toolkit").SliceSelectors<WebMapState>>;
72
77
  export declare const mapActions: {
@@ -127,6 +132,11 @@ export declare const mapActions: {
127
132
  origin: string;
128
133
  }, "mapReducer/changeOverlayer">;
129
134
  toggleClock: import("@reduxjs/toolkit").ActionCreatorWithPayload<ToggleClockPayload, "mapReducer/toggleClock">;
135
+ toggleClockOptions: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
136
+ mapId: string;
137
+ isClockOptionsMenuVisible: boolean;
138
+ origin?: string;
139
+ }, "mapReducer/toggleClockOptions">;
130
140
  setClockPositionSize: import("@reduxjs/toolkit").ActionCreatorWithPayload<SetClockPositionSizePayload, "mapReducer/setClockPositionSize">;
131
141
  };
132
142
  export declare const mapReducer: import("redux").Reducer<WebMapState>;
@@ -2094,6 +2094,33 @@ export declare const getIsClockVisible: ((state: CoreAppStore, mapId: string) =>
2094
2094
  memoize: typeof import("reselect").weakMapMemoize;
2095
2095
  argsMemoize: typeof import("reselect").weakMapMemoize;
2096
2096
  };
2097
+ /**
2098
+ * Returns if clock options menu is visible from webmap state
2099
+ *
2100
+ * @param {CoreAppStore} store - The Redux store from which the map state will be extracted.
2101
+ * @returns {boolean | undefined} returnType: boolean
2102
+ */
2103
+ export declare const getIsClockOptionsMenuVisible: ((state: CoreAppStore, mapId: string) => boolean | undefined) & {
2104
+ clearCache: () => void;
2105
+ resultsCount: () => number;
2106
+ resetResultsCount: () => void;
2107
+ } & {
2108
+ resultFunc: (resultFuncArgs_0: WebMap | undefined) => boolean | undefined;
2109
+ memoizedResultFunc: ((resultFuncArgs_0: WebMap | undefined) => boolean | undefined) & {
2110
+ clearCache: () => void;
2111
+ resultsCount: () => number;
2112
+ resetResultsCount: () => void;
2113
+ };
2114
+ lastResult: () => boolean | undefined;
2115
+ dependencies: [(store: CoreAppStore, mapId: string) => WebMap | undefined];
2116
+ recomputations: () => number;
2117
+ resetRecomputations: () => void;
2118
+ dependencyRecomputations: () => number;
2119
+ resetDependencyRecomputations: () => void;
2120
+ } & {
2121
+ memoize: typeof import("reselect").weakMapMemoize;
2122
+ argsMemoize: typeof import("reselect").weakMapMemoize;
2123
+ };
2097
2124
  /**
2098
2125
  * Returns if clock position from webmap state
2099
2126
  *
@@ -2162,8 +2189,8 @@ export declare const getMapPreset: ((state: CoreAppStore & uiTypes.UIModuleState
2162
2189
  resultsCount: () => number;
2163
2190
  resetResultsCount: () => void;
2164
2191
  } & {
2165
- resultFunc: (resultFuncArgs_0: ReduxLayer[], resultFuncArgs_1: ReduxLayer[], resultFuncArgs_2: ReduxLayer[], resultFuncArgs_3: Bbox, resultFuncArgs_4: string, resultFuncArgs_5: string | undefined, resultFuncArgs_6: string | undefined, resultFuncArgs_7: string | undefined, resultFuncArgs_8: boolean, resultFuncArgs_9: boolean, resultFuncArgs_10: boolean | undefined, resultFuncArgs_11: boolean | undefined, resultFuncArgs_12: boolean | undefined, resultFuncArgs_13: number, resultFuncArgs_14: number | undefined, resultFuncArgs_15: string | undefined, resultFuncArgs_16: string | undefined, resultFuncArgs_17: number | undefined, resultFuncArgs_18: Dimension[] | undefined, resultFuncArgs_19: boolean | undefined, resultFuncArgs_20: boolean | undefined, resultFuncArgs_21: string | undefined, resultFuncArgs_22: DockedLayerManagerSize, resultFuncArgs_23: DockedLayerManagerPosition, resultFuncArgs_24: DockedLayerManagerDimensions | undefined, resultFuncArgs_25: boolean | undefined, resultFuncArgs_26: ClockPosition | undefined, resultFuncArgs_27: ClockSize | undefined, resultFuncArgs_28: uiTypes.UIStoreType, resultFuncArgs_29: string, resultFuncArgs_30: string) => MapPreset;
2166
- memoizedResultFunc: ((resultFuncArgs_0: ReduxLayer[], resultFuncArgs_1: ReduxLayer[], resultFuncArgs_2: ReduxLayer[], resultFuncArgs_3: Bbox, resultFuncArgs_4: string, resultFuncArgs_5: string | undefined, resultFuncArgs_6: string | undefined, resultFuncArgs_7: string | undefined, resultFuncArgs_8: boolean, resultFuncArgs_9: boolean, resultFuncArgs_10: boolean | undefined, resultFuncArgs_11: boolean | undefined, resultFuncArgs_12: boolean | undefined, resultFuncArgs_13: number, resultFuncArgs_14: number | undefined, resultFuncArgs_15: string | undefined, resultFuncArgs_16: string | undefined, resultFuncArgs_17: number | undefined, resultFuncArgs_18: Dimension[] | undefined, resultFuncArgs_19: boolean | undefined, resultFuncArgs_20: boolean | undefined, resultFuncArgs_21: string | undefined, resultFuncArgs_22: DockedLayerManagerSize, resultFuncArgs_23: DockedLayerManagerPosition, resultFuncArgs_24: DockedLayerManagerDimensions | undefined, resultFuncArgs_25: boolean | undefined, resultFuncArgs_26: ClockPosition | undefined, resultFuncArgs_27: ClockSize | undefined, resultFuncArgs_28: uiTypes.UIStoreType, resultFuncArgs_29: string, resultFuncArgs_30: string) => MapPreset) & {
2192
+ resultFunc: (resultFuncArgs_0: ReduxLayer[], resultFuncArgs_1: ReduxLayer[], resultFuncArgs_2: ReduxLayer[], resultFuncArgs_3: Bbox, resultFuncArgs_4: string, resultFuncArgs_5: string | undefined, resultFuncArgs_6: string | undefined, resultFuncArgs_7: string | undefined, resultFuncArgs_8: boolean, resultFuncArgs_9: boolean, resultFuncArgs_10: boolean | undefined, resultFuncArgs_11: boolean | undefined, resultFuncArgs_12: boolean | undefined, resultFuncArgs_13: number, resultFuncArgs_14: number | undefined, resultFuncArgs_15: string | undefined, resultFuncArgs_16: string | undefined, resultFuncArgs_17: number | undefined, resultFuncArgs_18: Dimension[] | undefined, resultFuncArgs_19: boolean | undefined, resultFuncArgs_20: boolean | undefined, resultFuncArgs_21: string | undefined, resultFuncArgs_22: DockedLayerManagerSize, resultFuncArgs_23: DockedLayerManagerPosition, resultFuncArgs_24: DockedLayerManagerDimensions | undefined, resultFuncArgs_25: boolean | undefined, resultFuncArgs_26: boolean | undefined, resultFuncArgs_27: ClockPosition | undefined, resultFuncArgs_28: ClockSize | undefined, resultFuncArgs_29: uiTypes.UIStoreType, resultFuncArgs_30: string, resultFuncArgs_31: string) => MapPreset;
2193
+ memoizedResultFunc: ((resultFuncArgs_0: ReduxLayer[], resultFuncArgs_1: ReduxLayer[], resultFuncArgs_2: ReduxLayer[], resultFuncArgs_3: Bbox, resultFuncArgs_4: string, resultFuncArgs_5: string | undefined, resultFuncArgs_6: string | undefined, resultFuncArgs_7: string | undefined, resultFuncArgs_8: boolean, resultFuncArgs_9: boolean, resultFuncArgs_10: boolean | undefined, resultFuncArgs_11: boolean | undefined, resultFuncArgs_12: boolean | undefined, resultFuncArgs_13: number, resultFuncArgs_14: number | undefined, resultFuncArgs_15: string | undefined, resultFuncArgs_16: string | undefined, resultFuncArgs_17: number | undefined, resultFuncArgs_18: Dimension[] | undefined, resultFuncArgs_19: boolean | undefined, resultFuncArgs_20: boolean | undefined, resultFuncArgs_21: string | undefined, resultFuncArgs_22: DockedLayerManagerSize, resultFuncArgs_23: DockedLayerManagerPosition, resultFuncArgs_24: DockedLayerManagerDimensions | undefined, resultFuncArgs_25: boolean | undefined, resultFuncArgs_26: boolean | undefined, resultFuncArgs_27: ClockPosition | undefined, resultFuncArgs_28: ClockSize | undefined, resultFuncArgs_29: uiTypes.UIStoreType, resultFuncArgs_30: string, resultFuncArgs_31: string) => MapPreset) & {
2167
2194
  clearCache: () => void;
2168
2195
  resultsCount: () => number;
2169
2196
  resetResultsCount: () => void;
@@ -2729,6 +2756,26 @@ export declare const getMapPreset: ((state: CoreAppStore & uiTypes.UIModuleState
2729
2756
  } & {
2730
2757
  memoize: typeof import("reselect").weakMapMemoize;
2731
2758
  argsMemoize: typeof import("reselect").weakMapMemoize;
2759
+ }, ((state: CoreAppStore, mapId: string) => boolean | undefined) & {
2760
+ clearCache: () => void;
2761
+ resultsCount: () => number;
2762
+ resetResultsCount: () => void;
2763
+ } & {
2764
+ resultFunc: (resultFuncArgs_0: WebMap | undefined) => boolean | undefined;
2765
+ memoizedResultFunc: ((resultFuncArgs_0: WebMap | undefined) => boolean | undefined) & {
2766
+ clearCache: () => void;
2767
+ resultsCount: () => number;
2768
+ resetResultsCount: () => void;
2769
+ };
2770
+ lastResult: () => boolean | undefined;
2771
+ dependencies: [(store: CoreAppStore, mapId: string) => WebMap | undefined];
2772
+ recomputations: () => number;
2773
+ resetRecomputations: () => void;
2774
+ dependencyRecomputations: () => number;
2775
+ resetDependencyRecomputations: () => void;
2776
+ } & {
2777
+ memoize: typeof import("reselect").weakMapMemoize;
2778
+ argsMemoize: typeof import("reselect").weakMapMemoize;
2732
2779
  }, ((state: CoreAppStore, mapId: string) => ClockPosition | undefined) & {
2733
2780
  clearCache: () => void;
2734
2781
  resultsCount: () => number;
@@ -57,6 +57,7 @@ export interface WebMap {
57
57
  isTimeScrollingEnabled?: boolean;
58
58
  selectedMapIds?: string[];
59
59
  isClockVisible?: boolean;
60
+ isClockOptionsMenuVisible?: boolean;
60
61
  clockPosition?: ClockPosition;
61
62
  clockSize?: ClockSize;
62
63
  }
@@ -127,6 +128,7 @@ export interface MapPreset {
127
128
  defaultOverlayer?: string;
128
129
  refTimeDimensionModes?: RefTimeDimensionModes;
129
130
  isClockVisible?: boolean;
131
+ isClockOptionsMenuVisible?: boolean;
130
132
  clockPosition?: ClockPosition;
131
133
  clockSize?: ClockSize;
132
134
  }