@vcmap/ui 6.0.0-rc.6 → 6.0.0-rc.7

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 (153) hide show
  1. package/config/base.config.json +8 -2
  2. package/dist/assets/cesium/Workers/{chunk-LUYI3XCB.js → chunk-2LOWCAMW.js} +13 -13
  3. package/dist/assets/cesium/Workers/{chunk-V7WJDCPA.js → chunk-2PTKXHJB.js} +10 -10
  4. package/dist/assets/cesium/Workers/{chunk-YFVI4SQI.js → chunk-3HQMMUPU.js} +1 -1
  5. package/dist/assets/cesium/Workers/{chunk-XGI4FRXF.js → chunk-3IFRSGEY.js} +9 -9
  6. package/dist/assets/cesium/Workers/{chunk-4RJH3H6D.js → chunk-44QAAS4P.js} +7 -7
  7. package/dist/assets/cesium/Workers/{chunk-4EW3HFFI.js → chunk-56EDBCGT.js} +10 -10
  8. package/dist/assets/cesium/Workers/{chunk-PRKEY4QK.js → chunk-57H6I3SV.js} +5 -5
  9. package/dist/assets/cesium/Workers/{chunk-X67EJ6X6.js → chunk-6SQMLVGV.js} +54 -7
  10. package/dist/assets/cesium/Workers/{chunk-RRLGJV3Q.js → chunk-7YIOHQWH.js} +13 -13
  11. package/dist/assets/cesium/Workers/{chunk-G6346EDR.js → chunk-7ZZ5LMZY.js} +16 -15
  12. package/dist/assets/cesium/Workers/{chunk-YFYPR4MW.js → chunk-BVKITG4N.js} +7 -7
  13. package/dist/assets/cesium/Workers/{chunk-N5MIFVXJ.js → chunk-C3EQ27WF.js} +6 -6
  14. package/dist/assets/cesium/Workers/{chunk-TLGODPEV.js → chunk-C4WPMOKT.js} +6 -5
  15. package/dist/assets/cesium/Workers/{chunk-DTACCQDR.js → chunk-EDLRS3AW.js} +6 -6
  16. package/dist/assets/cesium/Workers/{chunk-EVU2UNBD.js → chunk-EJVGYGLF.js} +7 -7
  17. package/dist/assets/cesium/Workers/{chunk-FYYT5EVH.js → chunk-FFLMY4TE.js} +5 -5
  18. package/dist/assets/cesium/Workers/{chunk-5OUTANXX.js → chunk-GBT7MJ6X.js} +1 -1
  19. package/dist/assets/cesium/Workers/{chunk-3DRPXHZ4.js → chunk-HJMNR3GC.js} +11 -11
  20. package/dist/assets/cesium/Workers/{chunk-IALQGTA2.js → chunk-HP5XLODI.js} +6 -6
  21. package/dist/assets/cesium/Workers/{chunk-DR7LK6PG.js → chunk-IBRIWOCM.js} +13 -13
  22. package/dist/assets/cesium/Workers/{chunk-WMVCLETM.js → chunk-IZGUQO6Q.js} +13 -13
  23. package/dist/assets/cesium/Workers/{chunk-T6TZXGG5.js → chunk-IZJ42N4W.js} +17 -17
  24. package/dist/assets/cesium/Workers/{chunk-FZDKIUDT.js → chunk-JBSKHTNX.js} +4 -4
  25. package/dist/assets/cesium/Workers/{chunk-S4VTLNAJ.js → chunk-JISPSEF3.js} +4 -4
  26. package/dist/assets/cesium/Workers/{chunk-KNMGSIIN.js → chunk-JSQJDZI4.js} +6 -6
  27. package/dist/assets/cesium/Workers/{chunk-LMTN7R7M.js → chunk-JXVLNVXC.js} +7 -7
  28. package/dist/assets/cesium/Workers/{chunk-A5C2A5O5.js → chunk-KHZNBFOH.js} +7 -7
  29. package/dist/assets/cesium/Workers/{chunk-PIOKSAZH.js → chunk-L5GODJAR.js} +14 -14
  30. package/dist/assets/cesium/Workers/{chunk-Q7PM4W34.js → chunk-LJ2JQHJT.js} +12 -7
  31. package/dist/assets/cesium/Workers/{chunk-D6PDWQXW.js → chunk-LLAF3CPH.js} +2 -2
  32. package/dist/assets/cesium/Workers/{chunk-H7PSTL64.js → chunk-M24KHENR.js} +2 -2
  33. package/dist/assets/cesium/Workers/{chunk-I67V66MN.js → chunk-NDDI2LWR.js} +6 -6
  34. package/dist/assets/cesium/Workers/{chunk-FSXNF76Y.js → chunk-NGZJIN5Z.js} +4 -4
  35. package/dist/assets/cesium/Workers/{chunk-UMX265HW.js → chunk-O72GZTSE.js} +2 -2
  36. package/dist/assets/cesium/Workers/{chunk-WOA6WSHH.js → chunk-OPP2SKMA.js} +12 -12
  37. package/dist/assets/cesium/Workers/{chunk-VD6G7UPU.js → chunk-P6TRGU3S.js} +2 -2
  38. package/dist/assets/cesium/Workers/{chunk-QLC66ZRL.js → chunk-QN6TBED4.js} +11 -11
  39. package/dist/assets/cesium/Workers/{chunk-O7OUBDMZ.js → chunk-QQOZO7KO.js} +7 -7
  40. package/dist/assets/cesium/Workers/{chunk-AGTH5JMJ.js → chunk-RJM36CNY.js} +6 -6
  41. package/dist/assets/cesium/Workers/{chunk-UC566ISB.js → chunk-RTJKHZWU.js} +6 -6
  42. package/dist/assets/cesium/Workers/{chunk-L4XQPD6P.js → chunk-TI3TRKIC.js} +423 -448
  43. package/dist/assets/cesium/Workers/{chunk-3GI7DWF7.js → chunk-TK5IIG2F.js} +4 -4
  44. package/dist/assets/cesium/Workers/{chunk-6DH5PLFD.js → chunk-U5HSOKPQ.js} +1 -1
  45. package/dist/assets/cesium/Workers/{chunk-BPY4HDAK.js → chunk-WGDFYAGC.js} +4 -4
  46. package/dist/assets/cesium/Workers/{chunk-SJC5PRDX.js → chunk-X7IQYYHF.js} +2 -2
  47. package/dist/assets/cesium/Workers/{chunk-4OX4RYLB.js → chunk-XIUSRWL6.js} +9 -5
  48. package/dist/assets/cesium/Workers/{chunk-S2UEXF6T.js → chunk-XWOUPGUF.js} +1 -1
  49. package/dist/assets/cesium/Workers/{chunk-F7IEM66T.js → chunk-YCDZX5LS.js} +1 -1
  50. package/dist/assets/cesium/Workers/{chunk-AVFIYUKX.js → chunk-YK3QIKY7.js} +9 -9
  51. package/dist/assets/cesium/Workers/{chunk-BAJAVGUF.js → chunk-YSIJTJ7N.js} +5 -5
  52. package/dist/assets/cesium/Workers/{chunk-6DXIYFX3.js → chunk-Z2QP3CXW.js} +2 -2
  53. package/dist/assets/cesium/Workers/{chunk-P24I5VUS.js → chunk-ZVUUPJEM.js} +17 -17
  54. package/dist/assets/cesium/Workers/combineGeometry.js +22 -22
  55. package/dist/assets/cesium/Workers/createBoxGeometry.js +16 -16
  56. package/dist/assets/cesium/Workers/createBoxOutlineGeometry.js +14 -14
  57. package/dist/assets/cesium/Workers/createCircleGeometry.js +24 -24
  58. package/dist/assets/cesium/Workers/createCircleOutlineGeometry.js +17 -17
  59. package/dist/assets/cesium/Workers/createCoplanarPolygonGeometry.js +31 -31
  60. package/dist/assets/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +29 -29
  61. package/dist/assets/cesium/Workers/createCorridorGeometry.js +27 -27
  62. package/dist/assets/cesium/Workers/createCorridorOutlineGeometry.js +26 -26
  63. package/dist/assets/cesium/Workers/createCylinderGeometry.js +18 -18
  64. package/dist/assets/cesium/Workers/createCylinderOutlineGeometry.js +16 -16
  65. package/dist/assets/cesium/Workers/createEllipseGeometry.js +24 -24
  66. package/dist/assets/cesium/Workers/createEllipseOutlineGeometry.js +17 -17
  67. package/dist/assets/cesium/Workers/createEllipsoidGeometry.js +17 -17
  68. package/dist/assets/cesium/Workers/createEllipsoidOutlineGeometry.js +16 -16
  69. package/dist/assets/cesium/Workers/createFrustumGeometry.js +16 -16
  70. package/dist/assets/cesium/Workers/createFrustumOutlineGeometry.js +16 -16
  71. package/dist/assets/cesium/Workers/createGeometry.js +22 -22
  72. package/dist/assets/cesium/Workers/createGroundPolylineGeometry.js +20 -20
  73. package/dist/assets/cesium/Workers/createPlaneGeometry.js +14 -14
  74. package/dist/assets/cesium/Workers/createPlaneOutlineGeometry.js +13 -13
  75. package/dist/assets/cesium/Workers/createPolygonGeometry.js +30 -30
  76. package/dist/assets/cesium/Workers/createPolygonOutlineGeometry.js +28 -28
  77. package/dist/assets/cesium/Workers/createPolylineGeometry.js +23 -23
  78. package/dist/assets/cesium/Workers/createPolylineVolumeGeometry.js +29 -29
  79. package/dist/assets/cesium/Workers/createPolylineVolumeOutlineGeometry.js +25 -25
  80. package/dist/assets/cesium/Workers/createRectangleGeometry.js +25 -25
  81. package/dist/assets/cesium/Workers/createRectangleOutlineGeometry.js +18 -18
  82. package/dist/assets/cesium/Workers/createSimplePolylineGeometry.js +21 -21
  83. package/dist/assets/cesium/Workers/createSphereGeometry.js +17 -17
  84. package/dist/assets/cesium/Workers/createSphereOutlineGeometry.js +16 -16
  85. package/dist/assets/cesium/Workers/createTaskProcessorWorker.js +3 -3
  86. package/dist/assets/cesium/Workers/createVectorTileClampedPolylines.js +13 -13
  87. package/dist/assets/cesium/Workers/createVectorTileGeometries.js +22 -22
  88. package/dist/assets/cesium/Workers/createVectorTilePoints.js +12 -12
  89. package/dist/assets/cesium/Workers/createVectorTilePolygons.js +20 -20
  90. package/dist/assets/cesium/Workers/createVectorTilePolylines.js +13 -13
  91. package/dist/assets/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +20 -20
  92. package/dist/assets/cesium/Workers/createVerticesFromHeightmap.js +24 -20
  93. package/dist/assets/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +17 -17
  94. package/dist/assets/cesium/Workers/createWallGeometry.js +22 -22
  95. package/dist/assets/cesium/Workers/createWallOutlineGeometry.js +21 -21
  96. package/dist/assets/cesium/Workers/decodeDraco.js +11 -11
  97. package/dist/assets/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +28 -5
  98. package/dist/assets/cesium/Workers/decodeI3S.js +10 -10
  99. package/dist/assets/cesium/Workers/transcodeKTX2.js +19 -18
  100. package/dist/assets/cesium/Workers/transferTypedArrayTest.js +1 -1
  101. package/dist/assets/cesium/Workers/upsampleQuantizedTerrainMesh.js +20 -20
  102. package/dist/assets/{cesium-ccb4cc30.js → cesium-2afc3568.js} +136600 -136700
  103. package/dist/assets/cesium.js +1 -1
  104. package/dist/assets/{core-e06aa7a6.js → core-3fd82bc2.js} +8348 -7546
  105. package/dist/assets/core.js +1 -1
  106. package/dist/assets/{ol-e7981d5c.js → ol-edf7bfb3.js} +2246 -2248
  107. package/dist/assets/ol.js +1 -1
  108. package/dist/assets/ui-c6eb55a5.css +1 -0
  109. package/dist/assets/{ui-5dda32d2.js → ui-c6eb55a5.js} +2071 -1979
  110. package/dist/assets/ui.js +1 -1
  111. package/dist/assets/vue.js +1 -1
  112. package/dist/assets/{vuetify-4c4e4217.js → vuetify-c3b6c9b3.js} +1 -1
  113. package/dist/assets/vuetify.js +1 -1
  114. package/package.json +3 -3
  115. package/plugins/@vcmap-show-case/form-inputs-example/src/FormInputsExample.vue +2 -2
  116. package/plugins/@vcmap-show-case/project-selector/src/ModulesListComponent.vue +1 -1
  117. package/plugins/@vcmap-show-case/vector-properties-example/src/GeometrySettings.vue +420 -0
  118. package/plugins/@vcmap-show-case/vector-properties-example/src/LayoutHandler.vue +97 -0
  119. package/plugins/@vcmap-show-case/vector-properties-example/src/TerrainSettings.vue +90 -0
  120. package/plugins/@vcmap-show-case/vector-properties-example/src/VectorPropertiesExample.vue +61 -70
  121. package/plugins/@vcmap-show-case/vector-properties-example/src/index.js +34 -1
  122. package/plugins/@vcmap-show-case/vector-properties-example/src/lib.js +294 -0
  123. package/src/actions/StyleSelector.vue +35 -19
  124. package/src/actions/StyleSelector.vue.d.ts +5 -5
  125. package/src/application/VcsApp.vue +3 -7
  126. package/src/application/VcsAttributionsFooter.vue +20 -11
  127. package/src/application/VcsTextPageFooter.vue +4 -4
  128. package/src/components/form-inputs-controls/VcsLabel.vue +31 -8
  129. package/src/components/form-inputs-controls/VcsLabel.vue.d.ts +2 -0
  130. package/src/components/form-inputs-controls/VcsSelect.vue +1 -1
  131. package/src/components/form-inputs-controls/VcsSelect.vue.d.ts +2 -2
  132. package/src/components/lists/VcsTreeview.vue +22 -0
  133. package/src/components/lists/VcsTreeview.vue.d.ts +10 -0
  134. package/src/components/lists/VcsTreeviewTitle.vue +5 -1
  135. package/src/components/vector-properties/VcsFeatureEditingWindow.vue +17 -34
  136. package/src/components/vector-properties/VcsFeatureEditingWindow.vue.d.ts +5 -3
  137. package/src/components/vector-properties/VcsVectorPropertiesComponent.vue +36 -12
  138. package/src/components/vector-properties/VcsVectorPropertiesComponent.vue.d.ts +3 -2
  139. package/src/contentTree/layerContentTreeItem.d.ts +8 -5
  140. package/src/contentTree/layerContentTreeItem.js +48 -34
  141. package/src/contentTree/layerGroupContentTreeItem.d.ts +7 -1
  142. package/src/contentTree/layerGroupContentTreeItem.js +22 -3
  143. package/src/featureInfo/balloonHelper.js +1 -1
  144. package/src/i18n/de.d.ts +5 -0
  145. package/src/i18n/de.js +7 -2
  146. package/src/i18n/en.d.ts +5 -0
  147. package/src/i18n/en.js +6 -1
  148. package/src/navigation/locatorHelper.js +3 -21
  149. package/src/vcsUiApp.d.ts +22 -21
  150. package/src/vcsUiApp.js +19 -19
  151. package/dist/assets/ui-5dda32d2.css +0 -1
  152. /package/dist/assets/{vue-87bc6efe.js → vue-aefad438.js} +0 -0
  153. /package/dist/assets/{vuetify-4c4e4217.css → vuetify-c3b6c9b3.css} +0 -0
@@ -25,8 +25,8 @@
25
25
  :text-page="dataProtection"
26
26
  :window-id="'dataProtectionWindow'"
27
27
  />
28
+ <v-spacer />
28
29
  <VcsAttributionsFooter
29
- class="align-wrapper"
30
30
  :entries="attributionEntries"
31
31
  :attribution-action="attributionAction"
32
32
  />
@@ -38,18 +38,13 @@
38
38
  :deep(.v-application--wrap) {
39
39
  min-height: fit-content;
40
40
  }
41
- .align-wrapper {
42
- position: absolute;
43
- right: 0;
44
- margin-right: 4px !important;
45
- }
46
41
  </style>
47
42
 
48
43
  <script>
49
44
  import { computed, onMounted, onUnmounted, provide, watch, ref } from 'vue';
50
45
  import { useDisplay } from 'vuetify';
51
46
  import { getVcsAppById, moduleIdSymbol } from '@vcmap/core';
52
- import { VContainer, VFooter } from 'vuetify/components';
47
+ import { VContainer, VFooter, VSpacer } from 'vuetify/components';
53
48
  import { getLogger } from '@vcsuite/logger';
54
49
  import VcsContainer from './VcsContainer.vue';
55
50
  import { ButtonLocation } from '../manager/navbarManager.js';
@@ -704,6 +699,7 @@
704
699
  VcsNavbar,
705
700
  VContainer,
706
701
  VFooter,
702
+ VSpacer,
707
703
  },
708
704
  props: {
709
705
  appId: {
@@ -1,15 +1,18 @@
1
1
  <template>
2
- <span class="d-inline-block text-truncate mr-10">
3
- <span
4
- v-for="attribution in mergedAttributions"
5
- class="attribution"
6
- :key="attribution.provider"
7
- >
8
- <a :href="attribution.url" target="_blank">
9
- {{ $st(attribution.provider) }} <span>{{ attribution.years }}</span>
10
- </a>
11
- </span>
2
+ <div class="d-flex align-center justify-end overflow-hidden">
3
+ <div class="attribution-container">
4
+ <span
5
+ v-for="attribution in mergedAttributions"
6
+ class="attribution"
7
+ :key="attribution.provider"
8
+ >
9
+ <a :href="attribution.url" target="_blank">
10
+ {{ $st(attribution.provider) }} <span>{{ attribution.years }}</span>
11
+ </a>
12
+ </span>
13
+ </div>
12
14
  <VcsButton
15
+ class="flex-shrink-0"
13
16
  :key="attributionAction.name"
14
17
  :tooltip="attributionAction.title"
15
18
  :icon="attributionAction.icon"
@@ -17,10 +20,16 @@
17
20
  :disabled="attributionAction.disabled"
18
21
  @click.stop="attributionAction.callback($event)"
19
22
  />
20
- </span>
23
+ </div>
21
24
  </template>
22
25
 
23
26
  <style lang="scss" scoped>
27
+ .attribution-container {
28
+ max-width: 100%;
29
+ white-space: nowrap;
30
+ overflow: hidden;
31
+ text-overflow: ellipsis;
32
+ }
24
33
  .attribution {
25
34
  font-size: smaller;
26
35
  &:before {
@@ -1,6 +1,6 @@
1
1
  <template v-if="textPage.title">
2
- <span class="d-inline-block text-truncate mr-1">
3
- <span v-if="textPage.url" class="imprint">
2
+ <span class="d-inline-block text-truncate mr-1 flex-shrink-0">
3
+ <span v-if="textPage.url" class="text-page-footer">
4
4
  <a :href="$st(textPage.url)" target="_blank"
5
5
  >{{ $st(textPage.title) }} <span></span>
6
6
  </a>
@@ -8,7 +8,7 @@
8
8
 
9
9
  <span
10
10
  v-else
11
- class="imprint cursor-pointer text-decoration-underline"
11
+ class="text-page-footer cursor-pointer text-decoration-underline"
12
12
  @click="addTextPage()"
13
13
  >{{ $st(textPage.title) }}</span
14
14
  >
@@ -21,7 +21,7 @@
21
21
  </template>
22
22
 
23
23
  <style lang="scss" scoped>
24
- .imprint {
24
+ .text-page-footer {
25
25
  font-size: smaller;
26
26
  a {
27
27
  color: var(--v-text-color);
@@ -8,20 +8,32 @@
8
8
  'pa-1': !paddingProvided,
9
9
  }"
10
10
  >
11
- <slot />
12
- <v-tooltip
13
- v-if="tooltip"
14
- activator="parent"
15
- :location="tooltipPosition"
16
- :text="$st(tooltip)"
17
- ></v-tooltip>
11
+ <span class="ellipsis-text" ref="labelTextRef">
12
+ <slot />
13
+ <v-tooltip
14
+ v-if="labelTooltip"
15
+ activator="parent"
16
+ :location="tooltipPosition"
17
+ :text="$st(labelTooltip)"
18
+ ></v-tooltip>
19
+ </span>
18
20
  </label>
19
21
  </template>
20
22
 
21
23
  <style lang="scss" scoped>
24
+ .ellipsis-text {
25
+ flex: 1;
26
+ white-space: nowrap;
27
+ overflow: hidden;
28
+ text-overflow: ellipsis;
29
+ }
22
30
  .vcs-label {
23
31
  box-sizing: content-box;
24
32
  display: flex;
33
+ flex-direction: row;
34
+ white-space: nowrap;
35
+ overflow: hidden;
36
+ text-overflow: ellipsis;
25
37
  align-items: center;
26
38
  height: calc(var(--v-vcs-font-size) * 2 - 2px);
27
39
  font-size: var(--v-vcs-font-size);
@@ -36,7 +48,8 @@
36
48
  </style>
37
49
  <script>
38
50
  import { VTooltip } from 'vuetify/components';
39
- import { usePadding } from '../composables.js';
51
+ import { computed, ref } from 'vue';
52
+ import { createEllipseTooltip, usePadding } from '../composables.js';
40
53
 
41
54
  /**
42
55
  * @description Stylized wrapper around {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label |label label}.
@@ -76,8 +89,18 @@
76
89
  },
77
90
  setup(props, { attrs }) {
78
91
  const paddingProvided = usePadding(attrs);
92
+ const labelTextRef = ref();
93
+ const labelTooltip = createEllipseTooltip(
94
+ computed(() => {
95
+ return labelTextRef.value;
96
+ }),
97
+ computed(() => props.tooltip),
98
+ computed(() => labelTextRef.value?.textContent),
99
+ );
79
100
  return {
80
101
  paddingProvided,
102
+ labelTooltip,
103
+ labelTextRef,
81
104
  };
82
105
  },
83
106
  };
@@ -21,6 +21,8 @@ declare const _default: import("vue").DefineComponent<{
21
21
  };
22
22
  }, {
23
23
  paddingProvided: import("vue").ComputedRef<boolean>;
24
+ labelTooltip: import("vue").ComputedRef<string>;
25
+ labelTextRef: import("vue").Ref<any>;
24
26
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
25
27
  htmlFor: {
26
28
  type: StringConstructor;
@@ -173,7 +173,7 @@
173
173
  if (rawProps.multiple) {
174
174
  return [];
175
175
  }
176
- return '';
176
+ return null;
177
177
  },
178
178
  },
179
179
  tooltip: {
@@ -5,7 +5,7 @@ declare const _default: import("vue").DefineComponent<{
5
5
  };
6
6
  modelValue: {
7
7
  type: (BooleanConstructor | ArrayConstructor | StringConstructor | NumberConstructor)[];
8
- default(rawProps: any): never[] | "";
8
+ default(rawProps: any): never[] | null;
9
9
  };
10
10
  tooltip: {
11
11
  type: StringConstructor;
@@ -35,7 +35,7 @@ declare const _default: import("vue").DefineComponent<{
35
35
  };
36
36
  modelValue: {
37
37
  type: (BooleanConstructor | ArrayConstructor | StringConstructor | NumberConstructor)[];
38
- default(rawProps: any): never[] | "";
38
+ default(rawProps: any): never[] | null;
39
39
  };
40
40
  tooltip: {
41
41
  type: StringConstructor;
@@ -17,6 +17,7 @@
17
17
  collapse-icon="mdi-chevron-down"
18
18
  v-bind="{ ...$props, ...$attrs }"
19
19
  :search="localSearchValue"
20
+ @click:select="itemClicked($event.id, $event.event)"
20
21
  >
21
22
  <template #title="scope">
22
23
  <slot name="title" v-bind="scope ?? {}">
@@ -143,6 +144,10 @@
143
144
  VTreeview,
144
145
  },
145
146
  props: {
147
+ items: {
148
+ type: Array,
149
+ default: () => [],
150
+ },
146
151
  search: {
147
152
  type: String,
148
153
  default: '',
@@ -190,6 +195,23 @@
190
195
  localSearchValue,
191
196
  handleFilter,
192
197
  forwardSlots,
198
+ itemClicked(name, event) {
199
+ const items = props.items.slice();
200
+ let item;
201
+ while (items.length > 0) {
202
+ item = items.pop();
203
+ if (item.name === name) {
204
+ break;
205
+ }
206
+ if (item.children?.length > 0) {
207
+ items.push(...item.children);
208
+ }
209
+ }
210
+
211
+ if (item?.clicked && !item?.disabled) {
212
+ item.clicked(event);
213
+ }
214
+ },
193
215
  };
194
216
  },
195
217
  };
@@ -1,4 +1,8 @@
1
1
  declare const _default: import("vue").DefineComponent<{
2
+ items: {
3
+ type: ArrayConstructor;
4
+ default: () => never[];
5
+ };
2
6
  search: {
3
7
  type: StringConstructor;
4
8
  default: string;
@@ -16,7 +20,12 @@ declare const _default: import("vue").DefineComponent<{
16
20
  localSearchValue: import("vue").Ref<any>;
17
21
  handleFilter: (value: string, q: string, item: Object) => number;
18
22
  forwardSlots: import("vue").ComputedRef<string[]>;
23
+ itemClicked(name: any, event: any): void;
19
24
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:search"[], "update:search", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
25
+ items: {
26
+ type: ArrayConstructor;
27
+ default: () => never[];
28
+ };
20
29
  search: {
21
30
  type: StringConstructor;
22
31
  default: string;
@@ -33,6 +42,7 @@ declare const _default: import("vue").DefineComponent<{
33
42
  "onUpdate:search"?: ((...args: any[]) => any) | undefined;
34
43
  }, {
35
44
  search: string;
45
+ items: unknown[];
36
46
  showSearchbar: boolean;
37
47
  searchbarPlaceholder: string;
38
48
  }, {}>;
@@ -25,7 +25,11 @@
25
25
  }
26
26
  </style>
27
27
  <template>
28
- <div class="title-parent pr-2" ref="titleParent">
28
+ <div
29
+ class="title-parent pr-2"
30
+ ref="titleParent"
31
+ @click.stop="item.clicked && !item.disabled && item.clicked($event)"
32
+ >
29
33
  <span>
30
34
  {{ $st(item.title || item.name) }}
31
35
  </span>
@@ -99,18 +99,28 @@
99
99
  /**
100
100
  * Returns the allowed transformation modes for the provided geometry types and number of features. Rotate is e.g. not allowed for a single point but for multiple points.
101
101
  * @param {Set<GeometryType>} geometryTypes A set with all geometry types of the features.
102
- * @param {number} nFeatures The number of the features.
102
+ * @param {import("ol").Feature[]} features The features currently being edited.
103
+ * @param {import("@vcmap/core").VectorLayer} layer The number of the features.
104
+ * @param {boolean} is3D if the current map is 3D
103
105
  * @returns {Array<TransformationMode>} The allowed transformation modes.
104
106
  */
105
107
  export function getAllowedEditorTransformationModes(
106
108
  geometryTypes,
107
- nFeatures,
109
+ features,
110
+ layer,
111
+ is3D = false,
108
112
  ) {
113
+ const nFeatures = features.length;
109
114
  const isSinglePoint =
110
- nFeatures === 1 && geometryTypes.has(GeometryType.Point);
115
+ nFeatures === 1 &&
116
+ geometryTypes.has(GeometryType.Point) &&
117
+ (!is3D || layer.vectorProperties.renderAs(features[0]) === 'geometry');
118
+
111
119
  const isSingleCircle =
112
120
  nFeatures === 1 && geometryTypes.has(GeometryType.Circle);
121
+
113
122
  const isBboxSelected = geometryTypes.has(GeometryType.BBox);
123
+
114
124
  return [
115
125
  TransformationMode.TRANSLATE,
116
126
  ...(isSinglePoint || isSingleCircle || isBboxSelected
@@ -194,36 +204,7 @@
194
204
  * Sets the changed vector property options on the features. Also handles side effects.
195
205
  * @param {import("@vcmap/core").VectorPropertiesOptions} update New property values from user input.
196
206
  */
197
- async function updateFeatureProperties(update) {
198
- const extrusionLikePropertyKeys = [
199
- 'extrudedHeight',
200
- 'skirt',
201
- 'storeysAboveGround',
202
- 'storeysBelowGround',
203
- 'storeyHeightsAboveGround',
204
- 'storeyHeightsBelowGround',
205
- ];
206
- const setsExtrusionLikePropertyKeys =
207
- !!extrusionLikePropertyKeys.filter(
208
- (key) => Object.keys(update).includes(key) && !!update[key],
209
- ).length;
210
- if (
211
- setsExtrusionLikePropertyKeys &&
212
- featureProperties.value.altitudeMode !== 'absolute'
213
- ) {
214
- update.altitudeMode = 'absolute';
215
- } else if (update.altitudeMode === 'clampToGround') {
216
- extrusionLikePropertyKeys
217
- .filter((key) => !!featureProperties.value[key])
218
- .forEach((key) => {
219
- update[key] = 0;
220
- });
221
- }
222
- // when in create mode and changing altitude mode, this is triggered, but currentFeatures is empty array.
223
- if (update.altitudeMode === 'absolute' && features?.length) {
224
- await editorManager.placeCurrentFeaturesOnTerrain();
225
- }
226
-
207
+ function updateFeatureProperties(update) {
227
208
  layer.value.vectorProperties.setValuesForFeatures(
228
209
  update,
229
210
  features.value,
@@ -297,7 +278,9 @@
297
278
  function getAllowedModifyActions() {
298
279
  const allowedModes = getAllowedEditorTransformationModes(
299
280
  currentGeometryTypes.value.types,
300
- currentGeometryTypes.value.nFeatures,
281
+ features.value,
282
+ layer.value,
283
+ is3D.value,
301
284
  );
302
285
 
303
286
  const allowedActions = allowedModes.map((mode) => {
@@ -1,10 +1,12 @@
1
1
  /**
2
2
  * Returns the allowed transformation modes for the provided geometry types and number of features. Rotate is e.g. not allowed for a single point but for multiple points.
3
3
  * @param {Set<GeometryType>} geometryTypes A set with all geometry types of the features.
4
- * @param {number} nFeatures The number of the features.
4
+ * @param {import("ol").Feature[]} features The features currently being edited.
5
+ * @param {import("@vcmap/core").VectorLayer} layer The number of the features.
6
+ * @param {boolean} is3D if the current map is 3D
5
7
  * @returns {Array<TransformationMode>} The allowed transformation modes.
6
8
  */
7
- export function getAllowedEditorTransformationModes(geometryTypes: Set<GeometryType>, nFeatures: number): Array<TransformationMode>;
9
+ export function getAllowedEditorTransformationModes(geometryTypes: Set<GeometryType>, features: import("ol").Feature[], layer: import("@vcmap/core").VectorLayer, is3D?: boolean): Array<TransformationMode>;
8
10
  export namespace EditorTransformationIcons {
9
11
  let translate: string;
10
12
  let rotate: string;
@@ -41,7 +43,7 @@ declare const _default: import("vue").DefineComponent<{
41
43
  availableModifyActions: import("vue").ShallowRef<never[]>;
42
44
  availableVectorProperties: import("vue").ShallowRef<never[]>;
43
45
  is3D: import("vue").Ref<boolean>;
44
- updateFeatureProperties: (update: import("@vcmap/core").VectorPropertiesOptions) => Promise<void>;
46
+ updateFeatureProperties: (update: import("@vcmap/core").VectorPropertiesOptions) => void;
45
47
  defaultVectorProperties: import("@vcmap/core", { with: { "resolution-mode": "import" } }).VectorPropertiesOptions;
46
48
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
47
49
  allowedVectorProperties: {
@@ -21,13 +21,7 @@
21
21
  />
22
22
  </v-col>
23
23
  </v-row>
24
- <v-row
25
- v-if="
26
- visibleProperties.has('heightAboveGround') &&
27
- localValue.altitudeMode === 'relativeToGround'
28
- "
29
- no-gutters
30
- >
24
+ <v-row v-if="visibleProperties.has('heightAboveGround')" no-gutters>
31
25
  <v-col>
32
26
  <VcsLabel :html-for="`${cid}-vp-height-above-ground`">{{
33
27
  $t('components.vectorProperties.heightAboveGround')
@@ -40,7 +34,7 @@
40
34
  :hide-spin-buttons="true"
41
35
  type="number"
42
36
  unit="m"
43
- placeholder="0"
37
+ clearable
44
38
  />
45
39
  </v-col>
46
40
  </v-row>
@@ -345,6 +339,7 @@
345
339
  'modelHeading',
346
340
  'modelPitch',
347
341
  'modelRoll',
342
+ 'modelAutoScale',
348
343
  'baseUrl',
349
344
  ].some((prop) => visibleProperties.has(prop))
350
345
  "
@@ -440,6 +435,16 @@
440
435
  />
441
436
  </v-col>
442
437
  </v-row>
438
+ <v-row v-if="visibleProperties.has('modelAutoScale')" no-gutters>
439
+ <v-col cols="6">
440
+ <VcsLabel>{{
441
+ $t('components.vectorProperties.modelAutoScale')
442
+ }}</VcsLabel>
443
+ </v-col>
444
+ <v-col>
445
+ <VcsCheckbox v-model="localValue.modelAutoScale" />
446
+ </v-col>
447
+ </v-row>
443
448
  <v-row v-if="visibleProperties.has('baseUrl')" no-gutters>
444
449
  <v-col>
445
450
  <VcsLabel :html-for="`${cid}-vp-base-url`">{{
@@ -494,6 +499,7 @@
494
499
  'modelHeading',
495
500
  'modelPitch',
496
501
  'modelRoll',
502
+ 'modelAutoScale',
497
503
  'baseUrl',
498
504
  ];
499
505
 
@@ -595,6 +601,14 @@
595
601
  value: 'clampToGround',
596
602
  title: 'components.vectorProperties.clampToGround',
597
603
  },
604
+ {
605
+ value: 'clampToTerrain',
606
+ title: 'components.vectorProperties.clampToTerrain',
607
+ },
608
+ {
609
+ value: 'clampTo3DTiles',
610
+ title: 'components.vectorProperties.clampTo3DTiles',
611
+ },
598
612
  {
599
613
  value: 'absolute',
600
614
  title: 'components.vectorProperties.absolute',
@@ -602,10 +616,20 @@
602
616
  ];
603
617
 
604
618
  if (visibleProperties.value.has('heightAboveGround')) {
605
- altitudeModes.push({
606
- value: 'relativeToGround',
607
- title: 'components.vectorProperties.relativeToGround',
608
- });
619
+ altitudeModes.push(
620
+ {
621
+ value: 'relativeToGround',
622
+ title: 'components.vectorProperties.relativeToGround',
623
+ },
624
+ {
625
+ value: 'relativeToTerrain',
626
+ title: 'components.vectorProperties.relativeToTerrain',
627
+ },
628
+ {
629
+ value: 'relativeTo3DTiles',
630
+ title: 'components.vectorProperties.relativeTo3DTiles',
631
+ },
632
+ );
609
633
  }
610
634
 
611
635
  return altitudeModes;
@@ -75,7 +75,7 @@ declare const _default: import("vue").DefineComponent<{
75
75
  toString: () => string;
76
76
  } | undefined;
77
77
  getEyeOffset: (feature: import("ol/Feature.js", { with: { "resolution-mode": "import" } }).default<import("ol/geom.js", { with: { "resolution-mode": "import" } }).Geometry>) => import("@vcmap-cesium/engine", { with: { "resolution-mode": "import" } }).Cartesian3 | undefined;
78
- heightAboveGround: number;
78
+ heightAboveGround: number | undefined;
79
79
  getHeightAboveGround: (feature: import("ol/Feature.js", { with: { "resolution-mode": "import" } }).default<import("ol/geom.js", { with: { "resolution-mode": "import" } }).Geometry>) => number;
80
80
  skirt: number;
81
81
  getSkirt: (feature: import("ol/Feature.js", { with: { "resolution-mode": "import" } }).default<import("ol/geom.js", { with: { "resolution-mode": "import" } }).Geometry>) => number;
@@ -106,7 +106,7 @@ declare const _default: import("vue").DefineComponent<{
106
106
  modelRoll: number;
107
107
  getModelRoll: (feature: import("ol/Feature.js", { with: { "resolution-mode": "import" } }).default<import("ol/geom.js", { with: { "resolution-mode": "import" } }).Geometry>) => number;
108
108
  modelOptions: Record<string, unknown> | undefined;
109
- getModelOptions: (feature: import("ol/Feature.js", { with: { "resolution-mode": "import" } }).default<import("ol/geom.js", { with: { "resolution-mode": "import" } }).Geometry>) => Record<string, unknown>;
109
+ getModelOptions: (feature: import("ol/Feature.js", { with: { "resolution-mode": "import" } }).default<import("ol/geom.js", { with: { "resolution-mode": "import" } }).Geometry>) => Record<string, unknown> | undefined;
110
110
  modelAutoScale: boolean;
111
111
  getModelAutoScale: (feature: import("ol/Feature.js", { with: { "resolution-mode": "import" } }).default<import("ol/geom.js", { with: { "resolution-mode": "import" } }).Geometry>) => boolean;
112
112
  baseUrl: string | undefined;
@@ -210,6 +210,7 @@ declare const _default: import("vue").DefineComponent<{
210
210
  getPrimitiveOptions: (feature: import("ol/Feature.js", { with: { "resolution-mode": "import" } }).default<import("ol/geom.js", { with: { "resolution-mode": "import" } }).Geometry>) => import("@vcmap/core", { with: { "resolution-mode": "import" } }).VectorPropertiesPrimitiveOptions<import("@vcmap/core", { with: { "resolution-mode": "import" } }).PrimitiveOptionsType> | undefined;
211
211
  getPrimitive: (feature: import("ol/Feature.js", { with: { "resolution-mode": "import" } }).default<import("ol/geom.js", { with: { "resolution-mode": "import" } }).Geometry>) => import("@vcmap/core", { with: { "resolution-mode": "import" } }).VectorPropertiesPrimitive | null;
212
212
  getModel: (feature: import("ol/Feature.js", { with: { "resolution-mode": "import" } }).default<import("ol/geom.js", { with: { "resolution-mode": "import" } }).Geometry>) => import("@vcmap/core", { with: { "resolution-mode": "import" } }).VectorPropertiesModelOptions | null;
213
+ renderAs: (feature: import("ol/Feature.js", { with: { "resolution-mode": "import" } }).default<import("ol/geom.js", { with: { "resolution-mode": "import" } }).Geometry>) => "geometry" | "model" | "primitive";
213
214
  setVcsMeta: (vcsMeta: import("@vcmap/core", { with: { "resolution-mode": "import" } }).VcsMeta) => void;
214
215
  setValues: (options: import("@vcmap/core", { with: { "resolution-mode": "import" } }).VectorPropertiesOptions) => void;
215
216
  getValues: () => import("@vcmap/core", { with: { "resolution-mode": "import" } }).VectorPropertiesOptions;
@@ -11,6 +11,14 @@
11
11
  * @param {string|import("@vcmap/core").Viewpoint=} viewpoint
12
12
  */
13
13
  export function setViewpointAction(item: import("./contentTreeItem.js").default, app: import("@src/vcsUiApp.js").default, viewpoint?: (string | import("@vcmap/core").Viewpoint) | undefined): void;
14
+ /**
15
+ * @param {import("./contentTreeItem.js").default} item
16
+ * @param {import("@src/vcsUiApp.js").default} app
17
+ * @param {Array<Function>} listeners
18
+ * @param {Array<string>} layerNames
19
+ * @param {Array<string>=} availableStyles
20
+ */
21
+ export function setStyleAction(item: import("./contentTreeItem.js").default, app: import("@src/vcsUiApp.js").default, listeners: Array<Function>, layerNames: Array<string>, availableStyles?: Array<string> | undefined): void;
14
22
  /**
15
23
  * @param {import("@vcmap/core").Layer} layer
16
24
  * @returns {StateActionState}
@@ -51,11 +59,6 @@ declare class LayerContentTreeItem extends VcsObjectContentTreeItem<LayerContent
51
59
  * @private
52
60
  */
53
61
  private get _layer();
54
- /**
55
- * @param {Array<string>=} availableStyles
56
- * @private
57
- */
58
- private _setStyleAction;
59
62
  /**
60
63
  * @private
61
64
  */
@@ -43,6 +43,47 @@ export function setViewpointAction(item, app, viewpoint) {
43
43
  }
44
44
  }
45
45
 
46
+ /**
47
+ * @param {import("./contentTreeItem.js").default} item
48
+ * @param {import("@src/vcsUiApp.js").default} app
49
+ * @param {Array<Function>} listeners
50
+ * @param {Array<string>} layerNames
51
+ * @param {Array<string>=} availableStyles
52
+ */
53
+ export function setStyleAction(
54
+ item,
55
+ app,
56
+ listeners,
57
+ layerNames,
58
+ availableStyles,
59
+ ) {
60
+ const name = 'StyleSelector';
61
+ item.removeAction(name);
62
+ if (Array.isArray(availableStyles) && availableStyles.length > 0) {
63
+ const { action, destroy } = createModalAction(
64
+ {
65
+ name,
66
+ icon: '$vcsColorSwatch',
67
+ title: 'content.styleAction.title',
68
+ },
69
+ {
70
+ component,
71
+ position: {
72
+ width: 200,
73
+ },
74
+ props: reactive({
75
+ availableStyles: availableStyles.slice(),
76
+ layerNames: layerNames.slice(),
77
+ }),
78
+ },
79
+ app,
80
+ vcsAppSymbol,
81
+ );
82
+ item.addAction(action, 4);
83
+ listeners.push(destroy);
84
+ }
85
+ }
86
+
46
87
  /**
47
88
  * @param {import("@vcmap/core").Layer} layer
48
89
  * @returns {StateActionState}
@@ -101,38 +142,6 @@ class LayerContentTreeItem extends VcsObjectContentTreeItem {
101
142
  return this._app.layers.getByKey(this._layerName);
102
143
  }
103
144
 
104
- /**
105
- * @param {Array<string>=} availableStyles
106
- * @private
107
- */
108
- _setStyleAction(availableStyles) {
109
- const name = 'StyleSelector';
110
- this.removeAction(name);
111
- if (Array.isArray(availableStyles) && availableStyles.length > 0) {
112
- const { action, destroy } = createModalAction(
113
- {
114
- name,
115
- icon: '$vcsColorSwatch',
116
- title: 'content.styleAction.title',
117
- },
118
- {
119
- component,
120
- position: {
121
- width: 200,
122
- },
123
- props: reactive({
124
- availableStyles: availableStyles.slice(),
125
- layerName: this._layerName,
126
- }),
127
- },
128
- this._app,
129
- vcsAppSymbol,
130
- );
131
- this.addAction(action, 4);
132
- this._listeners.push(destroy);
133
- }
134
- }
135
-
136
145
  /**
137
146
  * @private
138
147
  */
@@ -165,8 +174,13 @@ class LayerContentTreeItem extends VcsObjectContentTreeItem {
165
174
  */
166
175
  _setProperties(properties) {
167
176
  super._setProperties(properties);
168
-
169
- this._setStyleAction(properties.availableStyles);
177
+ setStyleAction(
178
+ this,
179
+ this._app,
180
+ this._listeners,
181
+ [this._layerName],
182
+ properties.availableStyles,
183
+ );
170
184
  setViewpointAction(this, this._app, properties.defaultViewpoint);
171
185
  }
172
186