@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
package/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 alisher rakhimov
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is
9
+ furnished to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ SOFTWARE.
@@ -0,0 +1,42 @@
1
+ require "json"
2
+
3
+ package = JSON.parse(File.read(File.join(__dir__, "package.json")))
4
+
5
+ Pod::Spec.new do |s|
6
+ s.name = "NitroMap"
7
+ s.version = package["version"]
8
+ s.summary = package["description"]
9
+ s.homepage = package["homepage"]
10
+ s.license = package["license"]
11
+ s.authors = package["author"]
12
+
13
+ s.platforms = { :ios => '16.0' }
14
+ s.source = { :git => "https://github.com/maydongroup/react-native-nitro-maps.git", :tag => "#{s.version}" }
15
+
16
+ s.source_files = [
17
+ "ios/**/*.{swift,h,m,mm}",
18
+ "cpp/**/*.{h,hpp,cpp}",
19
+ ]
20
+
21
+ # C++ settings for ClusterEngine
22
+ s.pod_target_xcconfig = {
23
+ 'CLANG_CXX_LANGUAGE_STANDARD' => 'c++17',
24
+ 'CLANG_CXX_LIBRARY' => 'libc++',
25
+ 'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}/cpp"',
26
+ 'GCC_PREPROCESSOR_DEFINITIONS' => '$(inherited)'
27
+ }
28
+
29
+ # Expose Objective-C++ wrapper header for Swift
30
+ s.public_header_files = [
31
+ "ios/Clustering/ClusterEngineWrapper.h"
32
+ ]
33
+
34
+ s.dependency 'React-jsi'
35
+ s.dependency 'React-callinvoker'
36
+ s.dependency 'GoogleMaps', '~> 10.7.0'
37
+ s.dependency 'Google-Maps-iOS-Utils', '~> 6.1.3'
38
+ load 'nitrogen/generated/ios/NitroMap+autolinking.rb'
39
+ add_nitrogen_files(s)
40
+
41
+ install_modules_dependencies(s)
42
+ end
package/README.md ADDED
@@ -0,0 +1,172 @@
1
+ <p align="center">
2
+ <h1 align="center">@maydon_tech/react-native-nitro-maps</h1>
3
+ </p>
4
+
5
+ <p align="center">
6
+ <b>High-performance multi-provider maps for React Native</b><br/>
7
+ Built on <a href="https://nitro.margelo.com/">Nitro Modules</a> — C++ JSI, zero bridge overhead
8
+ </p>
9
+
10
+ <p align="center">
11
+ <a href="https://www.npmjs.com/package/@maydon_tech/react-native-nitro-maps"><img src="https://img.shields.io/npm/v/@maydon_tech/react-native-nitro-maps?color=0a7fca&label=npm" alt="npm version" /></a>
12
+ <a href="https://github.com/maydongroup/react-native-nitro-maps/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/@maydon_tech/react-native-nitro-maps?color=41b883" alt="license" /></a>
13
+ <img src="https://img.shields.io/badge/platforms-iOS%20%7C%20Android-lightgrey" alt="platforms" />
14
+ <img src="https://img.shields.io/badge/architecture-New%20Architecture-blue" alt="new architecture" />
15
+ </p>
16
+
17
+ ---
18
+
19
+ ## Why This Library?
20
+
21
+ Most React Native map libraries were built on the old Bridge. We built ours on **C++ JSI** — native calls with zero serialization.
22
+
23
+ | | react-native-maps | @rnmapbox | **nitro-maps** |
24
+ |----------------------|-------------------|-----------|-----------------------------|
25
+ | **Architecture** | Old Bridge | JS-heavy | **C++ JSI (Nitro Modules)** |
26
+ | **Clustering** | JS thread (slow) | JS thread | **C++ Supercluster engine** |
27
+ | **Marker rendering** | React views | Mixed | **Native bitmaps** |
28
+ | **Vendors** | Google, Apple | Mapbox | **Google, Apple, Yandex** |
29
+ | **30K markers** | ❌ Freezes | ⚠️ Slow | **✅ < 40ms** |
30
+
31
+ ## Highlights
32
+
33
+ - 🚀 **C++ JSI** — Nitro Modules bridge, zero serialization overhead
34
+ - 🗺️ **Multi-vendor** — Google Maps · Apple MapKit · Yandex MapKit, one unified API
35
+ - 📍 **C++ clustering** — Supercluster + KDBush handles 30,000+ markers
36
+ - 💰 **Native markers** — Price pills, images rendered as bitmaps — no React views
37
+ - ⚡ **Live clustering** — Real-time cluster updates during pan/zoom gestures
38
+ - 🌙 **Dark mode** — Built-in dark theme support across all vendors
39
+ - 📱 **New Architecture** — Fabric-ready, TurboModules compatible
40
+
41
+ ## Quick Start
42
+
43
+ ```bash
44
+ npm install @maydon_tech/react-native-nitro-maps react-native-nitro-modules
45
+ cd ios && pod install
46
+ ```
47
+
48
+ ```tsx
49
+ import {
50
+ NitroMap,
51
+ NitroMapInitialize,
52
+ PriceMarker,
53
+ } from '@maydon_tech/react-native-nitro-maps';
54
+
55
+ // Initialize once at app startup
56
+ NitroMapInitialize('YOUR_API_KEY', 'google');
57
+
58
+ export default function App() {
59
+ return (
60
+ <NitroMap
61
+ provider="google"
62
+ initialRegion={{
63
+ latitude: 41.2995,
64
+ longitude: 69.2401,
65
+ latitudeDelta: 0.05,
66
+ longitudeDelta: 0.05,
67
+ }}
68
+ clusterConfig={{
69
+ enabled: true,
70
+ strategy: 'supercluster',
71
+ radius: 80,
72
+ }}
73
+ >
74
+ <PriceMarker
75
+ coordinate={{ latitude: 41.2995, longitude: 69.2401 }}
76
+ price="150K"
77
+ currency="UZS"
78
+ />
79
+ </NitroMap>
80
+ );
81
+ }
82
+ ```
83
+
84
+ ## Providers
85
+
86
+ | Provider | iOS | Android | API Key | Notes |
87
+ |-----------------|-----|---------|----------|------------------------|
88
+ | **Google Maps** | ✅ | 🔜 | Required | Best global coverage |
89
+ | **Apple Maps** | 🔜 | — | Free | iOS only, zero SDK |
90
+ | **Yandex Maps** | 🔜 | 🔜 | Required | Best for CIS countries |
91
+
92
+ > ✅ Implemented · 🔜 Planned · — Not applicable
93
+
94
+ ## Clustering
95
+
96
+ Two strategies, powered by a shared C++ engine:
97
+
98
+ **`supercluster`** — Groups nearby markers. Overlaps acceptable.
99
+ Best for general-purpose maps.
100
+
101
+ **`hideOnOverlap`** — Same grouping, but hides lower-priority overlapping items.
102
+ Every visible marker sits at its real geographic position.
103
+ Best for real estate, hospitality — what Zillow and Airbnb use.
104
+
105
+ ```tsx
106
+ <NitroMap
107
+ clusterConfig={{
108
+ enabled: true,
109
+ strategy: 'hideOnOverlap',
110
+ radius: 80,
111
+ realtimeClustering: true, // live updates during gestures
112
+ renderBuffer: 0.5, // pre-compute 50% beyond viewport
113
+ throttleInterval: 200, // balance perf vs smoothness
114
+ }}
115
+ >
116
+ ```
117
+
118
+ | Markers | Clustering Time |
119
+ |---------|-----------------|
120
+ | 100 | < 1ms |
121
+ | 1,000 | ~ 2ms |
122
+ | 10,000 | ~ 15ms |
123
+ | 30,000 | ~ 40ms |
124
+
125
+ <sub>Measured on iPhone 12, including spatial index build + cluster query.</sub>
126
+
127
+ ## Documentation
128
+
129
+ | Guide | Description |
130
+ |---|---|
131
+ | [**Setup & Installation**](docs/setup.md) | Per-vendor setup for iOS and Android |
132
+ | [**API Reference**](docs/api.md) | Components, props, methods, types, events |
133
+ | [**Clustering**](docs/clustering.md) | Strategies, live clustering, render buffer, performance |
134
+ | [**Feature Support**](docs/features.md) | What's available on each provider |
135
+ | [**Examples**](docs/examples.md) | Selection, dragging, clustering, overlays |
136
+ | [**Migration**](docs/migration.md) | Breaking changes between versions |
137
+
138
+ ## Architecture
139
+
140
+ ```
141
+ React Native (JS)
142
+
143
+
144
+ ┌─────────────┐
145
+ │ NitroMap │ ← React component
146
+ │ PriceMarker │ ← Declarative children
147
+ │ ImageMarker │
148
+ └──────┬──────┘
149
+ │ C++ JSI (zero-copy)
150
+
151
+ ┌──────────────────┐
152
+ │ Nitro Modules │ ← C++ bridge layer
153
+ │ HybridObject │
154
+ └──────┬───────────┘
155
+
156
+ ┌────┴─────┬──────────────┐
157
+ ▼ ▼ ▼
158
+ Google Apple Yandex
159
+ Provider Provider Provider
160
+ (Swift) (Swift) (Swift)
161
+ │ │ │
162
+ ▼ ▼ ▼
163
+ GMSMapView MKMapView YMKMapView
164
+ ```
165
+
166
+ ## Contributing
167
+
168
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup.
169
+
170
+ ## License
171
+
172
+ [MIT](LICENSE) · Made by [Maydon Tech](https://github.com/maydongroup)
@@ -0,0 +1,27 @@
1
+ project(nitromap)
2
+ cmake_minimum_required(VERSION 3.9.0)
3
+
4
+ set(PACKAGE_NAME nitromap)
5
+ set(CMAKE_VERBOSE_MAKEFILE ON)
6
+ set(CMAKE_CXX_STANDARD 20)
7
+
8
+ # Enable 16KB page alignment for Android 15+ devices
9
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,max-page-size=16384")
10
+
11
+ # Define C++ library and add all sources
12
+ add_library(${PACKAGE_NAME} SHARED src/main/cpp/cpp-adapter.cpp)
13
+
14
+ # Add Nitrogen specs :)
15
+ include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/nitromap+autolinking.cmake)
16
+
17
+ # Set up local includes
18
+ include_directories("src/main/cpp" "../cpp")
19
+
20
+ find_library(LOG_LIB log)
21
+
22
+ # Link all libraries together
23
+ target_link_libraries(
24
+ ${PACKAGE_NAME}
25
+ ${LOG_LIB}
26
+ android # <-- Android core
27
+ )
@@ -0,0 +1,141 @@
1
+ buildscript {
2
+ ext.getExtOrDefault = {name ->
3
+ return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties['NitroMap_' + name]
4
+ }
5
+
6
+ repositories {
7
+ google()
8
+ mavenCentral()
9
+ }
10
+
11
+ dependencies {
12
+ classpath "com.android.tools.build:gradle:8.7.2"
13
+ // noinspection DifferentKotlinGradleVersion
14
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${getExtOrDefault('kotlinVersion')}"
15
+ }
16
+ }
17
+
18
+ def reactNativeArchitectures() {
19
+ def value = rootProject.getProperties().get("reactNativeArchitectures")
20
+ return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
21
+ }
22
+
23
+ apply plugin: "com.android.library"
24
+ apply plugin: "kotlin-android"
25
+ apply from: '../nitrogen/generated/android/nitromap+autolinking.gradle'
26
+
27
+ if (rootProject.hasProperty('react')) {
28
+ apply plugin: "com.facebook.react"
29
+ }
30
+
31
+ def getExtOrIntegerDefault(name) {
32
+ if (rootProject.ext.has(name)) {
33
+ return rootProject.ext.get(name)
34
+ }
35
+ def prop = project.properties["NitroMap_" + name]
36
+ return prop != null ? prop.toInteger() : null
37
+ }
38
+
39
+ android {
40
+ namespace "com.margelo.nitro.nitromap"
41
+
42
+ compileSdkVersion getExtOrIntegerDefault("compileSdkVersion")
43
+
44
+ defaultConfig {
45
+ minSdkVersion getExtOrIntegerDefault("minSdkVersion")
46
+ targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
47
+
48
+ externalNativeBuild {
49
+ cmake {
50
+ cppFlags "-frtti -fexceptions -Wall -fstack-protector-all"
51
+ arguments "-DANDROID_STL=c++_shared", "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
52
+ abiFilters (*reactNativeArchitectures())
53
+
54
+ buildTypes {
55
+ debug {
56
+ cppFlags "-O1 -g"
57
+ }
58
+ release {
59
+ cppFlags "-O2"
60
+ }
61
+ }
62
+ }
63
+ }
64
+ }
65
+
66
+ externalNativeBuild {
67
+ cmake {
68
+ path "CMakeLists.txt"
69
+ }
70
+ }
71
+
72
+ packagingOptions {
73
+ excludes = [
74
+ "META-INF",
75
+ "META-INF/**",
76
+ "**/libc++_shared.so",
77
+ "**/libfbjni.so",
78
+ "**/libjsi.so",
79
+ "**/libfolly_json.so",
80
+ "**/libfolly_runtime.so",
81
+ "**/libglog.so",
82
+ "**/libhermes.so",
83
+ "**/libhermes-executor-debug.so",
84
+ "**/libhermes_executor.so",
85
+ "**/libreactnative.so",
86
+ "**/libreactnativejni.so",
87
+ "**/libturbomodulejsijni.so",
88
+ "**/libreact_nativemodule_core.so",
89
+ "**/libjscexecutor.so"
90
+ ]
91
+ }
92
+
93
+ buildFeatures {
94
+ buildConfig true
95
+ prefab true
96
+ }
97
+
98
+ buildTypes {
99
+ release {
100
+ minifyEnabled false
101
+ }
102
+ }
103
+
104
+ lintOptions {
105
+ disable "GradleCompatible"
106
+ }
107
+
108
+ compileOptions {
109
+ sourceCompatibility JavaVersion.VERSION_1_8
110
+ targetCompatibility JavaVersion.VERSION_1_8
111
+ }
112
+
113
+ sourceSets {
114
+ main {
115
+ java.srcDirs += [
116
+ "generated/java",
117
+ "generated/jni"
118
+ ]
119
+ }
120
+ }
121
+ }
122
+
123
+ repositories {
124
+ mavenCentral()
125
+ google()
126
+ }
127
+
128
+ def kotlin_version = getExtOrDefault("kotlinVersion")
129
+
130
+ dependencies {
131
+ implementation "com.facebook.react:react-android"
132
+ implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
133
+ implementation project(":react-native-nitro-modules")
134
+
135
+ // Google Maps SDK
136
+ implementation "com.google.android.gms:play-services-maps:19.0.0"
137
+ implementation "com.google.android.gms:play-services-location:21.3.0"
138
+
139
+ // Coroutines for async operations
140
+ implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3"
141
+ }
@@ -0,0 +1,5 @@
1
+ NitroMap_kotlinVersion=2.0.21
2
+ NitroMap_minSdkVersion=24
3
+ NitroMap_targetSdkVersion=34
4
+ NitroMap_compileSdkVersion=35
5
+ NitroMap_ndkVersion=27.1.12297006
@@ -0,0 +1,3 @@
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
+
3
+ </manifest>
@@ -0,0 +1,6 @@
1
+ #include <jni.h>
2
+ #include "nitromapOnLoad.hpp"
3
+
4
+ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
5
+ return margelo::nitro::nitromap::initialize(vm);
6
+ }
@@ -0,0 +1,108 @@
1
+ package com.margelo.nitro.nitromap
2
+
3
+ import android.content.Context
4
+ import android.graphics.*
5
+ import com.google.android.gms.maps.model.BitmapDescriptor
6
+ import com.google.android.gms.maps.model.BitmapDescriptorFactory
7
+ import kotlin.math.roundToInt
8
+ import androidx.core.graphics.toColorInt
9
+
10
+ /**
11
+ * Generator for cluster marker icons
12
+ */
13
+ class ClusterIconGenerator(private val context: Context) {
14
+
15
+ private var backgroundColor = "#007AFF".toColorInt() // iOS blue
16
+ private var textColor = Color.WHITE
17
+ private var borderColor = Color.WHITE
18
+ private var borderWidth = 2f
19
+
20
+ private val iconCache = mutableMapOf<Int, BitmapDescriptor>()
21
+
22
+ fun updateConfig(config: ClusterConfig?) {
23
+ config?.let {
24
+ backgroundColor = ColorUtils.fromColorValue(it.backgroundColor)
25
+ textColor = ColorUtils.fromColorValue(it.textColor)
26
+ borderColor = ColorUtils.fromColorValue(it.borderColor)
27
+ borderWidth = it.borderWidth.toFloat()
28
+ // Clear cache when config changes
29
+ iconCache.clear()
30
+ }
31
+ }
32
+
33
+ fun getClusterIcon(count: Int): BitmapDescriptor {
34
+ // Check cache first
35
+ iconCache[count]?.let { return it }
36
+
37
+ val density = context.resources.displayMetrics.density
38
+
39
+ // Size based on count
40
+ val baseSize = when {
41
+ count < 10 -> 40
42
+ count < 100 -> 48
43
+ count < 1000 -> 56
44
+ else -> 64
45
+ }
46
+ val size = (baseSize * density).roundToInt()
47
+
48
+ val bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888)
49
+ val canvas = Canvas(bitmap)
50
+
51
+ // Draw background circle
52
+ val bgPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
53
+ color = backgroundColor
54
+ style = Paint.Style.FILL
55
+ }
56
+ canvas.drawCircle(size / 2f, size / 2f, size / 2f - borderWidth * density, bgPaint)
57
+
58
+ // Draw border
59
+ if (borderWidth > 0) {
60
+ val borderPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
61
+ color = borderColor
62
+ style = Paint.Style.STROKE
63
+ strokeWidth = borderWidth * density
64
+ }
65
+ canvas.drawCircle(
66
+ size / 2f,
67
+ size / 2f,
68
+ size / 2f - borderWidth * density / 2,
69
+ borderPaint
70
+ )
71
+ }
72
+
73
+ // Draw count text
74
+ val text = formatCount(count)
75
+ val textPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
76
+ color = textColor
77
+ textSize = when {
78
+ count < 10 -> 16 * density
79
+ count < 100 -> 14 * density
80
+ count < 1000 -> 12 * density
81
+ else -> 10 * density
82
+ }
83
+ typeface = Typeface.DEFAULT_BOLD
84
+ textAlign = Paint.Align.CENTER
85
+ }
86
+
87
+ val textBounds = Rect()
88
+ textPaint.getTextBounds(text, 0, text.length, textBounds)
89
+ val textY = size / 2f + textBounds.height() / 2f
90
+ canvas.drawText(text, size / 2f, textY, textPaint)
91
+
92
+ val descriptor = BitmapDescriptorFactory.fromBitmap(bitmap)
93
+ iconCache[count] = descriptor
94
+ return descriptor
95
+ }
96
+
97
+ private fun formatCount(count: Int): String {
98
+ return when {
99
+ count >= 1000000 -> "${count / 1000000}M"
100
+ count >= 1000 -> "${count / 1000}K"
101
+ else -> count.toString()
102
+ }
103
+ }
104
+
105
+ fun clearCache() {
106
+ iconCache.clear()
107
+ }
108
+ }
@@ -0,0 +1,63 @@
1
+ package com.margelo.nitro.nitromap
2
+
3
+ import android.graphics.Color
4
+ import androidx.core.graphics.toColorInt
5
+
6
+ /**
7
+ * Utility functions for converting color types to Android color integers
8
+ */
9
+ object ColorUtils {
10
+
11
+ /**
12
+ * Convert MarkerColor (RGBA) to Android color int
13
+ */
14
+ fun fromMarkerColor(color: MarkerColor): Int {
15
+ // Handle alpha: if <= 1.0, treat as 0-1 range and scale to 0-255
16
+ val alpha = if (color.a <= 1.0) (color.a * 255).toInt() else color.a.toInt()
17
+ return Color.argb(
18
+ alpha.coerceIn(0, 255),
19
+ color.r.toInt().coerceIn(0, 255),
20
+ color.g.toInt().coerceIn(0, 255),
21
+ color.b.toInt().coerceIn(0, 255)
22
+ )
23
+ }
24
+
25
+ /**
26
+ * Convert ColorValue (String | MarkerColor variant) to Android color int
27
+ */
28
+ fun fromColorValue(colorValue: ColorValue): Int {
29
+ return colorValue.match(
30
+ first = { hexString -> parseHexColor(hexString) },
31
+ second = { markerColor -> fromMarkerColor(markerColor) }
32
+ )
33
+ }
34
+
35
+ /**
36
+ * Convert Variant_String_MarkerColor to Android color int
37
+ */
38
+ fun fromVariant(variant: Variant_String_MarkerColor): Int {
39
+ return variant.match(
40
+ first = { hexString -> parseHexColor(hexString) },
41
+ second = { markerColor -> fromMarkerColor(markerColor) }
42
+ )
43
+ }
44
+
45
+ /**
46
+ * Parse hex color string to Android color int
47
+ * Supports formats: #RGB, #RRGGBB, #AARRGGBB, and color names
48
+ */
49
+ private fun parseHexColor(hexString: String): Int {
50
+ return try {
51
+ hexString.toColorInt()
52
+ } catch (e: Exception) {
53
+ Color.BLACK // Default fallback
54
+ }
55
+ }
56
+
57
+ /**
58
+ * Create a default ColorValue from a MarkerColor
59
+ */
60
+ fun defaultColorValue(r: Double, g: Double, b: Double, a: Double = 255.0): ColorValue {
61
+ return ColorValue.create(MarkerColor(r, g, b, a))
62
+ }
63
+ }