{
  "name": "portal",
  "type": "registry:component",
  "files": [
    {
      "path": "components/portal.tsx",
      "type": "registry:component",
      "content": "\"use client\";\n\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\n\ntype SlotProps = React.ComponentProps<typeof SlotPrimitive.Slot>;\n\ninterface PortalProps extends SlotProps {\n  container?: Element | DocumentFragment | null;\n}\n\nfunction subscribe() {\n  return () => {};\n}\n\nfunction getSnapshot() {\n  return true;\n}\n\nfunction getServerSnapshot() {\n  return false;\n}\n\nfunction Portal(props: PortalProps) {\n  const { container: containerProp, ...portalProps } = props;\n\n  const mounted = React.useSyncExternalStore(\n    subscribe,\n    getSnapshot,\n    getServerSnapshot,\n  );\n\n  const container =\n    containerProp ?? (mounted ? globalThis.document?.body : null);\n\n  if (!container) return null;\n\n  return ReactDOM.createPortal(\n    <SlotPrimitive.Slot {...portalProps} />,\n    container,\n  );\n}\n\nexport type { PortalProps };\nexport { Portal };\n",
      "target": ""
    }
  ]
}