/// <reference types="react" />
import { RuntimeComponentSpec, RuntimeTraitSpec, RuntimeModuleSpec, ApplicationComponent } from '@meta-ui/core';
import { ComponentImplementationProps, TraitImplementation } from 'src/types/RuntimeSchema';
export declare type ComponentImplementation<T = any> = React.FC<T & ComponentImplementationProps>;
declare type ImplementedRuntimeComponent = RuntimeComponentSpec & {
    impl: ComponentImplementation;
};
declare type ImplementedRuntimeTrait = RuntimeTraitSpec & {
    impl: TraitImplementation;
};
declare type ImplementedRuntimeModule = RuntimeModuleSpec & {
    components: ApplicationComponent[];
};
export declare class Registry {
    components: Map<string, Map<string, ImplementedRuntimeComponent>>;
    traits: Map<string, Map<string, ImplementedRuntimeTrait>>;
    modules: Map<string, Map<string, ImplementedRuntimeModule>>;
    registerComponent(c: ImplementedRuntimeComponent): void;
    getComponent(version: string, name: string): ImplementedRuntimeComponent;
    getComponentByType(type: string): ImplementedRuntimeComponent;
    registerTrait(t: ImplementedRuntimeTrait): void;
    getTrait(version: string, name: string): ImplementedRuntimeTrait;
    getTraitByType(type: string): ImplementedRuntimeTrait;
    getAllTraitTypes(): string[];
    registerModule(c: ImplementedRuntimeModule): void;
    getModule(version: string, name: string): ImplementedRuntimeModule;
    getModuleByType(type: string): ImplementedRuntimeModule;
}
export declare function initRegistry(): Registry;
export {};
