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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/build/buildHelpers.js +60 -11
  2. package/build/bundle.js +1 -1
  3. package/build/info/publish.js +25 -31
  4. package/build/lintTypes.js +5 -0
  5. package/config/base.config.json +2 -1
  6. package/config/dev.config.json +7 -1
  7. package/config/www.config.json +25 -22
  8. package/dist/assets/@mdi/font/css/{materialdesignicons.min-7a4f6be0.css → materialdesignicons.min-680621ca.css} +1 -1
  9. package/dist/assets/{cesium-cb4dbfba.js → cesium-126f111a.js} +272 -385
  10. package/dist/assets/cesium.js +1 -1
  11. package/dist/assets/{core-72f21835.js → core-1c8b8674.js} +1417 -1453
  12. package/dist/assets/core.js +1 -1
  13. package/dist/assets/{ol-2d33bc8b.js → ol-27f9b3f3.js} +233 -329
  14. package/dist/assets/ol.js +1 -1
  15. package/dist/assets/ui-7214428e.css +1 -0
  16. package/dist/assets/{ui-2ab43a16.js → ui-7214428e.js} +9573 -9438
  17. package/dist/assets/ui.js +1 -1
  18. package/dist/assets/vue-c78a5f76.js +6083 -0
  19. package/dist/assets/vue.js +1 -1
  20. package/dist/assets/{vuetify-760ced3b.css → vuetify-88a2fabe.css} +2 -2
  21. package/dist/assets/{vuetify-760ced3b.js → vuetify-88a2fabe.js} +7672 -7877
  22. package/dist/assets/vuetify.js +1 -1
  23. package/index.d.ts +6 -8
  24. package/index.js +7 -5
  25. package/package.json +16 -16
  26. package/plugins/@vcmap-show-case/form-inputs-example/src/FormInputsExample.vue +2 -3
  27. package/plugins/@vcmap-show-case/project-selector/src/ModulesListComponent.vue +18 -11
  28. package/plugins/@vcmap-show-case/search-example/src/index.js +1 -0
  29. package/plugins/@vcmap-show-case/search-example/src/searchImpl.js +35 -5
  30. package/plugins/@vcmap-show-case/toolbox-example/src/index.js +2 -1
  31. package/plugins/package.json +3 -23
  32. package/public/assets/@mdi/font/css/materialdesignicons.min.css +1 -1
  33. package/src/actions/StyleSelector.vue +1 -1
  34. package/src/actions/actionHelper.js +13 -2
  35. package/src/actions/listActions.d.ts +4 -4
  36. package/src/actions/listActions.js +2 -2
  37. package/src/application/VcsApp.vue +96 -31
  38. package/src/application/VcsApp.vue.d.ts +297 -4
  39. package/src/application/VcsContainer.vue +26 -9
  40. package/src/application/VcsContainer.vue.d.ts +237 -0
  41. package/src/application/VcsMainMap.vue +7 -7
  42. package/src/application/VcsMainMap.vue.d.ts +2 -2
  43. package/src/application/VcsNavbar.vue +5 -1
  44. package/src/application/VcsSplashScreen.vue +24 -26
  45. package/src/application/VcsTextPageFooter.vue +2 -1
  46. package/src/components/buttons/VcsActionButtonList.vue +59 -3
  47. package/src/components/buttons/VcsActionButtonList.vue.d.ts +28 -0
  48. package/src/components/form-inputs-controls/VcsChipArrayInput.vue +15 -13
  49. package/src/components/form-inputs-controls/VcsChipArrayInput.vue.d.ts +3 -4
  50. package/src/components/form-inputs-controls/VcsCoordinate.vue +4 -3
  51. package/src/components/form-inputs-controls/VcsSelect.vue +1 -4
  52. package/src/components/form-inputs-controls/VcsSlider.vue +0 -1
  53. package/src/components/form-inputs-controls/VcsSlider.vue.d.ts +2 -4
  54. package/src/components/form-inputs-controls/VcsTextArea.vue +1 -4
  55. package/src/components/form-inputs-controls/VcsTextField.vue +14 -0
  56. package/src/components/form-inputs-controls/VcsTextField.vue.d.ts +9 -0
  57. package/src/components/form-inputs-controls/VcsWizardStep.vue +2 -5
  58. package/src/components/form-inputs-controls/vcsTextField.scss +1 -4
  59. package/src/components/form-output/VcsFormattedNumber.vue +6 -4
  60. package/src/components/form-output/VcsMarkdown.vue +15 -12
  61. package/src/components/form-output/VcsMarkdown.vue.d.ts +1 -0
  62. package/src/components/form-output/markdownHelper.d.ts +30 -0
  63. package/src/components/form-output/markdownHelper.js +398 -0
  64. package/src/components/import/VcsFileDrop.vue +8 -5
  65. package/src/components/import/VcsImportComponent.vue +4 -3
  66. package/src/components/import/VcsImportComponent.vue.d.ts +1 -2
  67. package/src/components/lists/VcsActionList.vue +4 -0
  68. package/src/components/lists/VcsList.vue +22 -37
  69. package/src/components/lists/VcsList.vue.d.ts +14 -55
  70. package/src/components/lists/{VcsListItem.vue → VcsListItemComponent.vue} +17 -1
  71. package/src/components/lists/VcsListItemComponent.vue.d.ts +69 -0
  72. package/src/components/lists/VcsTreeview.vue +43 -16
  73. package/src/components/lists/VcsTreeview.vue.d.ts +14 -3
  74. package/src/components/lists/VcsTreeviewLeaf.vue +15 -6
  75. package/src/components/lists/VcsTreeviewSearchbar.vue +2 -2
  76. package/src/components/notification/VcsHelp.vue +1 -1
  77. package/src/components/notification/VcsHelp.vue.d.ts +3 -2
  78. package/src/components/section/VcsExpansionPanel.vue +2 -2
  79. package/src/components/section/VcsFormSection.vue +10 -4
  80. package/src/components/section/VcsFormSection.vue.d.ts +1 -2
  81. package/src/components/style/VcsTextMenu.vue +1 -1
  82. package/src/components/style/VcsVectorStyleComponent.vue +1 -1
  83. package/src/components/tables/VcsDataTable.vue +28 -22
  84. package/src/components/tables/VcsTable.vue +45 -62
  85. package/src/components/tables/VcsTable.vue.d.ts +30 -17
  86. package/src/components/tables/VcsTableCell.vue +72 -0
  87. package/src/components/tables/VcsTableCell.vue.d.ts +13 -0
  88. package/src/components/vector-properties/VcsFeatureEditingWindow.vue +6 -5
  89. package/src/components/vector-properties/VcsFeatureTransforms.vue +5 -0
  90. package/src/components/viewpoint/VcsViewpointComponent.vue +2 -2
  91. package/src/components/viewpoint/VcsViewpointEditor.vue +2 -2
  92. package/src/contentTree/LayerTree.vue +9 -27
  93. package/src/contentTree/LayerTree.vue.d.ts +1 -1
  94. package/src/contentTree/contentTreeCollection.d.ts +1 -0
  95. package/src/contentTree/contentTreeCollection.js +45 -11
  96. package/src/featureInfo/BalloonComponent.vue +14 -15
  97. package/src/featureInfo/MarkdownBalloonComponent.vue +4 -2
  98. package/src/featureInfo/MarkdownBalloonComponent.vue.d.ts +2 -2
  99. package/src/featureInfo/abstractFeatureInfoView.d.ts +6 -0
  100. package/src/featureInfo/abstractFeatureInfoView.js +15 -7
  101. package/src/featureInfo/featureInfo.d.ts +5 -5
  102. package/src/featureInfo/featureInfo.js +51 -31
  103. package/src/featureInfo/iframeFeatureInfoView.d.ts +8 -2
  104. package/src/featureInfo/iframeFeatureInfoView.js +15 -5
  105. package/src/featureInfo/markdownBalloonFeatureInfoView.d.ts +1 -1
  106. package/src/featureInfo/markdownBalloonFeatureInfoView.js +5 -5
  107. package/src/featureInfo/markdownFeatureInfoView.d.ts +1 -1
  108. package/src/featureInfo/markdownFeatureInfoView.js +9 -11
  109. package/src/featureInfo/tableFeatureInfoView.js +13 -4
  110. package/src/manager/collectionManager/CollectionComponentList.vue +1 -1
  111. package/src/manager/collectionManager/CollectionComponentList.vue.d.ts +2 -2
  112. package/src/manager/collectionManager/collectionComponentClass.d.ts +1 -1
  113. package/src/manager/collectionManager/collectionComponentClass.js +2 -2
  114. package/src/manager/collectionManager/editorCollectionComponentClass.js +2 -1
  115. package/src/manager/panel/PanelComponent.vue +2 -9
  116. package/src/manager/panel/PanelManagerComponent.vue +7 -3
  117. package/src/manager/panel/panelHelper.js +3 -3
  118. package/src/manager/panel/panelManager.d.ts +9 -1
  119. package/src/manager/panel/panelManager.js +15 -3
  120. package/src/manager/toolbox/GroupToolboxComponent.vue +8 -4
  121. package/src/manager/toolbox/GroupToolboxComponent.vue.d.ts +1 -0
  122. package/src/manager/toolbox/SelectToolboxComponent.vue +7 -4
  123. package/src/manager/toolbox/SelectToolboxComponent.vue.d.ts +1 -0
  124. package/src/manager/toolbox/ToolboxManager.vue +9 -6
  125. package/src/manager/toolbox/ToolboxManager.vue.d.ts +1 -0
  126. package/src/manager/window/WindowComponent.vue +12 -8
  127. package/src/manager/window/WindowComponentHeader.vue +29 -8
  128. package/src/manager/window/WindowComponentHeader.vue.d.ts +2 -0
  129. package/src/manager/window/WindowManager.vue +2 -2
  130. package/src/navigation/MapNavigation.vue +20 -0
  131. package/src/navigation/locatorHelper.js +1 -1
  132. package/src/navigation/overviewMap.js +1 -1
  133. package/src/notifier/NotifierComponent.vue +18 -15
  134. package/src/search/ResultItem.vue +18 -6
  135. package/src/search/ResultsComponent.vue +31 -20
  136. package/src/search/ResultsComponent.vue.d.ts +2 -1
  137. package/src/search/SearchComponent.vue +8 -14
  138. package/src/search/SearchComponent.vue.d.ts +1 -0
  139. package/src/siteConfig.js +8 -8
  140. package/src/styles/_typography.scss +0 -2
  141. package/src/styles/main.scss +0 -4
  142. package/src/uiConfig.d.ts +300 -5
  143. package/src/uiConfig.js +28 -16
  144. package/src/vcsUiApp.d.ts +7 -7
  145. package/src/vcsUiApp.js +10 -9
  146. package/src/vuePlugins/vuetify.js +3 -0
  147. package/dist/assets/ui-2ab43a16.css +0 -1
  148. package/dist/assets/vue-03b265aa.js +0 -6096
  149. package/src/application/markdownHelper.d.ts +0 -12
  150. package/src/application/markdownHelper.js +0 -70
  151. package/src/components/lists/VcsListItem.vue.d.ts +0 -27
  152. package/src/components/notification/VcsTooltip.vue +0 -156
  153. package/src/components/notification/VcsTooltip.vue.d.ts +0 -27
  154. package/src/featureInfo/MarkdownComponent.vue +0 -16
  155. package/src/featureInfo/MarkdownComponent.vue.d.ts +0 -7
  156. package/src/styles/_theming.scss +0 -73
  157. package/src/styles/settings.scss +0 -6
  158. package/src/styles/shades.scss +0 -4
  159. package/src/styles/variables.scss +0 -140
  160. package/src/styles/vcsFont.scss +0 -2
  161. package/src/styles/vcsGrid.scss +0 -3
@@ -1,9 +1,9 @@
1
1
  export function setupMapNavigation(app: any): {
2
- showMapNavigation: import("vue").Ref<boolean>;
2
+ showMapNavigation: import("vue").ComputedRef<boolean>;
3
3
  destroy: () => void;
4
4
  };
5
5
  declare const _default: import("vue").DefineComponent<{}, {
6
6
  mapId: string;
7
- showMapNavigation: import("vue").Ref<boolean>;
7
+ showMapNavigation: import("vue").ComputedRef<boolean>;
8
8
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
9
9
  export default _default;
@@ -14,6 +14,7 @@
14
14
  <VcsActionButtonList
15
15
  :actions="mapActions"
16
16
  :overflow-count="3"
17
+ :force-overflow="false"
17
18
  button="VcsToolButton"
18
19
  />
19
20
  <v-divider
@@ -28,6 +29,7 @@
28
29
  <VcsActionButtonList
29
30
  :actions="contentActions"
30
31
  :overflow-count="xs ? 3 : 4"
32
+ :force-overflow="false"
31
33
  button="VcsToolButton"
32
34
  />
33
35
  <v-divider
@@ -38,6 +40,7 @@
38
40
  />
39
41
  <VcsActionButtonList
40
42
  :actions="toolActions"
43
+ :force-overflow="false"
41
44
  v-if="mdAndUp"
42
45
  button="VcsToolButton"
43
46
  />
@@ -62,6 +65,7 @@
62
65
  <div class="d-flex">
63
66
  <VcsActionButtonList
64
67
  :actions="projectActions"
68
+ :force-overflow="false"
65
69
  button="VcsToolButton"
66
70
  />
67
71
  <v-divider
@@ -186,7 +190,7 @@
186
190
  );
187
191
 
188
192
  const logo = computed(() => {
189
- return app.uiConfig.config.value.logo ?? VcsDefaultLogo;
193
+ return app.uiConfig.config.logo ?? VcsDefaultLogo;
190
194
  });
191
195
 
192
196
  const { searchAction, destroy: destroySearchAction } =
@@ -9,33 +9,31 @@
9
9
  persistent
10
10
  >
11
11
  <v-card>
12
- <div class="px-2 pt-2 pb-1">
13
- <v-card-text>
14
- <VcsMarkdown :content="$st(options.content)" />
15
- <VcsCheckbox v-if="options.acceptInput" v-model="checkBox">
16
- <template #label>
17
- <VcsMarkdown
18
- :content="$st(options.checkBoxText)"
19
- class="marked-checkbox-content"
20
- />
21
- </template>
22
- </VcsCheckbox>
23
- </v-card-text>
12
+ <v-card-text>
13
+ <VcsMarkdown :content="$st(options.content)" />
14
+ <VcsCheckbox v-if="options.acceptInput" v-model="checkBox">
15
+ <template #label>
16
+ <VcsMarkdown
17
+ :content="$st(options.checkBoxText)"
18
+ class="marked-checkbox-content"
19
+ />
20
+ </template>
21
+ </VcsCheckbox>
22
+ </v-card-text>
24
23
 
25
- <v-card-actions>
26
- <v-row no-gutters>
27
- <v-col class="text-right">
28
- <VcsFormButton
29
- color="primary"
30
- variant="filled"
31
- @click="exitScreen"
32
- :disabled="options.acceptInput && !checkBox"
33
- >{{ $t(options.buttonTitle) }}</VcsFormButton
34
- >
35
- </v-col>
36
- </v-row>
37
- </v-card-actions>
38
- </div>
24
+ <v-card-actions>
25
+ <v-row no-gutters>
26
+ <v-col class="text-right">
27
+ <VcsFormButton
28
+ color="primary"
29
+ variant="filled"
30
+ @click="exitScreen"
31
+ :disabled="options.acceptInput && !checkBox"
32
+ >{{ $t(options.buttonTitle) }}</VcsFormButton
33
+ >
34
+ </v-col>
35
+ </v-row>
36
+ </v-card-actions>
39
37
  </v-card>
40
38
  </v-dialog>
41
39
  </template>
@@ -1,7 +1,7 @@
1
1
  <template v-if="textPage.title">
2
2
  <span class="d-inline-block text-truncate mr-1">
3
3
  <span v-if="textPage.url" class="imprint">
4
- <a :href="textPage.url" target="_blank"
4
+ <a :href="$st(textPage.url)" target="_blank"
5
5
  >{{ $st(textPage.title) }} <span></span>
6
6
  </a>
7
7
  </span>
@@ -38,6 +38,7 @@
38
38
 
39
39
  /**
40
40
  * A Footer element opening either an URL in a new tab or a WindowComponent with provided content
41
+ * textPage title, tooltip and the url can also be i18n keys, and will be translated.
41
42
  * @vue-prop {import("../uiConfig.js").TextPageType} [textPage]
42
43
  * @vue-prop {string} windowId
43
44
  */
@@ -7,6 +7,7 @@
7
7
  v-for="(btn, index) in buttons"
8
8
  :key="`${btn.name}-${index}`"
9
9
  :tooltip="btn.title"
10
+ :tooltip-position="tooltipPosition"
10
11
  :icon="btn.icon"
11
12
  :active="btn.active"
12
13
  :disabled="btn.disabled || disabled"
@@ -34,6 +35,10 @@
34
35
  </template>
35
36
  <VcsActionList :actions="overflowButtons" :disabled="disabled" />
36
37
  </v-menu>
38
+ <v-spacer
39
+ v-else-if="blockOverflow"
40
+ class="flex-grow-0 d-inline-block px-2"
41
+ />
37
42
  </div>
38
43
  </template>
39
44
  <script>
@@ -43,17 +48,36 @@
43
48
  import VcsFormButton from './VcsFormButton.vue';
44
49
  import VcsActionList, { validateActions } from '../lists/VcsActionList.vue';
45
50
 
51
+ /**
52
+ * compares two strings token based
53
+ * @param {string} str1
54
+ * @param {string} str2
55
+ * @returns {number} the convergence of both strings in percent
56
+ */
57
+ function jaccardSimilarity(str1, str2) {
58
+ const set1 = new Set(str1.split(' '));
59
+ const set2 = new Set(str2.split(' '));
60
+ const intersection = new Set([...set1].filter((x) => set2.has(x)));
61
+ const union = new Set([...set1, ...set2]);
62
+
63
+ return intersection.size / union.size;
64
+ }
65
+
46
66
  /**
47
67
  * @description
48
68
  * A component rendering a list of actions with overflow mechanic using
69
+ * For overflow buttons the title is only rendered, if it differs significantly from the action's name.
49
70
  * {@link VcsButton} and {@link VcsActionList}.
50
71
  * @vue-prop {Array<VcsAction>} actions - Array of actions
51
72
  * @vue-prop {string} [button='VcsButton'] - used button type (one of 'VcsButton', 'VcsToolButton' or 'VcsFormButton)
52
73
  * @vue-prop {number} [overflowCount=2] - number of buttons rendered until overflow.
53
74
  * @vue-prop {string} [overflowIcon='$vcsKebab'] - optional custom icon for overflow button
75
+ * @vue-prop {boolean} [blockOverflow=false] - if space for the overflow should be blocked or not (e.g. when rendering lists in a grid)
76
+ * @vue-prop {boolean} [forceOverflow=true] - if there is only one overflow button, this button can be rendered instead of the overflow button by setting this option to false
77
+ * @vue-prop {boolean} [disabled=false] - disable all actions
78
+ * @vue-prop {('bottom' | 'left' | 'top' | 'right')} tooltipPosition - Position of the tooltip.
54
79
  * @vue-computed {Array<VcsAction>} buttons - buttons rendered directly, have to provide an icon
55
80
  * @vue-computed {Array<VcsAction>} overflowButtons - rest of buttons rendered in overflow
56
- * @vue-prop {boolean} [disabled=false] - disable all actions
57
81
  */
58
82
  export default {
59
83
  name: 'VcsActionButtonList',
@@ -86,19 +110,40 @@
86
110
  type: String,
87
111
  default: '$vcsKebab',
88
112
  },
113
+ blockOverflow: {
114
+ type: Boolean,
115
+ default: false,
116
+ },
117
+ forceOverflow: {
118
+ type: Boolean,
119
+ default: true,
120
+ },
89
121
  disabled: {
90
122
  type: Boolean,
91
123
  default: false,
92
124
  },
125
+ tooltipPosition: {
126
+ type: String,
127
+ default: 'bottom',
128
+ },
93
129
  },
94
130
  computed: {
95
131
  right() {
96
132
  return this.$attrs.right !== undefined && this.$attrs.right !== false;
97
133
  },
134
+ computedCount() {
135
+ if (
136
+ !this.forceOverflow &&
137
+ this.actions.length === this.overflowCount + 1
138
+ ) {
139
+ return this.actions.length;
140
+ }
141
+ return this.overflowCount;
142
+ },
98
143
  buttons() {
99
144
  const buttons = this.actions
100
145
  .filter((i) => i.icon)
101
- .slice(0, this.overflowCount);
146
+ .slice(0, this.computedCount);
102
147
  if (this.right) {
103
148
  return buttons.reverse();
104
149
  }
@@ -106,7 +151,18 @@
106
151
  },
107
152
  overflowButtons() {
108
153
  const buttonsNames = this.buttons.map((i) => i.name);
109
- return this.actions.filter((i) => !buttonsNames.includes(i.name));
154
+ return this.actions
155
+ .filter((i) => !buttonsNames.includes(i.name))
156
+ .map((i) => {
157
+ const { title, ...button } = i;
158
+ if (
159
+ title &&
160
+ jaccardSimilarity(this.$t(i.name), this.$t(title)) > 0.5
161
+ ) {
162
+ return button;
163
+ }
164
+ return i;
165
+ });
110
166
  },
111
167
  classes() {
112
168
  const classes = ['d-flex', 'align-center', 'action-btn-wrap'];
@@ -17,12 +17,25 @@ declare const _default: import("vue").DefineComponent<{
17
17
  type: StringConstructor;
18
18
  default: string;
19
19
  };
20
+ blockOverflow: {
21
+ type: BooleanConstructor;
22
+ default: boolean;
23
+ };
24
+ forceOverflow: {
25
+ type: BooleanConstructor;
26
+ default: boolean;
27
+ };
20
28
  disabled: {
21
29
  type: BooleanConstructor;
22
30
  default: boolean;
23
31
  };
32
+ tooltipPosition: {
33
+ type: StringConstructor;
34
+ default: string;
35
+ };
24
36
  }, any, any, {
25
37
  right(): boolean;
38
+ computedCount(): any;
26
39
  buttons(): any;
27
40
  overflowButtons(): any;
28
41
  classes(): string[];
@@ -45,15 +58,30 @@ declare const _default: import("vue").DefineComponent<{
45
58
  type: StringConstructor;
46
59
  default: string;
47
60
  };
61
+ blockOverflow: {
62
+ type: BooleanConstructor;
63
+ default: boolean;
64
+ };
65
+ forceOverflow: {
66
+ type: BooleanConstructor;
67
+ default: boolean;
68
+ };
48
69
  disabled: {
49
70
  type: BooleanConstructor;
50
71
  default: boolean;
51
72
  };
73
+ tooltipPosition: {
74
+ type: StringConstructor;
75
+ default: string;
76
+ };
52
77
  }>>, {
53
78
  button: string;
54
79
  disabled: boolean;
80
+ tooltipPosition: string;
55
81
  overflowCount: number;
56
82
  overflowIcon: string;
83
+ blockOverflow: boolean;
84
+ forceOverflow: boolean;
57
85
  }, {}>;
58
86
  export default _default;
59
87
  import { validateActions } from '../lists/VcsActionList.vue';
@@ -23,24 +23,22 @@
23
23
  <div v-for="({ key, value }, index) in localValue" :key="key">
24
24
  <v-chip
25
25
  v-if="selected !== index"
26
- v-bind="{ ...noListenerAttrs }"
27
26
  size="small"
28
27
  :disabled="disabled"
29
28
  :closable="deletableChips"
30
29
  @click="select(index)"
31
30
  @click:close="remove(index)"
31
+ v-bind="{ ...noListenerAttrs }"
32
32
  >
33
33
  <span class="text-truncate d-inline-block">{{ value }}</span>
34
34
  </v-chip>
35
35
  <VcsTextField
36
36
  v-else
37
- v-bind="{ ...noListenerAttrs }"
38
37
  rounded
39
38
  filled
40
39
  autofocus
41
40
  hide-spin-buttons
42
- :height="useItemHeight().value - 8"
43
- v-model="editValue"
41
+ :height="itemHeight - 8"
44
42
  @keydown.esc="selected = -1"
45
43
  @blur="selected = -1"
46
44
  @keydown.enter="submitChange($event)"
@@ -48,27 +46,27 @@
48
46
  append-inner-icon="mdi-check"
49
47
  :style="{ width: `${inputWidth}px` }"
50
48
  class="py-0"
49
+ v-bind="{ ...noListenerAttrs }"
50
+ v-model="editValue"
51
51
  />
52
52
  </div>
53
53
  <div>
54
54
  <v-chip
55
55
  v-if="adding === false"
56
- v-bind="{ ...noListenerAttrs }"
57
56
  size="small"
58
57
  :disabled="disabled"
59
58
  @click="adding = true"
59
+ v-bind="{ ...noListenerAttrs }"
60
60
  >
61
61
  <v-icon>$vcsPlus</v-icon>
62
62
  </v-chip>
63
63
  <VcsTextField
64
64
  v-else
65
- v-bind="{ ...noListenerAttrs }"
66
65
  rounded
67
66
  filled
68
67
  autofocus
69
68
  hide-spin-buttons
70
- :height="useItemHeight().value - 8"
71
- v-model="newValue"
69
+ :height="itemHeight - 8"
72
70
  @keydown.enter="add($event, newValue)"
73
71
  @click:append-inner="add($event, newValue)"
74
72
  @keydown.esc="cancel"
@@ -76,6 +74,8 @@
76
74
  append-inner-icon="mdi-check"
77
75
  :style="{ width: `${inputWidth}px` }"
78
76
  class="py-0"
77
+ v-bind="{ ...noListenerAttrs }"
78
+ v-model="newValue"
79
79
  />
80
80
  </div>
81
81
  </div>
@@ -166,8 +166,8 @@
166
166
  setup(props, { attrs, emit }) {
167
167
  const selected = ref(-1);
168
168
  const adding = ref(false);
169
- const editValue = ref(undefined);
170
- const newValue = ref(undefined);
169
+ const editValue = ref(null);
170
+ const newValue = ref(null);
171
171
  const vcsChipArrayInput = ref();
172
172
  const hasScrollbar = ref();
173
173
 
@@ -247,7 +247,7 @@
247
247
  }
248
248
 
249
249
  function cancel() {
250
- newValue.value = undefined;
250
+ newValue.value = null;
251
251
  adding.value = false;
252
252
  }
253
253
 
@@ -271,7 +271,7 @@
271
271
  vcsChipArrayInput.value.scrollLeft =
272
272
  vcsChipArrayInput.value.scrollWidth;
273
273
  }
274
- newValue.value = undefined;
274
+ newValue.value = null;
275
275
  adding.value = true;
276
276
  }
277
277
 
@@ -279,6 +279,8 @@
279
279
 
280
280
  const paddingProvided = usePadding(attrs);
281
281
 
282
+ const itemHeight = useItemHeight();
283
+
282
284
  return {
283
285
  paddingProvided,
284
286
  localValue,
@@ -294,7 +296,7 @@
294
296
  submitChange,
295
297
  add,
296
298
  cancel,
297
- useItemHeight,
299
+ itemHeight,
298
300
  };
299
301
  },
300
302
  };
@@ -29,8 +29,8 @@ declare const _default: import("vue").DefineComponent<{
29
29
  noListenerAttrs: import("vue").ComputedRef<Record<string, unknown>>;
30
30
  selected: import("vue").Ref<number>;
31
31
  adding: import("vue").Ref<boolean>;
32
- editValue: import("vue").Ref<undefined>;
33
- newValue: import("vue").Ref<undefined>;
32
+ editValue: import("vue").Ref<null>;
33
+ newValue: import("vue").Ref<null>;
34
34
  vcsChipArrayInput: import("vue").Ref<any>;
35
35
  hasScrollbar: import("vue").Ref<any>;
36
36
  remove: (index: any) => void;
@@ -38,7 +38,7 @@ declare const _default: import("vue").DefineComponent<{
38
38
  submitChange: (e: any) => void;
39
39
  add: (e: any, v: any) => Promise<void>;
40
40
  cancel: () => void;
41
- useItemHeight: typeof useItemHeight;
41
+ itemHeight: import("vue").ComputedRef<number>;
42
42
  }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:modelValue"[], "update:modelValue", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
43
43
  modelValue: {
44
44
  type: ArrayConstructor;
@@ -75,4 +75,3 @@ declare const _default: import("vue").DefineComponent<{
75
75
  scrollDx: number;
76
76
  }, {}>;
77
77
  export default _default;
78
- import { useItemHeight } from '../../vuePlugins/vuetify.js';
@@ -9,17 +9,18 @@
9
9
  >
10
10
  <slot name="prepend" v-bind="{ ...$props }" />
11
11
  <template v-for="(_, idx) in localValue">
12
- <v-col :key="`${prefixes[idx]}-coordinate`" v-if="!hideZ || idx < 2">
12
+ <v-col :key="`coordinate-${idx}`" v-if="!hideZ || idx < 2">
13
13
  <VcsTextField
14
- :id="`${prefixes[idx]}-coordinate`"
14
+ :id="`coordinate-${idx}`"
15
15
  :hide-spin-buttons="true"
16
16
  type="number"
17
17
  class="py-0"
18
18
  :min="getRangeFromExtent(idx, extent)?.[0]"
19
19
  :max="getRangeFromExtent(idx, extent)?.[1]"
20
20
  :step="steps[idx]"
21
- :prefix="prefixes[idx]"
22
21
  :unit="units[idx]"
22
+ :prefix="prefixes[idx]"
23
+ force-prefix
23
24
  :decimals="decimals[idx]"
24
25
  v-bind="noListenerAttrs"
25
26
  v-model="localValue[idx]"
@@ -124,12 +124,9 @@
124
124
  :deep(input::placeholder) {
125
125
  color: rgb(var(--v-theme-primary));
126
126
  opacity: 1;
127
- // line-height: unset !important;
127
+ font-style: italic !important;
128
128
  padding: 0 3px 0 0;
129
129
  }
130
- :deep(input::-moz-placeholder) {
131
- font-style: italic;
132
- }
133
130
  }
134
131
  // remove details
135
132
  :deep(.v-input__details) {
@@ -100,7 +100,6 @@
100
100
  default: 'right',
101
101
  },
102
102
  },
103
- emits: ['update:modelValue'],
104
103
  setup(props, { attrs, slots }) {
105
104
  const itemHeight = useItemHeight();
106
105
  const thumbSize = computed(() => {
@@ -15,7 +15,7 @@ declare const _default: import("vue").DefineComponent<{
15
15
  tickSize: import("vue").ComputedRef<number>;
16
16
  trackSize: import("vue").ComputedRef<number>;
17
17
  paddingProvided: import("vue").ComputedRef<boolean>;
18
- }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:modelValue"[], "update:modelValue", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
18
+ }, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
19
19
  tooltip: {
20
20
  type: StringConstructor;
21
21
  default: undefined;
@@ -24,9 +24,7 @@ declare const _default: import("vue").DefineComponent<{
24
24
  type: StringConstructor;
25
25
  default: string;
26
26
  };
27
- }>> & {
28
- "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
29
- }, {
27
+ }>>, {
30
28
  tooltip: string;
31
29
  tooltipPosition: string;
32
30
  }, {}>;
@@ -121,13 +121,10 @@
121
121
  .primary--placeholder {
122
122
  :deep(textarea::placeholder) {
123
123
  color: rgb(var(--v-theme-primary));
124
- font-style: italic;
124
+ font-style: italic !important;
125
125
  opacity: 1;
126
126
  padding: 0 3px 0 0;
127
127
  }
128
- :deep(textarea::-moz-placeholder) {
129
- font-style: initial;
130
- }
131
128
  }
132
129
 
133
130
  // remove details
@@ -12,6 +12,7 @@
12
12
  'py-1': !paddingProvided,
13
13
  }"
14
14
  v-bind="$attrs"
15
+ :prefix="forcePrefix ? undefined : $attrs.prefix"
15
16
  v-model="visibleValue"
16
17
  v-model:focused="focused"
17
18
  >
@@ -41,6 +42,14 @@
41
42
  ></v-tooltip>
42
43
  <slot name="default" v-bind="scope ?? {}"></slot>
43
44
  </template>
45
+ <!-- use slot to show prefix always, independent of modelValue (unlike prefix prop) -->
46
+ <template #prepend-inner="prependInnerScope">
47
+ <slot name="prepend-inner" v-bind="prependInnerScope">
48
+ <template v-if="forcePrefix && $attrs.prefix">
49
+ {{ $attrs.prefix }}
50
+ </template>
51
+ </slot>
52
+ </template>
44
53
  </v-text-field>
45
54
  </template>
46
55
 
@@ -74,6 +83,7 @@
74
83
  * @vue-prop {string|undefined} tooltip - Optional tooltip which will be shown on hover when no error message is shown
75
84
  * @vue-prop {string} unit - Unit for number input fields. Is displayed behind the number.
76
85
  * @vue-prop {number|undefined} [decimals] - An optional number of decimal places the visible value will be rounded to. Does not affect the input value!
86
+ * @vue-prop {boolean} [forcePrefix=false] - If set, forces the prefix to be always rendered independent of modelValue by using prepend-inner slot
77
87
  */
78
88
  export default {
79
89
  name: 'VcsTextField',
@@ -112,6 +122,10 @@
112
122
  type: Number,
113
123
  default: undefined,
114
124
  },
125
+ forcePrefix: {
126
+ type: Boolean,
127
+ default: false,
128
+ },
115
129
  },
116
130
  setup(props, { attrs, slots }) {
117
131
  const textFieldRef = ref();
@@ -23,6 +23,10 @@ declare const _default: import("vue").DefineComponent<{
23
23
  type: NumberConstructor;
24
24
  default: undefined;
25
25
  };
26
+ forcePrefix: {
27
+ type: BooleanConstructor;
28
+ default: boolean;
29
+ };
26
30
  }, {
27
31
  forwardSlots: import("vue").ComputedRef<string[]>;
28
32
  paddingProvided: import("vue").ComputedRef<boolean>;
@@ -56,6 +60,10 @@ declare const _default: import("vue").DefineComponent<{
56
60
  type: NumberConstructor;
57
61
  default: undefined;
58
62
  };
63
+ forcePrefix: {
64
+ type: BooleanConstructor;
65
+ default: boolean;
66
+ };
59
67
  }>>, {
60
68
  type: string;
61
69
  modelValue: string | number;
@@ -63,5 +71,6 @@ declare const _default: import("vue").DefineComponent<{
63
71
  tooltipPosition: string;
64
72
  unit: string;
65
73
  decimals: number;
74
+ forcePrefix: boolean;
66
75
  }, {}>;
67
76
  export default _default;
@@ -23,9 +23,6 @@
23
23
  v-if="isActiveStep"
24
24
  :actions="actions"
25
25
  :overflow-count="actionButtonListOverflowCount"
26
- @mousedown.stop
27
- @touchstart.stop
28
- @keydown.stop
29
26
  class="justify-end"
30
27
  />
31
28
  </div>
@@ -33,7 +30,7 @@
33
30
  </template>
34
31
  <template #default>
35
32
  <div>
36
- <VcsHelp :text="helpText" :show="showHelp">
33
+ <VcsHelp :text="helpText" :show="showHelp" class="mb-1">
37
34
  <slot name="help" />
38
35
  </VcsHelp>
39
36
  <slot />
@@ -136,7 +133,7 @@
136
133
  const helpAction = reactive({
137
134
  name: 'help',
138
135
  title: 'components.vcsFormSection.help',
139
- active: false,
136
+ active: true,
140
137
  icon: 'mdi-help-circle',
141
138
  callback() {
142
139
  this.active = !this.active;
@@ -58,13 +58,10 @@
58
58
  .primary--placeholder {
59
59
  :deep(input::placeholder) {
60
60
  color: rgb(var(--v-theme-primary));
61
- font-style: italic;
61
+ font-style: italic !important;
62
62
  opacity: 1;
63
63
  padding: 0 3px 0 0;
64
64
  }
65
- :deep(input::-moz-placeholder) {
66
- font-style: initial;
67
- }
68
65
  }
69
66
 
70
67
  // remove details
@@ -11,10 +11,12 @@
11
11
  </slot>
12
12
  {{ formatted }}
13
13
  <slot name="append">
14
- <span v-if="unit === SpecialUnits.SQM"> m<sup>2</sup> </span>
15
- <span v-else-if="unit === SpecialUnits.CBM"> m<sup>3</sup> </span>
16
- <span v-else-if="unit === SpecialUnits.DEG"> ° </span>
17
- <span v-else>
14
+ <span class="pl-1" v-if="unit === SpecialUnits.SQM"> m<sup>2</sup> </span>
15
+ <span class="pl-1" v-else-if="unit === SpecialUnits.CBM">
16
+ m<sup>3</sup>
17
+ </span>
18
+ <span class="pl-1" v-else-if="unit === SpecialUnits.DEG"> ° </span>
19
+ <span class="pl-1" v-else>
18
20
  {{ unit }}
19
21
  </span>
20
22
  </slot>