import { AfterViewInit, ChangeDetectorRef, ComponentFactoryResolver, ElementRef, EventEmitter, OnDestroy, OnInit, ViewContainerRef } from '@angular/core';
import { AsyncValidatorFn, FormControl, NgModel, ValidatorFn } from '@angular/forms';
import { FormInputUserModelChangeListenerService } from '../../core/service/form-input-user-change-listener.service';
import { NgZoneWrapperService } from '../../core/service/ng-zone-wrapper.service';
import { CoreComponentsIcon } from '../../core/enum/core-components-icon.enum';
import { FormComponent } from '../form/form.component';
import { ScreenConfigAdapterComponent } from '../../interfaces/screen-config-adapter.component.interface';
import { OverlayService } from '../../service/overlay.service';
import { ObjectConfigurationDefaultValueType } from '@colijnit/ioneconnector/build/type/object-configuration-default-value-type';
/**
 * Abstract base class for all concrete form input components that contain a native <input> element. Provides common data and functionality, such as
 * adding self as a control to the parent form.
 */
export declare abstract class BaseInputComponent<T> implements OnInit, OnDestroy, AfterViewInit, ScreenConfigAdapterComponent {
    protected changeDetector: ChangeDetectorRef;
    protected componentFactoryResolver: ComponentFactoryResolver;
    protected overlayService: OverlayService;
    protected formUserChangeListener?: FormInputUserModelChangeListenerService;
    protected ngZoneWrapper?: NgZoneWrapperService;
    elementRef?: ElementRef;
    readonly icons: typeof CoreComponentsIcon;
    validationErrorContainer: ViewContainerRef;
    _ngModel: NgModel;
    get ngModel(): NgModel;
    static BaseFormInputComponentIndex: number;
    static HiddenClass: string;
    showSaveCancel: boolean;
    set model(value: T);
    get model(): T;
    label: string;
    noValidation: boolean;
    initFocus: boolean;
    noClickFocus: boolean;
    businessObjectId: any;
    name: string;
    set disabled(disabled: boolean);
    get disabled(): boolean;
    set maxLength(maxLength: number);
    get maxLength(): number;
    set defaultValue(defaultValue: ObjectConfigurationDefaultValueType);
    get defaultValue(): ObjectConfigurationDefaultValueType;
    forcedMaxLength: number;
    set readonly(readonly: boolean);
    get readonly(): boolean;
    set forceReadonly(forceReadonly: boolean);
    get forceReadonly(): boolean;
    set required(required: boolean);
    get required(): boolean;
    forceRequired: boolean;
    set validators(validators: ValidatorFn[]);
    get validators(): ValidatorFn[];
    set asyncValidators(validators: AsyncValidatorFn[]);
    get asyncValidators(): AsyncValidatorFn[];
    set hidden(hidden: boolean);
    get hidden(): boolean;
    set decimals(value: number);
    get decimals(): number;
    icon: CoreComponentsIcon;
    customCssClass: string;
    redErrorBackground: boolean;
    set myFormInputInstance(value: BaseInputComponent<T>);
    get myFormInputInstance(): BaseInputComponent<T>;
    commitOnBlur: boolean;
    readonly nativeBlur: EventEmitter<any>;
    readonly blur: EventEmitter<any>;
    readonly enter: EventEmitter<any>;
    readonly focus: EventEmitter<any>;
    readonly keyDown: EventEmitter<any>;
    readonly keyUp: EventEmitter<any>;
    readonly modelChange: EventEmitter<any>;
    readonly selectedValueChange: EventEmitter<any>;
    readonly userModelChange: EventEmitter<any>;
    readonly hiddenChange: EventEmitter<boolean>;
    readonly cancelClicked: EventEmitter<void>;
    focused: boolean;
    formComponent: FormComponent;
    formInput: boolean;
    customWidth: boolean;
    customHeight: boolean;
    noTriangleGraphic: boolean;
    keepFocussed: boolean;
    halfWidth: boolean;
    fullWidth: boolean;
    excludeUserModelChange: boolean;
    noFormGroupControl: boolean;
    get formSubmitted(): boolean;
    get hasNoLabel(): boolean;
    get hasValue(): boolean;
    get invalid(): boolean;
    get isDisabled(): boolean;
    get isReadonly(): boolean;
    get isRequired(): boolean;
    get touchedInvalid(): boolean;
    get valid(): boolean;
    get validationDisabled(): boolean;
    onClick(event: MouseEvent): void;
    onFocusIn(): void;
    handleKeyDown(event: KeyboardEvent): void;
    get canChange(): boolean;
    get control(): FormControl;
    get formInputInstance(): BaseInputComponent<T>;
    get isDestroyed(): boolean;
    input: HTMLInputElement | HTMLTextAreaElement;
    keepFocus: boolean;
    set canSaveOrCancel(value: boolean);
    get canSaveOrCancel(): boolean;
    objectConfigName: string;
    validationError: string;
    shouldCommit: boolean;
    protected _markedAsUserTouched: boolean;
    protected _destroyed: boolean;
    protected _hasOnPushCdStrategy: boolean;
    protected _model: T;
    protected _modelDirtyForCommit: boolean;
    protected _initialModel: T;
    protected _initialModelSet: boolean;
    private _myFormInputInstance;
    private _errorValidationComponent;
    private _decimals;
    private _hidden;
    private _disabled;
    private _maxLength;
    private _defaultValue;
    private _readonly;
    private _required;
    private _forceReadonly;
    private _validators;
    private _asyncValidators;
    private _speechSub;
    private _modelChangeSub;
    private _formAnySubmitSub;
    private _formReadonlyChangeSub;
    private _clearMarkedAsUserTouchedSub;
    private _canSaveOrCancel;
    private _commitButtonsComponentRef;
    private _validationComponentRef;
    constructor(changeDetector: ChangeDetectorRef, componentFactoryResolver: ComponentFactoryResolver, overlayService: OverlayService, formUserChangeListener?: FormInputUserModelChangeListenerService, ngZoneWrapper?: NgZoneWrapperService, elementRef?: ElementRef);
    ngOnInit(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    commit: (model: any) => Promise<boolean>;
    cancelClick(event?: MouseEvent): void;
    showValidationError(error: string): void;
    /**
     * Emits a modelChange event with given value, indicating that the model of this form input
     * has changed and its new value is given value. Also emits userModelChange if markedAsUserTouched.
     */
    setModel(value: any): void;
    requestFocus(): void;
    doFocus(event?: any): any;
    doBlur(event?: any, handleCommit?: boolean): Promise<any>;
    detectChanges(): void;
    markForCheck(): void;
    detectChangesAfterAngular(): void;
    /**
     * Links the given formComp.submit event to the firing of detectChanges() of given change detector. This is a 'utility-like' method,
     * but we manage the actual subscription (with UNSUBSCRIBE()!) on this base class.
     * @param formComp The form whose submit we want to link with the call of .detectChanges() on given change detector ref.
     * @param changeDetectorRef This should be given as param. I choose not to make this part of our (BaseFormInputComponent) constructor,
     * because we already have 21 extenders.
     */
    markAsUserTouched(): void;
    clearMarkedAsUserTouched(): void;
    protected modelSet(): void;
    protected setMaxLength(maxLength: number): void;
    protected _markAsOnPush(): void;
    protected _checkState(): boolean;
    protected _updateControlValidatorsAndOwnFlags(): void;
    private _handleCommit;
    private _commitFinished;
    private _clearErrorComponent;
    private _controlExists;
    private _controlIsValid;
    private _setNativeDisabled;
    private _setNativeMaxLength;
    protected _setNativeReadOnly(readonly: boolean): void;
    private _setNativeRequired;
    private _subscribeToSpeechInput;
    private _addOrRemoveSelfFromForm;
    private _updateSelfInForm;
    private _removeSelfFromForm;
    private _addSelfToForm;
    private _prepareInput;
    private _findInputNode;
    private _positionValidationError;
    protected _handleKeyDown(event: KeyboardEvent): Promise<any>;
    private _createNewFocusEvent;
    private _setFocusOnNextPossibleInput;
}
