@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
@@ -1,29 +1,29 @@
1
1
  import React, {
2
- useContext,
3
- useCallback,
4
- useRef,
5
- useEffect,
6
- useState,
7
- useMemo
2
+ useContext,
3
+ useCallback,
4
+ useRef,
5
+ useEffect,
6
+ useState,
7
+ useMemo
8
8
  } from "react";
9
9
  // @ts-ignore
10
10
  import syncMove from "@mapbox/mapbox-gl-sync-move";
11
11
  import "./style.css";
12
- import MapContext from "../../contexts/MapContext";
12
+ import MapContext from "../../contexts/MapContext";
13
13
 
14
14
  interface MlLayerMagnifyProps {
15
- /**
16
- * Id of the first MapLibre instance
17
- */
18
- map1Id: string;
19
- /**
20
- * Id of the second MapLibre instance
21
- */
22
- map2Id: string;
23
- /**
24
- * Size of the "magnifier"-circle
25
- */
26
- magnifierRadius?: number;
15
+ /**
16
+ * Id of the first MapLibre instance
17
+ */
18
+ map1Id: string;
19
+ /**
20
+ * Id of the second MapLibre instance
21
+ */
22
+ map2Id: string;
23
+ /**
24
+ * Size of the "magnifier"-circle
25
+ */
26
+ magnifierRadius?: number;
27
27
  }
28
28
 
29
29
  /**
@@ -32,191 +32,191 @@ interface MlLayerMagnifyProps {
32
32
  * the map and can be dragged around on top of the MapLibreMap referenced by props.map1Id
33
33
  */
34
34
  const MlLayerMagnify = (props: MlLayerMagnifyProps) => {
35
- const mapContext:MapContextType = useContext(MapContext);
36
- const syncMoveInitializedRef = useRef(false);
37
- const syncCleanupFunctionRef = useRef(() => {});
38
-
39
- const [swipeX, setSwipeX] = useState('50');
40
- const swipeXRef = useRef('50');
41
- const [swipeY, setSwipeY] = useState('50');
42
- const swipeYRef = useRef('50');
43
-
44
- const magnifierRadius = useMemo(() => {
45
- return props.magnifierRadius || 200;
46
- },[props.magnifierRadius]);
47
-
48
- const mapExists = useCallback(() => {
49
- if (!props.map1Id || !props.map2Id) {
50
- return false;
51
- }
52
- if (!mapContext.getMap(props.map1Id) || !mapContext.getMap(props.map2Id)) {
53
- return false;
54
- }
55
-
56
- return true;
57
- }, [props, mapContext]);
58
-
59
- const onResize = useRef(() => {
60
- if (!mapExists()) return;
61
-
62
- onMove({
63
- clientX: swipeXRef.current,
64
- clientY: swipeYRef.current,
65
- });
66
- });
67
-
68
- useEffect(() => {
69
- window.addEventListener("resize", onResize.current);
70
- let _onResize = onResize.current;
71
-
72
- return () => {
73
- window.removeEventListener("resize", _onResize);
74
- syncCleanupFunctionRef.current();
75
- };
76
- }, []);
77
-
78
- const onMove = useCallback(
79
- (e) => {
80
- if (!mapExists()) return;
81
-
82
- let bounds = mapContext.maps[props.map1Id]
83
- .getCanvas()
84
- .getBoundingClientRect();
85
- let clientX =
86
- e.clientX ||
87
- (typeof e.touches !== "undefined" && typeof e.touches[0] !== "undefined"
88
- ? e.touches[0].clientX
89
- : 0);
90
- let clientY =
91
- e.clientY ||
92
- (typeof e.touches !== "undefined" && typeof e.touches[0] !== "undefined"
93
- ? e.touches[0].clientY
94
- : 0);
95
-
96
- clientX -= bounds.x;
97
- clientY -= bounds.y;
98
- let swipeX_tmp = ((clientX / bounds.width) * 100).toFixed(2);
99
- let swipeY_tmp = ((clientY / bounds.height) * 100).toFixed(2);
100
-
101
- if (
102
- swipeXRef.current !== swipeX_tmp ||
103
- swipeYRef.current !== swipeY_tmp
104
- ) {
105
- setSwipeX(swipeX_tmp);
106
- swipeXRef.current = swipeX_tmp;
107
- setSwipeY(swipeY_tmp);
108
- swipeYRef.current = swipeY_tmp;
109
-
110
- mapContext.maps[props.map2Id].getContainer().style.clipPath =
111
- `circle(${magnifierRadius}px at ` +
112
- (parseFloat(swipeXRef.current) * bounds.width) / 100 +
113
- "px " +
114
- (parseFloat(swipeYRef.current) * bounds.height) / 100 +
115
- "px)";
116
- }
117
- },
118
- [mapContext, mapExists, props, magnifierRadius]
119
- );
120
-
121
- useEffect(() => {
122
- if (!mapExists() || syncMoveInitializedRef.current) return;
123
-
124
- syncMoveInitializedRef.current = true;
125
- syncCleanupFunctionRef.current = syncMove(
126
- mapContext.getMap(props.map1Id).map,
127
- mapContext.getMap(props.map2Id).map
128
- );
129
-
130
- /*
131
- automatically adjust radius for small screens
132
- if (
133
- mapContext.maps[props.map1Id].getCanvas().clientWidth >
134
- mapContext.maps[props.map1Id].getCanvas().clientHeight &&
135
- magnifierRadius * 2 >
136
- mapContext.maps[props.map1Id].getCanvas().clientHeight
137
- ) {
138
- magnifierRadius = Math.floor(
139
- mapContext.maps[props.map1Id].getCanvas().clientHeight / 2
140
- );
141
- setMagnifierRadius(magnifierRadius);
142
- }
143
-
144
- if (
145
- mapContext.maps[props.map1Id].getCanvas().clientHeight >
146
- mapContext.maps[props.map1Id].getCanvas().clientWidth &&
147
- magnifierRadius * 2 >
148
- mapContext.maps[props.map1Id].getCanvas().clientWidth
149
- ) {
150
- magnifierRadius = Math.floor(
151
- mapContext.maps[props.map1Id].getCanvas().clientWidth / 2
152
- );
153
- setMagnifierRadius(magnifierRadius);
154
- }
155
- */
156
-
157
- onMove({
158
- clientX: mapContext.maps[props.map1Id].getCanvas().clientWidth / 2,
159
- clientY: mapContext.maps[props.map1Id].getCanvas().clientHeight / 2,
160
- });
161
- }, [mapContext.mapIds, mapContext, mapExists, props, onMove]);
162
-
163
- const onDown = (e:any) => {
164
- if (e.touches) {
165
- document.addEventListener("touchmove", onMove);
166
- document.addEventListener("touchend", onTouchEnd);
167
- } else {
168
- document.addEventListener("mousemove", onMove);
169
- document.addEventListener("mouseup", onMouseUp);
170
- }
171
- };
172
-
173
- const onTouchEnd = () => {
174
- document.removeEventListener("touchmove", onMove);
175
- document.removeEventListener("touchend", onTouchEnd);
176
- };
177
-
178
- const onMouseUp = () => {
179
- document.removeEventListener("mousemove", onMove);
180
- document.removeEventListener("mouseup", onMouseUp);
181
- };
182
-
183
- const onWheel = (e:any) => {
184
- let evCopy = new WheelEvent(e.type, e);
185
- mapContext.map.getCanvas().dispatchEvent(evCopy);
186
- };
187
-
188
- return (
189
- <div
190
- style={{
191
- position: "absolute",
192
- left: swipeX + "%",
193
- top: swipeY + "%",
194
- borderRadius: "50%",
195
- width: magnifierRadius * 2 + 1 + "px",
196
- height: magnifierRadius * 2 + 1 + "px",
197
- background: "rgba(0,0,0,0)",
198
- border: "2px solid #fafafa",
199
- boxShadow:
200
- "1px 2px 2px rgba(19, 19, 19, .5), inset 1px 1px 1px rgba(19, 19, 19, .2)",
201
- cursor: "pointer",
202
- zIndex: "110",
203
- marginLeft: magnifierRadius * -1 - 1 + "px",
204
- marginTop: magnifierRadius * -1 - 1 + "px",
205
- textAlign: "center",
206
- lineHeight: "91px",
207
- fontSize: "2em",
208
- color: "#fafafa",
209
- userSelect: "none",
210
- }}
211
- onTouchStart={onDown}
212
- onMouseDown={onDown}
213
- onWheel={onWheel}
214
- ></div>
215
- );
35
+ const mapContext:MapContextType = useContext(MapContext);
36
+ const syncMoveInitializedRef = useRef(false);
37
+ const syncCleanupFunctionRef = useRef(() => {});
38
+
39
+ const [swipeX, setSwipeX] = useState('50');
40
+ const swipeXRef = useRef('50');
41
+ const [swipeY, setSwipeY] = useState('50');
42
+ const swipeYRef = useRef('50');
43
+
44
+ const magnifierRadius = useMemo(() => {
45
+ return props.magnifierRadius || 200;
46
+ },[props.magnifierRadius]);
47
+
48
+ const mapExists = useCallback(() => {
49
+ if (!props.map1Id || !props.map2Id) {
50
+ return false;
51
+ }
52
+ if (!mapContext.getMap(props.map1Id) || !mapContext.getMap(props.map2Id)) {
53
+ return false;
54
+ }
55
+
56
+ return true;
57
+ }, [props, mapContext]);
58
+
59
+ const onResize = useRef(() => {
60
+ if (!mapExists()) return;
61
+
62
+ onMove({
63
+ clientX: swipeXRef.current,
64
+ clientY: swipeYRef.current,
65
+ });
66
+ });
67
+
68
+ useEffect(() => {
69
+ window.addEventListener("resize", onResize.current);
70
+ let _onResize = onResize.current;
71
+
72
+ return () => {
73
+ window.removeEventListener("resize", _onResize);
74
+ syncCleanupFunctionRef.current();
75
+ };
76
+ }, []);
77
+
78
+ const onMove = useCallback(
79
+ (e) => {
80
+ if (!mapExists()) return;
81
+
82
+ let bounds = mapContext.maps[props.map1Id]
83
+ .getCanvas()
84
+ .getBoundingClientRect();
85
+ let clientX =
86
+ e.clientX ||
87
+ (typeof e.touches !== "undefined" && typeof e.touches[0] !== "undefined"
88
+ ? e.touches[0].clientX
89
+ : 0);
90
+ let clientY =
91
+ e.clientY ||
92
+ (typeof e.touches !== "undefined" && typeof e.touches[0] !== "undefined"
93
+ ? e.touches[0].clientY
94
+ : 0);
95
+
96
+ clientX -= bounds.x;
97
+ clientY -= bounds.y;
98
+ let swipeX_tmp = ((clientX / bounds.width) * 100).toFixed(2);
99
+ let swipeY_tmp = ((clientY / bounds.height) * 100).toFixed(2);
100
+
101
+ if (
102
+ swipeXRef.current !== swipeX_tmp ||
103
+ swipeYRef.current !== swipeY_tmp
104
+ ) {
105
+ setSwipeX(swipeX_tmp);
106
+ swipeXRef.current = swipeX_tmp;
107
+ setSwipeY(swipeY_tmp);
108
+ swipeYRef.current = swipeY_tmp;
109
+
110
+ mapContext.maps[props.map2Id].getContainer().style.clipPath =
111
+ `circle(${magnifierRadius}px at ` +
112
+ (parseFloat(swipeXRef.current) * bounds.width) / 100 +
113
+ "px " +
114
+ (parseFloat(swipeYRef.current) * bounds.height) / 100 +
115
+ "px)";
116
+ }
117
+ },
118
+ [mapContext, mapExists, props, magnifierRadius]
119
+ );
120
+
121
+ useEffect(() => {
122
+ if (!mapExists() || syncMoveInitializedRef.current) return;
123
+
124
+ syncMoveInitializedRef.current = true;
125
+ syncCleanupFunctionRef.current = syncMove(
126
+ mapContext.getMap(props.map1Id).map,
127
+ mapContext.getMap(props.map2Id).map
128
+ );
129
+
130
+ /*
131
+ automatically adjust radius for small screens
132
+ if (
133
+ mapContext.maps[props.map1Id].getCanvas().clientWidth >
134
+ mapContext.maps[props.map1Id].getCanvas().clientHeight &&
135
+ magnifierRadius * 2 >
136
+ mapContext.maps[props.map1Id].getCanvas().clientHeight
137
+ ) {
138
+ magnifierRadius = Math.floor(
139
+ mapContext.maps[props.map1Id].getCanvas().clientHeight / 2
140
+ );
141
+ setMagnifierRadius(magnifierRadius);
142
+ }
143
+
144
+ if (
145
+ mapContext.maps[props.map1Id].getCanvas().clientHeight >
146
+ mapContext.maps[props.map1Id].getCanvas().clientWidth &&
147
+ magnifierRadius * 2 >
148
+ mapContext.maps[props.map1Id].getCanvas().clientWidth
149
+ ) {
150
+ magnifierRadius = Math.floor(
151
+ mapContext.maps[props.map1Id].getCanvas().clientWidth / 2
152
+ );
153
+ setMagnifierRadius(magnifierRadius);
154
+ }
155
+ */
156
+
157
+ onMove({
158
+ clientX: mapContext.maps[props.map1Id].getCanvas().clientWidth / 2,
159
+ clientY: mapContext.maps[props.map1Id].getCanvas().clientHeight / 2,
160
+ });
161
+ }, [mapContext.mapIds, mapContext, mapExists, props, onMove]);
162
+
163
+ const onDown = (e:any) => {
164
+ if (e.touches) {
165
+ document.addEventListener("touchmove", onMove);
166
+ document.addEventListener("touchend", onTouchEnd);
167
+ } else {
168
+ document.addEventListener("mousemove", onMove);
169
+ document.addEventListener("mouseup", onMouseUp);
170
+ }
171
+ };
172
+
173
+ const onTouchEnd = () => {
174
+ document.removeEventListener("touchmove", onMove);
175
+ document.removeEventListener("touchend", onTouchEnd);
176
+ };
177
+
178
+ const onMouseUp = () => {
179
+ document.removeEventListener("mousemove", onMove);
180
+ document.removeEventListener("mouseup", onMouseUp);
181
+ };
182
+
183
+ const onWheel = (e:any) => {
184
+ let evCopy = new WheelEvent(e.type, e);
185
+ mapContext.map.getCanvas().dispatchEvent(evCopy);
186
+ };
187
+
188
+ return (
189
+ <div
190
+ style={{
191
+ position: "absolute",
192
+ left: swipeX + "%",
193
+ top: swipeY + "%",
194
+ borderRadius: "50%",
195
+ width: magnifierRadius * 2 + 1 + "px",
196
+ height: magnifierRadius * 2 + 1 + "px",
197
+ background: "rgba(0,0,0,0)",
198
+ border: "2px solid #fafafa",
199
+ boxShadow:
200
+ "1px 2px 2px rgba(19, 19, 19, .5), inset 1px 1px 1px rgba(19, 19, 19, .2)",
201
+ cursor: "pointer",
202
+ zIndex: "110",
203
+ marginLeft: magnifierRadius * -1 - 1 + "px",
204
+ marginTop: magnifierRadius * -1 - 1 + "px",
205
+ textAlign: "center",
206
+ lineHeight: "91px",
207
+ fontSize: "2em",
208
+ color: "#fafafa",
209
+ userSelect: "none",
210
+ }}
211
+ onTouchStart={onDown}
212
+ onMouseDown={onDown}
213
+ onWheel={onWheel}
214
+ ></div>
215
+ );
216
216
  };
217
217
 
218
218
  MlLayerMagnify.defaultProps = {
219
- magnifierRadius: 200,
219
+ magnifierRadius: 200,
220
220
  };
221
221
 
222
222
  export default MlLayerMagnify;
@@ -6,30 +6,30 @@ import MlWmsLayer from "../MlWmsLayer/MlWmsLayer";
6
6
  import multiMapContextDecorator from "../../decorators/MultiMapContextDecorator";
7
7
 
8
8
  const storyoptions = {
9
- title: "MapComponents/MlLayerSwipe",
10
- name: "MlLayerSwipe",
11
- component: MlLayerSwipe,
12
- argTypes: {
13
- },
14
- decorators: multiMapContextDecorator,
9
+ title: "MapComponents/MlLayerSwipe",
10
+ name: "MlLayerSwipe",
11
+ component: MlLayerSwipe,
12
+ argTypes: {
13
+ },
14
+ decorators: multiMapContextDecorator,
15
15
  };
16
16
  export default storyoptions;
17
17
 
18
18
  const Template = (args) => (
19
- <>
20
- <MlWmsLayer
21
- url="https://www.wms.nrw.de/geobasis/wms_nw_uraufnahme"
22
- urlParameters={{
23
- layers: "nw_uraufnahme_rw",
24
- }}
25
- sourceOptions={{
26
- minzoom: 13,
27
- maxzoom: 20,
28
- }}
29
- mapId="map_2"
30
- />
31
- <MlLayerSwipe map1Id="map_1" map2Id="map_2" />
32
- </>
19
+ <>
20
+ <MlWmsLayer
21
+ url="https://www.wms.nrw.de/geobasis/wms_nw_uraufnahme"
22
+ urlParameters={{
23
+ layers: "nw_uraufnahme_rw",
24
+ }}
25
+ sourceOptions={{
26
+ minzoom: 13,
27
+ maxzoom: 20,
28
+ }}
29
+ mapId="map_2"
30
+ />
31
+ <MlLayerSwipe map1Id="map_1" map2Id="map_2" />
32
+ </>
33
33
  );
34
34
 
35
35
  export const ExampleConfig = Template.bind({});
@@ -7,80 +7,80 @@ import MapLibreMap from "./../MapLibreMap/MapLibreMap";
7
7
  import syncMove from "@mapbox/mapbox-gl-sync-move";
8
8
  // Mapbox sync-move mockup
9
9
  var mockSyncMoveMethods = {
10
- cleanup: jest.fn(),
10
+ cleanup: jest.fn(),
11
11
  };
12
12
 
13
13
  jest.mock("@mapbox/mapbox-gl-sync-move", () => {
14
- const originalModule = jest.requireActual("@mapbox/mapbox-gl-sync-move");
15
- return {
16
- __esModule: true,
17
- ...originalModule,
18
- default: () => mockSyncMoveMethods.cleanup,
19
- };
14
+ const originalModule = jest.requireActual("@mapbox/mapbox-gl-sync-move");
15
+ return {
16
+ __esModule: true,
17
+ ...originalModule,
18
+ default: () => mockSyncMoveMethods.cleanup,
19
+ };
20
20
  });
21
21
 
22
22
  const syncMoveObj = {
23
- syncMove: syncMove,
23
+ syncMove: syncMove,
24
24
  };
25
25
 
26
26
  const TestComponent = (props) => {
27
- const [layerVisible, setLayerVisible] = useState(true);
28
- const [refreshTrigger, setRefreshTrigger] = useState(0);
29
- const mapContext = useContext(MapContext);
27
+ const [layerVisible, setLayerVisible] = useState(true);
28
+ const [refreshTrigger, setRefreshTrigger] = useState(0);
29
+ const mapContext = useContext(MapContext);
30
30
 
31
- return (
32
- <>
33
- <MapLibreMap mapId="map_1" />
34
- <MapLibreMap mapId="map_2" />
31
+ return (
32
+ <>
33
+ <MapLibreMap mapId="map_1" />
34
+ <MapLibreMap mapId="map_2" />
35
35
 
36
- {layerVisible && <MlLayerSwipe map1Id="map_1" map2Id="map_2" />}
36
+ {layerVisible && <MlLayerSwipe map1Id="map_1" map2Id="map_2" />}
37
37
 
38
- <button
39
- className="toggle_layer_visible"
40
- onClick={() => {
41
- setLayerVisible(!layerVisible);
42
- }}
43
- >
44
- toggle layer visible
45
- </button>
46
- <button
47
- className="trigger_refresh"
48
- onClick={() => {
49
- setRefreshTrigger(refreshTrigger + 1);
50
- }}
51
- >
52
- refresh
53
- </button>
54
- <div className="layers_json">
55
- {mapContext.map && refreshTrigger && JSON.stringify(mapContext.map.layers)}
56
- </div>
57
- </>
58
- );
38
+ <button
39
+ className="toggle_layer_visible"
40
+ onClick={() => {
41
+ setLayerVisible(!layerVisible);
42
+ }}
43
+ >
44
+ toggle layer visible
45
+ </button>
46
+ <button
47
+ className="trigger_refresh"
48
+ onClick={() => {
49
+ setRefreshTrigger(refreshTrigger + 1);
50
+ }}
51
+ >
52
+ refresh
53
+ </button>
54
+ <div className="layers_json">
55
+ {mapContext.map && refreshTrigger && JSON.stringify(mapContext.map.layers)}
56
+ </div>
57
+ </>
58
+ );
59
59
  };
60
60
 
61
61
  const createWrapper = () =>
62
- mount(
63
- <MapComponentsProvider>
64
- <TestComponent />
65
- </MapComponentsProvider>
66
- );
62
+ mount(
63
+ <MapComponentsProvider>
64
+ <TestComponent />
65
+ </MapComponentsProvider>
66
+ );
67
67
 
68
68
  describe("<MlLayerSwipe/>", () => {
69
- //it("should add a MlLayerSwipe Component to that calls syncMaps with both available MapLibre instances once", async () => {
70
- // const spy = jest.spyOn(syncMoveObj, "syncMove");
71
- // const wrapper = createWrapper(TestComponent);
69
+ //it("should add a MlLayerSwipe Component to that calls syncMaps with both available MapLibre instances once", async () => {
70
+ // const spy = jest.spyOn(syncMoveObj, "syncMove");
71
+ // const wrapper = createWrapper(TestComponent);
72
72
 
73
- // expect(spy).toHaveBeenCalledTimes(1);
74
- //});
73
+ // expect(spy).toHaveBeenCalledTimes(1);
74
+ //});
75
75
 
76
- it("should call the syncMaps cleanup function once when it is removed from reactDOM", async () => {
77
- const wrapper = createWrapper(TestComponent);
76
+ it("should call the syncMaps cleanup function once when it is removed from reactDOM", async () => {
77
+ const wrapper = createWrapper(TestComponent);
78
78
 
79
- //expect(syncMove).toHaveBeenCalledTimes(1);
79
+ //expect(syncMove).toHaveBeenCalledTimes(1);
80
80
 
81
- wrapper.find(".toggle_layer_visible").simulate("click");
81
+ wrapper.find(".toggle_layer_visible").simulate("click");
82
82
 
83
- //TODO: Fix cleanup test
84
- expect(mockSyncMoveMethods.cleanup).toHaveBeenCalledTimes(1);
85
- });
83
+ //TODO: Fix cleanup test
84
+ expect(mockSyncMoveMethods.cleanup).toHaveBeenCalledTimes(1);
85
+ });
86
86
  });