import * as React from 'react';
import { IDisposable } from '../lifecycle';
import { IFrameworkPart } from '../panel/types';
export interface ReactPortalStore {
    addPortal: (portal: React.ReactPortal) => IDisposable;
}
export declare const ReactPartContext: React.Context<{}>;
export declare class ReactPart<P extends object, C extends object = {}> implements IFrameworkPart {
    private readonly parent;
    private readonly portalStore;
    private readonly component;
    private readonly parameters;
    private readonly context?;
    private componentInstance?;
    private ref?;
    private disposed;
    constructor(parent: HTMLElement, portalStore: ReactPortalStore, component: React.FunctionComponent<P>, parameters: P, context?: C | undefined);
    update(props: {
        [index: string]: any;
    }): void;
    private createPortal;
    dispose(): void;
}
declare type PortalLifecycleHook = () => [
    React.ReactPortal[],
    (portal: React.ReactPortal) => IDisposable
];
/**
 * A React Hook that returns an array of portals to be rendered by the user of this hook
 * and a disposable function to add a portal. Calling dispose removes this portal from the
 * portal array
 */
export declare const usePortalsLifecycle: PortalLifecycleHook;
export declare function isReactElement(element: any | React.ReactElement): element is React.ReactElement;
export {};
