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

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 (156) hide show
  1. package/build/buildTypes.js +9 -5
  2. package/config/base.config.json +0 -6
  3. package/config/dev.config.json +4 -0
  4. package/config/projects.config.json +2 -1
  5. package/config/theming.config.json +68 -0
  6. package/config/www.config.json +31 -30
  7. package/dist/assets/cesium.js +1 -1
  8. package/dist/assets/{core-1c8b8674.js → core-e06aa7a6.js} +1403 -1375
  9. package/dist/assets/core.js +1 -1
  10. package/dist/assets/ol.js +1 -1
  11. package/dist/assets/ui-5dda32d2.css +1 -0
  12. package/dist/assets/{ui-7214428e.js → ui-5dda32d2.js} +11632 -11501
  13. package/dist/assets/ui.js +1 -1
  14. package/dist/assets/vue.js +1 -1
  15. package/dist/assets/{vuetify-88a2fabe.css → vuetify-4c4e4217.css} +1 -1
  16. package/dist/assets/{vuetify-88a2fabe.js → vuetify-4c4e4217.js} +2375 -2369
  17. package/dist/assets/vuetify.js +1 -1
  18. package/index.d.ts +22 -10
  19. package/index.js +9 -3
  20. package/package.json +3 -3
  21. package/plugins/@vcmap-show-case/custom-icons-example/README.md +3 -0
  22. package/plugins/@vcmap-show-case/custom-icons-example/assets/imageExample.png +0 -0
  23. package/plugins/@vcmap-show-case/custom-icons-example/assets/svgExample.svg +1 -0
  24. package/plugins/@vcmap-show-case/custom-icons-example/package.json +5 -0
  25. package/plugins/@vcmap-show-case/custom-icons-example/src/CustomIconsExample.vue +90 -0
  26. package/plugins/@vcmap-show-case/custom-icons-example/src/index.js +45 -0
  27. package/plugins/@vcmap-show-case/plugin-editors/src/PluginEditors.vue +11 -7
  28. package/plugins/@vcmap-show-case/theming-example/README.md +3 -0
  29. package/plugins/@vcmap-show-case/theming-example/package.json +5 -0
  30. package/plugins/@vcmap-show-case/theming-example/src/ThemingExample.vue +116 -0
  31. package/plugins/@vcmap-show-case/theming-example/src/index.js +53 -0
  32. package/plugins/package.json +5 -1
  33. package/src/actions/actionHelper.d.ts +4 -11
  34. package/src/actions/actionHelper.js +2 -5
  35. package/src/actions/listActions.d.ts +2 -2
  36. package/src/application/VcsApp.vue +17 -19
  37. package/src/application/VcsApp.vue.d.ts +5 -1
  38. package/src/application/VcsAttributionsFooter.vue.d.ts +1 -1
  39. package/src/application/VcsContainer.vue +2 -2
  40. package/src/application/VcsContainer.vue.d.ts +5 -1
  41. package/src/application/VcsNavbar.vue +9 -1
  42. package/src/application/VcsNavbar.vue.d.ts +1 -0
  43. package/src/application/VcsSplashScreen.vue +11 -2
  44. package/src/application/attributionsHelper.d.ts +20 -22
  45. package/src/application/attributionsHelper.js +4 -4
  46. package/src/callback/vcsCallback.d.ts +2 -2
  47. package/src/callback/vcsCallback.js +1 -1
  48. package/src/components/buttons/VcsActionButtonList.vue +2 -3
  49. package/src/components/buttons/VcsButton.vue +2 -4
  50. package/src/components/buttons/VcsButton.vue.d.ts +1 -1
  51. package/src/components/buttons/VcsFormButton.vue +4 -4
  52. package/src/components/buttons/VcsToolButton.vue +4 -2
  53. package/src/components/buttons/VcsToolButton.vue.d.ts +2 -2
  54. package/src/components/composables.d.ts +5 -0
  55. package/src/components/composables.js +79 -9
  56. package/src/components/extent/VcsExtent.vue +10 -6
  57. package/src/components/extent/VcsExtent.vue.d.ts +1 -0
  58. package/src/components/flight/VcsFlightComponent.vue +13 -13
  59. package/src/components/flight/VcsFlightComponent.vue.d.ts +1 -0
  60. package/src/components/form-inputs-controls/VcsCheckbox.vue +8 -3
  61. package/src/components/form-inputs-controls/VcsChipArrayInput.vue +3 -8
  62. package/src/components/form-inputs-controls/VcsChipArrayInput.vue.d.ts +0 -1
  63. package/src/components/form-inputs-controls/VcsCoordinate.vue +1 -2
  64. package/src/components/form-inputs-controls/VcsFileInput.vue +1 -1
  65. package/src/components/form-inputs-controls/VcsLabel.vue +1 -1
  66. package/src/components/form-inputs-controls/VcsRadio.vue +8 -6
  67. package/src/components/form-inputs-controls/VcsRadio.vue.d.ts +1 -0
  68. package/src/components/form-inputs-controls/VcsSelect.vue +1 -1
  69. package/src/components/form-inputs-controls/VcsSlider.vue +5 -5
  70. package/src/components/form-inputs-controls/VcsTextArea.vue +1 -1
  71. package/src/components/form-inputs-controls/VcsTextField.vue +10 -1
  72. package/src/components/form-inputs-controls/VcsTextField.vue.d.ts +2 -1
  73. package/src/components/form-inputs-controls/VcsWizard.vue +3 -3
  74. package/src/components/form-inputs-controls/VcsWizardStep.vue +5 -1
  75. package/src/components/form-inputs-controls/vcsTextField.scss +7 -1
  76. package/src/components/form-output/VcsFormattedNumber.vue +1 -1
  77. package/src/components/import/VcsImportComponent.vue +7 -4
  78. package/src/components/import/VcsImportComponent.vue.d.ts +1 -1
  79. package/src/components/lists/VcsActionList.vue +2 -6
  80. package/src/components/lists/VcsListItemComponent.vue +20 -10
  81. package/src/components/lists/VcsListItemComponent.vue.d.ts +11 -1
  82. package/src/components/lists/VcsTreeview.vue +53 -11
  83. package/src/components/lists/VcsTreeview.vue.d.ts +2 -0
  84. package/src/components/lists/VcsTreeviewSearchbar.vue +14 -3
  85. package/src/components/lists/VcsTreeviewSearchbar.vue.d.ts +3 -1
  86. package/src/components/lists/VcsTreeviewTitle.vue +36 -0
  87. package/src/components/modelHelper.d.ts +10 -8
  88. package/src/components/modelHelper.js +8 -6
  89. package/src/components/notification/VcsHelp.vue +6 -7
  90. package/src/components/notification/VcsHelp.vue.d.ts +0 -9
  91. package/src/components/plugins/AbstractConfigEditor.vue +1 -22
  92. package/src/components/plugins/AbstractConfigEditor.vue.d.ts +6 -29
  93. package/src/components/section/VcsExpansionPanel.vue +9 -3
  94. package/src/components/section/VcsExpansionPanel.vue.d.ts +2 -2
  95. package/src/components/section/VcsFormSection.vue +6 -6
  96. package/src/components/section/VcsFormSection.vue.d.ts +2 -2
  97. package/src/components/style/VcsImageSelector.vue +14 -6
  98. package/src/components/style/VcsImageSelector.vue.d.ts +1 -0
  99. package/src/components/style/VcsStrokeSelector.vue +5 -2
  100. package/src/components/style/VcsStrokeSelector.vue.d.ts +1 -0
  101. package/src/components/style/VcsTextMenu.vue +2 -2
  102. package/src/components/tables/VcsDataTable.vue +14 -10
  103. package/src/components/tables/VcsDataTable.vue.d.ts +1 -0
  104. package/src/components/vector-properties/VcsVectorPropertiesComponent.vue +42 -31
  105. package/src/components/vector-properties/VcsVectorPropertiesComponent.vue.d.ts +1 -0
  106. package/src/components/viewpoint/VcsViewpointComponent.vue +12 -9
  107. package/src/components/viewpoint/VcsViewpointComponent.vue.d.ts +1 -0
  108. package/src/contentTree/contentTreeItem.d.ts +2 -2
  109. package/src/contentTree/contentTreeItem.js +1 -1
  110. package/src/featureInfo/BalloonComponent.vue +21 -13
  111. package/src/featureInfo/BalloonComponent.vue.d.ts +1 -0
  112. package/src/featureInfo/abstractFeatureInfoView.d.ts +4 -4
  113. package/src/featureInfo/abstractFeatureInfoView.js +4 -4
  114. package/src/featureInfo/featureInfo.d.ts +2 -2
  115. package/src/featureInfo/featureInfo.js +1 -1
  116. package/src/i18n/i18nCollection.d.ts +9 -15
  117. package/src/i18n/i18nCollection.js +3 -3
  118. package/src/legend/VcsLegend.vue +6 -2
  119. package/src/legend/VcsLegend.vue.d.ts +1 -0
  120. package/src/manager/collectionManager/CollectionComponentList.vue +1 -1
  121. package/src/manager/collectionManager/categoryManager.d.ts +1 -1
  122. package/src/manager/collectionManager/collectionComponentClass.d.ts +2 -2
  123. package/src/manager/collectionManager/collectionComponentClass.js +4 -4
  124. package/src/manager/collectionManager/collectionManager.d.ts +1 -1
  125. package/src/manager/toolbox/GroupToolboxComponent.vue +8 -6
  126. package/src/manager/toolbox/GroupToolboxComponent.vue.d.ts +1 -1
  127. package/src/manager/toolbox/SelectToolboxComponent.vue +8 -6
  128. package/src/manager/toolbox/SelectToolboxComponent.vue.d.ts +1 -1
  129. package/src/manager/toolbox/{ToolboxManager.vue → ToolboxManagerComponent.vue} +8 -5
  130. package/src/manager/toolbox/{ToolboxManager.vue.d.ts → ToolboxManagerComponent.vue.d.ts} +1 -1
  131. package/src/manager/window/WindowComponentHeader.vue +6 -3
  132. package/src/manager/window/WindowComponentHeader.vue.d.ts +1 -0
  133. package/src/manager/window/windowManager.d.ts +6 -6
  134. package/src/manager/window/windowManager.js +3 -3
  135. package/src/navigation/OrientationToolsButton.vue +2 -4
  136. package/src/navigation/TiltSlider.vue +3 -5
  137. package/src/search/SearchComponent.vue +8 -6
  138. package/src/search/SearchComponent.vue.d.ts +1 -1
  139. package/src/styles/vcsList.scss +1 -1
  140. package/src/uiConfig.d.ts +12 -3
  141. package/src/uiConfig.js +2 -1
  142. package/src/vcsUiApp.d.ts +41 -56
  143. package/src/vcsUiApp.js +34 -28
  144. package/src/vuePlugins/vuetify.d.ts +88 -62
  145. package/src/vuePlugins/vuetify.js +116 -20
  146. package/dist/assets/ui-7214428e.css +0 -1
  147. package/plugins/@vcmap-show-case/theme-changer/README.md +0 -23
  148. package/plugins/@vcmap-show-case/theme-changer/config.json +0 -69
  149. package/plugins/@vcmap-show-case/theme-changer/package.json +0 -11
  150. package/plugins/@vcmap-show-case/theme-changer/src/ThemeChangerComponent.vue +0 -120
  151. package/plugins/@vcmap-show-case/theme-changer/src/index.js +0 -108
  152. package/src/components/lists/VcsTreeviewLeaf.vue +0 -92
  153. /package/dist/assets/{cesium-126f111a.js → cesium-ccb4cc30.js} +0 -0
  154. /package/dist/assets/{ol-27f9b3f3.js → ol-e7981d5c.js} +0 -0
  155. /package/dist/assets/{vue-c78a5f76.js → vue-87bc6efe.js} +0 -0
  156. /package/src/components/lists/{VcsTreeviewLeaf.vue.d.ts → VcsTreeviewTitle.vue.d.ts} +0 -0
@@ -98,6 +98,7 @@ declare const _default: import("vue").DefineComponent<{
98
98
  idx: number;
99
99
  }[]>;
100
100
  selectedImageTypeTab: import("vue").Ref<number>;
101
+ cid: string;
101
102
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
102
103
  modelValue: {
103
104
  type: ObjectConstructor;
@@ -3,13 +3,13 @@
3
3
  <v-container class="px-1 py-0">
4
4
  <v-row no-gutters>
5
5
  <v-col>
6
- <VcsLabel html-for="draw-stroke-width">
6
+ <VcsLabel :html-for="`${cid}-draw-stroke-width`">
7
7
  {{ $t('components.style.lineWidth') }}
8
8
  </VcsLabel>
9
9
  </v-col>
10
10
  <v-col cols="3">
11
11
  <VcsTextField
12
- id="draw-stroke-width"
12
+ :id="`${cid}-draw-stroke-width`"
13
13
  v-model.number="width"
14
14
  :hide-spin-buttons="true"
15
15
  type="number"
@@ -38,6 +38,7 @@
38
38
  VRow,
39
39
  VCol,
40
40
  } from 'vuetify/components';
41
+ import { useComponentId } from '../composables.js';
41
42
  import VcsLabel from '../form-inputs-controls/VcsLabel.vue';
42
43
  import VcsTextField from '../form-inputs-controls/VcsTextField.vue';
43
44
  import { useColorObject } from './composables.js';
@@ -66,6 +67,7 @@
66
67
  },
67
68
  setup(props, { emit }) {
68
69
  const localValue = useProxiedComplexModel(props, 'modelValue', emit);
70
+ const cid = useComponentId();
69
71
  return {
70
72
  rgbaObject: useColorObject(() => localValue.value?.color),
71
73
  width: computed({
@@ -81,6 +83,7 @@
81
83
  updateColor(rgba) {
82
84
  localValue.value.color = [rgba.r, rgba.g, rgba.b, rgba.a];
83
85
  },
86
+ cid,
84
87
  };
85
88
  },
86
89
  };
@@ -12,6 +12,7 @@ declare const _default: import("vue").DefineComponent<{
12
12
  }>;
13
13
  width: import("vue").WritableComputedRef<any>;
14
14
  updateColor(rgba: any): void;
15
+ cid: string;
15
16
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
16
17
  modelValue: {
17
18
  type: ObjectConstructor;
@@ -6,7 +6,7 @@
6
6
  >
7
7
  <template #preview>
8
8
  <div v-if="modelValue" class="d-flex justify-center align-center">
9
- <span id="text-preview">T</span>
9
+ <span class="vcs-text-menu-preview">T</span>
10
10
  </div>
11
11
  </template>
12
12
  <template #content>
@@ -68,7 +68,7 @@
68
68
  </script>
69
69
 
70
70
  <style>
71
- #text-preview {
71
+ .vcs-text-menu-preview {
72
72
  font: v-bind(fontStyle) !important;
73
73
  font-size: 20px !important;
74
74
  -webkit-text-stroke-color: v-bind(strokeColor);
@@ -38,12 +38,8 @@
38
38
  v-model:items-per-page="itemsPerPageRef"
39
39
  @update:options="(o) => $emit('update:items', { ...o, search })"
40
40
  >
41
- <template v-for="slot of Object.keys($slots)" #[slot]="scope">
42
- <slot
43
- v-if="!['prepend', 'default', 'append'].includes(slot)"
44
- :name="slot"
45
- v-bind="scope"
46
- />
41
+ <template v-for="slot of forwardSlots" #[slot]="scope">
42
+ <slot :name="slot" v-bind="scope ?? {}" />
47
43
  </template>
48
44
  <template
49
45
  #header.data-table-select="{ allSelected, selectAll, someSelected }"
@@ -137,6 +133,7 @@
137
133
  import VcsTreeviewSearchbar from '../lists/VcsTreeviewSearchbar.vue';
138
134
  import VcsButton from '../buttons/VcsButton.vue';
139
135
  import VcsCheckbox from '../form-inputs-controls/VcsCheckbox.vue';
136
+ import { useForwardSlots } from '../composables.js';
140
137
 
141
138
  /**
142
139
  * @typedef {Object} UpdateItemsEvent
@@ -220,7 +217,7 @@
220
217
  default: 'isSelectable',
221
218
  },
222
219
  },
223
- setup(props, { attrs, emit }) {
220
+ setup(props, { attrs, emit, slots }) {
224
221
  const vm = getCurrentInstance().proxy;
225
222
  const hovering = ref(null);
226
223
  /**
@@ -366,6 +363,12 @@
366
363
  props.serverItemsLength > itemsPerPageRef.value,
367
364
  );
368
365
 
366
+ const forwardSlots = useForwardSlots(slots, [
367
+ 'prepend',
368
+ 'default',
369
+ 'append',
370
+ ]);
371
+
369
372
  return {
370
373
  hovering,
371
374
  search,
@@ -393,6 +396,7 @@
393
396
  handleSearch,
394
397
  translatedHeaders,
395
398
  showFooter,
399
+ forwardSlots,
396
400
  };
397
401
  },
398
402
  };
@@ -446,10 +450,10 @@
446
450
  }
447
451
 
448
452
  .v-table--density-compact {
449
- --v-table-header-height: var(--v-vcs-item-height);
450
- --v-table-row-height: var(--v-vcs-item-height);
453
+ --v-table-header-height: calc(var(--v-vcs-font-size) * 2 + 6px);
454
+ --v-table-row-height: calc(var(--v-vcs-font-size) * 2 + 6px);
451
455
  & :deep(.v-selection-control--density-default) {
452
- --v-selection-control-size: var(--v-vcs-item-height);
456
+ --v-selection-control-size: calc(var(--v-vcs-font-size) * 2 + 6px);
453
457
  }
454
458
  }
455
459
 
@@ -54,6 +54,7 @@ declare const _default: import("vue").DefineComponent<{
54
54
  handleSearch: () => void;
55
55
  translatedHeaders: ComputedRef<Object[]>;
56
56
  showFooter: import("vue").ComputedRef<boolean>;
57
+ forwardSlots: import("vue").ComputedRef<string[]>;
57
58
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
58
59
  headers: {
59
60
  type: ArrayConstructor;
@@ -9,13 +9,13 @@
9
9
  <template v-if="show3DProperties">
10
10
  <v-row v-if="visibleProperties.has('altitudeMode')" no-gutters>
11
11
  <v-col>
12
- <VcsLabel html-for="vp-altitude-mode">{{
12
+ <VcsLabel :html-for="`${cid}-vp-altitude-mode`">{{
13
13
  $t('components.vectorProperties.altitudeMode')
14
14
  }}</VcsLabel>
15
15
  </v-col>
16
16
  <v-col>
17
17
  <VcsSelect
18
- id="vp-altitude-mode"
18
+ :id="`${cid}-vp-altitude-mode`"
19
19
  :items="availableAltitudeModes"
20
20
  v-model="localValue.altitudeMode"
21
21
  />
@@ -29,13 +29,13 @@
29
29
  no-gutters
30
30
  >
31
31
  <v-col>
32
- <VcsLabel html-for="vp-height-above-ground">{{
32
+ <VcsLabel :html-for="`${cid}-vp-height-above-ground`">{{
33
33
  $t('components.vectorProperties.heightAboveGround')
34
34
  }}</VcsLabel>
35
35
  </v-col>
36
36
  <v-col>
37
37
  <VcsTextField
38
- id="vp-height-above-ground"
38
+ :id="`${cid}-vp-height-above-ground`"
39
39
  v-model.number="localValue.heightAboveGround"
40
40
  :hide-spin-buttons="true"
41
41
  type="number"
@@ -46,13 +46,13 @@
46
46
  </v-row>
47
47
  <v-row v-if="visibleProperties.has('groundLevel')" no-gutters>
48
48
  <v-col>
49
- <VcsLabel html-for="vp-ground-level">{{
49
+ <VcsLabel :html-for="`${cid}-vp-ground-level`">{{
50
50
  $t('components.vectorProperties.groundLevel')
51
51
  }}</VcsLabel>
52
52
  </v-col>
53
53
  <v-col>
54
54
  <VcsTextField
55
- id="vp-ground-level"
55
+ :id="`${cid}-vp-ground-level`"
56
56
  v-model.number="localValue.groundLevel"
57
57
  :hide-spin-buttons="true"
58
58
  type="number"
@@ -142,13 +142,13 @@
142
142
  no-gutters
143
143
  >
144
144
  <v-col>
145
- <VcsLabel html-for="vp-classification-type">
145
+ <VcsLabel :html-for="`${cid}-vp-classification-type`">
146
146
  {{ $t('components.vectorProperties.classificationType') }}
147
147
  </VcsLabel>
148
148
  </v-col>
149
149
  <v-col>
150
150
  <VcsSelect
151
- id="vp-classification-type"
151
+ :id="`${cid}-vp-classification-type`"
152
152
  :items="availableClassificationTypes"
153
153
  v-model="classificationType"
154
154
  />
@@ -186,7 +186,7 @@
186
186
  <v-row v-if="visibleProperties.has('extrudedHeight')" no-gutters>
187
187
  <v-col>
188
188
  <VcsLabel
189
- html-for="vp-extruded-height"
189
+ :html-for="`${cid}-vp-extruded-height`"
190
190
  :class="{
191
191
  'px-4':
192
192
  visibleProperties.has('storeysAboveGround') ||
@@ -197,7 +197,7 @@
197
197
  </v-col>
198
198
  <v-col>
199
199
  <VcsTextField
200
- id="vp-extruded-height"
200
+ :id="`${cid}-vp-extruded-height`"
201
201
  v-model.number="localValue.extrudedHeight"
202
202
  :hide-spin-buttons="true"
203
203
  type="number"
@@ -212,13 +212,13 @@
212
212
  </v-row>
213
213
  <v-row v-if="visibleProperties.has('storeysAboveGround')" no-gutters>
214
214
  <v-col>
215
- <VcsLabel html-for="vp-storeys-above" class="px-4">{{
215
+ <VcsLabel :html-for="`${cid}-vp-storeys-above`" class="px-4">{{
216
216
  $t('components.vectorProperties.storeys')
217
217
  }}</VcsLabel>
218
218
  </v-col>
219
219
  <v-col>
220
220
  <VcsTextField
221
- id="vp-storeys-above"
221
+ :id="`${cid}-vp-storeys-above`"
222
222
  v-model.number="localValue.storeysAboveGround"
223
223
  :hide-spin-buttons="true"
224
224
  type="number"
@@ -235,13 +235,15 @@
235
235
  no-gutters
236
236
  >
237
237
  <v-col>
238
- <VcsLabel :html-for="'vp-storey-heights-above'" class="px-4">{{
239
- $t('components.vectorProperties.storeyHeights')
240
- }}</VcsLabel>
238
+ <VcsLabel
239
+ :html-for="`${cid}-vp-storey-heights-above`"
240
+ class="px-4"
241
+ >{{ $t('components.vectorProperties.storeyHeights') }}</VcsLabel
242
+ >
241
243
  </v-col>
242
244
  <v-col>
243
245
  <VcsChipArrayInput
244
- id="vp-storey-heights-above"
246
+ :id="`${cid}-vp-storey-heights-above`"
245
247
  column
246
248
  type="number"
247
249
  v-model="storeyHeights.storeyHeightsAboveGround.value"
@@ -266,7 +268,7 @@
266
268
  <v-row v-if="visibleProperties.has('skirt')" no-gutters>
267
269
  <v-col>
268
270
  <VcsLabel
269
- html-for="vp-skirt"
271
+ :html-for="`${cid}-vp-skirt`"
270
272
  :class="{
271
273
  'px-4':
272
274
  visibleProperties.has('storeysBelowGround') ||
@@ -277,7 +279,7 @@
277
279
  </v-col>
278
280
  <v-col>
279
281
  <VcsTextField
280
- id="vp-skirt"
282
+ :id="`${cid}-vp-skirt`"
281
283
  v-model.number="localValue.skirt"
282
284
  :hide-spin-buttons="true"
283
285
  type="number"
@@ -292,13 +294,13 @@
292
294
  </v-row>
293
295
  <v-row v-if="visibleProperties.has('storeysBelowGround')" no-gutters>
294
296
  <v-col>
295
- <VcsLabel html-for="vp-storeys-below" class="px-4">{{
297
+ <VcsLabel :html-for="`${cid}-vp-storeys-below`" class="px-4">{{
296
298
  $t('components.vectorProperties.storeys')
297
299
  }}</VcsLabel>
298
300
  </v-col>
299
301
  <v-col>
300
302
  <VcsTextField
301
- id="vp-storeys-below"
303
+ :id="`${cid}-vp-storeys-below`"
302
304
  v-model.number="localValue.storeysBelowGround"
303
305
  :hide-spin-buttons="true"
304
306
  type="number"
@@ -315,13 +317,15 @@
315
317
  no-gutters
316
318
  >
317
319
  <v-col>
318
- <VcsLabel :html-for="'vp-storey-heights-below'" class="px-4">{{
319
- $t('components.vectorProperties.storeyHeights')
320
- }}</VcsLabel>
320
+ <VcsLabel
321
+ :html-for="`${cid}-vp-storey-heights-below`"
322
+ class="px-4"
323
+ >{{ $t('components.vectorProperties.storeyHeights') }}</VcsLabel
324
+ >
321
325
  </v-col>
322
326
  <v-col>
323
327
  <VcsChipArrayInput
324
- :id="'vp-storey-heights-below'"
328
+ :id="`${cid}-vp-storey-heights-below`"
325
329
  column
326
330
  type="number"
327
331
  v-model="storeyHeights.storeyHeightsBelowGround.value"
@@ -348,13 +352,13 @@
348
352
  <v-container class="px-1 py-0">
349
353
  <v-row v-if="visibleProperties.has('modelUrl')" no-gutters>
350
354
  <v-col>
351
- <VcsLabel html-for="vp-model-url">
355
+ <VcsLabel :html-for="`${cid}-vp-model-url`">
352
356
  {{ $t('components.vectorProperties.modelUrl') }}
353
357
  </VcsLabel>
354
358
  </v-col>
355
359
  <v-col>
356
360
  <VcsTextField
357
- id="vp-model-url"
361
+ :id="`${cid}-vp-model-url`"
358
362
  v-model="localValue.modelUrl"
359
363
  clearable
360
364
  :placeholder="'modelUrl' in localValue ? 'example.glb' : ''"
@@ -384,12 +388,13 @@
384
388
  </template>
385
389
  <v-row v-if="visibleProperties.has('modelHeading')" no-gutters>
386
390
  <v-col cols="6">
387
- <VcsLabel>{{
391
+ <VcsLabel :html-for="`${cid}-vp-model-heading`">{{
388
392
  $t('components.vectorProperties.modelHeading')
389
393
  }}</VcsLabel>
390
394
  </v-col>
391
395
  <v-col>
392
396
  <VcsTextField
397
+ :id="`${cid}-vp-model-heading`"
393
398
  v-model.number="localValue.modelHeading"
394
399
  :hide-spin-buttons="true"
395
400
  type="number"
@@ -401,12 +406,13 @@
401
406
  </v-row>
402
407
  <v-row v-if="visibleProperties.has('modelPitch')" no-gutters>
403
408
  <v-col cols="6">
404
- <VcsLabel>{{
409
+ <VcsLabel :html-for="`${cid}-vp-model-pitch`">{{
405
410
  $t('components.vectorProperties.modelPitch')
406
411
  }}</VcsLabel>
407
412
  </v-col>
408
413
  <v-col>
409
414
  <VcsTextField
415
+ :id="`${cid}-vp-model-pitch`"
410
416
  v-model.number="localValue.modelPitch"
411
417
  :hide-spin-buttons="true"
412
418
  type="number"
@@ -418,12 +424,13 @@
418
424
  </v-row>
419
425
  <v-row v-if="visibleProperties.has('modelRoll')" no-gutters>
420
426
  <v-col cols="6">
421
- <VcsLabel>{{
427
+ <VcsLabel :html-for="`${cid}-vp-model-roll`">{{
422
428
  $t('components.vectorProperties.modelRoll')
423
429
  }}</VcsLabel>
424
430
  </v-col>
425
431
  <v-col>
426
432
  <VcsTextField
433
+ :id="`${cid}-vp-model-roll`"
427
434
  v-model.number="localValue.modelRoll"
428
435
  :hide-spin-buttons="true"
429
436
  type="number"
@@ -435,13 +442,13 @@
435
442
  </v-row>
436
443
  <v-row v-if="visibleProperties.has('baseUrl')" no-gutters>
437
444
  <v-col>
438
- <VcsLabel html-for="vp-base-url">{{
445
+ <VcsLabel :html-for="`${cid}-vp-base-url`">{{
439
446
  $t('components.vectorProperties.baseUrl')
440
447
  }}</VcsLabel>
441
448
  </v-col>
442
449
  <v-col>
443
450
  <VcsTextField
444
- id="vp-base-url"
451
+ :id="`${cid}-vp-base-url`"
445
452
  clearable
446
453
  v-model="localValue.baseUrl"
447
454
  :placeholder="'baseUrl' in localValue ? 'path/to/files/' : ''"
@@ -466,6 +473,7 @@
466
473
  import VcsSelect from '../form-inputs-controls/VcsSelect.vue';
467
474
  import VcsCheckbox from '../form-inputs-controls/VcsCheckbox.vue';
468
475
  import VcsChipArrayInput from '../form-inputs-controls/VcsChipArrayInput.vue';
476
+ import { useComponentId } from '../composables.js';
469
477
 
470
478
  export const genericVectorProperties = [
471
479
  'altitudeMode',
@@ -698,6 +706,8 @@
698
706
  : [],
699
707
  );
700
708
 
709
+ const cid = useComponentId();
710
+
701
711
  return {
702
712
  localValue,
703
713
  headerActions,
@@ -712,6 +722,7 @@
712
722
  storeyHeights,
713
723
  modelScale,
714
724
  dimensionsUpperCase,
725
+ cid,
715
726
  };
716
727
  },
717
728
  };
@@ -241,6 +241,7 @@ declare const _default: import("vue").DefineComponent<{
241
241
  storeyHeights: import("vue").ComputedRef<{}>;
242
242
  modelScale: import("vue").ComputedRef<{}>;
243
243
  dimensionsUpperCase: string[];
244
+ cid: string;
244
245
  }, any, {}, {
245
246
  computed: typeof import("@vue/reactivity").computed;
246
247
  }, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:modelValue"[], "update:modelValue", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
@@ -9,13 +9,13 @@
9
9
  <v-container class="py-0 px-1">
10
10
  <v-row no-gutters v-if="!hideName">
11
11
  <v-col cols="6">
12
- <VcsLabel html-for="name" dense required>
12
+ <VcsLabel :html-for="`${cid}-name`" dense required>
13
13
  {{ $t('components.viewpoint.name') }}
14
14
  </VcsLabel>
15
15
  </v-col>
16
16
  <v-col>
17
17
  <VcsTextField
18
- id="name"
18
+ :id="`${cid}-name`"
19
19
  clearable
20
20
  v-model="localValue.name"
21
21
  :rules="nameRules"
@@ -24,13 +24,13 @@
24
24
  </v-row>
25
25
  <v-row no-gutters v-if="!hideTitle">
26
26
  <v-col cols="6">
27
- <VcsLabel html-for="title" dense>
27
+ <VcsLabel :html-for="`${cid}-title`" dense>
28
28
  {{ $t('components.viewpoint.title') }}
29
29
  </VcsLabel>
30
30
  </v-col>
31
31
  <v-col>
32
32
  <VcsTextField
33
- id="title"
33
+ :id="`${cid}-title`"
34
34
  clearable
35
35
  :placeholder="$t('components.viewpoint.titlePlaceholder')"
36
36
  v-model="title"
@@ -40,7 +40,6 @@
40
40
  <v-row no-gutters v-if="!hideAnimate">
41
41
  <v-col cols="6">
42
42
  <VcsCheckbox
43
- id="animate"
44
43
  label="components.viewpoint.animate"
45
44
  v-model="localValue.animate"
46
45
  />
@@ -48,7 +47,6 @@
48
47
  <v-col>
49
48
  <VcsTextField
50
49
  v-if="localValue.animate"
51
- id="duration"
52
50
  clearable
53
51
  :hide-spin-buttons="true"
54
52
  type="number"
@@ -102,12 +100,13 @@
102
100
  <template v-if="!isCesiumMap">
103
101
  <v-row no-gutters>
104
102
  <v-col>
105
- <VcsLabel html-for="distance" dense>
103
+ <VcsLabel :html-for="`${cid}-distance`" dense>
106
104
  {{ $t('components.viewpoint.distance') }}
107
105
  </VcsLabel>
108
106
  </v-col>
109
107
  <v-col>
110
108
  <VcsTextField
109
+ :id="`${cid}-distance`"
111
110
  :min="0"
112
111
  :step="100"
113
112
  prefix="d"
@@ -128,13 +127,13 @@
128
127
  <div v-for="key in ['heading', 'pitch', 'roll']" :key="key">
129
128
  <v-row no-gutters>
130
129
  <v-col cols="9">
131
- <VcsLabel :html-for="key" dense>
130
+ <VcsLabel :html-for="`${cid}-${key}`" dense>
132
131
  {{ $st(`components.viewpoint.${key}`) }}
133
132
  </VcsLabel>
134
133
  </v-col>
135
134
  <v-col cols="3">
136
135
  <VcsTextField
137
- :id="key"
136
+ :id="`${cid}-${key}`"
138
137
  :hide-spin-buttons="true"
139
138
  type="number"
140
139
  unit="°"
@@ -188,6 +187,7 @@
188
187
  import VcsCoordinate from '../form-inputs-controls/VcsCoordinate.vue';
189
188
  import VcsSlider from '../form-inputs-controls/VcsSlider.vue';
190
189
  import { useProxiedComplexModel } from '../modelHelper.js';
190
+ import { useComponentId } from '../composables.js';
191
191
 
192
192
  /**
193
193
  * Updates the localValue ref by keeping name and properties
@@ -489,6 +489,8 @@
489
489
  }
490
490
  }
491
491
 
492
+ const cid = useComponentId();
493
+
492
494
  return {
493
495
  isCesiumMap,
494
496
  localValue,
@@ -500,6 +502,7 @@
500
502
  hprSliderOptions,
501
503
  isFiniteNumber,
502
504
  isPositiveNumber,
505
+ cid,
503
506
  };
504
507
  },
505
508
  };
@@ -79,6 +79,7 @@ declare const _default: import("vue").DefineComponent<{
79
79
  };
80
80
  isFiniteNumber: typeof isFiniteNumber;
81
81
  isPositiveNumber: typeof isPositiveNumber;
82
+ cid: string;
82
83
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:modelValue"[], "update:modelValue", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
83
84
  modelValue: {
84
85
  type: ObjectConstructor;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * @type {ClassRegistry<import("@vcmap/core").Ctor<typeof ContentTreeItem>>}
2
+ * @type {ClassRegistry<typeof ContentTreeItem>}
3
3
  */
4
- export const contentTreeClassRegistry: ClassRegistry<import("@vcmap/core").Ctor<typeof ContentTreeItem>>;
4
+ export const contentTreeClassRegistry: ClassRegistry<typeof ContentTreeItem>;
5
5
  export default ContentTreeItem;
6
6
  export type ContentTreeItemOptions = {
7
7
  type?: string | undefined;
@@ -47,7 +47,7 @@ import { executeCallbacks } from '../callback/vcsCallback.js';
47
47
  const actionWeightSymbol = Symbol('ActionWeight');
48
48
 
49
49
  /**
50
- * @type {ClassRegistry<import("@vcmap/core").Ctor<typeof ContentTreeItem>>}
50
+ * @type {ClassRegistry<typeof ContentTreeItem>}
51
51
  */
52
52
  export const contentTreeClassRegistry = new ClassRegistry();
53
53
 
@@ -2,19 +2,23 @@
2
2
  <v-card class="mx-auto elevation-0" v-if="position">
3
3
  <slot name="balloon-header" :attrs="{ ...$props, ...$attrs }">
4
4
  <v-list-item class="px-1">
5
- <template #prepend>
6
- <div class="pl-1 pr-2">
7
- <v-icon color="primary" size="16"> $vcsInfo </v-icon>
8
- </div>
5
+ <template #prepend="prependScope">
6
+ <slot name="prepend" v-bind="prependScope">
7
+ <div class="pl-1 pr-2">
8
+ <v-icon color="primary" :size="iconSize"> $vcsInfo </v-icon>
9
+ </div>
10
+ </slot>
9
11
  </template>
10
- <v-list-item-title>
11
- <h3 class="font-weight-bold">
12
- {{ $st(balloonTitle) }}
13
- </h3>
14
- </v-list-item-title>
15
- <v-list-item-subtitle v-if="balloonSubtitle">
16
- {{ $st(balloonSubtitle) }}
17
- </v-list-item-subtitle>
12
+ <slot name="balloon-title" :attrs="{ ...$props, ...$attrs }">
13
+ <v-list-item-title>
14
+ <h3 class="font-weight-bold">
15
+ {{ $st(balloonTitle) }}
16
+ </h3>
17
+ </v-list-item-title>
18
+ <v-list-item-subtitle v-if="balloonSubtitle">
19
+ {{ $st(balloonSubtitle) }}
20
+ </v-list-item-subtitle>
21
+ </slot>
18
22
  <template #append>
19
23
  <VcsButton
20
24
  @click.stop="close"
@@ -73,6 +77,7 @@
73
77
  import { setupBalloonPositionListener } from './balloonHelper.js';
74
78
  import VcsButton from '../components/buttons/VcsButton.vue';
75
79
  import { getTag, getTagOptions } from '../components/tables/VcsTable.vue';
80
+ import { useIconSize } from '../vuePlugins/vuetify.js';
76
81
 
77
82
  /**
78
83
  * @description A balloon viewing feature attributes. Size dynamic dependent on number of attributes.
@@ -84,7 +89,9 @@
84
89
  * @vue-prop {Object} tags - optional object containing keys rendered as tags
85
90
  * @vue-prop {Array<import("ol/coordinate").Coordinate>} position - clicked position balloon is rendered at
86
91
  * @vue-data {slot} [#balloon-header] - slot to override balloon header, $props and $attrs are passed to `attrs`
92
+ * @vue-data {slot} [#balloon-title] - slot to override balloon title and subtitle, $props and $attrs are passed to `attrs`. Is overwritten by balloon-header slot.
87
93
  * @vue-data {slot} [#default] - slot to override balloon content, $props and $attrs are passed to `attrs`
94
+ * @vue-data {slot} [#prepend] - slot to override balloon header icon
88
95
  */
89
96
  export default {
90
97
  name: 'BalloonComponent',
@@ -186,8 +193,9 @@
186
193
  app.windowManager.remove(attrs['window-state'].id);
187
194
  destroyListener();
188
195
  };
189
-
196
+ const iconSize = useIconSize();
190
197
  return {
198
+ iconSize,
191
199
  close,
192
200
  getTag,
193
201
  getTagOptions,
@@ -24,6 +24,7 @@ declare const _default: import("vue").DefineComponent<{
24
24
  default: null;
25
25
  };
26
26
  }, {
27
+ iconSize: import("vue").ComputedRef<number>;
27
28
  close: () => void;
28
29
  getTag: typeof getTag;
29
30
  getTagOptions: typeof getTagOptions;
@@ -103,7 +103,7 @@ export type FeatureInfoViewOptions = import("@vcmap/core").VcsObjectOptions & {
103
103
  keyMapping?: Record<string, string>;
104
104
  valueMapping?: Record<string, string | Record<string, string>>;
105
105
  tags?: Record<string, HTMLTagOptions>;
106
- window?: import("../manager/window/windowManager.js").WindowComponentOptions;
106
+ window?: Pick<import("../manager/window/windowManager.js").WindowComponentOptions, 'state' | 'slot' | 'position'>;
107
107
  };
108
108
  /**
109
109
  * Abstract class to be extended by FeatureInfoView classes
@@ -145,7 +145,7 @@ declare class AbstractFeatureInfoView extends VcsObject {
145
145
  [x: string]: HTMLTagOptions;
146
146
  };
147
147
  /**
148
- * @type {import("../manager/window/windowManager.js").WindowComponentOptions|Object}
148
+ * @type {Pick<import("../manager/window/windowManager.js").WindowComponentOptions,'state'|'slot'|'position'>|Object}
149
149
  * @private
150
150
  */
151
151
  private _window;
@@ -156,9 +156,9 @@ declare class AbstractFeatureInfoView extends VcsObject {
156
156
  private _component;
157
157
  /**
158
158
  * window options, configured in a module, used only internally by AbstractFeatureInfoView or subclass
159
- * @type {import("../manager/window/windowManager.js").WindowComponentOptions|Object}
159
+ * @type {Pick<import("../manager/window/windowManager.js").WindowComponentOptions<FeatureInfoProps>,'state'|'slot'|'position'>|Object}
160
160
  */
161
- get window(): Object | import("../manager/window/windowManager.js").WindowComponentOptions<Object>;
161
+ get window(): Object | Pick<import("../manager/window/windowManager.js").WindowComponentOptions<FeatureInfoProps>, "slot" | "state" | "position">;
162
162
  /**
163
163
  * component provided by a FeatureInfoView class, passed to featureInfo via `getWindowComponentOptions()`
164
164
  * @type {import("vue").Component<FeatureInfoProps, unknown, unknown>|undefined}