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

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.
package/dist/index.umd.js CHANGED
@@ -5539,9 +5539,12 @@
5539
5539
  /**
5540
5540
  * 폴리곤 Event 렌더링 함수
5541
5541
  *
5542
- * @param selectedFillColor 선택된 폴리곤 채우기 색상
5543
- * @param selectedStrokeColor 선택된 폴리곤 테두리 색상
5544
- * @param selectedLineWidth 선택된 폴리곤 테두리 두께
5542
+ * @param baseFillColor 기본 폴리곤 채우기 색상 (필수, fallback용)
5543
+ * @param baseStrokeColor 기본 폴리곤 테두리 색상 (필수, fallback용)
5544
+ * @param baseLineWidth 기본 폴리곤 테두리 두께 (필수, fallback용)
5545
+ * @param selectedFillColor 선택된 폴리곤 채우기 색상 (선택, 기본값: baseFillColor)
5546
+ * @param selectedStrokeColor 선택된 폴리곤 테두리 색상 (선택, 기본값: baseStrokeColor)
5547
+ * @param selectedLineWidth 선택된 폴리곤 테두리 두께 (선택, 기본값: baseLineWidth)
5545
5548
  * @param activeFillColor 마지막 선택된 폴리곤 채우기 색상 (선택, 기본값: selectedFillColor)
5546
5549
  * @param activeStrokeColor 마지막 선택된 폴리곤 테두리 색상 (선택, 기본값: selectedStrokeColor)
5547
5550
  * @param activeLineWidth 마지막 선택된 폴리곤 테두리 두께 (선택, 기본값: selectedLineWidth)
@@ -5552,29 +5555,34 @@
5552
5555
  *
5553
5556
  * @example
5554
5557
  * const renderEvent = renderPolygonEvent(
5555
- * 'rgba(255, 193, 7, 0.7)',
5556
- * 'rgba(255, 152, 0, 1)',
5557
- * 4,
5558
- * 'rgba(255, 0, 0, 0.8)',
5559
- * undefined,
5560
- * undefined,
5561
- * 'rgba(100, 150, 255, 0.8)'
5558
+ * 'rgba(255, 100, 100, 0.5)', // baseFillColor
5559
+ * 'rgba(200, 50, 50, 0.8)', // baseStrokeColor
5560
+ * 2, // baseLineWidth
5561
+ * 'rgba(255, 193, 7, 0.7)', // selectedFillColor
5562
+ * 'rgba(255, 152, 0, 1)', // selectedStrokeColor
5563
+ * 4 // selectedLineWidth
5562
5564
  * );
5563
5565
  */
5564
5566
 
5565
- var renderPolygonEvent = function (selectedFillColor, selectedStrokeColor, selectedLineWidth, activeFillColor, activeStrokeColor, activeLineWidth, hoveredFillColor, hoveredStrokeColor, hoveredLineWidth) {
5566
- // 기본값 설정 (selected 기준)
5567
- var _activeFillColor = activeFillColor || selectedFillColor;
5567
+ var renderPolygonEvent = function (baseFillColor, baseStrokeColor, baseLineWidth, selectedFillColor, selectedStrokeColor, selectedLineWidth, activeFillColor, activeStrokeColor, activeLineWidth, hoveredFillColor, hoveredStrokeColor, hoveredLineWidth) {
5568
+ // 기본값 설정 (base 기준)
5569
+ var _selectedFillColor = selectedFillColor || baseFillColor;
5568
5570
 
5569
- var _activeStrokeColor = activeStrokeColor || selectedStrokeColor;
5571
+ var _selectedStrokeColor = selectedStrokeColor || baseStrokeColor;
5570
5572
 
5571
- var _activeLineWidth = activeLineWidth || selectedLineWidth;
5573
+ var _selectedLineWidth = selectedLineWidth || baseLineWidth;
5572
5574
 
5573
- var _hoveredFillColor = hoveredFillColor || selectedFillColor;
5575
+ var _activeFillColor = activeFillColor || _selectedFillColor;
5574
5576
 
5575
- var _hoveredStrokeColor = hoveredStrokeColor || selectedStrokeColor;
5577
+ var _activeStrokeColor = activeStrokeColor || _selectedStrokeColor;
5576
5578
 
5577
- var _hoveredLineWidth = hoveredLineWidth || selectedLineWidth;
5579
+ var _activeLineWidth = activeLineWidth || _selectedLineWidth;
5580
+
5581
+ var _hoveredFillColor = hoveredFillColor || _selectedFillColor;
5582
+
5583
+ var _hoveredStrokeColor = hoveredStrokeColor || _selectedStrokeColor;
5584
+
5585
+ var _hoveredLineWidth = hoveredLineWidth || _selectedLineWidth;
5578
5586
 
5579
5587
  return function (_a) {
5580
5588
  var ctx = _a.ctx,
@@ -5595,9 +5603,9 @@
5595
5603
  ctx: ctx,
5596
5604
  polygonOffsets: polygonOffsets,
5597
5605
  isDonutPolygon: item.isDonutPolygon || false,
5598
- fillColor: selectedFillColor,
5599
- strokeColor: selectedStrokeColor,
5600
- lineWidth: selectedLineWidth
5606
+ fillColor: _selectedFillColor,
5607
+ strokeColor: _selectedStrokeColor,
5608
+ lineWidth: _selectedLineWidth
5601
5609
  });
5602
5610
  }
5603
5611
  } // 2. 마지막 선택된 항목 그리기 (호버되지 않은 경우)
@@ -5640,7 +5648,7 @@
5640
5648
  // 메인 컴포넌트
5641
5649
  // ============================================================================
5642
5650
 
5643
- var WoongCanvasLayerComponent = function (props) {
5651
+ var WoongCanvasLayer = function (props) {
5644
5652
  var data = props.data,
5645
5653
  dataType = props.dataType,
5646
5654
  onClick = props.onClick,
@@ -5694,9 +5702,6 @@
5694
5702
  /** 상호작용 비활성화 상태 (Ref로 관리하여 클로저 문제 해결) */
5695
5703
 
5696
5704
  var disableInteractionRef = React.useRef(disableInteraction);
5697
- /** 렌더링 설정 (Ref로 관리하여 클로저 문제 해결) */
5698
-
5699
- var renderConfigRef = React.useRef(dataType === exports.CanvasDataType.MARKER ? props.renderConfig : undefined);
5700
5705
  /** 현재 Hover 중인 항목 */
5701
5706
 
5702
5707
  var hoveredItemRef = React.useRef(null);
@@ -5785,55 +5790,11 @@
5785
5790
  var bbox = boundingBoxCacheRef.current.get(item.id);
5786
5791
 
5787
5792
  if (!bbox) {
5788
- // 폴리곤인 경우
5789
- if (dataType === exports.CanvasDataType.POLYGON) {
5790
- var offsets = getOrComputePolygonOffsets(item);
5791
- if (!offsets) return false; // 바운딩 박스 계산 (최적화: 직접 비교)
5792
-
5793
- var minX = Infinity,
5794
- minY = Infinity,
5795
- maxX = -Infinity,
5796
- maxY = -Infinity;
5797
-
5798
- for (var _i = 0, offsets_1 = offsets; _i < offsets_1.length; _i++) {
5799
- var multiPolygon = offsets_1[_i];
5800
-
5801
- for (var _a = 0, multiPolygon_1 = multiPolygon; _a < multiPolygon_1.length; _a++) {
5802
- var polygonGroup = multiPolygon_1[_a];
5803
-
5804
- for (var _b = 0, polygonGroup_1 = polygonGroup; _b < polygonGroup_1.length; _b++) {
5805
- var _c = polygonGroup_1[_b],
5806
- x = _c[0],
5807
- y = _c[1];
5808
- if (x < minX) minX = x;
5809
- if (y < minY) minY = y;
5810
- if (x > maxX) maxX = x;
5811
- if (y > maxY) maxY = y;
5812
- }
5813
- }
5814
- }
5815
-
5816
- bbox = {
5817
- minX: minX,
5818
- minY: minY,
5819
- maxX: maxX,
5820
- maxY: maxY
5821
- };
5822
- boundingBoxCacheRef.current.set(item.id, bbox);
5823
- } // 마커인 경우
5824
- else {
5825
- var offset = getOrComputeMarkerOffset(item);
5826
- if (!offset) return false;
5827
- var boxWidth = item.boxWidth || 50;
5828
- var boxHeight = item.boxHeight || 28;
5829
- bbox = {
5830
- minX: offset.x - boxWidth / 2,
5831
- minY: offset.y - boxHeight - 6,
5832
- maxX: offset.x + boxWidth / 2,
5833
- maxY: offset.y
5834
- };
5835
- boundingBoxCacheRef.current.set(item.id, bbox);
5836
- }
5793
+ // 바운딩 박스 계산 (공통 함수 사용)
5794
+ var computed = computeBoundingBox(item);
5795
+ if (!computed) return false;
5796
+ bbox = computed;
5797
+ boundingBoxCacheRef.current.set(item.id, bbox);
5837
5798
  } // 바운딩 박스와 viewport 교차 체크
5838
5799
 
5839
5800
 
@@ -5879,6 +5840,65 @@
5879
5840
 
5880
5841
  return result;
5881
5842
  }; // --------------------------------------------------------------------------
5843
+ // 유틸리티 함수: 바운딩 박스 계산
5844
+ // --------------------------------------------------------------------------
5845
+
5846
+ /**
5847
+ * 아이템의 바운딩 박스 계산 (폴리곤/마커 공통)
5848
+ *
5849
+ * @param item 마커 또는 폴리곤 데이터
5850
+ * @returns 바운딩 박스 또는 null
5851
+ */
5852
+
5853
+
5854
+ var computeBoundingBox = function (item) {
5855
+ if (dataType === exports.CanvasDataType.POLYGON) {
5856
+ // 폴리곤: 모든 좌표의 최소/최대값 계산
5857
+ var offsets = getOrComputePolygonOffsets(item);
5858
+ if (!offsets) return null;
5859
+ var minX = Infinity,
5860
+ minY = Infinity,
5861
+ maxX = -Infinity,
5862
+ maxY = -Infinity;
5863
+
5864
+ for (var _i = 0, offsets_1 = offsets; _i < offsets_1.length; _i++) {
5865
+ var multiPolygon = offsets_1[_i];
5866
+
5867
+ for (var _a = 0, multiPolygon_1 = multiPolygon; _a < multiPolygon_1.length; _a++) {
5868
+ var polygonGroup = multiPolygon_1[_a];
5869
+
5870
+ for (var _b = 0, polygonGroup_1 = polygonGroup; _b < polygonGroup_1.length; _b++) {
5871
+ var _c = polygonGroup_1[_b],
5872
+ x = _c[0],
5873
+ y = _c[1];
5874
+ if (x < minX) minX = x;
5875
+ if (y < minY) minY = y;
5876
+ if (x > maxX) maxX = x;
5877
+ if (y > maxY) maxY = y;
5878
+ }
5879
+ }
5880
+ }
5881
+
5882
+ return {
5883
+ minX: minX,
5884
+ minY: minY,
5885
+ maxX: maxX,
5886
+ maxY: maxY
5887
+ };
5888
+ } else {
5889
+ // 마커: 중심점 기준 박스 크기 계산
5890
+ var offset = getOrComputeMarkerOffset(item);
5891
+ if (!offset) return null;
5892
+ var boxWidth = item.boxWidth || 50;
5893
+ var boxHeight = item.boxHeight || 28;
5894
+ return {
5895
+ minX: offset.x - boxWidth / 2,
5896
+ minY: offset.y - boxHeight - 6,
5897
+ maxX: offset.x + boxWidth / 2,
5898
+ maxY: offset.y
5899
+ };
5900
+ }
5901
+ }; // --------------------------------------------------------------------------
5882
5902
  // 유틸리티 함수: 공간 인덱싱
5883
5903
  // --------------------------------------------------------------------------
5884
5904
 
@@ -5893,52 +5913,12 @@
5893
5913
  var currentMarkers = markersRef.current;
5894
5914
 
5895
5915
  for (var _i = 0, currentMarkers_1 = currentMarkers; _i < currentMarkers_1.length; _i++) {
5896
- var item = currentMarkers_1[_i];
5916
+ var item = currentMarkers_1[_i]; // 바운딩 박스 계산 (공통 함수 사용)
5897
5917
 
5898
- if (dataType === exports.CanvasDataType.POLYGON) {
5899
- // 폴리곤: 바운딩 박스 계산 (최적화: 직접 비교)
5900
- var offsets = getOrComputePolygonOffsets(item);
5901
-
5902
- if (offsets) {
5903
- var minX = Infinity,
5904
- minY = Infinity,
5905
- maxX = -Infinity,
5906
- maxY = -Infinity;
5907
-
5908
- for (var _a = 0, offsets_2 = offsets; _a < offsets_2.length; _a++) {
5909
- var multiPolygon = offsets_2[_a];
5910
-
5911
- for (var _b = 0, multiPolygon_2 = multiPolygon; _b < multiPolygon_2.length; _b++) {
5912
- var polygonGroup = multiPolygon_2[_b];
5913
-
5914
- for (var _c = 0, polygonGroup_2 = polygonGroup; _c < polygonGroup_2.length; _c++) {
5915
- var _d = polygonGroup_2[_c],
5916
- x = _d[0],
5917
- y = _d[1];
5918
- if (x < minX) minX = x;
5919
- if (y < minY) minY = y;
5920
- if (x > maxX) maxX = x;
5921
- if (y > maxY) maxY = y;
5922
- }
5923
- }
5924
- }
5918
+ var bbox = computeBoundingBox(item);
5925
5919
 
5926
- spatial.insert(item, minX, minY, maxX, maxY);
5927
- }
5928
- } else {
5929
- // 마커: 점 기반 바운딩 박스
5930
- var offset = getOrComputeMarkerOffset(item);
5931
-
5932
- if (offset) {
5933
- var boxWidth = item.boxWidth || 50;
5934
- var boxHeight = item.boxHeight || 28;
5935
- var tailHeight = 6;
5936
- var minX = offset.x - boxWidth / 2;
5937
- var minY = offset.y - boxHeight - tailHeight;
5938
- var maxX = offset.x + boxWidth / 2;
5939
- var maxY = offset.y;
5940
- spatial.insert(item, minX, minY, maxX, maxY);
5941
- }
5920
+ if (bbox) {
5921
+ spatial.insert(item, bbox.minX, bbox.minY, bbox.maxX, bbox.maxY);
5942
5922
  }
5943
5923
  }
5944
5924
  }; // --------------------------------------------------------------------------
@@ -5967,7 +5947,7 @@
5967
5947
  var renderAnimation = dataType === exports.CanvasDataType.MARKER ? props.renderAnimation : undefined;
5968
5948
  var renderEvent = dataType === exports.CanvasDataType.MARKER ? props.renderEvent : function () {
5969
5949
  var polygonProps = props;
5970
- return renderPolygonEvent(polygonProps.selectedFillColor, polygonProps.selectedStrokeColor, polygonProps.selectedLineWidth, polygonProps.activeFillColor, polygonProps.activeStrokeColor, polygonProps.activeLineWidth, polygonProps.hoveredFillColor, polygonProps.hoveredStrokeColor, polygonProps.hoveredLineWidth);
5950
+ return renderPolygonEvent(polygonProps.baseFillColor, polygonProps.baseStrokeColor, polygonProps.baseLineWidth, polygonProps.selectedFillColor, polygonProps.selectedStrokeColor, polygonProps.selectedLineWidth, polygonProps.activeFillColor, polygonProps.activeStrokeColor, polygonProps.activeLineWidth, polygonProps.hoveredFillColor, polygonProps.hoveredStrokeColor, polygonProps.hoveredLineWidth);
5971
5951
  }();
5972
5952
  /**
5973
5953
  * Base 레이어 렌더링 (뷰포트 컬링 적용, 선택된 마커 제외)
@@ -5999,8 +5979,7 @@
5999
5979
  ctx: ctx,
6000
5980
  items: visibleMarkers,
6001
5981
  selectedIds: selectedIdsRef.current,
6002
- utils: renderUtils,
6003
- config: renderConfigRef.current
5982
+ utils: renderUtils
6004
5983
  });
6005
5984
  },
6006
5985
  perfectDrawEnabled: false,
@@ -6030,8 +6009,7 @@
6030
6009
  layer: layer,
6031
6010
  selectedIds: selectedIdsRef.current,
6032
6011
  items: markersRef.current,
6033
- utils: renderUtils,
6034
- config: renderConfigRef.current
6012
+ utils: renderUtils
6035
6013
  });
6036
6014
  };
6037
6015
  /**
@@ -6047,13 +6025,6 @@
6047
6025
  var doRenderEvent = function () {
6048
6026
  var layer = eventLayerRef.current;
6049
6027
  if (!layer) return;
6050
-
6051
- if (!onClick && !onMouseOver && !onMouseOut) {
6052
- layer.destroyChildren();
6053
- layer.batchDraw();
6054
- return;
6055
- }
6056
-
6057
6028
  if (!renderEvent) return; // 🔥 Shape 재사용: 이미 존재하면 재사용, 없으면 생성
6058
6029
 
6059
6030
  var shape = layer.findOne('.event-render-shape');
@@ -6072,8 +6043,7 @@
6072
6043
  hoveredItem: hoveredItemRef.current,
6073
6044
  utils: renderUtils,
6074
6045
  selectedItems: selectedItems,
6075
- selectedItem: selectedItemRef.current,
6076
- config: renderConfigRef.current
6046
+ selectedItem: selectedItemRef.current
6077
6047
  });
6078
6048
  },
6079
6049
  perfectDrawEnabled: false,
@@ -6253,7 +6223,6 @@
6253
6223
 
6254
6224
 
6255
6225
  var setHovered = function (data) {
6256
- if (!onMouseOver && !onMouseOut) return;
6257
6226
  hoveredItemRef.current = data;
6258
6227
 
6259
6228
  if (draggingRef.current) {
@@ -6278,8 +6247,7 @@
6278
6247
 
6279
6248
 
6280
6249
  var handleLocalClick = function (data) {
6281
- if (!onClick) return; // 1. 선택 상태 업데이트
6282
-
6250
+ // 1. 선택 상태 업데이트
6283
6251
  if (enableMultiSelect) {
6284
6252
  // 다중 선택: Set과 Map 동시 업데이트
6285
6253
  var newSelected = new Set(selectedIdsRef.current);
@@ -6331,7 +6299,6 @@
6331
6299
 
6332
6300
  if (disableInteractionRef.current) return; // 🚫 상호작용 비활성화 시 즉시 반환
6333
6301
 
6334
- if (!onClick) return;
6335
6302
  if (context || !((_a = event === null || event === void 0 ? void 0 : event.param) === null || _a === void 0 ? void 0 : _a.position)) return;
6336
6303
 
6337
6304
  try {
@@ -6340,7 +6307,10 @@
6340
6307
 
6341
6308
  if (data_1) {
6342
6309
  handleLocalClick(data_1);
6343
- onClick(data_1, selectedIdsRef.current);
6310
+
6311
+ if (onClick) {
6312
+ onClick(data_1, selectedIdsRef.current);
6313
+ }
6344
6314
  }
6345
6315
  } catch (error) {
6346
6316
  console.error('[WoongKonvaMarker] handleClick error:', error);
@@ -6356,7 +6326,6 @@
6356
6326
 
6357
6327
  if (disableInteractionRef.current) return; // 🚫 상호작용 비활성화 시 즉시 반환
6358
6328
 
6359
- if (!onMouseOver && !onMouseOut) return;
6360
6329
  if (context || !((_a = event === null || event === void 0 ? void 0 : event.param) === null || _a === void 0 ? void 0 : _a.position)) return;
6361
6330
 
6362
6331
  try {
@@ -6399,7 +6368,6 @@
6399
6368
  var handleMouseLeave = function () {
6400
6369
  if (disableInteractionRef.current) return; // 🚫 상호작용 비활성화 시 즉시 반환
6401
6370
 
6402
- if (!onMouseOver && !onMouseOut) return;
6403
6371
  var prevHovered = hoveredItemRef.current;
6404
6372
 
6405
6373
  if (prevHovered) {
@@ -6585,18 +6553,6 @@
6585
6553
  React.useEffect(function () {
6586
6554
  disableInteractionRef.current = disableInteraction;
6587
6555
  }, [disableInteraction]); // --------------------------------------------------------------------------
6588
- // Lifecycle: renderConfig 동기화
6589
- // --------------------------------------------------------------------------
6590
-
6591
- React.useEffect(function () {
6592
- if (dataType === exports.CanvasDataType.MARKER) {
6593
- renderConfigRef.current = props.renderConfig; // config 변경 시 렌더링 업데이트
6594
-
6595
- doRenderBase();
6596
- doRenderAnimation();
6597
- doRenderEvent();
6598
- }
6599
- }, [dataType === exports.CanvasDataType.MARKER ? props.renderConfig : undefined]); // --------------------------------------------------------------------------
6600
6556
  // Lifecycle: 외부 selectedItems 동기화
6601
6557
  // --------------------------------------------------------------------------
6602
6558
 
@@ -6696,117 +6652,6 @@
6696
6652
  }
6697
6653
  }), divElement);
6698
6654
  };
6699
- /**
6700
- * 🚀 WoongCanvasLayer - Konva 기반 초고성능 마커/폴리곤 렌더링 컴포넌트
6701
- *
6702
- * ## 📌 주요 특징
6703
- * - **30,000개 이상의 폴리곤/마커를 60fps로 렌더링**
6704
- * - **Multi-Layer 아키텍처**: Base/Animation/Event 레이어 분리
6705
- * - **Spatial Hash Grid**: O(1) 수준의 빠른 Hit Test
6706
- * - **LRU 캐시**: 좌표 변환 결과 캐싱으로 성능 최적화
6707
- * - **Viewport Culling**: 화면에 보이는 영역만 렌더링
6708
- * - **Discriminated Union Props**: 타입 안전한 MARKER/POLYGON 모드
6709
- *
6710
- * ## 🎯 사용 방법
6711
- *
6712
- * ### 1️⃣ POLYGON 모드 (자동 렌더링)
6713
- * ```tsx
6714
- * <WoongCanvasLayer
6715
- * dataType={CanvasDataType.POLYGON}
6716
- * data={polygons}
6717
- * baseFillColor="rgba(255, 100, 100, 0.5)"
6718
- * baseStrokeColor="rgba(200, 50, 50, 0.8)"
6719
- * baseLineWidth={2}
6720
- * selectedFillColor="rgba(255, 193, 7, 0.7)"
6721
- * selectedStrokeColor="rgba(255, 152, 0, 1)"
6722
- * selectedLineWidth={4}
6723
- * hoveredFillColor="rgba(100, 150, 255, 0.8)" // optional
6724
- * hoveredStrokeColor="rgba(0, 100, 200, 1)" // optional
6725
- * hoveredLineWidth={3} // optional
6726
- * enableMultiSelect={true}
6727
- * onClick={handleClick}
6728
- * />
6729
- * ```
6730
- *
6731
- * ### 2️⃣ MARKER 모드 (커스텀 렌더링)
6732
- * ```tsx
6733
- * <WoongCanvasLayer
6734
- * dataType={CanvasDataType.MARKER}
6735
- * data={markers}
6736
- * renderBase={renderMarkerBase} // required
6737
- * renderAnimation={renderMarkerAnimation} // optional
6738
- * renderEvent={renderMarkerEvent} // optional
6739
- * topOnHover={true}
6740
- * onClick={handleClick}
6741
- * />
6742
- * ```
6743
- *
6744
- * ## 📊 데이터 형식
6745
- * ```typescript
6746
- * const data: KonvaCanvasData<T>[] = [
6747
- * {
6748
- * id: 'unique-id',
6749
- * position: new Position(lat, lng),
6750
- * // POLYGON: paths 필수
6751
- * paths: [[[lat, lng], [lat, lng], ...]],
6752
- * // MARKER: boxWidth/boxHeight 권장 (Hit Test 정확도)
6753
- * boxWidth: 60,
6754
- * boxHeight: 75,
6755
- * // 커스텀 데이터
6756
- * ...customData
6757
- * }
6758
- * ];
6759
- * ```
6760
- *
6761
- * ## ⚡ 성능 최적화 팁
6762
- * 1. **동적 boxWidth 계산**: `measureText()`로 실제 너비 계산 후 전달
6763
- * 2. **enableViewportCulling**: 대량 데이터 시 필수 (기본 true)
6764
- * 3. **selectedItems 외부 관리**: 상태를 외부에서 관리하여 리렌더링 최소화
6765
- * 4. **React.memo 최적화**: 컴포넌트가 자동으로 불필요한 리렌더링 방지
6766
- *
6767
- * @template T 마커/폴리곤 데이터의 추가 속성 타입
6768
- *
6769
- * @example
6770
- * // 동적 boxWidth 계산 예시
6771
- * const tempCtx = document.createElement('canvas').getContext('2d');
6772
- * tempCtx.font = 'bold 15px Arial';
6773
- * const boxWidth = Math.max(60, tempCtx.measureText(text).width + 20);
6774
- *
6775
- * @see {@link https://github.com/your-repo/docs/WoongCanvasLayer.md} 전체 문서
6776
- */
6777
-
6778
-
6779
- var WoongCanvasLayer = React__default["default"].memo(WoongCanvasLayerComponent, function (prevProps, nextProps) {
6780
- // 1. data 비교
6781
- var prevData = prevProps.data;
6782
- var nextData = nextProps.data; // 참조가 같으면 스킵
6783
-
6784
- if (prevData !== nextData) {
6785
- // 길이가 다르면 변경됨
6786
- if (prevData.length !== nextData.length) return false; // 각 데이터의 ID 비교
6787
-
6788
- for (var i = 0; i < prevData.length; i++) {
6789
- if (prevData[i].id !== nextData[i].id) {
6790
- return false; // 변경됨 → 리렌더링
6791
- }
6792
- }
6793
- } // 2. selectedItems 비교 (참조만 비교)
6794
-
6795
-
6796
- if (prevProps.selectedItems !== nextProps.selectedItems) {
6797
- return false; // 변경됨 → 리렌더링
6798
- }
6799
-
6800
- if (prevProps.selectedItem !== nextProps.selectedItem) {
6801
- return false; // 변경됨 → 리렌더링
6802
- }
6803
-
6804
- if (prevProps.disableInteraction !== nextProps.disableInteraction) {
6805
- return false; // 변경됨 → 리렌더링
6806
- }
6807
-
6808
- return true; // 같음 → 리렌더링 스킵
6809
- });
6810
6655
 
6811
6656
  var css_248z = ".MintMapWrapper-module_mint-map-control-wrapper-container__DONh7 {\n position: absolute;\n width: 100%;\n height: 100%;\n display: flex;\n pointer-events: none;\n z-index: 101;\n}\n\n.MintMapWrapper-module_mint-map-overlay-wrapper__Jn4wV {\n position: absolute;\n z-index: 1;\n}";
6812
6657
  var styles = {"mint-map-control-wrapper-container":"MintMapWrapper-module_mint-map-control-wrapper-container__DONh7","mint-map-overlay-wrapper":"MintMapWrapper-module_mint-map-overlay-wrapper__Jn4wV"};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mint-ui/map",
3
- "version": "1.2.0-test.15",
3
+ "version": "1.2.0-test.17",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.es.js",
6
6
  "browser": "./dist/index.umd.js",