{"version":3,"file":"millieofzo-ion-selectable.mjs","sources":["../../../../libs/ion-selectable/src/lib/ion-selectable/ion-selectable-modal.component.ts","../../../../libs/ion-selectable/src/lib/ion-selectable/ion-selectable-modal.component.html","../../../../libs/ion-selectable/src/lib/directives/ionic-selectable-add-item-template.directive.ts","../../../../libs/ion-selectable/src/lib/directives/ionic-selectable-close-button-template.directive.ts","../../../../libs/ion-selectable/src/lib/directives/ionic-selectable-footer-template.directive.ts","../../../../libs/ion-selectable/src/lib/directives/ionic-selectable-group-end-template.directive.ts","../../../../libs/ion-selectable/src/lib/directives/ionic-selectable-group-template.directive.ts","../../../../libs/ion-selectable/src/lib/directives/ionic-selectable-header-template.directive.ts","../../../../libs/ion-selectable/src/lib/directives/ionic-selectable-icon-template.directive.ts","../../../../libs/ion-selectable/src/lib/directives/ionic-selectable-item-end-template.directive.ts","../../../../libs/ion-selectable/src/lib/directives/ionic-selectable-item-icon-template.directive.ts","../../../../libs/ion-selectable/src/lib/directives/ionic-selectable-item-template.directive.ts","../../../../libs/ion-selectable/src/lib/directives/ionic-selectable-message-template.directive.ts","../../../../libs/ion-selectable/src/lib/directives/ionic-selectable-placeholder-template.directive.ts","../../../../libs/ion-selectable/src/lib/directives/ionic-selectable-search-fail-template.directive.ts","../../../../libs/ion-selectable/src/lib/directives/ionic-selectable-title-template.directive.ts","../../../../libs/ion-selectable/src/lib/directives/ionic-selectable-value-template.directive.ts","../../../../libs/ion-selectable/src/lib/ion-selectable/ion-selectable.component.ts","../../../../libs/ion-selectable/src/lib/ion-selectable/ion-selectable.component.html","../../../../libs/ion-selectable/src/millieofzo-ion-selectable.ts"],"sourcesContent":["import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  HostBinding,\n  HostListener,\n  ViewChild,\n} from '@angular/core';\nimport {\n  IonContent,\n  IonInfiniteScroll,\n  IonSearchbar,\n  NavParams,\n  IonicModule,\n} from '@ionic/angular';\nimport { IonSelectableComponent } from './ion-selectable.component';\nimport { FormsModule } from '@angular/forms';\nimport {\n  NgIf,\n  NgTemplateOutlet,\n  NgFor,\n  NgClass,\n  NgStyle,\n} from '@angular/common';\n\n@Component({\n  selector: 'ion-selectable-modal',\n  templateUrl: './ion-selectable-modal.component.html',\n  standalone: true,\n  imports: [\n    IonicModule,\n    NgIf,\n    NgTemplateOutlet,\n    FormsModule,\n    NgFor,\n    NgClass,\n    NgStyle,\n  ],\n})\nexport class IonSelectableModalComponent implements AfterViewInit {\n  @ViewChild(IonContent)\n  _content!: IonContent;\n  _header!: HTMLElement;\n  selectComponent: IonSelectableComponent;\n  @ViewChild('searchbarComponent')\n  _searchbarComponent!: IonSearchbar;\n  @ViewChild(IonInfiniteScroll)\n  _infiniteScroll!: IonInfiniteScroll;\n  @HostBinding('class.ionic-selectable-modal')\n  _cssClass = true;\n  @HostBinding('class.ionic-selectable-modal-can-clear')\n  get _canClearCssClass(): boolean {\n    return this.selectComponent.canClear;\n  }\n  @HostBinding('class.ionic-selectable-modal-is-multiple')\n  get _isMultipleCssClass(): boolean {\n    return this.selectComponent.isMultiple;\n  }\n  @HostBinding('class.ionic-selectable-modal-is-searching')\n  get _isSearchingCssClass(): boolean {\n    return this.selectComponent._isSearching;\n  }\n  @HostBinding('class.ionic-selectable-modal-ios')\n  get _isIos(): boolean {\n    return this.selectComponent._isIos;\n  }\n  @HostBinding('class.ionic-selectable-modal-md')\n  _isMD(): boolean {\n    return this.selectComponent._isMD;\n  }\n  @HostBinding('class.ionic-selectable-modal-is-add-item-template-visible')\n  get _isAddItemTemplateVisibleCssClass(): boolean {\n    return this.selectComponent._isAddItemTemplateVisible;\n  }\n  @HostListener('window:resize')\n  onResize() {\n    // ion-footer inside the template might change its height when\n    // device orientation changes.\n    this.selectComponent._positionAddItemTemplate();\n  }\n\n  constructor(private navParams: NavParams, public _element: ElementRef) {\n    this.selectComponent = this.navParams.get('selectComponent');\n    this.selectComponent._modalComponent = this;\n    this.selectComponent._selectedItems = [];\n\n    if (!this.selectComponent._isNullOrWhiteSpace(this.selectComponent.value)) {\n      if (this.selectComponent.isMultiple) {\n        this.selectComponent.value.forEach((item: any) => {\n          this.selectComponent._selectedItems.push(item);\n        });\n      } else {\n        this.selectComponent._selectedItems.push(this.selectComponent.value);\n      }\n    }\n\n    this.selectComponent._setItemsToConfirm(\n      this.selectComponent._selectedItems\n    );\n  }\n\n  ngAfterViewInit() {\n    this._header = this._element.nativeElement.querySelector('ion-header');\n\n    if (this._searchbarComponent && this.selectComponent.shouldFocusSearchbar) {\n      // Focus after a delay because focus doesn't work without it.\n      setTimeout(() => {\n        this._searchbarComponent.setFocus();\n      }, 1000);\n    }\n  }\n}\n","<ion-header>\n  <ion-toolbar *ngIf=\"!selectComponent.headerTemplate\"\n    [color]=\"selectComponent.headerColor ? selectComponent.headerColor : null\">\n    <ion-buttons [slot]=\"selectComponent.closeButtonSlot\">\n      <ion-button (click)=\"selectComponent._close()\">\n        <span *ngIf=\"selectComponent.closeButtonTemplate\" [ngTemplateOutlet]=\"selectComponent.closeButtonTemplate\">\n        </span>\n        <span *ngIf=\"!selectComponent.closeButtonTemplate\">\n          {{selectComponent.closeButtonText}}\n        </span>\n      </ion-button>\n    </ion-buttons>\n    <ion-title>\n      <!-- Need span for for text ellipsis. -->\n      <span *ngIf=\"selectComponent.titleTemplate\" [ngTemplateOutlet]=\"selectComponent.titleTemplate\">\n      </span>\n      <span *ngIf=\"!selectComponent.titleTemplate\">\n        {{selectComponent.label}}\n      </span>\n    </ion-title>\n  </ion-toolbar>\n  <div *ngIf=\"selectComponent.headerTemplate\" [ngTemplateOutlet]=\"selectComponent.headerTemplate\">\n  </div>\n  <ion-toolbar *ngIf=\"selectComponent.canSearch || selectComponent.messageTemplate\">\n    <ion-searchbar *ngIf=\"selectComponent.canSearch\" #searchbarComponent [(ngModel)]=\"selectComponent._searchText\"\n      (ionInput)=\"selectComponent._filterItems()\" (ionClear)=\"selectComponent._onSearchbarClear()\"\n      [placeholder]=\"selectComponent.searchPlaceholder\" [debounce]=\"selectComponent.searchDebounce\">\n    </ion-searchbar>\n    <div class=\"ionic-selectable-message\" *ngIf=\"selectComponent.messageTemplate\">\n      <div [ngTemplateOutlet]=\"selectComponent.messageTemplate\">\n      </div>\n    </div>\n  </ion-toolbar>\n</ion-header>\n<ion-content>\n  <div class=\"ionic-selectable-spinner\" *ngIf=\"selectComponent._isSearching\">\n    <div class=\"ionic-selectable-spinner-background\"></div>\n    <ion-spinner></ion-spinner>\n  </div>\n  <ion-list class=\"ion-no-margin\" *ngIf=\"selectComponent._hasFilteredItems\">\n    <ion-item-group *ngFor=\"let group of selectComponent._filteredGroups\" class=\"ionic-selectable-group\">\n      <ion-item-divider *ngIf=\"selectComponent._hasGroups\"\n        [color]=\"selectComponent.groupColor ? selectComponent.groupColor : null\">\n        <!-- Need span for for text ellipsis. -->\n        <span *ngIf=\"selectComponent.groupTemplate\" [ngTemplateOutlet]=\"selectComponent.groupTemplate\"\n          [ngTemplateOutletContext]=\"{ group: group }\">\n        </span>\n        <!-- Need ion-label for text ellipsis. -->\n        <ion-label *ngIf=\"!selectComponent.groupTemplate\">\n          {{group.text}}\n        </ion-label>\n        <div *ngIf=\"selectComponent.groupEndTemplate\" slot=\"end\">\n          <div [ngTemplateOutlet]=\"selectComponent.groupEndTemplate\" [ngTemplateOutletContext]=\"{ group: group }\">\n          </div>\n        </div>\n      </ion-item-divider>\n      <ion-item button=\"true\" detail=\"false\" *ngFor=\"let item of group.items\" (click)=\"selectComponent._select(item)\"\n        class=\"ionic-selectable-item\" [ngClass]=\"{\n          'ionic-selectable-item-is-selected': selectComponent._isItemSelected(item),\n          'ionic-selectable-item-is-disabled': selectComponent._isItemDisabled(item)\n        }\" [disabled]=\"selectComponent._isItemDisabled(item)\">\n        <!-- Need span for text ellipsis. -->\n        <span *ngIf=\"selectComponent.itemTemplate\" [ngTemplateOutlet]=\"selectComponent.itemTemplate\"\n          [ngTemplateOutletContext]=\"{ item: item, isItemSelected: selectComponent._isItemSelected(item) }\">\n        </span>\n        <!-- Need ion-label for text ellipsis. -->\n        <ion-label *ngIf=\"!selectComponent.itemTemplate\">\n          {{selectComponent._formatItem(item)}}\n        </ion-label>\n        <div *ngIf=\"selectComponent.itemEndTemplate\" slot=\"end\">\n          <div [ngTemplateOutlet]=\"selectComponent.itemEndTemplate\"\n            [ngTemplateOutletContext]=\"{ item: item, isItemSelected: selectComponent._isItemSelected(item) }\">\n          </div>\n        </div>\n        <span *ngIf=\"selectComponent.itemIconTemplate\" [ngTemplateOutlet]=\"selectComponent.itemIconTemplate\"\n          [ngTemplateOutletContext]=\"{ item: item, isItemSelected: selectComponent._isItemSelected(item) }\">\n        </span>\n        <ion-icon *ngIf=\"!selectComponent.itemIconTemplate\"\n          [name]=\"selectComponent._isItemSelected(item) ? 'checkmark-circle' : 'radio-button-off'\"\n          [color]=\"selectComponent._isItemSelected(item) ? 'primary' : null\" [slot]=\"selectComponent.itemIconSlot\">\n        </ion-icon>\n        <ion-button *ngIf=\"selectComponent.canSaveItem\" class=\"ionic-selectable-item-button\" slot=\"end\" fill=\"outline\"\n          (click)=\"selectComponent._saveItem($event, item)\">\n          <ion-icon slot=\"icon-only\" ios=\"create\" md=\"create-sharp\"></ion-icon>\n        </ion-button>\n        <ion-button *ngIf=\"selectComponent.canDeleteItem\" class=\"ionic-selectable-item-button\" slot=\"end\" fill=\"outline\"\n          (click)=\"selectComponent._deleteItemClick($event, item)\">\n          <ion-icon slot=\"icon-only\" ios=\"trash\" md=\"trash-sharp\"></ion-icon>\n        </ion-button>\n      </ion-item>\n    </ion-item-group>\n  </ion-list>\n  <!-- Fail text should be above InfiniteScroll to avoid a gap when no items are found. -->\n  <div *ngIf=\"!selectComponent._hasFilteredItems\">\n    <span *ngIf=\"selectComponent.searchFailTemplate\" [ngTemplateOutlet]=\"selectComponent.searchFailTemplate\">\n    </span>\n    <div *ngIf=\"!selectComponent.searchFailTemplate\" class=\"ion-margin\">\n      {{selectComponent.searchFailText}}\n    </div>\n  </div>\n  <ion-infinite-scroll [disabled]=\"!selectComponent.hasInfiniteScroll\"\n    (ionInfinite)=\"selectComponent._getMoreItems()\">\n    <ion-infinite-scroll-content></ion-infinite-scroll-content>\n  </ion-infinite-scroll>\n</ion-content>\n<div class=\"ionic-selectable-add-item-template\" *ngIf=\"selectComponent._isAddItemTemplateVisible\"\n  [ngStyle]=\"{ 'top.px': _header.offsetHeight }\">\n  <div class=\"ionic-selectable-add-item-template-inner\"\n    [ngStyle]=\"{ 'height': selectComponent._addItemTemplateFooterHeight }\">\n    <span [ngTemplateOutlet]=\"selectComponent.addItemTemplate\"\n      [ngTemplateOutletContext]=\"{ item: selectComponent._itemToAdd, isAdd: selectComponent._itemToAdd === null }\">\n    </span>\n  </div>\n</div>\n<ion-footer *ngIf=\"selectComponent._footerButtonsCount > 0 || selectComponent.footerTemplate\"\n  [ngStyle]=\"{ 'visibility': selectComponent._isFooterVisible ? 'initial' : 'hidden' }\">\n  <ion-toolbar *ngIf=\"!selectComponent.footerTemplate\">\n    <ion-row>\n      <ion-col *ngIf=\"selectComponent.canClear\">\n        <ion-button expand=\"full\" (click)=\"selectComponent._clear()\"\n          [disabled]=\"!selectComponent._selectedItems.length\">\n          {{selectComponent.clearButtonText}}\n        </ion-button>\n      </ion-col>\n      <ion-col *ngIf=\"selectComponent.canAddItem\">\n        <ion-button expand=\"full\" (click)=\"selectComponent._addItemClick()\">\n          {{selectComponent.addButtonText}}\n        </ion-button>\n      </ion-col>\n      <ion-col *ngIf=\"selectComponent.isMultiple || selectComponent.hasConfirmButton\">\n        <ion-button expand=\"full\" (click)=\"selectComponent._confirm()\"\n          [disabled]=\"!selectComponent.isConfirmButtonEnabled\">\n          {{selectComponent.confirmButtonText}}\n        </ion-button>\n      </ion-col>\n    </ion-row>\n  </ion-toolbar>\n  <div *ngIf=\"selectComponent.footerTemplate\" [ngTemplateOutlet]=\"selectComponent.footerTemplate\">\n  </div>\n</ion-footer>","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[ionSelectableAddItemTemplate]',\n    standalone: true,\n})\nexport class IonSelectableAddItemTemplateDirective { }\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[ionSelectableCloseButtonTemplate]',\n    standalone: true,\n})\nexport class IonSelectableCloseButtonTemplateDirective { }\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[ionSelectableFooterTemplate]',\n    standalone: true,\n})\nexport class IonSelectableFooterTemplateDirective { }\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[ionSelectableGroupEndTemplate]',\n    standalone: true,\n})\nexport class IonSelectableGroupEndTemplateDirective { }\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[ionSelectableGroupTemplate]',\n    standalone: true,\n})\nexport class IonSelectableGroupTemplateDirective { }\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[ionSelectableHeaderTemplate]',\n    standalone: true,\n})\nexport class IonSelectableHeaderTemplateDirective { }\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[ionSelectableIconTemplate]',\n    standalone: true\n})\nexport class IonSelectableIconTemplateDirective { }\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[ionSelectableItemEndTemplate]',\n    standalone: true,\n})\nexport class IonSelectableItemEndTemplateDirective { }\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[ionSelectableItemIconTemplate]',\n    standalone: true\n})\nexport class IonSelectableItemIconTemplateDirective { }\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[ionSelectableItemTemplate]',\n    standalone: true\n})\nexport class IonSelectableItemTemplateDirective { }\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[ionSelectableMessageTemplate]',\n    standalone: true,\n})\nexport class IonSelectableMessageTemplateDirective { }\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[ionSelectablePlaceholderTemplate]',\n    standalone: true,\n})\nexport class IonSelectablePlaceholderTemplateDirective { }\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[ionSelectableSearchFailTemplate]',\n    standalone: true,\n})\nexport class IonSelectableSearchFailTemplateDirective { }\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[ionSelectableTitleTemplate]',\n    standalone: true,\n})\nexport class IonSelectableTitleTemplateDirective { }\n","import { Directive } from '@angular/core';\n\n@Directive({\n    selector: '[ionSelectableValueTemplate]',\n    standalone: true,\n})\nexport class IonSelectableValueTemplateDirective { }\n","/* eslint-disable @typescript-eslint/no-this-alias */\n/* eslint-disable @typescript-eslint/no-empty-function */\n/* eslint-disable @angular-eslint/no-output-on-prefix */\nimport { NgFor, NgIf, NgTemplateOutlet } from '@angular/common';\nimport {\n  Component,\n  ContentChild,\n  DoCheck,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Input,\n  IterableDiffer,\n  IterableDiffers,\n  OnInit,\n  Optional,\n  Output,\n  Renderer2,\n  TemplateRef,\n  ViewEncapsulation,\n  forwardRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { IonItem, ModalController, Platform } from '@ionic/angular';\nimport { AnimationBuilder, ModalOptions } from '@ionic/core';\nimport { Subscription } from 'rxjs';\nimport { IonHeader } from '@ionic/angular/standalone';\nimport { IonSelectableModalComponent } from './ion-selectable-modal.component';\nimport {\n  IonSelectableValueTemplateDirective,\n  IonSelectableItemTemplateDirective,\n  IonSelectableItemEndTemplateDirective,\n  IonSelectableTitleTemplateDirective,\n  IonSelectablePlaceholderTemplateDirective,\n  IonSelectableMessageTemplateDirective,\n  IonSelectableGroupTemplateDirective,\n  IonSelectableGroupEndTemplateDirective,\n  IonSelectableCloseButtonTemplateDirective,\n  IonSelectableSearchFailTemplateDirective,\n  IonSelectableAddItemTemplateDirective,\n  IonSelectableFooterTemplateDirective,\n  IonSelectableHeaderTemplateDirective,\n  IonSelectableItemIconTemplateDirective,\n  IonSelectableIconTemplateDirective,\n} from '../directives';\n\n@Component({\n  selector: 'ion-selectable',\n  templateUrl: './ion-selectable.component.html',\n  styleUrls: ['./ion-selectable.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => IonSelectableComponent),\n      multi: true,\n    },\n  ],\n  standalone: true,\n  imports: [IonHeader, NgIf, NgTemplateOutlet, NgFor],\n})\nexport class IonSelectableComponent\n  implements ControlValueAccessor, OnInit, DoCheck\n{\n  @HostBinding('class.ionic-selectable')\n  _cssClass = true;\n  @HostBinding('class.ionic-selectable-ios')\n  _isIos!: boolean;\n  @HostBinding('class.ionic-selectable-md')\n  _isMD!: boolean;\n  @HostBinding('class.ionic-selectable-is-multiple')\n  get _isMultipleCssClass(): boolean {\n    return this.isMultiple;\n  }\n  @HostBinding('class.ionic-selectable-has-value')\n  get _hasValueCssClass(): boolean {\n    return this.hasValue();\n  }\n  @HostBinding('class.ionic-selectable-has-placeholder')\n  get _hasPlaceholderCssClass(): boolean {\n    return this._hasPlaceholder;\n  }\n  @HostBinding('class.ionic-selectable-has-label')\n  get _hasIonLabelCssClass(): boolean {\n    return this._hasIonLabel;\n  }\n  @HostBinding('class.ionic-selectable-label-default')\n  get _hasDefaultIonLabelCssClass(): boolean {\n    return this._ionLabelPosition === 'default';\n  }\n  @HostBinding('class.ionic-selectable-label-fixed')\n  get _hasFixedIonLabelCssClass(): boolean {\n    return this._ionLabelPosition === 'fixed';\n  }\n  @HostBinding('class.ionic-selectable-label-stacked')\n  get _hasStackedIonLabelCssClass(): boolean {\n    return this._ionLabelPosition === 'stacked';\n  }\n  @HostBinding('class.ionic-selectable-label-floating')\n  get _hasFloatingIonLabelCssClass(): boolean {\n    return this._ionLabelPosition === 'floating';\n  }\n  private _isOnSearchEnabled = true;\n  private _isEnabled = true;\n  private _shouldBackdropClose = true;\n  private _isOpened = false;\n  private _value: any = null;\n  private _modal!: HTMLIonModalElement;\n  private _itemsDiffer: IterableDiffer<any>;\n  private _hasObjects!: boolean;\n  private _canClear = false;\n  private _hasConfirmButton = false;\n  private _isMultiple = false;\n  private _canAddItem = false;\n  private _addItemObservable!: Subscription;\n  private _deleteItemObservable!: Subscription;\n  private onItemsChange: EventEmitter<any> = new EventEmitter();\n  private _ionItemElement: any;\n  private _ionLabelElement: any;\n  private _hasIonLabel = false;\n  private _ionLabelPosition:\n    | 'fixed'\n    | 'stacked'\n    | 'floating'\n    | 'default'\n    | null = null;\n  private _label = '';\n  private get _hasInfiniteScroll(): boolean {\n    return this.isEnabled &&\n      this._modalComponent &&\n      this._modalComponent._infiniteScroll\n      ? true\n      : false;\n  }\n  get _shouldStoreItemValue(): boolean {\n    return this.shouldStoreItemValue && this._hasObjects;\n  }\n  _valueItems: any[] = [];\n  _searchText = '';\n  _hasSearchText = false;\n  _groups: any[] = [];\n  _itemsToConfirm: any[] = [];\n  _selectedItems: any[] = [];\n  _modalComponent!: IonSelectableModalComponent;\n  _filteredGroups: any[] = [];\n  _hasGroups!: boolean;\n  _isSearching!: boolean;\n  _hasPlaceholder!: boolean;\n  _isAddItemTemplateVisible = false;\n  _isFooterVisible = true;\n  _itemToAdd: any = null;\n  _footerButtonsCount = 0;\n  _hasFilteredItems = false;\n\n  /**\n   * Text of [Ionic Label](https://ionicframework.com/docs/api/label).\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#label).\n   *\n   * @readonly\n   * @default null\n   * @memberof IonSelectableComponent\n   */\n  get label(): string {\n    return this._label;\n  }\n\n  /**\n   * Text that the user has typed in Searchbar.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#searchtext).\n   *\n   * @readonly\n   * @default ''\n   * @memberof IonSelectableComponent\n   */\n  get searchText(): string {\n    return this._searchText;\n  }\n  set searchText(searchText: string) {\n    this._searchText = searchText;\n    this._setHasSearchText();\n  }\n\n  /**\n   * Determines whether search is running.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#issearching).\n   *\n   * @default false\n   * @readonly\n   * @memberof IonSelectableComponent\n   */\n  get isSearching(): boolean {\n    return this._isSearching;\n  }\n\n  /**\n   * Determines whether user has typed anything in Searchbar.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#hassearchtext).\n   *\n   * @default false\n   * @readonly\n   * @memberof IonSelectableComponent\n   */\n  get hasSearchText(): boolean {\n    return this._hasSearchText;\n  }\n\n  get value(): any {\n    return this._value;\n  }\n  set value(value: any) {\n    this._value = value;\n\n    // Set value items.\n    this._valueItems.splice(0, this._valueItems.length);\n\n    if (this.isMultiple) {\n      if (value && value.length) {\n        Array.prototype.push.apply(this._valueItems, value);\n      }\n    } else {\n      if (!this._isNullOrWhiteSpace(value)) {\n        this._valueItems.push(value);\n      }\n    }\n\n    this._setIonItemHasValue();\n    this._setHasPlaceholder();\n  }\n\n  /**\n   * A list of items.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#items).\n   *\n   * @default []\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  items: any[] = [];\n  @Output()\n  itemsChange: EventEmitter<any> = new EventEmitter();\n\n  /**\n   * Determines whether the component is enabled.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#isenabled).\n   *\n   * @default true\n   * @memberof IonSelectableComponent\n   */\n  @HostBinding('class.ionic-selectable-is-enabled')\n  @Input('isEnabled')\n  get isEnabled(): boolean {\n    return this._isEnabled;\n  }\n  set isEnabled(isEnabled: boolean) {\n    this._isEnabled = !!isEnabled;\n    this.enableIonItem(this._isEnabled);\n  }\n\n  /**\n   * Determines whether Modal should be closed when backdrop is clicked.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#shouldbackdropclose).\n   *\n   * @default true\n   * @memberof IonSelectableComponent\n   */\n  @Input('shouldBackdropClose')\n  get shouldBackdropClose(): boolean {\n    return this._shouldBackdropClose;\n  }\n  set shouldBackdropClose(shouldBackdropClose: boolean) {\n    this._shouldBackdropClose = !!shouldBackdropClose;\n  }\n\n  /**\n   * Modal CSS class.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#modalcssclass).\n   *\n   * @default null\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  modalCssClass = '';\n\n  /**\n   * Modal enter animation.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#modalenteranimation).\n   *\n   * @default null\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  modalEnterAnimation!: AnimationBuilder;\n\n  /**\n   * Modal leave animation.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#modalleaveanimation).\n   *\n   * @default null\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  modalLeaveAnimation!: AnimationBuilder;\n\n  /**\n   * Determines whether Modal is opened.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#isopened).\n   *\n   * @default false\n   * @readonly\n   * @memberof IonSelectableComponent\n   */\n  get isOpened(): boolean {\n    return this._isOpened;\n  }\n\n  /**\n   * Determines whether Confirm button is enabled.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#isconfirmbuttonenabled).\n   *\n   * @default true\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  isConfirmButtonEnabled = true;\n\n  /**\n   * Determines whether Confirm button is visible for single selection.\n   * By default Confirm button is visible only for multiple selection.\n   * **Note**: It is always true for multiple selection and cannot be changed.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#hasconfirmbutton).\n   *\n   * @default true\n   * @memberof IonSelectableComponent\n   */\n  @Input('hasConfirmButton')\n  get hasConfirmButton(): boolean {\n    return this._hasConfirmButton;\n  }\n  set hasConfirmButton(hasConfirmButton: boolean) {\n    this._hasConfirmButton = !!hasConfirmButton;\n    this._countFooterButtons();\n  }\n\n  /**\n   * Item property to use as a unique identifier, e.g, `'id'`.\n   * **Note**: `items` should be an object array.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#itemvaluefield).\n   *\n   * @default null\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  itemValueField = '';\n\n  /**\n   * Item property to display, e.g, `'name'`.\n   * **Note**: `items` should be an object array.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#itemtextfield).\n   *\n   * @default false\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  itemTextField = '';\n\n  /**\n   *\n   * Group property to use as a unique identifier to group items, e.g. `'country.id'`.\n   * **Note**: `items` should be an object array.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#groupvaluefield).\n   *\n   * @default null\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  groupValueField = '';\n\n  /**\n   * Group property to display, e.g. `'country.name'`.\n   * **Note**: `items` should be an object array.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#grouptextfield).\n   *\n   * @default null\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  groupTextField = '';\n\n  /**\n   * Determines whether to show Searchbar.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#cansearch).\n   *\n   * @default false\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  canSearch = false;\n\n  /**\n   * Determines whether `onSearch` event is enabled.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#isonsearchenabled).\n   *\n   * @default true\n   * @memberof IonSelectableComponent\n   */\n  @Input('isOnSearchEnabled')\n  get isOnSearchEnabled(): boolean {\n    return this._isOnSearchEnabled;\n  }\n  set isOnSearchEnabled(isOnSearchEnabled: boolean) {\n    this._isOnSearchEnabled = !!isOnSearchEnabled;\n  }\n\n  /**\n   * Determines whether to show Clear button.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#canclear).\n   *\n   * @default false\n   * @memberof IonSelectableComponent\n   */\n  @HostBinding('class.ionic-selectable-can-clear')\n  @Input('canClear')\n  get canClear(): boolean {\n    return this._canClear;\n  }\n  set canClear(canClear: boolean) {\n    this._canClear = !!canClear;\n    this._countFooterButtons();\n  }\n\n  /**\n   * Determines whether Ionic [InfiniteScroll](https://ionicframework.com/docs/api/components/infinite-scroll/InfiniteScroll/) is enabled.\n   * **Note**: Infinite scroll cannot be used together with virtual scroll.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#hasinfinitescroll).\n   *\n   * @default false\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  hasInfiniteScroll = false;\n\n  /**\n   * Determines whether Ionic [VirtualScroll](https://ionicframework.com/docs/api/components/virtual-scroll/VirtualScroll/) is enabled.\n   * **Note**: Virtual scroll cannot be used together with infinite scroll.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#hasvirtualscroll).\n   *\n   * @default false\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  hasVirtualScroll = false;\n\n  /**\n   * See Ionic VirtualScroll [approxItemHeight](https://ionicframework.com/docs/api/components/virtual-scroll/VirtualScroll/).\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#virtualscrollapproxitemheight).\n   *\n   * @default '40px'\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  virtualScrollApproxItemHeight = '40px';\n\n  /**\n   * A placeholder for Searchbar.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#searchplaceholder).\n   *\n   * @default 'Search'\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  searchPlaceholder = 'Search';\n\n  /**\n   * A placeholder.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#placeholder).\n   *\n   * @default null\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  placeholder = '';\n\n  /**\n   * Determines whether multiple items can be selected.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#ismultiple).\n   *\n   * @default false\n   * @memberof IonSelectableComponent\n   */\n  @Input('isMultiple')\n  get isMultiple(): boolean {\n    return this._isMultiple;\n  }\n  set isMultiple(isMultiple: boolean) {\n    this._isMultiple = !!isMultiple;\n    this._countFooterButtons();\n  }\n\n  /**\n   * Text to display when no items have been found during search.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#searchfailtext).\n   *\n   * @default 'No items found.'\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  searchFailText = 'No items found.';\n\n  /**\n   * Clear button text.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#clearbuttontext).\n   *\n   * @default 'Clear'\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  clearButtonText = 'Clear';\n\n  /**\n   * Add button text.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#addbuttontext).\n   *\n   * @default 'Add'\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  addButtonText = 'Add';\n\n  /**\n   * Confirm button text.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#confirmbuttontext).\n   *\n   * @default 'OK'\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  confirmButtonText = 'OK';\n\n  /**\n   * Close button text.\n   * The field is only applicable to **iOS** platform, on **Android** only Cross icon is displayed.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#closebuttontext).\n   *\n   * @default 'Cancel'\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  closeButtonText = 'Cancel';\n\n  /**\n   * Determines whether Searchbar should receive focus when Modal is opened.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#shouldfocussearchbar).\n   *\n   * @default false\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  shouldFocusSearchbar = false;\n\n  /**\n   * Header color. [Ionic colors](https://ionicframework.com/docs/theming/advanced#colors) are supported.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#headercolor).\n   *\n   * @default null\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  headerColor = '';\n\n  /**\n   * Group color. [Ionic colors](https://ionicframework.com/docs/theming/advanced#colors) are supported.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#groupcolor).\n   *\n   * @default null\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  groupColor = '';\n\n  /**\n   * Close button slot. [Ionic slots](https://ionicframework.com/docs/api/buttons) are supported.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#closebuttonslot).\n   *\n   * @default 'start'\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  closeButtonSlot = 'start';\n\n  /**\n   * Item icon slot. [Ionic slots](https://ionicframework.com/docs/api/item) are supported.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#itemiconslot).\n   *\n   * @default 'start'\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  itemIconSlot = 'start';\n\n  /**\n   * Fires when item/s has been selected and Modal closed.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#onchange).\n   *\n   * @memberof IonSelectableComponent\n   */\n  @Output()\n  onChange: EventEmitter<{ component: IonSelectableComponent; value: any }> =\n    new EventEmitter();\n\n  /**\n   * Fires when the user is typing in Searchbar.\n   * **Note**: `canSearch` and `isOnSearchEnabled` has to be enabled.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#onsearch).\n   *\n   * @memberof IonSelectableComponent\n   */\n  @Output()\n  onSearch: EventEmitter<{\n    component: IonSelectableComponent;\n    text: string;\n  }> = new EventEmitter();\n\n  /**\n   * Fires when no items have been found.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#onsearchfail).\n   *\n   * @memberof IonSelectableComponent\n   */\n  @Output()\n  onSearchFail: EventEmitter<{\n    component: IonSelectableComponent;\n    text: string;\n  }> = new EventEmitter();\n\n  /**\n   * Fires when some items have been found.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#onsearchsuccess).\n   *\n   * @memberof IonSelectableComponent\n   */\n  @Output()\n  onSearchSuccess: EventEmitter<{\n    component: IonSelectableComponent;\n    text: string;\n  }> = new EventEmitter();\n\n  /**\n   * Fires when the user has scrolled to the end of the list.\n   * **Note**: `hasInfiniteScroll` has to be enabled.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#oninfinitescroll).\n   *\n   * @memberof IonSelectableComponent\n   */\n  @Output()\n  onInfiniteScroll: EventEmitter<{\n    component: IonSelectableComponent;\n    text: string;\n  }> = new EventEmitter();\n\n  /**\n   * Fires when Modal has been opened.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#onopen).\n   *\n   * @memberof IonSelectableComponent\n   */\n  @Output()\n  onOpen: EventEmitter<{ component: IonSelectableComponent }> =\n    new EventEmitter();\n\n  /**\n   * Fires when Modal has been closed.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#onclose).\n   *\n   * @memberof IonSelectableComponent\n   */\n  @Output()\n  onClose: EventEmitter<{ component: IonSelectableComponent }> =\n    new EventEmitter();\n\n  /**\n   * Fires when an item has been selected or unselected.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#onselect).\n   *\n   * @memberof IonSelectableComponent\n   */\n  @Output()\n  onSelect: EventEmitter<{\n    component: IonSelectableComponent;\n    item: any;\n    isSelected: boolean;\n  }> = new EventEmitter();\n\n  /**\n   * Fires when Clear button has been clicked.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#onclear).\n   *\n   * @memberof IonSelectableComponent\n   */\n  @Output()\n  onClear: EventEmitter<{ component: IonSelectableComponent; items: any[] }> =\n    new EventEmitter();\n\n  /**\n   * A list of items that are selected and awaiting confirmation by user, when he has clicked Confirm button.\n   * After the user has clicked Confirm button items to confirm are cleared.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#itemstoconfirm).\n   *\n   * @default []\n   * @readonly\n   * @memberof IonSelectableComponent\n   */\n  get itemsToConfirm(): any[] {\n    return this._itemsToConfirm;\n  }\n\n  /**\n   * How long, in milliseconds, to wait to filter items or to trigger `onSearch` event after each keystroke.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#searchdebounce).\n   *\n   * @default 250\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  searchDebounce = 250;\n\n  /**\n   * A list of items to disable.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#disableditems).\n   *\n   * @default []\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  disabledItems: any[] = [];\n\n  /**\n   * Determines whether item value only should be stored in `ngModel`, not the entire item.\n   * **Note**: Item value is defined by `itemValueField`.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#shouldstoreitemvalue).\n   *\n   * @default false\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  shouldStoreItemValue = false;\n\n  /**\n   * Determines whether to allow editing items.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#cansaveitem).\n   *\n   * @default false\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  canSaveItem = false;\n\n  /**\n   * Determines whether to allow deleting items.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#candeleteitem).\n   *\n   * @default false\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  canDeleteItem = false;\n\n  /**\n   * Determines whether to allow adding items.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#canadditem).\n   *\n   * @default false\n   * @memberof IonSelectableComponent\n   */\n  @Input('canAddItem')\n  get canAddItem(): boolean {\n    return this._canAddItem;\n  }\n  set canAddItem(canAddItem: boolean) {\n    this._canAddItem = !!canAddItem;\n    this._countFooterButtons();\n  }\n\n  /**\n   * Fires when Edit item button has been clicked.\n   * When the button has been clicked `IonSelectableAddItemTemplate` will be shown. Use the template to create a form to edit item.\n   * **Note**: `canSaveItem` has to be enabled.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#onsaveitem).\n   *\n   * @memberof IonSelectableComponent\n   */\n  @Output()\n  onSaveItem: EventEmitter<{ component: IonSelectableComponent; item: any }> =\n    new EventEmitter();\n\n  /**\n   * Fires when Delete item button has been clicked.\n   * **Note**: `canDeleteItem` has to be enabled.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#ondeleteitem).\n   *\n   * @memberof IonSelectableComponent\n   */\n  @Output()\n  onDeleteItem: EventEmitter<{\n    component: IonSelectableComponent;\n    item: any;\n  }> = new EventEmitter();\n\n  /**\n   * Fires when Add item button has been clicked.\n   * When the button has been clicked `IonSelectableAddItemTemplate` will be shown. Use the template to create a form to add item.\n   * **Note**: `canAddItem` has to be enabled.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#onadditem).\n   *\n   * @memberof IonSelectableComponent\n   */\n  @Output()\n  onAddItem: EventEmitter<{ component: IonSelectableComponent }> =\n    new EventEmitter();\n\n  @ContentChild(IonSelectableValueTemplateDirective, { read: TemplateRef })\n  valueTemplate!: TemplateRef<any>;\n  @ContentChild(IonSelectableItemTemplateDirective, { read: TemplateRef })\n  itemTemplate!: TemplateRef<any>;\n  @ContentChild(IonSelectableItemEndTemplateDirective, { read: TemplateRef })\n  itemEndTemplate!: TemplateRef<any>;\n  @ContentChild(IonSelectableTitleTemplateDirective, { read: TemplateRef })\n  titleTemplate!: TemplateRef<any>;\n  @ContentChild(IonSelectablePlaceholderTemplateDirective, {\n    read: TemplateRef,\n  })\n  placeholderTemplate!: TemplateRef<any>;\n  @ContentChild(IonSelectableMessageTemplateDirective, { read: TemplateRef })\n  messageTemplate!: TemplateRef<any>;\n  @ContentChild(IonSelectableGroupTemplateDirective, { read: TemplateRef })\n  groupTemplate!: TemplateRef<any>;\n  @ContentChild(IonSelectableGroupEndTemplateDirective, { read: TemplateRef })\n  groupEndTemplate!: TemplateRef<any>;\n  @ContentChild(IonSelectableCloseButtonTemplateDirective, {\n    read: TemplateRef,\n  })\n  closeButtonTemplate!: TemplateRef<any>;\n  @ContentChild(IonSelectableSearchFailTemplateDirective, {\n    read: TemplateRef,\n  })\n  searchFailTemplate!: TemplateRef<any>;\n  @ContentChild(IonSelectableAddItemTemplateDirective, { read: TemplateRef })\n  addItemTemplate!: TemplateRef<any>;\n  @ContentChild(IonSelectableFooterTemplateDirective, { read: TemplateRef })\n  footerTemplate!: TemplateRef<any>;\n  _addItemTemplateFooterHeight!: string;\n  @ContentChild(IonSelectableHeaderTemplateDirective, { read: TemplateRef })\n  headerTemplate!: TemplateRef<any>;\n  @ContentChild(IonSelectableItemIconTemplateDirective, { read: TemplateRef })\n  itemIconTemplate!: TemplateRef<any>;\n  @ContentChild(IonSelectableIconTemplateDirective, { read: TemplateRef })\n  iconTemplate!: TemplateRef<any>;\n\n  /**\n   * See Ionic VirtualScroll [headerFn](https://ionicframework.com/docs/api/components/virtual-scroll/VirtualScroll/).\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#virtualscrollheaderfn).\n   *\n   * @memberof IonSelectableComponent\n   */\n  @Input()\n  virtualScrollHeaderFn = () => {\n    return null;\n  };\n\n  constructor(\n    private _modalController: ModalController,\n    private _platform: Platform,\n    @Optional() private ionItem: IonItem,\n    private _iterableDiffers: IterableDiffers,\n    private _element: ElementRef,\n    private _renderer: Renderer2\n  ) {\n    if (!this.items?.length) {\n      this.items = [];\n    }\n\n    this._itemsDiffer = this._iterableDiffers.find(this.items).create();\n  }\n\n  initFocus() {}\n\n  enableIonItem(isEnabled: boolean) {\n    if (!this.ionItem) {\n      return;\n    }\n\n    this.ionItem.disabled = !isEnabled;\n  }\n\n  _isNullOrWhiteSpace(value: any): boolean {\n    if (value === null || value === undefined) {\n      return true;\n    }\n\n    // Convert value to string in case if it's not.\n    return value.toString().replace(/\\s/g, '').length < 1;\n  }\n\n  _setHasSearchText() {\n    this._hasSearchText = !this._isNullOrWhiteSpace(this._searchText);\n  }\n\n  _hasOnSearch(): boolean {\n    return this.isOnSearchEnabled && this.onSearch.observers.length > 0;\n  }\n\n  _hasOnSaveItem(): boolean {\n    return this.canSaveItem && this.onSaveItem.observers.length > 0;\n  }\n\n  _hasOnAddItem(): boolean {\n    return this.canAddItem && this.onAddItem.observers.length > 0;\n  }\n\n  _hasOnDeleteItem(): boolean {\n    return this.canDeleteItem && this.onDeleteItem.observers.length > 0;\n  }\n\n  _emitValueChange() {\n    this.propagateOnChange(this.value);\n\n    this.onChange.emit({\n      component: this,\n      value: this.value,\n    });\n  }\n\n  _emitSearch() {\n    if (!this.canSearch) {\n      return;\n    }\n\n    this.onSearch.emit({\n      component: this,\n      text: this._searchText,\n    });\n  }\n\n  _emitOnSelect(item: any, isSelected: boolean) {\n    this.onSelect.emit({\n      component: this,\n      item: item,\n      isSelected: isSelected,\n    });\n  }\n\n  _emitOnClear(items: any[]) {\n    this.onClear.emit({\n      component: this,\n      items: items,\n    });\n  }\n\n  _emitOnSearchSuccessOrFail(isSuccess: boolean) {\n    const eventData = {\n      component: this,\n      text: this._searchText,\n    };\n\n    if (isSuccess) {\n      this.onSearchSuccess.emit(eventData);\n    } else {\n      this.onSearchFail.emit(eventData);\n    }\n  }\n\n  _formatItem(item: any): string {\n    if (this._isNullOrWhiteSpace(item)) {\n      return '';\n    }\n\n    return this.itemTextField ? item[this.itemTextField] : item.toString();\n  }\n\n  _formatValueItem(item: any): string {\n    if (this._shouldStoreItemValue) {\n      // Get item text from the list as we store it's value only.\n      const selectedItem = this.items.find((_item) => {\n        return _item[this.itemValueField] === item;\n      });\n\n      return this._formatItem(selectedItem);\n    } else {\n      return this._formatItem(item);\n    }\n  }\n\n  _getItemValue(item: any): any {\n    if (!this._hasObjects) {\n      return item;\n    }\n\n    return item[this.itemValueField];\n  }\n\n  _getStoredItemValue(item: any): any {\n    if (!this._hasObjects) {\n      return item;\n    }\n\n    return this._shouldStoreItemValue ? item : item[this.itemValueField];\n  }\n\n  _onSearchbarClear() {\n    // Ionic Searchbar doesn't clear bind with ngModel value.\n    // Do it ourselves.\n    this._searchText = '';\n  }\n\n  _filterItems() {\n    this._setHasSearchText();\n\n    if (this._hasOnSearch()) {\n      // Delegate filtering to the event.\n      this._emitSearch();\n    } else {\n      // Default filtering.\n      let groups = [];\n\n      if (!this._searchText?.trim()) {\n        groups = this._groups;\n      } else {\n        const filterText = this._searchText.trim().toLowerCase();\n\n        this._groups.forEach((group) => {\n          const items = group.items.filter((item: any) => {\n            const itemText = (\n              this.itemTextField ? item[this.itemTextField] : item\n            )\n              .toString()\n              .toLowerCase();\n            return itemText.indexOf(filterText) !== -1;\n          });\n\n          if (items.length) {\n            groups.push({\n              value: group.value,\n              text: group.text,\n              items: items,\n            });\n          }\n        });\n\n        // No items found.\n        if (!groups.length) {\n          groups.push({\n            items: [],\n          });\n        }\n      }\n\n      this._filteredGroups = groups;\n      this._hasFilteredItems = !this._areGroupsEmpty(groups);\n      this._emitOnSearchSuccessOrFail(this._hasFilteredItems);\n    }\n  }\n\n  _isItemDisabled(item: any): boolean {\n    if (!this.disabledItems) {\n      return false;\n    }\n\n    return this.disabledItems.some((_item) => {\n      return this._getItemValue(_item) === this._getItemValue(item);\n    });\n  }\n\n  _isItemSelected(item: any) {\n    return (\n      this._selectedItems.find((selectedItem) => {\n        return (\n          this._getItemValue(item) === this._getStoredItemValue(selectedItem)\n        );\n      }) !== undefined\n    );\n  }\n\n  _addSelectedItem(item: any) {\n    if (this._shouldStoreItemValue) {\n      this._selectedItems.push(this._getItemValue(item));\n    } else {\n      this._selectedItems.push(item);\n    }\n  }\n\n  _deleteSelectedItem(item: any) {\n    let itemToDeleteIndex = -1;\n\n    this._selectedItems.forEach((selectedItem, itemIndex) => {\n      if (this._getItemValue(item) === this._getStoredItemValue(selectedItem)) {\n        itemToDeleteIndex = itemIndex;\n      }\n    });\n\n    this._selectedItems.splice(itemToDeleteIndex, 1);\n  }\n\n  _click() {\n    if (!this.isEnabled) {\n      return;\n    }\n\n    this._label = this._getLabelText();\n    this.open().then(() => {\n      this.onOpen.emit({\n        component: this,\n      });\n    });\n  }\n\n  _saveItem(event: Event, item: any) {\n    event.stopPropagation();\n    this._itemToAdd = item;\n\n    if (this._hasOnSaveItem()) {\n      this.onSaveItem.emit({\n        component: this,\n        item: this._itemToAdd,\n      });\n    } else {\n      this.showAddItemTemplate();\n    }\n  }\n\n  _deleteItemClick(event: Event, item: any) {\n    event.stopPropagation();\n    this._itemToAdd = item;\n\n    if (this._hasOnDeleteItem()) {\n      // Delegate logic to event.\n      this.onDeleteItem.emit({\n        component: this,\n        item: this._itemToAdd,\n      });\n    } else {\n      this.deleteItem(this._itemToAdd);\n    }\n  }\n\n  _addItemClick() {\n    if (this._hasOnAddItem()) {\n      this.onAddItem.emit({\n        component: this,\n      });\n    } else {\n      this.showAddItemTemplate();\n    }\n  }\n\n  _positionAddItemTemplate() {\n    // Wait for the template to render.\n    setTimeout(() => {\n      const footer = this._modalComponent._element.nativeElement.querySelector(\n        '.ionic-selectable-add-item-template ion-footer'\n      );\n\n      this._addItemTemplateFooterHeight = footer\n        ? `calc(100% - ${footer.offsetHeight}px)`\n        : '100%';\n    }, 100);\n  }\n\n  _close() {\n    this.close().then(() => {\n      this.onClose.emit({\n        component: this,\n      });\n    });\n\n    if (!this._hasOnSearch()) {\n      this._searchText = '';\n      this._setHasSearchText();\n    }\n  }\n\n  _clear() {\n    const selectedItems = this._selectedItems;\n\n    this.clear();\n    this._emitValueChange();\n    this._emitOnClear(selectedItems);\n    this.close().then(() => {\n      this.onClose.emit({\n        component: this,\n      });\n    });\n  }\n\n  _getMoreItems() {\n    this.onInfiniteScroll.emit({\n      component: this,\n      text: this._searchText,\n    });\n  }\n\n  _setItemsToConfirm(items: any[]): void {\n    // Return a copy of original array, so it couldn't be changed from outside.\n    this._itemsToConfirm = ([] as any[]).concat(items);\n  }\n\n  _doSelect(selectedItem: any) {\n    this.value = selectedItem;\n    this._emitValueChange();\n  }\n\n  _select(item: any) {\n    const isItemSelected = this._isItemSelected(item);\n\n    if (this.isMultiple) {\n      if (isItemSelected) {\n        this._deleteSelectedItem(item);\n      } else {\n        this._addSelectedItem(item);\n      }\n\n      this._setItemsToConfirm(this._selectedItems);\n\n      // Emit onSelect event after setting items to confirm so they could be used\n      // inside the event.\n      this._emitOnSelect(item, !isItemSelected);\n    } else {\n      if (this.hasConfirmButton || this.footerTemplate) {\n        // Don't close Modal and keep track on items to confirm.\n        // When footer template is used it's up to developer to close Modal.\n        this._selectedItems = [];\n\n        if (isItemSelected) {\n          this._deleteSelectedItem(item);\n        } else {\n          this._addSelectedItem(item);\n        }\n\n        this._setItemsToConfirm(this._selectedItems);\n\n        // Emit onSelect event after setting items to confirm so they could be used\n        // inside the event.\n        this._emitOnSelect(item, !isItemSelected);\n      } else {\n        if (!isItemSelected) {\n          this._selectedItems = [];\n          this._addSelectedItem(item);\n\n          // Emit onSelect before onChange.\n          this._emitOnSelect(item, true);\n\n          if (this._shouldStoreItemValue) {\n            this._doSelect(this._getItemValue(item));\n          } else {\n            this._doSelect(item);\n          }\n        }\n\n        this._close();\n      }\n    }\n  }\n\n  _confirm() {\n    this.confirm();\n    this._close();\n  }\n\n  private _getLabelText(): string {\n    return this._ionLabelElement ? this._ionLabelElement.textContent : null;\n  }\n\n  private _areGroupsEmpty(groups: any) {\n    return (\n      groups.length === 0 ||\n      groups.every((group: any) => {\n        return !group.items?.length;\n      })\n    );\n  }\n\n  private _countFooterButtons() {\n    let footerButtonsCount = 0;\n\n    if (this.canClear) {\n      footerButtonsCount++;\n    }\n\n    if (this.isMultiple || this._hasConfirmButton) {\n      footerButtonsCount++;\n    }\n\n    if (this.canAddItem) {\n      footerButtonsCount++;\n    }\n\n    this._footerButtonsCount = footerButtonsCount;\n  }\n\n  private _setItems(items: any[]) {\n    // It's important to have an empty starting group with empty items (groups[0].items),\n    // because we bind to it when using VirtualScroll.\n    // See https://github.com/eakoriakin/ionic-selectable/issues/70.\n    let groups: any[] = [\n      {\n        items: items || [],\n      },\n    ];\n\n    if (items?.length) {\n      if (this._hasGroups) {\n        groups = [];\n\n        items.forEach((item) => {\n          const groupValue = this._getPropertyValue(item, this.groupValueField),\n            group = groups.find((_group) => _group.value === groupValue);\n\n          if (group) {\n            group.items.push(item);\n          } else {\n            groups.push({\n              value: groupValue,\n              text: this._getPropertyValue(item, this.groupTextField),\n              items: [item],\n            });\n          }\n        });\n      }\n    }\n\n    this._groups = groups;\n    this._filteredGroups = this._groups;\n    this._hasFilteredItems = !this._areGroupsEmpty(this._filteredGroups);\n  }\n\n  private _getPropertyValue(object: any, property: string): any {\n    if (!property) {\n      return null;\n    }\n\n    return property.split('.').reduce((_object, _property) => {\n      return _object ? _object[_property] : null;\n    }, object);\n  }\n\n  private _setIonItemHasFocus(hasFocus: boolean) {\n    if (!this.ionItem) {\n      return;\n    }\n\n    // Apply focus CSS class for proper stylying of ion-item/ion-label.\n    this._setIonItemCssClass('item-has-focus', hasFocus);\n  }\n\n  private _setIonItemHasValue() {\n    if (!this.ionItem) {\n      return;\n    }\n\n    // Apply value CSS class for proper stylying of ion-item/ion-label.\n    this._setIonItemCssClass('item-has-value', this.hasValue());\n  }\n\n  private _setHasPlaceholder() {\n    this._hasPlaceholder =\n      !this.hasValue() &&\n      (!this._isNullOrWhiteSpace(this.placeholder) || this.placeholderTemplate)\n        ? true\n        : false;\n  }\n\n  private propagateOnChange = (_: any) => {};\n  private propagateOnTouched = () => {};\n\n  private _setIonItemCssClass(cssClass: string, shouldAdd: boolean) {\n    if (!this._ionItemElement) {\n      return;\n    }\n\n    // Change to Renderer2\n    if (shouldAdd) {\n      this._renderer.addClass(this._ionItemElement, cssClass);\n    } else {\n      this._renderer.removeClass(this._ionItemElement, cssClass);\n    }\n  }\n\n  private _toggleAddItemTemplate(isVisible: boolean) {\n    // It should be possible to show/hide the template regardless\n    // canAddItem or canSaveItem parameters, so we could implement some\n    // custom behavior. E.g. adding item when search fails using onSearchFail event.\n    if (!this.addItemTemplate) {\n      return;\n    }\n\n    // To make SaveItemTemplate visible we just position it over list using CSS.\n    // We don't hide list with *ngIf or [hidden] to prevent its scroll position.\n    this._isAddItemTemplateVisible = isVisible;\n    this._isFooterVisible = !isVisible;\n  }\n\n  /* ControlValueAccessor */\n  writeValue(value: any) {\n    this.value = value;\n  }\n\n  registerOnChange(method: any): void {\n    this.propagateOnChange = method;\n  }\n\n  registerOnTouched(method: () => void) {\n    this.propagateOnTouched = method;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.isEnabled = !isDisabled;\n  }\n  /* .ControlValueAccessor */\n\n  ngOnInit() {\n    this._isIos = this._platform.is('ios');\n    this._isMD = !this._isIos;\n    this._hasObjects = !this._isNullOrWhiteSpace(this.itemValueField);\n    // Grouping is supported for objects only.\n    // Ionic VirtualScroll has it's own implementation of grouping.\n    this._hasGroups = Boolean(\n      this._hasObjects && this.groupValueField && !this.hasVirtualScroll\n    );\n\n    if (this.ionItem) {\n      this._ionItemElement = this._element.nativeElement.closest('ion-item');\n      this._setIonItemCssClass('item-interactive', true);\n      this._setIonItemCssClass('item-ionic-selectable', true);\n\n      if (this._ionItemElement) {\n        this._ionLabelElement = this._ionItemElement.querySelector('ion-label');\n\n        if (this._ionLabelElement) {\n          this._hasIonLabel = true;\n          this._ionLabelPosition =\n            this._ionLabelElement.getAttribute('position') || 'default';\n        }\n      }\n    }\n\n    this.enableIonItem(this.isEnabled);\n  }\n\n  ngDoCheck() {\n    const itemsChanges = this._itemsDiffer.diff(this.items);\n\n    if (itemsChanges) {\n      this._setItems(this.items);\n\n      this.onItemsChange.emit({\n        component: this,\n      });\n    }\n  }\n\n  /**\n   * Adds item.\n   * **Note**: If you want an item to be added to the original array as well use two-way data binding syntax on `[(items)]` field.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#additem).\n   *\n   * @param item Item to add.\n   * @returns Promise that resolves when item has been added.\n   * @memberof IonSelectableComponent\n   */\n  addItem(item: any): Promise<any> {\n    const self = this;\n\n    // Adding item triggers onItemsChange.\n    // Return a promise that resolves when onItemsChange finishes.\n    // We need a promise or user could do something after item has been added,\n    // e.g. use search() method to find the added item.\n    this.items.unshift(item);\n\n    // Close any running subscription.\n    if (this._addItemObservable) {\n      this._addItemObservable.unsubscribe();\n    }\n\n    return new Promise(function (resolve, reject) {\n      // Complete callback isn't fired for some reason,\n      // so unsubscribe in both success and fail cases.\n      self._addItemObservable = self.onItemsChange.asObservable().subscribe(\n        () => {\n          self._addItemObservable.unsubscribe();\n          resolve('');\n        },\n        () => {\n          self._addItemObservable.unsubscribe();\n          reject();\n        }\n      );\n    });\n  }\n\n  /**\n   * Deletes item.\n   * **Note**: If you want an item to be deleted from the original array as well use two-way data binding syntax on `[(items)]` field.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#deleteitem).\n   *\n   * @param item Item to delete.\n   * @returns Promise that resolves when item has been deleted.\n   * @memberof IonSelectableComponent\n   */\n  deleteItem(item: any): Promise<any> {\n    const self = this;\n    let hasValueChanged = false;\n\n    // Remove deleted item from selected items.\n    if (this._selectedItems) {\n      this._selectedItems = this._selectedItems.filter((_item) => {\n        return this._getItemValue(item) !== this._getStoredItemValue(_item);\n      });\n    }\n\n    // Remove deleted item from value.\n    if (this.value) {\n      if (this.isMultiple) {\n        const values = this.value.filter((value: any) => {\n          return value.id !== item.id;\n        });\n\n        if (values.length !== this.value.length) {\n          this.value = values;\n          hasValueChanged = true;\n        }\n      } else {\n        if (item === this.value) {\n          this.value = null;\n          hasValueChanged = true;\n        }\n      }\n    }\n\n    if (hasValueChanged) {\n      this._emitValueChange();\n    }\n\n    // Remove deleted item from list.\n    const items = this.items.filter((_item) => {\n      return _item.id !== item.id;\n    });\n\n    // Refresh items on parent component.\n    this.itemsChange.emit(items);\n\n    // Refresh list.\n    this._setItems(items);\n\n    this.onItemsChange.emit({\n      component: this,\n    });\n\n    // Close any running subscription.\n    if (this._deleteItemObservable) {\n      this._deleteItemObservable.unsubscribe();\n    }\n\n    return new Promise(function (resolve, reject) {\n      // Complete callback isn't fired for some reason,\n      // so unsubscribe in both success and fail cases.\n      self._deleteItemObservable = self.onItemsChange.asObservable().subscribe(\n        () => {\n          self._deleteItemObservable.unsubscribe();\n          resolve('');\n        },\n        () => {\n          self._deleteItemObservable.unsubscribe();\n          reject();\n        }\n      );\n    });\n  }\n\n  /**\n   * Determines whether any item has been selected.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#hasvalue).\n   *\n   * @returns A boolean determining whether any item has been selected.\n   * @memberof IonSelectableComponent\n   */\n  hasValue(): boolean {\n    if (this.isMultiple) {\n      return this._valueItems.length !== 0;\n    } else {\n      return (\n        this._valueItems.length !== 0 &&\n        !this._isNullOrWhiteSpace(this._valueItems[0])\n      );\n    }\n  }\n\n  /**\n   * Opens Modal.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#open).\n   *\n   * @returns Promise that resolves when Modal has been opened.\n   * @memberof IonSelectableComponent\n   */\n  open(): Promise<void> {\n    const self = this;\n\n    return new Promise(function (resolve, reject) {\n      if (!self._isEnabled || self._isOpened) {\n        reject('IonSelectable is disabled or already opened.');\n        return;\n      }\n\n      self._filterItems();\n      self._isOpened = true;\n\n      const modalOptions: ModalOptions = {\n        component: IonSelectableModalComponent,\n        componentProps: { selectComponent: self },\n        backdropDismiss: self._shouldBackdropClose,\n      };\n\n      if (self.modalCssClass) {\n        modalOptions.cssClass = self.modalCssClass;\n      }\n\n      if (self.modalEnterAnimation) {\n        modalOptions.enterAnimation = self.modalEnterAnimation;\n      }\n\n      if (self.modalLeaveAnimation) {\n        modalOptions.leaveAnimation = self.modalLeaveAnimation;\n      }\n\n      self._modalController.create(modalOptions).then((modal) => {\n        self._modal = modal;\n        modal.present().then(() => {\n          // Set focus after Modal has opened to avoid flickering of focus highlighting\n          // before Modal opening.\n          self._setIonItemHasFocus(true);\n          resolve();\n        });\n\n        modal.onWillDismiss().then(() => {\n          self._setIonItemHasFocus(false);\n        });\n\n        modal.onDidDismiss().then((event) => {\n          self._isOpened = false;\n          self._itemsToConfirm = [];\n\n          // Closed by clicking on backdrop outside modal.\n          if (event.role === 'backdrop') {\n            self.onClose.emit({\n              component: self,\n            });\n          }\n        });\n      });\n    });\n  }\n\n  /**\n   * Closes Modal.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#close).\n   *\n   * @returns Promise that resolves when Modal has been closed.\n   * @memberof IonSelectableComponent\n   */\n  close(): Promise<void> {\n    const self = this;\n\n    return new Promise(function (resolve, reject) {\n      if (!self._isEnabled || !self._isOpened) {\n        reject('IonSelectable is disabled or already closed.');\n        return;\n      }\n\n      self.propagateOnTouched();\n      self._isOpened = false;\n      self._itemToAdd = null;\n      self._modal.dismiss().then(() => {\n        self._setIonItemHasFocus(false);\n        self.hideAddItemTemplate();\n        resolve();\n      });\n    });\n  }\n\n  /**\n   * Clears value.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#clear).\n   *\n   * @memberof IonSelectableComponent\n   */\n  clear() {\n    this.value = this.isMultiple ? [] : null;\n    this._itemsToConfirm = [];\n    this.propagateOnChange(this.value);\n  }\n\n  /**\n   * Confirms selected items by updating value.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#confirm).\n   *\n   * @memberof IonSelectableComponent\n   */\n  confirm() {\n    if (this.isMultiple) {\n      this._doSelect(this._selectedItems);\n    } else if (this.hasConfirmButton || this.footerTemplate) {\n      this._doSelect(this._selectedItems[0] || null);\n    }\n  }\n\n  /**\n   * Selects or deselects all or specific items.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#toggleitems).\n   *\n   * @param isSelect Determines whether to select or deselect items.\n   * @param [items] Items to toggle. If items are not set all items will be toggled.\n   * @memberof IonSelectableComponent\n   */\n  toggleItems(isSelect: boolean, items?: any[]) {\n    if (isSelect) {\n      const hasItems = items?.length;\n      let itemsToToggle = this._groups.reduce((allItems, group) => {\n        return allItems.concat(group.items);\n      }, []);\n\n      // Don't allow to select all items in single mode.\n      if (!this.isMultiple && !hasItems) {\n        itemsToToggle = [];\n      }\n\n      // Toggle specific items.\n      if (hasItems) {\n        itemsToToggle = itemsToToggle.filter((itemToToggle: any) => {\n          return (\n            items.find((item) => {\n              return (\n                this._getItemValue(itemToToggle) === this._getItemValue(item)\n              );\n            }) !== undefined\n          );\n        });\n\n        // Take the first item for single mode.\n        if (!this.isMultiple) {\n          itemsToToggle.splice(0, 1);\n        }\n      }\n\n      itemsToToggle.forEach((item: any) => {\n        this._addSelectedItem(item);\n      });\n    } else {\n      this._selectedItems = [];\n    }\n\n    this._setItemsToConfirm(this._selectedItems);\n  }\n\n  /**\n   * Scrolls to the top of Modal content.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#scrolltotop).\n   *\n   * @returns Promise that resolves when scroll has been completed.\n   * @memberof IonSelectableComponent\n   */\n  scrollToTop(): Promise<any> {\n    const self = this;\n\n    return new Promise(function (resolve, reject) {\n      if (!self._isOpened) {\n        reject('IonSelectable content cannot be scrolled.');\n        return;\n      }\n\n      self._modalComponent._content.scrollToTop().then(() => {\n        resolve('');\n      });\n    });\n  }\n\n  /**\n   * Scrolls to the bottom of Modal content.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#scrolltobottom).\n   *\n   * @returns Promise that resolves when scroll has been completed.\n   * @memberof IonSelectableComponent\n   */\n  scrollToBottom(): Promise<any> {\n    const self = this;\n\n    return new Promise(function (resolve, reject) {\n      if (!self._isOpened) {\n        reject('IonSelectable content cannot be scrolled.');\n        return;\n      }\n\n      self._modalComponent._content.scrollToBottom().then(() => {\n        resolve('');\n      });\n    });\n  }\n\n  /**\n   * Starts search process by showing Loading spinner.\n   * Use it together with `onSearch` event to indicate search start.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#startsearch).\n   *\n   * @memberof IonSelectableComponent\n   */\n  startSearch() {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    this.showLoading();\n  }\n\n  /**\n   * Ends search process by hiding Loading spinner and refreshing items.\n   * Use it together with `onSearch` event to indicate search end.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#endsearch).\n   *\n   * @memberof IonSelectableComponent\n   */\n  endSearch() {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    this.hideLoading();\n\n    // When inside Ionic Modal and onSearch event is used,\n    // ngDoCheck() doesn't work as _itemsDiffer fails to detect changes.\n    // See https://github.com/eakoriakin/ionic-selectable/issues/44.\n    // Refresh items manually.\n    this._setItems(this.items);\n    this._emitOnSearchSuccessOrFail(this._hasFilteredItems);\n  }\n\n  /**\n   * Enables infinite scroll.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#enableinfinitescroll).\n   *\n   * @memberof IonSelectableComponent\n   */\n  enableInfiniteScroll() {\n    if (!this._hasInfiniteScroll) {\n      return;\n    }\n\n    this._modalComponent._infiniteScroll.disabled = false;\n  }\n\n  /**\n   * Disables infinite scroll.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#disableinfinitescroll).\n   *\n   * @memberof IonSelectableComponent\n   */\n  disableInfiniteScroll() {\n    if (!this._hasInfiniteScroll) {\n      return;\n    }\n\n    this._modalComponent._infiniteScroll.disabled = true;\n  }\n\n  /**\n   * Ends infinite scroll.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#endinfinitescroll).\n   *\n   * @memberof IonSelectableComponent\n   */\n  endInfiniteScroll() {\n    if (!this._hasInfiniteScroll) {\n      return;\n    }\n\n    this._modalComponent._infiniteScroll.complete();\n    this._setItems(this.items);\n  }\n\n  /**\n   * Triggers search of items.\n   * **Note**: `canSearch` has to be enabled.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#search).\n   *\n   * @param text Text to search items by.\n   * @memberof IonSelectableComponent\n   */\n  search(text: string) {\n    if (!this._isEnabled || !this._isOpened || !this.canSearch) {\n      return;\n    }\n\n    this._searchText = text;\n    this._setHasSearchText();\n    this._filterItems();\n  }\n\n  /**\n   * Shows Loading spinner.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#showloading).\n   *\n   * @memberof IonSelectableComponent\n   */\n  showLoading() {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    this._isSearching = true;\n  }\n\n  /**\n   * Hides Loading spinner.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#hideloading).\n   *\n   * @memberof IonSelectableComponent\n   */\n  hideLoading() {\n    if (!this._isEnabled) {\n      return;\n    }\n\n    this._isSearching = false;\n  }\n\n  /**\n   * Shows `IonSelectableAddItemTemplate`.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#showadditemtemplate).\n   *\n   * @memberof IonSelectableComponent\n   */\n  showAddItemTemplate() {\n    this._toggleAddItemTemplate(true);\n\n    // Position the template only when it shous up.\n    this._positionAddItemTemplate();\n  }\n\n  /**\n   * Hides `IonSelectableAddItemTemplate`.\n   * See more on [GitHub](https://github.com/eakoriakin/ionic-selectable/wiki/Documentation#hideadditemtemplate).\n   *\n   * @memberof IonSelectableComponent\n   */\n  hideAddItemTemplate() {\n    // Clean item to add as it's no longer needed once Add Item Modal has been closed.\n    this._itemToAdd = null;\n    this._toggleAddItemTemplate(false);\n  }\n}\n","<div class=\"ionic-selectable-inner\">\n  <div class=\"ionic-selectable-value\">\n    <div *ngIf=\"valueTemplate && _valueItems.length && isMultiple\"\n      [ngTemplateOutlet]=\"valueTemplate\"\n      [ngTemplateOutletContext]=\"{ value: _valueItems }\">\n    </div>\n    <div class=\"ionic-selectable-value-item\"\n      *ngIf=\"valueTemplate && _valueItems.length && !isMultiple\">\n      <div [ngTemplateOutlet]=\"valueTemplate\"\n        [ngTemplateOutletContext]=\"{ value: _valueItems[0] }\">\n      </div>\n    </div>\n    <span *ngIf=\"!valueTemplate && _valueItems.length\">\n      <div class=\"ionic-selectable-value-item\"\n        *ngFor=\"let valueItem of _valueItems\">\n        {{_formatValueItem(valueItem)}}\n      </div>\n    </span>\n    <div *ngIf=\"_hasPlaceholder && placeholderTemplate\"\n      class=\"ionic-selectable-value-item\">\n      <div [ngTemplateOutlet]=\"placeholderTemplate\">\n      </div>\n    </div>\n    <div class=\"ionic-selectable-value-item\"\n      *ngIf=\"_hasPlaceholder && !placeholderTemplate\">\n      {{placeholder}}\n    </div>\n    <!-- Fix icon allignment when there's no value or placeholder. -->\n    <span *ngIf=\"!_valueItems.length && !_hasPlaceholder\">&nbsp;</span>\n  </div>\n  <div *ngIf=\"iconTemplate\" class=\"ionic-selectable-icon-template\">\n      <div [ngTemplateOutlet]=\"iconTemplate\"></div>\n  </div>\n  <div *ngIf=\"!iconTemplate\" class=\"ionic-selectable-icon\">\n    <div class=\"ionic-selectable-icon-inner\"></div>\n  </div>\n  <!-- Need to be type=\"button\" otherwise click event triggers form ngSubmit. -->\n  <button class=\"ionic-selectable-cover\" [disabled]=\"!isEnabled\"\n    (click)=\"_click()\" type=\"button\">\n  </button>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}