import { type Mesh, Raycaster, type Intersection } from 'three'; import type { CurrentWritable } from '@threlte/core'; export type ComputeFunction = (context: Context, handContext: HandContext) => void; export type TeleportEvents = Record void>; export interface Context { interactiveObjects: Mesh[]; surfaces: Map; blockers: Map; dispatchers: WeakMap void>>; 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; active: CurrentWritable; hovered: CurrentWritable; /** Per-hand raycaster — keeps intersection state isolated between hands. */ raycaster: Raycaster; compute: ComputeFunction; } 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: () => Context;