{"version":3,"file":"MapPanel.mjs","sources":[""],"sourcesContent":["import type {\r\n  FC,\r\n  ReactNode,\r\n  PropsWithChildren,\r\n  MouseEvent,\r\n} from \"react\";\r\nimport {\r\n  useContext,\r\n  useRef,\r\n  useEffect,\r\n  useMemo,\r\n} from \"react\";\r\nimport { Btn } from \"../../btn\";\r\nimport type { TMapContext } from \"../config/types\";\r\nimport { MapContext } from \"../context\";\r\nimport { getSlot, useVisibility } from \"../lib/panel\";\r\n\r\nexport type TMapPanelProps = PropsWithChildren<object>;\r\n\r\n/**\r\n * Внутренний компонент содержимого карты\r\n\r\n * @returns {ReactElement}\r\n */\r\nconst MapPanel: FC<TMapPanelProps> = ({ children }): ReactNode => {\r\n\r\n  const {\r\n    getCN, onAction, instanceRef, panelData, \r\n  } = useContext<TMapContext>(MapContext);\r\n\r\n  const prevPanelData = useRef<typeof panelData>(panelData);\r\n\r\n  const containerRef = useRef<HTMLElement>(null);\r\n\r\n  const { show, hide, isVisible } = useVisibility({\r\n    ref: containerRef,\r\n    delay: 100,\r\n    onShow: () => onOpen(),\r\n    onHide: () => onClose(),\r\n  });\r\n\r\n  const stateActions = {\r\n    setIsActive: (isActive: boolean) => isActive ? show() : hide(),\r\n  };\r\n\r\n  function onOpen() {\r\n    if (typeof panelData?.onOpen === \"function\") {\r\n      panelData?.onOpen();\r\n    }\r\n    if (typeof onAction === \"function\") {\r\n      onAction({\r\n        stateActions,\r\n        el: containerRef.current,\r\n        ref: instanceRef.current,\r\n        getData: () => {\r\n          return {\r\n            type: \"panelOpen\",\r\n            data: panelData,\r\n          };\r\n        },\r\n      });\r\n    }\r\n  }\r\n\r\n  function onClose() {\r\n    if (typeof panelData?.onClose === \"function\") {\r\n      panelData.onClose();\r\n    }\r\n    if (typeof onAction === \"function\") {\r\n      onAction({\r\n        stateActions: {},\r\n        el: containerRef.current,\r\n        ref: instanceRef.current,\r\n        getData: () => {\r\n          return {\r\n            type: \"panelClose\",\r\n            data: panelData,\r\n          };\r\n        },\r\n      });\r\n    }\r\n  }\r\n\r\n  const handleBtnClose = (e: MouseEvent) => {\r\n    e.preventDefault();\r\n    hide();\r\n  };\r\n\r\n  useEffect(() => {\r\n    if (prevPanelData.current !== panelData) {\r\n      if (panelData) {\r\n        show();\r\n      } else {\r\n        hide();\r\n      }\r\n      prevPanelData.current = panelData;\r\n    }\r\n  }, [ panelData ]);\r\n\r\n  const slot = useMemo(() => getSlot(children, panelData), [ children, panelData ]);\r\n\r\n  return isVisible && (\r\n    <aside ref={containerRef} className={getCN(\"panel\")}>\r\n      <div className={getCN(\"panelScroll\")}>\r\n        <div className={getCN(\"panelInner\")}>\r\n          {slot}\r\n        </div>\r\n      </div>\n      <div className={getCN(\"panelClose\")}>\n        <Btn onClick={handleBtnClose} icon={\"close\"} iconSize={\"large\"} label={null} />\n      </div>\n    </aside>\n  );\n\r\n};\r\n\r\nexport {\r\n  MapPanel,\r\n};\r\n"],"names":["MapPanel","children","getCN","onAction","instanceRef","panelData","useContext","MapContext","prevPanelData","useRef","containerRef","show","hide","isVisible","useVisibility","ref","delay","onShow","onOpen","onHide","onClose","stateActions","setIsActive","isActive","el","current","getData","type","data","handleBtnClose","e","preventDefault","useEffect","slot","useMemo","getSlot","_jsxs","className","_jsx","Btn","onClick","icon","iconSize","label"],"mappings":";;;;;GAwBA,MAAMA,SAA+B,EAAGC,sBAEtC,MAAMC,MACJA,MAAKC,SAAEA,SAAQC,YAAEA,YAAWC,UAAEA,WAC5BC,WAAwBC,YAE5B,MAAMC,cAAgBC,OAAyBJ,WAE/C,MAAMK,aAAeD,OAAoB,MAEzC,MAAME,KAAEA,KAAIC,KAAEA,KAAIC,UAAEA,WAAcC,cAAc,CAC9CC,IAAKL,aACLM,MAAO,IACPC,OAAQ,IAAMC,SACdC,OAAQ,IAAMC,YAGhB,MAAMC,aAAe,CACnBC,YAAcC,UAAsBA,SAAWZ,OAASC,QAG1D,SAASM,SACP,UAAWb,WAAWa,SAAW,WAC/Bb,WAAWa,SAEb,UAAWf,WAAa,WACtBA,SAAS,CACPkB,0BACAG,GAAId,aAAae,QACjBV,IAAKX,YAAYqB,QACjBC,QAAS,KACA,CACLC,KAAM,YACNC,KAAMvB,aAKhB,CAEA,SAASe,UACP,UAAWf,WAAWe,UAAY,WAChCf,UAAUe,UAEZ,UAAWjB,WAAa,WACtBA,SAAS,CACPkB,aAAc,CAAA,EACdG,GAAId,aAAae,QACjBV,IAAKX,YAAYqB,QACjBC,QAAS,KACA,CACLC,KAAM,aACNC,KAAMvB,aAKhB,CAEA,MAAMwB,eAAkBC,IACtBA,EAAEC,iBACFnB,QAGFoB,UAAU,KACR,GAAIxB,cAAciB,UAAYpB,UAAW,CACvC,GAAIA,UACFM,YAEAC,OAEFJ,cAAciB,QAAUpB,SAC1B,GACC,CAAEA,YAEL,MAAM4B,KAAOC,QAAQ,IAAMC,QAAQlC,SAAUI,WAAY,CAAEJ,SAAUI,YAErE,OAAOQ,WACLuB,KAAA,QAAA,CAAOrB,IAAKL,aAAc2B,UAAWnC,MAAM,SAASD,SAAA,CAClDqC,IAAA,MAAA,CAAKD,UAAWnC,MAAM,eAAeD,SACnCqC,IAAA,MAAA,CAAKD,UAAWnC,MAAM,cAAcD,SACjCgC,SAGLK,IAAA,MAAA,CAAKD,UAAWnC,MAAM,cAAcD,SAClCqC,IAACC,IAAG,CAACC,QAASX,eAAgBY,KAAM,QAASC,SAAU,QAASC,MAAO"}