import type React from 'react';
import type { OverrideRegistry } from './override.registry';
/**
 * This queues OverrideComponent registration until the registries are ready.
 */
export declare class RegistrationQueue {
    private queue;
    private overrideRegistry;
    setRegistries(overrideRegistry: OverrideRegistry): void;
    register(component: React.ComponentType, key: string, cloudProvider?: string): void;
    private flush;
}
export declare const overrideRegistrationQueue: RegistrationQueue;
/**
 * Registers a component as a replacement for some other component.
 *
 * This is a Class Decorator which should be applied to a React Component Class.
 * The component class will be used instead of the OverridableComponent with the same key.
 *
 * If an (optional) cloudProvider is specified, the component override takes effect only for that cloud provider.
 *
 * @Overrides('overrideKey', "aws")
 * class MyOverridingCmp extends React.Component {
 *   render() { return <h1>Overridden component</h1> }
 * }
 */
export declare function Overrides(key: string, cloudProvider?: string): <P, T extends React.ComponentClass<P, any>>(targetComponent: T) => void;
/**
 * Registers a component as a replacement for some other component.
 *
 * This should be applied to a React Function Component, since they cannot utilize decorators.
 * The component class will be used instead of the OverridableComponent with the same key.
 *
 * If an (optional) cloudProvider is specified, the component override takes effect only for that cloud provider.
 * If not, this is the same as using the override registry to override the component.
 */
export declare const overridesComponent: (targetComponent: React.ComponentType, key: string, cloudProvider?: string) => void;
