import { LooseKeys } from '../../paths.types';
import { FormFieldSubscriber, Watch } from '../../types';
import { $FormStatus } from '../use-form-status/use-form-status';
import { $FormValues, SetValuesSubscriberPayload } from '../use-form-values/use-form-values';
interface UseFormWatchInput<out Values extends Record<PropertyKey, any>> {
    $values: $FormValues<Values>;
    $status: $FormStatus<Values>;
    cascadeUpdates?: boolean;
}
export interface $FormWatch<Values extends Record<PropertyKey, any>> {
    subscribers: React.RefObject<Record<string, FormFieldSubscriber<Values, any>[]>>;
    watch: Watch<Values, any>;
    getFieldSubscribers: (path: any) => ((input: SetValuesSubscriberPayload<Values>) => void)[];
    notifyWatchSubscribers: (previousValues: Values) => void;
}
export declare function useFormWatch<Values extends Record<PropertyKey, any>, Field extends LooseKeys<Values> = LooseKeys<Values>>({ $values, $status, cascadeUpdates }: UseFormWatchInput<Values>): {
    subscribers: import("react").RefObject<Record<Field, FormFieldSubscriber<Values, Field>[]>>;
    watch: Watch<Values, Field>;
    getFieldSubscribers: (path: Field) => ((input: SetValuesSubscriberPayload<Values>) => void)[];
    notifyWatchSubscribers: (previousValues: Values) => void;
};
export {};
