import React, { Component } from 'react';
import { Id } from '@monstrosity/types/id';
interface ProviderState {
    selectedKey?: string;
}
declare type ReactChild = React.ReactChild | React.ReactChild[] | string;
interface BaseProps {
    showPopout?: (request: Request) => void | string;
    closePopout?: () => void;
}
export interface InjectedProps extends BaseProps {
    children?: React.ReactChild[];
}
export interface ProviderProps {
    children?: ReactChild;
    isMobile?: boolean;
}
export interface Request {
    content: ReactChild;
    onClose: () => void;
    width?: string;
    id: Id;
    opacity?: number;
    onMaskClick: () => void;
}
export declare class PopoutProvider extends Component<ProviderProps, ProviderState> {
    state: {
        selectedKey: undefined;
    };
    private currentlyShowing?;
    private queue;
    show: (request: Request, closeable?: boolean) => string;
    close: () => void;
    render(): JSX.Element;
    private renderQueueItems;
    private onClose;
    private removeItem;
    private updateCurrentlyShowing;
}
export interface PopoutChildProps {
    onShowPopout: () => void;
    onClosePopout: () => void;
}
interface PopoutProps {
    id: Id;
    opacity?: number;
    children: (props: PopoutChildProps) => ReactChild;
    content: (props: PopoutChildProps) => JSX.Element;
    afterClose?: () => void;
}
export declare const Popoutable: React.SFC<PopoutProps>;
export {};
