@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,516 @@
1
+ //
2
+ // MGLOfflineModule.m
3
+ // RCTMGL
4
+ //
5
+ // Created by Nick Italiano on 10/25/17.
6
+ // Copyright © 2017 Mapbox Inc. All rights reserved.
7
+ //
8
+
9
+ #import "MGLOfflineModule.h"
10
+ #import "RCTMGLUtils.h"
11
+ #import "RCTMGLEvent.h"
12
+ #import "RCTMGLEventTypes.h"
13
+
14
+ @implementation MGLOfflineModule
15
+ {
16
+ NSUInteger lastPackState;
17
+ double lastPackTimestamp;
18
+ double eventThrottle;
19
+ BOOL hasListeners;
20
+ NSMutableArray<RCTPromiseResolveBlock> *packRequestQueue;
21
+ }
22
+
23
+ RCT_EXPORT_MODULE()
24
+
25
+ + (BOOL)requiresMainQueueSetup
26
+ {
27
+ return YES;
28
+ }
29
+
30
+ - (void)startObserving
31
+ {
32
+ [super startObserving];
33
+ hasListeners = YES;
34
+ }
35
+
36
+ - (void)stopObserving
37
+ {
38
+ [super stopObserving];
39
+ hasListeners = NO;
40
+ }
41
+
42
+ NSString *const RCT_MAPBOX_OFFLINE_CALLBACK_PROGRESS = @"MapboxOfflineRegionProgress";
43
+ NSString *const RCT_MAPBOX_OFFLINE_CALLBACK_ERROR = @"MapboOfflineRegionError";
44
+
45
+ - (instancetype)init
46
+ {
47
+ if (self = [super init]) {
48
+ packRequestQueue = [NSMutableArray new];
49
+ eventThrottle = 300;
50
+ lastPackState = -1;
51
+
52
+ NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
53
+ [defaultCenter addObserver:self selector:@selector(offlinePackProgressDidChange:) name:MGLOfflinePackProgressChangedNotification object:nil];
54
+ [defaultCenter addObserver:self selector:@selector(offlinePackDidReceiveError:) name:MGLOfflinePackErrorNotification object:nil];
55
+ [defaultCenter addObserver:self selector:@selector(offlinePackDidReceiveMaxAllowedMapboxTiles:) name:MGLOfflinePackMaximumMapboxTilesReachedNotification object:nil];
56
+
57
+ [[MGLOfflineStorage sharedOfflineStorage] addObserver:self forKeyPath:@"packs" options:NSKeyValueObservingOptionInitial context:NULL];
58
+ }
59
+ return self;
60
+ }
61
+
62
+ - (void)dealloc
63
+ {
64
+ [[MGLOfflineStorage sharedOfflineStorage] removeObserver:self forKeyPath:@"packs"];
65
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
66
+ }
67
+
68
+ - (NSArray<NSString *> *)supportedEvents
69
+ {
70
+ return @[RCT_MAPBOX_OFFLINE_CALLBACK_PROGRESS, RCT_MAPBOX_OFFLINE_CALLBACK_ERROR];
71
+ }
72
+
73
+ - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
74
+ {
75
+ if (packRequestQueue.count == 0) {
76
+ return;
77
+ }
78
+
79
+ NSArray<MGLOfflinePack *> *packs = [[MGLOfflineStorage sharedOfflineStorage] packs];
80
+ if (packs == nil) {
81
+ return;
82
+ }
83
+
84
+ while (packRequestQueue.count > 0) {
85
+ RCTPromiseResolveBlock resolve = [packRequestQueue objectAtIndex:0];
86
+ resolve([self _convertPacksToJson:packs]);
87
+ [packRequestQueue removeObjectAtIndex:0];
88
+ }
89
+ }
90
+
91
+ RCT_EXPORT_METHOD(createPack:(NSDictionary *)options
92
+ resolver:(RCTPromiseResolveBlock)resolve
93
+ rejecter:(RCTPromiseRejectBlock)reject)
94
+ {
95
+ NSString *styleURL = options[@"styleURL"];
96
+ MGLCoordinateBounds bounds = [RCTMGLUtils fromFeatureCollection:options[@"bounds"]];
97
+
98
+ id<MGLOfflineRegion> offlineRegion = [[MGLTilePyramidOfflineRegion alloc] initWithStyleURL:[NSURL URLWithString:styleURL]
99
+ bounds:bounds
100
+ fromZoomLevel:[options[@"minZoom"] doubleValue]
101
+ toZoomLevel:[options[@"maxZoom"] doubleValue]];
102
+ NSData *context = [self _archiveMetadata:options[@"metadata"]];
103
+
104
+ [[MGLOfflineStorage sharedOfflineStorage] addPackForRegion:offlineRegion
105
+ withContext:context
106
+ completionHandler:^(MGLOfflinePack *pack, NSError *error) {
107
+ if (error != nil) {
108
+ reject(@"createPack", error.description, error);
109
+ return;
110
+ }
111
+ resolve([self _convertPackToDict:pack]);
112
+ [pack resume];
113
+ }];
114
+ }
115
+
116
+ RCT_EXPORT_METHOD(mergeOfflineRegions:(NSString *)path
117
+ resolver:(RCTPromiseResolveBlock)resolve
118
+ rejecter:(RCTPromiseRejectBlock)reject)
119
+ {
120
+ NSString *absolutePath;
121
+ if ([path isAbsolutePath]) {
122
+ absolutePath = path;
123
+ } else {
124
+ NSBundle *mainBundle = [NSBundle mainBundle];
125
+ NSString *fileName = [path stringByDeletingPathExtension];
126
+ NSString *extension = [path pathExtension];
127
+ absolutePath = [mainBundle pathForResource:fileName ofType:extension];
128
+ if (!absolutePath) {
129
+ return reject(@"asset_does_not_exist", [NSString stringWithFormat:@"The given assetName, %@, can't be found in the app's bundle.", path], nil);
130
+ }
131
+ }
132
+
133
+ [[MGLOfflineStorage sharedOfflineStorage] addContentsOfFile:absolutePath withCompletionHandler:^(NSURL *fileURL, NSArray<MGLOfflinePack *> *packs, NSError *error) {
134
+ if (error != nil) {
135
+ reject(@"mergeOfflineRegions", error.description, error);
136
+ return;
137
+ }
138
+ resolve(nil);
139
+ }];
140
+ }
141
+
142
+ RCT_EXPORT_METHOD(getPacks:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
143
+ {
144
+ dispatch_async(dispatch_get_main_queue(), ^{
145
+ NSArray<MGLOfflinePack *> *packs = [[MGLOfflineStorage sharedOfflineStorage] packs];
146
+
147
+ if (packs == nil) {
148
+ // packs have not loaded yet
149
+ [self->packRequestQueue addObject:resolve];
150
+ return;
151
+ }
152
+
153
+ resolve([self _convertPacksToJson:packs]);
154
+ });
155
+ }
156
+
157
+ RCT_EXPORT_METHOD(invalidateAmbientCache:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
158
+ {
159
+ [[MGLOfflineStorage sharedOfflineStorage] invalidateAmbientCacheWithCompletionHandler:^(NSError *error) {
160
+ if (error != nil) {
161
+ reject(@"invalidateAmbientCache", error.description, error);
162
+ return;
163
+ }
164
+ resolve(nil);
165
+ }];
166
+ }
167
+
168
+ RCT_EXPORT_METHOD(clearAmbientCache:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
169
+ {
170
+ [[MGLOfflineStorage sharedOfflineStorage] clearAmbientCacheWithCompletionHandler:^(NSError *error) {
171
+ if (error != nil) {
172
+ reject(@"clearAmbientCache", error.description, error);
173
+ return;
174
+ }
175
+ resolve(nil);
176
+ }];
177
+ }
178
+
179
+ RCT_EXPORT_METHOD(setMaximumAmbientCacheSize:(NSUInteger)cacheSize
180
+ resolver:(RCTPromiseResolveBlock)resolve
181
+ rejecter:(RCTPromiseRejectBlock)reject)
182
+ {
183
+ [[MGLOfflineStorage sharedOfflineStorage] setMaximumAmbientCacheSize:cacheSize withCompletionHandler:^(NSError *error) {
184
+ if (error != nil) {
185
+ reject(@"setMaximumAmbientCacheSize", error.description, error);
186
+ return;
187
+ }
188
+ resolve(nil);
189
+ }];
190
+
191
+ }
192
+
193
+ RCT_EXPORT_METHOD(resetDatabase:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
194
+ {
195
+ [[MGLOfflineStorage sharedOfflineStorage] resetDatabaseWithCompletionHandler:^(NSError *error) {
196
+ if (error != nil) {
197
+ reject(@"resetDatabase", error.description, error);
198
+ return;
199
+ }
200
+ resolve(nil);
201
+ }];
202
+
203
+ }
204
+
205
+ RCT_EXPORT_METHOD(getPackStatus:(NSString *)name
206
+ resolver:(RCTPromiseResolveBlock)resolve
207
+ rejecter:(RCTPromiseRejectBlock)reject)
208
+ {
209
+ MGLOfflinePack *pack = [self _getPackFromName:name];
210
+
211
+ if (pack == nil) {
212
+ resolve(nil);
213
+ NSLog(@"getPackStatus - Unknown offline region");
214
+ return;
215
+ }
216
+
217
+ resolve([self _makeRegionStatusPayload:name pack:pack]);
218
+ }
219
+
220
+ RCT_EXPORT_METHOD(invalidatePack:(NSString *)name
221
+ resolver:(RCTPromiseResolveBlock)resolve
222
+ rejecter:(RCTPromiseRejectBlock)reject)
223
+ {
224
+ MGLOfflinePack *pack = [self _getPackFromName:name];
225
+
226
+ if (pack == nil) {
227
+ resolve(nil);
228
+ return;
229
+ }
230
+ [[MGLOfflineStorage sharedOfflineStorage] invalidatePack:pack withCompletionHandler:^(NSError *error) {
231
+ if (error != nil) {
232
+ reject(@"invalidatePack", error.description, error);
233
+ return;
234
+ }
235
+ resolve(nil);
236
+ }];
237
+ }
238
+
239
+ RCT_EXPORT_METHOD(deletePack:(NSString *)name
240
+ resolver:(RCTPromiseResolveBlock)resolve
241
+ rejecter:(RCTPromiseRejectBlock)reject)
242
+ {
243
+ MGLOfflinePack *pack = [self _getPackFromName:name];
244
+
245
+ if (pack == nil) {
246
+ resolve(nil);
247
+ return;
248
+ }
249
+ if (pack.state == MGLOfflinePackStateInvalid) {
250
+ NSError *error = [NSError errorWithDomain:MGLErrorDomain code:1 userInfo:@{NSLocalizedDescriptionKey: NSLocalizedString(@"Pack has already been deleted", nil)}];
251
+ reject(@"deletePack", error.description, error);
252
+ return;
253
+ }
254
+ [[MGLOfflineStorage sharedOfflineStorage] removePack:pack withCompletionHandler:^(NSError *error) {
255
+ if (error != nil) {
256
+ reject(@"deletePack", error.description, error);
257
+ return;
258
+ }
259
+ resolve(nil);
260
+ }];
261
+ }
262
+
263
+ RCT_EXPORT_METHOD(pausePackDownload:(NSString *)name
264
+ resolver:(RCTPromiseResolveBlock)resolve
265
+ rejecter:(RCTPromiseRejectBlock)reject)
266
+ {
267
+ MGLOfflinePack *pack = [self _getPackFromName:name];
268
+
269
+ if (pack == nil) {
270
+ reject(@"pausePackDownload", @"Unknown offline region", nil);
271
+ return;
272
+ }
273
+
274
+ if (pack.state == MGLOfflinePackStateInactive || pack.state == MGLOfflinePackStateComplete) {
275
+ resolve(nil);
276
+ return;
277
+ }
278
+
279
+ [pack suspend];
280
+ resolve(nil);
281
+ }
282
+
283
+ RCT_EXPORT_METHOD(resumePackDownload:(NSString *)name
284
+ resolver:(RCTPromiseResolveBlock)resolve
285
+ rejecter:(RCTPromiseRejectBlock)reject)
286
+ {
287
+ MGLOfflinePack *pack = [self _getPackFromName:name];
288
+
289
+ if (pack == nil) {
290
+ reject(@"resumePack", @"Unknown offline region", nil);
291
+ return;
292
+ }
293
+
294
+ if (pack.state == MGLOfflinePackStateActive || pack.state == MGLOfflinePackStateComplete) {
295
+ resolve(nil);
296
+ return;
297
+ }
298
+
299
+ [pack resume];
300
+ resolve(nil);
301
+ }
302
+
303
+ RCT_EXPORT_METHOD(setTileCountLimit:(nonnull NSNumber *)limit)
304
+ {
305
+ [[MGLOfflineStorage sharedOfflineStorage] setMaximumAllowedMapboxTiles:[limit intValue]];
306
+ }
307
+
308
+ RCT_EXPORT_METHOD(setProgressEventThrottle:(nonnull NSNumber *)throttleValue)
309
+ {
310
+ eventThrottle = [throttleValue doubleValue];
311
+ }
312
+
313
+ - (void)offlinePackProgressDidChange:(NSNotification *)notification
314
+ {
315
+ MGLOfflinePack *pack = notification.object;
316
+
317
+ if (pack.state == MGLOfflinePackStateInvalid) {
318
+ return; // Avoid invalid offline pack exception
319
+ }
320
+
321
+ if ([self _shouldSendProgressEvent:[self _getCurrentTimestamp] pack:pack]) {
322
+ NSDictionary *metadata = [self _unarchiveMetadata:pack];
323
+ RCTMGLEvent *event = [self _makeProgressEvent:metadata[@"name"] pack:pack];
324
+ [self _sendEvent:RCT_MAPBOX_OFFLINE_CALLBACK_PROGRESS event:event];
325
+ lastPackTimestamp = [self _getCurrentTimestamp];
326
+ }
327
+
328
+ lastPackState = pack.state;
329
+ }
330
+
331
+ - (void)offlinePackDidReceiveError:(NSNotification *)notification
332
+ {
333
+ MGLOfflinePack *pack = notification.object;
334
+ if (pack.state == MGLOfflinePackStateInvalid) {
335
+ return; // Avoid invalid offline pack exception
336
+ }
337
+ NSDictionary *metadata = [self _unarchiveMetadata:pack];
338
+
339
+ NSString *name = metadata[@"name"];
340
+ if (name != nil) {
341
+ NSError *error = notification.userInfo[MGLOfflinePackUserInfoKeyError];
342
+ RCTMGLEvent *event = [self _makeErrorEvent:name
343
+ type:RCT_MAPBOX_OFFLINE_ERROR
344
+ message:error.description];
345
+ [self _sendEvent:RCT_MAPBOX_OFFLINE_CALLBACK_ERROR event:event];
346
+ }
347
+ }
348
+
349
+ - (void)offlinePackDidReceiveMaxAllowedMapboxTiles:(NSNotification *)notification
350
+ {
351
+ MGLOfflinePack *pack = notification.object;
352
+ NSDictionary *metadata = [self _unarchiveMetadata:pack];
353
+
354
+ NSString *name = metadata[@"name"];
355
+ if (name != nil) {
356
+ RCTMGLEvent *event = [self _makeErrorEvent:name
357
+ type:RCT_MAPBOX_OFFLINE_ERROR
358
+ message:@"Mapbox tile limit exceeded"];
359
+ [self _sendEvent:RCT_MAPBOX_OFFLINE_CALLBACK_ERROR event:event];
360
+ }
361
+ }
362
+
363
+ - (double)_getCurrentTimestamp
364
+ {
365
+ return CACurrentMediaTime() * 1000;
366
+ }
367
+
368
+ - (NSData *)_archiveMetadata:(NSString *)metadata
369
+ {
370
+ return [NSKeyedArchiver archivedDataWithRootObject:metadata];
371
+ }
372
+
373
+ - (NSDictionary *)_unarchiveMetadata:(MGLOfflinePack *)pack
374
+ {
375
+ id data = [NSKeyedUnarchiver unarchiveObjectWithData:pack.context];
376
+ // Version v5 store data as NSDictionary while v6 store data as JSON string.
377
+ // User might save offline pack in v5 and then try to read in v6.
378
+ // In v5 are metadata stored nested which need to be handled in JS.
379
+ // Example of how data are stored in v5
380
+ // {
381
+ // name: "New York",
382
+ // metadata: {
383
+ // customMeta: "...",
384
+ // }
385
+ // }
386
+ if ([data isKindOfClass:[NSDictionary class]]) {
387
+ return data;
388
+ }
389
+
390
+ if (data == nil) {
391
+ return @{};
392
+ }
393
+
394
+ return [NSJSONSerialization JSONObjectWithData:[data dataUsingEncoding:NSUTF8StringEncoding]
395
+ options:NSJSONReadingMutableContainers
396
+ error:nil];
397
+ }
398
+
399
+ - (NSDictionary *)_makeRegionStatusPayload:(NSString *)name pack:(MGLOfflinePack *)pack
400
+ {
401
+ uint64_t completedResources = pack.progress.countOfResourcesCompleted;
402
+ uint64_t expectedResources = pack.progress.countOfResourcesExpected;
403
+ float progressPercentage = (float)completedResources / expectedResources;
404
+
405
+ // prevent NaN errors when expectedResources is 0
406
+ if(expectedResources == 0) {
407
+ progressPercentage = 0;
408
+ }
409
+
410
+ return @{
411
+ @"state": @(pack.state),
412
+ @"name": name,
413
+ @"percentage": @(ceilf(progressPercentage * 100.0)),
414
+ @"completedResourceCount": @(pack.progress.countOfResourcesCompleted),
415
+ @"completedResourceSize": @(pack.progress.countOfBytesCompleted),
416
+ @"completedTileSize": @(pack.progress.countOfTileBytesCompleted),
417
+ @"completedTileCount": @(pack.progress.countOfTilesCompleted),
418
+ @"requiredResourceCount": @(pack.progress.maximumResourcesExpected)
419
+ };
420
+ }
421
+
422
+ - (RCTMGLEvent *)_makeProgressEvent:(NSString *)name pack:(MGLOfflinePack *)pack
423
+ {
424
+ return [RCTMGLEvent makeEvent:RCT_MAPBOX_OFFLINE_PROGRESS withPayload:[self _makeRegionStatusPayload:name pack:pack]];
425
+ }
426
+
427
+ - (RCTMGLEvent *)_makeErrorEvent:(NSString *)name type:(NSString *)type message:(NSString *)message
428
+ {
429
+ NSDictionary *payload = @{ @"name": name, @"message": message };
430
+ return [RCTMGLEvent makeEvent:type withPayload:payload];
431
+ }
432
+
433
+ - (NSArray<NSDictionary *> *)_convertPacksToJson:(NSArray<MGLOfflinePack *> *)packs
434
+ {
435
+ NSMutableArray<NSDictionary *> *jsonPacks = [NSMutableArray new];
436
+
437
+ if (packs == nil) {
438
+ return jsonPacks;
439
+ }
440
+
441
+ for (MGLOfflinePack *pack in packs) {
442
+ [jsonPacks addObject:[self _convertPackToDict:pack]];
443
+ }
444
+
445
+ return jsonPacks;
446
+ }
447
+
448
+ - (NSDictionary *)_convertPackToDict:(MGLOfflinePack *)pack
449
+ {
450
+ // format bounds
451
+ MGLTilePyramidOfflineRegion *region = (MGLTilePyramidOfflineRegion *)pack.region;
452
+ if (region == nil) {
453
+ return nil;
454
+ }
455
+
456
+ NSArray *jsonBounds = @[
457
+ @[@(region.bounds.ne.longitude), @(region.bounds.ne.latitude)],
458
+ @[@(region.bounds.sw.longitude), @(region.bounds.sw.latitude)]
459
+ ];
460
+
461
+ // format metadata
462
+ NSDictionary *metadata = [self _unarchiveMetadata:pack];
463
+ NSData *jsonMetadata = [NSJSONSerialization dataWithJSONObject:metadata
464
+ options:0
465
+ error:nil];
466
+ return @{
467
+ @"metadata": [[NSString alloc] initWithData:jsonMetadata encoding:NSUTF8StringEncoding],
468
+ @"bounds": jsonBounds
469
+ };
470
+ }
471
+
472
+ - (MGLOfflinePack *)_getPackFromName:(NSString *)name
473
+ {
474
+ NSArray<MGLOfflinePack *> *packs = [[MGLOfflineStorage sharedOfflineStorage] packs];
475
+
476
+ if (packs == nil) {
477
+ return nil;
478
+ }
479
+
480
+ for (MGLOfflinePack *pack in packs) {
481
+ NSDictionary *metadata = [self _unarchiveMetadata:pack];
482
+
483
+ if ([name isEqualToString:metadata[@"name"]]) {
484
+ return pack;
485
+ }
486
+ }
487
+
488
+ return nil;
489
+ }
490
+
491
+ - (void)_sendEvent:(NSString *)eventName event:(RCTMGLEvent *)event
492
+ {
493
+ if (!hasListeners) {
494
+ return;
495
+ }
496
+ [self sendEventWithName:eventName body:[event toJSON]];
497
+ }
498
+
499
+ - (BOOL)_shouldSendProgressEvent:(double)currentTimestamp pack:(MGLOfflinePack *)currentPack
500
+ {
501
+ if (lastPackState == -1) {
502
+ return YES;
503
+ }
504
+
505
+ if (lastPackState != currentPack.state) {
506
+ return YES;
507
+ }
508
+
509
+ if (currentTimestamp - lastPackTimestamp > eventThrottle) {
510
+ return YES;
511
+ }
512
+
513
+ return NO;
514
+ }
515
+
516
+ @end
@@ -0,0 +1,13 @@
1
+ //
2
+ // MGLSnapshotModule.h
3
+ // RCTMGL
4
+ //
5
+ // Created by Nick Italiano on 12/1/17.
6
+ // Copyright © 2017 Mapbox Inc. All rights reserved.
7
+ //
8
+
9
+ #import <React/RCTBridgeModule.h>
10
+
11
+ @interface MGLSnapshotModule : NSObject<RCTBridgeModule>
12
+
13
+ @end
@@ -0,0 +1,80 @@
1
+ //
2
+ // MGLSnapshotModule.m
3
+ // RCTMGL
4
+ //
5
+ // Created by Nick Italiano on 12/1/17.
6
+ // Copyright © 2017 Mapbox Inc. All rights reserved.
7
+ //
8
+
9
+ #import "MGLSnapshotModule.h"
10
+ #import "RCTMGLUtils.h"
11
+ #import "RNMBImageUtils.h"
12
+ @import Mapbox;
13
+
14
+ @implementation MGLSnapshotModule
15
+
16
+ RCT_EXPORT_MODULE()
17
+
18
+ + (BOOL)requiresMainQueueSetup
19
+ {
20
+ return YES;
21
+ }
22
+
23
+ RCT_EXPORT_METHOD(takeSnap:(NSDictionary *)jsOptions
24
+ resolver:(RCTPromiseResolveBlock)resolve
25
+ rejecter:(RCTPromiseRejectBlock)reject)
26
+ {
27
+ dispatch_async(dispatch_get_main_queue(), ^{
28
+ MGLMapSnapshotOptions *options = [self _getOptions:jsOptions];
29
+ __block MGLMapSnapshotter *snapshotter = [[MGLMapSnapshotter alloc] initWithOptions:options];
30
+
31
+ [snapshotter startWithCompletionHandler:^(MGLMapSnapshot * _Nullable snapshot, NSError * _Nullable err) {
32
+ if (err != nil) {
33
+ reject(@"takeSnap", @"Could not create snapshot", err);
34
+ snapshotter = nil;
35
+ return;
36
+ }
37
+
38
+ NSString *result = nil;
39
+ if ([jsOptions[@"writeToDisk"] boolValue]) {
40
+ result = [RNMBImageUtils createTempFile:snapshot.image];
41
+ } else {
42
+ result = [RNMBImageUtils createBase64:snapshot.image];
43
+ }
44
+
45
+ resolve(result);
46
+ snapshotter = nil;
47
+ }];
48
+ });
49
+ }
50
+
51
+ - (MGLMapSnapshotOptions *)_getOptions:(NSDictionary *)jsOptions
52
+ {
53
+ MGLMapCamera *camera = [[MGLMapCamera alloc] init];
54
+
55
+ camera.pitch = [jsOptions[@"pitch"] doubleValue];
56
+ camera.heading = [jsOptions[@"heading"] doubleValue];
57
+
58
+ if (jsOptions[@"centerCoordinate"] != nil) {
59
+ camera.centerCoordinate = [RCTMGLUtils fromFeature:jsOptions[@"centerCoordinate"]];
60
+ }
61
+
62
+ NSNumber *width = jsOptions[@"width"];
63
+ NSNumber *height = jsOptions[@"height"];
64
+ CGSize size = CGSizeMake([width doubleValue], [height doubleValue]);
65
+
66
+ MGLMapSnapshotOptions *options = [[MGLMapSnapshotOptions alloc] initWithStyleURL:[NSURL URLWithString:jsOptions[@"styleURL"]]
67
+ camera:camera
68
+ size:size];
69
+ if (jsOptions[@"zoomLevel"] != nil) {
70
+ options.zoomLevel = [jsOptions[@"zoomLevel"] doubleValue];
71
+ }
72
+
73
+ if (jsOptions[@"bounds"] != nil) {
74
+ options.coordinateBounds = [RCTMGLUtils fromFeatureCollection:jsOptions[@"bounds"]];
75
+ }
76
+
77
+ return options;
78
+ }
79
+
80
+ @end
@@ -0,0 +1,11 @@
1
+ #import <QuartzCore/QuartzCore.h>
2
+ #import "MGLUserLocationHeadingIndicator.h"
3
+ @import Mapbox;
4
+
5
+ @interface MGLUserLocationHeadingArrowLayer : CAShapeLayer <MGLUserLocationHeadingIndicator>
6
+
7
+ - (instancetype)initWithUserLocationAnnotationView:(MGLUserLocationAnnotationView *)userLocationView;
8
+ - (void)updateHeadingAccuracy:(CLLocationDirection)accuracy;
9
+ - (void)updateTintColor:(CGColorRef)color;
10
+
11
+ @end
@@ -0,0 +1,57 @@
1
+ #import "MGLUserLocationHeadingArrowLayer.h"
2
+ #import "MGLFaux3DUserLocationAnnotationView.h"
3
+
4
+ const CGFloat MGLUserLocationHeadingArrowSize = 6;
5
+
6
+ @implementation MGLUserLocationHeadingArrowLayer
7
+
8
+ - (instancetype)initWithUserLocationAnnotationView:(MGLUserLocationAnnotationView *)userLocationView
9
+ {
10
+ CGFloat size = userLocationView.bounds.size.width + MGLUserLocationHeadingArrowSize;
11
+
12
+ self = [super init];
13
+ self.bounds = CGRectMake(0, 0, size, size);
14
+ self.position = CGPointMake(CGRectGetMidX(userLocationView.bounds), CGRectGetMidY(userLocationView.bounds));
15
+ self.path = [self arrowPath];
16
+ self.fillColor = userLocationView.tintColor.CGColor;
17
+ self.shouldRasterize = YES;
18
+ self.rasterizationScale = UIScreen.mainScreen.scale;
19
+ self.drawsAsynchronously = YES;
20
+
21
+ self.strokeColor = UIColor.whiteColor.CGColor;
22
+ self.lineWidth = 1.0;
23
+ self.lineJoin = kCALineJoinRound;
24
+
25
+ return self;
26
+ }
27
+
28
+ - (void)updateHeadingAccuracy:(CLLocationDirection)accuracy
29
+ {
30
+ // unimplemented
31
+ }
32
+
33
+ - (void)updateTintColor:(CGColorRef)color
34
+ {
35
+ self.fillColor = color;
36
+ }
37
+
38
+ - (CGPathRef)arrowPath {
39
+ CGFloat center = roundf(CGRectGetMidX(self.bounds));
40
+ CGFloat size = MGLUserLocationHeadingArrowSize;
41
+
42
+ CGPoint top = CGPointMake(center, 0);
43
+ CGPoint left = CGPointMake(center - size, size);
44
+ CGPoint right = CGPointMake(center + size, size);
45
+ CGPoint middle = CGPointMake(center, size / M_PI);
46
+
47
+ UIBezierPath *bezierPath = [UIBezierPath bezierPath];
48
+ [bezierPath moveToPoint:top];
49
+ [bezierPath addLineToPoint:left];
50
+ [bezierPath addQuadCurveToPoint:right controlPoint:middle];
51
+ [bezierPath addLineToPoint:top];
52
+ [bezierPath closePath];
53
+
54
+ return bezierPath.CGPath;
55
+ }
56
+
57
+ @end
@@ -0,0 +1,11 @@
1
+ #import <QuartzCore/QuartzCore.h>
2
+ #import "MGLUserLocationHeadingIndicator.h"
3
+ @import Mapbox;
4
+
5
+ @interface MGLUserLocationHeadingBeamLayer : CALayer <MGLUserLocationHeadingIndicator>
6
+
7
+ - (MGLUserLocationHeadingBeamLayer *)initWithUserLocationAnnotationView:(MGLUserLocationAnnotationView *)userLocationView;
8
+ - (void)updateHeadingAccuracy:(CLLocationDirection)accuracy;
9
+ - (void)updateTintColor:(CGColorRef)color;
10
+
11
+ @end