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