{"version":3,"sources":["../src/overlays/polygon.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 kvoKeys = [\n  'paths',\n  'strokeWeight',\n  'strokeOpacity',\n  'strokeColor',\n  'strokeStyle',\n  'strokeLineCap',\n  'strokeLineJoin',\n  'fillColor',\n  'fillOpacity',\n  'clickable',\n  'visible',\n  'zIndex',\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 PolygonOptions = {\n  /**\n   * @type naver.maps.ArrayOfCoords[] | naver.maps.KVOArrayOfCoords[] | naver.maps.ArrayOfCoordsLiteral[]\n   */\n  paths: naver.maps.ArrayOfCoords[] | naver.maps.KVOArrayOfCoords[] | naver.maps.ArrayOfCoordsLiteral[];\n  strokeWeight?: number;\n  strokeOpacity?: number;\n  strokeColor?: string;\n  strokeStyle?: naver.maps.StrokeStyleType;\n  strokeLineCap?: naver.maps.StrokeLineCapType;\n  strokeLineJoin?: naver.maps.StrokeLineJoinType;\n  fillColor?: string;\n  fillOpacity?: number;\n  clickable?: boolean;\n  visible?: boolean;\n  zIndex?: number;\n};\n\nexport type Props = PolygonOptions & {\n  onPathsChanged?: (value: Array<naver.maps.ArrayOfCoords>) => void;\n  onStrokeWeightChanged?: (value: number) => void;\n  onStrokeOpacityChanged?: (value: number) => void;\n  onStrokeColorChanged?: (value: string) => void;\n  onStrokeStyleChanged?: (value: naver.maps.StrokeStyleType) => void;\n  onStrokeLineCapChanged?: (value: naver.maps.StrokeLineCapType) => void;\n  onStrokeLineJoinChanged?: (value: naver.maps.StrokeLineJoinType) => void;\n  onFillColorChanged?: (value: string) => void;\n  onFillOpacityChanged?: (value: number) => void;\n  onClickableChanged?: (event: boolean) => void;\n  onVisibleChanged?: (event: boolean) => void;\n  onZIndexChanged?: (event: number) => void;\n} & UIEventHandlers<typeof uiEvents>;\n\nexport const Polygon = forwardRef<naver.maps.Polygon, Props>(function Polygon(props, ref) {\n  const { paths } = props;\n  const options = {\n    paths,\n    ...Object.fromEntries(kvoKeys.filter(key => key !== 'paths').map(key => [key, props[key]])),\n  } as naver.maps.PolygonOptions;\n  const navermaps = useNavermaps();\n  const [polygon] = useState(() => new navermaps.Polygon(options));\n\n  useImperativeHandle<naver.maps.Polygon | undefined, naver.maps.Polygon | undefined>(ref, () => polygon);\n\n  useEffect(() => {\n    const cleanOptions = omitUndefined(options);\n    if (Object.keys(cleanOptions).length > 0) {\n      polygon.setOptions(cleanOptions as naver.maps.PolygonOptions);\n    }\n  }, kvoKeys.map(key => options[key]));\n\n  return (\n    <Overlay element={polygon}>\n      <HandleEvents events={events} listeners={props as any} />\n    </Overlay>\n  );\n});\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,YAAY,WAAW,qBAAqB,gBAAgB;AAwF/D;AAhFN,IAAM,UAAU;AAAA,EACd;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,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;AAmClC,IAAM,UAAU,WAAsC,SAASA,SAAQ,OAAO,KAAK;AACxF,QAAM,EAAE,MAAM,IAAI;AAClB,QAAM,UAAU;AAAA,IACd;AAAA,IACA,GAAG,OAAO,YAAY,QAAQ,OAAO,SAAO,QAAQ,OAAO,EAAE,IAAI,SAAO,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC;AAAA,EAC5F;AACA,QAAM,YAAY,aAAa;AAC/B,QAAM,CAAC,OAAO,IAAI,SAAS,MAAM,IAAI,UAAU,QAAQ,OAAO,CAAC;AAE/D,sBAAoF,KAAK,MAAM,OAAO;AAEtG,YAAU,MAAM;AACd,UAAM,eAAe,cAAc,OAAO;AAC1C,QAAI,OAAO,KAAK,YAAY,EAAE,SAAS,GAAG;AACxC,cAAQ,WAAW,YAAyC;AAAA,IAC9D;AAAA,EACF,GAAG,QAAQ,IAAI,SAAO,QAAQ,GAAG,CAAC,CAAC;AAEnC,SACE,oBAAC,WAAQ,SAAS,SAChB,8BAAC,gBAAa,QAAgB,WAAW,OAAc,GACzD;AAEJ,CAAC;","names":["Polygon"]}