import React from 'react';
import { PayloadSender, AnyStateMachine, StateFrom, EventFrom, EventObject, AnyInterpreter, AnyState } from 'xstate';
declare type MaybeLazy<T, P> = T | ((providerProps: P) => T);
export declare type XStateReactContextHelpers<TInterpreter extends AnyInterpreter, ProviderProps extends Record<string, unknown>, TMachine extends AnyStateMachine = TInterpreter['machine'], TState extends AnyState = StateFrom<TMachine>, TEvent extends EventObject = EventFrom<TMachine>> = {
    Provider: React.FC<ProviderProps & {
        children?: ((params: {
            interpreter: TInterpreter;
        }) => React.ReactNode) | React.ReactNode;
    }>;
    ReactContext: React.Context<TInterpreter>;
    useInterpreter: () => TInterpreter;
    useSelector: <T>(selector: (state: TState) => T, compare?: (a: T, b: T) => boolean) => T;
    useActor: () => [TState, PayloadSender<TEvent>];
    useSend: () => PayloadSender<TEvent>;
};
export declare function createReactContextHelpers<TInterpreter extends AnyInterpreter, ProviderProps extends Record<string, unknown>, TMachine extends AnyStateMachine = TInterpreter['machine'], TState extends AnyState = StateFrom<TMachine>, TEvent extends EventObject = EventFrom<TMachine>>(
/**
 * Display name for the react context
 */
displayName: string, 
/**
 * Function that provides the interpreter for your machine.
 *
 * Inside it you should use `useInterpret()` from `@xstate/react`. You can pass options to it as normal
 *
 * Example:
 *
 */
getInterpreter: MaybeLazy<TInterpreter, ProviderProps>): XStateReactContextHelpers<TInterpreter, ProviderProps, TMachine, TState, TEvent>;
export {};
