@vcmap/ui 5.0.0-rc.15 → 5.0.0-rc.16

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 (75) hide show
  1. package/config/base.config.json +4 -0
  2. package/config/dev.config.json +5 -1
  3. package/config/www.config.json +5 -3
  4. package/dist/assets/{cesium.2e288a.js → cesium.430460.js} +0 -0
  5. package/dist/assets/cesium.js +1 -1
  6. package/dist/assets/{core.8014d3.js → core.5089ba.js} +5925 -4374
  7. package/dist/assets/core.js +1 -1
  8. package/dist/assets/{index.3f74fa92.js → index.854f8e2b.js} +1 -1
  9. package/dist/assets/{ol.31c3a5.js → ol.9be53a.js} +0 -0
  10. package/dist/assets/ol.js +1 -1
  11. package/dist/assets/ui.49010a.css +1 -0
  12. package/dist/assets/{ui.36f84f.js → ui.49010a.js} +3907 -3232
  13. package/dist/assets/ui.js +1 -1
  14. package/dist/assets/{vue.a39c10.js → vue.247c1c.js} +0 -0
  15. package/dist/assets/vue.js +2 -2
  16. package/dist/assets/{vuetify.378637.css → vuetify.735e58.css} +1 -1
  17. package/dist/assets/{vuetify.378637.js → vuetify.735e58.js} +1 -1
  18. package/dist/assets/vuetify.js +2 -2
  19. package/dist/index.html +1 -1
  20. package/index.html +77 -0
  21. package/index.js +4 -0
  22. package/package.json +4 -2
  23. package/plugins/@vcmap/create-link/fallbackCreateLink.vue +4 -1
  24. package/plugins/@vcmap/create-link/index.js +4 -1
  25. package/plugins/@vcmap/pluginExample/exampleActions.js +45 -0
  26. package/plugins/@vcmap/pluginExample/index.js +24 -1
  27. package/plugins/@vcmap/pluginExample/pluginExampleComponent.vue +70 -42
  28. package/plugins/@vcmap/search-nominatim/nominatim.js +1 -1
  29. package/plugins/@vcmap/theme-changer/ThemeChangerComponent.vue +4 -2
  30. package/plugins/notifier/index.js +31 -0
  31. package/plugins/notifier/notifierTester.vue +88 -0
  32. package/plugins/package.json +1 -1
  33. package/plugins/test/allIconsComponent.vue +2 -2
  34. package/plugins/test/emptyComponent.vue +1 -1
  35. package/plugins/test/index.js +22 -0
  36. package/plugins/test/myCustomHeader.vue +9 -1
  37. package/plugins/test/testList.vue +287 -0
  38. package/plugins/test/windowManagerExample.vue +3 -0
  39. package/plugins/wizardExample/index.js +41 -0
  40. package/plugins/wizardExample/wizardExample.vue +77 -0
  41. package/src/application/VcsApp.vue +18 -8
  42. package/src/components/form-inputs-controls/VcsFormSection.vue +10 -10
  43. package/src/components/form-inputs-controls/VcsSelect.vue +33 -1
  44. package/src/components/form-inputs-controls/VcsTextField.vue +11 -3
  45. package/src/components/form-inputs-controls/VcsWizard.vue +133 -0
  46. package/src/components/imageElementInjector.vue +22 -0
  47. package/src/components/lists/VcsList.vue +466 -0
  48. package/src/components/lists/VcsTreeview.vue +1 -2
  49. package/src/components/lists/VcsTreeviewLeaf.vue +18 -50
  50. package/src/components/lists/VcsTreeviewSearchbar.vue +1 -23
  51. package/src/components/tables/VcsTable.vue +13 -1
  52. package/src/contentTree/LayerTree.vue +1 -1
  53. package/src/contentTree/contentTreeItem.js +13 -13
  54. package/src/contentTree/subContentTreeItem.js +1 -1
  55. package/src/contentTree/vcsObjectContentTreeItem.js +1 -1
  56. package/src/featureInfo/BalloonComponent.vue +10 -8
  57. package/src/featureInfo/balloonFeatureInfoView.js +14 -14
  58. package/src/featureInfo/balloonHelper.js +4 -0
  59. package/src/featureInfo/featureInfo.js +13 -0
  60. package/src/featureInfo/featureInfoInteraction.js +1 -1
  61. package/src/i18n/de.js +7 -0
  62. package/src/i18n/en.js +7 -0
  63. package/src/icons/+all.js +4 -0
  64. package/src/icons/WandIcon.vue +63 -0
  65. package/src/manager/window/WindowComponent.vue +9 -2
  66. package/src/manager/window/WindowComponentHeader.vue +33 -7
  67. package/src/manager/window/WindowManager.vue +1 -0
  68. package/src/manager/window/windowManager.js +11 -1
  69. package/src/navigation/overviewMap.js +10 -9
  70. package/src/notifier/notifier.js +121 -0
  71. package/src/notifier/notifierComponent.vue +84 -0
  72. package/src/styles/variables.scss +19 -3
  73. package/src/vcsUiApp.js +19 -1
  74. package/src/vuePlugins/vuetify.js +2 -0
  75. package/dist/assets/ui.36f84f.css +0 -1
@@ -17,11 +17,21 @@
17
17
  :outlined="isOutlined"
18
18
  :dense="isDense"
19
19
  :height="isDense ? 24 : 32"
20
+ :item-text="item => $t(getText(item))"
20
21
  :class="$attrs.color === 'primary' ? 'primary--select' : ''"
21
22
  v-bind="{...$attrs, ...attrs}"
22
23
  v-on="{...$listeners, ...on}"
23
24
  @update:error="setError"
24
- />
25
+ >
26
+ <template #selection="{ item, index }">
27
+ <span v-if="index === 0" class="text-truncate">
28
+ {{ $t(getText(item)) }}
29
+ </span>
30
+ <span v-if="index === 1" class="text-no-wrap grey--text text-caption">
31
+ (+{{ $attrs.value.length - 1 }})
32
+ </span>
33
+ </template>
34
+ </v-select>
25
35
  </span>
26
36
  </template>
27
37
  </VcsTooltip>
@@ -46,6 +56,15 @@
46
56
  }
47
57
  }
48
58
  }
59
+ .v-select{
60
+ &.v-select--is-multi{
61
+ ::v-deep {
62
+ .v-select__selections{
63
+ flex-wrap: nowrap;
64
+ }
65
+ }
66
+ }
67
+ }
49
68
  </style>
50
69
  <script>
51
70
 
@@ -55,11 +74,13 @@
55
74
 
56
75
  /**
57
76
  * @description Stylized wrapper around {@link https://vuetifyjs.com/en/api/v-select/ |vuetify select}.
77
+ * Translates the items text if it is an i18n string.
58
78
  * Provides two height options depending on "dense" property:
59
79
  * - if dense is set true (default), height is 24 px
60
80
  * - if dense is set false, height is 32 px
61
81
  * Provides VcsTooltip to show error messages
62
82
  * @vue-prop {('bottom' | 'left' | 'top' | 'right')} [tooltipPosition='right'] - Position of the error tooltip.
83
+ * @vue-prop {Function} itemText - A function that is applied to each item and should return the item's text value.
63
84
  * @vue-computed {boolean} isDense - Whether size of select is dense.
64
85
  * @vue-computed {boolean} isOutlined - Select is outlined on either hover, focus or error, if not disabled.
65
86
  */
@@ -74,6 +95,10 @@
74
95
  type: String,
75
96
  default: 'right',
76
97
  },
98
+ itemText: {
99
+ type: Function,
100
+ default: undefined,
101
+ },
77
102
  },
78
103
  data() {
79
104
  return {
@@ -95,6 +120,13 @@
95
120
  const rules = [...this.$attrs.rules].concat(this.$attrs.errorMessages);
96
121
  this.errorMessage = validate(rules, this.$attrs.value).join('\n');
97
122
  },
123
+ getText(item) {
124
+ if (this.itemText) {
125
+ return this.itemText(item);
126
+ } else {
127
+ return item?.text ?? item;
128
+ }
129
+ },
98
130
  },
99
131
  };
100
132
  </script>
@@ -11,7 +11,8 @@
11
11
  :max-width="200"
12
12
  >
13
13
  <template #activator="{ attrs }">
14
- <v-text-field
14
+ <component
15
+ :is="inputComponent"
15
16
  ref="textFieldRef"
16
17
  hide-details
17
18
  :dense="isDense"
@@ -23,7 +24,7 @@
23
24
  v-bind="{...$attrs, ...attrs}"
24
25
  v-on="{...$listeners}"
25
26
  :height="isDense ? 24 : 32"
26
- class="ma-0 pb-1 pt-1 primary--placeholder"
27
+ class="ma-0 pb-1 pt-1 primary--placeholder align-center"
27
28
  :class="$attrs.color === 'primary' ? 'primary--textfield' : ''"
28
29
  />
29
30
  </template>
@@ -51,7 +52,7 @@
51
52
  </style>
52
53
 
53
54
  <script>
54
- import { VTextField } from 'vuetify/lib';
55
+ import { VTextField, VFileInput } from 'vuetify/lib';
55
56
  import VcsTooltip from '../notification/VcsTooltip.vue';
56
57
 
57
58
  /**
@@ -74,6 +75,7 @@
74
75
  components: {
75
76
  VcsTooltip,
76
77
  VTextField,
78
+ VFileInput,
77
79
  },
78
80
  props: {
79
81
  tooltipPosition: {
@@ -92,6 +94,12 @@
92
94
  };
93
95
  },
94
96
  computed: {
97
+ inputComponent() {
98
+ if (this.$attrs.type === 'file') {
99
+ return 'VFileInput';
100
+ }
101
+ return 'VTextField';
102
+ },
95
103
  isClearable() {
96
104
  return (this.$attrs.clearable !== undefined && this.$attrs.clearable !== false) &&
97
105
  (this.hover || this.focus || this.isError);
@@ -0,0 +1,133 @@
1
+ <template>
2
+ <v-stepper
3
+ vertical
4
+ :value="value"
5
+ @change="(value) => emitValue(value)"
6
+ >
7
+ <slot />
8
+ </v-stepper>
9
+ </template>
10
+
11
+ <script>
12
+ import { VStepper } from 'vuetify/lib';
13
+
14
+ /**
15
+ * @description Stylized wrapper around {@link https://vuetifyjs.com/en/api/v-stepper/ |vuetify stepper}
16
+ * Is always vertical.
17
+ * Only passes the step property, all other props are ignored.
18
+ * @vue-prop {number} step - The current step of the stepper.
19
+ */
20
+ export default {
21
+ name: 'VcsWizard',
22
+ components: {
23
+ VStepper,
24
+ },
25
+ props: {
26
+ value: {
27
+ type: Number,
28
+ default: undefined,
29
+ },
30
+ },
31
+ setup(props, { emit }) {
32
+ function emitValue(newValue) {
33
+ emit('input', typeof newValue !== 'number' ? Number(newValue) : newValue);
34
+ }
35
+
36
+ return {
37
+ emitValue,
38
+ };
39
+ },
40
+ };
41
+ </script>
42
+ <style scoped lang="scss">
43
+ .v-stepper{
44
+ &.theme--light {
45
+ ::v-deep{
46
+ .v-stepper__step {
47
+ &--active {
48
+ background-color: rgba(34, 34, 34, 0.1);
49
+ .v-stepper__label {
50
+ color: rgba(34, 34, 34, 0.8);
51
+ }
52
+ }
53
+ &--complete {
54
+ .v-stepper__label {
55
+ color: rgba(0, 0, 0, 0.38);
56
+ }
57
+ }
58
+ }
59
+ .v-stepper__content {
60
+ &:not(:last-child) {
61
+ border-left: 2px solid rgba(0, 0, 0, 0.12) !important;
62
+ }
63
+ }
64
+ }
65
+ }
66
+ &.theme--dark {
67
+ ::v-deep{
68
+ .v-stepper__step {
69
+ &--active {
70
+ background-color: rgba(255, 255, 255, 0.5);
71
+ .v-stepper__label {
72
+ color: rgba(255, 255, 255, 1);
73
+ }
74
+ }
75
+ &--complete {
76
+ .v-stepper__label {
77
+ color: rgba(255, 255, 255, 0.5);
78
+ }
79
+ }
80
+ .v-stepper__step__step {
81
+ .v-icon {
82
+ color: transparent;
83
+ }
84
+ }
85
+ &.v-stepper__step--error{
86
+ .v-stepper__label{
87
+ color: var(--v-error-darken2);
88
+ }
89
+ .v-stepper__step__step{
90
+ background-color: var(--v-error-darken1);
91
+ }
92
+ }
93
+ }
94
+ .v-stepper__content {
95
+ &:not(:last-child) {
96
+ border-left: 2px solid rgba(255, 255, 255, 0.8) !important;
97
+ }
98
+ }
99
+ }
100
+ }
101
+ ::v-deep{
102
+ .v-stepper__step {
103
+ height: 40px;
104
+ .v-stepper__label {
105
+ font-weight: 700;
106
+ text-shadow: none !important;
107
+ }
108
+ .v-stepper__step__step {
109
+ color: transparent;
110
+ position: relative;
111
+ &:before{
112
+ content: '\25cf';
113
+ color: var(--v-basic-base);
114
+ font-size: 18px;
115
+ position: absolute;
116
+ top: -9px;
117
+ }
118
+ }
119
+ &.v-stepper__step--error {
120
+ .v-stepper__step__step{
121
+ background-color: var(--v-error-base);
122
+ }
123
+ .v-stepper__label{
124
+ color: var(--v-error-base);
125
+ }
126
+ }
127
+ }
128
+ .v-stepper__content.v-stepper__wrapper {
129
+ margin: 4px 0;
130
+ }
131
+ }
132
+ }
133
+ </style>
@@ -0,0 +1,22 @@
1
+ <template>
2
+ <div />
3
+ </template>
4
+
5
+ <script>
6
+ export default {
7
+ name: 'ImageElementInjector',
8
+ props: {
9
+ element: {
10
+ type: [HTMLCanvasElement, HTMLImageElement],
11
+ required: true,
12
+ },
13
+ },
14
+ mounted() {
15
+ this.$el.replaceWith(this.element);
16
+ },
17
+ };
18
+ </script>
19
+
20
+ <style scoped>
21
+
22
+ </style>