@mint-ui/map 1.2.0-test.43 → 1.2.0-test.45
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/dist/components/mint-map/core/advanced/shared/types.d.ts +6 -7
- package/dist/components/mint-map/core/advanced/shared/types.js +1 -0
- package/dist/components/mint-map/core/advanced/shared/utils.d.ts +33 -0
- package/dist/components/mint-map/core/advanced/shared/utils.js +41 -4
- package/dist/components/mint-map/core/advanced/woongCanvasMarker/WoongCanvasMarker.js +18 -4
- package/dist/components/mint-map/core/advanced/woongCanvasPolygon/WoongCanvasPolygon.js +18 -4
- package/dist/index.es.js +77 -13
- package/dist/index.js +1 -0
- package/dist/index.umd.js +77 -12
- package/package.json +1 -1
|
@@ -55,20 +55,19 @@ export interface CanvasOption {
|
|
|
55
55
|
* };
|
|
56
56
|
*
|
|
57
57
|
* // ✅ 올바른 사용 (헬퍼 함수 사용)
|
|
58
|
-
* const
|
|
59
|
-
* id: String(
|
|
58
|
+
* const data = createCanvasData(serverData, {
|
|
59
|
+
* id: String(serverData.id),
|
|
60
60
|
* position: new Position(lat, lng)
|
|
61
|
-
* })
|
|
62
|
-
* const data = dataArray[0]; // 단일 항목이 필요한 경우
|
|
61
|
+
* });
|
|
63
62
|
* ```
|
|
64
63
|
*/
|
|
65
64
|
export declare type CanvasData<T = {}> = T & CanvasOption;
|
|
66
65
|
/**
|
|
67
|
-
* 서버
|
|
66
|
+
* 서버 데이터를 CanvasData로 변환하는 헬퍼 함수들
|
|
68
67
|
*
|
|
69
|
-
* @see createCanvasDataArray in ./utils.ts
|
|
68
|
+
* @see createCanvasData, createCanvasDataArray in ./utils.ts
|
|
70
69
|
*/
|
|
71
|
-
export { createCanvasDataArray } from './utils';
|
|
70
|
+
export { createCanvasData, createCanvasDataArray } from './utils';
|
|
72
71
|
/**
|
|
73
72
|
* 렌더링 유틸리티 함수들 (좌표 변환)
|
|
74
73
|
*
|
|
@@ -60,6 +60,39 @@ export declare const calculateTextBoxWidth: ({ text, fontConfig, padding, minWid
|
|
|
60
60
|
padding: number;
|
|
61
61
|
minWidth: number;
|
|
62
62
|
}) => number;
|
|
63
|
+
/**
|
|
64
|
+
* 서버 데이터를 CanvasData로 변환하는 헬퍼 함수
|
|
65
|
+
*
|
|
66
|
+
* 서버 데이터의 필드가 CanvasOption과 충돌하는 경우 (예: id, position 등),
|
|
67
|
+
* 이 함수를 사용하여 명시적으로 매핑할 수 있습니다.
|
|
68
|
+
*
|
|
69
|
+
* @template T 서버에서 받은 원본 데이터 타입
|
|
70
|
+
* @param serverData 서버에서 받은 원본 데이터
|
|
71
|
+
* @param canvasOptions CanvasOption 필드들 (충돌하는 필드는 여기서 명시적으로 지정)
|
|
72
|
+
* @returns CanvasData<T> 타입의 데이터
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* interface ServerData {
|
|
77
|
+
* id: number; // CanvasOption의 id와 충돌
|
|
78
|
+
* name: string;
|
|
79
|
+
* }
|
|
80
|
+
*
|
|
81
|
+
* const serverData: ServerData = { id: 123, name: "Test" };
|
|
82
|
+
*
|
|
83
|
+
* // ✅ 올바른 사용
|
|
84
|
+
* const canvasData = createCanvasData(serverData, {
|
|
85
|
+
* id: String(serverData.id), // 명시적으로 변환
|
|
86
|
+
* position: new Position(37.5, 127.0)
|
|
87
|
+
* });
|
|
88
|
+
*
|
|
89
|
+
* // canvasData는 CanvasData<ServerData> 타입이며:
|
|
90
|
+
* // - id: string (CanvasOption의 id)
|
|
91
|
+
* // - name: string (서버 데이터의 name)
|
|
92
|
+
* // - position: Position (CanvasOption의 position)
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export declare function createCanvasData<T extends Record<string, any>>(serverData: T, canvasOptions: CanvasOption): CanvasData<T>;
|
|
63
96
|
/**
|
|
64
97
|
* 서버 데이터 배열을 CanvasData 배열로 변환하는 헬퍼 함수
|
|
65
98
|
*
|
|
@@ -212,6 +212,44 @@ var calculateTextBoxWidth = function (_a) {
|
|
|
212
212
|
var textWidth = tempCtx.measureText(text).width;
|
|
213
213
|
return Math.max(minWidth, textWidth + padding);
|
|
214
214
|
};
|
|
215
|
+
/**
|
|
216
|
+
* 서버 데이터를 CanvasData로 변환하는 헬퍼 함수
|
|
217
|
+
*
|
|
218
|
+
* 서버 데이터의 필드가 CanvasOption과 충돌하는 경우 (예: id, position 등),
|
|
219
|
+
* 이 함수를 사용하여 명시적으로 매핑할 수 있습니다.
|
|
220
|
+
*
|
|
221
|
+
* @template T 서버에서 받은 원본 데이터 타입
|
|
222
|
+
* @param serverData 서버에서 받은 원본 데이터
|
|
223
|
+
* @param canvasOptions CanvasOption 필드들 (충돌하는 필드는 여기서 명시적으로 지정)
|
|
224
|
+
* @returns CanvasData<T> 타입의 데이터
|
|
225
|
+
*
|
|
226
|
+
* @example
|
|
227
|
+
* ```typescript
|
|
228
|
+
* interface ServerData {
|
|
229
|
+
* id: number; // CanvasOption의 id와 충돌
|
|
230
|
+
* name: string;
|
|
231
|
+
* }
|
|
232
|
+
*
|
|
233
|
+
* const serverData: ServerData = { id: 123, name: "Test" };
|
|
234
|
+
*
|
|
235
|
+
* // ✅ 올바른 사용
|
|
236
|
+
* const canvasData = createCanvasData(serverData, {
|
|
237
|
+
* id: String(serverData.id), // 명시적으로 변환
|
|
238
|
+
* position: new Position(37.5, 127.0)
|
|
239
|
+
* });
|
|
240
|
+
*
|
|
241
|
+
* // canvasData는 CanvasData<ServerData> 타입이며:
|
|
242
|
+
* // - id: string (CanvasOption의 id)
|
|
243
|
+
* // - name: string (서버 데이터의 name)
|
|
244
|
+
* // - position: Position (CanvasOption의 position)
|
|
245
|
+
* ```
|
|
246
|
+
*/
|
|
247
|
+
|
|
248
|
+
function createCanvasData(serverData, canvasOptions) {
|
|
249
|
+
// 서버 데이터와 CanvasOption을 결합
|
|
250
|
+
// CanvasOption의 필드가 우선되므로 충돌하는 필드는 canvasOptions의 값이 사용됨
|
|
251
|
+
return tslib.__assign(tslib.__assign({}, serverData), canvasOptions);
|
|
252
|
+
}
|
|
215
253
|
/**
|
|
216
254
|
* 서버 데이터 배열을 CanvasData 배열로 변환하는 헬퍼 함수
|
|
217
255
|
*
|
|
@@ -249,16 +287,15 @@ var calculateTextBoxWidth = function (_a) {
|
|
|
249
287
|
|
|
250
288
|
function createCanvasDataArray(serverDataArray, getCanvasOptions) {
|
|
251
289
|
return serverDataArray.map(function (serverData, index) {
|
|
252
|
-
var canvasOptions = getCanvasOptions(serverData, index);
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
return tslib.__assign(tslib.__assign({}, serverData), canvasOptions);
|
|
290
|
+
var canvasOptions = getCanvasOptions(serverData, index);
|
|
291
|
+
return createCanvasData(serverData, canvasOptions);
|
|
256
292
|
});
|
|
257
293
|
}
|
|
258
294
|
|
|
259
295
|
exports.calculateTextBoxWidth = calculateTextBoxWidth;
|
|
260
296
|
exports.computeMarkerOffset = computeMarkerOffset;
|
|
261
297
|
exports.computePolygonOffsets = computePolygonOffsets;
|
|
298
|
+
exports.createCanvasData = createCanvasData;
|
|
262
299
|
exports.createCanvasDataArray = createCanvasDataArray;
|
|
263
300
|
exports.hexToRgba = hexToRgba;
|
|
264
301
|
exports.isPointInMarkerData = isPointInMarkerData;
|
|
@@ -72,7 +72,9 @@ var WoongCanvasMarker = function (props) {
|
|
|
72
72
|
var accumTranslateRef = React.useRef({
|
|
73
73
|
x: 0,
|
|
74
74
|
y: 0
|
|
75
|
-
}); //
|
|
75
|
+
}); // 드래그 시작 시점의 hover 상태 저장 (드래그 중 hover 고정용)
|
|
76
|
+
|
|
77
|
+
var dragStartHoveredItemRef = React.useRef(null); // 성능 최적화 Refs
|
|
76
78
|
|
|
77
79
|
var offsetCacheRef = React.useRef(new performance.LRUCache(maxCacheSize));
|
|
78
80
|
var spatialIndexRef = React.useRef(new performance.SpatialHashGrid(performance.SPATIAL_GRID_CELL_SIZE));
|
|
@@ -271,14 +273,18 @@ var WoongCanvasMarker = function (props) {
|
|
|
271
273
|
handleDragEndShared = _g.handleDragEnd;
|
|
272
274
|
|
|
273
275
|
var handleDragStart = function () {
|
|
274
|
-
handleDragStartShared();
|
|
276
|
+
handleDragStartShared(); // 드래그 시작 시점의 hover 상태 저장
|
|
277
|
+
|
|
278
|
+
dragStartHoveredItemRef.current = hoveredItemRef.current;
|
|
275
279
|
draggingRef.current = true;
|
|
276
280
|
controller.setMapCursor('grabbing');
|
|
277
281
|
};
|
|
278
282
|
|
|
279
283
|
var handleDragEnd = function () {
|
|
280
284
|
handleDragEndShared();
|
|
281
|
-
draggingRef.current = false;
|
|
285
|
+
draggingRef.current = false; // 드래그 종료 후 hover 상태 초기화 (다음 MOUSEMOVE에서 업데이트됨)
|
|
286
|
+
|
|
287
|
+
dragStartHoveredItemRef.current = null;
|
|
282
288
|
controller.setMapCursor('grab');
|
|
283
289
|
}; // Hit Test: 특정 좌표의 마커 찾기
|
|
284
290
|
|
|
@@ -309,6 +315,11 @@ var WoongCanvasMarker = function (props) {
|
|
|
309
315
|
|
|
310
316
|
|
|
311
317
|
var setHovered = function (data) {
|
|
318
|
+
// 드래그 중에는 hover 상태 변경을 무시하고 드래그 시작 시점의 상태 유지
|
|
319
|
+
if (draggingRef.current) {
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
|
|
312
323
|
hoveredItemRef.current = data;
|
|
313
324
|
|
|
314
325
|
if (draggingRef.current) {
|
|
@@ -358,6 +369,7 @@ var WoongCanvasMarker = function (props) {
|
|
|
358
369
|
|
|
359
370
|
|
|
360
371
|
var handleClick = function (event) {
|
|
372
|
+
if (controller.isMapDragged()) return;
|
|
361
373
|
if (disableInteractionRef.current) return;
|
|
362
374
|
var clickedOffset = helpers.validateEvent(event, context$1, controller);
|
|
363
375
|
if (!clickedOffset) return;
|
|
@@ -369,7 +381,9 @@ var WoongCanvasMarker = function (props) {
|
|
|
369
381
|
|
|
370
382
|
|
|
371
383
|
var handleMouseMove = function (event) {
|
|
372
|
-
if (disableInteractionRef.current) return;
|
|
384
|
+
if (disableInteractionRef.current) return; // 드래그 중에는 hover 상태를 업데이트하지 않음 (드래그 시작 시점의 hover 상태 유지)
|
|
385
|
+
|
|
386
|
+
if (draggingRef.current) return;
|
|
373
387
|
var mouseOffset = helpers.validateEvent(event, context$1, controller);
|
|
374
388
|
if (!mouseOffset) return;
|
|
375
389
|
var hoveredItem = findData(mouseOffset);
|
|
@@ -82,7 +82,9 @@ var WoongCanvasPolygon = function (props) {
|
|
|
82
82
|
var accumTranslateRef = React.useRef({
|
|
83
83
|
x: 0,
|
|
84
84
|
y: 0
|
|
85
|
-
}); //
|
|
85
|
+
}); // 드래그 시작 시점의 hover 상태 저장 (드래그 중 hover 고정용)
|
|
86
|
+
|
|
87
|
+
var dragStartHoveredItemRef = React.useRef(null); // 성능 최적화 Refs
|
|
86
88
|
|
|
87
89
|
var offsetCacheRef = React.useRef(new performance.LRUCache(maxCacheSize));
|
|
88
90
|
var spatialIndexRef = React.useRef(new performance.SpatialHashGrid(performance.SPATIAL_GRID_CELL_SIZE));
|
|
@@ -255,14 +257,18 @@ var WoongCanvasPolygon = function (props) {
|
|
|
255
257
|
handleDragEndShared = _f.handleDragEnd;
|
|
256
258
|
|
|
257
259
|
var handleDragStart = function () {
|
|
258
|
-
handleDragStartShared();
|
|
260
|
+
handleDragStartShared(); // 드래그 시작 시점의 hover 상태 저장
|
|
261
|
+
|
|
262
|
+
dragStartHoveredItemRef.current = hoveredItemRef.current;
|
|
259
263
|
draggingRef.current = true;
|
|
260
264
|
controller.setMapCursor('grabbing');
|
|
261
265
|
};
|
|
262
266
|
|
|
263
267
|
var handleDragEnd = function () {
|
|
264
268
|
handleDragEndShared();
|
|
265
|
-
draggingRef.current = false;
|
|
269
|
+
draggingRef.current = false; // 드래그 종료 후 hover 상태 초기화 (다음 MOUSEMOVE에서 업데이트됨)
|
|
270
|
+
|
|
271
|
+
dragStartHoveredItemRef.current = null;
|
|
266
272
|
controller.setMapCursor('grab');
|
|
267
273
|
}; // Hit Test: 특정 좌표의 폴리곤 찾기
|
|
268
274
|
|
|
@@ -284,6 +290,11 @@ var WoongCanvasPolygon = function (props) {
|
|
|
284
290
|
|
|
285
291
|
|
|
286
292
|
var setHovered = function (data) {
|
|
293
|
+
// 드래그 중에는 hover 상태 변경을 무시하고 드래그 시작 시점의 상태 유지
|
|
294
|
+
if (draggingRef.current) {
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
|
|
287
298
|
hoveredItemRef.current = data;
|
|
288
299
|
|
|
289
300
|
if (draggingRef.current) {
|
|
@@ -329,6 +340,7 @@ var WoongCanvasPolygon = function (props) {
|
|
|
329
340
|
|
|
330
341
|
|
|
331
342
|
var handleClick = function (event) {
|
|
343
|
+
if (controller.isMapDragged()) return;
|
|
332
344
|
if (disableInteractionRef.current) return;
|
|
333
345
|
var clickedOffset = helpers.validateEvent(event, context$1, controller);
|
|
334
346
|
if (!clickedOffset) return;
|
|
@@ -340,7 +352,9 @@ var WoongCanvasPolygon = function (props) {
|
|
|
340
352
|
|
|
341
353
|
|
|
342
354
|
var handleMouseMove = function (event) {
|
|
343
|
-
if (disableInteractionRef.current) return;
|
|
355
|
+
if (disableInteractionRef.current) return; // 드래그 중에는 hover 상태를 업데이트하지 않음 (드래그 시작 시점의 hover 상태 유지)
|
|
356
|
+
|
|
357
|
+
if (draggingRef.current) return;
|
|
344
358
|
var mouseOffset = helpers.validateEvent(event, context$1, controller);
|
|
345
359
|
if (!mouseOffset) return;
|
|
346
360
|
var hoveredItem = findData(mouseOffset);
|
package/dist/index.es.js
CHANGED
|
@@ -988,6 +988,44 @@ var calculateTextBoxWidth = function (_a) {
|
|
|
988
988
|
var textWidth = tempCtx.measureText(text).width;
|
|
989
989
|
return Math.max(minWidth, textWidth + padding);
|
|
990
990
|
};
|
|
991
|
+
/**
|
|
992
|
+
* 서버 데이터를 CanvasData로 변환하는 헬퍼 함수
|
|
993
|
+
*
|
|
994
|
+
* 서버 데이터의 필드가 CanvasOption과 충돌하는 경우 (예: id, position 등),
|
|
995
|
+
* 이 함수를 사용하여 명시적으로 매핑할 수 있습니다.
|
|
996
|
+
*
|
|
997
|
+
* @template T 서버에서 받은 원본 데이터 타입
|
|
998
|
+
* @param serverData 서버에서 받은 원본 데이터
|
|
999
|
+
* @param canvasOptions CanvasOption 필드들 (충돌하는 필드는 여기서 명시적으로 지정)
|
|
1000
|
+
* @returns CanvasData<T> 타입의 데이터
|
|
1001
|
+
*
|
|
1002
|
+
* @example
|
|
1003
|
+
* ```typescript
|
|
1004
|
+
* interface ServerData {
|
|
1005
|
+
* id: number; // CanvasOption의 id와 충돌
|
|
1006
|
+
* name: string;
|
|
1007
|
+
* }
|
|
1008
|
+
*
|
|
1009
|
+
* const serverData: ServerData = { id: 123, name: "Test" };
|
|
1010
|
+
*
|
|
1011
|
+
* // ✅ 올바른 사용
|
|
1012
|
+
* const canvasData = createCanvasData(serverData, {
|
|
1013
|
+
* id: String(serverData.id), // 명시적으로 변환
|
|
1014
|
+
* position: new Position(37.5, 127.0)
|
|
1015
|
+
* });
|
|
1016
|
+
*
|
|
1017
|
+
* // canvasData는 CanvasData<ServerData> 타입이며:
|
|
1018
|
+
* // - id: string (CanvasOption의 id)
|
|
1019
|
+
* // - name: string (서버 데이터의 name)
|
|
1020
|
+
* // - position: Position (CanvasOption의 position)
|
|
1021
|
+
* ```
|
|
1022
|
+
*/
|
|
1023
|
+
|
|
1024
|
+
function createCanvasData(serverData, canvasOptions) {
|
|
1025
|
+
// 서버 데이터와 CanvasOption을 결합
|
|
1026
|
+
// CanvasOption의 필드가 우선되므로 충돌하는 필드는 canvasOptions의 값이 사용됨
|
|
1027
|
+
return __assign(__assign({}, serverData), canvasOptions);
|
|
1028
|
+
}
|
|
991
1029
|
/**
|
|
992
1030
|
* 서버 데이터 배열을 CanvasData 배열로 변환하는 헬퍼 함수
|
|
993
1031
|
*
|
|
@@ -1025,10 +1063,8 @@ var calculateTextBoxWidth = function (_a) {
|
|
|
1025
1063
|
|
|
1026
1064
|
function createCanvasDataArray(serverDataArray, getCanvasOptions) {
|
|
1027
1065
|
return serverDataArray.map(function (serverData, index) {
|
|
1028
|
-
var canvasOptions = getCanvasOptions(serverData, index);
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
return __assign(__assign({}, serverData), canvasOptions);
|
|
1066
|
+
var canvasOptions = getCanvasOptions(serverData, index);
|
|
1067
|
+
return createCanvasData(serverData, canvasOptions);
|
|
1032
1068
|
});
|
|
1033
1069
|
}
|
|
1034
1070
|
|
|
@@ -5676,7 +5712,9 @@ var WoongCanvasMarker = function (props) {
|
|
|
5676
5712
|
var accumTranslateRef = useRef({
|
|
5677
5713
|
x: 0,
|
|
5678
5714
|
y: 0
|
|
5679
|
-
}); //
|
|
5715
|
+
}); // 드래그 시작 시점의 hover 상태 저장 (드래그 중 hover 고정용)
|
|
5716
|
+
|
|
5717
|
+
var dragStartHoveredItemRef = useRef(null); // 성능 최적화 Refs
|
|
5680
5718
|
|
|
5681
5719
|
var offsetCacheRef = useRef(new LRUCache(maxCacheSize));
|
|
5682
5720
|
var spatialIndexRef = useRef(new SpatialHashGrid(SPATIAL_GRID_CELL_SIZE));
|
|
@@ -5875,14 +5913,18 @@ var WoongCanvasMarker = function (props) {
|
|
|
5875
5913
|
handleDragEndShared = _g.handleDragEnd;
|
|
5876
5914
|
|
|
5877
5915
|
var handleDragStart = function () {
|
|
5878
|
-
handleDragStartShared();
|
|
5916
|
+
handleDragStartShared(); // 드래그 시작 시점의 hover 상태 저장
|
|
5917
|
+
|
|
5918
|
+
dragStartHoveredItemRef.current = hoveredItemRef.current;
|
|
5879
5919
|
draggingRef.current = true;
|
|
5880
5920
|
controller.setMapCursor('grabbing');
|
|
5881
5921
|
};
|
|
5882
5922
|
|
|
5883
5923
|
var handleDragEnd = function () {
|
|
5884
5924
|
handleDragEndShared();
|
|
5885
|
-
draggingRef.current = false;
|
|
5925
|
+
draggingRef.current = false; // 드래그 종료 후 hover 상태 초기화 (다음 MOUSEMOVE에서 업데이트됨)
|
|
5926
|
+
|
|
5927
|
+
dragStartHoveredItemRef.current = null;
|
|
5886
5928
|
controller.setMapCursor('grab');
|
|
5887
5929
|
}; // Hit Test: 특정 좌표의 마커 찾기
|
|
5888
5930
|
|
|
@@ -5913,6 +5955,11 @@ var WoongCanvasMarker = function (props) {
|
|
|
5913
5955
|
|
|
5914
5956
|
|
|
5915
5957
|
var setHovered = function (data) {
|
|
5958
|
+
// 드래그 중에는 hover 상태 변경을 무시하고 드래그 시작 시점의 상태 유지
|
|
5959
|
+
if (draggingRef.current) {
|
|
5960
|
+
return;
|
|
5961
|
+
}
|
|
5962
|
+
|
|
5916
5963
|
hoveredItemRef.current = data;
|
|
5917
5964
|
|
|
5918
5965
|
if (draggingRef.current) {
|
|
@@ -5962,6 +6009,7 @@ var WoongCanvasMarker = function (props) {
|
|
|
5962
6009
|
|
|
5963
6010
|
|
|
5964
6011
|
var handleClick = function (event) {
|
|
6012
|
+
if (controller.isMapDragged()) return;
|
|
5965
6013
|
if (disableInteractionRef.current) return;
|
|
5966
6014
|
var clickedOffset = validateEvent(event, context, controller);
|
|
5967
6015
|
if (!clickedOffset) return;
|
|
@@ -5973,7 +6021,9 @@ var WoongCanvasMarker = function (props) {
|
|
|
5973
6021
|
|
|
5974
6022
|
|
|
5975
6023
|
var handleMouseMove = function (event) {
|
|
5976
|
-
if (disableInteractionRef.current) return;
|
|
6024
|
+
if (disableInteractionRef.current) return; // 드래그 중에는 hover 상태를 업데이트하지 않음 (드래그 시작 시점의 hover 상태 유지)
|
|
6025
|
+
|
|
6026
|
+
if (draggingRef.current) return;
|
|
5977
6027
|
var mouseOffset = validateEvent(event, context, controller);
|
|
5978
6028
|
if (!mouseOffset) return;
|
|
5979
6029
|
var hoveredItem = findData(mouseOffset);
|
|
@@ -6560,7 +6610,9 @@ var WoongCanvasPolygon = function (props) {
|
|
|
6560
6610
|
var accumTranslateRef = useRef({
|
|
6561
6611
|
x: 0,
|
|
6562
6612
|
y: 0
|
|
6563
|
-
}); //
|
|
6613
|
+
}); // 드래그 시작 시점의 hover 상태 저장 (드래그 중 hover 고정용)
|
|
6614
|
+
|
|
6615
|
+
var dragStartHoveredItemRef = useRef(null); // 성능 최적화 Refs
|
|
6564
6616
|
|
|
6565
6617
|
var offsetCacheRef = useRef(new LRUCache(maxCacheSize));
|
|
6566
6618
|
var spatialIndexRef = useRef(new SpatialHashGrid(SPATIAL_GRID_CELL_SIZE));
|
|
@@ -6733,14 +6785,18 @@ var WoongCanvasPolygon = function (props) {
|
|
|
6733
6785
|
handleDragEndShared = _f.handleDragEnd;
|
|
6734
6786
|
|
|
6735
6787
|
var handleDragStart = function () {
|
|
6736
|
-
handleDragStartShared();
|
|
6788
|
+
handleDragStartShared(); // 드래그 시작 시점의 hover 상태 저장
|
|
6789
|
+
|
|
6790
|
+
dragStartHoveredItemRef.current = hoveredItemRef.current;
|
|
6737
6791
|
draggingRef.current = true;
|
|
6738
6792
|
controller.setMapCursor('grabbing');
|
|
6739
6793
|
};
|
|
6740
6794
|
|
|
6741
6795
|
var handleDragEnd = function () {
|
|
6742
6796
|
handleDragEndShared();
|
|
6743
|
-
draggingRef.current = false;
|
|
6797
|
+
draggingRef.current = false; // 드래그 종료 후 hover 상태 초기화 (다음 MOUSEMOVE에서 업데이트됨)
|
|
6798
|
+
|
|
6799
|
+
dragStartHoveredItemRef.current = null;
|
|
6744
6800
|
controller.setMapCursor('grab');
|
|
6745
6801
|
}; // Hit Test: 특정 좌표의 폴리곤 찾기
|
|
6746
6802
|
|
|
@@ -6762,6 +6818,11 @@ var WoongCanvasPolygon = function (props) {
|
|
|
6762
6818
|
|
|
6763
6819
|
|
|
6764
6820
|
var setHovered = function (data) {
|
|
6821
|
+
// 드래그 중에는 hover 상태 변경을 무시하고 드래그 시작 시점의 상태 유지
|
|
6822
|
+
if (draggingRef.current) {
|
|
6823
|
+
return;
|
|
6824
|
+
}
|
|
6825
|
+
|
|
6765
6826
|
hoveredItemRef.current = data;
|
|
6766
6827
|
|
|
6767
6828
|
if (draggingRef.current) {
|
|
@@ -6807,6 +6868,7 @@ var WoongCanvasPolygon = function (props) {
|
|
|
6807
6868
|
|
|
6808
6869
|
|
|
6809
6870
|
var handleClick = function (event) {
|
|
6871
|
+
if (controller.isMapDragged()) return;
|
|
6810
6872
|
if (disableInteractionRef.current) return;
|
|
6811
6873
|
var clickedOffset = validateEvent(event, context, controller);
|
|
6812
6874
|
if (!clickedOffset) return;
|
|
@@ -6818,7 +6880,9 @@ var WoongCanvasPolygon = function (props) {
|
|
|
6818
6880
|
|
|
6819
6881
|
|
|
6820
6882
|
var handleMouseMove = function (event) {
|
|
6821
|
-
if (disableInteractionRef.current) return;
|
|
6883
|
+
if (disableInteractionRef.current) return; // 드래그 중에는 hover 상태를 업데이트하지 않음 (드래그 시작 시점의 hover 상태 유지)
|
|
6884
|
+
|
|
6885
|
+
if (draggingRef.current) return;
|
|
6822
6886
|
var mouseOffset = validateEvent(event, context, controller);
|
|
6823
6887
|
if (!mouseOffset) return;
|
|
6824
6888
|
var hoveredItem = findData(mouseOffset);
|
|
@@ -9885,4 +9949,4 @@ function MintMap(_a) {
|
|
|
9885
9949
|
}), loading));
|
|
9886
9950
|
}
|
|
9887
9951
|
|
|
9888
|
-
export { AnimationPlayer, Bounds, CanvasDataType, CanvasMarker, CanvasMarkerClaude, CanvasMarkerHanquf, CircleMarker, DEFAULT_CULLING_MARGIN, DEFAULT_MAX_CACHE_SIZE, Drawable, GeoCalulator, GoogleMintMapController, LRUCache, MapBuildingProjection, MapCanvasMarkerWrapper, MapCanvasWrapper, MapControlWrapper, MapEvent, MapLoadingWithImage, MapMarkerWrapper, MapPolygonWrapper, MapPolylineWrapper, MapUIEvent, Marker, MintMap, MintMapCanvasRenderer, MintMapController, MintMapCore, MintMapProvider, NaverMintMapController, Offset, PointLoading, Polygon, PolygonCalculator, PolygonMarker, Polyline, Position, SPATIAL_GRID_CELL_SIZE, SVGCircle, SVGPolygon, SVGRect, Spacing, SpatialHashGrid, Status, WoongCanvasMarker, WoongCanvasPolygon, WoongCanvasProvider, buildSpatialIndex, calculateTextBoxWidth, computeMarkerOffset, computePolygonOffsets, createCanvasDataArray, createMapEventHandlers, getClusterInfo, getMapOfType, hexToRgba, isInViewport, isPointInMarkerData, isPointInPolygon, isPointInPolygonData, log, mapValuesToArray, syncExternalSelectedItems, syncSelectedItems, updateViewport, useMarkerMoving, useMintMapController, useWoongCanvasContext, validateEvent, waiting };
|
|
9952
|
+
export { AnimationPlayer, Bounds, CanvasDataType, CanvasMarker, CanvasMarkerClaude, CanvasMarkerHanquf, CircleMarker, DEFAULT_CULLING_MARGIN, DEFAULT_MAX_CACHE_SIZE, Drawable, GeoCalulator, GoogleMintMapController, LRUCache, MapBuildingProjection, MapCanvasMarkerWrapper, MapCanvasWrapper, MapControlWrapper, MapEvent, MapLoadingWithImage, MapMarkerWrapper, MapPolygonWrapper, MapPolylineWrapper, MapUIEvent, Marker, MintMap, MintMapCanvasRenderer, MintMapController, MintMapCore, MintMapProvider, NaverMintMapController, Offset, PointLoading, Polygon, PolygonCalculator, PolygonMarker, Polyline, Position, SPATIAL_GRID_CELL_SIZE, SVGCircle, SVGPolygon, SVGRect, Spacing, SpatialHashGrid, Status, WoongCanvasMarker, WoongCanvasPolygon, WoongCanvasProvider, buildSpatialIndex, calculateTextBoxWidth, computeMarkerOffset, computePolygonOffsets, createCanvasData, createCanvasDataArray, createMapEventHandlers, getClusterInfo, getMapOfType, hexToRgba, isInViewport, isPointInMarkerData, isPointInPolygon, isPointInPolygonData, log, mapValuesToArray, syncExternalSelectedItems, syncSelectedItems, updateViewport, useMarkerMoving, useMintMapController, useWoongCanvasContext, validateEvent, waiting };
|
package/dist/index.js
CHANGED
|
@@ -72,6 +72,7 @@ Object.defineProperty(exports, 'CanvasDataType', {
|
|
|
72
72
|
exports.calculateTextBoxWidth = utils.calculateTextBoxWidth;
|
|
73
73
|
exports.computeMarkerOffset = utils.computeMarkerOffset;
|
|
74
74
|
exports.computePolygonOffsets = utils.computePolygonOffsets;
|
|
75
|
+
exports.createCanvasData = utils.createCanvasData;
|
|
75
76
|
exports.createCanvasDataArray = utils.createCanvasDataArray;
|
|
76
77
|
exports.hexToRgba = utils.hexToRgba;
|
|
77
78
|
exports.isPointInMarkerData = utils.isPointInMarkerData;
|
package/dist/index.umd.js
CHANGED
|
@@ -992,6 +992,44 @@
|
|
|
992
992
|
var textWidth = tempCtx.measureText(text).width;
|
|
993
993
|
return Math.max(minWidth, textWidth + padding);
|
|
994
994
|
};
|
|
995
|
+
/**
|
|
996
|
+
* 서버 데이터를 CanvasData로 변환하는 헬퍼 함수
|
|
997
|
+
*
|
|
998
|
+
* 서버 데이터의 필드가 CanvasOption과 충돌하는 경우 (예: id, position 등),
|
|
999
|
+
* 이 함수를 사용하여 명시적으로 매핑할 수 있습니다.
|
|
1000
|
+
*
|
|
1001
|
+
* @template T 서버에서 받은 원본 데이터 타입
|
|
1002
|
+
* @param serverData 서버에서 받은 원본 데이터
|
|
1003
|
+
* @param canvasOptions CanvasOption 필드들 (충돌하는 필드는 여기서 명시적으로 지정)
|
|
1004
|
+
* @returns CanvasData<T> 타입의 데이터
|
|
1005
|
+
*
|
|
1006
|
+
* @example
|
|
1007
|
+
* ```typescript
|
|
1008
|
+
* interface ServerData {
|
|
1009
|
+
* id: number; // CanvasOption의 id와 충돌
|
|
1010
|
+
* name: string;
|
|
1011
|
+
* }
|
|
1012
|
+
*
|
|
1013
|
+
* const serverData: ServerData = { id: 123, name: "Test" };
|
|
1014
|
+
*
|
|
1015
|
+
* // ✅ 올바른 사용
|
|
1016
|
+
* const canvasData = createCanvasData(serverData, {
|
|
1017
|
+
* id: String(serverData.id), // 명시적으로 변환
|
|
1018
|
+
* position: new Position(37.5, 127.0)
|
|
1019
|
+
* });
|
|
1020
|
+
*
|
|
1021
|
+
* // canvasData는 CanvasData<ServerData> 타입이며:
|
|
1022
|
+
* // - id: string (CanvasOption의 id)
|
|
1023
|
+
* // - name: string (서버 데이터의 name)
|
|
1024
|
+
* // - position: Position (CanvasOption의 position)
|
|
1025
|
+
* ```
|
|
1026
|
+
*/
|
|
1027
|
+
|
|
1028
|
+
function createCanvasData(serverData, canvasOptions) {
|
|
1029
|
+
// 서버 데이터와 CanvasOption을 결합
|
|
1030
|
+
// CanvasOption의 필드가 우선되므로 충돌하는 필드는 canvasOptions의 값이 사용됨
|
|
1031
|
+
return tslib.__assign(tslib.__assign({}, serverData), canvasOptions);
|
|
1032
|
+
}
|
|
995
1033
|
/**
|
|
996
1034
|
* 서버 데이터 배열을 CanvasData 배열로 변환하는 헬퍼 함수
|
|
997
1035
|
*
|
|
@@ -1029,10 +1067,8 @@
|
|
|
1029
1067
|
|
|
1030
1068
|
function createCanvasDataArray(serverDataArray, getCanvasOptions) {
|
|
1031
1069
|
return serverDataArray.map(function (serverData, index) {
|
|
1032
|
-
var canvasOptions = getCanvasOptions(serverData, index);
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
return tslib.__assign(tslib.__assign({}, serverData), canvasOptions);
|
|
1070
|
+
var canvasOptions = getCanvasOptions(serverData, index);
|
|
1071
|
+
return createCanvasData(serverData, canvasOptions);
|
|
1036
1072
|
});
|
|
1037
1073
|
}
|
|
1038
1074
|
|
|
@@ -5680,7 +5716,9 @@
|
|
|
5680
5716
|
var accumTranslateRef = React.useRef({
|
|
5681
5717
|
x: 0,
|
|
5682
5718
|
y: 0
|
|
5683
|
-
}); //
|
|
5719
|
+
}); // 드래그 시작 시점의 hover 상태 저장 (드래그 중 hover 고정용)
|
|
5720
|
+
|
|
5721
|
+
var dragStartHoveredItemRef = React.useRef(null); // 성능 최적화 Refs
|
|
5684
5722
|
|
|
5685
5723
|
var offsetCacheRef = React.useRef(new LRUCache(maxCacheSize));
|
|
5686
5724
|
var spatialIndexRef = React.useRef(new SpatialHashGrid(SPATIAL_GRID_CELL_SIZE));
|
|
@@ -5879,14 +5917,18 @@
|
|
|
5879
5917
|
handleDragEndShared = _g.handleDragEnd;
|
|
5880
5918
|
|
|
5881
5919
|
var handleDragStart = function () {
|
|
5882
|
-
handleDragStartShared();
|
|
5920
|
+
handleDragStartShared(); // 드래그 시작 시점의 hover 상태 저장
|
|
5921
|
+
|
|
5922
|
+
dragStartHoveredItemRef.current = hoveredItemRef.current;
|
|
5883
5923
|
draggingRef.current = true;
|
|
5884
5924
|
controller.setMapCursor('grabbing');
|
|
5885
5925
|
};
|
|
5886
5926
|
|
|
5887
5927
|
var handleDragEnd = function () {
|
|
5888
5928
|
handleDragEndShared();
|
|
5889
|
-
draggingRef.current = false;
|
|
5929
|
+
draggingRef.current = false; // 드래그 종료 후 hover 상태 초기화 (다음 MOUSEMOVE에서 업데이트됨)
|
|
5930
|
+
|
|
5931
|
+
dragStartHoveredItemRef.current = null;
|
|
5890
5932
|
controller.setMapCursor('grab');
|
|
5891
5933
|
}; // Hit Test: 특정 좌표의 마커 찾기
|
|
5892
5934
|
|
|
@@ -5917,6 +5959,11 @@
|
|
|
5917
5959
|
|
|
5918
5960
|
|
|
5919
5961
|
var setHovered = function (data) {
|
|
5962
|
+
// 드래그 중에는 hover 상태 변경을 무시하고 드래그 시작 시점의 상태 유지
|
|
5963
|
+
if (draggingRef.current) {
|
|
5964
|
+
return;
|
|
5965
|
+
}
|
|
5966
|
+
|
|
5920
5967
|
hoveredItemRef.current = data;
|
|
5921
5968
|
|
|
5922
5969
|
if (draggingRef.current) {
|
|
@@ -5966,6 +6013,7 @@
|
|
|
5966
6013
|
|
|
5967
6014
|
|
|
5968
6015
|
var handleClick = function (event) {
|
|
6016
|
+
if (controller.isMapDragged()) return;
|
|
5969
6017
|
if (disableInteractionRef.current) return;
|
|
5970
6018
|
var clickedOffset = validateEvent(event, context, controller);
|
|
5971
6019
|
if (!clickedOffset) return;
|
|
@@ -5977,7 +6025,9 @@
|
|
|
5977
6025
|
|
|
5978
6026
|
|
|
5979
6027
|
var handleMouseMove = function (event) {
|
|
5980
|
-
if (disableInteractionRef.current) return;
|
|
6028
|
+
if (disableInteractionRef.current) return; // 드래그 중에는 hover 상태를 업데이트하지 않음 (드래그 시작 시점의 hover 상태 유지)
|
|
6029
|
+
|
|
6030
|
+
if (draggingRef.current) return;
|
|
5981
6031
|
var mouseOffset = validateEvent(event, context, controller);
|
|
5982
6032
|
if (!mouseOffset) return;
|
|
5983
6033
|
var hoveredItem = findData(mouseOffset);
|
|
@@ -6564,7 +6614,9 @@
|
|
|
6564
6614
|
var accumTranslateRef = React.useRef({
|
|
6565
6615
|
x: 0,
|
|
6566
6616
|
y: 0
|
|
6567
|
-
}); //
|
|
6617
|
+
}); // 드래그 시작 시점의 hover 상태 저장 (드래그 중 hover 고정용)
|
|
6618
|
+
|
|
6619
|
+
var dragStartHoveredItemRef = React.useRef(null); // 성능 최적화 Refs
|
|
6568
6620
|
|
|
6569
6621
|
var offsetCacheRef = React.useRef(new LRUCache(maxCacheSize));
|
|
6570
6622
|
var spatialIndexRef = React.useRef(new SpatialHashGrid(SPATIAL_GRID_CELL_SIZE));
|
|
@@ -6737,14 +6789,18 @@
|
|
|
6737
6789
|
handleDragEndShared = _f.handleDragEnd;
|
|
6738
6790
|
|
|
6739
6791
|
var handleDragStart = function () {
|
|
6740
|
-
handleDragStartShared();
|
|
6792
|
+
handleDragStartShared(); // 드래그 시작 시점의 hover 상태 저장
|
|
6793
|
+
|
|
6794
|
+
dragStartHoveredItemRef.current = hoveredItemRef.current;
|
|
6741
6795
|
draggingRef.current = true;
|
|
6742
6796
|
controller.setMapCursor('grabbing');
|
|
6743
6797
|
};
|
|
6744
6798
|
|
|
6745
6799
|
var handleDragEnd = function () {
|
|
6746
6800
|
handleDragEndShared();
|
|
6747
|
-
draggingRef.current = false;
|
|
6801
|
+
draggingRef.current = false; // 드래그 종료 후 hover 상태 초기화 (다음 MOUSEMOVE에서 업데이트됨)
|
|
6802
|
+
|
|
6803
|
+
dragStartHoveredItemRef.current = null;
|
|
6748
6804
|
controller.setMapCursor('grab');
|
|
6749
6805
|
}; // Hit Test: 특정 좌표의 폴리곤 찾기
|
|
6750
6806
|
|
|
@@ -6766,6 +6822,11 @@
|
|
|
6766
6822
|
|
|
6767
6823
|
|
|
6768
6824
|
var setHovered = function (data) {
|
|
6825
|
+
// 드래그 중에는 hover 상태 변경을 무시하고 드래그 시작 시점의 상태 유지
|
|
6826
|
+
if (draggingRef.current) {
|
|
6827
|
+
return;
|
|
6828
|
+
}
|
|
6829
|
+
|
|
6769
6830
|
hoveredItemRef.current = data;
|
|
6770
6831
|
|
|
6771
6832
|
if (draggingRef.current) {
|
|
@@ -6811,6 +6872,7 @@
|
|
|
6811
6872
|
|
|
6812
6873
|
|
|
6813
6874
|
var handleClick = function (event) {
|
|
6875
|
+
if (controller.isMapDragged()) return;
|
|
6814
6876
|
if (disableInteractionRef.current) return;
|
|
6815
6877
|
var clickedOffset = validateEvent(event, context, controller);
|
|
6816
6878
|
if (!clickedOffset) return;
|
|
@@ -6822,7 +6884,9 @@
|
|
|
6822
6884
|
|
|
6823
6885
|
|
|
6824
6886
|
var handleMouseMove = function (event) {
|
|
6825
|
-
if (disableInteractionRef.current) return;
|
|
6887
|
+
if (disableInteractionRef.current) return; // 드래그 중에는 hover 상태를 업데이트하지 않음 (드래그 시작 시점의 hover 상태 유지)
|
|
6888
|
+
|
|
6889
|
+
if (draggingRef.current) return;
|
|
6826
6890
|
var mouseOffset = validateEvent(event, context, controller);
|
|
6827
6891
|
if (!mouseOffset) return;
|
|
6828
6892
|
var hoveredItem = findData(mouseOffset);
|
|
@@ -9939,6 +10003,7 @@
|
|
|
9939
10003
|
exports.calculateTextBoxWidth = calculateTextBoxWidth;
|
|
9940
10004
|
exports.computeMarkerOffset = computeMarkerOffset;
|
|
9941
10005
|
exports.computePolygonOffsets = computePolygonOffsets;
|
|
10006
|
+
exports.createCanvasData = createCanvasData;
|
|
9942
10007
|
exports.createCanvasDataArray = createCanvasDataArray;
|
|
9943
10008
|
exports.createMapEventHandlers = createMapEventHandlers;
|
|
9944
10009
|
exports.getClusterInfo = getClusterInfo;
|