import { type Mesh, Raycaster, type Intersection } from 'three';
import type { CurrentWritable } from '@threlte/core';
import type { TeleportControlsOptions } from '.';
export type ComputeFunction = (context: Context, handContext: HandContext) => void;
export type TeleportEvents = {};
export interface Context {
    interactiveObjects: Mesh[];
    surfaces: Map<string, Mesh>;
    blockers: Map<string, Mesh>;
    dispatchers: WeakMap<Mesh, Record<string, (arg: unknown) => void>>;
    raycaster: Raycaster;
    compute: ComputeFunction;
    addBlocker: (mesh: Mesh) => void;
    removeBlocker: (mesh: Mesh) => void;
    addSurface: (mesh: Mesh, events: TeleportEvents) => void;
    removeSurface: (mesh: Mesh) => void;
}
export interface HandContext {
    hand: 'left' | 'right';
    enabled: CurrentWritable<boolean>;
    active: CurrentWritable<boolean>;
    hovered: CurrentWritable<Intersection | undefined>;
}
export declare const getHandContext: (hand: "left" | "right") => HandContext;
export declare const setHandContext: (hand: "left" | "right", context: HandContext) => void;
export declare const useTeleportControls: () => Context;
export declare const createTeleportContext: (compute: TeleportControlsOptions["compute"]) => Context;
