import { FunctionComponent, ReactElement, ReactNode } from 'react';
export interface ModalComponentProps {
    id: string;
    dismissModal: () => unknown;
}
export type ModalType = 'pop-up' | 'overlay' | 'banner' | 'message';
export interface Modal<P extends ModalComponentProps = any> {
    id: string;
    type?: ModalType;
    component?: FunctionComponent<P>;
    props?: P;
    element?: ReactElement<P>;
    onDismiss?: () => unknown;
    isActive?: boolean;
    disableDismiss?: boolean;
}
export interface PushModalParams<P extends ModalComponentProps = any> {
    component?: FunctionComponent<P>;
    props?: P;
    element?: ReactElement<P>;
    type?: ModalType;
    onDismiss?: () => unknown;
    disableDismiss?: boolean;
}
export type PushModalFunction<P extends ModalComponentProps = any> = (params: PushModalParams<P>) => string | undefined;
export interface ModalsState {
    modals: Modal[];
    pushModal: PushModalFunction;
    dismissModal: (id: string) => unknown;
}
export declare function useModals(): ModalsState;
export interface ModalContainerProps<P extends ModalComponentProps = any> extends ModalComponentProps {
    modal: Modal<P>;
}
export interface ModalsContextProps {
    children?: ReactNode;
}
export declare function ModalsContext({ children }: ModalsContextProps): ReactElement;
