{"version":3,"file":"ng-ws-select-search-ahead.mjs","sources":["../../../projects/ng-ws-select-search-ahead/src/lib/ng-ws-select-search-ahead.service.ts","../../../projects/ng-ws-select-search-ahead/src/lib/directives/outside-click.directive.ts","../../../projects/ng-ws-select-search-ahead/src/lib/pipes/search-highlight.pipe.ts","../../../projects/ng-ws-select-search-ahead/src/lib/ng-ws-select-search-ahead.component.ts","../../../projects/ng-ws-select-search-ahead/src/lib/ng-ws-select-search-ahead.component.html","../../../projects/ng-ws-select-search-ahead/src/ng-ws-select-search-ahead.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class NgWsSelectSearchAheadService {\r\n  public filteredItems: any[] = [];\r\n  public selectedItems: any[] = [];\r\n  public allItems: any[] = [];\r\n\r\n  public searchValue: string = '';\r\n  public openedState: boolean = false;\r\n  public allSelected: boolean = false;\r\n\r\n  public initializeItems(listItems: any[], updateSelectedItems: () => void): void {\r\n    this.allItems = listItems.map(item => ({...item, selected: false}));\r\n    this.filteredItems = [...this.allItems];\r\n    updateSelectedItems();\r\n  }\r\n\r\n  public toggleMultiSelectOverlay(isDisabled: boolean): void {\r\n    if (!isDisabled) {\r\n      this.openedState = !this.openedState;\r\n    }\r\n  }\r\n\r\n  public filterItems(e: Event, optionLabel: string): void {\r\n    const searchValue: string = (e.target as HTMLInputElement).value.trim().toLowerCase();\r\n    this.searchValue = searchValue;\r\n\r\n    this.filteredItems = this.allItems\r\n      .filter(item => !searchValue || item[optionLabel].trim().toLowerCase().includes(searchValue));\r\n\r\n    this.filteredItems.forEach(item => {\r\n      item.selected = this.selectedItems.some(selectedItem =>\r\n        selectedItem[optionLabel] === item[optionLabel]\r\n      );\r\n    });\r\n\r\n    this.updateAllSelectedState();\r\n  }\r\n\r\n  public toggleSelectItem(\r\n    item: any,\r\n    optionLabel: string,\r\n    isMultiple: boolean,\r\n  ): void {\r\n    if (!isMultiple) {\r\n      if (this.selectedItems.length === 1 && this.selectedItems[0][optionLabel] === item[optionLabel]) {\r\n        this.selectedItems = [];\r\n        this.allItems.forEach(i => i.selected = false);\r\n      } else {\r\n        this.selectedItems = [item];\r\n        this.allItems.forEach(i => i.selected = i[optionLabel] === item[optionLabel]);\r\n      }\r\n    } else {\r\n      const idx: number = this.selectedItems.findIndex(i => i[optionLabel] === item[optionLabel]);\r\n      if (idx > -1) {\r\n        this.selectedItems.splice(idx, 1);\r\n        item.selected = false;\r\n      } else {\r\n        this.selectedItems.push(item);\r\n        item.selected = true;\r\n      }\r\n    }\r\n\r\n    const allItemIdx: number = this.allItems.findIndex(i => i[optionLabel] === item[optionLabel]);\r\n    if (allItemIdx > -1) {\r\n      this.allItems[allItemIdx].selected = this.selectedItems.some(i => i[optionLabel] === item[optionLabel]);\r\n    }\r\n    const filteredItemIdx: number = this.filteredItems.findIndex(i => i[optionLabel] === item[optionLabel]);\r\n    if (filteredItemIdx > -1) {\r\n      this.filteredItems[filteredItemIdx].selected = this.selectedItems.some(i => i[optionLabel] === item[optionLabel]);\r\n    }\r\n\r\n    this.updateAllSelectedState();\r\n  }\r\n\r\n  public toggleSelectAll(optionLabel: string): void {\r\n    this.allSelected = !this.allSelected;\r\n\r\n    if (this.allSelected) {\r\n      this.filteredItems.forEach(item => {\r\n        item.selected = true;\r\n        if (!this.selectedItems.some(selectedItem => selectedItem[optionLabel] === item[optionLabel])) {\r\n          this.selectedItems.push(item);\r\n        }\r\n      });\r\n    } else {\r\n      this.filteredItems.forEach(item => {\r\n        item.selected = false;\r\n        const idx: number = this.selectedItems\r\n          .findIndex(selectedItem => selectedItem[optionLabel] === item[optionLabel]);\r\n        if (idx > -1) {\r\n          this.selectedItems.splice(idx, 1);\r\n        }\r\n      });\r\n    }\r\n\r\n    this.allItems.forEach(item => {\r\n      item.selected = this.selectedItems.some(selectedItem => selectedItem[optionLabel] === item[optionLabel]);\r\n    });\r\n  }\r\n\r\n  public updateAllSelectedState(): void {\r\n    this.allSelected = this.filteredItems.length > 0 && this.filteredItems.every(item => item.selected);\r\n  }\r\n}\r\n","import { Directive, ElementRef, EventEmitter, HostListener, Output } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[appOutsideClick]',\r\n  standalone: true\r\n})\r\nexport class OutsideClickDirective {\r\n  @HostListener('document:click', ['$event'])\r\n  onClick(event: MouseEvent): void {\r\n    if (!this.el.nativeElement.contains(event.target)) {\r\n      this.needToClose.emit(true);\r\n    }\r\n  }\r\n\r\n  @Output() needToClose: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n  constructor(private el: ElementRef) {}\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n  name: 'highlightSearch',\r\n  standalone: true\r\n})\r\nexport class HighlightSearchPipe implements PipeTransform {\r\n  constructor(private sanitizer: DomSanitizer) {}\r\n\r\n  transform(value: string, search: string): SafeHtml {\r\n    if (!search) {\r\n      return value;\r\n    }\r\n    const regexp: RegExp = new RegExp(search, 'gi');\r\n    const match: RegExpMatchArray | null = value.match(regexp);\r\n\r\n    if (!match) {\r\n      return value;\r\n    }\r\n\r\n    const highlighted: string = value.replace(regexp, \"<mark>$&</mark>\");\r\n    return this.sanitizer.bypassSecurityTrustHtml(highlighted);\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  inject,\r\n  Input,\r\n  OnChanges,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n} from '@angular/core';\r\nimport { NgClass, NgOptimizedImage, NgStyle } from \"@angular/common\";\r\nimport { FormsModule } from \"@angular/forms\";\r\n\r\nimport { NgWsSelectSearchAheadService } from \"./ng-ws-select-search-ahead.service\";\r\nimport { OutsideClickDirective } from \"./directives\";\r\nimport { HighlightSearchPipe } from \"./pipes\";\r\n\r\n@Component({\r\n  selector: 'ng-ws-select-search-ahead',\r\n  standalone: true,\r\n  imports: [\r\n    FormsModule,\r\n    NgClass,\r\n    OutsideClickDirective,\r\n    HighlightSearchPipe,\r\n    NgOptimizedImage,\r\n    NgStyle,\r\n  ],\r\n  providers: [NgWsSelectSearchAheadService],\r\n  templateUrl: './ng-ws-select-search-ahead.component.html',\r\n  styleUrl: './ng-ws-select-search-ahead.component.scss'\r\n})\r\nexport class NgWsSelectSearchAheadComponent implements OnChanges, OnInit {\r\n  public _searchAheadService: NgWsSelectSearchAheadService = inject(NgWsSelectSearchAheadService);\r\n\r\n  @Input({ required: true }) listItems: any[] = [];\r\n  @Input({ required: true }) optionLabel: string = '';\r\n\r\n  /** Conditional options */\r\n  @Input() pending: boolean = false;\r\n  @Input() isDisabled: boolean = false;\r\n  @Input() isMultiple: boolean = false;\r\n  @Input() hideCheckboxes: boolean = false;\r\n\r\n  /** Inputs for Texts/Icons */\r\n  @Input() placeHolder: string = 'Select';\r\n  @Input() placeholderPostfix: string = 'Items selected';\r\n  @Input() loadingLabel: string = 'Loading';\r\n  @Input() loadingIcon: string = '';\r\n  @Input() noDataLabel: string = 'No Items';\r\n\r\n  /** Inputs for adding additional styling */\r\n  @Input() wrapperClasses: string = '';\r\n  @Input() boxClasses: string = '';\r\n  @Input() boxTextClasses: string = '';\r\n  @Input() overlayClasses: string = '';\r\n  @Input() searchWrapperClasses: string = '';\r\n  @Input() checkboxClasses: string = '';\r\n  @Input() searchInputWrapperClasses: string = '';\r\n  @Input() closeBtnClasses: string = '';\r\n  @Input() itemClasses: string = '';\r\n  @Input() loaderClasses: string = '';\r\n  @Input() itemLabelClasses: string = '';\r\n  @Input() noDataClasses: string = '';\r\n  @Input() noDataTextClasses: string = '';\r\n\r\n  /** Event emitters */\r\n  @Output() selectionChange: EventEmitter<any> = new EventEmitter<any | any[]>();\r\n  @Output() onItemClicked: EventEmitter<any> = new EventEmitter<any>();\r\n  @Output() onToggleAllChange: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n  @Output() onSearchInputChange: EventEmitter<string> = new EventEmitter<string>();\r\n  @Output() onClose: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n\r\n\r\n  ngOnInit(): void {\r\n    this.initializeItems();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['listItems'] && !changes['listItems'].firstChange) {\r\n      this.initializeItems();\r\n    }\r\n  }\r\n\r\n  private initializeItems(): void {\r\n    this._searchAheadService.initializeItems(this.listItems, this.updateSelectedItems.bind(this));\r\n  }\r\n\r\n  public toggleMultiSelectOverlay(): void {\r\n    this._searchAheadService.toggleMultiSelectOverlay(this.isDisabled);\r\n  }\r\n\r\n  public closeOverlay(): void {\r\n    this._searchAheadService.openedState = false;\r\n    this.onClose.emit(true);\r\n  }\r\n\r\n  public filterItems(e: Event): void {\r\n    this._searchAheadService.filterItems(e, this.optionLabel);\r\n    this.onSearchInputChange.emit((e.target as HTMLInputElement).value);\r\n    this.updatePlaceholder();\r\n  }\r\n\r\n  public toggleSelectItem(item: any): void {\r\n    this._searchAheadService.toggleSelectItem(\r\n      item,\r\n      this.optionLabel,\r\n      this.isMultiple,\r\n    );\r\n    this.updateSelectedItems();\r\n\r\n    if (!this.isMultiple) {\r\n      this.closeOverlay();\r\n    }\r\n\r\n    this.onItemClicked.emit(item);\r\n  }\r\n\r\n  public toggleSelectAll(e: Event): void {\r\n    this._searchAheadService.toggleSelectAll(this.optionLabel);\r\n    this.onToggleAllChange.emit((e.target as HTMLInputElement).checked);\r\n    this.updateSelectedItems();\r\n  }\r\n\r\n  private updateSelectedItems(): void {\r\n    this.selectionChange.emit(this.isMultiple ? this._searchAheadService.selectedItems : this._searchAheadService.selectedItems[0] || null);\r\n    this.updatePlaceholder();\r\n  }\r\n\r\n  private updatePlaceholder(): void {\r\n    if (this._searchAheadService.selectedItems.length === 0) {\r\n      this.placeHolder = 'Select';\r\n    } else if (this._searchAheadService.selectedItems.length === 1) {\r\n      this.placeHolder = this._searchAheadService.selectedItems[0][this.optionLabel];\r\n    } else if (this.isMultiple) {\r\n      this.placeHolder = `${ this._searchAheadService.selectedItems.length } ${ this.placeholderPostfix }`;\r\n    }\r\n  }\r\n\r\n  /** @desc Adding dynamic CSS variable to use in stylesheet\r\n   * (for styling ::after or ::before elements) */\r\n  public setHighlightColorVariableForCSS(): Record<string, string> {\r\n    return {\r\n      '--highlight-background': '',\r\n      '--highlight-color': '',\r\n    };\r\n  }\r\n}\r\n","<div [class]=\"wrapperClasses + ' multiselect__wrapper'\"\r\n     appOutsideClick\r\n     (needToClose)=\"closeOverlay()\"\r\n     (keyup.enter)=\"toggleMultiSelectOverlay()\"\r\n     (keyup.escape)=\"closeOverlay()\">\r\n  <div [class]=\"boxClasses + ' multiselect__box'\"\r\n       [ngClass]=\"{'ws-disabled': isDisabled}\"\r\n       tabindex=\"0\"\r\n       (click)=\"toggleMultiSelectOverlay()\">\r\n    <div [class]=\"boxTextClasses + ' multiselect__text'\">{{ placeHolder }}</div>\r\n\r\n    <svg class=\"arrow__down__icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\">\r\n      <path d=\"M480-361q-8 0-15-2.5t-13-8.5L268-556q-11-11-11-28t11-28q11-11 28-11t28 11l156 156 156-156q11-11 28-11t28 11q11 11 11 28t-11 28L508-372q-6 6-13 8.5t-15 2.5Z\"/>\r\n    </svg>\r\n  </div>\r\n\r\n  <div [class]=\"overlayClasses + ' multiselect__overlay'\"\r\n       [ngClass]=\"{'show__overlay': _searchAheadService.openedState}\">\r\n    <div [class]=\"searchWrapperClasses + ' multiselect__search'\"\r\n         [ngClass]=\"{'with__select__all': !hideCheckboxes}\">\r\n      @if (!hideCheckboxes && isMultiple) {\r\n        <input [class]=\"checkboxClasses + ' select__all'\"\r\n               type=\"checkbox\"\r\n               [disabled]=\"pending\"\r\n               [checked]=\"_searchAheadService.allSelected\"\r\n               (change)=\"toggleSelectAll($event)\">\r\n      }\r\n\r\n      <div [class]=\"searchInputWrapperClasses + ' search__input__with__icon'\">\r\n        <input class=\"search__input\"\r\n               type=\"text\"\r\n               [disabled]=\"pending\"\r\n               [(ngModel)]=\"_searchAheadService.searchValue\"\r\n               (input)=\"filterItems($event)\">\r\n\r\n        <svg class=\"search__icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\">\r\n          <path d=\"M380-320q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l224 224q11 11 11 28t-11 28q-11 11-28 11t-28-11L532-372q-30 24-69 38t-83 14Zm0-80q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Z\"/>\r\n        </svg>\r\n      </div>\r\n\r\n      <button type=\"button\" [class]=\"closeBtnClasses + ' close__btn'\">\r\n        <svg class=\"close__icon\" (click)=\"closeOverlay()\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\">\r\n          <path d=\"M480-424 284-228q-11 11-28 11t-28-11q-11-11-11-28t11-28l196-196-196-196q-11-11-11-28t11-28q11-11 28-11t28 11l196 196 196-196q11-11 28-11t28 11q11 11 11 28t-11 28L536-480l196 196q11 11 11 28t-11 28q-11 11-28 11t-28-11L480-424Z\"/>\r\n        </svg>\r\n      </button>\r\n    </div>\r\n\r\n    @if (pending) {\r\n      <div [class]=\"loaderClasses + ' multiselect__loader'\">\r\n        <span class=\"loader__text\">{{ loadingLabel }}</span>\r\n\r\n        @if (loadingIcon) {\r\n          <img class=\"loader__icon\" [ngSrc]=\"loadingIcon\" width=\"18\" height=\"18\" alt=\"Loading Icon\">\r\n        } @else {\r\n          <svg class=\"loader__icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\">\r\n            <path d=\"M480-80q-82 0-155-31.5t-127.5-86Q143-252 111.5-325T80-480q0-83 31.5-155.5t86-127Q252-817 325-848.5T480-880q17 0 28.5 11.5T520-840q0 17-11.5 28.5T480-800q-133 0-226.5 93.5T160-480q0 133 93.5 226.5T480-160q133 0 226.5-93.5T800-480q0-17 11.5-28.5T840-520q17 0 28.5 11.5T880-480q0 82-31.5 155t-86 127.5q-54.5 54.5-127 86T480-80Z\"/>\r\n          </svg>\r\n        }\r\n      </div>\r\n    } @else {\r\n      @for (item of _searchAheadService.filteredItems; track item[optionLabel]; let idx = $index) {\r\n        <label [class]=\"itemClasses + ' multiselect__item'\"\r\n               [for]=\"'item-' + idx\">\r\n          @if (!hideCheckboxes) {\r\n            <input [class]=\"checkboxClasses + ' item__checkbox'\"\r\n                   [id]=\"'item-' + idx\"\r\n                   type=\"checkbox\"\r\n                   [checked]=\"item.selected\"\r\n                   (change)=\"toggleSelectItem(item)\">\r\n          }\r\n\r\n          <span [class]=\"itemLabelClasses + ' item__label'\"\r\n                [ngStyle]=\"setHighlightColorVariableForCSS()\"\r\n                [innerHTML]=\"item[optionLabel] | highlightSearch: _searchAheadService.searchValue\"></span>\r\n        </label>\r\n      } @empty {\r\n        <div [class]=\"noDataClasses + ' multiselect__no__data'\">\r\n          <svg class=\"no__data__icon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\">\r\n            <path d=\"M260-280q-26 0-43-17t-17-43q0-25 17-42.5t43-17.5q25 0 42.5 17.5T320-340q0 26-17.5 43T260-280Zm0-280q-26 0-43-17t-17-43q0-25 17-42.5t43-17.5q25 0 42.5 17.5T320-620q0 26-17.5 43T260-560Zm180 120q-17 0-28.5-11.5T400-480q0-17 11.5-28.5T440-520h80q17 0 28.5 11.5T560-480q0 17-11.5 28.5T520-440h-80Zm240-40q0-54-14.5-104T623-676q-9-14-8-31t14-28q13-11 29-8.5t26 16.5q36 53 56 115.5T760-480q0 56-13.5 107T709-276q-8 15-24 19t-30-5q-14-9-17.5-25.5T642-319q18-37 28-77t10-84Z\"/>\r\n          </svg>\r\n          <span [class]=\"noDataTextClasses + ' no__data__text'\">{{ noDataLabel }}</span>\r\n        </div>\r\n      }\r\n    }\r\n  </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}