@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,474 @@
1
+ //
2
+ // https://github.com/mapbox/mapbox-gl-native/blob/master/platform/ios/src/MGLFaux3DUserLocationAnnotationView.m
3
+ //
4
+
5
+ #import "MGLFaux3DUserLocationAnnotationView.h"
6
+
7
+ #import "MGLUserLocationHeadingIndicator.h"
8
+ #import "MGLUserLocationHeadingArrowLayer.h"
9
+ #import "MGLUserLocationHeadingBeamLayer.h"
10
+
11
+ #import "RCTMGLMapView.h"
12
+
13
+ const CGFloat MGLUserLocationAnnotationDotSize = 22.0;
14
+ const CGFloat MGLUserLocationAnnotationHaloSize = 115.0;
15
+
16
+ const CGFloat MGLUserLocationAnnotationPuckSize = 45.0;
17
+ const CGFloat MGLUserLocationAnnotationArrowSize = MGLUserLocationAnnotationPuckSize * 0.5;
18
+
19
+ const CGFloat MGLUserLocationHeadingUpdateThreshold = 0.01;
20
+
21
+ @implementation MGLFaux3DUserLocationAnnotationView
22
+ {
23
+ BOOL _puckModeActivated;
24
+
25
+ CALayer *_puckDot;
26
+ CAShapeLayer *_puckArrow;
27
+
28
+ CALayer<MGLUserLocationHeadingIndicator> *_headingIndicatorLayer;
29
+ CALayer *_accuracyRingLayer;
30
+ CALayer *_dotBorderLayer;
31
+ CALayer *_dotLayer;
32
+ CALayer *_haloLayer;
33
+
34
+ CLLocationDirection _oldHeadingAccuracy;
35
+ CLLocationAccuracy _oldHorizontalAccuracy;
36
+ double _oldZoom;
37
+ double _oldPitch;
38
+ }
39
+
40
+ - (CALayer *)hitTestLayer
41
+ {
42
+ // Only the main dot should be interactive (i.e., exclude the accuracy ring and halo).
43
+ return _dotBorderLayer ?: _puckDot;
44
+ }
45
+
46
+ - (void)update
47
+ {
48
+ if (CGSizeEqualToSize(self.frame.size, CGSizeZero))
49
+ {
50
+ CGFloat frameSize = (self.mapView.userTrackingMode == MGLUserTrackingModeFollowWithCourse) ? MGLUserLocationAnnotationPuckSize : MGLUserLocationAnnotationDotSize;
51
+ [self updateFrameWithSize:frameSize];
52
+ }
53
+
54
+ if (CLLocationCoordinate2DIsValid(self.userLocation.coordinate))
55
+ {
56
+ RCTMGLMapView *reactMapView = (RCTMGLMapView *)self.mapView;
57
+ // FM - TODO
58
+ (reactMapView.userTrackingMode == MGLUserTrackingModeFollowWithCourse) ? [self drawPuck] : [self drawDot];
59
+ [self updatePitch];
60
+ }
61
+
62
+ _haloLayer.hidden = ! CLLocationCoordinate2DIsValid(self.mapView.userLocation.coordinate) || self.mapView.userLocation.location.horizontalAccuracy > 10;
63
+ }
64
+
65
+ - (void)setTintColor:(UIColor *)tintColor
66
+ {
67
+ CGColorRef newTintColor = [tintColor CGColor];
68
+
69
+ if (_puckModeActivated)
70
+ {
71
+ _puckArrow.fillColor = newTintColor;
72
+ }
73
+ else
74
+ {
75
+ _accuracyRingLayer.backgroundColor = newTintColor;
76
+ _haloLayer.backgroundColor = newTintColor;
77
+ _dotLayer.backgroundColor = newTintColor;
78
+ [_headingIndicatorLayer updateTintColor:newTintColor];
79
+ }
80
+ }
81
+
82
+ - (void)updatePitch
83
+ {
84
+ if (self.mapView.camera.pitch != _oldPitch)
85
+ {
86
+ // disable implicit animation
87
+ [CATransaction begin];
88
+ [CATransaction setDisableActions:YES];
89
+
90
+ CATransform3D t = CATransform3DRotate(CATransform3DIdentity, MGLRadiansFromDegrees(self.mapView.camera.pitch), 1.0, 0, 0);
91
+ self.layer.sublayerTransform = t;
92
+
93
+ [self updateFaux3DEffect];
94
+
95
+ [CATransaction commit];
96
+
97
+ _oldPitch = self.mapView.camera.pitch;
98
+ }
99
+ }
100
+
101
+ - (void)updateFaux3DEffect
102
+ {
103
+ CGFloat pitch = MGLRadiansFromDegrees(self.mapView.camera.pitch);
104
+
105
+ if (_puckDot)
106
+ {
107
+ _puckDot.shadowOffset = CGSizeMake(0, fmaxf(pitch * 10.f, 1.f));
108
+ _puckDot.shadowRadius = fmaxf(pitch * 5.f, 0.75f);
109
+ }
110
+
111
+ if (_dotBorderLayer)
112
+ {
113
+ _dotBorderLayer.shadowOffset = CGSizeMake(0.f, pitch * 10.f);
114
+ _dotBorderLayer.shadowRadius = fmaxf(pitch * 5.f, 3.f);
115
+ }
116
+
117
+ if (_dotLayer)
118
+ {
119
+ _dotLayer.zPosition = pitch * 2.f;
120
+ }
121
+ }
122
+
123
+ - (void)updateFrameWithSize:(CGFloat)size
124
+ {
125
+ CGSize newSize = CGSizeMake(size, size);
126
+ if (CGSizeEqualToSize(self.frame.size, newSize))
127
+ {
128
+ return;
129
+ }
130
+
131
+ // Update frame size, keeping the existing center point.
132
+ CGPoint oldCenter = self.center;
133
+ CGRect newFrame = self.frame;
134
+ newFrame.size = newSize;
135
+ [self setFrame:newFrame];
136
+ [self setCenter:oldCenter];
137
+ }
138
+
139
+ - (void)drawPuck
140
+ {
141
+ if ( ! _puckModeActivated)
142
+ {
143
+ self.layer.sublayers = nil;
144
+
145
+ _headingIndicatorLayer = nil;
146
+ _accuracyRingLayer = nil;
147
+ _haloLayer = nil;
148
+ _dotBorderLayer = nil;
149
+ _dotLayer = nil;
150
+
151
+ [self updateFrameWithSize:MGLUserLocationAnnotationPuckSize];
152
+ }
153
+
154
+ // background dot (white with black shadow)
155
+ //
156
+ if ( ! _puckDot)
157
+ {
158
+ _puckDot = [self circleLayerWithSize:MGLUserLocationAnnotationPuckSize];
159
+ _puckDot.backgroundColor = [[UIColor whiteColor] CGColor];
160
+ _puckDot.shadowColor = [[UIColor blackColor] CGColor];
161
+ _puckDot.shadowOpacity = 0.25;
162
+ _puckDot.shadowPath = [[UIBezierPath bezierPathWithOvalInRect:_puckDot.bounds] CGPath];
163
+
164
+ if (self.mapView.camera.pitch)
165
+ {
166
+ [self updateFaux3DEffect];
167
+ }
168
+ else
169
+ {
170
+ _puckDot.shadowOffset = CGSizeMake(0, 1);
171
+ _puckDot.shadowRadius = 0.75;
172
+ }
173
+
174
+ [self.layer addSublayer:_puckDot];
175
+ }
176
+
177
+ // arrow
178
+ //
179
+ if ( ! _puckArrow)
180
+ {
181
+ _puckArrow = [CAShapeLayer layer];
182
+ _puckArrow.path = [[self puckArrow] CGPath];
183
+ _puckArrow.fillColor = [self.mapView.tintColor CGColor];
184
+ _puckArrow.bounds = CGRectMake(0, 0, round(MGLUserLocationAnnotationArrowSize), round(MGLUserLocationAnnotationArrowSize));
185
+ _puckArrow.position = CGPointMake(CGRectGetMidX(super.bounds), CGRectGetMidY(super.bounds));
186
+ _puckArrow.shouldRasterize = YES;
187
+ _puckArrow.rasterizationScale = [UIScreen mainScreen].scale;
188
+ _puckArrow.drawsAsynchronously = YES;
189
+
190
+ _puckArrow.lineJoin = @"round";
191
+ _puckArrow.lineWidth = 1.f;
192
+ _puckArrow.strokeColor = _puckArrow.fillColor;
193
+
194
+ [self.layer addSublayer:_puckArrow];
195
+ }
196
+ if (self.userLocation.location.course >= 0)
197
+ {
198
+ _puckArrow.affineTransform = CGAffineTransformRotate(CGAffineTransformIdentity, -MGLRadiansFromDegrees(self.mapView.direction - self.userLocation.location.course));
199
+ }
200
+
201
+ if ( ! _puckModeActivated)
202
+ {
203
+ _puckModeActivated = YES;
204
+
205
+ [self updateFaux3DEffect];
206
+ }
207
+ }
208
+
209
+ - (UIBezierPath *)puckArrow
210
+ {
211
+ CGFloat max = MGLUserLocationAnnotationArrowSize;
212
+
213
+ UIBezierPath *bezierPath = UIBezierPath.bezierPath;
214
+ [bezierPath moveToPoint: CGPointMake(max * 0.5, 0)];
215
+ [bezierPath addLineToPoint: CGPointMake(max * 0.1, max)];
216
+ [bezierPath addLineToPoint: CGPointMake(max * 0.5, max * 0.65)];
217
+ [bezierPath addLineToPoint: CGPointMake(max * 0.9, max)];
218
+ [bezierPath addLineToPoint: CGPointMake(max * 0.5, 0)];
219
+ [bezierPath closePath];
220
+
221
+ return bezierPath;
222
+ }
223
+
224
+ - (void)drawDot
225
+ {
226
+ if (_puckModeActivated)
227
+ {
228
+ self.layer.sublayers = nil;
229
+
230
+ _puckDot = nil;
231
+ _puckArrow = nil;
232
+
233
+ [self updateFrameWithSize:MGLUserLocationAnnotationDotSize];
234
+ }
235
+
236
+ // heading indicator (tinted, beam or arrow)
237
+ RCTMGLMapView *reactMapView = (RCTMGLMapView *)self.mapView;
238
+ BOOL headingTrackingModeEnabled = reactMapView.userTrackingMode == MGLUserTrackingModeFollowWithHeading;
239
+ BOOL showHeadingIndicator = self.mapView.showsUserHeadingIndicator || headingTrackingModeEnabled;
240
+
241
+ if (showHeadingIndicator)
242
+ {
243
+ _headingIndicatorLayer.hidden = NO;
244
+ CLLocationDirection headingAccuracy = self.userLocation.heading.headingAccuracy;
245
+
246
+ if (([_headingIndicatorLayer isMemberOfClass:[MGLUserLocationHeadingBeamLayer class]] && ! headingTrackingModeEnabled) ||
247
+ ([_headingIndicatorLayer isMemberOfClass:[MGLUserLocationHeadingArrowLayer class]] && headingTrackingModeEnabled))
248
+ {
249
+ [_headingIndicatorLayer removeFromSuperlayer];
250
+ _headingIndicatorLayer = nil;
251
+ _oldHeadingAccuracy = -1;
252
+ }
253
+
254
+ if ( ! _headingIndicatorLayer && headingAccuracy)
255
+ {
256
+ if (headingTrackingModeEnabled)
257
+ {
258
+ _headingIndicatorLayer = [[MGLUserLocationHeadingBeamLayer alloc] initWithUserLocationAnnotationView:self];
259
+ [self.layer insertSublayer:_headingIndicatorLayer below:_dotBorderLayer];
260
+ }
261
+ else
262
+ {
263
+ _headingIndicatorLayer = [[MGLUserLocationHeadingArrowLayer alloc] initWithUserLocationAnnotationView:self];
264
+ [self.layer addSublayer:_headingIndicatorLayer];
265
+ _headingIndicatorLayer.zPosition = 1;
266
+ }
267
+ }
268
+
269
+ if (_oldHeadingAccuracy != headingAccuracy)
270
+ {
271
+ [_headingIndicatorLayer updateHeadingAccuracy:headingAccuracy];
272
+ _oldHeadingAccuracy = headingAccuracy;
273
+ }
274
+
275
+ if (self.userLocation.heading.trueHeading >= 0)
276
+ {
277
+ CGFloat rotation = -MGLRadiansFromDegrees(self.mapView.direction - self.userLocation.heading.trueHeading);
278
+
279
+ // Don't rotate if the change is imperceptible.
280
+ if (fabs(rotation) > MGLUserLocationHeadingUpdateThreshold)
281
+ {
282
+ [CATransaction begin];
283
+ [CATransaction setDisableActions:YES];
284
+
285
+ _headingIndicatorLayer.affineTransform = CGAffineTransformRotate(CGAffineTransformIdentity, rotation);
286
+
287
+ [CATransaction commit];
288
+ }
289
+ }
290
+ }
291
+ else
292
+ {
293
+ [_headingIndicatorLayer removeFromSuperlayer];
294
+ _headingIndicatorLayer = nil;
295
+ }
296
+
297
+ // update accuracy ring (if zoom or horizontal accuracy have changed)
298
+ //
299
+ if (_accuracyRingLayer && (_oldZoom != self.mapView.zoomLevel || _oldHorizontalAccuracy != self.userLocation.location.horizontalAccuracy))
300
+ {
301
+ CGFloat accuracyRingSize = [self calculateAccuracyRingSize];
302
+
303
+ // only show the accuracy ring if it won't be obscured by the location dot
304
+ if (accuracyRingSize > MGLUserLocationAnnotationDotSize + 15)
305
+ {
306
+ _accuracyRingLayer.hidden = NO;
307
+
308
+ // disable implicit animation of the accuracy ring, unless triggered by a change in accuracy
309
+ BOOL shouldDisableActions = _oldHorizontalAccuracy == self.userLocation.location.horizontalAccuracy;
310
+
311
+ [CATransaction begin];
312
+ [CATransaction setDisableActions:shouldDisableActions];
313
+
314
+ _accuracyRingLayer.bounds = CGRectMake(0, 0, accuracyRingSize, accuracyRingSize);
315
+ _accuracyRingLayer.cornerRadius = accuracyRingSize / 2.0;
316
+
317
+ // match the halo to the accuracy ring
318
+ _haloLayer.bounds = _accuracyRingLayer.bounds;
319
+ _haloLayer.cornerRadius = _accuracyRingLayer.cornerRadius;
320
+ _haloLayer.shouldRasterize = NO;
321
+
322
+ [CATransaction commit];
323
+ }
324
+ else
325
+ {
326
+ _accuracyRingLayer.hidden = YES;
327
+
328
+ _haloLayer.bounds = CGRectMake(0, 0, MGLUserLocationAnnotationHaloSize, MGLUserLocationAnnotationHaloSize);
329
+ _haloLayer.cornerRadius = MGLUserLocationAnnotationHaloSize / 2.0;
330
+ _haloLayer.shouldRasterize = YES;
331
+ _haloLayer.rasterizationScale = [UIScreen mainScreen].scale;
332
+ }
333
+
334
+ // store accuracy and zoom so we're not redrawing unchanged location updates
335
+ _oldHorizontalAccuracy = self.userLocation.location.horizontalAccuracy;
336
+ _oldZoom = self.mapView.zoomLevel;
337
+ }
338
+
339
+ // accuracy ring (circular, tinted, mostly-transparent)
340
+ //
341
+ if ( ! _accuracyRingLayer && self.userLocation.location.horizontalAccuracy)
342
+ {
343
+ CGFloat accuracyRingSize = [self calculateAccuracyRingSize];
344
+ _accuracyRingLayer = [self circleLayerWithSize:accuracyRingSize];
345
+ _accuracyRingLayer.backgroundColor = [self.mapView.tintColor CGColor];
346
+ _accuracyRingLayer.opacity = 0.1;
347
+ _accuracyRingLayer.shouldRasterize = NO;
348
+ _accuracyRingLayer.allowsGroupOpacity = NO;
349
+
350
+ [self.layer addSublayer:_accuracyRingLayer];
351
+ }
352
+
353
+ // expanding sonar-like pulse (circular, tinted, fades out)
354
+ //
355
+ if ( ! _haloLayer)
356
+ {
357
+ _haloLayer = [self circleLayerWithSize:MGLUserLocationAnnotationHaloSize];
358
+ _haloLayer.backgroundColor = [self.mapView.tintColor CGColor];
359
+ _haloLayer.allowsGroupOpacity = NO;
360
+ _haloLayer.zPosition = -0.1f;
361
+
362
+ // set defaults for the animations
363
+ CAAnimationGroup *animationGroup = [self loopingAnimationGroupWithDuration:3.0];
364
+
365
+ // scale out radially with initial acceleration
366
+ CAKeyframeAnimation *boundsAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale.xy"];
367
+ boundsAnimation.values = @[@0, @0.35, @1];
368
+ boundsAnimation.keyTimes = @[@0, @0.2, @1];
369
+
370
+ // go transparent as scaled out, start semi-opaque
371
+ CAKeyframeAnimation *opacityAnimation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
372
+ opacityAnimation.values = @[@0.4, @0.4, @0];
373
+ opacityAnimation.keyTimes = @[@0, @0.2, @1];
374
+
375
+ animationGroup.animations = @[boundsAnimation, opacityAnimation];
376
+
377
+ [_haloLayer addAnimation:animationGroup forKey:@"animateTransformAndOpacity"];
378
+
379
+ [self.layer addSublayer:_haloLayer];
380
+ }
381
+
382
+ // background dot (white with black shadow)
383
+ //
384
+ if ( ! _dotBorderLayer)
385
+ {
386
+ _dotBorderLayer = [self circleLayerWithSize:MGLUserLocationAnnotationDotSize];
387
+ _dotBorderLayer.backgroundColor = [[UIColor whiteColor] CGColor];
388
+ _dotBorderLayer.shadowColor = [[UIColor blackColor] CGColor];
389
+ _dotBorderLayer.shadowOpacity = 0.25;
390
+ _dotBorderLayer.shadowPath = [[UIBezierPath bezierPathWithOvalInRect:_dotBorderLayer.bounds] CGPath];
391
+
392
+ if (self.mapView.camera.pitch)
393
+ {
394
+ [self updateFaux3DEffect];
395
+ }
396
+ else
397
+ {
398
+ _dotBorderLayer.shadowOffset = CGSizeMake(0, 0);
399
+ _dotBorderLayer.shadowRadius = 3;
400
+ }
401
+
402
+ [self.layer addSublayer:_dotBorderLayer];
403
+ }
404
+
405
+ // inner dot (pulsing, tinted)
406
+ //
407
+ if ( ! _dotLayer)
408
+ {
409
+ _dotLayer = [self circleLayerWithSize:MGLUserLocationAnnotationDotSize * 0.75];
410
+ _dotLayer.backgroundColor = [self.mapView.tintColor CGColor];
411
+
412
+ // set defaults for the animations
413
+ CAAnimationGroup *animationGroup = [self loopingAnimationGroupWithDuration:1.5];
414
+ animationGroup.autoreverses = YES;
415
+ animationGroup.fillMode = kCAFillModeBoth;
416
+
417
+ // scale the dot up and down
418
+ CABasicAnimation *pulseAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale.xy"];
419
+ pulseAnimation.fromValue = @0.8;
420
+ pulseAnimation.toValue = @1;
421
+
422
+ // fade opacity in and out, subtly
423
+ CABasicAnimation *opacityAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
424
+ opacityAnimation.fromValue = @0.8;
425
+ opacityAnimation.toValue = @1;
426
+
427
+ animationGroup.animations = @[pulseAnimation, opacityAnimation];
428
+
429
+ [_dotLayer addAnimation:animationGroup forKey:@"animateTransformAndOpacity"];
430
+
431
+ [self.layer addSublayer:_dotLayer];
432
+ }
433
+
434
+ if (_puckModeActivated)
435
+ {
436
+ _puckModeActivated = NO;
437
+
438
+ [self updateFaux3DEffect];
439
+ }
440
+ }
441
+
442
+ - (CALayer *)circleLayerWithSize:(CGFloat)layerSize
443
+ {
444
+ layerSize = round(layerSize);
445
+
446
+ CALayer *circleLayer = [CALayer layer];
447
+ circleLayer.bounds = CGRectMake(0, 0, layerSize, layerSize);
448
+ circleLayer.position = CGPointMake(CGRectGetMidX(super.bounds), CGRectGetMidY(super.bounds));
449
+ circleLayer.cornerRadius = layerSize / 2.0;
450
+ circleLayer.shouldRasterize = YES;
451
+ circleLayer.rasterizationScale = [UIScreen mainScreen].scale;
452
+ circleLayer.drawsAsynchronously = YES;
453
+
454
+ return circleLayer;
455
+ }
456
+
457
+ - (CAAnimationGroup *)loopingAnimationGroupWithDuration:(CGFloat)animationDuration
458
+ {
459
+ CAAnimationGroup *animationGroup = [CAAnimationGroup animation];
460
+ animationGroup.duration = animationDuration;
461
+ animationGroup.repeatCount = INFINITY;
462
+ animationGroup.removedOnCompletion = NO;
463
+ animationGroup.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault];
464
+
465
+ return animationGroup;
466
+ }
467
+
468
+ - (CGFloat)calculateAccuracyRingSize
469
+ {
470
+ // diameter in screen points
471
+ return round(self.userLocation.location.horizontalAccuracy / [self.mapView metersPerPointAtLatitude:self.userLocation.coordinate.latitude] * 2.0);
472
+ }
473
+
474
+ @end
@@ -0,0 +1,13 @@
1
+ //
2
+ // MGLModule.h
3
+ // RCTMGL
4
+ //
5
+ // Created by Nick Italiano on 8/23/17.
6
+ // Copyright © 2017 Mapbox Inc. All rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+ #import <React/RCTBridgeModule.h>
11
+
12
+ @interface MGLModule : NSObject<RCTBridgeModule>
13
+ @end