import { Point, Vector3 } from '@vertexvis/geometry';
import { Color } from '@vertexvis/utils';
import { Pin, PinModel, PinStyleAttributes, ViewerPinToolMode, ViewerPinToolType } from './model';
export interface Draggable {
    id: string;
    lastPoint?: Point.Point;
}
/**
 * The `PinController` is responsible for adding pin entities to the viewer canvas
 */
export declare class PinController {
    private model;
    private mode;
    private type;
    private styleAttributes;
    private draggable?;
    constructor(model: PinModel, mode?: ViewerPinToolMode, type?: ViewerPinToolType, styleAttributes?: PinStyleAttributes | undefined);
    /**
     * Registers an entity to place on the canvas and places the pin on the associated part.
     *
     * @param pin The pin entity
     * @returns A void promise
     */
    addPin(pin: Pin): void;
    /**
     * Clears all entities and returns a promise that resolves with an empty list
     * of pin results.
     */
    clearPins(): void;
    /**
     * Deregisters an entity and performs a pin if this entity was
     * removed.
     *
     * @param entity The entity to remove.
     * @returns A promise that resolves with the results after removing this
     * entity.
     */
    removePin(pin: Pin): void;
    /**
     * Registers a set of entities and adds a pin
     *
     * @param entities The pin entities to draw.
     * @returns A promise that resolves with the results after registering these
     * entities.
     */
    setPins(pins: Set<Pin>): void;
    /**
     * Sets the set of entities to be placed with the model.
     *
     * @param pin A pin to set
     * @returns `true` if the entity has been added.
     */
    setPin(pin: Pin): void;
    /**
     * Updates an existing pin
     * @param pin A pin to set
     * @returns `true` if the entity has been updated, false otherwise
     */
    updatePin(pin: Pin): void;
    /**
     * Tells the controller which pin is selected in the model
     * @param pinId
     */
    setSelectedPinId(pinId?: string): void;
    getToolMode(): ViewerPinToolMode;
    getToolType(): ViewerPinToolType;
    setToolMode(mode: ViewerPinToolMode): void;
    setToolType(type: ViewerPinToolType): void;
    getDraggable(): Draggable | undefined;
    setDraggable(draggable: Draggable | undefined): void;
    setPrimaryColor(color?: Color.Color | string): void;
    setAccentColor(color?: Color.Color | string): void;
    getStyleAttributes(): PinStyleAttributes | undefined;
    updateDraggable(draggable: Draggable, worldPosition: Vector3.Vector3, partId?: string): void;
}
