@vcmap/ui 5.0.0-rc.21 → 5.0.0-rc.22

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 (101) hide show
  1. package/build/buildHelpers.js +1 -0
  2. package/build/commonViteConfig.js +1 -0
  3. package/config/www.config.json +25 -14
  4. package/dist/assets/cesium.js +1 -1
  5. package/dist/assets/{core.59d4d1.js → core.a66593.js} +2443 -2457
  6. package/dist/assets/core.js +1 -1
  7. package/dist/assets/favicon.decf54cc.svg +10 -0
  8. package/dist/assets/{index.a3861d4e.js → index.8b833ead.js} +1 -1
  9. package/dist/assets/{ol.c1c512.js → ol.d4539f.js} +12406 -12152
  10. package/dist/assets/ol.js +1 -1
  11. package/dist/assets/ui.d760e4.css +5 -0
  12. package/dist/assets/{ui.80175f.js → ui.d760e4.js} +5218 -4240
  13. package/dist/assets/ui.js +1 -1
  14. package/dist/assets/vue.js +2 -2
  15. package/dist/assets/vuetify.427322.css +5 -0
  16. package/dist/assets/{vuetify.efc158.js → vuetify.427322.js} +1 -1
  17. package/dist/assets/vuetify.js +2 -2
  18. package/dist/index.html +6 -1
  19. package/index.html +5 -0
  20. package/index.js +2 -1
  21. package/lib/olLib.js +15 -1
  22. package/package.json +4 -3
  23. package/plugins/@vcmap/project-selector/ProjectSelectorComponent.vue +1 -1
  24. package/plugins/@vcmap/theme-changer/ThemeChangerComponent.vue +10 -4
  25. package/plugins/@vcmap-show-case/form-inputs-example/FormInputsExample.vue +75 -81
  26. package/plugins/@vcmap-show-case/form-inputs-example/index.js +7 -3
  27. package/plugins/@vcmap-show-case/form-inputs-example/validation.js +1 -1
  28. package/plugins/@vcmap-show-case/list-example/ListExample.vue +5 -2
  29. package/plugins/@vcmap-show-case/wizard-example/wizardExample.vue +57 -23
  30. package/plugins/package.json +2 -1
  31. package/src/application/VcsApp.vue +13 -5
  32. package/src/application/VcsAttributions.vue +2 -3
  33. package/src/application/VcsAttributionsFooter.vue +10 -16
  34. package/src/application/VcsNavbar.vue +1 -2
  35. package/src/application/VcsSettings.vue +21 -8
  36. package/src/assets/favicon-128.png +0 -0
  37. package/src/assets/favicon-180.png +0 -0
  38. package/src/assets/favicon-192.png +0 -0
  39. package/src/assets/favicon-32.png +0 -0
  40. package/src/assets/favicon.svg +10 -0
  41. package/src/components/buttons/VcsButton.vue +2 -3
  42. package/src/components/form-inputs-controls/VcsCheckbox.vue +46 -26
  43. package/src/components/form-inputs-controls/VcsFormSection.vue +15 -13
  44. package/src/components/form-inputs-controls/VcsLabel.vue +10 -1
  45. package/src/components/form-inputs-controls/VcsRadio.vue +38 -18
  46. package/src/components/form-inputs-controls/VcsSelect.vue +117 -59
  47. package/src/components/form-inputs-controls/VcsTextArea.vue +101 -60
  48. package/src/components/form-inputs-controls/VcsTextField.vue +171 -69
  49. package/src/components/form-inputs-controls/VcsWizard.vue +20 -14
  50. package/src/components/form-inputs-controls/VcsWizardStep.vue +18 -16
  51. package/src/components/form-inputs-controls/composables.js +26 -0
  52. package/src/components/form-output/VcsFormattedNumber.vue +1 -1
  53. package/src/components/icons/2DDistanceIcon.vue +0 -3
  54. package/src/components/icons/3DDistanceIcon.vue +0 -3
  55. package/src/components/icons/3DHeightIcon.vue +0 -3
  56. package/src/components/icons/CheckboxCheckedIcon.vue +4 -11
  57. package/src/components/icons/CheckboxIcon.vue +9 -2
  58. package/src/components/icons/CheckboxIndeterminateIcon.vue +4 -21
  59. package/src/components/icons/CommentIcon.vue +1 -5
  60. package/src/components/icons/ObliqueViewIcon.vue +6 -8
  61. package/src/components/icons/SimpleCircleOutlinedIcon.vue +1 -1
  62. package/src/components/icons/SplitViewIcon.vue +0 -4
  63. package/src/components/icons/ToolsIcon.vue +2 -4
  64. package/src/components/lists/VcsActionList.vue +0 -1
  65. package/src/components/lists/VcsList.vue +6 -25
  66. package/src/components/lists/VcsTreeview.vue +2 -2
  67. package/src/components/lists/VcsTreeviewLeaf.vue +3 -9
  68. package/src/components/lists/VcsTreeviewSearchbar.vue +4 -4
  69. package/src/components/notification/VcsBadge.vue +6 -2
  70. package/src/components/notification/VcsHelp.vue +39 -0
  71. package/src/components/tables/VcsTable.vue +70 -24
  72. package/src/featureInfo/AddressBalloonComponent.vue +1 -1
  73. package/src/featureInfo/BalloonComponent.vue +14 -9
  74. package/src/featureInfo/featureInfo.js +25 -7
  75. package/src/featureInfo/tableFeatureInfoView.js +4 -0
  76. package/src/i18n/de.js +5 -1
  77. package/src/i18n/en.js +5 -1
  78. package/src/legend/styleLegendItem.vue +24 -2
  79. package/src/legend/vcsLegend.vue +24 -31
  80. package/src/manager/toolbox/GroupToolboxComponent.vue +2 -3
  81. package/src/manager/toolbox/SelectToolboxComponent.vue +11 -5
  82. package/src/manager/toolbox/ToolboxManager.vue +0 -7
  83. package/src/manager/window/WindowComponent.vue +0 -1
  84. package/src/manager/window/WindowComponentHeader.vue +2 -2
  85. package/src/navigation/overviewMap.js +6 -15
  86. package/src/navigation/tiltSlider.vue +30 -6
  87. package/src/search/resultsComponent.vue +0 -1
  88. package/src/search/search.js +7 -17
  89. package/src/search/searchComponent.vue +6 -7
  90. package/src/styles/_theming.scss +72 -3
  91. package/src/styles/_typography.scss +0 -5
  92. package/src/styles/main.scss +1 -0
  93. package/src/styles/shades.scss +2 -0
  94. package/src/styles/variables.scss +40 -4
  95. package/src/uiConfig.js +1 -0
  96. package/src/vcsUiApp.js +5 -0
  97. package/src/vuePlugins/vuetify.js +59 -13
  98. package/dist/assets/ui.80175f.css +0 -1
  99. package/dist/assets/vuetify.efc158.css +0 -5
  100. /package/dist/assets/{cesium.49585c.js → cesium.88cffd.js} +0 -0
  101. /package/dist/assets/{vue.a08ab1.js → vue.db5102.js} +0 -0
@@ -6,26 +6,37 @@
6
6
  <VcsTooltip
7
7
  :tooltip-position="tooltipPosition"
8
8
  :tooltip="errorMessage"
9
- :value="(hover || focus) && isError"
10
9
  color="error"
11
10
  :max-width="200"
12
11
  >
13
- <template #activator="{ attrs }">
12
+ <template #activator="{ attrs, on }">
14
13
  <component
15
14
  :is="inputComponent"
16
15
  ref="textFieldRef"
17
16
  hide-details
17
+ :hide-spin-buttons="!showSpinButtons"
18
18
  :dense="isDense"
19
19
  :clearable="isClearable"
20
- @focus="focus = true"
21
- @blur="focus = neverBlurred = false"
22
- @input="firstInput = true"
23
- :outlined="isOutlined"
20
+ @focus="focus = true;"
21
+ @blur="focus = false;"
22
+ @input="value => $emit('input', value)"
23
+ @keydown.esc="handleEsc"
24
+ @keydown="event => $emit('keydown', event)"
25
+ :value="visibleValue"
26
+ :type="type"
27
+ outlined
24
28
  v-bind="{...$attrs, ...attrs}"
25
- v-on="{...$listeners}"
29
+ v-on="{...$listeners, ...on}"
26
30
  :height="isDense ? 24 : 32"
27
- class="ma-0 pb-1 pt-1 primary--placeholder align-center"
28
- :class="$attrs.color === 'primary' ? 'primary--textfield' : ''"
31
+ class="py-1 primary--placeholder align-center"
32
+ :class="{
33
+ 'remove-outline': !isOutlined,
34
+ 'outline--current': focus,
35
+ 'outline--error': !!errorMessage,
36
+ 'input--dense': isDense,
37
+ 'input--not-dense': !isDense,
38
+ 'file-border-bottom': inputComponent === 'VFileInput' && !focus && !hover && !errorMessage,
39
+ }"
29
40
  />
30
41
  </template>
31
42
  </VcsTooltip>
@@ -33,27 +44,101 @@
33
44
  </template>
34
45
 
35
46
  <style lang="scss" scoped>
36
- .primary--placeholder {
37
- ::v-deep {
38
- input::placeholder {
39
- color: var(--v-primary-base);
40
- font-style: italic;
41
- opacity: 1;
47
+ .primary--placeholder {
48
+ ::v-deep {
49
+ input::placeholder {
50
+ color: var(--v-primary-base);
51
+ font-style: italic;
52
+ opacity: 1;
53
+ }
42
54
  }
43
55
  }
44
- }
45
- .primary--textfield {
46
- ::v-deep {
47
- input {
48
- color: var(--v-primary-base);
56
+ .remove-outline {
57
+ ::v-deep {
58
+ fieldset {
59
+ border-width: 0;
60
+ border-radius: 0;
61
+ }
62
+ }
63
+ }
64
+ .outline--current {
65
+ ::v-deep {
66
+ .v-input__slot fieldset {
67
+ border-color: currentColor;
68
+ transition: border-color 0.5s ease;
69
+ }
70
+ .v-text-field__slot input {
71
+ border-color: transparent;
72
+ }
73
+ }
74
+ }
75
+ .outline--error {
76
+ ::v-deep {
77
+ .v-input__slot fieldset, .v-text-field__slot input {
78
+ border-color: var(--v-error-base);
79
+ }
80
+ }
81
+ }
82
+ .input--dense {
83
+ ::v-deep {
84
+ .v-text-field__slot input {
85
+ height: 24px;
86
+ }
87
+ .v-input__slot {
88
+ padding: 0 4px !important;
89
+ }
90
+ fieldset {
91
+ padding-left: 2px;
92
+ }
93
+ }
94
+ }
95
+ .input--not-dense {
96
+ ::v-deep {
97
+ .v-input__slot {
98
+ padding: 0 8px !important;
99
+ }
100
+ fieldset {
101
+ padding-left: 6px;
102
+ }
103
+ }
104
+ }
105
+ .file-border-bottom {
106
+ ::v-deep {
107
+ .v-file-input__text {
108
+ border-bottom: 1px solid var(--v-base-base);
109
+ border-radius: 0;
110
+ }
111
+ }
112
+ }
113
+ .v-input {
114
+ ::v-deep {
115
+ input {
116
+ height: 32px;
117
+ border-bottom: 1px solid var(--v-base-base);
118
+ border-radius: 0;
119
+ }
120
+ input::selection {
121
+ background-color: var(--v-primary-base);
122
+ }
123
+ .v-text-field__prefix {
124
+ padding-right: 8px;
125
+ }
126
+ .v-text-field__suffix {
127
+ padding-left: 4px;
128
+ }
129
+ fieldset {
130
+ border-radius: 2px;
131
+ border-color: var(--v-base-base);
132
+ }
49
133
  }
50
134
  }
51
- }
52
135
  </style>
53
136
 
54
137
  <script>
138
+ import { computed, onMounted, ref } from 'vue';
55
139
  import { VTextField, VFileInput } from 'vuetify/lib';
56
140
  import VcsTooltip from '../notification/VcsTooltip.vue';
141
+ import { useErrorSync } from './composables.js';
57
142
 
58
143
  /**
59
144
  * @description extends API of {@link https://vuetifyjs.com/en/api/v-text-field v-text-field}.
@@ -63,12 +148,15 @@
63
148
  * Provides VcsTooltip to
64
149
  * - show error messages on focus
65
150
  * - show tooltips, if supplied, when hovered over append-icon
151
+ * When clicking esc key, previous input is restored.
66
152
  * @vue-prop {('bottom' | 'left' | 'top' | 'right')} [tooltipPosition='right'] - Position of the error tooltip.
153
+ * @vue-prop {string} unit - Unit for number input fields. Is displayed behind the number.
154
+ * @vue-prop {boolean} showSpinButtons - If true, spin buttons are displayed in number input fields. Overrides Vuetify hide-spin-buttons.
67
155
  * @vue-computed {boolean} isClearable - Whether textfield is isClearable. Makes sure icon is only shown on focus, hover or error.
68
156
  * @vue-computed {boolean} isDense - Whether size of textfield is dense.
69
- * @vue-computed {boolean} isError - Whether errorBucket is not empty and textfield was focused at least once.
70
157
  * @vue-computed {boolean} isOutlined - Textfield is outlined on either hover, focus or error, if not disabled.
71
- * @vue-computed {Array<string>} joinedErrorBucket - errorBucket + errorMessages of child v-text-field.
158
+ * @vue-computed {string | number} visibleValue - Returns the number input as string with unit, in case unit is provided.
159
+ * @vue-computed {string} type - The input field type. If number input field is blurred and unit is provided, type changes to text field, so unit can be displayed in input field.
72
160
  */
73
161
  export default {
74
162
  name: 'VcsTextField',
@@ -82,60 +170,74 @@
82
170
  type: String,
83
171
  default: 'right',
84
172
  },
173
+ unit: {
174
+ type: String,
175
+ default: '',
176
+ },
177
+ showSpinButtons: {
178
+ type: Boolean,
179
+ default: false,
180
+ },
85
181
  },
86
- data() {
87
- return {
88
- hover: false,
89
- focus: false,
90
- firstInput: false,
91
- neverBlurred: true,
92
- isMounted: false,
93
- errorMessage: '',
94
- };
95
- },
96
- computed: {
97
- inputComponent() {
98
- if (this.$attrs.type === 'file') {
182
+ setup(props, { attrs, emit }) {
183
+ const hover = ref(false);
184
+ const focus = ref(false);
185
+ const textFieldRef = ref();
186
+
187
+ onMounted(() => {
188
+ // fix for autofocus
189
+ focus.value = attrs.autofocus != null;
190
+ });
191
+
192
+ const errorMessage = useErrorSync(textFieldRef);
193
+
194
+ const inputComponent = computed(() => {
195
+ if (attrs.type === 'file') {
99
196
  return 'VFileInput';
100
197
  }
101
198
  return 'VTextField';
102
- },
103
- isClearable() {
104
- return (this.$attrs.clearable !== undefined && this.$attrs.clearable !== false) &&
105
- (this.hover || this.focus || this.isError);
106
- },
107
- isDense() {
108
- return this.$attrs.dense !== undefined && this.$attrs.dense !== false;
109
- },
110
- isError() {
111
- return this.joinedErrorBucket.length > 0 && (this.firstInput || !this.neverBlurred);
112
- },
113
- isOutlined() {
114
- return (this.$attrs.outlined || this.hover || this.focus || this.isError) && !(this.$attrs.disabled || this.$attrs.disabled === '');
115
- },
116
- joinedErrorBucket() {
117
- if (!this.isMounted) {
118
- return false;
199
+ });
200
+ const isClearable = computed(() => {
201
+ return (attrs.clearable !== undefined && attrs.clearable !== false) &&
202
+ (hover.value || focus.value || !!errorMessage.value);
203
+ });
204
+ const isDense = computed(() => attrs.dense !== false);
205
+ const isOutlined = computed(() => {
206
+ return (hover.value || focus.value || !!errorMessage.value) && !(attrs.disabled || attrs.disabled === '');
207
+ });
208
+ const visibleValue = computed(() => {
209
+ if (attrs.type === 'number' && attrs.value && props.unit && !focus.value && !hover.value) {
210
+ return `${attrs.value} ${props.unit}`;
119
211
  } else {
120
- return this.$refs.textFieldRef.errorBucket.concat(this.$refs.textFieldRef.errorMessages).join('\n');
212
+ return attrs.value || '';
121
213
  }
122
- },
123
- },
124
- watch: {
125
- joinedErrorBucket(newValue, oldValue) {
126
- if (oldValue && !newValue) {
127
- setTimeout(() => {
128
- this.errorMessage = newValue;
129
- }, 200);
214
+ });
215
+ const type = computed(() => {
216
+ if (attrs.type === 'number' && !focus.value) {
217
+ return 'text';
130
218
  } else {
131
- this.errorMessage = newValue;
219
+ return attrs.type || 'text';
132
220
  }
133
- },
134
- },
135
- mounted() {
136
- this.isMounted = true;
137
- // fix for autofocus
138
- this.focus = this.$attrs.autofocus != null;
221
+ });
222
+
223
+ function handleEsc() {
224
+ textFieldRef.value.blur();
225
+ emit('input', textFieldRef.value.initialValue);
226
+ }
227
+
228
+ return {
229
+ hover,
230
+ focus,
231
+ inputComponent,
232
+ isClearable,
233
+ isDense,
234
+ isOutlined,
235
+ visibleValue,
236
+ type,
237
+ handleEsc,
238
+ textFieldRef,
239
+ errorMessage,
240
+ };
139
241
  },
140
242
  };
141
243
  </script>
@@ -32,21 +32,28 @@
32
32
  };
33
33
  </script>
34
34
  <style scoped lang="scss">
35
+ @import '../../styles/shades.scss';
35
36
  .v-stepper{
36
37
  &.theme--light {
37
38
  ::v-deep{
38
39
  .v-stepper__step {
40
+ .v-stepper__label {
41
+ color: map-get($shades, 'black');
42
+ }
39
43
  &--active {
40
44
  background-color: rgba(34, 34, 34, 0.1);
41
45
  .v-stepper__label {
42
- color: rgba(34, 34, 34, 0.8);
46
+ color: var(--v-primary-base);
43
47
  }
44
48
  }
45
49
  &--complete {
46
50
  .v-stepper__label {
47
- color: rgba(0, 0, 0, 0.38);
51
+ color: map-get($shades, 'black');
48
52
  }
49
53
  }
54
+ .v-stepper__step__step::before {
55
+ color: map-get($shades, 'white');
56
+ }
50
57
  }
51
58
  .step-border:not(:last-child) > .v-stepper__content {
52
59
  border-left: 2px solid rgba(0, 0, 0, 0.12);
@@ -56,21 +63,27 @@
56
63
  &.theme--dark {
57
64
  ::v-deep{
58
65
  .v-stepper__step {
66
+ .v-stepper__label {
67
+ color: map-get($shades, 'white');
68
+ }
59
69
  &--active {
60
70
  background-color: rgba(255, 255, 255, 0.5);
61
71
  .v-stepper__label {
62
- color: rgba(255, 255, 255, 1);
72
+ color: var(--v-primary-base);
63
73
  }
64
74
  }
65
75
  &--complete {
66
76
  .v-stepper__label {
67
- color: rgba(255, 255, 255, 0.5);
77
+ color: map-get($shades, 'white');
68
78
  }
69
79
  }
70
80
  .v-stepper__step__step {
71
81
  .v-icon {
72
82
  color: transparent;
73
83
  }
84
+ &:before{
85
+ color: map-get($shades, 'black');
86
+ }
74
87
  }
75
88
  &.v-stepper__step--error{
76
89
  .v-stepper__label{
@@ -88,26 +101,19 @@
88
101
  }
89
102
  ::v-deep{
90
103
  .v-stepper__step {
91
- align-items: start;
104
+ padding-top: 0;
105
+ padding-bottom: 0;
92
106
  .v-stepper__label {
93
107
  font-weight: 700;
94
108
  text-shadow: none !important;
95
- position: relative;
96
- &::before{
97
- content: '';
98
- position: absolute;
99
- top: 14px;
100
- bottom: 2px;
101
- left: -15px;
102
- }
103
109
  }
104
110
  .v-stepper__step__step {
105
111
  color: transparent;
106
112
  position: relative;
107
113
  margin-top: 2px;
114
+ margin-right: 5px;
108
115
  &:before{
109
116
  content: '\25cf';
110
- color: var(--v-basic-base);
111
117
  font-size: 18px;
112
118
  position: absolute;
113
119
  top: -9px;
@@ -5,12 +5,15 @@
5
5
  :editable="editable"
6
6
  :complete="complete"
7
7
  :rules="rules"
8
+ class="pr-6"
8
9
  >
9
- <div class="form-section-header d-flex justify-space-between align-center">
10
+ <div class="d-flex justify-space-between align-center">
10
11
  <slot name="header" />
11
- <span v-if="!$slots.header">{{ $t(heading) }}</span>
12
+ <div v-if="!$slots.header" class="py-3">
13
+ <span>{{ $t(heading) }}</span>
14
+ </div>
12
15
  <VcsActionButtonList
13
- v-if="editable || Number(step) === Number(value)"
16
+ v-if="Number(step) === Number(value)"
14
17
  :actions="actions"
15
18
  :overflow-count="actionButtonListOverflowCount"
16
19
  small
@@ -22,20 +25,15 @@
22
25
  </v-stepper-step>
23
26
  <v-stepper-content
24
27
  v-if="$slots.content"
25
- class="pr-5"
28
+ class="pr-4"
26
29
  :step="step"
27
30
  >
28
- <v-alert
29
- :value="showHelp"
30
- dense
31
- text
32
- color="grey"
33
- class="mt-2 mb-0 font-weight-regular rounded-0 px-0 pt-0"
31
+ <VcsHelp
32
+ :text="helpText"
33
+ :show="showHelp"
34
34
  >
35
- <slot name="help">
36
- <span>{{ $t(helpText) }}</span>
37
- </slot>
38
- </v-alert>
35
+ <slot name="help" />
36
+ </VcsHelp>
39
37
  <slot name="content" />
40
38
  </v-stepper-content>
41
39
  </div>
@@ -43,8 +41,9 @@
43
41
 
44
42
  <script>
45
43
  import { computed, reactive, watch } from 'vue';
46
- import { VStepperStep, VStepperContent, VAlert } from 'vuetify/lib';
44
+ import { VStepperStep, VStepperContent } from 'vuetify/lib';
47
45
  import VcsActionButtonList from '../buttons/VcsActionButtonList.vue';
46
+ import VcsHelp from '../notification/VcsHelp.vue';
48
47
 
49
48
  /**
50
49
  * @description Stylized wrapper around {@link https://vuetifyjs.com/en/api/v-stepper-step/ |vuetify VStepperStep} and
@@ -68,7 +67,7 @@
68
67
  VStepperStep,
69
68
  VStepperContent,
70
69
  VcsActionButtonList,
71
- VAlert,
70
+ VcsHelp,
72
71
  },
73
72
  props: {
74
73
  step: {
@@ -157,4 +156,7 @@
157
156
  }
158
157
  }
159
158
  }
159
+ .v-stepper__content {
160
+ padding-left: 2px !important;
161
+ }
160
162
  </style>
@@ -0,0 +1,26 @@
1
+ import { computed } from 'vue';
2
+
3
+ /**
4
+ * Syncs the error and validation state with the underlying vuetify component.
5
+ * @param {Ref<any>} elementRef The template ref to the base vuetify component.
6
+ * @returns {Ref<string>} Error message to display. Is empty string if either there are no error messages or if the validation errors are not displayed because
7
+ * no interaction with the component or validation was reset by form. Validation errors have precedence over custom error messages.
8
+ */
9
+ // eslint-disable-next-line import/prefer-default-export
10
+ export function useErrorSync(elementRef) {
11
+ const errorMessage = computed(() => {
12
+ // if element is already mounted
13
+ if (elementRef.value) {
14
+ // errorMessages of selectField can either be (empty) array or string. Makes sure it is array.
15
+ const customErrorMessages = Array.isArray(elementRef.value.errorMessages) ?
16
+ elementRef.value.errorMessages : [elementRef.value.errorMessages];
17
+ // if validationState is 'error' (reset button removes this) or if there is errorMessages prop
18
+ if (elementRef.value.validationState === 'error' || !!customErrorMessages.length) {
19
+ // custom errorMessages are displayed when all validation error are solved.
20
+ return [...elementRef.value.errorBucket, ...customErrorMessages][0] || '';
21
+ }
22
+ }
23
+ return '';
24
+ });
25
+ return errorMessage;
26
+ }
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <span class="vcs-formatted-number" :class="{'vcs-formatted-number-dense': dense}">
2
+ <span class="vcs-formatted-number px-1" :class="{'vcs-formatted-number-dense': dense}">
3
3
  {{ formatted }}
4
4
  <span v-if="unit === SpecialUnits.SQM">
5
5
  m<sup>2</sup>
@@ -10,9 +10,6 @@
10
10
  d="M10956.373,13156.8h-11.986a1.387,1.387,0,0,1-1.387-1.39v-3.467a1.386,1.386,0,0,1,1.387-1.387h19.1a1.387,1.387,0,0,1,1.388,1.387v3.467a1.387,1.387,0,0,1-1.388,1.39Zm-11.986-4.51v2.773a.349.349,0,0,0,.347.347h18.411a.346.346,0,0,0,.347-.347v-2.773a.346.346,0,0,0-.347-.347h-2.255a.347.347,0,0,0-.347.347v.693a.52.52,0,0,1-1.04,0v-.693a.347.347,0,0,0-.347-.347h-.693a.35.35,0,0,0-.351.347v.693a.52.52,0,0,1-1.04,0v-.693a.346.346,0,0,0-.347-.347h-.71a.347.347,0,0,0-.347.347v.693a.52.52,0,0,1-1.04,0v-.693a.347.347,0,0,0-.347-.347h-.693a.347.347,0,0,0-.347.347v.693a.52.52,0,0,1-1.04,0v-.693a.347.347,0,0,0-.347-.347h-.7a.347.347,0,0,0-.347.347v.693a.52.52,0,0,1-1.04,0v-.693a.347.347,0,0,0-.347-.347h-.7a.343.343,0,0,0-.343.347v.693a.522.522,0,0,1-1.044,0v-.693a.347.347,0,0,0-.347-.347h-2.255A.349.349,0,0,0,10944.387,13152.286Zm.7,1.387a.694.694,0,1,1,.693.693A.693.693,0,0,1,10945.083,13153.673Zm17.382-5.376v-.35a.347.347,0,0,0-.347-.347h-16.342a.347.347,0,0,0-.347.347v.35a.522.522,0,0,1-.891.366l-1.388-1.387a.525.525,0,0,1,0-.736l1.388-1.387a.52.52,0,0,1,.891.367v.347a.347.347,0,0,0,.347.347h16.342a.347.347,0,0,0,.347-.347v-.347a.52.52,0,0,1,.888-.367l1.388,1.387a.519.519,0,0,1,0,.736l-1.388,1.387a.52.52,0,0,1-.888-.366Z"
11
11
  transform="translate(-10942 -13142.48)"
12
12
  fill="currentColor"
13
- stroke="rgba(0,0,0,0)"
14
- stroke-miterlimit="10"
15
- stroke-width="1"
16
13
  />
17
14
  </svg>
18
15
  </template>
@@ -10,9 +10,6 @@
10
10
  d="M10956.373,13156.8h-11.986a1.387,1.387,0,0,1-1.387-1.39v-3.467a1.386,1.386,0,0,1,1.387-1.387h19.1a1.387,1.387,0,0,1,1.388,1.387v3.467a1.387,1.387,0,0,1-1.388,1.39Zm-11.986-4.51v2.773a.349.349,0,0,0,.347.347h18.411a.346.346,0,0,0,.347-.347v-2.773a.346.346,0,0,0-.347-.347h-2.255a.347.347,0,0,0-.347.347v.693a.52.52,0,0,1-1.04,0v-.693a.347.347,0,0,0-.347-.347h-.693a.35.35,0,0,0-.351.347v.693a.52.52,0,0,1-1.04,0v-.693a.346.346,0,0,0-.347-.347h-.71a.347.347,0,0,0-.347.347v.693a.52.52,0,0,1-1.04,0v-.693a.347.347,0,0,0-.347-.347h-.693a.347.347,0,0,0-.347.347v.693a.52.52,0,0,1-1.04,0v-.693a.347.347,0,0,0-.347-.347h-.7a.347.347,0,0,0-.347.347v.693a.52.52,0,0,1-1.04,0v-.693a.347.347,0,0,0-.347-.347h-.7a.343.343,0,0,0-.343.347v.693a.522.522,0,0,1-1.044,0v-.693a.347.347,0,0,0-.347-.347h-2.255A.349.349,0,0,0,10944.387,13152.286Zm.7,1.387a.694.694,0,1,1,.693.693A.693.693,0,0,1,10945.083,13153.673Zm17.382-5.376v-.35a.347.347,0,0,0-.347-.347h-16.342a.347.347,0,0,0-.347.347v.35a.522.522,0,0,1-.891.366l-1.388-1.387a.525.525,0,0,1,0-.736l1.388-1.387a.52.52,0,0,1,.891.367v.347a.347.347,0,0,0,.347.347h16.342a.347.347,0,0,0,.347-.347v-.347a.52.52,0,0,1,.888-.367l1.388,1.387a.519.519,0,0,1,0,.736l-1.388,1.387a.52.52,0,0,1-.888-.366Z"
11
11
  transform="translate(-10942 -13140.795)"
12
12
  fill="currentColor"
13
- stroke="rgba(0,0,0,0)"
14
- stroke-miterlimit="10"
15
- stroke-width="1"
16
13
  />
17
14
  </svg>
18
15
  </template>
@@ -10,9 +10,6 @@
10
10
  d="M10944.387,13167.025a1.387,1.387,0,0,1-1.388-1.388v-19.106a1.387,1.387,0,0,1,1.388-1.388h3.47a1.388,1.388,0,0,1,1.389,1.388v19.106a1.388,1.388,0,0,1-1.389,1.388Zm0-20.147v18.41a.349.349,0,0,0,.348.35h2.775a.349.349,0,0,0,.347-.35v-2.254a.348.348,0,0,0-.347-.348h-.694a.52.52,0,0,1,0-1.04h.694a.346.346,0,0,0,.347-.344v-.7a.347.347,0,0,0-.347-.348h-.694a.521.521,0,0,1,0-1.041h.694a.347.347,0,0,0,.347-.347v-.707a.35.35,0,0,0-.347-.351h-.694a.519.519,0,0,1,0-1.037h.694a.349.349,0,0,0,.347-.347v-.694a.347.347,0,0,0-.347-.347h-.694a.521.521,0,0,1,0-1.041h.694a.347.347,0,0,0,.347-.348v-.7a.347.347,0,0,0-.347-.348h-.694a.52.52,0,0,1,0-1.04h.694a.347.347,0,0,0,.347-.344v-.7a.344.344,0,0,0-.347-.344h-.694a.522.522,0,0,1,0-1.045h.694a.346.346,0,0,0,.347-.343v-2.258a.349.349,0,0,0-.347-.347h-2.775A.349.349,0,0,0,10944.387,13146.878Zm8.338,19.863-1.389-1.388a.521.521,0,0,1,.367-.889h.347a.347.347,0,0,0,.348-.347v-16.345a.347.347,0,0,0-.348-.344h-.347a.51.51,0,0,1-.367-.155.518.518,0,0,1,0-.733l1.389-1.388a.518.518,0,0,1,.736,0l1.385,1.388a.506.506,0,0,1,.152.367.52.52,0,0,1-.52.521h-.347a.347.347,0,0,0-.347.344v16.345a.347.347,0,0,0,.347.347h.347a.521.521,0,0,1,.367.889l-1.385,1.388a.523.523,0,0,1-.369.151A.513.513,0,0,1,10952.725,13166.741Zm-7.3-18.822a.694.694,0,1,1,.694.694A.694.694,0,0,1,10945.428,13147.919Z"
11
11
  transform="translate(-10942 -13144.023)"
12
12
  fill="currentColor"
13
- stroke="rgba(0,0,0,0)"
14
- stroke-miterlimit="10"
15
- stroke-width="1"
16
13
  />
17
14
  </svg>
18
15
  </template>
@@ -1,16 +1,9 @@
1
1
  <!-- eslint-disable max-len -->
2
2
 
3
3
  <template>
4
- <svg id="icon-checkbox-check" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
5
- <rect
6
- id="bg"
7
- width="12"
8
- height="12"
9
- rx="1"
10
- transform="translate(2 2)"
11
- fill="rgba(34,34,34,0.8)"
12
- />
13
- <path id="hook" d="M13.525,6.363a.776.776,0,0,0-1.1.171h0L8.68,11.741,6.3,9.789a.778.778,0,0,0-1.108.15.825.825,0,0,0,.121,1.114l3.021,2.478a.784.784,0,0,0,1.12-.141l.009-.012L13.695,7.5a.824.824,0,0,0-.17-1.132Z" transform="translate(-1.364 -1.831)" fill="#fff" />
14
- <rect id="size" width="16" height="16" fill="none" />
4
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
5
+ <g id="icon-checkbox-check">
6
+ <path fill="currentColor" d="m13,2H3c-.55,0-1,.45-1,1v10c0,.55.45,1,1,1h10c.55,0,1-.45,1-1V3c0-.55-.45-1-1-1Zm-.67,3.67l-4.23,5.88h0s-.01.03-.02.03c-.27.34-.77.39-1.1.12l-3.02-2.48c-.33-.28-.38-.77-.12-1.11,0,0,.01-.01.02-.02.27-.34.76-.4,1.09-.13l2.38,1.95,3.74-5.21s0-.01.01-.02c.26-.34.74-.41,1.09-.15h0c.35.27.43.78.17,1.14Z"/>
7
+ </g>
15
8
  </svg>
16
9
  </template>
@@ -1,11 +1,18 @@
1
1
  <template>
2
- <svg id="icon-checkbox-uncheck" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
2
+ <svg
3
+ id="icon-checkbox-uncheck"
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="16"
6
+ height="16"
7
+ viewBox="0 0 16 16"
8
+ >
3
9
  <g
4
10
  id="Rectangle_749"
5
11
  data-name="Rectangle 749"
6
12
  transform="translate(2 2)"
7
13
  fill="none"
8
- stroke="#cecece"
14
+ stroke="currentColor"
15
+ stroke-opacity="0.4"
9
16
  stroke-width="1"
10
17
  >
11
18
  <rect width="12" height="12" rx="2" stroke="none" />
@@ -1,24 +1,7 @@
1
+ <!-- eslint-disable max-len -->
2
+
1
3
  <template>
2
- <svg id="icon-checkbox-half" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
3
- <rect
4
- id="Rectangle_123"
5
- data-name="Rectangle 123"
6
- width="12"
7
- height="12"
8
- rx="1"
9
- transform="translate(2 2)"
10
- fill="rgba(34,34,34,0.8)"
11
- />
12
- <line
13
- id="Line_84"
14
- data-name="Line 84"
15
- x2="4"
16
- transform="translate(6 8)"
17
- fill="none"
18
- stroke="#fff"
19
- stroke-linecap="round"
20
- stroke-width="2"
21
- />
22
- <rect id="size" width="16" height="16" fill="none" />
4
+ <svg id="icon-checkbox-half" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
5
+ <path fill="currentColor" d="m13,2H3c-.55,0-1,.45-1,1v10c0,.55.45,1,1,1h10c.55,0,1-.45,1-1V3c0-.55-.45-1-1-1Zm-3,7h-4c-.55,0-1-.45-1-1s.45-1,1-1h4c.55,0,1,.45,1,1s-.45,1-1,1Z" />
23
6
  </svg>
24
7
  </template>
@@ -1,7 +1,7 @@
1
1
  <!-- eslint-disable max-len -->
2
2
 
3
3
  <template>
4
- <svg xmlns="http://www.w3.org/2000/svg" width="24.999" height="24" viewBox="0 0 24.999 24">
4
+ <svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" viewBox="0 0 25 24">
5
5
  <g id="icon_24_comment" transform="translate(0.5)">
6
6
  <path
7
7
  id="Union_51"
@@ -9,11 +9,7 @@
9
9
  d="M6.381.477V4.287H3.523l-.03,0H3.487A1.39,1.39,0,0,0,2.1,5.665V7.959a4.11,4.11,0,0,1,.9-.1,4.207,4.207,0,0,1,1.1.146V6.287H8.381v-2.9L12.06,5.93l.513.357H22V18H4.1V15.988a4.176,4.176,0,0,1-1.1.146,4.13,4.13,0,0,1-.9-.1v2.536A1.429,1.429,0,0,0,3.523,20H22.571A1.432,1.432,0,0,0,24,18.571V5.714a1.43,1.43,0,0,0-1.428-1.427H13.2L7.129.086a.475.475,0,0,0-.748.391ZM0,12A3,3,0,1,0,3,9,3,3,0,0,0,0,12Z"
10
10
  transform="translate(23.999 22.997) rotate(180)"
11
11
  fill="currentColor"
12
- stroke="rgba(0,0,0,0)"
13
- stroke-miterlimit="10"
14
- stroke-width="1"
15
12
  />
16
- <rect id="size" width="24" height="24" fill="none" />
17
13
  </g>
18
14
  </svg>
19
15
  </template>
@@ -1,13 +1,11 @@
1
1
  <!-- eslint-disable max-len -->
2
2
  <template>
3
3
  <svg id="icon_24_oblique" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
4
- <rect id="size" width="24" height="24" fill="none" />
5
- <path
6
- id="Pfad_751"
7
- data-name="Pfad 751"
8
- d="M650,461H636a1,1,0,0,0-.707.293l-4,4A1,1,0,0,0,631,466v14a1,1,0,0,0,1,1h14a1,1,0,0,0,.707-.293l4-4A1,1,0,0,0,651,476V462A1,1,0,0,0,650,461Zm-1,14h-2v-8.586l2-2Zm-1.414,2-.586.586V477ZM635,475.586l-2,2V467h2ZM634.414,465l.586-.586V465ZM637,467h8v8h-8Zm10.586-4-2,2H637v-2Zm-13.172,16,2-2H645v2Z"
9
- transform="translate(-629 -459)"
10
- fill="currentColor"
11
- />
4
+ <rect width="24" height="24" fill="none" />
5
+ <g transform="translate(1 2.994)">
6
+ <g>
7
+ <path d="M19.769.862A1,1,0,0,0,18.778,0H3.222a1,1,0,0,0-.99.862l-2.222,16A1,1,0,0,0,1,18H21a1,1,0,0,0,.991-1.138ZM4.093,2H17.908l1.208,8.7L14.921,7.657a1,1,0,0,0-1.278.086L4.988,16H2.149ZM7.886,16l6.535-6.235L19.5,13.446,19.852,16Zm.753-7.6a2.876,2.876,0,0,0,3.083-2.6A2.841,2.841,0,0,0,8.639,3.2,2.841,2.841,0,0,0,5.556,5.8,2.876,2.876,0,0,0,8.639,8.4m0-3.2c.662,0,1.083.355,1.083.6s-.421.6-1.083.6-1.083-.355-1.083-.6.422-.6,1.083-.6" fill="currentColor" />
8
+ </g>
9
+ </g>
12
10
  </svg>
13
11
  </template>
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <svg xmlns="http://www.w3.org/2000/svg" width="8" height="8" viewBox="0 0 8 8">
3
- <g id="Rectangle_750" data-name="Rectangle 750" fill="none" stroke="#585858" stroke-width="2">
3
+ <g id="Rectangle_750" data-name="Rectangle 750" fill="none" stroke="currentColor" stroke-width="2">
4
4
  <rect width="8" height="8" rx="4" stroke="none" />
5
5
  <rect
6
6
  x="1"