import { FormMode } from '../../types';
export interface $FormValues<out Values extends Record<PropertyKey, any>> {
    initialized: React.RefObject<boolean>;
    stateValues: Values;
    refValues: React.RefObject<Values>;
    valuesSnapshot: React.RefObject<Values>;
    setValues: <TValues extends Values>(payload: SetValuesInput<TValues>) => void;
    setFieldValue: <TValues extends Values>(payload: SetFieldValueInput<TValues>) => void;
    resetValues: () => void;
    setValuesSnapshot: <TValues extends Values>(payload: TValues) => void;
    initialize: <TValues extends Values>(values: TValues, onInitialize: () => void) => void;
    getValues: () => Values;
    getValuesSnapshot: () => Values;
    resetField: <TValues extends Values>(path: PropertyKey, subscribers?: (SetFieldValueSubscriber<TValues> | null | undefined)[]) => void;
}
export interface SetValuesSubscriberPayload<Values> {
    path?: PropertyKey;
    updatedValues: Values;
    previousValues: Values;
}
export interface SetValuesInput<out Values = Record<string, any>> {
    values: Partial<Values> | (<TValues extends Values>(values: TValues) => Partial<TValues>);
    mergeWithPreviousValues?: boolean;
    updateState?: boolean;
    subscribers?: (SetFieldValueSubscriber<Values> | null | undefined)[];
}
export type SetFieldValueSubscriber<out Values> = <TValues extends Values>(payload: SetValuesSubscriberPayload<TValues>) => void;
export interface SetFieldValueInput<Values> {
    path: PropertyKey;
    value: any;
    updateState?: boolean;
    subscribers?: (SetFieldValueSubscriber<Values> | null | undefined)[];
}
interface UseFormValuesInput<Values extends Record<PropertyKey, any>> {
    initialValues: Values | undefined;
    mode: FormMode;
    onValuesChange?: ((values: Values, previousValues: Values) => void) | undefined;
}
export declare function useFormValues<Values extends Record<PropertyKey, any>>({ initialValues, onValuesChange, mode, }: UseFormValuesInput<Values>): $FormValues<Values>;
export {};
