import * as THREE from 'three'; import type { Disposable } from '../types.js'; /** Per-object pointer handlers: tap, down/up, and hover enter/leave. Handlers receive the raycast intersection. */ export interface SceneEventHandlers { onTap?: (hit: THREE.Intersection, event: PointerEvent) => void; onPointerDown?: (hit: THREE.Intersection, event: PointerEvent) => void; onPointerUp?: (hit: THREE.Intersection, event: PointerEvent) => void; onEnter?: (hit: THREE.Intersection) => void; onLeave?: () => void; } /** One object's event subscription for {@link bindSceneEvents}. */ export interface SceneEventBinding extends SceneEventHandlers { object: THREE.Object3D; /** Raycast descendants too. Default true. */ recursive?: boolean; } /** Options for {@link bindSceneEvents}: the DOM element, camera, initial bindings, and an optional pointer-distortion inverse. */ export interface SceneEventsOptions { element: HTMLElement; camera: THREE.Camera; bindings?: SceneEventBinding[]; /** Invert screen-space distortion (e.g. CRT warp) before raycasting. */ correctPointer?: (ndc: THREE.Vector2) => THREE.Vector2; } /** Handle returned by {@link bindSceneEvents}. `add` registers further bindings; `dispose()` removes all DOM listeners. */ export interface SceneEvents extends Disposable { /** Register a binding; returns its unbinder. */ add(binding: SceneEventBinding): () => void; } /** * Declarative raycast event binding: attach tap/down/up/enter/leave handlers * to individual objects instead of hand-rolling raycaster plumbing. Tap uses * click-vs-drag discrimination so drags never fire `onTap`. * * @param options - Element, camera, initial bindings, and optional * `correctPointer` distortion inverse (needed under warping post passes). * @returns A {@link SceneEvents} registry. * @remarks Raycasts run per pointer event against each binding's object * (recursive by default) — keep binding counts moderate or scope objects. */ export declare function bindSceneEvents({ element, camera, bindings, correctPointer, }: SceneEventsOptions): SceneEvents; //# sourceMappingURL=scene-events.d.ts.map