{"ast":null,"code":"var _jsxFileName = \"D:\\\\LDT\\\\000 Project\\\\LDT\\\\Client\\\\src\\\\components\\\\NaverMap.js\",\n  _s = $RefreshSig$();\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nexport default function NaverMap({\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  const [loading, setLoading] = useState(true);\n  useEffect(() => {\n    var _markers$0$lat, _markers$, _markers$0$lng, _markers$2;\n    // 필수 모듈 체크\n    if (!window.naver || !window.naver.maps || !window.MarkerClustering || !mapRef.current) return;\n\n    // 지도 생성\n    const map = new window.naver.maps.Map(mapRef.current, {\n      center: new window.naver.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      zoom: 13\n    });\n    setLoading(false);\n\n    // 마커 객체, InfoWindow 객체\n    const markerObjs = [];\n    const infoWindows = [];\n    markers.forEach(marker => {\n      // 타입별 아이콘 URL\n      const iconUrl = marker.icon;\n      const iconObj = iconUrl ? {\n        url: iconUrl,\n        size: new window.naver.maps.Size(32, 32),\n        scaledSize: new window.naver.maps.Size(32, 32)\n      } : undefined;\n      const markerObj = new window.naver.maps.Marker({\n        position: new window.naver.maps.LatLng(marker.lat, marker.lng),\n        icon: iconObj,\n        title: marker.title || \"\"\n      });\n      markerObjs.push(markerObj);\n\n      // InfoWindow\n      if (marker.title || marker.desc) {\n        const infoWindow = new window.naver.maps.InfoWindow({\n          content: `<div style=\"padding:7px;font-size:14px;\">\n            <b>${marker.title || \"\"}</b><br/>${marker.desc || \"\"}</div>`\n        });\n        infoWindows.push(infoWindow);\n        window.naver.maps.Event.addListener(markerObj, \"click\", () => {\n          infoWindows.forEach(iw => iw.close());\n          infoWindow.open(map, markerObj);\n        });\n      }\n    });\n    const clusterer = new window.MarkerClustering({\n      minClusterSize: 2,\n      maxZoom: 17,\n      map,\n      markers: markerObjs,\n      disableClickZoom: false,\n      gridSize: 80,\n      icons: [{\n        content: '<div class=\"cluster-badge\"></div>',\n        size: new window.naver.maps.Size(36, 36),\n        anchor: new window.naver.maps.Point(18, 18)\n      }],\n      stylingFunction: (clusterMarker, count) => {\n        const el = clusterMarker.getElement();\n        if (el) {\n          // 오버레이 디자인 및 숫자만 바꾼다 (DOM은 교체하지 않음)\n          el.style.background = '#3887be';\n          el.style.color = '#fff';\n          el.style.borderRadius = '50%';\n          el.style.width = '36px';\n          el.style.height = '36px';\n          el.style.display = 'flex';\n          el.style.alignItems = 'center';\n          el.style.justifyContent = 'center';\n          el.style.fontSize = '16px';\n          el.style.boxShadow = '0 1px 4px rgba(0,0,0,.2)';\n          el.textContent = count;\n        }\n      }\n    });\n    window.naver.maps.Event.addListener(map, \"click\", e => {\n      const tempWindow = new window.naver.maps.InfoWindow({\n        content: `<div style=\"padding:7px;font-size:13px;\">좌표: ${e.coord.lat().toFixed(6)}, ${e.coord.lng().toFixed(6)}</div>`\n      });\n      tempWindow.open(map, e.coord);\n      setTimeout(() => tempWindow.close(), 2000);\n    });\n\n    // cleanup\n    return () => {\n      markerObjs.forEach(marker => marker.setMap(null));\n      infoWindows.forEach(iw => iw.close());\n      if (clusterer) clusterer.setMap(null);\n    };\n  }, [markers, latitude, longitude]);\n  return /*#__PURE__*/_jsxDEV(\"div\", {\n    style: {\n      position: \"relative\",\n      ...style\n    },\n    children: [loading && /*#__PURE__*/_jsxDEV(\"div\", {\n      children: /*#__PURE__*/_jsxDEV(\"h3\", {\n        children: \"Map loading...\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 121,\n        columnNumber: 11\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 120,\n      columnNumber: 9\n    }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n      ref: mapRef,\n      style: {\n        width: \"100%\",\n        height: \"100%\"\n      }\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 124,\n      columnNumber: 7\n    }, this)]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 118,\n    columnNumber: 5\n  }, this);\n}\n_s(NaverMap, \"TZFGDAfS7ZPPjP6zz2xL/p/oo5Q=\");\n_c = NaverMap;\nvar _c;\n$RefreshReg$(_c, \"NaverMap\");","map":{"version":3,"names":["React","useEffect","useRef","useState","jsxDEV","_jsxDEV","NaverMap","latitude","longitude","markers","style","width","height","_s","mapRef","loading","setLoading","_markers$0$lat","_markers$","_markers$0$lng","_markers$2","window","naver","maps","MarkerClustering","current","map","Map","center","LatLng","lat","lng","zoom","markerObjs","infoWindows","forEach","marker","iconUrl","icon","iconObj","url","size","Size","scaledSize","undefined","markerObj","Marker","position","title","push","desc","infoWindow","InfoWindow","content","Event","addListener","iw","close","open","clusterer","minClusterSize","maxZoom","disableClickZoom","gridSize","icons","anchor","Point","stylingFunction","clusterMarker","count","el","getElement","background","color","borderRadius","display","alignItems","justifyContent","fontSize","boxShadow","textContent","e","tempWindow","coord","toFixed","setTimeout","setMap","children","fileName","_jsxFileName","lineNumber","columnNumber","ref","_c","$RefreshReg$"],"sources":["D:/LDT/000 Project/LDT/Client/src/components/NaverMap.js"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\r\n\r\nexport default function NaverMap({\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  const [loading, setLoading] = useState(true);\r\n\r\n  useEffect(() => {\r\n    // 필수 모듈 체크\r\n    if (\r\n      !window.naver ||\r\n      !window.naver.maps ||\r\n      !window.MarkerClustering ||\r\n      !mapRef.current\r\n    ) return;\r\n\r\n    // 지도 생성\r\n    const map = new window.naver.maps.Map(mapRef.current, {\r\n      center: new window.naver.maps.LatLng(\r\n        markers[0]?.lat ?? latitude,\r\n        markers[0]?.lng ?? longitude\r\n      ),\r\n      zoom: 13,\r\n    });\r\n\r\n    setLoading(false);\r\n\r\n    // 마커 객체, InfoWindow 객체\r\n    const markerObjs = [];\r\n    const infoWindows = [];\r\n\r\n    markers.forEach((marker) => {\r\n      // 타입별 아이콘 URL\r\n      const iconUrl = marker.icon;\r\n      const iconObj = iconUrl\r\n        ? { url: iconUrl, size: new window.naver.maps.Size(32, 32), scaledSize: new window.naver.maps.Size(32, 32) }\r\n        : undefined;\r\n\r\n      const markerObj = new window.naver.maps.Marker({\r\n        position: new window.naver.maps.LatLng(marker.lat, marker.lng),\r\n        icon: iconObj,\r\n        title: marker.title || \"\",\r\n      });\r\n\r\n      markerObjs.push(markerObj);\r\n\r\n      // InfoWindow\r\n      if (marker.title || marker.desc) {\r\n        const infoWindow = new window.naver.maps.InfoWindow({\r\n          content: `<div style=\"padding:7px;font-size:14px;\">\r\n            <b>${marker.title || \"\"}</b><br/>${marker.desc || \"\"}</div>`,\r\n        });\r\n        infoWindows.push(infoWindow);\r\n\r\n        window.naver.maps.Event.addListener(markerObj, \"click\", () => {\r\n          infoWindows.forEach(iw => iw.close());\r\n          infoWindow.open(map, markerObj);\r\n        });\r\n      }\r\n    });\r\n\r\n    const clusterer = new window.MarkerClustering({\r\n      minClusterSize: 2,\r\n      maxZoom: 17,\r\n      map,\r\n      markers: markerObjs,\r\n      disableClickZoom: false,\r\n      gridSize: 80,\r\n      icons: [\r\n        {\r\n          content: '<div class=\"cluster-badge\"></div>',\r\n          size: new window.naver.maps.Size(36, 36),\r\n          anchor: new window.naver.maps.Point(18, 18),\r\n        }\r\n      ],\r\n      stylingFunction: (clusterMarker, count) => {\r\n        const el = clusterMarker.getElement();\r\n        if (el) {\r\n          // 오버레이 디자인 및 숫자만 바꾼다 (DOM은 교체하지 않음)\r\n          el.style.background = '#3887be';\r\n          el.style.color = '#fff';\r\n          el.style.borderRadius = '50%';\r\n          el.style.width = '36px';\r\n          el.style.height = '36px';\r\n          el.style.display = 'flex';\r\n          el.style.alignItems = 'center';\r\n          el.style.justifyContent = 'center';\r\n          el.style.fontSize = '16px';\r\n          el.style.boxShadow = '0 1px 4px rgba(0,0,0,.2)';\r\n          el.textContent = count;\r\n        }\r\n      }\r\n    });\r\n\r\n\r\n\r\n    window.naver.maps.Event.addListener(map, \"click\", (e) => {\r\n      const tempWindow = new window.naver.maps.InfoWindow({\r\n        content: `<div style=\"padding:7px;font-size:13px;\">좌표: ${e.coord.lat().toFixed(6)}, ${e.coord.lng().toFixed(6)}</div>`\r\n      });\r\n      tempWindow.open(map, e.coord);\r\n      setTimeout(() => tempWindow.close(), 2000);\r\n    });\r\n\r\n    // cleanup\r\n    return () => {\r\n      markerObjs.forEach(marker => marker.setMap(null));\r\n      infoWindows.forEach(iw => iw.close());\r\n      if (clusterer) clusterer.setMap(null);\r\n    };\r\n  }, [markers, latitude, longitude]);\r\n\r\n  return (\r\n    <div style={{ position: \"relative\", ...style }}>\r\n      {loading && (\r\n        <div>\r\n          <h3>Map loading...</h3>\r\n        </div>\r\n      )}\r\n      <div ref={mapRef} style={{ width: \"100%\", height: \"100%\" }} />\r\n    </div>\r\n  );\r\n}\r\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}