@mint-ui/map 1.2.0-test.49 → 1.2.0-test.50
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/CLAUDE.md +0 -1
- package/dist/components/mint-map/core/MintMapCore.js +1 -1
- package/dist/components/mint-map/core/advanced/CanvasMarkerLayer/CanvasMarkerLayer.d.ts +1 -1
- package/dist/components/mint-map/core/advanced/CanvasMarkerLayer/CanvasMarkerLayer.js +2 -2
- package/dist/components/mint-map/core/advanced/CanvasPolygonLayer/CanvasPolygonLayer.d.ts +1 -1
- package/dist/components/mint-map/core/advanced/CanvasPolygonLayer/CanvasPolygonLayer.js +2 -2
- package/dist/components/mint-map/core/advanced/CanvasPolygonLayer/renderer.js +6 -2
- package/dist/components/mint-map/core/advanced/canvas/CanvasMarker.d.ts +7 -0
- package/dist/components/mint-map/core/advanced/canvas/CanvasMarkerClaude.js +7 -7
- package/dist/components/mint-map/core/advanced/canvas/index.d.ts +0 -1
- package/dist/components/mint-map/core/advanced/shared/context.d.ts +8 -8
- package/dist/components/mint-map/core/advanced/shared/context.js +11 -11
- package/dist/components/mint-map/core/advanced/shared/helpers.d.ts +1 -1
- package/dist/components/mint-map/core/advanced/shared/helpers.js +1 -1
- package/dist/index.es.js +27 -536
- package/dist/index.js +2 -4
- package/dist/index.umd.js +28 -538
- package/package.json +1 -1
- package/dist/components/mint-map/core/advanced/canvas/CanvasMarkerHanquf.d.ts +0 -22
- package/dist/components/mint-map/core/advanced/canvas/CanvasMarkerHanquf.js +0 -413
- package/dist/components/mint-map/core/util/geohash.js +0 -125
package/CLAUDE.md
CHANGED
|
@@ -90,7 +90,6 @@ The project uses Storybook for component development and documentation:
|
|
|
90
90
|
|
|
91
91
|
Canvas markers are a key feature for high-performance rendering:
|
|
92
92
|
- `CanvasMarker.tsx` - Main canvas marker component
|
|
93
|
-
- `CanvasMarkerHanquf.tsx` - Specialized canvas marker variant
|
|
94
93
|
- Renderer function pattern for custom drawing logic
|
|
95
94
|
- Supports geohash-based clustering
|
|
96
95
|
|
|
@@ -100,7 +100,7 @@ function MintMapCore(_a) {
|
|
|
100
100
|
}, [center]);
|
|
101
101
|
return React__default["default"].createElement("div", {
|
|
102
102
|
className: cn('mint-map-root')
|
|
103
|
-
}, mapInitialized && React__default["default"].createElement(context.
|
|
103
|
+
}, mapInitialized && React__default["default"].createElement(context.CanvasProvider, null, children), React__default["default"].createElement("div", {
|
|
104
104
|
className: cn('mint-map-container'),
|
|
105
105
|
style: {
|
|
106
106
|
visibility: visible ? 'inherit' : 'hidden'
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { MarkerOptions } from "../../../types";
|
|
3
3
|
import { CanvasData, CustomRenderBase, CustomRenderEvent } from "../shared";
|
|
4
|
-
export {
|
|
4
|
+
export { CanvasProvider, LRUCache, SpatialHashGrid, CanvasDataType } from "../shared";
|
|
5
5
|
export type { CanvasOption, CanvasData, CustomRenderBase, CustomRenderEvent, RenderUtils, RenderBaseParams, RenderEventParams } from "../shared";
|
|
6
6
|
/**
|
|
7
7
|
* CanvasMarkerLayer Props
|
|
@@ -47,7 +47,7 @@ var CanvasMarkerLayer = function (props) {
|
|
|
47
47
|
options = tslib.__rest(props, ["data", "onClick", "onMouseOver", "onMouseOut", "enableMultiSelect", "topOnHover", "enableViewportCulling", "cullingMargin", "maxCacheSize", "selectedItems", "selectedItem", "disableInteraction", "renderBase", "renderEvent"]);
|
|
48
48
|
|
|
49
49
|
var controller = MintMapProvider.useMintMapController();
|
|
50
|
-
var context$1 = context.
|
|
50
|
+
var context$1 = context.useCanvasContext();
|
|
51
51
|
var currentZIndex = options.zIndex !== undefined ? options.zIndex : 0; // DOM Refs
|
|
52
52
|
|
|
53
53
|
var divRef = React.useRef(document.createElement('div'));
|
|
@@ -628,7 +628,7 @@ Object.defineProperty(exports, 'CanvasDataType', {
|
|
|
628
628
|
enumerable: true,
|
|
629
629
|
get: function () { return types.CanvasDataType; }
|
|
630
630
|
});
|
|
631
|
-
exports.
|
|
631
|
+
exports.CanvasProvider = context.CanvasProvider;
|
|
632
632
|
exports.LRUCache = performance.LRUCache;
|
|
633
633
|
exports.SpatialHashGrid = performance.SpatialHashGrid;
|
|
634
634
|
exports["default"] = CanvasMarkerLayer;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { MarkerOptions } from "../../../types";
|
|
3
3
|
import { CanvasData } from "../shared";
|
|
4
|
-
export {
|
|
4
|
+
export { CanvasProvider, LRUCache, SpatialHashGrid } from "../shared";
|
|
5
5
|
export type { CanvasOption, CanvasData, RenderUtils } from "../shared";
|
|
6
6
|
/**
|
|
7
7
|
* 폴리곤 스타일 정의
|
|
@@ -50,7 +50,7 @@ var CanvasPolygonLayer = function (props) {
|
|
|
50
50
|
// --------------------------------------------------------------------------
|
|
51
51
|
|
|
52
52
|
var controller = MintMapProvider.useMintMapController();
|
|
53
|
-
var context$1 = context.
|
|
53
|
+
var context$1 = context.useCanvasContext();
|
|
54
54
|
var currentZIndex = options.zIndex !== undefined ? options.zIndex : 0; // DOM Refs
|
|
55
55
|
|
|
56
56
|
var divRef = React.useRef(document.createElement('div'));
|
|
@@ -587,7 +587,7 @@ var CanvasPolygonLayer = function (props) {
|
|
|
587
587
|
}), divElement);
|
|
588
588
|
};
|
|
589
589
|
|
|
590
|
-
exports.
|
|
590
|
+
exports.CanvasProvider = context.CanvasProvider;
|
|
591
591
|
exports.LRUCache = performance.LRUCache;
|
|
592
592
|
exports.SpatialHashGrid = performance.SpatialHashGrid;
|
|
593
593
|
exports["default"] = CanvasPolygonLayer;
|
|
@@ -453,10 +453,14 @@ var renderPolygonEventWithFunction = function (renderStyle) {
|
|
|
453
453
|
// hover된 항목이 선택되어 있는지 확인
|
|
454
454
|
|
|
455
455
|
var isSelected = selectedIdsSet.has(hoveredItem.id);
|
|
456
|
+
var isActive = isSelected && hoveredItem.id === selectedItemId; // 개별 props 방식과 동일한 로직: 선택된 항목이 hover되면 active 스타일을 사용
|
|
457
|
+
// 따라서 선택된 항목이 hover될 때는 isHovered를 false로 설정하여
|
|
458
|
+
// renderStyle 함수에서 isActive를 우선적으로 체크할 수 있도록 함
|
|
459
|
+
|
|
456
460
|
var context = {
|
|
457
461
|
isSelected: isSelected,
|
|
458
|
-
isHovered:
|
|
459
|
-
isActive:
|
|
462
|
+
isHovered: !isSelected,
|
|
463
|
+
isActive: isActive
|
|
460
464
|
};
|
|
461
465
|
var style = renderStyle(hoveredItem, context);
|
|
462
466
|
drawPolygon({
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { MarkerOptions, Offset, Position } from "../../../types";
|
|
3
|
+
/**
|
|
4
|
+
* 2026-01-06 장한별
|
|
5
|
+
* 고주영팀장님이 만든 캔버스 마커
|
|
6
|
+
* 클릭, hover 등의 이벤트가 구현되어있지 않는 버전
|
|
7
|
+
* RA 지도 제품에서 CanvasMarker 컴포넌트를 사용하고 있음
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
3
10
|
export interface CanvasMarkerRendererParams<T> {
|
|
4
11
|
context: CanvasRenderingContext2D;
|
|
5
12
|
offset: Offset[];
|
|
@@ -107,12 +107,12 @@ var CanvasMarkerClaude = React__default["default"].memo(function CanvasMarkerCla
|
|
|
107
107
|
var hoveredPolygonRef = React.useRef(null);
|
|
108
108
|
var clickedPolygonRef = React.useRef(null);
|
|
109
109
|
var hoveredMarkerRef = React.useRef(null);
|
|
110
|
-
var clickedMarkerRef = React.useRef(null); // 🚀
|
|
110
|
+
var clickedMarkerRef = React.useRef(null); // 🚀 CanvasMarker 방식: 단순한 data ref (geohash 제거)
|
|
111
111
|
|
|
112
112
|
var polygonsRef = React.useRef([]);
|
|
113
113
|
var markersRef = React.useRef([]); // 마커 경계 정보 저장 (hit-test용)
|
|
114
114
|
|
|
115
|
-
var markerBoundsRef = React.useRef(new Map()); // 🚀 드래그 추적용 (
|
|
115
|
+
var markerBoundsRef = React.useRef(new Map()); // 🚀 드래그 추적용 (CanvasMarker 방식)
|
|
116
116
|
|
|
117
117
|
var draggingRef = React.useRef(false);
|
|
118
118
|
var prevCenterOffsetRef = React.useRef(null);
|
|
@@ -172,7 +172,7 @@ var CanvasMarkerClaude = React__default["default"].memo(function CanvasMarkerCla
|
|
|
172
172
|
if (!baseContextRef.current || !polygonsRef.current || polygonsRef.current.length === 0) return;
|
|
173
173
|
canvasUtil.clearRect(baseCanvasRef.current, baseContextRef.current);
|
|
174
174
|
var cacheMissCount = 0; // 캐시 미스 카운트
|
|
175
|
-
// 🚀
|
|
175
|
+
// 🚀 CanvasMarker 방식: 전체 데이터 순회 (필터링 제거)
|
|
176
176
|
|
|
177
177
|
polygonsRef.current.forEach(function (polygon) {
|
|
178
178
|
if (polygon.visible === false) return; // 🚀 캐시 확인 (ID 기반으로 변경)
|
|
@@ -243,7 +243,7 @@ var CanvasMarkerClaude = React__default["default"].memo(function CanvasMarkerCla
|
|
|
243
243
|
if (!markersRef.current || markersRef.current.length === 0) return;
|
|
244
244
|
canvasUtil.clearRect(baseMarkerCanvasRef.current, baseMarkerContextRef.current); // 마커 경계 정보 초기화
|
|
245
245
|
|
|
246
|
-
markerBoundsRef.current.clear(); // 🚀
|
|
246
|
+
markerBoundsRef.current.clear(); // 🚀 CanvasMarker 방식: 전체 데이터 순회 (필터링 제거)
|
|
247
247
|
|
|
248
248
|
markersRef.current.forEach(function (marker) {
|
|
249
249
|
var _a, _b;
|
|
@@ -566,7 +566,7 @@ var CanvasMarkerClaude = React__default["default"].memo(function CanvasMarkerCla
|
|
|
566
566
|
}
|
|
567
567
|
|
|
568
568
|
return null;
|
|
569
|
-
}; // IDLE 이벤트 핸들러 (
|
|
569
|
+
}; // IDLE 이벤트 핸들러 (CanvasMarker 최적화 적용)
|
|
570
570
|
|
|
571
571
|
|
|
572
572
|
var handleIdle = function () {
|
|
@@ -632,7 +632,7 @@ var CanvasMarkerClaude = React__default["default"].memo(function CanvasMarkerCla
|
|
|
632
632
|
x: event.clientX - rect.left,
|
|
633
633
|
y: event.clientY - rect.top
|
|
634
634
|
};
|
|
635
|
-
}; // 🚀 지도 클릭 이벤트 핸들러 (
|
|
635
|
+
}; // 🚀 지도 클릭 이벤트 핸들러 (CanvasMarker 방식 - controller.addEventListener)
|
|
636
636
|
|
|
637
637
|
|
|
638
638
|
var handleMapClick = function (event) {
|
|
@@ -724,7 +724,7 @@ var CanvasMarkerClaude = React__default["default"].memo(function CanvasMarkerCla
|
|
|
724
724
|
var rafIdRef = React.useRef(); // 마우스 이벤트 핸들러 (requestAnimationFrame으로 최적화)
|
|
725
725
|
|
|
726
726
|
var handleMouseMove = function (e) {
|
|
727
|
-
// 🚀 드래그 중이면 호버 처리 스킵 (
|
|
727
|
+
// 🚀 드래그 중이면 호버 처리 스킵 (CanvasMarker 방식)
|
|
728
728
|
if (draggingRef.current) return; // 이미 RAF가 대기 중이면 스킵
|
|
729
729
|
|
|
730
730
|
if (rafIdRef.current) return;
|
|
@@ -2,7 +2,7 @@ import React from "react";
|
|
|
2
2
|
import { Offset } from "../../../types";
|
|
3
3
|
import { CanvasData } from "./types";
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Canvas 컴포넌트 인스턴스 인터페이스
|
|
6
6
|
*
|
|
7
7
|
* @template T 마커/폴리곤 데이터의 추가 속성 타입
|
|
8
8
|
*/
|
|
@@ -18,22 +18,22 @@ export interface ComponentInstance<T> {
|
|
|
18
18
|
getSelectedIds: () => Set<string>;
|
|
19
19
|
isInteractionDisabled: () => boolean;
|
|
20
20
|
}
|
|
21
|
-
interface
|
|
21
|
+
interface CanvasContextValue {
|
|
22
22
|
registerComponent: <T>(instance: ComponentInstance<T>) => void;
|
|
23
23
|
unregisterComponent: <T>(instance: ComponentInstance<T>) => void;
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* CanvasProvider 컴포넌트
|
|
27
27
|
*
|
|
28
|
-
* 다중
|
|
28
|
+
* 다중 Canvas 인스턴스를 관리하고 zIndex 기반 이벤트 우선순위를 처리합니다.
|
|
29
29
|
*/
|
|
30
|
-
export declare const
|
|
30
|
+
export declare const CanvasProvider: React.FC<{
|
|
31
31
|
children: React.ReactNode;
|
|
32
32
|
}>;
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
34
|
+
* Canvas Context Hook
|
|
35
35
|
*
|
|
36
|
-
* @returns
|
|
36
|
+
* @returns CanvasContextValue 또는 null (Provider 없으면)
|
|
37
37
|
*/
|
|
38
|
-
export declare const
|
|
38
|
+
export declare const useCanvasContext: () => CanvasContextValue | null;
|
|
39
39
|
export {};
|
|
@@ -9,14 +9,14 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
9
9
|
|
|
10
10
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var CanvasContext = React.createContext(null);
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* CanvasProvider 컴포넌트
|
|
15
15
|
*
|
|
16
|
-
* 다중
|
|
16
|
+
* 다중 Canvas 인스턴스를 관리하고 zIndex 기반 이벤트 우선순위를 처리합니다.
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
-
var
|
|
19
|
+
var CanvasProvider = function (_a) {
|
|
20
20
|
var children = _a.children;
|
|
21
21
|
var controller = MintMapProvider.useMintMapController();
|
|
22
22
|
var componentsRef = React.useRef([]);
|
|
@@ -129,19 +129,19 @@ var WoongCanvasProvider = function (_a) {
|
|
|
129
129
|
unregisterComponent: unregisterComponent
|
|
130
130
|
};
|
|
131
131
|
}, [registerComponent, unregisterComponent]);
|
|
132
|
-
return React__default["default"].createElement(
|
|
132
|
+
return React__default["default"].createElement(CanvasContext.Provider, {
|
|
133
133
|
value: contextValue
|
|
134
134
|
}, children);
|
|
135
135
|
};
|
|
136
136
|
/**
|
|
137
|
-
*
|
|
137
|
+
* Canvas Context Hook
|
|
138
138
|
*
|
|
139
|
-
* @returns
|
|
139
|
+
* @returns CanvasContextValue 또는 null (Provider 없으면)
|
|
140
140
|
*/
|
|
141
141
|
|
|
142
|
-
var
|
|
143
|
-
return React.useContext(
|
|
142
|
+
var useCanvasContext = function () {
|
|
143
|
+
return React.useContext(CanvasContext);
|
|
144
144
|
};
|
|
145
145
|
|
|
146
|
-
exports.
|
|
147
|
-
exports.
|
|
146
|
+
exports.CanvasProvider = CanvasProvider;
|
|
147
|
+
exports.useCanvasContext = useCanvasContext;
|
|
@@ -5,7 +5,7 @@ import type { Offset } from "../../../types";
|
|
|
5
5
|
* 이벤트 유효성 검증 및 좌표 변환
|
|
6
6
|
*
|
|
7
7
|
* @param event 이벤트 파라미터
|
|
8
|
-
* @param context CanvasContext 인스턴스
|
|
8
|
+
* @param context CanvasContext 인스턴스
|
|
9
9
|
* @param controller MintMapController 인스턴스
|
|
10
10
|
* @returns 유효한 화면 좌표 또는 null
|
|
11
11
|
*/
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
6
6
|
* 이벤트 유효성 검증 및 좌표 변환
|
|
7
7
|
*
|
|
8
8
|
* @param event 이벤트 파라미터
|
|
9
|
-
* @param context CanvasContext 인스턴스
|
|
9
|
+
* @param context CanvasContext 인스턴스
|
|
10
10
|
* @param controller MintMapController 인스턴스
|
|
11
11
|
* @returns 유효한 화면 좌표 또는 null
|
|
12
12
|
*/
|