import type { Entity } from 'koota';
import { type IntersectionEvent } from '@threlte/extras';
/**
 * Pointer handlers for a renderer that draws a single entity — every event
 * targets the closed-over entity.
 *
 * Layers invisibility on top of the shared handlers: enter/move/down/click are
 * suppressed while the entity is invisible (raycasting still hits the visible
 * leaf mesh of Frame/Geometry/GLTF, so the scene's visibility filter can't
 * block them — added in #577, migrated to InheritedInvisible in #710).
 * `onpointerleave` is intentionally left active. The effect tears down a stale
 * Hovered/InstancedMatrix for an entity that turns invisible while hovered,
 * since the guarded handlers can no longer fire to clean it up.
 */
export declare const useEntityEvents: (entity: () => Entity | undefined) => {
    onpointerenter: (event: IntersectionEvent<MouseEvent>) => void;
    onpointermove: (event: IntersectionEvent<MouseEvent>) => void;
    onpointerleave: (event: IntersectionEvent<MouseEvent>) => void;
    onpointerdown: (event: IntersectionEvent<MouseEvent>) => void;
    onclick: (event: IntersectionEvent<MouseEvent>) => void;
};
/**
 * Pointer handlers for an instanced renderer that draws many entities through
 * one object — `entityForEvent` maps each event back to the entity it targets
 * (typically via `event.instanceId`). Threlte keys hover identity by object
 * uuid + instance id, so enter/leave fire per instance with the id on the
 * event. No invisibility watcher: invisible instances are skipped by the
 * instanced raycast, so they never receive events.
 */
export declare const useInstancedEntityEvents: (entityForEvent: (event: IntersectionEvent<MouseEvent>) => Entity | undefined) => {
    onpointerenter: (event: IntersectionEvent<MouseEvent>) => void;
    onpointermove: (event: IntersectionEvent<MouseEvent>) => void;
    onpointerleave: (event: IntersectionEvent<MouseEvent>) => void;
    onpointerdown: (event: IntersectionEvent<MouseEvent>) => void;
    onclick: (event: IntersectionEvent<MouseEvent>) => void;
};
