{"version":3,"file":"ngui-auto-complete.mjs","sources":["../../projects/auto-complete/src/lib/auto-complete.service.ts","../../projects/auto-complete/src/lib/auto-complete.component.ts","../../projects/auto-complete/src/lib/auto-complete.component.html","../../projects/auto-complete/src/lib/auto-complete.directive.ts","../../projects/auto-complete/src/lib/auto-complete.module.ts","../../projects/auto-complete/src/public-api.ts","../../projects/auto-complete/src/ngui-auto-complete.ts"],"sourcesContent":["import { Injectable, Optional } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n@Injectable()\r\nexport class NguiAutoCompleteService {\r\n\r\n  public source: string;\r\n  public pathToData: string;\r\n  public listFormatter: (arg: any) => string;\r\n\r\n  constructor(@Optional() private http: HttpClient) {\r\n    // ...\r\n  }\r\n\r\n  public filter(list: any[], keyword: string, matchFormatted: boolean, accentInsensitive: boolean) {\r\n    const objectString = (el) => matchFormatted ? this.getFormattedListItem(el).toLowerCase() : JSON.stringify(el).toLowerCase();\r\n    const loweredKeyword = keyword.toLowerCase();\r\n\r\n    return accentInsensitive\r\n      ? list.filter(\r\n        (el) => {\r\n          return objectString(el).normalize('NFD').replace(/[\\u0300-\\u036f]/g, '')\r\n            .indexOf(loweredKeyword.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '')) !== -1;\r\n        })\r\n      : list.filter(\r\n        (el) => {\r\n          return objectString(el).indexOf(loweredKeyword) !== -1;\r\n        }\r\n      );\r\n  }\r\n\r\n  public getFormattedListItem(data: any) {\r\n    const formatter = this.listFormatter || '(id) value';\r\n    if (typeof formatter === 'function') {\r\n      return formatter.apply(this, [data]);\r\n    } else if (typeof data !== 'object') {\r\n      return data;\r\n    } else if (typeof formatter === 'string') {\r\n      let formatted = formatter;\r\n      const matches = formatter.match(/[a-zA-Z0-9_\\$]+/g);\r\n      if (matches && typeof data !== 'string') {\r\n        matches.forEach((key) => {\r\n          formatted = formatted.replace(key, data[key]);\r\n        });\r\n      }\r\n      return formatted;\r\n    }\r\n\r\n    return JSON.stringify(data);\r\n  }\r\n\r\n  /**\r\n   * return remote data from the given source and options, and data path\r\n   */\r\n  public getRemoteData(keyword: string): Observable<any[]> {\r\n    if (typeof this.source !== 'string') {\r\n      throw new TypeError('Invalid type of source, must be a string. e.g. http://www.google.com?q=:my_keyword');\r\n    } else if (!this.http) {\r\n      throw new Error('Http is required.');\r\n    }\r\n\r\n    const matches = this.source.match(/:[a-zA-Z_]+/);\r\n    if (matches === null) {\r\n      throw new Error('Replacement word is missing.');\r\n    }\r\n\r\n    const replacementWord = matches[0];\r\n    const url = this.source.replace(replacementWord, keyword);\r\n\r\n    return this.http.get<any[]>(url)\r\n      .pipe(\r\n        map((list) => {\r\n\r\n          if (this.pathToData) {\r\n            const paths = this.pathToData.split('.');\r\n            paths.forEach((prop) => list = list[prop]);\r\n          }\r\n\r\n          return list;\r\n        })\r\n      );\r\n  }\r\n}\r\n","import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { NguiAutoCompleteService } from './auto-complete.service';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n  selector: 'ngui-auto-complete',\r\n  templateUrl: './auto-complete.component.html',\r\n  styleUrls: ['./auto-complete.component.scss'],\r\n  encapsulation: ViewEncapsulation.None\r\n})\r\nexport class NguiAutoCompleteComponent implements OnInit {\r\n\r\n  /**\r\n   * public input properties\r\n   */\r\n  @Input('autocomplete') public autocomplete = false;\r\n  @Input('list-formatter') public listFormatter: (arg: any) => string;\r\n  @Input('source') public source: any;\r\n  @Input('path-to-data') public pathToData: string;\r\n  @Input('min-chars') public minChars = 0;\r\n  @Input('placeholder') public placeholder: string;\r\n  @Input('blank-option-text') public blankOptionText: string;\r\n  @Input('no-match-found-text') public noMatchFoundText: string;\r\n  @Input('accept-user-input') public acceptUserInput = true;\r\n  @Input('loading-text') public loadingText = 'Loading';\r\n  @Input('loading-template') public loadingTemplate = null;\r\n  @Input('max-num-list') public maxNumList: number;\r\n  @Input('show-input-tag') public showInputTag = true;\r\n  @Input('show-dropdown-on-init') public showDropdownOnInit = false;\r\n  @Input('tab-to-select') public tabToSelect = true;\r\n  @Input('match-formatted') public matchFormatted = false;\r\n  @Input('auto-select-first-item') public autoSelectFirstItem = false;\r\n  @Input('select-on-blur') public selectOnBlur = false;\r\n  @Input('re-focus-after-select') public reFocusAfterSelect = true;\r\n  @Input('header-item-template') public headerItemTemplate = null;\r\n  @Input('ignore-accents') public ignoreAccents = true;\r\n\r\n  @Output() public valueSelected = new EventEmitter();\r\n  @Output() public customSelected = new EventEmitter();\r\n  @Output() public textEntered = new EventEmitter();\r\n\r\n  @ViewChild('autoCompleteInput') public autoCompleteInput: ElementRef;\r\n  @ViewChild('autoCompleteContainer') public autoCompleteContainer: ElementRef;\r\n\r\n  public dropdownVisible = false;\r\n  public isLoading = false;\r\n\r\n  public filteredList: any[] = [];\r\n  public minCharsEntered = false;\r\n  public itemIndex: number = null;\r\n  public keyword: string;\r\n\r\n  private el: HTMLElement;           // this component  element `<ngui-auto-complete>`\r\n  private timer = 0;\r\n\r\n  private delay = (() => {\r\n    let timer = null;\r\n    return (callback: any, ms: number) => {\r\n      clearTimeout(timer);\r\n      timer = setTimeout(callback, ms);\r\n    };\r\n  })();\r\n  private selectOnEnter = false;\r\n\r\n  /**\r\n   * constructor\r\n   */\r\n  constructor(elementRef: ElementRef, public autoComplete: NguiAutoCompleteService) {\r\n    this.el = elementRef.nativeElement;\r\n  }\r\n\r\n  /**\r\n   * user enters into input el, shows list to select, then select one\r\n   */\r\n  ngOnInit(): void {\r\n    this.autoComplete.source = this.source;\r\n    this.autoComplete.pathToData = this.pathToData;\r\n    this.autoComplete.listFormatter = this.listFormatter;\r\n    if (this.autoSelectFirstItem) {\r\n      this.itemIndex = 0;\r\n    }\r\n    setTimeout(() => {\r\n      if (this.autoCompleteInput && this.reFocusAfterSelect) {\r\n        this.autoCompleteInput.nativeElement.focus();\r\n      }\r\n      if (this.showDropdownOnInit) {\r\n        this.showDropdownList({target: {value: ''}});\r\n      }\r\n    });\r\n  }\r\n\r\n  public isSrcArr(): boolean {\r\n    return Array.isArray(this.source);\r\n  }\r\n\r\n  public reloadListInDelay = (evt: any): void => {\r\n    const delayMs = this.isSrcArr() ? 10 : 500;\r\n    const keyword = evt.target.value;\r\n\r\n    // executing after user stopped typing\r\n    this.delay(() => this.reloadList(keyword), delayMs);\r\n  };\r\n\r\n  public showDropdownList(event: any): void {\r\n    this.dropdownVisible = true;\r\n    this.reloadList(event.target.value);\r\n  }\r\n\r\n  public hideDropdownList(): void {\r\n    this.selectOnEnter = false;\r\n    this.dropdownVisible = false;\r\n  }\r\n\r\n  public findItemFromSelectValue(selectText: string): any {\r\n    const matchingItems = this.filteredList.filter((item) => ('' + item) === selectText);\r\n    return matchingItems.length ? matchingItems[0] : null;\r\n  }\r\n\r\n  public reloadList(keyword: string): void {\r\n\r\n    this.filteredList = [];\r\n    if (keyword.length < (this.minChars || 0)) {\r\n      this.minCharsEntered = false;\r\n      return;\r\n    } else {\r\n      this.minCharsEntered = true;\r\n    }\r\n\r\n    if (this.isSrcArr()) {    // local source\r\n      this.isLoading = false;\r\n      this.filteredList = this.autoComplete.filter(this.source, keyword, this.matchFormatted, this.ignoreAccents);\r\n      if (this.maxNumList) {\r\n        this.filteredList = this.filteredList.slice(0, this.maxNumList);\r\n      }\r\n\r\n    } else {// remote source\r\n      this.isLoading = true;\r\n\r\n      if (typeof this.source === 'function') {\r\n        // custom function that returns observable\r\n        (this.source(keyword) as Observable<any>).subscribe({\r\n            next: (resp) => {\r\n              if (this.pathToData) {\r\n                const paths = this.pathToData.split('.');\r\n                paths.forEach((prop) => resp = resp[prop]);\r\n              }\r\n\r\n              this.filteredList = resp;\r\n              if (this.maxNumList) {\r\n                this.filteredList = this.filteredList.slice(0, this.maxNumList);\r\n              }\r\n            },\r\n            error: (error) => console.warn(error),\r\n            complete: () => this.isLoading = false\r\n          }\r\n        );\r\n      } else {\r\n        // remote source\r\n        this.autoComplete.getRemoteData(keyword).subscribe({\r\n          next: (resp) => {\r\n            this.filteredList = resp ? resp : [];\r\n            if (this.maxNumList) {\r\n              this.filteredList = this.filteredList.slice(0, this.maxNumList);\r\n            }\r\n          },\r\n          error: (error) => console.warn(error),\r\n          complete: () => this.isLoading = false\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  public selectOne(data: any) {\r\n    if (!!data || data === '') {\r\n      this.valueSelected.emit(data);\r\n    } else {\r\n      this.customSelected.emit(this.keyword);\r\n    }\r\n  }\r\n\r\n  public enterText(data: any) {\r\n    this.textEntered.emit(data);\r\n  }\r\n\r\n  public blurHandler(evt: any) {\r\n    if (this.selectOnBlur) {\r\n      this.selectOne(this.filteredList[this.itemIndex]);\r\n    }\r\n\r\n    this.hideDropdownList();\r\n  }\r\n\r\n  public inputElKeyHandler = (evt: any) => {\r\n    const totalNumItem = this.filteredList.length;\r\n\r\n    if (!this.selectOnEnter && this.autoSelectFirstItem && (0 !== totalNumItem)) {\r\n      this.selectOnEnter = true;\r\n    }\r\n\r\n    switch (evt.keyCode) {\r\n      case 27: // ESC, hide auto complete\r\n        this.selectOnEnter = false;\r\n        this.selectOne(undefined);\r\n        break;\r\n\r\n      case 38: // UP, select the previous li el\r\n        if (0 === totalNumItem) {\r\n          return;\r\n        }\r\n        this.selectOnEnter = true;\r\n        this.itemIndex = (totalNumItem + this.itemIndex - 1) % totalNumItem;\r\n        this.scrollToView(this.itemIndex);\r\n        break;\r\n\r\n      case 40: // DOWN, select the next li el or the first one\r\n        if (0 === totalNumItem) {\r\n          return;\r\n        }\r\n        this.selectOnEnter = true;\r\n        this.dropdownVisible = true;\r\n        let sum = this.itemIndex;\r\n        sum = (this.itemIndex === null) ? 0 : sum + 1;\r\n        this.itemIndex = (totalNumItem + sum) % totalNumItem;\r\n        this.scrollToView(this.itemIndex);\r\n        break;\r\n\r\n      case 13: // ENTER, choose it!!\r\n        if (this.selectOnEnter) {\r\n          this.selectOne(this.filteredList[this.itemIndex]);\r\n        }\r\n        evt.preventDefault();\r\n        break;\r\n\r\n      case 9: // TAB, choose if tab-to-select is enabled\r\n        if (this.tabToSelect) {\r\n          this.selectOne(this.filteredList[this.itemIndex]);\r\n        }\r\n        break;\r\n    }\r\n  };\r\n\r\n  public scrollToView(index) {\r\n    const container = this.autoCompleteContainer.nativeElement;\r\n    const ul = container.querySelector('ul');\r\n    const li = ul.querySelector('li');  // just sample the first li to get height\r\n    const liHeight = li.offsetHeight;\r\n    const scrollTop = ul.scrollTop;\r\n    const viewport = scrollTop + ul.offsetHeight;\r\n    const scrollOffset = liHeight * index;\r\n    if (scrollOffset < scrollTop || (scrollOffset + liHeight) > viewport) {\r\n      ul.scrollTop = scrollOffset;\r\n    }\r\n  }\r\n\r\n  public trackByIndex(index, item) {\r\n    return index;\r\n  }\r\n\r\n  get emptyList(): boolean {\r\n    return !(\r\n      this.isLoading ||\r\n      (this.minCharsEntered && !this.isLoading && !this.filteredList.length) ||\r\n      (this.filteredList.length)\r\n    );\r\n  }\r\n\r\n}\r\n","<div #autoCompleteContainer class=\"ngui-auto-complete\">\r\n  <!-- keyword input -->\r\n  <input *ngIf=\"showInputTag\"\r\n         #autoCompleteInput class=\"keyword\"\r\n         [attr.autocomplete]=\"autocomplete ? 'null' : 'off'\"\r\n         placeholder=\"{{placeholder}}\"\r\n         (focus)=\"showDropdownList($event)\"\r\n         (blur)=\"blurHandler($event)\"\r\n         (keydown)=\"inputElKeyHandler($event)\"\r\n         (input)=\"reloadListInDelay($event)\"\r\n         [(ngModel)]=\"keyword\"/>\r\n\r\n  <!-- dropdown that user can select -->\r\n  <ul *ngIf=\"dropdownVisible\" [class.empty]=\"emptyList\">\r\n    <li *ngIf=\"isLoading && loadingTemplate\" class=\"loading\"\r\n        [innerHTML]=\"loadingTemplate\"></li>\r\n    <li *ngIf=\"isLoading && !loadingTemplate\" class=\"loading\">{{ loadingText }}</li>\r\n    <li *ngIf=\"minCharsEntered && !isLoading && !filteredList.length\"\r\n        (mousedown)=\"selectOne('')\"\r\n        class=\"no-match-found\">{{ noMatchFoundText || 'No Result Found' }}\r\n    </li>\r\n    <li *ngIf=\"headerItemTemplate && filteredList.length\" class=\"header-item\"\r\n        [innerHTML]=\"headerItemTemplate\"></li>\r\n    <li *ngIf=\"blankOptionText && filteredList.length\"\r\n        (mousedown)=\"selectOne('')\"\r\n        class=\"blank-item\">{{ blankOptionText }}\r\n    </li>\r\n    <li class=\"item\"\r\n        *ngFor=\"let item of filteredList; let i=index; trackBy: trackByIndex\"\r\n        (mousedown)=\"selectOne(item)\"\r\n        [ngClass]=\"{selected: i === itemIndex}\"\r\n        [innerHtml]=\"autoComplete.getFormattedListItem(item)\">\r\n    </li>\r\n  </ul>\r\n\r\n</div>\r\n","import {\r\n  AfterViewInit,\r\n  ComponentRef,\r\n  Directive,\r\n  EventEmitter,\r\n  Host,\r\n  Input,\r\n  OnChanges,\r\n  OnDestroy,\r\n  OnInit,\r\n  Optional,\r\n  Output,\r\n  SimpleChanges,\r\n  SkipSelf,\r\n  ViewContainerRef\r\n} from '@angular/core';\r\nimport { AbstractControl, ControlContainer, FormGroupName, UntypedFormControl, UntypedFormGroup } from '@angular/forms';\r\nimport { NguiAutoCompleteComponent } from './auto-complete.component';\r\n\r\n@Directive({\r\n  // eslint-disable-next-line @angular-eslint/directive-selector\r\n  selector: '[auto-complete], [ngui-auto-complete]'\r\n})\r\nexport class NguiAutoCompleteDirective implements OnInit, OnChanges, AfterViewInit, OnDestroy {\r\n\r\n  @Input('autocomplete') public autocomplete = false;\r\n  @Input('auto-complete-placeholder') public autoCompletePlaceholder: string;\r\n  @Input('source') public source: any;\r\n  @Input('path-to-data') public pathToData: string;\r\n  @Input('min-chars') public minChars: number;\r\n  @Input('display-property-name') public displayPropertyName: string;\r\n  @Input('accept-user-input') public acceptUserInput = true;\r\n  @Input('max-num-list') public maxNumList: string;\r\n  @Input('select-value-of') public selectValueOf: string;\r\n  @Input('loading-template') public loadingTemplate = null;\r\n  @Input('list-formatter') public listFormatter;\r\n  @Input('loading-text') public loadingText = 'Loading';\r\n  @Input('blank-option-text') public blankOptionText: string;\r\n  @Input('no-match-found-text') public noMatchFoundText: string;\r\n  @Input('value-formatter') public valueFormatter: any;\r\n  @Input('tab-to-select') public tabToSelect = true;\r\n  @Input('select-on-blur') public selectOnBlur = false;\r\n  @Input('match-formatted') public matchFormatted = false;\r\n  @Input('auto-select-first-item') public autoSelectFirstItem = false;\r\n  @Input('open-on-focus') public openOnFocus = true;\r\n  @Input('close-on-focusout') public closeOnFocusOut = true;\r\n  @Input('re-focus-after-select') public reFocusAfterSelect = true;\r\n  @Input('header-item-template') public headerItemTemplate = null;\r\n  @Input('ignore-accents') public ignoreAccents = true;\r\n\r\n  @Input() public ngModel: string;\r\n  @Input('formControlName') public formControlName: string;\r\n  // if [formControl] is used on the anchor where our directive is sitting\r\n  // a form is not necessary to use a formControl we should also support this\r\n  @Input('formControl') public extFormControl: UntypedFormControl;\r\n  @Input('z-index') public zIndex = '1';\r\n  @Input('is-rtl') public isRtl = false;\r\n\r\n  @Output() public ngModelChange = new EventEmitter();\r\n  @Output() public valueChanged = new EventEmitter();\r\n  @Output() public customSelected = new EventEmitter();\r\n\r\n  private componentRef: ComponentRef<NguiAutoCompleteComponent>;\r\n  private wrapperEl: HTMLElement;\r\n  private el: HTMLElement;   // this element element, can be any\r\n  private acDropdownEl: HTMLElement; // auto complete element\r\n  private inputEl: HTMLInputElement;  // input element of this element\r\n  private formControl: AbstractControl;\r\n  private revertValue: any;\r\n  private dropdownJustHidden: boolean;\r\n  private scheduledBlurHandler: any;\r\n  private documentClickListener: (e: MouseEvent) => any;\r\n\r\n  constructor(public viewContainerRef: ViewContainerRef,\r\n              @Optional() @Host() @SkipSelf() private parentForm: ControlContainer) {\r\n    this.el = this.viewContainerRef.element.nativeElement;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    // Blur event is handled only after a click event.\r\n    // This is to prevent handling of blur events resulting from interacting with a scrollbar\r\n    // introduced by content overflow (Internet explorer issue).\r\n    // See issue description here: http://stackoverflow.com/questions/2023779/clicking-on-a-divs-scroll-bar-fires-the-blur-event-in-ie\r\n    this.documentClickListener = (e) => {\r\n      if (this.scheduledBlurHandler) {\r\n        this.scheduledBlurHandler();\r\n        this.scheduledBlurHandler = null;\r\n      }\r\n    };\r\n\r\n    document.addEventListener('click', this.documentClickListener);\r\n    // wrap this element with <div class=\"ngui-auto-complete\">\r\n    this.wrapperEl = document.createElement('div');\r\n    this.wrapperEl.className = 'ngui-auto-complete-wrapper';\r\n    this.wrapperEl.style.position = 'relative';\r\n    this.el.parentElement.insertBefore(this.wrapperEl, this.el.nextSibling);\r\n    this.wrapperEl.appendChild(this.el);\r\n\r\n    // Check if we were supplied with a [formControlName] and it is inside a [form]\r\n    // else check if we are supplied with a [FormControl] regardless if it is inside a [form] tag\r\n    if (this.parentForm && this.formControlName) {\r\n      if (this.parentForm['form']) {\r\n        this.formControl = (this.parentForm['form'] as UntypedFormGroup).get(this.formControlName);\r\n      } else if (this.parentForm instanceof FormGroupName) {\r\n        this.formControl = (this.parentForm as FormGroupName).control.controls[this.formControlName];\r\n      }\r\n    } else if (this.extFormControl) {\r\n      this.formControl = this.extFormControl;\r\n    }\r\n\r\n    // apply toString() method for the object\r\n    if (!!this.ngModel) {\r\n      this.selectNewValue(this.ngModel);\r\n    } else if (!!this.formControl && this.formControl.value) {\r\n      this.selectNewValue(this.formControl.value);\r\n    }\r\n\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    // if this element is not an input tag, move dropdown after input tag\r\n    // so that it displays correctly\r\n    this.inputEl = this.el.tagName === 'INPUT' ? this.el as HTMLInputElement : this.el.querySelector('input');\r\n\r\n    if (this.openOnFocus) {\r\n      this.inputEl.addEventListener('focus', (e) => this.showAutoCompleteDropdown(e));\r\n    }\r\n\r\n    if (this.closeOnFocusOut) {\r\n      this.inputEl.addEventListener('focusout', (e) => this.hideAutoCompleteDropdown(e));\r\n    }\r\n\r\n    if (!this.autocomplete) {\r\n      this.inputEl.setAttribute('autocomplete', 'off');\r\n    }\r\n    this.inputEl.addEventListener('blur', (e) => {\r\n      this.scheduledBlurHandler = () => {\r\n        return this.blurHandler(e);\r\n      };\r\n    });\r\n    this.inputEl.addEventListener('keydown', (e) => this.keydownEventHandler(e));\r\n    this.inputEl.addEventListener('input', (e) => this.inputEventHandler(e));\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.componentRef) {\r\n      this.componentRef.instance.valueSelected.unsubscribe();\r\n      this.componentRef.instance.textEntered.unsubscribe();\r\n    }\r\n    if (this.documentClickListener) {\r\n      document.removeEventListener('click', this.documentClickListener);\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['ngModel']) {\r\n      this.ngModel = this.setToStringFunction(changes['ngModel'].currentValue);\r\n      this.renderValue(this.ngModel);\r\n    }\r\n  }\r\n\r\n  // show auto-complete list below the current element\r\n  public showAutoCompleteDropdown = (event?: any): void => {\r\n    if (this.dropdownJustHidden) {\r\n      return;\r\n    }\r\n    this.hideAutoCompleteDropdown();\r\n    this.scheduledBlurHandler = null;\r\n\r\n    this.componentRef = this.viewContainerRef.createComponent(NguiAutoCompleteComponent);\r\n\r\n    const component = this.componentRef.instance;\r\n    component.keyword = this.inputEl.value;\r\n    component.showInputTag = false; // Do NOT display autocomplete input tag separately\r\n\r\n    component.pathToData = this.pathToData;\r\n    component.minChars = this.minChars;\r\n    component.source = this.source;\r\n    component.placeholder = this.autoCompletePlaceholder;\r\n    component.acceptUserInput = this.acceptUserInput;\r\n    component.maxNumList = parseInt(this.maxNumList, 10);\r\n\r\n    component.loadingText = this.loadingText;\r\n    component.loadingTemplate = this.loadingTemplate;\r\n    component.listFormatter = this.listFormatter;\r\n    component.blankOptionText = this.blankOptionText;\r\n    component.noMatchFoundText = this.noMatchFoundText;\r\n    component.tabToSelect = this.tabToSelect;\r\n    component.selectOnBlur = this.selectOnBlur;\r\n    component.matchFormatted = this.matchFormatted;\r\n    component.autoSelectFirstItem = this.autoSelectFirstItem;\r\n    component.headerItemTemplate = this.headerItemTemplate;\r\n    component.ignoreAccents = this.ignoreAccents;\r\n\r\n    component.valueSelected.subscribe(this.selectNewValue);\r\n    component.textEntered.subscribe(this.enterNewText);\r\n    component.customSelected.subscribe(this.selectCustomValue);\r\n\r\n    this.acDropdownEl = this.componentRef.location.nativeElement;\r\n    this.acDropdownEl.style.display = 'none';\r\n\r\n    // if this element is not an input tag, move dropdown after input tag\r\n    // so that it displays correctly\r\n\r\n    // TODO: confirm with owners\r\n    // with some reason, viewContainerRef.createComponent is creating element\r\n    // to parent div which is created by us on ngOnInit, please try this with demo\r\n\r\n    // if (this.el.tagName !== 'INPUT' && this.acDropdownEl) {\r\n    this.inputEl.parentElement.insertBefore(this.acDropdownEl, this.inputEl.nextSibling);\r\n    // }\r\n    this.revertValue = typeof this.revertValue !== 'undefined' ? this.revertValue : '';\r\n\r\n    setTimeout(() => {\r\n      component.reloadList(this.inputEl.value);\r\n      this.styleAutoCompleteDropdown();\r\n      component.dropdownVisible = true;\r\n    });\r\n  };\r\n\r\n  public blurHandler(event: any) {\r\n    if (this.componentRef) {\r\n      const component = this.componentRef.instance;\r\n\r\n      if (this.selectOnBlur) {\r\n        component.selectOne(component.filteredList[component.itemIndex]);\r\n      }\r\n\r\n      if (this.closeOnFocusOut) {\r\n        this.hideAutoCompleteDropdown(event);\r\n      }\r\n    }\r\n  }\r\n\r\n  public hideAutoCompleteDropdown = (event?: any): void => {\r\n    if (this.componentRef) {\r\n      let currentItem: any;\r\n      const hasRevertValue = (typeof this.revertValue !== 'undefined');\r\n      if (this.inputEl && hasRevertValue && this.acceptUserInput === false) {\r\n        currentItem = this.componentRef.instance.findItemFromSelectValue(this.inputEl.value);\r\n      }\r\n      this.componentRef.destroy();\r\n      this.componentRef = undefined;\r\n\r\n      if (this.inputEl && hasRevertValue && this.acceptUserInput === false && currentItem === null && this.inputEl.value !== '') {\r\n        this.selectNewValue(this.revertValue);\r\n        currentItem = this.revertValue;\r\n      } else if (this.inputEl && this.acceptUserInput === true && typeof currentItem === 'undefined' && event && event.target.value) {\r\n        this.enterNewText(event.target.value);\r\n      }\r\n      this.revertValue = currentItem;\r\n    }\r\n    this.dropdownJustHidden = true;\r\n    setTimeout(() => this.dropdownJustHidden = false, 100);\r\n  };\r\n\r\n  public styleAutoCompleteDropdown = () => {\r\n    if (this.componentRef) {\r\n      const component = this.componentRef.instance;\r\n\r\n      /* setting width/height auto complete */\r\n      const thisElBCR = this.el.getBoundingClientRect();\r\n      const thisInputElBCR = this.inputEl.getBoundingClientRect();\r\n      const closeToBottom = thisInputElBCR.bottom + 100 > window.innerHeight;\r\n      const directionOfStyle = this.isRtl ? 'right' : 'left';\r\n\r\n      this.acDropdownEl.style.width = thisInputElBCR.width + 'px';\r\n      this.acDropdownEl.style.position = 'absolute';\r\n      this.acDropdownEl.style.zIndex = this.zIndex;\r\n      this.acDropdownEl.style[directionOfStyle] = '0';\r\n      this.acDropdownEl.style.display = 'inline-block';\r\n\r\n      if (closeToBottom) {\r\n        this.acDropdownEl.style.bottom = `${thisInputElBCR.height}px`;\r\n      } else {\r\n        this.acDropdownEl.style.top = `${thisInputElBCR.height}px`;\r\n      }\r\n    }\r\n  };\r\n\r\n  public setToStringFunction(item: any): any {\r\n    if (item && typeof item === 'object') {\r\n      let displayVal;\r\n\r\n      if (typeof this.valueFormatter === 'string') {\r\n        const matches = this.valueFormatter.match(/[a-zA-Z0-9_\\$]+/g);\r\n        let formatted = this.valueFormatter;\r\n        if (matches && typeof item !== 'string') {\r\n          matches.forEach((key) => {\r\n            formatted = formatted.replace(key, item[key]);\r\n          });\r\n        }\r\n        displayVal = formatted;\r\n      } else if (typeof this.valueFormatter === 'function') {\r\n        displayVal = this.valueFormatter(item);\r\n      } else if (this.displayPropertyName) {\r\n        displayVal = item[this.displayPropertyName];\r\n      } else if (typeof this.listFormatter === 'string' && this.listFormatter.match(/^\\w+$/)) {\r\n        displayVal = item[this.listFormatter];\r\n      } else {\r\n        displayVal = item.value;\r\n      }\r\n      item.toString = () => displayVal;\r\n    }\r\n    return item;\r\n  }\r\n\r\n  public selectNewValue = (item: any) => {\r\n    // make displayable value\r\n    if (item && typeof item === 'object') {\r\n      item = this.setToStringFunction(item);\r\n    }\r\n\r\n    this.renderValue(item);\r\n\r\n    // make return value\r\n    let val = item;\r\n    if (this.selectValueOf && item[this.selectValueOf]) {\r\n      val = item[this.selectValueOf];\r\n    }\r\n    if ((this.parentForm && this.formControlName) || this.extFormControl) {\r\n      if (!!val) {\r\n        this.formControl.patchValue(val);\r\n      }\r\n    }\r\n    if (val !== this.ngModel) {\r\n      this.ngModelChange.emit(val);\r\n    }\r\n    this.valueChanged.emit(val);\r\n    this.hideAutoCompleteDropdown();\r\n    setTimeout(() => {\r\n      if (this.reFocusAfterSelect) {\r\n        this.inputEl.focus();\r\n      }\r\n\r\n      return this.inputEl;\r\n    });\r\n  };\r\n\r\n  public selectCustomValue = (text: string) => {\r\n    this.customSelected.emit(text);\r\n    this.hideAutoCompleteDropdown();\r\n    setTimeout(() => {\r\n      if (this.reFocusAfterSelect) {\r\n        this.inputEl.focus();\r\n      }\r\n\r\n      return this.inputEl;\r\n    });\r\n  };\r\n\r\n  public enterNewText = (value: any) => {\r\n    this.renderValue(value);\r\n    this.ngModelChange.emit(value);\r\n    this.valueChanged.emit(value);\r\n    this.hideAutoCompleteDropdown();\r\n  };\r\n\r\n  private keydownEventHandler = (evt: any) => {\r\n    if (this.componentRef) {\r\n      const component = this.componentRef.instance;\r\n      component.inputElKeyHandler(evt);\r\n    }\r\n  };\r\n\r\n  private inputEventHandler = (evt: any) => {\r\n    if (this.componentRef) {\r\n      const component = this.componentRef.instance;\r\n      component.dropdownVisible = true;\r\n      component.keyword = evt.target.value;\r\n      component.reloadListInDelay(evt);\r\n    } else {\r\n      this.showAutoCompleteDropdown();\r\n    }\r\n  };\r\n\r\n  private renderValue(item: any) {\r\n    if (!!this.inputEl) {\r\n      this.inputEl.value = '' + item;\r\n    }\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { NguiAutoCompleteComponent } from './auto-complete.component';\r\nimport { NguiAutoCompleteDirective } from './auto-complete.directive';\r\nimport { NguiAutoCompleteService } from './auto-complete.service';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    NguiAutoCompleteComponent,\r\n    NguiAutoCompleteDirective\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule\r\n  ],\r\n  providers: [\r\n    NguiAutoCompleteService\r\n  ],\r\n  exports: [\r\n    NguiAutoCompleteComponent,\r\n    NguiAutoCompleteDirective\r\n  ]\r\n})\r\nexport class NguiAutoCompleteModule { }\r\n","/*\r\n * Public API Surface of auto-complete\r\n */\r\n\r\nexport * from './lib/auto-complete.service';\r\nexport * from './lib/auto-complete.component';\r\nexport * from './lib/auto-complete.directive';\r\nexport * from './lib/auto-complete.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NguiAutoCompleteService","i1"],"mappings":"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"}