@vcmap/ui 6.2.3 → 6.3.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/config/geofence.config.json +19 -0
  2. package/config/pano.config.json +313 -7
  3. package/config/projects.config.json +2 -1
  4. package/dist/assets/cesium.js +1 -1
  5. package/dist/assets/{core-f4ee6bea.js → core-b7d98022.js} +10114 -9823
  6. package/dist/assets/core-workers/panoramaImageWorker.js +1 -1
  7. package/dist/assets/core.js +1 -1
  8. package/dist/assets/ol.js +1 -1
  9. package/dist/assets/{ui-d3a7bd39.css → ui-94adeedc.css} +1 -1
  10. package/dist/assets/{ui-d3a7bd39.js → ui-94adeedc.js} +2347 -2282
  11. package/dist/assets/ui.js +1 -1
  12. package/dist/assets/vue.js +1 -1
  13. package/dist/assets/{vuetify-8e1623b2.js → vuetify-2f71239e.js} +1 -1
  14. package/dist/assets/vuetify.js +1 -1
  15. package/package.json +2 -2
  16. package/plugins/@vcmap-show-case/extent-example/src/ExtentExample.vue +28 -0
  17. package/plugins/@vcmap-show-case/extent-example/src/index.js +3 -14
  18. package/plugins/@vcmap-show-case/panorama-inspector/src/PanoramaDebugTools.vue +28 -3
  19. package/plugins/@vcmap-show-case/panorama-inspector/src/api.js +8 -23
  20. package/plugins/@vcmap-show-case/panorama-inspector/src/index.js +1 -1
  21. package/plugins/package.json +2 -1
  22. package/src/application/VcsApp.vue +3 -0
  23. package/src/application/VcsPanoramaFooter.vue +52 -0
  24. package/src/application/VcsPanoramaFooter.vue.d.ts +2 -0
  25. package/src/components/extent/VcsExtent.vue +12 -1
  26. package/src/components/extent/VcsExtent.vue.d.ts +1 -0
  27. package/src/components/vector-properties/VcsFeatureEditingWindow.vue +15 -5
  28. package/src/components/vector-properties/VcsFeatureEditingWindow.vue.d.ts +123 -1
  29. package/src/contentTree/contentTreeItem.js +1 -1
  30. package/src/contentTree/layerContentTreeItem.d.ts +4 -0
  31. package/src/contentTree/layerContentTreeItem.js +26 -20
  32. package/src/contentTree/layerGroupContentTreeItem.d.ts +1 -0
  33. package/src/contentTree/layerGroupContentTreeItem.js +32 -26
  34. package/src/contentTree/wmsGroupContentTreeItem.d.ts +1 -0
  35. package/src/contentTree/wmsGroupContentTreeItem.js +27 -19
  36. package/src/manager/collectionManager/CollectionManager.vue +14 -1
  37. /package/dist/assets/{cesium-dcdef786.js → cesium-4fcc8a17.js} +0 -0
  38. /package/dist/assets/core-workers/{panoramaImageWorker.js-a6bb36f6.js → panoramaImageWorker.js-fc0f2458.js} +0 -0
  39. /package/dist/assets/{ol-f7a5160f.js → ol-8c487975.js} +0 -0
  40. /package/dist/assets/{vue-cbd2bd60.js → vue-225a7b37.js} +0 -0
  41. /package/dist/assets/{vuetify-8e1623b2.css → vuetify-2f71239e.css} +0 -0
package/dist/assets/ui.js CHANGED
@@ -1 +1 @@
1
- export * from "./ui-d3a7bd39.js";
1
+ export * from "./ui-94adeedc.js";
@@ -1 +1 @@
1
- export * from "./vue-cbd2bd60.js";
1
+ export * from "./vue-225a7b37.js";
@@ -10,7 +10,7 @@ function loadCss(href) {
10
10
  elem.onerror = reject;
11
11
  document.head.appendChild(elem);
12
12
  });
13
- } await loadCss('./assets/vuetify-8e1623b2.css');import { watch as Q, onScopeDispose as Ze, effectScope as Zl, shallowRef as K, Fragment as ie, reactive as it, computed as b, watchEffect as Fe, toRefs as Yt, capitalize as Nn, isVNode as Rc, Comment as Nc, unref as ot, warn as ja, getCurrentInstance as Hc, ref as j, provide as De, inject as ye, defineComponent as zc, camelize as Ir, h as Gt, toRaw as Be, createVNode as r, mergeProps as O, onBeforeUnmount as Qe, readonly as Ql, onDeactivated as _r, onActivated as Wc, onMounted as Ye, nextTick as we, TransitionGroup as Jl, Transition as jt, isRef as Tn, toRef as $, onBeforeMount as ra, withDirectives as $e, resolveDirective as gt, vShow as Ct, onUpdated as jc, Text as Uc, resolveDynamicComponent as Yc, markRaw as Gc, Teleport as Kc, cloneVNode as qc, createTextVNode as Tt, onUnmounted as Tr, onBeforeUpdate as Xc, withModifiers as Tl, toDisplayString as Zc, vModelText as Qc, resolveComponent as Jc, render as Ar } from "./vue-cbd2bd60.js";
13
+ } await loadCss('./assets/vuetify-2f71239e.css');import { watch as Q, onScopeDispose as Ze, effectScope as Zl, shallowRef as K, Fragment as ie, reactive as it, computed as b, watchEffect as Fe, toRefs as Yt, capitalize as Nn, isVNode as Rc, Comment as Nc, unref as ot, warn as ja, getCurrentInstance as Hc, ref as j, provide as De, inject as ye, defineComponent as zc, camelize as Ir, h as Gt, toRaw as Be, createVNode as r, mergeProps as O, onBeforeUnmount as Qe, readonly as Ql, onDeactivated as _r, onActivated as Wc, onMounted as Ye, nextTick as we, TransitionGroup as Jl, Transition as jt, isRef as Tn, toRef as $, onBeforeMount as ra, withDirectives as $e, resolveDirective as gt, vShow as Ct, onUpdated as jc, Text as Uc, resolveDynamicComponent as Yc, markRaw as Gc, Teleport as Kc, cloneVNode as qc, createTextVNode as Tt, onUnmounted as Tr, onBeforeUpdate as Xc, withModifiers as Tl, toDisplayString as Zc, vModelText as Qc, resolveComponent as Jc, render as Ar } from "./vue-225a7b37.js";
14
14
  function rt(e, n) {
15
15
  let t;
16
16
  function a() {
@@ -1 +1 @@
1
- export * from "./vuetify-8e1623b2.js";
1
+ export * from "./vuetify-2f71239e.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vcmap/ui",
3
- "version": "6.2.3",
3
+ "version": "6.3.0-rc.1",
4
4
  "author": "Virtual City Systems",
5
5
  "license": "MIT",
6
6
  "scripts": {
@@ -58,7 +58,7 @@
58
58
  },
59
59
  "peerDependencies": {
60
60
  "@vcmap-cesium/engine": "^11.0.3",
61
- "@vcmap/core": "^6.2.3",
61
+ "@vcmap/core": "^6.3.0-rc.1",
62
62
  "ol": "^10.4.0",
63
63
  "vue": "~3.4.38",
64
64
  "vuetify": "~3.7.14"
@@ -0,0 +1,28 @@
1
+ <template>
2
+ <v-container class="pa-0">
3
+ <VcsExtentEditor heading="Default WGS84 projection" v-model="wgs84Extent" />
4
+ <VcsExtentEditor
5
+ heading="Mercator projection example"
6
+ v-model="mercatorExtent"
7
+ />
8
+ </v-container>
9
+ </template>
10
+ <script>
11
+ import { VcsExtentEditor } from '@vcmap/ui';
12
+ import { VContainer } from 'vuetify/components';
13
+ import { Extent, mercatorProjection, wgs84Projection } from '@vcmap/core';
14
+
15
+ export default {
16
+ name: 'ExtentExample',
17
+ components: { VcsExtentEditor, VContainer },
18
+ setup() {
19
+ const wgs84Extent = new Extent({ projection: wgs84Projection }).toJSON();
20
+ const mercatorExtent = new Extent({
21
+ projection: mercatorProjection,
22
+ }).toJSON();
23
+
24
+ return { wgs84Extent, mercatorExtent };
25
+ },
26
+ };
27
+ </script>
28
+ <style lang="scss" scoped></style>
@@ -1,19 +1,11 @@
1
- import {
2
- ButtonLocation,
3
- createToggleAction,
4
- WindowSlot,
5
- VcsExtentEditor,
6
- } from '@vcmap/ui';
7
- import { Extent } from '@vcmap/core';
8
- import { reactive } from 'vue';
1
+ import { ButtonLocation, createToggleAction, WindowSlot } from '@vcmap/ui';
9
2
  import packageJSON from '../package.json';
3
+ import ExtentExample from './ExtentExample.vue';
10
4
 
11
5
  /**
12
6
  * @returns {VcsPlugin}
13
7
  */
14
8
  export default async function extentExample() {
15
- const modelValue = reactive(new Extent().toJSON());
16
-
17
9
  return {
18
10
  get name() {
19
11
  return packageJSON.name;
@@ -33,15 +25,12 @@ export default async function extentExample() {
33
25
  },
34
26
  {
35
27
  id: 'extent-example',
36
- component: VcsExtentEditor,
28
+ component: ExtentExample,
37
29
  slot: WindowSlot.DYNAMIC_LEFT,
38
30
  state: {
39
31
  headerTitle: 'Extent Example',
40
32
  headerIcon: '$vcsBoundingBox',
41
33
  },
42
- props: {
43
- modelValue,
44
- },
45
34
  },
46
35
  app.windowManager,
47
36
  packageJSON.name,
@@ -17,7 +17,7 @@
17
17
  } from '@vcmap/core';
18
18
  import {
19
19
  createMapMarkerAction,
20
- createOsmGlobeAction,
20
+ createGlobeToggleAction,
21
21
  setupClickedPrimitive,
22
22
  } from './api.js';
23
23
  import { name } from '../package.json';
@@ -51,7 +51,7 @@
51
51
  }
52
52
  });
53
53
 
54
- const { action, destroy } = createOsmGlobeAction(app);
54
+ const action = createGlobeToggleAction(app);
55
55
  const { action: hideMarker, destroy: destroyMarker } =
56
56
  createMapMarkerAction(app);
57
57
 
@@ -72,6 +72,16 @@
72
72
  map.panoramaView.tilePrimitiveCollection.overlayOpacity = newOverlayOpacity;
73
73
  });
74
74
 
75
+ const contrast = ref(map.panoramaView.tilePrimitiveCollection.contrast);
76
+ watch(contrast, (newContrast) => {
77
+ map.panoramaView.tilePrimitiveCollection.contrast = newContrast;
78
+ });
79
+
80
+ const brightness = ref(map.panoramaView.tilePrimitiveCollection.brightness);
81
+ watch(brightness, (newBrightness) => {
82
+ map.panoramaView.tilePrimitiveCollection.brightness = newBrightness;
83
+ });
84
+
75
85
  const overlayNaNColor = shallowRef(
76
86
  getStringColor(
77
87
  cesiumColorToColor(
@@ -132,7 +142,6 @@
132
142
 
133
143
  onUnmounted(() => {
134
144
  clickedPrimitive.destroy();
135
- destroy();
136
145
  destroyMarker();
137
146
  map.panoramaView.tilePrimitiveCollection.opacity = 1;
138
147
  });
@@ -163,6 +172,22 @@
163
172
  <VcsCheckbox label="Show Depth" v-model="showDepth"></VcsCheckbox>
164
173
  </v-col>
165
174
  </v-row>
175
+ <v-row no-gutters>
176
+ <v-col cols="4">
177
+ <vcs-label>Brightness</vcs-label>
178
+ </v-col>
179
+ <v-col>
180
+ <vcs-slider v-model="brightness" :min="-1" :max="1" :step="0.001" />
181
+ </v-col>
182
+ </v-row>
183
+ <v-row no-gutters>
184
+ <v-col cols="4">
185
+ <vcs-label>Contrast</vcs-label>
186
+ </v-col>
187
+ <v-col>
188
+ <vcs-slider v-model="contrast" :min="0" :max="20" :step="0.01" />
189
+ </v-col>
190
+ </v-row>
166
191
  <template v-if="showDepth || showIntensity">
167
192
  <v-row no-gutters>
168
193
  <v-col cols="4">
@@ -7,9 +7,6 @@ import {
7
7
  SphereGeometry,
8
8
  Color,
9
9
  Cartesian3,
10
- Globe,
11
- ImageryLayer as CesiumImageryLayer,
12
- OpenStreetMapImageryProvider,
13
10
  } from '@vcmap-cesium/engine';
14
11
  import {
15
12
  mercatorToCartesian,
@@ -80,42 +77,30 @@ export function setupClickedPrimitive(map, clickedInteraction) {
80
77
 
81
78
  /**
82
79
  * @param {import("@vcmap/core").VcsApp} app
83
- * @returns {{ action: import("@vcmap/ui").Action, destroy: () => void }}
80
+ * @returns {import("@vcmap/ui").Action}
84
81
  */
85
- export function createOsmGlobeAction(app) {
82
+ export function createGlobeToggleAction(app) {
86
83
  /** @type {import("@vcmap/core").PanoramaMap} */
87
84
  const map = app.maps.getByType(PanoramaMap.className)[0];
85
+ const cachedLayerTypes = map.layerTypes.slice();
88
86
 
89
87
  const action = reactive({
90
- name: 'OSM Globe',
88
+ name: 'globeToggle',
91
89
  icon: 'mdi-earth',
92
- title: 'Open Street Map Globe',
90
+ title: 'Toggle additional layers',
93
91
  active: false,
94
92
  callback() {
95
93
  if (action.active) {
96
- map.getCesiumWidget().scene.globe = undefined;
94
+ map.layerTypes = cachedLayerTypes;
97
95
  action.active = false;
98
96
  } else {
99
- const { scene } = map.getCesiumWidget();
100
- scene.globe = new Globe();
101
- scene.imageryLayers.add(
102
- new CesiumImageryLayer(
103
- new OpenStreetMapImageryProvider({ maximumLevel: 18 }),
104
- ),
105
- );
97
+ map.layerTypes = [];
106
98
  action.active = true;
107
99
  }
108
100
  },
109
101
  });
110
102
 
111
- return {
112
- action,
113
- destroy: () => {
114
- if (map.initialized) {
115
- map.getCesiumWidget().scene.globe = undefined;
116
- }
117
- },
118
- };
103
+ return action;
119
104
  }
120
105
 
121
106
  /**
@@ -27,7 +27,7 @@ export default function panoramaInspector() {
27
27
  {
28
28
  id: 'panorama-inspector',
29
29
  state: {
30
- headerTitle: 'panoramaInspector.title',
30
+ headerTitle: 'Panorama Inspector',
31
31
  },
32
32
  component: PanoramaInspector,
33
33
  slot: WindowSlot.DYNAMIC_RIGHT,
@@ -30,7 +30,8 @@
30
30
  "@vcmap/sensorthings": "^1.0.0",
31
31
  "@vcmap/cesium-inspector": "^2.0.0",
32
32
  "@vcmap/event-control": "^1.0.1",
33
- "@vcmap/dynamic-layer": "^1.0.0"
33
+ "@vcmap/dynamic-layer": "^1.0.0",
34
+ "@vcmap/geofence": "^1.0.2"
34
35
  },
35
36
  "optionalDependencies": {
36
37
  "@vcmap/planning": "^7.0.0"
@@ -17,6 +17,7 @@
17
17
  >
18
18
  <VcsPositionDisplay />
19
19
  <VcsObliqueFooter />
20
+ <vcs-panorama-footer />
20
21
  <VcsTextPageFooter
21
22
  v-if="imprint"
22
23
  :text-page="imprint"
@@ -89,6 +90,7 @@
89
90
  import { getAttributions } from './attributionsHelper.js';
90
91
  import VcsPositionDisplay from './VcsPositionDisplay.vue';
91
92
  import { getDataProtection, getImprint } from './uiConfigHelper.js';
93
+ import VcsPanoramaFooter from './VcsPanoramaFooter.vue';
92
94
 
93
95
  /**
94
96
  * This helper checks the uiConfig and depending on the value will setup/teardown the providedSetupFunction
@@ -775,6 +777,7 @@
775
777
  */
776
778
  export default {
777
779
  components: {
780
+ VcsPanoramaFooter,
778
781
  VcsContainer,
779
782
  VcsPositionDisplay,
780
783
  VcsAttributionsFooter,
@@ -0,0 +1,52 @@
1
+ <script setup>
2
+ import { ref, inject, onUnmounted } from 'vue';
3
+ import { PanoramaMap } from '@vcmap/core';
4
+
5
+ const app = inject('vcsApp');
6
+ const name = ref();
7
+ const time = ref();
8
+
9
+ let imageChangedListener = () => {};
10
+ const setImage = (image) => {
11
+ if (image) {
12
+ name.value = image.name;
13
+ if (image.time) {
14
+ time.value = new Intl.DateTimeFormat(app.locale, {
15
+ dateStyle: 'short',
16
+ timeStyle: 'short',
17
+ }).format(image.time);
18
+ } else {
19
+ time.value = undefined;
20
+ }
21
+ }
22
+ };
23
+ const setMap = (map) => {
24
+ imageChangedListener();
25
+ if (map instanceof PanoramaMap) {
26
+ setImage(map.currentPanoramaImage);
27
+ imageChangedListener = map.currentImageChanged.addEventListener(setImage);
28
+ } else {
29
+ name.value = undefined;
30
+ time.value = undefined;
31
+ imageChangedListener = () => {};
32
+ }
33
+ };
34
+
35
+ const mapChangedListener = app.maps.mapActivated.addEventListener(setMap);
36
+ setMap(app.maps.activeMap);
37
+
38
+ onUnmounted(() => {
39
+ imageChangedListener();
40
+ mapChangedListener();
41
+ });
42
+ </script>
43
+
44
+ <template>
45
+ <span
46
+ v-if="name && time"
47
+ class="d-flex align-center overflow-hidden vcs-panorama-footer"
48
+ >{{ time }} - {{ name }}
49
+ </span>
50
+ </template>
51
+
52
+ <style scoped lang="scss"></style>
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
2
+ export default _default;
@@ -18,6 +18,7 @@
18
18
  hide-z
19
19
  v-model="min"
20
20
  :disabled="disabled"
21
+ :extent="extent"
21
22
  :axis-rules="[
22
23
  [(v) => checkInput(v, max[0])],
23
24
  [(v) => checkInput(v, max[1])],
@@ -35,6 +36,7 @@
35
36
  hide-z
36
37
  v-model="max"
37
38
  :disabled="disabled"
39
+ :extent="extent"
38
40
  :axis-rules="[
39
41
  [(v) => checkInput(min[0], v)],
40
42
  [(v) => checkInput(min[1], v)],
@@ -54,7 +56,7 @@
54
56
  <script>
55
57
  import { computed, toRaw } from 'vue';
56
58
  import { VCol, VContainer, VRow } from 'vuetify/components';
57
- import { Extent } from '@vcmap/core';
59
+ import { Extent, Projection } from '@vcmap/core';
58
60
  import VcsLabel from '../form-inputs-controls/VcsLabel.vue';
59
61
  import VcsTextField from '../form-inputs-controls/VcsTextField.vue';
60
62
  import VcsCoordinate from '../form-inputs-controls/VcsCoordinate.vue';
@@ -100,6 +102,14 @@
100
102
  setup(props, { emit }) {
101
103
  const localValue = useProxiedComplexModel(props, 'modelValue', emit);
102
104
 
105
+ const { proj } = new Projection(localValue.value.projection);
106
+ const extent = proj.getExtent() || [
107
+ -Infinity,
108
+ -Infinity,
109
+ Infinity,
110
+ Infinity,
111
+ ];
112
+
103
113
  const getCoordinate = (start, end = 4) =>
104
114
  computed({
105
115
  get() {
@@ -121,6 +131,7 @@
121
131
  min: getCoordinate(0, 2),
122
132
  max: getCoordinate(2),
123
133
  checkInput,
134
+ extent,
124
135
  cid,
125
136
  };
126
137
  },
@@ -15,6 +15,7 @@ declare const _default: import("vue").DefineComponent<{
15
15
  min: import("vue").WritableComputedRef<any>;
16
16
  max: import("vue").WritableComputedRef<any>;
17
17
  checkInput: typeof checkInput;
18
+ extent: import("ol/extent.js", { with: { "resolution-mode": "import" } }).Extent;
18
19
  cid: string;
19
20
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:modelValue"[], "update:modelValue", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
20
21
  modelValue: {
@@ -59,6 +59,7 @@
59
59
  CesiumMap,
60
60
  GeometryType,
61
61
  is2DLayout,
62
+ PanoramaMap,
62
63
  SessionType,
63
64
  TransformationMode,
64
65
  VectorProperties,
@@ -280,12 +281,21 @@
280
281
  }),
281
282
  );
282
283
 
283
- function updateIs3D() {
284
- is3D.value = vcsApp.maps.activeMap instanceof CesiumMap;
284
+ const defaultVectorProperties = reactive(
285
+ VectorProperties.getDefaultOptions(),
286
+ );
287
+ function activeMapHandler() {
288
+ const isPanorama = vcsApp.maps.activeMap instanceof PanoramaMap;
289
+ is3D.value = vcsApp.maps.activeMap instanceof CesiumMap || isPanorama;
290
+
291
+ defaultVectorProperties.altitudeMode = isPanorama
292
+ ? 'absolute'
293
+ : 'clampToGround';
285
294
  }
295
+
286
296
  const mapActivatedListener =
287
- vcsApp.maps.mapActivated.addEventListener(updateIs3D);
288
- updateIs3D();
297
+ vcsApp.maps.mapActivated.addEventListener(activeMapHandler);
298
+ activeMapHandler();
289
299
 
290
300
  const isGeometryEditing = computed(
291
301
  () => editSession.value?.type === SessionType.EDIT_GEOMETRY,
@@ -476,7 +486,7 @@
476
486
  is2DFeature,
477
487
  isGeometryEditing,
478
488
  updateFeatureProperties,
479
- defaultVectorProperties: VectorProperties.getDefaultOptions(),
489
+ defaultVectorProperties,
480
490
  showInputs: computed(
481
491
  () =>
482
492
  !currentTransformationMode.value &&
@@ -1,3 +1,5 @@
1
+ /// <reference types="@vcmap-cesium/engine" />
2
+ /// <reference types="@vcmap/core/dist/cesium.js" />
1
3
  /**
2
4
  * 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
5
  * @param {Set<GeometryType>} geometryTypes A set with all geometry types of the features.
@@ -59,7 +61,127 @@ declare const _default: import("vue").DefineComponent<{
59
61
  is2DFeature: import("vue").ComputedRef<boolean>;
60
62
  isGeometryEditing: import("vue").ComputedRef<boolean>;
61
63
  updateFeatureProperties: (update: import("@vcmap/core").VectorPropertiesOptions) => void;
62
- defaultVectorProperties: import("@vcmap/core", { with: { "resolution-mode": "import" } }).VectorPropertiesOptions;
64
+ defaultVectorProperties: {
65
+ altitudeMode?: import("@vcmap/core/dist/src/layer/vectorProperties.js", { with: { "resolution-mode": "import" } }).AltitudeModeType | undefined;
66
+ allowPicking?: boolean | undefined;
67
+ classificationType?: import("@vcmap/core/dist/src/layer/vectorProperties.js", { with: { "resolution-mode": "import" } }).ClassificationTypeType | undefined;
68
+ scaleByDistance?: number[] | undefined;
69
+ eyeOffset?: number[] | undefined;
70
+ heightAboveGround?: number | undefined;
71
+ skirt?: number | undefined;
72
+ groundLevel?: number | undefined;
73
+ extrudedHeight?: number | undefined;
74
+ storeysAboveGround?: number | undefined;
75
+ storeysBelowGround?: number | undefined;
76
+ storeyHeightsAboveGround?: number | number[] | undefined;
77
+ storeyHeightsBelowGround?: number | number[] | undefined;
78
+ modelUrl?: string | undefined;
79
+ modelScaleX?: number | undefined;
80
+ modelScaleY?: number | undefined;
81
+ modelScaleZ?: number | undefined;
82
+ modelHeading?: number | undefined;
83
+ modelPitch?: number | undefined;
84
+ modelRoll?: number | undefined;
85
+ modelAutoScale?: boolean | undefined;
86
+ modelOptions?: Record<string, unknown> | undefined;
87
+ primitiveOptions?: {
88
+ type: import("@vcmap/core", { with: { "resolution-mode": "import" } }).PrimitiveOptionsType;
89
+ geometryOptions: {
90
+ length: number;
91
+ topRadius: number;
92
+ bottomRadius: number;
93
+ slices?: number | undefined;
94
+ vertexFormat?: {
95
+ position: boolean;
96
+ normal: boolean;
97
+ st: boolean;
98
+ bitangent: boolean;
99
+ tangent: boolean;
100
+ color: boolean;
101
+ } | undefined;
102
+ } | {
103
+ radius?: number | undefined;
104
+ stackPartitions?: number | undefined;
105
+ slicePartitions?: number | undefined;
106
+ vertexFormat?: {
107
+ position: boolean;
108
+ normal: boolean;
109
+ st: boolean;
110
+ bitangent: boolean;
111
+ tangent: boolean;
112
+ color: boolean;
113
+ } | undefined;
114
+ } | {
115
+ radii?: {
116
+ x: number;
117
+ y: number;
118
+ z: number;
119
+ clone: (result?: import("@vcmap-cesium/engine", { with: { "resolution-mode": "import" } }).Cartesian3 | undefined) => import("@vcmap-cesium/engine", { with: { "resolution-mode": "import" } }).Cartesian3;
120
+ equals: (right?: import("@vcmap-cesium/engine", { with: { "resolution-mode": "import" } }).Cartesian3 | undefined) => boolean;
121
+ equalsEpsilon: (right?: import("@vcmap-cesium/engine", { with: { "resolution-mode": "import" } }).Cartesian3 | undefined, relativeEpsilon?: number | undefined, absoluteEpsilon?: number | undefined) => boolean;
122
+ toString: () => string;
123
+ } | undefined;
124
+ innerRadii?: {
125
+ x: number;
126
+ y: number;
127
+ z: number;
128
+ clone: (result?: import("@vcmap-cesium/engine", { with: { "resolution-mode": "import" } }).Cartesian3 | undefined) => import("@vcmap-cesium/engine", { with: { "resolution-mode": "import" } }).Cartesian3;
129
+ equals: (right?: import("@vcmap-cesium/engine", { with: { "resolution-mode": "import" } }).Cartesian3 | undefined) => boolean;
130
+ equalsEpsilon: (right?: import("@vcmap-cesium/engine", { with: { "resolution-mode": "import" } }).Cartesian3 | undefined, relativeEpsilon?: number | undefined, absoluteEpsilon?: number | undefined) => boolean;
131
+ toString: () => string;
132
+ } | undefined;
133
+ minimumClock?: number | undefined;
134
+ maximumClock?: number | undefined;
135
+ minimumCone?: number | undefined;
136
+ maximumCone?: number | undefined;
137
+ stackPartitions?: number | undefined;
138
+ slicePartitions?: number | undefined;
139
+ vertexFormat?: {
140
+ position: boolean;
141
+ normal: boolean;
142
+ st: boolean;
143
+ bitangent: boolean;
144
+ tangent: boolean;
145
+ color: boolean;
146
+ } | undefined;
147
+ } | {
148
+ minimum: {
149
+ x: number;
150
+ y: number;
151
+ z: number;
152
+ clone: (result?: import("@vcmap-cesium/engine", { with: { "resolution-mode": "import" } }).Cartesian3 | undefined) => import("@vcmap-cesium/engine", { with: { "resolution-mode": "import" } }).Cartesian3;
153
+ equals: (right?: import("@vcmap-cesium/engine", { with: { "resolution-mode": "import" } }).Cartesian3 | undefined) => boolean;
154
+ equalsEpsilon: (right?: import("@vcmap-cesium/engine", { with: { "resolution-mode": "import" } }).Cartesian3 | undefined, relativeEpsilon?: number | undefined, absoluteEpsilon?: number | undefined) => boolean;
155
+ toString: () => string;
156
+ };
157
+ maximum: {
158
+ x: number;
159
+ y: number;
160
+ z: number;
161
+ clone: (result?: import("@vcmap-cesium/engine", { with: { "resolution-mode": "import" } }).Cartesian3 | undefined) => import("@vcmap-cesium/engine", { with: { "resolution-mode": "import" } }).Cartesian3;
162
+ equals: (right?: import("@vcmap-cesium/engine", { with: { "resolution-mode": "import" } }).Cartesian3 | undefined) => boolean;
163
+ equalsEpsilon: (right?: import("@vcmap-cesium/engine", { with: { "resolution-mode": "import" } }).Cartesian3 | undefined, relativeEpsilon?: number | undefined, absoluteEpsilon?: number | undefined) => boolean;
164
+ toString: () => string;
165
+ };
166
+ vertexFormat?: {
167
+ position: boolean;
168
+ normal: boolean;
169
+ st: boolean;
170
+ bitangent: boolean;
171
+ tangent: boolean;
172
+ color: boolean;
173
+ } | undefined;
174
+ } | undefined;
175
+ depthFailColor?: string | number[] | {
176
+ setTransform: (transform?: DOMMatrix2DInit | undefined) => void;
177
+ } | {
178
+ addColorStop: (offset: number, color: string) => void;
179
+ } | undefined;
180
+ offset?: number[] | undefined;
181
+ additionalOptions?: Record<string, unknown> | undefined;
182
+ } | undefined;
183
+ baseUrl?: string | undefined;
184
+ };
63
185
  showInputs: import("vue").ComputedRef<boolean>;
64
186
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
65
187
  allowedVectorProperties: {
@@ -436,7 +436,7 @@ class ContentTreeItem {
436
436
  removeAction(actionName) {
437
437
  const index = this._getActionIndex(actionName);
438
438
  if (index > -1) {
439
- this._actions.value.splice(index, 1);
439
+ this._actions.value = this._actions.value.filter((_, i) => i !== index);
440
440
  }
441
441
  }
442
442
 
@@ -74,6 +74,10 @@ declare class LayerContentTreeItem extends VcsObjectContentTreeItem<LayerContent
74
74
  * @private
75
75
  */
76
76
  private _clearListeners;
77
+ /**
78
+ * @private
79
+ */
80
+ private _determineSupport;
77
81
  /**
78
82
  * @private
79
83
  */