{"version":3,"sources":["../src/overlays/info-window.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';\nimport { omitUndefined } from '../utils/omit-undefined';\n\nconst primitiveKvoKeys = [\n  'content',\n  'zIndex',\n  'maxWidth',\n  'pixelOffset',\n  'backgroundColor',\n  'borderColor',\n  'borderWidth',\n  'disableAutoPan',\n  'disableAnchor',\n  'anchorSkew',\n  'anchorSize',\n  'anchorColor',\n] as const;\nconst kvoKeys = [\n  ...primitiveKvoKeys,\n  'position',\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 InfoWindowOptions = {\n  /**\n   * position\n   * @type naver.maps.Coord | naver.maps.CoordLiteral\n   */\n  position?: naver.maps.Coord | naver.maps.CoordLiteral;\n  content: string;\n  zIndex?: number;\n  maxWidth?: number;\n  /**\n   * @type naver.maps.Point | naver.maps.PointLiteral\n   */\n  pixelOffset?: naver.maps.Point | naver.maps.PointLiteral;\n  backgroundColor?: string;\n  borderColor?: string;\n  borderWidth?: number;\n  disableAutoPan?: boolean;\n  disableAnchor?: boolean;\n  anchorSkew?: boolean;\n  /**\n   * @type naver.maps.Size | naver.maps.SizeLiteral\n   */\n  anchorSize?: naver.maps.Size | naver.maps.SizeLiteral;\n  anchorColor?: string;\n};\n\nexport type Props = InfoWindowOptions & {\n  onPositionChanged?: (value: naver.maps.Coord) => void;\n  onContentChanged?: (value: HTMLElement) => void;\n  onZIndexChanged?: (value: number) => void;\n  onMaxWidthChanged?: (value: number) => void;\n  onPixelOffsetChanged?: (value: naver.maps.Point) => void;\n  onBackgroundColorChanged?: (value: string) => void;\n  onBorderColorChanged?: (value: string) => void;\n  onBorderWidthChanged?: (value: number) => void;\n  onDisableAutoPanChanged?: (value: boolean) => void;\n  onDisableAnchorChanged?: (value: boolean) => void;\n  onAnchorSkewChanged?: (value: boolean) => void;\n  onAnchorSizeChanged?: (value: naver.maps.Size) => void;\n  onAnchorColorChanged?: (value: string) => void;\n} & UIEventHandlers<typeof uiEvents>;\n\nexport const InfoWindow = forwardRef<naver.maps.InfoWindow, Props>(function InfoWindow(props, ref) {\n  const { position } = props;\n  const navermaps = useNavermaps();\n  const [infoWindow] = useState(() => new navermaps.InfoWindow(omitUndefined({\n    position,\n    ...Object.fromEntries(kvoKeys.filter(key => key !== 'position').map(key => [key, props[key]])),\n  }) as InfoWindowOptions));\n\n  useImperativeHandle<naver.maps.InfoWindow | undefined, naver.maps.InfoWindow | undefined>(ref, () => infoWindow);\n\n  useEffect(() => {\n    const options = {\n      ...Object.fromEntries(primitiveKvoKeys.map(key => [key, props[key]])),\n      position,\n    };\n    const cleanOptions = omitUndefined(options);\n    if (Object.keys(cleanOptions).length > 0) {\n      infoWindow.setOptions(cleanOptions as InfoWindowOptions);\n    }\n  }, primitiveKvoKeys.map(key => props[key]));\n\n  useEffect(() => {\n    if (position && infoWindow.getPosition().equals(position as naver.maps.Point)) {\n      infoWindow.setPosition(position);\n    }\n  }, [position]);\n\n  return (\n    <Overlay element={infoWindow} autoMount={false}>\n      <HandleEvents events={events} listeners={props as any} />\n    </Overlay>\n  );\n});\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,YAAY,WAAW,qBAAqB,gBAAgB;AA8G/D;AAtGN,IAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAM,UAAU;AAAA,EACd,GAAG;AAAA,EACH;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;AA4ClC,IAAM,aAAa,WAAyC,SAASA,YAAW,OAAO,KAAK;AACjG,QAAM,EAAE,SAAS,IAAI;AACrB,QAAM,YAAY,aAAa;AAC/B,QAAM,CAAC,UAAU,IAAI,SAAS,MAAM,IAAI,UAAU,WAAW,cAAc;AAAA,IACzE;AAAA,IACA,GAAG,OAAO,YAAY,QAAQ,OAAO,SAAO,QAAQ,UAAU,EAAE,IAAI,SAAO,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC;AAAA,EAC/F,CAAC,CAAsB,CAAC;AAExB,sBAA0F,KAAK,MAAM,UAAU;AAE/G,YAAU,MAAM;AACd,UAAM,UAAU;AAAA,MACd,GAAG,OAAO,YAAY,iBAAiB,IAAI,SAAO,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC;AAAA,MACpE;AAAA,IACF;AACA,UAAM,eAAe,cAAc,OAAO;AAC1C,QAAI,OAAO,KAAK,YAAY,EAAE,SAAS,GAAG;AACxC,iBAAW,WAAW,YAAiC;AAAA,IACzD;AAAA,EACF,GAAG,iBAAiB,IAAI,SAAO,MAAM,GAAG,CAAC,CAAC;AAE1C,YAAU,MAAM;AACd,QAAI,YAAY,WAAW,YAAY,EAAE,OAAO,QAA4B,GAAG;AAC7E,iBAAW,YAAY,QAAQ;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAEb,SACE,oBAAC,WAAQ,SAAS,YAAY,WAAW,OACvC,8BAAC,gBAAa,QAAgB,WAAW,OAAc,GACzD;AAEJ,CAAC;","names":["InfoWindow"]}