@vcmap/ui 6.0.0-rc.2 → 6.0.0-rc.3
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/build.js +40 -60
- package/build/buildHelpers.js +2 -8
- package/build/info/conf.json +1 -1
- package/config/projects.config.json +2 -1
- package/config/splashscreen.config.json +45 -0
- package/dist/.htaccess +7 -0
- package/dist/assets/@mdi/font/README.md +25 -0
- package/dist/assets/@mdi/font/css/materialdesignicons.min-7a4f6be0.css +3 -0
- package/dist/assets/@mdi/font/css/materialdesignicons.min.css.map +16 -0
- package/dist/assets/@mdi/font/fonts/materialdesignicons-webfont.woff2 +0 -0
- package/dist/assets/cesium.js +1 -1
- package/dist/assets/{core.cbf44a.js → core-72f21835.js} +673 -641
- package/dist/assets/core.js +1 -1
- package/dist/assets/{ol.86e93c.js → ol-2d33bc8b.js} +42505 -44282
- package/dist/assets/ol.js +1 -1
- package/dist/assets/ui-2ab43a16.css +1 -0
- package/dist/assets/{ui.7c276c.js → ui-2ab43a16.js} +12026 -12100
- package/dist/assets/ui.js +1 -1
- package/dist/assets/vue.js +1 -1
- package/dist/assets/{vuetify.4d18fe.css → vuetify-760ced3b.css} +1 -1
- package/dist/assets/{vuetify.4d18fe.js → vuetify-760ced3b.js} +5720 -5662
- package/dist/assets/vuetify.js +1 -1
- package/dist/index.html +11 -10
- package/index.d.ts +7 -5
- package/index.html +5 -5
- package/index.js +3 -3
- package/lib/olLib.js +84 -23
- package/package.json +5 -5
- package/plugins/@vcmap-show-case/flight-component-example/src/FlightExample.vue +41 -1
- package/plugins/@vcmap-show-case/form-inputs-example/src/FormInputsExample.vue +70 -30
- package/plugins/@vcmap-show-case/form-inputs-example/src/exampleActions.js +7 -11
- package/plugins/@vcmap-show-case/form-inputs-example/src/index.js +2 -2
- package/plugins/@vcmap-show-case/list-example/src/ListExample.vue +21 -8
- package/plugins/@vcmap-show-case/style-input-example/src/StyleExample.vue +29 -90
- package/public/assets/@mdi/font/README.md +25 -0
- package/public/assets/@mdi/font/css/materialdesignicons.min.css +2 -2
- package/public/assets/@mdi/font/css/materialdesignicons.min.css.map +16 -0
- package/public/assets/@mdi/font/fonts/materialdesignicons-webfont.woff2 +0 -0
- package/src/actions/actionHelper.js +20 -20
- package/src/actions/flightActions.js +5 -5
- package/src/actions/listActions.d.ts +0 -7
- package/src/actions/listActions.js +4 -20
- package/src/actions/stateRefAction.js +2 -2
- package/src/application/VcsApp.vue +52 -27
- package/src/application/VcsApp.vue.d.ts +1 -0
- package/src/application/VcsAttributions.vue +2 -13
- package/src/application/VcsAttributionsFooter.vue +10 -11
- package/src/application/VcsPositionDisplay.vue +8 -23
- package/src/application/VcsPositionDisplay.vue.d.ts +0 -1
- package/src/application/VcsSettings.vue +10 -17
- package/src/application/VcsSplashScreen.vue +25 -42
- package/src/application/VcsSplashScreen.vue.d.ts +0 -2
- package/src/application/VcsTextPage.vue +12 -43
- package/src/application/VcsTextPage.vue.d.ts +4 -8
- package/src/application/VcsTextPageFooter.vue +22 -40
- package/src/components/extent/VcsExtentEditor.vue +1 -1
- package/src/components/flight/VcsFlightAnchorsComponent.vue +63 -36
- package/src/components/flight/VcsFlightComponent.vue +16 -21
- package/src/components/flight/VcsFlightPlayer.vue +27 -5
- package/src/components/form-inputs-controls/VcsCheckbox.vue +9 -5
- package/src/components/form-inputs-controls/VcsCoordinate.vue +13 -1
- package/src/components/form-inputs-controls/VcsCoordinate.vue.d.ts +5 -2
- package/src/components/form-inputs-controls/VcsDatePicker.vue +34 -60
- package/src/components/form-inputs-controls/VcsDatePicker.vue.d.ts +1 -63
- package/src/components/form-inputs-controls/VcsFileInput.vue +17 -18
- package/src/components/form-inputs-controls/VcsFileInput.vue.d.ts +1 -0
- package/src/components/form-inputs-controls/VcsLabel.vue +1 -1
- package/src/components/form-inputs-controls/VcsRadio.vue +17 -3
- package/src/components/form-inputs-controls/VcsRadio.vue.d.ts +1 -0
- package/src/components/form-inputs-controls/VcsSelect.vue +39 -27
- package/src/components/form-inputs-controls/VcsSelect.vue.d.ts +5 -2
- package/src/components/form-inputs-controls/VcsSlider.vue +14 -1
- package/src/components/form-inputs-controls/VcsSlider.vue.d.ts +5 -2
- package/src/components/form-inputs-controls/VcsTextArea.vue +26 -22
- package/src/components/form-inputs-controls/VcsTextArea.vue.d.ts +1 -0
- package/src/components/form-inputs-controls/VcsTextField.vue +6 -4
- package/src/components/form-inputs-controls/VcsWizardStep.vue +1 -1
- package/src/components/form-inputs-controls/vcsTextField.scss +8 -8
- package/src/components/form-output/VcsFormattedNumber.vue +15 -1
- package/src/components/form-output/VcsFormattedNumber.vue.d.ts +9 -0
- package/src/components/lists/VcsActionList.vue +7 -7
- package/src/components/lists/VcsList.vue +10 -17
- package/src/components/lists/VcsList.vue.d.ts +3 -7
- package/src/components/lists/VcsListItem.vue +51 -21
- package/src/components/lists/VcsListItem.vue.d.ts +11 -5
- package/src/components/section/VcsExpansionPanel.vue +101 -0
- package/src/components/section/VcsExpansionPanel.vue.d.ts +19 -0
- package/src/components/style/MenuWrapper.vue +24 -26
- package/src/components/style/MenuWrapper.vue.d.ts +4 -4
- package/src/components/style/VcsFillMenu.vue +9 -16
- package/src/components/style/VcsFillMenu.vue.d.ts +0 -18
- package/src/components/style/VcsFillSelector.vue +13 -16
- package/src/components/style/VcsImageMenu.vue +8 -25
- package/src/components/style/VcsImageMenu.vue.d.ts +0 -27
- package/src/components/style/VcsImageSelector.vue +102 -167
- package/src/components/style/VcsImageSelector.vue.d.ts +15 -15
- package/src/components/style/VcsStrokeMenu.vue +8 -15
- package/src/components/style/VcsStrokeMenu.vue.d.ts +0 -18
- package/src/components/style/VcsStrokeSelector.vue +11 -18
- package/src/components/style/VcsTextMenu.vue +9 -12
- package/src/components/style/VcsTextMenu.vue.d.ts +0 -9
- package/src/components/style/VcsTextSelector.vue +79 -95
- package/src/components/style/VcsTextSelector.vue.d.ts +20 -22
- package/src/components/style/VcsVectorStyleComponent.vue +7 -18
- package/src/components/style/VcsVectorStyleComponent.vue.d.ts +1 -1
- package/src/components/style/composables.d.ts +0 -14
- package/src/components/style/composables.js +0 -49
- package/src/components/vector-properties/VcsFeatureEditingWindow.vue +39 -6
- package/src/components/vector-properties/VcsVectorPropertiesComponent.vue +1 -1
- package/src/components/viewpoint/VcsViewpointComponent.vue +21 -8
- package/src/components/viewpoint/VcsViewpointEditor.vue +1 -0
- package/src/contentTree/contentTreeItem.d.ts +2 -2
- package/src/contentTree/contentTreeItem.js +7 -7
- package/src/featureInfo/featureInfo.js +8 -10
- package/src/init.d.ts +5 -38
- package/src/init.js +19 -18
- package/src/legend/StyleLegendItem.vue +4 -9
- package/src/legend/VcsLegend.vue +28 -54
- package/src/manager/buttonManager.js +4 -4
- package/src/manager/collectionManager/CollectionComponent.vue +17 -42
- package/src/manager/collectionManager/CollectionComponent.vue.d.ts +4 -2
- package/src/manager/collectionManager/CollectionComponentContent.vue +7 -6
- package/src/manager/collectionManager/CollectionComponentContent.vue.d.ts +3 -1
- package/src/manager/collectionManager/CollectionComponentList.vue +10 -8
- package/src/manager/collectionManager/CollectionComponentList.vue.d.ts +4 -2
- package/src/manager/collectionManager/CollectionComponentProvider.vue +1 -1
- package/src/manager/collectionManager/CollectionComponentStandalone.vue +3 -2
- package/src/manager/collectionManager/CollectionManager.vue +1 -1
- package/src/manager/collectionManager/collectionComponentClass.js +6 -9
- package/src/manager/collectionManager/collectionManager.js +10 -10
- package/src/manager/collectionManager/editorCollectionComponentClass.js +4 -4
- package/src/manager/contextMenu/contextMenuManager.js +2 -2
- package/src/manager/navbarManager.js +2 -2
- package/src/manager/panel/panelManager.js +3 -3
- package/src/manager/toolbox/toolboxManager.js +10 -10
- package/src/manager/window/windowManager.d.ts +2 -2
- package/src/manager/window/windowManager.js +4 -4
- package/src/search/search.js +2 -2
- package/src/siteConfig.js +1 -1
- package/src/state.js +4 -4
- package/src/vcsUiApp.d.ts +14 -10
- package/src/vcsUiApp.js +1 -1
- package/src/vuePlugins/vuetify.d.ts +2 -0
- package/src/vuePlugins/vuetify.js +11 -0
- package/dist/assets/@mdi/font/css/materialdesignicons.css.map +0 -16
- package/dist/assets/@mdi/font/css/materialdesignicons.min.e3f476.css +0 -3
- package/dist/assets/index-8eGauqjA.js +0 -1
- package/dist/assets/ui.7c276c.css +0 -1
- package/public/assets/@mdi/font/css/materialdesignicons.css.map +0 -16
- package/src/application/VcsCustomScreen.vue +0 -45
- package/src/application/VcsCustomScreen.vue.d.ts +0 -15
- /package/dist/assets/{cesium.0b750d.js → cesium-cb4dbfba.js} +0 -0
- /package/dist/assets/{favicon-128.4c4ce5.png → favicon-128-4c4ce5df.png} +0 -0
- /package/dist/assets/{favicon-180.5b99c0.png → favicon-180-4c4ce5df.png} +0 -0
- /package/dist/assets/{favicon-192.0e205e.png → favicon-192-4c4ce5df.png} +0 -0
- /package/dist/assets/{favicon-32.6b9add.png → favicon-32-4c4ce5df.png} +0 -0
- /package/dist/assets/{favicon.d5ec97.svg → favicon-4c4ce5df.svg} +0 -0
- /package/dist/assets/font/{TitilliumWeb-Regular.9ca076.woff2 → TitilliumWeb-Regular-9ca076be.woff2} +0 -0
- /package/dist/assets/style/{icon-marker.70960f.png → icon-marker-70960f05.png} +0 -0
- /package/dist/assets/style/{icon-marker-blue.534e37.png → icon-marker-blue-534e374b.png} +0 -0
- /package/dist/assets/style/{icon-marker-green.0b6a92.png → icon-marker-green-0b6a92bc.png} +0 -0
- /package/dist/assets/style/{icon-marker-o.036477.png → icon-marker-o-036477fa.png} +0 -0
- /package/dist/assets/style/{icon-marker-o-blue.7b6d62.png → icon-marker-o-blue-7b6d6279.png} +0 -0
- /package/dist/assets/style/{icon-marker-o-green.c863c0.png → icon-marker-o-green-c863c0fa.png} +0 -0
- /package/dist/assets/style/{icon-marker-o-red.93ff58.png → icon-marker-o-red-93ff58df.png} +0 -0
- /package/dist/assets/style/{icon-marker-red.313d03.png → icon-marker-red-313d03e8.png} +0 -0
- /package/dist/assets/style/{icon-pin.b7ce77.png → icon-pin-b7ce771e.png} +0 -0
- /package/dist/assets/style/{icon-pin-blue.7be369.png → icon-pin-blue-7be369a3.png} +0 -0
- /package/dist/assets/style/{icon-pin-green.cbb935.png → icon-pin-green-cbb935fe.png} +0 -0
- /package/dist/assets/style/{icon-pin-red.3f25b2.png → icon-pin-red-3f25b245.png} +0 -0
- /package/dist/assets/{vue.a3cd64.js → vue-03b265aa.js} +0 -0
- /package/public/assets/{favicon-128.png → favicon-128-4c4ce5df.png} +0 -0
- /package/public/assets/{favicon-180.png → favicon-180-4c4ce5df.png} +0 -0
- /package/public/assets/{favicon-192.png → favicon-192-4c4ce5df.png} +0 -0
- /package/public/assets/{favicon-32.png → favicon-32-4c4ce5df.png} +0 -0
- /package/public/assets/{favicon.svg → favicon-4c4ce5df.svg} +0 -0
- /package/src/components/{form-inputs-controls → section}/VcsFormSection.vue +0 -0
- /package/src/components/{form-inputs-controls → section}/VcsFormSection.vue.d.ts +0 -0
@@ -60,7 +60,7 @@
|
|
60
60
|
pointVectorProperties,
|
61
61
|
nonPointVectorProperties,
|
62
62
|
} from './VcsVectorPropertiesComponent.vue';
|
63
|
-
import VcsFormSection from '../
|
63
|
+
import VcsFormSection from '../section/VcsFormSection.vue';
|
64
64
|
|
65
65
|
/**
|
66
66
|
* @typedef {Object} EditorManager
|
@@ -290,6 +290,9 @@
|
|
290
290
|
nFeatures: features.value.length,
|
291
291
|
}));
|
292
292
|
|
293
|
+
/**
|
294
|
+
* @returns {{actions: VcsActions, destroy: function():void}}
|
295
|
+
*/
|
293
296
|
function getAllowedModifyActions() {
|
294
297
|
const allowedModes = getAllowedEditorTransformationModes(
|
295
298
|
currentGeometryTypes.value.types,
|
@@ -301,26 +304,49 @@
|
|
301
304
|
name: mode,
|
302
305
|
title: `components.editor.${mode}`,
|
303
306
|
icon: EditorTransformationIcons[mode],
|
304
|
-
active:
|
307
|
+
active: mode === currentTransformationMode.value,
|
305
308
|
callback: () => {
|
306
309
|
toggleTransformationSession(mode);
|
307
310
|
},
|
308
311
|
};
|
309
312
|
});
|
310
313
|
|
314
|
+
const transformationModeWatcher = watch(
|
315
|
+
currentTransformationMode,
|
316
|
+
(mode) => {
|
317
|
+
allowedActions.forEach((action) => {
|
318
|
+
if (Object.values(TransformationMode).includes(action.name)) {
|
319
|
+
action.active = mode === action.name;
|
320
|
+
}
|
321
|
+
});
|
322
|
+
},
|
323
|
+
);
|
324
|
+
|
325
|
+
let geometryEditingWatcher;
|
311
326
|
if (features.value.length === 1) {
|
312
|
-
|
327
|
+
const editGeometryAction = {
|
313
328
|
name: 'editGeometry',
|
314
329
|
title: `components.editor.edit`,
|
315
330
|
icon: '$vcsEditVertices',
|
316
|
-
active: isGeometryEditing,
|
331
|
+
active: isGeometryEditing.value,
|
317
332
|
callback: () => {
|
318
333
|
toggleEditGeometrySession();
|
319
334
|
},
|
335
|
+
};
|
336
|
+
allowedActions.unshift(editGeometryAction);
|
337
|
+
|
338
|
+
geometryEditingWatcher = watch(isGeometryEditing, () => {
|
339
|
+
editGeometryAction.active = isGeometryEditing.value;
|
320
340
|
});
|
321
341
|
}
|
322
342
|
|
323
|
-
return
|
343
|
+
return {
|
344
|
+
actions: allowedActions,
|
345
|
+
destroy() {
|
346
|
+
transformationModeWatcher();
|
347
|
+
geometryEditingWatcher?.();
|
348
|
+
},
|
349
|
+
};
|
324
350
|
}
|
325
351
|
|
326
352
|
function getAllowedVectorProperties() {
|
@@ -350,6 +376,8 @@
|
|
350
376
|
return properties;
|
351
377
|
}
|
352
378
|
|
379
|
+
let destroyModifyActions = () => {};
|
380
|
+
|
353
381
|
const geometryTypesWatcher = watch(
|
354
382
|
currentGeometryTypes,
|
355
383
|
(curr, prev) => {
|
@@ -359,7 +387,11 @@
|
|
359
387
|
(curr.nFeatures > 1 && prev.nFeatures === 1) ||
|
360
388
|
(prev.nFeatures > 1 && curr.nFeatures === 1)
|
361
389
|
) {
|
362
|
-
|
390
|
+
destroyModifyActions();
|
391
|
+
const modifyActions = getAllowedModifyActions();
|
392
|
+
destroyModifyActions = modifyActions.destroy;
|
393
|
+
|
394
|
+
availableModifyActions.value = modifyActions.actions;
|
363
395
|
availableVectorProperties.value = getAllowedVectorProperties();
|
364
396
|
}
|
365
397
|
},
|
@@ -379,6 +411,7 @@
|
|
379
411
|
geometryTypesWatcher();
|
380
412
|
propsWatcher();
|
381
413
|
editorManager.stopEditing();
|
414
|
+
destroyModifyActions();
|
382
415
|
});
|
383
416
|
|
384
417
|
return {
|
@@ -460,7 +460,7 @@
|
|
460
460
|
useProxiedComplexModel,
|
461
461
|
useModelHasProperty,
|
462
462
|
} from '../modelHelper.js';
|
463
|
-
import VcsFormSection from '../
|
463
|
+
import VcsFormSection from '../section/VcsFormSection.vue';
|
464
464
|
import VcsLabel from '../form-inputs-controls/VcsLabel.vue';
|
465
465
|
import VcsTextField from '../form-inputs-controls/VcsTextField.vue';
|
466
466
|
import VcsSelect from '../form-inputs-controls/VcsSelect.vue';
|
@@ -176,11 +176,12 @@
|
|
176
176
|
onUnmounted,
|
177
177
|
reactive,
|
178
178
|
ref,
|
179
|
+
toRaw,
|
179
180
|
watch,
|
180
181
|
} from 'vue';
|
181
182
|
import { VSheet, VContainer, VRow, VCol } from 'vuetify/components';
|
182
183
|
import { CesiumMap, ObliqueMap, OpenlayersMap, Viewpoint } from '@vcmap/core';
|
183
|
-
import VcsFormSection from '../
|
184
|
+
import VcsFormSection from '../section/VcsFormSection.vue';
|
184
185
|
import VcsLabel from '../form-inputs-controls/VcsLabel.vue';
|
185
186
|
import VcsTextField from '../form-inputs-controls/VcsTextField.vue';
|
186
187
|
import VcsCheckbox from '../form-inputs-controls/VcsCheckbox.vue';
|
@@ -188,6 +189,20 @@
|
|
188
189
|
import VcsSlider from '../form-inputs-controls/VcsSlider.vue';
|
189
190
|
import { useProxiedComplexModel } from '../modelHelper.js';
|
190
191
|
|
192
|
+
/**
|
193
|
+
* Updates the localValue ref by keeping name and properties
|
194
|
+
* @param {import("vue").Ref<import("vue").UnwrapRef<import("@vcmap/core").ViewpointOptions>>} localValue
|
195
|
+
* @param {import("@vcmap/core").Viewpoint} viewpoint
|
196
|
+
*/
|
197
|
+
function updateLocalValueFromViewpoint(localValue, viewpoint) {
|
198
|
+
const options = viewpoint.toJSON();
|
199
|
+
options.name = localValue.value.name;
|
200
|
+
if (localValue.value.properties) {
|
201
|
+
options.properties = toRaw(localValue.value.properties);
|
202
|
+
}
|
203
|
+
localValue.value = options;
|
204
|
+
}
|
205
|
+
|
191
206
|
/**
|
192
207
|
* Set up post render handler, if action is active.
|
193
208
|
* If action is inactive, destroy post render handler to allow manual editing.
|
@@ -213,9 +228,7 @@
|
|
213
228
|
) {
|
214
229
|
return;
|
215
230
|
}
|
216
|
-
|
217
|
-
options.name = localValue.value.name;
|
218
|
-
localValue.value = options;
|
231
|
+
updateLocalValueFromViewpoint(localValue, viewpoint);
|
219
232
|
cachedViewpoint = viewpoint;
|
220
233
|
},
|
221
234
|
);
|
@@ -416,10 +429,10 @@
|
|
416
429
|
title: 'components.viewpoint.updateFromView',
|
417
430
|
async callback() {
|
418
431
|
if (app.maps.activeMap) {
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
432
|
+
updateLocalValueFromViewpoint(
|
433
|
+
localValue,
|
434
|
+
await app.maps.activeMap.getViewpoint(),
|
435
|
+
);
|
423
436
|
}
|
424
437
|
},
|
425
438
|
};
|
@@ -272,11 +272,11 @@ declare class ContentTreeItem {
|
|
272
272
|
/**
|
273
273
|
* @param {(string|HTMLCanvasElement|HTMLImageElement)=} icon
|
274
274
|
*/
|
275
|
-
set icon(icon: string |
|
275
|
+
set icon(icon: string | HTMLImageElement | HTMLCanvasElement | undefined);
|
276
276
|
/**
|
277
277
|
* @type {string|HTMLCanvasElement|HTMLImageElement|undefined}
|
278
278
|
*/
|
279
|
-
get icon(): string |
|
279
|
+
get icon(): string | HTMLImageElement | HTMLCanvasElement | undefined;
|
280
280
|
/**
|
281
281
|
* @param {number} weight
|
282
282
|
*/
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { ref, reactive, computed, shallowRef } from 'vue';
|
2
|
-
import { check,
|
2
|
+
import { check, maybe, ofEnum, oneOf } from '@vcsuite/check';
|
3
3
|
import { parseBoolean, parseNumber } from '@vcsuite/parsers';
|
4
4
|
import { ClassRegistry, VcsEvent } from '@vcmap/core';
|
5
5
|
import { createLinkAction } from '../actions/actionHelper.js';
|
@@ -258,7 +258,7 @@ class ContentTreeItem {
|
|
258
258
|
* @param {StateActionState} state
|
259
259
|
*/
|
260
260
|
set state(state) {
|
261
|
-
check(state,
|
261
|
+
check(state, ofEnum(StateActionState));
|
262
262
|
|
263
263
|
if (this._state.value !== state) {
|
264
264
|
this._state.value = state;
|
@@ -277,7 +277,7 @@ class ContentTreeItem {
|
|
277
277
|
* @param {string} url
|
278
278
|
*/
|
279
279
|
set infoUrl(url) {
|
280
|
-
|
280
|
+
check(url, maybe(String));
|
281
281
|
|
282
282
|
if (this._infoUrl !== url) {
|
283
283
|
this._infoUrl = url;
|
@@ -309,7 +309,7 @@ class ContentTreeItem {
|
|
309
309
|
* @param {string|undefined} title
|
310
310
|
*/
|
311
311
|
set title(title) {
|
312
|
-
|
312
|
+
check(title, maybe(String));
|
313
313
|
|
314
314
|
this._title.value = title;
|
315
315
|
}
|
@@ -325,7 +325,7 @@ class ContentTreeItem {
|
|
325
325
|
* @param {string|undefined} tooltip
|
326
326
|
*/
|
327
327
|
set tooltip(tooltip) {
|
328
|
-
|
328
|
+
check(tooltip, maybe(String));
|
329
329
|
|
330
330
|
this._tooltip.value = tooltip;
|
331
331
|
}
|
@@ -341,7 +341,7 @@ class ContentTreeItem {
|
|
341
341
|
* @param {(string|HTMLCanvasElement|HTMLImageElement)=} icon
|
342
342
|
*/
|
343
343
|
set icon(icon) {
|
344
|
-
|
344
|
+
check(icon, maybe(oneOf(String, HTMLElement)));
|
345
345
|
|
346
346
|
this._icon.value = icon;
|
347
347
|
}
|
@@ -411,7 +411,7 @@ class ContentTreeItem {
|
|
411
411
|
*/
|
412
412
|
addAction(action, weight = 11) {
|
413
413
|
check(action.name, String);
|
414
|
-
|
414
|
+
check(weight, maybe(Number));
|
415
415
|
|
416
416
|
const index = this._getActionIndex(action.name);
|
417
417
|
if (index > -1) {
|
@@ -21,7 +21,7 @@ import {
|
|
21
21
|
Entity,
|
22
22
|
} from '@vcmap-cesium/engine';
|
23
23
|
import { Feature } from 'ol';
|
24
|
-
import { check,
|
24
|
+
import { check, maybe, oneOf } from '@vcsuite/check';
|
25
25
|
|
26
26
|
import { vcsAppSymbol } from '../pluginHelper.js';
|
27
27
|
import FeatureInfoInteraction from './featureInfoInteraction.js';
|
@@ -390,15 +390,13 @@ class FeatureInfo extends Collection {
|
|
390
390
|
* @returns {Promise<void>}
|
391
391
|
*/
|
392
392
|
async selectFeature(feature, position, windowPosition, featureInfoView) {
|
393
|
-
check(
|
394
|
-
|
395
|
-
Entity,
|
396
|
-
|
397
|
-
|
398
|
-
]);
|
399
|
-
|
400
|
-
checkMaybe(windowPosition, [Number]);
|
401
|
-
checkMaybe(featureInfoView, AbstractFeatureInfoView);
|
393
|
+
check(
|
394
|
+
feature,
|
395
|
+
oneOf(Feature, Entity, Cesium3DTileFeature, Cesium3DTilePointFeature),
|
396
|
+
);
|
397
|
+
check(position, maybe([Number]));
|
398
|
+
check(windowPosition, maybe([Number]));
|
399
|
+
check(featureInfoView, maybe(AbstractFeatureInfoView));
|
402
400
|
|
403
401
|
const usedFeatureInfoView =
|
404
402
|
feature[featureInfoViewSymbol] ??
|
package/src/init.d.ts
CHANGED
@@ -18,41 +18,8 @@ export function initAppFromModule(mountTarget: string, configUrl?: string | unde
|
|
18
18
|
* @returns {Promise<import("@src/vcsUiApp.js").default>}
|
19
19
|
*/
|
20
20
|
export function initAppFromAppConfig(mountTarget: string, appUrl: string): Promise<import("@src/vcsUiApp.js").default>;
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
}[] | undefined)[];
|
27
|
-
let maps: ({
|
28
|
-
type: StringConstructor;
|
29
|
-
name: StringConstructor;
|
30
|
-
}[] | undefined)[];
|
31
|
-
let styles: ({
|
32
|
-
type: StringConstructor;
|
33
|
-
name: StringConstructor;
|
34
|
-
}[] | undefined)[];
|
35
|
-
let viewpoints: ({
|
36
|
-
type: StringConstructor;
|
37
|
-
name: StringConstructor;
|
38
|
-
}[] | undefined)[];
|
39
|
-
let startingViewpointName: (StringConstructor | undefined)[];
|
40
|
-
let startingMapName: (StringConstructor | undefined)[];
|
41
|
-
let projection: (ObjectConstructor | undefined)[];
|
42
|
-
let categories: ({
|
43
|
-
name: StringConstructor;
|
44
|
-
items: ObjectConstructor[];
|
45
|
-
}[] | undefined)[];
|
46
|
-
let obliqueCollections: ({
|
47
|
-
type: StringConstructor;
|
48
|
-
name: StringConstructor;
|
49
|
-
}[] | undefined)[];
|
50
|
-
let plugins: (ObjectConstructor[] | undefined)[];
|
51
|
-
let contentTree: (ObjectConstructor[] | undefined)[];
|
52
|
-
let uiConfig: (ObjectConstructor[] | undefined)[];
|
53
|
-
let featureInfo: ({
|
54
|
-
type: StringConstructor;
|
55
|
-
name: StringConstructor;
|
56
|
-
}[] | undefined)[];
|
57
|
-
let i18n: (ObjectConstructor[] | undefined)[];
|
58
|
-
}
|
21
|
+
/**
|
22
|
+
* Base pattern to check VcsUiAppConfig
|
23
|
+
* @type {Record<string, import("@vcsuite/check").Pattern}
|
24
|
+
*/
|
25
|
+
export const VcsUiAppConfigPattern: Record<string, import("@vcsuite/check").Pattern>;
|
package/src/init.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import { createApp } from 'vue';
|
2
|
-
import { check,
|
2
|
+
import { check, is, maybe, oneOf, optional } from '@vcsuite/check';
|
3
3
|
import { VcsModule } from '@vcmap/core';
|
4
4
|
import VcsAppComponentWrapper from './application/VcsAppWrapper.vue';
|
5
5
|
import VcsUiApp from './vcsUiApp.js';
|
@@ -15,23 +15,24 @@ const VcsObjectPattern = {
|
|
15
15
|
|
16
16
|
/**
|
17
17
|
* Base pattern to check VcsUiAppConfig
|
18
|
+
* @type {Record<string, import("@vcsuite/check").Pattern}
|
18
19
|
*/
|
19
20
|
export const VcsUiAppConfigPattern = {
|
20
|
-
id:
|
21
|
-
layers: [
|
22
|
-
maps: [
|
23
|
-
styles: [
|
24
|
-
viewpoints: [
|
25
|
-
startingViewpointName:
|
26
|
-
startingMapName:
|
27
|
-
projection:
|
28
|
-
categories: [
|
29
|
-
obliqueCollections: [
|
30
|
-
plugins: [
|
31
|
-
contentTree: [
|
32
|
-
uiConfig: [
|
33
|
-
featureInfo: [
|
34
|
-
i18n: [
|
21
|
+
id: optional(String),
|
22
|
+
layers: optional([VcsObjectPattern]),
|
23
|
+
maps: optional([VcsObjectPattern]),
|
24
|
+
styles: optional([VcsObjectPattern]),
|
25
|
+
viewpoints: optional([VcsObjectPattern]),
|
26
|
+
startingViewpointName: optional(String),
|
27
|
+
startingMapName: optional(String),
|
28
|
+
projection: optional(Object),
|
29
|
+
categories: optional([{ name: String, items: [Object] }]),
|
30
|
+
obliqueCollections: optional([VcsObjectPattern]),
|
31
|
+
plugins: optional([Object]),
|
32
|
+
contentTree: optional([Object]),
|
33
|
+
uiConfig: optional([Object]),
|
34
|
+
featureInfo: optional([VcsObjectPattern]),
|
35
|
+
i18n: optional([Object]),
|
35
36
|
};
|
36
37
|
|
37
38
|
/**
|
@@ -62,7 +63,7 @@ export default async function initApp(mountTarget) {
|
|
62
63
|
*/
|
63
64
|
export async function initAppFromModule(mountTarget, configUrl) {
|
64
65
|
check(mountTarget, String);
|
65
|
-
|
66
|
+
check(configUrl, maybe(String));
|
66
67
|
|
67
68
|
const app = await initApp(mountTarget);
|
68
69
|
if (configUrl) {
|
@@ -90,7 +91,7 @@ export async function initAppFromAppConfig(mountTarget, appUrl) {
|
|
90
91
|
*/
|
91
92
|
const appConfig = await fetch(appUrl).then((response) => response.json());
|
92
93
|
|
93
|
-
check(appConfig.modules, [String, Object]);
|
94
|
+
check(appConfig.modules, [oneOf(String, Object)]);
|
94
95
|
|
95
96
|
const modules = await Promise.all(
|
96
97
|
appConfig.modules.map(async (c) => {
|
@@ -1,17 +1,13 @@
|
|
1
1
|
<template>
|
2
|
-
<v-list
|
3
|
-
<v-row>
|
2
|
+
<v-list>
|
3
|
+
<v-row no-gutters>
|
4
4
|
<v-col
|
5
5
|
v-for="(row, idx) in item.rows"
|
6
6
|
:key="idx"
|
7
7
|
:cols="cols"
|
8
8
|
:class="{ 'w-100': item.colNr === 1, 'w-50': item.colNr !== 1 }"
|
9
9
|
>
|
10
|
-
<v-list-item
|
11
|
-
density="compact"
|
12
|
-
class="pa-0"
|
13
|
-
:class="determineInnerPadding(idx)"
|
14
|
-
>
|
10
|
+
<v-list-item class="pa-0" :class="determineInnerPadding(idx)">
|
15
11
|
<template #prepend>
|
16
12
|
<v-img
|
17
13
|
v-if="
|
@@ -20,7 +16,6 @@
|
|
20
16
|
"
|
21
17
|
width="32"
|
22
18
|
height="24"
|
23
|
-
cover
|
24
19
|
:src="getImageSrcFromShape(row.image)"
|
25
20
|
/>
|
26
21
|
<svg
|
@@ -93,7 +88,7 @@
|
|
93
88
|
</template>
|
94
89
|
|
95
90
|
<v-list-item-title
|
96
|
-
class="
|
91
|
+
class="pa-2"
|
97
92
|
:title="$st(row.tooltip || row.title)"
|
98
93
|
>
|
99
94
|
{{ $st(row.title) }}
|
package/src/legend/VcsLegend.vue
CHANGED
@@ -6,51 +6,37 @@
|
|
6
6
|
v-if="entries.length > 0"
|
7
7
|
class="rounded-0"
|
8
8
|
>
|
9
|
-
<
|
9
|
+
<vcs-expansion-panel
|
10
10
|
v-for="(entry, i) in entries"
|
11
11
|
:key="i"
|
12
|
-
|
12
|
+
:heading="entry.title"
|
13
|
+
:header-actions="entry.actions"
|
13
14
|
@group:selected="entry.open = !entry.open"
|
14
15
|
>
|
15
|
-
<v-
|
16
|
-
<
|
17
|
-
<div
|
18
|
-
<
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
<VcsActionButtonList :actions="entry.actions" />
|
16
|
+
<v-list class="pl-6 pb-2">
|
17
|
+
<div v-for="(item, idx) in entry.legend" :key="idx">
|
18
|
+
<div v-if="item.type === LegendType.Image">
|
19
|
+
<img
|
20
|
+
:src="$st(item.src)"
|
21
|
+
:alt="item.src"
|
22
|
+
class="legend-image"
|
23
|
+
:title="item.tooltip"
|
24
|
+
/>
|
25
25
|
</div>
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
class="legend-image"
|
36
|
-
:title="item.tooltip"
|
37
|
-
/>
|
38
|
-
</div>
|
39
|
-
<div v-else-if="item.type === LegendType.Iframe">
|
40
|
-
<iframe
|
41
|
-
:id="`legendIframe${idx}`"
|
42
|
-
:src="$st(item.src)"
|
43
|
-
scrolling="no"
|
44
|
-
style="width: 100%; height: 100%"
|
45
|
-
frameBorder="0"
|
46
|
-
@load="setIframeHeight(`legendIframe${idx}`)"
|
47
|
-
/>
|
48
|
-
</div>
|
49
|
-
<style-legend-item v-else :item="item" />
|
26
|
+
<div v-else-if="item.type === LegendType.Iframe">
|
27
|
+
<iframe
|
28
|
+
:id="`legendIframe${idx}`"
|
29
|
+
:src="$st(item.src)"
|
30
|
+
scrolling="no"
|
31
|
+
style="width: 100%; height: 100%"
|
32
|
+
frameBorder="0"
|
33
|
+
@load="setIframeHeight(`legendIframe${idx}`)"
|
34
|
+
/>
|
50
35
|
</div>
|
51
|
-
|
52
|
-
|
53
|
-
|
36
|
+
<style-legend-item v-else :item="item" />
|
37
|
+
</div>
|
38
|
+
</v-list>
|
39
|
+
</vcs-expansion-panel>
|
54
40
|
</v-expansion-panels>
|
55
41
|
<v-sheet v-else class="ma-2">
|
56
42
|
{{ $t('legend.empty') }}
|
@@ -59,19 +45,11 @@
|
|
59
45
|
</template>
|
60
46
|
|
61
47
|
<script>
|
62
|
-
import {
|
63
|
-
VExpansionPanels,
|
64
|
-
VExpansionPanel,
|
65
|
-
VExpansionPanelText,
|
66
|
-
VExpansionPanelTitle,
|
67
|
-
VIcon,
|
68
|
-
VList,
|
69
|
-
VSheet,
|
70
|
-
} from 'vuetify/components';
|
48
|
+
import { VExpansionPanels, VList, VSheet } from 'vuetify/components';
|
71
49
|
import { computed } from 'vue';
|
72
50
|
import { LegendType } from './legendHelper.js';
|
73
51
|
import StyleLegendItem from './StyleLegendItem.vue';
|
74
|
-
import
|
52
|
+
import VcsExpansionPanel from '../components/section/VcsExpansionPanel.vue';
|
75
53
|
|
76
54
|
/**
|
77
55
|
* @description A component rendering configured legend information for active layers.
|
@@ -81,13 +59,9 @@
|
|
81
59
|
export default {
|
82
60
|
name: 'VcsLegend',
|
83
61
|
components: {
|
84
|
-
|
62
|
+
VcsExpansionPanel,
|
85
63
|
StyleLegendItem,
|
86
64
|
VExpansionPanels,
|
87
|
-
VExpansionPanel,
|
88
|
-
VExpansionPanelText,
|
89
|
-
VExpansionPanelTitle,
|
90
|
-
VIcon,
|
91
65
|
VList,
|
92
66
|
VSheet,
|
93
67
|
},
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { reactive } from 'vue';
|
2
2
|
import { VcsEvent } from '@vcmap/core';
|
3
3
|
import { v4 as uuidv4 } from 'uuid';
|
4
|
-
import { check,
|
4
|
+
import { check, maybe, oneOf } from '@vcsuite/check';
|
5
5
|
import { vcsAppSymbol } from '../pluginHelper.js';
|
6
6
|
import { ActionPattern } from '../components/lists/VcsActionList.vue';
|
7
7
|
import { getActionFromOptions } from '../actions/actionHelper.js';
|
@@ -101,10 +101,10 @@ class ButtonManager {
|
|
101
101
|
* @returns {ButtonComponent}
|
102
102
|
*/
|
103
103
|
add(buttonComponentOptions, owner) {
|
104
|
-
|
105
|
-
|
104
|
+
check(buttonComponentOptions.id, maybe(String));
|
105
|
+
check(buttonComponentOptions.weight, maybe(Number));
|
106
106
|
check(buttonComponentOptions.action, ActionPattern);
|
107
|
-
check(owner,
|
107
|
+
check(owner, oneOf(String, vcsAppSymbol));
|
108
108
|
|
109
109
|
if (buttonComponentOptions.id && this.has(buttonComponentOptions.id)) {
|
110
110
|
throw new Error(
|
@@ -1,39 +1,24 @@
|
|
1
1
|
<template>
|
2
|
-
<
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
</div>
|
14
|
-
<VcsActionButtonList
|
15
|
-
v-if="actions?.length > 0"
|
16
|
-
:actions="actions"
|
17
|
-
:overflow-count="overflowCount"
|
18
|
-
/>
|
19
|
-
</div>
|
20
|
-
</v-expansion-panel-title>
|
21
|
-
<v-expansion-panel-text class="pb-1">
|
2
|
+
<vcs-expansion-panel
|
3
|
+
:heading="title"
|
4
|
+
:header-actions="actions"
|
5
|
+
:action-button-list-overflow-count="overflowCount"
|
6
|
+
>
|
7
|
+
<template #header-append>
|
8
|
+
<span v-if="selectable && selection.length > 0" class="ml-1">
|
9
|
+
{{ `(${selection.length})` }}
|
10
|
+
</span>
|
11
|
+
</template>
|
12
|
+
<template #default>
|
22
13
|
<CollectionComponentContent @openList="(id) => $emit('openList', id)" />
|
23
|
-
</
|
24
|
-
</
|
14
|
+
</template>
|
15
|
+
</vcs-expansion-panel>
|
25
16
|
</template>
|
26
17
|
|
27
18
|
<script>
|
28
19
|
import { computed, inject } from 'vue';
|
29
|
-
import
|
30
|
-
VIcon,
|
31
|
-
VExpansionPanel,
|
32
|
-
VExpansionPanelTitle,
|
33
|
-
VExpansionPanelText,
|
34
|
-
} from 'vuetify/components';
|
20
|
+
import VcsExpansionPanel from '../../components/section/VcsExpansionPanel.vue';
|
35
21
|
import { createSelectionActions } from '../../components/lists/VcsList.vue';
|
36
|
-
import VcsActionButtonList from '../../components/buttons/VcsActionButtonList.vue';
|
37
22
|
import CollectionComponentContent from './CollectionComponentContent.vue';
|
38
23
|
|
39
24
|
/**
|
@@ -51,12 +36,8 @@
|
|
51
36
|
export default {
|
52
37
|
name: 'CollectionComponent',
|
53
38
|
components: {
|
39
|
+
VcsExpansionPanel,
|
54
40
|
CollectionComponentContent,
|
55
|
-
VcsActionButtonList,
|
56
|
-
VExpansionPanel,
|
57
|
-
VExpansionPanelTitle,
|
58
|
-
VExpansionPanelText,
|
59
|
-
VIcon,
|
60
41
|
},
|
61
42
|
props: {
|
62
43
|
open: {
|
@@ -64,6 +45,7 @@
|
|
64
45
|
default: false,
|
65
46
|
},
|
66
47
|
},
|
48
|
+
emits: ['openList'],
|
67
49
|
setup(_props, { emit }) {
|
68
50
|
/**
|
69
51
|
* @type {CollectionComponentClass}
|
@@ -97,11 +79,4 @@
|
|
97
79
|
};
|
98
80
|
</script>
|
99
81
|
|
100
|
-
<style lang="scss" scoped>
|
101
|
-
.rotate {
|
102
|
-
transform: rotate(-90deg);
|
103
|
-
}
|
104
|
-
.v-icon {
|
105
|
-
font-size: 16px;
|
106
|
-
}
|
107
|
-
</style>
|
82
|
+
<style lang="scss" scoped></style>
|