import { OnDestroy, OnInit } from '@angular/core';
import { ControlValueAccessor, NgControl } from '@angular/forms';
import { Nullable } from '@bimeister/utilities';
import { BehaviorSubject, Observable, Subscription } from 'rxjs';
import { OnChangeCallback } from '../../types/on-change-callback.type';
import { OnTouchedCallback } from '../../types/on-touched-callback.type';
import * as i0 from "@angular/core";
export declare abstract class InputBaseControlValueAccessor<T> implements ControlValueAccessor, OnDestroy, OnInit {
    protected readonly ngControl: NgControl;
    protected readonly control$: BehaviorSubject<Nullable<NgControl>>;
    readonly value$: BehaviorSubject<T>;
    readonly isDisabled$: BehaviorSubject<Nullable<boolean>>;
    readonly isTouched$: BehaviorSubject<Nullable<boolean>>;
    readonly isFocused$: BehaviorSubject<Nullable<boolean>>;
    readonly isFilled$: BehaviorSubject<boolean>;
    readonly isValid$: Observable<boolean>;
    private readonly onChangeCallback$;
    private readonly onTouchedCallback$;
    protected readonly subscription: Subscription;
    constructor(ngControl: NgControl);
    protected abstract setValue(value: T): void;
    protected handleChangedValue(onChangeCallback: OnChangeCallback<any>, value: T): void;
    ngOnInit(): void;
    ngOnDestroy(): void;
    updateValue(updatedValue: T): void;
    writeValue(newValue: T): void;
    registerOnChange(onChange: OnChangeCallback<T>): void;
    registerOnTouched(onTouched: OnTouchedCallback): void;
    setDisabledState(isDisabled: boolean): void;
    private processSetDisabledState;
    private setControlRef;
    private processNgControlStatusChangesForHandleIsTouched;
    static ɵfac: i0.ɵɵFactoryDeclaration<InputBaseControlValueAccessor<any>, [{ optional: true; }]>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<InputBaseControlValueAccessor<any>, never, never, {}, {}, never, never, false>;
}
