@mint-ui/map 1.2.0-test.40 → 1.2.0-test.42

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.
@@ -33,26 +33,42 @@ export interface CanvasOption {
33
33
  /**
34
34
  * 서버 데이터와 캔버스 옵션을 결합한 타입
35
35
  *
36
- * 서버 데이터의 필드가 CanvasOption과 충돌하는 경우, CanvasOption의 필드가 우선됩니다.
37
- *
38
36
  * @template T 서버에서 받은 원본 데이터 타입
39
37
  *
38
+ * @remarks
39
+ * 서버 데이터의 필드가 CanvasOption과 충돌하는 경우 (예: id, position 등),
40
+ * 변환 시 명시적으로 매핑해야 합니다. createCanvasData 헬퍼 함수를 사용하세요.
41
+ *
40
42
  * @example
43
+ * ```typescript
41
44
  * // 서버 데이터에 id가 number 타입인 경우
42
45
  * interface ServerData {
43
46
  * id: number;
44
47
  * name: string;
45
48
  * }
46
49
  *
47
- * // CanvasData<ServerData>는 다음과 같이 됩니다:
48
- * // {
49
- * // id: string; // CanvasOption의 id가 우선
50
- * // name: string; // 서버 데이터의 name
51
- * // position: Position;
52
- * // ...CanvasOption의 다른 필드들
53
- * // }
50
+ * // 잘못된 사용 (타입 에러 발생)
51
+ * const data: CanvasData<ServerData> = {
52
+ * ...serverData,
53
+ * id: String(serverData.id), // 명시적 변환 필요
54
+ * position: new Position(lat, lng)
55
+ * };
56
+ *
57
+ * // ✅ 올바른 사용 (헬퍼 함수 사용)
58
+ * const dataArray = createCanvasDataArray([serverData], (item) => ({
59
+ * id: String(item.id),
60
+ * position: new Position(lat, lng)
61
+ * }));
62
+ * const data = dataArray[0]; // 단일 항목이 필요한 경우
63
+ * ```
64
+ */
65
+ export declare type CanvasData<T = {}> = T & CanvasOption;
66
+ /**
67
+ * 서버 데이터 배열을 CanvasData 배열로 변환하는 헬퍼 함수
68
+ *
69
+ * @see createCanvasDataArray in ./utils.ts
54
70
  */
55
- export declare type CanvasData<T = {}> = Omit<T, keyof CanvasOption> & CanvasOption;
71
+ export { createCanvasDataArray } from './utils';
56
72
  /**
57
73
  * 렌더링 유틸리티 함수들 (좌표 변환)
58
74
  *
@@ -2,6 +2,8 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ var utils = require('./utils.js');
6
+
5
7
  /**
6
8
  * 캔버스 데이터 타입 Enum
7
9
  */
@@ -11,3 +13,5 @@ exports.CanvasDataType = void 0;
11
13
  CanvasDataType["MARKER"] = "MARKER";
12
14
  CanvasDataType["POLYGON"] = "POLYGON";
13
15
  })(exports.CanvasDataType || (exports.CanvasDataType = {}));
16
+
17
+ exports.createCanvasDataArray = utils.createCanvasDataArray;
@@ -1,6 +1,6 @@
1
1
  import { Offset } from "../../../types";
2
2
  import { MintMapController } from "../../MintMapController";
3
- import { CanvasData } from "./types";
3
+ import { CanvasData, CanvasOption } from "./types";
4
4
  /**
5
5
  * 폴리곤 좌표 변환 (위경도 → 화면 좌표)
6
6
  *
@@ -60,3 +60,38 @@ export declare const calculateTextBoxWidth: ({ text, fontConfig, padding, minWid
60
60
  padding: number;
61
61
  minWidth: number;
62
62
  }) => number;
63
+ /**
64
+ * 서버 데이터 배열을 CanvasData 배열로 변환하는 헬퍼 함수
65
+ *
66
+ * 서버 데이터 배열의 각 항목을 CanvasData로 변환합니다.
67
+ * 각 항목마다 다른 CanvasOption을 적용할 수 있습니다.
68
+ *
69
+ * @template T 서버에서 받은 원본 데이터 타입
70
+ * @param serverDataArray 서버에서 받은 원본 데이터 배열
71
+ * @param getCanvasOptions 각 항목에 대해 CanvasOption을 생성하는 함수
72
+ * @returns CanvasData<T>[] 타입의 데이터 배열
73
+ *
74
+ * @example
75
+ * ```typescript
76
+ * interface ServerData {
77
+ * id: number; // CanvasOption의 id와 충돌
78
+ * name: string;
79
+ * lat: number;
80
+ * lng: number;
81
+ * }
82
+ *
83
+ * const serverDataArray: ServerData[] = [
84
+ * { id: 1, name: "Item 1", lat: 37.5, lng: 127.0 },
85
+ * { id: 2, name: "Item 2", lat: 37.6, lng: 127.1 }
86
+ * ];
87
+ *
88
+ * // ✅ 올바른 사용
89
+ * const canvasDataArray = createCanvasDataArray(serverDataArray, (item, index) => ({
90
+ * id: String(item.id), // 각 항목마다 명시적으로 변환
91
+ * position: new Position(item.lat, item.lng)
92
+ * }));
93
+ *
94
+ * // canvasDataArray는 CanvasData<ServerData>[] 타입입니다
95
+ * ```
96
+ */
97
+ export declare function createCanvasDataArray<T extends Record<string, any>>(serverDataArray: T[], getCanvasOptions: (serverData: T, index: number) => CanvasOption): CanvasData<T>[];
@@ -2,6 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ var tslib = require('tslib');
5
6
  require('../../../types/MapDrawables.js');
6
7
  var MapTypes = require('../../../types/MapTypes.js');
7
8
  require('../../../types/MapEventTypes.js');
@@ -211,10 +212,54 @@ var calculateTextBoxWidth = function (_a) {
211
212
  var textWidth = tempCtx.measureText(text).width;
212
213
  return Math.max(minWidth, textWidth + padding);
213
214
  };
215
+ /**
216
+ * 서버 데이터 배열을 CanvasData 배열로 변환하는 헬퍼 함수
217
+ *
218
+ * 서버 데이터 배열의 각 항목을 CanvasData로 변환합니다.
219
+ * 각 항목마다 다른 CanvasOption을 적용할 수 있습니다.
220
+ *
221
+ * @template T 서버에서 받은 원본 데이터 타입
222
+ * @param serverDataArray 서버에서 받은 원본 데이터 배열
223
+ * @param getCanvasOptions 각 항목에 대해 CanvasOption을 생성하는 함수
224
+ * @returns CanvasData<T>[] 타입의 데이터 배열
225
+ *
226
+ * @example
227
+ * ```typescript
228
+ * interface ServerData {
229
+ * id: number; // CanvasOption의 id와 충돌
230
+ * name: string;
231
+ * lat: number;
232
+ * lng: number;
233
+ * }
234
+ *
235
+ * const serverDataArray: ServerData[] = [
236
+ * { id: 1, name: "Item 1", lat: 37.5, lng: 127.0 },
237
+ * { id: 2, name: "Item 2", lat: 37.6, lng: 127.1 }
238
+ * ];
239
+ *
240
+ * // ✅ 올바른 사용
241
+ * const canvasDataArray = createCanvasDataArray(serverDataArray, (item, index) => ({
242
+ * id: String(item.id), // 각 항목마다 명시적으로 변환
243
+ * position: new Position(item.lat, item.lng)
244
+ * }));
245
+ *
246
+ * // canvasDataArray는 CanvasData<ServerData>[] 타입입니다
247
+ * ```
248
+ */
249
+
250
+ function createCanvasDataArray(serverDataArray, getCanvasOptions) {
251
+ return serverDataArray.map(function (serverData, index) {
252
+ var canvasOptions = getCanvasOptions(serverData, index); // 서버 데이터와 CanvasOption을 결합
253
+ // CanvasOption의 필드가 우선되므로 충돌하는 필드는 canvasOptions의 값이 사용됨
254
+
255
+ return tslib.__assign(tslib.__assign({}, serverData), canvasOptions);
256
+ });
257
+ }
214
258
 
215
259
  exports.calculateTextBoxWidth = calculateTextBoxWidth;
216
260
  exports.computeMarkerOffset = computeMarkerOffset;
217
261
  exports.computePolygonOffsets = computePolygonOffsets;
262
+ exports.createCanvasDataArray = createCanvasDataArray;
218
263
  exports.hexToRgba = hexToRgba;
219
264
  exports.isPointInMarkerData = isPointInMarkerData;
220
265
  exports.isPointInPolygon = isPointInPolygon;
package/dist/index.es.js CHANGED
@@ -650,16 +650,6 @@ var css_248z$1 = ".MintMapCore-module_mint-map-root__SMfwn {\n position: relati
650
650
  var styles$1 = {"mint-map-root":"MintMapCore-module_mint-map-root__SMfwn","mint-map-container":"MintMapCore-module_mint-map-container__8MIIr"};
651
651
  styleInject(css_248z$1);
652
652
 
653
- /**
654
- * 캔버스 데이터 타입 Enum
655
- */
656
- var CanvasDataType;
657
-
658
- (function (CanvasDataType) {
659
- CanvasDataType["MARKER"] = "MARKER";
660
- CanvasDataType["POLYGON"] = "POLYGON";
661
- })(CanvasDataType || (CanvasDataType = {}));
662
-
663
653
  var Drawable =
664
654
  /** @class */
665
655
  function () {
@@ -998,6 +988,59 @@ var calculateTextBoxWidth = function (_a) {
998
988
  var textWidth = tempCtx.measureText(text).width;
999
989
  return Math.max(minWidth, textWidth + padding);
1000
990
  };
991
+ /**
992
+ * 서버 데이터 배열을 CanvasData 배열로 변환하는 헬퍼 함수
993
+ *
994
+ * 서버 데이터 배열의 각 항목을 CanvasData로 변환합니다.
995
+ * 각 항목마다 다른 CanvasOption을 적용할 수 있습니다.
996
+ *
997
+ * @template T 서버에서 받은 원본 데이터 타입
998
+ * @param serverDataArray 서버에서 받은 원본 데이터 배열
999
+ * @param getCanvasOptions 각 항목에 대해 CanvasOption을 생성하는 함수
1000
+ * @returns CanvasData<T>[] 타입의 데이터 배열
1001
+ *
1002
+ * @example
1003
+ * ```typescript
1004
+ * interface ServerData {
1005
+ * id: number; // CanvasOption의 id와 충돌
1006
+ * name: string;
1007
+ * lat: number;
1008
+ * lng: number;
1009
+ * }
1010
+ *
1011
+ * const serverDataArray: ServerData[] = [
1012
+ * { id: 1, name: "Item 1", lat: 37.5, lng: 127.0 },
1013
+ * { id: 2, name: "Item 2", lat: 37.6, lng: 127.1 }
1014
+ * ];
1015
+ *
1016
+ * // ✅ 올바른 사용
1017
+ * const canvasDataArray = createCanvasDataArray(serverDataArray, (item, index) => ({
1018
+ * id: String(item.id), // 각 항목마다 명시적으로 변환
1019
+ * position: new Position(item.lat, item.lng)
1020
+ * }));
1021
+ *
1022
+ * // canvasDataArray는 CanvasData<ServerData>[] 타입입니다
1023
+ * ```
1024
+ */
1025
+
1026
+ function createCanvasDataArray(serverDataArray, getCanvasOptions) {
1027
+ return serverDataArray.map(function (serverData, index) {
1028
+ var canvasOptions = getCanvasOptions(serverData, index); // 서버 데이터와 CanvasOption을 결합
1029
+ // CanvasOption의 필드가 우선되므로 충돌하는 필드는 canvasOptions의 값이 사용됨
1030
+
1031
+ return __assign(__assign({}, serverData), canvasOptions);
1032
+ });
1033
+ }
1034
+
1035
+ /**
1036
+ * 캔버스 데이터 타입 Enum
1037
+ */
1038
+ var CanvasDataType;
1039
+
1040
+ (function (CanvasDataType) {
1041
+ CanvasDataType["MARKER"] = "MARKER";
1042
+ CanvasDataType["POLYGON"] = "POLYGON";
1043
+ })(CanvasDataType || (CanvasDataType = {}));
1001
1044
 
1002
1045
  var WoongCanvasContext = createContext(null);
1003
1046
  /**
@@ -9842,4 +9885,4 @@ function MintMap(_a) {
9842
9885
  }), loading));
9843
9886
  }
9844
9887
 
9845
- export { AnimationPlayer, Bounds, CanvasDataType, CanvasMarker, CanvasMarkerClaude, CanvasMarkerHanquf, CircleMarker, DEFAULT_CULLING_MARGIN, DEFAULT_MAX_CACHE_SIZE, Drawable, GeoCalulator, GoogleMintMapController, LRUCache, MapBuildingProjection, MapCanvasMarkerWrapper, MapCanvasWrapper, MapControlWrapper, MapEvent, MapLoadingWithImage, MapMarkerWrapper, MapPolygonWrapper, MapPolylineWrapper, MapUIEvent, Marker, MintMap, MintMapCanvasRenderer, MintMapController, MintMapCore, MintMapProvider, NaverMintMapController, Offset, PointLoading, Polygon, PolygonCalculator, PolygonMarker, Polyline, Position, SPATIAL_GRID_CELL_SIZE, SVGCircle, SVGPolygon, SVGRect, Spacing, SpatialHashGrid, Status, WoongCanvasMarker, WoongCanvasPolygon, WoongCanvasProvider, buildSpatialIndex, calculateTextBoxWidth, computeMarkerOffset, computePolygonOffsets, createMapEventHandlers, getClusterInfo, getMapOfType, hexToRgba, isInViewport, isPointInMarkerData, isPointInPolygon, isPointInPolygonData, log, mapValuesToArray, syncExternalSelectedItems, syncSelectedItems, updateViewport, useMarkerMoving, useMintMapController, useWoongCanvasContext, validateEvent, waiting };
9888
+ export { AnimationPlayer, Bounds, CanvasDataType, CanvasMarker, CanvasMarkerClaude, CanvasMarkerHanquf, CircleMarker, DEFAULT_CULLING_MARGIN, DEFAULT_MAX_CACHE_SIZE, Drawable, GeoCalulator, GoogleMintMapController, LRUCache, MapBuildingProjection, MapCanvasMarkerWrapper, MapCanvasWrapper, MapControlWrapper, MapEvent, MapLoadingWithImage, MapMarkerWrapper, MapPolygonWrapper, MapPolylineWrapper, MapUIEvent, Marker, MintMap, MintMapCanvasRenderer, MintMapController, MintMapCore, MintMapProvider, NaverMintMapController, Offset, PointLoading, Polygon, PolygonCalculator, PolygonMarker, Polyline, Position, SPATIAL_GRID_CELL_SIZE, SVGCircle, SVGPolygon, SVGRect, Spacing, SpatialHashGrid, Status, WoongCanvasMarker, WoongCanvasPolygon, WoongCanvasProvider, buildSpatialIndex, calculateTextBoxWidth, computeMarkerOffset, computePolygonOffsets, createCanvasDataArray, createMapEventHandlers, getClusterInfo, getMapOfType, hexToRgba, isInViewport, isPointInMarkerData, isPointInPolygon, isPointInPolygonData, log, mapValuesToArray, syncExternalSelectedItems, syncSelectedItems, updateViewport, useMarkerMoving, useMintMapController, useWoongCanvasContext, validateEvent, waiting };
package/dist/index.js CHANGED
@@ -72,6 +72,7 @@ Object.defineProperty(exports, 'CanvasDataType', {
72
72
  exports.calculateTextBoxWidth = utils.calculateTextBoxWidth;
73
73
  exports.computeMarkerOffset = utils.computeMarkerOffset;
74
74
  exports.computePolygonOffsets = utils.computePolygonOffsets;
75
+ exports.createCanvasDataArray = utils.createCanvasDataArray;
75
76
  exports.hexToRgba = utils.hexToRgba;
76
77
  exports.isPointInMarkerData = utils.isPointInMarkerData;
77
78
  exports.isPointInPolygon = utils.isPointInPolygon;
package/dist/index.umd.js CHANGED
@@ -654,16 +654,6 @@
654
654
  var styles$1 = {"mint-map-root":"MintMapCore-module_mint-map-root__SMfwn","mint-map-container":"MintMapCore-module_mint-map-container__8MIIr"};
655
655
  styleInject__default["default"](css_248z$1);
656
656
 
657
- /**
658
- * 캔버스 데이터 타입 Enum
659
- */
660
- exports.CanvasDataType = void 0;
661
-
662
- (function (CanvasDataType) {
663
- CanvasDataType["MARKER"] = "MARKER";
664
- CanvasDataType["POLYGON"] = "POLYGON";
665
- })(exports.CanvasDataType || (exports.CanvasDataType = {}));
666
-
667
657
  var Drawable =
668
658
  /** @class */
669
659
  function () {
@@ -1002,6 +992,59 @@
1002
992
  var textWidth = tempCtx.measureText(text).width;
1003
993
  return Math.max(minWidth, textWidth + padding);
1004
994
  };
995
+ /**
996
+ * 서버 데이터 배열을 CanvasData 배열로 변환하는 헬퍼 함수
997
+ *
998
+ * 서버 데이터 배열의 각 항목을 CanvasData로 변환합니다.
999
+ * 각 항목마다 다른 CanvasOption을 적용할 수 있습니다.
1000
+ *
1001
+ * @template T 서버에서 받은 원본 데이터 타입
1002
+ * @param serverDataArray 서버에서 받은 원본 데이터 배열
1003
+ * @param getCanvasOptions 각 항목에 대해 CanvasOption을 생성하는 함수
1004
+ * @returns CanvasData<T>[] 타입의 데이터 배열
1005
+ *
1006
+ * @example
1007
+ * ```typescript
1008
+ * interface ServerData {
1009
+ * id: number; // CanvasOption의 id와 충돌
1010
+ * name: string;
1011
+ * lat: number;
1012
+ * lng: number;
1013
+ * }
1014
+ *
1015
+ * const serverDataArray: ServerData[] = [
1016
+ * { id: 1, name: "Item 1", lat: 37.5, lng: 127.0 },
1017
+ * { id: 2, name: "Item 2", lat: 37.6, lng: 127.1 }
1018
+ * ];
1019
+ *
1020
+ * // ✅ 올바른 사용
1021
+ * const canvasDataArray = createCanvasDataArray(serverDataArray, (item, index) => ({
1022
+ * id: String(item.id), // 각 항목마다 명시적으로 변환
1023
+ * position: new Position(item.lat, item.lng)
1024
+ * }));
1025
+ *
1026
+ * // canvasDataArray는 CanvasData<ServerData>[] 타입입니다
1027
+ * ```
1028
+ */
1029
+
1030
+ function createCanvasDataArray(serverDataArray, getCanvasOptions) {
1031
+ return serverDataArray.map(function (serverData, index) {
1032
+ var canvasOptions = getCanvasOptions(serverData, index); // 서버 데이터와 CanvasOption을 결합
1033
+ // CanvasOption의 필드가 우선되므로 충돌하는 필드는 canvasOptions의 값이 사용됨
1034
+
1035
+ return tslib.__assign(tslib.__assign({}, serverData), canvasOptions);
1036
+ });
1037
+ }
1038
+
1039
+ /**
1040
+ * 캔버스 데이터 타입 Enum
1041
+ */
1042
+ exports.CanvasDataType = void 0;
1043
+
1044
+ (function (CanvasDataType) {
1045
+ CanvasDataType["MARKER"] = "MARKER";
1046
+ CanvasDataType["POLYGON"] = "POLYGON";
1047
+ })(exports.CanvasDataType || (exports.CanvasDataType = {}));
1005
1048
 
1006
1049
  var WoongCanvasContext = React.createContext(null);
1007
1050
  /**
@@ -9896,6 +9939,7 @@
9896
9939
  exports.calculateTextBoxWidth = calculateTextBoxWidth;
9897
9940
  exports.computeMarkerOffset = computeMarkerOffset;
9898
9941
  exports.computePolygonOffsets = computePolygonOffsets;
9942
+ exports.createCanvasDataArray = createCanvasDataArray;
9899
9943
  exports.createMapEventHandlers = createMapEventHandlers;
9900
9944
  exports.getClusterInfo = getClusterInfo;
9901
9945
  exports.getMapOfType = getMapOfType;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mint-ui/map",
3
- "version": "1.2.0-test.40",
3
+ "version": "1.2.0-test.42",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.es.js",
6
6
  "browser": "./dist/index.umd.js",