import { EventEmitter, OnChanges, OnDestroy, TemplateRef } from '@angular/core';
import { ControlValueAccessor, NgControl } from '@angular/forms';
import { ComponentChanges } from '@bimeister/pupakit.common';
import { Nullable } from '@bimeister/utilities';
import { Observable } from 'rxjs';
import { SelectStateServiceDeclaration } from '../../interfaces/select-state-service-declaration.interface';
import { OnChangeCallback } from '../../types/on-change-callback.type';
import { OnTouchedCallback } from '../../types/on-touched-callback.type';
import { SelectOuterValue } from '../../types/select-outer-value.type';
import { SelectSize } from '../../types/select-size.type';
import * as i0 from "@angular/core";
export declare abstract class SelectBase<T> implements OnChanges, OnDestroy, ControlValueAccessor {
    protected readonly selectStateService: SelectStateServiceDeclaration<T>;
    abstract isMultiSelectionEnabled: boolean;
    abstract isUnselectionEnabled: boolean;
    abstract isPatched: boolean;
    abstract placeholder: string;
    abstract withReset: boolean;
    abstract inline: boolean;
    abstract size: SelectSize;
    invalidTooltipHideOnHover: boolean;
    invalidTooltipDisabled: boolean;
    invalidTooltip: Nullable<string>;
    invalidTooltipContentTemplate: Nullable<TemplateRef<unknown>>;
    readonly isTriggerTouched$: Observable<boolean>;
    readonly focus: EventEmitter<void>;
    readonly blur: EventEmitter<void>;
    readonly reset: EventEmitter<void>;
    private readonly subscription;
    constructor(selectStateService: SelectStateServiceDeclaration<T>, ngControl: NgControl);
    protected processCloseEvent(): void;
    protected resetIsTriggerTouchedState(): void;
    ngOnChanges(changes: ComponentChanges<this>): void;
    ngOnDestroy(): void;
    writeValue(newValue: SelectOuterValue<T>): void;
    registerOnChange(onChange: OnChangeCallback<SelectOuterValue<T>>): void;
    registerOnTouched(onTouched: OnTouchedCallback): void;
    setDisabledState(isDisabled: boolean): void;
    private processIsMultiSelectionEnabledValueChange;
    private processIsUnselectionEnabledValueChange;
    private processIsPatchedValueChange;
    private processPlaceholderValueChange;
    private processWithResetChange;
    private processInlineChange;
    private processSizeChange;
    private processInvalidTooltipHideOnHoverChange;
    private processInvalidTooltipDisabledChange;
    private processInvalidTooltipChange;
    private processInvalidTooltipContentTemplateChange;
    private handleIsExpandedChangesToEmitFocusEvents;
    static ɵfac: i0.ɵɵFactoryDeclaration<SelectBase<any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<SelectBase<any>, never, never, {}, { "focus": "focus"; "blur": "blur"; "reset": "reset"; }, never, never, false>;
}
