{"version":3,"sources":["../src/overlays/polyline.tsx"],"sourcesContent":["import pick from 'lodash.pick';\nimport { 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  'path',\n  'strokeWeight',\n  'strokeOpacity',\n  'strokeColor',\n  'strokeStyle',\n  'strokeLineCap',\n  'strokeLineJoin',\n  'clickable',\n  'visible',\n  'zIndex',\n  'startIcon',\n  'startIconSize',\n  'endIcon',\n  'endIconSize',\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 PolylineOptions = {\n  /**\n   * @type naver.maps.ArrayOfCoords | naver.maps.KVOArrayOfCoords | naver.maps.ArrayOfCoordsLiteral\n   */\n  path: 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  clickable?: boolean;\n  visible?: boolean;\n  zIndex?: number;\n  startIcon?: naver.maps.PointingIcon;\n  startIconSize?: number;\n  endIcon?: naver.maps.PointingIcon;\n  endIconSize?: number;\n};\n\nexport type Props = PolylineOptions & {\n  onPathChanged?: (value: 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  onClickableChanged?: (value: boolean) => void;\n  onVisibleChanged?: (value: boolean) => void;\n  onZIndexChanged?: (value: number) => void;\n  onStartIconChanged?: (value: naver.maps.PointingIcon) => void;\n  onStartIconSizeChanged?: (number: string) => void;\n  onEndIconChanged?: (value: naver.maps.PointingIcon) => void;\n  onEndIconSizeChanged?: (number: string) => void;\n} & UIEventHandlers<typeof uiEvents>;\n\nexport const Polyline = forwardRef<naver.maps.Polyline, Props>(function Polyline(props, ref) {\n  const options = pick(props, [...kvoKeys]);\n  const navermaps = useNavermaps();\n  const [polyline] = useState(() => new navermaps.Polyline(options));\n\n  useImperativeHandle<naver.maps.Polyline | undefined, naver.maps.Polyline | undefined>(ref, () => polyline);\n\n  useEffect(() => {\n    polyline.setOptions(omitUndefined(options) as PolylineOptions); // TODO: FIX DefinilyTyped. setOptions의 assign type 은 Partial<Options> 이어야 함\n  }, kvoKeys.map(key => options[key]));\n\n  return (\n    <Overlay element={polyline}>\n      <HandleEvents events={events} listeners={props as any} />\n    </Overlay>\n  );\n});\n"],"mappings":";;;;;;;;;;;;;;AAAA,OAAO,UAAU;AACjB,SAAS,YAAY,WAAW,qBAAqB,gBAAgB;AAuF/D;AA/EN,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;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAM,YAAY,QAAQ,IAAI,SAAO,GAAG,aAAa;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;AAuClC,IAAM,WAAW,WAAuC,SAASA,UAAS,OAAO,KAAK;AAC3F,QAAM,UAAU,KAAK,OAAO,CAAC,GAAG,OAAO,CAAC;AACxC,QAAM,YAAY,aAAa;AAC/B,QAAM,CAAC,QAAQ,IAAI,SAAS,MAAM,IAAI,UAAU,SAAS,OAAO,CAAC;AAEjE,sBAAsF,KAAK,MAAM,QAAQ;AAEzG,YAAU,MAAM;AACd,aAAS,WAAW,cAAc,OAAO,CAAoB;AAAA,EAC/D,GAAG,QAAQ,IAAI,SAAO,QAAQ,IAAI,CAAC;AAEnC,SACE,oBAAC;AAAA,IAAQ,SAAS;AAAA,IAChB,8BAAC;AAAA,MAAa;AAAA,MAAgB,WAAW;AAAA,KAAc;AAAA,GACzD;AAEJ,CAAC;","names":["Polyline"]}