{"version":3,"file":"fundamental-ngx-core-multi-input.mjs","sources":["../../../../libs/core/multi-input/multi-input.interface.ts","../../../../libs/core/multi-input/multi-input-mobile/multi-input-mobile.component.ts","../../../../libs/core/multi-input/multi-input-mobile/multi-input-mobile.component.html","../../../../libs/core/multi-input/multi-input-mobile/multi-input-mobile.module.ts","../../../../libs/core/multi-input/pair-selection.model.ts","../../../../libs/core/multi-input/multi-input.component.ts","../../../../libs/core/multi-input/multi-input.component.html","../../../../libs/core/multi-input/multi-input.module.ts","../../../../libs/core/multi-input/fundamental-ngx-core-multi-input.ts"],"sourcesContent":["import { EventEmitter, InjectionToken } from '@angular/core';\nimport { MobileMode } from '@fundamental-ngx/core/mobile-mode';\n\nexport const MULTI_INPUT_COMPONENT = new InjectionToken<string[]>('MultiInputComponent');\n\n/**\n * Multi Input Interface to have typing and avoid circular dependency between\n * MultiInputComponent <==> MultiInputMobileComponent\n */\nexport interface MultiInputInterface extends MobileMode {\n    selected: any[];\n    openChange: EventEmitter<boolean>;\n    allItemsSelectedChange: EventEmitter<boolean>;\n\n    dialogApprove(): void;\n\n    selectAllItems(selectAll: boolean): void;\n\n    dialogDismiss(selectedBackup: any[]): void;\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    Inject,\n    OnInit,\n    TemplateRef,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\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 { MULTI_INPUT_COMPONENT, MultiInputInterface } from '../multi-input.interface';\n\n@Component({\n    selector: 'fd-multi-input-mobile',\n    templateUrl: './multi-input-mobile.component.html',\n    styleUrl: './multi-input-mobile.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    imports: [\n        TemplateDirective,\n        BarMiddleDirective,\n        BarElementDirective,\n        ButtonBarComponent,\n        TitleComponent,\n        TitleComponent,\n        BarMiddleDirective,\n        BarElementDirective,\n        ButtonBarComponent,\n        NgTemplateOutlet,\n        ButtonComponent,\n        DialogComponent,\n        DialogHeaderComponent,\n        DialogFooterComponent,\n        DialogBodyComponent,\n        DialogCloseButtonComponent\n    ]\n})\nexport class MultiInputMobileComponent extends MobileModeBase<MultiInputInterface> implements OnInit {\n    /** @hidden */\n    @ViewChild('dialogTemplate') dialogTemplate: TemplateRef<any>;\n\n    /** @hidden */\n    allItemsSelected: boolean;\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    private _selectedBackup: any[];\n\n    /** @hidden */\n    constructor(@Inject(MULTI_INPUT_COMPONENT) multiInputComponent: MultiInputInterface) {\n        super(multiInputComponent, MobileModeControl.MULTI_INPUT);\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._listenOnMultiInputOpenChange();\n    }\n\n    /** Throw select all event, it's handled by multi input component */\n    selectAll(selectAll: boolean): void {\n        this._component.selectAllItems(!selectAll);\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        this._selectedBackup = this._component.selected?.length ? [...this._component.selected] : [];\n        if (!this._dialogService.hasOpenDialogs()) {\n            this._open();\n        }\n    }\n\n    /** @hidden */\n    private _listenOnMultiInputOpenChange(): void {\n        this._component.openChange\n            .pipe(takeUntilDestroyed(this._destroyRef))\n            .subscribe((isOpen) => this._toggleDialog(isOpen));\n        this._component.allItemsSelectedChange\n            .pipe(takeUntilDestroyed(this._destroyRef))\n            .subscribe((allItemsSelected) => (this.allItemsSelected = allItemsSelected));\n    }\n\n    /** @hidden */\n    private _open(): void {\n        this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n            mobile: true,\n            disablePaddings: true,\n            ...this.dialogConfig,\n            backdropClickCloseable: false,\n            escKeyCloseable: false,\n            container: this._elementRef.nativeElement\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>{{ 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 class=\"custom-multi-input-mobile-control-element\">\n                        <ng-template\n                            [ngTemplateOutlet]=\"childContent?.controlTemplate || null\"\n                            [ngTemplateOutletContext]=\"{ displayAddonButton: false }\"\n                        ></ng-template>\n                    </fd-bar-element>\n                    <fd-bar-element class=\"custom-multi-input-select-all-bar-element\">\n                        <button\n                            fd-button\n                            glyph=\"multiselect-all\"\n                            [fdType]=\"allItemsSelected ? 'emphasized' : 'transparent'\"\n                            (click)=\"selectAll(allItemsSelected)\"\n                        ></button>\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 { NgModule } from '@angular/core';\nimport { MultiInputMobileComponent } from './multi-input-mobile.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [MultiInputMobileComponent],\n    exports: [MultiInputMobileComponent]\n})\nexport class MultiInputMobileModule {}\n","import { EventEmitter } from '@angular/core';\n\nexport class PairSelectionModel<KeyType, ValueType> {\n    /** @hidden */\n    _selected = new Map<KeyType, ValueType>();\n    /** Event emitted when the selection has changed. */\n    selectionChanged = new EventEmitter<[KeyType, ValueType][]>();\n\n    /** Array of selected items */\n    get selected(): ValueType[] {\n        return [...this._selected.values()];\n    }\n\n    /** Whether the given key exists in the record */\n    isSelected(key: KeyType): boolean {\n        return this._selected.has(key);\n    }\n\n    /** Selects the given key-value pair */\n    select(values: [KeyType, ValueType][]): void;\n    /** Selects the given key-value pair */\n    select(key: KeyType, value: ValueType): void;\n    /** Selects the given key-value pair */\n    select(keyOrValues: KeyType | Array<[KeyType, ValueType]>, value?: ValueType): void {\n        if (value) {\n            this._selected.set(keyOrValues as KeyType, value);\n        } else {\n            (keyOrValues as Array<[KeyType, ValueType]>).forEach(([key, v]) => this._selected.set(key, v));\n        }\n        this.selectionChanged.emit([...this._selected]);\n    }\n\n    /** Deselects the given key */\n    deselect(key: KeyType): void {\n        this._selected.delete(key);\n        this.selectionChanged.emit([...this._selected]);\n    }\n\n    /** Clears the selection information */\n    clear(): void {\n        this._selected.clear();\n        this.selectionChanged.emit([...this._selected]);\n    }\n}\n","import { DOWN_ARROW, ENTER, SPACE, TAB, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    computed,\n    effect,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    inject,\n    Injector,\n    Input,\n    isDevMode,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    SimpleChanges,\n    TemplateRef,\n    ViewChild,\n    ViewContainerRef,\n    ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { BehaviorSubject, combineLatest, Observable, Subscription } from 'rxjs';\nimport { distinctUntilChanged, first, map, startWith } from 'rxjs/operators';\n\nimport {\n    applyCssClass,\n    AutoCompleteDirective,\n    CssClassBuilder,\n    DynamicComponentService,\n    FocusEscapeDirection,\n    FocusTrapService,\n    KeyUtil,\n    NestedKeyOf,\n    Nullable,\n    ObjectPathType,\n    RangeSelector,\n    RtlService,\n    SearchHighlightPipe,\n    TruncatedTitleDirective,\n    uuidv4\n} from '@fundamental-ngx/cdk/utils';\nimport { FormControlComponent, FormItemControl, registerFormItemControl } from '@fundamental-ngx/core/form';\nimport { ListComponent, ListItemComponent, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { MenuKeyboardService } from '@fundamental-ngx/core/menu';\nimport { MobileModeConfig } from '@fundamental-ngx/core/mobile-mode';\nimport { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { PopoverFillMode } from '@fundamental-ngx/core/shared';\nimport { TokenComponent, TokenizerComponent } from '@fundamental-ngx/core/token';\n\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { FormStates } from '@fundamental-ngx/cdk/forms';\nimport { get } from '@fundamental-ngx/cdk/utils';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FD_DEFAULT_ICON_FONT_FAMILY, IconFont } from '@fundamental-ngx/core/icon';\nimport { InputGroupComponent, InputGroupInputDirective } from '@fundamental-ngx/core/input-group';\nimport { LinkComponent } from '@fundamental-ngx/core/link';\nimport { MultiAnnouncerDirective } from '@fundamental-ngx/core/multi-combobox';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { MultiInputMobileComponent } from './multi-input-mobile/multi-input-mobile.component';\nimport { MULTI_INPUT_COMPONENT, MultiInputInterface } from './multi-input.interface';\nimport { PairSelectionModel } from './pair-selection.model';\n\nfunction isOptionItem<ItemType = any, ValueType = any>(\n    candidate: unknown\n): candidate is _OptionItem<ItemType, ValueType> {\n    return isOptionItemBase<ValueType>(candidate) && 'item' in candidate && 'id' in candidate;\n}\n\nfunction isOptionItemBase<ValueType = any>(candidate: unknown): candidate is OptionItemBase<ValueType> {\n    return typeof candidate === 'object' && candidate !== null && 'value' in candidate && 'label' in candidate;\n}\n\n/**\n * Input field with multiple selection enabled. Should be used when a user can select between a\n * limited number of pre-defined options with a filter-enabled context.\n *\n * Supports Angular Forms.\n */\n@Component({\n    selector: 'fd-multi-input',\n    templateUrl: './multi-input.component.html',\n    styleUrl: './multi-input.component.scss',\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => MultiInputComponent),\n            multi: true\n        },\n        MenuKeyboardService,\n        registerFormItemControl(MultiInputComponent),\n        contentDensityObserverProviders()\n    ],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    standalone: true,\n    host: {\n        '(focusout)': '_focusOut($event)'\n    },\n    imports: [\n        NgTemplateOutlet,\n        PopoverComponent,\n        PopoverControlComponent,\n        FormsModule,\n        PopoverBodyComponent,\n        InputGroupComponent,\n        InputGroupInputDirective,\n        TokenComponent,\n        TokenizerComponent,\n        FormControlComponent,\n        AutoCompleteDirective,\n        ReactiveFormsModule,\n        ListComponent,\n        ListItemComponent,\n        ListTitleDirective,\n        CheckboxComponent,\n        LinkComponent,\n        AsyncPipe,\n        SearchHighlightPipe,\n        FdTranslatePipe,\n        MultiAnnouncerDirective,\n        TruncatedTitleDirective\n    ]\n})\nexport class MultiInputComponent<ItemType = any, ValueType = any>\n    implements\n        MultiInputInterface,\n        ControlValueAccessor,\n        CssClassBuilder,\n        OnInit,\n        OnChanges,\n        AfterViewInit,\n        OnDestroy,\n        FormItemControl\n{\n    /** Placeholder for the input field. */\n    @Input()\n    placeholder = '';\n\n    /** Whether the input is disabled. */\n    @Input()\n    disabled = false;\n\n    /** If it is mandatory field */\n    @Input()\n    required = false;\n\n    /** Whether to use cozy visuals but compact collapsing behavior. */\n    @Input()\n    compactCollapse = true;\n\n    /** Max height of the popover. Any overflowing elements will be accessible through scrolling. */\n    @Input()\n    maxHeight = '300px';\n\n    /** Icon of the button on the right of the input field. */\n    @Input()\n    glyph = 'value-help';\n\n    /** Glyph font family */\n    @Input()\n    glyphFont: IconFont = FD_DEFAULT_ICON_FONT_FAMILY;\n\n    /** Values to be displayed in the unfiltered dropdown. */\n    @Input()\n    dropdownValues: Array<ItemType | _OptionItem<ItemType, ValueType>> = [];\n\n    /** Whether to open the dropdown when the addon button is clicked. */\n    @Input()\n    openDropdownOnAddOnClicked = true;\n\n    /** Title text for the add-on icon button. */\n    @Input()\n    addonIconTitle: string;\n\n    /** Search term, or more specifically the value of the inner input field. */\n    @Input()\n    set searchTerm(value: string) {\n        this._searchTermCtrl.setValue(value);\n    }\n    get searchTerm(): string {\n        return this._searchTermCtrl.value ?? '';\n    }\n\n    /** Id attribute for input element inside MultiInput component */\n    @Input()\n    inputId = '';\n\n    /** Whether the search term should be highlighted in results. */\n    @Input()\n    highlight = true;\n\n    /** Selected dropdown items. */\n    @Input()\n    set selected(values: ValueType[]) {\n        this._selectionModel.clear();\n        if (values) {\n            const potentialItems = [...values];\n            const options: _OptionItem<ItemType, ValueType>[] = [];\n            potentialItems.forEach((value) => {\n                let optionItem = this._optionItems.find((i) => i.value === value);\n                if (!optionItem) {\n                    optionItem = this._getOptionItem(value as unknown as ItemType);\n                }\n                options.push(optionItem);\n            });\n            this._selectionModel.select(options.map((item) => [item.id, item]));\n        }\n    }\n\n    get selected(): ValueType[] {\n        return this._selectionModel.selected.map((c) => c.value);\n    }\n\n    /** user's custom classes */\n    @Input()\n    class: string;\n\n    /**\n     * Filter function. Accepts an array and a string as arguments, and outputs an array.\n     * An arrow function can be used to access the *this* keyword in the calling component.\n     * See multi input examples for details.\n     */\n    @Input()\n    filterFn: (contentArray: this['dropdownValues'], searchTerm: string) => this['dropdownValues'] =\n        this._defaultFilter;\n\n    /**\n     * Value function. Accepts an object of the same type as the\n     * items passed to dropdownValues as argument, and outputs any property, that should be used as value.\n     * An arrow function can be used to access the *this* keyword in the calling component.\n     * See multi input examples for details.\n     */\n    @Input()\n    valueFn: (item: ItemType) => ValueType = this._defaultValueFn;\n\n    /**\n     * Display function. Accepts an object of the same type as the\n     * items passed to dropdownValues as argument, and outputs a string.\n     * An arrow function can be used to access the *this* keyword in the calling component.\n     * See multi input examples for details.\n     */\n    @Input()\n    displayFn: (item: ItemType) => string = this._defaultDisplay as unknown as (item: ItemType) => string;\n\n    /**\n     * Parse function. Used for submitting new tokens. Accepts a string by default.\n     * An arrow function can be used to access the *this* keyword in the calling component.\n     * See multi input examples for details.\n     */\n    @Input()\n    newTokenParseFn: (searchTerm: string) => any = this._defaultParse;\n\n    /**\n     * Identifier function or path to an identifier property.\n     */\n    @Input()\n    optionItemIdentifier: OptionItemIdentifierInput<ItemType>;\n\n    /**\n     * Validate function. Used to check if new token can be added into list.\n     * Works only, when `allowNewTokens` option is enabled.\n     */\n    @Input()\n    newTokenValidateFn = this._defaultTokenValidate;\n\n    /** aria-label attribute binding. */\n    @Input()\n    ariaLabel: Nullable<string>;\n\n    /** aria-labelledby attribute binding. */\n    @Input()\n    ariaLabelledBy: Nullable<string>;\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    @Input()\n    fillControlMode: PopoverFillMode = 'at-least';\n\n    /**\n     *  The state of the form control - applies css classes.\n     *  Can be `success`, `error`, `warning`, `information` or blank for default.\n     */\n    @Input()\n    state?: FormStates;\n\n    /**\n     * Whether AddOn Button should be focusable\n     * @default true\n     */\n    @Input()\n    buttonFocusable = true;\n\n    /** Whether the multi-input allows the creation of new tokens. */\n    @Input()\n    allowNewTokens = false;\n\n    /** Whether the multi-input should be built on mobile mode */\n    @Input()\n    mobile = false;\n\n    /** Whether the multi-input should have show all button. */\n    @Input()\n    showAllButton = true;\n\n    /**\n     * Max width of multi input 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    @Input()\n    bodyMaxWidth: 'none' | 'container' | number = 'none';\n\n    /** @hidden */\n    get _popoverMaxWidth(): number | null {\n        if (this.bodyMaxWidth === 'none') {\n            return null;\n        }\n\n        if (typeof this.bodyMaxWidth === 'number') {\n            return this.bodyMaxWidth;\n        }\n\n        return this.elementRef.nativeElement.getBoundingClientRect().width;\n    }\n\n    /** Multi Input Mobile Configuration, it's applied only, when mobile is enabled */\n    @Input()\n    mobileConfig: MobileModeConfig = { hasCloseButton: true, approveButtonText: 'Select' };\n\n    /**\n     * Whether to return results where the input matches the entire string. By default, only results that start\n     * with the input search term will be returned.\n     */\n    @Input()\n    includes = false;\n\n    /**\n     * The template with which to display the individual listed items.\n     * Use it by passing an ng-template with implicit content. See examples for more info.\n     */\n    @Input()\n    itemTemplate: TemplateRef<any>;\n\n    /**\n     * The tooltip for the multi-input icon.\n     */\n    @Input()\n    title: string;\n\n    /** Whether list item options should be rendered as byline. */\n    @Input()\n    byline = false;\n\n    /** Whether the autocomplete should be enabled; Enabled by default */\n    @Input()\n    autoComplete = true;\n\n    /** Event emitted when the search term changes. Use *$event* to access the new term. */\n    @Output()\n    readonly searchTermChange: EventEmitter<string> = new EventEmitter<string>();\n\n    /** Event emitted when the selected items change. Use *$event* to access the new selected array. */\n    @Output()\n    readonly selectedChange: EventEmitter<ValueType[]> = new EventEmitter<ValueType[]>();\n\n    /** Whether multi input popover body should be opened */\n    @Input()\n    open = false;\n\n    /** Whether to display the addon button. */\n    @Input()\n    displayAddonButton = true;\n\n    /** Aria-label for the addon button. */\n    @Input()\n    addOnButtonAriaLabel: Nullable<string>;\n\n    /** Event emitted, when the multi input's popover body is opened or closed */\n    @Output()\n    readonly openChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n    /** Emits event when the addon button is clicked. */\n    @Output()\n    readonly addOnButtonClicked: EventEmitter<Event> = new EventEmitter<Event>();\n\n    /** Event emitted, when the multi input's all item checked or not */\n    @Output()\n    readonly allItemsSelectedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n    /** @hidden */\n    @ViewChild(PopoverComponent)\n    popoverRef: PopoverComponent;\n\n    /** @hidden */\n    @ViewChild('control', { read: TemplateRef })\n    controlTemplate: TemplateRef<{ displayAddonButton: boolean }>;\n\n    /** @hidden */\n    @ViewChild('list', { read: TemplateRef })\n    listTemplate: TemplateRef<any>;\n\n    /** @hidden */\n    @ViewChild(ListComponent)\n    listComponent: ListComponent;\n\n    /** @hidden */\n    @ViewChild('searchInputElement', { read: ElementRef })\n    searchInputElement: ElementRef<HTMLInputElement>;\n\n    /** @hidden */\n    @ViewChild(TokenizerComponent)\n    tokenizer: TokenizerComponent;\n\n    /** @hidden */\n    get _optionItems(): _OptionItem<ItemType, ValueType>[] {\n        return this.optionItems$.value;\n    }\n    /** @hidden */\n    readonly optionItems$ = new BehaviorSubject<_OptionItem<ItemType, ValueType>[]>([]);\n\n    /** @hidden */\n    readonly _onlySelected$ = new BehaviorSubject<boolean>(false);\n\n    /** @hidden */\n    readonly _searchTermCtrl = new FormControl('');\n\n    /** @hidden */\n    readonly _selectionModel = new PairSelectionModel<OptionItemIdentifier, OptionItem<ItemType, ValueType>>();\n\n    /** @hidden */\n    readonly _viewModel$: Observable<ViewModel<ItemType, ValueType>> = this._getViewModel();\n\n    /** typeahead matcher function */\n    get typeAheadMatcher(): (item: string, searchTerm: string) => boolean {\n        if (this.includes) {\n            return (item: string, searchTerm: string) => item.includes(searchTerm);\n        }\n        return (item: string, searchTerm: string) => item.startsWith(searchTerm);\n    }\n\n    /** @hidden */\n    readonly _contentDensityObserver = inject(ContentDensityObserver);\n\n    /** @hidden */\n    readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    /** @hidden */\n    private readonly _dir = computed(() => (this._rtlService?.rtl() ? 'rtl' : 'ltr'));\n\n    /** @hidden */\n    private _subscriptions = new Subscription();\n\n    /** @hidden */\n    private readonly _rangeSelector = new RangeSelector();\n\n    /** @hidden */\n    private readonly _changeDetRef = inject(ChangeDetectorRef);\n\n    /** @hidden */\n    private readonly _dynamicComponentService = inject(DynamicComponentService);\n\n    /** @hidden */\n    private readonly _injector = inject(Injector);\n\n    /** @hidden */\n    private readonly _viewContainerRef = inject(ViewContainerRef);\n\n    /** @hidden */\n    private readonly _rtlService = inject(RtlService, { optional: true });\n\n    /** @hidden */\n    private readonly _focusTrapService = inject(FocusTrapService, { optional: true });\n\n    /** @hidden */\n    constructor() {\n        // React to RTL changes - rebuild CSS class when direction changes\n        effect(() => {\n            const dir = this._dir();\n            if (dir) {\n                this.buildComponentCssClass();\n            }\n        });\n    }\n\n    /** @hidden CssClassBuilder interface implementation\n     * function must return single string\n     * function is responsible for order which css classes are applied\n     */\n    @applyCssClass\n    buildComponentCssClass(): string[] {\n        // TODO: this icon flip may be addressed in styles in the future\n        if (this.glyph === 'value-help' && this._dir() === 'rtl') {\n            const icon = this.elementRef.nativeElement.querySelector('.sap-icon--value-help') as HTMLElement;\n            if (icon) {\n                icon.style.transform = 'scaleX(-1)';\n            }\n        }\n\n        return ['fd-multi-input', 'fd-multi-input-custom', this.class];\n    }\n\n    /** @hidden */\n    onChange: (value: any) => void = () => {};\n\n    /** @hidden */\n    onTouched = (): void => {};\n\n    /** @hidden */\n    ngOnInit(): void {\n        this.buildComponentCssClass();\n\n        if (!this.inputId) {\n            this.inputId = uuidv4();\n        }\n\n        this._subscriptions.add(\n            this._searchTermCtrl.valueChanges.pipe(distinctUntilChanged()).subscribe((searchTerm) => {\n                this.searchTermChange.emit(searchTerm ?? '');\n                // resetting existing selection state, if any\n                this._rangeSelector.reset();\n            })\n        );\n        this._subscriptions.add(\n            this._getViewModel()\n                .pipe(map((viewModel) => !viewModel.displayedOptions.some((c) => !c.isSelected)))\n                .subscribe((allItemsSelected) => this.allItemsSelectedChange.emit(allItemsSelected))\n        );\n    }\n\n    /** @hidden */\n    ngOnChanges(changes: SimpleChanges): void {\n        this.buildComponentCssClass();\n\n        if (changes.dropdownValues || changes.searchTerm || changes.valueFn || changes.displayFn) {\n            const optionItems = (this.dropdownValues ?? []).map((item) => this._getOptionItem(item));\n            this.optionItems$.next(optionItems);\n            this._changeDetRef.markForCheck();\n        }\n\n        if (changes.disabled) {\n            this.disabled ? this._searchTermCtrl.disable() : this._searchTermCtrl.enable();\n        }\n    }\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        if (this.mobile) {\n            this._setUpMobileMode();\n        }\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._subscriptions.unsubscribe();\n    }\n\n    /** @hidden */\n    registerOnChange(fn: (selected: any[]) => void): void {\n        this.onChange = fn;\n    }\n\n    /** @hidden */\n    registerOnTouched(fn: () => void): void {\n        this.onTouched = fn;\n    }\n\n    /** @hidden */\n    setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n        if (isDisabled) {\n            this.elementRef.nativeElement.style.pointerEvents = 'none';\n            this.elementRef.nativeElement.tabIndex = -1; // prevent focus\n        } else {\n            this.elementRef.nativeElement.style.pointerEvents = 'auto';\n            this.elementRef.nativeElement.tabIndex = 0; // allow focus\n        }\n\n        this._changeDetRef.detectChanges();\n    }\n\n    /** @hidden */\n    writeValue(selected: ValueType[]): void {\n        this.selected = selected;\n\n        this._changeDetRef.markForCheck();\n    }\n\n    /** Method passed to list component */\n    handleListFocusEscape(direction: FocusEscapeDirection): void {\n        if (direction === 'up' && !this.mobile) {\n            this.searchInputElement.nativeElement.focus();\n        }\n    }\n\n    /** @hidden */\n    openChangeHandle(open: boolean): void {\n        if (this.disabled) {\n            return;\n        }\n\n        if (this.open !== open) {\n            this.openChange.emit(open);\n        }\n\n        this.open = open;\n\n        if (!this.mobile) {\n            this._popoverOpenHandle(open);\n        }\n\n        if (!this.open) {\n            this._resetSearchTerm();\n            this.enableParentFocusTrap();\n            this._onlySelected$.next(false);\n        } else {\n            this.disableParentFocusTrap();\n\n            this.searchInputElement?.nativeElement.focus();\n        }\n\n        this.tokenizer.tokenizerInnerEl.nativeElement.scrollLeft =\n            this.tokenizer.tokenizerInnerEl.nativeElement.scrollWidth;\n\n        this._changeDetRef.detectChanges();\n    }\n\n    /** Method that selects all possible options. */\n    selectAllItems(selectAll: boolean): void {\n        if (selectAll) {\n            this.selected = this._optionItems.map((c) => c.value);\n            this._resetSearchTerm();\n        } else {\n            this.selected = [];\n        }\n        // On Mobile mode changes are propagated only on approve.\n        this._propagateChange();\n    }\n\n    /** @hidden */\n    _onCheckboxKeyup(\n        option: _OptionItem<ItemType, ValueType>,\n        event: KeyboardEvent,\n        index: number,\n        isListItem = false\n    ): void {\n        if (KeyUtil.isKeyCode(event, [SPACE, ENTER])) {\n            this._onCheckboxClick(option, event, index, isListItem);\n        }\n    }\n\n    /** @hidden */\n    async _onCheckboxClick(\n        option: _OptionItem<ItemType, ValueType>,\n        event: MouseEvent | KeyboardEvent,\n        index: number,\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        _isListItem = false\n    ): Promise<void> {\n        const toggledSelection = !this._selectionModel.isSelected(option.id);\n        this._rangeSelector.onRangeElementToggled(index, event);\n        const sub = this._viewModel$.pipe(first()).subscribe((vm) => {\n            this._rangeSelector.applyValueToEachInRange((idx) =>\n                this._handleSelect(toggledSelection, vm.displayedOptions[idx], false)\n            );\n            this._changeDetRef.detectChanges();\n        });\n        this._subscriptions.add(sub);\n        // stop propagation on the checkbox so event doesn't reach the list item\n        event.stopPropagation();\n    }\n\n    /** @hidden */\n    _onTokenCloseClick(option: _OptionItem<ItemType, ValueType>, resetSearch: boolean, event?: MouseEvent): void {\n        event?.preventDefault(); // prevent this function from being called twice when checkbox updates\n        this._handleSelect(false, option, resetSearch, true);\n    }\n\n    /** @hidden */\n    _tokenElementClicked(event: MouseEvent): void {\n        const textElement = (event.currentTarget as HTMLElement).querySelector('.fd-token__text') as HTMLElement;\n        if (textElement && textElement.offsetWidth < textElement.scrollWidth && this.open === false) {\n            this.openChangeHandle(true);\n        }\n    }\n\n    /** @hidden */\n    _handleSelect(\n        checked: any,\n        option: _OptionItem<ItemType, ValueType>,\n        resetSearch = true,\n        fromTokenCloseClick = false\n    ): void {\n        const previousLength = this._selectionModel.selected.length;\n        option = this._getOptionItem(option);\n        if (checked) {\n            this._selectionModel.select(option.id, option);\n        } else {\n            this._selectionModel.deselect(option.id);\n        }\n\n        // Handle popover placement update\n        if (this._shouldPopoverBeUpdated(previousLength, this._selectionModel.selected.length)) {\n            this.popoverRef.refreshPosition();\n        }\n        if (resetSearch) {\n            this._resetSearchTerm();\n            this.searchInputElement.nativeElement.focus();\n        }\n\n        if (this._selectionModel.selected.length === 0) {\n            this.searchInputElement.nativeElement.focus();\n            this._changeDetRef.detectChanges();\n        }\n\n        // On Mobile mode changes are propagated only on approve.\n        this._propagateChange(fromTokenCloseClick);\n    }\n\n    /** @hidden */\n    _handleInputKeydown(event: KeyboardEvent): void {\n        if (KeyUtil.isKeyCode(event, DOWN_ARROW) && !this.mobile) {\n            if (event.altKey) {\n                this.openChangeHandle(true);\n            }\n\n            if (this.listComponent) {\n                this.listComponent.setItemActive(0);\n                event.preventDefault();\n            }\n        } else if (KeyUtil.isKeyCode(event, [DOWN_ARROW, UP_ARROW, ENTER])) {\n            this.openChangeHandle(true);\n        } else if (KeyUtil.isKeyCode(event, TAB) && this.open) {\n            this._close();\n        } else if (KeyUtil.isKeyType(event, 'alphabetical') || KeyUtil.isKeyType(event, 'numeric')) {\n            if (!this.open) {\n                this.openChangeHandle(true);\n                this.searchInputElement.nativeElement.focus();\n            }\n        }\n    }\n\n    /** @hidden */\n    _showAllClicked(event: Event): void {\n        event.preventDefault();\n        event.stopPropagation();\n        this._searchTermCtrl.setValue('');\n        this.searchInputElement.nativeElement.focus();\n    }\n\n    /** @hidden */\n    _showAllKeyDown(event: KeyboardEvent): void {\n        if (KeyUtil.isKeyCode(event, [SPACE, ENTER])) {\n            this._showAllClicked(event);\n        }\n    }\n\n    /** @hidden */\n    _onSubmit(): void {\n        const searchTerm = this.searchTerm;\n        if (searchTerm === '') {\n            return;\n        }\n        const isExist = this._selectFirstFiltered(searchTerm);\n        if (!isExist && this.allowNewTokens && this.newTokenValidateFn(this._searchTermCtrl.value ?? '')) {\n            const newToken = this.newTokenParseFn(this._searchTermCtrl.value ?? '');\n            const newOption = this._addNewTokenToDropDownValues(newToken);\n            this._handleSelect(true, newOption);\n            this._searchTermCtrl.setValue('');\n            this.open = false;\n        }\n    }\n\n    /** @hidden */\n    _handleComplete({ term }): void {\n        this.searchTerm = term;\n    }\n\n    /**\n     * Handle dialog dismissing, closes popover and sets backup data.\n     */\n    dialogDismiss(selectedBackup: any[]): void {\n        this.openChangeHandle(false);\n        this._resetSearchTerm();\n        this.selected = selectedBackup;\n    }\n\n    /**\n     * Handle dialog approval, closes popover and propagates data changes.\n     */\n    dialogApprove(): void {\n        this._propagateChange(true);\n        this.openChangeHandle(false);\n        this._resetSearchTerm();\n    }\n\n    /** @hidden */\n    _moreClicked(): void {\n        this._onlySelected$.next(true);\n        this.openChangeHandle(true);\n    }\n\n    /** @hidden */\n    _addOnButtonClicked(event: Event): void {\n        this.addOnButtonClicked.emit(event);\n        if (this.openDropdownOnAddOnClicked) {\n            this.openChangeHandle(!this.open);\n        } else if (this.open) {\n            this.openChangeHandle(false);\n        }\n    }\n\n    /** @hidden */\n    disableParentFocusTrap(): void {\n        this._focusTrapService?.pauseCurrentFocusTrap();\n    }\n\n    /** @hidden */\n    enableParentFocusTrap(): void {\n        this._focusTrapService?.unpauseCurrentFocusTrap();\n    }\n\n    /** @hidden */\n    _close(): void {\n        this.searchInputElement.nativeElement.focus();\n        this.openChangeHandle(false);\n    }\n\n    /** @hidden */\n    protected _focusOut(event: FocusEvent): void {\n        if (!this.elementRef.nativeElement.contains(event.relatedTarget as Node)) {\n            this.onTouched();\n        }\n    }\n\n    /** @hidden */\n    private _addNewTokenToDropDownValues(newToken: any): OptionItem {\n        this.dropdownValues.push(newToken);\n        const newOption = this._getOptionItem(newToken);\n        this.optionItems$.next([...this._optionItems, newOption]);\n        return newOption;\n    }\n\n    /** @hidden */\n    private _selectFirstFiltered(searchTerm: string): boolean {\n        const filtered = this.filterFn(this.dropdownValues, searchTerm);\n        if (Array.isArray(filtered) && filtered.length > 0 && this.autoComplete) {\n            const optionItem = this._getOptionItem(filtered[0]);\n            this._handleSelect(true, optionItem);\n            this._searchTermCtrl.setValue('');\n            this.open = false;\n            return true;\n        }\n        return false;\n    }\n\n    /** @hidden */\n    private _defaultFilter(contentArray: this['dropdownValues'], searchTerm: string = ''): this['dropdownValues'] {\n        const trimmedSearchTerm = searchTerm.trim().toLocaleLowerCase();\n        return contentArray.filter((item) => {\n            if (item) {\n                const displayedValue = isOptionItem(item) ? item.label : this.displayFn(item);\n                const term = displayedValue?.toLocaleLowerCase() || '';\n                return this.typeAheadMatcher(term, trimmedSearchTerm);\n            }\n        });\n    }\n\n    /** @hidden */\n    private _defaultValueFn(value: ItemType | ValueType): ValueType {\n        return value as ValueType;\n    }\n\n    /** @hidden */\n    private _defaultDisplay(str: ItemType): string | undefined {\n        if (typeof str === 'string') {\n            return str;\n        }\n        if (isOptionItemBase(str)) {\n            return str.label;\n        }\n    }\n\n    /** @hidden */\n    private _defaultParse(str: string): string {\n        return str;\n    }\n\n    /** @hidden */\n    private _defaultTokenValidate(str: string): boolean {\n        return !!str;\n    }\n\n    /** @hidden */\n    private _popoverOpenHandle(open: boolean): void {\n        this.open = open;\n    }\n\n    /** @hidden */\n    private _propagateChange(emitInMobile?: boolean): void {\n        if (!this.mobile || emitInMobile) {\n            const selected = this._selectionModel.selected.map((c) => c.value);\n            this.onChange(selected);\n            this.selectedChange.emit(selected);\n        }\n    }\n\n    /** @hidden */\n    private _shouldPopoverBeUpdated(previousLength: number, currentLength: number): boolean {\n        return (\n            !!this.popoverRef &&\n            ((previousLength === 0 && currentLength === 1) || (previousLength === 1 && currentLength === 0))\n        );\n    }\n\n    /** @hidden */\n    private async _setUpMobileMode(): Promise<void> {\n        const injector = Injector.create({\n            providers: [{ provide: MULTI_INPUT_COMPONENT, useValue: this }],\n            parent: this._injector\n        });\n\n        this._dynamicComponentService.createDynamicComponent(\n            {\n                listTemplate: this.listTemplate,\n                controlTemplate: this.controlTemplate\n            },\n            MultiInputMobileComponent,\n            {\n                containerRef: this._viewContainerRef\n            },\n            { injector }\n        );\n    }\n\n    /** @hidden */\n    private _getItemIdentifier(item: ItemType): OptionItemIdentifier {\n        if (!this.optionItemIdentifier) {\n            const value = this.valueFn(item);\n            if (typeof value !== 'string' && typeof value !== 'number' && typeof value !== 'symbol' && isDevMode()) {\n                console.warn(\n                    'optionItemIdentifier is not set and valueFn does not return a string, number or symbol',\n                    item\n                );\n            }\n            return value as OptionItemIdentifier;\n        }\n        if (typeof this.optionItemIdentifier === 'function') {\n            return this.optionItemIdentifier(item);\n        }\n        return get(item, this.optionItemIdentifier) as OptionItemIdentifier;\n    }\n\n    /** @hidden */\n    private _resetSearchTerm(): void {\n        this._searchTermCtrl.setValue('');\n        this._changeDetRef.detectChanges();\n    }\n\n    /** @hidden */\n    private _getOptionItem(item: ItemType | _OptionItem<ItemType, ValueType>): _OptionItem<ItemType, ValueType> {\n        if (isOptionItem<ItemType, ValueType>(item)) {\n            return item;\n        }\n        const { label, value } = this._getValueAndLabelOfItem(item);\n        return {\n            id: this._getItemIdentifier(item),\n            item,\n            label,\n            value,\n            isSelected: false\n        };\n    }\n\n    /** @hidden */\n    private _getValueAndLabelOfItem(item: ItemType): OptionItemBase<ValueType> {\n        const defaultDisplay = typeof item === 'object' && item !== null ? item[Object.keys(item)[0]] : item;\n        let value = this.valueFn(item) ?? defaultDisplay;\n        let label = this.displayFn(item) ?? defaultDisplay;\n        if (isOptionItemBase(item)) {\n            if (this.valueFn === this._defaultValueFn) {\n                value = item.value;\n            }\n            if (this.displayFn === this._defaultDisplay) {\n                label = item.label;\n            }\n        }\n        return { label, value };\n    }\n\n    /** @hidden */\n    private _getViewModel(): Observable<ViewModel<ItemType, ValueType>> {\n        return combineLatest([\n            this._searchTermCtrl.valueChanges.pipe(startWith(this._searchTermCtrl.value)),\n            this._selectionModel.selectionChanged.pipe(startWith(null)),\n            this._onlySelected$,\n            this.optionItems$\n        ]).pipe(\n            map(() => {\n                // not using \"searchTerm\" value from combineLatest as it will be wrong for late subscribers, if any\n                const searchTerm = this._searchTermCtrl.value ?? '';\n                const filtered = this.filterFn(this.dropdownValues, searchTerm);\n                const onlySelected = this._onlySelected$.value;\n                let displayedOptions = (Array.isArray(filtered) ? filtered : []).map((item) =>\n                    this._getOptionItem(item)\n                );\n\n                displayedOptions.forEach((c) => (c.isSelected = this._selectionModel.isSelected(c.id)));\n\n                if (onlySelected) {\n                    displayedOptions = displayedOptions.filter((item) => item.isSelected);\n                }\n\n                return { selectedOptions: this._selectionModel.selected, displayedOptions };\n            })\n        );\n    }\n}\n\ninterface _OptionItem<ItemType = any, ValueType = any> extends OptionItemBase<ValueType> {\n    id: OptionItemIdentifier;\n    item: ItemType;\n    isSelected?: boolean;\n}\n\nexport type OptionItemWithItemIdentifierValues<\n    ItemType extends object,\n    AllTheKeys extends (string | keyof ItemType)[] = NestedKeyOf<ItemType>[]\n> = {\n    [Key in AllTheKeys[number]]: ObjectPathType<ItemType, Key> extends OptionItemIdentifier ? Key : never;\n}[AllTheKeys[number]];\n\nexport type AcceptableKeysOf<ItemType = any> = ItemType extends object\n    ? OptionItemWithItemIdentifierValues<ItemType>\n    : never;\n\nexport type OptionItemIdentifierInput<ItemType = any> =\n    | ((item: ItemType) => OptionItemIdentifier)\n    | AcceptableKeysOf<ItemType>;\n\nexport type OptionItemIdentifier = string | number | symbol;\n\nexport type OptionItem<ItemType = any, ValueType = any> = Omit<_OptionItem<ItemType, ValueType>, 'isSelected'>;\n\nexport interface OptionItemBase<ValueType = any> {\n    label: string;\n    value: ValueType;\n}\n\ninterface ViewModel<ItemType = any, ValueType = any> {\n    selectedOptions: _OptionItem<ItemType, ValueType>[];\n    displayedOptions: _OptionItem<ItemType, ValueType>[];\n}\n","@if (_viewModel$ | async; as viewModel) {\n    <div class=\"fd-multi-input fd-multi-input-custom\">\n        <div class=\"fd-multi-input-field\">\n            @if (mobile) {\n                <ng-template\n                    [ngTemplateOutlet]=\"control\"\n                    [ngTemplateOutletContext]=\"{ displayAddonButton: displayAddonButton }\"\n                ></ng-template>\n            } @else {\n                <fd-popover\n                    additionalBodyClass=\"fd-popover-custom-list\"\n                    [isOpen]=\"open\"\n                    (isOpenChange)=\"openChangeHandle($event)\"\n                    (input)=\"!open && openChangeHandle(true)\"\n                    [triggers]=\"[]\"\n                    [maxWidth]=\"_popoverMaxWidth\"\n                    [disabled]=\"disabled\"\n                    [fillControlMode]=\"fillControlMode\"\n                    class=\"fd-multi-input-popover-custom\"\n                    [focusTrapped]=\"true\"\n                    [focusAutoCapture]=\"false\"\n                >\n                    <fd-popover-control>\n                        <form (submit)=\"_onSubmit()\">\n                            <ng-template\n                                [ngTemplateOutlet]=\"control\"\n                                [ngTemplateOutletContext]=\"{ displayAddonButton: displayAddonButton }\"\n                            ></ng-template>\n                        </form>\n                    </fd-popover-control>\n                    <fd-popover-body\n                        [attr.aria-hidden]=\"!open\"\n                        [class.fd-popover__body--hidden]=\"!viewModel.displayedOptions.length\"\n                    >\n                        <ng-template [ngTemplateOutlet]=\"list\"></ng-template>\n                        <ng-content></ng-content>\n                    </fd-popover-body>\n                </fd-popover>\n            }\n        </div>\n    </div>\n    <ng-template #control let-showAddonButton=\"displayAddonButton\">\n        <fd-input-group\n            class=\"fd-multi-input-input-group-custom\"\n            [state]=\"state\"\n            [buttonFocusable]=\"buttonFocusable\"\n            [button]=\"showAddonButton\"\n            [disabled]=\"disabled\"\n            [isExpanded]=\"open && !mobile && viewModel.displayedOptions.length > 0\"\n            [isControl]=\"true\"\n            [glyph]=\"showAddonButton ? glyph : ''\"\n            [glyphFont]=\"glyphFont\"\n            (addOnButtonClicked)=\"_addOnButtonClicked($event)\"\n            [glyphAriaLabel]=\"addOnButtonAriaLabel\"\n            [iconTitle]=\"addonIconTitle\"\n        >\n            <fd-tokenizer\n                #tokenizer\n                [compactCollapse]=\"compactCollapse\"\n                [showOverflowPopover]=\"false\"\n                [open]=\"open\"\n                [tokenizerFocusable]=\"false\"\n                (moreClickedEvent)=\"_moreClicked()\"\n                class=\"fd-multi-input-tokenizer-custom\"\n                tabindex=\"-1\"\n                fdMultiAnnouncer\n                [multiAnnouncerOptions]=\"filterFn(dropdownValues, searchTerm)\"\n            >\n                @for (option of viewModel.selectedOptions; track valueFn(option.item)) {\n                    <fd-token\n                        [disabled]=\"disabled\"\n                        (onCloseClick)=\"_onTokenCloseClick(option, false, $event)\"\n                        (onRemove)=\"_onTokenCloseClick(option, false)\"\n                        [title]=\"option.label\"\n                        (onTokenClick)=\"_tokenElementClicked($event)\"\n                    >\n                        <span [innerHtml]=\"option.label\"></span>\n                    </fd-token>\n                }\n                <input\n                    type=\"text\"\n                    class=\"fd-input fd-tokenizer__input fd-multi-input-tokenizer-input\"\n                    autocomplete=\"off\"\n                    fd-form-control\n                    fd-input-group-input\n                    fdkAutoComplete\n                    (onComplete)=\"_handleComplete($event)\"\n                    #searchInputElement\n                    [displayFn]=\"displayFn\"\n                    [matcher]=\"typeAheadMatcher\"\n                    [inputText]=\"_searchTermCtrl.value || ''\"\n                    [options]=\"dropdownValues\"\n                    [enable]=\"!includes && autoComplete && !mobile\"\n                    [attr.placeholder]=\"viewModel.selectedOptions.length ? null : placeholder\"\n                    [formControl]=\"_searchTermCtrl\"\n                    [attr.aria-required]=\"required\"\n                    [ariaLabel]=\"ariaLabel || ('coreMultiInput.multiInputAriaLabel' | fdTranslate)()\"\n                    [ariaLabelledBy]=\"ariaLabelledBy\"\n                    (keydown)=\"_handleInputKeydown($event)\"\n                    [attr.id]=\"inputId\"\n                    (focus)=\"tokenizer._showAllTokens()\"\n                    (blur)=\"tokenizer._hideTokens()\"\n                    [attr.title]=\"title\"\n                />\n            </fd-tokenizer>\n        </fd-input-group>\n    </ng-template>\n    <ng-template #list>\n        @if (viewModel.displayedOptions.length) {\n            <ul\n                fd-list\n                class=\"fd-multi-input-menu-overflow\"\n                [selection]=\"true\"\n                [mobileMode]=\"mobile\"\n                [style.max-height]=\"!mobile ? maxHeight : 'auto'\"\n                [byline]=\"byline\"\n                (focusEscapeList)=\"handleListFocusEscape($event)\"\n                [style.min-width]=\"'100%'\"\n                (keydown.tab)=\"_close()\"\n                (keydown.escape)=\"_close()\"\n                aria-multiselectable=\"true\"\n            >\n                @for (option of viewModel.displayedOptions; track valueFn(option.item); let idx = $index) {\n                    <li\n                        fd-list-item\n                        [attr.aria-label]=\"option.label\"\n                        (click)=\"_onCheckboxClick(option, $event, idx, true)\"\n                        (keyup)=\"_onCheckboxKeyup(option, $event, idx, true)\"\n                        [selected]=\"!!option.isSelected\"\n                    >\n                        <fd-checkbox (click)=\"_onCheckboxClick(option, $event, idx)\" [value]=\"option.isSelected\">\n                            <!-- TODO -->\n                        </fd-checkbox>\n                        <ng-template\n                            [ngTemplateOutlet]=\"itemSource\"\n                            [ngTemplateOutletContext]=\"{ option: option }\"\n                        ></ng-template>\n                    </li>\n                }\n                @if (\n                    showAllButton &&\n                    (_onlySelected$ | async) !== true &&\n                    viewModel.displayedOptions.length < dropdownValues.length\n                ) {\n                    <li\n                        fd-list-item\n                        class=\"fd-multi-input-show-all\"\n                        (keyDown)=\"_showAllKeyDown($event)\"\n                        (click)=\"_showAllClicked($event)\"\n                    >\n                        <a fd-link role=\"button\" tabindex=\"0\">{{\n                            ('coreMultiInput.showAll' | fdTranslate: { count: dropdownValues.length })()\n                        }}</a>\n                    </li>\n                }\n            </ul>\n        }\n    </ng-template>\n    <ng-template let-option=\"option\" #itemSource>\n        @if (!itemTemplate) {\n            <span\n                fd-list-title\n                fdTruncatedTitle\n                [innerHtml]=\"option.label | highlight: _searchTermCtrl.value || '' : highlight\"\n            ></span>\n        } @else {\n            <ng-template\n                [ngTemplateOutlet]=\"itemTemplate\"\n                [ngTemplateOutletContext]=\"{ $implicit: option.item }\"\n            ></ng-template>\n        }\n    </ng-template>\n}\n","import { NgModule } from '@angular/core';\nimport { ContentDensityModule } from '@fundamental-ngx/core/content-density';\nimport { MultiInputComponent } from './multi-input.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [ContentDensityModule, MultiInputComponent],\n    exports: [MultiInputComponent, ContentDensityModule]\n})\nexport class MultiInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}