@mint-ui/map 1.2.0-test.31 → 1.2.0-test.32

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 (27) hide show
  1. package/dist/components/mint-map/core/MintMapCore.js +5 -5
  2. package/dist/components/mint-map/core/advanced/index.d.ts +1 -1
  3. package/dist/components/mint-map/core/advanced/{woongCanvas/shared → shared}/context.d.ts +5 -5
  4. package/dist/components/mint-map/core/advanced/{woongCanvas/shared → shared}/context.js +8 -8
  5. package/dist/components/mint-map/core/advanced/{woongCanvas/shared → shared}/performance.d.ts +1 -1
  6. package/dist/components/mint-map/core/advanced/{woongCanvas/shared → shared}/performance.js +1 -1
  7. package/dist/components/mint-map/core/advanced/{woongCanvas/shared → shared}/types.d.ts +8 -11
  8. package/dist/components/mint-map/core/advanced/{woongCanvas/shared → shared}/utils.d.ts +2 -2
  9. package/dist/components/mint-map/core/advanced/{woongCanvas/shared → shared}/utils.js +3 -3
  10. package/dist/components/mint-map/core/advanced/woongCanvasMarker/WoongCanvasMarker.d.ts +97 -0
  11. package/dist/components/mint-map/core/advanced/{woongCanvas/WoongCanvasLayer.js → woongCanvasMarker/WoongCanvasMarker.js} +42 -123
  12. package/dist/components/mint-map/core/advanced/woongCanvasMarker/index.d.ts +4 -0
  13. package/dist/components/mint-map/core/advanced/woongCanvasPolygon/WoongCanvasPolygon.d.ts +113 -0
  14. package/dist/components/mint-map/core/advanced/woongCanvasPolygon/index.d.ts +3 -0
  15. package/dist/components/mint-map/core/advanced/{woongCanvas/shared → woongCanvasPolygon}/renderer.d.ts +1 -1
  16. package/dist/components/mint-map/google/GoogleMintMapController.js +4 -4
  17. package/dist/components/mint-map/kakao/KakaoMintMapController.js +4 -4
  18. package/dist/components/mint-map/naver/NaverMintMapController.js +4 -4
  19. package/dist/index.es.js +43 -350
  20. package/dist/index.js +9 -8
  21. package/dist/index.umd.js +46 -352
  22. package/package.json +1 -1
  23. package/dist/components/mint-map/core/advanced/woongCanvas/WoongCanvasLayer.d.ts +0 -162
  24. package/dist/components/mint-map/core/advanced/woongCanvas/index.d.ts +0 -3
  25. package/dist/components/mint-map/core/advanced/woongCanvas/shared/renderer.js +0 -234
  26. /package/dist/components/mint-map/core/advanced/{woongCanvas/shared → shared}/index.d.ts +0 -0
  27. /package/dist/components/mint-map/core/advanced/{woongCanvas/shared → shared}/types.js +0 -0
@@ -1,162 +0,0 @@
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
- * ## 📌 주요 특징
88
- * - **30,000개 이상의 폴리곤/마커를 60fps로 렌더링**
89
- * - **Multi-Layer 아키텍처**: Base/Animation/Event 레이어 분리
90
- * - **Spatial Hash Grid**: O(1) 수준의 빠른 Hit Test
91
- * - **LRU 캐시**: 좌표 변환 결과 캐싱으로 성능 최적화
92
- * - **Viewport Culling**: 화면에 보이는 영역만 렌더링
93
- * - **Discriminated Union Props**: 타입 안전한 MARKER/POLYGON 모드
94
- *
95
- * ## 🎯 사용 방법
96
- *
97
- * ### 1️⃣ POLYGON 모드 (자동 렌더링)
98
- * ```tsx
99
- * <WoongCanvasLayer
100
- * dataType={CanvasDataType.POLYGON}
101
- * data={polygons}
102
- * baseFillColor="rgba(255, 100, 100, 0.5)"
103
- * baseStrokeColor="rgba(200, 50, 50, 0.8)"
104
- * baseLineWidth={2}
105
- * selectedFillColor="rgba(255, 193, 7, 0.7)"
106
- * selectedStrokeColor="rgba(255, 152, 0, 1)"
107
- * selectedLineWidth={4}
108
- * hoveredFillColor="rgba(100, 150, 255, 0.8)" // optional
109
- * hoveredStrokeColor="rgba(0, 100, 200, 1)" // optional
110
- * hoveredLineWidth={3} // optional
111
- * enableMultiSelect={true}
112
- * onClick={handleClick}
113
- * />
114
- * ```
115
- *
116
- * ### 2️⃣ MARKER 모드 (커스텀 렌더링)
117
- * ```tsx
118
- * <WoongCanvasLayer
119
- * dataType={CanvasDataType.MARKER}
120
- * data={markers}
121
- * renderBase={renderMarkerBase} // required
122
- * renderAnimation={renderMarkerAnimation} // optional
123
- * renderEvent={renderMarkerEvent} // optional
124
- * topOnHover={true}
125
- * onClick={handleClick}
126
- * />
127
- * ```
128
- *
129
- * ## 📊 데이터 형식
130
- * ```typescript
131
- * const data: KonvaCanvasData<T>[] = [
132
- * {
133
- * id: 'unique-id',
134
- * position: new Position(lat, lng),
135
- * // POLYGON: paths 필수
136
- * paths: [[[lat, lng], [lat, lng], ...]],
137
- * // MARKER: boxWidth/boxHeight 권장 (Hit Test 정확도)
138
- * boxWidth: 60,
139
- * boxHeight: 75,
140
- * // 커스텀 데이터
141
- * ...customData
142
- * }
143
- * ];
144
- * ```
145
- *
146
- * ## ⚡ 성능 최적화 팁
147
- * 1. **동적 boxWidth 계산**: `measureText()`로 실제 너비 계산 후 전달
148
- * 2. **enableViewportCulling**: 대량 데이터 시 필수 (기본 true)
149
- * 3. **selectedItems 외부 관리**: 상태를 외부에서 관리하여 리렌더링 최소화
150
- * 4. **React.memo 최적화**: 컴포넌트가 자동으로 불필요한 리렌더링 방지
151
- *
152
- * @template T 마커/폴리곤 데이터의 추가 속성 타입
153
- *
154
- * @example
155
- * // 동적 boxWidth 계산 예시
156
- * const tempCtx = document.createElement('canvas').getContext('2d');
157
- * tempCtx.font = 'bold 15px Arial';
158
- * const boxWidth = Math.max(60, tempCtx.measureText(text).width + 20);
159
- *
160
- * @see {@link https://github.com/your-repo/docs/WoongCanvasLayer.md} 전체 문서
161
- */
162
- export default WoongCanvasLayer;
@@ -1,3 +0,0 @@
1
- export { default as WoongCanvasLayer } from "./WoongCanvasLayer";
2
- export * from "./WoongCanvasLayer";
3
- export * from "./shared";
@@ -1,234 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- /**
6
- * 폴리곤 렌더링 유틸리티
7
- *
8
- * 이 파일은 폴리곤 렌더링을 위한 헬퍼 함수와 팩토리 함수를 제공합니다.
9
- */
10
-
11
- /**
12
- * 폴리곤 그리기 헬퍼 함수 (도넛 폴리곤 지원)
13
- */
14
- var drawPolygon = function (_a) {
15
- var ctx = _a.ctx,
16
- polygonOffsets = _a.polygonOffsets,
17
- isDonutPolygon = _a.isDonutPolygon,
18
- fillColor = _a.fillColor,
19
- strokeColor = _a.strokeColor,
20
- lineWidth = _a.lineWidth;
21
-
22
- for (var _i = 0, polygonOffsets_1 = polygonOffsets; _i < polygonOffsets_1.length; _i++) {
23
- var multiPolygon = polygonOffsets_1[_i];
24
-
25
- if (isDonutPolygon) {
26
- ctx.beginPath(); // 1. 외부 폴리곤 그리기
27
-
28
- if (multiPolygon[0] && multiPolygon[0].length > 0) {
29
- ctx.moveTo(multiPolygon[0][0][0], multiPolygon[0][0][1]);
30
-
31
- for (var i = 1; i < multiPolygon[0].length; i++) {
32
- ctx.lineTo(multiPolygon[0][i][0], multiPolygon[0][i][1]);
33
- }
34
-
35
- ctx.closePath();
36
- } // 2. 내부 폴리곤 (구멍들) 그리기 - 같은 path에 추가
37
-
38
-
39
- for (var j = 1; j < multiPolygon.length; j++) {
40
- var innerPolygon = multiPolygon[j];
41
- if (innerPolygon.length === 0) continue;
42
- ctx.moveTo(innerPolygon[0][0], innerPolygon[0][1]);
43
-
44
- for (var i = 1; i < innerPolygon.length; i++) {
45
- ctx.lineTo(innerPolygon[i][0], innerPolygon[i][1]);
46
- }
47
-
48
- ctx.closePath();
49
- } // 3. evenodd fill rule로 구멍 뚫기
50
-
51
-
52
- ctx.fillStyle = fillColor;
53
- ctx.fill('evenodd'); // 4. 외곽선 그리기
54
-
55
- ctx.strokeStyle = strokeColor;
56
- ctx.lineWidth = lineWidth;
57
- ctx.stroke();
58
- } else {
59
- // 일반 폴리곤
60
- for (var _b = 0, multiPolygon_1 = multiPolygon; _b < multiPolygon_1.length; _b++) {
61
- var polygonGroup = multiPolygon_1[_b];
62
- if (!polygonGroup.length) continue;
63
- ctx.beginPath();
64
- var firstPoint = polygonGroup[0];
65
- ctx.moveTo(firstPoint[0], firstPoint[1]);
66
-
67
- for (var i = 1; i < polygonGroup.length; i++) {
68
- var point = polygonGroup[i];
69
- ctx.lineTo(point[0], point[1]);
70
- }
71
-
72
- ctx.closePath();
73
- ctx.fillStyle = fillColor;
74
- ctx.strokeStyle = strokeColor;
75
- ctx.lineWidth = lineWidth;
76
- ctx.fill();
77
- ctx.stroke();
78
- }
79
- }
80
- }
81
- };
82
- /**
83
- * 폴리곤 Base 렌더링 함수
84
- *
85
- * @param baseFillColor 기본 폴리곤 채우기 색상
86
- * @param baseStrokeColor 기본 폴리곤 테두리 색상
87
- * @param baseLineWidth 기본 폴리곤 테두리 두께
88
- * @returns Base Layer 렌더링 함수
89
- *
90
- * @example
91
- * const renderBase = renderPolygonBase(
92
- * 'rgba(255, 100, 100, 0.5)',
93
- * 'rgba(200, 50, 50, 0.8)',
94
- * 2
95
- * );
96
- */
97
-
98
- var renderPolygonBase = function (baseFillColor, baseStrokeColor, baseLineWidth) {
99
- return function (_a) {
100
- var ctx = _a.ctx,
101
- items = _a.items,
102
- selectedIds = _a.selectedIds,
103
- utils = _a.utils;
104
-
105
- for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {
106
- var item = items_1[_i]; // 선택된 항목은 Event Layer에서 그림
107
-
108
- if (selectedIds.has(item.id)) continue;
109
- if (!item.paths) continue;
110
- var polygonOffsets = utils.getOrComputePolygonOffsets(item);
111
- if (!polygonOffsets) continue;
112
- drawPolygon({
113
- ctx: ctx,
114
- polygonOffsets: polygonOffsets,
115
- isDonutPolygon: item.isDonutPolygon || false,
116
- fillColor: baseFillColor,
117
- strokeColor: baseStrokeColor,
118
- lineWidth: baseLineWidth
119
- });
120
- }
121
- };
122
- };
123
- /**
124
- * 폴리곤 Event 렌더링 함수
125
- *
126
- * @param baseFillColor 기본 폴리곤 채우기 색상 (필수, fallback용)
127
- * @param baseStrokeColor 기본 폴리곤 테두리 색상 (필수, fallback용)
128
- * @param baseLineWidth 기본 폴리곤 테두리 두께 (필수, fallback용)
129
- * @param selectedFillColor 선택된 폴리곤 채우기 색상 (선택, 기본값: baseFillColor)
130
- * @param selectedStrokeColor 선택된 폴리곤 테두리 색상 (선택, 기본값: baseStrokeColor)
131
- * @param selectedLineWidth 선택된 폴리곤 테두리 두께 (선택, 기본값: baseLineWidth)
132
- * @param activeFillColor 마지막 선택된 폴리곤 채우기 색상 (선택, 기본값: selectedFillColor)
133
- * @param activeStrokeColor 마지막 선택된 폴리곤 테두리 색상 (선택, 기본값: selectedStrokeColor)
134
- * @param activeLineWidth 마지막 선택된 폴리곤 테두리 두께 (선택, 기본값: selectedLineWidth)
135
- * @param hoveredFillColor Hover 시 폴리곤 채우기 색상 (선택, 기본값: selectedFillColor)
136
- * @param hoveredStrokeColor Hover 시 폴리곤 테두리 색상 (선택, 기본값: selectedStrokeColor)
137
- * @param hoveredLineWidth Hover 시 폴리곤 테두리 두께 (선택, 기본값: selectedLineWidth)
138
- * @returns Event Layer 렌더링 함수
139
- *
140
- * @example
141
- * const renderEvent = renderPolygonEvent(
142
- * 'rgba(255, 100, 100, 0.5)', // baseFillColor
143
- * 'rgba(200, 50, 50, 0.8)', // baseStrokeColor
144
- * 2, // baseLineWidth
145
- * 'rgba(255, 193, 7, 0.7)', // selectedFillColor
146
- * 'rgba(255, 152, 0, 1)', // selectedStrokeColor
147
- * 4 // selectedLineWidth
148
- * );
149
- */
150
-
151
- var renderPolygonEvent = function (baseFillColor, baseStrokeColor, baseLineWidth, selectedFillColor, selectedStrokeColor, selectedLineWidth, activeFillColor, activeStrokeColor, activeLineWidth, hoveredFillColor, hoveredStrokeColor, hoveredLineWidth) {
152
- // 기본값 설정 (base 기준)
153
- var _selectedFillColor = selectedFillColor || baseFillColor;
154
-
155
- var _selectedStrokeColor = selectedStrokeColor || baseStrokeColor;
156
-
157
- var _selectedLineWidth = selectedLineWidth || baseLineWidth;
158
-
159
- var _activeFillColor = activeFillColor || _selectedFillColor;
160
-
161
- var _activeStrokeColor = activeStrokeColor || _selectedStrokeColor;
162
-
163
- var _activeLineWidth = activeLineWidth || _selectedLineWidth;
164
-
165
- var _hoveredFillColor = hoveredFillColor || _selectedFillColor;
166
-
167
- var _hoveredStrokeColor = hoveredStrokeColor || _selectedStrokeColor;
168
-
169
- var _hoveredLineWidth = hoveredLineWidth || _selectedLineWidth;
170
-
171
- return function (_a) {
172
- var ctx = _a.ctx,
173
- hoveredItem = _a.hoveredItem,
174
- utils = _a.utils,
175
- selectedItems = _a.selectedItems,
176
- selectedItem = _a.selectedItem; // 1. 선택된 항목들 그리기 (마지막 선택 항목과 호버된 항목 제외)
177
-
178
- if (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) {
179
- for (var _i = 0, selectedItems_1 = selectedItems; _i < selectedItems_1.length; _i++) {
180
- var item = selectedItems_1[_i]; // 마지막 선택 항목과 호버된 항목은 나중에 따로 그림
181
-
182
- if (item.id === (selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.id) || (hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.id) === item.id) continue;
183
- if (!item.paths) continue;
184
- var polygonOffsets = utils.getOrComputePolygonOffsets(item);
185
- if (!polygonOffsets) continue;
186
- drawPolygon({
187
- ctx: ctx,
188
- polygonOffsets: polygonOffsets,
189
- isDonutPolygon: item.isDonutPolygon || false,
190
- fillColor: _selectedFillColor,
191
- strokeColor: _selectedStrokeColor,
192
- lineWidth: _selectedLineWidth
193
- });
194
- }
195
- } // 2. 마지막 선택된 항목 그리기 (호버되지 않은 경우)
196
-
197
-
198
- if ((selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.paths) && (hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.id) !== selectedItem.id) {
199
- var polygonOffsets = utils.getOrComputePolygonOffsets(selectedItem);
200
-
201
- if (polygonOffsets) {
202
- drawPolygon({
203
- ctx: ctx,
204
- polygonOffsets: polygonOffsets,
205
- isDonutPolygon: selectedItem.isDonutPolygon || false,
206
- fillColor: _activeFillColor,
207
- strokeColor: _activeStrokeColor,
208
- lineWidth: _activeLineWidth
209
- });
210
- }
211
- } // 3. 호버된 항목 그리기 (가장 위에 표시)
212
-
213
-
214
- if (hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.paths) {
215
- var polygonOffsets = utils.getOrComputePolygonOffsets(hoveredItem);
216
- if (!polygonOffsets) return;
217
- var isSelected = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.some(function (item) {
218
- return item.id === hoveredItem.id;
219
- });
220
- drawPolygon({
221
- ctx: ctx,
222
- polygonOffsets: polygonOffsets,
223
- isDonutPolygon: hoveredItem.isDonutPolygon || false,
224
- fillColor: isSelected ? _activeFillColor : _hoveredFillColor,
225
- strokeColor: isSelected ? _activeStrokeColor : _hoveredStrokeColor,
226
- lineWidth: isSelected ? _activeLineWidth : _hoveredLineWidth
227
- });
228
- }
229
- };
230
- };
231
-
232
- exports.drawPolygon = drawPolygon;
233
- exports.renderPolygonBase = renderPolygonBase;
234
- exports.renderPolygonEvent = renderPolygonEvent;