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 = ModalComponentProps> {
    id: string;
    type?: ModalType;
    component?: FunctionComponent<P>;
    props?: P;
    element?: ReactElement<P>;
    onDismiss?: () => unknown;
    isActive?: boolean;
}
export interface PushModalParams<P extends Partial<ModalComponentProps> = Partial<ModalComponentProps>> {
    component?: FunctionComponent<P>;
    props?: P;
    element?: ReactElement<P>;
    type?: ModalType;
    onDismiss?: () => unknown;
}
export type PushModalFunction<P extends Partial<ModalComponentProps> = Partial<ModalComponentProps>> = (params: PushModalParams<P>) => string | undefined;
export interface ModalsState<P extends Partial<ModalComponentProps> = any> {
    modals: Modal[];
    pushModal: PushModalFunction<P>;
    dismissModal: (id: string) => unknown;
}
export declare function useModals<P extends Partial<ModalComponentProps> = any>(): ModalsState<P>;
export interface ModalContainerProps<P extends ModalComponentProps = ModalComponentProps> extends ModalComponentProps {
    modal: Modal<P>;
}
export interface ModalsContextProps {
    children?: ReactNode;
}
export declare function ModalsContext({ children }: ModalsContextProps): ReactElement;
