@vcmap/ui 6.0.0-rc.3 → 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 (161) hide show
  1. package/build/buildHelpers.js +60 -11
  2. package/build/bundle.js +1 -1
  3. package/build/info/publish.js +25 -31
  4. package/build/lintTypes.js +5 -0
  5. package/config/base.config.json +2 -1
  6. package/config/dev.config.json +7 -1
  7. package/config/www.config.json +25 -22
  8. package/dist/assets/@mdi/font/css/{materialdesignicons.min-7a4f6be0.css → materialdesignicons.min-680621ca.css} +1 -1
  9. package/dist/assets/{cesium-cb4dbfba.js → cesium-126f111a.js} +272 -385
  10. package/dist/assets/cesium.js +1 -1
  11. package/dist/assets/{core-72f21835.js → core-1c8b8674.js} +1417 -1453
  12. package/dist/assets/core.js +1 -1
  13. package/dist/assets/{ol-2d33bc8b.js → ol-27f9b3f3.js} +233 -329
  14. package/dist/assets/ol.js +1 -1
  15. package/dist/assets/ui-7214428e.css +1 -0
  16. package/dist/assets/{ui-2ab43a16.js → ui-7214428e.js} +9573 -9438
  17. package/dist/assets/ui.js +1 -1
  18. package/dist/assets/vue-c78a5f76.js +6083 -0
  19. package/dist/assets/vue.js +1 -1
  20. package/dist/assets/{vuetify-760ced3b.css → vuetify-88a2fabe.css} +2 -2
  21. package/dist/assets/{vuetify-760ced3b.js → vuetify-88a2fabe.js} +7672 -7877
  22. package/dist/assets/vuetify.js +1 -1
  23. package/index.d.ts +6 -8
  24. package/index.js +7 -5
  25. package/package.json +16 -16
  26. package/plugins/@vcmap-show-case/form-inputs-example/src/FormInputsExample.vue +2 -3
  27. package/plugins/@vcmap-show-case/project-selector/src/ModulesListComponent.vue +18 -11
  28. package/plugins/@vcmap-show-case/search-example/src/index.js +1 -0
  29. package/plugins/@vcmap-show-case/search-example/src/searchImpl.js +35 -5
  30. package/plugins/@vcmap-show-case/toolbox-example/src/index.js +2 -1
  31. package/plugins/package.json +3 -23
  32. package/public/assets/@mdi/font/css/materialdesignicons.min.css +1 -1
  33. package/src/actions/StyleSelector.vue +1 -1
  34. package/src/actions/actionHelper.js +13 -2
  35. package/src/actions/listActions.d.ts +4 -4
  36. package/src/actions/listActions.js +2 -2
  37. package/src/application/VcsApp.vue +96 -31
  38. package/src/application/VcsApp.vue.d.ts +297 -4
  39. package/src/application/VcsContainer.vue +26 -9
  40. package/src/application/VcsContainer.vue.d.ts +237 -0
  41. package/src/application/VcsMainMap.vue +7 -7
  42. package/src/application/VcsMainMap.vue.d.ts +2 -2
  43. package/src/application/VcsNavbar.vue +5 -1
  44. package/src/application/VcsSplashScreen.vue +24 -26
  45. package/src/application/VcsTextPageFooter.vue +2 -1
  46. package/src/components/buttons/VcsActionButtonList.vue +59 -3
  47. package/src/components/buttons/VcsActionButtonList.vue.d.ts +28 -0
  48. package/src/components/form-inputs-controls/VcsChipArrayInput.vue +15 -13
  49. package/src/components/form-inputs-controls/VcsChipArrayInput.vue.d.ts +3 -4
  50. package/src/components/form-inputs-controls/VcsCoordinate.vue +4 -3
  51. package/src/components/form-inputs-controls/VcsSelect.vue +1 -4
  52. package/src/components/form-inputs-controls/VcsSlider.vue +0 -1
  53. package/src/components/form-inputs-controls/VcsSlider.vue.d.ts +2 -4
  54. package/src/components/form-inputs-controls/VcsTextArea.vue +1 -4
  55. package/src/components/form-inputs-controls/VcsTextField.vue +14 -0
  56. package/src/components/form-inputs-controls/VcsTextField.vue.d.ts +9 -0
  57. package/src/components/form-inputs-controls/VcsWizardStep.vue +2 -5
  58. package/src/components/form-inputs-controls/vcsTextField.scss +1 -4
  59. package/src/components/form-output/VcsFormattedNumber.vue +6 -4
  60. package/src/components/form-output/VcsMarkdown.vue +15 -12
  61. package/src/components/form-output/VcsMarkdown.vue.d.ts +1 -0
  62. package/src/components/form-output/markdownHelper.d.ts +30 -0
  63. package/src/components/form-output/markdownHelper.js +398 -0
  64. package/src/components/import/VcsFileDrop.vue +8 -5
  65. package/src/components/import/VcsImportComponent.vue +4 -3
  66. package/src/components/import/VcsImportComponent.vue.d.ts +1 -2
  67. package/src/components/lists/VcsActionList.vue +4 -0
  68. package/src/components/lists/VcsList.vue +22 -37
  69. package/src/components/lists/VcsList.vue.d.ts +14 -55
  70. package/src/components/lists/{VcsListItem.vue → VcsListItemComponent.vue} +17 -1
  71. package/src/components/lists/VcsListItemComponent.vue.d.ts +69 -0
  72. package/src/components/lists/VcsTreeview.vue +43 -16
  73. package/src/components/lists/VcsTreeview.vue.d.ts +14 -3
  74. package/src/components/lists/VcsTreeviewLeaf.vue +15 -6
  75. package/src/components/lists/VcsTreeviewSearchbar.vue +2 -2
  76. package/src/components/notification/VcsHelp.vue +1 -1
  77. package/src/components/notification/VcsHelp.vue.d.ts +3 -2
  78. package/src/components/section/VcsExpansionPanel.vue +2 -2
  79. package/src/components/section/VcsFormSection.vue +10 -4
  80. package/src/components/section/VcsFormSection.vue.d.ts +1 -2
  81. package/src/components/style/VcsTextMenu.vue +1 -1
  82. package/src/components/style/VcsVectorStyleComponent.vue +1 -1
  83. package/src/components/tables/VcsDataTable.vue +28 -22
  84. package/src/components/tables/VcsTable.vue +45 -62
  85. package/src/components/tables/VcsTable.vue.d.ts +30 -17
  86. package/src/components/tables/VcsTableCell.vue +72 -0
  87. package/src/components/tables/VcsTableCell.vue.d.ts +13 -0
  88. package/src/components/vector-properties/VcsFeatureEditingWindow.vue +6 -5
  89. package/src/components/vector-properties/VcsFeatureTransforms.vue +5 -0
  90. package/src/components/viewpoint/VcsViewpointComponent.vue +2 -2
  91. package/src/components/viewpoint/VcsViewpointEditor.vue +2 -2
  92. package/src/contentTree/LayerTree.vue +9 -27
  93. package/src/contentTree/LayerTree.vue.d.ts +1 -1
  94. package/src/contentTree/contentTreeCollection.d.ts +1 -0
  95. package/src/contentTree/contentTreeCollection.js +45 -11
  96. package/src/featureInfo/BalloonComponent.vue +14 -15
  97. package/src/featureInfo/MarkdownBalloonComponent.vue +4 -2
  98. package/src/featureInfo/MarkdownBalloonComponent.vue.d.ts +2 -2
  99. package/src/featureInfo/abstractFeatureInfoView.d.ts +6 -0
  100. package/src/featureInfo/abstractFeatureInfoView.js +15 -7
  101. package/src/featureInfo/featureInfo.d.ts +5 -5
  102. package/src/featureInfo/featureInfo.js +51 -31
  103. package/src/featureInfo/iframeFeatureInfoView.d.ts +8 -2
  104. package/src/featureInfo/iframeFeatureInfoView.js +15 -5
  105. package/src/featureInfo/markdownBalloonFeatureInfoView.d.ts +1 -1
  106. package/src/featureInfo/markdownBalloonFeatureInfoView.js +5 -5
  107. package/src/featureInfo/markdownFeatureInfoView.d.ts +1 -1
  108. package/src/featureInfo/markdownFeatureInfoView.js +9 -11
  109. package/src/featureInfo/tableFeatureInfoView.js +13 -4
  110. package/src/manager/collectionManager/CollectionComponentList.vue +1 -1
  111. package/src/manager/collectionManager/CollectionComponentList.vue.d.ts +2 -2
  112. package/src/manager/collectionManager/collectionComponentClass.d.ts +1 -1
  113. package/src/manager/collectionManager/collectionComponentClass.js +2 -2
  114. package/src/manager/collectionManager/editorCollectionComponentClass.js +2 -1
  115. package/src/manager/panel/PanelComponent.vue +2 -9
  116. package/src/manager/panel/PanelManagerComponent.vue +7 -3
  117. package/src/manager/panel/panelHelper.js +3 -3
  118. package/src/manager/panel/panelManager.d.ts +9 -1
  119. package/src/manager/panel/panelManager.js +15 -3
  120. package/src/manager/toolbox/GroupToolboxComponent.vue +8 -4
  121. package/src/manager/toolbox/GroupToolboxComponent.vue.d.ts +1 -0
  122. package/src/manager/toolbox/SelectToolboxComponent.vue +7 -4
  123. package/src/manager/toolbox/SelectToolboxComponent.vue.d.ts +1 -0
  124. package/src/manager/toolbox/ToolboxManager.vue +9 -6
  125. package/src/manager/toolbox/ToolboxManager.vue.d.ts +1 -0
  126. package/src/manager/window/WindowComponent.vue +12 -8
  127. package/src/manager/window/WindowComponentHeader.vue +29 -8
  128. package/src/manager/window/WindowComponentHeader.vue.d.ts +2 -0
  129. package/src/manager/window/WindowManager.vue +2 -2
  130. package/src/navigation/MapNavigation.vue +20 -0
  131. package/src/navigation/locatorHelper.js +1 -1
  132. package/src/navigation/overviewMap.js +1 -1
  133. package/src/notifier/NotifierComponent.vue +18 -15
  134. package/src/search/ResultItem.vue +18 -6
  135. package/src/search/ResultsComponent.vue +31 -20
  136. package/src/search/ResultsComponent.vue.d.ts +2 -1
  137. package/src/search/SearchComponent.vue +8 -14
  138. package/src/search/SearchComponent.vue.d.ts +1 -0
  139. package/src/siteConfig.js +8 -8
  140. package/src/styles/_typography.scss +0 -2
  141. package/src/styles/main.scss +0 -4
  142. package/src/uiConfig.d.ts +300 -5
  143. package/src/uiConfig.js +28 -16
  144. package/src/vcsUiApp.d.ts +7 -7
  145. package/src/vcsUiApp.js +10 -9
  146. package/src/vuePlugins/vuetify.js +3 -0
  147. package/dist/assets/ui-2ab43a16.css +0 -1
  148. package/dist/assets/vue-03b265aa.js +0 -6096
  149. package/src/application/markdownHelper.d.ts +0 -12
  150. package/src/application/markdownHelper.js +0 -70
  151. package/src/components/lists/VcsListItem.vue.d.ts +0 -27
  152. package/src/components/notification/VcsTooltip.vue +0 -156
  153. package/src/components/notification/VcsTooltip.vue.d.ts +0 -27
  154. package/src/featureInfo/MarkdownComponent.vue +0 -16
  155. package/src/featureInfo/MarkdownComponent.vue.d.ts +0 -7
  156. package/src/styles/_theming.scss +0 -73
  157. package/src/styles/settings.scss +0 -6
  158. package/src/styles/shades.scss +0 -4
  159. package/src/styles/variables.scss +0 -140
  160. package/src/styles/vcsFont.scss +0 -2
  161. package/src/styles/vcsGrid.scss +0 -3
@@ -7,7 +7,7 @@
7
7
  @click.stop="select(item.value)"
8
8
  >
9
9
  <v-list-item-title
10
- :class="{ 'primary--text': item.value === currentStyleName }"
10
+ :class="{ 'text-primary': item.value === currentStyleName }"
11
11
  >
12
12
  {{ $st(item.text) }}
13
13
  </v-list-item-title>
@@ -153,11 +153,17 @@ export function createToggleAction(
153
153
  export function createSearchButtonAction(app) {
154
154
  let destroyAction = () => {};
155
155
  const searchAction = ref(null);
156
+ const uiConfig = app.uiConfig.config;
157
+
156
158
  const determineAction = () => {
157
159
  if (app.windowManager.has('searchId')) {
158
160
  app.windowManager.remove('searchId');
159
161
  }
160
- if (app.search.size > 0 && searchAction.value === null) {
162
+ if (
163
+ !uiConfig.hideSearch &&
164
+ app.search.size > 0 &&
165
+ searchAction.value === null
166
+ ) {
161
167
  const action = createToggleAction(
162
168
  {
163
169
  name: 'search.title',
@@ -178,7 +184,10 @@ export function createSearchButtonAction(app) {
178
184
  );
179
185
  destroyAction = action.destroy;
180
186
  searchAction.value = reactive(action.action);
181
- } else if (app.search.size === 0 && searchAction.value !== null) {
187
+ } else if (
188
+ (uiConfig.hideSearch || app.search.size === 0) &&
189
+ searchAction.value !== null
190
+ ) {
182
191
  destroyAction();
183
192
  destroyAction = () => {};
184
193
  searchAction.value = null;
@@ -186,6 +195,8 @@ export function createSearchButtonAction(app) {
186
195
  };
187
196
  determineAction();
188
197
  const listeners = [
198
+ app.uiConfig.added.addEventListener(determineAction),
199
+ app.uiConfig.removed.addEventListener(determineAction),
189
200
  app.search.added.addEventListener(determineAction),
190
201
  app.search.removed.addEventListener(determineAction),
191
202
  ];
@@ -9,23 +9,23 @@
9
9
  export function createListItemDeleteAction<T extends Object>(collection: import("@vcmap/core").Collection<T>, item: T, actionOptions?: Partial<import("./actionHelper.js").ActionOptions> | undefined): import("./actionHelper.js").VcsAction;
10
10
  /**
11
11
  * Creates an action based on a provided selection
12
- * @param {import("vue").Ref<Array<import("../components/lists/VcsList.vue").VcsListItem>>} selection
12
+ * @param {import("vue").Ref<Array<import("../components/lists/VcsListItemComponent.vue").VcsListItem>>} selection
13
13
  * @param {import("./actionHelper.js").ActionOptions & {callback:import("./actionHelper.js").ActionCallback}} [actionOptions]
14
14
  * @returns {{action: import("vue").UnwrapRef<import("./actionHelper.js").VcsAction>, destroy: import("vue").WatchStopHandle}}
15
15
  */
16
- export function createListItemBulkAction(selection: import("vue").Ref<Array<import("../components/lists/VcsList.vue").VcsListItem>>, actionOptions?: (import("./actionHelper.js").ActionOptions & {
16
+ export function createListItemBulkAction(selection: import("vue").Ref<Array<import("../components/lists/VcsListItemComponent.vue").VcsListItem>>, actionOptions?: (import("./actionHelper.js").ActionOptions & {
17
17
  callback: import("./actionHelper.js").ActionCallback;
18
18
  }) | undefined): {
19
19
  action: import("vue").UnwrapRef<import("./actionHelper.js").VcsAction>;
20
20
  destroy: import("vue").WatchStopHandle;
21
21
  };
22
22
  /**
23
- * @param {import("vue").Ref<Array<import("../components/lists/VcsList.vue").VcsListItem>>} selection
23
+ * @param {import("vue").Ref<Array<import("../components/lists/VcsListItemComponent.vue").VcsListItem>>} selection
24
24
  * @param {import("./actionHelper.js").ActionCallback} exportCallback
25
25
  * @param {string|symbol} owner
26
26
  * @returns {{action: import("../manager/collectionManager/collectionManager.js").OwnedAction, destroy: (function(): void)}}
27
27
  */
28
- export function createListExportAction(selection: import("vue").Ref<Array<import("../components/lists/VcsList.vue").VcsListItem>>, exportCallback: import("./actionHelper.js").ActionCallback, owner: string | symbol): {
28
+ export function createListExportAction(selection: import("vue").Ref<Array<import("../components/lists/VcsListItemComponent.vue").VcsListItem>>, exportCallback: import("./actionHelper.js").ActionCallback, owner: string | symbol): {
29
29
  action: import("../manager/collectionManager/collectionManager.js").OwnedAction;
30
30
  destroy: (() => void);
31
31
  };
@@ -34,7 +34,7 @@ export function createListItemDeleteAction(
34
34
 
35
35
  /**
36
36
  * Creates an action based on a provided selection
37
- * @param {import("vue").Ref<Array<import("../components/lists/VcsList.vue").VcsListItem>>} selection
37
+ * @param {import("vue").Ref<Array<import("../components/lists/VcsListItemComponent.vue").VcsListItem>>} selection
38
38
  * @param {import("./actionHelper.js").ActionOptions & {callback:import("./actionHelper.js").ActionCallback}} [actionOptions]
39
39
  * @returns {{action: import("vue").UnwrapRef<import("./actionHelper.js").VcsAction>, destroy: import("vue").WatchStopHandle}}
40
40
  */
@@ -59,7 +59,7 @@ export function createListItemBulkAction(selection, actionOptions) {
59
59
  }
60
60
 
61
61
  /**
62
- * @param {import("vue").Ref<Array<import("../components/lists/VcsList.vue").VcsListItem>>} selection
62
+ * @param {import("vue").Ref<Array<import("../components/lists/VcsListItemComponent.vue").VcsListItem>>} selection
63
63
  * @param {import("./actionHelper.js").ActionCallback} exportCallback
64
64
  * @param {string|symbol} owner
65
65
  * @returns {{action: import("../manager/collectionManager/collectionManager.js").OwnedAction, destroy: (function(): void)}}
@@ -5,10 +5,10 @@
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
10
  <v-footer
11
- v-if="smAndUp"
11
+ v-if="showFooter"
12
12
  app
13
13
  absolute
14
14
  :height="footerHeight"
@@ -75,6 +75,37 @@
75
75
  import VcsDefaultLogoMobile from '../logo-mobile.svg';
76
76
  import VcsPositionDisplay from './VcsPositionDisplay.vue';
77
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
+
78
109
  /**
79
110
  * You should call this function in the component providing the vcsUiApp to your
80
111
  * application in the components mounted hook. This will call VcsAppMounted on all plugins in the app
@@ -109,6 +140,7 @@
109
140
  /**
110
141
  * This helper function will add a map action button based on the default icons
111
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
112
144
  * @param {import("../vcsUiApp.js").default} app
113
145
  * @returns {function():void}
114
146
  */
@@ -231,8 +263,11 @@
231
263
  if (layersWithLegend < 1 && stylesWithLegend < 1) {
232
264
  app.navbarManager.remove('legend');
233
265
  app.windowManager.remove('legend');
266
+ } else {
267
+ addLegend();
234
268
  }
235
269
  };
270
+ handleLegend();
236
271
 
237
272
  const listeners = [
238
273
  app.layers.added.addEventListener((layer) => {
@@ -250,6 +285,8 @@
250
285
  ];
251
286
 
252
287
  return () => {
288
+ app.navbarManager.remove('legend');
289
+ app.windowManager.remove('legend');
253
290
  destroy();
254
291
  legendDestroy();
255
292
  listeners.forEach((cb) => cb());
@@ -263,7 +300,7 @@
263
300
  */
264
301
  function setupCustomScreen(app) {
265
302
  function setupCustomScreenAction() {
266
- const { customScreen } = app.uiConfig.config.value;
303
+ const { customScreen } = app.uiConfig.config;
267
304
  const { action: customScreenAction, destroy: customScreenDestroy } =
268
305
  createToggleAction(
269
306
  {
@@ -301,7 +338,7 @@
301
338
  }
302
339
  let customScreen;
303
340
  const stopCustomScreenWatcher = watch(
304
- () => app.uiConfig.config.value.customScreen,
341
+ () => app.uiConfig.config.customScreen,
305
342
  (newCustomScreen) => {
306
343
  if (app.navbarManager.has('customScreenToggle')) {
307
344
  app.navbarManager.remove('customScreenToggle');
@@ -327,7 +364,7 @@
327
364
  */
328
365
  function setupSplashScreen(app, splashScreenRef) {
329
366
  function setupSplashScreenAction() {
330
- const { splashScreen } = app.uiConfig.config.value;
367
+ const { splashScreen } = app.uiConfig.config;
331
368
  if (splashScreen) {
332
369
  splashScreenRef.value = true;
333
370
  }
@@ -379,6 +416,7 @@
379
416
  * @returns {function():void}
380
417
  */
381
418
  export function setupSettingsWindow(app) {
419
+ const settingsWindowId = 'vcsSettings';
382
420
  const { action: settingsAction, destroy: settingsDestroy } =
383
421
  createToggleAction(
384
422
  {
@@ -387,7 +425,7 @@
387
425
  title: 'settings.tooltip',
388
426
  },
389
427
  {
390
- id: 'settingsId',
428
+ id: settingsWindowId,
391
429
  component: VcsSettings,
392
430
  state: { headerIcon: 'mdi-cog', headerTitle: 'settings.title' },
393
431
  slot: WindowSlot.DYNAMIC_RIGHT,
@@ -397,13 +435,15 @@
397
435
  );
398
436
  app.navbarManager.add(
399
437
  {
400
- id: 'settingsToggle',
438
+ id: settingsWindowId,
401
439
  action: settingsAction,
402
440
  },
403
441
  vcsAppSymbol,
404
442
  ButtonLocation.MENU,
405
443
  );
406
444
  return () => {
445
+ app.navbarManager.remove(settingsWindowId);
446
+ app.windowManager.remove(settingsWindowId);
407
447
  settingsDestroy();
408
448
  };
409
449
  }
@@ -431,6 +471,11 @@
431
471
  );
432
472
  }
433
473
 
474
+ /**
475
+ * @type {string}
476
+ */
477
+ export const categoryManagerWindowId = 'category-manager';
478
+
434
479
  /**
435
480
  * This helper function will add a category manager button to the navbar. The category Manager
436
481
  * will only be shown if there is at least one category under management in the categoryManager.
@@ -438,15 +483,14 @@
438
483
  * @returns {function():void}
439
484
  */
440
485
  export function setupCategoryManagerWindow(app) {
441
- const id = 'category-manager';
442
486
  const { action: categoryManagerAction, destroy } = createToggleAction(
443
487
  {
444
- name: id,
488
+ name: categoryManagerWindowId,
445
489
  icon: '$vcsComponents',
446
490
  title: 'categoryManager.tooltip',
447
491
  },
448
492
  {
449
- id,
493
+ id: categoryManagerWindowId,
450
494
  state: {
451
495
  headerTitle: 'categoryManager.title',
452
496
  headerIcon: '$vcsComponents',
@@ -472,9 +516,9 @@
472
516
  * @param {import("../manager/collectionManager/collectionComponentClass.js").default} collectionComponent
473
517
  */
474
518
  function handleAdded(collectionComponent) {
475
- if (!app.navbarManager.has(id)) {
519
+ if (!app.navbarManager.has(categoryManagerWindowId)) {
476
520
  app.navbarManager.add(
477
- { id, action: categoryManagerAction },
521
+ { id: categoryManagerWindowId, action: categoryManagerAction },
478
522
  vcsAppSymbol,
479
523
  ButtonLocation.CONTENT,
480
524
  );
@@ -483,7 +527,7 @@
483
527
  collectionComponent.id,
484
528
  collectionComponent.collection.added.addEventListener((item) => {
485
529
  if (
486
- !app.windowManager.has(id) &&
530
+ !app.windowManager.has(categoryManagerWindowId) &&
487
531
  item[moduleIdSymbol] === app.dynamicModuleId
488
532
  ) {
489
533
  categoryManagerAction.hasUpdate = true;
@@ -502,8 +546,8 @@
502
546
  collectionListeners.delete(collectionComponent.id);
503
547
 
504
548
  if (!app.categoryManager.componentIds.length) {
505
- app.windowManager.remove(id);
506
- app.navbarManager.remove(id);
549
+ app.windowManager.remove(categoryManagerWindowId);
550
+ app.navbarManager.remove(categoryManagerWindowId);
507
551
  categoryManagerAction.hasUpdate = false;
508
552
  }
509
553
  }
@@ -520,13 +564,15 @@
520
564
 
521
565
  const windowListener = app.windowManager.added.addEventListener(
522
566
  (windowComponent) => {
523
- if (windowComponent.id === id) {
567
+ if (windowComponent.id === categoryManagerWindowId) {
524
568
  categoryManagerAction.hasUpdate = false;
525
569
  }
526
570
  },
527
571
  );
528
572
 
529
573
  return () => {
574
+ app.windowManager.remove(categoryManagerWindowId);
575
+ app.navbarManager.remove(categoryManagerWindowId);
530
576
  destroy();
531
577
  addedListener();
532
578
  removedListener();
@@ -671,14 +717,30 @@
671
717
  /** @type {import("../vcsUiApp.js").default} */
672
718
  const app = getVcsAppById(props.appId);
673
719
  provide('vcsApp', app);
674
- const mapNavbarListener = setupMapNavbar(app);
675
- const legendDestroy = setupLegendWindow(app);
676
- 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
+ );
677
735
  const stopCustomScreen = setupCustomScreen(app);
678
736
  const splashScreenRef = ref(true);
679
737
  const stopSplashScreen = setupSplashScreen(app, splashScreenRef);
680
738
  setupHelpButton(app);
681
- const destroyComponentsWindow = setupCategoryManagerWindow(app);
739
+ const destroyMyWorkspace = setupUIConfigDependency(
740
+ app,
741
+ setupCategoryManagerWindow,
742
+ 'hideMyWorkspace',
743
+ );
682
744
  const destroyThemingListener = setupUiConfigTheming(app);
683
745
  const destroyDisplayQualityListener = setupUiConfigDisplayQuality(app);
684
746
  const { attributionEntries, attributionAction, destroyAttributions } =
@@ -698,10 +760,10 @@
698
760
  settingsDestroy();
699
761
  stopCustomScreen();
700
762
  stopSplashScreen();
701
- destroyComponentsWindow();
763
+ destroyMyWorkspace();
702
764
  destroyThemingListener();
703
- destroyAttributions();
704
765
  destroyDisplayQualityListener();
766
+ destroyAttributions();
705
767
  });
706
768
 
707
769
  const { smAndUp } = useDisplay();
@@ -711,37 +773,40 @@
711
773
  });
712
774
 
713
775
  return {
714
- smAndUp,
776
+ config: app.uiConfig.config,
777
+ showFooter: computed(() => {
778
+ return !app.uiConfig.config.hideFooter && smAndUp.value;
779
+ }),
715
780
  footerHeight,
716
781
  mobileLogo: computed(
717
782
  () =>
718
- app.uiConfig.config.value.mobileLogo ??
719
- app.uiConfig.config.value.logo ??
783
+ app.uiConfig.config.mobileLogo ??
784
+ app.uiConfig.config.logo ??
720
785
  VcsDefaultLogoMobile,
721
786
  ),
722
787
  imprint: computed(() => {
723
- if (app.uiConfig.config.value.imprint) {
788
+ if (app.uiConfig.config.imprint) {
724
789
  return {
725
790
  title: 'footer.imprint.title',
726
791
  tooltip: 'footer.imprint.tooltip',
727
- ...app.uiConfig.config.value.imprint,
792
+ ...app.uiConfig.config.imprint,
728
793
  };
729
794
  }
730
795
  return undefined;
731
796
  }),
732
797
  dataProtection: computed(() => {
733
- if (app.uiConfig.config.value.dataProtection) {
798
+ if (app.uiConfig.config.dataProtection) {
734
799
  return {
735
800
  title: 'footer.dataProtection.title',
736
801
  tooltip: 'footer.dataProtection.tooltip',
737
- ...app.uiConfig.config.value.dataProtection,
802
+ ...app.uiConfig.config.dataProtection,
738
803
  };
739
804
  }
740
805
  return undefined;
741
806
  }),
742
807
  splashScreenRef,
743
808
  splashScreen: computed(() => {
744
- if (app.uiConfig.config.value.splashScreen) {
809
+ if (app.uiConfig.config.splashScreen) {
745
810
  return {
746
811
  title: 'components.splashScreen.name',
747
812
  tooltip: 'components.splashScreen.tooltip',
@@ -749,7 +814,7 @@
749
814
  width: '800px',
750
815
  height: '400px',
751
816
  },
752
- ...app.uiConfig.config.value.splashScreen,
817
+ ...app.uiConfig.config.splashScreen,
753
818
  };
754
819
  }
755
820
  return undefined;