{"version":3,"file":"ngx-select-ex.mjs","sources":["../../../projects/ngx-select-ex/src/ngx-select/ngx-select.classes.ts","../../../projects/ngx-select-ex/src/ngx-select/ngx-templates.directive.ts","../../../projects/ngx-select-ex/src/ngx-select/ngx-select-choices.component.ts","../../../projects/ngx-select-ex/src/ngx-select/ngx-select.component.ts","../../../projects/ngx-select-ex/src/ngx-select/ngx-select.component.html","../../../projects/ngx-select-ex/src/ngx-select/ngx-select.module.ts","../../../projects/ngx-select-ex/src/ngx-select-ex.ts"],"sourcesContent":["import { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport escapeStringRegexp from 'escape-string-regexp';\nimport { INgxSelectOptGroup, INgxSelectOption, INgxSelectOptionBase, TNgxSelectOptionType } from './ngx-select.interfaces';\n\nexport class NgxSelectOption implements INgxSelectOption, INgxSelectOptionBase {\n    public readonly type: TNgxSelectOptionType = 'option';\n\n    public highlightedText: SafeHtml;\n    public active: boolean;\n\n    constructor(public value: number | string,\n                public text: string,\n                public disabled: boolean,\n                public data: any,\n                private _parent: NgxSelectOptGroup = null) {\n    }\n\n    public get parent(): NgxSelectOptGroup {\n        return this._parent;\n    }\n\n    private cacheHighlightText: string;\n    private cacheRenderedText: SafeHtml = null;\n\n    public renderText(sanitizer: DomSanitizer, highlightText: string): SafeHtml {\n        if (this.cacheHighlightText !== highlightText || this.cacheRenderedText === null) {\n            this.cacheHighlightText = highlightText;\n            if (this.cacheHighlightText) {\n                this.cacheRenderedText = sanitizer.bypassSecurityTrustHtml((this.text + '').replace(\n                    new RegExp(escapeStringRegexp(this.cacheHighlightText), 'gi'), '<strong>$&</strong>'\n                ));\n            } else {\n                this.cacheRenderedText = sanitizer.bypassSecurityTrustHtml(this.text);\n            }\n        }\n        return this.cacheRenderedText;\n    }\n}\n\nexport class NgxSelectOptGroup implements INgxSelectOptGroup, INgxSelectOptionBase {\n    public readonly type: TNgxSelectOptionType = 'optgroup';\n\n    public optionsFiltered: NgxSelectOption[];\n\n    constructor(public label: string,\n                public options: NgxSelectOption[] = []) {\n        this.filter(() => true);\n    }\n\n    public filter(callbackFn: (value: NgxSelectOption) => any): void {\n        this.optionsFiltered = this.options.filter((option: NgxSelectOption) => callbackFn(option));\n    }\n}\n\nexport type TSelectOption = NgxSelectOptGroup | NgxSelectOption;\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n  selector: '[ngx-select-option]',\n  standalone: false\n})\nexport class NgxSelectOptionDirective {\n    constructor(public template: TemplateRef<any>) {\n    }\n}\n\n@Directive({\n  selector: '[ngx-select-option-selected]',\n  standalone: false\n})\nexport class NgxSelectOptionSelectedDirective {\n    constructor(public template: TemplateRef<any>) {\n    }\n}\n\n@Directive({\n  selector: '[ngx-select-option-not-found]',\n  standalone: false\n})\nexport class NgxSelectOptionNotFoundDirective {\n    constructor(public template: TemplateRef<any>) {\n    }\n}\n","import { AfterContentInit, Component, ElementRef, HostBinding, Input, NgZone, OnChanges, OnDestroy, OnInit, Renderer2, SimpleChanges } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { INgxSelectOption } from './ngx-select.interfaces';\n\nexport interface NgxElementPosition {\n    top: number;\n    left: number;\n    right: number;\n    bottom: number;\n    width: number;\n    height: number;\n}\n\n@Component({\n    selector: 'ngx-select-choices',\n    standalone:false,\n    template: '<ng-content></ng-content>',\n})\nexport class NgxSelectChoicesComponent implements OnInit, OnDestroy, OnChanges, AfterContentInit {\n    @Input() public appendTo: string;\n    @Input() public show: boolean;\n    @Input() public selectionChanges: Observable<INgxSelectOption[]>;\n\n    private choiceMenuEl: HTMLElement;\n    private selectEl: HTMLElement;\n    private destroy$ = new Subject<void>();\n    private disposeResizeListener: () => void;\n\n    @HostBinding('style.position')\n    public get position(): string {\n        return this.appendTo ? 'absolute' : '';\n    }\n\n    constructor(private renderer: Renderer2, private ngZone: NgZone, elementRef: ElementRef) {\n        this.choiceMenuEl = elementRef.nativeElement;\n    }\n\n    public ngOnInit(): void {\n        this.selectionChanges.pipe(takeUntil(this.destroy$)).subscribe(() => this.delayedPositionUpdate());\n        this.selectEl = this.choiceMenuEl.parentElement;\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.show?.currentValue) {\n            this.delayedPositionUpdate();\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n\n        if (this.appendTo) {\n            this.renderer.removeChild(this.choiceMenuEl.parentNode, this.choiceMenuEl);\n\n            if (this.disposeResizeListener) {\n                this.disposeResizeListener();\n            }\n        }\n    }\n\n    public ngAfterContentInit(): void {\n        if (this.appendTo) {\n            this.appendChoiceMenu();\n            this.handleDocumentResize();\n            this.delayedPositionUpdate();\n        }\n    }\n\n    private appendChoiceMenu(): void {\n        const target = this.getAppendToElement();\n        if (!target) {\n            throw new Error(`appendTo selector ${this.appendTo} did not found any element`);\n        }\n        this.renderer.appendChild(target, this.choiceMenuEl);\n    }\n\n    private getAppendToElement() {\n        return document.querySelector(this.appendTo) as HTMLElement;\n    }\n\n    private handleDocumentResize() {\n        this.disposeResizeListener = this.renderer.listen('window', 'resize', () => {\n            this.updatePosition();\n        });\n    }\n\n    private delayedPositionUpdate(): void {\n        if (this.appendTo) {\n            this.ngZone.runOutsideAngular(() => {\n                window.requestAnimationFrame(() => {\n                    this.updatePosition();\n                });\n            });\n        }\n    }\n\n    private updatePosition() {\n        if (this.show) {\n            const selectOffset = this.getViewportOffset(this.selectEl);\n            const relativeParentOffset = this.getParentOffset(this.choiceMenuEl);\n            const appendToOffset = this.getAppendToElement();\n\n            const offsetTop = selectOffset.top + appendToOffset.scrollTop - relativeParentOffset.top;\n            const offsetLeft = selectOffset.left + appendToOffset.scrollLeft - relativeParentOffset.left;\n\n            this.choiceMenuEl.style.top = `${offsetTop + selectOffset.height}px`;\n            this.choiceMenuEl.style.bottom = 'auto';\n            this.choiceMenuEl.style.left = `${offsetLeft}px`;\n            this.choiceMenuEl.style.width = `${selectOffset.width}px`;\n            this.choiceMenuEl.style.minWidth = `${selectOffset.width}px`;\n        }\n    }\n\n    private getStyles(element: HTMLElement): CSSStyleDeclaration {\n        return window.getComputedStyle(element);\n    }\n\n    private getStyleProp(element: HTMLElement, prop: keyof CSSStyleDeclaration) {\n        return this.getStyles(element)[prop];\n    }\n\n    private isStatic(element: HTMLElement): boolean {\n        return (this.getStyleProp(element, 'position') || 'static') === 'static';\n    }\n\n    private getOffsetParent(element: HTMLElement): HTMLElement {\n        let offsetParentEl = element.offsetParent as HTMLElement;\n\n        while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStatic(offsetParentEl)) {\n            offsetParentEl = offsetParentEl.offsetParent as HTMLElement;\n        }\n\n        return offsetParentEl || document.documentElement;\n    }\n\n    private getViewportOffset(element: HTMLElement): NgxElementPosition {\n        const rect = element.getBoundingClientRect();\n        const offsetTop = window.scrollY - document.documentElement.clientTop;\n        const offsetLeft = window.scrollX - document.documentElement.clientLeft;\n\n        const elOffset = {\n            height: rect.height || element.offsetHeight,\n            width: rect.width || element.offsetWidth,\n            top: rect.top + offsetTop,\n            bottom: rect.bottom + offsetTop,\n            left: rect.left + offsetLeft,\n            right: rect.right + offsetLeft,\n        };\n\n        return elOffset;\n    }\n\n    private getParentOffset(element: HTMLElement): NgxElementPosition {\n        let parentOffset: NgxElementPosition = { width: 0, height: 0, top: 0, left: 0, right: 0, bottom: 0 };\n        if (this.getStyleProp(element, 'position') === 'fixed') {\n            return parentOffset;\n        }\n\n        const offsetParentEl = this.getOffsetParent(element);\n        if (offsetParentEl !== document.documentElement) {\n            parentOffset = this.getViewportOffset(offsetParentEl);\n        }\n\n        parentOffset.top += offsetParentEl.clientTop;\n        parentOffset.left += offsetParentEl.clientLeft;\n\n        return parentOffset;\n    }\n}\n","import {\n    AfterContentChecked,\n    DoCheck,\n    Input,\n    Output,\n    ViewChild,\n    Component,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    HostListener,\n    IterableDiffer,\n    IterableDiffers,\n    ChangeDetectorRef,\n    ContentChild,\n    TemplateRef,\n    Optional,\n    Inject,\n    InjectionToken,\n    ChangeDetectionStrategy,\n    OnDestroy\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Observable, Subject, BehaviorSubject, EMPTY, of, from, merge, combineLatest } from 'rxjs';\nimport { tap, filter, map, share, toArray, distinctUntilChanged, mergeMap, debounceTime } from 'rxjs/operators';\nimport isEqual from 'lodash.isequal';\nimport escapeStringRegexp from 'escape-string-regexp';\nimport { NgxSelectOptGroup, NgxSelectOption, TSelectOption } from './ngx-select.classes';\nimport { NgxSelectOptionDirective, NgxSelectOptionNotFoundDirective, NgxSelectOptionSelectedDirective } from './ngx-templates.directive';\nimport { INgxOptionNavigated, INgxSelectOption, INgxSelectOptions, INgxSelectOptGroup } from './ngx-select.interfaces';\n\nexport const NGX_SELECT_OPTIONS = new InjectionToken<any>('NGX_SELECT_OPTIONS');\n\nexport interface INgxSelectComponentMouseEvent extends FocusEvent {\n    clickedSelectComponent?: NgxSelectComponent;\n}\n\nenum ENavigation {\n    first, previous, next, last,\n    firstSelected, firstIfOptionActiveInvisible,\n}\n\nfunction propertyExists(obj: object, propertyName: string) {\n    return propertyName in obj;\n}\n\n@Component({\n    selector: 'ngx-select',\n    standalone:false,\n    templateUrl: './ngx-select.component.html',\n    styleUrls: ['./ngx-select.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => NgxSelectComponent),\n            multi: true,\n        },\n    ],\n})\nexport class NgxSelectComponent implements INgxSelectOptions, ControlValueAccessor, DoCheck, AfterContentChecked, OnDestroy {\n    @Input() public items: any[];\n    @Input() public optionValueField = 'id';\n    @Input() public optionTextField = 'text';\n    @Input() public optGroupLabelField = 'label';\n    @Input() public optGroupOptionsField = 'options';\n    @Input() public multiple = false;\n    @Input() public allowClear = false;\n    @Input() public placeholder = '';\n    @Input() public noAutoComplete = false;\n    @Input() public disabled = false;\n    @Input() public defaultValue: any[] = [];\n    @Input() public autoSelectSingleOption = false;\n    @Input() public autoClearSearch = false;\n    @Input() public noResultsFound = 'No results found';\n    @Input() public keepSelectedItems = false;\n    @Input() public size: 'small' | 'default' | 'large' = 'default';\n    @Input() public searchCallback: (search: string, item: INgxSelectOption) => boolean;\n    @Input() public autoActiveOnMouseEnter = true;\n    @Input() public showOptionNotFoundForEmptyItems = false;\n    @Input() public isFocused = false;\n    @Input() public keepSelectMenuOpened = false;\n    @Input() public autocomplete = 'off';\n    @Input() public dropDownMenuOtherClasses = '';\n    @Input() public noSanitize = false;\n    @Input() public appendTo: string;\n\n    public keyCodeToRemoveSelected = 'Delete';\n    public keyCodeToOptionsOpen = ['Enter', 'NumpadEnter'];\n    public keyCodeToOptionsClose = 'Escape';\n    public keyCodeToOptionsSelect = ['Enter', 'NumpadEnter'];\n    public keyCodeToNavigateFirst = 'ArrowLeft';\n    public keyCodeToNavigatePrevious = 'ArrowUp';\n    public keyCodeToNavigateNext = 'ArrowDown';\n    public keyCodeToNavigateLast = 'ArrowRight';\n\n    @Output() public typed = new EventEmitter<string>();\n    @Output() public focus = new EventEmitter<void>();\n    @Output() public blur = new EventEmitter<void>();\n    @Output() public open = new EventEmitter<void>();\n    @Output() public close = new EventEmitter<void>();\n    @Output() public select = new EventEmitter<any>();\n    @Output() public remove = new EventEmitter<any>();\n    @Output() public navigated = new EventEmitter<INgxOptionNavigated>();\n    @Output() public selectionChanges = new EventEmitter<INgxSelectOption[]>();\n\n    @ViewChild('main', {static: true}) protected mainElRef: ElementRef;\n    @ViewChild('input') public inputElRef: ElementRef;\n    @ViewChild('choiceMenu') protected choiceMenuElRef: ElementRef;\n\n    @ContentChild(NgxSelectOptionDirective, {read: TemplateRef, static: true}) public templateOption: TemplateRef<NgxSelectOptionDirective>;\n\n    @ContentChild(NgxSelectOptionSelectedDirective, {read: TemplateRef, static: true})\n    public templateSelectedOption: TemplateRef<NgxSelectOptionSelectedDirective>;\n\n    @ContentChild(NgxSelectOptionNotFoundDirective, {read: TemplateRef, static: true})\n    public templateOptionNotFound: TemplateRef<NgxSelectOptionNotFoundDirective>;\n\n    public optionsOpened = false;\n    public optionsFiltered: TSelectOption[];\n\n    private optionActive: NgxSelectOption;\n    private itemsDiffer: IterableDiffer<any>;\n    private defaultValueDiffer: IterableDiffer<any[]>;\n    private actualValue: any[] = [];\n\n    public subjOptions = new BehaviorSubject<TSelectOption[]>([]);\n    private subjSearchText = new BehaviorSubject<string>('');\n\n    private subjOptionsSelected = new BehaviorSubject<NgxSelectOption[]>([]);\n    private subjExternalValue = new BehaviorSubject<any[]>([]);\n    private subjDefaultValue = new BehaviorSubject<any[]>([]);\n    private subjRegisterOnChange = new Subject<void>();\n\n    private cacheOptionsFilteredFlat: NgxSelectOption[];\n    private cacheElementOffsetTop: number;\n\n    private _focusToInput = false;\n\n    /** @internal */\n    public get inputText() {\n        if (this.inputElRef && this.inputElRef.nativeElement) {\n            return this.inputElRef.nativeElement.value;\n        }\n        return '';\n    }\n\n    constructor(iterableDiffers: IterableDiffers, private sanitizer: DomSanitizer, private cd: ChangeDetectorRef,\n                @Inject(NGX_SELECT_OPTIONS) @Optional() defaultOptions: INgxSelectOptions) {\n        Object.assign(this, defaultOptions);\n\n        // DIFFERS\n        this.itemsDiffer = iterableDiffers.find([]).create<any>(null);\n        this.defaultValueDiffer = iterableDiffers.find([]).create<any>(null);\n\n        // OBSERVERS\n        this.typed.subscribe((text: string) => this.subjSearchText.next(text));\n        this.subjOptionsSelected.subscribe((options: NgxSelectOption[]) => this.selectionChanges.emit(options));\n        let cacheExternalValue: any[];\n\n        // Get actual value\n        const subjActualValue = combineLatest([\n            merge(\n                this.subjExternalValue.pipe(map(\n                    (v: any[]) => cacheExternalValue = v === null ? [] : [].concat(v)\n                )),\n                this.subjOptionsSelected.pipe(map(\n                    (options: NgxSelectOption[]) => options.map((o: NgxSelectOption) => o.value)\n                ))\n            ),\n            this.subjDefaultValue,\n        ]).pipe(\n            map(([eVal, dVal]: [any[], any[]]) => {\n                const newVal = isEqual(eVal, dVal) ? [] : eVal;\n                return newVal.length ? newVal : dVal;\n            }),\n            distinctUntilChanged((x, y) => isEqual(x, y)),\n            share()\n        );\n\n        // Export actual value\n        combineLatest([subjActualValue, this.subjRegisterOnChange])\n            .pipe(map(([actualValue]: [any[], void]) => actualValue))\n            .subscribe((actualValue: any[]) => {\n                this.actualValue = actualValue;\n                if (!isEqual(actualValue, cacheExternalValue)) {\n                    cacheExternalValue = actualValue;\n                    if (this.multiple) {\n                        this.onChange(actualValue);\n                    } else {\n                        this.onChange(actualValue.length ? actualValue[0] : null);\n                    }\n                }\n            });\n\n        // Correct selected options when the options changed\n        combineLatest([\n            this.subjOptions.pipe(\n                mergeMap((options: TSelectOption[]) => from(options).pipe(\n                    mergeMap((option: TSelectOption) => option instanceof NgxSelectOption\n                        ? of(option)\n                        : (option instanceof NgxSelectOptGroup ? from(option.options) : EMPTY)\n                    ),\n                    toArray()\n                ))\n            ),\n            subjActualValue,\n        ]).pipe(\n            debounceTime(0) // For a case when optionsFlat, actualValue came at the same time\n        ).subscribe(([optionsFlat, actualValue]: [NgxSelectOption[], any[]]) => {\n            const optionsSelected = [];\n\n            actualValue.forEach((value: any) => {\n                const selectedOption = optionsFlat.find((option: NgxSelectOption) => option.value === value);\n                if (selectedOption) {\n                    optionsSelected.push(selectedOption);\n                }\n            });\n\n            if (this.keepSelectedItems) {\n                const optionValues = optionsSelected.map((option: NgxSelectOption) => option.value);\n                const keptSelectedOptions = this.subjOptionsSelected.value\n                    .filter((selOption: NgxSelectOption) => optionValues.indexOf(selOption.value) === -1);\n                optionsSelected.push(...keptSelectedOptions);\n            }\n\n            if (!isEqual(optionsSelected, this.subjOptionsSelected.value)) {\n                this.subjOptionsSelected.next(optionsSelected);\n                this.cd.markForCheck();\n            }\n        });\n\n        // Ensure working filter by a search text\n        combineLatest([this.subjOptions, this.subjOptionsSelected, this.subjSearchText]).pipe(\n            map(([options, selectedOptions, search]: [TSelectOption[], NgxSelectOption[], string]) => {\n                this.optionsFiltered = this.filterOptions(search, options, selectedOptions).map(option => {\n                    if (option instanceof NgxSelectOption) {\n                        option.highlightedText = this.highlightOption(option);\n                    } else if (option instanceof NgxSelectOptGroup) {\n                        option.options.map(subOption => {\n                            subOption.highlightedText = this.highlightOption(subOption);\n                            return subOption;\n                        });\n                    }\n                    return option;\n                });\n                this.cacheOptionsFilteredFlat = null;\n                this.navigateOption(ENavigation.firstIfOptionActiveInvisible);\n                this.cd.markForCheck();\n                return selectedOptions;\n            }),\n            mergeMap((selectedOptions: NgxSelectOption[]) => this.optionsFilteredFlat().pipe(filter(\n                (flatOptions: NgxSelectOption[]) => this.autoSelectSingleOption && flatOptions.length === 1 && !selectedOptions.length\n            )))\n        ).subscribe((flatOptions: NgxSelectOption[]) => {\n            this.subjOptionsSelected.next(flatOptions);\n            this.cd.markForCheck();\n        });\n    }\n\n    public asGroup: (item: INgxSelectOption | INgxSelectOptGroup) => NgxSelectOptGroup = item => item as NgxSelectOptGroup;\n    public asOpt: (item: INgxSelectOption | INgxSelectOptGroup) => NgxSelectOption = item => item as NgxSelectOption;\n\n    public setFormControlSize(otherClassNames: object = {}, useFormControl = true) {\n        const formControlExtraClasses = useFormControl ? {\n            'form-control-sm input-sm': this.size === 'small',\n            'form-control-lg input-lg': this.size === 'large',\n        } : {};\n        return Object.assign(formControlExtraClasses, otherClassNames);\n    }\n\n    public setBtnSize() {\n        return {'btn-sm': this.size === 'small', 'btn-lg': this.size === 'large'};\n    }\n\n    public get optionsSelected(): NgxSelectOption[] {\n        return this.subjOptionsSelected.value;\n    }\n\n    public mainClicked(event: INgxSelectComponentMouseEvent) {\n        event.clickedSelectComponent = this;\n        if (!this.isFocused) {\n            this.isFocused = true;\n            this.focus.emit();\n        }\n    }\n\n    public choiceMenuFocus(event: INgxSelectComponentMouseEvent) {\n        if (this.appendTo) {\n            event.clickedSelectComponent = this;\n        }\n    }\n\n    @HostListener('document:focusin', ['$event'])\n    @HostListener('document:click', ['$event'])\n    public documentClick(event: INgxSelectComponentMouseEvent) {\n        if (event.clickedSelectComponent !== this) {\n            if (this.optionsOpened) {\n                this.optionsClose();\n                this.cd.detectChanges(); // fix error because of delay between different events\n            }\n            if (this.isFocused) {\n                this.isFocused = false;\n                this.blur.emit();\n            }\n        }\n    }\n\n    private optionsFilteredFlat(): Observable<NgxSelectOption[]> {\n        if (this.cacheOptionsFilteredFlat) {\n            return of(this.cacheOptionsFilteredFlat);\n        }\n\n        return from(this.optionsFiltered).pipe(\n            mergeMap<TSelectOption, any>((option: TSelectOption) =>\n                option instanceof NgxSelectOption ? of(option) :\n                    (option instanceof NgxSelectOptGroup ? from(option.optionsFiltered) : EMPTY)\n            ),\n            filter((optionsFilteredFlat: NgxSelectOption) => !optionsFilteredFlat.disabled),\n            toArray(),\n            tap((optionsFilteredFlat: NgxSelectOption[]) => this.cacheOptionsFilteredFlat = optionsFilteredFlat)\n        );\n    }\n\n    private navigateOption(navigation: ENavigation) {\n        this.optionsFilteredFlat().pipe(\n            map<NgxSelectOption[], INgxOptionNavigated>((options: NgxSelectOption[]) => {\n                const navigated: INgxOptionNavigated = {index: -1, activeOption: null, filteredOptionList: options};\n                let newActiveIdx;\n                switch (navigation) {\n                    case ENavigation.first:\n                        navigated.index = 0;\n                        break;\n                    case ENavigation.previous:\n                        newActiveIdx = options.indexOf(this.optionActive) - 1;\n                        navigated.index = newActiveIdx >= 0 ? newActiveIdx : options.length - 1;\n                        break;\n                    case ENavigation.next:\n                        newActiveIdx = options.indexOf(this.optionActive) + 1;\n                        navigated.index = newActiveIdx < options.length ? newActiveIdx : 0;\n                        break;\n                    case ENavigation.last:\n                        navigated.index = options.length - 1;\n                        break;\n                    case ENavigation.firstSelected:\n                        if (this.subjOptionsSelected.value.length) {\n                            navigated.index = options.indexOf(this.subjOptionsSelected.value[0]);\n                        }\n                        break;\n                    case ENavigation.firstIfOptionActiveInvisible:\n                        let idxOfOptionActive = -1;\n                        if (this.optionActive) {\n                            idxOfOptionActive = options.indexOf(options.find(x => x.value === this.optionActive.value));\n                        }\n                        navigated.index = idxOfOptionActive > 0 ? idxOfOptionActive : 0;\n                        break;\n                }\n                navigated.activeOption = options[navigated.index];\n                return navigated;\n            })\n        ).subscribe((newNavigated: INgxOptionNavigated) => this.optionActivate(newNavigated));\n    }\n\n    public ngDoCheck(): void {\n        if (this.itemsDiffer.diff(this.items)) {\n            this.subjOptions.next(this.buildOptions(this.items));\n        }\n\n        const defVal = this.defaultValue ? [].concat(this.defaultValue) : [];\n        if (this.defaultValueDiffer.diff(defVal)) {\n            this.subjDefaultValue.next(defVal);\n        }\n    }\n\n    public ngAfterContentChecked(): void {\n        if (this._focusToInput && this.checkInputVisibility() && this.inputElRef &&\n            this.inputElRef.nativeElement !== document.activeElement) {\n            this._focusToInput = false;\n            this.inputElRef.nativeElement.focus();\n        }\n\n        if (this.choiceMenuElRef) {\n            const ulElement = this.choiceMenuElRef.nativeElement as HTMLUListElement;\n            const element = ulElement.querySelector('a.ngx-select__item_active.active') as HTMLLinkElement;\n\n            if (element && element.offsetHeight > 0) {\n                this.ensureVisibleElement(element);\n            }\n\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.cd.detach();\n    }\n\n    public canClearNotMultiple(): boolean {\n        return this.allowClear && !!this.subjOptionsSelected.value.length &&\n            (!this.subjDefaultValue.value.length || this.subjDefaultValue.value[0] !== this.actualValue[0]);\n    }\n\n    public focusToInput(): void {\n        this._focusToInput = true;\n    }\n\n    public inputKeyDown(event: KeyboardEvent) {\n        const keysForOpenedState = [].concat(\n            this.keyCodeToOptionsSelect,\n            this.keyCodeToNavigateFirst,\n            this.keyCodeToNavigatePrevious,\n            this.keyCodeToNavigateNext,\n            this.keyCodeToNavigateLast\n        );\n        const keysForClosedState = [].concat(this.keyCodeToOptionsOpen, this.keyCodeToRemoveSelected);\n\n        if (this.optionsOpened && keysForOpenedState.indexOf(event.code) !== -1) {\n            event.preventDefault();\n            event.stopPropagation();\n            switch (event.code) {\n                case ([].concat(this.keyCodeToOptionsSelect).indexOf(event.code) + 1) && event.code:\n                    this.optionSelect(this.optionActive);\n                    this.navigateOption(ENavigation.next);\n                    break;\n                case this.keyCodeToNavigateFirst:\n                    this.navigateOption(ENavigation.first);\n                    break;\n                case this.keyCodeToNavigatePrevious:\n                    this.navigateOption(ENavigation.previous);\n                    break;\n                case this.keyCodeToNavigateLast:\n                    this.navigateOption(ENavigation.last);\n                    break;\n                case this.keyCodeToNavigateNext:\n                    this.navigateOption(ENavigation.next);\n                    break;\n            }\n        } else if (!this.optionsOpened && keysForClosedState.indexOf(event.code) !== -1) {\n            event.preventDefault();\n            event.stopPropagation();\n            switch (event.code) {\n                case ([].concat(this.keyCodeToOptionsOpen).indexOf(event.code) + 1) && event.code:\n                    this.optionsOpen();\n                    break;\n                case this.keyCodeToRemoveSelected:\n                    if (this.multiple || this.canClearNotMultiple()) {\n                        this.optionRemove(this.subjOptionsSelected.value[this.subjOptionsSelected.value.length - 1], event);\n                    }\n                    break;\n            }\n        }\n    }\n\n    public trackByOption(index: number, option: TSelectOption) {\n        return option instanceof NgxSelectOption ? option.value :\n            (option instanceof NgxSelectOptGroup ? option.label : option);\n    }\n\n    public checkInputVisibility(): boolean {\n        return (this.multiple === true) || (this.optionsOpened && !this.noAutoComplete);\n    }\n\n    /** @internal */\n    public inputKeyUp(value = '', event: KeyboardEvent) {\n        if (event.code === this.keyCodeToOptionsClose) {\n            this.optionsClose(/*true*/);\n        } else if (this.optionsOpened && (['ArrowDown', 'ArrowUp', 'ArrowLeft', 'ArrowDown'].indexOf(event.code) === -1)/*ignore arrows*/) {\n            this.typed.emit(value);\n        } else if (!this.optionsOpened && value) {\n            this.optionsOpen(value);\n        }\n    }\n\n    /** @internal */\n    public inputClick(value = '') {\n        if (!this.optionsOpened) {\n            this.optionsOpen(value);\n        }\n    }\n\n    /** @internal */\n    public sanitize(html: string): SafeHtml {\n        if (this.noSanitize) {\n            return html || null;\n        }\n\n        return html ? this.sanitizer.bypassSecurityTrustHtml(html) : null;\n    }\n\n    /** @internal */\n    public highlightOption(option: NgxSelectOption): SafeHtml {\n        if (this.inputElRef) {\n            return option.renderText(this.sanitizer, this.inputElRef.nativeElement.value);\n        }\n        return option.renderText(this.sanitizer, '');\n    }\n\n    /** @internal */\n    public optionSelect(option: NgxSelectOption, event: Event = null): void {\n        if (event) {\n            event.preventDefault();\n            event.stopPropagation();\n        }\n        if (option && !option.disabled) {\n            this.subjOptionsSelected.next((this.multiple ? this.subjOptionsSelected.value : []).concat([option]));\n            this.select.emit(option.value);\n            if (!this.keepSelectMenuOpened) {\n                this.optionsClose(/*true*/);\n            }\n            this.onTouched();\n        }\n    }\n\n    /** @internal */\n    public optionRemove(option: NgxSelectOption, event: Event): void {\n        if (!this.disabled && option) {\n            event.stopPropagation();\n            this.subjOptionsSelected.next((this.multiple ? this.subjOptionsSelected.value : []).filter(o => o !== option));\n            this.remove.emit(option.value);\n        }\n    }\n\n    /** @internal */\n    public optionActivate(navigated: INgxOptionNavigated): void {\n        if ((this.optionActive !== navigated.activeOption) &&\n            (!navigated.activeOption || !navigated.activeOption.disabled)) {\n            if (this.optionActive) {\n                this.optionActive.active = false;\n            }\n\n            this.optionActive = navigated.activeOption;\n\n            if (this.optionActive) {\n                this.optionActive.active = true;\n            }\n            this.navigated.emit(navigated);\n            this.cd.detectChanges();\n        }\n    }\n\n    /** @internal */\n    public onMouseEnter(navigated: INgxOptionNavigated): void {\n        if (this.autoActiveOnMouseEnter) {\n            this.optionActivate(navigated);\n        }\n    }\n\n    private filterOptions(search: string, options: TSelectOption[], selectedOptions: NgxSelectOption[]): TSelectOption[] {\n        const regExp = new RegExp(escapeStringRegexp(search), 'i');\n        const filterOption = (option: NgxSelectOption) => {\n            if (this.searchCallback) {\n                return this.searchCallback(search, option);\n            }\n            return (!search || regExp.test(option.text)) && (!this.multiple || selectedOptions.indexOf(option) === -1);\n        };\n\n        return options.filter((option: TSelectOption) => {\n            if (option instanceof NgxSelectOption) {\n                return filterOption(option as NgxSelectOption);\n            } else if (option instanceof NgxSelectOptGroup) {\n                const subOp = option as NgxSelectOptGroup;\n                subOp.filter((subOption: NgxSelectOption) => filterOption(subOption));\n                return subOp.optionsFiltered.length;\n            }\n        });\n    }\n\n    private ensureVisibleElement(element: HTMLElement) {\n        if (this.choiceMenuElRef && this.cacheElementOffsetTop !== element.offsetTop) {\n            this.cacheElementOffsetTop = element.offsetTop;\n            const container: HTMLElement = this.choiceMenuElRef.nativeElement;\n            if (this.cacheElementOffsetTop < container.scrollTop) {\n                container.scrollTop = this.cacheElementOffsetTop;\n            } else if (this.cacheElementOffsetTop + element.offsetHeight > container.scrollTop + container.clientHeight) {\n                container.scrollTop = this.cacheElementOffsetTop + element.offsetHeight - container.clientHeight;\n            }\n        }\n    }\n\n    public showChoiceMenu(): boolean {\n        return this.optionsOpened && (!!this.subjOptions.value.length || this.showOptionNotFoundForEmptyItems);\n    }\n\n    public optionsOpen(search = '') {\n        if (!this.disabled) {\n            this.optionsOpened = true;\n            this.subjSearchText.next(search);\n            if (!this.multiple && this.subjOptionsSelected.value.length) {\n                this.navigateOption(ENavigation.firstSelected);\n            } else {\n                this.navigateOption(ENavigation.first);\n            }\n            this.focusToInput();\n            this.open.emit();\n            this.cd.markForCheck();\n        }\n    }\n\n    public optionsClose(/*focusToHost: boolean = false*/) {\n        this.optionsOpened = false;\n        // if (focusToHost) {\n        //     const x = window.scrollX, y = window.scrollY;\n        //     this.mainElRef.nativeElement.focus();\n        //     window.scrollTo(x, y);\n        // }\n        this.close.emit();\n\n        if (this.autoClearSearch && this.multiple && this.inputElRef) {\n            this.inputElRef.nativeElement.value = null;\n        }\n    }\n\n    private buildOptions(data: any[]): (NgxSelectOption | NgxSelectOptGroup)[] {\n        const result: (NgxSelectOption | NgxSelectOptGroup)[] = [];\n        if (Array.isArray(data)) {\n            data.forEach((item: any) => {\n                const isOptGroup = typeof item === 'object' && item !== null &&\n                    propertyExists(item, this.optGroupLabelField) && propertyExists(item, this.optGroupOptionsField) &&\n                    Array.isArray(item[this.optGroupOptionsField]);\n                if (isOptGroup) {\n                    const optGroup = new NgxSelectOptGroup(item[this.optGroupLabelField]);\n                    item[this.optGroupOptionsField].forEach((subOption: NgxSelectOption) => {\n                        const opt = this.buildOption(subOption, optGroup);\n                        if (opt) {\n                            optGroup.options.push(opt);\n                        }\n                    });\n                    result.push(optGroup);\n                } else {\n                    const option = this.buildOption(item, null);\n                    if (option) {\n                        result.push(option);\n                    }\n                }\n            });\n        }\n        return result;\n    }\n\n    private buildOption(data: any, parent: NgxSelectOptGroup): NgxSelectOption {\n        let value;\n        let text;\n        let disabled;\n        if (typeof data === 'string' || typeof data === 'number') {\n            value = text = data;\n            disabled = false;\n        } else if (typeof data === 'object' && data !== null &&\n            (propertyExists(data, this.optionValueField) || propertyExists(data, this.optionTextField))) {\n            value = propertyExists(data, this.optionValueField) ? data[this.optionValueField] : data[this.optionTextField];\n            text = propertyExists(data, this.optionTextField) ? data[this.optionTextField] : data[this.optionValueField];\n            disabled = propertyExists(data, 'disabled') ? data.disabled : false;\n        } else {\n            return null;\n        }\n        return new NgxSelectOption(value, text, disabled, data, parent);\n    }\n\n    //////////// interface ControlValueAccessor ////////////\n    public onChange = (v: any) => v;\n\n    public onTouched: () => void = () => null;\n\n    public writeValue(obj: any): void {\n        this.subjExternalValue.next(obj);\n    }\n\n    public registerOnChange(fn: (_: any) => {}): void {\n        this.onChange = fn;\n        this.subjRegisterOnChange.next();\n    }\n\n    public registerOnTouched(fn: () => {}): void {\n        this.onTouched = fn;\n    }\n\n    public setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n        this.cd.markForCheck();\n    }\n}\n","<div #main [tabindex]=\"disabled? -1: 0\" class=\"ngx-select dropdown\"\n     [ngClass]=\"setFormControlSize({\n        'ngx-select_multiple form-control': multiple === true,\n        'open show': optionsOpened && optionsFiltered.length\n     }, multiple === true)\"\n     (click)=\"mainClicked($event)\" (focusin)=\"mainClicked($event)\"\n     (focus)=\"focusToInput()\" (keydown)=\"inputKeyDown($event)\">\n    <div [ngClass]=\"{ 'ngx-select__disabled': disabled}\"></div>\n\n    <!-- single selected item -->\n    <div class=\"ngx-select__selected\"\n         *ngIf=\"(multiple === false) && (!optionsOpened || noAutoComplete)\">\n        <div class=\"ngx-select__toggle btn form-control\" [ngClass]=\"setFormControlSize(setBtnSize())\"\n             (click)=\"optionsOpen()\">\n\n            <span *ngIf=\"!optionsSelected.length\" class=\"ngx-select__placeholder text-muted\">\n                <span [innerHtml]=\"placeholder\"></span>\n            </span>\n            <span *ngIf=\"optionsSelected.length\"\n                  class=\"ngx-select__selected-single pull-left float-left\"\n                  [ngClass]=\"{'ngx-select__allow-clear': allowClear}\">\n                <ng-container [ngTemplateOutlet]=\"templateSelectedOption || defaultTemplateOption\"\n                              [ngTemplateOutletContext]=\"{$implicit: optionsSelected[0], index: 0,\n                                                          text: sanitize(optionsSelected[0].text)}\">\n                </ng-container>\n            </span>\n            <span class=\"ngx-select__toggle-buttons\">\n                <a class=\"ngx-select__clear btn btn-sm btn-link\" *ngIf=\"canClearNotMultiple()\"\n                   [ngClass]=\"setBtnSize()\"\n                   (click)=\"optionRemove(optionsSelected[0], $event)\">\n                    <i class=\"ngx-select__clear-icon\"></i>\n                </a>\n                <i class=\"dropdown-toggle\"></i>\n                <i class=\"ngx-select__toggle-caret caret\"></i>\n            </span>\n        </div>\n    </div>\n\n    <!-- multiple selected items -->\n    <div class=\"ngx-select__selected\" *ngIf=\"multiple === true\" (click)=\"inputClick(inputElRef && inputElRef['value'])\">\n        <span *ngFor=\"let option of optionsSelected; trackBy: trackByOption; let idx = index\">\n            <span tabindex=\"-1\" [ngClass]=\"setBtnSize()\" (click)=\"$event.stopPropagation()\"\n                  class=\"ngx-select__selected-plural btn btn-default btn-secondary btn-sm btn-xs\">\n\n                <ng-container [ngTemplateOutlet]=\"templateSelectedOption || defaultTemplateOption\"\n                              [ngTemplateOutletContext]=\"{$implicit: option, index: idx, text: sanitize(option.text)}\">\n                </ng-container>\n\n                <a class=\"ngx-select__clear btn btn-sm btn-link pull-right float-right\" [ngClass]=\"setBtnSize()\"\n                   (click)=\"optionRemove(option, $event)\">\n                    <i class=\"ngx-select__clear-icon\"></i>\n                </a>\n            </span>\n        </span>\n    </div>\n\n    <!-- live search an item from the list -->\n    <input #input type=\"text\" class=\"ngx-select__search form-control\" [ngClass]=\"setFormControlSize()\"\n           *ngIf=\"checkInputVisibility()\"\n           [tabindex]=\"multiple === false? -1: 0\"\n           (keyup)=\"inputKeyUp(input.value, $event)\"\n           [disabled]=\"disabled\"\n           [placeholder]=\"optionsSelected.length? '': placeholder\"\n           (click)=\"inputClick(input.value)\"\n           [autocomplete]=\"autocomplete\"\n           autocorrect=\"off\"\n           autocapitalize=\"off\"\n           spellcheck=\"false\"\n           role=\"combobox\">\n\n    <!-- options template -->\n    <ngx-select-choices *ngIf=\"isFocused\" [appendTo]=\"appendTo\" [show]=\"showChoiceMenu()\" (focusin)=\"choiceMenuFocus($event)\"\n                        [selectionChanges]=\"selectionChanges\">\n        <ul #choiceMenu role=\"menu\" class=\"ngx-select__choices dropdown-menu\"\n            [ngClass]=\"dropDownMenuOtherClasses\"\n            [class.show]=\"showChoiceMenu()\">\n            <li class=\"ngx-select__item-group\" role=\"menuitem\"\n                *ngFor=\"let opt of optionsFiltered; trackBy: trackByOption; let idxGroup=index\">\n                <div class=\"divider dropdown-divider\" *ngIf=\"opt.type === 'optgroup' && (idxGroup > 0)\"></div>\n                <div class=\"dropdown-header\" *ngIf=\"opt.type === 'optgroup'\">{{ asGroup(opt).label }}</div>\n\n                <a href=\"#\" #choiceItem class=\"ngx-select__item dropdown-item\"\n                   *ngFor=\"let option of (asGroup(opt).optionsFiltered || [opt]); trackBy: trackByOption; let idxOption = index\"\n                   [ngClass]=\"{\n                        'ngx-select__item_active active': asOpt(option).active,\n                        'ngx-select__item_disabled disabled': asOpt(option).disabled\n                    }\"\n                   (mouseenter)=\"onMouseEnter({\n                        activeOption: asOpt(option),\n                        filteredOptionList: optionsFiltered,\n                        index: optionsFiltered.indexOf(option)\n                    })\"\n                   (click)=\"optionSelect(asOpt(option), $event)\">\n                    <ng-container [ngTemplateOutlet]=\"templateOption || defaultTemplateOption\"\n                                  [ngTemplateOutletContext]=\"{$implicit: option, text: asOpt(option).highlightedText,\n                                                              index: idxGroup, subIndex: idxOption}\"></ng-container>\n                </a>\n            </li>\n            <li class=\"ngx-select__item ngx-select__item_no-found dropdown-header\" *ngIf=\"!optionsFiltered.length\">\n                <ng-container [ngTemplateOutlet]=\"templateOptionNotFound || defaultTemplateOptionNotFound\"\n                              [ngTemplateOutletContext]=\"{$implicit: inputText}\"></ng-container>\n            </li>\n        </ul>\n    </ngx-select-choices>\n\n    <!--Default templates-->\n    <ng-template #defaultTemplateOption let-text=\"text\">\n        <span [innerHtml]=\"text\"></span>\n    </ng-template>\n\n    <ng-template #defaultTemplateOptionNotFound>\n        {{noResultsFound}}\n    </ng-template>\n\n</div>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { NGX_SELECT_OPTIONS, NgxSelectComponent } from './ngx-select.component';\nimport { NgxSelectOptionDirective, NgxSelectOptionNotFoundDirective, NgxSelectOptionSelectedDirective } from './ngx-templates.directive';\nimport { INgxSelectOptions } from './ngx-select.interfaces';\nimport { NgxSelectChoicesComponent } from './ngx-select-choices.component';\n\n@NgModule({\n    imports: [\n        CommonModule,\n    ],\n    declarations: [NgxSelectComponent,\n        NgxSelectOptionDirective, NgxSelectOptionSelectedDirective, NgxSelectOptionNotFoundDirective, NgxSelectChoicesComponent,\n    ],\n    exports: [NgxSelectComponent,\n        NgxSelectOptionDirective, NgxSelectOptionSelectedDirective, NgxSelectOptionNotFoundDirective,\n    ],\n})\nexport class NgxSelectModule {\n    public static forRoot(options: INgxSelectOptions): ModuleWithProviders<NgxSelectModule> {\n        return {\n            ngModule: NgxSelectModule,\n            providers: [{provide: NGX_SELECT_OPTIONS, useValue: options}],\n        };\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.NgxSelectChoicesComponent"],"mappings":"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"}