@mint-ui/map 1.2.0-test.34 → 1.2.0-test.36

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 (25) hide show
  1. package/dist/components/mint-map/core/advanced/shared/context.d.ts +19 -12
  2. package/dist/components/mint-map/core/advanced/shared/context.js +54 -75
  3. package/dist/components/mint-map/core/advanced/shared/helpers.d.ts +20 -0
  4. package/dist/components/mint-map/core/advanced/shared/helpers.js +40 -0
  5. package/dist/components/mint-map/core/advanced/shared/hooks.d.ts +74 -0
  6. package/dist/components/mint-map/core/advanced/shared/hooks.js +189 -0
  7. package/dist/components/mint-map/core/advanced/shared/index.d.ts +3 -0
  8. package/dist/components/mint-map/core/advanced/shared/performance.d.ts +12 -110
  9. package/dist/components/mint-map/core/advanced/shared/performance.js +56 -151
  10. package/dist/components/mint-map/core/advanced/shared/types.d.ts +18 -153
  11. package/dist/components/mint-map/core/advanced/shared/types.js +0 -1
  12. package/dist/components/mint-map/core/advanced/shared/utils.d.ts +36 -27
  13. package/dist/components/mint-map/core/advanced/shared/utils.js +58 -52
  14. package/dist/components/mint-map/core/advanced/shared/viewport.d.ts +42 -0
  15. package/dist/components/mint-map/core/advanced/shared/viewport.js +51 -0
  16. package/dist/components/mint-map/core/advanced/woongCanvasMarker/WoongCanvasMarker.d.ts +22 -74
  17. package/dist/components/mint-map/core/advanced/woongCanvasMarker/WoongCanvasMarker.js +156 -617
  18. package/dist/components/mint-map/core/advanced/woongCanvasPolygon/WoongCanvasPolygon.d.ts +26 -76
  19. package/dist/components/mint-map/core/advanced/woongCanvasPolygon/WoongCanvasPolygon.js +152 -551
  20. package/dist/components/mint-map/core/advanced/woongCanvasPolygon/renderer.d.ts +67 -8
  21. package/dist/components/mint-map/core/advanced/woongCanvasPolygon/renderer.js +81 -20
  22. package/dist/index.es.js +917 -1575
  23. package/dist/index.js +11 -0
  24. package/dist/index.umd.js +923 -1573
  25. package/package.json +1 -1
@@ -2,38 +2,88 @@
2
2
  * 폴리곤 렌더링 유틸리티
3
3
  *
4
4
  * 이 파일은 폴리곤 렌더링을 위한 헬퍼 함수와 팩토리 함수를 제공합니다.
5
+ * GeoJSON MultiPolygon 형식을 지원하며, 도넛 폴리곤(구멍이 있는 폴리곤)도 처리할 수 있습니다.
5
6
  */
6
- import { CustomRenderBase, CustomRenderEvent, KonvaCanvasData } from "../shared/types";
7
+ import { CustomRenderBase, CustomRenderEvent, CanvasData } from "../shared/types";
7
8
  /**
8
- * 폴리곤 그리기 헬퍼 함수 (도넛 폴리곤 지원)
9
+ * 폴리곤 그리기 파라미터 인터페이스
9
10
  */
10
- export declare const drawPolygon: ({ ctx, polygonOffsets, isDonutPolygon, fillColor, strokeColor, lineWidth }: {
11
+ interface DrawPolygonParams {
12
+ /** Canvas 2D 렌더링 컨텍스트 */
11
13
  ctx: CanvasRenderingContext2D;
14
+ /** 변환된 폴리곤 좌표 배열 (4차원: [MultiPolygon][Polygon][Point][x/y]) */
12
15
  polygonOffsets: number[][][][];
16
+ /** 도넛 폴리곤 여부 (구멍이 있는 폴리곤) */
13
17
  isDonutPolygon: boolean;
18
+ /** 채우기 색상 */
14
19
  fillColor: string;
20
+ /** 테두리 색상 */
15
21
  strokeColor: string;
22
+ /** 테두리 두께 */
16
23
  lineWidth: number;
17
- }) => void;
24
+ }
18
25
  /**
19
- * 폴리곤 Base 렌더링 함수
26
+ * 폴리곤 그리기 헬퍼 함수 (도넛 폴리곤 지원)
27
+ *
28
+ * Canvas 2D Context를 사용하여 폴리곤을 그립니다.
29
+ * 도넛 폴리곤의 경우 evenodd fill rule을 사용하여 구멍을 처리합니다.
30
+ *
31
+ * @param params 폴리곤 그리기 파라미터
20
32
  *
33
+ * @remarks
34
+ * - **도넛 폴리곤 처리**:
35
+ * - 외부 폴리곤과 내부 구멍들을 같은 path에 추가
36
+ * - `fill('evenodd')`를 사용하여 구멍 뚫기
37
+ * - **일반 폴리곤 처리**: 각 폴리곤 그룹을 개별적으로 그리기
38
+ * - **성능**: O(n), n은 폴리곤의 총 좌표 수
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * drawPolygon({
43
+ * ctx,
44
+ * polygonOffsets: [[[[100, 200], [200, 200], [200, 100], [100, 100]]]],
45
+ * isDonutPolygon: false,
46
+ * fillColor: 'rgba(255, 0, 0, 0.5)',
47
+ * strokeColor: 'rgba(255, 0, 0, 1)',
48
+ * lineWidth: 2
49
+ * });
50
+ * ```
51
+ */
52
+ export declare const drawPolygon: ({ ctx, polygonOffsets, isDonutPolygon, fillColor, strokeColor, lineWidth }: DrawPolygonParams) => void;
53
+ /**
54
+ * 폴리곤 Base 렌더링 함수 팩토리
55
+ *
56
+ * Base Layer에서 사용할 렌더링 함수를 생성합니다.
57
+ * 선택되지 않은 폴리곤만 렌더링하며, 선택된 항목은 Event Layer에서 처리됩니다.
58
+ *
59
+ * @template T 폴리곤 데이터의 추가 속성 타입
21
60
  * @param baseFillColor 기본 폴리곤 채우기 색상
22
61
  * @param baseStrokeColor 기본 폴리곤 테두리 색상
23
62
  * @param baseLineWidth 기본 폴리곤 테두리 두께
24
63
  * @returns Base Layer 렌더링 함수
25
64
  *
65
+ * @remarks
66
+ * - 선택된 항목은 Event Layer에서 그려지므로 Base Layer에서는 스킵
67
+ * - 성능: O(n), n은 렌더링할 폴리곤 개수
68
+ * - 좌표 변환은 자동으로 캐싱되어 성능 최적화됨
69
+ *
26
70
  * @example
71
+ * ```typescript
27
72
  * const renderBase = renderPolygonBase(
28
73
  * 'rgba(255, 100, 100, 0.5)',
29
74
  * 'rgba(200, 50, 50, 0.8)',
30
75
  * 2
31
76
  * );
77
+ * ```
32
78
  */
33
- export declare const renderPolygonBase: <T = any>(baseFillColor: string, baseStrokeColor: string, baseLineWidth: number) => CustomRenderBase<KonvaCanvasData<T>>;
79
+ export declare const renderPolygonBase: <T = any>(baseFillColor: string, baseStrokeColor: string, baseLineWidth: number) => CustomRenderBase<CanvasData<T>>;
34
80
  /**
35
- * 폴리곤 Event 렌더링 함수
81
+ * 폴리곤 Event 렌더링 함수 팩토리
82
+ *
83
+ * Event Layer에서 사용할 렌더링 함수를 생성합니다.
84
+ * 선택된 항목, hover된 항목, 마지막 선택된 항목을 각각 다른 스타일로 렌더링합니다.
36
85
  *
86
+ * @template T 폴리곤 데이터의 추가 속성 타입
37
87
  * @param baseFillColor 기본 폴리곤 채우기 색상 (필수, fallback용)
38
88
  * @param baseStrokeColor 기본 폴리곤 테두리 색상 (필수, fallback용)
39
89
  * @param baseLineWidth 기본 폴리곤 테두리 두께 (필수, fallback용)
@@ -48,7 +98,14 @@ export declare const renderPolygonBase: <T = any>(baseFillColor: string, baseStr
48
98
  * @param hoveredLineWidth Hover 시 폴리곤 테두리 두께 (선택, 기본값: selectedLineWidth)
49
99
  * @returns Event Layer 렌더링 함수
50
100
  *
101
+ * @remarks
102
+ * - **렌더링 순서**: 선택된 항목 → 마지막 선택된 항목 → hover된 항목 (최상단)
103
+ * - **성능**: O(m), m은 선택된 항목 수 + hover된 항목 수
104
+ * - 좌표 변환은 자동으로 캐싱되어 성능 최적화됨
105
+ * - hover된 항목이 선택되어 있으면 active 스타일 적용
106
+ *
51
107
  * @example
108
+ * ```typescript
52
109
  * const renderEvent = renderPolygonEvent(
53
110
  * 'rgba(255, 100, 100, 0.5)', // baseFillColor
54
111
  * 'rgba(200, 50, 50, 0.8)', // baseStrokeColor
@@ -57,5 +114,7 @@ export declare const renderPolygonBase: <T = any>(baseFillColor: string, baseStr
57
114
  * 'rgba(255, 152, 0, 1)', // selectedStrokeColor
58
115
  * 4 // selectedLineWidth
59
116
  * );
117
+ * ```
60
118
  */
61
- export declare const renderPolygonEvent: <T = any>(baseFillColor: string, baseStrokeColor: string, baseLineWidth: number, selectedFillColor?: string, selectedStrokeColor?: string, selectedLineWidth?: number, activeFillColor?: string, activeStrokeColor?: string, activeLineWidth?: number, hoveredFillColor?: string, hoveredStrokeColor?: string, hoveredLineWidth?: number) => CustomRenderEvent<KonvaCanvasData<T>>;
119
+ export declare const renderPolygonEvent: <T = any>(baseFillColor: string, baseStrokeColor: string, baseLineWidth: number, selectedFillColor?: string, selectedStrokeColor?: string, selectedLineWidth?: number, activeFillColor?: string, activeStrokeColor?: string, activeLineWidth?: number, hoveredFillColor?: string, hoveredStrokeColor?: string, hoveredLineWidth?: number) => CustomRenderEvent<CanvasData<T>>;
120
+ export {};
@@ -6,10 +6,35 @@ Object.defineProperty(exports, '__esModule', { value: true });
6
6
  * 폴리곤 렌더링 유틸리티
7
7
  *
8
8
  * 이 파일은 폴리곤 렌더링을 위한 헬퍼 함수와 팩토리 함수를 제공합니다.
9
+ * GeoJSON MultiPolygon 형식을 지원하며, 도넛 폴리곤(구멍이 있는 폴리곤)도 처리할 수 있습니다.
9
10
  */
10
11
 
11
12
  /**
12
13
  * 폴리곤 그리기 헬퍼 함수 (도넛 폴리곤 지원)
14
+ *
15
+ * Canvas 2D Context를 사용하여 폴리곤을 그립니다.
16
+ * 도넛 폴리곤의 경우 evenodd fill rule을 사용하여 구멍을 처리합니다.
17
+ *
18
+ * @param params 폴리곤 그리기 파라미터
19
+ *
20
+ * @remarks
21
+ * - **도넛 폴리곤 처리**:
22
+ * - 외부 폴리곤과 내부 구멍들을 같은 path에 추가
23
+ * - `fill('evenodd')`를 사용하여 구멍 뚫기
24
+ * - **일반 폴리곤 처리**: 각 폴리곤 그룹을 개별적으로 그리기
25
+ * - **성능**: O(n), n은 폴리곤의 총 좌표 수
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * drawPolygon({
30
+ * ctx,
31
+ * polygonOffsets: [[[[100, 200], [200, 200], [200, 100], [100, 100]]]],
32
+ * isDonutPolygon: false,
33
+ * fillColor: 'rgba(255, 0, 0, 0.5)',
34
+ * strokeColor: 'rgba(255, 0, 0, 1)',
35
+ * lineWidth: 2
36
+ * });
37
+ * ```
13
38
  */
14
39
  var drawPolygon = function (_a) {
15
40
  var ctx = _a.ctx,
@@ -23,13 +48,16 @@ var drawPolygon = function (_a) {
23
48
  var multiPolygon = polygonOffsets_1[_i];
24
49
 
25
50
  if (isDonutPolygon) {
26
- ctx.beginPath(); // 1. 외부 폴리곤 그리기
51
+ // 도넛 폴리곤 처리: 외부 폴리곤 + 내부 구멍들을 같은 path에 추가
52
+ ctx.beginPath(); // 1. 외부 폴리곤 그리기 (첫 번째 폴리곤)
27
53
 
28
- if (multiPolygon[0] && multiPolygon[0].length > 0) {
29
- ctx.moveTo(multiPolygon[0][0][0], multiPolygon[0][0][1]);
54
+ var outerPolygon = multiPolygon[0];
30
55
 
31
- for (var i = 1; i < multiPolygon[0].length; i++) {
32
- ctx.lineTo(multiPolygon[0][i][0], multiPolygon[0][i][1]);
56
+ if (outerPolygon && outerPolygon.length > 0) {
57
+ ctx.moveTo(outerPolygon[0][0], outerPolygon[0][1]);
58
+
59
+ for (var i = 1; i < outerPolygon.length; i++) {
60
+ ctx.lineTo(outerPolygon[i][0], outerPolygon[i][1]);
33
61
  }
34
62
 
35
63
  ctx.closePath();
@@ -56,7 +84,7 @@ var drawPolygon = function (_a) {
56
84
  ctx.lineWidth = lineWidth;
57
85
  ctx.stroke();
58
86
  } else {
59
- // 일반 폴리곤
87
+ // 일반 폴리곤 처리: 각 폴리곤 그룹을 개별적으로 그리기
60
88
  for (var _b = 0, multiPolygon_1 = multiPolygon; _b < multiPolygon_1.length; _b++) {
61
89
  var polygonGroup = multiPolygon_1[_b];
62
90
  if (!polygonGroup.length) continue;
@@ -69,7 +97,8 @@ var drawPolygon = function (_a) {
69
97
  ctx.lineTo(point[0], point[1]);
70
98
  }
71
99
 
72
- ctx.closePath();
100
+ ctx.closePath(); // 스타일 설정 및 렌더링
101
+
73
102
  ctx.fillStyle = fillColor;
74
103
  ctx.strokeStyle = strokeColor;
75
104
  ctx.lineWidth = lineWidth;
@@ -80,19 +109,30 @@ var drawPolygon = function (_a) {
80
109
  }
81
110
  };
82
111
  /**
83
- * 폴리곤 Base 렌더링 함수
112
+ * 폴리곤 Base 렌더링 함수 팩토리
113
+ *
114
+ * Base Layer에서 사용할 렌더링 함수를 생성합니다.
115
+ * 선택되지 않은 폴리곤만 렌더링하며, 선택된 항목은 Event Layer에서 처리됩니다.
84
116
  *
117
+ * @template T 폴리곤 데이터의 추가 속성 타입
85
118
  * @param baseFillColor 기본 폴리곤 채우기 색상
86
119
  * @param baseStrokeColor 기본 폴리곤 테두리 색상
87
120
  * @param baseLineWidth 기본 폴리곤 테두리 두께
88
121
  * @returns Base Layer 렌더링 함수
89
122
  *
123
+ * @remarks
124
+ * - 선택된 항목은 Event Layer에서 그려지므로 Base Layer에서는 스킵
125
+ * - 성능: O(n), n은 렌더링할 폴리곤 개수
126
+ * - 좌표 변환은 자동으로 캐싱되어 성능 최적화됨
127
+ *
90
128
  * @example
129
+ * ```typescript
91
130
  * const renderBase = renderPolygonBase(
92
131
  * 'rgba(255, 100, 100, 0.5)',
93
132
  * 'rgba(200, 50, 50, 0.8)',
94
133
  * 2
95
134
  * );
135
+ * ```
96
136
  */
97
137
 
98
138
  var renderPolygonBase = function (baseFillColor, baseStrokeColor, baseLineWidth) {
@@ -103,12 +143,15 @@ var renderPolygonBase = function (baseFillColor, baseStrokeColor, baseLineWidth)
103
143
  utils = _a.utils;
104
144
 
105
145
  for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {
106
- var item = items_1[_i]; // 선택된 항목은 Event Layer에서 그림
146
+ var item = items_1[_i]; // 선택된 항목은 Event Layer에서 그림 (중복 렌더링 방지)
147
+
148
+ if (selectedIds.has(item.id)) continue; // paths가 없으면 스킵
149
+
150
+ if (!item.paths) continue; // 좌표 변환 (자동 캐싱)
107
151
 
108
- if (selectedIds.has(item.id)) continue;
109
- if (!item.paths) continue;
110
152
  var polygonOffsets = utils.getOrComputePolygonOffsets(item);
111
- if (!polygonOffsets) continue;
153
+ if (!polygonOffsets) continue; // 폴리곤 그리기
154
+
112
155
  drawPolygon({
113
156
  ctx: ctx,
114
157
  polygonOffsets: polygonOffsets,
@@ -121,8 +164,12 @@ var renderPolygonBase = function (baseFillColor, baseStrokeColor, baseLineWidth)
121
164
  };
122
165
  };
123
166
  /**
124
- * 폴리곤 Event 렌더링 함수
167
+ * 폴리곤 Event 렌더링 함수 팩토리
168
+ *
169
+ * Event Layer에서 사용할 렌더링 함수를 생성합니다.
170
+ * 선택된 항목, hover된 항목, 마지막 선택된 항목을 각각 다른 스타일로 렌더링합니다.
125
171
  *
172
+ * @template T 폴리곤 데이터의 추가 속성 타입
126
173
  * @param baseFillColor 기본 폴리곤 채우기 색상 (필수, fallback용)
127
174
  * @param baseStrokeColor 기본 폴리곤 테두리 색상 (필수, fallback용)
128
175
  * @param baseLineWidth 기본 폴리곤 테두리 두께 (필수, fallback용)
@@ -137,7 +184,14 @@ var renderPolygonBase = function (baseFillColor, baseStrokeColor, baseLineWidth)
137
184
  * @param hoveredLineWidth Hover 시 폴리곤 테두리 두께 (선택, 기본값: selectedLineWidth)
138
185
  * @returns Event Layer 렌더링 함수
139
186
  *
187
+ * @remarks
188
+ * - **렌더링 순서**: 선택된 항목 → 마지막 선택된 항목 → hover된 항목 (최상단)
189
+ * - **성능**: O(m), m은 선택된 항목 수 + hover된 항목 수
190
+ * - 좌표 변환은 자동으로 캐싱되어 성능 최적화됨
191
+ * - hover된 항목이 선택되어 있으면 active 스타일 적용
192
+ *
140
193
  * @example
194
+ * ```typescript
141
195
  * const renderEvent = renderPolygonEvent(
142
196
  * 'rgba(255, 100, 100, 0.5)', // baseFillColor
143
197
  * 'rgba(200, 50, 50, 0.8)', // baseStrokeColor
@@ -146,6 +200,7 @@ var renderPolygonBase = function (baseFillColor, baseStrokeColor, baseLineWidth)
146
200
  * 'rgba(255, 152, 0, 1)', // selectedStrokeColor
147
201
  * 4 // selectedLineWidth
148
202
  * );
203
+ * ```
149
204
  */
150
205
 
151
206
  var renderPolygonEvent = function (baseFillColor, baseStrokeColor, baseLineWidth, selectedFillColor, selectedStrokeColor, selectedLineWidth, activeFillColor, activeStrokeColor, activeLineWidth, hoveredFillColor, hoveredStrokeColor, hoveredLineWidth) {
@@ -173,13 +228,19 @@ var renderPolygonEvent = function (baseFillColor, baseStrokeColor, baseLineWidth
173
228
  hoveredItem = _a.hoveredItem,
174
229
  utils = _a.utils,
175
230
  selectedItems = _a.selectedItems,
176
- selectedItem = _a.selectedItem; // 1. 선택된 항목들 그리기 (마지막 선택 항목과 호버된 항목 제외)
231
+ selectedItem = _a.selectedItem; // 성능 최적화: selectedItems를 Set으로 변환하여 O(1) 조회 (매번 some() 체크 방지)
232
+
233
+ var selectedIdsSet = selectedItems ? new Set(selectedItems.map(function (item) {
234
+ return item.id;
235
+ })) : new Set();
236
+ var hoveredItemId = hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.id;
237
+ var selectedItemId = selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.id; // 1. 선택된 항목들 그리기 (마지막 선택 항목과 호버된 항목 제외)
177
238
 
178
239
  if (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) {
179
240
  for (var _i = 0, selectedItems_1 = selectedItems; _i < selectedItems_1.length; _i++) {
180
241
  var item = selectedItems_1[_i]; // 마지막 선택 항목과 호버된 항목은 나중에 따로 그림
181
242
 
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;
243
+ if (item.id === selectedItemId || item.id === hoveredItemId) continue;
183
244
  if (!item.paths) continue;
184
245
  var polygonOffsets = utils.getOrComputePolygonOffsets(item);
185
246
  if (!polygonOffsets) continue;
@@ -195,7 +256,7 @@ var renderPolygonEvent = function (baseFillColor, baseStrokeColor, baseLineWidth
195
256
  } // 2. 마지막 선택된 항목 그리기 (호버되지 않은 경우)
196
257
 
197
258
 
198
- if ((selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.paths) && (hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.id) !== selectedItem.id) {
259
+ if ((selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.paths) && hoveredItemId !== selectedItemId) {
199
260
  var polygonOffsets = utils.getOrComputePolygonOffsets(selectedItem);
200
261
 
201
262
  if (polygonOffsets) {
@@ -213,10 +274,10 @@ var renderPolygonEvent = function (baseFillColor, baseStrokeColor, baseLineWidth
213
274
 
214
275
  if (hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.paths) {
215
276
  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
- });
277
+ if (!polygonOffsets) return; // 좌표 변환 실패 시 스킵 (return은 렌더링 함수 종료)
278
+ // 성능 최적화: Set을 사용하여 O(1) 조회 (이전: O(m) some() 체크)
279
+
280
+ var isSelected = selectedIdsSet.has(hoveredItem.id);
220
281
  drawPolygon({
221
282
  ctx: ctx,
222
283
  polygonOffsets: polygonOffsets,