{"version":3,"sources":["../src/overlays/ground-overlay.tsx"],"sourcesContent":["import { forwardRef, useEffect, useImperativeHandle, useState } from 'react';\n\nimport { HandleEvents } from '../helpers/event';\nimport { Overlay } from '../overlay';\nimport type { UIEventHandlers } from '../types/event';\nimport { useNavermaps } from '../use-navermaps';\n\nconst kvoKeys = [\n  'clickable',\n  'opacity',\n] as const;\nconst kvoEvents = kvoKeys.map(key => `${key}_changed`);\nconst uiEvents = [\n  'mousedown',\n  'mouseup',\n  'click',\n  'dblclick',\n  'rightclick',\n  'mouseover',\n  'mouseout',\n  'mousemove',\n] as const;\nconst events = [...uiEvents, ...kvoEvents];\n\ntype GroundOverlayOptions = {\n  clickable?: boolean;\n  opacity?: number;\n};\n\nexport type Props = GroundOverlayOptions & {\n  url: string;\n  /**\n   * bounds\n   * @type naver.maps.Bounds | naver.maps.BoundsLiteral\n   */\n  bounds: naver.maps.Bounds | naver.maps.BoundsLiteral;\n  onOpacityChanged?: (value: number) => void;\n  onClickableChanged?: (event: boolean) => void;\n} & UIEventHandlers<typeof uiEvents>;\n\nexport const GroundOverlay = forwardRef<naver.maps.GroundOverlay, Props>(function GroundOverlay(props, ref) {\n  const options = Object.fromEntries(kvoKeys.map(key => [key, props[key]])) as GroundOverlayOptions;\n  const { url, bounds } = props;\n  const navermaps = useNavermaps();\n  const [groundOverlay, setGroundOverlay] = useState(() => new navermaps.GroundOverlay(url, bounds, options));\n\n  useImperativeHandle<naver.maps.GroundOverlay | undefined, naver.maps.GroundOverlay | undefined>(ref, () => groundOverlay, [groundOverlay]);\n\n  useEffect(() => {\n    if (groundOverlay.getUrl() !== url || groundOverlay.getBounds().equals(bounds as naver.maps.Bounds)) {\n      setGroundOverlay(new navermaps.GroundOverlay(url, bounds, options));\n    }\n  }, [url, bounds]);\n\n  useEffect(() => {\n    kvoKeys.forEach(key => {\n      if (options[key] && groundOverlay.get(key) !== options[key]) {\n        groundOverlay.set(key, options[key]);\n      }\n    });\n  }, kvoKeys.map(key => options[key]));\n\n  return (\n    <Overlay element={groundOverlay}>\n      <HandleEvents events={events} listeners={props as any} />\n    </Overlay>\n  );\n});\n"],"mappings":";;;;;;;;;;;AAAA,SAAS,YAAY,WAAW,qBAAqB,gBAAgB;AAgE/D;AAzDN,IAAM,UAAU;AAAA,EACd;AAAA,EACA;AACF;AACA,IAAM,YAAY,QAAQ,IAAI,SAAO,GAAG,GAAG,UAAU;AACrD,IAAM,WAAW;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAM,SAAS,CAAC,GAAG,UAAU,GAAG,SAAS;AAkBlC,IAAM,gBAAgB,WAA4C,SAASA,eAAc,OAAO,KAAK;AAC1G,QAAM,UAAU,OAAO,YAAY,QAAQ,IAAI,SAAO,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC;AACxE,QAAM,EAAE,KAAK,OAAO,IAAI;AACxB,QAAM,YAAY,aAAa;AAC/B,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,MAAM,IAAI,UAAU,cAAc,KAAK,QAAQ,OAAO,CAAC;AAE1G,sBAAgG,KAAK,MAAM,eAAe,CAAC,aAAa,CAAC;AAEzI,YAAU,MAAM;AACd,QAAI,cAAc,OAAO,MAAM,OAAO,cAAc,UAAU,EAAE,OAAO,MAA2B,GAAG;AACnG,uBAAiB,IAAI,UAAU,cAAc,KAAK,QAAQ,OAAO,CAAC;AAAA,IACpE;AAAA,EACF,GAAG,CAAC,KAAK,MAAM,CAAC;AAEhB,YAAU,MAAM;AACd,YAAQ,QAAQ,SAAO;AACrB,UAAI,QAAQ,GAAG,KAAK,cAAc,IAAI,GAAG,MAAM,QAAQ,GAAG,GAAG;AAC3D,sBAAc,IAAI,KAAK,QAAQ,GAAG,CAAC;AAAA,MACrC;AAAA,IACF,CAAC;AAAA,EACH,GAAG,QAAQ,IAAI,SAAO,QAAQ,GAAG,CAAC,CAAC;AAEnC,SACE,oBAAC,WAAQ,SAAS,eAChB,8BAAC,gBAAa,QAAgB,WAAW,OAAc,GACzD;AAEJ,CAAC;","names":["GroundOverlay"]}