@mint-ui/map 1.2.0-test.8 → 1.2.0

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 (60) hide show
  1. package/.eslintrc.js +11 -4
  2. package/.vscode/settings.json +32 -9
  3. package/dist/components/mint-map/core/MintMapController.d.ts +1 -0
  4. package/dist/components/mint-map/core/MintMapCore.js +5 -6
  5. package/dist/components/mint-map/core/advanced/CanvasMarkerLayer/CanvasMarkerLayer.d.ts +12 -0
  6. package/dist/components/mint-map/core/advanced/CanvasMarkerLayer/CanvasMarkerLayer.js +962 -0
  7. package/dist/components/mint-map/core/advanced/CanvasMarkerLayer/index.d.ts +4 -0
  8. package/dist/components/mint-map/core/advanced/CanvasMarkerLayer/types.d.ts +280 -0
  9. package/dist/components/mint-map/core/advanced/CanvasPolygonLayer/CanvasPolygonLayer.d.ts +17 -0
  10. package/dist/components/mint-map/core/advanced/CanvasPolygonLayer/CanvasPolygonLayer.js +624 -0
  11. package/dist/components/mint-map/core/advanced/CanvasPolygonLayer/index.d.ts +4 -0
  12. package/dist/components/mint-map/core/advanced/CanvasPolygonLayer/renderer.d.ts +303 -0
  13. package/dist/components/mint-map/core/advanced/CanvasPolygonLayer/renderer.js +1091 -0
  14. package/dist/components/mint-map/core/advanced/CanvasPolygonLayer/types.d.ts +284 -0
  15. package/dist/components/mint-map/core/advanced/canvas/CanvasMarker.d.ts +7 -0
  16. package/dist/components/mint-map/core/advanced/canvas/CanvasMarkerClaude.js +7 -7
  17. package/dist/components/mint-map/core/advanced/canvas/index.d.ts +0 -1
  18. package/dist/components/mint-map/core/advanced/index.d.ts +4 -2
  19. package/dist/components/mint-map/core/advanced/shared/context.d.ts +44 -0
  20. package/dist/components/mint-map/core/advanced/shared/context.js +230 -0
  21. package/dist/components/mint-map/core/advanced/shared/helpers.d.ts +20 -0
  22. package/dist/components/mint-map/core/advanced/shared/helpers.js +41 -0
  23. package/dist/components/mint-map/core/advanced/shared/hooks.d.ts +74 -0
  24. package/dist/components/mint-map/core/advanced/shared/hooks.js +196 -0
  25. package/dist/components/mint-map/core/advanced/{woongCanvas/shared → shared}/index.d.ts +5 -2
  26. package/dist/components/mint-map/core/advanced/shared/performance.d.ts +82 -0
  27. package/dist/components/mint-map/core/advanced/shared/performance.js +288 -0
  28. package/dist/components/mint-map/core/advanced/shared/types.d.ts +150 -0
  29. package/dist/components/mint-map/core/advanced/shared/types.js +31 -0
  30. package/dist/components/mint-map/core/advanced/shared/utils.d.ts +173 -0
  31. package/dist/components/mint-map/core/advanced/shared/utils.js +382 -0
  32. package/dist/components/mint-map/core/advanced/shared/viewport.d.ts +42 -0
  33. package/dist/components/mint-map/core/advanced/shared/viewport.js +52 -0
  34. package/dist/components/mint-map/core/wrapper/MapMarkerWrapper.js +22 -1
  35. package/dist/components/mint-map/google/GoogleMintMapController.d.ts +1 -0
  36. package/dist/components/mint-map/google/GoogleMintMapController.js +13 -8
  37. package/dist/components/mint-map/kakao/KakaoMintMapController.d.ts +1 -0
  38. package/dist/components/mint-map/kakao/KakaoMintMapController.js +13 -8
  39. package/dist/components/mint-map/naver/NaverMintMapController.d.ts +3 -0
  40. package/dist/components/mint-map/naver/NaverMintMapController.js +46 -11
  41. package/dist/index.es.js +5605 -4056
  42. package/dist/index.js +47 -27
  43. package/dist/index.umd.js +5621 -4059
  44. package/package.json +1 -1
  45. package/CLAUDE.md +0 -100
  46. package/dist/components/mint-map/core/advanced/canvas/CanvasMarkerHanquf.d.ts +0 -22
  47. package/dist/components/mint-map/core/advanced/canvas/CanvasMarkerHanquf.js +0 -413
  48. package/dist/components/mint-map/core/advanced/woongCanvas/ClusterMarker.d.ts +0 -11
  49. package/dist/components/mint-map/core/advanced/woongCanvas/WoongKonvaMarker.d.ts +0 -53
  50. package/dist/components/mint-map/core/advanced/woongCanvas/WoongKonvaMarker.js +0 -1123
  51. package/dist/components/mint-map/core/advanced/woongCanvas/index.d.ts +0 -3
  52. package/dist/components/mint-map/core/advanced/woongCanvas/shared/context.d.ts +0 -31
  53. package/dist/components/mint-map/core/advanced/woongCanvas/shared/context.js +0 -164
  54. package/dist/components/mint-map/core/advanced/woongCanvas/shared/performance.d.ts +0 -161
  55. package/dist/components/mint-map/core/advanced/woongCanvas/shared/performance.js +0 -343
  56. package/dist/components/mint-map/core/advanced/woongCanvas/shared/types.d.ts +0 -131
  57. package/dist/components/mint-map/core/advanced/woongCanvas/shared/types.js +0 -14
  58. package/dist/components/mint-map/core/advanced/woongCanvas/shared/utils.d.ts +0 -31
  59. package/dist/components/mint-map/core/advanced/woongCanvas/shared/utils.js +0 -164
  60. package/dist/components/mint-map/core/util/geohash.js +0 -125
@@ -0,0 +1,150 @@
1
+ import Konva from 'konva';
2
+ import { Offset, Position } from '../../../types';
3
+ /**
4
+ * 캔버스 데이터 타입 Enum
5
+ */
6
+ export declare enum CanvasDataType {
7
+ MARKER = "MARKER",
8
+ POLYGON = "POLYGON"
9
+ }
10
+ /**
11
+ * 폴리곤 경로 정의 (GeoJSON MultiPolygon 형식)
12
+ */
13
+ export interface Paths {
14
+ type: string;
15
+ coordinates: number[][][][];
16
+ }
17
+ /**
18
+ * 마커 바운딩 박스 좌표 (위도/경도)
19
+ */
20
+ export interface MarkerBoundingBox {
21
+ /** 왼쪽 상단 좌표 */
22
+ leftTop: Position;
23
+ /** 우측 하단 좌표 */
24
+ bottomRight: Position;
25
+ }
26
+ /**
27
+ * 캔버스 마커/폴리곤의 기본 필수 속성
28
+ */
29
+ export interface CanvasOption {
30
+ id: string;
31
+ position: Position;
32
+ boxWidth?: number;
33
+ boxHeight?: number;
34
+ tailHeight?: number;
35
+ paths?: Paths;
36
+ isDonutPolygon?: boolean;
37
+ /** 렌더링 오프셋 X (픽셀 단위, 기본값: 0) */
38
+ offsetX?: number;
39
+ /** 렌더링 오프셋 Y (픽셀 단위, 기본값: 0) */
40
+ offsetY?: number;
41
+ /** 마커 바운딩 박스 좌표 (onMouseOver 이벤트에서만 제공됨) */
42
+ boundingBox?: MarkerBoundingBox;
43
+ }
44
+ /**
45
+ * 서버 데이터와 캔버스 옵션을 결합한 타입
46
+ *
47
+ * @template T 서버에서 받은 원본 데이터 타입
48
+ *
49
+ * @remarks
50
+ * 서버 데이터의 필드가 CanvasOption과 충돌하는 경우 (예: id, position 등),
51
+ * 변환 시 명시적으로 매핑해야 합니다. createCanvasData 헬퍼 함수를 사용하세요.
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * // 서버 데이터에 id가 number 타입인 경우
56
+ * interface ServerData {
57
+ * id: number;
58
+ * name: string;
59
+ * }
60
+ *
61
+ * // ❌ 잘못된 사용 (타입 에러 발생)
62
+ * const data: CanvasData<ServerData> = {
63
+ * ...serverData,
64
+ * id: String(serverData.id), // 명시적 변환 필요
65
+ * position: new Position(lat, lng)
66
+ * };
67
+ *
68
+ * // ✅ 올바른 사용 (헬퍼 함수 사용)
69
+ * const data = createCanvasData(serverData, {
70
+ * id: String(serverData.id),
71
+ * position: new Position(lat, lng)
72
+ * });
73
+ * ```
74
+ */
75
+ export declare type CanvasData<T = {}> = T & CanvasOption;
76
+ /**
77
+ * 서버 데이터를 CanvasData로 변환하는 헬퍼 함수들
78
+ *
79
+ * @see createCanvasData, createCanvasDataArray in ./utils.ts
80
+ */
81
+ export { createCanvasData, createCanvasDataArray } from './utils';
82
+ /**
83
+ * 렌더링 유틸리티 함수들 (좌표 변환)
84
+ *
85
+ * @template T 마커/폴리곤 데이터의 추가 속성 타입
86
+ */
87
+ export interface RenderUtils<T> {
88
+ getOrComputePolygonOffsets: (polygonData: CanvasData<T>) => number[][][][] | null;
89
+ getOrComputeMarkerOffset: (markerData: CanvasData<T>) => Offset | null;
90
+ }
91
+ /**
92
+ * 커스텀 렌더링 함수 파라미터 - Base Layer
93
+ */
94
+ export interface RenderBaseParams<T> {
95
+ ctx: CanvasRenderingContext2D;
96
+ items: CanvasData<T>[];
97
+ selectedIds: Set<string>;
98
+ hoveredItem?: CanvasData<T> | null;
99
+ selectedItem?: CanvasData<T> | null;
100
+ utils: RenderUtils<T>;
101
+ }
102
+ /**
103
+ * 커스텀 렌더링 함수 타입 - Base Layer
104
+ *
105
+ * @template T 마커/폴리곤 데이터의 추가 속성 타입
106
+ */
107
+ export declare type CustomRenderBase<T> = (params: RenderBaseParams<T>) => void;
108
+ /**
109
+ * 커스텀 렌더링 함수 파라미터 - Animation Layer
110
+ */
111
+ export interface RenderAnimationParams<T> {
112
+ layer: Konva.Layer;
113
+ selectedIds: Set<string>;
114
+ items: CanvasData<T>[];
115
+ utils: RenderUtils<T>;
116
+ }
117
+ /**
118
+ * 커스텀 렌더링 함수 타입 - Animation Layer (선택)
119
+ *
120
+ * @template T 마커/폴리곤 데이터의 추가 속성 타입
121
+ */
122
+ export declare type CustomRenderAnimation<T> = (params: RenderAnimationParams<T>) => void;
123
+ /**
124
+ * 렌더링 소스 Enum
125
+ */
126
+ export declare enum RenderSource {
127
+ BASE = "BASE",
128
+ EVENT = "EVENT",
129
+ TOP = "TOP"
130
+ }
131
+ /**
132
+ * 커스텀 렌더링 함수 파라미터 - Event Layer
133
+ */
134
+ export interface RenderEventParams<T> {
135
+ ctx: CanvasRenderingContext2D;
136
+ /** topStageZIndex가 설정되어 있는지 여부 */
137
+ hasTopStage: boolean;
138
+ hoveredItem: CanvasData<T> | null;
139
+ /** 렌더링 소스 (BASE, EVENT, TOP) */
140
+ renderSource: RenderSource;
141
+ selectedItems?: CanvasData<T>[];
142
+ selectedItem?: CanvasData<T> | null;
143
+ utils: RenderUtils<T>;
144
+ }
145
+ /**
146
+ * 커스텀 렌더링 함수 타입 - Event Layer
147
+ *
148
+ * @template T 마커/폴리곤 데이터의 추가 속성 타입
149
+ */
150
+ export declare type CustomRenderEvent<T> = (params: RenderEventParams<T>) => void;
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var utils = require('./utils.js');
6
+
7
+ /**
8
+ * 캔버스 데이터 타입 Enum
9
+ */
10
+ // eslint-disable-next-line no-shadow
11
+ exports.CanvasDataType = void 0;
12
+
13
+ (function (CanvasDataType) {
14
+ CanvasDataType["MARKER"] = "MARKER";
15
+ CanvasDataType["POLYGON"] = "POLYGON";
16
+ })(exports.CanvasDataType || (exports.CanvasDataType = {}));
17
+ /**
18
+ * 렌더링 소스 Enum
19
+ */
20
+ // eslint-disable-next-line no-shadow
21
+
22
+ exports.RenderSource = void 0;
23
+
24
+ (function (RenderSource) {
25
+ RenderSource["BASE"] = "BASE";
26
+ RenderSource["EVENT"] = "EVENT";
27
+ RenderSource["TOP"] = "TOP";
28
+ })(exports.RenderSource || (exports.RenderSource = {}));
29
+
30
+ exports.createCanvasData = utils.createCanvasData;
31
+ exports.createCanvasDataArray = utils.createCanvasDataArray;
@@ -0,0 +1,173 @@
1
+ import type { MarkerBoundingBox } from './types';
2
+ import { CanvasData, CanvasOption } from './types';
3
+ import { Offset } from '../../../types';
4
+ import { MintMapController } from '../../MintMapController';
5
+ /**
6
+ * 폴리곤 좌표 변환 (위경도 → 화면 좌표)
7
+ *
8
+ * @param polygonData 폴리곤 데이터
9
+ * @param controller MintMapController 인스턴스
10
+ * @returns 변환된 화면 좌표 배열 (4차원 배열) 또는 null
11
+ */
12
+ export declare const computePolygonOffsets: (polygonData: CanvasData<any>, controller: MintMapController) => number[][][][] | null;
13
+ /**
14
+ * 마커 좌표 변환 (위경도 → 화면 좌표)
15
+ *
16
+ * @param markerData 마커 데이터
17
+ * @param controller MintMapController 인스턴스
18
+ * @returns 변환된 화면 좌표 또는 null
19
+ */
20
+ export declare const computeMarkerOffset: (markerData: CanvasData<any>, controller: MintMapController) => Offset | null;
21
+ /**
22
+ * Point-in-Polygon 알고리즘 (Ray Casting)
23
+ *
24
+ * @param point 확인할 점의 좌표
25
+ * @param polygon 폴리곤 좌표 배열
26
+ * @returns 점이 폴리곤 내부에 있으면 true
27
+ */
28
+ export declare const isPointInPolygon: (point: Offset, polygon: number[][]) => boolean;
29
+ /**
30
+ * 폴리곤 히트 테스트 (도넛 폴리곤 지원)
31
+ *
32
+ * @param clickedOffset 클릭/마우스 위치 좌표
33
+ * @param polygonData 폴리곤 데이터
34
+ * @param getPolygonOffsets 폴리곤 좌표 변환 함수
35
+ * @returns 점이 폴리곤 내부에 있으면 true
36
+ */
37
+ export declare const isPointInPolygonData: (clickedOffset: Offset, polygonData: CanvasData<any>, getPolygonOffsets: (data: CanvasData<any>) => number[][][][] | null) => boolean;
38
+ /**
39
+ * 마커 히트 테스트 (꼬리 제외, 오프셋 지원)
40
+ *
41
+ * @param clickedOffset 클릭/마우스 위치 좌표
42
+ * @param markerData 마커 데이터
43
+ * @param getMarkerOffset 마커 좌표 변환 함수
44
+ * @returns 점이 마커 영역 내부에 있으면 true
45
+ */
46
+ export declare const isPointInMarkerData: (clickedOffset: Offset, markerData: CanvasData<any>, getMarkerOffset: (data: CanvasData<any>) => Offset | null) => boolean;
47
+ export declare const hexToRgba: (hexColor: string, alpha?: number) => string;
48
+ /**
49
+ * 텍스트 박스 너비 계산
50
+ *
51
+ * @param params 파라미터 객체
52
+ * @param params.text 측정할 텍스트
53
+ * @param params.fontConfig 폰트 설정
54
+ * @param params.padding 패딩 값 (px)
55
+ * @param params.minWidth 최소 너비 (px)
56
+ * @returns 계산된 텍스트 박스 너비 (px)
57
+ */
58
+ export declare const calculateTextBoxWidth: ({ fontConfig, minWidth, padding, text }: {
59
+ fontConfig: string;
60
+ minWidth: number;
61
+ padding: number;
62
+ text: string;
63
+ }) => number;
64
+ /**
65
+ * 서버 데이터를 CanvasData로 변환하는 헬퍼 함수
66
+ *
67
+ * 서버 데이터의 필드가 CanvasOption과 충돌하는 경우 (예: id, position 등),
68
+ * 이 함수를 사용하여 명시적으로 매핑할 수 있습니다.
69
+ *
70
+ * @template T 서버에서 받은 원본 데이터 타입
71
+ * @param serverData 서버에서 받은 원본 데이터
72
+ * @param canvasOptions CanvasOption 필드들 (충돌하는 필드는 여기서 명시적으로 지정)
73
+ * @returns CanvasData<T> 타입의 데이터
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * interface ServerData {
78
+ * id: number; // CanvasOption의 id와 충돌
79
+ * name: string;
80
+ * }
81
+ *
82
+ * const serverData: ServerData = { id: 123, name: "Test" };
83
+ *
84
+ * // ✅ 올바른 사용
85
+ * const canvasData = createCanvasData(serverData, {
86
+ * id: String(serverData.id), // 명시적으로 변환
87
+ * position: new Position(37.5, 127.0)
88
+ * });
89
+ *
90
+ * // canvasData는 CanvasData<ServerData> 타입이며:
91
+ * // - id: string (CanvasOption의 id)
92
+ * // - name: string (서버 데이터의 name)
93
+ * // - position: Position (CanvasOption의 position)
94
+ * ```
95
+ */
96
+ export declare function createCanvasData<T extends Record<string, any>>(serverData: T, canvasOptions: CanvasOption): CanvasData<T>;
97
+ /**
98
+ * 서버 데이터 배열을 CanvasData 배열로 변환하는 헬퍼 함수
99
+ *
100
+ * 서버 데이터 배열의 각 항목을 CanvasData로 변환합니다.
101
+ * 각 항목마다 다른 CanvasOption을 적용할 수 있습니다.
102
+ *
103
+ * @template T 서버에서 받은 원본 데이터 타입
104
+ * @param serverDataArray 서버에서 받은 원본 데이터 배열
105
+ * @param getCanvasOptions 각 항목에 대해 CanvasOption을 생성하는 함수
106
+ * @returns CanvasData<T>[] 타입의 데이터 배열
107
+ *
108
+ * @example
109
+ * ```typescript
110
+ * interface ServerData {
111
+ * id: number; // CanvasOption의 id와 충돌
112
+ * name: string;
113
+ * lat: number;
114
+ * lng: number;
115
+ * }
116
+ *
117
+ * const serverDataArray: ServerData[] = [
118
+ * { id: 1, name: "Item 1", lat: 37.5, lng: 127.0 },
119
+ * { id: 2, name: "Item 2", lat: 37.6, lng: 127.1 }
120
+ * ];
121
+ *
122
+ * // ✅ 올바른 사용
123
+ * const canvasDataArray = createCanvasDataArray(serverDataArray, (item, index) => ({
124
+ * id: String(item.id), // 각 항목마다 명시적으로 변환
125
+ * position: new Position(item.lat, item.lng)
126
+ * }));
127
+ *
128
+ * // canvasDataArray는 CanvasData<ServerData>[] 타입입니다
129
+ * ```
130
+ */
131
+ export declare function createCanvasDataArray<T extends Record<string, any>>(serverDataArray: T[], getCanvasOptions: (serverData: T, index: number) => CanvasOption): CanvasData<T>[];
132
+ /**
133
+ * 마커 바운딩 박스 좌표 계산 (위도/경도)
134
+ *
135
+ * 마커의 중심 좌표와 크기를 기반으로 현재 뷰포트에서의 바운딩 박스 좌표를 계산합니다.
136
+ *
137
+ * @param params 계산 파라미터
138
+ * @param params.lat 마커의 중심 위도
139
+ * @param params.lng 마커의 중심 경도
140
+ * @param params.width 마커의 너비 (픽셀 단위, boxWidth)
141
+ * @param params.height 마커의 높이 (픽셀 단위, boxHeight)
142
+ * @param params.controller MintMapController 인스턴스 (뷰포트 상태를 알기 위해 필요)
143
+ * @param params.tailHeight 마커 꼬리 높이 (픽셀 단위, 기본값: 0)
144
+ * @param params.offsetX 마커 오프셋 X (픽셀 단위, 기본값: 0)
145
+ * @param params.offsetY 마커 오프셋 Y (픽셀 단위, 기본값: 0)
146
+ * @returns 마커 바운딩 박스 좌표 (위도/경도) 또는 null
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * const boundingBox = calculateMarkerBoundingBox({
151
+ * lat: 37.5665,
152
+ * lng: 126.9780,
153
+ * width: 100,
154
+ * height: 50,
155
+ * controller: mintMapController
156
+ * });
157
+ *
158
+ * if (boundingBox) {
159
+ * console.log('왼쪽 상단:', boundingBox.leftTop);
160
+ * console.log('우측 하단:', boundingBox.bottomRight);
161
+ * }
162
+ * ```
163
+ */
164
+ export declare const calculateMarkerBoundingBox: (params: {
165
+ lat: number;
166
+ lng: number;
167
+ width: number;
168
+ height: number;
169
+ controller: MintMapController;
170
+ tailHeight?: number;
171
+ offsetX?: number;
172
+ offsetY?: number;
173
+ }) => MarkerBoundingBox | null;