{"ast":null,"code":"import _slicedToArray from \"@babel/runtime/helpers/slicedToArray\";\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nimport React, { useEffect } from 'react';\nimport StyleSheet from \"react-native-web/dist/exports/StyleSheet\";\nimport View from \"react-native-web/dist/exports/View\";\nvar PortalContext = React.createContext(null);\nvar globalOverlayCounter = 0;\nexport function PortalProvider(props) {\n  var _React$useState = React.useState([]),\n      _React$useState2 = _slicedToArray(_React$useState, 2),\n      items = _React$useState2[0],\n      setItems = _React$useState2[1];\n\n  var setOverlayItem = function setOverlayItem(item) {\n    var overlayId = ++globalOverlayCounter;\n    setItems(function (prev) {\n      return prev.concat([{\n        id: overlayId,\n        node: item\n      }]);\n    });\n    return overlayId;\n  };\n\n  var updateOverlayItem = function updateOverlayItem(id, node) {\n    setItems(function (prev) {\n      return prev.map(function (item) {\n        if (item.id === id) {\n          return {\n            id: id,\n            node: node\n          };\n        }\n\n        return item;\n      });\n    });\n  };\n\n  var removeOverlayItem = function removeOverlayItem(id) {\n    setItems(function (prev) {\n      var newItems = prev.filter(function (item) {\n        return item.id !== id;\n      });\n      return newItems;\n    });\n  };\n\n  return React.createElement(PortalContext.Provider, {\n    value: {\n      items: items,\n      setOverlayItem: setOverlayItem,\n      removeOverlayItem: removeOverlayItem,\n      updateOverlayItem: updateOverlayItem\n    }\n  }, props.children, items.map(function (item) {\n    return React.createElement(React.Fragment, {\n      key: item.id\n    }, item.node);\n  }));\n}\n\nfunction OverlayView(props) {\n  return React.createElement(View, _extends({\n    pointerEvents: \"box-none\",\n    style: StyleSheet.absoluteFill,\n    collapsable: false\n  }, props));\n}\n\nexport var OverlayProvider = PortalProvider;\nexport function OverlayContainer(props) {\n  var context = usePortalProvider();\n  var overlayId = React.useRef(undefined);\n  var contents = React.createElement(OverlayView, props);\n  useEffect(function () {\n    if (overlayId.current === undefined) {\n      overlayId.current = context === null || context === void 0 ? void 0 : context.setOverlayItem(contents);\n    } else {\n        if (overlayId.current) {\n          context === null || context === void 0 ? void 0 : context.updateOverlayItem(overlayId.current, contents);\n        }\n      }\n  }, [props]);\n  useEffect(function () {\n    return function () {\n      if (overlayId.current) {\n        context === null || context === void 0 ? void 0 : context.removeOverlayItem(overlayId.current);\n      }\n    };\n  }, []);\n  return null;\n}\n\nfunction usePortalProvider() {\n  var context = React.useContext(PortalContext);\n  return context;\n}","map":{"version":3,"sources":["Portal.tsx"],"names":["PortalContext","React","globalOverlayCounter","setOverlayItem","item","overlayId","setItems","prev","id","node","updateOverlayItem","removeOverlayItem","newItems","items","props","StyleSheet","OverlayProvider","context","usePortalProvider","contents","useEffect"],"mappings":"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","sourcesContent":["import React, { useEffect } from 'react';\nimport type { ReactNode } from 'react';\nimport { StyleSheet, View, ViewProps } from 'react-native';\n\ntype OverlayItem = {\n  id: number;\n  node: ReactNode;\n};\n\ninterface PortalContext {\n  items: Array<OverlayItem>;\n  setOverlayItem: (node: ReactNode) => number;\n  removeOverlayItem: (id: number) => void;\n  updateOverlayItem: (id: number, node: ReactNode) => void;\n}\n\ninterface ModalProviderProps extends ViewProps {\n  children: ReactNode;\n  provider?: boolean;\n}\n\nconst PortalContext = React.createContext<PortalContext | null>(null);\n\nlet globalOverlayCounter = 0;\n\nexport function PortalProvider(props: { children: ReactNode }) {\n  const [items, setItems] = React.useState<Array<OverlayItem>>([]);\n\n  const setOverlayItem = (item: ReactNode) => {\n    const overlayId = ++globalOverlayCounter;\n    setItems((prev) => prev.concat([{ id: overlayId, node: item }]));\n    return overlayId;\n  };\n\n  const updateOverlayItem = (id: number, node: ReactNode) => {\n    setItems((prev) =>\n      prev.map((item) => {\n        if (item.id === id) {\n          return { id, node };\n        }\n        return item;\n      })\n    );\n  };\n\n  const removeOverlayItem = (id: number) => {\n    setItems((prev) => {\n      const newItems = prev.filter((item) => item.id !== id);\n      return newItems;\n    });\n  };\n\n  return (\n    <PortalContext.Provider\n      value={{ items, setOverlayItem, removeOverlayItem, updateOverlayItem }}\n    >\n      {props.children}\n\n      {/* Render Overlays */}\n      {items.map((item) => {\n        return <React.Fragment key={item.id}>{item.node}</React.Fragment>;\n      })}\n    </PortalContext.Provider>\n  );\n}\n\nfunction OverlayView(props: ModalProviderProps) {\n  return (\n    <View\n      pointerEvents=\"box-none\"\n      style={StyleSheet.absoluteFill}\n      collapsable={false}\n      {...props}\n    />\n  );\n}\n\nexport const OverlayProvider = PortalProvider;\n\nexport function OverlayContainer(props: ModalProviderProps) {\n  const context = usePortalProvider();\n  const overlayId = React.useRef<number | undefined>(undefined);\n  let contents = <OverlayView {...props} />;\n\n  useEffect(\n    () => {\n      // Mount\n      if (overlayId.current === undefined) {\n        overlayId.current = context?.setOverlayItem(contents);\n      }\n      // Update\n      else {\n        if (overlayId.current) {\n          context?.updateOverlayItem(overlayId.current, contents);\n        }\n      }\n    },\n    // To re-render the child\n    [props]\n  );\n\n  // Unmount\n  useEffect(() => {\n    return () => {\n      if (overlayId.current) {\n        context?.removeOverlayItem(overlayId.current);\n      }\n    };\n  }, []);\n\n  return null;\n}\n\nfunction usePortalProvider() {\n  const context = React.useContext(PortalContext);\n  return context;\n}\n"]},"metadata":{},"sourceType":"module"}