import * as React from 'react'; declare const ELEMENT_TYPE_HTML = "html"; declare const ELEMENT_TYPE_SVG = "svg"; type BaseOptions = { attributes?: { [key: string]: string; }; }; type HtmlOptions = BaseOptions & { containerElement?: keyof HTMLElementTagNameMap; }; type SvgOptions = BaseOptions & { containerElement?: keyof SVGElementTagNameMap; }; type Component

= React.Component

| React.ComponentType

; type ComponentProps> = C extends Component ? P : never; interface PortalNodeBase> { setPortalProps(p: ComponentProps): void; getInitialPortalProps(): ComponentProps; mount(newParent: Node, placeholder: Node): void; unmount(expectedPlaceholder?: Node): void; } export interface HtmlPortalNode = Component> extends PortalNodeBase { element: HTMLElement; elementType: typeof ELEMENT_TYPE_HTML; } export interface SvgPortalNode = Component> extends PortalNodeBase { element: SVGElement; elementType: typeof ELEMENT_TYPE_SVG; } type AnyPortalNode = Component> = HtmlPortalNode | SvgPortalNode; interface InPortalProps { node: AnyPortalNode; children: React.ReactNode; } declare class InPortal extends React.PureComponent { constructor(props: InPortalProps); addPropsChannel: () => void; componentDidMount(): void; componentDidUpdate(): void; render(): React.ReactPortal; } type OutPortalProps> = { node: AnyPortalNode; } & Partial>; declare class OutPortal> extends React.PureComponent> { private placeholderNode; private currentPortalNode?; constructor(props: OutPortalProps); passPropsThroughPortal(): void; componentDidMount(): void; componentDidUpdate(): void; componentWillUnmount(): void; render(): React.DetailedReactHTMLElement, HTMLElement>; } declare const createHtmlPortalNode: = Component>(options?: HtmlOptions) => HtmlPortalNode; declare const createSvgPortalNode: = Component>(options?: SvgOptions) => SvgPortalNode; export { createHtmlPortalNode, createSvgPortalNode, InPortal, OutPortal, };