@mapcomponents/react-maplibre 0.1.57 → 0.1.59

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 (276) hide show
  1. package/.eslintignore +11 -0
  2. package/.eslintrc.js +20 -0
  3. package/.github/workflows/check-formatting.yml +46 -0
  4. package/.prettierignore +11 -0
  5. package/.prettierrc.json +6 -0
  6. package/CHANGELOG.md +18 -0
  7. package/coverage/clover.xml +229 -77
  8. package/coverage/coverage-final.json +43 -37
  9. package/coverage/lcov-report/index.html +65 -20
  10. package/coverage/lcov-report/src/components/MapLibreMap/MapLibreMap.tsx.html +83 -83
  11. package/coverage/lcov-report/src/components/MapLibreMap/index.html +1 -1
  12. package/coverage/lcov-report/src/components/MlCenterPosition/MlCenterPosition.tsx.html +66 -66
  13. package/coverage/lcov-report/src/components/MlCenterPosition/index.html +1 -1
  14. package/coverage/lcov-report/src/components/MlCreatePdfButton/MlCreatePdfButton.tsx.html +30 -30
  15. package/coverage/lcov-report/src/components/MlCreatePdfButton/index.html +1 -1
  16. package/coverage/lcov-report/src/components/MlCreatePdfForm/MlCreatePdfForm.tsx.html +202 -0
  17. package/coverage/lcov-report/src/components/MlCreatePdfForm/index.html +116 -0
  18. package/coverage/lcov-report/src/components/MlFeatureEditor/MlFeatureEditor.tsx.html +99 -99
  19. package/coverage/lcov-report/src/components/MlFeatureEditor/index.html +1 -1
  20. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.tsx.html +66 -66
  21. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/index.html +1 -1
  22. package/coverage/lcov-report/src/components/MlFollowGps/MlFollowGps.tsx.html +221 -221
  23. package/coverage/lcov-report/src/components/MlFollowGps/index.html +1 -1
  24. package/coverage/lcov-report/src/components/MlGPXViewer/MlGPXViewer.tsx.html +308 -308
  25. package/coverage/lcov-report/src/components/MlGPXViewer/gpxConverter.js.html +497 -497
  26. package/coverage/lcov-report/src/components/MlGPXViewer/index.html +1 -1
  27. package/coverage/lcov-report/src/components/MlGeoJsonLayer/MlGeoJsonLayer.tsx.html +85 -85
  28. package/coverage/lcov-report/src/components/MlGeoJsonLayer/index.html +1 -1
  29. package/coverage/lcov-report/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.tsx.html +469 -0
  30. package/coverage/lcov-report/src/components/MlGeojsonLayerWithSource/index.html +116 -0
  31. package/coverage/lcov-report/src/components/MlImageMarkerLayer/MlImageMarkerLayer.tsx.html +140 -140
  32. package/coverage/lcov-report/src/components/MlImageMarkerLayer/index.html +1 -1
  33. package/coverage/lcov-report/src/components/MlLayer/MlLayer.tsx.html +37 -37
  34. package/coverage/lcov-report/src/components/MlLayer/index.html +1 -1
  35. package/coverage/lcov-report/src/components/MlLayerMagnify/MlLayerMagnify.tsx.html +179 -179
  36. package/coverage/lcov-report/src/components/MlLayerMagnify/index.html +1 -1
  37. package/coverage/lcov-report/src/components/MlLayerSwipe/MlLayerSwipe.tsx.html +113 -113
  38. package/coverage/lcov-report/src/components/MlLayerSwipe/index.html +1 -1
  39. package/coverage/lcov-report/src/components/MlLayerSwitcher/MlLayerSwitcher.js.html +181 -181
  40. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/LayerBox.js.html +58 -58
  41. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/index.html +1 -1
  42. package/coverage/lcov-report/src/components/MlLayerSwitcher/index.html +1 -1
  43. package/coverage/lcov-report/src/components/MlMarker/MlMarker.tsx.html +108 -108
  44. package/coverage/lcov-report/src/components/MlMarker/index.html +1 -1
  45. package/coverage/lcov-report/src/components/MlMeasureTool/MlMeasureTool.tsx.html +39 -39
  46. package/coverage/lcov-report/src/components/MlMeasureTool/index.html +1 -1
  47. package/coverage/lcov-report/src/components/MlNavigationCompass/MlNavigationCompass.tsx.html +183 -183
  48. package/coverage/lcov-report/src/components/MlNavigationCompass/index.html +1 -1
  49. package/coverage/lcov-report/src/components/MlNavigationTools/MlNavigationTools.tsx.html +163 -163
  50. package/coverage/lcov-report/src/components/MlNavigationTools/index.html +1 -1
  51. package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.js.html +50 -50
  52. package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.stories_.js.html +30 -30
  53. package/coverage/lcov-report/src/components/MlOsmLayer/index.html +1 -1
  54. package/coverage/lcov-report/src/components/MlScaleReference/MlScaleReference.js.html +83 -83
  55. package/coverage/lcov-report/src/components/MlScaleReference/index.html +1 -1
  56. package/coverage/lcov-report/src/components/MlShareMapState/MlShareMapState.js.html +204 -204
  57. package/coverage/lcov-report/src/components/MlShareMapState/index.html +1 -1
  58. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js.html +180 -180
  59. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/index.html +1 -1
  60. package/coverage/lcov-report/src/components/MlThreeJsLayer/MlThreeJsLayer.js.html +163 -163
  61. package/coverage/lcov-report/src/components/MlThreeJsLayer/index.html +1 -1
  62. package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.tsx.html +136 -136
  63. package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/index.html +1 -1
  64. package/coverage/lcov-report/src/components/MlUseMapDebugger/MlUseMapDebugger.js.html +53 -53
  65. package/coverage/lcov-report/src/components/MlUseMapDebugger/index.html +1 -1
  66. package/coverage/lcov-report/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx.html +123 -123
  67. package/coverage/lcov-report/src/components/MlVectorTileLayer/index.html +1 -1
  68. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js.html +35 -35
  69. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/index.html +1 -1
  70. package/coverage/lcov-report/src/components/MlWmsLayer/MlWmsLayer.tsx.html +155 -155
  71. package/coverage/lcov-report/src/components/MlWmsLayer/index.html +1 -1
  72. package/coverage/lcov-report/src/components/MlWmsLoader/MlWmsLoader.tsx.html +255 -255
  73. package/coverage/lcov-report/src/components/MlWmsLoader/index.html +1 -1
  74. package/coverage/lcov-report/src/contexts/MapContext.tsx.html +66 -66
  75. package/coverage/lcov-report/src/contexts/SimpleDataContext.js.html +1 -1
  76. package/coverage/lcov-report/src/contexts/SimpleDataProvider.js.html +48 -48
  77. package/coverage/lcov-report/src/contexts/index.html +1 -1
  78. package/coverage/lcov-report/src/hooks/exportMap/index.html +131 -0
  79. package/coverage/lcov-report/src/hooks/exportMap/index.ts.html +175 -0
  80. package/coverage/lcov-report/src/hooks/exportMap/lib.ts.html +646 -0
  81. package/coverage/lcov-report/src/hooks/index.html +48 -18
  82. package/coverage/lcov-report/src/hooks/useLayer.ts.html +230 -188
  83. package/coverage/lcov-report/src/hooks/useLayerEvent.js.html +232 -0
  84. package/coverage/lcov-report/src/hooks/useMap.ts.html +72 -69
  85. package/coverage/lcov-report/src/hooks/useMapState.ts.html +145 -145
  86. package/coverage/lcov-report/src/hooks/useSource.ts.html +337 -0
  87. package/coverage/lcov-report/src/hooks/useWms.js.html +72 -72
  88. package/coverage/lcov-report/src/index.html +1 -1
  89. package/coverage/lcov-report/src/index.ts.html +11 -2
  90. package/coverage/lcov.info +448 -151
  91. package/dist/components/MlCreatePdfForm/MlCreatePdfForm.d.ts +24 -0
  92. package/dist/components/MlCreatePdfForm/MlCreatePdfForm.stories.d.ts +13 -0
  93. package/dist/components/MlCreatePdfForm/lib/PdfContext.d.ts +21 -0
  94. package/dist/components/MlCreatePdfForm/lib/PdfForm.d.ts +10 -0
  95. package/dist/components/MlCreatePdfForm/lib/PdfPreview.d.ts +13 -0
  96. package/dist/components/MlCreatePdfForm/lib/pdf.templates.d.ts +11 -0
  97. package/dist/components/MlFeatureEditor/lib/create_vertex.d.ts +1 -1
  98. package/dist/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.d.ts +22 -0
  99. package/dist/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.stories.d.ts +10 -0
  100. package/dist/components/MlLayerSwipe/MlLayerSwipe.d.ts +1 -1
  101. package/dist/components/MlWmsLayer/MlWmsLayer.d.ts +2 -2
  102. package/dist/decorators/MapContextDecoratorHooks.d.ts +2 -0
  103. package/dist/hooks/exportMap/index.d.ts +11 -0
  104. package/dist/hooks/exportMap/lib.d.ts +36 -0
  105. package/dist/hooks/useLayer.d.ts +6 -5
  106. package/dist/hooks/useLayerEvent.d.ts +2 -0
  107. package/dist/hooks/useMap.d.ts +1 -1
  108. package/dist/hooks/useMapState.stories.d.ts +2 -2
  109. package/dist/hooks/useSource.d.ts +17 -0
  110. package/dist/hooks/useSources.stories.d.ts +13 -0
  111. package/dist/index.d.ts +3 -0
  112. package/dist/index.esm.js +1055 -315
  113. package/dist/index.esm.js.map +1 -1
  114. package/eslintErrorTest.js +10 -0
  115. package/package.json +7 -1
  116. package/public/thumbnails/MlCreatePdfForm.png +0 -0
  117. package/src/components/MapLibreMap/MapLibreMap.stories.js +72 -72
  118. package/src/components/MapLibreMap/MapLibreMap.test.js +60 -60
  119. package/src/components/MapLibreMap/MapLibreMap.tsx +82 -82
  120. package/src/components/MapLibreMap/lib/MapLibreGlWrapper.test.js +343 -343
  121. package/src/components/MapLibreMap/lib/MapLibreGlWrapper.ts +619 -619
  122. package/src/components/MlBasicComponent.js +25 -25
  123. package/src/components/MlCenterPosition/MlCenterPosition.stories.js +6 -6
  124. package/src/components/MlCenterPosition/MlCenterPosition.tsx +65 -65
  125. package/src/components/MlComponentTemplate/MlComponentTemplate.stories.js +5 -5
  126. package/src/components/MlComponentTemplate/MlComponentTemplate.tsx +23 -23
  127. package/src/components/MlCreatePdfButton/{MlCreatePdfButton.meta.json → MlCreatePdfButton.meta_.json} +0 -0
  128. package/src/components/MlCreatePdfButton/MlCreatePdfButton.stories.js +16 -16
  129. package/src/components/MlCreatePdfButton/MlCreatePdfButton.tsx +29 -29
  130. package/src/components/MlCreatePdfButton/lib/createPdf.ts +175 -175
  131. package/src/components/MlCreatePdfButton/lib/nominatimMap.ts +51 -51
  132. package/src/components/MlCreatePdfForm/MlCreatePdfForm.doc.de.md +3 -0
  133. package/src/components/MlCreatePdfForm/MlCreatePdfForm.meta.json +15 -0
  134. package/src/components/MlCreatePdfForm/MlCreatePdfForm.stories.tsx +152 -0
  135. package/src/components/MlCreatePdfForm/MlCreatePdfForm.tsx +39 -0
  136. package/src/components/MlCreatePdfForm/lib/PdfContext.tsx +53 -0
  137. package/src/components/MlCreatePdfForm/lib/PdfForm.tsx +161 -0
  138. package/src/components/MlCreatePdfForm/lib/PdfPreview.tsx +399 -0
  139. package/src/components/MlCreatePdfForm/lib/pdf.templates.ts +82 -0
  140. package/src/components/MlFeatureEditor/MlFeatureEditor.stories.js +55 -55
  141. package/src/components/MlFeatureEditor/MlFeatureEditor.test.js +105 -105
  142. package/src/components/MlFeatureEditor/MlFeatureEditor.tsx +119 -119
  143. package/src/components/MlFeatureEditor/custom-direct-select-mode.js +208 -208
  144. package/src/components/MlFeatureEditor/custom-polygon-mode.js +148 -148
  145. package/src/components/MlFeatureEditor/custom-select-mode.js +314 -314
  146. package/src/components/MlFeatureEditor/lib/common_selectors.js +34 -34
  147. package/src/components/MlFeatureEditor/lib/constants.js +61 -61
  148. package/src/components/MlFeatureEditor/lib/constrain_feature_movement.js +51 -51
  149. package/src/components/MlFeatureEditor/lib/create_midpoint.js +30 -30
  150. package/src/components/MlFeatureEditor/lib/create_supplementary_points.js +82 -82
  151. package/src/components/MlFeatureEditor/lib/create_vertex.js +16 -16
  152. package/src/components/MlFeatureEditor/lib/double_click_zoom.js +23 -23
  153. package/src/components/MlFeatureEditor/lib/euclidean_distance.js +3 -3
  154. package/src/components/MlFeatureEditor/lib/features_at.js +23 -23
  155. package/src/components/MlFeatureEditor/lib/get_features_and_set_cursor.js +15 -15
  156. package/src/components/MlFeatureEditor/lib/is_click.js +8 -8
  157. package/src/components/MlFeatureEditor/lib/is_event_at_coordinates.js +2 -2
  158. package/src/components/MlFeatureEditor/lib/is_tap.js +6 -6
  159. package/src/components/MlFeatureEditor/lib/map_event_to_bounding_box.js +4 -4
  160. package/src/components/MlFeatureEditor/lib/mode_handler.js +105 -105
  161. package/src/components/MlFeatureEditor/lib/mouse_event_point.js +5 -5
  162. package/src/components/MlFeatureEditor/lib/move_features.js +33 -33
  163. package/src/components/MlFeatureEditor/lib/sort_features.js +25 -25
  164. package/src/components/MlFeatureEditor/lib/string_set.js +36 -36
  165. package/src/components/MlFeatureEditor/lib/string_sets_are_equal.js +2 -2
  166. package/src/components/MlFeatureEditor/lib/theme.js +230 -230
  167. package/src/components/MlFeatureEditor/lib/to_dense_array.js +1 -1
  168. package/src/components/MlFeatureEditor/lib/utils.js +40 -40
  169. package/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.stories.js +9 -9
  170. package/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.test.js +4 -4
  171. package/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.tsx +65 -65
  172. package/src/components/MlFollowGps/MlFollowGps.stories.js +6 -6
  173. package/src/components/MlFollowGps/MlFollowGps.test.js +44 -44
  174. package/src/components/MlFollowGps/MlFollowGps.tsx +220 -220
  175. package/src/components/MlGPXViewer/MlGPXViewer.stories.js +15 -15
  176. package/src/components/MlGPXViewer/MlGPXViewer.test.js +12 -12
  177. package/src/components/MlGPXViewer/MlGPXViewer.tsx +345 -345
  178. package/src/components/MlGPXViewer/gpxConverter.js +496 -496
  179. package/src/components/MlGPXViewer/util/GeoJsonContext.ts +4 -4
  180. package/src/components/MlGPXViewer/util/GeoJsonProvider.tsx +16 -16
  181. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.stories.js +34 -34
  182. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.test.js +8 -8
  183. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.tsx +84 -84
  184. package/src/components/MlGeoJsonLayer/util/getDefaultLayerTypeByGeometry.ts +21 -21
  185. package/src/components/MlGeoJsonLayer/util/getDefaultPaintPropsByType.ts +27 -27
  186. package/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.doc.de.md +3 -0
  187. package/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.meta_.json +15 -0
  188. package/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.stories.js +19 -0
  189. package/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.tsx +128 -0
  190. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.stories.js +28 -28
  191. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.test.js +8 -8
  192. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.tsx +162 -162
  193. package/src/components/MlLayer/MlLayer.stories.js +5 -5
  194. package/src/components/MlLayer/MlLayer.test.js +86 -86
  195. package/src/components/MlLayer/MlLayer.tsx +36 -36
  196. package/src/components/MlLayerMagnify/MlLayerMagnify.stories.js +21 -21
  197. package/src/components/MlLayerMagnify/MlLayerMagnify.test.js +54 -54
  198. package/src/components/MlLayerMagnify/MlLayerMagnify.tsx +201 -201
  199. package/src/components/MlLayerSwipe/MlLayerSwipe.stories.js +20 -20
  200. package/src/components/MlLayerSwipe/MlLayerSwipe.test.js +54 -54
  201. package/src/components/MlLayerSwipe/MlLayerSwipe.tsx +130 -130
  202. package/src/components/MlLayerSwitcher/MlLayerSwitcher.js +194 -194
  203. package/src/components/MlLayerSwitcher/MlLayerSwitcher.stories.js +85 -85
  204. package/src/components/MlLayerSwitcher/components/LayerBox.js +57 -57
  205. package/src/components/MlMarker/MlMarker.stories.js +7 -7
  206. package/src/components/MlMarker/MlMarker.tsx +119 -119
  207. package/src/components/MlMeasureTool/MlMeasureTool.stories.js +64 -64
  208. package/src/components/MlMeasureTool/MlMeasureTool.tsx +38 -38
  209. package/src/components/MlNavigationCompass/MlNavigationCompass.stories.js +45 -45
  210. package/src/components/MlNavigationCompass/MlNavigationCompass.test.js +40 -40
  211. package/src/components/MlNavigationCompass/MlNavigationCompass.tsx +192 -192
  212. package/src/components/MlNavigationTools/MlNavigationTools.stories.js +18 -18
  213. package/src/components/MlNavigationTools/MlNavigationTools.tsx +173 -173
  214. package/src/components/MlOsmLayer/MlOsmLayer.js +49 -49
  215. package/src/components/MlOsmLayer/MlOsmLayer.stories_.js +29 -29
  216. package/src/components/MlOsmLayer/MlOsmLayer.test.js +8 -8
  217. package/src/components/MlScaleReference/MlScaleReference.js +82 -82
  218. package/src/components/MlScaleReference/MlScaleReference.stories.js +27 -27
  219. package/src/components/MlShareMapState/MlShareMapState.js +203 -203
  220. package/src/components/MlShareMapState/MlShareMapState.stories.js +68 -68
  221. package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js +201 -201
  222. package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.stories.js +35 -35
  223. package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.test.js +8 -8
  224. package/src/components/MlThreeJsLayer/MlThreeJsLayer.js +186 -186
  225. package/src/components/MlThreeJsLayer/MlThreeJsLayer.stories.js +21 -21
  226. package/src/components/MlThreeJsLayer/MlThreeJsLayer.test.js +24 -24
  227. package/src/components/MlThreeJsLayer/lib/GLTFLoader.js +3327 -3327
  228. package/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.stories.js +31 -30
  229. package/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.test.js +8 -8
  230. package/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.tsx +146 -146
  231. package/src/components/MlTransitionGeoJsonLayer/util/transitionFunctions.js +207 -207
  232. package/src/components/MlUseMapDebugger/MlUseMapDebugger.js +52 -52
  233. package/src/components/MlUseMapDebugger/MlUseMapDebugger.stories.js +13 -13
  234. package/src/components/MlVectorTileLayer/MlVectorTileLayer.stories.js +27 -27
  235. package/src/components/MlVectorTileLayer/MlVectorTileLayer.test.js +27 -27
  236. package/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx +137 -137
  237. package/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js +34 -34
  238. package/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.stories.js +7 -7
  239. package/src/components/MlWmsLayer/MlWmsLayer.stories.js +26 -26
  240. package/src/components/MlWmsLayer/MlWmsLayer.test.js +8 -8
  241. package/src/components/MlWmsLayer/MlWmsLayer.tsx +167 -167
  242. package/src/components/MlWmsLoader/MlWmsLoader.stories.js +27 -27
  243. package/src/components/MlWmsLoader/MlWmsLoader.tsx +254 -254
  244. package/src/contexts/MapComponentsProvider.test.js +229 -229
  245. package/src/contexts/MapContext.tsx +65 -65
  246. package/src/contexts/SimpleDataProvider.js +47 -47
  247. package/src/contexts/SimpleDataProvider.test.js +29 -29
  248. package/src/custom.d.tsx +14 -14
  249. package/src/decorators/MapContextDecorator.js +22 -22
  250. package/src/decorators/MapContextDecoratorHooks.js +34 -0
  251. package/src/decorators/MultiMapContextDecorator.js +63 -63
  252. package/src/decorators/NoNavToolsDecorator.js +17 -17
  253. package/src/decorators/ThemeWrapper.jsx +1 -1
  254. package/src/hooks/assets/pointWG.json +13 -0
  255. package/src/hooks/exportMap/index.ts +30 -0
  256. package/src/hooks/exportMap/lib.ts +187 -0
  257. package/src/hooks/useLayer.test.js +188 -188
  258. package/src/hooks/useLayer.ts +194 -180
  259. package/src/hooks/useLayerEvent.js +49 -0
  260. package/src/hooks/useMap.ts +67 -66
  261. package/src/hooks/useMapState.stories.js +78 -78
  262. package/src/hooks/useMapState.ts +161 -161
  263. package/src/hooks/useSource.ts +84 -0
  264. package/src/hooks/useSources.stories.js +232 -0
  265. package/src/hooks/useWms.js +71 -71
  266. package/src/index.ts +3 -0
  267. package/src/setupTests.js +86 -86
  268. package/src/ui_components/ImageLoader.js +62 -62
  269. package/src/ui_components/Legend.js +34 -34
  270. package/src/ui_components/LoadingOverlay.js +29 -29
  271. package/src/ui_components/LoadingOverlayContext.js +68 -68
  272. package/src/ui_components/Sidebar.js +80 -80
  273. package/src/ui_components/Tooltip.js +9 -9
  274. package/src/ui_components/TopToolbar.js +23 -23
  275. package/src/util/layerRemovalTest.js +111 -111
  276. package/src/util/sourceRemovalTest.js +103 -103
@@ -12,213 +12,213 @@ import PropTypes from "prop-types";
12
12
  * @component
13
13
  */
14
14
  const MlSpatialElevationProfile = (props) => {
15
- const mapContext = useContext(MapContext);
16
-
17
- const componentId = useRef(
18
- (props.idPrefix ? props.idPrefix : "MlSpatialElevationProfile-") + uuidv4()
19
- );
20
- const mapRef = useRef(null);
21
- const initializedRef = useRef(false);
22
-
23
- const dataSource = useContext(GeoJsonContext);
24
- const sourceName = useRef("elevationprofile-" + uuidv4());
25
- const layerName = useRef("elevationprofile-layer-" + uuidv4());
26
-
27
- const createStep = useCallback(
28
- (x, y, z, x2, y2) => {
29
- //const summand = 0.0002;
30
- const line = lineString([
31
- [x, y],
32
- [x2, y2],
33
- ]);
34
- const offsetLine = lineOffset(line, 5, { units: "meters" });
35
- const x3 = offsetLine.geometry.coordinates[0][0];
36
- const y3 = offsetLine.geometry.coordinates[0][1];
37
- const x4 = offsetLine.geometry.coordinates[1][0];
38
- const y4 = offsetLine.geometry.coordinates[1][1];
39
-
40
- return polygon(
41
- [
42
- [
43
- [x, y],
44
- [x2, y2],
45
-
46
- [x4, y4],
47
- [x3, y3],
48
- [x, y],
49
- ],
50
- ],
51
- { height: z * props.elevationFactor }
52
- );
53
- },
54
- [props.elevationFactor]
55
- );
56
-
57
- useEffect(() => {
58
- let _componentId = componentId.current;
59
- return () => {
60
- // This is the cleanup function, it is called when this react component is removed from react-dom
61
- if (mapRef.current) {
62
- mapRef.current.cleanup(_componentId);
63
-
64
- mapRef.current = null;
65
- }
66
- };
67
- }, []);
68
-
69
- useEffect(() => {
70
- if (!mapContext.mapExists(props.mapId) || initializedRef.current) return;
71
-
72
- initializedRef.current = true;
73
- mapRef.current = mapContext.getMap(props.mapId);
74
-
75
- mapRef.current.addSource(
76
- sourceName.current,
77
- {
78
- type: "geojson",
79
- data: dataSource.data,
80
- },
81
- componentId.current
82
- );
83
- mapRef.current.addLayer(
84
- {
85
- id: layerName.current,
86
- source: sourceName.current,
87
- type: "fill-extrusion",
88
- paint: {
89
- "fill-extrusion-height": ["get", "height"],
90
- "fill-extrusion-opacity": 0.9,
91
- "fill-extrusion-color": [
92
- "interpolate",
93
- ["linear"],
94
- ["get", "height"],
95
- 0,
96
- "rgba(0, 0, 255, 0)",
97
- 0.1,
98
- "royalblue",
99
- 0.3,
100
- "cyan",
101
- 0.5,
102
- "lime",
103
- 0.7,
104
- "yellow",
105
- 1,
106
- "yellow",
107
- ],
108
- },
109
- },
110
- props.insertBeforeLayer,
111
- componentId.current
112
- );
113
- }, [mapContext.mapIds, props.insertBeforeLayer, props.mapId, dataSource, mapContext]);
114
-
115
- useEffect(() => {
116
- if (!mapRef.current || !mapRef.current.getLayer(layerName.current)) return;
117
- const { data } = dataSource;
118
- if (!data || !data.features) return;
119
-
120
- const line = data.features.find((element) => {
121
- return element.geometry.type === "LineString";
122
- });
123
- if (!line || !line.geometry) return;
124
- const heights = line.geometry.coordinates.map((coordinate, index) => {
125
- return coordinate[2];
126
- });
127
-
128
- const min = Math.min(...heights);
129
-
130
- let max = Math.max(...heights) - min;
131
-
132
- max = max === 0 ? 1 : max;
133
-
134
- mapRef.current.setPaintProperty(layerName.current, "fill-extrusion-color", [
135
- "interpolate",
136
- ["linear"],
137
- ["get", "height"],
138
- 0,
139
- "rgb(0,255,55)",
140
- max * props.elevationFactor,
141
- "rgb(255,0,0)",
142
- ]);
143
- const lerp = (x, y, a) => x * (1 - a) + y * a;
144
- const points = [];
145
-
146
- line.geometry.coordinates.forEach((coordinate, index) => {
147
- //const point = createPoint(coordinate[0],coordinate[1],coordinate[2]-min);
148
- //points.push(point);
149
- if (line.geometry.coordinates[index + 1]) {
150
- const wayLength = distance(
151
- [coordinate[0], coordinate[1]],
152
- [line.geometry.coordinates[index + 1][0], line.geometry.coordinates[index + 1][1]],
153
- { units: "kilometers" }
154
- );
155
- let listLength = ~~((wayLength * 1000) / 10);
156
- listLength = listLength < 1 ? 1 : listLength;
157
- for (let i = 0; i < listLength; i++) {
158
- const x = lerp(
159
- line.geometry.coordinates[index][0],
160
- line.geometry.coordinates[index + 1][0],
161
- i / listLength
162
- );
163
- const y = lerp(
164
- line.geometry.coordinates[index][1],
165
- line.geometry.coordinates[index + 1][1],
166
- i / listLength
167
- );
168
- const z = lerp(
169
- line.geometry.coordinates[index][2] - min,
170
- line.geometry.coordinates[index + 1][2] - min,
171
- i / listLength
172
- );
173
-
174
- const x2 = lerp(
175
- line.geometry.coordinates[index][0],
176
- line.geometry.coordinates[index + 1][0],
177
- (i + 1) / listLength
178
- );
179
- const y2 = lerp(
180
- line.geometry.coordinates[index][1],
181
- line.geometry.coordinates[index + 1][1],
182
- (i + 1) / listLength
183
- );
184
-
185
- const point = createStep(x, y, z, x2, y2);
186
- points.push(point);
187
- }
188
- }
189
- });
190
-
191
- const newData = dataSource.getEmptyFeatureCollection();
192
- newData.features = points;
193
-
194
- mapRef.current.getSource(sourceName.current)?.setData(newData);
195
- }, [dataSource.data, createStep, dataSource, props.elevationFactor, mapContext]);
196
-
197
- return <></>;
15
+ const mapContext = useContext(MapContext);
16
+
17
+ const componentId = useRef(
18
+ (props.idPrefix ? props.idPrefix : "MlSpatialElevationProfile-") + uuidv4()
19
+ );
20
+ const mapRef = useRef(null);
21
+ const initializedRef = useRef(false);
22
+
23
+ const dataSource = useContext(GeoJsonContext);
24
+ const sourceName = useRef("elevationprofile-" + uuidv4());
25
+ const layerName = useRef("elevationprofile-layer-" + uuidv4());
26
+
27
+ const createStep = useCallback(
28
+ (x, y, z, x2, y2) => {
29
+ //const summand = 0.0002;
30
+ const line = lineString([
31
+ [x, y],
32
+ [x2, y2],
33
+ ]);
34
+ const offsetLine = lineOffset(line, 5, { units: "meters" });
35
+ const x3 = offsetLine.geometry.coordinates[0][0];
36
+ const y3 = offsetLine.geometry.coordinates[0][1];
37
+ const x4 = offsetLine.geometry.coordinates[1][0];
38
+ const y4 = offsetLine.geometry.coordinates[1][1];
39
+
40
+ return polygon(
41
+ [
42
+ [
43
+ [x, y],
44
+ [x2, y2],
45
+
46
+ [x4, y4],
47
+ [x3, y3],
48
+ [x, y],
49
+ ],
50
+ ],
51
+ { height: z * props.elevationFactor }
52
+ );
53
+ },
54
+ [props.elevationFactor]
55
+ );
56
+
57
+ useEffect(() => {
58
+ let _componentId = componentId.current;
59
+ return () => {
60
+ // This is the cleanup function, it is called when this react component is removed from react-dom
61
+ if (mapRef.current) {
62
+ mapRef.current.cleanup(_componentId);
63
+
64
+ mapRef.current = null;
65
+ }
66
+ };
67
+ }, []);
68
+
69
+ useEffect(() => {
70
+ if (!mapContext.mapExists(props.mapId) || initializedRef.current) return;
71
+
72
+ initializedRef.current = true;
73
+ mapRef.current = mapContext.getMap(props.mapId);
74
+
75
+ mapRef.current.addSource(
76
+ sourceName.current,
77
+ {
78
+ type: "geojson",
79
+ data: dataSource.data,
80
+ },
81
+ componentId.current
82
+ );
83
+ mapRef.current.addLayer(
84
+ {
85
+ id: layerName.current,
86
+ source: sourceName.current,
87
+ type: "fill-extrusion",
88
+ paint: {
89
+ "fill-extrusion-height": ["get", "height"],
90
+ "fill-extrusion-opacity": 0.9,
91
+ "fill-extrusion-color": [
92
+ "interpolate",
93
+ ["linear"],
94
+ ["get", "height"],
95
+ 0,
96
+ "rgba(0, 0, 255, 0)",
97
+ 0.1,
98
+ "royalblue",
99
+ 0.3,
100
+ "cyan",
101
+ 0.5,
102
+ "lime",
103
+ 0.7,
104
+ "yellow",
105
+ 1,
106
+ "yellow",
107
+ ],
108
+ },
109
+ },
110
+ props.insertBeforeLayer,
111
+ componentId.current
112
+ );
113
+ }, [mapContext.mapIds, props.insertBeforeLayer, props.mapId, dataSource, mapContext]);
114
+
115
+ useEffect(() => {
116
+ if (!mapRef.current || !mapRef.current.getLayer(layerName.current)) return;
117
+ const { data } = dataSource;
118
+ if (!data || !data.features) return;
119
+
120
+ const line = data.features.find((element) => {
121
+ return element.geometry.type === "LineString";
122
+ });
123
+ if (!line || !line.geometry) return;
124
+ const heights = line.geometry.coordinates.map((coordinate, index) => {
125
+ return coordinate[2];
126
+ });
127
+
128
+ const min = Math.min(...heights);
129
+
130
+ let max = Math.max(...heights) - min;
131
+
132
+ max = max === 0 ? 1 : max;
133
+
134
+ mapRef.current.setPaintProperty(layerName.current, "fill-extrusion-color", [
135
+ "interpolate",
136
+ ["linear"],
137
+ ["get", "height"],
138
+ 0,
139
+ "rgb(0,255,55)",
140
+ max * props.elevationFactor,
141
+ "rgb(255,0,0)",
142
+ ]);
143
+ const lerp = (x, y, a) => x * (1 - a) + y * a;
144
+ const points = [];
145
+
146
+ line.geometry.coordinates.forEach((coordinate, index) => {
147
+ //const point = createPoint(coordinate[0],coordinate[1],coordinate[2]-min);
148
+ //points.push(point);
149
+ if (line.geometry.coordinates[index + 1]) {
150
+ const wayLength = distance(
151
+ [coordinate[0], coordinate[1]],
152
+ [line.geometry.coordinates[index + 1][0], line.geometry.coordinates[index + 1][1]],
153
+ { units: "kilometers" }
154
+ );
155
+ let listLength = ~~((wayLength * 1000) / 10);
156
+ listLength = listLength < 1 ? 1 : listLength;
157
+ for (let i = 0; i < listLength; i++) {
158
+ const x = lerp(
159
+ line.geometry.coordinates[index][0],
160
+ line.geometry.coordinates[index + 1][0],
161
+ i / listLength
162
+ );
163
+ const y = lerp(
164
+ line.geometry.coordinates[index][1],
165
+ line.geometry.coordinates[index + 1][1],
166
+ i / listLength
167
+ );
168
+ const z = lerp(
169
+ line.geometry.coordinates[index][2] - min,
170
+ line.geometry.coordinates[index + 1][2] - min,
171
+ i / listLength
172
+ );
173
+
174
+ const x2 = lerp(
175
+ line.geometry.coordinates[index][0],
176
+ line.geometry.coordinates[index + 1][0],
177
+ (i + 1) / listLength
178
+ );
179
+ const y2 = lerp(
180
+ line.geometry.coordinates[index][1],
181
+ line.geometry.coordinates[index + 1][1],
182
+ (i + 1) / listLength
183
+ );
184
+
185
+ const point = createStep(x, y, z, x2, y2);
186
+ points.push(point);
187
+ }
188
+ }
189
+ });
190
+
191
+ const newData = dataSource.getEmptyFeatureCollection();
192
+ newData.features = points;
193
+
194
+ mapRef.current.getSource(sourceName.current)?.setData(newData);
195
+ }, [dataSource.data, createStep, dataSource, props.elevationFactor, mapContext]);
196
+
197
+ return <></>;
198
198
  };
199
199
 
200
200
  MlSpatialElevationProfile.defaultProps = {
201
- elevationFactor: 1,
201
+ elevationFactor: 1,
202
202
  };
203
203
 
204
204
  MlSpatialElevationProfile.propTypes = {
205
- /**
206
- * Id of the target MapLibre instance in mapContext
207
- */
208
- mapId: PropTypes.string,
209
- /**
210
- * Prefix of the component id this component uses when adding elements to the MapLibreGl-instance
211
- */
212
- idPrefix: PropTypes.string,
213
- /**
214
- * Number describes the factor of the height of the elevation
215
- */
216
- elevationFactor: PropTypes.number,
217
- /**
218
- * The layerId of an existing layer this layer should be rendered visually beneath
219
- * https://maplibre.org/maplibre-gl-js-docs/api/map/#map#addlayer - see "beforeId" property
220
- */
221
- insertBeforeLayer: PropTypes.string,
205
+ /**
206
+ * Id of the target MapLibre instance in mapContext
207
+ */
208
+ mapId: PropTypes.string,
209
+ /**
210
+ * Prefix of the component id this component uses when adding elements to the MapLibreGl-instance
211
+ */
212
+ idPrefix: PropTypes.string,
213
+ /**
214
+ * Number describes the factor of the height of the elevation
215
+ */
216
+ elevationFactor: PropTypes.number,
217
+ /**
218
+ * The layerId of an existing layer this layer should be rendered visually beneath
219
+ * https://maplibre.org/maplibre-gl-js-docs/api/map/#map#addlayer - see "beforeId" property
220
+ */
221
+ insertBeforeLayer: PropTypes.string,
222
222
  };
223
223
 
224
224
  export default MlSpatialElevationProfile;
@@ -10,46 +10,46 @@ import IconButton from "@mui/material/IconButton";
10
10
  import useMediaQuery from "@mui/material/useMediaQuery";
11
11
 
12
12
  const storyoptions = {
13
- title: "MapComponents/MlSpatialElevationProfile",
14
- component: MlSpatialElevationProfile,
15
- argTypes: {
16
- options: {
17
- control: {
18
- type: "object",
19
- },
20
- },
21
- },
22
- decorators: mapContextDecorator,
13
+ title: "MapComponents/MlSpatialElevationProfile",
14
+ component: MlSpatialElevationProfile,
15
+ argTypes: {
16
+ options: {
17
+ control: {
18
+ type: "object",
19
+ },
20
+ },
21
+ },
22
+ decorators: mapContextDecorator,
23
23
  };
24
24
  export default storyoptions;
25
25
 
26
26
  const Template = (args) => {
27
27
 
28
- const mediaIsMobile = useMediaQuery("(max-width:900px)");
29
-
30
- return(
31
- <>
32
- <IconButton
33
- style={{
34
- position: "absolute",
35
- right: "5px",
36
- bottom: mediaIsMobile ? "145px" : "125px",
37
- backgroundColor: "rgba(255,255,255,1)",
38
-
39
- zIndex: 1000,
40
- }}
41
- title="Download sample-data"
42
- size="large"
43
- href="assets/sample.gpx"
44
- target="blank"
45
- >
46
- <FileDownloadIcon />
47
- </IconButton>
48
- <GeoJsonProvider>
49
- <MlGPXViewer />
50
- <MlSpatialElevationProfile />
51
- </GeoJsonProvider>
52
- </>
28
+ const mediaIsMobile = useMediaQuery("(max-width:900px)");
29
+
30
+ return(
31
+ <>
32
+ <IconButton
33
+ style={{
34
+ position: "absolute",
35
+ right: "5px",
36
+ bottom: mediaIsMobile ? "145px" : "125px",
37
+ backgroundColor: "rgba(255,255,255,1)",
38
+
39
+ zIndex: 1000,
40
+ }}
41
+ title="Download sample-data"
42
+ size="large"
43
+ href="assets/sample.gpx"
44
+ target="blank"
45
+ >
46
+ <FileDownloadIcon />
47
+ </IconButton>
48
+ <GeoJsonProvider>
49
+ <MlGPXViewer />
50
+ <MlSpatialElevationProfile />
51
+ </GeoJsonProvider>
52
+ </>
53
53
  );
54
54
  }
55
55
 
@@ -6,14 +6,14 @@ import { uuid_regex } from "../../setupTests";
6
6
  const testComponent = <MlSpatialElevationProfile />;
7
7
 
8
8
  layerRemovalTest(
9
- "<MlSpatialElevationProfile />",
10
- testComponent,
11
- new RegExp('^.*"elevationprofile-layer-' + uuid_regex + '".*$'),
12
- "elevationprofile-layer-{uuid}"
9
+ "<MlSpatialElevationProfile />",
10
+ testComponent,
11
+ new RegExp('^.*"elevationprofile-layer-' + uuid_regex + '".*$'),
12
+ "elevationprofile-layer-{uuid}"
13
13
  );
14
14
  sourceRemovalTest(
15
- "<MlSpatialElevationProfile />",
16
- testComponent,
17
- new RegExp('^.*"elevationprofile-' + uuid_regex + '".*$'),
18
- "elevationprofile-{uuid}"
15
+ "<MlSpatialElevationProfile />",
16
+ testComponent,
17
+ new RegExp('^.*"elevationprofile-' + uuid_regex + '".*$'),
18
+ "elevationprofile-{uuid}"
19
19
  );