@mint-ui/map 1.2.0-test.1 → 1.2.0-test.11

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 (29) hide show
  1. package/README.md +7 -7
  2. package/dist/components/mint-map/core/MintMapController.d.ts +1 -0
  3. package/dist/components/mint-map/core/MintMapCore.js +2 -0
  4. package/dist/components/mint-map/core/advanced/index.d.ts +1 -0
  5. package/dist/components/mint-map/core/advanced/woongCanvas/WoongCanvasLayer.d.ts +93 -0
  6. package/dist/components/mint-map/core/advanced/woongCanvas/WoongCanvasLayer.js +1138 -0
  7. package/dist/components/mint-map/core/advanced/woongCanvas/index.d.ts +3 -0
  8. package/dist/components/mint-map/core/advanced/woongCanvas/shared/context.d.ts +8 -7
  9. package/dist/components/mint-map/core/advanced/woongCanvas/shared/context.js +11 -2
  10. package/dist/components/mint-map/core/advanced/woongCanvas/shared/performance.js +343 -0
  11. package/dist/components/mint-map/core/advanced/woongCanvas/shared/renderer.d.ts +59 -0
  12. package/dist/components/mint-map/core/advanced/woongCanvas/shared/renderer.js +226 -0
  13. package/dist/components/mint-map/core/advanced/woongCanvas/shared/types.d.ts +21 -11
  14. package/dist/components/mint-map/core/advanced/woongCanvas/shared/types.js +14 -0
  15. package/dist/components/mint-map/core/advanced/woongCanvas/shared/utils.d.ts +15 -6
  16. package/dist/components/mint-map/core/advanced/woongCanvas/shared/utils.js +182 -0
  17. package/dist/components/mint-map/core/wrapper/MapMarkerWrapper.js +22 -1
  18. package/dist/components/mint-map/google/GoogleMintMapController.d.ts +1 -0
  19. package/dist/components/mint-map/google/GoogleMintMapController.js +8 -0
  20. package/dist/components/mint-map/kakao/KakaoMintMapController.d.ts +1 -0
  21. package/dist/components/mint-map/kakao/KakaoMintMapController.js +8 -0
  22. package/dist/components/mint-map/naver/NaverMintMapController.d.ts +3 -0
  23. package/dist/components/mint-map/naver/NaverMintMapController.js +41 -3
  24. package/dist/index.es.js +1925 -14
  25. package/dist/index.js +23 -0
  26. package/dist/index.umd.js +1942 -17
  27. package/package.json +1 -1
  28. package/.claude/settings.local.json +0 -16
  29. package/dist/components/mint-map/core/advanced/woongCanvas/WoongKonvaMarker.d.ts +0 -48
@@ -1,5 +1,13 @@
1
1
  import Konva from "konva";
2
2
  import { Position, Offset } from "../../../../types";
3
+ /**
4
+ * 캔버스 데이터 타입 Enum
5
+ * 마커인지 폴리곤인지 구분하는 상수
6
+ */
7
+ export declare enum CanvasDataType {
8
+ MARKER = "MARKER",
9
+ POLYGON = "POLYGON"
10
+ }
3
11
  /**
4
12
  * 폴리곤 경로 정의
5
13
  */
@@ -11,12 +19,12 @@ export interface Paths {
11
19
  * 캔버스 마커/폴리곤 기본 옵션
12
20
  */
13
21
  /**
14
- * 캔버스 마커/폴리곤의 기본 필수 속성
22
+ * Konva 캔버스 마커/폴리곤의 기본 필수 속성
15
23
  * (렌더링에 필요한 최소 정보)
16
24
  */
17
- export interface CanvasMarkerOption {
25
+ export interface KonvaCanvasMarkerOption {
18
26
  id: string;
19
- position: Position[];
27
+ position: Position;
20
28
  boxWidth?: number;
21
29
  boxHeight?: number;
22
30
  paths?: Paths;
@@ -27,16 +35,16 @@ export interface CanvasMarkerOption {
27
35
  * @template T 서버에서 받은 원본 데이터 타입 (예: Marker, Polygon)
28
36
  * @example
29
37
  * // API에서 받은 Marker 타입을 그대로 유지하면서 캔버스 렌더링 정보 추가
30
- * type MarkerWithCanvas = CanvasMarkerData<Marker>
38
+ * type MarkerWithCanvas = KonvaCanvasMarkerData<Marker>
31
39
  * // { raId, lat, lng, buildingName, totalArea } + { id, position, boxWidth, ... }
32
40
  */
33
- export declare type CanvasMarkerData<T = {}> = T & CanvasMarkerOption;
41
+ export declare type KonvaCanvasMarkerData<T = {}> = T & KonvaCanvasMarkerOption;
34
42
  /**
35
43
  * 렌더링 유틸리티 함수들
36
44
  */
37
45
  export interface RenderUtils<T> {
38
- getOrComputePolygonOffsets: (polygonData: CanvasMarkerData<T>) => number[][][][] | null;
39
- getOrComputeMarkerOffset: (markerData: CanvasMarkerData<T>) => Offset | null;
46
+ getOrComputePolygonOffsets: (polygonData: KonvaCanvasMarkerData<T>) => number[][][][] | null;
47
+ getOrComputeMarkerOffset: (markerData: KonvaCanvasMarkerData<T>) => Offset | null;
40
48
  }
41
49
  /**
42
50
  * 커스텀 렌더링 함수 파라미터 - Base Layer
@@ -45,7 +53,7 @@ export interface RenderBaseParams<T> {
45
53
  /** Canvas 2D 렌더링 컨텍스트 (순수 Canvas API) */
46
54
  ctx: CanvasRenderingContext2D;
47
55
  /** 렌더링할 마커 데이터 배열 */
48
- items: CanvasMarkerData<T>[];
56
+ items: KonvaCanvasMarkerData<T>[];
49
57
  /** 현재 선택된 마커 ID Set */
50
58
  selectedIds: Set<string>;
51
59
  /** 렌더링 유틸리티 함수들 */
@@ -75,7 +83,7 @@ export interface RenderAnimationParams<T> {
75
83
  /** 현재 선택된 마커 ID Set */
76
84
  selectedIds: Set<string>;
77
85
  /** 전체 마커 데이터 배열 */
78
- items: CanvasMarkerData<T>[];
86
+ items: KonvaCanvasMarkerData<T>[];
79
87
  /** 렌더링 유틸리티 함수들 */
80
88
  utils: RenderUtils<T>;
81
89
  }
@@ -98,11 +106,13 @@ export interface RenderEventParams<T> {
98
106
  /** Canvas 2D 렌더링 컨텍스트 (순수 Canvas API) */
99
107
  ctx: CanvasRenderingContext2D;
100
108
  /** 현재 hover된 마커 데이터 */
101
- hoveredItem: CanvasMarkerData<T> | null;
109
+ hoveredItem: KonvaCanvasMarkerData<T> | null;
102
110
  /** 렌더링 유틸리티 함수들 */
103
111
  utils: RenderUtils<T>;
104
112
  /** 현재 선택된 마커 데이터 배열 (선택 강조용) */
105
- selectedItems?: CanvasMarkerData<T>[];
113
+ selectedItems?: KonvaCanvasMarkerData<T>[];
114
+ /** 외부에서 전달된 단일 선택 아이템 (특별한 효과용) */
115
+ selectedItem?: KonvaCanvasMarkerData<T> | null;
106
116
  }
107
117
  /**
108
118
  * 커스텀 렌더링 함수 타입 - Event Layer
@@ -0,0 +1,14 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ /**
6
+ * 캔버스 데이터 타입 Enum
7
+ * 마커인지 폴리곤인지 구분하는 상수
8
+ */
9
+ exports.CanvasDataType = void 0;
10
+
11
+ (function (CanvasDataType) {
12
+ CanvasDataType["MARKER"] = "MARKER";
13
+ CanvasDataType["POLYGON"] = "POLYGON";
14
+ })(exports.CanvasDataType || (exports.CanvasDataType = {}));
@@ -1,23 +1,32 @@
1
1
  import { Offset } from "../../../../types";
2
2
  import { MintMapController } from "../../../MintMapController";
3
- import { CanvasMarkerData } from "./types";
3
+ import { KonvaCanvasMarkerData } from "./types";
4
4
  /**
5
5
  * 폴리곤 offset 계산
6
6
  */
7
- export declare const computePolygonOffsets: (polygonData: CanvasMarkerData<any>, controller: MintMapController) => number[][][][] | null;
7
+ export declare const computePolygonOffsets: (polygonData: KonvaCanvasMarkerData<any>, controller: MintMapController) => number[][][][] | null;
8
8
  /**
9
9
  * 마커 offset 계산
10
10
  */
11
- export declare const computeMarkerOffset: (markerData: CanvasMarkerData<any>, controller: MintMapController) => Offset | null;
11
+ export declare const computeMarkerOffset: (markerData: KonvaCanvasMarkerData<any>, controller: MintMapController) => Offset | null;
12
12
  /**
13
13
  * Point-in-Polygon 알고리즘
14
14
  */
15
15
  export declare const isPointInPolygon: (point: Offset, polygon: number[][]) => boolean;
16
16
  /**
17
- * 폴리곤 히트 테스트
17
+ * 폴리곤 히트 테스트 (도넛 폴리곤 지원)
18
+ *
19
+ * 로직:
20
+ * 1. 외부 폴리곤(첫 번째): 내부에 있어야 함
21
+ * 2. 내부 구멍들(나머지): 내부에 있으면 안 됨 (evenodd 규칙)
22
+ *
23
+ * 중요: 도넛 폴리곤과 내부 폴리곤은 별개의 polygonData로 처리됨
24
+ * - 도넛 폴리곤 A: isDonutPolygon=true
25
+ * - 내부 폴리곤 B: isDonutPolygon=false (별도 데이터)
18
26
  */
19
- export declare const isPointInPolygonData: (clickedOffset: Offset, polygonData: CanvasMarkerData<any>, getPolygonOffsets: (data: CanvasMarkerData<any>) => number[][][][] | null) => boolean;
27
+ export declare const isPointInPolygonData: (clickedOffset: Offset, polygonData: KonvaCanvasMarkerData<any>, getPolygonOffsets: (data: KonvaCanvasMarkerData<any>) => number[][][][] | null) => boolean;
20
28
  /**
21
29
  * 마커 히트 테스트
22
30
  */
23
- export declare const isPointInMarkerData: (clickedOffset: Offset, markerData: CanvasMarkerData<any>, getMarkerOffset: (data: CanvasMarkerData<any>) => Offset | null) => boolean;
31
+ export declare const isPointInMarkerData: (clickedOffset: Offset, markerData: KonvaCanvasMarkerData<any>, getMarkerOffset: (data: KonvaCanvasMarkerData<any>) => Offset | null) => boolean;
32
+ export declare const hexToRgba: (hexColor: string, alpha?: number) => string;
@@ -0,0 +1,182 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ require('../../../../types/MapDrawables.js');
6
+ var MapTypes = require('../../../../types/MapTypes.js');
7
+ require('../../../../types/MapEventTypes.js');
8
+
9
+ /**
10
+ * 폴리곤 offset 계산
11
+ */
12
+
13
+ var computePolygonOffsets = function (polygonData, controller) {
14
+ var paths = polygonData.paths;
15
+
16
+ if (!paths || paths.type !== 'MultiPolygon' || !paths.coordinates) {
17
+ return null;
18
+ }
19
+
20
+ var result = [];
21
+
22
+ for (var _i = 0, _a = paths.coordinates; _i < _a.length; _i++) {
23
+ var multiPolygon = _a[_i];
24
+ var multiPolygonOffsets = [];
25
+
26
+ for (var _b = 0, multiPolygon_1 = multiPolygon; _b < multiPolygon_1.length; _b++) {
27
+ var polygonGroup = multiPolygon_1[_b];
28
+ var polygonOffsets = [];
29
+
30
+ for (var _c = 0, polygonGroup_1 = polygonGroup; _c < polygonGroup_1.length; _c++) {
31
+ var coord = polygonGroup_1[_c];
32
+ var pos = new MapTypes.Position(coord[1], coord[0]);
33
+ var offset = controller.positionToOffset(pos);
34
+ polygonOffsets.push([offset.x, offset.y]);
35
+ }
36
+
37
+ multiPolygonOffsets.push(polygonOffsets);
38
+ }
39
+
40
+ result.push(multiPolygonOffsets);
41
+ }
42
+
43
+ return result;
44
+ };
45
+ /**
46
+ * 마커 offset 계산
47
+ */
48
+
49
+ var computeMarkerOffset = function (markerData, controller) {
50
+ if (!markerData.position) {
51
+ return null;
52
+ }
53
+
54
+ return controller.positionToOffset(markerData.position);
55
+ };
56
+ /**
57
+ * Point-in-Polygon 알고리즘
58
+ */
59
+
60
+ var isPointInPolygon = function (point, polygon) {
61
+ var inside = false;
62
+
63
+ for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
64
+ var xi = polygon[i][0],
65
+ yi = polygon[i][1];
66
+ var xj = polygon[j][0],
67
+ yj = polygon[j][1];
68
+ var intersect = yi > point.y !== yj > point.y && point.x < (xj - xi) * (point.y - yi) / (yj - yi) + xi;
69
+ if (intersect) inside = !inside;
70
+ }
71
+
72
+ return inside;
73
+ };
74
+ /**
75
+ * 폴리곤 히트 테스트 (도넛 폴리곤 지원)
76
+ *
77
+ * 로직:
78
+ * 1. 외부 폴리곤(첫 번째): 내부에 있어야 함
79
+ * 2. 내부 구멍들(나머지): 내부에 있으면 안 됨 (evenodd 규칙)
80
+ *
81
+ * 중요: 도넛 폴리곤과 내부 폴리곤은 별개의 polygonData로 처리됨
82
+ * - 도넛 폴리곤 A: isDonutPolygon=true
83
+ * - 내부 폴리곤 B: isDonutPolygon=false (별도 데이터)
84
+ */
85
+
86
+ var isPointInPolygonData = function (clickedOffset, polygonData, getPolygonOffsets) {
87
+ var polygonOffsets = getPolygonOffsets(polygonData);
88
+ if (!polygonOffsets) return false; // 🍩 도넛 폴리곤 처리 (isDonutPolygon === true)
89
+
90
+ if (polygonData.isDonutPolygon) {
91
+ for (var _i = 0, polygonOffsets_1 = polygonOffsets; _i < polygonOffsets_1.length; _i++) {
92
+ var multiPolygon = polygonOffsets_1[_i];
93
+ if (multiPolygon.length === 0) continue; // 외부 폴리곤만 있는 경우 (구멍 없음) - 일반 폴리곤처럼 처리
94
+
95
+ if (multiPolygon.length === 1) {
96
+ if (isPointInPolygon(clickedOffset, multiPolygon[0])) {
97
+ return true;
98
+ }
99
+
100
+ continue;
101
+ } // 1. 외부 폴리곤(첫 번째)에 포함되는지 확인
102
+
103
+
104
+ var outerPolygon = multiPolygon[0];
105
+
106
+ if (!isPointInPolygon(clickedOffset, outerPolygon)) {
107
+ continue; // 외부 폴리곤 밖이면 다음 multiPolygon 확인
108
+ } // 2. 내부 구멍들(나머지)에 포함되는지 확인
109
+
110
+
111
+ for (var i = 1; i < multiPolygon.length; i++) {
112
+ var hole = multiPolygon[i];
113
+
114
+ if (isPointInPolygon(clickedOffset, hole)) {
115
+ // ❌ 구멍 안에 있음 → 이 도넛 폴리곤은 히트 안 됨
116
+ // 다른 multiPolygon 체크하지 않고 바로 false 반환
117
+ // (도넛 폴리곤의 구멍 안은 무조건 클릭 불가)
118
+ return false;
119
+ }
120
+ } // ✅ 외부 폴리곤 안 + 구멍 밖 = 히트!
121
+
122
+
123
+ return true;
124
+ }
125
+
126
+ return false;
127
+ } // 일반 폴리곤 처리 (isDonutPolygon === false 또는 undefined)
128
+
129
+
130
+ for (var _a = 0, polygonOffsets_2 = polygonOffsets; _a < polygonOffsets_2.length; _a++) {
131
+ var multiPolygon = polygonOffsets_2[_a];
132
+
133
+ for (var _b = 0, multiPolygon_2 = multiPolygon; _b < multiPolygon_2.length; _b++) {
134
+ var polygonGroup = multiPolygon_2[_b];
135
+ if (polygonGroup.length === 0) continue;
136
+
137
+ if (isPointInPolygon(clickedOffset, polygonGroup)) {
138
+ return true;
139
+ }
140
+ }
141
+ }
142
+
143
+ return false;
144
+ };
145
+ /**
146
+ * 마커 히트 테스트
147
+ */
148
+
149
+ var isPointInMarkerData = function (clickedOffset, markerData, getMarkerOffset) {
150
+ var markerOffset = getMarkerOffset(markerData);
151
+ if (!markerOffset) return false;
152
+ var boxWidth = markerData.boxWidth || 50;
153
+ var boxHeight = markerData.boxHeight || 28;
154
+ var tailHeight = 6;
155
+ var x = markerOffset.x - boxWidth / 2;
156
+ var y = markerOffset.y - boxHeight - tailHeight;
157
+ return clickedOffset.x >= x && clickedOffset.x <= x + boxWidth && clickedOffset.y >= y && clickedOffset.y <= y + boxHeight;
158
+ };
159
+ var hexToRgba = function (hexColor, alpha) {
160
+ if (alpha === void 0) {
161
+ alpha = 1;
162
+ } // NOTE: 입력된 hexColor에서 "#" 제거
163
+
164
+
165
+ var hex = hexColor.replace('#', ''); // NOTE: 6자리일 경우 알파 값은 사용자가 제공한 alpha 값으로 설정
166
+
167
+ if (hex.length === 6) {
168
+ var r = parseInt(hex.substring(0, 2), 16);
169
+ var g = parseInt(hex.substring(2, 4), 16);
170
+ var b = parseInt(hex.substring(4, 6), 16);
171
+ return "rgba(".concat(r, ", ").concat(g, ", ").concat(b, ", ").concat(alpha, ")");
172
+ }
173
+
174
+ throw new Error('Invalid hex color format');
175
+ };
176
+
177
+ exports.computeMarkerOffset = computeMarkerOffset;
178
+ exports.computePolygonOffsets = computePolygonOffsets;
179
+ exports.hexToRgba = hexToRgba;
180
+ exports.isPointInMarkerData = isPointInMarkerData;
181
+ exports.isPointInPolygon = isPointInPolygon;
182
+ exports.isPointInPolygonData = isPointInPolygonData;
@@ -172,7 +172,7 @@ function MapMarkerWrapper(_a) {
172
172
  var onMouseOverHandler = function (e) {
173
173
  var _a;
174
174
 
175
- var marker = markerRef.current; //console.log('onMouseOverHandler', marker);
175
+ var marker = markerRef.current;
176
176
 
177
177
  if (marker) {
178
178
  var mouseOverHandler = (_a = options === null || options === void 0 ? void 0 : options.event) === null || _a === void 0 ? void 0 : _a.get('mouseover');
@@ -185,6 +185,25 @@ function MapMarkerWrapper(_a) {
185
185
 
186
186
  next && topOnHover && controller.markerToTheTop(marker);
187
187
  }
188
+ }; // 20251014 | 장한별 | mouseleave 이벤트 추가, 마우스가 마커 위에서 떠날 때 원래 zindex 를 복구하기 위함
189
+
190
+
191
+ var onMouseLeaveHandler = function (e) {
192
+ var _a;
193
+
194
+ var marker = markerRef.current;
195
+
196
+ if (marker) {
197
+ var mouseOutHandler = (_a = options === null || options === void 0 ? void 0 : options.event) === null || _a === void 0 ? void 0 : _a.get('mouseout');
198
+ var next = true;
199
+
200
+ if (mouseOutHandler) {
201
+ var hasNext = mouseOutHandler(e);
202
+ hasNext !== undefined && (next = hasNext);
203
+ }
204
+
205
+ next && topOnHover && controller.restoreMarkerZIndex(marker);
206
+ }
188
207
  }; //create object
189
208
 
190
209
 
@@ -202,10 +221,12 @@ function MapMarkerWrapper(_a) {
202
221
  }); //드래그 여부 초기화를 먼저 수행하기 위해 capture : true 처리
203
222
 
204
223
  divElement.addEventListener('mouseover', onMouseOverHandler);
224
+ divElement.addEventListener('mouseleave', onMouseLeaveHandler);
205
225
  return function () {
206
226
  divElement.removeEventListener('click', onClickHandler);
207
227
  divElement.removeEventListener('mousedown', onMousedownHandler);
208
228
  divElement.removeEventListener('mouseover', onMouseOverHandler);
229
+ divElement.removeEventListener('mouseleave', onMouseLeaveHandler);
209
230
 
210
231
  if (markerRef.current) {
211
232
  controller.clearDrawable(markerRef.current);
@@ -28,6 +28,7 @@ export declare class GoogleMintMapController extends MintMapController {
28
28
  private getMaxZIndex;
29
29
  setMarkerZIndex(marker: Marker, zIndex: number): void;
30
30
  markerToTheTop(marker: Marker): void;
31
+ restoreMarkerZIndex(marker: Marker): void;
31
32
  clearDrawable(drawable: Drawable): boolean;
32
33
  private dragged;
33
34
  isMapDragged(): boolean;
@@ -20,6 +20,10 @@ var polygon = require('../core/util/polygon.js');
20
20
  require('../naver/NaverMintMapController.js');
21
21
  require('../core/advanced/canvas/CanvasMarkerClaude.js');
22
22
  require('../core/advanced/MapLoadingComponents.js');
23
+ require('../core/advanced/woongCanvas/WoongCanvasLayer.js');
24
+ require('../core/advanced/woongCanvas/shared/types.js');
25
+ require('../core/advanced/woongCanvas/shared/context.js');
26
+ require('../core/advanced/woongCanvas/shared/performance.js');
23
27
  require('../core/wrapper/MapControlWrapper.js');
24
28
 
25
29
  var GoogleMintMapController =
@@ -336,6 +340,10 @@ function (_super) {
336
340
  }
337
341
  };
338
342
 
343
+ GoogleMintMapController.prototype.restoreMarkerZIndex = function (marker) {// Google Maps에서는 restoreMarkerZIndex 기능을 지원하지 않습니다.
344
+ // 이 기능은 Naver Maps에서만 사용 가능합니다.
345
+ };
346
+
339
347
  GoogleMintMapController.prototype.clearDrawable = function (drawable) {
340
348
  if (drawable && drawable.native) {
341
349
  if (drawable.native instanceof google.maps.Marker || drawable.native instanceof google.maps.Polygon || drawable.native instanceof google.maps.Polyline) {
@@ -31,6 +31,7 @@ export declare class KakaoMintMapController extends MintMapController {
31
31
  private getMaxZIndex;
32
32
  setMarkerZIndex(marker: Marker, zIndex: number): void;
33
33
  markerToTheTop(marker: Marker): void;
34
+ restoreMarkerZIndex(marker: Marker): void;
34
35
  clearDrawable(drawable: Drawable): boolean;
35
36
  private dragged;
36
37
  isMapDragged(): boolean;
@@ -21,6 +21,10 @@ var polygon = require('../core/util/polygon.js');
21
21
  require('../naver/NaverMintMapController.js');
22
22
  require('../core/advanced/canvas/CanvasMarkerClaude.js');
23
23
  require('../core/advanced/MapLoadingComponents.js');
24
+ require('../core/advanced/woongCanvas/WoongCanvasLayer.js');
25
+ require('../core/advanced/woongCanvas/shared/types.js');
26
+ require('../core/advanced/woongCanvas/shared/context.js');
27
+ require('../core/advanced/woongCanvas/shared/performance.js');
24
28
  require('../core/wrapper/MapControlWrapper.js');
25
29
 
26
30
  var KakaoMintMapController =
@@ -344,6 +348,10 @@ function (_super) {
344
348
  }
345
349
  };
346
350
 
351
+ KakaoMintMapController.prototype.restoreMarkerZIndex = function (marker) {// Kakao Maps에서는 restoreMarkerZIndex 기능을 지원하지 않습니다.
352
+ // 이 기능은 Naver Maps에서만 사용 가능합니다.
353
+ };
354
+
347
355
  KakaoMintMapController.prototype.clearDrawable = function (drawable) {
348
356
  var _this = this;
349
357
 
@@ -27,9 +27,12 @@ export declare class NaverMintMapController extends MintMapController {
27
27
  createMarker(marker: Marker): void;
28
28
  updateMarker(marker: Marker, options: MarkerOptions): void;
29
29
  private markerMaxZIndex;
30
+ private markerOriginalZIndex;
30
31
  private getMaxZIndex;
32
+ private getCurrentZIndex;
31
33
  setMarkerZIndex(marker: Marker, zIndex: number): void;
32
34
  markerToTheTop(marker: Marker): void;
35
+ restoreMarkerZIndex(marker: Marker): void;
33
36
  clearDrawable(drawable: Drawable): boolean;
34
37
  private dragged;
35
38
  isMapDragged(): boolean;
@@ -20,6 +20,10 @@ require('../core/util/geo.js');
20
20
  var polygon = require('../core/util/polygon.js');
21
21
  require('../core/advanced/canvas/CanvasMarkerClaude.js');
22
22
  require('../core/advanced/MapLoadingComponents.js');
23
+ require('../core/advanced/woongCanvas/WoongCanvasLayer.js');
24
+ require('../core/advanced/woongCanvas/shared/types.js');
25
+ require('../core/advanced/woongCanvas/shared/context.js');
26
+ require('../core/advanced/woongCanvas/shared/performance.js');
23
27
  require('../core/wrapper/MapControlWrapper.js');
24
28
 
25
29
  var NaverMintMapController =
@@ -336,20 +340,54 @@ function (_super) {
336
340
  }
337
341
  };
338
342
 
339
- NaverMintMapController.prototype.setMarkerZIndex = function (marker, zIndex) {
343
+ NaverMintMapController.prototype.getCurrentZIndex = function (marker) {
340
344
  if (this.map && marker.element && marker.element instanceof HTMLElement) {
341
345
  var parent_1 = marker.element.parentElement;
342
346
 
343
- if (parent_1) {
344
- parent_1.style.zIndex = String(zIndex);
347
+ if (parent_1 && parent_1.style.zIndex) {
348
+ var zIndex = Number(parent_1.style.zIndex);
349
+ return isNaN(zIndex) ? undefined : zIndex;
350
+ }
351
+ }
352
+
353
+ return undefined;
354
+ };
355
+
356
+ NaverMintMapController.prototype.setMarkerZIndex = function (marker, zIndex) {
357
+ if (this.map && marker.element && marker.element instanceof HTMLElement) {
358
+ var parent_2 = marker.element.parentElement;
359
+
360
+ if (parent_2) {
361
+ parent_2.style.zIndex = String(zIndex);
345
362
  }
346
363
  }
347
364
  };
348
365
 
349
366
  NaverMintMapController.prototype.markerToTheTop = function (marker) {
367
+ // 이미 최상위로 올라간 상태면 (원래 zIndex가 이미 저장됨) 중복 실행 방지
368
+ if (this.markerOriginalZIndex !== undefined) {
369
+ return;
370
+ }
371
+
372
+ var currentZIndex = this.getCurrentZIndex(marker); // undefined면 null로 저장 (원래 zIndex가 없었음을 표시)
373
+
374
+ this.markerOriginalZIndex = currentZIndex !== undefined ? currentZIndex : null;
350
375
  this.setMarkerZIndex(marker, this.getMaxZIndex(1));
351
376
  };
352
377
 
378
+ NaverMintMapController.prototype.restoreMarkerZIndex = function (marker) {
379
+ if (this.markerOriginalZIndex !== undefined) {
380
+ if (this.markerOriginalZIndex === null) {
381
+ // 원래 zIndex가 없었으면 제거 (또는 초기값 0으로)
382
+ this.setMarkerZIndex(marker, 0);
383
+ } else {
384
+ this.setMarkerZIndex(marker, this.markerOriginalZIndex);
385
+ }
386
+
387
+ this.markerOriginalZIndex = undefined;
388
+ }
389
+ };
390
+
353
391
  NaverMintMapController.prototype.clearDrawable = function (drawable) {
354
392
  var _a;
355
393