import { Group, Vector3 } from "three";
import type { ViralViewerApi } from "../../../viral-viewer-api";
import type { BlockProfile } from "./editor-block";
export interface ProfileEditResult {
    profile: BlockProfile;
    positions: Vector3[];
}
export declare class ProfileEditTool {
    private _viralViewerApi;
    private _editorGroup;
    active: boolean;
    handleSelected: boolean;
    onFinish: ((result: ProfileEditResult) => void) | null;
    onCancel: (() => void) | null;
    private _profile;
    private _points;
    private _previewGroup;
    private _handles;
    private _selectedHandle;
    private _previewLine;
    private _previewObjects;
    private _mathPlane;
    private _raycaster;
    private _terrainMesh;
    private _onMouseDown;
    private _onMouseUp;
    private _onKeyDown;
    private _onObjectChange;
    private _onDraggingChanged;
    private _savedShowX;
    private _savedShowY;
    private _savedShowZ;
    private _savedMode;
    private _gizmoActive;
    private _elevation;
    constructor(_viralViewerApi: ViralViewerApi, _editorGroup: Group);
    start(profile: BlockProfile, elevation?: number): void;
    cancel(): void;
    finish(): ProfileEditResult | null;
    private _selectHandle;
    private _deselectHandle;
    /** Returns terrain Y at (x, z) if terrain exists, otherwise falls back to elevation. */
    private _terrainY;
    private _syncHandleToPoints;
    private _bindListeners;
    private _unbindListeners;
    private _hitTestHandles;
    private _buildUpdatedProfile;
    private _computePositions;
    private _computeLinePositions;
    private _computeAreaPositions;
    private _pointInPolygon;
    private _rebuildPreview;
    private _updatePreviewGeometry;
    private _drawLinePath;
    private _drawAreaOutline;
    private _showPreviewObjects;
    private _clearAll;
}
