@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.
- package/build/buildHelpers.js +1 -0
- package/build/commonViteConfig.js +1 -0
- package/config/www.config.json +25 -14
- package/dist/assets/cesium.js +1 -1
- package/dist/assets/{core.59d4d1.js → core.a66593.js} +2443 -2457
- package/dist/assets/core.js +1 -1
- package/dist/assets/favicon.decf54cc.svg +10 -0
- package/dist/assets/{index.a3861d4e.js → index.8b833ead.js} +1 -1
- package/dist/assets/{ol.c1c512.js → ol.d4539f.js} +12406 -12152
- package/dist/assets/ol.js +1 -1
- package/dist/assets/ui.d760e4.css +5 -0
- package/dist/assets/{ui.80175f.js → ui.d760e4.js} +5218 -4240
- package/dist/assets/ui.js +1 -1
- package/dist/assets/vue.js +2 -2
- package/dist/assets/vuetify.427322.css +5 -0
- package/dist/assets/{vuetify.efc158.js → vuetify.427322.js} +1 -1
- package/dist/assets/vuetify.js +2 -2
- package/dist/index.html +6 -1
- package/index.html +5 -0
- package/index.js +2 -1
- package/lib/olLib.js +15 -1
- package/package.json +4 -3
- package/plugins/@vcmap/project-selector/ProjectSelectorComponent.vue +1 -1
- package/plugins/@vcmap/theme-changer/ThemeChangerComponent.vue +10 -4
- package/plugins/@vcmap-show-case/form-inputs-example/FormInputsExample.vue +75 -81
- package/plugins/@vcmap-show-case/form-inputs-example/index.js +7 -3
- package/plugins/@vcmap-show-case/form-inputs-example/validation.js +1 -1
- package/plugins/@vcmap-show-case/list-example/ListExample.vue +5 -2
- package/plugins/@vcmap-show-case/wizard-example/wizardExample.vue +57 -23
- package/plugins/package.json +2 -1
- package/src/application/VcsApp.vue +13 -5
- package/src/application/VcsAttributions.vue +2 -3
- package/src/application/VcsAttributionsFooter.vue +10 -16
- package/src/application/VcsNavbar.vue +1 -2
- package/src/application/VcsSettings.vue +21 -8
- package/src/assets/favicon-128.png +0 -0
- package/src/assets/favicon-180.png +0 -0
- package/src/assets/favicon-192.png +0 -0
- package/src/assets/favicon-32.png +0 -0
- package/src/assets/favicon.svg +10 -0
- package/src/components/buttons/VcsButton.vue +2 -3
- package/src/components/form-inputs-controls/VcsCheckbox.vue +46 -26
- package/src/components/form-inputs-controls/VcsFormSection.vue +15 -13
- package/src/components/form-inputs-controls/VcsLabel.vue +10 -1
- package/src/components/form-inputs-controls/VcsRadio.vue +38 -18
- package/src/components/form-inputs-controls/VcsSelect.vue +117 -59
- package/src/components/form-inputs-controls/VcsTextArea.vue +101 -60
- package/src/components/form-inputs-controls/VcsTextField.vue +171 -69
- package/src/components/form-inputs-controls/VcsWizard.vue +20 -14
- package/src/components/form-inputs-controls/VcsWizardStep.vue +18 -16
- package/src/components/form-inputs-controls/composables.js +26 -0
- package/src/components/form-output/VcsFormattedNumber.vue +1 -1
- package/src/components/icons/2DDistanceIcon.vue +0 -3
- package/src/components/icons/3DDistanceIcon.vue +0 -3
- package/src/components/icons/3DHeightIcon.vue +0 -3
- package/src/components/icons/CheckboxCheckedIcon.vue +4 -11
- package/src/components/icons/CheckboxIcon.vue +9 -2
- package/src/components/icons/CheckboxIndeterminateIcon.vue +4 -21
- package/src/components/icons/CommentIcon.vue +1 -5
- package/src/components/icons/ObliqueViewIcon.vue +6 -8
- package/src/components/icons/SimpleCircleOutlinedIcon.vue +1 -1
- package/src/components/icons/SplitViewIcon.vue +0 -4
- package/src/components/icons/ToolsIcon.vue +2 -4
- package/src/components/lists/VcsActionList.vue +0 -1
- package/src/components/lists/VcsList.vue +6 -25
- package/src/components/lists/VcsTreeview.vue +2 -2
- package/src/components/lists/VcsTreeviewLeaf.vue +3 -9
- package/src/components/lists/VcsTreeviewSearchbar.vue +4 -4
- package/src/components/notification/VcsBadge.vue +6 -2
- package/src/components/notification/VcsHelp.vue +39 -0
- package/src/components/tables/VcsTable.vue +70 -24
- package/src/featureInfo/AddressBalloonComponent.vue +1 -1
- package/src/featureInfo/BalloonComponent.vue +14 -9
- package/src/featureInfo/featureInfo.js +25 -7
- package/src/featureInfo/tableFeatureInfoView.js +4 -0
- package/src/i18n/de.js +5 -1
- package/src/i18n/en.js +5 -1
- package/src/legend/styleLegendItem.vue +24 -2
- package/src/legend/vcsLegend.vue +24 -31
- package/src/manager/toolbox/GroupToolboxComponent.vue +2 -3
- package/src/manager/toolbox/SelectToolboxComponent.vue +11 -5
- package/src/manager/toolbox/ToolboxManager.vue +0 -7
- package/src/manager/window/WindowComponent.vue +0 -1
- package/src/manager/window/WindowComponentHeader.vue +2 -2
- package/src/navigation/overviewMap.js +6 -15
- package/src/navigation/tiltSlider.vue +30 -6
- package/src/search/resultsComponent.vue +0 -1
- package/src/search/search.js +7 -17
- package/src/search/searchComponent.vue +6 -7
- package/src/styles/_theming.scss +72 -3
- package/src/styles/_typography.scss +0 -5
- package/src/styles/main.scss +1 -0
- package/src/styles/shades.scss +2 -0
- package/src/styles/variables.scss +40 -4
- package/src/uiConfig.js +1 -0
- package/src/vcsUiApp.js +5 -0
- package/src/vuePlugins/vuetify.js +59 -13
- package/dist/assets/ui.80175f.css +0 -1
- package/dist/assets/vuetify.efc158.css +0 -5
- /package/dist/assets/{cesium.49585c.js → cesium.88cffd.js} +0 -0
- /package/dist/assets/{vue.a08ab1.js → vue.db5102.js} +0 -0
@@ -9,11 +9,7 @@
|
|
9
9
|
d="M10942,13196v-22a1,1,0,1,1,2,0v22a1,1,0,1,1-2,0Zm9.5-9.25v-.5a.5.5,0,0,0-.5-.5h-4v-2h4a.5.5,0,0,0,.5-.5v-.5a.75.75,0,0,1,1.281-.53l2,2a.747.747,0,0,1,0,1.06l-2,2a.757.757,0,0,1-.529.218A.748.748,0,0,1,10951.5,13186.75Zm-18.279.53-2-2a.75.75,0,0,1,0-1.063l2-2a.736.736,0,0,1,.526-.219.747.747,0,0,1,.752.749v.5a.5.5,0,0,0,.5.5h4v2h-4a.5.5,0,0,0-.5.5v.5a.763.763,0,0,1-.218.534.754.754,0,0,1-1.061,0Zm5.779-1.53Zm8-2Z"
|
10
10
|
transform="translate(-10931 -13172.998)"
|
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,9 +1,7 @@
|
|
1
1
|
<!-- eslint-disable max-len -->
|
2
2
|
<template>
|
3
3
|
<svg id="icon_24_tools" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
4
|
-
<
|
5
|
-
|
6
|
-
<path id="Pfad_764" d="M507.363,580.719a1,1,0,0,0-1.827,0l-2,4.5a1,1,0,0,0-.086.406v11.5a3,3,0,0,0,6,0v-11.5a1,1,0,0,0-.087-.406Zm-1.913,6.9h2v7.511h-2Zm1-4.027.9,2.027h-1.8Zm0,14.538a1,1,0,0,1-1-1h2A1,1,0,0,1,506.45,598.125Z" transform="translate(0.275)" fill="currentColor" />
|
7
|
-
</g>
|
4
|
+
<rect width="24" height="24" fill="none" />
|
5
|
+
<path d="M86.444,100.021l.363-.363a4.962,4.962,0,0,0,5.509-6.213,1,1,0,0,0-1.674-.451l-1.021,1.021a1.024,1.024,0,0,1-1.415,0,1,1,0,0,1,0-1.414l1.022-1.021a1,1,0,0,0-.451-1.674,4.962,4.962,0,0,0-6.213,5.51l-.363.363-3.03-3.03a1.008,1.008,0,0,0-.348-.227l-4.6-1.767a1,1,0,0,0-1.292,1.293l1.768,4.6a1,1,0,0,0,.226.348l3.03,3.03-.766.766A4.963,4.963,0,0,0,71.683,107a1,1,0,0,0,.707.71,1.016,1.016,0,0,0,.968-.259l1.02-1.021a1,1,0,1,1,1.415,1.414l-1.022,1.021a1,1,0,0,0,.452,1.674,5.045,5.045,0,0,0,1.286.167,4.951,4.951,0,0,0,4.926-5.677l.766-.766,4.394,4.395a3,3,0,0,0,4.244-4.242Zm-8.765-5.8L76.4,95.5l-.8-2.069Zm.07,2.757,1.414-1.414,1.624,1.624-1.414,1.414Zm1.895,7.01a1,1,0,0,0-.26.962,2.969,2.969,0,0,1-1.588,3.472,3,3,0,0,0-4-4,2.969,2.969,0,0,1,3.472-1.59,1,1,0,0,0,.963-.26l6.127-6.127a1,1,0,0,0,.259-.962A2.972,2.972,0,0,1,86.2,92.018a3.006,3.006,0,0,0,.589,3.412,3.068,3.068,0,0,0,3.412.588,2.966,2.966,0,0,1-3.471,1.588,1,1,0,0,0-.963.26Zm9.78,3.251a1.022,1.022,0,0,1-1.414,0l-4.4-4.4,1.415-1.414,4.394,4.4a1,1,0,0,1,0,1.414" transform="translate(-69.515 -87.739)" fill="currentColor" />
|
8
6
|
</svg>
|
9
7
|
</template>
|
@@ -418,38 +418,19 @@
|
|
418
418
|
|
419
419
|
<style lang="scss" scoped>
|
420
420
|
::v-deep {
|
421
|
-
.v-list{
|
421
|
+
.v-list {
|
422
422
|
.v-list-item {
|
423
423
|
padding: 4px 8px 4px 16px;
|
424
424
|
&:after{
|
425
425
|
display: none;
|
426
426
|
}
|
427
|
-
&.font-weight-bold{
|
428
|
-
.v-list-item__title{
|
427
|
+
&.font-weight-bold {
|
428
|
+
.v-list-item__title {
|
429
429
|
font-weight: 700;
|
430
430
|
}
|
431
431
|
}
|
432
|
-
&.v-list-item--active{
|
433
|
-
padding: 4px 8px 3px 16px;
|
434
|
-
&.theme--light{
|
435
|
-
background-color: var(--v-primary-base);
|
436
|
-
border-bottom: 1px solid var(--v-primary-darken1);
|
437
|
-
}
|
438
|
-
}
|
439
|
-
&.v-list-item.theme--dark{
|
440
|
-
&.v-list-item--active{
|
441
|
-
background-color: var(--v-primary-darken1);
|
442
|
-
border-bottom: 1px solid var(--v-primary-darken2);
|
443
|
-
&:nth-child(even){
|
444
|
-
background-color: var(--v-primary-darken1);
|
445
|
-
}
|
446
|
-
}
|
447
|
-
&:nth-child(even){
|
448
|
-
background-color: rgba(255, 255, 255, 0.15);
|
449
|
-
}
|
450
|
-
}
|
451
432
|
&:nth-child(even) {
|
452
|
-
background-color: var(--v-
|
433
|
+
background-color: var(--v-base-lighten4);
|
453
434
|
}
|
454
435
|
.v-list-item__action {
|
455
436
|
.v-icon {
|
@@ -463,9 +444,9 @@
|
|
463
444
|
.action-btn-wrap {
|
464
445
|
flex: 1 1 auto;
|
465
446
|
}
|
466
|
-
.v-icon{
|
447
|
+
.v-icon {
|
467
448
|
font-size: 16px;
|
468
|
-
.v-icon__component{
|
449
|
+
.v-icon__component {
|
469
450
|
width: 16px;
|
470
451
|
height: 16px;
|
471
452
|
}
|
@@ -32,8 +32,8 @@
|
|
32
32
|
min-height: 40px;
|
33
33
|
}
|
34
34
|
// Border around root nodes with children included
|
35
|
-
> .v-treeview-node {
|
36
|
-
border-bottom: 1px solid var(--v-
|
35
|
+
> .v-treeview-node:not(:last-child) {
|
36
|
+
border-bottom: 1px solid var(--v-base-lighten2);
|
37
37
|
}
|
38
38
|
// Only Root Entries have a bold font
|
39
39
|
> .v-treeview-node > .v-treeview-node__root > .v-treeview-node__content > .v-treeview-node__label {
|
@@ -4,10 +4,11 @@
|
|
4
4
|
v-if="item"
|
5
5
|
>
|
6
6
|
<div
|
7
|
-
class="position-relative col-8 pa-0 d-flex align-center
|
7
|
+
class="position-relative col-8 pa-0 d-flex align-center"
|
8
8
|
>
|
9
9
|
<span
|
10
10
|
v-if="item.icon"
|
11
|
+
class="d-inline-flex"
|
11
12
|
>
|
12
13
|
<v-icon
|
13
14
|
v-if="isStringIcon"
|
@@ -24,7 +25,7 @@
|
|
24
25
|
<span
|
25
26
|
v-bind="attrs"
|
26
27
|
v-on="on"
|
27
|
-
class="
|
28
|
+
class="d-inline-block text-truncate"
|
28
29
|
>{{ $t(item.title) }}</span>
|
29
30
|
</template>
|
30
31
|
</VcsTooltip>
|
@@ -41,13 +42,6 @@
|
|
41
42
|
/>
|
42
43
|
</div>
|
43
44
|
</template>
|
44
|
-
<style lang="css" scoped>
|
45
|
-
.vcs-treeview-leaf .vcs-treeview-item-title{
|
46
|
-
white-space: nowrap;
|
47
|
-
overflow: hidden;
|
48
|
-
text-overflow: ellipsis;
|
49
|
-
}
|
50
|
-
</style>
|
51
45
|
|
52
46
|
<script>
|
53
47
|
import { computed } from 'vue';
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<template>
|
2
|
-
<div class="pa-2
|
2
|
+
<div class="pa-2 base lighten-3 position-relative d-flex flex-row justify-space-between align-center rounded-0">
|
3
3
|
<slot name="prepend">
|
4
4
|
<v-icon
|
5
5
|
class="search-icon my-0 ml-1"
|
@@ -14,7 +14,7 @@
|
|
14
14
|
solo
|
15
15
|
dense
|
16
16
|
hide-details
|
17
|
-
class="searchbar outlined rounded-xl align-center d-flex justify-center
|
17
|
+
class="searchbar outlined rounded-xl align-center d-flex justify-center base lighten-4 pa-1 pl-6"
|
18
18
|
:placeholder="$t(placeholder)"
|
19
19
|
:value="value"
|
20
20
|
v-on="$listeners"
|
@@ -44,7 +44,7 @@
|
|
44
44
|
border-radius: 9999rem;
|
45
45
|
outline-style: none;
|
46
46
|
font-size: 12px;
|
47
|
-
box-shadow: 0 0 0 1px
|
47
|
+
box-shadow: 0 0 0 1px var(--v-base-lighten2);
|
48
48
|
|
49
49
|
&:focus {
|
50
50
|
box-shadow: 0 0 0 1px var(--v-primary-base);
|
@@ -81,7 +81,7 @@
|
|
81
81
|
.v-input.outlined {
|
82
82
|
outline-style: none;
|
83
83
|
font-size: 12px;
|
84
|
-
box-shadow: 0 0 0 1px
|
84
|
+
box-shadow: 0 0 0 1px var(--v-base-lighten2);
|
85
85
|
|
86
86
|
&:focus,
|
87
87
|
&.v-input--is-focused {
|
@@ -3,9 +3,13 @@
|
|
3
3
|
</template>
|
4
4
|
|
5
5
|
<style lang="scss" scoped>
|
6
|
-
|
7
|
-
|
6
|
+
@import '../../styles/shades.scss';
|
7
|
+
.v-application .theme--light .badge {
|
8
|
+
border: 1px solid map-get($shades, 'white') !important;
|
8
9
|
}
|
10
|
+
.v-application .theme--dark .badge {
|
11
|
+
border: 1px solid map-get($shades, 'black') !important;
|
12
|
+
}
|
9
13
|
</style>
|
10
14
|
|
11
15
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<template>
|
2
|
+
<v-alert
|
3
|
+
:value="show"
|
4
|
+
dense
|
5
|
+
text
|
6
|
+
class="mb-0 font-weight-regular rounded-0 px-2 pt-2"
|
7
|
+
>
|
8
|
+
<slot>
|
9
|
+
<span>{{ $t(text) }}</span>
|
10
|
+
</slot>
|
11
|
+
</v-alert>
|
12
|
+
</template>
|
13
|
+
|
14
|
+
<script>
|
15
|
+
import { VAlert } from 'vuetify/lib';
|
16
|
+
|
17
|
+
/**
|
18
|
+
* @description Wraps Vuetify VAlert for displaying help.
|
19
|
+
* @vue-data {slot} [#default] - Slot to specify html based help. Gets precedence over text prop.
|
20
|
+
* @vue-prop {boolean} show - If help should be displayed. If false, component is completely hidden.
|
21
|
+
* @vue-prop {string} [text] - Optional help text. Must be plain string. Use 'help' slot for html based help texts. Help slot has precedence over text prop.
|
22
|
+
*/
|
23
|
+
export default {
|
24
|
+
name: 'VcsHelp',
|
25
|
+
components: {
|
26
|
+
VAlert,
|
27
|
+
},
|
28
|
+
props: {
|
29
|
+
text: {
|
30
|
+
type: String,
|
31
|
+
default: undefined,
|
32
|
+
},
|
33
|
+
show: {
|
34
|
+
type: Boolean,
|
35
|
+
required: true,
|
36
|
+
},
|
37
|
+
},
|
38
|
+
};
|
39
|
+
</script>
|
@@ -15,27 +15,36 @@
|
|
15
15
|
:search="search"
|
16
16
|
:custom-filter="handleFilter"
|
17
17
|
hide-default-footer
|
18
|
-
class="vcs-table"
|
18
|
+
class="vcs-table rounded-0"
|
19
19
|
>
|
20
20
|
<!-- eslint-disable-next-line -->
|
21
21
|
<template #item.key="{ item }">
|
22
|
-
<td
|
22
|
+
<td
|
23
|
+
:title="$t(item.key)"
|
24
|
+
class="vcs-table px-2 overflow-max-width rounded-0 noBorder"
|
25
|
+
:style="{'max-width': headers[0].width }"
|
26
|
+
>
|
23
27
|
{{ $t(item.key) }}
|
24
28
|
</td>
|
25
29
|
</template>
|
26
30
|
<!-- eslint-disable-next-line -->
|
27
31
|
<template #item.value="{ item }">
|
28
|
-
<td
|
29
|
-
|
32
|
+
<td
|
33
|
+
:title="$t(item.value)"
|
34
|
+
class="vcs-table px-2 overflow-max-width rounded-0 noBorder"
|
35
|
+
:style="{'max-width': headers[1].width }"
|
36
|
+
>
|
37
|
+
<span :class="{ 'single-line': !/\s/.test(item.value), 'multi-line': /\s/.test(item.value), }">
|
38
|
+
{{ $t(item.value) }}
|
39
|
+
</span>
|
30
40
|
</td>
|
31
41
|
</template>
|
32
|
-
<template #footer>
|
42
|
+
<template #footer v-if="items.length > itemsPerPageRef">
|
33
43
|
<v-divider />
|
34
|
-
<v-container class="pa-2 vcs-pagination-bar
|
44
|
+
<v-container class="pa-2 vcs-pagination-bar">
|
35
45
|
<v-row
|
36
46
|
dense
|
37
47
|
no-gutters
|
38
|
-
align="center"
|
39
48
|
justify="center"
|
40
49
|
>
|
41
50
|
<v-menu offset-y dense>
|
@@ -291,46 +300,83 @@
|
|
291
300
|
</script>
|
292
301
|
|
293
302
|
<style lang="scss" scoped>
|
294
|
-
|
303
|
+
@import '../../styles/shades.scss';
|
304
|
+
|
305
|
+
.single-line {
|
306
|
+
display: block;
|
307
|
+
white-space: nowrap;
|
308
|
+
overflow: hidden;
|
309
|
+
text-overflow: ellipsis;
|
310
|
+
}
|
311
|
+
.multi-line {
|
312
|
+
display: -webkit-box;
|
313
|
+
-webkit-box-orient: vertical;
|
314
|
+
-webkit-line-clamp: 3;
|
315
|
+
overflow: hidden;
|
316
|
+
height: auto;
|
317
|
+
max-height: 96px;
|
318
|
+
}
|
319
|
+
|
320
|
+
.noBorder {
|
321
|
+
border-bottom: none !important;
|
322
|
+
}
|
323
|
+
|
324
|
+
::v-deep {
|
295
325
|
.vcs-table {
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
326
|
+
tbody tr {
|
327
|
+
&:hover {
|
328
|
+
background-color: transparent !important;
|
329
|
+
}
|
330
|
+
&:nth-child(odd) {
|
331
|
+
background-color: var(--v-base-lighten4) !important;
|
302
332
|
}
|
303
|
-
|
333
|
+
}
|
334
|
+
td {
|
335
|
+
font-size: 14px !important;
|
336
|
+
&.v-data-table__mobile-row {
|
304
337
|
justify-content: left;
|
305
338
|
height: 27px;
|
306
339
|
min-height: auto;
|
307
340
|
}
|
308
341
|
}
|
309
|
-
th.sortable{
|
342
|
+
th.sortable {
|
310
343
|
padding: 0 8px;
|
311
|
-
span{
|
344
|
+
span {
|
312
345
|
vertical-align: middle;
|
313
346
|
padding: 0 4px 0 0;
|
314
347
|
}
|
315
348
|
}
|
349
|
+
&.theme--light {
|
350
|
+
thead tr th {
|
351
|
+
color: map-get($shades, 'black') !important;
|
352
|
+
}
|
353
|
+
}
|
354
|
+
&.theme--dark {
|
355
|
+
thead tr th {
|
356
|
+
color: map-get($shades, 'white') !important;
|
357
|
+
}
|
358
|
+
}
|
316
359
|
}
|
317
|
-
.v-data-table__mobile-row__cell{
|
318
|
-
td.vcs-table.overflow-max-width{
|
360
|
+
.v-data-table__mobile-row__cell {
|
361
|
+
td.vcs-table.overflow-max-width {
|
319
362
|
max-width: 260px;
|
320
363
|
}
|
321
364
|
}
|
322
|
-
.v-btn.vcs-button--small{
|
365
|
+
.v-btn.vcs-button--small {
|
323
366
|
height: 100% !important;
|
324
367
|
display: block;
|
325
368
|
}
|
326
369
|
}
|
327
|
-
|
328
|
-
|
370
|
+
|
371
|
+
.vcs-pagination-bar {
|
372
|
+
.vcs-button-wrap {
|
329
373
|
height: 25px;
|
330
|
-
border: 1px solid
|
374
|
+
border: 1px solid;
|
331
375
|
padding: 0 4px;
|
332
|
-
background-color: var(--v-basic-base);
|
333
376
|
border-radius: 4px;
|
377
|
+
&:hover {
|
378
|
+
border: 1px solid var(--v-primary-base);
|
379
|
+
}
|
334
380
|
}
|
335
381
|
}
|
336
382
|
</style>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<template>
|
2
2
|
<v-card
|
3
|
-
class="mx-auto
|
3
|
+
class="mx-auto elevation-0 rounded-0"
|
4
4
|
max-width="400"
|
5
5
|
v-if="position"
|
6
6
|
>
|
@@ -16,8 +16,10 @@
|
|
16
16
|
</v-icon>
|
17
17
|
</v-list-item-avatar>
|
18
18
|
<v-list-item-content class="py-2 pr-1 align-self-start">
|
19
|
-
<v-list-item-title
|
20
|
-
|
19
|
+
<v-list-item-title>
|
20
|
+
<h3 class="font-weight-bold">
|
21
|
+
{{ $t(balloonTitle) }}
|
22
|
+
</h3>
|
21
23
|
</v-list-item-title>
|
22
24
|
<v-list-item-subtitle v-if="balloonSubtitle">
|
23
25
|
{{ $t(balloonSubtitle) }}
|
@@ -28,15 +30,16 @@
|
|
28
30
|
small
|
29
31
|
icon="mdi-close-thick"
|
30
32
|
tooltip="components.close"
|
33
|
+
class="mt-1 mr-1"
|
31
34
|
/>
|
32
35
|
</v-list-item>
|
33
36
|
</slot>
|
34
37
|
|
35
38
|
<v-divider />
|
36
39
|
|
37
|
-
<v-card class="overflow-y-auto py-2 elevation-0" max-height="250">
|
40
|
+
<v-card class="overflow-y-auto py-2 elevation-0" max-height="250" color="transparent">
|
38
41
|
<slot :attrs="{...$props, ...$attrs}">
|
39
|
-
<v-list v-for="(value, name, index) in attributes" :key="`attribute-${index}`">
|
42
|
+
<v-list v-for="(value, name, index) in attributes" :key="`attribute-${index}`" color="transparent">
|
40
43
|
<v-list-item class="px-2">
|
41
44
|
<v-list-item-content>
|
42
45
|
<v-list-item-title>
|
@@ -150,6 +153,8 @@
|
|
150
153
|
</script>
|
151
154
|
|
152
155
|
<style lang="scss">
|
156
|
+
@import '../styles/shades.scss';
|
157
|
+
|
153
158
|
.balloon {
|
154
159
|
z-index: 0 !important;
|
155
160
|
}
|
@@ -166,11 +171,11 @@
|
|
166
171
|
display: block;
|
167
172
|
width: 0;
|
168
173
|
}
|
169
|
-
.
|
170
|
-
border-color:
|
174
|
+
.theme--light .balloon:after {
|
175
|
+
border-color: map-get($shades, 'white') transparent;
|
171
176
|
}
|
172
|
-
.
|
173
|
-
border-color:
|
177
|
+
.theme--dark .balloon:after {
|
178
|
+
border-color: map-get($shades, 'black') transparent;
|
174
179
|
}
|
175
180
|
.balloon .v-list-item .v-list-item__title,
|
176
181
|
.balloon .v-list-item .v-list-item__subtitle {
|
@@ -33,7 +33,7 @@ import TableFeatureInfoView from './tableFeatureInfoView.js';
|
|
33
33
|
import IframeFeatureInfoView from './iframeFeatureInfoView.js';
|
34
34
|
import AddressBalloonFeatureInfoView from './addressBalloonFeatureInfoView.js';
|
35
35
|
import BalloonFeatureInfoView from './balloonFeatureInfoView.js';
|
36
|
-
import {
|
36
|
+
import { getDefaultPrimaryColor } from '../vuePlugins/vuetify.js';
|
37
37
|
import { ToolboxType } from '../manager/toolbox/toolboxManager.js';
|
38
38
|
|
39
39
|
/** @typedef {import("ol").Feature<import("ol/geom/Geometry").default>|import("@vcmap-cesium/engine").Cesium3DTileFeature|import("@vcmap-cesium/engine").Cesium3DTilePointFeature|import("@vcmap-cesium/engine").Entity} FeatureType */
|
@@ -126,6 +126,7 @@ export function createFeatureInfoSession(app) {
|
|
126
126
|
|
127
127
|
/**
|
128
128
|
* @param {VcsUiApp} app
|
129
|
+
* @returns {function():void}
|
129
130
|
*/
|
130
131
|
function setupFeatureInfoTool(app) {
|
131
132
|
/** @type {FeatureInfoSession|null} */
|
@@ -153,6 +154,9 @@ function setupFeatureInfoTool(app) {
|
|
153
154
|
},
|
154
155
|
};
|
155
156
|
|
157
|
+
if (app.uiConfig.getByKey('startingFeatureInfo')?.value !== false) {
|
158
|
+
action.callback();
|
159
|
+
}
|
156
160
|
app.toolboxManager.add(
|
157
161
|
{
|
158
162
|
id: 'featureInfo',
|
@@ -161,6 +165,13 @@ function setupFeatureInfoTool(app) {
|
|
161
165
|
},
|
162
166
|
vcsAppSymbol,
|
163
167
|
);
|
168
|
+
|
169
|
+
return () => {
|
170
|
+
if (session) {
|
171
|
+
session.stop();
|
172
|
+
}
|
173
|
+
app.toolboxManager.remove('featureInfo');
|
174
|
+
};
|
164
175
|
}
|
165
176
|
|
166
177
|
/**
|
@@ -266,7 +277,11 @@ class FeatureInfo {
|
|
266
277
|
this.clear();
|
267
278
|
}
|
268
279
|
}),
|
269
|
-
this._app.contextAdded.addEventListener(() =>
|
280
|
+
this._app.contextAdded.addEventListener(() => {
|
281
|
+
this.clear();
|
282
|
+
this._destroyFeatureInfoTool();
|
283
|
+
this._destroyFeatureInfoTool = setupFeatureInfoTool(this._app);
|
284
|
+
}),
|
270
285
|
this._app.contextRemoved.addEventListener(() => this.clear()),
|
271
286
|
];
|
272
287
|
/**
|
@@ -275,8 +290,11 @@ class FeatureInfo {
|
|
275
290
|
* @private
|
276
291
|
*/
|
277
292
|
this._scratchLayer = null;
|
278
|
-
|
279
|
-
|
293
|
+
/**
|
294
|
+
* @type {function():void}
|
295
|
+
* @private
|
296
|
+
*/
|
297
|
+
this._destroyFeatureInfoTool = setupFeatureInfoTool(this._app);
|
280
298
|
}
|
281
299
|
|
282
300
|
/**
|
@@ -386,7 +404,7 @@ class FeatureInfo {
|
|
386
404
|
[featureId]: getHighlightStyle(
|
387
405
|
feature,
|
388
406
|
layer,
|
389
|
-
this._app.uiConfig.config.value.primaryColor ??
|
407
|
+
this._app.uiConfig.config.value.primaryColor ?? getDefaultPrimaryColor(),
|
390
408
|
),
|
391
409
|
});
|
392
410
|
this._clearHighlightingCb = () => this._scratchLayer.featureVisibility.unHighlight([featureId]);
|
@@ -396,7 +414,7 @@ class FeatureInfo {
|
|
396
414
|
[featureId]: getHighlightStyle(
|
397
415
|
feature,
|
398
416
|
layer,
|
399
|
-
this._app.uiConfig.config.value.primaryColor ??
|
417
|
+
this._app.uiConfig.config.value.primaryColor ?? getDefaultPrimaryColor(),
|
400
418
|
),
|
401
419
|
});
|
402
420
|
this._clearHighlightingCb = () => layer.featureVisibility.unHighlight([featureId]);
|
@@ -458,7 +476,7 @@ class FeatureInfo {
|
|
458
476
|
destroy() {
|
459
477
|
this._clearInternal();
|
460
478
|
this._featureChanged.destroy();
|
461
|
-
this.
|
479
|
+
this._destroyFeatureInfoTool();
|
462
480
|
if (this._scratchLayer) {
|
463
481
|
this._app.layers.remove(this._scratchLayer);
|
464
482
|
this._scratchLayer.destroy();
|
@@ -77,6 +77,10 @@ class TableFeatureInfoView extends AbstractFeatureInfoView {
|
|
77
77
|
itemsPerPageArray: this.itemsPerPageArray,
|
78
78
|
showSearchbar: this.showSearchbar,
|
79
79
|
searchbarPlaceholder: this.searchbarPlaceholder,
|
80
|
+
headers: [
|
81
|
+
{ text: 'components.vcsTable.key', value: 'key', width: '128px' },
|
82
|
+
{ text: 'components.vcsTable.value', value: 'value', width: '192px' },
|
83
|
+
],
|
80
84
|
};
|
81
85
|
}
|
82
86
|
|
package/src/i18n/de.js
CHANGED
@@ -65,8 +65,12 @@ const messages = {
|
|
65
65
|
settings: {
|
66
66
|
title: 'Einstellungen',
|
67
67
|
tooltip: 'Einstellungen',
|
68
|
-
languageTitle: 'Spracheinstellungen',
|
69
68
|
languageSelector: 'Sprache',
|
69
|
+
theme: {
|
70
|
+
title: 'Farbschema',
|
71
|
+
dark: 'Dunkel',
|
72
|
+
light: 'Hell',
|
73
|
+
},
|
70
74
|
},
|
71
75
|
featureInfo: {
|
72
76
|
activateToolTitle: 'Informationstool aktivieren',
|
package/src/i18n/en.js
CHANGED
@@ -65,8 +65,12 @@ const messages = {
|
|
65
65
|
settings: {
|
66
66
|
title: 'Settings',
|
67
67
|
tooltip: 'Settings',
|
68
|
-
languageTitle: 'Language settings',
|
69
68
|
languageSelector: 'Language',
|
69
|
+
theme: {
|
70
|
+
title: 'Color theme',
|
71
|
+
dark: 'Dark',
|
72
|
+
light: 'Light',
|
73
|
+
},
|
70
74
|
},
|
71
75
|
featureInfo: {
|
72
76
|
activateToolTitle: 'Activate Infotool',
|
@@ -6,7 +6,11 @@
|
|
6
6
|
:key="idx"
|
7
7
|
:class="{ 'w-full': item.colNr === 1, 'w-half': item.colNr !== 1 }"
|
8
8
|
>
|
9
|
-
<v-list-item
|
9
|
+
<v-list-item
|
10
|
+
dense
|
11
|
+
class="pa-0"
|
12
|
+
:class="determineInnerPadding(idx)"
|
13
|
+
>
|
10
14
|
<v-list-item-icon class="pr-2">
|
11
15
|
<v-img
|
12
16
|
v-if="row.type === StyleRowType.Icon || row.type === StyleRowType.Shape"
|
@@ -126,7 +130,24 @@
|
|
126
130
|
required: true,
|
127
131
|
},
|
128
132
|
},
|
129
|
-
setup() {
|
133
|
+
setup(props) {
|
134
|
+
/**
|
135
|
+
* Determines if a list item has padding right or left, so it has correct spacing to second row.
|
136
|
+
* @param {number} index The index of the list item. Starts with 0.
|
137
|
+
* @returns {string} Vuetify padding helper.
|
138
|
+
*/
|
139
|
+
function determineInnerPadding(index) {
|
140
|
+
// check if there are more than two columns
|
141
|
+
if (props.item.colNr !== 1) {
|
142
|
+
// check if even number. If so, it is located in the left column and needs padding on the right.
|
143
|
+
if (index % 2 === 0) {
|
144
|
+
return 'pr-2';
|
145
|
+
} else {
|
146
|
+
return 'pl-2';
|
147
|
+
}
|
148
|
+
}
|
149
|
+
return '';
|
150
|
+
}
|
130
151
|
return {
|
131
152
|
StyleRowType,
|
132
153
|
getImageSrcFromShape,
|
@@ -136,6 +157,7 @@
|
|
136
157
|
}
|
137
158
|
return null;
|
138
159
|
},
|
160
|
+
determineInnerPadding,
|
139
161
|
};
|
140
162
|
},
|
141
163
|
};
|