import { BaseKosModelRegistrationBean } from '../../types/model';
import { IKosModelRegistration, KosCompanionModelType } from '../types/registration';
import { KosModelRegistrationType } from './model-registration';
declare global {
    interface Window {
        KosRegistry: {
            coreModels: Map<string, IKosModelRegistration>;
            preloadModels: string[];
            companionModels: Map<string, KosCompanionModelType<any>[]>;
            models: Map<string, BaseKosModelRegistrationBean<any, any>>;
        };
    }
}
export interface RegistrationResult<R> {
    preload: (type: string) => RegistrationResult<R>;
    model: (registration: BaseKosModelRegistrationBean<any, any> | KosModelRegistrationType<any, any>, preload?: boolean) => RegistrationResult<R>;
    companion: (parentType: string, companion: KosCompanionModelType<any>) => RegistrationResult<R>;
    legacy: <T extends IKosModelRegistration>(type: string, registration: T) => RegistrationResult<R>;
    root: R;
}
export declare const RegistrationManager: {
    model: {
        registerLegacyModel: <R>(root: R) => <T extends IKosModelRegistration>(type: string, registration: T) => RegistrationResult<R>;
        preloadModel: <R>(root: R) => (type: string) => RegistrationResult<R>;
        register: <R>(root: R) => <T extends BaseKosModelRegistrationBean<any, any> | KosModelRegistrationType<any, any>>(registration: T, preload?: boolean) => RegistrationResult<R>;
        get: (type: string) => BaseKosModelRegistrationBean<any, any> | undefined;
        getAll: () => [string, BaseKosModelRegistrationBean<any, any>][];
        getPreloadModels: () => string[];
        getLegacyModels: () => Record<string, IKosModelRegistration>;
    };
    companion: {
        register: <R>(root: R) => (parentType: string, companion: KosCompanionModelType<any>) => RegistrationResult<R>;
        getAll: () => [string, KosCompanionModelType<any>[]][];
    };
};
export declare const registerLegacyModel: <R>(root: R) => <T extends IKosModelRegistration>(type: string, registration: T) => RegistrationResult<R>;
export declare const registerKosModel: <R>(root: R) => <T extends BaseKosModelRegistrationBean<any, any> | KosModelRegistrationType<any, any>>(registration: T, preload?: boolean) => RegistrationResult<R>;
export declare const registerCompanionModel: <R>(root: R) => (parentType: string, companion: KosCompanionModelType<any>) => RegistrationResult<R>;
export declare const preloadKosModel: <R>(root: R) => (type: string) => RegistrationResult<R>;
//# sourceMappingURL=registration-manager.d.ts.map