{"version":3,"sources":["jsdelivr-header.js","/npm/src/auto-complete-options.model.ts","/npm/src/auto-complete-styles.model.ts","/npm/src/auto-complete/auto-complete.component.ts","/npm/src/bold-prefix.pipe.ts","/npm/src/main.ts"],"names":[],"mappings":"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","file":"/npm/ionic4-auto-complete@2.9.9/bundles/ionic4-auto-complete.umd.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/ionic4-auto-complete@2.9.9/bundles/ionic4-auto-complete.umd.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","export class AutoCompleteOptions {\n  public animated:boolean = false;\n  public color:string|null = null;\n  public autocomplete:'on'|'off' = 'off';\n  public autocorrect:'on'|'off' = 'off';\n  public cancelButtonIcon:string = 'arrow-round-back';\n  public cancelButtonText:string = 'Cancel';\n  public clearIcon:string = 'close-circle';\n  public clearInput:boolean = false;\n  public clearOnEdit:boolean = false;\n  public debounce:number = 250;\n  public mode:'ios'|'md' = 'md';\n  public noItems:string = 'No items found.';\n  public placeholder:string = 'Search';\n  public searchIcon:string = 'search';\n  public showCancelButton:boolean = false;\n  public spellcheck:'on'|'off' = 'off';\n  public type:string = 'search';\n  public value:any|any[];\n\n  constructor() {\n\n  }\n}\n","export class AutoCompleteStyles {\n  public list? = {};\n  public listItem? = {};\n  public searchbar? = {};\n}\n","import {\n  Component,\n  DoCheck,\n  Input,\n  Output,\n  EventEmitter,\n  TemplateRef,\n  ViewChild,\n  HostListener,\n  ElementRef,\n  AfterViewChecked,\n  ViewContainerRef\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\n\nimport {from, Observable, Subject} from 'rxjs';\nimport {finalize} from 'rxjs/operators';\n\nimport {AutoCompleteOptions} from '../auto-complete-options.model';\nimport {AutoCompleteService} from '../auto-complete.service';\nimport {AutoCompleteStyles} from '../auto-complete-styles.model';\n\n@Component({\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: AutoCompleteComponent,\n      multi: true\n    }\n  ],\n  selector:    'ion-auto-complete',\n  styleUrls: [\n    './auto-complete.component.scss'\n  ],\n  templateUrl: 'auto-complete.component.html'\n})\nexport class AutoCompleteComponent implements AfterViewChecked, ControlValueAccessor, DoCheck {\n  public autocompleteOptions:AutoCompleteOptions = new AutoCompleteOptions();\n  public defaultOpts:AutoCompleteOptions;\n  public hasFocus:boolean = false;\n  public isLoading:boolean = false;\n  public focusedOption:number = -1;\n  public formValue:any;\n  public promise;\n  public selected:any|any[];\n  public selection:any;\n  public showSuggestions:boolean = false;\n  public suggestions:any[];\n\n  private onTouchedCallback:Function|false = false;\n  private onChangeCallback:Function|false = false;\n  private showListChanged:boolean = false;\n\n  @Input() public alwaysShowList:boolean = false;\n  @Input() public autocomplete:string;\n  @Input() public autoFocusSuggestion:boolean = true;\n  @Input() public clearInvalidInput:boolean = true;\n  @Input() public disabled:boolean = false;\n  @Input() public emptyTemplate:TemplateRef<any>;\n  @Input() public exclude:any[] = [];\n  @Input() public frontIcon:false|string = false;\n  @Input() public hideListOnSelection:boolean = true;\n  @Input() public keyword:string;\n  @Input() public label:string = '';\n  @Input() public labelPosition:string = 'fixed';\n  @Input() public listTemplate:TemplateRef<any>;\n  @Input() public location:string = 'auto';\n  @Input() public maxResults:number = 8;\n  @Input() public maxSelected:number = null;\n  @Input() public multi:boolean = false;\n  @Input() public name:string = '';\n  @Input() public provider:AutoCompleteService|Function;\n  @Input() public removeButtonClasses:string = '';\n  @Input() public removeButtonColor:string = 'primary';\n  @Input() public removeButtonIcon:string|false = 'close-circle';\n  @Input() public removeButtonSlot:string = 'end';\n  @Input() public removeDuplicateSuggestions:boolean = true;\n  @Input() public selectionTemplate:TemplateRef<any>;\n  @Input() public selectOnTabOut:boolean = true;\n  @Input() public showResultsFirst:boolean;\n  @Input() public styles = new AutoCompleteStyles;\n  @Input() public template:TemplateRef<any>;\n  @Input() public useIonInput:boolean = false;\n\n  @Output() public autoFocus:EventEmitter<any>;\n  @Output() public autoBlur:EventEmitter<any>;\n  @Output() public blur:EventEmitter<any>;\n  @Output() public focus:EventEmitter<any>;\n  @Output() public ionAutoInput:EventEmitter<string>;\n  @Output() public itemsChange:EventEmitter<any>;\n  @Output() public itemsCleared:EventEmitter<boolean>;\n  @Output() public itemsHidden:EventEmitter<any>;\n  @Output() public itemRemoved:EventEmitter<any>;\n  @Output() public itemSelected:EventEmitter<any>;\n  @Output() public itemsShown:EventEmitter<any>;\n  @Output() public modelChange:EventEmitter<any|any[]>;\n\n  @ViewChild(\n    'searchbarElem',\n    {\n      read: ElementRef\n    }\n  )\n  private searchbarElem:ElementRef;\n\n  @ViewChild(\n    'inputElem',\n    {\n      read: ElementRef\n    }\n  )\n  private inputElem:ElementRef;\n\n  @ViewChild(\n    'itemList',\n    {\n      read: ElementRef\n    }\n  )\n  private itemList:ElementRef;\n\n  @Input()\n  set dataProvider(provider:AutoCompleteService|Function) {\n    if (typeof provider !== 'undefined') {\n      this.provider = provider;\n\n      if (typeof this.selected !== 'undefined') {\n        this.keyword = this.getLabel(this.selected);\n      }\n    }\n  }\n\n  @Input()\n  set eager(eager:boolean) {\n    if (eager) {\n      this.getItems(null, false);\n    }\n  }\n\n  @Input()\n  set options(options:AutoCompleteOptions|any) {\n    this.autocompleteOptions = new AutoCompleteOptions();\n\n    const keys = Object.keys(options);\n\n    const keysLength = keys.length;\n    for (let i = 0; i < keysLength; i++) {\n      const key = keys[i];\n\n      if (typeof options[key] !== 'undefined') {\n        this.autocompleteOptions[key] = options[key];\n      }\n    }\n\n    if (typeof this.selected === 'undefined') {\n      if (typeof this.autocompleteOptions.value !== 'undefined') {\n        this.selected = this.autocompleteOptions.value;\n      } else {\n        if (this.multi) {\n          this.selected = [];\n        } else {\n          this.selected = null;\n        }\n      }\n\n      this.keyword = this.getLabel(this.selected);\n    }\n\n    if (this.autocompleteOptions.autocomplete) {\n      this.autocomplete = this.autocompleteOptions.autocomplete;\n    } else {\n      this.autocomplete = 'off';\n    }\n  }\n\n  @Input()\n  get model():any|any[] {\n    let model = this.selected;\n    if (!this.multi && typeof this.selected.length !== 'undefined') {\n      if (this.selected.length === 0) {\n        model = null;\n      } else {\n        model = this.selected[0];\n      }\n    }\n\n    return model;\n  }\n\n  set model(selected:any|any[]) {\n    this.selected = selected;\n  }\n\n  @Input()\n  public get showList():boolean {\n    return this.showSuggestions;\n  }\n\n  public set showList(value:boolean) {\n    if (typeof value === 'undefined') {\n      return;\n    }\n\n    if (this.showSuggestions === value) {\n      return;\n    }\n\n    this.showSuggestions = value === true;\n    this.showListChanged = true;\n  }\n\n  /**\n   * Handle document click\n   *\n   * @param event\n   *\n   * @private\n   */\n  @HostListener('document:click', ['$event'])\n  public documentClickHandler(event:Event):void {\n    if (\n        this.isEventWithinElement(this.searchbarElem, event)\n        || this.isEventWithinElement(this.inputElem, event)\n        || (this.isEventWithinElement(this.itemList, event))\n    ) {\n      this.setSuggestions(this.suggestions);\n    } else {\n      this.hideItemList();\n    }\n  }\n\n  /**\n   * Create a new instance\n   */\n  public constructor() {\n    this.autoBlur = new EventEmitter<any>();\n    this.autoFocus = new EventEmitter<any>();\n    this.blur = new EventEmitter<any>();\n    this.focus = new EventEmitter<any>();\n    this.ionAutoInput = new EventEmitter<string>();\n    this.itemsChange = new EventEmitter<any>();\n    this.itemsCleared = new EventEmitter<boolean>();\n    this.itemsHidden = new EventEmitter<any>();\n    this.itemRemoved = new EventEmitter<any>();\n    this.itemSelected = new EventEmitter<any>();\n    this.itemsShown = new EventEmitter<any>();\n    this.modelChange = new EventEmitter<any|any[]>();\n\n    this.keyword = '';\n    this.suggestions = [];\n  }\n\n  ngAfterViewChecked():void {\n    if (this.showListChanged) {\n      this.showListChanged = false;\n      this.showSuggestions ? this.itemsShown.emit() : this.itemsHidden.emit();\n    }\n  }\n\n  ngDoCheck():void {\n    if (!this.hasFocus) {\n      if (this.clearInvalidInput && (this.selected === null || this.multi)) {\n        if (this.keyword !== '') {\n          this.keyword = '';\n        }\n\n        if (this.inputElem && this.inputElem.nativeElement) {\n          if (this.inputElem.nativeElement.children && this.inputElem.nativeElement.children.length !== 0) {\n            if (this.inputElem.nativeElement.children[0].children && this.inputElem.nativeElement.children[0].children.length !== 0) {\n              if (this.inputElem.nativeElement.children[0].children[0].value) {\n                this.inputElem.nativeElement.children[0].children[0].value = '';\n              }\n            }\n          }\n        }\n\n        if (this.searchbarElem && this.searchbarElem.nativeElement) {\n          if (this.searchbarElem.nativeElement.children && this.searchbarElem.nativeElement.children.length !== 0) {\n            if (this.searchbarElem.nativeElement.children[0].children) {\n              if (this.searchbarElem.nativeElement.children[0].children.length !== 0) {\n                if (this.searchbarElem.nativeElement.children[0].children[0].value) {\n                  this.searchbarElem.nativeElement.children[0].children[0].value = '';\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Get element's position on screen\n   *\n   * @param el\n   *\n   * @private\n   */\n  private _getPosition(el):any {\n    let xPos = 0;\n    let yPos = 0;\n\n    while (el) {\n      if (el.tagName === 'BODY') {\n        const xScroll = el.scrollLeft || document.documentElement.scrollLeft;\n        const yScroll = el.scrollTop || document.documentElement.scrollTop;\n\n        xPos += (el.offsetLeft - xScroll + el.clientLeft);\n        yPos += (el.offsetTop - yScroll + el.clientTop);\n      } else {\n        xPos += (el.offsetLeft - el.scrollLeft + el.clientLeft);\n        yPos += (el.offsetTop - el.scrollTop + el.clientTop);\n      }\n\n      el = el.offsetParent;\n    }\n    return {\n      x: xPos,\n      y: yPos\n    };\n  }\n\n  private isEventWithinElement(elementOrTemplate:ElementRef|TemplateRef<any>|ViewContainerRef, event:Event):boolean {\n    if (typeof elementOrTemplate === 'undefined') {\n      return false;\n    }\n\n    let element:ElementRef;\n    if (elementOrTemplate instanceof TemplateRef) {\n      element = elementOrTemplate.elementRef;\n    } else if (elementOrTemplate instanceof ViewContainerRef) {\n      element = elementOrTemplate.element.nativeElement;\n    } else {\n      element = elementOrTemplate;\n    }\n\n    return element\n        && element.nativeElement\n        && element.nativeElement.contains(<string><unknown>event.target);\n  }\n\n  /**\n   * Get value from form\n   *\n   * @param selection\n   *\n   * @private\n   */\n  public getFormValue(selection:any):any {\n    if (typeof this.provider === 'undefined') {\n      return null;\n    }\n\n    if (selection == null || typeof this.provider === 'function') {\n      return null;\n    }\n\n    let attr = this.provider.formValueAttribute == null ?\n        this.provider.labelAttribute : this.provider.formValueAttribute;\n\n    if (typeof selection === 'object' && attr) {\n      return selection[attr];\n    }\n\n    return selection;\n  }\n\n  clickClear():void {\n    this.clearValue();\n    this.hideItemList();\n\n    this.itemsCleared.emit(true);\n  }\n\n  /**\n   * Clear current input value\n   */\n  public clearValue():void {\n    this.keyword = '';\n    this.selection = null;\n    this.formValue = null;\n\n    if (this.focusedOption > 0) {\n      this.focusedOption = this.focusedOption - 1;\n    }\n\n    return;\n  }\n\n  /**\n   * Get items for auto-complete\n   *\n   * @param event\n   * @param show\n   */\n  public getItems(event?, show?:boolean):void {\n    this.isLoading = true;\n\n    if (this.promise) {\n      clearTimeout(this.promise);\n    }\n\n    this.promise = setTimeout(\n      () => {\n        if (event) {\n          this.keyword = event.detail.target.value;\n        }\n\n        let result;\n\n        if (this.showResultsFirst && this.keyword.trim() === '') {\n          this.keyword = '';\n        }\n\n        if (typeof this.provider === 'function') {\n          result = this.provider(this.keyword);\n\n          this.setSuggestions(result, show);\n\n          this.isLoading = false;\n        } else {\n          result = this.provider.getResults(this.keyword);\n\n          if (result instanceof Subject) {\n            result = result.asObservable();\n          } else if (result instanceof Promise) {\n            result = from(result);\n          }\n\n          if (result instanceof Observable) {\n            result.pipe(\n                finalize(\n                    () => {\n                      this.isLoading = false;\n                    }\n                )\n            ).subscribe(\n                (results: any[]) => {\n                  this.setSuggestions(results, show);\n                },\n                (error: any) => console.error(error)\n            );\n          } else {\n            this.setSuggestions(result, show);\n\n            this.isLoading = false;\n          }\n        }\n\n        this.ionAutoInput.emit(this.keyword);\n      },\n      this.autocompleteOptions.debounce\n    );\n  }\n\n  /**\n   * Get an item's label\n   *\n   * @param selection\n   */\n  public getLabel(selection:any|any[]):string {\n    if (typeof this.provider === 'undefined') {\n      return '';\n    }\n\n    if (selection == null || typeof this.provider === 'function') {\n      return '';\n    }\n\n    let attr = this.provider.formValueAttribute == null ?\n        this.provider.labelAttribute : this.provider.formValueAttribute;\n\n    let value = selection;\n\n    if (this.provider.getItemLabel) {\n      value = this.provider.getItemLabel(value);\n    }\n\n    if (!this.multi && typeof value !== 'undefined' && Object.prototype.toString.call(value) === '[object Array]') {\n      if (value.length === 0) {\n        return '';\n      } else {\n        value = value[0];\n      }\n    }\n\n    if (typeof value === 'object' && attr) {\n      return value[attr] || '';\n    }\n\n    return value || '';\n  }\n\n  /**\n   * Get menu style\n   */\n  public listStyles():any {\n    const listLocationStyles = this.listLocationStyles();\n    return { ...listLocationStyles, ...this.styles.list };\n  }\n\n  private listLocationStyles():any {\n    let location = this.location;\n\n    if (this.location === 'auto') {\n      const elementY = this._getPosition(\n        this.searchbarElem.nativeElement\n      ).y;\n\n      const windowY = window.innerHeight;\n\n      if (elementY > windowY - elementY) {\n        location = 'top';\n      } else {\n        location = 'bottom';\n      }\n    }\n\n    if (location === 'bottom') {\n      return {};\n    } else {\n      return {\n        'bottom': '37px'\n      };\n    }\n  }\n\n  /**\n   * Handles tab key press.\n   * If `selectOnTabOut` is `true`, will select currently focused item\n   * \n   * @param event\n   */\n  public handleTabOut(event):void {\n    if (this.selectOnTabOut && this.suggestions.length !== 0) {\n      if (this.focusedOption !== -1) {\n        this.selectItem(this.suggestions[this.focusedOption]);\n      } else {\n        this.hideItemList();\n      }\n    } else {\n      this.hideItemList();\n    }\n\n    this.onBlur(event);\n  }\n\n  /**\n   * Handle tap\n   *\n   * @param event\n   */\n  public handleTap(event):void {\n    if (this.showResultsFirst || this.keyword.length > 0) {\n      this.getItems();\n    }\n  }\n\n  /**\n   * Handle tap when selecting an item\n   *\n   * @param $event\n   * @param suggestion\n   */\n  public handleSelectTap($event, suggestion?:any):false {\n    if (typeof suggestion !== 'undefined') {\n      this.selectItem(suggestion);\n\n      if ($event.srcEvent) {\n        if ($event.srcEvent.stopPropagation) {\n          $event.srcEvent.stopPropagation();\n        }\n        if ($event.srcEvent.preventDefault) {\n          $event.srcEvent.preventDefault();\n        }\n      } else if ($event.preventDefault) {\n        $event.preventDefault();\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   * Hide item list\n   */\n  public hideItemList():void {\n    if (this.showSuggestions === false && this.alwaysShowList === false) {\n      this.showListChanged = true;\n    }\n\n    this.showSuggestions = this.alwaysShowList;\n    this.focusedOption = -1;\n  }\n\n  highlightItem(direction:number):void {\n    if (this.showSuggestions === false) {\n      this.showItemList();\n    }\n\n    let max = this.suggestions.length - 1;\n    if (max > this.maxResults) {\n      max = this.maxResults - 1;\n    }\n\n    if (direction < 0) {\n      if (this.focusedOption === -1 || this.focusedOption === max) {\n        this.focusedOption = 0;\n      } else {\n        this.focusedOption++;\n      }\n    } else if (direction > 0) {\n      if (this.focusedOption === -1 || this.focusedOption === 0) {\n        this.focusedOption = max;\n      } else {\n        this.focusedOption--;\n      }\n    }\n  }\n\n  /**\n   * Fired when the input focused\n   */\n  onFocus(event:any):void {\n    this.hasFocus = true;\n\n    this.getItems();\n\n    event = this._reflectName(event);\n\n    this.autoFocus.emit(event);\n    this.focus.emit(event);\n  }\n\n  /**\n   * Fired when the input focused\n   */\n  onBlur(event):void {\n    this.hasFocus = false;\n\n    event = this._reflectName(event);\n\n    this.autoBlur.emit(event);\n    this.blur.emit(event);\n  }\n\n  _reflectName(event:any):any {\n    if (typeof event.srcElement.attributes['ng-reflect-name'] === 'object') {\n      event.srcElement.name = event.srcElement.attributes['ng-reflect-name'].value;\n    }\n\n    return event;\n  }\n\n  /**\n   * Register onChangeCallback\n   *\n   * @param fn\n   */\n  public registerOnChange(fn:Function|false):void {\n    this.onChangeCallback = fn;\n  }\n\n  /**\n   * Register onTouchedCallback\n   *\n   * @param fn\n   */\n  public registerOnTouched(fn:Function|false):void {\n    this.onTouchedCallback = fn;\n  }\n\n  /**\n   * Remove already selected suggestions\n   *\n   * @param suggestions\n   */\n  public removeDuplicates(suggestions:any[]):any[] {\n    const selectedCount = this.selected ? this.selected.length : 0;\n\n    const suggestionCount = suggestions.length;\n\n    for (let i = 0; i < selectedCount; i++) {\n      const selectedLabel = this.getLabel(\n        this.selected[i]\n      );\n\n      for (let j = 0; j < suggestionCount; j++) {\n        const suggestedLabel = this.getLabel(\n          suggestions[j]\n        );\n\n        if (selectedLabel === suggestedLabel) {\n          suggestions.splice(j, 1);\n        }\n      }\n    }\n\n    return suggestions;\n  }\n\n  public removeExcluded(suggestions:any[]):any[] {\n    const excludedCount = this.exclude.length;\n\n    for (let i = 0; i < excludedCount; i++) {\n      let excludeLabel = this.exclude[i];\n      if (typeof excludeLabel === 'object') {\n        excludeLabel = this.getLabel(excludeLabel);\n      }\n\n      const suggestionCount = suggestions.length;\n\n      for (let j = 0; j < suggestionCount; j++) {\n        const suggestedLabel = this.getLabel(\n          suggestions[j]\n        );\n\n        if (excludeLabel === suggestedLabel) {\n          suggestions.splice(j, 1);\n\n          break;\n        }\n      }\n    }\n\n    return suggestions;\n  }\n\n  /**\n   * Remove item from selected\n   *\n   * @param selection\n   * @param notify?\n   */\n  public removeItem(selection:any, notify?:boolean):void {\n    const count = this.selected ? this.selected.length : 0;\n\n    for (let i = 0; i < count; i++) {\n      const item = this.selected[i];\n\n      const selectedLabel = this.getLabel(selection);\n      const itemLabel = this.getLabel(item);\n\n      if (selectedLabel === itemLabel) {\n        this.selected.splice(i, 1);\n      }\n    }\n\n    notify = typeof notify === 'undefined' ? true : notify;\n\n    if (notify) {\n        this.itemRemoved.emit(selection);\n        this.itemsChange.emit(this.selected);\n    }\n\n    this.modelChange.emit(this.selected);\n  }\n\n  /**\n   * Select item from list\n   *\n   * @param selection\n   **/\n  public selectItem(selection:any):void {\n    this.keyword = this.getLabel(selection);\n    this.formValue = this.getFormValue(selection);\n\n    this.updateModel(this.formValue);\n\n    if (this.hideListOnSelection) {\n      this.hideItemList();\n    }\n\n    if (this.multi) {\n      if (this.maxSelected === null || this.selected.length <= this.maxSelected) {\n        this.clearValue();\n\n        this.selected.push(selection);\n        this.itemsChange.emit(this.selected);\n      } else {\n        return;\n      }\n    } else {\n      this.selection = selection;\n\n      this.selected = [selection];\n      this.itemsChange.emit(selection);\n    }\n\n    this.itemSelected.emit(selection);\n    this.modelChange.emit(this.selected);\n  }\n\n  /**\n   * Set focus of searchbar\n   */\n  public setFocus():void {\n    if (this.useIonInput && this.inputElem) {\n      this.inputElem.nativeElement.setFocus();\n    } else if (this.searchbarElem) {\n      this.searchbarElem.nativeElement.setFocus();\n    }\n  }\n\n  /**\n   * Set suggestions\n   *\n   * @param suggestions\n   * @param show\n   */\n  public setSuggestions(suggestions:any[], show?:boolean):void {\n    if (this.removeDuplicateSuggestions) {\n      suggestions = this.removeDuplicates(suggestions);\n      suggestions = this.removeExcluded(suggestions);\n    }\n\n    this.suggestions = suggestions;\n\n    if (show || typeof show === 'undefined') {\n      this.showItemList();\n    }\n\n    if (this.autoFocusSuggestion) {\n      if (this.suggestions.length !== 0) {\n        this.focusedOption = 0;\n      }\n    }\n  }\n\n  /**\n   * Set current input value\n   *\n   * Used externally (ie don't delete)\n   *\n   * @param selection\n   */\n  public setValue(selection: any):void {\n    this.formValue = this.getFormValue(selection);\n    this.keyword = this.getLabel(selection);\n    return;\n  }\n\n  /**\n   * Show item list\n   */\n  public showItemList():void {\n    if (this.showSuggestions === false) {\n      this.showListChanged = true;\n    }\n\n    this.showSuggestions = true;\n  }\n\n  /**\n   * Update the model\n   */\n  public updateModel(enteredText:string):void {\n    if (enteredText !== this.formValue) {\n      this.formValue = enteredText;\n\n      if (!this.multi) {\n        this.selected = null;\n      }\n    }\n\n    if (this.onChangeCallback) {\n      this.onChangeCallback(this.formValue);\n    }\n\n    this.modelChange.emit(this.selected);\n  }\n\n  /**\n   * Write value\n   *\n   * @param value\n   */\n  public writeValue(value:any):void {\n    if (value !== this.selection) {\n      this.selection = value || null;\n      this.formValue = this.getFormValue(this.selection);\n      this.keyword = this.getLabel(this.selection);\n    }\n  }\n}\n","import {Injectable, PipeTransform, Pipe} from '@angular/core';\n\n/**\n * Bolds the beginning of the matching string in the item\n */\n@Pipe({\n  name: 'boldprefix'\n})\n@Injectable()\nexport class BoldPrefix implements PipeTransform {\n  transform(value:string, keyword:string):any {\n    if (!keyword) {\n      return value;\n    }\n    \n    let escaped_keyword = keyword.replace(\n      /[.*+?^${}()|[\\]\\\\]/g, \n      '\\\\$&'\n    );\n    \n    return value.replace(\n      new RegExp(\n        escaped_keyword, \n        'gi'\n      ), \n      function(str) { \n        return str.bold(); \n      }\n    );\n  }\n}\n","import {NgModule, ModuleWithProviders} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\n\nimport {IonicModule} from '@ionic/angular';\n\nimport {AutoCompleteComponent} from './auto-complete/auto-complete.component';\nimport {BoldPrefix} from './bold-prefix.pipe';\n\nexport * from './auto-complete-options.model';\nexport * from './auto-complete-styles.model';\n\nexport * from './auto-complete.service';\n\nexport * from './auto-complete/auto-complete.component';\nexport * from './bold-prefix.pipe';\n\n@NgModule({\n  declarations: [\n    AutoCompleteComponent,\n    BoldPrefix\n  ],\n  exports: [\n    AutoCompleteComponent,\n    BoldPrefix\n  ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    IonicModule\n  ]\n})\nexport class AutoCompleteModule {\n  static forRoot():ModuleWithProviders<AutoCompleteModule> {\n    return {\n      ngModule: AutoCompleteModule,\n      providers: []\n    };\n  }\n}\n"]}