import { OnDestroy } from '@angular/core'; import { ControlValueAccessor } from '@angular/forms'; import { Observable, Observer, Subject, Subscription } from 'rxjs'; export declare type OnChangeFn = (value: T | null) => void; export declare type OnTouchedFn = () => void; export declare function noop(): void; export declare abstract class Control implements ControlValueAccessor { value: T | null; disabled: boolean; onChangeFn: OnChangeFn; onTouchedFn: OnTouchedFn; modelValue$: Subject; writeValue(value: T | null): void; registerOnChange(fn: (value: T | null) => void): void; registerOnTouched(fn: () => void): void; updateByAction(value: T | null): void; setDisabledState(disabled: boolean): void; abstract handleUpdate(self: boolean): void; abstract handleDisabled(): void; } export declare abstract class CompositeControl extends Control { parentComposite?: CompositeControl; compositeValue: T; compositeStatus$: Subject; value: T; readonly status$: Subject; handleUpdate(self: boolean): void; handleDisabled(): void; } export declare abstract class ControlItem implements OnDestroy { status$$: Subscription; abstract ngOnDestroy(): void; } export declare abstract class KeyedCompositeControl extends CompositeControl { abstract parentComposite?: KeyedCompositeControl; pendingKeyedChanges: Map; keyedObservers: Map>; observeKey(key: K): Observable; flushKey(key: K): void; }