@vcmap/ui 5.0.0-rc.22 → 5.0.0-rc.24
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/README.md +38 -20
- package/app.config.json +3 -0
- package/build/.eslintrc +3 -0
- package/build/build.js +184 -174
- package/build/buildCesium.js +32 -19
- package/build/buildHelpers.js +117 -48
- package/build/buildPreview.js +9 -6
- package/build/commonViteConfig.js +1 -3
- package/build/determineHost.js +17 -4
- package/build/generateOLLib.js +13 -16
- package/build/getPluginProxies.js +16 -3
- package/build/info/conf.json +21 -21
- package/build/info/publish.js +15 -4
- package/config/aerowest.config.json +18 -44
- package/config/base.config.json +72 -246
- package/config/codes.config.json +4 -0
- package/config/dev.config.json +11 -13
- package/config/graphFeatureInfo.config.json +58 -17
- package/config/projects.config.json +30 -0
- package/config/www.config.json +98 -297
- package/dist/assets/cesium/Workers/{ArcType-ce2e50ab.js → ArcType-2d9abbbc.js} +4 -4
- package/dist/assets/cesium/Workers/{AttributeCompression-b646d393.js → AttributeCompression-f9f6c717.js} +24 -24
- package/dist/assets/cesium/Workers/{AxisAlignedBoundingBox-ff186ccc.js → AxisAlignedBoundingBox-85d9e53a.js} +3 -3
- package/dist/assets/cesium/Workers/{BoundingRectangle-be5924f4.js → BoundingRectangle-1ee7eb47.js} +18 -18
- package/dist/assets/cesium/Workers/{BoxGeometry-12eeccaf.js → BoxGeometry-3b2be784.js} +9 -9
- package/dist/assets/cesium/Workers/{Check-666ab1a0.js → Check-6ede7e26.js} +22 -22
- package/dist/assets/cesium/Workers/{Color-a84038cb.js → Color-f107c84d.js} +59 -59
- package/dist/assets/cesium/Workers/{ComponentDatatype-f7b11d02.js → ComponentDatatype-cf1fa08e.js} +16 -16
- package/dist/assets/cesium/Workers/{CoplanarPolygonGeometryLibrary-3272c1b3.js → CoplanarPolygonGeometryLibrary-78d71993.js} +1 -1
- package/dist/assets/cesium/Workers/{CorridorGeometryLibrary-0170e093.js → CorridorGeometryLibrary-50d99b33.js} +1 -1
- package/dist/assets/cesium/Workers/{CylinderGeometry-7c5da648.js → CylinderGeometry-51b0d9bf.js} +12 -12
- package/dist/assets/cesium/Workers/{CylinderGeometryLibrary-372c07d8.js → CylinderGeometryLibrary-7bf291b4.js} +1 -1
- package/dist/assets/cesium/Workers/{EllipseGeometry-797d580e.js → EllipseGeometry-bcfb5d87.js} +20 -20
- package/dist/assets/cesium/Workers/{EllipseGeometryLibrary-2939e1dc.js → EllipseGeometryLibrary-e94f8472.js} +1 -1
- package/dist/assets/cesium/Workers/{EllipseOutlineGeometry-8b50870f.js → EllipseOutlineGeometry-28e3a1bb.js} +15 -15
- package/dist/assets/cesium/Workers/{EllipsoidGeodesic-98c62a56.js → EllipsoidGeodesic-5b3623dc.js} +6 -6
- package/dist/assets/cesium/Workers/{EllipsoidGeometry-21c0e3a5.js → EllipsoidGeometry-b222fa63.js} +14 -14
- package/dist/assets/cesium/Workers/{EllipsoidOutlineGeometry-eff247c8.js → EllipsoidOutlineGeometry-38a3fb5b.js} +15 -15
- package/dist/assets/cesium/Workers/{EllipsoidRhumbLine-19756602.js → EllipsoidRhumbLine-ef872433.js} +9 -9
- package/dist/assets/cesium/Workers/{EllipsoidTangentPlane-214683dc.js → EllipsoidTangentPlane-8c89f28c.js} +1 -1
- package/dist/assets/cesium/Workers/{EncodedCartesian3-81f70735.js → EncodedCartesian3-57415c8a.js} +6 -6
- package/dist/assets/cesium/Workers/{FrustumGeometry-ac42a6d9.js → FrustumGeometry-bdd3a04d.js} +139 -111
- package/dist/assets/cesium/Workers/{GeometryAttribute-7d6f1732.js → GeometryAttribute-153115c5.js} +20 -20
- package/dist/assets/cesium/Workers/{GeometryAttributes-f06a2792.js → GeometryAttributes-ad136444.js} +1 -1
- package/dist/assets/cesium/Workers/{GeometryInstance-451dc1cd.js → GeometryInstance-34d9e21e.js} +6 -6
- package/dist/assets/cesium/Workers/{GeometryPipeline-ce4339ed.js → GeometryPipeline-acb2399c.js} +22 -22
- package/dist/assets/cesium/Workers/{IndexDatatype-a55ceaa1.js → IndexDatatype-2643aa47.js} +13 -13
- package/dist/assets/cesium/Workers/{IntersectionTests-f6e6bd8a.js → IntersectionTests-271e513e.js} +37 -37
- package/dist/assets/cesium/Workers/{Math-2dbd6b93.js → Math-0a2ac845.js} +149 -139
- package/dist/assets/cesium/Workers/{Matrix2-13178034.js → Matrix2-e1298525.js} +256 -256
- package/dist/assets/cesium/Workers/{Matrix3-315394f6.js → Matrix3-41c58dde.js} +150 -150
- package/dist/assets/cesium/Workers/{OrientedBoundingBox-04920dc7.js → OrientedBoundingBox-5e04e31f.js} +19 -17
- package/dist/assets/cesium/Workers/{Plane-900aa728.js → Plane-4c3d403b.js} +5 -5
- package/dist/assets/cesium/Workers/{PolygonGeometryLibrary-a8680d96.js → PolygonGeometryLibrary-6762b65b.js} +6 -6
- package/dist/assets/cesium/Workers/PolygonPipeline-7dc7a431.js +1344 -0
- package/dist/assets/cesium/Workers/{PolylinePipeline-32f36d2a.js → PolylinePipeline-15fde655.js} +16 -16
- package/dist/assets/cesium/Workers/{PolylineVolumeGeometryLibrary-a510d657.js → PolylineVolumeGeometryLibrary-ba7dfed5.js} +7 -7
- package/dist/assets/cesium/Workers/{PrimitivePipeline-ba38434a.js → PrimitivePipeline-68f0b9a2.js} +6 -6
- package/dist/assets/cesium/Workers/{RectangleGeometryLibrary-bdba697e.js → RectangleGeometryLibrary-8eaf23da.js} +1 -1
- package/dist/assets/cesium/Workers/{RuntimeError-06c93819.js → RuntimeError-ef395448.js} +5 -5
- package/dist/assets/cesium/Workers/{TerrainEncoding-833187da.js → TerrainEncoding-eb8a645a.js} +30 -30
- package/dist/assets/cesium/Workers/Transforms-f6451f99.js +14698 -0
- package/dist/assets/cesium/Workers/{VertexFormat-6b480673.js → VertexFormat-030f11ff.js} +14 -14
- package/dist/assets/cesium/Workers/{WallGeometryLibrary-919eed92.js → WallGeometryLibrary-feef3109.js} +1 -1
- package/dist/assets/cesium/Workers/{WebGLConstants-a8cc3e8c.js → WebGLConstants-0b1ce7ba.js} +1 -1
- package/dist/assets/cesium/Workers/{WebMercatorProjection-13a90d41.js → WebMercatorProjection-13ed1a6e.js} +6 -6
- package/dist/assets/cesium/Workers/{arrayRemoveDuplicates-c2038105.js → arrayRemoveDuplicates-d2061e85.js} +5 -5
- package/dist/assets/cesium/Workers/cesiumWorkerBootstrapper.js +5 -5
- package/dist/assets/cesium/Workers/{combine-ca22a614.js → combine-d9581036.js} +5 -5
- package/dist/assets/cesium/Workers/combineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createBoxGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createBoxOutlineGeometry.js +9 -9
- package/dist/assets/cesium/Workers/createCircleGeometry.js +13 -13
- package/dist/assets/cesium/Workers/createCircleOutlineGeometry.js +13 -13
- package/dist/assets/cesium/Workers/createCoplanarPolygonGeometry.js +11 -11
- package/dist/assets/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +9 -9
- package/dist/assets/cesium/Workers/createCorridorGeometry.js +14 -14
- package/dist/assets/cesium/Workers/createCorridorOutlineGeometry.js +12 -12
- package/dist/assets/cesium/Workers/createCylinderGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createCylinderOutlineGeometry.js +13 -13
- package/dist/assets/cesium/Workers/createEllipseGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createEllipseOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createEllipsoidGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createEllipsoidOutlineGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createFrustumGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createFrustumOutlineGeometry.js +8 -8
- package/dist/assets/cesium/Workers/createGeometry.js +1 -1
- package/dist/assets/cesium/Workers/createGroundPolylineGeometry.js +33 -33
- package/dist/assets/cesium/Workers/createPlaneGeometry.js +8 -8
- package/dist/assets/cesium/Workers/createPlaneOutlineGeometry.js +6 -6
- package/dist/assets/cesium/Workers/createPolygonGeometry.js +25 -25
- package/dist/assets/cesium/Workers/createPolygonOutlineGeometry.js +17 -17
- package/dist/assets/cesium/Workers/createPolylineGeometry.js +11 -11
- package/dist/assets/cesium/Workers/createPolylineVolumeGeometry.js +9 -9
- package/dist/assets/cesium/Workers/createPolylineVolumeOutlineGeometry.js +9 -9
- package/dist/assets/cesium/Workers/createRectangleGeometry.js +16 -16
- package/dist/assets/cesium/Workers/createRectangleOutlineGeometry.js +12 -12
- package/dist/assets/cesium/Workers/createSimplePolylineGeometry.js +10 -10
- package/dist/assets/cesium/Workers/createSphereGeometry.js +11 -11
- package/dist/assets/cesium/Workers/createSphereOutlineGeometry.js +12 -12
- package/dist/assets/cesium/Workers/createTaskProcessorWorker.js +2 -2
- package/dist/assets/cesium/Workers/createVectorTileClampedPolylines.js +1 -1
- package/dist/assets/cesium/Workers/createVectorTileGeometries.js +8 -8
- package/dist/assets/cesium/Workers/createVectorTilePoints.js +1 -1
- package/dist/assets/cesium/Workers/createVectorTilePolygons.js +1 -1
- package/dist/assets/cesium/Workers/createVectorTilePolylines.js +1 -1
- package/dist/assets/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +1 -1
- package/dist/assets/cesium/Workers/createVerticesFromHeightmap.js +27 -28
- package/dist/assets/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +33 -38
- package/dist/assets/cesium/Workers/createWallGeometry.js +14 -14
- package/dist/assets/cesium/Workers/createWallOutlineGeometry.js +14 -14
- package/dist/assets/cesium/Workers/decodeDraco.js +10 -2
- package/dist/assets/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +15 -15
- package/dist/assets/cesium/Workers/decodeI3S.js +1 -1
- package/dist/assets/cesium/Workers/{defaultValue-0a909f67.js → defaultValue-fe22d8c0.js} +2 -2
- package/dist/assets/cesium/Workers/package.js +1 -1
- package/dist/assets/cesium/Workers/transcodeKTX2.js +46 -26
- package/dist/assets/cesium/Workers/transferTypedArrayTest.js +1 -1
- package/dist/assets/cesium/Workers/upsampleQuantizedTerrainMesh.js +24 -24
- package/dist/assets/{cesium.88cffd.js → cesium.253914.js} +36578 -33768
- package/dist/assets/cesium.js +1 -1
- package/dist/assets/{core.a66593.js → core.3a8205.js} +7824 -5377
- package/dist/assets/core.js +1 -1
- package/dist/assets/index.91ae2d55.js +1 -0
- package/dist/assets/{ol.d4539f.js → ol.1c946a.js} +5550 -5491
- package/dist/assets/ol.js +1 -1
- package/dist/assets/ui.0025be.css +5 -0
- package/dist/assets/{ui.d760e4.js → ui.0025be.js} +6260 -5164
- package/dist/assets/ui.js +1 -1
- package/dist/assets/vue.js +2 -2
- package/dist/assets/{vuetify.427322.css → vuetify.6efa21.css} +2 -2
- package/dist/assets/{vuetify.427322.js → vuetify.6efa21.js} +1 -1
- package/dist/assets/vuetify.js +2 -2
- package/dist/index.html +27 -7
- package/index.html +26 -6
- package/index.js +68 -15
- package/lib/cesium.js +1 -1
- package/lib/core.js +1 -1
- package/lib/ui.js +1 -1
- package/lib/vue.js +2 -2
- package/lib/vuetify.js +2 -2
- package/package.json +19 -10
- package/plugins/.eslintrc +9 -0
- package/plugins/@vcmap/create-link/fallbackCreateLink.vue +13 -9
- package/plugins/@vcmap/create-link/index.js +15 -6
- package/plugins/@vcmap/project-selector/{ContextsListComponent.vue → ModulesListComponent.vue} +14 -18
- package/plugins/@vcmap/project-selector/ProjectSelectorComponent.vue +19 -24
- package/plugins/@vcmap/project-selector/README.md +16 -20
- package/plugins/@vcmap/project-selector/config.json +13 -13
- package/plugins/@vcmap/project-selector/de.json +4 -1
- package/plugins/@vcmap/project-selector/en.json +4 -1
- package/plugins/@vcmap/project-selector/index.js +117 -107
- package/plugins/@vcmap/search-nominatim/LICENSE.md +5 -6
- package/plugins/@vcmap/search-nominatim/README.md +2 -1
- package/plugins/@vcmap/search-nominatim/config.json +1 -2
- package/plugins/@vcmap/search-nominatim/index.js +7 -4
- package/plugins/@vcmap/search-nominatim/nominatim.js +7 -2
- package/plugins/@vcmap/search-nominatim/package.json +2 -36
- package/plugins/@vcmap/simple-graph/README.md +29 -9
- package/plugins/@vcmap/simple-graph/SimpleGraphComponent.vue +2 -7
- package/plugins/@vcmap/simple-graph/index.js +2 -2
- package/plugins/@vcmap/simple-graph/simpleGraphView.js +3 -1
- package/plugins/@vcmap/theme-changer/README.md +5 -3
- package/plugins/@vcmap/theme-changer/ThemeChangerComponent.vue +6 -10
- package/plugins/@vcmap/theme-changer/config.json +67 -67
- package/plugins/@vcmap/theme-changer/index.js +11 -5
- package/plugins/@vcmap-show-case/buttons-example/ButtonsExample.vue +76 -11
- package/plugins/@vcmap-show-case/buttons-example/index.js +10 -8
- package/plugins/@vcmap-show-case/category-tester/Categories.vue +144 -117
- package/plugins/@vcmap-show-case/category-tester/Category.vue +46 -29
- package/plugins/@vcmap-show-case/category-tester/index.js +9 -3
- package/plugins/@vcmap-show-case/config-editor/ConfigEditor.vue +62 -0
- package/plugins/@vcmap-show-case/config-editor/index.js +13 -11
- package/plugins/@vcmap-show-case/context-menu-tester/index.js +18 -10
- package/plugins/@vcmap-show-case/form-inputs-example/FormInputsExample.vue +97 -109
- package/plugins/@vcmap-show-case/form-inputs-example/config.json +3 -3
- package/plugins/@vcmap-show-case/form-inputs-example/exampleActions.js +14 -4
- package/plugins/@vcmap-show-case/form-inputs-example/index.js +42 -19
- package/plugins/@vcmap-show-case/form-inputs-example/validation.js +2 -1
- package/plugins/@vcmap-show-case/icons-example/README.md +1 -1
- package/plugins/@vcmap-show-case/icons-example/allIconsComponent.vue +10 -10
- package/plugins/@vcmap-show-case/icons-example/index.js +10 -8
- package/plugins/@vcmap-show-case/list-example/ListExample.vue +221 -103
- package/plugins/@vcmap-show-case/list-example/index.js +10 -8
- package/plugins/@vcmap-show-case/notifier-tester/index.js +9 -3
- package/plugins/@vcmap-show-case/notifier-tester/notifierTester.vue +15 -21
- package/plugins/@vcmap-show-case/table-example/DataTableExample.vue +183 -0
- package/plugins/@vcmap-show-case/table-example/README.md +3 -0
- package/plugins/@vcmap-show-case/table-example/index.js +49 -0
- package/plugins/@vcmap-show-case/table-example/package.json +5 -0
- package/plugins/@vcmap-show-case/textfields-example/TextfieldsExample.vue +7 -30
- package/plugins/@vcmap-show-case/textfields-example/index.js +10 -4
- package/plugins/@vcmap-show-case/window-tester/WindowExample.vue +16 -13
- package/plugins/@vcmap-show-case/window-tester/emptyComponent.vue +4 -7
- package/plugins/@vcmap-show-case/window-tester/index.js +26 -20
- package/plugins/@vcmap-show-case/window-tester/myCustomHeader.vue +7 -3
- package/plugins/@vcmap-show-case/window-tester/toolbox-data.js +82 -5
- package/plugins/@vcmap-show-case/window-tester/windowExampleContent.vue +3 -7
- package/plugins/@vcmap-show-case/wizard-example/index.js +9 -3
- package/plugins/@vcmap-show-case/wizard-example/wizardExample.vue +36 -38
- package/src/actions/actionHelper.js +64 -37
- package/src/actions/styleSelector.vue +40 -24
- package/src/application/VcsApp.vue +117 -80
- package/src/application/VcsAttributions.vue +8 -9
- package/src/application/VcsAttributionsFooter.vue +12 -9
- package/src/application/VcsMap.vue +9 -5
- package/src/application/VcsNavbar.vue +44 -27
- package/src/application/VcsSettings.vue +5 -12
- package/src/application/attributionsHelper.js +23 -11
- package/src/application/vcsAppWrapper.vue +1 -3
- package/src/components/buttons/VcsActionButtonList.vue +20 -17
- package/src/components/buttons/VcsButton.vue +19 -23
- package/src/components/buttons/VcsFormButton.vue +176 -0
- package/src/components/form-inputs-controls/VcsCheckbox.vue +6 -7
- package/src/components/form-inputs-controls/VcsDatePicker.vue +142 -0
- package/src/components/form-inputs-controls/VcsFormSection.vue +11 -12
- package/src/components/form-inputs-controls/VcsLabel.vue +9 -10
- package/src/components/form-inputs-controls/VcsRadio.vue +44 -44
- package/src/components/form-inputs-controls/VcsSelect.vue +16 -13
- package/src/components/form-inputs-controls/VcsTextArea.vue +21 -14
- package/src/components/form-inputs-controls/VcsTextField.vue +44 -19
- package/src/components/form-inputs-controls/VcsWizard.vue +79 -77
- package/src/components/form-inputs-controls/VcsWizardStep.vue +20 -20
- package/src/components/form-inputs-controls/composables.js +13 -8
- package/src/components/form-output/VcsFormattedNumber.vue +26 -26
- package/src/components/icons/+all.js +13 -5
- package/src/components/icons/2DAreaIcon.vue +62 -10
- package/src/components/icons/2DDistanceIcon.vue +14 -2
- package/src/components/icons/3DAreaIcon.vue +62 -10
- package/src/components/icons/3DDistanceIcon.vue +14 -2
- package/src/components/icons/3DHeightIcon.vue +14 -2
- package/src/components/icons/AngleIcon.vue +12 -3
- package/src/components/icons/AssociationsIcon.vue +6 -1
- package/src/components/icons/AxisIcon.vue +34 -5
- package/src/components/icons/BoundingBoxIcon.vue +31 -5
- package/src/components/icons/CheckboxCheckedIcon.vue +4 -1
- package/src/components/icons/CheckboxIcon.vue +1 -8
- package/src/components/icons/CheckboxIndeterminateIcon.vue +9 -2
- package/src/components/icons/CircleIcon.vue +24 -4
- package/src/components/icons/ClippingHorizontalIcon.vue +14 -2
- package/src/components/icons/ClippingIcon.vue +13 -2
- package/src/components/icons/ClippingVerticalIcon.vue +14 -2
- package/src/components/icons/ColorPickerIcon.vue +13 -2
- package/src/components/icons/ColorSwatchIcon.vue +7 -1
- package/src/components/icons/CommentIcon.vue +6 -1
- package/src/components/icons/CompassIcon.vue +21 -3
- package/src/components/icons/ComponentsIcon.vue +14 -2
- package/src/components/icons/ConeIcon.vue +26 -4
- package/src/components/icons/DimensionsHouseIcon.vue +7 -1
- package/src/components/icons/EditIcon.vue +13 -2
- package/src/components/icons/ElevationProfileIcon.vue +6 -1
- package/src/components/icons/ExportAreaIcon.vue +13 -2
- package/src/components/icons/ExportFlightIcon.vue +13 -2
- package/src/components/icons/ExportIcon.vue +14 -2
- package/src/components/icons/ExternalLinkIcon.vue +18 -3
- package/src/components/icons/EyeIcon.vue +12 -2
- package/src/components/icons/FastForwardIcon.vue +13 -2
- package/src/components/icons/FilterIcon.vue +13 -2
- package/src/components/icons/GlobalTerrainIcon.vue +12 -2
- package/src/components/icons/GlobeNatureIcon.vue +7 -1
- package/src/components/icons/GroundIcon.vue +12 -2
- package/src/components/icons/HealthCareIndustriesIcon.vue +6 -1
- package/src/components/icons/HelpIcon.vue +12 -2
- package/src/components/icons/HideIcon.vue +17 -3
- package/src/components/icons/HomePointIcon.vue +13 -3
- package/src/components/icons/HospitalsIcon.vue +6 -1
- package/src/components/icons/HouseIcon.vue +20 -3
- package/src/components/icons/ImportIcon.vue +21 -3
- package/src/components/icons/InfoIcon.vue +19 -3
- package/src/components/icons/KebabIcon.vue +12 -2
- package/src/components/icons/LabelIcon.vue +21 -3
- package/src/components/icons/LayersIcon.vue +12 -2
- package/src/components/icons/LegendIcon.vue +20 -60
- package/src/components/icons/LineIcon.vue +20 -3
- package/src/components/icons/LinkIcon.vue +13 -2
- package/src/components/icons/LogoutIcon.vue +13 -2
- package/src/components/icons/MapIcon.vue +14 -2
- package/src/components/icons/MenuIcon.vue +7 -1
- package/src/components/icons/MinusIcon.vue +14 -2
- package/src/components/icons/ObjectAttributeIcon.vue +13 -2
- package/src/components/icons/ObjectSelectIcon.vue +14 -2
- package/src/components/icons/ObliqueViewIcon.vue +11 -2
- package/src/components/icons/PdfIcon.vue +12 -2
- package/src/components/icons/PedestrianIcon.vue +13 -2
- package/src/components/icons/PenIcon.vue +13 -3
- package/src/components/icons/PlayCircleIcon.vue +20 -3
- package/src/components/icons/PlusIcon.vue +14 -3
- package/src/components/icons/PoiIcon.vue +17 -3
- package/src/components/icons/PointSelectIcon.vue +12 -2
- package/src/components/icons/PolygonIcon.vue +7 -1
- package/src/components/icons/PresentationModeIcon.vue +13 -2
- package/src/components/icons/ProgressIcon.vue +8 -6
- package/src/components/icons/QueryIcon.vue +31 -5
- package/src/components/icons/RectangleIcon.vue +24 -4
- package/src/components/icons/ReturnIcon.vue +13 -2
- package/src/components/icons/RewindIcon.vue +13 -2
- package/src/components/icons/RotateLeftIcon.vue +13 -2
- package/src/components/icons/RotateRightIcon.vue +13 -2
- package/src/components/icons/ScreenshotIcon.vue +52 -10
- package/src/components/icons/SearchIcon.vue +13 -3
- package/src/components/icons/ShadowIcon.vue +14 -3
- package/src/components/icons/ShapesIcon.vue +13 -3
- package/src/components/icons/ShareIcon.vue +17 -4
- package/src/components/icons/SimpleCircleFilledIcon.vue +14 -10
- package/src/components/icons/SimpleCircleHalfFilledIcon.vue +6 -1
- package/src/components/icons/SimpleCircleOutlinedIcon.vue +14 -10
- package/src/components/icons/SkipNextIcon.vue +11 -2
- package/src/components/icons/SkipPreviousIcon.vue +17 -3
- package/src/components/icons/SplitViewIcon.vue +6 -1
- package/src/components/icons/TerrainBoxIcon.vue +12 -2
- package/src/components/icons/TextStyleIcon.vue +7 -1
- package/src/components/icons/ThreeDimensionsIcon.vue +13 -2
- package/src/components/icons/ToolsIcon.vue +12 -2
- package/src/components/icons/TouchIcon.vue +13 -2
- package/src/components/icons/TrashCanIcon.vue +13 -2
- package/src/components/icons/TriangleIcon.vue +6 -2
- package/src/components/icons/TwoDimensionsIcon.vue +14 -2
- package/src/components/icons/UploadIcon.vue +13 -2
- package/src/components/icons/UserProfileIcon.vue +13 -2
- package/src/components/icons/UserShareIcon.vue +12 -2
- package/src/components/icons/VideoRecorderIcon.vue +16 -3
- package/src/components/icons/ViewpointFlightIcon.vue +22 -4
- package/src/components/icons/ViewpointIcon.vue +22 -4
- package/src/components/icons/Viewshed360Icon.vue +14 -2
- package/src/components/icons/ViewshedConeIcon.vue +13 -2
- package/src/components/icons/ViewshedIcon.vue +14 -2
- package/src/components/icons/WalkingIcon.vue +13 -2
- package/src/components/icons/WallIcon.vue +19 -3
- package/src/components/icons/WandIcon.vue +129 -21
- package/src/components/imageElementInjector.vue +1 -3
- package/src/components/lists/VcsActionList.vue +21 -18
- package/src/components/lists/VcsList.vue +226 -97
- package/src/components/lists/VcsTreeview.vue +30 -26
- package/src/components/lists/VcsTreeviewLeaf.vue +23 -22
- package/src/components/lists/VcsTreeviewSearchbar.vue +19 -15
- package/src/components/notification/VcsBadge.vue +4 -6
- package/src/components/notification/VcsTooltip.vue +95 -94
- package/src/components/notification/validation.js +1 -1
- package/src/components/tables/VcsDataTable.vue +398 -0
- package/src/components/tables/VcsTable.vue +63 -300
- package/src/contentTree/LayerTree.vue +2 -3
- package/src/contentTree/contentTreeCollection.js +49 -23
- package/src/contentTree/contentTreeItem.js +36 -14
- package/src/contentTree/groupContentTreeItem.js +44 -22
- package/src/contentTree/layerContentTreeItem.js +45 -20
- package/src/contentTree/layerGroupContentTreeItem.js +53 -31
- package/src/contentTree/nodeContentTreeItem.js +18 -7
- package/src/contentTree/obliqueCollectionContentTreeItem.js +45 -20
- package/src/contentTree/subContentTreeItem.js +13 -4
- package/src/contentTree/vcsObjectContentTreeItem.js +24 -15
- package/src/contentTree/viewpointContentTreeItem.js +19 -6
- package/src/downloadHelper.js +52 -0
- package/src/featureInfo/AddressBalloonComponent.vue +11 -16
- package/src/featureInfo/BalloonComponent.vue +41 -31
- package/src/featureInfo/abstractFeatureInfoView.js +30 -14
- package/src/featureInfo/addressBalloonFeatureInfoView.js +19 -7
- package/src/featureInfo/balloonFeatureInfoView.js +22 -9
- package/src/featureInfo/balloonHelper.js +61 -42
- package/src/featureInfo/featureInfo.js +74 -34
- package/src/featureInfo/featureInfoInteraction.js +13 -7
- package/src/featureInfo/iframeFeatureInfoView.js +3 -1
- package/src/featureInfo/tableFeatureInfoView.js +15 -5
- package/src/i18n/de.js +8 -0
- package/src/i18n/en.js +8 -0
- package/src/i18n/i18nCollection.js +183 -155
- package/src/init.js +124 -38
- package/src/legend/legendHelper.js +11 -6
- package/src/legend/styleLegendItem.vue +18 -12
- package/src/legend/vcsLegend.vue +15 -17
- package/src/manager/buttonManager.js +6 -3
- package/src/manager/categoryManager/CategoryComponent.vue +99 -63
- package/src/manager/categoryManager/CategoryComponentList.vue +33 -8
- package/src/manager/categoryManager/CategoryManager.vue +23 -11
- package/src/manager/categoryManager/categoryManager.js +90 -45
- package/src/manager/contextMenu/contextMenuComponent.vue +2 -6
- package/src/manager/contextMenu/contextMenuInteraction.js +6 -1
- package/src/manager/contextMenu/contextMenuManager.js +37 -22
- package/src/manager/navbarManager.js +28 -3
- package/src/manager/toolbox/GroupToolboxComponent.vue +22 -21
- package/src/manager/toolbox/SelectToolboxComponent.vue +36 -35
- package/src/manager/toolbox/ToolboxManager.vue +18 -10
- package/src/manager/toolbox/toolboxManager.js +30 -12
- package/src/manager/window/WindowComponent.vue +24 -32
- package/src/manager/window/WindowComponentHeader.vue +38 -28
- package/src/manager/window/WindowManager.vue +45 -35
- package/src/manager/window/windowHelper.js +80 -24
- package/src/manager/window/windowManager.js +79 -39
- package/src/navigation/mapNavCompass.vue +18 -4
- package/src/navigation/mapNavigation.vue +65 -46
- package/src/navigation/obliqueRotation.vue +34 -13
- package/src/navigation/orientationToolsButton.vue +6 -10
- package/src/navigation/overviewMap.js +76 -45
- package/src/navigation/overviewMapClickedInteraction.js +6 -1
- package/src/navigation/tiltSlider.vue +6 -10
- package/src/navigation/vcsCompass.vue +1 -9
- package/src/navigation/vcsZoomButton.vue +36 -11
- package/src/notifier/notifier.js +22 -13
- package/src/notifier/notifierComponent.vue +21 -21
- package/src/pluginHelper.js +39 -5
- package/src/search/resultItem.vue +10 -15
- package/src/search/resultsComponent.vue +30 -24
- package/src/search/search.js +48 -22
- package/src/search/searchComponent.vue +35 -10
- package/src/setup.js +9 -9
- package/src/state.js +28 -12
- package/src/styles/_typography.scss +0 -1
- package/src/styles/shades.scss +4 -2
- package/src/styles/utils/_border.scss +1 -1
- package/src/styles/utils/_display.scss +1 -1
- package/src/styles/variables.scss +39 -34
- package/src/styles/vcsFont.scss +6 -5
- package/src/styles/vcsGrid.scss +9 -0
- package/src/uiConfig.js +6 -4
- package/src/vcsUiApp.js +192 -91
- package/src/vuePlugins/i18n.js +5 -4
- package/src/vuePlugins/vuetify.js +4 -0
- package/start.js +8 -2
- package/dist/assets/cesium/Workers/PolygonPipeline-844aab0a.js +0 -1345
- package/dist/assets/cesium/Workers/Transforms-40229881.js +0 -14696
- package/dist/assets/index.8b833ead.js +0 -1
- package/dist/assets/ui.d760e4.css +0 -5
- package/map.config.json +0 -44
- package/plugins/@vcmap-show-case/config-editor/editor.vue +0 -66
- /package/dist/assets/cesium/Workers/{GeometryOffsetAttribute-04332ce7.js → GeometryOffsetAttribute-9ad0019c.js} +0 -0
- /package/dist/assets/{vue.db5102.js → vue.c1ece7.js} +0 -0
@@ -1,8 +1,11 @@
|
|
1
1
|
import { reactive } from 'vue';
|
2
|
-
import {
|
2
|
+
import { moduleIdSymbol, IndexedCollection, VcsEvent } from '@vcmap/core';
|
3
3
|
import { check } from '@vcsuite/check';
|
4
4
|
import { sortByOwner } from '../navbarManager.js';
|
5
|
-
import {
|
5
|
+
import {
|
6
|
+
validateAction,
|
7
|
+
validateActions,
|
8
|
+
} from '../../components/lists/VcsActionList.vue';
|
6
9
|
|
7
10
|
/**
|
8
11
|
* @callback MappingFunction
|
@@ -35,6 +38,7 @@ import { validateAction, validateActions } from '../../components/lists/VcsActio
|
|
35
38
|
* @property {string} title
|
36
39
|
* @property {Array<VcsAction>} actions
|
37
40
|
* @property {Array<VcsListItem & { destroy: (function():void|undefined) }>} items
|
41
|
+
* @property {boolean} draggable
|
38
42
|
* @property {boolean} selectable
|
39
43
|
* @property {boolean} singleSelect
|
40
44
|
* @property {Array<VcsListItem>} selection
|
@@ -44,6 +48,7 @@ import { validateAction, validateActions } from '../../components/lists/VcsActio
|
|
44
48
|
/**
|
45
49
|
* @typedef {Object} ManagedCategoryOptions
|
46
50
|
* @property {string} categoryName
|
51
|
+
* @property {boolean} [draggable] - only allowed for categories with underlying IndexedCollections
|
47
52
|
* @property {boolean} [selectable]
|
48
53
|
* @property {boolean} [singleSelect]
|
49
54
|
* @property {Array<VcsAction>} [actions]
|
@@ -61,7 +66,9 @@ import { validateAction, validateActions } from '../../components/lists/VcsActio
|
|
61
66
|
function transformItem(item, category, itemMappings) {
|
62
67
|
const keyProperty = category.collection.uniqueKey;
|
63
68
|
const listItem = {
|
64
|
-
get id() {
|
69
|
+
get id() {
|
70
|
+
return item[keyProperty];
|
71
|
+
},
|
65
72
|
title: item?.properties?.title || item[keyProperty],
|
66
73
|
actions: [],
|
67
74
|
};
|
@@ -114,6 +121,7 @@ function reduceCategoryOptions(current, next) {
|
|
114
121
|
if (next.actions?.length > 0) {
|
115
122
|
current.actions.push(...next.actions);
|
116
123
|
}
|
124
|
+
current.draggable = current.draggable ?? next.draggable;
|
117
125
|
current.selectable = current.selectable ?? next.selectable;
|
118
126
|
current.singleSelect = current.singleSelect ?? next.singleSelect;
|
119
127
|
return current;
|
@@ -145,24 +153,26 @@ class CategoryManager {
|
|
145
153
|
* @type {function():void}
|
146
154
|
* @private
|
147
155
|
*/
|
148
|
-
this.
|
149
|
-
this.
|
150
|
-
|
151
|
-
|
156
|
+
this._dynamicModuleIdListener =
|
157
|
+
this._app.dynamicModuleIdChanged.addEventListener((id) => {
|
158
|
+
this._dynamicModuleId = id;
|
159
|
+
this._resetManagedCategories();
|
160
|
+
});
|
152
161
|
|
153
162
|
/**
|
154
163
|
* @type {function():void}
|
155
164
|
* @private
|
156
165
|
*/
|
157
|
-
this._appCategoriesRemovedListener =
|
158
|
-
this.
|
159
|
-
|
166
|
+
this._appCategoriesRemovedListener =
|
167
|
+
this._app.categories.removed.addEventListener((category) => {
|
168
|
+
this._removeCategory(category.name);
|
169
|
+
});
|
160
170
|
|
161
171
|
/**
|
162
172
|
* @type {string}
|
163
173
|
* @private
|
164
174
|
*/
|
165
|
-
this.
|
175
|
+
this._dynamicModuleId = this._app.dynamicModuleId;
|
166
176
|
|
167
177
|
/**
|
168
178
|
* @type {Array<ItemMapping<*>>}
|
@@ -217,8 +227,9 @@ class CategoryManager {
|
|
217
227
|
_handleItemMoved(item, category) {
|
218
228
|
const managedCategory = this.get(category.name);
|
219
229
|
if (managedCategory) {
|
220
|
-
const index = managedCategory.items
|
221
|
-
|
230
|
+
const index = managedCategory.items.findIndex((elem) => {
|
231
|
+
return elem.id === item[category.collection.uniqueKey];
|
232
|
+
});
|
222
233
|
if (index > -1) {
|
223
234
|
const listItem = managedCategory.items[index];
|
224
235
|
managedCategory.items.splice(index, 1);
|
@@ -237,8 +248,9 @@ class CategoryManager {
|
|
237
248
|
_handleItemRemoved(item, category) {
|
238
249
|
const managedCategory = this.get(category.name);
|
239
250
|
if (managedCategory) {
|
240
|
-
const index = managedCategory.items
|
241
|
-
|
251
|
+
const index = managedCategory.items.findIndex((elem) => {
|
252
|
+
return elem.id === item[category.collection.uniqueKey];
|
253
|
+
});
|
242
254
|
if (index > -1) {
|
243
255
|
const listItem = managedCategory.items[index];
|
244
256
|
if (listItem.destroy) {
|
@@ -250,7 +262,7 @@ class CategoryManager {
|
|
250
262
|
}
|
251
263
|
|
252
264
|
/**
|
253
|
-
* removes all items from all categories and rebuilds the item tree depending on the
|
265
|
+
* removes all items from all categories and rebuilds the item tree depending on the ModuleId
|
254
266
|
* @private
|
255
267
|
*/
|
256
268
|
_resetManagedCategories() {
|
@@ -281,7 +293,7 @@ class CategoryManager {
|
|
281
293
|
});
|
282
294
|
managedCategory.items = [...category.collection]
|
283
295
|
.filter((item) => {
|
284
|
-
return item[
|
296
|
+
return item[moduleIdSymbol] === this._dynamicModuleId;
|
285
297
|
})
|
286
298
|
.map((item) => {
|
287
299
|
return transformItem(item, category, itemMappings);
|
@@ -301,44 +313,52 @@ class CategoryManager {
|
|
301
313
|
throw new Error(`Could not find Category: ${categoryName}`);
|
302
314
|
}
|
303
315
|
|
304
|
-
const options = [
|
316
|
+
const options = [
|
317
|
+
...this._managedCategoryOptions.get(category.name).values(),
|
318
|
+
] // does not have to be sorted, since this is the first owner
|
305
319
|
.reduce(reduceCategoryOptions, { actions: [] });
|
306
320
|
|
307
321
|
const listeners = [
|
308
322
|
category.collection.added.addEventListener((item) => {
|
309
|
-
if (item[
|
323
|
+
if (item[moduleIdSymbol] === this._dynamicModuleId) {
|
310
324
|
this._handleItemAdded(item, category);
|
311
325
|
}
|
312
326
|
}),
|
313
327
|
category.collection.removed.addEventListener((item) => {
|
314
|
-
if (item[
|
328
|
+
if (item[moduleIdSymbol] === this._dynamicModuleId) {
|
315
329
|
this._handleItemRemoved(item, category);
|
316
330
|
}
|
317
331
|
}),
|
318
332
|
category.collection.replaced.addEventListener((replacedEvent) => {
|
319
|
-
if (replacedEvent.old[
|
333
|
+
if (replacedEvent.old[moduleIdSymbol] === this._dynamicModuleId) {
|
320
334
|
this._handleItemRemoved(replacedEvent.old, category);
|
321
335
|
}
|
322
336
|
}),
|
323
337
|
];
|
324
338
|
|
325
339
|
if (category.collection instanceof IndexedCollection) {
|
326
|
-
listeners.push(
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
340
|
+
listeners.push(
|
341
|
+
category.collection.moved.addEventListener((item) => {
|
342
|
+
if (item[moduleIdSymbol] === this._dynamicModuleId) {
|
343
|
+
this._handleItemMoved(item, category);
|
344
|
+
}
|
345
|
+
}),
|
346
|
+
);
|
331
347
|
}
|
332
348
|
|
333
349
|
/** @type {ManagedCategory} */
|
334
350
|
const managedCategory = reactive({
|
335
351
|
...options,
|
336
|
-
get categoryName() {
|
352
|
+
get categoryName() {
|
353
|
+
return category.name;
|
354
|
+
},
|
337
355
|
selection: [],
|
338
356
|
title: category.title,
|
339
357
|
items: [],
|
340
358
|
destroy() {
|
341
|
-
listeners.forEach((cb) => {
|
359
|
+
listeners.forEach((cb) => {
|
360
|
+
cb();
|
361
|
+
});
|
342
362
|
this.items.forEach((item) => {
|
343
363
|
if (item.destroy) {
|
344
364
|
item.destroy();
|
@@ -365,9 +385,13 @@ class CategoryManager {
|
|
365
385
|
if (this._managedCategoryOptions.has(categoryName)) {
|
366
386
|
const managedCategory = this.get(categoryName);
|
367
387
|
if (managedCategory) {
|
368
|
-
const pluginNames = [...this._app.plugins].map(p => p.name);
|
369
|
-
const options = [
|
370
|
-
.
|
388
|
+
const pluginNames = [...this._app.plugins].map((p) => p.name);
|
389
|
+
const options = [
|
390
|
+
...this._managedCategoryOptions.get(categoryName).entries(),
|
391
|
+
]
|
392
|
+
.sort(([ownerA], [ownerB]) =>
|
393
|
+
sortByOwner(ownerA, ownerB, pluginNames),
|
394
|
+
)
|
371
395
|
.map(([, value]) => value)
|
372
396
|
.reduce(reduceCategoryOptions, { actions: [] });
|
373
397
|
Object.assign(managedCategory, options);
|
@@ -404,7 +428,10 @@ class CategoryManager {
|
|
404
428
|
check(owner, [String, Symbol]);
|
405
429
|
|
406
430
|
const { categoryName } = managedCategoryOptions;
|
407
|
-
if (
|
431
|
+
if (
|
432
|
+
managedCategoryOptions.actions &&
|
433
|
+
!validateActions(managedCategoryOptions.actions)
|
434
|
+
) {
|
408
435
|
throw new Error('Invalid actions Array');
|
409
436
|
}
|
410
437
|
if (!this._app.categories.hasKey(categoryName)) {
|
@@ -412,13 +439,21 @@ class CategoryManager {
|
|
412
439
|
}
|
413
440
|
|
414
441
|
if (this._managedCategoryOptions.get(categoryName)?.has(owner)) {
|
415
|
-
throw new Error(
|
442
|
+
throw new Error(
|
443
|
+
`Category has already been added by this owner: ${categoryName}, ${owner}`,
|
444
|
+
);
|
445
|
+
}
|
446
|
+
if (managedCategoryOptions.draggable) {
|
447
|
+
const { collection } = this._app.categories.getByKey(categoryName);
|
448
|
+
managedCategoryOptions.draggable =
|
449
|
+
collection instanceof IndexedCollection;
|
416
450
|
}
|
417
451
|
|
418
452
|
/** @type {ManagedCategoryOptions} */
|
419
453
|
const clonedOptions = {
|
420
454
|
categoryName,
|
421
455
|
actions: managedCategoryOptions.actions?.slice?.() ?? [],
|
456
|
+
draggable: managedCategoryOptions.draggable,
|
422
457
|
selectable: managedCategoryOptions.selectable,
|
423
458
|
singleSelect: managedCategoryOptions.singleSelect,
|
424
459
|
};
|
@@ -489,10 +524,17 @@ class CategoryManager {
|
|
489
524
|
if (categoryNames.length === 0) {
|
490
525
|
throw new Error('Provide at least one categoryName');
|
491
526
|
}
|
492
|
-
if (
|
493
|
-
|
494
|
-
|
495
|
-
|
527
|
+
if (
|
528
|
+
this._itemMappings.find((itemMapping) => {
|
529
|
+
return (
|
530
|
+
itemMapping.mappingFunction === mappingFunction &&
|
531
|
+
itemMapping.owner === owner
|
532
|
+
);
|
533
|
+
})
|
534
|
+
) {
|
535
|
+
throw new Error(
|
536
|
+
'Could not add MappingFunction, the MappingFunction is already under management',
|
537
|
+
);
|
496
538
|
}
|
497
539
|
/** @type {ItemMapping} */
|
498
540
|
const itemMapping = {
|
@@ -519,7 +561,10 @@ class CategoryManager {
|
|
519
561
|
check(owner, [String, Symbol]);
|
520
562
|
const affectedCategories = [];
|
521
563
|
this._itemMappings = this._itemMappings.filter((itemMapping) => {
|
522
|
-
if (
|
564
|
+
if (
|
565
|
+
itemMapping.mappingFunction === mappingFunction &&
|
566
|
+
itemMapping.owner === owner
|
567
|
+
) {
|
523
568
|
affectedCategories.push(...itemMapping.categoryNames);
|
524
569
|
return false;
|
525
570
|
}
|
@@ -552,10 +597,9 @@ class CategoryManager {
|
|
552
597
|
this._removeCategory(categoryName);
|
553
598
|
}
|
554
599
|
});
|
555
|
-
this._itemMappings = this._itemMappings
|
556
|
-
.
|
557
|
-
|
558
|
-
});
|
600
|
+
this._itemMappings = this._itemMappings.filter((itemMapping) => {
|
601
|
+
return itemMapping.owner !== owner;
|
602
|
+
});
|
559
603
|
this._resetManagedCategories();
|
560
604
|
}
|
561
605
|
|
@@ -563,8 +607,9 @@ class CategoryManager {
|
|
563
607
|
* Clears the manager of all added categories and item mappings
|
564
608
|
*/
|
565
609
|
clear() {
|
566
|
-
[...this.componentIds]
|
567
|
-
|
610
|
+
[...this.componentIds].forEach((categoryName) => {
|
611
|
+
this._removeCategory(categoryName);
|
612
|
+
});
|
568
613
|
this._itemMappings = [];
|
569
614
|
}
|
570
615
|
|
@@ -572,7 +617,7 @@ class CategoryManager {
|
|
572
617
|
* destroys the categoryManager, removes all Listeners and clears all Managed Categories
|
573
618
|
*/
|
574
619
|
destroy() {
|
575
|
-
this.
|
620
|
+
this._dynamicModuleIdListener();
|
576
621
|
this._appCategoriesRemovedListener();
|
577
622
|
this.componentIds = [];
|
578
623
|
this._managedCategories.forEach((item) => {
|
@@ -1,9 +1,6 @@
|
|
1
1
|
<template>
|
2
2
|
<div @click.stop="close">
|
3
|
-
<VcsActionList
|
4
|
-
:actions="actions"
|
5
|
-
:show-icon="true"
|
6
|
-
/>
|
3
|
+
<VcsActionList :actions="actions" :show-icon="true" />
|
7
4
|
</div>
|
8
5
|
</template>
|
9
6
|
|
@@ -39,5 +36,4 @@
|
|
39
36
|
};
|
40
37
|
</script>
|
41
38
|
|
42
|
-
<style scoped>
|
43
|
-
</style>
|
39
|
+
<style scoped></style>
|
@@ -1,4 +1,9 @@
|
|
1
|
-
import {
|
1
|
+
import {
|
2
|
+
AbstractInteraction,
|
3
|
+
EventType,
|
4
|
+
ModificationKeyType,
|
5
|
+
PointerKeyType,
|
6
|
+
} from '@vcmap/core';
|
2
7
|
|
3
8
|
/**
|
4
9
|
* Class to call a callback on right click and a callback on any other click
|
@@ -6,7 +6,9 @@ import { vcsAppSymbol } from '../../pluginHelper.js';
|
|
6
6
|
import { validateAction } from '../../components/lists/VcsActionList.vue';
|
7
7
|
import { WindowSlot } from '../window/windowManager.js';
|
8
8
|
import { getFittedWindowPositionOptionsFromMapEvent } from '../window/windowHelper.js';
|
9
|
-
import ContextMenuComponent, {
|
9
|
+
import ContextMenuComponent, {
|
10
|
+
contextMenuWindowId,
|
11
|
+
} from './contextMenuComponent.vue';
|
10
12
|
import { sortByOwner } from '../navbarManager.js';
|
11
13
|
|
12
14
|
/**
|
@@ -83,7 +85,8 @@ class ContextMenuManager {
|
|
83
85
|
|
84
86
|
_ensureInteraction() {
|
85
87
|
if (!this._interactionListener) {
|
86
|
-
this._interactionListener =
|
88
|
+
this._interactionListener =
|
89
|
+
this._app.maps.eventHandler.addPersistentInteraction(this._interaction);
|
87
90
|
}
|
88
91
|
}
|
89
92
|
|
@@ -102,10 +105,12 @@ class ContextMenuManager {
|
|
102
105
|
*/
|
103
106
|
async _handleRightClick(event) {
|
104
107
|
this.clear();
|
105
|
-
const actionArrays = await Promise.all(
|
108
|
+
const actionArrays = await Promise.all(
|
109
|
+
this._eventHandlers.map(({ handler }) => handler(event)),
|
110
|
+
);
|
106
111
|
const actions = actionArrays
|
107
|
-
.filter(i => Array.isArray(i))
|
108
|
-
.flatMap(i => i)
|
112
|
+
.filter((i) => Array.isArray(i))
|
113
|
+
.flatMap((i) => i)
|
109
114
|
.filter(validateAction);
|
110
115
|
|
111
116
|
if (actions.length > 0) {
|
@@ -115,25 +120,29 @@ class ContextMenuManager {
|
|
115
120
|
actions.length * 32,
|
116
121
|
this._app.maps.target,
|
117
122
|
);
|
118
|
-
if (position.left) {
|
123
|
+
if (position.left) {
|
124
|
+
// ensure we nudge the window, so it does not trigger the default right click.
|
119
125
|
position.left += 1;
|
120
126
|
} else {
|
121
127
|
position.right += 1;
|
122
128
|
}
|
123
129
|
|
124
|
-
this._app.windowManager.add(
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
130
|
+
this._app.windowManager.add(
|
131
|
+
{
|
132
|
+
id: contextMenuWindowId,
|
133
|
+
component: ContextMenuComponent,
|
134
|
+
state: {
|
135
|
+
hideHeader: true,
|
136
|
+
},
|
137
|
+
props: {
|
138
|
+
actions,
|
139
|
+
showIcon: true,
|
140
|
+
},
|
141
|
+
position,
|
142
|
+
slow: WindowSlot.DETACHED,
|
133
143
|
},
|
134
|
-
|
135
|
-
|
136
|
-
}, vcsAppSymbol);
|
144
|
+
vcsAppSymbol,
|
145
|
+
);
|
137
146
|
|
138
147
|
this._setupListeners();
|
139
148
|
}
|
@@ -151,7 +160,7 @@ class ContextMenuManager {
|
|
151
160
|
|
152
161
|
this._ensureInteraction();
|
153
162
|
this._eventHandlers.push({ owner, handler });
|
154
|
-
const order = [...this._app.plugins].map(p => p.name);
|
163
|
+
const order = [...this._app.plugins].map((p) => p.name);
|
155
164
|
this._eventHandlers.sort((a, b) => {
|
156
165
|
return sortByOwner(a.owner, b.owner, order);
|
157
166
|
});
|
@@ -162,7 +171,9 @@ class ContextMenuManager {
|
|
162
171
|
* @param {function(import("@vcmap/core").InteractionEvent):Promise<Array<VcsAction>>|Array<VcsAction>} handler
|
163
172
|
*/
|
164
173
|
removeHandler(handler) {
|
165
|
-
this._eventHandlers = this._eventHandlers.filter(
|
174
|
+
this._eventHandlers = this._eventHandlers.filter(
|
175
|
+
({ handler: itemHandler }) => itemHandler !== handler,
|
176
|
+
);
|
166
177
|
if (this._eventHandlers.length === 0 && this._interactionListener) {
|
167
178
|
this._interactionListener();
|
168
179
|
this._interactionListener = null;
|
@@ -174,7 +185,9 @@ class ContextMenuManager {
|
|
174
185
|
* @param {string|symbol} owner
|
175
186
|
*/
|
176
187
|
removeOwner(owner) {
|
177
|
-
this._eventHandlers = this._eventHandlers.filter(
|
188
|
+
this._eventHandlers = this._eventHandlers.filter(
|
189
|
+
({ owner: handlerOwner }) => handlerOwner !== owner,
|
190
|
+
);
|
178
191
|
if (this._eventHandlers.length === 0 && this._interactionListener) {
|
179
192
|
this._interactionListener();
|
180
193
|
this._interactionListener = null;
|
@@ -185,7 +198,9 @@ class ContextMenuManager {
|
|
185
198
|
* Clear any currently opened context menus
|
186
199
|
*/
|
187
200
|
clear() {
|
188
|
-
this._listeners.forEach((cb) => {
|
201
|
+
this._listeners.forEach((cb) => {
|
202
|
+
cb();
|
203
|
+
});
|
189
204
|
this._listeners = [];
|
190
205
|
this._app.windowManager.remove(contextMenuWindowId);
|
191
206
|
}
|
@@ -38,11 +38,16 @@ export function sortByOwner(ownerA, ownerB, order = []) {
|
|
38
38
|
* @param {function(ownerA:string, ownerB:string, order: string[]):number} [compareFn=sortByOwner] Per default components are sorted by owner: app first, then plugins
|
39
39
|
* @returns {Array<VcsAction>}
|
40
40
|
*/
|
41
|
-
export function getActionsByLocation(
|
41
|
+
export function getActionsByLocation(
|
42
|
+
buttonComponents,
|
43
|
+
location,
|
44
|
+
order = [],
|
45
|
+
compareFn = sortByOwner,
|
46
|
+
) {
|
42
47
|
return [...buttonComponents]
|
43
|
-
.filter(b => b[locationSymbol] === location)
|
48
|
+
.filter((b) => b[locationSymbol] === location)
|
44
49
|
.sort((a, b) => compareFn(a.owner, b.owner, order))
|
45
|
-
.map(b => b.action);
|
50
|
+
.map((b) => b.action);
|
46
51
|
}
|
47
52
|
|
48
53
|
/**
|
@@ -84,6 +89,26 @@ class NavbarManager extends ButtonManager {
|
|
84
89
|
buttonComponent[locationSymbol] = location;
|
85
90
|
return buttonComponent;
|
86
91
|
}
|
92
|
+
|
93
|
+
/**
|
94
|
+
* Toggles a button of provided id by executing its callback.
|
95
|
+
* Use active flag to force a state to be applied.
|
96
|
+
* @param {string} id
|
97
|
+
* @param {boolean} [active]
|
98
|
+
*/
|
99
|
+
toggle(id, active = undefined) {
|
100
|
+
check(id, String);
|
101
|
+
if (this.has(id)) {
|
102
|
+
const { action } = this.get(id);
|
103
|
+
if (active !== undefined) {
|
104
|
+
if (action?.active !== active) {
|
105
|
+
action.callback();
|
106
|
+
}
|
107
|
+
} else if (action) {
|
108
|
+
action.callback();
|
109
|
+
}
|
110
|
+
}
|
111
|
+
}
|
87
112
|
}
|
88
113
|
|
89
114
|
export default NavbarManager;
|
@@ -9,9 +9,10 @@
|
|
9
9
|
>
|
10
10
|
<template #activator="{ on, attrs }">
|
11
11
|
<VcsButton
|
12
|
-
class="vcs-toolbox-
|
12
|
+
class="vcs-toolbox-toggle-button"
|
13
13
|
width="48"
|
14
14
|
:icon="group.icon"
|
15
|
+
:disabled="group.disabled"
|
15
16
|
:tooltip="group.title"
|
16
17
|
:active="open || hasActiveAction"
|
17
18
|
:color="hasActiveAction ? 'primary' : ''"
|
@@ -19,7 +20,7 @@
|
|
19
20
|
v-on="on"
|
20
21
|
large
|
21
22
|
>
|
22
|
-
<v-icon
|
23
|
+
<v-icon>{{ open ? 'mdi-chevron-up' : 'mdi-chevron-down' }}</v-icon>
|
23
24
|
</VcsButton>
|
24
25
|
</template>
|
25
26
|
|
@@ -33,13 +34,14 @@
|
|
33
34
|
<v-toolbar-items class="w-full">
|
34
35
|
<div class="d-flex align-center justify-space-between w-full mx-1">
|
35
36
|
<VcsButton
|
36
|
-
v-for="
|
37
|
+
v-for="{ id, action } in orderedButtons"
|
37
38
|
:key="id"
|
38
39
|
:tooltip="action.title"
|
39
40
|
:icon="action.icon"
|
41
|
+
:disabled="action.disabled"
|
40
42
|
:active="action.active"
|
41
43
|
@click="action.callback($event)"
|
42
|
-
v-bind="{...$attrs}"
|
44
|
+
v-bind="{ ...$attrs }"
|
43
45
|
large
|
44
46
|
/>
|
45
47
|
</div>
|
@@ -49,24 +51,19 @@
|
|
49
51
|
</div>
|
50
52
|
</template>
|
51
53
|
<style lang="scss">
|
52
|
-
.vcs-toolbox-2 {
|
53
|
-
|
54
|
-
|
54
|
+
.vcs-toolbox-2 {
|
55
|
+
.v-toolbar__content {
|
56
|
+
padding: 0;
|
57
|
+
}
|
55
58
|
}
|
56
|
-
}
|
57
59
|
|
58
|
-
.marginToTop {
|
59
|
-
|
60
|
-
}
|
60
|
+
.marginToTop {
|
61
|
+
margin-top: 3px;
|
62
|
+
}
|
61
63
|
</style>
|
62
64
|
<script>
|
63
65
|
import { computed, ref } from 'vue';
|
64
|
-
import {
|
65
|
-
VMenu,
|
66
|
-
VIcon,
|
67
|
-
VToolbar,
|
68
|
-
VToolbarItems,
|
69
|
-
} from 'vuetify/lib';
|
66
|
+
import { VMenu, VIcon, VToolbar, VToolbarItems } from 'vuetify/lib';
|
70
67
|
import VcsButton from '../../components/buttons/VcsButton.vue';
|
71
68
|
import { getComponentsByOrder } from './toolboxManager.js';
|
72
69
|
|
@@ -102,10 +99,14 @@
|
|
102
99
|
const buttons = computed(() => {
|
103
100
|
const { buttonManager } = props.group;
|
104
101
|
const buttonIds = ref(buttonManager.componentIds);
|
105
|
-
return buttonIds.value.map(id => buttonManager.get(id));
|
102
|
+
return buttonIds.value.map((id) => buttonManager.get(id));
|
106
103
|
});
|
107
|
-
const orderedButtons = computed(() =>
|
108
|
-
|
104
|
+
const orderedButtons = computed(() =>
|
105
|
+
getComponentsByOrder(buttons.value),
|
106
|
+
);
|
107
|
+
const hasActiveAction = computed(() =>
|
108
|
+
orderedButtons.value.some((a) => a.action.active),
|
109
|
+
);
|
109
110
|
|
110
111
|
/**
|
111
112
|
* v-menu auto prop is not working as expected.
|
@@ -115,7 +116,7 @@
|
|
115
116
|
const nudgeLeft = computed(() => {
|
116
117
|
const toolboxBtnWidth = 42 + 8; // with padding
|
117
118
|
const menuBtnWidth = 48;
|
118
|
-
return
|
119
|
+
return buttons.value.length * (toolboxBtnWidth / 2) - menuBtnWidth / 2;
|
119
120
|
});
|
120
121
|
|
121
122
|
return {
|