@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
@@ -49,7 +49,7 @@
|
|
49
49
|
* New position is derived from a target item in the collection.
|
50
50
|
* This ensures correct movement, if rendered list is only a subset of the collection.
|
51
51
|
* @param {import("./collectionComponentClass.js").default<Object>} collectionComponent
|
52
|
-
* @param {import("../../components/lists/
|
52
|
+
* @param {import("../../components/lists/VcsListItemComponent.vue").VcsListItem} item
|
53
53
|
* @param {number} targetIndex
|
54
54
|
*/
|
55
55
|
export function moveItem(collectionComponent, item, targetIndex) {
|
@@ -3,10 +3,10 @@
|
|
3
3
|
* New position is derived from a target item in the collection.
|
4
4
|
* This ensures correct movement, if rendered list is only a subset of the collection.
|
5
5
|
* @param {import("./collectionComponentClass.js").default<Object>} collectionComponent
|
6
|
-
* @param {import("../../components/lists/
|
6
|
+
* @param {import("../../components/lists/VcsListItemComponent.vue").VcsListItem} item
|
7
7
|
* @param {number} targetIndex
|
8
8
|
*/
|
9
|
-
export function moveItem(collectionComponent: import("./collectionComponentClass.js").default<Object>, item: import("../../components/lists/
|
9
|
+
export function moveItem(collectionComponent: import("./collectionComponentClass.js").default<Object>, item: import("../../components/lists/VcsListItemComponent.vue").VcsListItem, targetIndex: number): void;
|
10
10
|
declare const _default: import("vue").DefineComponent<{
|
11
11
|
showLessButton: {
|
12
12
|
type: BooleanConstructor;
|
@@ -38,7 +38,7 @@ export type CollectionComponentUiOptions = {
|
|
38
38
|
export type CollectionComponentClassOptions<T extends Object> = CollectionComponentUiOptions & {
|
39
39
|
collection: import("@vcmap/core").Collection<T>;
|
40
40
|
};
|
41
|
-
export type CollectionComponentListItem = import("../../components/lists/
|
41
|
+
export type CollectionComponentListItem = import("../../components/lists/VcsListItemComponent.vue").VcsListItem & {
|
42
42
|
actions: Array<import("../../actions/actionHelper.js").VcsAction & {
|
43
43
|
weight?: number;
|
44
44
|
}>;
|
@@ -36,7 +36,7 @@ import { sortByOwner } from '../navbarManager.js';
|
|
36
36
|
*/
|
37
37
|
|
38
38
|
/**
|
39
|
-
* @typedef {import("../../components/lists/
|
39
|
+
* @typedef {import("../../components/lists/VcsListItemComponent.vue").VcsListItem & {
|
40
40
|
* actions: Array<import("../../actions/actionHelper.js").VcsAction & { weight?: number }>,
|
41
41
|
* clickedCallbacks: Array<function(PointerEvent):void>,
|
42
42
|
* destroy: function():void|undefined
|
@@ -55,7 +55,7 @@ function destroyListItem(listItem) {
|
|
55
55
|
/**
|
56
56
|
* Renames the title of an item for VcsObject based items.
|
57
57
|
* @param {import("@vcmap/core").VcsObject} item
|
58
|
-
* @param {import("../../components/lists/
|
58
|
+
* @param {import("../../components/lists/VcsListItemComponent.vue").VcsListItem} listItem
|
59
59
|
* @param {string} newTitle
|
60
60
|
*/
|
61
61
|
function titleChanged(item, listItem, newTitle) {
|
@@ -3,6 +3,7 @@ import { check, maybe, oneOf } from '@vcsuite/check';
|
|
3
3
|
import { WindowSlot } from '../window/windowManager.js';
|
4
4
|
import CollectionComponentClass from './collectionComponentClass.js';
|
5
5
|
import { createListEditAction } from '../../actions/listActions.js';
|
6
|
+
import { categoryManagerWindowId } from '../../application/VcsApp.vue';
|
6
7
|
|
7
8
|
/**
|
8
9
|
* @typedef {Omit<import("../window/windowManager.js").WindowComponentOptions,"id"|"parentId"|"slot">} EditorWindowComponentOptions
|
@@ -62,7 +63,7 @@ export function makeEditorCollectionComponentClass(
|
|
62
63
|
app,
|
63
64
|
collectionComponent,
|
64
65
|
editingOptions,
|
65
|
-
parentId =
|
66
|
+
parentId = categoryManagerWindowId,
|
66
67
|
) {
|
67
68
|
check(collectionComponent, CollectionComponentClass);
|
68
69
|
check(editingOptions.editor, oneOf(Object, Function));
|
@@ -18,20 +18,13 @@
|
|
18
18
|
</template>
|
19
19
|
|
20
20
|
<style scoped lang="scss">
|
21
|
-
@import '../../styles/shades.scss';
|
22
|
-
|
23
21
|
.panel-component {
|
24
22
|
padding: 0 4px;
|
25
23
|
}
|
26
|
-
.panel-component
|
27
|
-
content: '';
|
28
|
-
position: absolute;
|
29
|
-
background: map-get($shades, 'black');
|
30
|
-
}
|
31
|
-
.panel-component.theme--light::after {
|
24
|
+
.panel-component::after {
|
32
25
|
content: '';
|
33
26
|
position: absolute;
|
34
|
-
background:
|
27
|
+
background: rgb(var(--v-theme-surface-light));
|
35
28
|
}
|
36
29
|
|
37
30
|
.panel-component-left::after {
|
@@ -143,17 +143,21 @@
|
|
143
143
|
((panelFrameRef.value.offsetTop + e.y) /
|
144
144
|
panelFrameRef.value.parentElement.offsetHeight) *
|
145
145
|
100;
|
146
|
-
setPanelPosition(panel, {
|
146
|
+
setPanelPosition(panelManager, panel, {
|
147
|
+
height: `${Math.round(100 - height)}%`,
|
148
|
+
});
|
147
149
|
} else {
|
148
150
|
const width =
|
149
151
|
((panelFrameRef.value.offsetLeft + e.x) /
|
150
152
|
panelFrameRef.value.parentElement.offsetWidth) *
|
151
153
|
100;
|
152
154
|
if (panel[panelLocationSymbol] === PanelLocation.LEFT) {
|
153
|
-
setPanelPosition(panel, { width: `${width}%` });
|
155
|
+
setPanelPosition(panelManager, panel, { width: `${width}%` });
|
154
156
|
resizeKey = 'left';
|
155
157
|
} else if (panel[panelLocationSymbol] === PanelLocation.RIGHT) {
|
156
|
-
setPanelPosition(panel, {
|
158
|
+
setPanelPosition(panelManager, panel, {
|
159
|
+
width: `${Math.round(100 - width)}%`,
|
160
|
+
});
|
157
161
|
resizeKey = 'right';
|
158
162
|
}
|
159
163
|
}
|
@@ -239,7 +239,7 @@ export function updatePanelSizes(
|
|
239
239
|
},
|
240
240
|
targetSize,
|
241
241
|
);
|
242
|
-
setPanelPosition(leftPanel, updatedLeft);
|
242
|
+
setPanelPosition(panelManager, leftPanel, updatedLeft);
|
243
243
|
}
|
244
244
|
if (panelManager.hasLocation(PanelLocation.RIGHT) && resizeKey !== 'left') {
|
245
245
|
const updatedRight = handleSidePanel(
|
@@ -252,7 +252,7 @@ export function updatePanelSizes(
|
|
252
252
|
},
|
253
253
|
targetSize,
|
254
254
|
);
|
255
|
-
setPanelPosition(rightPanel, updatedRight);
|
255
|
+
setPanelPosition(panelManager, rightPanel, updatedRight);
|
256
256
|
}
|
257
257
|
|
258
258
|
const main = percentageFromPanelOptions(
|
@@ -267,6 +267,6 @@ export function updatePanelSizes(
|
|
267
267
|
return acc;
|
268
268
|
}, {});
|
269
269
|
if (Object.keys(toUpdate).length > 0) {
|
270
|
-
setPanelPosition(mainPanel, toUpdate);
|
270
|
+
setPanelPosition(panelManager, mainPanel, toUpdate);
|
271
271
|
}
|
272
272
|
}
|
@@ -30,10 +30,11 @@
|
|
30
30
|
*/
|
31
31
|
export function getPanelPosition(panelComponent: Partial<PanelComponent>): PanelPosition | undefined;
|
32
32
|
/**
|
33
|
+
* @param {PanelManager} panelManager
|
33
34
|
* @param {PanelComponent} panelComponent
|
34
35
|
* @param {Partial<PanelPosition>} panelPosition
|
35
36
|
*/
|
36
|
-
export function setPanelPosition(panelComponent: PanelComponent, panelPosition: Partial<PanelPosition>): void;
|
37
|
+
export function setPanelPosition(panelManager: PanelManager, panelComponent: PanelComponent, panelPosition: Partial<PanelPosition>): void;
|
37
38
|
export const panelLocationSymbol: unique symbol;
|
38
39
|
export const panelPositionSymbol: unique symbol;
|
39
40
|
/**
|
@@ -249,6 +250,13 @@ declare class PanelManager implements IPanelManager {
|
|
249
250
|
* @type {import("@vcmap/core").VcsEvent<PanelComponent>}
|
250
251
|
*/
|
251
252
|
removed: import("@vcmap/core").VcsEvent<PanelComponent>;
|
253
|
+
/**
|
254
|
+
* @type {import("@vcmap/core").VcsEvent<{panelId: string, panelPosition: PanelPosition}>}
|
255
|
+
*/
|
256
|
+
positionChanged: import("@vcmap/core").VcsEvent<{
|
257
|
+
panelId: string;
|
258
|
+
panelPosition: PanelPosition;
|
259
|
+
}>;
|
252
260
|
/**
|
253
261
|
* reactive ordered array of ids,
|
254
262
|
* @type {import("vue").UnwrapRef<string[]>}
|
@@ -114,10 +114,11 @@ export function getPanelPosition(panelComponent) {
|
|
114
114
|
}
|
115
115
|
|
116
116
|
/**
|
117
|
+
* @param {PanelManager} panelManager
|
117
118
|
* @param {PanelComponent} panelComponent
|
118
119
|
* @param {Partial<PanelPosition>} panelPosition
|
119
120
|
*/
|
120
|
-
export function setPanelPosition(panelComponent, panelPosition) {
|
121
|
+
export function setPanelPosition(panelManager, panelComponent, panelPosition) {
|
121
122
|
const position = getPanelPosition(panelComponent);
|
122
123
|
const toUpdate = Object.keys(panelPosition).reduce((acc, key) => {
|
123
124
|
if (position?.[key] !== panelPosition[key]) {
|
@@ -126,7 +127,14 @@ export function setPanelPosition(panelComponent, panelPosition) {
|
|
126
127
|
return acc;
|
127
128
|
}, {});
|
128
129
|
if (Object.keys(toUpdate).length > 0) {
|
129
|
-
Object.assign(
|
130
|
+
const newPosition = Object.assign(
|
131
|
+
panelComponent[panelPositionSymbol],
|
132
|
+
panelPosition,
|
133
|
+
);
|
134
|
+
panelManager.positionChanged.raiseEvent({
|
135
|
+
panelId: panelComponent.id,
|
136
|
+
panelPosition: newPosition,
|
137
|
+
});
|
130
138
|
}
|
131
139
|
}
|
132
140
|
|
@@ -149,6 +157,10 @@ class PanelManager {
|
|
149
157
|
* @type {import("@vcmap/core").VcsEvent<PanelComponent>}
|
150
158
|
*/
|
151
159
|
this.removed = new VcsEvent();
|
160
|
+
/**
|
161
|
+
* @type {import("@vcmap/core").VcsEvent<{panelId: string, panelPosition: PanelPosition}>}
|
162
|
+
*/
|
163
|
+
this.positionChanged = new VcsEvent();
|
152
164
|
/**
|
153
165
|
* reactive ordered array of ids,
|
154
166
|
* @type {import("vue").UnwrapRef<string[]>}
|
@@ -266,7 +278,7 @@ class PanelManager {
|
|
266
278
|
return acc;
|
267
279
|
}, {});
|
268
280
|
if (Object.keys(toUpdate).length > 0) {
|
269
|
-
setPanelPosition(panelComponent, toUpdate);
|
281
|
+
setPanelPosition(this, panelComponent, toUpdate);
|
270
282
|
}
|
271
283
|
}
|
272
284
|
}
|
@@ -13,7 +13,7 @@
|
|
13
13
|
:icon="group.icon"
|
14
14
|
:disabled="group.disabled"
|
15
15
|
:tooltip="group.title"
|
16
|
-
:active="
|
16
|
+
:active="hasActiveAction"
|
17
17
|
:color="hasActiveAction ? 'primary' : ''"
|
18
18
|
v-bind="props"
|
19
19
|
>
|
@@ -23,11 +23,11 @@
|
|
23
23
|
|
24
24
|
<v-toolbar
|
25
25
|
id="vcs-toolbox-toolbar--secondary"
|
26
|
-
class="mx-auto marginToTop
|
27
|
-
:height="
|
26
|
+
class="mx-auto marginToTop rounded-b elevation-4 opacity-80 px-1"
|
27
|
+
:height="itemHeight + 8"
|
28
28
|
>
|
29
29
|
<v-toolbar-items class="w-100">
|
30
|
-
<div class="d-flex align-center justify-space-between w-100">
|
30
|
+
<div class="d-flex align-center justify-space-between gc-1 w-100">
|
31
31
|
<VcsToolButton
|
32
32
|
v-for="{ id, action } in orderedButtons"
|
33
33
|
:key="id"
|
@@ -54,6 +54,7 @@
|
|
54
54
|
import { VMenu, VIcon, VToolbar, VToolbarItems } from 'vuetify/components';
|
55
55
|
import VcsToolButton from '../../components/buttons/VcsToolButton.vue';
|
56
56
|
import { getComponentsByOrder } from './toolboxManager.js';
|
57
|
+
import { useItemHeight } from '../../vuePlugins/vuetify.js';
|
57
58
|
|
58
59
|
/**
|
59
60
|
* @description
|
@@ -94,10 +95,13 @@
|
|
94
95
|
orderedButtons.value.some((a) => a.action.active),
|
95
96
|
);
|
96
97
|
|
98
|
+
const itemHeight = useItemHeight();
|
99
|
+
|
97
100
|
return {
|
98
101
|
open,
|
99
102
|
orderedButtons,
|
100
103
|
hasActiveAction,
|
104
|
+
itemHeight,
|
101
105
|
};
|
102
106
|
},
|
103
107
|
};
|
@@ -7,6 +7,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
7
7
|
open: import("vue").Ref<boolean>;
|
8
8
|
orderedButtons: import("vue").ComputedRef<(import("../buttonManager.js", { with: { "resolution-mode": "import" } }).ButtonComponent | import("./toolboxManager.js", { with: { "resolution-mode": "import" } }).ToolboxComponent)[]>;
|
9
9
|
hasActiveAction: import("vue").ComputedRef<boolean>;
|
10
|
+
itemHeight: import("vue").ComputedRef<number>;
|
10
11
|
}, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
11
12
|
group: {
|
12
13
|
type: ObjectConstructor;
|
@@ -28,7 +28,7 @@
|
|
28
28
|
:tooltip="group.action.title"
|
29
29
|
:disabled="group.action.disabled"
|
30
30
|
v-bind="props"
|
31
|
-
class="vcs-toolbox-action-select"
|
31
|
+
class="vcs-toolbox-action-select px-0"
|
32
32
|
:min-width="16"
|
33
33
|
:width="16"
|
34
34
|
>
|
@@ -37,12 +37,12 @@
|
|
37
37
|
</template>
|
38
38
|
|
39
39
|
<v-toolbar
|
40
|
-
class="vcs-toolbox-2 mx-auto marginToTop rounded-b opacity-80 px-1"
|
41
|
-
:height="
|
40
|
+
class="vcs-toolbox-2 mx-auto marginToTop rounded-b elevation-4 opacity-80 px-1"
|
41
|
+
:height="itemHeight + 8"
|
42
42
|
dense
|
43
43
|
>
|
44
44
|
<v-toolbar-items class="w-100">
|
45
|
-
<div class="d-flex align-center justify-space-between w-100">
|
45
|
+
<div class="d-flex align-center justify-space-between gc-1 w-100">
|
46
46
|
<VcsToolButton
|
47
47
|
v-for="(item, index) in group.action.tools"
|
48
48
|
:key="`${item.name}-${index}`"
|
@@ -67,6 +67,7 @@
|
|
67
67
|
import { ref } from 'vue';
|
68
68
|
import { VMenu, VIcon, VToolbar, VToolbarItems } from 'vuetify/components';
|
69
69
|
import VcsToolButton from '../../components/buttons/VcsToolButton.vue';
|
70
|
+
import { useItemHeight } from '../../vuePlugins/vuetify.js';
|
70
71
|
|
71
72
|
/**
|
72
73
|
* @description
|
@@ -90,9 +91,11 @@
|
|
90
91
|
},
|
91
92
|
setup() {
|
92
93
|
const open = ref(false);
|
94
|
+
const itemHeight = useItemHeight();
|
93
95
|
|
94
96
|
return {
|
95
97
|
open,
|
98
|
+
itemHeight,
|
96
99
|
};
|
97
100
|
},
|
98
101
|
};
|
@@ -5,6 +5,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
5
5
|
};
|
6
6
|
}, {
|
7
7
|
open: import("vue").Ref<boolean>;
|
8
|
+
itemHeight: import("vue").ComputedRef<number>;
|
8
9
|
}, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
9
10
|
group: {
|
10
11
|
type: ObjectConstructor;
|
@@ -1,14 +1,13 @@
|
|
1
1
|
<template>
|
2
2
|
<v-toolbar
|
3
3
|
v-if="toolboxOpen && orderedGroups.length > 0 && mdAndUp"
|
4
|
-
class="vcs-toolbox mx-auto
|
4
|
+
class="vcs-toolbox mx-auto elevation-4 opacity-80"
|
5
5
|
:class="{
|
6
6
|
'rounded-b': !open,
|
7
7
|
}"
|
8
|
-
:height="
|
8
|
+
:height="itemHeight + 8"
|
9
9
|
:style="{ zIndex }"
|
10
10
|
@click.stop="bringToTop"
|
11
|
-
style="width: fit-content"
|
12
11
|
>
|
13
12
|
<v-toolbar-items class="w-100 px-4 gc-1">
|
14
13
|
<div
|
@@ -42,8 +41,9 @@
|
|
42
41
|
</template>
|
43
42
|
|
44
43
|
<style lang="scss" scoped>
|
45
|
-
.
|
44
|
+
.vcs-toolbox {
|
46
45
|
margin-top: 2px;
|
46
|
+
width: fit-content;
|
47
47
|
}
|
48
48
|
</style>
|
49
49
|
|
@@ -61,6 +61,7 @@
|
|
61
61
|
import VcsToolButton from '../../components/buttons/VcsToolButton.vue';
|
62
62
|
import { vcsAppSymbol } from '../../pluginHelper.js';
|
63
63
|
import { ButtonLocation } from '../navbarManager.js';
|
64
|
+
import { useItemHeight } from '../../vuePlugins/vuetify.js';
|
64
65
|
|
65
66
|
/**
|
66
67
|
* @typedef {Object} ToolboxButtonGroup
|
@@ -163,12 +164,12 @@
|
|
163
164
|
}
|
164
165
|
handleToolboxButton();
|
165
166
|
|
166
|
-
|
167
|
+
watch(groups, () => handleToolboxButton());
|
167
168
|
|
168
169
|
onUnmounted(() => {
|
169
|
-
stopWatching();
|
170
170
|
nameChangeListener();
|
171
171
|
app.windowManager.removeExternalIdFromZIndex('toolbox');
|
172
|
+
app.navbarManager.remove('toolbox');
|
172
173
|
});
|
173
174
|
|
174
175
|
watch(toolboxOpen, () => {
|
@@ -183,6 +184,7 @@
|
|
183
184
|
};
|
184
185
|
|
185
186
|
const { mdAndUp } = useDisplay();
|
187
|
+
const itemHeight = useItemHeight();
|
186
188
|
return {
|
187
189
|
mdAndUp,
|
188
190
|
toolboxOpen,
|
@@ -200,6 +202,7 @@
|
|
200
202
|
bringToTop();
|
201
203
|
}
|
202
204
|
},
|
205
|
+
itemHeight,
|
203
206
|
};
|
204
207
|
},
|
205
208
|
};
|
@@ -12,6 +12,7 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
12
12
|
open: import("vue").Ref<boolean>;
|
13
13
|
bringToTop: () => void;
|
14
14
|
openGroup(group: any): void;
|
15
|
+
itemHeight: import("vue").ComputedRef<number>;
|
15
16
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
|
16
17
|
export default _default;
|
17
18
|
export type ToolboxButtonGroup = {
|
@@ -9,8 +9,8 @@
|
|
9
9
|
:class="{
|
10
10
|
rounded: !isDocked,
|
11
11
|
marginToTop: isDocked || !isChild,
|
12
|
-
'rounded-
|
13
|
-
'rounded-
|
12
|
+
'rounded-be': isDynamicLeft,
|
13
|
+
'rounded-bs': isDynamicRight,
|
14
14
|
}"
|
15
15
|
>
|
16
16
|
<div
|
@@ -89,17 +89,21 @@
|
|
89
89
|
});
|
90
90
|
|
91
91
|
const isChild = computed(() => !!props.windowState.parentId);
|
92
|
-
const isDynamic = computed(
|
93
|
-
|
92
|
+
const isDynamic = computed(
|
93
|
+
() => props.slotWindow.value !== WindowSlot.STATIC,
|
94
|
+
);
|
95
|
+
const isDocked = computed(
|
96
|
+
() => props.slotWindow.value !== WindowSlot.DETACHED,
|
97
|
+
);
|
94
98
|
const isDockedLeft = computed(() => {
|
95
99
|
return (
|
96
|
-
props.slotWindow === WindowSlot.STATIC ||
|
97
|
-
props.slotWindow === WindowSlot.DYNAMIC_LEFT ||
|
98
|
-
props.slotWindow === WindowSlot.DYNAMIC_CHILD
|
100
|
+
props.slotWindow.value === WindowSlot.STATIC ||
|
101
|
+
props.slotWindow.value === WindowSlot.DYNAMIC_LEFT ||
|
102
|
+
props.slotWindow.value === WindowSlot.DYNAMIC_CHILD
|
99
103
|
);
|
100
104
|
});
|
101
105
|
const isDockedRight = computed(
|
102
|
-
() => props.slotWindow === WindowSlot.DYNAMIC_RIGHT,
|
106
|
+
() => props.slotWindow.value === WindowSlot.DYNAMIC_RIGHT,
|
103
107
|
);
|
104
108
|
const isDraggable = ref(false);
|
105
109
|
/**
|
@@ -2,21 +2,25 @@
|
|
2
2
|
<div
|
3
3
|
class="d-flex justify-space-between align-center window-component-header"
|
4
4
|
>
|
5
|
-
<h3 class="d-flex align-center">
|
5
|
+
<h3 class="d-flex align-center flex-grow-1">
|
6
6
|
<v-icon
|
7
7
|
v-if="windowState.headerIcon"
|
8
8
|
class="mr-1"
|
9
|
-
:class="{ 'primary
|
9
|
+
:class="{ 'text-primary': isOnTop }"
|
10
10
|
size="16"
|
11
11
|
>
|
12
12
|
{{ windowState.headerIcon }}
|
13
13
|
</v-icon>
|
14
14
|
<span
|
15
|
-
|
16
|
-
|
15
|
+
ref="headerRef"
|
16
|
+
class="d-inline-block user-select-none font-weight-bold vcs-window-header-title"
|
17
|
+
:class="{ 'text-primary': isOnTop }"
|
17
18
|
>
|
18
19
|
{{ translatedHeaderTitle }}
|
19
20
|
</span>
|
21
|
+
<v-tooltip v-if="headerTooltip" activator="parent">
|
22
|
+
{{ $st(headerTooltip) }}
|
23
|
+
</v-tooltip>
|
20
24
|
</h3>
|
21
25
|
<div class="d-flex justify-space-between align-center">
|
22
26
|
<template v-if="windowState.headerActions?.length > 0">
|
@@ -52,10 +56,10 @@
|
|
52
56
|
|
53
57
|
<style lang="scss" scoped>
|
54
58
|
.window-component-header {
|
55
|
-
max-height:
|
59
|
+
max-height: calc(var(--v-vcs-item-height) / 2);
|
56
60
|
|
57
61
|
h3 {
|
58
|
-
line-height:
|
62
|
+
line-height: calc(var(--v-vcs-item-height) / 2);
|
59
63
|
}
|
60
64
|
.v-divider--vertical.v-divider--inset {
|
61
65
|
margin-top: 2px;
|
@@ -64,11 +68,19 @@
|
|
64
68
|
.user-select-none {
|
65
69
|
user-select: none;
|
66
70
|
}
|
71
|
+
.vcs-window-header-title {
|
72
|
+
width: 10px;
|
73
|
+
white-space: nowrap;
|
74
|
+
overflow: hidden;
|
75
|
+
text-overflow: ellipsis;
|
76
|
+
flex: 1;
|
77
|
+
}
|
67
78
|
</style>
|
68
79
|
|
69
80
|
<script>
|
70
|
-
import { VIcon, VDivider } from 'vuetify/components';
|
71
|
-
import { computed, getCurrentInstance } from 'vue';
|
81
|
+
import { VIcon, VDivider, VTooltip } from 'vuetify/components';
|
82
|
+
import { computed, getCurrentInstance, ref } from 'vue';
|
83
|
+
import { createEllipseTooltip } from '../../components/composables.js';
|
72
84
|
import VcsButton from '../../components/buttons/VcsButton.vue';
|
73
85
|
import VcsActionButtonList from '../../components/buttons/VcsActionButtonList.vue';
|
74
86
|
import { createLinkAction } from '../../actions/actionHelper.js';
|
@@ -88,6 +100,7 @@
|
|
88
100
|
VcsButton,
|
89
101
|
VIcon,
|
90
102
|
VDivider,
|
103
|
+
VTooltip,
|
91
104
|
},
|
92
105
|
inheritAttrs: false,
|
93
106
|
props: {
|
@@ -124,6 +137,8 @@
|
|
124
137
|
: vm.$st(props.windowState.headerTitle),
|
125
138
|
);
|
126
139
|
|
140
|
+
const headerRef = ref(null);
|
141
|
+
|
127
142
|
const infoAction =
|
128
143
|
props.windowState.infoUrl || props.windowState.infoUrlCallback
|
129
144
|
? createLinkAction(
|
@@ -141,6 +156,12 @@
|
|
141
156
|
close,
|
142
157
|
isDockable,
|
143
158
|
translatedHeaderTitle,
|
159
|
+
headerRef,
|
160
|
+
headerTooltip: createEllipseTooltip(
|
161
|
+
computed(() => headerRef.value),
|
162
|
+
computed(() => undefined),
|
163
|
+
translatedHeaderTitle,
|
164
|
+
),
|
144
165
|
infoAction,
|
145
166
|
};
|
146
167
|
},
|
@@ -17,6 +17,8 @@ declare const _default: import("vue").DefineComponent<{
|
|
17
17
|
close: () => void;
|
18
18
|
isDockable: import("vue").ComputedRef<any>;
|
19
19
|
translatedHeaderTitle: import("vue").ComputedRef<any>;
|
20
|
+
headerRef: import("vue").Ref<null>;
|
21
|
+
headerTooltip: import("vue").ComputedRef<string>;
|
20
22
|
infoAction: import("../../actions/actionHelper.js", { with: { "resolution-mode": "import" } }).VcsAction | undefined;
|
21
23
|
}, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
22
24
|
windowState: {
|
@@ -160,9 +160,9 @@
|
|
160
160
|
const position = getPosition(windowComponent);
|
161
161
|
moveWindow(id, translation, windowManager, targetSize.value, position);
|
162
162
|
};
|
163
|
-
|
163
|
+
const display = useDisplay();
|
164
164
|
const addMobileClass = computed(() => {
|
165
|
-
return
|
165
|
+
return display.xs.value && componentIds.length > 0;
|
166
166
|
});
|
167
167
|
|
168
168
|
const setTargetSize = () => {
|
@@ -249,6 +249,25 @@
|
|
249
249
|
const showOverviewButton = ref(
|
250
250
|
app.overviewMap.map.layerCollection.size > 0,
|
251
251
|
);
|
252
|
+
|
253
|
+
const handleOverviewMapActiveOnStartup = (item) => {
|
254
|
+
if (
|
255
|
+
item &&
|
256
|
+
item.name === 'overviewMapActiveOnStartup' &&
|
257
|
+
showOverviewButton.value &&
|
258
|
+
item.value &&
|
259
|
+
!overviewAction.active
|
260
|
+
) {
|
261
|
+
overviewAction.callback();
|
262
|
+
}
|
263
|
+
};
|
264
|
+
handleOverviewMapActiveOnStartup(
|
265
|
+
app.uiConfig.getByKey('overviewMapActiveOnStartup'),
|
266
|
+
);
|
267
|
+
const uiConfigListener = app.uiConfig.added.addEventListener(
|
268
|
+
handleOverviewMapActiveOnStartup,
|
269
|
+
);
|
270
|
+
|
252
271
|
// Locator
|
253
272
|
const { action: locatorAction, destroy: destroyLocator } =
|
254
273
|
createLocatorAction(app);
|
@@ -286,6 +305,7 @@
|
|
286
305
|
const { action: homeAction, destroy: homeDestroy } = setupHomeButton(app);
|
287
306
|
|
288
307
|
onUnmounted(() => {
|
308
|
+
uiConfigListener();
|
289
309
|
if (overviewDestroy) {
|
290
310
|
overviewDestroy();
|
291
311
|
}
|
@@ -24,7 +24,7 @@ import { getDefaultPrimaryColor } from '../vuePlugins/vuetify.js';
|
|
24
24
|
*/
|
25
25
|
function getColor(opacity, app) {
|
26
26
|
return Color.fromCssColorString(
|
27
|
-
app.uiConfig.config.
|
27
|
+
app.uiConfig.config.primaryColor ?? getDefaultPrimaryColor(app),
|
28
28
|
)
|
29
29
|
.withAlpha(opacity)
|
30
30
|
.toCssColorString();
|
@@ -140,7 +140,7 @@ class OverviewMap {
|
|
140
140
|
this._obliqueSelectedImageLayer = null;
|
141
141
|
|
142
142
|
const primary =
|
143
|
-
app.uiConfig.config.
|
143
|
+
app.uiConfig.config.primaryColor ?? getDefaultPrimaryColor(app);
|
144
144
|
const fillColor = Color.fromCssColorString('#EDEDED');
|
145
145
|
|
146
146
|
/**
|
@@ -5,6 +5,7 @@
|
|
5
5
|
:key="notification.id"
|
6
6
|
v-model="notification.open"
|
7
7
|
:timeout="notification.timeout"
|
8
|
+
class="vcs-notifier"
|
8
9
|
>
|
9
10
|
<v-icon :color="notification.type">
|
10
11
|
{{ icon[notification.type] }}
|
@@ -63,21 +64,23 @@
|
|
63
64
|
</script>
|
64
65
|
|
65
66
|
<style lang="scss" scoped>
|
66
|
-
.
|
67
|
-
:
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
align-self: flex-start;
|
80
|
-
margin-top: 4px;
|
67
|
+
.vcs-notifier {
|
68
|
+
opacity: 0.95;
|
69
|
+
}
|
70
|
+
:deep(.v-snackbar__content) {
|
71
|
+
display: grid;
|
72
|
+
padding: 8px 8px;
|
73
|
+
gap: 8px 4px;
|
74
|
+
grid-template-columns: 20px auto;
|
75
|
+
.v-icon {
|
76
|
+
grid-row-start: 1;
|
77
|
+
grid-row-end: 3;
|
78
|
+
align-self: start;
|
79
|
+
font-size: var(--v-vcs-font-size);
|
81
80
|
}
|
82
81
|
}
|
82
|
+
:deep(.v-snackbar__actions) {
|
83
|
+
align-self: flex-start;
|
84
|
+
margin-top: 4px;
|
85
|
+
}
|
83
86
|
</style>
|