@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
@@ -49,7 +49,7 @@
49
49
  * New position is derived from a target item in the collection.
50
50
  * This ensures correct movement, if rendered list is only a subset of the collection.
51
51
  * @param {import("./collectionComponentClass.js").default<Object>} collectionComponent
52
- * @param {import("../../components/lists/VcsList.vue").VcsListItem} item
52
+ * @param {import("../../components/lists/VcsListItemComponent.vue").VcsListItem} item
53
53
  * @param {number} targetIndex
54
54
  */
55
55
  export function moveItem(collectionComponent, item, targetIndex) {
@@ -3,10 +3,10 @@
3
3
  * New position is derived from a target item in the collection.
4
4
  * This ensures correct movement, if rendered list is only a subset of the collection.
5
5
  * @param {import("./collectionComponentClass.js").default<Object>} collectionComponent
6
- * @param {import("../../components/lists/VcsList.vue").VcsListItem} item
6
+ * @param {import("../../components/lists/VcsListItemComponent.vue").VcsListItem} item
7
7
  * @param {number} targetIndex
8
8
  */
9
- export function moveItem(collectionComponent: import("./collectionComponentClass.js").default<Object>, item: import("../../components/lists/VcsList.vue").VcsListItem, targetIndex: number): void;
9
+ export function moveItem(collectionComponent: import("./collectionComponentClass.js").default<Object>, item: import("../../components/lists/VcsListItemComponent.vue").VcsListItem, targetIndex: number): void;
10
10
  declare const _default: import("vue").DefineComponent<{
11
11
  showLessButton: {
12
12
  type: BooleanConstructor;
@@ -38,7 +38,7 @@ export type CollectionComponentUiOptions = {
38
38
  export type CollectionComponentClassOptions<T extends Object> = CollectionComponentUiOptions & {
39
39
  collection: import("@vcmap/core").Collection<T>;
40
40
  };
41
- export type CollectionComponentListItem = import("../../components/lists/VcsList.vue").VcsListItem & {
41
+ export type CollectionComponentListItem = import("../../components/lists/VcsListItemComponent.vue").VcsListItem & {
42
42
  actions: Array<import("../../actions/actionHelper.js").VcsAction & {
43
43
  weight?: number;
44
44
  }>;
@@ -36,7 +36,7 @@ import { sortByOwner } from '../navbarManager.js';
36
36
  */
37
37
 
38
38
  /**
39
- * @typedef {import("../../components/lists/VcsList.vue").VcsListItem & {
39
+ * @typedef {import("../../components/lists/VcsListItemComponent.vue").VcsListItem & {
40
40
  * actions: Array<import("../../actions/actionHelper.js").VcsAction & { weight?: number }>,
41
41
  * clickedCallbacks: Array<function(PointerEvent):void>,
42
42
  * destroy: function():void|undefined
@@ -55,7 +55,7 @@ function destroyListItem(listItem) {
55
55
  /**
56
56
  * Renames the title of an item for VcsObject based items.
57
57
  * @param {import("@vcmap/core").VcsObject} item
58
- * @param {import("../../components/lists/VcsList.vue").VcsListItem} listItem
58
+ * @param {import("../../components/lists/VcsListItemComponent.vue").VcsListItem} listItem
59
59
  * @param {string} newTitle
60
60
  */
61
61
  function titleChanged(item, listItem, newTitle) {
@@ -3,6 +3,7 @@ import { check, maybe, oneOf } from '@vcsuite/check';
3
3
  import { WindowSlot } from '../window/windowManager.js';
4
4
  import CollectionComponentClass from './collectionComponentClass.js';
5
5
  import { createListEditAction } from '../../actions/listActions.js';
6
+ import { categoryManagerWindowId } from '../../application/VcsApp.vue';
6
7
 
7
8
  /**
8
9
  * @typedef {Omit<import("../window/windowManager.js").WindowComponentOptions,"id"|"parentId"|"slot">} EditorWindowComponentOptions
@@ -62,7 +63,7 @@ export function makeEditorCollectionComponentClass(
62
63
  app,
63
64
  collectionComponent,
64
65
  editingOptions,
65
- parentId = 'category-manager',
66
+ parentId = categoryManagerWindowId,
66
67
  ) {
67
68
  check(collectionComponent, CollectionComponentClass);
68
69
  check(editingOptions.editor, oneOf(Object, Function));
@@ -18,20 +18,13 @@
18
18
  </template>
19
19
 
20
20
  <style scoped lang="scss">
21
- @import '../../styles/shades.scss';
22
-
23
21
  .panel-component {
24
22
  padding: 0 4px;
25
23
  }
26
- .panel-component.theme--dark::after {
27
- content: '';
28
- position: absolute;
29
- background: map-get($shades, 'black');
30
- }
31
- .panel-component.theme--light::after {
24
+ .panel-component::after {
32
25
  content: '';
33
26
  position: absolute;
34
- background: map-get($shades, 'white');
27
+ background: rgb(var(--v-theme-surface-light));
35
28
  }
36
29
 
37
30
  .panel-component-left::after {
@@ -143,17 +143,21 @@
143
143
  ((panelFrameRef.value.offsetTop + e.y) /
144
144
  panelFrameRef.value.parentElement.offsetHeight) *
145
145
  100;
146
- setPanelPosition(panel, { height: `${Math.round(100 - height)}%` });
146
+ setPanelPosition(panelManager, panel, {
147
+ height: `${Math.round(100 - height)}%`,
148
+ });
147
149
  } else {
148
150
  const width =
149
151
  ((panelFrameRef.value.offsetLeft + e.x) /
150
152
  panelFrameRef.value.parentElement.offsetWidth) *
151
153
  100;
152
154
  if (panel[panelLocationSymbol] === PanelLocation.LEFT) {
153
- setPanelPosition(panel, { width: `${width}%` });
155
+ setPanelPosition(panelManager, panel, { width: `${width}%` });
154
156
  resizeKey = 'left';
155
157
  } else if (panel[panelLocationSymbol] === PanelLocation.RIGHT) {
156
- setPanelPosition(panel, { width: `${Math.round(100 - width)}%` });
158
+ setPanelPosition(panelManager, panel, {
159
+ width: `${Math.round(100 - width)}%`,
160
+ });
157
161
  resizeKey = 'right';
158
162
  }
159
163
  }
@@ -239,7 +239,7 @@ export function updatePanelSizes(
239
239
  },
240
240
  targetSize,
241
241
  );
242
- setPanelPosition(leftPanel, updatedLeft);
242
+ setPanelPosition(panelManager, leftPanel, updatedLeft);
243
243
  }
244
244
  if (panelManager.hasLocation(PanelLocation.RIGHT) && resizeKey !== 'left') {
245
245
  const updatedRight = handleSidePanel(
@@ -252,7 +252,7 @@ export function updatePanelSizes(
252
252
  },
253
253
  targetSize,
254
254
  );
255
- setPanelPosition(rightPanel, updatedRight);
255
+ setPanelPosition(panelManager, rightPanel, updatedRight);
256
256
  }
257
257
 
258
258
  const main = percentageFromPanelOptions(
@@ -267,6 +267,6 @@ export function updatePanelSizes(
267
267
  return acc;
268
268
  }, {});
269
269
  if (Object.keys(toUpdate).length > 0) {
270
- setPanelPosition(mainPanel, toUpdate);
270
+ setPanelPosition(panelManager, mainPanel, toUpdate);
271
271
  }
272
272
  }
@@ -30,10 +30,11 @@
30
30
  */
31
31
  export function getPanelPosition(panelComponent: Partial<PanelComponent>): PanelPosition | undefined;
32
32
  /**
33
+ * @param {PanelManager} panelManager
33
34
  * @param {PanelComponent} panelComponent
34
35
  * @param {Partial<PanelPosition>} panelPosition
35
36
  */
36
- export function setPanelPosition(panelComponent: PanelComponent, panelPosition: Partial<PanelPosition>): void;
37
+ export function setPanelPosition(panelManager: PanelManager, panelComponent: PanelComponent, panelPosition: Partial<PanelPosition>): void;
37
38
  export const panelLocationSymbol: unique symbol;
38
39
  export const panelPositionSymbol: unique symbol;
39
40
  /**
@@ -249,6 +250,13 @@ declare class PanelManager implements IPanelManager {
249
250
  * @type {import("@vcmap/core").VcsEvent<PanelComponent>}
250
251
  */
251
252
  removed: import("@vcmap/core").VcsEvent<PanelComponent>;
253
+ /**
254
+ * @type {import("@vcmap/core").VcsEvent<{panelId: string, panelPosition: PanelPosition}>}
255
+ */
256
+ positionChanged: import("@vcmap/core").VcsEvent<{
257
+ panelId: string;
258
+ panelPosition: PanelPosition;
259
+ }>;
252
260
  /**
253
261
  * reactive ordered array of ids,
254
262
  * @type {import("vue").UnwrapRef<string[]>}
@@ -114,10 +114,11 @@ export function getPanelPosition(panelComponent) {
114
114
  }
115
115
 
116
116
  /**
117
+ * @param {PanelManager} panelManager
117
118
  * @param {PanelComponent} panelComponent
118
119
  * @param {Partial<PanelPosition>} panelPosition
119
120
  */
120
- export function setPanelPosition(panelComponent, panelPosition) {
121
+ export function setPanelPosition(panelManager, panelComponent, panelPosition) {
121
122
  const position = getPanelPosition(panelComponent);
122
123
  const toUpdate = Object.keys(panelPosition).reduce((acc, key) => {
123
124
  if (position?.[key] !== panelPosition[key]) {
@@ -126,7 +127,14 @@ export function setPanelPosition(panelComponent, panelPosition) {
126
127
  return acc;
127
128
  }, {});
128
129
  if (Object.keys(toUpdate).length > 0) {
129
- Object.assign(panelComponent[panelPositionSymbol], panelPosition);
130
+ const newPosition = Object.assign(
131
+ panelComponent[panelPositionSymbol],
132
+ panelPosition,
133
+ );
134
+ panelManager.positionChanged.raiseEvent({
135
+ panelId: panelComponent.id,
136
+ panelPosition: newPosition,
137
+ });
130
138
  }
131
139
  }
132
140
 
@@ -149,6 +157,10 @@ class PanelManager {
149
157
  * @type {import("@vcmap/core").VcsEvent<PanelComponent>}
150
158
  */
151
159
  this.removed = new VcsEvent();
160
+ /**
161
+ * @type {import("@vcmap/core").VcsEvent<{panelId: string, panelPosition: PanelPosition}>}
162
+ */
163
+ this.positionChanged = new VcsEvent();
152
164
  /**
153
165
  * reactive ordered array of ids,
154
166
  * @type {import("vue").UnwrapRef<string[]>}
@@ -266,7 +278,7 @@ class PanelManager {
266
278
  return acc;
267
279
  }, {});
268
280
  if (Object.keys(toUpdate).length > 0) {
269
- setPanelPosition(panelComponent, toUpdate);
281
+ setPanelPosition(this, panelComponent, toUpdate);
270
282
  }
271
283
  }
272
284
  }
@@ -13,7 +13,7 @@
13
13
  :icon="group.icon"
14
14
  :disabled="group.disabled"
15
15
  :tooltip="group.title"
16
- :active="open || hasActiveAction"
16
+ :active="hasActiveAction"
17
17
  :color="hasActiveAction ? 'primary' : ''"
18
18
  v-bind="props"
19
19
  >
@@ -23,11 +23,11 @@
23
23
 
24
24
  <v-toolbar
25
25
  id="vcs-toolbox-toolbar--secondary"
26
- class="mx-auto marginToTop px-1 rounded-b opacity-80 px-1"
27
- :height="40"
26
+ class="mx-auto marginToTop rounded-b elevation-4 opacity-80 px-1"
27
+ :height="itemHeight + 8"
28
28
  >
29
29
  <v-toolbar-items class="w-100">
30
- <div class="d-flex align-center justify-space-between w-100">
30
+ <div class="d-flex align-center justify-space-between gc-1 w-100">
31
31
  <VcsToolButton
32
32
  v-for="{ id, action } in orderedButtons"
33
33
  :key="id"
@@ -54,6 +54,7 @@
54
54
  import { VMenu, VIcon, VToolbar, VToolbarItems } from 'vuetify/components';
55
55
  import VcsToolButton from '../../components/buttons/VcsToolButton.vue';
56
56
  import { getComponentsByOrder } from './toolboxManager.js';
57
+ import { useItemHeight } from '../../vuePlugins/vuetify.js';
57
58
 
58
59
  /**
59
60
  * @description
@@ -94,10 +95,13 @@
94
95
  orderedButtons.value.some((a) => a.action.active),
95
96
  );
96
97
 
98
+ const itemHeight = useItemHeight();
99
+
97
100
  return {
98
101
  open,
99
102
  orderedButtons,
100
103
  hasActiveAction,
104
+ itemHeight,
101
105
  };
102
106
  },
103
107
  };
@@ -7,6 +7,7 @@ declare const _default: import("vue").DefineComponent<{
7
7
  open: import("vue").Ref<boolean>;
8
8
  orderedButtons: import("vue").ComputedRef<(import("../buttonManager.js", { with: { "resolution-mode": "import" } }).ButtonComponent | import("./toolboxManager.js", { with: { "resolution-mode": "import" } }).ToolboxComponent)[]>;
9
9
  hasActiveAction: import("vue").ComputedRef<boolean>;
10
+ itemHeight: import("vue").ComputedRef<number>;
10
11
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
11
12
  group: {
12
13
  type: ObjectConstructor;
@@ -28,7 +28,7 @@
28
28
  :tooltip="group.action.title"
29
29
  :disabled="group.action.disabled"
30
30
  v-bind="props"
31
- class="vcs-toolbox-action-select"
31
+ class="vcs-toolbox-action-select px-0"
32
32
  :min-width="16"
33
33
  :width="16"
34
34
  >
@@ -37,12 +37,12 @@
37
37
  </template>
38
38
 
39
39
  <v-toolbar
40
- class="vcs-toolbox-2 mx-auto marginToTop rounded-b opacity-80 px-1"
41
- :height="40"
40
+ class="vcs-toolbox-2 mx-auto marginToTop rounded-b elevation-4 opacity-80 px-1"
41
+ :height="itemHeight + 8"
42
42
  dense
43
43
  >
44
44
  <v-toolbar-items class="w-100">
45
- <div class="d-flex align-center justify-space-between w-100">
45
+ <div class="d-flex align-center justify-space-between gc-1 w-100">
46
46
  <VcsToolButton
47
47
  v-for="(item, index) in group.action.tools"
48
48
  :key="`${item.name}-${index}`"
@@ -67,6 +67,7 @@
67
67
  import { ref } from 'vue';
68
68
  import { VMenu, VIcon, VToolbar, VToolbarItems } from 'vuetify/components';
69
69
  import VcsToolButton from '../../components/buttons/VcsToolButton.vue';
70
+ import { useItemHeight } from '../../vuePlugins/vuetify.js';
70
71
 
71
72
  /**
72
73
  * @description
@@ -90,9 +91,11 @@
90
91
  },
91
92
  setup() {
92
93
  const open = ref(false);
94
+ const itemHeight = useItemHeight();
93
95
 
94
96
  return {
95
97
  open,
98
+ itemHeight,
96
99
  };
97
100
  },
98
101
  };
@@ -5,6 +5,7 @@ declare const _default: import("vue").DefineComponent<{
5
5
  };
6
6
  }, {
7
7
  open: import("vue").Ref<boolean>;
8
+ itemHeight: import("vue").ComputedRef<number>;
8
9
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
9
10
  group: {
10
11
  type: ObjectConstructor;
@@ -1,14 +1,13 @@
1
1
  <template>
2
2
  <v-toolbar
3
3
  v-if="toolboxOpen && orderedGroups.length > 0 && mdAndUp"
4
- class="vcs-toolbox mx-auto marginToTop opacity-80"
4
+ class="vcs-toolbox mx-auto elevation-4 opacity-80"
5
5
  :class="{
6
6
  'rounded-b': !open,
7
7
  }"
8
- :height="40"
8
+ :height="itemHeight + 8"
9
9
  :style="{ zIndex }"
10
10
  @click.stop="bringToTop"
11
- style="width: fit-content"
12
11
  >
13
12
  <v-toolbar-items class="w-100 px-4 gc-1">
14
13
  <div
@@ -42,8 +41,9 @@
42
41
  </template>
43
42
 
44
43
  <style lang="scss" scoped>
45
- .marginToTop {
44
+ .vcs-toolbox {
46
45
  margin-top: 2px;
46
+ width: fit-content;
47
47
  }
48
48
  </style>
49
49
 
@@ -61,6 +61,7 @@
61
61
  import VcsToolButton from '../../components/buttons/VcsToolButton.vue';
62
62
  import { vcsAppSymbol } from '../../pluginHelper.js';
63
63
  import { ButtonLocation } from '../navbarManager.js';
64
+ import { useItemHeight } from '../../vuePlugins/vuetify.js';
64
65
 
65
66
  /**
66
67
  * @typedef {Object} ToolboxButtonGroup
@@ -163,12 +164,12 @@
163
164
  }
164
165
  handleToolboxButton();
165
166
 
166
- const stopWatching = watch(groups, () => handleToolboxButton());
167
+ watch(groups, () => handleToolboxButton());
167
168
 
168
169
  onUnmounted(() => {
169
- stopWatching();
170
170
  nameChangeListener();
171
171
  app.windowManager.removeExternalIdFromZIndex('toolbox');
172
+ app.navbarManager.remove('toolbox');
172
173
  });
173
174
 
174
175
  watch(toolboxOpen, () => {
@@ -183,6 +184,7 @@
183
184
  };
184
185
 
185
186
  const { mdAndUp } = useDisplay();
187
+ const itemHeight = useItemHeight();
186
188
  return {
187
189
  mdAndUp,
188
190
  toolboxOpen,
@@ -200,6 +202,7 @@
200
202
  bringToTop();
201
203
  }
202
204
  },
205
+ itemHeight,
203
206
  };
204
207
  },
205
208
  };
@@ -12,6 +12,7 @@ declare const _default: import("vue").DefineComponent<{}, {
12
12
  open: import("vue").Ref<boolean>;
13
13
  bringToTop: () => void;
14
14
  openGroup(group: any): void;
15
+ itemHeight: import("vue").ComputedRef<number>;
15
16
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
16
17
  export default _default;
17
18
  export type ToolboxButtonGroup = {
@@ -9,8 +9,8 @@
9
9
  :class="{
10
10
  rounded: !isDocked,
11
11
  marginToTop: isDocked || !isChild,
12
- 'rounded-br': isDynamicLeft,
13
- 'rounded-bl': isDynamicRight,
12
+ 'rounded-be': isDynamicLeft,
13
+ 'rounded-bs': isDynamicRight,
14
14
  }"
15
15
  >
16
16
  <div
@@ -89,17 +89,21 @@
89
89
  });
90
90
 
91
91
  const isChild = computed(() => !!props.windowState.parentId);
92
- const isDynamic = computed(() => props.slotWindow !== WindowSlot.STATIC);
93
- const isDocked = computed(() => props.slotWindow !== WindowSlot.DETACHED);
92
+ const isDynamic = computed(
93
+ () => props.slotWindow.value !== WindowSlot.STATIC,
94
+ );
95
+ const isDocked = computed(
96
+ () => props.slotWindow.value !== WindowSlot.DETACHED,
97
+ );
94
98
  const isDockedLeft = computed(() => {
95
99
  return (
96
- props.slotWindow === WindowSlot.STATIC ||
97
- props.slotWindow === WindowSlot.DYNAMIC_LEFT ||
98
- props.slotWindow === WindowSlot.DYNAMIC_CHILD
100
+ props.slotWindow.value === WindowSlot.STATIC ||
101
+ props.slotWindow.value === WindowSlot.DYNAMIC_LEFT ||
102
+ props.slotWindow.value === WindowSlot.DYNAMIC_CHILD
99
103
  );
100
104
  });
101
105
  const isDockedRight = computed(
102
- () => props.slotWindow === WindowSlot.DYNAMIC_RIGHT,
106
+ () => props.slotWindow.value === WindowSlot.DYNAMIC_RIGHT,
103
107
  );
104
108
  const isDraggable = ref(false);
105
109
  /**
@@ -2,21 +2,25 @@
2
2
  <div
3
3
  class="d-flex justify-space-between align-center window-component-header"
4
4
  >
5
- <h3 class="d-flex align-center">
5
+ <h3 class="d-flex align-center flex-grow-1">
6
6
  <v-icon
7
7
  v-if="windowState.headerIcon"
8
8
  class="mr-1"
9
- :class="{ 'primary--text': isOnTop }"
9
+ :class="{ 'text-primary': isOnTop }"
10
10
  size="16"
11
11
  >
12
12
  {{ windowState.headerIcon }}
13
13
  </v-icon>
14
14
  <span
15
- class="d-inline-block user-select-none font-weight-bold"
16
- :class="{ 'primary--text': isOnTop }"
15
+ ref="headerRef"
16
+ class="d-inline-block user-select-none font-weight-bold vcs-window-header-title"
17
+ :class="{ 'text-primary': isOnTop }"
17
18
  >
18
19
  {{ translatedHeaderTitle }}
19
20
  </span>
21
+ <v-tooltip v-if="headerTooltip" activator="parent">
22
+ {{ $st(headerTooltip) }}
23
+ </v-tooltip>
20
24
  </h3>
21
25
  <div class="d-flex justify-space-between align-center">
22
26
  <template v-if="windowState.headerActions?.length > 0">
@@ -52,10 +56,10 @@
52
56
 
53
57
  <style lang="scss" scoped>
54
58
  .window-component-header {
55
- max-height: 16px;
59
+ max-height: calc(var(--v-vcs-item-height) / 2);
56
60
 
57
61
  h3 {
58
- line-height: 16px;
62
+ line-height: calc(var(--v-vcs-item-height) / 2);
59
63
  }
60
64
  .v-divider--vertical.v-divider--inset {
61
65
  margin-top: 2px;
@@ -64,11 +68,19 @@
64
68
  .user-select-none {
65
69
  user-select: none;
66
70
  }
71
+ .vcs-window-header-title {
72
+ width: 10px;
73
+ white-space: nowrap;
74
+ overflow: hidden;
75
+ text-overflow: ellipsis;
76
+ flex: 1;
77
+ }
67
78
  </style>
68
79
 
69
80
  <script>
70
- import { VIcon, VDivider } from 'vuetify/components';
71
- import { computed, getCurrentInstance } from 'vue';
81
+ import { VIcon, VDivider, VTooltip } from 'vuetify/components';
82
+ import { computed, getCurrentInstance, ref } from 'vue';
83
+ import { createEllipseTooltip } from '../../components/composables.js';
72
84
  import VcsButton from '../../components/buttons/VcsButton.vue';
73
85
  import VcsActionButtonList from '../../components/buttons/VcsActionButtonList.vue';
74
86
  import { createLinkAction } from '../../actions/actionHelper.js';
@@ -88,6 +100,7 @@
88
100
  VcsButton,
89
101
  VIcon,
90
102
  VDivider,
103
+ VTooltip,
91
104
  },
92
105
  inheritAttrs: false,
93
106
  props: {
@@ -124,6 +137,8 @@
124
137
  : vm.$st(props.windowState.headerTitle),
125
138
  );
126
139
 
140
+ const headerRef = ref(null);
141
+
127
142
  const infoAction =
128
143
  props.windowState.infoUrl || props.windowState.infoUrlCallback
129
144
  ? createLinkAction(
@@ -141,6 +156,12 @@
141
156
  close,
142
157
  isDockable,
143
158
  translatedHeaderTitle,
159
+ headerRef,
160
+ headerTooltip: createEllipseTooltip(
161
+ computed(() => headerRef.value),
162
+ computed(() => undefined),
163
+ translatedHeaderTitle,
164
+ ),
144
165
  infoAction,
145
166
  };
146
167
  },
@@ -17,6 +17,8 @@ declare const _default: import("vue").DefineComponent<{
17
17
  close: () => void;
18
18
  isDockable: import("vue").ComputedRef<any>;
19
19
  translatedHeaderTitle: import("vue").ComputedRef<any>;
20
+ headerRef: import("vue").Ref<null>;
21
+ headerTooltip: import("vue").ComputedRef<string>;
20
22
  infoAction: import("../../actions/actionHelper.js", { with: { "resolution-mode": "import" } }).VcsAction | undefined;
21
23
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
22
24
  windowState: {
@@ -160,9 +160,9 @@
160
160
  const position = getPosition(windowComponent);
161
161
  moveWindow(id, translation, windowManager, targetSize.value, position);
162
162
  };
163
-
163
+ const display = useDisplay();
164
164
  const addMobileClass = computed(() => {
165
- return useDisplay().xs.value && componentIds.length > 0;
165
+ return display.xs.value && componentIds.length > 0;
166
166
  });
167
167
 
168
168
  const setTargetSize = () => {
@@ -249,6 +249,25 @@
249
249
  const showOverviewButton = ref(
250
250
  app.overviewMap.map.layerCollection.size > 0,
251
251
  );
252
+
253
+ const handleOverviewMapActiveOnStartup = (item) => {
254
+ if (
255
+ item &&
256
+ item.name === 'overviewMapActiveOnStartup' &&
257
+ showOverviewButton.value &&
258
+ item.value &&
259
+ !overviewAction.active
260
+ ) {
261
+ overviewAction.callback();
262
+ }
263
+ };
264
+ handleOverviewMapActiveOnStartup(
265
+ app.uiConfig.getByKey('overviewMapActiveOnStartup'),
266
+ );
267
+ const uiConfigListener = app.uiConfig.added.addEventListener(
268
+ handleOverviewMapActiveOnStartup,
269
+ );
270
+
252
271
  // Locator
253
272
  const { action: locatorAction, destroy: destroyLocator } =
254
273
  createLocatorAction(app);
@@ -286,6 +305,7 @@
286
305
  const { action: homeAction, destroy: homeDestroy } = setupHomeButton(app);
287
306
 
288
307
  onUnmounted(() => {
308
+ uiConfigListener();
289
309
  if (overviewDestroy) {
290
310
  overviewDestroy();
291
311
  }
@@ -24,7 +24,7 @@ import { getDefaultPrimaryColor } from '../vuePlugins/vuetify.js';
24
24
  */
25
25
  function getColor(opacity, app) {
26
26
  return Color.fromCssColorString(
27
- app.uiConfig.config.value.primaryColor ?? getDefaultPrimaryColor(app),
27
+ app.uiConfig.config.primaryColor ?? getDefaultPrimaryColor(app),
28
28
  )
29
29
  .withAlpha(opacity)
30
30
  .toCssColorString();
@@ -140,7 +140,7 @@ class OverviewMap {
140
140
  this._obliqueSelectedImageLayer = null;
141
141
 
142
142
  const primary =
143
- app.uiConfig.config.value.primaryColor ?? getDefaultPrimaryColor(app);
143
+ app.uiConfig.config.primaryColor ?? getDefaultPrimaryColor(app);
144
144
  const fillColor = Color.fromCssColorString('#EDEDED');
145
145
 
146
146
  /**
@@ -5,6 +5,7 @@
5
5
  :key="notification.id"
6
6
  v-model="notification.open"
7
7
  :timeout="notification.timeout"
8
+ class="vcs-notifier"
8
9
  >
9
10
  <v-icon :color="notification.type">
10
11
  {{ icon[notification.type] }}
@@ -63,21 +64,23 @@
63
64
  </script>
64
65
 
65
66
  <style lang="scss" scoped>
66
- .v-snack {
67
- :deep(.v-snack__content) {
68
- display: grid;
69
- gap: 8px 4px;
70
- grid-template-columns: 20px auto;
71
- .v-icon {
72
- grid-row-start: 1;
73
- grid-row-end: 3;
74
- align-self: start;
75
- font-size: 17px;
76
- }
77
- }
78
- :deep(.v-snack__action) {
79
- align-self: flex-start;
80
- margin-top: 4px;
67
+ .vcs-notifier {
68
+ opacity: 0.95;
69
+ }
70
+ :deep(.v-snackbar__content) {
71
+ display: grid;
72
+ padding: 8px 8px;
73
+ gap: 8px 4px;
74
+ grid-template-columns: 20px auto;
75
+ .v-icon {
76
+ grid-row-start: 1;
77
+ grid-row-end: 3;
78
+ align-self: start;
79
+ font-size: var(--v-vcs-font-size);
81
80
  }
82
81
  }
82
+ :deep(.v-snackbar__actions) {
83
+ align-self: flex-start;
84
+ margin-top: 4px;
85
+ }
83
86
  </style>