@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.
- package/build/buildHelpers.js +60 -11
- package/build/bundle.js +1 -1
- package/build/info/publish.js +25 -31
- package/build/lintTypes.js +5 -0
- package/config/base.config.json +2 -1
- package/config/dev.config.json +7 -1
- package/config/www.config.json +25 -22
- package/dist/assets/@mdi/font/css/{materialdesignicons.min-7a4f6be0.css → materialdesignicons.min-680621ca.css} +1 -1
- package/dist/assets/{cesium-cb4dbfba.js → cesium-126f111a.js} +272 -385
- package/dist/assets/cesium.js +1 -1
- package/dist/assets/{core-72f21835.js → core-1c8b8674.js} +1417 -1453
- package/dist/assets/core.js +1 -1
- package/dist/assets/{ol-2d33bc8b.js → ol-27f9b3f3.js} +233 -329
- package/dist/assets/ol.js +1 -1
- package/dist/assets/ui-7214428e.css +1 -0
- package/dist/assets/{ui-2ab43a16.js → ui-7214428e.js} +9573 -9438
- package/dist/assets/ui.js +1 -1
- package/dist/assets/vue-c78a5f76.js +6083 -0
- package/dist/assets/vue.js +1 -1
- package/dist/assets/{vuetify-760ced3b.css → vuetify-88a2fabe.css} +2 -2
- package/dist/assets/{vuetify-760ced3b.js → vuetify-88a2fabe.js} +7672 -7877
- package/dist/assets/vuetify.js +1 -1
- package/index.d.ts +6 -8
- package/index.js +7 -5
- package/package.json +16 -16
- package/plugins/@vcmap-show-case/form-inputs-example/src/FormInputsExample.vue +2 -3
- package/plugins/@vcmap-show-case/project-selector/src/ModulesListComponent.vue +18 -11
- package/plugins/@vcmap-show-case/search-example/src/index.js +1 -0
- package/plugins/@vcmap-show-case/search-example/src/searchImpl.js +35 -5
- package/plugins/@vcmap-show-case/toolbox-example/src/index.js +2 -1
- package/plugins/package.json +3 -23
- package/public/assets/@mdi/font/css/materialdesignicons.min.css +1 -1
- package/src/actions/StyleSelector.vue +1 -1
- package/src/actions/actionHelper.js +13 -2
- package/src/actions/listActions.d.ts +4 -4
- package/src/actions/listActions.js +2 -2
- package/src/application/VcsApp.vue +96 -31
- package/src/application/VcsApp.vue.d.ts +297 -4
- package/src/application/VcsContainer.vue +26 -9
- package/src/application/VcsContainer.vue.d.ts +237 -0
- package/src/application/VcsMainMap.vue +7 -7
- package/src/application/VcsMainMap.vue.d.ts +2 -2
- package/src/application/VcsNavbar.vue +5 -1
- package/src/application/VcsSplashScreen.vue +24 -26
- package/src/application/VcsTextPageFooter.vue +2 -1
- package/src/components/buttons/VcsActionButtonList.vue +59 -3
- package/src/components/buttons/VcsActionButtonList.vue.d.ts +28 -0
- package/src/components/form-inputs-controls/VcsChipArrayInput.vue +15 -13
- package/src/components/form-inputs-controls/VcsChipArrayInput.vue.d.ts +3 -4
- package/src/components/form-inputs-controls/VcsCoordinate.vue +4 -3
- package/src/components/form-inputs-controls/VcsSelect.vue +1 -4
- package/src/components/form-inputs-controls/VcsSlider.vue +0 -1
- package/src/components/form-inputs-controls/VcsSlider.vue.d.ts +2 -4
- package/src/components/form-inputs-controls/VcsTextArea.vue +1 -4
- package/src/components/form-inputs-controls/VcsTextField.vue +14 -0
- package/src/components/form-inputs-controls/VcsTextField.vue.d.ts +9 -0
- package/src/components/form-inputs-controls/VcsWizardStep.vue +2 -5
- package/src/components/form-inputs-controls/vcsTextField.scss +1 -4
- package/src/components/form-output/VcsFormattedNumber.vue +6 -4
- package/src/components/form-output/VcsMarkdown.vue +15 -12
- package/src/components/form-output/VcsMarkdown.vue.d.ts +1 -0
- package/src/components/form-output/markdownHelper.d.ts +30 -0
- package/src/components/form-output/markdownHelper.js +398 -0
- package/src/components/import/VcsFileDrop.vue +8 -5
- package/src/components/import/VcsImportComponent.vue +4 -3
- package/src/components/import/VcsImportComponent.vue.d.ts +1 -2
- package/src/components/lists/VcsActionList.vue +4 -0
- package/src/components/lists/VcsList.vue +22 -37
- package/src/components/lists/VcsList.vue.d.ts +14 -55
- package/src/components/lists/{VcsListItem.vue → VcsListItemComponent.vue} +17 -1
- package/src/components/lists/VcsListItemComponent.vue.d.ts +69 -0
- package/src/components/lists/VcsTreeview.vue +43 -16
- package/src/components/lists/VcsTreeview.vue.d.ts +14 -3
- package/src/components/lists/VcsTreeviewLeaf.vue +15 -6
- package/src/components/lists/VcsTreeviewSearchbar.vue +2 -2
- package/src/components/notification/VcsHelp.vue +1 -1
- package/src/components/notification/VcsHelp.vue.d.ts +3 -2
- package/src/components/section/VcsExpansionPanel.vue +2 -2
- package/src/components/section/VcsFormSection.vue +10 -4
- package/src/components/section/VcsFormSection.vue.d.ts +1 -2
- package/src/components/style/VcsTextMenu.vue +1 -1
- package/src/components/style/VcsVectorStyleComponent.vue +1 -1
- package/src/components/tables/VcsDataTable.vue +28 -22
- package/src/components/tables/VcsTable.vue +45 -62
- package/src/components/tables/VcsTable.vue.d.ts +30 -17
- package/src/components/tables/VcsTableCell.vue +72 -0
- package/src/components/tables/VcsTableCell.vue.d.ts +13 -0
- package/src/components/vector-properties/VcsFeatureEditingWindow.vue +6 -5
- package/src/components/vector-properties/VcsFeatureTransforms.vue +5 -0
- package/src/components/viewpoint/VcsViewpointComponent.vue +2 -2
- package/src/components/viewpoint/VcsViewpointEditor.vue +2 -2
- package/src/contentTree/LayerTree.vue +9 -27
- package/src/contentTree/LayerTree.vue.d.ts +1 -1
- package/src/contentTree/contentTreeCollection.d.ts +1 -0
- package/src/contentTree/contentTreeCollection.js +45 -11
- package/src/featureInfo/BalloonComponent.vue +14 -15
- package/src/featureInfo/MarkdownBalloonComponent.vue +4 -2
- package/src/featureInfo/MarkdownBalloonComponent.vue.d.ts +2 -2
- package/src/featureInfo/abstractFeatureInfoView.d.ts +6 -0
- package/src/featureInfo/abstractFeatureInfoView.js +15 -7
- package/src/featureInfo/featureInfo.d.ts +5 -5
- package/src/featureInfo/featureInfo.js +51 -31
- package/src/featureInfo/iframeFeatureInfoView.d.ts +8 -2
- package/src/featureInfo/iframeFeatureInfoView.js +15 -5
- package/src/featureInfo/markdownBalloonFeatureInfoView.d.ts +1 -1
- package/src/featureInfo/markdownBalloonFeatureInfoView.js +5 -5
- package/src/featureInfo/markdownFeatureInfoView.d.ts +1 -1
- package/src/featureInfo/markdownFeatureInfoView.js +9 -11
- package/src/featureInfo/tableFeatureInfoView.js +13 -4
- package/src/manager/collectionManager/CollectionComponentList.vue +1 -1
- package/src/manager/collectionManager/CollectionComponentList.vue.d.ts +2 -2
- package/src/manager/collectionManager/collectionComponentClass.d.ts +1 -1
- package/src/manager/collectionManager/collectionComponentClass.js +2 -2
- package/src/manager/collectionManager/editorCollectionComponentClass.js +2 -1
- package/src/manager/panel/PanelComponent.vue +2 -9
- package/src/manager/panel/PanelManagerComponent.vue +7 -3
- package/src/manager/panel/panelHelper.js +3 -3
- package/src/manager/panel/panelManager.d.ts +9 -1
- package/src/manager/panel/panelManager.js +15 -3
- package/src/manager/toolbox/GroupToolboxComponent.vue +8 -4
- package/src/manager/toolbox/GroupToolboxComponent.vue.d.ts +1 -0
- package/src/manager/toolbox/SelectToolboxComponent.vue +7 -4
- package/src/manager/toolbox/SelectToolboxComponent.vue.d.ts +1 -0
- package/src/manager/toolbox/ToolboxManager.vue +9 -6
- package/src/manager/toolbox/ToolboxManager.vue.d.ts +1 -0
- package/src/manager/window/WindowComponent.vue +12 -8
- package/src/manager/window/WindowComponentHeader.vue +29 -8
- package/src/manager/window/WindowComponentHeader.vue.d.ts +2 -0
- package/src/manager/window/WindowManager.vue +2 -2
- package/src/navigation/MapNavigation.vue +20 -0
- package/src/navigation/locatorHelper.js +1 -1
- package/src/navigation/overviewMap.js +1 -1
- package/src/notifier/NotifierComponent.vue +18 -15
- package/src/search/ResultItem.vue +18 -6
- package/src/search/ResultsComponent.vue +31 -20
- package/src/search/ResultsComponent.vue.d.ts +2 -1
- package/src/search/SearchComponent.vue +8 -14
- package/src/search/SearchComponent.vue.d.ts +1 -0
- package/src/siteConfig.js +8 -8
- package/src/styles/_typography.scss +0 -2
- package/src/styles/main.scss +0 -4
- package/src/uiConfig.d.ts +300 -5
- package/src/uiConfig.js +28 -16
- package/src/vcsUiApp.d.ts +7 -7
- package/src/vcsUiApp.js +10 -9
- package/src/vuePlugins/vuetify.js +3 -0
- package/dist/assets/ui-2ab43a16.css +0 -1
- package/dist/assets/vue-03b265aa.js +0 -6096
- package/src/application/markdownHelper.d.ts +0 -12
- package/src/application/markdownHelper.js +0 -70
- package/src/components/lists/VcsListItem.vue.d.ts +0 -27
- package/src/components/notification/VcsTooltip.vue +0 -156
- package/src/components/notification/VcsTooltip.vue.d.ts +0 -27
- package/src/featureInfo/MarkdownComponent.vue +0 -16
- package/src/featureInfo/MarkdownComponent.vue.d.ts +0 -7
- package/src/styles/_theming.scss +0 -73
- package/src/styles/settings.scss +0 -6
- package/src/styles/shades.scss +0 -4
- package/src/styles/variables.scss +0 -140
- package/src/styles/vcsFont.scss +0 -2
- package/src/styles/vcsGrid.scss +0 -3
@@ -1,9 +1,9 @@
|
|
1
1
|
export function setupMapNavigation(app: any): {
|
2
|
-
showMapNavigation: import("vue").
|
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").
|
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.
|
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
|
-
<
|
13
|
-
<
|
14
|
-
|
15
|
-
<
|
16
|
-
<
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
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
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
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.
|
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
|
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="
|
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="
|
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(
|
170
|
-
const newValue = ref(
|
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 =
|
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 =
|
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
|
-
|
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<
|
33
|
-
newValue: import("vue").Ref<
|
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
|
-
|
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="
|
12
|
+
<v-col :key="`coordinate-${idx}`" v-if="!hideZ || idx < 2">
|
13
13
|
<VcsTextField
|
14
|
-
:id="
|
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
|
-
|
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) {
|
@@ -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,
|
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:
|
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">
|
16
|
-
|
17
|
-
|
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>
|