@vcmap/ui 5.0.0-rc.24 → 5.0.0-rc.26

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 (215) hide show
  1. package/build/build.js +132 -14
  2. package/build/buildHelpers.js +196 -92
  3. package/build/bundle.js +56 -0
  4. package/build/commonViteConfig.js +2 -2
  5. package/config/base.config.json +29 -2
  6. package/config/dev.config.json +29 -1
  7. package/config/www.config.json +81 -39
  8. package/dist/assets/@mdi/font/LICENSE +20 -0
  9. package/dist/assets/@mdi/font/css/materialdesignicons.css.map +16 -0
  10. package/dist/assets/@mdi/font/css/materialdesignicons.min.e3f476.css +3 -0
  11. package/dist/assets/@mdi/font/fonts/materialdesignicons-webfont.woff2 +0 -0
  12. package/dist/assets/cesium/Workers/{AxisAlignedBoundingBox-85d9e53a.js → AxisAlignedBoundingBox-4140c51f.js} +1 -1
  13. package/dist/assets/cesium/Workers/{BoundingRectangle-1ee7eb47.js → BoundingRectangle-c714b156.js} +1 -1
  14. package/dist/assets/cesium/Workers/{BoxGeometry-3b2be784.js → BoxGeometry-6f3da43d.js} +1 -1
  15. package/dist/assets/cesium/Workers/{Color-f107c84d.js → Color-8a565ff2.js} +5 -5
  16. package/dist/assets/cesium/Workers/{CoplanarPolygonGeometryLibrary-78d71993.js → CoplanarPolygonGeometryLibrary-4b4d4096.js} +1 -1
  17. package/dist/assets/cesium/Workers/{CorridorGeometryLibrary-50d99b33.js → CorridorGeometryLibrary-7b94502b.js} +1 -1
  18. package/dist/assets/cesium/Workers/{CylinderGeometry-51b0d9bf.js → CylinderGeometry-ca070b87.js} +1 -1
  19. package/dist/assets/cesium/Workers/{EllipseGeometry-bcfb5d87.js → EllipseGeometry-122e51fa.js} +1 -1
  20. package/dist/assets/cesium/Workers/{EllipseGeometryLibrary-e94f8472.js → EllipseGeometryLibrary-4d326efc.js} +1 -1
  21. package/dist/assets/cesium/Workers/{EllipseOutlineGeometry-28e3a1bb.js → EllipseOutlineGeometry-16cc2bd7.js} +1 -1
  22. package/dist/assets/cesium/Workers/{EllipsoidGeometry-b222fa63.js → EllipsoidGeometry-cb148ca2.js} +1 -1
  23. package/dist/assets/cesium/Workers/{EllipsoidOutlineGeometry-38a3fb5b.js → EllipsoidOutlineGeometry-0fa10c79.js} +1 -1
  24. package/dist/assets/cesium/Workers/{EllipsoidTangentPlane-8c89f28c.js → EllipsoidTangentPlane-6dd1b7af.js} +1 -1
  25. package/dist/assets/cesium/Workers/{FrustumGeometry-bdd3a04d.js → FrustumGeometry-ee73037c.js} +1 -1
  26. package/dist/assets/cesium/Workers/{GeometryAttribute-153115c5.js → GeometryAttribute-ff5b4fb1.js} +1 -1
  27. package/dist/assets/cesium/Workers/{GeometryPipeline-acb2399c.js → GeometryPipeline-1f8fbf05.js} +1 -1
  28. package/dist/assets/cesium/Workers/{IntersectionTests-271e513e.js → IntersectionTests-70d39ba9.js} +1 -1
  29. package/dist/assets/cesium/Workers/{OrientedBoundingBox-5e04e31f.js → OrientedBoundingBox-159cf1d6.js} +1 -1
  30. package/dist/assets/cesium/Workers/{PolygonGeometryLibrary-6762b65b.js → PolygonGeometryLibrary-076a5d25.js} +1 -1
  31. package/dist/assets/cesium/Workers/{PolygonPipeline-7dc7a431.js → PolygonPipeline-b9f2810a.js} +1 -1
  32. package/dist/assets/cesium/Workers/{PolylinePipeline-15fde655.js → PolylinePipeline-639192e0.js} +1 -1
  33. package/dist/assets/cesium/Workers/{PolylineVolumeGeometryLibrary-ba7dfed5.js → PolylineVolumeGeometryLibrary-b73549fb.js} +1 -1
  34. package/dist/assets/cesium/Workers/{PrimitivePipeline-68f0b9a2.js → PrimitivePipeline-10ede1b6.js} +1 -1
  35. package/dist/assets/cesium/Workers/{RectangleGeometryLibrary-8eaf23da.js → RectangleGeometryLibrary-c35a7356.js} +1 -1
  36. package/dist/assets/cesium/Workers/{TerrainEncoding-eb8a645a.js → TerrainEncoding-668d242f.js} +1 -1
  37. package/dist/assets/cesium/Workers/{Transforms-f6451f99.js → Transforms-a2a85221.js} +14 -0
  38. package/dist/assets/cesium/Workers/{WallGeometryLibrary-feef3109.js → WallGeometryLibrary-1938bf0d.js} +1 -1
  39. package/dist/assets/cesium/Workers/cesiumWorkerBootstrapper.js +1 -1
  40. package/dist/assets/cesium/Workers/combineGeometry.js +1 -1
  41. package/dist/assets/cesium/Workers/createBoxGeometry.js +1 -1
  42. package/dist/assets/cesium/Workers/createBoxOutlineGeometry.js +1 -1
  43. package/dist/assets/cesium/Workers/createCircleGeometry.js +1 -1
  44. package/dist/assets/cesium/Workers/createCircleOutlineGeometry.js +1 -1
  45. package/dist/assets/cesium/Workers/createCoplanarPolygonGeometry.js +1 -1
  46. package/dist/assets/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +1 -1
  47. package/dist/assets/cesium/Workers/createCorridorGeometry.js +1 -1
  48. package/dist/assets/cesium/Workers/createCorridorOutlineGeometry.js +1 -1
  49. package/dist/assets/cesium/Workers/createCylinderGeometry.js +1 -1
  50. package/dist/assets/cesium/Workers/createCylinderOutlineGeometry.js +1 -1
  51. package/dist/assets/cesium/Workers/createEllipseGeometry.js +1 -1
  52. package/dist/assets/cesium/Workers/createEllipseOutlineGeometry.js +1 -1
  53. package/dist/assets/cesium/Workers/createEllipsoidGeometry.js +1 -1
  54. package/dist/assets/cesium/Workers/createEllipsoidOutlineGeometry.js +1 -1
  55. package/dist/assets/cesium/Workers/createFrustumGeometry.js +1 -1
  56. package/dist/assets/cesium/Workers/createFrustumOutlineGeometry.js +1 -1
  57. package/dist/assets/cesium/Workers/createGeometry.js +1 -1
  58. package/dist/assets/cesium/Workers/createGroundPolylineGeometry.js +1 -1
  59. package/dist/assets/cesium/Workers/createPlaneGeometry.js +1 -1
  60. package/dist/assets/cesium/Workers/createPlaneOutlineGeometry.js +1 -1
  61. package/dist/assets/cesium/Workers/createPolygonGeometry.js +1 -1
  62. package/dist/assets/cesium/Workers/createPolygonOutlineGeometry.js +1 -1
  63. package/dist/assets/cesium/Workers/createPolylineGeometry.js +1 -1
  64. package/dist/assets/cesium/Workers/createPolylineVolumeGeometry.js +1 -1
  65. package/dist/assets/cesium/Workers/createPolylineVolumeOutlineGeometry.js +1 -1
  66. package/dist/assets/cesium/Workers/createRectangleGeometry.js +1 -1
  67. package/dist/assets/cesium/Workers/createRectangleOutlineGeometry.js +1 -1
  68. package/dist/assets/cesium/Workers/createSimplePolylineGeometry.js +1 -1
  69. package/dist/assets/cesium/Workers/createSphereGeometry.js +1 -1
  70. package/dist/assets/cesium/Workers/createSphereOutlineGeometry.js +1 -1
  71. package/dist/assets/cesium/Workers/createVectorTileGeometries.js +1 -1
  72. package/dist/assets/cesium/Workers/createVectorTilePolygons.js +1 -1
  73. package/dist/assets/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
  74. package/dist/assets/cesium/Workers/createVerticesFromHeightmap.js +1 -1
  75. package/dist/assets/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +1 -1
  76. package/dist/assets/cesium/Workers/createWallGeometry.js +1 -1
  77. package/dist/assets/cesium/Workers/createWallOutlineGeometry.js +1 -1
  78. package/dist/assets/cesium/Workers/package.js +1 -1
  79. package/dist/assets/cesium/Workers/transferTypedArrayTest.js +1 -1
  80. package/dist/assets/cesium/Workers/upsampleQuantizedTerrainMesh.js +1 -1
  81. package/dist/assets/{cesium.253914.js → cesium.305b7c.js} +58656 -33170
  82. package/dist/assets/cesium.js +1 -1
  83. package/dist/assets/core.f3d6d4.js +19060 -0
  84. package/dist/assets/core.js +1 -1
  85. package/dist/assets/index-f94d5be3.js +1 -0
  86. package/dist/assets/{ol.1c946a.js → ol.39cc05.js} +27344 -12118
  87. package/dist/assets/ol.js +1 -1
  88. package/dist/assets/ui.74022f.css +5 -0
  89. package/dist/assets/ui.74022f.js +13466 -0
  90. package/dist/assets/ui.js +1 -1
  91. package/dist/assets/{vue.c1ece7.js → vue.9b8c6e.js} +834 -598
  92. package/dist/assets/vue.js +2 -2
  93. package/dist/assets/{vuetify.6efa21.css → vuetify.30486f.css} +1 -1
  94. package/dist/assets/{vuetify.6efa21.js → vuetify.30486f.js} +343 -103
  95. package/dist/assets/vuetify.js +2 -2
  96. package/dist/index.html +7 -6
  97. package/index.html +14 -6
  98. package/index.js +19 -2
  99. package/lib/olLib.js +19 -16
  100. package/package.json +15 -14
  101. package/plugins/@vcmap/create-link/fallbackCreateLink.vue +0 -2
  102. package/plugins/@vcmap/simple-graph/index.js +1 -1
  103. package/plugins/@vcmap-show-case/README.md +2 -1
  104. package/plugins/@vcmap-show-case/buttons-example/ButtonsExample.vue +55 -79
  105. package/plugins/@vcmap-show-case/category-tester/CategoriesExample.vue +135 -0
  106. package/plugins/@vcmap-show-case/category-tester/CollectionComponentOptions.vue +209 -0
  107. package/plugins/@vcmap-show-case/category-tester/index.js +19 -1
  108. package/plugins/@vcmap-show-case/collection-manager-example/CollectionManagerExample.vue +182 -0
  109. package/plugins/@vcmap-show-case/collection-manager-example/README.md +3 -0
  110. package/plugins/@vcmap-show-case/collection-manager-example/index.js +74 -0
  111. package/plugins/@vcmap-show-case/collection-manager-example/package.json +5 -0
  112. package/plugins/@vcmap-show-case/form-inputs-example/FormInputsExample.vue +20 -3
  113. package/plugins/@vcmap-show-case/switch-map-callback-example/README.md +21 -0
  114. package/plugins/@vcmap-show-case/switch-map-callback-example/SwitchMapCallback.js +47 -0
  115. package/plugins/@vcmap-show-case/switch-map-callback-example/config.json +3 -0
  116. package/plugins/@vcmap-show-case/switch-map-callback-example/index.js +34 -0
  117. package/plugins/@vcmap-show-case/switch-map-callback-example/package.json +5 -0
  118. package/plugins/@vcmap-show-case/table-example/DataTableExample.vue +0 -1
  119. package/plugins/package.json +3 -1
  120. package/public/assets/@mdi/font/LICENSE +20 -0
  121. package/public/assets/@mdi/font/css/materialdesignicons.css.map +16 -0
  122. package/public/assets/@mdi/font/css/materialdesignicons.min.css +3 -0
  123. package/public/assets/@mdi/font/fonts/materialdesignicons-webfont.woff2 +0 -0
  124. package/public/assets/favicon-128.png +0 -0
  125. package/public/assets/favicon-180.png +0 -0
  126. package/public/assets/favicon-192.png +0 -0
  127. package/public/assets/favicon-32.png +0 -0
  128. package/src/application/VcsApp.vue +38 -8
  129. package/src/application/VcsAttributions.vue +20 -5
  130. package/src/application/VcsAttributionsFooter.vue +0 -1
  131. package/src/application/VcsNavbar.vue +29 -22
  132. package/src/callback/activateLayersCallback.js +54 -0
  133. package/src/callback/applyLayerStyleCallback.js +63 -0
  134. package/src/callback/deactivateLayersCallback.js +54 -0
  135. package/src/callback/goToViewpointCallback.js +54 -0
  136. package/src/callback/vcsCallback.js +66 -0
  137. package/src/components/buttons/VcsActionButtonList.vue +28 -10
  138. package/src/components/buttons/VcsButton.vue +38 -100
  139. package/src/components/buttons/VcsFormButton.vue +6 -4
  140. package/src/components/buttons/VcsToolButton.vue +161 -0
  141. package/src/components/form-inputs-controls/VcsDatePicker.vue +19 -5
  142. package/src/components/form-inputs-controls/VcsFormSection.vue +0 -1
  143. package/src/components/form-inputs-controls/VcsSelect.vue +16 -2
  144. package/src/components/form-inputs-controls/VcsSlider.vue +72 -0
  145. package/src/components/form-inputs-controls/VcsTextField.vue +24 -13
  146. package/src/components/form-inputs-controls/VcsWizard.vue +13 -14
  147. package/src/components/form-inputs-controls/VcsWizardStep.vue +0 -1
  148. package/src/components/lists/VcsList.vue +3 -2
  149. package/src/components/lists/VcsTreeviewLeaf.vue +0 -1
  150. package/src/components/tables/VcsDataTable.vue +5 -5
  151. package/src/components/tables/VcsTable.vue +1 -1
  152. package/src/contentTree/LayerTree.vue +15 -9
  153. package/src/contentTree/contentTreeCollection.js +1 -1
  154. package/src/contentTree/contentTreeItem.js +22 -3
  155. package/src/contentTree/groupContentTreeItem.js +1 -0
  156. package/src/contentTree/layerContentTreeItem.js +4 -14
  157. package/src/contentTree/layerGroupContentTreeItem.js +4 -14
  158. package/src/contentTree/obliqueCollectionContentTreeItem.js +4 -0
  159. package/src/contentTree/viewpointContentTreeItem.js +1 -0
  160. package/src/featureInfo/BalloonComponent.vue +0 -1
  161. package/src/featureInfo/abstractFeatureInfoView.js +16 -1
  162. package/src/featureInfo/featureInfo.js +45 -56
  163. package/src/i18n/de.js +5 -2
  164. package/src/i18n/en.js +5 -2
  165. package/src/i18n/i18nCollection.js +1 -2
  166. package/src/init.js +1 -4
  167. package/src/legend/vcsLegend.vue +1 -1
  168. package/src/manager/buttonManager.js +15 -0
  169. package/src/manager/{categoryManager/CategoryComponent.vue → collectionManager/CollectionComponent.vue} +57 -66
  170. package/src/manager/collectionManager/CollectionComponentList.vue +62 -0
  171. package/src/manager/collectionManager/CollectionComponentProvider.vue +38 -0
  172. package/src/manager/collectionManager/CollectionManager.vue +43 -0
  173. package/src/manager/collectionManager/categoryManager.js +83 -0
  174. package/src/manager/collectionManager/collectionComponent.js +453 -0
  175. package/src/manager/collectionManager/collectionManager.js +432 -0
  176. package/src/manager/navbarManager.js +5 -4
  177. package/src/manager/toolbox/GroupToolboxComponent.vue +5 -7
  178. package/src/manager/toolbox/SelectToolboxComponent.vue +6 -9
  179. package/src/manager/toolbox/ToolboxManager.vue +4 -5
  180. package/src/manager/window/WindowComponentHeader.vue +0 -4
  181. package/src/manager/window/WindowManager.vue +22 -5
  182. package/src/navigation/mapNavigation.vue +34 -8
  183. package/src/navigation/overviewMap.js +7 -1
  184. package/src/notifier/notifierComponent.vue +0 -1
  185. package/src/pluginHelper.js +5 -0
  186. package/src/search/resultItem.vue +0 -1
  187. package/src/search/searchComponent.vue +7 -9
  188. package/src/styles/_theming.scss +0 -16
  189. package/src/styles/_typography.scss +2 -2
  190. package/src/styles/main.scss +8 -0
  191. package/src/styles/vcsFont.scss +1 -22
  192. package/src/vcsUiApp.js +76 -12
  193. package/src/vuePlugins/i18n.js +18 -19
  194. package/src/vuePlugins/vuetify.js +0 -1
  195. package/dist/assets/core.3a8205.js +0 -18426
  196. package/dist/assets/index.91ae2d55.js +0 -1
  197. package/dist/assets/ui.0025be.css +0 -5
  198. package/dist/assets/ui.0025be.js +0 -18534
  199. package/plugins/@vcmap-show-case/category-tester/Categories.vue +0 -291
  200. package/plugins/@vcmap-show-case/category-tester/Category.vue +0 -164
  201. package/src/manager/categoryManager/CategoryComponentList.vue +0 -82
  202. package/src/manager/categoryManager/CategoryManager.vue +0 -47
  203. package/src/manager/categoryManager/categoryManager.js +0 -633
  204. package/start.js +0 -9
  205. /package/{src/assets/favicon-128.png → dist/assets/favicon-128.4c4ce5.png} +0 -0
  206. /package/{src/assets/favicon-180.png → dist/assets/favicon-180.5b99c0.png} +0 -0
  207. /package/{src/assets/favicon-192.png → dist/assets/favicon-192.0e205e.png} +0 -0
  208. /package/{src/assets/favicon-32.png → dist/assets/favicon-32.6b9add.png} +0 -0
  209. /package/dist/assets/{favicon.decf54cc.svg → favicon.d5ec97.svg} +0 -0
  210. /package/dist/assets/font/{TitilliumWeb-Regular.woff2 → TitilliumWeb-Regular.9ca076.woff2} +0 -0
  211. /package/{src → public}/assets/favicon.svg +0 -0
  212. /package/{src → public}/assets/font/OFL.txt +0 -0
  213. /package/{src → public}/assets/font/TitilliumWeb-Regular.woff2 +0 -0
  214. /package/src/{assets/logo-mobile.svg → logo-mobile.svg} +0 -0
  215. /package/src/{assets/logo.svg → logo.svg} +0 -0
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div :class="{ 'win-container-mobile': $vuetify.breakpoint.xs }">
2
+ <div :class="{ 'win-container-mobile': addMobileClass }">
3
3
  <WindowComponent
4
4
  v-for="id in componentIds"
5
5
  :key="id"
@@ -34,21 +34,28 @@
34
34
 
35
35
  <style scoped lang="scss">
36
36
  .win-container-mobile {
37
- position: absolute;
37
+ position: fixed;
38
+ bottom: 56px;
39
+ left: 0;
40
+ right: 0;
38
41
  z-index: 2;
39
- width: 100%;
42
+ display: contents;
40
43
  }
41
44
  .win-container-mobile > {
42
45
  div {
43
46
  width: 100% !important;
47
+ max-width: 100% !important;
44
48
  inset: unset !important;
45
49
  border-radius: 0 !important;
50
+ overflow: auto;
51
+ bottom: 0 !important;
52
+ max-height: 50% !important;
46
53
  }
47
54
  }
48
55
  </style>
49
56
 
50
57
  <script>
51
- import { computed, inject, onUnmounted, ref } from 'vue';
58
+ import { computed, getCurrentInstance, inject, onUnmounted, ref } from 'vue';
52
59
 
53
60
  import WindowComponent from './WindowComponent.vue';
54
61
  import WindowComponentHeader from './WindowComponentHeader.vue';
@@ -125,6 +132,15 @@
125
132
  moveWindow(id, translation, windowManager, targetSize.value);
126
133
  };
127
134
 
135
+ const componentIdRef = ref(componentIds);
136
+
137
+ const addMobileClass = computed(() => {
138
+ return (
139
+ getCurrentInstance().proxy.$vuetify.breakpoint.xs &&
140
+ componentIdRef.value.length > 0
141
+ );
142
+ });
143
+
128
144
  const setTargetSize = () => {
129
145
  targetSize.value = getTargetSize(app.maps.target);
130
146
  };
@@ -138,7 +154,7 @@
138
154
  });
139
155
 
140
156
  return {
141
- componentIds: ref(componentIds),
157
+ componentIds: componentIdRef,
142
158
  getComponent: (id) => windowManager.get(id).component,
143
159
  getHeaderComponent: (id) =>
144
160
  windowManager.get(id).headerComponent || WindowComponentHeader,
@@ -155,6 +171,7 @@
155
171
  },
156
172
  bringWindowToTop,
157
173
  move,
174
+ addMobileClass,
158
175
  };
159
176
  },
160
177
  };
@@ -25,6 +25,7 @@
25
25
  </v-row>
26
26
  <v-row justify="center">
27
27
  <OrientationToolsButton
28
+ v-if="showOverviewButton"
28
29
  :icon="overviewAction.icon"
29
30
  :tooltip="overviewAction.title"
30
31
  :color="overviewAction.active ? 'primary' : undefined"
@@ -43,7 +44,10 @@
43
44
  createGoToViewpointAction,
44
45
  createOverviewMapAction,
45
46
  } from '../actions/actionHelper.js';
46
- import { getWindowComponentOptions } from './overviewMap.js';
47
+ import {
48
+ getWindowComponentOptions,
49
+ overviewMapLayerSymbol,
50
+ } from './overviewMap.js';
47
51
  import VcsCompass from './vcsCompass.vue';
48
52
  import VcsZoomButton from './vcsZoomButton.vue';
49
53
  import TiltSlider from './tiltSlider.vue';
@@ -205,19 +209,40 @@
205
209
  },
206
210
  });
207
211
 
208
- const { action, destroy } = createOverviewMapAction(
209
- app.overviewMap,
210
- getWindowComponentOptions(),
211
- app.windowManager,
212
+ const { action: overviewAction, destroy: overviewDestroy } =
213
+ createOverviewMapAction(
214
+ app.overviewMap,
215
+ getWindowComponentOptions(),
216
+ app.windowManager,
217
+ );
218
+ const showOverviewButton = ref(
219
+ app.overviewMap.map.layerCollection.size > 0,
212
220
  );
221
+ const overviewMapListeners = [
222
+ app.overviewMap.map.layerCollection.added.addEventListener(() => {
223
+ showOverviewButton.value = true;
224
+ }),
225
+ app.overviewMap.map.layerCollection.removed.addEventListener(() => {
226
+ if (
227
+ [...app.overviewMap.map.layerCollection].filter(
228
+ (l) => !l[overviewMapLayerSymbol],
229
+ ).length < 1 &&
230
+ app.overviewMap.active
231
+ ) {
232
+ app.overviewMap.deactivate();
233
+ showOverviewButton.value = false;
234
+ }
235
+ }),
236
+ ];
213
237
 
214
238
  const { action: homeAction, destroy: homeDestroy } = setupHomeButton(app);
215
239
 
216
240
  onUnmounted(() => {
217
- if (destroy) {
218
- destroy();
241
+ if (overviewDestroy) {
242
+ overviewDestroy();
219
243
  }
220
244
  postRenderHandler();
245
+ overviewMapListeners.forEach((cb) => cb());
221
246
  homeDestroy();
222
247
  });
223
248
 
@@ -237,7 +262,8 @@
237
262
  zoomOut() {
238
263
  zoom(app.maps.activeMap, true);
239
264
  },
240
- overviewAction: reactive(action),
265
+ overviewAction: reactive(overviewAction),
266
+ showOverviewButton,
241
267
  homeAction,
242
268
  };
243
269
  },
@@ -27,6 +27,8 @@ import {
27
27
  import { vcsAppSymbol } from '../pluginHelper.js';
28
28
  import VcsMap from '../application/VcsMap.vue';
29
29
 
30
+ export const overviewMapLayerSymbol = Symbol('overviewMapLayerSymbol');
31
+
30
32
  /**
31
33
  * @returns {WindowComponentOptions}
32
34
  */
@@ -331,7 +333,7 @@ class OverviewMap {
331
333
  const { activeMap } = this._app.maps;
332
334
  if (activeMap instanceof ObliqueMap) {
333
335
  await this._initializeForOblique(activeMap);
334
- } else {
336
+ } else if (activeMap) {
335
337
  await this._initializePostRenderHandler(activeMap);
336
338
  }
337
339
  }
@@ -496,6 +498,7 @@ class OverviewMap {
496
498
  style: obliqueTileStyle,
497
499
  zIndex: 1,
498
500
  });
501
+ this._obliqueTileLayer[overviewMapLayerSymbol] = true;
499
502
 
500
503
  const obliqueImageStyle = new VectorStyleItem({});
501
504
  obliqueImageStyle.style = (feature) => {
@@ -509,10 +512,12 @@ class OverviewMap {
509
512
  projection: mercatorProjection.toJSON(),
510
513
  style: obliqueImageStyle,
511
514
  });
515
+ this._obliqueImageLayer[overviewMapLayerSymbol] = true;
512
516
  this._obliqueSelectedImageLayer = new VectorLayer({
513
517
  projection: mercatorProjection.toJSON(),
514
518
  style: this.obliqueSelectedStyle,
515
519
  });
520
+ this._obliqueSelectedImageLayer[overviewMapLayerSymbol] = true;
516
521
  this._map.layerCollection.add(this._obliqueImageLayer);
517
522
  this._map.layerCollection.add(this._obliqueSelectedImageLayer);
518
523
  this._map.layerCollection.add(this._obliqueTileLayer);
@@ -540,6 +545,7 @@ class OverviewMap {
540
545
  projection: mercatorProjection.toJSON(),
541
546
  zIndex: 50,
542
547
  });
548
+ this._cameraIconLayer[overviewMapLayerSymbol] = true;
543
549
  this._map.layerCollection.add(this._cameraIconLayer);
544
550
  }
545
551
  }
@@ -16,7 +16,6 @@
16
16
  <template #action="{ attrs }">
17
17
  <VcsButton
18
18
  icon="mdi-close"
19
- small
20
19
  v-bind="attrs"
21
20
  @click="notification.open = false"
22
21
  />
@@ -85,6 +85,11 @@ export async function loadPlugin(name, config) {
85
85
  // early escape to bypass module loading for testing, see VcsUiApp.spec.js
86
86
  return null;
87
87
  }
88
+ if (config.version) {
89
+ const moduleUrl = new URL(module, window.location.href);
90
+ moduleUrl.searchParams.set('version', config.version);
91
+ module = moduleUrl.toString();
92
+ }
88
93
 
89
94
  // if (!context.security.isTrustedUrl(module)) { XXX missing pipeline security
90
95
  // getLogger().warning(`suppressed loading of insecure plugin ${module}`);
@@ -13,7 +13,6 @@
13
13
  :actions="item.actions"
14
14
  :block-overflow="true"
15
15
  :overflow-count="2"
16
- small
17
16
  right
18
17
  />
19
18
  </div>
@@ -17,13 +17,11 @@
17
17
  <v-divider class="mt-1 base darken-1" v-if="!!results.length" />
18
18
  <ResultsComponent :query="query" :results="results" />
19
19
  <v-divider v-if="!!results.length" />
20
- <VcsButton
21
- v-if="!!results.length"
22
- class="d-flex pt-1 px-1 justify-end"
23
- @click="zoomToAll"
24
- >
25
- {{ $t('search.zoomToAll') }}
26
- </VcsButton>
20
+ <div v-if="!!results.length" class="d-flex px-2 pt-2 pb-1 justify-end">
21
+ <VcsFormButton @click="zoomToAll" variant="outlined">
22
+ {{ $t('search.zoomToAll') }}
23
+ </VcsFormButton>
24
+ </div>
27
25
  </v-sheet>
28
26
  </template>
29
27
 
@@ -51,11 +49,11 @@
51
49
  import { VSheet, VDivider, VIcon } from 'vuetify/lib';
52
50
  import VcsTextField from '../components/form-inputs-controls/VcsTextField.vue';
53
51
  import ResultsComponent from './resultsComponent.vue';
54
- import VcsButton from '../components/buttons/VcsButton.vue';
52
+ import VcsFormButton from '../components/buttons/VcsFormButton.vue';
55
53
 
56
54
  export default {
57
55
  components: {
58
- VcsButton,
56
+ VcsFormButton,
59
57
  ResultsComponent,
60
58
  VcsTextField,
61
59
  VSheet,
@@ -1,19 +1,3 @@
1
- :root {
2
- --vcs-primary-logo: url('../assets/logo.svg');
3
- --vcs-mobile-logo: url('../assets/logo-mobile.svg');
4
- }
5
-
6
- .company-logo {
7
- background-image: var(--vcs-primary-logo);
8
- height: 36px;
9
- width: 151px;
10
- }
11
- .company-logo-mobile {
12
- background-image: var(--vcs-mobile-logo);
13
- height: 40px;
14
- width: 70px;
15
- }
16
-
17
1
  .v-application .base {
18
2
  background-color: var(--v-base-base) !important;
19
3
  border-color: var(--v-base-base) !important;
@@ -1,4 +1,4 @@
1
- @use 'variables' as *;
1
+ @import 'vcsFont.scss';
2
2
 
3
3
  .v-application {
4
4
  h1,
@@ -14,7 +14,7 @@
14
14
  .caption,
15
15
  .tooltip,
16
16
  p {
17
- font-size: $font-size;
17
+ font-size: $vcs-font-size;
18
18
  &:not(.v-icon) {
19
19
  font-family: 'Titillium Web', sans-serif !important;
20
20
  }
@@ -7,6 +7,14 @@
7
7
  @import './vcsFont';
8
8
  @import './vcsGrid';
9
9
 
10
+ /* latin-ext */
11
+ @font-face {
12
+ font-family: 'Titillium Web';
13
+ font-style: normal;
14
+ font-weight: 400;
15
+ src: url(./assets/font/TitilliumWeb-Regular.woff2) format('woff2');
16
+ }
17
+
10
18
  html.vcs-ui {
11
19
  overflow-x: hidden !important;
12
20
  overflow-y: hidden !important;
@@ -1,23 +1,2 @@
1
- /* latin-ext */
2
- @font-face {
3
- font-family: 'Titillium Web';
4
- font-style: normal;
5
- font-weight: 400;
6
- src: url(../assets/font/TitilliumWeb-Regular.woff2) format('woff2');
7
- unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB,
8
- U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
9
- }
10
- /* latin */
11
- @font-face {
12
- font-family: 'Titillium Web';
13
- font-style: normal;
14
- font-weight: 400;
15
- src: url(../assets/font/TitilliumWeb-Regular.woff2) format('woff2');
16
- unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
17
- U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215,
18
- U+FEFF, U+FFFD;
19
- }
20
-
21
- // fonts
1
+ // fontSize
22
2
  $vcs-font-size: 13px;
23
- // header
package/src/vcsUiApp.js CHANGED
@@ -10,6 +10,7 @@ import {
10
10
  Viewpoint,
11
11
  volatileModuleId,
12
12
  VcsEvent,
13
+ getObjectFromClassRegistry,
13
14
  } from '@vcmap/core';
14
15
  import { getLogger as getLoggerByName } from '@vcsuite/logger';
15
16
  import {
@@ -27,14 +28,19 @@ import { createContentTreeCollection } from './contentTree/contentTreeCollection
27
28
  import { contentTreeClassRegistry } from './contentTree/contentTreeItem.js';
28
29
  import OverviewMap from './navigation/overviewMap.js';
29
30
  import I18nCollection from './i18n/i18nCollection.js';
30
- import CategoryManager from './manager/categoryManager/categoryManager.js';
31
+ import CategoryManager from './manager/collectionManager/categoryManager.js';
31
32
  import ContextMenuManager from './manager/contextMenu/contextMenuManager.js';
32
- import FeatureInfo from './featureInfo/featureInfo.js';
33
+ import FeatureInfo, {
34
+ featureInfoClassRegistry,
35
+ } from './featureInfo/featureInfo.js';
33
36
  import UiConfig from './uiConfig.js';
34
37
  import { createEmptyState, getStateFromURL } from './state.js';
35
38
  import { version } from '../package.json';
36
39
  import Search from './search/search.js';
37
40
  import Notifier from './notifier/notifier.js';
41
+ import AbstractFeatureInfoView from './featureInfo/abstractFeatureInfoView.js';
42
+ import { createVueI18n, setupI18n } from './vuePlugins/i18n.js';
43
+ import { callbackClassRegistry } from './callback/vcsCallback.js';
38
44
 
39
45
  /**
40
46
  * @typedef {import("@vcmap/core").VcsModuleConfig} VcsUiModuleConfig
@@ -176,7 +182,15 @@ class VcsUiApp extends VcsApp {
176
182
  ];
177
183
 
178
184
  /**
179
- * @type {OverrideClassRegistry<ContentTreeItem>}
185
+ * @type {OverrideClassRegistry<VcsCallbackItem>}
186
+ * @private
187
+ */
188
+ this._callbackClassRegistry = new OverrideClassRegistry(
189
+ callbackClassRegistry,
190
+ );
191
+
192
+ /**
193
+ * @type {import("@vcmap/core").OverrideClassRegistry<ContentTreeItem>}
180
194
  * @private
181
195
  */
182
196
  this._contentTreeClassRegistry = new OverrideClassRegistry(
@@ -212,10 +226,24 @@ class VcsUiApp extends VcsApp {
212
226
  */
213
227
  this._uiConfig = new UiConfig(() => this.dynamicModuleId);
214
228
  /**
215
- * @type {FeatureInfo}
229
+ * @type {import("@vcmap/core").OverrideClassRegistry<AbstractFeatureInfoView>}
230
+ * @private
231
+ */
232
+ this._featureInfoClassRegistry = new OverrideClassRegistry(
233
+ featureInfoClassRegistry,
234
+ );
235
+ /**
236
+ * @type {import("@vcmap/core").OverrideCollection<AbstractFeatureInfoView>}
216
237
  * @private
217
238
  */
218
- this._featureInfo = new FeatureInfo(this);
239
+ this._featureInfo = makeOverrideCollection(
240
+ new FeatureInfo(this),
241
+ () => this.dynamicModuleId,
242
+ null,
243
+ (config) =>
244
+ getObjectFromClassRegistry(this._featureInfoClassRegistry, config),
245
+ AbstractFeatureInfoView,
246
+ );
219
247
 
220
248
  /**
221
249
  * @type {OverviewMap}
@@ -229,6 +257,19 @@ class VcsUiApp extends VcsApp {
229
257
  */
230
258
  this._i18n = new I18nCollection(() => this.dynamicModuleId);
231
259
 
260
+ /**
261
+ *
262
+ * @type {import("vue-i18n").VueI18n}
263
+ * @private
264
+ */
265
+ this._vueI18n = createVueI18n();
266
+ /**
267
+ *
268
+ * @type {function(): void}
269
+ * @private
270
+ */
271
+ this._vueI18nDestroy = setupI18n(this);
272
+
232
273
  /**
233
274
  * @type {CategoryManager}
234
275
  * @private
@@ -283,13 +324,29 @@ class VcsUiApp extends VcsApp {
283
324
  }
284
325
 
285
326
  /**
286
- * @type {OverrideClassRegistry<ContentTreeItem>}
327
+ * @type {import("@vcmap/core").OverrideClassRegistry<VcsCallback>}
328
+ * @readonly
329
+ */
330
+ get callbackClassRegistry() {
331
+ return this._callbackClassRegistry;
332
+ }
333
+
334
+ /**
335
+ * @type {import("@vcmap/core").OverrideClassRegistry<ContentTreeItem>}
287
336
  * @readonly
288
337
  */
289
338
  get contentTreeClassRegistry() {
290
339
  return this._contentTreeClassRegistry;
291
340
  }
292
341
 
342
+ /**
343
+ * @type {import("@vcmap/core").OverrideClassRegistry<AbstractFeatureInfoView>}
344
+ * @readonly
345
+ */
346
+ get featureInfoClassRegistry() {
347
+ return this._featureInfoClassRegistry;
348
+ }
349
+
293
350
  /**
294
351
  * @returns {ToolboxManager}
295
352
  * @readonly
@@ -338,6 +395,14 @@ class VcsUiApp extends VcsApp {
338
395
  return this._i18n;
339
396
  }
340
397
 
398
+ /**
399
+ * @returns {import("vue-i18n").VueI18n}
400
+ * @readonly
401
+ */
402
+ get vueI18n() {
403
+ return this._vueI18n;
404
+ }
405
+
341
406
  /**
342
407
  * @returns {CategoryManager}
343
408
  * @readonly
@@ -483,10 +548,7 @@ class VcsUiApp extends VcsApp {
483
548
  await super._parseModule(module);
484
549
  await this._contentTree.parseItems(config.contentTree, module._id);
485
550
  await this._uiConfig.parseItems(config.uiConfig, module._id);
486
- await this._featureInfo.collection.parseItems(
487
- config.featureInfo,
488
- module._id,
489
- );
551
+ await this._featureInfo.parseItems(config.featureInfo, module._id);
490
552
  }
491
553
 
492
554
  /**
@@ -553,7 +615,7 @@ class VcsUiApp extends VcsApp {
553
615
  serializeModule(moduleId) {
554
616
  const config = super.serializeModule(moduleId);
555
617
  config.uiConfig = this._uiConfig.serializeModule(moduleId);
556
- config.featureInfo = this._featureInfo.collection.serializeModule(moduleId);
618
+ config.featureInfo = this._featureInfo.serializeModule(moduleId);
557
619
  config.i18n = this._i18n.serializeModule(moduleId);
558
620
  config.plugins = this._plugins.serializeModule(moduleId);
559
621
  return config;
@@ -570,7 +632,7 @@ class VcsUiApp extends VcsApp {
570
632
  this._plugins.removeModule(moduleId),
571
633
  this._i18n.removeModule(moduleId),
572
634
  this._contentTree.removeModule(moduleId),
573
- this._featureInfo.collection.removeModule(moduleId),
635
+ this._featureInfo.removeModule(moduleId),
574
636
  this._uiConfig.removeModule(moduleId),
575
637
  ]);
576
638
  }
@@ -593,7 +655,9 @@ class VcsUiApp extends VcsApp {
593
655
  destroyCollection(this._contentTree);
594
656
  destroyCollection(this._i18n);
595
657
  destroyCollection(this._search);
658
+ this._vueI18nDestroy();
596
659
  this._contentTreeClassRegistry.destroy();
660
+ this._featureInfoClassRegistry.destroy();
597
661
  this._featureInfo.destroy();
598
662
  this._uiConfig.destroy();
599
663
  super.destroy();
@@ -9,10 +9,10 @@ Vue.use(VueI18n);
9
9
 
10
10
  /**
11
11
  * creates a new VueI18n Instance.
12
- * @returns {VueI18n}
12
+ * @returns {import("vue-i18n").VueI18n}
13
13
  */
14
14
  export function createVueI18n() {
15
- const i18n = new VueI18n({
15
+ return new VueI18n({
16
16
  locale: 'en',
17
17
  silentFallbackWarn: true,
18
18
  silentTranslationWarn: true,
@@ -22,44 +22,43 @@ export function createVueI18n() {
22
22
  },
23
23
  postTranslation: (val, key) => (typeof val === 'string' ? val : key),
24
24
  });
25
- return i18n;
26
25
  }
27
26
 
28
27
  /**
29
- * sets the messages to the given I18n Instance;
30
- * @param {Object} messages
31
- * @param {VueI18n} i18n
28
+ * sets the messages to the app's I18n Instance;
29
+ * @param {VcsUiApp} app
32
30
  */
33
- function setI18n(messages, i18n) {
34
- i18n.availableLocales.forEach((locale) => {
35
- i18n.setLocaleMessage(locale, undefined);
36
- });
37
- Object.entries(messages).forEach(([locale, localeMessages]) => {
38
- i18n.setLocaleMessage(locale, localeMessages);
31
+ function setI18nMessages(app) {
32
+ app.vueI18n.availableLocales.forEach((locale) => {
33
+ app.vueI18n.setLocaleMessage(locale, undefined);
39
34
  });
35
+ Object.entries(app.i18n.getMergedMessages()).forEach(
36
+ ([locale, localeMessages]) => {
37
+ app.vueI18n.setLocaleMessage(locale, localeMessages);
38
+ },
39
+ );
40
40
  }
41
41
 
42
42
  /**
43
43
  * @param {VcsUiApp} app
44
- * @param {VueI18n} i18n
45
44
  * @returns {function():void} returns a destroy function
46
45
  */
47
- export function setupI18n(app, i18n) {
46
+ export function setupI18n(app) {
48
47
  const defaultMessages = { name: 'default', en, de };
49
48
  defaultMessages[i18nPluginSymbol] = vcsAppSymbol;
50
49
  app.i18n.add(defaultMessages);
51
50
 
52
- setI18n(app.i18n.getMergedMessages(), i18n);
53
- i18n.locale = app.locale;
51
+ setI18nMessages(app);
52
+ app.vueI18n.locale = app.locale;
54
53
  const destroyFunctions = [
55
54
  app.i18n.added.addEventListener(() => {
56
- setI18n(app.i18n.getMergedMessages(), i18n);
55
+ setI18nMessages(app);
57
56
  }),
58
57
  app.i18n.removed.addEventListener(() => {
59
- setI18n(app.i18n.getMergedMessages(), i18n);
58
+ setI18nMessages(app);
60
59
  }),
61
60
  app.localeChanged.addEventListener((locale) => {
62
- i18n.locale = locale;
61
+ app.vueI18n.locale = locale;
63
62
  }),
64
63
  ];
65
64
  return function tearDownI18nSetup() {
@@ -1,4 +1,3 @@
1
- import '@mdi/font/css/materialdesignicons.css';
2
1
  import Vue from 'vue';
3
2
  import Vuetify from 'vuetify/lib';
4
3
  import { genVariations } from 'vuetify/lib/services/theme/utils.js';