{"version":3,"file":"herdwatch-ngx-mat-select-search.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/herdwatch-ngx-mat-select-search.ts"],"sourcesContent":["import { Directive } from '@angular/core';\n\n/**\n * Directive for providing a custom clear-icon.\n * e.g.\n * <ngx-mat-select-search [formControl]=\"bankFilterCtrl\">\n *   <mat-icon ngxMatSelectSearchClear>delete</mat-icon>\n * </ngx-mat-select-search>\n */\n@Directive({\n    selector: '[ngxMatSelectSearchClear]'\n})\nexport class MatSelectSearchClearDirective {}\n","import { InjectionToken } from '@angular/core';\nimport { MatSelectSearchComponent } from './mat-select-search.component';\n\n/** List of inputs of NgxMatSelectSearchComponent that can be configured with a global default. */\nexport const configurableDefaultOptions = [\n  'ariaLabel',\n  'clearSearchInput',\n  'closeIcon',\n  'closeSvgIcon',\n  'disableInitialFocus',\n  'disableScrollToActiveOnOptionsChanged',\n  'enableClearOnEscapePressed',\n  'hideClearSearchButton',\n  'noEntriesFoundLabel',\n  'placeholderLabel',\n  'preventHomeEndKeyPropagation',\n  'searching',\n] as const;\n\nexport type ConfigurableDefaultOptions = typeof configurableDefaultOptions[number];\n\n/**\n * InjectionToken that can be used to specify global options. e.g.\n *\n * ```typescript\n * providers: [\n *   {\n *     provide: MAT_SELECTSEARCH_DEFAULT_OPTIONS,\n *     useValue: <MatSelectSearchOptions>{\n *       closeIcon: 'delete',\n *       noEntriesFoundLabel: 'No options found'\n *     }\n *   }\n * ]\n * ```\n *\n * See the corresponding inputs of `MatSelectSearchComponent` for documentation.\n */\nexport const MAT_SELECTSEARCH_DEFAULT_OPTIONS = new InjectionToken<MatSelectSearchOptions>('mat-selectsearch-default-options');\n\n/** Global configurable options for MatSelectSearch. */\nexport type MatSelectSearchOptions = Readonly<Partial<Pick<MatSelectSearchComponent, ConfigurableDefaultOptions>>>;\n","import { Directive } from '@angular/core';\n\n/**\n * Directive for providing a custom no entries found element.\n * e.g.\n * <ngx-mat-select-search [formControl]=\"bankFilterCtrl\">\n *   <span ngxMatSelectNoEntriesFound>\n *     No entries found <button>Add</button>\n *   </span>\n * </ngx-mat-select-search>\n */\n@Directive({\n  selector: '[ngxMatSelectNoEntriesFound]'\n})\nexport class MatSelectNoEntriesFoundDirective {}\n","/**\n * Copyright (c) 2018 Bithost GmbH All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { ViewportRuler } from '@angular/cdk/scrolling';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  Inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Optional,\n  Output,\n  QueryList,\n  ViewChild\n} from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatOption } from '@angular/material/core';\nimport { MatFormField } from '@angular/material/form-field';\nimport { MatSelect } from '@angular/material/select';\nimport { BehaviorSubject, combineLatest, Observable, of, Subject } from 'rxjs';\nimport { delay, filter, map, startWith, switchMap, take, takeUntil, tap } from 'rxjs/operators';\nimport { MatSelectSearchClearDirective } from './mat-select-search-clear.directive';\nimport { configurableDefaultOptions, MAT_SELECTSEARCH_DEFAULT_OPTIONS, MatSelectSearchOptions } from './default-options';\nimport { MatSelectNoEntriesFoundDirective } from './mat-select-no-entries-found.directive';\n\n/**\n * Component providing an input field for searching MatSelect options.\n *\n * Example usage:\n *\n * interface Bank {\n *  id: string;\n *  name: string;\n * }\n *\n * @Component({\n *   selector: 'my-app-data-selection',\n *   template: `\n *     <mat-form-field>\n *       <mat-select [formControl]=\"bankCtrl\" placeholder=\"Bank\">\n *         <mat-option>\n *           <ngx-mat-select-search [formControl]=\"bankFilterCtrl\"></ngx-mat-select-search>\n *         </mat-option>\n *         <mat-option *ngFor=\"let bank of filteredBanks | async\" [value]=\"bank.id\">\n *           {{bank.name}}\n *         </mat-option>\n *       </mat-select>\n *     </mat-form-field>\n *   `\n * })\n * export class DataSelectionComponent implements OnInit, OnDestroy {\n *\n *   // control for the selected bank\n *   public bankCtrl: FormControl = new FormControl();\n *   // control for the MatSelect filter keyword\n *   public bankFilterCtrl: FormControl = new FormControl();\n *\n *   // list of banks\n *   private banks: Bank[] = [{name: 'Bank A', id: 'A'}, {name: 'Bank B', id: 'B'}, {name: 'Bank C', id: 'C'}];\n *   // list of banks filtered by search keyword\n *   public filteredBanks: ReplaySubject<Bank[]> = new ReplaySubject<Bank[]>(1);\n *\n *   // Subject that emits when the component has been destroyed.\n *   private _onDestroy = new Subject<void>();\n *\n *\n *   ngOnInit() {\n *     // load the initial bank list\n *     this.filteredBanks.next(this.banks.slice());\n *     // listen for search field value changes\n *     this.bankFilterCtrl.valueChanges\n *       .pipe(takeUntil(this._onDestroy))\n *       .subscribe(() => {\n *         this.filterBanks();\n *       });\n *   }\n *\n *   ngOnDestroy() {\n *     this._onDestroy.next();\n *     this._onDestroy.complete();\n *   }\n *\n *   private filterBanks() {\n *     if (!this.banks) {\n *       return;\n *     }\n *\n *     // get the search keyword\n *     let search = this.bankFilterCtrl.value;\n *     if (!search) {\n *       this.filteredBanks.next(this.banks.slice());\n *       return;\n *     } else {\n *       search = search.toLowerCase();\n *     }\n *\n *     // filter the banks\n *     this.filteredBanks.next(\n *       this.banks.filter(bank => bank.name.toLowerCase().indexOf(search) > -1)\n *     );\n *   }\n * }\n */\n@Component({\n  selector: 'ngx-mat-select-search',\n  templateUrl: './mat-select-search.component.html',\n  styleUrls: ['./mat-select-search.component.scss'],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => MatSelectSearchComponent),\n      multi: true\n    }\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MatSelectSearchComponent implements OnInit, OnDestroy, ControlValueAccessor {\n\n  /** Label of the search placeholder */\n  @Input() placeholderLabel = 'Suche';\n\n  /** Type of the search input field */\n  @Input() type = 'text';\n\n  /** Font-based icon used for displaying Close-Icon */\n  @Input() closeIcon = 'close';\n\n  /** SVG-based icon used for displaying Close-Icon. If set, closeIcon is overridden */\n  @Input() closeSvgIcon?: string;\n\n  /** Label to be shown when no entries are found. Set to null if no message should be shown. */\n  @Input() noEntriesFoundLabel = 'Keine Optionen gefunden';\n\n  /**\n    * Whether the search field should be cleared after the dropdown menu is closed.\n    * Useful for server-side filtering. See [#3](https://github.com/bithost-gmbh/ngx-mat-select-search/issues/3)\n    */\n  @Input() clearSearchInput = true;\n\n  /** Whether to show the search-in-progress indicator */\n  @Input() searching = false;\n\n  /** Disables initial focusing of the input field */\n  @Input() disableInitialFocus = false;\n\n  /** Enable clear input on escape pressed */\n  @Input() enableClearOnEscapePressed = false;\n\n  /**\n   * Prevents home / end key being propagated to mat-select,\n   * allowing to move the cursor within the search input instead of navigating the options\n   */\n  @Input() preventHomeEndKeyPropagation = false;\n\n  /** Disables scrolling to active options when option list changes. Useful for server-side search */\n  @Input() disableScrollToActiveOnOptionsChanged = false;\n\n  /** Adds 508 screen reader support for search box */\n  @Input() ariaLabel = 'dropdown search';\n\n  /** Whether to show Select All Checkbox (for mat-select[multi=true]) */\n  @Input() showToggleAllCheckbox = false;\n\n  /** Select all checkbox checked state */\n  @Input() toggleAllCheckboxChecked = false;\n\n  /** select all checkbox indeterminate state */\n  @Input() toggleAllCheckboxIndeterminate = false;\n\n  /** Display a message in a tooltip on the toggle-all checkbox */\n  @Input() toggleAllCheckboxTooltipMessage = '';\n\n  /** Define the position of the tooltip on the toggle-all checkbox. */\n  @Input() toggleAllCheckboxTooltipPosition: 'left' | 'right' | 'above' | 'below' | 'before' | 'after' = 'below';\n\n  /** Show/Hide the search clear button of the search input */\n  @Input() hideClearSearchButton = false;\n\n  /**\n   * Always restore selected options on selectionChange for mode multi (e.g. for lazy loading/infinity scrolling).\n   * Defaults to false, so selected options are only restored while filtering is active.\n   */\n  @Input() alwaysRestoreSelectedOptionsMulti = false;\n\n  /**\n   * Recreate array of selected values for multi-selects.\n   *\n   * This is useful if the selected values are stored in an immutable data structure.\n   */\n  @Input() recreateValuesArray = false;\n\n  /** Output emitter to send to parent component with the toggle all boolean */\n  @Output() toggleAll = new EventEmitter<boolean>();\n\n  /** Reference to the search input field */\n  @ViewChild('searchSelectInput', { read: ElementRef, static: true }) searchSelectInput: ElementRef;\n\n  /** Reference to the search input field */\n  @ViewChild('innerSelectSearch', { read: ElementRef, static: true }) innerSelectSearch: ElementRef;\n\n  /** Reference to custom search input clear icon */\n  @ContentChild(MatSelectSearchClearDirective) clearIcon: MatSelectSearchClearDirective;\n\n  /** Reference to custom no entries found element */\n  @ContentChild(MatSelectNoEntriesFoundDirective) noEntriesFound: MatSelectNoEntriesFoundDirective;\n\n  /** Current search value */\n  get value(): string {\n    return this._formControl.value;\n  }\n  private _lastExternalInputValue?: string;\n\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type,@typescript-eslint/no-explicit-any,@typescript-eslint/no-empty-function,@typescript-eslint/no-unused-vars\n  onTouched: Function = (_: any) => { };\n\n  /** Reference to the MatSelect options */\n  public set _options(_options: QueryList<MatOption>) {\n    this._options$.next(_options);\n  }\n  public get _options(): QueryList<MatOption> {\n    return this._options$.getValue();\n  }\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  public _options$: BehaviorSubject<QueryList<MatOption>> = new BehaviorSubject<QueryList<MatOption>>(null as any);\n\n  private optionsList$: Observable<MatOption[] | null> = this._options$.pipe(\n    switchMap(_options => _options ?\n      _options.changes.pipe(\n        map(options => options.toArray()),\n        startWith<MatOption[]>(_options.toArray()),\n      ) : of(null)\n    )\n  );\n\n  private optionsLength$: Observable<number> = this.optionsList$.pipe(\n    map(options => options ? options.length : 0)\n  );\n\n  /** Previously selected values when using <mat-select [multiple]=\"true\">*/\n  private previousSelectedValues: [];\n\n  public _formControl: FormControl<string> = new FormControl<string>('', {nonNullable: true});\n\n  /** Whether to show the no entries found message */\n  public _showNoEntriesFound$: Observable<boolean> = combineLatest([\n    this._formControl.valueChanges,\n    this.optionsLength$\n  ]).pipe(\n    map(([value, optionsLength]) => !!(this.noEntriesFoundLabel && value\n      && optionsLength === this.getOptionsLengthOffset()))\n  );\n\n  /** Subject that emits when the component has been destroyed. */\n  private _onDestroy = new Subject<void>();\n\n  /** Reference to active descendant for ARIA Support. */\n  private activeDescendant: HTMLElement;\n\n  constructor(@Inject(MatSelect) public matSelect: MatSelect,\n    public changeDetectorRef: ChangeDetectorRef,\n    private _viewportRuler: ViewportRuler,\n    @Optional() @Inject(MatOption) public matOption: MatOption,\n    @Optional() @Inject(MatFormField) public matFormField: MatFormField,\n    @Optional() @Inject(MAT_SELECTSEARCH_DEFAULT_OPTIONS) defaultOptions?: MatSelectSearchOptions\n  ) {\n    this.applyDefaultOptions(defaultOptions);\n  }\n\n  private applyDefaultOptions(defaultOptions?: MatSelectSearchOptions) {\n    if (!defaultOptions) {\n      return;\n    }\n    for (const key of configurableDefaultOptions) {\n      if (Object.prototype.hasOwnProperty.call(defaultOptions, key)) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        (this[key] as any) = defaultOptions[key];\n      }\n    }\n  }\n\n  ngOnInit() {\n    // set custom mat-option class if the component was placed inside a mat-option\n    if (this.matOption) {\n      this.matOption.disabled = true;\n      this.matOption._getHostElement().classList.add('contains-mat-select-search');\n      this.matOption._getHostElement().setAttribute('role', 'presentation');\n    } else {\n      console.error('<ngx-mat-select-search> must be placed inside a <mat-option> element');\n    }\n\n    // when the select dropdown panel is opened or closed\n    this.matSelect.openedChange\n      .pipe(\n        delay(1),\n        takeUntil(this._onDestroy)\n      )\n      .subscribe((opened) => {\n        if (opened) {\n          this.updateInputWidth();\n          // focus the search field when opening\n          if (!this.disableInitialFocus) {\n            this._focus();\n          }\n        } else {\n          // clear it when closing\n          if (this.clearSearchInput) {\n            this._reset();\n          }\n        }\n      });\n\n\n\n    // set the first item active after the options changed\n    this.matSelect.openedChange\n      .pipe(\n        take(1),\n        switchMap(() => {\n        this._options = this.matSelect.options;\n\n        // Closure variable for tracking the most recent first option.\n        // In order to avoid causing the list to\n        // scroll to the top when options are added to the bottom of\n        // the list (eg: infinite scroll), we compare only\n        // the changes to the first options to determine if we\n        // should set the first item as active.\n        // This prevents unnecessary scrolling to the top of the list\n        // when options are appended, but allows the first item\n        // in the list to be set as active by default when there\n        // is no active selection\n        let previousFirstOption = this._options.toArray()[this.getOptionsLengthOffset()];\n\n        return this._options.changes\n          .pipe(tap(() => {\n            // avoid \"expression has been changed\" error\n            setTimeout(() => {\n              // Convert the QueryList to an array\n              const options = this._options.toArray();\n\n              // The true first item is offset by 1\n              const currentFirstOption = options[this.getOptionsLengthOffset()];\n\n              const keyManager = this.matSelect._keyManager;\n              if (keyManager && this.matSelect.panelOpen && currentFirstOption) {\n\n                // set first item active and input width\n\n                // Check to see if the first option in these changes is different from the previous.\n                const firstOptionIsChanged = !previousFirstOption\n                  || !this.matSelect.compareWith(previousFirstOption.value, currentFirstOption.value);\n\n                // CASE: The first option is different now.\n                // Indicates we should set it as active and scroll to the top.\n                if (firstOptionIsChanged\n                  || !keyManager.activeItem\n                  || !options.find(option => this.matSelect.compareWith(option.value, keyManager.activeItem?.value))) {\n                  keyManager.setActiveItem(this.getOptionsLengthOffset());\n                }\n\n                // wait for panel width changes\n                setTimeout(() => {\n                  this.updateInputWidth();\n                });\n              }\n\n              // Update our reference\n              previousFirstOption = currentFirstOption;\n            });\n          }));\n        })\n      )\n      .pipe(takeUntil(this._onDestroy))\n      .subscribe();\n\n    // add or remove css class depending on whether to show the no entries found message\n    // note: this is hacky\n    this._showNoEntriesFound$.pipe(\n      takeUntil(this._onDestroy)\n    ).subscribe(showNoEntriesFound => {\n      // set no entries found class on mat option\n      if (this.matOption) {\n        if (showNoEntriesFound) {\n          this.matOption._getHostElement().classList.add('mat-select-search-no-entries-found');\n        } else {\n          this.matOption._getHostElement().classList.remove('mat-select-search-no-entries-found');\n        }\n      }\n    });\n\n    // resize the input width when the viewport is resized, i.e. the trigger width could potentially be resized\n    this._viewportRuler.change()\n      .pipe(takeUntil(this._onDestroy))\n      .subscribe(() => {\n        if (this.matSelect.panelOpen) {\n          this.updateInputWidth();\n        }\n      });\n\n    this.initMultipleHandling();\n\n    this.optionsList$.pipe(\n      takeUntil(this._onDestroy)\n    ).subscribe(() => {\n      // update view when available options change\n      this.changeDetectorRef.markForCheck();\n    });\n  }\n\n  _emitSelectAllBooleanToParent(state: boolean) {\n    this.toggleAll.emit(state);\n  }\n\n  ngOnDestroy() {\n    this._onDestroy.next();\n    this._onDestroy.complete();\n  }\n\n  _isToggleAllCheckboxVisible(): boolean {\n    return this.matSelect.multiple && this.showToggleAllCheckbox;\n  }\n\n  /**\n   * Handles the key down event with MatSelect.\n   * Allows e.g. selecting with enter key, navigation with arrow keys, etc.\n   * @param event\n   */\n  _handleKeydown(event: KeyboardEvent) {\n    // Prevent propagation for all alphanumeric characters in order to avoid selection issues\n\n    // Needed to avoid handling in https://github.com/angular/components/blob/5439460d1fe166f8ec34ab7d48f05e0dd7f6a946/src/material/select/select.ts#L965\n    if ((event.key && event.key.length === 1)\n      || (this.preventHomeEndKeyPropagation && (event.key === 'Home' || event.key === 'End'))\n    ) {\n      event.stopPropagation();\n    }\n\n    if (this.matSelect.multiple && event.key && event.key === 'Enter') {\n      // Regain focus after multiselect, so we can further type\n      setTimeout(() => this._focus());\n    }\n\n    // Special case if click Escape, if input is empty, close the dropdown, if not, empty out the search field\n    if (this.enableClearOnEscapePressed && event.key === 'Escape' && this.value) {\n      this._reset(true);\n      event.stopPropagation();\n    }\n  }\n\n  /**\n   * Handles the key up event with MatSelect.\n   * Allows e.g. the announcing of the currently activeDescendant by screen readers.\n   */\n  _handleKeyup(event: KeyboardEvent) {\n    if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n      const ariaActiveDescendantId = this.matSelect._getAriaActiveDescendant();\n      const index = this._options.toArray().findIndex(item => item.id === ariaActiveDescendantId);\n      if (index !== -1) {\n        this.unselectActiveDescendant();\n        this.activeDescendant = this._options.toArray()[index]._getHostElement();\n        this.activeDescendant.setAttribute('aria-selected', 'true');\n        this.searchSelectInput.nativeElement.setAttribute('aria-activedescendant', ariaActiveDescendantId);\n      }\n    }\n  }\n\n  writeValue(value: string) {\n    this._lastExternalInputValue = value;\n    this._formControl.setValue(value);\n    this.changeDetectorRef.markForCheck();\n  }\n\n  onBlur() {\n    this.unselectActiveDescendant();\n    this.onTouched();\n  }\n\n  registerOnChange(fn: (value: string) => void) {\n    this._formControl.valueChanges.pipe(\n      filter(value => value !== this._lastExternalInputValue),\n      tap(() => this._lastExternalInputValue = undefined),\n      takeUntil(this._onDestroy)\n    ).subscribe(fn);\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n  registerOnTouched(fn: Function) {\n    this.onTouched = fn;\n  }\n\n  /**\n   * Focuses the search input field\n   */\n  public _focus() {\n    if (!this.searchSelectInput || !this.matSelect.panel) {\n      return;\n    }\n    // save and restore scrollTop of panel, since it will be reset by focus()\n    // note: this is hacky\n    const panel = this.matSelect.panel.nativeElement;\n    const scrollTop = panel.scrollTop;\n\n    // focus\n    this.searchSelectInput.nativeElement.focus();\n\n    panel.scrollTop = scrollTop;\n  }\n\n  /**\n   * Resets the current search value\n   * @param focus whether to focus after resetting\n   */\n  public _reset(focus?: boolean) {\n    this._formControl.setValue('');\n    if (focus) {\n      this._focus();\n    }\n  }\n\n\n  /**\n   * Initializes handling <mat-select [multiple]=\"true\">\n   * Note: to improve this code, mat-select should be extended to allow disabling resetting the selection while filtering.\n   */\n  private initMultipleHandling() {\n    if (!this.matSelect.ngControl) {\n      if (this.matSelect.multiple) {\n        // note: the access to matSelect.ngControl (instead of matSelect.value / matSelect.valueChanges)\n        // is necessary to properly work in multi-selection mode.\n        console.error('the mat-select containing ngx-mat-select-search must have a ngModel or formControl directive when multiple=true');\n      }\n      return;\n    }\n    // if <mat-select [multiple]=\"true\">\n    // store previously selected values and restore them when they are deselected\n    // because the option is not available while we are currently filtering\n    this.previousSelectedValues = this.matSelect.ngControl.value;\n\n    if (!this.matSelect.ngControl.valueChanges) {\n      return;\n    }\n\n    this.matSelect.ngControl.valueChanges\n      .pipe(takeUntil(this._onDestroy))\n      .subscribe((values) => {\n        let restoreSelectedValues = false;\n        if (this.matSelect.multiple) {\n          if ((this.alwaysRestoreSelectedOptionsMulti || (this._formControl.value && this._formControl.value.length))\n            && this.previousSelectedValues && Array.isArray(this.previousSelectedValues)) {\n            if (!values || !Array.isArray(values)) {\n              values = [];\n            }\n            const optionValues = this.matSelect.options.map(option => option.value);\n            this.previousSelectedValues.forEach(previousValue => {\n              if (!values.some(v => this.matSelect.compareWith(v, previousValue))\n                && !optionValues.some(v => this.matSelect.compareWith(v, previousValue))) {\n                // if a value that was selected before is deselected and not found in the options, it was deselected\n                // due to the filtering, so we restore it.\n                if (this.recreateValuesArray) {\n                  values = [...values, previousValue];\n                } else {\n                  values.push(previousValue);\n                }\n                restoreSelectedValues = true;\n              }\n            });\n          }\n        }\n        this.previousSelectedValues = values;\n\n        if (restoreSelectedValues) {\n          this.matSelect._onChange(values);\n        }\n      });\n  }\n\n  /**\n   *  Set the width of the innerSelectSearch to fit even custom scrollbars\n   *  And support all Operating Systems\n   */\n  public updateInputWidth() {\n    if (!this.innerSelectSearch || !this.innerSelectSearch.nativeElement) {\n      return;\n    }\n    let element: HTMLElement | null = this.innerSelectSearch.nativeElement;\n    let panelElement: HTMLElement | null = null;\n    while (element && element.parentElement) {\n      element = element.parentElement;\n      if (element.classList.contains('mat-select-panel')) {\n        panelElement = element;\n        break;\n      }\n    }\n    if (panelElement) {\n      this.innerSelectSearch.nativeElement.style.width = panelElement.clientWidth + 'px';\n    }\n  }\n\n  /**\n   * Determine the offset to length that can be caused by the optional matOption used as a search input.\n   */\n  private getOptionsLengthOffset(): number {\n    if (this.matOption) {\n      return 1;\n    } else {\n      return 0;\n    }\n  }\n\n  private unselectActiveDescendant() {\n    this.activeDescendant?.removeAttribute('aria-selected');\n    this.searchSelectInput.nativeElement.removeAttribute('aria-activedescendant');\n  }\n\n}\n","<!--\nCopyright (c) 2018 Bithost GmbH All Rights Reserved.\n\nUse of this source code is governed by an MIT-style license that can be\nfound in the LICENSE file at https://angular.io/license\n-->\n<!-- Placeholder to adjust vertical offset of the mat-option elements -->\n<input matInput class=\"mat-select-search-input mat-select-search-hidden\"/>\n\n<!-- Note: the  mat-datepicker-content mat-tab-header are needed to inherit the material theme colors, see PR #22 -->\n<div\n      #innerSelectSearch\n      class=\"mat-select-search-inner mat-typography mat-datepicker-content mat-tab-header\"\n      [ngClass]=\"{'mat-select-search-inner-multiple': matSelect.multiple, 'mat-select-search-inner-toggle-all': _isToggleAllCheckboxVisible() }\">\n\n  <div class=\"mat-select-search-inner-row\">\n    <mat-checkbox *ngIf=\"_isToggleAllCheckboxVisible()\"\n                  [color]=\"matFormField?.color\"\n                  class=\"mat-select-search-toggle-all-checkbox\"\n                  [checked]=\"toggleAllCheckboxChecked\"\n                  [indeterminate]=\"toggleAllCheckboxIndeterminate\"\n                  [matTooltip]=\"toggleAllCheckboxTooltipMessage\"\n                  matTooltipClass=\"ngx-mat-select-search-toggle-all-tooltip\"\n                  [matTooltipPosition]=\"toggleAllCheckboxTooltipPosition\"\n                  (change)=\"_emitSelectAllBooleanToParent($event.checked)\"\n    ></mat-checkbox>\n\n    <input class=\"mat-select-search-input\"\n           autocomplete=\"off\"\n           [type]=\"type\"\n           [formControl]=\"_formControl\"\n           #searchSelectInput\n           (keydown)=\"_handleKeydown($event)\"\n           (keyup)=\"_handleKeyup($event)\"\n           (blur)=\"onBlur()\"\n           [placeholder]=\"placeholderLabel\"\n           [attr.aria-label]=\"ariaLabel\"\n    />\n    <mat-spinner *ngIf=\"searching\"\n            class=\"mat-select-search-spinner\"\n            diameter=\"16\"></mat-spinner>\n\n    <button *ngIf=\"!hideClearSearchButton && value && !searching\"\n            mat-icon-button\n            aria-label=\"Clear\"\n            (click)=\"_reset(true)\"\n            class=\"mat-select-search-clear\">\n      <ng-content *ngIf=\"clearIcon; else defaultIcon\" select=\"[ngxMatSelectSearchClear]\"></ng-content>\n      <ng-template #defaultIcon>\n        <mat-icon [svgIcon]=\"closeSvgIcon\">\n          {{!closeSvgIcon ? closeIcon : null}}\n        </mat-icon>\n      </ng-template>\n    </button>\n\n    <ng-content select=\".mat-select-search-custom-header-content\"></ng-content>\n  </div>\n\n  <mat-divider></mat-divider>\n</div>\n\n<div *ngIf=\"_showNoEntriesFound$ | async\"\n     class=\"mat-select-search-no-entries-found\">\n  <ng-content *ngIf=\"noEntriesFound; else defaultNoEntriesFound\"\n              select=\"[ngxMatSelectNoEntriesFound]\"></ng-content>\n  <ng-template #defaultNoEntriesFound>{{noEntriesFoundLabel}}</ng-template>\n</div>\n\n","/**\n * Copyright (c) 2018 Bithost GmbH All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { NgModule } from '@angular/core';\nimport { MatSelectSearchComponent } from './mat-select-search.component';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { CommonModule } from '@angular/common';\n\nimport { MatSelectSearchClearDirective } from './mat-select-search-clear.directive';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatSelectNoEntriesFoundDirective } from './mat-select-no-entries-found.directive';\nimport { MatDividerModule } from '@angular/material/divider';\n\nexport const MatSelectSearchVersion = '7.0.8';\nexport { MatSelectSearchClearDirective };\nexport { MatSelectNoEntriesFoundDirective };\n\n@NgModule({\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    MatButtonModule,\n    MatCheckboxModule,\n    MatIconModule,\n    MatProgressSpinnerModule,\n    MatTooltipModule,\n    MatDividerModule,\n  ],\n  declarations: [\n    MatSelectSearchComponent,\n    MatSelectSearchClearDirective,\n    MatSelectNoEntriesFoundDirective\n  ],\n  exports: [\n    MatSelectSearchComponent,\n    MatSelectSearchClearDirective,\n    MatSelectNoEntriesFoundDirective\n  ]\n})\nexport class NgxMatSelectSearchModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;;;;;;AAMG;MAIU,6BAA6B,CAAA;wGAA7B,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAA7B,6BAA6B,EAAA,QAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,2BAA2B;AACxC,iBAAA,CAAA;;;ACRD;AACa,MAAA,0BAA0B,GAAG;IACxC,WAAW;IACX,kBAAkB;IAClB,WAAW;IACX,cAAc;IACd,qBAAqB;IACrB,uCAAuC;IACvC,4BAA4B;IAC5B,uBAAuB;IACvB,qBAAqB;IACrB,kBAAkB;IAClB,8BAA8B;IAC9B,WAAW;EACF;AAIX;;;;;;;;;;;;;;;;AAgBG;MACU,gCAAgC,GAAG,IAAI,cAAc,CAAyB,kCAAkC;;ACpC7H;;;;;;;;AAQG;MAIU,gCAAgC,CAAA;wGAAhC,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;4FAAhC,gCAAgC,EAAA,QAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAhC,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAH5C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,8BAA8B;AACzC,iBAAA,CAAA;;;ACsBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6EG;MAcU,wBAAwB,CAAA;AA8IG,IAAA,SAAA,CAAA;AAC7B,IAAA,iBAAA,CAAA;AACC,IAAA,cAAA,CAAA;AAC8B,IAAA,SAAA,CAAA;AACG,IAAA,YAAA,CAAA;;IA/IlC,gBAAgB,GAAG,OAAO,CAAC;;IAG3B,IAAI,GAAG,MAAM,CAAC;;IAGd,SAAS,GAAG,OAAO,CAAC;;AAGpB,IAAA,YAAY,CAAU;;IAGtB,mBAAmB,GAAG,yBAAyB,CAAC;AAEzD;;;AAGI;IACK,gBAAgB,GAAG,IAAI,CAAC;;IAGxB,SAAS,GAAG,KAAK,CAAC;;IAGlB,mBAAmB,GAAG,KAAK,CAAC;;IAG5B,0BAA0B,GAAG,KAAK,CAAC;AAE5C;;;AAGG;IACM,4BAA4B,GAAG,KAAK,CAAC;;IAGrC,qCAAqC,GAAG,KAAK,CAAC;;IAG9C,SAAS,GAAG,iBAAiB,CAAC;;IAG9B,qBAAqB,GAAG,KAAK,CAAC;;IAG9B,wBAAwB,GAAG,KAAK,CAAC;;IAGjC,8BAA8B,GAAG,KAAK,CAAC;;IAGvC,+BAA+B,GAAG,EAAE,CAAC;;IAGrC,gCAAgC,GAA8D,OAAO,CAAC;;IAGtG,qBAAqB,GAAG,KAAK,CAAC;AAEvC;;;AAGG;IACM,iCAAiC,GAAG,KAAK,CAAC;AAEnD;;;;AAIG;IACM,mBAAmB,GAAG,KAAK,CAAC;;AAG3B,IAAA,SAAS,GAAG,IAAI,YAAY,EAAW,CAAC;;AAGkB,IAAA,iBAAiB,CAAa;;AAG9B,IAAA,iBAAiB,CAAa;;AAGrD,IAAA,SAAS,CAAgC;;AAGtC,IAAA,cAAc,CAAmC;;AAGjG,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;KAChC;AACO,IAAA,uBAAuB,CAAU;;AAGzC,IAAA,SAAS,GAAa,CAAC,CAAM,KAAI,GAAI,CAAC;;IAGtC,IAAW,QAAQ,CAAC,QAA8B,EAAA;AAChD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC/B;AACD,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;KAClC;;AAEM,IAAA,SAAS,GAA0C,IAAI,eAAe,CAAuB,IAAW,CAAC,CAAC;AAEzG,IAAA,YAAY,GAAmC,IAAI,CAAC,SAAS,CAAC,IAAI,CACxE,SAAS,CAAC,QAAQ,IAAI,QAAQ;AAC5B,QAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,CACnB,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,EACjC,SAAS,CAAc,QAAQ,CAAC,OAAO,EAAE,CAAC,CAC3C,GAAG,EAAE,CAAC,IAAI,CAAC,CACb,CACF,CAAC;IAEM,cAAc,GAAuB,IAAI,CAAC,YAAY,CAAC,IAAI,CACjE,GAAG,CAAC,OAAO,IAAI,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAC7C,CAAC;;AAGM,IAAA,sBAAsB,CAAK;AAE5B,IAAA,YAAY,GAAwB,IAAI,WAAW,CAAS,EAAE,EAAE,EAAC,WAAW,EAAE,IAAI,EAAC,CAAC,CAAC;;IAGrF,oBAAoB,GAAwB,aAAa,CAAC;QAC/D,IAAI,CAAC,YAAY,CAAC,YAAY;AAC9B,QAAA,IAAI,CAAC,cAAc;KACpB,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,mBAAmB,IAAI,KAAK;WAC/D,aAAa,KAAK,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC,CACvD,CAAC;;AAGM,IAAA,UAAU,GAAG,IAAI,OAAO,EAAQ,CAAC;;AAGjC,IAAA,gBAAgB,CAAc;IAEtC,WAAsC,CAAA,SAAoB,EACjD,iBAAoC,EACnC,cAA6B,EACC,SAAoB,EACjB,YAA0B,EACb,cAAuC,EAAA;QALzD,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QACjD,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAmB;QACnC,IAAc,CAAA,cAAA,GAAd,cAAc,CAAe;QACC,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QACjB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;AAGnE,QAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;KAC1C;AAEO,IAAA,mBAAmB,CAAC,cAAuC,EAAA;QACjE,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO;SACR;AACD,QAAA,KAAK,MAAM,GAAG,IAAI,0BAA0B,EAAE;AAC5C,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,EAAE;;gBAE5D,IAAI,CAAC,GAAG,CAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;aAC1C;SACF;KACF;IAED,QAAQ,GAAA;;AAEN,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC/B,YAAA,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAC7E,YAAA,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;SACvE;aAAM;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,sEAAsE,CAAC,CAAC;SACvF;;QAGD,IAAI,CAAC,SAAS,CAAC,YAAY;AACxB,aAAA,IAAI,CACH,KAAK,CAAC,CAAC,CAAC,EACR,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC3B;AACA,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;YACpB,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,gBAAgB,EAAE,CAAC;;AAExB,gBAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;oBAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;iBACf;aACF;iBAAM;;AAEL,gBAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;oBACzB,IAAI,CAAC,MAAM,EAAE,CAAC;iBACf;aACF;AACH,SAAC,CAAC,CAAC;;QAKL,IAAI,CAAC,SAAS,CAAC,YAAY;aACxB,IAAI,CACH,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,MAAK;YACf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;;;;;;;;;;;AAYvC,YAAA,IAAI,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;AAEjF,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO;AACzB,iBAAA,IAAI,CAAC,GAAG,CAAC,MAAK;;gBAEb,UAAU,CAAC,MAAK;;oBAEd,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;;oBAGxC,MAAM,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;AAElE,oBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;oBAC9C,IAAI,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,kBAAkB,EAAE;;;wBAKhE,MAAM,oBAAoB,GAAG,CAAC,mBAAmB;AAC5C,+BAAA,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,mBAAmB,CAAC,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;;;AAItF,wBAAA,IAAI,oBAAoB;+BACnB,CAAC,UAAU,CAAC,UAAU;+BACtB,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,EAAE;4BACpG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;yBACzD;;wBAGD,UAAU,CAAC,MAAK;4BACd,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC1B,yBAAC,CAAC,CAAC;qBACJ;;oBAGD,mBAAmB,GAAG,kBAAkB,CAAC;AAC3C,iBAAC,CAAC,CAAC;aACJ,CAAC,CAAC,CAAC;AACN,SAAC,CAAC,CACH;AACA,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,aAAA,SAAS,EAAE,CAAC;;;AAIf,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAC5B,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC3B,CAAC,SAAS,CAAC,kBAAkB,IAAG;;AAE/B,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,kBAAkB,EAAE;AACtB,oBAAA,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;iBACtF;qBAAM;AACL,oBAAA,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;iBACzF;aACF;AACH,SAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;AACzB,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aAChC,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;gBAC5B,IAAI,CAAC,gBAAgB,EAAE,CAAC;aACzB;AACH,SAAC,CAAC,CAAC;QAEL,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CACpB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC3B,CAAC,SAAS,CAAC,MAAK;;AAEf,YAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;AACxC,SAAC,CAAC,CAAC;KACJ;AAED,IAAA,6BAA6B,CAAC,KAAc,EAAA;AAC1C,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC5B;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;KAC5B;IAED,2BAA2B,GAAA;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,qBAAqB,CAAC;KAC9D;AAED;;;;AAIG;AACH,IAAA,cAAc,CAAC,KAAoB,EAAA;;;AAIjC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC;AACnC,gBAAC,IAAI,CAAC,4BAA4B,KAAK,KAAK,CAAC,GAAG,KAAK,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC,EACvF;YACA,KAAK,CAAC,eAAe,EAAE,CAAC;SACzB;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;;YAEjE,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;SACjC;;AAGD,QAAA,IAAI,IAAI,CAAC,0BAA0B,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE;AAC3E,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAClB,KAAK,CAAC,eAAe,EAAE,CAAC;SACzB;KACF;AAED;;;AAGG;AACH,IAAA,YAAY,CAAC,KAAoB,EAAA;AAC/B,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YACxD,MAAM,sBAAsB,GAAG,IAAI,CAAC,SAAS,CAAC,wBAAwB,EAAE,CAAC;YACzE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,sBAAsB,CAAC,CAAC;AAC5F,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBAChB,IAAI,CAAC,wBAAwB,EAAE,CAAC;AAChC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,eAAe,EAAE,CAAC;gBACzE,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;gBAC5D,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,YAAY,CAAC,uBAAuB,EAAE,sBAAsB,CAAC,CAAC;aACpG;SACF;KACF;AAED,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;KACvC;IAED,MAAM,GAAA;QACJ,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED,IAAA,gBAAgB,CAAC,EAA2B,EAAA;QAC1C,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CACjC,MAAM,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,uBAAuB,CAAC,EACvD,GAAG,CAAC,MAAM,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC,EACnD,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAC3B,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;KACjB;;AAGD,IAAA,iBAAiB,CAAC,EAAY,EAAA;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED;;AAEG;IACI,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;YACpD,OAAO;SACR;;;QAGD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,CAAC;AACjD,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;;AAGlC,QAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AAE7C,QAAA,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;KAC7B;AAED;;;AAGG;AACI,IAAA,MAAM,CAAC,KAAe,EAAA;AAC3B,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,MAAM,EAAE,CAAC;SACf;KACF;AAGD;;;AAGG;IACK,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AAC7B,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;;;AAG3B,gBAAA,OAAO,CAAC,KAAK,CAAC,iHAAiH,CAAC,CAAC;aAClI;YACD,OAAO;SACR;;;;QAID,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;QAE7D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,YAAY,EAAE;YAC1C,OAAO;SACR;AAED,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,YAAY;AAClC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,aAAA,SAAS,CAAC,CAAC,MAAM,KAAI;YACpB,IAAI,qBAAqB,GAAG,KAAK,CAAC;AAClC,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;gBAC3B,IAAI,CAAC,IAAI,CAAC,iCAAiC,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;AACrG,uBAAA,IAAI,CAAC,sBAAsB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE;oBAC9E,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;wBACrC,MAAM,GAAG,EAAE,CAAC;qBACb;AACD,oBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AACxE,oBAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,aAAa,IAAG;AAClD,wBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;+BAC9D,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE;;;AAG1E,4BAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,gCAAA,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,aAAa,CAAC,CAAC;6BACrC;iCAAM;AACL,gCAAA,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;6BAC5B;4BACD,qBAAqB,GAAG,IAAI,CAAC;yBAC9B;AACH,qBAAC,CAAC,CAAC;iBACJ;aACF;AACD,YAAA,IAAI,CAAC,sBAAsB,GAAG,MAAM,CAAC;YAErC,IAAI,qBAAqB,EAAE;AACzB,gBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;aAClC;AACH,SAAC,CAAC,CAAC;KACN;AAED;;;AAGG;IACI,gBAAgB,GAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;YACpE,OAAO;SACR;AACD,QAAA,IAAI,OAAO,GAAuB,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;QACvE,IAAI,YAAY,GAAuB,IAAI,CAAC;AAC5C,QAAA,OAAO,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE;AACvC,YAAA,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;YAChC,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE;gBAClD,YAAY,GAAG,OAAO,CAAC;gBACvB,MAAM;aACP;SACF;QACD,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC;SACpF;KACF;AAED;;AAEG;IACK,sBAAsB,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,OAAO,CAAC,CAAC;SACV;aAAM;AACL,YAAA,OAAO,CAAC,CAAC;SACV;KACF;IAEO,wBAAwB,GAAA;AAC9B,QAAA,IAAI,CAAC,gBAAgB,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;QACxD,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAC;KAC/E;AA/eU,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,kBA8If,SAAS,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAGP,SAAS,EACT,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,YAAY,6BACZ,gCAAgC,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAnJ3C,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EATxB,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,uCAAA,EAAA,SAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,0BAAA,EAAA,8BAAA,EAAA,gCAAA,EAAA,+BAAA,EAAA,iCAAA,EAAA,gCAAA,EAAA,kCAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,iCAAA,EAAA,mCAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,wBAAwB,CAAC;AACvD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF,EAwFa,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,6BAA6B,iFAG7B,gCAAgC,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EATN,UAAU,EAGV,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAU,2CChNpD,43FAoEA,EAAA,MAAA,EAAA,CAAA,+uDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;4FD0Da,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAbpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAGtB,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,8BAA8B,CAAC;AACvD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;qBACF,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,43FAAA,EAAA,MAAA,EAAA,CAAA,+uDAAA,CAAA,EAAA,CAAA;;0BAgJlC,MAAM;2BAAC,SAAS,CAAA;;0BAG1B,QAAQ;;0BAAI,MAAM;2BAAC,SAAS,CAAA;;0BAC5B,QAAQ;;0BAAI,MAAM;2BAAC,YAAY,CAAA;;0BAC/B,QAAQ;;0BAAI,MAAM;2BAAC,gCAAgC,CAAA;yCAhJ7C,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAGG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAGG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAGG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAGG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBAMG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAGG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAGG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBAGG,0BAA0B,EAAA,CAAA;sBAAlC,KAAK;gBAMG,4BAA4B,EAAA,CAAA;sBAApC,KAAK;gBAGG,qCAAqC,EAAA,CAAA;sBAA7C,KAAK;gBAGG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAGG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBAGG,wBAAwB,EAAA,CAAA;sBAAhC,KAAK;gBAGG,8BAA8B,EAAA,CAAA;sBAAtC,KAAK;gBAGG,+BAA+B,EAAA,CAAA;sBAAvC,KAAK;gBAGG,gCAAgC,EAAA,CAAA;sBAAxC,KAAK;gBAGG,qBAAqB,EAAA,CAAA;sBAA7B,KAAK;gBAMG,iCAAiC,EAAA,CAAA;sBAAzC,KAAK;gBAOG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBAGI,SAAS,EAAA,CAAA;sBAAlB,MAAM;gBAG6D,iBAAiB,EAAA,CAAA;sBAApF,SAAS;uBAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAGE,iBAAiB,EAAA,CAAA;sBAApF,SAAS;uBAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAGrB,SAAS,EAAA,CAAA;sBAArD,YAAY;uBAAC,6BAA6B,CAAA;gBAGK,cAAc,EAAA,CAAA;sBAA7D,YAAY;uBAAC,gCAAgC,CAAA;;;AEtNhD;;;;;AAKG;AAgBI,MAAM,sBAAsB,GAAG,QAAQ;MA0BjC,wBAAwB,CAAA;wGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,iBAVjC,wBAAwB;YACxB,6BAA6B;AAC7B,YAAA,gCAAgC,aAZhC,YAAY;YACZ,mBAAmB;YACnB,eAAe;YACf,iBAAiB;YACjB,aAAa;YACb,wBAAwB;YACxB,gBAAgB;AAChB,YAAA,gBAAgB,aAQhB,wBAAwB;YACxB,6BAA6B;YAC7B,gCAAgC,CAAA,EAAA,CAAA,CAAA;AAGvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,YApBjC,YAAY;YACZ,mBAAmB;YACnB,eAAe;YACf,iBAAiB;YACjB,aAAa;YACb,wBAAwB;YACxB,gBAAgB;YAChB,gBAAgB,CAAA,EAAA,CAAA,CAAA;;4FAaP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAtBpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,mBAAmB;wBACnB,eAAe;wBACf,iBAAiB;wBACjB,aAAa;wBACb,wBAAwB;wBACxB,gBAAgB;wBAChB,gBAAgB;AACjB,qBAAA;AACD,oBAAA,YAAY,EAAE;wBACZ,wBAAwB;wBACxB,6BAA6B;wBAC7B,gCAAgC;AACjC,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,wBAAwB;wBACxB,6BAA6B;wBAC7B,gCAAgC;AACjC,qBAAA;AACF,iBAAA,CAAA;;;AC9CD;;AAEG;;;;"}