import React, { ReactNode } from 'react';
import ReactModal from 'react-modal';

interface ReactModalProps extends Omit<ReactModal.Props, "appElement"> {
    name: string;
    appElement?: string | HTMLElement;
}
interface GlobalModalsProps {
    children: ReactNode;
}

declare const GlobalModals: React.FC<GlobalModalsProps>;

declare const Modal: ({ children, isOpen, appElement, name, ...rest }: ReactModalProps) => React.JSX.Element;

declare const ModalProvider: ({ children }: {
    children: React.ReactNode;
}) => React.JSX.Element;

declare function useModal(): {
    modals: string[];
    openedModals: Record<string, boolean>;
    modalProps: Record<string, Record<string, any>>;
    openModal: (name: string, props?: Record<string, unknown>) => void;
    closeModal: (name: string) => void;
};

export { GlobalModals, Modal, type ReactModalProps as ModalProps, ModalProvider, useModal };
