@vcmap/ui 5.0.0-rc.15 → 5.0.0-rc.17
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 +7 -1
- package/config/base.config.json +7 -45
- package/config/dev.config.json +5 -1
- package/config/www.config.json +14 -13
- package/dist/assets/{cesium.2e288a.js → cesium.41de56.js} +0 -0
- package/dist/assets/cesium.js +1 -1
- package/dist/assets/{core.8014d3.js → core.af84e3.js} +6077 -4544
- package/dist/assets/core.js +1 -1
- package/dist/assets/{index.3f74fa92.js → index.5b773cad.js} +1 -1
- package/dist/assets/{ol.31c3a5.js → ol.5c7490.js} +0 -0
- package/dist/assets/ol.js +1 -1
- package/dist/assets/ui.dffe32.css +1 -0
- package/dist/assets/{ui.36f84f.js → ui.dffe32.js} +7243 -6234
- package/dist/assets/ui.js +1 -1
- package/dist/assets/{vue.a39c10.js → vue.25da17.js} +0 -0
- package/dist/assets/vue.js +2 -2
- package/dist/assets/{vuetify.378637.css → vuetify.e4ece7.css} +1 -1
- package/dist/assets/{vuetify.378637.js → vuetify.e4ece7.js} +5 -2
- package/dist/assets/vuetify.js +2 -2
- package/dist/index.html +1 -1
- package/index.html +77 -0
- package/index.js +18 -3
- package/package.json +4 -2
- package/plugins/@vcmap/create-link/fallbackCreateLink.vue +4 -1
- package/plugins/@vcmap/create-link/index.js +4 -1
- package/plugins/@vcmap/pluginExample/exampleActions.js +45 -0
- package/plugins/@vcmap/pluginExample/index.js +26 -2
- package/plugins/@vcmap/pluginExample/pluginExampleComponent.vue +77 -42
- package/plugins/@vcmap/search-nominatim/nominatim.js +1 -1
- package/plugins/@vcmap/theme-changer/ThemeChangerComponent.vue +4 -2
- package/plugins/categoryTest/Categories.vue +27 -13
- package/plugins/categoryTest/Category.vue +7 -1
- package/plugins/categoryTest/index.js +1 -1
- package/plugins/notifier/index.js +31 -0
- package/plugins/notifier/notifierTester.vue +88 -0
- package/plugins/package.json +1 -1
- package/plugins/test/allIconsComponent.vue +5 -5
- package/plugins/test/emptyComponent.vue +1 -1
- package/plugins/test/index.js +27 -3
- package/plugins/test/myCustomHeader.vue +9 -1
- package/plugins/test/testList.vue +290 -0
- package/plugins/test/vcsContent.vue +1 -1
- package/plugins/test/windowManagerExample.vue +12 -7
- package/plugins/wizardExample/index.js +41 -0
- package/plugins/wizardExample/wizardExample.vue +77 -0
- package/src/actions/actionHelper.js +10 -9
- package/src/application/VcsApp.vue +43 -34
- package/src/components/form-inputs-controls/VcsCheckbox.vue +1 -0
- package/src/components/form-inputs-controls/VcsFormSection.vue +23 -15
- package/src/components/form-inputs-controls/VcsSelect.vue +33 -1
- package/src/components/form-inputs-controls/VcsTextField.vue +11 -3
- package/src/components/form-inputs-controls/VcsWizard.vue +133 -0
- package/src/components/imageElementInjector.vue +22 -0
- package/src/components/lists/VcsList.vue +468 -0
- package/src/components/lists/VcsTreeview.vue +1 -2
- package/src/components/lists/VcsTreeviewLeaf.vue +18 -50
- package/src/components/lists/VcsTreeviewSearchbar.vue +1 -23
- package/src/components/tables/VcsTable.vue +13 -1
- package/src/contentTree/LayerTree.vue +1 -1
- package/src/contentTree/contentTreeCollection.js +9 -0
- package/src/contentTree/contentTreeItem.js +13 -13
- package/src/contentTree/layerContentTreeItem.js +1 -1
- package/src/contentTree/subContentTreeItem.js +1 -1
- package/src/contentTree/vcsObjectContentTreeItem.js +1 -1
- package/src/featureInfo/BalloonComponent.vue +13 -8
- package/src/featureInfo/balloonFeatureInfoView.js +16 -22
- package/src/featureInfo/balloonHelper.js +26 -5
- package/src/featureInfo/featureInfo.js +14 -2
- package/src/featureInfo/featureInfoInteraction.js +1 -1
- package/src/i18n/de.js +13 -1
- package/src/i18n/en.js +13 -1
- package/src/icons/+all.js +4 -0
- package/src/icons/WandIcon.vue +63 -0
- package/src/manager/categoryManager/CategoryComponent.vue +115 -0
- package/src/manager/categoryManager/CategoryComponentList.vue +57 -0
- package/src/manager/categoryManager/CategoryManager.vue +35 -0
- package/src/manager/categoryManager/categoryManager.js +251 -165
- package/src/manager/contextMenu/contextMenuManager.js +8 -2
- package/src/manager/window/WindowComponent.vue +51 -70
- package/src/manager/window/WindowComponentHeader.vue +81 -13
- package/src/manager/window/WindowManager.vue +54 -30
- package/src/manager/window/windowHelper.js +341 -0
- package/src/manager/window/windowManager.js +173 -151
- package/src/navigation/overviewMap.js +10 -9
- package/src/notifier/notifier.js +120 -0
- package/src/notifier/notifierComponent.vue +84 -0
- package/src/styles/variables.scss +19 -3
- package/src/vcsUiApp.js +26 -2
- package/src/vuePlugins/vuetify.js +2 -0
- package/dist/assets/ui.36f84f.css +0 -1
- package/src/manager/categoryManager/ComponentsManager.vue +0 -30
@@ -1,16 +1,19 @@
|
|
1
1
|
|
2
2
|
function loadCss(href) {
|
3
|
+
const base64url = href
|
4
|
+
.replace(/-/g, '+')
|
5
|
+
.replace(/_/g, '/');
|
3
6
|
return new Promise((resolve, reject) => {
|
4
7
|
const elem = document.createElement('link');
|
5
8
|
elem.rel = 'stylesheet';
|
6
|
-
elem.href =
|
9
|
+
elem.href = base64url;
|
7
10
|
elem.defer = false;
|
8
11
|
elem.async = false;
|
9
12
|
elem.onload = resolve;
|
10
13
|
elem.onerror = reject;
|
11
14
|
document.head.appendChild(elem);
|
12
15
|
});
|
13
|
-
} await loadCss('./assets/vuetify.
|
16
|
+
} await loadCss('./assets/vuetify.e4ece7.css');import v from "./vue.25da17.js";
|
14
17
|
const Ne = v.extend().extend({
|
15
18
|
name: "themeable",
|
16
19
|
provide() {
|
package/dist/assets/vuetify.js
CHANGED
package/dist/index.html
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
<head>
|
4
4
|
<meta charset="utf-8" />
|
5
5
|
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
6
|
-
<script type="module" crossorigin src="./assets/index.
|
6
|
+
<script type="module" crossorigin src="./assets/index.5b773cad.js"></script>
|
7
7
|
</head>
|
8
8
|
<body style="height: 100vH;">
|
9
9
|
<noscript>
|
package/index.html
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html class="vcs-ui" lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8" />
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
6
|
+
</head>
|
7
|
+
<body style="height: 100vH;">
|
8
|
+
<noscript>
|
9
|
+
<strong>...</strong>
|
10
|
+
</noscript>
|
11
|
+
<div id="app">
|
12
|
+
<div id="loading-wrapper">
|
13
|
+
<div id="loading-text">LOADING</div>
|
14
|
+
<div id="loading-content"></div>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
<style>
|
18
|
+
#loading-wrapper {
|
19
|
+
position: fixed;
|
20
|
+
width: 100%;
|
21
|
+
height: 100%;
|
22
|
+
left: 0;
|
23
|
+
top: 0;
|
24
|
+
}
|
25
|
+
|
26
|
+
#loading-text {
|
27
|
+
display: block;
|
28
|
+
position: absolute;
|
29
|
+
top: 50%;
|
30
|
+
left: 50%;
|
31
|
+
color: #409d76;
|
32
|
+
width: 100px;
|
33
|
+
height: 30px;
|
34
|
+
margin: -7px 0 0 -45px;
|
35
|
+
text-align: center;
|
36
|
+
font-family: 'PT Sans Narrow', sans-serif;
|
37
|
+
font-size: 20px;
|
38
|
+
}
|
39
|
+
|
40
|
+
#loading-content {
|
41
|
+
display: block;
|
42
|
+
position: relative;
|
43
|
+
left: 50%;
|
44
|
+
top: 50%;
|
45
|
+
width: 170px;
|
46
|
+
height: 170px;
|
47
|
+
margin: -85px 0 0 -85px;
|
48
|
+
}
|
49
|
+
|
50
|
+
#loading-content {
|
51
|
+
border: 3px solid transparent;
|
52
|
+
border-top-color: #409d76;
|
53
|
+
border-bottom-color: #409d76;
|
54
|
+
border-radius: 50%;
|
55
|
+
-webkit-animation: loader 2s linear infinite;
|
56
|
+
-moz-animation: loader 2s linear infinite;
|
57
|
+
-o-animation: loader 2s linear infinite;
|
58
|
+
animation: loader 2s linear infinite;
|
59
|
+
}
|
60
|
+
|
61
|
+
@keyframes loader {
|
62
|
+
0% {
|
63
|
+
-webkit-transform: rotate(0deg);
|
64
|
+
-ms-transform: rotate(0deg);
|
65
|
+
transform: rotate(0deg);
|
66
|
+
}
|
67
|
+
|
68
|
+
100% {
|
69
|
+
-webkit-transform: rotate(360deg);
|
70
|
+
-ms-transform: rotate(360deg);
|
71
|
+
transform: rotate(360deg);
|
72
|
+
}
|
73
|
+
}
|
74
|
+
</style>
|
75
|
+
<script type="module" src="./start.js"></script>
|
76
|
+
</body>
|
77
|
+
</html>
|
package/index.js
CHANGED
@@ -13,6 +13,7 @@ export {
|
|
13
13
|
} from './src/actions/actionHelper.js';
|
14
14
|
export {
|
15
15
|
createStateRefAction,
|
16
|
+
StateActionState,
|
16
17
|
} from './src/actions/stateRefAction.js';
|
17
18
|
|
18
19
|
export { default as VcsNavbar } from './src/application/VcsNavbar.vue';
|
@@ -20,7 +21,7 @@ export {
|
|
20
21
|
default as VcsApp,
|
21
22
|
setupMapNavbar,
|
22
23
|
setupPluginMountedListeners,
|
23
|
-
|
24
|
+
setupCategoryManagerWindow,
|
24
25
|
} from './src/application/VcsApp.vue';
|
25
26
|
export { default as VcsAppWrapper } from './src/application/vcsAppWrapper.vue';
|
26
27
|
export { default as VcsMap } from './src/application/VcsMap.vue';
|
@@ -51,18 +52,29 @@ export {
|
|
51
52
|
default as WindowManager,
|
52
53
|
WindowSlot,
|
53
54
|
WindowPositions,
|
55
|
+
posToPixel,
|
56
|
+
windowPositionFromOptions,
|
57
|
+
} from './src/manager/window/windowManager.js';
|
58
|
+
export {
|
54
59
|
WindowAlignment,
|
55
60
|
getFittedWindowPositionOptions,
|
56
61
|
getFittedWindowPositionOptionsFromMapEvent,
|
57
62
|
getWindowPositionOptions,
|
58
63
|
getWindowPositionOptionsFromMapEvent,
|
59
|
-
|
64
|
+
posToNumber,
|
65
|
+
posToPercent,
|
66
|
+
optionsFromWindowPosition,
|
67
|
+
updateWindowPosition,
|
68
|
+
clipToTargetSize,
|
69
|
+
moveWindow,
|
70
|
+
applyPositionOnTarget,
|
71
|
+
} from './src/manager/window/windowHelper.js';
|
60
72
|
|
61
73
|
export { default as ButtonManager } from './src/manager/buttonManager.js';
|
62
74
|
export { default as NavbarManager, ButtonLocation, getActionsByLocation } from './src/manager/navbarManager.js';
|
63
75
|
export { default as ToolboxManager, ToolboxType } from './src/manager/toolbox/toolboxManager.js';
|
64
76
|
export { default as CategoryManager } from './src/manager/categoryManager/categoryManager.js';
|
65
|
-
export { default as
|
77
|
+
export { default as CategoryManagerComponent } from './src/manager/categoryManager/CategoryManager.vue';
|
66
78
|
export { default as ContextMenuManager } from './src/manager/contextMenu/contextMenuManager.js';
|
67
79
|
export { default as ContextMenuComponent } from './src/manager/contextMenu/contextMenuComponent.vue';
|
68
80
|
export { default as ContextMenuInteraction } from './src/manager/contextMenu/contextMenuInteraction.js';
|
@@ -102,6 +114,7 @@ export {
|
|
102
114
|
} from './src/pluginHelper.js';
|
103
115
|
export { getStateFromURL, createEmptyState, setStateToUrl } from './src/state.js';
|
104
116
|
export { default as VcsUiApp } from './src/vcsUiApp.js';
|
117
|
+
export { default as Notifier, NotificationType } from './src/notifier/notifier.js';
|
105
118
|
export { default as Icons } from './src/icons/+all.js';
|
106
119
|
|
107
120
|
export { default as VcsButton } from './src/components/buttons/VcsButton.vue';
|
@@ -123,11 +136,13 @@ export { default as VcsFormSection } from './src/components/form-inputs-controls
|
|
123
136
|
export { default as VcsSelect } from './src/components/form-inputs-controls/VcsSelect.vue';
|
124
137
|
export { default as VcsTextField } from './src/components/form-inputs-controls/VcsTextField.vue';
|
125
138
|
export { default as VcsTextArea } from './src/components/form-inputs-controls/VcsTextArea.vue';
|
139
|
+
export { default as VcsWizard } from './src/components/form-inputs-controls/VcsWizard.vue';
|
126
140
|
|
127
141
|
export { default as VcsFormattedNumber } from './src/components/form-output/VcsFormattedNumber.vue';
|
128
142
|
|
129
143
|
export { default as VcsActionList, validateAction, validateActions } from './src/components/lists/VcsActionList.vue';
|
130
144
|
// export { default as VcsEndlessList } from './src/components/lists/VcsEndlessList.vue';
|
145
|
+
export { default as VcsList } from './src/components/lists/VcsList.vue';
|
131
146
|
export { default as VcsTreeview } from './src/components/lists/VcsTreeview.vue';
|
132
147
|
export { default as VcsTreeviewLeaf } from './src/components/lists/VcsTreeviewLeaf.vue';
|
133
148
|
// export { default as VcsTreeviewSearchbar } from './src/components/lists/VcsTreeviewSearchbar.vue';
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@vcmap/ui",
|
3
|
-
"version": "5.0.0-rc.
|
3
|
+
"version": "5.0.0-rc.17",
|
4
4
|
"author": "Virtual City Systems",
|
5
5
|
"license": "MIT",
|
6
6
|
"scripts": {
|
@@ -22,6 +22,7 @@
|
|
22
22
|
"files": [
|
23
23
|
"index.js",
|
24
24
|
"start.js",
|
25
|
+
"index.html",
|
25
26
|
"map.config.json",
|
26
27
|
"dist/",
|
27
28
|
"src/",
|
@@ -42,7 +43,7 @@
|
|
42
43
|
},
|
43
44
|
"peerDependencies": {
|
44
45
|
"@vcmap/cesium": "~1.97.1",
|
45
|
-
"@vcmap/core": "~5.0.0-rc.
|
46
|
+
"@vcmap/core": "~5.0.0-rc.25",
|
46
47
|
"ol": "~7.1.0",
|
47
48
|
"vue": "~2.7.3",
|
48
49
|
"vuetify": "~2.6.7"
|
@@ -51,6 +52,7 @@
|
|
51
52
|
"@vcmap/rollup-plugin-vcs-ol": "^1.0.2",
|
52
53
|
"@vcsuite/eslint-config": "^2.1.1",
|
53
54
|
"@vitest/coverage-c8": "^0.24.3",
|
55
|
+
"@vue/test-utils": "^1.3.3",
|
54
56
|
"eslint": "^8.9.0",
|
55
57
|
"eslint-import-resolver-alias": "^1.1.2",
|
56
58
|
"jest-canvas-mock": "^2.4.0",
|
@@ -24,7 +24,8 @@
|
|
24
24
|
</template>
|
25
25
|
|
26
26
|
<script>
|
27
|
-
import {
|
27
|
+
import { VSheet } from 'vuetify/lib';
|
28
|
+
import { VcsTextField, VcsButton, setStateToUrl, NotificationType } from '@vcmap/ui';
|
28
29
|
import { getCurrentInstance, inject, ref } from 'vue';
|
29
30
|
|
30
31
|
export default {
|
@@ -38,6 +39,7 @@
|
|
38
39
|
components: {
|
39
40
|
VcsTextField,
|
40
41
|
VcsButton,
|
42
|
+
VSheet,
|
41
43
|
},
|
42
44
|
setup(props) {
|
43
45
|
const localLink = ref(props.link);
|
@@ -48,6 +50,7 @@
|
|
48
50
|
const element = proxy.$el.querySelector('input');
|
49
51
|
element.select();
|
50
52
|
document.execCommand('copy');
|
53
|
+
app.notifier.add({ title: 'createLink.title', message: 'createLink.copied', type: NotificationType.SUCCESS });
|
51
54
|
};
|
52
55
|
|
53
56
|
const refresh = async () => {
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { ButtonLocation, setStateToUrl, WindowSlot } from '@vcmap/ui';
|
1
|
+
import { ButtonLocation, NotificationType, setStateToUrl, WindowSlot } from '@vcmap/ui';
|
2
2
|
import FallbackCreateLink from './fallbackCreateLink.vue';
|
3
3
|
|
4
4
|
const name = '@vcmap/create-link';
|
@@ -34,6 +34,7 @@ export default function createLink() {
|
|
34
34
|
tooltip: 'Dialog zum kopieren des Applikationslinks anzeigen.',
|
35
35
|
copyToClipboard: 'Applikationslink in Zwischenablage kopieren',
|
36
36
|
refreshTooltip: 'Applikationslink aktualisieren',
|
37
|
+
copied: 'Applikationslink in Zwischenablage kopiert.'
|
37
38
|
},
|
38
39
|
},
|
39
40
|
en: {
|
@@ -43,6 +44,7 @@ export default function createLink() {
|
|
43
44
|
tooltip: 'Open dialog to copy application link to clipboard',
|
44
45
|
copyToClipboard: 'Copy application link to clipboard',
|
45
46
|
refreshTooltip: 'Refresh application link',
|
47
|
+
copied: 'Application link copied to clipboard.',
|
46
48
|
},
|
47
49
|
},
|
48
50
|
},
|
@@ -69,6 +71,7 @@ export default function createLink() {
|
|
69
71
|
setStateToUrl(state, url);
|
70
72
|
if (navigator.clipboard) {
|
71
73
|
await navigator.clipboard.writeText(url.toString());
|
74
|
+
app.notifier.add({ title: 'createLink.title', message: 'createLink.copied', type: NotificationType.SUCCESS });
|
72
75
|
} else {
|
73
76
|
createFallbackWindow(app, url.toString());
|
74
77
|
}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import { reactive, ref } from 'vue';
|
2
|
+
|
3
|
+
export default function createExampleActions() {
|
4
|
+
const dense = ref(false);
|
5
|
+
const showSection = ref(true);
|
6
|
+
|
7
|
+
const actions = [
|
8
|
+
reactive({
|
9
|
+
name: 'denseSelection',
|
10
|
+
title: 'change row height',
|
11
|
+
icon: dense.value ? 'mdi-arrow-split-horizontal' : 'mdi-arrow-collapse-vertical',
|
12
|
+
callback() {
|
13
|
+
dense.value = !dense.value;
|
14
|
+
this.icon = dense.value ? 'mdi-arrow-split-horizontal' : 'mdi-arrow-collapse-vertical';
|
15
|
+
},
|
16
|
+
}),
|
17
|
+
{ name: 'noIcon', title: 'another action without icon', callback: () => {} },
|
18
|
+
reactive({
|
19
|
+
name: 'toggleSection',
|
20
|
+
title: 'toggle section',
|
21
|
+
icon: showSection.value ? '$vcsMinus' : '$vcsPlus',
|
22
|
+
callback() {
|
23
|
+
showSection.value = !showSection.value;
|
24
|
+
this.icon = showSection.value ? '$vcsMinus' : '$vcsPlus';
|
25
|
+
},
|
26
|
+
}),
|
27
|
+
reactive({
|
28
|
+
name: 'toggleIcon',
|
29
|
+
title: 'toggle switch example',
|
30
|
+
icon: showSection.value ? 'mdi-toggle-switch' : 'mdi-toggle-switch-off',
|
31
|
+
active: showSection.value,
|
32
|
+
callback() {
|
33
|
+
showSection.value = !showSection.value;
|
34
|
+
this.active = showSection.value;
|
35
|
+
},
|
36
|
+
}),
|
37
|
+
{
|
38
|
+
name: 'alert',
|
39
|
+
icon: 'mdi-message-text',
|
40
|
+
callback() { alert('alert'); },
|
41
|
+
},
|
42
|
+
];
|
43
|
+
|
44
|
+
return { actions, dense, showSection };
|
45
|
+
}
|
@@ -7,6 +7,7 @@ import packageJSON from './package.json';
|
|
7
7
|
import defaultConfig from './config.json';
|
8
8
|
import { conditionalTest, isValidEmail, isValidText } from './validation.js';
|
9
9
|
import pluginExampleComponent from './pluginExampleComponent.vue';
|
10
|
+
import createExampleActions from './exampleActions.js';
|
10
11
|
|
11
12
|
/**
|
12
13
|
* @returns {Logger}
|
@@ -25,6 +26,7 @@ function getLogger() {
|
|
25
26
|
/**
|
26
27
|
* @typedef PluginExampleState
|
27
28
|
* @property {string} selected
|
29
|
+
* @property {Array<string>} selectedMultiple
|
28
30
|
* @property {string} conditionalInput
|
29
31
|
* @property {string} initialTextInput
|
30
32
|
* @property {number} numberInput
|
@@ -74,11 +76,14 @@ export default function (config) {
|
|
74
76
|
*/
|
75
77
|
const pluginState = reactive({
|
76
78
|
selected: pluginConfig.selectOptions.value[0],
|
79
|
+
selectedMultiple: [],
|
77
80
|
conditionalInput: '',
|
78
81
|
initialTextInput: pluginConfig.initialTextInput.value,
|
79
82
|
numberInput: 100.156,
|
80
|
-
checkboxInput:
|
83
|
+
checkboxInput: true,
|
81
84
|
email: '',
|
85
|
+
prependedInput: '',
|
86
|
+
files: [],
|
82
87
|
});
|
83
88
|
|
84
89
|
|
@@ -148,6 +153,8 @@ export default function (config) {
|
|
148
153
|
getSerializedState,
|
149
154
|
setSerializedState,
|
150
155
|
onVcsAppMounted(app) {
|
156
|
+
const { actions, showSection, dense } = createExampleActions();
|
157
|
+
|
151
158
|
const { action, destroy } = createToggleAction(
|
152
159
|
{
|
153
160
|
name: 'Plugin Example',
|
@@ -159,8 +166,15 @@ export default function (config) {
|
|
159
166
|
component: pluginExampleComponent,
|
160
167
|
slot: WindowSlot.DYNAMIC_LEFT,
|
161
168
|
state: {
|
162
|
-
headerTitle: 'pluginExample.
|
169
|
+
headerTitle: 'pluginExample.title',
|
163
170
|
headerIcon: '$vcsCircle',
|
171
|
+
headerActions: actions,
|
172
|
+
infoUrl: 'https://vc.systems',
|
173
|
+
},
|
174
|
+
props: {
|
175
|
+
actions,
|
176
|
+
showSection,
|
177
|
+
dense,
|
164
178
|
},
|
165
179
|
},
|
166
180
|
app.windowManager,
|
@@ -194,6 +208,11 @@ export default function (config) {
|
|
194
208
|
help2desc: 'InitialTextInput bleibt solange im Lade-Status, bis sich der Wert \'myInitialText\' ändert.',
|
195
209
|
help3: 'Geben Sie eine Email Adresse ein',
|
196
210
|
help3desc: 'Email Adressen werden validiert.',
|
211
|
+
numbers: {
|
212
|
+
one: 'eins',
|
213
|
+
two: 'zwei',
|
214
|
+
three: 'drei',
|
215
|
+
},
|
197
216
|
},
|
198
217
|
},
|
199
218
|
en: {
|
@@ -208,6 +227,11 @@ export default function (config) {
|
|
208
227
|
help2desc: 'InitialTextInput text field stays in loading state, as long as \'myInitialText\' is not changed.',
|
209
228
|
help3: 'Enter an email address.',
|
210
229
|
help3desc: 'Emails get validated.',
|
230
|
+
numbers: {
|
231
|
+
one: 'one',
|
232
|
+
two: 'two',
|
233
|
+
three: 'three',
|
234
|
+
},
|
211
235
|
},
|
212
236
|
},
|
213
237
|
},
|
@@ -1,30 +1,9 @@
|
|
1
1
|
<template>
|
2
2
|
<v-form v-model="isValid">
|
3
3
|
<VcsFormSection
|
4
|
-
|
5
|
-
:
|
6
|
-
|
7
|
-
name: 'denseSelection',
|
8
|
-
title: 'change row height',
|
9
|
-
icon: dense ? 'mdi-arrow-split-horizontal' : 'mdi-arrow-collapse-vertical',
|
10
|
-
callback: () => this.dense = !this.dense
|
11
|
-
},
|
12
|
-
{ name: 'noIcon', title: 'another action without icon', callback: () => {} },
|
13
|
-
{
|
14
|
-
name: 'toggleSection',
|
15
|
-
title: 'toggle section',
|
16
|
-
icon: showSection ? '$vcsMinus' : '$vcsPlus',
|
17
|
-
callback: () => this.showSection = !this.showSection
|
18
|
-
},
|
19
|
-
{
|
20
|
-
name: 'toggleIcon',
|
21
|
-
title: 'toggle switch example',
|
22
|
-
icon: showSection ? 'mdi-toggle-switch' : 'mdi-toggle-switch-off',
|
23
|
-
active: showSection,
|
24
|
-
callback: () => this.showSection = !this.showSection
|
25
|
-
},
|
26
|
-
{ name: 'alert', icon: 'mdi-message-text', callback: alertAction },
|
27
|
-
]"
|
4
|
+
heading="VcsFormSection Select & Text Inputs"
|
5
|
+
:header-actions="actions"
|
6
|
+
:action-button-list-overflow-count="4"
|
28
7
|
>
|
29
8
|
<template #help>
|
30
9
|
<ol>
|
@@ -131,11 +110,50 @@
|
|
131
110
|
/>
|
132
111
|
</v-col>
|
133
112
|
</v-row>
|
113
|
+
<v-row
|
114
|
+
:dense="dense"
|
115
|
+
no-gutters
|
116
|
+
align="center"
|
117
|
+
>
|
118
|
+
<v-col>
|
119
|
+
<VcsLabel html-for="prependedInput" :dense="dense">
|
120
|
+
String With Icon
|
121
|
+
</VcsLabel>
|
122
|
+
</v-col>
|
123
|
+
<v-col>
|
124
|
+
<VcsTextField
|
125
|
+
id="prependedInput"
|
126
|
+
:dense="dense"
|
127
|
+
prepend-icon="mdi-map-marker"
|
128
|
+
v-model="state.prependedInput"
|
129
|
+
/>
|
130
|
+
</v-col>
|
131
|
+
</v-row>
|
132
|
+
<v-row
|
133
|
+
:dense="dense"
|
134
|
+
no-gutters
|
135
|
+
align="center"
|
136
|
+
>
|
137
|
+
<v-col>
|
138
|
+
<VcsLabel html-for="fileInput" :dense="dense">
|
139
|
+
Email
|
140
|
+
</VcsLabel>
|
141
|
+
</v-col>
|
142
|
+
<v-col>
|
143
|
+
<VcsTextField
|
144
|
+
id="fileInput"
|
145
|
+
:dense="dense"
|
146
|
+
type="file"
|
147
|
+
multiple
|
148
|
+
v-model="state.files"
|
149
|
+
/>
|
150
|
+
</v-col>
|
151
|
+
</v-row>
|
134
152
|
</v-container>
|
135
153
|
</template>
|
136
154
|
</VcsFormSection>
|
137
155
|
<VcsFormSection
|
138
|
-
|
156
|
+
heading="VcsFormSection Number Inputs"
|
139
157
|
help-text="pluginExample.help"
|
140
158
|
>
|
141
159
|
<template #default>
|
@@ -236,7 +254,7 @@
|
|
236
254
|
</template>
|
237
255
|
</VcsFormSection>
|
238
256
|
<VcsFormSection
|
239
|
-
|
257
|
+
heading="VcsFormSection Radio & Checkbox"
|
240
258
|
>
|
241
259
|
<template #default>
|
242
260
|
<v-container>
|
@@ -286,34 +304,48 @@
|
|
286
304
|
</template>
|
287
305
|
</vcsformsection>
|
288
306
|
<VcsFormSection
|
289
|
-
|
307
|
+
heading="VcsFormSection Mixed Inputs"
|
290
308
|
>
|
309
|
+
<template #header="{ heading }">
|
310
|
+
<article class="pa-2 secondary text--primary">
|
311
|
+
{{ heading }}
|
312
|
+
<h3>This is a custom header using header slot</h3>
|
313
|
+
</article>
|
314
|
+
</template>
|
291
315
|
<template #default>
|
292
316
|
<v-container>
|
293
317
|
<v-row
|
294
318
|
:dense="dense"
|
295
|
-
no-gutters
|
296
319
|
align="center"
|
297
320
|
>
|
298
|
-
<v-col cols="1"
|
321
|
+
<v-col cols="1">
|
299
322
|
<VcsLabel html-for="textInput" :dense="dense" class="text-caption">
|
300
323
|
1
|
301
324
|
</VcsLabel>
|
302
325
|
</v-col>
|
303
|
-
<v-col>
|
326
|
+
<v-col cols="3">
|
304
327
|
<VcsSelect
|
305
|
-
:items="[
|
328
|
+
:items="[
|
329
|
+
{value: 'one', i18n: 'pluginExample.numbers.one'},
|
330
|
+
{value: 'two', i18n: 'pluginExample.numbers.two'},
|
331
|
+
{value: 'three', i18n: 'pluginExample.numbers.three'}]"
|
332
|
+
:item-text="item => item.i18n"
|
306
333
|
:dense="dense"
|
307
334
|
/>
|
308
335
|
</v-col>
|
309
|
-
<v-col>
|
336
|
+
<v-col cols="3">
|
310
337
|
<VcsSelect
|
311
|
-
:items="[
|
338
|
+
:items="[
|
339
|
+
{value: 'Anna', fullName: 'Annabella'},
|
340
|
+
{value: 'Bella', fullName: 'Belladonna'},
|
341
|
+
{value: 'Claudi', fullName: 'Claudine'}]"
|
342
|
+
:item-text="item => item.fullName"
|
312
343
|
:dense="dense"
|
313
344
|
multiple
|
345
|
+
v-model="state.selectedMultiple"
|
314
346
|
/>
|
315
347
|
</v-col>
|
316
|
-
<v-col>
|
348
|
+
<v-col cols="5">
|
317
349
|
<VcsTextField
|
318
350
|
id="textInput"
|
319
351
|
clearable
|
@@ -374,9 +406,17 @@
|
|
374
406
|
VContainer,
|
375
407
|
},
|
376
408
|
props: {
|
377
|
-
|
378
|
-
type:
|
379
|
-
|
409
|
+
actions: {
|
410
|
+
type: Array,
|
411
|
+
required: true,
|
412
|
+
},
|
413
|
+
dense: {
|
414
|
+
type: Object,
|
415
|
+
required: true,
|
416
|
+
},
|
417
|
+
showSection: {
|
418
|
+
type: Object,
|
419
|
+
required: true,
|
380
420
|
},
|
381
421
|
},
|
382
422
|
setup() {
|
@@ -386,8 +426,6 @@
|
|
386
426
|
watch(plugin.state, () => { newUpdate.value = true; });
|
387
427
|
|
388
428
|
return {
|
389
|
-
showSection: ref(true),
|
390
|
-
dense: ref(true),
|
391
429
|
// no object-destruction of reactive objects! or use toRef()
|
392
430
|
state: plugin.state,
|
393
431
|
// do not put the whole config here, since it would become reactive
|
@@ -403,9 +441,6 @@
|
|
403
441
|
console.log(plugin.getSerializedState());
|
404
442
|
newUpdate.value = false;
|
405
443
|
},
|
406
|
-
alertAction() {
|
407
|
-
alert('alert');
|
408
|
-
},
|
409
444
|
};
|
410
445
|
},
|
411
446
|
};
|
@@ -14,7 +14,7 @@ function createResultItem(item) {
|
|
14
14
|
feature[featureInfoViewSymbol] = new AddressBalloonFeatureInfoView({
|
15
15
|
type: 'AddressBalloonFeatureInfoView',
|
16
16
|
name: 'NominatimSearchBalloon',
|
17
|
-
|
17
|
+
balloonSubtitle: '',
|
18
18
|
addressName: 'building',
|
19
19
|
street: 'road',
|
20
20
|
number: 'house_number',
|
@@ -76,11 +76,12 @@
|
|
76
76
|
VAvatar,
|
77
77
|
VIcon,
|
78
78
|
VDivider,
|
79
|
+
VSwitch,
|
79
80
|
} from 'vuetify/lib';
|
80
81
|
|
81
82
|
export default {
|
82
83
|
name: 'ThemeChanger',
|
83
|
-
components:
|
84
|
+
components: {
|
84
85
|
VCard,
|
85
86
|
VCardText,
|
86
87
|
VChip,
|
@@ -91,7 +92,8 @@
|
|
91
92
|
VAvatar,
|
92
93
|
VIcon,
|
93
94
|
VDivider,
|
94
|
-
|
95
|
+
VSwitch,
|
96
|
+
},
|
95
97
|
setup() {
|
96
98
|
const app = inject('vcsApp');
|
97
99
|
const plugin = app.plugins.getByKey('@vcmap/theme-changer');
|