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 {};