@mapcomponents/react-maplibre 0.1.63 → 0.1.64
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/.editorconfig +1 -1
- package/.eslintrc.js +9 -6
- package/.github/workflows/check-catalogue-metadata-schema.yml +19 -0
- package/CHANGELOG.md +27 -2
- package/coverage/clover.xml +671 -1032
- package/coverage/coverage-final.json +24 -21
- package/coverage/lcov-report/index.html +112 -82
- package/coverage/lcov-report/src/components/MapLibreMap/MapLibreMap.tsx.html +24 -24
- package/coverage/lcov-report/src/components/MapLibreMap/index.html +1 -1
- package/coverage/lcov-report/src/components/MlCenterPosition/MlCenterPosition.tsx.html +5 -5
- package/coverage/lcov-report/src/components/MlCenterPosition/index.html +1 -1
- package/coverage/lcov-report/src/components/MlCreatePdfButton/MlCreatePdfButton.tsx.html +2 -2
- package/coverage/lcov-report/src/components/MlCreatePdfButton/index.html +1 -1
- package/coverage/lcov-report/src/components/MlCreatePdfForm/MlCreatePdfForm.cy.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlCreatePdfForm/MlCreatePdfForm.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlCreatePdfForm/index.html +1 -1
- package/coverage/lcov-report/src/components/MlFeatureEditor/MlFeatureEditor.tsx.html +2 -5
- package/coverage/lcov-report/src/components/MlFeatureEditor/index.html +1 -1
- package/coverage/lcov-report/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlFillExtrusionLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlFollowGps/MlFollowGps.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlFollowGps/index.html +1 -1
- package/coverage/lcov-report/src/components/MlGeoJsonLayer/MlGeoJsonLayer.tsx.html +40 -19
- package/coverage/lcov-report/src/components/MlGeoJsonLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlGeoJsonLayer/story_utils/MlGeoJsonLayer.lineStyler.js.html +1 -1
- package/coverage/lcov-report/src/components/MlGeoJsonLayer/story_utils/MlGeoJsonLayer.polygonStyler.js.html +1 -1
- package/coverage/lcov-report/src/components/MlGeoJsonLayer/story_utils/MlGeojsonLayerCircleStyler.tsx.html +112 -0
- package/coverage/lcov-report/src/components/MlGeoJsonLayer/story_utils/MlGeojsonLayerHeatMapStyler.tsx.html +115 -0
- package/coverage/lcov-report/src/components/MlGeoJsonLayer/story_utils/index.html +34 -4
- package/coverage/lcov-report/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlGeojsonLayerWithSource/index.html +1 -1
- package/coverage/lcov-report/src/components/MlGpxViewer/MlGpxViewer.tsx.html +394 -0
- package/coverage/lcov-report/src/components/{MlGPXViewer → MlGpxViewer}/index.html +23 -38
- package/coverage/lcov-report/src/components/MlImageMarkerLayer/MlImageMarkerLayer.tsx.html +63 -285
- package/coverage/lcov-report/src/components/MlImageMarkerLayer/index.html +21 -21
- package/coverage/lcov-report/src/components/MlLayer/MlLayer.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerMagnify/MlLayerMagnify.tsx.html +58 -76
- package/coverage/lcov-report/src/components/MlLayerMagnify/index.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerSwipe/MlLayerSwipe.tsx.html +58 -61
- package/coverage/lcov-report/src/components/MlLayerSwipe/index.html +11 -11
- package/coverage/lcov-report/src/components/MlLayerSwitcher/MlLayerSwitcher.js.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerSwitcher/components/LayerBox.js.html +30 -21
- package/coverage/lcov-report/src/components/MlLayerSwitcher/components/index.html +1 -1
- package/coverage/lcov-report/src/components/MlLayerSwitcher/index.html +1 -1
- package/coverage/lcov-report/src/components/MlMarker/MlMarker.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlMarker/index.html +1 -1
- package/coverage/lcov-report/src/components/MlMeasureTool/MlMeasureTool.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlMeasureTool/index.html +1 -1
- package/coverage/lcov-report/src/components/MlNavigationCompass/MlNavigationCompass.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlNavigationCompass/index.html +1 -1
- package/coverage/lcov-report/src/components/MlNavigationTools/MlNavigationTools.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlNavigationTools/index.html +1 -1
- package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.js.html +1 -1
- package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.stories_.js.html +1 -1
- package/coverage/lcov-report/src/components/MlOsmLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlScaleReference/MlScaleReference.js.html +1 -1
- package/coverage/lcov-report/src/components/MlScaleReference/index.html +1 -1
- package/coverage/lcov-report/src/components/MlShareMapState/MlShareMapState.js.html +1 -1
- package/coverage/lcov-report/src/components/MlShareMapState/index.html +1 -1
- package/coverage/lcov-report/src/components/MlSketchTool/LayerList/ColorPicker.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlSketchTool/LayerList/LayerList.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlSketchTool/LayerList/LayerListItem.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlSketchTool/LayerList/LayerPropertyForm.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlSketchTool/LayerList/index.html +1 -1
- package/coverage/lcov-report/src/components/MlSketchTool/MlSketchTool.tsx.html +1 -1
- package/coverage/lcov-report/src/components/MlSketchTool/index.html +1 -1
- package/coverage/lcov-report/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.tsx.html +514 -0
- package/coverage/lcov-report/src/components/MlSpatialElevationProfile/index.html +21 -21
- package/coverage/lcov-report/src/components/MlThreeJsLayer/MlThreeJsLayer.js.html +1 -1
- package/coverage/lcov-report/src/components/MlThreeJsLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.tsx.html +20 -206
- package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/index.html +1 -1
- package/coverage/lcov-report/src/components/MlUseMapDebugger/MlUseMapDebugger.js.html +1 -1
- package/coverage/lcov-report/src/components/MlUseMapDebugger/index.html +1 -1
- package/coverage/lcov-report/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx.html +10 -7
- package/coverage/lcov-report/src/components/MlVectorTileLayer/index.html +5 -5
- package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js.html +1 -1
- package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/index.html +1 -1
- package/coverage/lcov-report/src/components/MlWmsLayer/MlWmsLayer.tsx.html +111 -57
- package/coverage/lcov-report/src/components/MlWmsLayer/index.html +19 -19
- package/coverage/lcov-report/src/components/MlWmsLoader/MlWmsLoader.tsx.html +201 -144
- package/coverage/lcov-report/src/components/MlWmsLoader/index.html +9 -9
- package/coverage/lcov-report/src/contexts/MapContext.tsx.html +23 -23
- package/coverage/lcov-report/src/contexts/SimpleDataContext.js.html +1 -1
- package/coverage/lcov-report/src/contexts/SimpleDataProvider.js.html +1 -1
- package/coverage/lcov-report/src/contexts/index.html +1 -1
- package/coverage/lcov-report/src/hooks/index.html +50 -50
- package/coverage/lcov-report/src/hooks/useCameraFollowPath/index.html +1 -1
- package/coverage/lcov-report/src/hooks/useCameraFollowPath/useCameraFollowPath.tsx.html +1 -1
- package/coverage/lcov-report/src/hooks/useExportMap/index.html +1 -1
- package/coverage/lcov-report/src/hooks/useExportMap/index.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useExportMap/lib.ts.html +1 -1
- package/coverage/lcov-report/src/hooks/useGpx/index.html +116 -0
- package/coverage/lcov-report/src/hooks/useGpx/useGpx.tsx.html +295 -0
- package/coverage/lcov-report/src/hooks/useLayer.ts.html +132 -66
- package/coverage/lcov-report/src/hooks/useLayerEvent.js.html +1 -1
- package/coverage/lcov-report/src/hooks/useLayerHoverPopup/index.html +116 -0
- package/coverage/lcov-report/src/hooks/useLayerHoverPopup/useLayerHoverPopup.tsx.html +331 -0
- package/coverage/lcov-report/src/hooks/useMap.ts.html +47 -47
- package/coverage/lcov-report/src/hooks/useMapState.ts.html +54 -54
- package/coverage/lcov-report/src/hooks/useSource.ts.html +57 -57
- package/coverage/lcov-report/src/hooks/{useWms.js.html → useWms.ts.html} +54 -15
- package/coverage/lcov-report/src/index.html +1 -1
- package/coverage/lcov-report/src/index.ts.html +6 -6
- package/coverage/lcov.info +1284 -1959
- package/dist/components/MapLibreMap/lib/MapLibreGlWrapper.d.ts +51 -25
- package/dist/components/MlCenterPosition/MlCenterPosition.d.ts +3 -2
- package/dist/components/MlCenterPosition/MlCenterPosition.stories.d.ts +35 -16
- package/dist/components/MlComponentTemplate/MlComponentTemplate.d.ts +1 -1
- package/dist/components/MlComponentTemplate/MlComponentTemplate.stories.d.ts +12 -9
- package/dist/components/MlCreatePdfButton/MlCreatePdfButton.d.ts +1 -1
- package/dist/components/MlCreatePdfButton/MlCreatePdfButton.stories.d.ts +12 -9
- package/dist/components/MlGPXViewer/util/GeoJsonContext.d.ts +1 -1
- package/dist/components/MlGeoJsonLayer/MlGeoJsonLayer.d.ts +22 -11
- package/dist/components/MlGeoJsonLayer/MlGeoJsonLayer.stories.d.ts +4 -95
- package/dist/components/MlGeoJsonLayer/story_utils/MlGeojsonLayerCircleStyler.d.ts +3 -0
- package/dist/components/MlGeoJsonLayer/story_utils/MlGeojsonLayerHeatMapStyler.d.ts +3 -0
- package/dist/components/MlGpxViewer/MlGpxViewer.d.ts +30 -0
- package/dist/components/MlGpxViewer/MlGpxViewer.stories.d.ts +17 -0
- package/dist/components/MlGpxViewer/MlGpxViewer.test.d.ts +1 -0
- package/dist/components/MlGpxViewer/util/GeoJsonContext.d.ts +10 -0
- package/dist/components/MlGpxViewer/util/GeoJsonProvider.d.ts +4 -0
- package/dist/components/MlGpxViewer/util/MetadataDrawer.d.ts +7 -0
- package/dist/components/MlGpxViewer/util/MlGpxDemoLoader.d.ts +10 -0
- package/dist/components/MlGpxViewer/util/MlGpxViewerInstructions.d.ts +3 -0
- package/dist/components/MlImageMarkerLayer/MlImageMarkerLayer.d.ts +11 -2
- package/dist/components/MlImageMarkerLayer/MlImageMarkerLayer.stories.d.ts +7 -9
- package/dist/components/MlLayerMagnify/MlLayerMagnify.d.ts +8 -2
- package/dist/components/MlLayerMagnify/MlLayerMagnify.stories.d.ts +13 -9
- package/dist/components/MlLayerSwipe/MlLayerSwipe.d.ts +13 -3
- package/dist/components/MlLayerSwipe/MlLayerSwipe.stories.d.ts +12 -10
- package/dist/components/MlSpatialElevationProfile/MlSpatialElevationProfile.d.ts +33 -14
- package/dist/components/MlSpatialElevationProfile/MlSpatialElevationProfile.stories.d.ts +18 -15
- package/dist/components/MlSpatialElevationProfile/util/getElevationData.d.ts +14 -0
- package/dist/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.d.ts +3 -67
- package/dist/components/MlWmsLayer/MlWmsLayer.d.ts +7 -4
- package/dist/components/MlWmsLoader/MlWmsLoader.d.ts +17 -10
- package/dist/components/MlWmsLoader/MlWmsLoader.stories.d.ts +23 -12
- package/dist/components/MlWmsLoader/utils/MlWmsLoaderInstructions.d.ts +3 -0
- package/dist/components/MlWmsLoader/utils/WMSLinks.d.ts +6 -0
- package/dist/decorators/ThemeWrapper.d.ts +3 -1
- package/dist/hooks/useGpx/lib/gpxConverter.d.ts +11 -0
- package/dist/hooks/useGpx/useGpx.d.ts +26 -0
- package/dist/hooks/useGpx/useGpx.stories.d.ts +10 -0
- package/dist/hooks/useLayer.d.ts +13 -7
- package/dist/hooks/useLayerHoverPopup/useLayerHoverPopup.d.ts +23 -0
- package/dist/hooks/useLayerHoverPopup/useLayerHoverPopup.stories.d.ts +10 -0
- package/dist/hooks/useMap.d.ts +1 -1
- package/dist/hooks/useMap.test.d.ts +1 -0
- package/dist/hooks/useSource.d.ts +2 -2
- package/dist/hooks/useWms.d.ts +24 -16
- package/dist/index.d.ts +5 -5
- package/dist/index.esm.js +9310 -14006
- package/dist/index.esm.js.map +1 -1
- package/dist/setupTests.d.ts +6 -5
- package/dist/ui_components/Dropzone.d.ts +5 -0
- package/dist/ui_components/ImageLoader.d.ts +8 -1
- package/dist/ui_components/LoadingOverlayContext.d.ts +11 -11
- package/dist/ui_components/Sidebar.d.ts +7 -6
- package/dist/ui_components/Tooltip.d.ts +1 -1
- package/dist/ui_components/TopToolbar.d.ts +4 -3
- package/dist/ui_components/UploadButton.d.ts +6 -0
- package/dist/util/BubbleForInstructions.d.ts +2 -0
- package/dist/util/Instructions.d.ts +13 -0
- package/package.json +195 -191
- package/{src/components/MlImageMarkerLayer → public}/assets/wg-marker.png +0 -0
- package/scripts/build-catalogue-meta.js +35 -11
- package/src/components/MapLibreMap/lib/MapLibreGlWrapper.ts +230 -188
- package/src/components/MlCenterPosition/MlCenterPosition.meta_.json +1 -2
- package/src/components/MlCenterPosition/MlCenterPosition.stories.tsx +20 -0
- package/src/components/MlCenterPosition/MlCenterPosition.tsx +4 -4
- package/src/components/MlComponentTemplate/MlComponentTemplate.meta_.json +1 -2
- package/src/components/MlComponentTemplate/{MlComponentTemplate.stories.js → MlComponentTemplate.stories.tsx} +2 -2
- package/src/components/MlComponentTemplate/MlComponentTemplate.tsx +1 -1
- package/src/components/MlCreatePdfButton/MlCreatePdfButton.meta_.json +1 -2
- package/src/components/MlCreatePdfButton/{MlCreatePdfButton.stories.js → MlCreatePdfButton.stories.tsx} +1 -1
- package/src/components/MlCreatePdfButton/MlCreatePdfButton.tsx +1 -1
- package/src/components/MlCreatePdfForm/MlCreatePdfForm.meta.json +1 -2
- package/src/components/MlCreatePdfForm/lib/PdfForm.tsx +25 -2
- package/src/components/MlFeatureEditor/MlFeatureEditor.meta.json +1 -2
- package/src/components/MlFeatureEditor/MlFeatureEditor.tsx +0 -1
- package/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.meta.json +1 -2
- package/src/components/MlFollowGps/MlFollowGps.meta.json +1 -2
- package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.meta.json +1 -2
- package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.stories.tsx +89 -0
- package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.tsx +24 -17
- package/src/components/MlGeoJsonLayer/assets/earthquake.json +109937 -0
- package/src/components/MlGeoJsonLayer/assets/wg_locations.json +65 -0
- package/src/components/MlGeoJsonLayer/story_utils/MlGeojsonLayerCircleStyler.tsx +9 -0
- package/src/components/MlGeoJsonLayer/story_utils/MlGeojsonLayerHeatMapStyler.tsx +10 -0
- package/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.meta_.json +1 -2
- package/src/components/{MlGPXViewer/MlGPXViewer.doc.de.md → MlGpxViewer/MlGpxViewer.doc.de.md} +0 -0
- package/src/components/{MlGPXViewer/MlGPXViewer.doc.en.md → MlGpxViewer/MlGpxViewer.doc.en.md} +0 -0
- package/src/components/{MlGPXViewer/MlGPXViewer.meta.json → MlGpxViewer/MlGpxViewer.meta.json} +2 -3
- package/src/components/MlGpxViewer/MlGpxViewer.stories.tsx +109 -0
- package/src/components/MlGpxViewer/MlGpxViewer.test.js +53 -0
- package/src/components/MlGpxViewer/MlGpxViewer.tsx +103 -0
- package/src/components/{MlGPXViewer → MlGpxViewer}/util/GeoJsonContext.ts +0 -0
- package/src/components/{MlGPXViewer → MlGpxViewer}/util/GeoJsonProvider.tsx +0 -0
- package/src/components/MlGpxViewer/util/MetadataDrawer.tsx +38 -0
- package/src/components/MlGpxViewer/util/MlGpxDemoLoader.tsx +128 -0
- package/src/components/MlGpxViewer/util/MlGpxViewerInstructions.tsx +68 -0
- package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.meta_.json +1 -2
- package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.stories.tsx +41 -0
- package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.test.js +27 -8
- package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.tsx +41 -115
- package/src/components/MlLayer/MlLayer.meta_.json +1 -2
- package/src/components/MlLayerMagnify/MlLayerMagnify.meta.json +1 -2
- package/src/components/MlLayerMagnify/MlLayerMagnify.stories.tsx +44 -0
- package/src/components/MlLayerMagnify/{MlLayerMagnify.test.js → MlLayerMagnify.test.tsx} +15 -18
- package/src/components/MlLayerMagnify/MlLayerMagnify.tsx +55 -61
- package/src/components/MlLayerSwipe/MlLayerSwipe.meta.json +1 -2
- package/src/components/MlLayerSwipe/{MlLayerSwipe.stories.js → MlLayerSwipe.stories.tsx} +9 -11
- package/src/components/MlLayerSwipe/MlLayerSwipe.tsx +47 -48
- package/src/components/MlLayerSwitcher/MlLayerSwitcher.meta_.json +1 -2
- package/src/components/MlLayerSwitcher/components/LayerBox.js +22 -19
- package/src/components/MlMarker/MlMarker.meta_.json +1 -2
- package/src/components/MlMeasureTool/MlMeasureTool.meta.json +1 -2
- package/src/components/MlNavigationCompass/MlNavigationCompass.meta.json +1 -2
- package/src/components/MlNavigationTools/MlNavigationTools.meta.json +1 -2
- package/src/components/MlScaleReference/MlScaleReference.meta.json +1 -2
- package/src/components/MlShareMapState/MlShareMapState.meta_.json +1 -2
- package/src/components/MlSketchTool/MlSketchTool.meta.json +1 -2
- package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.meta.json +1 -2
- package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.stories.tsx +121 -0
- package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.test.js +30 -1
- package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.tsx +143 -0
- package/src/components/MlSpatialElevationProfile/util/getElevationData.tsx +103 -0
- package/src/components/MlThreeJsLayer/MlThreeJsLayer.meta.json +1 -2
- package/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.meta.json +1 -2
- package/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.stories.js +2 -3
- package/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.tsx +17 -79
- package/src/components/MlUseMapDebugger/MlUseMapDebugger.meta_.json +1 -2
- package/src/components/MlVectorTileLayer/MlVectorTileLayer.meta.json +1 -2
- package/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx +3 -2
- package/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.meta_.json +1 -2
- package/src/components/MlWmsLayer/MlWmsLayer.tsx +59 -41
- package/src/components/MlWmsLoader/MlWmsLoader.meta.json +1 -2
- package/src/components/MlWmsLoader/MlWmsLoader.stories.tsx +89 -0
- package/src/components/MlWmsLoader/MlWmsLoader.tsx +141 -122
- package/src/components/MlWmsLoader/utils/MlWmsLoaderInstructions.tsx +50 -0
- package/src/components/MlWmsLoader/utils/WMSLinks.tsx +128 -0
- package/src/decorators/MapContextDecorator.js +1 -1
- package/src/decorators/MapContextDecoratorHooks.js +1 -1
- package/src/decorators/ThemeWrapper.tsx +9 -0
- package/src/hooks/useCameraFollowPath/useCameraFollowPath.meta.json +1 -2
- package/src/{components/MlGPXViewer → hooks/useGpx/lib}/gpxConverter.js +1 -0
- package/src/hooks/useGpx/useGpx.doc.de.md +3 -0
- package/src/hooks/useGpx/useGpx.meta_.json +15 -0
- package/src/{components/MlCenterPosition/MlCenterPosition.stories.js → hooks/useGpx/useGpx.stories.js} +4 -5
- package/src/hooks/useGpx/useGpx.tsx +70 -0
- package/src/hooks/useLayer.ts +32 -10
- package/src/hooks/useLayerHoverPopup/useLayerHoverPopup.doc.de.md +3 -0
- package/src/hooks/useLayerHoverPopup/useLayerHoverPopup.meta_.json +15 -0
- package/src/hooks/useLayerHoverPopup/useLayerHoverPopup.stories.js +20 -0
- package/src/hooks/useLayerHoverPopup/useLayerHoverPopup.tsx +82 -0
- package/src/hooks/useMap.test.tsx +48 -0
- package/src/hooks/useMap.ts +8 -8
- package/src/hooks/useSource.ts +4 -4
- package/src/hooks/{useWms.js → useWms.ts} +24 -11
- package/src/index.ts +5 -5
- package/src/setupTests.js +18 -15
- package/src/ui_components/Dropzone.tsx +104 -0
- package/src/ui_components/{ImageLoader.js → ImageLoader.tsx} +30 -25
- package/src/ui_components/{LoadingOverlayContext.js → LoadingOverlayContext.tsx} +12 -15
- package/src/ui_components/Sidebar.tsx +12 -10
- package/src/ui_components/Tooltip.tsx +17 -0
- package/src/ui_components/TopToolbar.tsx +5 -3
- package/src/ui_components/UploadButton.tsx +57 -0
- package/src/util/BubbleForInstructions.js +46 -0
- package/src/util/Instructions.tsx +60 -0
- package/tsconfig.json +1 -1
- package/coverage/lcov-report/src/components/MlGPXViewer/MlGPXViewer.tsx.html +0 -1222
- package/coverage/lcov-report/src/components/MlGPXViewer/gpxConverter.js.html +0 -1645
- package/coverage/lcov-report/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js.html +0 -757
- package/dist/components/MlGPXViewer/util/MlGPXViewerInstructions.d.ts +0 -1
- package/dist/components/MlGPXViewer/util/SampleLayer.d.ts +0 -0
- package/dist/components/MlGPXViewer/util/demoViewer.d.ts +0 -5
- package/src/components/MlGPXViewer/MlGPXViewer.stories.js +0 -91
- package/src/components/MlGPXViewer/MlGPXViewer.test.js +0 -28
- package/src/components/MlGPXViewer/MlGPXViewer.tsx +0 -379
- package/src/components/MlGPXViewer/util/MlGPXViewerInstructions.js +0 -145
- package/src/components/MlGPXViewer/util/SampleLayer.js +0 -2
- package/src/components/MlGPXViewer/util/demoViewer.js +0 -254
- package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.stories.js +0 -45
- package/src/components/MlLayerMagnify/MlLayerMagnify.stories.js +0 -41
- package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js +0 -224
- package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.stories.js +0 -57
- package/src/components/MlWmsLoader/MlWmsLoader.stories.js +0 -47
- package/src/decorators/ThemeWrapper.jsx +0 -9
- package/src/ui_components/Legend.js +0 -44
- package/src/ui_components/LoadingOverlay.js +0 -41
- package/src/ui_components/Tooltip.js +0 -21
|
@@ -1,7 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import {
|
|
2
|
+
Map,
|
|
3
|
+
IControl,
|
|
4
|
+
MapOptions as MapOptionsType,
|
|
5
|
+
MapEventType,
|
|
6
|
+
MapLayerEventType,
|
|
7
|
+
StyleImageInterface,
|
|
8
|
+
LayerSpecification,
|
|
9
|
+
CustomLayerInterface,
|
|
10
|
+
SourceSpecification,
|
|
11
|
+
ControlPosition,
|
|
12
|
+
} from '!maplibre-gl';
|
|
13
|
+
import { Map as MapType, Style } from 'maplibre-gl';
|
|
14
|
+
|
|
15
|
+
type WrapperEventArgArray = [string, (arg0: unknown) => void];
|
|
16
|
+
type EventArgArray = [
|
|
17
|
+
keyof MapLayerEventType | keyof MapEventType,
|
|
18
|
+
string | ((arg0: unknown) => void),
|
|
19
|
+
((arg0: unknown) => void)?
|
|
20
|
+
];
|
|
5
21
|
type LayerState = {
|
|
6
22
|
id: string;
|
|
7
23
|
type: string;
|
|
@@ -22,52 +38,103 @@ type ViewportState = {
|
|
|
22
38
|
*
|
|
23
39
|
* @class
|
|
24
40
|
*/
|
|
41
|
+
|
|
25
42
|
class MapLibreGlWrapper {
|
|
26
43
|
registeredElements: {
|
|
27
44
|
[key: string]: {
|
|
28
45
|
layers: [string?];
|
|
29
46
|
sources: [string?];
|
|
30
47
|
images: [string?];
|
|
31
|
-
controls: [IControl?];
|
|
48
|
+
controls: [(IControl | unknown)?];
|
|
32
49
|
events: [EventArgArray?];
|
|
33
|
-
wrapperEvents: [
|
|
50
|
+
wrapperEvents: [WrapperEventArgArray?];
|
|
34
51
|
};
|
|
35
52
|
};
|
|
36
53
|
baseLayers: [string?];
|
|
37
54
|
firstSymbolLayer: string | undefined;
|
|
38
|
-
eventHandlers: {
|
|
55
|
+
eventHandlers: {
|
|
56
|
+
layerchange: {
|
|
57
|
+
handler: (ev: unknown) => void;
|
|
58
|
+
options?: object | string;
|
|
59
|
+
}[];
|
|
60
|
+
viewportchange: {
|
|
61
|
+
handler: (ev: unknown) => void;
|
|
62
|
+
}[];
|
|
63
|
+
};
|
|
39
64
|
wrapper: {
|
|
40
|
-
on:
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
65
|
+
on: (
|
|
66
|
+
eventName: string,
|
|
67
|
+
handler: (ev: unknown) => void,
|
|
68
|
+
options?: object | string,
|
|
69
|
+
componentId?: string
|
|
70
|
+
) => void;
|
|
71
|
+
off: (type: string, listener: (ev: unknown) => void) => void;
|
|
72
|
+
fire: (eventName: string, context?: unknown) => void;
|
|
73
|
+
layerState: LayerState[];
|
|
44
74
|
layerStateString: string;
|
|
45
75
|
oldLayerStateStrings: object;
|
|
46
|
-
buildLayerObject:
|
|
47
|
-
buildLayerObjects:
|
|
48
|
-
refreshLayerState:
|
|
76
|
+
buildLayerObject: (layer: ReturnType<Style['getLayer']>) => LayerState;
|
|
77
|
+
buildLayerObjects: () => LayerState[];
|
|
78
|
+
refreshLayerState: () => void;
|
|
49
79
|
viewportState: ViewportState;
|
|
50
80
|
viewportStateString: string;
|
|
51
81
|
oldViewportStateString: string;
|
|
52
|
-
getViewport:
|
|
53
|
-
|
|
82
|
+
getViewport: () => {
|
|
83
|
+
center: { lng: number; lat: number };
|
|
84
|
+
zoom: number;
|
|
85
|
+
bearing: number;
|
|
86
|
+
pitch: number;
|
|
87
|
+
};
|
|
88
|
+
refreshViewport: () => void;
|
|
54
89
|
};
|
|
55
|
-
initRegisteredElements:
|
|
56
|
-
addNativeMaplibreFunctionsAndProps:
|
|
90
|
+
initRegisteredElements: (componentId: string, force?: boolean | undefined) => void;
|
|
91
|
+
addNativeMaplibreFunctionsAndProps: () => void;
|
|
57
92
|
map: MapType;
|
|
58
93
|
style: object;
|
|
59
94
|
|
|
60
95
|
styleJson: object;
|
|
61
|
-
addLayer:
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
96
|
+
addLayer: (
|
|
97
|
+
layer:
|
|
98
|
+
| (LayerSpecification & {
|
|
99
|
+
source?: string | SourceSpecification | undefined;
|
|
100
|
+
})
|
|
101
|
+
| (CustomLayerInterface & {
|
|
102
|
+
source?: string | SourceSpecification | undefined;
|
|
103
|
+
}),
|
|
104
|
+
beforeId?: string | undefined,
|
|
105
|
+
componentId?: string | undefined
|
|
106
|
+
) => Map | undefined;
|
|
107
|
+
addSource: (id: string, source: SourceSpecification,componentId?: string | undefined) => Map | undefined;
|
|
108
|
+
addControl: (control: IControl | unknown, position?: ControlPosition | undefined,componentId?: string | undefined) => Map | undefined;
|
|
109
|
+
addImage: (
|
|
110
|
+
id: string,
|
|
111
|
+
image:
|
|
112
|
+
| HTMLImageElement
|
|
113
|
+
| ImageBitmap
|
|
114
|
+
| ImageData
|
|
115
|
+
| {
|
|
116
|
+
width: number;
|
|
117
|
+
height: number;
|
|
118
|
+
data: Uint8Array | Uint8ClampedArray;
|
|
119
|
+
}
|
|
120
|
+
| StyleImageInterface,
|
|
121
|
+
componentId?: string | undefined
|
|
122
|
+
) => void;
|
|
123
|
+
on: (
|
|
124
|
+
type: keyof MapLayerEventType | keyof MapEventType | string,
|
|
125
|
+
layerId: string | ((ev: unknown) => void),
|
|
126
|
+
handler?: ((ev: MapEventType & unknown) => Map | void) | string,
|
|
127
|
+
componentId?: string | undefined
|
|
128
|
+
) => Map | undefined;
|
|
129
|
+
cleanup: (componentId: string) => void;
|
|
130
|
+
|
|
131
|
+
constructor(props: {
|
|
132
|
+
mapOptions: MapOptionsType;
|
|
133
|
+
onReady: (map: MapType, context: unknown) => void;
|
|
134
|
+
}) {
|
|
69
135
|
// closure variable to safely point to the object context of the current MapLibreGlWrapper instance
|
|
70
|
-
|
|
136
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
137
|
+
const self = this;
|
|
71
138
|
|
|
72
139
|
// element registration and cleanup on a component level is experimental
|
|
73
140
|
this.registeredElements = {};
|
|
@@ -98,21 +165,21 @@ class MapLibreGlWrapper {
|
|
|
98
165
|
*/
|
|
99
166
|
on: (
|
|
100
167
|
eventName: string,
|
|
101
|
-
handler:
|
|
168
|
+
handler: (ev: unknown) => void,
|
|
102
169
|
options?: object | string,
|
|
103
170
|
componentId?: string
|
|
104
171
|
) => {
|
|
105
172
|
if (!self.eventHandlers[eventName]) return;
|
|
106
173
|
|
|
107
|
-
if (typeof options ===
|
|
174
|
+
if (typeof options === 'string') {
|
|
108
175
|
componentId = options;
|
|
109
176
|
options = {};
|
|
110
177
|
}
|
|
111
178
|
|
|
112
179
|
self.eventHandlers[eventName].push({ handler, options });
|
|
113
180
|
|
|
114
|
-
|
|
115
|
-
if (componentId && typeof componentId ===
|
|
181
|
+
const _arguments: WrapperEventArgArray = [eventName, handler];
|
|
182
|
+
if (componentId && typeof componentId === 'string') {
|
|
116
183
|
self.initRegisteredElements(componentId);
|
|
117
184
|
self.registeredElements[componentId].wrapperEvents.push(_arguments);
|
|
118
185
|
}
|
|
@@ -124,12 +191,12 @@ class MapLibreGlWrapper {
|
|
|
124
191
|
* @param {function} handler
|
|
125
192
|
* @returns {undefined}
|
|
126
193
|
*/
|
|
127
|
-
off: (eventName
|
|
194
|
+
off: (eventName, handler) => {
|
|
128
195
|
if (!self.eventHandlers[eventName]) return;
|
|
129
196
|
|
|
130
197
|
self.eventHandlers[eventName] = self.eventHandlers[eventName].filter(
|
|
131
|
-
(item:
|
|
132
|
-
if (!Object.is(item
|
|
198
|
+
(item: WrapperEventArgArray) => {
|
|
199
|
+
if (!Object.is(item[1], handler)) {
|
|
133
200
|
return item;
|
|
134
201
|
}
|
|
135
202
|
return false;
|
|
@@ -143,13 +210,17 @@ class MapLibreGlWrapper {
|
|
|
143
210
|
* @param {object} context
|
|
144
211
|
* @returns {undefined}
|
|
145
212
|
*/
|
|
146
|
-
fire: (eventName
|
|
213
|
+
fire: (eventName, context) => {
|
|
147
214
|
if (!self.eventHandlers[eventName]) return;
|
|
148
215
|
|
|
149
|
-
|
|
150
|
-
|
|
216
|
+
const scope = context || window;
|
|
217
|
+
const event = new Event(eventName);
|
|
151
218
|
|
|
152
|
-
self.eventHandlers[eventName].forEach(function (
|
|
219
|
+
self.eventHandlers[eventName].forEach(function (
|
|
220
|
+
item:
|
|
221
|
+
| MapLibreGlWrapper['eventHandlers']['layerchange'][0]
|
|
222
|
+
| MapLibreGlWrapper['eventHandlers']['viewportchange'][0]
|
|
223
|
+
) {
|
|
153
224
|
item.handler.call(scope, event, self);
|
|
154
225
|
});
|
|
155
226
|
},
|
|
@@ -160,7 +231,7 @@ class MapLibreGlWrapper {
|
|
|
160
231
|
/**
|
|
161
232
|
* Maps layerIds to layerState in JSON string form for quick deep comparisons
|
|
162
233
|
*/
|
|
163
|
-
layerStateString:
|
|
234
|
+
layerStateString: '',
|
|
164
235
|
/**
|
|
165
236
|
* Previous Version of layerStateString
|
|
166
237
|
*/
|
|
@@ -171,7 +242,7 @@ class MapLibreGlWrapper {
|
|
|
171
242
|
* @param {string} layer
|
|
172
243
|
* @returns object
|
|
173
244
|
*/
|
|
174
|
-
buildLayerObject: (layer:
|
|
245
|
+
buildLayerObject: (layer: ReturnType<Style['getLayer']>) => {
|
|
175
246
|
//if (self.baseLayers.indexOf(layer.id) === -1) {
|
|
176
247
|
//let paint = {};
|
|
177
248
|
//let values = layer.paint?._values;
|
|
@@ -192,7 +263,7 @@ class MapLibreGlWrapper {
|
|
|
192
263
|
return {
|
|
193
264
|
id: layer.id,
|
|
194
265
|
type: layer.type,
|
|
195
|
-
visible: layer.visibility ===
|
|
266
|
+
visible: layer.visibility === 'none' ? false : true,
|
|
196
267
|
baseLayer: self.baseLayers.indexOf(layer.id) !== -1,
|
|
197
268
|
//paint,
|
|
198
269
|
//layout,
|
|
@@ -213,56 +284,53 @@ class MapLibreGlWrapper {
|
|
|
213
284
|
* @returns array
|
|
214
285
|
*/
|
|
215
286
|
buildLayerObjects: () => {
|
|
216
|
-
// @ts-ignore
|
|
217
287
|
return self.map.style._order
|
|
218
288
|
.map((layerId: string) => {
|
|
219
|
-
return self.wrapper.buildLayerObject(
|
|
220
|
-
self.map.style._layers[layerId]
|
|
221
|
-
);
|
|
289
|
+
return self.wrapper.buildLayerObject(self.map.style._layers[layerId]);
|
|
222
290
|
})
|
|
223
|
-
.filter((n
|
|
291
|
+
.filter((n) => typeof n !== 'undefined');
|
|
224
292
|
},
|
|
225
293
|
/**
|
|
226
294
|
* Updates layer state info objects
|
|
227
295
|
*/
|
|
228
296
|
refreshLayerState: () => {
|
|
229
297
|
self.wrapper.layerState = self.wrapper.buildLayerObjects();
|
|
230
|
-
if (
|
|
231
|
-
|
|
232
|
-
self.wrapper.layerStateString
|
|
233
|
-
) {
|
|
234
|
-
self.wrapper.fire("layerchange");
|
|
235
|
-
self.wrapper.layerStateString = JSON.stringify(
|
|
236
|
-
self.wrapper.layerState
|
|
237
|
-
);
|
|
298
|
+
if (JSON.stringify(self.wrapper.layerState) !== self.wrapper.layerStateString) {
|
|
299
|
+
self.wrapper.fire('layerchange');
|
|
300
|
+
self.wrapper.layerStateString = JSON.stringify(self.wrapper.layerState);
|
|
238
301
|
}
|
|
239
302
|
},
|
|
240
303
|
/**
|
|
241
304
|
* Object containing information on the current viewport state
|
|
242
305
|
*/
|
|
243
306
|
viewportState: {
|
|
244
|
-
center:{lng:0,lat:0},
|
|
307
|
+
center: { lng: 0, lat: 0 },
|
|
245
308
|
zoom: 0,
|
|
246
|
-
bearing:0,
|
|
247
|
-
pitch:0
|
|
309
|
+
bearing: 0,
|
|
310
|
+
pitch: 0,
|
|
248
311
|
},
|
|
249
312
|
/**
|
|
250
313
|
* The same data as viewportState in JSON string form for quick deep comparisons
|
|
251
314
|
*/
|
|
252
|
-
viewportStateString:
|
|
315
|
+
viewportStateString: '{}',
|
|
253
316
|
/**
|
|
254
317
|
* Previous version of viewportStateString
|
|
255
318
|
*/
|
|
256
|
-
oldViewportStateString:
|
|
319
|
+
oldViewportStateString: '{}',
|
|
257
320
|
getViewport: () =>
|
|
258
|
-
typeof self.map.getCenter ===
|
|
321
|
+
typeof self.map.getCenter === 'function'
|
|
259
322
|
? {
|
|
260
323
|
center: (({ lng, lat }) => ({ lng, lat }))(self.map.getCenter()),
|
|
261
324
|
zoom: self.map.getZoom(),
|
|
262
325
|
bearing: self.map.getBearing(),
|
|
263
326
|
pitch: self.map.getPitch(),
|
|
264
|
-
|
|
265
|
-
: {
|
|
327
|
+
}
|
|
328
|
+
: {
|
|
329
|
+
center: { lng: 0, lat: 0 },
|
|
330
|
+
zoom: 0,
|
|
331
|
+
bearing: 0,
|
|
332
|
+
pitch: 0,
|
|
333
|
+
},
|
|
266
334
|
refreshViewport: () => {
|
|
267
335
|
self.wrapper.viewportState = self.wrapper.getViewport();
|
|
268
336
|
},
|
|
@@ -274,13 +342,10 @@ class MapLibreGlWrapper {
|
|
|
274
342
|
* @param {string} componentId
|
|
275
343
|
* @param {boolean} force
|
|
276
344
|
*/
|
|
277
|
-
this.initRegisteredElements = (
|
|
278
|
-
componentId: string,
|
|
279
|
-
force: boolean | undefined
|
|
280
|
-
) => {
|
|
345
|
+
this.initRegisteredElements = (componentId: string, force?: boolean | undefined) => {
|
|
281
346
|
if (
|
|
282
|
-
typeof self.registeredElements[componentId] ===
|
|
283
|
-
(typeof force !==
|
|
347
|
+
typeof self.registeredElements[componentId] === 'undefined' ||
|
|
348
|
+
(typeof force !== 'undefined' && force)
|
|
284
349
|
) {
|
|
285
350
|
self.registeredElements[componentId] = {
|
|
286
351
|
layers: [],
|
|
@@ -299,26 +364,22 @@ class MapLibreGlWrapper {
|
|
|
299
364
|
* @param {object} layer
|
|
300
365
|
* @param {string} beforeId
|
|
301
366
|
* @param {string} componentId
|
|
302
|
-
* @returns {undefined}
|
|
303
367
|
*/
|
|
304
|
-
this.addLayer = (layer
|
|
368
|
+
this.addLayer = (layer, beforeId, componentId) => {
|
|
305
369
|
if (!self.map.style) {
|
|
306
370
|
return;
|
|
307
371
|
}
|
|
308
|
-
if (
|
|
309
|
-
componentId &&
|
|
310
|
-
typeof componentId === "string" &&
|
|
311
|
-
typeof layer.id !== "undefined"
|
|
312
|
-
) {
|
|
372
|
+
if (componentId && typeof componentId === 'string' && typeof layer.id !== 'undefined') {
|
|
313
373
|
self.initRegisteredElements(componentId);
|
|
314
374
|
self.registeredElements[componentId].layers.push(layer.id);
|
|
315
375
|
|
|
316
|
-
if (typeof layer
|
|
376
|
+
if (layer?.source && typeof layer?.source !== 'string') {
|
|
317
377
|
self.registeredElements[componentId].sources.push(layer.id);
|
|
318
378
|
}
|
|
319
379
|
}
|
|
320
380
|
|
|
321
381
|
self.map.addLayer(layer, beforeId);
|
|
382
|
+
return self.map;
|
|
322
383
|
};
|
|
323
384
|
|
|
324
385
|
/**
|
|
@@ -330,20 +391,17 @@ class MapLibreGlWrapper {
|
|
|
330
391
|
* @param {string} componentId
|
|
331
392
|
* @returns {undefined}
|
|
332
393
|
*/
|
|
333
|
-
this.addSource = (sourceId
|
|
394
|
+
this.addSource = (sourceId, source, componentId) => {
|
|
334
395
|
if (!self.map.style) {
|
|
335
396
|
return;
|
|
336
397
|
}
|
|
337
|
-
if (
|
|
338
|
-
componentId &&
|
|
339
|
-
typeof componentId === "string" &&
|
|
340
|
-
typeof sourceId !== "undefined"
|
|
341
|
-
) {
|
|
398
|
+
if (componentId && typeof componentId === 'string' && typeof sourceId !== 'undefined') {
|
|
342
399
|
self.initRegisteredElements(componentId);
|
|
343
400
|
self.registeredElements[componentId].sources.push(sourceId);
|
|
344
401
|
}
|
|
345
402
|
|
|
346
403
|
self.map.addSource(sourceId, source);
|
|
404
|
+
return self.map;
|
|
347
405
|
};
|
|
348
406
|
|
|
349
407
|
/**
|
|
@@ -355,23 +413,16 @@ class MapLibreGlWrapper {
|
|
|
355
413
|
* @param {string} componentId
|
|
356
414
|
* @returns {undefined}
|
|
357
415
|
*/
|
|
358
|
-
this.addImage = (id
|
|
416
|
+
this.addImage = (id, image, componentId) => {
|
|
359
417
|
if (!self.map.style) {
|
|
360
418
|
return;
|
|
361
419
|
}
|
|
362
|
-
if (typeof
|
|
363
|
-
return self.addImage.call(self, id, image, undefined, ref);
|
|
364
|
-
}
|
|
365
|
-
if (
|
|
366
|
-
componentId &&
|
|
367
|
-
typeof componentId === "string" &&
|
|
368
|
-
typeof id !== "undefined"
|
|
369
|
-
) {
|
|
420
|
+
if (componentId && typeof componentId === 'string' && typeof id !== 'undefined') {
|
|
370
421
|
self.initRegisteredElements(componentId);
|
|
371
422
|
self.registeredElements[componentId].images.push(id);
|
|
372
423
|
}
|
|
373
424
|
|
|
374
|
-
self.map.addImage(id, image
|
|
425
|
+
self.map.addImage(id, image);
|
|
375
426
|
};
|
|
376
427
|
|
|
377
428
|
/**
|
|
@@ -381,15 +432,14 @@ class MapLibreGlWrapper {
|
|
|
381
432
|
* @param {string} layerId
|
|
382
433
|
* @param {function} handler
|
|
383
434
|
* @param {string} componentId
|
|
384
|
-
* @returns {undefined}
|
|
385
435
|
*/
|
|
386
436
|
this.on = (
|
|
387
|
-
type:
|
|
388
|
-
layerId: string,
|
|
389
|
-
handler:
|
|
390
|
-
componentId
|
|
437
|
+
type: keyof MapLayerEventType | keyof MapEventType,
|
|
438
|
+
layerId: string | ((ev: unknown) => void),
|
|
439
|
+
handler: (ev: MapEventType & unknown) => Map | void,
|
|
440
|
+
componentId?: string
|
|
391
441
|
) => {
|
|
392
|
-
if (typeof handler ===
|
|
442
|
+
if (typeof handler === 'string' && typeof layerId === 'function') {
|
|
393
443
|
return self.on.call(self, type, undefined, layerId, handler);
|
|
394
444
|
}
|
|
395
445
|
|
|
@@ -398,13 +448,15 @@ class MapLibreGlWrapper {
|
|
|
398
448
|
_arguments = [type, handler];
|
|
399
449
|
}
|
|
400
450
|
|
|
401
|
-
if (componentId && typeof componentId ===
|
|
451
|
+
if (componentId && typeof componentId === 'string') {
|
|
402
452
|
self.initRegisteredElements(componentId);
|
|
403
453
|
self.registeredElements[componentId].events.push(_arguments);
|
|
404
454
|
}
|
|
405
455
|
|
|
406
|
-
// @ts-
|
|
456
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
457
|
+
// @ts-ignore
|
|
407
458
|
self.map.on(..._arguments);
|
|
459
|
+
return self.map;
|
|
408
460
|
};
|
|
409
461
|
|
|
410
462
|
/**
|
|
@@ -414,13 +466,14 @@ class MapLibreGlWrapper {
|
|
|
414
466
|
* @param {string} position
|
|
415
467
|
* @param {string} componentId
|
|
416
468
|
*/
|
|
417
|
-
this.addControl = (control
|
|
418
|
-
if (componentId && typeof componentId ===
|
|
469
|
+
this.addControl = (control, position, componentId) => {
|
|
470
|
+
if (componentId && typeof componentId === 'string') {
|
|
419
471
|
self.initRegisteredElements(componentId);
|
|
420
472
|
self.registeredElements[componentId].controls.push(control);
|
|
421
473
|
}
|
|
422
474
|
|
|
423
|
-
self.map.addControl(control, position);
|
|
475
|
+
self.map.addControl(control as IControl, position);
|
|
476
|
+
return self.map;
|
|
424
477
|
};
|
|
425
478
|
|
|
426
479
|
/**
|
|
@@ -429,68 +482,60 @@ class MapLibreGlWrapper {
|
|
|
429
482
|
* @param {string} componentId
|
|
430
483
|
*/
|
|
431
484
|
this.cleanup = (componentId: string) => {
|
|
432
|
-
if (
|
|
433
|
-
self.map.style &&
|
|
434
|
-
typeof self.registeredElements[componentId] !== "undefined"
|
|
435
|
-
) {
|
|
485
|
+
if (self.map.style && typeof self.registeredElements[componentId] !== 'undefined') {
|
|
436
486
|
// cleanup layers
|
|
437
|
-
self.registeredElements[componentId].layers.forEach((item:
|
|
487
|
+
self.registeredElements[componentId].layers.forEach((item: string) => {
|
|
438
488
|
if (self.map.style.getLayer(item)) {
|
|
439
489
|
self.map.style.removeLayer(item);
|
|
440
490
|
}
|
|
441
491
|
});
|
|
442
492
|
|
|
443
493
|
// cleanup sources
|
|
444
|
-
self.registeredElements[componentId].sources.forEach((item:
|
|
494
|
+
self.registeredElements[componentId].sources.forEach((item: string) => {
|
|
445
495
|
if (self.map.style.getSource(item)) {
|
|
446
496
|
self.map.style.removeSource(item);
|
|
447
497
|
}
|
|
448
498
|
});
|
|
449
499
|
|
|
450
500
|
// cleanup images
|
|
451
|
-
self.registeredElements[componentId].images.forEach((item:
|
|
501
|
+
self.registeredElements[componentId].images.forEach((item: string) => {
|
|
452
502
|
if (self.map.hasImage(item)) {
|
|
453
503
|
self.map.style.removeImage(item);
|
|
454
504
|
}
|
|
455
505
|
});
|
|
456
506
|
|
|
457
507
|
// cleanup events
|
|
458
|
-
self.registeredElements[componentId].events.forEach((item:
|
|
508
|
+
self.registeredElements[componentId].events.forEach((item: EventArgArray) => {
|
|
509
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
459
510
|
// @ts-ignore
|
|
460
511
|
self.map.off(...item);
|
|
461
512
|
});
|
|
462
513
|
|
|
463
514
|
// cleanup controls
|
|
464
|
-
self.registeredElements[componentId].controls.forEach((item:
|
|
465
|
-
self.map.removeControl(item);
|
|
515
|
+
self.registeredElements[componentId].controls.forEach((item: IControl | unknown) => {
|
|
516
|
+
self.map.removeControl(item as IControl);
|
|
466
517
|
});
|
|
467
518
|
|
|
468
519
|
// cleanup wrapper events
|
|
469
|
-
self.registeredElements[componentId].wrapperEvents.forEach(
|
|
470
|
-
(item
|
|
471
|
-
|
|
472
|
-
}
|
|
473
|
-
);
|
|
520
|
+
self.registeredElements[componentId].wrapperEvents.forEach((item: WrapperEventArgArray) => {
|
|
521
|
+
self.wrapper.off(...item);
|
|
522
|
+
});
|
|
474
523
|
|
|
475
524
|
self.initRegisteredElements(componentId, true);
|
|
476
525
|
}
|
|
477
526
|
};
|
|
478
527
|
|
|
479
528
|
// add style prop functions that require map._update to be called afterwards
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
529
|
+
const updatingStyleFunctions = [
|
|
530
|
+
'moveLayer',
|
|
531
|
+
'removeLayer',
|
|
532
|
+
'removeSource',
|
|
533
|
+
'setPaintProperty',
|
|
534
|
+
'setLayoutProperty',
|
|
486
535
|
];
|
|
487
536
|
updatingStyleFunctions.forEach((item) => {
|
|
488
537
|
this[item] = (...props: any[]) => {
|
|
489
|
-
if (
|
|
490
|
-
self.map &&
|
|
491
|
-
self.map.style &&
|
|
492
|
-
typeof self.map.style[item] === "function"
|
|
493
|
-
) {
|
|
538
|
+
if (self.map && self.map.style && typeof self.map.style[item] === 'function') {
|
|
494
539
|
self.map.style[item](...props);
|
|
495
540
|
}
|
|
496
541
|
return self.map._update ? self.map._update(true) : undefined;
|
|
@@ -498,13 +543,13 @@ class MapLibreGlWrapper {
|
|
|
498
543
|
});
|
|
499
544
|
|
|
500
545
|
// add style prop functions
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
546
|
+
const styleFunctions = [
|
|
547
|
+
'getLayer',
|
|
548
|
+
'getSource',
|
|
549
|
+
'listImages',
|
|
550
|
+
'getPaintProperty',
|
|
551
|
+
'getLayoutProperty',
|
|
552
|
+
'removeImage',
|
|
508
553
|
];
|
|
509
554
|
styleFunctions.forEach((item) => {
|
|
510
555
|
this[item] = (...props: any[]) => {
|
|
@@ -517,57 +562,55 @@ class MapLibreGlWrapper {
|
|
|
517
562
|
|
|
518
563
|
this.addNativeMaplibreFunctionsAndProps = () => {
|
|
519
564
|
// add MapLibre-gl functions
|
|
520
|
-
Object.getOwnPropertyNames(Object.getPrototypeOf(this.map)).forEach(
|
|
521
|
-
(item)
|
|
522
|
-
|
|
523
|
-
this[item] = (...props: any[]) => self.map[item](...props);
|
|
524
|
-
}
|
|
565
|
+
Object.getOwnPropertyNames(Object.getPrototypeOf(this.map)).forEach((item) => {
|
|
566
|
+
if (typeof this[item] === 'undefined') {
|
|
567
|
+
this[item] = (...props: any[]) => self.map[item](...props);
|
|
525
568
|
}
|
|
526
|
-
);
|
|
569
|
+
});
|
|
527
570
|
|
|
528
571
|
// add MapLibre-gl properties
|
|
529
572
|
Object.keys(this.map).forEach((item) => {
|
|
530
|
-
if (typeof this[item] ===
|
|
573
|
+
if (typeof this[item] === 'undefined') {
|
|
531
574
|
this[item] = self.map[item];
|
|
532
575
|
}
|
|
533
576
|
});
|
|
534
577
|
};
|
|
535
578
|
|
|
536
579
|
// add functions that are missing on the MapLibre instances prototype
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
580
|
+
const missingFunctions = [
|
|
581
|
+
'getZoom',
|
|
582
|
+
'setZoom',
|
|
583
|
+
'getCenter',
|
|
584
|
+
'setCenter',
|
|
585
|
+
'getBearing',
|
|
586
|
+
'setBearing',
|
|
587
|
+
'getPitch',
|
|
588
|
+
'setPitch',
|
|
589
|
+
'jumpTo',
|
|
590
|
+
'flyTo',
|
|
591
|
+
'panTo',
|
|
592
|
+
'panBy',
|
|
593
|
+
'panBy',
|
|
594
|
+
'zoomTo',
|
|
595
|
+
'zoomIn',
|
|
596
|
+
'zoomOut',
|
|
597
|
+
'getPadding',
|
|
598
|
+
'setPadding',
|
|
599
|
+
'rotateTo',
|
|
600
|
+
'resetNorth',
|
|
601
|
+
'resetNorthPitch',
|
|
602
|
+
'snapToNorth',
|
|
603
|
+
'cameraForBounds',
|
|
604
|
+
'fitBounds',
|
|
605
|
+
'fitScreenCoordinates',
|
|
606
|
+
'getFreeCameraOptions',
|
|
607
|
+
'setFreeCameraOptions',
|
|
608
|
+
'easeTo',
|
|
609
|
+
'stop',
|
|
567
610
|
];
|
|
568
611
|
missingFunctions.forEach((item) => {
|
|
569
612
|
this[item] = (...props: any[]) => {
|
|
570
|
-
if (typeof self.map[item] ===
|
|
613
|
+
if (typeof self.map[item] === 'function') {
|
|
571
614
|
return self.map[item].call(self.map, ...props);
|
|
572
615
|
}
|
|
573
616
|
return undefined;
|
|
@@ -575,24 +618,24 @@ class MapLibreGlWrapper {
|
|
|
575
618
|
});
|
|
576
619
|
|
|
577
620
|
// initialize the MapLibre-gl instance
|
|
578
|
-
|
|
621
|
+
const initializeMapLibre = async () => {
|
|
579
622
|
// if mapOptions style URL is given and if it is not a mapbox URL fetch the json and initialize the mapbox object
|
|
580
623
|
if (
|
|
581
|
-
typeof props.mapOptions.style ===
|
|
582
|
-
props.mapOptions.style.indexOf(
|
|
624
|
+
typeof props.mapOptions.style === 'string' &&
|
|
625
|
+
props.mapOptions.style.indexOf('mapbox://') === -1
|
|
583
626
|
) {
|
|
584
627
|
await fetch(props.mapOptions.style)
|
|
585
628
|
.then((response) => {
|
|
586
629
|
if (response.ok) {
|
|
587
630
|
return response.json();
|
|
588
631
|
} else {
|
|
589
|
-
throw new Error(
|
|
632
|
+
throw new Error('error loading map style.json');
|
|
590
633
|
}
|
|
591
634
|
})
|
|
592
635
|
.then((styleJson) => {
|
|
593
636
|
styleJson.layers.forEach((item: any) => {
|
|
594
637
|
self.baseLayers.push(item.id);
|
|
595
|
-
if (!self.firstSymbolLayer && item.type ===
|
|
638
|
+
if (!self.firstSymbolLayer && item.type === 'symbol') {
|
|
596
639
|
self.firstSymbolLayer = item.id;
|
|
597
640
|
}
|
|
598
641
|
});
|
|
@@ -605,28 +648,27 @@ class MapLibreGlWrapper {
|
|
|
605
648
|
}
|
|
606
649
|
|
|
607
650
|
self.map = new Map(props.mapOptions) as MapType;
|
|
608
|
-
|
|
609
|
-
window._map = self.map;
|
|
651
|
+
window['_map'] = self.map;
|
|
610
652
|
|
|
611
653
|
self.addNativeMaplibreFunctionsAndProps();
|
|
612
654
|
self.wrapper.refreshViewport();
|
|
613
|
-
self.wrapper.fire(
|
|
655
|
+
self.wrapper.fire('viewportchange');
|
|
614
656
|
|
|
615
|
-
self.map.on(
|
|
657
|
+
self.map.on('load', () => {
|
|
616
658
|
self.addNativeMaplibreFunctionsAndProps();
|
|
617
659
|
});
|
|
618
660
|
|
|
619
|
-
self.map.on(
|
|
661
|
+
self.map.on('move', () => {
|
|
620
662
|
self.wrapper.viewportState = self.wrapper.getViewport();
|
|
621
|
-
self.wrapper.fire(
|
|
663
|
+
self.wrapper.fire('viewportchange');
|
|
622
664
|
});
|
|
623
|
-
self.map.on(
|
|
665
|
+
self.map.on('idle', () => {
|
|
624
666
|
self.wrapper.refreshLayerState();
|
|
625
667
|
});
|
|
626
|
-
self.map.on(
|
|
668
|
+
self.map.on('data', () => {
|
|
627
669
|
self.wrapper.refreshLayerState();
|
|
628
670
|
});
|
|
629
|
-
if (typeof props.onReady ===
|
|
671
|
+
if (typeof props.onReady === 'function') {
|
|
630
672
|
props.onReady(self.map, self);
|
|
631
673
|
}
|
|
632
674
|
};
|