import { EventEmitter, h } from '../../stencil-public-runtime';
import { Euler, Matrix4, Vector3 } from '@vertexvis/geometry';
import { TransformController } from '../../lib/transforms/controller';
import { Drawable } from '../../lib/transforms/drawable';
import { AngleUnitType, DistanceUnitType } from '../../lib/types';
import { ModifierKey } from '../../lib/types/keys';
import { PointAndPlacement } from './util';
export declare class ViewerTransformWidget {
    /**
     * An event that is emitted when the position of the widget changes.
     */
    positionChanged: EventEmitter<Vector3.Vector3 | undefined>;
    /**
     * An event that is emitted when the rotation of the widget changes.
     */
    rotationChanged: EventEmitter<Euler.Euler | undefined>;
    /**
     * An event that is emitted when the interaction has ended
     */
    interactionEnded: EventEmitter<Matrix4.Matrix4 | undefined>;
    /**
     * An event that is emitted an interaction with the widget has started
     */
    interactionStarted: EventEmitter<void>;
    /**
     * The viewer to connect to transforms. If nested within a <vertex-viewer>,
     * this property will be populated automatically.
     */
    viewer?: HTMLVertexViewerElement;
    /**
     * The starting position of this transform widget. This position will be updated
     * as transforms occur. Setting this value to `undefined` will remove the widget.
     */
    position?: Vector3.Vector3;
    /**
     * The starting angle for the transform widget. This rotation will be updated
     * as the rotations occur.
     */
    rotation?: Euler.Euler;
    /**
     * The controller that is responsible for performing transforms.
     */
    controller?: TransformController;
    /**
     * Determines whether the x-rotation is disabled on the widget
     */
    xRotationDisabled: boolean;
    /**
     * Determines whether the y-rotation is disabled on the widget
     */
    yRotationDisabled: boolean;
    /**
     * Determines whether the z-rotation is disabled on the widget
     */
    zRotationDisabled: boolean;
    /**
     * Determines whether the x-translation is disabled on the widget
     */
    xTranslationDisabled: boolean;
    /**
     * Determines whether the y-translation is disabled on the widget
     */
    yTranslationDisabled: boolean;
    /**
     * Determines whether the z-translation is disabled on the widget
     */
    zTranslationDisabled: boolean;
    /**
     * Determines whether the xy-translation is disabled on the widget
     */
    xyTranslationDisabled: boolean;
    /**
     * Determines whether the xz-translation is disabled on the widget
     */
    xzTranslationDisabled: boolean;
    /**
     * Determines whether the yz-translation is disabled on the widget
     */
    yzTranslationDisabled: boolean;
    /**
     * Whether to show inputs beside the widget handles when they are interacted with.
     * Defaults to `true`.
     */
    showInputs: boolean;
    /**
     * The unit to show for translation inputs. Defaults to `millimeters`.
     *
     * @see DistanceUnitType
     */
    distanceUnit: DistanceUnitType;
    /**
     * The unit to show for rotation inputs. Defaults to `degrees`.
     *
     * @see AngleUnitType
     */
    angleUnit: AngleUnitType;
    /**
     * The number of decimal places to show in the input. Defaults to `1`.
     */
    decimalPlaces: number;
    /**
     * When defined, the widget will snap to the degree of the nearest multiple of
     * the given number when the user is rotating with the widget and holding the
     * key defined by rotationSnapKey. Defaults to undefined.
     */
    rotationSnapDegrees?: number;
    /**
     * When rotationSnapDegrees is defined, the widget will snap to the degree of the
     * nearest multiple of the given number when the user is rotating with the widget
     * and holding the key defined here. Defaults to the shift key.
     */
    rotationSnapKey: ModifierKey;
    /**
     * Scalar to increase the size of the translation handles of this widget.
     * Values above zero and below three will result in the best visual representation
     * of the handles, and values above three may produce unexpected results.
     *
     * Defaults to `1`.
     */
    translationHandleScalar: number;
    /**
     * Scalar to increase the size of the rotation handles of this widget.
     * Values above zero and below three will result in the best visual representation
     * of the handles, and values above three may produce unexpected results.
     *
     * Defaults to `1`.
     */
    rotationHandleScalar: number;
    /**
     * Specifies the frequency, in milliseconds, to update the transform while interacting with the widget.
     *
     * This delay is used to group events happening in quick succession and results in smoother
     * widget movement.
     */
    interactionThrottle: number;
    /**
     * **EXPERIMENTAL.**
     *
     * Enables Command+Z and Control+Z keybindings to perform an undo of
     * the previous delta transformation.
     *
     * @see `EXPERIMENTAL_undo`
     */
    EXPERIMENTAL_undoKeybindings: boolean;
    /**
     * @internal
     * @ignore
     *
     * Visible for testing.
     */
    hovered?: Drawable;
    protected inputPosition?: PointAndPlacement;
    protected inputValue: number;
    protected isEndingTransform: boolean;
    protected inputShouldFocus: boolean;
    private hostEl;
    private startingTransform?;
    private currentTransform?;
    private dragStartTransform?;
    private xArrowColor;
    private yArrowColor;
    private zArrowColor;
    private twoAxesSquareColor;
    private hoveredColor;
    private widget?;
    private lastDragged?;
    private dragging?;
    private lastAngle;
    private lastWorldPosition?;
    private lastInputValue?;
    private canvasBounds?;
    private inputBounds?;
    private canvasResizeObserver?;
    private inputResizeObserver?;
    private hostStyleObserver?;
    private canvasRef?;
    private inputWrapperRef?;
    private inputRef?;
    private hoveredChangeDisposable?;
    private interactionTimer?;
    private lastMouseEvent?;
    protected componentDidLoad(): void;
    protected disconnectedCallback(): void;
    protected componentDidRender(): void;
    /**
     * **EXPERIMENTAL.**
     *
     * Performs an undo of the most recent set of transform manipulations,
     * categorized by the last pause in interactivity (pointerup on a handle,
     * Enter press on an input, keyup on an input).
     *
     * Note that this *does not* work repeatedly. I.e. only one undo can be
     * performed, and once another set of transform manipulations is performed,
     * the history is lost.
     */
    EXPERIMENTAL_undo(): Promise<void>;
    /**
     * @ignore
     */
    protected handleViewerChanged(newViewer?: HTMLVertexViewerElement, oldViewer?: HTMLVertexViewerElement): void;
    /**
     * @ignore
     */
    protected handleDisabledPropertyChanged(): void;
    /**
     * @ignore
     */
    protected handleTransformHandleScalarChanged(): void;
    /**
     * @ignore
     */
    protected handleRotationChanged(newRotation?: Euler.Euler, oldRotation?: Euler.Euler): void;
    /**
     * @ignore
     */
    protected handlePositionChanged(newPosition?: Vector3.Vector3, oldPosition?: Vector3.Vector3): void;
    /**
     * @ignore
     */
    protected handleInputFormattingChanged(): void;
    render(): h.JSX.IntrinsicElements;
    private handleHoveredDrawableChanged;
    private handleViewerFrameDrawn;
    private handleViewerDimensionsChange;
    private handleResize;
    private handleInputResize;
    private handleStyleChange;
    private handlePointerMove;
    private handleBeginDrag;
    private handleDragWithTimer;
    private handleDrag;
    private handleEndTransform;
    private handleInputStep;
    private handleInputChange;
    private handleKeyDown;
    private updateTransformFromInput;
    private updatePropsFromViewer;
    private transform;
    private handleSettingDisabledAxis;
    private setupTransformWidget;
    private updateCanvasBounds;
    private updateInputValue;
    private updateInputPosition;
    private beginEndTransform;
    private completeEndTransform;
    private isModifyingAngleUnits;
    private getTranslationScalar;
    private getRotationScalar;
    private getDisplayedUnits;
    private getDisplayedAngle;
    private getDisplayedDistance;
    private getTransformForNewPosition;
    private getTransformForNewRotation;
    private getCanvasBounds;
    private getTransformWidget;
}
