@rnmapbox/maps 10.0.0-beta.70 → 10.0.0-beta.71

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 (228) hide show
  1. package/android/rctmgl/build.gradle +1 -1
  2. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/camera/RCTMGLCamera.kt +68 -29
  3. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/camera/RCTMGLCameraManager.kt +16 -13
  4. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/UserTrackingMode.kt +42 -0
  5. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/RCTMGLMapView.kt +49 -13
  6. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/helpers/CameraChangeTracker.kt +23 -0
  7. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/events/MapUserTrackingModeEvent.kt +21 -0
  8. package/index.d.ts +14 -62
  9. package/ios/RCTMGL-v10/RCTMGLCamera.swift +52 -26
  10. package/ios/RCTMGL-v10/RCTMGLCameraManager.m +5 -2
  11. package/ios/RCTMGL-v10/RCTMGLImages.swift +54 -8
  12. package/ios/install.md +1 -1
  13. package/javascript/components/Camera.tsx +7 -3
  14. package/javascript/components/Images.tsx +133 -0
  15. package/javascript/modules/location/{locationManager.js → locationManager.ts} +91 -18
  16. package/javascript/utils/MapboxStyles.d.ts +3 -3
  17. package/javascript/utils/styleMap.ts +2 -2
  18. package/lib/commonjs/classes/AnimatedCoordinatesArray.js.map +1 -1
  19. package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js +2 -5
  20. package/lib/commonjs/classes/AnimatedExtractCoordinateFromArray.js.map +1 -1
  21. package/lib/commonjs/classes/AnimatedPoint.js.map +1 -1
  22. package/lib/commonjs/classes/AnimatedRouteCoordinatesArray.js.map +1 -1
  23. package/lib/commonjs/classes/AnimatedShape.js.map +1 -1
  24. package/lib/commonjs/classes/index.d.js.map +1 -1
  25. package/lib/commonjs/classes/index.js.map +1 -1
  26. package/lib/commonjs/components/AbstractLayer.js +6 -10
  27. package/lib/commonjs/components/AbstractLayer.js.map +1 -1
  28. package/lib/commonjs/components/AbstractSource.js +3 -10
  29. package/lib/commonjs/components/AbstractSource.js.map +1 -1
  30. package/lib/commonjs/components/Atmosphere.js.map +1 -1
  31. package/lib/commonjs/components/BackgroundLayer.js +3 -6
  32. package/lib/commonjs/components/BackgroundLayer.js.map +1 -1
  33. package/lib/commonjs/components/Callout.js +27 -30
  34. package/lib/commonjs/components/Callout.js.map +1 -1
  35. package/lib/commonjs/components/Camera.js +3 -1
  36. package/lib/commonjs/components/Camera.js.map +1 -1
  37. package/lib/commonjs/components/CircleLayer.js +3 -6
  38. package/lib/commonjs/components/CircleLayer.js.map +1 -1
  39. package/lib/commonjs/components/FillExtrusionLayer.js +3 -6
  40. package/lib/commonjs/components/FillExtrusionLayer.js.map +1 -1
  41. package/lib/commonjs/components/FillLayer.js +3 -6
  42. package/lib/commonjs/components/FillLayer.js.map +1 -1
  43. package/lib/commonjs/components/HeadingIndicator.js.map +1 -1
  44. package/lib/commonjs/components/HeatmapLayer.js +3 -6
  45. package/lib/commonjs/components/HeatmapLayer.js.map +1 -1
  46. package/lib/commonjs/components/ImageSource.js +16 -19
  47. package/lib/commonjs/components/ImageSource.js.map +1 -1
  48. package/lib/commonjs/components/Images.js +3 -34
  49. package/lib/commonjs/components/Images.js.map +1 -1
  50. package/lib/commonjs/components/Light.js +7 -10
  51. package/lib/commonjs/components/Light.js.map +1 -1
  52. package/lib/commonjs/components/LineLayer.js +3 -6
  53. package/lib/commonjs/components/LineLayer.js.map +1 -1
  54. package/lib/commonjs/components/MapView.js +227 -230
  55. package/lib/commonjs/components/MapView.js.map +1 -1
  56. package/lib/commonjs/components/MarkerView.js +9 -16
  57. package/lib/commonjs/components/MarkerView.js.map +1 -1
  58. package/lib/commonjs/components/NativeBridgeComponent.js +0 -7
  59. package/lib/commonjs/components/NativeBridgeComponent.js.map +1 -1
  60. package/lib/commonjs/components/NativeUserLocation.js.map +1 -1
  61. package/lib/commonjs/components/PointAnnotation.js +8 -11
  62. package/lib/commonjs/components/PointAnnotation.js.map +1 -1
  63. package/lib/commonjs/components/RasterDemSource.js +36 -39
  64. package/lib/commonjs/components/RasterDemSource.js.map +1 -1
  65. package/lib/commonjs/components/RasterLayer.js +3 -6
  66. package/lib/commonjs/components/RasterLayer.js.map +1 -1
  67. package/lib/commonjs/components/RasterSource.js +45 -48
  68. package/lib/commonjs/components/RasterSource.js.map +1 -1
  69. package/lib/commonjs/components/ShapeSource.js +4 -7
  70. package/lib/commonjs/components/ShapeSource.js.map +1 -1
  71. package/lib/commonjs/components/SkyLayer.js +3 -6
  72. package/lib/commonjs/components/SkyLayer.js.map +1 -1
  73. package/lib/commonjs/components/Style.js.map +1 -1
  74. package/lib/commonjs/components/SymbolLayer.js +3 -6
  75. package/lib/commonjs/components/SymbolLayer.js.map +1 -1
  76. package/lib/commonjs/components/Terrain.js.map +1 -1
  77. package/lib/commonjs/components/UserLocation.js +68 -70
  78. package/lib/commonjs/components/UserLocation.js.map +1 -1
  79. package/lib/commonjs/components/VectorSource.js +63 -66
  80. package/lib/commonjs/components/VectorSource.js.map +1 -1
  81. package/lib/commonjs/components/annotations/Annotation.js +16 -19
  82. package/lib/commonjs/components/annotations/Annotation.js.map +1 -1
  83. package/lib/commonjs/modules/location/locationManager.js +21 -10
  84. package/lib/commonjs/modules/location/locationManager.js.map +1 -1
  85. package/lib/commonjs/modules/offline/OfflineCreatePackOptions.js.map +1 -1
  86. package/lib/commonjs/modules/offline/OfflinePack.js.map +1 -1
  87. package/lib/commonjs/modules/offline/offlineManager.js.map +1 -1
  88. package/lib/commonjs/modules/snapshot/SnapshotOptions.js.map +1 -1
  89. package/lib/commonjs/modules/snapshot/snapshotManager.js.map +1 -1
  90. package/lib/commonjs/types/index.js.map +1 -1
  91. package/lib/commonjs/utils/BridgeValue.js +0 -4
  92. package/lib/commonjs/utils/BridgeValue.js.map +1 -1
  93. package/lib/commonjs/utils/Logger.js +1 -4
  94. package/lib/commonjs/utils/Logger.js.map +1 -1
  95. package/lib/commonjs/utils/MapboxStyles.d.js.map +1 -1
  96. package/lib/commonjs/utils/StyleValue.js.map +1 -1
  97. package/lib/commonjs/utils/animated/Animated.js.map +1 -1
  98. package/lib/commonjs/utils/deprecation.js.map +1 -1
  99. package/lib/commonjs/utils/filterUtils.js.map +1 -1
  100. package/lib/commonjs/utils/geoUtils.d.js.map +1 -1
  101. package/lib/commonjs/utils/geoUtils.js.map +1 -1
  102. package/lib/commonjs/utils/getAnnotationsLayerID.js.map +1 -1
  103. package/lib/commonjs/utils/index.d.js.map +1 -1
  104. package/lib/commonjs/utils/index.js.map +1 -1
  105. package/lib/commonjs/utils/styleMap.js +2 -2
  106. package/lib/commonjs/utils/styleMap.js.map +1 -1
  107. package/lib/commonjs/web/MapContext.js.map +1 -1
  108. package/lib/commonjs/web/MapboxModule.js.map +1 -1
  109. package/lib/commonjs/web/UnimplementedComponent.js.map +1 -1
  110. package/lib/commonjs/web/components/Camera.js +2 -9
  111. package/lib/commonjs/web/components/Camera.js.map +1 -1
  112. package/lib/commonjs/web/components/MapView.js +5 -11
  113. package/lib/commonjs/web/components/MapView.js.map +1 -1
  114. package/lib/commonjs/web/index.js.map +1 -1
  115. package/lib/commonjs/web/utils/Logger.js +3 -7
  116. package/lib/commonjs/web/utils/Logger.js.map +1 -1
  117. package/lib/module/classes/AnimatedCoordinatesArray.js.map +1 -1
  118. package/lib/module/classes/AnimatedExtractCoordinateFromArray.js +2 -5
  119. package/lib/module/classes/AnimatedExtractCoordinateFromArray.js.map +1 -1
  120. package/lib/module/classes/AnimatedPoint.js.map +1 -1
  121. package/lib/module/classes/AnimatedRouteCoordinatesArray.js.map +1 -1
  122. package/lib/module/classes/AnimatedShape.js.map +1 -1
  123. package/lib/module/classes/index.d.js.map +1 -1
  124. package/lib/module/classes/index.js.map +1 -1
  125. package/lib/module/components/AbstractLayer.js +4 -10
  126. package/lib/module/components/AbstractLayer.js.map +1 -1
  127. package/lib/module/components/AbstractSource.js +3 -10
  128. package/lib/module/components/AbstractSource.js.map +1 -1
  129. package/lib/module/components/Atmosphere.js.map +1 -1
  130. package/lib/module/components/BackgroundLayer.js +3 -6
  131. package/lib/module/components/BackgroundLayer.js.map +1 -1
  132. package/lib/module/components/Callout.js +27 -30
  133. package/lib/module/components/Callout.js.map +1 -1
  134. package/lib/module/components/Camera.js +3 -1
  135. package/lib/module/components/Camera.js.map +1 -1
  136. package/lib/module/components/CircleLayer.js +3 -6
  137. package/lib/module/components/CircleLayer.js.map +1 -1
  138. package/lib/module/components/FillExtrusionLayer.js +3 -6
  139. package/lib/module/components/FillExtrusionLayer.js.map +1 -1
  140. package/lib/module/components/FillLayer.js +3 -6
  141. package/lib/module/components/FillLayer.js.map +1 -1
  142. package/lib/module/components/HeadingIndicator.js.map +1 -1
  143. package/lib/module/components/HeatmapLayer.js +3 -6
  144. package/lib/module/components/HeatmapLayer.js.map +1 -1
  145. package/lib/module/components/ImageSource.js +16 -19
  146. package/lib/module/components/ImageSource.js.map +1 -1
  147. package/lib/module/components/Images.js +3 -34
  148. package/lib/module/components/Images.js.map +1 -1
  149. package/lib/module/components/Light.js +7 -10
  150. package/lib/module/components/Light.js.map +1 -1
  151. package/lib/module/components/LineLayer.js +3 -6
  152. package/lib/module/components/LineLayer.js.map +1 -1
  153. package/lib/module/components/MapView.js +227 -230
  154. package/lib/module/components/MapView.js.map +1 -1
  155. package/lib/module/components/MarkerView.js +9 -16
  156. package/lib/module/components/MarkerView.js.map +1 -1
  157. package/lib/module/components/NativeBridgeComponent.js +0 -7
  158. package/lib/module/components/NativeBridgeComponent.js.map +1 -1
  159. package/lib/module/components/NativeUserLocation.js.map +1 -1
  160. package/lib/module/components/PointAnnotation.js +8 -11
  161. package/lib/module/components/PointAnnotation.js.map +1 -1
  162. package/lib/module/components/RasterDemSource.js +36 -39
  163. package/lib/module/components/RasterDemSource.js.map +1 -1
  164. package/lib/module/components/RasterLayer.js +3 -6
  165. package/lib/module/components/RasterLayer.js.map +1 -1
  166. package/lib/module/components/RasterSource.js +45 -48
  167. package/lib/module/components/RasterSource.js.map +1 -1
  168. package/lib/module/components/ShapeSource.js +4 -7
  169. package/lib/module/components/ShapeSource.js.map +1 -1
  170. package/lib/module/components/SkyLayer.js +3 -6
  171. package/lib/module/components/SkyLayer.js.map +1 -1
  172. package/lib/module/components/Style.js.map +1 -1
  173. package/lib/module/components/SymbolLayer.js +3 -6
  174. package/lib/module/components/SymbolLayer.js.map +1 -1
  175. package/lib/module/components/Terrain.js.map +1 -1
  176. package/lib/module/components/UserLocation.js +68 -70
  177. package/lib/module/components/UserLocation.js.map +1 -1
  178. package/lib/module/components/VectorSource.js +63 -66
  179. package/lib/module/components/VectorSource.js.map +1 -1
  180. package/lib/module/components/annotations/Annotation.js +16 -19
  181. package/lib/module/components/annotations/Annotation.js.map +1 -1
  182. package/lib/module/modules/location/locationManager.js +22 -10
  183. package/lib/module/modules/location/locationManager.js.map +1 -1
  184. package/lib/module/modules/offline/OfflineCreatePackOptions.js.map +1 -1
  185. package/lib/module/modules/offline/OfflinePack.js.map +1 -1
  186. package/lib/module/modules/offline/offlineManager.js.map +1 -1
  187. package/lib/module/modules/snapshot/SnapshotOptions.js.map +1 -1
  188. package/lib/module/modules/snapshot/snapshotManager.js.map +1 -1
  189. package/lib/module/types/index.js.map +1 -1
  190. package/lib/module/utils/BridgeValue.js +0 -4
  191. package/lib/module/utils/BridgeValue.js.map +1 -1
  192. package/lib/module/utils/Logger.js +1 -4
  193. package/lib/module/utils/Logger.js.map +1 -1
  194. package/lib/module/utils/MapboxStyles.d.js.map +1 -1
  195. package/lib/module/utils/StyleValue.js.map +1 -1
  196. package/lib/module/utils/animated/Animated.js.map +1 -1
  197. package/lib/module/utils/deprecation.js.map +1 -1
  198. package/lib/module/utils/filterUtils.js.map +1 -1
  199. package/lib/module/utils/geoUtils.d.js.map +1 -1
  200. package/lib/module/utils/geoUtils.js.map +1 -1
  201. package/lib/module/utils/getAnnotationsLayerID.js.map +1 -1
  202. package/lib/module/utils/index.d.js.map +1 -1
  203. package/lib/module/utils/index.js.map +1 -1
  204. package/lib/module/utils/styleMap.js +2 -2
  205. package/lib/module/utils/styleMap.js.map +1 -1
  206. package/lib/module/web/MapContext.js.map +1 -1
  207. package/lib/module/web/MapboxModule.js.map +1 -1
  208. package/lib/module/web/UnimplementedComponent.js.map +1 -1
  209. package/lib/module/web/components/Camera.js +2 -9
  210. package/lib/module/web/components/Camera.js.map +1 -1
  211. package/lib/module/web/components/MapView.js +5 -11
  212. package/lib/module/web/components/MapView.js.map +1 -1
  213. package/lib/module/web/index.js.map +1 -1
  214. package/lib/module/web/utils/Logger.js +3 -7
  215. package/lib/module/web/utils/Logger.js.map +1 -1
  216. package/lib/typescript/components/Camera.d.ts +4 -2
  217. package/lib/typescript/components/Camera.d.ts.map +1 -1
  218. package/lib/typescript/components/Images.d.ts +57 -0
  219. package/lib/typescript/components/Images.d.ts.map +1 -0
  220. package/lib/typescript/modules/location/locationManager.d.ts +87 -0
  221. package/lib/typescript/modules/location/locationManager.d.ts.map +1 -0
  222. package/lib/typescript/utils/styleMap.d.ts +2 -2
  223. package/package.json +1 -1
  224. package/rnmapbox-maps.podspec +1 -1
  225. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/location/UserTrackingMode.java +0 -54
  226. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/components/mapview/helpers/CameraChangeTracker.java +0 -37
  227. package/android/rctmgl/src/main/java-v10/com/mapbox/rctmgl/location/UserLocationVerticalAlignment.java +0 -7
  228. package/javascript/components/Images.js +0 -118
@@ -107,57 +107,67 @@ open class RCTMGLMapComponentBase : UIView, RCTMGLMapComponent {
107
107
  class RCTMGLCamera : RCTMGLMapComponentBase, LocationConsumer {
108
108
  var cameraAnimator: BasicCameraAnimator?
109
109
  let cameraUpdateQueue = CameraUpdateQueue()
110
-
110
+
111
111
  // MARK: React properties
112
112
 
113
113
  @objc var animationDuration: NSNumber?
114
+
114
115
  @objc var animationMode: NSString?
116
+
115
117
  @objc var defaultStop: [String: Any]?
116
- @objc var followHeading: NSNumber? {
118
+
119
+ @objc var followUserLocation : Bool = false {
117
120
  didSet {
118
121
  _updateCameraFromTrackingMode()
119
122
  }
120
123
  }
121
- @objc var followPitch: NSNumber? {
124
+
125
+ @objc var followUserMode: String? {
122
126
  didSet {
123
127
  _updateCameraFromTrackingMode()
124
128
  }
125
129
  }
126
-
127
- @objc var followUserMode: String? {
130
+
131
+ @objc var followZoomLevel: NSNumber? {
128
132
  didSet {
129
133
  _updateCameraFromTrackingMode()
130
134
  }
131
135
  }
132
-
133
- @objc var followUserLocation : Bool = false {
136
+
137
+ @objc var followPitch: NSNumber? {
134
138
  didSet {
135
139
  _updateCameraFromTrackingMode()
136
140
  }
137
141
  }
138
-
139
- @objc var followZoomLevel: NSNumber? {
142
+
143
+ @objc var followHeading: NSNumber? {
140
144
  didSet {
141
145
  _updateCameraFromTrackingMode()
142
146
  }
143
147
  }
144
-
148
+
149
+ @objc var followPadding: NSDictionary? {
150
+ didSet {
151
+ _updateCameraFromTrackingMode()
152
+ }
153
+ }
154
+
145
155
  @objc var maxZoomLevel: NSNumber? {
146
156
  didSet { _updateMaxBounds() }
147
157
  }
148
-
158
+
149
159
  @objc var minZoomLevel: NSNumber? {
150
160
  didSet { _updateMaxBounds() }
151
161
  }
152
-
162
+
153
163
  @objc var onUserTrackingModeChange: RCTBubblingEventBlock? = nil
154
-
164
+
155
165
  @objc var stop: [String: Any]? {
156
166
  didSet {
157
167
  _updateCamera()
158
168
  }
159
169
  }
160
-
170
+
161
171
  @objc var maxBounds: String? {
162
172
  didSet {
163
173
  if let maxBounds = maxBounds {
@@ -288,22 +298,23 @@ class RCTMGLCamera : RCTMGLMapComponentBase, LocationConsumer {
288
298
  followOptions.bearing = nil
289
299
  trackingModeChanged = true
290
300
  }
301
+
291
302
  if let onUserTrackingModeChange = self.onUserTrackingModeChange {
292
303
  if (trackingModeChanged) {
293
304
  let event = RCTMGLEvent(type: .onUserTrackingModeChange, payload: ["followUserMode": self.followUserMode ?? "normal", "followUserLocation": self.followUserLocation])
294
305
  onUserTrackingModeChange(event.toJSON())
295
306
  }
296
307
  }
308
+
297
309
  var _camera = CameraOptions()
298
- if let followHeading = self.followHeading as? CGFloat {
299
- if (followHeading >= 0.0) {
300
- _camera.bearing = followHeading
301
- }
302
- } else if let stopHeading = self.stop?["heading"] as? CGFloat {
303
- if (stopHeading >= 0.0) {
304
- _camera.bearing = stopHeading
310
+
311
+ if let zoom = self.followZoomLevel as? CGFloat {
312
+ if (zoom >= 0.0) {
313
+ _camera.zoom = zoom
314
+ followOptions.zoom = zoom
305
315
  }
306
316
  }
317
+
307
318
  if let followPitch = self.followPitch as? CGFloat {
308
319
  if (followPitch >= 0.0) {
309
320
  _camera.pitch = followPitch
@@ -317,14 +328,29 @@ class RCTMGLCamera : RCTMGLMapComponentBase, LocationConsumer {
317
328
  } else {
318
329
  followOptions.pitch = nil
319
330
  }
320
-
321
- if let zoom = self.followZoomLevel as? CGFloat {
322
- if (zoom >= 0.0) {
323
- _camera.zoom = zoom
324
- followOptions.zoom = zoom
331
+
332
+ if let followHeading = self.followHeading as? CGFloat {
333
+ if (followHeading >= 0.0) {
334
+ _camera.bearing = followHeading
325
335
  }
336
+ } else if let stopHeading = self.stop?["heading"] as? CGFloat {
337
+ if (stopHeading >= 0.0) {
338
+ _camera.bearing = stopHeading
339
+ }
340
+ }
341
+
342
+ if let padding = self.followPadding {
343
+ let edgeInsets = UIEdgeInsets(
344
+ top: padding["paddingTop"] as? Double ?? 0,
345
+ left: padding["paddingLeft"] as? Double ?? 0,
346
+ bottom: padding["paddingBottom"] as? Double ?? 0,
347
+ right: padding["paddingRight"] as? Double ?? 0
348
+ )
349
+ followOptions.padding = edgeInsets
326
350
  }
351
+
327
352
  let followState = map.viewport.makeFollowPuckViewportState(options: followOptions)
353
+
328
354
  map.viewport.transition(to: followState)
329
355
  map.viewport.addStatusObserver(self)
330
356
  map.mapboxMap.setCamera(to: _camera)
@@ -8,11 +8,14 @@ RCT_EXPORT_VIEW_PROPERTY(maxBounds, NSString)
8
8
  RCT_EXPORT_VIEW_PROPERTY(animationDuration, NSNumber)
9
9
  RCT_EXPORT_VIEW_PROPERTY(animationMode, NSString)
10
10
  RCT_EXPORT_VIEW_PROPERTY(defaultStop, NSDictionary)
11
- RCT_EXPORT_VIEW_PROPERTY(followHeading, NSNumber)
12
- RCT_EXPORT_VIEW_PROPERTY(followPitch, NSNumber)
11
+
13
12
  RCT_EXPORT_VIEW_PROPERTY(followUserLocation, BOOL)
14
13
  RCT_EXPORT_VIEW_PROPERTY(followUserMode, NSString)
15
14
  RCT_EXPORT_VIEW_PROPERTY(followZoomLevel, NSNumber)
15
+ RCT_EXPORT_VIEW_PROPERTY(followPitch, NSNumber)
16
+ RCT_EXPORT_VIEW_PROPERTY(followHeading, NSNumber)
17
+ RCT_EXPORT_VIEW_PROPERTY(followPadding, NSDictionary)
18
+
16
19
  RCT_EXPORT_VIEW_PROPERTY(maxZoomLevel, NSNumber)
17
20
  RCT_EXPORT_VIEW_PROPERTY(minZoomLevel, NSNumber)
18
21
  RCT_EXPORT_VIEW_PROPERTY(onUserTrackingModeChange, RCTBubblingEventBlock)
@@ -12,7 +12,14 @@ class RCTMGLImages : UIView, RCTMGLMapComponent {
12
12
  var images : [String:Any] = [:]
13
13
 
14
14
  @objc
15
- var nativeImages: [String] = []
15
+ var nativeImages: [Any] = [] {
16
+ didSet {
17
+ nativeImageInfos = nativeImages.compactMap { decodeImage($0) }
18
+ }
19
+ };
20
+
21
+ typealias NativeImageInfo = (name:String, sdf: Bool, stretchX:[(from:Float, to:Float)], stretchY:[(from:Float, to:Float)]);
22
+ var nativeImageInfos: [NativeImageInfo] = []
16
23
 
17
24
  // MARK: - RCTMGLMapComponent
18
25
 
@@ -24,7 +31,7 @@ class RCTMGLImages : UIView, RCTMGLMapComponent {
24
31
  map.images.append(self)
25
32
  map.setupEvents()
26
33
 
27
- self.addNativeImages(style: style, nativeImages: nativeImages)
34
+ self.addNativeImages(style: style, nativeImages: nativeImageInfos)
28
35
  self.addRemoteImages(style: style, remoteImages: images)
29
36
  }
30
37
 
@@ -57,8 +64,8 @@ class RCTMGLImages : UIView, RCTMGLMapComponent {
57
64
  }
58
65
 
59
66
  public func addMissingImageToStyle(style: Style, imageName: String) -> Bool {
60
- if nativeImages.contains(imageName) {
61
- addNativeImages(style: style, nativeImages: [imageName])
67
+ if let nativeImage = nativeImageInfos.first(where: { $0.name == imageName }) {
68
+ addNativeImages(style: style, nativeImages: [nativeImage])
62
69
  return true
63
70
  }
64
71
 
@@ -77,11 +84,50 @@ class RCTMGLImages : UIView, RCTMGLMapComponent {
77
84
  }
78
85
  }
79
86
 
80
- func addNativeImages(style: Style, nativeImages: [String]) {
81
- for imageName in nativeImages {
82
- if style.styleManager.getStyleImage(forImageId: imageName) == nil {
87
+ func decodeImage(_ imageNameOrInfo: Any) -> NativeImageInfo? {
88
+ if let imageName = imageNameOrInfo as? String {
89
+ return (name: imageName, sdf: false, stretchX:[],stretchY:[])
90
+ } else if let imageInfo = imageNameOrInfo as? [String:Any] {
91
+ guard let name = imageInfo["name"] as? String else {
92
+ Logger.log(level: .warn, message: "NativeImage: \(imageInfo) has no name key")
93
+ return nil
94
+ }
95
+ var sdf = false
96
+ var stretchX : [(from:Float, to:Float)] = []
97
+ var stretchY : [(from:Float, to:Float)] = []
98
+ if let sdfV = imageInfo["sdf"] as? NSNumber {
99
+ sdf = sdfV.boolValue
100
+ }
101
+
102
+ if let stretchXV = imageInfo["stretchX"] as? [[NSNumber]] {
103
+ stretchX = stretchXV.map{ pair in
104
+ return (from: pair[0].floatValue, to: pair[1].floatValue)
105
+ }
106
+ }
107
+
108
+ if let stretchYV = imageInfo["stretchY"] as? [[NSNumber]] {
109
+ stretchY = stretchYV.map{ pair in
110
+ return (from: pair[0].floatValue, to: pair[1].floatValue)
111
+ }
112
+ }
113
+
114
+ return (name: name, sdf: sdf, stretchX:stretchX,stretchY:stretchY)
115
+ } else {
116
+ Logger.log(level: .warn, message: "RCTMGLImage.nativeImage, unexpected image: \(imageNameOrInfo)")
117
+ return nil
118
+ }
119
+ }
120
+
121
+ func addNativeImages(style: Style, nativeImages: [NativeImageInfo]) {
122
+ for imageInfo in nativeImages {
123
+ let imageName = imageInfo.name
124
+ if style.styleManager.getStyleImage(forImageId: imageInfo.name) == nil {
83
125
  if let image = UIImage(named: imageName) {
84
- try! style.addImage(image, id: imageName, stretchX: [], stretchY: [])
126
+ logged("RCTMGLImage.addNativeImage: \(imageName)") {
127
+ try style.addImage(image, id: imageName, sdf: imageInfo.sdf,
128
+ stretchX: imageInfo.stretchX.map { v in ImageStretches(first: v.from, second: v.to) },
129
+ stretchY: imageInfo.stretchY.map { v in ImageStretches(first: v.from, second: v.to) } )
130
+ }
85
131
  } else {
86
132
  Logger.log(level:.error, message: "Cannot find nativeImage named \(imageName)")
87
133
  }
package/ios/install.md CHANGED
@@ -60,7 +60,7 @@ You can also override the version to use. *Warning:* if you set a version, then
60
60
 
61
61
  ```ruby
62
62
  # Warning: only for advanced use cases, only do this if you know what you're doing.
63
- # $RNMapboxMapsVersion = '~> 10.11.0'
63
+ # $RNMapboxMapsVersion = '~> 10.12.0'
64
64
  ```
65
65
 
66
66
  You will need to authorize your download of the Maps SDK with a secret access token with the `DOWNLOADS:READ` scope. This [guide](https://docs.mapbox.com/ios/maps/guides/install/#configure-credentials) explains how to configure the secret token under section `Configure your secret token`.
@@ -122,16 +122,18 @@ export type CameraStop = {
122
122
  };
123
123
 
124
124
  export type CameraFollowConfig = {
125
- /** The mode used to track the user location on the map. */
126
- followUserMode?: UserTrackingMode;
127
125
  /** Whether the map orientation follows the user location. */
128
126
  followUserLocation?: boolean;
127
+ /** The mode used to track the user location on the map. */
128
+ followUserMode?: UserTrackingMode;
129
129
  /** The zoom level used when following the user location. */
130
130
  followZoomLevel?: number;
131
131
  /** The pitch used when following the user location. */
132
132
  followPitch?: number;
133
133
  /** The heading used when following the user location. */
134
134
  followHeading?: number;
135
+ /** The padding used to position the user location when following. */
136
+ followPadding?: Partial<CameraPadding>;
135
137
  };
136
138
 
137
139
  export type CameraMinMaxConfig = {
@@ -232,6 +234,7 @@ export const Camera = memo(
232
234
  followZoomLevel,
233
235
  followPitch,
234
236
  followHeading,
237
+ followPadding,
235
238
  defaultSettings,
236
239
  allowUpdates = true,
237
240
  onUserTrackingModeChange,
@@ -526,9 +529,10 @@ export const Camera = memo(
526
529
  defaultStop={nativeDefaultStop}
527
530
  followUserLocation={followUserLocation}
528
531
  followUserMode={followUserMode}
532
+ followZoomLevel={followZoomLevel}
529
533
  followPitch={followPitch}
530
534
  followHeading={followHeading}
531
- followZoomLevel={followZoomLevel}
535
+ followPadding={followPadding}
532
536
  minZoomLevel={minZoomLevel}
533
537
  maxZoomLevel={maxZoomLevel}
534
538
  maxBounds={nativeMaxBounds}
@@ -0,0 +1,133 @@
1
+ import React from 'react';
2
+ import { requireNativeComponent, Image } from 'react-native';
3
+ import { ImageSourcePropType, ImageResolvedAssetSource } from 'react-native';
4
+
5
+ import { ShapeSource } from './ShapeSource';
6
+
7
+ export const NATIVE_MODULE_NAME = 'RCTMGLImages';
8
+
9
+ export type RNMBEvent<PayloadType = { [key: string]: string }> = {
10
+ payload: PayloadType;
11
+ type: string;
12
+ };
13
+
14
+ function _isUrlOrPath(value: string | ImageSourcePropType): value is string {
15
+ return (
16
+ (typeof value === 'string' || value instanceof String) &&
17
+ (value.startsWith('file://') ||
18
+ value.startsWith('http://') ||
19
+ value.startsWith('https://') ||
20
+ value.startsWith('data:') ||
21
+ value.startsWith('asset://') ||
22
+ value.startsWith('/'))
23
+ );
24
+ }
25
+
26
+ type NativeImage =
27
+ | string
28
+ | {
29
+ name: string;
30
+ sdf?: boolean;
31
+ strechX: [number, number][];
32
+ streacY: [number, number][];
33
+ };
34
+
35
+ interface Props {
36
+ /**
37
+ * Specifies the external images in key-value pairs required for the shape source.
38
+ * Keys are names - see iconImage expressions, values can be either urls-s objects
39
+ * with format {uri: 'http://...'}` or `require('image.png')` or `import 'image.png'`
40
+ */
41
+ images?: { [key: string]: ImageSourcePropType };
42
+
43
+ /**
44
+ * If you have an asset under Image.xcassets on iOS and the drawables directory on android
45
+ * you can specify an array of string names with assets as the key `['pin']`.
46
+ * Additionally object with keys sdf, and strechX, strechY is supported for [SDF icons](https://docs.mapbox.com/help/troubleshooting/using-recolorable-images-in-mapbox-maps/)
47
+ */
48
+ nativeAssetImages?: NativeImage[];
49
+
50
+ /**
51
+ * Gets called when a Layer is trying to render an image whose key is not present in
52
+ * any of the `Images` component of the Map.
53
+ */
54
+ onImageMissing?: (imageKey: string) => void;
55
+
56
+ id?: string;
57
+ children?: React.ReactElement;
58
+ }
59
+
60
+ /**
61
+ * Images defines the images used in Symbol etc. layers.
62
+ */
63
+ class Images extends React.Component<Props> {
64
+ static NATIVE_ASSETS_KEY = 'assets';
65
+
66
+ _getImages() {
67
+ if (!this.props.images && !this.props.nativeAssetImages) {
68
+ return {};
69
+ }
70
+
71
+ const images: { [key: string]: string | ImageResolvedAssetSource } = {};
72
+ let nativeImages: NativeImage[] = [];
73
+
74
+ if (this.props.images) {
75
+ const imageNames = Object.keys(this.props.images);
76
+ for (const imageName of imageNames) {
77
+ const value = this.props.images[imageName];
78
+ if (
79
+ imageName === ShapeSource.NATIVE_ASSETS_KEY &&
80
+ Array.isArray(value)
81
+ ) {
82
+ console.error(
83
+ `Use of ${ShapeSource.NATIVE_ASSETS_KEY} in Images#images is not supported use Images#nativeAssetImages`,
84
+ );
85
+ } else if (_isUrlOrPath(value)) {
86
+ images[imageName] = value;
87
+ } else {
88
+ const res = Image.resolveAssetSource(value);
89
+ if (res && res.uri) {
90
+ images[imageName] = res;
91
+ }
92
+ }
93
+ }
94
+ }
95
+
96
+ if (this.props.nativeAssetImages) {
97
+ nativeImages = this.props.nativeAssetImages;
98
+ }
99
+
100
+ return {
101
+ images,
102
+ nativeImages,
103
+ };
104
+ }
105
+
106
+ _onImageMissing(event: React.SyntheticEvent<Element, RNMBEvent>) {
107
+ if (this.props.onImageMissing) {
108
+ this.props.onImageMissing(event.nativeEvent.payload.imageKey);
109
+ }
110
+ }
111
+
112
+ render() {
113
+ const props = {
114
+ id: this.props.id,
115
+ hasOnImageMissing: !!this.props.onImageMissing,
116
+ onImageMissing: this._onImageMissing.bind(this),
117
+ ...this._getImages(),
118
+ };
119
+
120
+ return <RCTMGLImages {...props}>{this.props.children}</RCTMGLImages>;
121
+ }
122
+ }
123
+
124
+ type NativeProps = {
125
+ hasOnImageMissing: boolean;
126
+ onImageMissing?: (event: React.SyntheticEvent<Element, RNMBEvent>) => void;
127
+ images?: { [key: string]: string | ImageResolvedAssetSource };
128
+ nativeImages?: NativeImage[];
129
+ };
130
+
131
+ const RCTMGLImages = requireNativeComponent<NativeProps>(NATIVE_MODULE_NAME);
132
+
133
+ export default Images;
@@ -1,4 +1,11 @@
1
- import { NativeModules, NativeEventEmitter, AppState } from 'react-native';
1
+ import {
2
+ NativeModules,
3
+ NativeEventEmitter,
4
+ AppState,
5
+ NativeEventSubscription,
6
+ EmitterSubscription,
7
+ type AppStateStatus,
8
+ } from 'react-native';
2
9
 
3
10
  const MapboxGL = NativeModules.MGLModule;
4
11
  const MapboxGLLocationManager = NativeModules.MGLLocationModule;
@@ -7,13 +14,76 @@ export const LocationModuleEventEmitter = new NativeEventEmitter(
7
14
  MapboxGLLocationManager,
8
15
  );
9
16
 
17
+ /**
18
+ * Location sent by locationManager
19
+ */
20
+ interface Location {
21
+ coords: Coordinates;
22
+ timestamp?: number;
23
+ }
24
+
25
+ /**
26
+ * Coorinates sent by locationManager
27
+ */
28
+ interface Coordinates {
29
+ /**
30
+ * The heading (measured in degrees) relative to true north.
31
+ * Heading is used to describe the direction the device is pointing to (the value of the compass).
32
+ * Note that on Android this is incorrectly reporting the course value as mentioned in issue https://github.com/rnmapbox/maps/issues/1213
33
+ * and will be corrected in a future update.
34
+ */
35
+ heading?: number;
36
+
37
+ /**
38
+ * The direction in which the device is traveling, measured in degrees and relative to due north.
39
+ * The course refers to the direction the device is actually moving (not the same as heading).
40
+ */
41
+ course?: number;
42
+
43
+ /**
44
+ * The instantaneous speed of the device, measured in meters per second.
45
+ */
46
+ speed?: number;
47
+
48
+ /**
49
+ * The latitude in degrees.
50
+ */
51
+ latitude: number;
52
+
53
+ /**
54
+ * The longitude in degrees.
55
+ */
56
+ longitude: number;
57
+
58
+ /**
59
+ * The radius of uncertainty for the location, measured in meters.
60
+ */
61
+ accuracy?: number;
62
+
63
+ /**
64
+ * The altitude, measured in meters.
65
+ */
66
+ altitude?: number;
67
+ }
68
+
69
+ /**
70
+ * LocationManager is a singleton, see `locationManager`
71
+ */
10
72
  class LocationManager {
73
+ _listeners: ((location: Location) => void)[];
74
+ _lastKnownLocation: Location | null;
75
+ _isListening: boolean;
76
+ _requestsAlwaysUse: boolean;
77
+ subscription: EmitterSubscription | null;
78
+ _appStateListener: NativeEventSubscription;
79
+ _minDisplacement?: number;
80
+
11
81
  constructor() {
12
82
  this._listeners = [];
13
83
  this._lastKnownLocation = null;
14
84
  this._isListening = false;
15
85
  this._requestsAlwaysUse = false;
16
- this.onUpdate = this.onUpdate.bind(this);
86
+ this._onUpdate = this._onUpdate.bind(this);
17
87
  this.subscription = null;
18
88
 
19
89
  this._appStateListener = AppState.addEventListener(
@@ -45,7 +115,7 @@ class LocationManager {
45
115
  return this._lastKnownLocation;
46
116
  }
47
117
 
48
- addListener(listener) {
118
+ addListener(listener: (location: Location) => void) {
49
119
  if (!this._isListening) {
50
120
  this.start();
51
121
  }
@@ -58,7 +128,7 @@ class LocationManager {
58
128
  }
59
129
  }
60
130
 
61
- removeListener(listener) {
131
+ removeListener(listener: (location: Location) => void) {
62
132
  this._listeners = this._listeners.filter((l) => l !== listener);
63
133
  if (this._listeners.length === 0) {
64
134
  this.stop();
@@ -70,7 +140,7 @@ class LocationManager {
70
140
  this.stop();
71
141
  }
72
142
 
73
- _handleAppStateChange(appState) {
143
+ _handleAppStateChange(appState: AppStateStatus) {
74
144
  if (!this._requestsAlwaysUse) {
75
145
  if (appState === 'background') {
76
146
  this.stop();
@@ -83,23 +153,23 @@ class LocationManager {
83
153
  }
84
154
 
85
155
  start(displacement = -1) {
156
+ let validDisplacement = 1;
86
157
  if (
87
158
  displacement === -1 ||
88
159
  displacement === null ||
89
160
  displacement === undefined
90
161
  ) {
91
- displacement = this._minDisplacement;
92
- }
93
- if (displacement == null) {
94
- displacement = -1;
162
+ validDisplacement = this._minDisplacement || -1;
163
+ } else {
164
+ validDisplacement = displacement;
95
165
  }
96
166
 
97
167
  if (!this._isListening) {
98
- MapboxGLLocationManager.start(displacement);
168
+ MapboxGLLocationManager.start(validDisplacement);
99
169
 
100
170
  this.subscription = LocationModuleEventEmitter.addListener(
101
171
  MapboxGL.LocationCallbackName.Update,
102
- this.onUpdate,
172
+ this._onUpdate,
103
173
  );
104
174
 
105
175
  this._isListening = true;
@@ -109,36 +179,39 @@ class LocationManager {
109
179
  stop() {
110
180
  MapboxGLLocationManager.stop();
111
181
 
112
- if (this._isListening) {
182
+ if (this._isListening && this.subscription) {
113
183
  this.subscription.remove();
114
184
  }
115
185
 
116
186
  this._isListening = false;
117
187
  }
118
188
 
119
- setMinDisplacement(minDisplacement) {
189
+ setMinDisplacement(minDisplacement: number) {
120
190
  this._minDisplacement = minDisplacement;
121
191
  MapboxGLLocationManager.setMinDisplacement(minDisplacement);
122
192
  }
123
193
 
124
- setRequestsAlwaysUse(requestsAlwaysUse) {
194
+ setRequestsAlwaysUse(requestsAlwaysUse: boolean) {
125
195
  MapboxGLLocationManager.setRequestsAlwaysUse(requestsAlwaysUse);
126
196
  this._requestsAlwaysUse = requestsAlwaysUse;
127
197
  }
128
198
 
129
- onUpdate(location) {
199
+ _onUpdate(location: Location) {
130
200
  this._lastKnownLocation = location;
131
201
 
132
202
  this._listeners.forEach((l) => l(location));
133
203
  }
134
204
 
135
- _simulateHeading(changesPerSecond, increment) {
205
+ /**
206
+ * simulates location updates, experimental [V10, iOS only]
207
+ */
208
+ _simulateHeading(changesPerSecond: number, increment: number) {
136
209
  MapboxGLLocationManager.simulateHeading(changesPerSecond, increment);
137
210
  }
138
211
 
139
212
  /**
140
213
  * Sets the period at which location events will be sent over the React Native bridge.
141
- * The default is 0, aka no limit
214
+ * The default is 0, aka no limit. [V10, iOS only]
142
215
  *
143
216
  * @example
144
217
  * locationManager.setLocationEventThrottle(500);
@@ -146,7 +219,7 @@ class LocationManager {
146
219
  * @param {Number} throttleValue event throttle value in ms.
147
220
  * @return {void}
148
221
  */
149
- setLocationEventThrottle(throttleValue) {
222
+ setLocationEventThrottle(throttleValue: number) {
150
223
  MapboxGLLocationManager.setLocationEventThrottle(throttleValue);
151
224
  }
152
225
  }
@@ -113,7 +113,7 @@ type ExpressionField =
113
113
  | ExpressionField[]
114
114
  | { [key: string]: ExpressionField };
115
115
 
116
- export type Expression = [ExpressionName, ...ExpressionField[]];
116
+ export type Expression = readonly [ExpressionName, ...ExpressionField[]];
117
117
 
118
118
  export type FilterExpression = Expression;
119
119
 
@@ -902,7 +902,7 @@ export interface SymbolLayerStyleProps {
902
902
  */
903
903
  iconOpacityTransition?: Transition;
904
904
  /**
905
- * The color of the icon. This can only be used with [SDF icons](/help/troubleshooting/usingRecolorableImagesInMapboxMaps/).
905
+ * The color of the icon. This can only be used with [SDF icons](https://docs.mapbox.com/help/troubleshooting/using-recolorable-images-in-mapbox-maps/).
906
906
  *
907
907
  * @requires iconImage
908
908
  */
@@ -913,7 +913,7 @@ export interface SymbolLayerStyleProps {
913
913
  */
914
914
  iconColorTransition?: Transition;
915
915
  /**
916
- * The color of the icon's halo. Icon halos can only be used with [SDF icons](/help/troubleshooting/usingRecolorableImagesInMapboxMaps/).
916
+ * The color of the icon's halo. Icon halos can only be used with [SDF icons](https://docs.mapbox.com/help/troubleshooting/using-recolorable-images-in-mapbox-maps/).
917
917
  *
918
918
  * @requires iconImage
919
919
  */
@@ -665,7 +665,7 @@ export const SymbolLayerStyleProp = PropTypes.shape({
665
665
  }),
666
666
 
667
667
  /**
668
- * The color of the icon. This can only be used with [SDF icons](/help/troubleshooting/usingRecolorableImagesInMapboxMaps/).
668
+ * The color of the icon. This can only be used with [SDF icons](https://docs.mapbox.com/help/troubleshooting/using-recolorable-images-in-mapbox-maps/).
669
669
  *
670
670
  * @requires iconImage
671
671
  */
@@ -680,7 +680,7 @@ export const SymbolLayerStyleProp = PropTypes.shape({
680
680
  }),
681
681
 
682
682
  /**
683
- * The color of the icon's halo. Icon halos can only be used with [SDF icons](/help/troubleshooting/usingRecolorableImagesInMapboxMaps/).
683
+ * The color of the icon's halo. Icon halos can only be used with [SDF icons](https://docs.mapbox.com/help/troubleshooting/using-recolorable-images-in-mapbox-maps/).
684
684
  *
685
685
  * @requires iconImage
686
686
  */