import { ChangeDetectorRef, ElementRef, Injector } from '@angular/core';
import { AbstractControl } from '@angular/forms';
import { LayoutComponentBase } from '@anglr/dynamic/layout';
import { Logger } from '@anglr/common';
import { PromiseOr } from '@jscrpt/common';
import { Subscription } from 'rxjs';
import { FormComponentOptions } from '../../misc/formComponentBase.options';
import * as i0 from "@angular/core";
/**
 * Base component for form component
 */
export declare abstract class FormComponentBase<TOptions extends FormComponentOptions, TValue = string> extends LayoutComponentBase<TOptions> {
    protected _parentControl?: AbstractControl<any, any> | undefined;
    /**
     * Indication whether form component is required
     */
    private _required;
    /**
     * Indication whether form component is disabled
     */
    private _disabled;
    /**
     * Form component control
     */
    protected control: AbstractControl;
    /**
     * Form component control subscriptions
     */
    protected controlSubscription: Subscription | null | undefined;
    /**
     * Form component value
     */
    set value(value: TValue | null | undefined);
    get value(): TValue | null | undefined;
    /**
     * Indication whether form component is required
     */
    set required(value: boolean | null | undefined);
    get required(): boolean | null | undefined;
    /**
     * Indication whether form component is disabled
     */
    set disabled(value: boolean | null | undefined);
    get disabled(): boolean | null | undefined;
    /**
     * Form component value
     */
    valueOutput: TValue | null | undefined;
    constructor(_changeDetector: ChangeDetectorRef, _element: ElementRef<HTMLElement>, _injector: Injector, _parentControl?: AbstractControl<any, any> | undefined, _logger?: Logger);
    /**
     * @inheritdoc
     */
    protected onOptionsSet(): PromiseOr<void>;
    /**
     * Registers component-specific validators
     */
    protected _registerValidations(): void;
    /**
     * Gets form component control for control name
     * @param controlName Form component control name
     * @param parentControl Parent form control
     * @param defaultControlType Default control type when parent does not exists or not contains control with specified name
     * @param initValue Initial value for control
     * @returns Specified type of control
     */
    private _getFormControl;
    static ɵfac: i0.ɵɵFactoryDeclaration<FormComponentBase<any, any>, [null, null, null, { optional: true; }, { optional: true; }]>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<FormComponentBase<any, any>, never, never, { "value": { "alias": "value"; "required": false; }; "required": { "alias": "required"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, false, never>;
}
//# sourceMappingURL=formComponentBase.d.ts.map