{"ast":null,"code":"var _jsxFileName = \"D:\\\\LDT\\\\000 Project\\\\LDT\\\\Client\\\\src\\\\components\\\\KakaoMap.js\",\n  _s = $RefreshSig$();\nimport React, { useEffect, useRef } from \"react\";\n\n// 마커 데이터 예시 [{lat, lng, title, desc}]\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nexport default function KakaoMap({\n  latitude = 37.5665,\n  longitude = 126.9780,\n  markers = [],\n  style = {\n    width: \"100%\",\n    height: \"600px\"\n  }\n}) {\n  _s();\n  const mapRef = useRef(null);\n  useEffect(() => {\n    var _markers$0$lat, _markers$, _markers$0$lng, _markers$2;\n    if (!window.kakao || !window.kakao.maps || !mapRef.current) return;\n    const kakao = window.kakao;\n    // 지도 생성\n    const map = new kakao.maps.Map(mapRef.current, {\n      center: new kakao.maps.LatLng((_markers$0$lat = (_markers$ = markers[0]) === null || _markers$ === void 0 ? void 0 : _markers$.lat) !== null && _markers$0$lat !== void 0 ? _markers$0$lat : latitude, (_markers$0$lng = (_markers$2 = markers[0]) === null || _markers$2 === void 0 ? void 0 : _markers$2.lng) !== null && _markers$0$lng !== void 0 ? _markers$0$lng : longitude),\n      level: 6\n    });\n\n    // ---- 마커 객체 만들기 ----\n    const markerObjs = markers.map(m => {\n      // 마커 이미지가 지정되어 있으면 사용, 없으면 기본 이미지\n      const image = m.image ? new kakao.maps.MarkerImage(m.image, new kakao.maps.Size(36, 36), {\n        offset: new kakao.maps.Point(18, 36)\n      }) : null;\n      return new kakao.maps.Marker({\n        position: new kakao.maps.LatLng(m.lat, m.lng),\n        clickable: true,\n        image // ★ 각 마커별 이미지 개별 적용\n      });\n    });\n\n    // ---- 클러스터러 객체 만들기 ----\n    const clusterer = new kakao.maps.MarkerClusterer({\n      map: map,\n      markers: markerObjs,\n      gridSize: 60,\n      averageCenter: true,\n      minLevel: 3\n      // disableClickZoom: false, // 필요 시 추가\n      // styles: [{ ... }],       // 필요 시 커스텀\n    });\n\n    // ---- InfoWindow (마우스 오버/아웃) ----\n    const infoWindows = markers.map((m, i) => new kakao.maps.InfoWindow({\n      content: `<div style=\"padding:7px;font-size:14px;\">\n          <b>${m.title || \"\"}</b><br/>${m.desc || \"\"}\n        </div>`\n    }));\n    markerObjs.forEach((markerObj, idx) => {\n      if (infoWindows[idx]) {\n        // 마우스 오버: 팝업 열기\n        kakao.maps.event.addListener(markerObj, \"mouseover\", () => {\n          infoWindows.forEach(iw => iw.close());\n          infoWindows[idx].open(map, markerObj);\n        });\n        // 마우스 아웃: 팝업 닫기\n        kakao.maps.event.addListener(markerObj, \"mouseout\", () => {\n          infoWindows[idx].close();\n        });\n      }\n    });\n\n    // ---- 지도 클릭시 좌표 팝업 ----\n    kakao.maps.event.addListener(map, \"click\", function (e) {\n      const latlng = e.latLng;\n      const tempWindow = new kakao.maps.InfoWindow({\n        content: `<div style=\"padding:7px;font-size:11px;width:180px;height:28px;white-space:nowrap;\">\n        좌표: ${latlng.getLat().toFixed(6)}, ${latlng.getLng().toFixed(6)}</div>`,\n        position: latlng\n      });\n      tempWindow.open(map);\n      setTimeout(() => tempWindow.close(), 1000);\n    });\n\n    // ---- Clean up ----\n    return () => {\n      clusterer && clusterer.clear();\n      markerObjs.forEach(m => m.setMap(null));\n      infoWindows.forEach(iw => iw.close());\n    };\n  }, [markers, latitude, longitude]);\n  return /*#__PURE__*/_jsxDEV(\"div\", {\n    style: {\n      position: \"relative\",\n      ...style\n    },\n    children: /*#__PURE__*/_jsxDEV(\"div\", {\n      ref: mapRef,\n      style: {\n        width: \"100%\",\n        height: \"100%\"\n      }\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 99,\n      columnNumber: 7\n    }, this)\n  }, void 0, false, {\n    fileName: _jsxFileName,\n    lineNumber: 98,\n    columnNumber: 5\n  }, this);\n}\n_s(KakaoMap, \"9mn7MMe4fPaZ50ApsOpRWF2HbFg=\");\n_c = KakaoMap;\nvar _c;\n$RefreshReg$(_c, \"KakaoMap\");","map":{"version":3,"names":["React","useEffect","useRef","jsxDEV","_jsxDEV","KakaoMap","latitude","longitude","markers","style","width","height","_s","mapRef","_markers$0$lat","_markers$","_markers$0$lng","_markers$2","window","kakao","maps","current","map","Map","center","LatLng","lat","lng","level","markerObjs","m","image","MarkerImage","Size","offset","Point","Marker","position","clickable","clusterer","MarkerClusterer","gridSize","averageCenter","minLevel","infoWindows","i","InfoWindow","content","title","desc","forEach","markerObj","idx","event","addListener","iw","close","open","e","latlng","latLng","tempWindow","getLat","toFixed","getLng","setTimeout","clear","setMap","children","ref","fileName","_jsxFileName","lineNumber","columnNumber","_c","$RefreshReg$"],"sources":["D:/LDT/000 Project/LDT/Client/src/components/KakaoMap.js"],"sourcesContent":["import React, { useEffect, useRef } from \"react\";\r\n\r\n// 마커 데이터 예시 [{lat, lng, title, desc}]\r\nexport default function KakaoMap({\r\n  latitude = 37.5665,\r\n  longitude = 126.9780,\r\n  markers = [],\r\n  style = { width: \"100%\", height: \"600px\" }\r\n}) {\r\n  const mapRef = useRef(null);\r\n\r\n  useEffect(() => {\r\n    if (!window.kakao || !window.kakao.maps || !mapRef.current) return;\r\n\r\n    const kakao = window.kakao;\r\n    // 지도 생성\r\n    const map = new kakao.maps.Map(mapRef.current, {\r\n      center: new kakao.maps.LatLng(\r\n        markers[0]?.lat ?? latitude,\r\n        markers[0]?.lng ?? longitude\r\n      ),\r\n      level: 6\r\n    });\r\n\r\n    // ---- 마커 객체 만들기 ----\r\n    const markerObjs = markers.map((m) => {\r\n      // 마커 이미지가 지정되어 있으면 사용, 없으면 기본 이미지\r\n      const image = m.image\r\n        ? new kakao.maps.MarkerImage(\r\n          m.image,\r\n          new kakao.maps.Size(36, 36),\r\n          { offset: new kakao.maps.Point(18, 36) }\r\n        )\r\n        : null;\r\n\r\n      return new kakao.maps.Marker({\r\n        position: new kakao.maps.LatLng(m.lat, m.lng),\r\n        clickable: true,\r\n        image, // ★ 각 마커별 이미지 개별 적용\r\n      });\r\n    });\r\n\r\n    // ---- 클러스터러 객체 만들기 ----\r\n    const clusterer = new kakao.maps.MarkerClusterer({\r\n      map: map,\r\n      markers: markerObjs,\r\n      gridSize: 60,\r\n      averageCenter: true,\r\n      minLevel: 3,\r\n      // disableClickZoom: false, // 필요 시 추가\r\n      // styles: [{ ... }],       // 필요 시 커스텀\r\n    });\r\n\r\n    // ---- InfoWindow (마우스 오버/아웃) ----\r\n    const infoWindows = markers.map((m, i) =>\r\n      new kakao.maps.InfoWindow({\r\n        content: `<div style=\"padding:7px;font-size:14px;\">\r\n          <b>${m.title || \"\"}</b><br/>${m.desc || \"\"}\r\n        </div>`\r\n      })\r\n    );\r\n\r\n    markerObjs.forEach((markerObj, idx) => {\r\n      if (infoWindows[idx]) {\r\n        // 마우스 오버: 팝업 열기\r\n        kakao.maps.event.addListener(markerObj, \"mouseover\", () => {\r\n          infoWindows.forEach(iw => iw.close());\r\n          infoWindows[idx].open(map, markerObj);\r\n        });\r\n        // 마우스 아웃: 팝업 닫기\r\n        kakao.maps.event.addListener(markerObj, \"mouseout\", () => {\r\n          infoWindows[idx].close();\r\n        });\r\n      }\r\n    });\r\n\r\n    // ---- 지도 클릭시 좌표 팝업 ----\r\n    kakao.maps.event.addListener(map, \"click\", function (e) {\r\n      const latlng = e.latLng;\r\n      const tempWindow = new kakao.maps.InfoWindow({\r\n        content: `<div style=\"padding:7px;font-size:11px;width:180px;height:28px;white-space:nowrap;\">\r\n        좌표: ${latlng.getLat().toFixed(6)}, ${latlng.getLng().toFixed(6)}</div>`,\r\n        position: latlng\r\n      });\r\n      tempWindow.open(map);\r\n      setTimeout(() => tempWindow.close(), 1000);\r\n    });\r\n\r\n    // ---- Clean up ----\r\n    return () => {\r\n      clusterer && clusterer.clear();\r\n      markerObjs.forEach(m => m.setMap(null));\r\n      infoWindows.forEach(iw => iw.close());\r\n    };\r\n  }, [markers, latitude, longitude]);\r\n\r\n  return (\r\n    <div style={{ position: \"relative\", ...style }}>\r\n      <div ref={mapRef} style={{ width: \"100%\", height: \"100%\" }} />\r\n    </div>\r\n  );\r\n}"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}