import { ChangeDetectorRef, type Provider, type Type } from '@angular/core';
import { type ControlValueAccessor, type FormControlStatus, NgControl } from '@angular/forms';
import { TuiValueTransformer } from './value-transformer';
import * as i0 from "@angular/core";
/**
 * Basic ControlValueAccessor class to build form components upon
 */
export declare abstract class TuiControl<T> implements ControlValueAccessor {
    private readonly fallback;
    private readonly refresh$;
    private readonly internal;
    protected readonly control: NgControl;
    protected readonly cdr: ChangeDetectorRef;
    protected transformer: TuiValueTransformer<any, any>;
    readonly value: import("@angular/core").Signal<T>;
    readonly readOnly: import("@angular/core").InputSignal<boolean>;
    readonly pseudoInvalid: import("@angular/core").InputSignal<boolean | null | undefined>;
    readonly touched: import("@angular/core").WritableSignal<boolean>;
    readonly status: import("@angular/core").WritableSignal<FormControlStatus | undefined>;
    readonly disabled: import("@angular/core").Signal<boolean>;
    readonly interactive: import("@angular/core").Signal<boolean>;
    readonly invalid: import("@angular/core").Signal<boolean>;
    readonly mode: import("@angular/core").Signal<"invalid" | "readonly" | "valid">;
    onTouched: (...args: any[]) => void;
    onChange: (value: T) => void;
    constructor();
    registerOnChange(onChange: (value: unknown) => void): void;
    registerOnTouched(onTouched: () => void): void;
    setDisabledState(): void;
    writeValue(value: T | null): void;
    private update;
    static ɵfac: i0.ɵɵFactoryDeclaration<TuiControl<any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<TuiControl<any>, never, never, { "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; "pseudoInvalid": { "alias": "invalid"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}
export declare function tuiAsControl<T>(control: Type<TuiControl<T>>): Provider;
