@vcmap/ui 5.1.8 → 5.2.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/build/buildTypes.js +9 -0
- package/config/base.config.json +33 -2
- package/config/dev.config.json +22 -2
- package/dist/assets/cesium.js +1 -1
- package/dist/assets/{core.45041e.js → core.627882.js} +4160 -4041
- package/dist/assets/core.js +1 -1
- package/dist/assets/index-76acacac.js +1 -0
- package/dist/assets/ol.js +1 -1
- package/dist/assets/{ui.74ba2a.css → ui.895896.css} +2 -2
- package/dist/assets/{ui.74ba2a.js → ui.895896.js} +8628 -7657
- package/dist/assets/ui.js +1 -1
- package/dist/assets/vue.js +2 -2
- package/dist/assets/{vuetify.72ace9.js → vuetify.1621f3.js} +1 -1
- package/dist/assets/vuetify.js +2 -2
- package/dist/index.html +1 -1
- package/index.d.ts +16 -0
- package/index.js +23 -0
- package/package.json +2 -2
- package/plugins/@vcmap-show-case/collection-manager-example/src/CollectionManagerExample.vue +110 -37
- package/plugins/@vcmap-show-case/collection-manager-example/src/index.js +4 -0
- package/plugins/@vcmap-show-case/form-inputs-example/src/FormInputsExample.vue +10 -3
- package/plugins/@vcmap-show-case/panel-tester/README.md +3 -0
- package/plugins/@vcmap-show-case/panel-tester/package.json +5 -0
- package/plugins/@vcmap-show-case/panel-tester/src/IframePanelExample.vue +15 -0
- package/plugins/@vcmap-show-case/panel-tester/src/ImgPanelExample.vue +19 -0
- package/plugins/@vcmap-show-case/panel-tester/src/PanelExample.vue +128 -0
- package/plugins/@vcmap-show-case/panel-tester/src/TextPanelExample.vue +34 -0
- package/plugins/@vcmap-show-case/panel-tester/src/index.js +63 -0
- package/src/actions/actionHelper.js +1 -1
- package/src/actions/flightActions.d.ts +38 -2
- package/src/actions/flightActions.js +257 -6
- package/src/application/VcsApp.vue +4 -104
- package/src/application/VcsApp.vue.d.ts +0 -6
- package/src/application/VcsContainer.vue +105 -0
- package/src/application/VcsContainer.vue.d.ts +14 -0
- package/src/application/VcsMainMap.vue +68 -0
- package/src/application/VcsMainMap.vue.d.ts +9 -0
- package/src/application/markdownHelper.d.ts +7 -0
- package/src/application/markdownHelper.js +57 -1
- package/src/components/form-inputs-controls/VcsRadioGrid.vue +27 -42
- package/src/contentTree/LayerTree.vue +40 -14
- package/src/downloadHelper.d.ts +0 -2
- package/src/downloadHelper.js +2 -4
- package/src/featureInfo/BalloonComponent.vue +31 -3
- package/src/featureInfo/BalloonComponent.vue.d.ts +1 -0
- package/src/featureInfo/MarkdownBalloonComponent.vue +24 -0
- package/src/featureInfo/MarkdownBalloonComponent.vue.d.ts +12 -0
- package/src/featureInfo/abstractFeatureInfoView.js +54 -22
- package/src/featureInfo/addressBalloonFeatureInfoView.d.ts +2 -2
- package/src/featureInfo/addressBalloonFeatureInfoView.js +1 -1
- package/src/featureInfo/balloonFeatureInfoView.js +1 -1
- package/src/featureInfo/balloonHelper.js +16 -9
- package/src/featureInfo/featureInfo.js +10 -0
- package/src/featureInfo/markdownBalloonFeatureInfoView.d.ts +47 -0
- package/src/featureInfo/markdownBalloonFeatureInfoView.js +81 -0
- package/src/featureInfo/markdownFeatureInfoView.d.ts +47 -0
- package/src/featureInfo/markdownFeatureInfoView.js +95 -0
- package/src/i18n/de.d.ts +8 -3
- package/src/i18n/de.js +3 -0
- package/src/i18n/en.d.ts +32 -26
- package/src/i18n/en.js +4 -1
- package/src/manager/collectionManager/CollectionComponent.vue +12 -49
- package/src/manager/collectionManager/CollectionComponent.vue.d.ts +5 -9
- package/src/manager/collectionManager/CollectionComponentContent.vue +102 -0
- package/src/manager/collectionManager/CollectionComponentContent.vue.d.ts +17 -0
- package/src/manager/collectionManager/CollectionComponentList.vue +10 -2
- package/src/manager/collectionManager/CollectionComponentList.vue.d.ts +9 -0
- package/src/manager/collectionManager/CollectionComponentStandalone.vue +91 -0
- package/src/manager/collectionManager/CollectionComponentStandalone.vue.d.ts +9 -0
- package/src/manager/collectionManager/collectionManager.d.ts +2 -2
- package/src/manager/collectionManager/collectionManager.js +21 -19
- package/src/manager/panel/PanelComponent.vue +110 -0
- package/src/manager/panel/PanelComponent.vue.d.ts +19 -0
- package/src/manager/panel/PanelManagerComponent.vue +224 -0
- package/src/manager/panel/PanelManagerComponent.vue.d.ts +36 -0
- package/src/manager/panel/panelHelper.d.ts +83 -0
- package/src/manager/panel/panelHelper.js +272 -0
- package/src/manager/panel/panelManager.d.ts +338 -0
- package/src/manager/panel/panelManager.js +381 -0
- package/src/manager/window/WindowManager.vue +14 -0
- package/src/manager/window/windowHelper.js +1 -1
- package/src/search/ResultItem.vue +1 -1
- package/src/search/search.d.ts +2 -2
- package/src/search/search.js +2 -2
- package/src/vcsUiApp.d.ts +14 -0
- package/src/vcsUiApp.js +18 -0
- package/dist/assets/index-3cd5a3f3.js +0 -1
- /package/dist/assets/{cesium.035e3a.js → cesium.9e39f4.js} +0 -0
- /package/dist/assets/{ol.eb3bee.js → ol.fe8c0e.js} +0 -0
- /package/dist/assets/{vue.17a8fa.js → vue.4b3319.js} +0 -0
- /package/dist/assets/{vuetify.72ace9.css → vuetify.1621f3.css} +0 -0
@@ -0,0 +1,381 @@
|
|
1
|
+
import { reactive } from 'vue';
|
2
|
+
import { VcsEvent } from '@vcmap/core';
|
3
|
+
import { check } from '@vcsuite/check';
|
4
|
+
import { v4 as uuidv4 } from 'uuid';
|
5
|
+
import { parseBoolean } from '@vcsuite/parsers';
|
6
|
+
import { vcsAppSymbol } from '../../pluginHelper.js';
|
7
|
+
|
8
|
+
export const panelLocationSymbol = Symbol('panelLocation');
|
9
|
+
export const panelPositionSymbol = Symbol('panelPosition');
|
10
|
+
|
11
|
+
/**
|
12
|
+
* @readonly
|
13
|
+
* @enum {string}
|
14
|
+
* @property {string} LEFT - left panel (vertical)
|
15
|
+
* @property {string} RIGHT - right panel (vertical)
|
16
|
+
* @property {string} BOTTOM - bottom panel (horizontal)
|
17
|
+
*/
|
18
|
+
export const PanelLocation = {
|
19
|
+
LEFT: 'vcs-left',
|
20
|
+
RIGHT: 'vcs-right',
|
21
|
+
BOTTOM: 'vcs-bottom',
|
22
|
+
};
|
23
|
+
|
24
|
+
/**
|
25
|
+
* @typedef {Object} VerticalPanelPositionOptions
|
26
|
+
* @property {string} [width] Can be a css position string (e.g. '320px' or '50%')
|
27
|
+
* @property {string} [maxWidth] Can be a css position string (e.g. '320px' or '50%')
|
28
|
+
* @property {string} [minWidth] Can be a css position string (e.g. '320px' or '50%')
|
29
|
+
*/
|
30
|
+
|
31
|
+
/**
|
32
|
+
* @typedef {Object} HorizontalPanelPositionOptions
|
33
|
+
* @property {string} [height] Can be a css position string (e.g. '320px' or '50%')
|
34
|
+
* @property {string} [maxHeight] Can be a css position string (e.g. '320px' or '50%')
|
35
|
+
* @property {string} [minHeight] Can be a css position string (e.g. '320px' or '50%')
|
36
|
+
*/
|
37
|
+
|
38
|
+
/**
|
39
|
+
* @typedef {Object} PanelPosition
|
40
|
+
* @property {string?} left - The left CSS property participates in specifying the horizontal position of a panel.
|
41
|
+
* @property {string?} top - The top CSS property participates in specifying the vertical position of a panel.
|
42
|
+
* @property {string?} right - The right CSS property participates in specifying the horizontal position of a panel.
|
43
|
+
* @property {string?} bottom - The bottom CSS property participates in specifying the vertical position of a panel.
|
44
|
+
* @property {string} width - The width CSS property sets an element's width.
|
45
|
+
* @property {string} height - The height CSS property sets an element's height.
|
46
|
+
* @property {string} maxHeight - The maxHeight CSS property sets an element's maximal height.
|
47
|
+
* @property {string} maxWidth - The maxWidth CSS property sets an element's maximal width.
|
48
|
+
* @property {string} minHeight - The minHeight CSS property sets an element's minimal height.
|
49
|
+
* @property {string} minWidth - The minWidth CSS property sets an element's minimal width.
|
50
|
+
*/
|
51
|
+
|
52
|
+
/**
|
53
|
+
* @readonly
|
54
|
+
* @enum {Partial<PanelPosition>}
|
55
|
+
* @private
|
56
|
+
*/
|
57
|
+
export const DefaultPanelPositions = {
|
58
|
+
[PanelLocation.LEFT]: {
|
59
|
+
left: '0px',
|
60
|
+
width: '25%',
|
61
|
+
minWidth: '10%',
|
62
|
+
height: '100%',
|
63
|
+
},
|
64
|
+
[PanelLocation.RIGHT]: {
|
65
|
+
right: '0px',
|
66
|
+
width: '25%',
|
67
|
+
minWidth: '10%',
|
68
|
+
height: '100%',
|
69
|
+
},
|
70
|
+
[PanelLocation.BOTTOM]: {
|
71
|
+
bottom: '0px',
|
72
|
+
width: '100%',
|
73
|
+
height: '25%',
|
74
|
+
minHeight: '10%',
|
75
|
+
maxHeight: '75%',
|
76
|
+
},
|
77
|
+
};
|
78
|
+
|
79
|
+
/**
|
80
|
+
* @typedef {Object} PanelComponentOptions
|
81
|
+
* @property {string} [id] - Optional id, which will be set as HTML container ID. If not provided an uuid will be generated.
|
82
|
+
* @property {import("vue").Component} [component] Optional component to be rendered in the panel.
|
83
|
+
* @property {Partial<PanelState>} [state]
|
84
|
+
* @property {Partial<VerticalPanelPositionOptions|HorizontalPanelPositionOptions>} [position] Will be merged with default position for panel
|
85
|
+
* @property {Object} [props]
|
86
|
+
* @property {Object} [provides]
|
87
|
+
*/
|
88
|
+
|
89
|
+
/**
|
90
|
+
* @typedef {Object} PanelState
|
91
|
+
* @property {string} id
|
92
|
+
* @property {string|vcsAppSymbol} owner Owner of the panel, set by panelManager on add
|
93
|
+
* @property {PanelLocation} location Location of the panel, set by panelManager on add
|
94
|
+
* @property {boolean} [resizable=true] Whether size of panel can be adapted
|
95
|
+
* @property {Object<string, string>} [styles] Can be used to add additional styles to the root PanelComponent. Use Vue Style Bindings Object Syntax https://vuejs.org/v2/guide/class-and-style.html
|
96
|
+
* @property {Array<string>|Object<string,string>} [classes] Can be used to add additional classes to the root PanelComponent. Use Vue Class Bindings Syntax https://vuejs.org/v2/guide/class-and-style.html
|
97
|
+
*/
|
98
|
+
|
99
|
+
/**
|
100
|
+
* @typedef {Object} PanelComponent
|
101
|
+
* @property {string} id
|
102
|
+
* @property {import("vue").Component} component
|
103
|
+
* @property {Partial<PanelState>} state
|
104
|
+
* @property {Object} props
|
105
|
+
* @property {Object} provides
|
106
|
+
*/
|
107
|
+
|
108
|
+
/**
|
109
|
+
* @param {Partial<PanelComponent>} panelComponent
|
110
|
+
* @returns {PanelPosition|undefined}
|
111
|
+
*/
|
112
|
+
export function getPanelPosition(panelComponent) {
|
113
|
+
return panelComponent?.[panelPositionSymbol];
|
114
|
+
}
|
115
|
+
|
116
|
+
/**
|
117
|
+
* @param {PanelComponent} panelComponent
|
118
|
+
* @param {Partial<PanelPosition>} panelPosition
|
119
|
+
*/
|
120
|
+
export function setPanelPosition(panelComponent, panelPosition) {
|
121
|
+
const position = getPanelPosition(panelComponent);
|
122
|
+
const toUpdate = Object.keys(panelPosition).reduce((acc, key) => {
|
123
|
+
if (position?.[key] !== panelPosition[key]) {
|
124
|
+
acc[key] = panelPosition[key];
|
125
|
+
}
|
126
|
+
return acc;
|
127
|
+
}, {});
|
128
|
+
if (Object.keys(toUpdate).length > 0) {
|
129
|
+
Object.assign(panelComponent[panelPositionSymbol], panelPosition);
|
130
|
+
}
|
131
|
+
}
|
132
|
+
|
133
|
+
/**
|
134
|
+
* @typedef {import("../../vcsUiApp.js").VcsComponentManager<PanelComponent,PanelComponentOptions>} IPanelManager
|
135
|
+
*/
|
136
|
+
|
137
|
+
/**
|
138
|
+
* @class PanelManager
|
139
|
+
* @description Manages a set of Panels
|
140
|
+
* @implements {IPanelManager}
|
141
|
+
*/
|
142
|
+
class PanelManager {
|
143
|
+
constructor() {
|
144
|
+
/**
|
145
|
+
* @type {import("@vcmap/core").VcsEvent<PanelComponent>}
|
146
|
+
*/
|
147
|
+
this.added = new VcsEvent();
|
148
|
+
/**
|
149
|
+
* @type {import("@vcmap/core").VcsEvent<PanelComponent>}
|
150
|
+
*/
|
151
|
+
this.removed = new VcsEvent();
|
152
|
+
/**
|
153
|
+
* reactive ordered array of ids,
|
154
|
+
* @type {Array<string>}
|
155
|
+
*/
|
156
|
+
this.componentIds = [];
|
157
|
+
/**
|
158
|
+
* @type {Map<PanelLocation, string>}
|
159
|
+
* @private
|
160
|
+
*/
|
161
|
+
this._panelLocations = new Map();
|
162
|
+
/**
|
163
|
+
* @type {Map<string, PanelComponent>}
|
164
|
+
* @private
|
165
|
+
*/
|
166
|
+
this._panelComponents = new Map();
|
167
|
+
/**
|
168
|
+
* @type {Map<string, PanelPosition>}
|
169
|
+
* @private
|
170
|
+
*/
|
171
|
+
this._panelPositionsCache = new Map();
|
172
|
+
}
|
173
|
+
|
174
|
+
/**
|
175
|
+
* @param {string} id
|
176
|
+
* @returns {PanelComponent}
|
177
|
+
*/
|
178
|
+
get(id) {
|
179
|
+
return this._panelComponents.get(id);
|
180
|
+
}
|
181
|
+
|
182
|
+
/**
|
183
|
+
* @param {string} id
|
184
|
+
* @returns {boolean}
|
185
|
+
*/
|
186
|
+
has(id) {
|
187
|
+
return this._panelComponents.has(id);
|
188
|
+
}
|
189
|
+
|
190
|
+
/**
|
191
|
+
*
|
192
|
+
* @param {PanelLocation} location
|
193
|
+
* @returns {PanelComponent}
|
194
|
+
*/
|
195
|
+
getLocation(location) {
|
196
|
+
return this._panelComponents.get(this._panelLocations.get(location));
|
197
|
+
}
|
198
|
+
|
199
|
+
/**
|
200
|
+
*
|
201
|
+
* @param {PanelLocation} location
|
202
|
+
* @returns {boolean}
|
203
|
+
*/
|
204
|
+
hasLocation(location) {
|
205
|
+
return this._panelLocations.has(location);
|
206
|
+
}
|
207
|
+
|
208
|
+
/**
|
209
|
+
*
|
210
|
+
* @param {PanelLocation} location
|
211
|
+
*/
|
212
|
+
removePanelAtLocation(location) {
|
213
|
+
if (this.hasLocation(location)) {
|
214
|
+
this.remove(this.getLocation(location).id);
|
215
|
+
}
|
216
|
+
}
|
217
|
+
|
218
|
+
/**
|
219
|
+
* @param {string} id
|
220
|
+
* @returns {Partial<PanelPosition>|undefined}
|
221
|
+
*/
|
222
|
+
getCachedPosition(id) {
|
223
|
+
return this._panelPositionsCache.get(id);
|
224
|
+
}
|
225
|
+
|
226
|
+
/**
|
227
|
+
* removes a panel, Component will not be rendered anymore and will be destroyed. Add PanelComponent again
|
228
|
+
* to show the component again
|
229
|
+
* @param {string} id
|
230
|
+
*/
|
231
|
+
remove(id) {
|
232
|
+
check(id, String);
|
233
|
+
const panelComponent = this._panelComponents.get(id);
|
234
|
+
if (panelComponent) {
|
235
|
+
const { left, right, top, bottom, ...widthAndHeightOptions } =
|
236
|
+
getPanelPosition(panelComponent);
|
237
|
+
this._panelPositionsCache.set(panelComponent.id, {
|
238
|
+
...widthAndHeightOptions,
|
239
|
+
});
|
240
|
+
this.componentIds.splice(this.componentIds.indexOf(id), 1);
|
241
|
+
this._panelComponents.delete(id);
|
242
|
+
this._panelLocations.delete(panelComponent[panelLocationSymbol]);
|
243
|
+
this.removed.raiseEvent(panelComponent);
|
244
|
+
}
|
245
|
+
}
|
246
|
+
|
247
|
+
/**
|
248
|
+
* Set width for LEFT and RIGHT or height for BOTTOM panels
|
249
|
+
* @param {string} id
|
250
|
+
* @param {VerticalPanelPositionOptions|HorizontalPanelPositionOptions} panelPositionOptions
|
251
|
+
*/
|
252
|
+
setPanelPosition(id, panelPositionOptions) {
|
253
|
+
const panelComponent = this.get(id);
|
254
|
+
if (panelComponent) {
|
255
|
+
const { location } = panelComponent.state;
|
256
|
+
let allowedKeys = [];
|
257
|
+
if (location === PanelLocation.LEFT || location === PanelLocation.RIGHT) {
|
258
|
+
allowedKeys = ['width', 'minWidth', 'maxWidth'];
|
259
|
+
} else if (location === PanelLocation.BOTTOM) {
|
260
|
+
allowedKeys = ['height', 'minHeight', 'maxHeight'];
|
261
|
+
}
|
262
|
+
const toUpdate = Object.keys(panelPositionOptions)
|
263
|
+
.filter((key) => allowedKeys.includes(key))
|
264
|
+
.reduce((acc, key) => {
|
265
|
+
acc[key] = panelPositionOptions[key];
|
266
|
+
return acc;
|
267
|
+
}, {});
|
268
|
+
if (Object.keys(toUpdate).length > 0) {
|
269
|
+
setPanelPosition(panelComponent, toUpdate);
|
270
|
+
}
|
271
|
+
}
|
272
|
+
}
|
273
|
+
|
274
|
+
/**
|
275
|
+
* adds a panelComponent to the PanelManager and renders the Panel
|
276
|
+
* @param {PanelComponentOptions|PanelComponent} panelComponentOptions
|
277
|
+
* @param {string|symbol} owner pluginName or vcsAppSymbol
|
278
|
+
* @param {PanelLocation} location panel render position
|
279
|
+
* @returns {PanelComponent}
|
280
|
+
*/
|
281
|
+
add(panelComponentOptions, owner, location) {
|
282
|
+
check(owner, [String, vcsAppSymbol]);
|
283
|
+
check(location, Object.values(PanelLocation));
|
284
|
+
|
285
|
+
const id = panelComponentOptions.id || uuidv4();
|
286
|
+
const { component, position: panelPosition } = panelComponentOptions;
|
287
|
+
|
288
|
+
const styles = { ...panelComponentOptions?.state?.styles };
|
289
|
+
const classes = Array.isArray(panelComponentOptions?.state?.classes)
|
290
|
+
? [...(panelComponentOptions?.state?.classes ?? [])]
|
291
|
+
: { ...panelComponentOptions?.state?.classes };
|
292
|
+
|
293
|
+
const state = reactive({
|
294
|
+
id,
|
295
|
+
owner,
|
296
|
+
location,
|
297
|
+
resizable: parseBoolean(panelComponentOptions?.state?.resizable, true),
|
298
|
+
styles,
|
299
|
+
classes,
|
300
|
+
});
|
301
|
+
|
302
|
+
const props = panelComponentOptions.props || {};
|
303
|
+
const provides = panelComponentOptions.provides || {};
|
304
|
+
|
305
|
+
const defaultPosition = DefaultPanelPositions[location];
|
306
|
+
const cachedPosition = this.getCachedPosition(id) || {};
|
307
|
+
const position = reactive({
|
308
|
+
...defaultPosition,
|
309
|
+
...cachedPosition,
|
310
|
+
...panelPosition,
|
311
|
+
});
|
312
|
+
/**
|
313
|
+
* @type {PanelComponent}
|
314
|
+
*/
|
315
|
+
const panelComponent = {
|
316
|
+
get id() {
|
317
|
+
return id;
|
318
|
+
},
|
319
|
+
get state() {
|
320
|
+
return state;
|
321
|
+
},
|
322
|
+
get component() {
|
323
|
+
return component;
|
324
|
+
},
|
325
|
+
get props() {
|
326
|
+
return props;
|
327
|
+
},
|
328
|
+
get provides() {
|
329
|
+
return provides;
|
330
|
+
},
|
331
|
+
[panelPositionSymbol]: position,
|
332
|
+
[panelLocationSymbol]: location,
|
333
|
+
};
|
334
|
+
|
335
|
+
this.remove(id);
|
336
|
+
this.removePanelAtLocation(location);
|
337
|
+
this._panelComponents.set(id, panelComponent);
|
338
|
+
this._panelLocations.set(location, id);
|
339
|
+
this.componentIds.push(id);
|
340
|
+
this.added.raiseEvent(panelComponent);
|
341
|
+
return panelComponent;
|
342
|
+
}
|
343
|
+
|
344
|
+
/**
|
345
|
+
* removes all panelComponents of a specific owner (plugin) and fires removed Events
|
346
|
+
* @param {string|vcsAppSymbol} owner
|
347
|
+
*/
|
348
|
+
removeOwner(owner) {
|
349
|
+
const componentIds = [...this.componentIds];
|
350
|
+
componentIds.forEach((id) => {
|
351
|
+
const { state } = this.get(id);
|
352
|
+
if (owner === state.owner) {
|
353
|
+
this.remove(id);
|
354
|
+
}
|
355
|
+
});
|
356
|
+
}
|
357
|
+
|
358
|
+
/**
|
359
|
+
* removes all panelComponents and fires removed Events
|
360
|
+
*/
|
361
|
+
clear() {
|
362
|
+
const componentIds = [...this.componentIds];
|
363
|
+
componentIds.forEach((id) => {
|
364
|
+
this.remove(id);
|
365
|
+
});
|
366
|
+
this._panelPositionsCache.clear();
|
367
|
+
}
|
368
|
+
|
369
|
+
/**
|
370
|
+
* destroys the panelManager;
|
371
|
+
*/
|
372
|
+
destroy() {
|
373
|
+
this.added.destroy();
|
374
|
+
this.removed.destroy();
|
375
|
+
this.componentIds.splice(0);
|
376
|
+
this._panelComponents.clear();
|
377
|
+
this._panelPositionsCache.clear();
|
378
|
+
}
|
379
|
+
}
|
380
|
+
|
381
|
+
export default PanelManager;
|
@@ -60,6 +60,7 @@
|
|
60
60
|
|
61
61
|
import WindowComponent from './WindowComponent.vue';
|
62
62
|
import WindowComponentHeader from './WindowComponentHeader.vue';
|
63
|
+
import BalloonComponent from '../../featureInfo/BalloonComponent.vue';
|
63
64
|
import {
|
64
65
|
getPositionAppliedOnTarget,
|
65
66
|
getTargetSize,
|
@@ -110,6 +111,19 @@
|
|
110
111
|
const parentComponent =
|
111
112
|
!windowComponent?.state?.dockable &&
|
112
113
|
windowManager.get(windowComponent.parentId);
|
114
|
+
|
115
|
+
if (
|
116
|
+
windowComponent.component.name === BalloonComponent.name ||
|
117
|
+
(windowComponent.component.components &&
|
118
|
+
Object.hasOwn(
|
119
|
+
windowComponent.component.components,
|
120
|
+
BalloonComponent.name,
|
121
|
+
))
|
122
|
+
) {
|
123
|
+
// do not clip balloons to target
|
124
|
+
return windowComponent?.position;
|
125
|
+
}
|
126
|
+
|
113
127
|
return getPositionAppliedOnTarget(
|
114
128
|
windowComponent?.position,
|
115
129
|
targetSize.value,
|
package/src/search/search.d.ts
CHANGED
@@ -24,8 +24,8 @@ export type SearchImpl = {
|
|
24
24
|
* Name of the implementation. Must be the name of the plugin the SearchImpl is owned by
|
25
25
|
*/
|
26
26
|
name: string;
|
27
|
-
search: (arg0: string) => Array<ResultItem
|
28
|
-
suggest?: ((arg0: string) => Array<string
|
27
|
+
search: (arg0: string) => Promise<Array<ResultItem>>;
|
28
|
+
suggest?: ((arg0: string) => Promise<Array<string>>) | undefined;
|
29
29
|
/**
|
30
30
|
* - should abort any ongoing requests to search or suggest without throwing an error
|
31
31
|
*/
|
package/src/search/search.js
CHANGED
@@ -34,8 +34,8 @@ import { getViewpointFromFeature } from '../actions/actionHelper.js';
|
|
34
34
|
/**
|
35
35
|
* @typedef {Object} SearchImpl
|
36
36
|
* @property {string} name Name of the implementation. Must be the name of the plugin the SearchImpl is owned by
|
37
|
-
* @property {function(string):Array<ResultItem
|
38
|
-
* @property {function(string):Array<string
|
37
|
+
* @property {function(string):Promise<Array<ResultItem>>} search
|
38
|
+
* @property {function(string):Promise<Array<string>>} [suggest] // XXX currently not implemented in UI at Beta state
|
39
39
|
* @property{function():void} abort - should abort any ongoing requests to search or suggest without throwing an error
|
40
40
|
* @property {function():void} destroy
|
41
41
|
*/
|
package/src/vcsUiApp.d.ts
CHANGED
@@ -32,6 +32,10 @@ export type PluginConfigEditor = {
|
|
32
32
|
* - The item the editor can be used for. Can be a name or className. Default is the plugin's name.
|
33
33
|
*/
|
34
34
|
itemName?: string | undefined;
|
35
|
+
/**
|
36
|
+
* - An optional function returning an url referencing help or further information regarding the config editor.
|
37
|
+
*/
|
38
|
+
infoUrlCallback?: (() => string) | undefined;
|
35
39
|
};
|
36
40
|
export type createPlugin<P extends Object, S extends Object> = (arg0: P, arg1: string) => VcsPlugin<P, S>;
|
37
41
|
/**
|
@@ -115,6 +119,11 @@ declare class VcsUiApp extends VcsApp {
|
|
115
119
|
* @private
|
116
120
|
*/
|
117
121
|
private _windowManager;
|
122
|
+
/**
|
123
|
+
* @type {PanelManager}
|
124
|
+
* @private
|
125
|
+
*/
|
126
|
+
private _panelManager;
|
118
127
|
/**
|
119
128
|
* @type {NavbarManager}
|
120
129
|
* @private
|
@@ -217,6 +226,10 @@ declare class VcsUiApp extends VcsApp {
|
|
217
226
|
* @returns {WindowManager}
|
218
227
|
*/
|
219
228
|
get windowManager(): WindowManager;
|
229
|
+
/**
|
230
|
+
* @returns {PanelManager}
|
231
|
+
*/
|
232
|
+
get panelManager(): PanelManager;
|
220
233
|
/**
|
221
234
|
* @returns {NavbarManager}
|
222
235
|
*/
|
@@ -292,6 +305,7 @@ import { OverrideClassRegistry } from '@vcmap/core';
|
|
292
305
|
import AbstractFeatureInfoView from './featureInfo/abstractFeatureInfoView.js';
|
293
306
|
import ToolboxManager from './manager/toolbox/toolboxManager.js';
|
294
307
|
import WindowManager from './manager/window/windowManager.js';
|
308
|
+
import PanelManager from './manager/panel/panelManager.js';
|
295
309
|
import NavbarManager from './manager/navbarManager.js';
|
296
310
|
import FeatureInfo from './featureInfo/featureInfo.js';
|
297
311
|
import OverviewMap from './navigation/overviewMap.js';
|
package/src/vcsUiApp.js
CHANGED
@@ -18,6 +18,7 @@ import ToolboxManager, {
|
|
18
18
|
setupDefaultGroups,
|
19
19
|
} from './manager/toolbox/toolboxManager.js';
|
20
20
|
import WindowManager from './manager/window/windowManager.js';
|
21
|
+
import PanelManager from './manager/panel/panelManager.js';
|
21
22
|
import NavbarManager from './manager/navbarManager.js';
|
22
23
|
// eslint-disable-next-line no-unused-vars
|
23
24
|
import ContentTreeCollection, { // imported for type
|
@@ -66,6 +67,7 @@ import createSiteConfig from './siteConfig.js';
|
|
66
67
|
* @property {import("vue").Component & { title: string | undefined}} component - A editor component to configure a plugin or item
|
67
68
|
* @property {string} [collectionName='plugins'] - The collection the item belongs to. Default is plugins collection.
|
68
69
|
* @property {string} [itemName] - The item the editor can be used for. Can be a name or className. Default is the plugin's name.
|
70
|
+
* @property {function():string} [infoUrlCallback] - An optional function returning an url referencing help or further information regarding the config editor.
|
69
71
|
*/
|
70
72
|
|
71
73
|
/**
|
@@ -170,6 +172,7 @@ class VcsUiApp extends VcsApp {
|
|
170
172
|
this._pluginListeners = [
|
171
173
|
this._plugins.added.addEventListener((plugin) => {
|
172
174
|
this._windowManager.removeOwner(plugin.name);
|
175
|
+
this._panelManager.removeOwner(plugin.name);
|
173
176
|
this._navbarManager.removeOwner(plugin.name);
|
174
177
|
this._toolboxManager.removeOwner(plugin.name);
|
175
178
|
this._categoryManager.removeOwner(plugin.name);
|
@@ -195,6 +198,7 @@ class VcsUiApp extends VcsApp {
|
|
195
198
|
}),
|
196
199
|
this._plugins.removed.addEventListener(async (plugin) => {
|
197
200
|
this._windowManager.removeOwner(plugin.name);
|
201
|
+
this._panelManager.removeOwner(plugin.name);
|
198
202
|
this._navbarManager.removeOwner(plugin.name);
|
199
203
|
this._toolboxManager.removeOwner(plugin.name);
|
200
204
|
this._categoryManager.removeOwner(plugin.name);
|
@@ -238,6 +242,12 @@ class VcsUiApp extends VcsApp {
|
|
238
242
|
* @private
|
239
243
|
*/
|
240
244
|
this._windowManager = new WindowManager();
|
245
|
+
/**
|
246
|
+
* @type {PanelManager}
|
247
|
+
* @private
|
248
|
+
*/
|
249
|
+
this._panelManager = new PanelManager();
|
250
|
+
|
241
251
|
/**
|
242
252
|
* @type {NavbarManager}
|
243
253
|
* @private
|
@@ -384,6 +394,13 @@ class VcsUiApp extends VcsApp {
|
|
384
394
|
return this._windowManager;
|
385
395
|
}
|
386
396
|
|
397
|
+
/**
|
398
|
+
* @returns {PanelManager}
|
399
|
+
*/
|
400
|
+
get panelManager() {
|
401
|
+
return this._panelManager;
|
402
|
+
}
|
403
|
+
|
387
404
|
/**
|
388
405
|
* @returns {NavbarManager}
|
389
406
|
*/
|
@@ -667,6 +684,7 @@ class VcsUiApp extends VcsApp {
|
|
667
684
|
*/
|
668
685
|
destroy() {
|
669
686
|
this.windowManager.destroy();
|
687
|
+
this.panelManager.destroy();
|
670
688
|
this.navbarManager.destroy();
|
671
689
|
this.toolboxManager.destroy();
|
672
690
|
this.categoryManager.destroy();
|
@@ -1 +0,0 @@
|
|
1
|
-
import{initAppFromAppConfig as p}from"./ui.74ba2a.js";p("#app","app.config.json");
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|