@mapcomponents/react-maplibre 0.1.56 → 0.1.58

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 (277) 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 +20 -0
  7. package/coverage/clover.xml +232 -80
  8. package/coverage/coverage-final.json +43 -37
  9. package/coverage/lcov-report/index.html +71 -26
  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 +89 -89
  55. package/coverage/lcov-report/src/components/MlScaleReference/index.html +11 -11
  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 +14 -2
  90. package/coverage/lcov.info +450 -153
  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/decorators/ThemeWrapper.d.ts +1 -0
  104. package/dist/hooks/exportMap/index.d.ts +11 -0
  105. package/dist/hooks/exportMap/lib.d.ts +36 -0
  106. package/dist/hooks/useLayer.d.ts +6 -5
  107. package/dist/hooks/useLayerEvent.d.ts +2 -0
  108. package/dist/hooks/useMap.d.ts +1 -1
  109. package/dist/hooks/useMapState.stories.d.ts +2 -2
  110. package/dist/hooks/useSource.d.ts +17 -0
  111. package/dist/hooks/useSources.stories.d.ts +13 -0
  112. package/dist/index.d.ts +4 -0
  113. package/dist/index.esm.js +479 -190
  114. package/dist/index.esm.js.map +1 -1
  115. package/eslintErrorTest.js +10 -0
  116. package/package.json +7 -1
  117. package/public/thumbnails/MlCreatePdfForm.png +0 -0
  118. package/src/components/MapLibreMap/MapLibreMap.stories.js +72 -72
  119. package/src/components/MapLibreMap/MapLibreMap.test.js +60 -60
  120. package/src/components/MapLibreMap/MapLibreMap.tsx +82 -82
  121. package/src/components/MapLibreMap/lib/MapLibreGlWrapper.test.js +343 -343
  122. package/src/components/MapLibreMap/lib/MapLibreGlWrapper.ts +619 -619
  123. package/src/components/MlBasicComponent.js +25 -25
  124. package/src/components/MlCenterPosition/MlCenterPosition.stories.js +6 -6
  125. package/src/components/MlCenterPosition/MlCenterPosition.tsx +65 -65
  126. package/src/components/MlComponentTemplate/MlComponentTemplate.stories.js +5 -5
  127. package/src/components/MlComponentTemplate/MlComponentTemplate.tsx +23 -23
  128. package/src/components/MlCreatePdfButton/{MlCreatePdfButton.meta.json → MlCreatePdfButton.meta_.json} +0 -0
  129. package/src/components/MlCreatePdfButton/MlCreatePdfButton.stories.js +16 -16
  130. package/src/components/MlCreatePdfButton/MlCreatePdfButton.tsx +29 -29
  131. package/src/components/MlCreatePdfButton/lib/createPdf.ts +175 -175
  132. package/src/components/MlCreatePdfButton/lib/nominatimMap.ts +51 -51
  133. package/src/components/MlCreatePdfForm/MlCreatePdfForm.doc.de.md +3 -0
  134. package/src/components/MlCreatePdfForm/MlCreatePdfForm.meta.json +15 -0
  135. package/src/components/MlCreatePdfForm/MlCreatePdfForm.stories.tsx +152 -0
  136. package/src/components/MlCreatePdfForm/MlCreatePdfForm.tsx +39 -0
  137. package/src/components/MlCreatePdfForm/lib/PdfContext.tsx +53 -0
  138. package/src/components/MlCreatePdfForm/lib/PdfForm.tsx +161 -0
  139. package/src/components/MlCreatePdfForm/lib/PdfPreview.tsx +399 -0
  140. package/src/components/MlCreatePdfForm/lib/pdf.templates.ts +82 -0
  141. package/src/components/MlFeatureEditor/MlFeatureEditor.stories.js +55 -55
  142. package/src/components/MlFeatureEditor/MlFeatureEditor.test.js +105 -105
  143. package/src/components/MlFeatureEditor/MlFeatureEditor.tsx +119 -119
  144. package/src/components/MlFeatureEditor/custom-direct-select-mode.js +208 -208
  145. package/src/components/MlFeatureEditor/custom-polygon-mode.js +148 -148
  146. package/src/components/MlFeatureEditor/custom-select-mode.js +314 -314
  147. package/src/components/MlFeatureEditor/lib/common_selectors.js +34 -34
  148. package/src/components/MlFeatureEditor/lib/constants.js +61 -61
  149. package/src/components/MlFeatureEditor/lib/constrain_feature_movement.js +51 -51
  150. package/src/components/MlFeatureEditor/lib/create_midpoint.js +30 -30
  151. package/src/components/MlFeatureEditor/lib/create_supplementary_points.js +82 -82
  152. package/src/components/MlFeatureEditor/lib/create_vertex.js +16 -16
  153. package/src/components/MlFeatureEditor/lib/double_click_zoom.js +23 -23
  154. package/src/components/MlFeatureEditor/lib/euclidean_distance.js +3 -3
  155. package/src/components/MlFeatureEditor/lib/features_at.js +23 -23
  156. package/src/components/MlFeatureEditor/lib/get_features_and_set_cursor.js +15 -15
  157. package/src/components/MlFeatureEditor/lib/is_click.js +8 -8
  158. package/src/components/MlFeatureEditor/lib/is_event_at_coordinates.js +2 -2
  159. package/src/components/MlFeatureEditor/lib/is_tap.js +6 -6
  160. package/src/components/MlFeatureEditor/lib/map_event_to_bounding_box.js +4 -4
  161. package/src/components/MlFeatureEditor/lib/mode_handler.js +105 -105
  162. package/src/components/MlFeatureEditor/lib/mouse_event_point.js +5 -5
  163. package/src/components/MlFeatureEditor/lib/move_features.js +33 -33
  164. package/src/components/MlFeatureEditor/lib/sort_features.js +25 -25
  165. package/src/components/MlFeatureEditor/lib/string_set.js +36 -36
  166. package/src/components/MlFeatureEditor/lib/string_sets_are_equal.js +2 -2
  167. package/src/components/MlFeatureEditor/lib/theme.js +230 -230
  168. package/src/components/MlFeatureEditor/lib/to_dense_array.js +1 -1
  169. package/src/components/MlFeatureEditor/lib/utils.js +40 -40
  170. package/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.stories.js +9 -9
  171. package/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.test.js +4 -4
  172. package/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.tsx +65 -65
  173. package/src/components/MlFollowGps/MlFollowGps.stories.js +6 -6
  174. package/src/components/MlFollowGps/MlFollowGps.test.js +44 -44
  175. package/src/components/MlFollowGps/MlFollowGps.tsx +220 -220
  176. package/src/components/MlGPXViewer/MlGPXViewer.stories.js +15 -15
  177. package/src/components/MlGPXViewer/MlGPXViewer.test.js +12 -12
  178. package/src/components/MlGPXViewer/MlGPXViewer.tsx +345 -345
  179. package/src/components/MlGPXViewer/gpxConverter.js +496 -496
  180. package/src/components/MlGPXViewer/util/GeoJsonContext.ts +4 -4
  181. package/src/components/MlGPXViewer/util/GeoJsonProvider.tsx +16 -16
  182. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.stories.js +34 -34
  183. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.test.js +8 -8
  184. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.tsx +84 -84
  185. package/src/components/MlGeoJsonLayer/util/getDefaultLayerTypeByGeometry.ts +21 -21
  186. package/src/components/MlGeoJsonLayer/util/getDefaultPaintPropsByType.ts +27 -27
  187. package/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.doc.de.md +3 -0
  188. package/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.meta_.json +15 -0
  189. package/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.stories.js +19 -0
  190. package/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.tsx +128 -0
  191. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.stories.js +28 -28
  192. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.test.js +8 -8
  193. package/src/components/MlImageMarkerLayer/MlImageMarkerLayer.tsx +162 -162
  194. package/src/components/MlLayer/MlLayer.stories.js +5 -5
  195. package/src/components/MlLayer/MlLayer.test.js +86 -86
  196. package/src/components/MlLayer/MlLayer.tsx +36 -36
  197. package/src/components/MlLayerMagnify/MlLayerMagnify.stories.js +21 -21
  198. package/src/components/MlLayerMagnify/MlLayerMagnify.test.js +54 -54
  199. package/src/components/MlLayerMagnify/MlLayerMagnify.tsx +201 -201
  200. package/src/components/MlLayerSwipe/MlLayerSwipe.stories.js +20 -20
  201. package/src/components/MlLayerSwipe/MlLayerSwipe.test.js +54 -54
  202. package/src/components/MlLayerSwipe/MlLayerSwipe.tsx +130 -130
  203. package/src/components/MlLayerSwitcher/MlLayerSwitcher.js +194 -194
  204. package/src/components/MlLayerSwitcher/MlLayerSwitcher.stories.js +85 -85
  205. package/src/components/MlLayerSwitcher/components/LayerBox.js +57 -57
  206. package/src/components/MlMarker/MlMarker.stories.js +7 -7
  207. package/src/components/MlMarker/MlMarker.tsx +119 -119
  208. package/src/components/MlMeasureTool/MlMeasureTool.stories.js +64 -64
  209. package/src/components/MlMeasureTool/MlMeasureTool.tsx +38 -38
  210. package/src/components/MlNavigationCompass/MlNavigationCompass.stories.js +45 -45
  211. package/src/components/MlNavigationCompass/MlNavigationCompass.test.js +40 -40
  212. package/src/components/MlNavigationCompass/MlNavigationCompass.tsx +192 -192
  213. package/src/components/MlNavigationTools/MlNavigationTools.stories.js +18 -18
  214. package/src/components/MlNavigationTools/MlNavigationTools.tsx +173 -173
  215. package/src/components/MlOsmLayer/MlOsmLayer.js +49 -49
  216. package/src/components/MlOsmLayer/MlOsmLayer.stories_.js +29 -29
  217. package/src/components/MlOsmLayer/MlOsmLayer.test.js +8 -8
  218. package/src/components/MlScaleReference/MlScaleReference.js +82 -82
  219. package/src/components/MlScaleReference/MlScaleReference.stories.js +33 -35
  220. package/src/components/MlShareMapState/MlShareMapState.js +203 -203
  221. package/src/components/MlShareMapState/MlShareMapState.stories.js +68 -68
  222. package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.js +201 -201
  223. package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.stories.js +35 -35
  224. package/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.test.js +8 -8
  225. package/src/components/MlThreeJsLayer/MlThreeJsLayer.js +186 -186
  226. package/src/components/MlThreeJsLayer/MlThreeJsLayer.stories.js +21 -21
  227. package/src/components/MlThreeJsLayer/MlThreeJsLayer.test.js +24 -24
  228. package/src/components/MlThreeJsLayer/lib/GLTFLoader.js +3327 -3327
  229. package/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.stories.js +31 -30
  230. package/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.test.js +8 -8
  231. package/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.tsx +146 -146
  232. package/src/components/MlTransitionGeoJsonLayer/util/transitionFunctions.js +207 -207
  233. package/src/components/MlUseMapDebugger/MlUseMapDebugger.js +52 -52
  234. package/src/components/MlUseMapDebugger/MlUseMapDebugger.stories.js +13 -13
  235. package/src/components/MlVectorTileLayer/MlVectorTileLayer.stories.js +27 -27
  236. package/src/components/MlVectorTileLayer/MlVectorTileLayer.test.js +27 -27
  237. package/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx +137 -137
  238. package/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js +34 -34
  239. package/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.stories.js +7 -7
  240. package/src/components/MlWmsLayer/MlWmsLayer.stories.js +26 -26
  241. package/src/components/MlWmsLayer/MlWmsLayer.test.js +8 -8
  242. package/src/components/MlWmsLayer/MlWmsLayer.tsx +167 -167
  243. package/src/components/MlWmsLoader/MlWmsLoader.stories.js +27 -27
  244. package/src/components/MlWmsLoader/MlWmsLoader.tsx +254 -254
  245. package/src/contexts/MapComponentsProvider.test.js +229 -229
  246. package/src/contexts/MapContext.tsx +65 -65
  247. package/src/contexts/SimpleDataProvider.js +47 -47
  248. package/src/contexts/SimpleDataProvider.test.js +29 -29
  249. package/src/custom.d.tsx +14 -14
  250. package/src/decorators/MapContextDecorator.js +23 -25
  251. package/src/decorators/MapContextDecoratorHooks.js +34 -0
  252. package/src/decorators/MultiMapContextDecorator.js +63 -63
  253. package/src/decorators/NoNavToolsDecorator.js +17 -17
  254. package/src/decorators/ThemeWrapper.jsx +9 -0
  255. package/src/hooks/assets/pointWG.json +13 -0
  256. package/src/hooks/exportMap/index.ts +30 -0
  257. package/src/hooks/exportMap/lib.ts +187 -0
  258. package/src/hooks/useLayer.test.js +188 -188
  259. package/src/hooks/useLayer.ts +194 -180
  260. package/src/hooks/useLayerEvent.js +49 -0
  261. package/src/hooks/useMap.ts +67 -66
  262. package/src/hooks/useMapState.stories.js +78 -78
  263. package/src/hooks/useMapState.ts +161 -161
  264. package/src/hooks/useSource.ts +84 -0
  265. package/src/hooks/useSources.stories.js +232 -0
  266. package/src/hooks/useWms.js +71 -71
  267. package/src/index.ts +4 -0
  268. package/src/setupTests.js +86 -86
  269. package/src/ui_components/ImageLoader.js +62 -62
  270. package/src/ui_components/Legend.js +34 -34
  271. package/src/ui_components/LoadingOverlay.js +29 -29
  272. package/src/ui_components/LoadingOverlayContext.js +68 -68
  273. package/src/ui_components/Sidebar.js +80 -80
  274. package/src/ui_components/Tooltip.js +9 -9
  275. package/src/ui_components/TopToolbar.js +23 -23
  276. package/src/util/layerRemovalTest.js +111 -111
  277. package/src/util/sourceRemovalTest.js +103 -103
@@ -19,41 +19,41 @@ import MapLibreGlWrapper from "../MapLibreMap/lib/MapLibreGlWrapper";
19
19
 
20
20
  var originShift = (2 * Math.PI * 6378137) / 2.0;
21
21
  const lngLatToMeters = function (lnglat: LngLat, accuracy = { enable: true, decimal: 1 }) {
22
- var lng = lnglat.lng;
23
- var lat = lnglat.lat;
24
- var x = (lng * originShift) / 180.0;
25
- var y = Math.log(Math.tan(((90 + lat) * Math.PI) / 360.0)) / (Math.PI / 180.0);
26
- y = (y * originShift) / 180.0;
27
- if (accuracy.enable) {
28
- x = Number(x.toFixed(accuracy.decimal));
29
- y = Number(y.toFixed(accuracy.decimal));
30
- }
31
- return [x, y];
22
+ var lng = lnglat.lng;
23
+ var lat = lnglat.lat;
24
+ var x = (lng * originShift) / 180.0;
25
+ var y = Math.log(Math.tan(((90 + lat) * Math.PI) / 360.0)) / (Math.PI / 180.0);
26
+ y = (y * originShift) / 180.0;
27
+ if (accuracy.enable) {
28
+ x = Number(x.toFixed(accuracy.decimal));
29
+ y = Number(y.toFixed(accuracy.decimal));
30
+ }
31
+ return [x, y];
32
32
  };
33
33
 
34
34
  interface MlWmsLoaderProps {
35
- /**
36
- * WMS URL
37
- */
38
- url: string;
39
- /**
40
- * Id of the target MapLibre instance in mapContext
41
- */
42
- mapId: string;
43
- /**
44
- * URL parameters that will be used in the getCapabilities request
45
- */
46
- urlParameters: object;
47
- /**
48
- * URL parameters that will be added when requesting WMS capabilities
49
- */
50
- wmsUrlParameters: object;
51
- /**
52
- * URL parameters that will be added when requesting tiles
53
- */
54
- layerUrlParameters: object;
55
- lngLat: LngLat;
56
- idPrefix: string;
35
+ /**
36
+ * WMS URL
37
+ */
38
+ url: string;
39
+ /**
40
+ * Id of the target MapLibre instance in mapContext
41
+ */
42
+ mapId: string;
43
+ /**
44
+ * URL parameters that will be used in the getCapabilities request
45
+ */
46
+ urlParameters: object;
47
+ /**
48
+ * URL parameters that will be added when requesting WMS capabilities
49
+ */
50
+ wmsUrlParameters: object;
51
+ /**
52
+ * URL parameters that will be added when requesting tiles
53
+ */
54
+ layerUrlParameters: object;
55
+ lngLat: LngLat;
56
+ idPrefix: string;
57
57
  }
58
58
 
59
59
  /**
@@ -65,253 +65,253 @@ interface MlWmsLoaderProps {
65
65
  * @component
66
66
  */
67
67
  const MlWmsLoader = (props: MlWmsLoaderProps) => {
68
- // Use a useRef hook to reference the layer object to be able to access it later inside useEffect hooks
69
- const mapContext: MapContextType = useContext(MapContext);
70
- const { capabilities, error, setUrl, getFeatureInfoUrl, wmsUrl }: any = useWms({
71
- url: undefined,
72
- urlParameters: props.urlParameters,
73
- });
74
- let layerType: {
75
- visible: boolean;
76
- queryable: boolean;
77
- Name: string;
78
- Title: string;
79
- LatLonBoundingBox: Array<number>;
80
- EX_GeographicBoundingBox: Array<number>;
81
- Abstract: any;
82
- };
68
+ // Use a useRef hook to reference the layer object to be able to access it later inside useEffect hooks
69
+ const mapContext: MapContextType = useContext(MapContext);
70
+ const { capabilities, error, setUrl, getFeatureInfoUrl, wmsUrl }: any = useWms({
71
+ url: undefined,
72
+ urlParameters: props.urlParameters,
73
+ });
74
+ let layerType: {
75
+ visible: boolean;
76
+ queryable: boolean;
77
+ Name: string;
78
+ Title: string;
79
+ LatLonBoundingBox: Array<number>;
80
+ EX_GeographicBoundingBox: Array<number>;
81
+ Abstract: any;
82
+ };
83
83
 
84
- const initializedRef = useRef(false);
85
- const mapRef = useRef<MapLibreGlWrapper>();
86
- const componentId = useRef((props.idPrefix ? props.idPrefix : "MlWmsLoader-") + uuidv4());
87
- const [layers, setLayers] = useState<Array<typeof layerType>>([]);
84
+ const initializedRef = useRef(false);
85
+ const mapRef = useRef<MapLibreGlWrapper>();
86
+ const componentId = useRef((props.idPrefix ? props.idPrefix : "MlWmsLoader-") + uuidv4());
87
+ const [layers, setLayers] = useState<Array<typeof layerType>>([]);
88
88
 
89
- const [featureInfoLngLat, setFeatureInfoLngLat] = useState<{lng:number,lat:number} | undefined>();
90
- const [featureInfoContent, setFeatureInfoContent] = useState<string | undefined>(undefined);
89
+ const [featureInfoLngLat, setFeatureInfoLngLat] = useState<{lng:number,lat:number} | undefined>();
90
+ const [featureInfoContent, setFeatureInfoContent] = useState<string | undefined>(undefined);
91
91
 
92
- useEffect(() => {
93
- let _componentId = componentId.current;
92
+ useEffect(() => {
93
+ let _componentId = componentId.current;
94
94
 
95
- return () => {
96
- // This is the cleanup function, it is called when this react component is removed from react-dom
97
- // try to remove anything this component has added to the MapLibre-gl instance
98
- // e.g.: remove the layer
99
- // mapContext.getMap(props.mapId).removeLayer(layerRef.current);
100
- // check for the existence of map.style before calling getLayer or getSource
95
+ return () => {
96
+ // This is the cleanup function, it is called when this react component is removed from react-dom
97
+ // try to remove anything this component has added to the MapLibre-gl instance
98
+ // e.g.: remove the layer
99
+ // mapContext.getMap(props.mapId).removeLayer(layerRef.current);
100
+ // check for the existence of map.style before calling getLayer or getSource
101
101
 
102
- if (mapRef.current) {
103
- mapRef.current.cleanup(_componentId);
104
- mapRef.current = undefined;
105
- }
106
- initializedRef.current = false;
107
- };
108
- }, []);
102
+ if (mapRef.current) {
103
+ mapRef.current.cleanup(_componentId);
104
+ mapRef.current = undefined;
105
+ }
106
+ initializedRef.current = false;
107
+ };
108
+ }, []);
109
109
 
110
- useEffect(() => {
111
- if (!initializedRef.current) return;
110
+ useEffect(() => {
111
+ if (!initializedRef.current) return;
112
112
 
113
- setUrl(props.url);
114
- }, [props.url]);
113
+ setUrl(props.url);
114
+ }, [props.url]);
115
115
 
116
- const getFeatureInfo = useCallback(
117
- (ev) => {
118
- if (!mapRef.current) return;
119
- setFeatureInfoLngLat(undefined);
120
- setFeatureInfoContent(undefined);
121
- let _bounds = mapRef.current.map.getBounds();
122
- let _sw = lngLatToMeters(_bounds._sw);
123
- let _ne = lngLatToMeters(_bounds._ne);
124
- let bbox = [_sw[0], _sw[1], _ne[0], _ne[1]];
125
- let _getFeatureInfoUrlParams = {
126
- REQUEST: "GetFeatureInfo",
116
+ const getFeatureInfo = useCallback(
117
+ (ev) => {
118
+ if (!mapRef.current) return;
119
+ setFeatureInfoLngLat(undefined);
120
+ setFeatureInfoContent(undefined);
121
+ let _bounds = mapRef.current.map.getBounds();
122
+ let _sw = lngLatToMeters(_bounds._sw);
123
+ let _ne = lngLatToMeters(_bounds._ne);
124
+ let bbox = [_sw[0], _sw[1], _ne[0], _ne[1]];
125
+ let _getFeatureInfoUrlParams = {
126
+ REQUEST: "GetFeatureInfo",
127
127
 
128
- BBOX: bbox.join(","),
129
- SERVICE: "WMS",
130
- INFO_FORMAT:
131
- capabilities?.Capability?.Request?.GetFeatureInfo.Format.indexOf("text/html") !== -1
132
- ? "text/html"
133
- : "text/plain",
134
- FEATURE_COUNT: "10",
135
- LAYERS: layers
136
- .map((layer: typeof layerType) =>
137
- layer.visible && layer.queryable ? layer.Name : undefined
138
- )
139
- .filter((n) => n),
140
- QUERY_LAYERS: layers
141
- .map((layer: typeof layerType) =>
142
- layer.visible && layer.queryable ? layer.Name : undefined
143
- )
144
- .filter((n) => n),
145
- WIDTH: mapRef.current?.map._container.clientWidth,
146
- HEIGHT: mapRef.current?.map._container.clientHeight,
147
- srs: "EPSG:3857",
148
- CRS: "EPSG:3857",
149
- version: "1.3.0",
150
- X: ev.point.x,
151
- Y: ev.point.y,
152
- I: ev.point.x,
153
- J: ev.point.y,
154
- buffer: "50",
155
- };
128
+ BBOX: bbox.join(","),
129
+ SERVICE: "WMS",
130
+ INFO_FORMAT:
131
+ capabilities?.Capability?.Request?.GetFeatureInfo.Format.indexOf("text/html") !== -1
132
+ ? "text/html"
133
+ : "text/plain",
134
+ FEATURE_COUNT: "10",
135
+ LAYERS: layers
136
+ .map((layer: typeof layerType) =>
137
+ layer.visible && layer.queryable ? layer.Name : undefined
138
+ )
139
+ .filter((n) => n),
140
+ QUERY_LAYERS: layers
141
+ .map((layer: typeof layerType) =>
142
+ layer.visible && layer.queryable ? layer.Name : undefined
143
+ )
144
+ .filter((n) => n),
145
+ WIDTH: mapRef.current?.map._container.clientWidth,
146
+ HEIGHT: mapRef.current?.map._container.clientHeight,
147
+ srs: "EPSG:3857",
148
+ CRS: "EPSG:3857",
149
+ version: "1.3.0",
150
+ X: ev.point.x,
151
+ Y: ev.point.y,
152
+ I: ev.point.x,
153
+ J: ev.point.y,
154
+ buffer: "50",
155
+ };
156
156
 
157
- let _gfiUrl: string | undefined = getFeatureInfoUrl;
158
- let _gfiUrlParts;
159
- if (_gfiUrl?.indexOf?.("?") !== -1) {
160
- _gfiUrlParts = props.url.split("?");
161
- _gfiUrl = _gfiUrlParts[0];
162
- }
163
- let _urlParamsFromUrl = new URLSearchParams(_gfiUrlParts?.[1]);
157
+ let _gfiUrl: string | undefined = getFeatureInfoUrl;
158
+ let _gfiUrlParts;
159
+ if (_gfiUrl?.indexOf?.("?") !== -1) {
160
+ _gfiUrlParts = props.url.split("?");
161
+ _gfiUrl = _gfiUrlParts[0];
162
+ }
163
+ let _urlParamsFromUrl = new URLSearchParams(_gfiUrlParts?.[1]);
164
164
 
165
- let urlParamsObj = {
166
- ...Object.fromEntries(_urlParamsFromUrl),
167
- ..._getFeatureInfoUrlParams,
168
- };
169
- // create URLSearchParams object to assemble the URL Parameters
170
- // "as any" can be removed once the URLSearchParams ts spec is fixed
171
- let urlParams = new URLSearchParams(urlParamsObj as any);
165
+ let urlParamsObj = {
166
+ ...Object.fromEntries(_urlParamsFromUrl),
167
+ ..._getFeatureInfoUrlParams,
168
+ };
169
+ // create URLSearchParams object to assemble the URL Parameters
170
+ // "as any" can be removed once the URLSearchParams ts spec is fixed
171
+ let urlParams = new URLSearchParams(urlParamsObj as any);
172
172
 
173
- fetch(props.url + "?" + urlParams.toString())
174
- .then((res) => {
175
- if (!res.ok) {
176
- throw new Error("FeatureInfo could not be fetched");
177
- }
178
- return res.text();
179
- })
180
- .then((text) => {
181
- setFeatureInfoLngLat(ev.lngLat);
182
- setFeatureInfoContent(text);
183
- })
184
- .catch((error) => console.log(error));
185
- },
186
- [capabilities, getFeatureInfoUrl]
187
- );
173
+ fetch(props.url + "?" + urlParams.toString())
174
+ .then((res) => {
175
+ if (!res.ok) {
176
+ throw new Error("FeatureInfo could not be fetched");
177
+ }
178
+ return res.text();
179
+ })
180
+ .then((text) => {
181
+ setFeatureInfoLngLat(ev.lngLat);
182
+ setFeatureInfoContent(text);
183
+ })
184
+ .catch((error) => console.log(error));
185
+ },
186
+ [capabilities, getFeatureInfoUrl]
187
+ );
188
188
 
189
- useEffect(() => {
190
- if (!mapRef.current) return;
189
+ useEffect(() => {
190
+ if (!mapRef.current) return;
191
191
 
192
- const _getFeatureInfo = getFeatureInfo;
192
+ const _getFeatureInfo = getFeatureInfo;
193
193
 
194
- mapRef.current.on("click", _getFeatureInfo, componentId.current);
195
- return () => {
196
- mapRef.current?.map.off?.("click", _getFeatureInfo);
197
- };
198
- }, [getFeatureInfo]);
194
+ mapRef.current.on("click", _getFeatureInfo, componentId.current);
195
+ return () => {
196
+ mapRef.current?.map.off?.("click", _getFeatureInfo);
197
+ };
198
+ }, [getFeatureInfo]);
199
199
 
200
- useEffect(() => {
201
- if (!capabilities?.Service) return;
200
+ useEffect(() => {
201
+ if (!capabilities?.Service) return;
202
202
 
203
- if (capabilities?.Capability?.Layer?.SRS?.indexOf?.("EPSG:3857") === -1) {
204
- console.log(
205
- "MlWmsLoader (" + capabilities.Service.Title + "): No WGS 84/Pseudo-Mercator support"
206
- );
207
- } else {
208
- console.log(
209
- "MlWmsLoader (" + capabilities.Service.Title + "): WGS 84/Pseudo-Mercator supported"
210
- );
203
+ if (capabilities?.Capability?.Layer?.SRS?.indexOf?.("EPSG:3857") === -1) {
204
+ console.log(
205
+ "MlWmsLoader (" + capabilities.Service.Title + "): No WGS 84/Pseudo-Mercator support"
206
+ );
207
+ } else {
208
+ console.log(
209
+ "MlWmsLoader (" + capabilities.Service.Title + "): WGS 84/Pseudo-Mercator supported"
210
+ );
211
211
 
212
- let _LatLonBoundingBox: Array<number> = [];
213
- setLayers(
214
- capabilities?.Capability?.Layer?.Layer.map((layer: typeof layerType, idx: number) => {
215
- if (idx === 0) {
216
- _LatLonBoundingBox = layer.LatLonBoundingBox;
217
- if (!_LatLonBoundingBox) {
218
- _LatLonBoundingBox = layer.EX_GeographicBoundingBox;
219
- }
220
- }
221
- layer.visible = capabilities?.Capability?.Layer?.Layer?.length > 2 ? idx > 1 : true;
222
- return layer;
223
- })
224
- );
212
+ let _LatLonBoundingBox: Array<number> = [];
213
+ setLayers(
214
+ capabilities?.Capability?.Layer?.Layer.map((layer: typeof layerType, idx: number) => {
215
+ if (idx === 0) {
216
+ _LatLonBoundingBox = layer.LatLonBoundingBox;
217
+ if (!_LatLonBoundingBox) {
218
+ _LatLonBoundingBox = layer.EX_GeographicBoundingBox;
219
+ }
220
+ }
221
+ layer.visible = capabilities?.Capability?.Layer?.Layer?.length > 2 ? idx > 1 : true;
222
+ return layer;
223
+ })
224
+ );
225
225
 
226
- // zoom to extent of first layer
227
- if (mapRef.current && _LatLonBoundingBox.length > 3) {
228
- mapRef.current.map.fitBounds([
229
- [_LatLonBoundingBox[0], _LatLonBoundingBox[1]],
230
- [_LatLonBoundingBox[2], _LatLonBoundingBox[3]],
231
- ]);
232
- }
233
- }
234
- }, [capabilities]);
226
+ // zoom to extent of first layer
227
+ if (mapRef.current && _LatLonBoundingBox.length > 3) {
228
+ mapRef.current.map.fitBounds([
229
+ [_LatLonBoundingBox[0], _LatLonBoundingBox[1]],
230
+ [_LatLonBoundingBox[2], _LatLonBoundingBox[3]],
231
+ ]);
232
+ }
233
+ }
234
+ }, [capabilities]);
235
235
 
236
- useEffect(() => {
237
- if (!mapContext?.mapExists?.(props.mapId) || initializedRef.current) return;
238
- // the MapLibre-gl instance (mapContext.map) is accessible here
239
- // initialize the layer and add it to the MapLibre-gl instance or do something else with it
240
- initializedRef.current = true;
241
- mapRef.current = mapContext.getMap(props.mapId);
242
- console.log("set url " + props.url);
243
- setUrl(props.url);
244
- }, [mapContext.mapIds, mapContext, props.mapId, props.url]);
236
+ useEffect(() => {
237
+ if (!mapContext?.mapExists?.(props.mapId) || initializedRef.current) return;
238
+ // the MapLibre-gl instance (mapContext.map) is accessible here
239
+ // initialize the layer and add it to the MapLibre-gl instance or do something else with it
240
+ initializedRef.current = true;
241
+ mapRef.current = mapContext.getMap(props.mapId);
242
+ console.log("set url " + props.url);
243
+ setUrl(props.url);
244
+ }, [mapContext.mapIds, mapContext, props.mapId, props.url]);
245
245
 
246
- return (
247
- <>
248
- {error && <p>{error}</p>}
249
- <h3 key="title">{capabilities?.Service?.Title}</h3>
250
- {console.log(componentId.current)}
251
- {capabilities?.Capability?.Layer?.Layer.map((layer: any, idx: number) => (
252
- <MlLayer
253
- layerId={"Order-" + componentId.current + "-" + idx}
254
- key={componentId.current + "-" + idx}
255
- {...(idx > 0
256
- ? {
257
- insertBeforeLayer: "Order-" + componentId.current + "-" + (idx - 1),
258
- }
259
- : undefined)}
260
- />
261
- ))}
262
- <List dense key="layers">
263
- {wmsUrl &&
264
- layers?.map?.((layer: typeof layerType, idx) => {
265
- return layer?.Name ? (
266
- <ListItem
267
- key={layer.Name + idx}
268
- secondaryAction={
269
- <IconButton
270
- edge="end"
271
- aria-label="toggle visibility"
272
- onClick={() => {
273
- let _layers: Array<typeof layerType> = [...layers];
274
- _layers[idx].visible = !_layers[idx].visible;
275
- setLayers([..._layers]);
276
- }}
277
- >
278
- {layers[idx].visible ? <VisibilityIcon /> : <VisibilityOffIcon />}
279
- </IconButton>
280
- }
281
- >
282
- <ListItemText primary={layer?.Title} secondary={layer?.Abstract} />
283
- <MlWmsLayer
284
- key={layer?.Name + idx}
285
- url={wmsUrl}
286
- urlParameters={{ ...props.wmsUrlParameters, layers: layer?.Name }}
287
- visible={layers[idx].visible}
288
- insertBeforeLayer={"Order-" + componentId.current + "-" + idx}
289
- />
290
- </ListItem>
291
- ) : (
292
- <></>
293
- );
294
- })}
295
- </List>
296
- <p key="description" style={{ fontSize: ".7em" }}>
297
- {capabilities?.Capability?.Layer?.Abstract}
298
- </p>
246
+ return (
247
+ <>
248
+ {error && <p>{error}</p>}
249
+ <h3 key="title">{capabilities?.Service?.Title}</h3>
250
+ {console.log(componentId.current)}
251
+ {capabilities?.Capability?.Layer?.Layer.map((layer: any, idx: number) => (
252
+ <MlLayer
253
+ layerId={"Order-" + componentId.current + "-" + idx}
254
+ key={componentId.current + "-" + idx}
255
+ {...(idx > 0
256
+ ? {
257
+ insertBeforeLayer: "Order-" + componentId.current + "-" + (idx - 1),
258
+ }
259
+ : undefined)}
260
+ />
261
+ ))}
262
+ <List dense key="layers">
263
+ {wmsUrl &&
264
+ layers?.map?.((layer: typeof layerType, idx) => {
265
+ return layer?.Name ? (
266
+ <ListItem
267
+ key={layer.Name + idx}
268
+ secondaryAction={
269
+ <IconButton
270
+ edge="end"
271
+ aria-label="toggle visibility"
272
+ onClick={() => {
273
+ let _layers: Array<typeof layerType> = [...layers];
274
+ _layers[idx].visible = !_layers[idx].visible;
275
+ setLayers([..._layers]);
276
+ }}
277
+ >
278
+ {layers[idx].visible ? <VisibilityIcon /> : <VisibilityOffIcon />}
279
+ </IconButton>
280
+ }
281
+ >
282
+ <ListItemText primary={layer?.Title} secondary={layer?.Abstract} />
283
+ <MlWmsLayer
284
+ key={layer?.Name + idx}
285
+ url={wmsUrl}
286
+ urlParameters={{ ...props.wmsUrlParameters, layers: layer?.Name }}
287
+ visible={layers[idx].visible}
288
+ insertBeforeLayer={"Order-" + componentId.current + "-" + idx}
289
+ />
290
+ </ListItem>
291
+ ) : (
292
+ <></>
293
+ );
294
+ })}
295
+ </List>
296
+ <p key="description" style={{ fontSize: ".7em" }}>
297
+ {capabilities?.Capability?.Layer?.Abstract}
298
+ </p>
299
299
 
300
- {featureInfoLngLat && <MlMarker {...featureInfoLngLat} content={featureInfoContent} />}
301
- </>
302
- );
300
+ {featureInfoLngLat && <MlMarker {...featureInfoLngLat} content={featureInfoContent} />}
301
+ </>
302
+ );
303
303
  };
304
304
 
305
305
  MlWmsLoader.defaultProps = {
306
- url: "",
307
- urlParameters: {
308
- SERVICE: "WMS",
309
- VERSION: "1.3.0",
310
- REQUEST: "GetCapabilities",
311
- },
312
- wmsUrlParameters: {
313
- TRANSPARENT: "TRUE",
314
- },
306
+ url: "",
307
+ urlParameters: {
308
+ SERVICE: "WMS",
309
+ VERSION: "1.3.0",
310
+ REQUEST: "GetCapabilities",
311
+ },
312
+ wmsUrlParameters: {
313
+ TRANSPARENT: "TRUE",
314
+ },
315
315
  };
316
316
 
317
317
  export default MlWmsLoader;