UNPKG

videx-3d

Version:

React 3D component library designed for sub surface visualizations in the browser

70 lines (69 loc) 2.02 kB
import { Object3D } from 'three'; import { Vec3 } from '../../../sdk'; export type KeysPressed = { altKey: boolean; ctrlKey: boolean; shiftKey: boolean; }; export type EventEmitterCallbackEvent = { target: Object3D; source: Object3D; instanceIndex?: number; position?: Vec3; keys: KeysPressed; ref: any; }; export type EventEmitterCallback = (event: EventEmitterCallbackEvent) => Promise<void>; export type Listener = { object: Object3D; ref?: any; handlers: Record<string, EventEmitterCallback>; }; export type EventEmitterContextProps = { register: (obj: Object3D, handlers: Record<string, EventEmitterCallback>, ref?: any) => () => void; }; /** * Context for registering event handlers to the `EventEmitter` * * @see {@link EventEmitter} * * @group Contexts */ export declare const EventEmitterContext: import('react').Context<EventEmitterContextProps>; /** * Used to register event handlers for renderable components. * * @example * const eventHandler = useEventEmitter() * * @remarks * The generator is an async function that process and returns data required * by your components, such as geometry for a mesh. * * @example * * useEffect(() => { * let unregister: (() => void) | null = null * if (eventHandler && ref.current) { * const handlers: Record<string, EventEmitterCallback> = {} * * if (onPointerClick) handlers.click = onPointerClick * if (onPointerEnter) handlers.enter = onPointerEnter * if (onPointerLeave) handlers.leave = onPointerLeave * if (onPointerMove) handlers.move = onPointerMove * * if (Object.keys(handlers).length) { * unregister = eventHandler.register(ref.current, handlers, id) * } * } * * return () => { * if (unregister) unregister() * } * }, [eventHandler, onPointerClick, onPointerEnter, onPointerLeave, onPointerMove]) * * @see {@link EventEmitter} * * @group Hooks */ export declare const useEventEmitter: () => EventEmitterContextProps;