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, };