@maydon_tech/react-native-nitro-maps 0.1.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 (283) hide show
  1. package/LICENSE +20 -0
  2. package/NitroMap.podspec +42 -0
  3. package/README.md +172 -0
  4. package/android/CMakeLists.txt +27 -0
  5. package/android/build.gradle +141 -0
  6. package/android/gradle.properties +5 -0
  7. package/android/src/main/AndroidManifest.xml +3 -0
  8. package/android/src/main/cpp/cpp-adapter.cpp +6 -0
  9. package/android/src/main/java/com/margelo/nitro/nitromap/ClusterIconGenerator.kt +108 -0
  10. package/android/src/main/java/com/margelo/nitro/nitromap/ColorUtils.kt +63 -0
  11. package/android/src/main/java/com/margelo/nitro/nitromap/HybridNitroMap.kt +408 -0
  12. package/android/src/main/java/com/margelo/nitro/nitromap/HybridNitroMapConfig.kt +68 -0
  13. package/android/src/main/java/com/margelo/nitro/nitromap/MarkerIconCache.kt +176 -0
  14. package/android/src/main/java/com/margelo/nitro/nitromap/MarkerIconFactory.kt +252 -0
  15. package/android/src/main/java/com/margelo/nitro/nitromap/NitroMapPackage.kt +33 -0
  16. package/android/src/main/java/com/margelo/nitro/nitromap/clustering/NitroClusterEngine.kt +252 -0
  17. package/android/src/main/java/com/margelo/nitro/nitromap/clustering/QuadTree.kt +195 -0
  18. package/android/src/main/java/com/margelo/nitro/nitromap/providers/GoogleMapProvider.kt +912 -0
  19. package/android/src/main/java/com/margelo/nitro/nitromap/providers/MapProviderInterface.kt +70 -0
  20. package/cpp/ClusterEngine.hpp +411 -0
  21. package/cpp/KDBush.hpp +238 -0
  22. package/cpp/QuadTree.hpp +246 -0
  23. package/ios/Clustering/ClusterEngineWrapper.h +58 -0
  24. package/ios/Clustering/ClusterEngineWrapper.mm +142 -0
  25. package/ios/Clustering/ClusterIconRenderer.swift +80 -0
  26. package/ios/Clustering/NitroClusterEngine.swift +117 -0
  27. package/ios/Clustering/NitroClusterIconGenerator.swift +35 -0
  28. package/ios/MarkerRenderer/MarkerIconFactory.swift +322 -0
  29. package/ios/MarkerRenderer/PriceMarkerRenderer.swift +140 -0
  30. package/ios/NitroMap.swift +332 -0
  31. package/ios/NitroMapConfig/HybridNitroMapConfig.swift +33 -0
  32. package/ios/Providers/GoogleMapDelegate.swift +310 -0
  33. package/ios/Providers/GoogleMapProvider+Camera.swift +164 -0
  34. package/ios/Providers/GoogleMapProvider.swift +924 -0
  35. package/ios/Providers/MapProviderProtocol.swift +78 -0
  36. package/ios/Shared/ClusterConfig+Factory.swift +58 -0
  37. package/ios/Shared/ClusteringManager.swift +211 -0
  38. package/ios/Shared/MapStyleProvider.swift +135 -0
  39. package/ios/Shared/MarkerSelectionHandler.swift +116 -0
  40. package/ios/Utils/ColorValueExtension.swift +54 -0
  41. package/lib/module/components/ImageMarker.js +146 -0
  42. package/lib/module/components/ImageMarker.js.map +1 -0
  43. package/lib/module/components/NitroMap.js +320 -0
  44. package/lib/module/components/NitroMap.js.map +1 -0
  45. package/lib/module/components/PriceMarker.js +165 -0
  46. package/lib/module/components/PriceMarker.js.map +1 -0
  47. package/lib/module/context/NitroMapContext.js +15 -0
  48. package/lib/module/context/NitroMapContext.js.map +1 -0
  49. package/lib/module/hooks/useNitroMarker.js +104 -0
  50. package/lib/module/hooks/useNitroMarker.js.map +1 -0
  51. package/lib/module/index.js +21 -0
  52. package/lib/module/index.js.map +1 -0
  53. package/lib/module/modules/index.js +4 -0
  54. package/lib/module/modules/index.js.map +1 -0
  55. package/lib/module/modules/module.js +30 -0
  56. package/lib/module/modules/module.js.map +1 -0
  57. package/lib/module/package.json +1 -0
  58. package/lib/module/specs/NitroMap.nitro.js +4 -0
  59. package/lib/module/specs/NitroMap.nitro.js.map +1 -0
  60. package/lib/module/specs/NitroMapConfig.nitro.js +4 -0
  61. package/lib/module/specs/NitroMapConfig.nitro.js.map +1 -0
  62. package/lib/module/types/map.js +2 -0
  63. package/lib/module/types/map.js.map +1 -0
  64. package/lib/module/types/marker.js +4 -0
  65. package/lib/module/types/marker.js.map +1 -0
  66. package/lib/module/utils/colors.js +147 -0
  67. package/lib/module/utils/colors.js.map +1 -0
  68. package/lib/typescript/package.json +1 -0
  69. package/lib/typescript/src/components/ImageMarker.d.ts +70 -0
  70. package/lib/typescript/src/components/ImageMarker.d.ts.map +1 -0
  71. package/lib/typescript/src/components/NitroMap.d.ts +14 -0
  72. package/lib/typescript/src/components/NitroMap.d.ts.map +1 -0
  73. package/lib/typescript/src/components/PriceMarker.d.ts +88 -0
  74. package/lib/typescript/src/components/PriceMarker.d.ts.map +1 -0
  75. package/lib/typescript/src/context/NitroMapContext.d.ts +16 -0
  76. package/lib/typescript/src/context/NitroMapContext.d.ts.map +1 -0
  77. package/lib/typescript/src/hooks/useNitroMarker.d.ts +78 -0
  78. package/lib/typescript/src/hooks/useNitroMarker.d.ts.map +1 -0
  79. package/lib/typescript/src/index.d.ts +12 -0
  80. package/lib/typescript/src/index.d.ts.map +1 -0
  81. package/lib/typescript/src/modules/index.d.ts +2 -0
  82. package/lib/typescript/src/modules/index.d.ts.map +1 -0
  83. package/lib/typescript/src/modules/module.d.ts +22 -0
  84. package/lib/typescript/src/modules/module.d.ts.map +1 -0
  85. package/lib/typescript/src/specs/NitroMap.nitro.d.ts +227 -0
  86. package/lib/typescript/src/specs/NitroMap.nitro.d.ts.map +1 -0
  87. package/lib/typescript/src/specs/NitroMapConfig.nitro.d.ts +10 -0
  88. package/lib/typescript/src/specs/NitroMapConfig.nitro.d.ts.map +1 -0
  89. package/lib/typescript/src/types/map.d.ts +154 -0
  90. package/lib/typescript/src/types/map.d.ts.map +1 -0
  91. package/lib/typescript/src/types/marker.d.ts +248 -0
  92. package/lib/typescript/src/types/marker.d.ts.map +1 -0
  93. package/lib/typescript/src/utils/colors.d.ts +82 -0
  94. package/lib/typescript/src/utils/colors.d.ts.map +1 -0
  95. package/nitro.json +21 -0
  96. package/nitrogen/generated/android/c++/JCamera.hpp +74 -0
  97. package/nitrogen/generated/android/c++/JClusterAnimationStyle.hpp +68 -0
  98. package/nitrogen/generated/android/c++/JClusterConfig.hpp +121 -0
  99. package/nitrogen/generated/android/c++/JClusterPressEvent.hpp +86 -0
  100. package/nitrogen/generated/android/c++/JClusterStrategy.hpp +59 -0
  101. package/nitrogen/generated/android/c++/JColorValue.cpp +26 -0
  102. package/nitrogen/generated/android/c++/JColorValue.hpp +70 -0
  103. package/nitrogen/generated/android/c++/JCoordinate.hpp +61 -0
  104. package/nitrogen/generated/android/c++/JEdgePadding.hpp +69 -0
  105. package/nitrogen/generated/android/c++/JFunc_void.hpp +75 -0
  106. package/nitrogen/generated/android/c++/JFunc_void_ClusterPressEvent.hpp +81 -0
  107. package/nitrogen/generated/android/c++/JFunc_void_MapError.hpp +78 -0
  108. package/nitrogen/generated/android/c++/JFunc_void_MapPressEvent.hpp +81 -0
  109. package/nitrogen/generated/android/c++/JFunc_void_MarkerDragEvent.hpp +80 -0
  110. package/nitrogen/generated/android/c++/JFunc_void_MarkerPressEvent.hpp +80 -0
  111. package/nitrogen/generated/android/c++/JFunc_void_RegionChangeEvent.hpp +79 -0
  112. package/nitrogen/generated/android/c++/JHybridNitroMapConfigSpec.cpp +59 -0
  113. package/nitrogen/generated/android/c++/JHybridNitroMapConfigSpec.hpp +66 -0
  114. package/nitrogen/generated/android/c++/JHybridNitroMapSpec.cpp +593 -0
  115. package/nitrogen/generated/android/c++/JHybridNitroMapSpec.hpp +125 -0
  116. package/nitrogen/generated/android/c++/JImageMarkerConfig.hpp +86 -0
  117. package/nitrogen/generated/android/c++/JMapBoundaries.hpp +62 -0
  118. package/nitrogen/generated/android/c++/JMapError.hpp +61 -0
  119. package/nitrogen/generated/android/c++/JMapPressEvent.hpp +64 -0
  120. package/nitrogen/generated/android/c++/JMapProvider.hpp +62 -0
  121. package/nitrogen/generated/android/c++/JMapStyleElement.hpp +87 -0
  122. package/nitrogen/generated/android/c++/JMapStyler.hpp +78 -0
  123. package/nitrogen/generated/android/c++/JMapType.hpp +62 -0
  124. package/nitrogen/generated/android/c++/JMarkerAnimation.hpp +62 -0
  125. package/nitrogen/generated/android/c++/JMarkerColor.hpp +69 -0
  126. package/nitrogen/generated/android/c++/JMarkerConfig.hpp +77 -0
  127. package/nitrogen/generated/android/c++/JMarkerData.hpp +121 -0
  128. package/nitrogen/generated/android/c++/JMarkerDragEvent.hpp +63 -0
  129. package/nitrogen/generated/android/c++/JMarkerPressEvent.hpp +63 -0
  130. package/nitrogen/generated/android/c++/JMarkerStyle.hpp +62 -0
  131. package/nitrogen/generated/android/c++/JPoint.hpp +61 -0
  132. package/nitrogen/generated/android/c++/JPriceMarkerStyle.hpp +102 -0
  133. package/nitrogen/generated/android/c++/JRegion.hpp +69 -0
  134. package/nitrogen/generated/android/c++/JRegionChangeEvent.hpp +62 -0
  135. package/nitrogen/generated/android/c++/JVariant_String_MarkerColor.cpp +26 -0
  136. package/nitrogen/generated/android/c++/JVariant_String_MarkerColor.hpp +70 -0
  137. package/nitrogen/generated/android/c++/views/JHybridNitroMapStateUpdater.cpp +144 -0
  138. package/nitrogen/generated/android/c++/views/JHybridNitroMapStateUpdater.hpp +49 -0
  139. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Camera.kt +50 -0
  140. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/ClusterAnimationStyle.kt +24 -0
  141. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/ClusterConfig.kt +80 -0
  142. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/ClusterPressEvent.kt +44 -0
  143. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/ClusterStrategy.kt +21 -0
  144. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/ColorValue.kt +59 -0
  145. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Coordinate.kt +41 -0
  146. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/EdgePadding.kt +47 -0
  147. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Func_void.kt +80 -0
  148. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Func_void_ClusterPressEvent.kt +80 -0
  149. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Func_void_MapError.kt +80 -0
  150. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Func_void_MapPressEvent.kt +80 -0
  151. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Func_void_MarkerDragEvent.kt +80 -0
  152. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Func_void_MarkerPressEvent.kt +80 -0
  153. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Func_void_RegionChangeEvent.kt +80 -0
  154. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/HybridNitroMapConfigSpec.kt +61 -0
  155. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/HybridNitroMapSpec.kt +342 -0
  156. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/ImageMarkerConfig.kt +56 -0
  157. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MapBoundaries.kt +41 -0
  158. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MapError.kt +41 -0
  159. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MapPressEvent.kt +41 -0
  160. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MapProvider.kt +22 -0
  161. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MapStyleElement.kt +44 -0
  162. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MapStyler.kt +53 -0
  163. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MapType.kt +22 -0
  164. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MarkerAnimation.kt +22 -0
  165. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MarkerColor.kt +47 -0
  166. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MarkerConfig.kt +44 -0
  167. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MarkerData.kt +71 -0
  168. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MarkerDragEvent.kt +41 -0
  169. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MarkerPressEvent.kt +41 -0
  170. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MarkerStyle.kt +22 -0
  171. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Point.kt +41 -0
  172. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/PriceMarkerStyle.kt +68 -0
  173. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Region.kt +47 -0
  174. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/RegionChangeEvent.kt +41 -0
  175. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Variant_String_MarkerColor.kt +59 -0
  176. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/nitromapOnLoad.kt +35 -0
  177. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/views/HybridNitroMapManager.kt +50 -0
  178. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/views/HybridNitroMapStateUpdater.kt +23 -0
  179. package/nitrogen/generated/android/nitromap+autolinking.cmake +87 -0
  180. package/nitrogen/generated/android/nitromap+autolinking.gradle +27 -0
  181. package/nitrogen/generated/android/nitromapOnLoad.cpp +70 -0
  182. package/nitrogen/generated/android/nitromapOnLoad.hpp +25 -0
  183. package/nitrogen/generated/ios/NitroMap+autolinking.rb +60 -0
  184. package/nitrogen/generated/ios/NitroMap-Swift-Cxx-Bridge.cpp +130 -0
  185. package/nitrogen/generated/ios/NitroMap-Swift-Cxx-Bridge.hpp +793 -0
  186. package/nitrogen/generated/ios/NitroMap-Swift-Cxx-Umbrella.hpp +132 -0
  187. package/nitrogen/generated/ios/NitroMapAutolinking.mm +41 -0
  188. package/nitrogen/generated/ios/NitroMapAutolinking.swift +40 -0
  189. package/nitrogen/generated/ios/c++/HybridNitroMapConfigSpecSwift.cpp +11 -0
  190. package/nitrogen/generated/ios/c++/HybridNitroMapConfigSpecSwift.hpp +84 -0
  191. package/nitrogen/generated/ios/c++/HybridNitroMapSpecSwift.cpp +11 -0
  192. package/nitrogen/generated/ios/c++/HybridNitroMapSpecSwift.hpp +410 -0
  193. package/nitrogen/generated/ios/c++/views/HybridNitroMapComponent.mm +206 -0
  194. package/nitrogen/generated/ios/swift/Camera.swift +80 -0
  195. package/nitrogen/generated/ios/swift/ClusterAnimationStyle.swift +52 -0
  196. package/nitrogen/generated/ios/swift/ClusterConfig.swift +268 -0
  197. package/nitrogen/generated/ios/swift/ClusterPressEvent.swift +70 -0
  198. package/nitrogen/generated/ios/swift/ClusterStrategy.swift +40 -0
  199. package/nitrogen/generated/ios/swift/ColorValue.swift +18 -0
  200. package/nitrogen/generated/ios/swift/Coordinate.swift +47 -0
  201. package/nitrogen/generated/ios/swift/EdgePadding.swift +69 -0
  202. package/nitrogen/generated/ios/swift/Func_void.swift +47 -0
  203. package/nitrogen/generated/ios/swift/Func_void_Camera.swift +47 -0
  204. package/nitrogen/generated/ios/swift/Func_void_ClusterPressEvent.swift +47 -0
  205. package/nitrogen/generated/ios/swift/Func_void_MapBoundaries.swift +47 -0
  206. package/nitrogen/generated/ios/swift/Func_void_MapError.swift +47 -0
  207. package/nitrogen/generated/ios/swift/Func_void_MapPressEvent.swift +47 -0
  208. package/nitrogen/generated/ios/swift/Func_void_MarkerDragEvent.swift +47 -0
  209. package/nitrogen/generated/ios/swift/Func_void_MarkerPressEvent.swift +47 -0
  210. package/nitrogen/generated/ios/swift/Func_void_RegionChangeEvent.swift +47 -0
  211. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +47 -0
  212. package/nitrogen/generated/ios/swift/HybridNitroMapConfigSpec.swift +57 -0
  213. package/nitrogen/generated/ios/swift/HybridNitroMapConfigSpec_cxx.swift +142 -0
  214. package/nitrogen/generated/ios/swift/HybridNitroMapSpec.swift +93 -0
  215. package/nitrogen/generated/ios/swift/HybridNitroMapSpec_cxx.swift +953 -0
  216. package/nitrogen/generated/ios/swift/ImageMarkerConfig.swift +166 -0
  217. package/nitrogen/generated/ios/swift/MapBoundaries.swift +47 -0
  218. package/nitrogen/generated/ios/swift/MapError.swift +47 -0
  219. package/nitrogen/generated/ios/swift/MapPressEvent.swift +47 -0
  220. package/nitrogen/generated/ios/swift/MapProvider.swift +44 -0
  221. package/nitrogen/generated/ios/swift/MapStyleElement.swift +108 -0
  222. package/nitrogen/generated/ios/swift/MapStyler.swift +177 -0
  223. package/nitrogen/generated/ios/swift/MapType.swift +44 -0
  224. package/nitrogen/generated/ios/swift/MarkerAnimation.swift +44 -0
  225. package/nitrogen/generated/ios/swift/MarkerColor.swift +69 -0
  226. package/nitrogen/generated/ios/swift/MarkerConfig.swift +82 -0
  227. package/nitrogen/generated/ios/swift/MarkerData.swift +195 -0
  228. package/nitrogen/generated/ios/swift/MarkerDragEvent.swift +47 -0
  229. package/nitrogen/generated/ios/swift/MarkerPressEvent.swift +47 -0
  230. package/nitrogen/generated/ios/swift/MarkerStyle.swift +44 -0
  231. package/nitrogen/generated/ios/swift/Point.swift +47 -0
  232. package/nitrogen/generated/ios/swift/PriceMarkerStyle.swift +374 -0
  233. package/nitrogen/generated/ios/swift/Region.swift +69 -0
  234. package/nitrogen/generated/ios/swift/RegionChangeEvent.swift +47 -0
  235. package/nitrogen/generated/ios/swift/Variant_String_MarkerColor.swift +18 -0
  236. package/nitrogen/generated/shared/c++/Camera.hpp +92 -0
  237. package/nitrogen/generated/shared/c++/ClusterAnimationStyle.hpp +88 -0
  238. package/nitrogen/generated/shared/c++/ClusterConfig.hpp +140 -0
  239. package/nitrogen/generated/shared/c++/ClusterPressEvent.hpp +86 -0
  240. package/nitrogen/generated/shared/c++/ClusterStrategy.hpp +76 -0
  241. package/nitrogen/generated/shared/c++/Coordinate.hpp +79 -0
  242. package/nitrogen/generated/shared/c++/EdgePadding.hpp +87 -0
  243. package/nitrogen/generated/shared/c++/HybridNitroMapConfigSpec.cpp +22 -0
  244. package/nitrogen/generated/shared/c++/HybridNitroMapConfigSpec.hpp +65 -0
  245. package/nitrogen/generated/shared/c++/HybridNitroMapSpec.cpp +82 -0
  246. package/nitrogen/generated/shared/c++/HybridNitroMapSpec.hpp +173 -0
  247. package/nitrogen/generated/shared/c++/ImageMarkerConfig.hpp +103 -0
  248. package/nitrogen/generated/shared/c++/MapBoundaries.hpp +80 -0
  249. package/nitrogen/generated/shared/c++/MapError.hpp +79 -0
  250. package/nitrogen/generated/shared/c++/MapPressEvent.hpp +83 -0
  251. package/nitrogen/generated/shared/c++/MapProvider.hpp +80 -0
  252. package/nitrogen/generated/shared/c++/MapStyleElement.hpp +87 -0
  253. package/nitrogen/generated/shared/c++/MapStyler.hpp +96 -0
  254. package/nitrogen/generated/shared/c++/MapType.hpp +80 -0
  255. package/nitrogen/generated/shared/c++/MarkerAnimation.hpp +80 -0
  256. package/nitrogen/generated/shared/c++/MarkerColor.hpp +87 -0
  257. package/nitrogen/generated/shared/c++/MarkerConfig.hpp +91 -0
  258. package/nitrogen/generated/shared/c++/MarkerData.hpp +131 -0
  259. package/nitrogen/generated/shared/c++/MarkerDragEvent.hpp +81 -0
  260. package/nitrogen/generated/shared/c++/MarkerPressEvent.hpp +81 -0
  261. package/nitrogen/generated/shared/c++/MarkerStyle.hpp +80 -0
  262. package/nitrogen/generated/shared/c++/Point.hpp +79 -0
  263. package/nitrogen/generated/shared/c++/PriceMarkerStyle.hpp +119 -0
  264. package/nitrogen/generated/shared/c++/Region.hpp +87 -0
  265. package/nitrogen/generated/shared/c++/RegionChangeEvent.hpp +80 -0
  266. package/nitrogen/generated/shared/c++/views/HybridNitroMapComponent.cpp +351 -0
  267. package/nitrogen/generated/shared/c++/views/HybridNitroMapComponent.hpp +141 -0
  268. package/nitrogen/generated/shared/json/NitroMapConfig.json +32 -0
  269. package/package.json +176 -0
  270. package/react-native.config.js +16 -0
  271. package/src/components/ImageMarker.tsx +254 -0
  272. package/src/components/NitroMap.tsx +433 -0
  273. package/src/components/PriceMarker.tsx +311 -0
  274. package/src/context/NitroMapContext.tsx +33 -0
  275. package/src/hooks/useNitroMarker.ts +198 -0
  276. package/src/index.tsx +62 -0
  277. package/src/modules/index.ts +6 -0
  278. package/src/modules/module.ts +45 -0
  279. package/src/specs/NitroMap.nitro.ts +292 -0
  280. package/src/specs/NitroMapConfig.nitro.ts +8 -0
  281. package/src/types/map.ts +166 -0
  282. package/src/types/marker.ts +267 -0
  283. package/src/utils/colors.ts +159 -0
@@ -0,0 +1,70 @@
1
+ package com.margelo.nitro.nitromap.providers
2
+
3
+ import android.view.View
4
+ import com.margelo.nitro.core.Promise
5
+ import com.margelo.nitro.nitromap.*
6
+
7
+ /** Interface for map providers (Google, Yandex) Mirrors iOS MapProviderProtocol */
8
+ interface MapProviderInterface {
9
+
10
+ // MARK: - View
11
+ val mapView: View
12
+
13
+ // MARK: - Setup
14
+ fun setup()
15
+ fun onResume()
16
+ fun onPause()
17
+ fun onDestroy()
18
+
19
+ // MARK: - Properties
20
+ var initialRegion: Region?
21
+ var showsUserLocation: Boolean?
22
+ var showsMyLocationButton: Boolean?
23
+ var zoomEnabled: Boolean?
24
+ var scrollEnabled: Boolean?
25
+ var rotateEnabled: Boolean?
26
+ var pitchEnabled: Boolean?
27
+ var mapType: MapType?
28
+ var clusterConfig: ClusterConfig?
29
+ var darkMode: Boolean?
30
+ var customMapStyle: Array<MapStyleElement>?
31
+
32
+ // MARK: - Callbacks
33
+ var onMapReady: (() -> Unit)?
34
+ var onPress: ((event: MapPressEvent) -> Unit)?
35
+ var onLongPress: ((event: MapPressEvent) -> Unit)?
36
+ var onRegionChange: ((event: RegionChangeEvent) -> Unit)?
37
+ var onRegionChangeComplete: ((event: RegionChangeEvent) -> Unit)?
38
+ var onMarkerPress: ((event: MarkerPressEvent) -> Unit)?
39
+ var onMarkerDragStart: ((event: MarkerDragEvent) -> Unit)?
40
+ var onMarkerDrag: ((event: MarkerDragEvent) -> Unit)?
41
+ var onMarkerDragEnd: ((event: MarkerDragEvent) -> Unit)?
42
+ var onClusterPress: ((event: ClusterPressEvent) -> Unit)?
43
+ var onError: ((error: MapError) -> Unit)?
44
+
45
+ // MARK: - Camera Methods
46
+ fun animateToRegion(region: Region, duration: Double)
47
+ fun animateCamera(camera: Camera, duration: Double)
48
+ fun setCamera(camera: Camera)
49
+ fun getCamera(): Promise<Camera>
50
+ fun fitToCoordinates(coordinates: Array<Coordinate>, padding: EdgePadding, animated: Boolean)
51
+ fun getMapBoundaries(): Promise<MapBoundaries>
52
+ fun getCurrentRegion(): Region
53
+
54
+ // MARK: - Marker Methods
55
+ fun addMarker(marker: MarkerData)
56
+ fun addMarkers(markers: Array<MarkerData>)
57
+ fun updateMarker(marker: MarkerData)
58
+ fun removeMarker(id: String)
59
+ fun clearMarkers()
60
+ fun selectMarker(id: String)
61
+
62
+ // MARK: - Clustering
63
+ fun setClusteringEnabled(enabled: Boolean)
64
+ fun refreshClusters()
65
+ fun performClustering()
66
+
67
+ // MARK: - Styling
68
+ fun setMapStyle(style: Array<MapStyleElement>?)
69
+ fun setIsDarkMode(enabled: Boolean)
70
+ }
@@ -0,0 +1,411 @@
1
+ #pragma once
2
+
3
+ #include <vector>
4
+ #include <unordered_map>
5
+ #include <string>
6
+ #include <cmath>
7
+ #include <algorithm>
8
+
9
+ #include "KDBush.hpp"
10
+
11
+ namespace nitromap {
12
+
13
+ // ============================================================================
14
+ // DATA STRUCTURES
15
+ // ============================================================================
16
+
17
+ /**
18
+ * Marker point — pure geographic data for spatial grouping.
19
+ * No icon dimensions: collision detection uses real rendered sizes in Swift.
20
+ */
21
+ struct MarkerPoint {
22
+ std::string id;
23
+ double latitude;
24
+ double longitude;
25
+
26
+ MarkerPoint() : id(""), latitude(0), longitude(0) {}
27
+ MarkerPoint(const std::string& id, double lat, double lon)
28
+ : id(id), latitude(lat), longitude(lon) {}
29
+ };
30
+
31
+ /**
32
+ * Cluster containing multiple markers
33
+ */
34
+ struct Cluster {
35
+ double latitude;
36
+ double longitude;
37
+ std::vector<std::string> markerIds;
38
+ int count;
39
+
40
+ Cluster() : latitude(0), longitude(0), count(0) {}
41
+
42
+ /// Returns cluster icon diameter in screen points.
43
+ /// Used as a hint; actual collision uses rendered icon size in Swift.
44
+ static double iconSize(int count) {
45
+ return count < 10 ? 44.0 : (count < 100 ? 52.0 : 60.0);
46
+ }
47
+ };
48
+
49
+ /**
50
+ * Result of clustering operation
51
+ */
52
+ struct ClusterResult {
53
+ std::vector<Cluster> clusters;
54
+ std::vector<MarkerPoint> singleMarkers;
55
+
56
+ void clear() {
57
+ clusters.clear();
58
+ singleMarkers.clear();
59
+ }
60
+ };
61
+
62
+
63
+ // ============================================================================
64
+ // MERCATOR PROJECTION (same as Supercluster)
65
+ // ============================================================================
66
+
67
+ /// Longitude to Mercator X [0..1]
68
+ inline double lngX(double lng) {
69
+ return lng / 360.0 + 0.5;
70
+ }
71
+
72
+ /// Latitude to Mercator Y [0..1]
73
+ inline double latY(double lat) {
74
+ double sinLat = std::sin(lat * M_PI / 180.0);
75
+ double y = 0.5 - 0.25 * std::log((1.0 + sinLat) / (1.0 - sinLat)) / M_PI;
76
+ return y < 0.0 ? 0.0 : (y > 1.0 ? 1.0 : y);
77
+ }
78
+
79
+ /// Mercator X [0..1] to Longitude
80
+ inline double xLng(double x) {
81
+ return (x - 0.5) * 360.0;
82
+ }
83
+
84
+ /// Mercator Y [0..1] to Latitude
85
+ inline double yLat(double y) {
86
+ double y2 = (180.0 - y * 360.0) * M_PI / 180.0;
87
+ return 360.0 * std::atan(std::exp(y2)) / M_PI - 90.0;
88
+ }
89
+
90
+ // ============================================================================
91
+ // FLAT ARRAY LAYOUT per zoom level
92
+ // ============================================================================
93
+
94
+ // Each item uses STRIDE doubles:
95
+ // [mercatorX, mercatorY, numPoints, originIndex]
96
+ static constexpr int STRIDE = 4;
97
+ static constexpr int OFF_X = 0;
98
+ static constexpr int OFF_Y = 1;
99
+ static constexpr int OFF_NUM = 2;
100
+ static constexpr int OFF_ORIGIN = 3;
101
+
102
+ // ============================================================================
103
+ // CLUSTER ENGINE — Supercluster algorithm with KDBush
104
+ //
105
+ // Phase 1 (load-time, O(n log n)):
106
+ // Project all markers to Mercator [0..1]. Build KDBush at maxZoom+1.
107
+ // Cluster bottom-up from maxZoom to minZoom. Each zoom level gets
108
+ // its own flat data array + KDBush index.
109
+ //
110
+ // Phase 2 (render-time, O(√n + k)):
111
+ // getClusters() range-queries the KDBush at floor(zoom).
112
+ //
113
+ // Collision detection happens in Swift using real rendered icon sizes.
114
+ // ============================================================================
115
+
116
+ class ClusterEngine {
117
+ public:
118
+ ClusterEngine()
119
+ : minZoom_(0), maxZoom_(16), radiusPixels_(80.0),
120
+ minClusterSize_(2), extent_(512.0), loaded_(false), markersChanged_(false) {}
121
+
122
+ ~ClusterEngine() = default;
123
+
124
+ // --- Configuration ---
125
+ void setClusterRadius(double radiusInPixels) {
126
+ if (radiusPixels_ != radiusInPixels) {
127
+ radiusPixels_ = radiusInPixels;
128
+ markersChanged_ = true;
129
+ }
130
+ }
131
+ void setMinClusterSize(int size) {
132
+ if (minClusterSize_ != size) {
133
+ minClusterSize_ = size;
134
+ markersChanged_ = true;
135
+ }
136
+ }
137
+ void setMaxZoom(double zoom) {
138
+ int z = static_cast<int>(zoom);
139
+ if (maxZoom_ != z) {
140
+ maxZoom_ = z;
141
+ markersChanged_ = true;
142
+ }
143
+ }
144
+
145
+ // --- Marker management ---
146
+ void addMarker(const MarkerPoint& marker) {
147
+ markers_[marker.id] = marker;
148
+ markersChanged_ = true;
149
+ }
150
+
151
+ void addMarkers(const std::vector<MarkerPoint>& markers) {
152
+ for (const auto& m : markers) markers_[m.id] = m;
153
+ markersChanged_ = true;
154
+ }
155
+
156
+ void removeMarker(const std::string& id) {
157
+ markers_.erase(id);
158
+ markersChanged_ = true;
159
+ }
160
+
161
+ void clearMarkers() {
162
+ markers_.clear();
163
+ markersChanged_ = true;
164
+ }
165
+
166
+ size_t markerCount() const { return markers_.size(); }
167
+
168
+ // --- Main API ---
169
+ ClusterResult getClusters(
170
+ double visMinLat, double visMaxLat,
171
+ double visMinLon, double visMaxLon,
172
+ double zoom, double mapW, double mapH
173
+ );
174
+
175
+ // Backward compat
176
+ ClusterResult cluster(
177
+ double visMinLat, double visMaxLat,
178
+ double visMinLon, double visMaxLon,
179
+ double zoom, double mapW, double mapH
180
+ ) {
181
+ return getClusters(visMinLat, visMaxLat, visMinLon, visMaxLon, zoom, mapW, mapH);
182
+ }
183
+
184
+ private:
185
+ void buildHierarchy();
186
+
187
+ // --- Input ---
188
+ std::unordered_map<std::string, MarkerPoint> markers_;
189
+ std::vector<std::string> inputIds_;
190
+
191
+ // --- Per zoom level: flat data + spatial index ---
192
+ std::vector<std::vector<double>> zoomData_;
193
+ std::vector<std::vector<std::vector<int>>> zoomMembers_;
194
+ std::vector<KDBush> zoomIndex_;
195
+
196
+ // --- Config ---
197
+ int minZoom_, maxZoom_;
198
+ double radiusPixels_;
199
+ int minClusterSize_;
200
+ double extent_;
201
+ bool loaded_, markersChanged_;
202
+ };
203
+
204
+ // ============================================================================
205
+ // IMPLEMENTATION
206
+ // ============================================================================
207
+
208
+ inline void ClusterEngine::buildHierarchy() {
209
+ if (markers_.empty()) {
210
+ zoomData_.clear();
211
+ zoomMembers_.clear();
212
+ zoomIndex_.clear();
213
+ loaded_ = true;
214
+ markersChanged_ = false;
215
+ return;
216
+ }
217
+
218
+ int numZooms = maxZoom_ + 2;
219
+ zoomData_.resize(numZooms);
220
+ zoomMembers_.resize(numZooms);
221
+ zoomIndex_.resize(numZooms);
222
+
223
+ // --- Step 1: Project all markers to Mercator space ---
224
+ inputIds_.clear();
225
+ inputIds_.reserve(markers_.size());
226
+
227
+ auto& baseData = zoomData_[maxZoom_ + 1];
228
+ auto& baseMembers = zoomMembers_[maxZoom_ + 1];
229
+ baseData.clear();
230
+ baseMembers.clear();
231
+
232
+ // Sort marker IDs for deterministic iteration order.
233
+ // std::unordered_map has non-deterministic iteration which causes
234
+ // different cluster results on each rebuild.
235
+ std::vector<std::string> sortedIds;
236
+ sortedIds.reserve(markers_.size());
237
+ for (const auto& pair : markers_) {
238
+ sortedIds.push_back(pair.first);
239
+ }
240
+ std::sort(sortedIds.begin(), sortedIds.end());
241
+
242
+ int idx = 0;
243
+ for (const auto& id : sortedIds) {
244
+ const auto& m = markers_[id];
245
+ double mx = lngX(m.longitude);
246
+ double my = latY(m.latitude);
247
+
248
+ baseData.push_back(mx); // OFF_X
249
+ baseData.push_back(my); // OFF_Y
250
+ baseData.push_back(1.0); // OFF_NUM
251
+ baseData.push_back(static_cast<double>(idx)); // OFF_ORIGIN
252
+
253
+ baseMembers.push_back({idx});
254
+ inputIds_.push_back(m.id);
255
+ idx++;
256
+ }
257
+
258
+ // Build KDBush at maxZoom+1
259
+ size_t baseCount = baseMembers.size();
260
+ {
261
+ std::vector<double> coords(baseCount * 2);
262
+ for (size_t i = 0; i < baseCount; i++) {
263
+ coords[2 * i] = baseData[i * STRIDE + OFF_X];
264
+ coords[2 * i + 1] = baseData[i * STRIDE + OFF_Y];
265
+ }
266
+ zoomIndex_[maxZoom_ + 1].build(coords, baseCount);
267
+ }
268
+
269
+ // --- Step 2: Cluster bottom-up from maxZoom to minZoom ---
270
+ for (int z = maxZoom_; z >= minZoom_; z--) {
271
+ double r = radiusPixels_ / (extent_ * std::pow(2.0, z));
272
+
273
+ auto& prevData = zoomData_[z + 1];
274
+ auto& prevMembers = zoomMembers_[z + 1];
275
+ auto& nextData = zoomData_[z];
276
+ auto& nextMembers = zoomMembers_[z];
277
+ nextData.clear();
278
+ nextMembers.clear();
279
+
280
+ size_t prevCount = prevMembers.size();
281
+ std::vector<bool> used(prevCount, false);
282
+
283
+ for (size_t i = 0; i < prevCount; i++) {
284
+ if (used[i]) continue;
285
+ used[i] = true;
286
+
287
+ size_t k = i * STRIDE;
288
+ double px = prevData[k + OFF_X];
289
+ double py = prevData[k + OFF_Y];
290
+ int numPointsOrigin = static_cast<int>(prevData[k + OFF_NUM]);
291
+
292
+ std::vector<int> neighborIndices = zoomIndex_[z + 1].within(px, py, r);
293
+
294
+ int numPoints = numPointsOrigin;
295
+ std::vector<size_t> toMerge;
296
+
297
+ for (int ni : neighborIndices) {
298
+ size_t si = static_cast<size_t>(ni);
299
+ if (si == i || used[si]) continue;
300
+ numPoints += static_cast<int>(prevData[si * STRIDE + OFF_NUM]);
301
+ toMerge.push_back(si);
302
+ }
303
+
304
+ if (numPoints >= minClusterSize_ && !toMerge.empty()) {
305
+ // Form a cluster — weighted centroid
306
+ double wx = px * numPointsOrigin;
307
+ double wy = py * numPointsOrigin;
308
+ std::vector<int> allMembers = prevMembers[i];
309
+
310
+ for (size_t ni : toMerge) {
311
+ used[ni] = true;
312
+ size_t nk = ni * STRIDE;
313
+ int np = static_cast<int>(prevData[nk + OFF_NUM]);
314
+ wx += prevData[nk + OFF_X] * np;
315
+ wy += prevData[nk + OFF_Y] * np;
316
+ for (int mi : prevMembers[ni]) {
317
+ allMembers.push_back(mi);
318
+ }
319
+ }
320
+
321
+ double cx = wx / numPoints;
322
+ double cy = wy / numPoints;
323
+
324
+ nextData.push_back(cx); // OFF_X
325
+ nextData.push_back(cy); // OFF_Y
326
+ nextData.push_back(static_cast<double>(numPoints)); // OFF_NUM
327
+ nextData.push_back(prevData[k + OFF_ORIGIN]); // OFF_ORIGIN
328
+ nextMembers.push_back(std::move(allMembers));
329
+
330
+ } else {
331
+ // Keep as individual item
332
+ for (int s = 0; s < STRIDE; s++) {
333
+ nextData.push_back(prevData[k + s]);
334
+ }
335
+ nextMembers.push_back(prevMembers[i]);
336
+ }
337
+ }
338
+
339
+ // Build KDBush for this zoom level
340
+ size_t nextCount = nextMembers.size();
341
+ std::vector<double> coords(nextCount * 2);
342
+ for (size_t i = 0; i < nextCount; i++) {
343
+ coords[2 * i] = nextData[i * STRIDE + OFF_X];
344
+ coords[2 * i + 1] = nextData[i * STRIDE + OFF_Y];
345
+ }
346
+ zoomIndex_[z].build(coords, nextCount);
347
+ }
348
+
349
+ loaded_ = true;
350
+ markersChanged_ = false;
351
+ }
352
+
353
+ inline ClusterResult ClusterEngine::getClusters(
354
+ double visMinLat, double visMaxLat,
355
+ double visMinLon, double visMaxLon,
356
+ double zoom, double mapW, double mapH
357
+ ) {
358
+ ClusterResult result;
359
+ if (markers_.empty()) return result;
360
+ if (markersChanged_ || !loaded_) buildHierarchy();
361
+ if (zoomIndex_.empty()) return result;
362
+
363
+ // Clamp zoom
364
+ int z = static_cast<int>(std::floor(zoom));
365
+ if (z > maxZoom_) z = maxZoom_ + 1;
366
+ if (z < minZoom_) z = minZoom_;
367
+
368
+ // Convert bounds to Mercator
369
+ double minX = lngX(visMinLon);
370
+ double maxX = lngX(visMaxLon);
371
+ double minY = latY(visMaxLat);
372
+ double maxY = latY(visMinLat);
373
+
374
+ // Range query on KDBush
375
+ std::vector<int> indices = zoomIndex_[z].range(minX, minY, maxX, maxY);
376
+
377
+ auto& zData = zoomData_[z];
378
+ auto& zMembers = zoomMembers_[z];
379
+
380
+ for (int idx : indices) {
381
+ size_t i = static_cast<size_t>(idx);
382
+ size_t k = i * STRIDE;
383
+ int numPoints = static_cast<int>(zData[k + OFF_NUM]);
384
+
385
+ if (numPoints >= minClusterSize_) {
386
+ Cluster cluster;
387
+ cluster.latitude = yLat(zData[k + OFF_Y]);
388
+ cluster.longitude = xLng(zData[k + OFF_X]);
389
+ cluster.count = numPoints;
390
+ for (int mi : zMembers[i]) {
391
+ if (mi >= 0 && mi < static_cast<int>(inputIds_.size())) {
392
+ cluster.markerIds.push_back(inputIds_[mi]);
393
+ }
394
+ }
395
+ result.clusters.push_back(std::move(cluster));
396
+ } else {
397
+ for (int mi : zMembers[i]) {
398
+ if (mi >= 0 && mi < static_cast<int>(inputIds_.size())) {
399
+ auto it = markers_.find(inputIds_[mi]);
400
+ if (it != markers_.end()) {
401
+ result.singleMarkers.push_back(it->second);
402
+ }
403
+ }
404
+ }
405
+ }
406
+ }
407
+
408
+ return result;
409
+ }
410
+
411
+ } // namespace nitromap