import { ChangeDetectorRef, EventEmitter } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import { ReplaySubject } from 'rxjs';
import * as i0 from "@angular/core";
/**
 * form control 内部不保持 value 属性，当不使用 ngModel 时可以通过 [(value)] 实现双向绑定；
 * 也可以分别传入 value 和 监听 valueChange 事件以实现阻断用户操作的功能。
 */
export declare class CommonFormControl<V, M = V> implements ControlValueAccessor {
    protected cdr: ChangeDetectorRef;
    get disabled(): boolean | "";
    set disabled(val: boolean | '');
    get readonly(): boolean;
    set readonly(val: boolean);
    get propValue(): V;
    set propValue(val: V);
    valueChange: EventEmitter<V>;
    protected onChange: (_: V) => void;
    protected onTouched: () => void;
    private _propValue;
    private _disabled;
    private _readonly;
    model: M;
    model$: ReplaySubject<M>;
    constructor(cdr: ChangeDetectorRef);
    registerOnChange(fn: (_: V) => void): void;
    registerOnTouched(fn: () => void): void;
    setDisabledState(isDisabled: boolean): void;
    writeValue(value: V): void;
    emitModel(model: M): void;
    emitValue(value: V): void;
    protected valueIn(value: V): M;
    protected modelOut(model: M): V;
    static ɵfac: i0.ɵɵFactoryDeclaration<CommonFormControl<any, any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<CommonFormControl<any, any>, never, never, { "disabled": { "alias": "disabled"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "propValue": { "alias": "value"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
}
