import { Matrix4 } from '@vertexvis/geometry';
import { Point, Rectangle } from '@vertexvis/geometry';
import { Color, Disposable, Listener } from '@vertexvis/utils';
import { Drawable } from '../../lib/transforms/drawable';
import { ReglComponent } from '../../lib/webgl/regl-component';
export interface DrawableElementColors {
    xArrow?: Color.Color | string;
    yArrow?: Color.Color | string;
    zArrow?: Color.Color | string;
    twoAxesSquare?: Color.Color | string;
    hovered?: Color.Color | string;
    outline?: Color.Color | string;
}
export interface DrawableElementSizeScalars {
    xRotation?: number;
    yRotation?: number;
    zRotation?: number;
    xTranslation?: number;
    yTranslation?: number;
    zTranslation?: number;
    xyTranslation?: number;
    xzTranslation?: number;
    yzTranslation?: number;
}
export interface DisabledAxis {
    xRotation: boolean;
    yRotation: boolean;
    zRotation: boolean;
    xTranslation: boolean;
    yTranslation: boolean;
    zTranslation: boolean;
    xyTranslation: boolean;
    xzTranslation: boolean;
    yzTranslation: boolean;
}
export interface TransformWidgetCustomization {
    colors?: DrawableElementColors;
    scalars?: DrawableElementSizeScalars;
}
export declare class TransformWidget extends ReglComponent {
    private customization;
    private cursor?;
    private xAxis?;
    private yAxis?;
    private zAxis?;
    private xArrow?;
    private yArrow?;
    private zArrow?;
    private xRotation?;
    private xyRotationLine?;
    private xzRotationLine?;
    private yRotation?;
    private yxRotationLine?;
    private yzRotationLine?;
    private zRotation?;
    private zxRotationLine?;
    private zyRotationLine?;
    private xyTranslation?;
    private xzTranslation?;
    private yzTranslation?;
    private disabledAxis;
    private axisLines;
    private rotationLines;
    private translationMeshes;
    private rotationMeshes;
    private hoveredElement?;
    private transform?;
    private interactiveBounds?;
    private fullBounds?;
    private hoveredChanged;
    private xArrowFillColor?;
    private yArrowFillColor?;
    private zArrowFillColor?;
    private twoAxesSquareFillColor?;
    private hoveredArrowFillColor?;
    private outlineColor?;
    constructor(canvasElement: HTMLCanvasElement, customization?: TransformWidgetCustomization, initialDisabledAxes?: Partial<DisabledAxis>);
    dispose(): void;
    /**
     * @internal - visible for testing
     */
    getDrawableElements(): Drawable[];
    getFullBounds(): Rectangle.Rectangle | undefined;
    boundsContainsPoint(point: Point.Point): boolean;
    updateDisabledAxis(axis: Partial<DisabledAxis>): void;
    updateCursor(cursor?: Point.Point): void;
    updateTransform(transform?: Matrix4.Matrix4): void;
    updateColors(colors?: DrawableElementColors): void;
    updateScalars(scalars: DrawableElementSizeScalars): void;
    onHoveredChanged(listener: Listener<Drawable | undefined>): Disposable;
    private updateDisabledOnDrawables;
    private updateHovered;
    private clearHovered;
    private clearFillColorOfPreviouslyHovered;
    protected hasData(): boolean;
    protected createOrUpdateElements(): void;
    private createElements;
    private getXRotationColor;
    private getYRotationColor;
    private getZRotationColor;
    private getXTranslationColor;
    private getYTranslationColor;
    private getZTranslationColor;
    private getTwoAxesTranslationColor;
    private createRotationLines;
    private updateElements;
}
