{"version":3,"file":"uipath-angular-components-ui-suggest.mjs","sources":["../../../projects/angular/components/ui-suggest/src/ui-suggest.animations.ts","../../../projects/angular/components/ui-suggest/src/ui-suggest.intl.ts","../../../projects/angular/components/ui-suggest/src/utils/items.utils.ts","../../../projects/angular/components/ui-suggest/src/ui-suggest.mat-form-field.ts","../../../projects/angular/components/ui-suggest/src/ui-suggest.component.ts","../../../projects/angular/components/ui-suggest/src/ui-suggest.component.html","../../../projects/angular/components/ui-suggest/src/ui-suggest.module.ts","../../../projects/angular/components/ui-suggest/src/uipath-angular-components-ui-suggest.ts"],"sourcesContent":["import {\n    animate,\n    AnimationTriggerMetadata,\n    group,\n    state,\n    style,\n    transition,\n    trigger,\n} from '@angular/animations';\n\n/**\n * Open / Close animation definitions for UiSuggest.\n *\n * These animations should mainly be kept in sync with the mat-menu animations.\n *\n * Reference: https://github.com/angular/components/blob/master/src/material/menu/menu-animations.ts\n */\nexport const UI_SUGGEST_ANIMATIONS: {\n    readonly transformMenuList: AnimationTriggerMetadata;\n} = {\n    transformMenuList: trigger('displayState', [\n        state(\n            'void',\n            style({\n                opacity: 0,\n                transform: 'scale(0.8)',\n            }),\n        ),\n        transition(\n            'void => open',\n            group([\n                animate('100ms linear', style({\n                    opacity: 1,\n                })),\n                animate('120ms cubic-bezier(0, 0, 0.2, 1)', style({\n                    transform: 'scale(1)',\n                })),\n            ]),\n        ),\n    ]),\n};\n","import { Subject } from 'rxjs';\n\nimport {\n    Injectable,\n    OnDestroy,\n} from '@angular/core';\n\n/**\n * Internationalization service definition for `UiSuggest`.\n *\n * @export\n */\n@Injectable()\nexport class UiSuggestIntl implements OnDestroy {\n    /**\n     * Label displayed when you re-enter an existing custom value.\n     *\n     */\n    customValueAlreadySelected = 'This item is already added.';\n    /**\n     * Label for the selection clear tooltip.\n     *\n     */\n    clearSelectionLabel = 'Clear Selection';\n    /**\n     * Label displayed when no results are available.\n     *\n     */\n    noResultsLabel = 'No results';\n    /**\n     * Label displayed when an item is in a loading state.\n     *\n     */\n    loadingLabel = 'Loading...';\n    /**\n     * Label announced by the a11y live announcer for custom values.\n     *\n     */\n    customValueLiveLabel = 'Custom value';\n\n    /**\n     * Notify if changes have occurred that require that the labels be updated.\n     *\n     */\n    // eslint-disable-next-line rxjs/finnish\n    changes = new Subject<void>();\n\n    protected _destroyed$ = new Subject<void>();\n\n    /**\n     * Live announced label for the current item.\n     *\n     * @param text The text of the active item.\n     * @param itemNo The current item index.\n     * @param itemCount The total item count.\n     */\n    currentItemLabel = (text: string, itemNo: number, itemCount: number, selectedStatus?: boolean) => `${text}${this._selectedStatusText(selectedStatus)} item ${itemNo} out of ${itemCount}`;\n\n    currentItemSelectionStatus = (text: string, isItemSelected: boolean) => `${text} item is ${isItemSelected ? 'selected' : 'removed from selection'}`;\n\n    /**\n     * Custom value label generator function.\n     *\n     * @param text The text of the custom value.\n     */\n    customValueLabel = (text: string) => text;\n\n    /**\n     * Label displayed when minimum number of characters to trigger the search is not met.\n     *\n     */\n    minCharsLength = (length: number) => length === 1\n        ? 'Please start typing to search'\n        : `Please type at least ${length} characters to search`;\n\n    /**\n     * Value label generator function.\n     *\n     * @param text The text of the value.\n     */\n    translateLabel = (text: string) => text;\n\n    /**\n     * @ignore\n     */\n    ngOnDestroy() {\n        this._destroyed$.next();\n        this._destroyed$.complete();\n        this.changes.complete();\n    }\n\n    private _selectedStatusText(selectedStatus?: boolean) {\n        if (selectedStatus) {\n            return ' (selected)';\n        }\n\n        return '';\n    }\n}\n","import cloneDeep from 'lodash-es/cloneDeep';\nimport sortBy from 'lodash-es/sortBy';\nimport { of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { isDevMode } from '@angular/core';\nimport { VirtualScrollItemStatus } from '@uipath/angular/directives/ui-virtual-scroll-range-loader';\n\nimport {\n    ISuggestValue,\n    ISuggestValueData,\n    ISuggestValues,\n    SuggestDisplayPriority,\n} from '../models';\n\n/**\n * Case-insensitive comparer.\n *\n * @param str1 Left hand input.\n * @param str2 Right hand input.\n * @returns If the strings are equal.\n * @ignore\n */\nexport const caseInsensitiveCompare = (str1: string, str2: string): boolean => str1.trim().toLowerCase() === str2.trim().toLowerCase();\n\n/**\n * Warns the developer that the provided item collection is falsy.\n *\n * @ignore\n */\nfunction arrayWarning(value: any) {\n    if (!isDevMode()) { return; }\n\n    if (!(value instanceof Array)) {\n        console.warn(`The 'value': ${JSON.stringify(value, null, 4)} should be of type Array!`);\n    }\n}\n\n/**\n * Warns the developer that the provided item collection contains falsy values.\n *\n * @ignore\n */\nfunction nullValueWarning(value: any) {\n    if (!isDevMode()) { return; }\n\n    if (\n        !value ||\n        value instanceof Array &&\n        value.some(v => v == null)\n    ) {\n        console.warn(`The provided 'value': ${JSON.stringify(value, null, 4)} contains 'undefined' entries, they will be removed!`);\n    }\n}\n\n/**\n * Sorts the items according to their display priority.\n *\n * @returns The sorted items.\n * @ignore\n */\nfunction applyDisplayPriority(mappedItems: ISuggestValue[], displayPriority: SuggestDisplayPriority, value: ISuggestValue[]) {\n    if (displayPriority === 'selected') {\n        return sortBy(mappedItems, [(item: ISuggestValue) => !value.find(v =>\n            v.id === item.id &&\n            v.text === item.text,\n        ), 'text']);\n    }\n\n    return mappedItems;\n}\n\n/**\n * Filtering utility with `limit`.\n *\n * @param arr The collection that needs to be filtered.\n * @param predicate The filter predicate.\n * @param [limit=0] Halts filtering if the `limit` amount of items have been found using the `predicate`.\n * @returns The filtering result.\n * @ignore\n */\nfunction filterItemsByPredicate(\n    arr: ISuggestValue[],\n    predicate: (item: ISuggestValue) => boolean,\n    limit = 0,\n) {\n    const results = [];\n\n    for (const item of arr) {\n        if (\n            limit > 0 &&\n            results.length === limit\n        ) { break; }\n\n        if (predicate(item)) {\n            results.push(item);\n        }\n    }\n\n    return results;\n}\n\n/**\n * Generates an in memory search factory.\n *\n * @param searchTerm The term searched for.\n * @param sourceList The items that need to be filtered.\n * @ignore\n */\nexport const inMemorySearch = (searchTerm: string, sourceList: ISuggestValue[]) =>\n    of(sourceList)\n        .pipe(\n            map(items => {\n                const data = filterItemsByPredicate(items,\n                    item =>\n                        item.text.toLowerCase().includes(searchTerm.toLowerCase()),\n                );\n                return {\n                    data,\n                    total: data.length,\n                } as ISuggestValues<any>;\n            }),\n        );\n\n/**\n * Clears falsy values from the array.\n *\n * @export\n * @param value The value that needs to be normalized.\n * @returns The normalized value.\n * @ignore\n */\nexport function checkAndNormalizeValue(value: ISuggestValue[]) {\n    arrayWarning(value);\n    nullValueWarning(value);\n\n    const clone = cloneDeep(value);\n    if (clone == null) {\n        return [];\n    }\n\n    if (clone.some((v: any) => v == null)) {\n        return clone.filter((v: any) => v != null);\n    }\n\n    return clone;\n}\n\n/**\n * Sorts the items according to the configured display priority and render direction.\n *\n * @export\n * @param data The item list that needs to be sorted.\n * @param displayPriority The requested display priority.\n * @param value The selected items.\n * @param isDown If the dropdown direction is `down`.\n * @returns The sorted item array.\n * @ignore\n */\nexport function sortByPriorityAndDirection(\n    data: ISuggestValue[],\n    displayPriority: SuggestDisplayPriority,\n    value: ISuggestValue[],\n    isDown: boolean,\n) {\n    const mappedItems = applyDisplayPriority(data, displayPriority, value);\n    return isDown ? mappedItems : mappedItems.reverse();\n}\n\n/**\n * @ignore\n */\nexport function mapInitialItems(\n    { total = 0, data = [] }: ISuggestValues<any>,\n    displayPriority: SuggestDisplayPriority,\n    value: ISuggestValue[],\n    loadingLabel: string,\n    isDown: boolean,\n    isLazy?: boolean,\n) {\n    const loadingLength = isLazy ? 0 : total - data.length;\n    const queryResponse = data.map(r => ({\n        ...r,\n        loading: VirtualScrollItemStatus.loaded,\n    }));\n    const mappedItems = applyDisplayPriority(queryResponse, displayPriority, value);\n    const loadingItems = generateLoadingInitialCollection(loadingLabel, loadingLength);\n\n    const responseResults = [\n        ...mappedItems,\n        ...loadingItems,\n    ];\n\n    return isDown ? responseResults : responseResults.reverse();\n}\n\n/**\n * @ignore\n */\nexport function generateLoadingInitialCollection(text: string, total = 0): ISuggestValue[] {\n    return new Array(total)\n        .fill(0)\n        .map(\n            () => ({\n                id: -1,\n                text,\n                loading: VirtualScrollItemStatus.initial,\n            }),\n        );\n}\n\n/**\n * @ignore\n */\nexport function setLoadedState(data: ISuggestValueData<any>[], start: number, currentItems: ISuggestValue[], isLazy?: boolean) {\n    const isLazyUp = isLazy && start === -1;\n    const items = [...(isLazyUp ? [] : currentItems)];\n\n    data\n        .map(r => ({\n            ...r,\n            loading: VirtualScrollItemStatus.loaded,\n        }))\n        .forEach((item, chunkIndex) => {\n            const offset = isLazyUp ? 1 : 0;\n            const itemIndex = chunkIndex + start + offset;\n            if (isLazy || items[itemIndex] && items[itemIndex].loading !== VirtualScrollItemStatus.loaded) {\n                items[itemIndex] = item;\n            }\n        });\n\n    const onlyLoadedCurrentItems = currentItems.filter(({ loading }) => loading === VirtualScrollItemStatus.loaded);\n\n    return [...items,\n    ...(isLazyUp ?\n        onlyLoadedCurrentItems :\n        []\n    )];\n}\n\n/**\n * @ignore\n */\nexport function toSuggestValue(inputValue: ISuggestValue | string, isCustom: boolean = false) {\n    return typeof inputValue === 'string' ?\n        {\n            id: inputValue.trim(),\n            text: inputValue.trim(),\n            loading: VirtualScrollItemStatus.loaded,\n            isCustom,\n        } as ISuggestValue :\n        inputValue;\n}\n\nfunction toggleState(items: ISuggestValue[], mappedStart: number, mappedEnd: number, isPending: boolean) {\n\n    items.slice(mappedStart, mappedEnd)\n        .filter(item => item.loading === (isPending ? VirtualScrollItemStatus.initial : VirtualScrollItemStatus.pending))\n        .forEach((item) => {\n            item.loading = isPending ? VirtualScrollItemStatus.pending : VirtualScrollItemStatus.initial;\n        });\n}\n\n/**\n * @ignore\n */\nexport function resetUnloadedState(items: ISuggestValue[], mappedStart: number, mappedEnd: number) {\n    toggleState(items, mappedStart, mappedEnd, false);\n}\n\n/**\n * @ignore\n */\nexport function setPendingState(items: ISuggestValue[], mappedStart: number, mappedEnd: number) {\n    toggleState(items, mappedStart, mappedEnd, true);\n}\n","import cloneDeep from 'lodash-es/cloneDeep';\nimport isEqual from 'lodash-es/isEqual';\nimport { Subject } from 'rxjs';\n\nimport {\n    ChangeDetectorRef,\n    Directive,\n    DoCheck,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    Input,\n    Optional,\n    Output,\n    Self,\n} from '@angular/core';\nimport {\n    ControlValueAccessor,\n    FormGroupDirective,\n    NgControl,\n    NgForm,\n    UntypedFormControl,\n} from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { identifier } from '@uipath/angular/utilities';\n\nimport {\n    ISuggestValue,\n    SuggestDirection,\n    SuggestDisplayPriority,\n} from './models';\nimport {\n    checkAndNormalizeValue,\n    sortByPriorityAndDirection,\n} from './utils';\n\n@Directive()\nexport abstract class UiSuggestMatFormFieldDirective implements\n    DoCheck,\n    MatFormFieldControl<ISuggestValue[]>,\n    ControlValueAccessor {\n\n    abstract disabled: boolean;\n\n    /**\n     * Configure if the form control label should float.\n     *\n     */\n    @HostBinding('class.floating')\n    get shouldLabelFloat() {\n        return this.focused || !this.empty;\n    }\n\n    /**\n     * Configure if the input should be marked as `required` inside the form field.\n     *\n     */\n    @Input()\n    get required() {\n        return this._required;\n    }\n    /**\n     * @ignore\n     */\n    set required(required) {\n\n        required = !!required || this._elementRef.nativeElement.hasAttribute('required');\n\n        if (this._required !== required) {\n            this._required = required;\n            this.stateChanges.next();\n        }\n    }\n\n    /**\n     * Determine if the component is rendered inside a form control\n     *\n     */\n    @HostBinding('class.form-control')\n    get isFormControl() {\n        return this._isFormControl || this._elementRef\n            .nativeElement\n            .classList\n            .contains('form-control');\n    }\n\n    set isFormControl(value) {\n        this._isFormControl = value;\n    }\n\n    /**\n     * Configure the component placeholder.\n     *\n     */\n    @Input()\n    get placeholder() {\n        return this._placeholder;\n    }\n\n    set placeholder(placeholder) {\n        this._placeholder = placeholder;\n        this.stateChanges.next();\n    }\n\n    /**\n     * Hides the combo box title.\n     *\n     */\n    @Input()\n    shouldHideTitle = false;\n\n    /**\n     * Sets aria-label on input or mat-chip-grid element.\n     *\n     */\n    @Input('aria-label')\n    ariaLabel: string | null = null;\n\n    /**\n     * Set a custom size for the list items.\n     *\n     */\n    @Input()\n    customItemSize?: number;\n\n    /**\n     * Computes the component item height depending on the current render mode.\n     *\n     */\n    get itemSize() {\n        if (this.customItemSize) { return this.customItemSize; }\n\n        return this.baseSize;\n    }\n\n    get baseSize() {\n        return this.isFormControl ? 32 : 40;\n    }\n\n    /**\n     * Returns `true` if there are no items available.\n     *\n     */\n    get empty() {\n        return !this._value.length;\n    }\n\n    /**\n     * Determines if the render direction is `down`.\n     *\n     */\n    get isDown() {\n        return this._direction === 'down';\n    }\n\n    /**\n     * Handles the dropdown value binding.\n     *\n     */\n    @Input()\n    get value() {\n        return this._value;\n    }\n    /**\n     * @ignore\n     */\n    set value(newValue: ISuggestValue[]) {\n\n        const checkedNewValue = checkAndNormalizeValue(newValue);\n\n        if (isEqual(checkedNewValue, this._value)) { return; }\n\n        this._value = checkedNewValue;\n\n        for (const entry of checkedNewValue) {\n            this.selected.emit(entry);\n        }\n        this.stateChanges.next();\n        this.registerChange(checkedNewValue);\n\n        this._items = this._sortItems(this._items);\n    }\n\n    /**\n     * @ignore\n     */\n    inputControl = new UntypedFormControl('');\n\n    /**\n     * Configure the component display priority.\n     *\n     */\n    @Input()\n    displayPriority: SuggestDisplayPriority = 'default';\n\n    /**\n     * @ignore\n     */\n    @HostBinding()\n    id = `ui-suggest-${identifier()}`;\n\n    /**\n     * @ignore\n     */\n    describedBy?: string;\n\n    /**\n     * Emits the selected item value an item is selected.\n     *\n     */\n    @Output()\n    selected = new EventEmitter<ISuggestValue>();\n\n    /**\n     * Emits the deselected item value when an item is deselected.\n     *\n     */\n    @Output()\n    deselected = new EventEmitter<ISuggestValue>();\n\n    /**\n     * @ignore\n     */\n    errorState = false;\n    /**\n     * @ignore\n     */\n    focused = false;\n    /**\n     * @ignore\n     */\n    // eslint-disable-next-line rxjs/finnish\n    stateChanges = new Subject<void>();\n\n    protected _direction: SuggestDirection = 'down';\n    protected _items: ISuggestValue[] = [];\n    protected _value: ISuggestValue[] = [];\n\n    private _isFormControl = false;\n\n    private _placeholder = '';\n    private _required = false;\n\n    /**\n     * @ignore\n     */\n    constructor(\n        protected _elementRef: ElementRef,\n        private _errorStateMatcher: ErrorStateMatcher,\n        private _parentForm: NgForm,\n        private _parentFormGroup: FormGroupDirective,\n        protected _cd: ChangeDetectorRef,\n        @Optional()\n        @Self()\n        public ngControl: NgControl,\n    ) {\n        this.isFormControl = this.isFormControl || !!this.ngControl;\n\n        // prevent cyclic dependency\n        if (this.ngControl) {\n            this.ngControl.valueAccessor = this;\n        }\n    }\n\n    /**\n     * @ignore\n     */\n    ngDoCheck() {\n        if (!this.ngControl) { return; }\n\n        const oldState = this.errorState;\n        const control = this.ngControl ?\n            this.ngControl.control as UntypedFormControl :\n            null;\n        const parent = this._parentFormGroup || this._parentForm;\n        const newState = this._errorStateMatcher.isErrorState(control, parent);\n\n        if (newState !== oldState) {\n            this.errorState = newState;\n            this.stateChanges.next();\n        }\n    }\n\n    /**\n     * @ignore\n     */\n    abstract onContainerClick(event: MouseEvent): void;\n\n    /**\n     * Clears the search input value.\n     */\n    clear() {\n        this.inputControl.setValue('');\n    }\n\n    /**\n     * @ignore\n     */\n    setDescribedByIds(ids: string[]) {\n        this.describedBy = ids.join(' ').trim() || undefined;\n    }\n\n    /**\n     * @ignore\n     */\n    writeValue(value: ISuggestValue[]) {\n        value = checkAndNormalizeValue(value);\n\n        if (!isEqual(value, this._value)) {\n            this._value = value;\n            this._cd.markForCheck();\n        }\n    }\n\n    /**\n     * @ignore\n     */\n    registerChange = (_: ISuggestValue[]) => { };\n\n    /**\n     * @ignore\n     */\n    registerTouch: (ev?: Event) => void = (_?: Event) => { };\n\n    /**\n     * @ignore\n     */\n    registerOnChange(fn: (_: ISuggestValue[]) => any) {\n        this.registerChange = fn;\n    }\n\n    /**\n     * @ignore\n     */\n    registerOnTouched(fn: (ev?: Event) => void) {\n        this.registerTouch = fn;\n    }\n\n    protected _sortItems = (items: ISuggestValue[]) =>\n        sortByPriorityAndDirection(\n            cloneDeep(items),\n            this.displayPriority,\n            this.value,\n            this.isDown,\n        );\n\n}\n","import cloneDeep from 'lodash-es/cloneDeep';\nimport isEqual from 'lodash-es/isEqual';\nimport {\n    animationFrameScheduler,\n    BehaviorSubject,\n    combineLatest,\n    merge,\n    Observable,\n    of,\n    Subject,\n    Subscription,\n} from 'rxjs';\nimport {\n    debounceTime,\n    delay,\n    distinctUntilChanged,\n    filter,\n    finalize,\n    map,\n    observeOn,\n    retry,\n    skip,\n    startWith,\n    switchMap,\n    takeUntil,\n    tap,\n} from 'rxjs/operators';\n\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { ListRange } from '@angular/cdk/collections';\nimport { ConnectedPosition } from '@angular/cdk/overlay';\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    Input,\n    isDevMode,\n    NgZone,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Optional,\n    Output,\n    Self,\n    SimpleChanges,\n    TemplateRef,\n    TrackByFunction,\n    ViewChild,\n    ViewEncapsulation,\n} from '@angular/core';\nimport {\n    FormGroupDirective,\n    NgControl,\n    NgForm,\n} from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { VirtualScrollItemStatus } from '@uipath/angular/directives/ui-virtual-scroll-range-loader';\n\nimport {\n    ISuggestValue,\n    ISuggestValues,\n    SuggestDirection,\n    SuggestMaxSelectionConfig,\n} from './models';\nimport { UI_SUGGEST_ANIMATIONS } from './ui-suggest.animations';\nimport { UiSuggestIntl } from './ui-suggest.intl';\nimport { UiSuggestMatFormFieldDirective } from './ui-suggest.mat-form-field';\nimport {\n    caseInsensitiveCompare,\n    generateLoadingInitialCollection,\n    inMemorySearch,\n    mapInitialItems,\n    resetUnloadedState,\n    setLoadedState,\n    setPendingState,\n    toSuggestValue,\n} from './utils';\n\nexport const DEFAULT_SUGGEST_DEBOUNCE_TIME = 300;\nexport const DEFAULT_SUGGEST_DRILLDOWN_CHARACTER = ':';\nexport const MAT_CHIP_INPUT_SELECTOR = '.mat-mdc-chip-grid input';\n\n/**\n * A form compatible `dropdown` packing `lazy-loading` and `virtual-scroll`.\n *\n * @ignore\n * @export\n */\n@Component({\n    selector: 'ui-suggest',\n    styleUrls: ['./ui-suggest.component.scss'],\n    templateUrl: './ui-suggest.component.html',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        NgForm,\n        FormGroupDirective,\n        {\n            provide: MatFormFieldControl,\n            useExisting: UiSuggestComponent,\n        },\n    ],\n    animations: [UI_SUGGEST_ANIMATIONS.transformMenuList],\n})\nexport class UiSuggestComponent extends UiSuggestMatFormFieldDirective\n    implements\n    OnDestroy,\n    OnInit,\n    OnChanges,\n    AfterViewInit {\n\n    get inDrillDownMode() {\n        return !!this.drillDown && this.inputControl.value.includes(this.drillDownCharacter);\n    }\n\n    /**\n     * Configure if the component is `disabled`.\n     *\n     */\n    @HostBinding('class.disabled')\n    @Input()\n    get disabled() {\n        return this._disabled$.value;\n    }\n    set disabled(value) {\n        if (this._disabled$.value === !!value) { return; }\n\n        this._disabled$.next(!!value);\n        if (\n            value &&\n            this.isOpen\n        ) {\n            this.close(false);\n        }\n\n        this._cd.markForCheck();\n        this.stateChanges.next();\n    }\n\n    /**\n     * Configure if the component allows expandable items\n     *\n     */\n    @HostBinding('class.drill-down')\n    @Input()\n    get drillDown() {\n        return this._drillDown;\n    }\n    set drillDown(value) {\n        this._drillDown = !!value;\n    }\n\n    /**\n     * Divider character for drilldown logic\n     */\n    @Input()\n    drillDownCharacter = DEFAULT_SUGGEST_DRILLDOWN_CHARACTER;\n\n    /**\n     * Configure if the component is `readonly`.\n     *\n     */\n    @HostBinding('class.readonly')\n    @Input()\n    get readonly() {\n        return this._readonly;\n    }\n    set readonly(value) {\n        this._readonly = !!value;\n        if (\n            value &&\n            this.isOpen\n        ) {\n            this.close(false);\n        }\n        this.stateChanges.next();\n        this._cd.detectChanges();\n    }\n\n    /**\n     * Set the element in high density state.\n     *\n     */\n    @HostBinding('class.ui-suggest-state-high-density')\n    @Input()\n    hasHighDensity = false;\n\n    /**\n     * By default the onOpen fetchStrategy prevents additional requests if closed.\n     * This allows you to bypass that check and update even if closed.\n     */\n    @Input()\n    ignoreOpenOnFetch = false;\n\n    /**\n     * Controls whether to use the default custom value template or use the custom item template\n     *\n     */\n    @Input()\n    applyItemTemplateToCustomValue = false;\n\n    /**\n     * A list of options that will be presented at the top of the list.\n     *\n     */\n    @Input()\n    get headerItems() {\n        return this.loading$.value || !!this.inputControl.value.trim()\n            ? []\n            : this._headerItems;\n    }\n    set headerItems(value: ISuggestValue[] | null) {\n        if (!value || isEqual(value, this._headerItems)) { return; }\n\n        this._headerItems = this._sortItems(value)\n            .map(r => ({\n                ...r,\n                loading: VirtualScrollItemStatus.loaded,\n            }));\n        this._checkUnsuportedScenarios();\n    }\n\n    /**\n     * If true, the item list will render open and will not close on selection\n     *\n     */\n    @Input()\n    alwaysExpanded = false;\n\n    /**\n     * If true, component will always render the list upfront\n     */\n    @Input()\n    expandInline = false;\n\n    /**\n     * If true, component wil place the dropdown over the input\n     */\n    @Input()\n    forceDisplayDropdownOverInput = true;\n\n    /**\n     * Configure if the component allows multi-selection.\n     *\n     */\n    @Input()\n    get multiple() {\n        return this._multiple;\n    }\n    set multiple(multiple) {\n        if (this._multiple !== multiple) {\n            if (!multiple) {\n                this._deselectValuesFrom(1);\n                this.registerChange(this.value);\n            }\n            this._multiple = multiple;\n            this._cd.detectChanges();\n        }\n    }\n\n    /**\n     * The `dropdown` item list.\n     *\n     */\n    @Input()\n    get items() {\n        return this._items;\n    }\n    set items(items: ISuggestValue[]) {\n        if (!items || isEqual(items, this._items)) { return; }\n\n        this._lastSetItems = cloneDeep(items);\n\n        if (this.searchable) {\n            this.fetch(this.inputControl.value);\n        }\n\n        this._items = this._sortItems(items)\n            .map(r => ({\n                ...r,\n                loading: VirtualScrollItemStatus.loaded,\n            }));\n    }\n\n    /**\n     * Configure the direction in which to open the overlay: `up` or `down'.\n     *\n     */\n    @Input()\n    set direction(value: SuggestDirection) {\n        if (this._direction === value) { return; }\n        this._items.reverse();\n        this._direction = value;\n        this._checkUnsuportedScenarios();\n    }\n    get direction() {\n        return this._direction;\n    }\n\n    /**\n     * Configure if the dropdown has `search` enabled.\n     *\n     */\n    @Input()\n    get searchable() {\n        return !!this.searchSourceFactory;\n    }\n    set searchable(searchable) {\n        if (!searchable) {\n            this.searchSourceFactory = void 0;\n            return;\n        }\n\n        if (this.searchSourceFactory) {\n            return;\n        }\n        this.searchSourceFactory = (searchTerm = '') => inMemorySearch(searchTerm, this._lastSetItems);\n    }\n\n    /**\n     * Reference for custom item template\n     *\n     */\n    @ContentChild(TemplateRef, { static: true })\n    itemTemplate: TemplateRef<any> | null = null;\n\n    /**\n     * Computes the current tooltip value.\n     *\n     */\n    get tooltip() {\n        if (\n            !this.isOpen &&\n            this._hasValue\n        ) {\n            return this._getValueSummary(true);\n        }\n\n        return null;\n    }\n\n    /**\n     * Determines if the `custom value` option should be `displayed`.\n     *\n     */\n    get isCustomValueVisible(): boolean {\n        if (\n            !this._hasCustomValue$.value ||\n            this.loading$.value\n        ) {\n            return false;\n        }\n\n        return !this.multiple || !this._value.some(v => v.text === this.inputControl.value.trim()) || this.isCustomValueAlreadySelected;\n    }\n\n    get isCustomHeaderItemsVisible(): boolean {\n        return !(this.loading$.value || !this.headerItems!.length);\n    }\n\n    /**\n     * Retrieves the currently `rendered` items.\n     *\n     */\n    get renderItems() {\n        return this.loading$.value\n            ? []\n            : this._hasCustomValue$.value && !this.isDown\n                // FIXME: hack\n                ? [...this.items, false as unknown as ISuggestValue]\n                : this.items;\n    }\n\n    /**\n     * Configure if the user is allowed to select `custom values`.\n     *\n     * @deprecated\n     */\n    @Input()\n    get enableCustomValue() {\n        return this._enableCustomValue;\n    }\n    set enableCustomValue(value) {\n        this._enableCustomValue = !!value;\n        this._checkUnsuportedScenarios();\n    }\n\n    /**\n     * Configure if the dropdown is in a `loading` state.\n     *\n     */\n    @Input()\n    set loading(value: boolean) {\n        this.loading$.next(value);\n    }\n\n    /**\n     * Render an additional info message if a specific count of items is rendered\n     * Useful in case search results are capped and the user needs to adjust the query\n     */\n    @Input()\n    searchableCountInfo?: { count: number; message: string };\n\n    /**\n     * Configure if the selected value shown should respect the template in dropdown\n     *\n     */\n    @Input()\n    displayTemplateValue = false;\n\n    /**\n     * Determines if there are no results to display.\n     *\n     */\n    get hasNoResults() {\n        return !this.loading$.value && !this.items.length;\n    }\n\n    /**\n     * @ignore\n     */\n    get isCustomValueAlreadySelected() {\n        if (\n            !this._hasCustomValue$.value ||\n            this.loading$.value\n        ) {\n            return false;\n        }\n\n        return this.isItemSelected(toSuggestValue(this.inputControl.value.trim()));\n    }\n\n    /**\n     * Computes the `viewport` max-height.\n     *\n     */\n    get viewportMaxHeight() {\n        if (!this.isOpen) { return 0; }\n\n        if (this.expandInline && this._height$.value) {\n            return this._height$.value;\n        }\n\n        const actualCount = this.renderItems.filter(Boolean).length + (this.enableCustomValue ?\n            (Number(this.isCustomValueVisible)) : (this.headerItems!.length));\n\n        if (actualCount === 0) {\n            return this.baseSize + Number(!!this.headerItems!.length);\n        }\n\n        const displayedCount = Math.min(this.displayCount, Math.max(actualCount, 1));\n        return this.itemSize * displayedCount + Number(!!this.headerItems!.length);\n    }\n\n    private get _isOnCustomValueIndex() {\n        if (this.headerItems!.length) {\n            return this.activeIndex < this.headerItems!.length;\n        }\n\n        return this.enableCustomValue &&\n            !!this.inputControl.value.trim() &&\n            (\n                this.activeIndex === -1 ||\n                this.activeIndex === this._items.length\n            );\n    }\n\n    private get _itemLowerBound() {\n        return this._hasCustomValue$.value && this.isDown ? -1 : 0;\n    }\n\n    private get _itemUpperBound() {\n        const headerItemsLength = this.headerItems!.length ?? 0;\n        const itemsLength = this.items.length + headerItemsLength;\n\n        return itemsLength + (this._hasCustomValue$.value && !this.isDown ? 0 : -1);\n    }\n\n    private get _fetchCount() {\n        return this._isLazyMode ? this.displayCount * 2 : this.displayCount;\n    }\n\n    /**\n     * A search stream factory, generally used to retrieve data from the server when a user searches.\n     * By `default`, a search factory is generated that does an `in-memory` lookup if `searchable` is set to `true`.\n     *\n     */\n    @Input()\n    searchSourceFactory?: (searchTerm?: string, fetchCount?: number, skip?: number) => Observable<ISuggestValues<any>>;\n\n    /**\n     * Configure the `searchSourceStrategy` for requesting data using searchSourceFactory:\n     * `default` - need total count\n     * `lazy` - items will be fetched only when reaching bottom of the list (no need of total count)\n     */\n    @Input()\n    searchSourceStrategy: 'default' | 'lazy' = 'default';\n\n    /**\n     * A display value factory, generally used to compute the display value for multiple items.\n     * By `default`, a display value factory is generated that does an array.join.\n     *\n     */\n    @Input()\n    displayValueFactory?: (value?: ISuggestValue[]) => string;\n\n    @Input()\n    customValueLabelTranslator!: (value: string) => string;\n\n    /**\n     * Configure the `fetchStrategy` for requesting data using searchSourceFactory\n     * `eager` - makes calls to searchSourceFactory onInit\n     * `onOpen` - makes calls to searchSourceFactory onOpen\n     *\n     */\n    @Input()\n    set fetchStrategy(strategy: 'eager' | 'onOpen') {\n        if (strategy === this._fetchStrategy$.value) { return; }\n\n        this._fetchStrategy$.next(strategy);\n    }\n\n    /**\n     * Configure the minimum number of characters that triggers the searchSourceFactory call\n     * This will have priority over the fetch strategy if set.\n     *\n     */\n    @Input()\n    get minChars() {\n        return this._minChars;\n    }\n    set minChars(value: number) {\n        this._minChars = value;\n        this._checkUnsuportedScenarios();\n    }\n\n    /**\n     * Configure the `control` width.\n     *\n     */\n    @Input()\n    get width() {\n        return !this._width ?\n            this.expandInline ? '100%' : this.suggestContainerWidth + 'px' :\n            this._width;\n    }\n\n    set width(value: string) {\n        this._width = value;\n    }\n    /**\n     * Configure the `maximum` search length.\n     *\n     */\n    @Input()\n    maxLength?: number;\n    /**\n     * The search event debounce interval in `ms`.\n     *\n     */\n    @Input()\n    debounceTime = DEFAULT_SUGGEST_DEBOUNCE_TIME;\n    /**\n     * The maximum number of items rendered in the viewport.\n     *\n     */\n    @Input()\n    get displayCount() {\n        return this._displayCount ?? 10;\n    }\n\n    set displayCount(value: number) {\n        if (!this.expandInline) {\n            this._displayCount = value;\n        }\n    }\n    /**\n     * Configure if the component allows selection clearing.\n     *\n     */\n    @Input()\n    clearable = true;\n    /**\n     * Configure the `default` selected value.\n     *\n     */\n    @Input()\n    defaultValue = '';\n    /**\n     * Configure if the tooltip should be disabled.\n     *\n     */\n    @Input()\n    disableTooltip = false;\n\n    /**\n     * Use compact summary info instead of chips\n     *\n     */\n    @Input()\n    compact = false;\n\n    /**\n     * The template to use for compact summary\n     *\n     */\n    @Input()\n    compactSummaryTemplate?: TemplateRef<any>;\n\n    /**\n     * The config used to describe suggest when the maximum number of selected items is reached.\n     *\n     */\n    @Input()\n    maxSelectionConfig: SuggestMaxSelectionConfig = {\n        count: Infinity,\n        itemTooltip: '',\n        footerMessage: '',\n    };\n    /**\n     * Emits `once` when `data` is retrieved for the `first time`.\n     *\n     */\n    @Output()\n    sourceInitialized = new EventEmitter<ISuggestValue[]>();\n\n    /**\n     * Emits `every` time item data is retrieved.\n     *\n     */\n    @Output()\n    sourceUpdated = new EventEmitter<ISuggestValue[]>();\n\n    /**\n     * Emits when the overlay is hidden (dropdown close).\n     *\n     */\n    @Output()\n    closed = new EventEmitter<void>();\n\n    /**\n     * Emits when an item is selected.\n     *\n     */\n    @Output()\n    itemSelected = new EventEmitter<ISuggestValue>();\n\n    /**\n     * Emits when the overlay is displayed (dropdown open).\n     *\n     */\n    @Output()\n    opened = new EventEmitter<void>();\n\n    /**\n     * Emits on losing or receiving focus.\n     *\n     */\n    @Output()\n    focusEvent = new EventEmitter<FocusEvent>();\n\n    /**\n     * @ignore\n     */\n    VirtualScrollItemStatus = VirtualScrollItemStatus;\n    /**\n     * Configures the dropdown open state.\n     *\n     * @ignore\n     */\n    set isOpen(isOpen: boolean) {\n        if (this._isOpen$.value === isOpen) { return; }\n\n        this._isOpen$.next(isOpen);\n    }\n    get isOpen() {\n        return this._isOpen$.value;\n    }\n    /**\n     * The current selected item index.\n     *\n     * @ignore\n     */\n    activeIndex = -1;\n    /**\n     * The component loading state source.\n     *\n     * @ignore\n     */\n    loading$ = new BehaviorSubject(false);\n    /**\n     * Stream that triggers focusing.\n     *\n     * @ignore\n     */\n    focus$ = new Subject<boolean>();\n\n    upPosition: ConnectedPosition = {\n        originX: 'start',\n        originY: 'bottom',\n        overlayX: 'start',\n        overlayY: 'bottom',\n        offsetY: 3,\n    };\n\n    downPosition: ConnectedPosition = {\n        originX: 'start',\n        originY: 'top',\n        overlayX: 'start',\n        overlayY: 'top',\n        offsetY: -3,\n    };\n    dropdownPosition: ConnectedPosition[] = [];\n\n    suggestContainerWidth = 0;\n\n    @ViewChild('suggestContainer') suggestContainer!: ElementRef;\n    @ViewChild('displayContainer') displayContainer?: ElementRef;\n\n    @ViewChild(CdkVirtualScrollViewport)\n    protected set _virtualScrollerQuery(value: CdkVirtualScrollViewport) {\n        if (!value || this._virtualScroller === value) { return; }\n\n        this._virtualScroller = value;\n\n        if (this.expandInline) {\n            this._matListElement = this._virtualScroller?.getElementRef().nativeElement.parentElement!;\n            this._observer?.observe(this._matListElement);\n        }\n\n        this._virtualScroller!\n            .scrolledIndexChange\n            .pipe(\n                skip(1),\n                takeUntil(this._destroyed$),\n            )\n            .subscribe(start => {\n                this._visibleRange = {\n                    start,\n                    end: start + this.displayCount,\n                };\n            });\n    }\n\n    private _hasCustomValue$ = new BehaviorSubject(false);\n    private _reset$ = new Subject<void>();\n\n    private get _isOpenDisabled() {\n        return this.isOpen ||\n            this.disabled ||\n            this.readonly;\n    }\n\n    private get _hasValue() {\n        return this.value &&\n            !this.empty;\n    }\n\n    private _readonly = false;\n\n    private _displayCount?: number;\n\n    private _width?: string;\n\n    private _observer!: ResizeObserver;\n    private _suggestContainerObserver!: ResizeObserver;\n\n    private _height$ = new BehaviorSubject(0);\n\n    private _searchSub?: Subscription;\n\n    private _disabled$ = new BehaviorSubject(false);\n    private _multiple = false;\n    private _lastSetItems: ISuggestValue[] = [];\n    private _enableCustomValue = false;\n    private _minChars = 0;\n\n    private _triggerViewportRefresh$ = new BehaviorSubject<null>(null);\n    private _destroyed$ = new Subject<void>();\n    private _scrollTo$ = new Subject<number>();\n    private _rangeLoad$ = new Subject<ListRange>();\n    private _fetchStrategy$ = new BehaviorSubject<'eager' | 'onOpen'>('eager');\n    private _isOpen$ = new BehaviorSubject(false);\n\n    private _headerItems: ISuggestValue[] = [];\n    private _virtualScroller?: CdkVirtualScrollViewport;\n    private _visibleRange = {\n        start: Number.NEGATIVE_INFINITY,\n        end: Number.POSITIVE_INFINITY,\n    };\n\n    private _inputChange$!: Observable<string>;\n    private _drillDown = false;\n    private _lazyLoadLastArgument: any[] = ['', 0, 0];\n\n    private _matListElement?: HTMLElement;\n\n    /**\n     * @ignore\n     */\n    constructor(\n        elementRef: ElementRef,\n        cd: ChangeDetectorRef,\n        errorStateMatcher: ErrorStateMatcher,\n        parentForm: NgForm,\n        parentFormGroup: FormGroupDirective,\n        @Optional()\n        @Self()\n        public ngControl: NgControl,\n        @Optional()\n        public intl: UiSuggestIntl,\n        private _liveAnnouncer: LiveAnnouncer,\n        private _zone: NgZone,\n    ) {\n        super(\n            elementRef,\n            errorStateMatcher,\n            parentForm,\n            parentFormGroup,\n            cd,\n            ngControl,\n        );\n        this._initResizeObserver();\n\n        this._height$.subscribe(heightValue => {\n            if (this.expandInline) {\n                this._displayCount = Math.round(heightValue / this.itemSize);\n            }\n        });\n\n        this.intl = this.intl || new UiSuggestIntl();\n        this.intl\n            .changes\n            .pipe(takeUntil(this._destroyed$))\n            .subscribe(() => cd.detectChanges());\n        this.customValueLabelTranslator = this.customValueLabelTranslator || this.intl.customValueLabel;\n    }\n\n    /**\n     * Configure if each individual chip can be removed\n     *\n     */\n    @Input()\n    canRemoveChip: (value: ISuggestValue) => boolean\n        = () => !this.readonly;\n    /**\n     * @ignore\n     */\n    ngOnInit() {\n        if (this.alwaysExpanded || this.expandInline) {\n            this.open();\n        }\n\n        this._visibleRange = {\n            start: 0,\n            end: this.displayCount,\n        };\n\n        this._initOverlayPositions();\n        this.dropdownPosition = [this.direction && this.direction === 'up' ? this.upPosition : this.downPosition];\n\n        this._inputChange$ = combineLatest([\n            this.inputControl.valueChanges.pipe(\n                startWith(''),\n                map((v = '') => v.trim()),\n                distinctUntilChanged(),\n                filter(v => v.length >= this.minChars),\n                tap(v => v && this.multiple && this.open()),\n                tap(this._setLoadingState),\n                debounceTime(this.debounceTime),\n                filter(_ => !!this.searchSourceFactory),\n            ),\n            this._disabled$.pipe(\n                filter(v => !v),\n            ),\n            this._fetchStrategy$\n                .pipe(\n                    switchMap(strategy => {\n                        switch (strategy) {\n                            case 'onOpen':\n                                return this._isOpen$.pipe(filter(o => !!o));\n                            case 'eager':\n                                return of(strategy);\n                        }\n                    }),\n                ),\n        ]).pipe(\n            map(([value]) => value as any),\n        );\n\n        merge(\n            this._reset$.pipe(\n                map(_ => ''),\n                tap(_ => !!this.inputControl.value.trim() && this.inputControl.setValue('')),\n                tap(this._setLoadingState),\n            ),\n            this._inputChange$,\n        ).pipe(\n            takeUntil(this._destroyed$),\n        ).subscribe(this.fetch);\n\n        this._scrollTo$\n            .pipe(\n                delay(0),\n                observeOn(animationFrameScheduler),\n                filter(_ => this.isOpen),\n                takeUntil(this._destroyed$),\n            )\n            .subscribe(this._virtualScrollTo);\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes.direction) {\n            this.dropdownPosition = [this._getDropdownPositionAccordingToDirection()];\n        }\n\n        if (this.searchSourceStrategy === 'lazy' && this.direction === 'up') {\n            throw new Error('Currently support only down direction for lazy mode');\n        }\n\n        if (this.searchSourceStrategy === 'lazy' && !this.searchSourceFactory) {\n            throw new Error('Should provide a searchSourceFactory for lazyMode');\n        }\n\n        const { displayPriority } = changes;\n\n        if (displayPriority?.currentValue !== displayPriority?.previousValue) {\n            this._items = this._sortItems(this._items);\n        }\n    }\n\n    /**\n     * @ignore\n     */\n    ngOnDestroy() {\n        this._destroyed$.next();\n        this._destroyed$.complete();\n        this.stateChanges.complete();\n        this.selected.complete();\n        this.deselected.complete();\n        this.sourceUpdated.complete();\n        this.closed.complete();\n        this.opened.complete();\n\n        if (this._matListElement) {\n            this._observer?.unobserve(this._matListElement);\n        }\n\n        if (this.isOpen) {\n            this._suggestContainerObserver.unobserve(this.suggestContainer.nativeElement);\n        }\n\n        if (!this.sourceInitialized.closed) {\n            this.sourceInitialized.complete();\n        }\n    }\n\n    /**\n     * @ignore\n     */\n    ngAfterViewInit() {\n        combineLatest([\n            this._triggerViewportRefresh$,\n            this._rangeLoad$,\n        ]).pipe(\n            map(([, range]) => range),\n            takeUntil(this._destroyed$),\n        ).subscribe(this._rangeLoad);\n    }\n\n    /**\n     * Computed index offset in items list when prepending header items\n     *\n     * @param index\n     * @returns\n     */\n    computedItemsOffset(index: number) {\n        return index + this.headerItems!.length;\n    }\n\n    /**\n     * Is called every time a new range needs to be loaded.\n     *\n     * @ignore\n     */\n    rangeLoad = (range: ListRange) => this._rangeLoad$.next(range);\n\n    /**\n     * Disable state hook for the `form`.\n     *\n     * @param isDisabled The truth of of the `disabled` state.\n     * @ignore\n     */\n    setDisabledState(isDisabled: boolean) {\n        this.disabled = isDisabled;\n    }\n\n    /**\n     * Handles `click` events on the `form-control` container.\n     *\n     * @ignore\n     */\n    onContainerClick(event: MouseEvent) {\n        if (\n            !this.focused &&\n            !this._isOpenDisabled\n        ) {\n            this.open();\n            this.focus$.next(true);\n            this.preventDefault(event);\n        }\n    }\n\n    /**\n     * Notifies focus changes to the `form`.\n     *\n     * @ignore\n     */\n    onBlur(event: FocusEvent) {\n        this.focusEvent.emit(event);\n        this._focusChanged(this.isOpen);\n    }\n\n    /**\n     * Notifies focus changes to the `form`.\n     *\n     * @ignore\n     */\n    onFocus(event: FocusEvent) {\n        this.focusEvent.emit(event);\n        this._focusChanged(true);\n    }\n\n    /**\n     * Toggle the dropdown state (opened/closed);\n     *\n     */\n    toggle() {\n        // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n        this.isOpen ? this.close() : this.open();\n    }\n\n    /**\n     * Opens the dropdown.\n     *\n     */\n    open() {\n        if (this._isOpenDisabled) { return; }\n        this.isOpen = true;\n        this.opened.emit();\n        this._focusChanged(true);\n\n        const [value] = this.value;\n\n        if (\n            this.enableCustomValue &&\n            value &&\n            value.isCustom &&\n            !this.multiple\n        ) {\n            this.inputControl.setValue(value.text);\n        }\n\n        this._setAndScrollToActiveIndex(value);\n\n        if (!this.loading$.value) {\n            this._announceNavigate();\n        }\n\n        if (!this.expandInline) {\n            this._suggestContainerObserver.observe(this.suggestContainer.nativeElement);\n        }\n    }\n\n    /**\n     * Closes the dropdown.\n     *\n     * @param [refocus=true] If the dropdown should be focused after closing.\n     */\n    close(refocus = true) {\n        if (this.alwaysExpanded || this.expandInline || !this.isOpen) { return; }\n\n        this._suggestContainerObserver.unobserve(this.suggestContainer.nativeElement);\n\n        if (\n            (this._isOnCustomValueIndex && !this.headerItems!.length) &&\n            !this.loading$.value &&\n            !this.multiple\n        ) {\n            this._clearSelection();\n            this._pushEntry(toSuggestValue(this.inputControl.value.trim(), true));\n        }\n\n        this.registerTouch();\n        this.clear();\n\n        this.isOpen = false;\n        this.activeIndex = -1;\n        this._visibleRange = {\n            start: Number.NEGATIVE_INFINITY,\n            end: Number.POSITIVE_INFINITY,\n        };\n        this.closed.emit();\n\n        this.focus$.next(refocus);\n\n        if (!refocus) {\n            this._focusChanged(false);\n        }\n    }\n\n    /**\n     * Resets the component state.\n     *\n     */\n    reset() {\n        this._reset$.next();\n    }\n\n    /**\n     * Removes the active dropdown selection.\n     *\n     * @param [ev] `Mouse` or `Keyboard`.\n     */\n    removeSelection(ev?: Event | KeyboardEvent | MouseEvent) {\n        if (!this.clearable) { return; }\n\n        this.preventDefault(ev);\n        this._clearSelection();\n        this.selected.emit();\n        this.registerTouch();\n        this.registerChange(this.value);\n\n        if (this.inDrillDownMode) {\n            this.inputControl.setValue('');\n            return;\n        }\n        this.close(false);\n    }\n\n    /**\n     * Navigates through the items by looking up the next focused / active index.\n     *\n     * @param increment The increment that should be applied to the current index.\n     * @param [ev] The navigation trigger event.\n     * @ignore\n     */\n    navigate(increment: number, ev?: Event) {\n        this.preventDefault(ev);\n\n        if (\n            this._cantNavigate(increment)\n        ) { return; }\n\n        const [value] = this.value;\n        if (\n            value &&\n            this.activeIndex === this._itemLowerBound - 1\n        ) {\n            const headerItemIndex = this.headerItems!.findIndex(v => v.id === value.id);\n            this.activeIndex = headerItemIndex !== -1\n                ? headerItemIndex\n                : this.computedItemsOffset(this._items.findIndex(v => v.id === value.id));\n        }\n\n        this._safeCycleIncrement(increment);\n\n        this._announceNavigate();\n        this._scrollTo$.next(this.activeIndex);\n    }\n\n    /**\n     * Selects the current active item.\n     *\n     * @ignore\n     */\n    setSelectedItem() {\n        if (this.loading$.value) { return; }\n\n        if (this._isOnCustomValueIndex && !this.headerItems!.length) {\n            this.updateValue(this.inputControl.value.trim(), !this.multiple);\n            return;\n        }\n\n        this._selectActiveItem(!this.multiple);\n    }\n\n    /**\n     * Determines if the provided `item` is currently selected.\n     *\n     * @param [item] The `item` that needs to be checked.\n     * @returns If the provided `item` is selected.\n     */\n    isItemSelected(item?: ISuggestValue) {\n        return !!item &&\n            (!!this.value.find(v => v.id === item.id) ?? !!this.headerItems!.find(v => v.id === item.id));\n    }\n\n    /**\n     * Updates the component value.\n     *\n     * @param inputValue The value that needs to be selected.\n     * @param [closeAfterSelect=true] If the dropdown should close after the value is selected.\n     * @param [refocus=true] If the search input should regain focus after selection.\n     */\n    // eslint-disable-next-line complexity\n    updateValue(inputValue: ISuggestValue | string, closeAfterSelect = true, refocus = true) {\n        let value = toSuggestValue(inputValue, this._isOnCustomValueIndex);\n        if (this.maxSelectionConfig.count <= this.value.length && !this.isItemSelected(value)) { return; }\n        if (value.loading !== VirtualScrollItemStatus.loaded || value.disabled === true) { return; }\n\n        this.itemSelected.emit(value);\n\n        if (this.inDrillDownMode) {\n            value = {\n                ...value,\n                text: `${this.inputControl.value}${value.text}`,\n            };\n        }\n\n        const isExpandable = this.searchable && this.drillDown && !!value.expandable;\n\n        if (isExpandable) {\n            this.inputControl.setValue(`${value.text}:`);\n            return;\n        }\n\n        const isItemSelected = this.isItemSelected(value);\n\n        if (!isItemSelected && value) {\n            if (!this.multiple) {\n                this._clearSelection();\n            }\n            this._pushEntry(value);\n\n            this._announceSelectStatus(value.text, true);\n        }\n\n        if (value && this.multiple && !this.compact) {\n            if (this.inputControl.value) {\n                this.inputControl.setValue('');\n            }\n            this._focusChipInput();\n        }\n\n        const alreadySelectedNormalValue = this.multiple &&\n            isItemSelected &&\n            !!value &&\n            !value.isCustom;\n\n        if (alreadySelectedNormalValue) {\n            this._removeEntry(value);\n\n            this._announceSelectStatus(value.text, false);\n        }\n\n        if (closeAfterSelect) {\n            this.close(refocus);\n        }\n    }\n\n    /**\n     * @ignore\n     */\n    preventDefault(ev?: Event) {\n        if (!ev || this._isCheckbox(ev?.target)) { return; }\n        ev.preventDefault();\n        ev.stopImmediatePropagation();\n    }\n\n    /**\n     * Triggers a refetch of data, calling the `searchSourceFactory` with the provided search term.\n     *\n     * @param searchValue The search value that should be used for the `fetch`.\n     */\n    fetch = (searchValue = '') => {\n        if (!this.searchSourceFactory ||\n            this._fetchStrategy$.value === 'onOpen' &&\n            !this.ignoreOpenOnFetch &&\n            !this.isOpen\n        ) {\n            return;\n        }\n\n        this.loading$.next(true);\n\n        if (this._searchSub) { this._searchSub.unsubscribe(); }\n        this._searchSub = this.searchSourceFactory(searchValue, this._fetchCount)\n            .pipe(\n                tap(this._setInitialItems),\n                map(this._findItemIndex(searchValue)),\n                tap(this._checkCustomValue(searchValue)),\n                tap(this._setActiveIndex),\n                takeUntil(this._destroyed$),\n            ).subscribe({\n                next: _ => {\n                    this.loading$.next(false);\n                    this._scrollToFirst();\n                    this._cd.detectChanges();\n                },\n                error: (error) => {\n                    if (isDevMode()) {\n                        console.warn('UiSuggest fetch failed, more info: ', error);\n                    }\n\n                    this.loading$.next(false);\n                    this._items = [];\n                },\n            });\n    };\n\n    /**\n     * `NgFor` track method.\n     *\n     * @ignore\n     */\n    trackById: TrackByFunction<ISuggestValue> = (_: number, { id }: ISuggestValue) => id;\n\n    deselectItem(option: ISuggestValue) {\n        this._removeEntry(option);\n    }\n\n    backspaceBehavior() {\n        if (!this.inputControl.value.trim().length) {\n            this.close();\n        }\n    }\n\n    computeDisplayValue() {\n        return this.value.length > 0\n            ? this._getValueSummary()\n            : this.defaultValue;\n    }\n\n    onOptionsDropdownTabPressed() {\n        if (this.isOpen && !this.expandInline) {\n            this.displayContainer?.nativeElement.focus();\n        }\n        this.close(false);\n    }\n\n    private _getDropdownPositionAccordingToDirection() {\n        return this.direction === 'up' ? this.upPosition : this.downPosition;\n    }\n\n    private _initOverlayPositions() {\n        const mustBePlacedBelowTheInput = !this.forceDisplayDropdownOverInput || this.multiple;\n\n        // We need this because we want to show the dropdown below the mat-form-field and not below the ui-suggest component\n        if (this.isFormControl) {\n            this._setDropdownOffset(mustBePlacedBelowTheInput);\n        }\n\n        if (mustBePlacedBelowTheInput) {\n            this._setDropdownOrigin();\n        }\n    }\n\n    private _setDropdownOrigin() {\n        this.upPosition = {\n            ...this.upPosition,\n            originX: 'start',\n            originY: 'top',\n        };\n        this.downPosition = {\n            ...this.downPosition,\n            originX: 'start',\n            originY: 'bottom',\n        };\n\n    }\n\n    private _setDropdownOffset(mustBePlacedBesideTheInput: boolean) {\n        this.upPosition = {\n            ...this.upPosition,\n            offsetX: -1,\n            offsetY: mustBePlacedBesideTheInput ? -10 : 11,\n        };\n        this.downPosition = {\n            ...this.downPosition,\n            offsetX: -1,\n            offsetY: mustBePlacedBesideTheInput ? 10 : -11,\n        };\n    }\n\n    private _initResizeObserver() {\n        this._observer = new ResizeObserver(entries => {\n            this._zone.run(() => {\n                this._height$.next(entries?.[0]?.contentRect.height);\n                this._cd.markForCheck();\n            });\n        });\n\n        this._suggestContainerObserver = new ResizeObserver(entries => {\n            this.suggestContainerWidth = entries[0].target.clientWidth;\n            this._cd.markForCheck();\n        });\n    }\n\n    private _selectActiveItem(closeAfterSelect: boolean) {\n        const item = this.headerItems![this.activeIndex] ?? this.items[this.activeIndex - this.headerItems!.length];\n        if (!item) { return; }\n\n        this.updateValue(item, closeAfterSelect);\n        this._scrollTo$.next(this.activeIndex);\n    }\n\n    private _findItemIndex = (searchValue: string) =>\n        () => {\n            const headerItemIndex = this.headerItems!.findIndex(({ text }) => caseInsensitiveCompare(text, searchValue));\n            const itemIndex = this._items.findIndex(({ text }) => caseInsensitiveCompare(text, searchValue));\n\n            return headerItemIndex !== -1\n                ? headerItemIndex\n                : itemIndex !== -1\n                    ? this.computedItemsOffset(itemIndex)\n                    : -1;\n        };\n\n    private _safeCycleIncrement(increment: number) {\n        let newIndex = this.activeIndex + increment;\n        const isOutOfBoundsUpper = newIndex > this._itemUpperBound;\n\n        if (isOutOfBoundsUpper) {\n            newIndex = this._itemLowerBound;\n        } else {\n            const isOutOfBoundsDownward = newIndex < this._itemLowerBound;\n            if (isOutOfBoundsDownward) {\n                newIndex = this._itemUpperBound;\n            }\n        }\n\n        this.activeIndex = newIndex;\n    }\n\n    private _checkCustomValue(searchValue: string) {\n        return (itemIndex: number) => this.enableCustomValue &&\n            this._setHasCustomValue(!!searchValue && itemIndex === -1 || !!this.headerItems!.length);\n    }\n\n    private _setHasCustomValue(isCustomValue: boolean) {\n        if (this._hasCustomValue$.value === isCustomValue) { return; }\n        this._hasCustomValue$.next(isCustomValue);\n    }\n\n    private _virtualScrollTo = (index: number) => {\n        const vs = this._virtualScroller;\n        const headerItemsOffset = this._headerItems.length;\n        const customValueOffset = this._itemLowerBound;\n\n        if (!vs ||\n            (this.isDown\n                ? index !== 0\n                : index !== this._items.length + this.headerItems!.length - 1) &&\n            index >= this._visibleRange.start + customValueOffset &&\n            index < this._visibleRange.end + customValueOffset\n        ) {\n            return;\n        }\n\n        const passedBottomBound = index === this._visibleRange.end + customValueOffset;\n        const passedTopBound = index < this._visibleRange.start + customValueOffset;\n\n        const start = passedBottomBound\n            ? index + 1 - customValueOffset - this.displayCount\n            : Math.max(Math.min(index, this.items.length + headerItemsOffset - this.displayCount), 0);\n\n        const end = start + this.displayCount;\n\n        this._visibleRange = {\n            start,\n            end,\n        };\n\n        vs.setRenderedRange({\n            start,\n            end,\n        });\n        vs.setRenderedContentOffset(start * this.itemSize);\n\n        if (\n            end > this._itemUpperBound\n            && (this.isCustomValueVisible || this.isCustomHeaderItemsVisible)\n        ) {\n            this._gotoBottomAsync(vs.elementRef.nativeElement);\n        } else {\n            // this is not an error it should go to index\n            // which can be outside the safe zone due to customValue\n            const targetIndex = this._isOnCustomValueIndex\n                ? index\n                : start + Number(this.isDown && this.isCustomValueVisible && passedTopBound);\n\n            vs.scrollToIndex(targetIndex);\n        }\n    };\n\n    private _announceNavigate() {\n        if (!this.items.length && !this._isOnCustomValueIndex) {\n            this._liveAnnouncer.announce(this.intl.noResultsLabel);\n            return;\n        }\n\n        const item = this.activeIndex < this.headerItems!.length\n            ? this.headerItems![this.activeIndex]\n            : this.items[this.activeIndex - this.headerItems!.length];\n\n        const isCurrentItemSelected = !this._isOnCustomValueIndex\n            ? this.isItemSelected(item)\n            : undefined;\n\n        const textToAnnounce = !this._isOnCustomValueIndex\n            ? item.text\n            : `${this.intl.customValueLiveLabel} ${this.customValueLabelTranslator(this.inputControl.value)}`;\n\n        this._liveAnnouncer.announce(\n            this.intl.currentItemLabel(\n                textToAnnounce,\n                this.activeIndex + 1,\n                this.headerItems!.length + this._items.length,\n                isCurrentItemSelected,\n            ),\n        );\n    }\n\n    private _setLoadingState = () => !this.disabled && this.searchSourceFactory && this.loading$.next(true);\n\n    private _focusChanged(isFocused: boolean) {\n        if (isFocused === this.focused) { return; }\n\n        this.focused = isFocused;\n        this.stateChanges.next();\n    }\n\n    private _setInitialItems = (searchResponse: ISuggestValues<any>) => {\n        this._items = mapInitialItems(searchResponse,\n            this.displayPriority,\n            this.value,\n            this.intl.loadingLabel,\n            this.isDown,\n            this._isLazyMode,\n        );\n\n        if (this._shouldAddLoadingElementInLazyMode(searchResponse?.data ?? [])) {\n            this._addLoadingElementInLazyMode();\n        }\n\n        if (!this.sourceInitialized.closed) {\n            this.sourceInitialized.emit(this.items);\n            this.sourceInitialized.complete();\n        }\n        this.sourceUpdated.emit(this.items);\n    };\n\n    private _setActiveIndex = (itemIndex: number) => {\n        this.activeIndex = itemIndex > -1 ?\n            itemIndex :\n            this.isDown ?\n                this._itemLowerBound\n                : this._itemUpperBound;\n    };\n\n    private _setAndScrollToActiveIndex(value: ISuggestValue) {\n        const hasSingleSelectValue = !!value && !this.multiple;\n        const headerItemsIndex = hasSingleSelectValue\n            ? this.headerItems!.findIndex(({ id }) => id === value.id)\n            : -1;\n\n        this._setActiveIndex(\n            hasSingleSelectValue\n                ? headerItemsIndex !== -1\n                    ? headerItemsIndex\n                    : this.computedItemsOffset(this._items.findIndex(({ id }) => id === value.id))\n                : -1,\n        );\n\n        this._scrollTo$.next(this.activeIndex);\n    }\n\n    private _scrollToFirst() {\n        this._scrollTo$.next(this.isDown ?\n            this._itemLowerBound\n            : this._itemUpperBound);\n    }\n\n    private _deselectValuesFrom(idx: number, deleteCount?: number) {\n        const deselected = deleteCount ?\n            this.value.splice(idx, deleteCount) :\n            this.value.splice(idx);\n\n        deselected.forEach(item => this.deselected.emit(item));\n    }\n\n    private _pushEntry(entry: ISuggestValue) {\n        const headerItemIndex = this.headerItems!.findIndex(val => val.id === entry.id);\n        this._setActiveIndex(\n            headerItemIndex !== -1\n                ? headerItemIndex\n                : this.computedItemsOffset(this._items.indexOf(entry)),\n        );\n\n        if (this.multiple) {\n            this.value.push(entry);\n        } else {\n            this.value.splice(0, 1, entry);\n        }\n\n        this.selected.emit(entry);\n        this.registerChange(this.value);\n    }\n\n    private _clearSelection() {\n        this._deselectValuesFrom(0);\n    }\n\n    private _removeEntry(value: ISuggestValue) {\n        const index = this.value.findIndex(({ id }) => id === value.id);\n        this._deselectValuesFrom(index, 1);\n        this.registerChange(this.value);\n    }\n\n    private _rangeLoad = ({ start, end }: ListRange) => {\n        if (this.searchSourceFactory == null) {\n            throw new Error('searchSourceFactory is not defined');\n        }\n\n        const fetchStart = start;\n        const fetchCount = this._isLazyMode ? this._fetchCount : end - start + 1;\n\n        const newArguments = [this.inputControl.value.trim(), fetchCount, fetchStart];\n\n        const isRedundantCall = this._isLazyMode\n            && (isEqual(this._lazyLoadLastArgument, newArguments)\n                || (!this.isDown && end < this._lazyLoadLastArgument?.[2]));\n\n        if (isRedundantCall) {\n            return;\n        }\n\n        this._lazyLoadLastArgument = newArguments;\n\n        const mappedStart = this.isDown ? start : this._items.length - end - 1;\n        const mappedEnd = this.isDown ? end : this._items.length - start - 1;\n\n        if (this._isLazyMode) {\n            setPendingState(this._items, 0, this._items.length);\n        } else {\n            setPendingState(this._items, mappedStart, mappedEnd);\n        }\n\n        this.searchSourceFactory(...newArguments)\n            .pipe(\n                retry(1),\n                map(res => this.isDown ? res : {\n                    data: (res.data ?? []).reverse(),\n                    total: res.total,\n                }),\n                tap(() => !this._isLazyMode && this._resetIfTotalCountChange),\n                takeUntil(\n                    merge(\n                        this.inputControl.valueChanges.pipe(\n                            distinctUntilChanged(),\n                        ),\n                        this._destroyed$,\n                    ),\n                ),\n                finalize(\n                    () => this._isLazyMode ?\n                        resetUnloadedState(this._items, 0, this._items.length) :\n                        resetUnloadedState(this._items, mappedStart, mappedEnd),\n                ),\n            )\n            .subscribe(({ data = [] }) => {\n                if (data.length === 0) {\n                    this._removeUnresolvedElements();\n                } else {\n                    this._items = setLoadedState(\n                        data,\n                        mappedStart,\n                        this._items,\n                        this._isLazyMode,\n                    );\n\n                    if (this._shouldAddLoadingElementInLazyMode(data)) {\n                        this._addLoadingElementInLazyMode();\n                    }\n\n                    if (this._shouldLoadMoreOnUpDirection()) {\n                        this._loadMore();\n                    }\n                }\n\n                this.sourceUpdated.emit(this.items);\n                this._cd.detectChanges();\n            });\n    };\n\n    private _resetIfTotalCountChange = ({ total }: ISuggestValues<any>) => {\n        const totalCountHasChanged = this._items.length > 0 && total !== this._items.length;\n        if (!totalCountHasChanged) {\n            return;\n        }\n        this._items = generateLoadingInitialCollection(this.intl.loadingLabel, total);\n        if (total) {\n            this._triggerViewportRefresh$.next(null);\n        }\n    };\n\n    private _gotoBottomAsync(element: HTMLElement) {\n        setTimeout(() => element.scrollTop = element.scrollHeight - element.clientHeight, 0);\n    }\n\n    private _focusChipInput() {\n        // direct focus needed as chip component doesn't expose a focus to input mechanism\n        (this._elementRef.nativeElement as HTMLElement).querySelector<HTMLInputElement>(MAT_CHIP_INPUT_SELECTOR)?.focus();\n    }\n\n    private _checkUnsuportedScenarios() {\n        const UNSUPPORTED_SCENARIOS = [\n            {\n                errorText: 'enableCustomValue and headerItems are mutually exclusive options',\n                scenario: !!this.headerItems!.length && this.enableCustomValue,\n            },\n            {\n                errorText: 'enableCustomValue should not be used with minChars',\n                scenario: this.enableCustomValue && this.minChars > 0,\n            },\n            {\n                errorText: 'direction up is not supported when used in conjunction with headerItems',\n                scenario: !!this.headerItems!.length && this.direction === 'up',\n            },\n        ];\n\n        UNSUPPORTED_SCENARIOS.forEach(({ errorText, scenario }) => {\n            if (scenario) { throw new Error(errorText); }\n        });\n    }\n\n    private _getValueSummary(fromTooltip = false) {\n        return (this.displayValueFactory ?? this._defaultDisplayValueFactory)(this.value, fromTooltip);\n    }\n\n    private _defaultDisplayValueFactory = (value?: ISuggestValue[], fromTooltip = false) =>\n        (value ?? []).map(v => this.intl.translateLabel((fromTooltip && v.tooltip) || v.text)).join(', ');\n\n    private _cantNavigate(increment: number) {\n        return (!this.items.length &&\n            !this.enableCustomValue) ||\n            (this._isLazyMode &&\n                this._items[this.activeIndex] &&\n                this._items[this.activeIndex]?.loading !== VirtualScrollItemStatus.loaded &&\n                increment > 0\n            );\n    }\n\n    private get _isLazyMode() {\n        return this.searchSourceStrategy === 'lazy';\n    }\n\n    private _removeUnresolvedElements() {\n        this._items = this._items\n            .filter(({ loading }) => loading === VirtualScrollItemStatus.loaded);\n\n    }\n\n    private _shouldAddLoadingElementInLazyMode(currentResponse: ISuggestValue[]) {\n                return this._isLazyMode && currentResponse.length >= this.displayCount;\n    }\n\n    private _addLoadingElementInLazyMode() {\n        const totalLoadingElements = Math.floor(this.displayCount / 2);\n        const loadingElements = generateLoadingInitialCollection(this.intl.loadingLabel, totalLoadingElements);\n\n        if (this.isDown) {\n            this._items.push(...loadingElements);\n        } else {\n            this._items.unshift(...loadingElements);\n        }\n\n    }\n\n    private _shouldLoadMoreOnUpDirection() {\n        const isUp = !this.isDown;\n        const areMoreItemsThankVSKnows = this._virtualScroller?.getDataLength() !== this._items.length;\n        const isVSAtTop = (this._virtualScroller?.measureScrollOffset() ?? 0) < this.itemSize * 10;\n\n        return this._isLazyMode && isUp && areMoreItemsThankVSKnows && isVSAtTop;\n    }\n\n    private _loadMore() {\n        this.rangeLoad({\n            start: this._items.length - 1,\n            end: this._items.length - 1,\n        });\n    }\n\n    private _announceSelectStatus(text: string, status: boolean) {\n        if (text) {\n            this._liveAnnouncer.announce(this.intl.currentItemSelectionStatus(text, status));\n        }\n    }\n\n    private _isCheckbox(elem?: EventTarget | null) {\n        return elem instanceof HTMLInputElement && elem.type === 'checkbox';\n    }\n}\n","<div *ngLet=\"focus$ | async as focus\"\n     [style.height]=\"expandInline ? '100%' : undefined\"\n     #optionsDropdownTrigger=\"cdkOverlayOrigin\"\n     #suggestContainer\n     cdkOverlayOrigin\n     class=\"ui-suggest-container\"\n     role=\"application\">\n    <!--\n          We use role=\"application\" to opt-out of the screen reader's navigator. Without this,\n          we couldn't highlight correctly the focused option when navigating by keyboard.\n\n          Tested in NVDA.\n      -->\n\n    <ng-container *ngIf=\"!expandInline\">\n        <ng-container *ngIf=\"(!multiple || compact); else chipsTemplate\">\n\n            <div [attr.tabindex]=\"!disabled &&\n                            !readonly ?\n                            0 : null\"\n                 [uiAutofocus]=\"!isOpen && focus\"\n                 [refocus]=\"!isOpen && focus\"\n                 [matRippleDisabled]=\"isFormControl\"\n                 [attr.aria-label]=\"ariaLabel ?? placeholder\"\n                 [attr.aria-describedby]=\"describedBy\"\n                 [attr.aria-required]=\"required\"\n                 [attr.aria-disabled]=\"disabled || readonly\"\n                 [attr.aria-expanded]=\"isOpen\"\n                 (click)=\"toggle()\"\n                 (keyup.enter)=\"preventDefault($event);\"\n                 (keydown.enter)=\"preventDefault($event);\n                              open();\"\n                 (keyup.space)=\"open()\"\n                 (keyup.esc)=\"removeSelection($event)\"\n                 (keydown.esc)=\"isOpen &&\n                            preventDefault($event)\"\n                 (keydown.space)=\"preventDefault($event)\"\n                 (focus)=\"onFocus($event);\"\n                 (blur)=\"onBlur($event)\"\n                 #displayContainer\n                 matRipple\n                 class=\"display\"\n                 role=\"combobox\">\n                <ng-container *ngIf=\"itemTemplate && value.length && displayTemplateValue; else showDefaultValue\">\n                    <ng-container *ngTemplateOutlet=\"itemTemplate; context: {\n                                                    $implicit: value[0]\n                                                }\">\n                    </ng-container>\n                </ng-container>\n                <ng-template #showDefaultValue>\n                    <div [matTooltip]=\"tooltip ?? ''\"\n                         class=\"display-container text-ellipsis\">\n                        <span *ngIf=\"!isFormControl && placeholder && !shouldHideTitle\"\n                              class=\"display-title\"\n                              aria-hidden=\"true\">\n                            {{ placeholder }}:\n                        </span>\n                        <ng-container *ngIf=\"compactSummaryTemplate; else defaultSummary\">\n                            <ng-template #displayCompactSummaryTemplate\n                                         *ngTemplateOutlet=\"compactSummaryTemplate; context: { $implicit: value }\">\n                            </ng-template>\n                        </ng-container>\n                        <ng-template #defaultSummary>\n                            <span class=\"display-value text-label-rendered\">{{ computeDisplayValue() }}</span>\n                        </ng-template>\n                    </div>\n                </ng-template>\n                <ng-container *ngIf=\"!readonly\">\n                    <!-- aria-hidden will override the default from mat-icon -->\n                    <ng-container *ngIf=\"value.length && clearable\">\n                        <ng-container *ngTemplateOutlet=\"clearIcon\"></ng-container>\n                    </ng-container>\n\n                    <mat-icon *ngIf=\"!value.length || !clearable\"\n                              class=\"arrow-down\">keyboard_arrow_down</mat-icon>\n                </ng-container>\n            </div>\n        </ng-container>\n\n        <ng-template #chipsTemplate>\n            <mat-chip-grid #chipList\n                           [attr.tabindex]=\"!disabled && !readonly ? 0 : null\"\n                           [attr.aria-label]=\"ariaLabel ?? placeholder\"\n                           [attr.aria-describedby]=\"describedBy\"\n                           [attr.aria-disabled]=\"disabled || readonly\"\n                           [style.width]=\"isFormControl ? null : width\"\n                           [disabled]=\"disabled\"\n                           (click)=\"open()\"\n                           (focus)=\"onFocus($event)\"\n                           (blur)=\"onBlur($event)\"\n                           (keydown.backspace)=\"backspaceBehavior()\"\n                           (keydown.arrowup)=\"navigate(-1, $event)\"\n                           (keydown.arrowdown)=\"navigate(1, $event)\"\n                           (keyup.enter)=\"preventDefault($event);\"\n                           (keydown.enter)=\"preventDefault($event); isOpen ? setSelectedItem() : open();\"\n                           (keyup.space)=\"!isOpen && open();\"\n                           (keyup.esc)=\"preventDefault($event); close();\"\n                           (keydown.esc)=\"preventDefault($event)\"\n                           (keydown.tab)=\"close(false)\"\n                           (keydown.shift.tab)=\"close()\">\n                <ng-container *ngFor=\"let option of value; let i = index\">\n                    <mat-chip-row *ngLet=\"canRemoveChip(option) as canRemoveChip\"\n                                  [removable]=\"canRemoveChip\"\n                                  [matTooltip]=\"intl.translateLabel(option.tooltip ?? option.text)\"\n                                  (removed)=\"deselectItem(option)\"\n                                  class=\"chip-selectable\">\n                        <mat-icon *ngIf=\"!!option?.icon?.svgIcon\"\n                                  [svgIcon]=\"option!.icon!.svgIcon!\"\n                                  class=\"chip-selectable-icon\">\n                        </mat-icon>\n                        <mat-icon *ngIf=\"!!option?.icon?.matIcon\"\n                                  class=\"chip-selectable-icon\">\n                            {{option?.icon?.matIcon}}\n                        </mat-icon>\n                        <span>\n                            {{ intl.translateLabel(option.text) }}\n                        </span>\n                        <button *ngIf=\"canRemoveChip\"\n                                [attr.aria-hidden]=\"true\"\n                                matChipRemove\n                                tabindex=\"-1\">\n                            <mat-icon>close</mat-icon>\n                        </button>\n                    </mat-chip-row>\n                </ng-container>\n\n                <input #searchInput\n                       [uiAutofocus]=\"isOpen\"\n                       [refocus]=\"isOpen\"\n                       [placeholder]=\"(isFormControl && !empty) ? '' : defaultValue\"\n                       [readonly]=\"readonly || !searchable\"\n                       [formControl]=\"inputControl\"\n                       [matChipInputFor]=\"chipList\"\n                       [attr.maxlength]=\"maxLength\"\n                       [attr.aria-label]=\"ariaLabel ?? placeholder\"\n                       [attr.aria-required]=\"required\"\n                       [attr.aria-expanded]=\"isOpen\"\n                       selectionLocation=\"end\"\n                       autocomplete=\"off\"\n                       aria-autocomplete=\"list\"\n                       role=\"combobox\"\n                       matInput>\n\n            </mat-chip-grid>\n        </ng-template>\n    </ng-container>\n\n    <ng-container *ngIf=\"!expandInline; else optionsDropdown\">\n        <ng-template cdkConnectedOverlay\n                     cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n                     [cdkConnectedOverlayOrigin]=\"optionsDropdownTrigger\"\n                     [cdkConnectedOverlayPositions]=\"dropdownPosition\"\n                     [cdkConnectedOverlayHasBackdrop]=\"true\"\n                     [cdkConnectedOverlayOpen]=\"isOpen\"\n                     (backdropClick)=\"close(false)\">\n            <ng-container *ngTemplateOutlet=\"optionsDropdown\">\n            </ng-container>\n        </ng-template>\n    </ng-container>\n\n</div>\n\n<ng-template #optionsDropdown>\n    <div [class.is-form-control]=\"isFormControl\"\n         [style.width]=\"isFormControl ? (this.suggestContainerWidth+1)+'px' : width\"\n         [style.height]=\"expandInline ? '100%' : undefined\"\n         [class.ui-suggest-dropdown-item-list-container-expanded-inline]=\"expandInline\"\n         [class.searchable]=\"searchable && !multiple\"\n         [class.mat-elevation-z4]=\"!expandInline\"\n         [uiAutofocus]=\"!searchable && !multiple\"\n         [refocus]=\"isOpen && !multiple\"\n         [@displayState]=\"'open'\"\n         (keydown.arrowup)=\"navigate(-1, $event)\"\n         (keydown.arrowdown)=\"navigate(1, $event)\"\n         (keyup.enter)=\"preventDefault($event);\"\n         (keydown.enter)=\"preventDefault($event);\n            setSelectedItem();\"\n         (keydown.esc)=\"preventDefault($event)\"\n         (keyup.esc)=\"preventDefault($event);\n            close();\"\n         (keydown.tab)=\"onOptionsDropdownTabPressed()\"\n         (keydown.shift.tab)=\"close()\"\n         tabindex=\"-1\"\n         class=\"ui-suggest-dropdown-item-list-container\">\n        <ng-container *ngIf=\"!isDown\">\n            <ng-container *ngTemplateOutlet=\"searchableCountInfoTmpl\"></ng-container>\n\n            <ng-container *ngTemplateOutlet=\"resultList\">\n            </ng-container>\n        </ng-container>\n\n        <mat-form-field *ngIf=\"searchable && (!multiple || compact)\">\n            <input #searchInput\n                   [placeholder]=\"isFormControl ? '' : placeholder\"\n                   [formControl]=\"inputControl\"\n                   [uiAutofocus]=\"isOpen &&\n                         searchable\"\n                   [attr.maxlength]=\"maxLength\"\n                   [attr.aria-label]=\"ariaLabel ?? placeholder\"\n                   [refocus]=\"isOpen\"\n                   selectionLocation=\"end\"\n                   autocomplete=\"off\"\n                   aria-autocomplete=\"list\"\n                   matInput>\n\n            <mat-icon *ngIf=\"inDrillDownMode\"\n                      [matTooltip]=\"intl.clearSelectionLabel\"\n                      (keydown.space)=\"removeSelection($event)\"\n                      (keydown.enter)=\"removeSelection($event)\"\n                      (click)=\"removeSelection($event)\"\n                      matSuffix\n                      tabindex=\"0\"\n                      role=\"button\"\n                      aria-hidden=\"false\"\n                      class=\"clear\">\n                <svg width=\"100%\"\n                     height=\"100%\"\n                     viewBox=\"0 0 20 20\"\n                     style=\"color:currentColor;fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.5;\">\n                    <path d=\"M6.505 13.498l7-7M13.505 13.5l-7-7\"\n                          fill=\"none\"\n                          stroke=\"currentColor\"\n                          stroke-width=\"2.0011213\" />\n                </svg>\n            </mat-icon>\n\n            <mat-icon *ngIf=\"!drillDown || !searchInput.value\"\n                      matSuffix>search</mat-icon>\n        </mat-form-field>\n\n        <ng-container *ngIf=\"isDown\">\n            <ng-container *ngTemplateOutlet=\"resultList\">\n            </ng-container>\n\n            <ng-container *ngTemplateOutlet=\"searchableCountInfoTmpl\"></ng-container>\n        </ng-container>\n\n        <ng-template #searchableCountInfoTmpl>\n            <mat-list-item *ngIf=\"items.length &&\n                         (loading$ | async) === false &&\n                         searchableCountInfo?.count === items.length &&\n                         searchable &&\n                         !inputControl.value\"\n                           [matTooltip]=\"searchableCountInfo?.message ?? ''\"\n                           [attr.role]=\"'option'\"\n                           matTooltipPosition=\"right\"\n                           class=\"text-ellipsis item-max-count-info-message\">\n                <mat-divider *ngIf=\"isDown\"></mat-divider>\n                <mat-icon>info_outline</mat-icon>\n                <span>{{searchableCountInfo?.message}}</span>\n                <mat-divider *ngIf=\"!isDown\"></mat-divider>\n            </mat-list-item>\n        </ng-template>\n    </div>\n</ng-template>\n\n<ng-template #resultList>\n    <mat-list [attr.role]=\"'listbox'\"\n              [style.height]=\"expandInline ? '100%' : undefined\">\n        <cdk-virtual-scroll-viewport [isDown]=\"isDown\"\n                                     [itemSize]=\"itemSize\"\n                                     [style.max-height.px]=\"viewportMaxHeight\"\n                                     [style.height.px]=\"expandInline ? viewportMaxHeight : '100vh'\"\n                                     [minBufferPx]=\"viewportMaxHeight * 1.2\"\n                                     [maxBufferPx]=\"viewportMaxHeight * 1.4\"\n                                     (rangeLoad)=\"rangeLoad($event)\"\n                                     uiVirtualScrollRangeLoader>\n            <ng-container *ngTemplateOutlet=\"customValueTemplate; context: { $implicit: 'down' }\">\n            </ng-container>\n\n            <ng-container *ngFor=\"\n                            let item of headerItems;\n                            let index = index\">\n                <ng-container *ngTemplateOutlet=\"\n                                defaultItemTemplate;\n                                context: {\n                                    item,\n                                    index,\n                                    isActiveIndex: index === activeIndex\n                                }\">\n                </ng-container>\n            </ng-container>\n\n            <mat-divider *ngIf=\"headerItems!.length && !hasNoResults\"></mat-divider>\n\n            <ng-container *cdkVirtualFor=\"\n                            let item of renderItems;\n                            let index = index;\n                            trackBy: trackById;\n                            templateCacheSize: disableTooltip ? 20 : 0\">\n                <ng-container *ngTemplateOutlet=\"\n                              defaultItemTemplate;\n                              context: {\n                                  item,\n                                  index,\n                                  isActiveIndex: computedItemsOffset(index) === activeIndex\n                                }\">\n                </ng-container>\n            </ng-container>\n\n            <ng-container *ngTemplateOutlet=\"customValueTemplate; context: { $implicit: 'up' }\">\n            </ng-container>\n\n            <mat-list-item *ngIf=\"loading$ | async\"\n                           [style.height.px]=\"baseSize\">\n                <mat-progress-spinner color=\"primary\"\n                                      mode=\"indeterminate\"\n                                      diameter=\"20\"\n                                      strokeWidth=\"2\">\n                </mat-progress-spinner>\n            </mat-list-item>\n\n            <ng-container *ngLet=\"(\n                inputControl.value.length < minChars\n                    ? intl.minCharsLength(minChars)\n                    : intl.noResultsLabel\n            ) as label\">\n                <mat-list-item *ngIf=\"hasNoResults &&\n                                  !isCustomValueVisible &&\n                                  !headerItems!.length &&\n                                  (loading$ | async) === false\"\n                               [matTooltip]=\"label\"\n                               [attr.role]=\"'option'\"\n                               matTooltipPosition=\"right\"\n                               class=\"text-ellipsis no-results-text\">\n                    {{label}}\n                </mat-list-item>\n            </ng-container>\n        </cdk-virtual-scroll-viewport>\n        <mat-divider></mat-divider>\n        <div *ngIf=\"maxSelectionConfig.count <= value.length\"\n             class=\"no-more-options-footer\">\n            <mat-icon>warning</mat-icon>\n            <span>{{maxSelectionConfig.footerMessage}}</span>\n        </div>\n    </mat-list>\n</ng-template>\n\n<ng-template #customValueTemplate\n             let-renderDirection>\n    <ng-container *ngLet=\"isCustomValueAlreadySelected\n             ? intl.customValueAlreadySelected\n             : customValueLabelTranslator(inputControl.value) as customValueText\">\n        <mat-list-item *ngIf=\"isCustomValueVisible && direction === renderDirection\"\n                       [class.active]=\"(renderDirection === 'down' ? -1 : items.length) === activeIndex\"\n                       [class.custom-value-template]=\"itemTemplate && applyItemTemplateToCustomValue\"\n                       [matTooltip]=\"customValueText\"\n                       [style.height.px]=\"itemSize\"\n                       (click)=\"preventDefault($event); updateValue(inputControl.value, !multiple, true);\"\n                       [attr.role]=\"'option'\"\n                       matTooltipPosition=\"right\"\n                       class=\"text-ellipsis custom-item\">\n            <ng-container *ngTemplateOutlet=\"itemTemplate && applyItemTemplateToCustomValue ? itemTemplate : defaultCustomValueTemplate; context: {\n                    $implicit: customValueText,\n                    isCustomValue: true,\n                    isCustomValueAlreadySelected\n                }\">\n            </ng-container>\n\n            <ng-template #defaultCustomValueTemplate\n                         let-customValueText>\n                <div class=\"text-label text-ellipsis\">\n                    <mat-icon *ngIf=\"!isCustomValueAlreadySelected\">add</mat-icon>\n                    <span class=\"text-label-rendered\">{{ customValueText }}</span>\n                </div>\n            </ng-template>\n        </mat-list-item>\n    </ng-container>\n</ng-template>\n\n<ng-template #clearIcon>\n    <mat-icon [matTooltip]=\"intl.clearSelectionLabel\"\n              (keydown.space)=\"removeSelection($event)\"\n              (keydown.enter)=\"removeSelection($event)\"\n              (click)=\"removeSelection($event)\"\n              tabindex=\"0\"\n              role=\"button\"\n              aria-hidden=\"false\"\n              class=\"clear\">\n        <svg width=\"100%\"\n             height=\"100%\"\n             viewBox=\"0 0 20 20\"\n             style=\"color:currentColor;fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.5;\">\n            <path d=\"M6.505 13.498l7-7M13.505 13.5l-7-7\"\n                  fill=\"none\"\n                  stroke=\"currentColor\"\n                  stroke-width=\"2.0011213\" />\n        </svg>\n    </mat-icon>\n</ng-template>\n\n<ng-template #defaultItemTemplate\n             let-item=\"item\"\n             let-index=\"index\"\n             let-isActiveIndex=\"isActiveIndex\">\n    <mat-list-item *ngLet=\"drillDown && !!item?.expandable as itemExpandable\"\n                   [class.active]=\"isActiveIndex\"\n                   [class.is-loading]=\"item.loading !== VirtualScrollItemStatus.loaded\"\n                   [class.readonly]=\"item.loading !== VirtualScrollItemStatus.loaded\"\n                   [class.selected]=\"!!item &&\n                                                !multiple &&\n                                                isItemSelected(item)\"\n                   [class.is-expandable]=\"itemExpandable\"\n                   [class.disabled]=\"item.disabled || (maxSelectionConfig.count <= value.length && !isItemSelected(item))\"\n                   [style.height.px]=\"!!item ? itemSize : 0\"\n                   [disabled]=\"item.disabled || (maxSelectionConfig.count <= value.length && !isItemSelected(item))\"\n                   (click)=\"preventDefault($event);\n                                        updateValue(item, !multiple, true);\"\n                   [attr.role]=\"'option'\"\n                   [attr.aria-selected]=\"isItemSelected(item)\"\n                   matRipple>\n        <ng-container *ngIf=\"!!item\">\n            <ng-container *ngIf=\"itemTemplate; else defaultItem\">\n                <ng-container *ngTemplateOutlet=\"itemTemplate; context: {\n                                                                $implicit: item\n                                                            }\">\n                </ng-container>\n            </ng-container>\n        </ng-container>\n        <ng-template #defaultItem>\n            <div [matTooltip]=\"(maxSelectionConfig.count <= value.length && !isItemSelected(item) || !maxSelectionConfig.itemTooltip)\n                                ? maxSelectionConfig.itemTooltip\n                                : disableTooltip ? '' : intl.translateLabel(item.tooltip ?? item.text)\"\n                 [attr.data-item-id]=\"item.id\"\n                 matTooltipPosition=\"right\"\n                 class=\"ui-suggest-item\">\n                <mat-checkbox *ngIf=\"multiple\"\n                              [disabled]=\"item.disabled || (maxSelectionConfig.count <= value.length && !isItemSelected(item))\"\n                              [checked]=\"isItemSelected(item)\"\n                              [indeterminate]=\"false\">\n                </mat-checkbox>\n                <div [attr.aria-label]=\"intl.translateLabel(item.text)\"\n                     class=\"text-label text-ellipsis\"\n                     tabindex=\"-1\">\n                    <mat-icon *ngIf=\"!!item?.icon?.svgIcon\"\n                              [svgIcon]=\"item!.icon!.svgIcon!\"></mat-icon>\n                    <mat-icon *ngIf=\"!!item?.icon?.matIcon\">{{item?.icon?.matIcon}}</mat-icon>\n                    <span class=\"text-label-rendered\">{{ item?.icon?.iconOnly ? null :\n                        intl.translateLabel(item.text) }}</span>\n                </div>\n                <mat-icon *ngIf=\"itemExpandable\"\n                          class=\"expand-icon\">chevron_right</mat-icon>\n            </div>\n        </ng-template>\n    </mat-list-item>\n</ng-template>\n","import { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatRippleModule } from '@angular/material/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { UiAutoAccessibleLabelModule } from '@uipath/angular/a11y';\nimport { UiAutofocusModule } from '@uipath/angular/directives/ui-autofocus';\nimport { UiClickOutsideModule } from '@uipath/angular/directives/ui-click-outside';\nimport { UiNgLetModule } from '@uipath/angular/directives/ui-ng-let';\nimport { UiVirtualScrollRangeLoaderModule } from '@uipath/angular/directives/ui-virtual-scroll-range-loader';\nimport { OverlayModule } from '@angular/cdk/overlay';\n\nimport { UiSuggestComponent } from './ui-suggest.component';\n\n@NgModule({\n    imports: [\n        CommonModule,\n        MatIconModule,\n        MatInputModule,\n        MatListModule,\n        MatTooltipModule,\n        MatCheckboxModule,\n        ScrollingModule,\n        MatRippleModule,\n        MatProgressSpinnerModule,\n        ReactiveFormsModule,\n        UiNgLetModule,\n        UiAutofocusModule,\n        UiClickOutsideModule,\n        UiVirtualScrollRangeLoaderModule,\n        MatChipsModule,\n        UiAutoAccessibleLabelModule,\n        OverlayModule,\n    ],\n    declarations: [\n        UiSuggestComponent,\n    ],\n    exports: [\n        UiSuggestComponent,\n    ],\n})\nexport class UiSuggestModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i3.UiSuggestIntl"],"mappings":"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"}