@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
@@ -0,0 +1,232 @@
1
+ import useSource from './useSource';
2
+ import React, { useEffect, useState } from 'react';
3
+ import useMap from './useMap';
4
+ import useMapState from './useMapState';
5
+ import useLayer from './useLayer';
6
+ import TopToolbar from '../ui_components/TopToolbar';
7
+ import Button from '@mui/material/Button';
8
+ import MlGeojsonLayerWithSource from '../components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource';
9
+
10
+ import mapContextDecoratorHooks from '../decorators/MapContextDecoratorHooks';
11
+ import wg_geojson from './assets/pointWG.json';
12
+ const vectorUrl =
13
+ 'https://wms.wheregroup.com/tileserver/tile/tileserver.php?/europe-0-14/index.json?/europe-0-14/{z}/{x}/{y}.pbf';
14
+
15
+ const storyoptions = {
16
+ title: 'Hooks/UseSource',
17
+ component: useSource,
18
+ argTypes: {},
19
+ decorators: mapContextDecoratorHooks,
20
+ };
21
+ export default storyoptions;
22
+
23
+ const GeojsonExample = (args) => {
24
+ const { source } = useSource({ ...args });
25
+
26
+ useLayer({
27
+ mapId: args.mapId,
28
+ layerId: 'layer1',
29
+ source: source?.id ? source.id : '',
30
+ options: {
31
+ type: 'circle',
32
+ paint: {
33
+ 'circle-radius': 6,
34
+ 'circle-color': 'red',
35
+ },
36
+ },
37
+ });
38
+ useLayer({
39
+ mapId: args.mapId,
40
+ layerId: 'layer2',
41
+ source: source?.id ? source.id : '',
42
+ options: {
43
+ type: 'circle',
44
+ paint: {
45
+ 'circle-radius': 4,
46
+ 'circle-color': 'green',
47
+ },
48
+ },
49
+ });
50
+ return <></>;
51
+ };
52
+
53
+ const VectorExample = (args) => {
54
+ useSource({ ...args });
55
+ const mapHook = useMap({
56
+ mapId: args.mapId,
57
+ });
58
+ useEffect(() => {
59
+ if (!mapHook.map) return;
60
+ mapHook.map.addLayer(
61
+ {
62
+ id: 'vector-lineLayer',
63
+ type: 'line',
64
+ source: args.sourceId,
65
+ minzoom: 0,
66
+ maxzoom: 22,
67
+ 'source-layer': 'landuse',
68
+ layout: {
69
+ 'line-cap': 'round',
70
+ 'line-join': 'round',
71
+ },
72
+ paint: { 'line-width': 2, 'line-color': '#ff0000' },
73
+ },
74
+ false,
75
+ mapHook.componentId
76
+ );
77
+ mapHook.map.addLayer(
78
+ {
79
+ id: 'vector-FillLayer',
80
+ type: 'fill',
81
+ source: args.sourceId,
82
+ minzoom: 0,
83
+ maxzoom: 22,
84
+ 'source-layer': 'landuse',
85
+ paint: {
86
+ 'fill-color': '#32a850',
87
+ 'fill-opacity': 0.4,
88
+ },
89
+ },
90
+ false,
91
+ mapHook.componentId
92
+ );
93
+ }, [mapHook.map]);
94
+ return <></>;
95
+ };
96
+
97
+ const RasterExample = (args) => {
98
+ useSource({ ...args });
99
+ const mapHook = useMap({
100
+ mapId: args.mapId,
101
+ });
102
+ useEffect(() => {
103
+ if (!mapHook.map) return;
104
+ mapHook.map.addLayer(
105
+ {
106
+ id: 'raster-wms',
107
+ type: 'raster',
108
+ source: args.sourceId,
109
+ minzoom: 0,
110
+ maxzoom: 22,
111
+ },
112
+ false,
113
+ mapHook.componentId
114
+ );
115
+ }, [mapHook.map]);
116
+ return <></>;
117
+ };
118
+
119
+ const removeExample = (args) => {
120
+ const [sourceStatus, setSourceStatus] = useState(true);
121
+ const [activeSources, setActiveSources] = useState([]);
122
+ const mapHook = useMap({
123
+ mapId: args.mapId,
124
+ });
125
+
126
+ const mapState = useMapState({
127
+ mapId: args.mapId,
128
+ watch: {
129
+ viewport: false,
130
+ layers: true,
131
+ sources: true,
132
+ },
133
+ filter: {
134
+ includeBaseLayers: false,
135
+ },
136
+ });
137
+
138
+ useEffect(() => {
139
+ if (!mapHook.map) {
140
+ return;
141
+ }
142
+
143
+ mapHook.map.map.on('sourcedata', () => {
144
+ if (mapHook?.map?.map?.style.sourceCaches) {
145
+ setActiveSources(Object.keys(mapHook?.map?.map?.style.sourceCaches));
146
+ }
147
+ });
148
+ }, [mapHook.map]);
149
+
150
+ return (
151
+ <>
152
+ <TopToolbar>
153
+ <Button
154
+ color="primary"
155
+ variant={sourceStatus ? 'contained' : 'outlined'}
156
+ onClick={() => setSourceStatus(!sourceStatus)}
157
+ >
158
+ Ml GeoJsonLayer With Source JSX Active?
159
+ </Button>
160
+ </TopToolbar>
161
+ {sourceStatus && <MlGeojsonLayerWithSource></MlGeojsonLayerWithSource>}
162
+ <div
163
+ style={{
164
+ position: 'fixed',
165
+ zIndex: 10000,
166
+ display: 'flex',
167
+ flexWrap: 'wrap',
168
+ top: '62px',
169
+ left: 0,
170
+ right: 0,
171
+ bottom: 0,
172
+ maxHeight: '100VH',
173
+ backgroundColor: 'rgba(80,80,80,.8)',
174
+ padding: '50px',
175
+ fontSize: '20px',
176
+ color: '#51ff09',
177
+ overflow: 'hidden',
178
+ pointerEvents: 'none',
179
+ }}
180
+ >
181
+ {activeSources?.length > 0 && (
182
+ <div>
183
+ Active sources: <br></br> {JSON.stringify(activeSources, null, ' ')}
184
+ <br></br> <br></br> Active layers : {}
185
+ <pre>{JSON.stringify(mapState, null, ' ')}</pre>
186
+ </div>
187
+ )}
188
+ </div>
189
+ </>
190
+ );
191
+ };
192
+
193
+ export const useGeojsonSourceExample = GeojsonExample.bind({});
194
+ useGeojsonSourceExample.args = {
195
+ mapId: 'map_1',
196
+ sourceId: 'geojson-source',
197
+ source: {
198
+ type: 'geojson',
199
+ data: wg_geojson,
200
+ },
201
+ };
202
+
203
+ export const useVectorSourceExample = VectorExample.bind({});
204
+ useVectorSourceExample.args = {
205
+ mapId: 'map_1',
206
+ sourceId: 'vector-source',
207
+ source: {
208
+ type: 'vector',
209
+ tiles: [vectorUrl],
210
+ tilesize: 512,
211
+ attribution: '',
212
+ },
213
+ };
214
+
215
+ export const useRasterSourceExample = RasterExample.bind({});
216
+ useRasterSourceExample.args = {
217
+ mapId: 'map_1',
218
+ sourceId: 'raster-source',
219
+ source: {
220
+ type: 'raster',
221
+ tiles: [
222
+ 'https://www.wms.nrw.de/geobasis/wms_nw_uraufnahme?bbox={bbox-epsg-3857}&format=image/png&service=WMS&version=1.1.1&request=GetMap&srs=EPSG:3857&width=256&height=256&styles=&layers=nw_uraufnahme_rw',
223
+ ],
224
+ tilesize: 256,
225
+ attribution: '',
226
+ },
227
+ };
228
+
229
+ export const removeSourceExample = removeExample.bind({});
230
+ removeSourceExample.args = {
231
+ mapId: 'map_1',
232
+ };
@@ -2,90 +2,90 @@ import { useState, useEffect } from "react";
2
2
  import WMSCapabilities from "wms-capabilities";
3
3
 
4
4
  function useWms(props) {
5
- // Use a useRef hook to reference the layer object to be able to access it later inside useEffect hooks
6
- const [getFeatureInfoUrl, setGetFeatureInfoUrl] = useState(undefined);
7
- const [url, setUrl] = useState(props.url);
8
- const [wmsUrl, setWmsUrl] = useState("");
9
- const [capabilities, setCapabilities] = useState(undefined);
10
- const [error, setError] = useState(undefined);
5
+ // Use a useRef hook to reference the layer object to be able to access it later inside useEffect hooks
6
+ const [getFeatureInfoUrl, setGetFeatureInfoUrl] = useState(undefined);
7
+ const [url, setUrl] = useState(props.url);
8
+ const [wmsUrl, setWmsUrl] = useState("");
9
+ const [capabilities, setCapabilities] = useState(undefined);
10
+ const [error, setError] = useState(undefined);
11
11
 
12
- const clearState = () => {
13
- setGetFeatureInfoUrl(undefined);
14
- setCapabilities(undefined);
15
- //setLayers([]);
16
- setWmsUrl("");
17
- };
12
+ const clearState = () => {
13
+ setGetFeatureInfoUrl(undefined);
14
+ setCapabilities(undefined);
15
+ //setLayers([]);
16
+ setWmsUrl("");
17
+ };
18
18
 
19
- useEffect(() => {
20
- // extract URL parameters from the given URL
21
- clearState();
22
- setError(undefined);
19
+ useEffect(() => {
20
+ // extract URL parameters from the given URL
21
+ clearState();
22
+ setError(undefined);
23
23
 
24
- if (!url) return;
24
+ if (!url) return;
25
25
 
26
- let _propsUrlParams;
27
- let _wmsUrl = url;
28
- if (url.indexOf("?") !== -1) {
29
- _propsUrlParams = url.split("?");
30
- _wmsUrl = _propsUrlParams[0];
31
- }
32
- let _urlParamsFromUrl = new URLSearchParams(_propsUrlParams?.[1]);
26
+ let _propsUrlParams;
27
+ let _wmsUrl = url;
28
+ if (url.indexOf("?") !== -1) {
29
+ _propsUrlParams = url.split("?");
30
+ _wmsUrl = _propsUrlParams[0];
31
+ }
32
+ let _urlParamsFromUrl = new URLSearchParams(_propsUrlParams?.[1]);
33
33
 
34
- let urlParamsObj = {
35
- ...Object.fromEntries(_urlParamsFromUrl),
36
- ...props.urlParameters,
37
- };
38
- // create URLSearchParams object to assemble the URL Parameters
39
- let urlParams = new URLSearchParams(urlParamsObj);
34
+ let urlParamsObj = {
35
+ ...Object.fromEntries(_urlParamsFromUrl),
36
+ ...props.urlParameters,
37
+ };
38
+ // create URLSearchParams object to assemble the URL Parameters
39
+ let urlParams = new URLSearchParams(urlParamsObj);
40
40
 
41
- let urlParamsStr =
42
- decodeURIComponent(urlParams.toString()) + "".replace(/%2F/g, "/").replace(/%3A/g, ":");
41
+ let urlParamsStr =
42
+ decodeURIComponent(urlParams.toString()) + "".replace(/%2F/g, "/").replace(/%3A/g, ":");
43
43
 
44
- fetch(_wmsUrl + "?" + urlParamsStr)
45
- .then((res) => {
46
- if (!res.ok) {
47
- throw Error(res.statusText + " (" + res.status + " - " + res.type + ")");
48
- } else {
49
- return res.text();
50
- }
51
- })
52
- .then((data) => {
53
- setCapabilities(new WMSCapabilities(data).toJSON());
54
- })
55
- .catch((error) => {
56
- //reset local state
57
- clearState();
58
- console.log(error);
59
- setError(error.message);
60
- });
61
- }, [url, props.urlParameters]);
44
+ fetch(_wmsUrl + "?" + urlParamsStr)
45
+ .then((res) => {
46
+ if (!res.ok) {
47
+ throw Error(res.statusText + " (" + res.status + " - " + res.type + ")");
48
+ } else {
49
+ return res.text();
50
+ }
51
+ })
52
+ .then((data) => {
53
+ setCapabilities(new WMSCapabilities(data).toJSON());
54
+ })
55
+ .catch((error) => {
56
+ //reset local state
57
+ clearState();
58
+ console.log(error);
59
+ setError(error.message);
60
+ });
61
+ }, [url, props.urlParameters]);
62
62
 
63
- useEffect(() => {
64
- if (!capabilities?.Service) return;
63
+ useEffect(() => {
64
+ if (!capabilities?.Service) return;
65
65
 
66
- setWmsUrl(capabilities.Capability?.Request?.GetMap?.DCPType?.[0]?.HTTP?.Get?.OnlineResource);
67
- // set getFeatureInfo url
68
- setGetFeatureInfoUrl(
69
- capabilities.Capability?.Request?.GetFeatureInfo?.DCPType?.[0]?.HTTP?.Get?.OnlineResource
70
- );
71
- }, [capabilities]);
66
+ setWmsUrl(capabilities.Capability?.Request?.GetMap?.DCPType?.[0]?.HTTP?.Get?.OnlineResource);
67
+ // set getFeatureInfo url
68
+ setGetFeatureInfoUrl(
69
+ capabilities.Capability?.Request?.GetFeatureInfo?.DCPType?.[0]?.HTTP?.Get?.OnlineResource
70
+ );
71
+ }, [capabilities]);
72
72
 
73
- return {
74
- capabilities,
75
- getFeatureInfoUrl,
76
- wmsUrl,
77
- error,
78
- setUrl,
79
- };
73
+ return {
74
+ capabilities,
75
+ getFeatureInfoUrl,
76
+ wmsUrl,
77
+ error,
78
+ setUrl,
79
+ };
80
80
  }
81
81
 
82
82
  useWms.defaultProps = {
83
- url: "",
84
- urlParameters: {
85
- SERVICE: "WMS",
86
- VERSION: "1.3.0",
87
- REQUEST: "GetCapabilities",
88
- },
83
+ url: "",
84
+ urlParameters: {
85
+ SERVICE: "WMS",
86
+ VERSION: "1.3.0",
87
+ REQUEST: "GetCapabilities",
88
+ },
89
89
  };
90
90
 
91
91
  export default useWms;
package/src/index.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export { default as MapLibreMap } from "./components/MapLibreMap/MapLibreMap";
2
2
  export { default as MlComponentTemplate } from "./components/MlComponentTemplate/MlComponentTemplate";
3
3
  export { default as MlCreatePdfButton } from "./components/MlCreatePdfButton/MlCreatePdfButton";
4
+ export { default as MlCreatePdfForm } from "./components/MlCreatePdfButton/MlCreatePdfButton";
4
5
  export { default as MlFeatureEditor } from "./components/MlFeatureEditor/MlFeatureEditor";
5
6
  export { default as MlFillExtrusionLayer } from "./components/MlFillExtrusionLayer/MlFillExtrusionLayer";
6
7
  export { default as MlFollowGps } from "./components/MlFollowGps/MlFollowGps";
@@ -12,6 +13,7 @@ export { default as MlNavigationCompass } from "./components/MlNavigationCompass
12
13
  export { default as MlLayer } from "./components/MlLayer/MlLayer";
13
14
  export { default as MlVectorTileLayer } from "./components/MlVectorTileLayer/MlVectorTileLayer";
14
15
  export { default as MlWmsLayer } from "./components/MlWmsLayer/MlWmsLayer";
16
+ export { default as MlScaleReference } from "./components/MlScaleReference/MlScaleReference";
15
17
 
16
18
  export { default as MlLayerMagnify } from "./components/MlLayerMagnify/MlLayerMagnify";
17
19
  export { default as MlLayerSwipe } from "./components/MlLayerSwipe/MlLayerSwipe";
@@ -32,6 +34,8 @@ export { default as useLayer } from "./hooks/useLayer";
32
34
  export { default as useMapState } from "./hooks/useMapState";
33
35
  export { default as useMap } from "./hooks/useMap";
34
36
  export { default as useWms } from "./hooks/useWms.js";
37
+ export { default as useSource } from "./hooks/useSource";
38
+ export { default as useExportMap } from "./hooks/exportMap";
35
39
 
36
40
  export { MapComponentsProvider } from "./contexts/MapContext";
37
41
  export { default as MapContext } from "./contexts/MapContext";
package/src/setupTests.js CHANGED
@@ -9,99 +9,99 @@ export { uuid_regex };
9
9
 
10
10
  // MapLibre-gl mockup
11
11
  var mockMapLibreMethods = {
12
- on: jest.fn(),
13
- off: jest.fn(),
14
- addControl: jest.fn(),
15
- removeControl: jest.fn(),
16
- hasControl: jest.fn(() => true),
17
- getCanvas: () => document.createElement("canvas"),
18
- getContainer: () => ({
19
- style: {},
20
- }),
12
+ on: jest.fn(),
13
+ off: jest.fn(),
14
+ addControl: jest.fn(),
15
+ removeControl: jest.fn(),
16
+ hasControl: jest.fn(() => true),
17
+ getCanvas: () => document.createElement("canvas"),
18
+ getContainer: () => ({
19
+ style: {},
20
+ }),
21
21
  };
22
22
  export { mockMapLibreMethods };
23
23
 
24
24
  jest.mock("maplibre-gl/dist/maplibre-gl", () => {
25
- const originalModule = jest.requireActual("maplibre-gl/dist/maplibre-gl");
25
+ const originalModule = jest.requireActual("maplibre-gl/dist/maplibre-gl");
26
26
 
27
- return {
28
- ...originalModule,
29
- GeolocateControl: jest.fn(),
30
- Map: function () {
31
- var self = this;
32
- this.layers = [];
33
- this.sources = [];
27
+ return {
28
+ ...originalModule,
29
+ GeolocateControl: jest.fn(),
30
+ Map: function () {
31
+ var self = this;
32
+ this.layers = [];
33
+ this.sources = [];
34
34
 
35
- let styleFunctions = {
36
- addSource: (id, source) => {
37
- if (typeof id.id !== "undefined") {
38
- self.sources.push(id);
39
- } else if (typeof id !== "undefined") {
40
- self.sources.push(id);
41
- }
42
- },
43
- getSource: (id) => {
44
- if (self.sources.indexOf(id) !== -1) {
45
- return { setData: jest.fn() };
46
- }
47
- return false;
48
- },
49
- removeSource: (id) => {
50
- const sourcePosition = self.sources.indexOf(id);
51
- if (sourcePosition !== -1) {
52
- self.sources.splice(sourcePosition, 1);
53
- }
54
- },
55
- addLayer: (layer) => {
56
- if (typeof layer.id !== "undefined") {
57
- self.layers.push(layer.id);
58
- if (
59
- typeof layer.source !== "undefined" &&
60
- typeof layer.source === "object"
61
- ) {
62
- self.sources.push(layer.id);
63
- }
64
- }
65
- },
66
- getLayer: (id) => {
67
- if (self.layers.indexOf(id) !== -1) {
68
- return {};
69
- }
70
- return false;
71
- },
72
- removeLayer: (id) => {
73
- const layerPosition = self.layers.indexOf(id);
74
- if (layerPosition !== -1) {
75
- self.layers.splice(layerPosition, 1);
76
- }
77
- },
78
- };
35
+ let styleFunctions = {
36
+ addSource: (id, source) => {
37
+ if (typeof id.id !== "undefined") {
38
+ self.sources.push(id);
39
+ } else if (typeof id !== "undefined") {
40
+ self.sources.push(id);
41
+ }
42
+ },
43
+ getSource: (id) => {
44
+ if (self.sources.indexOf(id) !== -1) {
45
+ return { setData: jest.fn() };
46
+ }
47
+ return false;
48
+ },
49
+ removeSource: (id) => {
50
+ const sourcePosition = self.sources.indexOf(id);
51
+ if (sourcePosition !== -1) {
52
+ self.sources.splice(sourcePosition, 1);
53
+ }
54
+ },
55
+ addLayer: (layer) => {
56
+ if (typeof layer.id !== "undefined") {
57
+ self.layers.push(layer.id);
58
+ if (
59
+ typeof layer.source !== "undefined" &&
60
+ typeof layer.source === "object"
61
+ ) {
62
+ self.sources.push(layer.id);
63
+ }
64
+ }
65
+ },
66
+ getLayer: (id) => {
67
+ if (self.layers.indexOf(id) !== -1) {
68
+ return {};
69
+ }
70
+ return false;
71
+ },
72
+ removeLayer: (id) => {
73
+ const layerPosition = self.layers.indexOf(id);
74
+ if (layerPosition !== -1) {
75
+ self.layers.splice(layerPosition, 1);
76
+ }
77
+ },
78
+ };
79
79
 
80
- return {
81
- ...styleFunctions,
82
- once: (eventName, callback) => {
83
- callback();
84
- },
85
- remove: jest.fn(),
86
- setLayerZoomRange: jest.fn(),
87
- setLayoutProperty: jest.fn(),
88
- addImage: jest.fn(),
89
- loadImage: jest.fn(),
90
- removeImage: jest.fn(),
91
- hasImage: jest.fn(),
92
- project: jest.fn(),
93
- setZoom: jest.fn(),
94
- setPitch: jest.fn(),
95
- setCenter: jest.fn(),
96
- style: { ...styleFunctions },
97
- layers: this.layers,
98
- sources: this.sources,
99
- _update: jest.fn(),
100
- ...mockMapLibreMethods,
101
- };
102
- },
103
- NavigationControl: jest.fn(),
104
- };
80
+ return {
81
+ ...styleFunctions,
82
+ once: (eventName, callback) => {
83
+ callback();
84
+ },
85
+ remove: jest.fn(),
86
+ setLayerZoomRange: jest.fn(),
87
+ setLayoutProperty: jest.fn(),
88
+ addImage: jest.fn(),
89
+ loadImage: jest.fn(),
90
+ removeImage: jest.fn(),
91
+ hasImage: jest.fn(),
92
+ project: jest.fn(),
93
+ setZoom: jest.fn(),
94
+ setPitch: jest.fn(),
95
+ setCenter: jest.fn(),
96
+ style: { ...styleFunctions },
97
+ layers: this.layers,
98
+ sources: this.sources,
99
+ _update: jest.fn(),
100
+ ...mockMapLibreMethods,
101
+ };
102
+ },
103
+ NavigationControl: jest.fn(),
104
+ };
105
105
  });
106
106
 
107
107
  configure({ adapter: new Adapter() });