/**
 * Copyright (c) 2018-2026 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author Alexander Rose <alexander.rose@weirdbyte.de>
 * @author David Sehnal <david.sehnal@gmail.com>
 * @author Herman Bergwerf <post@hbergwerf.nl>
 *
 * This code has been modified from https://github.com/mrdoob/three.js/,
 * copyright (c) 2010-2018 three.js authors. MIT License
 */
import { Vec3 } from '../../mol-math/linear-algebra.js';
import { Viewport } from '../camera/util.js';
import { InputObserver } from '../../mol-util/input/input-observer.js';
import { ParamDefinition as PD } from '../../mol-util/param-definition.js';
import { Camera } from '../camera.js';
import { Binding } from '../../mol-util/binding.js';
import { Scene } from '../../mol-gl/scene.js';
export declare const DefaultTrackballBindings: {
    dragRotate: Binding;
    dragRotateZ: Binding;
    dragPan: Binding;
    dragZoom: Binding;
    dragFocus: Binding;
    dragFocusZoom: Binding;
    scrollZoom: Binding;
    scrollFocus: Binding;
    scrollFocusZoom: Binding;
    keyMoveForward: Binding;
    keyMoveBack: Binding;
    keyMoveLeft: Binding;
    keyMoveRight: Binding;
    keyMoveUp: Binding;
    keyMoveDown: Binding;
    keyRollLeft: Binding;
    keyRollRight: Binding;
    keyPitchUp: Binding;
    keyPitchDown: Binding;
    keyYawLeft: Binding;
    keyYawRight: Binding;
    boostMove: Binding;
    enablePointerLock: Binding;
};
export declare const TrackballControlsParams: {
    rotateSpeed: PD.Numeric;
    zoomSpeed: PD.Numeric;
    panSpeed: PD.Numeric;
    moveSpeed: PD.Numeric;
    boostMoveFactor: PD.Numeric;
    flyMode: PD.BooleanParam;
    animate: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
        speed: number;
        axis: Vec3;
    }>, "spin"> | PD.NamedParams<PD.Normalize<{
        speed: number;
        angle: number;
        axis: Vec3;
    }>, "rock">>;
    staticMoving: PD.BooleanParam;
    dynamicDampingFactor: PD.Numeric;
    minDistance: PD.Numeric;
    maxDistance: PD.Numeric;
    gestureScaleFactor: PD.Numeric;
    maxWheelDelta: PD.Numeric;
    /**
     * minDistance = minDistanceFactor * boundingSphere.radius + minDistancePadding
     * maxDistance = max(maxDistanceFactor * boundingSphere.radius, maxDistanceMin)
     */
    autoAdjustMinMaxDistance: PD.Mapped<PD.NamedParams<PD.Normalize<unknown>, "off"> | PD.NamedParams<PD.Normalize<{
        minDistanceFactor: number;
        minDistancePadding: number;
        maxDistanceFactor: number;
        maxDistanceMin: number;
    }>, "on">>;
};
export type TrackballControlsProps = PD.Values<typeof TrackballControlsParams>;
export declare const DefaultTrackballControlsAttribs: {
    bindings: {
        dragRotate: Binding;
        dragRotateZ: Binding;
        dragPan: Binding;
        dragZoom: Binding;
        dragFocus: Binding;
        dragFocusZoom: Binding;
        scrollZoom: Binding;
        scrollFocus: Binding;
        scrollFocusZoom: Binding;
        keyMoveForward: Binding;
        keyMoveBack: Binding;
        keyMoveLeft: Binding;
        keyMoveRight: Binding;
        keyMoveUp: Binding;
        keyMoveDown: Binding;
        keyRollLeft: Binding;
        keyRollRight: Binding;
        keyPitchUp: Binding;
        keyPitchDown: Binding;
        keyYawLeft: Binding;
        keyYawRight: Binding;
        boostMove: Binding;
        enablePointerLock: Binding;
    };
};
export type TrackballControlsAttribs = typeof DefaultTrackballControlsAttribs;
export { TrackballControls };
interface TrackballControls {
    readonly viewport: Viewport;
    readonly isAnimating: boolean;
    readonly isMoving: boolean;
    readonly props: Readonly<TrackballControlsProps>;
    setProps: (props: Partial<TrackballControlsProps>) => void;
    readonly attribs: Readonly<TrackballControlsAttribs>;
    setAttribs: (attribs: Partial<TrackballControlsAttribs>) => void;
    start: (t: number) => void;
    update: (t: number) => void;
    reset: () => void;
    dispose: () => void;
}
declare namespace TrackballControls {
    function create(input: InputObserver, camera: Camera, scene: Scene, props?: Partial<TrackballControlsProps>, attribs?: Partial<TrackballControlsAttribs>): TrackballControls;
}
