{"version":3,"file":"fundamental-ngx-core-multi-combobox.mjs","sources":["../../../../libs/core/multi-combobox/multi-announcer/multi-announcer.directive.ts","../../../../libs/core/multi-combobox/helpers.ts","../../../../libs/core/multi-combobox/models/selection-change.event.ts","../../../../libs/core/multi-combobox/multi-combobox-config.ts","../../../../libs/core/multi-combobox/base-multi-combobox.class.ts","../../../../libs/core/multi-combobox/multi-combobox.token.ts","../../../../libs/core/multi-combobox/mobile/mobile-multi-combobox.component.ts","../../../../libs/core/multi-combobox/mobile/mobile-multi-combobox.component.html","../../../../libs/core/multi-combobox/data-source/multi-combobox-data-source.ts","../../../../libs/core/multi-combobox/data-source/multi-combobox-data-source-parser.ts","../../../../libs/core/multi-combobox/select-all-toggler/select-all-toggler.component.ts","../../../../libs/core/multi-combobox/multi-combobox.component.ts","../../../../libs/core/multi-combobox/multi-combobox.component.html","../../../../libs/core/multi-combobox/multi-combobox.module.ts","../../../../libs/core/multi-combobox/fundamental-ngx-core-multi-combobox.ts"],"sourcesContent":["import { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { ContentChildren, Directive, HostListener, inject, Input, QueryList } from '@angular/core';\nimport { KeyUtil } from '@fundamental-ngx/cdk/utils';\nimport { TokenComponent } from '@fundamental-ngx/core/token';\nimport { FdLanguageKeyIdentifier, resolveTranslationSignalFn } from '@fundamental-ngx/i18n';\n\n@Directive({\n    selector: '[fdMultiAnnouncer]',\n    exportAs: 'fdMultiAnnouncer',\n    standalone: true\n})\nexport class MultiAnnouncerDirective {\n    /** @hidden */\n    @Input()\n    multiAnnouncerOptions: unknown[];\n\n    /** @hidden */\n    @ContentChildren(TokenComponent, { descendants: true })\n    private _tokens: QueryList<TokenComponent>;\n\n    /** @hidden */\n    private _noResultsAnnounced = false;\n\n    /** @hidden */\n    private _resultsAnnounced = false;\n\n    /** @hidden */\n    private _announcement = '';\n\n    /** @hidden */\n    private readonly _liveAnnouncer: LiveAnnouncer = inject(LiveAnnouncer);\n\n    /** @hidden */\n    private _resolveTranslation = resolveTranslationSignalFn();\n\n    /** @hidden */\n    @HostListener('keyup', ['$event'])\n    protected _makeSearchTermChangeAnnouncements(event: KeyboardEvent): void {\n        if (KeyUtil.isKeyType(event, 'alphabetical') || KeyUtil.isKeyType(event, 'numeric')) {\n            this._liveAnnouncer.clear();\n            const count = this.multiAnnouncerOptions?.length;\n            if (!count && !this._noResultsAnnounced) {\n                this._buildAnnouncement(this._resolveTranslation('coreMultiInput.noResults')());\n                this._noResultsAnnounced = true;\n                this._resultsAnnounced = false;\n            } else if (count) {\n                const trKey: FdLanguageKeyIdentifier =\n                    count === 1 ? 'coreMultiInput.countListResultsSingular' : 'coreMultiInput.countListResultsPlural';\n                this._buildAnnouncement(this._resolveTranslation(trKey, { count })());\n                this._buildAnnouncement(this._resolveTranslation('coreMultiInput.navigateSelectionsWithArrows')());\n                if (!this._resultsAnnounced) {\n                    this._noResultsAnnounced = false;\n                    this._resultsAnnounced = true;\n                }\n            }\n            if (this._tokens?.length) {\n                this._buildAnnouncement(this._resolveTranslation('coreMultiInput.escapeNavigateTokens')());\n            }\n            this._makeAnnouncement(this._announcement);\n        }\n    }\n\n    /** @hidden */\n    private _buildAnnouncement(message: string): void {\n        this._announcement = this._announcement + message + ' ';\n    }\n\n    /** @hidden */\n    private async _makeAnnouncement(message: string): Promise<void> {\n        await this._liveAnnouncer.announce(message, 'assertive').then(() => {\n            this._announcement = '';\n        });\n    }\n}\n","import { isSelectItem, SelectableOptionItem } from '@fundamental-ngx/cdk/forms';\nimport { isFunction, isJsObject, isString } from '@fundamental-ngx/cdk/utils';\nimport { shallowEqual } from 'fast-equals';\n\n/** @hidden */\nexport function lookupValue(item: unknown, lookupKey: string): string {\n    if (isSelectItem(item)) {\n        return lookupKey && item ? item.value[lookupKey] : item.value;\n    } else {\n        return lookupKey && item ? item[lookupKey] : (item as string);\n    }\n}\n\n/** @hidden */\nexport function displayValue(item: unknown, displayKey: string): string {\n    if (isSelectItem(item)) {\n        return item.label;\n    } else if (isJsObject(item) && displayKey) {\n        const currentItem = objectGet(item, displayKey);\n\n        return isFunction(currentItem) ? currentItem() : currentItem;\n    } else {\n        return item as string;\n    }\n}\n\n/** @hidden */\nexport function objectGet(obj: unknown, is: string | string[] | undefined): any {\n    if (!isJsObject(obj)) {\n        return obj;\n    } else if (isString(is)) {\n        return objectGet(obj, is.split('.'));\n    } else if (!is?.length) {\n        return obj;\n    } else {\n        return objectGet(obj[is[0]], is.slice(1));\n    }\n}\n\n/** @hidden */\nexport function getSelectItemByInputValue<T>(\n    suggestions: SelectableOptionItem<T>[],\n    needleValue: string\n): SelectableOptionItem<T> | undefined {\n    return suggestions.find((value) => value.label === needleValue);\n}\n\n/** @hidden\n *  Map grouped values to array. */\nexport function flattenGroups(items: SelectableOptionItem[]): SelectableOptionItem[] {\n    return items.reduce((result, item) => result.concat(item.children ?? []), <SelectableOptionItem[]>[]);\n}\n\n/** @hidden */\nexport function getTokenIndexByIdlOrValue(item: SelectableOptionItem, suggestions: SelectableOptionItem[]): number {\n    return suggestions.findIndex((token) => token.id === item.id || shallowEqual(token.value, item.value));\n}\n","import { SelectableOptionItem } from '@fundamental-ngx/cdk/forms';\nimport { BaseMultiCombobox } from '../base-multi-combobox.class';\n\nexport class MultiComboboxSelectionChangeEvent {\n    /**\n     * Multi Combobox selection change event\n     * @param source Multi Combobox component\n     * @param selectedItems Selected items\n     */\n    constructor(\n        public source: BaseMultiCombobox,\n        public selectedItems: SelectableOptionItem['value'] // Contains selected items\n    ) {}\n}\n","import { Injectable } from '@angular/core';\nimport { DataProvider, MatchingStrategy } from '@fundamental-ngx/cdk/data-source';\n\nimport { ContentDensity } from '@fundamental-ngx/cdk/utils';\n// import { PlatformConfig } from '@fundamental-ngx/platform/shared';\n\n/**\n * Default options for Multi-Combobox\n */\n@Injectable({ providedIn: 'root' })\nexport class MultiComboboxConfig {\n    /**\n     * Content Density of element. 'cozy' | 'compact'\n     */\n    contentDensity: ContentDensity;\n\n    /**\n     * String matching strategy for typeahead list. Default: 'starts with per term'\n     */\n    matchingStrategy: MatchingStrategy = MatchingStrategy.STARTS_WITH_PER_TERM;\n\n    /**\n     * Maps data providers\n     */\n    providers: Map<string, DataProvider<any>> | null = new Map();\n\n    /**\n     * Create Provider factory function\n     */\n    // static createProviderFactory(\n    //     obj: Partial<MultiComboboxConfig>\n    // ): (platformConfig: PlatformConfig) => MultiComboboxConfig {\n    //     const useFactory = (platformConfig: PlatformConfig): MultiComboboxConfig =>\n    //         Object.assign(new MultiComboboxConfig(platformConfig), obj);\n    //     return useFactory;\n    // }\n\n    /** @hidden */\n    // constructor(platformConfig: PlatformConfig) {\n    //     this.contentDensity = platformConfig.contentDensity;\n    // }\n}\n","import {\n    ALT,\n    BACKSPACE,\n    CONTROL,\n    DOWN_ARROW,\n    ENTER,\n    ESCAPE,\n    LEFT_ARROW,\n    RIGHT_ARROW,\n    SHIFT,\n    TAB,\n    UP_ARROW\n} from '@angular/cdk/keycodes';\nimport {\n    ChangeDetectorRef,\n    DestroyRef,\n    Directive,\n    ElementRef,\n    Injector,\n    InputSignal,\n    InputSignalWithTransform,\n    ModelSignal,\n    OutputEmitterRef,\n    Signal,\n    WritableSignal,\n    afterNextRender,\n    inject,\n    signal,\n    viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DataSourceDirective, MatchingBy, MatchingStrategy } from '@fundamental-ngx/cdk/data-source';\nimport {\n    CvaControl,\n    CvaDirective,\n    FormStates,\n    SelectableOptionItem,\n    isOptionItem,\n    isSelectableOptionItem\n} from '@fundamental-ngx/cdk/forms';\nimport { RangeSelector, coerceArraySafe, isFunction, isJsObject, isString } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityObserver } from '@fundamental-ngx/core/content-density';\nimport { FormControlComponent } from '@fundamental-ngx/core/form';\nimport { PopoverComponent } from '@fundamental-ngx/core/popover';\nimport { shallowEqual } from 'fast-equals';\nimport { Subscription, skip, timer } from 'rxjs';\nimport {\n    FdMultiComboBoxDataSource,\n    FdMultiComboboxAcceptableDataSource\n} from './data-source/multi-combobox-data-source';\nimport { displayValue, flattenGroups, lookupValue, objectGet } from './helpers';\nimport { MultiComboboxSelectionChangeEvent } from './models/selection-change.event';\nimport { MultiComboboxConfig } from './multi-combobox-config';\nimport { FD_MAP_LIMIT } from './multi-combobox.component';\n\nexport type TextAlignment = 'left' | 'right';\n\n@Directive()\nexport abstract class BaseMultiCombobox<T = any> {\n    /**\n     * Currently selected items in the multi-combobox.\n     * To modify selections, use the `writeValue()` or `setValue()` methods.\n     */\n    abstract selectedItems: T[];\n\n    /**\n     * Determines whether items should be grouped in the dropdown.\n     * When enabled, items will be organized into groups based on the `groupKey` property.\n     */\n    abstract group: InputSignalWithTransform<boolean, unknown>;\n\n    /**\n     * The property name used to group items when `group` is enabled.\n     * This key is used to extract the grouping value from each item object.\n     *\n     * @example\n     * ```typescript\n     * // If items are: [{name: 'Apple', category: 'Fruit'}, {name: 'Carrot', category: 'Vegetable'}]\n     * groupKey = 'category'; // Groups by 'Fruit' and 'Vegetable'\n     * ```\n     */\n    abstract groupKey: InputSignal<string>;\n\n    /**\n     * The property name used to display item labels in the dropdown.\n     * For primitive types (strings, numbers), this is ignored and the value itself is displayed.\n     * For objects, this specifies which property to use as the display text.\n     *\n     * @example\n     * ```typescript\n     * displayKey = 'name'; // Displays item.name for each item\n     * ```\n     */\n    abstract displayKey: InputSignal<string>;\n\n    /**\n     * The property name used to display secondary text below the main label.\n     * Only displayed when `showSecondaryText` is enabled.\n     */\n    abstract secondaryKey: InputSignal<string>;\n\n    /**\n     * Controls whether secondary text should be displayed for each item.\n     * When enabled, uses the `secondaryKey` property to extract and display secondary text.\n     */\n    abstract showSecondaryText: InputSignalWithTransform<boolean, unknown>;\n\n    /**\n     * The property name used as a unique identifier for each item.\n     * Used for item comparison, deduplication, and tracking selections.\n     * If not specified, the entire object is compared.\n     */\n    abstract lookupKey: InputSignal<string>;\n\n    /**\n     * Signal containing the error message displayed when an invalid entry is detected.\n     * Displayed temporarily when the user enters text that doesn't match any available options.\n     */\n    abstract invalidEntryMessage: InputSignal<string | null | undefined>;\n\n    /**\n     * Signal containing the duration (in milliseconds) to display the invalid entry message.\n     * After this duration expires, the error message is automatically hidden.\n     */\n    abstract invalidEntryDisplayTime: Signal<number>;\n\n    /**\n     * Model signal controlling whether limitless mode is enabled.\n     * In limitless mode, all available items are loaded without pagination limits.\n     * Use with caution for large datasets as it may impact performance.\n     */\n    abstract limitless: ModelSignal<boolean>;\n\n    /**\n     * Signal indicating whether the current configuration uses grouped items.\n     *\n     * @remarks\n     * Computed based on whether both `group` and `groupKey` are defined.\n     * Used internally to determine rendering strategy.\n     */\n    abstract isGroup: Signal<boolean>;\n\n    /**\n     * Signal containing the current text in the search input field.\n     * Updates reactively as the user types. Used for filtering and autocomplete functionality.\n     */\n    abstract inputText: Signal<string>;\n\n    /**\n     * Signal containing a reference to the search input element.\n     */\n    abstract searchInputElement: Signal<FormControlComponent | undefined>;\n\n    /**\n     * Output emitter for selection change events.\n     */\n    abstract selectionChange: OutputEmitterRef<MultiComboboxSelectionChangeEvent>;\n\n    /**\n     * Output emitter for data received events.\n     */\n    abstract dataReceived: OutputEmitterRef<boolean>;\n\n    /**\n     * Output emitter for data request events.\n     */\n    abstract dataRequested: OutputEmitterRef<boolean>;\n\n    /**\n     * Internal writable signal for selected items.\n     * Must be implemented by subclass. Provides write access to the selection state.\n     * @hidden\n     */\n    protected abstract _selectedItems: WritableSignal<T[]>;\n\n    /**\n     * Internal writable signal for input text.\n     * Must be implemented by subclass. Provides write access to the input text.\n     *\n     * @hidden\n     */\n    protected abstract _inputText: WritableSignal<string>;\n\n    /**\n     * Protected method for internal writes to selectedItems with coercion.\n     * Ensures the value is properly coerced to an array before setting.\n     *\n     * @param value - The new array of selected items\n     * @hidden\n     */\n    protected abstract _setSelectedItems(value: T[]): void;\n\n    /**\n     * Protected method for setting input text with side effects.\n     * Triggers `onTouched()` callback to mark the control as touched.\n     *\n     * @param value - The new input text value\n     * @hidden\n     */\n    protected abstract _setInputText(value: string): void;\n\n    /**\n     * Control value accessor instance for forms integration.\n     * @hidden\n     */\n    readonly cvaControl: CvaControl<T> = inject(CvaControl);\n\n    /**\n     * Data source directive instance for managing async data loading and filtering.\n     * @hidden\n     */\n    readonly dataSourceDirective: DataSourceDirective<T, FdMultiComboBoxDataSource<T>> = inject(DataSourceDirective);\n\n    /** Control Value Accessor directive for forms support. */\n    readonly _cva = inject(CvaDirective<T>, {\n        self: true\n    });\n\n    /** Multi combobox config. */\n    readonly _multiComboboxConfig = inject(MultiComboboxConfig, {\n        optional: true\n    });\n\n    /** Content Density Observer */\n    readonly contentDensityObserver = inject(ContentDensityObserver);\n\n    /**\n     * Signal containing currently selected suggestion items.\n     * @hidden\n     */\n    _selectedSuggestions = signal<SelectableOptionItem<T>[]>([]);\n\n    /**\n     * Signal containing currently matched suggestion items based on search text.\n     * Updates when the user types in the search field.\n     * Contains filtered options that match the current query.\n     * @hidden\n     */\n    _suggestions = signal<SelectableOptionItem[]>([]);\n\n    /**\n     * Signal containing flattened suggestion items (groups expanded to flat list).\n     * @hidden\n     */\n    _flatSuggestions = signal<SelectableOptionItem[]>([]);\n\n    /**\n     * Signal containing the complete flattened list of all available items.\n     * @hidden\n     */\n    _fullFlatSuggestions = signal<SelectableOptionItem[]>([]);\n\n    /**\n     * Signal indicating whether the \"show selected only\" mode is active.\n     * In mobile mode, toggles between showing all items and showing only selected items.\n     * @hidden\n     */\n    selectedShown = signal(false);\n\n    /**\n     * Writable signal for overriding the invalid entry message with i18n translations.\n     * @hidden\n     */\n    protected readonly _invalidEntryMessageOverride = signal<string | null>(null);\n\n    /** @hidden */\n    protected readonly _elmRef = inject(ElementRef<HTMLElement>);\n\n    /** @hidden */\n    protected readonly _cd = inject(ChangeDetectorRef);\n\n    /**\n     * Maximum number of items to load per page when limitless mode is disabled.\n     * Controls pagination size for large datasets.\n     * @hidden\n     */\n    protected readonly _mapLimit = inject(FD_MAP_LIMIT);\n\n    /** @hidden */\n    protected readonly _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    protected readonly _injector = inject(Injector);\n\n    /** @hidden */\n    protected _dataSource: FdMultiComboboxAcceptableDataSource<T>;\n\n    /**\n     * Previous input text value before the last change.\n     * Used for restoring the input on invalid entry or cancellation.\n     * @hidden\n     */\n    protected _previousInputText: string;\n\n    /**\n     * Matching strategy for filtering items based on user input.\n     * Determines how items are matched: starts with, contains, etc.\n     * Defaults to value from config or `MatchingStrategy.CONTAINS`.\n     * @hidden\n     */\n    protected _matchingStrategy: MatchingStrategy =\n        this._multiComboboxConfig?.matchingStrategy ?? MatchingStrategy.CONTAINS;\n\n    /**\n     * Subscription for data source events.\n     * @hidden\n     */\n    protected _dsSubscription: Subscription | null = null;\n\n    /**\n     * Reference to the host element.\n     * @hidden\n     */\n    protected _element: HTMLElement = this._elmRef.nativeElement;\n\n    /**\n     * @hidden\n     * Keys, that won't trigger the popover's open state, when dispatched on search input.\n     */\n    protected readonly _nonOpeningKeys: number[] = [\n        BACKSPACE,\n        ESCAPE,\n        ENTER,\n        CONTROL,\n        TAB,\n        SHIFT,\n        UP_ARROW,\n        RIGHT_ARROW,\n        DOWN_ARROW,\n        LEFT_ARROW,\n        ALT\n    ];\n\n    /**\n     * Timer subscription for displaying invalid entry message.\n     * Auto-hides the error message after the configured duration.\n     * @hidden\n     */\n    protected _timerSub$: Subscription;\n\n    /**\n     * Previous form state before displaying invalid entry error.\n     * Stored to restore the original state after error is cleared.\n     * @hidden\n     */\n    protected _previousState?: FormStates;\n\n    /**\n     * Previous state message before displaying invalid entry error.\n     */\n    protected _previousStateMessage: string | null | undefined;\n\n    /**\n     * Range selector utility for handling shift+click multi-selection.\n     */\n    protected readonly _rangeSelector = new RangeSelector();\n\n    /**\n     * Flag indicating whether the data source has changed.\n     * Guard flag: true while waiting for a new data source's first real data emission.\n     * Prevents the provider's initial empty emission from being treated as \"no results.\"\n     * @hidden\n     */\n    private _dataSourceChanged = true;\n\n    /**\n     * Signal reference to the popover component.\n     * Used for controlling popover visibility and position.\n     * @hidden\n     */\n    private readonly popover = viewChild(PopoverComponent);\n\n    /**\n     * Writes a value to the control from the forms API.\n     *\n     * @param value - Array of items to set as selected\n     * @remarks\n     * Part of the ControlValueAccessor interface. Called by Angular forms\n     * when the form model changes.\n     * @hidden\n     */\n    writeValue(value: T[]): void {\n        this._setSelectedItems(coerceArraySafe(value));\n        this._cva.writeValue(this._selectedItems());\n        this._setSelectedSuggestions();\n        this._emitChangeEvent();\n    }\n\n    /**\n     * Used to change the value of a control.\n     * @param value the value to be applied\n     * @param emitOnChange whether to emit \"onChange\" event.\n     * Should be \"false\", if the change is made programmatically (internally) by the control, \"true\" otherwise\n     */\n    setValue(value: T[], emitOnChange = true): void {\n        this._setSelectedItems(coerceArraySafe(value));\n        this._cva.setValue(this._selectedItems(), emitOnChange);\n        this._setSelectedSuggestions();\n        this._emitChangeEvent();\n    }\n\n    /** @hidden */\n    protected _displayFn = (value: T): string => displayValue(value, this.displayKey());\n\n    /** @hidden */\n    protected _secondaryFn = (value: T): string => {\n        if (isOptionItem(value)) {\n            return value.secondaryText ?? '';\n        } else if (isJsObject(value) && this.secondaryKey()) {\n            const currentItem = objectGet(value, this.secondaryKey());\n\n            return isFunction(currentItem) ? currentItem() : currentItem;\n        } else {\n            return value as string;\n        }\n    };\n\n    /**\n     * @hidden\n     * Method to emit change event\n     */\n    protected _emitChangeEvent(): void {\n        const event = new MultiComboboxSelectionChangeEvent(this, this._selectedItems());\n\n        this.selectionChange.emit(event);\n\n        // Wait for Angular to complete the current render cycle, then refresh popover position after selection changes\n        afterNextRender(\n            () => {\n                this.popover()?.refreshPosition();\n            },\n            { injector: this._injector }\n        );\n    }\n\n    /** @hidden */\n    protected _setSelectedSuggestions(): void {\n        this._selectedSuggestions.set([]);\n\n        const selectedItems = this._selectedItems();\n        if (!selectedItems?.length) {\n            return;\n        }\n\n        const fullFlatSuggestions = this._fullFlatSuggestions();\n        const selectedSuggestions: SelectableOptionItem<T>[] = [];\n\n        // Update immutably\n        const updatedSuggestions = fullFlatSuggestions.map((item) => {\n            const isSelected = selectedItems.some(\n                (selectedItem) => item.label === selectedItem || item.value === selectedItem\n            );\n\n            if (isSelected) {\n                selectedSuggestions.push({ ...item, selected: true });\n                return { ...item, selected: true };\n            } else if (item.selected) {\n                // Item was selected but is now deselected - must update to false\n                return { ...item, selected: false };\n            }\n\n            // Item was not and is not selected - no change needed\n            return item;\n        });\n\n        this._selectedSuggestions.set(selectedSuggestions);\n        this._fullFlatSuggestions.set(updatedSuggestions);\n    }\n\n    /**\n     * Convert original data to SelectableOptionItems Interface\n     * @hidden\n     */\n    protected _convertToOptionItems(items: T[]): SelectableOptionItem<T>[] {\n        const item = items[0];\n\n        const elementTypeIsOptionItem = isSelectableOptionItem(item);\n        if (elementTypeIsOptionItem) {\n            return items as SelectableOptionItem[];\n        }\n\n        const elementTypeIsObject = isJsObject(item);\n        if (elementTypeIsObject) {\n            return this._convertObjectsToOptionItems(items);\n        }\n\n        const elementTypeIsString = isString(item);\n        if (elementTypeIsString) {\n            return this._convertPrimitiveToOptionItems(items);\n        }\n\n        return [];\n    }\n\n    /**\n     * Convert data to SelectableOptionItems Interface\n     * @hidden\n     */\n    protected _convertObjectsToOptionItems(items: T[]): SelectableOptionItem<T>[] {\n        if (this.isGroup()) {\n            return this._convertObjectsToGroupOptionItems(items);\n        } else if (this.showSecondaryText() && this.secondaryKey()) {\n            return this._convertObjectsToSecondaryOptionItems(items);\n        } else {\n            return this._convertObjectsToDefaultOptionItems(items);\n        }\n    }\n\n    /**\n     * Convert object[] data to Group OptionItems Interface\n     * @hidden\n     */\n    protected _convertObjectsToGroupOptionItems<K extends T>(items: K[]): SelectableOptionItem<T>[] {\n        const group: Record<string, K[]> = {};\n\n        for (let i = 0; i < items.length; i++) {\n            const item = items[i];\n            const keyValue = item[this.groupKey()];\n            if (!keyValue) {\n                continue;\n            }\n\n            if (!group[keyValue]) {\n                group[keyValue] = [];\n            }\n\n            group[keyValue].push(item);\n        }\n\n        return Object.keys(group).map((key) => {\n            const selectItem: SelectableOptionItem = {\n                label: key,\n                value: null,\n                isGroup: true\n            };\n\n            const currentGroup = group[key];\n\n            if (this.showSecondaryText() && this.secondaryKey()) {\n                selectItem.children = this._convertObjectsToSecondaryOptionItems(currentGroup);\n            } else {\n                selectItem.children = this._convertObjectsToDefaultOptionItems(currentGroup);\n            }\n\n            return selectItem;\n        });\n    }\n\n    /**\n     * Convert T[] data to Secondary SelectableOptionItems<T> Interface\n     * @hidden\n     */\n    protected _convertObjectsToSecondaryOptionItems<K extends T>(items: K[]): SelectableOptionItem<T>[] {\n        const selectItems: SelectableOptionItem[] = [];\n        const selectedItems = this._selectedItems();\n\n        for (let i = 0; i < items.length; i++) {\n            const value = items[i];\n            selectItems.push({\n                label: displayValue(value, this.displayKey()),\n                id: lookupValue(value, this.lookupKey()),\n                secondaryText: objectGet(value, this.secondaryKey()),\n                value,\n                selected: selectedItems.includes(value) || false\n            });\n        }\n\n        return selectItems;\n    }\n\n    /**\n     * Convert Primitive data(Boolean, String, Number) to SelectableOptionItems Interface\n     * @hidden\n     */\n    protected _convertPrimitiveToOptionItems(items: any[]): SelectableOptionItem<T>[] {\n        const selectItems: SelectableOptionItem[] = [];\n        const selectedItems = this._selectedItems();\n        for (let i = 0; i < items.length; i++) {\n            const value = items[i];\n            selectItems.push({\n                label: value,\n                id: lookupValue(value, this.lookupKey()),\n                value,\n                selected: selectedItems.includes(value) || false\n            });\n        }\n\n        return selectItems;\n    }\n\n    /**\n     * Convert T[] to SelectableOptionItems<T> Interface (Default)\n     * @hidden\n     */\n    protected _convertObjectsToDefaultOptionItems(items: T[]): SelectableOptionItem<T>[] {\n        const selectItems: SelectableOptionItem[] = [];\n        const selectedItems = this._selectedItems();\n\n        for (let i = 0; i < items.length; i++) {\n            const value = items[i];\n            selectItems.push({\n                label: displayValue(value, this.displayKey()),\n                id: lookupValue(value, this.lookupKey()),\n                value,\n                selected: selectedItems.includes(value) || false\n            });\n        }\n\n        return selectItems;\n    }\n\n    /** @hidden */\n    protected _setInvalidEntry(): void {\n        if (this._previousState || this._previousStateMessage) {\n            return;\n        }\n\n        this._previousState = this._cva.state;\n        this._cva.state = 'error';\n\n        this._previousStateMessage = this._cva.stateMessage;\n        const overrideMessage = this._invalidEntryMessageOverride();\n        this._cva.stateMessage = overrideMessage ?? this.invalidEntryMessage() ?? null;\n\n        this._cd.markForCheck();\n    }\n\n    /** @hidden */\n    protected _unsetInvalidEntry(): void {\n        this._cva.state = this._previousState;\n        this._previousState = undefined;\n\n        this._cva.stateMessage = this._previousStateMessage;\n        this._previousStateMessage = undefined;\n\n        this._cd.markForCheck();\n    }\n\n    /** @hidden */\n    protected _focusToSearchField(): void {\n        this.searchInputElement()?.elementRef.nativeElement.focus();\n    }\n\n    /** @hidden */\n    protected _mapAndUpdateModel(): void {\n        const selectedItems = this._selectedSuggestions().map(({ value }) => value);\n\n        const shouldEmitChangeEvent = !shallowEqual(this._selectedItems(), selectedItems);\n\n        if (!shouldEmitChangeEvent) {\n            return;\n        }\n\n        this.writeValue(selectedItems);\n\n        this._cva.onChange(selectedItems);\n\n        this._emitChangeEvent();\n    }\n\n    /**\n     * @hidden\n     * Prepares the data stream and subscribes to it.\n     */\n    protected _openDataStream(matchingStrategy: MatchingStrategy): void {\n        if (!this.dataSourceDirective.dataSourceProvider) {\n            throw new Error(`[dataSource] source did not match an array, Observable, or DataSource`);\n        }\n\n        this._matchingStrategy = matchingStrategy;\n        this._configureDataSourceProvider(matchingStrategy);\n\n        // initial data fetch\n        this._fetchInitialData();\n\n        this._subscribeToDsEvents();\n\n        this.dataSourceDirective.dataSourceChanged.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n            this._dataSourceChanged = true;\n            this._subscribeToDsEvents();\n            this._configureDataSourceProvider(this._matchingStrategy);\n            this._fetchInitialData();\n        });\n\n        this.dataSourceDirective.dataChanged$.pipe(skip(0), takeUntilDestroyed(this._destroyRef)).subscribe((data) => {\n            if (data.length === 0) {\n                if (this._dataSourceChanged) {\n                    // Data source transition: skip the invalid-entry handling (_processingEmptyData)\n                    // because the new provider's BehaviorSubject starts with [] before match('*') populates it.\n                    // But still clear stale suggestions and reset the flag.\n                    this._dataSourceChanged = false;\n                    this._suggestions.set([]);\n                    this._flatSuggestions.set([]);\n                    this._fullFlatSuggestions.set([]);\n                } else {\n                    this._processingEmptyData();\n                }\n                return;\n            }\n\n            this._previousInputText = this.inputText();\n\n            this._parseDataSourceValue(data);\n\n            this._cva.stateChanges.next('initDataSource.open().');\n\n            this._cd.markForCheck();\n        });\n    }\n\n    /**\n     * Parses the data from the data stream and updates the model if needed.\n     * @param data array of objects from the data stream.\n     */\n    protected _parseDataSourceValue(data: T[]): void {\n        this._convertDataSourceSuggestions(data);\n\n        const selectedSuggestions = this._selectedSuggestions();\n        if (selectedSuggestions.length > 0) {\n            this._suggestions.update((suggestions) =>\n                suggestions.map((suggestion) => {\n                    const isSelected = selectedSuggestions.some((item) => shallowEqual(item.value, suggestion.value));\n                    return isSelected ? { ...suggestion, selected: true } : suggestion;\n                })\n            );\n        }\n\n        if (this._dataSourceChanged) {\n            const currentSuggestions = this._suggestions();\n            this._flatSuggestions.set(this.isGroup() ? flattenGroups(currentSuggestions) : currentSuggestions);\n            this._fullFlatSuggestions.set(this._flatSuggestions());\n\n            this._setSelectedSuggestions();\n\n            this._mapAndUpdateModel();\n\n            this._dataSourceChanged = false;\n        }\n    }\n\n    /**\n     * Transforms plain array into `SelectableOptionItem<T>`\n     * @param data\n     */\n    protected _convertDataSourceSuggestions(data: T[]): void {\n        const selectedSuggestions = this._selectedSuggestions();\n        this._suggestions.set(\n            this._convertToOptionItems(data).map((optionItem) => {\n                const selectedElement = selectedSuggestions.find((selectedItem) => selectedItem.id === optionItem.id);\n                if (selectedElement) {\n                    return { ...optionItem, selected: selectedElement.selected };\n                }\n                return optionItem;\n            })\n        );\n    }\n\n    /** @hidden */\n    protected _processingEmptyData(): void {\n        if (this._cva.disabled) {\n            return;\n        }\n\n        if (this._cva.controlInvalid && this._cva.ngControl?.hasError) {\n            this._setInvalidEntry();\n\n            if (this._timerSub$) {\n                this._timerSub$.unsubscribe();\n            }\n        }\n        this._setInputText(this._previousInputText);\n\n        this._timerSub$ = timer(this.invalidEntryDisplayTime()).subscribe(() => this._unsetInvalidEntry());\n\n        this._cd.detectChanges();\n    }\n\n    /**\n     * @hidden\n     * Configures the data source provider with matching settings.\n     */\n    private _configureDataSourceProvider(matchingStrategy: MatchingStrategy): void {\n        const dataSourceProvider = this.dataSourceDirective.dataSourceProvider;\n\n        if (!dataSourceProvider) {\n            return;\n        }\n\n        dataSourceProvider.limitless = this.limitless();\n\n        dataSourceProvider.dataProvider.setLookupKey(this.lookupKey());\n        const matchingBy: MatchingBy = {\n            firstBy: this._displayFn\n        };\n\n        if (this.secondaryKey()) {\n            matchingBy.secondaryBy = this._secondaryFn;\n        }\n\n        dataSourceProvider.dataProvider.setMatchingBy(matchingBy);\n        dataSourceProvider.dataProvider.setMatchingStrategy(matchingStrategy);\n    }\n\n    /**\n     * @hidden\n     * Triggers the initial data fetch on the current data source provider.\n     */\n    private _fetchInitialData(): void {\n        const dataSourceProvider = this.dataSourceDirective.dataSourceProvider;\n\n        if (!dataSourceProvider) {\n            return;\n        }\n\n        const map = new Map();\n        map.set('query', '*');\n\n        if (!this.limitless()) {\n            map.set('limit', this._mapLimit);\n        } else {\n            dataSourceProvider.dataProvider['defaultLimit'] = Number.MAX_SAFE_INTEGER;\n        }\n\n        dataSourceProvider.match(map);\n    }\n\n    /**\n     * @hidden\n     * Subscribes to dataRequested/dataReceived events from the current data source provider.\n     * Unsubscribes from previous provider's events first.\n     */\n    private _subscribeToDsEvents(): void {\n        this._dsSubscription?.unsubscribe();\n        this._dsSubscription = new Subscription();\n\n        this._dsSubscription.add(\n            this.dataSourceDirective.dataSourceProvider?.dataRequested.subscribe((value) =>\n                this.dataRequested.emit(value)\n            )\n        );\n        this._dsSubscription.add(\n            this.dataSourceDirective.dataSourceProvider?.dataReceived.subscribe((value) =>\n                this.dataReceived.emit(value)\n            )\n        );\n    }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const MULTI_COMBOBOX_COMPONENT = new InjectionToken('FdMultiComboboxInterface');\n","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Inject, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SelectableOptionItem } from '@fundamental-ngx/cdk/forms';\nimport { Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { BarElementDirective, BarMiddleDirective, ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport {\n    DialogBodyComponent,\n    DialogCloseButtonComponent,\n    DialogComponent,\n    DialogFooterComponent,\n    DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { MobileMultiComboboxInterface } from '../models/multi-combobox.interface';\nimport { MULTI_COMBOBOX_COMPONENT } from '../multi-combobox.token';\n\n@Component({\n    selector: 'fd-mobile-multi-combobox',\n    templateUrl: './mobile-multi-combobox.component.html',\n    styleUrl: './mobile-multi-combobox.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [\n        BarMiddleDirective,\n        BarElementDirective,\n        ButtonBarComponent,\n        TitleComponent,\n        TitleComponent,\n        TemplateDirective,\n        BarMiddleDirective,\n        BarElementDirective,\n        NgTemplateOutlet,\n        ButtonComponent,\n        ButtonBarComponent,\n        FdTranslatePipe,\n        DialogComponent,\n        DialogHeaderComponent,\n        DialogCloseButtonComponent,\n        DialogBodyComponent,\n        DialogFooterComponent\n    ]\n})\nexport class MobileMultiComboboxComponent extends MobileModeBase<MobileMultiComboboxInterface> implements OnInit {\n    /** @hidden */\n    @ViewChild('dialogTemplate') dialogTemplate: TemplateRef<any>;\n\n    /** @hidden\n     * For internal usage\n     * Control element, which will be rendered inside dialog.\n     * List element, which will be rendered inside dialog.\n     */\n    childContent: Nullable<{\n        listTemplate: TemplateRef<any>;\n        controlTemplate: TemplateRef<any>;\n    }> = null;\n\n    /** @hidden */\n    selectedShown = this._component.selectedShown;\n\n    /** @hidden */\n    private _selectedBackup: SelectableOptionItem[];\n\n    /** @hidden */\n    constructor(@Inject(MULTI_COMBOBOX_COMPONENT) multiComboboxComponent: MobileMultiComboboxInterface) {\n        super(multiComboboxComponent, MobileModeControl.MULTI_COMBOBOX);\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._listenOnMultiComboboxOpenChange();\n    }\n\n    /** @hidden */\n    showSelected(): void {\n        const isSelectedShown = this.selectedShown();\n\n        if (isSelectedShown) {\n            this._component._searchTermChanged();\n            this.selectedShown.set(false);\n            return;\n        }\n\n        this._component._moreClicked();\n    }\n\n    /** @hidden */\n    handleDismiss(): void {\n        this.dialogRef.dismiss();\n        this._component._dialogDismiss(this._selectedBackup);\n    }\n\n    /** @hidden */\n    handleApprove(): void {\n        this.dialogRef.close();\n        this._component._dialogApprove();\n    }\n\n    /** @hidden */\n    private _toggleDialog(open: boolean): void {\n        if (!open) {\n            return;\n        }\n\n        const selectedSuggestions = this._component._selectedSuggestions();\n        this._selectedBackup = selectedSuggestions?.length ? [...selectedSuggestions] : [];\n        if (!this._dialogService.hasOpenDialogs()) {\n            this._open();\n        }\n    }\n\n    /** @hidden */\n    private _listenOnMultiComboboxOpenChange(): void {\n        this._component.openChange\n            .pipe(takeUntilDestroyed(this._destroyRef))\n            .subscribe((isOpen) => this._toggleDialog(isOpen));\n    }\n\n    /** @hidden */\n    private _open(): void {\n        this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n            mobile: true,\n            ...this.dialogConfig,\n            backdropClickCloseable: false,\n            escKeyCloseable: false,\n            container: this._elementRef.nativeElement,\n            disablePaddings: true\n        });\n    }\n}\n","<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n    <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n        <fd-dialog-header>\n            @if (mobileConfig.title) {\n                <h1 fd-title fd-dialog-title>{{ mobileConfig.title }}</h1>\n            }\n            @if (mobileConfig.hasCloseButton) {\n                <button fd-dialog-close-button [mobile]=\"true\" (click)=\"handleDismiss()\"></button>\n            }\n            <ng-template fdkTemplate=\"subheader\">\n                <div fd-bar-middle>\n                    <fd-bar-element [fullWidth]=\"true\">\n                        <ng-template [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"></ng-template>\n                        @if (selectedShown()) {\n                            <button\n                                fd-button\n                                glyph=\"multiselect-all\"\n                                fdType=\"emphasized\"\n                                [title]=\"('platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate)()\"\n                                [attr.aria-label]=\"('platformMultiCombobox.mobileShowAllItemsButton' | fdTranslate)()\"\n                                class=\"fd-margin-begin--tiny\"\n                                (click)=\"showSelected()\"\n                            ></button>\n                        }\n                        @if (selectedShown() === false) {\n                            <button\n                                fd-button\n                                glyph=\"multiselect-all\"\n                                fdType=\"transparent\"\n                                [title]=\"('platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate)()\"\n                                [attr.aria-label]=\"\n                                    ('platformMultiCombobox.mobileShowSelectedItemsButton' | fdTranslate)()\n                                \"\n                                class=\"fd-margin-begin--tiny\"\n                                (click)=\"showSelected()\"\n                            ></button>\n                        }\n                    </fd-bar-element>\n                </div>\n            </ng-template>\n        </fd-dialog-header>\n        <fd-dialog-body>\n            <ng-template [ngTemplateOutlet]=\"childContent?.listTemplate || null\"></ng-template>\n        </fd-dialog-body>\n        <fd-dialog-footer>\n            @if (mobileConfig.approveButtonText) {\n                <fd-button-bar fdType=\"emphasized\" [label]=\"mobileConfig.approveButtonText!\" (click)=\"handleApprove()\">\n                </fd-button-bar>\n            }\n            @if (mobileConfig.cancelButtonText) {\n                <fd-button-bar [label]=\"mobileConfig.cancelButtonText!\" (click)=\"handleDismiss()\"> </fd-button-bar>\n            }\n        </fd-dialog-footer>\n    </fd-dialog>\n</ng-template>\n","import { AbstractDataProvider, BaseDataSource, DataProvider } from '@fundamental-ngx/cdk/data-source';\nimport { Observable } from 'rxjs';\n\nexport class FdMultiComboBoxDataSource<T> extends BaseDataSource<T> {\n    /** @hidden */\n    limitless = false;\n    /** @hidden */\n    constructor(public dataProvider: AbstractDataProvider<T>) {\n        super(dataProvider);\n    }\n}\n\nexport class ArrayMultiComboBoxDataSource<T> extends FdMultiComboBoxDataSource<T> {\n    /** @hidden */\n    constructor(data: T[]) {\n        super(new DataProvider(data));\n    }\n}\n\nexport class ObservableMultiComboBoxDataSource<T> extends FdMultiComboBoxDataSource<T> {\n    /** @hidden */\n    constructor(data: Observable<T[]>) {\n        super(new DataProvider(data));\n    }\n}\n\n/**\n * Type of acceptable objects as a datasource for the Multi-Combo Box component.\n */\nexport type FdMultiComboboxAcceptableDataSource<T> = FdMultiComboBoxDataSource<T> | Observable<T[]> | T[];\n","import { DataSourceParser, isDataSource } from '@fundamental-ngx/cdk/data-source';\nimport { isObservable } from 'rxjs';\nimport {\n    ArrayMultiComboBoxDataSource,\n    FdMultiComboBoxDataSource,\n    FdMultiComboboxAcceptableDataSource,\n    ObservableMultiComboBoxDataSource\n} from './multi-combobox-data-source';\n\nexport class MultiComboboxDataSourceParser<T> implements DataSourceParser<T, FdMultiComboBoxDataSource<T>> {\n    /**\n     * Transforms plain array or observable into DataSource class.\n     * @param source\n     */\n    parse(source: FdMultiComboboxAcceptableDataSource<T>): FdMultiComboBoxDataSource<T> | undefined {\n        if (isDataSource(source)) {\n            return source as FdMultiComboBoxDataSource<T>;\n        }\n\n        if (Array.isArray(source)) {\n            return new ArrayMultiComboBoxDataSource<T>(source);\n        }\n\n        if (isObservable(source)) {\n            return new ObservableMultiComboBoxDataSource<T>(source);\n        }\n\n        return undefined;\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DestroyRef,\n    HostListener,\n    inject,\n    Input,\n    OnInit,\n    ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { FormItemComponent } from '@fundamental-ngx/core/form';\nimport { ListFocusItem } from '@fundamental-ngx/core/list';\nimport { ToolbarComponent } from '@fundamental-ngx/core/toolbar';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { Observable } from 'rxjs';\n\n@Component({\n    selector: 'fd-multi-combobox-select-all-toggler',\n    template: `\n        <fd-toolbar>\n            <div fd-form-item class=\"fd-multi-combobox-select-all__form-item\">\n                <fd-checkbox tabIndexValue=\"-1\" [ngModel]=\"checkboxValue\" [tristate]=\"true\">\n                    {{\n                        (\n                            'coreMultiComboBox.selectAllLabel'\n                            | fdTranslate: { selectedItems: selectedItems.length, totalItems: flatItems.length }\n                        )()\n                    }}\n                </fd-checkbox>\n            </div>\n        </fd-toolbar>\n    `,\n    styleUrl: './select-all-toggler.component.scss',\n    providers: [\n        {\n            provide: ListFocusItem,\n            useExisting: SelectAllTogglerComponent\n        }\n    ],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    imports: [ToolbarComponent, FormItemComponent, CheckboxComponent, FormsModule, FdTranslatePipe]\n})\nexport class SelectAllTogglerComponent extends ListFocusItem implements OnInit {\n    /**\n     * Handler for the select all items\n     * */\n    @Input() selectAllHandler: (select: boolean) => void;\n\n    /**\n     * Stream for receiving information about the value changes,\n     */\n    @Input() valueChanges: Observable<unknown>;\n\n    /** @hidden */\n    @Input()\n    selectedItems: Array<unknown> = [];\n\n    /** @hidden */\n    @Input()\n    flatItems: Array<unknown> = [];\n\n    /** @hidden */\n    get allAreSelected(): boolean {\n        return this.selectedItems.length === this.flatItems.length;\n    }\n\n    /** @hidden */\n    get someAreSelected(): boolean {\n        return this.selectedItems.length > 0 && !this.allAreSelected;\n    }\n\n    /** @hidden */\n    get checkboxValue(): boolean | null {\n        if (this.allAreSelected) {\n            return true;\n        }\n        if (this.someAreSelected) {\n            return null;\n        }\n        return false;\n    }\n\n    /** @hidden */\n    private _destroyRef = inject(DestroyRef);\n\n    /** @hidden */\n    private changeDetector: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n    /** @hidden */\n    @HostListener('keydown.enter', ['$event'])\n    @HostListener('keydown.space', ['$event'])\n    onKeyDown($event: Event): void {\n        $event.preventDefault();\n        this.change(!this.checkboxValue);\n    }\n\n    /** @hidden */\n    @HostListener('click')\n    onClick(): void {\n        this.elementRef.nativeElement.focus();\n        this.change(!this.checkboxValue);\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        this.tabindex = 0;\n        this.valueChanges.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {\n            this.changeDetector.detectChanges();\n        });\n    }\n\n    /** @hidden */\n    change(value: boolean): void {\n        this.selectAllHandler(value);\n    }\n}\n","import { A, CONTROL, DOWN_ARROW, ENTER, ESCAPE, SPACE, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    ElementRef,\n    InjectionToken,\n    Injector,\n    Input,\n    OnInit,\n    TemplateRef,\n    ViewContainerRef,\n    ViewEncapsulation,\n    booleanAttribute,\n    computed,\n    contentChildren,\n    effect,\n    inject,\n    input,\n    model,\n    output,\n    signal,\n    viewChild,\n    viewChildren\n} from '@angular/core';\nimport { outputToObservable } from '@angular/core/rxjs-interop';\nimport { DataSourceDirective, FD_DATA_SOURCE_TRANSFORMER, MatchingStrategy } from '@fundamental-ngx/cdk/data-source';\nimport { CvaControl, CvaDirective, OptionItem, SelectItem, SelectableOptionItem } from '@fundamental-ngx/cdk/forms';\nimport {\n    AutoCompleteDirective,\n    AutoCompleteEvent,\n    ContentDensity,\n    DynamicComponentService,\n    FocusEscapeDirection,\n    FocusTrapService,\n    KeyUtil,\n    SearchHighlightPipe,\n    TemplateDirective,\n    TruncatedTitleDirective,\n    coerceArraySafe,\n    resizeObservable\n} from '@fundamental-ngx/cdk/utils';\nimport {\n    FD_LIST_COMPONENT,\n    ListComponent,\n    ListGroupHeaderDirective,\n    ListItemComponent,\n    ListSecondaryDirective,\n    ListTitleDirective\n} from '@fundamental-ngx/core/list';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { PopoverFillMode } from '@fundamental-ngx/core/shared';\n\nimport { contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { TokenComponent, TokenizerComponent } from '@fundamental-ngx/core/token';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { BaseMultiCombobox } from './base-multi-combobox.class';\nimport { MobileMultiComboboxComponent } from './mobile/mobile-multi-combobox.component';\nimport { MULTI_COMBOBOX_COMPONENT } from './multi-combobox.token';\n\nimport { MultiComboboxDataSourceParser } from './data-source/multi-combobox-data-source-parser';\n\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { FormControlComponent, FormInputMessageGroupComponent, FormMessageComponent } from '@fundamental-ngx/core/form';\nimport { InputGroupComponent, InputGroupInputDirective } from '@fundamental-ngx/core/input-group';\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { FD_LANGUAGE_SIGNAL, FdTranslatePipe, TranslationResolver } from '@fundamental-ngx/i18n';\nimport { shallowEqual } from 'fast-equals';\nimport { getSelectItemByInputValue, getTokenIndexByIdlOrValue } from './helpers';\nimport { MultiComboboxSelectionChangeEvent } from './models/selection-change.event';\nimport { MultiAnnouncerDirective } from './multi-announcer/multi-announcer.directive';\nimport { SelectAllTogglerComponent } from './select-all-toggler/select-all-toggler.component';\n\nexport const FD_MAP_LIMIT = new InjectionToken<number>('Map limit≥', { factory: () => 12 });\n\n@Component({\n    selector: 'fd-multi-combobox',\n    templateUrl: './multi-combobox.component.html',\n    styleUrl: './multi-combobox.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    hostDirectives: [\n        {\n            directive: CvaDirective,\n            inputs: ['id:inputId', 'placeholder', 'state', 'stateMessage', 'disabled', 'readonly', 'name']\n        },\n        {\n            directive: DataSourceDirective,\n            inputs: ['dataSource'],\n            outputs: ['dataChanged']\n        }\n    ],\n    providers: [\n        CvaControl,\n        DynamicComponentService,\n        contentDensityObserverProviders(),\n        {\n            provide: FD_DATA_SOURCE_TRANSFORMER,\n            useClass: MultiComboboxDataSourceParser\n        },\n        {\n            provide: MULTI_COMBOBOX_COMPONENT,\n            useExisting: MultiComboboxComponent\n        }\n    ],\n    imports: [\n        NgTemplateOutlet,\n        PopoverComponent,\n        PopoverControlComponent,\n        PopoverBodyComponent,\n        FormInputMessageGroupComponent,\n        InputGroupComponent,\n        TokenizerComponent,\n        TokenComponent,\n        FormsModule,\n        AutoCompleteDirective,\n        FormControlComponent,\n        InputGroupInputDirective,\n        FormMessageComponent,\n        ListComponent,\n        SelectAllTogglerComponent,\n        ListGroupHeaderDirective,\n        ListTitleDirective,\n        ListItemComponent,\n        CheckboxComponent,\n        NgClass,\n        ListSecondaryDirective,\n        FdTranslatePipe,\n        SearchHighlightPipe,\n        MultiAnnouncerDirective,\n        TruncatedTitleDirective\n    ]\n})\nexport class MultiComboboxComponent<T = any> extends BaseMultiCombobox<T> implements AfterViewInit, OnInit {\n    /**\n     * Configuration object for mobile mode appearance and behavior.\n     * Only applies when `mobile` is true.\n     */\n    @Input()\n    mobileConfig: MobileModeConfig;\n\n    /**\n     * Sets the currently selected items.\n     */\n    @Input()\n    set selectedItems(value: T[] | null | undefined) {\n        this._setSelectedItems(coerceArraySafe(value as T | T[]));\n    }\n\n    /**\n     * Read-only array of currently selected items (backward-compatible API).\n     */\n    get selectedItems(): T[] {\n        return this._selectedItems();\n    }\n\n    /**\n     * Sets or gets the currently selected value.\n     */\n    @Input()\n    set value(value: T[]) {\n        this.setValue(value, true);\n    }\n\n    /**\n     * Gets the current value from the form control.\n     * @returns The current array of selected items\n     */\n    get value(): T[] {\n        return this._cva.value;\n    }\n\n    /**\n     * Show select all checkbox\n     * @defaultValue false\n     */\n    readonly showSelectAll = input(false, { transform: booleanAttribute });\n\n    /**\n     * Maximum height of the dropdown options panel.\n     * @defaultValue '250px'\n     */\n    readonly maxHeight = input('250px');\n\n    /**\n     * Controls whether the addon button can receive keyboard focus.\n     * @defaultValue false\n     */\n    readonly buttonFocusable = input(false, { transform: booleanAttribute });\n\n    /**\n     *  Whether the autocomplete should be enabled; Enabled by default.\n     * @defaultValue true\n     */\n    readonly autoComplete = input(true, { transform: booleanAttribute });\n\n    /**\n     * Whether list item options should be rendered as byline.\n     * @defaultValue false\n     */\n    readonly byline = input(false, { transform: booleanAttribute });\n\n    /**\n     * Max width of multi combobox dropdown body.\n     * `none` will not limit width of the dropdown.\n     * `container` will limit width of the dropdown to the width of the multi-input itself.\n     * `number` will limit width of the dropdown by provided number in pixels.\n     *\n     * @defaultValue 'none'\n     */\n    readonly bodyMaxWidth = input<'none' | 'container' | number>('none');\n\n    /**\n     * Computed maximum width for the popover in pixels.\n     * @hidden\n     */\n    get _popoverMaxWidth(): number | null {\n        const bodyMaxWidth = this.bodyMaxWidth();\n        if (bodyMaxWidth === 'none') {\n            return null;\n        }\n\n        if (typeof bodyMaxWidth === 'number') {\n            return bodyMaxWidth;\n        }\n\n        return this._elementRef.nativeElement.getBoundingClientRect().width;\n    }\n\n    /**\n     * TODO: Name of the entity for which DataProvider will be loaded. You can either pass list of\n     * items or use this entityClass and internally we should be able to do lookup to some registry\n     * and retrieve the best matching DataProvider that is set on application level\n     */\n    readonly entityClass = input<string>();\n\n    /**\n     * Enables mobile-optimized rendering mode.\n     * When enabled, displays the combobox in a full-screen dialog optimized for touch devices.\n     * Requires `mobileConfig` for full customization.\n     *\n     * @defaultValue false\n     */\n    readonly mobile = input(false, { transform: booleanAttribute });\n\n    /**\n     * Controls whether items should be grouped in the dropdown.\n     * When enabled, items are organized by the property specified in `groupKey`.\n     * Groups display as headers with items nested underneath.\n     *\n     * @defaultValue false\n     */\n    group = input(false, { transform: booleanAttribute });\n\n    /**\n     * Property path for grouping items.\n     * Specifies which property to use for grouping items when `group` is enabled.\n     *\n     * @example\n     * ```typescript\n     * groupKey = input('department'); // Groups by item.department\n     * ```\n     *\n     * @defaultValue ''\n     */\n    groupKey = input<string>('');\n\n    /**\n     * Property path for secondary text display.\n     * When `showSecondaryText` is enabled, displays this property as secondary text below the main label.\n     *\n     * @defaultValue ''\n     */\n    secondaryKey = input<string>('');\n\n    /**\n     * Controls visibility of the secondary text column.\n     * When enabled, displays secondary text from the `secondaryKey` property in a two-column layout.\n     *\n     * @defaultValue false\n     */\n    showSecondaryText = input(false, { transform: booleanAttribute });\n\n    /**\n     * Horizontally align text inside the second column (applicable for two columns layout).\n     *\n     * @defaultValue 'right'\n     */\n    readonly secondaryTextAlignment = input<'left' | 'right'>('right');\n\n    /**\n     * Enables automatic width adjustment of the dropdown.\n     * When enabled, the dropdown width automatically adjusts based on content.\n     * Disable for fixed-width dropdowns.\n     *\n     * @defaultValue true\n     */\n    readonly autoResize = input(true, { transform: booleanAttribute });\n\n    /**\n     * Controls whether clicking the addon button opens the dropdown.\n     * @defaultValue true\n     */\n    readonly openDropdownOnAddOnClicked = input(true, { transform: booleanAttribute });\n\n    /**\n     * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.\n     * * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default\n     * * `equal` will apply a width to the body equivalent to the width of the control.\n     * * 'fit-content' will apply width needed to properly display items inside, independent of control.\n     */\n    readonly fillControlMode = input<PopoverFillMode>('at-least');\n\n    /** Sets title attribute to addon button. */\n    readonly addonIconTitle = input<string>();\n\n    /**\n     * @deprecated Use the i18n module to modify the translation for this string.\n     * Sets invalid entry message.\n     * */\n    invalidEntryMessage = input<string | null | undefined>(null);\n\n    /** Turns limitless mode, ON or OFF */\n    limitless = model<boolean>(false);\n\n    /**\n     * Used in filters and any kind of comparators when we work with objects and this identify\n     * unique field name based on which we are going to do the job\n     */\n    lookupKey = input<string>('');\n\n    /**\n     * When we deal with unknown object we can use `displayKey` to retrieve value from specific\n     * property of the object to act as display value.\n     *\n     * @See ComboBox, Select, RadioGroup, CheckBox Group\n     */\n    displayKey = input<string>('');\n\n    /**\n     * List of values, it can be of type SelectItem, string or any object.\n     * Generic object type is among the list of types,\n     * because we allow to get labels and values using `displayKey` and `lookupKey` inputs accordingly.\n     */\n    readonly list = input<Array<SelectItem | string | object>>();\n\n    /**\n     * Time in ms for how long message of invalid entry should be displayed.\n     * @defaultValue 3000\n     */\n    invalidEntryDisplayTime = input<number>(3000);\n\n    /**\n     * String matching strategy for typeahead list.\n     * Available options: 'starts with per term', 'starts with', 'contains'\n     * @defaultValue MatchingStrategy.STARTS_WITH_PER_TERM\n     */\n    readonly matchingStrategy = input(MatchingStrategy.STARTS_WITH_PER_TERM);\n\n    /** Event emitted when item is selected. */\n    selectionChange = output<MultiComboboxSelectionChangeEvent>();\n\n    /** @hidden Emits event when the menu is opened/closed. */\n    isOpenChange = output<boolean>();\n\n    /** Emits event when the addon button is clicked. */\n    addOnButtonClicked = output<Event>();\n\n    /** Event emitted when data loading is started. */\n    dataRequested = output<boolean>();\n\n    /** Event emitted when data loading is finished. */\n    dataReceived = output<boolean>();\n\n    /**\n     * References the search input element within the template.\n     * @hidden\n     */\n    readonly searchInputElement = viewChild<FormControlComponent>('searchInputElement');\n\n    /**\n     * @hidden\n     * Custom Option item Template.\n     */\n    optionItemTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     * Custom Group Header item Template.\n     */\n    groupItemTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     * Custom Secondary item Template.\n     */\n    secondaryItemTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     * Custom Selected option item Template.\n     */\n    selectedItemTemplate: TemplateRef<any>;\n\n    /**\n     * Observable version of selectionChange for template use.\n     *\n     * @remarks\n     * Used internally for components that require an Observable instead of OutputEmitterRef until we migrate everything to signals\n     * Converts the output signal to an RxJS Observable.\n     *\n     * @hidden\n     */\n    readonly selectionChange$ = outputToObservable(this.selectionChange);\n\n    /**\n     * Content density mode for the component.\n     * @hidden\n     */\n    _contentDensity: ContentDensity = this._multiComboboxConfig?.contentDensity ?? 'cozy';\n\n    /**\n     * Computed signal for the current input text value.\n     * @returns Computed signal containing the current input text\n     */\n    inputText = computed(() => this._inputText() || '');\n\n    /**\n     * Indicates whether the search field is empty.\n     * @returns true if the search field is empty, false otherwise\n     */\n    get isEmptyValue(): boolean {\n        return this.inputText().trim().length === 0;\n    }\n\n    /**\n     * Computed signal indicating whether grouping is active.\n     * @hidden\n     */\n    isGroup = computed(() => !!(this.group() && this.groupKey()));\n\n    /**\n     * Tracks whether the dropdown is currently open.\n     */\n    isOpen = false;\n\n    /**\n     * @hidden\n     * Max width of list container\n     */\n    maxWidth: number;\n\n    /**\n     * @hidden\n     * Min width of list container\n     */\n    minWidth: number;\n\n    /**\n     * @hidden\n     * Subject for communicating dropdown open/close state to mobile mode component.\n     */\n    openChange = new Subject<boolean>();\n\n    /**\n     * Internal writable signal storing the array of selected items.\n     *\n     * @remarks\n     * Provides the underlying storage for the `selectedItems` property.\n     * Modified through `_setSelectedItems()` to ensure proper coercion.\n     *\n     * @hidden Internal writable signal for selected items\n     */\n    protected readonly _selectedItems = signal<T[]>([]);\n\n    /**\n     * Internal writable signal storing the current input text.\n     *\n     * @remarks\n     * Provides the underlying storage for the `inputText` computed signal.\n     * Modified through `_setInputText()` to ensure side effects (like `onTouched`) are triggered.\n     *\n     * @hidden Internal writable signal for input text\n     */\n    protected readonly _inputText = signal<string>('');\n\n    /**\n     * Reference to the list component instance.\n     * @hidden\n     */\n    private readonly listComponent = viewChild(FD_LIST_COMPONENT);\n\n    /**\n     * Collection of custom templates provided by content projection.\n     * @hidden\n     */\n    private readonly customTemplates = contentChildren(TemplateDirective);\n\n    /**\n     * Template reference for the mobile mode control.\n     * @hidden\n     */\n    private readonly mobileControlTemplate = viewChild<TemplateRef<any>>('mobileControlTemplate');\n\n    /**\n     * Template reference for the dropdown list.\n     * @hidden\n     */\n    private readonly listTemplate = viewChild<TemplateRef<any>>('listTemplate');\n\n    /**\n     * Reference to the tokenizer component instance.\n     * @hidden\n     */\n    private readonly _tokenizer = viewChild<TokenizerComponent>(TokenizerComponent);\n\n    /**\n     * Reference to the input group element.\n     * @hidden\n     */\n    private readonly _inputGroup = viewChild('inputGroup', { read: ElementRef });\n\n    /**\n     * @hidden\n     */\n    private readonly items = viewChildren('item', { read: ElementRef });\n\n    /**\n     * Observable stream of the current language configuration.\n     * @hidden\n     */\n    private readonly _langSignal = inject(FD_LANGUAGE_SIGNAL);\n\n    /**\n     * Helper for resolving translation keys to localized strings.\n     * @hidden\n     */\n    private _translationResolver = new TranslationResolver();\n\n    /** @hidden */\n    constructor(\n        private readonly _elementRef: ElementRef,\n        private readonly _viewContainerRef: ViewContainerRef,\n        private readonly _dynamicComponentService: DynamicComponentService,\n        private readonly _focusTrapService: FocusTrapService\n    ) {\n        super();\n\n        this.contentDensityObserver.subscribe();\n\n        // Effect for language changes\n        effect(() => {\n            const lang = this._langSignal();\n            this._invalidEntryMessageOverride.set(\n                this._translationResolver.resolve(lang, 'platformMultiCombobox.invalidEntryError')\n            );\n        });\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        this.cvaControl.listenToChanges();\n        this._openDataStream(this.matchingStrategy());\n    }\n\n    /** @hidden */\n    async ngAfterViewInit(): Promise<void> {\n        if (this.mobile()) {\n            await this._setUpMobileMode();\n        }\n\n        this._assignCustomTemplates();\n\n        this._initWindowResize();\n    }\n\n    /** @hidden */\n    _toggleSelection(item: SelectableOptionItem, fromTokenCloseClick = false): void {\n        const selectedSuggestions = this._selectedSuggestions();\n        const idx = getTokenIndexByIdlOrValue(item, selectedSuggestions);\n        if (idx === -1) {\n            this._selectedSuggestions.set([...selectedSuggestions, item]);\n        } else {\n            this._selectedSuggestions.set(selectedSuggestions.filter((_, i) => i !== idx));\n        }\n\n        item.selected = !item.selected;\n\n        this._propagateChange(fromTokenCloseClick);\n\n        this._cd.detectChanges();\n    }\n\n    /** @hidden */\n    _onOptionCheckboxClicked(event: MouseEvent, index: number): void {\n        event.stopPropagation();\n        this._onListElementClicked(event, index);\n        this._setInputText('');\n        this._searchTermChanged('');\n    }\n\n    /** @hidden */\n    _onCompleteTerm(event: AutoCompleteEvent): void {\n        if (event.forceClose) {\n            this._toggleSelectionByInputText(event.term);\n            this.close();\n        }\n    }\n\n    /**\n     * @hidden\n     * Method that selects all possible options.\n     * *select* attribute – if *true* select all, if *false* unselect all\n     * */\n    _handleSelectAllItems = (select: boolean): void => {\n        this._flatSuggestions.update((items) => items.map((item) => ({ ...item, selected: select })));\n        this._suggestions.update((items) => this._updateSelectionRecursive(items, select));\n        this._selectedSuggestions.set(select ? [...this._flatSuggestions()] : []);\n        this._rangeSelector.reset();\n        this._setInputText('');\n\n        this._propagateChange();\n    };\n\n    /** @hidden */\n    _navigateByTokens(event: KeyboardEvent): void {\n        if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW]) && this.isOpen) {\n            this.listComponent()?.items?.first.focus();\n        }\n    }\n\n    /** @hidden */\n    _removeToken(token: SelectableOptionItem, event?: MouseEvent): void {\n        if (event) {\n            event.preventDefault();\n        }\n        const optionItem = this._flatSuggestions().find((s) => s.value === token.value);\n        if (optionItem) {\n            this._toggleSelection(optionItem, true);\n            this._rangeSelector.reset();\n        }\n    }\n\n    /** @hidden */\n    _moreClicked(): void {\n        const selectedSuggestions = this._selectedSuggestions();\n        this._suggestions.set(\n            this.isGroup()\n                ? this._convertObjectsToGroupOptionItems(selectedSuggestions.map(({ value }) => value))\n                : this._suggestions().filter((value) =>\n                      selectedSuggestions.some((item) => shallowEqual(item.value, value.value))\n                  )\n        );\n\n        this._showList(true);\n        this.selectedShown.set(true);\n        this._cd.detectChanges();\n    }\n\n    /** @hidden */\n    _onBlur(event: FocusEvent): void {\n        const target = event.relatedTarget as HTMLElement;\n        if (target) {\n            const isList = !!target.closest('.fd-multi-combobox__list-container');\n            if (isList) {\n                return;\n            }\n            const suggestions = this._suggestions();\n            if (suggestions?.length === 1 && suggestions[0].label === this.inputText() && !suggestions[0].selected) {\n                this._toggleSelection(suggestions[0]);\n            }\n            this._showList(false);\n            this._setInputText('');\n        }\n        this._cva.onTouched();\n    }\n\n    /** @hidden */\n    _onItemKeyDownHandler(event: KeyboardEvent): void {\n        if (KeyUtil.isKeyCode(event, ESCAPE)) {\n            this._focusToSearchField();\n        } else if ((event.ctrlKey || event.metaKey) && event.shiftKey && KeyUtil.isKeyCode(event, A)) {\n            event.preventDefault();\n            this._handleSelectAllItems(false);\n        } else if ((event.ctrlKey || event.metaKey) && KeyUtil.isKeyCode(event, A)) {\n            event.preventDefault();\n            this._handleSelectAllItems(true);\n        } else if (KeyUtil.isKeyCode(event, ENTER)) {\n            if (!this.mobile()) {\n                this.close();\n            }\n            this._rangeSelector.reset();\n        } else if (KeyUtil.isKeyCode(event, SPACE)) {\n            this._rangeSelector.reset();\n        }\n    }\n\n    /** @hidden */\n    _onOptionClicked(event: MouseEvent, index: number): void {\n        this._onListElementClicked(event, index);\n        this.close();\n    }\n\n    /**\n     * @hidden\n     * Handle dialog dismissing, closes popover and sets backup data.\n     */\n    _dialogDismiss(backup: SelectableOptionItem[]): void {\n        this._selectedSuggestions.set([...backup]);\n        this._setInputText('');\n        this._showList(false);\n        this.selectedShown.set(false);\n    }\n\n    /**\n     * @hidden\n     * Handle dialog approval, closes popover and propagates data changes.\n     */\n    _dialogApprove(): void {\n        this._setInputText('');\n        this._showList(false);\n        this._propagateChange(true);\n    }\n\n    /** @hidden */\n    _popoverOpenChangeHandle(isOpen: boolean): void {\n        this.isOpen = isOpen;\n\n        /** Allow combobox up and down arrows to work properly when multi combobox is inside a dialog with a trapped focus */\n        if (this.isOpen) {\n            this._focusTrapService.pauseCurrentFocusTrap();\n        } else {\n            this._focusTrapService.unpauseCurrentFocusTrap();\n        }\n\n        this._rangeSelector.reset();\n        if (!isOpen) {\n            this._cva.onTouched();\n        }\n    }\n\n    /** Opens the select popover body. */\n    open(): void {\n        this.isOpen = true;\n        this.isOpenChange.emit(this.isOpen);\n        this._cd.markForCheck();\n    }\n\n    /** Closes the select popover body. */\n    close(): void {\n        this._focusToSearchField();\n        this._rangeSelector.reset();\n        this.selectedShown.set(false);\n        this._setInputText('');\n\n        this.isOpen = false;\n        this.isOpenChange.emit(this.isOpen);\n        this._cva.onTouched();\n        this._cd.markForCheck();\n    }\n\n    /** @hidden */\n    _showList(isOpen: boolean): void {\n        if (this.isOpen !== isOpen) {\n            this.isOpen = isOpen;\n            this._cva.onTouched();\n            this.openChange.next(isOpen);\n        }\n\n        if (!this.isOpen) {\n            this._searchTermChanged('');\n        }\n\n        this._cd.markForCheck();\n    }\n\n    /** @hidden */\n    _searchTermChanged(text: string = this.inputText()): void {\n        const map = new Map();\n        map.set('query', text);\n\n        if (!this.limitless()) {\n            map.set('limit', this._mapLimit);\n        } else {\n            map.set('limit', Number.MAX_SAFE_INTEGER);\n        }\n\n        this.dataSourceDirective.dataSourceProvider?.match(map);\n\n        if (text) {\n            this.open();\n        }\n\n        this._cd.markForCheck();\n    }\n\n    /**\n     * Handle Click on Button\n     * @hidden\n     */\n    _onPrimaryButtonClick(isOpen: boolean): void {\n        if (!isOpen) {\n            this._searchTermChanged('');\n        }\n\n        if (this.openDropdownOnAddOnClicked()) {\n            this._showList(!isOpen);\n        } else if (this.isOpen) {\n            this._showList(false);\n        }\n\n        if (this.isOpen) {\n            this.searchInputElement()?.elementRef.nativeElement.focus();\n        }\n    }\n\n    /**\n     * Handle Keydown on Input\n     * @hidden\n     */\n    _onInputKeydownHandler(event: KeyboardEvent): void {\n        if (this._cva.readonly) {\n            return;\n        }\n\n        if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n            event.preventDefault();\n\n            if (event.altKey) {\n                this._showList(true);\n            }\n\n            const listComponent = this.listComponent();\n            if (this.isOpen && listComponent) {\n                listComponent.setItemActive(0);\n            } else if (!this.isOpen) {\n                this._chooseOtherItem(1);\n            }\n        } else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n            event.preventDefault();\n\n            this._chooseOtherItem(-1);\n        } else if (KeyUtil.isKeyCode(event, ENTER)) {\n            this._toggleSelectionByInputText();\n        } else if (!KeyUtil.isKeyCode(event, [...this._nonOpeningKeys, CONTROL])) {\n            this._showList(true);\n            const acceptedKeys =\n                !KeyUtil.isKeyType(event, 'alphabetical') &&\n                !KeyUtil.isKeyType(event, 'numeric') &&\n                !KeyUtil.isKeyType(event, 'ime');\n            if (acceptedKeys) {\n                // SetTimeout is needed for input to receive new value.\n                setTimeout(() => {\n                    if (this.isEmptyValue) {\n                        this.listComponent()?.setItemActive(0);\n                    }\n                });\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     * Method passed to list component.\n     */\n    _handleListFocusEscape(direction: FocusEscapeDirection): void {\n        if (direction === 'up') {\n            this._focusToSearchField();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    _addOnClicked($event: Event): void {\n        this.addOnButtonClicked.emit($event);\n        if (!this.mobile()) {\n            this._onPrimaryButtonClick(this.isOpen);\n        }\n    }\n\n    /** @hidden */\n    _setLimitless(limitless: boolean): void {\n        this.limitless.set(limitless);\n    }\n\n    /** @hidden */\n    _getMapLimit(): number {\n        return this.limitless() ? (this.dataSourceDirective.dataSource as any[]).length : this._mapLimit;\n    }\n\n    /** @hidden */\n    _getGroupItemIds(groupIndex: number): string {\n        const items = this.items();\n        if (!items?.length) {\n            return '';\n        }\n\n        const groupItemIds = items\n            .filter((el) => {\n                const idWithGroup = el.nativeElement.getAttribute('id-with-group-index');\n                if (!idWithGroup) {\n                    return false;\n                }\n                const groupIdx = idWithGroup.split('-')[idWithGroup.split('-').length - 1];\n                return groupIdx === String(groupIndex);\n            })\n            .map((el) => el.nativeElement.getAttribute('id'));\n\n        return groupItemIds?.join(' ');\n    }\n\n    /**\n     * Updates the selected items with proper array coercion.\n     *\n     * @param value - The new array of selected items\n     *\n     * @remarks\n     * Ensures the value is always a valid array, even if null or undefined is provided.\n     * Use this method instead of directly setting `_selectedItems`.\n     *\n     * @hidden Protected method for internal writes with coercion\n     */\n    protected _setSelectedItems(value: T[]): void {\n        this._selectedItems.set(coerceArraySafe(value));\n    }\n\n    /**\n     * Updates the input text and triggers form control touch event.\n     *\n     * @param value - The new input text value\n     *\n     * @remarks\n     * Sets the input text and calls `onTouched()` to mark the form control as touched.\n     * Ensures proper integration with Angular forms and validation.\n     *\n     * @hidden Protected method for setting input text with side effects\n     */\n    protected _setInputText(value: string): void {\n        this._inputText.set(value);\n        this._cva.onTouched();\n    }\n\n    /**\n     * @hidden\n     * Recursively update selection state for items and their children (for grouped suggestions)\n     */\n    private _updateSelectionRecursive(items: SelectableOptionItem[], selected: boolean): SelectableOptionItem[] {\n        return items.map((item) => ({\n            ...item,\n            selected,\n            children: item.children ? this._updateSelectionRecursive(item.children, selected) : undefined\n        }));\n    }\n\n    /** @hidden */\n    private _toggleSelectionByInputText(text = this.inputText()): void {\n        const item = getSelectItemByInputValue<T>(this._fullFlatSuggestions(), text);\n        if (item) {\n            this._toggleSelection(item);\n            this._setInputText('');\n        }\n\n        this._searchTermChanged();\n    }\n\n    /**\n     * @hidden\n     * Method to set input text as item label.\n     */\n    private _setInputTextFromOptionItem(item: OptionItem): void {\n        this._setInputText(item.label);\n\n        if (this.mobile()) {\n            return;\n        }\n\n        this._showList(false);\n    }\n\n    /**\n     * @hidden\n     * applying range selection. Note, that this function will be invoked after combobox item's value has been changed\n     */\n    private _onListElementClicked(event: MouseEvent, index: number): void {\n        // value has been changed at this point, so it can be safely used\n        const flatSuggestions = this._flatSuggestions();\n        const selectionState = flatSuggestions[index].selected;\n        this._rangeSelector.onRangeElementToggled(index, event);\n\n        // Collect items to add/remove from selected suggestions\n        const toRemove = new Set<any>();\n        const toAdd: SelectableOptionItem[] = [];\n        const indicesToUpdate = new Set<number>();\n\n        this._rangeSelector.applyValueToEachInRange((idx) => {\n            const item = flatSuggestions[idx];\n            if (item.selected !== selectionState) {\n                indicesToUpdate.add(idx);\n                // Track what will change based on OLD state before the update\n                if (item.selected) {\n                    // Item is currently selected, will be deselected\n                    toRemove.add(item.value);\n                } else {\n                    // Item is currently not selected, will be selected\n                    toAdd.push({ ...item, selected: selectionState });\n                }\n            }\n        });\n\n        // Update flat suggestions immutably\n        this._flatSuggestions.update((items) =>\n            items.map((item, idx) => (indicesToUpdate.has(idx) ? { ...item, selected: selectionState } : item))\n        );\n\n        // Update selected suggestions\n        this._selectedSuggestions.update((selected) => [...selected.filter((s) => !toRemove.has(s.value)), ...toAdd]);\n\n        this._propagateChange();\n\n        const tokenizer = this._tokenizer();\n        if (tokenizer !== undefined) {\n            tokenizer.onResize();\n            tokenizer.tokenizerInnerEl.nativeElement.scrollLeft = tokenizer.tokenizerInnerEl.nativeElement.scrollWidth;\n        }\n    }\n\n    /** @hidden */\n    private _propagateChange(emitInMobile?: boolean): void {\n        if (!this.mobile() || emitInMobile) {\n            this._mapAndUpdateModel();\n        }\n    }\n\n    /** @hidden */\n    private async _setUpMobileMode(): Promise<void> {\n        const injector = Injector.create({\n            providers: [{ provide: MULTI_COMBOBOX_COMPONENT, useValue: this }],\n            parent: this._injector\n        });\n\n        this._dynamicComponentService.createDynamicComponent(\n            { listTemplate: this.listTemplate(), controlTemplate: this.mobileControlTemplate() },\n            MobileMultiComboboxComponent,\n            {\n                containerRef: this._viewContainerRef\n            },\n            { injector }\n        );\n    }\n\n    /**\n     * @hidden\n     * Method that picks other value moved from current one by offset, called only when Multi Combobox is closed.\n     */\n    private _chooseOtherItem(offset: number): void {\n        const selectedSuggestions = this._selectedSuggestions();\n        const flatSuggestions = this._flatSuggestions();\n        if (selectedSuggestions?.length === flatSuggestions.length) {\n            this._setInputText('');\n            return;\n        }\n\n        const fullFlatSuggestions = this._fullFlatSuggestions();\n        const activeValue = getSelectItemByInputValue<T>(fullFlatSuggestions, this.inputText());\n        const index = flatSuggestions.findIndex((value) => value === activeValue);\n        const position = !this.inputText() && offset === -1 ? flatSuggestions.length - 1 : index + offset;\n        const item = flatSuggestions[position];\n\n        if (item) {\n            this._setInputTextFromOptionItem(item);\n        }\n\n        const selectedIndex = selectedSuggestions.findIndex((value) => value.label === item?.label);\n        if (selectedIndex !== -1) {\n            this._chooseOtherItem(offset);\n        }\n    }\n\n    /** @hidden */\n    private _initWindowResize(): void {\n        this._getOptionsListWidth();\n\n        if (!this.autoResize()) {\n            return;\n        }\n\n        resizeObservable(this._inputGroup()?.nativeElement)\n            .pipe(debounceTime(30), takeUntilDestroyed(this._destroyRef))\n            .subscribe(() => this._getOptionsListWidth());\n    }\n\n    /** @hidden */\n    private _getOptionsListWidth(): void {\n        const body = document.body;\n        const rect = this._inputGroup()?.nativeElement.getBoundingClientRect();\n        const scrollBarWidth = body.offsetWidth - body.clientWidth;\n        this.maxWidth = this.autoResize() ? window.innerWidth - scrollBarWidth - rect.left : this.minWidth;\n        this._cd.detectChanges();\n    }\n\n    /**\n     * @hidden\n     * Assign custom templates\n     */\n    private _assignCustomTemplates(): void {\n        this.customTemplates().forEach((template) => {\n            switch (template.name()) {\n                case 'optionItemTemplate':\n                    this.optionItemTemplate = template.templateRef;\n                    break;\n                case 'groupItemTemplate':\n                    this.groupItemTemplate = template.templateRef;\n                    break;\n                case 'secondaryItemTemplate':\n                    this.secondaryItemTemplate = template.templateRef;\n                    break;\n                case 'selectedItemTemplate':\n                    this.selectedItemTemplate = template.templateRef;\n                    break;\n            }\n        });\n    }\n}\n","<div class=\"fd-multi-combobox\">\n    @if (mobile()) {\n        <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n    } @else {\n        <fd-popover\n            additionalBodyClass=\"fd-popover-custom-list fd-multi-combobox__list-container\"\n            (isOpenChange)=\"_popoverOpenChangeHandle($event)\"\n            [isOpen]=\"isOpen\"\n            [triggers]=\"[]\"\n            [disabled]=\"_cva.disabled\"\n            [maxWidth]=\"_popoverMaxWidth\"\n            [fillControlMode]=\"fillControlMode()\"\n        >\n            <fd-popover-control>\n                <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n            </fd-popover-control>\n            <fd-popover-body [style.width.%]=\"!autoResize() && 100\">\n                <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n                <ng-content></ng-content>\n            </fd-popover-body>\n        </fd-popover>\n    }\n</div>\n<ng-template #controlTemplate>\n    <fd-form-input-message-group>\n        <fd-input-group\n            #inputGroup\n            [id]=\"_cva.id + '-input-group-container'\"\n            [state]=\"_cva.state\"\n            [buttonFocusable]=\"buttonFocusable()\"\n            [button]=\"!_cva.readonly\"\n            [glyph]=\"!_cva.readonly ? 'navigation-down-arrow' : ' '\"\n            [isControl]=\"true\"\n            [disabled]=\"_cva.disabled || _cva.readonly\"\n            [isExpanded]=\"!mobile() && isOpen && _suggestions().length > 0\"\n            [attr.aria-disabled]=\"_cva.disabled || _cva.readonly\"\n            [attr.aria-readonly]=\"_cva.readonly\"\n            [glyphAriaLabel]=\"_cva.ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)()\"\n            [iconTitle]=\"addonIconTitle() || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)()\"\n            (addOnButtonClicked)=\"_addOnClicked($event)\"\n            (click)=\"mobile() && !isOpen && _onPrimaryButtonClick(false)\"\n            (keydown)=\"_navigateByTokens($event)\"\n        >\n            <fd-tokenizer\n                [tokenizerFocusable]=\"false\"\n                [compactCollapse]=\"true\"\n                [showOverflowPopover]=\"false\"\n                #tokenizer\n                class=\"fd-multi-combobox-tokenizer-custom\"\n                (moreClickedEvent)=\"_moreClicked()\"\n                fdMultiAnnouncer\n                [multiAnnouncerOptions]=\"_suggestions()\"\n            >\n                @for (token of _selectedSuggestions(); track token.id) {\n                    <fd-token [readOnly]=\"_cva.disabled\" (onCloseClick)=\"_removeToken(token, $event)\">\n                        {{ token.label }}\n                    </fd-token>\n                }\n                <input\n                    #searchInputElement\n                    fdkAutoComplete\n                    (onComplete)=\"_onCompleteTerm($event)\"\n                    [options]=\"_suggestions()\"\n                    [inputText]=\"_inputText()\"\n                    type=\"text\"\n                    role=\"combobox\"\n                    autocomplete=\"off\"\n                    [ariaLabel]=\"('coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate)()\"\n                    [attr.aria-labelledby]=\"_cva.ariaLabelledBy\"\n                    [attr.aria-autocomplete]=\"autoComplete() && !mobile() ? 'list' : null\"\n                    [attr.aria-owns]=\"autoComplete() && !mobile() ? _cva.id + '-result' : null\"\n                    [attr.aria-haspopup]=\"autoComplete() && !mobile()\"\n                    fd-form-control\n                    fd-input-group-input\n                    tabindex=\"0\"\n                    [id]=\"_cva.id\"\n                    [name]=\"_cva.name\"\n                    (keydown)=\"_onInputKeydownHandler($event)\"\n                    [disabled]=\"_cva.disabled\"\n                    [ngModel]=\"_inputText()\"\n                    (ngModelChange)=\"_setInputText($event); _searchTermChanged()\"\n                    [attr.placeholder]=\"_selectedSuggestions().length ? null : _cva.placeholder\"\n                    (focus)=\"tokenizer._showAllTokens()\"\n                    (blur)=\"!mobile() && _onBlur($event); tokenizer._hideTokens()\"\n                    [attr.aria-expanded]=\"isOpen\"\n                    [readonly]=\"_cva.readonly\"\n                    [attr.aria-readonly]=\"_cva.readonly\"\n                    [attr.aria-required]=\"_cva.required\"\n                    [displayFn]=\"_displayFn\"\n                    class=\"fd-tokenizer__input fd-input-group__input\"\n                />\n            </fd-tokenizer>\n        </fd-input-group>\n        @if (mobile() && isOpen ? false : !!_cva.stateMessage) {\n            <fd-form-message [type]=\"_cva.state\" [innerHtml]=\"_cva.stateMessage\"></fd-form-message>\n        }\n    </fd-form-input-message-group>\n</ng-template>\n<ng-template #mobileControlTemplate>\n    <fd-input-group\n        [id]=\"_cva.id + '-input-group-container'\"\n        class=\"fd-multi-combobox-input-group-custom\"\n        [state]=\"_cva.state\"\n        [buttonFocusable]=\"false\"\n        [isControl]=\"true\"\n        [disabled]=\"_cva.disabled || _cva.readonly\"\n        [isExpanded]=\"!mobile() && isOpen && _suggestions().length > 0\"\n        [attr.aria-disabled]=\"_cva.disabled || _cva.readonly\"\n        [attr.aria-readonly]=\"_cva.readonly\"\n        [glyphAriaLabel]=\"_cva.ariaLabel\"\n    >\n        <input\n            fdkAutoComplete\n            (onComplete)=\"_onCompleteTerm($event)\"\n            [options]=\"_suggestions()\"\n            [inputText]=\"_inputText()\"\n            type=\"text\"\n            role=\"combobox\"\n            autocomplete=\"off\"\n            [ariaLabel]=\"('coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate)()\"\n            [attr.aria-labelledby]=\"_cva.ariaLabelledBy\"\n            [attr.aria-autocomplete]=\"autoComplete() && !mobile() ? 'list' : null\"\n            [attr.aria-owns]=\"autoComplete() && !mobile() ? _cva.id + '-result' : null\"\n            [attr.aria-haspopup]=\"autoComplete() && !mobile()\"\n            fd-form-control\n            fd-input-group-input\n            tabindex=\"0\"\n            [id]=\"_cva.id\"\n            [name]=\"_cva.name\"\n            (keydown)=\"_onInputKeydownHandler($event)\"\n            [disabled]=\"_cva.disabled\"\n            [ngModel]=\"_inputText()\"\n            (ngModelChange)=\"_setInputText($event); _searchTermChanged()\"\n            [placeholder]=\"_cva.placeholder\"\n            (focus)=\"_cva.onTouched()\"\n            (blur)=\"!mobile() && _onBlur($event)\"\n            [attr.aria-expanded]=\"isOpen\"\n            [readonly]=\"_cva.readonly\"\n            [attr.aria-readonly]=\"_cva.readonly\"\n            [displayFn]=\"_displayFn\"\n        />\n    </fd-input-group>\n</ng-template>\n<ng-template #listTemplate>\n    <ul\n        fd-list\n        [byline]=\"byline()\"\n        [selection]=\"byline()\"\n        (focusEscapeList)=\"_handleListFocusEscape($event)\"\n        class=\"fd-multi-combobox__list fd-list--multi-input\"\n        [id]=\"_cva.id + '-result'\"\n        role=\"listbox\"\n        [style.max-height]=\"!mobile() && maxHeight()\"\n        [style.min-width.px]=\"!mobile() && minWidth\"\n        [style.max-width.px]=\"autoResize() && maxWidth\"\n        [attr.aria-labelledby]=\"_cva.id + '-search'\"\n        aria-multiselectable=\"true\"\n        [tabindex]=\"0\"\n        (keydown.tab)=\"close()\"\n        (keydown.shift.tab)=\"close()\"\n        (keydown.escape)=\"close()\"\n    >\n        @if (!!_cva.stateMessage) {\n            <fd-form-message [type]=\"_cva.state\" [innerHtml]=\"_cva.stateMessage\"></fd-form-message>\n        }\n        @if (showSelectAll()) {\n            <fd-multi-combobox-select-all-toggler\n                [selectAllHandler]=\"_handleSelectAllItems\"\n                [valueChanges]=\"selectionChange$\"\n                [selectedItems]=\"_selectedSuggestions()\"\n                [flatItems]=\"_flatSuggestions()\"\n            ></fd-multi-combobox-select-all-toggler>\n        }\n        <ng-content></ng-content>\n        @if (isGroup()) {\n            @for (group of _suggestions(); track group.label; let groupIndex = $index) {\n                @if (!groupItemTemplate) {\n                    <li\n                        fd-list-item\n                        fd-list-group-header\n                        ariaRole=\"group\"\n                        [attr.aria-roledescription]=\"('coreMultiComboBox.listGroupHeader' | fdTranslate)()\"\n                        [attr.aria-owns]=\"_getGroupItemIds(groupIndex)\"\n                        [attr.aria-label]=\"group.label\"\n                    >\n                        <span fd-list-title>{{ group.label }}</span>\n                    </li>\n                } @else {\n                    <ng-template\n                        [ngTemplateOutlet]=\"groupItemTemplate\"\n                        [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n                    ></ng-template>\n                }\n                @for (optionItem of group.children; track optionItem.id; let i = $index) {\n                    <li\n                        fd-list-item\n                        #item=\"fdListItem\"\n                        role=\"option\"\n                        (click)=\"!mobile() && _onOptionClicked($event, i)\"\n                        (keydown)=\"_onItemKeyDownHandler($event)\"\n                        [selected]=\"!!optionItem.selected\"\n                        [attr.id-with-group-index]=\"item.id + '-group-' + groupIndex\"\n                        [attr.aria-setsize]=\"group.children?.length\"\n                        [attr.aria-posinset]=\"i + 1\"\n                    >\n                        <fd-checkbox\n                            role=\"presentation\"\n                            (click)=\"_onOptionCheckboxClicked($event, i)\"\n                            (ngModelChange)=\"_toggleSelection(optionItem)\"\n                            [ngModel]=\"optionItem.selected\"\n                        >\n                        </fd-checkbox>\n                        <ng-template\n                            [ngTemplateOutlet]=\"listItem\"\n                            [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n                        ></ng-template>\n                    </li>\n                }\n            }\n        } @else {\n            @for (optionItem of _suggestions(); track optionItem.id; let i = $index) {\n                <li\n                    fd-list-item\n                    role=\"option\"\n                    [tabindex]=\"0\"\n                    (click)=\"!mobile() && _onOptionClicked($event, i)\"\n                    (keydown)=\"_onItemKeyDownHandler($event)\"\n                    [selected]=\"!!optionItem.selected\"\n                >\n                    <fd-checkbox\n                        role=\"presentation\"\n                        (click)=\"_onOptionCheckboxClicked($event, i)\"\n                        (ngModelChange)=\"_toggleSelection(optionItem)\"\n                        [ngModel]=\"optionItem.selected\"\n                    >\n                    </fd-checkbox>\n                    <ng-template\n                        [ngTemplateOutlet]=\"listItem\"\n                        [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n                    ></ng-template>\n                </li>\n            }\n        }\n    </ul>\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n    @if (optionItem.selected && !!selectedItemTemplate) {\n        <ng-template\n            [ngTemplateOutlet]=\"selectedItemTemplate\"\n            [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n        ></ng-template>\n    }\n    @if (!(optionItem.selected && selectedItemTemplate)) {\n        <ng-template\n            [ngTemplateOutlet]=\"optionItemSource\"\n            [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n        ></ng-template>\n        <ng-template\n            [ngTemplateOutlet]=\"secondaryTextSource\"\n            [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n        ></ng-template>\n    }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n    @if (!optionItemTemplate) {\n        <span\n            fd-list-title\n            [attr.title]=\"optionItem.label\"\n            [innerHTML]=\"optionItem.label | highlight: _inputText()\"\n            fdTruncatedTitle\n        ></span>\n    } @else {\n        <ng-template\n            [ngTemplateOutlet]=\"optionItemTemplate\"\n            [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n        ></ng-template>\n    }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n    @if (showSecondaryText()) {\n        @if (!secondaryItemTemplate) {\n            <span\n                [style.text-align]=\"secondaryTextAlignment()\"\n                fd-list-secondary\n                [attr.title]=\"optionItem.secondaryText\"\n                [innerHTML]=\"optionItem.secondaryText | highlight: _inputText()\"\n            ></span>\n        } @else {\n            <ng-template\n                [ngTemplateOutlet]=\"secondaryItemTemplate\"\n                [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n            ></ng-template>\n        }\n    }\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { MultiAnnouncerDirective } from './multi-announcer/multi-announcer.directive';\nimport { MultiComboboxComponent } from './multi-combobox.component';\nimport { SelectAllTogglerComponent } from './select-all-toggler/select-all-toggler.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [MultiComboboxComponent, SelectAllTogglerComponent, MultiAnnouncerDirective],\n    exports: [MultiComboboxComponent, SelectAllTogglerComponent, MultiAnnouncerDirective]\n})\nexport class MultiComboboxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}