@mint-ui/map 1.2.0-test.69 → 1.2.0-test.70

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.
@@ -28,17 +28,15 @@ var CanvasMarkerLayer = function (props) {
28
28
  var hasRenderEvent = 'renderEvent' in props && props.renderEvent !== undefined; // renderEvent가 있는 경우와 없는 경우를 구분하여 props 추출
29
29
 
30
30
  var data = props.data,
31
- _a = props.enableViewportCulling,
32
- enableViewportCulling = _a === void 0 ? false : _a,
33
- _b = props.cullingMargin,
34
- cullingMargin = _b === void 0 ? performance.DEFAULT_CULLING_MARGIN : _b,
35
- _c = props.maxCacheSize,
36
- maxCacheSize = _c === void 0 ? performance.DEFAULT_MAX_CACHE_SIZE : _c,
31
+ _a = props.cullingMargin,
32
+ cullingMargin = _a === void 0 ? performance.DEFAULT_CULLING_MARGIN : _a,
33
+ _b = props.maxCacheSize,
34
+ maxCacheSize = _b === void 0 ? performance.DEFAULT_MAX_CACHE_SIZE : _b,
37
35
  renderBase = props.renderBase,
38
- options = tslib.__rest(props, ["data", "enableViewportCulling", "cullingMargin", "maxCacheSize", "renderBase"]); // renderEvent가 있는 경우에만 인터랙션 관련 props 추출
36
+ options = tslib.__rest(props, ["data", "cullingMargin", "maxCacheSize", "renderBase"]); // renderEvent가 있는 경우에만 인터랙션 관련 props 추출
39
37
 
40
38
 
41
- var _d = hasRenderEvent && 'renderEvent' in props ? props : {
39
+ var _c = hasRenderEvent && 'renderEvent' in props ? props : {
42
40
  disableInteraction: false,
43
41
  onClick: undefined,
44
42
  onMouseOut: undefined,
@@ -48,15 +46,15 @@ var CanvasMarkerLayer = function (props) {
48
46
  selectedItems: undefined,
49
47
  topStageZIndex: undefined
50
48
  },
51
- _e = _d.disableInteraction,
52
- disableInteraction = _e === void 0 ? false : _e,
53
- onClick = _d.onClick,
54
- onMouseOut = _d.onMouseOut,
55
- onMouseOver = _d.onMouseOver,
56
- renderEvent = _d.renderEvent,
57
- externalSelectedItem = _d.selectedItem,
58
- externalSelectedItems = _d.selectedItems,
59
- rawTopStageZIndex = _d.topStageZIndex; // topStageZIndex가 있으면 hover 최상단 표시 활성화, 없으면 비활성화 (성능 우선)
49
+ _d = _c.disableInteraction,
50
+ disableInteraction = _d === void 0 ? false : _d,
51
+ onClick = _c.onClick,
52
+ onMouseOut = _c.onMouseOut,
53
+ onMouseOver = _c.onMouseOver,
54
+ renderEvent = _c.renderEvent,
55
+ externalSelectedItem = _c.selectedItem,
56
+ externalSelectedItems = _c.selectedItems,
57
+ rawTopStageZIndex = _c.topStageZIndex; // topStageZIndex가 있으면 hover 최상단 표시 활성화, 없으면 비활성화 (성능 우선)
60
58
 
61
59
 
62
60
  var topStageZIndex = rawTopStageZIndex;
@@ -82,7 +80,6 @@ var CanvasMarkerLayer = function (props) {
82
80
 
83
81
  var dataRef = React.useRef(data);
84
82
  var disableInteractionRef = React.useRef(disableInteraction);
85
- var enableViewportCullingRef = React.useRef(enableViewportCulling);
86
83
  var hoveredItemRef = React.useRef(null);
87
84
  var selectedItemRef = React.useRef(externalSelectedItem);
88
85
  var selectedIdsRef = React.useRef(new Set());
@@ -164,11 +161,11 @@ var CanvasMarkerLayer = function (props) {
164
161
  name: 'base-render-shape',
165
162
  perfectDrawEnabled: false,
166
163
  sceneFunc: function (konvaContext) {
167
- var ctx = konvaContext; // 뷰포트 컬링: 화면에 보이는 항목만 필터링
164
+ var ctx = konvaContext; // 뷰포트 컬링: 화면에 보이는 항목만 필터링 (항상 활성화)
168
165
 
169
- var visibleItems = enableViewportCullingRef.current ? dataRef.current.filter(function (item) {
166
+ var visibleItems = dataRef.current.filter(function (item) {
170
167
  return isInViewport(item);
171
- }) : dataRef.current; // Base Layer는 기본 마커만 렌더링 (hover된 항목도 포함)
168
+ }); // Base Layer는 기본 마커만 렌더링 (hover된 항목도 포함)
172
169
  // hover 스타일은 Event Layer와 Top Layer에서 덧그려짐
173
170
 
174
171
  renderBase({
@@ -271,9 +268,9 @@ var CanvasMarkerLayer = function (props) {
271
268
  var ctx = konvaContext;
272
269
  var currentHovered = hoveredItemRef.current; // hover된 항목이 없으면 아무것도 그리지 않음
273
270
 
274
- if (!currentHovered) return; // 뷰포트 컬링 확인
271
+ if (!currentHovered) return; // 뷰포트 컬링 확인 (항상 활성화)
275
272
 
276
- if (enableViewportCullingRef.current && !isInViewport(currentHovered)) {
273
+ if (!isInViewport(currentHovered)) {
277
274
  return;
278
275
  }
279
276
 
@@ -313,10 +310,7 @@ var CanvasMarkerLayer = function (props) {
313
310
 
314
311
 
315
312
  var renderAllImmediate = function () {
316
- if (enableViewportCullingRef.current) {
317
- updateViewport();
318
- }
319
-
313
+ updateViewport();
320
314
  buildSpatialIndex();
321
315
  doRenderBase();
322
316
  doRenderEvent(); // 메인 stage의 transform을 topStage에도 동기화
@@ -331,7 +325,7 @@ var CanvasMarkerLayer = function (props) {
331
325
  }; // 지도 이벤트 핸들러 생성
332
326
 
333
327
 
334
- var _f = hooks.createMapEventHandlers({
328
+ var _e = hooks.createMapEventHandlers({
335
329
  accumTranslateRef: accumTranslateRef,
336
330
  boundingBoxCacheRef: boundingBoxCacheRef,
337
331
  containerRef: containerRef,
@@ -342,12 +336,12 @@ var CanvasMarkerLayer = function (props) {
342
336
  prevCenterOffsetRef: prevCenterOffsetRef,
343
337
  renderAllImmediate: renderAllImmediate
344
338
  }),
345
- handleIdleShared = _f.handleIdle,
346
- handleZoomStart = _f.handleZoomStart,
347
- handleZoomEnd = _f.handleZoomEnd,
348
- handleCenterChangedShared = _f.handleCenterChanged,
349
- handleDragStartShared = _f.handleDragStart,
350
- handleDragEndShared = _f.handleDragEnd; // handleIdle 래핑: topStage transform 제거 추가
339
+ handleIdleShared = _e.handleIdle,
340
+ handleZoomStart = _e.handleZoomStart,
341
+ handleZoomEnd = _e.handleZoomEnd,
342
+ handleCenterChangedShared = _e.handleCenterChanged,
343
+ handleDragStartShared = _e.handleDragStart,
344
+ handleDragEndShared = _e.handleDragEnd; // handleIdle 래핑: topStage transform 제거 추가
351
345
 
352
346
 
353
347
  var handleIdle = function () {
@@ -601,11 +595,7 @@ var CanvasMarkerLayer = function (props) {
601
595
  eventLayerRef.current = eventLayer;
602
596
  stage.add(baseLayer);
603
597
  stage.add(eventLayer);
604
-
605
- if (enableViewportCulling) {
606
- updateViewport();
607
- } // ResizeObserver: 맵 크기 변경 감지 (RAF로 debounce)
608
-
598
+ updateViewport(); // ResizeObserver: 맵 크기 변경 감지 (RAF로 debounce)
609
599
 
610
600
  var resizeRafId = null;
611
601
  var resizeObserver = new ResizeObserver(function () {
@@ -618,11 +608,7 @@ var CanvasMarkerLayer = function (props) {
618
608
  stage.height(mapDiv.offsetHeight);
619
609
  offsetCacheRef.current.clear();
620
610
  boundingBoxCacheRef.current.clear();
621
-
622
- if (enableViewportCullingRef.current) {
623
- updateViewport();
624
- }
625
-
611
+ updateViewport();
626
612
  renderAllImmediate();
627
613
  resizeRafId = null;
628
614
  });
@@ -704,36 +690,7 @@ var CanvasMarkerLayer = function (props) {
704
690
 
705
691
  React.useEffect(function () {
706
692
  disableInteractionRef.current = disableInteraction;
707
- }, [disableInteraction]); // enableViewportCulling 동기화
708
-
709
- React.useEffect(function () {
710
- enableViewportCullingRef.current = enableViewportCulling;
711
-
712
- if (stageRef.current) {
713
- // 뷰포트 컬링 설정이 변경되면 shape 재생성 필요
714
- var baseLayer = baseLayerRef.current;
715
-
716
- if (baseLayer) {
717
- var shape = baseLayer.findOne('.base-render-shape');
718
-
719
- if (shape) {
720
- shape.destroy();
721
- }
722
- }
723
-
724
- var eventLayer = eventLayerRef.current;
725
-
726
- if (eventLayer) {
727
- var shape = eventLayer.findOne('.event-render-shape');
728
-
729
- if (shape) {
730
- shape.destroy();
731
- }
732
- }
733
-
734
- renderAllImmediate();
735
- }
736
- }, [enableViewportCulling]); // Top Layer용 별도 캔버스 DOM 생성 (topStageZIndex가 설정된 경우)
693
+ }, [disableInteraction]); // Top Layer용 별도 캔버스 DOM 생성 (topStageZIndex가 설정된 경우)
737
694
 
738
695
  React.useEffect(function () {
739
696
  if (topStageZIndex === undefined) return;
@@ -8,8 +8,6 @@ import type { CanvasData, CustomRenderBase, CustomRenderEvent } from '../shared'
8
8
  export interface CanvasMarkerLayerPropsWithoutEvent<T> extends Pick<MarkerOptions, 'zIndex' | 'anchor' | 'visible'> {
9
9
  /** 렌더링할 마커 데이터 배열 */
10
10
  data: CanvasData<T>[];
11
- /** 뷰포트 컬링 활성화 여부 (기본값: false) */
12
- enableViewportCulling?: boolean;
13
11
  /** 뷰포트 컬링 여유 공간 (픽셀 단위, 기본값: 100) */
14
12
  cullingMargin?: number;
15
13
  /** Queue 캐시 최대 크기 (기본값: 30000) */
@@ -43,8 +41,6 @@ export interface CanvasMarkerLayerPropsWithEventWithSelectedItem<T> extends Pick
43
41
  onMouseOver?: (payload: CanvasData<T>) => void;
44
42
  /** 마커에서 마우스 아웃 시 호출되는 콜백 함수 */
45
43
  onMouseOut?: (payload: CanvasData<T>) => void;
46
- /** 뷰포트 컬링 활성화 여부 (기본값: false) */
47
- enableViewportCulling?: boolean;
48
44
  /** 뷰포트 컬링 여유 공간 (픽셀 단위, 기본값: 100) */
49
45
  cullingMargin?: number;
50
46
  /** Queue 캐시 최대 크기 (기본값: 30000) */
@@ -77,8 +73,6 @@ export interface CanvasMarkerLayerPropsWithEventWithSelectedItems<T> extends Pic
77
73
  onMouseOver?: (payload: CanvasData<T>) => void;
78
74
  /** 마커에서 마우스 아웃 시 호출되는 콜백 함수 */
79
75
  onMouseOut?: (payload: CanvasData<T>) => void;
80
- /** 뷰포트 컬링 활성화 여부 (기본값: false) */
81
- enableViewportCulling?: boolean;
82
76
  /** 뷰포트 컬링 여유 공간 (픽셀 단위, 기본값: 100) */
83
77
  cullingMargin?: number;
84
78
  /** Queue 캐시 최대 크기 (기본값: 30000) */
@@ -111,8 +105,6 @@ export interface CanvasMarkerLayerPropsWithEventWithoutSelection<T> extends Pick
111
105
  onMouseOver?: (payload: CanvasData<T>) => void;
112
106
  /** 마커에서 마우스 아웃 시 호출되는 콜백 함수 */
113
107
  onMouseOut?: (payload: CanvasData<T>) => void;
114
- /** 뷰포트 컬링 활성화 여부 (기본값: false) */
115
- enableViewportCulling?: boolean;
116
108
  /** 뷰포트 컬링 여유 공간 (픽셀 단위, 기본값: 100) */
117
109
  cullingMargin?: number;
118
110
  /** Queue 캐시 최대 크기 (기본값: 30000) */
@@ -146,8 +138,6 @@ export interface CanvasMarkerLayerPropsWithEventWithTopStageWithSelectedItem<T>
146
138
  onMouseOver?: (payload: CanvasData<T>) => void;
147
139
  /** 마커에서 마우스 아웃 시 호출되는 콜백 함수 */
148
140
  onMouseOut?: (payload: CanvasData<T>) => void;
149
- /** 뷰포트 컬링 활성화 여부 (기본값: false) */
150
- enableViewportCulling?: boolean;
151
141
  /** 뷰포트 컬링 여유 공간 (픽셀 단위, 기본값: 100) */
152
142
  cullingMargin?: number;
153
143
  /** Queue 캐시 최대 크기 (기본값: 30000) */
@@ -181,8 +171,6 @@ export interface CanvasMarkerLayerPropsWithEventWithTopStageWithSelectedItems<T>
181
171
  onMouseOver?: (payload: CanvasData<T>) => void;
182
172
  /** 마커에서 마우스 아웃 시 호출되는 콜백 함수 */
183
173
  onMouseOut?: (payload: CanvasData<T>) => void;
184
- /** 뷰포트 컬링 활성화 여부 (기본값: false) */
185
- enableViewportCulling?: boolean;
186
174
  /** 뷰포트 컬링 여유 공간 (픽셀 단위, 기본값: 100) */
187
175
  cullingMargin?: number;
188
176
  /** Queue 캐시 최대 크기 (기본값: 30000) */
@@ -216,8 +204,6 @@ export interface CanvasMarkerLayerPropsWithEventWithTopStageWithoutSelection<T>
216
204
  onMouseOver?: (payload: CanvasData<T>) => void;
217
205
  /** 마커에서 마우스 아웃 시 호출되는 콜백 함수 */
218
206
  onMouseOut?: (payload: CanvasData<T>) => void;
219
- /** 뷰포트 컬링 활성화 여부 (기본값: false) */
220
- enableViewportCulling?: boolean;
221
207
  /** 뷰포트 컬링 여유 공간 (픽셀 단위, 기본값: 100) */
222
208
  cullingMargin?: number;
223
209
  /** Queue 캐시 최대 크기 (기본값: 30000) */
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import type { CanvasPolygonLayerProps } from './types';
3
- export { CanvasProvider, QueueCache, SpatialHashGrid } from '../shared';
4
- export type { CanvasData, CanvasOption, RenderUtils } from '../shared';
3
+ export { CanvasProvider, QueueCache, RenderSource, SpatialHashGrid } from '../shared';
4
+ export type { CanvasData, CanvasOption, CustomRenderEvent, RenderUtils } from '../shared';
5
5
  export type { CanvasPolygonLayerBaseProps, CanvasPolygonLayerProps, CanvasPolygonLayerPropsWithCustomStyle, CanvasPolygonLayerPropsWithIndividualStyles, CanvasPolygonLayerPropsWithObjectStyle, PolygonStyle, PolygonStyleContext, PolygonStyleCustomizer, PolygonStyleCustomizerWithDeps, PolygonStyleObject } from './types';
6
6
  declare const CanvasPolygonLayer: <T>(props: CanvasPolygonLayerProps<T>) => React.ReactPortal;
7
7
  /**
@@ -15,7 +15,7 @@ var context = require('../shared/context.js');
15
15
  var helpers = require('../shared/helpers.js');
16
16
  var hooks = require('../shared/hooks.js');
17
17
  var performance = require('../shared/performance.js');
18
- require('../shared/types.js');
18
+ var types = require('../shared/types.js');
19
19
  var utils = require('../shared/utils.js');
20
20
  var viewport = require('../shared/viewport.js');
21
21
 
@@ -29,17 +29,15 @@ var CanvasPolygonLayer = function (props) {
29
29
  onClick = props.onClick,
30
30
  _a = props.enableMultiSelect,
31
31
  enableMultiSelect = _a === void 0 ? false : _a,
32
- _b = props.enableViewportCulling,
33
- enableViewportCulling = _b === void 0 ? false : _b,
34
- _c = props.cullingMargin,
35
- cullingMargin = _c === void 0 ? performance.DEFAULT_CULLING_MARGIN : _c,
36
- _d = props.maxCacheSize,
37
- maxCacheSize = _d === void 0 ? performance.DEFAULT_MAX_CACHE_SIZE : _d,
32
+ _b = props.cullingMargin,
33
+ cullingMargin = _b === void 0 ? performance.DEFAULT_CULLING_MARGIN : _b,
34
+ _c = props.maxCacheSize,
35
+ maxCacheSize = _c === void 0 ? performance.DEFAULT_MAX_CACHE_SIZE : _c,
38
36
  externalSelectedItems = props.selectedItems,
39
37
  externalSelectedItem = props.selectedItem,
40
- _e = props.disableInteraction,
41
- disableInteraction = _e === void 0 ? false : _e,
42
- options = tslib.__rest(props, ["data", "onClick", "enableMultiSelect", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disableInteraction"]); // customStyle은 다른 방식과 함께 사용 가능
38
+ _d = props.disableInteraction,
39
+ disableInteraction = _d === void 0 ? false : _d,
40
+ options = tslib.__rest(props, ["data", "onClick", "enableMultiSelect", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disableInteraction"]); // customStyle은 다른 방식과 함께 사용 가능
43
41
 
44
42
 
45
43
  var hasCustomStyle = 'customStyle' in props && props.customStyle !== undefined;
@@ -70,7 +68,6 @@ var CanvasPolygonLayer = function (props) {
70
68
 
71
69
  var dataRef = React.useRef(data);
72
70
  var disableInteractionRef = React.useRef(disableInteraction);
73
- var enableViewportCullingRef = React.useRef(enableViewportCulling);
74
71
  var hoveredItemRef = React.useRef(null);
75
72
  var selectedItemRef = React.useRef(externalSelectedItem);
76
73
  var selectedIdsRef = React.useRef(new Set());
@@ -203,11 +200,11 @@ var CanvasPolygonLayer = function (props) {
203
200
  perfectDrawEnabled: false,
204
201
  sceneFunc: function (konvaContext) {
205
202
  var ctx = konvaContext;
206
- var hovered = hoveredItemRef.current; // 뷰포트 컬링: 화면에 보이는 항목만 필터링
203
+ var hovered = hoveredItemRef.current; // 뷰포트 컬링: 화면에 보이는 항목만 필터링 (항상 활성화)
207
204
 
208
- var visibleItems = enableViewportCullingRef.current ? dataRef.current.filter(function (item) {
205
+ var visibleItems = dataRef.current.filter(function (item) {
209
206
  return isInViewport(item);
210
- }) : dataRef.current;
207
+ });
211
208
  renderBase({
212
209
  ctx: ctx,
213
210
  hoveredItem: hovered,
@@ -241,7 +238,9 @@ var CanvasPolygonLayer = function (props) {
241
238
  var selectedItems = helpers.mapValuesToArray(selectedItemsMapRef.current);
242
239
  renderEvent({
243
240
  ctx: ctx,
241
+ hasTopStage: false,
244
242
  hoveredItem: hovered,
243
+ renderSource: types.RenderSource.EVENT,
245
244
  selectedItem: selectedItemRef.current,
246
245
  selectedItems: selectedItems,
247
246
  utils: renderUtils
@@ -256,17 +255,14 @@ var CanvasPolygonLayer = function (props) {
256
255
 
257
256
 
258
257
  var renderAllImmediate = function () {
259
- if (enableViewportCullingRef.current) {
260
- updateViewport();
261
- }
262
-
258
+ updateViewport();
263
259
  buildSpatialIndex();
264
260
  doRenderBase();
265
261
  doRenderEvent();
266
262
  }; // 지도 이벤트 핸들러 생성
267
263
 
268
264
 
269
- var _f = hooks.createMapEventHandlers({
265
+ var _e = hooks.createMapEventHandlers({
270
266
  accumTranslateRef: accumTranslateRef,
271
267
  boundingBoxCacheRef: boundingBoxCacheRef,
272
268
  containerRef: containerRef,
@@ -277,12 +273,12 @@ var CanvasPolygonLayer = function (props) {
277
273
  prevCenterOffsetRef: prevCenterOffsetRef,
278
274
  renderAllImmediate: renderAllImmediate
279
275
  }),
280
- handleIdle = _f.handleIdle,
281
- handleZoomStart = _f.handleZoomStart,
282
- handleZoomEnd = _f.handleZoomEnd,
283
- handleCenterChanged = _f.handleCenterChanged,
284
- handleDragStartShared = _f.handleDragStart,
285
- handleDragEndShared = _f.handleDragEnd;
276
+ handleIdle = _e.handleIdle,
277
+ handleZoomStart = _e.handleZoomStart,
278
+ handleZoomEnd = _e.handleZoomEnd,
279
+ handleCenterChanged = _e.handleCenterChanged,
280
+ handleDragStartShared = _e.handleDragStart,
281
+ handleDragEndShared = _e.handleDragEnd;
286
282
 
287
283
  var handleDragStart = function () {
288
284
  handleDragStartShared(); // 드래그 시작 시점의 hover 상태 저장
@@ -455,11 +451,7 @@ var CanvasPolygonLayer = function (props) {
455
451
  eventLayerRef.current = eventLayer;
456
452
  stage.add(baseLayer);
457
453
  stage.add(eventLayer);
458
-
459
- if (enableViewportCulling) {
460
- updateViewport();
461
- } // ResizeObserver: 맵 크기 변경 감지 (RAF로 debounce)
462
-
454
+ updateViewport(); // ResizeObserver: 맵 크기 변경 감지 (RAF로 debounce)
463
455
 
464
456
  var resizeRafId = null;
465
457
  var resizeObserver = new ResizeObserver(function () {
@@ -472,11 +464,7 @@ var CanvasPolygonLayer = function (props) {
472
464
  stage.height(mapDiv.offsetHeight);
473
465
  offsetCacheRef.current.clear();
474
466
  boundingBoxCacheRef.current.clear();
475
-
476
- if (enableViewportCullingRef.current) {
477
- updateViewport();
478
- }
479
-
467
+ updateViewport();
480
468
  renderAllImmediate();
481
469
  resizeRafId = null;
482
470
  });
@@ -546,36 +534,7 @@ var CanvasPolygonLayer = function (props) {
546
534
 
547
535
  React.useEffect(function () {
548
536
  disableInteractionRef.current = disableInteraction;
549
- }, [disableInteraction]); // enableViewportCulling 동기화
550
-
551
- React.useEffect(function () {
552
- enableViewportCullingRef.current = enableViewportCulling;
553
-
554
- if (stageRef.current) {
555
- // 뷰포트 컬링 설정이 변경되면 shape 재생성 필요
556
- var baseLayer = baseLayerRef.current;
557
-
558
- if (baseLayer) {
559
- var shape = baseLayer.findOne('.base-render-shape');
560
-
561
- if (shape) {
562
- shape.destroy();
563
- }
564
- }
565
-
566
- var eventLayer = eventLayerRef.current;
567
-
568
- if (eventLayer) {
569
- var shape = eventLayer.findOne('.event-render-shape');
570
-
571
- if (shape) {
572
- shape.destroy();
573
- }
574
- }
575
-
576
- renderAllImmediate();
577
- }
578
- }, [enableViewportCulling]); // 외부 selectedItems 동기화
537
+ }, [disableInteraction]); // 외부 selectedItems 동기화
579
538
 
580
539
  React.useEffect(function () {
581
540
  if (!stageRef.current) return;
@@ -631,4 +590,8 @@ var CanvasPolygonLayer = function (props) {
631
590
  exports.CanvasProvider = context.CanvasProvider;
632
591
  exports.QueueCache = performance.QueueCache;
633
592
  exports.SpatialHashGrid = performance.SpatialHashGrid;
593
+ Object.defineProperty(exports, 'RenderSource', {
594
+ enumerable: true,
595
+ get: function () { return types.RenderSource; }
596
+ });
634
597
  exports["default"] = CanvasPolygonLayer;
@@ -113,8 +113,6 @@ export interface CanvasPolygonLayerBaseProps<T> extends Pick<MarkerOptions, 'zIn
113
113
  onClick?: (payload: CanvasData<T>, selectedIds: Set<string>) => void;
114
114
  /** 다중 선택 활성화 여부 (기본값: false) */
115
115
  enableMultiSelect?: boolean;
116
- /** 뷰포트 컬링 활성화 여부 (기본값: false) */
117
- enableViewportCulling?: boolean;
118
116
  /** 뷰포트 컬링 여유 공간 (픽셀 단위, 기본값: 100) */
119
117
  cullingMargin?: number;
120
118
  /** Queue 캐시 최대 크기 (기본값: 30000) */
package/dist/index.es.js CHANGED
@@ -3952,17 +3952,15 @@ var CanvasMarkerLayer = function (props) {
3952
3952
  var hasRenderEvent = 'renderEvent' in props && props.renderEvent !== undefined; // renderEvent가 있는 경우와 없는 경우를 구분하여 props 추출
3953
3953
 
3954
3954
  var data = props.data,
3955
- _a = props.enableViewportCulling,
3956
- enableViewportCulling = _a === void 0 ? false : _a,
3957
- _b = props.cullingMargin,
3958
- cullingMargin = _b === void 0 ? DEFAULT_CULLING_MARGIN : _b,
3959
- _c = props.maxCacheSize,
3960
- maxCacheSize = _c === void 0 ? DEFAULT_MAX_CACHE_SIZE : _c,
3955
+ _a = props.cullingMargin,
3956
+ cullingMargin = _a === void 0 ? DEFAULT_CULLING_MARGIN : _a,
3957
+ _b = props.maxCacheSize,
3958
+ maxCacheSize = _b === void 0 ? DEFAULT_MAX_CACHE_SIZE : _b,
3961
3959
  renderBase = props.renderBase,
3962
- options = __rest(props, ["data", "enableViewportCulling", "cullingMargin", "maxCacheSize", "renderBase"]); // renderEvent가 있는 경우에만 인터랙션 관련 props 추출
3960
+ options = __rest(props, ["data", "cullingMargin", "maxCacheSize", "renderBase"]); // renderEvent가 있는 경우에만 인터랙션 관련 props 추출
3963
3961
 
3964
3962
 
3965
- var _d = hasRenderEvent && 'renderEvent' in props ? props : {
3963
+ var _c = hasRenderEvent && 'renderEvent' in props ? props : {
3966
3964
  disableInteraction: false,
3967
3965
  onClick: undefined,
3968
3966
  onMouseOut: undefined,
@@ -3972,15 +3970,15 @@ var CanvasMarkerLayer = function (props) {
3972
3970
  selectedItems: undefined,
3973
3971
  topStageZIndex: undefined
3974
3972
  },
3975
- _e = _d.disableInteraction,
3976
- disableInteraction = _e === void 0 ? false : _e,
3977
- onClick = _d.onClick,
3978
- onMouseOut = _d.onMouseOut,
3979
- onMouseOver = _d.onMouseOver,
3980
- renderEvent = _d.renderEvent,
3981
- externalSelectedItem = _d.selectedItem,
3982
- externalSelectedItems = _d.selectedItems,
3983
- rawTopStageZIndex = _d.topStageZIndex; // topStageZIndex가 있으면 hover 최상단 표시 활성화, 없으면 비활성화 (성능 우선)
3973
+ _d = _c.disableInteraction,
3974
+ disableInteraction = _d === void 0 ? false : _d,
3975
+ onClick = _c.onClick,
3976
+ onMouseOut = _c.onMouseOut,
3977
+ onMouseOver = _c.onMouseOver,
3978
+ renderEvent = _c.renderEvent,
3979
+ externalSelectedItem = _c.selectedItem,
3980
+ externalSelectedItems = _c.selectedItems,
3981
+ rawTopStageZIndex = _c.topStageZIndex; // topStageZIndex가 있으면 hover 최상단 표시 활성화, 없으면 비활성화 (성능 우선)
3984
3982
 
3985
3983
 
3986
3984
  var topStageZIndex = rawTopStageZIndex;
@@ -4006,7 +4004,6 @@ var CanvasMarkerLayer = function (props) {
4006
4004
 
4007
4005
  var dataRef = useRef(data);
4008
4006
  var disableInteractionRef = useRef(disableInteraction);
4009
- var enableViewportCullingRef = useRef(enableViewportCulling);
4010
4007
  var hoveredItemRef = useRef(null);
4011
4008
  var selectedItemRef = useRef(externalSelectedItem);
4012
4009
  var selectedIdsRef = useRef(new Set());
@@ -4088,11 +4085,11 @@ var CanvasMarkerLayer = function (props) {
4088
4085
  name: 'base-render-shape',
4089
4086
  perfectDrawEnabled: false,
4090
4087
  sceneFunc: function (konvaContext) {
4091
- var ctx = konvaContext; // 뷰포트 컬링: 화면에 보이는 항목만 필터링
4088
+ var ctx = konvaContext; // 뷰포트 컬링: 화면에 보이는 항목만 필터링 (항상 활성화)
4092
4089
 
4093
- var visibleItems = enableViewportCullingRef.current ? dataRef.current.filter(function (item) {
4090
+ var visibleItems = dataRef.current.filter(function (item) {
4094
4091
  return isInViewport$1(item);
4095
- }) : dataRef.current; // Base Layer는 기본 마커만 렌더링 (hover된 항목도 포함)
4092
+ }); // Base Layer는 기본 마커만 렌더링 (hover된 항목도 포함)
4096
4093
  // hover 스타일은 Event Layer와 Top Layer에서 덧그려짐
4097
4094
 
4098
4095
  renderBase({
@@ -4195,9 +4192,9 @@ var CanvasMarkerLayer = function (props) {
4195
4192
  var ctx = konvaContext;
4196
4193
  var currentHovered = hoveredItemRef.current; // hover된 항목이 없으면 아무것도 그리지 않음
4197
4194
 
4198
- if (!currentHovered) return; // 뷰포트 컬링 확인
4195
+ if (!currentHovered) return; // 뷰포트 컬링 확인 (항상 활성화)
4199
4196
 
4200
- if (enableViewportCullingRef.current && !isInViewport$1(currentHovered)) {
4197
+ if (!isInViewport$1(currentHovered)) {
4201
4198
  return;
4202
4199
  }
4203
4200
 
@@ -4237,10 +4234,7 @@ var CanvasMarkerLayer = function (props) {
4237
4234
 
4238
4235
 
4239
4236
  var renderAllImmediate = function () {
4240
- if (enableViewportCullingRef.current) {
4241
- updateViewport$1();
4242
- }
4243
-
4237
+ updateViewport$1();
4244
4238
  buildSpatialIndex$1();
4245
4239
  doRenderBase();
4246
4240
  doRenderEvent(); // 메인 stage의 transform을 topStage에도 동기화
@@ -4255,7 +4249,7 @@ var CanvasMarkerLayer = function (props) {
4255
4249
  }; // 지도 이벤트 핸들러 생성
4256
4250
 
4257
4251
 
4258
- var _f = createMapEventHandlers({
4252
+ var _e = createMapEventHandlers({
4259
4253
  accumTranslateRef: accumTranslateRef,
4260
4254
  boundingBoxCacheRef: boundingBoxCacheRef,
4261
4255
  containerRef: containerRef,
@@ -4266,12 +4260,12 @@ var CanvasMarkerLayer = function (props) {
4266
4260
  prevCenterOffsetRef: prevCenterOffsetRef,
4267
4261
  renderAllImmediate: renderAllImmediate
4268
4262
  }),
4269
- handleIdleShared = _f.handleIdle,
4270
- handleZoomStart = _f.handleZoomStart,
4271
- handleZoomEnd = _f.handleZoomEnd,
4272
- handleCenterChangedShared = _f.handleCenterChanged,
4273
- handleDragStartShared = _f.handleDragStart,
4274
- handleDragEndShared = _f.handleDragEnd; // handleIdle 래핑: topStage transform 제거 추가
4263
+ handleIdleShared = _e.handleIdle,
4264
+ handleZoomStart = _e.handleZoomStart,
4265
+ handleZoomEnd = _e.handleZoomEnd,
4266
+ handleCenterChangedShared = _e.handleCenterChanged,
4267
+ handleDragStartShared = _e.handleDragStart,
4268
+ handleDragEndShared = _e.handleDragEnd; // handleIdle 래핑: topStage transform 제거 추가
4275
4269
 
4276
4270
 
4277
4271
  var handleIdle = function () {
@@ -4525,11 +4519,7 @@ var CanvasMarkerLayer = function (props) {
4525
4519
  eventLayerRef.current = eventLayer;
4526
4520
  stage.add(baseLayer);
4527
4521
  stage.add(eventLayer);
4528
-
4529
- if (enableViewportCulling) {
4530
- updateViewport$1();
4531
- } // ResizeObserver: 맵 크기 변경 감지 (RAF로 debounce)
4532
-
4522
+ updateViewport$1(); // ResizeObserver: 맵 크기 변경 감지 (RAF로 debounce)
4533
4523
 
4534
4524
  var resizeRafId = null;
4535
4525
  var resizeObserver = new ResizeObserver(function () {
@@ -4542,11 +4532,7 @@ var CanvasMarkerLayer = function (props) {
4542
4532
  stage.height(mapDiv.offsetHeight);
4543
4533
  offsetCacheRef.current.clear();
4544
4534
  boundingBoxCacheRef.current.clear();
4545
-
4546
- if (enableViewportCullingRef.current) {
4547
- updateViewport$1();
4548
- }
4549
-
4535
+ updateViewport$1();
4550
4536
  renderAllImmediate();
4551
4537
  resizeRafId = null;
4552
4538
  });
@@ -4628,36 +4614,7 @@ var CanvasMarkerLayer = function (props) {
4628
4614
 
4629
4615
  useEffect(function () {
4630
4616
  disableInteractionRef.current = disableInteraction;
4631
- }, [disableInteraction]); // enableViewportCulling 동기화
4632
-
4633
- useEffect(function () {
4634
- enableViewportCullingRef.current = enableViewportCulling;
4635
-
4636
- if (stageRef.current) {
4637
- // 뷰포트 컬링 설정이 변경되면 shape 재생성 필요
4638
- var baseLayer = baseLayerRef.current;
4639
-
4640
- if (baseLayer) {
4641
- var shape = baseLayer.findOne('.base-render-shape');
4642
-
4643
- if (shape) {
4644
- shape.destroy();
4645
- }
4646
- }
4647
-
4648
- var eventLayer = eventLayerRef.current;
4649
-
4650
- if (eventLayer) {
4651
- var shape = eventLayer.findOne('.event-render-shape');
4652
-
4653
- if (shape) {
4654
- shape.destroy();
4655
- }
4656
- }
4657
-
4658
- renderAllImmediate();
4659
- }
4660
- }, [enableViewportCulling]); // Top Layer용 별도 캔버스 DOM 생성 (topStageZIndex가 설정된 경우)
4617
+ }, [disableInteraction]); // Top Layer용 별도 캔버스 DOM 생성 (topStageZIndex가 설정된 경우)
4661
4618
 
4662
4619
  useEffect(function () {
4663
4620
  if (topStageZIndex === undefined) return;
@@ -5968,17 +5925,15 @@ var CanvasPolygonLayer = function (props) {
5968
5925
  onClick = props.onClick,
5969
5926
  _a = props.enableMultiSelect,
5970
5927
  enableMultiSelect = _a === void 0 ? false : _a,
5971
- _b = props.enableViewportCulling,
5972
- enableViewportCulling = _b === void 0 ? false : _b,
5973
- _c = props.cullingMargin,
5974
- cullingMargin = _c === void 0 ? DEFAULT_CULLING_MARGIN : _c,
5975
- _d = props.maxCacheSize,
5976
- maxCacheSize = _d === void 0 ? DEFAULT_MAX_CACHE_SIZE : _d,
5928
+ _b = props.cullingMargin,
5929
+ cullingMargin = _b === void 0 ? DEFAULT_CULLING_MARGIN : _b,
5930
+ _c = props.maxCacheSize,
5931
+ maxCacheSize = _c === void 0 ? DEFAULT_MAX_CACHE_SIZE : _c,
5977
5932
  externalSelectedItems = props.selectedItems,
5978
5933
  externalSelectedItem = props.selectedItem,
5979
- _e = props.disableInteraction,
5980
- disableInteraction = _e === void 0 ? false : _e,
5981
- options = __rest(props, ["data", "onClick", "enableMultiSelect", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disableInteraction"]); // customStyle은 다른 방식과 함께 사용 가능
5934
+ _d = props.disableInteraction,
5935
+ disableInteraction = _d === void 0 ? false : _d,
5936
+ options = __rest(props, ["data", "onClick", "enableMultiSelect", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disableInteraction"]); // customStyle은 다른 방식과 함께 사용 가능
5982
5937
 
5983
5938
 
5984
5939
  var hasCustomStyle = 'customStyle' in props && props.customStyle !== undefined;
@@ -6009,7 +5964,6 @@ var CanvasPolygonLayer = function (props) {
6009
5964
 
6010
5965
  var dataRef = useRef(data);
6011
5966
  var disableInteractionRef = useRef(disableInteraction);
6012
- var enableViewportCullingRef = useRef(enableViewportCulling);
6013
5967
  var hoveredItemRef = useRef(null);
6014
5968
  var selectedItemRef = useRef(externalSelectedItem);
6015
5969
  var selectedIdsRef = useRef(new Set());
@@ -6142,11 +6096,11 @@ var CanvasPolygonLayer = function (props) {
6142
6096
  perfectDrawEnabled: false,
6143
6097
  sceneFunc: function (konvaContext) {
6144
6098
  var ctx = konvaContext;
6145
- var hovered = hoveredItemRef.current; // 뷰포트 컬링: 화면에 보이는 항목만 필터링
6099
+ var hovered = hoveredItemRef.current; // 뷰포트 컬링: 화면에 보이는 항목만 필터링 (항상 활성화)
6146
6100
 
6147
- var visibleItems = enableViewportCullingRef.current ? dataRef.current.filter(function (item) {
6101
+ var visibleItems = dataRef.current.filter(function (item) {
6148
6102
  return isInViewport$1(item);
6149
- }) : dataRef.current;
6103
+ });
6150
6104
  renderBase({
6151
6105
  ctx: ctx,
6152
6106
  hoveredItem: hovered,
@@ -6180,7 +6134,9 @@ var CanvasPolygonLayer = function (props) {
6180
6134
  var selectedItems = mapValuesToArray(selectedItemsMapRef.current);
6181
6135
  renderEvent({
6182
6136
  ctx: ctx,
6137
+ hasTopStage: false,
6183
6138
  hoveredItem: hovered,
6139
+ renderSource: RenderSource.EVENT,
6184
6140
  selectedItem: selectedItemRef.current,
6185
6141
  selectedItems: selectedItems,
6186
6142
  utils: renderUtils
@@ -6195,17 +6151,14 @@ var CanvasPolygonLayer = function (props) {
6195
6151
 
6196
6152
 
6197
6153
  var renderAllImmediate = function () {
6198
- if (enableViewportCullingRef.current) {
6199
- updateViewport$1();
6200
- }
6201
-
6154
+ updateViewport$1();
6202
6155
  buildSpatialIndex$1();
6203
6156
  doRenderBase();
6204
6157
  doRenderEvent();
6205
6158
  }; // 지도 이벤트 핸들러 생성
6206
6159
 
6207
6160
 
6208
- var _f = createMapEventHandlers({
6161
+ var _e = createMapEventHandlers({
6209
6162
  accumTranslateRef: accumTranslateRef,
6210
6163
  boundingBoxCacheRef: boundingBoxCacheRef,
6211
6164
  containerRef: containerRef,
@@ -6216,12 +6169,12 @@ var CanvasPolygonLayer = function (props) {
6216
6169
  prevCenterOffsetRef: prevCenterOffsetRef,
6217
6170
  renderAllImmediate: renderAllImmediate
6218
6171
  }),
6219
- handleIdle = _f.handleIdle,
6220
- handleZoomStart = _f.handleZoomStart,
6221
- handleZoomEnd = _f.handleZoomEnd,
6222
- handleCenterChanged = _f.handleCenterChanged,
6223
- handleDragStartShared = _f.handleDragStart,
6224
- handleDragEndShared = _f.handleDragEnd;
6172
+ handleIdle = _e.handleIdle,
6173
+ handleZoomStart = _e.handleZoomStart,
6174
+ handleZoomEnd = _e.handleZoomEnd,
6175
+ handleCenterChanged = _e.handleCenterChanged,
6176
+ handleDragStartShared = _e.handleDragStart,
6177
+ handleDragEndShared = _e.handleDragEnd;
6225
6178
 
6226
6179
  var handleDragStart = function () {
6227
6180
  handleDragStartShared(); // 드래그 시작 시점의 hover 상태 저장
@@ -6394,11 +6347,7 @@ var CanvasPolygonLayer = function (props) {
6394
6347
  eventLayerRef.current = eventLayer;
6395
6348
  stage.add(baseLayer);
6396
6349
  stage.add(eventLayer);
6397
-
6398
- if (enableViewportCulling) {
6399
- updateViewport$1();
6400
- } // ResizeObserver: 맵 크기 변경 감지 (RAF로 debounce)
6401
-
6350
+ updateViewport$1(); // ResizeObserver: 맵 크기 변경 감지 (RAF로 debounce)
6402
6351
 
6403
6352
  var resizeRafId = null;
6404
6353
  var resizeObserver = new ResizeObserver(function () {
@@ -6411,11 +6360,7 @@ var CanvasPolygonLayer = function (props) {
6411
6360
  stage.height(mapDiv.offsetHeight);
6412
6361
  offsetCacheRef.current.clear();
6413
6362
  boundingBoxCacheRef.current.clear();
6414
-
6415
- if (enableViewportCullingRef.current) {
6416
- updateViewport$1();
6417
- }
6418
-
6363
+ updateViewport$1();
6419
6364
  renderAllImmediate();
6420
6365
  resizeRafId = null;
6421
6366
  });
@@ -6485,36 +6430,7 @@ var CanvasPolygonLayer = function (props) {
6485
6430
 
6486
6431
  useEffect(function () {
6487
6432
  disableInteractionRef.current = disableInteraction;
6488
- }, [disableInteraction]); // enableViewportCulling 동기화
6489
-
6490
- useEffect(function () {
6491
- enableViewportCullingRef.current = enableViewportCulling;
6492
-
6493
- if (stageRef.current) {
6494
- // 뷰포트 컬링 설정이 변경되면 shape 재생성 필요
6495
- var baseLayer = baseLayerRef.current;
6496
-
6497
- if (baseLayer) {
6498
- var shape = baseLayer.findOne('.base-render-shape');
6499
-
6500
- if (shape) {
6501
- shape.destroy();
6502
- }
6503
- }
6504
-
6505
- var eventLayer = eventLayerRef.current;
6506
-
6507
- if (eventLayer) {
6508
- var shape = eventLayer.findOne('.event-render-shape');
6509
-
6510
- if (shape) {
6511
- shape.destroy();
6512
- }
6513
- }
6514
-
6515
- renderAllImmediate();
6516
- }
6517
- }, [enableViewportCulling]); // 외부 selectedItems 동기화
6433
+ }, [disableInteraction]); // 외부 selectedItems 동기화
6518
6434
 
6519
6435
  useEffect(function () {
6520
6436
  if (!stageRef.current) return;
package/dist/index.umd.js CHANGED
@@ -3956,17 +3956,15 @@
3956
3956
  var hasRenderEvent = 'renderEvent' in props && props.renderEvent !== undefined; // renderEvent가 있는 경우와 없는 경우를 구분하여 props 추출
3957
3957
 
3958
3958
  var data = props.data,
3959
- _a = props.enableViewportCulling,
3960
- enableViewportCulling = _a === void 0 ? false : _a,
3961
- _b = props.cullingMargin,
3962
- cullingMargin = _b === void 0 ? DEFAULT_CULLING_MARGIN : _b,
3963
- _c = props.maxCacheSize,
3964
- maxCacheSize = _c === void 0 ? DEFAULT_MAX_CACHE_SIZE : _c,
3959
+ _a = props.cullingMargin,
3960
+ cullingMargin = _a === void 0 ? DEFAULT_CULLING_MARGIN : _a,
3961
+ _b = props.maxCacheSize,
3962
+ maxCacheSize = _b === void 0 ? DEFAULT_MAX_CACHE_SIZE : _b,
3965
3963
  renderBase = props.renderBase,
3966
- options = tslib.__rest(props, ["data", "enableViewportCulling", "cullingMargin", "maxCacheSize", "renderBase"]); // renderEvent가 있는 경우에만 인터랙션 관련 props 추출
3964
+ options = tslib.__rest(props, ["data", "cullingMargin", "maxCacheSize", "renderBase"]); // renderEvent가 있는 경우에만 인터랙션 관련 props 추출
3967
3965
 
3968
3966
 
3969
- var _d = hasRenderEvent && 'renderEvent' in props ? props : {
3967
+ var _c = hasRenderEvent && 'renderEvent' in props ? props : {
3970
3968
  disableInteraction: false,
3971
3969
  onClick: undefined,
3972
3970
  onMouseOut: undefined,
@@ -3976,15 +3974,15 @@
3976
3974
  selectedItems: undefined,
3977
3975
  topStageZIndex: undefined
3978
3976
  },
3979
- _e = _d.disableInteraction,
3980
- disableInteraction = _e === void 0 ? false : _e,
3981
- onClick = _d.onClick,
3982
- onMouseOut = _d.onMouseOut,
3983
- onMouseOver = _d.onMouseOver,
3984
- renderEvent = _d.renderEvent,
3985
- externalSelectedItem = _d.selectedItem,
3986
- externalSelectedItems = _d.selectedItems,
3987
- rawTopStageZIndex = _d.topStageZIndex; // topStageZIndex가 있으면 hover 최상단 표시 활성화, 없으면 비활성화 (성능 우선)
3977
+ _d = _c.disableInteraction,
3978
+ disableInteraction = _d === void 0 ? false : _d,
3979
+ onClick = _c.onClick,
3980
+ onMouseOut = _c.onMouseOut,
3981
+ onMouseOver = _c.onMouseOver,
3982
+ renderEvent = _c.renderEvent,
3983
+ externalSelectedItem = _c.selectedItem,
3984
+ externalSelectedItems = _c.selectedItems,
3985
+ rawTopStageZIndex = _c.topStageZIndex; // topStageZIndex가 있으면 hover 최상단 표시 활성화, 없으면 비활성화 (성능 우선)
3988
3986
 
3989
3987
 
3990
3988
  var topStageZIndex = rawTopStageZIndex;
@@ -4010,7 +4008,6 @@
4010
4008
 
4011
4009
  var dataRef = React.useRef(data);
4012
4010
  var disableInteractionRef = React.useRef(disableInteraction);
4013
- var enableViewportCullingRef = React.useRef(enableViewportCulling);
4014
4011
  var hoveredItemRef = React.useRef(null);
4015
4012
  var selectedItemRef = React.useRef(externalSelectedItem);
4016
4013
  var selectedIdsRef = React.useRef(new Set());
@@ -4092,11 +4089,11 @@
4092
4089
  name: 'base-render-shape',
4093
4090
  perfectDrawEnabled: false,
4094
4091
  sceneFunc: function (konvaContext) {
4095
- var ctx = konvaContext; // 뷰포트 컬링: 화면에 보이는 항목만 필터링
4092
+ var ctx = konvaContext; // 뷰포트 컬링: 화면에 보이는 항목만 필터링 (항상 활성화)
4096
4093
 
4097
- var visibleItems = enableViewportCullingRef.current ? dataRef.current.filter(function (item) {
4094
+ var visibleItems = dataRef.current.filter(function (item) {
4098
4095
  return isInViewport$1(item);
4099
- }) : dataRef.current; // Base Layer는 기본 마커만 렌더링 (hover된 항목도 포함)
4096
+ }); // Base Layer는 기본 마커만 렌더링 (hover된 항목도 포함)
4100
4097
  // hover 스타일은 Event Layer와 Top Layer에서 덧그려짐
4101
4098
 
4102
4099
  renderBase({
@@ -4199,9 +4196,9 @@
4199
4196
  var ctx = konvaContext;
4200
4197
  var currentHovered = hoveredItemRef.current; // hover된 항목이 없으면 아무것도 그리지 않음
4201
4198
 
4202
- if (!currentHovered) return; // 뷰포트 컬링 확인
4199
+ if (!currentHovered) return; // 뷰포트 컬링 확인 (항상 활성화)
4203
4200
 
4204
- if (enableViewportCullingRef.current && !isInViewport$1(currentHovered)) {
4201
+ if (!isInViewport$1(currentHovered)) {
4205
4202
  return;
4206
4203
  }
4207
4204
 
@@ -4241,10 +4238,7 @@
4241
4238
 
4242
4239
 
4243
4240
  var renderAllImmediate = function () {
4244
- if (enableViewportCullingRef.current) {
4245
- updateViewport$1();
4246
- }
4247
-
4241
+ updateViewport$1();
4248
4242
  buildSpatialIndex$1();
4249
4243
  doRenderBase();
4250
4244
  doRenderEvent(); // 메인 stage의 transform을 topStage에도 동기화
@@ -4259,7 +4253,7 @@
4259
4253
  }; // 지도 이벤트 핸들러 생성
4260
4254
 
4261
4255
 
4262
- var _f = createMapEventHandlers({
4256
+ var _e = createMapEventHandlers({
4263
4257
  accumTranslateRef: accumTranslateRef,
4264
4258
  boundingBoxCacheRef: boundingBoxCacheRef,
4265
4259
  containerRef: containerRef,
@@ -4270,12 +4264,12 @@
4270
4264
  prevCenterOffsetRef: prevCenterOffsetRef,
4271
4265
  renderAllImmediate: renderAllImmediate
4272
4266
  }),
4273
- handleIdleShared = _f.handleIdle,
4274
- handleZoomStart = _f.handleZoomStart,
4275
- handleZoomEnd = _f.handleZoomEnd,
4276
- handleCenterChangedShared = _f.handleCenterChanged,
4277
- handleDragStartShared = _f.handleDragStart,
4278
- handleDragEndShared = _f.handleDragEnd; // handleIdle 래핑: topStage transform 제거 추가
4267
+ handleIdleShared = _e.handleIdle,
4268
+ handleZoomStart = _e.handleZoomStart,
4269
+ handleZoomEnd = _e.handleZoomEnd,
4270
+ handleCenterChangedShared = _e.handleCenterChanged,
4271
+ handleDragStartShared = _e.handleDragStart,
4272
+ handleDragEndShared = _e.handleDragEnd; // handleIdle 래핑: topStage transform 제거 추가
4279
4273
 
4280
4274
 
4281
4275
  var handleIdle = function () {
@@ -4529,11 +4523,7 @@
4529
4523
  eventLayerRef.current = eventLayer;
4530
4524
  stage.add(baseLayer);
4531
4525
  stage.add(eventLayer);
4532
-
4533
- if (enableViewportCulling) {
4534
- updateViewport$1();
4535
- } // ResizeObserver: 맵 크기 변경 감지 (RAF로 debounce)
4536
-
4526
+ updateViewport$1(); // ResizeObserver: 맵 크기 변경 감지 (RAF로 debounce)
4537
4527
 
4538
4528
  var resizeRafId = null;
4539
4529
  var resizeObserver = new ResizeObserver(function () {
@@ -4546,11 +4536,7 @@
4546
4536
  stage.height(mapDiv.offsetHeight);
4547
4537
  offsetCacheRef.current.clear();
4548
4538
  boundingBoxCacheRef.current.clear();
4549
-
4550
- if (enableViewportCullingRef.current) {
4551
- updateViewport$1();
4552
- }
4553
-
4539
+ updateViewport$1();
4554
4540
  renderAllImmediate();
4555
4541
  resizeRafId = null;
4556
4542
  });
@@ -4632,36 +4618,7 @@
4632
4618
 
4633
4619
  React.useEffect(function () {
4634
4620
  disableInteractionRef.current = disableInteraction;
4635
- }, [disableInteraction]); // enableViewportCulling 동기화
4636
-
4637
- React.useEffect(function () {
4638
- enableViewportCullingRef.current = enableViewportCulling;
4639
-
4640
- if (stageRef.current) {
4641
- // 뷰포트 컬링 설정이 변경되면 shape 재생성 필요
4642
- var baseLayer = baseLayerRef.current;
4643
-
4644
- if (baseLayer) {
4645
- var shape = baseLayer.findOne('.base-render-shape');
4646
-
4647
- if (shape) {
4648
- shape.destroy();
4649
- }
4650
- }
4651
-
4652
- var eventLayer = eventLayerRef.current;
4653
-
4654
- if (eventLayer) {
4655
- var shape = eventLayer.findOne('.event-render-shape');
4656
-
4657
- if (shape) {
4658
- shape.destroy();
4659
- }
4660
- }
4661
-
4662
- renderAllImmediate();
4663
- }
4664
- }, [enableViewportCulling]); // Top Layer용 별도 캔버스 DOM 생성 (topStageZIndex가 설정된 경우)
4621
+ }, [disableInteraction]); // Top Layer용 별도 캔버스 DOM 생성 (topStageZIndex가 설정된 경우)
4665
4622
 
4666
4623
  React.useEffect(function () {
4667
4624
  if (topStageZIndex === undefined) return;
@@ -5972,17 +5929,15 @@
5972
5929
  onClick = props.onClick,
5973
5930
  _a = props.enableMultiSelect,
5974
5931
  enableMultiSelect = _a === void 0 ? false : _a,
5975
- _b = props.enableViewportCulling,
5976
- enableViewportCulling = _b === void 0 ? false : _b,
5977
- _c = props.cullingMargin,
5978
- cullingMargin = _c === void 0 ? DEFAULT_CULLING_MARGIN : _c,
5979
- _d = props.maxCacheSize,
5980
- maxCacheSize = _d === void 0 ? DEFAULT_MAX_CACHE_SIZE : _d,
5932
+ _b = props.cullingMargin,
5933
+ cullingMargin = _b === void 0 ? DEFAULT_CULLING_MARGIN : _b,
5934
+ _c = props.maxCacheSize,
5935
+ maxCacheSize = _c === void 0 ? DEFAULT_MAX_CACHE_SIZE : _c,
5981
5936
  externalSelectedItems = props.selectedItems,
5982
5937
  externalSelectedItem = props.selectedItem,
5983
- _e = props.disableInteraction,
5984
- disableInteraction = _e === void 0 ? false : _e,
5985
- options = tslib.__rest(props, ["data", "onClick", "enableMultiSelect", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disableInteraction"]); // customStyle은 다른 방식과 함께 사용 가능
5938
+ _d = props.disableInteraction,
5939
+ disableInteraction = _d === void 0 ? false : _d,
5940
+ options = tslib.__rest(props, ["data", "onClick", "enableMultiSelect", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disableInteraction"]); // customStyle은 다른 방식과 함께 사용 가능
5986
5941
 
5987
5942
 
5988
5943
  var hasCustomStyle = 'customStyle' in props && props.customStyle !== undefined;
@@ -6013,7 +5968,6 @@
6013
5968
 
6014
5969
  var dataRef = React.useRef(data);
6015
5970
  var disableInteractionRef = React.useRef(disableInteraction);
6016
- var enableViewportCullingRef = React.useRef(enableViewportCulling);
6017
5971
  var hoveredItemRef = React.useRef(null);
6018
5972
  var selectedItemRef = React.useRef(externalSelectedItem);
6019
5973
  var selectedIdsRef = React.useRef(new Set());
@@ -6146,11 +6100,11 @@
6146
6100
  perfectDrawEnabled: false,
6147
6101
  sceneFunc: function (konvaContext) {
6148
6102
  var ctx = konvaContext;
6149
- var hovered = hoveredItemRef.current; // 뷰포트 컬링: 화면에 보이는 항목만 필터링
6103
+ var hovered = hoveredItemRef.current; // 뷰포트 컬링: 화면에 보이는 항목만 필터링 (항상 활성화)
6150
6104
 
6151
- var visibleItems = enableViewportCullingRef.current ? dataRef.current.filter(function (item) {
6105
+ var visibleItems = dataRef.current.filter(function (item) {
6152
6106
  return isInViewport$1(item);
6153
- }) : dataRef.current;
6107
+ });
6154
6108
  renderBase({
6155
6109
  ctx: ctx,
6156
6110
  hoveredItem: hovered,
@@ -6184,7 +6138,9 @@
6184
6138
  var selectedItems = mapValuesToArray(selectedItemsMapRef.current);
6185
6139
  renderEvent({
6186
6140
  ctx: ctx,
6141
+ hasTopStage: false,
6187
6142
  hoveredItem: hovered,
6143
+ renderSource: exports.RenderSource.EVENT,
6188
6144
  selectedItem: selectedItemRef.current,
6189
6145
  selectedItems: selectedItems,
6190
6146
  utils: renderUtils
@@ -6199,17 +6155,14 @@
6199
6155
 
6200
6156
 
6201
6157
  var renderAllImmediate = function () {
6202
- if (enableViewportCullingRef.current) {
6203
- updateViewport$1();
6204
- }
6205
-
6158
+ updateViewport$1();
6206
6159
  buildSpatialIndex$1();
6207
6160
  doRenderBase();
6208
6161
  doRenderEvent();
6209
6162
  }; // 지도 이벤트 핸들러 생성
6210
6163
 
6211
6164
 
6212
- var _f = createMapEventHandlers({
6165
+ var _e = createMapEventHandlers({
6213
6166
  accumTranslateRef: accumTranslateRef,
6214
6167
  boundingBoxCacheRef: boundingBoxCacheRef,
6215
6168
  containerRef: containerRef,
@@ -6220,12 +6173,12 @@
6220
6173
  prevCenterOffsetRef: prevCenterOffsetRef,
6221
6174
  renderAllImmediate: renderAllImmediate
6222
6175
  }),
6223
- handleIdle = _f.handleIdle,
6224
- handleZoomStart = _f.handleZoomStart,
6225
- handleZoomEnd = _f.handleZoomEnd,
6226
- handleCenterChanged = _f.handleCenterChanged,
6227
- handleDragStartShared = _f.handleDragStart,
6228
- handleDragEndShared = _f.handleDragEnd;
6176
+ handleIdle = _e.handleIdle,
6177
+ handleZoomStart = _e.handleZoomStart,
6178
+ handleZoomEnd = _e.handleZoomEnd,
6179
+ handleCenterChanged = _e.handleCenterChanged,
6180
+ handleDragStartShared = _e.handleDragStart,
6181
+ handleDragEndShared = _e.handleDragEnd;
6229
6182
 
6230
6183
  var handleDragStart = function () {
6231
6184
  handleDragStartShared(); // 드래그 시작 시점의 hover 상태 저장
@@ -6398,11 +6351,7 @@
6398
6351
  eventLayerRef.current = eventLayer;
6399
6352
  stage.add(baseLayer);
6400
6353
  stage.add(eventLayer);
6401
-
6402
- if (enableViewportCulling) {
6403
- updateViewport$1();
6404
- } // ResizeObserver: 맵 크기 변경 감지 (RAF로 debounce)
6405
-
6354
+ updateViewport$1(); // ResizeObserver: 맵 크기 변경 감지 (RAF로 debounce)
6406
6355
 
6407
6356
  var resizeRafId = null;
6408
6357
  var resizeObserver = new ResizeObserver(function () {
@@ -6415,11 +6364,7 @@
6415
6364
  stage.height(mapDiv.offsetHeight);
6416
6365
  offsetCacheRef.current.clear();
6417
6366
  boundingBoxCacheRef.current.clear();
6418
-
6419
- if (enableViewportCullingRef.current) {
6420
- updateViewport$1();
6421
- }
6422
-
6367
+ updateViewport$1();
6423
6368
  renderAllImmediate();
6424
6369
  resizeRafId = null;
6425
6370
  });
@@ -6489,36 +6434,7 @@
6489
6434
 
6490
6435
  React.useEffect(function () {
6491
6436
  disableInteractionRef.current = disableInteraction;
6492
- }, [disableInteraction]); // enableViewportCulling 동기화
6493
-
6494
- React.useEffect(function () {
6495
- enableViewportCullingRef.current = enableViewportCulling;
6496
-
6497
- if (stageRef.current) {
6498
- // 뷰포트 컬링 설정이 변경되면 shape 재생성 필요
6499
- var baseLayer = baseLayerRef.current;
6500
-
6501
- if (baseLayer) {
6502
- var shape = baseLayer.findOne('.base-render-shape');
6503
-
6504
- if (shape) {
6505
- shape.destroy();
6506
- }
6507
- }
6508
-
6509
- var eventLayer = eventLayerRef.current;
6510
-
6511
- if (eventLayer) {
6512
- var shape = eventLayer.findOne('.event-render-shape');
6513
-
6514
- if (shape) {
6515
- shape.destroy();
6516
- }
6517
- }
6518
-
6519
- renderAllImmediate();
6520
- }
6521
- }, [enableViewportCulling]); // 외부 selectedItems 동기화
6437
+ }, [disableInteraction]); // 외부 selectedItems 동기화
6522
6438
 
6523
6439
  React.useEffect(function () {
6524
6440
  if (!stageRef.current) return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mint-ui/map",
3
- "version": "1.2.0-test.69",
3
+ "version": "1.2.0-test.70",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.es.js",
6
6
  "browser": "./dist/index.umd.js",