type Falsy = false | 0 | '' | null | undefined | void;
type MaybePromise<T> = T | Promise<T>;
type ValidatorResponse = MaybePromise<string | Falsy>;
export type Validator<Element> = Falsy | ((el: Element) => ValidatorResponse);
type ValidatedElement = HTMLElement & {
    name: string;
};
type OnFormSubmit<ErrorFields extends Object, Payload> = (el: Payload) => MaybePromise<void | Partial<ErrorFields>>;
declare module 'solid-js' {
    namespace JSX {
        interface Directives {
            formSubmit: (callback: HTMLFormElement) => any;
            validate: boolean | Validator<any>[];
        }
    }
}
export declare function useForm<ErrorFields extends Object>({ errorClass }?: {
    errorClass?: string;
}): {
    validate: <Element_1 extends ValidatedElement>(ref: Element_1, accessor?: () => Falsy | Validator<Element_1>[]) => void;
    formSubmit: (ref: HTMLFormElement, accessor: () => OnFormSubmit<ErrorFields, HTMLFormElement>) => void;
    submit: <Payload>(callback: OnFormSubmit<ErrorFields, Payload>, ref: Payload) => Promise<void>;
    errors: Partial<ErrorFields>;
    isSubmitting: import("solid-js").Accessor<boolean>;
    isSubmitted: import("solid-js").Accessor<boolean>;
    validateField: (fieldName: keyof ErrorFields) => Promise<boolean>;
    getFieldValue: (fieldName: keyof ErrorFields) => string;
    validateRef: <Element_2 extends ValidatedElement>(...args: Validator<Element_2>[]) => (ref: Element_2) => void;
};
export {};
