@granite-js/naver-map 1.0.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 (104) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/GraniteNaverMap.podspec +81 -0
  3. package/android/build.gradle +160 -0
  4. package/android/gradle.properties +5 -0
  5. package/android/src/builtinProvider/java/run/granite/navermap/builtinProvider/BuiltInGraniteNaverMapProvider.kt +549 -0
  6. package/android/src/main/AndroidManifest.xml +3 -0
  7. package/android/src/main/java/run/granite/navermap/GraniteNaverMapEvents.kt +91 -0
  8. package/android/src/main/java/run/granite/navermap/GraniteNaverMapPackage.kt +16 -0
  9. package/android/src/main/java/run/granite/navermap/GraniteNaverMapProvider.kt +242 -0
  10. package/android/src/main/java/run/granite/navermap/GraniteNaverMapRegistry.kt +116 -0
  11. package/android/src/main/java/run/granite/navermap/GraniteNaverMapView.kt +732 -0
  12. package/android/src/newarch/java/run/granite/navermap/GraniteNaverMapViewManager.kt +446 -0
  13. package/android/src/oldarch/java/run/granite/navermap/GraniteNaverMapViewManager.kt +249 -0
  14. package/dist/module/NaverMapView.js +110 -0
  15. package/dist/module/NaverMapView.js.map +1 -0
  16. package/dist/module/index.js +6 -0
  17. package/dist/module/index.js.map +1 -0
  18. package/dist/module/internals/colorUtils.js +624 -0
  19. package/dist/module/internals/colorUtils.js.map +1 -0
  20. package/dist/module/internals/context.js +8 -0
  21. package/dist/module/internals/context.js.map +1 -0
  22. package/dist/module/internals/id.js +10 -0
  23. package/dist/module/internals/id.js.map +1 -0
  24. package/dist/module/internals/useMapOverlay.js +44 -0
  25. package/dist/module/internals/useMapOverlay.js.map +1 -0
  26. package/dist/module/internals/usePreservedReference.js +36 -0
  27. package/dist/module/internals/usePreservedReference.js.map +1 -0
  28. package/dist/module/overlays/ArrowheadPath.js +37 -0
  29. package/dist/module/overlays/ArrowheadPath.js.map +1 -0
  30. package/dist/module/overlays/Circle.js +35 -0
  31. package/dist/module/overlays/Circle.js.map +1 -0
  32. package/dist/module/overlays/GroundOverlay.js +30 -0
  33. package/dist/module/overlays/GroundOverlay.js.map +1 -0
  34. package/dist/module/overlays/InfoWindow.js +32 -0
  35. package/dist/module/overlays/InfoWindow.js.map +1 -0
  36. package/dist/module/overlays/Marker.js +37 -0
  37. package/dist/module/overlays/Marker.js.map +1 -0
  38. package/dist/module/overlays/Path.js +41 -0
  39. package/dist/module/overlays/Path.js.map +1 -0
  40. package/dist/module/overlays/Polygon.js +51 -0
  41. package/dist/module/overlays/Polygon.js.map +1 -0
  42. package/dist/module/overlays/Polyline.js +60 -0
  43. package/dist/module/overlays/Polyline.js.map +1 -0
  44. package/dist/module/overlays/index.js +11 -0
  45. package/dist/module/overlays/index.js.map +1 -0
  46. package/dist/module/package.json +1 -0
  47. package/dist/module/specs/GraniteNaverMapViewNativeComponent.ts +352 -0
  48. package/dist/module/types/Coord.js +2 -0
  49. package/dist/module/types/Coord.js.map +1 -0
  50. package/dist/module/types/index.js +29 -0
  51. package/dist/module/types/index.js.map +1 -0
  52. package/dist/typescript/NaverMapView.d.ts +41 -0
  53. package/dist/typescript/index.d.ts +3 -0
  54. package/dist/typescript/internals/colorUtils.d.ts +10 -0
  55. package/dist/typescript/internals/context.d.ts +8 -0
  56. package/dist/typescript/internals/id.d.ts +1 -0
  57. package/dist/typescript/internals/useMapOverlay.d.ts +15 -0
  58. package/dist/typescript/internals/usePreservedReference.d.ts +6 -0
  59. package/dist/typescript/overlays/ArrowheadPath.d.ts +11 -0
  60. package/dist/typescript/overlays/Circle.d.ts +10 -0
  61. package/dist/typescript/overlays/GroundOverlay.d.ts +11 -0
  62. package/dist/typescript/overlays/InfoWindow.d.ts +14 -0
  63. package/dist/typescript/overlays/Marker.d.ts +16 -0
  64. package/dist/typescript/overlays/Path.d.ts +15 -0
  65. package/dist/typescript/overlays/Polygon.d.ts +10 -0
  66. package/dist/typescript/overlays/Polyline.d.ts +11 -0
  67. package/dist/typescript/overlays/index.d.ts +16 -0
  68. package/dist/typescript/specs/GraniteNaverMapViewNativeComponent.d.ts +92 -0
  69. package/dist/typescript/types/Coord.d.ts +4 -0
  70. package/dist/typescript/types/index.d.ts +55 -0
  71. package/ios/GraniteNaverMap-Bridging-Header.h +20 -0
  72. package/ios/GraniteNaverMapProvider.swift +312 -0
  73. package/ios/GraniteNaverMapRegistry.swift +91 -0
  74. package/ios/GraniteNaverMapView.h +15 -0
  75. package/ios/GraniteNaverMapView.mm +390 -0
  76. package/ios/GraniteNaverMapViewImpl.swift +496 -0
  77. package/ios/GraniteNaverMapViewManager.m +67 -0
  78. package/ios/GraniteNaverMapViewManager.swift +133 -0
  79. package/ios/GraniteNaverMapViewWrapper.swift +215 -0
  80. package/ios/builtinProvider/BuiltInNaverMapProvider.swift +489 -0
  81. package/ios/builtinProvider/GraniteNaverMapMarkerData.swift +66 -0
  82. package/ios/builtinProvider/NMFMarker+Extension.swift +65 -0
  83. package/ios/builtinProvider/RCTConvert+NMFMapView.h +17 -0
  84. package/ios/builtinProvider/RCTConvert+NMFMapView.m +67 -0
  85. package/package.json +103 -0
  86. package/src/NaverMapView.tsx +168 -0
  87. package/src/index.tsx +3 -0
  88. package/src/internals/colorUtils.ts +697 -0
  89. package/src/internals/context.ts +14 -0
  90. package/src/internals/id.ts +9 -0
  91. package/src/internals/useMapOverlay.ts +59 -0
  92. package/src/internals/usePreservedReference.ts +41 -0
  93. package/src/overlays/ArrowheadPath.ts +71 -0
  94. package/src/overlays/Circle.ts +68 -0
  95. package/src/overlays/GroundOverlay.ts +62 -0
  96. package/src/overlays/InfoWindow.ts +68 -0
  97. package/src/overlays/Marker.ts +83 -0
  98. package/src/overlays/Path.ts +87 -0
  99. package/src/overlays/Polygon.ts +83 -0
  100. package/src/overlays/Polyline.ts +93 -0
  101. package/src/overlays/index.ts +23 -0
  102. package/src/specs/GraniteNaverMapViewNativeComponent.ts +352 -0
  103. package/src/types/Coord.ts +4 -0
  104. package/src/types/index.ts +78 -0
@@ -0,0 +1,66 @@
1
+ //
2
+ // GraniteNaverMapMarkerData.swift
3
+ // granite-naver-map
4
+ //
5
+
6
+ import Foundation
7
+ import NMapsMap
8
+ import React
9
+
10
+ struct GraniteNaverMapMarkerData {
11
+ let coordinate: NMGLatLng?
12
+ let width: CGFloat?
13
+ let height: CGFloat?
14
+ let zIndex: Int?
15
+ let image: String?
16
+ let rotation: CGFloat?
17
+ let flat: Bool?
18
+ let alpha: CGFloat?
19
+ let pinColor: UIColor?
20
+
21
+ init(
22
+ coordinate: NMGLatLng? = nil,
23
+ width: CGFloat? = nil,
24
+ height: CGFloat? = nil,
25
+ zIndex: Int? = nil,
26
+ image: String? = nil,
27
+ rotation: CGFloat? = nil,
28
+ flat: Bool? = nil,
29
+ alpha: CGFloat? = nil,
30
+ pinColor: UIColor? = nil
31
+ ) {
32
+ self.coordinate = coordinate
33
+ self.width = width
34
+ self.height = height
35
+ self.zIndex = zIndex
36
+ self.image = image
37
+ self.rotation = rotation
38
+ self.flat = flat
39
+ self.alpha = alpha
40
+ self.pinColor = pinColor
41
+ }
42
+
43
+ init(object: [String: Any]) {
44
+ if let coordinate = object["coordinate"] as? [String: Double],
45
+ let lat = coordinate["latitude"],
46
+ let lng = coordinate["longitude"] {
47
+ self.coordinate = NMGLatLng(lat: lat, lng: lng)
48
+ } else {
49
+ self.coordinate = nil
50
+ }
51
+
52
+ self.width = object["width"] as? CGFloat
53
+ self.height = object["height"] as? CGFloat
54
+ self.zIndex = object["zIndex"] as? Int
55
+ self.image = object["image"] as? String
56
+ self.rotation = object["rotation"] as? CGFloat
57
+ self.flat = object["flat"] as? Bool
58
+ self.alpha = object["alpha"] as? CGFloat
59
+
60
+ if let pinColor = object["pinColor"] as? Int {
61
+ self.pinColor = RCTConvert.uiColor(pinColor)
62
+ } else {
63
+ self.pinColor = nil
64
+ }
65
+ }
66
+ }
@@ -0,0 +1,65 @@
1
+ //
2
+ // NMFMarker+Extension.swift
3
+ // react-native-toss-naver-map
4
+ //
5
+
6
+ import Foundation
7
+ import NMapsMap
8
+
9
+ extension NMFMarker {
10
+
11
+ func loadImage(from urlString: String) {
12
+ guard let url = URL(string: urlString) else { return }
13
+
14
+ URLSession.shared.dataTask(with: url) { [weak self] data, _, error in
15
+ guard let data = data,
16
+ error == nil,
17
+ let image = UIImage(data: data) else {
18
+ return
19
+ }
20
+
21
+ DispatchQueue.main.async {
22
+ let overlayImage = NMFOverlayImage(image: image)
23
+ self?.iconImage = overlayImage
24
+ }
25
+ }.resume()
26
+ }
27
+
28
+ func applyMarkerData(_ markerData: GraniteNaverMapMarkerData) {
29
+ if let coordinate = markerData.coordinate {
30
+ self.position = coordinate
31
+ }
32
+
33
+ if let width = markerData.width {
34
+ self.width = width
35
+ }
36
+
37
+ if let height = markerData.height {
38
+ self.height = height
39
+ }
40
+
41
+ if let zIndex = markerData.zIndex {
42
+ self.zIndex = zIndex
43
+ }
44
+
45
+ if let imageURL = markerData.image {
46
+ loadImage(from: imageURL)
47
+ }
48
+
49
+ if let rotation = markerData.rotation {
50
+ self.angle = rotation
51
+ }
52
+
53
+ if let flat = markerData.flat {
54
+ self.isFlat = flat
55
+ }
56
+
57
+ if let alpha = markerData.alpha {
58
+ self.alpha = alpha
59
+ }
60
+
61
+ if let pinColor = markerData.pinColor {
62
+ self.iconTintColor = pinColor
63
+ }
64
+ }
65
+ }
@@ -0,0 +1,17 @@
1
+ //
2
+ // RCTConvert+NMFMapView.h
3
+ // react-native-toss-naver-map
4
+ //
5
+
6
+ #import <React/RCTConvert.h>
7
+ #import <NMapsMap/NMapsMap.h>
8
+
9
+ @interface RCTConvert (NMFMapView)
10
+
11
+ + (NMFCameraUpdate *)NMFCameraUpdate:(id)json;
12
+ + (NMFCameraUpdate *)NMFCameraUpdateWith:(id)json;
13
+ + (NMGLatLng *)NMGLatLng:(id)json;
14
+ + (NMGLatLngBounds *)NMGLatLngBounds:(id)json;
15
+ + (NMFAlignType *)NMFAlignType:(id)json;
16
+
17
+ @end
@@ -0,0 +1,67 @@
1
+ //
2
+ // RCTConvert+NMFMapView.m
3
+ // react-native-toss-naver-map
4
+ //
5
+
6
+ #import <NMapsMap/NMFCameraUpdate.h>
7
+ #import <NMapsMap/NMFCameraPosition.h>
8
+ #import <NMapsMap/NMFOverlay.h>
9
+
10
+ #import "RCTConvert+NMFMapView.h"
11
+
12
+ @implementation RCTConvert (NMFMapView)
13
+
14
+ + (NMFCameraUpdate *)NMFCameraUpdate:(id)json
15
+ {
16
+ json = [self NSDictionary:json];
17
+ return [NMFCameraUpdate cameraUpdateWithScrollTo:NMGLatLngMake([self double:json[@"latitude"]], [self double:json[@"longitude"]])
18
+ zoomTo:[self double:json[@"zoom"]]];
19
+ }
20
+
21
+ + (NMFCameraUpdate *)NMFCameraUpdateWith:(id)json
22
+ {
23
+ NMGLatLng *position = NMGLatLngMake([self double:json[@"latitude"]], [self double:json[@"longitude"]]);
24
+ double zoom = [self double:json[@"zoom"]];
25
+ double tilt = [self double:json[@"tilt"]];
26
+ double bearing = [self double:json[@"bearing"]];
27
+
28
+ NMFCameraPosition *cameraPosition = [NMFCameraPosition cameraPosition:position zoom:zoom tilt:tilt heading:bearing];
29
+ NMFCameraUpdate *cameraUpdate = [NMFCameraUpdate cameraUpdateWithPosition:cameraPosition];
30
+ cameraUpdate.animation = NMFCameraUpdateAnimationEaseIn;
31
+ return cameraUpdate;
32
+ }
33
+
34
+ + (NMGLatLng *)NMGLatLng:(id)json
35
+ {
36
+ json = [self NSDictionary:json];
37
+ return NMGLatLngMake([self double:json[@"latitude"]], [self double:json[@"longitude"]]);
38
+ }
39
+
40
+ + (NMGLatLngBounds *)NMGLatLngBounds:(id)json
41
+ {
42
+ json = [self NSDictionary:json];
43
+ double lat = [self double:json[@"latitude"]];
44
+ double latDelta = [self double:json[@"latitudeDelta"]];
45
+ double lng = [self double:json[@"longitude"]];
46
+ double lngDelta = [self double:json[@"longitudeDelta"]];
47
+ return NMGLatLngBoundsMake(lat - latDelta / 2, lng - lngDelta / 2, // southwest
48
+ lat + latDelta / 2, lng + lngDelta / 2); // northeast
49
+ }
50
+
51
+ + (NMFAlignType *)NMFAlignType:(id)json
52
+ {
53
+ json = [self NSNumber:json];
54
+ if ([json isEqual:@(0)]) return NMFAlignType.center;
55
+ if ([json isEqual:@(1)]) return NMFAlignType.left;
56
+ if ([json isEqual:@(2)]) return NMFAlignType.right;
57
+ if ([json isEqual:@(3)]) return NMFAlignType.top;
58
+ if ([json isEqual:@(4)]) return NMFAlignType.bottom;
59
+ if ([json isEqual:@(5)]) return NMFAlignType.topLeft;
60
+ if ([json isEqual:@(6)]) return NMFAlignType.topRight;
61
+ if ([json isEqual:@(7)]) return NMFAlignType.bottomRight;
62
+ if ([json isEqual:@(8)]) return NMFAlignType.bottomLeft;
63
+
64
+ return NMFAlignType.bottom;
65
+ }
66
+
67
+ @end
package/package.json ADDED
@@ -0,0 +1,103 @@
1
+ {
2
+ "name": "@granite-js/naver-map",
3
+ "version": "1.0.0",
4
+ "description": "Pluggable Naver Map component for React Native with provider selection",
5
+ "type": "module",
6
+ "main": "./dist/module/index.js",
7
+ "types": "./dist/typescript/index.d.ts",
8
+ "react-native": "./src/index.tsx",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/typescript/index.d.ts",
12
+ "react-native": "./src/index.tsx",
13
+ "default": "./dist/module/index.js"
14
+ },
15
+ "./package.json": "./package.json"
16
+ },
17
+ "files": [
18
+ "src",
19
+ "dist",
20
+ "android",
21
+ "ios",
22
+ "*.podspec",
23
+ "react-native.config.js",
24
+ "!example/**",
25
+ "!ios/build",
26
+ "!android/build",
27
+ "!android/gradle",
28
+ "!android/gradlew",
29
+ "!android/gradlew.bat",
30
+ "!android/local.properties",
31
+ "!**/__tests__",
32
+ "!**/__fixtures__",
33
+ "!**/__mocks__",
34
+ "!**/.*"
35
+ ],
36
+ "scripts": {
37
+ "prepack": "yarn build",
38
+ "example": "yarn workspace @granite-js/naver-map-example",
39
+ "clean": "del-cli android/build example/android/build example/android/app/build example/ios/build",
40
+ "typecheck": "tsc --noEmit",
41
+ "lint": "eslint .",
42
+ "build": "bob build && tsc --project tsconfig.build.json"
43
+ },
44
+ "keywords": [
45
+ "react-native",
46
+ "ios",
47
+ "android",
48
+ "naver",
49
+ "map",
50
+ "navermap",
51
+ "korea",
52
+ "pluggable",
53
+ "provider",
54
+ "brownfield"
55
+ ],
56
+ "repository": {
57
+ "type": "git",
58
+ "url": "git+https://github.com/toss/granite.git",
59
+ "directory": "packages/naver-map"
60
+ },
61
+ "author": "Toss <platform@toss.im>",
62
+ "homepage": "https://github.com/toss/granite/tree/main/packages/naver-map#readme",
63
+ "license": "MIT",
64
+ "devDependencies": {
65
+ "@types/react": "19.2.0",
66
+ "del-cli": "^6.0.0",
67
+ "eslint": "^9.7.0",
68
+ "react": "19.2.3",
69
+ "react-native": "0.84.0-rc.5",
70
+ "react-native-builder-bob": "0.40.17",
71
+ "typescript": "5.9.3"
72
+ },
73
+ "peerDependencies": {
74
+ "react": "*",
75
+ "react-native": "*"
76
+ },
77
+ "codegenConfig": {
78
+ "name": "GraniteNaverMapViewSpec",
79
+ "type": "components",
80
+ "jsSrcsDir": "src/specs",
81
+ "android": {
82
+ "javaPackageName": "run.granite.navermap"
83
+ },
84
+ "ios": {
85
+ "componentProvider": {
86
+ "GraniteNaverMapView": "GraniteNaverMapView"
87
+ }
88
+ }
89
+ },
90
+ "sideEffects": false,
91
+ "react-native-builder-bob": {
92
+ "source": "src",
93
+ "output": "dist",
94
+ "targets": [
95
+ [
96
+ "module",
97
+ {
98
+ "esm": true
99
+ }
100
+ ]
101
+ ]
102
+ }
103
+ }
@@ -0,0 +1,168 @@
1
+ import React, { useCallback, useMemo, useRef, useState } from 'react';
2
+ import { Platform, View, type NativeSyntheticEvent, type StyleProp, type ViewStyle } from 'react-native';
3
+ import { MapContext } from './internals/context';
4
+ import type { MarkerEventListeners } from './overlays/Marker';
5
+ import GraniteNaverMapViewNativeComponent, {
6
+ OnCameraChangeEvent,
7
+ OnTouchEvent,
8
+ OnMapClickEvent,
9
+ OnMarkerClickEvent,
10
+ } from './specs/GraniteNaverMapViewNativeComponent';
11
+ import type { Coord } from './types';
12
+
13
+ export interface MapViewProps {
14
+ style?: StyleProp<ViewStyle>;
15
+ center?: Coord & {
16
+ zoom?: number;
17
+ tilt?: number;
18
+ bearing?: number;
19
+ };
20
+ showsMyLocationButton?: boolean;
21
+ compass?: boolean;
22
+ scaleBar?: boolean;
23
+ zoomControl?: boolean;
24
+ mapType?: number;
25
+ minZoomLevel?: number;
26
+ maxZoomLevel?: number;
27
+ buildingHeight?: number;
28
+ locationTrackingMode?: number;
29
+ tilt?: number;
30
+ bearing?: number;
31
+ nightMode?: boolean;
32
+ mapPadding?: {
33
+ top?: number;
34
+ left?: number;
35
+ bottom?: number;
36
+ right?: number;
37
+ };
38
+ scrollGesturesEnabled?: boolean;
39
+ zoomGesturesEnabled?: boolean;
40
+ tiltGesturesEnabled?: boolean;
41
+ rotateGesturesEnabled?: boolean;
42
+ stopGesturesEnabled?: boolean;
43
+ onCameraChange?: (event: NativeSyntheticEvent<OnCameraChangeEvent>) => void;
44
+ onTouch?: (event: NativeSyntheticEvent<OnTouchEvent>) => void;
45
+ onMapClick?: (event: NativeSyntheticEvent<OnMapClickEvent>) => void;
46
+ onInitialized?: () => void;
47
+ children?: React.ReactNode;
48
+ }
49
+
50
+ /**
51
+ * Avoid View Flattening issue on Android
52
+ */
53
+ const AvoidViewFlatteningOnAndroid = ({
54
+ style,
55
+ children,
56
+ }: {
57
+ style?: StyleProp<ViewStyle>;
58
+ children: React.ReactNode;
59
+ }) => {
60
+ if (Platform.OS === 'android') {
61
+ return (
62
+ <View style={style} collapsable={false}>
63
+ {children}
64
+ </View>
65
+ );
66
+ }
67
+ return <>{children}</>;
68
+ };
69
+
70
+ export function NaverMapView({
71
+ style,
72
+ onTouch,
73
+ onMapClick,
74
+ onCameraChange,
75
+ onInitialized,
76
+ children,
77
+ center,
78
+ mapPadding,
79
+ ...props
80
+ }: MapViewProps) {
81
+ const mapRef = useRef<React.ElementRef<typeof GraniteNaverMapViewNativeComponent>>(null);
82
+ const [isReady, setIsReady] = useState(false);
83
+ const markersRef = useRef<Map<string, MarkerEventListeners>>(new Map());
84
+
85
+ const onMarkerClick = useCallback((event: NativeSyntheticEvent<OnMarkerClickEvent>) => {
86
+ const marker = markersRef.current.get(event.nativeEvent.id);
87
+ marker?.onPress?.();
88
+ }, []);
89
+
90
+ const handleCameraChange = useCallback(
91
+ (event: NativeSyntheticEvent<OnCameraChangeEvent>) => {
92
+ onCameraChange?.(event);
93
+ },
94
+ [onCameraChange]
95
+ );
96
+
97
+ const handleTouch = useCallback(
98
+ (event: NativeSyntheticEvent<OnTouchEvent>) => {
99
+ onTouch?.(event);
100
+ },
101
+ [onTouch]
102
+ );
103
+
104
+ const handleMapClick = useCallback(
105
+ (event: NativeSyntheticEvent<OnMapClickEvent>) => {
106
+ onMapClick?.(event);
107
+ },
108
+ [onMapClick]
109
+ );
110
+
111
+ const handleInitialized = useCallback(() => {
112
+ console.log('[NaverMapView] handleInitialized called - setting isReady to true');
113
+ setIsReady(true);
114
+ onInitialized?.();
115
+ }, [onInitialized]);
116
+
117
+ const mapContext = useMemo(
118
+ () => (isReady && mapRef.current ? { mapView: mapRef.current, markers: markersRef.current } : null),
119
+ [isReady]
120
+ );
121
+
122
+ // Convert center prop to native format
123
+ const nativeCenter = useMemo(() => {
124
+ if (!center) {
125
+ return undefined;
126
+ }
127
+ return {
128
+ latitude: center.latitude,
129
+ longitude: center.longitude,
130
+ zoom: center.zoom,
131
+ tilt: center.tilt,
132
+ bearing: center.bearing,
133
+ };
134
+ }, [center]);
135
+
136
+ // Convert mapPadding prop to native format
137
+ const nativeMapPadding = useMemo(() => {
138
+ if (!mapPadding) {
139
+ return undefined;
140
+ }
141
+ return {
142
+ top: mapPadding.top,
143
+ left: mapPadding.left,
144
+ bottom: mapPadding.bottom,
145
+ right: mapPadding.right,
146
+ };
147
+ }, [mapPadding]);
148
+
149
+ return (
150
+ <AvoidViewFlatteningOnAndroid style={style}>
151
+ <MapContext.Provider value={mapContext}>
152
+ <GraniteNaverMapViewNativeComponent
153
+ ref={mapRef}
154
+ style={Platform.OS === 'ios' ? style : { flex: 1 }}
155
+ {...props}
156
+ center={nativeCenter}
157
+ mapPadding={nativeMapPadding}
158
+ onInitialized={handleInitialized}
159
+ onMarkerClick={onMarkerClick}
160
+ onCameraChange={handleCameraChange}
161
+ onTouch={handleTouch}
162
+ onMapClick={handleMapClick}
163
+ />
164
+ {children}
165
+ </MapContext.Provider>
166
+ </AvoidViewFlatteningOnAndroid>
167
+ );
168
+ }
package/src/index.tsx ADDED
@@ -0,0 +1,3 @@
1
+ export * from './overlays';
2
+ export * from './NaverMapView';
3
+ export * from './types';