@mint-ui/map 1.2.0-test.33 → 1.2.0-test.35
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/context.d.ts +71 -2
- package/dist/components/mint-map/core/advanced/shared/context.js +74 -1
- package/dist/components/mint-map/core/advanced/shared/helpers.d.ts +28 -0
- package/dist/components/mint-map/core/advanced/shared/helpers.js +52 -0
- package/dist/components/mint-map/core/advanced/shared/hooks.d.ts +144 -0
- package/dist/components/mint-map/core/advanced/shared/hooks.js +283 -0
- package/dist/components/mint-map/core/advanced/shared/index.d.ts +3 -0
- package/dist/components/mint-map/core/advanced/shared/performance.d.ts +105 -24
- package/dist/components/mint-map/core/advanced/shared/performance.js +105 -24
- package/dist/components/mint-map/core/advanced/shared/utils.d.ts +128 -14
- package/dist/components/mint-map/core/advanced/shared/utils.js +128 -14
- package/dist/components/mint-map/core/advanced/shared/viewport.d.ts +72 -0
- package/dist/components/mint-map/core/advanced/shared/viewport.js +81 -0
- package/dist/components/mint-map/core/advanced/woongCanvasMarker/WoongCanvasMarker.js +142 -209
- package/dist/components/mint-map/core/advanced/woongCanvasPolygon/WoongCanvasPolygon.d.ts +0 -4
- package/dist/components/mint-map/core/advanced/woongCanvasPolygon/WoongCanvasPolygon.js +122 -217
- package/dist/components/mint-map/core/advanced/woongCanvasPolygon/renderer.d.ts +64 -5
- package/dist/components/mint-map/core/advanced/woongCanvasPolygon/renderer.js +81 -20
- package/dist/index.es.js +1066 -511
- package/dist/index.js +11 -0
- package/dist/index.umd.js +1072 -509
- package/package.json +1 -1
|
@@ -4,10 +4,23 @@ import { KonvaCanvasData } from "./types";
|
|
|
4
4
|
/**
|
|
5
5
|
* 다중 WoongCanvasMarker/WoongCanvasPolygon 인스턴스를 관리하기 위한 Context
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
7
|
+
* 여러 WoongCanvas 컴포넌트가 함께 사용될 때 zIndex 기반으로 이벤트 우선순위를 관리합니다.
|
|
8
|
+
*
|
|
9
|
+
* @remarks
|
|
10
|
+
* **주요 용도:**
|
|
11
|
+
* - zIndex 기반 이벤트 우선순위 처리 (높은 zIndex가 먼저 처리)
|
|
9
12
|
* - 전역 클릭/호버 이벤트 조정
|
|
10
13
|
* - 여러 레이어 간 상호작용 관리
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* <WoongCanvasProvider>
|
|
18
|
+
* <WoongCanvasMarker data={markers} zIndex={10} />
|
|
19
|
+
* <WoongCanvasPolygon data={polygons} zIndex={5} />
|
|
20
|
+
* </WoongCanvasProvider>
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @template T 마커/폴리곤 데이터의 추가 속성 타입
|
|
11
24
|
*/
|
|
12
25
|
export interface ComponentInstance<T> {
|
|
13
26
|
zIndex: number;
|
|
@@ -21,12 +34,68 @@ export interface ComponentInstance<T> {
|
|
|
21
34
|
getSelectedIds: () => Set<string>;
|
|
22
35
|
isInteractionDisabled: () => boolean;
|
|
23
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* WoongCanvas Context Value 인터페이스
|
|
39
|
+
*
|
|
40
|
+
* @template T 마커/폴리곤 데이터의 추가 속성 타입
|
|
41
|
+
*/
|
|
24
42
|
interface WoongCanvasContextValue {
|
|
43
|
+
/**
|
|
44
|
+
* 컴포넌트 인스턴스 등록
|
|
45
|
+
*
|
|
46
|
+
* @param instance 등록할 컴포넌트 인스턴스
|
|
47
|
+
*/
|
|
25
48
|
registerComponent: <T>(instance: ComponentInstance<T>) => void;
|
|
49
|
+
/**
|
|
50
|
+
* 컴포넌트 인스턴스 등록 해제
|
|
51
|
+
*
|
|
52
|
+
* @param instance 등록 해제할 컴포넌트 인스턴스
|
|
53
|
+
*/
|
|
26
54
|
unregisterComponent: <T>(instance: ComponentInstance<T>) => void;
|
|
27
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* WoongCanvasProvider 컴포넌트
|
|
58
|
+
*
|
|
59
|
+
* 다중 WoongCanvas 컴포넌트 인스턴스를 관리하는 Context Provider입니다.
|
|
60
|
+
* 여러 WoongCanvasMarker/WoongCanvasPolygon이 함께 사용될 때 전역 이벤트 조정을 수행합니다.
|
|
61
|
+
*
|
|
62
|
+
* @param props 컴포넌트 props
|
|
63
|
+
* @param props.children 자식 컴포넌트
|
|
64
|
+
*
|
|
65
|
+
* @remarks
|
|
66
|
+
* - zIndex 기반으로 이벤트 우선순위 처리
|
|
67
|
+
* - 전역 클릭/호버 이벤트 조정
|
|
68
|
+
* - 여러 레이어 간 상호작용 관리
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```tsx
|
|
72
|
+
* <WoongCanvasProvider>
|
|
73
|
+
* <WoongCanvasMarker data={markers} zIndex={10} />
|
|
74
|
+
* <WoongCanvasPolygon data={polygons} zIndex={5} />
|
|
75
|
+
* </WoongCanvasProvider>
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
28
78
|
export declare const WoongCanvasProvider: React.FC<{
|
|
29
79
|
children: React.ReactNode;
|
|
30
80
|
}>;
|
|
81
|
+
/**
|
|
82
|
+
* WoongCanvas Context Hook
|
|
83
|
+
*
|
|
84
|
+
* WoongCanvasProvider로 감싸진 컴포넌트에서 Context에 접근할 수 있는 hook입니다.
|
|
85
|
+
*
|
|
86
|
+
* @returns WoongCanvasContextValue 또는 null (Provider 없으면)
|
|
87
|
+
*
|
|
88
|
+
* @remarks
|
|
89
|
+
* - Provider로 감싸지지 않으면 null 반환 (각 컴포넌트가 로컬 이벤트 처리)
|
|
90
|
+
* - Provider로 감싸져 있으면 전역 이벤트 조정 활성화
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* const context = useWoongCanvasContext();
|
|
95
|
+
* if (context) {
|
|
96
|
+
* // Context 사용 중 (전역 이벤트 조정)
|
|
97
|
+
* }
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
31
100
|
export declare const useWoongCanvasContext: () => WoongCanvasContextValue | null;
|
|
32
101
|
export {};
|
|
@@ -10,6 +10,29 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
10
10
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
11
11
|
|
|
12
12
|
var WoongCanvasContext = React.createContext(null);
|
|
13
|
+
/**
|
|
14
|
+
* WoongCanvasProvider 컴포넌트
|
|
15
|
+
*
|
|
16
|
+
* 다중 WoongCanvas 컴포넌트 인스턴스를 관리하는 Context Provider입니다.
|
|
17
|
+
* 여러 WoongCanvasMarker/WoongCanvasPolygon이 함께 사용될 때 전역 이벤트 조정을 수행합니다.
|
|
18
|
+
*
|
|
19
|
+
* @param props 컴포넌트 props
|
|
20
|
+
* @param props.children 자식 컴포넌트
|
|
21
|
+
*
|
|
22
|
+
* @remarks
|
|
23
|
+
* - zIndex 기반으로 이벤트 우선순위 처리
|
|
24
|
+
* - 전역 클릭/호버 이벤트 조정
|
|
25
|
+
* - 여러 레이어 간 상호작용 관리
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```tsx
|
|
29
|
+
* <WoongCanvasProvider>
|
|
30
|
+
* <WoongCanvasMarker data={markers} zIndex={10} />
|
|
31
|
+
* <WoongCanvasPolygon data={polygons} zIndex={5} />
|
|
32
|
+
* </WoongCanvasProvider>
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
|
|
13
36
|
var WoongCanvasProvider = function (_a) {
|
|
14
37
|
var children = _a.children;
|
|
15
38
|
var controller = MintMapProvider.useMintMapController(); // Refs
|
|
@@ -20,7 +43,12 @@ var WoongCanvasProvider = function (_a) {
|
|
|
20
43
|
var draggingRef = React.useRef(false);
|
|
21
44
|
/**
|
|
22
45
|
* 컴포넌트 등록 (zIndex 내림차순 정렬)
|
|
23
|
-
*
|
|
46
|
+
*
|
|
47
|
+
* 컴포넌트 인스턴스를 등록하고 zIndex 기준으로 내림차순 정렬합니다.
|
|
48
|
+
* 높은 zIndex를 가진 컴포넌트가 이벤트 처리에서 우선순위를 가집니다.
|
|
49
|
+
*
|
|
50
|
+
* @template T 마커/폴리곤 데이터의 추가 속성 타입
|
|
51
|
+
* @param instance 등록할 컴포넌트 인스턴스
|
|
24
52
|
*/
|
|
25
53
|
|
|
26
54
|
var registerComponent = React.useCallback(function (instance) {
|
|
@@ -31,6 +59,12 @@ var WoongCanvasProvider = function (_a) {
|
|
|
31
59
|
}, []);
|
|
32
60
|
/**
|
|
33
61
|
* 컴포넌트 등록 해제
|
|
62
|
+
*
|
|
63
|
+
* 컴포넌트 인스턴스를 등록 해제합니다.
|
|
64
|
+
* hover 중이던 컴포넌트면 hover 상태도 초기화합니다.
|
|
65
|
+
*
|
|
66
|
+
* @template T 마커/폴리곤 데이터의 추가 속성 타입
|
|
67
|
+
* @param instance 등록 해제할 컴포넌트 인스턴스
|
|
34
68
|
*/
|
|
35
69
|
|
|
36
70
|
var unregisterComponent = React.useCallback(function (instance) {
|
|
@@ -46,6 +80,15 @@ var WoongCanvasProvider = function (_a) {
|
|
|
46
80
|
}, []);
|
|
47
81
|
/**
|
|
48
82
|
* 전역 클릭 핸들러 (zIndex 우선순위)
|
|
83
|
+
*
|
|
84
|
+
* 모든 등록된 WoongCanvas 컴포넌트 중 zIndex가 높은 컴포넌트부터 클릭 이벤트를 처리합니다.
|
|
85
|
+
*
|
|
86
|
+
* @param event 클릭 이벤트 파라미터
|
|
87
|
+
*
|
|
88
|
+
* @remarks
|
|
89
|
+
* - zIndex가 높은 컴포넌트부터 순회하여 첫 번째 히트만 처리
|
|
90
|
+
* - 상호작용이 비활성화된 컴포넌트는 스킵
|
|
91
|
+
* - Context가 없으면 각 컴포넌트의 로컬 핸들러가 처리
|
|
49
92
|
*/
|
|
50
93
|
|
|
51
94
|
var handleGlobalClick = React.useCallback(function (event) {
|
|
@@ -73,6 +116,16 @@ var WoongCanvasProvider = function (_a) {
|
|
|
73
116
|
}, [controller]);
|
|
74
117
|
/**
|
|
75
118
|
* 전역 마우스 이동 핸들러 (zIndex 우선순위)
|
|
119
|
+
*
|
|
120
|
+
* 모든 등록된 WoongCanvas 컴포넌트 중 zIndex가 높은 컴포넌트부터 hover 이벤트를 처리합니다.
|
|
121
|
+
*
|
|
122
|
+
* @param event 마우스 이동 이벤트 파라미터
|
|
123
|
+
*
|
|
124
|
+
* @remarks
|
|
125
|
+
* - zIndex가 높은 컴포넌트부터 순회하여 첫 번째 히트만 처리
|
|
126
|
+
* - 상호작용이 비활성화된 컴포넌트는 스킵
|
|
127
|
+
* - 드래그 중이면 이벤트 무시 (성능 최적화)
|
|
128
|
+
* - hover 상태 변경 감지 후 이전 hover 해제 및 새 hover 설정
|
|
76
129
|
*/
|
|
77
130
|
|
|
78
131
|
var handleGlobalMouseMove = React.useCallback(function (event) {
|
|
@@ -159,6 +212,26 @@ var WoongCanvasProvider = function (_a) {
|
|
|
159
212
|
value: contextValue
|
|
160
213
|
}, children);
|
|
161
214
|
};
|
|
215
|
+
/**
|
|
216
|
+
* WoongCanvas Context Hook
|
|
217
|
+
*
|
|
218
|
+
* WoongCanvasProvider로 감싸진 컴포넌트에서 Context에 접근할 수 있는 hook입니다.
|
|
219
|
+
*
|
|
220
|
+
* @returns WoongCanvasContextValue 또는 null (Provider 없으면)
|
|
221
|
+
*
|
|
222
|
+
* @remarks
|
|
223
|
+
* - Provider로 감싸지지 않으면 null 반환 (각 컴포넌트가 로컬 이벤트 처리)
|
|
224
|
+
* - Provider로 감싸져 있으면 전역 이벤트 조정 활성화
|
|
225
|
+
*
|
|
226
|
+
* @example
|
|
227
|
+
* ```typescript
|
|
228
|
+
* const context = useWoongCanvasContext();
|
|
229
|
+
* if (context) {
|
|
230
|
+
* // Context 사용 중 (전역 이벤트 조정)
|
|
231
|
+
* }
|
|
232
|
+
* ```
|
|
233
|
+
*/
|
|
234
|
+
|
|
162
235
|
var useWoongCanvasContext = function () {
|
|
163
236
|
var context = React.useContext(WoongCanvasContext);
|
|
164
237
|
return context;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { EventParam, MapUIEventParam } from "../../../types";
|
|
2
|
+
import type { MintMapController } from "../../MintMapController";
|
|
3
|
+
import type { Offset } from "../../../types";
|
|
4
|
+
/**
|
|
5
|
+
* 이벤트 유효성 검증 헬퍼
|
|
6
|
+
*
|
|
7
|
+
* @param event 이벤트 파라미터
|
|
8
|
+
* @param context Context가 있는지 여부
|
|
9
|
+
* @param controller MintMapController 인스턴스
|
|
10
|
+
* @returns 유효한 offset 또는 null
|
|
11
|
+
*
|
|
12
|
+
* @remarks
|
|
13
|
+
* Context가 있으면 전역 이벤트 핸들러가 처리하므로 로컬 핸들러는 스킵
|
|
14
|
+
*/
|
|
15
|
+
export declare const validateEvent: (event: EventParam<MapUIEventParam> | null | undefined, context: any, controller: MintMapController) => Offset | null;
|
|
16
|
+
/**
|
|
17
|
+
* Map의 values를 배열로 변환 (최적화 버전)
|
|
18
|
+
*
|
|
19
|
+
* @param map 변환할 Map
|
|
20
|
+
* @returns Map의 값 배열
|
|
21
|
+
*
|
|
22
|
+
* @remarks
|
|
23
|
+
* Map.values()는 IterableIterator를 반환하므로 배열 변환이 필요할 때 사용합니다.
|
|
24
|
+
* 성능: O(n) 시간복잡도
|
|
25
|
+
*
|
|
26
|
+
* 최적화: Array.from을 사용하되, 크기를 미리 할당하여 메모리 재할당 최소화
|
|
27
|
+
*/
|
|
28
|
+
export declare const mapValuesToArray: <T>(map: Map<string, T>) => T[];
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* 이벤트 유효성 검증 헬퍼
|
|
7
|
+
*
|
|
8
|
+
* @param event 이벤트 파라미터
|
|
9
|
+
* @param context Context가 있는지 여부
|
|
10
|
+
* @param controller MintMapController 인스턴스
|
|
11
|
+
* @returns 유효한 offset 또는 null
|
|
12
|
+
*
|
|
13
|
+
* @remarks
|
|
14
|
+
* Context가 있으면 전역 이벤트 핸들러가 처리하므로 로컬 핸들러는 스킵
|
|
15
|
+
*/
|
|
16
|
+
var validateEvent = function (event, context, controller) {
|
|
17
|
+
var _a; // Context가 있으면 전역 핸들러가 처리
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
if (context) return null; // 이벤트 파라미터 검증
|
|
21
|
+
|
|
22
|
+
if (!((_a = event === null || event === void 0 ? void 0 : event.param) === null || _a === void 0 ? void 0 : _a.position)) return null;
|
|
23
|
+
|
|
24
|
+
try {
|
|
25
|
+
return controller.positionToOffset(event.param.position);
|
|
26
|
+
} catch (error) {
|
|
27
|
+
console.error('[WoongCanvas] validateEvent error:', error);
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Map의 values를 배열로 변환 (최적화 버전)
|
|
33
|
+
*
|
|
34
|
+
* @param map 변환할 Map
|
|
35
|
+
* @returns Map의 값 배열
|
|
36
|
+
*
|
|
37
|
+
* @remarks
|
|
38
|
+
* Map.values()는 IterableIterator를 반환하므로 배열 변환이 필요할 때 사용합니다.
|
|
39
|
+
* 성능: O(n) 시간복잡도
|
|
40
|
+
*
|
|
41
|
+
* 최적화: Array.from을 사용하되, 크기를 미리 할당하여 메모리 재할당 최소화
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
var mapValuesToArray = function (map) {
|
|
45
|
+
// Map이 비어있으면 빈 배열 반환 (메모리 할당 최소화)
|
|
46
|
+
if (map.size === 0) return []; // Array.from 사용 (TypeScript 컴파일러 호환성)
|
|
47
|
+
|
|
48
|
+
return Array.from(map.values());
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
exports.mapValuesToArray = mapValuesToArray;
|
|
52
|
+
exports.validateEvent = validateEvent;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { MutableRefObject } from "react";
|
|
2
|
+
import type { MintMapController } from "../../MintMapController";
|
|
3
|
+
import type { Marker, MarkerOptions } from "../../../types";
|
|
4
|
+
import type { KonvaCanvasData } from "./types";
|
|
5
|
+
import type { BoundingBox } from "./viewport";
|
|
6
|
+
import type { SpatialHashGrid } from "./performance";
|
|
7
|
+
/**
|
|
8
|
+
* 공통 이벤트 핸들러 의존성 인터페이스
|
|
9
|
+
*
|
|
10
|
+
* @template T 마커/폴리곤 데이터의 추가 속성 타입
|
|
11
|
+
*
|
|
12
|
+
* @remarks
|
|
13
|
+
* 지도 이벤트 핸들러 생성 시 필요한 모든 의존성을 포함합니다.
|
|
14
|
+
*/
|
|
15
|
+
export interface EventHandlerDeps<T> {
|
|
16
|
+
controller: MintMapController;
|
|
17
|
+
containerRef: MutableRefObject<HTMLDivElement | null>;
|
|
18
|
+
markerRef: MutableRefObject<Marker | undefined>;
|
|
19
|
+
options: Pick<MarkerOptions, 'zIndex' | 'anchor' | 'visible'>;
|
|
20
|
+
prevCenterOffsetRef: MutableRefObject<{
|
|
21
|
+
x: number;
|
|
22
|
+
y: number;
|
|
23
|
+
} | null>;
|
|
24
|
+
accumTranslateRef: MutableRefObject<{
|
|
25
|
+
x: number;
|
|
26
|
+
y: number;
|
|
27
|
+
}>;
|
|
28
|
+
offsetCacheRef: MutableRefObject<any>;
|
|
29
|
+
boundingBoxCacheRef: MutableRefObject<Map<string, BoundingBox>>;
|
|
30
|
+
renderAllImmediate: () => void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 지도 이벤트 핸들러 생성 함수
|
|
34
|
+
*
|
|
35
|
+
* 지도 이동, 줌, 드래그 등의 이벤트를 처리하는 핸들러들을 생성합니다.
|
|
36
|
+
*
|
|
37
|
+
* @template T 마커/폴리곤 데이터의 추가 속성 타입
|
|
38
|
+
* @param deps 이벤트 핸들러 생성에 필요한 의존성
|
|
39
|
+
* @returns 지도 이벤트 핸들러 객체
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* const {
|
|
44
|
+
* handleIdle,
|
|
45
|
+
* handleZoomStart,
|
|
46
|
+
* handleZoomEnd,
|
|
47
|
+
* handleCenterChanged,
|
|
48
|
+
* handleDragStart,
|
|
49
|
+
* handleDragEnd,
|
|
50
|
+
* } = createMapEventHandlers({
|
|
51
|
+
* controller,
|
|
52
|
+
* containerRef,
|
|
53
|
+
* markerRef,
|
|
54
|
+
* options,
|
|
55
|
+
* prevCenterOffsetRef,
|
|
56
|
+
* accumTranslateRef,
|
|
57
|
+
* offsetCacheRef,
|
|
58
|
+
* boundingBoxCacheRef,
|
|
59
|
+
* renderAllImmediate,
|
|
60
|
+
* });
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export declare const createMapEventHandlers: <T>(deps: EventHandlerDeps<T>) => {
|
|
64
|
+
handleIdle: () => void;
|
|
65
|
+
handleZoomStart: () => void;
|
|
66
|
+
handleZoomEnd: () => void;
|
|
67
|
+
handleCenterChanged: () => void;
|
|
68
|
+
handleDragStart: () => void;
|
|
69
|
+
handleDragEnd: () => void;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* 공간 인덱스 빌드 (빠른 Hit Test를 위한 자료구조)
|
|
73
|
+
*
|
|
74
|
+
* Spatial Hash Grid에 모든 데이터의 바운딩 박스를 삽입합니다.
|
|
75
|
+
* 이를 통해 클릭/호버 시 O(1) 수준의 빠른 Hit Test가 가능합니다.
|
|
76
|
+
*
|
|
77
|
+
* @template T 마커/폴리곤 데이터의 추가 속성 타입
|
|
78
|
+
* @param data 공간 인덱스에 삽입할 데이터 배열
|
|
79
|
+
* @param spatialIndex Spatial Hash Grid 인스턴스
|
|
80
|
+
* @param computeBoundingBox 바운딩 박스 계산 함수
|
|
81
|
+
*
|
|
82
|
+
* @remarks
|
|
83
|
+
* - 성능: O(n) 시간복잡도, n은 데이터 개수
|
|
84
|
+
* - 호출 시점: 데이터 변경 시 또는 지도 이동/줌 완료 시
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* buildSpatialIndex(
|
|
89
|
+
* dataRef.current,
|
|
90
|
+
* spatialIndexRef.current,
|
|
91
|
+
* computeBoundingBox
|
|
92
|
+
* );
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export declare const buildSpatialIndex: <T>(data: KonvaCanvasData<T>[], spatialIndex: SpatialHashGrid<KonvaCanvasData<T>>, computeBoundingBox: (item: KonvaCanvasData<T>) => BoundingBox | null) => void;
|
|
96
|
+
/**
|
|
97
|
+
* 선택 상태 동기화 유틸리티
|
|
98
|
+
*
|
|
99
|
+
* 데이터 변경 시 선택된 항목의 참조를 최신 데이터로 업데이트합니다.
|
|
100
|
+
* 화면 밖에 있는 선택된 항목도 선택 상태를 유지합니다.
|
|
101
|
+
*
|
|
102
|
+
* @template T 마커/폴리곤 데이터의 추가 속성 타입
|
|
103
|
+
* @param data 최신 데이터 배열
|
|
104
|
+
* @param selectedIds 선택된 항목 ID Set
|
|
105
|
+
* @param selectedItemsMap 현재 선택된 항목 Map
|
|
106
|
+
* @returns 업데이트된 선택된 항목 Map
|
|
107
|
+
*
|
|
108
|
+
* @remarks
|
|
109
|
+
* - 성능: O(n + m), n은 전체 데이터 수, m은 선택된 항목 수
|
|
110
|
+
* - 화면 밖 데이터도 선택 상태 유지 (최신 데이터가 없으면 기존 데이터 유지)
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```typescript
|
|
114
|
+
* selectedItemsMapRef.current = syncSelectedItems(
|
|
115
|
+
* data,
|
|
116
|
+
* selectedIdsRef.current,
|
|
117
|
+
* selectedItemsMapRef.current
|
|
118
|
+
* );
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
export declare const syncSelectedItems: <T>(data: KonvaCanvasData<T>[], selectedIds: Set<string>, selectedItemsMap: Map<string, KonvaCanvasData<T>>) => Map<string, KonvaCanvasData<T>>;
|
|
122
|
+
/**
|
|
123
|
+
* 외부 selectedItems를 내부 상태로 동기화
|
|
124
|
+
*
|
|
125
|
+
* 외부에서 전달된 selectedItems prop을 내부 ref 상태로 동기화합니다.
|
|
126
|
+
*
|
|
127
|
+
* @template T 마커/폴리곤 데이터의 추가 속성 타입
|
|
128
|
+
* @param externalSelectedItems 외부에서 전달된 선택된 항목 배열 (undefined면 동기화 안 함)
|
|
129
|
+
* @param selectedIdsRef 선택된 ID Set ref
|
|
130
|
+
* @param selectedItemsMapRef 선택된 항목 Map ref
|
|
131
|
+
*
|
|
132
|
+
* @remarks
|
|
133
|
+
* - externalSelectedItems가 undefined면 외부 제어가 아니므로 아무 작업도 하지 않음
|
|
134
|
+
* - 성능: O(m), m은 externalSelectedItems의 길이
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```typescript
|
|
138
|
+
* useEffect(() => {
|
|
139
|
+
* syncExternalSelectedItems(externalSelectedItems, selectedIdsRef, selectedItemsMapRef);
|
|
140
|
+
* // 렌더링...
|
|
141
|
+
* }, [externalSelectedItems]);
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
export declare const syncExternalSelectedItems: <T>(externalSelectedItems: KonvaCanvasData<T>[] | undefined, selectedIdsRef: MutableRefObject<Set<string>>, selectedItemsMapRef: MutableRefObject<Map<string, KonvaCanvasData<T>>>) => void;
|