@mint-ui/map 1.2.0-test.19 โ†’ 1.2.0-test.20

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.
@@ -84,13 +84,54 @@ declare const WoongCanvasLayer: <T>(props: WoongCanvasLayerProps<T>) => React.Re
84
84
  /**
85
85
  * ๐Ÿš€ WoongCanvasLayer - Konva ๊ธฐ๋ฐ˜ ์ดˆ๊ณ ์„ฑ๋Šฅ ๋งˆ์ปค/ํด๋ฆฌ๊ณค ๋ Œ๋”๋ง ์ปดํฌ๋„ŒํŠธ
86
86
  *
87
- * ## ๐Ÿ“Œ ์ฃผ์š” ํŠน์ง•
87
+ * 30,000๊ฐœ ์ด์ƒ์˜ ๋งˆ์ปค/ํด๋ฆฌ๊ณค์„ 60fps๋กœ ๋ Œ๋”๋งํ•˜๋Š” ์ตœ์ ํ™”๋œ Canvas ๋ ˆ์ด์–ด ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.
88
+ *
89
+ * ## ๐ŸŽฏ ์ฃผ์š” ํŠน์ง•
88
90
  * - **30,000๊ฐœ ์ด์ƒ์˜ ํด๋ฆฌ๊ณค/๋งˆ์ปค๋ฅผ 60fps๋กœ ๋ Œ๋”๋ง**
89
91
  * - **Multi-Layer ์•„ํ‚คํ…์ฒ˜**: Base/Animation/Event ๋ ˆ์ด์–ด ๋ถ„๋ฆฌ
90
92
  * - **Spatial Hash Grid**: O(1) ์ˆ˜์ค€์˜ ๋น ๋ฅธ Hit Test
91
93
  * - **LRU ์บ์‹œ**: ์ขŒํ‘œ ๋ณ€ํ™˜ ๊ฒฐ๊ณผ ์บ์‹ฑ์œผ๋กœ ์„ฑ๋Šฅ ์ตœ์ ํ™”
92
94
  * - **Viewport Culling**: ํ™”๋ฉด์— ๋ณด์ด๋Š” ์˜์—ญ๋งŒ ๋ Œ๋”๋ง
93
95
  * - **Discriminated Union Props**: ํƒ€์ž… ์•ˆ์ „ํ•œ MARKER/POLYGON ๋ชจ๋“œ
96
+ * - **topOnHover + renderEvent ์กฐํ•ฉ**: hover๋œ ํ•ญ๋ชฉ์„ ์ตœ์ƒ๋‹จ์— ํ‘œ์‹œ
97
+ *
98
+ * ## ๐Ÿ“‹ Props API
99
+ *
100
+ * ### ๊ณตํ†ต Props (MARKER & POLYGON ๋ชจ๋‘ ์‚ฌ์šฉ)
101
+ * @param data - ๋ Œ๋”๋งํ•  ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด
102
+ * @param dataType - 'MARKER' ๋˜๋Š” 'POLYGON'
103
+ * @param onClick - ํด๋ฆญ ์‹œ ํ˜ธ์ถœ๋˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜
104
+ * @param onMouseOver - Hover ์‹œ์ž‘ ์‹œ ํ˜ธ์ถœ๋˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜
105
+ * @param onMouseOut - Hover ์ข…๋ฃŒ ์‹œ ํ˜ธ์ถœ๋˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜
106
+ * @param enableMultiSelect - ๋‹ค์ค‘ ์„ ํƒ ํ™œ์„ฑํ™” ์—ฌ๋ถ€ (๊ธฐ๋ณธ: false)
107
+ * @param topOnHover - Hover ์‹œ ์ตœ์ƒ๋‹จ ํ‘œ์‹œ ์—ฌ๋ถ€ (๊ธฐ๋ณธ: false)
108
+ * @param enableViewportCulling - ๋ทฐํฌํŠธ ์ปฌ๋ง ํ™œ์„ฑํ™” ์—ฌ๋ถ€ (๊ธฐ๋ณธ: true)
109
+ * @param cullingMargin - ์ปฌ๋ง ์—ฌ์œ  ๊ณต๊ฐ„ (๊ธฐ๋ณธ: 100px)
110
+ * @param maxCacheSize - LRU ์บ์‹œ ์ตœ๋Œ€ ํฌ๊ธฐ (๊ธฐ๋ณธ: 30000)
111
+ * @param selectedItems - ์™ธ๋ถ€ ์ œ์–ด ์„ ํƒ ์ƒํƒœ
112
+ * @param selectedItem - ๋‹จ์ผ ์„ ํƒ ์•„์ดํ…œ
113
+ * @param disableInteraction - ๋ชจ๋“  ์ƒํ˜ธ์ž‘์šฉ ๋น„ํ™œ์„ฑํ™” (๊ธฐ๋ณธ: false)
114
+ * @param zIndex - ๋ ˆ์ด์–ด ์ˆœ์„œ (๊ธฐ๋ณธ: 0)
115
+ * @param visible - ํ‘œ์‹œ ์—ฌ๋ถ€ (๊ธฐ๋ณธ: true)
116
+ *
117
+ * ### MARKER ํƒ€์ž… ์ „์šฉ Props
118
+ * @param renderBase - Base Layer ๋ Œ๋”๋ง ํ•จ์ˆ˜ (ํ•„์ˆ˜)
119
+ * @param renderAnimation - Animation Layer ๋ Œ๋”๋ง ํ•จ์ˆ˜ (์„ ํƒ)
120
+ * @param renderEvent - Event Layer ๋ Œ๋”๋ง ํ•จ์ˆ˜ (์„ ํƒ)
121
+ *
122
+ * ### POLYGON ํƒ€์ž… ์ „์šฉ Props
123
+ * @param baseFillColor - ๊ธฐ๋ณธ ์ฑ„์šฐ๊ธฐ ์ƒ‰์ƒ (ํ•„์ˆ˜)
124
+ * @param baseStrokeColor - ๊ธฐ๋ณธ ํ…Œ๋‘๋ฆฌ ์ƒ‰์ƒ (ํ•„์ˆ˜)
125
+ * @param baseLineWidth - ๊ธฐ๋ณธ ํ…Œ๋‘๋ฆฌ ๋‘๊ป˜ (ํ•„์ˆ˜)
126
+ * @param selectedFillColor - ์„ ํƒ ์ฑ„์šฐ๊ธฐ ์ƒ‰์ƒ (์„ ํƒ)
127
+ * @param selectedStrokeColor - ์„ ํƒ ํ…Œ๋‘๋ฆฌ ์ƒ‰์ƒ (์„ ํƒ)
128
+ * @param selectedLineWidth - ์„ ํƒ ํ…Œ๋‘๋ฆฌ ๋‘๊ป˜ (์„ ํƒ)
129
+ * @param activeFillColor - ๋งˆ์ง€๋ง‰ ์„ ํƒ ์ฑ„์šฐ๊ธฐ ์ƒ‰์ƒ (์„ ํƒ)
130
+ * @param activeStrokeColor - ๋งˆ์ง€๋ง‰ ์„ ํƒ ํ…Œ๋‘๋ฆฌ ์ƒ‰์ƒ (์„ ํƒ)
131
+ * @param activeLineWidth - ๋งˆ์ง€๋ง‰ ์„ ํƒ ํ…Œ๋‘๋ฆฌ ๋‘๊ป˜ (์„ ํƒ)
132
+ * @param hoveredFillColor - Hover ์ฑ„์šฐ๊ธฐ ์ƒ‰์ƒ (์„ ํƒ)
133
+ * @param hoveredStrokeColor - Hover ํ…Œ๋‘๋ฆฌ ์ƒ‰์ƒ (์„ ํƒ)
134
+ * @param hoveredLineWidth - Hover ํ…Œ๋‘๋ฆฌ ๋‘๊ป˜ (์„ ํƒ)
94
135
  *
95
136
  * ## ๐ŸŽฏ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
96
137
  *
@@ -105,9 +146,9 @@ declare const WoongCanvasLayer: <T>(props: WoongCanvasLayerProps<T>) => React.Re
105
146
  * selectedFillColor="rgba(255, 193, 7, 0.7)"
106
147
  * selectedStrokeColor="rgba(255, 152, 0, 1)"
107
148
  * selectedLineWidth={4}
108
- * hoveredFillColor="rgba(100, 150, 255, 0.8)" // optional
109
- * hoveredStrokeColor="rgba(0, 100, 200, 1)" // optional
110
- * hoveredLineWidth={3} // optional
149
+ * hoveredFillColor="rgba(100, 150, 255, 0.8)"
150
+ * hoveredStrokeColor="rgba(0, 100, 200, 1)"
151
+ * hoveredLineWidth={3}
111
152
  * enableMultiSelect={true}
112
153
  * onClick={handleClick}
113
154
  * />
@@ -118,14 +159,35 @@ declare const WoongCanvasLayer: <T>(props: WoongCanvasLayerProps<T>) => React.Re
118
159
  * <WoongCanvasLayer
119
160
  * dataType={CanvasDataType.MARKER}
120
161
  * data={markers}
121
- * renderBase={renderMarkerBase} // required
122
- * renderAnimation={renderMarkerAnimation} // optional
123
- * renderEvent={renderMarkerEvent} // optional
162
+ * renderBase={renderMarkerBase}
163
+ * renderAnimation={renderMarkerAnimation}
164
+ * renderEvent={renderMarkerEvent}
124
165
  * topOnHover={true}
125
166
  * onClick={handleClick}
126
167
  * />
127
168
  * ```
128
169
  *
170
+ * ### 3๏ธโƒฃ topOnHover + renderEvent ์กฐํ•ฉ
171
+ *
172
+ * `topOnHover={true}`์™€ `renderEvent`๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด hover๋œ ํ•ญ๋ชฉ์ด ์ตœ์ƒ๋‹จ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค:
173
+ *
174
+ * ```tsx
175
+ * <WoongCanvasLayer
176
+ * dataType={CanvasDataType.MARKER}
177
+ * data={markers}
178
+ * renderBase={renderMarkerBase}
179
+ * renderEvent={renderMarkerEvent}
180
+ * topOnHover={true}
181
+ * onClick={handleClick}
182
+ * />
183
+ * ```
184
+ *
185
+ * **๋™์ž‘ ๋ฐฉ์‹:**
186
+ * 1. **Base Layer**: hover๋œ ํ•ญ๋ชฉ์„ ์ œ์™ธํ•˜๊ณ  ์ผ๋ฐ˜ ํ•ญ๋ชฉ๋“ค ๋ Œ๋”๋ง
187
+ * 2. **Event Layer**:
188
+ * - ๋จผ์ € hover๋œ ํ•ญ๋ชฉ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ํ•ญ๋ชฉ๋“ค ๋ Œ๋”๋ง
189
+ * - ๊ทธ ๋‹ค์Œ hover๋œ ํ•ญ๋ชฉ์„ ์ตœ์ƒ๋‹จ์— ๋ Œ๋”๋ง (์‹œ๊ฐ์  ์šฐ์„ ์ˆœ์œ„)
190
+ *
129
191
  * ## ๐Ÿ“Š ๋ฐ์ดํ„ฐ ํ˜•์‹
130
192
  * ```typescript
131
193
  * const data: KonvaCanvasData<T>[] = [
@@ -137,6 +199,7 @@ declare const WoongCanvasLayer: <T>(props: WoongCanvasLayerProps<T>) => React.Re
137
199
  * // MARKER: boxWidth/boxHeight ๊ถŒ์žฅ (Hit Test ์ •ํ™•๋„)
138
200
  * boxWidth: 60,
139
201
  * boxHeight: 75,
202
+ * tailHeight: 9, // ๊ผฌ๋ฆฌ ๋†’์ด (Viewport Culling์šฉ, Hit Test ์ œ์™ธ)
140
203
  * // ์ปค์Šคํ…€ ๋ฐ์ดํ„ฐ
141
204
  * ...customData
142
205
  * }
@@ -157,6 +220,8 @@ declare const WoongCanvasLayer: <T>(props: WoongCanvasLayerProps<T>) => React.Re
157
220
  * tempCtx.font = 'bold 15px Arial';
158
221
  * const boxWidth = Math.max(60, tempCtx.measureText(text).width + 20);
159
222
  *
160
- * @see {@link https://github.com/your-repo/docs/WoongCanvasLayer.md} ์ „์ฒด ๋ฌธ์„œ
223
+ * @see {@link ./README.md} ์ „์ฒด ๋ฌธ์„œ
224
+ * @version 2.2.1
225
+ * @since 2.0.0
161
226
  */
162
227
  export default WoongCanvasLayer;
@@ -428,6 +428,12 @@ var WoongCanvasLayer = function (props) {
428
428
  * 1. Shape ์žฌ์‚ฌ์šฉ์œผ๋กœ ๊ฐ์ฒด ์ƒ์„ฑ/ํŒŒ๊ดด ์˜ค๋ฒ„ํ—ค๋“œ ์ œ๊ฑฐ
429
429
  * 2. sceneFunc ํ•œ ๋ฒˆ๋งŒ ์„ค์ • (ํ•จ์ˆ˜ ์žฌ์ƒ์„ฑ ์ œ๊ฑฐ)
430
430
  * 3. ํด๋กœ์ €๋กœ ์ตœ์‹  ๋ฐ์ดํ„ฐ ์ฐธ์กฐ
431
+ *
432
+ * ๐ŸŽฏ topOnHover + renderEvent ์กฐํ•ฉ ์ง€์›:
433
+ * - topOnHover๊ฐ€ true์ด๊ณ  renderEvent๊ฐ€ ์žˆ์œผ๋ฉด:
434
+ * 1. ๋จผ์ € hover๋œ ํ•ญ๋ชฉ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ํ•ญ๋ชฉ๋“ค ๋ Œ๋”๋ง
435
+ * 2. ๊ทธ ๋‹ค์Œ hover๋œ ํ•ญ๋ชฉ์„ ์ตœ์ƒ๋‹จ์— ๋ Œ๋”๋ง (์‹œ๊ฐ์  ์šฐ์„ ์ˆœ์œ„)
436
+ * - topOnHover๊ฐ€ false์ด๊ฑฐ๋‚˜ renderEvent๊ฐ€ ์—†์œผ๋ฉด ์ผ๋ฐ˜ ๋ Œ๋”๋ง
431
437
  */
432
438
 
433
439
 
@@ -447,13 +453,41 @@ var WoongCanvasLayer = function (props) {
447
453
  var ctx = context; // ํด๋กœ์ €๋กœ ์ตœ์‹  ref ๊ฐ’ ์ฐธ์กฐ
448
454
 
449
455
  var selectedItems = Array.from(selectedItemsMapRef.current.values());
450
- renderEvent({
451
- ctx: ctx,
452
- hoveredItem: hoveredItemRef.current,
453
- utils: renderUtils,
454
- selectedItems: selectedItems,
455
- selectedItem: selectedItemRef.current
456
- });
456
+ var hovered = hoveredItemRef.current; // topOnHover๊ฐ€ true์ด๋ฉด hover๋œ ํ•ญ๋ชฉ์„ ์ตœ์ƒ๋‹จ์— ๋ Œ๋”๋ง
457
+
458
+ if (topOnHover && hovered) {
459
+ // 1. ๋จผ์ € ์ผ๋ฐ˜ ํ•ญ๋ชฉ๋“ค ๋ Œ๋”๋ง (hover๋œ ํ•ญ๋ชฉ ์ œ์™ธ)
460
+ renderEvent({
461
+ ctx: ctx,
462
+ hoveredItem: null,
463
+ utils: renderUtils,
464
+ selectedItems: selectedItems.filter(function (item) {
465
+ return item.id !== hovered.id;
466
+ }),
467
+ selectedItem: selectedItemRef.current
468
+ }); // 2. hover๋œ ํ•ญ๋ชฉ์„ ์ตœ์ƒ๋‹จ์— ๋ Œ๋”๋ง
469
+
470
+ var isHoveredInViewport = enableViewportCulling ? isInViewport(hovered) : true;
471
+
472
+ if (isHoveredInViewport) {
473
+ renderEvent({
474
+ ctx: ctx,
475
+ hoveredItem: hovered,
476
+ utils: renderUtils,
477
+ selectedItems: selectedItems,
478
+ selectedItem: selectedItemRef.current
479
+ });
480
+ }
481
+ } else {
482
+ // topOnHover๊ฐ€ false์ด๊ฑฐ๋‚˜ hover๋œ ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด ์ผ๋ฐ˜ ๋ Œ๋”๋ง
483
+ renderEvent({
484
+ ctx: ctx,
485
+ hoveredItem: hovered,
486
+ utils: renderUtils,
487
+ selectedItems: selectedItems,
488
+ selectedItem: selectedItemRef.current
489
+ });
490
+ }
457
491
  },
458
492
  perfectDrawEnabled: false,
459
493
  listening: false,
@@ -3,32 +3,49 @@ import { Position, Offset } from "../../../../types";
3
3
  /**
4
4
  * ์บ”๋ฒ„์Šค ๋ฐ์ดํ„ฐ ํƒ€์ž… Enum
5
5
  * ๋งˆ์ปค์ธ์ง€ ํด๋ฆฌ๊ณค์ธ์ง€ ๊ตฌ๋ถ„ํ•˜๋Š” ์ƒ์ˆ˜
6
+ *
7
+ * @enum {string}
8
+ * @memberof WoongCanvasLayer
6
9
  */
7
10
  export declare enum CanvasDataType {
11
+ /** ๋งˆ์ปค ํƒ€์ž… - ์ปค์Šคํ…€ ๋ Œ๋”๋ง ํ•„์š” */
8
12
  MARKER = "MARKER",
13
+ /** ํด๋ฆฌ๊ณค ํƒ€์ž… - ์ž๋™ ๋ Œ๋”๋ง ์ง€์› */
9
14
  POLYGON = "POLYGON"
10
15
  }
11
16
  /**
12
- * ํด๋ฆฌ๊ณค ๊ฒฝ๋กœ ์ •์˜
17
+ * ํด๋ฆฌ๊ณค ๊ฒฝ๋กœ ์ •์˜ (GeoJSON MultiPolygon ํ˜•์‹)
18
+ *
19
+ * @interface Paths
20
+ * @memberof WoongCanvasLayer
13
21
  */
14
22
  export interface Paths {
23
+ /** GeoJSON ํƒ€์ž… (MultiPolygon) */
15
24
  type: string;
25
+ /** 4์ฐจ์› ์ขŒํ‘œ ๋ฐฐ์—ด [MultiPolygon][Polygon][Point][x/y] */
16
26
  coordinates: number[][][][];
17
27
  }
18
- /**
19
- * ์บ”๋ฒ„์Šค ๋งˆ์ปค/ํด๋ฆฌ๊ณค ๊ธฐ๋ณธ ์˜ต์…˜
20
- */
21
28
  /**
22
29
  * Konva ์บ”๋ฒ„์Šค ๋งˆ์ปค/ํด๋ฆฌ๊ณค์˜ ๊ธฐ๋ณธ ํ•„์ˆ˜ ์†์„ฑ
23
30
  * (๋ Œ๋”๋ง์— ํ•„์š”ํ•œ ์ตœ์†Œ ์ •๋ณด)
31
+ *
32
+ * @interface KonvaCanvasOption
33
+ * @memberof WoongCanvasLayer
24
34
  */
25
35
  export interface KonvaCanvasOption {
36
+ /** ๊ณ ์œ  ์‹๋ณ„์ž */
26
37
  id: string;
38
+ /** ์ง€๋„์ƒ ์œ„์น˜ (์œ„๊ฒฝ๋„) */
27
39
  position: Position;
40
+ /** ๋งˆ์ปค ๋ณธ์ฒด ๋„ˆ๋น„ (Hit Test ์˜์—ญ) */
28
41
  boxWidth?: number;
42
+ /** ๋งˆ์ปค ๋ณธ์ฒด ๋†’์ด (Hit Test ์˜์—ญ) */
29
43
  boxHeight?: number;
44
+ /** ๋งˆ์ปค ๊ผฌ๋ฆฌ ๋†’์ด (Viewport Culling์šฉ, Hit Test์—์„œ๋Š” ์ œ์™ธ) */
30
45
  tailHeight?: number;
46
+ /** ํด๋ฆฌ๊ณค ๊ฒฝ๋กœ (GeoJSON MultiPolygon) */
31
47
  paths?: Paths;
48
+ /** ๋„๋„› ํด๋ฆฌ๊ณค ์—ฌ๋ถ€ (๊ตฌ๋ฉ์ด ์žˆ๋Š” ํด๋ฆฌ๊ณค) */
32
49
  isDonutPolygon?: boolean;
33
50
  }
34
51
  /**
@@ -5,10 +5,16 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  /**
6
6
  * ์บ”๋ฒ„์Šค ๋ฐ์ดํ„ฐ ํƒ€์ž… Enum
7
7
  * ๋งˆ์ปค์ธ์ง€ ํด๋ฆฌ๊ณค์ธ์ง€ ๊ตฌ๋ถ„ํ•˜๋Š” ์ƒ์ˆ˜
8
+ *
9
+ * @enum {string}
10
+ * @memberof WoongCanvasLayer
8
11
  */
9
12
  exports.CanvasDataType = void 0;
10
13
 
11
14
  (function (CanvasDataType) {
15
+ /** ๋งˆ์ปค ํƒ€์ž… - ์ปค์Šคํ…€ ๋ Œ๋”๋ง ํ•„์š” */
12
16
  CanvasDataType["MARKER"] = "MARKER";
17
+ /** ํด๋ฆฌ๊ณค ํƒ€์ž… - ์ž๋™ ๋ Œ๋”๋ง ์ง€์› */
18
+
13
19
  CanvasDataType["POLYGON"] = "POLYGON";
14
20
  })(exports.CanvasDataType || (exports.CanvasDataType = {}));
package/dist/index.es.js CHANGED
@@ -653,11 +653,17 @@ styleInject(css_248z$1);
653
653
  /**
654
654
  * ์บ”๋ฒ„์Šค ๋ฐ์ดํ„ฐ ํƒ€์ž… Enum
655
655
  * ๋งˆ์ปค์ธ์ง€ ํด๋ฆฌ๊ณค์ธ์ง€ ๊ตฌ๋ถ„ํ•˜๋Š” ์ƒ์ˆ˜
656
+ *
657
+ * @enum {string}
658
+ * @memberof WoongCanvasLayer
656
659
  */
657
660
  var CanvasDataType;
658
661
 
659
662
  (function (CanvasDataType) {
663
+ /** ๋งˆ์ปค ํƒ€์ž… - ์ปค์Šคํ…€ ๋ Œ๋”๋ง ํ•„์š” */
660
664
  CanvasDataType["MARKER"] = "MARKER";
665
+ /** ํด๋ฆฌ๊ณค ํƒ€์ž… - ์ž๋™ ๋ Œ๋”๋ง ์ง€์› */
666
+
661
667
  CanvasDataType["POLYGON"] = "POLYGON";
662
668
  })(CanvasDataType || (CanvasDataType = {}));
663
669
 
@@ -6055,6 +6061,12 @@ var WoongCanvasLayer = function (props) {
6055
6061
  * 1. Shape ์žฌ์‚ฌ์šฉ์œผ๋กœ ๊ฐ์ฒด ์ƒ์„ฑ/ํŒŒ๊ดด ์˜ค๋ฒ„ํ—ค๋“œ ์ œ๊ฑฐ
6056
6062
  * 2. sceneFunc ํ•œ ๋ฒˆ๋งŒ ์„ค์ • (ํ•จ์ˆ˜ ์žฌ์ƒ์„ฑ ์ œ๊ฑฐ)
6057
6063
  * 3. ํด๋กœ์ €๋กœ ์ตœ์‹  ๋ฐ์ดํ„ฐ ์ฐธ์กฐ
6064
+ *
6065
+ * ๐ŸŽฏ topOnHover + renderEvent ์กฐํ•ฉ ์ง€์›:
6066
+ * - topOnHover๊ฐ€ true์ด๊ณ  renderEvent๊ฐ€ ์žˆ์œผ๋ฉด:
6067
+ * 1. ๋จผ์ € hover๋œ ํ•ญ๋ชฉ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ํ•ญ๋ชฉ๋“ค ๋ Œ๋”๋ง
6068
+ * 2. ๊ทธ ๋‹ค์Œ hover๋œ ํ•ญ๋ชฉ์„ ์ตœ์ƒ๋‹จ์— ๋ Œ๋”๋ง (์‹œ๊ฐ์  ์šฐ์„ ์ˆœ์œ„)
6069
+ * - topOnHover๊ฐ€ false์ด๊ฑฐ๋‚˜ renderEvent๊ฐ€ ์—†์œผ๋ฉด ์ผ๋ฐ˜ ๋ Œ๋”๋ง
6058
6070
  */
6059
6071
 
6060
6072
 
@@ -6074,13 +6086,41 @@ var WoongCanvasLayer = function (props) {
6074
6086
  var ctx = context; // ํด๋กœ์ €๋กœ ์ตœ์‹  ref ๊ฐ’ ์ฐธ์กฐ
6075
6087
 
6076
6088
  var selectedItems = Array.from(selectedItemsMapRef.current.values());
6077
- renderEvent({
6078
- ctx: ctx,
6079
- hoveredItem: hoveredItemRef.current,
6080
- utils: renderUtils,
6081
- selectedItems: selectedItems,
6082
- selectedItem: selectedItemRef.current
6083
- });
6089
+ var hovered = hoveredItemRef.current; // topOnHover๊ฐ€ true์ด๋ฉด hover๋œ ํ•ญ๋ชฉ์„ ์ตœ์ƒ๋‹จ์— ๋ Œ๋”๋ง
6090
+
6091
+ if (topOnHover && hovered) {
6092
+ // 1. ๋จผ์ € ์ผ๋ฐ˜ ํ•ญ๋ชฉ๋“ค ๋ Œ๋”๋ง (hover๋œ ํ•ญ๋ชฉ ์ œ์™ธ)
6093
+ renderEvent({
6094
+ ctx: ctx,
6095
+ hoveredItem: null,
6096
+ utils: renderUtils,
6097
+ selectedItems: selectedItems.filter(function (item) {
6098
+ return item.id !== hovered.id;
6099
+ }),
6100
+ selectedItem: selectedItemRef.current
6101
+ }); // 2. hover๋œ ํ•ญ๋ชฉ์„ ์ตœ์ƒ๋‹จ์— ๋ Œ๋”๋ง
6102
+
6103
+ var isHoveredInViewport = enableViewportCulling ? isInViewport(hovered) : true;
6104
+
6105
+ if (isHoveredInViewport) {
6106
+ renderEvent({
6107
+ ctx: ctx,
6108
+ hoveredItem: hovered,
6109
+ utils: renderUtils,
6110
+ selectedItems: selectedItems,
6111
+ selectedItem: selectedItemRef.current
6112
+ });
6113
+ }
6114
+ } else {
6115
+ // topOnHover๊ฐ€ false์ด๊ฑฐ๋‚˜ hover๋œ ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด ์ผ๋ฐ˜ ๋ Œ๋”๋ง
6116
+ renderEvent({
6117
+ ctx: ctx,
6118
+ hoveredItem: hovered,
6119
+ utils: renderUtils,
6120
+ selectedItems: selectedItems,
6121
+ selectedItem: selectedItemRef.current
6122
+ });
6123
+ }
6084
6124
  },
6085
6125
  perfectDrawEnabled: false,
6086
6126
  listening: false,
package/dist/index.umd.js CHANGED
@@ -657,11 +657,17 @@
657
657
  /**
658
658
  * ์บ”๋ฒ„์Šค ๋ฐ์ดํ„ฐ ํƒ€์ž… Enum
659
659
  * ๋งˆ์ปค์ธ์ง€ ํด๋ฆฌ๊ณค์ธ์ง€ ๊ตฌ๋ถ„ํ•˜๋Š” ์ƒ์ˆ˜
660
+ *
661
+ * @enum {string}
662
+ * @memberof WoongCanvasLayer
660
663
  */
661
664
  exports.CanvasDataType = void 0;
662
665
 
663
666
  (function (CanvasDataType) {
667
+ /** ๋งˆ์ปค ํƒ€์ž… - ์ปค์Šคํ…€ ๋ Œ๋”๋ง ํ•„์š” */
664
668
  CanvasDataType["MARKER"] = "MARKER";
669
+ /** ํด๋ฆฌ๊ณค ํƒ€์ž… - ์ž๋™ ๋ Œ๋”๋ง ์ง€์› */
670
+
665
671
  CanvasDataType["POLYGON"] = "POLYGON";
666
672
  })(exports.CanvasDataType || (exports.CanvasDataType = {}));
667
673
 
@@ -6059,6 +6065,12 @@
6059
6065
  * 1. Shape ์žฌ์‚ฌ์šฉ์œผ๋กœ ๊ฐ์ฒด ์ƒ์„ฑ/ํŒŒ๊ดด ์˜ค๋ฒ„ํ—ค๋“œ ์ œ๊ฑฐ
6060
6066
  * 2. sceneFunc ํ•œ ๋ฒˆ๋งŒ ์„ค์ • (ํ•จ์ˆ˜ ์žฌ์ƒ์„ฑ ์ œ๊ฑฐ)
6061
6067
  * 3. ํด๋กœ์ €๋กœ ์ตœ์‹  ๋ฐ์ดํ„ฐ ์ฐธ์กฐ
6068
+ *
6069
+ * ๐ŸŽฏ topOnHover + renderEvent ์กฐํ•ฉ ์ง€์›:
6070
+ * - topOnHover๊ฐ€ true์ด๊ณ  renderEvent๊ฐ€ ์žˆ์œผ๋ฉด:
6071
+ * 1. ๋จผ์ € hover๋œ ํ•ญ๋ชฉ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ํ•ญ๋ชฉ๋“ค ๋ Œ๋”๋ง
6072
+ * 2. ๊ทธ ๋‹ค์Œ hover๋œ ํ•ญ๋ชฉ์„ ์ตœ์ƒ๋‹จ์— ๋ Œ๋”๋ง (์‹œ๊ฐ์  ์šฐ์„ ์ˆœ์œ„)
6073
+ * - topOnHover๊ฐ€ false์ด๊ฑฐ๋‚˜ renderEvent๊ฐ€ ์—†์œผ๋ฉด ์ผ๋ฐ˜ ๋ Œ๋”๋ง
6062
6074
  */
6063
6075
 
6064
6076
 
@@ -6078,13 +6090,41 @@
6078
6090
  var ctx = context; // ํด๋กœ์ €๋กœ ์ตœ์‹  ref ๊ฐ’ ์ฐธ์กฐ
6079
6091
 
6080
6092
  var selectedItems = Array.from(selectedItemsMapRef.current.values());
6081
- renderEvent({
6082
- ctx: ctx,
6083
- hoveredItem: hoveredItemRef.current,
6084
- utils: renderUtils,
6085
- selectedItems: selectedItems,
6086
- selectedItem: selectedItemRef.current
6087
- });
6093
+ var hovered = hoveredItemRef.current; // topOnHover๊ฐ€ true์ด๋ฉด hover๋œ ํ•ญ๋ชฉ์„ ์ตœ์ƒ๋‹จ์— ๋ Œ๋”๋ง
6094
+
6095
+ if (topOnHover && hovered) {
6096
+ // 1. ๋จผ์ € ์ผ๋ฐ˜ ํ•ญ๋ชฉ๋“ค ๋ Œ๋”๋ง (hover๋œ ํ•ญ๋ชฉ ์ œ์™ธ)
6097
+ renderEvent({
6098
+ ctx: ctx,
6099
+ hoveredItem: null,
6100
+ utils: renderUtils,
6101
+ selectedItems: selectedItems.filter(function (item) {
6102
+ return item.id !== hovered.id;
6103
+ }),
6104
+ selectedItem: selectedItemRef.current
6105
+ }); // 2. hover๋œ ํ•ญ๋ชฉ์„ ์ตœ์ƒ๋‹จ์— ๋ Œ๋”๋ง
6106
+
6107
+ var isHoveredInViewport = enableViewportCulling ? isInViewport(hovered) : true;
6108
+
6109
+ if (isHoveredInViewport) {
6110
+ renderEvent({
6111
+ ctx: ctx,
6112
+ hoveredItem: hovered,
6113
+ utils: renderUtils,
6114
+ selectedItems: selectedItems,
6115
+ selectedItem: selectedItemRef.current
6116
+ });
6117
+ }
6118
+ } else {
6119
+ // topOnHover๊ฐ€ false์ด๊ฑฐ๋‚˜ hover๋œ ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด ์ผ๋ฐ˜ ๋ Œ๋”๋ง
6120
+ renderEvent({
6121
+ ctx: ctx,
6122
+ hoveredItem: hovered,
6123
+ utils: renderUtils,
6124
+ selectedItems: selectedItems,
6125
+ selectedItem: selectedItemRef.current
6126
+ });
6127
+ }
6088
6128
  },
6089
6129
  perfectDrawEnabled: false,
6090
6130
  listening: false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mint-ui/map",
3
- "version": "1.2.0-test.19",
3
+ "version": "1.2.0-test.20",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.es.js",
6
6
  "browser": "./dist/index.umd.js",