{"version":3,"file":"ng-autocomplete-plugin.mjs","sources":["../../../projects/autocomplete/src/lib/autocomplete.component.ts","../../../projects/autocomplete/src/lib/autocomplete.component.html","../../../projects/autocomplete/src/lib/autocomplete.module.ts","../../../projects/autocomplete/src/public-api.ts","../../../projects/autocomplete/src/ng-autocomplete-plugin.ts"],"sourcesContent":["import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, QueryList, Renderer2, SimpleChanges, TrackByFunction, ViewChild, ViewChildren, ViewEncapsulation } from '@angular/core';\nimport { Subscription, timer } from 'rxjs';\nimport { CustomClassType, CustomNgStyleType } from '../types/autocomplete-type';\n\ntype RelativeSearchType = {\n  includeOnly?: string[];\n  customRelativeSearchFunction?: Function;\n  setDefaultValueWithACustomFunction?: Function;\n}\n\ntype AdditionalDataType = {\n  relativeSearch?: RelativeSearchType | boolean;\n}\n\n@Component({\n  selector: 'ng-autocomplete',\n  templateUrl: './autocomplete.component.html',\n  styleUrls: ['./autocomplete.component.css']\n})\nexport class AutocompleteComponent implements OnInit, OnDestroy, OnChanges, AfterViewInit {\n  @Input() initialVisibleData = 1000;\n\n  @Input() scrollThreshold = 3;\n\n  @Input() totalRecords: number | undefined; // If user knows total number of records, it can be sent as props.\n\n  @Input() dropdownData: any[] = [];\n\n  searchedData: any[] = [];\n\n  filteredData: any[] = [];\n\n  @Input() objectProperty: string | undefined;\n\n  @Input() disableProperty: string | undefined;\n\n  @Input() noSearchResultMessage = 'No results found.';\n\n  @Input() placeholder = 'Select Value.';\n\n  @Input() isNumber = false;\n\n  @Input() isAutoCompleteDisabled = false; // autocomplete disable option.\n\n  @Input() isCustomSpinner = false;\n\n  @Input() showLoadingSpinner = true; // option to enable spinner for api lazy load.\n  showDataLoader = false;\n\n  @Input() customClass: CustomClassType = {};\n\n  @Input() customStyle: CustomNgStyleType = {};\n\n  @Input() customTrackBy: TrackByFunction<any> | undefined;\n\n  @Input() showdropDownArrow = true;\n\n  @Input() showClearOption = true;\n\n  @Input() triggerBlurEvent = false;\n  @Output() emitBlurEvent = new EventEmitter(); // emits emit when autocomplete is closed or outside div clicked.\n\n  @Input() triggerApiLoadEvent = false; // user has to send as true  to enable apilaztload event\n  @Output() emitApiLoadEvent = new EventEmitter(); // when scroll is in botton, emit event for further API load.\n\n  @Input() triggerAutoCompleteOpenEvent = false;\n  @Output() emitAutoCompleteOpenEvent = new EventEmitter();\n\n  /* No input required from user. Its mandatory to emit selected value. */\n  @Output() emitSelectedValue = new EventEmitter(); // emits selected value.\n\n  @Input() triggerClearSelectionEvent = false;\n  @Output() emitClearSelectedEvent = new EventEmitter(); // emits event when selectedValue is cleared.\n\n  @ViewChild('unOrderedList') unOrderedList!: ElementRef<HTMLElement>;\n\n  @ViewChild('autoCompleteContainer') autoCompleteContainer!: ElementRef<HTMLElement>;\n\n  @ViewChildren('autocompleteListElement') autocompleteListElement!: QueryList<ElementRef<HTMLLIElement>>;\n\n  @ViewChild('listContainer') listContainer!: ElementRef<HTMLElement>;\n  \n  @ViewChild('fieldContainer') fieldContainer!: ElementRef<HTMLElement>;\n\n  @ViewChild('searchInput') searchInput!: ElementRef;\n\n  @ViewChild('viewMoreElement') viewMoreElement!: ElementRef;\n\n  @Input() searchFn: any;\n\n  @Input() disableListFn: Function | undefined;\n\n  @Input() isScrollThresholdRequired = true;\n\n  @Input() ariaRole = 'autocomplete';\n\n  @Input() ariaNoSearchResult = \"No reults found.\";\n\n  @Input() ariaULList = \"Parent List\";\n\n  @Input() ariaListContainer = \"List container\";\n\n  @Input() ariaInputField = \"Enter text to search autocomplete.\";\n\n  @Input() ariaInputLabel = \"Automcomplete search\";\n\n  @Input() ariaViewMore = \"View more list\";\n\n  @Input() showInputlabel = false;\n\n  @Input() inputLabel = \"Enter or Search value\";\n\n  @Input() defaultValue: any | undefined;\n\n  @Input() inspectAutoCompleteList = false;\n\n  @Input() viewMoreText = 'View more';\n\n  @Input() showViewMore = true;\n\n  @Input() optViewMoreOnlyForApiCall = false;\n\n  @Input() additionalData: AdditionalDataType | undefined;\n\n  @Input() loadAllDataAtOnce = false;\n\n  scrollEventListener: any;\n\n  keyboardEventListner: any;\n\n  autocompleteWidthListener: any;\n\n  isScrolling: any;\n\n  isAutoCompleteDivClicked = false;\n\n  searchValue: any;\n\n  scrollDownIndex = 0;\n  \n  isInputFieldDirty = false;\n\n  isEventEmitted = false;\n\n  isViewMoreApiBeingExecuted = false;\n\n  isViewMoreFocused = false;\n\n  theTimeOut: any;\n\n  displayViewMoreButton = false;\n\n  loaderTimer: Subscription | undefined ;\n  scrollTimer: Subscription | undefined ;\n\n  numberRegex = /^\\-?\\d+\\.?\\d*$/;\n\n  listFocusIndex = -1;\n\n  constructor(private renderer: Renderer2) {}\n\n  ngOnInit() {\n    if (this.defaultValue) {\n      if (this.objectProperty) {\n        let getValue;\n        if (typeof this.defaultValue === 'object') {\n          if (this.isRelativeSearch()) {\n            if (!this.isSetDefaultValueWithACustomFunction()) { return; }\n            this.callSetDefaultValueWithACustomFunction().then((value: any) => {\n              if (value && value?.[this.objectProperty!]) {\n                this.searchValue = value[this.objectProperty!];\n              }\n            }).catch(err => console.log(err));\n            return;\n          } else if (this.isTypeNumber() || (this.isSearchValueANumber(this.defaultValue[this.objectProperty!]))) {\n            getValue = this.dropdownData.find(dt => dt[this.objectProperty!]?.toString().toLowerCase().trim() === (this.defaultValue[this.objectProperty!] + '')?.toString().toLowerCase().trim());\n          } else {\n            getValue = this.dropdownData.find(dt => dt[this.objectProperty!]?.toString().toLowerCase().trim() === this.defaultValue[this.objectProperty!]?.toString().toLowerCase().trim());\n          }\n        } else {\n          if (this.isRelativeSearch()) {\n            if (!this.isSetDefaultValueWithACustomFunction()) { return; }\n            this.callSetDefaultValueWithACustomFunction().then((value: any) => {\n              if (value && value?.[this.objectProperty!]) {\n                this.searchValue = value[this.objectProperty!];\n              }\n            }).catch(err => console.log(err));\n            return;\n          } else if (this.isTypeNumber() || (this.isSearchValueANumber(this.defaultValue))) {\n            getValue = this.dropdownData.find(dt => dt[this.objectProperty!]?.toString().toLowerCase().trim() === (this.defaultValue + '')?.toString().toLowerCase().trim());\n          } else {\n            getValue = this.dropdownData.find(dt => dt[this.objectProperty!]?.toString().toLowerCase().trim() === this.defaultValue?.toString().toLowerCase().trim());\n          }\n        }\n        if (getValue) {\n          this.searchValue = getValue[this.objectProperty];\n        }\n      } else {\n        let getValue;\n        if (typeof this.defaultValue === 'object') {\n          throw Error('defaultValue being an object, expects objectProperty value.')\n        } else {\n          getValue = this.dropdownData.find(dt => dt?.toString().toLowerCase().trim() === this.defaultValue?.toString().toLowerCase().trim());\n        }\n        if (getValue) {\n          this.searchValue = getValue;\n        }\n      }\n    } else if(this.isRelativeSearch() && this.isSetDefaultValueWithACustomFunction()) {\n      this.callSetDefaultValueWithACustomFunction().then((value: any) => {\n        if (value && value?.[this.objectProperty!]) {\n          this.searchValue = value[this.objectProperty!];\n        }\n      }).catch(err => console.log(err));\n      return;\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (!this.isEventEmitted) { return; }\n    if (changes['dropdownData']['previousValue'] && changes['dropdownData']['currentValue'].length > changes['dropdownData']['previousValue'].length) {\n      this.isEventEmitted = false;\n      this.showSpinner(false);\n      if (this.isViewMoreApiBeingExecuted) {\n        this.isViewMoreApiBeingExecuted = false;\n      }\n      if (this.searchValue && this.isInputFieldDirty) {\n        const dropdownData = this.updateDropdownDataOnSearch(this.searchValue);\n        this.searchedData = dropdownData;\n        this.findThresholdAndSetFilteredData(dropdownData);\n      } else {\n        if (this.loadAllDataAtOnce) {\n          this.filteredData = [...this.dropdownData];\n          this.scrollDownIndex = this.dropdownData.length;\n          return;\n        }\n        this.findThresholdAndSetFilteredData(this.dropdownData);\n      }\n    }\n  }\n\n  ngAfterViewInit() {\n    this.scrollEventListener = this.renderer.listen(this.unOrderedList.nativeElement, 'scroll', (event: any) => {\n      if (event.target.offsetHeight + event.target.scrollTop >= event.target.scrollHeight) {\n        if ((typeof this.totalRecords !== 'undefined' && this.scrollDownIndex >= this.totalRecords)) {\n          this.displayViewMoreButton = false;\n          return;\n      }\n      this.loadNextSetData();\n      } else if (this.unOrderedList.nativeElement.scrollTop < 10 && this.filteredData.length > this.initialVisibleData) {\n        this.initData();\n      }\n    });\n    if (this.searchInput?.nativeElement) {\n      this.keyboardEventListner = this.renderer.listen(this.searchInput.nativeElement, 'keydown', (event: any) => this.keyboardEvent(event));\n    }\n  }\n\n  keyboardEvent(event: any) {\n    if (this.filteredData.length <= 0 && event?.keyCode !== 27) { return; }\n    let id; let getIndex;\n    switch (event?.keyCode) {\n      case 27:\n        if (this.isAutoCompleteDivClicked) {\n          this.isAutoCompleteDivClicked = false;\n          this.searchInput?.nativeElement?.blur();\n          if (this.listFocusIndex !== -1) {\n            this.autocompleteListElement.get(this.listFocusIndex)?.nativeElement?.classList.remove('autocomplete-keydown-background');\n          }\n          if (this.isViewMoreFocused) {\n            this.viewMoreElement.nativeElement?.classList.remove('autocomplete-keydown-viewmore');\n          }\n          this.listFocusIndex = -1;\n          this.isViewMoreFocused = false;\n        }\n        return;\n      case 13:\n        if (this.isViewMoreFocused) {\n          this.onViewMore(null);\n          this.isViewMoreFocused = false;\n          return;\n        }\n        if(this.autocompleteListElement.get(this.listFocusIndex)?.nativeElement.classList.contains('disable-list-element')) {\n          return;\n        }\n        const getData = this.filteredData[this.listFocusIndex];\n        if (getData !== undefined && getData !== null) {\n          this.selectedItem(this.listFocusIndex, getData);\n          this.autocompleteListElement.get(this.listFocusIndex)?.nativeElement.classList.remove('autocomplete-keydown-background');\n          this.searchInput?.nativeElement?.blur();\n        }       \n        return;\n      case 40:\n        if (this.listFocusIndex + 1 === this.filteredData.length) {\n          if (this.displayViewMoreButton) {\n            this.viewMoreElement?.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n            this.viewMoreElement?.nativeElement.classList.add('autocomplete-keydown-viewmore');\n            this.autocompleteListElement.get(this.listFocusIndex)?.nativeElement.classList.remove('autocomplete-keydown-background');\n            this.isViewMoreFocused = true;\n          }\n          return;\n        }\n        this.listFocusIndex = this.listFocusIndex + 1;\n        id = this.autocompleteListElement.get(this.listFocusIndex)?.nativeElement.id;\n        if (id === undefined || id === null) { return; }\n        if (!id.includes('autocomplete-li-element-')) { return; }\n        getIndex = Number(id.substring(id.lastIndexOf('-') + 1));\n        if (typeof getIndex !== 'number') { return; }\n        if (this.scrollTimer) { this.scrollTimer.unsubscribe(); }\n        this.scrollTimer = timer(20).subscribe(() => {\n          this.autocompleteListElement.get(this.listFocusIndex)?.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n          this.autocompleteListElement.get(this.listFocusIndex)?.nativeElement.classList.add('autocomplete-keydown-background');\n          if (this.listFocusIndex > 0) {\n            this.autocompleteListElement.get(this.listFocusIndex - 1)?.nativeElement.classList.remove('autocomplete-keydown-background');\n            if (this.listFocusIndex + 1 === this.filteredData.length && this.displayViewMoreButton) {\n              this.unOrderedList.nativeElement?.scrollTo(0, this.unOrderedList.nativeElement.scrollHeight + 10);\n            }\n          }\n        });\n        return;\n      case 38:\n        if (this.listFocusIndex <= 0) { return; }\n        if (this.isViewMoreFocused) {\n          this.isViewMoreFocused = false;\n          this.viewMoreElement?.nativeElement.classList.remove('autocomplete-keydown-viewmore');\n        } else {\n          this.listFocusIndex = this.listFocusIndex - 1;\n        }\n        id = this.autocompleteListElement.get(this.listFocusIndex)?.nativeElement.id;\n        if (id === undefined || id === null) { return; }\n        if (!id.includes('autocomplete-li-element-')) { return; }\n        getIndex = Number(id.substring(id.lastIndexOf('-') + 1));\n        if (typeof getIndex !== 'number') { return; }\n        if (this.scrollTimer) { this.scrollTimer.unsubscribe(); }\n        this.scrollTimer = timer(20).subscribe(() => {\n          this.autocompleteListElement.get(this.listFocusIndex)?.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n          this.autocompleteListElement.get(this.listFocusIndex)?.nativeElement.classList.add('autocomplete-keydown-background');\n          this.autocompleteListElement.get(this.listFocusIndex + 1)?.nativeElement.classList.remove('autocomplete-keydown-background');\n        });\n        return;\n      default:\n        return;\n    }\n  }\n\n\n  setAutoCompleteWidth() {\n    const getListId = this.listContainer.nativeElement.style;\n    const getInputId = document.getElementById('searchInput')?.clientWidth;\n    if (getListId && getInputId) {\n      getListId.width = getInputId + 'px';\n    }\n  }\n\n  handleOnFocusEvent(event: any) {\n    if (this.isAutoCompleteDisabled) { return; }\n    this.isAutoCompleteDivClicked = true;\n    this.setAutoCompleteWidth();\n    this.autocompleteWidthListener = this.renderer.listen(window, 'resize', () => this.setAutoCompleteWidth());\n    if (this.emitAutoCompleteOpenEvent) {\n      this.emitAutoCompleteOpenEvent.emit(event)\n    }\n    if (this.filteredData.length <= 0) {\n      if (this.isInputFieldDirty) {\n        this.onSearch(null);\n      } else {\n        this.setData();\n      }\n    }\n    this.isDisplayViewButton();\n  }\n\n  handleOnBlurEvent(event: any) {\n    if (this.inspectAutoCompleteList) { return; }\n    if ((event?.relatedTarget as HTMLElement)?.classList?.contains('arrow')) {\n      return;\n    }\n    if ((event?.relatedTarget as HTMLElement)?.classList?.contains('unorder-list')) {\n      if (!this.searchValue) {\n        document.getElementById('searchInput')?.focus();\n      }\n      return;\n    }\n    if ((event?.relatedTarget as HTMLElement)?.classList?.contains('disable-list-element')) {\n      if (!this.searchValue) {\n        document.getElementById('searchInput')?.focus();\n      }\n      return;\n    }\n    if ((event?.relatedTarget as HTMLElement)?.classList?.contains('view-more')) {\n      if (!this.searchValue) {\n        document.getElementById('searchInput')?.focus();\n      }\n      return;\n    }\n    if ((event?.relatedTarget as HTMLElement)?.classList?.contains('autocomplete-data-list')) {\n      return;\n    }\n    if (this.inspectAutoCompleteList) {\n      console.warn(`You have turned off blur event in autocomplete module which will not close autocomplete list. Hope you know what you are doing. Update to false after inspect is complete.`)\n      return;\n    }\n    this.closeAutoComplete(event || null);\n    this.isAutoCompleteDivClicked = false;\n    this.filteredData = [];\n\n  }\n\n  initData() {\n    const data = this.isInputFieldDirty && this.searchedData.length > 0 && this.searchValue ? this.searchedData.slice(0, this.initialVisibleData) : this.dropdownData.slice(0, this.initialVisibleData);\n    this.filteredData = data;\n    this.scrollDownIndex = data.length;\n    return;\n  }\n\n  loadNextSetData() {\n    try {\n      if (!this.isAutoCompleteDivClicked) { return; }\n      if (this.dropdownData.length <= this.initialVisibleData && !this.triggerApiLoadEvent) {\n        return;\n      }\n      if (this.scrollTimer) { this.scrollTimer.unsubscribe(); }\n      this.scrollTimer = timer(150).subscribe(() => {\n        this.nextSet();\n      });\n    } catch (err) {\n      console.log(err);\n    }\n  }\n\n  nextSet() {\n    const ulHeight = this.unOrderedList.nativeElement.scrollHeight;\n    const containerHeight = this.listContainer.nativeElement.scrollHeight;\n    const calculateScrollDiff = Math.ceil((containerHeight * 100) / ulHeight);\n    if (calculateScrollDiff > 70) {\n        return;\n    }\n    let dropdownData;\n    dropdownData = this.searchedData.length > 0 ? [...this.searchedData] : [...this.dropdownData];\n    if (this.dropdownData.length === this.scrollDownIndex || this.searchedData.length === this.scrollDownIndex) {\n      if (!this.isEventEmitted && this.triggerApiLoadEvent) {\n        if (this.optViewMoreOnlyForApiCall) {\n          this.displayViewMoreButton = true;\n          this.scrollTimer = timer(150).subscribe(() => {\n            this.unOrderedList.nativeElement?.scrollTo(0, this.unOrderedList.nativeElement.scrollHeight + 10);\n          });\n          return;\n        }\n        this.emitApiLoadEvent.emit({ dataIndex: this.dropdownData.length });\n        this.isEventEmitted = true;\n        if (this.showLoadingSpinner) {\n          this.showSpinner(true);\n        this.scrollTimer = timer(150).subscribe(() => {\n          this.unOrderedList.nativeElement?.scrollTo(0, this.unOrderedList.nativeElement.scrollHeight + 10);\n        });\n        }\n      }\n      return;\n    }\n    this.findThresholdAndSetFilteredData(dropdownData);\n  }\n\n  setFilteredDataIfSearchValueExists(dropdownData: any[]) {\n    let getNextDataSet: any;\n    getNextDataSet = dropdownData.slice(this.scrollDownIndex, this.scrollDownIndex + this.initialVisibleData);\n    if (getNextDataSet.length > 0) {\n      this.scrollDownIndex = this.scrollDownIndex + getNextDataSet.length;\n      if (this.isInputFieldDirty && (this.searchValue && this.searchValue !== '')) {\n        if (this.objectProperty) {\n          getNextDataSet = getNextDataSet.filter((dt: any) => dt[this.objectProperty!]?.toString().toLowerCase().includes(this.searchValue?.toString()?.toLowerCase().trim()));\n        } else {\n          getNextDataSet = getNextDataSet.filter((dt: any) => dt?.toString().toLowerCase().includes(this.searchValue?.toString()?.toLowerCase().trim()));\n        }\n      }\n      this.filteredData.push(...getNextDataSet);\n    }\n  }\n\n  findThresholdAndSetFilteredData(dropdownData: any[]) {\n    if (dropdownData.length > this.filteredData.length) {\n      const getThresholdData = Math.ceil(this.filteredData.length / this.scrollThreshold);\n      if (this.isScrollThresholdRequired && getThresholdData >= this.initialVisibleData) {\n        this.filteredData.splice(0, this.initialVisibleData);\n        this.setFilteredDataIfSearchValueExists(dropdownData); \n      } else {\n        this.setFilteredDataIfSearchValueExists(dropdownData); \n      }\n      this.unOrderedList.nativeElement?.scrollTo(0, Math.ceil((this.unOrderedList.nativeElement.scrollHeight * 60) / 100));\n      // this.scrollTimer = timer(150).subscribe(() => {\n      //   this.unOrderedList.nativeElement?.scrollTo(0, Math.ceil((this.unOrderedList.nativeElement.scrollHeight * 50) / 100));\n      // });\n    }\n  }\n\n  updateDropdownDataOnSearch(searchedValue: any) {\n    let dropdownData = [];\n    if (this.objectProperty) {\n      if (!this.isRelativeSearch()) {\n        if (this.isTypeNumber()) {\n          dropdownData = this.dropdownData.filter(dt => (dt[this.objectProperty!] + '')?.includes(searchedValue));\n        } else {\n          dropdownData = this.dropdownData.filter(dt => dt[this.objectProperty!]?.toString().toLowerCase().includes(searchedValue.toLowerCase().trim()));\n        }\n      } else if (typeof this.additionalData?.relativeSearch === 'object' && Object.prototype.hasOwnProperty.call(this.additionalData.relativeSearch, 'customRelativeSearchFunction') && typeof this.additionalData.relativeSearch.customRelativeSearchFunction === 'function') {\n        this.callCustomRelativeSearchFunction()?.then((searchResponse: any) => {\n          this.setSearchedData(searchResponse || [])\n        }).catch(err => {\n          console.log(err);\n          this.filteredData = []\n        });\n      } else {\n        dropdownData = this.executeRelativeSearch();\n      }\n    } else {\n      if (this.isTypeNumber()) {\n        dropdownData = this.dropdownData.filter(dt => (dt + '')?.includes(searchedValue + ''));\n      } else {\n        dropdownData = this.dropdownData.filter(dt => dt?.toString().toLowerCase().includes(searchedValue?.toLowerCase().trim()));\n      }\n    }\n    return dropdownData;\n  }\n\n  setData() {\n    const data = [...this.dropdownData];\n    if (this.loadAllDataAtOnce) {\n      this.filteredData = data;\n      this.scrollDownIndex = data.length;\n      this.isDisplayViewButton();\n      return;\n    }\n    if (data.length <= this.initialVisibleData) {\n        this.filteredData = data;\n        this.scrollDownIndex = data.length;\n        return;\n    }\n    let getFirstSetData = data.slice(0, this.initialVisibleData);\n    this.scrollDownIndex = getFirstSetData.length;\n    if (this.isInputFieldDirty && this.isTypeNumber()) {\n      if (!this.isSearchValueANumber(this.searchValue)) {\n        this.filteredData = [];\n        return;\n      }\n      if (this.objectProperty) {\n        getFirstSetData = getFirstSetData.filter(dt => dt[this.objectProperty!]?.includes(this.searchValue));\n      } else {\n        getFirstSetData = getFirstSetData.filter(dt => dt?.includes(this.searchValue));\n      }\n    } else if (this.isInputFieldDirty && (this.searchValue && this.searchValue !== '')) {\n      if (this.objectProperty) {\n        getFirstSetData = getFirstSetData.filter(dt => dt[this.objectProperty!]?.toString().toLowerCase().includes(this.searchValue?.toString()?.toLowerCase().trim()));\n      } else {\n        getFirstSetData = getFirstSetData.filter(dt => dt?.toString().toLowerCase().includes(this.searchValue?.toString()?.toLowerCase().trim()));\n      }\n    }\n    this.filteredData = getFirstSetData;\n    return;\n  }\n\n  async onSearch(_event: any) {\n    let searchedValue: any;\n    if (!this.isAutoCompleteDivClicked) {\n      this.isAutoCompleteDivClicked = true;\n    }\n    if (this.isTypeNumber() && this.isSearchValueANumber(this.searchValue)) {\n      searchedValue = Number(this.searchValue);\n    } else {\n      searchedValue = this.searchValue;\n    }\n    if ((!this.searchValue || this.searchValue?.trim() === '')) {\n      this.searchedData = [];\n      this.initData();\n      this.unOrderedList.nativeElement?.scrollTo(0, 0);\n      return;\n    }\n    if (!this.isInputFieldDirty) {\n      this.isInputFieldDirty = true;\n    }\n    this.scrollDownIndex = 0; //reset\n    if (this.searchFn && typeof this.searchFn === 'function') {\n        const result = await this.searchFn(this.searchValue, this.dropdownData);\n        if (result && result.length > 0) {\n            this.searchedData = result;\n            const getFirstSetData = result.slice(0, this.initialVisibleData);\n            this.scrollDownIndex = this.scrollDownIndex + getFirstSetData.length;\n            this.filteredData = getFirstSetData;\n            this.isDisplayViewButton();\n            return;\n        }\n    }\n    const getSearchData: any = this.updateDropdownDataOnSearch(searchedValue);\n    if (getSearchData.length > 0) {\n      this.setSearchedData(getSearchData);\n      return;\n    }\n    this.filteredData = [];\n    return;\n  }\n\n  setSearchedData(getSearchData: any) {\n    if (getSearchData.length > 0) {\n      const getFirstSetData = getSearchData.slice(0, this.initialVisibleData);\n      this.scrollDownIndex = this.scrollDownIndex + getFirstSetData.length;\n      this.searchedData = getSearchData;\n      this.filteredData = getFirstSetData;\n      this.isDisplayViewButton();\n      return;\n    }\n  }\n\n  async customSearch(event: any) {\n    try {\n      if (!this.searchFn || this.searchFn.constructor !== Function) { throw new Error(\"Custom search should be a function.\"); }\n      const filteredData = await this.searchFn(event)\n      this.filteredData = [...filteredData];\n    } catch (err) {\n      console.log(err);\n    }\n  }\n\n  selectedItem(index: number, data: any) {\n    try {\n      if (this.disableProperty && data[this.disableProperty]) {\n        return;\n      }\n      if (this.disableListFn !== undefined && this.disableListFn !== null && this.disableListFn(index, data)) {\n        return;\n      }\n      if (this.objectProperty && data[this.objectProperty]) {\n        this.searchValue = data[this.objectProperty] + '';\n      } else {\n        this.searchValue = data + '';\n      }\n      this.closeAutoComplete();\n      this.isInputFieldDirty = false;\n      this.emitSelectedValue.emit(data);\n    } catch(err) {\n      console.log(err);\n    }\n  }\n\n  isRelativeSearch(): boolean {\n    return this.additionalData && this.additionalData.relativeSearch ? true : false;\n  }\n\n  isSetDefaultValueWithACustomFunction(): boolean {\n    if (typeof this.additionalData?.relativeSearch === 'object' && typeof this.additionalData.relativeSearch?.setDefaultValueWithACustomFunction === 'function') {\n      return true;\n    }\n    return false;\n  }\n\n  callSetDefaultValueWithACustomFunction() {\n    return new Promise((resolve, reject) => {\n        const result: any[] = (this.additionalData?.relativeSearch as RelativeSearchType)?.setDefaultValueWithACustomFunction!(this.searchValue);\n        if (result) {\n          resolve(result);\n        }\n        reject([]);\n      });\n  }\n\n  callCustomRelativeSearchFunction() {\n    const relativeSearch = this.additionalData?.relativeSearch as RelativeSearchType;\n      return new Promise((resolve, reject) => {\n        const result: any[] = relativeSearch?.customRelativeSearchFunction!(this.searchValue);\n        if (result) {\n          resolve(result);\n        }\n        reject([]);\n      });\n  }\n\n  executeRelativeSearch() {\n    const relativeSearch = this.additionalData?.relativeSearch;\n    if (!relativeSearch) { return [] }\n    let searchAttributes: string[] = [];\n    let isCustomFunction = false;\n    if (typeof relativeSearch === 'boolean' && relativeSearch === true) {\n      for (const dObj in this.dropdownData[0]) {\n        searchAttributes.push(dObj);\n      }\n    } else if (typeof relativeSearch === 'object' && Object.keys(relativeSearch).length > 0) {\n      if (Object.prototype.hasOwnProperty.call(relativeSearch, 'includeOnly') && relativeSearch.includeOnly!.length > 0) {\n        searchAttributes = [...relativeSearch.includeOnly!];\n      } else {\n        for (const dObj in this.dropdownData[0]) {\n          searchAttributes.push(dObj);\n        }\n      }\n      if (Object.prototype.hasOwnProperty.call(relativeSearch, 'customRelativeSearchFunction') && typeof relativeSearch.customRelativeSearchFunction === 'function') {\n        isCustomFunction = true;\n      }\n    }\n    if (searchAttributes.length > 0) {\n      return this.runDeepSearch((this.searchValue + '').toLowerCase().trim(), searchAttributes);\n    }\n    return [];\n  }\n\n  runDeepSearch(searchKey: string, attributes: string[]) {\n    if (!searchKey) { return [] };\n    return this.dropdownData.filter((item: any) => attributes.some((key) => {\n      const value = item[key];\n      return value.toString().toLowerCase().includes(searchKey)\n    }));\n  }\n\n  showSpinner(bool: boolean) {\n    if (this.showLoadingSpinner) { this.showDataLoader = bool; }\n    if (bool) {\n      this.unOrderedList.nativeElement.scrollTop = this.unOrderedList.nativeElement.scrollHeight;\n    }\n  }\n\n  closeAutoComplete(event?: any) {\n    this.unOrderedList.nativeElement.scrollTo(0, 0);\n    this.filteredData = [];\n    this.scrollDownIndex = 0;\n    this.isAutoCompleteDivClicked = false;\n    if (this.triggerBlurEvent) {\n      this.emitBlurEvent.emit({ event: event || null, value: this.searchValue, blur: true  });\n    }\n    this.displayViewMoreButton = false;\n    this.listFocusIndex = -1;\n    if (this.autocompleteWidthListener !== undefined) {\n      // In dev mode listener may still get executed. In prod mode, it should be fine.\n      this.autocompleteWidthListener();\n    }\n  }\n\n  setDefaults() {\n    this.filteredData = [];\n    this.dropdownData = [];\n    this.searchedData = [];\n    this.totalRecords = undefined;\n    this.isAutoCompleteDivClicked = false;\n    this.triggerClearSelectionEvent = false;\n    this.showClearOption = false;\n    this.isInputFieldDirty = false;\n    this.showSpinner(false);\n    if (this.loaderTimer) { this.loaderTimer.unsubscribe(); }\n    if(this.scrollTimer) { this.scrollTimer.unsubscribe(); }\n    if (this.theTimeOut) { this.theTimeOut = null; }\n    // if (this.scrollEventListener) { document.removeEventListener('scroll', this.scrollEventListener, false); }\n    if (this.searchFn) { this.searchFn = undefined; }\n  }\n\n  onViewMore(_event: any) {\n    if (this.triggerApiLoadEvent && !this.isEventEmitted) {\n      this.emitApiLoadEvent.emit({ dataIndex: this.dropdownData.length });\n      this.isEventEmitted = true;\n      this.isViewMoreApiBeingExecuted = true;\n      if (this.showLoadingSpinner) {\n        this.showSpinner(true);\n      }\n    }\n  }\n\n  /* This wont work for searchValue filter. check and fix*/\n  isDisplayViewButton() {\n    if (typeof this.totalRecords !== 'undefined' && this.dropdownData.length >= this.totalRecords) {\n      this.displayViewMoreButton = false;\n      return;\n    }\n    if (this.searchValue && this.searchValue !== '' && this.triggerApiLoadEvent && !this.isEventEmitted) {\n      this.displayViewMoreButton = true;\n      return;\n    }\n    if (this.scrollDownIndex >= this.dropdownData.length) {\n      this.displayViewMoreButton = true;\n      return;\n    }\n    this.displayViewMoreButton = false;\n    return;\n  }\n\n  toggleDropdown(event: any) {\n    if (this.isAutoCompleteDivClicked) {\n      this.handleOnBlurEvent(event);\n      return;\n    }\n    this.handleOnFocusEvent(event);\n    return;\n  }\n\n  isTypeNumber() {\n    return this.isNumber ? true : false;\n  }\n\n  isSearchValueANumber(value: any) {\n    return this.numberRegex.test(value);\n  }\n\n  identify(index: number, item: any) { return item.index; }\n\n  clearSearch() {\n    this.searchValue = null;\n    if (this.triggerClearSelectionEvent) {\n      this.emitClearSelectedEvent.emit({clear: true});\n    }\n  }\n\n  isInputEvent(event: any) {\n    if(event.constructor !== InputEvent) { return false; }\n    return true;\n  }\n\n  ngOnDestroy() {\n    this.setDefaults();\n     // In dev mode listener may still get executed. In prod mode, it should be fine.\n    this.scrollEventListener();\n    this.keyboardEventListner();\n  }\n}\n","<div #autoCompleteContainer\n[ngClass]=\"customClass && customClass.parentContainerClass ? customClass.parentContainerClass : ''\"\n[ngStyle]=\"customStyle && customStyle.parentContainerStyle ? customStyle.parentContainerStyle : null\"\nclass=\"auto-complete-textfield-container\">\n<div\n  class=\"label-container\"\n  [ngClass]=\"customClass && customClass.inputLabelContainerClass ? customClass.inputLabelContainerClass : ''\"\n  [ngStyle]=\"customStyle && customStyle.inputLabelContainerStyle ? customStyle.inputLabelContainerStyle : null\"\n  >\n  <label\n    class=\"label-value\"\n    [ngClass]=\"customClass && customClass.inputLabelClass ? customClass.inputLabelClass : ''\"\n    [ngStyle]=\"customStyle && customStyle.inputLabelStyle ? customStyle.inputLabelStyle : null\"\n    [attr.aria-label]=\"ariaInputLabel\"\n    *ngIf=\"showInputlabel\"\n    for=\"searchInput\">{{inputLabel}}\n  </label>\n</div>\n<div class=\"field-container\"\n  [ngClass]=\"customClass && customClass.inputFieldContainerClass ? customClass.inputFieldContainerClass : ''\"\n  [ngStyle]=\"customStyle && customStyle.inputFieldContainerStyle ? customStyle.inputFieldContainerStyle : null\"\n  #fieldContainer>\n  <input\n    #searchInput\n    id=\"searchInput\"\n    [attr.role]=\"ariaRole\"\n    [(ngModel)]=\"searchValue\"\n    [attr.aria-label]=\"ariaInputField\"\n    name=\"searchValue\"\n    (input)=\"!searchFn ? onSearch($event) : customSearch($event)\"\n    (focus)=\"handleOnFocusEvent($event)\"\n    (blur)=\"handleOnBlurEvent($event)\"\n    [disabled]=\"isAutoCompleteDisabled\"\n    class=\"auto-complete-textfield\"\n    [ngClass]=\"customClass && customClass.inputFieldClass ? customClass.inputFieldClass : ''\"\n    [ngStyle]=\"customStyle && customStyle.inputFieldStyle ? customStyle.inputFieldStyle : null\"\n    type=\"text\"\n    autocomplete=\"off\"\n    [placeholder]=\"placeholder\"/>\n        <span tabindex=\"0\" *ngIf=\"showdropDownArrow\" class=\"arrow down\" (click)=\"toggleDropdown($event)\"></span>\n        <span (click)=\"clearSearch()\" *ngIf=\"searchValue && showClearOption\"\n        class=\"auto-complete-remove-selection\">&times;</span>\n        <ng-content select=\"[textField]\"></ng-content>\n  <div\n    #listContainer\n    [ngClass]=\"[customClass && customClass.listContainerClass ? customClass.listContainerClass : '', isAutoCompleteDivClicked ? 'showDropdown' : '']\"\n    [ngStyle]=\"customStyle && customStyle.listContainerStyle ? customStyle.listContainerStyle : null\"\n    class=\"auto-complete-list\" [attr.aria-label]=\"ariaListContainer\">\n    <div id=\"list-container\">\n      <ul #unOrderedList\n        [attr.aria-label]=\"ariaULList\"\n        id=\"list-id\"\n        class=\"unorder-list\"\n        [ngClass]=\"customClass && customClass.dropdownUnorderedListClass ? customClass.dropdownUnorderedListClass : ''\"\n        [ngStyle]=\"customStyle && customStyle.dropdownUnorderedListStyle ? customStyle.dropdownUnorderedListStyle : null\">\n        <ng-container *ngIf=\"isAutoCompleteDivClicked\">\n          <ng-container\n          *ngFor=\"let data of filteredData; let i = index; trackBy: customTrackBy ? customTrackBy: identify\">\n            <li\n              #autocompleteListElement\n              id=\"autocomplete-li-element-{{i}}\"\n              tabindex=\"0\"\n              attr.aria-label=\"{{i}}\"\n              [attr.aria-disabled]=\"disableListFn ? disableListFn(i, data) : (disableProperty) ? data[disableProperty] : false\"\n              [ngClass]=\"[customClass && customClass.dropdownListClass ? customClass.dropdownListClass : '',\n                ((!customClass || !customClass.disableListClass) && ((disableListFn && disableListFn(i, data)) || (disableProperty && data[disableProperty]))) ? 'disable-list-element' : '',\n                (customClass && customClass.disableListClass && ((disableListFn && disableListFn(i, data)) || (disableProperty && data[disableProperty]) )) ? customClass.disableListClass : '']\"\n              [ngStyle]=\"customStyle && customStyle.dropdownListStyle ? customStyle.dropdownListStyle : null\"\n              class=\"autocomplete-data-list\"\n              (click)=\"selectedItem(i, data)\">\n              {{!objectProperty ? data : data[objectProperty]}}\n            </li>\n        </ng-container>\n        </ng-container>\n        <li *ngIf=\"showLoadingSpinner && showDataLoader && !isCustomSpinner\" class=\"auto-complete-list-spinner\"><span class=\"autocomplete-plugin-loader\"></span></li>\n        <li *ngIf=\"showLoadingSpinner && showDataLoader && isCustomSpinner\" class=\"auto-complete-list-spinner\">\n          <ng-content select=\"[customSpinner]\"></ng-content>\n        </li>\n          <li\n            *ngIf=\"filteredData.length <= 0 && isAutoCompleteDivClicked\"\n            [attr.aria-label]=\"ariaNoSearchResult\"\n            [ngClass]=\"customClass && customClass.noResultClass ? customClass.noResultClass : ''\"\n            class=\"autocomplete-data-list noSearchResult\"\n            [ngStyle]=\"customStyle && customStyle.noResultStyle ? customStyle.noResultStyle : null\">\n            {{noSearchResultMessage}}\n          </li>\n            <li\n            #viewMoreElement\n            *ngIf=\"\n            isAutoCompleteDivClicked &&\n            showViewMore &&\n            !isEventEmitted &&\n            !showDataLoader &&\n            triggerApiLoadEvent &&\n            displayViewMoreButton\"\n            tabindex=\"0\"\n            [attr.aria-label]=\"ariaViewMore\"\n            (click)=\"onViewMore($event); $event.stopPropagation()\"\n            [ngClass]=\"customClass && customClass.viewMoreClass ? customClass.viewMoreClass : ''\"\n            [ngStyle]=\"customStyle && customStyle.viewMoreStyle ? customStyle.viewMoreStyle : null\"\n            class=\"autocomplete-data-list view-more\">{{ viewMoreText }}</li>\n      </ul>\n    </div>\n  </div>\n</div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { AutocompleteComponent } from './autocomplete.component';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n  declarations: [\n    AutocompleteComponent\n  ],\n  imports: [\n    CommonModule,\n    FormsModule\n  ],\n  exports: [\n    AutocompleteComponent\n  ]\n})\nexport class NgAutocompletePluginModule { }\n","/*\n * Public API Surface of autocomplete\n */\n\nexport * from './lib/autocomplete.component';\nexport * from './lib/autocomplete.module';\nexport * from './types/autocomplete-type';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}