@maplibre/maplibre-react-native 8.6.0-beta.0

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 (381) hide show
  1. package/.eslintignore +3 -0
  2. package/.eslintrc.js +158 -0
  3. package/.gitattributes +1 -0
  4. package/.nvmrc +1 -0
  5. package/.prettierrc.js +7 -0
  6. package/.sonarcloud.properties +15 -0
  7. package/CHANGELOG.md +367 -0
  8. package/CODE_OF_CONDUCT.md +2 -0
  9. package/CONTRIBUTING.md +34 -0
  10. package/LICENSE.md +9 -0
  11. package/README.md +224 -0
  12. package/RELEASE.md +30 -0
  13. package/android/build.gradle +34 -0
  14. package/android/install.md +16 -0
  15. package/android/rctmgl/.settings/org.eclipse.buildship.core.prefs +2 -0
  16. package/android/rctmgl/build.gradle +61 -0
  17. package/android/rctmgl/proguard-rules.pro +25 -0
  18. package/android/rctmgl/src/main/AndroidManifest.xml +4 -0
  19. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/RCTMGLPackage.java +99 -0
  20. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/AbstractEvent.java +35 -0
  21. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/AbstractEventEmitter.java +80 -0
  22. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/AbstractMapFeature.java +19 -0
  23. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/MarkerView.java +23 -0
  24. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/MarkerViewManager.java +67 -0
  25. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/RCTMGLCallout.java +15 -0
  26. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/RCTMGLCalloutManager.java +22 -0
  27. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/RCTMGLMarkerView.java +112 -0
  28. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/RCTMGLMarkerViewManager.java +45 -0
  29. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/RCTMGLPointAnnotation.java +360 -0
  30. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/annotation/RCTMGLPointAnnotationManager.java +88 -0
  31. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/camera/CameraStop.java +249 -0
  32. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/camera/CameraUpdateItem.java +125 -0
  33. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/camera/CameraUpdateQueue.java +73 -0
  34. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/camera/RCTMGLCamera.java +530 -0
  35. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/camera/RCTMGLCameraManager.java +101 -0
  36. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/camera/constants/CameraMode.java +22 -0
  37. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/images/RCTMGLImages.java +234 -0
  38. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/images/RCTMGLImagesManager.java +103 -0
  39. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/location/LocationComponentManager.java +149 -0
  40. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/location/RCTMGLNativeUserLocation.java +66 -0
  41. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/location/RCTMGLNativeUserLocationManager.java +35 -0
  42. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/LayerSourceInfo.java +59 -0
  43. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/RCTMGLAndroidTextureMapView.java +16 -0
  44. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/RCTMGLAndroidTextureMapViewManager.java +31 -0
  45. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/RCTMGLMapView.java +1527 -0
  46. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/RCTMGLMapViewManager.java +353 -0
  47. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/mapview/helpers/CameraChangeTracker.java +41 -0
  48. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyle.java +83 -0
  49. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyleFactory.java +2242 -0
  50. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyleFunctionParser.java +108 -0
  51. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/RCTMGLStyleValue.java +212 -0
  52. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTLayer.java +287 -0
  53. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLBackgroundLayer.java +27 -0
  54. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLBackgroundLayerManager.java +64 -0
  55. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLCircleLayer.java +55 -0
  56. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLCircleLayerManager.java +77 -0
  57. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLFillExtrusionLayer.java +55 -0
  58. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLFillExtrusionLayerManager.java +80 -0
  59. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLFillLayer.java +55 -0
  60. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLFillLayerManager.java +80 -0
  61. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLHeatmapLayer.java +55 -0
  62. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLHeatmapLayerManager.java +77 -0
  63. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLLineLayer.java +55 -0
  64. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLLineLayerManager.java +79 -0
  65. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLRasterLayer.java +27 -0
  66. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLRasterLayerManager.java +64 -0
  67. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLSymbolLayer.java +55 -0
  68. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/layers/RCTMGLSymbolLayerManager.java +75 -0
  69. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/light/RCTMGLLight.java +65 -0
  70. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/light/RCTMGLLightManager.java +29 -0
  71. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLImageSource.java +81 -0
  72. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLImageSourceManager.java +72 -0
  73. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLRasterSource.java +45 -0
  74. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLRasterSourceManager.java +44 -0
  75. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLShapeSource.java +302 -0
  76. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLShapeSourceManager.java +227 -0
  77. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLTileSource.java +97 -0
  78. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLTileSourceManager.java +80 -0
  79. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLVectorSource.java +64 -0
  80. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTMGLVectorSourceManager.java +84 -0
  81. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/components/styles/sources/RCTSource.java +244 -0
  82. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/AbstractEvent.java +66 -0
  83. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/AndroidCallbackEvent.java +38 -0
  84. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/EventEmitter.java +45 -0
  85. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/FeatureClickEvent.java +79 -0
  86. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/IEvent.java +18 -0
  87. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/ImageMissingEvent.java +42 -0
  88. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/LocationEvent.java +100 -0
  89. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/MapChangeEvent.java +47 -0
  90. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/MapClickEvent.java +51 -0
  91. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/MapUserTrackingModeEvent.java +36 -0
  92. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/OfflineEvent.java +29 -0
  93. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/PointAnnotationClickEvent.java +46 -0
  94. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/PointAnnotationDragEvent.java +51 -0
  95. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/constants/EventKeys.java +39 -0
  96. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/events/constants/EventTypes.java +51 -0
  97. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/http/CustomHeadersInterceptor.java +38 -0
  98. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/location/LocationManager.java +168 -0
  99. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/location/UserLocation.java +63 -0
  100. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/location/UserLocationVerticalAlignment.java +11 -0
  101. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/location/UserTrackingMode.java +63 -0
  102. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/location/UserTrackingState.java +19 -0
  103. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/modules/RCTMGLLocationModule.java +158 -0
  104. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/modules/RCTMGLLogging.java +140 -0
  105. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/modules/RCTMGLModule.java +348 -0
  106. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/modules/RCTMGLOfflineModule.java +597 -0
  107. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/modules/RCTMGLSnapshotModule.java +139 -0
  108. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/BitmapUtils.java +129 -0
  109. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/ConvertUtils.java +257 -0
  110. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/DownloadMapImageTask.java +159 -0
  111. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/ExpressionParser.java +74 -0
  112. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/GeoJSONUtils.java +209 -0
  113. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/GeoViewport.java +38 -0
  114. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/ImageEntry.java +25 -0
  115. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/ResourceUtils.java +30 -0
  116. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/SimpleEventCallback.java +30 -0
  117. package/android/rctmgl/src/main/java/com/mapbox/rctmgl/utils/SphericalMercator.java +69 -0
  118. package/android/rctmgl/src/main/res/drawable/empty.xml +5 -0
  119. package/android/rctmgl/src/main/res/drawable/empty_drawable.png +0 -0
  120. package/android/rctmgl/src/main/res/drawable-xxhdpi/red_marker.png +0 -0
  121. package/android/rctmgl/src/main/res/layout/annotation.xml +17 -0
  122. package/android/rctmgl/src/main/res/values/strings.xml +3 -0
  123. package/android/settings.gradle +1 -0
  124. package/app.plugin.js +1 -0
  125. package/assets/heading.png +0 -0
  126. package/assets/heading@2x.png +0 -0
  127. package/assets/heading@3x.png +0 -0
  128. package/assets/indoor_building_map_android.png +0 -0
  129. package/assets/indoor_building_map_ios.png +0 -0
  130. package/assets/mapbox_logo.png +0 -0
  131. package/babel.config.js +9 -0
  132. package/docs/Annotation.md +39 -0
  133. package/docs/Annotations.md +17 -0
  134. package/docs/BackgroundLayer.md +166 -0
  135. package/docs/Callout.md +15 -0
  136. package/docs/Camera.md +162 -0
  137. package/docs/CircleLayer.md +453 -0
  138. package/docs/CustomHttpHeaders.md +87 -0
  139. package/docs/FillExtrusionLayer.md +327 -0
  140. package/docs/FillLayer.md +293 -0
  141. package/docs/GettingStarted.md +72 -0
  142. package/docs/HeadingIndicator.md +10 -0
  143. package/docs/HeatmapLayer.md +215 -0
  144. package/docs/ImageSource.md +12 -0
  145. package/docs/Images.md +12 -0
  146. package/docs/Light.md +159 -0
  147. package/docs/LineLayer.md +567 -0
  148. package/docs/Logger.md +23 -0
  149. package/docs/MapView.md +211 -0
  150. package/docs/MapboxGL.md +65 -0
  151. package/docs/MarkerView.md +14 -0
  152. package/docs/NativeUserLocation.md +11 -0
  153. package/docs/OfflineManager.md +246 -0
  154. package/docs/PointAnnotation.md +34 -0
  155. package/docs/RasterLayer.md +357 -0
  156. package/docs/RasterSource.md +17 -0
  157. package/docs/ShapeSource.md +100 -0
  158. package/docs/Style.md +10 -0
  159. package/docs/StyleSheet.md +430 -0
  160. package/docs/SymbolLayer.md +1658 -0
  161. package/docs/UserLocation.md +39 -0
  162. package/docs/VectorSource.md +48 -0
  163. package/docs/docs.json +6093 -0
  164. package/docs/snapshotManager.md +53 -0
  165. package/index.d.ts +953 -0
  166. package/ios/RCTMGL/CameraMode.h +18 -0
  167. package/ios/RCTMGL/CameraMode.m +18 -0
  168. package/ios/RCTMGL/CameraStop.h +26 -0
  169. package/ios/RCTMGL/CameraStop.m +83 -0
  170. package/ios/RCTMGL/CameraUpdateItem.h +18 -0
  171. package/ios/RCTMGL/CameraUpdateItem.m +178 -0
  172. package/ios/RCTMGL/CameraUpdateQueue.h +21 -0
  173. package/ios/RCTMGL/CameraUpdateQueue.m +74 -0
  174. package/ios/RCTMGL/FilterParser.h +14 -0
  175. package/ios/RCTMGL/FilterParser.m +22 -0
  176. package/ios/RCTMGL/MGLCustomHeaders.h +20 -0
  177. package/ios/RCTMGL/MGLCustomHeaders.m +98 -0
  178. package/ios/RCTMGL/MGLFaux3DUserLocationAnnotationView.h +23 -0
  179. package/ios/RCTMGL/MGLFaux3DUserLocationAnnotationView.m +474 -0
  180. package/ios/RCTMGL/MGLModule.h +13 -0
  181. package/ios/RCTMGL/MGLModule.m +269 -0
  182. package/ios/RCTMGL/MGLOfflineModule.h +19 -0
  183. package/ios/RCTMGL/MGLOfflineModule.m +516 -0
  184. package/ios/RCTMGL/MGLSnapshotModule.h +13 -0
  185. package/ios/RCTMGL/MGLSnapshotModule.m +80 -0
  186. package/ios/RCTMGL/MGLUserLocationHeadingArrowLayer.h +11 -0
  187. package/ios/RCTMGL/MGLUserLocationHeadingArrowLayer.m +57 -0
  188. package/ios/RCTMGL/MGLUserLocationHeadingBeamLayer.h +11 -0
  189. package/ios/RCTMGL/MGLUserLocationHeadingBeamLayer.m +102 -0
  190. package/ios/RCTMGL/MGLUserLocationHeadingIndicator.h +10 -0
  191. package/ios/RCTMGL/RCTConvert+Mapbox.h +16 -0
  192. package/ios/RCTMGL/RCTConvert+Mapbox.m +32 -0
  193. package/ios/RCTMGL/RCTMGL.h +13 -0
  194. package/ios/RCTMGL/RCTMGL.m +13 -0
  195. package/ios/RCTMGL/RCTMGLBackgroundLayer.h +14 -0
  196. package/ios/RCTMGL/RCTMGLBackgroundLayer.m +27 -0
  197. package/ios/RCTMGL/RCTMGLBackgroundLayerManager.h +13 -0
  198. package/ios/RCTMGL/RCTMGLBackgroundLayerManager.m +35 -0
  199. package/ios/RCTMGL/RCTMGLCallout.h +15 -0
  200. package/ios/RCTMGL/RCTMGLCallout.m +74 -0
  201. package/ios/RCTMGL/RCTMGLCalloutManager.h +13 -0
  202. package/ios/RCTMGL/RCTMGLCalloutManager.m +21 -0
  203. package/ios/RCTMGL/RCTMGLCamera.h +39 -0
  204. package/ios/RCTMGL/RCTMGLCamera.m +258 -0
  205. package/ios/RCTMGL/RCTMGLCameraManager.h +13 -0
  206. package/ios/RCTMGL/RCTMGLCameraManager.m +52 -0
  207. package/ios/RCTMGL/RCTMGLCircleLayer.h +13 -0
  208. package/ios/RCTMGL/RCTMGLCircleLayer.m +34 -0
  209. package/ios/RCTMGL/RCTMGLCircleLayerManager.h +13 -0
  210. package/ios/RCTMGL/RCTMGLCircleLayerManager.m +39 -0
  211. package/ios/RCTMGL/RCTMGLEvent.h +21 -0
  212. package/ios/RCTMGL/RCTMGLEvent.m +47 -0
  213. package/ios/RCTMGL/RCTMGLEventProtocol.h +16 -0
  214. package/ios/RCTMGL/RCTMGLEventTypes.h +50 -0
  215. package/ios/RCTMGL/RCTMGLEventTypes.m +49 -0
  216. package/ios/RCTMGL/RCTMGLFillExtrusionLayer.h +14 -0
  217. package/ios/RCTMGL/RCTMGLFillExtrusionLayer.m +32 -0
  218. package/ios/RCTMGL/RCTMGLFillExtrusionLayerManager.h +13 -0
  219. package/ios/RCTMGL/RCTMGLFillExtrusionLayerManager.m +39 -0
  220. package/ios/RCTMGL/RCTMGLFillLayer.h +14 -0
  221. package/ios/RCTMGL/RCTMGLFillLayer.m +33 -0
  222. package/ios/RCTMGL/RCTMGLFillLayerManager.h +13 -0
  223. package/ios/RCTMGL/RCTMGLFillLayerManager.m +37 -0
  224. package/ios/RCTMGL/RCTMGLHeatmapLayer.h +12 -0
  225. package/ios/RCTMGL/RCTMGLHeatmapLayer.m +30 -0
  226. package/ios/RCTMGL/RCTMGLHeatmapLayerManager.h +12 -0
  227. package/ios/RCTMGL/RCTMGLHeatmapLayerManager.m +38 -0
  228. package/ios/RCTMGL/RCTMGLImageQueue.h +19 -0
  229. package/ios/RCTMGL/RCTMGLImageQueue.m +57 -0
  230. package/ios/RCTMGL/RCTMGLImageQueueOperation.h +17 -0
  231. package/ios/RCTMGL/RCTMGLImageQueueOperation.m +138 -0
  232. package/ios/RCTMGL/RCTMGLImageSource.h +16 -0
  233. package/ios/RCTMGL/RCTMGLImageSource.m +60 -0
  234. package/ios/RCTMGL/RCTMGLImageSourceManager.h +13 -0
  235. package/ios/RCTMGL/RCTMGLImageSourceManager.m +25 -0
  236. package/ios/RCTMGL/RCTMGLImages.h +25 -0
  237. package/ios/RCTMGL/RCTMGLImages.m +126 -0
  238. package/ios/RCTMGL/RCTMGLImagesManager.h +5 -0
  239. package/ios/RCTMGL/RCTMGLImagesManager.m +21 -0
  240. package/ios/RCTMGL/RCTMGLLayer.h +52 -0
  241. package/ios/RCTMGL/RCTMGLLayer.m +236 -0
  242. package/ios/RCTMGL/RCTMGLLight.h +17 -0
  243. package/ios/RCTMGL/RCTMGLLight.m +46 -0
  244. package/ios/RCTMGL/RCTMGLLightManager.h +13 -0
  245. package/ios/RCTMGL/RCTMGLLightManager.m +23 -0
  246. package/ios/RCTMGL/RCTMGLLineLayer.h +14 -0
  247. package/ios/RCTMGL/RCTMGLLineLayer.m +33 -0
  248. package/ios/RCTMGL/RCTMGLLineLayerManager.h +13 -0
  249. package/ios/RCTMGL/RCTMGLLineLayerManager.m +40 -0
  250. package/ios/RCTMGL/RCTMGLLocation.h +19 -0
  251. package/ios/RCTMGL/RCTMGLLocation.m +32 -0
  252. package/ios/RCTMGL/RCTMGLLocationManager.h +30 -0
  253. package/ios/RCTMGL/RCTMGLLocationManager.m +180 -0
  254. package/ios/RCTMGL/RCTMGLLocationManagerDelegate.h +20 -0
  255. package/ios/RCTMGL/RCTMGLLocationModule.h +15 -0
  256. package/ios/RCTMGL/RCTMGLLocationModule.m +99 -0
  257. package/ios/RCTMGL/RCTMGLLogging.h +18 -0
  258. package/ios/RCTMGL/RCTMGLLogging.m +132 -0
  259. package/ios/RCTMGL/RCTMGLMapTouchEvent.h +25 -0
  260. package/ios/RCTMGL/RCTMGLMapTouchEvent.m +77 -0
  261. package/ios/RCTMGL/RCTMGLMapView.h +91 -0
  262. package/ios/RCTMGL/RCTMGLMapView.m +536 -0
  263. package/ios/RCTMGL/RCTMGLMapViewManager.h +17 -0
  264. package/ios/RCTMGL/RCTMGLMapViewManager.m +625 -0
  265. package/ios/RCTMGL/RCTMGLNativeUserLocation.h +18 -0
  266. package/ios/RCTMGL/RCTMGLNativeUserLocation.m +49 -0
  267. package/ios/RCTMGL/RCTMGLNativeUserLocationManager.h +5 -0
  268. package/ios/RCTMGL/RCTMGLNativeUserLocationManager.m +25 -0
  269. package/ios/RCTMGL/RCTMGLPointAnnotation.h +41 -0
  270. package/ios/RCTMGL/RCTMGLPointAnnotation.m +251 -0
  271. package/ios/RCTMGL/RCTMGLPointAnnotationManager.h +13 -0
  272. package/ios/RCTMGL/RCTMGLPointAnnotationManager.m +36 -0
  273. package/ios/RCTMGL/RCTMGLRasterLayer.h +14 -0
  274. package/ios/RCTMGL/RCTMGLRasterLayer.m +30 -0
  275. package/ios/RCTMGL/RCTMGLRasterLayerManager.h +13 -0
  276. package/ios/RCTMGL/RCTMGLRasterLayerManager.m +35 -0
  277. package/ios/RCTMGL/RCTMGLRasterSource.h +16 -0
  278. package/ios/RCTMGL/RCTMGLRasterSource.m +35 -0
  279. package/ios/RCTMGL/RCTMGLRasterSourceManager.h +13 -0
  280. package/ios/RCTMGL/RCTMGLRasterSourceManager.m +32 -0
  281. package/ios/RCTMGL/RCTMGLShapeSource.h +52 -0
  282. package/ios/RCTMGL/RCTMGLShapeSource.m +180 -0
  283. package/ios/RCTMGL/RCTMGLShapeSourceManager.h +14 -0
  284. package/ios/RCTMGL/RCTMGLShapeSourceManager.m +205 -0
  285. package/ios/RCTMGL/RCTMGLSource.h +35 -0
  286. package/ios/RCTMGL/RCTMGLSource.m +143 -0
  287. package/ios/RCTMGL/RCTMGLStyle.h +219 -0
  288. package/ios/RCTMGL/RCTMGLStyle.m +1654 -0
  289. package/ios/RCTMGL/RCTMGLStyleValue.h +27 -0
  290. package/ios/RCTMGL/RCTMGLStyleValue.m +167 -0
  291. package/ios/RCTMGL/RCTMGLSymbolLayer.h +19 -0
  292. package/ios/RCTMGL/RCTMGLSymbolLayer.m +121 -0
  293. package/ios/RCTMGL/RCTMGLSymbolLayerManager.h +13 -0
  294. package/ios/RCTMGL/RCTMGLSymbolLayerManager.m +40 -0
  295. package/ios/RCTMGL/RCTMGLTileSource.h +22 -0
  296. package/ios/RCTMGL/RCTMGLTileSource.m +31 -0
  297. package/ios/RCTMGL/RCTMGLUserLocation.h +15 -0
  298. package/ios/RCTMGL/RCTMGLUserLocation.m +38 -0
  299. package/ios/RCTMGL/RCTMGLUtils.h +31 -0
  300. package/ios/RCTMGL/RCTMGLUtils.m +218 -0
  301. package/ios/RCTMGL/RCTMGLVectorLayer.h +15 -0
  302. package/ios/RCTMGL/RCTMGLVectorLayer.m +59 -0
  303. package/ios/RCTMGL/RCTMGLVectorSource.h +16 -0
  304. package/ios/RCTMGL/RCTMGLVectorSource.m +28 -0
  305. package/ios/RCTMGL/RCTMGLVectorSourceManager.h +14 -0
  306. package/ios/RCTMGL/RCTMGLVectorSourceManager.m +79 -0
  307. package/ios/RCTMGL/RNMBImageUtils.h +17 -0
  308. package/ios/RCTMGL/RNMBImageUtils.m +31 -0
  309. package/ios/RCTMGL/ViewManager.h +16 -0
  310. package/ios/RCTMGL/ViewManager.m +63 -0
  311. package/ios/RCTMGL/index.d.ts +1164 -0
  312. package/ios/RCTMGL.xcodeproj/project.pbxproj +774 -0
  313. package/ios/install.md +44 -0
  314. package/javascript/components/AbstractLayer.js +75 -0
  315. package/javascript/components/AbstractSource.js +15 -0
  316. package/javascript/components/BackgroundLayer.js +97 -0
  317. package/javascript/components/Callout.js +139 -0
  318. package/javascript/components/Camera.js +665 -0
  319. package/javascript/components/CircleLayer.js +101 -0
  320. package/javascript/components/FillExtrusionLayer.js +98 -0
  321. package/javascript/components/FillLayer.js +94 -0
  322. package/javascript/components/HeadingIndicator.js +31 -0
  323. package/javascript/components/HeatmapLayer.js +99 -0
  324. package/javascript/components/ImageSource.js +82 -0
  325. package/javascript/components/Images.js +119 -0
  326. package/javascript/components/Light.js +47 -0
  327. package/javascript/components/LineLayer.js +94 -0
  328. package/javascript/components/MapView.js +817 -0
  329. package/javascript/components/MarkerView.js +87 -0
  330. package/javascript/components/NativeBridgeComponent.js +86 -0
  331. package/javascript/components/NativeUserLocation.js +41 -0
  332. package/javascript/components/PointAnnotation.js +216 -0
  333. package/javascript/components/RasterLayer.js +95 -0
  334. package/javascript/components/RasterSource.js +124 -0
  335. package/javascript/components/ShapeSource.js +357 -0
  336. package/javascript/components/Style.js +264 -0
  337. package/javascript/components/SymbolLayer.js +120 -0
  338. package/javascript/components/UserLocation.js +273 -0
  339. package/javascript/components/VectorSource.js +200 -0
  340. package/javascript/components/annotations/Annotation.js +122 -0
  341. package/javascript/index.js +153 -0
  342. package/javascript/modules/location/locationManager.js +101 -0
  343. package/javascript/modules/offline/OfflineCreatePackOptions.js +46 -0
  344. package/javascript/modules/offline/OfflinePack.js +40 -0
  345. package/javascript/modules/offline/offlineManager.js +378 -0
  346. package/javascript/modules/snapshot/SnapshotOptions.js +67 -0
  347. package/javascript/modules/snapshot/snapshotManager.js +62 -0
  348. package/javascript/utils/BridgeValue.js +81 -0
  349. package/javascript/utils/Logger.js +114 -0
  350. package/javascript/utils/animated/Animated.js +39 -0
  351. package/javascript/utils/animated/AnimatedCoordinatesArray.js +191 -0
  352. package/javascript/utils/animated/AnimatedExtractCoordinateFromArray.js +43 -0
  353. package/javascript/utils/animated/AnimatedPoint.js +126 -0
  354. package/javascript/utils/animated/AnimatedRouteCoordinatesArray.js +124 -0
  355. package/javascript/utils/animated/AnimatedShape.js +72 -0
  356. package/javascript/utils/deprecation.js +25 -0
  357. package/javascript/utils/filterUtils.js +7 -0
  358. package/javascript/utils/geoUtils.js +73 -0
  359. package/javascript/utils/index.js +113 -0
  360. package/javascript/utils/styleMap.js +1901 -0
  361. package/maplibre-react-native.podspec +79 -0
  362. package/package.json +120 -0
  363. package/plugin/build/withMapbox.d.ts +12 -0
  364. package/plugin/build/withMapbox.js +119 -0
  365. package/plugin/install.md +32 -0
  366. package/react-native.config.js +10 -0
  367. package/scripts/autogenHelpers/DocJSONBuilder.js +458 -0
  368. package/scripts/autogenHelpers/JSDocNodeTree.js +131 -0
  369. package/scripts/autogenHelpers/MarkdownBuilder.js +29 -0
  370. package/scripts/autogenHelpers/globals.js +507 -0
  371. package/scripts/autogenerate.js +374 -0
  372. package/scripts/download-style-spec.sh +15 -0
  373. package/scripts/templates/RCTMGLStyle.h.ejs +33 -0
  374. package/scripts/templates/RCTMGLStyle.m.ejs +97 -0
  375. package/scripts/templates/RCTMGLStyleFactory.java.ejs +107 -0
  376. package/scripts/templates/component.md.ejs +122 -0
  377. package/scripts/templates/index.d.ts.ejs +56 -0
  378. package/scripts/templates/styleMap.js.ejs +115 -0
  379. package/setup-jest.js +121 -0
  380. package/style-spec/v8.json +5798 -0
  381. package/tsconfig.json +65 -0
@@ -0,0 +1,625 @@
1
+ //
2
+ // RCTMGLMapViewManager.m
3
+ // RCTMGL
4
+ //
5
+ // Created by Nick Italiano on 8/23/17.
6
+ // Copyright © 2017 Mapbox Inc. All rights reserved.
7
+ //
8
+
9
+ #import <React/RCTUIManager.h>
10
+
11
+ #import "RCTMGLMapViewManager.h"
12
+ #import "RCTMGLMapView.h"
13
+ #import "RCTMGLEventTypes.h"
14
+ #import "RCTMGLEvent.h"
15
+ #import "RCTMGLMapTouchEvent.h"
16
+ #import "RCTMGLUtils.h"
17
+ #import "CameraStop.h"
18
+ #import "CameraUpdateQueue.h"
19
+ #import "RCTMGLUserLocation.h"
20
+ #import "FilterParser.h"
21
+ #import "RCTMGLImages.h"
22
+
23
+ @interface RCTMGLMapViewManager() <MGLMapViewDelegate>
24
+ @end
25
+
26
+ @implementation RCTMGLMapViewManager
27
+
28
+
29
+ RCT_EXPORT_MODULE(RCTMGLMapView)
30
+
31
+ - (BOOL)requiresMainQueueSetup
32
+ {
33
+ return YES;
34
+ }
35
+
36
+ // prevents SDK from crashing and cluttering logs
37
+ // since we don't have access to the frame right away
38
+ - (CGRect)defaultFrame
39
+ {
40
+ return [[UIScreen mainScreen] bounds];
41
+ }
42
+
43
+ - (UIView *)view
44
+ {
45
+ RCTMGLMapView *mapView = [[RCTMGLMapView alloc] initWithFrame:[self defaultFrame]];
46
+ mapView.delegate = self;
47
+
48
+
49
+ // setup map gesture recongizers
50
+ UITapGestureRecognizer *doubleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:nil];
51
+ doubleTap.numberOfTapsRequired = 2;
52
+
53
+ UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapMap:)];
54
+ [tap requireGestureRecognizerToFail:doubleTap];
55
+
56
+ UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(didLongPressMap:)];
57
+
58
+ // this allows the internal annotation gestures to take precedents over the map tap gesture
59
+ for (int i = 0; i < mapView.gestureRecognizers.count; i++) {
60
+ UIGestureRecognizer *gestuerReconginer = mapView.gestureRecognizers[i];
61
+
62
+ if ([gestuerReconginer isKindOfClass:[UITapGestureRecognizer class]]) {
63
+ [tap requireGestureRecognizerToFail:gestuerReconginer];
64
+ }
65
+ }
66
+
67
+ [mapView addGestureRecognizer:doubleTap];
68
+ [mapView addGestureRecognizer:tap];
69
+ [mapView addGestureRecognizer:longPress];
70
+
71
+ return mapView;
72
+ }
73
+
74
+ #pragma mark - React View Props
75
+
76
+ RCT_REMAP_VIEW_PROPERTY(localizeLabels, reactLocalizeLabels, BOOL)
77
+ RCT_REMAP_VIEW_PROPERTY(scrollEnabled, reactScrollEnabled, BOOL)
78
+ RCT_REMAP_VIEW_PROPERTY(pitchEnabled, reactPitchEnabled, BOOL)
79
+ RCT_REMAP_VIEW_PROPERTY(rotateEnabled, reactRotateEnabled, BOOL)
80
+ RCT_REMAP_VIEW_PROPERTY(attributionEnabled, reactAttributionEnabled, BOOL)
81
+ RCT_REMAP_VIEW_PROPERTY(attributionPosition, reactAttributionPosition, NSDictionary)
82
+ RCT_REMAP_VIEW_PROPERTY(logoEnabled, reactLogoEnabled, BOOL)
83
+ RCT_REMAP_VIEW_PROPERTY(logoPosition, reactLogoPosition, NSDictionary)
84
+ RCT_REMAP_VIEW_PROPERTY(compassEnabled, reactCompassEnabled, BOOL)
85
+ RCT_REMAP_VIEW_PROPERTY(zoomEnabled, reactZoomEnabled, BOOL)
86
+
87
+ RCT_REMAP_VIEW_PROPERTY(compassViewPosition, reactCompassViewPosition, NSInteger *)
88
+ RCT_REMAP_VIEW_PROPERTY(compassViewMargins, reactCompassViewMargins, CGPoint)
89
+
90
+ RCT_REMAP_VIEW_PROPERTY(contentInset, reactContentInset, NSArray)
91
+ RCT_REMAP_VIEW_PROPERTY(styleURL, reactStyleURL, NSString)
92
+ RCT_REMAP_VIEW_PROPERTY(preferredFramesPerSecond, reactPreferredFramesPerSecond, NSInteger)
93
+
94
+ RCT_EXPORT_VIEW_PROPERTY(tintColor, UIColor)
95
+
96
+ RCT_EXPORT_VIEW_PROPERTY(onPress, RCTBubblingEventBlock)
97
+ RCT_EXPORT_VIEW_PROPERTY(onLongPress, RCTBubblingEventBlock)
98
+ RCT_EXPORT_VIEW_PROPERTY(onMapChange, RCTBubblingEventBlock)
99
+
100
+ #pragma mark - React Methods
101
+
102
+ RCT_EXPORT_METHOD(getPointInView:(nonnull NSNumber*)reactTag
103
+ atCoordinate:(NSArray<NSNumber*>*)coordinate
104
+ resolver:(RCTPromiseResolveBlock)resolve
105
+ rejecter:(RCTPromiseRejectBlock)reject)
106
+ {
107
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
108
+ id view = viewRegistry[reactTag];
109
+
110
+ if (![view isKindOfClass:[RCTMGLMapView class]]) {
111
+ RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
112
+ return;
113
+ }
114
+
115
+ RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
116
+
117
+ CGPoint pointInView = [reactMapView convertCoordinate:CLLocationCoordinate2DMake([coordinate[1] doubleValue], [coordinate[0] doubleValue])
118
+ toPointToView:reactMapView];
119
+
120
+ resolve(@{ @"pointInView": @[@(pointInView.x), @(pointInView.y)] });
121
+ }];
122
+ }
123
+
124
+ RCT_EXPORT_METHOD(getCoordinateFromView:(nonnull NSNumber*)reactTag
125
+ atPoint:(CGPoint)point
126
+ resolver:(RCTPromiseResolveBlock)resolve
127
+ rejecter:(RCTPromiseRejectBlock)reject)
128
+ {
129
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
130
+ id view = viewRegistry[reactTag];
131
+
132
+ if (![view isKindOfClass:[RCTMGLMapView class]]) {
133
+ RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
134
+ return;
135
+ }
136
+
137
+ RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
138
+
139
+ CLLocationCoordinate2D coordinate = [reactMapView convertPoint:point
140
+ toCoordinateFromView:reactMapView];
141
+
142
+ resolve(@{ @"coordinateFromView": @[@(coordinate.longitude), @(coordinate.latitude)] });
143
+ }];
144
+ }
145
+
146
+
147
+ RCT_EXPORT_METHOD(takeSnap:(nonnull NSNumber*)reactTag
148
+ writeToDisk:(BOOL)writeToDisk
149
+ resolver:(RCTPromiseResolveBlock)resolve
150
+ rejecter:(RCTPromiseRejectBlock)reject)
151
+ {
152
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
153
+ id view = viewRegistry[reactTag];
154
+
155
+ if (![view isKindOfClass:[RCTMGLMapView class]]) {
156
+ RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
157
+ return;
158
+ }
159
+
160
+ RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
161
+ NSString *uri = [reactMapView takeSnap:writeToDisk];
162
+ resolve(@{ @"uri": uri });
163
+ }];
164
+ }
165
+
166
+ RCT_EXPORT_METHOD(getVisibleBounds:(nonnull NSNumber*)reactTag
167
+ resolver:(RCTPromiseResolveBlock)resolve
168
+ rejecter:(RCTPromiseRejectBlock)reject)
169
+ {
170
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
171
+ id view = viewRegistry[reactTag];
172
+
173
+ if (![view isKindOfClass:[RCTMGLMapView class]]) {
174
+ RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
175
+ return;
176
+ }
177
+
178
+ RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
179
+ resolve(@{ @"visibleBounds": [RCTMGLUtils fromCoordinateBounds:reactMapView.visibleCoordinateBounds] });
180
+ }];
181
+ }
182
+
183
+ RCT_EXPORT_METHOD(getZoom:(nonnull NSNumber*)reactTag
184
+ resolver:(RCTPromiseResolveBlock)resolve
185
+ rejecter:(RCTPromiseRejectBlock)reject)
186
+ {
187
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
188
+ id view = viewRegistry[reactTag];
189
+
190
+ if (![view isKindOfClass:[RCTMGLMapView class]]) {
191
+ RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
192
+ return;
193
+ }
194
+
195
+ RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
196
+ resolve(@{ @"zoom": @(reactMapView.zoomLevel) });
197
+ }];
198
+ }
199
+
200
+ RCT_EXPORT_METHOD(getCenter:(nonnull NSNumber*)reactTag
201
+ resolver:(RCTPromiseResolveBlock)resolve
202
+ rejecter:(RCTPromiseRejectBlock)reject)
203
+ {
204
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
205
+ id view = viewRegistry[reactTag];
206
+
207
+ if (![view isKindOfClass:[RCTMGLMapView class]]) {
208
+ RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
209
+ return;
210
+ }
211
+
212
+ RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
213
+ resolve(@{ @"center": @[@(reactMapView.centerCoordinate.longitude), @(reactMapView.centerCoordinate.latitude)]});
214
+ }];
215
+ }
216
+
217
+ RCT_EXPORT_METHOD(queryRenderedFeaturesAtPoint:(nonnull NSNumber*)reactTag
218
+ atPoint:(NSArray<NSNumber*>*)point
219
+ withFilter:(NSArray*)filter
220
+ withLayerIDs:(NSArray<NSString*>*)layerIDs
221
+ resolver:(RCTPromiseResolveBlock)resolve
222
+ rejecter:(RCTPromiseRejectBlock)reject)
223
+ {
224
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
225
+ id view = viewRegistry[reactTag];
226
+
227
+ if (![view isKindOfClass:[RCTMGLMapView class]]) {
228
+ RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
229
+ return;
230
+ }
231
+
232
+ NSSet *layerIDSet = nil;
233
+ if (layerIDs != nil && layerIDs.count > 0) {
234
+ layerIDSet = [NSSet setWithArray:layerIDs];
235
+ }
236
+
237
+ RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
238
+ NSPredicate* predicate = [FilterParser parse:filter];
239
+ NSArray<id<MGLFeature>> *shapes = [reactMapView visibleFeaturesAtPoint:CGPointMake([point[0] floatValue], [point[1] floatValue])
240
+ inStyleLayersWithIdentifiers:layerIDSet
241
+ predicate:predicate];
242
+
243
+ NSMutableArray<NSDictionary*> *features = [[NSMutableArray alloc] init];
244
+ for (int i = 0; i < shapes.count; i++) {
245
+ [features addObject:shapes[i].geoJSONDictionary];
246
+ }
247
+
248
+ resolve(@{
249
+ @"data": @{ @"type": @"FeatureCollection", @"features": features }
250
+ });
251
+ }];
252
+ }
253
+
254
+ RCT_EXPORT_METHOD(queryRenderedFeaturesInRect:(nonnull NSNumber*)reactTag
255
+ withBBox:(NSArray<NSNumber*>*)bbox
256
+ withFilter:(NSArray*)filter
257
+ withLayerIDs:(NSArray<NSString*>*)layerIDs
258
+ resolver:(RCTPromiseResolveBlock)resolve
259
+ rejecter:(RCTPromiseRejectBlock)reject)
260
+ {
261
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
262
+ id view = viewRegistry[reactTag];
263
+
264
+ if (![view isKindOfClass:[RCTMGLMapView class]]) {
265
+ RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
266
+ return;
267
+ }
268
+
269
+ RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
270
+
271
+ // bbox[top, right, bottom, left]
272
+ CGFloat width = [bbox[1] floatValue] - [bbox[3] floatValue];
273
+ CGFloat height = [bbox[0] floatValue] - [bbox[2] floatValue];
274
+ CGRect rect = CGRectMake([bbox[3] floatValue], [bbox[2] floatValue], width, height);
275
+
276
+ NSSet *layerIDSet = nil;
277
+ if (layerIDs != nil && layerIDs.count > 0) {
278
+ layerIDSet = [NSSet setWithArray:layerIDs];
279
+ }
280
+
281
+ NSPredicate* predicate = [FilterParser parse:filter];
282
+ NSArray<id<MGLFeature>> *shapes = [reactMapView visibleFeaturesInRect:rect
283
+ inStyleLayersWithIdentifiers:layerIDSet
284
+ predicate:predicate];
285
+
286
+ NSArray<NSDictionary*>* features = [self featuresToJSON:shapes];
287
+
288
+ resolve(@{ @"data": @{ @"type": @"FeatureCollection", @"features": features }});
289
+ }];
290
+ }
291
+
292
+ RCT_EXPORT_METHOD(showAttribution:(nonnull NSNumber *)reactTag
293
+ resolver:(RCTPromiseResolveBlock)resolve
294
+ rejecter:(RCTPromiseRejectBlock)reject)
295
+ {
296
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
297
+ id view = viewRegistry[reactTag];
298
+
299
+ if (![view isKindOfClass:[RCTMGLMapView class]]) {
300
+ RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
301
+ return;
302
+ }
303
+
304
+ __weak RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
305
+ [reactMapView showAttribution:reactMapView];
306
+ resolve(nil);
307
+ }];
308
+ }
309
+
310
+ RCT_EXPORT_METHOD(setSourceVisibility:(nonnull NSNumber *)reactTag
311
+ visible:(BOOL)visible
312
+ sourceId:(nonnull NSString*)sourceId
313
+ sourceLayerId:(nullable NSString*)sourceLayerId
314
+ resolver:(RCTPromiseResolveBlock)resolve
315
+ rejecter:(RCTPromiseRejectBlock)reject)
316
+ {
317
+ [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *manager, NSDictionary<NSNumber*, UIView*> *viewRegistry) {
318
+ id view = viewRegistry[reactTag];
319
+
320
+ if (![view isKindOfClass:[RCTMGLMapView class]]) {
321
+ RCTLogError(@"Invalid react tag, could not find RCTMGLMapView");
322
+ return;
323
+ }
324
+
325
+ __weak RCTMGLMapView *reactMapView = (RCTMGLMapView*)view;
326
+ [reactMapView setSourceVisibility:visible sourceId:sourceId sourceLayerId:sourceLayerId];
327
+ resolve(nil);
328
+ }];
329
+ }
330
+
331
+ #pragma mark - UIGestureRecognizers
332
+
333
+ - (void)didTapMap:(UITapGestureRecognizer *)recognizer
334
+ {
335
+ RCTMGLMapView *mapView = (RCTMGLMapView*)recognizer.view;
336
+ CGPoint screenPoint = [recognizer locationInView:mapView];
337
+ NSArray<RCTMGLSource *> *touchableSources = [mapView getAllTouchableSources];
338
+
339
+ NSMutableDictionary<NSString *, NSArray<id<MGLFeature>>* > *hits = [[NSMutableDictionary alloc] init];
340
+ NSMutableArray<RCTMGLSource *> *hitTouchableSources = [[NSMutableArray alloc] init];
341
+ for (RCTMGLSource *touchableSource in touchableSources) {
342
+ NSDictionary<NSString *, NSNumber *> *hitbox = touchableSource.hitbox;
343
+ float halfWidth = [hitbox[@"width"] floatValue] / 2.f;
344
+ float halfHeight = [hitbox[@"height"] floatValue] / 2.f;
345
+
346
+ CGFloat top = screenPoint.y - halfHeight;
347
+ CGFloat left = screenPoint.x - halfWidth;
348
+ CGRect hitboxRect = CGRectMake(left, top, [hitbox[@"width"] floatValue], [hitbox[@"height"] floatValue]);
349
+
350
+ NSArray<id<MGLFeature>> *features = [mapView visibleFeaturesInRect:hitboxRect
351
+ inStyleLayersWithIdentifiers:[NSSet setWithArray:[touchableSource getLayerIDs]]
352
+ predicate:nil];
353
+
354
+ if (features.count > 0) {
355
+ hits[touchableSource.id] = features;
356
+ [hitTouchableSources addObject:touchableSource];
357
+ }
358
+ }
359
+
360
+ if (hits.count > 0) {
361
+ RCTMGLSource *source = [mapView getTouchableSourceWithHighestZIndex:hitTouchableSources];
362
+ if (source != nil && source.hasPressListener) {
363
+ NSArray* geoJSONDicts = [self featuresToJSON: hits[source.id]];
364
+
365
+ NSString *eventType = RCT_MAPBOX_VECTOR_SOURCE_LAYER_PRESS;
366
+ if ([source isKindOfClass:[RCTMGLShapeSource class]]) {
367
+ eventType = RCT_MAPBOX_SHAPE_SOURCE_LAYER_PRESS;
368
+ }
369
+
370
+ CLLocationCoordinate2D coordinate = [mapView convertPoint:screenPoint
371
+ toCoordinateFromView:mapView];
372
+
373
+ RCTMGLEvent *event = [RCTMGLEvent makeEvent:eventType withPayload: @{
374
+ @"features": geoJSONDicts,
375
+ @"point": @{
376
+ @"x": [NSNumber numberWithDouble: screenPoint.x],
377
+ @"y":[NSNumber numberWithDouble: screenPoint.y]
378
+ },
379
+ @"coordinates": @{
380
+ @"latitude": [NSNumber numberWithDouble: coordinate.latitude],
381
+ @"longitude": [NSNumber numberWithDouble: coordinate.longitude]
382
+ }
383
+ }];
384
+ [self fireEvent:event withCallback:source.onPress];
385
+ return;
386
+ }
387
+ }
388
+
389
+ if (mapView.onPress == nil) {
390
+ return;
391
+ }
392
+
393
+ RCTMGLMapTouchEvent *event = [RCTMGLMapTouchEvent makeTapEvent:mapView withPoint:screenPoint];
394
+ [self fireEvent:event withCallback:mapView.onPress];
395
+ }
396
+
397
+ - (void)didLongPressMap:(UILongPressGestureRecognizer *)recognizer
398
+ {
399
+ RCTMGLMapView *mapView = (RCTMGLMapView*)recognizer.view;
400
+
401
+ if (mapView == nil || mapView.onPress == nil || recognizer.state != UIGestureRecognizerStateBegan) {
402
+ return;
403
+ }
404
+
405
+ RCTMGLMapTouchEvent *event = [RCTMGLMapTouchEvent makeLongPressEvent:mapView withPoint:[recognizer locationInView:mapView]];
406
+ [self fireEvent:event withCallback:mapView.onLongPress];
407
+ }
408
+
409
+ #pragma mark - MGLMapViewDelegate
410
+
411
+ - (MGLAnnotationView *)mapView:(MGLMapView *)mapView viewForAnnotation:(id<MGLAnnotation>)annotation
412
+ {
413
+ if ([annotation isKindOfClass:[MGLUserLocation class]] && mapView.userLocation != nil) {
414
+ RCTMGLMapView* reactMapView = ((RCTMGLMapView *) mapView);
415
+ if (reactMapView.useNativeUserLocationAnnotationView) {
416
+ return nil;
417
+ }
418
+ return [[RCTMGLUserLocation sharedInstance] hiddenUserAnnotation];
419
+ }
420
+ else if ([annotation isKindOfClass:[RCTMGLPointAnnotation class]]) {
421
+ RCTMGLPointAnnotation *rctAnnotation = (RCTMGLPointAnnotation *)annotation;
422
+ return [rctAnnotation getAnnotationView];
423
+ }
424
+ return nil;
425
+ }
426
+
427
+ - (void)mapView:(MGLMapView *)mapView didChangeUserTrackingMode:(MGLUserTrackingMode)mode animated:(BOOL)animated
428
+ {
429
+ RCTMGLMapView* reactMapView = ((RCTMGLMapView *) mapView);
430
+ [reactMapView didChangeUserTrackingMode:mode animated:animated];
431
+ }
432
+
433
+ - (void)mapView:(MGLMapView *)mapView didSelectAnnotation:(nonnull id<MGLAnnotation>)annotation
434
+ {
435
+ if ([annotation isKindOfClass:[RCTMGLPointAnnotation class]]) {
436
+ RCTMGLPointAnnotation *rctAnnotation = (RCTMGLPointAnnotation *)annotation;
437
+
438
+ if (rctAnnotation.onSelected != nil) {
439
+ RCTMGLMapTouchEvent *event = [RCTMGLMapTouchEvent makeAnnotationTapEvent:rctAnnotation];
440
+ rctAnnotation.onSelected([event toJSON]);
441
+ }
442
+ }
443
+ }
444
+
445
+ - (void)mapView:(MGLMapView *)mapView didDeselectAnnotation:(nonnull id<MGLAnnotation>)annotation
446
+ {
447
+ if ([annotation isKindOfClass:[RCTMGLPointAnnotation class]]) {
448
+ RCTMGLPointAnnotation *rctAnnotation = (RCTMGLPointAnnotation *)annotation;
449
+
450
+ if (rctAnnotation.onDeselected != nil) {
451
+ rctAnnotation.onDeselected(nil);
452
+ }
453
+ }
454
+ }
455
+
456
+ - (BOOL)mapView:(MGLMapView *)mapView annotationCanShowCallout:(id<MGLAnnotation>)annotation {
457
+ if ([annotation isKindOfClass:[RCTMGLPointAnnotation class]]) {
458
+ RCTMGLPointAnnotation *rctAnnotation = (RCTMGLPointAnnotation *)annotation;
459
+ return rctAnnotation.calloutView != nil;
460
+ }
461
+ return NO;
462
+ }
463
+
464
+ - (UIView<MGLCalloutView> *)mapView:(MGLMapView *)mapView calloutViewForAnnotation:(id<MGLAnnotation>)annotation
465
+ {
466
+ if ([annotation isKindOfClass:[RCTMGLPointAnnotation class]]) {
467
+ RCTMGLPointAnnotation *rctAnnotation = (RCTMGLPointAnnotation *)annotation;
468
+ return rctAnnotation.calloutView;
469
+ }
470
+ return nil;
471
+ }
472
+
473
+ - (BOOL)mapView:(MGLMapView *)mapView shouldChangeFromCamera:(MGLMapCamera *)oldCamera toCamera:(MGLMapCamera *)newCamera
474
+ {
475
+ RCTMGLMapView* reactMapView = ((RCTMGLMapView *) mapView);
476
+ return MGLCoordinateBoundsIsEmpty(reactMapView.maxBounds) || MGLCoordinateInCoordinateBounds(newCamera.centerCoordinate, reactMapView.maxBounds);
477
+ }
478
+
479
+ - (void)mapView:(MGLMapView *)mapView regionWillChangeWithReason:(MGLCameraChangeReason)reason animated:(BOOL)animated
480
+ {
481
+ ((RCTMGLMapView *) mapView).isUserInteraction = (BOOL)(reason & ~MGLCameraChangeReasonProgrammatic);
482
+ NSDictionary *payload = [self _makeRegionPayload:mapView animated:animated];
483
+ [self reactMapDidChange:mapView eventType:RCT_MAPBOX_REGION_WILL_CHANGE_EVENT andPayload:payload];
484
+ }
485
+
486
+ - (void)mapViewRegionIsChanging:(MGLMapView *)mapView
487
+ {
488
+ NSDictionary *payload = [self _makeRegionPayload:mapView animated:false];
489
+ [self reactMapDidChange:mapView eventType:RCT_MAPBOX_REGION_IS_CHANGING andPayload:payload];
490
+ }
491
+
492
+ - (void)mapView:(MGLMapView *)mapView regionDidChangeWithReason:(MGLCameraChangeReason)reason animated:(BOOL)animated
493
+ {
494
+ if (((reason & MGLCameraChangeReasonTransitionCancelled) == MGLCameraChangeReasonTransitionCancelled)
495
+ && ((reason & MGLCameraChangeReasonGesturePan) != MGLCameraChangeReasonGesturePan)) return;
496
+
497
+ ((RCTMGLMapView *) mapView).isUserInteraction = (BOOL)(reason & ~MGLCameraChangeReasonProgrammatic);
498
+
499
+ NSDictionary *payload = [self _makeRegionPayload:mapView animated:animated];
500
+ [self reactMapDidChange:mapView eventType:RCT_MAPBOX_REGION_DID_CHANGE andPayload:payload];
501
+ }
502
+
503
+ - (void)mapViewWillStartLoadingMap:(MGLMapView *)mapView
504
+ {
505
+ [self reactMapDidChange:mapView eventType:RCT_MAPBOX_WILL_START_LOADING_MAP];
506
+ }
507
+
508
+ - (void)mapViewDidFinishLoadingMap:(MGLMapView *)mapView
509
+ {
510
+ [self reactMapDidChange:mapView eventType:RCT_MAPBOX_DID_FINISH_LOADING_MAP];
511
+ }
512
+
513
+ - (void)mapViewDidFailLoadingMap:(MGLMapView *)mapView withError:(NSError *)error
514
+ {
515
+ NSLog(@"Failed loading map %@", error);
516
+ [self reactMapDidChange:mapView eventType:RCT_MAPBOX_DID_FAIL_LOADING_MAP];
517
+ }
518
+
519
+ - (void)mapViewWillStartRenderingFrame:(MGLMapView *)mapView
520
+ {
521
+ [self reactMapDidChange:mapView eventType:RCT_MAPBOX_WILL_START_RENDERING_FRAME];
522
+ }
523
+
524
+ - (void)mapViewDidFinishRenderingFrame:(MGLMapView *)mapView fullyRendered:(BOOL)fullyRendered
525
+ {
526
+ if (fullyRendered) {
527
+ [self reactMapDidChange:mapView eventType:RCT_MAPBOX_DID_FINISH_RENDERING_FRAME_FULLY];
528
+ } else {
529
+ [self reactMapDidChange:mapView eventType:RCT_MAPBOX_DID_FINSIH_RENDERING_FRAME];
530
+ }
531
+ }
532
+
533
+ - (void)mapViewWillStartRenderingMap:(MGLMapView *)mapView
534
+ {
535
+ [self reactMapDidChange:mapView eventType:RCT_MAPBOX_WILL_START_RENDERING_MAP];
536
+ }
537
+
538
+ - (void)mapViewDidFinishRenderingMap:(MGLMapView *)mapView fullyRendered:(BOOL)fullyRendered
539
+ {
540
+ if (fullyRendered) {
541
+ [self reactMapDidChange:mapView eventType:RCT_MAPBOX_DID_FINISH_RENDERING_MAP_FULLY];
542
+ } else {
543
+ [self reactMapDidChange:mapView eventType:RCT_MAPBOX_DID_FINISH_RENDERING_MAP];
544
+ }
545
+ }
546
+
547
+ - (void)mapView:(MGLMapView *)mapView didFinishLoadingStyle:(MGLStyle *)style
548
+ {
549
+ RCTMGLMapView *reactMapView = (RCTMGLMapView*)mapView;
550
+ if(reactMapView.reactLocalizeLabels == true) {
551
+ [style localizeLabelsIntoLocale:nil];
552
+ }
553
+
554
+ for (int i = 0; i < reactMapView.sources.count; i++) {
555
+ RCTMGLSource *source = reactMapView.sources[i];
556
+ source.map = reactMapView;
557
+ }
558
+ for (int i = 0; i < reactMapView.layers.count; i++) {
559
+ RCTMGLLayer *layer = reactMapView.layers[i];
560
+ layer.map = reactMapView;
561
+ }
562
+
563
+ if (reactMapView.light != nil) {
564
+ reactMapView.light.map = reactMapView;
565
+ }
566
+
567
+ [reactMapView notifyStyleLoaded];
568
+ [self reactMapDidChange:reactMapView eventType:RCT_MAPBOX_DID_FINISH_LOADING_STYLE];
569
+ }
570
+
571
+ -(UIImage *)mapView:(MGLMapView *)mapView didFailToLoadImage:(NSString *)imageName
572
+ {
573
+ RCTMGLMapView* reactMapView = ((RCTMGLMapView *) mapView);
574
+ NSArray<RCTMGLImages *> *allImages = [reactMapView getAllImages];
575
+ for (RCTMGLImages *images in allImages) {
576
+ if([images addMissingImageToStyle:imageName]) {
577
+ // The image was added inside addMissingImageToStyle so we can return nil
578
+ return nil;
579
+ }
580
+ }
581
+
582
+ for (RCTMGLImages *images in allImages) {
583
+ [images sendImageMissingEvent:imageName];
584
+ }
585
+ return nil;
586
+ }
587
+
588
+ - (void)reactMapDidChange:(MGLMapView*)mapView eventType:(NSString*)type
589
+ {
590
+ [self reactMapDidChange:mapView eventType:type andPayload:nil];
591
+ }
592
+
593
+ - (void)reactMapDidChange:(MGLMapView*)mapView eventType:(NSString*)type andPayload:(NSDictionary*)payload
594
+ {
595
+ RCTMGLMapView *reactMapView = (RCTMGLMapView*)mapView;
596
+ RCTMGLEvent *event = [RCTMGLEvent makeEvent:type withPayload:payload];
597
+ [self fireEvent:event withCallback:reactMapView.onMapChange];
598
+ }
599
+
600
+ - (NSDictionary*)_makeRegionPayload:(MGLMapView*)mapView animated:(BOOL)animated
601
+ {
602
+ RCTMGLMapView *rctMapView = (RCTMGLMapView *)mapView;
603
+ MGLPointFeature *feature = [[MGLPointFeature alloc] init];
604
+ feature.coordinate = mapView.centerCoordinate;
605
+ feature.attributes = @{
606
+ @"zoomLevel": [NSNumber numberWithDouble:mapView.zoomLevel],
607
+ @"heading": [NSNumber numberWithDouble:mapView.camera.heading],
608
+ @"pitch": [NSNumber numberWithDouble:mapView.camera.pitch],
609
+ @"animated": [NSNumber numberWithBool:animated],
610
+ @"isUserInteraction": @(rctMapView.isUserInteraction),
611
+ @"visibleBounds": [RCTMGLUtils fromCoordinateBounds:mapView.visibleCoordinateBounds]
612
+ };
613
+ return feature.geoJSONDictionary;
614
+ }
615
+
616
+ - (NSArray<NSDictionary*> *) featuresToJSON:(NSArray<id<MGLFeature>> *) features
617
+ {
618
+ NSMutableArray<NSDictionary*> *json = [[NSMutableArray alloc] init];
619
+ for(id<MGLFeature> feature in features) {
620
+ [json addObject:feature.geoJSONDictionary];
621
+ }
622
+ return json;
623
+ }
624
+
625
+ @end
@@ -0,0 +1,18 @@
1
+ //
2
+ // RCTMGLCamera.h
3
+ // RCTMGL
4
+ //
5
+ // Created by Nick Italiano on 6/22/18.
6
+ // Copyright © 2018 Mapbox Inc. All rights reserved.
7
+ //
8
+ #import <React/RCTComponent.h>
9
+ #import <UIKit/UIKit.h>
10
+
11
+ @class RCTMGLMapView;
12
+
13
+ @interface RCTMGLNativeUserLocation : UIView
14
+
15
+ @property (nonatomic, strong) RCTMGLMapView *map;
16
+ @property (nonatomic) BOOL iosShowsUserHeadingIndicator;
17
+
18
+ @end
@@ -0,0 +1,49 @@
1
+ //
2
+ // RCTMGLCamera.m
3
+ // RCTMGL
4
+ //
5
+ // Created by Nick Italiano on 6/22/18.
6
+ // Copyright © 2018 Mapbox Inc. All rights reserved.
7
+ //
8
+
9
+ #import "RCTMGLNativeUserLocation.h"
10
+ #import "CameraStop.h"
11
+ #import "CameraUpdateQueue.h"
12
+ #import "RCTMGLLocation.h"
13
+ #import "RCTMGLUtils.h"
14
+ #import "RCTMGLLocationManager.h"
15
+ #import "RCTMGLEvent.h"
16
+ #import "RCTMGLEventTypes.h"
17
+ #import "CameraMode.h"
18
+
19
+ @implementation RCTMGLNativeUserLocation
20
+ {
21
+
22
+ }
23
+
24
+ - (void)setMap:(RCTMGLMapView *)map
25
+ {
26
+ if (map == nil && _map) {
27
+ _map.useNativeUserLocationAnnotationView = NO;
28
+ _map.showsUserLocation = NO;
29
+ _map.showsUserHeadingIndicator = NO;
30
+ } else if (map) {
31
+ map.useNativeUserLocationAnnotationView = YES;
32
+ // Toggle off/on showsUserLocation in order for Mapbox to invalidate the
33
+ // current (hidden) user location annotation view. See also: HiddenUserLocationAnnotationView
34
+ map.showsUserLocation = NO;
35
+ map.showsUserLocation = YES;
36
+ map.showsUserHeadingIndicator = self.iosShowsUserHeadingIndicator;
37
+ }
38
+
39
+ _map = map;
40
+ }
41
+
42
+ - (void)setIosShowsUserHeadingIndicator:(BOOL)iosShowsUserHeadingIndicator {
43
+ _iosShowsUserHeadingIndicator = iosShowsUserHeadingIndicator;
44
+ if (_map) {
45
+ _map.showsUserHeadingIndicator = iosShowsUserHeadingIndicator;
46
+ }
47
+ }
48
+
49
+ @end
@@ -0,0 +1,5 @@
1
+ #import "ViewManager.h"
2
+
3
+ @interface RCTMGLNativeUserLocationManager : ViewManager
4
+
5
+ @end