@mint-ui/map 1.2.0-test.55 → 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/components/mint-map/core/advanced/CanvasPolygonLayer/CanvasPolygonLayer.d.ts +16 -3
- package/dist/components/mint-map/core/advanced/CanvasPolygonLayer/CanvasPolygonLayer.js +30 -15
- package/dist/components/mint-map/core/advanced/CanvasPolygonLayer/renderer.d.ts +61 -0
- package/dist/components/mint-map/core/advanced/CanvasPolygonLayer/renderer.js +433 -0
- package/dist/index.es.js +459 -15
- package/dist/index.umd.js +459 -15
- package/package.json +1 -1
|
@@ -139,7 +139,13 @@ interface CanvasPolygonLayerPropsWithIndividualStyles<T> extends CanvasPolygonLa
|
|
|
139
139
|
hoveredLineWidth?: number;
|
|
140
140
|
/** 다른 방식 props는 사용 불가 */
|
|
141
141
|
renderStyle?: never;
|
|
142
|
-
|
|
142
|
+
/**
|
|
143
|
+
* 폴리곤 스타일 커스터마이징 함수 (선택)
|
|
144
|
+
*
|
|
145
|
+
* customStyle이 제공되면 우선적으로 사용되며, null/undefined를 반환하면 개별 props로 정의된 기본 스타일을 사용합니다.
|
|
146
|
+
* item 데이터와 상태 정보를 기반으로 자유롭게 스타일을 커스터마이징할 수 있습니다.
|
|
147
|
+
*/
|
|
148
|
+
customStyle?: PolygonStyleCustomizer<T>;
|
|
143
149
|
}
|
|
144
150
|
/**
|
|
145
151
|
* 객체 Props 방식
|
|
@@ -171,13 +177,19 @@ interface CanvasPolygonLayerPropsWithObjectStyle<T> extends CanvasPolygonLayerBa
|
|
|
171
177
|
baseFillColor?: never;
|
|
172
178
|
baseLineWidth?: never;
|
|
173
179
|
baseStrokeColor?: never;
|
|
174
|
-
customStyle?: never;
|
|
175
180
|
hoveredFillColor?: never;
|
|
176
181
|
hoveredLineWidth?: never;
|
|
177
182
|
hoveredStrokeColor?: never;
|
|
178
183
|
selectedFillColor?: never;
|
|
179
184
|
selectedLineWidth?: never;
|
|
180
185
|
selectedStrokeColor?: never;
|
|
186
|
+
/**
|
|
187
|
+
* 폴리곤 스타일 커스터마이징 함수 (선택)
|
|
188
|
+
*
|
|
189
|
+
* customStyle이 제공되면 우선적으로 사용되며, null/undefined를 반환하면 renderStyle로 정의된 기본 스타일을 사용합니다.
|
|
190
|
+
* item 데이터와 상태 정보를 기반으로 자유롭게 스타일을 커스터마이징할 수 있습니다.
|
|
191
|
+
*/
|
|
192
|
+
customStyle?: PolygonStyleCustomizer<T>;
|
|
181
193
|
}
|
|
182
194
|
/**
|
|
183
195
|
* 함수 Props 방식 (커스터마이징 방식)
|
|
@@ -240,7 +252,8 @@ interface CanvasPolygonLayerPropsWithCustomStyle<T> extends CanvasPolygonLayerBa
|
|
|
240
252
|
* 2. 객체 방식: renderStyle 객체가 있으면 자동으로 객체 방식
|
|
241
253
|
* 3. 함수 방식: customStyle 함수가 있으면 자동으로 함수 방식
|
|
242
254
|
*
|
|
243
|
-
*
|
|
255
|
+
* customStyle은 개별 props 방식 또는 renderStyle 객체 방식과 함께 사용할 수 있습니다.
|
|
256
|
+
* customStyle이 제공되면 우선적으로 사용되며, null/undefined를 반환하면 기본 스타일을 사용합니다.
|
|
244
257
|
* styleMode prop은 필요 없으며, 각 prop의 존재 여부로 자동 판단됩니다.
|
|
245
258
|
*
|
|
246
259
|
* @template T 폴리곤 데이터의 추가 속성 타입
|
|
@@ -39,14 +39,14 @@ var CanvasPolygonLayer = function (props) {
|
|
|
39
39
|
externalSelectedItem = props.selectedItem,
|
|
40
40
|
_e = props.disableInteraction,
|
|
41
41
|
disableInteraction = _e === void 0 ? false : _e,
|
|
42
|
-
options = tslib.__rest(props, ["data", "onClick", "enableMultiSelect", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disableInteraction"]); //
|
|
42
|
+
options = tslib.__rest(props, ["data", "onClick", "enableMultiSelect", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disableInteraction"]); // customStyle은 다른 방식과 함께 사용 가능
|
|
43
43
|
|
|
44
44
|
|
|
45
|
-
var
|
|
46
|
-
var isObjectMode =
|
|
47
|
-
var isIndividualMode =
|
|
45
|
+
var hasCustomStyle = 'customStyle' in props && props.customStyle !== undefined;
|
|
46
|
+
var isObjectMode = 'renderStyle' in props && props.renderStyle !== undefined;
|
|
47
|
+
var isIndividualMode = 'baseFillColor' in props && props.baseFillColor !== undefined; // 각 방식별 props 추출
|
|
48
48
|
|
|
49
|
-
var
|
|
49
|
+
var customStyle = hasCustomStyle ? props.customStyle : undefined;
|
|
50
50
|
var individualProps = isIndividualMode ? props : undefined;
|
|
51
51
|
var objectProps = isObjectMode ? props : undefined; // --------------------------------------------------------------------------
|
|
52
52
|
// Hooks & Context
|
|
@@ -156,17 +156,32 @@ var CanvasPolygonLayer = function (props) {
|
|
|
156
156
|
}; // 렌더링 함수 생성 (스타일 지정 방식에 따라 분기)
|
|
157
157
|
|
|
158
158
|
var renderBase;
|
|
159
|
-
var renderEvent;
|
|
160
|
-
|
|
161
|
-
if (
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
159
|
+
var renderEvent; // customStyle이 있으면 하이브리드 방식 사용, 없으면 기존 방식 사용
|
|
160
|
+
|
|
161
|
+
if (isObjectMode && objectProps) {
|
|
162
|
+
if (hasCustomStyle) {
|
|
163
|
+
// customStyle + renderStyle 하이브리드
|
|
164
|
+
renderBase = renderer.renderPolygonBaseWithHybridObject(customStyle, objectProps.renderStyle);
|
|
165
|
+
renderEvent = renderer.renderPolygonEventWithHybridObject(customStyle, objectProps.renderStyle);
|
|
166
|
+
} else {
|
|
167
|
+
// renderStyle만 사용
|
|
168
|
+
renderBase = renderer.renderPolygonBaseWithObject(objectProps.renderStyle);
|
|
169
|
+
renderEvent = renderer.renderPolygonEventWithObject(objectProps.renderStyle);
|
|
170
|
+
}
|
|
167
171
|
} else if (isIndividualMode && individualProps) {
|
|
168
|
-
|
|
169
|
-
|
|
172
|
+
if (hasCustomStyle) {
|
|
173
|
+
// customStyle + 개별 props 하이브리드
|
|
174
|
+
renderBase = renderer.renderPolygonBaseWithHybrid(customStyle, individualProps.baseFillColor, individualProps.baseStrokeColor, individualProps.baseLineWidth);
|
|
175
|
+
renderEvent = renderer.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);
|
|
176
|
+
} else {
|
|
177
|
+
// 개별 props만 사용
|
|
178
|
+
renderBase = renderer.renderPolygonBase(individualProps.baseFillColor, individualProps.baseStrokeColor, individualProps.baseLineWidth);
|
|
179
|
+
renderEvent = renderer.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);
|
|
180
|
+
}
|
|
181
|
+
} else if (hasCustomStyle && customStyle) {
|
|
182
|
+
// customStyle만 사용 (기존 방식)
|
|
183
|
+
renderBase = renderer.renderPolygonBaseWithCustomStyle(customStyle);
|
|
184
|
+
renderEvent = renderer.renderPolygonEventWithCustomStyle(customStyle);
|
|
170
185
|
} else {
|
|
171
186
|
throw new Error('Invalid props: one of customStyle, renderStyle, or individual style props must be provided');
|
|
172
187
|
} // Base Layer 렌더링 (뷰포트 컬링 적용)
|
|
@@ -239,4 +239,65 @@ export declare const renderPolygonBaseWithCustomStyle: <T = unknown>(customStyle
|
|
|
239
239
|
* ```
|
|
240
240
|
*/
|
|
241
241
|
export declare const renderPolygonEventWithCustomStyle: <T = unknown>(customStyle: PolygonStyleCustomizer<T>) => CustomRenderEvent<T>;
|
|
242
|
+
/**
|
|
243
|
+
* 폴리곤 Base 렌더링 함수 팩토리 (하이브리드 방식: customStyle + 개별 props)
|
|
244
|
+
*
|
|
245
|
+
* Base Layer에서 사용할 렌더링 함수를 생성합니다.
|
|
246
|
+
* customStyle이 제공되면 우선적으로 사용하며, null/undefined를 반환하면 개별 props로 정의된 기본 스타일을 사용합니다.
|
|
247
|
+
*
|
|
248
|
+
* @template T 폴리곤 데이터의 추가 속성 타입
|
|
249
|
+
* @param customStyle 폴리곤 스타일 커스터마이징 함수 (선택)
|
|
250
|
+
* @param baseFillColor 기본 폴리곤 채우기 색상 (fallback용)
|
|
251
|
+
* @param baseStrokeColor 기본 폴리곤 테두리 색상 (fallback용)
|
|
252
|
+
* @param baseLineWidth 기본 폴리곤 테두리 두께 (fallback용)
|
|
253
|
+
* @returns Base Layer 렌더링 함수
|
|
254
|
+
*/
|
|
255
|
+
export declare const renderPolygonBaseWithHybrid: <T = unknown>(customStyle: PolygonStyleCustomizer<T> | undefined, baseFillColor: string, baseStrokeColor: string, baseLineWidth: number) => CustomRenderBase<T>;
|
|
256
|
+
/**
|
|
257
|
+
* 폴리곤 Event 렌더링 함수 팩토리 (하이브리드 방식: customStyle + 개별 props)
|
|
258
|
+
*
|
|
259
|
+
* Event Layer에서 사용할 렌더링 함수를 생성합니다.
|
|
260
|
+
* customStyle이 제공되면 우선적으로 사용하며, null/undefined를 반환하면 개별 props로 정의된 기본 스타일을 사용합니다.
|
|
261
|
+
*
|
|
262
|
+
* @template T 폴리곤 데이터의 추가 속성 타입
|
|
263
|
+
* @param customStyle 폴리곤 스타일 커스터마이징 함수 (선택)
|
|
264
|
+
* @param baseFillColor 기본 폴리곤 채우기 색상 (fallback용)
|
|
265
|
+
* @param baseStrokeColor 기본 폴리곤 테두리 색상 (fallback용)
|
|
266
|
+
* @param baseLineWidth 기본 폴리곤 테두리 두께 (fallback용)
|
|
267
|
+
* @param selectedFillColor 선택된 폴리곤 채우기 색상 (fallback용)
|
|
268
|
+
* @param selectedStrokeColor 선택된 폴리곤 테두리 색상 (fallback용)
|
|
269
|
+
* @param selectedLineWidth 선택된 폴리곤 테두리 두께 (fallback용)
|
|
270
|
+
* @param activeFillColor 마지막 선택된 폴리곤 채우기 색상 (fallback용)
|
|
271
|
+
* @param activeStrokeColor 마지막 선택된 폴리곤 테두리 색상 (fallback용)
|
|
272
|
+
* @param activeLineWidth 마지막 선택된 폴리곤 테두리 두께 (fallback용)
|
|
273
|
+
* @param hoveredFillColor Hover 시 폴리곤 채우기 색상 (fallback용)
|
|
274
|
+
* @param hoveredStrokeColor Hover 시 폴리곤 테두리 색상 (fallback용)
|
|
275
|
+
* @param hoveredLineWidth Hover 시 폴리곤 테두리 두께 (fallback용)
|
|
276
|
+
* @returns Event Layer 렌더링 함수
|
|
277
|
+
*/
|
|
278
|
+
export declare const renderPolygonEventWithHybrid: <T = unknown>(customStyle: PolygonStyleCustomizer<T> | undefined, baseFillColor: string, baseStrokeColor: string, baseLineWidth: number, selectedFillColor: string | undefined, selectedStrokeColor: string | undefined, selectedLineWidth: number | undefined, activeFillColor: string | undefined, activeStrokeColor: string | undefined, activeLineWidth: number | undefined, hoveredFillColor: string | undefined, hoveredStrokeColor: string | undefined, hoveredLineWidth: number | undefined) => CustomRenderEvent<T>;
|
|
279
|
+
/**
|
|
280
|
+
* 폴리곤 Base 렌더링 함수 팩토리 (하이브리드 방식: customStyle + renderStyle)
|
|
281
|
+
*
|
|
282
|
+
* Base Layer에서 사용할 렌더링 함수를 생성합니다.
|
|
283
|
+
* customStyle이 제공되면 우선적으로 사용하며, null/undefined를 반환하면 renderStyle로 정의된 기본 스타일을 사용합니다.
|
|
284
|
+
*
|
|
285
|
+
* @template T 폴리곤 데이터의 추가 속성 타입
|
|
286
|
+
* @param customStyle 폴리곤 스타일 커스터마이징 함수 (선택)
|
|
287
|
+
* @param renderStyle 폴리곤 스타일 객체 (fallback용)
|
|
288
|
+
* @returns Base Layer 렌더링 함수
|
|
289
|
+
*/
|
|
290
|
+
export declare const renderPolygonBaseWithHybridObject: <T = unknown>(customStyle: PolygonStyleCustomizer<T> | undefined, renderStyle: PolygonStyleObject) => CustomRenderBase<T>;
|
|
291
|
+
/**
|
|
292
|
+
* 폴리곤 Event 렌더링 함수 팩토리 (하이브리드 방식: customStyle + renderStyle)
|
|
293
|
+
*
|
|
294
|
+
* Event Layer에서 사용할 렌더링 함수를 생성합니다.
|
|
295
|
+
* customStyle이 제공되면 우선적으로 사용하며, null/undefined를 반환하면 renderStyle로 정의된 기본 스타일을 사용합니다.
|
|
296
|
+
*
|
|
297
|
+
* @template T 폴리곤 데이터의 추가 속성 타입
|
|
298
|
+
* @param customStyle 폴리곤 스타일 커스터마이징 함수 (선택)
|
|
299
|
+
* @param renderStyle 폴리곤 스타일 객체 (fallback용)
|
|
300
|
+
* @returns Event Layer 렌더링 함수
|
|
301
|
+
*/
|
|
302
|
+
export declare const renderPolygonEventWithHybridObject: <T = unknown>(customStyle: PolygonStyleCustomizer<T> | undefined, renderStyle: PolygonStyleObject) => CustomRenderEvent<T>;
|
|
242
303
|
export {};
|
|
@@ -648,11 +648,444 @@ var renderPolygonEventWithCustomStyle = function (customStyle) {
|
|
|
648
648
|
}
|
|
649
649
|
};
|
|
650
650
|
};
|
|
651
|
+
/**
|
|
652
|
+
* 폴리곤 Base 렌더링 함수 팩토리 (하이브리드 방식: customStyle + 개별 props)
|
|
653
|
+
*
|
|
654
|
+
* Base Layer에서 사용할 렌더링 함수를 생성합니다.
|
|
655
|
+
* customStyle이 제공되면 우선적으로 사용하며, null/undefined를 반환하면 개별 props로 정의된 기본 스타일을 사용합니다.
|
|
656
|
+
*
|
|
657
|
+
* @template T 폴리곤 데이터의 추가 속성 타입
|
|
658
|
+
* @param customStyle 폴리곤 스타일 커스터마이징 함수 (선택)
|
|
659
|
+
* @param baseFillColor 기본 폴리곤 채우기 색상 (fallback용)
|
|
660
|
+
* @param baseStrokeColor 기본 폴리곤 테두리 색상 (fallback용)
|
|
661
|
+
* @param baseLineWidth 기본 폴리곤 테두리 두께 (fallback용)
|
|
662
|
+
* @returns Base Layer 렌더링 함수
|
|
663
|
+
*/
|
|
664
|
+
|
|
665
|
+
var renderPolygonBaseWithHybrid = function (customStyle, baseFillColor, baseStrokeColor, baseLineWidth) {
|
|
666
|
+
return function (_a) {
|
|
667
|
+
var ctx = _a.ctx,
|
|
668
|
+
items = _a.items,
|
|
669
|
+
selectedIds = _a.selectedIds,
|
|
670
|
+
utils = _a.utils;
|
|
671
|
+
|
|
672
|
+
for (var _i = 0, items_4 = items; _i < items_4.length; _i++) {
|
|
673
|
+
var item = items_4[_i]; // 선택된 항목은 Event Layer에서 그림 (중복 렌더링 방지)
|
|
674
|
+
|
|
675
|
+
if (selectedIds.has(item.id)) continue; // paths가 없으면 스킵
|
|
676
|
+
|
|
677
|
+
if (!item.paths) continue; // 좌표 변환 (자동 캐싱)
|
|
678
|
+
|
|
679
|
+
var polygonOffsets = utils.getOrComputePolygonOffsets(item);
|
|
680
|
+
if (!polygonOffsets) continue; // customStyle이 있으면 우선 사용, 없거나 null/undefined 반환 시 기본 스타일 사용
|
|
681
|
+
|
|
682
|
+
var style = void 0;
|
|
683
|
+
|
|
684
|
+
if (customStyle) {
|
|
685
|
+
var context = {
|
|
686
|
+
isActive: false,
|
|
687
|
+
isHovered: false,
|
|
688
|
+
isSelected: false
|
|
689
|
+
};
|
|
690
|
+
style = customStyle(item, context);
|
|
691
|
+
} // customStyle이 없거나 null/undefined를 반환하면 기본 스타일 사용
|
|
692
|
+
|
|
693
|
+
|
|
694
|
+
if (!style) {
|
|
695
|
+
style = {
|
|
696
|
+
fillColor: baseFillColor,
|
|
697
|
+
lineWidth: baseLineWidth,
|
|
698
|
+
strokeColor: baseStrokeColor
|
|
699
|
+
};
|
|
700
|
+
} // 폴리곤 그리기
|
|
701
|
+
|
|
702
|
+
|
|
703
|
+
drawPolygon({
|
|
704
|
+
ctx: ctx,
|
|
705
|
+
fillColor: style.fillColor,
|
|
706
|
+
isDonutPolygon: item.isDonutPolygon || false,
|
|
707
|
+
lineWidth: style.lineWidth,
|
|
708
|
+
polygonOffsets: polygonOffsets,
|
|
709
|
+
strokeColor: style.strokeColor
|
|
710
|
+
});
|
|
711
|
+
}
|
|
712
|
+
};
|
|
713
|
+
};
|
|
714
|
+
/**
|
|
715
|
+
* 폴리곤 Event 렌더링 함수 팩토리 (하이브리드 방식: customStyle + 개별 props)
|
|
716
|
+
*
|
|
717
|
+
* Event Layer에서 사용할 렌더링 함수를 생성합니다.
|
|
718
|
+
* customStyle이 제공되면 우선적으로 사용하며, null/undefined를 반환하면 개별 props로 정의된 기본 스타일을 사용합니다.
|
|
719
|
+
*
|
|
720
|
+
* @template T 폴리곤 데이터의 추가 속성 타입
|
|
721
|
+
* @param customStyle 폴리곤 스타일 커스터마이징 함수 (선택)
|
|
722
|
+
* @param baseFillColor 기본 폴리곤 채우기 색상 (fallback용)
|
|
723
|
+
* @param baseStrokeColor 기본 폴리곤 테두리 색상 (fallback용)
|
|
724
|
+
* @param baseLineWidth 기본 폴리곤 테두리 두께 (fallback용)
|
|
725
|
+
* @param selectedFillColor 선택된 폴리곤 채우기 색상 (fallback용)
|
|
726
|
+
* @param selectedStrokeColor 선택된 폴리곤 테두리 색상 (fallback용)
|
|
727
|
+
* @param selectedLineWidth 선택된 폴리곤 테두리 두께 (fallback용)
|
|
728
|
+
* @param activeFillColor 마지막 선택된 폴리곤 채우기 색상 (fallback용)
|
|
729
|
+
* @param activeStrokeColor 마지막 선택된 폴리곤 테두리 색상 (fallback용)
|
|
730
|
+
* @param activeLineWidth 마지막 선택된 폴리곤 테두리 두께 (fallback용)
|
|
731
|
+
* @param hoveredFillColor Hover 시 폴리곤 채우기 색상 (fallback용)
|
|
732
|
+
* @param hoveredStrokeColor Hover 시 폴리곤 테두리 색상 (fallback용)
|
|
733
|
+
* @param hoveredLineWidth Hover 시 폴리곤 테두리 두께 (fallback용)
|
|
734
|
+
* @returns Event Layer 렌더링 함수
|
|
735
|
+
*/
|
|
736
|
+
|
|
737
|
+
var renderPolygonEventWithHybrid = function (customStyle, baseFillColor, baseStrokeColor, baseLineWidth, selectedFillColor, selectedStrokeColor, selectedLineWidth, activeFillColor, activeStrokeColor, activeLineWidth, hoveredFillColor, hoveredStrokeColor, hoveredLineWidth) {
|
|
738
|
+
// 기본값 설정 (base 기준)
|
|
739
|
+
var _selectedFillColor = selectedFillColor || baseFillColor;
|
|
740
|
+
|
|
741
|
+
var _selectedStrokeColor = selectedStrokeColor || baseStrokeColor;
|
|
742
|
+
|
|
743
|
+
var _selectedLineWidth = selectedLineWidth || baseLineWidth;
|
|
744
|
+
|
|
745
|
+
var _activeFillColor = activeFillColor || _selectedFillColor;
|
|
746
|
+
|
|
747
|
+
var _activeStrokeColor = activeStrokeColor || _selectedStrokeColor;
|
|
748
|
+
|
|
749
|
+
var _activeLineWidth = activeLineWidth || _selectedLineWidth;
|
|
750
|
+
|
|
751
|
+
var _hoveredFillColor = hoveredFillColor || _selectedFillColor;
|
|
752
|
+
|
|
753
|
+
var _hoveredStrokeColor = hoveredStrokeColor || _selectedStrokeColor;
|
|
754
|
+
|
|
755
|
+
var _hoveredLineWidth = hoveredLineWidth || _selectedLineWidth;
|
|
756
|
+
|
|
757
|
+
return function (_a) {
|
|
758
|
+
var ctx = _a.ctx,
|
|
759
|
+
hoveredItem = _a.hoveredItem,
|
|
760
|
+
selectedItem = _a.selectedItem,
|
|
761
|
+
selectedItems = _a.selectedItems,
|
|
762
|
+
utils = _a.utils; // 성능 최적화: selectedItems를 Set으로 변환하여 O(1) 조회 (매번 some() 체크 방지)
|
|
763
|
+
|
|
764
|
+
var selectedIdsSet = selectedItems ? new Set(selectedItems.map(function (item) {
|
|
765
|
+
return item.id;
|
|
766
|
+
})) : new Set();
|
|
767
|
+
var hoveredItemId = hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.id;
|
|
768
|
+
var selectedItemId = selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.id; // 1. 선택된 항목들 그리기 (마지막 선택 항목과 호버된 항목 제외)
|
|
769
|
+
|
|
770
|
+
if (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) {
|
|
771
|
+
for (var _i = 0, selectedItems_4 = selectedItems; _i < selectedItems_4.length; _i++) {
|
|
772
|
+
var item = selectedItems_4[_i]; // 마지막 선택 항목과 호버된 항목은 나중에 따로 그림
|
|
773
|
+
|
|
774
|
+
if (item.id === selectedItemId || item.id === hoveredItemId) continue;
|
|
775
|
+
if (!item.paths) continue;
|
|
776
|
+
var polygonOffsets = utils.getOrComputePolygonOffsets(item);
|
|
777
|
+
if (!polygonOffsets) continue; // customStyle이 있으면 우선 사용, 없거나 null/undefined 반환 시 기본 스타일 사용
|
|
778
|
+
|
|
779
|
+
var style = void 0;
|
|
780
|
+
|
|
781
|
+
if (customStyle) {
|
|
782
|
+
var context = {
|
|
783
|
+
isActive: false,
|
|
784
|
+
isHovered: false,
|
|
785
|
+
isSelected: true
|
|
786
|
+
};
|
|
787
|
+
style = customStyle(item, context);
|
|
788
|
+
} // customStyle이 없거나 null/undefined를 반환하면 기본 스타일 사용
|
|
789
|
+
|
|
790
|
+
|
|
791
|
+
if (!style) {
|
|
792
|
+
style = {
|
|
793
|
+
fillColor: _selectedFillColor,
|
|
794
|
+
lineWidth: _selectedLineWidth,
|
|
795
|
+
strokeColor: _selectedStrokeColor
|
|
796
|
+
};
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
drawPolygon({
|
|
800
|
+
ctx: ctx,
|
|
801
|
+
fillColor: style.fillColor,
|
|
802
|
+
isDonutPolygon: item.isDonutPolygon || false,
|
|
803
|
+
lineWidth: style.lineWidth,
|
|
804
|
+
polygonOffsets: polygonOffsets,
|
|
805
|
+
strokeColor: style.strokeColor
|
|
806
|
+
});
|
|
807
|
+
}
|
|
808
|
+
} // 2. 마지막 선택된 항목 그리기 (호버되지 않은 경우)
|
|
809
|
+
|
|
810
|
+
|
|
811
|
+
if ((selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.paths) && hoveredItemId !== selectedItemId) {
|
|
812
|
+
var polygonOffsets = utils.getOrComputePolygonOffsets(selectedItem);
|
|
813
|
+
|
|
814
|
+
if (polygonOffsets) {
|
|
815
|
+
// customStyle이 있으면 우선 사용, 없거나 null/undefined 반환 시 기본 스타일 사용
|
|
816
|
+
var style = void 0;
|
|
817
|
+
|
|
818
|
+
if (customStyle) {
|
|
819
|
+
var context = {
|
|
820
|
+
isActive: true,
|
|
821
|
+
isHovered: false,
|
|
822
|
+
isSelected: true
|
|
823
|
+
};
|
|
824
|
+
style = customStyle(selectedItem, context);
|
|
825
|
+
} // customStyle이 없거나 null/undefined를 반환하면 기본 스타일 사용
|
|
826
|
+
|
|
827
|
+
|
|
828
|
+
if (!style) {
|
|
829
|
+
style = {
|
|
830
|
+
fillColor: _activeFillColor,
|
|
831
|
+
lineWidth: _activeLineWidth,
|
|
832
|
+
strokeColor: _activeStrokeColor
|
|
833
|
+
};
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
drawPolygon({
|
|
837
|
+
ctx: ctx,
|
|
838
|
+
fillColor: style.fillColor,
|
|
839
|
+
isDonutPolygon: selectedItem.isDonutPolygon || false,
|
|
840
|
+
lineWidth: style.lineWidth,
|
|
841
|
+
polygonOffsets: polygonOffsets,
|
|
842
|
+
strokeColor: style.strokeColor
|
|
843
|
+
});
|
|
844
|
+
}
|
|
845
|
+
} // 3. 호버된 항목 그리기 (가장 위에 표시)
|
|
846
|
+
|
|
847
|
+
|
|
848
|
+
if (hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.paths) {
|
|
849
|
+
var polygonOffsets = utils.getOrComputePolygonOffsets(hoveredItem); // 좌표 변환 실패 시 스킵 (return은 렌더링 함수 종료)
|
|
850
|
+
|
|
851
|
+
if (!polygonOffsets) return; // 성능 최적화: Set을 사용하여 O(1) 조회 (이전: O(m) some() 체크)
|
|
852
|
+
|
|
853
|
+
var isSelected = selectedIdsSet.has(hoveredItem.id); // customStyle이 있으면 우선 사용, 없거나 null/undefined 반환 시 기본 스타일 사용
|
|
854
|
+
|
|
855
|
+
var style = void 0;
|
|
856
|
+
|
|
857
|
+
if (customStyle) {
|
|
858
|
+
var context = {
|
|
859
|
+
isActive: isSelected && hoveredItem.id === selectedItemId,
|
|
860
|
+
isHovered: !isSelected,
|
|
861
|
+
isSelected: isSelected
|
|
862
|
+
};
|
|
863
|
+
style = customStyle(hoveredItem, context);
|
|
864
|
+
} // customStyle이 없거나 null/undefined를 반환하면 기본 스타일 사용
|
|
865
|
+
|
|
866
|
+
|
|
867
|
+
if (!style) {
|
|
868
|
+
style = {
|
|
869
|
+
fillColor: isSelected ? _activeFillColor : _hoveredFillColor,
|
|
870
|
+
lineWidth: isSelected ? _activeLineWidth : _hoveredLineWidth,
|
|
871
|
+
strokeColor: isSelected ? _activeStrokeColor : _hoveredStrokeColor
|
|
872
|
+
};
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
drawPolygon({
|
|
876
|
+
ctx: ctx,
|
|
877
|
+
fillColor: style.fillColor,
|
|
878
|
+
isDonutPolygon: hoveredItem.isDonutPolygon || false,
|
|
879
|
+
lineWidth: style.lineWidth,
|
|
880
|
+
polygonOffsets: polygonOffsets,
|
|
881
|
+
strokeColor: style.strokeColor
|
|
882
|
+
});
|
|
883
|
+
}
|
|
884
|
+
};
|
|
885
|
+
};
|
|
886
|
+
/**
|
|
887
|
+
* 폴리곤 Base 렌더링 함수 팩토리 (하이브리드 방식: customStyle + renderStyle)
|
|
888
|
+
*
|
|
889
|
+
* Base Layer에서 사용할 렌더링 함수를 생성합니다.
|
|
890
|
+
* customStyle이 제공되면 우선적으로 사용하며, null/undefined를 반환하면 renderStyle로 정의된 기본 스타일을 사용합니다.
|
|
891
|
+
*
|
|
892
|
+
* @template T 폴리곤 데이터의 추가 속성 타입
|
|
893
|
+
* @param customStyle 폴리곤 스타일 커스터마이징 함수 (선택)
|
|
894
|
+
* @param renderStyle 폴리곤 스타일 객체 (fallback용)
|
|
895
|
+
* @returns Base Layer 렌더링 함수
|
|
896
|
+
*/
|
|
897
|
+
|
|
898
|
+
var renderPolygonBaseWithHybridObject = function (customStyle, renderStyle) {
|
|
899
|
+
return function (_a) {
|
|
900
|
+
var ctx = _a.ctx,
|
|
901
|
+
items = _a.items,
|
|
902
|
+
selectedIds = _a.selectedIds,
|
|
903
|
+
utils = _a.utils;
|
|
904
|
+
|
|
905
|
+
for (var _i = 0, items_5 = items; _i < items_5.length; _i++) {
|
|
906
|
+
var item = items_5[_i]; // 선택된 항목은 Event Layer에서 그림 (중복 렌더링 방지)
|
|
907
|
+
|
|
908
|
+
if (selectedIds.has(item.id)) continue; // paths가 없으면 스킵
|
|
909
|
+
|
|
910
|
+
if (!item.paths) continue; // 좌표 변환 (자동 캐싱)
|
|
911
|
+
|
|
912
|
+
var polygonOffsets = utils.getOrComputePolygonOffsets(item);
|
|
913
|
+
if (!polygonOffsets) continue; // customStyle이 있으면 우선 사용, 없거나 null/undefined 반환 시 기본 스타일 사용
|
|
914
|
+
|
|
915
|
+
var style = void 0;
|
|
916
|
+
|
|
917
|
+
if (customStyle) {
|
|
918
|
+
var context = {
|
|
919
|
+
isActive: false,
|
|
920
|
+
isHovered: false,
|
|
921
|
+
isSelected: false
|
|
922
|
+
};
|
|
923
|
+
style = customStyle(item, context);
|
|
924
|
+
} // customStyle이 없거나 null/undefined를 반환하면 기본 스타일 사용
|
|
925
|
+
|
|
926
|
+
|
|
927
|
+
if (!style) {
|
|
928
|
+
style = renderStyle.base;
|
|
929
|
+
} // 폴리곤 그리기
|
|
930
|
+
|
|
931
|
+
|
|
932
|
+
drawPolygon({
|
|
933
|
+
ctx: ctx,
|
|
934
|
+
fillColor: style.fillColor,
|
|
935
|
+
isDonutPolygon: item.isDonutPolygon || false,
|
|
936
|
+
lineWidth: style.lineWidth,
|
|
937
|
+
polygonOffsets: polygonOffsets,
|
|
938
|
+
strokeColor: style.strokeColor
|
|
939
|
+
});
|
|
940
|
+
}
|
|
941
|
+
};
|
|
942
|
+
};
|
|
943
|
+
/**
|
|
944
|
+
* 폴리곤 Event 렌더링 함수 팩토리 (하이브리드 방식: customStyle + renderStyle)
|
|
945
|
+
*
|
|
946
|
+
* Event Layer에서 사용할 렌더링 함수를 생성합니다.
|
|
947
|
+
* customStyle이 제공되면 우선적으로 사용하며, null/undefined를 반환하면 renderStyle로 정의된 기본 스타일을 사용합니다.
|
|
948
|
+
*
|
|
949
|
+
* @template T 폴리곤 데이터의 추가 속성 타입
|
|
950
|
+
* @param customStyle 폴리곤 스타일 커스터마이징 함수 (선택)
|
|
951
|
+
* @param renderStyle 폴리곤 스타일 객체 (fallback용)
|
|
952
|
+
* @returns Event Layer 렌더링 함수
|
|
953
|
+
*/
|
|
954
|
+
|
|
955
|
+
var renderPolygonEventWithHybridObject = function (customStyle, renderStyle) {
|
|
956
|
+
// 기본값 설정 (개별 props 방식과 동일한 로직)
|
|
957
|
+
var _selectedStyle = renderStyle.selected || renderStyle.base;
|
|
958
|
+
|
|
959
|
+
var _activeStyle = renderStyle.active || _selectedStyle;
|
|
960
|
+
|
|
961
|
+
var _hoveredStyle = renderStyle.hovered || _selectedStyle;
|
|
962
|
+
|
|
963
|
+
return function (_a) {
|
|
964
|
+
var ctx = _a.ctx,
|
|
965
|
+
hoveredItem = _a.hoveredItem,
|
|
966
|
+
selectedItem = _a.selectedItem,
|
|
967
|
+
selectedItems = _a.selectedItems,
|
|
968
|
+
utils = _a.utils; // 성능 최적화: selectedItems를 Set으로 변환하여 O(1) 조회 (매번 some() 체크 방지)
|
|
969
|
+
|
|
970
|
+
var selectedIdsSet = selectedItems ? new Set(selectedItems.map(function (item) {
|
|
971
|
+
return item.id;
|
|
972
|
+
})) : new Set();
|
|
973
|
+
var hoveredItemId = hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.id;
|
|
974
|
+
var selectedItemId = selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.id; // 1. 선택된 항목들 그리기 (마지막 선택 항목과 호버된 항목 제외)
|
|
975
|
+
|
|
976
|
+
if (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) {
|
|
977
|
+
for (var _i = 0, selectedItems_5 = selectedItems; _i < selectedItems_5.length; _i++) {
|
|
978
|
+
var item = selectedItems_5[_i]; // 마지막 선택 항목과 호버된 항목은 나중에 따로 그림
|
|
979
|
+
|
|
980
|
+
if (item.id === selectedItemId || item.id === hoveredItemId) continue;
|
|
981
|
+
if (!item.paths) continue;
|
|
982
|
+
var polygonOffsets = utils.getOrComputePolygonOffsets(item);
|
|
983
|
+
if (!polygonOffsets) continue; // customStyle이 있으면 우선 사용, 없거나 null/undefined 반환 시 기본 스타일 사용
|
|
984
|
+
|
|
985
|
+
var style = void 0;
|
|
986
|
+
|
|
987
|
+
if (customStyle) {
|
|
988
|
+
var context = {
|
|
989
|
+
isActive: false,
|
|
990
|
+
isHovered: false,
|
|
991
|
+
isSelected: true
|
|
992
|
+
};
|
|
993
|
+
style = customStyle(item, context);
|
|
994
|
+
} // customStyle이 없거나 null/undefined를 반환하면 기본 스타일 사용
|
|
995
|
+
|
|
996
|
+
|
|
997
|
+
if (!style) {
|
|
998
|
+
style = _selectedStyle;
|
|
999
|
+
}
|
|
1000
|
+
|
|
1001
|
+
drawPolygon({
|
|
1002
|
+
ctx: ctx,
|
|
1003
|
+
fillColor: style.fillColor,
|
|
1004
|
+
isDonutPolygon: item.isDonutPolygon || false,
|
|
1005
|
+
lineWidth: style.lineWidth,
|
|
1006
|
+
polygonOffsets: polygonOffsets,
|
|
1007
|
+
strokeColor: style.strokeColor
|
|
1008
|
+
});
|
|
1009
|
+
}
|
|
1010
|
+
} // 2. 마지막 선택된 항목 그리기 (호버되지 않은 경우)
|
|
1011
|
+
|
|
1012
|
+
|
|
1013
|
+
if ((selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.paths) && hoveredItemId !== selectedItemId) {
|
|
1014
|
+
var polygonOffsets = utils.getOrComputePolygonOffsets(selectedItem);
|
|
1015
|
+
|
|
1016
|
+
if (polygonOffsets) {
|
|
1017
|
+
// customStyle이 있으면 우선 사용, 없거나 null/undefined 반환 시 기본 스타일 사용
|
|
1018
|
+
var style = void 0;
|
|
1019
|
+
|
|
1020
|
+
if (customStyle) {
|
|
1021
|
+
var context = {
|
|
1022
|
+
isActive: true,
|
|
1023
|
+
isHovered: false,
|
|
1024
|
+
isSelected: true
|
|
1025
|
+
};
|
|
1026
|
+
style = customStyle(selectedItem, context);
|
|
1027
|
+
} // customStyle이 없거나 null/undefined를 반환하면 기본 스타일 사용
|
|
1028
|
+
|
|
1029
|
+
|
|
1030
|
+
if (!style) {
|
|
1031
|
+
style = _activeStyle;
|
|
1032
|
+
}
|
|
1033
|
+
|
|
1034
|
+
drawPolygon({
|
|
1035
|
+
ctx: ctx,
|
|
1036
|
+
fillColor: style.fillColor,
|
|
1037
|
+
isDonutPolygon: selectedItem.isDonutPolygon || false,
|
|
1038
|
+
lineWidth: style.lineWidth,
|
|
1039
|
+
polygonOffsets: polygonOffsets,
|
|
1040
|
+
strokeColor: style.strokeColor
|
|
1041
|
+
});
|
|
1042
|
+
}
|
|
1043
|
+
} // 3. 호버된 항목 그리기 (가장 위에 표시)
|
|
1044
|
+
|
|
1045
|
+
|
|
1046
|
+
if (hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.paths) {
|
|
1047
|
+
var polygonOffsets = utils.getOrComputePolygonOffsets(hoveredItem); // 좌표 변환 실패 시 스킵 (return은 렌더링 함수 종료)
|
|
1048
|
+
|
|
1049
|
+
if (!polygonOffsets) return; // 성능 최적화: Set을 사용하여 O(1) 조회 (이전: O(m) some() 체크)
|
|
1050
|
+
|
|
1051
|
+
var isSelected = selectedIdsSet.has(hoveredItem.id); // customStyle이 있으면 우선 사용, 없거나 null/undefined 반환 시 기본 스타일 사용
|
|
1052
|
+
|
|
1053
|
+
var style = void 0;
|
|
1054
|
+
|
|
1055
|
+
if (customStyle) {
|
|
1056
|
+
var context = {
|
|
1057
|
+
isActive: isSelected && hoveredItem.id === selectedItemId,
|
|
1058
|
+
isHovered: !isSelected,
|
|
1059
|
+
isSelected: isSelected
|
|
1060
|
+
};
|
|
1061
|
+
style = customStyle(hoveredItem, context);
|
|
1062
|
+
} // customStyle이 없거나 null/undefined를 반환하면 기본 스타일 사용
|
|
1063
|
+
|
|
1064
|
+
|
|
1065
|
+
if (!style) {
|
|
1066
|
+
style = isSelected ? _activeStyle : _hoveredStyle;
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
drawPolygon({
|
|
1070
|
+
ctx: ctx,
|
|
1071
|
+
fillColor: style.fillColor,
|
|
1072
|
+
isDonutPolygon: hoveredItem.isDonutPolygon || false,
|
|
1073
|
+
lineWidth: style.lineWidth,
|
|
1074
|
+
polygonOffsets: polygonOffsets,
|
|
1075
|
+
strokeColor: style.strokeColor
|
|
1076
|
+
});
|
|
1077
|
+
}
|
|
1078
|
+
};
|
|
1079
|
+
};
|
|
651
1080
|
|
|
652
1081
|
exports.drawPolygon = drawPolygon;
|
|
653
1082
|
exports.renderPolygonBase = renderPolygonBase;
|
|
654
1083
|
exports.renderPolygonBaseWithCustomStyle = renderPolygonBaseWithCustomStyle;
|
|
1084
|
+
exports.renderPolygonBaseWithHybrid = renderPolygonBaseWithHybrid;
|
|
1085
|
+
exports.renderPolygonBaseWithHybridObject = renderPolygonBaseWithHybridObject;
|
|
655
1086
|
exports.renderPolygonBaseWithObject = renderPolygonBaseWithObject;
|
|
656
1087
|
exports.renderPolygonEvent = renderPolygonEvent;
|
|
657
1088
|
exports.renderPolygonEventWithCustomStyle = renderPolygonEventWithCustomStyle;
|
|
1089
|
+
exports.renderPolygonEventWithHybrid = renderPolygonEventWithHybrid;
|
|
1090
|
+
exports.renderPolygonEventWithHybridObject = renderPolygonEventWithHybridObject;
|
|
658
1091
|
exports.renderPolygonEventWithObject = renderPolygonEventWithObject;
|