import { AnyObjectSchema } from 'yup';
import { LanguageKeys, SharedFormLocales } from "../multi-lingual/index";
import { Field, FormElement, FormHookInterface, FormStateOptions, Step, WatchCallback } from './interface';
import { FormStructure } from '../../components/form-elements/form-structure';
export declare class FormHook<T> {
    haltValidation: boolean;
    private isSubmitted;
    private stepFormValues;
    private watchers;
    private cachedValues;
    private subscribers;
    private schemaObject;
    private basicSchemaObject;
    private onValuesUpdate;
    private requiredContext;
    private validationType;
    private subscribedFields;
    formErrors: {
        [key: string]: string;
    };
    backButtonContexts: any[];
    pendingRequests: Record<string, () => Promise<void>>;
    formController: any;
    formStructure?: FormStructure;
    openDialog: () => void;
    context: FormHookInterface<T>;
    constructor(context: FormHookInterface<T>, schemaObject: AnyObjectSchema, formStateOptions?: FormStateOptions);
    subscribe: (formName: string, formElement: FormElement) => void;
    unsubscribe: (formName: string) => void;
    getStepLabels: (language?: LanguageKeys, selectedStep?: number) => Step;
    reset(): void;
    addWatcher: (key?: string, callback?: WatchCallback) => void;
    removeWatcher: (key: string) => void;
    onInput: (event: Event) => void;
    resetFormErrorMessage: () => string;
    getFormErrors: () => {
        [key: string]: string;
    };
    getFormLocale: () => [{
        sharedFormLocales: SharedFormLocales;
    }, LanguageKeys];
    setCachedValues: (newValues: Partial<T>) => void;
    getValue: <T_1>(name: keyof T_1) => T_1[keyof T_1];
    getValues: <T_1>() => T_1;
    private focusFirstInput;
    hasItemInStructure: (target: any, structure?: import("./interface").FormElementStructure<any>) => any;
    updateStep: (newStep: number, replace?: boolean) => void;
    private submitForm;
    onSubmit: (formEvent: SubmitEvent) => void;
    /**
     * Manually trigger form submission programmatically.
     * Works the same as clicking the submit button or pressing Enter.
     */
    submit: () => void;
    getRequiredContext: () => Record<string, boolean>;
    getInputState: <MetaType>(name: string) => Field<MetaType>;
    signal: (partialSignal: Partial<Field<any>> | Partial<Field<any>>[]) => void;
    validateInput: (name: string) => {
        isError: boolean;
        errorMessage: any;
    };
    rerender: ({ inputName, rerenderAll, rerenderForm }: {
        inputName?: string;
        rerenderForm?: boolean;
        rerenderAll?: boolean;
    }) => void;
    validateForm: (name: string, value: string | boolean, strict?: boolean) => {
        isError: boolean;
        errorMessage: any;
    };
}
