import { RouterRequestConfig } from './router';
export type FData<T extends object> = T & Form<T>;
export declare class Form<TForm extends object> {
    _defaults: TForm;
    _transform: unknown;
    _recentlySuccessfulTimeout: NodeJS.Timeout | null;
    readonly _handler: ProxyHandler<FData<TForm>>;
    wasSuccessful: boolean;
    recentlySuccessful: boolean;
    processing: boolean;
    errors: Record<string, string>;
    get hasErrors(): boolean;
    get isDirty(): boolean;
    constructor(initial: TForm, handler: ProxyHandler<FData<TForm>>);
    data(): TForm;
    transform(fn: (data: TForm) => unknown): this;
    reset(...fields: string[]): this;
    fill(data: TForm): this;
    defaults(field?: string | Record<string, unknown>, value?: unknown): this;
    clearErrors(...fields: string[]): this;
    setError(field: string | Record<string, string>, message?: string): this;
    request<TForm>(options: RouterRequestConfig<TForm>): Promise<import('./router').RouterResponse<any, any>>;
    get(url: string, options?: RouterRequestConfig): Promise<import('./router').RouterResponse<any, any>>;
    post(url: string, options?: RouterRequestConfig): Promise<import('./router').RouterResponse<any, any>>;
    put(url: string, options?: RouterRequestConfig): Promise<import('./router').RouterResponse<any, any>>;
    patch(url: string, options?: RouterRequestConfig): Promise<import('./router').RouterResponse<any, any>>;
    delete(url: string, options?: RouterRequestConfig): Promise<import('./router').RouterResponse<any, any>>;
}
export declare function useForm<T extends object>(data: T | (() => T), rememberKey?: string): {
    get: import('./signals').SignalGetter<FData<T>>;
    set: import('./signals').SignalSetter<FData<T>>;
    subscribe: (fn: (form: FData<T>) => void) => () => void;
};
