@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.
Files changed (22) hide show
  1. package/dist/components/mint-map/core/advanced/shared/context.d.ts +71 -2
  2. package/dist/components/mint-map/core/advanced/shared/context.js +74 -1
  3. package/dist/components/mint-map/core/advanced/shared/helpers.d.ts +28 -0
  4. package/dist/components/mint-map/core/advanced/shared/helpers.js +52 -0
  5. package/dist/components/mint-map/core/advanced/shared/hooks.d.ts +144 -0
  6. package/dist/components/mint-map/core/advanced/shared/hooks.js +283 -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 +105 -24
  9. package/dist/components/mint-map/core/advanced/shared/performance.js +105 -24
  10. package/dist/components/mint-map/core/advanced/shared/utils.d.ts +128 -14
  11. package/dist/components/mint-map/core/advanced/shared/utils.js +128 -14
  12. package/dist/components/mint-map/core/advanced/shared/viewport.d.ts +72 -0
  13. package/dist/components/mint-map/core/advanced/shared/viewport.js +81 -0
  14. package/dist/components/mint-map/core/advanced/woongCanvasMarker/WoongCanvasMarker.js +142 -209
  15. package/dist/components/mint-map/core/advanced/woongCanvasPolygon/WoongCanvasPolygon.d.ts +0 -4
  16. package/dist/components/mint-map/core/advanced/woongCanvasPolygon/WoongCanvasPolygon.js +122 -217
  17. package/dist/components/mint-map/core/advanced/woongCanvasPolygon/renderer.d.ts +64 -5
  18. package/dist/components/mint-map/core/advanced/woongCanvasPolygon/renderer.js +81 -20
  19. package/dist/index.es.js +1066 -511
  20. package/dist/index.js +11 -0
  21. package/dist/index.umd.js +1072 -509
  22. package/package.json +1 -1
@@ -4,10 +4,23 @@ import { KonvaCanvasData } from "./types";
4
4
  /**
5
5
  * 다중 WoongCanvasMarker/WoongCanvasPolygon 인스턴스를 관리하기 위한 Context
6
6
  *
7
- * 용도:
8
- * - zIndex 기반 이벤트 우선순위 처리
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
- * 높은 zIndex가 먼저 처리됨
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;