@vcmap/ui 6.0.0-rc.5 → 6.0.0-rc.6

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 (156) hide show
  1. package/build/buildTypes.js +9 -5
  2. package/config/base.config.json +0 -6
  3. package/config/dev.config.json +4 -0
  4. package/config/projects.config.json +2 -1
  5. package/config/theming.config.json +68 -0
  6. package/config/www.config.json +31 -30
  7. package/dist/assets/cesium.js +1 -1
  8. package/dist/assets/{core-1c8b8674.js → core-e06aa7a6.js} +1403 -1375
  9. package/dist/assets/core.js +1 -1
  10. package/dist/assets/ol.js +1 -1
  11. package/dist/assets/ui-5dda32d2.css +1 -0
  12. package/dist/assets/{ui-7214428e.js → ui-5dda32d2.js} +11632 -11501
  13. package/dist/assets/ui.js +1 -1
  14. package/dist/assets/vue.js +1 -1
  15. package/dist/assets/{vuetify-88a2fabe.css → vuetify-4c4e4217.css} +1 -1
  16. package/dist/assets/{vuetify-88a2fabe.js → vuetify-4c4e4217.js} +2375 -2369
  17. package/dist/assets/vuetify.js +1 -1
  18. package/index.d.ts +22 -10
  19. package/index.js +9 -3
  20. package/package.json +3 -3
  21. package/plugins/@vcmap-show-case/custom-icons-example/README.md +3 -0
  22. package/plugins/@vcmap-show-case/custom-icons-example/assets/imageExample.png +0 -0
  23. package/plugins/@vcmap-show-case/custom-icons-example/assets/svgExample.svg +1 -0
  24. package/plugins/@vcmap-show-case/custom-icons-example/package.json +5 -0
  25. package/plugins/@vcmap-show-case/custom-icons-example/src/CustomIconsExample.vue +90 -0
  26. package/plugins/@vcmap-show-case/custom-icons-example/src/index.js +45 -0
  27. package/plugins/@vcmap-show-case/plugin-editors/src/PluginEditors.vue +11 -7
  28. package/plugins/@vcmap-show-case/theming-example/README.md +3 -0
  29. package/plugins/@vcmap-show-case/theming-example/package.json +5 -0
  30. package/plugins/@vcmap-show-case/theming-example/src/ThemingExample.vue +116 -0
  31. package/plugins/@vcmap-show-case/theming-example/src/index.js +53 -0
  32. package/plugins/package.json +5 -1
  33. package/src/actions/actionHelper.d.ts +4 -11
  34. package/src/actions/actionHelper.js +2 -5
  35. package/src/actions/listActions.d.ts +2 -2
  36. package/src/application/VcsApp.vue +17 -19
  37. package/src/application/VcsApp.vue.d.ts +5 -1
  38. package/src/application/VcsAttributionsFooter.vue.d.ts +1 -1
  39. package/src/application/VcsContainer.vue +2 -2
  40. package/src/application/VcsContainer.vue.d.ts +5 -1
  41. package/src/application/VcsNavbar.vue +9 -1
  42. package/src/application/VcsNavbar.vue.d.ts +1 -0
  43. package/src/application/VcsSplashScreen.vue +11 -2
  44. package/src/application/attributionsHelper.d.ts +20 -22
  45. package/src/application/attributionsHelper.js +4 -4
  46. package/src/callback/vcsCallback.d.ts +2 -2
  47. package/src/callback/vcsCallback.js +1 -1
  48. package/src/components/buttons/VcsActionButtonList.vue +2 -3
  49. package/src/components/buttons/VcsButton.vue +2 -4
  50. package/src/components/buttons/VcsButton.vue.d.ts +1 -1
  51. package/src/components/buttons/VcsFormButton.vue +4 -4
  52. package/src/components/buttons/VcsToolButton.vue +4 -2
  53. package/src/components/buttons/VcsToolButton.vue.d.ts +2 -2
  54. package/src/components/composables.d.ts +5 -0
  55. package/src/components/composables.js +79 -9
  56. package/src/components/extent/VcsExtent.vue +10 -6
  57. package/src/components/extent/VcsExtent.vue.d.ts +1 -0
  58. package/src/components/flight/VcsFlightComponent.vue +13 -13
  59. package/src/components/flight/VcsFlightComponent.vue.d.ts +1 -0
  60. package/src/components/form-inputs-controls/VcsCheckbox.vue +8 -3
  61. package/src/components/form-inputs-controls/VcsChipArrayInput.vue +3 -8
  62. package/src/components/form-inputs-controls/VcsChipArrayInput.vue.d.ts +0 -1
  63. package/src/components/form-inputs-controls/VcsCoordinate.vue +1 -2
  64. package/src/components/form-inputs-controls/VcsFileInput.vue +1 -1
  65. package/src/components/form-inputs-controls/VcsLabel.vue +1 -1
  66. package/src/components/form-inputs-controls/VcsRadio.vue +8 -6
  67. package/src/components/form-inputs-controls/VcsRadio.vue.d.ts +1 -0
  68. package/src/components/form-inputs-controls/VcsSelect.vue +1 -1
  69. package/src/components/form-inputs-controls/VcsSlider.vue +5 -5
  70. package/src/components/form-inputs-controls/VcsTextArea.vue +1 -1
  71. package/src/components/form-inputs-controls/VcsTextField.vue +10 -1
  72. package/src/components/form-inputs-controls/VcsTextField.vue.d.ts +2 -1
  73. package/src/components/form-inputs-controls/VcsWizard.vue +3 -3
  74. package/src/components/form-inputs-controls/VcsWizardStep.vue +5 -1
  75. package/src/components/form-inputs-controls/vcsTextField.scss +7 -1
  76. package/src/components/form-output/VcsFormattedNumber.vue +1 -1
  77. package/src/components/import/VcsImportComponent.vue +7 -4
  78. package/src/components/import/VcsImportComponent.vue.d.ts +1 -1
  79. package/src/components/lists/VcsActionList.vue +2 -6
  80. package/src/components/lists/VcsListItemComponent.vue +20 -10
  81. package/src/components/lists/VcsListItemComponent.vue.d.ts +11 -1
  82. package/src/components/lists/VcsTreeview.vue +53 -11
  83. package/src/components/lists/VcsTreeview.vue.d.ts +2 -0
  84. package/src/components/lists/VcsTreeviewSearchbar.vue +14 -3
  85. package/src/components/lists/VcsTreeviewSearchbar.vue.d.ts +3 -1
  86. package/src/components/lists/VcsTreeviewTitle.vue +36 -0
  87. package/src/components/modelHelper.d.ts +10 -8
  88. package/src/components/modelHelper.js +8 -6
  89. package/src/components/notification/VcsHelp.vue +6 -7
  90. package/src/components/notification/VcsHelp.vue.d.ts +0 -9
  91. package/src/components/plugins/AbstractConfigEditor.vue +1 -22
  92. package/src/components/plugins/AbstractConfigEditor.vue.d.ts +6 -29
  93. package/src/components/section/VcsExpansionPanel.vue +9 -3
  94. package/src/components/section/VcsExpansionPanel.vue.d.ts +2 -2
  95. package/src/components/section/VcsFormSection.vue +6 -6
  96. package/src/components/section/VcsFormSection.vue.d.ts +2 -2
  97. package/src/components/style/VcsImageSelector.vue +14 -6
  98. package/src/components/style/VcsImageSelector.vue.d.ts +1 -0
  99. package/src/components/style/VcsStrokeSelector.vue +5 -2
  100. package/src/components/style/VcsStrokeSelector.vue.d.ts +1 -0
  101. package/src/components/style/VcsTextMenu.vue +2 -2
  102. package/src/components/tables/VcsDataTable.vue +14 -10
  103. package/src/components/tables/VcsDataTable.vue.d.ts +1 -0
  104. package/src/components/vector-properties/VcsVectorPropertiesComponent.vue +42 -31
  105. package/src/components/vector-properties/VcsVectorPropertiesComponent.vue.d.ts +1 -0
  106. package/src/components/viewpoint/VcsViewpointComponent.vue +12 -9
  107. package/src/components/viewpoint/VcsViewpointComponent.vue.d.ts +1 -0
  108. package/src/contentTree/contentTreeItem.d.ts +2 -2
  109. package/src/contentTree/contentTreeItem.js +1 -1
  110. package/src/featureInfo/BalloonComponent.vue +21 -13
  111. package/src/featureInfo/BalloonComponent.vue.d.ts +1 -0
  112. package/src/featureInfo/abstractFeatureInfoView.d.ts +4 -4
  113. package/src/featureInfo/abstractFeatureInfoView.js +4 -4
  114. package/src/featureInfo/featureInfo.d.ts +2 -2
  115. package/src/featureInfo/featureInfo.js +1 -1
  116. package/src/i18n/i18nCollection.d.ts +9 -15
  117. package/src/i18n/i18nCollection.js +3 -3
  118. package/src/legend/VcsLegend.vue +6 -2
  119. package/src/legend/VcsLegend.vue.d.ts +1 -0
  120. package/src/manager/collectionManager/CollectionComponentList.vue +1 -1
  121. package/src/manager/collectionManager/categoryManager.d.ts +1 -1
  122. package/src/manager/collectionManager/collectionComponentClass.d.ts +2 -2
  123. package/src/manager/collectionManager/collectionComponentClass.js +4 -4
  124. package/src/manager/collectionManager/collectionManager.d.ts +1 -1
  125. package/src/manager/toolbox/GroupToolboxComponent.vue +8 -6
  126. package/src/manager/toolbox/GroupToolboxComponent.vue.d.ts +1 -1
  127. package/src/manager/toolbox/SelectToolboxComponent.vue +8 -6
  128. package/src/manager/toolbox/SelectToolboxComponent.vue.d.ts +1 -1
  129. package/src/manager/toolbox/{ToolboxManager.vue → ToolboxManagerComponent.vue} +8 -5
  130. package/src/manager/toolbox/{ToolboxManager.vue.d.ts → ToolboxManagerComponent.vue.d.ts} +1 -1
  131. package/src/manager/window/WindowComponentHeader.vue +6 -3
  132. package/src/manager/window/WindowComponentHeader.vue.d.ts +1 -0
  133. package/src/manager/window/windowManager.d.ts +6 -6
  134. package/src/manager/window/windowManager.js +3 -3
  135. package/src/navigation/OrientationToolsButton.vue +2 -4
  136. package/src/navigation/TiltSlider.vue +3 -5
  137. package/src/search/SearchComponent.vue +8 -6
  138. package/src/search/SearchComponent.vue.d.ts +1 -1
  139. package/src/styles/vcsList.scss +1 -1
  140. package/src/uiConfig.d.ts +12 -3
  141. package/src/uiConfig.js +2 -1
  142. package/src/vcsUiApp.d.ts +41 -56
  143. package/src/vcsUiApp.js +34 -28
  144. package/src/vuePlugins/vuetify.d.ts +88 -62
  145. package/src/vuePlugins/vuetify.js +116 -20
  146. package/dist/assets/ui-7214428e.css +0 -1
  147. package/plugins/@vcmap-show-case/theme-changer/README.md +0 -23
  148. package/plugins/@vcmap-show-case/theme-changer/config.json +0 -69
  149. package/plugins/@vcmap-show-case/theme-changer/package.json +0 -11
  150. package/plugins/@vcmap-show-case/theme-changer/src/ThemeChangerComponent.vue +0 -120
  151. package/plugins/@vcmap-show-case/theme-changer/src/index.js +0 -108
  152. package/src/components/lists/VcsTreeviewLeaf.vue +0 -92
  153. /package/dist/assets/{cesium-126f111a.js → cesium-ccb4cc30.js} +0 -0
  154. /package/dist/assets/{ol-27f9b3f3.js → ol-e7981d5c.js} +0 -0
  155. /package/dist/assets/{vue-c78a5f76.js → vue-87bc6efe.js} +0 -0
  156. /package/src/components/lists/{VcsTreeviewLeaf.vue.d.ts → VcsTreeviewTitle.vue.d.ts} +0 -0
@@ -1 +1 @@
1
- export * from "./vuetify-88a2fabe.js";
1
+ export * from "./vuetify-4c4e4217.js";
package/index.d.ts CHANGED
@@ -46,6 +46,8 @@ export { default as PanelComponent } from "./src/manager/panel/PanelComponent.vu
46
46
  export type * from "./src/manager/panel/PanelComponent.vue.d.ts";
47
47
  export { default as ButtonManager } from "./src/manager/buttonManager.js";
48
48
  export type * from "./src/manager/buttonManager.d.ts";
49
+ export { default as ToolboxManagerComponent } from "./src/manager/toolbox/ToolboxManagerComponent.vue";
50
+ export type * from "./src/manager/toolbox/ToolboxManagerComponent.vue.d.ts";
49
51
  export { default as CategoryManager } from "./src/manager/collectionManager/categoryManager.js";
50
52
  export type * from "./src/manager/collectionManager/categoryManager.d.ts";
51
53
  export { default as CollectionManager } from "./src/manager/collectionManager/collectionManager.js";
@@ -102,8 +104,8 @@ export { default as VcsCompass } from "./src/navigation/VcsCompass.vue";
102
104
  export type * from "./src/navigation/VcsCompass.vue.d.ts";
103
105
  export { default as VcsZoomButton } from "./src/navigation/VcsZoomButton.vue";
104
106
  export type * from "./src/navigation/VcsZoomButton.vue.d.ts";
105
- export { i18nPluginSymbol } from "./src/i18n/i18nCollection.js";
106
- export type * from "./src/i18n/i18nCollection.d.ts";
107
+ export { default as UiConfig } from "./src/uiConfig.js";
108
+ export type * from "./src/uiConfig.d.ts";
107
109
  export { default as VcsUiApp } from "./src/vcsUiApp.js";
108
110
  export type * from "./src/vcsUiApp.d.ts";
109
111
  export { default as Icons } from "./src/components/icons/+all.js";
@@ -162,8 +164,8 @@ export { default as VcsListItemComponent } from "./src/components/lists/VcsListI
162
164
  export type * from "./src/components/lists/VcsListItemComponent.vue.d.ts";
163
165
  export { default as VcsTreeview } from "./src/components/lists/VcsTreeview.vue";
164
166
  export type * from "./src/components/lists/VcsTreeview.vue.d.ts";
165
- export { default as VcsTreeviewLeaf } from "./src/components/lists/VcsTreeviewLeaf.vue";
166
- export type * from "./src/components/lists/VcsTreeviewLeaf.vue.d.ts";
167
+ export { default as VcsTreeviewTitle } from "./src/components/lists/VcsTreeviewTitle.vue";
168
+ export type * from "./src/components/lists/VcsTreeviewTitle.vue.d.ts";
167
169
  export { default as VcsTreeviewSearchbar } from "./src/components/lists/VcsTreeviewSearchbar.vue";
168
170
  export type * from "./src/components/lists/VcsTreeviewSearchbar.vue.d.ts";
169
171
  export { default as VcsBadge } from "./src/components/notification/VcsBadge.vue";
@@ -214,10 +216,14 @@ export { default as VcsExpansionPanel } from "./src/components/section/VcsExpans
214
216
  export type * from "./src/components/section/VcsExpansionPanel.vue.d.ts";
215
217
  export { default as VcsSplashScreen } from "./src/application/VcsSplashScreen.vue";
216
218
  export type * from "./src/application/VcsSplashScreen.vue.d.ts";
219
+ export * from "./src/application/attributionsHelper.js";
220
+ export type * from "./src/application/attributionsHelper.d.ts";
217
221
  export * from "./src/components/attrsHelpers.js";
218
222
  export type * from "./src/components/attrsHelpers.d.ts";
219
223
  export * from "./src/components/modelHelper.js";
220
224
  export type * from "./src/components/modelHelper.d.ts";
225
+ export * from "./src/components/composables.js";
226
+ export type * from "./src/components/composables.d.ts";
221
227
  export { createMapButtonAction, createToggleAction, createOverviewMapAction, createModalAction, createLinkAction, createGoToViewpointAction, createZoomToFeatureAction } from "./src/actions/actionHelper.js";
222
228
  export type * from "./src/actions/actionHelper.d.ts";
223
229
  export { parseAndSanitizeMarkdown, renderTemplate } from "./src/components/form-output/markdownHelper.js";
@@ -264,7 +270,9 @@ export { getWindowComponentOptions, default as OverviewMap } from "./src/navigat
264
270
  export type * from "./src/navigation/overviewMap.d.ts";
265
271
  export { createVueI18n, setupI18n } from "./src/vuePlugins/i18n.js";
266
272
  export type * from "./src/vuePlugins/i18n.d.ts";
267
- export { createVcsThemes, createVcsVuetify, isDark, getDefaultPrimaryColor, getColorByKey, useItemHeight, useFontSize } from "./src/vuePlugins/vuetify.js";
273
+ export { default as I18nCollection, i18nPluginSymbol } from "./src/i18n/i18nCollection.js";
274
+ export type * from "./src/i18n/i18nCollection.d.ts";
275
+ export { createVcsThemes, createVcsVuetify, isDark, getDefaultPrimaryColor, getColorByKey, useFontSize } from "./src/vuePlugins/vuetify.js";
268
276
  export type * from "./src/vuePlugins/vuetify.d.ts";
269
277
  export { downloadURI, downloadBlob, downloadText, downloadCanvas } from "./src/downloadHelper.js";
270
278
  export type * from "./src/downloadHelper.d.ts";
@@ -288,11 +296,15 @@ export { default as VcsFeatureEditingWindow, EditorTransformationIcons, getAllow
288
296
  export type * from "./src/components/vector-properties/VcsFeatureEditingWindow.vue.d.ts";
289
297
 
290
298
  declare module 'vue' {
291
- type ReplaceFirstParam<TParams extends readonly any[], TReplace> = {
292
- [K in keyof TParams]: K extends "0" ? TReplace : TParams[K]
293
- }
294
-
295
299
  interface ComponentCustomProperties {
296
- $st: (...params: ReplaceFirstParam<Parameters<import("vue-i18n").ComposerTranslation>, string | null | undefined>) => ReturnType<import("vue-i18n").ComposerTranslation>
300
+ $st(key: string | number | undefined | null): string;
301
+ $st(key: string | number | undefined | null, plural: number, options?: import("vue-i18n").TranslateOptions<import("vue-i18n").Locale>): string;
302
+ $st(key: string | number | undefined | null, defaultMsg: string, options?: import("vue-i18n").TranslateOptions<import("vue-i18n").Locale>): string;
303
+ $st(key: string | number | undefined | null, list: unknown[], options?: import("vue-i18n").TranslateOptions<import("vue-i18n").Locale>): string;
304
+ $st(key: string | number | undefined | null, list: unknown[], plural: number): string;
305
+ $st(key: string | number | undefined | null, list: unknown[], defaultMsg: string): string;
306
+ $st(key: string | number | undefined | null, named: import("vue-i18n").NamedValue, options?: import("vue-i18n").TranslateOptions<import("vue-i18n").Locale>): string;
307
+ $st(key: string | number | undefined | null, named: import("vue-i18n").NamedValue, plural: number): string;
308
+ $st(key: string | number | undefined | null, named: import("vue-i18n").NamedValue, defaultMsg: string): string;
297
309
  }
298
310
  }
package/index.js CHANGED
@@ -124,6 +124,7 @@ export {
124
124
  ToolboxType,
125
125
  defaultToolboxName,
126
126
  } from './src/manager/toolbox/toolboxManager.js';
127
+ export { default as ToolboxManagerComponent } from './src/manager/toolbox/ToolboxManagerComponent.vue';
127
128
  export { default as CategoryManager } from './src/manager/collectionManager/categoryManager.js';
128
129
  export { default as CollectionManager } from './src/manager/collectionManager/collectionManager.js';
129
130
  export { default as CollectionManagerComponent } from './src/manager/collectionManager/CollectionManager.vue';
@@ -185,14 +186,17 @@ export { default as VcsCompass } from './src/navigation/VcsCompass.vue';
185
186
  export { default as VcsZoomButton } from './src/navigation/VcsZoomButton.vue';
186
187
  //
187
188
  export { createVueI18n, setupI18n } from './src/vuePlugins/i18n.js';
188
- export { i18nPluginSymbol } from './src/i18n/i18nCollection.js';
189
+ export {
190
+ default as I18nCollection,
191
+ i18nPluginSymbol,
192
+ } from './src/i18n/i18nCollection.js';
193
+ export { default as UiConfig } from './src/uiConfig.js'; // export UiConfig types
189
194
  export {
190
195
  createVcsThemes,
191
196
  createVcsVuetify,
192
197
  isDark,
193
198
  getDefaultPrimaryColor,
194
199
  getColorByKey,
195
- useItemHeight,
196
200
  useFontSize,
197
201
  } from './src/vuePlugins/vuetify.js';
198
202
  export {
@@ -262,7 +266,7 @@ export {
262
266
  export { default as VcsList } from './src/components/lists/VcsList.vue';
263
267
  export { default as VcsListItemComponent } from './src/components/lists/VcsListItemComponent.vue';
264
268
  export { default as VcsTreeview } from './src/components/lists/VcsTreeview.vue';
265
- export { default as VcsTreeviewLeaf } from './src/components/lists/VcsTreeviewLeaf.vue';
269
+ export { default as VcsTreeviewTitle } from './src/components/lists/VcsTreeviewTitle.vue';
266
270
  export { default as VcsTreeviewSearchbar } from './src/components/lists/VcsTreeviewSearchbar.vue';
267
271
  export { default as VcsBadge } from './src/components/notification/VcsBadge.vue';
268
272
  export { default as VcsDefaultLogo } from './src/logo.svg';
@@ -307,5 +311,7 @@ export { default as VcsFileDrop } from './src/components/import/VcsFileDrop.vue'
307
311
  export { default as VcsImportComponent } from './src/components/import/VcsImportComponent.vue';
308
312
  export { default as VcsExpansionPanel } from './src/components/section/VcsExpansionPanel.vue';
309
313
  export { default as VcsSplashScreen } from './src/application/VcsSplashScreen.vue';
314
+ export * from './src/application/attributionsHelper.js';
310
315
  export * from './src/components/attrsHelpers.js';
311
316
  export * from './src/components/modelHelper.js';
317
+ export * from './src/components/composables.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vcmap/ui",
3
- "version": "6.0.0-rc.5",
3
+ "version": "6.0.0-rc.6",
4
4
  "author": "Virtual City Systems",
5
5
  "license": "MIT",
6
6
  "scripts": {
@@ -57,10 +57,10 @@
57
57
  },
58
58
  "peerDependencies": {
59
59
  "@vcmap-cesium/engine": "^10.0.1",
60
- "@vcmap/core": "6.0.0-rc.3",
60
+ "@vcmap/core": "^6.0.0-rc.5",
61
61
  "ol": "^10.0.0",
62
62
  "vue": "~3.4.38",
63
- "vuetify": "^3.7.0"
63
+ "vuetify": "^3.7.1"
64
64
  },
65
65
  "devDependencies": {
66
66
  "@histoire/plugin-vue": "^0.17.17",
@@ -0,0 +1,3 @@
1
+ # Custom icons example
2
+
3
+ This is a show-case plugin demonstrating the usage of [custom icons](../../../documentation/CUSTOM_ICONS.md)
@@ -0,0 +1 @@
1
+ <svg fill="#000000" width="200px" height="200px" viewBox="0 0 480 480" xmlns="http://www.w3.org/2000/svg"><path id="test" d="M296.482 395.294c0 31.144 -25.327 56.471 -56.471 56.471s-56.471 -25.327 -56.471 -56.471zM240.011 56.471c85.609 0 155.294 69.656 155.294 155.294v98.823c0 21.685 8.188 41.477 21.6 56.471H63.089c13.44 -14.993 21.628 -34.786 21.628 -56.471V211.765c0 -85.638 69.656 -155.294 155.294 -155.294m183.53 254.118V211.765c0 -96.424 -74.823 -175.567 -169.412 -182.823V0H225.894v28.941c-94.617 7.256 -169.412 86.4 -169.412 182.823v98.823c0 31.143 -25.327 56.471 -56.471 56.471v28.235h155.294c0 46.701 37.977 84.706 84.706 84.706 46.701 0 84.706 -38.005 84.706 -84.706h155.294v-28.235c-31.143 0 -56.471 -25.327 -56.471 -56.471Z" fill-rule="evenodd"/></svg>
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "@vcmap-show-case/custom-icon-tester",
3
+ "version": "1.0.0",
4
+ "mapVersion": "^6.0"
5
+ }
@@ -0,0 +1,90 @@
1
+ <template>
2
+ <div>
3
+ <VcsFormSection heading="VIcon">
4
+ <v-row no-gutters v-for="icon in icons" :key="icon.title">
5
+ <v-col cols="6">
6
+ <VcsLabel>{{ icon.title }}</VcsLabel>
7
+ </v-col>
8
+ <v-col>
9
+ <VIcon size="x-small">{{ `${icon.set}:${icon.icon}` }}</VIcon>
10
+ </v-col>
11
+ <v-col>
12
+ <VIcon>{{ `${icon.set}:${icon.icon}` }}</VIcon>
13
+ </v-col>
14
+ <v-col>
15
+ <VIcon size="large">{{ `${icon.set}:${icon.icon}` }}</VIcon>
16
+ </v-col>
17
+ </v-row>
18
+ </VcsFormSection>
19
+ </div>
20
+ </template>
21
+
22
+ <script>
23
+ import { VcsFormSection, VcsLabel } from '@vcmap/ui';
24
+ import { VRow, VCol, VIcon } from 'vuetify/components';
25
+
26
+ export default {
27
+ name: 'CustomIconsExample',
28
+ components: {
29
+ VcsLabel,
30
+ VcsFormSection,
31
+ VIcon,
32
+ VRow,
33
+ VCol,
34
+ },
35
+ setup() {
36
+ const icons = [
37
+ {
38
+ title: 'Base64 image',
39
+ set: 'imageUrl',
40
+ icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjwhLS0gTGljZW5zZTogQ0MwLiBNYWRlIGJ5IFNWRyBSZXBvOiBodHRwczovL3d3dy5zdmdyZXBvLmNvbS9zdmcvNjUxNjMvYmVhY2ggLS0+CjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgdmlld0JveD0iMCAwIDUxMiA1MTIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUxMiA1MTI7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHJlY3QgeT0iMjcwLjMyNyIgc3R5bGU9ImZpbGw6IzNGQTlGNTsiIHdpZHRoPSI1MTIiIGhlaWdodD0iMTA0LjQ5Ii8+CjxyZWN0IHk9IjM3NC44MTciIHN0eWxlPSJmaWxsOiNGRkQ0NkE7IiB3aWR0aD0iNTEyIiBoZWlnaHQ9IjEzMC42MTIiLz4KPHBhdGggc3R5bGU9ImZpbGw6I0ZGRDI0ODsiIGQ9Ik00MTIuNzM1LDcxLjc5OWMzNC41ODYsMCw2Mi42OTQsMjguMTA4LDYyLjY5NCw2Mi42OTRzLTI4LjEwOCw2Mi42OTQtNjIuNjk0LDYyLjY5NAoJcy02Mi42OTQtMjguMTA4LTYyLjY5NC02Mi42OTRTMzc4LjE0OSw3MS43OTksNDEyLjczNSw3MS43OTl6Ii8+CjxwYXRoIHN0eWxlPSJmaWxsOiNCM0IzQjM7IiBkPSJNMjQ1LjU1MSwxOTcuMTg2aC02Mi42OTRjMC02Mi42OTQtMzYuNTcxLTk5LjI2NS0zNi41NzEtOTkuMjY1CglDMjAxLjE0Myw5Ny45MjEsMjQ1LjU1MSwxNDIuMzI5LDI0NS41NTEsMTk3LjE4NnoiLz4KPHBhdGggc3R5bGU9ImZpbGw6I0NDQ0NDQzsiIGQ9Ik0xNDYuMjg2LDk3LjkyMWMwLDAsMzYuNTcxLDM2LjU3MSwzNi41NzEsOTkuMjY1aC0zNi41NzFIMTA0LjQ5CglDMTA0LjQ5LDE0NC45NDEsMTQ2LjI4Niw5Ny45MjEsMTQ2LjI4Niw5Ny45MjF6Ii8+CjxwYXRoIHN0eWxlPSJmaWxsOiNFNkU2RTY7IiBkPSJNMTQ2LjI4Niw5Ny45MjFjMCwwLTQxLjc5Niw0Ny4wMi00MS43OTYsOTkuMjY1SDQ3LjAyQzQ3LjAyLDE0Mi4zMjksOTEuNDI5LDk3LjkyMSwxNDYuMjg2LDk3LjkyMXoiCgkvPgo8cGF0aCBkPSJNMTgwLjI0NSw0MC40NTJoMTUuNjczYzAtNS4xODYsNC40NzItOS43NTcsMTMuMjkyLTEzLjU5YzguMDg5LTMuNTE0LDE2LjQ3OS00Ljc2NSwxNi41NjMtNC43NzZsLTEuMTItNy43NTZsLTEuMTA5LTcuNzU4CgljLTEwLjY1LDEuNTIyLTI2LjE4NCw2LjMtMzUuNDYzLDE1LjcwM2MtOS4yNzktOS40MDMtMjQuODEzLTE0LjE4MS0zNS40NjMtMTUuNzAzbC0yLjIxNiwxNS41MTcKCUMxNTYuNzA2LDIyLjk4OCwxODAuMjQ1LDI4Ljc0NCwxODAuMjQ1LDQwLjQ1MnoiLz4KPHBhdGggZD0iTTI2My44MzcsOTIuNjk3aDE1LjY3M2MwLTUuMTg2LDQuNDcyLTkuNzU3LDEzLjI5Mi0xMy41OWM4LjA4OS0zLjUxNCwxNi40NzktNC43NjUsMTYuNTYzLTQuNzc2bC0xLjEyLTcuNzU2bC0xLjEwOS03Ljc1OAoJYy0xMC42NSwxLjUyMS0yNi4xODUsNi4zLTM1LjQ2MywxNS43MDNjLTkuMjc5LTkuNDAzLTI0LjgxMy0xNC4xODEtMzUuNDYzLTE1LjcwM2wtMi4yMTYsMTUuNTE3CglDMjQwLjI5OCw3NS4yMzMsMjYzLjgzNyw4MC45ODgsMjYzLjgzNyw5Mi42OTd6Ii8+CjxyZWN0IHg9IjI2LjEyMiIgeT0iNDUwLjU3MiIgd2lkdGg9IjIwLjg5OCIgaGVpZ2h0PSIxNS42NzMiLz4KPHJlY3QgeD0iNjcuOTE4IiB5PSI0MDguNzc2IiB3aWR0aD0iMjAuODk4IiBoZWlnaHQ9IjE1LjY3MyIvPgo8cmVjdCB4PSI2Ny45MTgiIHk9IjQ3MS40NyIgd2lkdGg9IjIwLjg5OCIgaGVpZ2h0PSIxNS42NzMiLz4KPHJlY3QgeD0iMTMwLjYxMiIgeT0iNDYxLjAyMSIgd2lkdGg9IjIwLjg5OCIgaGVpZ2h0PSIxNS42NzMiLz4KPHJlY3QgeD0iMjAzLjc1NSIgeT0iNDcxLjQ3IiB3aWR0aD0iMjAuODk4IiBoZWlnaHQ9IjE1LjY3MyIvPgo8cmVjdCB4PSIyMDMuNzU1IiB5PSI0MTkuMjI1IiB3aWR0aD0iMjAuODk4IiBoZWlnaHQ9IjE1LjY3MyIvPgo8cmVjdCB4PSIyNjYuNDQ5IiB5PSI0MDguNzc2IiB3aWR0aD0iMjAuODk4IiBoZWlnaHQ9IjE1LjY3MyIvPgo8cmVjdCB4PSIzMzkuNTkyIiB5PSI0NDAuMTIzIiB3aWR0aD0iMjAuODk4IiBoZWlnaHQ9IjE1LjY3MyIvPgo8cmVjdCB4PSIyODcuMzQ3IiB5PSI0NzEuNDciIHdpZHRoPSIyMC44OTgiIGhlaWdodD0iMTUuNjczIi8+CjxyZWN0IHg9IjM5MS44MzciIHk9IjQwOC43NzYiIHdpZHRoPSIyMC44OTgiIGhlaWdodD0iMTUuNjczIi8+CjxyZWN0IHg9IjM5MS44MzciIHk9IjQ3MS40NyIgd2lkdGg9IjIwLjg5OCIgaGVpZ2h0PSIxNS42NzMiLz4KPHJlY3QgeD0iNDY0Ljk4IiB5PSI0NDAuMTIzIiB3aWR0aD0iMjAuODk4IiBoZWlnaHQ9IjE1LjY3MyIvPgo8cmVjdCB4PSIyMTkuNDI5IiB5PSIzMDkuNTExIiB3aWR0aD0iNDcuMDIiIGhlaWdodD0iMTUuNjczIi8+CjxyZWN0IHg9IjI3Ni44OTgiIHk9IjMwOS41MTEiIHdpZHRoPSIyMC44OTgiIGhlaWdodD0iMTUuNjczIi8+CjxyZWN0IHg9IjIwLjg5OCIgeT0iMzMwLjQwOSIgd2lkdGg9IjQ3LjAyIiBoZWlnaHQ9IjE1LjY3MyIvPgo8cmVjdCB4PSI3OC4zNjciIHk9IjMzMC40MDkiIHdpZHRoPSIyMC44OTgiIGhlaWdodD0iMTUuNjczIi8+CjxyZWN0IHg9IjQwNy41MSIgeT0iMzMwLjQwOSIgd2lkdGg9IjQ3LjAyIiBoZWlnaHQ9IjE1LjY3MyIvPgo8cmVjdCB4PSIzNzYuMTYzIiB5PSIzMzAuNDA5IiB3aWR0aD0iMjAuODk4IiBoZWlnaHQ9IjE1LjY3MyIvPgo8cGF0aCBkPSJNNTEyLDI2Mi40OTJIMTU0LjEyMnYtNTcuNDY5aDk5LjI2NXYtNy44MzdjMC01OS4wNTctNDguMDQ1LTEwNy4xMDItMTA3LjEwMi0xMDcuMTAyUzM5LjE4NCwxMzguMTMsMzkuMTg0LDE5Ny4xODZ2Ny44MzcKCWg5OS4yNjV2NTcuNDY5SDB2MTUuNjczaDEzOC40NDl2ODguODE2SDB2MTUuNjczaDEzOC40NDl2MzEuMzQ3aC0yMy41MXYxNS42NzNoNjIuNjk0di0xNS42NzNoLTIzLjUxdi0zMS4zNDdINTEydi0xNS42NzNIMTU0LjEyMgoJdi04OC44MTZINTEyVjI2Mi40OTJ6IE0xMTIuNjY2LDE4OS4zNWMyLjg2OC0zNC4xODEsMjMuNTI2LTY1LjQ2NiwzMy43NjMtNzkuMDY2YzkuMTUxLDEyLjA3NCwyNi4yOTUsMzkuNywyOC4zNjQsNzkuMDY2SDExMi42NjZ6CgkgTTIzNy4zODIsMTg5LjM1aC00Ni44OTFjLTEuNzY4LTM4LjA1NC0xNi4wMzktNjYuMDQyLTI2Ljc1NS04MS45MjFDMjAzLjMzMiwxMTUuMTEzLDIzMy44OTEsMTQ4LjQzLDIzNy4zODIsMTg5LjM1egoJIE0xMjkuMTAzLDEwNy4zODRjLTEyLjA3LDE3LjI2OC0yOS43MjcsNDcuODktMzIuMTY1LDgxLjk2Nkg1NS4xODlDNTguNjg5LDE0OC4zMzgsODkuMzc4LDExNC45NywxMjkuMTAzLDEwNy4zODR6Ii8+CjxwYXRoIGQ9Ik00MTIuNzM1LDIwNS4wMjNjMzguODkxLDAsNzAuNTMxLTMxLjY0LDcwLjUzMS03MC41MzFzLTMxLjY0LTcwLjUzMS03MC41MzEtNzAuNTMxcy03MC41MzEsMzEuNjQtNzAuNTMxLDcwLjUzMQoJUzM3My44NDQsMjA1LjAyMyw0MTIuNzM1LDIwNS4wMjN6IE00MTIuNzM1LDc5LjYzNWMzMC4yNDgsMCw1NC44NTcsMjQuNjA4LDU0Ljg1Nyw1NC44NTdzLTI0LjYwOSw1NC44NTctNTQuODU3LDU0Ljg1NwoJcy01NC44NTctMjQuNjA4LTU0Ljg1Ny01NC44NTdTMzgyLjQ4Nyw3OS42MzUsNDEyLjczNSw3OS42MzV6Ii8+Cjwvc3ZnPgo=',
41
+ },
42
+ {
43
+ title: 'Image file',
44
+ set: 'imageUrl',
45
+ icon: './plugins/@vcmap-show-case/custom-icons-example/assets/imageExample.png',
46
+ },
47
+ {
48
+ title: 'SVG File as image',
49
+ set: 'imageUrl',
50
+ icon: './plugins/@vcmap-show-case/custom-icons-example/assets/svgExample.svg',
51
+ },
52
+ {
53
+ title: 'SVG Path',
54
+ set: 'svgPathData',
55
+ icon: 'M20.1 15.9A10 10 0 0 1 19.5 12.3v-3A8 8 0 0 0 17.6 4.1 8 8 0 0 0 12.7 1.5a10 10 0 0 0 -3.1 0.3 10 10 0 0 0 -2.7 1.6 10 10 0 0 0 -1.8 2.5 10 10 0 0 0 -0.6 3v3.3a10 10 0 0 1 -0.6 3.6L3 18.5l0.7 1H9q0 1.3 0.9 2.1T12 22.5C13.2 22.5 13.6 22.2 14.1 21.6S15 20.3 15 19.5h5.3L21 18.5zm-7 4.7A2 2 0 0 1 12 21 2 2 0 0 1 10.9 20.6 2 2 0 0 1 10.5 19.5h3a1 1 0 0 1 -0.4 1.1M4.8 18 5.4 16.3a10 10 0 0 0 0.7 -4V9q0 -1.3 0.5 -2.4a4 4 0 0 1 1.5 -2 10 10 0 0 1 2.2 -1.3Q11.6 2.9 12.8 3a6 6 0 0 1 3.9 2.1 6 6 0 0 1 1.5 4.2v3q0 2 0.7 4L19.5 18H5.1z',
56
+ },
57
+ {
58
+ title: 'SVG File',
59
+ set: 'svgString',
60
+ icon: `<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
61
+ viewBox="0 0 475.279 475.279" style="enable-background:new 0 0 475.279 475.279;" xml:space="preserve">
62
+ <g>
63
+ <path d="M361.531,395.98c-33.02,0-50.146,11.539-65.257,21.718c-13.766,9.274-24.639,16.599-48.496,16.599
64
+ c-23.856,0-34.729-7.325-48.495-16.599c-15.111-10.18-32.237-21.718-65.257-21.718c-2.381,0-4.67,0.067-6.891,0.182V236.423
65
+ c23.946,6.592,41.592,28.547,41.592,54.559h30c0-28.366-13.71-53.59-34.852-69.394c14.009,2.427,27.128,10.074,36.125,22.457
66
+ l24.271-17.634c-16.673-22.948-42.59-35.296-68.983-35.655c12.76-6.271,27.868-7.796,42.424-3.066l9.271-28.531
67
+ c-22.013-7.154-45.479-5.311-66.078,5.185c-11.382,5.799-21.13,13.869-28.791,23.635c-21.817-27.68-59.396-40.329-94.824-28.82
68
+ l9.271,28.532c14.556-4.729,29.664-3.205,42.424,3.066C42.59,191.115,16.672,203.463,0,226.411l24.271,17.634
69
+ c8.997-12.385,22.116-20.032,36.126-22.458c-21.143,15.804-34.854,41.028-34.854,69.395h30c0-26.012,17.646-47.967,41.592-54.559
70
+ v165.655c-11.486,4.257-20.22,10.135-28.364,15.621c-13.765,9.273-24.637,16.599-48.492,16.599v30
71
+ c33.018,0,50.145-11.539,65.255-21.719c13.765-9.273,24.637-16.599,48.492-16.599c23.856,0,34.729,7.325,48.495,16.599
72
+ c15.111,10.18,32.237,21.718,65.257,21.718s50.146-11.539,65.257-21.718c13.766-9.274,24.639-16.599,48.496-16.599
73
+ c23.855,0,34.728,7.325,48.493,16.599c15.11,10.18,32.237,21.719,65.255,21.719v-30c-23.855,0-34.728-7.325-48.493-16.599
74
+ C411.676,407.519,394.55,395.98,361.531,395.98z"/>
75
+ <path d="M438.776,105.982c-1.944-9.575-5.72-18.48-10.933-26.351l25.824-25.824l-21.213-21.213l-25.824,25.824
76
+ c-7.871-5.213-16.777-8.989-26.351-10.933V10.982h-30v36.503c-9.575,1.944-18.48,5.72-26.351,10.933l-25.824-25.824l-21.213,21.213
77
+ l25.824,25.824c-5.213,7.871-8.989,16.777-10.933,26.351h-36.503v30h36.503c1.944,9.575,5.72,18.48,10.933,26.351l-25.824,25.824
78
+ l21.213,21.213l25.824-25.824c7.871,5.213,16.777,8.989,26.351,10.933v36.503h30v-36.503c9.575-1.944,18.48-5.72,26.351-10.933
79
+ l25.824,25.824l21.213-21.213l-25.824-25.824c5.213-7.871,8.989-16.777,10.933-26.351h36.503v-30H438.776z"/>
80
+ </g>
81
+ </svg>`,
82
+ },
83
+ ];
84
+
85
+ return {
86
+ icons,
87
+ };
88
+ },
89
+ };
90
+ </script>
@@ -0,0 +1,45 @@
1
+ import { ButtonLocation, createToggleAction } from '@vcmap/ui';
2
+ import CustomIconsExample from './CustomIconsExample.vue';
3
+ import packageJSON from '../package.json';
4
+
5
+ export default async function customIconExample() {
6
+ return {
7
+ get name() {
8
+ return packageJSON.name;
9
+ },
10
+ get version() {
11
+ return packageJSON.version;
12
+ },
13
+ get mapVersion() {
14
+ return packageJSON.mapVersion;
15
+ },
16
+ onVcsAppMounted(app) {
17
+ const { action, destroy } = createToggleAction(
18
+ {
19
+ name: 'Custom icons example',
20
+ },
21
+ {
22
+ id: 'custom-icons-example',
23
+ state: {
24
+ headerTitle: 'Custom icons example',
25
+ },
26
+ component: CustomIconsExample,
27
+ },
28
+ app.windowManager,
29
+ packageJSON.name,
30
+ );
31
+ app.navbarManager.add(
32
+ { id: 'custom-icons-example', action },
33
+ packageJSON.name,
34
+ ButtonLocation.TOOL,
35
+ );
36
+ this._destoryAction = [destroy];
37
+ },
38
+ destroy() {
39
+ if (this._destroyActions) {
40
+ this._destroyActions.forEach((cb) => cb());
41
+ this._destroyActions = null;
42
+ }
43
+ },
44
+ };
45
+ }
@@ -1,15 +1,21 @@
1
1
  <template>
2
- <VcsList :items="plugins" :show-title="false" />
2
+ <div>
3
+ <VcsHelp
4
+ text="Below all config editors provided by plugins are listed. Important Note: Changes made in editors are not applied!"
5
+ ></VcsHelp>
6
+ <VcsList :items="plugins" :show-title="false" />
7
+ </div>
3
8
  </template>
4
9
 
5
10
  <script>
6
11
  import { inject, onUnmounted, ref } from 'vue';
7
- import { VcsList, createToggleAction, WindowSlot } from '@vcmap/ui';
12
+ import { VcsList, createToggleAction, WindowSlot, VcsHelp } from '@vcmap/ui';
8
13
  import { name } from '../package.json';
9
14
 
10
15
  export default {
11
16
  name: 'PluginEditors',
12
17
  components: {
18
+ VcsHelp,
13
19
  VcsList,
14
20
  },
15
21
  setup() {
@@ -41,12 +47,10 @@
41
47
  if (config) {
42
48
  vcsApp.notifier.add({
43
49
  type: 'info',
44
- message: `${plugin.name}: ${JSON.stringify(
45
- config,
46
- null,
47
- 2,
48
- )}`,
50
+ title: plugin.name,
51
+ message: JSON.stringify(config, null, 2),
49
52
  });
53
+ console.log(config);
50
54
  } else {
51
55
  vcsApp.notifier.add({
52
56
  type: 'warning',
@@ -0,0 +1,3 @@
1
+ # Theming Example
2
+
3
+ This is a show-case plugin demonstrating the different Theming options.
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "@vcmap-show-case/theming-example",
3
+ "version": "1.0.0",
4
+ "mapVersion": "^6.0.0"
5
+ }
@@ -0,0 +1,116 @@
1
+ <template>
2
+ <VCard>
3
+ <VcsFormSection heading="Colors" expandable start-open>
4
+ <v-container class="px-1 py-0">
5
+ <v-row
6
+ v-for="key in Object.keys(currentTheme.colors)"
7
+ :key="key"
8
+ no-gutters
9
+ >
10
+ <v-col>
11
+ <VcsLabel>{{ key }}</VcsLabel>
12
+ </v-col>
13
+ <v-col>
14
+ <VcsTextField
15
+ v-model="currentTheme.colors[key]"
16
+ :bg-color="currentTheme.colors[key]"
17
+ ></VcsTextField>
18
+ </v-col>
19
+ </v-row>
20
+ </v-container>
21
+ </VcsFormSection>
22
+ <VcsFormSection heading="Variables" expandable start-open>
23
+ <v-container class="px-1 py-0">
24
+ <v-row
25
+ no-gutters
26
+ v-for="key in Object.keys(currentTheme.variables)"
27
+ :key="key"
28
+ >
29
+ <v-col>
30
+ <VcsLabel>{{ key }}</VcsLabel>
31
+ </v-col>
32
+ <v-col>
33
+ <VcsTextField v-model="currentTheme.variables[key]"></VcsTextField>
34
+ </v-col>
35
+ </v-row>
36
+ </v-container>
37
+ </VcsFormSection>
38
+ <v-container class="px-1 py-0">
39
+ <VcsFormButton @click="reset"> Reset default </VcsFormButton>
40
+ </v-container>
41
+ </VCard>
42
+ </template>
43
+
44
+ <script>
45
+ import {
46
+ createVcsThemes,
47
+ VcsTextField,
48
+ VcsLabel,
49
+ VcsFormSection,
50
+ VcsFormButton,
51
+ isDark,
52
+ } from '@vcmap/ui';
53
+ import {
54
+ watch,
55
+ inject,
56
+ ref,
57
+ computed,
58
+ toRaw,
59
+ onMounted,
60
+ onUnmounted,
61
+ } from 'vue';
62
+ import { VCard, VCol, VRow, VContainer } from 'vuetify/components';
63
+
64
+ export default {
65
+ name: 'ThemingExample',
66
+ components: {
67
+ VcsLabel,
68
+ VcsFormSection,
69
+ VcsFormButton,
70
+ VcsTextField,
71
+ VContainer,
72
+ VCard,
73
+ VRow,
74
+ VCol,
75
+ },
76
+ setup() {
77
+ const app = inject('vcsApp');
78
+ const theming = ref(createVcsThemes());
79
+ const currentTheme = computed(() => {
80
+ if (isDark(app)) {
81
+ return theming.value.dark;
82
+ } else {
83
+ return theming.value.light;
84
+ }
85
+ });
86
+ onMounted(() => {
87
+ app.uiConfig.override({
88
+ name: 'vuetifyTheme',
89
+ value: toRaw(theming.value),
90
+ });
91
+ });
92
+ onUnmounted(() => {
93
+ app.uiConfig.remove(app.uiConfig.getByKey('vuetifyTheme'));
94
+ });
95
+ watch(
96
+ () => theming.value,
97
+ () => {
98
+ app.uiConfig.replace({
99
+ name: 'vuetifyTheme',
100
+ value: toRaw(theming.value),
101
+ });
102
+ },
103
+ { deep: true },
104
+ );
105
+ return {
106
+ reset: () => {
107
+ theming.value = createVcsThemes();
108
+ },
109
+ theming,
110
+ currentTheme,
111
+ };
112
+ },
113
+ };
114
+ </script>
115
+
116
+ <style scoped></style>
@@ -0,0 +1,53 @@
1
+ import { createToggleAction, ButtonLocation, WindowSlot } from '@vcmap/ui';
2
+ import packageJSON from '../package.json';
3
+ import ThemingExample from './ThemingExample.vue';
4
+
5
+ /**
6
+ * @returns {VcsPlugin}
7
+ */
8
+ export default async () => {
9
+ return {
10
+ get name() {
11
+ return packageJSON.name;
12
+ },
13
+ get version() {
14
+ return packageJSON.version;
15
+ },
16
+ get mapVersion() {
17
+ return packageJSON.mapVersion;
18
+ },
19
+ onVcsAppMounted(app) {
20
+ const { action, destroy } = createToggleAction(
21
+ {
22
+ name: 'Theming Example',
23
+ icon: '$vcsWand',
24
+ title: 'Theming Example Plugin',
25
+ },
26
+ {
27
+ id: 'theming-example',
28
+ component: ThemingExample,
29
+ slot: WindowSlot.DYNAMIC_LEFT,
30
+ state: {
31
+ headerTitle: 'Theming Example',
32
+ headerIcon: '$vcsWand',
33
+ styles: { width: '350px', height: 'auto' },
34
+ },
35
+ },
36
+ app.windowManager,
37
+ packageJSON.name,
38
+ );
39
+ app.navbarManager.add(
40
+ { id: 'theming-example', action },
41
+ packageJSON.name,
42
+ ButtonLocation.MENU,
43
+ );
44
+ this._destroyAction = destroy;
45
+ },
46
+ destroy() {
47
+ if (this._destroyAction) {
48
+ this._destroyAction();
49
+ this._destroyAction = null;
50
+ }
51
+ },
52
+ };
53
+ };
@@ -2,6 +2,10 @@
2
2
  "dependencies": {
3
3
  "@vcmap/print": "https://github.com/virtualcitySYSTEMS/map-print.git#main",
4
4
  "@vcmap/multi-view": "https://github.com/virtualcitySYSTEMS/map-multi-view.git",
5
- "@vcmap/transparent-terrain": "https://github.com/virtualcitySYSTEMS/map-transparent-terrain.git"
5
+ "@vcmap/transparent-terrain": "https://github.com/virtualcitySYSTEMS/map-transparent-terrain.git",
6
+ "@vcmap/walk": "https://github.com/virtualcitySYSTEMS/map-walk.git#main",
7
+ "@vcmap/clipping-tool": "https://github.com/virtualcitySYSTEMS/map-clipping-tool.git#main",
8
+ "@vcmap/viewshed": "https://github.com/virtualcitySYSTEMS/map-viewshed.git#main",
9
+ "@vcmap/link-button": "https://github.com/virtualcitySYSTEMS/map-link-button.git#main"
6
10
  }
7
11
  }
@@ -1,11 +1,8 @@
1
1
  /**
2
- * @typedef {Object} ActionOptions
3
- * @property {string} name
4
- * @property {string} [title]
5
- * @property {string} [icon]
2
+ * @typedef {Omit<VcsAction, 'callback'>} ActionOptions
6
3
  */
7
4
  /**
8
- * @typedef {function(PointerEvent): void | Promise<void>} ActionCallback
5
+ * @typedef {(p?: PointerEvent) => (void | Promise<void>)} ActionCallback
9
6
  */
10
7
  /**
11
8
  * @typedef {Object} VcsAction
@@ -110,12 +107,8 @@ export function getViewpointFromFeature(feature: import("ol").Feature): Viewpoin
110
107
  * @returns {VcsAction|null} returns null if the feature does not have a geometry with a valid extent
111
108
  */
112
109
  export function createZoomToFeatureAction(actionOptions: ActionOptions, feature: import("ol").Feature, mapCollection: import("@vcmap/core").MapCollection): VcsAction | null;
113
- export type ActionOptions = {
114
- name: string;
115
- title?: string | undefined;
116
- icon?: string | undefined;
117
- };
118
- export type ActionCallback = (arg0: PointerEvent) => void | Promise<void>;
110
+ export type ActionOptions = Omit<VcsAction, 'callback'>;
111
+ export type ActionCallback = (p?: PointerEvent) => (void | Promise<void>);
119
112
  export type VcsAction = {
120
113
  /**
121
114
  * - reactive and translatable name rendered in overflow
@@ -19,14 +19,11 @@ import {
19
19
  import SearchComponent from '../search/SearchComponent.vue';
20
20
 
21
21
  /**
22
- * @typedef {Object} ActionOptions
23
- * @property {string} name
24
- * @property {string} [title]
25
- * @property {string} [icon]
22
+ * @typedef {Omit<VcsAction, 'callback'>} ActionOptions
26
23
  */
27
24
 
28
25
  /**
29
- * @typedef {function(PointerEvent): void | Promise<void>} ActionCallback
26
+ * @typedef {(p?: PointerEvent) => (void | Promise<void>)} ActionCallback
30
27
  */
31
28
 
32
29
  /**
@@ -6,14 +6,14 @@
6
6
  * @template {Object} T
7
7
  * @returns {import("./actionHelper.js").VcsAction}
8
8
  */
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;
9
+ export function createListItemDeleteAction<T extends Object>(collection: import("@vcmap/core").Collection<T>, item: T, actionOptions?: Partial<Omit<import("./actionHelper.js").VcsAction, "callback">> | undefined): import("./actionHelper.js").VcsAction;
10
10
  /**
11
11
  * Creates an action based on a provided selection
12
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/VcsListItemComponent.vue").VcsListItem>>, actionOptions?: (import("./actionHelper.js").ActionOptions & {
16
+ export function createListItemBulkAction(selection: import("vue").Ref<Array<import("../components/lists/VcsListItemComponent.vue").VcsListItem>>, actionOptions?: (Omit<import("./actionHelper.js").VcsAction, "callback"> & {
17
17
  callback: import("./actionHelper.js").ActionCallback;
18
18
  }) | undefined): {
19
19
  action: import("vue").UnwrapRef<import("./actionHelper.js").VcsAction>;