import type { IViewer } from "../viewer/IViewer";
/**
 * Defines the component of the viewer.
 */
export interface IComponent {
    /**
     * The name of the component.
     */
    name?: string;
    /**
     * Releases resources allocated by the component.
     */
    dispose(): void;
}
/**
 * Defines the component provider function.
 */
export interface IComponentProvider {
    /**
     * @param viewer - Viewer instance that creates the component.
     */
    (viewer: any): IComponent;
}
/**
 * Defines the viewer components registry interface.
 */
export interface IComponentsRegistry {
    /**
     * Binds a component name to a component. Registering a component with an existing name twice overrides
     * the existing component.
     *
     * @param name - Unique name for the component.
     * @param provider - Component provider.
     */
    registerComponent(name: string, provider: IComponentProvider): void;
    /**
     * Registers an alias for a component.
     *
     * @param name - Unique name for the component.
     * @param alias - Component alias string.
     */
    registerComponentAlias(name: string, alias: string): void;
    /**
     * Returns a list of registered components.
     */
    getComponents(): Map<string, IComponentProvider>;
    /**
     * Creates the component denoted by the given name. Returns `null` if a component with given name not
     * registered.
     *
     * @param name - Component name.
     * @param viewer - Viewer instance that wants to create the component.
     */
    createComponent(name: string, viewer: IViewer): IComponent | null;
}
