import { CdkOverlayOrigin, OverlayRef } from '@angular/cdk/overlay';
import { ElementRef, EventEmitter, OnDestroy, TemplateRef } from '@angular/core';
import { NgControl } from '@angular/forms';
import { Nullable } from '@bimeister/utilities';
import { BehaviorSubject, Observable, Subscription } from 'rxjs';
import { SelectStateServiceDeclaration as SelectStateServiceInterface } from '../../../declarations/interfaces/select-state-service-declaration.interface';
import { OnChangeCallback } from '../../../declarations/types/on-change-callback.type';
import { OnTouchedCallback } from '../../../declarations/types/on-touched-callback.type';
import { SelectOuterValue } from '../../../declarations/types/select-outer-value.type';
import { SelectSize } from '../../../declarations/types/select-size.type';
import * as i0 from "@angular/core";
export declare class SelectStateService<T> implements SelectStateServiceInterface<T>, OnDestroy {
    private readonly document;
    private readonly currentSerializedValue$;
    readonly currentValue$: Observable<T[]>;
    private readonly subscription;
    private readonly isMultiSelectionEnabled$;
    private readonly isUnselectionEnabled$;
    readonly isDisabled$: BehaviorSubject<boolean>;
    readonly isExpanded$: BehaviorSubject<boolean>;
    readonly control$: BehaviorSubject<Nullable<NgControl>>;
    readonly isTouched$: BehaviorSubject<Nullable<boolean>>;
    readonly isPatched$: BehaviorSubject<Nullable<boolean>>;
    readonly isValid$: Observable<boolean>;
    readonly isFilled$: BehaviorSubject<boolean>;
    readonly withReset$: BehaviorSubject<boolean>;
    readonly inline$: BehaviorSubject<boolean>;
    readonly size$: BehaviorSubject<SelectSize>;
    readonly isTriggerTouched$: BehaviorSubject<boolean>;
    readonly invalidTooltipHideOnHover$: BehaviorSubject<boolean>;
    readonly invalidTooltipDisabled$: BehaviorSubject<boolean>;
    readonly invalidTooltip$: BehaviorSubject<Nullable<string>>;
    readonly invalidTooltipContentTemplate$: BehaviorSubject<Nullable<TemplateRef<unknown>>>;
    readonly placeholder$: BehaviorSubject<Nullable<string>>;
    private readonly onChangeCallback$;
    private readonly onTouchedCallback$;
    readonly dropdownOverlayOrigin$: BehaviorSubject<CdkOverlayOrigin>;
    private readonly dropdownTriggerButton$;
    readonly dropdownOverlayRef$: BehaviorSubject<OverlayRef>;
    readonly dropdownTriggerButtonWidthPx$: Observable<number>;
    readonly resetOutput: EventEmitter<void>;
    constructor(document: Document);
    ngOnDestroy(): void;
    setControlRef(control: NgControl): void;
    collapse(): void;
    open(): void;
    toggleExpansion(): void;
    defineDropdownTrigger(overlayOrigin: CdkOverlayOrigin, buttonElement: HTMLButtonElement): void;
    defineDropdownOverlayRef(overlayRef: OverlayRef): void;
    defineOnChangeCallback(onChange: OnChangeCallback<T[]>): void;
    defineOnTouchedCallback(onTouched: OnTouchedCallback): void;
    setMultiSelectionState(isEnabled: boolean): void;
    setIsTriggerTouchedState(isTriggerTouched: boolean): void;
    setUnselectionState(isEnabled: boolean): void;
    setIsPatchedState(isPatched: boolean): void;
    setPlaceholderState(placeholder: string): void;
    setWithResetState(withReset: boolean): void;
    setInlineState(inline: boolean): void;
    setSizeState(size: SelectSize): void;
    setInvalidTooltipHideOnHoverState(invalidTooltipHideOnHover: boolean): void;
    setInvalidTooltipDisabledState(invalidTooltipDisabled: boolean): void;
    setInvalidTooltipState(invalidTooltip: Nullable<string>): void;
    setInvalidTooltipContentTemplateState(invalidTooltipContentTemplate: Nullable<TemplateRef<unknown>>): void;
    setDisabledState(isDisabled: boolean): void;
    processSelection(value: T): void;
    setIsFilled(isFilled: boolean): void;
    isPicked(value: T): Observable<boolean>;
    setValue(value: SelectOuterValue<T>): void;
    reset(): void;
    processFocusInputContainer(inputElement: ElementRef<HTMLInputElement>): Subscription;
    private listenOutsideEventsForClose;
    private static getParsedValue;
    static ɵfac: i0.ɵɵFactoryDeclaration<SelectStateService<any>, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<SelectStateService<any>>;
}
