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

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 (278) hide show
  1. package/build/build.js +40 -60
  2. package/build/buildHelpers.js +62 -19
  3. package/build/bundle.js +1 -1
  4. package/build/info/conf.json +1 -1
  5. package/build/info/publish.js +25 -31
  6. package/build/lintTypes.js +5 -0
  7. package/config/base.config.json +2 -1
  8. package/config/dev.config.json +7 -1
  9. package/config/projects.config.json +2 -1
  10. package/config/splashscreen.config.json +45 -0
  11. package/config/www.config.json +25 -22
  12. package/dist/.htaccess +7 -0
  13. package/dist/assets/@mdi/font/README.md +25 -0
  14. package/dist/assets/@mdi/font/css/materialdesignicons.min-680621ca.css +3 -0
  15. package/dist/assets/@mdi/font/css/materialdesignicons.min.css.map +16 -0
  16. package/dist/assets/@mdi/font/fonts/materialdesignicons-webfont.woff2 +0 -0
  17. package/dist/assets/{cesium.0b750d.js → cesium-126f111a.js} +272 -385
  18. package/dist/assets/cesium.js +1 -1
  19. package/dist/assets/{core.cbf44a.js → core-1c8b8674.js} +2015 -2019
  20. package/dist/assets/core.js +1 -1
  21. package/dist/assets/{ol.86e93c.js → ol-27f9b3f3.js} +42521 -44394
  22. package/dist/assets/ol.js +1 -1
  23. package/dist/assets/ui-7214428e.css +1 -0
  24. package/dist/assets/{ui.7c276c.js → ui-7214428e.js} +13968 -13907
  25. package/dist/assets/ui.js +1 -1
  26. package/dist/assets/vue-c78a5f76.js +6083 -0
  27. package/dist/assets/vue.js +1 -1
  28. package/dist/assets/{vuetify.4d18fe.css → vuetify-88a2fabe.css} +2 -2
  29. package/dist/assets/{vuetify.4d18fe.js → vuetify-88a2fabe.js} +7793 -7940
  30. package/dist/assets/vuetify.js +1 -1
  31. package/dist/index.html +11 -10
  32. package/index.d.ts +11 -11
  33. package/index.html +5 -5
  34. package/index.js +9 -7
  35. package/lib/olLib.js +84 -23
  36. package/package.json +19 -19
  37. package/plugins/@vcmap-show-case/flight-component-example/src/FlightExample.vue +41 -1
  38. package/plugins/@vcmap-show-case/form-inputs-example/src/FormInputsExample.vue +71 -32
  39. package/plugins/@vcmap-show-case/form-inputs-example/src/exampleActions.js +7 -11
  40. package/plugins/@vcmap-show-case/form-inputs-example/src/index.js +2 -2
  41. package/plugins/@vcmap-show-case/list-example/src/ListExample.vue +21 -8
  42. package/plugins/@vcmap-show-case/project-selector/src/ModulesListComponent.vue +18 -11
  43. package/plugins/@vcmap-show-case/search-example/src/index.js +1 -0
  44. package/plugins/@vcmap-show-case/search-example/src/searchImpl.js +35 -5
  45. package/plugins/@vcmap-show-case/style-input-example/src/StyleExample.vue +29 -90
  46. package/plugins/@vcmap-show-case/toolbox-example/src/index.js +2 -1
  47. package/plugins/package.json +3 -23
  48. package/public/assets/@mdi/font/README.md +25 -0
  49. package/public/assets/@mdi/font/css/materialdesignicons.min.css +2 -2
  50. package/public/assets/@mdi/font/css/materialdesignicons.min.css.map +16 -0
  51. package/public/assets/@mdi/font/fonts/materialdesignicons-webfont.woff2 +0 -0
  52. package/src/actions/StyleSelector.vue +1 -1
  53. package/src/actions/actionHelper.js +33 -22
  54. package/src/actions/flightActions.js +5 -5
  55. package/src/actions/listActions.d.ts +4 -11
  56. package/src/actions/listActions.js +6 -22
  57. package/src/actions/stateRefAction.js +2 -2
  58. package/src/application/VcsApp.vue +147 -57
  59. package/src/application/VcsApp.vue.d.ts +298 -4
  60. package/src/application/VcsAttributions.vue +2 -13
  61. package/src/application/VcsAttributionsFooter.vue +10 -11
  62. package/src/application/VcsContainer.vue +26 -9
  63. package/src/application/VcsContainer.vue.d.ts +237 -0
  64. package/src/application/VcsMainMap.vue +7 -7
  65. package/src/application/VcsMainMap.vue.d.ts +2 -2
  66. package/src/application/VcsNavbar.vue +5 -1
  67. package/src/application/VcsPositionDisplay.vue +8 -23
  68. package/src/application/VcsPositionDisplay.vue.d.ts +0 -1
  69. package/src/application/VcsSettings.vue +10 -17
  70. package/src/application/VcsSplashScreen.vue +21 -40
  71. package/src/application/VcsSplashScreen.vue.d.ts +0 -2
  72. package/src/application/VcsTextPage.vue +12 -43
  73. package/src/application/VcsTextPage.vue.d.ts +4 -8
  74. package/src/application/VcsTextPageFooter.vue +23 -40
  75. package/src/components/buttons/VcsActionButtonList.vue +59 -3
  76. package/src/components/buttons/VcsActionButtonList.vue.d.ts +28 -0
  77. package/src/components/extent/VcsExtentEditor.vue +1 -1
  78. package/src/components/flight/VcsFlightAnchorsComponent.vue +63 -36
  79. package/src/components/flight/VcsFlightComponent.vue +16 -21
  80. package/src/components/flight/VcsFlightPlayer.vue +27 -5
  81. package/src/components/form-inputs-controls/VcsCheckbox.vue +9 -5
  82. package/src/components/form-inputs-controls/VcsChipArrayInput.vue +15 -13
  83. package/src/components/form-inputs-controls/VcsChipArrayInput.vue.d.ts +3 -4
  84. package/src/components/form-inputs-controls/VcsCoordinate.vue +17 -4
  85. package/src/components/form-inputs-controls/VcsCoordinate.vue.d.ts +5 -2
  86. package/src/components/form-inputs-controls/VcsDatePicker.vue +34 -60
  87. package/src/components/form-inputs-controls/VcsDatePicker.vue.d.ts +1 -63
  88. package/src/components/form-inputs-controls/VcsFileInput.vue +17 -18
  89. package/src/components/form-inputs-controls/VcsFileInput.vue.d.ts +1 -0
  90. package/src/components/form-inputs-controls/VcsLabel.vue +1 -1
  91. package/src/components/form-inputs-controls/VcsRadio.vue +17 -3
  92. package/src/components/form-inputs-controls/VcsRadio.vue.d.ts +1 -0
  93. package/src/components/form-inputs-controls/VcsSelect.vue +40 -31
  94. package/src/components/form-inputs-controls/VcsSelect.vue.d.ts +5 -2
  95. package/src/components/form-inputs-controls/VcsSlider.vue +13 -1
  96. package/src/components/form-inputs-controls/VcsSlider.vue.d.ts +1 -0
  97. package/src/components/form-inputs-controls/VcsTextArea.vue +27 -26
  98. package/src/components/form-inputs-controls/VcsTextArea.vue.d.ts +1 -0
  99. package/src/components/form-inputs-controls/VcsTextField.vue +20 -4
  100. package/src/components/form-inputs-controls/VcsTextField.vue.d.ts +9 -0
  101. package/src/components/form-inputs-controls/VcsWizardStep.vue +3 -6
  102. package/src/components/form-inputs-controls/vcsTextField.scss +9 -12
  103. package/src/components/form-output/VcsFormattedNumber.vue +21 -5
  104. package/src/components/form-output/VcsFormattedNumber.vue.d.ts +9 -0
  105. package/src/components/form-output/VcsMarkdown.vue +15 -12
  106. package/src/components/form-output/VcsMarkdown.vue.d.ts +1 -0
  107. package/src/components/form-output/markdownHelper.d.ts +30 -0
  108. package/src/components/form-output/markdownHelper.js +398 -0
  109. package/src/components/import/VcsFileDrop.vue +8 -5
  110. package/src/components/import/VcsImportComponent.vue +4 -3
  111. package/src/components/import/VcsImportComponent.vue.d.ts +1 -2
  112. package/src/components/lists/VcsActionList.vue +11 -7
  113. package/src/components/lists/VcsList.vue +30 -52
  114. package/src/components/lists/VcsList.vue.d.ts +14 -59
  115. package/src/components/lists/{VcsListItem.vue → VcsListItemComponent.vue} +68 -22
  116. package/src/components/lists/VcsListItemComponent.vue.d.ts +69 -0
  117. package/src/components/lists/VcsTreeview.vue +43 -16
  118. package/src/components/lists/VcsTreeview.vue.d.ts +14 -3
  119. package/src/components/lists/VcsTreeviewLeaf.vue +15 -6
  120. package/src/components/lists/VcsTreeviewSearchbar.vue +2 -2
  121. package/src/components/notification/VcsHelp.vue +1 -1
  122. package/src/components/notification/VcsHelp.vue.d.ts +3 -2
  123. package/src/components/section/VcsExpansionPanel.vue +101 -0
  124. package/src/components/section/VcsExpansionPanel.vue.d.ts +19 -0
  125. package/src/components/{form-inputs-controls → section}/VcsFormSection.vue +10 -4
  126. package/src/components/{form-inputs-controls → section}/VcsFormSection.vue.d.ts +1 -2
  127. package/src/components/style/MenuWrapper.vue +24 -26
  128. package/src/components/style/MenuWrapper.vue.d.ts +4 -4
  129. package/src/components/style/VcsFillMenu.vue +9 -16
  130. package/src/components/style/VcsFillMenu.vue.d.ts +0 -18
  131. package/src/components/style/VcsFillSelector.vue +13 -16
  132. package/src/components/style/VcsImageMenu.vue +8 -25
  133. package/src/components/style/VcsImageMenu.vue.d.ts +0 -27
  134. package/src/components/style/VcsImageSelector.vue +102 -167
  135. package/src/components/style/VcsImageSelector.vue.d.ts +15 -15
  136. package/src/components/style/VcsStrokeMenu.vue +8 -15
  137. package/src/components/style/VcsStrokeMenu.vue.d.ts +0 -18
  138. package/src/components/style/VcsStrokeSelector.vue +11 -18
  139. package/src/components/style/VcsTextMenu.vue +9 -12
  140. package/src/components/style/VcsTextMenu.vue.d.ts +0 -9
  141. package/src/components/style/VcsTextSelector.vue +79 -95
  142. package/src/components/style/VcsTextSelector.vue.d.ts +20 -22
  143. package/src/components/style/VcsVectorStyleComponent.vue +8 -19
  144. package/src/components/style/VcsVectorStyleComponent.vue.d.ts +1 -1
  145. package/src/components/style/composables.d.ts +0 -14
  146. package/src/components/style/composables.js +0 -49
  147. package/src/components/tables/VcsDataTable.vue +28 -22
  148. package/src/components/tables/VcsTable.vue +45 -62
  149. package/src/components/tables/VcsTable.vue.d.ts +30 -17
  150. package/src/components/tables/VcsTableCell.vue +72 -0
  151. package/src/components/tables/VcsTableCell.vue.d.ts +13 -0
  152. package/src/components/vector-properties/VcsFeatureEditingWindow.vue +43 -9
  153. package/src/components/vector-properties/VcsFeatureTransforms.vue +5 -0
  154. package/src/components/vector-properties/VcsVectorPropertiesComponent.vue +1 -1
  155. package/src/components/viewpoint/VcsViewpointComponent.vue +23 -10
  156. package/src/components/viewpoint/VcsViewpointEditor.vue +2 -1
  157. package/src/contentTree/LayerTree.vue +9 -27
  158. package/src/contentTree/LayerTree.vue.d.ts +1 -1
  159. package/src/contentTree/contentTreeCollection.d.ts +1 -0
  160. package/src/contentTree/contentTreeCollection.js +45 -11
  161. package/src/contentTree/contentTreeItem.d.ts +2 -2
  162. package/src/contentTree/contentTreeItem.js +7 -7
  163. package/src/featureInfo/BalloonComponent.vue +14 -15
  164. package/src/featureInfo/MarkdownBalloonComponent.vue +4 -2
  165. package/src/featureInfo/MarkdownBalloonComponent.vue.d.ts +2 -2
  166. package/src/featureInfo/abstractFeatureInfoView.d.ts +6 -0
  167. package/src/featureInfo/abstractFeatureInfoView.js +15 -7
  168. package/src/featureInfo/featureInfo.d.ts +5 -5
  169. package/src/featureInfo/featureInfo.js +59 -41
  170. package/src/featureInfo/iframeFeatureInfoView.d.ts +8 -2
  171. package/src/featureInfo/iframeFeatureInfoView.js +15 -5
  172. package/src/featureInfo/markdownBalloonFeatureInfoView.d.ts +1 -1
  173. package/src/featureInfo/markdownBalloonFeatureInfoView.js +5 -5
  174. package/src/featureInfo/markdownFeatureInfoView.d.ts +1 -1
  175. package/src/featureInfo/markdownFeatureInfoView.js +9 -11
  176. package/src/featureInfo/tableFeatureInfoView.js +13 -4
  177. package/src/init.d.ts +5 -38
  178. package/src/init.js +19 -18
  179. package/src/legend/StyleLegendItem.vue +4 -9
  180. package/src/legend/VcsLegend.vue +28 -54
  181. package/src/manager/buttonManager.js +4 -4
  182. package/src/manager/collectionManager/CollectionComponent.vue +17 -42
  183. package/src/manager/collectionManager/CollectionComponent.vue.d.ts +4 -2
  184. package/src/manager/collectionManager/CollectionComponentContent.vue +7 -6
  185. package/src/manager/collectionManager/CollectionComponentContent.vue.d.ts +3 -1
  186. package/src/manager/collectionManager/CollectionComponentList.vue +11 -9
  187. package/src/manager/collectionManager/CollectionComponentList.vue.d.ts +6 -4
  188. package/src/manager/collectionManager/CollectionComponentProvider.vue +1 -1
  189. package/src/manager/collectionManager/CollectionComponentStandalone.vue +3 -2
  190. package/src/manager/collectionManager/CollectionManager.vue +1 -1
  191. package/src/manager/collectionManager/collectionComponentClass.d.ts +1 -1
  192. package/src/manager/collectionManager/collectionComponentClass.js +7 -10
  193. package/src/manager/collectionManager/collectionManager.js +10 -10
  194. package/src/manager/collectionManager/editorCollectionComponentClass.js +6 -5
  195. package/src/manager/contextMenu/contextMenuManager.js +2 -2
  196. package/src/manager/navbarManager.js +2 -2
  197. package/src/manager/panel/PanelComponent.vue +2 -9
  198. package/src/manager/panel/PanelManagerComponent.vue +7 -3
  199. package/src/manager/panel/panelHelper.js +3 -3
  200. package/src/manager/panel/panelManager.d.ts +9 -1
  201. package/src/manager/panel/panelManager.js +18 -6
  202. package/src/manager/toolbox/GroupToolboxComponent.vue +8 -4
  203. package/src/manager/toolbox/GroupToolboxComponent.vue.d.ts +1 -0
  204. package/src/manager/toolbox/SelectToolboxComponent.vue +7 -4
  205. package/src/manager/toolbox/SelectToolboxComponent.vue.d.ts +1 -0
  206. package/src/manager/toolbox/ToolboxManager.vue +9 -6
  207. package/src/manager/toolbox/ToolboxManager.vue.d.ts +1 -0
  208. package/src/manager/toolbox/toolboxManager.js +10 -10
  209. package/src/manager/window/WindowComponent.vue +12 -8
  210. package/src/manager/window/WindowComponentHeader.vue +29 -8
  211. package/src/manager/window/WindowComponentHeader.vue.d.ts +2 -0
  212. package/src/manager/window/WindowManager.vue +2 -2
  213. package/src/manager/window/windowManager.d.ts +2 -2
  214. package/src/manager/window/windowManager.js +4 -4
  215. package/src/navigation/MapNavigation.vue +20 -0
  216. package/src/navigation/locatorHelper.js +1 -1
  217. package/src/navigation/overviewMap.js +1 -1
  218. package/src/notifier/NotifierComponent.vue +18 -15
  219. package/src/search/ResultItem.vue +18 -6
  220. package/src/search/ResultsComponent.vue +31 -20
  221. package/src/search/ResultsComponent.vue.d.ts +2 -1
  222. package/src/search/SearchComponent.vue +8 -14
  223. package/src/search/SearchComponent.vue.d.ts +1 -0
  224. package/src/search/search.js +2 -2
  225. package/src/siteConfig.js +9 -9
  226. package/src/state.js +4 -4
  227. package/src/styles/_typography.scss +0 -2
  228. package/src/styles/main.scss +0 -4
  229. package/src/uiConfig.d.ts +300 -5
  230. package/src/uiConfig.js +28 -16
  231. package/src/vcsUiApp.d.ts +21 -17
  232. package/src/vcsUiApp.js +11 -10
  233. package/src/vuePlugins/vuetify.d.ts +2 -0
  234. package/src/vuePlugins/vuetify.js +14 -0
  235. package/dist/assets/@mdi/font/css/materialdesignicons.css.map +0 -16
  236. package/dist/assets/@mdi/font/css/materialdesignicons.min.e3f476.css +0 -3
  237. package/dist/assets/index-8eGauqjA.js +0 -1
  238. package/dist/assets/ui.7c276c.css +0 -1
  239. package/dist/assets/vue.a3cd64.js +0 -6096
  240. package/public/assets/@mdi/font/css/materialdesignicons.css.map +0 -16
  241. package/src/application/VcsCustomScreen.vue +0 -45
  242. package/src/application/VcsCustomScreen.vue.d.ts +0 -15
  243. package/src/application/markdownHelper.d.ts +0 -12
  244. package/src/application/markdownHelper.js +0 -70
  245. package/src/components/lists/VcsListItem.vue.d.ts +0 -21
  246. package/src/components/notification/VcsTooltip.vue +0 -156
  247. package/src/components/notification/VcsTooltip.vue.d.ts +0 -27
  248. package/src/featureInfo/MarkdownComponent.vue +0 -16
  249. package/src/featureInfo/MarkdownComponent.vue.d.ts +0 -7
  250. package/src/styles/_theming.scss +0 -73
  251. package/src/styles/settings.scss +0 -6
  252. package/src/styles/shades.scss +0 -4
  253. package/src/styles/variables.scss +0 -140
  254. package/src/styles/vcsFont.scss +0 -2
  255. package/src/styles/vcsGrid.scss +0 -3
  256. /package/dist/assets/{favicon-128.4c4ce5.png → favicon-128-4c4ce5df.png} +0 -0
  257. /package/dist/assets/{favicon-180.5b99c0.png → favicon-180-4c4ce5df.png} +0 -0
  258. /package/dist/assets/{favicon-192.0e205e.png → favicon-192-4c4ce5df.png} +0 -0
  259. /package/dist/assets/{favicon-32.6b9add.png → favicon-32-4c4ce5df.png} +0 -0
  260. /package/dist/assets/{favicon.d5ec97.svg → favicon-4c4ce5df.svg} +0 -0
  261. /package/dist/assets/font/{TitilliumWeb-Regular.9ca076.woff2 → TitilliumWeb-Regular-9ca076be.woff2} +0 -0
  262. /package/dist/assets/style/{icon-marker.70960f.png → icon-marker-70960f05.png} +0 -0
  263. /package/dist/assets/style/{icon-marker-blue.534e37.png → icon-marker-blue-534e374b.png} +0 -0
  264. /package/dist/assets/style/{icon-marker-green.0b6a92.png → icon-marker-green-0b6a92bc.png} +0 -0
  265. /package/dist/assets/style/{icon-marker-o.036477.png → icon-marker-o-036477fa.png} +0 -0
  266. /package/dist/assets/style/{icon-marker-o-blue.7b6d62.png → icon-marker-o-blue-7b6d6279.png} +0 -0
  267. /package/dist/assets/style/{icon-marker-o-green.c863c0.png → icon-marker-o-green-c863c0fa.png} +0 -0
  268. /package/dist/assets/style/{icon-marker-o-red.93ff58.png → icon-marker-o-red-93ff58df.png} +0 -0
  269. /package/dist/assets/style/{icon-marker-red.313d03.png → icon-marker-red-313d03e8.png} +0 -0
  270. /package/dist/assets/style/{icon-pin.b7ce77.png → icon-pin-b7ce771e.png} +0 -0
  271. /package/dist/assets/style/{icon-pin-blue.7be369.png → icon-pin-blue-7be369a3.png} +0 -0
  272. /package/dist/assets/style/{icon-pin-green.cbb935.png → icon-pin-green-cbb935fe.png} +0 -0
  273. /package/dist/assets/style/{icon-pin-red.3f25b2.png → icon-pin-red-3f25b245.png} +0 -0
  274. /package/public/assets/{favicon-128.png → favicon-128-4c4ce5df.png} +0 -0
  275. /package/public/assets/{favicon-180.png → favicon-180-4c4ce5df.png} +0 -0
  276. /package/public/assets/{favicon-192.png → favicon-192-4c4ce5df.png} +0 -0
  277. /package/public/assets/{favicon-32.png → favicon-32-4c4ce5df.png} +0 -0
  278. /package/public/assets/{favicon.svg → favicon-4c4ce5df.svg} +0 -0
@@ -1,34 +1,33 @@
1
1
  <template>
2
- <VcsDataTable :items="items" :headers="headers" v-bind="$attrs">
3
- <template #item.key="{ item }">
4
- <td
5
- class="vcs-table px-2 overflow-max-width rounded-0 noBorder"
6
- :style="{ 'max-width': headers[0].width }"
2
+ <VcsDataTable
3
+ v-bind="$attrs"
4
+ :items="items"
5
+ :headers="[keyHeader, valueHeader]"
6
+ >
7
+ <template #body="{ page, itemsPerPage }">
8
+ <tr
9
+ class="v-data-table__tr"
10
+ v-for="(item, idx) in items.slice(
11
+ (page - 1) * itemsPerPage,
12
+ page * itemsPerPage,
13
+ )"
14
+ :key="`row-${idx}`"
7
15
  >
8
- {{ $st(item.key) }}
9
- </td>
10
- </template>
11
- <template #item.value="{ item }">
12
- <td
13
- class="vcs-table px-2 overflow-max-width rounded-0 noBorder"
14
- :style="{ 'max-width': headers[1].width }"
15
- >
16
- <component
17
- :is="getTag(tags, item.key)"
18
- v-bind="getTagOptions(tags, item.key)"
19
- :class="{
20
- 'single-line': !/\s/.test(item.value),
21
- 'multi-line': /\s/.test(item.value),
22
- }"
16
+ <vcs-table-cell :title="item.key" :width="keyHeader.width" />
17
+ <vcs-table-cell
18
+ :title="item.value"
19
+ :width="valueHeader.width"
20
+ :tag="getTag(tags, item.key)"
21
+ :tag-options="getTagOptions(tags, item.key)"
23
22
  >
24
- {{ $st(item.value) }}
25
- </component>
26
- </td>
23
+ </vcs-table-cell>
24
+ </tr>
27
25
  </template>
28
26
  </VcsDataTable>
29
27
  </template>
30
28
  <script>
31
29
  import { computed } from 'vue';
30
+ import VcsTableCell from './VcsTableCell.vue';
32
31
  import VcsDataTable from './VcsDataTable.vue';
33
32
 
34
33
  /**
@@ -125,22 +124,19 @@
125
124
 
126
125
  /**
127
126
  * @description A table view for feature attributes using VcsDataTable
128
- * @vue-prop {string} featureId - feature's id
129
127
  * @vue-prop {Object} attributes - feature's attributes
130
128
  * @vue-prop {Object} tags - Allows to render the value column for specific attribute keys with special html elements. See 'defaultTagOptions' for supported html tags.
131
- * @vue-prop {Array<{title: string, value: string}>} [headers] - optional array defining column names
129
+ * @vue-prop {{title: string, key: 'key', width: string|undefined}} [keyHeader] - optional header defining the key column
130
+ * @vue-prop {{title: string, key: 'value', width: string|undefined}} [valueHeader] - optional header defining the value column
132
131
  * @vue-computed {Array<TableItem>} items - from attributes derived table items
133
132
  */
134
133
  export default {
135
134
  name: 'VcsTable',
136
135
  components: {
136
+ VcsTableCell,
137
137
  VcsDataTable,
138
138
  },
139
139
  props: {
140
- featureId: {
141
- type: String,
142
- required: true,
143
- },
144
140
  attributes: {
145
141
  type: Object,
146
142
  required: true,
@@ -149,16 +145,23 @@
149
145
  type: Object,
150
146
  default: undefined,
151
147
  },
152
- headers: {
153
- type: Array,
154
- default: () => [
155
- { title: 'components.vcsTable.key', value: 'key', width: '160px' },
156
- {
157
- title: 'components.vcsTable.value',
158
- value: 'value',
159
- width: '160px',
160
- },
161
- ],
148
+ keyHeader: {
149
+ type: Object,
150
+ default: () => ({
151
+ title: 'components.vcsTable.key',
152
+ key: 'key',
153
+ width: '128px',
154
+ }),
155
+ validator: (value) => value.key === 'key',
156
+ },
157
+ valueHeader: {
158
+ type: Object,
159
+ default: () => ({
160
+ title: 'components.vcsTable.value',
161
+ key: 'value',
162
+ width: '192px',
163
+ }),
164
+ validator: (value) => value.key === 'value',
162
165
  },
163
166
  },
164
167
  setup(props) {
@@ -166,10 +169,7 @@
166
169
  * @type {ComputedRef<Array<TableItem>>}
167
170
  */
168
171
  const items = computed(() => {
169
- return attributesToItems({
170
- featureId: props.featureId,
171
- ...props.attributes,
172
- });
172
+ return attributesToItems(props.attributes);
173
173
  });
174
174
 
175
175
  return {
@@ -182,28 +182,11 @@
182
182
  </script>
183
183
 
184
184
  <style lang="scss" scoped>
185
- .single-line {
186
- display: block;
187
- white-space: nowrap;
188
- overflow: hidden;
189
- text-overflow: ellipsis;
190
- }
191
- .multi-line {
192
- display: -webkit-box;
193
- -webkit-box-orient: vertical;
194
- -webkit-line-clamp: 3;
195
- overflow: hidden;
196
- height: auto;
197
- max-height: 96px;
198
- }
199
-
200
- .noBorder {
201
- border-bottom: none !important;
202
- }
203
-
204
185
  :deep(.v-data-table__mobile-row__cell) {
205
186
  td.vcs-table.overflow-max-width {
206
187
  max-width: 100% !important;
207
188
  }
208
189
  }
190
+ :deep(.v-table__wrapper) {
191
+ }
209
192
  </style>
@@ -32,10 +32,6 @@ export const defaultTagOptions: {
32
32
  };
33
33
  };
34
34
  declare const _default: import("vue").DefineComponent<{
35
- featureId: {
36
- type: StringConstructor;
37
- required: true;
38
- };
39
35
  attributes: {
40
36
  type: ObjectConstructor;
41
37
  required: true;
@@ -44,23 +40,29 @@ declare const _default: import("vue").DefineComponent<{
44
40
  type: ObjectConstructor;
45
41
  default: undefined;
46
42
  };
47
- headers: {
48
- type: ArrayConstructor;
43
+ keyHeader: {
44
+ type: ObjectConstructor;
45
+ default: () => {
46
+ title: string;
47
+ key: string;
48
+ width: string;
49
+ };
50
+ validator: (value: unknown) => boolean;
51
+ };
52
+ valueHeader: {
53
+ type: ObjectConstructor;
49
54
  default: () => {
50
55
  title: string;
51
- value: string;
56
+ key: string;
52
57
  width: string;
53
- }[];
58
+ };
59
+ validator: (value: unknown) => boolean;
54
60
  };
55
61
  }, {
56
62
  items: ComputedRef<TableItem[]>;
57
63
  getTag: typeof getTag;
58
64
  getTagOptions: typeof getTagOptions;
59
65
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
60
- featureId: {
61
- type: StringConstructor;
62
- required: true;
63
- };
64
66
  attributes: {
65
67
  type: ObjectConstructor;
66
68
  required: true;
@@ -69,17 +71,28 @@ declare const _default: import("vue").DefineComponent<{
69
71
  type: ObjectConstructor;
70
72
  default: undefined;
71
73
  };
72
- headers: {
73
- type: ArrayConstructor;
74
+ keyHeader: {
75
+ type: ObjectConstructor;
76
+ default: () => {
77
+ title: string;
78
+ key: string;
79
+ width: string;
80
+ };
81
+ validator: (value: unknown) => boolean;
82
+ };
83
+ valueHeader: {
84
+ type: ObjectConstructor;
74
85
  default: () => {
75
86
  title: string;
76
- value: string;
87
+ key: string;
77
88
  width: string;
78
- }[];
89
+ };
90
+ validator: (value: unknown) => boolean;
79
91
  };
80
92
  }>>, {
81
- headers: unknown[];
82
93
  tags: Record<string, any>;
94
+ keyHeader: Record<string, any>;
95
+ valueHeader: Record<string, any>;
83
96
  }, {}>;
84
97
  export default _default;
85
98
  export type TableItem = {
@@ -0,0 +1,72 @@
1
+ <script setup>
2
+ import { ref, computed } from 'vue';
3
+ import { VTooltip } from 'vuetify/components';
4
+ import { createEllipseTooltip } from '../composables.js';
5
+
6
+ const props = defineProps({
7
+ title: {
8
+ type: [String, Number],
9
+ default: undefined,
10
+ },
11
+ width: {
12
+ type: [String, Number],
13
+ default: undefined,
14
+ },
15
+ tag: {
16
+ type: String,
17
+ default: 'div',
18
+ },
19
+ tagOptions: {
20
+ type: Object,
21
+ default: () => {},
22
+ },
23
+ });
24
+
25
+ const td = ref(null);
26
+
27
+ const tooltip = createEllipseTooltip(
28
+ computed(() => td.value),
29
+ computed(() => undefined),
30
+ computed(() => props.title),
31
+ );
32
+
33
+ const hasWhiteSpace = computed(() => /\s/.test(props.title));
34
+ // important: tooltip has evaluated before single-line and multi-line class are applied
35
+ const isSingleLine = computed(() => tooltip.value && !hasWhiteSpace.value);
36
+ const isMultiLine = computed(() => tooltip.value && hasWhiteSpace.value);
37
+ </script>
38
+
39
+ <template>
40
+ <td ref="td" :style="{ 'max-width': width }">
41
+ <component
42
+ :is="tag"
43
+ :class="{
44
+ 'single-line': isSingleLine,
45
+ 'multi-line': isMultiLine,
46
+ }"
47
+ v-bind="tagOptions"
48
+ >
49
+ {{ $st(title) }}
50
+ </component>
51
+ <v-tooltip v-if="tooltip" activator="parent">
52
+ {{ $st(tooltip) }}
53
+ </v-tooltip>
54
+ </td>
55
+ </template>
56
+
57
+ <style scoped>
58
+ .single-line {
59
+ display: block;
60
+ white-space: nowrap;
61
+ overflow: hidden;
62
+ text-overflow: ellipsis;
63
+ }
64
+ .multi-line {
65
+ display: -webkit-box;
66
+ -webkit-box-orient: vertical;
67
+ -webkit-line-clamp: 3;
68
+ overflow: hidden;
69
+ height: auto;
70
+ max-height: 96px;
71
+ }
72
+ </style>
@@ -0,0 +1,13 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {
2
+ tag: string;
3
+ tagOptions: Record<string, any>;
4
+ title?: string | number | undefined;
5
+ width?: string | number | undefined;
6
+ $props: {
7
+ readonly tag?: string | undefined;
8
+ readonly tagOptions?: Record<string, any> | undefined;
9
+ readonly title?: string | number | undefined;
10
+ readonly width?: string | number | undefined;
11
+ };
12
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
13
+ export default _default;
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <v-sheet>
3
3
  <VcsFormSection
4
- v-if="session.type === SessionType.SELECT"
4
+ v-if="session?.type === SessionType.SELECT"
5
5
  heading="components.editor.modifyHeader"
6
6
  :action-button-list-overflow-count="5"
7
7
  :header-actions="availableModifyActions"
@@ -45,6 +45,7 @@
45
45
  provide,
46
46
  computed,
47
47
  shallowRef,
48
+ reactive,
48
49
  } from 'vue';
49
50
  import {
50
51
  CesiumMap,
@@ -60,7 +61,7 @@
60
61
  pointVectorProperties,
61
62
  nonPointVectorProperties,
62
63
  } from './VcsVectorPropertiesComponent.vue';
63
- import VcsFormSection from '../form-inputs-controls/VcsFormSection.vue';
64
+ import VcsFormSection from '../section/VcsFormSection.vue';
64
65
 
65
66
  /**
66
67
  * @typedef {Object} EditorManager
@@ -290,6 +291,9 @@
290
291
  nFeatures: features.value.length,
291
292
  }));
292
293
 
294
+ /**
295
+ * @returns {{actions: VcsActions, destroy: function():void}}
296
+ */
293
297
  function getAllowedModifyActions() {
294
298
  const allowedModes = getAllowedEditorTransformationModes(
295
299
  currentGeometryTypes.value.types,
@@ -297,30 +301,53 @@
297
301
  );
298
302
 
299
303
  const allowedActions = allowedModes.map((mode) => {
300
- return {
304
+ return reactive({
301
305
  name: mode,
302
306
  title: `components.editor.${mode}`,
303
307
  icon: EditorTransformationIcons[mode],
304
- active: computed(() => currentTransformationMode.value === mode),
308
+ active: mode === currentTransformationMode.value,
305
309
  callback: () => {
306
310
  toggleTransformationSession(mode);
307
311
  },
308
- };
312
+ });
309
313
  });
310
314
 
315
+ const transformationModeWatcher = watch(
316
+ currentTransformationMode,
317
+ (mode) => {
318
+ allowedActions.forEach((action) => {
319
+ if (Object.values(TransformationMode).includes(action.name)) {
320
+ action.active = mode === action.name;
321
+ }
322
+ });
323
+ },
324
+ );
325
+
326
+ let geometryEditingWatcher;
311
327
  if (features.value.length === 1) {
312
- allowedActions.unshift({
328
+ const editGeometryAction = reactive({
313
329
  name: 'editGeometry',
314
330
  title: `components.editor.edit`,
315
331
  icon: '$vcsEditVertices',
316
- active: isGeometryEditing,
332
+ active: isGeometryEditing.value,
317
333
  callback: () => {
318
334
  toggleEditGeometrySession();
319
335
  },
320
336
  });
337
+ allowedActions.unshift(editGeometryAction);
338
+
339
+ geometryEditingWatcher = watch(isGeometryEditing, () => {
340
+ editGeometryAction.active = isGeometryEditing.value;
341
+ });
321
342
  }
322
343
 
323
- return allowedActions;
344
+ return {
345
+ actions: allowedActions,
346
+ destroy() {
347
+ transformationModeWatcher();
348
+ geometryEditingWatcher?.();
349
+ },
350
+ };
324
351
  }
325
352
 
326
353
  function getAllowedVectorProperties() {
@@ -350,6 +377,8 @@
350
377
  return properties;
351
378
  }
352
379
 
380
+ let destroyModifyActions = () => {};
381
+
353
382
  const geometryTypesWatcher = watch(
354
383
  currentGeometryTypes,
355
384
  (curr, prev) => {
@@ -359,7 +388,11 @@
359
388
  (curr.nFeatures > 1 && prev.nFeatures === 1) ||
360
389
  (prev.nFeatures > 1 && curr.nFeatures === 1)
361
390
  ) {
362
- availableModifyActions.value = getAllowedModifyActions();
391
+ destroyModifyActions();
392
+ const modifyActions = getAllowedModifyActions();
393
+ destroyModifyActions = modifyActions.destroy;
394
+
395
+ availableModifyActions.value = modifyActions.actions;
363
396
  availableVectorProperties.value = getAllowedVectorProperties();
364
397
  }
365
398
  },
@@ -379,6 +412,7 @@
379
412
  geometryTypesWatcher();
380
413
  propsWatcher();
381
414
  editorManager.stopEditing();
415
+ destroyModifyActions();
382
416
  });
383
417
 
384
418
  return {
@@ -11,6 +11,7 @@
11
11
  type="number"
12
12
  placeholder="0"
13
13
  prefix="X"
14
+ force-prefix
14
15
  v-model.number="xValue"
15
16
  unit="m"
16
17
  @keydown.enter.prevent="translate"
@@ -22,6 +23,7 @@
22
23
  type="number"
23
24
  placeholder="0"
24
25
  prefix="Y"
26
+ force-prefix
25
27
  v-model.number="yValue"
26
28
  unit="m"
27
29
  @keydown.enter.prevent="translate"
@@ -33,6 +35,7 @@
33
35
  type="number"
34
36
  placeholder="0"
35
37
  prefix="Z"
38
+ force-prefix
36
39
  v-model.number="zValue"
37
40
  unit="m"
38
41
  :disabled="
@@ -89,6 +92,7 @@
89
92
  <v-col cols="3">
90
93
  <VcsTextField
91
94
  prefix="X"
95
+ force-prefix
92
96
  v-model.number="xValue"
93
97
  placeholder="1"
94
98
  @keydown.enter.prevent="scale"
@@ -97,6 +101,7 @@
97
101
  <v-col cols="3">
98
102
  <VcsTextField
99
103
  prefix="Y"
104
+ force-prefix
100
105
  v-model.number="yValue"
101
106
  placeholder="1"
102
107
  @keydown.enter.prevent="scale"
@@ -460,7 +460,7 @@
460
460
  useProxiedComplexModel,
461
461
  useModelHasProperty,
462
462
  } from '../modelHelper.js';
463
- import VcsFormSection from '../form-inputs-controls/VcsFormSection.vue';
463
+ import VcsFormSection from '../section/VcsFormSection.vue';
464
464
  import VcsLabel from '../form-inputs-controls/VcsLabel.vue';
465
465
  import VcsTextField from '../form-inputs-controls/VcsTextField.vue';
466
466
  import VcsSelect from '../form-inputs-controls/VcsSelect.vue';
@@ -154,9 +154,9 @@
154
154
  height="32"
155
155
  hide-details
156
156
  :step="0.1"
157
- v-model="localValue[key]"
158
- v-bind="hprSliderOptions[key]"
159
157
  :disabled="editAction.active"
158
+ v-bind="hprSliderOptions[key]"
159
+ v-model="localValue[key]"
160
160
  @update:model-value="gotoViewpoint"
161
161
  />
162
162
  </v-col>
@@ -176,11 +176,12 @@
176
176
  onUnmounted,
177
177
  reactive,
178
178
  ref,
179
+ toRaw,
179
180
  watch,
180
181
  } from 'vue';
181
182
  import { VSheet, VContainer, VRow, VCol } from 'vuetify/components';
182
183
  import { CesiumMap, ObliqueMap, OpenlayersMap, Viewpoint } from '@vcmap/core';
183
- import VcsFormSection from '../form-inputs-controls/VcsFormSection.vue';
184
+ import VcsFormSection from '../section/VcsFormSection.vue';
184
185
  import VcsLabel from '../form-inputs-controls/VcsLabel.vue';
185
186
  import VcsTextField from '../form-inputs-controls/VcsTextField.vue';
186
187
  import VcsCheckbox from '../form-inputs-controls/VcsCheckbox.vue';
@@ -188,6 +189,20 @@
188
189
  import VcsSlider from '../form-inputs-controls/VcsSlider.vue';
189
190
  import { useProxiedComplexModel } from '../modelHelper.js';
190
191
 
192
+ /**
193
+ * Updates the localValue ref by keeping name and properties
194
+ * @param {import("vue").Ref<import("vue").UnwrapRef<import("@vcmap/core").ViewpointOptions>>} localValue
195
+ * @param {import("@vcmap/core").Viewpoint} viewpoint
196
+ */
197
+ function updateLocalValueFromViewpoint(localValue, viewpoint) {
198
+ const options = viewpoint.toJSON();
199
+ options.name = localValue.value.name;
200
+ if (localValue.value.properties) {
201
+ options.properties = toRaw(localValue.value.properties);
202
+ }
203
+ localValue.value = options;
204
+ }
205
+
191
206
  /**
192
207
  * Set up post render handler, if action is active.
193
208
  * If action is inactive, destroy post render handler to allow manual editing.
@@ -213,9 +228,7 @@
213
228
  ) {
214
229
  return;
215
230
  }
216
- const options = viewpoint.toJSON();
217
- options.name = localValue.value.name;
218
- localValue.value = options;
231
+ updateLocalValueFromViewpoint(localValue, viewpoint);
219
232
  cachedViewpoint = viewpoint;
220
233
  },
221
234
  );
@@ -416,10 +429,10 @@
416
429
  title: 'components.viewpoint.updateFromView',
417
430
  async callback() {
418
431
  if (app.maps.activeMap) {
419
- const viewpoint = await app.maps.activeMap.getViewpoint();
420
- const options = viewpoint.toJSON();
421
- options.name = localValue.value.name;
422
- localValue.value = options;
432
+ updateLocalValueFromViewpoint(
433
+ localValue,
434
+ await app.maps.activeMap.getViewpoint(),
435
+ );
423
436
  }
424
437
  },
425
438
  };
@@ -7,9 +7,10 @@
7
7
  v-bind="{ ...$attrs, ...$props }"
8
8
  >
9
9
  <VcsViewpointComponent
10
- v-model="localConfig"
11
10
  hide-name
12
11
  :name-rules="nameRules"
12
+ v-bind="$attrs"
13
+ v-model="localConfig"
13
14
  />
14
15
  </AbstractConfigEditor>
15
16
  </template>
@@ -3,8 +3,9 @@
3
3
  <VcsTreeview
4
4
  v-if="tree && tree.length"
5
5
  :items="tree"
6
- v-model:opened="opened"
7
6
  :show-searchbar="true"
7
+ v-model:opened="open"
8
+ open-on-click
8
9
  :searchbar-placeholder="'content.search.placeholder'"
9
10
  item-children="visibleChildren"
10
11
  />
@@ -15,7 +16,7 @@
15
16
  </template>
16
17
 
17
18
  <script>
18
- import { computed, inject, onMounted, reactive, watch } from 'vue';
19
+ import { inject, ref, watch } from 'vue';
19
20
  import { VSheet } from 'vuetify/components';
20
21
  import VcsTreeview from '../components/lists/VcsTreeview.vue';
21
22
 
@@ -35,7 +36,7 @@
35
36
  },
36
37
  setup(props) {
37
38
  const app = inject('vcsApp');
38
- const open = app.contentTree.getTreeOpenState(props.windowState.id);
39
+ const open = ref(app.contentTree.getTreeOpenState(props.windowState.id));
39
40
  const tree = app.contentTree.getComputedVisibleTree(props.windowState.id);
40
41
 
41
42
  function getWithVisibleChildren(item) {
@@ -59,8 +60,7 @@
59
60
  tree,
60
61
  (value, oldValue) => {
61
62
  if (openStateMap.has(app.maps.activeMap?.name)) {
62
- open.splice(0);
63
- open.push(...openStateMap.get(app.maps.activeMap?.name));
63
+ open.value = openStateMap.get(app.maps.activeMap?.name);
64
64
  } else {
65
65
  const items = [...app.contentTree]
66
66
  .filter((i) => i.initOpen && i.getTreeViewItem().visible)
@@ -69,9 +69,9 @@
69
69
  ? oldValue.map(getWithVisibleChildren).flat()
70
70
  : [];
71
71
  const changed = items.filter(
72
- (name) => !oldValues.includes(name) && !open.includes(name),
72
+ (name) => !oldValues.includes(name) && !open.value.includes(name),
73
73
  );
74
- open.push(...changed);
74
+ open.value.push(...changed);
75
75
  }
76
76
  },
77
77
  { immediate: true },
@@ -79,31 +79,13 @@
79
79
 
80
80
  watch(open, () => {
81
81
  if (app.maps.activeMap) {
82
- openStateMap.set(app.maps.activeMap.name, [...open]);
82
+ openStateMap.set(app.maps.activeMap.name, [...open.value]);
83
83
  }
84
84
  });
85
85
 
86
- // the entire block, very ugly because of https://github.com/vuetifyjs/vuetify/issues/19414
87
- const opened = reactive([]);
88
- onMounted(() => {
89
- opened.splice(0);
90
- opened.push(...open);
91
-
92
- watch(opened, () => {
93
- open.splice(0);
94
- open.push(...opened);
95
- });
96
- });
97
-
98
86
  return {
99
87
  tree,
100
- opened: computed({
101
- get: () => opened,
102
- set: (value) => {
103
- opened.splice(0);
104
- opened.push(...value);
105
- },
106
- }),
88
+ open,
107
89
  };
108
90
  },
109
91
  };
@@ -5,7 +5,7 @@ declare const _default: import("vue").DefineComponent<{
5
5
  };
6
6
  }, {
7
7
  tree: any;
8
- opened: import("vue").WritableComputedRef<any[]>;
8
+ open: import("vue").Ref<any>;
9
9
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
10
10
  windowState: {
11
11
  type: ObjectConstructor;
@@ -62,6 +62,7 @@ declare class ContentTreeCollection extends IndexedCollection<ContentTreeItem> {
62
62
  private _suspendListeners;
63
63
  /**
64
64
  * @private
65
+ * @param {Array<string>} exclude
65
66
  */
66
67
  private _clearSubTrees;
67
68
  /**