import * as i0 from '@angular/core';
import { ElementRef, EventEmitter, ChangeDetectorRef, DestroyRef, AfterViewInit, OnInit, TemplateRef, Injector, ViewContainerRef, InjectionToken } from '@angular/core';
import * as i2 from '@fundamental-ngx/cdk/data-source';
import { BaseDataSource, AbstractDataProvider, MatchingStrategy, DataProvider, DataSourceDirective, DataSourceParser } from '@fundamental-ngx/cdk/data-source';
import * as i1 from '@fundamental-ngx/cdk/forms';
import { SelectableOptionItem, CvaControl, CvaDirective, FormStates, SelectItem } from '@fundamental-ngx/cdk/forms';
import { ContentDensity, Nullable, RangeSelector, DynamicComponentService, AutoCompleteEvent, FocusEscapeDirection } from '@fundamental-ngx/cdk/utils';
import { MobileModeConfig, MobileMode, MobileModeBase } from '@fundamental-ngx/core/mobile-mode';
import { PopoverFillMode } from '@fundamental-ngx/core/shared';
import * as rxjs from 'rxjs';
import { Observable, BehaviorSubject, Subscription, Subject } from 'rxjs';
import { ContentDensityObserver } from '@fundamental-ngx/core/content-density';
import { ListFocusItem } from '@fundamental-ngx/core/list';

declare class FdMultiComboBoxDataSource<T> extends BaseDataSource<T> {
    dataProvider: AbstractDataProvider<T>;
    /** @hidden */
    limitless: boolean;
    /** @hidden */
    constructor(dataProvider: AbstractDataProvider<T>);
}
declare class ArrayMultiComboBoxDataSource<T> extends FdMultiComboBoxDataSource<T> {
    /** @hidden */
    constructor(data: T[]);
}
declare class ObservableMultiComboBoxDataSource<T> extends FdMultiComboBoxDataSource<T> {
    /** @hidden */
    constructor(data: Observable<T[]>);
}
/**
 * Type of acceptable objects as a datasource for the Multi-Combo Box component.
 */
type FdMultiComboboxAcceptableDataSource<T> = FdMultiComboBoxDataSource<T> | Observable<T[]> | T[];

declare class MultiComboboxSelectionChangeEvent {
    source: BaseMultiCombobox;
    selectedItems: SelectableOptionItem['value'];
    /**
     * Multi Combobox selection change event
     * @param source Multi Combobox component
     * @param selectedItems Selected items
     */
    constructor(source: BaseMultiCombobox, selectedItems: SelectableOptionItem['value']);
}

/**
 * Default options for Multi-Combobox
 */
declare class MultiComboboxConfig {
    /**
     * Content Density of element. 'cozy' | 'compact'
     */
    contentDensity: ContentDensity;
    /**
     * String matching strategy for typeahead list. Default: 'starts with per term'
     */
    matchingStrategy: MatchingStrategy;
    /**
     * Maps data providers
     */
    providers: Map<string, DataProvider<any>> | null;
    static ɵfac: i0.ɵɵFactoryDeclaration<MultiComboboxConfig, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<MultiComboboxConfig>;
}

type TextAlignment = 'left' | 'right';
declare abstract class BaseMultiCombobox<T = any> {
    abstract selectedItems: T[];
    abstract group: boolean;
    abstract groupKey: string;
    abstract displayKey: string;
    abstract secondaryKey: string;
    abstract showSecondaryText: boolean;
    abstract lookupKey: string;
    abstract invalidEntryMessage: Nullable<string>;
    abstract invalidEntryDisplayTime: number;
    abstract limitless: boolean;
    abstract isGroup: boolean;
    abstract inputText: string;
    abstract searchInputElement: Nullable<ElementRef<HTMLInputElement>>;
    abstract selectionChange: EventEmitter<MultiComboboxSelectionChangeEvent>;
    abstract dataReceived: EventEmitter<boolean>;
    abstract dataRequested: EventEmitter<boolean>;
    /** @hidden */
    readonly cvaControl: CvaControl<T>;
    /** @hidden */
    readonly dataSourceDirective: DataSourceDirective<T, FdMultiComboBoxDataSource<T>>;
    /** Control Value Accessor directive for forms support. */
    readonly _cva: CvaDirective<any>;
    /** Multi combobox config. */
    readonly _multiComboboxConfig: MultiComboboxConfig | null;
    /** Content Density Observer */
    readonly contentDensityObserver: ContentDensityObserver;
    /**
     * @hidden
     * List of selected suggestions
     */
    _selectedSuggestions: SelectableOptionItem<T>[];
    /**
     * @hidden
     * List of matched suggestions
     */
    _suggestions: SelectableOptionItem[];
    /**
     * @hidden
     * Grouped suggestions mapped to array.
     */
    _flatSuggestions: SelectableOptionItem[];
    /** @hidden */
    _fullFlatSuggestions: SelectableOptionItem[];
    /** @hidden */
    selectedShown$: BehaviorSubject<boolean>;
    /** @Hidden */
    protected readonly _elmRef: ElementRef<any>;
    /** @hidden */
    protected readonly _cd: ChangeDetectorRef;
    /** @hidden */
    protected readonly _mapLimit: number;
    /** @Hidden */
    protected readonly _destroyRef: DestroyRef;
    /** @hidden */
    protected _dataSource: FdMultiComboboxAcceptableDataSource<T>;
    /** @hidden */
    protected _inputTextValue: string;
    /** @hidden */
    protected _previousInputText: string;
    /** @hidden */
    protected _matchingStrategy: MatchingStrategy;
    /** @hidden */
    protected _dsSubscription: Subscription | null;
    /** @hidden */
    protected _element: HTMLElement;
    /**
     * @hidden
     * Keys, that won't trigger the popover's open state, when dispatched on search input.
     */
    protected readonly _nonOpeningKeys: number[];
    /** @hidden */
    protected _timerSub$: Subscription;
    /** @hidden */
    protected _previousState?: FormStates;
    /** @hidden */
    protected _previousStateMessage: Nullable<string>;
    /** @hidden */
    protected readonly _rangeSelector: RangeSelector;
    /** @hidden */
    private _dataSourceChanged;
    /** @hidden */
    writeValue(value: T[]): void;
    /**
     * Used to change the value of a control.
     * @param value the value to be applied
     * @param emitOnChange whether to emit "onChange" event.
     * Should be "false", if the change is made programmatically (internally) by the control, "true" otherwise
     */
    setValue(value: T[], emitOnChange?: boolean): void;
    /** @hidden */
    protected _displayFn: (value: T) => string;
    /** @hidden */
    protected _secondaryFn: (value: T) => string;
    /**
     * @hidden
     * Method to emit change event
     */
    protected _emitChangeEvent(): void;
    /** @hidden */
    protected _setSelectedSuggestions(): void;
    /**
     * Convert original data to SelectableOptionItems Interface
     * @hidden
     */
    protected _convertToOptionItems(items: T[]): SelectableOptionItem<T>[];
    /**
     * Convert data to SelectableOptionItems Interface
     * @hidden
     */
    protected _convertObjectsToOptionItems(items: T[]): SelectableOptionItem<T>[];
    /**
     * Convert object[] data to Group OptionItems Interface
     * @hidden
     */
    protected _convertObjectsToGroupOptionItems<K extends T>(items: K[]): SelectableOptionItem<T>[];
    /**
     * Convert T[] data to Secondary SelectableOptionItems<T> Interface
     * @hidden
     */
    protected _convertObjectsToSecondaryOptionItems<K extends T>(items: K[]): SelectableOptionItem<T>[];
    /**
     * Convert Primitive data(Boolean, String, Number) to SelectableOptionItems Interface
     * @hidden
     */
    protected _convertPrimitiveToOptionItems(items: any[]): SelectableOptionItem<T>[];
    /**
     * Convert T[] to SelectableOptionItems<T> Interface (Default)
     * @hidden
     */
    protected _convertObjectsToDefaultOptionItems(items: T[]): SelectableOptionItem<T>[];
    /** @hidden */
    protected _setInvalidEntry(): void;
    /** @hidden */
    protected _unsetInvalidEntry(): void;
    /** @hidden */
    protected _focusToSearchField(): void;
    /** @hidden */
    protected _mapAndUpdateModel(): void;
    /**
     * @hidden
     * Prepares the data stream and subscribes to it.
     */
    protected _openDataStream(matchingStrategy: MatchingStrategy): void;
    /**
     * Parses the data from the data stream and updates the model if needed.
     * @param data array of objects from the data stream.
     */
    protected _parseDataSourceValue(data: T[]): void;
    /**
     * Transforms plain array into `SelectableOptionItem<T>`
     * @param data
     */
    protected _convertDataSourceSuggestions(data: T[]): void;
    /** @hidden */
    protected _processingEmptyData(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<BaseMultiCombobox<any>, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<BaseMultiCombobox<any>, never, never, {}, {}, never, never, true, never>;
}

declare const FD_MAP_LIMIT: InjectionToken<number>;
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"; }; }]>;
}

declare class SelectAllTogglerComponent extends ListFocusItem implements OnInit {
    /**
     * Handler for the select all items
     * */
    selectAllHandler: (select: boolean) => void;
    /**
     * Stream for receiving information about the value changes,
     */
    valueChanges: Observable<unknown>;
    /** @hidden */
    selectedItems: Array<unknown>;
    /** @hidden */
    flatItems: Array<unknown>;
    /** @hidden */
    get allAreSelected(): boolean;
    /** @hidden */
    get someAreSelected(): boolean;
    /** @hidden */
    get checkboxValue(): boolean | null;
    /** @hidden */
    private _destroyRef;
    /** @hidden */
    private changeDetector;
    /** @hidden */
    onKeyDown($event: KeyboardEvent): void;
    /** @hidden */
    onClick(): void;
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    change(value: boolean): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<SelectAllTogglerComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<SelectAllTogglerComponent, "fd-multi-combobox-select-all-toggler", never, { "selectAllHandler": { "alias": "selectAllHandler"; "required": false; }; "valueChanges": { "alias": "valueChanges"; "required": false; }; "selectedItems": { "alias": "selectedItems"; "required": false; }; "flatItems": { "alias": "flatItems"; "required": false; }; }, {}, never, never, true, never>;
}

declare class MultiAnnouncerDirective {
    /** @hidden */
    multiAnnouncerOptions: unknown[];
    /** @hidden */
    private _tokens;
    /** @hidden */
    private _noResultsAnnounced;
    /** @hidden */
    private _resultsAnnounced;
    /** @hidden */
    private _announcement;
    /** @hidden */
    private readonly _liveAnnouncer;
    /** @hidden */
    private _resolveTranslation;
    /** @hidden */
    private _makeSearchTermChangeAnnouncements;
    /** @hidden */
    private _buildAnnouncement;
    /** @hidden */
    private _makeAnnouncement;
    static ɵfac: i0.ɵɵFactoryDeclaration<MultiAnnouncerDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<MultiAnnouncerDirective, "[fdMultiAnnouncer]", ["fdMultiAnnouncer"], { "multiAnnouncerOptions": { "alias": "multiAnnouncerOptions"; "required": false; }; }, {}, ["_tokens"], never, true, never>;
}

declare class MultiComboboxModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<MultiComboboxModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<MultiComboboxModule, never, [typeof MultiComboboxComponent, typeof SelectAllTogglerComponent, typeof MultiAnnouncerDirective], [typeof MultiComboboxComponent, typeof SelectAllTogglerComponent, typeof MultiAnnouncerDirective]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<MultiComboboxModule>;
}

declare class MultiComboboxDataSourceParser<T> implements DataSourceParser<T, FdMultiComboBoxDataSource<T>> {
    /**
     * Transforms plain array or observable into DataSource class.
     * @param source
     */
    parse(source: FdMultiComboboxAcceptableDataSource<T>): FdMultiComboBoxDataSource<T> | undefined;
}

/** @hidden */
declare function lookupValue(item: unknown, lookupKey: string): string;
/** @hidden */
declare function displayValue(item: unknown, displayKey: string): string;
/** @hidden */
declare function objectGet(obj: unknown, is: string | string[] | undefined): any;
/** @hidden */
declare function getSelectItemByInputValue<T>(suggestions: SelectableOptionItem<T>[], needleValue: string): SelectableOptionItem<T> | undefined;
/** @hidden
 *  Map grouped values to array. */
declare function flattenGroups(items: SelectableOptionItem[]): SelectableOptionItem[];
/** @hidden */
declare function getTokenIndexByIdlOrValue(item: SelectableOptionItem, suggestions: SelectableOptionItem[]): number;

interface MultiCombobox<T = any> {
    selectedItems: T[];
    displayKey: string;
    lookupKey: string;
    showSecondaryText: boolean;
    secondaryKey: string;
    groupKey: string;
    isGroup: boolean;
    _suggestions: SelectableOptionItem[];
    _selectedSuggestions: SelectableOptionItem[];
}
/**
 * Combobox Interface to have typing and avoid circular dependency between
 * MultiComboboxComponent <==> MultiComboboxMobileComponent
 */
interface MobileMultiComboboxInterface extends MobileMode, MultiCombobox {
    selectedShown$: BehaviorSubject<boolean>;
    openChange: Subject<boolean>;
    _moreClicked(): void;
    _dialogApprove(): void;
    _dialogDismiss(backup: SelectableOptionItem[]): void;
    _searchTermChanged(term?: string): void;
}

declare class MobileMultiComboboxComponent extends MobileModeBase<MobileMultiComboboxInterface> implements OnInit {
    /** @hidden */
    dialogTemplate: TemplateRef<any>;
    /** @hidden
     * For internal usage
     * Control element, which will be rendered inside dialog.
     * List element, which will be rendered inside dialog.
     */
    childContent: Nullable<{
        listTemplate: TemplateRef<any>;
        controlTemplate: TemplateRef<any>;
    }>;
    /** @hidden */
    selectedShown$: rxjs.BehaviorSubject<boolean>;
    /** @hidden */
    private _selectedBackup;
    /** @hidden */
    constructor(multiComboboxComponent: MobileMultiComboboxInterface);
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    showSelected(): void;
    /** @hidden */
    handleDismiss(): void;
    /** @hidden */
    handleApprove(): void;
    /** @hidden */
    private _toggleDialog;
    /** @hidden */
    private _listenOnMultiComboboxOpenChange;
    /** @hidden */
    private _open;
    static ɵfac: i0.ɵɵFactoryDeclaration<MobileMultiComboboxComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<MobileMultiComboboxComponent, "fd-mobile-multi-combobox", never, {}, {}, never, never, true, never>;
}

declare const MULTI_COMBOBOX_COMPONENT: InjectionToken<unknown>;

export { ArrayMultiComboBoxDataSource, BaseMultiCombobox, FD_MAP_LIMIT, FdMultiComboBoxDataSource, MULTI_COMBOBOX_COMPONENT, MobileMultiComboboxComponent, MultiAnnouncerDirective, MultiComboboxComponent, MultiComboboxConfig, MultiComboboxDataSourceParser, MultiComboboxModule, MultiComboboxSelectionChangeEvent, ObservableMultiComboBoxDataSource, SelectAllTogglerComponent, displayValue, flattenGroups, getSelectItemByInputValue, getTokenIndexByIdlOrValue, lookupValue, objectGet };
export type { FdMultiComboboxAcceptableDataSource, MobileMultiComboboxInterface, MultiCombobox, TextAlignment };
