import { ModelSignal } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import { BaseComponent } from '../base-component';
import * as i0 from "@angular/core";
/**
 * A base control value accessor directive that can be used to create custom form controls.
 *
 * The class is an abstract class where the model type is inferred from how the extending
 * class implements the `value` property.
 */
export declare abstract class BaseControlValueAccessor<T> extends BaseComponent implements ControlValueAccessor {
    /**
     * The base control value. Abstract property that must be implemented by the extending class.
     */
    abstract value: ModelSignal<T>;
    /**
     * The disabled state of the control.
     *
     * should be a linked signal after those are available
     */
    protected isDisabled: import("@angular/core").WritableSignal<boolean>;
    /**
     * The change event of the control.
     */
    protected onChange(_: T): void;
    /**
     * The touch event of the control.
     */
    protected onTouched(_?: T): void;
    /**
     * Write a value to the control.
     */
    writeValue(value: T): void;
    /**
     * Register the change event handler function.
     */
    registerOnChange(fn: (_?: T) => void): void;
    /**
     * Register the touch event handler function.
     */
    registerOnTouched(fn: (_?: T) => void): void;
    /**
     * Updates the inner disabled state of the control.
     */
    setDisabledState(isDisabled: boolean): void;
    /**
     * Syncs updates to the control value with the change and touch events.
     */
    protected notifyChangeEffect: import("@angular/core").EffectRef;
    static ɵfac: i0.ɵɵFactoryDeclaration<BaseControlValueAccessor<any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<BaseControlValueAccessor<any>, never, never, {}, {}, never, never, true, never>;
}
