{ "name": "portal", "type": "registry:component", "files": [ { "path": "components/portal.tsx", "type": "registry:component", "content": "\"use client\";\n\nimport { useRender } from \"@base-ui/react/use-render\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\n\ninterface PortalProps extends useRender.ComponentProps<\"div\"> {\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, render, ...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 const element = useRender({\n props: portalProps,\n render,\n state: {\n slot: \"portal\",\n },\n });\n\n if (!container) return null;\n\n return ReactDOM.createPortal(element, container);\n}\n\nexport type { PortalProps };\nexport { Portal };\n", "target": "" } ] }