@rousen/react-naver-maps 0.0.1

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/README.md ADDED
@@ -0,0 +1,275 @@
1
+ # react-naver-maps
2
+
3
+ 네이버 지도 API를 React에서 쉽게 사용할 수 있도록 만든 라이브러리입니다.
4
+
5
+ ## 설치
6
+
7
+ ```bash
8
+ npm install react-naver-maps
9
+ # 또는
10
+ yarn add react-naver-maps
11
+ # 또는
12
+ pnpm add react-naver-maps
13
+ ```
14
+
15
+ ## 사용법
16
+
17
+ ### 기본 사용법
18
+
19
+ ```tsx
20
+ import { Map, MapProvider, Marker } from "react-naver-maps";
21
+
22
+ function App() {
23
+ return (
24
+ <MapProvider>
25
+ <Map ncpKeyId="your-ncp-key-id">
26
+ <Marker position={[127.0276, 37.4979]} />
27
+ </Map>
28
+ </MapProvider>
29
+ );
30
+ }
31
+ ```
32
+
33
+ ### MapProvider로 감싸기
34
+
35
+ `MapProvider`는 여러 맵 인스턴스를 관리하고 `useMap` 훅을 통해 접근할 수 있게 해줍니다.
36
+
37
+ ```tsx
38
+ import { Map, MapProvider, Marker, useMap } from "react-naver-maps";
39
+
40
+ function MyComponent() {
41
+ const { current } = useMap(); // 현재 맵 인스턴스 접근
42
+
43
+ const handleClick = () => {
44
+ if (current) {
45
+ current.setCenter(new naver.maps.LatLng(37.4979, 127.0276));
46
+ }
47
+ };
48
+
49
+ return <button onClick={handleClick}>중심 이동</button>;
50
+ }
51
+ ```
52
+
53
+ ### 주요 컴포넌트
54
+
55
+ - **Map**: 네이버 지도 컨테이너 컴포넌트
56
+ - **Marker**: 지도에 마커를 표시하는 컴포넌트
57
+ - **Overlay**: 커스텀 오버레이 컴포넌트 (React 컴포넌트를 지도에 표시)
58
+ - **Polygon**: 다각형 영역을 표시하는 컴포넌트
59
+ - **Polyline**: 선을 표시하는 컴포넌트
60
+
61
+ ### Map 컴포넌트 Props
62
+
63
+ ```tsx
64
+ interface MapProps {
65
+ ncpKeyId: string; // 필수: NCP 클라이언트 ID
66
+ id?: string; // 맵 인스턴스 ID (여러 맵 관리 시 사용)
67
+ mapTypeId?: naver.maps.MapTypeId; // 지도 타입 (기본값: "normal")
68
+ mapOptions?: naver.maps.MapOptions; // 네이버 맵 옵션
69
+ submodules?: NaverMapsSubmodule[]; // 서브모듈 (gl, traffic, transit 등)
70
+ style?: React.CSSProperties; // 컨테이너 스타일
71
+ onLoad?: (map: naver.maps.Map) => void;
72
+ onZoomStart?: (map: naver.maps.Map) => void;
73
+ onZoomEnd?: (map: naver.maps.Map) => void;
74
+ onDragStart?: (map: naver.maps.Map) => void;
75
+ onDragEnd?: (map: naver.maps.Map) => void;
76
+ }
77
+ ```
78
+
79
+ ### Marker 컴포넌트 예제
80
+
81
+ ```tsx
82
+ <Marker
83
+ position={[127.0276, 37.4979]}
84
+ title="마커 제목"
85
+ onClick={(event) => console.log("마커 클릭", event)}
86
+ onMouseEnter={(marker) => console.log("마우스 진입", marker)}
87
+ />
88
+ ```
89
+
90
+ ### Overlay 컴포넌트 예제
91
+
92
+ ```tsx
93
+ <Overlay
94
+ position={[127.0276, 37.4979]}
95
+ zIndex={100}
96
+ anchor="center"
97
+ >
98
+ <div style={{ background: "white", padding: "10px" }}>
99
+ 커스텀 오버레이 내용
100
+ </div>
101
+ </Overlay>
102
+ ```
103
+
104
+ ### Polygon 컴포넌트 예제
105
+
106
+ ```tsx
107
+ <Polygon
108
+ paths={[
109
+ [127.0276, 37.4979],
110
+ [127.0286, 37.4989],
111
+ [127.0296, 37.4979],
112
+ ]}
113
+ fillColor="#ff0000"
114
+ fillOpacity={0.3}
115
+ strokeColor="#0000ff"
116
+ strokeWeight={2}
117
+ />
118
+ ```
119
+
120
+ ### Polyline 컴포넌트 예제
121
+
122
+ ```tsx
123
+ <Polyline
124
+ path={[
125
+ [127.0276, 37.4979],
126
+ [127.0286, 37.4989],
127
+ [127.0296, 37.4979],
128
+ ]}
129
+ strokeColor="#ff0000"
130
+ strokeWeight={3}
131
+ onClick={(event) => console.log("선 클릭", event)}
132
+ />
133
+ ```
134
+
135
+ ## API
136
+
137
+ ### 컴포넌트
138
+
139
+ - `Map` - 네이버 지도 컨테이너 컴포넌트
140
+ - `MapProvider` - 맵 인스턴스 관리 프로바이더
141
+ - `Marker` - 마커 컴포넌트
142
+ - `Overlay` - 커스텀 오버레이 컴포넌트
143
+ - `Polygon` - 다각형 컴포넌트
144
+ - `Polyline` - 선 컴포넌트
145
+
146
+ ### 훅
147
+
148
+ - `useMap()` - 현재 맵 인스턴스 및 모든 맵 인스턴스에 접근
149
+
150
+ ### 타입
151
+
152
+ - `MapProps` - Map 컴포넌트 props 타입
153
+ - `MarkerProps` - Marker 컴포넌트 props 타입
154
+ - `PolylineProps` - Polyline 컴포넌트 props 타입
155
+
156
+ ## 개발
157
+
158
+ ### 의존성 설치
159
+
160
+ ```bash
161
+ npm install
162
+ ```
163
+
164
+ ### 개발 모드 실행
165
+
166
+ ```bash
167
+ npm run dev
168
+ ```
169
+
170
+ ### 빌드
171
+
172
+ ```bash
173
+ npm run build
174
+ ```
175
+
176
+ ### Storybook 실행
177
+
178
+ ```bash
179
+ npm run storybook
180
+ ```
181
+
182
+ ### Storybook 빌드
183
+
184
+ ```bash
185
+ npm run build-storybook
186
+ ```
187
+
188
+ ### 타입 체크
189
+
190
+ ```bash
191
+ npm run type-check
192
+ ```
193
+
194
+ ### 린트
195
+
196
+ ```bash
197
+ npm run lint
198
+ ```
199
+
200
+ ## 프로젝트 구조
201
+
202
+ ```
203
+ src/
204
+ ├── components/ # React 컴포넌트들
205
+ │ ├── Map.tsx # 지도 컴포넌트
206
+ │ ├── Map.stories.tsx # Map Storybook 스토리
207
+ │ ├── MapProvider.tsx # 맵 컨텍스트 프로바이더 및 useMap 훅
208
+ │ ├── Marker.tsx # 마커 컴포넌트
209
+ │ ├── Marker.stories.tsx
210
+ │ ├── Overlay.tsx # 커스텀 오버레이 컴포넌트
211
+ │ ├── Overlay.stories.tsx
212
+ │ ├── Polygon.tsx # 다각형 컴포넌트
213
+ │ └── Polyline.tsx # 선 컴포넌트
214
+ ├── hooks/ # 커스텀 훅들
215
+ │ └── useScriptLoader.ts # 네이버 맵스 SDK 스크립트 로더 훅
216
+ ├── utils/ # 유틸리티 함수들
217
+ │ ├── scriptLoader.ts # 네이버 맵스 SDK 동적 로딩
218
+ │ └── customOverlay.ts # 커스텀 오버레이 클래스 생성
219
+ ├── const.ts # 상수 정의
220
+ └── index.ts # 라이브러리 진입점 (공개 API)
221
+ ```
222
+
223
+ ### 폴더 구조 설명
224
+
225
+ - **`components/`**: 모든 React 컴포넌트와 Storybook 스토리 파일
226
+ - `Map.tsx`: 네이버 지도 컨테이너 컴포넌트 및 MapContext 제공
227
+ - `MapProvider.tsx`: 여러 맵 인스턴스를 관리하는 Provider와 `useMap` 훅
228
+ - `Marker.tsx`, `Overlay.tsx`, `Polygon.tsx`, `Polyline.tsx`: 각종 오버레이 컴포넌트
229
+ - **`hooks/`**: 재사용 가능한 커스텀 훅들
230
+ - `useScriptLoader.ts`: 네이버 맵스 SDK 스크립트를 동적으로 로드하는 훅
231
+ - **`utils/`**: 순수 함수 유틸리티들
232
+ - `scriptLoader.ts`: 네이버 맵스 SDK 스크립트 동적 로딩 로직
233
+ - `customOverlay.ts`: React 컴포넌트를 네이버 맵스 오버레이로 변환하는 유틸리티
234
+ - **`index.ts`**: 라이브러리의 공개 API 진입점
235
+
236
+ ## 주요 기능
237
+
238
+ - 🗺️ **네이버 지도 통합**: 네이버 지도 API를 React 컴포넌트로 쉽게 사용
239
+ - 📍 **다양한 오버레이 지원**: Marker, Overlay, Polygon, Polyline 컴포넌트 제공
240
+ - 🎯 **타입 안정성**: TypeScript로 작성되어 완전한 타입 정의 제공
241
+ - 🔄 **동적 스크립트 로딩**: 네이버 맵스 SDK를 자동으로 로드
242
+ - 🎨 **커스텀 오버레이**: React 컴포넌트를 지도 오버레이로 사용 가능
243
+ - 📦 **트리 쉐이킹 지원**: 사용하지 않는 코드는 번들에서 제외
244
+ - 🔌 **서브모듈 지원**: GL, Traffic, Transit 등 네이버 맵스 서브모듈 지원
245
+ - 🎭 **Storybook**: 컴포넌트 예제 및 문서화
246
+
247
+ ## 호환성
248
+
249
+ 이 라이브러리는 다음 환경에서 테스트되었습니다:
250
+
251
+ - ✅ **Vite** - 완전 지원
252
+ - ✅ **Webpack 5** - 완전 지원
253
+ - ✅ **Next.js** - 완전 지원
254
+ - ✅ **Create React App** - 완전 지원
255
+ - ✅ **TypeScript** - 타입 정의 포함
256
+ - ✅ **ESM & CommonJS** - 양쪽 모두 지원
257
+ - ✅ **트리 쉐이킹** - 지원
258
+
259
+ ## 요구사항
260
+
261
+ - React >= 16.8.0 (Hooks 지원 필요)
262
+ - React DOM >= 16.8.0
263
+ - 네이버 클라우드 플랫폼(NCP) 클라이언트 ID
264
+
265
+ ## 기술 스택
266
+
267
+ - **React** - UI 라이브러리
268
+ - **TypeScript** - 타입 안정성
269
+ - **Rollup** - 번들러
270
+ - **Storybook** - 컴포넌트 문서화 및 개발 환경
271
+ - **ESLint** - 코드 품질 관리
272
+
273
+ ## 라이선스
274
+
275
+ MIT
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import './ExampleComponent.css';
3
+ export interface ExampleComponentProps {
4
+ /**
5
+ * 컴포넌트에 표시할 텍스트
6
+ */
7
+ text?: string;
8
+ /**
9
+ * 클릭 이벤트 핸들러
10
+ */
11
+ onClick?: () => void;
12
+ }
13
+ /**
14
+ * 예제 컴포넌트입니다.
15
+ */
16
+ declare const ExampleComponent: React.FC<ExampleComponentProps>;
17
+ export default ExampleComponent;
18
+ //# sourceMappingURL=ExampleComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExampleComponent.d.ts","sourceRoot":"","sources":["../../src/components/ExampleComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,wBAAwB,CAAC;AAEhC,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,QAAA,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CASrD,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { ReactNode } from "react";
2
+ import { NaverMapsSubmodule } from "../utils/scriptLoader";
3
+ export declare const MapContext: import("react").Context<naver.maps.Map | undefined>;
4
+ export interface MapProps {
5
+ ncpKeyId: string;
6
+ id?: string;
7
+ mapTypeId?: naver.maps.MapTypeId;
8
+ mapOptions?: naver.maps.MapOptions;
9
+ children: ReactNode;
10
+ submodules?: NaverMapsSubmodule[];
11
+ style?: React.CSSProperties;
12
+ onLoad?: (map: naver.maps.Map) => void;
13
+ onZoomStart?: (map: naver.maps.Map) => void;
14
+ onZoomEnd?: (map: naver.maps.Map) => void;
15
+ onDragEnd?: (map: naver.maps.Map) => void;
16
+ onDragStart?: (map: naver.maps.Map) => void;
17
+ }
18
+ declare const Map: import("react").ForwardRefExoticComponent<MapProps & import("react").RefAttributes<naver.maps.Map>>;
19
+ export default Map;
20
+ //# sourceMappingURL=Map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Map.d.ts","sourceRoot":"","sources":["../../src/components/Map.tsx"],"names":[],"mappings":"AACA,OAAO,EAKL,SAAS,EAKV,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAI3D,eAAO,MAAM,UAAU,qDAAuD,CAAC;AAC/E,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;IACjC,UAAU,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;IACnC,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAClC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC;IAC1C,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC;CAC7C;AAUD,QAAA,MAAM,GAAG,qGAgGR,CAAC;AAIF,eAAe,GAAG,CAAC"}
@@ -0,0 +1,20 @@
1
+ import React from "react";
2
+ export interface MountedMapContextType {
3
+ maps: {
4
+ [id: string]: naver.maps.Map;
5
+ };
6
+ onMount: (map: naver.maps.Map, id?: string) => void;
7
+ onUnmount: (id?: string) => void;
8
+ }
9
+ export declare const MountedMapContext: React.Context<MountedMapContextType>;
10
+ interface MapProviderProps {
11
+ children: React.ReactNode;
12
+ }
13
+ declare const MapProvider: ({ children }: MapProviderProps) => import("react/jsx-runtime").JSX.Element;
14
+ export type MapCollection = {
15
+ [id: string]: naver.maps.Map | undefined;
16
+ current?: naver.maps.Map;
17
+ };
18
+ export declare const useMap: () => MapCollection;
19
+ export default MapProvider;
20
+ //# sourceMappingURL=MapProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapProvider.d.ts","sourceRoot":"","sources":["../../src/components/MapProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqD,MAAM,OAAO,CAAC;AAI1E,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAA;KAAE,CAAC;IACvC,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,eAAO,MAAM,iBAAiB,sCAI5B,CAAC;AAEH,UAAU,gBAAgB;IACxB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,QAAA,MAAM,WAAW,GAAI,cAAc,gBAAgB,4CAwBlD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;IACzC,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,MAAM,qBAQlB,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,19 @@
1
+ interface MarkerClickEvent extends naver.maps.PointerEvent {
2
+ overlay: naver.maps.Marker;
3
+ domEvent: naver.maps.DOMEvent;
4
+ }
5
+ interface MarkerCallbacks {
6
+ click?: (marker: MarkerClickEvent) => void;
7
+ mouseenter?: (marker: naver.maps.Marker) => void;
8
+ mouseleave?: (marker: naver.maps.Marker) => void;
9
+ positionchanged?: (marker: naver.maps.Marker) => void;
10
+ }
11
+ export interface MarkerProps extends naver.maps.MarkerOptions {
12
+ onClick?: MarkerCallbacks["click"];
13
+ onMouseEnter?: MarkerCallbacks["mouseenter"];
14
+ onMouseLeave?: MarkerCallbacks["mouseleave"];
15
+ onPositionChanged?: MarkerCallbacks["positionchanged"];
16
+ }
17
+ declare const Marker: ({ onClick, onMouseEnter, onMouseLeave, onPositionChanged, ...markerOptions }: MarkerProps) => null;
18
+ export default Marker;
19
+ //# sourceMappingURL=Marker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Marker.d.ts","sourceRoot":"","sources":["../../src/components/Marker.tsx"],"names":[],"mappings":"AAIA,UAAU,gBAAiB,SAAQ,KAAK,CAAC,IAAI,CAAC,YAAY;IACxD,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;CAC/B;AAED,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IACjD,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IACjD,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;CACvD;AACD,MAAM,WAAW,WAAY,SAAQ,KAAK,CAAC,IAAI,CAAC,aAAa;IAC3D,OAAO,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IACnC,YAAY,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAC7C,YAAY,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;IAC7C,iBAAiB,CAAC,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC;CACxD;AAED,QAAA,MAAM,MAAM,GAAI,8EAMb,WAAW,SAkDb,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type ReactNode } from "react";
2
+ import { type OverlayAnchorType } from "../utils/customOverlay";
3
+ interface Props {
4
+ children: ReactNode;
5
+ position: naver.maps.Coord | naver.maps.CoordLiteral;
6
+ zIndex: number;
7
+ anchor: OverlayAnchorType;
8
+ }
9
+ declare const Overlay: ({ children, ...options }: Props) => import("react/jsx-runtime").JSX.Element;
10
+ export default Overlay;
11
+ //# sourceMappingURL=Overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Overlay.d.ts","sourceRoot":"","sources":["../../src/components/Overlay.tsx"],"names":[],"mappings":"AACA,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAiC,EAE/B,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAEhC,UAAU,KAAK;IACb,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,QAAA,MAAM,OAAO,GAAI,0BAA0B,KAAK,4CAyC/C,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface PolygonProps extends naver.maps.PolygonOptions {
2
+ onClick?: PolygonCallbacks["click"];
3
+ onMouseEnter?: PolygonCallbacks["mouseenter"];
4
+ }
5
+ interface PolygonCallbacks {
6
+ click?: (event: unknown) => void;
7
+ mouseenter?: (event: unknown) => void;
8
+ }
9
+ declare const Polygon: ({ onClick, onMouseEnter, ...options }: PolygonProps) => null;
10
+ export default Polygon;
11
+ //# sourceMappingURL=Polygon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Polygon.d.ts","sourceRoot":"","sources":["../../src/components/Polygon.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,IAAI,CAAC,cAAc;IAC7D,OAAO,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACpC,YAAY,CAAC,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC;CAC/C;AAED,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AACD,QAAA,MAAM,OAAO,GAAI,uCAId,YAAY,SA0Cd,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface PolylineProps extends Omit<naver.maps.PolylineOptions, "path"> {
2
+ path: number[][];
3
+ onClick?: PolylineCallbacks["click"];
4
+ onMouseEnter?: PolylineCallbacks["mouseenter"];
5
+ }
6
+ interface PolylineCallbacks {
7
+ click?: (event: unknown) => void;
8
+ mouseenter?: (event: unknown) => void;
9
+ }
10
+ declare const Polyline: ({ path, strokeColor, strokeWeight, strokeLineCap, strokeLineJoin, clickable, onClick, onMouseEnter, }: PolylineProps) => null;
11
+ export default Polyline;
12
+ //# sourceMappingURL=Polyline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Polyline.d.ts","sourceRoot":"","sources":["../../src/components/Polyline.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,aACf,SAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;IAChD,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC;CAChD;AAED,UAAU,iBAAiB;IACzB,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAED,QAAA,MAAM,QAAQ,GAAI,uGASf,aAAa,SAuDf,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const NCP_KEY_ID = "c9ay3yq15z";
2
+ export declare const MAP_OPTIONS: naver.maps.MapOptions;
3
+ //# sourceMappingURL=const.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../src/const.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,eAAe,CAAC;AAEvC,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,UAOpC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { NaverMapsSubmodule } from "../utils/scriptLoader";
2
+ export interface UseScriptLoaderOptions {
3
+ ncpKeyId: string;
4
+ submodules: NaverMapsSubmodule[];
5
+ }
6
+ declare const useScriptLoader: ({ ncpKeyId, submodules }: UseScriptLoaderOptions) => {
7
+ isScriptLoaded: boolean;
8
+ };
9
+ export default useScriptLoader;
10
+ //# sourceMappingURL=useScriptLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useScriptLoader.d.ts","sourceRoot":"","sources":["../../src/hooks/useScriptLoader.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE1E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,kBAAkB,EAAE,CAAC;CAClC;AAED,QAAA,MAAM,eAAe,GAAI,0BAA0B,sBAAsB;;CAgBxE,CAAC;AAEF,eAAe,eAAe,CAAC"}
package/dist/index.css ADDED
@@ -0,0 +1 @@
1
+ .example-component{background-color:#f9f9f9;border:1px solid #e0e0e0;border-radius:8px;cursor:pointer;padding:16px;transition:all .2s ease}.example-component:hover{background-color:#f0f0f0;border-color:#ccc}.example-component p{color:#333;font-size:16px;margin:0}
@@ -0,0 +1,83 @@
1
+ import * as react from 'react';
2
+ import react__default, { ReactNode } from 'react';
3
+ import * as react_jsx_runtime from 'react/jsx-runtime';
4
+
5
+ type NaverMapsSubmodule = "gl" | "traffic" | "transit" | "drawing" | "event" | "heatmap" | "marker";
6
+
7
+ interface MapProps {
8
+ ncpKeyId: string;
9
+ id?: string;
10
+ mapTypeId?: naver.maps.MapTypeId;
11
+ mapOptions?: naver.maps.MapOptions;
12
+ children: ReactNode;
13
+ submodules?: NaverMapsSubmodule[];
14
+ style?: React.CSSProperties;
15
+ onLoad?: (map: naver.maps.Map) => void;
16
+ onZoomStart?: (map: naver.maps.Map) => void;
17
+ onZoomEnd?: (map: naver.maps.Map) => void;
18
+ onDragEnd?: (map: naver.maps.Map) => void;
19
+ onDragStart?: (map: naver.maps.Map) => void;
20
+ }
21
+ declare const Map: react.ForwardRefExoticComponent<MapProps & react.RefAttributes<naver.maps.Map>>;
22
+
23
+ interface MapProviderProps {
24
+ children: react__default.ReactNode;
25
+ }
26
+ declare const MapProvider: ({ children }: MapProviderProps) => react_jsx_runtime.JSX.Element;
27
+ type MapCollection = {
28
+ [id: string]: naver.maps.Map | undefined;
29
+ current?: naver.maps.Map;
30
+ };
31
+ declare const useMap: () => MapCollection;
32
+
33
+ interface MarkerClickEvent extends naver.maps.PointerEvent {
34
+ overlay: naver.maps.Marker;
35
+ domEvent: naver.maps.DOMEvent;
36
+ }
37
+ interface MarkerCallbacks {
38
+ click?: (marker: MarkerClickEvent) => void;
39
+ mouseenter?: (marker: naver.maps.Marker) => void;
40
+ mouseleave?: (marker: naver.maps.Marker) => void;
41
+ positionchanged?: (marker: naver.maps.Marker) => void;
42
+ }
43
+ interface MarkerProps extends naver.maps.MarkerOptions {
44
+ onClick?: MarkerCallbacks["click"];
45
+ onMouseEnter?: MarkerCallbacks["mouseenter"];
46
+ onMouseLeave?: MarkerCallbacks["mouseleave"];
47
+ onPositionChanged?: MarkerCallbacks["positionchanged"];
48
+ }
49
+ declare const Marker: ({ onClick, onMouseEnter, onMouseLeave, onPositionChanged, ...markerOptions }: MarkerProps) => null;
50
+
51
+ type OverlayAnchorType = "top-left" | "top-center" | "top-right" | "center-left" | "center-center" | "center-right" | "bottom-left" | "bottom-center" | "bottom-right";
52
+
53
+ interface Props {
54
+ children: ReactNode;
55
+ position: naver.maps.Coord | naver.maps.CoordLiteral;
56
+ zIndex: number;
57
+ anchor: OverlayAnchorType;
58
+ }
59
+ declare const Overlay: ({ children, ...options }: Props) => react_jsx_runtime.JSX.Element;
60
+
61
+ interface PolygonProps extends naver.maps.PolygonOptions {
62
+ onClick?: PolygonCallbacks["click"];
63
+ onMouseEnter?: PolygonCallbacks["mouseenter"];
64
+ }
65
+ interface PolygonCallbacks {
66
+ click?: (event: unknown) => void;
67
+ mouseenter?: (event: unknown) => void;
68
+ }
69
+ declare const Polygon: ({ onClick, onMouseEnter, ...options }: PolygonProps) => null;
70
+
71
+ interface PolylineProps extends Omit<naver.maps.PolylineOptions, "path"> {
72
+ path: number[][];
73
+ onClick?: PolylineCallbacks["click"];
74
+ onMouseEnter?: PolylineCallbacks["mouseenter"];
75
+ }
76
+ interface PolylineCallbacks {
77
+ click?: (event: unknown) => void;
78
+ mouseenter?: (event: unknown) => void;
79
+ }
80
+ declare const Polyline: ({ path, strokeColor, strokeWeight, strokeLineCap, strokeLineJoin, clickable, onClick, onMouseEnter, }: PolylineProps) => null;
81
+
82
+ export { Map, MapProvider, Marker, Overlay, Polygon, Polyline, useMap };
83
+ export type { MapProps, MarkerProps, PolylineProps };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAE1E,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1 @@
1
+ .example-component{background-color:#f9f9f9;border:1px solid #e0e0e0;border-radius:8px;cursor:pointer;padding:16px;transition:all .2s ease}.example-component:hover{background-color:#f0f0f0;border-color:#ccc}.example-component p{color:#333;font-size:16px;margin:0}