import { AfterViewInit, ElementRef, EventEmitter, InjectionToken, Injector, OnInit, TemplateRef, ViewContainerRef } from '@angular/core';
import { MatchingStrategy } from '@fundamental-ngx/cdk/data-source';
import { SelectItem, SelectableOptionItem } from '@fundamental-ngx/cdk/forms';
import { AutoCompleteEvent, ContentDensity, DynamicComponentService, FocusEscapeDirection, Nullable } from '@fundamental-ngx/cdk/utils';
import { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';
import { PopoverFillMode } from '@fundamental-ngx/core/shared';
import { Subject } from 'rxjs';
import { BaseMultiCombobox } from './base-multi-combobox.class';
import { MultiComboboxSelectionChangeEvent } from './models/selection-change.event';
import * as i0 from "@angular/core";
import * as i1 from "@fundamental-ngx/cdk/forms";
import * as i2 from "@fundamental-ngx/cdk/data-source";
export declare const FD_MAP_LIMIT: InjectionToken<number>;
export declare class MultiComboboxComponent<T = any> extends BaseMultiCombobox<T> implements AfterViewInit, OnInit {
    private readonly _elementRef;
    private readonly _injector;
    private readonly _viewContainerRef;
    private readonly _dynamicComponentService;
    /**
     * Show select all checkbox
     */
    showSelectAll: boolean;
    /** Provides selected items. */
    set selectedItems(value: T[]);
    get selectedItems(): T[];
    /** Provides maximum height for the optionPanel. */
    maxHeight: string;
    /**
     * Whether AddOn Button should be focusable
     * @default false
     */
    buttonFocusable: boolean;
    /** Whether the autocomplete should be enabled; Enabled by default. */
    autoComplete: boolean;
    /** Whether list item options should be rendered as byline. */
    byline: boolean;
    /**
     * Max width of multi combobox dropdown body.
     * `none` will not limit width of the dropdown.
     * `container` will limit width of the dropdown to the width of the multi-input itself.
     * `number` will limit width of the dropdown by provided number in pixels.
     */
    bodyMaxWidth: 'none' | 'container' | number;
    /** @hidden */
    get _popoverMaxWidth(): Nullable<number>;
    /**
     * TODO: Name of the entity for which DataProvider will be loaded. You can either pass list of
     * items or use this entityClass and internally we should be able to do lookup to some registry
     * and retrieve the best matching DataProvider that is set on application level
     */
    entityClass: string;
    /** Whether the multi-combobox should be built on mobile mode. */
    mobile: boolean;
    /** Multi Combobox Mobile Configuration, it's applied only, when mobile is enabled. */
    mobileConfig: MobileModeConfig;
    /** Tells the multi-combobox if we need to group items. */
    group: boolean;
    /** A field name to use to group data by (support dotted notation). */
    groupKey: string;
    /** The field to show data in secondary column. */
    secondaryKey: string;
    /** Show the second column (applicable for two columns layout). */
    showSecondaryText: boolean;
    /** Horizontally align text inside the second column (applicable for two columns layout). */
    secondaryTextAlignment: 'left' | 'right';
    /** Turns on/off Adjustable Width feature. */
    autoResize: boolean;
    /** Whether to open the dropdown when the addon button is clicked. */
    openDropdownOnAddOnClicked: boolean;
    /** Value of the multi combobox */
    set value(value: T[]);
    get value(): T[];
    /**
     * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.
     * * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default
     * * `equal` will apply a width to the body equivalent to the width of the control.
     * * 'fit-content' will apply width needed to properly display items inside, independent of control.
     */
    fillControlMode: PopoverFillMode;
    /** Sets title attribute to addon button. */
    addonIconTitle: string;
    /**
     * @deprecated Use the i18n module to modify the translation for this string.
     * Sets invalid entry message.
     * */
    invalidEntryMessage: Nullable<string>;
    /** Turns limitless mode, ON or OFF */
    limitless: boolean;
    /**
     * Used in filters and any kind of comparators when we work with objects and this identify
     * unique field name based on which we are going to do the job
     */
    lookupKey: string;
    /**
     * When we deal with unknown object we can use `displayKey` to retrieve value from specific
     * property of the object to act as display value.
     *
     * @See ComboBox, Select, RadioGroup, CheckBox Group
     */
    displayKey: string;
    /**
     * List of values, it can be of type SelectItem, string or any object.
     * Generic object type is among the list of types,
     * because we allow to get labels and values using `displayKey` and `lookupKey` inputs accordingly.
     */
    list: Array<SelectItem | string | object>;
    /** Time in ms for how long message of invalid entry should be displayed. */
    invalidEntryDisplayTime: number;
    /**
     * String matching strategy for typeahead list.
     * Available options: 'starts with per term', 'starts with', 'contains'
     * Default: 'starts with per term' */
    matchingStrategy: MatchingStrategy;
    /** Event emitted when item is selected. */
    selectionChange: EventEmitter<MultiComboboxSelectionChangeEvent>;
    /** @hidden Emits event when the menu is opened/closed. */
    isOpenChange: EventEmitter<boolean>;
    /** Emits event when the addon button is clicked. */
    addOnButtonClicked: EventEmitter<Event>;
    /** Event emitted when data loading is started. */
    dataRequested: EventEmitter<boolean>;
    /** Event emitted when data loading is finished. */
    dataReceived: EventEmitter<boolean>;
    /** @hidden */
    readonly searchInputElement: Nullable<ElementRef<HTMLInputElement>>;
    /** @hidden */
    private readonly listComponent;
    /** @hidden */
    private readonly customTemplates;
    /** @hidden */
    private readonly mobileControlTemplate;
    /** @hidden */
    private readonly listTemplate;
    /** @hidden */
    private readonly _tokenizer;
    /** @hidden */
    private readonly _inputGroup;
    /**
     * @hidden
     * Custom Option item Template.
     */
    optionItemTemplate: TemplateRef<any>;
    /**
     * @hidden
     * Custom Group Header item Template.
     */
    groupItemTemplate: TemplateRef<any>;
    /**
     * @hidden
     * Custom Secondary item Template.
     */
    secondaryItemTemplate: TemplateRef<any>;
    /**
     * @hidden
     * Custom Selected option item Template.
     */
    selectedItemTemplate: TemplateRef<any>;
    /** @hidden */
    _contentDensity: ContentDensity;
    /** Set the input text of the input. */
    set inputText(value: string);
    /** Get the input text of the input. */
    get inputText(): string;
    /** Is empty search field. */
    get isEmptyValue(): boolean;
    /** @hidden */
    get isGroup(): boolean;
    /** Whether the Multi Input is opened. */
    isOpen: boolean;
    /**
     * @hidden
     * Max width of list container
     */
    maxWidth: number;
    /**
     * @hidden
     * Min width of list container
     */
    minWidth: number;
    /**
     * @hidden
     * Need for opening mobile version
     */
    openChange: Subject<boolean>;
    /** @hidden */
    private _selectedItems;
    /** @hidden */
    private readonly _lang$;
    /** @hidden */
    private _translationResolver;
    /** @hidden */
    constructor(_elementRef: ElementRef, _injector: Injector, _viewContainerRef: ViewContainerRef, _dynamicComponentService: DynamicComponentService);
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    ngAfterViewInit(): Promise<void>;
    /** @hidden */
    _toggleSelection(item: SelectableOptionItem, fromTokenCloseClick?: boolean): void;
    /** @hidden */
    _onOptionCheckboxClicked(event: MouseEvent, index: number): void;
    /** @hidden */
    _onCompleteTerm(event: AutoCompleteEvent): void;
    /**
     * @hidden
     * Method that selects all possible options.
     * *select* attribute – if *true* select all, if *false* unselect all
     * */
    _handleSelectAllItems: (select: boolean) => void;
    /** @hidden */
    _navigateByTokens(event: KeyboardEvent): void;
    /** @hidden */
    _removeToken(token: SelectableOptionItem, event?: MouseEvent): void;
    /** @hidden */
    _moreClicked(): void;
    /** @hidden */
    _onBlur(event: FocusEvent): void;
    /** @hidden */
    _onItemKeyDownHandler(event: KeyboardEvent): void;
    /** @hidden */
    _onOptionClicked(event: MouseEvent, index: number): void;
    /**
     * @hidden
     * Handle dialog dismissing, closes popover and sets backup data.
     */
    _dialogDismiss(backup: SelectableOptionItem[]): void;
    /**
     * @hidden
     * Handle dialog approval, closes popover and propagates data changes.
     */
    _dialogApprove(): void;
    /** @hidden */
    _popoverOpenChangeHandle(isOpen: boolean): void;
    /** Opens the select popover body. */
    open(): void;
    /** Closes the select popover body. */
    close(): void;
    /** @hidden */
    _showList(isOpen: boolean): void;
    /** @hidden */
    _searchTermChanged(text?: string): void;
    /**
     * Handle Click on Button
     * @hidden
     */
    _onPrimaryButtonClick(isOpen: boolean): void;
    /**
     * Handle Keydown on Input
     * @hidden
     */
    _onInputKeydownHandler(event: KeyboardEvent): void;
    /**
     * @hidden
     * Method passed to list component.
     */
    _handleListFocusEscape(direction: FocusEscapeDirection): void;
    /**
     * @hidden
     */
    _addOnClicked($event: Event): void;
    /** @hidden */
    _setLimitless(limitless: boolean): void;
    /** @hidden */
    _getMapLimit(): number;
    /**
     * @hidden
     * Iterate over every item and perform callback
     */
    private _onEveryItem;
    /** @hidden */
    private _toggleSelectionByInputText;
    /**
     * @hidden
     * Method to set input text as item label.
     */
    private _setInputTextFromOptionItem;
    /**
     * @hidden
     * applying range selection. Note, that this function will be invoked after combobox item's value has been changed
     */
    private _onListElementClicked;
    /** @hidden */
    private _propagateChange;
    /** @hidden */
    private _setUpMobileMode;
    /**
     * @hidden
     * Method that picks other value moved from current one by offset, called only when Multi Combobox is closed.
     */
    private _chooseOtherItem;
    /** @hidden */
    private _initWindowResize;
    /** @hidden */
    private _getOptionsListWidth;
    /**
     * @hidden
     * Assign custom templates
     */
    private _assignCustomTemplates;
    static ɵfac: i0.ɵɵFactoryDeclaration<MultiComboboxComponent<any>, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<MultiComboboxComponent<any>, "fd-multi-combobox", never, { "showSelectAll": { "alias": "showSelectAll"; "required": false; }; "selectedItems": { "alias": "selectedItems"; "required": false; }; "maxHeight": { "alias": "maxHeight"; "required": false; }; "buttonFocusable": { "alias": "buttonFocusable"; "required": false; }; "autoComplete": { "alias": "autoComplete"; "required": false; }; "byline": { "alias": "byline"; "required": false; }; "bodyMaxWidth": { "alias": "bodyMaxWidth"; "required": false; }; "entityClass": { "alias": "entityClass"; "required": false; }; "mobile": { "alias": "mobile"; "required": false; }; "mobileConfig": { "alias": "mobileConfig"; "required": false; }; "group": { "alias": "group"; "required": false; }; "groupKey": { "alias": "groupKey"; "required": false; }; "secondaryKey": { "alias": "secondaryKey"; "required": false; }; "showSecondaryText": { "alias": "showSecondaryText"; "required": false; }; "secondaryTextAlignment": { "alias": "secondaryTextAlignment"; "required": false; }; "autoResize": { "alias": "autoResize"; "required": false; }; "openDropdownOnAddOnClicked": { "alias": "openDropdownOnAddOnClicked"; "required": false; }; "value": { "alias": "value"; "required": false; }; "fillControlMode": { "alias": "fillControlMode"; "required": false; }; "addonIconTitle": { "alias": "addonIconTitle"; "required": false; }; "invalidEntryMessage": { "alias": "invalidEntryMessage"; "required": false; }; "limitless": { "alias": "limitless"; "required": false; }; "lookupKey": { "alias": "lookupKey"; "required": false; }; "displayKey": { "alias": "displayKey"; "required": false; }; "list": { "alias": "list"; "required": false; }; "invalidEntryDisplayTime": { "alias": "invalidEntryDisplayTime"; "required": false; }; "matchingStrategy": { "alias": "matchingStrategy"; "required": false; }; }, { "selectionChange": "selectionChange"; "isOpenChange": "isOpenChange"; "addOnButtonClicked": "addOnButtonClicked"; "dataRequested": "dataRequested"; "dataReceived": "dataReceived"; }, ["customTemplates"], ["*", "*"], true, [{ directive: typeof i1.CvaDirective; inputs: { "id": "inputId"; "placeholder": "placeholder"; "state": "state"; "stateMessage": "stateMessage"; "disabled": "disabled"; "readonly": "readonly"; "name": "name"; }; outputs: {}; }, { directive: typeof i2.DataSourceDirective; inputs: { "dataSource": "dataSource"; }; outputs: { "dataChanged": "dataChanged"; }; }]>;
}
