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

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.1457fa.js} +58656 -33170
  82. package/dist/assets/cesium.js +1 -1
  83. package/dist/assets/core.47836f.js +19060 -0
  84. package/dist/assets/core.js +1 -1
  85. package/dist/assets/index-bb372634.js +1 -0
  86. package/dist/assets/{ol.1c946a.js → ol.9e4d23.js} +27344 -12118
  87. package/dist/assets/ol.js +1 -1
  88. package/dist/assets/ui.6ed89d.css +5 -0
  89. package/dist/assets/ui.6ed89d.js +13461 -0
  90. package/dist/assets/ui.js +1 -1
  91. package/dist/assets/{vue.c1ece7.js → vue.7327e4.js} +834 -598
  92. package/dist/assets/vue.js +2 -2
  93. package/dist/assets/{vuetify.6efa21.css → vuetify.d2131d.css} +1 -1
  94. package/dist/assets/{vuetify.6efa21.js → vuetify.d2131d.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 +17 -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/public/assets/logo-mobile.svg +9 -0
  129. package/public/assets/logo.svg +26 -0
  130. package/src/application/VcsApp.vue +34 -5
  131. package/src/application/VcsAttributions.vue +20 -5
  132. package/src/application/VcsAttributionsFooter.vue +0 -1
  133. package/src/application/VcsNavbar.vue +18 -13
  134. package/src/callback/activateLayersCallback.js +54 -0
  135. package/src/callback/applyLayerStyleCallback.js +63 -0
  136. package/src/callback/deactivateLayersCallback.js +54 -0
  137. package/src/callback/goToViewpointCallback.js +54 -0
  138. package/src/callback/vcsCallback.js +66 -0
  139. package/src/components/buttons/VcsActionButtonList.vue +28 -10
  140. package/src/components/buttons/VcsButton.vue +38 -100
  141. package/src/components/buttons/VcsFormButton.vue +6 -4
  142. package/src/components/buttons/VcsToolButton.vue +161 -0
  143. package/src/components/form-inputs-controls/VcsDatePicker.vue +19 -5
  144. package/src/components/form-inputs-controls/VcsFormSection.vue +0 -1
  145. package/src/components/form-inputs-controls/VcsSelect.vue +16 -2
  146. package/src/components/form-inputs-controls/VcsSlider.vue +72 -0
  147. package/src/components/form-inputs-controls/VcsTextField.vue +24 -13
  148. package/src/components/form-inputs-controls/VcsWizard.vue +13 -14
  149. package/src/components/form-inputs-controls/VcsWizardStep.vue +0 -1
  150. package/src/components/lists/VcsList.vue +3 -2
  151. package/src/components/lists/VcsTreeviewLeaf.vue +0 -1
  152. package/src/components/tables/VcsDataTable.vue +2 -4
  153. package/src/contentTree/LayerTree.vue +15 -9
  154. package/src/contentTree/contentTreeCollection.js +1 -1
  155. package/src/contentTree/contentTreeItem.js +22 -3
  156. package/src/contentTree/groupContentTreeItem.js +1 -0
  157. package/src/contentTree/layerContentTreeItem.js +4 -14
  158. package/src/contentTree/layerGroupContentTreeItem.js +4 -14
  159. package/src/contentTree/obliqueCollectionContentTreeItem.js +4 -0
  160. package/src/contentTree/viewpointContentTreeItem.js +1 -0
  161. package/src/featureInfo/BalloonComponent.vue +0 -1
  162. package/src/featureInfo/abstractFeatureInfoView.js +16 -1
  163. package/src/featureInfo/featureInfo.js +45 -56
  164. package/src/i18n/de.js +5 -2
  165. package/src/i18n/en.js +5 -2
  166. package/src/i18n/i18nCollection.js +1 -2
  167. package/src/init.js +1 -4
  168. package/src/legend/vcsLegend.vue +1 -1
  169. package/src/manager/buttonManager.js +15 -0
  170. package/src/manager/{categoryManager/CategoryComponent.vue → collectionManager/CollectionComponent.vue} +57 -66
  171. package/src/manager/collectionManager/CollectionComponentList.vue +62 -0
  172. package/src/manager/collectionManager/CollectionComponentProvider.vue +38 -0
  173. package/src/manager/collectionManager/CollectionManager.vue +43 -0
  174. package/src/manager/collectionManager/categoryManager.js +83 -0
  175. package/src/manager/collectionManager/collectionComponent.js +453 -0
  176. package/src/manager/collectionManager/collectionManager.js +432 -0
  177. package/src/manager/navbarManager.js +5 -4
  178. package/src/manager/toolbox/GroupToolboxComponent.vue +5 -7
  179. package/src/manager/toolbox/SelectToolboxComponent.vue +6 -9
  180. package/src/manager/toolbox/ToolboxManager.vue +4 -5
  181. package/src/manager/window/WindowComponentHeader.vue +0 -4
  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 +2 -2
  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/assets/logo-mobile.svg → dist/assets/logo-mobile.2d10a6.svg} +0 -0
  212. /package/{src/assets/logo.svg → dist/assets/logo.27089a.svg} +0 -0
  213. /package/{src → public}/assets/favicon.svg +0 -0
  214. /package/{src → public}/assets/font/OFL.txt +0 -0
  215. /package/{src → public}/assets/font/TitilliumWeb-Regular.woff2 +0 -0
@@ -18,9 +18,9 @@
18
18
  @blur="onBlur"
19
19
  @keydown.esc="onEscape"
20
20
  @keydown="$emit('keydown', $event)"
21
- :value="visibleValue"
22
21
  :type="type"
23
22
  outlined
23
+ v-model="visibleValue"
24
24
  v-bind="{ ...$attrs, ...attrs }"
25
25
  v-on="{ ...$listeners, ...on }"
26
26
  :height="isDense ? 24 : 32"
@@ -127,6 +127,12 @@
127
127
  .v-text-field__suffix {
128
128
  padding-left: 4px;
129
129
  }
130
+ .v-input__prepend-outer {
131
+ margin-right: 4px;
132
+ }
133
+ .v-icon {
134
+ font-size: 16px;
135
+ }
130
136
  fieldset {
131
137
  border-radius: 2px;
132
138
  border-color: var(--v-base-base);
@@ -212,18 +218,23 @@
212
218
  !(attrs.disabled || attrs.disabled === '')
213
219
  );
214
220
  });
215
- const visibleValue = computed(() => {
216
- if (
217
- attrs.type === 'number' &&
218
- attrs.value &&
219
- props.unit &&
220
- !focus.value &&
221
- !hover.value
222
- ) {
223
- return `${attrs.value} ${props.unit}`;
224
- } else {
225
- return attrs.value || '';
226
- }
221
+ const visibleValue = computed({
222
+ get() {
223
+ if (
224
+ attrs.type === 'number' &&
225
+ attrs.value &&
226
+ props.unit &&
227
+ !focus.value &&
228
+ !hover.value
229
+ ) {
230
+ return `${attrs.value} ${props.unit}`;
231
+ } else {
232
+ return attrs.value ?? '';
233
+ }
234
+ },
235
+ set(event) {
236
+ emit('input', event);
237
+ },
227
238
  });
228
239
  const type = computed(() => {
229
240
  if (attrs.type === 'number' && !focus.value) {
@@ -3,7 +3,7 @@
3
3
  vertical
4
4
  :value="value"
5
5
  @change="(newValue) => $emit('input', newValue)"
6
- class="rounded-0"
6
+ class="rounded-0 pb-1"
7
7
  >
8
8
  <slot />
9
9
  </v-stepper>
@@ -41,15 +41,15 @@
41
41
  .v-stepper__label {
42
42
  color: map-get($shades, 'black');
43
43
  }
44
- &--active {
45
- background-color: rgba(34, 34, 34, 0.1);
44
+ &--complete {
46
45
  .v-stepper__label {
47
- color: var(--v-primary-base);
46
+ color: map-get($shades, 'black');
48
47
  }
49
48
  }
50
- &--complete {
49
+ &--active {
50
+ background-color: rgba(34, 34, 34, 0.1);
51
51
  .v-stepper__label {
52
- color: map-get($shades, 'black');
52
+ color: var(--v-primary-base);
53
53
  }
54
54
  }
55
55
  .v-stepper__step__step::before {
@@ -68,15 +68,15 @@
68
68
  .v-stepper__label {
69
69
  color: map-get($shades, 'white');
70
70
  }
71
- &--active {
72
- background-color: rgba(255, 255, 255, 0.17);
71
+ &--complete {
73
72
  .v-stepper__label {
74
- color: var(--v-primary-base);
73
+ color: map-get($shades, 'white');
75
74
  }
76
75
  }
77
- &--complete {
76
+ &--active {
77
+ background-color: rgba(255, 255, 255, 0.17);
78
78
  .v-stepper__label {
79
- color: map-get($shades, 'white');
79
+ color: var(--v-primary-base);
80
80
  }
81
81
  }
82
82
  .v-stepper__step__step {
@@ -113,7 +113,6 @@
113
113
  color: transparent;
114
114
  position: relative;
115
115
  margin-top: 1px;
116
- margin-right: 5px;
117
116
  &:before {
118
117
  content: '\25cf';
119
118
  font-size: 18px;
@@ -130,8 +129,8 @@
130
129
  }
131
130
  }
132
131
  }
133
- .v-stepper__content.v-stepper__wrapper {
134
- margin: 4px 0;
132
+ .v-stepper__content .v-stepper__wrapper {
133
+ margin: 4px 0 4px 4px;
135
134
  }
136
135
  }
137
136
  }
@@ -16,7 +16,6 @@
16
16
  v-if="Number(step) === Number(value)"
17
17
  :actions="actions"
18
18
  :overflow-count="actionButtonListOverflowCount"
19
- small
20
19
  @mousedown.stop
21
20
  @touchstart.stop
22
21
  @keydown.stop
@@ -41,7 +41,6 @@
41
41
  :actions="actions"
42
42
  :block-overflow="true"
43
43
  :overflow-count="actionButtonListOverflowCount"
44
- small
45
44
  />
46
45
  </v-list-item-content>
47
46
  </v-list-item>
@@ -109,7 +108,6 @@
109
108
  :actions="item.actions"
110
109
  :block-overflow="true"
111
110
  :overflow-count="actionButtonListOverflowCount"
112
- small
113
111
  />
114
112
  </v-list-item-action>
115
113
  </v-list-item>
@@ -565,6 +563,9 @@
565
563
  .v-icon {
566
564
  font-size: 16px;
567
565
  }
566
+ &:last-child {
567
+ min-width: auto;
568
+ }
568
569
  }
569
570
  .v-list-item__content {
570
571
  flex-wrap: nowrap;
@@ -25,7 +25,6 @@
25
25
  :actions="item.actions"
26
26
  :block-overflow="true"
27
27
  :overflow-count="3"
28
- small
29
28
  right
30
29
  class="col-4 pa-0 d-flex align-center"
31
30
  />
@@ -83,7 +83,7 @@
83
83
  <v-row dense no-gutters justify="center" class="align-center">
84
84
  <v-menu offset-y dense>
85
85
  <template #activator="{ on, attrs }">
86
- <VcsButton small color="primary" v-bind="attrs" v-on="on">
86
+ <VcsButton color="primary" v-bind="attrs" v-on="on">
87
87
  {{ itemsPerPageRef }}
88
88
  <v-icon>mdi-chevron-down</v-icon>
89
89
  </VcsButton>
@@ -107,7 +107,6 @@
107
107
  {{ $t('components.vcsDataTable.ofItems') }} {{ numberOfItems }}
108
108
  </span>
109
109
  <VcsButton
110
- small
111
110
  icon="mdi-chevron-left"
112
111
  @click="formerPage"
113
112
  tooltip="components.vcsDataTable.formerPage"
@@ -115,7 +114,6 @@
115
114
  class="ml-1"
116
115
  />
117
116
  <VcsButton
118
- small
119
117
  icon="mdi-chevron-right"
120
118
  @click="nextPage"
121
119
  tooltip="components.vcsDataTable.nextPage"
@@ -375,7 +373,7 @@
375
373
  }
376
374
  }
377
375
 
378
- .v-btn.vcs-button--small {
376
+ .v-btn.vcs-button {
379
377
  height: 100% !important;
380
378
  display: block;
381
379
  }
@@ -1,16 +1,22 @@
1
1
  <template>
2
- <VcsTreeview
3
- v-if="tree && tree.length"
4
- :items="tree"
5
- :open.sync="open"
6
- :show-searchbar="true"
7
- :searchbar-placeholder="'content.search.placeholder'"
8
- item-children="visibleChildren"
9
- />
2
+ <div>
3
+ <VcsTreeview
4
+ v-if="tree && tree.length"
5
+ :items="tree"
6
+ :open.sync="open"
7
+ :show-searchbar="true"
8
+ :searchbar-placeholder="'content.search.placeholder'"
9
+ item-children="visibleChildren"
10
+ />
11
+ <v-sheet v-else class="ma-2">
12
+ {{ $t('content.empty') }}
13
+ </v-sheet>
14
+ </div>
10
15
  </template>
11
16
 
12
17
  <script>
13
18
  import { inject } from 'vue';
19
+ import { VSheet } from 'vuetify/lib';
14
20
  import VcsTreeview from '../components/lists/VcsTreeview.vue';
15
21
 
16
22
  /**
@@ -19,7 +25,7 @@
19
25
  */
20
26
  export default {
21
27
  name: 'VcsLayerTree',
22
- components: { VcsTreeview },
28
+ components: { VcsTreeview, VSheet },
23
29
  props: {
24
30
  windowState: {
25
31
  type: Object,
@@ -141,7 +141,7 @@ class ContentTreeCollection extends IndexedCollection {
141
141
  );
142
142
 
143
143
  this._app.navbarManager.add(
144
- { id, action },
144
+ { id, action, weight: 100 },
145
145
  vcsAppSymbol,
146
146
  ButtonLocation.CONTENT,
147
147
  );
@@ -7,6 +7,7 @@ import {
7
7
  createStateRefAction,
8
8
  StateActionState,
9
9
  } from '../actions/stateRefAction.js';
10
+ import { executeCallbacks } from '../callback/vcsCallback.js';
10
11
 
11
12
  /**
12
13
  * @typedef {Object} ContentTreeItemOptions
@@ -17,6 +18,9 @@ import {
17
18
  * @property {number} [weight] - optional weighting of the item. higher weights come first.
18
19
  * @property {string} [infoUrl] - optional info url providing link with additional information.
19
20
  * @property {boolean} [initOpen=false] - groups being initially open or not.
21
+ * @property {VcsCallbackOptions} [onClick] - optional callback actions executed on click
22
+ * @property {VcsCallbackOptions} [onActivate] - optional callback actions executed on activation of the item
23
+ * @property {VcsCallbackOptions} [onDeactivate] - optional callback actions executed on deactivation of the item
20
24
  */
21
25
 
22
26
  /**
@@ -157,7 +161,21 @@ class ContentTreeItem {
157
161
  * @type {boolean}
158
162
  */
159
163
  this.initOpen = parseBoolean(options.initOpen, false);
160
-
164
+ /**
165
+ * @type {Array<VcsCallbackOptions>}
166
+ * @protected
167
+ */
168
+ this._onClick = options.onClick ?? [];
169
+ /**
170
+ * @type {Array<VcsCallbackOptions>}
171
+ * @protected
172
+ */
173
+ this._onActivate = options.onActivate ?? [];
174
+ /**
175
+ * @type {Array<VcsCallbackOptions>}
176
+ * @protected
177
+ */
178
+ this._onDeactivate = options.onDeactivate ?? [];
161
179
  /**
162
180
  * @type {VcsEvent<number>}
163
181
  */
@@ -426,8 +444,9 @@ class ContentTreeItem {
426
444
  * A callback called once the item is clicked.
427
445
  * @returns {Promise<void>}
428
446
  */
429
- // eslint-disable-next-line class-methods-use-this,no-empty-function
430
- async clicked() {}
447
+ async clicked() {
448
+ executeCallbacks(this._app, this._onClick);
449
+ }
431
450
 
432
451
  /**
433
452
  * Returns a readonly TreeViewItem used for rendering the current item.
@@ -59,6 +59,7 @@ class GroupContentTreeItem extends ContentTreeItem {
59
59
  }
60
60
 
61
61
  async clicked() {
62
+ await super.clicked();
62
63
  if (this.state === StateActionState.NONE) {
63
64
  return;
64
65
  }
@@ -9,11 +9,11 @@ import component from '../actions/styleSelector.vue';
9
9
  import VcsObjectContentTreeItem from './vcsObjectContentTreeItem.js';
10
10
  import { vcsAppSymbol } from '../pluginHelper.js';
11
11
  import { contentTreeClassRegistry } from './contentTreeItem.js';
12
+ import { executeCallbacks } from '../callback/vcsCallback.js';
12
13
 
13
14
  /**
14
15
  * @typedef {ContentTreeItemOptions} LayerContentTreeItemOptions
15
16
  * @property {string} layerName
16
- * @property {Array<string>} layerNamesToDeactivate list of LayerNames which should be deactivated if the click activates the layer
17
17
  */
18
18
 
19
19
  /**
@@ -86,14 +86,6 @@ class LayerContentTreeItem extends VcsObjectContentTreeItem {
86
86
  */
87
87
  this._layerName = options.layerName;
88
88
 
89
- /**
90
- * @type {Array<string>}
91
- * @private
92
- */
93
- this._layerNamesToDeactivate = Array.isArray(options.layerNamesToDeactivate)
94
- ? options.layerNamesToDeactivate.slice()
95
- : [];
96
-
97
89
  /**
98
90
  * @type {Array<Function>}
99
91
  * @private
@@ -238,15 +230,14 @@ class LayerContentTreeItem extends VcsObjectContentTreeItem {
238
230
  }
239
231
 
240
232
  async clicked() {
233
+ await super.clicked();
241
234
  if (this._layer) {
242
235
  if (this.state === StateActionState.INACTIVE) {
243
236
  await this._layer.activate();
244
- this._layerNamesToDeactivate
245
- .map((n) => this._app.layers.getByKey(n))
246
- .filter((l) => l)
247
- .forEach((l) => l.deactivate());
237
+ executeCallbacks(this._app, this._onActivate);
248
238
  } else {
249
239
  this._layer.deactivate();
240
+ executeCallbacks(this._app, this._onDeactivate);
250
241
  }
251
242
  }
252
243
  }
@@ -257,7 +248,6 @@ class LayerContentTreeItem extends VcsObjectContentTreeItem {
257
248
  toJSON() {
258
249
  const config = super.toJSON();
259
250
  config.layerName = this._layerName;
260
- config.layerNamesToDeactivate = this._layerNamesToDeactivate.slice();
261
251
  return config;
262
252
  }
263
253
 
@@ -6,11 +6,11 @@ import {
6
6
  setViewpointAction,
7
7
  } from './layerContentTreeItem.js';
8
8
  import { StateActionState } from '../actions/stateRefAction.js';
9
+ import { executeCallbacks } from '../callback/vcsCallback.js';
9
10
 
10
11
  /**
11
12
  * @typedef {ContentTreeItemOptions} LayerGroupContentTreeItemOptions
12
13
  * @property {Array<string>} layerNames list of LayerNames which should be activated on click
13
- * @property {Array<string>} layerNamesToDeactivate list of LayerNames which should be deactivated on click if the click activates the layer in layerNames
14
14
  * @property {string} [defaultViewpoint] - the name of an optional default viewpoint
15
15
  */
16
16
 
@@ -63,14 +63,6 @@ class LayerGroupContentTreeItem extends ContentTreeItem {
63
63
  ? options.layerNames.slice()
64
64
  : [];
65
65
 
66
- /**
67
- * @type {Array<string>}
68
- * @private
69
- */
70
- this._layerNamesToDeactivate = Array.isArray(options.layerNamesToDeactivate)
71
- ? options.layerNamesToDeactivate.slice()
72
- : [];
73
-
74
66
  /**
75
67
  * @type {Array<function():void>}
76
68
  * @private
@@ -152,18 +144,17 @@ class LayerGroupContentTreeItem extends ContentTreeItem {
152
144
  * @returns {Promise<void>}
153
145
  */
154
146
  async clicked() {
147
+ await super.clicked();
155
148
  const layers = this._layers;
156
149
  const activate = layers.some((l) => !(l.active || l.loading));
157
150
  if (activate) {
158
151
  await Promise.all(layers.map((l) => l.activate()));
159
- this._layerNamesToDeactivate
160
- .map((n) => this._app.layers.getByKey(n))
161
- .filter((l) => l)
162
- .forEach((l) => l.deactivate());
152
+ executeCallbacks(this._app, this._onActivate);
163
153
  } else {
164
154
  layers.forEach((l) => {
165
155
  l.deactivate();
166
156
  });
157
+ executeCallbacks(this._app, this._onDeactivate);
167
158
  }
168
159
  }
169
160
 
@@ -173,7 +164,6 @@ class LayerGroupContentTreeItem extends ContentTreeItem {
173
164
  toJSON() {
174
165
  const config = super.toJSON();
175
166
  config.layerNames = this._layerNames.slice();
176
- config.layerNamesToDeactivate = this._layerNamesToDeactivate.slice();
177
167
  if (this._defaultViewpoint) {
178
168
  config.defaultViewpoint = this._defaultViewpoint;
179
169
  }
@@ -3,6 +3,7 @@ import VcsObjectContentTreeItem from './vcsObjectContentTreeItem.js';
3
3
  import { setViewpointAction } from './layerContentTreeItem.js';
4
4
  import { StateActionState } from '../actions/stateRefAction.js';
5
5
  import { contentTreeClassRegistry } from './contentTreeItem.js';
6
+ import { executeCallbacks } from '../callback/vcsCallback.js';
6
7
 
7
8
  /**
8
9
  * @typedef {ContentTreeItemOptions} ObliqueCollectionContentTreeItemOptions
@@ -139,6 +140,7 @@ class ObliqueCollectionContentTreeItem extends VcsObjectContentTreeItem {
139
140
  }
140
141
 
141
142
  async clicked() {
143
+ await super.clicked();
142
144
  if (
143
145
  this.visible &&
144
146
  this._collection &&
@@ -151,9 +153,11 @@ class ObliqueCollectionContentTreeItem extends VcsObjectContentTreeItem {
151
153
  if (this.state === StateActionState.INACTIVE) {
152
154
  this.state = StateActionState.LOADING;
153
155
  await map.setCollection(this._collection, vp);
156
+ executeCallbacks(this._app, this._onActivate);
154
157
  } else if (this.state === StateActionState.ACTIVE) {
155
158
  this.state = StateActionState.INACTIVE;
156
159
  await map.setCollection(defaultCollection, vp);
160
+ executeCallbacks(this._app, this._onDeactivate);
157
161
  }
158
162
  }
159
163
  }
@@ -89,6 +89,7 @@ class ViewpointContentTreeItem extends VcsObjectContentTreeItem {
89
89
  }
90
90
 
91
91
  async clicked() {
92
+ await super.clicked();
92
93
  if (this._app.maps.activeMap && this.viewpoint) {
93
94
  await this._app.maps.activeMap.gotoViewpoint(this.viewpoint);
94
95
  }
@@ -17,7 +17,6 @@
17
17
  </v-list-item-content>
18
18
  <VcsButton
19
19
  @click.stop="close"
20
- small
21
20
  icon="mdi-close-thick"
22
21
  tooltip="components.close"
23
22
  class="d-flex"
@@ -172,6 +172,21 @@ export function applyAttributeFilter(attributes, keys, result = {}) {
172
172
  return result;
173
173
  }
174
174
 
175
+ /**
176
+ * Filters all olcs attributes, not provided as keys
177
+ * @param {Object<string, *>} attributes
178
+ * @param {Array<string>} keys
179
+ * @returns {Object}
180
+ */
181
+ export function applyOlcsAttributeFilter(attributes, keys = []) {
182
+ return Object.keys(attributes)
183
+ .filter((key) => keys.includes(key) || !/^olcs_/.test(key))
184
+ .reduce((obj, key) => {
185
+ obj[key] = attributes[key];
186
+ return obj;
187
+ }, {});
188
+ }
189
+
175
190
  /**
176
191
  * Abstract class to be extended by FeatureInfoView classes
177
192
  * Subclasses must always provide a component and may overwrite class methods.
@@ -265,7 +280,7 @@ class AbstractFeatureInfoView extends VcsObject {
265
280
  if (this.keyMapping) {
266
281
  applyKeyMapping(attributes, this.keyMapping);
267
282
  }
268
- return attributes;
283
+ return applyOlcsAttributeFilter(attributes, this.attributeKeys);
269
284
  }
270
285
 
271
286
  /**
@@ -1,11 +1,8 @@
1
1
  import {
2
2
  EventType,
3
- makeOverrideCollection,
4
3
  Collection,
5
- getObjectFromClassRegistry,
6
4
  VcsEvent,
7
5
  vcsLayerName,
8
- OverrideClassRegistry,
9
6
  ClassRegistry,
10
7
  fromCesiumColor,
11
8
  VectorLayer,
@@ -155,23 +152,49 @@ function setupFeatureInfoTool(app) {
155
152
  },
156
153
  };
157
154
 
158
- if (app.uiConfig.getByKey('startingFeatureInfo')?.value !== false) {
159
- action.callback();
155
+ function addFeatureInfoButton() {
156
+ if (app.uiConfig.getByKey('startingFeatureInfo')?.value !== false) {
157
+ action.callback();
158
+ }
159
+ app.toolboxManager.add(
160
+ {
161
+ id: 'featureInfo',
162
+ type: ToolboxType.SINGLE,
163
+ action,
164
+ },
165
+ vcsAppSymbol,
166
+ );
160
167
  }
161
- app.toolboxManager.add(
162
- {
163
- id: 'featureInfo',
164
- type: ToolboxType.SINGLE,
165
- action,
166
- },
167
- vcsAppSymbol,
168
- );
168
+
169
+ if ([...app.layers].some((l) => l.properties?.featureInfo)) {
170
+ addFeatureInfoButton();
171
+ }
172
+
173
+ const listeners = [
174
+ app.layers.added.addEventListener((layer) => {
175
+ if (
176
+ layer?.properties?.featureInfo &&
177
+ !app.toolboxManager.has('featureInfo')
178
+ ) {
179
+ addFeatureInfoButton();
180
+ }
181
+ }),
182
+ app.layers.removed.addEventListener(() => {
183
+ if (
184
+ ![...app.layers].some((l) => l.properties?.featureInfo) &&
185
+ app.toolboxManager.has('featureInfo')
186
+ ) {
187
+ app.toolboxManager.remove('featureInfo');
188
+ }
189
+ }),
190
+ ];
169
191
 
170
192
  return () => {
171
193
  if (session) {
172
194
  session.stop();
173
195
  }
174
196
  app.toolboxManager.remove('featureInfo');
197
+ listeners.forEach((cb) => cb());
175
198
  };
176
199
  }
177
200
 
@@ -194,37 +217,22 @@ export const featureInfoViewSymbol = Symbol('featureInfoView');
194
217
 
195
218
  /**
196
219
  * @class FeatureInfo
197
- * @description Provides registration of featureInfoClasses and stores featureInfoView instances in its collection.
220
+ * @description Provides registration of featureInfoClasses and stores featureInfoView instances.
221
+ * @extends {Collection<AbstractFeatureInfoView>}
222
+ * @implements {import("@vcmap/core").OverrideCollectionInterface<AbstractFeatureInfoView>}
198
223
  */
199
- class FeatureInfo {
224
+ class FeatureInfo extends Collection {
200
225
  /**
201
226
  * @param {VcsUiApp} app
202
227
  */
203
228
  constructor(app) {
229
+ super();
230
+
204
231
  /**
205
232
  * @type {VcsUiApp}
206
233
  * @private
207
234
  */
208
235
  this._app = app;
209
- /**
210
- * @type {import("@vcmap/core").OverrideCollection<AbstractFeatureInfoView>}
211
- * @private
212
- */
213
- this._collection = makeOverrideCollection(
214
- new Collection(),
215
- () => this._app.dynamicModuleId,
216
- null,
217
- (config) =>
218
- getObjectFromClassRegistry(this._featureInfoClassRegistry, config),
219
- AbstractFeatureInfoView,
220
- );
221
- /**
222
- * @type {OverrideClassRegistry<AbstractFeatureInfoView>}
223
- * @private
224
- */
225
- this._featureInfoClassRegistry = new OverrideClassRegistry(
226
- featureInfoClassRegistry,
227
- );
228
236
  /**
229
237
  * @type {function():void|null}
230
238
  * @private
@@ -301,22 +309,6 @@ class FeatureInfo {
301
309
  this._destroyFeatureInfoTool = setupFeatureInfoTool(this._app);
302
310
  }
303
311
 
304
- /**
305
- * @type {import("@vcmap/core").OverrideCollection<AbstractFeatureInfoView>}
306
- * @readonly
307
- */
308
- get collection() {
309
- return this._collection;
310
- }
311
-
312
- /**
313
- * @type {OverrideClassRegistry<AbstractFeatureInfoView>}
314
- * @readonly
315
- */
316
- get classRegistry() {
317
- return this._featureInfoClassRegistry;
318
- }
319
-
320
312
  /**
321
313
  * @type {VcsEvent<null|FeatureType>}
322
314
  * @readonly
@@ -379,13 +371,11 @@ class FeatureInfo {
379
371
  );
380
372
  return null;
381
373
  }
382
- if (!this._collection.hasKey(name)) {
374
+ if (!this.hasKey(name)) {
383
375
  getLogger().warning(`No view with name '${name}' has been registered.`);
384
376
  return null;
385
377
  }
386
- return /** @type {AbstractFeatureInfoView} */ this._collection.getByKey(
387
- name,
388
- );
378
+ return /** @type {AbstractFeatureInfoView} */ this.getByKey(name);
389
379
  }
390
380
 
391
381
  /**
@@ -502,6 +492,7 @@ class FeatureInfo {
502
492
  * Destroys the feature info and all its events & listeners
503
493
  */
504
494
  destroy() {
495
+ super.destroy();
505
496
  this._clearInternal();
506
497
  this._featureChanged.destroy();
507
498
  this._destroyFeatureInfoTool();
@@ -511,8 +502,6 @@ class FeatureInfo {
511
502
  }
512
503
  this._listeners.forEach((cb) => cb());
513
504
  this._listeners.splice(0);
514
- this._collection.destroy();
515
- this._featureInfoClassRegistry.destroy();
516
505
  }
517
506
  }
518
507