@vcmap/ui 6.1.0-rc.6 → 6.1.0
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/config/base.config.json +7 -3
- package/config/cluster.config.json +5 -14
- package/config/dev.config.json +175 -56
- package/config/projects.config.json +2 -1
- package/config/splashscreen.config.json +6 -10
- package/config/vectorTile.config.json +42 -1
- package/dist/assets/{cesium-f5e8e354.js → cesium-664ad022.js} +53 -23
- package/dist/assets/cesium.js +1 -1
- package/dist/assets/{core-c134a524.js → core-841b71a4.js} +8458 -5828
- package/dist/assets/core.js +1 -1
- package/dist/assets/{ol-2752311f.js → ol-2e095c08.js} +87 -37
- package/dist/assets/ol.js +1 -1
- package/dist/assets/ui-2fd6f47d.css +1 -0
- package/dist/assets/{ui-83514586.js → ui-2fd6f47d.js} +21376 -20063
- package/dist/assets/ui.js +1 -1
- package/dist/assets/vue.js +1 -1
- package/dist/assets/{vuetify-5dbe2644.css → vuetify-4bc77ff7.css} +2 -2
- package/dist/assets/{vuetify-5dbe2644.js → vuetify-4bc77ff7.js} +7520 -7373
- package/dist/assets/vuetify.js +1 -1
- package/dist/index.html +1 -1
- package/index.d.ts +15 -5
- package/index.html +1 -1
- package/index.js +14 -5
- package/package.json +12 -8
- package/plugins/@vcmap-show-case/theming-example/src/index.js +1 -0
- package/plugins/@vcmap-show-case/vector-properties-example/src/LayerSettings.vue +39 -0
- package/plugins/@vcmap-show-case/vector-properties-example/src/VectorPropertiesExample.vue +3 -0
- package/plugins/@vcmap-show-case/vector-properties-example/src/lib.js +13 -0
- package/plugins/@vcmap-show-case/window-tester/src/WindowExample.vue +9 -0
- package/plugins/package.json +7 -5
- package/src/actions/actionHelper.d.ts +6 -0
- package/src/actions/actionHelper.js +22 -0
- package/src/actions/deepPickingAction.d.ts +23 -0
- package/src/actions/deepPickingAction.js +399 -0
- package/src/application/MapsGroupMobileMenu.vue +105 -0
- package/src/application/MapsGroupMobileMenu.vue.d.ts +7 -0
- package/src/application/VcsApp.vue +51 -24
- package/src/application/VcsApp.vue.d.ts +9 -2
- package/src/application/VcsAttributionsFooter.vue +1 -0
- package/src/application/VcsContainer.vue +36 -13
- package/src/application/VcsContainer.vue.d.ts +7 -0
- package/src/application/VcsMobileMenuList.vue +111 -0
- package/src/application/VcsMobileMenuList.vue.d.ts +2 -0
- package/src/application/VcsNavbar.vue +15 -3
- package/src/application/VcsNavbarMobile.vue +206 -0
- package/src/application/VcsNavbarMobile.vue.d.ts +42 -0
- package/src/application/VcsPositionDisplay.vue +1 -0
- package/src/application/VcsSplashScreen.vue +39 -7
- package/src/application/VcsSplashScreen.vue.d.ts +6 -0
- package/src/application/uiConfigHelper.d.ts +12 -0
- package/src/application/uiConfigHelper.js +37 -0
- package/src/components/buttons/VcsActionButtonList.vue +1 -0
- package/src/components/buttons/VcsToolButton.vue +8 -1
- package/src/components/buttons/VcsToolButton.vue.d.ts +1 -0
- package/src/components/form-inputs-controls/VcsSelect.vue +8 -6
- package/src/components/form-output/VcsTemplateMarkdown.vue +43 -0
- package/src/components/form-output/VcsTemplateMarkdown.vue.d.ts +9 -0
- package/src/components/icons/+all.d.ts +5 -0
- package/src/components/icons/+all.js +14 -0
- package/src/components/lists/VcsActionList.vue +1 -0
- package/src/components/lists/VcsGroupedList.vue +2 -1
- package/src/components/lists/VcsListItemComponent.vue +1 -0
- package/src/components/lists/VcsTreeNode.vue +11 -2
- package/src/components/lists/VcsTreeview.vue +40 -3
- package/src/components/lists/VcsTreeview.vue.d.ts +1 -0
- package/src/components/lists/VcsTreeviewTitle.vue +8 -1
- package/src/components/style/{MenuWrapper.vue → StyleMenuWrapper.vue} +2 -1
- package/src/components/style/VcsFillMenu.vue +4 -4
- package/src/components/style/VcsImageMenu.vue +4 -4
- package/src/components/style/VcsStrokeMenu.vue +4 -4
- package/src/components/style/VcsTextMenu.vue +4 -4
- package/src/contentTree/LayerTree.vue +8 -46
- package/src/contentTree/LayerTree.vue.d.ts +1 -3
- package/src/contentTree/contentTreeCollection.d.ts +7 -0
- package/src/contentTree/contentTreeCollection.js +31 -10
- package/src/contentTree/contentTreeItem.d.ts +4 -4
- package/src/contentTree/contentTreeItem.js +2 -2
- package/src/contentTree/flightContentTreeItem.d.ts +8 -1
- package/src/contentTree/flightContentTreeItem.js +26 -3
- package/src/contentTree/groupContentTreeItem.d.ts +21 -0
- package/src/contentTree/groupContentTreeItem.js +32 -2
- package/src/contentTree/layerContentTreeItem.d.ts +8 -1
- package/src/contentTree/layerContentTreeItem.js +26 -4
- package/src/contentTree/layerGroupContentTreeItem.d.ts +6 -0
- package/src/contentTree/layerGroupContentTreeItem.js +27 -3
- package/src/contentTree/nodeContentTreeItem.d.ts +21 -0
- package/src/contentTree/nodeContentTreeItem.js +31 -2
- package/src/contentTree/obliqueCollectionContentTreeItem.d.ts +6 -0
- package/src/contentTree/obliqueCollectionContentTreeItem.js +22 -2
- package/src/contentTree/wmsChildContentTreeItem.d.ts +56 -0
- package/src/contentTree/wmsChildContentTreeItem.js +159 -0
- package/src/contentTree/wmsGroupContentTreeItem.d.ts +171 -0
- package/src/contentTree/wmsGroupContentTreeItem.js +619 -0
- package/src/featureInfo/BalloonComponent.vue +6 -6
- package/src/featureInfo/ClusterFeatureComponent.vue +47 -11
- package/src/featureInfo/ClusterFeatureComponent.vue.d.ts +1 -0
- package/src/featureInfo/MarkdownBalloonComponent.vue +3 -9
- package/src/featureInfo/MarkdownBalloonComponent.vue.d.ts +1 -11
- package/src/featureInfo/balloonFeatureInfoView.d.ts +3 -0
- package/src/featureInfo/balloonFeatureInfoView.js +78 -11
- package/src/featureInfo/balloonHelper.js +9 -13
- package/src/featureInfo/featureInfo.d.ts +32 -7
- package/src/featureInfo/featureInfo.js +192 -93
- package/src/featureInfo/markdownBalloonFeatureInfoView.d.ts +0 -6
- package/src/featureInfo/markdownBalloonFeatureInfoView.js +5 -14
- package/src/featureInfo/markdownFeatureInfoView.d.ts +2 -8
- package/src/featureInfo/markdownFeatureInfoView.js +6 -15
- package/src/i18n/de.d.ts +64 -50
- package/src/i18n/de.js +9 -0
- package/src/i18n/en.d.ts +64 -50
- package/src/i18n/en.js +9 -0
- package/src/legend/VcsLegend.vue +21 -2
- package/src/legend/VcsLegend.vue.d.ts +1 -0
- package/src/legend/legendHelper.d.ts +0 -13
- package/src/legend/legendHelper.js +3 -27
- package/src/manager/navbarManager.d.ts +14 -1
- package/src/manager/navbarManager.js +22 -2
- package/src/manager/toolbox/GroupToolboxComponent.vue +17 -3
- package/src/manager/toolbox/GroupToolboxComponent.vue.d.ts +1 -0
- package/src/manager/toolbox/SelectToolboxComponent.vue +17 -3
- package/src/manager/toolbox/SelectToolboxComponent.vue.d.ts +1 -0
- package/src/manager/toolbox/ToolboxManagerComponent.vue +45 -14
- package/src/manager/toolbox/ToolboxManagerComponent.vue.d.ts +9 -0
- package/src/manager/toolbox/toolboxManager.d.ts +2 -1
- package/src/manager/toolbox/toolboxManager.js +13 -1
- package/src/manager/window/WindowComponent.vue +3 -2
- package/src/manager/window/WindowComponentHeader.vue +9 -1
- package/src/manager/window/WindowComponentHeader.vue.d.ts +1 -0
- package/src/manager/window/WindowManager.vue +175 -30
- package/src/manager/window/WindowManager.vue.d.ts +5 -0
- package/src/manager/window/windowManager.d.ts +2 -2
- package/src/manager/window/windowManager.js +12 -10
- package/src/navigation/MapNavigation.vue +29 -19
- package/src/navigation/MapNavigation.vue.d.ts +1 -0
- package/src/notifier/NotifierComponent.vue +1 -0
- package/src/search/ResultsComponent.vue +44 -17
- package/src/search/ResultsComponent.vue.d.ts +11 -1
- package/src/search/SearchComponent.vue +60 -9
- package/src/search/SearchComponent.vue.d.ts +2 -0
- package/src/search/search.js +3 -16
- package/src/state.d.ts +2 -1
- package/src/state.js +2 -1
- package/src/uiConfig.d.ts +9 -0
- package/src/uiConfig.js +1 -0
- package/src/vuePlugins/vuetify.d.ts +4 -0
- package/src/vuePlugins/vuetify.js +49 -3
- package/dist/assets/ui-83514586.css +0 -1
- /package/dist/assets/{vue-f8b1b5f8.js → vue-71fd14e8.js} +0 -0
- /package/src/components/style/{MenuWrapper.vue.d.ts → StyleMenuWrapper.vue.d.ts} +0 -0
@@ -5,10 +5,11 @@
|
|
5
5
|
:options="splashScreen"
|
6
6
|
v-model="showSplashScreen"
|
7
7
|
></VcsSplashScreen>
|
8
|
-
<VcsNavbar v-if="!config.hideHeader" />
|
8
|
+
<VcsNavbar v-if="!config.hideHeader && smAndUp && !mobileLandscape" />
|
9
|
+
<VcsNavbarMobile v-if="!config.hideHeader && xs && !mobileLandscape" />
|
9
10
|
<VcsContainer :attribution-action="attributionAction" />
|
10
11
|
<v-footer
|
11
|
-
v-if="showFooter"
|
12
|
+
v-if="showFooter && !mobileLandscape"
|
12
13
|
app
|
13
14
|
absolute
|
14
15
|
:height="footerHeight"
|
@@ -32,6 +33,9 @@
|
|
32
33
|
:attribution-action="attributionAction"
|
33
34
|
/>
|
34
35
|
</v-footer>
|
36
|
+
<p v-if="mobileLandscape" class="mobileRotatedWarning">
|
37
|
+
{{ $st('footer.mobile.rotationWarning') }}
|
38
|
+
</p>
|
35
39
|
</v-container>
|
36
40
|
</template>
|
37
41
|
|
@@ -39,6 +43,17 @@
|
|
39
43
|
:deep(.v-application--wrap) {
|
40
44
|
min-height: fit-content;
|
41
45
|
}
|
46
|
+
.mobileRotatedWarning {
|
47
|
+
bottom: 0px;
|
48
|
+
z-index: 5;
|
49
|
+
position: fixed;
|
50
|
+
background-color: rgba(var(--v-theme-surface-light), 0.5);
|
51
|
+
color: rgb(var(--v-theme-on-surface));
|
52
|
+
backdrop-filter: blur(1px);
|
53
|
+
-webkit-backdrop-filter: blur(1px);
|
54
|
+
padding: 5px;
|
55
|
+
border-radius: 4px;
|
56
|
+
}
|
42
57
|
</style>
|
43
58
|
|
44
59
|
<script>
|
@@ -58,11 +73,13 @@
|
|
58
73
|
import { ButtonLocation } from '../manager/navbarManager.js';
|
59
74
|
import { vcsAppSymbol } from '../pluginHelper.js';
|
60
75
|
import VcsNavbar from './VcsNavbar.vue';
|
76
|
+
import VcsNavbarMobile from './VcsNavbarMobile.vue';
|
61
77
|
import {
|
62
78
|
createLinkAction,
|
63
79
|
createMapButtonAction,
|
64
80
|
createToggleAction,
|
65
81
|
} from '../actions/actionHelper.js';
|
82
|
+
import { setupDeepPicking } from '../actions/deepPickingAction.js';
|
66
83
|
import VcsSettings from './VcsSettings.vue';
|
67
84
|
import { WindowSlot } from '../manager/window/windowManager.js';
|
68
85
|
import CollectionManager from '../manager/collectionManager/CollectionManager.vue';
|
@@ -70,20 +87,21 @@
|
|
70
87
|
createVcsThemes,
|
71
88
|
setTheme,
|
72
89
|
useFontSize,
|
90
|
+
isMobileLandscape,
|
73
91
|
} from '../vuePlugins/vuetify.js';
|
74
92
|
import VcsLegend from '../legend/VcsLegend.vue';
|
75
93
|
import { getLegendEntries } from '../legend/legendHelper.js';
|
76
94
|
import VcsAttributionsFooter from './VcsAttributionsFooter.vue';
|
77
95
|
import VcsObliqueFooter from './VcsObliqueFooter.vue';
|
78
96
|
import VcsTextPageFooter from './VcsTextPageFooter.vue';
|
79
|
-
import VcsSplashScreen, {
|
97
|
+
import VcsSplashScreen, {
|
98
|
+
shouldShowSplashSceen,
|
99
|
+
} from './VcsSplashScreen.vue';
|
80
100
|
import VcsTextPage from './VcsTextPage.vue';
|
81
101
|
import VcsAttributions from './VcsAttributions.vue';
|
82
102
|
import { getAttributions } from './attributionsHelper.js';
|
83
103
|
import VcsDefaultLogoMobile from '../logo-mobile.svg';
|
84
104
|
import VcsPositionDisplay from './VcsPositionDisplay.vue';
|
85
|
-
import { getFromLocalStorage, hideSplashScreenKey } from '../localStorage.js';
|
86
|
-
import { name as packageName } from '../../package.json';
|
87
105
|
|
88
106
|
/**
|
89
107
|
* This helper checks the uiConfig and depending on the value will setup/teardown the providedSetupFunction
|
@@ -188,6 +206,7 @@
|
|
188
206
|
},
|
189
207
|
vcsAppSymbol,
|
190
208
|
ButtonLocation.MAP,
|
209
|
+
{ mobile: true, tablet: true, desktop: true },
|
191
210
|
);
|
192
211
|
mapButtonActionDestroy[name] = () => {
|
193
212
|
app.navbarManager.remove(`mapButton-${name}`);
|
@@ -257,16 +276,18 @@
|
|
257
276
|
},
|
258
277
|
vcsAppSymbol,
|
259
278
|
ButtonLocation.CONTENT,
|
279
|
+
{ mobile: true, tablet: true, desktop: true },
|
260
280
|
);
|
261
281
|
}
|
262
282
|
};
|
263
|
-
|
283
|
+
const { xs } = useDisplay();
|
264
284
|
let currentEntryLength = entries.length;
|
265
285
|
const watchEntries = watch(entries, (newValue) => {
|
266
286
|
if (
|
267
287
|
app.uiConfig.config.openLegendOnAdd &&
|
268
288
|
newValue.length > currentEntryLength &&
|
269
|
-
!app.windowManager.has(legendComponentId)
|
289
|
+
!app.windowManager.has(legendComponentId) &&
|
290
|
+
!xs.value
|
270
291
|
) {
|
271
292
|
app.windowManager.add(
|
272
293
|
{
|
@@ -373,6 +394,7 @@
|
|
373
394
|
},
|
374
395
|
vcsAppSymbol,
|
375
396
|
ButtonLocation.MENU,
|
397
|
+
{ mobile: true, tablet: true, desktop: true },
|
376
398
|
);
|
377
399
|
return () => {
|
378
400
|
customScreenDestroy();
|
@@ -406,11 +428,11 @@
|
|
406
428
|
* @returns {WatchStopHandle}
|
407
429
|
*/
|
408
430
|
function setupSplashScreen(app) {
|
431
|
+
const { config, showSplashScreen } = app.uiConfig;
|
409
432
|
function setupSplashScreenAction(moduleId) {
|
410
|
-
const { config, showSplashScreen } = app.uiConfig;
|
411
433
|
const { splashScreen } = config;
|
412
434
|
if (splashScreen && moduleId !== app.dynamicModuleId) {
|
413
|
-
showSplashScreen.value =
|
435
|
+
showSplashScreen.value = shouldShowSplashSceen(app);
|
414
436
|
}
|
415
437
|
if (splashScreen && splashScreen.menuEntry) {
|
416
438
|
const splashScreenAction = {
|
@@ -428,6 +450,7 @@
|
|
428
450
|
},
|
429
451
|
vcsAppSymbol,
|
430
452
|
ButtonLocation.MENU,
|
453
|
+
{ mobile: true, tablet: true, desktop: true },
|
431
454
|
);
|
432
455
|
}
|
433
456
|
}
|
@@ -485,6 +508,7 @@
|
|
485
508
|
},
|
486
509
|
vcsAppSymbol,
|
487
510
|
ButtonLocation.MENU,
|
511
|
+
{ mobile: true, tablet: true, desktop: true },
|
488
512
|
);
|
489
513
|
return () => {
|
490
514
|
app.navbarManager.remove(settingsComponentId);
|
@@ -514,6 +538,7 @@
|
|
514
538
|
},
|
515
539
|
vcsAppSymbol,
|
516
540
|
ButtonLocation.MENU,
|
541
|
+
{ mobile: true, tablet: true, desktop: true },
|
517
542
|
);
|
518
543
|
}
|
519
544
|
|
@@ -747,6 +772,7 @@
|
|
747
772
|
VcsObliqueFooter,
|
748
773
|
VcsSplashScreen,
|
749
774
|
VcsNavbar,
|
775
|
+
VcsNavbarMobile,
|
750
776
|
VContainer,
|
751
777
|
VFooter,
|
752
778
|
VSpacer,
|
@@ -789,6 +815,7 @@
|
|
789
815
|
const destroyDisplayQualityListener = setupUiConfigDisplayQuality(app);
|
790
816
|
const { attributionEntries, attributionAction, destroyAttributions } =
|
791
817
|
setupAttributions(app);
|
818
|
+
const destroyDeepPicking = setupDeepPicking(app);
|
792
819
|
|
793
820
|
let pluginMountedListener;
|
794
821
|
onMounted(() => {
|
@@ -797,21 +824,14 @@
|
|
797
824
|
|
798
825
|
function getSplashScreenConfig() {
|
799
826
|
if (app.uiConfig.config.splashScreen) {
|
800
|
-
|
801
|
-
|
802
|
-
const moduleId = config[moduleIdSymbol];
|
803
|
-
const storedHash = getFromLocalStorage(
|
804
|
-
`${packageName}_${moduleId}`,
|
805
|
-
hideSplashScreenKey,
|
806
|
-
);
|
807
|
-
if (hash !== storedHash) {
|
808
|
-
return {
|
809
|
-
title: 'components.splashScreen.name',
|
810
|
-
tooltip: 'components.splashScreen.tooltip',
|
811
|
-
position: { width: '800px', height: '400px' },
|
812
|
-
...app.uiConfig.config.splashScreen,
|
813
|
-
};
|
827
|
+
if (shouldShowSplashSceen(app)) {
|
828
|
+
showSplashScreen.value = true;
|
814
829
|
}
|
830
|
+
return {
|
831
|
+
title: 'components.splashScreen.name',
|
832
|
+
tooltip: 'components.splashScreen.tooltip',
|
833
|
+
...app.uiConfig.config.splashScreen,
|
834
|
+
};
|
815
835
|
}
|
816
836
|
return undefined;
|
817
837
|
}
|
@@ -835,9 +855,13 @@
|
|
835
855
|
destroyThemingListener();
|
836
856
|
destroyDisplayQualityListener();
|
837
857
|
destroyAttributions();
|
858
|
+
destroyDeepPicking();
|
838
859
|
});
|
839
860
|
|
840
|
-
const { smAndUp } = useDisplay();
|
861
|
+
const { smAndUp, xs } = useDisplay();
|
862
|
+
|
863
|
+
const mobileLandscape = isMobileLandscape();
|
864
|
+
|
841
865
|
const fontSize = useFontSize();
|
842
866
|
const footerHeight = computed(() => {
|
843
867
|
return Math.ceil(fontSize.value * 1.65);
|
@@ -879,6 +903,9 @@
|
|
879
903
|
splashScreen,
|
880
904
|
attributionEntries,
|
881
905
|
attributionAction,
|
906
|
+
smAndUp,
|
907
|
+
xs,
|
908
|
+
mobileLandscape,
|
882
909
|
};
|
883
910
|
},
|
884
911
|
};
|
@@ -112,6 +112,10 @@ declare const _default: import("vue").DefineComponent<{
|
|
112
112
|
* - an optional flag whether to activate feature info on startup (default active)
|
113
113
|
*/
|
114
114
|
readonly startingFeatureInfo?: boolean | undefined;
|
115
|
+
/**
|
116
|
+
* - an optional flag whether to enable deep picking via right click context menu (default active)
|
117
|
+
*/
|
118
|
+
readonly enableDeepPicking?: boolean | undefined;
|
115
119
|
/**
|
116
120
|
* - mouse event, when position display is updated. Either 'click' (default) or 'move'.
|
117
121
|
*/
|
@@ -447,16 +451,19 @@ declare const _default: import("vue").DefineComponent<{
|
|
447
451
|
* Whether to display a checkbox allowing the user not to see the SplashScreen again. This parameter is relative to moduleId and configuration; the SplashScreen will be shown again in case of any change.
|
448
452
|
*/
|
449
453
|
enableDontShowAgain?: boolean | undefined;
|
450
|
-
position
|
454
|
+
position?: {
|
451
455
|
readonly width?: string | undefined;
|
452
456
|
readonly height?: string | undefined;
|
453
457
|
readonly maxHeight?: string | undefined;
|
454
458
|
readonly maxWidth?: string | undefined;
|
455
|
-
};
|
459
|
+
} | undefined;
|
456
460
|
tooltip: string;
|
457
461
|
} | undefined>;
|
458
462
|
attributionEntries: import("vue").Ref<import("./attributionsHelper.js", { with: { "resolution-mode": "import" } }).AttributionEntry[]>;
|
459
463
|
attributionAction: import("../actions/actionHelper.js", { with: { "resolution-mode": "import" } }).VcsAction;
|
464
|
+
smAndUp: import("vue").Ref<boolean>;
|
465
|
+
xs: import("vue").Ref<boolean>;
|
466
|
+
mobileLandscape: import("vue").ComputedRef<boolean>;
|
460
467
|
}, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
461
468
|
appId: {
|
462
469
|
type: StringConstructor;
|
@@ -3,9 +3,9 @@
|
|
3
3
|
class="vcs-container pa-0"
|
4
4
|
:class="{
|
5
5
|
'vcs-container-xs': xs,
|
6
|
-
'with-header': !config.hideHeader,
|
7
|
-
'without-header': config.hideHeader,
|
8
|
-
'without-footer': config.hideFooter,
|
6
|
+
'with-header': !config.hideHeader && !mobileLandscape,
|
7
|
+
'without-header': config.hideHeader || mobileLandscape,
|
8
|
+
'without-footer': config.hideFooter || mobileLandscape,
|
9
9
|
}"
|
10
10
|
fluid
|
11
11
|
absolute
|
@@ -20,18 +20,19 @@
|
|
20
20
|
:class="{ 'mobile-logo': sm }"
|
21
21
|
/>
|
22
22
|
</template>
|
23
|
-
|
24
|
-
v-if="
|
23
|
+
<VcsButton
|
24
|
+
v-if="!smAndUp"
|
25
|
+
:data-action-name="attributionAction.name"
|
25
26
|
:key="attributionAction.name"
|
26
27
|
:tooltip="attributionAction.title"
|
27
|
-
|
28
|
+
icon="mdi-copyright"
|
28
29
|
:active="attributionAction.active"
|
29
30
|
@click.stop="attributionAction.callback($event)"
|
30
31
|
class="z-index-1 mobile-attribution-btn"
|
31
|
-
|
32
|
+
/>
|
32
33
|
<PanelManagerComponent />
|
33
|
-
<ToolboxManagerComponent v-if="!config.hideToolbox" />
|
34
|
-
<WindowManagerComponent />
|
34
|
+
<ToolboxManagerComponent v-if="!config.hideToolbox && !mobileLandscape" />
|
35
|
+
<WindowManagerComponent v-if="!mobileLandscape" />
|
35
36
|
<NotifierComponent />
|
36
37
|
</v-container>
|
37
38
|
</template>
|
@@ -55,7 +56,7 @@
|
|
55
56
|
|
56
57
|
.vcs-container-xs.with-header {
|
57
58
|
top: 0;
|
58
|
-
bottom:
|
59
|
+
bottom: calc(var(--v-vcs-font-size) * 3 + 10px);
|
59
60
|
}
|
60
61
|
.vcs-container-xs.without-header {
|
61
62
|
top: 0;
|
@@ -72,8 +73,23 @@
|
|
72
73
|
}
|
73
74
|
.mobile-attribution-btn {
|
74
75
|
position: fixed;
|
75
|
-
right:
|
76
|
-
bottom:
|
76
|
+
right: 32px;
|
77
|
+
bottom: 67px;
|
78
|
+
background-color: rgba(var(--v-theme-surface-light), 0.5);
|
79
|
+
color: rgb(var(--v-theme-on-surface));
|
80
|
+
backdrop-filter: blur(1px);
|
81
|
+
-webkit-backdrop-filter: blur(1px);
|
82
|
+
padding: 6px !important;
|
83
|
+
padding-bottom: 7px !important;
|
84
|
+
border-radius: 4px;
|
85
|
+
height: 35px !important;
|
86
|
+
width: 35px !important;
|
87
|
+
font-size: 20px !important;
|
88
|
+
justify-content: center;
|
89
|
+
align-items: center;
|
90
|
+
}
|
91
|
+
::v-deep(.mobile-attribution-btn span i) {
|
92
|
+
font-size: calc(var(--v-vcs-font-size) + 13px) !important;
|
77
93
|
}
|
78
94
|
.z-index-1 {
|
79
95
|
z-index: 1;
|
@@ -84,11 +100,13 @@
|
|
84
100
|
import { computed, inject } from 'vue';
|
85
101
|
import { useDisplay } from 'vuetify';
|
86
102
|
import { VContainer } from 'vuetify/components';
|
103
|
+
import VcsButton from '../components/buttons/VcsButton.vue';
|
87
104
|
import PanelManagerComponent from '../manager/panel/PanelManagerComponent.vue';
|
88
105
|
import WindowManagerComponent from '../manager/window/WindowManager.vue';
|
89
106
|
import ToolboxManagerComponent from '../manager/toolbox/ToolboxManagerComponent.vue';
|
90
107
|
import NotifierComponent from '../notifier/NotifierComponent.vue';
|
91
108
|
import VcsDefaultLogoMobile from '../logo-mobile.svg';
|
109
|
+
import { isMobileLandscape } from '../vuePlugins/vuetify.js';
|
92
110
|
|
93
111
|
/**
|
94
112
|
* @description The main container with map canvas
|
@@ -101,6 +119,7 @@
|
|
101
119
|
ToolboxManagerComponent,
|
102
120
|
VContainer,
|
103
121
|
NotifierComponent,
|
122
|
+
VcsButton,
|
104
123
|
},
|
105
124
|
props: {
|
106
125
|
attributionAction: {
|
@@ -111,12 +130,16 @@
|
|
111
130
|
setup() {
|
112
131
|
/** @type {import("../vcsUiApp.js").default} */
|
113
132
|
const app = inject('vcsApp');
|
114
|
-
const { smAndDown, xs, sm } = useDisplay();
|
133
|
+
const { smAndDown, xs, sm, smAndUp, mobile } = useDisplay();
|
134
|
+
const mobileLandscape = isMobileLandscape();
|
115
135
|
return {
|
116
136
|
config: app.uiConfig.config,
|
117
137
|
smAndDown,
|
118
138
|
xs,
|
119
139
|
sm,
|
140
|
+
smAndUp,
|
141
|
+
mobile,
|
142
|
+
mobileLandscape,
|
120
143
|
mobileLogo: computed(
|
121
144
|
() =>
|
122
145
|
app.uiConfig.config.mobileLogo ??
|
@@ -26,6 +26,10 @@ declare const _default: import("vue").DefineComponent<{
|
|
26
26
|
* - an optional flag whether to activate feature info on startup (default active)
|
27
27
|
*/
|
28
28
|
readonly startingFeatureInfo?: boolean | undefined;
|
29
|
+
/**
|
30
|
+
* - an optional flag whether to enable deep picking via right click context menu (default active)
|
31
|
+
*/
|
32
|
+
readonly enableDeepPicking?: boolean | undefined;
|
29
33
|
/**
|
30
34
|
* - mouse event, when position display is updated. Either 'click' (default) or 'move'.
|
31
35
|
*/
|
@@ -294,6 +298,9 @@ declare const _default: import("vue").DefineComponent<{
|
|
294
298
|
smAndDown: import("vue").Ref<boolean>;
|
295
299
|
xs: import("vue").Ref<boolean>;
|
296
300
|
sm: import("vue").Ref<boolean>;
|
301
|
+
smAndUp: import("vue").Ref<boolean>;
|
302
|
+
mobile: import("vue").ComputedRef<boolean>;
|
303
|
+
mobileLandscape: import("vue").ComputedRef<boolean>;
|
297
304
|
mobileLogo: import("vue").ComputedRef<any>;
|
298
305
|
}, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
299
306
|
attributionAction: {
|
@@ -0,0 +1,111 @@
|
|
1
|
+
<script setup>
|
2
|
+
import { inject } from 'vue';
|
3
|
+
import { VDivider, VList, VListItem } from 'vuetify/components';
|
4
|
+
import {
|
5
|
+
ButtonLocation,
|
6
|
+
deviceSymbol,
|
7
|
+
getActionsByLocation,
|
8
|
+
} from '../manager/navbarManager.js';
|
9
|
+
import VcsTextPageFooter from './VcsTextPageFooter.vue';
|
10
|
+
import { getDataProtection, getImprint } from './uiConfigHelper.js';
|
11
|
+
import { toolboxComponentId } from '../manager/toolbox/ToolboxManagerComponent.vue';
|
12
|
+
|
13
|
+
const app = inject('vcsApp');
|
14
|
+
|
15
|
+
const mobileButtonComponents = app.navbarManager.componentIds
|
16
|
+
.map((id) => app.navbarManager.get(id))
|
17
|
+
.filter((buttonComponent) => {
|
18
|
+
return buttonComponent[deviceSymbol].mobile;
|
19
|
+
});
|
20
|
+
|
21
|
+
// Actions from the content overflow are put in Menu
|
22
|
+
const contentOverflowActions = getActionsByLocation(
|
23
|
+
mobileButtonComponents,
|
24
|
+
ButtonLocation.CONTENT,
|
25
|
+
[...app.plugins].map((p) => p.name),
|
26
|
+
)?.slice(2);
|
27
|
+
|
28
|
+
const toolboxToggleAction = app.navbarManager.get(toolboxComponentId).action;
|
29
|
+
|
30
|
+
const toolboxOverflowActions = getActionsByLocation(
|
31
|
+
mobileButtonComponents,
|
32
|
+
ButtonLocation.TOOL,
|
33
|
+
[...app.plugins].map((p) => p.name),
|
34
|
+
)?.filter((action) => action.name !== toolboxToggleAction.name);
|
35
|
+
|
36
|
+
const mobileMenuActions = [
|
37
|
+
...getActionsByLocation(
|
38
|
+
mobileButtonComponents,
|
39
|
+
ButtonLocation.MENU,
|
40
|
+
[...app.plugins].map((p) => p.name),
|
41
|
+
),
|
42
|
+
...getActionsByLocation(
|
43
|
+
mobileButtonComponents,
|
44
|
+
ButtonLocation.SHARE,
|
45
|
+
[...app.plugins].map((p) => p.name),
|
46
|
+
),
|
47
|
+
...getActionsByLocation(
|
48
|
+
mobileButtonComponents,
|
49
|
+
ButtonLocation.PROJECT,
|
50
|
+
[...app.plugins].map((p) => p.name),
|
51
|
+
),
|
52
|
+
...toolboxOverflowActions,
|
53
|
+
...contentOverflowActions,
|
54
|
+
];
|
55
|
+
|
56
|
+
const dataProtection = getDataProtection(app.uiConfig?.config);
|
57
|
+
const imprint = getImprint(app.uiConfig?.config);
|
58
|
+
</script>
|
59
|
+
|
60
|
+
<template>
|
61
|
+
<v-list>
|
62
|
+
<div v-for="action in mobileMenuActions" :key="action.name">
|
63
|
+
<v-list-item
|
64
|
+
@click="action.callback()"
|
65
|
+
:data-action-name="action.name"
|
66
|
+
:title="$t(action.name)"
|
67
|
+
:prepend-icon="action.icon"
|
68
|
+
>
|
69
|
+
</v-list-item>
|
70
|
+
<v-divider></v-divider>
|
71
|
+
</div>
|
72
|
+
<template v-if="imprint">
|
73
|
+
<v-list-item v-if="imprint">
|
74
|
+
<VcsTextPageFooter
|
75
|
+
class="plainStyle"
|
76
|
+
:text-page="imprint"
|
77
|
+
:window-id="'imprintWindow'"
|
78
|
+
/>
|
79
|
+
</v-list-item>
|
80
|
+
<v-divider></v-divider>
|
81
|
+
</template>
|
82
|
+
<template v-if="dataProtection">
|
83
|
+
<v-list-item v-if="dataProtection">
|
84
|
+
<VcsTextPageFooter
|
85
|
+
class="plainStyle"
|
86
|
+
:text-page="dataProtection"
|
87
|
+
:window-id="'dataProtectionWindow'"
|
88
|
+
/>
|
89
|
+
</v-list-item>
|
90
|
+
</template>
|
91
|
+
</v-list>
|
92
|
+
</template>
|
93
|
+
|
94
|
+
<style scoped lang="scss">
|
95
|
+
.plainStyle {
|
96
|
+
font-family: var(--v-vcs-font-family), sans-serif !important;
|
97
|
+
font-size: var(--v-vcs-font-size) !important;
|
98
|
+
}
|
99
|
+
::v-deep(.text-page-footer) {
|
100
|
+
font-size: var(--v-vcs-font-size) !important;
|
101
|
+
text-decoration: none !important;
|
102
|
+
|
103
|
+
a {
|
104
|
+
color: var(--v-text-color);
|
105
|
+
text-decoration: none !important;
|
106
|
+
}
|
107
|
+
}
|
108
|
+
::v-deep(.v-list-item__prepend) {
|
109
|
+
display: block !important;
|
110
|
+
}
|
111
|
+
</style>
|
@@ -85,6 +85,7 @@
|
|
85
85
|
v-bind="props"
|
86
86
|
tooltip="navbar.share.tooltip"
|
87
87
|
icon="$vcsShare"
|
88
|
+
id="vcs-navbar-share-menu-activator"
|
88
89
|
/>
|
89
90
|
</template>
|
90
91
|
<VcsActionList
|
@@ -96,6 +97,7 @@
|
|
96
97
|
<VcsToolButton
|
97
98
|
class="d-flex"
|
98
99
|
v-if="searchAction"
|
100
|
+
:data-action-name="searchAction.name"
|
99
101
|
:key="searchAction.name"
|
100
102
|
:tooltip="searchAction.title"
|
101
103
|
:icon="searchAction.icon"
|
@@ -108,6 +110,7 @@
|
|
108
110
|
<VcsToolButton
|
109
111
|
v-bind="props"
|
110
112
|
tooltip="navbar.menu.tooltip"
|
113
|
+
id="vcs-navbar-burger-menu-activator"
|
111
114
|
icon="$vcsMenu"
|
112
115
|
/>
|
113
116
|
</template>
|
@@ -154,6 +157,7 @@
|
|
154
157
|
} from 'vuetify/components';
|
155
158
|
import {
|
156
159
|
ButtonLocation,
|
160
|
+
deviceSymbol,
|
157
161
|
getActionsByLocation,
|
158
162
|
} from '../manager/navbarManager.js';
|
159
163
|
import VcsActionButtonList from '../components/buttons/VcsActionButtonList.vue';
|
@@ -185,8 +189,18 @@
|
|
185
189
|
setup() {
|
186
190
|
const app = inject('vcsApp');
|
187
191
|
|
192
|
+
const { xs, mdAndUp, smAndDown, smAndUp, sm } = useDisplay();
|
193
|
+
|
188
194
|
const buttonComponents = computed(() =>
|
189
|
-
app.navbarManager.componentIds
|
195
|
+
app.navbarManager.componentIds
|
196
|
+
.map((id) => app.navbarManager.get(id))
|
197
|
+
.filter((buttonComponent) => {
|
198
|
+
if (sm.value) {
|
199
|
+
return buttonComponent[deviceSymbol].tablet;
|
200
|
+
} else {
|
201
|
+
return buttonComponent[deviceSymbol].desktop;
|
202
|
+
}
|
203
|
+
}),
|
190
204
|
);
|
191
205
|
const getActions = (location) =>
|
192
206
|
computed(() =>
|
@@ -208,8 +222,6 @@
|
|
208
222
|
destroySearchAction();
|
209
223
|
});
|
210
224
|
|
211
|
-
const { xs, mdAndUp, smAndDown, smAndUp } = useDisplay();
|
212
|
-
|
213
225
|
const density = computed(() => {
|
214
226
|
return xs.value ? 'comfortable' : 'compact';
|
215
227
|
});
|