@vcmap/ui 6.2.0-rc.1 → 6.2.0-rc.3

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 (193) hide show
  1. package/build/build.js +52 -7
  2. package/build/postInstall.js +32 -0
  3. package/config/dev.config.json +40 -0
  4. package/config/pano.config.json +420 -0
  5. package/config/projects.config.json +5 -0
  6. package/dist/assets/cesium/Workers/{chunk-P6TRGU3S.js → chunk-2PFJ45KC.js} +2 -2
  7. package/dist/assets/cesium/Workers/{chunk-7ZZ5LMZY.js → chunk-35ALNMG5.js} +15 -15
  8. package/dist/assets/cesium/Workers/{chunk-7YIOHQWH.js → chunk-35EJBV7X.js} +13 -13
  9. package/dist/assets/cesium/Workers/{chunk-EJVGYGLF.js → chunk-3E3OH65K.js} +7 -7
  10. package/dist/assets/cesium/Workers/{chunk-JBSKHTNX.js → chunk-4FHUY275.js} +4 -4
  11. package/dist/assets/cesium/Workers/{chunk-Z2QP3CXW.js → chunk-565T3GIE.js} +2 -2
  12. package/dist/assets/cesium/Workers/{chunk-IZGUQO6Q.js → chunk-5LGDCKCZ.js} +13 -13
  13. package/dist/assets/cesium/Workers/{chunk-3IFRSGEY.js → chunk-6JXJYBWN.js} +9 -9
  14. package/dist/assets/cesium/Workers/{chunk-WGDFYAGC.js → chunk-6RAEC3AW.js} +4 -4
  15. package/dist/assets/cesium/Workers/{chunk-44QAAS4P.js → chunk-6Z67VIOY.js} +7 -7
  16. package/dist/assets/cesium/Workers/{chunk-NGZJIN5Z.js → chunk-ADDGROZ6.js} +4 -4
  17. package/dist/assets/cesium/Workers/{chunk-GBT7MJ6X.js → chunk-ASYGMBRG.js} +1 -1
  18. package/dist/assets/cesium/Workers/{chunk-C4WPMOKT.js → chunk-BABDQOWA.js} +5 -5
  19. package/dist/assets/cesium/Workers/{chunk-IBRIWOCM.js → chunk-BQHHGIFB.js} +13 -13
  20. package/dist/assets/cesium/Workers/{chunk-LLAF3CPH.js → chunk-C33B4KHN.js} +2 -2
  21. package/dist/assets/cesium/Workers/{chunk-JXVLNVXC.js → chunk-CMCR2ZK4.js} +7 -7
  22. package/dist/assets/cesium/Workers/{chunk-3HQMMUPU.js → chunk-EGGJIATZ.js} +1 -1
  23. package/dist/assets/cesium/Workers/{chunk-RJM36CNY.js → chunk-EWS5LXAB.js} +6 -6
  24. package/dist/assets/cesium/Workers/{chunk-OPP2SKMA.js → chunk-FDXPBTSX.js} +12 -12
  25. package/dist/assets/cesium/Workers/{chunk-QN6TBED4.js → chunk-FIFQP4YX.js} +11 -11
  26. package/dist/assets/cesium/Workers/{chunk-JISPSEF3.js → chunk-HOGDZ2EB.js} +4 -4
  27. package/dist/assets/cesium/Workers/{chunk-2PTKXHJB.js → chunk-I4NB77NH.js} +10 -10
  28. package/dist/assets/cesium/Workers/{chunk-QQOZO7KO.js → chunk-JX4A2BCF.js} +7 -7
  29. package/dist/assets/cesium/Workers/{chunk-XIUSRWL6.js → chunk-K6PDUSH6.js} +5 -5
  30. package/dist/assets/cesium/Workers/{chunk-KHZNBFOH.js → chunk-KFHZFU5O.js} +7 -7
  31. package/dist/assets/cesium/Workers/{chunk-U5HSOKPQ.js → chunk-KYGXRFA6.js} +1 -1
  32. package/dist/assets/cesium/Workers/{chunk-56EDBCGT.js → chunk-LNWNAP2C.js} +10 -10
  33. package/dist/assets/cesium/Workers/{chunk-YCDZX5LS.js → chunk-LWN2B3KW.js} +1 -1
  34. package/dist/assets/cesium/Workers/{chunk-TI3TRKIC.js → chunk-LXLABO2L.js} +10 -10
  35. package/dist/assets/cesium/Workers/{chunk-C3EQ27WF.js → chunk-MB6B2UUL.js} +6 -6
  36. package/dist/assets/cesium/Workers/{chunk-57H6I3SV.js → chunk-MZSRINXK.js} +5 -5
  37. package/dist/assets/cesium/Workers/{chunk-ZVUUPJEM.js → chunk-NBI3GZSK.js} +17 -17
  38. package/dist/assets/cesium/Workers/{chunk-O72GZTSE.js → chunk-NUAXNUP5.js} +2 -2
  39. package/dist/assets/cesium/Workers/{chunk-M24KHENR.js → chunk-PNZR4RLL.js} +2 -2
  40. package/dist/assets/cesium/Workers/{chunk-HJMNR3GC.js → chunk-Q4K22DSJ.js} +11 -11
  41. package/dist/assets/cesium/Workers/{chunk-2LOWCAMW.js → chunk-Q4OS4EFN.js} +13 -13
  42. package/dist/assets/cesium/Workers/{chunk-TK5IIG2F.js → chunk-QLIMO7TQ.js} +4 -4
  43. package/dist/assets/cesium/Workers/{chunk-EDLRS3AW.js → chunk-RQ4F6YFU.js} +6 -6
  44. package/dist/assets/cesium/Workers/{chunk-JSQJDZI4.js → chunk-SB67D3JL.js} +6 -6
  45. package/dist/assets/cesium/Workers/{chunk-RTJKHZWU.js → chunk-SS6WRJ5J.js} +6 -6
  46. package/dist/assets/cesium/Workers/{chunk-L5GODJAR.js → chunk-TC4NTWIJ.js} +14 -14
  47. package/dist/assets/cesium/Workers/{chunk-IZJ42N4W.js → chunk-TKNA6WSZ.js} +17 -17
  48. package/dist/assets/cesium/Workers/{chunk-HP5XLODI.js → chunk-VQYEP77L.js} +6 -6
  49. package/dist/assets/cesium/Workers/{chunk-YSIJTJ7N.js → chunk-WKS5H3VW.js} +5 -5
  50. package/dist/assets/cesium/Workers/{chunk-XWOUPGUF.js → chunk-WPGX7DEA.js} +1 -1
  51. package/dist/assets/cesium/Workers/{chunk-6SQMLVGV.js → chunk-X3EPFVG3.js} +7 -7
  52. package/dist/assets/cesium/Workers/{chunk-NDDI2LWR.js → chunk-XH7MSR3A.js} +6 -6
  53. package/dist/assets/cesium/Workers/{chunk-FFLMY4TE.js → chunk-YDEBBUNQ.js} +5 -5
  54. package/dist/assets/cesium/Workers/{chunk-YK3QIKY7.js → chunk-YSVI7YNN.js} +9 -9
  55. package/dist/assets/cesium/Workers/{chunk-BVKITG4N.js → chunk-YVAS5WPH.js} +7 -7
  56. package/dist/assets/cesium/Workers/{chunk-X7IQYYHF.js → chunk-Z4QVAZM6.js} +2 -2
  57. package/dist/assets/cesium/Workers/{chunk-LJ2JQHJT.js → chunk-ZXOK77EW.js} +7 -7
  58. package/dist/assets/cesium/Workers/combineGeometry.js +22 -22
  59. package/dist/assets/cesium/Workers/createBoxGeometry.js +16 -16
  60. package/dist/assets/cesium/Workers/createBoxOutlineGeometry.js +14 -14
  61. package/dist/assets/cesium/Workers/createCircleGeometry.js +24 -24
  62. package/dist/assets/cesium/Workers/createCircleOutlineGeometry.js +17 -17
  63. package/dist/assets/cesium/Workers/createCoplanarPolygonGeometry.js +31 -31
  64. package/dist/assets/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +29 -29
  65. package/dist/assets/cesium/Workers/createCorridorGeometry.js +27 -27
  66. package/dist/assets/cesium/Workers/createCorridorOutlineGeometry.js +26 -26
  67. package/dist/assets/cesium/Workers/createCylinderGeometry.js +18 -18
  68. package/dist/assets/cesium/Workers/createCylinderOutlineGeometry.js +16 -16
  69. package/dist/assets/cesium/Workers/createEllipseGeometry.js +24 -24
  70. package/dist/assets/cesium/Workers/createEllipseOutlineGeometry.js +17 -17
  71. package/dist/assets/cesium/Workers/createEllipsoidGeometry.js +17 -17
  72. package/dist/assets/cesium/Workers/createEllipsoidOutlineGeometry.js +16 -16
  73. package/dist/assets/cesium/Workers/createFrustumGeometry.js +16 -16
  74. package/dist/assets/cesium/Workers/createFrustumOutlineGeometry.js +16 -16
  75. package/dist/assets/cesium/Workers/createGeometry.js +22 -22
  76. package/dist/assets/cesium/Workers/createGroundPolylineGeometry.js +20 -20
  77. package/dist/assets/cesium/Workers/createPlaneGeometry.js +14 -14
  78. package/dist/assets/cesium/Workers/createPlaneOutlineGeometry.js +13 -13
  79. package/dist/assets/cesium/Workers/createPolygonGeometry.js +30 -30
  80. package/dist/assets/cesium/Workers/createPolygonOutlineGeometry.js +28 -28
  81. package/dist/assets/cesium/Workers/createPolylineGeometry.js +23 -23
  82. package/dist/assets/cesium/Workers/createPolylineVolumeGeometry.js +29 -29
  83. package/dist/assets/cesium/Workers/createPolylineVolumeOutlineGeometry.js +25 -25
  84. package/dist/assets/cesium/Workers/createRectangleGeometry.js +25 -25
  85. package/dist/assets/cesium/Workers/createRectangleOutlineGeometry.js +18 -18
  86. package/dist/assets/cesium/Workers/createSimplePolylineGeometry.js +21 -21
  87. package/dist/assets/cesium/Workers/createSphereGeometry.js +17 -17
  88. package/dist/assets/cesium/Workers/createSphereOutlineGeometry.js +16 -16
  89. package/dist/assets/cesium/Workers/createTaskProcessorWorker.js +3 -3
  90. package/dist/assets/cesium/Workers/createVectorTileClampedPolylines.js +13 -13
  91. package/dist/assets/cesium/Workers/createVectorTileGeometries.js +22 -22
  92. package/dist/assets/cesium/Workers/createVectorTilePoints.js +12 -12
  93. package/dist/assets/cesium/Workers/createVectorTilePolygons.js +20 -20
  94. package/dist/assets/cesium/Workers/createVectorTilePolylines.js +13 -13
  95. package/dist/assets/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +20 -20
  96. package/dist/assets/cesium/Workers/createVerticesFromHeightmap.js +20 -20
  97. package/dist/assets/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +17 -17
  98. package/dist/assets/cesium/Workers/createWallGeometry.js +22 -22
  99. package/dist/assets/cesium/Workers/createWallOutlineGeometry.js +21 -21
  100. package/dist/assets/cesium/Workers/decodeDraco.js +11 -11
  101. package/dist/assets/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
  102. package/dist/assets/cesium/Workers/decodeI3S.js +10 -10
  103. package/dist/assets/cesium/Workers/transcodeKTX2.js +7 -7
  104. package/dist/assets/cesium/Workers/transferTypedArrayTest.js +1 -1
  105. package/dist/assets/cesium/Workers/upsampleQuantizedTerrainMesh.js +20 -20
  106. package/dist/assets/{cesium-ac6c193a.js → cesium-7d4ab914.js} +44609 -44606
  107. package/dist/assets/cesium.js +1 -1
  108. package/dist/assets/core-deeb2b8d.js +34569 -0
  109. package/dist/assets/core-workers/panoramaImageWorker.js +1 -0
  110. package/dist/assets/core-workers/panoramaImageWorker.js-f8148bc6.js +34 -0
  111. package/dist/assets/core.js +1 -1
  112. package/dist/assets/{ol-94c57f2e.js → ol-8db5c824.js} +1 -1
  113. package/dist/assets/ol.js +1 -1
  114. package/dist/assets/start.js +3 -1
  115. package/dist/assets/ui-62439099.css +1 -0
  116. package/dist/assets/{ui-4f308e45.js → ui-62439099.js} +9581 -8853
  117. package/dist/assets/ui.js +1 -1
  118. package/dist/assets/vue.js +1 -1
  119. package/dist/assets/{vuetify-99195777.js → vuetify-439ba6d5.js} +1 -1
  120. package/dist/assets/vuetify.js +1 -1
  121. package/index.d.ts +14 -4
  122. package/index.js +8 -6
  123. package/package.json +5 -4
  124. package/plugins/@vcmap-show-case/panorama-inspector/package.json +10 -0
  125. package/plugins/@vcmap-show-case/panorama-inspector/src/PanoramaDebugInfo.vue +86 -0
  126. package/plugins/@vcmap-show-case/panorama-inspector/src/PanoramaDebugTools.vue +259 -0
  127. package/plugins/@vcmap-show-case/panorama-inspector/src/PanoramaInspector.vue +31 -0
  128. package/plugins/@vcmap-show-case/panorama-inspector/src/api.js +161 -0
  129. package/plugins/@vcmap-show-case/panorama-inspector/src/index.js +57 -0
  130. package/plugins/@vcmap-show-case/panorama-inspector/src/showClickInteraction.js +20 -0
  131. package/plugins/package.json +1 -1
  132. package/src/actions/actionHelper.d.ts +16 -11
  133. package/src/actions/actionHelper.js +190 -87
  134. package/src/actions/flightActions.d.ts +10 -0
  135. package/src/actions/flightActions.js +109 -13
  136. package/src/application/VcsApp.vue +11 -0
  137. package/src/application/VcsApp.vue.d.ts +4 -0
  138. package/src/application/VcsContainer.vue.d.ts +4 -0
  139. package/src/application/VcsMainMap.vue +40 -2
  140. package/src/application/VcsMainMap.vue.d.ts +4 -0
  141. package/src/application/VcsMap.vue +0 -9
  142. package/src/application/VcsNavbar.vue +2 -1
  143. package/src/callback/activateMapCallback.d.ts +30 -0
  144. package/src/callback/activateMapCallback.js +63 -0
  145. package/src/callback/activateOverviewMapCallback.d.ts +7 -0
  146. package/src/callback/activateOverviewMapCallback.js +26 -0
  147. package/src/callback/deactivateOverviewMapCallback.d.ts +7 -0
  148. package/src/callback/deactivateOverviewMapCallback.js +20 -0
  149. package/src/components/flight/VcsFlightAnchorsComponent.vue +1 -0
  150. package/src/components/flight/VcsFlightPlayer.vue +31 -17
  151. package/src/components/flight/VcsFlightPlayer.vue.d.ts +1 -0
  152. package/src/components/lists/VcsGroupedList.vue +10 -2
  153. package/src/components/lists/VcsTreeNode.vue +3 -0
  154. package/src/components/plugins/VcsLoadingOverlay.vue +138 -0
  155. package/src/components/plugins/VcsLoadingOverlay.vue.d.ts +2 -0
  156. package/src/components/plugins/VcsWorkspaceWrapper.vue +104 -0
  157. package/src/components/plugins/VcsWorkspaceWrapper.vue.d.ts +82 -0
  158. package/src/components/section/VcsExpansionPanel.vue +13 -3
  159. package/src/components/vector-properties/VcsFeatureEditingWindow.vue +20 -1
  160. package/src/components/vector-properties/VcsFeatureEditingWindow.vue.d.ts +11 -0
  161. package/src/components/vector-properties/VcsFeatureInputEditor.vue +166 -0
  162. package/src/components/vector-properties/VcsFeatureInputEditor.vue.d.ts +17 -0
  163. package/src/components/vector-properties/VcsVectorPropertiesComponent.vue.d.ts +1 -1
  164. package/src/contentTree/LayerSwap.vue +15 -6
  165. package/src/contentTree/contentTreeCollection.js +2 -2
  166. package/src/contentTree/contentTreeItem.d.ts +2 -2
  167. package/src/contentTree/wmsGroupContentTreeItem.js +10 -3
  168. package/src/featureInfo/featureInfo.js +6 -25
  169. package/src/featureInfo/iframeWmsFeatureInfoView.d.ts +10 -0
  170. package/src/featureInfo/iframeWmsFeatureInfoView.js +42 -0
  171. package/src/i18n/de.d.ts +25 -7
  172. package/src/i18n/de.js +14 -0
  173. package/src/i18n/en.d.ts +25 -7
  174. package/src/i18n/en.js +14 -0
  175. package/src/legend/VcsLegend.vue +5 -1
  176. package/src/navigation/MapNavigation.vue +82 -45
  177. package/src/navigation/MapNavigation.vue.d.ts +3 -34
  178. package/src/navigation/TiltSlider.vue +10 -2
  179. package/src/navigation/TiltSlider.vue.d.ts +20 -0
  180. package/src/navigation/VcsCompass.vue +3 -1
  181. package/src/navigation/overviewMap.d.ts +23 -8
  182. package/src/navigation/overviewMap.js +82 -60
  183. package/src/search/ResultsComponent.vue +8 -1
  184. package/src/search/SearchComponent.vue +3 -17
  185. package/src/search/SearchComponent.vue.d.ts +1 -2
  186. package/src/search/search.d.ts +13 -0
  187. package/src/search/search.js +21 -1
  188. package/src/uiConfig.d.ts +9 -0
  189. package/src/uiConfig.js +1 -0
  190. package/dist/assets/core-de8e51b5.js +0 -26236
  191. package/dist/assets/ui-4f308e45.css +0 -1
  192. /package/dist/assets/{vue-62303c82.js → vue-1b861f55.js} +0 -0
  193. /package/dist/assets/{vuetify-99195777.css → vuetify-439ba6d5.css} +0 -0
@@ -0,0 +1,138 @@
1
+ <template>
2
+ <v-dialog
3
+ v-model="show"
4
+ class="vcs-loading-overlay"
5
+ :max-width="maxWidth"
6
+ :persistent="persistent"
7
+ >
8
+ <v-card class="pa-1">
9
+ <v-card-title v-if="title" class="title loading">
10
+ {{ $t(title) }}
11
+ </v-card-title>
12
+ <v-card-text v-if="text" class="px-4">
13
+ {{ $t(text) }}
14
+ </v-card-text>
15
+ <div class="d-flex justify-end px-4" v-if="hasProgress">
16
+ {{ localProgress }}%
17
+ </div>
18
+ <div class="px-4 pb-1 pt-2">
19
+ <v-progress-linear
20
+ :model-value="localProgress"
21
+ :indeterminate="!hasProgress"
22
+ rounded
23
+ />
24
+ </div>
25
+ <template #actions v-if="cancellable">
26
+ <div class="pa-2">
27
+ <VcsFormButton @click="show = false">
28
+ {{ $t('components.cancel') }}
29
+ </VcsFormButton>
30
+ </div>
31
+ </template>
32
+ </v-card>
33
+ </v-dialog>
34
+ </template>
35
+
36
+ <script>
37
+ import {
38
+ VDialog,
39
+ VCard,
40
+ VCardText,
41
+ VProgressLinear,
42
+ VCardTitle,
43
+ } from 'vuetify/components';
44
+ import { computed, ref, watch } from 'vue';
45
+ import VcsFormButton from '../buttons/VcsFormButton.vue';
46
+
47
+ /**
48
+ * @description Basic overlay to display a progress bar on a VCard, with optional text and cancel button.
49
+ * @vue-prop {import("vue").Ref<number>|undefined} [progress] - The current progress value, between 0 and 1.
50
+ * @vue-prop {string} [title] - The title of the overlay. Will be translated.
51
+ * @vue-prop {string} [text=''] - Optional text to display in the overlay. Will be translated.
52
+ * @vue-prop {boolean} [cancellable=true] - Whether the overlay can be cancelled by the user.
53
+ * @vue-prop {string|number} [maxWidth='500'] - Optional max-width for the dialog.
54
+ * @vue-prop {boolean} [persistent=true] - Whether the dialog should be persistent (not dismissible by clicking outside).
55
+ */
56
+ export default {
57
+ name: 'VcsLoadingOverlay',
58
+ components: {
59
+ VDialog,
60
+ VCard,
61
+ VCardTitle,
62
+ VCardText,
63
+ VProgressLinear,
64
+ VcsFormButton,
65
+ },
66
+ props: {
67
+ progress: {
68
+ type: [Object, Number, undefined],
69
+ default: undefined,
70
+ },
71
+ title: {
72
+ type: String,
73
+ default: '',
74
+ },
75
+ text: {
76
+ type: String,
77
+ default: '',
78
+ },
79
+ cancellable: {
80
+ type: Boolean,
81
+ default: true,
82
+ },
83
+ maxWidth: {
84
+ type: [String, Number],
85
+ default: '500px',
86
+ },
87
+ persistent: {
88
+ type: Boolean,
89
+ default: true,
90
+ },
91
+ },
92
+ emits: ['cancel'],
93
+ setup(props, { emit }) {
94
+ const show = ref(true);
95
+ watch(show, () => {
96
+ if (!show.value) {
97
+ emit('cancel');
98
+ }
99
+ });
100
+ return {
101
+ show,
102
+ hasProgress: props.progress !== undefined,
103
+ localProgress: computed(() => {
104
+ if (props.progress && props.progress.value !== undefined) {
105
+ return Math.round(props.progress.value * 100);
106
+ }
107
+ return 0;
108
+ }),
109
+ };
110
+ },
111
+ };
112
+ </script>
113
+
114
+ <style scoped lang="scss">
115
+ .title {
116
+ font-size: calc(var(--v-vcs-font-size) * 1.2);
117
+ }
118
+
119
+ .loading:after {
120
+ content: ' .';
121
+ animation: dots 2s steps(4, end) infinite;
122
+ }
123
+ @keyframes dots {
124
+ 0%,
125
+ 100% {
126
+ content: '';
127
+ }
128
+ 25% {
129
+ content: '.';
130
+ }
131
+ 50% {
132
+ content: '..';
133
+ }
134
+ 75% {
135
+ content: '...';
136
+ }
137
+ }
138
+ </style>
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vue").DefineSetupFnComponent<Record<string, any>, {}, {}, Record<string, any> & {}, import("vue").PublicProps>;
2
+ export default _default;
@@ -0,0 +1,104 @@
1
+ <template>
2
+ <v-container class="pa-0 abstract-workspace-item-creator">
3
+ <slot />
4
+ <div v-if="showFooter">
5
+ <v-divider class="mt-3" />
6
+ <div class="d-flex w-full justify-space-between px-2 pt-2 pb-1">
7
+ <VcsFormButton
8
+ v-if="showAdd && !workspaceHidden"
9
+ icon="$vcsComponentsPlus"
10
+ :disabled="disableAdd"
11
+ :tooltip="tooltipAdd"
12
+ @click="$emit('addClicked', $event)"
13
+ />
14
+ <div class="d-flex gc-2 w-100 justify-end">
15
+ <slot name="secondaryButton" />
16
+ <VcsFormButton
17
+ variant="filled"
18
+ :disabled="disableNew"
19
+ :tooltip="tooltipNew"
20
+ @click="$emit('newClicked', $event)"
21
+ >
22
+ {{ $st(newButtonTitle) }}
23
+ </VcsFormButton>
24
+ <VcsActionButtonList :actions="actions" button="VcsFormButton" />
25
+ </div>
26
+ </div>
27
+ </div>
28
+ </v-container>
29
+ </template>
30
+
31
+ <script>
32
+ import { VContainer, VDivider } from 'vuetify/components';
33
+ import { computed, inject } from 'vue';
34
+ import VcsFormButton from '../buttons/VcsFormButton.vue';
35
+ import VcsActionButtonList from '../buttons/VcsActionButtonList.vue';
36
+
37
+ /**
38
+ * @description Basic wrapper for all plugins interacting with MyWorkspace.
39
+ * Providing a footer with add and new buttons.
40
+ * @vue-prop {boolean} [showFooter=true] - Flag to hide the footer.
41
+ * @vue-prop {boolean} [showAdd=true] - Flag to show an add button in the footer. You need to handle @addClicked in a child component.
42
+ * @vue-prop {boolean} [disableAdd=false] - Flag to render add button disabled.
43
+ * @vue-prop {boolean} [tooltipAdd='components.addToMyWorkspace'] - Option to change the add button tooltip.
44
+ * @vue-prop {boolean} [disableNew=false] - Flag to render new button disabled.
45
+ * @vue-prop {boolean} [tooltipNew''] - Option to change the add a tooltip to the new button.
46
+ * @vue-prop {Array<VcsAction>} [actions] - Optional actions rendered as ActionButtonList in the footer.
47
+ * @vue-prop {string} [newButtonTitle='components.new'] - Option to change the new button title, e.g. to 'components.apply'.
48
+ * @vue-event {Event} addClicked - Event fired on clicking the reset button.
49
+ * @vue-event {Event} newClicked - Event fired on clicking the cancel button.
50
+ * @vue-slot secondaryButton An optionnal named slot to add a secondary button to the footer, rendered filled on the left of the new button.
51
+ */
52
+ export default {
53
+ name: 'VcsWorkspaceWrapper',
54
+ components: {
55
+ VContainer,
56
+ VDivider,
57
+ VcsFormButton,
58
+ VcsActionButtonList,
59
+ },
60
+ props: {
61
+ showFooter: {
62
+ type: Boolean,
63
+ default: true,
64
+ },
65
+ showAdd: {
66
+ type: Boolean,
67
+ default: true,
68
+ },
69
+ disableAdd: {
70
+ type: Boolean,
71
+ default: false,
72
+ },
73
+ tooltipAdd: {
74
+ type: String,
75
+ default: 'components.addToMyWorkspace',
76
+ },
77
+ newButtonTitle: {
78
+ type: String,
79
+ default: 'components.new',
80
+ },
81
+ disableNew: {
82
+ type: Boolean,
83
+ default: false,
84
+ },
85
+ tooltipNew: {
86
+ type: String,
87
+ default: '',
88
+ },
89
+ actions: {
90
+ type: Array,
91
+ default: () => [],
92
+ },
93
+ },
94
+ emits: ['addClicked', 'newClicked'],
95
+ setup() {
96
+ const app = inject('vcsApp');
97
+ return {
98
+ workspaceHidden: computed(() => !!app.uiConfig.config.workspaceHidden),
99
+ };
100
+ },
101
+ };
102
+ </script>
103
+
104
+ <style scoped></style>
@@ -0,0 +1,82 @@
1
+ declare const _default: import("vue").DefineComponent<{
2
+ showFooter: {
3
+ type: BooleanConstructor;
4
+ default: boolean;
5
+ };
6
+ showAdd: {
7
+ type: BooleanConstructor;
8
+ default: boolean;
9
+ };
10
+ disableAdd: {
11
+ type: BooleanConstructor;
12
+ default: boolean;
13
+ };
14
+ tooltipAdd: {
15
+ type: StringConstructor;
16
+ default: string;
17
+ };
18
+ newButtonTitle: {
19
+ type: StringConstructor;
20
+ default: string;
21
+ };
22
+ disableNew: {
23
+ type: BooleanConstructor;
24
+ default: boolean;
25
+ };
26
+ tooltipNew: {
27
+ type: StringConstructor;
28
+ default: string;
29
+ };
30
+ actions: {
31
+ type: ArrayConstructor;
32
+ default: () => never[];
33
+ };
34
+ }, {
35
+ workspaceHidden: import("vue").ComputedRef<boolean>;
36
+ }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("addClicked" | "newClicked")[], "addClicked" | "newClicked", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
37
+ showFooter: {
38
+ type: BooleanConstructor;
39
+ default: boolean;
40
+ };
41
+ showAdd: {
42
+ type: BooleanConstructor;
43
+ default: boolean;
44
+ };
45
+ disableAdd: {
46
+ type: BooleanConstructor;
47
+ default: boolean;
48
+ };
49
+ tooltipAdd: {
50
+ type: StringConstructor;
51
+ default: string;
52
+ };
53
+ newButtonTitle: {
54
+ type: StringConstructor;
55
+ default: string;
56
+ };
57
+ disableNew: {
58
+ type: BooleanConstructor;
59
+ default: boolean;
60
+ };
61
+ tooltipNew: {
62
+ type: StringConstructor;
63
+ default: string;
64
+ };
65
+ actions: {
66
+ type: ArrayConstructor;
67
+ default: () => never[];
68
+ };
69
+ }>> & {
70
+ onAddClicked?: ((...args: any[]) => any) | undefined;
71
+ onNewClicked?: ((...args: any[]) => any) | undefined;
72
+ }, {
73
+ actions: unknown[];
74
+ showFooter: boolean;
75
+ showAdd: boolean;
76
+ disableAdd: boolean;
77
+ tooltipAdd: string;
78
+ newButtonTitle: string;
79
+ disableNew: boolean;
80
+ tooltipNew: string;
81
+ }, {}>;
82
+ export default _default;
@@ -4,8 +4,8 @@
4
4
  VExpansionPanelText,
5
5
  VExpansionPanelTitle,
6
6
  VIcon,
7
- VTooltip,
8
7
  VListItemTitle,
8
+ VTooltip,
9
9
  } from 'vuetify/components';
10
10
  import { computed, ref, useSlots } from 'vue';
11
11
  import VcsActionButtonList from '../buttons/VcsActionButtonList.vue';
@@ -96,7 +96,9 @@
96
96
  line-height: 1.2;
97
97
  padding: 0 8px;
98
98
  }
99
-
99
+ :deep(.v-list-item-title) > span {
100
+ font-weight: bold;
101
+ }
100
102
  .vcs-panel-title__append {
101
103
  width: 90%;
102
104
  display: inline-block;
@@ -104,8 +106,16 @@
104
106
  text-overflow: ellipsis;
105
107
  vertical-align: bottom;
106
108
  }
107
-
108
109
  :deep(.v-expansion-panel-text__wrapper) {
109
110
  padding: 0 0;
110
111
  }
111
112
  </style>
113
+
114
+ <style lang="scss">
115
+ .v-expansion-panels {
116
+ z-index: auto;
117
+ > div:not(:last-child):has(.vcs-expansion-panel) {
118
+ border-bottom: 1px solid rgb(var(--v-theme-base-lighten-2));
119
+ }
120
+ }
121
+ </style>
@@ -13,7 +13,12 @@
13
13
  :feature-properties="featureProperties"
14
14
  :allow-z-input="is3D"
15
15
  />
16
- <div v-else class="px-1 py-1">
16
+ <div v-else-if="showInputs" class="py-1">
17
+ <VcsFeatureInputEditor
18
+ :is3-d="is3D && featureProperties.altitudeMode === 'absolute'"
19
+ />
20
+ </div>
21
+ <div v-else class="py-1">
17
22
  {{ $t('components.editor.modifyInfo') }}
18
23
  </div>
19
24
  </div>
@@ -67,6 +72,7 @@
67
72
  } from './VcsVectorPropertiesComponent.vue';
68
73
  import VcsFormSection from '../section/VcsFormSection.vue';
69
74
  import VcsSnapTo from './VcsSnapTo.vue';
75
+ import VcsFeatureInputEditor from './VcsFeatureInputEditor.vue';
70
76
 
71
77
  /**
72
78
  * @typedef {Object} EditorManager
@@ -150,6 +156,7 @@
150
156
  VSheet,
151
157
  VcsFormSection,
152
158
  VcsVectorPropertiesComponent,
159
+ VcsFeatureInputEditor,
153
160
  VcsFeatureStyleComponent,
154
161
  },
155
162
  props: {
@@ -186,6 +193,10 @@
186
193
  type: Boolean,
187
194
  default: true,
188
195
  },
196
+ showInputEditor: {
197
+ type: Boolean,
198
+ default: false,
199
+ },
189
200
  },
190
201
  setup(props) {
191
202
  const vcsApp = inject('vcsApp');
@@ -463,8 +474,16 @@
463
474
  availableVectorProperties,
464
475
  is3D,
465
476
  is2DFeature,
477
+ isGeometryEditing,
466
478
  updateFeatureProperties,
467
479
  defaultVectorProperties: VectorProperties.getDefaultOptions(),
480
+ showInputs: computed(
481
+ () =>
482
+ !currentTransformationMode.value &&
483
+ props.showInputEditor &&
484
+ features.value.length === 1 &&
485
+ features.value[0]?.getGeometry()?.getType() === 'Point',
486
+ ),
468
487
  };
469
488
  },
470
489
  };
@@ -42,6 +42,10 @@ declare const _default: import("vue").DefineComponent<{
42
42
  type: BooleanConstructor;
43
43
  default: boolean;
44
44
  };
45
+ showInputEditor: {
46
+ type: BooleanConstructor;
47
+ default: boolean;
48
+ };
45
49
  }, {
46
50
  featureProperties: import("vue").ShallowRef<any>;
47
51
  session: import("vue").ShallowRef<import("@vcmap/core", { with: { "resolution-mode": "import" } }).SelectFeaturesSession | import("@vcmap/core", { with: { "resolution-mode": "import" } }).CreateFeatureSession<GeometryType> | undefined>;
@@ -53,8 +57,10 @@ declare const _default: import("vue").DefineComponent<{
53
57
  availableVectorProperties: import("vue").ShallowRef<never[]>;
54
58
  is3D: import("vue").Ref<boolean>;
55
59
  is2DFeature: import("vue").ComputedRef<boolean>;
60
+ isGeometryEditing: import("vue").ComputedRef<boolean>;
56
61
  updateFeatureProperties: (update: import("@vcmap/core").VectorPropertiesOptions) => void;
57
62
  defaultVectorProperties: import("@vcmap/core", { with: { "resolution-mode": "import" } }).VectorPropertiesOptions;
63
+ showInputs: import("vue").ComputedRef<boolean>;
58
64
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
59
65
  allowedVectorProperties: {
60
66
  type: ArrayConstructor;
@@ -84,6 +90,10 @@ declare const _default: import("vue").DefineComponent<{
84
90
  type: BooleanConstructor;
85
91
  default: boolean;
86
92
  };
93
+ showInputEditor: {
94
+ type: BooleanConstructor;
95
+ default: boolean;
96
+ };
87
97
  }>>, {
88
98
  altitudeModes: unknown[];
89
99
  allowedVectorProperties: unknown[];
@@ -92,6 +102,7 @@ declare const _default: import("vue").DefineComponent<{
92
102
  showResetVectorProperties: boolean;
93
103
  showStyle: boolean;
94
104
  showSnapping: boolean;
105
+ showInputEditor: boolean;
95
106
  }, {}>;
96
107
  export default _default;
97
108
  export type EditorManager = {
@@ -0,0 +1,166 @@
1
+ <template>
2
+ <div class="vcs-point-input-editor">
3
+ <v-row no-gutters>
4
+ <v-col>
5
+ <VcsLabel html-for="posX">
6
+ {{ $t('components.editor.position.x') }}
7
+ </VcsLabel>
8
+ </v-col>
9
+ <v-col>
10
+ <VcsTextField
11
+ id="posX"
12
+ type="number"
13
+ v-model.number="coordinates[0]"
14
+ @update:model-value="isEdited = true"
15
+ />
16
+ </v-col>
17
+ </v-row>
18
+ <v-row no-gutters>
19
+ <v-col>
20
+ <VcsLabel html-for="posY">
21
+ {{ $t('components.editor.position.y') }}
22
+ </VcsLabel>
23
+ </v-col>
24
+ <v-col>
25
+ <VcsTextField
26
+ id="posY"
27
+ type="number"
28
+ v-model.number="coordinates[1]"
29
+ @update:model-value="isEdited = true"
30
+ />
31
+ </v-col>
32
+ </v-row>
33
+ <v-row no-gutters v-if="is3D">
34
+ <v-col>
35
+ <VcsLabel html-for="posZ">
36
+ {{ $t('components.editor.position.z') }}
37
+ </VcsLabel>
38
+ </v-col>
39
+ <v-col>
40
+ <VcsTextField
41
+ id="posZ"
42
+ type="number"
43
+ v-model.number="coordinates[2]"
44
+ @update:model-value="isEdited = true"
45
+ />
46
+ </v-col>
47
+ </v-row>
48
+ <v-row no-gutters v-if="isEdited" class="d-flex justify-end gc-1">
49
+ <VcsToolButton @click="cancel">
50
+ {{ $t('components.cancel') }}
51
+ </VcsToolButton>
52
+ <VcsToolButton @click="apply">
53
+ {{ $t('components.apply') }}
54
+ </VcsToolButton>
55
+ </v-row>
56
+ </div>
57
+ </template>
58
+
59
+ <script>
60
+ import { VCol, VRow } from 'vuetify/components';
61
+ import { inject, onUnmounted, ref } from 'vue';
62
+ import {
63
+ getDefaultProjection,
64
+ mercatorProjection,
65
+ Projection,
66
+ } from '@vcmap/core';
67
+ import { getLogger } from '@vcsuite/logger';
68
+ import VcsLabel from '../form-inputs-controls/VcsLabel.vue';
69
+ import VcsTextField from '../form-inputs-controls/VcsTextField.vue';
70
+ import VcsToolButton from '../buttons/VcsToolButton.vue';
71
+
72
+ /**
73
+ * @description Component to edit the position of a feature in a vector layer. Currently
74
+ * only supports point features, which need to be the currently selected feature in the manager.
75
+ * @vue-prop {boolean} is3D - Whether the feature is in 3D.
76
+ */
77
+ export default {
78
+ name: 'VcsFeatureEditingWindow',
79
+ components: {
80
+ VCol,
81
+ VRow,
82
+ VcsLabel,
83
+ VcsTextField,
84
+ VcsToolButton,
85
+ },
86
+ props: {
87
+ is3D: {
88
+ type: Boolean,
89
+ required: true,
90
+ },
91
+ },
92
+ setup() {
93
+ const { currentFeatures: features } = inject('manager');
94
+
95
+ if (
96
+ features.value.length !== 1 ||
97
+ features.value[0]?.getGeometry()?.getType() !== 'Point'
98
+ ) {
99
+ getLogger('VcsFeatureEditingWindow').error(
100
+ 'This component only supports editing a single point feature.',
101
+ );
102
+ }
103
+
104
+ const isEdited = ref(false);
105
+ /** @type {import("ol").Feature} */
106
+ const feature = features.value[0];
107
+ const defaultProjection = getDefaultProjection();
108
+ const decimalPlaces = defaultProjection.epsg.includes('4326') ? 6 : 2;
109
+
110
+ function transform(coordinates) {
111
+ return mercatorProjection
112
+ .transformTo(defaultProjection, coordinates)
113
+ .map((c, i) => +c.toFixed(i === 2 ? 2 : decimalPlaces));
114
+ }
115
+ const coordinates = ref(
116
+ transform(feature.getGeometry().getFlatCoordinates()),
117
+ );
118
+
119
+ function updateFromFeature() {
120
+ coordinates.value = transform(
121
+ feature.getGeometry().getFlatCoordinates(),
122
+ );
123
+ }
124
+ feature.on('change', updateFromFeature);
125
+ onUnmounted(() => {
126
+ feature.un('change', updateFromFeature);
127
+ });
128
+
129
+ function updateFromInput() {
130
+ let updatedCoordinates;
131
+ try {
132
+ updatedCoordinates = Projection.transform(
133
+ mercatorProjection,
134
+ defaultProjection,
135
+ coordinates.value,
136
+ );
137
+ feature.getGeometry().setCoordinates(updatedCoordinates);
138
+ } catch (error) {
139
+ getLogger('VcsFeatureEditingWindow').error(
140
+ 'Invalid coordinates input',
141
+ error,
142
+ );
143
+ }
144
+ }
145
+
146
+ return {
147
+ isEdited,
148
+ coordinates,
149
+ apply: () => {
150
+ updateFromInput();
151
+ isEdited.value = false;
152
+ },
153
+ cancel: () => {
154
+ updateFromFeature();
155
+ isEdited.value = false;
156
+ },
157
+ };
158
+ },
159
+ };
160
+ </script>
161
+
162
+ <style scoped>
163
+ :deep(.v-btn__content):hover {
164
+ color: rgb(var(--v-theme-primary));
165
+ }
166
+ </style>
@@ -0,0 +1,17 @@
1
+ declare const _default: import("vue").DefineComponent<{
2
+ is3D: {
3
+ type: BooleanConstructor;
4
+ required: true;
5
+ };
6
+ }, {
7
+ isEdited: import("vue").Ref<boolean>;
8
+ coordinates: import("vue").Ref<number[]>;
9
+ apply: () => void;
10
+ cancel: () => void;
11
+ }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
12
+ is3D: {
13
+ type: BooleanConstructor;
14
+ required: true;
15
+ };
16
+ }>>, {}, {}>;
17
+ export default _default;
@@ -84,7 +84,7 @@ declare const _default: import("vue").DefineComponent<{
84
84
  } | undefined;
85
85
  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;
86
86
  heightAboveGround: number | undefined;
87
- getHeightAboveGround: (feature: import("ol/Feature.js", { with: { "resolution-mode": "import" } }).default<import("ol/geom.js", { with: { "resolution-mode": "import" } }).Geometry>) => number;
87
+ getHeightAboveGround: (feature: import("ol/Feature.js", { with: { "resolution-mode": "import" } }).default<import("ol/geom.js", { with: { "resolution-mode": "import" } }).Geometry>) => number | undefined;
88
88
  skirt: number;
89
89
  getSkirt: (feature: import("ol/Feature.js", { with: { "resolution-mode": "import" } }).default<import("ol/geom.js", { with: { "resolution-mode": "import" } }).Geometry>) => number;
90
90
  groundLevel: number | undefined;
@@ -72,11 +72,15 @@
72
72
  const wmsGroupItemsMap = getWmsGroupItemsMap(app);
73
73
 
74
74
  /**
75
- * @param {import("@vcmap/core").Layer}l
75
+ * @param {import("@vcmap/core").Layer} l
76
76
  * @returns {boolean}
77
77
  */
78
78
  const layerFilter = (l) => {
79
- return l.active && l[moduleIdSymbol] !== volatileModuleId;
79
+ return (
80
+ l.active &&
81
+ l[moduleIdSymbol] !== volatileModuleId &&
82
+ l.isSupported(app.maps.activeMap)
83
+ );
80
84
  };
81
85
 
82
86
  function getLayerTreeItems() {
@@ -101,11 +105,16 @@
101
105
 
102
106
  const items = shallowRef(getLayerTreeItems());
103
107
 
104
- const listener = app.layers.stateChanged.addEventListener(() => {
105
- items.value = getLayerTreeItems();
106
- });
108
+ const listeners = [
109
+ app.layers.stateChanged.addEventListener(() => {
110
+ items.value = getLayerTreeItems();
111
+ }),
112
+ app.maps.mapActivated.addEventListener(() => {
113
+ items.value = getLayerTreeItems();
114
+ }),
115
+ ];
107
116
 
108
- onUnmounted(() => listener());
117
+ onUnmounted(() => listeners.forEach((l) => l()));
109
118
 
110
119
  return {
111
120
  items,