@maydon_tech/react-native-nitro-maps 0.1.3 → 0.2.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 (218) hide show
  1. package/LICENSE +1 -1
  2. package/NitroMap.podspec +1 -1
  3. package/README.md +82 -9
  4. package/android/CMakeLists.txt +4 -1
  5. package/android/gradle.properties +4 -4
  6. package/android/src/main/cpp/ClusterEngineJNI.cpp +198 -0
  7. package/android/src/main/kotlin/com/margelo/nitro/nitromap/NitroMap.kt +397 -0
  8. package/android/src/main/kotlin/com/margelo/nitro/nitromap/NitroMapConfig.kt +53 -0
  9. package/android/src/main/{java → kotlin}/com/margelo/nitro/nitromap/NitroMapPackage.kt +4 -4
  10. package/android/src/main/kotlin/com/margelo/nitro/nitromap/NitroMapView.kt +73 -0
  11. package/android/src/main/kotlin/com/margelo/nitro/nitromap/UserLocationManager.kt +295 -0
  12. package/android/src/main/kotlin/com/margelo/nitro/nitromap/clustering/ClusterIconRenderer.kt +111 -0
  13. package/android/src/main/kotlin/com/margelo/nitro/nitromap/clustering/ClusteringManager.kt +104 -0
  14. package/android/src/main/kotlin/com/margelo/nitro/nitromap/clustering/NitroClusterEngine.kt +166 -0
  15. package/android/src/main/kotlin/com/margelo/nitro/nitromap/markers/MarkerIconFactory.kt +303 -0
  16. package/android/src/main/kotlin/com/margelo/nitro/nitromap/markers/MarkerSelectionHandler.kt +72 -0
  17. package/android/src/main/kotlin/com/margelo/nitro/nitromap/markers/PriceMarkerRenderer.kt +159 -0
  18. package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/MapProviderFactory.kt +24 -0
  19. package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/MapProviderInterface.kt +128 -0
  20. package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/GoogleMapDelegate.kt +317 -0
  21. package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/GoogleMapProvider+Clustering.kt +524 -0
  22. package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/GoogleMapProvider+Markers.kt +358 -0
  23. package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/GoogleMapProvider+Overlays.kt +272 -0
  24. package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/GoogleMapProvider+UserLocation.kt +296 -0
  25. package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/GoogleMapProvider.kt +815 -0
  26. package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/MarkerTagData.kt +19 -0
  27. package/ios/Clustering/ClusterIconRenderer.swift +3 -3
  28. package/ios/Location/NitroLocationManager.swift +116 -0
  29. package/ios/MarkerRenderer/MarkerIconFactory.swift +1 -3
  30. package/ios/MarkerRenderer/PriceMarkerRenderer.swift +10 -6
  31. package/ios/NitroMap.swift +279 -13
  32. package/ios/NitroMapConfig/NitroMapConfig.swift +45 -0
  33. package/ios/Providers/{GoogleMapDelegate.swift → Google/GoogleMapDelegate.swift} +48 -23
  34. package/ios/Providers/Google/GoogleMapProvider+Camera.swift +180 -0
  35. package/ios/Providers/Google/GoogleMapProvider+Clustering.swift +541 -0
  36. package/ios/Providers/Google/GoogleMapProvider+Markers.swift +270 -0
  37. package/ios/Providers/Google/GoogleMapProvider+Overlays.swift +245 -0
  38. package/ios/Providers/Google/GoogleMapProvider+UserLocation.swift +180 -0
  39. package/ios/Providers/Google/GoogleMapProvider.swift +342 -0
  40. package/ios/Providers/MapProviderFactory.swift +17 -0
  41. package/ios/Providers/MapProviderProtocol.swift +48 -1
  42. package/ios/Shared/ClusterConfig+Factory.swift +2 -2
  43. package/ios/Shared/MapStyleProvider.swift +6 -4
  44. package/ios/Shared/MarkerSelectionHandler.swift +4 -1
  45. package/ios/Utils/ColorValueExtension.swift +46 -67
  46. package/lib/module/components/ImageMarker.js +39 -29
  47. package/lib/module/components/ImageMarker.js.map +1 -1
  48. package/lib/module/components/Marker.js +118 -0
  49. package/lib/module/components/Marker.js.map +1 -0
  50. package/lib/module/components/NitroCircle.js +92 -0
  51. package/lib/module/components/NitroCircle.js.map +1 -0
  52. package/lib/module/components/NitroMap.js +216 -76
  53. package/lib/module/components/NitroMap.js.map +1 -1
  54. package/lib/module/components/NitroPolygon.js +135 -0
  55. package/lib/module/components/NitroPolygon.js.map +1 -0
  56. package/lib/module/components/NitroPolyline.js +115 -0
  57. package/lib/module/components/NitroPolyline.js.map +1 -0
  58. package/lib/module/components/PriceMarker.js +16 -29
  59. package/lib/module/components/PriceMarker.js.map +1 -1
  60. package/lib/module/context/NitroMapContext.js.map +1 -1
  61. package/lib/module/hooks/useNitroCircle.js +18 -0
  62. package/lib/module/hooks/useNitroCircle.js.map +1 -0
  63. package/lib/module/hooks/useNitroMarker.js +26 -9
  64. package/lib/module/hooks/useNitroMarker.js.map +1 -1
  65. package/lib/module/hooks/useNitroOverlay.js +59 -0
  66. package/lib/module/hooks/useNitroOverlay.js.map +1 -0
  67. package/lib/module/hooks/useNitroPolygon.js +18 -0
  68. package/lib/module/hooks/useNitroPolygon.js.map +1 -0
  69. package/lib/module/hooks/useNitroPolyline.js +18 -0
  70. package/lib/module/hooks/useNitroPolyline.js.map +1 -0
  71. package/lib/module/index.js +5 -0
  72. package/lib/module/index.js.map +1 -1
  73. package/lib/module/types/overlay.js +4 -0
  74. package/lib/module/types/overlay.js.map +1 -0
  75. package/lib/module/types/theme.js +4 -0
  76. package/lib/module/types/theme.js.map +1 -0
  77. package/lib/module/utils/colors.js +41 -13
  78. package/lib/module/utils/colors.js.map +1 -1
  79. package/lib/module/utils/validation.js +45 -0
  80. package/lib/module/utils/validation.js.map +1 -0
  81. package/lib/typescript/src/components/ImageMarker.d.ts.map +1 -1
  82. package/lib/typescript/src/components/Marker.d.ts +34 -0
  83. package/lib/typescript/src/components/Marker.d.ts.map +1 -0
  84. package/lib/typescript/src/components/NitroCircle.d.ts +70 -0
  85. package/lib/typescript/src/components/NitroCircle.d.ts.map +1 -0
  86. package/lib/typescript/src/components/NitroMap.d.ts +60 -3
  87. package/lib/typescript/src/components/NitroMap.d.ts.map +1 -1
  88. package/lib/typescript/src/components/NitroPolygon.d.ts +86 -0
  89. package/lib/typescript/src/components/NitroPolygon.d.ts.map +1 -0
  90. package/lib/typescript/src/components/NitroPolyline.d.ts +84 -0
  91. package/lib/typescript/src/components/NitroPolyline.d.ts.map +1 -0
  92. package/lib/typescript/src/components/PriceMarker.d.ts +0 -5
  93. package/lib/typescript/src/components/PriceMarker.d.ts.map +1 -1
  94. package/lib/typescript/src/context/NitroMapContext.d.ts +2 -0
  95. package/lib/typescript/src/context/NitroMapContext.d.ts.map +1 -1
  96. package/lib/typescript/src/hooks/useNitroCircle.d.ts +7 -0
  97. package/lib/typescript/src/hooks/useNitroCircle.d.ts.map +1 -0
  98. package/lib/typescript/src/hooks/useNitroMarker.d.ts +20 -0
  99. package/lib/typescript/src/hooks/useNitroMarker.d.ts.map +1 -1
  100. package/lib/typescript/src/hooks/useNitroOverlay.d.ts +26 -0
  101. package/lib/typescript/src/hooks/useNitroOverlay.d.ts.map +1 -0
  102. package/lib/typescript/src/hooks/useNitroPolygon.d.ts +7 -0
  103. package/lib/typescript/src/hooks/useNitroPolygon.d.ts.map +1 -0
  104. package/lib/typescript/src/hooks/useNitroPolyline.d.ts +7 -0
  105. package/lib/typescript/src/hooks/useNitroPolyline.d.ts.map +1 -0
  106. package/lib/typescript/src/index.d.ts +15 -2
  107. package/lib/typescript/src/index.d.ts.map +1 -1
  108. package/lib/typescript/src/specs/NitroMap.nitro.d.ts +248 -6
  109. package/lib/typescript/src/specs/NitroMap.nitro.d.ts.map +1 -1
  110. package/lib/typescript/src/types/map.d.ts +34 -4
  111. package/lib/typescript/src/types/map.d.ts.map +1 -1
  112. package/lib/typescript/src/types/marker.d.ts +24 -36
  113. package/lib/typescript/src/types/marker.d.ts.map +1 -1
  114. package/lib/typescript/src/types/overlay.d.ts +75 -0
  115. package/lib/typescript/src/types/overlay.d.ts.map +1 -0
  116. package/lib/typescript/src/types/theme.d.ts +93 -0
  117. package/lib/typescript/src/types/theme.d.ts.map +1 -0
  118. package/lib/typescript/src/utils/colors.d.ts +6 -8
  119. package/lib/typescript/src/utils/colors.d.ts.map +1 -1
  120. package/lib/typescript/src/utils/validation.d.ts +12 -0
  121. package/lib/typescript/src/utils/validation.d.ts.map +1 -0
  122. package/nitrogen/generated/android/c++/JCircleData.hpp +94 -0
  123. package/nitrogen/generated/android/c++/JClusterConfig.hpp +5 -7
  124. package/nitrogen/generated/android/c++/JFunc_void_UserLocationChangeEvent.hpp +79 -0
  125. package/nitrogen/generated/android/c++/JFunc_void_UserTrackingMode.hpp +77 -0
  126. package/nitrogen/generated/android/c++/JFunc_void_std__string.hpp +76 -0
  127. package/nitrogen/generated/android/c++/JHybridNitroMapSpec.cpp +328 -21
  128. package/nitrogen/generated/android/c++/JHybridNitroMapSpec.hpp +53 -2
  129. package/nitrogen/generated/android/c++/JMarkerAnimation.hpp +3 -6
  130. package/nitrogen/generated/android/c++/JMarkerData.hpp +15 -3
  131. package/nitrogen/generated/android/c++/JPolygonData.hpp +149 -0
  132. package/nitrogen/generated/android/c++/JPolylineData.hpp +113 -0
  133. package/nitrogen/generated/android/c++/JUserLocationChangeEvent.hpp +70 -0
  134. package/nitrogen/generated/android/c++/JUserTrackingMode.hpp +62 -0
  135. package/nitrogen/generated/android/c++/views/JHybridNitroMapStateUpdater.cpp +72 -4
  136. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/CircleData.kt +62 -0
  137. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/ClusterConfig.kt +4 -4
  138. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Func_void_UserLocationChangeEvent.kt +80 -0
  139. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Func_void_UserTrackingMode.kt +80 -0
  140. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Func_void_std__string.kt +80 -0
  141. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/HybridNitroMapSpec.kt +228 -2
  142. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MarkerAnimation.kt +1 -2
  143. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MarkerData.kt +12 -3
  144. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/PolygonData.kt +62 -0
  145. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/PolylineData.kt +62 -0
  146. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/UserLocationChangeEvent.kt +47 -0
  147. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/{ClusterAnimationStyle.kt → UserTrackingMode.kt} +6 -8
  148. package/nitrogen/generated/android/nitromapOnLoad.cpp +6 -0
  149. package/nitrogen/generated/ios/NitroMap-Swift-Cxx-Bridge.cpp +24 -0
  150. package/nitrogen/generated/ios/NitroMap-Swift-Cxx-Bridge.hpp +175 -17
  151. package/nitrogen/generated/ios/NitroMap-Swift-Cxx-Umbrella.hpp +15 -3
  152. package/nitrogen/generated/ios/c++/HybridNitroMapSpecSwift.hpp +249 -16
  153. package/nitrogen/generated/ios/c++/views/HybridNitroMapComponent.mm +90 -5
  154. package/nitrogen/generated/ios/swift/CircleData.swift +143 -0
  155. package/nitrogen/generated/ios/swift/ClusterConfig.swift +22 -15
  156. package/nitrogen/generated/ios/swift/Func_void_UserLocationChangeEvent.swift +47 -0
  157. package/nitrogen/generated/ios/swift/Func_void_UserTrackingMode.swift +47 -0
  158. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +47 -0
  159. package/nitrogen/generated/ios/swift/HybridNitroMapSpec.swift +35 -1
  160. package/nitrogen/generated/ios/swift/HybridNitroMapSpec_cxx.swift +582 -8
  161. package/nitrogen/generated/ios/swift/MarkerAnimation.swift +4 -8
  162. package/nitrogen/generated/ios/swift/MarkerData.swift +54 -2
  163. package/nitrogen/generated/ios/swift/PolygonData.swift +179 -0
  164. package/nitrogen/generated/ios/swift/PolylineData.swift +155 -0
  165. package/nitrogen/generated/ios/swift/UserLocationChangeEvent.swift +69 -0
  166. package/nitrogen/generated/ios/swift/UserTrackingMode.swift +44 -0
  167. package/nitrogen/generated/shared/c++/CircleData.hpp +113 -0
  168. package/nitrogen/generated/shared/c++/ClusterConfig.hpp +5 -8
  169. package/nitrogen/generated/shared/c++/HybridNitroMapSpec.cpp +53 -2
  170. package/nitrogen/generated/shared/c++/HybridNitroMapSpec.hpp +75 -6
  171. package/nitrogen/generated/shared/c++/MarkerAnimation.hpp +4 -8
  172. package/nitrogen/generated/shared/c++/MarkerData.hpp +14 -2
  173. package/nitrogen/generated/shared/c++/PolygonData.hpp +114 -0
  174. package/nitrogen/generated/shared/c++/PolylineData.hpp +114 -0
  175. package/nitrogen/generated/shared/c++/UserLocationChangeEvent.hpp +88 -0
  176. package/nitrogen/generated/shared/c++/UserTrackingMode.hpp +80 -0
  177. package/nitrogen/generated/shared/c++/views/HybridNitroMapComponent.cpp +216 -12
  178. package/nitrogen/generated/shared/c++/views/HybridNitroMapComponent.hpp +23 -1
  179. package/nitrogen/generated/shared/json/NitroMapConfig.json +18 -1
  180. package/package.json +36 -5
  181. package/src/components/ImageMarker.tsx +58 -42
  182. package/src/components/Marker.tsx +161 -0
  183. package/src/components/NitroCircle.tsx +183 -0
  184. package/src/components/NitroMap.tsx +328 -78
  185. package/src/components/NitroPolygon.tsx +229 -0
  186. package/src/components/NitroPolyline.tsx +208 -0
  187. package/src/components/PriceMarker.tsx +23 -48
  188. package/src/context/NitroMapContext.tsx +4 -0
  189. package/src/hooks/useNitroCircle.ts +25 -0
  190. package/src/hooks/useNitroMarker.ts +49 -10
  191. package/src/hooks/useNitroOverlay.ts +68 -0
  192. package/src/hooks/useNitroPolygon.ts +25 -0
  193. package/src/hooks/useNitroPolyline.ts +25 -0
  194. package/src/index.tsx +23 -2
  195. package/src/specs/NitroMap.nitro.ts +294 -5
  196. package/src/types/map.ts +36 -4
  197. package/src/types/marker.ts +24 -44
  198. package/src/types/overlay.ts +77 -0
  199. package/src/types/theme.ts +101 -0
  200. package/src/utils/colors.ts +48 -16
  201. package/src/utils/validation.ts +69 -0
  202. package/android/src/main/java/com/margelo/nitro/nitromap/ClusterIconGenerator.kt +0 -108
  203. package/android/src/main/java/com/margelo/nitro/nitromap/ColorUtils.kt +0 -63
  204. package/android/src/main/java/com/margelo/nitro/nitromap/HybridNitroMap.kt +0 -408
  205. package/android/src/main/java/com/margelo/nitro/nitromap/HybridNitroMapConfig.kt +0 -68
  206. package/android/src/main/java/com/margelo/nitro/nitromap/MarkerIconCache.kt +0 -176
  207. package/android/src/main/java/com/margelo/nitro/nitromap/MarkerIconFactory.kt +0 -252
  208. package/android/src/main/java/com/margelo/nitro/nitromap/clustering/NitroClusterEngine.kt +0 -252
  209. package/android/src/main/java/com/margelo/nitro/nitromap/clustering/QuadTree.kt +0 -195
  210. package/android/src/main/java/com/margelo/nitro/nitromap/providers/GoogleMapProvider.kt +0 -912
  211. package/android/src/main/java/com/margelo/nitro/nitromap/providers/MapProviderInterface.kt +0 -70
  212. package/cpp/QuadTree.hpp +0 -246
  213. package/ios/NitroMapConfig/HybridNitroMapConfig.swift +0 -33
  214. package/ios/Providers/GoogleMapProvider+Camera.swift +0 -164
  215. package/ios/Providers/GoogleMapProvider.swift +0 -924
  216. package/nitrogen/generated/android/c++/JClusterAnimationStyle.hpp +0 -68
  217. package/nitrogen/generated/ios/swift/ClusterAnimationStyle.swift +0 -52
  218. package/nitrogen/generated/shared/c++/ClusterAnimationStyle.hpp +0 -88
@@ -1,9 +1,20 @@
1
1
  "use strict";
2
2
 
3
3
  // src/components/ImageMarker.tsx
4
- import { memo, useCallback, useMemo } from 'react';
5
- import { useNitroMarker } from "../hooks/useNitroMarker.js";
6
- import { Colors, parseColor } from "../utils/colors.js";
4
+ import { memo, useCallback, useEffect } from 'react';
5
+ import { useNitroMarker, useMarkerHandlers } from "../hooks/useNitroMarker.js";
6
+ import { Colors, parseColor, areColorsEqual } from "../utils/colors.js";
7
+ const MAX_IMAGE_DIMENSION = 512;
8
+ const MIN_IMAGE_DIMENSION = 1;
9
+
10
+ /** Clamp a dimension to [1, 512] and warn in __DEV__ if clamped */
11
+ function clampDimension(value, name) {
12
+ if (value >= MIN_IMAGE_DIMENSION && value <= MAX_IMAGE_DIMENSION) return value;
13
+ if (__DEV__) {
14
+ console.warn(`[ImageMarker] ${name}=${value} clamped to [${MIN_IMAGE_DIMENSION}, ${MAX_IMAGE_DIMENSION}].`);
15
+ }
16
+ return Math.max(MIN_IMAGE_DIMENSION, Math.min(MAX_IMAGE_DIMENSION, value));
17
+ }
7
18
 
8
19
  /**
9
20
  * Props for the ImageMarker component
@@ -11,7 +22,7 @@ import { Colors, parseColor } from "../utils/colors.js";
11
22
 
12
23
  // ============ Custom Memo Comparison ============
13
24
  const arePropsEqual = (prevProps, nextProps) => {
14
- if (prevProps.id !== nextProps.id || prevProps.imageUrl !== nextProps.imageUrl || prevProps.imageBase64 !== nextProps.imageBase64 || prevProps.width !== nextProps.width || prevProps.height !== nextProps.height || prevProps.cornerRadius !== nextProps.cornerRadius || prevProps.borderWidth !== nextProps.borderWidth || prevProps.title !== nextProps.title || prevProps.description !== nextProps.description || prevProps.draggable !== nextProps.draggable || prevProps.opacity !== nextProps.opacity || prevProps.rotation !== nextProps.rotation || prevProps.zIndex !== nextProps.zIndex || prevProps.clusteringEnabled !== nextProps.clusteringEnabled || prevProps.animation !== nextProps.animation) {
25
+ if (prevProps.id !== nextProps.id || prevProps.imageUrl !== nextProps.imageUrl || prevProps.imageBase64 !== nextProps.imageBase64 || prevProps.width !== nextProps.width || prevProps.height !== nextProps.height || prevProps.cornerRadius !== nextProps.cornerRadius || prevProps.borderWidth !== nextProps.borderWidth || prevProps.title !== nextProps.title || prevProps.description !== nextProps.description || prevProps.draggable !== nextProps.draggable || prevProps.opacity !== nextProps.opacity || prevProps.rotation !== nextProps.rotation || prevProps.zIndex !== nextProps.zIndex || prevProps.clusteringEnabled !== nextProps.clusteringEnabled || prevProps.animation !== nextProps.animation || prevProps.animationDuration !== nextProps.animationDuration || prevProps.animateOnReappear !== nextProps.animateOnReappear || prevProps.accessibilityLabel !== nextProps.accessibilityLabel) {
15
26
  return false;
16
27
  }
17
28
  if (prevProps.coordinate?.latitude !== nextProps.coordinate?.latitude || prevProps.coordinate?.longitude !== nextProps.coordinate?.longitude) {
@@ -20,19 +31,7 @@ const arePropsEqual = (prevProps, nextProps) => {
20
31
  if (prevProps.anchor?.x !== nextProps.anchor?.x || prevProps.anchor?.y !== nextProps.anchor?.y) {
21
32
  return false;
22
33
  }
23
- const compareColors = (a, b) => {
24
- if (!a && !b) return true;
25
- if (!a || !b) return false;
26
- // If both are strings, compare directly
27
- if (typeof a === 'string' && typeof b === 'string') return a === b;
28
- // If types differ, not equal
29
- if (typeof a !== typeof b) return false;
30
- // Both are MarkerColor objects
31
- const aColor = a;
32
- const bColor = b;
33
- return aColor.r === bColor.r && aColor.g === bColor.g && aColor.b === bColor.b && aColor.a === bColor.a;
34
- };
35
- if (!compareColors(prevProps.borderColor, nextProps.borderColor)) {
34
+ if (!areColorsEqual(prevProps.borderColor, nextProps.borderColor)) {
36
35
  return false;
37
36
  }
38
37
  return true;
@@ -90,21 +89,29 @@ export const ImageMarker = /*#__PURE__*/memo(function ImageMarker({
90
89
  },
91
90
  clusteringEnabled = true,
92
91
  animation = 'none',
92
+ animationDuration = 0.3,
93
+ animateOnReappear = true,
94
+ accessibilityLabel,
93
95
  // Events
94
96
  onPress,
95
97
  onDragStart,
96
98
  onDrag,
97
99
  onDragEnd
98
100
  }) {
99
- // Build marker config
101
+ // Dev-mode validation: at least one image source is required
102
+ useEffect(() => {
103
+ if (__DEV__ && !imageUrl && !imageBase64) {
104
+ console.warn('ImageMarker: either imageUrl or imageBase64 must be provided. ' + 'The marker will render without an image.');
105
+ }
106
+ // eslint-disable-next-line react-hooks/exhaustive-deps
107
+ }, []);
108
+
109
+ // Clamp dimensions to safe range
110
+ const clampedWidth = clampDimension(width, 'width');
111
+ const clampedHeight = clampDimension(height, 'height');
100
112
 
101
- // Memoize handlers
102
- const handlers = useMemo(() => ({
103
- onPress,
104
- onDragStart,
105
- onDrag,
106
- onDragEnd
107
- }), [onPress, onDragStart, onDrag, onDragEnd]);
113
+ // Memoize handlers via shared hook
114
+ const handlers = useMarkerHandlers(onPress, onDragStart, onDrag, onDragEnd);
108
115
 
109
116
  // Build full marker data
110
117
  const buildMarkerData = useCallback(markerId => ({
@@ -123,15 +130,18 @@ export const ImageMarker = /*#__PURE__*/memo(function ImageMarker({
123
130
  image: {
124
131
  imageUrl,
125
132
  imageBase64,
126
- width,
127
- height,
133
+ width: clampedWidth,
134
+ height: clampedHeight,
128
135
  cornerRadius,
129
136
  borderWidth,
130
137
  borderColor: parseColor(borderColor) ?? Colors.gray
131
138
  }
132
139
  },
133
- animation
134
- }), [coordinate, title, description, draggable, opacity, rotation, zIndex, anchor, clusteringEnabled, imageUrl, imageBase64, width, height, cornerRadius, borderWidth, borderColor, animation]);
140
+ accessibilityLabel,
141
+ animation,
142
+ animationDuration,
143
+ animateOnReappear
144
+ }), [coordinate, title, description, draggable, opacity, rotation, zIndex, anchor, clusteringEnabled, imageUrl, imageBase64, clampedWidth, clampedHeight, cornerRadius, borderWidth, borderColor, accessibilityLabel, animation, animationDuration, animateOnReappear]);
135
145
 
136
146
  // Use shared marker hook
137
147
  useNitroMarker({
@@ -1 +1 @@
1
- {"version":3,"names":["memo","useCallback","useMemo","useNitroMarker","Colors","parseColor","arePropsEqual","prevProps","nextProps","id","imageUrl","imageBase64","width","height","cornerRadius","borderWidth","title","description","draggable","opacity","rotation","zIndex","clusteringEnabled","animation","coordinate","latitude","longitude","anchor","x","y","compareColors","a","b","aColor","bColor","r","g","borderColor","ImageMarker","onPress","onDragStart","onDrag","onDragEnd","handlers","buildMarkerData","markerId","config","style","image","gray","idPrefix","providedId"],"sourceRoot":"../../../src","sources":["components/ImageMarker.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["memo","useCallback","useEffect","useNitroMarker","useMarkerHandlers","Colors","parseColor","areColorsEqual","MAX_IMAGE_DIMENSION","MIN_IMAGE_DIMENSION","clampDimension","value","name","__DEV__","console","warn","Math","max","min","arePropsEqual","prevProps","nextProps","id","imageUrl","imageBase64","width","height","cornerRadius","borderWidth","title","description","draggable","opacity","rotation","zIndex","clusteringEnabled","animation","animationDuration","animateOnReappear","accessibilityLabel","coordinate","latitude","longitude","anchor","x","y","borderColor","ImageMarker","onPress","onDragStart","onDrag","onDragEnd","clampedWidth","clampedHeight","handlers","buildMarkerData","markerId","config","style","image","gray","idPrefix","providedId"],"sourceRoot":"../../../src","sources":["components/ImageMarker.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+
3
+ // src/components/Marker.tsx
4
+ import { memo, useCallback } from 'react';
5
+ import { useNitroMarker, useMarkerHandlers } from "../hooks/useNitroMarker.js";
6
+
7
+ /**
8
+ * Props for the Marker component (default Google Maps pin)
9
+ */
10
+
11
+ // ============ Custom Memo Comparison ============
12
+ const arePropsEqual = (prevProps, nextProps) => {
13
+ // Compare primitive props
14
+ if (prevProps.id !== nextProps.id || prevProps.title !== nextProps.title || prevProps.description !== nextProps.description || prevProps.draggable !== nextProps.draggable || prevProps.opacity !== nextProps.opacity || prevProps.rotation !== nextProps.rotation || prevProps.zIndex !== nextProps.zIndex || prevProps.clusteringEnabled !== nextProps.clusteringEnabled || prevProps.animation !== nextProps.animation || prevProps.animationDuration !== nextProps.animationDuration || prevProps.animateOnReappear !== nextProps.animateOnReappear || prevProps.accessibilityLabel !== nextProps.accessibilityLabel) {
15
+ return false;
16
+ }
17
+
18
+ // Compare coordinate
19
+ if (prevProps.coordinate?.latitude !== nextProps.coordinate?.latitude || prevProps.coordinate?.longitude !== nextProps.coordinate?.longitude) {
20
+ return false;
21
+ }
22
+
23
+ // Compare anchor
24
+ if (prevProps.anchor?.x !== nextProps.anchor?.x || prevProps.anchor?.y !== nextProps.anchor?.y) {
25
+ return false;
26
+ }
27
+ return true;
28
+ };
29
+
30
+ /**
31
+ * Marker - Display the default Google Maps pin on the map
32
+ *
33
+ * The simplest marker component. Uses the standard red Google Maps pin.
34
+ * For custom images, use `<ImageMarker>`. For price tags, use `<PriceMarker>`.
35
+ *
36
+ * @example Basic marker
37
+ * ```tsx
38
+ * <Marker
39
+ * coordinate={{ latitude: 41.29, longitude: 69.24 }}
40
+ * title="Hello World"
41
+ * description="This is a default marker"
42
+ * />
43
+ * ```
44
+ *
45
+ * @example Draggable marker
46
+ * ```tsx
47
+ * <Marker
48
+ * coordinate={{ latitude: 41.30, longitude: 69.25 }}
49
+ * draggable={true}
50
+ * onDragEnd={(coord) => console.log('Dropped at:', coord)}
51
+ * />
52
+ * ```
53
+ */
54
+ export const Marker = /*#__PURE__*/memo(function Marker({
55
+ // Required
56
+ coordinate,
57
+ // Identification
58
+ id,
59
+ // Common props
60
+ title,
61
+ description,
62
+ draggable = false,
63
+ opacity = 1,
64
+ rotation = 0,
65
+ zIndex = 0,
66
+ anchor = {
67
+ x: 0.5,
68
+ y: 1.0
69
+ },
70
+ clusteringEnabled = true,
71
+ animation = 'none',
72
+ animationDuration = 0.3,
73
+ animateOnReappear = true,
74
+ accessibilityLabel,
75
+ // Events
76
+ onPress,
77
+ onDragStart,
78
+ onDrag,
79
+ onDragEnd
80
+ }) {
81
+ // Memoize handlers via shared hook
82
+ const handlers = useMarkerHandlers(onPress, onDragStart, onDrag, onDragEnd);
83
+
84
+ // Build full marker data
85
+ const buildMarkerData = useCallback(markerId => ({
86
+ id: markerId,
87
+ coordinate,
88
+ title,
89
+ description,
90
+ draggable,
91
+ opacity,
92
+ rotation,
93
+ zIndex,
94
+ anchor,
95
+ clusteringEnabled,
96
+ config: {
97
+ style: 'default'
98
+ },
99
+ accessibilityLabel,
100
+ animation,
101
+ animationDuration,
102
+ animateOnReappear
103
+ }), [coordinate, title, description, draggable, opacity, rotation, zIndex, anchor, clusteringEnabled, accessibilityLabel, animation, animationDuration, animateOnReappear]);
104
+
105
+ // Use shared marker hook
106
+ useNitroMarker({
107
+ idPrefix: 'marker',
108
+ providedId: id,
109
+ handlers,
110
+ buildMarkerData
111
+ });
112
+
113
+ // Render nothing - marker is rendered natively
114
+ return null;
115
+ }, arePropsEqual);
116
+ export { arePropsEqual as areMarkerPropsEqual };
117
+ export default Marker;
118
+ //# sourceMappingURL=Marker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","useCallback","useNitroMarker","useMarkerHandlers","arePropsEqual","prevProps","nextProps","id","title","description","draggable","opacity","rotation","zIndex","clusteringEnabled","animation","animationDuration","animateOnReappear","accessibilityLabel","coordinate","latitude","longitude","anchor","x","y","Marker","onPress","onDragStart","onDrag","onDragEnd","handlers","buildMarkerData","markerId","config","style","idPrefix","providedId","areMarkerPropsEqual"],"sourceRoot":"../../../src","sources":["components/Marker.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+
3
+ // src/components/NitroCircle.tsx
4
+ import { memo, useCallback, useEffect, useRef } from 'react';
5
+ import { useNitroCircle } from "../hooks/useNitroCircle.js";
6
+ import { parseColor, areColorsEqual, Colors } from "../utils/colors.js";
7
+ import { validateCoordinate } from "../utils/validation.js";
8
+
9
+ /**
10
+ * Props for the NitroCircle component
11
+ */
12
+
13
+ // ID generator — monotonic counter, unique within a JS runtime session
14
+ let circleIdCounter = 0;
15
+ const generateCircleId = () => `circle_${++circleIdCounter}`;
16
+
17
+ // Default colors
18
+ const defaultFillColor = {
19
+ r: 0,
20
+ g: 0,
21
+ b: 0,
22
+ a: 77
23
+ };
24
+ const defaultStrokeColor = Colors.black;
25
+
26
+ // ============ Custom Memo Comparison ============
27
+ const arePropsEqual = (prev, next) => {
28
+ if (prev.id !== next.id || prev.radius !== next.radius || prev.strokeWidth !== next.strokeWidth || prev.zIndex !== next.zIndex || prev.tappable !== next.tappable || prev.accessibilityLabel !== next.accessibilityLabel) {
29
+ return false;
30
+ }
31
+
32
+ // Compare center
33
+ if (prev.center.latitude !== next.center.latitude || prev.center.longitude !== next.center.longitude) {
34
+ return false;
35
+ }
36
+ if (!areColorsEqual(prev.fillColor, next.fillColor)) return false;
37
+ if (!areColorsEqual(prev.strokeColor, next.strokeColor)) return false;
38
+ return true;
39
+ };
40
+
41
+ /**
42
+ * NitroCircle - Draw a circle overlay on the map
43
+ *
44
+ * @example Basic circle
45
+ * ```tsx
46
+ * <NitroCircle
47
+ * center={{ latitude: 41.31, longitude: 69.26 }}
48
+ * radius={500}
49
+ * fillColor="#4285F440"
50
+ * strokeColor="#4285F4"
51
+ * strokeWidth={2}
52
+ * />
53
+ * ```
54
+ */
55
+ export const NitroCircle = /*#__PURE__*/memo(function NitroCircle({
56
+ id,
57
+ center,
58
+ radius,
59
+ fillColor,
60
+ strokeColor,
61
+ strokeWidth = 1,
62
+ zIndex = 0,
63
+ tappable = false,
64
+ accessibilityLabel
65
+ }) {
66
+ useEffect(() => {
67
+ if (__DEV__) {
68
+ if (radius <= 0) {
69
+ console.warn('NitroCircle: radius must be a positive number. ' + `Received ${radius}.`);
70
+ }
71
+ validateCoordinate(center, 'NitroCircle center');
72
+ }
73
+ // eslint-disable-next-line react-hooks/exhaustive-deps
74
+ }, []);
75
+ const circleId = useRef(id || generateCircleId()).current;
76
+ const buildCircleData = useCallback(() => ({
77
+ id: circleId,
78
+ center,
79
+ radius,
80
+ fillColor: parseColor(fillColor) ?? defaultFillColor,
81
+ strokeColor: parseColor(strokeColor) ?? defaultStrokeColor,
82
+ strokeWidth,
83
+ zIndex,
84
+ tappable,
85
+ accessibilityLabel
86
+ }), [circleId, center, radius, fillColor, strokeColor, strokeWidth, zIndex, tappable, accessibilityLabel]);
87
+ useNitroCircle(buildCircleData);
88
+ return null;
89
+ }, arePropsEqual);
90
+ export { arePropsEqual as areCirclePropsEqual };
91
+ export default NitroCircle;
92
+ //# sourceMappingURL=NitroCircle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["memo","useCallback","useEffect","useRef","useNitroCircle","parseColor","areColorsEqual","Colors","validateCoordinate","circleIdCounter","generateCircleId","defaultFillColor","r","g","b","a","defaultStrokeColor","black","arePropsEqual","prev","next","id","radius","strokeWidth","zIndex","tappable","accessibilityLabel","center","latitude","longitude","fillColor","strokeColor","NitroCircle","__DEV__","console","warn","circleId","current","buildCircleData","areCirclePropsEqual"],"sourceRoot":"../../../src","sources":["components/NitroCircle.tsx"],"mappings":"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","ignoreList":[]}