import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, IterableDiffers, NgZone, OnChanges, OnDestroy, OnInit, QueryList, Renderer2, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import { FocusableOption, FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';
import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
import { BehaviorSubject, Observable } from 'rxjs';
import { Modifier, Options } from '@popperjs/core';
import { TemplateIdDirective } from '../../shared';
import { IMultiSelect, IOption, SearchFn } from '../multi-select.type';
import { MultiSelectService } from '../multi-select.service';
import { MultiSelectOptionComponent } from '../multi-select-option/multi-select-option.component';
import * as i0 from "@angular/core";
interface IPluralMap {
    [k: string]: string;
}
export declare const observeReferenceResizeModifier: Modifier<string, Options>;
export declare const sameAsReferenceWidthModifier: Modifier<string, Options>;
export declare const defaultPopperOptions: Partial<Options>;
export declare class MultiSelectComponent<TValue extends string | number> implements IMultiSelect<TValue>, ControlValueAccessor, AfterViewInit, OnChanges, OnDestroy, OnInit {
    #private;
    private elementRef;
    private renderer;
    private ngZone;
    private changeDetectorRef;
    private viewContainerRef;
    private focusMonitor;
    private multiSelectService;
    private iterableDiffers;
    constructor(elementRef: ElementRef, renderer: Renderer2, ngZone: NgZone, changeDetectorRef: ChangeDetectorRef, viewContainerRef: ViewContainerRef, focusMonitor: FocusMonitor, multiSelectService: MultiSelectService, iterableDiffers: IterableDiffers);
    private readonly differ;
    readonly optionsArray$: Observable<IOption[]>;
    readonly userOptionsArray$: BehaviorSubject<IOption[]>;
    readonly optionsSelected$: BehaviorSubject<IOption[]>;
    readonly optionsSelected: Map<any, IOption>;
    readonly value$: BehaviorSubject<TValue[]>;
    onChange: (value: any) => void;
    onTouched: () => void;
    writeValue(value: TValue | TValue[]): void;
    registerOnChange(fn: any): void;
    registerOnTouched(fn: any): void;
    setDisabledState(isDisabled: boolean): void;
    /**
     * Allow users to create options if they are not in the list of options.
     * @type boolean
     * @default false
     * @since 4.5.11
     */
    allowCreateOptions: boolean;
    /**
     * Enables selection cleaner element
     * @type boolean
     * @default true | 'active'
     */
    cleaner: boolean | 'active';
    /**
     * Clear current search on selecting an item
     * @type boolean
     * @default false
     * @since 4.5.11
     */
    clearSearchOnSelect: boolean;
    /**
     * Disables multi-select component
     * @type boolean
     * @default false
     */
    set disabled(value: boolean);
    get disabled(): boolean;
    private _disabled;
    /**
     * Add loading spinner and reduced opacity.
     * @type boolean
     * @default false
     * @since 4.5.2
     */
    set loading(value: boolean);
    isLoading: import("@angular/core").WritableSignal<boolean>;
    /**
     * Specifies that multiple options can be selected at once
     * @type boolean
     * @default false
     */
    set multiple(value: boolean);
    get multiple(): boolean;
    private _multiple;
    /**
     * Hidden native select form
     * @type string
     * @default ''
     */
    nativeFormId: string;
    /**
     * Hidden native select id
     * @type string
     * @default ''
     */
    nativeId: string;
    /**
     * Hidden native select name
     * @type string
     * @default ''
     */
    nativeName: string;
    /**
     * List of option elements
     * @type IOption[]
     * @default []
     */
    set options(options: IOption[]);
    get options(): IOption[];
    /**
     * Sets maxHeight of options list in px
     * @type string | number
     * @default 'auto'
     */
    optionsMaxHeight: string | number;
    /**
     * Sets option style
     * @type 'checkbox' | 'text'
     * @default 'checkbox'
     */
    set optionsStyle(value: 'checkbox' | 'text');
    /**
     * Specifies a short hint that is visible in the search input
     * @type string
     * @default 'Select...'
     */
    placeholder: string;
    /**
     * Enables search input element
     * @type boolean | SearchFn | 'external'
     * @default true
     */
    search: boolean | 'external' | SearchFn;
    /**
     * Sets the label for no results when filtering
     * @type string
     * @default 'no items'
     */
    searchNoResultsLabel: string;
    /**
     * Sets initial search string
     * @type string
     * @default ''
     */
    set searchValue(value: string);
    get searchValue(): string;
    private _searchValue;
    /**
     * Emits searchValue string for external filtering
     * @type string
     */
    readonly searchValueChange: EventEmitter<string>;
    /**
     * Enables select all button
     * @type boolean
     * @default true
     */
    selectAll: boolean;
    /**
     * Sets the select all button label
     * @type string
     * @default 'Select all options'
     */
    selectAllLabel: string;
    /**
     * Selection type
     * @type 'counter' | 'tags' | 'text'
     * @default 'tags'
     */
    selectionType: 'counter' | 'tags' | 'text';
    /**
     * Counter selection label value
     * @type string
     * @default 'item(s) selected'
     */
    selectionTypeCounterText: string;
    /**
     * Counter selection label plural map for I18nPluralPipe
     * @type IPluralMap
     * @default { '=1': 'item selected', 'other': 'items selected' }
     */
    selectionTypeCounterTextPluralMap?: IPluralMap;
    /**
     * Size the component small or large.
     * @type 'sm' | 'lg' | undefined
     */
    size?: 'sm' | 'lg';
    /**
     * Initial value of multi-select
     * @type TValue | TValue[]
     */
    set value(value: TValue | TValue[]);
    get value(): TValue | TValue[];
    /**
     * Emits valueChange
     * @type TValue | TValue[]
     */
    readonly valueChange: EventEmitter<TValue | TValue[]>;
    /**
     * Toggle visual validation feedback.
     * @type boolean | undefined
     * @default undefined
     */
    valid?: boolean;
    /**
     * Enable virtual scroller for options list.
     * @type boolean
     * @default false
     */
    set virtualScroller(value: boolean);
    get virtualScroller(): boolean;
    private _virtualScroller;
    /**
     * Amount of visible options, if set - overwrites optionsMaxHeight
     * @type number
     * @default 8
     */
    set visibleItems(value: number);
    get visibleItems(): number;
    private _visibleItems;
    /**
     * The size of the option item in the list (in pixels).
     * @type number
     * @default 40
     */
    itemSize: number;
    /**
     * Min width of the options list (in pixels).
     * @type number
     * @default 196
     */
    itemMinWidth: number;
    readonly minWidth: import("@angular/core").WritableSignal<number>;
    /**
     * Toggle the visibility of the dropdown select component.
     * @type boolean
     * @default false
     */
    set visible(value: boolean);
    get visible(): boolean;
    private _visible;
    /**
     * Emits visibleChange
     * @type boolean
     */
    readonly visibleChange: EventEmitter<boolean>;
    /**
     * Optional popper Options object
     * @type Partial<Options>
     */
    set popperOptions(options: Partial<Options>);
    get popperOptions(): Partial<Options>;
    isDropdownVisible: boolean;
    get selectedOptions(): IOption[];
    get selectedOptionsText(): string;
    get counterText(): string;
    get counterTextType(): string;
    get counterPlaceholderText(): string | null;
    private focusMonitorSubscription;
    multiSelectOptionsContent: QueryList<MultiSelectOptionComponent>;
    multiSelectOptionsView: QueryList<MultiSelectOptionComponent>;
    scrollViewportView: QueryList<CdkVirtualScrollViewport>;
    optionsElementRef: ElementRef;
    protected scrollViewport: CdkVirtualScrollViewport;
    protected templates: {
        [id: string]: TemplateRef<any>;
    };
    contentTemplates: QueryList<TemplateIdDirective>;
    private focusKeyManager;
    inputElement: ElementRef;
    dropdownMenu: ElementRef;
    dropdown: ElementRef;
    dropdownToggle: ElementRef;
    get hostClasses(): {
        disabled: boolean;
    };
    get multiselectClasses(): {
        [x: string]: boolean;
        'form-multi-select': boolean;
        show: boolean;
        disabled: boolean;
        'is-valid': boolean;
        'is-invalid': boolean;
    };
    private get ariaMultiSelectable();
    private get ariaExpanded();
    private get tabIndex();
    private set tabIndex(value);
    private _tabIndex;
    onKeyUp($event: KeyboardEvent): void;
    onKeyDown($event: KeyboardEvent): void;
    onClick($event: MouseEvent): void;
    visibleOptions: import("@angular/core").WritableSignal<boolean>;
    get subtreeFocused(): boolean;
    set subtreeFocused(focused: boolean);
    private _subtreeFocused;
    private nativeSelectRef;
    focusOrigin(origin: FocusOrigin): boolean;
    ngOnInit(): void;
    ngOnDestroy(): void;
    ngOnChanges(changes: SimpleChanges): void;
    makeOptions(options: IOption[]): void;
    userOptions: import("@angular/core").Signal<IOption[]>;
    addUserOption(): void;
    removeAllUserOptions(): void;
    ngAfterViewInit(): void;
    private tabTarget;
    private multiselectSubscribe;
    clearAllOptions($event?: MouseEvent): void;
    selectAllOptions(): void;
    handleTagRemove(value: any): void;
    setFocus(origin?: FocusOrigin, methodName?: string): void;
    filterOptions(value: string): void;
    createNativeSelect(): void;
    updateNativeSelect(): void;
    inputElementSize(): void;
    handleSearchKeyDown($event: KeyboardEvent): void;
    private setFocusMonitor;
    activeOption: (FocusableOption & MultiSelectOptionComponent) | null;
    handleScrolledIndexChange(scrolledIndex: number, scrollViewport: CdkVirtualScrollViewport): void;
    trackByFn(index: number, option: IOption): string | number;
    handleSearchValueChange(searchValue: string): void;
    private setVirtualScroller;
    private setListKeyManager;
    setFocusKeyManager(focusableOptions: QueryList<MultiSelectOptionComponent> | MultiSelectOptionComponent[]): void;
    get firstFocusableItem(): MultiSelectOptionComponent | undefined;
    private setFirstItemActive;
    updateActiveItem(index: number): void;
    updateActiveItem<TItem extends MultiSelectOptionComponent & FocusableOption>(item: TItem): void;
    handleIndicatorClick($event: MouseEvent): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<MultiSelectComponent<any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<MultiSelectComponent<any>, "c-multi-select", ["cMultiSelect"], { "allowCreateOptions": { "alias": "allowCreateOptions"; "required": false; }; "cleaner": { "alias": "cleaner"; "required": false; }; "clearSearchOnSelect": { "alias": "clearSearchOnSelect"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "nativeFormId": { "alias": "nativeFormId"; "required": false; }; "nativeId": { "alias": "nativeId"; "required": false; }; "nativeName": { "alias": "nativeName"; "required": false; }; "options": { "alias": "options"; "required": false; }; "optionsMaxHeight": { "alias": "optionsMaxHeight"; "required": false; }; "optionsStyle": { "alias": "optionsStyle"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "search": { "alias": "search"; "required": false; }; "searchNoResultsLabel": { "alias": "searchNoResultsLabel"; "required": false; }; "searchValue": { "alias": "searchValue"; "required": false; }; "selectAll": { "alias": "selectAll"; "required": false; }; "selectAllLabel": { "alias": "selectAllLabel"; "required": false; }; "selectionType": { "alias": "selectionType"; "required": false; }; "selectionTypeCounterText": { "alias": "selectionTypeCounterText"; "required": false; }; "selectionTypeCounterTextPluralMap": { "alias": "selectionTypeCounterTextPluralMap"; "required": false; }; "size": { "alias": "size"; "required": false; }; "value": { "alias": "value"; "required": false; }; "valid": { "alias": "valid"; "required": false; }; "virtualScroller": { "alias": "virtualScroller"; "required": false; }; "visibleItems": { "alias": "visibleItems"; "required": false; }; "itemSize": { "alias": "itemSize"; "required": false; }; "itemMinWidth": { "alias": "itemMinWidth"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "popperOptions": { "alias": "popperOptions"; "required": false; }; }, { "searchValueChange": "searchValueChange"; "valueChange": "valueChange"; "visibleChange": "visibleChange"; }, ["multiSelectOptionsContent", "contentTemplates"], ["*"], true, never>;
    static ngAcceptInputType_allowCreateOptions: unknown;
    static ngAcceptInputType_clearSearchOnSelect: unknown;
    static ngAcceptInputType_disabled: unknown;
    static ngAcceptInputType_loading: unknown;
    static ngAcceptInputType_multiple: unknown;
    static ngAcceptInputType_virtualScroller: unknown;
    static ngAcceptInputType_visibleItems: unknown;
    static ngAcceptInputType_visible: unknown;
}
export {};
