@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,16 +1,12 @@
1
1
  declare const _default: import("vue").DefineComponent<{
2
2
  content: {
3
3
  type: StringConstructor;
4
- default: () => string;
4
+ required: true;
5
5
  };
6
- }, {
7
- markedHtml: import("vue").ComputedRef<any>;
8
- }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
6
+ }, any, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
9
7
  content: {
10
8
  type: StringConstructor;
11
- default: () => string;
9
+ required: true;
12
10
  };
13
- }>>, {
14
- content: string;
15
- }, {}>;
11
+ }>>, {}, {}>;
16
12
  export default _default;
@@ -1,67 +1,50 @@
1
1
  <template v-if="textPage.title">
2
- <VcsTooltip :tooltip="textPage.tooltip">
3
- <template #activator="{ props }">
4
- <span
5
- class="d-inline-block text-truncate mr-10 setmargin"
6
- v-bind="{ ...$attrs, ...props }"
7
- >
8
- <span v-if="textPage.url" class="imprint-span imprint button">
9
- <a :href="textPage.url" class="link" target="_blank"
10
- >{{ $st(textPage.title) }} <span></span>
11
- </a>
12
- </span>
2
+ <span class="d-inline-block text-truncate mr-1">
3
+ <span v-if="textPage.url" class="imprint">
4
+ <a :href="$st(textPage.url)" target="_blank"
5
+ >{{ $st(textPage.title) }} <span></span>
6
+ </a>
7
+ </span>
13
8
 
14
- <span
15
- v-else
16
- class="imprint-span imprint button link"
17
- @click="addTextPage()"
18
- >{{ $st(textPage.title) }}</span
19
- >
20
- </span>
21
- </template>
22
- </VcsTooltip>
9
+ <span
10
+ v-else
11
+ class="imprint cursor-pointer text-decoration-underline"
12
+ @click="addTextPage()"
13
+ >{{ $st(textPage.title) }}</span
14
+ >
15
+ <v-tooltip
16
+ :text="$st(textPage.tooltip)"
17
+ activator="parent"
18
+ location="top"
19
+ />
20
+ </span>
23
21
  </template>
24
22
 
25
23
  <style lang="scss" scoped>
26
- .button {
27
- cursor: pointer !important;
28
- }
29
- .setmargin {
30
- margin-right: 2px !important;
31
- }
32
24
  .imprint {
33
- margin-left: 2px;
34
- }
35
- .link {
36
- text-decoration: underline;
37
- }
38
- .imprint-span {
39
25
  font-size: smaller;
40
-
41
- &:first-child::before {
42
- content: '';
43
- }
44
- span {
45
- font-size: inherit;
26
+ a {
27
+ color: var(--v-text-color);
46
28
  }
47
29
  }
48
30
  </style>
49
31
 
50
32
  <script>
51
33
  import { inject } from 'vue';
52
- import VcsTooltip from '../components/notification/VcsTooltip.vue';
34
+ import { VTooltip } from 'vuetify/components';
53
35
  import VcsTextPage from './VcsTextPage.vue';
54
36
  import { vcsAppSymbol } from '../pluginHelper.js';
55
37
  import { WindowSlot } from '../manager/window/windowManager.js';
56
38
 
57
39
  /**
58
40
  * A Footer element opening either an URL in a new tab or a WindowComponent with provided content
41
+ * textPage title, tooltip and the url can also be i18n keys, and will be translated.
59
42
  * @vue-prop {import("../uiConfig.js").TextPageType} [textPage]
60
43
  * @vue-prop {string} windowId
61
44
  */
62
45
  export default {
63
46
  name: 'VcsTextPageFooter',
64
- components: { VcsTooltip },
47
+ components: { VTooltip },
65
48
  props: {
66
49
  textPage: {
67
50
  type: Object,
@@ -7,6 +7,7 @@
7
7
  v-for="(btn, index) in buttons"
8
8
  :key="`${btn.name}-${index}`"
9
9
  :tooltip="btn.title"
10
+ :tooltip-position="tooltipPosition"
10
11
  :icon="btn.icon"
11
12
  :active="btn.active"
12
13
  :disabled="btn.disabled || disabled"
@@ -34,6 +35,10 @@
34
35
  </template>
35
36
  <VcsActionList :actions="overflowButtons" :disabled="disabled" />
36
37
  </v-menu>
38
+ <v-spacer
39
+ v-else-if="blockOverflow"
40
+ class="flex-grow-0 d-inline-block px-2"
41
+ />
37
42
  </div>
38
43
  </template>
39
44
  <script>
@@ -43,17 +48,36 @@
43
48
  import VcsFormButton from './VcsFormButton.vue';
44
49
  import VcsActionList, { validateActions } from '../lists/VcsActionList.vue';
45
50
 
51
+ /**
52
+ * compares two strings token based
53
+ * @param {string} str1
54
+ * @param {string} str2
55
+ * @returns {number} the convergence of both strings in percent
56
+ */
57
+ function jaccardSimilarity(str1, str2) {
58
+ const set1 = new Set(str1.split(' '));
59
+ const set2 = new Set(str2.split(' '));
60
+ const intersection = new Set([...set1].filter((x) => set2.has(x)));
61
+ const union = new Set([...set1, ...set2]);
62
+
63
+ return intersection.size / union.size;
64
+ }
65
+
46
66
  /**
47
67
  * @description
48
68
  * A component rendering a list of actions with overflow mechanic using
69
+ * For overflow buttons the title is only rendered, if it differs significantly from the action's name.
49
70
  * {@link VcsButton} and {@link VcsActionList}.
50
71
  * @vue-prop {Array<VcsAction>} actions - Array of actions
51
72
  * @vue-prop {string} [button='VcsButton'] - used button type (one of 'VcsButton', 'VcsToolButton' or 'VcsFormButton)
52
73
  * @vue-prop {number} [overflowCount=2] - number of buttons rendered until overflow.
53
74
  * @vue-prop {string} [overflowIcon='$vcsKebab'] - optional custom icon for overflow button
75
+ * @vue-prop {boolean} [blockOverflow=false] - if space for the overflow should be blocked or not (e.g. when rendering lists in a grid)
76
+ * @vue-prop {boolean} [forceOverflow=true] - if there is only one overflow button, this button can be rendered instead of the overflow button by setting this option to false
77
+ * @vue-prop {boolean} [disabled=false] - disable all actions
78
+ * @vue-prop {('bottom' | 'left' | 'top' | 'right')} tooltipPosition - Position of the tooltip.
54
79
  * @vue-computed {Array<VcsAction>} buttons - buttons rendered directly, have to provide an icon
55
80
  * @vue-computed {Array<VcsAction>} overflowButtons - rest of buttons rendered in overflow
56
- * @vue-prop {boolean} [disabled=false] - disable all actions
57
81
  */
58
82
  export default {
59
83
  name: 'VcsActionButtonList',
@@ -86,19 +110,40 @@
86
110
  type: String,
87
111
  default: '$vcsKebab',
88
112
  },
113
+ blockOverflow: {
114
+ type: Boolean,
115
+ default: false,
116
+ },
117
+ forceOverflow: {
118
+ type: Boolean,
119
+ default: true,
120
+ },
89
121
  disabled: {
90
122
  type: Boolean,
91
123
  default: false,
92
124
  },
125
+ tooltipPosition: {
126
+ type: String,
127
+ default: 'bottom',
128
+ },
93
129
  },
94
130
  computed: {
95
131
  right() {
96
132
  return this.$attrs.right !== undefined && this.$attrs.right !== false;
97
133
  },
134
+ computedCount() {
135
+ if (
136
+ !this.forceOverflow &&
137
+ this.actions.length === this.overflowCount + 1
138
+ ) {
139
+ return this.actions.length;
140
+ }
141
+ return this.overflowCount;
142
+ },
98
143
  buttons() {
99
144
  const buttons = this.actions
100
145
  .filter((i) => i.icon)
101
- .slice(0, this.overflowCount);
146
+ .slice(0, this.computedCount);
102
147
  if (this.right) {
103
148
  return buttons.reverse();
104
149
  }
@@ -106,7 +151,18 @@
106
151
  },
107
152
  overflowButtons() {
108
153
  const buttonsNames = this.buttons.map((i) => i.name);
109
- return this.actions.filter((i) => !buttonsNames.includes(i.name));
154
+ return this.actions
155
+ .filter((i) => !buttonsNames.includes(i.name))
156
+ .map((i) => {
157
+ const { title, ...button } = i;
158
+ if (
159
+ title &&
160
+ jaccardSimilarity(this.$t(i.name), this.$t(title)) > 0.5
161
+ ) {
162
+ return button;
163
+ }
164
+ return i;
165
+ });
110
166
  },
111
167
  classes() {
112
168
  const classes = ['d-flex', 'align-center', 'action-btn-wrap'];
@@ -17,12 +17,25 @@ declare const _default: import("vue").DefineComponent<{
17
17
  type: StringConstructor;
18
18
  default: string;
19
19
  };
20
+ blockOverflow: {
21
+ type: BooleanConstructor;
22
+ default: boolean;
23
+ };
24
+ forceOverflow: {
25
+ type: BooleanConstructor;
26
+ default: boolean;
27
+ };
20
28
  disabled: {
21
29
  type: BooleanConstructor;
22
30
  default: boolean;
23
31
  };
32
+ tooltipPosition: {
33
+ type: StringConstructor;
34
+ default: string;
35
+ };
24
36
  }, any, any, {
25
37
  right(): boolean;
38
+ computedCount(): any;
26
39
  buttons(): any;
27
40
  overflowButtons(): any;
28
41
  classes(): string[];
@@ -45,15 +58,30 @@ declare const _default: import("vue").DefineComponent<{
45
58
  type: StringConstructor;
46
59
  default: string;
47
60
  };
61
+ blockOverflow: {
62
+ type: BooleanConstructor;
63
+ default: boolean;
64
+ };
65
+ forceOverflow: {
66
+ type: BooleanConstructor;
67
+ default: boolean;
68
+ };
48
69
  disabled: {
49
70
  type: BooleanConstructor;
50
71
  default: boolean;
51
72
  };
73
+ tooltipPosition: {
74
+ type: StringConstructor;
75
+ default: string;
76
+ };
52
77
  }>>, {
53
78
  button: string;
54
79
  disabled: boolean;
80
+ tooltipPosition: string;
55
81
  overflowCount: number;
56
82
  overflowIcon: string;
83
+ blockOverflow: boolean;
84
+ forceOverflow: boolean;
57
85
  }, {}>;
58
86
  export default _default;
59
87
  import { validateActions } from '../lists/VcsActionList.vue';
@@ -18,7 +18,7 @@
18
18
  import { useProxiedComplexModel } from '../modelHelper.js';
19
19
  import { setupExtentComponentActions } from '../../actions/extentActions.js';
20
20
  import VcsExtent from './VcsExtent.vue';
21
- import VcsFormSection from '../form-inputs-controls/VcsFormSection.vue';
21
+ import VcsFormSection from '../section/VcsFormSection.vue';
22
22
 
23
23
  /**
24
24
  * A VcsFormSection with actions to draw and edit an extent
@@ -7,13 +7,14 @@
7
7
  >
8
8
  <v-container class="py-0 px-0">
9
9
  <v-sheet v-if="items.length < 1" class="ma-2 pl-2">
10
- {{ $t('components.flight.noAnchor') }}
11
- <VcsButton
12
- :icon="addAnchorAction.icon"
13
- :tooltip="addAnchorAction.title"
14
- @click.stop="addAnchorAction.callback()"
15
- class="d-flex justify-center"
16
- />
10
+ <p>{{ $t('components.flight.noAnchor') }}</p>
11
+ <div class="d-flex justify-center">
12
+ <VcsButton
13
+ :icon="addAnchorAction.icon"
14
+ :tooltip="addAnchorAction.title"
15
+ @click.stop="addAnchorAction.callback()"
16
+ />
17
+ </div>
17
18
  </v-sheet>
18
19
  <VcsList
19
20
  v-else
@@ -22,32 +23,35 @@
22
23
  :show-title="false"
23
24
  @item-moved="move"
24
25
  >
25
- <!-- eslint-disable-next-line -->
26
- <template #item.append-title="{ item, index }">
27
- <VcsTextField
28
- v-if="showDuration(index)"
29
- v-model.number="item.duration"
30
- :hide-spin-buttons="true"
31
- type="number"
32
- unit="s"
33
- step="1"
34
- :decimals="2"
35
- :rules="[durationRule]"
36
- no-padding
37
- class="ml-auto"
38
- style="width: 50px"
39
- />
26
+ <template #item.title="{ item, index }">
27
+ <div class="d-flex align-center">
28
+ <span>{{ $st(item.title) }}</span>
29
+ <v-spacer />
30
+ <div class="duration-input">
31
+ <VcsTextField
32
+ v-if="showDuration(index)"
33
+ v-model.number="item.duration"
34
+ :hide-spin-buttons="true"
35
+ type="number"
36
+ unit="s"
37
+ step="1"
38
+ :decimals="2"
39
+ :rules="[durationRule]"
40
+ no-padding
41
+ class="ml-auto"
42
+ />
43
+ </div>
44
+ </div>
40
45
  </template>
41
- <!-- eslint-disable-next-line -->
42
- <template #item.intermediate="{ item, index }">
43
- <VcsButton
44
- :key="`item-intermediate-${index}`"
45
- :icon="addAnchorAction.icon"
46
- :tooltip="addAnchorAction.title"
47
- @click.stop="addAnchorAction.callback(index + 1)"
48
- class="d-flex justify-center z-index-99"
49
- height="0"
50
- />
46
+ <template #item.intermediate="{ index }">
47
+ <div class="d-flex justify-center h-0">
48
+ <VcsButton
49
+ :icon="addAnchorAction.icon"
50
+ :tooltip="addAnchorAction.title"
51
+ @click.stop="addAnchorAction.callback(index + 1)"
52
+ class="z-index-99 mx-auto add-in-button"
53
+ />
54
+ </div>
51
55
  </template>
52
56
  </VcsList>
53
57
  </v-container>
@@ -55,7 +59,7 @@
55
59
  </template>
56
60
  <script>
57
61
  import { computed, inject, onMounted, onUnmounted, ref } from 'vue';
58
- import { VContainer, VSheet } from 'vuetify/components';
62
+ import { VContainer, VSheet, VSpacer } from 'vuetify/components';
59
63
  import {
60
64
  anchorFromViewpoint,
61
65
  anchorToViewpoint,
@@ -63,7 +67,7 @@
63
67
  } from '@vcmap/core';
64
68
  import { Cartesian3 } from '@vcmap-cesium/engine';
65
69
  import { createToggleAction } from '../../actions/actionHelper.js';
66
- import VcsFormSection from '../form-inputs-controls/VcsFormSection.vue';
70
+ import VcsFormSection from '../section/VcsFormSection.vue';
67
71
  import VcsList from '../lists/VcsList.vue';
68
72
  import VcsTextField from '../form-inputs-controls/VcsTextField.vue';
69
73
  import VcsButton from '../buttons/VcsButton.vue';
@@ -197,7 +201,8 @@
197
201
  }
198
202
 
199
203
  export function durationRule(value) {
200
- if (Number.isFinite(value) && value > 0) {
204
+ const v = Number.parseFloat(value);
205
+ if (Number.isFinite(v) && v > 0) {
201
206
  return true;
202
207
  }
203
208
  return 'components.flight.invalidDuration';
@@ -217,6 +222,7 @@
217
222
  VcsTextField,
218
223
  VContainer,
219
224
  VSheet,
225
+ VSpacer,
220
226
  VcsFormSection,
221
227
  VcsList,
222
228
  },
@@ -242,6 +248,14 @@
242
248
  flightInstance.propertyChanged.addEventListener((prop) => {
243
249
  if (prop === 'loop') {
244
250
  loop.value = flightInstance.loop;
251
+ // update last anchor's duration
252
+ const lastAnchor = flightInstance.anchors.get(
253
+ flightInstance.anchors.size - 1,
254
+ );
255
+ lastAnchor.duration = calculateDuration(
256
+ lastAnchor,
257
+ flightInstance.anchors.get(0),
258
+ );
245
259
  }
246
260
  });
247
261
 
@@ -328,7 +342,20 @@
328
342
  };
329
343
  </script>
330
344
  <style scoped lang="scss">
345
+ :deep(.v-list-item) {
346
+ padding: 0 8px 0 16px;
347
+ }
348
+ :deep(.v-list) {
349
+ overflow: visible;
350
+ }
351
+ .duration-input {
352
+ width: 60px;
353
+ }
331
354
  .z-index-99 {
332
- z-index: 99;
355
+ z-index: 99 !important;
356
+ }
357
+ .add-in-button {
358
+ min-height: 0 !important;
359
+ margin-top: -8px;
333
360
  }
334
361
  </style>
@@ -18,24 +18,23 @@
18
18
  <v-container class="py-0 px-1">
19
19
  <v-row no-gutters v-if="!hideName">
20
20
  <v-col cols="6">
21
- <VcsLabel html-for="name" dense required>
21
+ <VcsLabel html-for="name" required>
22
22
  {{ $t('components.flight.name') }}
23
23
  </VcsLabel>
24
24
  </v-col>
25
25
  <v-col>
26
- <VcsTextField id="name" dense clearable v-model="name" />
26
+ <VcsTextField id="name" clearable v-model="name" />
27
27
  </v-col>
28
28
  </v-row>
29
29
  <v-row no-gutters v-if="!hideTitle">
30
30
  <v-col cols="6">
31
- <VcsLabel html-for="title" dense>
31
+ <VcsLabel html-for="title">
32
32
  {{ $t('components.flight.title') }}
33
33
  </VcsLabel>
34
34
  </v-col>
35
35
  <v-col>
36
36
  <VcsTextField
37
37
  id="title"
38
- dense
39
38
  clearable
40
39
  :placeholder="$t('components.flight.titlePlaceholder')"
41
40
  v-model="title"
@@ -44,17 +43,16 @@
44
43
  </v-row>
45
44
  <v-row no-gutters v-if="!hideInterpolation">
46
45
  <v-col cols="6">
47
- <VcsLabel html-for="interpolation" dense>
46
+ <VcsLabel html-for="interpolation">
48
47
  {{ $t('components.flight.interpolation') }}
49
48
  </VcsLabel>
50
49
  </v-col>
51
50
  <v-col>
52
51
  <VcsSelect
53
52
  id="title"
54
- dense
55
53
  :items="[
56
- { value: 'spline', text: 'components.flight.spline' },
57
- { value: 'linear', text: 'components.flight.linear' },
54
+ { value: 'spline', title: 'components.flight.spline' },
55
+ { value: 'linear', title: 'components.flight.linear' },
58
56
  ]"
59
57
  v-model="interpolation"
60
58
  />
@@ -62,18 +60,17 @@
62
60
  </v-row>
63
61
  <v-row no-gutters v-if="!hideDuration">
64
62
  <v-col cols="6">
65
- <VcsLabel html-for="duration" dense>
63
+ <VcsLabel html-for="duration">
66
64
  {{ $t('components.flight.duration') }}
67
65
  </VcsLabel>
68
66
  </v-col>
69
67
  <v-col>
70
68
  <VcsTextField
71
69
  id="duration"
72
- v-model.number="duration"
70
+ v-model="duration"
73
71
  :hide-spin-buttons="true"
74
72
  type="number"
75
73
  unit="s"
76
- step="1"
77
74
  :decimals="2"
78
75
  :disabled="disablePlayer"
79
76
  :rules="[durationRule]"
@@ -85,7 +82,6 @@
85
82
  <VcsCheckbox
86
83
  id="animate"
87
84
  label="components.flight.loop"
88
- dense
89
85
  v-model="loop"
90
86
  />
91
87
  </v-col>
@@ -106,7 +102,7 @@
106
102
  import { computed, onUnmounted, ref, inject } from 'vue';
107
103
  import { VSheet, VContainer, VRow, VCol, VDivider } from 'vuetify/components';
108
104
  import { getSplineAndTimesForInstance } from '@vcmap/core';
109
- import VcsFormSection from '../form-inputs-controls/VcsFormSection.vue';
105
+ import VcsFormSection from '../section/VcsFormSection.vue';
110
106
  import VcsLabel from '../form-inputs-controls/VcsLabel.vue';
111
107
  import VcsTextField from '../form-inputs-controls/VcsTextField.vue';
112
108
  import VcsSelect from '../form-inputs-controls/VcsSelect.vue';
@@ -128,7 +124,7 @@
128
124
  function getFlightDuration(instance) {
129
125
  if (instance.isValid()) {
130
126
  const { times } = getSplineAndTimesForInstance(instance);
131
- return times.at(-1);
127
+ return Math.round(times.at(-1) * 100) / 100;
132
128
  }
133
129
  return 0;
134
130
  }
@@ -208,6 +204,7 @@
208
204
  setup() {
209
205
  const app = inject('vcsApp');
210
206
  const flightInstance = getProvidedFlightInstance();
207
+ const loop = ref(flightInstance.loop);
211
208
  const flightDuration = ref(getFlightDuration(flightInstance));
212
209
  const disablePlayer = ref(!(flightDuration.value > 0));
213
210
  const flightDurationListener = [
@@ -258,12 +255,9 @@
258
255
  return flightDuration.value;
259
256
  },
260
257
  set(value) {
261
- if (
262
- Number.isFinite(value) &&
263
- value > 0 &&
264
- flightDuration.value > 0
265
- ) {
266
- const factor = value / flightDuration.value;
258
+ const v = parseFloat(value);
259
+ if (Number.isFinite(v) && v > 0 && flightDuration.value > 0) {
260
+ const factor = v / flightDuration.value;
267
261
  [...flightInstance.anchors].forEach((anchor) => {
268
262
  anchor.duration *= factor;
269
263
  });
@@ -273,9 +267,10 @@
273
267
  durationRule,
274
268
  loop: computed({
275
269
  get() {
276
- return flightInstance?.loop;
270
+ return loop.value;
277
271
  },
278
272
  set(value) {
273
+ loop.value = !!value;
279
274
  flightInstance.loop = !!value;
280
275
  },
281
276
  }),
@@ -4,8 +4,8 @@
4
4
  <VcsSlider
5
5
  v-if="clock"
6
6
  type="number"
7
- v-model="clock.currentTime"
8
- @change="setTime"
7
+ :model-value="clock.currentTime"
8
+ @update:modelValue="setTime"
9
9
  :step="0"
10
10
  :min="clock.startTime"
11
11
  :max="clock.endTime"
@@ -25,7 +25,8 @@
25
25
  :has-update="btn.hasUpdate"
26
26
  :background="btn.background"
27
27
  @click.stop="btn.callback($event)"
28
- v-bind="{ ...$attrs, ...btn.listeners }"
28
+ v-bind="{ ...$attrs }"
29
+ v-on="btn.listeners ? btn.listeners : {}"
29
30
  />
30
31
  <span>{{ clockTime(clock.endTime) }}</span>
31
32
  </div>
@@ -49,6 +50,19 @@
49
50
  };
50
51
  }
51
52
 
53
+ /**
54
+ *
55
+ * @param {import("vue").Ref<Partial<import("@vcmap/core").FlightPlayerClock>>} clock
56
+ * @param {import("@vcmap/core").FlightPlayerClock} changed
57
+ */
58
+ function syncClocks(clock, changed) {
59
+ Object.keys(getDefaultClock()).forEach((key) => {
60
+ if (clock.value[key] !== changed[key]) {
61
+ clock.value[key] = changed[key];
62
+ }
63
+ });
64
+ }
65
+
52
66
  /**
53
67
  * @description A component for editing flight anchors.
54
68
  * Requires a flightInstance to be provided via vue-provide.
@@ -79,12 +93,19 @@
79
93
  flightInstance,
80
94
  );
81
95
 
96
+ let clockChangedListener = () => {};
82
97
  const playerChangedListener = app.flights.playerChanged.addEventListener(
83
98
  (player) => {
99
+ clockChangedListener();
84
100
  if (player?.flightInstanceName === flightInstance.name) {
85
101
  isCurrentPlayer.value = true;
86
102
  flightInstancePlayer = player;
87
- clock.value = player.clock;
103
+ syncClocks(clock, player.clock);
104
+ clockChangedListener = player.clock.changed.addEventListener(
105
+ (changed) => {
106
+ syncClocks(clock, changed);
107
+ },
108
+ );
88
109
  } else {
89
110
  isCurrentPlayer.value = false;
90
111
  flightInstancePlayer = undefined;
@@ -96,7 +117,7 @@
96
117
  onMounted(async () => {
97
118
  flightInstancePlayer =
98
119
  await app.flights.setPlayerForFlight(flightInstance);
99
- clock.value = flightInstancePlayer.clock;
120
+ syncClocks(clock, flightInstancePlayer.clock);
100
121
  });
101
122
 
102
123
  onUnmounted(() => {
@@ -114,6 +135,7 @@
114
135
  return `${mins}:${secs < 10 ? 0 : ''}${secs}`;
115
136
  },
116
137
  setTime(seconds) {
138
+ clock.value.currentTime = seconds;
117
139
  flightInstancePlayer?.goToTime(seconds);
118
140
  },
119
141
  };