import * as THREE from "three";
import type { BaseViewer } from "../viewers/BaseViewer";
/** Default translation snap (world units). */
export declare const DefaultGizmoTranslationSnap = 0.1;
/** Default rotation snap in degrees. */
export declare const DefaultGizmoRotationSnap = 15;
/** Default scale snap. */
export declare const DefaultGizmoScaleSnap = 0.25;
export declare enum CoordinateSpace {
    Local = "Local",
    World = "World"
}
/** Default transform gizmo orientation (local object axes). */
export declare const DefaultGizmoCoordinateSpace = CoordinateSpace.Local;
export declare enum TransformMode {
    Translate = "Translate",
    Rotate = "Rotate",
    Scale = "Scale"
}
export declare enum SnapType {
    None = 0,
    Floor = 1,
    Wall = 2,
    Entity = 4,
    All = 65535
}
export interface SnapConfig {
    snapEnabled?: boolean;
    snapType?: SnapType;
    snapRadius?: number;
    gizmoTranslationSnap?: number;
    gizmoScaleSnap?: number;
    gizmoRotationSnap?: number;
}
export interface TransformGizmoCallbacks {
    onDraggingStart?: () => void;
    onDragging?: () => void;
    onDraggingEnd?: () => void;
    /** Fired after mode changes (toolbar, W/E/S keys, or API). */
    onTransformModeChange?: (mode: TransformMode) => void;
}
/**
 * Transform gizmo (translate / rotate / scale) for a {@link BaseViewer} 3D scene.
 */
export declare class TransformGizmo {
    private viewer;
    private scene;
    private transformControl;
    private dragStartPosition;
    private dragStartRotation;
    private dragStartScale;
    private target;
    active: boolean;
    private space;
    private lastMode;
    private snapConfig;
    private isShiftPressing;
    private callbacks;
    private readonly boundKeyDown;
    private readonly boundKeyUp;
    private readonly boundBeforeRender;
    constructor(viewer: BaseViewer, callbacks?: TransformGizmoCallbacks);
    setCallbacks(callbacks: TransformGizmoCallbacks): void;
    attach(object: THREE.Object3D): void;
    detach(): void;
    isActive(): boolean;
    getAttachedObject(): THREE.Object3D | undefined;
    /**
     * Recomputes gizmo handle positions from the attached object's world matrix
     * after external edits (e.g. property panel) that do not emit transform control "change".
     */
    refreshHelperToAttachedObject(): void;
    private keyDownEvent;
    private keyUpEvent;
    private changedEvent;
    private draggingStartEvent;
    private draggingEvent;
    private draggingEndEvent;
    enableSnap(enable: boolean): void;
    isSnapEnabled(): boolean;
    getSpace(): CoordinateSpace;
    setSpace(space: CoordinateSpace): void;
    getTransformMode(): TransformMode;
    setTransformMode(mode: TransformMode): void;
    getTranslationSnap(): number;
    setTranslationSnap(snap: number): void;
    getRotationSnap(): number;
    setRotationSnap(snap: number): void;
    getScaleSnap(): number;
    setScaleSnap(snap: number): void;
    getSnapConfig(): SnapConfig;
    setSnapConfig(config: SnapConfig): void;
    destroy(): void;
}
