import type { MutableRefObject } from "react";
import { Camera, Object3D, Vector2, type Plane } from "three";
export type ClientRectSelection = {
    minX: number;
    minY: number;
    maxX: number;
    maxY: number;
};
export type SelectionBoxMode = "contains" | "intersects";
export type SelectionBoxProfile = {
    boundsCheckMs: number;
    candidateIds: number;
    containedCandidateVertices: number;
    containedIdsMs: number;
    containedVerticesVisited: number;
    intersectsBoundsCalls: number;
    intersectsBoundsMs: number;
    intersectsRangeCalls: number;
    intersectsRangeMs: number;
    intersectsTriangleCalls: number;
    intersectsTriangleMs: number;
    matrixUpdateMs: number;
    meshCount: number;
    mode: SelectionBoxMode;
    selectedIds: number;
    shapecastMs: number;
    skippedMeshCount: number;
    totalMs: number;
    trianglePointCalls: number;
    trianglePointMs: number;
    trianglePointVertices: number;
    triangleProjectionMs: number;
};
export declare const MIN_BOX_SIZE = 6;
export declare function getClientSelectionRect(start: Vector2, end: Vector2): ClientRectSelection;
export declare function getSelectionBoxMode(start: Vector2, end: Vector2): SelectionBoxMode;
export declare function getBoxSelectedIds({ model, camera, clippingPlanes, domElement, rect, mode, profile, }: {
    model: Object3D | null;
    camera: Camera;
    clippingPlanes?: Plane[];
    domElement: HTMLElement;
    rect: ClientRectSelection;
    mode: SelectionBoxMode;
    profile?: SelectionBoxProfile;
}): Map<number, Set<number>>;
export declare function getBoxSelectedIdsProfiled(options: Parameters<typeof getBoxSelectedIds>[0]): {
    ids: Map<number, Set<number>>;
    profile: SelectionBoxProfile;
};
export declare function updateSelectionBoxElement(elementRef: MutableRefObject<HTMLDivElement | null>, start: Vector2, end: Vector2): void;
export declare function removeSelectionBoxElement(elementRef: MutableRefObject<HTMLDivElement | null>): void;
