@maydon_tech/react-native-nitro-maps 0.1.4 → 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.
- package/LICENSE +1 -1
- package/NitroMap.podspec +1 -1
- package/README.md +82 -9
- package/android/CMakeLists.txt +4 -1
- package/android/gradle.properties +4 -4
- package/android/src/main/cpp/ClusterEngineJNI.cpp +198 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/NitroMap.kt +397 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/NitroMapConfig.kt +53 -0
- package/android/src/main/{java → kotlin}/com/margelo/nitro/nitromap/NitroMapPackage.kt +4 -4
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/NitroMapView.kt +73 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/UserLocationManager.kt +295 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/clustering/ClusterIconRenderer.kt +111 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/clustering/ClusteringManager.kt +104 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/clustering/NitroClusterEngine.kt +166 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/markers/MarkerIconFactory.kt +303 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/markers/MarkerSelectionHandler.kt +72 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/markers/PriceMarkerRenderer.kt +159 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/MapProviderFactory.kt +24 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/MapProviderInterface.kt +128 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/GoogleMapDelegate.kt +317 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/GoogleMapProvider+Clustering.kt +524 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/GoogleMapProvider+Markers.kt +358 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/GoogleMapProvider+Overlays.kt +272 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/GoogleMapProvider+UserLocation.kt +296 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/GoogleMapProvider.kt +815 -0
- package/android/src/main/kotlin/com/margelo/nitro/nitromap/providers/google/MarkerTagData.kt +19 -0
- package/ios/Location/NitroLocationManager.swift +116 -0
- package/ios/MarkerRenderer/MarkerIconFactory.swift +1 -3
- package/ios/MarkerRenderer/PriceMarkerRenderer.swift +10 -6
- package/ios/NitroMap.swift +279 -13
- package/ios/NitroMapConfig/NitroMapConfig.swift +45 -0
- package/ios/Providers/{GoogleMapDelegate.swift → Google/GoogleMapDelegate.swift} +48 -23
- package/ios/Providers/Google/GoogleMapProvider+Camera.swift +180 -0
- package/ios/Providers/Google/GoogleMapProvider+Clustering.swift +541 -0
- package/ios/Providers/Google/GoogleMapProvider+Markers.swift +270 -0
- package/ios/Providers/Google/GoogleMapProvider+Overlays.swift +245 -0
- package/ios/Providers/Google/GoogleMapProvider+UserLocation.swift +180 -0
- package/ios/Providers/Google/GoogleMapProvider.swift +342 -0
- package/ios/Providers/MapProviderFactory.swift +17 -0
- package/ios/Providers/MapProviderProtocol.swift +48 -1
- package/ios/Shared/ClusterConfig+Factory.swift +2 -2
- package/ios/Shared/MapStyleProvider.swift +6 -4
- package/ios/Shared/MarkerSelectionHandler.swift +4 -1
- package/ios/Utils/ColorValueExtension.swift +46 -67
- package/lib/module/components/ImageMarker.js +39 -29
- package/lib/module/components/ImageMarker.js.map +1 -1
- package/lib/module/components/Marker.js +118 -0
- package/lib/module/components/Marker.js.map +1 -0
- package/lib/module/components/NitroCircle.js +92 -0
- package/lib/module/components/NitroCircle.js.map +1 -0
- package/lib/module/components/NitroMap.js +216 -76
- package/lib/module/components/NitroMap.js.map +1 -1
- package/lib/module/components/NitroPolygon.js +135 -0
- package/lib/module/components/NitroPolygon.js.map +1 -0
- package/lib/module/components/NitroPolyline.js +115 -0
- package/lib/module/components/NitroPolyline.js.map +1 -0
- package/lib/module/components/PriceMarker.js +16 -29
- package/lib/module/components/PriceMarker.js.map +1 -1
- package/lib/module/context/NitroMapContext.js.map +1 -1
- package/lib/module/hooks/useNitroCircle.js +18 -0
- package/lib/module/hooks/useNitroCircle.js.map +1 -0
- package/lib/module/hooks/useNitroMarker.js +26 -9
- package/lib/module/hooks/useNitroMarker.js.map +1 -1
- package/lib/module/hooks/useNitroOverlay.js +59 -0
- package/lib/module/hooks/useNitroOverlay.js.map +1 -0
- package/lib/module/hooks/useNitroPolygon.js +18 -0
- package/lib/module/hooks/useNitroPolygon.js.map +1 -0
- package/lib/module/hooks/useNitroPolyline.js +18 -0
- package/lib/module/hooks/useNitroPolyline.js.map +1 -0
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/types/overlay.js +4 -0
- package/lib/module/types/overlay.js.map +1 -0
- package/lib/module/types/theme.js +4 -0
- package/lib/module/types/theme.js.map +1 -0
- package/lib/module/utils/colors.js +41 -13
- package/lib/module/utils/colors.js.map +1 -1
- package/lib/module/utils/validation.js +45 -0
- package/lib/module/utils/validation.js.map +1 -0
- package/lib/typescript/src/components/ImageMarker.d.ts.map +1 -1
- package/lib/typescript/src/components/Marker.d.ts +34 -0
- package/lib/typescript/src/components/Marker.d.ts.map +1 -0
- package/lib/typescript/src/components/NitroCircle.d.ts +70 -0
- package/lib/typescript/src/components/NitroCircle.d.ts.map +1 -0
- package/lib/typescript/src/components/NitroMap.d.ts +60 -3
- package/lib/typescript/src/components/NitroMap.d.ts.map +1 -1
- package/lib/typescript/src/components/NitroPolygon.d.ts +86 -0
- package/lib/typescript/src/components/NitroPolygon.d.ts.map +1 -0
- package/lib/typescript/src/components/NitroPolyline.d.ts +84 -0
- package/lib/typescript/src/components/NitroPolyline.d.ts.map +1 -0
- package/lib/typescript/src/components/PriceMarker.d.ts +0 -5
- package/lib/typescript/src/components/PriceMarker.d.ts.map +1 -1
- package/lib/typescript/src/context/NitroMapContext.d.ts +2 -0
- package/lib/typescript/src/context/NitroMapContext.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useNitroCircle.d.ts +7 -0
- package/lib/typescript/src/hooks/useNitroCircle.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useNitroMarker.d.ts +20 -0
- package/lib/typescript/src/hooks/useNitroMarker.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useNitroOverlay.d.ts +26 -0
- package/lib/typescript/src/hooks/useNitroOverlay.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useNitroPolygon.d.ts +7 -0
- package/lib/typescript/src/hooks/useNitroPolygon.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useNitroPolyline.d.ts +7 -0
- package/lib/typescript/src/hooks/useNitroPolyline.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +15 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/specs/NitroMap.nitro.d.ts +248 -6
- package/lib/typescript/src/specs/NitroMap.nitro.d.ts.map +1 -1
- package/lib/typescript/src/types/map.d.ts +34 -4
- package/lib/typescript/src/types/map.d.ts.map +1 -1
- package/lib/typescript/src/types/marker.d.ts +24 -36
- package/lib/typescript/src/types/marker.d.ts.map +1 -1
- package/lib/typescript/src/types/overlay.d.ts +75 -0
- package/lib/typescript/src/types/overlay.d.ts.map +1 -0
- package/lib/typescript/src/types/theme.d.ts +93 -0
- package/lib/typescript/src/types/theme.d.ts.map +1 -0
- package/lib/typescript/src/utils/colors.d.ts +6 -8
- package/lib/typescript/src/utils/colors.d.ts.map +1 -1
- package/lib/typescript/src/utils/validation.d.ts +12 -0
- package/lib/typescript/src/utils/validation.d.ts.map +1 -0
- package/nitrogen/generated/android/c++/JCircleData.hpp +94 -0
- package/nitrogen/generated/android/c++/JClusterConfig.hpp +5 -7
- package/nitrogen/generated/android/c++/JFunc_void_UserLocationChangeEvent.hpp +79 -0
- package/nitrogen/generated/android/c++/JFunc_void_UserTrackingMode.hpp +77 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__string.hpp +76 -0
- package/nitrogen/generated/android/c++/JHybridNitroMapSpec.cpp +328 -21
- package/nitrogen/generated/android/c++/JHybridNitroMapSpec.hpp +53 -2
- package/nitrogen/generated/android/c++/JMarkerAnimation.hpp +3 -6
- package/nitrogen/generated/android/c++/JMarkerData.hpp +15 -3
- package/nitrogen/generated/android/c++/JPolygonData.hpp +149 -0
- package/nitrogen/generated/android/c++/JPolylineData.hpp +113 -0
- package/nitrogen/generated/android/c++/JUserLocationChangeEvent.hpp +70 -0
- package/nitrogen/generated/android/c++/JUserTrackingMode.hpp +62 -0
- package/nitrogen/generated/android/c++/views/JHybridNitroMapStateUpdater.cpp +72 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/CircleData.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/ClusterConfig.kt +4 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Func_void_UserLocationChangeEvent.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Func_void_UserTrackingMode.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/Func_void_std__string.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/HybridNitroMapSpec.kt +228 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MarkerAnimation.kt +1 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/MarkerData.kt +12 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/PolygonData.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/PolylineData.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/UserLocationChangeEvent.kt +47 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitromap/{ClusterAnimationStyle.kt → UserTrackingMode.kt} +6 -8
- package/nitrogen/generated/android/nitromapOnLoad.cpp +6 -0
- package/nitrogen/generated/ios/NitroMap-Swift-Cxx-Bridge.cpp +24 -0
- package/nitrogen/generated/ios/NitroMap-Swift-Cxx-Bridge.hpp +175 -17
- package/nitrogen/generated/ios/NitroMap-Swift-Cxx-Umbrella.hpp +15 -3
- package/nitrogen/generated/ios/c++/HybridNitroMapSpecSwift.hpp +249 -16
- package/nitrogen/generated/ios/c++/views/HybridNitroMapComponent.mm +90 -5
- package/nitrogen/generated/ios/swift/CircleData.swift +143 -0
- package/nitrogen/generated/ios/swift/ClusterConfig.swift +22 -15
- package/nitrogen/generated/ios/swift/Func_void_UserLocationChangeEvent.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_UserTrackingMode.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string.swift +47 -0
- package/nitrogen/generated/ios/swift/HybridNitroMapSpec.swift +35 -1
- package/nitrogen/generated/ios/swift/HybridNitroMapSpec_cxx.swift +582 -8
- package/nitrogen/generated/ios/swift/MarkerAnimation.swift +4 -8
- package/nitrogen/generated/ios/swift/MarkerData.swift +54 -2
- package/nitrogen/generated/ios/swift/PolygonData.swift +179 -0
- package/nitrogen/generated/ios/swift/PolylineData.swift +155 -0
- package/nitrogen/generated/ios/swift/UserLocationChangeEvent.swift +69 -0
- package/nitrogen/generated/ios/swift/UserTrackingMode.swift +44 -0
- package/nitrogen/generated/shared/c++/CircleData.hpp +113 -0
- package/nitrogen/generated/shared/c++/ClusterConfig.hpp +5 -8
- package/nitrogen/generated/shared/c++/HybridNitroMapSpec.cpp +53 -2
- package/nitrogen/generated/shared/c++/HybridNitroMapSpec.hpp +75 -6
- package/nitrogen/generated/shared/c++/MarkerAnimation.hpp +4 -8
- package/nitrogen/generated/shared/c++/MarkerData.hpp +14 -2
- package/nitrogen/generated/shared/c++/PolygonData.hpp +114 -0
- package/nitrogen/generated/shared/c++/PolylineData.hpp +114 -0
- package/nitrogen/generated/shared/c++/UserLocationChangeEvent.hpp +88 -0
- package/nitrogen/generated/shared/c++/UserTrackingMode.hpp +80 -0
- package/nitrogen/generated/shared/c++/views/HybridNitroMapComponent.cpp +216 -12
- package/nitrogen/generated/shared/c++/views/HybridNitroMapComponent.hpp +23 -1
- package/nitrogen/generated/shared/json/NitroMapConfig.json +18 -1
- package/package.json +36 -5
- package/src/components/ImageMarker.tsx +58 -42
- package/src/components/Marker.tsx +161 -0
- package/src/components/NitroCircle.tsx +183 -0
- package/src/components/NitroMap.tsx +328 -78
- package/src/components/NitroPolygon.tsx +229 -0
- package/src/components/NitroPolyline.tsx +208 -0
- package/src/components/PriceMarker.tsx +23 -48
- package/src/context/NitroMapContext.tsx +4 -0
- package/src/hooks/useNitroCircle.ts +25 -0
- package/src/hooks/useNitroMarker.ts +49 -10
- package/src/hooks/useNitroOverlay.ts +68 -0
- package/src/hooks/useNitroPolygon.ts +25 -0
- package/src/hooks/useNitroPolyline.ts +25 -0
- package/src/index.tsx +23 -2
- package/src/specs/NitroMap.nitro.ts +294 -5
- package/src/types/map.ts +36 -4
- package/src/types/marker.ts +24 -44
- package/src/types/overlay.ts +77 -0
- package/src/types/theme.ts +101 -0
- package/src/utils/colors.ts +48 -16
- package/src/utils/validation.ts +69 -0
- package/android/src/main/java/com/margelo/nitro/nitromap/ClusterIconGenerator.kt +0 -108
- package/android/src/main/java/com/margelo/nitro/nitromap/ColorUtils.kt +0 -63
- package/android/src/main/java/com/margelo/nitro/nitromap/HybridNitroMap.kt +0 -408
- package/android/src/main/java/com/margelo/nitro/nitromap/HybridNitroMapConfig.kt +0 -68
- package/android/src/main/java/com/margelo/nitro/nitromap/MarkerIconCache.kt +0 -176
- package/android/src/main/java/com/margelo/nitro/nitromap/MarkerIconFactory.kt +0 -252
- package/android/src/main/java/com/margelo/nitro/nitromap/clustering/NitroClusterEngine.kt +0 -252
- package/android/src/main/java/com/margelo/nitro/nitromap/clustering/QuadTree.kt +0 -195
- package/android/src/main/java/com/margelo/nitro/nitromap/providers/GoogleMapProvider.kt +0 -912
- package/android/src/main/java/com/margelo/nitro/nitromap/providers/MapProviderInterface.kt +0 -70
- package/cpp/QuadTree.hpp +0 -246
- package/ios/NitroMapConfig/HybridNitroMapConfig.swift +0 -33
- package/ios/Providers/GoogleMapProvider+Camera.swift +0 -164
- package/ios/Providers/GoogleMapProvider.swift +0 -924
- package/nitrogen/generated/android/c++/JClusterAnimationStyle.hpp +0 -68
- package/nitrogen/generated/ios/swift/ClusterAnimationStyle.swift +0 -52
- package/nitrogen/generated/shared/c++/ClusterAnimationStyle.hpp +0 -88
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// src/components/NitroPolyline.tsx
|
|
4
|
+
import { memo, useCallback, useEffect, useRef } from 'react';
|
|
5
|
+
import { useNitroPolyline } from "../hooks/useNitroPolyline.js";
|
|
6
|
+
import { parseColor, areColorsEqual, Colors } from "../utils/colors.js";
|
|
7
|
+
import { validateCoordinates } from "../utils/validation.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Props for the NitroPolyline component
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
// ID generator — monotonic counter, unique within a JS runtime session
|
|
14
|
+
let polylineIdCounter = 0;
|
|
15
|
+
const generatePolylineId = () => `polyline_${++polylineIdCounter}`;
|
|
16
|
+
|
|
17
|
+
// Default stroke color (black)
|
|
18
|
+
const defaultStrokeColor = Colors.black;
|
|
19
|
+
|
|
20
|
+
// ============ Custom Memo Comparison ============
|
|
21
|
+
const arePropsEqual = (prev, next) => {
|
|
22
|
+
// Compare primitives
|
|
23
|
+
if (prev.id !== next.id || prev.strokeWidth !== next.strokeWidth || prev.geodesic !== next.geodesic || prev.dashed !== next.dashed || prev.zIndex !== next.zIndex || prev.tappable !== next.tappable || prev.accessibilityLabel !== next.accessibilityLabel) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Compare strokeColor
|
|
28
|
+
if (!areColorsEqual(prev.strokeColor, next.strokeColor)) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Compare coordinates array (deep)
|
|
33
|
+
const prevCoords = prev.coordinates;
|
|
34
|
+
const nextCoords = next.coordinates;
|
|
35
|
+
if (prevCoords.length !== nextCoords.length) return false;
|
|
36
|
+
for (let i = 0; i < prevCoords.length; i++) {
|
|
37
|
+
if (prevCoords[i].latitude !== nextCoords[i].latitude || prevCoords[i].longitude !== nextCoords[i].longitude) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return true;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* NitroPolyline - Draw a line connecting multiple geographic points on the map
|
|
46
|
+
*
|
|
47
|
+
* @example Basic route line
|
|
48
|
+
* ```tsx
|
|
49
|
+
* <NitroPolyline
|
|
50
|
+
* coordinates={[
|
|
51
|
+
* { latitude: 41.29, longitude: 69.24 },
|
|
52
|
+
* { latitude: 41.31, longitude: 69.28 },
|
|
53
|
+
* ]}
|
|
54
|
+
* strokeColor="#4285F4"
|
|
55
|
+
* strokeWidth={4}
|
|
56
|
+
* />
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* @example Geodesic dashed line
|
|
60
|
+
* ```tsx
|
|
61
|
+
* <NitroPolyline
|
|
62
|
+
* coordinates={routeCoordinates}
|
|
63
|
+
* strokeColor="#FF0000"
|
|
64
|
+
* strokeWidth={2}
|
|
65
|
+
* geodesic={true}
|
|
66
|
+
* dashed={true}
|
|
67
|
+
* />
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export const NitroPolyline = /*#__PURE__*/memo(function NitroPolyline({
|
|
71
|
+
id,
|
|
72
|
+
coordinates,
|
|
73
|
+
strokeColor,
|
|
74
|
+
strokeWidth = 1,
|
|
75
|
+
geodesic = false,
|
|
76
|
+
dashed = false,
|
|
77
|
+
zIndex = 0,
|
|
78
|
+
tappable = false,
|
|
79
|
+
accessibilityLabel
|
|
80
|
+
}) {
|
|
81
|
+
useEffect(() => {
|
|
82
|
+
if (__DEV__) {
|
|
83
|
+
if (coordinates.length < 2) {
|
|
84
|
+
console.warn('NitroPolyline: at least 2 coordinates are required to render a visible line. ' + `Received ${coordinates.length}.`);
|
|
85
|
+
}
|
|
86
|
+
validateCoordinates(coordinates, 'NitroPolyline');
|
|
87
|
+
}
|
|
88
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
89
|
+
}, []);
|
|
90
|
+
|
|
91
|
+
// Generate stable ID
|
|
92
|
+
const polylineId = useRef(id || generatePolylineId()).current;
|
|
93
|
+
|
|
94
|
+
// Build polyline data
|
|
95
|
+
const buildPolylineData = useCallback(() => ({
|
|
96
|
+
id: polylineId,
|
|
97
|
+
coordinates,
|
|
98
|
+
strokeColor: parseColor(strokeColor) ?? defaultStrokeColor,
|
|
99
|
+
strokeWidth,
|
|
100
|
+
geodesic,
|
|
101
|
+
dashed,
|
|
102
|
+
zIndex,
|
|
103
|
+
tappable,
|
|
104
|
+
accessibilityLabel
|
|
105
|
+
}), [polylineId, coordinates, strokeColor, strokeWidth, geodesic, dashed, zIndex, tappable, accessibilityLabel]);
|
|
106
|
+
|
|
107
|
+
// Use polyline lifecycle hook
|
|
108
|
+
useNitroPolyline(buildPolylineData);
|
|
109
|
+
|
|
110
|
+
// Render nothing — polyline is rendered natively
|
|
111
|
+
return null;
|
|
112
|
+
}, arePropsEqual);
|
|
113
|
+
export { arePropsEqual as arePolylinePropsEqual };
|
|
114
|
+
export default NitroPolyline;
|
|
115
|
+
//# sourceMappingURL=NitroPolyline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["memo","useCallback","useEffect","useRef","useNitroPolyline","parseColor","areColorsEqual","Colors","validateCoordinates","polylineIdCounter","generatePolylineId","defaultStrokeColor","black","arePropsEqual","prev","next","id","strokeWidth","geodesic","dashed","zIndex","tappable","accessibilityLabel","strokeColor","prevCoords","coordinates","nextCoords","length","i","latitude","longitude","NitroPolyline","__DEV__","console","warn","polylineId","current","buildPolylineData","arePolylinePropsEqual"],"sourceRoot":"../../../src","sources":["components/NitroPolyline.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
// src/components/PriceMarker.tsx
|
|
4
|
-
import { memo, useCallback
|
|
5
|
-
import { useNitroMarker } from "../hooks/useNitroMarker.js";
|
|
6
|
-
import { parseColor } from "../utils/colors.js";
|
|
4
|
+
import { memo, useCallback } from 'react';
|
|
5
|
+
import { useNitroMarker, useMarkerHandlers } from "../hooks/useNitroMarker.js";
|
|
6
|
+
import { parseColor, areColorsEqual } from "../utils/colors.js";
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Props for the PriceMarker component
|
|
@@ -12,7 +12,7 @@ import { parseColor } from "../utils/colors.js";
|
|
|
12
12
|
// ============ Custom Memo Comparison ============
|
|
13
13
|
const arePropsEqual = (prevProps, nextProps) => {
|
|
14
14
|
// Compare primitive props
|
|
15
|
-
if (prevProps.id !== nextProps.id || prevProps.price !== nextProps.price || prevProps.currency !== nextProps.currency || prevProps.selected !== nextProps.selected || 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.
|
|
15
|
+
if (prevProps.id !== nextProps.id || prevProps.price !== nextProps.price || prevProps.currency !== nextProps.currency || prevProps.selected !== nextProps.selected || 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.fontSize !== nextProps.fontSize || prevProps.paddingHorizontal !== nextProps.paddingHorizontal || prevProps.paddingVertical !== nextProps.paddingVertical || prevProps.shadowOpacity !== nextProps.shadowOpacity || prevProps.accessibilityLabel !== nextProps.accessibilityLabel) {
|
|
16
16
|
return false;
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -25,21 +25,7 @@ const arePropsEqual = (prevProps, nextProps) => {
|
|
|
25
25
|
if (prevProps.anchor?.x !== nextProps.anchor?.x || prevProps.anchor?.y !== nextProps.anchor?.y) {
|
|
26
26
|
return false;
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
// Compare colors (handles both hex strings and MarkerColor objects)
|
|
30
|
-
const compareColors = (a, b) => {
|
|
31
|
-
if (!a && !b) return true;
|
|
32
|
-
if (!a || !b) return false;
|
|
33
|
-
// If both are strings, compare directly
|
|
34
|
-
if (typeof a === 'string' && typeof b === 'string') return a === b;
|
|
35
|
-
// If types differ, not equal
|
|
36
|
-
if (typeof a !== typeof b) return false;
|
|
37
|
-
// Both are MarkerColor objects
|
|
38
|
-
const aColor = a;
|
|
39
|
-
const bColor = b;
|
|
40
|
-
return aColor.r === bColor.r && aColor.g === bColor.g && aColor.b === bColor.b && aColor.a === bColor.a;
|
|
41
|
-
};
|
|
42
|
-
if (!compareColors(prevProps.backgroundColor, nextProps.backgroundColor) || !compareColors(prevProps.textColor, nextProps.textColor) || !compareColors(prevProps.selectedBackgroundColor, nextProps.selectedBackgroundColor) || !compareColors(prevProps.selectedTextColor, nextProps.selectedTextColor)) {
|
|
28
|
+
if (!areColorsEqual(prevProps.backgroundColor, nextProps.backgroundColor) || !areColorsEqual(prevProps.textColor, nextProps.textColor) || !areColorsEqual(prevProps.selectedBackgroundColor, nextProps.selectedBackgroundColor) || !areColorsEqual(prevProps.selectedTextColor, nextProps.selectedTextColor)) {
|
|
43
29
|
return false;
|
|
44
30
|
}
|
|
45
31
|
return true;
|
|
@@ -79,7 +65,7 @@ export const PriceMarker = /*#__PURE__*/memo(function PriceMarker({
|
|
|
79
65
|
backgroundColor,
|
|
80
66
|
textColor,
|
|
81
67
|
fontSize = 14,
|
|
82
|
-
// cornerRadius
|
|
68
|
+
// cornerRadius was removed — not forwarded to native
|
|
83
69
|
selectedBackgroundColor,
|
|
84
70
|
selectedTextColor,
|
|
85
71
|
paddingHorizontal,
|
|
@@ -98,6 +84,9 @@ export const PriceMarker = /*#__PURE__*/memo(function PriceMarker({
|
|
|
98
84
|
},
|
|
99
85
|
clusteringEnabled = true,
|
|
100
86
|
animation = 'none',
|
|
87
|
+
animationDuration = 0.3,
|
|
88
|
+
animateOnReappear = true,
|
|
89
|
+
accessibilityLabel,
|
|
101
90
|
// Events
|
|
102
91
|
onPress,
|
|
103
92
|
onDragStart,
|
|
@@ -126,13 +115,8 @@ export const PriceMarker = /*#__PURE__*/memo(function PriceMarker({
|
|
|
126
115
|
};
|
|
127
116
|
}, [price, currency, selected, backgroundColor, textColor, fontSize, selectedBackgroundColor, selectedTextColor, paddingHorizontal, paddingVertical, shadowOpacity]);
|
|
128
117
|
|
|
129
|
-
// Memoize handlers
|
|
130
|
-
const handlers =
|
|
131
|
-
onPress,
|
|
132
|
-
onDragStart,
|
|
133
|
-
onDrag,
|
|
134
|
-
onDragEnd
|
|
135
|
-
}), [onPress, onDragStart, onDrag, onDragEnd]);
|
|
118
|
+
// Memoize handlers via shared hook
|
|
119
|
+
const handlers = useMarkerHandlers(onPress, onDragStart, onDrag, onDragEnd);
|
|
136
120
|
|
|
137
121
|
// Build full marker data
|
|
138
122
|
const buildMarkerData = useCallback(markerId => ({
|
|
@@ -147,8 +131,11 @@ export const PriceMarker = /*#__PURE__*/memo(function PriceMarker({
|
|
|
147
131
|
anchor,
|
|
148
132
|
clusteringEnabled,
|
|
149
133
|
config: buildMarkerConfig(),
|
|
150
|
-
|
|
151
|
-
|
|
134
|
+
accessibilityLabel,
|
|
135
|
+
animation,
|
|
136
|
+
animationDuration,
|
|
137
|
+
animateOnReappear
|
|
138
|
+
}), [coordinate, title, description, draggable, opacity, rotation, zIndex, anchor, clusteringEnabled, buildMarkerConfig, accessibilityLabel, animation, animationDuration, animateOnReappear]);
|
|
152
139
|
|
|
153
140
|
// Use shared marker hook
|
|
154
141
|
useNitroMarker({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["memo","useCallback","
|
|
1
|
+
{"version":3,"names":["memo","useCallback","useNitroMarker","useMarkerHandlers","parseColor","areColorsEqual","arePropsEqual","prevProps","nextProps","id","price","currency","selected","title","description","draggable","opacity","rotation","zIndex","clusteringEnabled","animation","animationDuration","animateOnReappear","fontSize","paddingHorizontal","paddingVertical","shadowOpacity","accessibilityLabel","coordinate","latitude","longitude","anchor","x","y","backgroundColor","textColor","selectedBackgroundColor","selectedTextColor","PriceMarker","onPress","onDragStart","onDrag","onDragEnd","buildMarkerConfig","style","priceMarker","handlers","buildMarkerData","markerId","config","idPrefix","providedId"],"sourceRoot":"../../../src","sources":["components/PriceMarker.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createContext","NitroMapContext","displayName"],"sourceRoot":"../../../src","sources":["context/NitroMapContext.tsx"],"mappings":";;AAAA;AACA,SAASA,aAAa,QAAQ,OAAO;;AAIrC;;AAQA;;
|
|
1
|
+
{"version":3,"names":["createContext","NitroMapContext","displayName"],"sourceRoot":"../../../src","sources":["context/NitroMapContext.tsx"],"mappings":";;AAAA;AACA,SAASA,aAAa,QAAQ,OAAO;;AAIrC;;AAQA;;AAmBA;AACA,OAAO,MAAMC,eAAe,gBAAGD,aAAa,CAA8B,IAAI,CAAC;;AAE/E;AACAC,eAAe,CAACC,WAAW,GAAG,iBAAiB","ignoreList":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// src/hooks/useNitroCircle.ts
|
|
4
|
+
import { useCallback } from 'react';
|
|
5
|
+
import { useNitroOverlay } from "./useNitroOverlay.js";
|
|
6
|
+
/**
|
|
7
|
+
* Hook for circle lifecycle management.
|
|
8
|
+
* Adds circle on mount, updates on prop changes, removes on unmount.
|
|
9
|
+
*/
|
|
10
|
+
export function useNitroCircle(buildCircleData) {
|
|
11
|
+
const getMethods = useCallback(mapRef => ({
|
|
12
|
+
add: data => mapRef.addCircle(data),
|
|
13
|
+
update: data => mapRef.updateCircle(data),
|
|
14
|
+
remove: id => mapRef.removeCircle(id)
|
|
15
|
+
}), []);
|
|
16
|
+
useNitroOverlay(buildCircleData, getMethods);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=useNitroCircle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useNitroOverlay","useNitroCircle","buildCircleData","getMethods","mapRef","add","data","addCircle","update","updateCircle","remove","id","removeCircle"],"sourceRoot":"../../../src","sources":["hooks/useNitroCircle.ts"],"mappings":";;AAAA;AACA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,eAAe,QAAQ,sBAAmB;AAGnD;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAACC,eAAiC,EAAQ;EACtE,MAAMC,UAAU,GAAGJ,WAAW,CAC3BK,MAIA,KAAM;IACLC,GAAG,EAAGC,IAAgB,IAAKF,MAAM,CAACG,SAAS,CAACD,IAAI,CAAC;IACjDE,MAAM,EAAGF,IAAgB,IAAKF,MAAM,CAACK,YAAY,CAACH,IAAI,CAAC;IACvDI,MAAM,EAAGC,EAAU,IAAKP,MAAM,CAACQ,YAAY,CAACD,EAAE;EAChD,CAAC,CAAC,EACF,EACF,CAAC;EAEDX,eAAe,CAACE,eAAe,EAAEC,UAAU,CAAC;AAC9C","ignoreList":[]}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
// src/hooks/useNitroMarker.ts
|
|
4
|
-
import { useContext, useEffect, useRef,
|
|
4
|
+
import { useContext, useEffect, useRef, useMemo } from 'react';
|
|
5
5
|
import { NitroMapContext } from "../context/NitroMapContext.js";
|
|
6
|
+
import { validateCoordinate } from "../utils/validation.js";
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Base marker data structure for internal use
|
|
@@ -12,9 +13,10 @@ import { NitroMapContext } from "../context/NitroMapContext.js";
|
|
|
12
13
|
* Props shared by all marker components
|
|
13
14
|
*/
|
|
14
15
|
|
|
15
|
-
//
|
|
16
|
+
// Module-level monotonic counter for generating unique marker IDs.
|
|
17
|
+
// Monotonically increasing — guaranteed unique within a JS runtime session.
|
|
16
18
|
let markerIdCounter = 0;
|
|
17
|
-
const generateMarkerId = prefix => `${prefix}_${++markerIdCounter}
|
|
19
|
+
const generateMarkerId = prefix => `${prefix}_${++markerIdCounter}`;
|
|
18
20
|
|
|
19
21
|
/**
|
|
20
22
|
* Hook options for useNitroMarker
|
|
@@ -42,7 +44,9 @@ export function useNitroMarker({
|
|
|
42
44
|
// ============ Register Event Handlers ============
|
|
43
45
|
useEffect(() => {
|
|
44
46
|
if (!mapContext) {
|
|
45
|
-
|
|
47
|
+
if (__DEV__) {
|
|
48
|
+
console.warn(`${idPrefix} must be used inside NitroMap`);
|
|
49
|
+
}
|
|
46
50
|
return;
|
|
47
51
|
}
|
|
48
52
|
|
|
@@ -53,7 +57,8 @@ export function useNitroMarker({
|
|
|
53
57
|
return () => {
|
|
54
58
|
mapContext.unregisterMarkerHandler(markerId);
|
|
55
59
|
};
|
|
56
|
-
//
|
|
60
|
+
// Handlers are spread into individual deps so the effect re-runs
|
|
61
|
+
// only when a specific handler changes, not when the object ref changes.
|
|
57
62
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
58
63
|
}, [markerId, mapContext, handlers.onPress, handlers.onDragStart, handlers.onDrag, handlers.onDragEnd, idPrefix]);
|
|
59
64
|
|
|
@@ -65,15 +70,25 @@ export function useNitroMarker({
|
|
|
65
70
|
return;
|
|
66
71
|
}
|
|
67
72
|
|
|
73
|
+
// Track marker ID for duplicate detection
|
|
74
|
+
mapContext?.trackMarkerId(markerId);
|
|
75
|
+
|
|
76
|
+
// Validate coordinate in dev mode
|
|
77
|
+
const markerData = buildMarkerData(markerId);
|
|
78
|
+
validateCoordinate(markerData.coordinate, `marker "${markerId}"`);
|
|
79
|
+
|
|
68
80
|
// Add marker on mount
|
|
69
|
-
mapRef.addMarker(
|
|
81
|
+
mapRef.addMarker(markerData);
|
|
70
82
|
isAddedRef.current = true;
|
|
71
83
|
|
|
72
84
|
// Remove marker only on unmount
|
|
73
85
|
return () => {
|
|
86
|
+
mapContext?.untrackMarkerId(markerId);
|
|
74
87
|
mapRef?.removeMarker(markerId);
|
|
75
88
|
isAddedRef.current = false;
|
|
76
89
|
};
|
|
90
|
+
// buildMarkerData is intentionally excluded — we only want mount/unmount behavior.
|
|
91
|
+
// Updates are handled by the third useEffect below.
|
|
77
92
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
78
93
|
}, [mapRef, markerId]); // mapRef is now properly tracked
|
|
79
94
|
|
|
@@ -85,7 +100,9 @@ export function useNitroMarker({
|
|
|
85
100
|
}
|
|
86
101
|
|
|
87
102
|
// Update marker with new data
|
|
88
|
-
|
|
103
|
+
const updatedData = buildMarkerData(markerId);
|
|
104
|
+
validateCoordinate(updatedData.coordinate, `marker "${markerId}"`);
|
|
105
|
+
mapContext.mapRef.updateMarker(updatedData);
|
|
89
106
|
}, [mapContext, buildMarkerData, markerId]);
|
|
90
107
|
return markerId;
|
|
91
108
|
}
|
|
@@ -94,11 +111,11 @@ export function useNitroMarker({
|
|
|
94
111
|
* Create stable handlers object that won't cause unnecessary re-renders
|
|
95
112
|
*/
|
|
96
113
|
export function useMarkerHandlers(onPress, onDragStart, onDrag, onDragEnd) {
|
|
97
|
-
return
|
|
114
|
+
return useMemo(() => ({
|
|
98
115
|
onPress,
|
|
99
116
|
onDragStart,
|
|
100
117
|
onDrag,
|
|
101
118
|
onDragEnd
|
|
102
|
-
}), [onPress, onDragStart, onDrag, onDragEnd])
|
|
119
|
+
}), [onPress, onDragStart, onDrag, onDragEnd]);
|
|
103
120
|
}
|
|
104
121
|
//# sourceMappingURL=useNitroMarker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useContext","useEffect","useRef","
|
|
1
|
+
{"version":3,"names":["useContext","useEffect","useRef","useMemo","NitroMapContext","validateCoordinate","markerIdCounter","generateMarkerId","prefix","useNitroMarker","idPrefix","providedId","handlers","buildMarkerData","markerId","current","mapContext","isAddedRef","__DEV__","console","warn","registerMarkerHandler","unregisterMarkerHandler","onPress","onDragStart","onDrag","onDragEnd","mapRef","trackMarkerId","markerData","coordinate","addMarker","untrackMarkerId","removeMarker","updatedData","updateMarker","useMarkerHandlers"],"sourceRoot":"../../../src","sources":["hooks/useNitroMarker.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// src/hooks/useNitroOverlay.ts
|
|
4
|
+
import { useContext, useEffect, useRef } from 'react';
|
|
5
|
+
import { NitroMapContext } from "../context/NitroMapContext.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Overlay method names used by the generic hook.
|
|
9
|
+
* Maps each overlay type to its add/update/remove native methods.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Generic hook for overlay lifecycle management (polyline, polygon, circle).
|
|
14
|
+
* Adds overlay on mount, updates on prop changes, removes on unmount.
|
|
15
|
+
*
|
|
16
|
+
* Eliminates copy-paste between useNitroPolyline/useNitroPolygon/useNitroCircle.
|
|
17
|
+
*
|
|
18
|
+
* @param buildData - Memoized function that builds the overlay data object.
|
|
19
|
+
* @param getMethods - Function that extracts add/update/remove methods from the map ref.
|
|
20
|
+
*/
|
|
21
|
+
export function useNitroOverlay(buildData, getMethods) {
|
|
22
|
+
const mapContext = useContext(NitroMapContext);
|
|
23
|
+
const isAddedRef = useRef(false);
|
|
24
|
+
const idRef = useRef(null);
|
|
25
|
+
const isInitialMount = useRef(true);
|
|
26
|
+
const mapRef = mapContext?.mapRef;
|
|
27
|
+
|
|
28
|
+
// Add on mount, remove on unmount.
|
|
29
|
+
// buildData is intentionally excluded from deps — we only want mount/unmount behavior.
|
|
30
|
+
// Updates are handled by the second useEffect below.
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (!mapRef) return;
|
|
33
|
+
const data = buildData();
|
|
34
|
+
const methods = getMethods(mapRef);
|
|
35
|
+
idRef.current = data.id;
|
|
36
|
+
methods.add(data);
|
|
37
|
+
isAddedRef.current = true;
|
|
38
|
+
return () => {
|
|
39
|
+
if (idRef.current) {
|
|
40
|
+
methods.remove(idRef.current);
|
|
41
|
+
}
|
|
42
|
+
isAddedRef.current = false;
|
|
43
|
+
};
|
|
44
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
45
|
+
}, [mapRef]);
|
|
46
|
+
|
|
47
|
+
// Update when props change (buildData reference changes on prop changes via useCallback).
|
|
48
|
+
// Skip the initial mount — the first useEffect already added the overlay.
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
if (isInitialMount.current) {
|
|
51
|
+
isInitialMount.current = false;
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (!isAddedRef.current || !mapContext?.mapRef) return;
|
|
55
|
+
const methods = getMethods(mapContext.mapRef);
|
|
56
|
+
methods.update(buildData());
|
|
57
|
+
}, [mapContext, buildData, getMethods]);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=useNitroOverlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useContext","useEffect","useRef","NitroMapContext","useNitroOverlay","buildData","getMethods","mapContext","isAddedRef","idRef","isInitialMount","mapRef","data","methods","current","id","add","remove","update"],"sourceRoot":"../../../src","sources":["hooks/useNitroOverlay.ts"],"mappings":";;AAAA;AACA,SAASA,UAAU,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACrD,SAASC,eAAe,QAAQ,+BAA4B;;AAG5D;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAC7BC,SAAkB,EAClBC,UAA0D,EACpD;EACN,MAAMC,UAAU,GAAGP,UAAU,CAACG,eAAe,CAAC;EAC9C,MAAMK,UAAU,GAAGN,MAAM,CAAC,KAAK,CAAC;EAChC,MAAMO,KAAK,GAAGP,MAAM,CAAgB,IAAI,CAAC;EACzC,MAAMQ,cAAc,GAAGR,MAAM,CAAC,IAAI,CAAC;EAEnC,MAAMS,MAAM,GAAGJ,UAAU,EAAEI,MAAM;;EAEjC;EACA;EACA;EACAV,SAAS,CAAC,MAAM;IACd,IAAI,CAACU,MAAM,EAAE;IAEb,MAAMC,IAAI,GAAGP,SAAS,CAAC,CAAC;IACxB,MAAMQ,OAAO,GAAGP,UAAU,CAACK,MAAM,CAAC;IAClCF,KAAK,CAACK,OAAO,GAAGF,IAAI,CAACG,EAAE;IACvBF,OAAO,CAACG,GAAG,CAACJ,IAAI,CAAC;IACjBJ,UAAU,CAACM,OAAO,GAAG,IAAI;IAEzB,OAAO,MAAM;MACX,IAAIL,KAAK,CAACK,OAAO,EAAE;QACjBD,OAAO,CAACI,MAAM,CAACR,KAAK,CAACK,OAAO,CAAC;MAC/B;MACAN,UAAU,CAACM,OAAO,GAAG,KAAK;IAC5B,CAAC;IACD;EACF,CAAC,EAAE,CAACH,MAAM,CAAC,CAAC;;EAEZ;EACA;EACAV,SAAS,CAAC,MAAM;IACd,IAAIS,cAAc,CAACI,OAAO,EAAE;MAC1BJ,cAAc,CAACI,OAAO,GAAG,KAAK;MAC9B;IACF;IACA,IAAI,CAACN,UAAU,CAACM,OAAO,IAAI,CAACP,UAAU,EAAEI,MAAM,EAAE;IAChD,MAAME,OAAO,GAAGP,UAAU,CAACC,UAAU,CAACI,MAAM,CAAC;IAC7CE,OAAO,CAACK,MAAM,CAACb,SAAS,CAAC,CAAC,CAAC;EAC7B,CAAC,EAAE,CAACE,UAAU,EAAEF,SAAS,EAAEC,UAAU,CAAC,CAAC;AACzC","ignoreList":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// src/hooks/useNitroPolygon.ts
|
|
4
|
+
import { useCallback } from 'react';
|
|
5
|
+
import { useNitroOverlay } from "./useNitroOverlay.js";
|
|
6
|
+
/**
|
|
7
|
+
* Hook for polygon lifecycle management.
|
|
8
|
+
* Adds polygon on mount, updates on prop changes, removes on unmount.
|
|
9
|
+
*/
|
|
10
|
+
export function useNitroPolygon(buildPolygonData) {
|
|
11
|
+
const getMethods = useCallback(mapRef => ({
|
|
12
|
+
add: data => mapRef.addPolygon(data),
|
|
13
|
+
update: data => mapRef.updatePolygon(data),
|
|
14
|
+
remove: id => mapRef.removePolygon(id)
|
|
15
|
+
}), []);
|
|
16
|
+
useNitroOverlay(buildPolygonData, getMethods);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=useNitroPolygon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useNitroOverlay","useNitroPolygon","buildPolygonData","getMethods","mapRef","add","data","addPolygon","update","updatePolygon","remove","id","removePolygon"],"sourceRoot":"../../../src","sources":["hooks/useNitroPolygon.ts"],"mappings":";;AAAA;AACA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,eAAe,QAAQ,sBAAmB;AAGnD;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAACC,gBAAmC,EAAQ;EACzE,MAAMC,UAAU,GAAGJ,WAAW,CAC3BK,MAIA,KAAM;IACLC,GAAG,EAAGC,IAAiB,IAAKF,MAAM,CAACG,UAAU,CAACD,IAAI,CAAC;IACnDE,MAAM,EAAGF,IAAiB,IAAKF,MAAM,CAACK,aAAa,CAACH,IAAI,CAAC;IACzDI,MAAM,EAAGC,EAAU,IAAKP,MAAM,CAACQ,aAAa,CAACD,EAAE;EACjD,CAAC,CAAC,EACF,EACF,CAAC;EAEDX,eAAe,CAACE,gBAAgB,EAAEC,UAAU,CAAC;AAC/C","ignoreList":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// src/hooks/useNitroPolyline.ts
|
|
4
|
+
import { useCallback } from 'react';
|
|
5
|
+
import { useNitroOverlay } from "./useNitroOverlay.js";
|
|
6
|
+
/**
|
|
7
|
+
* Hook for polyline lifecycle management.
|
|
8
|
+
* Adds polyline on mount, updates on prop changes, removes on unmount.
|
|
9
|
+
*/
|
|
10
|
+
export function useNitroPolyline(buildPolylineData) {
|
|
11
|
+
const getMethods = useCallback(mapRef => ({
|
|
12
|
+
add: data => mapRef.addPolyline(data),
|
|
13
|
+
update: data => mapRef.updatePolyline(data),
|
|
14
|
+
remove: id => mapRef.removePolyline(id)
|
|
15
|
+
}), []);
|
|
16
|
+
useNitroOverlay(buildPolylineData, getMethods);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=useNitroPolyline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useNitroOverlay","useNitroPolyline","buildPolylineData","getMethods","mapRef","add","data","addPolyline","update","updatePolyline","remove","id","removePolyline"],"sourceRoot":"../../../src","sources":["hooks/useNitroPolyline.ts"],"mappings":";;AAAA;AACA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,eAAe,QAAQ,sBAAmB;AAGnD;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAACC,iBAAqC,EAAQ;EAC5E,MAAMC,UAAU,GAAGJ,WAAW,CAC3BK,MAIA,KAAM;IACLC,GAAG,EAAGC,IAAkB,IAAKF,MAAM,CAACG,WAAW,CAACD,IAAI,CAAC;IACrDE,MAAM,EAAGF,IAAkB,IAAKF,MAAM,CAACK,cAAc,CAACH,IAAI,CAAC;IAC3DI,MAAM,EAAGC,EAAU,IAAKP,MAAM,CAACQ,cAAc,CAACD,EAAE;EAClD,CAAC,CAAC,EACF,EACF,CAAC;EAEDX,eAAe,CAACE,iBAAiB,EAAEC,UAAU,CAAC;AAChD","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -8,9 +8,14 @@ export { NitroMap, default } from "./components/NitroMap.js";
|
|
|
8
8
|
// New specialized marker components
|
|
9
9
|
export { PriceMarker } from "./components/PriceMarker.js";
|
|
10
10
|
export { ImageMarker } from "./components/ImageMarker.js";
|
|
11
|
+
export { Marker } from "./components/Marker.js";
|
|
12
|
+
export { NitroPolyline } from "./components/NitroPolyline.js";
|
|
13
|
+
export { NitroPolygon } from "./components/NitroPolygon.js";
|
|
14
|
+
export { NitroCircle } from "./components/NitroCircle.js";
|
|
11
15
|
|
|
12
16
|
// ============ Types ============
|
|
13
17
|
|
|
18
|
+
export { NitroMapContext } from "./context/NitroMapContext.js";
|
|
14
19
|
export { NitroMapInitialize, IsNitroMapInitialized, getDefaultProvider } from "./modules/index.js";
|
|
15
20
|
|
|
16
21
|
// Marker component props
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NitroMap","default","PriceMarker","ImageMarker","NitroMapInitialize","IsNitroMapInitialized","getDefaultProvider","rgb","hex","Colors"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;;AAEA;AACA,SAASA,QAAQ,EAAEC,OAAO,QAAQ,0BAAuB;;AAEzD;AACA,SAASC,WAAW,QAAQ,6BAA0B;AACtD,SAASC,WAAW,QAAQ,6BAA0B;;AAEtD;;
|
|
1
|
+
{"version":3,"names":["NitroMap","default","PriceMarker","ImageMarker","Marker","NitroPolyline","NitroPolygon","NitroCircle","NitroMapContext","NitroMapInitialize","IsNitroMapInitialized","getDefaultProvider","rgb","hex","Colors"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA;;AAEA;AACA,SAASA,QAAQ,EAAEC,OAAO,QAAQ,0BAAuB;;AAEzD;AACA,SAASC,WAAW,QAAQ,6BAA0B;AACtD,SAASC,WAAW,QAAQ,6BAA0B;AACtD,SAASC,MAAM,QAAQ,wBAAqB;AAC5C,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,WAAW,QAAQ,6BAA0B;;AAEtD;;AAGA,SAASC,eAAe,QAAQ,8BAA2B;AA+C3D,SACEC,kBAAkB,EAClBC,qBAAqB,EACrBC,kBAAkB,QAEb,oBAAW;;AAElB;;AASA;AACA;AACA,SAASC,GAAG,EAAEC,GAAG,EAAEC,MAAM,QAAQ,mBAAgB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/overlay.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/theme.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -43,18 +43,6 @@ export const parseColor = (color, defaultAlpha = 255) => {
|
|
|
43
43
|
return undefined;
|
|
44
44
|
};
|
|
45
45
|
|
|
46
|
-
/**
|
|
47
|
-
* Parse a ColorValue with a fallback default color
|
|
48
|
-
* @param color - Color value (hex string or MarkerColor)
|
|
49
|
-
* @param fallback - Fallback MarkerColor if parsing fails
|
|
50
|
-
* @returns MarkerColor object
|
|
51
|
-
* @internal
|
|
52
|
-
*/
|
|
53
|
-
export const parseColorWithFallback = (color, fallback) => {
|
|
54
|
-
const parsed = parseColor(color);
|
|
55
|
-
return parsed ?? fallback;
|
|
56
|
-
};
|
|
57
|
-
|
|
58
46
|
/**
|
|
59
47
|
* Create a MarkerColor from RGB values
|
|
60
48
|
* @param r - Red component (0-255)
|
|
@@ -88,7 +76,18 @@ export const rgb = (r, g, b, a = 255) => ({
|
|
|
88
76
|
* ```
|
|
89
77
|
*/
|
|
90
78
|
export const hex = (hexStr, alpha = 255) => {
|
|
91
|
-
// Try
|
|
79
|
+
// Try 8-char hex first (#RRGGBBAA or RRGGBBAA)
|
|
80
|
+
const result8 = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hexStr);
|
|
81
|
+
if (result8) {
|
|
82
|
+
return {
|
|
83
|
+
r: parseInt(result8[1], 16),
|
|
84
|
+
g: parseInt(result8[2], 16),
|
|
85
|
+
b: parseInt(result8[3], 16),
|
|
86
|
+
a: parseInt(result8[4], 16)
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Try 6-char hex (#RRGGBB or RRGGBB)
|
|
92
91
|
const result6 = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hexStr);
|
|
93
92
|
if (result6) {
|
|
94
93
|
return {
|
|
@@ -99,6 +98,17 @@ export const hex = (hexStr, alpha = 255) => {
|
|
|
99
98
|
};
|
|
100
99
|
}
|
|
101
100
|
|
|
101
|
+
// Try 4-char hex (#RGBA or RGBA)
|
|
102
|
+
const result4 = /^#?([a-f\d])([a-f\d])([a-f\d])([a-f\d])$/i.exec(hexStr);
|
|
103
|
+
if (result4) {
|
|
104
|
+
return {
|
|
105
|
+
r: parseInt(result4[1] + result4[1], 16),
|
|
106
|
+
g: parseInt(result4[2] + result4[2], 16),
|
|
107
|
+
b: parseInt(result4[3] + result4[3], 16),
|
|
108
|
+
a: parseInt(result4[4] + result4[4], 16)
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
102
112
|
// Try 3-char hex (#RGB or RGB)
|
|
103
113
|
const result3 = /^#?([a-f\d])([a-f\d])([a-f\d])$/i.exec(hexStr);
|
|
104
114
|
if (result3) {
|
|
@@ -111,6 +121,9 @@ export const hex = (hexStr, alpha = 255) => {
|
|
|
111
121
|
}
|
|
112
122
|
|
|
113
123
|
// Fallback to black
|
|
124
|
+
if (__DEV__) {
|
|
125
|
+
console.warn(`hex(): invalid hex color string "${hexStr}". Falling back to black.`);
|
|
126
|
+
}
|
|
114
127
|
return {
|
|
115
128
|
r: 0,
|
|
116
129
|
g: 0,
|
|
@@ -144,4 +157,19 @@ export const Colors = {
|
|
|
144
157
|
/** Light gray (240, 240, 240) */
|
|
145
158
|
lightGray: rgb(240, 240, 240)
|
|
146
159
|
};
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Compare two ColorValue values for equality.
|
|
163
|
+
* Handles both hex strings and MarkerColor objects.
|
|
164
|
+
* @internal Used by component memo comparators to avoid duplication.
|
|
165
|
+
*/
|
|
166
|
+
export const areColorsEqual = (a, b) => {
|
|
167
|
+
if (a === b) return true;
|
|
168
|
+
if (!a || !b) return false;
|
|
169
|
+
if (typeof a !== typeof b) return false;
|
|
170
|
+
if (typeof a === 'string' && typeof b === 'string') return a === b;
|
|
171
|
+
const ca = a;
|
|
172
|
+
const cb = b;
|
|
173
|
+
return ca.r === cb.r && ca.g === cb.g && ca.b === cb.b && ca.a === cb.a;
|
|
174
|
+
};
|
|
147
175
|
//# sourceMappingURL=colors.js.map
|