@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.
Files changed (294) hide show
  1. package/.editorconfig +1 -1
  2. package/.eslintrc.js +9 -6
  3. package/.github/workflows/check-catalogue-metadata-schema.yml +19 -0
  4. package/CHANGELOG.md +27 -2
  5. package/coverage/clover.xml +671 -1032
  6. package/coverage/coverage-final.json +24 -21
  7. package/coverage/lcov-report/index.html +112 -82
  8. package/coverage/lcov-report/src/components/MapLibreMap/MapLibreMap.tsx.html +24 -24
  9. package/coverage/lcov-report/src/components/MapLibreMap/index.html +1 -1
  10. package/coverage/lcov-report/src/components/MlCenterPosition/MlCenterPosition.tsx.html +5 -5
  11. package/coverage/lcov-report/src/components/MlCenterPosition/index.html +1 -1
  12. package/coverage/lcov-report/src/components/MlCreatePdfButton/MlCreatePdfButton.tsx.html +2 -2
  13. package/coverage/lcov-report/src/components/MlCreatePdfButton/index.html +1 -1
  14. package/coverage/lcov-report/src/components/MlCreatePdfForm/MlCreatePdfForm.cy.tsx.html +1 -1
  15. package/coverage/lcov-report/src/components/MlCreatePdfForm/MlCreatePdfForm.tsx.html +1 -1
  16. package/coverage/lcov-report/src/components/MlCreatePdfForm/index.html +1 -1
  17. package/coverage/lcov-report/src/components/MlFeatureEditor/MlFeatureEditor.tsx.html +2 -5
  18. package/coverage/lcov-report/src/components/MlFeatureEditor/index.html +1 -1
  19. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.tsx.html +1 -1
  20. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/index.html +1 -1
  21. package/coverage/lcov-report/src/components/MlFollowGps/MlFollowGps.tsx.html +1 -1
  22. package/coverage/lcov-report/src/components/MlFollowGps/index.html +1 -1
  23. package/coverage/lcov-report/src/components/MlGeoJsonLayer/MlGeoJsonLayer.tsx.html +40 -19
  24. package/coverage/lcov-report/src/components/MlGeoJsonLayer/index.html +1 -1
  25. package/coverage/lcov-report/src/components/MlGeoJsonLayer/story_utils/MlGeoJsonLayer.lineStyler.js.html +1 -1
  26. package/coverage/lcov-report/src/components/MlGeoJsonLayer/story_utils/MlGeoJsonLayer.polygonStyler.js.html +1 -1
  27. package/coverage/lcov-report/src/components/MlGeoJsonLayer/story_utils/MlGeojsonLayerCircleStyler.tsx.html +112 -0
  28. package/coverage/lcov-report/src/components/MlGeoJsonLayer/story_utils/MlGeojsonLayerHeatMapStyler.tsx.html +115 -0
  29. package/coverage/lcov-report/src/components/MlGeoJsonLayer/story_utils/index.html +34 -4
  30. package/coverage/lcov-report/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.tsx.html +1 -1
  31. package/coverage/lcov-report/src/components/MlGeojsonLayerWithSource/index.html +1 -1
  32. package/coverage/lcov-report/src/components/MlGpxViewer/MlGpxViewer.tsx.html +394 -0
  33. package/coverage/lcov-report/src/components/{MlGPXViewer → MlGpxViewer}/index.html +23 -38
  34. package/coverage/lcov-report/src/components/MlImageMarkerLayer/MlImageMarkerLayer.tsx.html +63 -285
  35. package/coverage/lcov-report/src/components/MlImageMarkerLayer/index.html +21 -21
  36. package/coverage/lcov-report/src/components/MlLayer/MlLayer.tsx.html +1 -1
  37. package/coverage/lcov-report/src/components/MlLayer/index.html +1 -1
  38. package/coverage/lcov-report/src/components/MlLayerMagnify/MlLayerMagnify.tsx.html +58 -76
  39. package/coverage/lcov-report/src/components/MlLayerMagnify/index.html +1 -1
  40. package/coverage/lcov-report/src/components/MlLayerSwipe/MlLayerSwipe.tsx.html +58 -61
  41. package/coverage/lcov-report/src/components/MlLayerSwipe/index.html +11 -11
  42. package/coverage/lcov-report/src/components/MlLayerSwitcher/MlLayerSwitcher.js.html +1 -1
  43. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/LayerBox.js.html +30 -21
  44. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/index.html +1 -1
  45. package/coverage/lcov-report/src/components/MlLayerSwitcher/index.html +1 -1
  46. package/coverage/lcov-report/src/components/MlMarker/MlMarker.tsx.html +1 -1
  47. package/coverage/lcov-report/src/components/MlMarker/index.html +1 -1
  48. package/coverage/lcov-report/src/components/MlMeasureTool/MlMeasureTool.tsx.html +1 -1
  49. package/coverage/lcov-report/src/components/MlMeasureTool/index.html +1 -1
  50. package/coverage/lcov-report/src/components/MlNavigationCompass/MlNavigationCompass.tsx.html +1 -1
  51. package/coverage/lcov-report/src/components/MlNavigationCompass/index.html +1 -1
  52. package/coverage/lcov-report/src/components/MlNavigationTools/MlNavigationTools.tsx.html +1 -1
  53. package/coverage/lcov-report/src/components/MlNavigationTools/index.html +1 -1
  54. package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.js.html +1 -1
  55. package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.stories_.js.html +1 -1
  56. package/coverage/lcov-report/src/components/MlOsmLayer/index.html +1 -1
  57. package/coverage/lcov-report/src/components/MlScaleReference/MlScaleReference.js.html +1 -1
  58. package/coverage/lcov-report/src/components/MlScaleReference/index.html +1 -1
  59. package/coverage/lcov-report/src/components/MlShareMapState/MlShareMapState.js.html +1 -1
  60. package/coverage/lcov-report/src/components/MlShareMapState/index.html +1 -1
  61. package/coverage/lcov-report/src/components/MlSketchTool/LayerList/ColorPicker.tsx.html +1 -1
  62. package/coverage/lcov-report/src/components/MlSketchTool/LayerList/LayerList.tsx.html +1 -1
  63. package/coverage/lcov-report/src/components/MlSketchTool/LayerList/LayerListItem.tsx.html +1 -1
  64. package/coverage/lcov-report/src/components/MlSketchTool/LayerList/LayerPropertyForm.tsx.html +1 -1
  65. package/coverage/lcov-report/src/components/MlSketchTool/LayerList/index.html +1 -1
  66. package/coverage/lcov-report/src/components/MlSketchTool/MlSketchTool.tsx.html +1 -1
  67. package/coverage/lcov-report/src/components/MlSketchTool/index.html +1 -1
  68. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.tsx.html +514 -0
  69. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/index.html +21 -21
  70. package/coverage/lcov-report/src/components/MlThreeJsLayer/MlThreeJsLayer.js.html +1 -1
  71. package/coverage/lcov-report/src/components/MlThreeJsLayer/index.html +1 -1
  72. package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.tsx.html +20 -206
  73. package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/index.html +1 -1
  74. package/coverage/lcov-report/src/components/MlUseMapDebugger/MlUseMapDebugger.js.html +1 -1
  75. package/coverage/lcov-report/src/components/MlUseMapDebugger/index.html +1 -1
  76. package/coverage/lcov-report/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx.html +10 -7
  77. package/coverage/lcov-report/src/components/MlVectorTileLayer/index.html +5 -5
  78. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js.html +1 -1
  79. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/index.html +1 -1
  80. package/coverage/lcov-report/src/components/MlWmsLayer/MlWmsLayer.tsx.html +111 -57
  81. package/coverage/lcov-report/src/components/MlWmsLayer/index.html +19 -19
  82. package/coverage/lcov-report/src/components/MlWmsLoader/MlWmsLoader.tsx.html +201 -144
  83. package/coverage/lcov-report/src/components/MlWmsLoader/index.html +9 -9
  84. package/coverage/lcov-report/src/contexts/MapContext.tsx.html +23 -23
  85. package/coverage/lcov-report/src/contexts/SimpleDataContext.js.html +1 -1
  86. package/coverage/lcov-report/src/contexts/SimpleDataProvider.js.html +1 -1
  87. package/coverage/lcov-report/src/contexts/index.html +1 -1
  88. package/coverage/lcov-report/src/hooks/index.html +50 -50
  89. package/coverage/lcov-report/src/hooks/useCameraFollowPath/index.html +1 -1
  90. package/coverage/lcov-report/src/hooks/useCameraFollowPath/useCameraFollowPath.tsx.html +1 -1
  91. package/coverage/lcov-report/src/hooks/useExportMap/index.html +1 -1
  92. package/coverage/lcov-report/src/hooks/useExportMap/index.ts.html +1 -1
  93. package/coverage/lcov-report/src/hooks/useExportMap/lib.ts.html +1 -1
  94. package/coverage/lcov-report/src/hooks/useGpx/index.html +116 -0
  95. package/coverage/lcov-report/src/hooks/useGpx/useGpx.tsx.html +295 -0
  96. package/coverage/lcov-report/src/hooks/useLayer.ts.html +132 -66
  97. package/coverage/lcov-report/src/hooks/useLayerEvent.js.html +1 -1
  98. package/coverage/lcov-report/src/hooks/useLayerHoverPopup/index.html +116 -0
  99. package/coverage/lcov-report/src/hooks/useLayerHoverPopup/useLayerHoverPopup.tsx.html +331 -0
  100. package/coverage/lcov-report/src/hooks/useMap.ts.html +47 -47
  101. package/coverage/lcov-report/src/hooks/useMapState.ts.html +54 -54
  102. package/coverage/lcov-report/src/hooks/useSource.ts.html +57 -57
  103. package/coverage/lcov-report/src/hooks/{useWms.js.html → useWms.ts.html} +54 -15
  104. package/coverage/lcov-report/src/index.html +1 -1
  105. package/coverage/lcov-report/src/index.ts.html +6 -6
  106. package/coverage/lcov.info +1284 -1959
  107. package/dist/components/MapLibreMap/lib/MapLibreGlWrapper.d.ts +51 -25
  108. package/dist/components/MlCenterPosition/MlCenterPosition.d.ts +3 -2
  109. package/dist/components/MlCenterPosition/MlCenterPosition.stories.d.ts +35 -16
  110. package/dist/components/MlComponentTemplate/MlComponentTemplate.d.ts +1 -1
  111. package/dist/components/MlComponentTemplate/MlComponentTemplate.stories.d.ts +12 -9
  112. package/dist/components/MlCreatePdfButton/MlCreatePdfButton.d.ts +1 -1
  113. package/dist/components/MlCreatePdfButton/MlCreatePdfButton.stories.d.ts +12 -9
  114. package/dist/components/MlGPXViewer/util/GeoJsonContext.d.ts +1 -1
  115. package/dist/components/MlGeoJsonLayer/MlGeoJsonLayer.d.ts +22 -11
  116. package/dist/components/MlGeoJsonLayer/MlGeoJsonLayer.stories.d.ts +4 -95
  117. package/dist/components/MlGeoJsonLayer/story_utils/MlGeojsonLayerCircleStyler.d.ts +3 -0
  118. package/dist/components/MlGeoJsonLayer/story_utils/MlGeojsonLayerHeatMapStyler.d.ts +3 -0
  119. package/dist/components/MlGpxViewer/MlGpxViewer.d.ts +30 -0
  120. package/dist/components/MlGpxViewer/MlGpxViewer.stories.d.ts +17 -0
  121. package/dist/components/MlGpxViewer/MlGpxViewer.test.d.ts +1 -0
  122. package/dist/components/MlGpxViewer/util/GeoJsonContext.d.ts +10 -0
  123. package/dist/components/MlGpxViewer/util/GeoJsonProvider.d.ts +4 -0
  124. package/dist/components/MlGpxViewer/util/MetadataDrawer.d.ts +7 -0
  125. package/dist/components/MlGpxViewer/util/MlGpxDemoLoader.d.ts +10 -0
  126. package/dist/components/MlGpxViewer/util/MlGpxViewerInstructions.d.ts +3 -0
  127. package/dist/components/MlImageMarkerLayer/MlImageMarkerLayer.d.ts +11 -2
  128. package/dist/components/MlImageMarkerLayer/MlImageMarkerLayer.stories.d.ts +7 -9
  129. package/dist/components/MlLayerMagnify/MlLayerMagnify.d.ts +8 -2
  130. package/dist/components/MlLayerMagnify/MlLayerMagnify.stories.d.ts +13 -9
  131. package/dist/components/MlLayerSwipe/MlLayerSwipe.d.ts +13 -3
  132. package/dist/components/MlLayerSwipe/MlLayerSwipe.stories.d.ts +12 -10
  133. package/dist/components/MlSpatialElevationProfile/MlSpatialElevationProfile.d.ts +33 -14
  134. package/dist/components/MlSpatialElevationProfile/MlSpatialElevationProfile.stories.d.ts +18 -15
  135. package/dist/components/MlSpatialElevationProfile/util/getElevationData.d.ts +14 -0
  136. package/dist/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.d.ts +3 -67
  137. package/dist/components/MlWmsLayer/MlWmsLayer.d.ts +7 -4
  138. package/dist/components/MlWmsLoader/MlWmsLoader.d.ts +17 -10
  139. package/dist/components/MlWmsLoader/MlWmsLoader.stories.d.ts +23 -12
  140. package/dist/components/MlWmsLoader/utils/MlWmsLoaderInstructions.d.ts +3 -0
  141. package/dist/components/MlWmsLoader/utils/WMSLinks.d.ts +6 -0
  142. package/dist/decorators/ThemeWrapper.d.ts +3 -1
  143. package/dist/hooks/useGpx/lib/gpxConverter.d.ts +11 -0
  144. package/dist/hooks/useGpx/useGpx.d.ts +26 -0
  145. package/dist/hooks/useGpx/useGpx.stories.d.ts +10 -0
  146. package/dist/hooks/useLayer.d.ts +13 -7
  147. package/dist/hooks/useLayerHoverPopup/useLayerHoverPopup.d.ts +23 -0
  148. package/dist/hooks/useLayerHoverPopup/useLayerHoverPopup.stories.d.ts +10 -0
  149. package/dist/hooks/useMap.d.ts +1 -1
  150. package/dist/hooks/useMap.test.d.ts +1 -0
  151. package/dist/hooks/useSource.d.ts +2 -2
  152. package/dist/hooks/useWms.d.ts +24 -16
  153. package/dist/index.d.ts +5 -5
  154. package/dist/index.esm.js +9310 -14006
  155. package/dist/index.esm.js.map +1 -1
  156. package/dist/setupTests.d.ts +6 -5
  157. package/dist/ui_components/Dropzone.d.ts +5 -0
  158. package/dist/ui_components/ImageLoader.d.ts +8 -1
  159. package/dist/ui_components/LoadingOverlayContext.d.ts +11 -11
  160. package/dist/ui_components/Sidebar.d.ts +7 -6
  161. package/dist/ui_components/Tooltip.d.ts +1 -1
  162. package/dist/ui_components/TopToolbar.d.ts +4 -3
  163. package/dist/ui_components/UploadButton.d.ts +6 -0
  164. package/dist/util/BubbleForInstructions.d.ts +2 -0
  165. package/dist/util/Instructions.d.ts +13 -0
  166. package/package.json +195 -191
  167. package/{src/components/MlImageMarkerLayer → public}/assets/wg-marker.png +0 -0
  168. package/scripts/build-catalogue-meta.js +35 -11
  169. package/src/components/MapLibreMap/lib/MapLibreGlWrapper.ts +230 -188
  170. package/src/components/MlCenterPosition/MlCenterPosition.meta_.json +1 -2
  171. package/src/components/MlCenterPosition/MlCenterPosition.stories.tsx +20 -0
  172. package/src/components/MlCenterPosition/MlCenterPosition.tsx +4 -4
  173. package/src/components/MlComponentTemplate/MlComponentTemplate.meta_.json +1 -2
  174. package/src/components/MlComponentTemplate/{MlComponentTemplate.stories.js → MlComponentTemplate.stories.tsx} +2 -2
  175. package/src/components/MlComponentTemplate/MlComponentTemplate.tsx +1 -1
  176. package/src/components/MlCreatePdfButton/MlCreatePdfButton.meta_.json +1 -2
  177. package/src/components/MlCreatePdfButton/{MlCreatePdfButton.stories.js → MlCreatePdfButton.stories.tsx} +1 -1
  178. package/src/components/MlCreatePdfButton/MlCreatePdfButton.tsx +1 -1
  179. package/src/components/MlCreatePdfForm/MlCreatePdfForm.meta.json +1 -2
  180. package/src/components/MlCreatePdfForm/lib/PdfForm.tsx +25 -2
  181. package/src/components/MlFeatureEditor/MlFeatureEditor.meta.json +1 -2
  182. package/src/components/MlFeatureEditor/MlFeatureEditor.tsx +0 -1
  183. package/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.meta.json +1 -2
  184. package/src/components/MlFollowGps/MlFollowGps.meta.json +1 -2
  185. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.meta.json +1 -2
  186. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.stories.tsx +89 -0
  187. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.tsx +24 -17
  188. package/src/components/MlGeoJsonLayer/assets/earthquake.json +109937 -0
  189. package/src/components/MlGeoJsonLayer/assets/wg_locations.json +65 -0
  190. package/src/components/MlGeoJsonLayer/story_utils/MlGeojsonLayerCircleStyler.tsx +9 -0
  191. package/src/components/MlGeoJsonLayer/story_utils/MlGeojsonLayerHeatMapStyler.tsx +10 -0
  192. package/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.meta_.json +1 -2
  193. package/src/components/{MlGPXViewer/MlGPXViewer.doc.de.md → MlGpxViewer/MlGpxViewer.doc.de.md} +0 -0
  194. package/src/components/{MlGPXViewer/MlGPXViewer.doc.en.md → MlGpxViewer/MlGpxViewer.doc.en.md} +0 -0
  195. package/src/components/{MlGPXViewer/MlGPXViewer.meta.json → MlGpxViewer/MlGpxViewer.meta.json} +2 -3
  196. package/src/components/MlGpxViewer/MlGpxViewer.stories.tsx +109 -0
  197. package/src/components/MlGpxViewer/MlGpxViewer.test.js +53 -0
  198. package/src/components/MlGpxViewer/MlGpxViewer.tsx +103 -0
  199. package/src/components/{MlGPXViewer → MlGpxViewer}/util/GeoJsonContext.ts +0 -0
  200. package/src/components/{MlGPXViewer → MlGpxViewer}/util/GeoJsonProvider.tsx +0 -0
  201. package/src/components/MlGpxViewer/util/MetadataDrawer.tsx +38 -0
  202. package/src/components/MlGpxViewer/util/MlGpxDemoLoader.tsx +128 -0
  203. package/src/components/MlGpxViewer/util/MlGpxViewerInstructions.tsx +68 -0
  204. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.meta_.json +1 -2
  205. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.stories.tsx +41 -0
  206. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.test.js +27 -8
  207. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.tsx +41 -115
  208. package/src/components/MlLayer/MlLayer.meta_.json +1 -2
  209. package/src/components/MlLayerMagnify/MlLayerMagnify.meta.json +1 -2
  210. package/src/components/MlLayerMagnify/MlLayerMagnify.stories.tsx +44 -0
  211. package/src/components/MlLayerMagnify/{MlLayerMagnify.test.js → MlLayerMagnify.test.tsx} +15 -18
  212. package/src/components/MlLayerMagnify/MlLayerMagnify.tsx +55 -61
  213. package/src/components/MlLayerSwipe/MlLayerSwipe.meta.json +1 -2
  214. package/src/components/MlLayerSwipe/{MlLayerSwipe.stories.js → MlLayerSwipe.stories.tsx} +9 -11
  215. package/src/components/MlLayerSwipe/MlLayerSwipe.tsx +47 -48
  216. package/src/components/MlLayerSwitcher/MlLayerSwitcher.meta_.json +1 -2
  217. package/src/components/MlLayerSwitcher/components/LayerBox.js +22 -19
  218. package/src/components/MlMarker/MlMarker.meta_.json +1 -2
  219. package/src/components/MlMeasureTool/MlMeasureTool.meta.json +1 -2
  220. package/src/components/MlNavigationCompass/MlNavigationCompass.meta.json +1 -2
  221. package/src/components/MlNavigationTools/MlNavigationTools.meta.json +1 -2
  222. package/src/components/MlScaleReference/MlScaleReference.meta.json +1 -2
  223. package/src/components/MlShareMapState/MlShareMapState.meta_.json +1 -2
  224. package/src/components/MlSketchTool/MlSketchTool.meta.json +1 -2
  225. package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.meta.json +1 -2
  226. package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.stories.tsx +121 -0
  227. package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.test.js +30 -1
  228. package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.tsx +143 -0
  229. package/src/components/MlSpatialElevationProfile/util/getElevationData.tsx +103 -0
  230. package/src/components/MlThreeJsLayer/MlThreeJsLayer.meta.json +1 -2
  231. package/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.meta.json +1 -2
  232. package/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.stories.js +2 -3
  233. package/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.tsx +17 -79
  234. package/src/components/MlUseMapDebugger/MlUseMapDebugger.meta_.json +1 -2
  235. package/src/components/MlVectorTileLayer/MlVectorTileLayer.meta.json +1 -2
  236. package/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx +3 -2
  237. package/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.meta_.json +1 -2
  238. package/src/components/MlWmsLayer/MlWmsLayer.tsx +59 -41
  239. package/src/components/MlWmsLoader/MlWmsLoader.meta.json +1 -2
  240. package/src/components/MlWmsLoader/MlWmsLoader.stories.tsx +89 -0
  241. package/src/components/MlWmsLoader/MlWmsLoader.tsx +141 -122
  242. package/src/components/MlWmsLoader/utils/MlWmsLoaderInstructions.tsx +50 -0
  243. package/src/components/MlWmsLoader/utils/WMSLinks.tsx +128 -0
  244. package/src/decorators/MapContextDecorator.js +1 -1
  245. package/src/decorators/MapContextDecoratorHooks.js +1 -1
  246. package/src/decorators/ThemeWrapper.tsx +9 -0
  247. package/src/hooks/useCameraFollowPath/useCameraFollowPath.meta.json +1 -2
  248. package/src/{components/MlGPXViewer → hooks/useGpx/lib}/gpxConverter.js +1 -0
  249. package/src/hooks/useGpx/useGpx.doc.de.md +3 -0
  250. package/src/hooks/useGpx/useGpx.meta_.json +15 -0
  251. package/src/{components/MlCenterPosition/MlCenterPosition.stories.js → hooks/useGpx/useGpx.stories.js} +4 -5
  252. package/src/hooks/useGpx/useGpx.tsx +70 -0
  253. package/src/hooks/useLayer.ts +32 -10
  254. package/src/hooks/useLayerHoverPopup/useLayerHoverPopup.doc.de.md +3 -0
  255. package/src/hooks/useLayerHoverPopup/useLayerHoverPopup.meta_.json +15 -0
  256. package/src/hooks/useLayerHoverPopup/useLayerHoverPopup.stories.js +20 -0
  257. package/src/hooks/useLayerHoverPopup/useLayerHoverPopup.tsx +82 -0
  258. package/src/hooks/useMap.test.tsx +48 -0
  259. package/src/hooks/useMap.ts +8 -8
  260. package/src/hooks/useSource.ts +4 -4
  261. package/src/hooks/{useWms.js → useWms.ts} +24 -11
  262. package/src/index.ts +5 -5
  263. package/src/setupTests.js +18 -15
  264. package/src/ui_components/Dropzone.tsx +104 -0
  265. package/src/ui_components/{ImageLoader.js → ImageLoader.tsx} +30 -25
  266. package/src/ui_components/{LoadingOverlayContext.js → LoadingOverlayContext.tsx} +12 -15
  267. package/src/ui_components/Sidebar.tsx +12 -10
  268. package/src/ui_components/Tooltip.tsx +17 -0
  269. package/src/ui_components/TopToolbar.tsx +5 -3
  270. package/src/ui_components/UploadButton.tsx +57 -0
  271. package/src/util/BubbleForInstructions.js +46 -0
  272. package/src/util/Instructions.tsx +60 -0
  273. package/tsconfig.json +1 -1
  274. package/coverage/lcov-report/src/components/MlGPXViewer/MlGPXViewer.tsx.html +0 -1222
  275. package/coverage/lcov-report/src/components/MlGPXViewer/gpxConverter.js.html +0 -1645
  276. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js.html +0 -757
  277. package/dist/components/MlGPXViewer/util/MlGPXViewerInstructions.d.ts +0 -1
  278. package/dist/components/MlGPXViewer/util/SampleLayer.d.ts +0 -0
  279. package/dist/components/MlGPXViewer/util/demoViewer.d.ts +0 -5
  280. package/src/components/MlGPXViewer/MlGPXViewer.stories.js +0 -91
  281. package/src/components/MlGPXViewer/MlGPXViewer.test.js +0 -28
  282. package/src/components/MlGPXViewer/MlGPXViewer.tsx +0 -379
  283. package/src/components/MlGPXViewer/util/MlGPXViewerInstructions.js +0 -145
  284. package/src/components/MlGPXViewer/util/SampleLayer.js +0 -2
  285. package/src/components/MlGPXViewer/util/demoViewer.js +0 -254
  286. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.stories.js +0 -45
  287. package/src/components/MlLayerMagnify/MlLayerMagnify.stories.js +0 -41
  288. package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js +0 -224
  289. package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.stories.js +0 -57
  290. package/src/components/MlWmsLoader/MlWmsLoader.stories.js +0 -47
  291. package/src/decorators/ThemeWrapper.jsx +0 -9
  292. package/src/ui_components/Legend.js +0 -44
  293. package/src/ui_components/LoadingOverlay.js +0 -41
  294. package/src/ui_components/Tooltip.js +0 -21
@@ -0,0 +1,104 @@
1
+ import React, { useRef, useEffect, useState } from 'react';
2
+ import Typography from '@mui/material/Typography';
3
+
4
+ type Props = {
5
+ setData: (data: string) => void;
6
+ };
7
+
8
+ const stopDefault = (event: DragEvent) => {
9
+ event.preventDefault();
10
+ event.stopPropagation();
11
+ };
12
+ export default function Dropzone(props: Props) {
13
+ const [zIndex, setZIndex] = useState(0);
14
+ const dropZone = useRef<HTMLDivElement>(null);
15
+ const dropHandler = (event: DragEvent) => {
16
+ event.preventDefault();
17
+
18
+ if (event?.dataTransfer?.items) {
19
+ if (event.dataTransfer.items.length > 1) {
20
+ return false;
21
+ }
22
+ // If dropped items aren't files, reject them
23
+ if (event.dataTransfer.items[0].kind === 'file') {
24
+ const reader = new FileReader();
25
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
+ reader.onload = (payload: any) => {
27
+ if (!payload?.currentTarget?.result) return;
28
+
29
+ if (typeof props.setData === 'function') {
30
+ props.setData(payload.currentTarget.result);
31
+ }
32
+ };
33
+ const file = event.dataTransfer.items[0].getAsFile();
34
+ if (file) {
35
+ reader.readAsText(file);
36
+ }
37
+ }
38
+ } else {
39
+ // Use DataTransfer interface to access the file(s)
40
+ }
41
+ return;
42
+ };
43
+
44
+ useEffect(() => {
45
+ const _dropZone = dropZone.current;
46
+ const raiseDropZoneAndStopDefault = (event: DragEvent) => {
47
+ setZIndex(1000);
48
+ stopDefault(event);
49
+ };
50
+ const lowerDropZone = () => {
51
+ setZIndex(0);
52
+ };
53
+ const lowerDropZoneAndStopDefault = (event: DragEvent) => {
54
+ setZIndex(0);
55
+ stopDefault(event);
56
+ };
57
+
58
+ window.addEventListener('dragenter', raiseDropZoneAndStopDefault);
59
+ window.addEventListener('dragover', stopDefault);
60
+
61
+ _dropZone?.addEventListener('dragleave', lowerDropZone);
62
+
63
+ window.addEventListener('drop', lowerDropZoneAndStopDefault);
64
+
65
+ return () => {
66
+ window.removeEventListener('dragenter', raiseDropZoneAndStopDefault);
67
+ window.removeEventListener('dragover', stopDefault);
68
+ _dropZone?.removeEventListener('dragleave', lowerDropZone);
69
+ window.removeEventListener('drop', lowerDropZoneAndStopDefault);
70
+ };
71
+ }, []);
72
+
73
+ return (
74
+ <div
75
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
76
+ // @ts-ignore
77
+ onDrop={dropHandler}
78
+ ref={dropZone}
79
+ style={{
80
+ position: 'absolute',
81
+ left: '0',
82
+ top: '0',
83
+ backgroundColor: 'rgba(255,255,255,0.5)',
84
+ width: '100%',
85
+ height: '100%',
86
+ zIndex: zIndex,
87
+ }}
88
+ >
89
+ <Typography
90
+ variant="h6"
91
+ style={{
92
+ top: '50%',
93
+ position: 'absolute',
94
+ left: '50%',
95
+ msTransform: 'translate(-50%, -50%)',
96
+ transform: ' translate(-50%, -50%)',
97
+ }}
98
+ noWrap
99
+ >
100
+ Datei ablegen
101
+ </Typography>
102
+ </div>
103
+ );
104
+ }
@@ -1,43 +1,47 @@
1
-
2
- import { useEffect, useState } from "react"
1
+ import React, { useEffect, useState } from 'react';
3
2
  import CircularProgress from '@mui/material/CircularProgress';
4
-
5
3
  import ErrorIcon from '@mui/icons-material/Error';
6
- import { Box } from "@mui/system";
7
- const ImageLoader = (props) => {
8
- const [state, setState] = useState("loading");
4
+ import { Box } from '@mui/system';
5
+ import { SxProps } from '@mui/material';
6
+
7
+ interface ImageLoaderProps {
8
+ src: string;
9
+ alt?: string;
10
+ sx?: SxProps;
11
+ className?: string;
12
+ }
13
+
14
+ const ImageLoader = (props: ImageLoaderProps) => {
15
+ const [state, setState] = useState('loading');
9
16
 
10
17
  useEffect(() => {
11
18
  if (!props.src) {
12
- setState("error");
19
+ setState('error');
13
20
  return;
14
21
  }
15
22
  fetch(props.src)
16
23
  .then(({ ok }) => {
17
24
  if (ok) {
18
- setState("ready");
25
+ setState('ready');
19
26
  } else {
20
- setState("error");
27
+ setState('error');
21
28
  }
22
29
  })
23
30
  .catch((e) => {
24
31
  console.error(e);
25
- setState("error");
32
+ setState('error');
26
33
  });
27
34
  }, [props.src]);
28
35
 
29
36
  const boxStyle = {
30
- width: "100%",
31
- height: "100%",
32
37
  border: 2,
33
- borderRadius: "8px",
34
- textAlign: "center",
35
- display: "flex",
38
+ borderRadius: '8px',
39
+ display: 'flex',
36
40
  };
37
41
 
38
42
  const LoadingImage = () => {
39
43
  return (
40
- <Box className={props.className} sx={{ ...boxStyle, ...props.style }}>
44
+ <Box className={props.className} sx={{ ...boxStyle, ...props.sx }}>
41
45
  <CircularProgress />
42
46
  </Box>
43
47
  );
@@ -45,27 +49,28 @@ const ImageLoader = (props) => {
45
49
 
46
50
  const ReadyImage = () => {
47
51
  return (
48
- <img
52
+ <Box
53
+ component={'img'}
49
54
  className={props.className}
50
- style={{ ...boxStyle, ...props.style }}
55
+ sx={{ ...boxStyle, ...props.sx }}
51
56
  src={props.src}
52
- alt={props.alt || ""}
57
+ alt={props.alt || ''}
53
58
  />
54
59
  );
55
60
  };
56
61
  const ErrorImage = () => {
57
62
  return (
58
- <Box className={props.className} sx={{ boxStyle, ...props.style }}>
59
- <ErrorIcon sx={{ display: "block", margin: "auto" }} />
63
+ <Box className={props.className} sx={{ ...boxStyle, ...props.sx }}>
64
+ <ErrorIcon sx={{ display: 'block', margin: 'auto' }} />
60
65
  </Box>
61
66
  );
62
67
  };
63
68
 
64
- const renderImage = (state) => {
69
+ const renderImage = (state: string) => {
65
70
  switch (state) {
66
- case "ready":
71
+ case 'ready':
67
72
  return <ReadyImage />;
68
- case "error":
73
+ case 'error':
69
74
  return <ErrorImage />;
70
75
  default:
71
76
  return <LoadingImage />;
@@ -75,4 +80,4 @@ const ImageLoader = (props) => {
75
80
  return <>{renderImage(state)}</>;
76
81
  };
77
82
 
78
- export default ImageLoader
83
+ export default ImageLoader;
@@ -1,11 +1,12 @@
1
- import React, { useState, useEffect, useContext, useRef } from "react";
2
- import PropTypes from "prop-types";
3
- import { MapContext } from "../index";
1
+ import React, { useState, useEffect, useContext, useRef } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { MapContext } from '../index';
4
+ import { JsxChildren } from 'typedoc/dist/lib/utils/jsx.elements';
4
5
 
5
6
  const LoadingOverlayContext = React.createContext({});
6
7
  const LoadingOverlayContextProvider = LoadingOverlayContext.Provider;
7
8
 
8
- const LoadingOverlayProvider = ({ children }) => {
9
+ const LoadingOverlayProvider = (children: JsxChildren) => {
9
10
  const mapContext = useContext(MapContext);
10
11
 
11
12
  const [controlled, setControlled] = useState(false);
@@ -15,7 +16,7 @@ const LoadingOverlayProvider = ({ children }) => {
15
16
  const mapJobsRef = useRef({});
16
17
  const [checkIdleTrigger, setCheckIdleTrigger] = useState(0);
17
18
 
18
- const createOnMapIdleFunction = (mapId) => () => {
19
+ const createOnMapIdleFunction = (mapId: string) => () => {
19
20
  mapJobsRef.current[mapId] = true;
20
21
  setCheckIdleTrigger(Math.random());
21
22
  };
@@ -33,7 +34,7 @@ const LoadingOverlayProvider = ({ children }) => {
33
34
  useEffect(() => {
34
35
  if (!mapContext.map || controlled) return;
35
36
 
36
- for (var key in mapJobsRef.current) {
37
+ for (const key in mapJobsRef.current) {
37
38
  if (!mapJobsRef.current[key]) return;
38
39
  }
39
40
 
@@ -41,14 +42,14 @@ const LoadingOverlayProvider = ({ children }) => {
41
42
  }, [checkIdleTrigger, controlled, mapContext]);
42
43
 
43
44
  useEffect(() => {
44
- for (var i = 0, len = mapContext.mapIds.length; i < len; i++) {
45
- if (Object.keys(mapJobsRef.current).indexOf(mapContext.mapIds[i]) === -1) {
46
- let mapId = mapContext.mapIds[i] + "";
45
+ for (let i = 0, len = mapContext.mapIds.length; i < len; i++) {
46
+ if (Object.keys(mapJobsRef.current).indexOf(mapContext.mapIds[i] as string) === -1) {
47
+ const mapId = mapContext.mapIds[i] + '';
47
48
 
48
49
  if (mapContext.getMap(mapId)) {
49
50
  mapJobsRef.current[mapId] = false;
50
51
 
51
- mapContext.getMap(mapId).on("idle", createOnMapIdleFunction(mapId));
52
+ mapContext.getMap(mapId).on('idle', createOnMapIdleFunction(mapId));
52
53
  }
53
54
  }
54
55
  }
@@ -68,11 +69,7 @@ const LoadingOverlayProvider = ({ children }) => {
68
69
  setLoadingDone,
69
70
  };
70
71
 
71
- return (
72
- <LoadingOverlayContextProvider value={value}>
73
- {children}
74
- </LoadingOverlayContextProvider>
75
- );
72
+ return <LoadingOverlayContextProvider value={value}>{children}</LoadingOverlayContextProvider>;
76
73
  };
77
74
 
78
75
  LoadingOverlayProvider.propTypes = {
@@ -1,12 +1,12 @@
1
1
  import React, { useState } from 'react';
2
2
  import { styled } from '@mui/material/styles';
3
- import Drawer from '@mui/material/Drawer';
4
3
  import ChevronLeftIcon from '@mui/icons-material/ChevronLeft';
5
4
  import MenuIcon from '@mui/icons-material/Menu';
6
- import { IconButton, PaperProps } from '@mui/material';
5
+ import { Drawer, IconButton, PaperProps, SxProps, DrawerProps} from '@mui/material';
7
6
  import useMediaQuery from '@mui/material/useMediaQuery';
8
7
  import Box from '@mui/material/Box';
9
- import { JsxChildren } from 'typedoc/dist/lib/utils/jsx.elements';
8
+
9
+
10
10
 
11
11
  const DrawerHeader = styled('div')(() => ({
12
12
  display: 'flex',
@@ -14,12 +14,13 @@ const DrawerHeader = styled('div')(() => ({
14
14
  }));
15
15
 
16
16
  interface SidebarProps {
17
- drawerPaperProps: PaperProps;
18
- drawerHeaderProps: Headers;
19
- children: JsxChildren;
17
+ drawerPaperProps?: PaperProps;
18
+ drawerHeaderProps?: Headers;
19
+ drawerButtonStyle?: SxProps | undefined;
20
+ children?: React.ReactNode;
20
21
  }
21
22
 
22
- export default function Sidebar({ drawerPaperProps, drawerHeaderProps, ...props }: SidebarProps) {
23
+ export default function Sidebar({ drawerPaperProps, drawerHeaderProps, drawerButtonStyle, ...props }: SidebarProps & DrawerProps) {
23
24
  const mediaIsMobile = useMediaQuery('(max-width:900px)');
24
25
 
25
26
  const [drawerOpen, setDrawerOpen] = useState(true);
@@ -35,11 +36,12 @@ export default function Sidebar({ drawerPaperProps, drawerHeaderProps, ...props
35
36
  <>
36
37
  <IconButton
37
38
  onClick={handleDrawerOpen}
38
- style={{
39
+ sx={{
39
40
  zIndex: 101,
40
41
  position: 'relative',
41
42
  padding: '20px',
42
- }}
43
+ ...drawerButtonStyle
44
+ }}
43
45
  >
44
46
  <MenuIcon />
45
47
  </IconButton>
@@ -51,7 +53,7 @@ export default function Sidebar({ drawerPaperProps, drawerHeaderProps, ...props
51
53
  PaperProps={{
52
54
  sx: {
53
55
  maxWidth: '20%',
54
- padding: '40px',
56
+ padding: '40px'
55
57
  },
56
58
  ...drawerPaperProps,
57
59
  }}
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import makeStyles from '@mui/styles/makeStyles';
3
+
4
+ const useStyles = makeStyles(() => ({
5
+ tooltip: {
6
+ position: 'fixed',
7
+ top: '100px',
8
+ left: '100px',
9
+ zIndex: 100000,
10
+ },
11
+ }));
12
+
13
+ export default function Legend() {
14
+ const classes = useStyles();
15
+
16
+ return <div className={classes.tooltip}>tooltip</div>;
17
+ }
@@ -1,11 +1,12 @@
1
1
  import React from 'react';
2
2
  import AppBar from '@mui/material/AppBar';
3
- import { Toolbar, AppBarProps, ToolbarProps } from '@mui/material';
3
+ import { Toolbar, AppBarProps, ToolbarProps, SxProps } from '@mui/material';
4
4
 
5
5
  interface TopToolbarProps extends AppBarProps {
6
- toolbarProps: ToolbarProps;
6
+ toolbarProps?: ToolbarProps;
7
+ appBarStyle?: SxProps
7
8
  }
8
- export default function TopToolbar({ toolbarProps, ...props }: TopToolbarProps) {
9
+ export default function TopToolbar({ toolbarProps, appBarStyle, ...props }: TopToolbarProps) {
9
10
  return (
10
11
  <AppBar
11
12
  sx={{
@@ -13,6 +14,7 @@ export default function TopToolbar({ toolbarProps, ...props }: TopToolbarProps)
13
14
  backgroundColor: '#f1f1f1',
14
15
  position: 'absolute',
15
16
  zIndex: 120,
17
+ ...appBarStyle
16
18
  }}
17
19
  color="primary"
18
20
  position="static"
@@ -0,0 +1,57 @@
1
+ import React, { useRef } from 'react';
2
+ import FileCopy from '@mui/icons-material/FileCopy';
3
+ import { Button } from '@mui/material';
4
+
5
+ type Props = {
6
+ setData: (data: string) => void;
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ buttonComponent: any;
9
+ };
10
+
11
+ export default function UploadButton(props: Props) {
12
+ const fileupload = useRef<HTMLInputElement>(null);
13
+ const fileUploadOnChange = () => {
14
+ if (!fileupload.current) return false;
15
+
16
+ const file = fileupload.current?.files?.[0];
17
+ if (!file) return false;
18
+ const reader = new FileReader();
19
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
+ reader.onload = (payload: any) => {
21
+ if (!payload) return;
22
+
23
+ if (typeof props.setData === 'function') {
24
+ props.setData(payload.currentTarget?.result);
25
+ }
26
+ };
27
+
28
+ reader.readAsText(file);
29
+
30
+ return;
31
+ };
32
+
33
+ const upload = () => {
34
+ if (!fileupload.current) return;
35
+
36
+ fileupload.current.click();
37
+ };
38
+ return (
39
+ <>
40
+ {props.buttonComponent ? (
41
+ React.cloneElement(props.buttonComponent, { onClick: upload })
42
+ ) : (
43
+ <Button onClick={upload}>
44
+ <FileCopy />
45
+ </Button>
46
+ )}
47
+ <input
48
+ ref={fileupload}
49
+ onChange={fileUploadOnChange}
50
+ type="file"
51
+ id="input"
52
+ multiple
53
+ style={{ display: 'none' }}
54
+ ></input>
55
+ </>
56
+ );
57
+ }
@@ -0,0 +1,46 @@
1
+ import React from 'react';
2
+ import ReplyAllIcon from '@mui/icons-material/ReplyAll';
3
+
4
+ function BubbleForInstruction(props) {
5
+ return (
6
+ <>
7
+ <div
8
+ style={{
9
+ width: '475px',
10
+ height: '475px',
11
+ position: 'fixed',
12
+ display: 'block',
13
+ borderRadius: '360px',
14
+ backgroundColor: 'steelblue',
15
+ right: props.bubbleRight,
16
+ bottom: props.bubbleBottom,
17
+ left: props.bubbleLeft,
18
+ top: props.bubbleTop,
19
+ zIndex: props.zIndex
20
+ }}
21
+ >
22
+ <h2
23
+ style={{
24
+ marginTop: props.textMarginTop,
25
+ marginLeft: props.textMarginLeft,
26
+ color: 'white',
27
+ textAlign: 'left',
28
+ }}
29
+ >
30
+ {props.children}
31
+ </h2>
32
+ <ReplyAllIcon
33
+ style={{
34
+ color: 'white',
35
+ fontSize: '80px',
36
+ position: 'absolute',
37
+ transform: props.iconTransform,
38
+ marginTop: props.iconMarginTop,
39
+ marginLeft: props.iconMarginLeft,
40
+ }}
41
+ />
42
+ </div>
43
+ </>
44
+ );
45
+ }
46
+ export default BubbleForInstruction;
@@ -0,0 +1,60 @@
1
+ import React, { useEffect, useState, useRef } from 'react';
2
+ import {Fade, SxProps} from '@mui/material';
3
+ import BubbleStyle from './BubbleForInstructions';
4
+
5
+ interface StepObject {
6
+ duration: number;
7
+ props: SxProps;
8
+ content: JSX.Element;
9
+ }
10
+
11
+ interface InstructionProps {
12
+ steps: Array<StepObject>;
13
+ open: boolean;
14
+ callback?: () => void;
15
+ }
16
+
17
+ const Instructions = (props: InstructionProps) => {
18
+ const [activeStep, setActiveStep] = useState<number>();
19
+ const initializedRef = useRef(false);
20
+
21
+ const activateStep = (stepId?: number | undefined) => {
22
+ let _nextStep: number | undefined = typeof stepId === 'undefined' ? 0 : stepId + 1;
23
+ if (typeof _nextStep !== 'undefined') {
24
+ if (_nextStep > props.steps.length + 1) {
25
+ _nextStep = undefined;
26
+ } else {
27
+ setTimeout(() => {
28
+ activateStep(_nextStep);
29
+ }, props.steps[_nextStep].duration);
30
+ }
31
+ }
32
+ setActiveStep(_nextStep);
33
+ };
34
+ useEffect(() => {
35
+ if (props.open && !initializedRef.current) {
36
+ initializedRef.current = true;
37
+ activateStep();
38
+ }
39
+ if (!props.open) {
40
+ initializedRef.current = false;
41
+ setActiveStep(undefined);
42
+ }
43
+ }, [props.open]);
44
+
45
+ return (
46
+ <>
47
+ {typeof activeStep !== 'undefined' && (
48
+ <Fade in={true} timeout={150}>
49
+ <div>
50
+ <BubbleStyle {...props.steps[activeStep].props}>
51
+ {props.steps[activeStep].content}
52
+ </BubbleStyle>
53
+ </div>
54
+ </Fade>
55
+ )}
56
+ </>
57
+ );
58
+ };
59
+
60
+ export default Instructions;
package/tsconfig.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "skipLibCheck": true,
9
9
  "sourceMap": true,
10
10
  "strict": false,
11
- "types": ["node", "jest", "geojson", "cypress", "./support"],
11
+ "types": ["node", "jest", "geojson", "cypress"],
12
12
  "outDir": "build/esm",
13
13
  "module": "esnext",
14
14
  "target": "es5",