{"version":3,"file":"primeng-autocomplete.mjs","sources":["../../src/app/components/autocomplete/autocomplete.ts","../../src/app/components/autocomplete/primeng-autocomplete.ts"],"sourcesContent":["import {NgModule,Component,ViewChild,ElementRef,AfterViewChecked,AfterContentInit,OnDestroy,Input,Output,EventEmitter,ContentChildren,QueryList,TemplateRef,Renderer2,forwardRef,ChangeDetectorRef,IterableDiffers,ChangeDetectionStrategy, ViewEncapsulation} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {trigger,style,transition,animate,AnimationEvent} from '@angular/animations';\nimport {InputTextModule} from 'primeng/inputtext';\nimport {ButtonModule} from 'primeng/button';\nimport {RippleModule} from 'primeng/ripple';\nimport {SharedModule,PrimeTemplate, TranslationKeys, PrimeNGConfig, OverlayService} from 'primeng/api';\nimport {DomHandler, ConnectedOverlayScrollHandler} from 'primeng/dom';\nimport {ObjectUtils, UniqueComponentId, ZIndexUtils} from 'primeng/utils';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\nimport {CdkVirtualScrollViewport, ScrollingModule} from '@angular/cdk/scrolling';\n\nexport const AUTOCOMPLETE_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => AutoComplete),\n  multi: true\n};\n\n@Component({\n    selector: 'p-autoComplete',\n    template: `\n        <span #container [ngClass]=\"{'p-autocomplete p-component':true,'p-autocomplete-dd':dropdown,'p-autocomplete-multiple':multiple}\" [ngStyle]=\"style\" [class]=\"styleClass\">\n            <input *ngIf=\"!multiple\" #in [attr.type]=\"type\" [attr.id]=\"inputId\" [ngStyle]=\"inputStyle\" [class]=\"inputStyleClass\" [autocomplete]=\"autocomplete\" [attr.required]=\"required\" [attr.name]=\"name\"\n            class=\"p-autocomplete-input p-inputtext p-component\" [ngClass]=\"{'p-autocomplete-dd-input':dropdown,'p-disabled': disabled}\" [value]=\"inputFieldValue\" aria-autocomplete=\"list\" role=\"searchbox\"\n            (click)=\"onInputClick($event)\" (input)=\"onInput($event)\" (keydown)=\"onKeydown($event)\" (keyup)=\"onKeyup($event)\" [attr.autofocus]=\"autofocus\" (focus)=\"onInputFocus($event)\" (blur)=\"onInputBlur($event)\" (change)=\"onInputChange($event)\" (paste)=\"onInputPaste($event)\"\n            [attr.placeholder]=\"placeholder\" [attr.size]=\"size\" [attr.maxlength]=\"maxlength\" [attr.tabindex]=\"tabindex\" [readonly]=\"readonly\" [disabled]=\"disabled\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledBy\" [attr.aria-required]=\"required\"\n            ><ul *ngIf=\"multiple\" #multiContainer class=\"p-autocomplete-multiple-container p-component p-inputtext\" [ngClass]=\"{'p-disabled':disabled,'p-focus':focus}\" (click)=\"multiIn.focus()\">\n                <li #token *ngFor=\"let val of value\" class=\"p-autocomplete-token\">\n                    <ng-container *ngTemplateOutlet=\"selectedItemTemplate; context: {$implicit: val}\"></ng-container>\n                    <span *ngIf=\"!selectedItemTemplate\" class=\"p-autocomplete-token-label\">{{resolveFieldData(val)}}</span>\n                    <span  class=\"p-autocomplete-token-icon pi pi-times-circle\" (click)=\"removeItem(token)\" *ngIf=\"!disabled && !readonly\"></span>\n                </li>\n                <li class=\"p-autocomplete-input-token\">\n                    <input #multiIn [attr.type]=\"type\" [attr.id]=\"inputId\" [disabled]=\"disabled\" [attr.placeholder]=\"(value&&value.length ? null : placeholder)\" [attr.tabindex]=\"tabindex\" [attr.maxlength]=\"maxlength\" (input)=\"onInput($event)\"  (click)=\"onInputClick($event)\"\n                            (keydown)=\"onKeydown($event)\" [readonly]=\"readonly\" (keyup)=\"onKeyup($event)\" [attr.autofocus]=\"autofocus\" (focus)=\"onInputFocus($event)\" (blur)=\"onInputBlur($event)\" (change)=\"onInputChange($event)\" (paste)=\"onInputPaste($event)\" [autocomplete]=\"autocomplete\"\n                            [ngStyle]=\"inputStyle\" [class]=\"inputStyleClass\" [attr.aria-label]=\"ariaLabel\" [attr.aria-labelledby]=\"ariaLabelledBy\" [attr.aria-required]=\"required\"\n                            aria-autocomplete=\"list\" [attr.aria-controls]=\"listId\" role=\"searchbox\" [attr.aria-expanded]=\"overlayVisible\" aria-haspopup=\"true\" [attr.aria-activedescendant]=\"'p-highlighted-option'\">\n                </li>\n            </ul>\n            <i *ngIf=\"loading\" class=\"p-autocomplete-loader pi pi-spinner pi-spin\"></i><button #ddBtn type=\"button\" pButton [icon]=\"dropdownIcon\" [attr.aria-label]=\"dropdownAriaLabel\" class=\"p-autocomplete-dropdown\" [disabled]=\"disabled\" pRipple\n                (click)=\"handleDropdownClick($event)\" *ngIf=\"dropdown\" [attr.tabindex]=\"tabindex\"></button>\n            <div #panel *ngIf=\"overlayVisible\" (click)=\"onOverlayClick($event)\" [ngClass]=\"['p-autocomplete-panel p-component']\" [style.max-height]=\"virtualScroll ? 'auto' : scrollHeight\" [ngStyle]=\"panelStyle\" [class]=\"panelStyleClass\"\n                [@overlayAnimation]=\"{value: 'visible', params: {showTransitionParams: showTransitionOptions, hideTransitionParams: hideTransitionOptions}}\" (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\" (@overlayAnimation.done)=\"onOverlayAnimationEnd($event)\">\n                <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n                <ul role=\"listbox\" [attr.id]=\"listId\" class=\"p-autocomplete-items\" [ngClass]=\"{'p-autocomplete-virtualscroll': virtualScroll}\">\n                    <ng-container *ngIf=\"group\">\n                        <ng-template ngFor let-optgroup [ngForOf]=\"suggestions\">\n                            <li class=\"p-autocomplete-item-group\">\n                                <span *ngIf=\"!groupTemplate\">{{getOptionGroupLabel(optgroup)||'empty'}}</span>\n                                <ng-container *ngTemplateOutlet=\"groupTemplate; context: {$implicit: optgroup}\"></ng-container>\n                            </li>\n                            <ng-container *ngTemplateOutlet=\"itemslist; context: {$implicit: getOptionGroupChildren(optgroup)}\"></ng-container>\n                        </ng-template>\n                    </ng-container>\n                    <ng-container *ngIf=\"!group\">\n                            <ng-container *ngTemplateOutlet=\"itemslist; context: {$implicit: suggestions}\"></ng-container>\n                    </ng-container>\n                    <ng-template #itemslist let-suggestionsToDisplay>\n                        <ng-container *ngIf=\"!virtualScroll; else virtualScrollList\">\n                            <li role=\"option\" *ngFor=\"let option of suggestionsToDisplay; let idx = index\" class=\"p-autocomplete-item\" pRipple [ngClass]=\"{'p-highlight': (option === highlightOption)}\" [id]=\"highlightOption == option ? 'p-highlighted-option':''\" (click)=\"selectItem(option)\">\n                                <span *ngIf=\"!itemTemplate\">{{resolveFieldData(option)}}</span>\n                                <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: option, index: idx}\"></ng-container>\n                            </li>\n                        </ng-container>\n                        <ng-template #virtualScrollList>\n                            <cdk-virtual-scroll-viewport [ngStyle]=\"{'height': scrollHeight}\" [itemSize]=\"itemSize\" *ngIf=\"virtualScroll && !noResults\">\n                                <ng-container *cdkVirtualFor=\"let option of suggestionsToDisplay; let i = index; let c = count; let f = first; let l = last; let e = even; let o = odd\">\n                                    <li role=\"option\" class=\"p-autocomplete-item\" pRipple [ngClass]=\"{'p-highlight': (option === highlightOption)}\" [ngStyle]=\"{'height': itemSize + 'px'}\" [id]=\"highlightOption == option ? 'p-highlighted-option':''\" (click)=\"selectItem(option)\">\n                                        <span *ngIf=\"!itemTemplate\">{{resolveFieldData(option)}}</span>\n                                        <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: option, index: i}\"></ng-container>\n                                    </li>\n                                </ng-container>\n                            </cdk-virtual-scroll-viewport>\n                        </ng-template>\n                        <li *ngIf=\"noResults && showEmptyMessage\" class=\"p-autocomplete-empty-message\">\n                            <ng-container *ngIf=\"!emptyTemplate; else empty\">\n                                {{emptyMessageLabel}}\n                            </ng-container>\n                            <ng-container #empty *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n                        </li>\n                    </ng-template>\n                </ul>\n                <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n            </div>\n        </span>\n    `,\n    animations: [\n        trigger('overlayAnimation', [\n            transition(':enter', [\n                style({opacity: 0, transform: 'scaleY(0.8)'}),\n                animate('{{showTransitionParams}}')\n              ]),\n              transition(':leave', [\n                animate('{{hideTransitionParams}}', style({ opacity: 0 }))\n              ])\n        ])\n    ],\n    host: {\n        'class': 'p-element p-inputwrapper',\n        '[class.p-inputwrapper-filled]': 'filled',\n        '[class.p-inputwrapper-focus]': '(focus && !disabled) || overlayVisible'\n    },\n    providers: [AUTOCOMPLETE_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./autocomplete.css']\n})\nexport class AutoComplete implements AfterViewChecked,AfterContentInit,OnDestroy,ControlValueAccessor {\n\n    @Input() minLength: number = 1;\n\n    @Input() delay: number = 300;\n\n    @Input() style: any;\n\n    @Input() panelStyle: any;\n\n    @Input() styleClass: string;\n\n    @Input() panelStyleClass: string;\n\n    @Input() inputStyle: any;\n\n    @Input() inputId: string;\n\n    @Input() inputStyleClass: string;\n\n    @Input() placeholder: string;\n\n    @Input() readonly: boolean;\n\n    @Input() disabled: boolean;\n\n    @Input() virtualScroll: boolean;\n\n    @Input() itemSize: number;\n\n    @Input() maxlength: number;\n\n    @Input() name: string;\n\n    @Input() required: boolean;\n\n    @Input() size: number;\n\n    @Input() appendTo: any;\n\n    @Input() autoHighlight: boolean;\n\n    @Input() forceSelection: boolean;\n\n    @Input() type: string = 'text';\n\n    @Input() autoZIndex: boolean = true;\n\n    @Input() baseZIndex: number = 0;\n\n    @Input() ariaLabel: string;\n\n    @Input() dropdownAriaLabel: string;\n\n    @Input() ariaLabelledBy: string;\n\n    @Input() dropdownIcon: string = \"pi pi-chevron-down\";\n\n    @Input() unique: boolean = true;\n\n    @Input() group: boolean;\n\n    @Input() completeOnFocus: boolean = false;\n\n    @Output() completeMethod: EventEmitter<any> = new EventEmitter();\n\n    @Output() onSelect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onUnselect: EventEmitter<any> = new EventEmitter();\n\n    @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n    @Output() onDropdownClick: EventEmitter<any> = new EventEmitter();\n\n\t@Output() onClear: EventEmitter<any> = new EventEmitter();\n\n    @Output() onKeyUp: EventEmitter<any> = new EventEmitter();\n\n    @Output() onShow: EventEmitter<any> = new EventEmitter();\n\n    @Output() onHide: EventEmitter<any> = new EventEmitter();\n\n    @Input() field: string;\n\n    @Input() scrollHeight: string = '200px';\n\n    @Input() dropdown: boolean;\n\n    @Input() showEmptyMessage: boolean;\n\n    @Input() dropdownMode: string = 'blank';\n\n    @Input() multiple: boolean;\n\n    @Input() tabindex: number;\n\n    @Input() dataKey: string;\n\n    @Input() emptyMessage: string;\n\n    @Input() showTransitionOptions: string = '.12s cubic-bezier(0, 0, 0.2, 1)';\n\n    @Input() hideTransitionOptions: string = '.1s linear';\n\n    @Input() autofocus: boolean;\n\n    @Input() autocomplete: string = 'off';\n\n    @Input() optionGroupChildren: string;\n\n    @Input() optionGroupLabel: string;\n\n    @ViewChild('container') containerEL: ElementRef;\n\n    @ViewChild('in') inputEL: ElementRef;\n\n    @ViewChild('multiIn') multiInputEL: ElementRef;\n\n    @ViewChild('multiContainer') multiContainerEL: ElementRef;\n\n    @ViewChild('ddBtn') dropdownButton: ElementRef;\n\n    @ViewChild(CdkVirtualScrollViewport) viewPort: CdkVirtualScrollViewport;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    overlay: HTMLDivElement;\n\n    itemsWrapper: HTMLDivElement;\n\n    itemTemplate: TemplateRef<any>;\n\n    emptyTemplate: TemplateRef<any>;\n\n    headerTemplate: TemplateRef<any>;\n\n    footerTemplate: TemplateRef<any>;\n\n    selectedItemTemplate: TemplateRef<any>;\n\n    groupTemplate: TemplateRef<any>;\n\n    value: any;\n\n    _suggestions: any[];\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    timeout: any;\n\n    overlayVisible: boolean = false;\n\n    documentClickListener: any;\n\n    suggestionsUpdated: boolean;\n\n    highlightOption: any;\n\n    highlightOptionChanged: boolean;\n\n    focus: boolean = false;\n\n    filled: boolean;\n\n    inputClick: boolean;\n\n    inputKeyDown: boolean;\n\n    noResults: boolean;\n\n    differ: any;\n\n    inputFieldValue: string = null;\n\n    loading: boolean;\n\n    scrollHandler: any;\n\n    documentResizeListener: any;\n\n    forceSelectionUpdateModelTimeout: any;\n\n    listId: string;\n\n    itemClicked: boolean;\n\n    virtualScrollSelectedIndex: number;\n\n    constructor(public el: ElementRef, public renderer: Renderer2, public cd: ChangeDetectorRef, public differs: IterableDiffers, public config: PrimeNGConfig, public overlayService: OverlayService) {\n        this.differ = differs.find([]).create(null);\n        this.listId = UniqueComponentId() + '_list';\n    }\n\n    @Input() get suggestions(): any[] {\n        return this._suggestions;\n    }\n\n    set suggestions(val:any[]) {\n        this._suggestions = val;\n        this.handleSuggestionsChange();\n    }\n\n    ngAfterViewChecked() {\n        //Use timeouts as since Angular 4.2, AfterViewChecked is broken and not called after panel is updated\n        if (this.suggestionsUpdated && this.overlay && this.overlay.offsetParent) {\n            setTimeout(() => {\n                if (this.overlay) {\n                    this.alignOverlay();\n                }\n            }, 1);\n            this.suggestionsUpdated = false;\n        }\n\n        if (this.highlightOptionChanged) {\n            setTimeout(() => {\n                if (this.overlay && this.itemsWrapper) {\n                    let listItem = DomHandler.findSingle(this.overlay, 'li.p-highlight');\n\n                    if (listItem) {\n                        DomHandler.scrollInView(this.itemsWrapper, listItem);\n                    }\n\n                    if (this.virtualScroll && this.viewPort) {\n                        let range = this.viewPort.getRenderedRange();\n                        this.updateVirtualScrollSelectedIndex();\n\n                        if (range.start > this.virtualScrollSelectedIndex || range.end < this.virtualScrollSelectedIndex) {\n                            this.viewPort.scrollToIndex(this.virtualScrollSelectedIndex);\n                        }\n                    }\n                }\n            }, 1);\n            this.highlightOptionChanged = false;\n        }\n    }\n\n    handleSuggestionsChange() {\n        if (this._suggestions != null && this.loading) {\n            this.highlightOption = null;\n            if (this._suggestions.length) {\n                this.noResults = false;\n                this.show();\n                this.suggestionsUpdated = true;\n\n                if (this.autoHighlight) {\n                    this.highlightOption = this._suggestions[0];\n                }\n            }\n            else {\n                this.noResults = true;\n\n                if (this.showEmptyMessage) {\n                    this.show();\n                    this.suggestionsUpdated = true;\n                }\n                else {\n                    this.hide();\n                }\n            }\n\n            this.loading = false;\n        }\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch(item.getType()) {\n                case 'item':\n                    this.itemTemplate = item.template;\n                break;\n\n                case 'group':\n                    this.groupTemplate = item.template;\n                break;\n\n                case 'selectedItem':\n                    this.selectedItemTemplate = item.template;\n                break;\n\n                case 'header':\n                    this.headerTemplate = item.template;\n                break;\n\n                case 'empty':\n                    this.emptyTemplate = item.template;\n                break;\n\n                case 'footer':\n                    this.footerTemplate = item.template;\n                break;\n\n                default:\n                    this.itemTemplate = item.template;\n                break;\n            }\n        });\n    }\n\n    updateVirtualScrollSelectedIndex() {\n        if (this.highlightOption && this.suggestions && this.suggestions.length) {\n            this.virtualScrollSelectedIndex = this.findOptionIndex(this.highlightOption, this.suggestions);\n        }\n    }\n\n    writeValue(value: any) : void {\n        this.value = value;\n        this.filled = this.value && this.value != '';\n        this.updateInputField();\n        this.cd.markForCheck();\n    }\n\n    getOptionGroupChildren(optionGroup: any) {\n        return this.optionGroupChildren ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupChildren) : optionGroup.items;\n    }\n\n    getOptionGroupLabel(optionGroup: any) {\n        return this.optionGroupLabel ? ObjectUtils.resolveFieldData(optionGroup, this.optionGroupLabel) : (optionGroup.label != undefined ? optionGroup.label : optionGroup);\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    onInput(event: Event) {\n        // When an input element with a placeholder is clicked, the onInput event is invoked in IE.\n        if (!this.inputKeyDown && DomHandler.isIE()) {\n            return;\n        }\n\n        if (this.timeout) {\n            clearTimeout(this.timeout);\n        }\n\n        let value = (<HTMLInputElement> event.target).value;\n        if (!this.multiple && !this.forceSelection) {\n            this.onModelChange(value);\n        }\n\n        if (value.length === 0 && !this.multiple) {\n            this.hide();\n            this.onClear.emit(event);\n\t        this.onModelChange(value);\n        }\n\n        if (value.length >= this.minLength) {\n            this.timeout = setTimeout(() => {\n                this.search(event, value);\n            }, this.delay);\n        }\n        else {\n            this.hide();\n        }\n        this.updateFilledState();\n        this.inputKeyDown = false;\n    }\n\n    onInputClick(event: MouseEvent) {\n        if (this.documentClickListener) {\n            this.inputClick = true;\n        }\n    }\n\n    search(event: any, query: string) {\n        //allow empty string but not undefined or null\n       if (query === undefined || query === null) {\n           return;\n       }\n\n       this.loading = true;\n\n       this.completeMethod.emit({\n           originalEvent: event,\n           query: query\n       });\n    }\n\n    selectItem(option: any, focus: boolean = true) {\n        if (this.forceSelectionUpdateModelTimeout) {\n            clearTimeout(this.forceSelectionUpdateModelTimeout);\n            this.forceSelectionUpdateModelTimeout = null;\n        }\n\n        if (this.multiple) {\n            this.multiInputEL.nativeElement.value = '';\n            this.value = this.value||[];\n            if (!this.isSelected(option) || !this.unique) {\n                this.value = [...this.value,option];\n                this.onModelChange(this.value);\n            }\n        }\n        else {\n            this.inputEL.nativeElement.value =  this.resolveFieldData(option);\n            this.value = option;\n            this.onModelChange(this.value);\n        }\n\n        this.onSelect.emit(option);\n        this.updateFilledState();\n\n        if (focus) {\n            this.itemClicked = true;\n            this.focusInput();\n        }\n    }\n\n    show() {\n        if (this.multiInputEL || this.inputEL) {\n            let hasFocus = this.multiple ?\n                this.multiInputEL.nativeElement.ownerDocument.activeElement == this.multiInputEL.nativeElement :\n                this.inputEL.nativeElement.ownerDocument.activeElement == this.inputEL.nativeElement;\n\n            if (!this.overlayVisible && hasFocus) {\n                this.overlayVisible = true;\n            }\n        }\n    }\n\n    onOverlayAnimationStart(event: AnimationEvent) {\n        switch (event.toState) {\n            case 'visible':\n                this.overlay = event.element;\n                this.itemsWrapper = this.virtualScroll ? DomHandler.findSingle(this.overlay, '.cdk-virtual-scroll-viewport') : this.overlay;\n                this.appendOverlay();\n\n                if (this.autoZIndex) {\n                    ZIndexUtils.set('overlay', this.overlay, this.baseZIndex + this.config.zIndex.overlay);\n                }\n\n                this.alignOverlay();\n                this.bindDocumentClickListener();\n                this.bindDocumentResizeListener();\n                this.bindScrollListener();\n                this.onShow.emit(event);\n            break;\n\n            case 'void':\n                this.onOverlayHide();\n            break;\n        }\n    }\n\n    onOverlayAnimationEnd(event: AnimationEvent) {\n        switch(event.toState) {\n            case 'void':\n                if (this.autoZIndex) {\n                    ZIndexUtils.clear(event.element);\n                }\n            break;\n        }\n    }\n\n    onOverlayClick(event) {\n        this.overlayService.add({\n            originalEvent: event,\n            target: this.el.nativeElement\n        });\n    }\n\n    appendOverlay() {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.overlay);\n            else\n                DomHandler.appendChild(this.overlay, this.appendTo);\n\n            if (!this.overlay.style.minWidth) {\n                this.overlay.style.minWidth = DomHandler.getWidth(this.el.nativeElement.children[0]) + 'px';\n            }\n        }\n    }\n\n    resolveFieldData(value) {\n        let data = this.field ? ObjectUtils.resolveFieldData(value, this.field) : value;\n        return data !== (null || undefined) ? data : '';\n    }\n\n    restoreOverlayAppend() {\n        if (this.overlay && this.appendTo) {\n            this.el.nativeElement.appendChild(this.overlay);\n        }\n    }\n\n    alignOverlay() {\n        if (this.appendTo)\n            DomHandler.absolutePosition(this.overlay, (this.multiple ? this.multiContainerEL.nativeElement : this.inputEL.nativeElement));\n        else\n            DomHandler.relativePosition(this.overlay, (this.multiple ? this.multiContainerEL.nativeElement : this.inputEL.nativeElement));\n    }\n\n    hide() {\n        this.overlayVisible = false;\n        this.cd.markForCheck();\n    }\n\n    handleDropdownClick(event) {\n        if (!this.overlayVisible) {\n            this.focusInput();\n            let queryValue = this.multiple ? this.multiInputEL.nativeElement.value : this.inputEL.nativeElement.value;\n\n            if (this.dropdownMode === 'blank')\n                this.search(event, '');\n            else if (this.dropdownMode === 'current')\n                this.search(event, queryValue);\n\n            this.onDropdownClick.emit({\n                originalEvent: event,\n                query: queryValue\n            });\n        }\n        else {\n            this.hide();\n        }\n    }\n\n    focusInput() {\n        if (this.multiple)\n            this.multiInputEL.nativeElement.focus();\n        else\n            this.inputEL.nativeElement.focus();\n    }\n\n    get emptyMessageLabel(): string {\n        return this.emptyMessage || this.config.getTranslation(TranslationKeys.EMPTY_MESSAGE);\n    }\n\n    removeItem(item: any) {\n        let itemIndex = DomHandler.index(item);\n        let removedValue = this.value[itemIndex];\n        this.value = this.value.filter((val, i) => i!=itemIndex);\n        this.onModelChange(this.value);\n        this.updateFilledState();\n        this.onUnselect.emit(removedValue);\n    }\n\n    onKeydown(event) {\n        if (this.overlayVisible) {\n            switch(event.which) {\n                //down\n                case 40:\n                    if (this.group) {\n                        let highlightItemIndex = this.findOptionGroupIndex(this.highlightOption, this.suggestions);\n\n                        if (highlightItemIndex !== -1) {\n                            let nextItemIndex = highlightItemIndex.itemIndex + 1;\n                            if (nextItemIndex < (this.getOptionGroupChildren(this.suggestions[highlightItemIndex.groupIndex]).length)) {\n                                this.highlightOption = this.getOptionGroupChildren(this.suggestions[highlightItemIndex.groupIndex])[nextItemIndex];\n                                this.highlightOptionChanged = true;\n                            }\n                            else if (this.suggestions[highlightItemIndex.groupIndex + 1]) {\n                                this.highlightOption = this.getOptionGroupChildren(this.suggestions[highlightItemIndex.groupIndex + 1])[0];\n                                this.highlightOptionChanged = true;\n                            }\n                        }\n                        else {\n                            this.highlightOption = this.getOptionGroupChildren(this.suggestions[0])[0];\n                        }\n                    }\n                    else {\n                        let highlightItemIndex = this.findOptionIndex(this.highlightOption, this.suggestions);\n\n                        if (highlightItemIndex != -1) {\n                            var nextItemIndex = highlightItemIndex + 1;\n                            if (nextItemIndex != (this.suggestions.length)) {\n                                this.highlightOption = this.suggestions[nextItemIndex];\n                                this.highlightOptionChanged = true;\n                            }\n                        }\n                        else {\n                            this.highlightOption = this.suggestions[0];\n                        }\n                    }\n\n                    event.preventDefault();\n                break;\n\n                //up\n                case 38:\n                    if (this.group) {\n                        let highlightItemIndex = this.findOptionGroupIndex(this.highlightOption, this.suggestions);\n                        if (highlightItemIndex !== -1) {\n                            let prevItemIndex = highlightItemIndex.itemIndex - 1;\n                            if (prevItemIndex >= 0) {\n                                this.highlightOption = this.getOptionGroupChildren(this.suggestions[highlightItemIndex.groupIndex])[prevItemIndex];\n                                this.highlightOptionChanged = true;\n                            }\n                            else if (prevItemIndex < 0) {\n                                let prevGroup = this.suggestions[highlightItemIndex.groupIndex - 1];\n                                if (prevGroup) {\n                                    this.highlightOption = this.getOptionGroupChildren(prevGroup)[this.getOptionGroupChildren(prevGroup).length - 1];\n                                    this.highlightOptionChanged = true;\n                                }\n                            }\n                        }\n                    }\n                    else {\n                        let highlightItemIndex = this.findOptionIndex(this.highlightOption, this.suggestions);\n\n                        if (highlightItemIndex > 0) {\n                            let prevItemIndex = highlightItemIndex - 1;\n                            this.highlightOption = this.suggestions[prevItemIndex];\n                            this.highlightOptionChanged = true;\n                        }\n                    }\n\n                    event.preventDefault();\n                break;\n\n                //enter\n                case 13:\n                    if (this.highlightOption) {\n                        this.selectItem(this.highlightOption);\n                        this.hide();\n                    }\n                    event.preventDefault();\n                break;\n\n                //escape\n                case 27:\n                    this.hide();\n                    event.preventDefault();\n                break;\n\n\n                //tab\n                case 9:\n                    if (this.highlightOption) {\n                        this.selectItem(this.highlightOption);\n                    }\n                    this.hide();\n                break;\n            }\n        } else {\n            if (event.which === 40 && this.suggestions) {\n                this.search(event,event.target.value);\n            }\n        }\n\n        if (this.multiple) {\n            switch(event.which) {\n                //backspace\n                case 8:\n                    if (this.value && this.value.length && !this.multiInputEL.nativeElement.value) {\n                        this.value = [...this.value];\n                        const removedValue = this.value.pop();\n                        this.onModelChange(this.value);\n                        this.updateFilledState();\n                        this.onUnselect.emit(removedValue);\n                    }\n                break;\n            }\n        }\n\n        this.inputKeyDown = true;\n    }\n\n    onKeyup(event) {\n        this.onKeyUp.emit(event);\n    }\n\n    onInputFocus(event) {\n        if (!this.itemClicked && this.completeOnFocus ) {\n            let queryValue = this.multiple ? this.multiInputEL.nativeElement.value : this.inputEL.nativeElement.value;\n            this.search(event, queryValue);\n        }\n\n        this.focus = true;\n        this.onFocus.emit(event);\n        this.itemClicked = false;\n    }\n\n    onInputBlur(event) {\n        this.focus = false;\n        this.onModelTouched();\n        this.onBlur.emit(event);\n    }\n\n    onInputChange(event) {\n        if (this.forceSelection) {\n            let valid = false;\n            let inputValue = event.target.value.trim();\n\n            if (this.suggestions)  {\n                for (let suggestion of this.suggestions) {\n                    let itemValue = this.field ? ObjectUtils.resolveFieldData(suggestion, this.field) : suggestion;\n                    if (itemValue && inputValue === itemValue.trim()) {\n                        valid = true;\n                        this.forceSelectionUpdateModelTimeout = setTimeout(() => {\n                            this.selectItem(suggestion, false);\n                        }, 250);\n                        break;\n                    }\n                }\n            }\n\n            if (!valid) {\n                if (this.multiple) {\n                    this.multiInputEL.nativeElement.value = '';\n                }\n                else {\n                    this.value = null;\n                    this.inputEL.nativeElement.value = '';\n                }\n\n                this.onClear.emit(event);\n                this.onModelChange(this.value);\n                this.updateFilledState();\n            }\n        }\n    }\n\n    onInputPaste(event: ClipboardEvent) {\n        this.onKeydown(event);\n    }\n\n    isSelected(val: any): boolean {\n        let selected: boolean = false;\n        if (this.value && this.value.length) {\n            for (let i = 0; i < this.value.length; i++) {\n                if (ObjectUtils.equals(this.value[i], val, this.dataKey)) {\n                    selected = true;\n                    break;\n                }\n            }\n        }\n        return selected;\n    }\n\n    findOptionIndex(option, suggestions): number {\n        let index: number = -1;\n        if (suggestions) {\n            for (let i = 0; i < suggestions.length; i++) {\n                if (ObjectUtils.equals(option, suggestions[i])) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n\n        return index;\n    }\n\n    findOptionGroupIndex(val: any, opts: any[]): any {\n        let groupIndex, itemIndex;\n\n        if (opts) {\n            for (let i = 0; i < opts.length; i++) {\n                groupIndex = i;\n                itemIndex = this.findOptionIndex(val, this.getOptionGroupChildren(opts[i]));\n\n                if (itemIndex !== -1) {\n                    break;\n                }\n            }\n        }\n\n        if (itemIndex !== -1) {\n            return {groupIndex: groupIndex, itemIndex: itemIndex};\n        }\n        else {\n            return -1;\n        }\n    }\n\n    updateFilledState() {\n        if (this.multiple)\n            this.filled = (this.value && this.value.length) || (this.multiInputEL && this.multiInputEL.nativeElement && this.multiInputEL.nativeElement.value != '');\n        else\n            this.filled = (this.inputFieldValue && this.inputFieldValue != '') || (this.inputEL && this.inputEL.nativeElement && this.inputEL.nativeElement.value != '');;\n    }\n\n    updateInputField() {\n        let formattedValue = this.resolveFieldData(this.value);\n        this.inputFieldValue = formattedValue;\n\n        if (this.inputEL && this.inputEL.nativeElement) {\n            this.inputEL.nativeElement.value = formattedValue;\n        }\n\n        this.updateFilledState();\n    }\n\n    bindDocumentClickListener() {\n        if (!this.documentClickListener) {\n            const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n            this.documentClickListener = this.renderer.listen(documentTarget, 'click', (event) => {\n                if (event.which === 3) {\n                    return;\n                }\n\n                if (!this.inputClick && !this.isDropdownClick(event)) {\n                    this.hide();\n                }\n\n                this.inputClick = false;\n                this.cd.markForCheck();\n            });\n        }\n    }\n\n    isDropdownClick(event) {\n        if (this.dropdown) {\n            let target = event.target;\n            return (target === this.dropdownButton.nativeElement || target.parentNode === this.dropdownButton.nativeElement);\n        }\n        else {\n            return false;\n        }\n    }\n\n    unbindDocumentClickListener() {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    }\n\n    bindDocumentResizeListener() {\n        this.documentResizeListener = this.onWindowResize.bind(this);\n        window.addEventListener('resize', this.documentResizeListener);\n    }\n\n    unbindDocumentResizeListener() {\n        if (this.documentResizeListener) {\n            window.removeEventListener('resize', this.documentResizeListener);\n            this.documentResizeListener = null;\n        }\n    }\n\n    onWindowResize() {\n        this.hide();\n    }\n\n    bindScrollListener() {\n        if (!this.scrollHandler) {\n            this.scrollHandler = new ConnectedOverlayScrollHandler(this.containerEL.nativeElement, () => {\n                if (this.overlayVisible) {\n                    this.hide();\n                }\n            });\n        }\n\n        this.scrollHandler.bindScrollListener();\n    }\n\n    unbindScrollListener() {\n        if (this.scrollHandler) {\n            this.scrollHandler.unbindScrollListener();\n        }\n    }\n\n    onOverlayHide() {\n        this.unbindDocumentClickListener();\n        this.unbindDocumentResizeListener();\n        this.unbindScrollListener();\n        this.overlay = null;\n        this.onHide.emit();\n    }\n\n    ngOnDestroy() {\n        if (this.forceSelectionUpdateModelTimeout) {\n            clearTimeout(this.forceSelectionUpdateModelTimeout);\n            this.forceSelectionUpdateModelTimeout = null;\n        }\n\n        if (this.scrollHandler) {\n            this.scrollHandler.destroy();\n            this.scrollHandler = null;\n        }\n\n        if (this.overlay) {\n            ZIndexUtils.clear(this.overlay);\n        }\n\n        this.restoreOverlayAppend();\n        this.onOverlayHide();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,InputTextModule,ButtonModule,SharedModule,RippleModule,ScrollingModule],\n    exports: [AutoComplete,SharedModule,ScrollingModule],\n    declarations: [AutoComplete]\n})\nexport class AutoCompleteModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}