{"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, _window$naver$maps$Ma;\n    if (!window.naver || !window.naver.maps || !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    // 마커 객체 생성\n    const markerObjs = markers.map(marker => new window.naver.maps.Marker({\n      position: new window.naver.maps.LatLng(marker.lat, marker.lng),\n      icon: marker.icon,\n      title: marker.title || marker.name || \"\"\n    }));\n\n    // InfoWindow (마커 별로)\n    const infoWindows = markerObjs.map((markerObj, idx) => {\n      const marker = markers[idx];\n      if (!marker.title && !marker.desc) return null;\n      const infoWindow = new window.naver.maps.InfoWindow({\n        content: `\n          <div style=\"padding:7px;font-size:14px;\">\n            <b>${marker.title || marker.name || \"\"}</b><br/>\n            ${marker.desc || \"\"}\n            ${marker.lat && marker.lng ? `<br/>(${marker.lat.toFixed(5)}, ${marker.lng.toFixed(5)})` : \"\"}\n          </div>\n        `\n      });\n      window.naver.maps.Event.addListener(markerObj, \"click\", () => {\n        infoWindows.forEach(iw => iw && iw.close());\n        infoWindow.open(map, markerObj);\n      });\n      return infoWindow;\n    });\n\n    // 클러스터 아이콘 (커스텀 가능)\n    const clusterIcons = [{\n      html: `<div style=\"background:#3887be;color:#fff;border-radius:50%;width:36px;height:36px;display:flex;align-items:center;justify-content:center;font-size:16px;\">{n}</div>`,\n      size: new window.naver.maps.Size(36, 36),\n      anchor: new window.naver.maps.Point(18, 18)\n    }];\n\n    // 클러스터러 생성 (최신 공식)\n    console.log(window.naver && window.naver.maps && window.naver.maps.MarkerClustering);\n    const MarkerClustering = window.naver.maps.MarkerClustering || ((_window$naver$maps$Ma = window.naver.maps.MarkerClustering) === null || _window$naver$maps$Ma === void 0 ? void 0 : _window$naver$maps$Ma.MarkerClustering);\n    const clusterer = new MarkerClustering({\n      minClusterSize: 2,\n      maxZoom: 17,\n      map: map,\n      markers: markerObjs,\n      disableClickZoom: false,\n      gridSize: 80,\n      icons: clusterIcons,\n      indexGenerator: [10, 50, 100, 200, 500],\n      // 클러스터 개수에 따라 아이콘 차등화\n      stylingFunction: function (clusterMarker, count) {\n        // 클러스터 수 표시 커스텀 등 가능\n        // 기본 clusterIcon html의 {n}이 자동 대체됨\n      }\n    });\n\n    // 지도 클릭시 좌표 infoWindow\n    const mapClickListener = 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 && iw.close());\n      if (clusterer) clusterer.setMap(null);\n      if (mapClickListener) window.naver.maps.Event.removeListener(mapClickListener);\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: 105,\n        columnNumber: 11\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 104,\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: 108,\n      columnNumber: 7\n    }, this)]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 102,\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$Ma","window","naver","maps","current","map","Map","center","LatLng","lat","lng","zoom","markerObjs","marker","Marker","position","icon","title","name","infoWindows","markerObj","idx","desc","infoWindow","InfoWindow","content","toFixed","Event","addListener","forEach","iw","close","open","clusterIcons","html","size","Size","anchor","Point","console","log","MarkerClustering","clusterer","minClusterSize","maxZoom","disableClickZoom","gridSize","icons","indexGenerator","stylingFunction","clusterMarker","count","mapClickListener","e","tempWindow","coord","setTimeout","setMap","removeListener","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, 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    if (!window.naver || !window.naver.maps || !mapRef.current) 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    // 마커 객체 생성\r\n    const markerObjs = markers.map((marker) =>\r\n      new window.naver.maps.Marker({\r\n        position: new window.naver.maps.LatLng(marker.lat, marker.lng),\r\n        icon: marker.icon,\r\n        title: marker.title || marker.name || \"\",\r\n      })\r\n    );\r\n\r\n    // InfoWindow (마커 별로)\r\n    const infoWindows = markerObjs.map((markerObj, idx) => {\r\n      const marker = markers[idx];\r\n      if (!marker.title && !marker.desc) return null;\r\n      const infoWindow = new window.naver.maps.InfoWindow({\r\n        content: `\r\n          <div style=\"padding:7px;font-size:14px;\">\r\n            <b>${marker.title || marker.name || \"\"}</b><br/>\r\n            ${marker.desc || \"\"}\r\n            ${marker.lat && marker.lng\r\n            ? `<br/>(${marker.lat.toFixed(5)}, ${marker.lng.toFixed(5)})`\r\n            : \"\"}\r\n          </div>\r\n        `,\r\n      });\r\n      window.naver.maps.Event.addListener(markerObj, \"click\", () => {\r\n        infoWindows.forEach(iw => iw && iw.close());\r\n        infoWindow.open(map, markerObj);\r\n      });\r\n      return infoWindow;\r\n    });\r\n\r\n    // 클러스터 아이콘 (커스텀 가능)\r\n    const clusterIcons = [\r\n      {\r\n        html: `<div style=\"background:#3887be;color:#fff;border-radius:50%;width:36px;height:36px;display:flex;align-items:center;justify-content:center;font-size:16px;\">{n}</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\r\n    // 클러스터러 생성 (최신 공식)\r\n    console.log(window.naver && window.naver.maps && window.naver.maps.MarkerClustering);\r\n    const MarkerClustering = window.naver.maps.MarkerClustering || window.naver.maps.MarkerClustering?.MarkerClustering;\r\n    const clusterer = new MarkerClustering({\r\n      minClusterSize: 2,\r\n      maxZoom: 17,\r\n      map: map,\r\n      markers: markerObjs,\r\n      disableClickZoom: false,\r\n      gridSize: 80,\r\n      icons: clusterIcons,\r\n      indexGenerator: [10, 50, 100, 200, 500], // 클러스터 개수에 따라 아이콘 차등화\r\n      stylingFunction: function (clusterMarker, count) {\r\n        // 클러스터 수 표시 커스텀 등 가능\r\n        // 기본 clusterIcon html의 {n}이 자동 대체됨\r\n      }\r\n    });\r\n\r\n    // 지도 클릭시 좌표 infoWindow\r\n    const mapClickListener = 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 && iw.close());\r\n      if (clusterer) clusterer.setMap(null);\r\n      if (mapClickListener) window.naver.maps.Event.removeListener(mapClickListener);\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}"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAAC,SAAAC,MAAA,IAAAC,OAAA;AAE3D,eAAe,SAASC,QAAQA,CAAC;EAC/BC,QAAQ,GAAG,OAAO;EAAEC,SAAS,GAAG,QAAQ;EACxCC,OAAO,GAAG,EAAE;EACZC,KAAK,GAAG;IAAEC,KAAK,EAAE,MAAM;IAAEC,MAAM,EAAE;EAAQ;AAC3C,CAAC,EAAE;EAAAC,EAAA;EACD,MAAMC,MAAM,GAAGZ,MAAM,CAAC,IAAI,CAAC;EAC3B,MAAM,CAACa,OAAO,EAAEC,UAAU,CAAC,GAAGb,QAAQ,CAAC,IAAI,CAAC;EAE5CF,SAAS,CAAC,MAAM;IAAA,IAAAgB,cAAA,EAAAC,SAAA,EAAAC,cAAA,EAAAC,UAAA,EAAAC,qBAAA;IACd,IAAI,CAACC,MAAM,CAACC,KAAK,IAAI,CAACD,MAAM,CAACC,KAAK,CAACC,IAAI,IAAI,CAACV,MAAM,CAACW,OAAO,EAAE;;IAE5D;IACA,MAAMC,GAAG,GAAG,IAAIJ,MAAM,CAACC,KAAK,CAACC,IAAI,CAACG,GAAG,CAACb,MAAM,CAACW,OAAO,EAAE;MACpDG,MAAM,EAAE,IAAIN,MAAM,CAACC,KAAK,CAACC,IAAI,CAACK,MAAM,EAAAZ,cAAA,IAAAC,SAAA,GAClCT,OAAO,CAAC,CAAC,CAAC,cAAAS,SAAA,uBAAVA,SAAA,CAAYY,GAAG,cAAAb,cAAA,cAAAA,cAAA,GAAIV,QAAQ,GAAAY,cAAA,IAAAC,UAAA,GAC3BX,OAAO,CAAC,CAAC,CAAC,cAAAW,UAAA,uBAAVA,UAAA,CAAYW,GAAG,cAAAZ,cAAA,cAAAA,cAAA,GAAIX,SACrB,CAAC;MACDwB,IAAI,EAAE;IACR,CAAC,CAAC;IAEFhB,UAAU,CAAC,KAAK,CAAC;;IAEjB;IACA,MAAMiB,UAAU,GAAGxB,OAAO,CAACiB,GAAG,CAAEQ,MAAM,IACpC,IAAIZ,MAAM,CAACC,KAAK,CAACC,IAAI,CAACW,MAAM,CAAC;MAC3BC,QAAQ,EAAE,IAAId,MAAM,CAACC,KAAK,CAACC,IAAI,CAACK,MAAM,CAACK,MAAM,CAACJ,GAAG,EAAEI,MAAM,CAACH,GAAG,CAAC;MAC9DM,IAAI,EAAEH,MAAM,CAACG,IAAI;MACjBC,KAAK,EAAEJ,MAAM,CAACI,KAAK,IAAIJ,MAAM,CAACK,IAAI,IAAI;IACxC,CAAC,CACH,CAAC;;IAED;IACA,MAAMC,WAAW,GAAGP,UAAU,CAACP,GAAG,CAAC,CAACe,SAAS,EAAEC,GAAG,KAAK;MACrD,MAAMR,MAAM,GAAGzB,OAAO,CAACiC,GAAG,CAAC;MAC3B,IAAI,CAACR,MAAM,CAACI,KAAK,IAAI,CAACJ,MAAM,CAACS,IAAI,EAAE,OAAO,IAAI;MAC9C,MAAMC,UAAU,GAAG,IAAItB,MAAM,CAACC,KAAK,CAACC,IAAI,CAACqB,UAAU,CAAC;QAClDC,OAAO,EAAE;AACjB;AACA,iBAAiBZ,MAAM,CAACI,KAAK,IAAIJ,MAAM,CAACK,IAAI,IAAI,EAAE;AAClD,cAAcL,MAAM,CAACS,IAAI,IAAI,EAAE;AAC/B,cAAcT,MAAM,CAACJ,GAAG,IAAII,MAAM,CAACH,GAAG,GACxB,SAASG,MAAM,CAACJ,GAAG,CAACiB,OAAO,CAAC,CAAC,CAAC,KAAKb,MAAM,CAACH,GAAG,CAACgB,OAAO,CAAC,CAAC,CAAC,GAAG,GAC3D,EAAE;AAChB;AACA;MACM,CAAC,CAAC;MACFzB,MAAM,CAACC,KAAK,CAACC,IAAI,CAACwB,KAAK,CAACC,WAAW,CAACR,SAAS,EAAE,OAAO,EAAE,MAAM;QAC5DD,WAAW,CAACU,OAAO,CAACC,EAAE,IAAIA,EAAE,IAAIA,EAAE,CAACC,KAAK,CAAC,CAAC,CAAC;QAC3CR,UAAU,CAACS,IAAI,CAAC3B,GAAG,EAAEe,SAAS,CAAC;MACjC,CAAC,CAAC;MACF,OAAOG,UAAU;IACnB,CAAC,CAAC;;IAEF;IACA,MAAMU,YAAY,GAAG,CACnB;MACEC,IAAI,EAAE,sKAAsK;MAC5KC,IAAI,EAAE,IAAIlC,MAAM,CAACC,KAAK,CAACC,IAAI,CAACiC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;MACxCC,MAAM,EAAE,IAAIpC,MAAM,CAACC,KAAK,CAACC,IAAI,CAACmC,KAAK,CAAC,EAAE,EAAE,EAAE;IAC5C,CAAC,CACF;;IAED;IACAC,OAAO,CAACC,GAAG,CAACvC,MAAM,CAACC,KAAK,IAAID,MAAM,CAACC,KAAK,CAACC,IAAI,IAAIF,MAAM,CAACC,KAAK,CAACC,IAAI,CAACsC,gBAAgB,CAAC;IACpF,MAAMA,gBAAgB,GAAGxC,MAAM,CAACC,KAAK,CAACC,IAAI,CAACsC,gBAAgB,MAAAzC,qBAAA,GAAIC,MAAM,CAACC,KAAK,CAACC,IAAI,CAACsC,gBAAgB,cAAAzC,qBAAA,uBAAlCA,qBAAA,CAAoCyC,gBAAgB;IACnH,MAAMC,SAAS,GAAG,IAAID,gBAAgB,CAAC;MACrCE,cAAc,EAAE,CAAC;MACjBC,OAAO,EAAE,EAAE;MACXvC,GAAG,EAAEA,GAAG;MACRjB,OAAO,EAAEwB,UAAU;MACnBiC,gBAAgB,EAAE,KAAK;MACvBC,QAAQ,EAAE,EAAE;MACZC,KAAK,EAAEd,YAAY;MACnBe,cAAc,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;MAAE;MACzCC,eAAe,EAAE,SAAAA,CAAUC,aAAa,EAAEC,KAAK,EAAE;QAC/C;QACA;MAAA;IAEJ,CAAC,CAAC;;IAEF;IACA,MAAMC,gBAAgB,GAAGnD,MAAM,CAACC,KAAK,CAACC,IAAI,CAACwB,KAAK,CAACC,WAAW,CAACvB,GAAG,EAAE,OAAO,EAAGgD,CAAC,IAAK;MAChF,MAAMC,UAAU,GAAG,IAAIrD,MAAM,CAACC,KAAK,CAACC,IAAI,CAACqB,UAAU,CAAC;QAClDC,OAAO,EAAE,gDAAgD4B,CAAC,CAACE,KAAK,CAAC9C,GAAG,CAAC,CAAC,CAACiB,OAAO,CAAC,CAAC,CAAC,KAAK2B,CAAC,CAACE,KAAK,CAAC7C,GAAG,CAAC,CAAC,CAACgB,OAAO,CAAC,CAAC,CAAC;MAChH,CAAC,CAAC;MACF4B,UAAU,CAACtB,IAAI,CAAC3B,GAAG,EAAEgD,CAAC,CAACE,KAAK,CAAC;MAC7BC,UAAU,CAAC,MAAMF,UAAU,CAACvB,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;IAC5C,CAAC,CAAC;;IAEF;IACA,OAAO,MAAM;MACXnB,UAAU,CAACiB,OAAO,CAAChB,MAAM,IAAIA,MAAM,CAAC4C,MAAM,CAAC,IAAI,CAAC,CAAC;MACjDtC,WAAW,CAACU,OAAO,CAACC,EAAE,IAAIA,EAAE,IAAIA,EAAE,CAACC,KAAK,CAAC,CAAC,CAAC;MAC3C,IAAIW,SAAS,EAAEA,SAAS,CAACe,MAAM,CAAC,IAAI,CAAC;MACrC,IAAIL,gBAAgB,EAAEnD,MAAM,CAACC,KAAK,CAACC,IAAI,CAACwB,KAAK,CAAC+B,cAAc,CAACN,gBAAgB,CAAC;IAChF,CAAC;EACH,CAAC,EAAE,CAAChE,OAAO,EAAEF,QAAQ,EAAEC,SAAS,CAAC,CAAC;EAElC,oBACEH,OAAA;IAAKK,KAAK,EAAE;MAAE0B,QAAQ,EAAE,UAAU;MAAE,GAAG1B;IAAM,CAAE;IAAAsE,QAAA,GAC5CjE,OAAO,iBACNV,OAAA;MAAA2E,QAAA,eACE3E,OAAA;QAAA2E,QAAA,EAAI;MAAc;QAAAC,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAAI;IAAC;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OACpB,CACN,eACD/E,OAAA;MAAKgF,GAAG,EAAEvE,MAAO;MAACJ,KAAK,EAAE;QAAEC,KAAK,EAAE,MAAM;QAAEC,MAAM,EAAE;MAAO;IAAE;MAAAqE,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OAAE,CAAC;EAAA;IAAAH,QAAA,EAAAC,YAAA;IAAAC,UAAA;IAAAC,YAAA;EAAA,OAC3D,CAAC;AAEV;AAACvE,EAAA,CA5GuBP,QAAQ;AAAAgF,EAAA,GAARhF,QAAQ;AAAA,IAAAgF,EAAA;AAAAC,YAAA,CAAAD,EAAA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}