{"version":3,"file":"ngx-mat-select-search-v2.mjs","sources":["../../src/app/mat-select-search/mat-select-search-clear.directive.ts","../../src/app/mat-select-search/default-options.ts","../../src/app/mat-select-search/mat-select-no-entries-found.directive.ts","../../src/app/mat-select-search/mat-select-search.component.ts","../../src/app/mat-select-search/mat-select-search.component.html","../../src/app/mat-select-search/ngx-mat-select-search.module.ts","../../src/app/mat-select-search/ngx-mat-select-search-v2.ts"],"sourcesContent":["import { Directive } from '@angular/core';\r\n\r\n/**\r\n * Directive for providing a custom clear-icon.\r\n * e.g.\r\n * <ngx-mat-select-search [formControl]=\"bankFilterCtrl\">\r\n *   <mat-icon ngxMatSelectSearchClear>delete</mat-icon>\r\n * </ngx-mat-select-search>\r\n */\r\n@Directive({\r\n    selector: '[ngxMatSelectSearchClear]'\r\n})\r\nexport class MatSelectSearchClearDirective {}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { MatSelectSearchComponent } from './mat-select-search.component';\r\n\r\n/** List of inputs of NgxMatSelectSearchComponent that can be configured with a global default. */\r\nexport const configurableDefaultOptions = [\r\n  'ariaLabel',\r\n  'clearSearchInput',\r\n  'closeIcon',\r\n  'closeSvgIcon',\r\n  'disableInitialFocus',\r\n  'disableScrollToActiveOnOptionsChanged',\r\n  'enableClearOnEscapePressed',\r\n  'hideClearSearchButton',\r\n  'noEntriesFoundLabel',\r\n  'placeholderLabel',\r\n  'preventHomeEndKeyPropagation',\r\n  'searching',\r\n] as const;\r\n\r\nexport type ConfigurableDefaultOptions = typeof configurableDefaultOptions[number];\r\n\r\n/**\r\n * InjectionToken that can be used to specify global options. e.g.\r\n *\r\n * ```typescript\r\n * providers: [\r\n *   {\r\n *     provide: MAT_SELECTSEARCH_DEFAULT_OPTIONS,\r\n *     useValue: <MatSelectSearchOptions>{\r\n *       closeIcon: 'delete',\r\n *       noEntriesFoundLabel: 'No options found'\r\n *     }\r\n *   }\r\n * ]\r\n * ```\r\n *\r\n * See the corresponding inputs of `MatSelectSearchComponent` for documentation.\r\n */\r\nexport const MAT_SELECTSEARCH_DEFAULT_OPTIONS = new InjectionToken<MatSelectSearchOptions>('mat-selectsearch-default-options');\r\n\r\n/** Global configurable options for MatSelectSearch. */\r\nexport type MatSelectSearchOptions = Readonly<Partial<Pick<MatSelectSearchComponent, ConfigurableDefaultOptions>>>;\r\n","import { Directive } from '@angular/core';\r\n\r\n/**\r\n * Directive for providing a custom no entries found element.\r\n * e.g.\r\n * <ngx-mat-select-search [formControl]=\"bankFilterCtrl\">\r\n *   <span ngxMatSelectNoEntriesFound>\r\n *     No entries found <button>Add</button>\r\n *   </span>\r\n * </ngx-mat-select-search>\r\n */\r\n@Directive({\r\n  selector: '[ngxMatSelectNoEntriesFound]'\r\n})\r\nexport class MatSelectNoEntriesFoundDirective {}\r\n","/**\r\n * Copyright (c) 2018 Bithost GmbH All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport { A, DOWN_ARROW, END, ENTER, ESCAPE, HOME, NINE, SPACE, UP_ARROW, Z, ZERO } from '@angular/cdk/keycodes';\r\nimport { ViewportRuler } from '@angular/cdk/scrolling';\r\nimport {\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ContentChild,\r\n  ElementRef,\r\n  EventEmitter,\r\n  forwardRef,\r\n  Inject,\r\n  Input,\r\n  OnDestroy,\r\n  OnInit,\r\n  Optional,\r\n  Output,\r\n  QueryList,\r\n  ViewChild\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { MatOption } from '@angular/material/core';\r\nimport { MatFormField } from '@angular/material/form-field';\r\nimport { MatSelect } from '@angular/material/select';\r\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';\r\nimport { delay, filter, map, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators';\r\nimport { MatSelectSearchClearDirective } from './mat-select-search-clear.directive';\r\nimport { configurableDefaultOptions, MAT_SELECTSEARCH_DEFAULT_OPTIONS, MatSelectSearchOptions } from './default-options';\r\nimport { MatSelectNoEntriesFoundDirective } from './mat-select-no-entries-found.directive';\r\n\r\n/* tslint:disable:member-ordering component-selector */\r\n/**\r\n * Component providing an input field for searching MatSelect options.\r\n *\r\n * Example usage:\r\n *\r\n * interface Bank {\r\n *  id: string;\r\n *  name: string;\r\n * }\r\n *\r\n * @Component({\r\n *   selector: 'my-app-data-selection',\r\n *   template: `\r\n *     <mat-form-field>\r\n *       <mat-select [formControl]=\"bankCtrl\" placeholder=\"Bank\">\r\n *         <mat-option>\r\n *           <ngx-mat-select-search [formControl]=\"bankFilterCtrl\"></ngx-mat-select-search>\r\n *         </mat-option>\r\n *         <mat-option *ngFor=\"let bank of filteredBanks | async\" [value]=\"bank.id\">\r\n *           {{bank.name}}\r\n *         </mat-option>\r\n *       </mat-select>\r\n *     </mat-form-field>\r\n *   `\r\n * })\r\n * export class DataSelectionComponent implements OnInit, OnDestroy {\r\n *\r\n *   // control for the selected bank\r\n *   public bankCtrl: FormControl = new FormControl();\r\n *   // control for the MatSelect filter keyword\r\n *   public bankFilterCtrl: FormControl = new FormControl();\r\n *\r\n *   // list of banks\r\n *   private banks: Bank[] = [{name: 'Bank A', id: 'A'}, {name: 'Bank B', id: 'B'}, {name: 'Bank C', id: 'C'}];\r\n *   // list of banks filtered by search keyword\r\n *   public filteredBanks: ReplaySubject<Bank[]> = new ReplaySubject<Bank[]>(1);\r\n *\r\n *   // Subject that emits when the component has been destroyed.\r\n *   private _onDestroy = new Subject<void>();\r\n *\r\n *\r\n *   ngOnInit() {\r\n *     // load the initial bank list\r\n *     this.filteredBanks.next(this.banks.slice());\r\n *     // listen for search field value changes\r\n *     this.bankFilterCtrl.valueChanges\r\n *       .pipe(takeUntil(this._onDestroy))\r\n *       .subscribe(() => {\r\n *         this.filterBanks();\r\n *       });\r\n *   }\r\n *\r\n *   ngOnDestroy() {\r\n *     this._onDestroy.next();\r\n *     this._onDestroy.complete();\r\n *   }\r\n *\r\n *   private filterBanks() {\r\n *     if (!this.banks) {\r\n *       return;\r\n *     }\r\n *\r\n *     // get the search keyword\r\n *     let search = this.bankFilterCtrl.value;\r\n *     if (!search) {\r\n *       this.filteredBanks.next(this.banks.slice());\r\n *       return;\r\n *     } else {\r\n *       search = search.toLowerCase();\r\n *     }\r\n *\r\n *     // filter the banks\r\n *     this.filteredBanks.next(\r\n *       this.banks.filter(bank => bank.name.toLowerCase().indexOf(search) > -1)\r\n *     );\r\n *   }\r\n * }\r\n */\r\n@Component({\r\n  selector: 'ngx-mat-select-search',\r\n  templateUrl: './mat-select-search.component.html',\r\n  styleUrls: ['./mat-select-search.component.scss'],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => MatSelectSearchComponent),\r\n      multi: true\r\n    }\r\n  ],\r\n  changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class MatSelectSearchComponent implements OnInit, OnDestroy, ControlValueAccessor {\r\n\r\n  /** Label of the search placeholder */\r\n  @Input() placeholderLabel = 'Suche';\r\n\r\n  /** Type of the search input field */\r\n  @Input() type = 'text';\r\n\r\n  /** Font-based icon used for displaying Close-Icon */\r\n  @Input() closeIcon = 'close';\r\n\r\n  /** Svg-based icon used for displaying Close-Icon. If set, closeIcon is overridden */\r\n  @Input() closeSvgIcon?: string;\r\n\r\n  /** Label to be shown when no entries are found. Set to null if no message should be shown. */\r\n  @Input() noEntriesFoundLabel = 'Keine Optionen gefunden';\r\n\r\n  /**\r\n    * Whether or not the search field should be cleared after the dropdown menu is closed.\r\n    * Useful for server-side filtering. See [#3](https://github.com/bithost-gmbh/ngx-mat-select-search/issues/3)\r\n    */\r\n  @Input() clearSearchInput = true;\r\n\r\n  /** Whether to show the search-in-progress indicator */\r\n  @Input() searching = false;\r\n\r\n  /** Disables initial focusing of the input field */\r\n  @Input() disableInitialFocus = false;\r\n\r\n  /** Enable clear input on escape pressed */\r\n  @Input() enableClearOnEscapePressed = false;\r\n\r\n  /**\r\n   * Prevents home / end key being propagated to mat-select,\r\n   * allowing to move the cursor within the search input instead of navigating the options\r\n   */\r\n  @Input() preventHomeEndKeyPropagation = false;\r\n\r\n  /** Disables scrolling to active options when option list changes. Useful for server-side search */\r\n  @Input() disableScrollToActiveOnOptionsChanged = false;\r\n\r\n  /** Adds 508 screen reader support for search box */\r\n  @Input() ariaLabel = 'dropdown search';\r\n\r\n  /** Whether to show Select All Checkbox (for mat-select[multi=true]) */\r\n  @Input() showToggleAllCheckbox = false;\r\n\r\n  /** select all checkbox checked state */\r\n  @Input() toggleAllCheckboxChecked = false;\r\n\r\n  /** select all checkbox indeterminate state */\r\n  @Input() toggleAllCheckboxIndeterminate = false;\r\n\r\n  /** Display a message in a tooltip on the toggle-all checkbox */\r\n  @Input() toggleAllCheckboxTooltipMessage = '';\r\n\r\n  /** Define the position of the tooltip on the toggle-all checkbox. */\r\n  @Input() toggleAllCheckboxTooltipPosition: 'left' | 'right' | 'above' | 'below' | 'before' | 'after' = 'below';\r\n\r\n  /** Show/Hide the search clear button of the search input */\r\n  @Input() hideClearSearchButton = false;\r\n\r\n  /**\r\n   * Always restore selected options on selectionChange for mode multi (e.g. for lazy loading/infinity scrolling).\r\n   * Defaults to false, so selected options are only restored while filtering is active.\r\n   */\r\n  @Input() alwaysRestoreSelectedOptionsMulti = false;\r\n\r\n  /** Output emitter to send to parent component with the toggle all boolean */\r\n  @Output() toggleAll = new EventEmitter<boolean>();\r\n\r\n  /** Reference to the search input field */\r\n  @ViewChild('searchSelectInput', { read: ElementRef, static: true }) searchSelectInput: ElementRef;\r\n\r\n  /** Reference to the search input field */\r\n  @ViewChild('innerSelectSearch', { read: ElementRef, static: true }) innerSelectSearch: ElementRef;\r\n\r\n  /** Reference to custom search input clear icon */\r\n  @ContentChild(MatSelectSearchClearDirective) clearIcon: MatSelectSearchClearDirective;\r\n\r\n  /** Reference to custom no entries found element */\r\n  @ContentChild(MatSelectNoEntriesFoundDirective) noEntriesFound: MatSelectNoEntriesFoundDirective;\r\n\r\n  /** Current search value */\r\n  get value(): string {\r\n    return this._formControl.value;\r\n  }\r\n  private _lastExternalInputValue: string;\r\n\r\n  onTouched: Function = (_: any) => { };\r\n\r\n  /** Reference to the MatSelect options */\r\n  public set _options(_options: QueryList<MatOption>) {\r\n    this._options$.next(_options);\r\n  }\r\n  public get _options(): QueryList<MatOption> {\r\n    return this._options$.getValue();\r\n  }\r\n  public _options$: BehaviorSubject<QueryList<MatOption>> = new BehaviorSubject<QueryList<MatOption>>(null);\r\n\r\n  private optionsList$: Observable<MatOption[]> = this._options$.pipe(\r\n    switchMap(_options => _options ?\r\n      _options.changes.pipe(\r\n        map(options => options.toArray()),\r\n        startWith<MatOption[]>(_options.toArray()),\r\n      ) : of(null)\r\n    )\r\n  );\r\n\r\n  private optionsLength$: Observable<number> = this.optionsList$.pipe(\r\n    map(options => options ? options.length : 0)\r\n  );\r\n\r\n  /** Previously selected values when using <mat-select [multiple]=\"true\">*/\r\n  private previousSelectedValues: any[];\r\n\r\n  public _formControl: FormControl<string> = new FormControl<string>('');\r\n\r\n  /** whether to show the no entries found message */\r\n  public _showNoEntriesFound$: Observable<boolean> = combineLatest([\r\n    this._formControl.valueChanges,\r\n    this.optionsLength$\r\n  ]).pipe(\r\n    map(([value, optionsLength]) => this.noEntriesFoundLabel && value\r\n      && optionsLength === this.getOptionsLengthOffset())\r\n  );\r\n\r\n  /** Subject that emits when the component has been destroyed. */\r\n  private _onDestroy = new Subject<void>();\r\n\r\n  /** Reference to active descendant for ARIA Support. */\r\n  private activeDescendant: HTMLElement;\r\n\r\n  constructor(@Inject(MatSelect) public matSelect: MatSelect,\r\n    public changeDetectorRef: ChangeDetectorRef,\r\n    private _viewportRuler: ViewportRuler,\r\n    @Optional() @Inject(MatOption) public matOption: MatOption = null,\r\n    @Optional() @Inject(MatFormField) public matFormField: MatFormField = null,\r\n    @Optional() @Inject(MAT_SELECTSEARCH_DEFAULT_OPTIONS) defaultOptions?: MatSelectSearchOptions\r\n  ) {\r\n    this.applyDefaultOptions(defaultOptions);\r\n  }\r\n\r\n  private applyDefaultOptions(defaultOptions: MatSelectSearchOptions) {\r\n    if (!defaultOptions) {\r\n      return;\r\n    }\r\n    for (const key of configurableDefaultOptions) {\r\n      if (defaultOptions.hasOwnProperty(key)) {\r\n        (this[key] as any) = defaultOptions[key];\r\n      }\r\n    }\r\n  }\r\n\r\n  ngOnInit() {\r\n    // set custom mat-option class if the component was placed inside a mat-option\r\n    if (this.matOption) {\r\n      this.matOption.disabled = true;\r\n      this.matOption._getHostElement().classList.add('contains-mat-select-search');\r\n      this.matOption._getHostElement().setAttribute('aria-hidden', 'true');\r\n    } else {\r\n      console.error('<ngx-mat-select-search> must be placed inside a <mat-option> element');\r\n    }\r\n\r\n    // when the select dropdown panel is opened or closed\r\n    this.matSelect.openedChange\r\n      .pipe(\r\n        delay(1),\r\n        takeUntil(this._onDestroy)\r\n      )\r\n      .subscribe((opened) => {\r\n        if (opened) {\r\n          this.updateInputWidth();\r\n          // focus the search field when opening\r\n          if (!this.disableInitialFocus) {\r\n            this._focus();\r\n          }\r\n        } else {\r\n          // clear it when closing\r\n          if (this.clearSearchInput) {\r\n            this._reset();\r\n          }\r\n        }\r\n      });\r\n\r\n\r\n\r\n    // set the first item active after the options changed\r\n    this.matSelect.openedChange\r\n      .pipe(\r\n        take(1),\r\n        switchMap((_) => {\r\n        this._options = this.matSelect.options;\r\n\r\n        // Closure variable for tracking the most recent first option.\r\n        // In order to avoid avoid causing the list to\r\n        // scroll to the top when options are added to the bottom of\r\n        // the list (eg: infinite scroll), we compare only\r\n        // the changes to the first options to determine if we\r\n        // should set the first item as active.\r\n        // This prevents unnecessary scrolling to the top of the list\r\n        // when options are appended, but allows the first item\r\n        // in the list to be set as active by default when there\r\n        // is no active selection\r\n        let previousFirstOption = this._options.toArray()[this.getOptionsLengthOffset()];\r\n\r\n        return this._options.changes\r\n          .pipe(tap(() => {\r\n            // avoid \"expression has been changed\" error\r\n            setTimeout(() => {\r\n              // Convert the QueryList to an array\r\n              const options = this._options.toArray();\r\n\r\n              // The true first item is offset by 1\r\n              const currentFirstOption = options[this.getOptionsLengthOffset()];\r\n\r\n              const keyManager = this.matSelect._keyManager;\r\n              if (keyManager && this.matSelect.panelOpen && currentFirstOption) {\r\n\r\n                // set first item active and input width\r\n\r\n                // Check to see if the first option in these changes is different from the previous.\r\n                const firstOptionIsChanged = !previousFirstOption\r\n                  || !this.matSelect.compareWith(previousFirstOption.value, currentFirstOption.value);\r\n\r\n                // CASE: The first option is different now.\r\n                // Indiciates we should set it as active and scroll to the top.\r\n                if (firstOptionIsChanged\r\n                  || !keyManager.activeItem\r\n                  || !options.find(option => this.matSelect.compareWith(option.value, keyManager.activeItem.value))) {\r\n                  keyManager.setActiveItem(this.getOptionsLengthOffset());\r\n                }\r\n\r\n                // wait for panel width changes\r\n                setTimeout(() => {\r\n                  this.updateInputWidth();\r\n                });\r\n              }\r\n\r\n              // Update our reference\r\n              previousFirstOption = currentFirstOption;\r\n            });\r\n          }));\r\n        })\r\n      )\r\n      .pipe(takeUntil(this._onDestroy))\r\n      .subscribe();\r\n\r\n    // add or remove css class depending on whether to show the no entries found message\r\n    // note: this is hacky\r\n    this._showNoEntriesFound$.pipe(\r\n      takeUntil(this._onDestroy)\r\n    ).subscribe(showNoEntriesFound => {\r\n      // set no entries found class on mat option\r\n      if (this.matOption) {\r\n        if (showNoEntriesFound) {\r\n          this.matOption._getHostElement().classList.add('mat-select-search-no-entries-found');\r\n        } else {\r\n          this.matOption._getHostElement().classList.remove('mat-select-search-no-entries-found');\r\n        }\r\n      }\r\n    });\r\n\r\n    // resize the input width when the viewport is resized, i.e. the trigger width could potentially be resized\r\n    this._viewportRuler.change()\r\n      .pipe(takeUntil(this._onDestroy))\r\n      .subscribe(() => {\r\n        if (this.matSelect.panelOpen) {\r\n          this.updateInputWidth();\r\n        }\r\n      });\r\n\r\n    this.initMultipleHandling();\r\n\r\n    this.optionsList$.pipe(\r\n      takeUntil(this._onDestroy)\r\n    ).subscribe(() => {\r\n      // update view when available options change\r\n      this.changeDetectorRef.markForCheck();\r\n    });\r\n  }\r\n\r\n  _emitSelectAllBooleanToParent(state: boolean) {\r\n    this.toggleAll.emit(state);\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this._onDestroy.next();\r\n    this._onDestroy.complete();\r\n  }\r\n\r\n  _isToggleAllCheckboxVisible(): boolean {\r\n    return this.matSelect.multiple && this.showToggleAllCheckbox;\r\n  }\r\n\r\n  /**\r\n   * Handles the key down event with MatSelect.\r\n   * Allows e.g. selecting with enter key, navigation with arrow keys, etc.\r\n   * @param event\r\n   */\r\n  _handleKeydown(event: KeyboardEvent) {\r\n    // Prevent propagation for all alphanumeric characters in order to avoid selection issues\r\n    if ((event.key && event.key.length === 1) ||\r\n      (event.keyCode >= A && event.keyCode <= Z) ||\r\n      (event.keyCode >= ZERO && event.keyCode <= NINE) ||\r\n      (event.keyCode === SPACE)\r\n      || (this.preventHomeEndKeyPropagation && (event.keyCode === HOME || event.keyCode === END))\r\n    ) {\r\n      event.stopPropagation();\r\n    }\r\n\r\n    if (this.matSelect.multiple && event.key && event.keyCode === ENTER) {\r\n      // Regain focus after multiselect, so we can further type\r\n      setTimeout(() => this._focus());\r\n    }\r\n\r\n    // Special case if click Escape, if input is empty, close the dropdown, if not, empty out the search field\r\n    if (this.enableClearOnEscapePressed === true && event.keyCode === ESCAPE && this.value) {\r\n      this._reset(true);\r\n      event.stopPropagation();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Handles the key up event with MatSelect.\r\n   * Allows e.g. the announcing of the currently activeDescendant by screen readers.\r\n   */\r\n  _handleKeyup(event: KeyboardEvent) {\r\n    if (event.keyCode === UP_ARROW || event.keyCode === DOWN_ARROW) {\r\n      const ariaActiveDescendantId = this.matSelect._getAriaActiveDescendant();\r\n      const index = this._options.toArray().findIndex(item => item.id === ariaActiveDescendantId);\r\n      if (index !== -1) {\r\n        this.unselectActiveDescendant();\r\n        this.activeDescendant = this._options.toArray()[index]._getHostElement();\r\n        this.activeDescendant.setAttribute('aria-selected', 'true');\r\n        this.searchSelectInput.nativeElement.setAttribute('aria-activedescendant', ariaActiveDescendantId);\r\n      }\r\n    }\r\n  }\r\n\r\n  writeValue(value: string) {\r\n    this._lastExternalInputValue = value;\r\n    this._formControl.setValue(value);\r\n    this.changeDetectorRef.markForCheck();\r\n  }\r\n\r\n  onBlur() {\r\n    this.unselectActiveDescendant();\r\n    this.onTouched();\r\n  }\r\n\r\n  registerOnChange(fn: (value: string) => void) {\r\n    this._formControl.valueChanges.pipe(\r\n      filter(value => value !== this._lastExternalInputValue),\r\n      tap(() => this._lastExternalInputValue = undefined),\r\n      takeUntil(this._onDestroy)\r\n    ).subscribe(fn);\r\n  }\r\n\r\n  registerOnTouched(fn: Function) {\r\n    this.onTouched = fn;\r\n  }\r\n\r\n  /**\r\n   * Focuses the search input field\r\n   */\r\n  public _focus() {\r\n    if (!this.searchSelectInput || !this.matSelect.panel) {\r\n      return;\r\n    }\r\n    // save and restore scrollTop of panel, since it will be reset by focus()\r\n    // note: this is hacky\r\n    const panel = this.matSelect.panel.nativeElement;\r\n    const scrollTop = panel.scrollTop;\r\n\r\n    // focus\r\n    this.searchSelectInput.nativeElement.focus();\r\n\r\n    panel.scrollTop = scrollTop;\r\n  }\r\n\r\n  /**\r\n   * Resets the current search value\r\n   * @param focus whether to focus after resetting\r\n   */\r\n  public _reset(focus?: boolean) {\r\n    this._formControl.setValue('');\r\n    if (focus) {\r\n      this._focus();\r\n    }\r\n  }\r\n\r\n\r\n  /**\r\n   * Initializes handling <mat-select [multiple]=\"true\">\r\n   * Note: to improve this code, mat-select should be extended to allow disabling resetting the selection while filtering.\r\n   */\r\n  private initMultipleHandling() {\r\n    if (!this.matSelect.ngControl) {\r\n      if (this.matSelect.multiple) {\r\n        // note: the access to matSelect.ngControl (instead of matSelect.value / matSelect.valueChanges)\r\n        // is necessary to properly work in multi-selection mode.\r\n        console.error('the mat-select containing ngx-mat-select-search must have a ngModel or formControl directive when multiple=true');\r\n      }\r\n      return;\r\n    }\r\n    // if <mat-select [multiple]=\"true\">\r\n    // store previously selected values and restore them when they are deselected\r\n    // because the option is not available while we are currently filtering\r\n    this.previousSelectedValues = this.matSelect.ngControl.value;\r\n\r\n    this.matSelect.ngControl.valueChanges\r\n      .pipe(takeUntil(this._onDestroy))\r\n      .subscribe((values) => {\r\n        let restoreSelectedValues = false;\r\n        if (this.matSelect.multiple) {\r\n          if ((this.alwaysRestoreSelectedOptionsMulti || (this._formControl.value && this._formControl.value.length))\r\n            && this.previousSelectedValues && Array.isArray(this.previousSelectedValues)) {\r\n            if (!values || !Array.isArray(values)) {\r\n              values = [];\r\n            }\r\n            const optionValues = this.matSelect.options.map(option => option.value);\r\n            this.previousSelectedValues.forEach(previousValue => {\r\n              if (!values.some(v => this.matSelect.compareWith(v, previousValue))\r\n                && !optionValues.some(v => this.matSelect.compareWith(v, previousValue))) {\r\n                // if a value that was selected before is deselected and not found in the options, it was deselected\r\n                // due to the filtering, so we restore it.\r\n                values.push(previousValue);\r\n                restoreSelectedValues = true;\r\n              }\r\n            });\r\n          }\r\n        }\r\n        this.previousSelectedValues = values;\r\n\r\n        if (restoreSelectedValues) {\r\n          this.matSelect._onChange(values);\r\n        }\r\n      });\r\n  }\r\n\r\n  /**\r\n   *  Set the width of the innerSelectSearch to fit even custom scrollbars\r\n   *  And support all Operation Systems\r\n   */\r\n  public updateInputWidth() {\r\n    if (!this.innerSelectSearch || !this.innerSelectSearch.nativeElement) {\r\n      return;\r\n    }\r\n    let element: HTMLElement = this.innerSelectSearch.nativeElement;\r\n    let panelElement: HTMLElement;\r\n    while (element = element.parentElement) {\r\n      if (element.classList.contains('mat-select-panel')) {\r\n        panelElement = element;\r\n        break;\r\n      }\r\n    }\r\n    if (panelElement) {\r\n      this.innerSelectSearch.nativeElement.style.width = panelElement.clientWidth + 'px';\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Determine the offset to length that can be caused by the optional matOption used as a search input.\r\n   */\r\n  private getOptionsLengthOffset(): number {\r\n    if (this.matOption) {\r\n      return 1;\r\n    } else {\r\n      return 0;\r\n    }\r\n  }\r\n\r\n  private unselectActiveDescendant() {\r\n    this.activeDescendant?.removeAttribute('aria-selected');\r\n    this.searchSelectInput.nativeElement.removeAttribute('aria-activedescendant');\r\n  }\r\n\r\n}\r\n","<!--\r\nCopyright (c) 2018 Bithost GmbH All Rights Reserved.\r\n\r\nUse of this source code is governed by an MIT-style license that can be\r\nfound in the LICENSE file at https://angular.io/license\r\n-->\r\n<!-- Placeholder to adjust vertical offset of the mat-option elements -->\r\n<input matInput class=\"mat-select-search-input mat-select-search-hidden\"/>\r\n\r\n<!-- Note: the  mat-datepicker-content mat-tab-header are needed to inherit the material theme colors, see PR #22 -->\r\n<div\r\n      #innerSelectSearch\r\n      class=\"mat-select-search-inner mat-typography mat-datepicker-content mat-tab-header\"\r\n      [ngClass]=\"{'mat-select-search-inner-multiple': matSelect.multiple, 'mat-select-search-inner-toggle-all': _isToggleAllCheckboxVisible() }\">\r\n\r\n  <div class=\"mat-select-search-inner-row\">\r\n    <mat-checkbox *ngIf=\"_isToggleAllCheckboxVisible()\"\r\n                  [color]=\"matFormField?.color\"\r\n                  class=\"mat-select-search-toggle-all-checkbox\"\r\n                  [checked]=\"toggleAllCheckboxChecked\"\r\n                  [indeterminate]=\"toggleAllCheckboxIndeterminate\"\r\n                  [matTooltip]=\"toggleAllCheckboxTooltipMessage\"\r\n                  matTooltipClass=\"ngx-mat-select-search-toggle-all-tooltip\"\r\n                  [matTooltipPosition]=\"toggleAllCheckboxTooltipPosition\"\r\n                  (change)=\"_emitSelectAllBooleanToParent($event.checked)\"\r\n    ></mat-checkbox>\r\n\r\n    <input class=\"mat-select-search-input\"\r\n           autocomplete=\"off\"\r\n           [type]=\"type\"\r\n           [formControl]=\"_formControl\"\r\n           #searchSelectInput\r\n           (keydown)=\"_handleKeydown($event)\"\r\n           (keyup)=\"_handleKeyup($event)\"\r\n           (blur)=\"onBlur()\"\r\n           [placeholder]=\"placeholderLabel\"\r\n           [attr.aria-label]=\"ariaLabel\"\r\n    />\r\n    <mat-spinner *ngIf=\"searching\"\r\n            class=\"mat-select-search-spinner\"\r\n            diameter=\"16\"></mat-spinner>\r\n\r\n    <button *ngIf=\"!hideClearSearchButton && value && !searching\"\r\n            mat-icon-button\r\n            aria-label=\"Clear\"\r\n            (click)=\"_reset(true)\"\r\n            class=\"mat-select-search-clear\">\r\n      <ng-content *ngIf=\"clearIcon; else defaultIcon\" select=\"[ngxMatSelectSearchClear]\"></ng-content>\r\n      <ng-template #defaultIcon>\r\n        <mat-icon [svgIcon]=\"closeSvgIcon\">\r\n          {{!closeSvgIcon ? closeIcon : null}}\r\n        </mat-icon>\r\n      </ng-template>\r\n    </button>\r\n\r\n    <ng-content select=\".mat-select-search-custom-header-content\"></ng-content>\r\n  </div>\r\n\r\n  <mat-divider></mat-divider>\r\n</div>\r\n\r\n<div *ngIf=\"_showNoEntriesFound$ | async\"\r\n     class=\"mat-select-search-no-entries-found\">\r\n  <ng-content *ngIf=\"noEntriesFound; else defaultNoEntriesFound\"\r\n              select=\"[ngxMatSelectNoEntriesFound]\"></ng-content>\r\n  <ng-template #defaultNoEntriesFound>{{noEntriesFoundLabel}}</ng-template>\r\n</div>\r\n\r\n","/**\r\n * Copyright (c) 2018 Bithost GmbH All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { MatSelectSearchComponent } from './mat-select-search.component';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { MatSelectSearchClearDirective } from './mat-select-search-clear.directive';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { MatSelectNoEntriesFoundDirective } from './mat-select-no-entries-found.directive';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\n\r\nexport const MatSelectSearchVersion = '7.0.5';\r\nexport { MatSelectSearchClearDirective };\r\nexport { MatSelectNoEntriesFoundDirective };\r\n\r\n@NgModule({\r\n  imports: [\r\n    CommonModule,\r\n    ReactiveFormsModule,\r\n    MatButtonModule,\r\n    MatCheckboxModule,\r\n    MatIconModule,\r\n    MatProgressSpinnerModule,\r\n    MatTooltipModule,\r\n    MatDividerModule,\r\n  ],\r\n  declarations: [\r\n    MatSelectSearchComponent,\r\n    MatSelectSearchClearDirective,\r\n    MatSelectNoEntriesFoundDirective\r\n  ],\r\n  exports: [\r\n    MatSelectSearchComponent,\r\n    MatSelectSearchClearDirective,\r\n    MatSelectNoEntriesFoundDirective\r\n  ]\r\n})\r\nexport class NgxMatSelectSearchModule {\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}