@vcmap/ui 6.0.0-rc.9 → 6.0.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 (160) hide show
  1. package/README.md +2 -0
  2. package/build/commonViteConfig.js +7 -0
  3. package/config/aerowest.config.json +12 -2
  4. package/config/analysis.config.json +17 -0
  5. package/config/base.config.json +16 -4
  6. package/config/components-show-case.config.json +53 -0
  7. package/config/concepts-show-case.config.json +39 -0
  8. package/config/dev.config.json +165 -104
  9. package/config/dynamic-layer.config.json +32 -0
  10. package/config/hello-world.config.json +11 -0
  11. package/config/projects.config.json +9 -1
  12. package/config/solar.config.json +65 -0
  13. package/config/vectorTile.config.json +70 -0
  14. package/config/www.config.json +33 -10
  15. package/dist/assets/cesium.js +1 -1
  16. package/dist/assets/{core-ccecb5f4.js → core-9c65d604.js} +7302 -6838
  17. package/dist/assets/core.js +1 -1
  18. package/dist/assets/{ol-3c6b9b5b.js → ol-5f63bc8d.js} +5057 -5178
  19. package/dist/assets/ol.js +1 -1
  20. package/dist/assets/ui-339b3d7f.css +1 -0
  21. package/dist/assets/{ui-8a8aef2a.js → ui-339b3d7f.js} +9687 -8940
  22. package/dist/assets/ui.js +1 -1
  23. package/dist/assets/vue.js +1 -1
  24. package/dist/assets/{vuetify-ac50bfc8.js → vuetify-521222b6.js} +2507 -2504
  25. package/dist/assets/vuetify.js +1 -1
  26. package/index.d.ts +2 -0
  27. package/index.js +1 -0
  28. package/package.json +12 -12
  29. package/plugins/@vcmap-show-case/README.md +15 -6
  30. package/plugins/@vcmap-show-case/category-tester/package.json +1 -1
  31. package/plugins/@vcmap-show-case/category-tester/src/CollectionComponentOptions.vue +23 -23
  32. package/plugins/@vcmap-show-case/category-tester/src/FoobarEditor.vue +2 -8
  33. package/plugins/@vcmap-show-case/collection-manager-example/package.json +1 -1
  34. package/plugins/@vcmap-show-case/collection-manager-example/src/CollectionManagerExample.vue +10 -8
  35. package/plugins/@vcmap-show-case/context-menu-tester/package.json +1 -1
  36. package/plugins/@vcmap-show-case/extent-example/package.json +1 -1
  37. package/plugins/@vcmap-show-case/flight-component-example/package.json +1 -1
  38. package/plugins/@vcmap-show-case/form-inputs-example/package.json +1 -1
  39. package/plugins/@vcmap-show-case/hello-world/package.json +1 -1
  40. package/plugins/@vcmap-show-case/icons-example/package.json +1 -1
  41. package/plugins/@vcmap-show-case/notifier-tester/package.json +1 -1
  42. package/plugins/@vcmap-show-case/panel-tester/package.json +1 -1
  43. package/plugins/@vcmap-show-case/plugin-editors/package.json +1 -1
  44. package/plugins/@vcmap-show-case/plugin-editors/src/index.js +17 -6
  45. package/plugins/@vcmap-show-case/project-selector/package.json +1 -9
  46. package/plugins/@vcmap-show-case/project-selector/src/ModulesListComponent.vue +22 -31
  47. package/plugins/@vcmap-show-case/project-selector/src/ProjectSelectorComponent.vue +15 -23
  48. package/plugins/@vcmap-show-case/projection-example/README.md +3 -0
  49. package/plugins/@vcmap-show-case/projection-example/package.json +5 -0
  50. package/plugins/@vcmap-show-case/projection-example/src/ProjectionExample.vue +73 -0
  51. package/plugins/@vcmap-show-case/{table-example → projection-example}/src/index.js +22 -11
  52. package/plugins/@vcmap-show-case/search-example/package.json +1 -1
  53. package/plugins/@vcmap-show-case/simple-graph/package.json +1 -4
  54. package/plugins/@vcmap-show-case/style-input-example/package.json +1 -1
  55. package/plugins/@vcmap-show-case/switch-map-callback-example/README.md +2 -2
  56. package/plugins/@vcmap-show-case/switch-map-callback-example/package.json +2 -1
  57. package/plugins/@vcmap-show-case/switch-map-callback-example/src/index.js +4 -1
  58. package/plugins/@vcmap-show-case/theming-example/package.json +1 -1
  59. package/plugins/@vcmap-show-case/toolbox-example/package.json +1 -1
  60. package/plugins/@vcmap-show-case/vector-properties-example/package.json +1 -1
  61. package/plugins/@vcmap-show-case/viewpoint-component-example/package.json +1 -1
  62. package/plugins/@vcmap-show-case/window-tester/package.json +1 -1
  63. package/plugins/@vcmap-show-case/window-tester/src/WindowExample.vue +1 -1
  64. package/plugins/@vcmap-show-case/window-tester/src/WindowExampleToggleChild.vue +5 -1
  65. package/plugins/@vcmap-show-case/wizard-example/package.json +1 -1
  66. package/plugins/package.json +7 -3
  67. package/src/actions/flightActions.js +40 -20
  68. package/src/actions/listActions.d.ts +1 -1
  69. package/src/actions/listActions.js +1 -1
  70. package/src/application/VcsApp.vue +3 -0
  71. package/src/application/VcsApp.vue.d.ts +12 -0
  72. package/src/application/VcsAttributions.vue +1 -1
  73. package/src/application/VcsAttributionsFooter.vue +1 -1
  74. package/src/application/VcsContainer.vue +0 -1
  75. package/src/application/VcsContainer.vue.d.ts +12 -0
  76. package/src/application/VcsObliqueFooter.vue +110 -0
  77. package/src/application/VcsObliqueFooter.vue.d.ts +4 -0
  78. package/src/application/VcsTextPageFooter.vue +1 -0
  79. package/src/application/attributionsHelper.js +10 -6
  80. package/src/components/flight/VcsFlightPlayer.vue +26 -20
  81. package/src/components/form-inputs-controls/VcsDatePicker.vue +23 -3
  82. package/src/components/form-inputs-controls/VcsDatePicker.vue.d.ts +1 -1
  83. package/src/components/form-inputs-controls/VcsFileInput.vue +1 -1
  84. package/src/components/form-inputs-controls/VcsLabel.vue +10 -1
  85. package/src/components/form-inputs-controls/VcsLabel.vue.d.ts +9 -0
  86. package/src/components/form-inputs-controls/VcsRadio.vue +4 -0
  87. package/src/components/form-inputs-controls/VcsSelect.vue.d.ts +2 -2
  88. package/src/components/form-inputs-controls/VcsTextField.vue +1 -1
  89. package/src/components/form-inputs-controls/VcsWizardStep.vue.d.ts +2 -2
  90. package/src/components/import/VcsImportComponent.vue +3 -3
  91. package/src/components/lists/VcsActionList.vue +1 -1
  92. package/src/components/lists/VcsList.vue +42 -29
  93. package/src/components/lists/VcsListItemComponent.vue +1 -1
  94. package/src/components/lists/VcsListItemComponent.vue.d.ts +5 -32
  95. package/src/components/lists/VcsTreeview.vue +2 -0
  96. package/src/components/notification/VcsHelp.vue +0 -1
  97. package/src/components/notification/VcsHelpTooltip.vue +48 -0
  98. package/src/components/notification/VcsHelpTooltip.vue.d.ts +25 -0
  99. package/src/components/projection/VcsProjection.vue +329 -0
  100. package/src/components/projection/VcsProjection.vue.d.ts +7 -0
  101. package/src/components/section/VcsFormSection.vue +0 -1
  102. package/src/components/section/VcsFormSection.vue.d.ts +1 -1
  103. package/src/components/tables/VcsDataTable.vue +13 -2
  104. package/src/components/tables/VcsDataTable.vue.d.ts +12 -1
  105. package/src/components/vector-properties/VcsFeatureEditingWindow.vue +17 -1
  106. package/src/components/vector-properties/VcsFeatureEditingWindow.vue.d.ts +10 -1
  107. package/src/components/vector-properties/VcsFeatureTransforms.vue +39 -5
  108. package/src/components/vector-properties/VcsFeatureTransforms.vue.d.ts +2 -1
  109. package/src/components/vector-properties/VcsVectorPropertiesComponent.vue +44 -24
  110. package/src/components/vector-properties/VcsVectorPropertiesComponent.vue.d.ts +27 -2
  111. package/src/components/viewpoint/VcsViewpointComponent.vue +6 -6
  112. package/src/contentTree/contentTreeCollection.js +12 -1
  113. package/src/featureInfo/abstractFeatureInfoView.d.ts +9 -0
  114. package/src/featureInfo/abstractFeatureInfoView.js +17 -1
  115. package/src/i18n/de.d.ts +90 -41
  116. package/src/i18n/de.js +63 -22
  117. package/src/i18n/en.d.ts +90 -41
  118. package/src/i18n/en.js +59 -18
  119. package/src/legend/StyleLegendItem.vue +1 -5
  120. package/src/legend/VcsLegend.vue +9 -10
  121. package/src/legend/VcsLegend.vue.d.ts +1 -1
  122. package/src/legend/legendHelper.js +6 -1
  123. package/src/manager/collectionManager/collectionComponentClass.js +4 -4
  124. package/src/manager/collectionManager/editorCollectionComponentClass.js +5 -3
  125. package/src/manager/toolbox/GroupToolboxComponent.vue +6 -1
  126. package/src/manager/toolbox/SelectToolboxComponent.vue +6 -2
  127. package/src/manager/toolbox/ToolboxManagerComponent.vue +7 -2
  128. package/src/manager/window/WindowComponentHeader.vue +1 -1
  129. package/src/navigation/MapNavCompass.vue +166 -140
  130. package/src/navigation/MapNavCompass.vue.d.ts +3 -1
  131. package/src/navigation/MapNavigation.vue +22 -5
  132. package/src/navigation/VcsCompass.vue +2 -1
  133. package/src/navigation/overviewMap.js +4 -1
  134. package/src/styles/main.scss +2 -2
  135. package/src/uiConfig.d.ts +27 -0
  136. package/src/uiConfig.js +3 -0
  137. package/src/vuePlugins/vuetify.js +2 -0
  138. package/dist/assets/ui-8a8aef2a.css +0 -1
  139. package/plugins/@vcmap-show-case/buttons-example/README.md +0 -4
  140. package/plugins/@vcmap-show-case/buttons-example/package.json +0 -5
  141. package/plugins/@vcmap-show-case/buttons-example/src/ButtonsExample.vue +0 -281
  142. package/plugins/@vcmap-show-case/buttons-example/src/index.js +0 -51
  143. package/plugins/@vcmap-show-case/config-editor/README.md +0 -3
  144. package/plugins/@vcmap-show-case/config-editor/package.json +0 -5
  145. package/plugins/@vcmap-show-case/config-editor/src/ConfigEditor.vue +0 -62
  146. package/plugins/@vcmap-show-case/config-editor/src/index.js +0 -49
  147. package/plugins/@vcmap-show-case/list-example/README.md +0 -3
  148. package/plugins/@vcmap-show-case/list-example/package.json +0 -5
  149. package/plugins/@vcmap-show-case/list-example/src/ListExample.vue +0 -406
  150. package/plugins/@vcmap-show-case/list-example/src/index.js +0 -46
  151. package/plugins/@vcmap-show-case/table-example/README.md +0 -3
  152. package/plugins/@vcmap-show-case/table-example/package.json +0 -5
  153. package/plugins/@vcmap-show-case/table-example/src/DataTableExample.vue +0 -203
  154. package/plugins/@vcmap-show-case/textfields-example/README.md +0 -3
  155. package/plugins/@vcmap-show-case/textfields-example/package.json +0 -5
  156. package/plugins/@vcmap-show-case/textfields-example/src/TextfieldsExample.vue +0 -115
  157. package/plugins/@vcmap-show-case/textfields-example/src/index.js +0 -64
  158. /package/dist/assets/{cesium-a21a380a.js → cesium-f4e19cd9.js} +0 -0
  159. /package/dist/assets/{vue-bcc58dd1.js → vue-31395141.js} +0 -0
  160. /package/dist/assets/{vuetify-ac50bfc8.css → vuetify-521222b6.css} +0 -0
@@ -170,7 +170,7 @@ export function getLegendEntries(app) {
170
170
  */
171
171
  function syncLayerLegendEntries(layer) {
172
172
  removeEntryForLayer(layer);
173
- if (layer.active) {
173
+ if (layer.active && layer.isSupported(app.maps.activeMap)) {
174
174
  const key = layer.name;
175
175
  const title = layer.properties.title || layer.name;
176
176
  const legend =
@@ -187,6 +187,10 @@ export function getLegendEntries(app) {
187
187
  }
188
188
  }
189
189
 
190
+ const destroyMapListener = app.maps.mapActivated.addEventListener(() =>
191
+ [...app.layers].forEach(syncLayerLegendEntries),
192
+ );
193
+
190
194
  const destroyChangedListener = app.layers.stateChanged.addEventListener(
191
195
  syncLayerLegendEntries,
192
196
  );
@@ -196,6 +200,7 @@ export function getLegendEntries(app) {
196
200
  [...app.layers].forEach(syncLayerLegendEntries);
197
201
 
198
202
  const destroy = () => {
203
+ destroyMapListener();
199
204
  destroyChangedListener();
200
205
  destroyRemovedListener();
201
206
  Object.values(styleChangedListener).forEach((cb) => cb());
@@ -321,6 +321,7 @@ class CollectionComponentClass {
321
321
  [...this.selection.value].forEach((listItem) => {
322
322
  this._collection.remove(this._collection.getByKey(listItem.name));
323
323
  });
324
+ this.selection.value = [];
324
325
  },
325
326
  });
326
327
  this._destroyBulkDelete = destroy;
@@ -513,10 +514,9 @@ class CollectionComponentClass {
513
514
  });
514
515
  if (index > -1) {
515
516
  const listItem = this._listItems.value[index];
516
- const selectionIdx = this.selection.value.indexOf(listItem);
517
- if (selectionIdx > -1) {
518
- this.selection.value.splice(selectionIdx, 1);
519
- }
517
+ this.selection.value = this.selection.value.filter(
518
+ (i) => i.name !== listItem.name,
519
+ );
520
520
  destroyListItem(this._listItems.value[index]);
521
521
  this._listItems.value.splice(index, 1);
522
522
  }
@@ -218,9 +218,11 @@ export function makeEditorCollectionComponentClass(
218
218
  );
219
219
 
220
220
  const itemRemovedListener =
221
- editorCollectionComponent.collection.removed.addEventListener(
222
- closeEditorWindow,
223
- );
221
+ editorCollectionComponent.collection.removed.addEventListener((item) => {
222
+ if (predicate(item)) {
223
+ closeEditorWindow(item);
224
+ }
225
+ });
224
226
 
225
227
  editorCollectionComponent.addItemMapping({
226
228
  predicate,
@@ -34,7 +34,12 @@
34
34
  :icon="action.icon"
35
35
  :disabled="action.disabled"
36
36
  :active="action.active"
37
- @click="action.callback($event)"
37
+ @click.stop="
38
+ () => {
39
+ $emit('click', $event);
40
+ action.callback($event);
41
+ }
42
+ "
38
43
  v-bind="{ ...$attrs }"
39
44
  />
40
45
  </div>
@@ -11,7 +11,12 @@
11
11
  :active="group.action.active"
12
12
  :disabled="group.action.disabled"
13
13
  :background="group.action.background"
14
- @click="group.action.callback($event)"
14
+ @click.stop="
15
+ () => {
16
+ $emit('click', $event);
17
+ group.action.callback($event);
18
+ }
19
+ "
15
20
  v-bind="{ ...$attrs }"
16
21
  class="vcs-toolbox-action-selected"
17
22
  :min-width="32"
@@ -39,7 +44,6 @@
39
44
  <v-toolbar
40
45
  class="vcs-toolbox-2 mx-auto marginToTop rounded-b elevation-4 opacity-80 px-1"
41
46
  :height="toolboxHeight"
42
- dense
43
47
  >
44
48
  <v-toolbar-items class="w-100">
45
49
  <div class="d-flex align-center justify-space-between gc-1 w-100">
@@ -20,11 +20,13 @@
20
20
  v-if="group.type === ToolboxType.GROUP"
21
21
  :group="group"
22
22
  @toggle="openGroup"
23
+ @click="bringToTop"
23
24
  />
24
25
  <ToolboxActionSelect
25
26
  v-else-if="group.type === ToolboxType.SELECT"
26
27
  :group="group"
27
28
  @toggle="openGroup"
29
+ @click="bringToTop"
28
30
  />
29
31
  <VcsToolButton
30
32
  v-else
@@ -33,7 +35,10 @@
33
35
  :active="group.action.active"
34
36
  :background="group.action.background"
35
37
  :disabled="group.action.disabled"
36
- @click.stop="group.action.callback($event)"
38
+ @click.stop="
39
+ bringToTop();
40
+ group.action.callback($event);
41
+ "
37
42
  v-bind="{ ...$attrs }"
38
43
  />
39
44
  </div>
@@ -149,7 +154,7 @@
149
154
  const toolboxToggleAction = {
150
155
  name: 'toolboxToggleAction',
151
156
  icon: '$vcsTools',
152
- title: 'Toolbox',
157
+ title: 'toolbox.title',
153
158
  active: true,
154
159
  callback() {
155
160
  this.active = !this.active;
@@ -145,7 +145,7 @@
145
145
  ? createLinkAction(
146
146
  {
147
147
  name: 'info',
148
- title: 'content.infoAction.title',
148
+ title: 'content.helpAction.title',
149
149
  icon: '$vcsHelp',
150
150
  },
151
151
  props.windowState.infoUrl || props.windowState.infoUrlCallback,
@@ -1,151 +1,172 @@
1
1
  <template>
2
- <svg
3
- xmlns="http://www.w3.org/2000/svg"
4
- width="58"
5
- height="58"
6
- viewBox="0 0 58 58"
7
- >
8
- <g id="Group_1654" data-name="Group 1654" transform="translate(24)">
9
- <path
10
- :class="canEmit ? 'cursor-pointer' : ''"
11
- id="north_arrow"
12
- data-name="Polygon 14"
13
- d="M4,0,8,13H0Z"
14
- transform="translate(1)"
15
- fill="currentColor"
16
- @click="emit($event, 0)"
17
- />
18
- <path
19
- :class="canEmit ? 'cursor-pointer' : ''"
20
- id="south_arrow"
21
- data-name="Polygon 17"
22
- d="M4,0,8,13H0Z"
23
- transform="translate(9 58) rotate(180)"
24
- fill="rgba(88,88,88,0.51)"
25
- @click="emit($event, 180)"
26
- />
27
- </g>
28
- <g
29
- id="Group_1653"
30
- data-name="Group 1653"
31
- transform="translate(0 33) rotate(-90)"
32
- >
33
- <path
34
- :class="canEmit ? 'cursor-pointer' : ''"
35
- id="west_arrow"
36
- data-name="Polygon 14"
37
- d="M4,0,8,13H0Z"
38
- fill="rgba(88,88,88,0.51)"
39
- @click="emit($event, 270)"
40
- />
41
- <path
42
- :class="canEmit ? 'cursor-pointer' : ''"
43
- id="east_arrow"
44
- data-name="Polygon 17"
45
- d="M4,0,8,13H0Z"
46
- transform="translate(8 58) rotate(180)"
47
- fill="rgba(88,88,88,0.51)"
48
- @click="emit($event, 90)"
49
- />
50
- </g>
51
- <g
52
- id="Group_1672"
53
- data-name="Group 1672"
54
- transform="translate(1)"
55
- v-if="!hideTicks"
56
- >
57
- <line
58
- id="Line_289-2"
59
- data-name="Line 289"
60
- x2="6.079"
61
- transform="translate(3.751 15) rotate(30)"
62
- fill="none"
63
- stroke="#707070"
64
- stroke-linecap="round"
65
- stroke-width="1"
66
- />
67
- <line
68
- id="Line_290-2"
69
- data-name="Line 290"
70
- x2="4.665"
71
- transform="translate(48.208 40.667) rotate(30)"
72
- fill="none"
73
- stroke="#707070"
74
- stroke-linecap="round"
75
- stroke-width="1"
76
- />
77
- <line
78
- id="Line_289-4"
79
- data-name="Line 289"
80
- x2="6.079"
81
- transform="translate(14 53.249) rotate(-60)"
82
- fill="none"
83
- stroke="#707070"
84
- stroke-linecap="round"
85
- stroke-width="1"
86
- />
87
- <line
88
- id="Line_290-3"
89
- data-name="Line 290"
90
- x2="4.665"
91
- transform="translate(39.668 8.792) rotate(-60)"
92
- fill="none"
93
- stroke="#707070"
94
- stroke-linecap="round"
95
- stroke-width="1"
96
- />
97
- <line
98
- id="Line_289-5"
99
- data-name="Line 289"
100
- x2="6.079"
101
- transform="translate(14 4.751) rotate(60)"
102
- fill="none"
103
- stroke="#707070"
104
- stroke-linecap="round"
105
- stroke-width="1"
106
- />
107
- <line
108
- id="Line_290-4"
109
- data-name="Line 290"
110
- x2="4.665"
111
- transform="translate(39.667 49.208) rotate(60)"
112
- fill="none"
113
- stroke="#707070"
114
- stroke-linecap="round"
115
- stroke-width="1"
116
- />
117
- <line
118
- id="Line_289-6"
119
- data-name="Line 289"
120
- x2="6.079"
121
- transform="translate(3.752 43) rotate(-30)"
122
- fill="none"
123
- stroke="#707070"
124
- stroke-linecap="round"
125
- stroke-width="1"
126
- />
127
- <line
128
- id="Line_290-5"
129
- data-name="Line 290"
130
- x2="4.665"
131
- transform="translate(48.209 17.333) rotate(-30)"
132
- fill="none"
133
- stroke="#707070"
134
- stroke-linecap="round"
135
- stroke-width="1"
136
- />
137
- </g>
138
- </svg>
2
+ <span>
3
+ <v-tooltip location="start" target="parent" :disabled="!canEmit">
4
+ <template #activator="{ props }">
5
+ <svg
6
+ xmlns="http://www.w3.org/2000/svg"
7
+ width="58"
8
+ height="58"
9
+ viewBox="0 0 58 58"
10
+ >
11
+ <g
12
+ id="Group_1654"
13
+ data-name="Group 1654"
14
+ transform="translate(24)"
15
+ v-bind="props"
16
+ >
17
+ <path
18
+ :class="canEmit ? 'cursor-pointer hover' : ''"
19
+ id="north_arrow"
20
+ data-name="Polygon 14"
21
+ d="M4,0,8,13H0Z"
22
+ transform="translate(1)"
23
+ fill="currentColor"
24
+ @click="emit($event, 0)"
25
+ @mouseenter="alignment = 'alignNorth'"
26
+ />
27
+ <path
28
+ :class="canEmit ? 'cursor-pointer hover' : ''"
29
+ id="south_arrow"
30
+ data-name="Polygon 17"
31
+ d="M4,0,8,13H0Z"
32
+ transform="translate(9 58) rotate(180)"
33
+ fill="rgba(88,88,88,0.51)"
34
+ @click="emit($event, 180)"
35
+ @mouseenter="alignment = 'alignSouth'"
36
+ />
37
+ </g>
38
+ <g
39
+ id="Group_1653"
40
+ data-name="Group 1653"
41
+ transform="translate(0 33) rotate(-90)"
42
+ v-bind="props"
43
+ >
44
+ <path
45
+ :class="canEmit ? 'cursor-pointer hover' : ''"
46
+ id="west_arrow"
47
+ data-name="Polygon 14"
48
+ d="M4,0,8,13H0Z"
49
+ fill="rgba(88,88,88,0.51)"
50
+ @click="emit($event, 270)"
51
+ @mouseenter="alignment = 'alignWest'"
52
+ />
53
+ <path
54
+ :class="canEmit ? 'cursor-pointer hover' : ''"
55
+ id="east_arrow"
56
+ data-name="Polygon 17"
57
+ d="M4,0,8,13H0Z"
58
+ transform="translate(8 58) rotate(180)"
59
+ fill="rgba(88,88,88,0.51)"
60
+ @click="emit($event, 90)"
61
+ @mouseenter="alignment = 'alignEast'"
62
+ />
63
+ </g>
64
+ <g
65
+ id="Group_1672"
66
+ data-name="Group 1672"
67
+ transform="translate(1)"
68
+ v-if="!hideTicks"
69
+ >
70
+ <line
71
+ id="Line_289-2"
72
+ data-name="Line 289"
73
+ x2="6.079"
74
+ transform="translate(3.751 15) rotate(30)"
75
+ fill="none"
76
+ stroke="#707070"
77
+ stroke-linecap="round"
78
+ stroke-width="1"
79
+ />
80
+ <line
81
+ id="Line_290-2"
82
+ data-name="Line 290"
83
+ x2="4.665"
84
+ transform="translate(48.208 40.667) rotate(30)"
85
+ fill="none"
86
+ stroke="#707070"
87
+ stroke-linecap="round"
88
+ stroke-width="1"
89
+ />
90
+ <line
91
+ id="Line_289-4"
92
+ data-name="Line 289"
93
+ x2="6.079"
94
+ transform="translate(14 53.249) rotate(-60)"
95
+ fill="none"
96
+ stroke="#707070"
97
+ stroke-linecap="round"
98
+ stroke-width="1"
99
+ />
100
+ <line
101
+ id="Line_290-3"
102
+ data-name="Line 290"
103
+ x2="4.665"
104
+ transform="translate(39.668 8.792) rotate(-60)"
105
+ fill="none"
106
+ stroke="#707070"
107
+ stroke-linecap="round"
108
+ stroke-width="1"
109
+ />
110
+ <line
111
+ id="Line_289-5"
112
+ data-name="Line 289"
113
+ x2="6.079"
114
+ transform="translate(14 4.751) rotate(60)"
115
+ fill="none"
116
+ stroke="#707070"
117
+ stroke-linecap="round"
118
+ stroke-width="1"
119
+ />
120
+ <line
121
+ id="Line_290-4"
122
+ data-name="Line 290"
123
+ x2="4.665"
124
+ transform="translate(39.667 49.208) rotate(60)"
125
+ fill="none"
126
+ stroke="#707070"
127
+ stroke-linecap="round"
128
+ stroke-width="1"
129
+ />
130
+ <line
131
+ id="Line_289-6"
132
+ data-name="Line 289"
133
+ x2="6.079"
134
+ transform="translate(3.752 43) rotate(-30)"
135
+ fill="none"
136
+ stroke="#707070"
137
+ stroke-linecap="round"
138
+ stroke-width="1"
139
+ />
140
+ <line
141
+ id="Line_290-5"
142
+ data-name="Line 290"
143
+ x2="4.665"
144
+ transform="translate(48.209 17.333) rotate(-30)"
145
+ fill="none"
146
+ stroke="#707070"
147
+ stroke-linecap="round"
148
+ stroke-width="1"
149
+ />
150
+ </g>
151
+ </svg>
152
+ </template>
153
+ <span>{{ $st(`navigation.compass.${alignment}`) }}</span>
154
+ </v-tooltip>
155
+ </span>
139
156
  </template>
140
157
 
141
158
  <script>
159
+ import { ref } from 'vue';
160
+ import { VTooltip } from 'vuetify/components';
161
+
142
162
  /**
143
- * @description The compass with ticks along the border
163
+ * @description The compass with ticks along the border and alignment tooltips on arrows.
144
164
  * @vue-prop {boolean} [canEmit=true] - whether to emit click events on cardinal direction arrows or not
145
165
  * @vue-prop {boolean} [hideTicks=false] - hide ticks on navigation rose
146
166
  * @vue-event {HTMLEvent} direction-click - raised when a cardinal direction arrow is clicked
147
167
  */
148
168
  export default {
169
+ components: { VTooltip },
149
170
  props: {
150
171
  canEmit: {
151
172
  type: Boolean,
@@ -165,6 +186,9 @@
165
186
  }
166
187
  },
167
188
  },
189
+ setup() {
190
+ return { alignment: ref('') };
191
+ },
168
192
  };
169
193
  </script>
170
194
 
@@ -174,8 +198,10 @@
174
198
  height: 85%;
175
199
  margin: 7.5%;
176
200
  }
177
-
178
- svg path:hover {
201
+ svg g:focus {
202
+ outline: none;
203
+ }
204
+ .hover:hover {
179
205
  fill: var(--v-primary-lighten1) !important;
180
206
  }
181
207
  </style>
@@ -7,7 +7,9 @@ declare const _default: import("vue").DefineComponent<{
7
7
  type: BooleanConstructor;
8
8
  default: boolean;
9
9
  };
10
- }, any, any, {}, {
10
+ }, {
11
+ alignment: import("vue").Ref<string>;
12
+ }, any, {}, {
11
13
  emit(event: any, dir: any): void;
12
14
  }, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
13
15
  canEmit: {
@@ -60,9 +60,10 @@
60
60
 
61
61
  <script>
62
62
  import { computed, inject, ref, reactive, onUnmounted } from 'vue';
63
- import { ObliqueMap, CesiumMap } from '@vcmap/core';
63
+ import { ObliqueMap, CesiumMap, ObliqueViewDirection } from '@vcmap/core';
64
64
  import { VContainer, VRow } from 'vuetify/components';
65
65
  import { useDisplay } from 'vuetify';
66
+ import { Math as CesiumMath } from '@vcmap-cesium/engine';
66
67
  import { createOverviewMapAction } from '../actions/actionHelper.js';
67
68
  import { createLocatorAction } from './locatorHelper.js';
68
69
  import {
@@ -185,6 +186,16 @@
185
186
  };
186
187
  }
187
188
 
189
+ /**
190
+ * @enum {number}
191
+ */
192
+ const directionToDegrees = {
193
+ [ObliqueViewDirection.NORTH]: 0,
194
+ [ObliqueViewDirection.EAST]: 90,
195
+ [ObliqueViewDirection.SOUTH]: 180,
196
+ [ObliqueViewDirection.WEST]: 270,
197
+ };
198
+
188
199
  export default {
189
200
  components: {
190
201
  OrientationToolsButton,
@@ -204,10 +215,16 @@
204
215
 
205
216
  const handleRenderEvent = ({ map }) => {
206
217
  viewMode.value = getViewModeForMap(map);
207
- const vp = map.getViewpointSync();
208
- if (vp) {
209
- headingRef.value = vp.heading;
210
- tiltRef.value = vp.pitch;
218
+ if (map instanceof ObliqueMap && map.currentImage) {
219
+ headingRef.value = map.currentImage.viewDirectionAngle
220
+ ? 90 - CesiumMath.toDegrees(map.currentImage.viewDirectionAngle)
221
+ : directionToDegrees[map.currentImage.viewDirection];
222
+ } else {
223
+ const vp = map.getViewpointSync();
224
+ if (vp) {
225
+ headingRef.value = vp.heading;
226
+ tiltRef.value = vp.pitch;
227
+ }
211
228
  }
212
229
  };
213
230
 
@@ -2,9 +2,10 @@
2
2
  <v-sheet
3
3
  :style="{
4
4
  transform: `rotate(${compassRotation}deg)`,
5
+ transition: 'transform 0.2s ease',
5
6
  }"
6
7
  @click="$emit('update:modelValue', 0)"
7
- class="d-flex flex-column justify-center align-center position-relative rounded-circle user-select-none transition-transform-200-ease vcs-compass"
8
+ class="d-flex flex-column justify-center align-center position-relative rounded-circle user-select-none vcs-compass"
8
9
  elevation="1"
9
10
  :height="height"
10
11
  :width="width"
@@ -232,7 +232,10 @@ class OverviewMap {
232
232
  this._collectionListeners = [
233
233
  this._app.maps.layerCollection.added.addEventListener((layer) => {
234
234
  if (layer.properties.showInOverviewMap) {
235
- const clone = deserializeLayer(this._app, layer.toJSON());
235
+ const clone = deserializeLayer(this._app, {
236
+ ...layer.toJSON(),
237
+ mapNames: [this._map.name],
238
+ });
236
239
  clone.activate();
237
240
  const idx = this._map.layerCollection.indexOf(clone);
238
241
  if (idx < 0) {
@@ -1,5 +1,5 @@
1
- @import './typography';
2
- @import './vcsList';
1
+ @use './typography';
2
+ @use './vcsList';
3
3
 
4
4
  /* latin-ext */
5
5
  @font-face {
package/src/uiConfig.d.ts CHANGED
@@ -56,6 +56,10 @@ export type UiConfigObject = {
56
56
  * - mouse event, when position display is updated. Either 'click' (default) or 'move'.
57
57
  */
58
58
  positionDisplayEventType?: string | undefined;
59
+ /**
60
+ * - A template for rendering information of the current image in oblique mode, e.g. '{{ name }}' printing the image's name
61
+ */
62
+ obliqueFooterTemplate?: string | undefined;
59
63
  /**
60
64
  * - an optional URL to a help landing page
61
65
  */
@@ -128,10 +132,18 @@ export type UiConfigObject = {
128
132
  * - can be used to hide the settings Window
129
133
  */
130
134
  hideSettings?: boolean | undefined;
135
+ /**
136
+ * - can be used to hide the oblique name in the footer
137
+ */
138
+ hideObliqueFooter?: boolean | undefined;
131
139
  /**
132
140
  * - can be used to activate the overviewMap on startup
133
141
  */
134
142
  overviewMapActiveOnStartup?: boolean | undefined;
143
+ /**
144
+ * - can be used to activate a contentTree on startup
145
+ */
146
+ contentTreeActiveOnStartup?: boolean | undefined;
135
147
  /**
136
148
  * - the display quality settings
137
149
  */
@@ -190,6 +202,7 @@ export type UiConfigObject = {
190
202
  * @property {string} [primaryColor] - an optional primary color to use in all themes, can be overwritten by `vuetifyTheme`
191
203
  * @property {boolean} [startingFeatureInfo] - an optional flag whether to activate feature info on startup (default active)
192
204
  * @property {string} [positionDisplayEventType] - mouse event, when position display is updated. Either 'click' (default) or 'move'.
205
+ * @property {string} [obliqueFooterTemplate] - A template for rendering information of the current image in oblique mode, e.g. '{{ name }}' printing the image's name
193
206
  * @property {string} [helpBaseUrl='https://help.vc.systems/'] - an optional URL to a help landing page
194
207
  * @property {TextPageType} [imprint] - an option imprint, will show a link in the footer. Default title is 'footer.imprint.title'.
195
208
  * @property {TextPageType} [dataProtection] - an option dataProtection, will show a link in the footer. Default title is 'footer.dataProtection.title'.
@@ -208,7 +221,9 @@ export type UiConfigObject = {
208
221
  * @property {boolean} [hideContentTree] - can be used to hide the contentTree
209
222
  * @property {boolean} [hideLegend] - can be used to hide the legend
210
223
  * @property {boolean} [hideSettings] - can be used to hide the settings Window
224
+ * @property {boolean} [hideObliqueFooter] - can be used to hide the oblique name in the footer
211
225
  * @property {boolean} [overviewMapActiveOnStartup] - can be used to activate the overviewMap on startup
226
+ * @property {boolean} [contentTreeActiveOnStartup] - can be used to activate a contentTree on startup
212
227
  * @property {import("@vcmap/core").DisplayQualityOptions} [displayQuality] - the display quality settings
213
228
  * @property {import("./vuetifyPlugins/vuetify.js").VcsThemes} [vuetifyTheme] - Vuetify Theming, also see vuetify configuraton https://vuetifyjs.com/en/features/theme/
214
229
  * @property {boolean} [openLegendOnAdd] - open the legend window, if new layer has a config
@@ -266,6 +281,10 @@ declare class UiConfig extends Collection<UiConfigurationItem<unknown>> {
266
281
  * - mouse event, when position display is updated. Either 'click' (default) or 'move'.
267
282
  */
268
283
  readonly positionDisplayEventType?: string | undefined;
284
+ /**
285
+ * - A template for rendering information of the current image in oblique mode, e.g. '{{ name }}' printing the image's name
286
+ */
287
+ readonly obliqueFooterTemplate?: string | undefined;
269
288
  /**
270
289
  * - an optional URL to a help landing page
271
290
  */
@@ -438,10 +457,18 @@ declare class UiConfig extends Collection<UiConfigurationItem<unknown>> {
438
457
  * - can be used to hide the settings Window
439
458
  */
440
459
  readonly hideSettings?: boolean | undefined;
460
+ /**
461
+ * - can be used to hide the oblique name in the footer
462
+ */
463
+ readonly hideObliqueFooter?: boolean | undefined;
441
464
  /**
442
465
  * - can be used to activate the overviewMap on startup
443
466
  */
444
467
  readonly overviewMapActiveOnStartup?: boolean | undefined;
468
+ /**
469
+ * - can be used to activate a contentTree on startup
470
+ */
471
+ readonly contentTreeActiveOnStartup?: boolean | undefined;
445
472
  /**
446
473
  * - the display quality settings
447
474
  */