import type { IViewer } from "../viewer/IViewer";
/**
 * Defines the dragger interface for the viewer.
 */
export interface IDragger {
    /**
     * The name of the dragger. Use this name to activate dragger using
     * {@link Viewer.setActiveDragger | Viewer.setActiveDragger()}
     */
    name?: string;
    /**
     * Deprecated since `25.12`. Use costructor instead to initialize dragger.
     *
     * @deprecated
     */
    initialize?(): void;
    /**
     * Releases resources allocated by the dragger.
     */
    dispose(): void;
    /**
     * Deprecated since `25.12`. Instead, register an `update` event listener for the viewer and update the
     * dragger preview in the event handler.
     *
     * @deprecated
     */
    updatePreview?(): void;
}
/**
 * Dragger provider is a function that creates a dragger instance for the specified viewer.
 */
export interface IDraggerProvider {
    /**
     * @param viewer - Viewer instance that creates the dragger.
     */
    (viewer: any): IDragger;
}
export type IDraggersMap = Map<string, IDraggerProvider>;
/**
 * Defines the viewer draggers registry interface.
 */
export interface IDraggersRegistry {
    /**
     * Binds a dragger name to a dragger provider. Registering a dragger with an existing name twice
     * overrides the existing dragger.
     *
     * @param name - Unique name for the dragger.
     * @param provider - Dragger provider.
     */
    registerDragger(name: string, provider: IDraggerProvider): void;
    /**
     * Registers an alias for a dragger.
     *
     * @param name - Unique name for the dragger.
     * @param alias - Dragger alias string.
     */
    registerDraggerAlias(name: string, alias: string): void;
    /**
     * Returns a list of registered draggers.
     */
    getDraggers(): IDraggersMap;
    /**
     * Returns the specified dragger provider or `undefined` when the dragger doesn't exists.
     *
     * @param name - Dragger name.
     */
    getDragger(name: string): IDraggerProvider | undefined;
    /**
     * Creates the dragger denoted by the given name. Returns `null` if a dragger with given name not
     * registered.
     *
     * @param name - Dragger name.
     * @param viewer - Viewer instance that wants to create the dragger.
     */
    createDragger(name: string, viewer: IViewer): IDragger | null;
}
