angular-multiselect3 10.0.0 → 11.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, Directive, Input, Output, HostListener, Injectable, Pipe, TemplateRef, Component, ContentChild, ViewEncapsulation, PLATFORM_ID, ElementRef, Inject, Optional, ViewChild, NgModule, forwardRef } from '@angular/core';
3
- import * as i3 from '@angular/forms';
2
+ import { Pipe, TemplateRef, Component, ContentChild, Input, ViewEncapsulation, EventEmitter, PLATFORM_ID, ElementRef, Inject, Optional, Output, ViewChild, NgModule, Injectable, forwardRef, HostListener } from '@angular/core';
3
+ import * as i4 from '@angular/forms';
4
4
  import { NG_VALUE_ACCESSOR, NG_VALIDATORS, FormsModule } from '@angular/forms';
5
- import * as i2 from '@angular/common';
6
- import { isPlatformServer, CommonModule } from '@angular/common';
7
- import { Subject } from 'rxjs';
5
+ import * as i3 from '@angular/common';
6
+ import { isPlatformServer, CommonModule, DOCUMENT } from '@angular/common';
7
+ import { Subject, merge, fromEvent } from 'rxjs';
8
8
  import * as tween from '@tweenjs/tween.js';
9
9
  import { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';
10
10
 
@@ -17,95 +17,10 @@ class MyException {
17
17
  }
18
18
  }
19
19
 
20
- class ClickOutsideDirective {
21
- _elementRef;
22
- constructor(_elementRef) {
23
- this._elementRef = _elementRef;
24
- }
25
- enabled;
26
- clickOutside = new EventEmitter();
27
- onClick(event, targetElement) {
28
- console.log('clicked outside');
29
- if (!targetElement || !this.enabled) {
30
- return;
31
- }
32
- const clickedInside = this._elementRef.nativeElement.contains(targetElement);
33
- if (!clickedInside) {
34
- this.clickOutside.emit(event);
35
- }
36
- }
37
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ClickOutsideDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
38
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: ClickOutsideDirective, selector: "[clickOutside]", inputs: { enabled: "enabled" }, outputs: { clickOutside: "clickOutside" }, host: { listeners: { "document:pointerdown": "onClick($event,$event.target)", "document:touchstart": "onClick($event,$event.target)" } }, ngImport: i0 });
39
- }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ClickOutsideDirective, decorators: [{
41
- type: Directive,
42
- args: [{
43
- selector: '[clickOutside]',
44
- }]
45
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { enabled: [{
46
- type: Input
47
- }], clickOutside: [{
48
- type: Output
49
- }], onClick: [{
50
- type: HostListener,
51
- args: ['document:pointerdown', ['$event', '$event.target']]
52
- }, {
53
- type: HostListener,
54
- args: ['document:touchstart', ['$event', '$event.target']]
55
- }] } });
56
- class ScrollDirective {
57
- scroll = new EventEmitter();
58
- onClick(event, targetElement) {
59
- this.scroll.emit(event);
60
- }
61
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScrollDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
62
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: ScrollDirective, selector: "[scroll]", outputs: { scroll: "scroll" }, host: { listeners: { "scroll": "onClick($event)" } }, ngImport: i0 });
63
- }
64
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScrollDirective, decorators: [{
65
- type: Directive,
66
- args: [{
67
- selector: '[scroll]',
68
- }]
69
- }], propDecorators: { scroll: [{
70
- type: Output
71
- }], onClick: [{
72
- type: HostListener,
73
- args: ['scroll', ['$event']]
74
- }] } });
75
-
76
- class DataService {
77
- filteredData = [];
78
- subject = new Subject();
79
- setData(data) {
80
- this.filteredData = data;
81
- this.subject.next(data);
82
- }
83
- getData() {
84
- return this.subject.asObservable();
85
- }
86
- getFilteredData() {
87
- if (this.filteredData && this.filteredData.length > 0) {
88
- return this.filteredData;
89
- }
90
- else {
91
- return [];
92
- }
93
- }
94
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
95
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DataService });
96
- }
97
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DataService, decorators: [{
98
- type: Injectable
99
- }] });
100
-
101
20
  class ListFilterPipe {
102
- ds;
103
21
  filteredList = [];
104
- constructor(ds) {
105
- this.ds = ds;
106
- }
107
22
  transform(items, filter, searchBy) {
108
- if (!items || !filter || filter == "") {
23
+ if (!items || !filter || filter == '') {
109
24
  return items;
110
25
  }
111
26
  this.filteredList = items.filter((item) => this.applyFilter(item, filter, searchBy));
@@ -119,8 +34,11 @@ class ListFilterPipe {
119
34
  }
120
35
  else {
121
36
  for (var t = 0; t < searchBy.length; t++) {
122
- if (filter && item[searchBy[t]] && item[searchBy[t]] != "") {
123
- if (item[searchBy[t]].toString().toLowerCase().indexOf(filter.toLowerCase()) >= 0) {
37
+ if (filter && item[searchBy[t]] && item[searchBy[t]] != '') {
38
+ if (item[searchBy[t]]
39
+ .toString()
40
+ .toLowerCase()
41
+ .indexOf(filter.toLowerCase()) >= 0) {
124
42
  found = true;
125
43
  }
126
44
  }
@@ -134,7 +52,10 @@ class ListFilterPipe {
134
52
  else {
135
53
  for (var prop in item) {
136
54
  if (filter && item[prop]) {
137
- if (item[prop].toString().toLowerCase().indexOf(filter.toLowerCase()) >= 0) {
55
+ if (item[prop]
56
+ .toString()
57
+ .toLowerCase()
58
+ .indexOf(filter.toLowerCase()) >= 0) {
138
59
  found = true;
139
60
  }
140
61
  }
@@ -143,16 +64,16 @@ class ListFilterPipe {
143
64
  }
144
65
  return found;
145
66
  }
146
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ListFilterPipe, deps: [{ token: DataService }], target: i0.ɵɵFactoryTarget.Pipe });
67
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ListFilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
147
68
  static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: ListFilterPipe, name: "listFilter" });
148
69
  }
149
70
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ListFilterPipe, decorators: [{
150
71
  type: Pipe,
151
72
  args: [{
152
73
  name: 'listFilter',
153
- pure: true
74
+ pure: true,
154
75
  }]
155
- }], ctorParameters: () => [{ type: DataService }] });
76
+ }] });
156
77
 
157
78
  class Item {
158
79
  template;
@@ -363,7 +284,7 @@ class CIcon {
363
284
  l-7.071,7.071l7.425,7.425C37.022,34.194,37.022,35.46,36.241,36.241z"
364
285
  />
365
286
  </g>
366
- </svg>`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
287
+ </svg>`, isInline: true, dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
367
288
  }
368
289
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CIcon, decorators: [{
369
290
  type: Component,
@@ -1659,6 +1580,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
1659
1580
  }]
1660
1581
  }] });
1661
1582
 
1583
+ class ClickOutsideService {
1584
+ _document;
1585
+ // tslint:disable-next-line:variable-name
1586
+ _items = new Set();
1587
+ // tslint:disable-next-line:variable-name
1588
+ _click$ = new Subject();
1589
+ // tslint:disable-next-line:variable-name
1590
+ _docSub;
1591
+ constructor(_document) {
1592
+ this._document = _document;
1593
+ }
1594
+ register(item) {
1595
+ this._items.add(item);
1596
+ if (this._items.size === 1) {
1597
+ this._subscribeToDocument();
1598
+ }
1599
+ }
1600
+ unregister(item) {
1601
+ this._items.delete(item);
1602
+ if (this._items.size === 0) {
1603
+ this._unsubscribe();
1604
+ }
1605
+ }
1606
+ onClick() {
1607
+ // return observable of document click/pointer events
1608
+ return this._click$.asObservable();
1609
+ }
1610
+ _subscribeToDocument() {
1611
+ if (this._docSub) {
1612
+ return;
1613
+ }
1614
+ // listen to touchstart / pointerdown / mousedown and forward events
1615
+ this._docSub = merge(fromEvent(this._document.defaultView, 'touchstart'), fromEvent(this._document.defaultView, 'pointerdown')).subscribe((event) => this._click$.next(event));
1616
+ }
1617
+ _unsubscribe() {
1618
+ if (this._docSub) {
1619
+ this._docSub.unsubscribe();
1620
+ this._docSub = undefined;
1621
+ }
1622
+ }
1623
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ClickOutsideService, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
1624
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ClickOutsideService });
1625
+ }
1626
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ClickOutsideService, decorators: [{
1627
+ type: Injectable
1628
+ }], ctorParameters: () => [{ type: Document, decorators: [{
1629
+ type: Inject,
1630
+ args: [DOCUMENT]
1631
+ }] }] });
1632
+
1662
1633
  const DROPDOWN_CONTROL_VALUE_ACCESSOR = {
1663
1634
  provide: NG_VALUE_ACCESSOR,
1664
1635
  useExisting: forwardRef(() => AngularMultiSelect),
@@ -1674,6 +1645,7 @@ class AngularMultiSelect {
1674
1645
  _elementRef;
1675
1646
  cdr;
1676
1647
  filterPipe;
1648
+ _service;
1677
1649
  data;
1678
1650
  settings;
1679
1651
  loading;
@@ -1745,7 +1717,7 @@ class AngularMultiSelect {
1745
1717
  dropDownTop = '';
1746
1718
  dropDownBottom = 'unset';
1747
1719
  dropDownLeft = 0;
1748
- id = Math.random().toString(36).substring(2);
1720
+ id = window.crypto.randomUUID();
1749
1721
  defaultSettings = {
1750
1722
  singleSelection: false,
1751
1723
  text: 'Select',
@@ -1783,10 +1755,11 @@ class AngularMultiSelect {
1783
1755
  virtualScroollInit = false;
1784
1756
  virtualScroller;
1785
1757
  isDisabledItemPresent = false;
1786
- constructor(_elementRef, cdr, filterPipe) {
1758
+ constructor(_elementRef, cdr, filterPipe, _service) {
1787
1759
  this._elementRef = _elementRef;
1788
1760
  this.cdr = cdr;
1789
1761
  this.filterPipe = filterPipe;
1762
+ this._service = _service;
1790
1763
  this.searchTerm$
1791
1764
  .asObservable()
1792
1765
  .pipe(debounceTime(1000), distinctUntilChanged(), tap((term) => term))
@@ -1795,6 +1768,7 @@ class AngularMultiSelect {
1795
1768
  });
1796
1769
  }
1797
1770
  ngOnInit() {
1771
+ this._service.register(this.id);
1798
1772
  this.settings = Object.assign(this.defaultSettings, this.settings);
1799
1773
  this.cachedItems = this.cloneArray(this.data);
1800
1774
  if (this.settings.position == 'top') {
@@ -1808,6 +1782,16 @@ class AngularMultiSelect {
1808
1782
  this.calculateDropdownDirection();
1809
1783
  });
1810
1784
  this.virtualScroollInit = false;
1785
+ this.subscription = this._service
1786
+ .onClick()
1787
+ .subscribe((event) => {
1788
+ if (!event.target ||
1789
+ !this.isActive ||
1790
+ this._elementRef.nativeElement.contains(event.target)) {
1791
+ return;
1792
+ }
1793
+ this.closeDropdownOnClickOut();
1794
+ });
1811
1795
  }
1812
1796
  onKeyUp(evt) {
1813
1797
  this.searchTerm$.next(evt.target.value);
@@ -2427,6 +2411,7 @@ class AngularMultiSelect {
2427
2411
  if (this.subscription) {
2428
2412
  this.subscription.unsubscribe();
2429
2413
  }
2414
+ this._service.unregister(this.id);
2430
2415
  }
2431
2416
  selectGroup(item) {
2432
2417
  if (item.disabled) {
@@ -2553,13 +2538,13 @@ class AngularMultiSelect {
2553
2538
  }
2554
2539
  this.onFilterChange(this.filteredList);
2555
2540
  }
2556
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AngularMultiSelect, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: ListFilterPipe }], target: i0.ɵɵFactoryTarget.Component });
2557
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AngularMultiSelect, selector: "angular2-multiselect", inputs: { data: "data", settings: "settings", loading: "loading" }, outputs: { onSelect: "onSelect", onDeSelect: "onDeSelect", onSelectAll: "onSelectAll", onDeSelectAll: "onDeSelectAll", onOpen: "onOpen", onClose: "onClose", onScrollToEnd: "onScrollToEnd", onFilterSelectAll: "onFilterSelectAll", onFilterDeSelectAll: "onFilterDeSelectAll", onAddFilterNewItem: "onAddFilterNewItem", onGroupSelect: "onGroupSelect", onGroupDeSelect: "onGroupDeSelect" }, host: { listeners: { "document:keyup.escape": "onEscapeDown($event)", "window:scroll": "onScroll($event)" }, properties: { "class": "defaultSettings.classes" } }, providers: [DROPDOWN_CONTROL_VALUE_ACCESSOR, DROPDOWN_CONTROL_VALIDATION], queries: [{ propertyName: "itemTempl", first: true, predicate: Item, descendants: true }, { propertyName: "badgeTempl", first: true, predicate: Badge, descendants: true }, { propertyName: "searchTempl", first: true, predicate: Search, descendants: true }], viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "selectedListElem", first: true, predicate: ["selectedList"], descendants: true }, { propertyName: "dropdownListElem", first: true, predicate: ["dropdownList"], descendants: true }, { propertyName: "cuppaDropdown", first: true, predicate: ["cuppaDropdown"], descendants: true }, { propertyName: "virtualScroller", first: true, predicate: VirtualScrollerComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cuppa-dropdown\" (clickOutside)=\"closeDropdownOnClickOut()\" [enabled]=\"isActive\" #cuppaDropdown>\n <div class=\"selected-list\" #selectedList>\n <div class=\"c-btn\" (click)=\"toggleDropdown($event)\" [ngClass]=\"{'disabled': settings.disabled}\" [attr.tabindex]=\"0\">\n\n <span *ngIf=\"selectedItems?.length == 0\">{{ settings.text }}</span>\n <span *ngIf=\"settings.singleSelection && !badgeTempl\">\n <span *ngFor=\"let item of selectedItems;trackBy: trackByFn.bind(this);let k = index\">\n {{ item[settings.labelKey] }}\n </span>\n </span>\n <span class=\"c-list\" *ngIf=\"selectedItems?.length > 0 && settings.singleSelection && badgeTempl \">\n <div class=\"c-token\" *ngFor=\"let item of selectedItems;trackBy: trackByFn.bind(this);let k = index\">\n <span *ngIf=\"!badgeTempl\" class=\"c-label\">{{ item[settings.labelKey] }}</span>\n\n <span *ngIf=\"badgeTempl\" class=\"c-label\">\n <c-templateRenderer [data]=\"badgeTempl\" [item]=\"item\"></c-templateRenderer>\n </span>\n <span class=\"c-remove\" (click)=\"onItemClick(item,k,$event);$event.stopPropagation()\">\n <c-icon name=\"remove\"/>\n </span>\n </div>\n </span>\n <div class=\"c-list\" *ngIf=\"selectedItems?.length > 0 && !settings.singleSelection\">\n <div class=\"c-token\" *ngFor=\"let item of selectedItems;trackBy: trackByFn.bind(this);let k = index\"\n [hidden]=\"k > settings.badgeShowLimit-1\">\n\n @if (badgeTempl) {\n <span class=\"c-label\"><c-templateRenderer [data]=\"badgeTempl\" [item]=\"item\"></c-templateRenderer></span>\n } @else {\n <span class=\"c-label\">{{ item[settings.labelKey] }}</span>\n\n }\n\n <span class=\"c-remove\" (click)=\"onItemClick(item,k,$event);$event.stopPropagation()\">\n <c-icon [name]=\"'remove'\"></c-icon>\n </span>\n </div>\n </div>\n <span class=\"countplaceholder\"\n *ngIf=\"selectedItems?.length > settings.badgeShowLimit\">+{{ selectedItems?.length - settings.badgeShowLimit }}</span>\n <span class=\"c-remove clear-all\" *ngIf=\"settings.clearAll && selectedItems?.length > 0 && !settings.disabled\"\n (click)=\"clearSelection($event);$event.stopPropagation()\">\n <c-icon [name]=\"'remove'\"></c-icon>\n </span>\n @if (isActive) {\n <span class=\"c-angle-up\"><c-icon [name]=\"'angle-up'\"></c-icon></span>\n } @else {\n <span class=\"c-angle-down\"><c-icon [name]=\"'angle-down'\"></c-icon></span>\n }\n </div>\n </div>\n <div #dropdownList class=\"dropdown-list animated fadeIn\"\n [ngClass]=\"{'tagToBody': settings.tagToBody}\"\n [style.width.px]=\"dropDownWidth\"\n [style.top]=\"dropDownTop\"\n [style.bottom]=\"dropDownBottom\"\n [style.left.px]=\"dropDownLeft\"\n [hidden]=\"!isActive\">\n <div [ngClass]=\"{'arrow-up': settings.position == 'bottom', 'arrow-down': settings.position == 'top'}\"\n class=\"arrow-2\"></div>\n <div [ngClass]=\"{'arrow-up': settings.position == 'bottom', 'arrow-down': settings.position == 'top'}\"></div>\n <div class=\"list-area\" [ngClass]=\"{'single-select-mode': settings.singleSelection }\">\n <div class=\"pure-checkbox select-all\"\n *ngIf=\"settings.enableCheckAll && !settings.singleSelection && !settings.limitSelection && data?.length > 0 && !isDisabledItemPresent\"\n >\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelectAll\"\n [disabled]=\"settings.limitSelection == selectedItems?.length\"\n [id]=\"id\" (change)=\"toggleSelectAll($event)\"/>\n <label [for]=\"id\">\n <span [hidden]=\"isSelectAll\">{{ settings.selectAllText }}</span>\n <span [hidden]=\"!isSelectAll\">{{ settings.unSelectAllText }}</span>\n </label>\n </div>\n <img class=\"loading-icon\" *ngIf=\"loading\" src=\"assets/img/loading.gif\"/>\n <div class=\"list-filter\" *ngIf=\"settings.enableSearchFilter\">\n <span class=\"c-search\" id=\"searchIcon\">\n <c-icon [name]=\"'search'\"></c-icon>\n </span>\n <span *ngIf=\"!settings.lazyLoading\" [hidden]=\"filter == undefined || filter?.length == 0\" class=\"c-clear\"\n (click)=\"clearSearch()\">\n <c-icon [name]=\"'clear'\"></c-icon>\n </span>\n <span *ngIf=\"settings.lazyLoading\" [hidden]=\"filter == undefined || filter?.length == 0\" class=\"c-clear\"\n (click)=\"resetInfiniteSearch()\">\n <c-icon [name]=\"'clear'\"></c-icon>\n </span>\n\n <input class=\"c-input\" *ngIf=\"settings.groupBy && !settings.lazyLoading && !searchTempl\" #searchInput\n type=\"text\" [placeholder]=\"settings.searchPlaceholderText\"\n [(ngModel)]=\"filter\" (keyup)=\"filterGroupedList()\" aria-labelledby=\"searchIcon\">\n <input class=\"c-input\" *ngIf=\"!settings.groupBy && !settings.lazyLoading && !searchTempl\" #searchInput\n type=\"text\" [placeholder]=\"settings.searchPlaceholderText\"\n [(ngModel)]=\"filter\" (keyup)=\"filteritems($event)\" aria-labelledby=\"searchIcon\">\n <input class=\"c-input\" *ngIf=\"settings.lazyLoading && !searchTempl\" #searchInput type=\"text\"\n [placeholder]=\"settings.searchPlaceholderText\"\n [(ngModel)]=\"filter\" (keyup)=\"onKeyUp($event)\" aria-labelledby=\"searchIcon\">\n <!-- <input class=\"c-input\" *ngIf=\"!settings.lazyLoading && !searchTempl && settings.groupBy\" #searchInput type=\"text\" [placeholder]=\"settings.searchPlaceholderText\"\n [(ngModel)]=\"filter\" (keyup)=\"filterGroupList($event)\">-->\n <c-templateRenderer *ngIf=\"searchTempl\" [data]=\"searchTempl\" [item]=\"item\"></c-templateRenderer>\n </div>\n <div class=\"filter-select-all\"\n *ngIf=\"!settings.lazyLoading && settings.enableFilterSelectAll && !isDisabledItemPresent\">\n <div class=\"pure-checkbox select-all\"\n *ngIf=\"!settings.groupBy && filter?.length > 0 && filterLength > 0 && !settings.singleSelection\"\n (click)=\"toggleFilterSelectAll()\">\n <input type=\"checkbox\" [checked]=\"isFilterSelectAll\"\n [disabled]=\"settings.limitSelection == selectedItems?.length\" aria-labelledby=\"optionName\"\n aria-label=\"option\"/>\n <label>\n <span [hidden]=\"isFilterSelectAll\">{{ settings.filterSelectAllText }}</span>\n <span [hidden]=\"!isFilterSelectAll\">{{ settings.filterUnSelectAllText }}</span>\n </label>\n </div>\n <div class=\"pure-checkbox select-all\"\n *ngIf=\"settings.groupBy && filter?.length > 0 && groupedData?.length > 0 && !settings.singleSelection\"\n (click)=\"toggleFilterSelectAll()\">\n <input type=\"checkbox\" [checked]=\"isFilterSelectAll && filter?.length > 0\"\n [disabled]=\"settings.limitSelection == selectedItems?.length\"\n aria-labelledby=\"option\"/>\n <label>\n <span [hidden]=\"isFilterSelectAll\">{{ settings.filterSelectAllText }}</span>\n <span [hidden]=\"!isFilterSelectAll\">{{ settings.filterUnSelectAllText }}</span>\n </label>\n </div>\n </div>\n <div class=\"filter-select-all\"\n *ngIf=\"settings.lazyLoading && settings.enableFilterSelectAll && !isDisabledItemPresent && !settings.singleSelection\">\n <div class=\"pure-checkbox select-all\" *ngIf=\"filter?.length > 0 && infiniteFilterLength > 0\"\n (click)=\"toggleInfiniteFilterSelectAll()\">\n <input type=\"checkbox\" [checked]=\"isInfiniteFilterSelectAll\"\n [disabled]=\"settings.limitSelection == selectedItems?.length\"\n aria-labelledby=\"option\"/>\n <label>\n <span [hidden]=\"isInfiniteFilterSelectAll\">{{ settings.filterSelectAllText }}</span>\n <span [hidden]=\"!isInfiniteFilterSelectAll\">{{ settings.filterUnSelectAllText }}</span>\n </label>\n </div>\n </div>\n <div class=\"filter-select-all\" *ngIf=\"filter?.length\">\n <div class=\"btn-container\" *ngIf=\"settings.addNewItemOnFilter\">\n <button class=\"c-btn btn-iceblue\" (click)=\"addFilterNewItem()\">{{ settings.addNewButtonText }}</button>\n </div>\n </div>\n\n <div *ngIf=\"!settings.groupBy && !settings.lazyLoading && itemTempl == undefined\"\n [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul class=\"lazyContainer\">\n <li *ngFor=\"let item of data; let i = index;\" (click)=\"onItemClick(item,i,$event)\"\n class=\"pure-checkbox\" [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n aria-labelledby=\"option\"/>\n <label>{{ item[settings.labelKey] }}</label>\n </li>\n </ul>\n </div>\n <!-- lazy loading -->\n <div *ngIf=\"!settings.groupBy && settings.lazyLoading && itemTempl == undefined\"\n [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul virtualScroller #scroll [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\"\n (vsStart)=\"onScrollEnd($event)\"\n (vsEnd)=\"onScrollEnd($event)\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\" class=\"lazyContainer\">\n <li *ngFor=\"let item of scroll.viewPortItems; let i = index;\" (click)=\"onItemClick(item,i,$event)\"\n class=\"pure-checkbox\"\n [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n />\n <label>{{ item[settings.labelKey] }}</label>\n </li>\n </ul>\n </div>\n <!-- custom template -->\n <div *ngIf=\"!settings.groupBy && !settings.lazyLoading && itemTempl != undefined\"\n [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul class=\"lazyContainer\">\n <li *ngFor=\"let item of data; let i = index;\" (click)=\"onItemClick(item,i,$event)\"\n class=\"pure-checkbox\" [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n />\n <label></label>\n <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n </li>\n </ul>\n </div>\n <!-- lazy loading and custom template -->\n <div *ngIf=\"!settings.groupBy && settings.lazyLoading && itemTempl != undefined\"\n [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul virtualScroller #scroll2 [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\"\n (vsStart)=\"onScrollEnd($event)\"\n (vsEnd)=\"onScrollEnd($event)\" class=\"lazyContainer\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\">\n <li *ngFor=\"let item of scroll2.viewPortItems; let i = index;\" (click)=\"onItemClick(item,i,$event)\"\n class=\"pure-checkbox\"\n [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n />\n <label></label>\n <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n </li>\n </ul>\n </div>\n <!-- lazy loading, group By and custom template -->\n <div *ngIf=\"settings.groupBy && settings.lazyLoading && itemTempl != undefined\"\n [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul virtualScroller #scroll3 [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\"\n (vsStart)=\"onScrollEnd($event)\"\n (vsEnd)=\"onScrollEnd($event)\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\" class=\"lazyContainer\">\n <span *ngFor=\"let item of scroll3.viewPortItems; let i = index;\">\n <li (click)=\"onItemClick(item,i,$event)\" *ngIf=\"!item.grpTitle\"\n [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && !settings.singleSelection\" type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n />\n <label></label>\n <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n </li>\n <li *ngIf=\"item.grpTitle\"\n [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n />\n <label></label>\n <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n </li>\n </span>\n </ul>\n </div>\n <!-- group By and custom template -->\n <div *ngIf=\"settings.groupBy && !settings.lazyLoading && itemTempl != undefined\"\n [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul class=\"lazyContainer\">\n <span *ngFor=\"let item of groupedData; let i = index;\">\n <li (click)=\"selectGroup(item)\"\n [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && !settings.singleSelection\" type=\"checkbox\"\n [checked]=\"item.selected\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n />\n <label>{{ item[settings.labelKey] }}</label>\n <ul class=\"lazyContainer\">\n <span *ngFor=\"let val of item.list ; let j = index;\">\n <li (click)=\"onItemClick(val,j,$event); $event.stopPropagation()\"\n [ngClass]=\"{'grp-title': val.grpTitle,'grp-item': !val.grpTitle && !settings.singleSelection}\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(val)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(val)) || val.disabled\"\n />\n <label></label>\n <c-templateRenderer [data]=\"itemTempl\" [item]=\"val\"></c-templateRenderer>\n </li>\n </span>\n </ul>\n\n </li>\n </span>\n </ul>\n </div>\n <!-- lazy loading, group By -->\n <div *ngIf=\"settings.groupBy && settings.lazyLoading && itemTempl == undefined\"\n [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <virtual-scroller [items]=\"groupedData\" (vsUpdate)=\"viewPortItems = $event\" (vsEnd)=\"onScrollEnd($event)\"\n [ngStyle]=\"{'height': settings.maxHeight+'px'}\">\n <ul virtualScroller #scroll4 [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\"\n (vsStart)=\"onScrollEnd($event)\"\n (vsEnd)=\"onScrollEnd($event)\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\" class=\"lazyContainer\">\n <span *ngFor=\"let item of scroll4.viewPortItems; let i = index;\">\n <li *ngIf=\"item.grpTitle\"\n [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection, 'selected-item': isSelected(item) == true }\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && !item.grpTitle && !settings.singleSelection\"\n type=\"checkbox\" [checked]=\"isSelected(item)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n />\n <label>{{ item[settings.labelKey] }}</label>\n </li>\n <li (click)=\"onItemClick(item,i,$event)\" *ngIf=\"!item.grpTitle\"\n [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection, 'selected-item': isSelected(item) == true }\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && !item.grpTitle\" type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n />\n <label>{{ item[settings.labelKey] }}</label>\n </li>\n </span>\n </ul>\n </virtual-scroller>\n </div>\n <!-- group By -->\n <div *ngIf=\"settings.groupBy && !settings.lazyLoading && itemTempl == undefined\"\n [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul class=\"lazyContainer\">\n <span *ngFor=\"let item of groupedData ; let i = index;\">\n <li (click)=\"selectGroup(item)\"\n [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && !settings.singleSelection\" type=\"checkbox\"\n [checked]=\"item.selected\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n />\n <label>{{ item[settings.labelKey] }}</label>\n <ul class=\"lazyContainer\">\n <span *ngFor=\"let val of item.list ; let j = index;\">\n <li (click)=\"onItemClick(val,j,$event); $event.stopPropagation()\"\n [ngClass]=\"{'selected-item': isSelected(val) == true,'grp-title': val.grpTitle,'grp-item': !val.grpTitle && !settings.singleSelection}\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(val)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(val)) || val.disabled\"\n />\n <label>{{ val[settings.labelKey] }}</label>\n </li>\n </span>\n </ul>\n </li>\n </span>\n </ul>\n </div>\n <h5 class=\"list-message\" *ngIf=\"data?.length == 0\">{{ settings.noDataLabel }}</h5>\n </div>\n </div>\n</div>\n", styles: ["virtual-scroll{display:block;width:100%}.cuppa-dropdown{position:relative}.c-btn{display:inline-block;border-width:1px;line-height:1.25;border-radius:3px;font-size:.85rem;padding:5px 10px;cursor:pointer;align-items:center;min-height:38px}.c-btn.disabled{background:#ccc}.selected-list .c-list{float:left;padding:0;margin:0;width:calc(100% - 20px)}.selected-list .c-list .c-token{list-style:none;padding:4px 22px 4px 8px;border-radius:2px;margin-right:4px;margin-top:2px;float:left;position:relative}.selected-list .c-list .c-token .c-label{display:block;float:left}.selected-list .c-list .c-token .c-remove{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:8px}.selected-list .c-list .c-token .c-remove svg{fill:#fff}.selected-list .fa-angle-down,.selected-list .fa-angle-up{font-size:15pt;position:absolute;right:10px;top:50%;transform:translateY(-50%)}.selected-list .c-angle-down,.selected-list .c-angle-up{width:12px;height:12px;position:absolute;right:10px;top:50%;transform:translateY(-50%);pointer-events:none}.selected-list .c-angle-down svg,.selected-list .c-angle-up svg{fill:#333}.selected-list .countplaceholder{position:absolute;right:45px;top:50%;transform:translateY(-50%)}.selected-list .c-btn{width:100%;padding:5px 10px;cursor:pointer;display:flex;position:relative}.selected-list .c-btn .c-icon{position:absolute;right:5px;top:50%;transform:translateY(-50%)}.dropdown-list.tagToBody{position:fixed}.dropdown-list{position:absolute;padding-top:14px;width:100%;z-index:99999}.dropdown-list ul{padding:0;list-style:none;overflow:auto;margin:0}.dropdown-list ul li{padding:10px;cursor:pointer;text-align:left}.dropdown-list ul li:first-child{padding-top:10px}.dropdown-list ul li:last-child{padding-bottom:10px}.dropdown-list ::-webkit-scrollbar{width:8px}.dropdown-list ::-webkit-scrollbar-thumb{background:#ccc;border-radius:5px}.dropdown-list ::-webkit-scrollbar-track{background:#f2f2f2}.arrow-up,.arrow-down{width:0;height:0;border-left:13px solid transparent;border-right:13px solid transparent;border-bottom:15px solid #fff;margin-left:15px;position:absolute;top:0}.arrow-down{bottom:-14px;top:unset;transform:rotate(180deg)}.arrow-2{border-bottom:15px solid #ccc;top:-1px}.arrow-down.arrow-2{top:unset;bottom:-16px}.list-area{border:1px solid #ccc;border-radius:3px;background:#fff;margin:0}.select-all{padding:10px;border-bottom:1px solid #ccc;text-align:left}.list-filter{border-bottom:1px solid #ccc;position:relative;padding-left:35px;height:35px}.list-filter input{border:0px;width:100%;height:100%;padding:0}.list-filter input:focus{outline:none}.list-filter .c-search{position:absolute;top:4px;left:10px;width:15px;height:15px}.list-filter .c-search svg{fill:#888}.list-filter .c-clear{position:absolute;top:4px;right:10px;width:15px;height:15px}.list-filter .c-clear svg{fill:#888}.pure-checkbox input[type=checkbox]{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.pure-checkbox input[type=checkbox]:focus+label:before,.pure-checkbox input[type=checkbox]:hover+label:before{background-color:none}.pure-checkbox input[type=checkbox]:active+label:before{transition-duration:0s}.pure-checkbox input[type=checkbox]:disabled+label{color:#ccc}.pure-checkbox input[type=checkbox]+label{position:relative;padding-left:2em;vertical-align:middle;-webkit-user-select:none;user-select:none;cursor:pointer;margin:0;font-weight:300}.pure-checkbox input[type=checkbox]+label:before{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:0;width:15px;height:15px;margin-top:-9px;text-align:center;transition:all .4s ease;border-radius:3px}.pure-checkbox input[type=checkbox]+label:after{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:0;width:15px;height:15px;margin-top:-9px;transform:scale(0);transform-origin:50%;transition:transform .2s ease-out}.pure-checkbox input[type=checkbox]:disabled+label:before{border-color:#ccc}.pure-checkbox input[type=checkbox]:disabled:focus+label:before .pure-checkbox input[type=checkbox]:disabled:hover+label:before{background-color:inherit}.pure-checkbox input[type=checkbox]:disabled:checked+label:before{background-color:#ccc}.pure-checkbox input[type=checkbox]+label:after{background-color:transparent;top:50%;left:3px;width:9px;height:4px;margin-top:-5px;border-style:solid;border-width:0 0 2px 2px;border-image:none;transform:rotate(-45deg) scale(0)}.pure-checkbox input[type=checkbox]:checked+label:after{content:\"\";transform:rotate(-45deg) scale(1);transition:transform .2s ease-out}.pure-checkbox input[type=radio]:checked+label:before{background-color:#fff}.pure-checkbox input[type=radio]:checked+label:after{transform:scale(1)}.pure-checkbox input[type=radio]+label:before{border-radius:50%}.pure-checkbox input[type=checkbox]:checked+label:after{transform:rotate(-45deg) scale(1)}.list-message{text-align:center;margin:0;padding:15px 0;font-size:initial}.list-grp{padding:0 15px!important}.list-grp h4{text-transform:capitalize;margin:15px 0 0;font-size:14px;font-weight:700}.list-grp>li{padding-left:15px!important}.grp-item{padding-left:30px!important}.grp-title{padding-bottom:0!important}.grp-title label{margin-bottom:0!important;font-weight:800;text-transform:capitalize}.grp-title:hover{background:none!important}.loading-icon{width:20px;position:absolute;right:10px;top:23px;z-index:1}.nodata-label{width:100%;text-align:center;padding:10px 0 0}.btn-container{text-align:center;padding:5px}.clear-all{width:8px;position:absolute;top:50%;right:30px;transform:translateY(-50%)}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(() => i2.NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(() => i2.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i2.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(() => i2.NgStyle), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i0.forwardRef(() => i3.DefaultValueAccessor), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i0.forwardRef(() => i3.NgControlStatus), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(() => i3.NgModel), selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i0.forwardRef(() => VirtualScrollerComponent), selector: "virtual-scroller,[virtualScroller]", inputs: ["executeRefreshOutsideAngularZone", "enableUnequalChildrenSizes", "useMarginInsteadOfTranslate", "modifyOverflowStyleOfParentScroll", "stripedTable", "scrollbarWidth", "scrollbarHeight", "childWidth", "childHeight", "ssrChildWidth", "ssrChildHeight", "ssrViewportWidth", "ssrViewportHeight", "bufferAmount", "scrollAnimationTime", "resizeBypassRefreshThreshold", "scrollThrottlingTime", "scrollDebounceTime", "checkResizeInterval", "items", "compareItems", "horizontal", "parentScroll"], outputs: ["vsUpdate", "vsChange", "vsStart", "vsEnd"], exportAs: ["virtualScroller"] }, { kind: "directive", type: i0.forwardRef(() => ClickOutsideDirective), selector: "[clickOutside]", inputs: ["enabled"], outputs: ["clickOutside"] }, { kind: "component", type: i0.forwardRef(() => TemplateRenderer), selector: "c-templateRenderer", inputs: ["data", "item"] }, { kind: "component", type: i0.forwardRef(() => CIcon), selector: "c-icon", inputs: ["name"] }], encapsulation: i0.ViewEncapsulation.None });
2541
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AngularMultiSelect, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: ListFilterPipe }, { token: ClickOutsideService }], target: i0.ɵɵFactoryTarget.Component });
2542
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AngularMultiSelect, selector: "angular2-multiselect", inputs: { data: "data", settings: "settings", loading: "loading" }, outputs: { onSelect: "onSelect", onDeSelect: "onDeSelect", onSelectAll: "onSelectAll", onDeSelectAll: "onDeSelectAll", onOpen: "onOpen", onClose: "onClose", onScrollToEnd: "onScrollToEnd", onFilterSelectAll: "onFilterSelectAll", onFilterDeSelectAll: "onFilterDeSelectAll", onAddFilterNewItem: "onAddFilterNewItem", onGroupSelect: "onGroupSelect", onGroupDeSelect: "onGroupDeSelect" }, host: { listeners: { "document:keyup.escape": "onEscapeDown($event)", "window:scroll": "onScroll($event)" }, properties: { "class": "defaultSettings.classes" } }, providers: [DROPDOWN_CONTROL_VALUE_ACCESSOR, DROPDOWN_CONTROL_VALIDATION], queries: [{ propertyName: "itemTempl", first: true, predicate: Item, descendants: true }, { propertyName: "badgeTempl", first: true, predicate: Badge, descendants: true }, { propertyName: "searchTempl", first: true, predicate: Search, descendants: true }], viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "selectedListElem", first: true, predicate: ["selectedList"], descendants: true }, { propertyName: "dropdownListElem", first: true, predicate: ["dropdownList"], descendants: true }, { propertyName: "cuppaDropdown", first: true, predicate: ["cuppaDropdown"], descendants: true }, { propertyName: "virtualScroller", first: true, predicate: VirtualScrollerComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cuppa-dropdown\" #cuppaDropdown>\n <div class=\"selected-list\" #selectedList>\n <div\n class=\"c-btn\"\n (click)=\"toggleDropdown($event)\"\n [ngClass]=\"{ disabled: settings.disabled }\"\n [attr.tabindex]=\"0\"\n >\n <span *ngIf=\"selectedItems?.length == 0\">{{ settings.text }}</span>\n <span *ngIf=\"settings.singleSelection && !badgeTempl\">\n <span\n *ngFor=\"\n let item of selectedItems;\n trackBy: trackByFn.bind(this);\n let k = index\n \"\n >\n {{ item[settings.labelKey] }}\n </span>\n </span>\n <span\n class=\"c-list\"\n *ngIf=\"\n selectedItems?.length > 0 && settings.singleSelection && badgeTempl\n \"\n >\n <div\n class=\"c-token\"\n *ngFor=\"\n let item of selectedItems;\n trackBy: trackByFn.bind(this);\n let k = index\n \"\n >\n <span *ngIf=\"!badgeTempl\" class=\"c-label\">{{\n item[settings.labelKey]\n }}</span>\n\n <span *ngIf=\"badgeTempl\" class=\"c-label\">\n <c-templateRenderer\n [data]=\"badgeTempl\"\n [item]=\"item\"\n ></c-templateRenderer>\n </span>\n <span\n class=\"c-remove\"\n (click)=\"onItemClick(item, k, $event); $event.stopPropagation()\"\n >\n <c-icon name=\"remove\" />\n </span>\n </div>\n </span>\n <div\n class=\"c-list\"\n *ngIf=\"selectedItems?.length > 0 && !settings.singleSelection\"\n >\n <div\n class=\"c-token\"\n *ngFor=\"\n let item of selectedItems;\n trackBy: trackByFn.bind(this);\n let k = index\n \"\n [hidden]=\"k > settings.badgeShowLimit - 1\"\n >\n @if (badgeTempl) {\n <span class=\"c-label\"\n ><c-templateRenderer\n [data]=\"badgeTempl\"\n [item]=\"item\"\n ></c-templateRenderer\n ></span>\n } @else {\n <span class=\"c-label\">{{ item[settings.labelKey] }}</span>\n }\n\n <span\n class=\"c-remove\"\n (click)=\"onItemClick(item, k, $event); $event.stopPropagation()\"\n >\n <c-icon [name]=\"'remove'\"></c-icon>\n </span>\n </div>\n </div>\n <span\n class=\"countplaceholder\"\n *ngIf=\"selectedItems?.length > settings.badgeShowLimit\"\n >+{{ selectedItems?.length - settings.badgeShowLimit }}</span\n >\n <span\n class=\"c-remove clear-all\"\n *ngIf=\"\n settings.clearAll && selectedItems?.length > 0 && !settings.disabled\n \"\n (click)=\"clearSelection($event); $event.stopPropagation()\"\n >\n <c-icon [name]=\"'remove'\"></c-icon>\n </span>\n @if (isActive) {\n <span class=\"c-angle-up\"><c-icon [name]=\"'angle-up'\"></c-icon></span>\n } @else {\n <span class=\"c-angle-down\"\n ><c-icon [name]=\"'angle-down'\"></c-icon\n ></span>\n }\n </div>\n </div>\n <div\n #dropdownList\n class=\"dropdown-list animated fadeIn\"\n [ngClass]=\"{ tagToBody: settings.tagToBody }\"\n [style.width.px]=\"dropDownWidth\"\n [style.top]=\"dropDownTop\"\n [style.bottom]=\"dropDownBottom\"\n [style.left.px]=\"dropDownLeft\"\n [hidden]=\"!isActive\"\n >\n <div\n [ngClass]=\"{\n 'arrow-up': settings.position == 'bottom',\n 'arrow-down': settings.position == 'top',\n }\"\n class=\"arrow-2\"\n ></div>\n <div\n [ngClass]=\"{\n 'arrow-up': settings.position == 'bottom',\n 'arrow-down': settings.position == 'top',\n }\"\n ></div>\n <div\n class=\"list-area\"\n [ngClass]=\"{ 'single-select-mode': settings.singleSelection }\"\n >\n <div\n class=\"pure-checkbox select-all\"\n *ngIf=\"\n settings.enableCheckAll &&\n !settings.singleSelection &&\n !settings.limitSelection &&\n data?.length > 0 &&\n !isDisabledItemPresent\n \"\n >\n <input\n *ngIf=\"settings.showCheckbox\"\n type=\"checkbox\"\n [checked]=\"isSelectAll\"\n [disabled]=\"settings.limitSelection == selectedItems?.length\"\n [id]=\"id\"\n (change)=\"toggleSelectAll($event)\"\n />\n <label [for]=\"id\">\n <span [hidden]=\"isSelectAll\">{{ settings.selectAllText }}</span>\n <span [hidden]=\"!isSelectAll\">{{ settings.unSelectAllText }}</span>\n </label>\n </div>\n <img class=\"loading-icon\" *ngIf=\"loading\" src=\"assets/img/loading.gif\" />\n <div class=\"list-filter\" *ngIf=\"settings.enableSearchFilter\">\n <span class=\"c-search\" id=\"searchIcon\">\n <c-icon [name]=\"'search'\"></c-icon>\n </span>\n @if (settings.lazyLoading) {\n <span\n [hidden]=\"filter == undefined || filter?.length == 0\"\n class=\"c-clear\"\n (click)=\"resetInfiniteSearch()\"\n >\n <c-icon [name]=\"'clear'\"></c-icon>\n </span>\n } @else {\n <span\n [hidden]=\"filter == undefined || filter?.length == 0\"\n class=\"c-clear\"\n (click)=\"clearSearch()\"\n >\n <c-icon [name]=\"'clear'\"></c-icon>\n </span>\n }\n\n @if (searchTempl) {\n <c-templateRenderer [data]=\"searchTempl\" [item]=\"item\" />\n } @else if (settings.groupBy && !settings.lazyLoading) {\n <input\n class=\"c-input\"\n #searchInput\n type=\"text\"\n [placeholder]=\"settings.searchPlaceholderText\"\n [(ngModel)]=\"filter\"\n (keyup)=\"filterGroupedList()\"\n aria-labelledby=\"searchIcon\"\n />\n } @else if (!settings.groupBy && !settings.lazyLoading) {\n <input\n class=\"c-input\"\n #searchInput\n type=\"text\"\n [placeholder]=\"settings.searchPlaceholderText\"\n [(ngModel)]=\"filter\"\n (keyup)=\"filteritems($event)\"\n aria-labelledby=\"searchIcon\"\n />\n } @else if (settings.lazyLoading) {\n <input\n class=\"c-input\"\n #searchInput\n type=\"text\"\n [placeholder]=\"settings.searchPlaceholderText\"\n [(ngModel)]=\"filter\"\n (keyup)=\"onKeyUp($event)\"\n aria-labelledby=\"searchIcon\"\n />\n }\n </div>\n <div\n class=\"filter-select-all\"\n *ngIf=\"\n !settings.lazyLoading &&\n settings.enableFilterSelectAll &&\n !isDisabledItemPresent\n \"\n >\n <div\n class=\"pure-checkbox select-all\"\n *ngIf=\"\n !settings.groupBy &&\n filter?.length > 0 &&\n filterLength > 0 &&\n !settings.singleSelection\n \"\n (click)=\"toggleFilterSelectAll()\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isFilterSelectAll\"\n [disabled]=\"settings.limitSelection == selectedItems?.length\"\n aria-labelledby=\"optionName\"\n aria-label=\"option\"\n />\n <label>\n <span [hidden]=\"isFilterSelectAll\">{{\n settings.filterSelectAllText\n }}</span>\n <span [hidden]=\"!isFilterSelectAll\">{{\n settings.filterUnSelectAllText\n }}</span>\n </label>\n </div>\n <div\n class=\"pure-checkbox select-all\"\n *ngIf=\"\n settings.groupBy &&\n filter?.length > 0 &&\n groupedData?.length > 0 &&\n !settings.singleSelection\n \"\n (click)=\"toggleFilterSelectAll()\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isFilterSelectAll && filter?.length > 0\"\n [disabled]=\"settings.limitSelection == selectedItems?.length\"\n aria-labelledby=\"option\"\n />\n <label>\n <span [hidden]=\"isFilterSelectAll\">{{\n settings.filterSelectAllText\n }}</span>\n <span [hidden]=\"!isFilterSelectAll\">{{\n settings.filterUnSelectAllText\n }}</span>\n </label>\n </div>\n </div>\n <div\n class=\"filter-select-all\"\n *ngIf=\"\n settings.lazyLoading &&\n settings.enableFilterSelectAll &&\n !isDisabledItemPresent &&\n !settings.singleSelection\n \"\n >\n <div\n class=\"pure-checkbox select-all\"\n *ngIf=\"filter?.length > 0 && infiniteFilterLength > 0\"\n (click)=\"toggleInfiniteFilterSelectAll()\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isInfiniteFilterSelectAll\"\n [disabled]=\"settings.limitSelection == selectedItems?.length\"\n aria-labelledby=\"option\"\n />\n <label>\n <span [hidden]=\"isInfiniteFilterSelectAll\">{{\n settings.filterSelectAllText\n }}</span>\n <span [hidden]=\"!isInfiniteFilterSelectAll\">{{\n settings.filterUnSelectAllText\n }}</span>\n </label>\n </div>\n </div>\n <div class=\"filter-select-all\" *ngIf=\"filter?.length\">\n <div class=\"btn-container\" *ngIf=\"settings.addNewItemOnFilter\">\n <button class=\"c-btn btn-iceblue\" (click)=\"addFilterNewItem()\">\n {{ settings.addNewButtonText }}\n </button>\n </div>\n </div>\n\n @if (\n !settings.groupBy && !settings.lazyLoading && itemTempl == undefined\n ) {\n <div\n [style.maxHeight]=\"settings.maxHeight + 'px'\"\n style=\"overflow: auto\"\n >\n <ul class=\"lazyContainer\">\n <li\n *ngFor=\"let item of data; let i = index\"\n (click)=\"onItemClick(item, i, $event)\"\n class=\"pure-checkbox\"\n [ngClass]=\"{ 'selected-item': isSelected(item) == true }\"\n >\n <input\n *ngIf=\"settings.showCheckbox\"\n type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n aria-labelledby=\"option\"\n />\n <label>{{ item[settings.labelKey] }}</label>\n </li>\n </ul>\n </div>\n } @else if (\n !settings.groupBy && settings.lazyLoading && itemTempl == undefined\n ) {\n <!-- lazy loading -->\n <div\n [style.maxHeight]=\"settings.maxHeight + 'px'\"\n style=\"overflow: auto\"\n >\n <ul\n virtualScroller\n #scroll\n [enableUnequalChildrenSizes]=\"randomSize\"\n [items]=\"virtualdata\"\n (vsStart)=\"onScrollEnd($event)\"\n (vsEnd)=\"onScrollEnd($event)\"\n [ngStyle]=\"{ height: settings.maxHeight + 'px' }\"\n class=\"lazyContainer\"\n >\n <li\n *ngFor=\"let item of scroll.viewPortItems; let i = index\"\n (click)=\"onItemClick(item, i, $event)\"\n class=\"pure-checkbox\"\n [ngClass]=\"{ 'selected-item': isSelected(item) == true }\"\n >\n <input\n *ngIf=\"settings.showCheckbox\"\n type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n />\n <label>{{ item[settings.labelKey] }}</label>\n </li>\n </ul>\n </div>\n } @else if (\n !settings.groupBy && !settings.lazyLoading && itemTempl != undefined\n ) {\n <!-- custom template -->\n <div\n [style.maxHeight]=\"settings.maxHeight + 'px'\"\n style=\"overflow: auto\"\n >\n <ul class=\"lazyContainer\">\n <li\n *ngFor=\"let item of data; let i = index\"\n (click)=\"onItemClick(item, i, $event)\"\n class=\"pure-checkbox\"\n [ngClass]=\"{ 'selected-item': isSelected(item) == true }\"\n >\n <input\n *ngIf=\"settings.showCheckbox\"\n type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n />\n <label></label>\n <c-templateRenderer\n [data]=\"itemTempl\"\n [item]=\"item\"\n ></c-templateRenderer>\n </li>\n </ul>\n </div>\n } @else if (\n !settings.groupBy && settings.lazyLoading && itemTempl != undefined\n ) {\n <!-- lazy loading and custom template -->\n <div\n [style.maxHeight]=\"settings.maxHeight + 'px'\"\n style=\"overflow: auto\"\n >\n <ul\n virtualScroller\n #scroll2\n [enableUnequalChildrenSizes]=\"randomSize\"\n [items]=\"virtualdata\"\n (vsStart)=\"onScrollEnd($event)\"\n (vsEnd)=\"onScrollEnd($event)\"\n class=\"lazyContainer\"\n [ngStyle]=\"{ height: settings.maxHeight + 'px' }\"\n >\n <li\n *ngFor=\"let item of scroll2.viewPortItems; let i = index\"\n (click)=\"onItemClick(item, i, $event)\"\n class=\"pure-checkbox\"\n [ngClass]=\"{ 'selected-item': isSelected(item) == true }\"\n >\n <input\n *ngIf=\"settings.showCheckbox\"\n type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n />\n <label></label>\n <c-templateRenderer\n [data]=\"itemTempl\"\n [item]=\"item\"\n ></c-templateRenderer>\n </li>\n </ul>\n </div>\n } @else if (\n settings.groupBy && settings.lazyLoading && itemTempl != undefined\n ) {\n <!-- lazy loading, group By and custom template -->\n <div\n [style.maxHeight]=\"settings.maxHeight + 'px'\"\n style=\"overflow: auto\"\n >\n <ul\n virtualScroller\n #scroll3\n [enableUnequalChildrenSizes]=\"randomSize\"\n [items]=\"virtualdata\"\n (vsStart)=\"onScrollEnd($event)\"\n (vsEnd)=\"onScrollEnd($event)\"\n [ngStyle]=\"{ height: settings.maxHeight + 'px' }\"\n class=\"lazyContainer\"\n >\n <span *ngFor=\"let item of scroll3.viewPortItems; let i = index\">\n <li\n (click)=\"onItemClick(item, i, $event)\"\n *ngIf=\"!item.grpTitle\"\n [ngClass]=\"{\n 'grp-title': item.grpTitle,\n 'grp-item': !item.grpTitle && !settings.singleSelection,\n }\"\n class=\"pure-checkbox\"\n >\n <input\n *ngIf=\"settings.showCheckbox && !settings.singleSelection\"\n type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n />\n <label></label>\n <c-templateRenderer\n [data]=\"itemTempl\"\n [item]=\"item\"\n ></c-templateRenderer>\n </li>\n <li\n *ngIf=\"item.grpTitle\"\n [ngClass]=\"{\n 'grp-title': item.grpTitle,\n 'grp-item': !item.grpTitle && !settings.singleSelection,\n }\"\n class=\"pure-checkbox\"\n >\n <input\n *ngIf=\"settings.showCheckbox\"\n type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n />\n <label></label>\n <c-templateRenderer\n [data]=\"itemTempl\"\n [item]=\"item\"\n ></c-templateRenderer>\n </li>\n </span>\n </ul>\n </div>\n } @else if (\n settings.groupBy && !settings.lazyLoading && itemTempl != undefined\n ) {\n <!-- group By and custom template -->\n <div\n [style.maxHeight]=\"settings.maxHeight + 'px'\"\n style=\"overflow: auto\"\n >\n <ul class=\"lazyContainer\">\n <span *ngFor=\"let item of groupedData; let i = index\">\n <li\n (click)=\"selectGroup(item)\"\n [ngClass]=\"{\n 'grp-title': item.grpTitle,\n 'grp-item': !item.grpTitle && !settings.singleSelection,\n }\"\n class=\"pure-checkbox\"\n >\n <input\n *ngIf=\"settings.showCheckbox && !settings.singleSelection\"\n type=\"checkbox\"\n [checked]=\"item.selected\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n />\n <label>{{ item[settings.labelKey] }}</label>\n <ul class=\"lazyContainer\">\n <span *ngFor=\"let val of item.list; let j = index\">\n <li\n (click)=\"\n onItemClick(val, j, $event); $event.stopPropagation()\n \"\n [ngClass]=\"{\n 'grp-title': val.grpTitle,\n 'grp-item': !val.grpTitle && !settings.singleSelection,\n }\"\n class=\"pure-checkbox\"\n >\n <input\n *ngIf=\"settings.showCheckbox\"\n type=\"checkbox\"\n [checked]=\"isSelected(val)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(val)) ||\n val.disabled\n \"\n />\n <label></label>\n <c-templateRenderer\n [data]=\"itemTempl\"\n [item]=\"val\"\n ></c-templateRenderer>\n </li>\n </span>\n </ul>\n </li>\n </span>\n </ul>\n </div>\n } @else if (\n settings.groupBy && settings.lazyLoading && itemTempl == undefined\n ) {\n <!-- lazy loading, group By -->\n <div\n [style.maxHeight]=\"settings.maxHeight + 'px'\"\n style=\"overflow: auto\"\n >\n <virtual-scroller\n [items]=\"groupedData\"\n (vsUpdate)=\"viewPortItems = $event\"\n (vsEnd)=\"onScrollEnd($event)\"\n [ngStyle]=\"{ height: settings.maxHeight + 'px' }\"\n >\n <ul\n virtualScroller\n #scroll4\n [enableUnequalChildrenSizes]=\"randomSize\"\n [items]=\"virtualdata\"\n (vsStart)=\"onScrollEnd($event)\"\n (vsEnd)=\"onScrollEnd($event)\"\n [ngStyle]=\"{ height: settings.maxHeight + 'px' }\"\n class=\"lazyContainer\"\n >\n <span *ngFor=\"let item of scroll4.viewPortItems; let i = index\">\n <li\n *ngIf=\"item.grpTitle\"\n [ngClass]=\"{\n 'grp-title': item.grpTitle,\n 'grp-item': !item.grpTitle && !settings.singleSelection,\n 'selected-item': isSelected(item) == true,\n }\"\n class=\"pure-checkbox\"\n >\n <input\n *ngIf=\"\n settings.showCheckbox &&\n !item.grpTitle &&\n !settings.singleSelection\n \"\n type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n />\n <label>{{ item[settings.labelKey] }}</label>\n </li>\n <li\n (click)=\"onItemClick(item, i, $event)\"\n *ngIf=\"!item.grpTitle\"\n [ngClass]=\"{\n 'grp-title': item.grpTitle,\n 'grp-item': !item.grpTitle && !settings.singleSelection,\n 'selected-item': isSelected(item) == true,\n }\"\n class=\"pure-checkbox\"\n >\n <input\n *ngIf=\"settings.showCheckbox && !item.grpTitle\"\n type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n />\n <label>{{ item[settings.labelKey] }}</label>\n </li>\n </span>\n </ul>\n </virtual-scroller>\n </div>\n } @else if (\n settings.groupBy && !settings.lazyLoading && itemTempl == undefined\n ) {\n <!-- group By -->\n <div\n [style.maxHeight]=\"settings.maxHeight + 'px'\"\n style=\"overflow: auto\"\n >\n <ul class=\"lazyContainer\">\n <span *ngFor=\"let item of groupedData; let i = index\">\n <li\n (click)=\"selectGroup(item)\"\n [ngClass]=\"{\n 'grp-title': item.grpTitle,\n 'grp-item': !item.grpTitle && !settings.singleSelection,\n }\"\n class=\"pure-checkbox\"\n >\n <input\n *ngIf=\"settings.showCheckbox && !settings.singleSelection\"\n type=\"checkbox\"\n [checked]=\"item.selected\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n />\n <label>{{ item[settings.labelKey] }}</label>\n <ul class=\"lazyContainer\">\n <span *ngFor=\"let val of item.list; let j = index\">\n <li\n (click)=\"\n onItemClick(val, j, $event); $event.stopPropagation()\n \"\n [ngClass]=\"{\n 'selected-item': isSelected(val) == true,\n 'grp-title': val.grpTitle,\n 'grp-item': !val.grpTitle && !settings.singleSelection,\n }\"\n class=\"pure-checkbox\"\n >\n <input\n *ngIf=\"settings.showCheckbox\"\n type=\"checkbox\"\n [checked]=\"isSelected(val)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(val)) ||\n val.disabled\n \"\n />\n <label>{{ val[settings.labelKey] }}</label>\n </li>\n </span>\n </ul>\n </li>\n </span>\n </ul>\n </div>\n }\n\n @if (data?.length == 0) {\n <h5 class=\"list-message\">\n {{ settings.noDataLabel }}\n </h5>\n }\n </div>\n </div>\n</div>\n", styles: ["virtual-scroll{display:block;width:100%}.cuppa-dropdown{position:relative}.c-btn{display:inline-block;border-width:1px;line-height:1.25;border-radius:3px;font-size:.85rem;padding:5px 10px;cursor:pointer;align-items:center;min-height:38px}.c-btn.disabled{background:#ccc}.selected-list .c-list{float:left;padding:0;margin:0;width:calc(100% - 20px)}.selected-list .c-list .c-token{list-style:none;padding:4px 22px 4px 8px;border-radius:2px;margin-right:4px;margin-top:2px;float:left;position:relative}.selected-list .c-list .c-token .c-label{display:block;float:left}.selected-list .c-list .c-token .c-remove{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:8px}.selected-list .c-list .c-token .c-remove svg{fill:#fff}.selected-list .fa-angle-down,.selected-list .fa-angle-up{font-size:15pt;position:absolute;right:10px;top:50%;transform:translateY(-50%)}.selected-list .c-angle-down,.selected-list .c-angle-up{width:12px;height:12px;position:absolute;right:10px;top:50%;transform:translateY(-50%);pointer-events:none}.selected-list .c-angle-down svg,.selected-list .c-angle-up svg{fill:#333}.selected-list .countplaceholder{position:absolute;right:45px;top:50%;transform:translateY(-50%)}.selected-list .c-btn{width:100%;padding:5px 10px;cursor:pointer;display:flex;position:relative}.selected-list .c-btn .c-icon{position:absolute;right:5px;top:50%;transform:translateY(-50%)}.dropdown-list.tagToBody{position:fixed}.dropdown-list{position:absolute;padding-top:14px;width:100%;z-index:99999}.dropdown-list ul{padding:0;list-style:none;overflow:auto;margin:0}.dropdown-list ul li{padding:10px;cursor:pointer;text-align:left}.dropdown-list ul li:first-child{padding-top:10px}.dropdown-list ul li:last-child{padding-bottom:10px}.dropdown-list ::-webkit-scrollbar{width:8px}.dropdown-list ::-webkit-scrollbar-thumb{background:#ccc;border-radius:5px}.dropdown-list ::-webkit-scrollbar-track{background:#f2f2f2}.arrow-up,.arrow-down{width:0;height:0;border-left:13px solid transparent;border-right:13px solid transparent;border-bottom:15px solid #fff;margin-left:15px;position:absolute;top:0}.arrow-down{bottom:-14px;top:unset;transform:rotate(180deg)}.arrow-2{border-bottom:15px solid #ccc;top:-1px}.arrow-down.arrow-2{top:unset;bottom:-16px}.list-area{border:1px solid #ccc;border-radius:3px;background:#fff;margin:0}.select-all{padding:10px;border-bottom:1px solid #ccc;text-align:left}.list-filter{border-bottom:1px solid #ccc;position:relative;padding-left:35px;height:35px}.list-filter input{border:0px;width:100%;height:100%;padding:0}.list-filter input:focus{outline:none}.list-filter .c-search{position:absolute;top:4px;left:10px;width:15px;height:15px}.list-filter .c-search svg{fill:#888}.list-filter .c-clear{position:absolute;top:4px;right:10px;width:15px;height:15px}.list-filter .c-clear svg{fill:#888}.pure-checkbox input[type=checkbox]{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.pure-checkbox input[type=checkbox]:focus+label:before,.pure-checkbox input[type=checkbox]:hover+label:before{background-color:none}.pure-checkbox input[type=checkbox]:active+label:before{transition-duration:0s}.pure-checkbox input[type=checkbox]:disabled+label{color:#ccc}.pure-checkbox input[type=checkbox]+label{position:relative;padding-left:2em;vertical-align:middle;-webkit-user-select:none;user-select:none;cursor:pointer;margin:0;font-weight:300}.pure-checkbox input[type=checkbox]+label:before{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:0;width:15px;height:15px;margin-top:-9px;text-align:center;transition:all .4s ease;border-radius:3px}.pure-checkbox input[type=checkbox]+label:after{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:0;width:15px;height:15px;margin-top:-9px;transform:scale(0);transform-origin:50%;transition:transform .2s ease-out}.pure-checkbox input[type=checkbox]:disabled+label:before{border-color:#ccc}.pure-checkbox input[type=checkbox]:disabled:focus+label:before .pure-checkbox input[type=checkbox]:disabled:hover+label:before{background-color:inherit}.pure-checkbox input[type=checkbox]:disabled:checked+label:before{background-color:#ccc}.pure-checkbox input[type=checkbox]+label:after{background-color:transparent;top:50%;left:3px;width:9px;height:4px;margin-top:-5px;border-style:solid;border-width:0 0 2px 2px;border-image:none;transform:rotate(-45deg) scale(0)}.pure-checkbox input[type=checkbox]:checked+label:after{content:\"\";transform:rotate(-45deg) scale(1);transition:transform .2s ease-out}.pure-checkbox input[type=radio]:checked+label:before{background-color:#fff}.pure-checkbox input[type=radio]:checked+label:after{transform:scale(1)}.pure-checkbox input[type=radio]+label:before{border-radius:50%}.pure-checkbox input[type=checkbox]:checked+label:after{transform:rotate(-45deg) scale(1)}.list-message{text-align:center;margin:0;padding:15px 0;font-size:initial}.list-grp{padding:0 15px!important}.list-grp h4{text-transform:capitalize;margin:15px 0 0;font-size:14px;font-weight:700}.list-grp>li{padding-left:15px!important}.grp-item{padding-left:30px!important}.grp-title{padding-bottom:0!important}.grp-title label{margin-bottom:0!important;font-weight:800;text-transform:capitalize}.grp-title:hover{background:none!important}.loading-icon{width:20px;position:absolute;right:10px;top:23px;z-index:1}.nodata-label{width:100%;text-align:center;padding:10px 0 0}.btn-container{text-align:center;padding:5px}.clear-all{width:8px;position:absolute;top:50%;right:30px;transform:translateY(-50%)}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(() => i3.NgClass), selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i0.forwardRef(() => i3.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i3.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i0.forwardRef(() => i3.NgStyle), selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i0.forwardRef(() => i4.DefaultValueAccessor), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i0.forwardRef(() => i4.NgControlStatus), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(() => i4.NgModel), selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i0.forwardRef(() => VirtualScrollerComponent), selector: "virtual-scroller,[virtualScroller]", inputs: ["executeRefreshOutsideAngularZone", "enableUnequalChildrenSizes", "useMarginInsteadOfTranslate", "modifyOverflowStyleOfParentScroll", "stripedTable", "scrollbarWidth", "scrollbarHeight", "childWidth", "childHeight", "ssrChildWidth", "ssrChildHeight", "ssrViewportWidth", "ssrViewportHeight", "bufferAmount", "scrollAnimationTime", "resizeBypassRefreshThreshold", "scrollThrottlingTime", "scrollDebounceTime", "checkResizeInterval", "items", "compareItems", "horizontal", "parentScroll"], outputs: ["vsUpdate", "vsChange", "vsStart", "vsEnd"], exportAs: ["virtualScroller"] }, { kind: "component", type: i0.forwardRef(() => TemplateRenderer), selector: "c-templateRenderer", inputs: ["data", "item"] }, { kind: "component", type: i0.forwardRef(() => CIcon), selector: "c-icon", inputs: ["name"] }], encapsulation: i0.ViewEncapsulation.None });
2558
2543
  }
2559
2544
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AngularMultiSelect, decorators: [{
2560
2545
  type: Component,
2561
- args: [{ selector: 'angular2-multiselect', host: { '[class]': 'defaultSettings.classes' }, providers: [DROPDOWN_CONTROL_VALUE_ACCESSOR, DROPDOWN_CONTROL_VALIDATION], encapsulation: ViewEncapsulation.None, template: "<div class=\"cuppa-dropdown\" (clickOutside)=\"closeDropdownOnClickOut()\" [enabled]=\"isActive\" #cuppaDropdown>\n <div class=\"selected-list\" #selectedList>\n <div class=\"c-btn\" (click)=\"toggleDropdown($event)\" [ngClass]=\"{'disabled': settings.disabled}\" [attr.tabindex]=\"0\">\n\n <span *ngIf=\"selectedItems?.length == 0\">{{ settings.text }}</span>\n <span *ngIf=\"settings.singleSelection && !badgeTempl\">\n <span *ngFor=\"let item of selectedItems;trackBy: trackByFn.bind(this);let k = index\">\n {{ item[settings.labelKey] }}\n </span>\n </span>\n <span class=\"c-list\" *ngIf=\"selectedItems?.length > 0 && settings.singleSelection && badgeTempl \">\n <div class=\"c-token\" *ngFor=\"let item of selectedItems;trackBy: trackByFn.bind(this);let k = index\">\n <span *ngIf=\"!badgeTempl\" class=\"c-label\">{{ item[settings.labelKey] }}</span>\n\n <span *ngIf=\"badgeTempl\" class=\"c-label\">\n <c-templateRenderer [data]=\"badgeTempl\" [item]=\"item\"></c-templateRenderer>\n </span>\n <span class=\"c-remove\" (click)=\"onItemClick(item,k,$event);$event.stopPropagation()\">\n <c-icon name=\"remove\"/>\n </span>\n </div>\n </span>\n <div class=\"c-list\" *ngIf=\"selectedItems?.length > 0 && !settings.singleSelection\">\n <div class=\"c-token\" *ngFor=\"let item of selectedItems;trackBy: trackByFn.bind(this);let k = index\"\n [hidden]=\"k > settings.badgeShowLimit-1\">\n\n @if (badgeTempl) {\n <span class=\"c-label\"><c-templateRenderer [data]=\"badgeTempl\" [item]=\"item\"></c-templateRenderer></span>\n } @else {\n <span class=\"c-label\">{{ item[settings.labelKey] }}</span>\n\n }\n\n <span class=\"c-remove\" (click)=\"onItemClick(item,k,$event);$event.stopPropagation()\">\n <c-icon [name]=\"'remove'\"></c-icon>\n </span>\n </div>\n </div>\n <span class=\"countplaceholder\"\n *ngIf=\"selectedItems?.length > settings.badgeShowLimit\">+{{ selectedItems?.length - settings.badgeShowLimit }}</span>\n <span class=\"c-remove clear-all\" *ngIf=\"settings.clearAll && selectedItems?.length > 0 && !settings.disabled\"\n (click)=\"clearSelection($event);$event.stopPropagation()\">\n <c-icon [name]=\"'remove'\"></c-icon>\n </span>\n @if (isActive) {\n <span class=\"c-angle-up\"><c-icon [name]=\"'angle-up'\"></c-icon></span>\n } @else {\n <span class=\"c-angle-down\"><c-icon [name]=\"'angle-down'\"></c-icon></span>\n }\n </div>\n </div>\n <div #dropdownList class=\"dropdown-list animated fadeIn\"\n [ngClass]=\"{'tagToBody': settings.tagToBody}\"\n [style.width.px]=\"dropDownWidth\"\n [style.top]=\"dropDownTop\"\n [style.bottom]=\"dropDownBottom\"\n [style.left.px]=\"dropDownLeft\"\n [hidden]=\"!isActive\">\n <div [ngClass]=\"{'arrow-up': settings.position == 'bottom', 'arrow-down': settings.position == 'top'}\"\n class=\"arrow-2\"></div>\n <div [ngClass]=\"{'arrow-up': settings.position == 'bottom', 'arrow-down': settings.position == 'top'}\"></div>\n <div class=\"list-area\" [ngClass]=\"{'single-select-mode': settings.singleSelection }\">\n <div class=\"pure-checkbox select-all\"\n *ngIf=\"settings.enableCheckAll && !settings.singleSelection && !settings.limitSelection && data?.length > 0 && !isDisabledItemPresent\"\n >\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelectAll\"\n [disabled]=\"settings.limitSelection == selectedItems?.length\"\n [id]=\"id\" (change)=\"toggleSelectAll($event)\"/>\n <label [for]=\"id\">\n <span [hidden]=\"isSelectAll\">{{ settings.selectAllText }}</span>\n <span [hidden]=\"!isSelectAll\">{{ settings.unSelectAllText }}</span>\n </label>\n </div>\n <img class=\"loading-icon\" *ngIf=\"loading\" src=\"assets/img/loading.gif\"/>\n <div class=\"list-filter\" *ngIf=\"settings.enableSearchFilter\">\n <span class=\"c-search\" id=\"searchIcon\">\n <c-icon [name]=\"'search'\"></c-icon>\n </span>\n <span *ngIf=\"!settings.lazyLoading\" [hidden]=\"filter == undefined || filter?.length == 0\" class=\"c-clear\"\n (click)=\"clearSearch()\">\n <c-icon [name]=\"'clear'\"></c-icon>\n </span>\n <span *ngIf=\"settings.lazyLoading\" [hidden]=\"filter == undefined || filter?.length == 0\" class=\"c-clear\"\n (click)=\"resetInfiniteSearch()\">\n <c-icon [name]=\"'clear'\"></c-icon>\n </span>\n\n <input class=\"c-input\" *ngIf=\"settings.groupBy && !settings.lazyLoading && !searchTempl\" #searchInput\n type=\"text\" [placeholder]=\"settings.searchPlaceholderText\"\n [(ngModel)]=\"filter\" (keyup)=\"filterGroupedList()\" aria-labelledby=\"searchIcon\">\n <input class=\"c-input\" *ngIf=\"!settings.groupBy && !settings.lazyLoading && !searchTempl\" #searchInput\n type=\"text\" [placeholder]=\"settings.searchPlaceholderText\"\n [(ngModel)]=\"filter\" (keyup)=\"filteritems($event)\" aria-labelledby=\"searchIcon\">\n <input class=\"c-input\" *ngIf=\"settings.lazyLoading && !searchTempl\" #searchInput type=\"text\"\n [placeholder]=\"settings.searchPlaceholderText\"\n [(ngModel)]=\"filter\" (keyup)=\"onKeyUp($event)\" aria-labelledby=\"searchIcon\">\n <!-- <input class=\"c-input\" *ngIf=\"!settings.lazyLoading && !searchTempl && settings.groupBy\" #searchInput type=\"text\" [placeholder]=\"settings.searchPlaceholderText\"\n [(ngModel)]=\"filter\" (keyup)=\"filterGroupList($event)\">-->\n <c-templateRenderer *ngIf=\"searchTempl\" [data]=\"searchTempl\" [item]=\"item\"></c-templateRenderer>\n </div>\n <div class=\"filter-select-all\"\n *ngIf=\"!settings.lazyLoading && settings.enableFilterSelectAll && !isDisabledItemPresent\">\n <div class=\"pure-checkbox select-all\"\n *ngIf=\"!settings.groupBy && filter?.length > 0 && filterLength > 0 && !settings.singleSelection\"\n (click)=\"toggleFilterSelectAll()\">\n <input type=\"checkbox\" [checked]=\"isFilterSelectAll\"\n [disabled]=\"settings.limitSelection == selectedItems?.length\" aria-labelledby=\"optionName\"\n aria-label=\"option\"/>\n <label>\n <span [hidden]=\"isFilterSelectAll\">{{ settings.filterSelectAllText }}</span>\n <span [hidden]=\"!isFilterSelectAll\">{{ settings.filterUnSelectAllText }}</span>\n </label>\n </div>\n <div class=\"pure-checkbox select-all\"\n *ngIf=\"settings.groupBy && filter?.length > 0 && groupedData?.length > 0 && !settings.singleSelection\"\n (click)=\"toggleFilterSelectAll()\">\n <input type=\"checkbox\" [checked]=\"isFilterSelectAll && filter?.length > 0\"\n [disabled]=\"settings.limitSelection == selectedItems?.length\"\n aria-labelledby=\"option\"/>\n <label>\n <span [hidden]=\"isFilterSelectAll\">{{ settings.filterSelectAllText }}</span>\n <span [hidden]=\"!isFilterSelectAll\">{{ settings.filterUnSelectAllText }}</span>\n </label>\n </div>\n </div>\n <div class=\"filter-select-all\"\n *ngIf=\"settings.lazyLoading && settings.enableFilterSelectAll && !isDisabledItemPresent && !settings.singleSelection\">\n <div class=\"pure-checkbox select-all\" *ngIf=\"filter?.length > 0 && infiniteFilterLength > 0\"\n (click)=\"toggleInfiniteFilterSelectAll()\">\n <input type=\"checkbox\" [checked]=\"isInfiniteFilterSelectAll\"\n [disabled]=\"settings.limitSelection == selectedItems?.length\"\n aria-labelledby=\"option\"/>\n <label>\n <span [hidden]=\"isInfiniteFilterSelectAll\">{{ settings.filterSelectAllText }}</span>\n <span [hidden]=\"!isInfiniteFilterSelectAll\">{{ settings.filterUnSelectAllText }}</span>\n </label>\n </div>\n </div>\n <div class=\"filter-select-all\" *ngIf=\"filter?.length\">\n <div class=\"btn-container\" *ngIf=\"settings.addNewItemOnFilter\">\n <button class=\"c-btn btn-iceblue\" (click)=\"addFilterNewItem()\">{{ settings.addNewButtonText }}</button>\n </div>\n </div>\n\n <div *ngIf=\"!settings.groupBy && !settings.lazyLoading && itemTempl == undefined\"\n [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul class=\"lazyContainer\">\n <li *ngFor=\"let item of data; let i = index;\" (click)=\"onItemClick(item,i,$event)\"\n class=\"pure-checkbox\" [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n aria-labelledby=\"option\"/>\n <label>{{ item[settings.labelKey] }}</label>\n </li>\n </ul>\n </div>\n <!-- lazy loading -->\n <div *ngIf=\"!settings.groupBy && settings.lazyLoading && itemTempl == undefined\"\n [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul virtualScroller #scroll [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\"\n (vsStart)=\"onScrollEnd($event)\"\n (vsEnd)=\"onScrollEnd($event)\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\" class=\"lazyContainer\">\n <li *ngFor=\"let item of scroll.viewPortItems; let i = index;\" (click)=\"onItemClick(item,i,$event)\"\n class=\"pure-checkbox\"\n [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n />\n <label>{{ item[settings.labelKey] }}</label>\n </li>\n </ul>\n </div>\n <!-- custom template -->\n <div *ngIf=\"!settings.groupBy && !settings.lazyLoading && itemTempl != undefined\"\n [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul class=\"lazyContainer\">\n <li *ngFor=\"let item of data; let i = index;\" (click)=\"onItemClick(item,i,$event)\"\n class=\"pure-checkbox\" [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n />\n <label></label>\n <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n </li>\n </ul>\n </div>\n <!-- lazy loading and custom template -->\n <div *ngIf=\"!settings.groupBy && settings.lazyLoading && itemTempl != undefined\"\n [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul virtualScroller #scroll2 [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\"\n (vsStart)=\"onScrollEnd($event)\"\n (vsEnd)=\"onScrollEnd($event)\" class=\"lazyContainer\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\">\n <li *ngFor=\"let item of scroll2.viewPortItems; let i = index;\" (click)=\"onItemClick(item,i,$event)\"\n class=\"pure-checkbox\"\n [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n />\n <label></label>\n <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n </li>\n </ul>\n </div>\n <!-- lazy loading, group By and custom template -->\n <div *ngIf=\"settings.groupBy && settings.lazyLoading && itemTempl != undefined\"\n [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul virtualScroller #scroll3 [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\"\n (vsStart)=\"onScrollEnd($event)\"\n (vsEnd)=\"onScrollEnd($event)\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\" class=\"lazyContainer\">\n <span *ngFor=\"let item of scroll3.viewPortItems; let i = index;\">\n <li (click)=\"onItemClick(item,i,$event)\" *ngIf=\"!item.grpTitle\"\n [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && !settings.singleSelection\" type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n />\n <label></label>\n <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n </li>\n <li *ngIf=\"item.grpTitle\"\n [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n />\n <label></label>\n <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n </li>\n </span>\n </ul>\n </div>\n <!-- group By and custom template -->\n <div *ngIf=\"settings.groupBy && !settings.lazyLoading && itemTempl != undefined\"\n [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul class=\"lazyContainer\">\n <span *ngFor=\"let item of groupedData; let i = index;\">\n <li (click)=\"selectGroup(item)\"\n [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && !settings.singleSelection\" type=\"checkbox\"\n [checked]=\"item.selected\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n />\n <label>{{ item[settings.labelKey] }}</label>\n <ul class=\"lazyContainer\">\n <span *ngFor=\"let val of item.list ; let j = index;\">\n <li (click)=\"onItemClick(val,j,$event); $event.stopPropagation()\"\n [ngClass]=\"{'grp-title': val.grpTitle,'grp-item': !val.grpTitle && !settings.singleSelection}\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(val)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(val)) || val.disabled\"\n />\n <label></label>\n <c-templateRenderer [data]=\"itemTempl\" [item]=\"val\"></c-templateRenderer>\n </li>\n </span>\n </ul>\n\n </li>\n </span>\n </ul>\n </div>\n <!-- lazy loading, group By -->\n <div *ngIf=\"settings.groupBy && settings.lazyLoading && itemTempl == undefined\"\n [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <virtual-scroller [items]=\"groupedData\" (vsUpdate)=\"viewPortItems = $event\" (vsEnd)=\"onScrollEnd($event)\"\n [ngStyle]=\"{'height': settings.maxHeight+'px'}\">\n <ul virtualScroller #scroll4 [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\"\n (vsStart)=\"onScrollEnd($event)\"\n (vsEnd)=\"onScrollEnd($event)\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\" class=\"lazyContainer\">\n <span *ngFor=\"let item of scroll4.viewPortItems; let i = index;\">\n <li *ngIf=\"item.grpTitle\"\n [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection, 'selected-item': isSelected(item) == true }\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && !item.grpTitle && !settings.singleSelection\"\n type=\"checkbox\" [checked]=\"isSelected(item)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n />\n <label>{{ item[settings.labelKey] }}</label>\n </li>\n <li (click)=\"onItemClick(item,i,$event)\" *ngIf=\"!item.grpTitle\"\n [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection, 'selected-item': isSelected(item) == true }\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && !item.grpTitle\" type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n />\n <label>{{ item[settings.labelKey] }}</label>\n </li>\n </span>\n </ul>\n </virtual-scroller>\n </div>\n <!-- group By -->\n <div *ngIf=\"settings.groupBy && !settings.lazyLoading && itemTempl == undefined\"\n [style.maxHeight]=\"settings.maxHeight+'px'\"\n style=\"overflow: auto;\">\n <ul class=\"lazyContainer\">\n <span *ngFor=\"let item of groupedData ; let i = index;\">\n <li (click)=\"selectGroup(item)\"\n [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox && !settings.singleSelection\" type=\"checkbox\"\n [checked]=\"item.selected\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n />\n <label>{{ item[settings.labelKey] }}</label>\n <ul class=\"lazyContainer\">\n <span *ngFor=\"let val of item.list ; let j = index;\">\n <li (click)=\"onItemClick(val,j,$event); $event.stopPropagation()\"\n [ngClass]=\"{'selected-item': isSelected(val) == true,'grp-title': val.grpTitle,'grp-item': !val.grpTitle && !settings.singleSelection}\"\n class=\"pure-checkbox\">\n <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(val)\"\n [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(val)) || val.disabled\"\n />\n <label>{{ val[settings.labelKey] }}</label>\n </li>\n </span>\n </ul>\n </li>\n </span>\n </ul>\n </div>\n <h5 class=\"list-message\" *ngIf=\"data?.length == 0\">{{ settings.noDataLabel }}</h5>\n </div>\n </div>\n</div>\n", styles: ["virtual-scroll{display:block;width:100%}.cuppa-dropdown{position:relative}.c-btn{display:inline-block;border-width:1px;line-height:1.25;border-radius:3px;font-size:.85rem;padding:5px 10px;cursor:pointer;align-items:center;min-height:38px}.c-btn.disabled{background:#ccc}.selected-list .c-list{float:left;padding:0;margin:0;width:calc(100% - 20px)}.selected-list .c-list .c-token{list-style:none;padding:4px 22px 4px 8px;border-radius:2px;margin-right:4px;margin-top:2px;float:left;position:relative}.selected-list .c-list .c-token .c-label{display:block;float:left}.selected-list .c-list .c-token .c-remove{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:8px}.selected-list .c-list .c-token .c-remove svg{fill:#fff}.selected-list .fa-angle-down,.selected-list .fa-angle-up{font-size:15pt;position:absolute;right:10px;top:50%;transform:translateY(-50%)}.selected-list .c-angle-down,.selected-list .c-angle-up{width:12px;height:12px;position:absolute;right:10px;top:50%;transform:translateY(-50%);pointer-events:none}.selected-list .c-angle-down svg,.selected-list .c-angle-up svg{fill:#333}.selected-list .countplaceholder{position:absolute;right:45px;top:50%;transform:translateY(-50%)}.selected-list .c-btn{width:100%;padding:5px 10px;cursor:pointer;display:flex;position:relative}.selected-list .c-btn .c-icon{position:absolute;right:5px;top:50%;transform:translateY(-50%)}.dropdown-list.tagToBody{position:fixed}.dropdown-list{position:absolute;padding-top:14px;width:100%;z-index:99999}.dropdown-list ul{padding:0;list-style:none;overflow:auto;margin:0}.dropdown-list ul li{padding:10px;cursor:pointer;text-align:left}.dropdown-list ul li:first-child{padding-top:10px}.dropdown-list ul li:last-child{padding-bottom:10px}.dropdown-list ::-webkit-scrollbar{width:8px}.dropdown-list ::-webkit-scrollbar-thumb{background:#ccc;border-radius:5px}.dropdown-list ::-webkit-scrollbar-track{background:#f2f2f2}.arrow-up,.arrow-down{width:0;height:0;border-left:13px solid transparent;border-right:13px solid transparent;border-bottom:15px solid #fff;margin-left:15px;position:absolute;top:0}.arrow-down{bottom:-14px;top:unset;transform:rotate(180deg)}.arrow-2{border-bottom:15px solid #ccc;top:-1px}.arrow-down.arrow-2{top:unset;bottom:-16px}.list-area{border:1px solid #ccc;border-radius:3px;background:#fff;margin:0}.select-all{padding:10px;border-bottom:1px solid #ccc;text-align:left}.list-filter{border-bottom:1px solid #ccc;position:relative;padding-left:35px;height:35px}.list-filter input{border:0px;width:100%;height:100%;padding:0}.list-filter input:focus{outline:none}.list-filter .c-search{position:absolute;top:4px;left:10px;width:15px;height:15px}.list-filter .c-search svg{fill:#888}.list-filter .c-clear{position:absolute;top:4px;right:10px;width:15px;height:15px}.list-filter .c-clear svg{fill:#888}.pure-checkbox input[type=checkbox]{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.pure-checkbox input[type=checkbox]:focus+label:before,.pure-checkbox input[type=checkbox]:hover+label:before{background-color:none}.pure-checkbox input[type=checkbox]:active+label:before{transition-duration:0s}.pure-checkbox input[type=checkbox]:disabled+label{color:#ccc}.pure-checkbox input[type=checkbox]+label{position:relative;padding-left:2em;vertical-align:middle;-webkit-user-select:none;user-select:none;cursor:pointer;margin:0;font-weight:300}.pure-checkbox input[type=checkbox]+label:before{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:0;width:15px;height:15px;margin-top:-9px;text-align:center;transition:all .4s ease;border-radius:3px}.pure-checkbox input[type=checkbox]+label:after{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:0;width:15px;height:15px;margin-top:-9px;transform:scale(0);transform-origin:50%;transition:transform .2s ease-out}.pure-checkbox input[type=checkbox]:disabled+label:before{border-color:#ccc}.pure-checkbox input[type=checkbox]:disabled:focus+label:before .pure-checkbox input[type=checkbox]:disabled:hover+label:before{background-color:inherit}.pure-checkbox input[type=checkbox]:disabled:checked+label:before{background-color:#ccc}.pure-checkbox input[type=checkbox]+label:after{background-color:transparent;top:50%;left:3px;width:9px;height:4px;margin-top:-5px;border-style:solid;border-width:0 0 2px 2px;border-image:none;transform:rotate(-45deg) scale(0)}.pure-checkbox input[type=checkbox]:checked+label:after{content:\"\";transform:rotate(-45deg) scale(1);transition:transform .2s ease-out}.pure-checkbox input[type=radio]:checked+label:before{background-color:#fff}.pure-checkbox input[type=radio]:checked+label:after{transform:scale(1)}.pure-checkbox input[type=radio]+label:before{border-radius:50%}.pure-checkbox input[type=checkbox]:checked+label:after{transform:rotate(-45deg) scale(1)}.list-message{text-align:center;margin:0;padding:15px 0;font-size:initial}.list-grp{padding:0 15px!important}.list-grp h4{text-transform:capitalize;margin:15px 0 0;font-size:14px;font-weight:700}.list-grp>li{padding-left:15px!important}.grp-item{padding-left:30px!important}.grp-title{padding-bottom:0!important}.grp-title label{margin-bottom:0!important;font-weight:800;text-transform:capitalize}.grp-title:hover{background:none!important}.loading-icon{width:20px;position:absolute;right:10px;top:23px;z-index:1}.nodata-label{width:100%;text-align:center;padding:10px 0 0}.btn-container{text-align:center;padding:5px}.clear-all{width:8px;position:absolute;top:50%;right:30px;transform:translateY(-50%)}\n"] }]
2562
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: ListFilterPipe }], propDecorators: { data: [{
2546
+ args: [{ selector: 'angular2-multiselect', host: { '[class]': 'defaultSettings.classes' }, providers: [DROPDOWN_CONTROL_VALUE_ACCESSOR, DROPDOWN_CONTROL_VALIDATION], encapsulation: ViewEncapsulation.None, template: "<div class=\"cuppa-dropdown\" #cuppaDropdown>\n <div class=\"selected-list\" #selectedList>\n <div\n class=\"c-btn\"\n (click)=\"toggleDropdown($event)\"\n [ngClass]=\"{ disabled: settings.disabled }\"\n [attr.tabindex]=\"0\"\n >\n <span *ngIf=\"selectedItems?.length == 0\">{{ settings.text }}</span>\n <span *ngIf=\"settings.singleSelection && !badgeTempl\">\n <span\n *ngFor=\"\n let item of selectedItems;\n trackBy: trackByFn.bind(this);\n let k = index\n \"\n >\n {{ item[settings.labelKey] }}\n </span>\n </span>\n <span\n class=\"c-list\"\n *ngIf=\"\n selectedItems?.length > 0 && settings.singleSelection && badgeTempl\n \"\n >\n <div\n class=\"c-token\"\n *ngFor=\"\n let item of selectedItems;\n trackBy: trackByFn.bind(this);\n let k = index\n \"\n >\n <span *ngIf=\"!badgeTempl\" class=\"c-label\">{{\n item[settings.labelKey]\n }}</span>\n\n <span *ngIf=\"badgeTempl\" class=\"c-label\">\n <c-templateRenderer\n [data]=\"badgeTempl\"\n [item]=\"item\"\n ></c-templateRenderer>\n </span>\n <span\n class=\"c-remove\"\n (click)=\"onItemClick(item, k, $event); $event.stopPropagation()\"\n >\n <c-icon name=\"remove\" />\n </span>\n </div>\n </span>\n <div\n class=\"c-list\"\n *ngIf=\"selectedItems?.length > 0 && !settings.singleSelection\"\n >\n <div\n class=\"c-token\"\n *ngFor=\"\n let item of selectedItems;\n trackBy: trackByFn.bind(this);\n let k = index\n \"\n [hidden]=\"k > settings.badgeShowLimit - 1\"\n >\n @if (badgeTempl) {\n <span class=\"c-label\"\n ><c-templateRenderer\n [data]=\"badgeTempl\"\n [item]=\"item\"\n ></c-templateRenderer\n ></span>\n } @else {\n <span class=\"c-label\">{{ item[settings.labelKey] }}</span>\n }\n\n <span\n class=\"c-remove\"\n (click)=\"onItemClick(item, k, $event); $event.stopPropagation()\"\n >\n <c-icon [name]=\"'remove'\"></c-icon>\n </span>\n </div>\n </div>\n <span\n class=\"countplaceholder\"\n *ngIf=\"selectedItems?.length > settings.badgeShowLimit\"\n >+{{ selectedItems?.length - settings.badgeShowLimit }}</span\n >\n <span\n class=\"c-remove clear-all\"\n *ngIf=\"\n settings.clearAll && selectedItems?.length > 0 && !settings.disabled\n \"\n (click)=\"clearSelection($event); $event.stopPropagation()\"\n >\n <c-icon [name]=\"'remove'\"></c-icon>\n </span>\n @if (isActive) {\n <span class=\"c-angle-up\"><c-icon [name]=\"'angle-up'\"></c-icon></span>\n } @else {\n <span class=\"c-angle-down\"\n ><c-icon [name]=\"'angle-down'\"></c-icon\n ></span>\n }\n </div>\n </div>\n <div\n #dropdownList\n class=\"dropdown-list animated fadeIn\"\n [ngClass]=\"{ tagToBody: settings.tagToBody }\"\n [style.width.px]=\"dropDownWidth\"\n [style.top]=\"dropDownTop\"\n [style.bottom]=\"dropDownBottom\"\n [style.left.px]=\"dropDownLeft\"\n [hidden]=\"!isActive\"\n >\n <div\n [ngClass]=\"{\n 'arrow-up': settings.position == 'bottom',\n 'arrow-down': settings.position == 'top',\n }\"\n class=\"arrow-2\"\n ></div>\n <div\n [ngClass]=\"{\n 'arrow-up': settings.position == 'bottom',\n 'arrow-down': settings.position == 'top',\n }\"\n ></div>\n <div\n class=\"list-area\"\n [ngClass]=\"{ 'single-select-mode': settings.singleSelection }\"\n >\n <div\n class=\"pure-checkbox select-all\"\n *ngIf=\"\n settings.enableCheckAll &&\n !settings.singleSelection &&\n !settings.limitSelection &&\n data?.length > 0 &&\n !isDisabledItemPresent\n \"\n >\n <input\n *ngIf=\"settings.showCheckbox\"\n type=\"checkbox\"\n [checked]=\"isSelectAll\"\n [disabled]=\"settings.limitSelection == selectedItems?.length\"\n [id]=\"id\"\n (change)=\"toggleSelectAll($event)\"\n />\n <label [for]=\"id\">\n <span [hidden]=\"isSelectAll\">{{ settings.selectAllText }}</span>\n <span [hidden]=\"!isSelectAll\">{{ settings.unSelectAllText }}</span>\n </label>\n </div>\n <img class=\"loading-icon\" *ngIf=\"loading\" src=\"assets/img/loading.gif\" />\n <div class=\"list-filter\" *ngIf=\"settings.enableSearchFilter\">\n <span class=\"c-search\" id=\"searchIcon\">\n <c-icon [name]=\"'search'\"></c-icon>\n </span>\n @if (settings.lazyLoading) {\n <span\n [hidden]=\"filter == undefined || filter?.length == 0\"\n class=\"c-clear\"\n (click)=\"resetInfiniteSearch()\"\n >\n <c-icon [name]=\"'clear'\"></c-icon>\n </span>\n } @else {\n <span\n [hidden]=\"filter == undefined || filter?.length == 0\"\n class=\"c-clear\"\n (click)=\"clearSearch()\"\n >\n <c-icon [name]=\"'clear'\"></c-icon>\n </span>\n }\n\n @if (searchTempl) {\n <c-templateRenderer [data]=\"searchTempl\" [item]=\"item\" />\n } @else if (settings.groupBy && !settings.lazyLoading) {\n <input\n class=\"c-input\"\n #searchInput\n type=\"text\"\n [placeholder]=\"settings.searchPlaceholderText\"\n [(ngModel)]=\"filter\"\n (keyup)=\"filterGroupedList()\"\n aria-labelledby=\"searchIcon\"\n />\n } @else if (!settings.groupBy && !settings.lazyLoading) {\n <input\n class=\"c-input\"\n #searchInput\n type=\"text\"\n [placeholder]=\"settings.searchPlaceholderText\"\n [(ngModel)]=\"filter\"\n (keyup)=\"filteritems($event)\"\n aria-labelledby=\"searchIcon\"\n />\n } @else if (settings.lazyLoading) {\n <input\n class=\"c-input\"\n #searchInput\n type=\"text\"\n [placeholder]=\"settings.searchPlaceholderText\"\n [(ngModel)]=\"filter\"\n (keyup)=\"onKeyUp($event)\"\n aria-labelledby=\"searchIcon\"\n />\n }\n </div>\n <div\n class=\"filter-select-all\"\n *ngIf=\"\n !settings.lazyLoading &&\n settings.enableFilterSelectAll &&\n !isDisabledItemPresent\n \"\n >\n <div\n class=\"pure-checkbox select-all\"\n *ngIf=\"\n !settings.groupBy &&\n filter?.length > 0 &&\n filterLength > 0 &&\n !settings.singleSelection\n \"\n (click)=\"toggleFilterSelectAll()\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isFilterSelectAll\"\n [disabled]=\"settings.limitSelection == selectedItems?.length\"\n aria-labelledby=\"optionName\"\n aria-label=\"option\"\n />\n <label>\n <span [hidden]=\"isFilterSelectAll\">{{\n settings.filterSelectAllText\n }}</span>\n <span [hidden]=\"!isFilterSelectAll\">{{\n settings.filterUnSelectAllText\n }}</span>\n </label>\n </div>\n <div\n class=\"pure-checkbox select-all\"\n *ngIf=\"\n settings.groupBy &&\n filter?.length > 0 &&\n groupedData?.length > 0 &&\n !settings.singleSelection\n \"\n (click)=\"toggleFilterSelectAll()\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isFilterSelectAll && filter?.length > 0\"\n [disabled]=\"settings.limitSelection == selectedItems?.length\"\n aria-labelledby=\"option\"\n />\n <label>\n <span [hidden]=\"isFilterSelectAll\">{{\n settings.filterSelectAllText\n }}</span>\n <span [hidden]=\"!isFilterSelectAll\">{{\n settings.filterUnSelectAllText\n }}</span>\n </label>\n </div>\n </div>\n <div\n class=\"filter-select-all\"\n *ngIf=\"\n settings.lazyLoading &&\n settings.enableFilterSelectAll &&\n !isDisabledItemPresent &&\n !settings.singleSelection\n \"\n >\n <div\n class=\"pure-checkbox select-all\"\n *ngIf=\"filter?.length > 0 && infiniteFilterLength > 0\"\n (click)=\"toggleInfiniteFilterSelectAll()\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isInfiniteFilterSelectAll\"\n [disabled]=\"settings.limitSelection == selectedItems?.length\"\n aria-labelledby=\"option\"\n />\n <label>\n <span [hidden]=\"isInfiniteFilterSelectAll\">{{\n settings.filterSelectAllText\n }}</span>\n <span [hidden]=\"!isInfiniteFilterSelectAll\">{{\n settings.filterUnSelectAllText\n }}</span>\n </label>\n </div>\n </div>\n <div class=\"filter-select-all\" *ngIf=\"filter?.length\">\n <div class=\"btn-container\" *ngIf=\"settings.addNewItemOnFilter\">\n <button class=\"c-btn btn-iceblue\" (click)=\"addFilterNewItem()\">\n {{ settings.addNewButtonText }}\n </button>\n </div>\n </div>\n\n @if (\n !settings.groupBy && !settings.lazyLoading && itemTempl == undefined\n ) {\n <div\n [style.maxHeight]=\"settings.maxHeight + 'px'\"\n style=\"overflow: auto\"\n >\n <ul class=\"lazyContainer\">\n <li\n *ngFor=\"let item of data; let i = index\"\n (click)=\"onItemClick(item, i, $event)\"\n class=\"pure-checkbox\"\n [ngClass]=\"{ 'selected-item': isSelected(item) == true }\"\n >\n <input\n *ngIf=\"settings.showCheckbox\"\n type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n aria-labelledby=\"option\"\n />\n <label>{{ item[settings.labelKey] }}</label>\n </li>\n </ul>\n </div>\n } @else if (\n !settings.groupBy && settings.lazyLoading && itemTempl == undefined\n ) {\n <!-- lazy loading -->\n <div\n [style.maxHeight]=\"settings.maxHeight + 'px'\"\n style=\"overflow: auto\"\n >\n <ul\n virtualScroller\n #scroll\n [enableUnequalChildrenSizes]=\"randomSize\"\n [items]=\"virtualdata\"\n (vsStart)=\"onScrollEnd($event)\"\n (vsEnd)=\"onScrollEnd($event)\"\n [ngStyle]=\"{ height: settings.maxHeight + 'px' }\"\n class=\"lazyContainer\"\n >\n <li\n *ngFor=\"let item of scroll.viewPortItems; let i = index\"\n (click)=\"onItemClick(item, i, $event)\"\n class=\"pure-checkbox\"\n [ngClass]=\"{ 'selected-item': isSelected(item) == true }\"\n >\n <input\n *ngIf=\"settings.showCheckbox\"\n type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n />\n <label>{{ item[settings.labelKey] }}</label>\n </li>\n </ul>\n </div>\n } @else if (\n !settings.groupBy && !settings.lazyLoading && itemTempl != undefined\n ) {\n <!-- custom template -->\n <div\n [style.maxHeight]=\"settings.maxHeight + 'px'\"\n style=\"overflow: auto\"\n >\n <ul class=\"lazyContainer\">\n <li\n *ngFor=\"let item of data; let i = index\"\n (click)=\"onItemClick(item, i, $event)\"\n class=\"pure-checkbox\"\n [ngClass]=\"{ 'selected-item': isSelected(item) == true }\"\n >\n <input\n *ngIf=\"settings.showCheckbox\"\n type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n />\n <label></label>\n <c-templateRenderer\n [data]=\"itemTempl\"\n [item]=\"item\"\n ></c-templateRenderer>\n </li>\n </ul>\n </div>\n } @else if (\n !settings.groupBy && settings.lazyLoading && itemTempl != undefined\n ) {\n <!-- lazy loading and custom template -->\n <div\n [style.maxHeight]=\"settings.maxHeight + 'px'\"\n style=\"overflow: auto\"\n >\n <ul\n virtualScroller\n #scroll2\n [enableUnequalChildrenSizes]=\"randomSize\"\n [items]=\"virtualdata\"\n (vsStart)=\"onScrollEnd($event)\"\n (vsEnd)=\"onScrollEnd($event)\"\n class=\"lazyContainer\"\n [ngStyle]=\"{ height: settings.maxHeight + 'px' }\"\n >\n <li\n *ngFor=\"let item of scroll2.viewPortItems; let i = index\"\n (click)=\"onItemClick(item, i, $event)\"\n class=\"pure-checkbox\"\n [ngClass]=\"{ 'selected-item': isSelected(item) == true }\"\n >\n <input\n *ngIf=\"settings.showCheckbox\"\n type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n />\n <label></label>\n <c-templateRenderer\n [data]=\"itemTempl\"\n [item]=\"item\"\n ></c-templateRenderer>\n </li>\n </ul>\n </div>\n } @else if (\n settings.groupBy && settings.lazyLoading && itemTempl != undefined\n ) {\n <!-- lazy loading, group By and custom template -->\n <div\n [style.maxHeight]=\"settings.maxHeight + 'px'\"\n style=\"overflow: auto\"\n >\n <ul\n virtualScroller\n #scroll3\n [enableUnequalChildrenSizes]=\"randomSize\"\n [items]=\"virtualdata\"\n (vsStart)=\"onScrollEnd($event)\"\n (vsEnd)=\"onScrollEnd($event)\"\n [ngStyle]=\"{ height: settings.maxHeight + 'px' }\"\n class=\"lazyContainer\"\n >\n <span *ngFor=\"let item of scroll3.viewPortItems; let i = index\">\n <li\n (click)=\"onItemClick(item, i, $event)\"\n *ngIf=\"!item.grpTitle\"\n [ngClass]=\"{\n 'grp-title': item.grpTitle,\n 'grp-item': !item.grpTitle && !settings.singleSelection,\n }\"\n class=\"pure-checkbox\"\n >\n <input\n *ngIf=\"settings.showCheckbox && !settings.singleSelection\"\n type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n />\n <label></label>\n <c-templateRenderer\n [data]=\"itemTempl\"\n [item]=\"item\"\n ></c-templateRenderer>\n </li>\n <li\n *ngIf=\"item.grpTitle\"\n [ngClass]=\"{\n 'grp-title': item.grpTitle,\n 'grp-item': !item.grpTitle && !settings.singleSelection,\n }\"\n class=\"pure-checkbox\"\n >\n <input\n *ngIf=\"settings.showCheckbox\"\n type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n />\n <label></label>\n <c-templateRenderer\n [data]=\"itemTempl\"\n [item]=\"item\"\n ></c-templateRenderer>\n </li>\n </span>\n </ul>\n </div>\n } @else if (\n settings.groupBy && !settings.lazyLoading && itemTempl != undefined\n ) {\n <!-- group By and custom template -->\n <div\n [style.maxHeight]=\"settings.maxHeight + 'px'\"\n style=\"overflow: auto\"\n >\n <ul class=\"lazyContainer\">\n <span *ngFor=\"let item of groupedData; let i = index\">\n <li\n (click)=\"selectGroup(item)\"\n [ngClass]=\"{\n 'grp-title': item.grpTitle,\n 'grp-item': !item.grpTitle && !settings.singleSelection,\n }\"\n class=\"pure-checkbox\"\n >\n <input\n *ngIf=\"settings.showCheckbox && !settings.singleSelection\"\n type=\"checkbox\"\n [checked]=\"item.selected\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n />\n <label>{{ item[settings.labelKey] }}</label>\n <ul class=\"lazyContainer\">\n <span *ngFor=\"let val of item.list; let j = index\">\n <li\n (click)=\"\n onItemClick(val, j, $event); $event.stopPropagation()\n \"\n [ngClass]=\"{\n 'grp-title': val.grpTitle,\n 'grp-item': !val.grpTitle && !settings.singleSelection,\n }\"\n class=\"pure-checkbox\"\n >\n <input\n *ngIf=\"settings.showCheckbox\"\n type=\"checkbox\"\n [checked]=\"isSelected(val)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(val)) ||\n val.disabled\n \"\n />\n <label></label>\n <c-templateRenderer\n [data]=\"itemTempl\"\n [item]=\"val\"\n ></c-templateRenderer>\n </li>\n </span>\n </ul>\n </li>\n </span>\n </ul>\n </div>\n } @else if (\n settings.groupBy && settings.lazyLoading && itemTempl == undefined\n ) {\n <!-- lazy loading, group By -->\n <div\n [style.maxHeight]=\"settings.maxHeight + 'px'\"\n style=\"overflow: auto\"\n >\n <virtual-scroller\n [items]=\"groupedData\"\n (vsUpdate)=\"viewPortItems = $event\"\n (vsEnd)=\"onScrollEnd($event)\"\n [ngStyle]=\"{ height: settings.maxHeight + 'px' }\"\n >\n <ul\n virtualScroller\n #scroll4\n [enableUnequalChildrenSizes]=\"randomSize\"\n [items]=\"virtualdata\"\n (vsStart)=\"onScrollEnd($event)\"\n (vsEnd)=\"onScrollEnd($event)\"\n [ngStyle]=\"{ height: settings.maxHeight + 'px' }\"\n class=\"lazyContainer\"\n >\n <span *ngFor=\"let item of scroll4.viewPortItems; let i = index\">\n <li\n *ngIf=\"item.grpTitle\"\n [ngClass]=\"{\n 'grp-title': item.grpTitle,\n 'grp-item': !item.grpTitle && !settings.singleSelection,\n 'selected-item': isSelected(item) == true,\n }\"\n class=\"pure-checkbox\"\n >\n <input\n *ngIf=\"\n settings.showCheckbox &&\n !item.grpTitle &&\n !settings.singleSelection\n \"\n type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n />\n <label>{{ item[settings.labelKey] }}</label>\n </li>\n <li\n (click)=\"onItemClick(item, i, $event)\"\n *ngIf=\"!item.grpTitle\"\n [ngClass]=\"{\n 'grp-title': item.grpTitle,\n 'grp-item': !item.grpTitle && !settings.singleSelection,\n 'selected-item': isSelected(item) == true,\n }\"\n class=\"pure-checkbox\"\n >\n <input\n *ngIf=\"settings.showCheckbox && !item.grpTitle\"\n type=\"checkbox\"\n [checked]=\"isSelected(item)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n />\n <label>{{ item[settings.labelKey] }}</label>\n </li>\n </span>\n </ul>\n </virtual-scroller>\n </div>\n } @else if (\n settings.groupBy && !settings.lazyLoading && itemTempl == undefined\n ) {\n <!-- group By -->\n <div\n [style.maxHeight]=\"settings.maxHeight + 'px'\"\n style=\"overflow: auto\"\n >\n <ul class=\"lazyContainer\">\n <span *ngFor=\"let item of groupedData; let i = index\">\n <li\n (click)=\"selectGroup(item)\"\n [ngClass]=\"{\n 'grp-title': item.grpTitle,\n 'grp-item': !item.grpTitle && !settings.singleSelection,\n }\"\n class=\"pure-checkbox\"\n >\n <input\n *ngIf=\"settings.showCheckbox && !settings.singleSelection\"\n type=\"checkbox\"\n [checked]=\"item.selected\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(item)) ||\n item.disabled\n \"\n />\n <label>{{ item[settings.labelKey] }}</label>\n <ul class=\"lazyContainer\">\n <span *ngFor=\"let val of item.list; let j = index\">\n <li\n (click)=\"\n onItemClick(val, j, $event); $event.stopPropagation()\n \"\n [ngClass]=\"{\n 'selected-item': isSelected(val) == true,\n 'grp-title': val.grpTitle,\n 'grp-item': !val.grpTitle && !settings.singleSelection,\n }\"\n class=\"pure-checkbox\"\n >\n <input\n *ngIf=\"settings.showCheckbox\"\n type=\"checkbox\"\n [checked]=\"isSelected(val)\"\n [disabled]=\"\n (settings.limitSelection == selectedItems?.length &&\n !isSelected(val)) ||\n val.disabled\n \"\n />\n <label>{{ val[settings.labelKey] }}</label>\n </li>\n </span>\n </ul>\n </li>\n </span>\n </ul>\n </div>\n }\n\n @if (data?.length == 0) {\n <h5 class=\"list-message\">\n {{ settings.noDataLabel }}\n </h5>\n }\n </div>\n </div>\n</div>\n", styles: ["virtual-scroll{display:block;width:100%}.cuppa-dropdown{position:relative}.c-btn{display:inline-block;border-width:1px;line-height:1.25;border-radius:3px;font-size:.85rem;padding:5px 10px;cursor:pointer;align-items:center;min-height:38px}.c-btn.disabled{background:#ccc}.selected-list .c-list{float:left;padding:0;margin:0;width:calc(100% - 20px)}.selected-list .c-list .c-token{list-style:none;padding:4px 22px 4px 8px;border-radius:2px;margin-right:4px;margin-top:2px;float:left;position:relative}.selected-list .c-list .c-token .c-label{display:block;float:left}.selected-list .c-list .c-token .c-remove{position:absolute;right:8px;top:50%;transform:translateY(-50%);width:8px}.selected-list .c-list .c-token .c-remove svg{fill:#fff}.selected-list .fa-angle-down,.selected-list .fa-angle-up{font-size:15pt;position:absolute;right:10px;top:50%;transform:translateY(-50%)}.selected-list .c-angle-down,.selected-list .c-angle-up{width:12px;height:12px;position:absolute;right:10px;top:50%;transform:translateY(-50%);pointer-events:none}.selected-list .c-angle-down svg,.selected-list .c-angle-up svg{fill:#333}.selected-list .countplaceholder{position:absolute;right:45px;top:50%;transform:translateY(-50%)}.selected-list .c-btn{width:100%;padding:5px 10px;cursor:pointer;display:flex;position:relative}.selected-list .c-btn .c-icon{position:absolute;right:5px;top:50%;transform:translateY(-50%)}.dropdown-list.tagToBody{position:fixed}.dropdown-list{position:absolute;padding-top:14px;width:100%;z-index:99999}.dropdown-list ul{padding:0;list-style:none;overflow:auto;margin:0}.dropdown-list ul li{padding:10px;cursor:pointer;text-align:left}.dropdown-list ul li:first-child{padding-top:10px}.dropdown-list ul li:last-child{padding-bottom:10px}.dropdown-list ::-webkit-scrollbar{width:8px}.dropdown-list ::-webkit-scrollbar-thumb{background:#ccc;border-radius:5px}.dropdown-list ::-webkit-scrollbar-track{background:#f2f2f2}.arrow-up,.arrow-down{width:0;height:0;border-left:13px solid transparent;border-right:13px solid transparent;border-bottom:15px solid #fff;margin-left:15px;position:absolute;top:0}.arrow-down{bottom:-14px;top:unset;transform:rotate(180deg)}.arrow-2{border-bottom:15px solid #ccc;top:-1px}.arrow-down.arrow-2{top:unset;bottom:-16px}.list-area{border:1px solid #ccc;border-radius:3px;background:#fff;margin:0}.select-all{padding:10px;border-bottom:1px solid #ccc;text-align:left}.list-filter{border-bottom:1px solid #ccc;position:relative;padding-left:35px;height:35px}.list-filter input{border:0px;width:100%;height:100%;padding:0}.list-filter input:focus{outline:none}.list-filter .c-search{position:absolute;top:4px;left:10px;width:15px;height:15px}.list-filter .c-search svg{fill:#888}.list-filter .c-clear{position:absolute;top:4px;right:10px;width:15px;height:15px}.list-filter .c-clear svg{fill:#888}.pure-checkbox input[type=checkbox]{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.pure-checkbox input[type=checkbox]:focus+label:before,.pure-checkbox input[type=checkbox]:hover+label:before{background-color:none}.pure-checkbox input[type=checkbox]:active+label:before{transition-duration:0s}.pure-checkbox input[type=checkbox]:disabled+label{color:#ccc}.pure-checkbox input[type=checkbox]+label{position:relative;padding-left:2em;vertical-align:middle;-webkit-user-select:none;user-select:none;cursor:pointer;margin:0;font-weight:300}.pure-checkbox input[type=checkbox]+label:before{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:0;width:15px;height:15px;margin-top:-9px;text-align:center;transition:all .4s ease;border-radius:3px}.pure-checkbox input[type=checkbox]+label:after{box-sizing:content-box;content:\"\";position:absolute;top:50%;left:0;width:15px;height:15px;margin-top:-9px;transform:scale(0);transform-origin:50%;transition:transform .2s ease-out}.pure-checkbox input[type=checkbox]:disabled+label:before{border-color:#ccc}.pure-checkbox input[type=checkbox]:disabled:focus+label:before .pure-checkbox input[type=checkbox]:disabled:hover+label:before{background-color:inherit}.pure-checkbox input[type=checkbox]:disabled:checked+label:before{background-color:#ccc}.pure-checkbox input[type=checkbox]+label:after{background-color:transparent;top:50%;left:3px;width:9px;height:4px;margin-top:-5px;border-style:solid;border-width:0 0 2px 2px;border-image:none;transform:rotate(-45deg) scale(0)}.pure-checkbox input[type=checkbox]:checked+label:after{content:\"\";transform:rotate(-45deg) scale(1);transition:transform .2s ease-out}.pure-checkbox input[type=radio]:checked+label:before{background-color:#fff}.pure-checkbox input[type=radio]:checked+label:after{transform:scale(1)}.pure-checkbox input[type=radio]+label:before{border-radius:50%}.pure-checkbox input[type=checkbox]:checked+label:after{transform:rotate(-45deg) scale(1)}.list-message{text-align:center;margin:0;padding:15px 0;font-size:initial}.list-grp{padding:0 15px!important}.list-grp h4{text-transform:capitalize;margin:15px 0 0;font-size:14px;font-weight:700}.list-grp>li{padding-left:15px!important}.grp-item{padding-left:30px!important}.grp-title{padding-bottom:0!important}.grp-title label{margin-bottom:0!important;font-weight:800;text-transform:capitalize}.grp-title:hover{background:none!important}.loading-icon{width:20px;position:absolute;right:10px;top:23px;z-index:1}.nodata-label{width:100%;text-align:center;padding:10px 0 0}.btn-container{text-align:center;padding:5px}.clear-all{width:8px;position:absolute;top:50%;right:30px;transform:translateY(-50%)}\n"] }]
2547
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: ListFilterPipe }, { type: ClickOutsideService }], propDecorators: { data: [{
2563
2548
  type: Input
2564
2549
  }], settings: [{
2565
2550
  type: Input
@@ -2634,22 +2619,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
2634
2619
  }] } });
2635
2620
  class AngularMultiSelectModule {
2636
2621
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AngularMultiSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2637
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AngularMultiSelectModule, declarations: [AngularMultiSelect, ClickOutsideDirective,
2638
- ScrollDirective,
2639
- ListFilterPipe,
2622
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: AngularMultiSelectModule, declarations: [AngularMultiSelect, ListFilterPipe,
2640
2623
  Item,
2641
2624
  TemplateRenderer,
2642
2625
  Badge,
2643
2626
  Search,
2644
- CIcon], imports: [CommonModule, FormsModule, VirtualScrollerModule], exports: [AngularMultiSelect, ClickOutsideDirective,
2645
- ScrollDirective,
2646
- ListFilterPipe,
2627
+ CIcon], imports: [CommonModule, FormsModule, VirtualScrollerModule], exports: [AngularMultiSelect, ListFilterPipe,
2647
2628
  Item,
2648
2629
  TemplateRenderer,
2649
2630
  Badge,
2650
2631
  Search,
2651
2632
  CIcon] });
2652
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AngularMultiSelectModule, providers: [DataService, ListFilterPipe], imports: [CommonModule, FormsModule, VirtualScrollerModule] });
2633
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AngularMultiSelectModule, providers: [ListFilterPipe, ClickOutsideService], imports: [CommonModule, FormsModule, VirtualScrollerModule] });
2653
2634
  }
2654
2635
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AngularMultiSelectModule, decorators: [{
2655
2636
  type: NgModule,
@@ -2657,8 +2638,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
2657
2638
  imports: [CommonModule, FormsModule, VirtualScrollerModule],
2658
2639
  declarations: [
2659
2640
  AngularMultiSelect,
2660
- ClickOutsideDirective,
2661
- ScrollDirective,
2662
2641
  ListFilterPipe,
2663
2642
  Item,
2664
2643
  TemplateRenderer,
@@ -2668,8 +2647,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
2668
2647
  ],
2669
2648
  exports: [
2670
2649
  AngularMultiSelect,
2671
- ClickOutsideDirective,
2672
- ScrollDirective,
2673
2650
  ListFilterPipe,
2674
2651
  Item,
2675
2652
  TemplateRenderer,
@@ -2677,7 +2654,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
2677
2654
  Search,
2678
2655
  CIcon,
2679
2656
  ],
2680
- providers: [DataService, ListFilterPipe],
2657
+ providers: [ListFilterPipe, ClickOutsideService],
2681
2658
  }]
2682
2659
  }] });
2683
2660
 
@@ -2685,5 +2662,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
2685
2662
  * Generated bundle index. Do not edit.
2686
2663
  */
2687
2664
 
2688
- export { AngularMultiSelect, AngularMultiSelectModule, Badge, CIcon, ClickOutsideDirective, Item, ListFilterPipe, ScrollDirective, Search, TemplateRenderer };
2689
- //# sourceMappingURL=angular-multiselect.mjs.map
2665
+ export { AngularMultiSelect, AngularMultiSelectModule, Badge, CIcon, Item, ListFilterPipe, Search, TemplateRenderer };
2666
+ //# sourceMappingURL=angular-multiselect3.mjs.map