import type { Ray } from "@aura3d/math";
import type { CommandHistory } from "./CommandHistory";
import type { TransformTarget } from "./commands/TransformCommand";
export type GizmoAxis = "x" | "y" | "z" | "uniform";
export type GizmoPlaneAxis = "xy" | "xz" | "yz";
export type GizmoHandle = GizmoAxis | GizmoPlaneAxis;
export type GizmoSpaceMode = "world" | "local";
export type GizmoPivotMode = "center" | "active" | "individual";
export interface GizmoSettings {
    readonly snapEnabled: boolean;
    readonly positionSnap: number;
    readonly rotationSnapDegrees: number;
    readonly scaleSnap: number;
    readonly spaceMode: GizmoSpaceMode;
    readonly pivotMode: GizmoPivotMode;
}
export declare const DEFAULT_GIZMO_SETTINGS: GizmoSettings;
export interface GizmoHit {
    readonly axis: GizmoHandle;
    readonly distance: number;
}
export interface GizmoDrag {
    readonly axis: GizmoHandle;
    readonly delta: number;
}
export declare abstract class Gizmo {
    protected readonly history: CommandHistory;
    enabled: boolean;
    target?: TransformTarget;
    protected settings: GizmoSettings;
    constructor(history: CommandHistory, settings?: Partial<GizmoSettings>);
    setTarget(target: TransformTarget | undefined): void;
    configure(settings: Partial<GizmoSettings>): void;
    snapshotSettings(): GizmoSettings;
    hitTest(_ray: Ray): GizmoHit | undefined;
    abstract drag(input: GizmoDrag): Promise<void>;
    dispose(): void;
    protected snapPositionDelta(value: number): number;
    protected snapRotationDelta(radians: number): number;
    protected snapScaleFactor(value: number): number;
}
export declare function normalizeGizmoSettings(settings?: Partial<GizmoSettings>): GizmoSettings;
//# sourceMappingURL=Gizmo.d.ts.map