@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
@@ -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 = () => {
@@ -19,7 +19,7 @@ export function isSlotPosition(windowPosition: WindowPosition): boolean;
19
19
  * headerComponent?: import("vue").Component<T, unknown, unknown>,
20
20
  * state? : Partial<WindowState>,
21
21
  * position? : Partial<WindowPositionOptions>,
22
- * slot: WindowSlot,
22
+ * slot?: WindowSlot,
23
23
  * props?: T,
24
24
  * provides?: Record<string, unknown>
25
25
  * }} WindowComponentOptions
@@ -136,7 +136,7 @@ export type WindowComponentOptions<T extends Object = Object> = {
136
136
  headerComponent?: import("vue").Component<T, unknown, unknown>;
137
137
  state?: Partial<WindowState>;
138
138
  position?: Partial<WindowPositionOptions>;
139
- slot: WindowSlot;
139
+ slot?: WindowSlot;
140
140
  props?: T;
141
141
  provides?: Record<string, unknown>;
142
142
  };
@@ -2,7 +2,7 @@ import { computed, reactive, ref } from 'vue';
2
2
  import { VcsEvent } from '@vcmap/core';
3
3
  import { v4 as uuidv4 } from 'uuid';
4
4
  import { parseEnumValue } from '@vcsuite/parsers';
5
- import { check } from '@vcsuite/check';
5
+ import { check, oneOf } from '@vcsuite/check';
6
6
  import { vcsAppSymbol } from '../../pluginHelper.js';
7
7
 
8
8
  /**
@@ -109,7 +109,7 @@ export function isSlotPosition(windowPosition) {
109
109
  * headerComponent?: import("vue").Component<T, unknown, unknown>,
110
110
  * state? : Partial<WindowState>,
111
111
  * position? : Partial<WindowPositionOptions>,
112
- * slot: WindowSlot,
112
+ * slot?: WindowSlot,
113
113
  * props?: T,
114
114
  * provides?: Record<string, unknown>
115
115
  * }} WindowComponentOptions
@@ -563,7 +563,7 @@ class WindowManager {
563
563
  * @returns {WindowComponent}
564
564
  */
565
565
  add(windowComponentOptions, owner) {
566
- check(owner, [String, vcsAppSymbol]);
566
+ check(owner, oneOf(String, vcsAppSymbol));
567
567
 
568
568
  if (
569
569
  windowComponentOptions.id &&
@@ -747,7 +747,7 @@ class WindowManager {
747
747
  */
748
748
  addExternalIdToZIndex(id, owner) {
749
749
  check(id, String);
750
- check(owner, [String, vcsAppSymbol]);
750
+ check(owner, oneOf(String, vcsAppSymbol));
751
751
 
752
752
  if (this.has(id)) {
753
753
  throw new Error(`Id ${id} already belongs to a window id`);
@@ -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>
@@ -1,13 +1,18 @@
1
1
  <template>
2
- <v-list-item class="ma-2 d-flex flex-row align-center" v-if="item">
2
+ <v-list-item v-if="item" v-bind="$attrs">
3
3
  <template #prepend v-if="item.icon">
4
4
  <v-icon>
5
5
  {{ item.icon }}
6
6
  </v-icon>
7
7
  </template>
8
- <div class="px-2 d-flex align-center" :title="$t('search.select')">
9
- <span v-html="marked" />
10
- </div>
8
+ <template #title>
9
+ <v-list-item-title>
10
+ <span v-html="marked" />
11
+ </v-list-item-title>
12
+ </template>
13
+ <v-tooltip activator="parent">
14
+ {{ $st('search.select') }}
15
+ </v-tooltip>
11
16
  <template #append>
12
17
  <VcsActionButtonList
13
18
  v-if="hasActions"
@@ -21,7 +26,12 @@
21
26
 
22
27
  <script>
23
28
  import { computed } from 'vue';
24
- import { VIcon, VListItem } from 'vuetify/components';
29
+ import {
30
+ VIcon,
31
+ VListItem,
32
+ VListItemTitle,
33
+ VTooltip,
34
+ } from 'vuetify/components';
25
35
  import VcsActionButtonList from '../components/buttons/VcsActionButtonList.vue';
26
36
 
27
37
  /**
@@ -38,7 +48,7 @@
38
48
  partials.forEach((partial) => {
39
49
  replacement = replacement.replaceAll(
40
50
  new RegExp(`(^|[^>])(${partial})`, 'ig'),
41
- '<span>$1<span class="primary--text">$2</span></span>',
51
+ '<span>$1<span class="text-primary">$2</span></span>',
42
52
  );
43
53
  });
44
54
  }
@@ -58,6 +68,8 @@
58
68
  VcsActionButtonList,
59
69
  VIcon,
60
70
  VListItem,
71
+ VListItemTitle,
72
+ VTooltip,
61
73
  },
62
74
  props: {
63
75
  query: {
@@ -1,15 +1,16 @@
1
1
  <template>
2
2
  <v-list
3
- density="compact"
4
3
  class="ma-0 overflow-y-auto vcs-search-results"
5
- v-model="highlighted"
4
+ v-model:selected="highlighted"
6
5
  >
7
6
  <ResultItem
8
7
  :item="item"
9
8
  :query="query"
10
- class="cursor-pointer px-0"
11
- v-for="(item, index) in results"
9
+ class="cursor-pointer"
10
+ :class="{ 'vcs-search-result-border': index < items.length - 1 }"
11
+ v-for="(item, index) in items"
12
12
  :key="index"
13
+ :value="item.value"
13
14
  />
14
15
  </v-list>
15
16
  </template>
@@ -22,7 +23,7 @@
22
23
  /**
23
24
  * @description ResultsComponent listing all available result items in a scrollable list
24
25
  * @vue-prop {string} query - The query string forwarded to mark results within resultItem component.
25
- * @vue-prop {Array<ResultItem>} results - Array of results.
26
+ * @vue-prop {Array<import("./search.js").ResultItem>} results - Array of results.
26
27
  * @vue-computed {import("vue").Ref<string>} highlighted - The highlighted result item. Updates also on feature select.
27
28
  */
28
29
  export default {
@@ -42,23 +43,27 @@
42
43
  },
43
44
  },
44
45
  setup(props) {
45
- const highlightedRef = ref(-1);
46
+ const items = computed(() => {
47
+ return props.results.map((item, index) => ({
48
+ ...item,
49
+ value: index,
50
+ }));
51
+ });
52
+ const selectedRef = ref([]);
46
53
  /** @type {import("@src/vcsUiApp.js").default} */
47
54
  const app = inject('vcsApp');
48
55
  const selectedListener = app.featureInfo.featureChanged.addEventListener(
49
56
  (feature) => {
50
- if (highlightedRef.value >= 0) {
51
- if (
52
- feature &&
53
- props.results[highlightedRef.value].feature === feature
54
- ) {
57
+ if (selectedRef.value.length > 0) {
58
+ const [index] = selectedRef.value;
59
+ if (feature && items.value[index].feature === feature) {
55
60
  return;
56
61
  }
57
- highlightedRef.value = -1;
62
+ selectedRef.value = [];
58
63
  } else if (feature) {
59
- highlightedRef.value = props.results.findIndex(
60
- (r) => r.feature === feature,
61
- );
64
+ selectedRef.value = [
65
+ items.value.findIndex((r) => r.feature === feature),
66
+ ];
62
67
  }
63
68
  },
64
69
  );
@@ -68,14 +73,16 @@
68
73
  });
69
74
 
70
75
  return {
76
+ items,
71
77
  highlighted: computed({
72
78
  get() {
73
- return highlightedRef.value;
79
+ return selectedRef.value;
74
80
  },
75
81
  set(value) {
76
- highlightedRef.value = value;
77
- if (value >= 0) {
78
- const item = props.results[value];
82
+ selectedRef.value = value;
83
+ const [index] = value;
84
+ if (index >= 0) {
85
+ const item = items.value[index];
79
86
  item.clicked();
80
87
  }
81
88
  },
@@ -85,8 +92,12 @@
85
92
  };
86
93
  </script>
87
94
 
88
- <style scoped>
95
+ <style lang="scss" scoped>
89
96
  .vcs-search-results {
90
97
  max-height: 400px;
91
98
  }
99
+ .vcs-search-result-border {
100
+ border-bottom: thin solid;
101
+ border-color: rgb(var(--v-theme-base-lighten-2));
102
+ }
92
103
  </style>
@@ -8,7 +8,8 @@ declare const _default: import("vue").DefineComponent<{
8
8
  required: true;
9
9
  };
10
10
  }, {
11
- highlighted: import("vue").WritableComputedRef<number>;
11
+ items: import("vue").ComputedRef<any[]>;
12
+ highlighted: import("vue").WritableComputedRef<never[]>;
12
13
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
13
14
  query: {
14
15
  type: StringConstructor;
@@ -1,17 +1,17 @@
1
1
  <template>
2
2
  <v-sheet>
3
3
  <span class="d-flex justify-space-between align-center mt-1 ml-2">
4
- <v-icon class="pa-1"> $vcsSearch </v-icon>
4
+ <v-icon class="pa-1" :size="itemHeight - 8"> $vcsSearch </v-icon>
5
5
  <VcsTextField
6
6
  class="d-inline-block user-select-none w-100 mx-1"
7
7
  autofocus
8
8
  :loading="searching"
9
9
  clearable
10
- dense
11
10
  :placeholder="$t('search.placeholder')"
12
11
  v-model.trim="query"
13
12
  @keydown.enter="search"
14
13
  @input="reset"
14
+ @click:clear="reset"
15
15
  />
16
16
  </span>
17
17
  <v-divider class="mt-1 base-darken-1" v-if="!!results.length" />
@@ -26,18 +26,8 @@
26
26
  </template>
27
27
 
28
28
  <style lang="scss" scoped>
29
- :deep(.v-input) {
30
- fieldset {
31
- padding: 0 !important;
32
- }
33
- fieldset,
34
- input {
35
- border-color: transparent !important;
36
- }
37
- }
38
- :deep(.v-icon .v-icon__component) {
39
- width: 16px;
40
- height: 16px;
29
+ :deep(.v-field .v-field__outline *) {
30
+ border-color: transparent !important;
41
31
  }
42
32
  .user-select-none {
43
33
  user-select: none;
@@ -51,6 +41,7 @@
51
41
  import VcsTextField from '../components/form-inputs-controls/VcsTextField.vue';
52
42
  import ResultsComponent from './ResultsComponent.vue';
53
43
  import VcsFormButton from '../components/buttons/VcsFormButton.vue';
44
+ import { useItemHeight } from '../vuePlugins/vuetify.js';
54
45
 
55
46
  /**
56
47
  * @description Stylized search component providing an input field for search inputs.
@@ -103,6 +94,8 @@
103
94
  clear();
104
95
  });
105
96
 
97
+ const itemHeight = useItemHeight();
98
+
106
99
  return {
107
100
  query,
108
101
  searching,
@@ -111,6 +104,7 @@
111
104
  clear,
112
105
  search,
113
106
  zoomToAll,
107
+ itemHeight,
114
108
  };
115
109
  },
116
110
  };
@@ -6,5 +6,6 @@ declare const _default: import("vue").DefineComponent<{}, {
6
6
  clear: () => void;
7
7
  search: () => Promise<void>;
8
8
  zoomToAll: () => void;
9
+ itemHeight: import("vue").ComputedRef<number>;
9
10
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
10
11
  export default _default;
@@ -10,7 +10,7 @@ import {
10
10
  Viewpoint,
11
11
  } from '@vcmap/core';
12
12
  import { shallowRef } from 'vue';
13
- import { check } from '@vcsuite/check';
13
+ import { check, oneOf } from '@vcsuite/check';
14
14
  import { Icon } from 'ol/style.js';
15
15
  import { getLogger } from '@vcsuite/logger';
16
16
  import { vcsAppSymbol } from '../pluginHelper.js';
@@ -183,7 +183,7 @@ class Search extends IndexedCollection {
183
183
  * @param {number=} index
184
184
  */
185
185
  add(item, owner, index) {
186
- check(owner, [String, vcsAppSymbol]);
186
+ check(owner, oneOf(String, vcsAppSymbol));
187
187
  check(item.search, Function);
188
188
 
189
189
  item[searchImplOwnerSymbol] = owner;
package/src/siteConfig.js CHANGED
@@ -35,7 +35,7 @@ function setHeaderTitle(title) {
35
35
  document.head.appendChild(titleElement);
36
36
  }
37
37
 
38
- const defaultFavicon = './assets/favicon.svg';
38
+ const defaultFavicon = './assets/favicon-4c4ce5df.svg';
39
39
 
40
40
  const defaultHeaderTitle = 'VC Map';
41
41
 
@@ -44,25 +44,25 @@ const defaultHeaderTitle = 'VC Map';
44
44
  * @returns {() => void}
45
45
  */
46
46
  export default function createSiteConfig(uiConfig) {
47
- if (typeof uiConfig.config.value.favicon === 'string') {
48
- setFavicon(uiConfig.config.value.favicon);
47
+ if (typeof uiConfig.config.favicon === 'string') {
48
+ setFavicon(uiConfig.config.favicon);
49
49
  }
50
50
 
51
- if (typeof uiConfig.config.value.headerTitle === 'string') {
52
- setHeaderTitle(uiConfig.config.value.headerTitle);
51
+ if (typeof uiConfig.config.headerTitle === 'string') {
52
+ setHeaderTitle(uiConfig.config.headerTitle);
53
53
  }
54
54
 
55
55
  const updateFavicon = () => {
56
- if (typeof uiConfig.config.value.favicon === 'string') {
57
- setFavicon(uiConfig.config.value.favicon);
56
+ if (typeof uiConfig.config.favicon === 'string') {
57
+ setFavicon(uiConfig.config.favicon);
58
58
  } else {
59
59
  setFavicon(defaultFavicon);
60
60
  }
61
61
  };
62
62
 
63
63
  const updateHeaderTitle = () => {
64
- if (typeof uiConfig.config.value.headerTitle === 'string') {
65
- setHeaderTitle(uiConfig.config.value.headerTitle);
64
+ if (typeof uiConfig.config.headerTitle === 'string') {
65
+ setHeaderTitle(uiConfig.config.headerTitle);
66
66
  } else {
67
67
  setHeaderTitle(defaultHeaderTitle);
68
68
  }
package/src/state.js CHANGED
@@ -1,4 +1,4 @@
1
- import { check } from '@vcsuite/check';
1
+ import { check, optional } from '@vcsuite/check';
2
2
  import { getLogger } from '@vcsuite/logger';
3
3
  import { Viewpoint } from '@vcmap/core';
4
4
 
@@ -257,9 +257,9 @@ export function getStateFromURL(url) {
257
257
  */
258
258
  export function setStateToUrl(state, url) {
259
259
  check(state, {
260
- activeMap: [String, undefined],
261
- activeViewpoint: [Object, undefined],
262
- activeObliqueCollection: [String, undefined],
260
+ activeMap: optional(String),
261
+ activeViewpoint: optional(Object),
262
+ activeObliqueCollection: optional(String),
263
263
  layers: Array,
264
264
  plugins: Array,
265
265
  moduleIds: [String],
@@ -1,5 +1,3 @@
1
- @import 'vcsFont.scss';
2
-
3
1
  .v-application,
4
2
  .v-overlay-container {
5
3
  h1,
@@ -1,8 +1,4 @@
1
1
  @import './typography';
2
- @import './shades';
3
- @import './variables';
4
- @import './vcsFont';
5
- @import './vcsGrid';
6
2
  @import './vcsList';
7
3
 
8
4
  /* latin-ext */