{"version":3,"file":"ironsource-fusion-ui-components-dropdown-common-base.mjs","sources":["../../../projects/fusion-ui/components/dropdown/common/base/dropdown-config.ts","../../../projects/fusion-ui/components/dropdown/common/base/dropdown.base.component.ts","../../../projects/fusion-ui/components/dropdown/common/base/ironsource-fusion-ui-components-dropdown-common-base.ts"],"sourcesContent":["export const DROPDOWN_DEBOUNCE_TIME = 500;\nexport const DROPDOWN_OPTIONS_WITHOUT_SCROLL = 8; // if options less then - no use scroll\n","import {\n    ChangeDetectorRef,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Injector,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    Renderer2,\n    TemplateRef,\n    ViewChild\n} from '@angular/core';\nimport {isNullOrUndefined} from '@ironsource/fusion-ui/utils';\nimport {ControlValueAccessor, FormControl} from '@angular/forms';\nimport {BehaviorSubject, Observable, Subject} from 'rxjs';\nimport {UniqueIdService} from '@ironsource/fusion-ui/services/unique-id';\nimport {ClonePipe} from '@ironsource/fusion-ui/pipes/clone';\nimport {debounceTime, distinctUntilChanged, map, switchMapTo, take, takeUntil} from 'rxjs/operators';\nimport {FilterByFieldPipe} from '@ironsource/fusion-ui/pipes/collection';\nimport {detectChangesDecorator} from '@ironsource/fusion-ui/decorators';\nimport {DynamicComponentConfiguration} from '@ironsource/fusion-ui/components/dynamic-components/common/entities';\nimport {SharedEventsService} from '@ironsource/fusion-ui/services/events-handler';\nimport {IconData} from '@ironsource/fusion-ui/components/icon/v1';\nimport {DropdownService} from '@ironsource/fusion-ui/components/dropdown/service';\nimport {DropdownOption} from '@ironsource/fusion-ui/components/dropdown-option/entities';\nimport {DropdownSearchComponent} from '@ironsource/fusion-ui/components/dropdown-search';\nimport {DropdownSelectComponent} from '@ironsource/fusion-ui/components/dropdown-select';\nimport {DropdownSelectConfigurations} from '@ironsource/fusion-ui/components/dropdown-select/entities';\nimport {DROPDOWN_DEBOUNCE_TIME, DROPDOWN_OPTIONS_WITHOUT_SCROLL} from './dropdown-config';\nimport {\n    BackendPagination,\n    ClosedOptions,\n    DropdownPlaceholderConfiguration,\n    DropdownTriggerMode\n} from '@ironsource/fusion-ui/components/dropdown/entities';\nimport {ApiBase} from '@ironsource/fusion-ui/components/api-base';\nimport {DropdownTestIdModifiers} from '@ironsource/fusion-ui/entities';\nimport {TestIdsService} from '@ironsource/fusion-ui/services/test-ids';\n\n@Directive()\nexport abstract class DropdownBaseComponent extends ApiBase implements OnInit, OnDestroy, OnChanges, ControlValueAccessor {\n    @Input() testId: string;\n\n    @Input() set options(value: DropdownOption[]) {\n        this.optionsState = this.cloneOptions(value);\n        this.displayedOptions$.next(this.parseOptions(this.optionsState));\n    }\n\n    /** @ignore */\n    @Input() set optionsGroups(value: Array<any>) {\n        if (value) {\n            this.options = this.dropdownService.mapGroupedOptions(value);\n        }\n    }\n\n    /** @ignore */\n    @Output() optionsChange = new EventEmitter<DropdownOption[]>();\n    /** @ignore */\n    @Input() selected: DropdownOption[] = [];\n    /** @ignore */\n    @Output() selectedChange = new EventEmitter<DropdownOption[]>();\n    /** @internal */\n    @Input() placeholderPrefix: string;\n    /** @internal */\n    @Input() searchPlaceholder = 'Search';\n    /** @internal */\n    @Input() placeholderWidth = '';\n    /** @ignore - add to story later*/\n    @Input() dynamicPlaceholder: DynamicComponentConfiguration;\n    /**\n     * @deprecated since version 6.0.0\n     * @ignore\n     */\n    @Input() icon: IconData;\n    /** @internal */\n    @Input() filterIconName: string;\n    /** @internal */\n    @Input() isIconRightPosition = false;\n    /** @internal */\n    @Input() isDisabled: boolean;\n    /** @internal */\n    @Input() readonly: boolean;\n    /** @internal */\n    @Input() search: boolean;\n    /** @internal */\n    @Input() autoComplete: boolean;\n    /** @internal */\n    @Input() mappingOptions: any;\n    /** @internal */\n    @Input() limitOptions = 10;\n\n    /** @internal */\n    @Input() set placeholderLocation(location: 'right' | 'left') {\n        if (location) {\n            this._isLocatedLeft = 'left' === location;\n            this._isLocatedRight = 'right' === location;\n        }\n    }\n\n    /** @internal */\n    @Input() set loading(value: boolean) {\n        this.isLoadingManuallyChanged = true;\n        this.loadingState = value;\n    }\n\n    /** @ignore */\n    @Input() strictSearch: boolean;\n    /** @ignore */\n    @Input() arrowNavigation: boolean;\n\n    /** @internal */\n    @Input()\n    set error(error: string) {\n        this._error = error;\n        this.dropdownSelectConfigurations$.next(this.getDropdownSelectConfigurations());\n    }\n\n    get error(): string {\n        return this._error;\n    }\n\n    /** @ignore */\n    @Input()\n    set optionsTitle(value: string) {\n        this._optionsTitle = value;\n    }\n\n    /** @ignore */\n    get optionsTitle(): string {\n        return this._optionsTitle;\n    }\n\n    /** @ignore */\n    @Input() optionRightHoverText;\n    /** @ignore */\n    @Input() changeConfirmation: () => Promise<boolean>;\n    /** @ignore */\n    @Input() optionCloseIcon: boolean;\n    /** @ignore */\n    @Input() helper: string;\n\n    /** @ignore */\n    @Input() set backendPagination(value: BackendPagination) {\n        this.onBackendPaginationChanged(value);\n        this.backendPaginationState = value;\n    }\n\n    /** @ignore */\n    @Input() isTabMode = false;\n    /** @ignore */\n    @Input() isMultiRawDisplay = false;\n\n    /** @internal */\n    @Input() set placeholder(value: string | DropdownPlaceholderConfiguration) {\n        if (typeof value === 'string') {\n            this.placeholderText = value ?? 'Please Select';\n        } else {\n            this.placeholderText = value?.placeholderText ?? 'Please Select';\n            this.placeholderIcon = value?.icon;\n            this.forcePlaceholderOnSelection = value?.isForcedPlaceholder ? value?.isForcedPlaceholder : this.forcePlaceholderOnSelection;\n        }\n    }\n\n    /** @ignore */\n    @Input() optionsRenderByHover = true;\n    /** @internal */\n    @Input() searchByProperties?: string[] = [];\n    /** @internal */\n    @Output() searchChange = new EventEmitter();\n    /** @internal */\n    @Output() searchClear = new EventEmitter();\n    /** @internal */\n    @Output() optionCloseIconClicked = new EventEmitter();\n    /** @internal */\n    @Output() closed = new EventEmitter<ClosedOptions>();\n\n    /** @ignore */\n    @ViewChild('optionsHolder') optionsHolderElRef: ElementRef;\n    /** @ignore */\n    @ViewChild('searchComponent') searchComponent: DropdownSearchComponent;\n    /** @ignore */\n    @ViewChild('selectComponent') selectComponent: DropdownSelectComponent;\n    /** @ignore */\n    @ViewChild('chipContent', {static: true}) chipContent: TemplateRef<any>;\n    /** @ignore */\n    @ViewChild('trigger') trigger: ElementRef;\n\n    /** @ignore */\n    onDestroy$ = new Subject<void>();\n    /** @ignore */\n    forcePlaceholderOnSelection = false;\n    /** @ignore */\n    placeholderText = 'Please Select';\n    /** @ignore */\n    placeholderIcon: IconData;\n    /** @ignore */\n    isOpen$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n    /** @ignore */\n    id: any = this.uniqueIdService.getUniqueId().toString();\n    /** @ignore */\n    searchValue = new FormControl();\n    /** @ignore */\n    subject = new Subject();\n    /** @ignore */\n    labelImageSrc: string;\n    /** @ignore */\n    labelFlag: string;\n    /** @ignore */\n    isPredefinedTags = false; // from tag-input\n    /** @ignore */\n    isNotFoundPredefined = false; // from tag-input\n    /** @ignore */\n    isLoadingManuallyChanged = false;\n    /** @ignore */\n    pagination = {\n        latestScrollHeight: null,\n        counter: 1,\n        lastCounter: 0,\n        percentScrollDown: 0.2,\n        oneTimeFlagScroll: false\n    };\n    /** @ignore */\n    placeholder$: BehaviorSubject<string> = new BehaviorSubject<string>('');\n    /** @ignore */\n    searchPlaceholder$: BehaviorSubject<string> = new BehaviorSubject<string>(this.searchPlaceholder);\n    /** @ignore */\n    backendPaginationChanged$: Subject<any> = new Subject();\n    /** @ignore */\n    displayedOptions$ = new BehaviorSubject<DropdownOption[]>([]);\n    /** @ignore */\n    displayedOptionsObservable$: Observable<DropdownOption[]>;\n    /** @ignore */\n    dropdownArrowIconName = {\n        iconName: 'arrow-dropdown',\n        iconVersion: 'v1'\n    };\n    /** @ignore */\n    isAllSelected: boolean;\n    /** @ignore */\n    isIndeterminate = false;\n    /** @ignore */\n    optionSelected$ = new BehaviorSubject<any>('');\n    /** @ignore */\n    chipDefaultContent: string;\n\n    protected _triggerMode: DropdownTriggerMode = 'default';\n    private _optionsTitle: string;\n    protected _error: string;\n    private _isLocatedRight = false;\n    private _isLocatedLeft = false;\n    private initPlaceholder: string;\n    protected isDisabledForm: boolean;\n    private initIcon: IconData;\n    protected focusedLI = -1;\n    private loadingState: boolean;\n    private backendPaginationState: BackendPagination;\n    private backendPaginationTotalResult: number;\n    private backendPaginationPageNumber = 1;\n    private filteredOptionsState: DropdownOption[] = [];\n    protected optionsState: DropdownOption[] = [];\n    /** @ignore */\n    public dropdownSelectConfigurations$ = new BehaviorSubject<DropdownSelectConfigurations>(this.getDropdownSelectConfigurations());\n\n    private parentWithOverflow: HTMLElement;\n\n    testIdDropdownModifiers: typeof DropdownTestIdModifiers = DropdownTestIdModifiers;\n\n    testIdsService: TestIdsService = this.injector.get(TestIdsService);\n\n    @HostBinding('attr.data-testid') get testAttribute(): string {\n        return this.testId;\n    }\n\n    get filteredOptions(): DropdownOption[] {\n        return this.filteredOptionsState;\n    }\n\n    get hasScroll(): boolean {\n        if (this.options) {\n            const hasSubOptions = this.options.some(option => Array.isArray(option.childOptions));\n            return hasSubOptions || this.displayedOptions$.getValue().length > DROPDOWN_OPTIONS_WITHOUT_SCROLL;\n        }\n    }\n\n    get isLocatedLeft() {\n        return this._isLocatedLeft;\n    }\n\n    get isLocatedRight() {\n        return this._isLocatedRight;\n    }\n\n    // eslint-disable-next-line\n    get loading(): boolean {\n        return this.loadingState;\n    }\n\n    // eslint-disable-next-line\n    get options(): DropdownOption[] {\n        return this.optionsState || [];\n    }\n\n    get isMulti(): boolean {\n        return false;\n    }\n\n    constructor(\n        /** @ignore */\n        public dropdownService: DropdownService,\n        protected uniqueIdService: UniqueIdService,\n        protected element: ElementRef,\n        protected renderer: Renderer2,\n        protected filterByFieldPipe: FilterByFieldPipe,\n        /** @ignore */\n        public cdr: ChangeDetectorRef,\n        protected clonePipe: ClonePipe,\n        protected sharedEventsService: SharedEventsService,\n        protected injector: Injector\n    ) {\n        super();\n    }\n\n    ngOnInit() {\n        if (this.templateRef) {\n            this.optionsRenderByHover = false;\n        }\n        this.contentTemplate = this.chipContent;\n        this.displayedOptionsObservable$ = this.getDisplayedOptionsObservable();\n        this.arrowNavigation = this.arrowNavigation || false;\n        this.icon = this.icon || '';\n        this.placeholder$.next(this.placeholderText);\n        this.initPlaceholder = this.placeholderText;\n        this.initIcon = typeof this.icon === 'string' ? this.icon : {...this.icon};\n        this.search = this.search || false;\n        this.strictSearch = this.strictSearch || false;\n        this.selected = this.selected || [];\n        this.mappingOptions = {\n            id: 'id',\n            title: 'title',\n            displayText: 'displayText',\n            ...this.mappingOptions\n        };\n\n        if (!this.autoComplete && (!this.options || !this.options.length)) {\n            this.options = this.options || [];\n        }\n\n        this.setLabel();\n        // debounceTime - Wait 1 second before creating another http call\n        // distinctUntilChanged - Block new request if with the same request:\n        // Example for distinctUntilChanged: entered '123' - generate a call,\n        // clear '3' and then type again '3'. instead of '3' requests will be only 1.\n        this.subject.pipe(takeUntil(this.onDestroy$), debounceTime(DROPDOWN_DEBOUNCE_TIME), distinctUntilChanged()).subscribe(() => {\n            if (this.searchValue.value && this.searchValue.value.trim().length !== 0) {\n                this.searchChange.emit(this.searchValue.value);\n            } else {\n                if (this.autoComplete) {\n                    this.options = [];\n                }\n                this.searchClear.emit();\n            }\n            this.displayedOptions$.next(this.parseOptions(this.options));\n        });\n\n        this.initListeners();\n    }\n\n    /** @ignore */\n    getDropdownSelectConfigurations(): DropdownSelectConfigurations {\n        return {\n            selectedOption: this.selected,\n            dynamicContent: this.dynamicPlaceholder,\n            placeholder: {\n                prefix: this.placeholderPrefix,\n                search: this.searchPlaceholder$.getValue(),\n                value: this.placeholder$.getValue(),\n                width: this.placeholderWidth,\n                forcePlaceholderOnSelection: this.forcePlaceholderOnSelection,\n                overlayLocation: this.placeholderLocation\n            },\n            disabled: this.isDisabled || this.isDisabledForm,\n            readonly: this.readonly,\n            isTabMode: this.isTabMode,\n            isSearch: this.autoComplete || this.search,\n            isOpen: this.isOpen$.getValue(),\n            error: this.error,\n            icon: this.icon || this.placeholderIcon,\n            labelFlag: this.labelFlag,\n            labelImage: this.labelImageSrc,\n            dropdownArrowIconName: this.dropdownArrowIconName,\n            isMultipleSelection: this.isMulti,\n            filterIconName: this.filterIconName\n        };\n    }\n\n    ngOnDestroy() {\n        this.onDestroy$.next();\n        this.onDestroy$.complete();\n\n        this.resetState$.complete();\n\n        this.backendPaginationChanged$.next();\n        this.backendPaginationChanged$.complete();\n    }\n\n    ngOnChanges(changes) {\n        if (changes.placeholder) {\n            this.placeholder$.next(this.placeholderText);\n        }\n        if (changes.options && !this.isLoadingManuallyChanged) {\n            this.loadingState = !this.options || this.options?.length === 0;\n        }\n        this.dropdownSelectConfigurations$.next(this.getDropdownSelectConfigurations());\n    }\n\n    /** @ignore */\n    initListeners() {\n        this.dropdownSelectConfigurations$.next(this.getDropdownSelectConfigurations());\n        this.searchValue.valueChanges.pipe(takeUntil(this.onDestroy$)).subscribe(() => {\n            this.onSearchChange();\n        });\n        this.dropdownService.closeAll$.pipe(takeUntil(this.onDestroy$)).subscribe(event => {\n            if (!!(event.target as Element).closest('div.dropdown-arrow-container')) {\n                return;\n            }\n            this.closeDropdown();\n        });\n        this.apiBaseListeners();\n    }\n\n    /**\n     * Subscribe for that search text as been changed\n     * @ignore\n     */\n    onSearchChange() {\n        this.focusedLI = -1;\n        if (!isNullOrUndefined(this.searchValue.value) && !this.searchValue.value.trim().length && this.autoComplete) {\n            this.clearOptions();\n        }\n        this.subject.next(this.searchValue.value);\n    }\n\n    /**\n     * Open dropdown windows\n     * @ignore\n     */\n    openDropdown(event: MouseEvent) {\n        const forceOpen = !!(event.target as Element).closest('div.dropdown-arrow-container');\n        if (!(this.isDisabled || this.isDisabledForm) && !this.readonly) {\n            if (!this.isTabMode || forceOpen) {\n                if (this.isOpen$.getValue()) {\n                    this.closeDropdown();\n                } else {\n                    this.isOpen$.next(true);\n                    setTimeout(this._onDropdownOpened.bind(this), 0);\n                }\n            }\n            if (forceOpen && this.isTabMode) {\n                event.stopPropagation();\n                this.dropdownService.emitCloseAllEvent(event);\n            }\n        }\n        this.dropdownSelectConfigurations$.next(this.getDropdownSelectConfigurations());\n    }\n\n    private _onDropdownOpened(): void {\n        this.calcOptionHolderPosition();\n        this.optionsHolderElRef.nativeElement.scrollTop = 0;\n        if ((this.search || this.autoComplete) && this.searchComponent && this.searchComponent.inputComponent) {\n            this.searchComponent.inputComponent.setFocus();\n        }\n    }\n\n    /**\n     * Close dropdwn windows\n     * @ignore\n     */\n    @detectChangesDecorator\n    closeDropdown({clickOutside = false}: ClosedOptions = {clickOutside: false}) {\n        this.isOpen$.next(false);\n        this.searchValue.reset('');\n        if (!!this.selectComponent?.resetSearch) {\n            this.selectComponent.resetSearch();\n        }\n        this.focusedLI = -1;\n        // clear options if in autoComplete mode\n        if (this.autoComplete) {\n            this.clearOptions();\n        }\n        this.pagination = {...this.pagination, counter: 1, lastCounter: 0};\n        this.displayedOptions$.next(this.parseOptions(this.optionsState));\n        this.dropdownSelectConfigurations$.next(this.getDropdownSelectConfigurations());\n        this.resetOptionsStyle();\n\n        this.closed.emit({clickOutside});\n    }\n\n    /**\n     * Set a label to dropdown main button\n     * @ignore\n     */\n    setLabel() {\n        if (this._triggerMode === 'button-add') {\n            return;\n        }\n        this.labelImageSrc = undefined;\n        let placeholder = this.initPlaceholder;\n        let placeholderForSearch = this.searchPlaceholder;\n        this.icon = this.initIcon;\n        this.labelFlag = '';\n        if (this.selected && this.selected.length > 0 && !this.forcePlaceholderOnSelection) {\n            if (this.selected.length === 1) {\n                placeholder = this.getFirstSelectedLabel();\n                placeholderForSearch = this.selected[0].titleText\n                    ? this.selected[0].titleText\n                    : this.dropdownService.optionToString(this.selected[0], this.mappingOptions, {}, true);\n                if (!!this.selected[0].icon) {\n                    this.icon = this.selected[0].icon;\n                }\n                if (!!this.selected[0].image) {\n                    this.labelImageSrc = this.selected[0].image;\n                }\n                if (this.selected[0].flag) {\n                    this.labelFlag = this.selected[0].flag;\n                } else {\n                    this.labelFlag = '';\n                }\n            } else {\n                const placeholderPrefix = this.isAllSelected ? 'All' : `${this.selected.length}`;\n                if (this.placeholderChipV4Mode) {\n                    placeholderForSearch = placeholder =\n                        placeholderPrefix === 'All' ? `${placeholderPrefix}` : this.getFirstSelectedLabel(2);\n                } else {\n                    placeholderForSearch = placeholder = this.placeholderPrefix\n                        ? `${placeholderPrefix} ${this.placeholderPrefix} ${placeholderPrefix !== 'All' ? 'selected' : ''}`\n                        : `${this.selected.length} selected`;\n                }\n            }\n        }\n\n        this.placeholder$.next(placeholder);\n        this.searchPlaceholder$.next(placeholderForSearch);\n        this.optionSelected$.next(\n            placeholder !== this.initPlaceholder\n                ? this.selectedTypeObject && Array.isArray(this.selected) && this.selected.length\n                    ? this.selected[0]\n                    : placeholder\n                : null\n        );\n        this.dropdownSelectConfigurations$.next(this.getDropdownSelectConfigurations());\n    }\n\n    /** @ignore */\n    getHolderCSSClasses(): string[] {\n        return [\n            this.isIconRightPosition && 'is-icon-right-position',\n            this.isOpen$.getValue() && 'dd-opened',\n            !!this.selected && this.selected.length && 'ss-selected',\n            (this.isDisabled || this.isDisabledForm) && 'dd-disabled',\n            this.readonly && 'dd-readonly',\n            this.isTabMode && 'is-tab-mode'\n        ].filter(Boolean);\n    }\n\n    /** @ignore */\n    parseOptions(options: DropdownOption[]): DropdownOption[] {\n        if (options) {\n            let filteredOptions = [...options];\n\n            if (\n                (!this.autoComplete && !this.backendPaginationState && this.searchValue && this.searchValue.value) ||\n                this.isPredefinedTags\n            ) {\n                let filterByArray: string[] = [];\n                if (this.searchByProperties?.length) {\n                    filterByArray = this.searchByProperties;\n                } else if (this.mappingOptions) {\n                    filterByArray = Object.values(this.mappingOptions);\n                }\n                // use filter !(item.checked && this.isPredefinedTags) because in tags-input component item.checked\n                // must bot showed and in drop-down can\n                filteredOptions = this.filterByFieldPipe.transform(\n                    filteredOptions.filter(item => !(item.checked && this.isPredefinedTags)),\n                    filterByArray,\n                    this.searchValue ? this.searchValue.value : null,\n                    {\n                        caseSensitive: this.strictSearch,\n                        ignoreKey: this.isMulti ? 'isGroup' : null\n                    }\n                );\n\n                if (this.isMulti) {\n                    filteredOptions = this.dropdownService.filterEmptyGroupTitle(filteredOptions);\n                }\n\n                this.isNotFoundPredefined = !filteredOptions.length;\n            }\n            if (this.limitOptions && this.limitOptions > 0 && this.pagination.counter * this.limitOptions < this.options.length) {\n                filteredOptions = filteredOptions.slice(0, this.limitOptions * this.pagination.counter);\n            }\n            this.filteredOptionsState = filteredOptions;\n            return filteredOptions || [];\n        } else {\n            return [];\n        }\n    }\n\n    /** @ignore */\n    isSelected(option): boolean {\n        return (\n            this.selected &&\n            this.selected.length > 0 &&\n            this.selected.some(item => {\n                if (!isNullOrUndefined(option.id) && !isNullOrUndefined(item.id)) {\n                    return item.id === option.id; // in case not same instance\n                } else {\n                    return item === option;\n                }\n            })\n        );\n    }\n\n    /**\n     * Add arrows key navigation for the drop-down\n     * @ignore\n     */\n    @HostListener('keyup', ['$event'])\n    keyEvent(event: KeyboardEvent) {\n        if (!this.arrowNavigation) {\n            return;\n        }\n\n        event.stopPropagation();\n\n        const keyCodes: string[] = ['ArrowDown', 'ArrowUp', 'Enter', 'Escape'];\n        const elements: any[] = this.element.nativeElement.querySelectorAll('li.option:not(.is-hidden)');\n\n        if (elements && elements.length !== 0 && keyCodes.indexOf(event.code) !== -1) {\n            const elementLastIndex = elements.length - 1;\n            switch (event.code) {\n                case 'ArrowDown':\n                    if (this.focusedLI < elementLastIndex) {\n                        this.focusedLI++;\n                    }\n                    this.setLIFocused(elements[this.focusedLI]);\n                    break;\n                case 'ArrowUp':\n                    if (this.focusedLI > 0) {\n                        this.focusedLI--;\n                    }\n                    this.setLIFocused(elements[this.focusedLI]);\n                    break;\n                case 'Enter':\n                    if (this.focusedLI >= 0) {\n                        if (elements[this.focusedLI]) {\n                            elements[this.focusedLI].click();\n                        }\n\n                        if (elements[this.focusedLI + 1]) {\n                            this.setLIFocused(elements[this.focusedLI + 1]);\n                        } else if (elements[this.focusedLI - 1]) {\n                            this.setLIFocused(elements[this.focusedLI - 1]);\n                            this.focusedLI--;\n                        } else {\n                            this.focusedLI = 0;\n                        }\n                    }\n                    break;\n                case 'Escape':\n                    this.closeDropdown();\n                    break;\n            }\n        }\n    }\n\n    /** @ignore */\n    onScroll($event) {\n        if (this.options) {\n            const target = $event.target;\n            if (this.pagination.counter * this.limitOptions > this.options.length) {\n                if (this.isScrollReachEnd(target)) {\n                    this.onScrollReachEnd();\n                }\n                return;\n            }\n\n            if (this.pagination.lastCounter === this.pagination.counter || this.loading) {\n                // ignore scroll when data not rendered yet or data loading\n                return;\n            }\n            if (\n                target.scrollHeight - (target.offsetHeight + target.scrollTop) + 2 <\n                target.scrollHeight * this.pagination.percentScrollDown\n            ) {\n                this.pagination.lastCounter = this.pagination.counter;\n                this.pagination.counter++;\n                this.pagination.oneTimeFlagScroll = true;\n                this.displayedOptions$.next(this.parseOptions(this.options));\n            }\n        }\n    }\n\n    /**\n     * select / remove option from selected list\n     * @ignore\n     */\n    @detectChangesDecorator\n    changeSelected({option, $event}: {option?: any; $event?: any}) {\n        // ignore click on selected\n        if (this.selected && this.selected[0] && option && this.selected[0].id === option.id) {\n            return;\n        }\n\n        if ($event) {\n            const subOptionId = $event.target.closest('li').dataset.id;\n            if (Array.isArray(option.childOptions) && subOptionId) {\n                option = option.childOptions.find(item => item.id.toString() === subOptionId);\n                $event.stopPropagation();\n            }\n        }\n\n        if (!isNullOrUndefined(this.changeConfirmation) && !this.selected.some(item => item.id === option.id)) {\n            this.changeConfirmation().then(isReset => {\n                if (isReset) {\n                    this.doChanges(option);\n                } else {\n                    this.closeDropdown();\n                }\n            });\n        } else {\n            this.doChanges(option);\n        }\n    }\n\n    /** @ignore */\n    changeConfig(val: string) {\n        this.element.nativeElement.style.setProperty('--fu-chip-max-width', val);\n    }\n\n    /** @ignore */\n    valueSelected() {\n        return this.optionSelected$.asObservable().pipe(map(value => ({value, isSelected: !!value})));\n    }\n\n    /** @ignore */\n    open() {\n        this.trigger.nativeElement.click();\n    }\n\n    /** @ignore */\n    onCloseIconClicked(option: DropdownOption) {\n        this.optionCloseIconClicked.emit(option);\n    }\n\n    private doChanges(option?: DropdownOption): void {\n        if (!Array.isArray(option.childOptions)) {\n            this.selected = !option ? [] : [option];\n            this.propagateChange(this.selected);\n            this.selectedChange.emit(this.selected);\n            this.closeDropdown();\n            this.setOptionsAndLabel();\n        } else {\n            this.options = this.optionsState.map((optionItem: DropdownOption) =>\n                optionItem.id === option.id\n                    ? {\n                          ...option,\n                          isOpen: !option?.isOpen\n                      }\n                    : optionItem\n            );\n        }\n    }\n\n    /**\n     * clear all options and notify.\n     * @ignore\n     */\n    clearOptions() {\n        this.options = [];\n        this.optionsChange.emit(this.options);\n        this.searchClear.emit();\n    }\n\n    /**\n     * event from directive on outside component click\n     * @ignore\n     */\n    onOutsideClick(target?) {\n        this.closeDropdown({clickOutside: true});\n    }\n\n    private getFirstSelectedLabel(amount = 1): string {\n        const labelString = this.selected\n            .slice(0, amount)\n            .map(item =>\n                item.titleText\n                    ? item.titleText\n                    : this.placeholderChipV4Mode && item.flag\n                    ? item.flag.toUpperCase()\n                    : this.dropdownService.optionToString(item, this.mappingOptions)\n            )\n            .join(', ');\n\n        const andPlus = this.selected.length > amount ? `, +${this.selected.length - amount}` : '';\n\n        return labelString + andPlus;\n    }\n\n    private cloneOptions(options: DropdownOption[]): DropdownOption[] {\n        if (isNullOrUndefined(options)) {\n            return [];\n        }\n        return this.optionsState && this.optionsState.length ? [...options] : this.clonePipe.transform(options);\n    }\n\n    private setLIFocused(element: any): void {\n        const focusedElement = this.element.nativeElement.querySelector('li.is-focused');\n        if (focusedElement) {\n            this.renderer.removeClass(focusedElement, 'is-focused');\n        }\n        if (!!element) {\n            this.renderer.addClass(element, 'is-focused');\n            element.scrollIntoView(false);\n        }\n    }\n\n    private setOptionsAndLabel(): void {\n        if (this.selected && this.selected.length !== 0) {\n            const optionsSettings = this.dropdownService.setOptionsState(this.options, this.selected);\n            this.options = optionsSettings.options;\n            this.setLabel();\n        } else {\n            this.setLabel();\n        }\n    }\n\n    private onBackendPaginationChanged(backendPagination: BackendPagination): void {\n        this.backendPaginationChanged$.next();\n        this.backendPaginationTotalResult = null;\n        this.backendPaginationPageNumber = 1;\n        this.options = null;\n        this.loading = true;\n        if (backendPagination) {\n            backendPagination\n                .backendGetFunction(backendPagination.getOptions)\n                .pipe(takeUntil(this.backendPaginationChanged$))\n                .subscribe(val => {\n                    const value = val ? [...val[backendPagination.responseDataPropertyName]] : null;\n                    this.options = this.sortOptions({\n                        backendPagination,\n                        dropdownOptions: value\n                            ? backendPagination.mappingFunction\n                                ? value.map(backendPagination.mappingFunction)\n                                : value\n                            : null\n                    });\n                    this.backendPaginationTotalResult = val ? val[backendPagination.responseTotalCountPropertyName] : null;\n                    this.loading = false;\n                    this.cdr.markForCheck();\n                });\n        }\n    }\n\n    private onScrollReachEnd(): void {\n        if (!this.loading) {\n            if (this.backendPaginationState) {\n                if (this.backendPaginationTotalResult && this.backendPaginationTotalResult > this.options.length) {\n                    this.loading = true;\n                    this.backendPaginationState\n                        .backendGetFunction({\n                            ...this.backendPaginationState.getOptions,\n                            pageNumber: this.backendPaginationPageNumber + 1\n                        })\n                        .pipe(take(1))\n                        .subscribe(val => {\n                            const responseValue =\n                                val && Array.isArray(val[this.backendPaginationState.responseDataPropertyName])\n                                    ? val[this.backendPaginationState.responseDataPropertyName]\n                                    : [];\n                            const value = this.backendPaginationState.mappingFunction\n                                ? responseValue.map(this.backendPaginationState.mappingFunction)\n                                : responseValue;\n                            const dropdownOptions = this.sortOptions({\n                                backendPagination: this.backendPaginationState,\n                                dropdownOptions: [...value]\n                            });\n                            this.options = [...this.options, ...dropdownOptions];\n                            this.loading = false;\n                            this.backendPaginationPageNumber++;\n                            this.cdr.markForCheck();\n                        });\n                }\n            }\n        }\n    }\n\n    private sortOptions({\n        backendPagination,\n        dropdownOptions\n    }: {\n        backendPagination: BackendPagination;\n        dropdownOptions: DropdownOption[];\n    }): DropdownOption[] {\n        if (backendPagination.sortingFunction) {\n            return dropdownOptions.sort(backendPagination.sortingFunction);\n        }\n        return dropdownOptions;\n    }\n\n    private isScrollReachEnd(target: any): boolean {\n        return target.scrollHeight - target.scrollTop <= target.clientHeight + 10;\n    }\n\n    /**\n     * Calculate if need  options open above\n     */\n    protected calcOptionHolderPosition() {\n        const hostEl = this.element.nativeElement;\n        const optionsHolder = hostEl.querySelector('.options-dropdown');\n        if (optionsHolder) {\n            if (this.parentWithOverflow === undefined || !document.contains(this.parentWithOverflow)) {\n                this.parentWithOverflow = this.getParentWithOverflow(hostEl);\n            }\n            if (this.parentWithOverflow !== null) {\n                const parentOverflowRect = this.parentWithOverflow.getBoundingClientRect();\n                const optionsHolderRect = optionsHolder.getBoundingClientRect();\n                const hostHolderRect = hostEl.getBoundingClientRect();\n                const hasSpaceOnUp = hostHolderRect.top - parentOverflowRect.top > optionsHolderRect.height;\n                if (hasSpaceOnUp && parentOverflowRect.bottom - optionsHolderRect.bottom <= 0) {\n                    this.renderer.addClass(hostEl, 'fu-options-position-up');\n                }\n            }\n            this.renderer.setStyle(optionsHolder, 'visibility', 'visible');\n        }\n    }\n\n    /**\n     * Find first parent element with style overflow in 'auto', 'hidden', 'scroll'\n     * - childEl\n     */\n    private getParentWithOverflow(childEl: HTMLElement): HTMLElement {\n        const parent = childEl.parentElement;\n        let retVal = null;\n        if (parent) {\n            const parentOverflow = window.getComputedStyle(parent).overflow;\n            retVal = ['auto', 'hidden', 'scroll'].includes(parentOverflow) ? parent : this.getParentWithOverflow(parent);\n        }\n        return retVal;\n    }\n\n    protected resetOptionsStyle() {\n        const hostEl = this.element.nativeElement;\n        this.renderer.removeClass(hostEl, 'fu-options-position-up');\n        const optionsHolderEl = hostEl.querySelector('.options-dropdown');\n        if (optionsHolderEl) {\n            this.renderer.setStyle(optionsHolderEl, 'visibility', 'hidden');\n        }\n    }\n\n    // Implement ControlValueAccessor methods\n\n    /**\n     * Method to call when the component value has changes.\n     * @ignore\n     */\n    propagateChange = (_: DropdownOption[]) => {};\n\n    /**\n     * update value from model to the component\n     * @ignore\n     */\n    writeValue(value: any): void {\n        if (isNullOrUndefined(value) || (Array.isArray(value) && value.length === 0)) {\n            this.selected = [];\n        } else {\n            this.selected = Array.isArray(value) ? [...value] : [value];\n        }\n        this.setOptionsAndLabel();\n    }\n\n    /** @ignore */\n    registerOnChange(fn: any): void {\n        this.propagateChange = fn;\n    }\n\n    /** @ignore */\n    registerOnTouched(): void {}\n\n    /** @ignore */\n    setDisabledState?(isDisabled: boolean): void {\n        if (isNullOrUndefined(this.isDisabled)) {\n            this.isDisabledForm = isDisabled;\n            this.dropdownSelectConfigurations$.next(this.getDropdownSelectConfigurations());\n            this.cdr.markForCheck();\n        }\n    }\n\n    private getDisplayedOptionsObservable(): Observable<DropdownOption[]> {\n        if (this.optionsRenderByHover) {\n            return this.sharedEventsService\n                .getMouseoverObservable({\n                    element: this.element.nativeElement,\n                    padding: 100\n                })\n                .pipe(take(1), switchMapTo(this.displayedOptions$.asObservable()));\n        } else {\n            return this.displayedOptions$.asObservable();\n        }\n    }\n\n    private apiBaseListeners() {\n        this.placeholder$\n            .asObservable()\n            .pipe(takeUntil(this.onDestroy$))\n            .subscribe(\n                placeholder =>\n                    (this.chipDefaultContent = this.placeholderPrefix ? this.placeholderPrefix + ': ' + placeholder : placeholder)\n            );\n        this.resetState$\n            .asObservable()\n            .pipe(takeUntil(this.onDestroy$))\n            .subscribe(_ => {\n                this.writeValue(null);\n                this.propagateChange(null);\n            });\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}