@mint-ui/map 1.2.0-test.2 → 1.2.0-test.21

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 (32) hide show
  1. package/README.md +7 -7
  2. package/dist/components/mint-map/core/MintMapController.d.ts +1 -0
  3. package/dist/components/mint-map/core/MintMapCore.js +2 -2
  4. package/dist/components/mint-map/core/advanced/index.d.ts +1 -4
  5. package/dist/components/mint-map/core/advanced/woongCanvas/WoongCanvasLayer.d.ts +227 -0
  6. package/dist/components/mint-map/core/advanced/woongCanvas/{WoongKonvaMarker.js → WoongCanvasLayer.js} +338 -237
  7. package/dist/components/mint-map/core/advanced/woongCanvas/index.d.ts +12 -1
  8. package/dist/components/mint-map/core/advanced/woongCanvas/shared/context.d.ts +81 -12
  9. package/dist/components/mint-map/core/advanced/woongCanvas/shared/context.js +85 -14
  10. package/dist/components/mint-map/core/advanced/woongCanvas/shared/index.d.ts +11 -0
  11. package/dist/components/mint-map/core/advanced/woongCanvas/shared/performance.d.ts +62 -13
  12. package/dist/components/mint-map/core/advanced/woongCanvas/shared/performance.js +62 -13
  13. package/dist/components/mint-map/core/advanced/woongCanvas/shared/renderer.d.ts +115 -0
  14. package/dist/components/mint-map/core/advanced/woongCanvas/shared/renderer.js +288 -0
  15. package/dist/components/mint-map/core/advanced/woongCanvas/shared/types.d.ts +138 -16
  16. package/dist/components/mint-map/core/advanced/woongCanvas/shared/types.js +20 -0
  17. package/dist/components/mint-map/core/advanced/woongCanvas/shared/utils.d.ts +162 -10
  18. package/dist/components/mint-map/core/advanced/woongCanvas/shared/utils.js +235 -14
  19. package/dist/components/mint-map/core/wrapper/MapMarkerWrapper.js +22 -1
  20. package/dist/components/mint-map/google/GoogleMintMapController.d.ts +1 -0
  21. package/dist/components/mint-map/google/GoogleMintMapController.js +7 -1
  22. package/dist/components/mint-map/kakao/KakaoMintMapController.d.ts +1 -0
  23. package/dist/components/mint-map/kakao/KakaoMintMapController.js +7 -1
  24. package/dist/components/mint-map/naver/NaverMintMapController.d.ts +3 -0
  25. package/dist/components/mint-map/naver/NaverMintMapController.js +40 -4
  26. package/dist/index.es.js +1078 -283
  27. package/dist/index.js +35 -15
  28. package/dist/index.umd.js +1091 -283
  29. package/package.json +1 -1
  30. package/.claude/settings.local.json +0 -16
  31. package/dist/components/mint-map/core/advanced/woongCanvas/ClusterMarker.d.ts +0 -11
  32. package/dist/components/mint-map/core/advanced/woongCanvas/WoongKonvaMarker.d.ts +0 -48
package/README.md CHANGED
@@ -129,7 +129,7 @@ npm pack
129
129
  #### 5. NPM에 배포
130
130
  스코프 패키지(`@mint-ui/map`)는 기본적으로 private이므로 public으로 배포해야 합니다.
131
131
  ```bash
132
- npm publish --access public
132
+ npm publish
133
133
  ```
134
134
 
135
135
  #### 6. 배포 완료 확인
@@ -154,7 +154,7 @@ npm version patch
154
154
  npm pack
155
155
 
156
156
  # 5단계: 배포
157
- npm publish --access public
157
+ npm publish
158
158
  ```
159
159
 
160
160
  ### 현재 패키지 정보
@@ -185,7 +185,7 @@ npm publish --access public
185
185
  npm run build
186
186
 
187
187
  # test tag로 배포
188
- npm publish --access public --tag test
188
+ npm publish --tag test
189
189
  ```
190
190
 
191
191
  3. **변경사항 커밋 및 푸시**
@@ -202,7 +202,7 @@ npm publish --access public
202
202
 
203
203
  # 빌드 및 배포
204
204
  npm run build
205
- npm publish --access public --tag test
205
+ npm publish --tag test
206
206
 
207
207
  # 커밋 및 푸시
208
208
  git add .
@@ -215,7 +215,7 @@ npm publish --access public
215
215
  git checkout -b 1.2.0-test.2
216
216
  npm version 1.2.0-test.2 --no-git-tag-version
217
217
  npm run build
218
- npm publish --access public --tag test
218
+ npm publish --tag test
219
219
  git add .
220
220
  git commit -m "chore: release 1.2.0-test.2"
221
221
  git push origin 1.2.0-test.2
@@ -234,7 +234,7 @@ npm publish --access public
234
234
 
235
235
  # 빌드 및 배포
236
236
  npm run build
237
- npm publish --access public
237
+ npm publish
238
238
 
239
239
  # main에 푸시
240
240
  git push origin main
@@ -267,5 +267,5 @@ npm install @mint-ui/map@1.2.0-test.1
267
267
  ### 주의사항
268
268
  - 배포하기 전에 반드시 `npm run build`를 실행해야 합니다
269
269
  - 버전은 한 번 배포하면 되돌릴 수 없으니 신중하게 결정하세요
270
- - 스코프 패키지는 `--access public` 옵션을 반드시 붙여야 합니다
270
+ - 스코프 패키지는 `` 옵션을 반드시 붙여야 합니다
271
271
  - test tag로 배포할 때는 `--no-git-tag-version` 옵션을 사용하여 git tag 생성을 방지합니다
@@ -24,6 +24,7 @@ export declare abstract class MintMapController {
24
24
  abstract updateMarker(marker: Marker, options: MarkerOptions): void;
25
25
  abstract clearDrawable(drawable: Drawable): boolean;
26
26
  abstract markerToTheTop(marker: Marker): void;
27
+ abstract restoreMarkerZIndex(marker: Marker): void;
27
28
  abstract isMapDragged(): boolean;
28
29
  abstract setMapDragged(value: boolean): void;
29
30
  abstract setMarkerZIndex(marker: Marker, zIndex: number): void;
@@ -8,8 +8,8 @@ var React = require('react');
8
8
  var MapTypes = require('../types/MapTypes.js');
9
9
  var MintMapProvider = require('./provider/MintMapProvider.js');
10
10
  var MintMapCore_module = require('./MintMapCore.module.scss.js');
11
- require('../types/MapDrawables.js');
12
- require('../types/MapEventTypes.js');
11
+ require('./advanced/woongCanvas/shared/types.js');
12
+ require('./advanced/woongCanvas/shared/utils.js');
13
13
  var context = require('./advanced/woongCanvas/shared/context.js');
14
14
  require('./advanced/woongCanvas/shared/performance.js');
15
15
 
@@ -2,7 +2,4 @@ export * from './shapes';
2
2
  export * from './canvas';
3
3
  export * from './MapBuildingProjection';
4
4
  export * from './MapLoadingComponents';
5
- export { default as WoongKonvaMarker } from './woongCanvas/WoongKonvaMarker';
6
- export type { WoongKonvaMarkerProps } from './woongCanvas/WoongKonvaMarker';
7
- export { KonvaMarkerProvider, LRUCache, SpatialHashGrid, useKonvaMarkerContext } from './woongCanvas/shared';
8
- export type { RenderUtils, CustomRenderBase, CustomRenderAnimation, CustomRenderEvent, RenderBaseParams, RenderAnimationParams, RenderEventParams } from './woongCanvas/shared';
5
+ export * from './woongCanvas';
@@ -0,0 +1,227 @@
1
+ import React from "react";
2
+ import { MarkerOptions } from "../../../types";
3
+ import { KonvaCanvasData, CanvasDataType, CustomRenderBase, CustomRenderAnimation, CustomRenderEvent } from "./shared";
4
+ export { KonvaMarkerProvider, LRUCache, SpatialHashGrid, CanvasDataType } from "./shared";
5
+ export type { KonvaCanvasOption, Paths, KonvaCanvasData, CustomRenderBase, CustomRenderAnimation, CustomRenderEvent, RenderUtils, RenderBaseParams, RenderAnimationParams, RenderEventParams } from "./shared";
6
+ /**
7
+ * 공통 Props (MARKER와 POLYGON 모두 사용)
8
+ */
9
+ interface WoongCanvasLayerBaseProps<T> extends Pick<MarkerOptions, 'zIndex' | 'anchor' | 'visible'> {
10
+ /** 렌더링할 데이터 배열 (마커 또는 폴리곤) */
11
+ data: KonvaCanvasData<T>[];
12
+ /** 마커 클릭 시 호출되는 콜백 (선택) */
13
+ onClick?: (payload: KonvaCanvasData<T>, selectedIds: Set<string>) => void;
14
+ /** 마커에 마우스 오버 시 호출되는 콜백 (선택) */
15
+ onMouseOver?: (payload: KonvaCanvasData<T>) => void;
16
+ /** 마커에서 마우스 아웃 시 호출되는 콜백 (선택) */
17
+ onMouseOut?: (payload: KonvaCanvasData<T>) => void;
18
+ /** 다중 선택 활성화 여부 (기본: false) */
19
+ enableMultiSelect?: boolean;
20
+ /** hover 시 마커를 최상단으로 표시 (기본: false) */
21
+ topOnHover?: boolean;
22
+ /** 뷰포트 컬링 활성화 여부 (기본: true) */
23
+ enableViewportCulling?: boolean;
24
+ /** 뷰포트 컬링 여유 공간 (기본: 100px) */
25
+ cullingMargin?: number;
26
+ /** LRU 캐시 최대 크기 (기본: 10000) */
27
+ maxCacheSize?: number;
28
+ /** 외부에서 제어하는 선택된 항목 배열 (선택) */
29
+ selectedItems?: KonvaCanvasData<T>[];
30
+ /** 외부에서 전달된 단일 선택 아이템 (특별한 효과용) */
31
+ selectedItem?: KonvaCanvasData<T> | null;
32
+ /** 상호작용 비활성화 (hover, click 등 모든 이벤트 차단) */
33
+ disableInteraction?: boolean;
34
+ }
35
+ /**
36
+ * MARKER 타입 Props - 커스텀 렌더링 필수
37
+ */
38
+ interface WoongCanvasLayerPropsForMarker<T> extends WoongCanvasLayerBaseProps<T> {
39
+ /** 데이터 타입 */
40
+ dataType: CanvasDataType.MARKER;
41
+ /** Base Layer 렌더링 함수 (필수) */
42
+ renderBase: CustomRenderBase<T>;
43
+ /** Animation Layer 렌더링 함수 (선택, 애니메이션용) */
44
+ renderAnimation?: CustomRenderAnimation<T>;
45
+ /** Event Layer 렌더링 함수 (선택) */
46
+ renderEvent?: CustomRenderEvent<T>;
47
+ }
48
+ /**
49
+ * POLYGON 타입 Props - 스타일 속성으로 내부 처리
50
+ */
51
+ interface WoongCanvasLayerPropsForPolygon<T> extends WoongCanvasLayerBaseProps<T> {
52
+ /** 데이터 타입 */
53
+ dataType: CanvasDataType.POLYGON;
54
+ /** 기본 폴리곤 채우기 색상 (필수) */
55
+ baseFillColor: string;
56
+ /** 기본 폴리곤 테두리 색상 (필수) */
57
+ baseStrokeColor: string;
58
+ /** 기본 폴리곤 테두리 두께 (필수) */
59
+ baseLineWidth: number;
60
+ /** 선택된 폴리곤 채우기 색상 (선택) */
61
+ selectedFillColor?: string;
62
+ /** 선택된 폴리곤 테두리 색상 (선택) */
63
+ selectedStrokeColor?: string;
64
+ /** 선택된 폴리곤 테두리 두께 (선택) */
65
+ selectedLineWidth?: number;
66
+ /** 마지막 선택된 폴리곤 채우기 색상 (선택, 기본값: selectedFillColor) */
67
+ activeFillColor?: string;
68
+ /** 마지막 선택된 폴리곤 테두리 색상 (선택, 기본값: selectedStrokeColor) */
69
+ activeStrokeColor?: string;
70
+ /** 마지막 선택된 폴리곤 테두리 두께 (선택, 기본값: selectedLineWidth) */
71
+ activeLineWidth?: number;
72
+ /** Hover 시 폴리곤 채우기 색상 (선택, 기본값: selectedFillColor) */
73
+ hoveredFillColor?: string;
74
+ /** Hover 시 폴리곤 테두리 색상 (선택, 기본값: selectedStrokeColor) */
75
+ hoveredStrokeColor?: string;
76
+ /** Hover 시 폴리곤 테두리 두께 (선택, 기본값: selectedLineWidth) */
77
+ hoveredLineWidth?: number;
78
+ }
79
+ /**
80
+ * 최종 Props 타입 - Discriminated Union
81
+ */
82
+ export declare type WoongCanvasLayerProps<T> = WoongCanvasLayerPropsForMarker<T> | WoongCanvasLayerPropsForPolygon<T>;
83
+ declare const WoongCanvasLayer: <T>(props: WoongCanvasLayerProps<T>) => React.ReactPortal;
84
+ /**
85
+ * 🚀 WoongCanvasLayer - Konva 기반 초고성능 마커/폴리곤 렌더링 컴포넌트
86
+ *
87
+ * 30,000개 이상의 마커/폴리곤을 60fps로 렌더링하는 최적화된 Canvas 레이어 시스템입니다.
88
+ *
89
+ * ## 🎯 주요 특징
90
+ * - **30,000개 이상의 폴리곤/마커를 60fps로 렌더링**
91
+ * - **Multi-Layer 아키텍처**: Base/Animation/Event 레이어 분리
92
+ * - **Spatial Hash Grid**: O(1) 수준의 빠른 Hit Test
93
+ * - **LRU 캐시**: 좌표 변환 결과 캐싱으로 성능 최적화
94
+ * - **Viewport Culling**: 화면에 보이는 영역만 렌더링
95
+ * - **Discriminated Union Props**: 타입 안전한 MARKER/POLYGON 모드
96
+ * - **topOnHover + renderEvent 조합**: hover된 항목을 최상단에 표시
97
+ *
98
+ * ## 📋 Props API
99
+ *
100
+ * ### 공통 Props (MARKER & POLYGON 모두 사용)
101
+ * @param data - 렌더링할 데이터 배열
102
+ * @param dataType - 'MARKER' 또는 'POLYGON'
103
+ * @param onClick - 클릭 시 호출되는 콜백 함수
104
+ * @param onMouseOver - Hover 시작 시 호출되는 콜백 함수
105
+ * @param onMouseOut - Hover 종료 시 호출되는 콜백 함수
106
+ * @param enableMultiSelect - 다중 선택 활성화 여부 (기본: false)
107
+ * @param topOnHover - Hover 시 최상단 표시 여부 (기본: false)
108
+ * @param enableViewportCulling - 뷰포트 컬링 활성화 여부 (기본: true)
109
+ * @param cullingMargin - 컬링 여유 공간 (기본: 100px)
110
+ * @param maxCacheSize - LRU 캐시 최대 크기 (기본: 30000)
111
+ * @param selectedItems - 외부 제어 선택 상태
112
+ * @param selectedItem - 단일 선택 아이템
113
+ * @param disableInteraction - 모든 상호작용 비활성화 (기본: false)
114
+ * @param zIndex - 레이어 순서 (기본: 0)
115
+ * @param visible - 표시 여부 (기본: true)
116
+ *
117
+ * ### MARKER 타입 전용 Props
118
+ * @param renderBase - Base Layer 렌더링 함수 (필수)
119
+ * @param renderAnimation - Animation Layer 렌더링 함수 (선택)
120
+ * @param renderEvent - Event Layer 렌더링 함수 (선택)
121
+ *
122
+ * ### POLYGON 타입 전용 Props
123
+ * @param baseFillColor - 기본 채우기 색상 (필수)
124
+ * @param baseStrokeColor - 기본 테두리 색상 (필수)
125
+ * @param baseLineWidth - 기본 테두리 두께 (필수)
126
+ * @param selectedFillColor - 선택 채우기 색상 (선택)
127
+ * @param selectedStrokeColor - 선택 테두리 색상 (선택)
128
+ * @param selectedLineWidth - 선택 테두리 두께 (선택)
129
+ * @param activeFillColor - 마지막 선택 채우기 색상 (선택)
130
+ * @param activeStrokeColor - 마지막 선택 테두리 색상 (선택)
131
+ * @param activeLineWidth - 마지막 선택 테두리 두께 (선택)
132
+ * @param hoveredFillColor - Hover 채우기 색상 (선택)
133
+ * @param hoveredStrokeColor - Hover 테두리 색상 (선택)
134
+ * @param hoveredLineWidth - Hover 테두리 두께 (선택)
135
+ *
136
+ * ## 🎯 사용 방법
137
+ *
138
+ * ### 1️⃣ POLYGON 모드 (자동 렌더링)
139
+ * ```tsx
140
+ * <WoongCanvasLayer
141
+ * dataType={CanvasDataType.POLYGON}
142
+ * data={polygons}
143
+ * baseFillColor="rgba(255, 100, 100, 0.5)"
144
+ * baseStrokeColor="rgba(200, 50, 50, 0.8)"
145
+ * baseLineWidth={2}
146
+ * selectedFillColor="rgba(255, 193, 7, 0.7)"
147
+ * selectedStrokeColor="rgba(255, 152, 0, 1)"
148
+ * selectedLineWidth={4}
149
+ * hoveredFillColor="rgba(100, 150, 255, 0.8)"
150
+ * hoveredStrokeColor="rgba(0, 100, 200, 1)"
151
+ * hoveredLineWidth={3}
152
+ * enableMultiSelect={true}
153
+ * onClick={handleClick}
154
+ * />
155
+ * ```
156
+ *
157
+ * ### 2️⃣ MARKER 모드 (커스텀 렌더링)
158
+ * ```tsx
159
+ * <WoongCanvasLayer
160
+ * dataType={CanvasDataType.MARKER}
161
+ * data={markers}
162
+ * renderBase={renderMarkerBase}
163
+ * renderAnimation={renderMarkerAnimation}
164
+ * renderEvent={renderMarkerEvent}
165
+ * topOnHover={true}
166
+ * onClick={handleClick}
167
+ * />
168
+ * ```
169
+ *
170
+ * ### 3️⃣ topOnHover + renderEvent 조합
171
+ *
172
+ * `topOnHover={true}`와 `renderEvent`를 함께 사용하면 hover된 항목이 최상단에 표시됩니다:
173
+ *
174
+ * ```tsx
175
+ * <WoongCanvasLayer
176
+ * dataType={CanvasDataType.MARKER}
177
+ * data={markers}
178
+ * renderBase={renderMarkerBase}
179
+ * renderEvent={renderMarkerEvent}
180
+ * topOnHover={true}
181
+ * onClick={handleClick}
182
+ * />
183
+ * ```
184
+ *
185
+ * **동작 방식:**
186
+ * 1. **Base Layer**: hover된 항목을 제외하고 일반 항목들 렌더링
187
+ * 2. **Event Layer**:
188
+ * - 먼저 hover된 항목을 제외한 나머지 항목들 렌더링
189
+ * - 그 다음 hover된 항목을 최상단에 렌더링 (시각적 우선순위)
190
+ *
191
+ * ## 📊 데이터 형식
192
+ * ```typescript
193
+ * const data: KonvaCanvasData<T>[] = [
194
+ * {
195
+ * id: 'unique-id',
196
+ * position: new Position(lat, lng),
197
+ * // POLYGON: paths 필수
198
+ * paths: [[[lat, lng], [lat, lng], ...]],
199
+ * // MARKER: boxWidth/boxHeight 권장 (Hit Test 정확도)
200
+ * boxWidth: 60,
201
+ * boxHeight: 75,
202
+ * tailHeight: 9, // 꼬리 높이 (Viewport Culling용, Hit Test 제외)
203
+ * // 커스텀 데이터
204
+ * ...customData
205
+ * }
206
+ * ];
207
+ * ```
208
+ *
209
+ * ## ⚡ 성능 최적화 팁
210
+ * 1. **동적 boxWidth 계산**: `measureText()`로 실제 너비 계산 후 전달
211
+ * 2. **enableViewportCulling**: 대량 데이터 시 필수 (기본 true)
212
+ * 3. **selectedItems 외부 관리**: 상태를 외부에서 관리하여 리렌더링 최소화
213
+ * 4. **React.memo 최적화**: 컴포넌트가 자동으로 불필요한 리렌더링 방지
214
+ *
215
+ * @template T 마커/폴리곤 데이터의 추가 속성 타입
216
+ *
217
+ * @example
218
+ * // 동적 boxWidth 계산 예시
219
+ * const tempCtx = document.createElement('canvas').getContext('2d');
220
+ * tempCtx.font = 'bold 15px Arial';
221
+ * const boxWidth = Math.max(60, tempCtx.measureText(text).width + 20);
222
+ *
223
+ * @see {@link ./README.md} 전체 문서
224
+ * @version 2.2.1
225
+ * @since 2.0.0
226
+ */
227
+ export default WoongCanvasLayer;