import { Disposable, EventDispatcher } from '@vertexvis/utils';
/**
 * Represents a built-in [browser CSS
 * cursor](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor).
 */
export type CssCursor = 'auto' | 'default' | 'none' | 'context-menu' | 'help' | 'pointer' | 'progress' | 'wait' | 'cell' | 'crosshair' | 'text' | 'vertical-text' | 'alias' | 'copy' | 'move' | 'no-drop' | 'not-allowed' | 'grab' | 'grabbing' | 'all-scroll' | 'col-resize' | 'row-resize' | 'n-resize' | 'e-resize' | 's-resize' | 'w-resize' | 'ne-resize' | 'nw-resize' | 'se-resize' | 'sw-resize' | 'ew-resize' | 'ns-resize' | 'nesw-resize' | 'nwse-resize' | 'zoom-in' | 'zoom-out' | string;
/**
 * Represents a custom cursor that points to an image file and offset.
 */
export interface CustomCursor {
    url: string;
    offsetX?: number;
    offsetY?: number;
}
/**
 * Represents all possible cursor types.
 */
export type Cursor = CssCursor | CustomCursor;
/**
 * The cursor manager maintains a prioritized list of cursors for the viewer.
 *
 * Cursors with the highest priority will be considered active, where the most
 * recently added cursor will take precedence if there are multiple cursors with
 * the same priority.
 */
export declare class CursorManager {
    /**
     * A constant representing the lowest priority cursors.
     */
    static readonly LOW_PRIORITY = 0;
    /**
     * A constant representing a priority between `LOW_PRIORITY` and
     * `HIGH_PRIORITY`.
     */
    static readonly NORMAL_PRIORITY = 10;
    /**
     * A constant representing the high priority cursors.
     */
    static readonly HIGH_PRIORITY = 20;
    /**
     * An event dispatcher that emits an event when a cursor is added or removed.
     *
     * @see {@link CursorManager.add} to add a cursor.
     * @see {@link CursorManager.getActiveCursor} to query the current cursor.
     */
    readonly onChanged: EventDispatcher<void>;
    private cursors;
    private nextId;
    /**
     * Adds a cursor to the cursor manager, and returns an identifier that can be
     * used to remove the cursor.
     *
     * @param cursor The cursor to add.
     * @param priority The priority of the cursor. Higher values have higher
     * 	priority over lower values.
     * @returns An identifier for the cursor.
     * @see {@link CursorManager.getActiveCursor} to query the current cursor.
     */
    add(cursor: Cursor, priority?: number): Disposable;
    /**
     * Removes a cursor with the given ID, if it exists.
     *
     * @param cursorId The ID of the cursor to remove.
     */
    private remove;
    /**
     * Checks to see if an existing cursor matches the provided cursor and priority level.
     * The matching cursor is returned if found.
     *
     * @param cursorToCheck The cursor to check for duplicates against.
     * @param priorityToCheck The priority level to check for duplicates against.
     */
    private getExistingDuplicateCursor;
    /**
     * Returns the active cursor based on priority and insertion order.
     *
     * @see {@link CursorManager.add} to add a cursor.
     */
    getActiveCursor(): Cursor | undefined;
}
export declare const measurementCursor: {
    url: string;
    offsetX: number;
    offsetY: number;
};
export declare const measurementWithArrowCursor: {
    url: string;
    offsetX: number;
    offsetY: number;
};
export declare const pinCursor: {
    url: string;
    offsetX: number;
    offsetY: number;
};
export declare const labelPinCursor: {
    url: string;
    offsetX: number;
    offsetY: number;
};
export declare const boxQueryCursor: {
    url: string;
    offsetX: number;
    offsetY: number;
};
