@mint-ui/map 1.2.0-test.10 → 1.2.0-test.11

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.
@@ -24,6 +24,7 @@ export declare abstract class MintMapController {
24
24
  abstract updateMarker(marker: Marker, options: MarkerOptions): void;
25
25
  abstract clearDrawable(drawable: Drawable): boolean;
26
26
  abstract markerToTheTop(marker: Marker): void;
27
+ abstract restoreMarkerZIndex(marker: Marker): void;
27
28
  abstract isMapDragged(): boolean;
28
29
  abstract setMapDragged(value: boolean): void;
29
30
  abstract setMarkerZIndex(marker: Marker, zIndex: number): void;
@@ -4,26 +4,17 @@ import { KonvaCanvasMarkerData, CanvasDataType, CustomRenderBase, CustomRenderAn
4
4
  export { KonvaMarkerProvider, LRUCache, SpatialHashGrid, CanvasDataType } from "./shared";
5
5
  export type { KonvaCanvasMarkerOption, Paths, KonvaCanvasMarkerData, CustomRenderBase, CustomRenderAnimation, CustomRenderEvent, RenderUtils, RenderBaseParams, RenderAnimationParams, RenderEventParams } from "./shared";
6
6
  /**
7
- * WoongKonvaMarker 컴포넌트 Props
8
- * @template T 마커 데이터의 추가 속성 타입
7
+ * 공통 Props (MARKER와 POLYGON 모두 사용)
9
8
  */
10
- export interface WoongKonvaMarkerProps<T> extends Pick<MarkerOptions, 'zIndex' | 'anchor' | 'visible'> {
9
+ interface WoongCanvasLayerBaseProps<T> extends Pick<MarkerOptions, 'zIndex' | 'anchor' | 'visible'> {
11
10
  /** 렌더링할 마커 데이터 배열 */
12
11
  markers: KonvaCanvasMarkerData<T>[];
13
- /** 데이터 타입 (MARKER 또는 POLYGON) */
14
- dataType: CanvasDataType;
15
12
  /** 마커 클릭 시 호출되는 콜백 (선택) */
16
13
  onClick?: (payload: KonvaCanvasMarkerData<T>, selectedIds: Set<string>) => void;
17
14
  /** 마커에 마우스 오버 시 호출되는 콜백 (선택) */
18
15
  onMouseOver?: (payload: KonvaCanvasMarkerData<T>) => void;
19
16
  /** 마커에서 마우스 아웃 시 호출되는 콜백 (선택) */
20
17
  onMouseOut?: (payload: KonvaCanvasMarkerData<T>) => void;
21
- /** Base Layer 렌더링 함수 (필수) */
22
- renderBase: CustomRenderBase<T>;
23
- /** Animation Layer 렌더링 함수 (선택, 애니메이션용) */
24
- renderAnimation?: CustomRenderAnimation<T>;
25
- /** Event Layer 렌더링 함수 (선택) */
26
- renderEvent?: CustomRenderEvent<T>;
27
18
  /** 다중 선택 활성화 여부 (기본: false) */
28
19
  enableMultiSelect?: boolean;
29
20
  /** hover 시 마커를 최상단으로 표시 (기본: false) */
@@ -41,6 +32,54 @@ export interface WoongKonvaMarkerProps<T> extends Pick<MarkerOptions, 'zIndex' |
41
32
  /** 상호작용 비활성화 (hover, click 등 모든 이벤트 차단) */
42
33
  disableInteraction?: boolean;
43
34
  }
35
+ /**
36
+ * MARKER 타입 Props - 커스텀 렌더링 필수
37
+ */
38
+ interface WoongCanvasLayerPropsForMarker<T> extends WoongCanvasLayerBaseProps<T> {
39
+ /** 데이터 타입 */
40
+ dataType: CanvasDataType.MARKER;
41
+ /** Base Layer 렌더링 함수 (필수) */
42
+ renderBase: CustomRenderBase<T>;
43
+ /** Animation Layer 렌더링 함수 (선택, 애니메이션용) */
44
+ renderAnimation?: CustomRenderAnimation<T>;
45
+ /** Event Layer 렌더링 함수 (선택) */
46
+ renderEvent?: CustomRenderEvent<T>;
47
+ }
48
+ /**
49
+ * POLYGON 타입 Props - 스타일 속성으로 내부 처리
50
+ */
51
+ interface WoongCanvasLayerPropsForPolygon<T> extends WoongCanvasLayerBaseProps<T> {
52
+ /** 데이터 타입 */
53
+ dataType: CanvasDataType.POLYGON;
54
+ /** 기본 폴리곤 채우기 색상 (필수) */
55
+ baseFillColor: string;
56
+ /** 기본 폴리곤 테두리 색상 (필수) */
57
+ baseStrokeColor: string;
58
+ /** 기본 폴리곤 테두리 두께 (필수) */
59
+ baseLineWidth: number;
60
+ /** 선택된 폴리곤 채우기 색상 (필수) */
61
+ selectedFillColor: string;
62
+ /** 선택된 폴리곤 테두리 색상 (필수) */
63
+ selectedStrokeColor: string;
64
+ /** 선택된 폴리곤 테두리 두께 (필수) */
65
+ selectedLineWidth: number;
66
+ /** 마지막 선택된 폴리곤 채우기 색상 (선택, 기본값: selectedFillColor) */
67
+ activeFillColor?: string;
68
+ /** 마지막 선택된 폴리곤 테두리 색상 (선택, 기본값: selectedStrokeColor) */
69
+ activeStrokeColor?: string;
70
+ /** 마지막 선택된 폴리곤 테두리 두께 (선택, 기본값: selectedLineWidth) */
71
+ activeLineWidth?: number;
72
+ /** Hover 시 폴리곤 채우기 색상 (선택, 기본값: selectedFillColor) */
73
+ hoveredFillColor?: string;
74
+ /** Hover 시 폴리곤 테두리 색상 (선택, 기본값: selectedStrokeColor) */
75
+ hoveredStrokeColor?: string;
76
+ /** Hover 시 폴리곤 테두리 두께 (선택, 기본값: selectedLineWidth) */
77
+ hoveredLineWidth?: number;
78
+ }
79
+ /**
80
+ * 최종 Props 타입 - Discriminated Union
81
+ */
82
+ export declare type WoongCanvasLayerProps<T> = WoongCanvasLayerPropsForMarker<T> | WoongCanvasLayerPropsForPolygon<T>;
44
83
  /**
45
84
  * 🔥 React.memo 최적화: 마커 배열과 selectedItems 변경 체크
46
85
  *
@@ -50,5 +89,5 @@ export interface WoongKonvaMarkerProps<T> extends Pick<MarkerOptions, 'zIndex' |
50
89
  *
51
90
  * 주의: JSON.stringify() 사용 금지! (매우 느림)
52
91
  */
53
- declare const WoongKonvaMarker: <T>({ markers, dataType, onClick, onMouseOver, onMouseOut, renderBase, renderAnimation, renderEvent, enableMultiSelect, topOnHover, enableViewportCulling, cullingMargin, maxCacheSize, selectedItems: externalSelectedItems, selectedItem: externalSelectedItem, disableInteraction, ...options }: WoongKonvaMarkerProps<T>) => React.ReactPortal;
54
- export default WoongKonvaMarker;
92
+ declare const WoongCanvasLayer: <T>(props: WoongCanvasLayerProps<T>) => React.ReactPortal;
93
+ export default WoongCanvasLayer;
@@ -14,6 +14,7 @@ var types = require('./shared/types.js');
14
14
  var utils = require('./shared/utils.js');
15
15
  var context = require('./shared/context.js');
16
16
  var performance = require('./shared/performance.js');
17
+ var renderer = require('./shared/renderer.js');
17
18
 
18
19
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
19
20
 
@@ -35,30 +36,27 @@ var Konva__default = /*#__PURE__*/_interopDefaultLegacy(Konva);
35
36
  * @template T 마커 데이터의 추가 속성 타입
36
37
  */
37
38
 
38
- var WoongKonvaMarkerComponent = function (_a) {
39
- var markers = _a.markers,
40
- dataType = _a.dataType,
41
- onClick = _a.onClick,
42
- onMouseOver = _a.onMouseOver,
43
- onMouseOut = _a.onMouseOut,
44
- renderBase = _a.renderBase,
45
- renderAnimation = _a.renderAnimation,
46
- renderEvent = _a.renderEvent,
47
- _b = _a.enableMultiSelect,
48
- enableMultiSelect = _b === void 0 ? false : _b,
49
- _c = _a.topOnHover,
50
- topOnHover = _c === void 0 ? false : _c,
51
- _d = _a.enableViewportCulling,
52
- enableViewportCulling = _d === void 0 ? true : _d,
53
- _e = _a.cullingMargin,
54
- cullingMargin = _e === void 0 ? performance.DEFAULT_CULLING_MARGIN : _e,
55
- _f = _a.maxCacheSize,
56
- maxCacheSize = _f === void 0 ? performance.DEFAULT_MAX_CACHE_SIZE : _f,
57
- externalSelectedItems = _a.selectedItems,
58
- externalSelectedItem = _a.selectedItem,
59
- _g = _a.disableInteraction,
60
- disableInteraction = _g === void 0 ? false : _g,
61
- options = tslib.__rest(_a, ["markers", "dataType", "onClick", "onMouseOver", "onMouseOut", "renderBase", "renderAnimation", "renderEvent", "enableMultiSelect", "topOnHover", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disableInteraction"]); // --------------------------------------------------------------------------
39
+ var WoongCanvasLayerComponent = function (props) {
40
+ var markers = props.markers,
41
+ dataType = props.dataType,
42
+ onClick = props.onClick,
43
+ onMouseOver = props.onMouseOver,
44
+ onMouseOut = props.onMouseOut,
45
+ _a = props.enableMultiSelect,
46
+ enableMultiSelect = _a === void 0 ? false : _a,
47
+ _b = props.topOnHover,
48
+ topOnHover = _b === void 0 ? false : _b,
49
+ _c = props.enableViewportCulling,
50
+ enableViewportCulling = _c === void 0 ? true : _c,
51
+ _d = props.cullingMargin,
52
+ cullingMargin = _d === void 0 ? performance.DEFAULT_CULLING_MARGIN : _d,
53
+ _e = props.maxCacheSize,
54
+ maxCacheSize = _e === void 0 ? performance.DEFAULT_MAX_CACHE_SIZE : _e,
55
+ externalSelectedItems = props.selectedItems,
56
+ externalSelectedItem = props.selectedItem,
57
+ _f = props.disableInteraction,
58
+ disableInteraction = _f === void 0 ? false : _f,
59
+ options = tslib.__rest(props, ["markers", "dataType", "onClick", "onMouseOver", "onMouseOut", "enableMultiSelect", "topOnHover", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disableInteraction"]); // --------------------------------------------------------------------------
62
60
  // Hooks & Context
63
61
  // --------------------------------------------------------------------------
64
62
 
@@ -336,7 +334,7 @@ var WoongKonvaMarkerComponent = function (_a) {
336
334
  }
337
335
  }
338
336
  }; // --------------------------------------------------------------------------
339
- // 렌더링 함수
337
+ // 렌더링 함수 결정 (dataType에 따라)
340
338
  // --------------------------------------------------------------------------
341
339
 
342
340
  /**
@@ -351,6 +349,18 @@ var WoongKonvaMarkerComponent = function (_a) {
351
349
  /** Base Layer에서 사용할 빈 Set (재사용) */
352
350
 
353
351
  React.useRef(new Set());
352
+ /**
353
+ * 실제 사용할 렌더링 함수 결정
354
+ * - MARKER: 외부에서 전달받은 renderBase 사용 (필수)
355
+ * - POLYGON: renderer.ts의 팩토리 함수로 생성 (props 기반)
356
+ */
357
+
358
+ var renderBase = dataType === types.CanvasDataType.MARKER ? props.renderBase : renderer.renderPolygonBase(props.baseFillColor, props.baseStrokeColor, props.baseLineWidth);
359
+ var renderAnimation = dataType === types.CanvasDataType.MARKER ? props.renderAnimation : undefined;
360
+ var renderEvent = dataType === types.CanvasDataType.MARKER ? props.renderEvent : function () {
361
+ var polygonProps = props;
362
+ return renderer.renderPolygonEvent(polygonProps.selectedFillColor, polygonProps.selectedStrokeColor, polygonProps.selectedLineWidth, polygonProps.activeFillColor, polygonProps.activeStrokeColor, polygonProps.activeLineWidth, polygonProps.hoveredFillColor, polygonProps.hoveredStrokeColor, polygonProps.hoveredLineWidth);
363
+ }();
354
364
  /**
355
365
  * Base 레이어 렌더링 (뷰포트 컬링 적용, 선택된 마커 제외)
356
366
  *
@@ -1056,13 +1066,11 @@ var WoongKonvaMarkerComponent = function (_a) {
1056
1066
  }, [markers]);
1057
1067
  return reactDom.createPortal(React__default["default"].createElement("div", {
1058
1068
  ref: containerRef,
1059
- style: tslib.__assign({
1069
+ style: {
1060
1070
  position: 'absolute',
1061
1071
  width: '100%',
1062
1072
  height: '100%'
1063
- }, disableInteraction && {
1064
- pointerEvents: 'none'
1065
- })
1073
+ }
1066
1074
  }), divElement);
1067
1075
  };
1068
1076
  /**
@@ -1076,7 +1084,7 @@ var WoongKonvaMarkerComponent = function (_a) {
1076
1084
  */
1077
1085
 
1078
1086
 
1079
- var WoongKonvaMarker = React__default["default"].memo(WoongKonvaMarkerComponent, function (prevProps, nextProps) {
1087
+ var WoongCanvasLayer = React__default["default"].memo(WoongCanvasLayerComponent, function (prevProps, nextProps) {
1080
1088
  // 1. markers 비교
1081
1089
  var prevMarkers = prevProps.markers;
1082
1090
  var nextMarkers = nextProps.markers; // 참조가 같으면 스킵
@@ -1127,4 +1135,4 @@ Object.defineProperty(exports, 'CanvasDataType', {
1127
1135
  exports.KonvaMarkerProvider = context.KonvaMarkerProvider;
1128
1136
  exports.LRUCache = performance.LRUCache;
1129
1137
  exports.SpatialHashGrid = performance.SpatialHashGrid;
1130
- exports["default"] = WoongKonvaMarker;
1138
+ exports["default"] = WoongCanvasLayer;
@@ -1,3 +1,3 @@
1
- export { default as WoongKonvaMarker } from "./WoongKonvaMarker";
2
- export * from "./WoongKonvaMarker";
1
+ export { default as WoongCanvasLayer } from "./WoongCanvasLayer";
2
+ export * from "./WoongCanvasLayer";
3
3
  export * from "./shared";
@@ -0,0 +1,59 @@
1
+ /**
2
+ * 폴리곤 렌더링 유틸리티
3
+ *
4
+ * 이 파일은 폴리곤 렌더링을 위한 헬퍼 함수와 팩토리 함수를 제공합니다.
5
+ */
6
+ import { CustomRenderBase, CustomRenderEvent, KonvaCanvasMarkerData } from "./types";
7
+ /**
8
+ * 폴리곤 그리기 헬퍼 함수 (도넛 폴리곤 지원)
9
+ */
10
+ export declare const drawPolygon: ({ ctx, polygonOffsets, isDonutPolygon, fillColor, strokeColor, lineWidth }: {
11
+ ctx: CanvasRenderingContext2D;
12
+ polygonOffsets: number[][][][];
13
+ isDonutPolygon: boolean;
14
+ fillColor: string;
15
+ strokeColor: string;
16
+ lineWidth: number;
17
+ }) => void;
18
+ /**
19
+ * 폴리곤 Base 렌더링 함수
20
+ *
21
+ * @param baseFillColor 기본 폴리곤 채우기 색상
22
+ * @param baseStrokeColor 기본 폴리곤 테두리 색상
23
+ * @param baseLineWidth 기본 폴리곤 테두리 두께
24
+ * @returns Base Layer 렌더링 함수
25
+ *
26
+ * @example
27
+ * const renderBase = renderPolygonBase(
28
+ * 'rgba(255, 100, 100, 0.5)',
29
+ * 'rgba(200, 50, 50, 0.8)',
30
+ * 2
31
+ * );
32
+ */
33
+ export declare const renderPolygonBase: <T = any>(baseFillColor: string, baseStrokeColor: string, baseLineWidth: number) => CustomRenderBase<KonvaCanvasMarkerData<T>>;
34
+ /**
35
+ * 폴리곤 Event 렌더링 함수
36
+ *
37
+ * @param selectedFillColor 선택된 폴리곤 채우기 색상
38
+ * @param selectedStrokeColor 선택된 폴리곤 테두리 색상
39
+ * @param selectedLineWidth 선택된 폴리곤 테두리 두께
40
+ * @param activeFillColor 마지막 선택된 폴리곤 채우기 색상 (선택, 기본값: selectedFillColor)
41
+ * @param activeStrokeColor 마지막 선택된 폴리곤 테두리 색상 (선택, 기본값: selectedStrokeColor)
42
+ * @param activeLineWidth 마지막 선택된 폴리곤 테두리 두께 (선택, 기본값: selectedLineWidth)
43
+ * @param hoveredFillColor Hover 시 폴리곤 채우기 색상 (선택, 기본값: selectedFillColor)
44
+ * @param hoveredStrokeColor Hover 시 폴리곤 테두리 색상 (선택, 기본값: selectedStrokeColor)
45
+ * @param hoveredLineWidth Hover 시 폴리곤 테두리 두께 (선택, 기본값: selectedLineWidth)
46
+ * @returns Event Layer 렌더링 함수
47
+ *
48
+ * @example
49
+ * const renderEvent = renderPolygonEvent(
50
+ * 'rgba(255, 193, 7, 0.7)',
51
+ * 'rgba(255, 152, 0, 1)',
52
+ * 4,
53
+ * 'rgba(255, 0, 0, 0.8)',
54
+ * undefined,
55
+ * undefined,
56
+ * 'rgba(100, 150, 255, 0.8)'
57
+ * );
58
+ */
59
+ export declare const renderPolygonEvent: <T = any>(selectedFillColor: string, selectedStrokeColor: string, selectedLineWidth: number, activeFillColor?: string, activeStrokeColor?: string, activeLineWidth?: number, hoveredFillColor?: string, hoveredStrokeColor?: string, hoveredLineWidth?: number) => CustomRenderEvent<KonvaCanvasMarkerData<T>>;
@@ -0,0 +1,226 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ /**
6
+ * 폴리곤 렌더링 유틸리티
7
+ *
8
+ * 이 파일은 폴리곤 렌더링을 위한 헬퍼 함수와 팩토리 함수를 제공합니다.
9
+ */
10
+
11
+ /**
12
+ * 폴리곤 그리기 헬퍼 함수 (도넛 폴리곤 지원)
13
+ */
14
+ var drawPolygon = function (_a) {
15
+ var ctx = _a.ctx,
16
+ polygonOffsets = _a.polygonOffsets,
17
+ isDonutPolygon = _a.isDonutPolygon,
18
+ fillColor = _a.fillColor,
19
+ strokeColor = _a.strokeColor,
20
+ lineWidth = _a.lineWidth;
21
+
22
+ for (var _i = 0, polygonOffsets_1 = polygonOffsets; _i < polygonOffsets_1.length; _i++) {
23
+ var multiPolygon = polygonOffsets_1[_i];
24
+
25
+ if (isDonutPolygon) {
26
+ ctx.beginPath(); // 1. 외부 폴리곤 그리기
27
+
28
+ if (multiPolygon[0] && multiPolygon[0].length > 0) {
29
+ ctx.moveTo(multiPolygon[0][0][0], multiPolygon[0][0][1]);
30
+
31
+ for (var i = 1; i < multiPolygon[0].length; i++) {
32
+ ctx.lineTo(multiPolygon[0][i][0], multiPolygon[0][i][1]);
33
+ }
34
+
35
+ ctx.closePath();
36
+ } // 2. 내부 폴리곤 (구멍들) 그리기 - 같은 path에 추가
37
+
38
+
39
+ for (var j = 1; j < multiPolygon.length; j++) {
40
+ var innerPolygon = multiPolygon[j];
41
+ if (innerPolygon.length === 0) continue;
42
+ ctx.moveTo(innerPolygon[0][0], innerPolygon[0][1]);
43
+
44
+ for (var i = 1; i < innerPolygon.length; i++) {
45
+ ctx.lineTo(innerPolygon[i][0], innerPolygon[i][1]);
46
+ }
47
+
48
+ ctx.closePath();
49
+ } // 3. evenodd fill rule로 구멍 뚫기
50
+
51
+
52
+ ctx.fillStyle = fillColor;
53
+ ctx.fill('evenodd'); // 4. 외곽선 그리기
54
+
55
+ ctx.strokeStyle = strokeColor;
56
+ ctx.lineWidth = lineWidth;
57
+ ctx.stroke();
58
+ } else {
59
+ // 일반 폴리곤
60
+ for (var _b = 0, multiPolygon_1 = multiPolygon; _b < multiPolygon_1.length; _b++) {
61
+ var polygonGroup = multiPolygon_1[_b];
62
+ if (!polygonGroup.length) continue;
63
+ ctx.beginPath();
64
+ var firstPoint = polygonGroup[0];
65
+ ctx.moveTo(firstPoint[0], firstPoint[1]);
66
+
67
+ for (var i = 1; i < polygonGroup.length; i++) {
68
+ var point = polygonGroup[i];
69
+ ctx.lineTo(point[0], point[1]);
70
+ }
71
+
72
+ ctx.closePath();
73
+ ctx.fillStyle = fillColor;
74
+ ctx.strokeStyle = strokeColor;
75
+ ctx.lineWidth = lineWidth;
76
+ ctx.fill();
77
+ ctx.stroke();
78
+ }
79
+ }
80
+ }
81
+ };
82
+ /**
83
+ * 폴리곤 Base 렌더링 함수
84
+ *
85
+ * @param baseFillColor 기본 폴리곤 채우기 색상
86
+ * @param baseStrokeColor 기본 폴리곤 테두리 색상
87
+ * @param baseLineWidth 기본 폴리곤 테두리 두께
88
+ * @returns Base Layer 렌더링 함수
89
+ *
90
+ * @example
91
+ * const renderBase = renderPolygonBase(
92
+ * 'rgba(255, 100, 100, 0.5)',
93
+ * 'rgba(200, 50, 50, 0.8)',
94
+ * 2
95
+ * );
96
+ */
97
+
98
+ var renderPolygonBase = function (baseFillColor, baseStrokeColor, baseLineWidth) {
99
+ return function (_a) {
100
+ var ctx = _a.ctx,
101
+ items = _a.items,
102
+ selectedIds = _a.selectedIds,
103
+ utils = _a.utils;
104
+
105
+ for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {
106
+ var item = items_1[_i]; // 선택된 항목은 Event Layer에서 그림
107
+
108
+ if (selectedIds.has(item.id)) continue;
109
+ if (!item.paths) continue;
110
+ var polygonOffsets = utils.getOrComputePolygonOffsets(item);
111
+ if (!polygonOffsets) continue;
112
+ drawPolygon({
113
+ ctx: ctx,
114
+ polygonOffsets: polygonOffsets,
115
+ isDonutPolygon: item.isDonutPolygon || false,
116
+ fillColor: baseFillColor,
117
+ strokeColor: baseStrokeColor,
118
+ lineWidth: baseLineWidth
119
+ });
120
+ }
121
+ };
122
+ };
123
+ /**
124
+ * 폴리곤 Event 렌더링 함수
125
+ *
126
+ * @param selectedFillColor 선택된 폴리곤 채우기 색상
127
+ * @param selectedStrokeColor 선택된 폴리곤 테두리 색상
128
+ * @param selectedLineWidth 선택된 폴리곤 테두리 두께
129
+ * @param activeFillColor 마지막 선택된 폴리곤 채우기 색상 (선택, 기본값: selectedFillColor)
130
+ * @param activeStrokeColor 마지막 선택된 폴리곤 테두리 색상 (선택, 기본값: selectedStrokeColor)
131
+ * @param activeLineWidth 마지막 선택된 폴리곤 테두리 두께 (선택, 기본값: selectedLineWidth)
132
+ * @param hoveredFillColor Hover 시 폴리곤 채우기 색상 (선택, 기본값: selectedFillColor)
133
+ * @param hoveredStrokeColor Hover 시 폴리곤 테두리 색상 (선택, 기본값: selectedStrokeColor)
134
+ * @param hoveredLineWidth Hover 시 폴리곤 테두리 두께 (선택, 기본값: selectedLineWidth)
135
+ * @returns Event Layer 렌더링 함수
136
+ *
137
+ * @example
138
+ * const renderEvent = renderPolygonEvent(
139
+ * 'rgba(255, 193, 7, 0.7)',
140
+ * 'rgba(255, 152, 0, 1)',
141
+ * 4,
142
+ * 'rgba(255, 0, 0, 0.8)',
143
+ * undefined,
144
+ * undefined,
145
+ * 'rgba(100, 150, 255, 0.8)'
146
+ * );
147
+ */
148
+
149
+ var renderPolygonEvent = function (selectedFillColor, selectedStrokeColor, selectedLineWidth, activeFillColor, activeStrokeColor, activeLineWidth, hoveredFillColor, hoveredStrokeColor, hoveredLineWidth) {
150
+ // 기본값 설정 (selected 기준)
151
+ var _activeFillColor = activeFillColor || selectedFillColor;
152
+
153
+ var _activeStrokeColor = activeStrokeColor || selectedStrokeColor;
154
+
155
+ var _activeLineWidth = activeLineWidth || selectedLineWidth;
156
+
157
+ var _hoveredFillColor = hoveredFillColor || selectedFillColor;
158
+
159
+ var _hoveredStrokeColor = hoveredStrokeColor || selectedStrokeColor;
160
+
161
+ var _hoveredLineWidth = hoveredLineWidth || selectedLineWidth;
162
+
163
+ return function (_a) {
164
+ var ctx = _a.ctx,
165
+ hoveredItem = _a.hoveredItem,
166
+ utils = _a.utils,
167
+ selectedItems = _a.selectedItems,
168
+ selectedItem = _a.selectedItem; // 1. 선택된 항목들 그리기 (마지막 선택 항목과 호버된 항목 제외)
169
+
170
+ if (selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length) {
171
+ for (var _i = 0, selectedItems_1 = selectedItems; _i < selectedItems_1.length; _i++) {
172
+ var item = selectedItems_1[_i]; // 마지막 선택 항목과 호버된 항목은 나중에 따로 그림
173
+
174
+ if (item.id === (selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.id) || (hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.id) === item.id) continue;
175
+ if (!item.paths) continue;
176
+ var polygonOffsets = utils.getOrComputePolygonOffsets(item);
177
+ if (!polygonOffsets) continue;
178
+ drawPolygon({
179
+ ctx: ctx,
180
+ polygonOffsets: polygonOffsets,
181
+ isDonutPolygon: item.isDonutPolygon || false,
182
+ fillColor: selectedFillColor,
183
+ strokeColor: selectedStrokeColor,
184
+ lineWidth: selectedLineWidth
185
+ });
186
+ }
187
+ } // 2. 마지막 선택된 항목 그리기 (호버되지 않은 경우)
188
+
189
+
190
+ if ((selectedItem === null || selectedItem === void 0 ? void 0 : selectedItem.paths) && (hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.id) !== selectedItem.id) {
191
+ var polygonOffsets = utils.getOrComputePolygonOffsets(selectedItem);
192
+
193
+ if (polygonOffsets) {
194
+ drawPolygon({
195
+ ctx: ctx,
196
+ polygonOffsets: polygonOffsets,
197
+ isDonutPolygon: selectedItem.isDonutPolygon || false,
198
+ fillColor: _activeFillColor,
199
+ strokeColor: _activeStrokeColor,
200
+ lineWidth: _activeLineWidth
201
+ });
202
+ }
203
+ } // 3. 호버된 항목 그리기 (가장 위에 표시)
204
+
205
+
206
+ if (hoveredItem === null || hoveredItem === void 0 ? void 0 : hoveredItem.paths) {
207
+ var polygonOffsets = utils.getOrComputePolygonOffsets(hoveredItem);
208
+ if (!polygonOffsets) return;
209
+ var isSelected = selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.some(function (item) {
210
+ return item.id === hoveredItem.id;
211
+ });
212
+ drawPolygon({
213
+ ctx: ctx,
214
+ polygonOffsets: polygonOffsets,
215
+ isDonutPolygon: hoveredItem.isDonutPolygon || false,
216
+ fillColor: isSelected ? _activeFillColor : _hoveredFillColor,
217
+ strokeColor: isSelected ? _activeStrokeColor : _hoveredStrokeColor,
218
+ lineWidth: isSelected ? _activeLineWidth : _hoveredLineWidth
219
+ });
220
+ }
221
+ };
222
+ };
223
+
224
+ exports.drawPolygon = drawPolygon;
225
+ exports.renderPolygonBase = renderPolygonBase;
226
+ exports.renderPolygonEvent = renderPolygonEvent;
@@ -29,3 +29,4 @@ export declare const isPointInPolygonData: (clickedOffset: Offset, polygonData:
29
29
  * 마커 히트 테스트
30
30
  */
31
31
  export declare const isPointInMarkerData: (clickedOffset: Offset, markerData: KonvaCanvasMarkerData<any>, getMarkerOffset: (data: KonvaCanvasMarkerData<any>) => Offset | null) => boolean;
32
+ export declare const hexToRgba: (hexColor: string, alpha?: number) => string;
@@ -156,9 +156,27 @@ var isPointInMarkerData = function (clickedOffset, markerData, getMarkerOffset)
156
156
  var y = markerOffset.y - boxHeight - tailHeight;
157
157
  return clickedOffset.x >= x && clickedOffset.x <= x + boxWidth && clickedOffset.y >= y && clickedOffset.y <= y + boxHeight;
158
158
  };
159
+ var hexToRgba = function (hexColor, alpha) {
160
+ if (alpha === void 0) {
161
+ alpha = 1;
162
+ } // NOTE: 입력된 hexColor에서 "#" 제거
163
+
164
+
165
+ var hex = hexColor.replace('#', ''); // NOTE: 6자리일 경우 알파 값은 사용자가 제공한 alpha 값으로 설정
166
+
167
+ if (hex.length === 6) {
168
+ var r = parseInt(hex.substring(0, 2), 16);
169
+ var g = parseInt(hex.substring(2, 4), 16);
170
+ var b = parseInt(hex.substring(4, 6), 16);
171
+ return "rgba(".concat(r, ", ").concat(g, ", ").concat(b, ", ").concat(alpha, ")");
172
+ }
173
+
174
+ throw new Error('Invalid hex color format');
175
+ };
159
176
 
160
177
  exports.computeMarkerOffset = computeMarkerOffset;
161
178
  exports.computePolygonOffsets = computePolygonOffsets;
179
+ exports.hexToRgba = hexToRgba;
162
180
  exports.isPointInMarkerData = isPointInMarkerData;
163
181
  exports.isPointInPolygon = isPointInPolygon;
164
182
  exports.isPointInPolygonData = isPointInPolygonData;
@@ -172,7 +172,7 @@ function MapMarkerWrapper(_a) {
172
172
  var onMouseOverHandler = function (e) {
173
173
  var _a;
174
174
 
175
- var marker = markerRef.current; //console.log('onMouseOverHandler', marker);
175
+ var marker = markerRef.current;
176
176
 
177
177
  if (marker) {
178
178
  var mouseOverHandler = (_a = options === null || options === void 0 ? void 0 : options.event) === null || _a === void 0 ? void 0 : _a.get('mouseover');
@@ -185,6 +185,25 @@ function MapMarkerWrapper(_a) {
185
185
 
186
186
  next && topOnHover && controller.markerToTheTop(marker);
187
187
  }
188
+ }; // 20251014 | 장한별 | mouseleave 이벤트 추가, 마우스가 마커 위에서 떠날 때 원래 zindex 를 복구하기 위함
189
+
190
+
191
+ var onMouseLeaveHandler = function (e) {
192
+ var _a;
193
+
194
+ var marker = markerRef.current;
195
+
196
+ if (marker) {
197
+ var mouseOutHandler = (_a = options === null || options === void 0 ? void 0 : options.event) === null || _a === void 0 ? void 0 : _a.get('mouseout');
198
+ var next = true;
199
+
200
+ if (mouseOutHandler) {
201
+ var hasNext = mouseOutHandler(e);
202
+ hasNext !== undefined && (next = hasNext);
203
+ }
204
+
205
+ next && topOnHover && controller.restoreMarkerZIndex(marker);
206
+ }
188
207
  }; //create object
189
208
 
190
209
 
@@ -202,10 +221,12 @@ function MapMarkerWrapper(_a) {
202
221
  }); //드래그 여부 초기화를 먼저 수행하기 위해 capture : true 처리
203
222
 
204
223
  divElement.addEventListener('mouseover', onMouseOverHandler);
224
+ divElement.addEventListener('mouseleave', onMouseLeaveHandler);
205
225
  return function () {
206
226
  divElement.removeEventListener('click', onClickHandler);
207
227
  divElement.removeEventListener('mousedown', onMousedownHandler);
208
228
  divElement.removeEventListener('mouseover', onMouseOverHandler);
229
+ divElement.removeEventListener('mouseleave', onMouseLeaveHandler);
209
230
 
210
231
  if (markerRef.current) {
211
232
  controller.clearDrawable(markerRef.current);
@@ -28,6 +28,7 @@ export declare class GoogleMintMapController extends MintMapController {
28
28
  private getMaxZIndex;
29
29
  setMarkerZIndex(marker: Marker, zIndex: number): void;
30
30
  markerToTheTop(marker: Marker): void;
31
+ restoreMarkerZIndex(marker: Marker): void;
31
32
  clearDrawable(drawable: Drawable): boolean;
32
33
  private dragged;
33
34
  isMapDragged(): boolean;
@@ -20,7 +20,7 @@ var polygon = require('../core/util/polygon.js');
20
20
  require('../naver/NaverMintMapController.js');
21
21
  require('../core/advanced/canvas/CanvasMarkerClaude.js');
22
22
  require('../core/advanced/MapLoadingComponents.js');
23
- require('../core/advanced/woongCanvas/WoongKonvaMarker.js');
23
+ require('../core/advanced/woongCanvas/WoongCanvasLayer.js');
24
24
  require('../core/advanced/woongCanvas/shared/types.js');
25
25
  require('../core/advanced/woongCanvas/shared/context.js');
26
26
  require('../core/advanced/woongCanvas/shared/performance.js');
@@ -340,6 +340,10 @@ function (_super) {
340
340
  }
341
341
  };
342
342
 
343
+ GoogleMintMapController.prototype.restoreMarkerZIndex = function (marker) {// Google Maps에서는 restoreMarkerZIndex 기능을 지원하지 않습니다.
344
+ // 이 기능은 Naver Maps에서만 사용 가능합니다.
345
+ };
346
+
343
347
  GoogleMintMapController.prototype.clearDrawable = function (drawable) {
344
348
  if (drawable && drawable.native) {
345
349
  if (drawable.native instanceof google.maps.Marker || drawable.native instanceof google.maps.Polygon || drawable.native instanceof google.maps.Polyline) {
@@ -31,6 +31,7 @@ export declare class KakaoMintMapController extends MintMapController {
31
31
  private getMaxZIndex;
32
32
  setMarkerZIndex(marker: Marker, zIndex: number): void;
33
33
  markerToTheTop(marker: Marker): void;
34
+ restoreMarkerZIndex(marker: Marker): void;
34
35
  clearDrawable(drawable: Drawable): boolean;
35
36
  private dragged;
36
37
  isMapDragged(): boolean;
@@ -21,7 +21,7 @@ var polygon = require('../core/util/polygon.js');
21
21
  require('../naver/NaverMintMapController.js');
22
22
  require('../core/advanced/canvas/CanvasMarkerClaude.js');
23
23
  require('../core/advanced/MapLoadingComponents.js');
24
- require('../core/advanced/woongCanvas/WoongKonvaMarker.js');
24
+ require('../core/advanced/woongCanvas/WoongCanvasLayer.js');
25
25
  require('../core/advanced/woongCanvas/shared/types.js');
26
26
  require('../core/advanced/woongCanvas/shared/context.js');
27
27
  require('../core/advanced/woongCanvas/shared/performance.js');
@@ -348,6 +348,10 @@ function (_super) {
348
348
  }
349
349
  };
350
350
 
351
+ KakaoMintMapController.prototype.restoreMarkerZIndex = function (marker) {// Kakao Maps에서는 restoreMarkerZIndex 기능을 지원하지 않습니다.
352
+ // 이 기능은 Naver Maps에서만 사용 가능합니다.
353
+ };
354
+
351
355
  KakaoMintMapController.prototype.clearDrawable = function (drawable) {
352
356
  var _this = this;
353
357