videx-3d
Version:
React 3D component library designed for sub surface visualizations in the browser
70 lines (69 loc) • 2.02 kB
TypeScript
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;