/// <reference types="react" />
import type { Disposable } from '@difizen/mana-common';
import type { Contribution } from '@difizen/mana-syringe';
import type { ModalItem, ModalItemProps } from './modal-protocol';
import { ModalContribution } from './modal-protocol';
export declare class ModalItemView<T = any> implements Disposable {
    modalItem: ModalItem<T>;
    modalVisible: boolean;
    modalData?: T;
    constructor(modalItem: ModalItem<T>);
    open: (data: T) => void;
    close: () => void;
    shouldRender(): boolean;
    getModalProps(): ModalItemProps<T>;
    disposed: boolean;
    dispose(): void;
}
export declare class ModalService {
    protected modals: Map<string, ModalItem<any>>;
    modalViewList: ModalItemView<any>[];
    protected readonly contributions: Contribution.Provider<ModalContribution>;
    constructor(contributions: Contribution.Provider<ModalContribution>);
    init(): void;
    hasModal(modal: ModalItem<any> | string): boolean;
    getModal<T>(modal: ModalItem<T> | string): ModalItem<any> | undefined;
    registerModal(modal: ModalItem): void;
    registerModals(modals: ModalItem<any>[]): void;
    unregisterModal(modal: ModalItem): void;
    getOrCreateModalView<T>(modal: ModalItem<T>): ModalItemView<any>;
    openModal: <T>(modal: {
        id: string;
    } | string, data?: T | undefined) => void;
    closeModal: (modal: {
        id: string;
    } | string) => void;
    closeAllModal: () => void;
    getModalProps: <T>(itemView: ModalItemView<T>) => ModalItemProps<T>;
    shouldRenderModal: <T>(itemView: ModalItemView<T>) => boolean;
    renderModal<T>(itemView: ModalItemView<T>): React.ReactNode;
}
//# sourceMappingURL=modal-service.d.ts.map