@mint-ui/map 1.2.0-test.17 → 1.2.0-test.18

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.
@@ -332,6 +332,10 @@ var WoongCanvasLayer = function (props) {
332
332
  * 1. Shape 재사용으로 객체 생성/파괴 오버헤드 제거
333
333
  * 2. sceneFunc 한 번만 설정 (함수 재생성 제거)
334
334
  * 3. 클로저로 최신 데이터 참조
335
+ *
336
+ * 🎯 topOnHover 지원:
337
+ * - renderEvent가 없을 때 Base Layer에서 hover 처리 (fallback)
338
+ * - renderEvent가 있으면 Event Layer에서 처리 (성능 최적화)
335
339
  */
336
340
 
337
341
  var doRenderBase = function () {
@@ -346,17 +350,40 @@ var WoongCanvasLayer = function (props) {
346
350
  shape = new Konva__default["default"].Shape({
347
351
  name: 'base-render-shape',
348
352
  sceneFunc: function (context, shape) {
349
- var ctx = context; // 클로저로 최신 ref 값 참조
353
+ var ctx = context;
354
+ var hovered = hoveredItemRef.current; // 클로저로 최신 ref 값 참조
350
355
 
351
356
  var visibleMarkers = enableViewportCulling ? markersRef.current.filter(function (item) {
352
357
  return isInViewport(item);
353
- }) : markersRef.current;
358
+ }) : markersRef.current; // topOnHover가 true이고 renderEvent가 없으면 Base Layer에서 hover 처리
359
+
360
+ if (topOnHover && !renderEvent && hovered) {
361
+ // hover된 항목 제외하고 렌더링
362
+ visibleMarkers = visibleMarkers.filter(function (item) {
363
+ return item.id !== hovered.id;
364
+ });
365
+ } // 일반 항목 렌더링
366
+
367
+
354
368
  renderBase({
355
369
  ctx: ctx,
356
370
  items: visibleMarkers,
357
371
  selectedIds: selectedIdsRef.current,
358
372
  utils: renderUtils
359
- });
373
+ }); // hover된 항목을 최상단에 렌더링 (renderEvent가 없을 때만)
374
+
375
+ if (topOnHover && !renderEvent && hovered) {
376
+ var isHoveredInViewport = enableViewportCulling ? isInViewport(hovered) : true;
377
+
378
+ if (isHoveredInViewport) {
379
+ renderBase({
380
+ ctx: ctx,
381
+ items: [hovered],
382
+ selectedIds: selectedIdsRef.current,
383
+ utils: renderUtils
384
+ });
385
+ }
386
+ }
360
387
  },
361
388
  perfectDrawEnabled: false,
362
389
  listening: false,
@@ -589,12 +616,15 @@ var WoongCanvasLayer = function (props) {
589
616
  return null;
590
617
  };
591
618
  /**
592
- * Hover 상태 설정 및 Event 레이어 렌더링
619
+ * Hover 상태 설정 및 레이어 렌더링
593
620
  *
594
621
  * @param data hover된 마커/폴리곤 데이터 또는 null
595
622
  *
596
623
  * 최적화: RAF 제거하여 즉시 렌더링 (16ms 지연 제거)
597
- * topOnHover가 true일 때는 Base 레이어도 다시 그려서 z-order 변경
624
+ *
625
+ * 🎯 topOnHover 지원:
626
+ * - renderEvent가 있으면: Event Layer에서만 처리 (성능 최적화)
627
+ * - renderEvent가 없고 topOnHover=true면: Base Layer에서 처리
598
628
  */
599
629
 
600
630
 
@@ -606,10 +636,15 @@ var WoongCanvasLayer = function (props) {
606
636
  } else {
607
637
  controller.setMapCursor(data ? 'pointer' : 'grab');
608
638
  } // 즉시 렌더링 (RAF 없이)
609
- // topOnHover는 Event Layer에서만 처리 (Base Layer 재렌더링 제거로 성능 향상)
610
639
 
611
640
 
612
- doRenderEvent();
641
+ if (renderEvent) {
642
+ // renderEvent가 있으면 Event Layer에서만 처리 (성능 최적화)
643
+ doRenderEvent();
644
+ } else if (topOnHover) {
645
+ // renderEvent가 없고 topOnHover가 true면 Base Layer에서 처리
646
+ doRenderBase();
647
+ }
613
648
  };
614
649
  /**
615
650
  * 클릭 처리 (단일/다중 선택)
package/dist/index.es.js CHANGED
@@ -5952,6 +5952,10 @@ var WoongCanvasLayer = function (props) {
5952
5952
  * 1. Shape 재사용으로 객체 생성/파괴 오버헤드 제거
5953
5953
  * 2. sceneFunc 한 번만 설정 (함수 재생성 제거)
5954
5954
  * 3. 클로저로 최신 데이터 참조
5955
+ *
5956
+ * 🎯 topOnHover 지원:
5957
+ * - renderEvent가 없을 때 Base Layer에서 hover 처리 (fallback)
5958
+ * - renderEvent가 있으면 Event Layer에서 처리 (성능 최적화)
5955
5959
  */
5956
5960
 
5957
5961
  var doRenderBase = function () {
@@ -5966,17 +5970,40 @@ var WoongCanvasLayer = function (props) {
5966
5970
  shape = new Konva.Shape({
5967
5971
  name: 'base-render-shape',
5968
5972
  sceneFunc: function (context, shape) {
5969
- var ctx = context; // 클로저로 최신 ref 값 참조
5973
+ var ctx = context;
5974
+ var hovered = hoveredItemRef.current; // 클로저로 최신 ref 값 참조
5970
5975
 
5971
5976
  var visibleMarkers = enableViewportCulling ? markersRef.current.filter(function (item) {
5972
5977
  return isInViewport(item);
5973
- }) : markersRef.current;
5978
+ }) : markersRef.current; // topOnHover가 true이고 renderEvent가 없으면 Base Layer에서 hover 처리
5979
+
5980
+ if (topOnHover && !renderEvent && hovered) {
5981
+ // hover된 항목 제외하고 렌더링
5982
+ visibleMarkers = visibleMarkers.filter(function (item) {
5983
+ return item.id !== hovered.id;
5984
+ });
5985
+ } // 일반 항목 렌더링
5986
+
5987
+
5974
5988
  renderBase({
5975
5989
  ctx: ctx,
5976
5990
  items: visibleMarkers,
5977
5991
  selectedIds: selectedIdsRef.current,
5978
5992
  utils: renderUtils
5979
- });
5993
+ }); // hover된 항목을 최상단에 렌더링 (renderEvent가 없을 때만)
5994
+
5995
+ if (topOnHover && !renderEvent && hovered) {
5996
+ var isHoveredInViewport = enableViewportCulling ? isInViewport(hovered) : true;
5997
+
5998
+ if (isHoveredInViewport) {
5999
+ renderBase({
6000
+ ctx: ctx,
6001
+ items: [hovered],
6002
+ selectedIds: selectedIdsRef.current,
6003
+ utils: renderUtils
6004
+ });
6005
+ }
6006
+ }
5980
6007
  },
5981
6008
  perfectDrawEnabled: false,
5982
6009
  listening: false,
@@ -6209,12 +6236,15 @@ var WoongCanvasLayer = function (props) {
6209
6236
  return null;
6210
6237
  };
6211
6238
  /**
6212
- * Hover 상태 설정 및 Event 레이어 렌더링
6239
+ * Hover 상태 설정 및 레이어 렌더링
6213
6240
  *
6214
6241
  * @param data hover된 마커/폴리곤 데이터 또는 null
6215
6242
  *
6216
6243
  * 최적화: RAF 제거하여 즉시 렌더링 (16ms 지연 제거)
6217
- * topOnHover가 true일 때는 Base 레이어도 다시 그려서 z-order 변경
6244
+ *
6245
+ * 🎯 topOnHover 지원:
6246
+ * - renderEvent가 있으면: Event Layer에서만 처리 (성능 최적화)
6247
+ * - renderEvent가 없고 topOnHover=true면: Base Layer에서 처리
6218
6248
  */
6219
6249
 
6220
6250
 
@@ -6226,10 +6256,15 @@ var WoongCanvasLayer = function (props) {
6226
6256
  } else {
6227
6257
  controller.setMapCursor(data ? 'pointer' : 'grab');
6228
6258
  } // 즉시 렌더링 (RAF 없이)
6229
- // topOnHover는 Event Layer에서만 처리 (Base Layer 재렌더링 제거로 성능 향상)
6230
6259
 
6231
6260
 
6232
- doRenderEvent();
6261
+ if (renderEvent) {
6262
+ // renderEvent가 있으면 Event Layer에서만 처리 (성능 최적화)
6263
+ doRenderEvent();
6264
+ } else if (topOnHover) {
6265
+ // renderEvent가 없고 topOnHover가 true면 Base Layer에서 처리
6266
+ doRenderBase();
6267
+ }
6233
6268
  };
6234
6269
  /**
6235
6270
  * 클릭 처리 (단일/다중 선택)
package/dist/index.umd.js CHANGED
@@ -5956,6 +5956,10 @@
5956
5956
  * 1. Shape 재사용으로 객체 생성/파괴 오버헤드 제거
5957
5957
  * 2. sceneFunc 한 번만 설정 (함수 재생성 제거)
5958
5958
  * 3. 클로저로 최신 데이터 참조
5959
+ *
5960
+ * 🎯 topOnHover 지원:
5961
+ * - renderEvent가 없을 때 Base Layer에서 hover 처리 (fallback)
5962
+ * - renderEvent가 있으면 Event Layer에서 처리 (성능 최적화)
5959
5963
  */
5960
5964
 
5961
5965
  var doRenderBase = function () {
@@ -5970,17 +5974,40 @@
5970
5974
  shape = new Konva__default["default"].Shape({
5971
5975
  name: 'base-render-shape',
5972
5976
  sceneFunc: function (context, shape) {
5973
- var ctx = context; // 클로저로 최신 ref 값 참조
5977
+ var ctx = context;
5978
+ var hovered = hoveredItemRef.current; // 클로저로 최신 ref 값 참조
5974
5979
 
5975
5980
  var visibleMarkers = enableViewportCulling ? markersRef.current.filter(function (item) {
5976
5981
  return isInViewport(item);
5977
- }) : markersRef.current;
5982
+ }) : markersRef.current; // topOnHover가 true이고 renderEvent가 없으면 Base Layer에서 hover 처리
5983
+
5984
+ if (topOnHover && !renderEvent && hovered) {
5985
+ // hover된 항목 제외하고 렌더링
5986
+ visibleMarkers = visibleMarkers.filter(function (item) {
5987
+ return item.id !== hovered.id;
5988
+ });
5989
+ } // 일반 항목 렌더링
5990
+
5991
+
5978
5992
  renderBase({
5979
5993
  ctx: ctx,
5980
5994
  items: visibleMarkers,
5981
5995
  selectedIds: selectedIdsRef.current,
5982
5996
  utils: renderUtils
5983
- });
5997
+ }); // hover된 항목을 최상단에 렌더링 (renderEvent가 없을 때만)
5998
+
5999
+ if (topOnHover && !renderEvent && hovered) {
6000
+ var isHoveredInViewport = enableViewportCulling ? isInViewport(hovered) : true;
6001
+
6002
+ if (isHoveredInViewport) {
6003
+ renderBase({
6004
+ ctx: ctx,
6005
+ items: [hovered],
6006
+ selectedIds: selectedIdsRef.current,
6007
+ utils: renderUtils
6008
+ });
6009
+ }
6010
+ }
5984
6011
  },
5985
6012
  perfectDrawEnabled: false,
5986
6013
  listening: false,
@@ -6213,12 +6240,15 @@
6213
6240
  return null;
6214
6241
  };
6215
6242
  /**
6216
- * Hover 상태 설정 및 Event 레이어 렌더링
6243
+ * Hover 상태 설정 및 레이어 렌더링
6217
6244
  *
6218
6245
  * @param data hover된 마커/폴리곤 데이터 또는 null
6219
6246
  *
6220
6247
  * 최적화: RAF 제거하여 즉시 렌더링 (16ms 지연 제거)
6221
- * topOnHover가 true일 때는 Base 레이어도 다시 그려서 z-order 변경
6248
+ *
6249
+ * 🎯 topOnHover 지원:
6250
+ * - renderEvent가 있으면: Event Layer에서만 처리 (성능 최적화)
6251
+ * - renderEvent가 없고 topOnHover=true면: Base Layer에서 처리
6222
6252
  */
6223
6253
 
6224
6254
 
@@ -6230,10 +6260,15 @@
6230
6260
  } else {
6231
6261
  controller.setMapCursor(data ? 'pointer' : 'grab');
6232
6262
  } // 즉시 렌더링 (RAF 없이)
6233
- // topOnHover는 Event Layer에서만 처리 (Base Layer 재렌더링 제거로 성능 향상)
6234
6263
 
6235
6264
 
6236
- doRenderEvent();
6265
+ if (renderEvent) {
6266
+ // renderEvent가 있으면 Event Layer에서만 처리 (성능 최적화)
6267
+ doRenderEvent();
6268
+ } else if (topOnHover) {
6269
+ // renderEvent가 없고 topOnHover가 true면 Base Layer에서 처리
6270
+ doRenderBase();
6271
+ }
6237
6272
  };
6238
6273
  /**
6239
6274
  * 클릭 처리 (단일/다중 선택)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mint-ui/map",
3
- "version": "1.2.0-test.17",
3
+ "version": "1.2.0-test.18",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.es.js",
6
6
  "browser": "./dist/index.umd.js",