@mint-ui/map 1.2.0-test.56 → 1.2.0-test.57

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
@@ -3887,10 +3887,9 @@
3887
3887
  externalSelectedItem = props.selectedItem,
3888
3888
  _f = props.disableInteraction,
3889
3889
  disableInteraction = _f === void 0 ? false : _f,
3890
- hoverZIndex = props.hoverZIndex,
3891
3890
  renderBase = props.renderBase,
3892
3891
  renderEvent = props.renderEvent,
3893
- options = tslib.__rest(props, ["data", "onClick", "onMouseOver", "onMouseOut", "enableMultiSelect", "topOnHover", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disableInteraction", "hoverZIndex", "renderBase", "renderEvent"]);
3892
+ options = tslib.__rest(props, ["data", "onClick", "onMouseOver", "onMouseOut", "enableMultiSelect", "topOnHover", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disableInteraction", "renderBase", "renderEvent"]);
3894
3893
 
3895
3894
  var controller = useMintMapController();
3896
3895
  var context = useCanvasContext();
@@ -3920,9 +3919,7 @@
3920
3919
  y: 0
3921
3920
  }); // 드래그 시작 시점의 hover 상태 저장 (드래그 중 hover 고정용)
3922
3921
 
3923
- var dragStartHoveredItemRef = React.useRef(null); // 원래 z-index 저장 (hoverZIndex 사용 시 복원용)
3924
-
3925
- var originalZIndexRef = React.useRef(currentZIndex); // 성능 최적화 Refs
3922
+ var dragStartHoveredItemRef = React.useRef(null); // 성능 최적화 Refs
3926
3923
 
3927
3924
  var offsetCacheRef = React.useRef(new LRUCache(maxCacheSize));
3928
3925
  var spatialIndexRef = React.useRef(new SpatialHashGrid(SPATIAL_GRID_CELL_SIZE));
@@ -4168,21 +4165,7 @@
4168
4165
  return;
4169
4166
  }
4170
4167
 
4171
- var prevHovered = hoveredItemRef.current;
4172
- hoveredItemRef.current = hoveredData; // hoverZIndex가 설정되어 있고 마커가 존재할 때 z-index 변경
4173
-
4174
- if (hoverZIndex !== undefined && markerRef.current) {
4175
- // hover 상태가 변경될 때만 z-index 업데이트
4176
- if (prevHovered !== hoveredData) {
4177
- // 이전 hover가 끝났을 때 원래 z-index로 복원
4178
- if (prevHovered && !hoveredData) {
4179
- controller.setMarkerZIndex(markerRef.current, originalZIndexRef.current);
4180
- } // 새로운 hover가 시작될 때 hoverZIndex로 변경
4181
- else if (hoveredData && !prevHovered) {
4182
- controller.setMarkerZIndex(markerRef.current, hoverZIndex);
4183
- }
4184
- }
4185
- }
4168
+ hoveredItemRef.current = hoveredData;
4186
4169
 
4187
4170
  if (draggingRef.current) {
4188
4171
  controller.setMapCursor('grabbing');
@@ -4261,12 +4244,7 @@
4261
4244
  if (disableInteractionRef.current) return;
4262
4245
  var prevHovered = hoveredItemRef.current;
4263
4246
  if (!prevHovered) return;
4264
- hoveredItemRef.current = null; // hoverZIndex가 설정되어 있으면 원래 z-index로 복원
4265
-
4266
- if (hoverZIndex !== undefined && markerRef.current) {
4267
- controller.setMarkerZIndex(markerRef.current, originalZIndexRef.current);
4268
- }
4269
-
4247
+ hoveredItemRef.current = null;
4270
4248
  controller.setMapCursor('grab');
4271
4249
  doRenderEvent();
4272
4250
  onMouseOut === null || onMouseOut === void 0 ? void 0 : onMouseOut(prevHovered);
@@ -4291,16 +4269,7 @@
4291
4269
  }, options);
4292
4270
 
4293
4271
  if (markerRef.current) {
4294
- controller.updateMarker(markerRef.current, markerOptions); // z-index가 변경되었을 때 originalZIndexRef 업데이트
4295
-
4296
- if (options.zIndex !== undefined) {
4297
- originalZIndexRef.current = options.zIndex; // hover 상태가 아닐 때만 z-index 업데이트 (hover 중이면 hoverZIndex 유지)
4298
-
4299
- if (!hoveredItemRef.current || hoverZIndex === undefined) {
4300
- controller.setMarkerZIndex(markerRef.current, options.zIndex);
4301
- }
4302
- }
4303
-
4272
+ controller.updateMarker(markerRef.current, markerOptions);
4304
4273
  return;
4305
4274
  }
4306
4275
 
@@ -4313,7 +4282,6 @@
4313
4282
  }
4314
4283
 
4315
4284
  if (options.zIndex !== undefined) {
4316
- originalZIndexRef.current = options.zIndex;
4317
4285
  controller.setMarkerZIndex(markerRef.current, options.zIndex);
4318
4286
  }
4319
4287
  }, [options]); // Konva 초기화 및 이벤트 리스너 등록
@@ -5147,6 +5115,435 @@
5147
5115
  }
5148
5116
  };
5149
5117
  };
5118
+ /**
5119
+ * 폴리곤 Base 렌더링 함수 팩토리 (하이브리드 방식: customStyle + 개별 props)
5120
+ *
5121
+ * Base Layer에서 사용할 렌더링 함수를 생성합니다.
5122
+ * customStyle이 제공되면 우선적으로 사용하며, null/undefined를 반환하면 개별 props로 정의된 기본 스타일을 사용합니다.
5123
+ *
5124
+ * @template T 폴리곤 데이터의 추가 속성 타입
5125
+ * @param customStyle 폴리곤 스타일 커스터마이징 함수 (선택)
5126
+ * @param baseFillColor 기본 폴리곤 채우기 색상 (fallback용)
5127
+ * @param baseStrokeColor 기본 폴리곤 테두리 색상 (fallback용)
5128
+ * @param baseLineWidth 기본 폴리곤 테두리 두께 (fallback용)
5129
+ * @returns Base Layer 렌더링 함수
5130
+ */
5131
+
5132
+ var renderPolygonBaseWithHybrid = function (customStyle, baseFillColor, baseStrokeColor, baseLineWidth) {
5133
+ return function (_a) {
5134
+ var ctx = _a.ctx,
5135
+ items = _a.items,
5136
+ selectedIds = _a.selectedIds,
5137
+ utils = _a.utils;
5138
+
5139
+ for (var _i = 0, items_4 = items; _i < items_4.length; _i++) {
5140
+ var item = items_4[_i]; // 선택된 항목은 Event Layer에서 그림 (중복 렌더링 방지)
5141
+
5142
+ if (selectedIds.has(item.id)) continue; // paths가 없으면 스킵
5143
+
5144
+ if (!item.paths) continue; // 좌표 변환 (자동 캐싱)
5145
+
5146
+ var polygonOffsets = utils.getOrComputePolygonOffsets(item);
5147
+ if (!polygonOffsets) continue; // customStyle이 있으면 우선 사용, 없거나 null/undefined 반환 시 기본 스타일 사용
5148
+
5149
+ var style = void 0;
5150
+
5151
+ if (customStyle) {
5152
+ var context = {
5153
+ isActive: false,
5154
+ isHovered: false,
5155
+ isSelected: false
5156
+ };
5157
+ style = customStyle(item, context);
5158
+ } // customStyle이 없거나 null/undefined를 반환하면 기본 스타일 사용
5159
+
5160
+
5161
+ if (!style) {
5162
+ style = {
5163
+ fillColor: baseFillColor,
5164
+ lineWidth: baseLineWidth,
5165
+ strokeColor: baseStrokeColor
5166
+ };
5167
+ } // 폴리곤 그리기
5168
+
5169
+
5170
+ drawPolygon({
5171
+ ctx: ctx,
5172
+ fillColor: style.fillColor,
5173
+ isDonutPolygon: item.isDonutPolygon || false,
5174
+ lineWidth: style.lineWidth,
5175
+ polygonOffsets: polygonOffsets,
5176
+ strokeColor: style.strokeColor
5177
+ });
5178
+ }
5179
+ };
5180
+ };
5181
+ /**
5182
+ * 폴리곤 Event 렌더링 함수 팩토리 (하이브리드 방식: customStyle + 개별 props)
5183
+ *
5184
+ * Event Layer에서 사용할 렌더링 함수를 생성합니다.
5185
+ * customStyle이 제공되면 우선적으로 사용하며, null/undefined를 반환하면 개별 props로 정의된 기본 스타일을 사용합니다.
5186
+ *
5187
+ * @template T 폴리곤 데이터의 추가 속성 타입
5188
+ * @param customStyle 폴리곤 스타일 커스터마이징 함수 (선택)
5189
+ * @param baseFillColor 기본 폴리곤 채우기 색상 (fallback용)
5190
+ * @param baseStrokeColor 기본 폴리곤 테두리 색상 (fallback용)
5191
+ * @param baseLineWidth 기본 폴리곤 테두리 두께 (fallback용)
5192
+ * @param selectedFillColor 선택된 폴리곤 채우기 색상 (fallback용)
5193
+ * @param selectedStrokeColor 선택된 폴리곤 테두리 색상 (fallback용)
5194
+ * @param selectedLineWidth 선택된 폴리곤 테두리 두께 (fallback용)
5195
+ * @param activeFillColor 마지막 선택된 폴리곤 채우기 색상 (fallback용)
5196
+ * @param activeStrokeColor 마지막 선택된 폴리곤 테두리 색상 (fallback용)
5197
+ * @param activeLineWidth 마지막 선택된 폴리곤 테두리 두께 (fallback용)
5198
+ * @param hoveredFillColor Hover 시 폴리곤 채우기 색상 (fallback용)
5199
+ * @param hoveredStrokeColor Hover 시 폴리곤 테두리 색상 (fallback용)
5200
+ * @param hoveredLineWidth Hover 시 폴리곤 테두리 두께 (fallback용)
5201
+ * @returns Event Layer 렌더링 함수
5202
+ */
5203
+
5204
+ var renderPolygonEventWithHybrid = function (customStyle, baseFillColor, baseStrokeColor, baseLineWidth, selectedFillColor, selectedStrokeColor, selectedLineWidth, activeFillColor, activeStrokeColor, activeLineWidth, hoveredFillColor, hoveredStrokeColor, hoveredLineWidth) {
5205
+ // 기본값 설정 (base 기준)
5206
+ var _selectedFillColor = selectedFillColor || baseFillColor;
5207
+
5208
+ var _selectedStrokeColor = selectedStrokeColor || baseStrokeColor;
5209
+
5210
+ var _selectedLineWidth = selectedLineWidth || baseLineWidth;
5211
+
5212
+ var _activeFillColor = activeFillColor || _selectedFillColor;
5213
+
5214
+ var _activeStrokeColor = activeStrokeColor || _selectedStrokeColor;
5215
+
5216
+ var _activeLineWidth = activeLineWidth || _selectedLineWidth;
5217
+
5218
+ var _hoveredFillColor = hoveredFillColor || _selectedFillColor;
5219
+
5220
+ var _hoveredStrokeColor = hoveredStrokeColor || _selectedStrokeColor;
5221
+
5222
+ var _hoveredLineWidth = hoveredLineWidth || _selectedLineWidth;
5223
+
5224
+ return function (_a) {
5225
+ var ctx = _a.ctx,
5226
+ hoveredItem = _a.hoveredItem,
5227
+ selectedItem = _a.selectedItem,
5228
+ selectedItems = _a.selectedItems,
5229
+ utils = _a.utils; // 성능 최적화: selectedItems를 Set으로 변환하여 O(1) 조회 (매번 some() 체크 방지)
5230
+
5231
+ var selectedIdsSet = selectedItems ? new Set(selectedItems.map(function (item) {
5232
+ return item.id;
5233
+ })) : new Set();
5234
+ var hoveredItemId = hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.id;
5235
+ var selectedItemId = selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.id; // 1. 선택된 항목들 그리기 (마지막 선택 항목과 호버된 항목 제외)
5236
+
5237
+ if (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) {
5238
+ for (var _i = 0, selectedItems_4 = selectedItems; _i < selectedItems_4.length; _i++) {
5239
+ var item = selectedItems_4[_i]; // 마지막 선택 항목과 호버된 항목은 나중에 따로 그림
5240
+
5241
+ if (item.id === selectedItemId || item.id === hoveredItemId) continue;
5242
+ if (!item.paths) continue;
5243
+ var polygonOffsets = utils.getOrComputePolygonOffsets(item);
5244
+ if (!polygonOffsets) continue; // customStyle이 있으면 우선 사용, 없거나 null/undefined 반환 시 기본 스타일 사용
5245
+
5246
+ var style = void 0;
5247
+
5248
+ if (customStyle) {
5249
+ var context = {
5250
+ isActive: false,
5251
+ isHovered: false,
5252
+ isSelected: true
5253
+ };
5254
+ style = customStyle(item, context);
5255
+ } // customStyle이 없거나 null/undefined를 반환하면 기본 스타일 사용
5256
+
5257
+
5258
+ if (!style) {
5259
+ style = {
5260
+ fillColor: _selectedFillColor,
5261
+ lineWidth: _selectedLineWidth,
5262
+ strokeColor: _selectedStrokeColor
5263
+ };
5264
+ }
5265
+
5266
+ drawPolygon({
5267
+ ctx: ctx,
5268
+ fillColor: style.fillColor,
5269
+ isDonutPolygon: item.isDonutPolygon || false,
5270
+ lineWidth: style.lineWidth,
5271
+ polygonOffsets: polygonOffsets,
5272
+ strokeColor: style.strokeColor
5273
+ });
5274
+ }
5275
+ } // 2. 마지막 선택된 항목 그리기 (호버되지 않은 경우)
5276
+
5277
+
5278
+ if ((selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.paths) && hoveredItemId !== selectedItemId) {
5279
+ var polygonOffsets = utils.getOrComputePolygonOffsets(selectedItem);
5280
+
5281
+ if (polygonOffsets) {
5282
+ // customStyle이 있으면 우선 사용, 없거나 null/undefined 반환 시 기본 스타일 사용
5283
+ var style = void 0;
5284
+
5285
+ if (customStyle) {
5286
+ var context = {
5287
+ isActive: true,
5288
+ isHovered: false,
5289
+ isSelected: true
5290
+ };
5291
+ style = customStyle(selectedItem, context);
5292
+ } // customStyle이 없거나 null/undefined를 반환하면 기본 스타일 사용
5293
+
5294
+
5295
+ if (!style) {
5296
+ style = {
5297
+ fillColor: _activeFillColor,
5298
+ lineWidth: _activeLineWidth,
5299
+ strokeColor: _activeStrokeColor
5300
+ };
5301
+ }
5302
+
5303
+ drawPolygon({
5304
+ ctx: ctx,
5305
+ fillColor: style.fillColor,
5306
+ isDonutPolygon: selectedItem.isDonutPolygon || false,
5307
+ lineWidth: style.lineWidth,
5308
+ polygonOffsets: polygonOffsets,
5309
+ strokeColor: style.strokeColor
5310
+ });
5311
+ }
5312
+ } // 3. 호버된 항목 그리기 (가장 위에 표시)
5313
+
5314
+
5315
+ if (hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.paths) {
5316
+ var polygonOffsets = utils.getOrComputePolygonOffsets(hoveredItem); // 좌표 변환 실패 시 스킵 (return은 렌더링 함수 종료)
5317
+
5318
+ if (!polygonOffsets) return; // 성능 최적화: Set을 사용하여 O(1) 조회 (이전: O(m) some() 체크)
5319
+
5320
+ var isSelected = selectedIdsSet.has(hoveredItem.id); // customStyle이 있으면 우선 사용, 없거나 null/undefined 반환 시 기본 스타일 사용
5321
+
5322
+ var style = void 0;
5323
+
5324
+ if (customStyle) {
5325
+ var context = {
5326
+ isActive: isSelected && hoveredItem.id === selectedItemId,
5327
+ isHovered: !isSelected,
5328
+ isSelected: isSelected
5329
+ };
5330
+ style = customStyle(hoveredItem, context);
5331
+ } // customStyle이 없거나 null/undefined를 반환하면 기본 스타일 사용
5332
+
5333
+
5334
+ if (!style) {
5335
+ style = {
5336
+ fillColor: isSelected ? _activeFillColor : _hoveredFillColor,
5337
+ lineWidth: isSelected ? _activeLineWidth : _hoveredLineWidth,
5338
+ strokeColor: isSelected ? _activeStrokeColor : _hoveredStrokeColor
5339
+ };
5340
+ }
5341
+
5342
+ drawPolygon({
5343
+ ctx: ctx,
5344
+ fillColor: style.fillColor,
5345
+ isDonutPolygon: hoveredItem.isDonutPolygon || false,
5346
+ lineWidth: style.lineWidth,
5347
+ polygonOffsets: polygonOffsets,
5348
+ strokeColor: style.strokeColor
5349
+ });
5350
+ }
5351
+ };
5352
+ };
5353
+ /**
5354
+ * 폴리곤 Base 렌더링 함수 팩토리 (하이브리드 방식: customStyle + renderStyle)
5355
+ *
5356
+ * Base Layer에서 사용할 렌더링 함수를 생성합니다.
5357
+ * customStyle이 제공되면 우선적으로 사용하며, null/undefined를 반환하면 renderStyle로 정의된 기본 스타일을 사용합니다.
5358
+ *
5359
+ * @template T 폴리곤 데이터의 추가 속성 타입
5360
+ * @param customStyle 폴리곤 스타일 커스터마이징 함수 (선택)
5361
+ * @param renderStyle 폴리곤 스타일 객체 (fallback용)
5362
+ * @returns Base Layer 렌더링 함수
5363
+ */
5364
+
5365
+ var renderPolygonBaseWithHybridObject = function (customStyle, renderStyle) {
5366
+ return function (_a) {
5367
+ var ctx = _a.ctx,
5368
+ items = _a.items,
5369
+ selectedIds = _a.selectedIds,
5370
+ utils = _a.utils;
5371
+
5372
+ for (var _i = 0, items_5 = items; _i < items_5.length; _i++) {
5373
+ var item = items_5[_i]; // 선택된 항목은 Event Layer에서 그림 (중복 렌더링 방지)
5374
+
5375
+ if (selectedIds.has(item.id)) continue; // paths가 없으면 스킵
5376
+
5377
+ if (!item.paths) continue; // 좌표 변환 (자동 캐싱)
5378
+
5379
+ var polygonOffsets = utils.getOrComputePolygonOffsets(item);
5380
+ if (!polygonOffsets) continue; // customStyle이 있으면 우선 사용, 없거나 null/undefined 반환 시 기본 스타일 사용
5381
+
5382
+ var style = void 0;
5383
+
5384
+ if (customStyle) {
5385
+ var context = {
5386
+ isActive: false,
5387
+ isHovered: false,
5388
+ isSelected: false
5389
+ };
5390
+ style = customStyle(item, context);
5391
+ } // customStyle이 없거나 null/undefined를 반환하면 기본 스타일 사용
5392
+
5393
+
5394
+ if (!style) {
5395
+ style = renderStyle.base;
5396
+ } // 폴리곤 그리기
5397
+
5398
+
5399
+ drawPolygon({
5400
+ ctx: ctx,
5401
+ fillColor: style.fillColor,
5402
+ isDonutPolygon: item.isDonutPolygon || false,
5403
+ lineWidth: style.lineWidth,
5404
+ polygonOffsets: polygonOffsets,
5405
+ strokeColor: style.strokeColor
5406
+ });
5407
+ }
5408
+ };
5409
+ };
5410
+ /**
5411
+ * 폴리곤 Event 렌더링 함수 팩토리 (하이브리드 방식: customStyle + renderStyle)
5412
+ *
5413
+ * Event Layer에서 사용할 렌더링 함수를 생성합니다.
5414
+ * customStyle이 제공되면 우선적으로 사용하며, null/undefined를 반환하면 renderStyle로 정의된 기본 스타일을 사용합니다.
5415
+ *
5416
+ * @template T 폴리곤 데이터의 추가 속성 타입
5417
+ * @param customStyle 폴리곤 스타일 커스터마이징 함수 (선택)
5418
+ * @param renderStyle 폴리곤 스타일 객체 (fallback용)
5419
+ * @returns Event Layer 렌더링 함수
5420
+ */
5421
+
5422
+ var renderPolygonEventWithHybridObject = function (customStyle, renderStyle) {
5423
+ // 기본값 설정 (개별 props 방식과 동일한 로직)
5424
+ var _selectedStyle = renderStyle.selected || renderStyle.base;
5425
+
5426
+ var _activeStyle = renderStyle.active || _selectedStyle;
5427
+
5428
+ var _hoveredStyle = renderStyle.hovered || _selectedStyle;
5429
+
5430
+ return function (_a) {
5431
+ var ctx = _a.ctx,
5432
+ hoveredItem = _a.hoveredItem,
5433
+ selectedItem = _a.selectedItem,
5434
+ selectedItems = _a.selectedItems,
5435
+ utils = _a.utils; // 성능 최적화: selectedItems를 Set으로 변환하여 O(1) 조회 (매번 some() 체크 방지)
5436
+
5437
+ var selectedIdsSet = selectedItems ? new Set(selectedItems.map(function (item) {
5438
+ return item.id;
5439
+ })) : new Set();
5440
+ var hoveredItemId = hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.id;
5441
+ var selectedItemId = selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.id; // 1. 선택된 항목들 그리기 (마지막 선택 항목과 호버된 항목 제외)
5442
+
5443
+ if (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) {
5444
+ for (var _i = 0, selectedItems_5 = selectedItems; _i < selectedItems_5.length; _i++) {
5445
+ var item = selectedItems_5[_i]; // 마지막 선택 항목과 호버된 항목은 나중에 따로 그림
5446
+
5447
+ if (item.id === selectedItemId || item.id === hoveredItemId) continue;
5448
+ if (!item.paths) continue;
5449
+ var polygonOffsets = utils.getOrComputePolygonOffsets(item);
5450
+ if (!polygonOffsets) continue; // customStyle이 있으면 우선 사용, 없거나 null/undefined 반환 시 기본 스타일 사용
5451
+
5452
+ var style = void 0;
5453
+
5454
+ if (customStyle) {
5455
+ var context = {
5456
+ isActive: false,
5457
+ isHovered: false,
5458
+ isSelected: true
5459
+ };
5460
+ style = customStyle(item, context);
5461
+ } // customStyle이 없거나 null/undefined를 반환하면 기본 스타일 사용
5462
+
5463
+
5464
+ if (!style) {
5465
+ style = _selectedStyle;
5466
+ }
5467
+
5468
+ drawPolygon({
5469
+ ctx: ctx,
5470
+ fillColor: style.fillColor,
5471
+ isDonutPolygon: item.isDonutPolygon || false,
5472
+ lineWidth: style.lineWidth,
5473
+ polygonOffsets: polygonOffsets,
5474
+ strokeColor: style.strokeColor
5475
+ });
5476
+ }
5477
+ } // 2. 마지막 선택된 항목 그리기 (호버되지 않은 경우)
5478
+
5479
+
5480
+ if ((selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.paths) && hoveredItemId !== selectedItemId) {
5481
+ var polygonOffsets = utils.getOrComputePolygonOffsets(selectedItem);
5482
+
5483
+ if (polygonOffsets) {
5484
+ // customStyle이 있으면 우선 사용, 없거나 null/undefined 반환 시 기본 스타일 사용
5485
+ var style = void 0;
5486
+
5487
+ if (customStyle) {
5488
+ var context = {
5489
+ isActive: true,
5490
+ isHovered: false,
5491
+ isSelected: true
5492
+ };
5493
+ style = customStyle(selectedItem, context);
5494
+ } // customStyle이 없거나 null/undefined를 반환하면 기본 스타일 사용
5495
+
5496
+
5497
+ if (!style) {
5498
+ style = _activeStyle;
5499
+ }
5500
+
5501
+ drawPolygon({
5502
+ ctx: ctx,
5503
+ fillColor: style.fillColor,
5504
+ isDonutPolygon: selectedItem.isDonutPolygon || false,
5505
+ lineWidth: style.lineWidth,
5506
+ polygonOffsets: polygonOffsets,
5507
+ strokeColor: style.strokeColor
5508
+ });
5509
+ }
5510
+ } // 3. 호버된 항목 그리기 (가장 위에 표시)
5511
+
5512
+
5513
+ if (hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.paths) {
5514
+ var polygonOffsets = utils.getOrComputePolygonOffsets(hoveredItem); // 좌표 변환 실패 시 스킵 (return은 렌더링 함수 종료)
5515
+
5516
+ if (!polygonOffsets) return; // 성능 최적화: Set을 사용하여 O(1) 조회 (이전: O(m) some() 체크)
5517
+
5518
+ var isSelected = selectedIdsSet.has(hoveredItem.id); // customStyle이 있으면 우선 사용, 없거나 null/undefined 반환 시 기본 스타일 사용
5519
+
5520
+ var style = void 0;
5521
+
5522
+ if (customStyle) {
5523
+ var context = {
5524
+ isActive: isSelected && hoveredItem.id === selectedItemId,
5525
+ isHovered: !isSelected,
5526
+ isSelected: isSelected
5527
+ };
5528
+ style = customStyle(hoveredItem, context);
5529
+ } // customStyle이 없거나 null/undefined를 반환하면 기본 스타일 사용
5530
+
5531
+
5532
+ if (!style) {
5533
+ style = isSelected ? _activeStyle : _hoveredStyle;
5534
+ }
5535
+
5536
+ drawPolygon({
5537
+ ctx: ctx,
5538
+ fillColor: style.fillColor,
5539
+ isDonutPolygon: hoveredItem.isDonutPolygon || false,
5540
+ lineWidth: style.lineWidth,
5541
+ polygonOffsets: polygonOffsets,
5542
+ strokeColor: style.strokeColor
5543
+ });
5544
+ }
5545
+ };
5546
+ };
5150
5547
 
5151
5548
  var CanvasPolygonLayer = function (props) {
5152
5549
  var data = props.data,
@@ -5163,14 +5560,14 @@
5163
5560
  externalSelectedItem = props.selectedItem,
5164
5561
  _e = props.disableInteraction,
5165
5562
  disableInteraction = _e === void 0 ? false : _e,
5166
- options = tslib.__rest(props, ["data", "onClick", "enableMultiSelect", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disableInteraction"]); // 세 가지 방식 중 하나만 선택: customStyle > renderStyle > 개별 props
5563
+ options = tslib.__rest(props, ["data", "onClick", "enableMultiSelect", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disableInteraction"]); // customStyle 다른 방식과 함께 사용 가능
5167
5564
 
5168
5565
 
5169
- var isCustomStyleMode = 'customStyle' in props && props.customStyle !== undefined;
5170
- var isObjectMode = !isCustomStyleMode && 'renderStyle' in props && props.renderStyle !== undefined;
5171
- var isIndividualMode = !isCustomStyleMode && !isObjectMode; // 각 방식별 props 추출
5566
+ var hasCustomStyle = 'customStyle' in props && props.customStyle !== undefined;
5567
+ var isObjectMode = 'renderStyle' in props && props.renderStyle !== undefined;
5568
+ var isIndividualMode = 'baseFillColor' in props && props.baseFillColor !== undefined; // 각 방식별 props 추출
5172
5569
 
5173
- var customStyleProps = isCustomStyleMode ? props : undefined;
5570
+ var customStyle = hasCustomStyle ? props.customStyle : undefined;
5174
5571
  var individualProps = isIndividualMode ? props : undefined;
5175
5572
  var objectProps = isObjectMode ? props : undefined; // --------------------------------------------------------------------------
5176
5573
  // Hooks & Context
@@ -5280,17 +5677,32 @@
5280
5677
  }; // 렌더링 함수 생성 (스타일 지정 방식에 따라 분기)
5281
5678
 
5282
5679
  var renderBase;
5283
- var renderEvent;
5284
-
5285
- if (isCustomStyleMode && customStyleProps) {
5286
- renderBase = renderPolygonBaseWithCustomStyle(customStyleProps.customStyle);
5287
- renderEvent = renderPolygonEventWithCustomStyle(customStyleProps.customStyle);
5288
- } else if (isObjectMode && objectProps) {
5289
- renderBase = renderPolygonBaseWithObject(objectProps.renderStyle);
5290
- renderEvent = renderPolygonEventWithObject(objectProps.renderStyle);
5680
+ var renderEvent; // customStyle이 있으면 하이브리드 방식 사용, 없으면 기존 방식 사용
5681
+
5682
+ if (isObjectMode && objectProps) {
5683
+ if (hasCustomStyle) {
5684
+ // customStyle + renderStyle 하이브리드
5685
+ renderBase = renderPolygonBaseWithHybridObject(customStyle, objectProps.renderStyle);
5686
+ renderEvent = renderPolygonEventWithHybridObject(customStyle, objectProps.renderStyle);
5687
+ } else {
5688
+ // renderStyle만 사용
5689
+ renderBase = renderPolygonBaseWithObject(objectProps.renderStyle);
5690
+ renderEvent = renderPolygonEventWithObject(objectProps.renderStyle);
5691
+ }
5291
5692
  } else if (isIndividualMode && individualProps) {
5292
- renderBase = renderPolygonBase(individualProps.baseFillColor, individualProps.baseStrokeColor, individualProps.baseLineWidth);
5293
- renderEvent = renderPolygonEvent(individualProps.baseFillColor, individualProps.baseStrokeColor, individualProps.baseLineWidth, individualProps.selectedFillColor, individualProps.selectedStrokeColor, individualProps.selectedLineWidth, individualProps.activeFillColor, individualProps.activeStrokeColor, individualProps.activeLineWidth, individualProps.hoveredFillColor, individualProps.hoveredStrokeColor, individualProps.hoveredLineWidth);
5693
+ if (hasCustomStyle) {
5694
+ // customStyle + 개별 props 하이브리드
5695
+ renderBase = renderPolygonBaseWithHybrid(customStyle, individualProps.baseFillColor, individualProps.baseStrokeColor, individualProps.baseLineWidth);
5696
+ renderEvent = renderPolygonEventWithHybrid(customStyle, individualProps.baseFillColor, individualProps.baseStrokeColor, individualProps.baseLineWidth, individualProps.selectedFillColor, individualProps.selectedStrokeColor, individualProps.selectedLineWidth, individualProps.activeFillColor, individualProps.activeStrokeColor, individualProps.activeLineWidth, individualProps.hoveredFillColor, individualProps.hoveredStrokeColor, individualProps.hoveredLineWidth);
5697
+ } else {
5698
+ // 개별 props만 사용
5699
+ renderBase = renderPolygonBase(individualProps.baseFillColor, individualProps.baseStrokeColor, individualProps.baseLineWidth);
5700
+ renderEvent = renderPolygonEvent(individualProps.baseFillColor, individualProps.baseStrokeColor, individualProps.baseLineWidth, individualProps.selectedFillColor, individualProps.selectedStrokeColor, individualProps.selectedLineWidth, individualProps.activeFillColor, individualProps.activeStrokeColor, individualProps.activeLineWidth, individualProps.hoveredFillColor, individualProps.hoveredStrokeColor, individualProps.hoveredLineWidth);
5701
+ }
5702
+ } else if (hasCustomStyle && customStyle) {
5703
+ // customStyle만 사용 (기존 방식)
5704
+ renderBase = renderPolygonBaseWithCustomStyle(customStyle);
5705
+ renderEvent = renderPolygonEventWithCustomStyle(customStyle);
5294
5706
  } else {
5295
5707
  throw new Error('Invalid props: one of customStyle, renderStyle, or individual style props must be provided');
5296
5708
  } // Base Layer 렌더링 (뷰포트 컬링 적용)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mint-ui/map",
3
- "version": "1.2.0-test.56",
3
+ "version": "1.2.0-test.57",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.es.js",
6
6
  "browser": "./dist/index.umd.js",