@mapcomponents/react-maplibre 0.1.67 → 0.1.69

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 (259) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/coverage/clover.xml +172 -174
  3. package/coverage/coverage-final.json +7 -7
  4. package/coverage/lcov-report/index.html +38 -38
  5. package/coverage/lcov-report/src/components/MapLibreMap/MapLibreMap.tsx.html +43 -25
  6. package/coverage/lcov-report/src/components/MapLibreMap/index.html +10 -10
  7. package/coverage/lcov-report/src/components/MlCenterPosition/MlCenterPosition.tsx.html +30 -51
  8. package/coverage/lcov-report/src/components/MlCenterPosition/index.html +3 -3
  9. package/coverage/lcov-report/src/components/MlCreatePdfButton/MlCreatePdfButton.tsx.html +1 -1
  10. package/coverage/lcov-report/src/components/MlCreatePdfButton/index.html +1 -1
  11. package/coverage/lcov-report/src/components/MlCreatePdfForm/MlCreatePdfForm.cy.tsx.html +1 -1
  12. package/coverage/lcov-report/src/components/MlCreatePdfForm/MlCreatePdfForm.tsx.html +1 -1
  13. package/coverage/lcov-report/src/components/MlCreatePdfForm/index.html +1 -1
  14. package/coverage/lcov-report/src/components/MlFeatureEditor/MlFeatureEditor.tsx.html +1 -1
  15. package/coverage/lcov-report/src/components/MlFeatureEditor/index.html +1 -1
  16. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/MlFillExtrusionLayer.tsx.html +1 -1
  17. package/coverage/lcov-report/src/components/MlFillExtrusionLayer/index.html +1 -1
  18. package/coverage/lcov-report/src/components/MlFollowGps/MlFollowGps.tsx.html +41 -98
  19. package/coverage/lcov-report/src/components/MlFollowGps/index.html +15 -15
  20. package/coverage/lcov-report/src/components/MlGeoJsonLayer/MlGeoJsonLayer.tsx.html +2 -2
  21. package/coverage/lcov-report/src/components/MlGeoJsonLayer/index.html +1 -1
  22. package/coverage/lcov-report/src/components/MlGeoJsonLayer/story_utils/MlGeoJsonLayer.lineStyler.js.html +1 -1
  23. package/coverage/lcov-report/src/components/MlGeoJsonLayer/story_utils/MlGeoJsonLayer.polygonStyler.js.html +1 -1
  24. package/coverage/lcov-report/src/components/MlGeoJsonLayer/story_utils/MlGeojsonLayerCircleStyler.tsx.html +1 -1
  25. package/coverage/lcov-report/src/components/MlGeoJsonLayer/story_utils/MlGeojsonLayerHeatMapStyler.tsx.html +1 -1
  26. package/coverage/lcov-report/src/components/MlGeoJsonLayer/story_utils/index.html +1 -1
  27. package/coverage/lcov-report/src/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.tsx.html +1 -1
  28. package/coverage/lcov-report/src/components/MlGeojsonLayerWithSource/index.html +1 -1
  29. package/coverage/lcov-report/src/components/MlGpxViewer/MlGpxViewer.tsx.html +1 -1
  30. package/coverage/lcov-report/src/components/MlGpxViewer/index.html +1 -1
  31. package/coverage/lcov-report/src/components/MlImageMarkerLayer/MlImageMarkerLayer.tsx.html +1 -1
  32. package/coverage/lcov-report/src/components/MlImageMarkerLayer/index.html +1 -1
  33. package/coverage/lcov-report/src/components/MlLayer/MlLayer.tsx.html +1 -1
  34. package/coverage/lcov-report/src/components/MlLayer/index.html +1 -1
  35. package/coverage/lcov-report/src/components/MlLayerMagnify/MlLayerMagnify.tsx.html +1 -1
  36. package/coverage/lcov-report/src/components/MlLayerMagnify/index.html +1 -1
  37. package/coverage/lcov-report/src/components/MlLayerSwipe/MlLayerSwipe.tsx.html +1 -1
  38. package/coverage/lcov-report/src/components/MlLayerSwipe/index.html +1 -1
  39. package/coverage/lcov-report/src/components/MlLayerSwitcher/MlLayerSwitcher.js.html +1 -1
  40. package/coverage/lcov-report/src/components/MlLayerSwitcher/components/LayerBox.js.html +1 -1
  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 +1 -1
  44. package/coverage/lcov-report/src/components/MlMarker/index.html +1 -1
  45. package/coverage/lcov-report/src/components/MlMeasureTool/MlMeasureTool.tsx.html +1 -1
  46. package/coverage/lcov-report/src/components/MlMeasureTool/index.html +1 -1
  47. package/coverage/lcov-report/src/components/MlNavigationCompass/MlNavigationCompass.tsx.html +1 -1
  48. package/coverage/lcov-report/src/components/MlNavigationCompass/index.html +1 -1
  49. package/coverage/lcov-report/src/components/MlNavigationTools/MlNavigationTools.tsx.html +41 -113
  50. package/coverage/lcov-report/src/components/MlNavigationTools/index.html +15 -15
  51. package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.js.html +1 -1
  52. package/coverage/lcov-report/src/components/MlOsmLayer/MlOsmLayer.stories_.js.html +1 -1
  53. package/coverage/lcov-report/src/components/MlOsmLayer/index.html +1 -1
  54. package/coverage/lcov-report/src/components/MlScaleReference/MlScaleReference.tsx.html +1 -1
  55. package/coverage/lcov-report/src/components/MlScaleReference/index.html +1 -1
  56. package/coverage/lcov-report/src/components/MlShareMapState/MlShareMapState.tsx.html +1 -1
  57. package/coverage/lcov-report/src/components/MlShareMapState/index.html +1 -1
  58. package/coverage/lcov-report/src/components/MlSketchTool/LayerList/ColorPicker.tsx.html +1 -1
  59. package/coverage/lcov-report/src/components/MlSketchTool/LayerList/LayerList.tsx.html +1 -1
  60. package/coverage/lcov-report/src/components/MlSketchTool/LayerList/LayerListItem.tsx.html +1 -1
  61. package/coverage/lcov-report/src/components/MlSketchTool/LayerList/LayerPropertyForm.tsx.html +2 -2
  62. package/coverage/lcov-report/src/components/MlSketchTool/LayerList/index.html +1 -1
  63. package/coverage/lcov-report/src/components/MlSketchTool/MlSketchTool.tsx.html +2 -2
  64. package/coverage/lcov-report/src/components/MlSketchTool/index.html +1 -1
  65. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/MlSpatialElevationProfile.tsx.html +1 -1
  66. package/coverage/lcov-report/src/components/MlSpatialElevationProfile/index.html +1 -1
  67. package/coverage/lcov-report/src/components/MlThreeJsLayer/MlThreeJsLayer.js.html +1 -1
  68. package/coverage/lcov-report/src/components/MlThreeJsLayer/MlThreejsLayer.tsx.html +1 -1
  69. package/coverage/lcov-report/src/components/MlThreeJsLayer/index.html +1 -1
  70. package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.tsx.html +1 -1
  71. package/coverage/lcov-report/src/components/MlTransitionGeoJsonLayer/index.html +1 -1
  72. package/coverage/lcov-report/src/components/MlUseMapDebugger/MlUseMapDebugger.js.html +1 -1
  73. package/coverage/lcov-report/src/components/MlUseMapDebugger/index.html +1 -1
  74. package/coverage/lcov-report/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx.html +22 -10
  75. package/coverage/lcov-report/src/components/MlVectorTileLayer/index.html +13 -13
  76. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.js.html +1 -1
  77. package/coverage/lcov-report/src/components/MlWmsFeatureInfoPopup/index.html +1 -1
  78. package/coverage/lcov-report/src/components/MlWmsLayer/MlWmsLayer.tsx.html +1 -1
  79. package/coverage/lcov-report/src/components/MlWmsLayer/index.html +1 -1
  80. package/coverage/lcov-report/src/components/MlWmsLoader/MlWmsLoader.tsx.html +1 -1
  81. package/coverage/lcov-report/src/components/MlWmsLoader/index.html +1 -1
  82. package/coverage/lcov-report/src/contexts/MapContext.tsx.html +24 -3
  83. package/coverage/lcov-report/src/contexts/SimpleDataContext.js.html +1 -1
  84. package/coverage/lcov-report/src/contexts/SimpleDataProvider.js.html +1 -1
  85. package/coverage/lcov-report/src/contexts/index.html +1 -1
  86. package/coverage/lcov-report/src/hooks/index.html +1 -1
  87. package/coverage/lcov-report/src/hooks/useCameraFollowPath/index.html +1 -1
  88. package/coverage/lcov-report/src/hooks/useCameraFollowPath/useCameraFollowPath.tsx.html +1 -1
  89. package/coverage/lcov-report/src/hooks/useExportMap/index.html +1 -1
  90. package/coverage/lcov-report/src/hooks/useExportMap/index.ts.html +1 -1
  91. package/coverage/lcov-report/src/hooks/useExportMap/lib.ts.html +2 -2
  92. package/coverage/lcov-report/src/hooks/useGpx/index.html +1 -1
  93. package/coverage/lcov-report/src/hooks/useGpx/useGpx.tsx.html +1 -1
  94. package/coverage/lcov-report/src/hooks/useLayer.ts.html +1 -1
  95. package/coverage/lcov-report/src/hooks/useLayerEvent.js.html +1 -1
  96. package/coverage/lcov-report/src/hooks/useLayerFilter/index.html +1 -1
  97. package/coverage/lcov-report/src/hooks/useLayerFilter/useLayerFilter.ts.html +1 -1
  98. package/coverage/lcov-report/src/hooks/useLayerHoverPopup/index.html +1 -1
  99. package/coverage/lcov-report/src/hooks/useLayerHoverPopup/useLayerHoverPopup.tsx.html +1 -1
  100. package/coverage/lcov-report/src/hooks/useMap.ts.html +1 -1
  101. package/coverage/lcov-report/src/hooks/useMapState.ts.html +1 -1
  102. package/coverage/lcov-report/src/hooks/useSource.ts.html +1 -1
  103. package/coverage/lcov-report/src/hooks/useWms.ts.html +1 -1
  104. package/coverage/lcov-report/src/index.html +1 -1
  105. package/coverage/lcov-report/src/index.ts.html +27 -3
  106. package/coverage/lcov.info +326 -342
  107. package/dist/components/MapLibreMap/MapLibreMap.d.ts +3 -3
  108. package/dist/components/MapLibreMap/MapLibreMap.stories.d.ts +2 -0
  109. package/dist/components/MapLibreMap/lib/MapLibreGlWrapper.d.ts +1 -1
  110. package/dist/components/MlCenterPosition/MlCenterPosition.d.ts +2 -15
  111. package/dist/components/MlCenterPosition/MlCenterPosition.stories.d.ts +1 -14
  112. package/dist/components/MlComponentTemplate/MlComponentTemplate.d.ts +1 -0
  113. package/dist/components/MlComponentTemplate/MlComponentTemplate.stories.d.ts +1 -0
  114. package/dist/components/MlCreatePdfButton/MlCreatePdfButton.d.ts +1 -0
  115. package/dist/components/MlCreatePdfButton/MlCreatePdfButton.stories.d.ts +1 -0
  116. package/dist/components/MlCreatePdfForm/MlCreatePdfForm.d.ts +1 -0
  117. package/dist/components/MlCreatePdfForm/MlCreatePdfForm.stories.d.ts +1 -0
  118. package/dist/components/MlCreatePdfForm/lib/PdfForm.d.ts +1 -0
  119. package/dist/components/MlCreatePdfForm/lib/_PdfPreview.d.ts +1 -0
  120. package/dist/components/MlFeatureEditor/MlFeatureEditor.d.ts +1 -0
  121. package/dist/components/MlFillExtrusionLayer/MlFillExtrusionLayer.d.ts +1 -0
  122. package/dist/components/MlFollowGps/MlFollowGps.d.ts +5 -23
  123. package/dist/components/MlFollowGps/MlFollowGps.stories.d.ts +2 -2
  124. package/dist/components/MlGeoJsonLayer/MlGeoJsonLayer.d.ts +1 -0
  125. package/dist/components/MlGeoJsonLayer/MlGeoJsonLayer.stories.d.ts +1 -0
  126. package/dist/components/MlGeoJsonLayer/story_utils/MlGeojsonLayerCircleStyler.d.ts +1 -0
  127. package/dist/components/MlGeoJsonLayer/story_utils/MlGeojsonLayerHeatMapStyler.d.ts +1 -0
  128. package/dist/components/MlGeoJsonLayer/util/getDefaultPaintPropsByType.d.ts +4 -1
  129. package/dist/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.d.ts +1 -0
  130. package/dist/components/MlGeojsonLayerWithSource/MlGeojsonLayerWithSource.stories.d.ts +1 -0
  131. package/dist/components/MlGpxViewer/MlGpxViewer.d.ts +1 -0
  132. package/dist/components/MlGpxViewer/MlGpxViewer.stories.d.ts +1 -0
  133. package/dist/components/MlGpxViewer/util/GeoJsonProvider.d.ts +1 -0
  134. package/dist/components/MlGpxViewer/util/MetadataDrawer.d.ts +1 -0
  135. package/dist/components/MlGpxViewer/util/MlGpxDemoLoader.d.ts +1 -0
  136. package/dist/components/MlGpxViewer/util/MlGpxViewerInstructions.d.ts +1 -0
  137. package/dist/components/MlImageMarkerLayer/MlImageMarkerLayer.d.ts +1 -0
  138. package/dist/components/MlImageMarkerLayer/MlImageMarkerLayer.stories.d.ts +1 -0
  139. package/dist/components/MlLayer/MlLayer.d.ts +1 -0
  140. package/dist/components/MlLayerMagnify/MlLayerMagnify.stories.d.ts +1 -0
  141. package/dist/components/MlLayerSwipe/MlLayerSwipe.stories.d.ts +1 -0
  142. package/dist/components/MlMarker/MlMarker.d.ts +1 -0
  143. package/dist/components/MlMeasureTool/MlMeasureTool.d.ts +1 -0
  144. package/dist/components/MlNavigationCompass/MlNavigationCompass.d.ts +1 -0
  145. package/dist/components/MlNavigationTools/MlNavigationTools.d.ts +5 -0
  146. package/dist/components/MlScaleReference/MlScaleReference.d.ts +1 -0
  147. package/dist/components/MlShareMapState/MlShareMapState.d.ts +1 -0
  148. package/dist/components/MlShareMapState/MlShareMapState.stories.d.ts +1 -0
  149. package/dist/components/MlSketchTool/LayerList/ColorPicker.d.ts +1 -0
  150. package/dist/components/MlSketchTool/LayerList/LayerList.d.ts +1 -0
  151. package/dist/components/MlSketchTool/LayerList/LayerListItem.d.ts +1 -0
  152. package/dist/components/MlSketchTool/LayerList/LayerPropertyForm.d.ts +1 -0
  153. package/dist/components/MlSketchTool/MlSketchTool.d.ts +1 -0
  154. package/dist/components/MlSketchTool/MlSketchTool.stories.d.ts +1 -0
  155. package/dist/components/MlSpatialElevationProfile/MlSpatialElevationProfile.d.ts +1 -0
  156. package/dist/components/MlSpatialElevationProfile/MlSpatialElevationProfile.stories.d.ts +1 -0
  157. package/dist/components/MlThreeJsLayer/MlThreeJsLayer.stories.d.ts +1 -0
  158. package/dist/components/MlThreeJsLayer/MlThreejsLayer.d.ts +1 -0
  159. package/dist/components/MlTransitionGeoJsonLayer/MlTransitionGeoJsonLayer.d.ts +1 -0
  160. package/dist/components/MlVectorTileLayer/MlVectorTileLayer.d.ts +3 -2
  161. package/dist/components/MlWmsFeatureInfoPopup/MlWmsFeatureInfoPopup.stories.d.ts +1 -0
  162. package/dist/components/MlWmsLayer/MlWmsLayer.d.ts +1 -0
  163. package/dist/components/MlWmsLoader/MlWmsLoader.d.ts +1 -0
  164. package/dist/components/MlWmsLoader/MlWmsLoader.stories.d.ts +1 -0
  165. package/dist/components/MlWmsLoader/utils/MlWmsLoaderInstructions.d.ts +1 -0
  166. package/dist/components/MlWmsLoader/utils/WMSLinks.d.ts +1 -0
  167. package/dist/decorators/EmptyMapDecorator.d.ts +2 -0
  168. package/dist/decorators/ThemeDecorator.d.ts +2 -0
  169. package/dist/hooks/useCameraFollowPath/useCameraFollowPath.stories.d.ts +1 -0
  170. package/dist/hooks/useExportMap/lib.d.ts +1 -1
  171. package/dist/hooks/useLayerFilter/useLayerFilter.stories.d.ts +1 -0
  172. package/dist/hooks/useLayerHoverPopup/useLayerHoverPopup.d.ts +1 -0
  173. package/dist/index.d.ts +7 -0
  174. package/dist/index.esm.css +0 -97
  175. package/dist/index.esm.js +5495 -14503
  176. package/dist/index.esm.js.map +1 -1
  177. package/dist/ui_components/Dropzone.d.ts +1 -0
  178. package/dist/ui_components/ImageLoader.d.ts +1 -0
  179. package/dist/ui_components/LayerList/LayerList.d.ts +6 -0
  180. package/dist/ui_components/LayerList/LayerList.stories.d.ts +12 -0
  181. package/dist/ui_components/LayerList/LayerListFolder.d.ts +9 -0
  182. package/dist/ui_components/LayerList/LayerListItem.d.ts +18 -0
  183. package/dist/ui_components/LayerList/util/LayerListItemVectorLayer.d.ts +15 -0
  184. package/dist/ui_components/LayerList/util/LayerPropertyForm.d.ts +10 -0
  185. package/dist/ui_components/LayerList/util/input/ColorPicker.d.ts +10 -0
  186. package/dist/ui_components/LoadingOverlayContext.d.ts +0 -1
  187. package/dist/ui_components/MapcomponentsTheme.d.ts +7 -0
  188. package/dist/ui_components/Tooltip.d.ts +1 -0
  189. package/dist/ui_components/TopToolbar.d.ts +1 -0
  190. package/dist/ui_components/UploadButton.d.ts +1 -0
  191. package/dist/util/Instructions.d.ts +1 -0
  192. package/package.json +20 -24
  193. package/rollup.config.js +61 -44
  194. package/src/@types/assets/index.d.ts +1 -1
  195. package/src/App.css +0 -55
  196. package/src/components/MapLibreMap/MapLibreMap.stories.js +36 -37
  197. package/src/components/MapLibreMap/MapLibreMap.tsx +23 -17
  198. package/src/components/MapLibreMap/lib/MapLibreGlWrapper.ts +1 -1
  199. package/src/components/MlCenterPosition/MlCenterPosition.tsx +22 -29
  200. package/src/components/MlCreatePdfForm/lib/PdfForm.tsx +6 -6
  201. package/src/components/MlFollowGps/MlFollowGps.stories.js +28 -10
  202. package/src/components/MlFollowGps/MlFollowGps.tsx +31 -50
  203. package/src/components/MlGeoJsonLayer/MlGeoJsonLayer.tsx +1 -1
  204. package/src/components/MlGeoJsonLayer/util/getDefaultPaintPropsByType.ts +16 -10
  205. package/src/components/MlGpxViewer/MlGpxViewer.stories.tsx +4 -13
  206. package/src/components/MlGpxViewer/util/MlGpxDemoLoader.tsx +3 -1
  207. package/src/components/MlNavigationTools/MlNavigationTools.stories.js +4 -5
  208. package/src/components/MlNavigationTools/MlNavigationTools.tsx +30 -54
  209. package/src/components/MlSketchTool/LayerList/LayerPropertyForm.tsx +1 -1
  210. package/src/components/MlSketchTool/MlSketchTool.tsx +1 -1
  211. package/src/components/MlVectorTileLayer/MlVectorTileLayer.tsx +7 -3
  212. package/src/components/MlWmsLoader/MlWmsLoader.stories.tsx +3 -11
  213. package/src/components/MlWmsLoader/utils/MlWmsLoaderInstructions.tsx +2 -2
  214. package/src/components/MlWmsLoader/utils/WMSLinks.tsx +1 -1
  215. package/src/contexts/MapContext.tsx +8 -1
  216. package/src/custom.d.ts +4 -5
  217. package/src/decorators/EmptyMapDecorator.js +38 -0
  218. package/src/decorators/MapContextDecorator.js +10 -16
  219. package/src/decorators/MapContextDecoratorHooks.js +25 -30
  220. package/src/decorators/MultiMapContextDecorator.js +8 -18
  221. package/src/decorators/NoNavToolsDecorator.js +8 -15
  222. package/src/decorators/ThemeDecorator.js +24 -0
  223. package/src/decorators/style.css +0 -2
  224. package/src/hooks/useCameraFollowPath/useCameraFollowPath.stories.tsx +13 -19
  225. package/src/hooks/useExportMap/lib.ts +1 -1
  226. package/src/hooks/useGpx/useGpx.stories.js +1 -1
  227. package/src/hooks/useLayerHoverPopup/useLayerHoverPopup.stories.js +1 -1
  228. package/src/hooks/useMapState.stories.js +1 -1
  229. package/src/hooks/useSources.stories.js +1 -1
  230. package/src/index.ts +9 -0
  231. package/src/ui_components/LayerList/LayerList.stories.tsx +136 -0
  232. package/src/ui_components/LayerList/LayerList.tsx +12 -0
  233. package/src/ui_components/LayerList/LayerListFolder.tsx +82 -0
  234. package/src/ui_components/LayerList/LayerListItem.tsx +180 -0
  235. package/src/ui_components/LayerList/assets/sample_1.json +26 -0
  236. package/src/ui_components/LayerList/assets/sample_2.json +22 -0
  237. package/src/ui_components/LayerList/assets/sample_polygon_1.json +33 -0
  238. package/src/ui_components/LayerList/assets/style.json +2599 -0
  239. package/src/ui_components/LayerList/util/LayerListItemVectorLayer.tsx +92 -0
  240. package/src/ui_components/LayerList/util/LayerPropertyForm.tsx +125 -0
  241. package/src/ui_components/LayerList/util/input/ColorPicker.tsx +44 -0
  242. package/src/ui_components/MapcomponentsTheme.tsx +133 -0
  243. package/src/ui_components/Sidebar.tsx +16 -11
  244. package/src/ui_components/TopToolbar.tsx +1 -3
  245. package/src/util/BubbleForInstructions.js +14 -12
  246. package/tsconfig.json +3 -10
  247. package/dist/components/MlGPXViewer/MlGPXViewer.d.ts +0 -29
  248. package/dist/components/MlGPXViewer/MlGPXViewer.stories.d.ts +0 -16
  249. package/dist/components/MlGPXViewer/MlGPXViewer.test.d.ts +0 -1
  250. package/dist/components/MlGPXViewer/gpxConverter.d.ts +0 -11
  251. package/dist/components/MlGPXViewer/util/GeoJsonContext.d.ts +0 -10
  252. package/dist/components/MlGPXViewer/util/GeoJsonProvider.d.ts +0 -4
  253. package/dist/components/MlLayer/MlLayer.stories.d.ts +0 -10
  254. package/dist/custom.d.d.ts +0 -22
  255. package/dist/decorators/ThemeWrapper.d.ts +0 -1
  256. package/dist/hooks/exportMap/index.d.ts +0 -11
  257. package/dist/hooks/exportMap/lib.d.ts +0 -36
  258. package/dist/ui_components/Legend.d.ts +0 -1
  259. package/dist/ui_components/LoadingOverlay.d.ts +0 -2
@@ -0,0 +1,136 @@
1
+ import React, { useEffect, useState } from 'react';
2
+
3
+ import LayerList from './LayerList';
4
+ import LayerListItem from './LayerListItem';
5
+
6
+ import mapContextDecorator from '../../decorators/EmptyMapDecorator';
7
+ import Sidebar from '../Sidebar';
8
+ import MlGeoJsonLayer from '../../components/MlGeoJsonLayer/MlGeoJsonLayer';
9
+ import sample_geojson_1 from './assets/sample_1.json';
10
+ import sample_geojson_2 from './assets/sample_2.json';
11
+ import LayerListFolder from './LayerListFolder';
12
+
13
+ import style from './assets/style.json';
14
+ import MlVectorTileLayer from '../../components/MlVectorTileLayer/MlVectorTileLayer';
15
+ import { LayerSpecification } from 'maplibre-gl';
16
+ import { Feature } from '@turf/turf';
17
+
18
+ const storyoptions = {
19
+ title: 'UiComponents/LayerList',
20
+ component: LayerList,
21
+ argTypes: {},
22
+ decorators: mapContextDecorator,
23
+ };
24
+ export default storyoptions;
25
+
26
+ const sidebarSx = {
27
+ width: { xs: '80%', sm: '60%', md: '350px', lg: '350px' },
28
+ boxSizing: 'border-box',
29
+ };
30
+
31
+ const Template = () => {
32
+ const [layerOneState, setLayerOneState] = useState({ geojson: sample_geojson_1 as Feature });
33
+ const [layerTwoState, setLayerTwoState] = useState({ geojson: sample_geojson_2 as Feature });
34
+
35
+ useEffect(() => {
36
+ console.log(layerOneState, layerTwoState);
37
+ }, [layerOneState, layerTwoState]);
38
+
39
+ return (
40
+ <>
41
+ <Sidebar sx={sidebarSx} drawerPaperProps={{ sx: sidebarSx }}>
42
+ <LayerList>
43
+ <LayerListItem
44
+ layerComponent={<MlGeoJsonLayer {...layerOneState} />}
45
+ setLayerState={setLayerOneState}
46
+ visible={true}
47
+ configurable={false}
48
+ type="layer"
49
+ name="GeoJSON Layer"
50
+ />
51
+ <LayerListItem
52
+ layerComponent={<MlGeoJsonLayer {...layerTwoState} />}
53
+ setLayerState={setLayerTwoState}
54
+ visible={true}
55
+ configurable={true}
56
+ type="layer"
57
+ name="configurable GeoJSON Layer"
58
+ description="A visualization of a GeoJSON LineString"
59
+ />
60
+ </LayerList>
61
+ </Sidebar>
62
+ </>
63
+ );
64
+ };
65
+ export const ExampleConfig = Template.bind({});
66
+
67
+ ExampleConfig.parameters = {};
68
+ ExampleConfig.args = {};
69
+
70
+ const FolderTemplate = () => {
71
+ return (
72
+ <>
73
+ <Sidebar sx={sidebarSx} drawerPaperProps={{ sx: sidebarSx }}>
74
+ <LayerList>
75
+ <LayerListFolder visible={true} name={'GeoJSON Layers'}>
76
+ <LayerListItem
77
+ layerComponent={<MlGeoJsonLayer geojson={sample_geojson_1 as Feature} />}
78
+ visible={true}
79
+ configurable={false}
80
+ type="layer"
81
+ name="GeoJSON Layer"
82
+ />
83
+ <LayerListItem
84
+ layerComponent={<MlGeoJsonLayer geojson={sample_geojson_2 as Feature} />}
85
+ visible={true}
86
+ configurable={true}
87
+ type="layer"
88
+ name="GeoJSON Layer 2"
89
+ description="A visualization of a GeoJSON LineString"
90
+ />
91
+ </LayerListFolder>
92
+ </LayerList>
93
+ </Sidebar>
94
+ </>
95
+ );
96
+ };
97
+ export const FolderExample = FolderTemplate.bind({});
98
+
99
+ FolderExample.parameters = {};
100
+ FolderExample.args = {};
101
+
102
+ const VectortileTemplate = () => {
103
+ const [layerState, setLayerState] = useState({
104
+ layerId: 'openmaptiles',
105
+ sourceOptions: {
106
+ type: 'vector' as const,
107
+ tiles: ['https://wms.wheregroup.com/tileserver/tile/world-0-14/{z}/{x}/{y}.pbf'],
108
+ },
109
+ layers: [...style.layers] as LayerSpecification[],
110
+ });
111
+
112
+ useEffect(() => {
113
+ console.log(layerState);
114
+ },[layerState])
115
+
116
+ return (
117
+ <>
118
+ <Sidebar sx={sidebarSx} drawerPaperProps={{ sx: sidebarSx }}>
119
+ <LayerList>
120
+ <LayerListItem
121
+ layerComponent={<MlVectorTileLayer {...layerState} />}
122
+ setLayerState={setLayerState}
123
+ visible={true}
124
+ configurable={false}
125
+ type="layer"
126
+ name="Vector style"
127
+ />
128
+ </LayerList>
129
+ </Sidebar>
130
+ </>
131
+ );
132
+ };
133
+ export const VectortileExample = VectortileTemplate.bind({});
134
+
135
+ VectortileExample.parameters = {};
136
+ VectortileExample.args = {};
@@ -0,0 +1,12 @@
1
+ import { List } from '@mui/material';
2
+ import React from 'react';
3
+
4
+ type Props = {
5
+ children: JSX.Element | JSX.Element[];
6
+ };
7
+
8
+ function LayerList({ children }: Props) {
9
+ return <List sx={{marginTop:'15px'}}>{children}</List>;
10
+ }
11
+
12
+ export default LayerList;
@@ -0,0 +1,82 @@
1
+ import { ExpandLess, ExpandMore } from '@mui/icons-material';
2
+ import { ListItemIcon, ListItemText, List, Checkbox, ListItem, IconButton } from '@mui/material';
3
+ import { Box } from '@mui/system';
4
+ import React, { useMemo, useState } from 'react';
5
+
6
+ type Props = {
7
+ visible: boolean;
8
+ name?: string;
9
+ children: JSX.Element | JSX.Element[];
10
+ setVisible?: (visible: boolean | ((val: unknown) => boolean)) => void;
11
+ };
12
+
13
+ export default function LayerListFolder({ visible = true, name, children, setVisible }: Props) {
14
+ const [open, setOpen] = useState(false);
15
+ const [localVisible, setLocalVisible] = useState(true);
16
+ const _visible = useMemo(() => {
17
+ if (!visible) {
18
+ return false;
19
+ }
20
+ return localVisible;
21
+ }, [visible, localVisible]);
22
+
23
+ const _children = useMemo(() => {
24
+ if (children) {
25
+ if (Array.isArray(children)) {
26
+ return children.map((element) => {
27
+ return React.cloneElement(element, {
28
+ visible: _visible,
29
+ });
30
+ });
31
+ }
32
+ return React.cloneElement(children, {
33
+ visible: _visible,
34
+ });
35
+ }
36
+ return <></>;
37
+ }, [_visible]);
38
+
39
+ return (
40
+ <>
41
+ <ListItem
42
+ secondaryAction={
43
+ <IconButton
44
+ sx={{ padding: '4px', marginTop: '-3px' }}
45
+ edge="end"
46
+ aria-label="open"
47
+ onClick={() => setOpen(!open)}
48
+ >
49
+ {open ? <ExpandLess /> : <ExpandMore />}
50
+ </IconButton>
51
+ }
52
+ sx={{
53
+ paddingRight: 0,
54
+ paddingLeft: 0,
55
+ paddingTop: 0,
56
+ paddingBottom: '4px',
57
+ }}
58
+ >
59
+ <ListItemIcon sx={{ minWidth: '30px' }}>
60
+ <Checkbox
61
+ sx={{ padding: 0 }}
62
+ disabled={setVisible ? false : !visible}
63
+ checked={setVisible?visible:localVisible}
64
+ onClick={() => {
65
+ if (setVisible) {
66
+ setVisible((val) => !val);
67
+ } else {
68
+ setLocalVisible((val) => !val);
69
+ }
70
+ }}
71
+ />
72
+ </ListItemIcon>
73
+ <ListItemText primary={name} />
74
+ </ListItem>
75
+ <Box sx={{ display: open ? 'block' : 'none' }}>
76
+ <List component="div" disablePadding sx={{ paddingLeft: '18px' }}>
77
+ {_children}
78
+ </List>
79
+ </Box>
80
+ </>
81
+ );
82
+ }
@@ -0,0 +1,180 @@
1
+ import { Checkbox, IconButton, ListItem, ListItemIcon, ListItemText } from '@mui/material';
2
+ import TuneIcon from '@mui/icons-material/Tune';
3
+ import React, { useMemo, useRef, useState } from 'react';
4
+ import getDefaulLayerTypeByGeometry from '../../components/MlGeoJsonLayer/util/getDefaultLayerTypeByGeometry';
5
+ import LayerPropertyForm from './util/LayerPropertyForm';
6
+ import getDefaultPaintPropsByType from '../../components/MlGeoJsonLayer/util/getDefaultPaintPropsByType';
7
+ import LayerListFolder from './LayerListFolder';
8
+ import { LayerSpecification } from 'maplibre-gl';
9
+ import LayerListItemVectorLayer from './util/LayerListItemVectorLayer';
10
+ import { useEffect } from 'react';
11
+
12
+ type Props = {
13
+ layerComponent: JSX.Element;
14
+ visible: boolean;
15
+ configurable: boolean;
16
+ type?: 'background' | 'background-labels' | 'layer' | 'wms-layer' | 'vector-tile-layer';
17
+ name: string;
18
+ description?: string;
19
+ setLayerState?: (state: unknown) => void;
20
+ };
21
+
22
+ function LayerListItem({
23
+ layerComponent,
24
+ visible,
25
+ type,
26
+ name,
27
+ description,
28
+ configurable,
29
+ setLayerState,
30
+ }: Props) {
31
+ const [localVisible, setLocalVisible] = useState(true);
32
+ const [paintPropsFormVisible, setPaintPropsFormVisible] = useState(false);
33
+ const visibleRef = useRef<boolean>(visible);
34
+
35
+ // this state variable is used for layer components that provide a paint attribute
36
+ const [paintProps, setPaintProps] = useState(
37
+ layerComponent?.props?.paint ||
38
+ getDefaultPaintPropsByType(
39
+ layerComponent?.props?.type || getDefaulLayerTypeByGeometry(layerComponent.props.geojson)
40
+ )
41
+ );
42
+
43
+ const _visible = useMemo(() => {
44
+ if (!visible) {
45
+ return false;
46
+ }
47
+ return localVisible;
48
+ }, [visible, localVisible]);
49
+
50
+ useEffect(() => {
51
+ if (!setLayerState || !layerComponent?.props?.layers || _visible === visibleRef.current) return;
52
+
53
+ visibleRef.current = _visible;
54
+
55
+ const state = { ...layerComponent?.props };
56
+ state.layers = layerComponent?.props?.layers.map((el: LayerSpecification) => {
57
+ if (el.layout) {
58
+ el.layout['visibility'] = _visible ? 'visible' : 'none';
59
+ } else {
60
+ el.layout = { visibility: _visible ? 'visible' : 'none' };
61
+ }
62
+ return el;
63
+ });
64
+ setLayerState(state);
65
+ }, [_visible, setLayerState, layerComponent?.props?.layers]);
66
+
67
+ useEffect(() => {
68
+ if (!setLayerState || !paintProps) return;
69
+
70
+ setLayerState({ ...layerComponent.props, paint: paintProps });
71
+ }, [paintProps, setLayerState]);
72
+
73
+ const _layerComponent = useMemo(() => {
74
+ if (layerComponent && type === 'layer') {
75
+ if (layerComponent?.props?.layers) {
76
+ return React.cloneElement(layerComponent, {
77
+ ...layerComponent?.props,
78
+ layers: layerComponent?.props?.layers,
79
+ });
80
+ } else {
81
+ return React.cloneElement(layerComponent, {
82
+ layout: {
83
+ visibility: _visible ? 'visible' : 'none',
84
+ },
85
+ ...(setLayerState ? {} : { paint: paintProps }),
86
+ });
87
+ }
88
+ }
89
+ return <></>;
90
+ }, [type, layerComponent, paintProps, _visible, layerComponent?.props?.layers]);
91
+
92
+ const layerType = useMemo(() => {
93
+ if (layerComponent && type === 'layer') {
94
+ if (layerComponent.props.type) {
95
+ return layerComponent.props.type;
96
+ }
97
+ if (layerComponent.props.geojson) {
98
+ return getDefaulLayerTypeByGeometry(layerComponent.props.geojson);
99
+ }
100
+ }
101
+
102
+ return undefined;
103
+ }, [layerComponent]);
104
+
105
+ return (
106
+ <>
107
+ {!layerComponent?.props?.layers && (
108
+ <ListItem
109
+ sx={{
110
+ paddingRight: configurable ? '56px' : 0,
111
+ paddingLeft: 0,
112
+ paddingTop: 0,
113
+ paddingBottom: '4px',
114
+ }}
115
+ secondaryAction={
116
+ configurable ? (
117
+ <IconButton
118
+ edge="end"
119
+ aria-label="comments"
120
+ onClick={() => {
121
+ setPaintPropsFormVisible((current) => {
122
+ return !current;
123
+ });
124
+ }}
125
+ sx={{ padding: '4px', marginTop: '-3px' }}
126
+ >
127
+ <TuneIcon />
128
+ </IconButton>
129
+ ) : undefined
130
+ }
131
+ >
132
+ <ListItemIcon sx={{ minWidth: '30px' }}>
133
+ <Checkbox
134
+ disabled={!visible}
135
+ checked={localVisible}
136
+ sx={{ padding: 0 }}
137
+ onClick={() => {
138
+ setLocalVisible((val) => !val);
139
+ }}
140
+ />
141
+ </ListItemIcon>
142
+ <ListItemText
143
+ primary={name}
144
+ primaryTypographyProps={{ sx: { fontSize: '0.9rem' } }}
145
+ secondary={description}
146
+ secondaryTypographyProps={{ sx: { fontSize: '0.7rem' } }}
147
+ />
148
+ </ListItem>
149
+ )}
150
+ {_layerComponent}
151
+ {!layerComponent?.props?.layers && configurable && paintPropsFormVisible && (
152
+ <LayerPropertyForm
153
+ paintProps={paintProps}
154
+ setPaintProps={setPaintProps}
155
+ layerType={layerType}
156
+ />
157
+ )}
158
+
159
+ {layerComponent?.props?.layers && (
160
+ <LayerListFolder visible={localVisible} setVisible={setLocalVisible} name={name}>
161
+ {layerComponent?.props?.layers?.map?.((_el: LayerSpecification, idx: number) => (
162
+ <LayerListItemVectorLayer
163
+ vtProps={layerComponent?.props}
164
+ setVtProps={setLayerState}
165
+ id={'' + idx}
166
+ key={'' + idx}
167
+ />
168
+ ))}
169
+ </LayerListFolder>
170
+ )}
171
+ </>
172
+ );
173
+ }
174
+
175
+ LayerListItem.defaultProps = {
176
+ type: 'layer',
177
+ visible: true,
178
+ };
179
+
180
+ export default LayerListItem;
@@ -0,0 +1,26 @@
1
+ {
2
+ "type": "Feature",
3
+ "properties": {},
4
+ "geometry": {
5
+ "type": "LineString",
6
+ "coordinates": [
7
+ [7.1074676513671875, 50.74340774029213],
8
+ [7.0992279052734375, 50.756441089372665],
9
+ [7.079315185546874, 50.764693667025014],
10
+ [7.045669555664062, 50.77945780529241],
11
+ [7.030563354492187, 50.79161300845443],
12
+ [7.0291900634765625, 50.80940599750376],
13
+ [7.0236968994140625, 50.820685846099174],
14
+ [7.0085906982421875, 50.825891011253546],
15
+ [6.9879913330078125, 50.826758482363275],
16
+ [6.97906494140625, 50.835432306955276],
17
+ [6.9824981689453125, 50.84583876895451],
18
+ [6.9962310791015625, 50.85147463352982],
19
+ [7.012023925781249, 50.85710981721644],
20
+ [7.021636962890625, 50.86664473085768],
21
+ [7.0367431640625, 50.872278081520406],
22
+ [7.0477294921875, 50.877044231111014],
23
+ [7.052536010742187, 50.88397594225127]
24
+ ]
25
+ }
26
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "type": "Feature",
3
+ "properties": {},
4
+ "geometry": {
5
+ "type": "LineString",
6
+ "coordinates": [
7
+ [7.0635223388671875, 50.71385204707258],
8
+ [7.06146240234375, 50.709721458354075],
9
+ [7.063865661621094, 50.70298129536074],
10
+ [7.064552307128906, 50.69906720767511],
11
+ [7.059059143066406, 50.69428287906098],
12
+ [7.05596923828125, 50.68797551838366],
13
+ [7.0580291748046875, 50.680797145321655],
14
+ [7.062835693359375, 50.67514068397085],
15
+ [7.060432434082031, 50.6686131506577],
16
+ [7.051849365234375, 50.659255436656736],
17
+ [7.044639587402344, 50.6512019574539],
18
+ [7.0484161376953125, 50.64271166020676],
19
+ [7.0566558837890625, 50.63748609931014]
20
+ ]
21
+ }
22
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "type": "FeatureCollection",
3
+ "features": [
4
+ {
5
+ "type": "Feature",
6
+ "properties": {},
7
+ "geometry": {
8
+ "coordinates": [
9
+ [
10
+ [7.08646747303149, 50.74485058672653],
11
+ [7.084287513691095, 50.74371917250187],
12
+ [7.084437772332876, 50.743610683782215],
13
+ [7.084640903561933, 50.743721758552354],
14
+ [7.085805654941254, 50.74293993704128],
15
+ [7.087023278906713, 50.74218320888983],
16
+ [7.087791368229503, 50.74258090834434],
17
+ [7.088796806075749, 50.743261830692745],
18
+ [7.089275088452752, 50.743701110992674],
19
+ [7.088087117762917, 50.74409411011173],
20
+ [7.087662548338368, 50.743784963165815],
21
+ [7.087184330538875, 50.7440368518605],
22
+ [7.087233860417484, 50.744077781245316],
23
+ [7.08714938625954, 50.744122118772154],
24
+ [7.087057544749172, 50.74427276821896],
25
+ [7.087104984084277, 50.744509715654885],
26
+ [7.08646747303149, 50.74485058672653]
27
+ ]
28
+ ],
29
+ "type": "Polygon"
30
+ }
31
+ }
32
+ ]
33
+ }