import { ElementRef, OnChanges } from '@angular/core';
import { NgControl } from '@angular/forms';
import { ComponentChanges } from '@bimeister/pupakit.common';
import { Nullable } from '@bimeister/utilities';
import { BehaviorSubject, Observable } from 'rxjs';
import { TextareaCounterVisibility } from '../../types/textarea-counter-visibility-mode.type';
import { TextareaSize } from '../../types/textarea-size.type';
import { InputBaseControlValueAccessor } from './input-base-control-value-accessor.abstract';
import * as i0 from "@angular/core";
export declare abstract class TextareaBase extends InputBaseControlValueAccessor<string> implements OnChanges {
    protected readonly lineHeightSourceRef: ElementRef<HTMLTextAreaElement>;
    protected readonly textareaElementRef: ElementRef<HTMLTextAreaElement>;
    size: TextareaSize;
    readonly size$: BehaviorSubject<TextareaSize>;
    readonly placeholder: string;
    readonly placeholder$: BehaviorSubject<string>;
    readonly autocomplete: boolean;
    readonly autocomplete$: BehaviorSubject<boolean>;
    readonly isPatched: boolean;
    readonly isPatched$: BehaviorSubject<boolean>;
    minRows: number;
    private readonly minRows$;
    readonly minHeightPx$: Observable<number>;
    maxRows: number;
    private readonly maxRows$;
    readonly maxHeightPx$: Observable<Nullable<number>>;
    maxLength: Nullable<number>;
    readonly maxLength$: BehaviorSubject<Nullable<number>>;
    counterVisibility: TextareaCounterVisibility;
    readonly counterVisibility$: BehaviorSubject<TextareaCounterVisibility>;
    private readonly focus;
    private readonly blur;
    enterKeyPrevented: boolean;
    readonly enterKeyPrevented$: BehaviorSubject<boolean>;
    readonly isInvalid$: Observable<boolean>;
    private readonly valueLength$;
    readonly counterValue$: Observable<string>;
    readonly isCounterVisible$: Observable<boolean>;
    constructor(ngControl: NgControl);
    protected setValue(value: Nullable<string>): void;
    ngOnChanges(changes: ComponentChanges<this>): void;
    emitFocusEvent(focusEvent: FocusEvent): void;
    emitBlurEvent(blurEvent: FocusEvent): void;
    preventEnterKeyEvent(event: MouseEvent): void;
    focusOnTextareaElement(): void;
    processMouseDown(event: MouseEvent): void;
    private processSizeChange;
    private processPlaceholderChange;
    private processAutocompleteChange;
    private processIsPatchedChange;
    private processMaxLengthChange;
    private processMaxRowsChange;
    private processMinRowsChange;
    private processCounterVisibilityChange;
    private processEnterKeyDisabledChange;
    private static getHeightPxByRowsCount;
    static ɵfac: i0.ɵɵFactoryDeclaration<TextareaBase, [{ optional: true; }]>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<TextareaBase, never, never, { "size": "size"; "placeholder": "placeholder"; "autocomplete": "autocomplete"; "isPatched": "isPatched"; "minRows": "minRows"; "maxRows": "maxRows"; "maxLength": "maxLength"; "counterVisibility": "counterVisibility"; "enterKeyPrevented": "enterKeyPrevented"; }, { "focus": "focus"; "blur": "blur"; }, never, never, false>;
}
