@vcmap/ui 6.1.0-rc.7 → 6.1.1

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 (106) hide show
  1. package/build/bundle.js +3 -3
  2. package/config/base.config.json +7 -3
  3. package/config/cluster.config.json +1 -1
  4. package/config/dev.config.json +172 -56
  5. package/config/projects.config.json +2 -1
  6. package/config/vectorTile.config.json +42 -1
  7. package/dist/assets/cesium.js +1 -1
  8. package/dist/assets/{core-52c2ef11.js → core-5ae90f6d.js} +7515 -5451
  9. package/dist/assets/core.js +1 -1
  10. package/dist/assets/ol.js +1 -1
  11. package/dist/assets/{ui-dccb9009.css → ui-e659989f.css} +1 -1
  12. package/dist/assets/{ui-dccb9009.js → ui-e659989f.js} +21736 -20926
  13. package/dist/assets/ui.js +1 -1
  14. package/dist/assets/vue.js +1 -1
  15. package/dist/assets/{vuetify-43a20e18.css → vuetify-cc6a8213.css} +2 -2
  16. package/dist/assets/{vuetify-43a20e18.js → vuetify-cc6a8213.js} +6694 -6593
  17. package/dist/assets/vuetify.js +1 -1
  18. package/index.d.ts +14 -6
  19. package/index.js +14 -5
  20. package/package.json +18 -9
  21. package/plugins/@vcmap-show-case/vector-properties-example/src/LayerSettings.vue +39 -0
  22. package/plugins/@vcmap-show-case/vector-properties-example/src/VectorPropertiesExample.vue +3 -0
  23. package/plugins/@vcmap-show-case/vector-properties-example/src/lib.js +13 -0
  24. package/plugins/@vcmap-show-case/window-tester/src/WindowExample.vue +9 -0
  25. package/plugins/package.json +9 -5
  26. package/src/actions/actionHelper.d.ts +6 -0
  27. package/src/actions/actionHelper.js +30 -2
  28. package/src/actions/deepPickingAction.d.ts +23 -0
  29. package/src/actions/deepPickingAction.js +404 -0
  30. package/src/actions/extentActions.js +20 -6
  31. package/src/actions/flightActions.js +5 -1
  32. package/src/application/VcsApp.vue +33 -21
  33. package/src/application/VcsApp.vue.d.ts +4 -0
  34. package/src/application/VcsAttributionsFooter.vue +1 -0
  35. package/src/application/VcsContainer.vue +1 -0
  36. package/src/application/VcsContainer.vue.d.ts +4 -0
  37. package/src/application/VcsMobileMenuList.vue +34 -41
  38. package/src/application/VcsNavbar.vue +3 -0
  39. package/src/application/VcsNavbarMobile.vue +6 -18
  40. package/src/application/VcsNavbarMobile.vue.d.ts +0 -1
  41. package/src/application/VcsPositionDisplay.vue +1 -0
  42. package/src/callback/activateLayersCallback.js +9 -1
  43. package/src/callback/addModuleCallback.js +2 -1
  44. package/src/components/buttons/VcsActionButtonList.vue +1 -0
  45. package/src/components/form-inputs-controls/VcsSelect.vue +8 -6
  46. package/src/components/icons/+all.d.ts +5 -0
  47. package/src/components/icons/+all.js +14 -0
  48. package/src/components/lists/VcsActionList.vue +1 -0
  49. package/src/components/lists/VcsGroupedList.vue +2 -1
  50. package/src/components/lists/VcsListItemComponent.vue +1 -0
  51. package/src/components/lists/VcsTreeNode.vue +5 -1
  52. package/src/components/lists/VcsTreeview.vue +14 -2
  53. package/src/components/style/{MenuWrapper.vue → StyleMenuWrapper.vue} +2 -1
  54. package/src/components/style/VcsFillMenu.vue +4 -4
  55. package/src/components/style/VcsImageMenu.vue +4 -4
  56. package/src/components/style/VcsStrokeMenu.vue +4 -4
  57. package/src/components/style/VcsTextMenu.vue +4 -4
  58. package/src/contentTree/LayerTree.vue +8 -46
  59. package/src/contentTree/LayerTree.vue.d.ts +1 -3
  60. package/src/contentTree/contentTreeCollection.d.ts +7 -0
  61. package/src/contentTree/contentTreeCollection.js +30 -10
  62. package/src/contentTree/contentTreeItem.d.ts +4 -4
  63. package/src/contentTree/contentTreeItem.js +2 -2
  64. package/src/contentTree/groupContentTreeItem.d.ts +5 -0
  65. package/src/contentTree/groupContentTreeItem.js +1 -1
  66. package/src/contentTree/layerContentTreeItem.js +1 -1
  67. package/src/contentTree/layerGroupContentTreeItem.js +11 -1
  68. package/src/contentTree/nodeContentTreeItem.d.ts +21 -0
  69. package/src/contentTree/nodeContentTreeItem.js +31 -2
  70. package/src/contentTree/wmsChildContentTreeItem.d.ts +56 -0
  71. package/src/contentTree/wmsChildContentTreeItem.js +159 -0
  72. package/src/contentTree/wmsGroupContentTreeItem.d.ts +171 -0
  73. package/src/contentTree/wmsGroupContentTreeItem.js +620 -0
  74. package/src/featureInfo/ClusterFeatureComponent.vue +47 -11
  75. package/src/featureInfo/ClusterFeatureComponent.vue.d.ts +1 -0
  76. package/src/featureInfo/balloonFeatureInfoView.d.ts +3 -0
  77. package/src/featureInfo/balloonFeatureInfoView.js +78 -11
  78. package/src/featureInfo/balloonHelper.js +8 -12
  79. package/src/featureInfo/featureInfo.d.ts +32 -7
  80. package/src/featureInfo/featureInfo.js +193 -91
  81. package/src/i18n/de.d.ts +22 -16
  82. package/src/i18n/de.js +4 -0
  83. package/src/i18n/en.d.ts +22 -16
  84. package/src/i18n/en.js +4 -0
  85. package/src/legend/legendHelper.d.ts +15 -0
  86. package/src/legend/legendHelper.js +28 -3
  87. package/src/manager/toolbox/GroupToolboxComponent.vue +1 -0
  88. package/src/manager/toolbox/SelectToolboxComponent.vue +2 -0
  89. package/src/manager/toolbox/ToolboxManagerComponent.vue +1 -0
  90. package/src/manager/window/windowManager.d.ts +2 -2
  91. package/src/manager/window/windowManager.js +17 -16
  92. package/src/navigation/MapNavigation.vue +3 -1
  93. package/src/navigation/overviewMap.js +1 -1
  94. package/src/notifier/NotifierComponent.vue +1 -0
  95. package/src/search/ResultsComponent.vue +10 -1
  96. package/src/search/SearchComponent.vue +11 -6
  97. package/src/search/search.js +3 -16
  98. package/src/state.d.ts +2 -1
  99. package/src/state.js +2 -1
  100. package/src/uiConfig.d.ts +9 -0
  101. package/src/uiConfig.js +1 -0
  102. package/src/vcsUiApp.js +7 -1
  103. /package/dist/assets/{cesium-6c6aa853.js → cesium-be8a1422.js} +0 -0
  104. /package/dist/assets/{ol-b0589b0c.js → ol-d5f8aba6.js} +0 -0
  105. /package/dist/assets/{vue-f7a0b088.js → vue-3435e55b.js} +0 -0
  106. /package/src/components/style/{MenuWrapper.vue.d.ts → StyleMenuWrapper.vue.d.ts} +0 -0
@@ -1,6 +1,12 @@
1
1
  import { getShapeFromOptions } from '@vcmap/core';
2
2
  import { reactive } from 'vue';
3
3
 
4
+ /**
5
+ * Symbol set a volatile legend property on a layer or style
6
+ * @type {symbol}
7
+ */
8
+ export const legendSymbol = Symbol('legend');
9
+
4
10
  /**
5
11
  * @enum {string}
6
12
  * @property {string} Image - an image
@@ -109,6 +115,26 @@ export function getImageSrcFromShape(image) {
109
115
  * @property {Array<LegendItem>} legend - legend properties
110
116
  */
111
117
 
118
+ /**
119
+ * @param {import("@vcmap/core").StyleItem|undefined} style
120
+ * @returns {Array<LegendItem>|undefined}
121
+ */
122
+ export function getStyleLegend(style) {
123
+ return style?.[legendSymbol] ?? style?.properties?.legend;
124
+ }
125
+
126
+ /**
127
+ * @param {import("@vcmap/core").Layer|undefined} layer
128
+ * @returns {Array<LegendItem>|undefined}
129
+ */
130
+ export function getLayerLegend(layer) {
131
+ return (
132
+ getStyleLegend(layer?.style) ??
133
+ layer?.[legendSymbol] ??
134
+ layer?.properties?.legend
135
+ );
136
+ }
137
+
112
138
  /**
113
139
  *
114
140
  * @param {import("../vcsUiApp.js").default} app
@@ -149,8 +175,7 @@ export function getLegendEntries(app) {
149
175
  if (layer.active && layer.isSupported(app.maps.activeMap)) {
150
176
  const key = layer.name;
151
177
  const title = layer.properties.title || layer.name;
152
- const legend =
153
- layer.style?.properties?.legend ?? layer.properties?.legend;
178
+ const legend = getLayerLegend(layer);
154
179
  if (legend) {
155
180
  const legendEntry = { key, title, legend, open: true };
156
181
  entries.unshift(legendEntry);
@@ -186,7 +211,7 @@ export function getLegendEntries(app) {
186
211
  const uniqueVectorClusterGroups = [...new Set(vectorClusterGroups)];
187
212
  uniqueVectorClusterGroups.forEach((groupName) => {
188
213
  const group = app.vectorClusterGroups.getByKey(groupName);
189
- if (group?.properties?.legend) {
214
+ if (group?.[legendSymbol] ?? group?.properties?.legend) {
190
215
  const title = group.properties.title || group.name;
191
216
  const { legend } = group.properties;
192
217
  if (!entries.some(({ key }) => key === group.name)) {
@@ -35,6 +35,7 @@
35
35
  <div class="d-flex align-center justify-space-between gc-1 w-100">
36
36
  <VcsToolButton
37
37
  v-for="{ id, action } in orderedButtons"
38
+ :data-action-name="action.name"
38
39
  :key="id"
39
40
  :tooltip="action.title"
40
41
  :icon="action.icon"
@@ -6,6 +6,7 @@
6
6
  >
7
7
  <VcsToolButton
8
8
  :key="group.action.tools[group.action.currentIndex].name"
9
+ :data-action-name="group.action.tools[group.action.currentIndex].name"
9
10
  :tooltip="group.action.tools[group.action.currentIndex].title"
10
11
  :icon="group.action.tools[group.action.currentIndex].icon"
11
12
  :active="group.action.active"
@@ -55,6 +56,7 @@
55
56
  <div class="d-flex align-center justify-space-between gc-1 w-100">
56
57
  <VcsToolButton
57
58
  v-for="(item, index) in group.action.tools"
59
+ :data-action-name="item.name"
58
60
  :key="`${item.name}-${index}`"
59
61
  :tooltip="item.title"
60
62
  :icon="item.icon"
@@ -16,6 +16,7 @@
16
16
  <div
17
17
  class="d-flex align-center justify-space-between w-100"
18
18
  v-for="group in orderedGroups"
19
+ :data-toolbox-id="group.id"
19
20
  :key="group.id"
20
21
  >
21
22
  <ToolboxActionGroup
@@ -76,7 +76,7 @@ export function isSlotPosition(windowPosition: WindowPosition): boolean;
76
76
  * headerComponent?: import("vue").Component<T, unknown, unknown>,
77
77
  * state : Partial<WindowState>,
78
78
  * position : Partial<WindowPositionOptions>,
79
- * slot: WindowSlot,
79
+ * slot: import("vue").Ref<WindowSlot>,
80
80
  * props: T,
81
81
  * provides: Record<string, unknown>,
82
82
  * zIndex: import("vue").ComputedGetter<number>
@@ -249,7 +249,7 @@ export type WindowComponent<T extends Object = Object> = {
249
249
  headerComponent?: import("vue").Component<T, unknown, unknown>;
250
250
  state: Partial<WindowState>;
251
251
  position: Partial<WindowPositionOptions>;
252
- slot: WindowSlot;
252
+ slot: import("vue").Ref<WindowSlot>;
253
253
  props: T;
254
254
  provides: Record<string, unknown>;
255
255
  zIndex: import("vue").ComputedGetter<number>;
@@ -170,7 +170,7 @@ export function isSlotPosition(windowPosition) {
170
170
  * headerComponent?: import("vue").Component<T, unknown, unknown>,
171
171
  * state : Partial<WindowState>,
172
172
  * position : Partial<WindowPositionOptions>,
173
- * slot: WindowSlot,
173
+ * slot: import("vue").Ref<WindowSlot>,
174
174
  * props: T,
175
175
  * provides: Record<string, unknown>,
176
176
  * zIndex: import("vue").ComputedGetter<number>
@@ -545,15 +545,17 @@ class WindowManager {
545
545
  * @private
546
546
  */
547
547
  _cachePosition(windowComponent) {
548
- const initialWindowPosition = windowPositionFromOptions(
549
- windowComponent.initialPositionOptions,
550
- );
551
- if (
552
- !compareWindowPositions(initialWindowPosition, windowComponent.position)
553
- ) {
554
- this._windowPositionsCache.set(windowComponent.id, {
555
- ...windowComponent.position,
556
- });
548
+ if (windowComponent.slot.value === WindowSlot.DETACHED) {
549
+ const initialWindowPosition = windowPositionFromOptions(
550
+ windowComponent.initialPositionOptions,
551
+ );
552
+ if (
553
+ !compareWindowPositions(initialWindowPosition, windowComponent.position)
554
+ ) {
555
+ this._windowPositionsCache.set(windowComponent.id, {
556
+ ...windowComponent.position,
557
+ });
558
+ }
557
559
  }
558
560
  }
559
561
 
@@ -744,12 +746,11 @@ class WindowManager {
744
746
  * @param {string|vcsAppSymbol} owner
745
747
  */
746
748
  removeOwner(owner) {
747
- const componentIds = [...this.componentIds];
748
- componentIds.forEach((id) => {
749
- const { state } = this.get(id);
750
- if (owner === state.owner) {
751
- this.remove(id);
752
- }
749
+ const toRemove = this.componentIds.filter(
750
+ (id) => this.get(id)?.state?.owner === owner,
751
+ );
752
+ toRemove.forEach((id) => {
753
+ this.remove(id);
753
754
  });
754
755
  this._externalZIndexIds.forEach((externalOwner, id) => {
755
756
  if (externalOwner === owner) {
@@ -57,7 +57,7 @@
57
57
  :disabled="movementApiCallsDisabled"
58
58
  />
59
59
  </v-row>
60
- <template v-if="smAndUp && !mobileLandscape">
60
+ <template v-if="!mobileLandscape">
61
61
  <v-row justify="center">
62
62
  <OrientationToolsButton
63
63
  v-if="showOverviewButton"
@@ -188,6 +188,8 @@
188
188
  options.keyEvents === true &&
189
189
  options.apiCalls === true &&
190
190
  options.pointerEvents === true;
191
+
192
+ stopRotation = null;
191
193
  });
192
194
  return {
193
195
  action,
@@ -276,7 +276,7 @@ class OverviewMap {
276
276
  if (activeOnStartup && !hide && !this._active) {
277
277
  await this.activate();
278
278
  } else if (hide && this._active) {
279
- await this.deactivate();
279
+ this.deactivate();
280
280
  }
281
281
  if (scaleFactor) {
282
282
  this._scaleFactor = scaleFactor;
@@ -3,6 +3,7 @@
3
3
  <v-snackbar
4
4
  v-for="notification in notifications"
5
5
  :key="notification.id"
6
+ :data-notification-id="notification.id"
6
7
  v-model="notification.open"
7
8
  :timeout="notification.timeout"
8
9
  class="vcs-notifier"
@@ -23,6 +23,7 @@
23
23
  import { inject, onUnmounted, ref, computed } from 'vue';
24
24
  import { VList } from 'vuetify/components';
25
25
  import { useDisplay } from 'vuetify';
26
+ import { getLogger } from '@vcsuite/logger';
26
27
  import ResultItem from './ResultItem.vue';
27
28
 
28
29
  /**
@@ -92,7 +93,15 @@
92
93
  const [index] = value;
93
94
  if (index >= 0) {
94
95
  const item = items.value[index];
95
- item.clicked();
96
+ const p = item.clicked();
97
+ if (p instanceof Promise) {
98
+ p.catch((e) => {
99
+ getLogger('ResultComponent.vue').error(
100
+ 'Result item failed on click',
101
+ e,
102
+ );
103
+ });
104
+ }
96
105
  }
97
106
  },
98
107
  });
@@ -149,12 +149,17 @@
149
149
  suggesting.value = requestId;
150
150
  queryPreSuggestion = trimmedInput;
151
151
  selectedSuggestion.value = -1;
152
- app.search.suggest(trimmedInput).then((s) => {
153
- if (suggesting.value === requestId) {
154
- suggestions.value = s;
155
- suggesting.value = '';
156
- }
157
- });
152
+ app.search
153
+ .suggest(trimmedInput)
154
+ .then((s) => {
155
+ if (suggesting.value === requestId) {
156
+ suggestions.value = s;
157
+ suggesting.value = '';
158
+ }
159
+ })
160
+ .catch(() => {
161
+ getLogger('SearchComponent.vue').warn('suggestion failed');
162
+ });
158
163
  }, 200);
159
164
  } else {
160
165
  selectedSuggestion.value = -1;
@@ -18,6 +18,7 @@ import {
18
18
  getDefaultPrimaryColor,
19
19
  getColorByKey,
20
20
  } from '../vuePlugins/vuetify.js';
21
+ import { getColoredMapIcon } from '../components/icons/+all.js';
21
22
  import { getViewpointFromFeature } from '../actions/actionHelper.js';
22
23
 
23
24
  /**
@@ -40,20 +41,6 @@ import { getViewpointFromFeature } from '../actions/actionHelper.js';
40
41
  * @property {function():void} destroy
41
42
  */
42
43
 
43
- /**
44
- * @param {string} color
45
- * @returns {import("ol/style/Icon").Options}
46
- */
47
- function getPointResultIcon(color) {
48
- return {
49
- src: `data:image/svg+xml,%3Csvg xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:cc='http://creativecommons.org/ns%23' xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns%23' xmlns:svg='http://www.w3.org/2000/svg' xmlns='http://www.w3.org/2000/svg' xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' id='icon_24_poi' width='24' height='23.994' viewBox='0 0 24 23.994' sodipodi:docname='mapIcon.svg'%3E%3Cg id='Gruppe_1972' transform='translate(-571 -609.477)'%3E%3Cpath id='Pfad_773' d='M583,611a8.009,8.009,0,0,0-8,8c0,5.314,6.952,13.32,7.248,13.658a1,1,0,0,0,1.5,0c.3-.338,7.248-8.344,7.248-13.658A8.009,8.009,0,0,0,583,611Zm0,19.444c-2.18-2.685-6-8.09-6-11.444a6,6,0,0,1,12,0C589,622.354,585.18,627.759,583,630.444Z' fill='currentColor' /%3E%3Cpath id='Pfad_774' d='M583,615a4,4,0,1,0,4,4A4,4,0,0,0,583,615Zm0,6a2,2,0,1,1,2-2A2,2,0,0,1,583,621Z' fill='currentColor' /%3E%3C/g%3E%3Cpath fill='${encodeURIComponent(
50
- color,
51
- )}' d='M 11.672998,20.526286 C 8.5115524,16.526958 6.4310003,12.714969 6.0702695,10.260963 6.0109099,9.8571482 6.0115821,9.1201807 6.0716855,8.7084104 6.4424582,6.1682348 8.3335069,4.1603103 10.828528,3.6575721 c 1.904966,-0.383844 3.881822,0.1903514 5.289639,1.5364231 0.993092,0.9495349 1.610829,2.1488769 1.810148,3.5144152 0.0601,0.4117703 0.06077,1.1487378 0.0014,1.5525526 -0.357076,2.429138 -2.337816,6.081898 -5.487559,10.119822 -0.224045,0.287223 -0.415188,0.530536 -0.424763,0.540696 -0.0096,0.01016 -0.16456,-0.167678 -0.344411,-0.395195 z m 0.990366,-7.047968 c 0.894914,-0.146674 1.762065,-0.627065 2.349286,-1.301476 0.86707,-0.995812 1.194989,-2.3427819 0.880571,-3.6170541 -0.379849,-1.5394474 -1.596396,-2.6842781 -3.173401,-2.9863277 -0.368703,-0.070619 -1.070937,-0.070619 -1.43964,0 C 9.7056173,5.875042 8.48604,7.0227247 8.1067793,8.5597879 7.8410265,9.6368274 8.0329903,10.787029 8.6317551,11.705317 c 0.5717674,0.876885 1.4205679,1.474277 2.4457369,1.721329 0.47704,0.114961 1.079877,0.134602 1.585872,0.05167 z' id='path1432' /%3E%3C/svg%3E`,
52
- scale: 1,
53
- color,
54
- };
55
- }
56
-
57
44
  /**
58
45
  * sets up result layer for displaying search results
59
46
  * @param {import("@src/vcsUiApp.js").default} app
@@ -75,7 +62,7 @@ function setupSearchResultLayer(app) {
75
62
  app.layers.add(resultLayer);
76
63
 
77
64
  const style = new VectorStyleItem({
78
- image: getPointResultIcon(getDefaultPrimaryColor(app)),
65
+ image: getColoredMapIcon(getDefaultPrimaryColor(app)),
79
66
  fill: {
80
67
  color: 'rgba(237, 237, 237, 0.1)',
81
68
  },
@@ -89,7 +76,7 @@ function setupSearchResultLayer(app) {
89
76
  function setResultColor() {
90
77
  const color = getColorByKey(app, 'primary');
91
78
  style.stroke?.setColor(color);
92
- style.image = new Icon(getPointResultIcon(color));
79
+ style.image = new Icon(getColoredMapIcon(color));
93
80
  resultLayer.forceRedraw();
94
81
  }
95
82
 
package/src/state.d.ts CHANGED
@@ -66,7 +66,8 @@ export type AppState = {
66
66
  export type CachedAppState = AppState;
67
67
  /**
68
68
  * The URL state of the app is an array. To null parameters, pass in 0 instead.
69
- * The first entry is the viewpoint state, the second the active map name
69
+ * The first entry is the viewpoint state or an extent state
70
+ * The second the active map name
70
71
  * The third is an array of modules to apply the state to
71
72
  * the fourth is an array of layer states
72
73
  * the fifth is an array of plugin states
package/src/state.js CHANGED
@@ -66,7 +66,8 @@ import {
66
66
 
67
67
  /**
68
68
  * The URL state of the app is an array. To null parameters, pass in 0 instead.
69
- * The first entry is the viewpoint state, the second the active map name
69
+ * The first entry is the viewpoint state or an extent state
70
+ * The second the active map name
70
71
  * The third is an array of modules to apply the state to
71
72
  * the fourth is an array of layer states
72
73
  * the fifth is an array of plugin states
package/src/uiConfig.d.ts CHANGED
@@ -63,6 +63,10 @@ export type UiConfigObject = {
63
63
  * - an optional flag whether to activate feature info on startup (default active)
64
64
  */
65
65
  startingFeatureInfo?: boolean | undefined;
66
+ /**
67
+ * - an optional flag whether to enable deep picking via right click context menu (default active)
68
+ */
69
+ enableDeepPicking?: boolean | undefined;
66
70
  /**
67
71
  * - mouse event, when position display is updated. Either 'click' (default) or 'move'.
68
72
  */
@@ -229,6 +233,7 @@ export type UiConfigObject = {
229
233
  * @property {string} [appTitle] - an optional title to display next to the company logo
230
234
  * @property {string} [primaryColor] - an optional primary color to use in all themes, can be overwritten by `vuetifyTheme`
231
235
  * @property {boolean} [startingFeatureInfo] - an optional flag whether to activate feature info on startup (default active)
236
+ * @property {boolean} [enableDeepPicking] - an optional flag whether to enable deep picking via right click context menu (default active)
232
237
  * @property {string} [positionDisplayEventType] - mouse event, when position display is updated. Either 'click' (default) or 'move'.
233
238
  * @property {string} [obliqueFooterTemplate] - A template for rendering information of the current image in oblique mode, e.g. '{{ name }}' printing the image's name
234
239
  * @property {string} [helpBaseUrl='https://help.vc.systems/'] - an optional URL to a help landing page
@@ -313,6 +318,10 @@ declare class UiConfig extends Collection<UiConfigurationItem<unknown>> {
313
318
  * - an optional flag whether to activate feature info on startup (default active)
314
319
  */
315
320
  readonly startingFeatureInfo?: boolean | undefined;
321
+ /**
322
+ * - an optional flag whether to enable deep picking via right click context menu (default active)
323
+ */
324
+ readonly enableDeepPicking?: boolean | undefined;
316
325
  /**
317
326
  * - mouse event, when position display is updated. Either 'click' (default) or 'move'.
318
327
  */
package/src/uiConfig.js CHANGED
@@ -54,6 +54,7 @@ import { reactive, readonly, ref } from 'vue';
54
54
  * @property {string} [appTitle] - an optional title to display next to the company logo
55
55
  * @property {string} [primaryColor] - an optional primary color to use in all themes, can be overwritten by `vuetifyTheme`
56
56
  * @property {boolean} [startingFeatureInfo] - an optional flag whether to activate feature info on startup (default active)
57
+ * @property {boolean} [enableDeepPicking] - an optional flag whether to enable deep picking via right click context menu (default active)
57
58
  * @property {string} [positionDisplayEventType] - mouse event, when position display is updated. Either 'click' (default) or 'move'.
58
59
  * @property {string} [obliqueFooterTemplate] - A template for rendering information of the current image in oblique mode, e.g. '{{ name }}' printing the image's name
59
60
  * @property {string} [helpBaseUrl='https://help.vc.systems/'] - an optional URL to a help landing page
package/src/vcsUiApp.js CHANGED
@@ -656,7 +656,13 @@ class VcsUiApp extends VcsApp {
656
656
  const layer = this.layers.getByKey(layerState.name);
657
657
  if (layer) {
658
658
  if (layerState.active) {
659
- layer.activate();
659
+ layer.activate().catch((e) => {
660
+ getLogger().warn(
661
+ 'Failed to activate cached app state. layer failed: ',
662
+ layer.name,
663
+ );
664
+ getLogger().error(e);
665
+ });
660
666
  } else {
661
667
  layer.deactivate();
662
668
  }
File without changes