@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,242 @@
1
+ package run.granite.navermap
2
+
3
+ import android.content.Context
4
+ import android.view.View
5
+
6
+ /**
7
+ * Data class for map coordinates
8
+ */
9
+ data class GraniteNaverMapCoordinate(
10
+ val latitude: Double,
11
+ val longitude: Double
12
+ )
13
+
14
+ /**
15
+ * Data class for camera position
16
+ */
17
+ data class GraniteNaverMapCameraPosition(
18
+ val target: GraniteNaverMapCoordinate,
19
+ val zoom: Double,
20
+ val tilt: Double = 0.0,
21
+ val bearing: Double = 0.0
22
+ )
23
+
24
+ /**
25
+ * Data class for bounds
26
+ */
27
+ data class GraniteNaverMapBounds(
28
+ val southWest: GraniteNaverMapCoordinate,
29
+ val northEast: GraniteNaverMapCoordinate
30
+ )
31
+
32
+ /**
33
+ * Map type enum
34
+ */
35
+ enum class GraniteNaverMapType {
36
+ BASIC, NAVI, SATELLITE, HYBRID, TERRAIN, NONE
37
+ }
38
+
39
+ /**
40
+ * Location tracking mode enum
41
+ */
42
+ enum class GraniteNaverMapLocationTrackingMode {
43
+ NONE, NO_FOLLOW, FOLLOW, FACE
44
+ }
45
+
46
+ /**
47
+ * Marker data
48
+ */
49
+ data class GraniteNaverMapMarkerData(
50
+ val identifier: String,
51
+ val coordinate: GraniteNaverMapCoordinate,
52
+ val width: Int,
53
+ val height: Int,
54
+ val zIndex: Int,
55
+ val rotation: Float,
56
+ val flat: Boolean,
57
+ val alpha: Float,
58
+ val pinColor: Int,
59
+ val image: String
60
+ )
61
+
62
+ /**
63
+ * Polyline data
64
+ */
65
+ data class GraniteNaverMapPolylineData(
66
+ val identifier: String,
67
+ val coordinates: List<GraniteNaverMapCoordinate>,
68
+ val strokeWidth: Float,
69
+ val strokeColor: Int,
70
+ val zIndex: Int,
71
+ val lineCap: Int,
72
+ val lineJoin: Int,
73
+ val pattern: List<Int>
74
+ )
75
+
76
+ /**
77
+ * Polygon data
78
+ */
79
+ data class GraniteNaverMapPolygonData(
80
+ val identifier: String,
81
+ val coordinates: List<GraniteNaverMapCoordinate>,
82
+ val holes: List<List<GraniteNaverMapCoordinate>>,
83
+ val fillColor: Int,
84
+ val strokeColor: Int,
85
+ val strokeWidth: Float,
86
+ val zIndex: Int
87
+ )
88
+
89
+ /**
90
+ * Circle data
91
+ */
92
+ data class GraniteNaverMapCircleData(
93
+ val identifier: String,
94
+ val center: GraniteNaverMapCoordinate,
95
+ val radius: Double,
96
+ val fillColor: Int,
97
+ val strokeColor: Int,
98
+ val strokeWidth: Float,
99
+ val zIndex: Int
100
+ )
101
+
102
+ /**
103
+ * Path data
104
+ */
105
+ data class GraniteNaverMapPathData(
106
+ val identifier: String,
107
+ val coordinates: List<GraniteNaverMapCoordinate>,
108
+ val width: Float,
109
+ val outlineWidth: Float,
110
+ val color: Int,
111
+ val outlineColor: Int,
112
+ val passedColor: Int,
113
+ val passedOutlineColor: Int,
114
+ val patternImage: String,
115
+ val patternInterval: Int,
116
+ val progress: Float,
117
+ val zIndex: Int
118
+ )
119
+
120
+ /**
121
+ * Provider delegate interface for map events
122
+ */
123
+ interface GraniteNaverMapProviderDelegate {
124
+ fun onMapInitialized()
125
+ fun onCameraChange(position: GraniteNaverMapCameraPosition, contentRegion: List<GraniteNaverMapCoordinate>, coveringRegion: List<GraniteNaverMapCoordinate>)
126
+ fun onTouch(reason: Int, animated: Boolean)
127
+ fun onClick(x: Double, y: Double, latitude: Double, longitude: Double)
128
+ fun onMarkerClick(id: String)
129
+ }
130
+
131
+ /**
132
+ * Factory interface for creating NaverMap providers.
133
+ * Each call to createProvider() should return a new instance.
134
+ *
135
+ * Brownfield apps can implement this interface to provide their own map implementation.
136
+ */
137
+ interface GraniteNaverMapProviderFactory {
138
+ /**
139
+ * Create a new provider instance.
140
+ * This should be called for each NaverMap view.
141
+ */
142
+ fun createProvider(context: Context): GraniteNaverMapProvider
143
+ }
144
+
145
+ /**
146
+ * Pluggable Provider interface for NaverMap
147
+ *
148
+ * Brownfield apps can implement this interface to use their own map implementation.
149
+ * Note: Each view should have its own Provider instance (created via Factory).
150
+ */
151
+ interface GraniteNaverMapProvider {
152
+ /**
153
+ * Create the map container view
154
+ */
155
+ fun createMapView(context: Context): View
156
+
157
+ /**
158
+ * Set the delegate for map events
159
+ */
160
+ fun setDelegate(delegate: GraniteNaverMapProviderDelegate?)
161
+
162
+ /**
163
+ * Called when the view is attached to window
164
+ */
165
+ fun onAttachedToWindow()
166
+
167
+ /**
168
+ * Called when the view is detached from window
169
+ */
170
+ fun onDetachedFromWindow()
171
+
172
+ /**
173
+ * Called when the view size changes
174
+ */
175
+ fun onSizeChanged(width: Int, height: Int)
176
+
177
+ /**
178
+ * Called on host resume
179
+ */
180
+ fun onHostResume()
181
+
182
+ /**
183
+ * Called on host pause
184
+ */
185
+ fun onHostPause()
186
+
187
+ // MARK: - Camera
188
+
189
+ fun moveCamera(position: GraniteNaverMapCameraPosition, animated: Boolean)
190
+ fun animateToCoordinate(coordinate: GraniteNaverMapCoordinate)
191
+ fun animateToBounds(bounds: GraniteNaverMapBounds, padding: Int)
192
+
193
+ // MARK: - Map Properties
194
+
195
+ fun setMapType(type: GraniteNaverMapType)
196
+ fun setMapPadding(top: Int, left: Int, bottom: Int, right: Int)
197
+ fun setCompassEnabled(enabled: Boolean)
198
+ fun setScaleBarEnabled(enabled: Boolean)
199
+ fun setZoomControlEnabled(enabled: Boolean)
200
+ fun setLocationButtonEnabled(enabled: Boolean)
201
+ fun setBuildingHeight(height: Float)
202
+ fun setNightModeEnabled(enabled: Boolean)
203
+ fun setMinZoomLevel(level: Double)
204
+ fun setMaxZoomLevel(level: Double)
205
+ fun setScrollGesturesEnabled(enabled: Boolean)
206
+ fun setZoomGesturesEnabled(enabled: Boolean)
207
+ fun setTiltGesturesEnabled(enabled: Boolean)
208
+ fun setRotateGesturesEnabled(enabled: Boolean)
209
+ fun setStopGesturesEnabled(enabled: Boolean)
210
+ fun setLocationTrackingMode(mode: GraniteNaverMapLocationTrackingMode)
211
+ fun setLayerGroupEnabled(group: String, enabled: Boolean)
212
+
213
+ // MARK: - Markers
214
+
215
+ fun addMarker(data: GraniteNaverMapMarkerData)
216
+ fun updateMarker(data: GraniteNaverMapMarkerData)
217
+ fun removeMarker(identifier: String)
218
+
219
+ // MARK: - Polylines
220
+
221
+ fun addPolyline(data: GraniteNaverMapPolylineData)
222
+ fun updatePolyline(data: GraniteNaverMapPolylineData)
223
+ fun removePolyline(identifier: String)
224
+
225
+ // MARK: - Polygons
226
+
227
+ fun addPolygon(data: GraniteNaverMapPolygonData)
228
+ fun updatePolygon(data: GraniteNaverMapPolygonData)
229
+ fun removePolygon(identifier: String)
230
+
231
+ // MARK: - Circles
232
+
233
+ fun addCircle(data: GraniteNaverMapCircleData)
234
+ fun updateCircle(data: GraniteNaverMapCircleData)
235
+ fun removeCircle(identifier: String)
236
+
237
+ // MARK: - Paths
238
+
239
+ fun addPath(data: GraniteNaverMapPathData)
240
+ fun updatePath(data: GraniteNaverMapPathData)
241
+ fun removePath(identifier: String)
242
+ }
@@ -0,0 +1,116 @@
1
+ package run.granite.navermap
2
+
3
+ import android.content.Context
4
+
5
+ /**
6
+ * Type alias for provider creation lambda
7
+ */
8
+ typealias GraniteNaverMapProviderCreator = (Context) -> GraniteNaverMapProvider
9
+
10
+ /**
11
+ * Internal wrapper to adapt lambda to factory interface
12
+ */
13
+ private class LambdaProviderFactory(
14
+ private val creator: GraniteNaverMapProviderCreator
15
+ ) : GraniteNaverMapProviderFactory {
16
+ override fun createProvider(context: Context): GraniteNaverMapProvider {
17
+ return creator(context)
18
+ }
19
+ }
20
+
21
+ /**
22
+ * Registry singleton for NaverMap provider factories
23
+ *
24
+ * Brownfield apps can register their own provider factory at app startup.
25
+ * If no factory is registered and the default provider is included, the built-in
26
+ * NMapsMap provider factory will be used.
27
+ *
28
+ * Usage:
29
+ * ```kotlin
30
+ * // In your Application.onCreate() or before using NaverMap:
31
+ * GraniteNaverMapRegistry.register { context ->
32
+ * MyNaverMapProvider(context)
33
+ * }
34
+ * ```
35
+ */
36
+ object GraniteNaverMapRegistry {
37
+ private var _factory: GraniteNaverMapProviderFactory? = null
38
+
39
+ /**
40
+ * The currently registered factory
41
+ */
42
+ val factory: GraniteNaverMapProviderFactory?
43
+ get() = _factory
44
+
45
+ /**
46
+ * Register a provider using a lambda. Call this at app startup before using NaverMap.
47
+ * This is the preferred Kotlin API.
48
+ *
49
+ * Usage:
50
+ * ```kotlin
51
+ * GraniteNaverMapRegistry.register { context ->
52
+ * MyNaverMapProvider(context)
53
+ * }
54
+ * ```
55
+ */
56
+ fun register(creator: GraniteNaverMapProviderCreator) {
57
+ _factory = LambdaProviderFactory(creator)
58
+ }
59
+
60
+ /**
61
+ * Register a custom provider factory. Call this at app startup before using NaverMap.
62
+ * This API is provided for Java compatibility.
63
+ */
64
+ fun register(factory: GraniteNaverMapProviderFactory) {
65
+ _factory = factory
66
+ }
67
+
68
+ /**
69
+ * Create a new provider instance for a NaverMap view.
70
+ * Each view should call this to get its own provider instance.
71
+ *
72
+ * @return A new provider instance, or null if no factory is registered and default provider is not included
73
+ */
74
+ fun createProvider(context: Context): GraniteNaverMapProvider? {
75
+ // Use registered factory if available
76
+ _factory?.let { return it.createProvider(context) }
77
+
78
+ // Only try to create built-in provider if it's included in the build
79
+ if (BuildConfig.INCLUDE_DEFAULT_PROVIDER) {
80
+ return createBuiltInProviderFactory()?.createProvider(context)
81
+ }
82
+
83
+ return null
84
+ }
85
+
86
+ /**
87
+ * Create built-in provider factory using reflection to avoid compile-time dependency
88
+ */
89
+ private fun createBuiltInProviderFactory(): GraniteNaverMapProviderFactory? {
90
+ return try {
91
+ val clazz = Class.forName("run.granite.navermap.builtinProvider.BuiltInGraniteNaverMapProviderFactory")
92
+ clazz.getDeclaredConstructor().newInstance() as GraniteNaverMapProviderFactory
93
+ } catch (e: Exception) {
94
+ null
95
+ }
96
+ }
97
+
98
+ /**
99
+ * Check if a custom factory has been registered
100
+ */
101
+ val hasCustomFactory: Boolean
102
+ get() = _factory != null
103
+
104
+ /**
105
+ * Check if the default provider is available in this build
106
+ */
107
+ val hasDefaultProvider: Boolean
108
+ get() = BuildConfig.INCLUDE_DEFAULT_PROVIDER
109
+
110
+ /**
111
+ * Reset the factory (useful for testing)
112
+ */
113
+ fun reset() {
114
+ _factory = null
115
+ }
116
+ }