import { DatalessEventNames, EventName, OmnipresentEventData, default as Emittery } from 'emittery'; import { FC, PropsWithChildren } from 'react'; interface EventEmitterContextProps { emitter: Emittery; } export declare const useEventEmitterContext: () => EventEmitterContextProps | null; export declare const useIsEventEmitterEnabled: () => boolean; interface EventEmitterProviderProps extends PropsWithChildren { emitter: Emittery; } /** * Provides the instance of Emittery used by the hooks * * @example * * import Emittery from "emittery" * * function Component() { * const emitter = useRef(new Emittery()).current * return ( * * ... * * ) * } * * // typed events using Symbol * * const EventNameFooBar = Symbol("EventNameFooBar") * * type Events = { [EventNameFooBar]: void } * * // emit an event * * const emitEvent = useEmitEvent() * emitEvent(EventNameFooBar, ...) * * // listen for an event * * const eventListener = useEventListener() * eventListener(EventNameFooBar, () => { * ... * }); */ export declare const EventEmitterProvider: FC; export declare const useEventEmitter: , AllEventData = EventData & OmnipresentEventData, DatalessEvents = DatalessEventNames>() => Emittery | undefined; /** * Provides a typed event emitter - uses emitter.emit * * @example * * const emitEvent = useEmitEvent() * emitEvent(EventNameFooBar, ...) */ export declare const useEmitEvent: >() => (...args: any[]) => void; /** * Provides a typed event listener - uses emitter.on and automatically unsubscribes * * @example * * const eventListener = useEventListener() * eventListener(EventNameFooBar, () => { * ... * }); */ export declare const useEventListener: , AllEventData = EventData & OmnipresentEventData>() => (eventName: Name | readonly Name[], listener: (eventData: AllEventData[Name]) => void) => void; export {};