@mint-ui/map 1.2.0-test.66 → 1.2.0-test.68

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.
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import type { CanvasMarkerLayerProps } from './types';
3
- export { CanvasDataType, CanvasProvider, LRUCache, SpatialHashGrid } from '../shared';
3
+ export { CanvasDataType, CanvasProvider, LRUCache, RenderSource, SpatialHashGrid } from '../shared';
4
4
  export type { CanvasData, CanvasOption, CustomRenderBase, CustomRenderEvent, MarkerBoundingBox, RenderBaseParams, RenderEventParams, RenderUtils } from '../shared';
5
5
  export type { CanvasMarkerLayerProps, CanvasMarkerLayerPropsWithEvent, CanvasMarkerLayerPropsWithEventWithoutSelection, CanvasMarkerLayerPropsWithEventWithSelectedItem, CanvasMarkerLayerPropsWithEventWithSelectedItems, CanvasMarkerLayerPropsWithEventWithTopStageWithoutSelection, CanvasMarkerLayerPropsWithEventWithTopStageWithSelectedItem, CanvasMarkerLayerPropsWithEventWithTopStageWithSelectedItems, CanvasMarkerLayerPropsWithoutEvent } from './types';
6
6
  declare const CanvasMarkerLayer: <T>(props: CanvasMarkerLayerProps<T>) => JSX.Element;
@@ -164,20 +164,12 @@ var CanvasMarkerLayer = function (props) {
164
164
  name: 'base-render-shape',
165
165
  perfectDrawEnabled: false,
166
166
  sceneFunc: function (konvaContext) {
167
- var ctx = konvaContext;
168
- var hovered = hoveredItemRef.current; // 뷰포트 컬링: 화면에 보이는 항목만 필터링
167
+ var ctx = konvaContext; // 뷰포트 컬링: 화면에 보이는 항목만 필터링
169
168
 
170
169
  var visibleItems = enableViewportCullingRef.current ? dataRef.current.filter(function (item) {
171
170
  return isInViewport(item);
172
- }) : dataRef.current; // topStageZIndex가 설정된 경우 hover된 항목은 Top Layer에서 처리
173
-
174
- if (topStageZIndex !== undefined && hovered) {
175
- visibleItems = visibleItems.filter(function (item) {
176
- return item.id !== hovered.id;
177
- });
178
- } // Base Layer는 기본 마커만 렌더링 (성능 최적화)
179
- // hover/selected는 Event Layer에서 덧그리므로 Base Layer에서는 제외
180
-
171
+ }) : dataRef.current; // Base Layer는 기본 마커만 렌더링 (hover된 항목도 포함)
172
+ // hover 스타일은 Event Layer와 Top Layer에서 덧그려짐
181
173
 
182
174
  renderBase({
183
175
  ctx: ctx,
@@ -185,8 +177,7 @@ var CanvasMarkerLayer = function (props) {
185
177
  items: visibleItems,
186
178
  selectedIds: new Set(),
187
179
  utils: renderUtils
188
- }); // topStageZIndex가 설정된 경우 hover된 항목은 Top Layer에서 처리하므로 여기서는 스킵
189
- // topStageZIndex가 없으면 성능 우선으로 Base Layer 재렌더링 안 함 (hover된 항목이 뒤편 마커 위로 올라갈 수 있음)
180
+ });
190
181
  }
191
182
  });
192
183
  layer.add(shape);
@@ -221,37 +212,20 @@ var CanvasMarkerLayer = function (props) {
221
212
  })) {
222
213
  selectedItems = tslib.__spreadArray(tslib.__spreadArray([], selectedItems, true), [selectedItemRef.current], false);
223
214
  }
224
- } // topStageZIndex가 설정된 경우 hover 항목은 Top Layer에서 처리
225
- // event 레이어에서는 hover된 항목을 완전히 제외하고 선택된 항목만 렌더링
226
-
227
-
228
- if (topStageZIndex !== undefined && hovered) {
229
- // hover된 항목을 제외한 선택된 항목들 (성능 최적화: 필요할 때만 필터링)
230
- var selectedItemsWithoutHovered = selectedItems.length > 0 ? selectedItems.filter(function (item) {
231
- return item.id !== hovered.id;
232
- }) : selectedItems; // 선택된 항목만 그리기 (hover된 항목은 Top Layer에서 처리)
233
-
234
- renderEvent({
235
- ctx: ctx,
236
- hoveredItem: null,
237
- selectedItem: selectedItemRef.current,
238
- selectedItems: selectedItemsWithoutHovered,
239
- topOnHover: true,
240
- utils: renderUtils
241
- });
242
- } else {
243
- // topStageZIndex가 없으면 hover된 항목을 selectedItems에 추가하지 않음 (성능 우선)
244
- // renderEvent 함수가 hoveredItem을 별도로 처리하므로, selectedItems는 그대로 전달
245
- // 이렇게 하면 hover 변경 시 선택된 항목들을 다시 그리지 않고 hover된 항목만 업데이트됨
246
- renderEvent({
247
- ctx: ctx,
248
- hoveredItem: hovered,
249
- selectedItem: selectedItemRef.current,
250
- selectedItems: selectedItems,
251
- topOnHover: false,
252
- utils: renderUtils
253
- });
254
- }
215
+ } // Event Layer는 hover 효과 선택 상태를 덧그림
216
+ // topStageZIndex가 있으면 hover된 항목은 Top Stage에서도 처리되지만,
217
+ // Event Layer에서도 hover 스타일을 덧그려서 Base Layer 위에 표시됨
218
+
219
+
220
+ renderEvent({
221
+ ctx: ctx,
222
+ hasTopStage: topStageZIndex !== undefined,
223
+ hoveredItem: hovered,
224
+ renderSource: types.RenderSource.EVENT,
225
+ selectedItem: selectedItemRef.current,
226
+ selectedItems: selectedItems,
227
+ utils: renderUtils
228
+ });
255
229
  }
256
230
  });
257
231
  layer.add(shape);
@@ -316,10 +290,11 @@ var CanvasMarkerLayer = function (props) {
316
290
  var hoverSelectedItems = hoveredIsSelected ? [currentHovered] : [];
317
291
  renderEvent({
318
292
  ctx: ctx,
293
+ hasTopStage: true,
319
294
  hoveredItem: currentHovered,
295
+ renderSource: types.RenderSource.TOP,
320
296
  selectedItem: selectedItemRef.current,
321
297
  selectedItems: hoverSelectedItems,
322
- topOnHover: true,
323
298
  utils: renderUtils
324
299
  });
325
300
  } else {
@@ -458,8 +433,8 @@ var CanvasMarkerLayer = function (props) {
458
433
 
459
434
  if (topStageZIndex !== undefined) {
460
435
  // topStageZIndex가 설정된 경우 Top Layer에서 hover된 항목 렌더링
461
- // Base Layer는 hover 상태 변경 시 재렌더링 불필요 (sceneFunc 내에서 hover 항목 제외 처리)
462
- // Event Layer는 선택된 항목만 렌더링하므로 업데이트 필요
436
+ // Base Layer는 모든 마커를 포함하므로 hover 상태 변경 시 재렌더링 불필요
437
+ // Event Layer는 hover 스타일과 선택된 항목을 렌더링하므로 업데이트 필요
463
438
  doRenderEvent();
464
439
  doRenderTop();
465
440
  } else if (renderEvent) {
@@ -554,8 +529,8 @@ var CanvasMarkerLayer = function (props) {
554
529
  controller.setMapCursor('grab');
555
530
 
556
531
  if (topStageZIndex !== undefined) {
557
- // Base Layer는 hover 상태 변경 시 재렌더링 불필요 (sceneFunc 내에서 hover 항목 제외 처리)
558
- // Event Layer는 선택된 항목만 렌더링하므로 업데이트 필요
532
+ // Base Layer는 모든 마커를 포함하므로 hover 상태 변경 시 재렌더링 불필요
533
+ // Event Layer는 hover 스타일과 선택된 항목을 렌더링하므로 업데이트 필요
559
534
  doRenderEvent();
560
535
  doRenderTop();
561
536
  } else if (renderEvent) {
@@ -995,4 +970,8 @@ Object.defineProperty(exports, 'CanvasDataType', {
995
970
  enumerable: true,
996
971
  get: function () { return types.CanvasDataType; }
997
972
  });
973
+ Object.defineProperty(exports, 'RenderSource', {
974
+ enumerable: true,
975
+ get: function () { return types.RenderSource; }
976
+ });
998
977
  exports["default"] = CanvasMarkerLayer;
@@ -120,17 +120,27 @@ export interface RenderAnimationParams<T> {
120
120
  * @template T 마커/폴리곤 데이터의 추가 속성 타입
121
121
  */
122
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
+ }
123
131
  /**
124
132
  * 커스텀 렌더링 함수 파라미터 - Event Layer
125
133
  */
126
134
  export interface RenderEventParams<T> {
127
135
  ctx: CanvasRenderingContext2D;
136
+ /** topStageZIndex가 설정되어 있는지 여부 */
137
+ hasTopStage: boolean;
128
138
  hoveredItem: CanvasData<T> | null;
129
- utils: RenderUtils<T>;
139
+ /** 렌더링 소스 (BASE, EVENT, TOP) */
140
+ renderSource: RenderSource;
130
141
  selectedItems?: CanvasData<T>[];
131
142
  selectedItem?: CanvasData<T> | null;
132
- /** hover 시 마커를 최상단으로 표시할지 여부 (기본값: false) */
133
- topOnHover?: boolean;
143
+ utils: RenderUtils<T>;
134
144
  }
135
145
  /**
136
146
  * 커스텀 렌더링 함수 타입 - Event Layer
@@ -14,6 +14,18 @@ exports.CanvasDataType = void 0;
14
14
  CanvasDataType["MARKER"] = "MARKER";
15
15
  CanvasDataType["POLYGON"] = "POLYGON";
16
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 = {}));
17
29
 
18
30
  exports.createCanvasData = utils.createCanvasData;
19
31
  exports.createCanvasDataArray = utils.createCanvasDataArray;
package/dist/index.es.js CHANGED
@@ -1842,6 +1842,18 @@ var CanvasDataType;
1842
1842
  CanvasDataType["MARKER"] = "MARKER";
1843
1843
  CanvasDataType["POLYGON"] = "POLYGON";
1844
1844
  })(CanvasDataType || (CanvasDataType = {}));
1845
+ /**
1846
+ * 렌더링 소스 Enum
1847
+ */
1848
+ // eslint-disable-next-line no-shadow
1849
+
1850
+ var RenderSource;
1851
+
1852
+ (function (RenderSource) {
1853
+ RenderSource["BASE"] = "BASE";
1854
+ RenderSource["EVENT"] = "EVENT";
1855
+ RenderSource["TOP"] = "TOP";
1856
+ })(RenderSource || (RenderSource = {}));
1845
1857
 
1846
1858
  /**
1847
1859
  * 현재 뷰포트 영역 계산
@@ -4075,20 +4087,12 @@ var CanvasMarkerLayer = function (props) {
4075
4087
  name: 'base-render-shape',
4076
4088
  perfectDrawEnabled: false,
4077
4089
  sceneFunc: function (konvaContext) {
4078
- var ctx = konvaContext;
4079
- var hovered = hoveredItemRef.current; // 뷰포트 컬링: 화면에 보이는 항목만 필터링
4090
+ var ctx = konvaContext; // 뷰포트 컬링: 화면에 보이는 항목만 필터링
4080
4091
 
4081
4092
  var visibleItems = enableViewportCullingRef.current ? dataRef.current.filter(function (item) {
4082
4093
  return isInViewport$1(item);
4083
- }) : dataRef.current; // topStageZIndex가 설정된 경우 hover된 항목은 Top Layer에서 처리
4084
-
4085
- if (topStageZIndex !== undefined && hovered) {
4086
- visibleItems = visibleItems.filter(function (item) {
4087
- return item.id !== hovered.id;
4088
- });
4089
- } // Base Layer는 기본 마커만 렌더링 (성능 최적화)
4090
- // hover/selected는 Event Layer에서 덧그리므로 Base Layer에서는 제외
4091
-
4094
+ }) : dataRef.current; // Base Layer는 기본 마커만 렌더링 (hover된 항목도 포함)
4095
+ // hover 스타일은 Event Layer와 Top Layer에서 덧그려짐
4092
4096
 
4093
4097
  renderBase({
4094
4098
  ctx: ctx,
@@ -4096,8 +4100,7 @@ var CanvasMarkerLayer = function (props) {
4096
4100
  items: visibleItems,
4097
4101
  selectedIds: new Set(),
4098
4102
  utils: renderUtils
4099
- }); // topStageZIndex가 설정된 경우 hover된 항목은 Top Layer에서 처리하므로 여기서는 스킵
4100
- // topStageZIndex가 없으면 성능 우선으로 Base Layer 재렌더링 안 함 (hover된 항목이 뒤편 마커 위로 올라갈 수 있음)
4103
+ });
4101
4104
  }
4102
4105
  });
4103
4106
  layer.add(shape);
@@ -4132,37 +4135,20 @@ var CanvasMarkerLayer = function (props) {
4132
4135
  })) {
4133
4136
  selectedItems = __spreadArray(__spreadArray([], selectedItems, true), [selectedItemRef.current], false);
4134
4137
  }
4135
- } // topStageZIndex가 설정된 경우 hover 항목은 Top Layer에서 처리
4136
- // event 레이어에서는 hover된 항목을 완전히 제외하고 선택된 항목만 렌더링
4137
-
4138
-
4139
- if (topStageZIndex !== undefined && hovered) {
4140
- // hover된 항목을 제외한 선택된 항목들 (성능 최적화: 필요할 때만 필터링)
4141
- var selectedItemsWithoutHovered = selectedItems.length > 0 ? selectedItems.filter(function (item) {
4142
- return item.id !== hovered.id;
4143
- }) : selectedItems; // 선택된 항목만 그리기 (hover된 항목은 Top Layer에서 처리)
4144
-
4145
- renderEvent({
4146
- ctx: ctx,
4147
- hoveredItem: null,
4148
- selectedItem: selectedItemRef.current,
4149
- selectedItems: selectedItemsWithoutHovered,
4150
- topOnHover: true,
4151
- utils: renderUtils
4152
- });
4153
- } else {
4154
- // topStageZIndex가 없으면 hover된 항목을 selectedItems에 추가하지 않음 (성능 우선)
4155
- // renderEvent 함수가 hoveredItem을 별도로 처리하므로, selectedItems는 그대로 전달
4156
- // 이렇게 하면 hover 변경 시 선택된 항목들을 다시 그리지 않고 hover된 항목만 업데이트됨
4157
- renderEvent({
4158
- ctx: ctx,
4159
- hoveredItem: hovered,
4160
- selectedItem: selectedItemRef.current,
4161
- selectedItems: selectedItems,
4162
- topOnHover: false,
4163
- utils: renderUtils
4164
- });
4165
- }
4138
+ } // Event Layer는 hover 효과 선택 상태를 덧그림
4139
+ // topStageZIndex가 있으면 hover된 항목은 Top Stage에서도 처리되지만,
4140
+ // Event Layer에서도 hover 스타일을 덧그려서 Base Layer 위에 표시됨
4141
+
4142
+
4143
+ renderEvent({
4144
+ ctx: ctx,
4145
+ hasTopStage: topStageZIndex !== undefined,
4146
+ hoveredItem: hovered,
4147
+ renderSource: RenderSource.EVENT,
4148
+ selectedItem: selectedItemRef.current,
4149
+ selectedItems: selectedItems,
4150
+ utils: renderUtils
4151
+ });
4166
4152
  }
4167
4153
  });
4168
4154
  layer.add(shape);
@@ -4227,10 +4213,11 @@ var CanvasMarkerLayer = function (props) {
4227
4213
  var hoverSelectedItems = hoveredIsSelected ? [currentHovered] : [];
4228
4214
  renderEvent({
4229
4215
  ctx: ctx,
4216
+ hasTopStage: true,
4230
4217
  hoveredItem: currentHovered,
4218
+ renderSource: RenderSource.TOP,
4231
4219
  selectedItem: selectedItemRef.current,
4232
4220
  selectedItems: hoverSelectedItems,
4233
- topOnHover: true,
4234
4221
  utils: renderUtils
4235
4222
  });
4236
4223
  } else {
@@ -4369,8 +4356,8 @@ var CanvasMarkerLayer = function (props) {
4369
4356
 
4370
4357
  if (topStageZIndex !== undefined) {
4371
4358
  // topStageZIndex가 설정된 경우 Top Layer에서 hover된 항목 렌더링
4372
- // Base Layer는 hover 상태 변경 시 재렌더링 불필요 (sceneFunc 내에서 hover 항목 제외 처리)
4373
- // Event Layer는 선택된 항목만 렌더링하므로 업데이트 필요
4359
+ // Base Layer는 모든 마커를 포함하므로 hover 상태 변경 시 재렌더링 불필요
4360
+ // Event Layer는 hover 스타일과 선택된 항목을 렌더링하므로 업데이트 필요
4374
4361
  doRenderEvent();
4375
4362
  doRenderTop();
4376
4363
  } else if (renderEvent) {
@@ -4465,8 +4452,8 @@ var CanvasMarkerLayer = function (props) {
4465
4452
  controller.setMapCursor('grab');
4466
4453
 
4467
4454
  if (topStageZIndex !== undefined) {
4468
- // Base Layer는 hover 상태 변경 시 재렌더링 불필요 (sceneFunc 내에서 hover 항목 제외 처리)
4469
- // Event Layer는 선택된 항목만 렌더링하므로 업데이트 필요
4455
+ // Base Layer는 모든 마커를 포함하므로 hover 상태 변경 시 재렌더링 불필요
4456
+ // Event Layer는 hover 스타일과 선택된 항목을 렌더링하므로 업데이트 필요
4470
4457
  doRenderEvent();
4471
4458
  doRenderTop();
4472
4459
  } else if (renderEvent) {
@@ -10792,4 +10779,4 @@ function MintMap(_a) {
10792
10779
  }), loading));
10793
10780
  }
10794
10781
 
10795
- export { AnimationPlayer, Bounds, CanvasDataType, CanvasMarker, CanvasMarkerClaude, CanvasMarkerLayer, CanvasPolygonLayer, CanvasProvider, 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, buildSpatialIndex, calculateMarkerBoundingBox, calculateTextBoxWidth, computeMarkerOffset, computePolygonOffsets, createCanvasData, createCanvasDataArray, createMapEventHandlers, getClusterInfo, getMapOfType, hexToRgba, isInViewport, isPointInMarkerData, isPointInPolygon, isPointInPolygonData, log, mapValuesToArray, syncExternalSelectedItems, syncSelectedItems, updateViewport, useCanvasContext, useMarkerMoving, useMintMapController, validateEvent, waiting };
10782
+ export { AnimationPlayer, Bounds, CanvasDataType, CanvasMarker, CanvasMarkerClaude, CanvasMarkerLayer, CanvasPolygonLayer, CanvasProvider, 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, RenderSource, SPATIAL_GRID_CELL_SIZE, SVGCircle, SVGPolygon, SVGRect, Spacing, SpatialHashGrid, Status, buildSpatialIndex, calculateMarkerBoundingBox, calculateTextBoxWidth, computeMarkerOffset, computePolygonOffsets, createCanvasData, createCanvasDataArray, createMapEventHandlers, getClusterInfo, getMapOfType, hexToRgba, isInViewport, isPointInMarkerData, isPointInPolygon, isPointInPolygonData, log, mapValuesToArray, syncExternalSelectedItems, syncSelectedItems, updateViewport, useCanvasContext, useMarkerMoving, useMintMapController, validateEvent, waiting };
package/dist/index.js CHANGED
@@ -71,6 +71,10 @@ Object.defineProperty(exports, 'CanvasDataType', {
71
71
  enumerable: true,
72
72
  get: function () { return types.CanvasDataType; }
73
73
  });
74
+ Object.defineProperty(exports, 'RenderSource', {
75
+ enumerable: true,
76
+ get: function () { return types.RenderSource; }
77
+ });
74
78
  exports.calculateMarkerBoundingBox = utils.calculateMarkerBoundingBox;
75
79
  exports.calculateTextBoxWidth = utils.calculateTextBoxWidth;
76
80
  exports.computeMarkerOffset = utils.computeMarkerOffset;
package/dist/index.umd.js CHANGED
@@ -1846,6 +1846,18 @@
1846
1846
  CanvasDataType["MARKER"] = "MARKER";
1847
1847
  CanvasDataType["POLYGON"] = "POLYGON";
1848
1848
  })(exports.CanvasDataType || (exports.CanvasDataType = {}));
1849
+ /**
1850
+ * 렌더링 소스 Enum
1851
+ */
1852
+ // eslint-disable-next-line no-shadow
1853
+
1854
+ exports.RenderSource = void 0;
1855
+
1856
+ (function (RenderSource) {
1857
+ RenderSource["BASE"] = "BASE";
1858
+ RenderSource["EVENT"] = "EVENT";
1859
+ RenderSource["TOP"] = "TOP";
1860
+ })(exports.RenderSource || (exports.RenderSource = {}));
1849
1861
 
1850
1862
  /**
1851
1863
  * 현재 뷰포트 영역 계산
@@ -4079,20 +4091,12 @@
4079
4091
  name: 'base-render-shape',
4080
4092
  perfectDrawEnabled: false,
4081
4093
  sceneFunc: function (konvaContext) {
4082
- var ctx = konvaContext;
4083
- var hovered = hoveredItemRef.current; // 뷰포트 컬링: 화면에 보이는 항목만 필터링
4094
+ var ctx = konvaContext; // 뷰포트 컬링: 화면에 보이는 항목만 필터링
4084
4095
 
4085
4096
  var visibleItems = enableViewportCullingRef.current ? dataRef.current.filter(function (item) {
4086
4097
  return isInViewport$1(item);
4087
- }) : dataRef.current; // topStageZIndex가 설정된 경우 hover된 항목은 Top Layer에서 처리
4088
-
4089
- if (topStageZIndex !== undefined && hovered) {
4090
- visibleItems = visibleItems.filter(function (item) {
4091
- return item.id !== hovered.id;
4092
- });
4093
- } // Base Layer는 기본 마커만 렌더링 (성능 최적화)
4094
- // hover/selected는 Event Layer에서 덧그리므로 Base Layer에서는 제외
4095
-
4098
+ }) : dataRef.current; // Base Layer는 기본 마커만 렌더링 (hover된 항목도 포함)
4099
+ // hover 스타일은 Event Layer와 Top Layer에서 덧그려짐
4096
4100
 
4097
4101
  renderBase({
4098
4102
  ctx: ctx,
@@ -4100,8 +4104,7 @@
4100
4104
  items: visibleItems,
4101
4105
  selectedIds: new Set(),
4102
4106
  utils: renderUtils
4103
- }); // topStageZIndex가 설정된 경우 hover된 항목은 Top Layer에서 처리하므로 여기서는 스킵
4104
- // topStageZIndex가 없으면 성능 우선으로 Base Layer 재렌더링 안 함 (hover된 항목이 뒤편 마커 위로 올라갈 수 있음)
4107
+ });
4105
4108
  }
4106
4109
  });
4107
4110
  layer.add(shape);
@@ -4136,37 +4139,20 @@
4136
4139
  })) {
4137
4140
  selectedItems = tslib.__spreadArray(tslib.__spreadArray([], selectedItems, true), [selectedItemRef.current], false);
4138
4141
  }
4139
- } // topStageZIndex가 설정된 경우 hover 항목은 Top Layer에서 처리
4140
- // event 레이어에서는 hover된 항목을 완전히 제외하고 선택된 항목만 렌더링
4141
-
4142
-
4143
- if (topStageZIndex !== undefined && hovered) {
4144
- // hover된 항목을 제외한 선택된 항목들 (성능 최적화: 필요할 때만 필터링)
4145
- var selectedItemsWithoutHovered = selectedItems.length > 0 ? selectedItems.filter(function (item) {
4146
- return item.id !== hovered.id;
4147
- }) : selectedItems; // 선택된 항목만 그리기 (hover된 항목은 Top Layer에서 처리)
4148
-
4149
- renderEvent({
4150
- ctx: ctx,
4151
- hoveredItem: null,
4152
- selectedItem: selectedItemRef.current,
4153
- selectedItems: selectedItemsWithoutHovered,
4154
- topOnHover: true,
4155
- utils: renderUtils
4156
- });
4157
- } else {
4158
- // topStageZIndex가 없으면 hover된 항목을 selectedItems에 추가하지 않음 (성능 우선)
4159
- // renderEvent 함수가 hoveredItem을 별도로 처리하므로, selectedItems는 그대로 전달
4160
- // 이렇게 하면 hover 변경 시 선택된 항목들을 다시 그리지 않고 hover된 항목만 업데이트됨
4161
- renderEvent({
4162
- ctx: ctx,
4163
- hoveredItem: hovered,
4164
- selectedItem: selectedItemRef.current,
4165
- selectedItems: selectedItems,
4166
- topOnHover: false,
4167
- utils: renderUtils
4168
- });
4169
- }
4142
+ } // Event Layer는 hover 효과 선택 상태를 덧그림
4143
+ // topStageZIndex가 있으면 hover된 항목은 Top Stage에서도 처리되지만,
4144
+ // Event Layer에서도 hover 스타일을 덧그려서 Base Layer 위에 표시됨
4145
+
4146
+
4147
+ renderEvent({
4148
+ ctx: ctx,
4149
+ hasTopStage: topStageZIndex !== undefined,
4150
+ hoveredItem: hovered,
4151
+ renderSource: exports.RenderSource.EVENT,
4152
+ selectedItem: selectedItemRef.current,
4153
+ selectedItems: selectedItems,
4154
+ utils: renderUtils
4155
+ });
4170
4156
  }
4171
4157
  });
4172
4158
  layer.add(shape);
@@ -4231,10 +4217,11 @@
4231
4217
  var hoverSelectedItems = hoveredIsSelected ? [currentHovered] : [];
4232
4218
  renderEvent({
4233
4219
  ctx: ctx,
4220
+ hasTopStage: true,
4234
4221
  hoveredItem: currentHovered,
4222
+ renderSource: exports.RenderSource.TOP,
4235
4223
  selectedItem: selectedItemRef.current,
4236
4224
  selectedItems: hoverSelectedItems,
4237
- topOnHover: true,
4238
4225
  utils: renderUtils
4239
4226
  });
4240
4227
  } else {
@@ -4373,8 +4360,8 @@
4373
4360
 
4374
4361
  if (topStageZIndex !== undefined) {
4375
4362
  // topStageZIndex가 설정된 경우 Top Layer에서 hover된 항목 렌더링
4376
- // Base Layer는 hover 상태 변경 시 재렌더링 불필요 (sceneFunc 내에서 hover 항목 제외 처리)
4377
- // Event Layer는 선택된 항목만 렌더링하므로 업데이트 필요
4363
+ // Base Layer는 모든 마커를 포함하므로 hover 상태 변경 시 재렌더링 불필요
4364
+ // Event Layer는 hover 스타일과 선택된 항목을 렌더링하므로 업데이트 필요
4378
4365
  doRenderEvent();
4379
4366
  doRenderTop();
4380
4367
  } else if (renderEvent) {
@@ -4469,8 +4456,8 @@
4469
4456
  controller.setMapCursor('grab');
4470
4457
 
4471
4458
  if (topStageZIndex !== undefined) {
4472
- // Base Layer는 hover 상태 변경 시 재렌더링 불필요 (sceneFunc 내에서 hover 항목 제외 처리)
4473
- // Event Layer는 선택된 항목만 렌더링하므로 업데이트 필요
4459
+ // Base Layer는 모든 마커를 포함하므로 hover 상태 변경 시 재렌더링 불필요
4460
+ // Event Layer는 hover 스타일과 선택된 항목을 렌더링하므로 업데이트 필요
4474
4461
  doRenderEvent();
4475
4462
  doRenderTop();
4476
4463
  } else if (renderEvent) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mint-ui/map",
3
- "version": "1.2.0-test.66",
3
+ "version": "1.2.0-test.68",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.es.js",
6
6
  "browser": "./dist/index.umd.js",