import type { FormBuilderInputOption, FormBuilderOptions } from './form-builder.types';
import { FormControlExtended } from '@al00x/forms';
type FormBuilderTransformer<T, U> = (value: T, raw: T) => U;
export declare function formBuilder<T, U = T>(options: FormBuilderOptions<T>, transformer?: FormBuilderTransformer<T, U>): FormBuilder<T, U>;
export declare class FormBuilder<T, U = T> implements FormBuilderOptions<T> {
    cols: number;
    width: string;
    gap: string;
    allowAutocomplete: boolean;
    defaults: FormBuilderOptions<T>['defaults'];
    inputs: {
        [key in keyof T]: FormBuilderInputOption<T[key]>;
    };
    formGroup: import("@al00x/forms").FormGroupExtended<any, any>;
    keys: string[];
    controls: {
        [p in keyof T]: FormControlExtended<T[p]>;
    };
    hiddenKeysArray: import("@angular/core").WritableSignal<(keyof T)[]>;
    hiddenKeys: import("@angular/core").Signal<{ [key in keyof T]: boolean; }>;
    invisibleKeysArray: import("@angular/core").WritableSignal<(keyof T)[]>;
    invisibleKeys: import("@angular/core").Signal<{ [key in keyof T]: boolean; }>;
    private _onInit;
    private _onAfterInit;
    private _values;
    private _initialValues?;
    private _transfomer?;
    constructor(opts: FormBuilderOptions<T>, transformer?: FormBuilderTransformer<T, U>);
    private updateFormGroup;
    validate(): boolean;
    getValue(): U | null;
    setValue(value: T): void;
    patchValue(value: Partial<T>): void;
    reset(value?: any): void;
    invokeInit(): void | import("rxjs").Observable<any> | import("rxjs").Subscription;
    invokeAfterInit(): void | import("rxjs").Observable<any> | import("rxjs").Subscription;
    clone(values?: any): FormBuilder<T, U>;
    setReadonly(state: boolean, ...keys: (keyof T)[]): void;
    get values(): import("./form-builder.types").FormBuilderValue<T> | undefined;
    updateInput(key: keyof T, options: Partial<FormBuilderInputOption<T>>): void;
    hide(...keys: (keyof T)[]): void;
    show(...keys: (keyof T)[]): void;
    setHidden(state: boolean, ...keys: (keyof T)[]): void;
    setInvisible(state: boolean, ...keys: (keyof T)[]): void;
    setDisabled(state: boolean, ...keys: (keyof T)[]): void;
    private forEachControl;
}
export {};
