@mint-ui/map 1.2.0-test.24 โ 1.2.0-test.26
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/woongCanvas/WoongCanvasLayer.d.ts +8 -73
- package/dist/components/mint-map/core/advanced/woongCanvas/WoongCanvasLayer.js +45 -60
- package/dist/components/mint-map/core/advanced/woongCanvas/index.d.ts +0 -10
- package/dist/components/mint-map/core/advanced/woongCanvas/shared/context.d.ts +5 -73
- package/dist/components/mint-map/core/advanced/woongCanvas/shared/context.js +14 -81
- package/dist/components/mint-map/core/advanced/woongCanvas/shared/index.d.ts +0 -11
- package/dist/components/mint-map/core/advanced/woongCanvas/shared/performance.d.ts +13 -62
- package/dist/components/mint-map/core/advanced/woongCanvas/shared/performance.js +13 -62
- package/dist/components/mint-map/core/advanced/woongCanvas/shared/renderer.d.ts +24 -78
- package/dist/components/mint-map/core/advanced/woongCanvas/shared/renderer.js +23 -77
- package/dist/components/mint-map/core/advanced/woongCanvas/shared/types.d.ts +4 -21
- package/dist/components/mint-map/core/advanced/woongCanvas/shared/types.js +0 -6
- package/dist/components/mint-map/core/advanced/woongCanvas/shared/utils.d.ts +20 -142
- package/dist/components/mint-map/core/advanced/woongCanvas/shared/utils.js +23 -146
- package/dist/index.es.js +349 -663
- package/dist/index.js +0 -4
- package/dist/index.umd.js +348 -665
- package/package.json +1 -1
|
@@ -84,54 +84,13 @@ declare const WoongCanvasLayer: <T>(props: WoongCanvasLayerProps<T>) => React.Re
|
|
|
84
84
|
/**
|
|
85
85
|
* ๐ WoongCanvasLayer - Konva ๊ธฐ๋ฐ ์ด๊ณ ์ฑ๋ฅ ๋ง์ปค/ํด๋ฆฌ๊ณค ๋ ๋๋ง ์ปดํฌ๋ํธ
|
|
86
86
|
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
* ## ๐ฏ ์ฃผ์ ํน์ง
|
|
87
|
+
* ## ๐ ์ฃผ์ ํน์ง
|
|
90
88
|
* - **30,000๊ฐ ์ด์์ ํด๋ฆฌ๊ณค/๋ง์ปค๋ฅผ 60fps๋ก ๋ ๋๋ง**
|
|
91
89
|
* - **Multi-Layer ์ํคํ
์ฒ**: Base/Animation/Event ๋ ์ด์ด ๋ถ๋ฆฌ
|
|
92
90
|
* - **Spatial Hash Grid**: O(1) ์์ค์ ๋น ๋ฅธ Hit Test
|
|
93
91
|
* - **LRU ์บ์**: ์ขํ ๋ณํ ๊ฒฐ๊ณผ ์บ์ฑ์ผ๋ก ์ฑ๋ฅ ์ต์ ํ
|
|
94
92
|
* - **Viewport Culling**: ํ๋ฉด์ ๋ณด์ด๋ ์์ญ๋ง ๋ ๋๋ง
|
|
95
93
|
* - **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 ํ
๋๋ฆฌ ๋๊ป (์ ํ)
|
|
135
94
|
*
|
|
136
95
|
* ## ๐ฏ ์ฌ์ฉ ๋ฐฉ๋ฒ
|
|
137
96
|
*
|
|
@@ -146,9 +105,9 @@ declare const WoongCanvasLayer: <T>(props: WoongCanvasLayerProps<T>) => React.Re
|
|
|
146
105
|
* selectedFillColor="rgba(255, 193, 7, 0.7)"
|
|
147
106
|
* selectedStrokeColor="rgba(255, 152, 0, 1)"
|
|
148
107
|
* selectedLineWidth={4}
|
|
149
|
-
* hoveredFillColor="rgba(100, 150, 255, 0.8)"
|
|
150
|
-
* hoveredStrokeColor="rgba(0, 100, 200, 1)"
|
|
151
|
-
* hoveredLineWidth={3}
|
|
108
|
+
* hoveredFillColor="rgba(100, 150, 255, 0.8)" // optional
|
|
109
|
+
* hoveredStrokeColor="rgba(0, 100, 200, 1)" // optional
|
|
110
|
+
* hoveredLineWidth={3} // optional
|
|
152
111
|
* enableMultiSelect={true}
|
|
153
112
|
* onClick={handleClick}
|
|
154
113
|
* />
|
|
@@ -159,35 +118,14 @@ declare const WoongCanvasLayer: <T>(props: WoongCanvasLayerProps<T>) => React.Re
|
|
|
159
118
|
* <WoongCanvasLayer
|
|
160
119
|
* dataType={CanvasDataType.MARKER}
|
|
161
120
|
* data={markers}
|
|
162
|
-
* renderBase={renderMarkerBase}
|
|
163
|
-
* renderAnimation={renderMarkerAnimation}
|
|
164
|
-
* renderEvent={renderMarkerEvent}
|
|
121
|
+
* renderBase={renderMarkerBase} // required
|
|
122
|
+
* renderAnimation={renderMarkerAnimation} // optional
|
|
123
|
+
* renderEvent={renderMarkerEvent} // optional
|
|
165
124
|
* topOnHover={true}
|
|
166
125
|
* onClick={handleClick}
|
|
167
126
|
* />
|
|
168
127
|
* ```
|
|
169
128
|
*
|
|
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
|
-
*
|
|
191
129
|
* ## ๐ ๋ฐ์ดํฐ ํ์
|
|
192
130
|
* ```typescript
|
|
193
131
|
* const data: KonvaCanvasData<T>[] = [
|
|
@@ -199,7 +137,6 @@ declare const WoongCanvasLayer: <T>(props: WoongCanvasLayerProps<T>) => React.Re
|
|
|
199
137
|
* // MARKER: boxWidth/boxHeight ๊ถ์ฅ (Hit Test ์ ํ๋)
|
|
200
138
|
* boxWidth: 60,
|
|
201
139
|
* boxHeight: 75,
|
|
202
|
-
* tailHeight: 9, // ๊ผฌ๋ฆฌ ๋์ด (Viewport Culling์ฉ, Hit Test ์ ์ธ)
|
|
203
140
|
* // ์ปค์คํ
๋ฐ์ดํฐ
|
|
204
141
|
* ...customData
|
|
205
142
|
* }
|
|
@@ -220,8 +157,6 @@ declare const WoongCanvasLayer: <T>(props: WoongCanvasLayerProps<T>) => React.Re
|
|
|
220
157
|
* tempCtx.font = 'bold 15px Arial';
|
|
221
158
|
* const boxWidth = Math.max(60, tempCtx.measureText(text).width + 20);
|
|
222
159
|
*
|
|
223
|
-
* @see {@link
|
|
224
|
-
* @version 2.2.1
|
|
225
|
-
* @since 2.0.0
|
|
160
|
+
* @see {@link https://github.com/your-repo/docs/WoongCanvasLayer.md} ์ ์ฒด ๋ฌธ์
|
|
226
161
|
*/
|
|
227
162
|
export default WoongCanvasLayer;
|
|
@@ -59,20 +59,20 @@ var WoongCanvasLayer = function (props) {
|
|
|
59
59
|
var divElement = divRef.current;
|
|
60
60
|
var containerRef = React.useRef(null);
|
|
61
61
|
var markerRef = React.useRef(); // --------------------------------------------------------------------------
|
|
62
|
-
// Konva Refs
|
|
62
|
+
// Konva Refs
|
|
63
63
|
// --------------------------------------------------------------------------
|
|
64
64
|
|
|
65
65
|
var stageRef = React.useRef(null);
|
|
66
66
|
var baseLayerRef = React.useRef(null);
|
|
67
67
|
var animationLayerRef = React.useRef(null);
|
|
68
68
|
var eventLayerRef = React.useRef(null); // --------------------------------------------------------------------------
|
|
69
|
-
// Data Refs -
|
|
69
|
+
// Data Refs - ์ ํ ๋ฐ Hover ์ํ ๊ด๋ฆฌ
|
|
70
70
|
// --------------------------------------------------------------------------
|
|
71
71
|
|
|
72
72
|
/** data prop์ ref๋ก ์ถ์ (stale closure ๋ฐฉ์ง, useEffect์์ ๋๊ธฐํ) */
|
|
73
73
|
|
|
74
74
|
var dataRef = React.useRef(data); // --------------------------------------------------------------------------
|
|
75
|
-
// State Refs - ์ ํ ๋ฐ Hover ์ํ ๊ด๋ฆฌ
|
|
75
|
+
// State Refs - ์ ํ ๋ฐ Hover ์ํ ๊ด๋ฆฌ
|
|
76
76
|
// --------------------------------------------------------------------------
|
|
77
77
|
|
|
78
78
|
/** ์ํธ์์ฉ ๋นํ์ฑํ ์ํ (Ref๋ก ๊ด๋ฆฌํ์ฌ ํด๋ก์ ๋ฌธ์ ํด๊ฒฐ) */
|
|
@@ -113,7 +113,7 @@ var WoongCanvasLayer = function (props) {
|
|
|
113
113
|
*/
|
|
114
114
|
|
|
115
115
|
var selectedItemsMapRef = React.useRef(new Map()); // --------------------------------------------------------------------------
|
|
116
|
-
// Drag Refs
|
|
116
|
+
// Drag Refs
|
|
117
117
|
// --------------------------------------------------------------------------
|
|
118
118
|
|
|
119
119
|
var draggingRef = React.useRef(false);
|
|
@@ -122,7 +122,7 @@ var WoongCanvasLayer = function (props) {
|
|
|
122
122
|
x: 0,
|
|
123
123
|
y: 0
|
|
124
124
|
}); // --------------------------------------------------------------------------
|
|
125
|
-
// Performance Refs
|
|
125
|
+
// Performance Refs (์บ์ฑ & ์ต์ ํ)
|
|
126
126
|
// --------------------------------------------------------------------------
|
|
127
127
|
|
|
128
128
|
/** ์ขํ ๋ณํ ๊ฒฐ๊ณผ LRU ์บ์ */
|
|
@@ -137,7 +137,7 @@ var WoongCanvasLayer = function (props) {
|
|
|
137
137
|
/** ๋ทฐํฌํธ ๊ฒฝ๊ณ ์บ์ (Viewport Culling) */
|
|
138
138
|
|
|
139
139
|
var viewportRef = React.useRef(null); // --------------------------------------------------------------------------
|
|
140
|
-
// ์ ํธ๋ฆฌํฐ ํจ์: ๋ทฐํฌํธ ๊ด๋ฆฌ
|
|
140
|
+
// ์ ํธ๋ฆฌํฐ ํจ์: ๋ทฐํฌํธ ๊ด๋ฆฌ
|
|
141
141
|
// --------------------------------------------------------------------------
|
|
142
142
|
|
|
143
143
|
/**
|
|
@@ -216,7 +216,7 @@ var WoongCanvasLayer = function (props) {
|
|
|
216
216
|
|
|
217
217
|
return result;
|
|
218
218
|
}; // --------------------------------------------------------------------------
|
|
219
|
-
// ์ ํธ๋ฆฌํฐ ํจ์: ๋ฐ์ด๋ฉ ๋ฐ์ค ๊ณ์ฐ
|
|
219
|
+
// ์ ํธ๋ฆฌํฐ ํจ์: ๋ฐ์ด๋ฉ ๋ฐ์ค ๊ณ์ฐ
|
|
220
220
|
// --------------------------------------------------------------------------
|
|
221
221
|
|
|
222
222
|
/**
|
|
@@ -330,14 +330,11 @@ var WoongCanvasLayer = function (props) {
|
|
|
330
330
|
var renderEvent = dataType === types.CanvasDataType.MARKER ? props.renderEvent : function () {
|
|
331
331
|
var polygonProps = props;
|
|
332
332
|
return renderer.renderPolygonEvent(polygonProps.baseFillColor, polygonProps.baseStrokeColor, polygonProps.baseLineWidth, polygonProps.selectedFillColor, polygonProps.selectedStrokeColor, polygonProps.selectedLineWidth, polygonProps.activeFillColor, polygonProps.activeStrokeColor, polygonProps.activeLineWidth, polygonProps.hoveredFillColor, polygonProps.hoveredStrokeColor, polygonProps.hoveredLineWidth);
|
|
333
|
-
}();
|
|
334
|
-
// ๋ ๋๋ง ํจ์: Base Layer (๊ธฐ๋ณธ ์ํ ๋ ๋๋ง)
|
|
335
|
-
// --------------------------------------------------------------------------
|
|
336
|
-
|
|
333
|
+
}();
|
|
337
334
|
/**
|
|
338
335
|
* Base ๋ ์ด์ด ๋ ๋๋ง (๋ทฐํฌํธ ์ปฌ๋ง ์ ์ฉ, ์ ํ๋ ๋ง์ปค ์ ์ธ)
|
|
339
336
|
*
|
|
340
|
-
* ๐ฅ
|
|
337
|
+
* ๐ฅ ์ต์ ํ:
|
|
341
338
|
* 1. Shape ์ฌ์ฌ์ฉ์ผ๋ก ๊ฐ์ฒด ์์ฑ/ํ๊ดด ์ค๋ฒํค๋ ์ ๊ฑฐ
|
|
342
339
|
* 2. sceneFunc ํ ๋ฒ๋ง ์ค์ (ํจ์ ์ฌ์์ฑ ์ ๊ฑฐ)
|
|
343
340
|
* 3. ํด๋ก์ ๋ก ์ต์ ๋ฐ์ดํฐ ์ฐธ์กฐ
|
|
@@ -403,14 +400,11 @@ var WoongCanvasLayer = function (props) {
|
|
|
403
400
|
|
|
404
401
|
|
|
405
402
|
layer.batchDraw();
|
|
406
|
-
};
|
|
407
|
-
// ๋ ๋๋ง ํจ์: Animation Layer (์ ํ๋ ํญ๋ชฉ ์ ๋๋ฉ์ด์
)
|
|
408
|
-
// --------------------------------------------------------------------------
|
|
409
|
-
|
|
403
|
+
};
|
|
410
404
|
/**
|
|
411
405
|
* Animation ๋ ์ด์ด ๋ ๋๋ง (์ ํ๋ ๋ง์ปค ์ ๋๋ฉ์ด์
)
|
|
412
406
|
*
|
|
413
|
-
* ๐ฅ
|
|
407
|
+
* ๐ฅ ์ต์ ํ: sceneFunc ๋ด๋ถ์์ ์ต์ items ์ฐธ์กฐ
|
|
414
408
|
* - ์ ํ ๋ณ๊ฒฝ ์์๋ง ์ฌ์์ฑ
|
|
415
409
|
* - ์ง๋ ์ด๋ ์์๋ ๊ธฐ์กด Animation ๊ณ์ ์คํ
|
|
416
410
|
*/
|
|
@@ -426,23 +420,14 @@ var WoongCanvasLayer = function (props) {
|
|
|
426
420
|
items: dataRef.current,
|
|
427
421
|
utils: renderUtils
|
|
428
422
|
});
|
|
429
|
-
};
|
|
430
|
-
// ๋ ๋๋ง ํจ์: Event Layer (์ํธ์์ฉ ์ํ ๋ ๋๋ง)
|
|
431
|
-
// --------------------------------------------------------------------------
|
|
432
|
-
|
|
423
|
+
};
|
|
433
424
|
/**
|
|
434
425
|
* Event ๋ ์ด์ด ๋ ๋๋ง (hover + ์ ํ ์ํ ํ์)
|
|
435
426
|
*
|
|
436
|
-
* ๐ฅ
|
|
427
|
+
* ๐ฅ ์ต์ ํ:
|
|
437
428
|
* 1. Shape ์ฌ์ฌ์ฉ์ผ๋ก ๊ฐ์ฒด ์์ฑ/ํ๊ดด ์ค๋ฒํค๋ ์ ๊ฑฐ
|
|
438
429
|
* 2. sceneFunc ํ ๋ฒ๋ง ์ค์ (ํจ์ ์ฌ์์ฑ ์ ๊ฑฐ)
|
|
439
430
|
* 3. ํด๋ก์ ๋ก ์ต์ ๋ฐ์ดํฐ ์ฐธ์กฐ
|
|
440
|
-
*
|
|
441
|
-
* ๐ฏ topOnHover + renderEvent ์กฐํฉ ์ง์:
|
|
442
|
-
* - topOnHover๊ฐ true์ด๊ณ renderEvent๊ฐ ์์ผ๋ฉด:
|
|
443
|
-
* 1. ๋จผ์ hover๋ ํญ๋ชฉ์ ์ ์ธํ ๋๋จธ์ง ํญ๋ชฉ๋ค ๋ ๋๋ง
|
|
444
|
-
* 2. ๊ทธ ๋ค์ hover๋ ํญ๋ชฉ์ ์ต์๋จ์ ๋ ๋๋ง (์๊ฐ์ ์ฐ์ ์์)
|
|
445
|
-
* - topOnHover๊ฐ false์ด๊ฑฐ๋ renderEvent๊ฐ ์์ผ๋ฉด ์ผ๋ฐ ๋ ๋๋ง
|
|
446
431
|
*/
|
|
447
432
|
|
|
448
433
|
|
|
@@ -459,14 +444,23 @@ var WoongCanvasLayer = function (props) {
|
|
|
459
444
|
shape = new Konva__default["default"].Shape({
|
|
460
445
|
name: 'event-render-shape',
|
|
461
446
|
sceneFunc: function (context, shape) {
|
|
462
|
-
var ctx = context; // ํด๋ก์ ๋ก ์ต์ ref ๊ฐ ์ฐธ์กฐ
|
|
447
|
+
var ctx = context; // ํด๋ก์ ๋ก ์ต์ ref ๊ฐ ์ฐธ์กฐ
|
|
463
448
|
|
|
464
449
|
var selectedItems = Array.from(selectedItemsMapRef.current.values());
|
|
465
|
-
var hovered = hoveredItemRef.current;
|
|
466
|
-
var selectedItem = selectedItemRef.current; // topOnHover๊ฐ true์ด๋ฉด hover๋ ํญ๋ชฉ์ ์ต์๋จ์ ๋ ๋๋ง
|
|
450
|
+
var hovered = hoveredItemRef.current; // topOnHover๊ฐ true์ด๋ฉด hover๋ ํญ๋ชฉ์ ์ต์๋จ์ ๋ ๋๋ง
|
|
467
451
|
|
|
468
452
|
if (topOnHover && hovered) {
|
|
469
|
-
//
|
|
453
|
+
// 1. ๋จผ์ ์ผ๋ฐ ํญ๋ชฉ๋ค ๋ ๋๋ง (hover๋ ํญ๋ชฉ ์ ์ธ)
|
|
454
|
+
renderEvent({
|
|
455
|
+
ctx: ctx,
|
|
456
|
+
hoveredItem: null,
|
|
457
|
+
utils: renderUtils,
|
|
458
|
+
selectedItems: selectedItems.filter(function (item) {
|
|
459
|
+
return item.id !== hovered.id;
|
|
460
|
+
}),
|
|
461
|
+
selectedItem: selectedItemRef.current
|
|
462
|
+
}); // 2. hover๋ ํญ๋ชฉ์ ์ต์๋จ์ ๋ ๋๋ง
|
|
463
|
+
|
|
470
464
|
var isHoveredInViewport = enableViewportCulling ? isInViewport(hovered) : true;
|
|
471
465
|
|
|
472
466
|
if (isHoveredInViewport) {
|
|
@@ -475,7 +469,7 @@ var WoongCanvasLayer = function (props) {
|
|
|
475
469
|
hoveredItem: hovered,
|
|
476
470
|
utils: renderUtils,
|
|
477
471
|
selectedItems: selectedItems,
|
|
478
|
-
selectedItem:
|
|
472
|
+
selectedItem: selectedItemRef.current
|
|
479
473
|
});
|
|
480
474
|
}
|
|
481
475
|
} else {
|
|
@@ -485,7 +479,7 @@ var WoongCanvasLayer = function (props) {
|
|
|
485
479
|
hoveredItem: hovered,
|
|
486
480
|
utils: renderUtils,
|
|
487
481
|
selectedItems: selectedItems,
|
|
488
|
-
selectedItem:
|
|
482
|
+
selectedItem: selectedItemRef.current
|
|
489
483
|
});
|
|
490
484
|
}
|
|
491
485
|
},
|
|
@@ -598,7 +592,7 @@ var WoongCanvasLayer = function (props) {
|
|
|
598
592
|
containerRef.current.style.transform = "translate(".concat(accumTranslateRef.current.x, "px, ").concat(accumTranslateRef.current.y, "px)");
|
|
599
593
|
}
|
|
600
594
|
}; // --------------------------------------------------------------------------
|
|
601
|
-
// Hit Test & ์ํ ๊ด๋ฆฌ
|
|
595
|
+
// Hit Test & ์ํ ๊ด๋ฆฌ
|
|
602
596
|
// --------------------------------------------------------------------------
|
|
603
597
|
|
|
604
598
|
/**
|
|
@@ -768,7 +762,7 @@ var WoongCanvasLayer = function (props) {
|
|
|
768
762
|
}
|
|
769
763
|
};
|
|
770
764
|
/**
|
|
771
|
-
* ๋ง์ฐ์ค ์ด๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ (hover ๊ฐ์ง
|
|
765
|
+
* ๋ง์ฐ์ค ์ด๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ (hover ๊ฐ์ง)
|
|
772
766
|
*/
|
|
773
767
|
|
|
774
768
|
|
|
@@ -812,7 +806,7 @@ var WoongCanvasLayer = function (props) {
|
|
|
812
806
|
controller.setMapCursor('grab');
|
|
813
807
|
};
|
|
814
808
|
/**
|
|
815
|
-
* ๋ง์ฐ์ค๊ฐ canvas๋ฅผ ๋ฒ์ด๋ ๋ hover
|
|
809
|
+
* ๋ง์ฐ์ค๊ฐ canvas๋ฅผ ๋ฒ์ด๋ ๋ hover cleanup
|
|
816
810
|
*/
|
|
817
811
|
|
|
818
812
|
|
|
@@ -872,7 +866,7 @@ var WoongCanvasLayer = function (props) {
|
|
|
872
866
|
}
|
|
873
867
|
}
|
|
874
868
|
}, [options]); // --------------------------------------------------------------------------
|
|
875
|
-
// Lifecycle: Konva ์ด๊ธฐํ ๋ฐ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฑ๋ก
|
|
869
|
+
// Lifecycle: Konva ์ด๊ธฐํ ๋ฐ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฑ๋ก
|
|
876
870
|
// --------------------------------------------------------------------------
|
|
877
871
|
|
|
878
872
|
React.useEffect(function () {
|
|
@@ -998,32 +992,26 @@ var WoongCanvasLayer = function (props) {
|
|
|
998
992
|
};
|
|
999
993
|
}, []); // ์ด๊ธฐํ๋ ํ ๋ฒ๋ง
|
|
1000
994
|
// --------------------------------------------------------------------------
|
|
1001
|
-
// Lifecycle: disableInteraction ๋๊ธฐํ
|
|
995
|
+
// Lifecycle: disableInteraction ๋๊ธฐํ
|
|
1002
996
|
// --------------------------------------------------------------------------
|
|
1003
997
|
|
|
1004
998
|
React.useEffect(function () {
|
|
1005
999
|
disableInteractionRef.current = disableInteraction;
|
|
1006
1000
|
}, [disableInteraction]); // --------------------------------------------------------------------------
|
|
1007
|
-
// Lifecycle: ์ธ๋ถ selectedItems ๋๊ธฐํ
|
|
1001
|
+
// Lifecycle: ์ธ๋ถ selectedItems ๋๊ธฐํ
|
|
1008
1002
|
// --------------------------------------------------------------------------
|
|
1009
1003
|
|
|
1010
1004
|
React.useEffect(function () {
|
|
1011
1005
|
if (!stageRef.current) return; // externalSelectedItems๊ฐ undefined๋ฉด ์ธ๋ถ ์ ์ด ์ ํจ
|
|
1012
1006
|
|
|
1013
|
-
if (externalSelectedItems === undefined) return; // ์ธ๋ถ์์ ์ ๋ฌ๋ selectedItems๋ก ๋๊ธฐํ
|
|
1007
|
+
if (externalSelectedItems === undefined) return; // ์ธ๋ถ์์ ์ ๋ฌ๋ selectedItems๋ก ๋๊ธฐํ
|
|
1014
1008
|
|
|
1015
1009
|
var newSelectedIds = new Set();
|
|
1016
|
-
var newSelectedItemsMap = new Map();
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
newSelectedIds.add(item.id);
|
|
1022
|
-
newSelectedItemsMap.set(item.id, item);
|
|
1023
|
-
}
|
|
1024
|
-
});
|
|
1025
|
-
}
|
|
1026
|
-
|
|
1010
|
+
var newSelectedItemsMap = new Map();
|
|
1011
|
+
externalSelectedItems.forEach(function (item) {
|
|
1012
|
+
newSelectedIds.add(item.id);
|
|
1013
|
+
newSelectedItemsMap.set(item.id, item);
|
|
1014
|
+
});
|
|
1027
1015
|
selectedIdsRef.current = newSelectedIds;
|
|
1028
1016
|
selectedItemsMapRef.current = newSelectedItemsMap; // ๋ ๋๋ง
|
|
1029
1017
|
|
|
@@ -1032,17 +1020,17 @@ var WoongCanvasLayer = function (props) {
|
|
|
1032
1020
|
doRenderEvent();
|
|
1033
1021
|
}, [externalSelectedItems]); // ๋ฐฐ์ด ์์ฒด๋ฅผ dependency๋ก ์ฌ์ฉ
|
|
1034
1022
|
// --------------------------------------------------------------------------
|
|
1035
|
-
// Lifecycle: ์ธ๋ถ selectedItem ๋ณ๊ฒฝ ์ Event Layer ๋ฆฌ๋ ๋๋ง
|
|
1023
|
+
// Lifecycle: ์ธ๋ถ selectedItem ๋ณ๊ฒฝ ์ Event Layer ๋ฆฌ๋ ๋๋ง
|
|
1036
1024
|
// --------------------------------------------------------------------------
|
|
1037
1025
|
|
|
1038
1026
|
React.useEffect(function () {
|
|
1039
|
-
if (!stageRef.current) return; // Ref ๋๊ธฐํ
|
|
1027
|
+
if (!stageRef.current) return; // Ref ๋๊ธฐํ
|
|
1040
1028
|
|
|
1041
|
-
selectedItemRef.current = externalSelectedItem
|
|
1029
|
+
selectedItemRef.current = externalSelectedItem; // selectedItem์ด ๋ณ๊ฒฝ๋๋ฉด Event Layer๋ง ๋ค์ ๊ทธ๋ฆผ
|
|
1042
1030
|
|
|
1043
1031
|
doRenderEvent();
|
|
1044
1032
|
}, [externalSelectedItem]); // --------------------------------------------------------------------------
|
|
1045
|
-
// Lifecycle: ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ ๋ ๋๋ง
|
|
1033
|
+
// Lifecycle: ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ ๋ ๋๋ง
|
|
1046
1034
|
// --------------------------------------------------------------------------
|
|
1047
1035
|
|
|
1048
1036
|
React.useEffect(function () {
|
|
@@ -1099,10 +1087,7 @@ var WoongCanvasLayer = function (props) {
|
|
|
1099
1087
|
selectedItemsMapRef.current = newSelectedItemsMap; // ์ฆ์ ๋ ๋๋ง
|
|
1100
1088
|
|
|
1101
1089
|
renderAllImmediate();
|
|
1102
|
-
}, [data]);
|
|
1103
|
-
// Render - React Portal์ ํตํ DOM ๋ ๋๋ง
|
|
1104
|
-
// --------------------------------------------------------------------------
|
|
1105
|
-
|
|
1090
|
+
}, [data]);
|
|
1106
1091
|
return reactDom.createPortal(React__default["default"].createElement("div", {
|
|
1107
1092
|
ref: containerRef,
|
|
1108
1093
|
style: {
|
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview WoongCanvasLayer ๋ชจ๋์ ๋ฉ์ธ ์ํธ๋ฆฌ ํฌ์ธํธ
|
|
3
|
-
*
|
|
4
|
-
* ์ด ํ์ผ์ WoongCanvasLayer ์ปดํฌ๋ํธ์ ๊ด๋ จ๋ ๋ชจ๋ ํ์
, ์ ํธ๋ฆฌํฐ,
|
|
5
|
-
* ์ฑ๋ฅ ์ต์ ํ ํด๋์ค๋ค์ ์ธ๋ถ๋ก ๋
ธ์ถํฉ๋๋ค.
|
|
6
|
-
*
|
|
7
|
-
* @version 2.2.1
|
|
8
|
-
* @since 2.0.0
|
|
9
|
-
* @author ๋ฐ๊ฑด์
|
|
10
|
-
*/
|
|
11
1
|
export { default as WoongCanvasLayer } from "./WoongCanvasLayer";
|
|
12
2
|
export * from "./WoongCanvasLayer";
|
|
13
3
|
export * from "./shared";
|
|
@@ -2,99 +2,31 @@ import React from "react";
|
|
|
2
2
|
import { Offset } from "../../../../types";
|
|
3
3
|
import { KonvaCanvasData } from "./types";
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* ๋ค์ค WoongKonvaMarker ์ธ์คํด์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ Context
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* - **zIndex ๊ธฐ๋ฐ ์ด๋ฒคํธ ์ฐ์ ์์**: ๋์ zIndex๋ฅผ ๊ฐ์ง ๋ ์ด์ด๊ฐ ๋จผ์ ์ด๋ฒคํธ ์ฒ๋ฆฌ
|
|
12
|
-
* - **์ ์ญ ์ด๋ฒคํธ ๊ด๋ฆฌ**: ์ง๋ ์ ์ฒด์ ํด๋ฆญ/ํธ๋ฒ ์ด๋ฒคํธ๋ฅผ ์ค์์์ ๊ด๋ฆฌ
|
|
13
|
-
* - **๋ค์ค ๋ ์ด์ด ์ํธ์์ฉ**: ์ฌ๋ฌ ๋ ์ด์ด ๊ฐ์ ์ด๋ฒคํธ ์ถฉ๋ ๋ฐฉ์ง
|
|
14
|
-
* - **์ํธ์์ฉ ๋นํ์ฑํ ์ง์**: disableInteraction prop ์ง์
|
|
15
|
-
*
|
|
16
|
-
* ## ์ฌ์ฉ ๋ฐฉ๋ฒ
|
|
17
|
-
* ```tsx
|
|
18
|
-
* <KonvaMarkerProvider>
|
|
19
|
-
* <WoongCanvasLayer zIndex={1} ... />
|
|
20
|
-
* <WoongCanvasLayer zIndex={2} ... />
|
|
21
|
-
* </KonvaMarkerProvider>
|
|
22
|
-
* ```
|
|
23
|
-
*
|
|
24
|
-
* @version 2.2.1
|
|
25
|
-
* @since 2.0.0
|
|
26
|
-
* @author ๋ฐ๊ฑด์
|
|
27
|
-
*/
|
|
28
|
-
/**
|
|
29
|
-
* WoongCanvasLayer ์ปดํฌ๋ํธ ์ธ์คํด์ค ์ธํฐํ์ด์ค
|
|
30
|
-
*
|
|
31
|
-
* Context์์ ๊ด๋ฆฌํ๋ ๊ฐ WoongCanvasLayer ์ธ์คํด์ค๊ฐ ๊ตฌํํด์ผ ํ๋ ๋ฉ์๋๋ค์
๋๋ค.
|
|
32
|
-
*
|
|
33
|
-
* @template T ๋ง์ปค/ํด๋ฆฌ๊ณค ๋ฐ์ดํฐ์ ์ถ๊ฐ ์์ฑ ํ์
|
|
7
|
+
* ์ฉ๋:
|
|
8
|
+
* - zIndex ๊ธฐ๋ฐ ์ด๋ฒคํธ ์ฐ์ ์์ ์ฒ๋ฆฌ
|
|
9
|
+
* - ์ ์ญ ํด๋ฆญ/ํธ๋ฒ ์ด๋ฒคํธ ์กฐ์
|
|
10
|
+
* - ์ฌ๋ฌ ๋ ์ด์ด ๊ฐ ์ํธ์์ฉ ๊ด๋ฆฌ
|
|
34
11
|
*/
|
|
35
12
|
export interface ComponentInstance<T> {
|
|
36
|
-
/** ๋ ์ด์ด ์์ (๋์์๋ก ์ฐ์ ์์ ๋์) */
|
|
37
13
|
zIndex: number;
|
|
38
|
-
/** ํน์ ์ขํ์์ ํํธ ํ
์คํธ ์ํ */
|
|
39
14
|
hitTest: (offset: Offset) => boolean;
|
|
40
|
-
/** ํด๋ฆญ ์ด๋ฒคํธ ํธ๋ค๋ฌ */
|
|
41
15
|
onClick?: (payload: KonvaCanvasData<T>, selectedIds: Set<string>) => void;
|
|
42
|
-
/** ๋ง์ฐ์ค ์ค๋ฒ ์ด๋ฒคํธ ํธ๋ค๋ฌ */
|
|
43
16
|
onMouseOver?: (payload: KonvaCanvasData<T>) => void;
|
|
44
|
-
/** ๋ง์ฐ์ค ์์ ์ด๋ฒคํธ ํธ๋ค๋ฌ */
|
|
45
17
|
onMouseOut?: (payload: KonvaCanvasData<T>) => void;
|
|
46
|
-
/** ํน์ ์ขํ์์ ๋ฐ์ดํฐ ์ฐพ๊ธฐ */
|
|
47
18
|
findData: (offset: Offset) => KonvaCanvasData<T> | null;
|
|
48
|
-
/** ํธ๋ฒ ์ํ ์ค์ */
|
|
49
19
|
setHovered: (data: KonvaCanvasData<T> | null) => void;
|
|
50
|
-
/** ๋ก์ปฌ ํด๋ฆญ ์ฒ๋ฆฌ */
|
|
51
20
|
handleLocalClick: (data: KonvaCanvasData<T>) => void;
|
|
52
|
-
/** ์ ํ๋ ํญ๋ชฉ ID ๋ชฉ๋ก ๋ฐํ */
|
|
53
21
|
getSelectedIds: () => Set<string>;
|
|
54
|
-
/** ์ํธ์์ฉ ๋นํ์ฑํ ์ฌ๋ถ ์ฒดํฌ */
|
|
55
22
|
isInteractionDisabled: () => boolean;
|
|
56
23
|
}
|
|
57
|
-
/**
|
|
58
|
-
* KonvaMarkerContext์ ๊ฐ ํ์
|
|
59
|
-
*/
|
|
60
24
|
interface KonvaMarkerContextValue {
|
|
61
|
-
/** ์ปดํฌ๋ํธ ์ธ์คํด์ค ๋ฑ๋ก */
|
|
62
25
|
registerComponent: <T>(instance: ComponentInstance<T>) => void;
|
|
63
|
-
/** ์ปดํฌ๋ํธ ์ธ์คํด์ค ๋ฑ๋ก ํด์ */
|
|
64
26
|
unregisterComponent: <T>(instance: ComponentInstance<T>) => void;
|
|
65
27
|
}
|
|
66
|
-
/**
|
|
67
|
-
* ๋ค์ค WoongCanvasLayer ๊ด๋ฆฌ๋ฅผ ์ํ Context Provider
|
|
68
|
-
*
|
|
69
|
-
* ์ฌ๋ฌ ๊ฐ์ WoongCanvasLayer๊ฐ ๋์์ ์ฌ์ฉ๋ ๋ ์ด๋ฒคํธ ์ฐ์ ์์๋ฅผ ๊ด๋ฆฌํ๊ณ
|
|
70
|
-
* ์ ์ญ ํด๋ฆญ/ํธ๋ฒ ์ด๋ฒคํธ๋ฅผ ์กฐ์ ํฉ๋๋ค.
|
|
71
|
-
*
|
|
72
|
-
* @param children - Provider๋ก ๊ฐ์ React ์ปดํฌ๋ํธ๋ค
|
|
73
|
-
* @returns Context Provider ์ปดํฌ๋ํธ
|
|
74
|
-
*
|
|
75
|
-
* @example
|
|
76
|
-
* ```tsx
|
|
77
|
-
* <KonvaMarkerProvider>
|
|
78
|
-
* <WoongCanvasLayer zIndex={1} data={markers1} ... />
|
|
79
|
-
* <WoongCanvasLayer zIndex={2} data={markers2} ... />
|
|
80
|
-
* </KonvaMarkerProvider>
|
|
81
|
-
* ```
|
|
82
|
-
*/
|
|
83
28
|
export declare const KonvaMarkerProvider: React.FC<{
|
|
84
29
|
children: React.ReactNode;
|
|
85
30
|
}>;
|
|
86
|
-
/**
|
|
87
|
-
* KonvaMarkerContext๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ Hook
|
|
88
|
-
*
|
|
89
|
-
* @returns Context ๊ฐ ๋๋ null (Provider ์ธ๋ถ์์ ์ฌ์ฉ ์)
|
|
90
|
-
*
|
|
91
|
-
* @example
|
|
92
|
-
* ```tsx
|
|
93
|
-
* const context = useKonvaMarkerContext();
|
|
94
|
-
* if (context) {
|
|
95
|
-
* context.registerComponent(instance);
|
|
96
|
-
* }
|
|
97
|
-
* ```
|
|
98
|
-
*/
|
|
99
31
|
export declare const useKonvaMarkerContext: () => KonvaMarkerContextValue | null;
|
|
100
32
|
export {};
|