@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
@@ -5,9 +5,15 @@
5
5
  :options="splashScreen"
6
6
  v-model="splashScreenRef"
7
7
  ></VcsSplashScreen>
8
- <VcsNavbar />
8
+ <VcsNavbar v-if="!config.hideHeader" />
9
9
  <VcsContainer :attribution-action="attributionAction" />
10
- <v-footer v-if="smAndUp" app absolute height="22" class="d-flex gc-1 pa-0">
10
+ <v-footer
11
+ v-if="showFooter"
12
+ app
13
+ absolute
14
+ :height="footerHeight"
15
+ class="d-flex gc-1 pa-0"
16
+ >
11
17
  <VcsPositionDisplay />
12
18
  <VcsTextPageFooter
13
19
  v-if="imprint"
@@ -57,18 +63,49 @@
57
63
  import VcsSettings from './VcsSettings.vue';
58
64
  import { WindowSlot } from '../manager/window/windowManager.js';
59
65
  import CollectionManager from '../manager/collectionManager/CollectionManager.vue';
60
- import { defaultPrimaryColor } from '../vuePlugins/vuetify.js';
66
+ import { defaultPrimaryColor, useFontSize } from '../vuePlugins/vuetify.js';
61
67
  import VcsLegend from '../legend/VcsLegend.vue';
62
68
  import { getLegendEntries } from '../legend/legendHelper.js';
63
69
  import VcsAttributionsFooter from './VcsAttributionsFooter.vue';
64
70
  import VcsTextPageFooter from './VcsTextPageFooter.vue';
65
71
  import VcsSplashScreen from './VcsSplashScreen.vue';
66
- import VcsCustomScreen from './VcsCustomScreen.vue';
72
+ import VcsTextPage from './VcsTextPage.vue';
67
73
  import VcsAttributions from './VcsAttributions.vue';
68
74
  import { getAttributions } from './attributionsHelper.js';
69
75
  import VcsDefaultLogoMobile from '../logo-mobile.svg';
70
76
  import VcsPositionDisplay from './VcsPositionDisplay.vue';
71
77
 
78
+ /**
79
+ * This helper checks the uiConfig and depending on the value will setup/teardown the providedSetupFunction
80
+ * @param {import("../vcsUiApp.js").default} app
81
+ * @param {(import("../vcsUiApp.js").default) => () => void} setupFunction
82
+ * @param {string} configOption parameter name of a uiConfig parameter, for example `app.uiConfig.config.hideContentTree`
83
+ * @returns {function():void} - cleanup function
84
+ */
85
+ export function setupUIConfigDependency(app, setupFunction, configOption) {
86
+ let destroyFunction = null;
87
+ function handler() {
88
+ if (!app.uiConfig.config[configOption] && !destroyFunction) {
89
+ destroyFunction = setupFunction(app);
90
+ } else if (app.uiConfig.config[configOption] && destroyFunction) {
91
+ destroyFunction();
92
+ destroyFunction = null;
93
+ }
94
+ }
95
+ handler();
96
+ const listeners = [
97
+ app.uiConfig.added.addEventListener(handler),
98
+ app.uiConfig.added.addEventListener(handler),
99
+ ];
100
+
101
+ return () => {
102
+ if (destroyFunction) {
103
+ destroyFunction();
104
+ }
105
+ listeners.forEach((cb) => cb());
106
+ };
107
+ }
108
+
72
109
  /**
73
110
  * You should call this function in the component providing the vcsUiApp to your
74
111
  * application in the components mounted hook. This will call VcsAppMounted on all plugins in the app
@@ -103,6 +140,7 @@
103
140
  /**
104
141
  * This helper function will add a map action button based on the default icons
105
142
  * to the apps NavbarManager. Furthermore, all maps on the app are synced for adding and removing.
143
+ * The buttons can be removed with the uiConfig hideMapButtons
106
144
  * @param {import("../vcsUiApp.js").default} app
107
145
  * @returns {function():void}
108
146
  */
@@ -225,8 +263,11 @@
225
263
  if (layersWithLegend < 1 && stylesWithLegend < 1) {
226
264
  app.navbarManager.remove('legend');
227
265
  app.windowManager.remove('legend');
266
+ } else {
267
+ addLegend();
228
268
  }
229
269
  };
270
+ handleLegend();
230
271
 
231
272
  const listeners = [
232
273
  app.layers.added.addEventListener((layer) => {
@@ -244,6 +285,8 @@
244
285
  ];
245
286
 
246
287
  return () => {
288
+ app.navbarManager.remove('legend');
289
+ app.windowManager.remove('legend');
247
290
  destroy();
248
291
  legendDestroy();
249
292
  listeners.forEach((cb) => cb());
@@ -257,7 +300,7 @@
257
300
  */
258
301
  function setupCustomScreen(app) {
259
302
  function setupCustomScreenAction() {
260
- const { customScreen } = app.uiConfig.config.value;
303
+ const { customScreen } = app.uiConfig.config;
261
304
  const { action: customScreenAction, destroy: customScreenDestroy } =
262
305
  createToggleAction(
263
306
  {
@@ -267,7 +310,7 @@
267
310
  },
268
311
  {
269
312
  id: 'customScreenId',
270
- component: VcsCustomScreen,
313
+ component: VcsTextPage,
271
314
  state: {
272
315
  headerIcon: customScreen.icon,
273
316
  headerTitle: customScreen.name,
@@ -295,7 +338,7 @@
295
338
  }
296
339
  let customScreen;
297
340
  const stopCustomScreenWatcher = watch(
298
- () => app.uiConfig.config.value.customScreen,
341
+ () => app.uiConfig.config.customScreen,
299
342
  (newCustomScreen) => {
300
343
  if (app.navbarManager.has('customScreenToggle')) {
301
344
  app.navbarManager.remove('customScreenToggle');
@@ -321,37 +364,51 @@
321
364
  */
322
365
  function setupSplashScreen(app, splashScreenRef) {
323
366
  function setupSplashScreenAction() {
324
- const { splashScreen } = app.uiConfig.config.value;
325
- const splashScreenAction = {
326
- name: splashScreen.name || 'components.splashScreen.name',
327
- icon: splashScreen.icon || 'mdi-alert-box',
328
- title: splashScreen.title,
329
- callback() {
330
- splashScreenRef.value = !splashScreenRef.value;
331
- },
332
- };
333
- app.navbarManager.add(
334
- {
335
- id: 'splashScreenToggle',
336
- action: splashScreenAction,
337
- },
338
- vcsAppSymbol,
339
- ButtonLocation.MENU,
340
- );
367
+ const { splashScreen } = app.uiConfig.config;
368
+ if (splashScreen) {
369
+ splashScreenRef.value = true;
370
+ }
371
+ if (splashScreen && splashScreen.menuEntry) {
372
+ const splashScreenAction = {
373
+ name: splashScreen.name || 'components.splashScreen.name',
374
+ icon: splashScreen.icon || 'mdi-alert-box',
375
+ title: splashScreen.title,
376
+ callback() {
377
+ splashScreenRef.value = !splashScreenRef.value;
378
+ },
379
+ };
380
+ app.navbarManager.add(
381
+ {
382
+ id: 'splashScreenToggle',
383
+ action: splashScreenAction,
384
+ },
385
+ vcsAppSymbol,
386
+ ButtonLocation.MENU,
387
+ );
388
+ }
341
389
  }
342
-
343
- return watch(
344
- () => app.uiConfig.config.value.splashScreen,
345
- (newSplashScreen) => {
390
+ setupSplashScreenAction();
391
+ const removeAddedListener = app.uiConfig.added.addEventListener((item) => {
392
+ if (item.name === 'splashScreen') {
346
393
  if (app.navbarManager.has('splashScreenToggle')) {
347
394
  app.navbarManager.remove('splashScreenToggle');
348
395
  }
349
- if (newSplashScreen && newSplashScreen.menuEntry) {
350
- setupSplashScreenAction();
396
+ setupSplashScreenAction();
397
+ }
398
+ });
399
+ const removeRemovedListener = app.uiConfig.removed.addEventListener(
400
+ (item) => {
401
+ if (item.name === 'splashScreen') {
402
+ if (app.navbarManager.has('splashScreenToggle')) {
403
+ app.navbarManager.remove('splashScreenToggle');
404
+ }
351
405
  }
352
406
  },
353
- { immediate: true },
354
407
  );
408
+ return () => {
409
+ removeAddedListener();
410
+ removeRemovedListener();
411
+ };
355
412
  }
356
413
  /**
357
414
  * This helper function will add a settings action button to the apps NavbarManager MENU location.
@@ -359,6 +416,7 @@
359
416
  * @returns {function():void}
360
417
  */
361
418
  export function setupSettingsWindow(app) {
419
+ const settingsWindowId = 'vcsSettings';
362
420
  const { action: settingsAction, destroy: settingsDestroy } =
363
421
  createToggleAction(
364
422
  {
@@ -367,7 +425,7 @@
367
425
  title: 'settings.tooltip',
368
426
  },
369
427
  {
370
- id: 'settingsId',
428
+ id: settingsWindowId,
371
429
  component: VcsSettings,
372
430
  state: { headerIcon: 'mdi-cog', headerTitle: 'settings.title' },
373
431
  slot: WindowSlot.DYNAMIC_RIGHT,
@@ -377,13 +435,15 @@
377
435
  );
378
436
  app.navbarManager.add(
379
437
  {
380
- id: 'settingsToggle',
438
+ id: settingsWindowId,
381
439
  action: settingsAction,
382
440
  },
383
441
  vcsAppSymbol,
384
442
  ButtonLocation.MENU,
385
443
  );
386
444
  return () => {
445
+ app.navbarManager.remove(settingsWindowId);
446
+ app.windowManager.remove(settingsWindowId);
387
447
  settingsDestroy();
388
448
  };
389
449
  }
@@ -411,6 +471,11 @@
411
471
  );
412
472
  }
413
473
 
474
+ /**
475
+ * @type {string}
476
+ */
477
+ export const categoryManagerWindowId = 'category-manager';
478
+
414
479
  /**
415
480
  * This helper function will add a category manager button to the navbar. The category Manager
416
481
  * will only be shown if there is at least one category under management in the categoryManager.
@@ -418,15 +483,14 @@
418
483
  * @returns {function():void}
419
484
  */
420
485
  export function setupCategoryManagerWindow(app) {
421
- const id = 'category-manager';
422
486
  const { action: categoryManagerAction, destroy } = createToggleAction(
423
487
  {
424
- name: id,
488
+ name: categoryManagerWindowId,
425
489
  icon: '$vcsComponents',
426
490
  title: 'categoryManager.tooltip',
427
491
  },
428
492
  {
429
- id,
493
+ id: categoryManagerWindowId,
430
494
  state: {
431
495
  headerTitle: 'categoryManager.title',
432
496
  headerIcon: '$vcsComponents',
@@ -452,9 +516,9 @@
452
516
  * @param {import("../manager/collectionManager/collectionComponentClass.js").default} collectionComponent
453
517
  */
454
518
  function handleAdded(collectionComponent) {
455
- if (!app.navbarManager.has(id)) {
519
+ if (!app.navbarManager.has(categoryManagerWindowId)) {
456
520
  app.navbarManager.add(
457
- { id, action: categoryManagerAction },
521
+ { id: categoryManagerWindowId, action: categoryManagerAction },
458
522
  vcsAppSymbol,
459
523
  ButtonLocation.CONTENT,
460
524
  );
@@ -463,7 +527,7 @@
463
527
  collectionComponent.id,
464
528
  collectionComponent.collection.added.addEventListener((item) => {
465
529
  if (
466
- !app.windowManager.has(id) &&
530
+ !app.windowManager.has(categoryManagerWindowId) &&
467
531
  item[moduleIdSymbol] === app.dynamicModuleId
468
532
  ) {
469
533
  categoryManagerAction.hasUpdate = true;
@@ -482,8 +546,8 @@
482
546
  collectionListeners.delete(collectionComponent.id);
483
547
 
484
548
  if (!app.categoryManager.componentIds.length) {
485
- app.windowManager.remove(id);
486
- app.navbarManager.remove(id);
549
+ app.windowManager.remove(categoryManagerWindowId);
550
+ app.navbarManager.remove(categoryManagerWindowId);
487
551
  categoryManagerAction.hasUpdate = false;
488
552
  }
489
553
  }
@@ -500,13 +564,15 @@
500
564
 
501
565
  const windowListener = app.windowManager.added.addEventListener(
502
566
  (windowComponent) => {
503
- if (windowComponent.id === id) {
567
+ if (windowComponent.id === categoryManagerWindowId) {
504
568
  categoryManagerAction.hasUpdate = false;
505
569
  }
506
570
  },
507
571
  );
508
572
 
509
573
  return () => {
574
+ app.windowManager.remove(categoryManagerWindowId);
575
+ app.navbarManager.remove(categoryManagerWindowId);
510
576
  destroy();
511
577
  addedListener();
512
578
  removedListener();
@@ -651,14 +717,30 @@
651
717
  /** @type {import("../vcsUiApp.js").default} */
652
718
  const app = getVcsAppById(props.appId);
653
719
  provide('vcsApp', app);
654
- const mapNavbarListener = setupMapNavbar(app);
655
- const legendDestroy = setupLegendWindow(app);
656
- const settingsDestroy = setupSettingsWindow(app);
720
+ const mapNavbarListener = setupUIConfigDependency(
721
+ app,
722
+ setupMapNavbar,
723
+ 'hideMapButtons',
724
+ );
725
+ const legendDestroy = setupUIConfigDependency(
726
+ app,
727
+ setupLegendWindow,
728
+ 'hideLegend',
729
+ );
730
+ const settingsDestroy = setupUIConfigDependency(
731
+ app,
732
+ setupSettingsWindow,
733
+ 'hideSettings',
734
+ );
657
735
  const stopCustomScreen = setupCustomScreen(app);
658
736
  const splashScreenRef = ref(true);
659
737
  const stopSplashScreen = setupSplashScreen(app, splashScreenRef);
660
738
  setupHelpButton(app);
661
- const destroyComponentsWindow = setupCategoryManagerWindow(app);
739
+ const destroyMyWorkspace = setupUIConfigDependency(
740
+ app,
741
+ setupCategoryManagerWindow,
742
+ 'hideMyWorkspace',
743
+ );
662
744
  const destroyThemingListener = setupUiConfigTheming(app);
663
745
  const destroyDisplayQualityListener = setupUiConfigDisplayQuality(app);
664
746
  const { attributionEntries, attributionAction, destroyAttributions } =
@@ -678,45 +760,53 @@
678
760
  settingsDestroy();
679
761
  stopCustomScreen();
680
762
  stopSplashScreen();
681
- destroyComponentsWindow();
763
+ destroyMyWorkspace();
682
764
  destroyThemingListener();
683
- destroyAttributions();
684
765
  destroyDisplayQualityListener();
766
+ destroyAttributions();
685
767
  });
686
768
 
687
769
  const { smAndUp } = useDisplay();
770
+ const fontSize = useFontSize();
771
+ const footerHeight = computed(() => {
772
+ return Math.ceil(fontSize.value * 1.65);
773
+ });
688
774
 
689
775
  return {
690
- smAndUp,
776
+ config: app.uiConfig.config,
777
+ showFooter: computed(() => {
778
+ return !app.uiConfig.config.hideFooter && smAndUp.value;
779
+ }),
780
+ footerHeight,
691
781
  mobileLogo: computed(
692
782
  () =>
693
- app.uiConfig.config.value.mobileLogo ??
694
- app.uiConfig.config.value.logo ??
783
+ app.uiConfig.config.mobileLogo ??
784
+ app.uiConfig.config.logo ??
695
785
  VcsDefaultLogoMobile,
696
786
  ),
697
787
  imprint: computed(() => {
698
- if (app.uiConfig.config.value.imprint) {
788
+ if (app.uiConfig.config.imprint) {
699
789
  return {
700
790
  title: 'footer.imprint.title',
701
791
  tooltip: 'footer.imprint.tooltip',
702
- ...app.uiConfig.config.value.imprint,
792
+ ...app.uiConfig.config.imprint,
703
793
  };
704
794
  }
705
795
  return undefined;
706
796
  }),
707
797
  dataProtection: computed(() => {
708
- if (app.uiConfig.config.value.dataProtection) {
798
+ if (app.uiConfig.config.dataProtection) {
709
799
  return {
710
800
  title: 'footer.dataProtection.title',
711
801
  tooltip: 'footer.dataProtection.tooltip',
712
- ...app.uiConfig.config.value.dataProtection,
802
+ ...app.uiConfig.config.dataProtection,
713
803
  };
714
804
  }
715
805
  return undefined;
716
806
  }),
717
807
  splashScreenRef,
718
808
  splashScreen: computed(() => {
719
- if (app.uiConfig.config.value.splashScreen) {
809
+ if (app.uiConfig.config.splashScreen) {
720
810
  return {
721
811
  title: 'components.splashScreen.name',
722
812
  tooltip: 'components.splashScreen.tooltip',
@@ -724,7 +814,7 @@
724
814
  width: '800px',
725
815
  height: '400px',
726
816
  },
727
- ...app.uiConfig.config.value.splashScreen,
817
+ ...app.uiConfig.config.splashScreen,
728
818
  };
729
819
  }
730
820
  return undefined;